<?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>114777</bug_id>
          
          <creation_ts>2013-04-17 17:48:38 -0700</creation_ts>
          <short_desc>Renamed JSGlobalData to VM</short_desc>
          <delta_ts>2013-04-18 13:42:57 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>eflews.bot</cc>
    
    <cc>gyuyoung.kim</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>877584</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-04-17 17:48:38 -0700</bug_when>
    <thetext>Renamed JSGlobalData to VM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877587</commentid>
    <comment_count>1</comment_count>
      <attachid>198635</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-04-17 17:55:37 -0700</bug_when>
    <thetext>Created attachment 198635
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877655</commentid>
    <comment_count>2</comment_count>
      <attachid>198635</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-04-17 18:25:58 -0700</bug_when>
    <thetext>Comment on attachment 198635
Patch

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

&gt; Source/JavaScriptCore/JavaScriptCore.order:26
&gt; +__ZN3JSC12VM10storeVPtrsEv

Shouldn&apos;t this be __ZN3JSC2VM10storeVPtrsEv (the 12 preceding JSGlobalData is now 2 preceding VM)?

&gt; Source/JavaScriptCore/JavaScriptCore.order:123
&gt; -__ZN3JSC12JSGlobalData14sharedInstanceEv
&gt; -__ZN3JSC12JSGlobalDataC2ENS0_14GlobalDataTypeENS_8HeapTypeE
&gt; +__ZN3JSC12VM14sharedInstanceEv
&gt; +__ZN3JSC12VMC2ENS0_14GlobalDataTypeENS_8HeapTypeE

Ditto.  12 ==&gt; 2.

&gt; Source/JavaScriptCore/JavaScriptCore.order:127
&gt; -__ZN3JSC17CommonIdentifiersC1EPNS_12JSGlobalDataE
&gt; -__ZN3JSC17CommonIdentifiersC2EPNS_12JSGlobalDataE
&gt; -__ZN3JSC10Identifier3addEPNS_12JSGlobalDataEPKc
&gt; +__ZN3JSC17CommonIdentifiersC1EPNS_12VME
&gt; +__ZN3JSC17CommonIdentifiersC2EPNS_12VME
&gt; +__ZN3JSC10Identifier3addEPNS_12VMEPKc

12 =&gt; 2.

&gt; Source/JavaScriptCore/JavaScriptCore.order:132
&gt; -__ZN3JSC10IdentifierC1EPNS_12JSGlobalDataEPKc
&gt; +__ZN3JSC10IdentifierC1EPNS_12VMEPKc

12 =&gt; 2.

&gt; Source/JavaScriptCore/JavaScriptCore.order:139
&gt; -__ZN3JSC5LexerC1EPNS_12JSGlobalDataE
&gt; +__ZN3JSC5LexerC1EPNS_12VME

12 =&gt; 2.

&gt; Source/JavaScriptCore/JavaScriptCore.order:145
&gt; -__ZN3JSC4HeapC1EPNS_12JSGlobalDataE
&gt; -__ZN3JSC4HeapC2EPNS_12JSGlobalDataE
&gt; -__ZN3JSC11MarkedSpaceC1EPNS_12JSGlobalDataE
&gt; +__ZN3JSC4HeapC1EPNS_12VME
&gt; +__ZN3JSC4HeapC2EPNS_12VME
&gt; +__ZN3JSC11MarkedSpaceC1EPNS_12VME

12 =&gt; 2.

&gt; Source/JavaScriptCore/JavaScriptCore.order:151
&gt; -__ZN3JSC10HandleHeapC1EPNS_12JSGlobalDataE
&gt; +__ZN3JSC10HandleHeapC1EPNS_12VME

12 =&gt; 2.

&gt; Source/JavaScriptCore/JavaScriptCore.order:159
&gt; -__ZN3JSC11RegExpCacheC1EPNS_12JSGlobalDataE
&gt; -__ZN3JSC11InterpreterC1ERNS_12JSGlobalDataE
&gt; +__ZN3JSC11RegExpCacheC1EPNS_12VME
&gt; +__ZN3JSC11InterpreterC1ERNS_12VME

12 =&gt; 2.

&gt; Source/JavaScriptCore/JavaScriptCore.order:164
&gt; -__ZN3JSC11MarkedBlock6createEPNS_12JSGlobalDataEm
&gt; +__ZN3JSC11MarkedBlock6createEPNS_12VMEm

12 =&gt; 2.

&gt; Source/JavaScriptCore/JavaScriptCore.order:171
&gt; -__ZN3JSC9StructureC1ERNS_12JSGlobalDataE
&gt; -__ZN3JSC6StrongINS_9StructureEE3setERNS_12JSGlobalDataEPS1_
&gt; -__ZN3JSC9Structure6createERNS_12JSGlobalDataENS_7JSValueERKNS_8TypeInfoEjPKNS_9ClassInfoE
&gt; -__ZN3JSC9StructureC1ERNS_12JSGlobalDataENS_7JSValueERKNS_8TypeInfoEjPKNS_9ClassInfoE
&gt; +__ZN3JSC9StructureC1ERNS_12VME
&gt; +__ZN3JSC6StrongINS_9StructureEE3setERNS_12VMEPS1_
&gt; +__ZN3JSC9Structure6createERNS_12VMENS_7JSValueERKNS_8TypeInfoEjPKNS_9ClassInfoE
&gt; +__ZN3JSC9StructureC1ERNS_12VMENS_7JSValueERKNS_8TypeInfoEjPKNS_9ClassInfoE

12 =&gt; 2.

&gt; Source/JavaScriptCore/JavaScriptCore.order:180
&gt; -__ZN3JSC9JITThunksC1EPNS_12JSGlobalDataE
&gt; -__ZN3JSC9JITThunksC2EPNS_12JSGlobalDataE
&gt; -__ZN3JSC3JITC1EPNS_12JSGlobalDataEPNS_9CodeBlockE
&gt; -__ZN3JSC3JITC2EPNS_12JSGlobalDataEPNS_9CodeBlockE
&gt; -__ZN3JSC3JIT35privateCompileCTIMachineTrampolinesEPN3WTF6RefPtrINS_14ExecutablePoolEEEPNS_12JSGlobalDataEPNS_19TrampolineStructureE
&gt; +__ZN3JSC9JITThunksC1EPNS_12VME
&gt; +__ZN3JSC9JITThunksC2EPNS_12VME
&gt; +__ZN3JSC3JITC1EPNS_12VMEPNS_9CodeBlockE
&gt; +__ZN3JSC3JITC2EPNS_12VMEPNS_9CodeBlockE
&gt; +__ZN3JSC3JIT35privateCompileCTIMachineTrampolinesEPN3WTF6RefPtrINS_14ExecutablePoolEEEPNS_12VMEPNS_19TrampolineStructureE

12 =&gt; 2.

&gt; Source/JavaScriptCore/JavaScriptCore.order:195
&gt; -__ZN3JSC3JIT27privateCompileCTINativeCallEPNS_12JSGlobalDataEb
&gt; +__ZN3JSC3JIT27privateCompileCTINativeCallEPNS_12VMEb

12 =&gt; 2.

&gt; Source/JavaScriptCore/JavaScriptCore.order:203
&gt; -__ZN3JSC14JSGlobalObjectnwEmPNS_12JSGlobalDataE
&gt; +__ZN3JSC14JSGlobalObjectnwEmPNS_12VME

12 =&gt; 2.

&gt; Source/JavaScriptCore/JavaScriptCore.order:211
&gt; -__ZN3JSC16InternalFunctionC2EPNS_12JSGlobalDataEPNS_14JSGlobalObjectEPNS_9StructureERKNS_10IdentifierE
&gt; +__ZN3JSC16InternalFunctionC2EPNS_12VMEPNS_14JSGlobalObjectEPNS_9StructureERKNS_10IdentifierE

12 =&gt; 2.  And so on below ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877659</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-04-17 19:00:33 -0700</bug_when>
    <thetext>&gt; &gt; Source/JavaScriptCore/JavaScriptCore.order:26
&gt; &gt; +__ZN3JSC12VM10storeVPtrsEv
&gt; 
&gt; Shouldn&apos;t this be __ZN3JSC2VM10storeVPtrsEv (the 12 preceding JSGlobalData is now 2 preceding VM)?

You&apos;re probably right, but it&apos;s OK for the .order file to be wrong for now. It&apos;s just an optimization, not a correctness issue, and we re-auto-generate it for each release.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877681</commentid>
    <comment_count>4</comment_count>
      <attachid>198674</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-04-17 20:38:02 -0700</bug_when>
    <thetext>Created attachment 198674
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877685</commentid>
    <comment_count>5</comment_count>
      <attachid>198674</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-04-17 20:46:37 -0700</bug_when>
    <thetext>Comment on attachment 198674
Patch

Attachment 198674 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/172113</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877686</commentid>
    <comment_count>6</comment_count>
      <attachid>198675</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-04-17 20:59:12 -0700</bug_when>
    <thetext>Created attachment 198675
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877973</commentid>
    <comment_count>7</comment_count>
      <attachid>198746</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-04-18 10:52:24 -0700</bug_when>
    <thetext>Created attachment 198746
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878031</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-04-18 12:30:58 -0700</bug_when>
    <thetext>Committed r148696: &lt;http://trac.webkit.org/changeset/148696&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878062</commentid>
    <comment_count>9</comment_count>
      <attachid>198746</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-18 13:42:57 -0700</bug_when>
    <thetext>Comment on attachment 198746
Patch

Looks like this is landed already.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198635</attachid>
            <date>2013-04-17 17:55:37 -0700</date>
            <delta_ts>2013-04-17 20:38:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-114777-20130417175508.patch</filename>
            <type>text/plain</type>
            <size>1993274</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4NjUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4NTQg
QEAKKzIwMTMtMDQtMTcgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZW5hbWVkIEpTR2xvYmFsRGF0YSB0byBWTQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0Nzc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBUEkvQVBJQ2FzdC5oOgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKHRvSlMpOgorICAgICAgICAodG9SZWYpOgorICAgICAgICAqIEFQSS9BUElTaGlt
cy5oOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW1XaXRob3V0TG9jazo6QVBJRW50cnlTaGlt
V2l0aG91dExvY2spOgorICAgICAgICAoQVBJRW50cnlTaGltV2l0aG91dExvY2spOgorICAgICAg
ICAoSlNDOjpBUElFbnRyeVNoaW06OkFQSUVudHJ5U2hpbSk6CisgICAgICAgIChBUElFbnRyeVNo
aW0pOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW06On5BUElFbnRyeVNoaW0pOgorICAgICAg
ICAoSlNDOjpBUElDYWxsYmFja1NoaW06OkFQSUNhbGxiYWNrU2hpbSk6CisgICAgICAgIChKU0M6
OkFQSUNhbGxiYWNrU2hpbTo6fkFQSUNhbGxiYWNrU2hpbSk6CisgICAgICAgIChBUElDYWxsYmFj
a1NoaW0pOgorICAgICAgICAqIEFQSS9KU0FQSVdyYXBwZXJPYmplY3QuaDoKKyAgICAgICAgKEpT
QVBJV3JhcHBlck9iamVjdCk6CisgICAgICAgICogQVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbToK
KyAgICAgICAgKEpTQzo6OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU0FQSVdy
YXBwZXJPYmplY3Q6OkpTQVBJV3JhcHBlck9iamVjdCk6CisgICAgICAgIChKU0M6OkpTQVBJV3Jh
cHBlck9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0FQSVdyYXBwZXJP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIEFQSS9KU0Jhc2UuY3BwOgorICAgICAg
ICAoSlNHYXJiYWdlQ29sbGVjdCk6CisgICAgICAgIChKU1JlcG9ydEV4dHJhTWVtb3J5Q29zdCk6
CisgICAgICAgIChKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmcpOgorICAg
ICAgICAqIEFQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpKU0Nh
bGxiYWNrQ29uc3RydWN0b3I6OkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6
OkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIEFQSS9K
U0NhbGxiYWNrQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja0NvbnN0cnVj
dG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrRnVuY3Rpb24u
Y3BwOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKEpTQzo6SlNDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAqIEFQ
SS9KU0NhbGxiYWNrRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQ2FsbGJhY2tGdW5jdGlvbik6Cisg
ICAgICAgIChKU0M6OkpTQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5jcHA6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIEFQSS9KU0NhbGxi
YWNrT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3REYXRhOjpzZXRQcml2
YXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0RGF0YTo6SlNQcml2
YXRlUHJvcGVydHlNYXA6OnNldFByaXZhdGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0NhbGxiYWNr
T2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDo6c2V0UHJpdmF0ZVByb3Bl
cnR5KToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oOgorICAgICAg
ICAoSlNDOjo6OkpTQ2FsbGJhY2tPYmplY3QpOgorICAgICAgICAoSlNDOjo6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKEpTQzo6OjpwdXQpOgorICAgICAgICAoSlNDOjo6OnN0YXRpY0Z1bmN0
aW9uR2V0dGVyKToKKyAgICAgICAgKiBBUEkvSlNDbGFzc1JlZi5jcHA6CisgICAgICAgIChPcGFx
dWVKU0NsYXNzQ29udGV4dERhdGE6Ok9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSk6CisgICAgICAg
IChPcGFxdWVKU0NsYXNzOjpjb250ZXh0RGF0YSk6CisgICAgICAgIChPcGFxdWVKU0NsYXNzOjpw
cm90b3R5cGUpOgorICAgICAgICAqIEFQSS9KU0NsYXNzUmVmLmg6CisgICAgICAgIChPcGFxdWVK
U0NsYXNzQ29udGV4dERhdGEpOgorICAgICAgICAqIEFQSS9KU0NvbnRleHQubW06CisgICAgICAg
ICgtW0pTQ29udGV4dCBzZXRFeGNlcHRpb246XSk6CisgICAgICAgICgtW0pTQ29udGV4dCBpbml0
V2l0aEdsb2JhbENvbnRleHRSZWY6XSk6CisgICAgICAgICgrW0pTQ29udGV4dCBjb250ZXh0V2l0
aEdsb2JhbENvbnRleHRSZWY6XSk6CisgICAgICAgICogQVBJL0pTQ29udGV4dFJlZi5jcHA6Cisg
ICAgICAgIChKU0NvbnRleHRHcm91cENyZWF0ZSk6CisgICAgICAgIChKU0NvbnRleHRHcm91cFJl
bGVhc2UpOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0Q3JlYXRlKToKKyAgICAgICAgKEpTR2xv
YmFsQ29udGV4dENyZWF0ZUluR3JvdXApOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0UmV0YWlu
KToKKyAgICAgICAgKEpTR2xvYmFsQ29udGV4dFJlbGVhc2UpOgorICAgICAgICAoSlNDb250ZXh0
R2V0R3JvdXApOgorICAgICAgICAoSlNDb250ZXh0Q3JlYXRlQmFja3RyYWNlKToKKyAgICAgICAg
KiBBUEkvSlNPYmplY3RSZWYuY3BwOgorICAgICAgICAoSlNPYmplY3RNYWtlKToKKyAgICAgICAg
KEpTT2JqZWN0TWFrZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTT2JqZWN0TWFrZUZ1bmN0aW9u
KToKKyAgICAgICAgKEpTT2JqZWN0U2V0UHJvdG90eXBlKToKKyAgICAgICAgKEpTT2JqZWN0SGFz
UHJvcGVydHkpOgorICAgICAgICAoSlNPYmplY3RHZXRQcm9wZXJ0eSk6CisgICAgICAgIChKU09i
amVjdFNldFByb3BlcnR5KToKKyAgICAgICAgKEpTT2JqZWN0RGVsZXRlUHJvcGVydHkpOgorICAg
ICAgICAoSlNPYmplY3RHZXRQcml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlNPYmplY3RTZXRQ
cml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlNPYmplY3REZWxldGVQcml2YXRlUHJvcGVydHkp
OgorICAgICAgICAoT3BhcXVlSlNQcm9wZXJ0eU5hbWVBcnJheTo6T3BhcXVlSlNQcm9wZXJ0eU5h
bWVBcnJheSk6CisgICAgICAgIChPcGFxdWVKU1Byb3BlcnR5TmFtZUFycmF5KToKKyAgICAgICAg
KEpTT2JqZWN0Q29weVByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNQcm9wZXJ0eU5hbWVBcnJh
eVJlbGVhc2UpOgorICAgICAgICAoSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvckFkZE5hbWUpOgor
ICAgICAgICAqIEFQSS9KU1NjcmlwdFJlZi5jcHA6CisgICAgICAgIChPcGFxdWVKU1NjcmlwdDo6
Y3JlYXRlKToKKyAgICAgICAgKE9wYXF1ZUpTU2NyaXB0Ojp2bSk6CisgICAgICAgIChPcGFxdWVK
U1NjcmlwdDo6T3BhcXVlSlNTY3JpcHQpOgorICAgICAgICAoT3BhcXVlSlNTY3JpcHQpOgorICAg
ICAgICAocGFyc2VTY3JpcHQpOgorICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tOgor
ICAgICAgICAoc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgpOgorICAgICAgICAqIEFQSS9KU1ZpcnR1
YWxNYWNoaW5lSW50ZXJuYWwuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogQVBJL0pTV3Jh
cHBlck1hcC5tbToKKyAgICAgICAgKG1ha2VXcmFwcGVyKToKKyAgICAgICAgKiBBUEkvT2JqQ0Nh
bGxiYWNrRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb246OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tOgor
ICAgICAgICAoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBB
UEkvT3BhcXVlSlNTdHJpbmcuY3BwOgorICAgICAgICAoT3BhcXVlSlNTdHJpbmc6OmlkZW50aWZp
ZXIpOgorICAgICAgICAqIEFQSS9PcGFxdWVKU1N0cmluZy5oOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKE9wYXF1ZUpTU3RyaW5nKToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIEpTQ1R5cGVkQXJyYXlTdHVicy5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS5vcmRlcjoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZUV4cG9ydHMuZGVmOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ou
ZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
RXhwb3J0R2VuZXJhdG9yL0phdmFTY3JpcHRDb3JlRXhwb3J0cy5kZWYuaW46CisgICAgICAgICog
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBLZXl3
b3JkTG9va3VwR2VuZXJhdG9yLnB5OgorICAgICAgICAoVHJpZS5wcmludFN1YlRyZWVBc0MpOgor
ICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5j
cHA6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6ZXhlY3V0YWJsZUNvcHkpOgorICAgICAg
ICAqIGFzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEFSTUFzc2VtYmxlcik6Cisg
ICAgICAgICogYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBc3Nl
bWJsZXJCdWZmZXI6OmV4ZWN1dGFibGVDb3B5KToKKyAgICAgICAgKiBhc3NlbWJsZXIvQXNzZW1i
bGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZm
ZXJXaXRoQ29uc3RhbnRQb29sOjpleGVjdXRhYmxlQ29weSk6CisgICAgICAgICogYXNzZW1ibGVy
L0xpbmtCdWZmZXIuY3BwOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpsaW5rQ29kZSk6Cisg
ICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChKU0M6OkxpbmtCdWZmZXI6OkxpbmtCdWZmZXIpOgorICAgICAgICAoTGlua0J1ZmZlcik6Cisg
ICAgICAgICogYXNzZW1ibGVyL01JUFNBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6TUlQU0Fz
c2VtYmxlcjo6ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAqIGFzc2VtYmxlci9TSDRBc3NlbWJs
ZXIuaDoKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpleGVjdXRhYmxlQ29weSk6CisgICAg
ICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJs
ZXI6OmV4ZWN1dGFibGVDb3B5KToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpYODZJbnN0
cnVjdGlvbkZvcm1hdHRlcjo6ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nh
bGxMaW5rSW5mby5jcHA6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dW5saW5rKToKKyAg
ICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uaDoKKyAgICAgICAgKENhbGxMaW5rSW5mbyk6
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6ZHVtcFN0
cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRTdHJ1Y3R1cmVzKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6On5Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0U3RydWN0dXJl
cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNyZWF0ZUFjdGl2YXRpb24pOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnVubGlua0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxp
bmtJbmNvbWluZ0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5kQ2xvc3VyZUNh
bGxGb3JSZXR1cm5QQyk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OmpldHRpc29u
SW1wbCk6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6OmpldHRpc29uSW1wbCk6CisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpqZXR0aXNvbkltcGwpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnByZWRpY3RlZE1hY2hpbmVDb2RlU2l6ZSk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6dXNlc09wY29kZSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6YXBwZW5kV2Vha1JlZmVyZW5jZSk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6YXBwZW5kV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnNldEpJVENvZGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNl
dEdsb2JhbERhdGEpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZtKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjp2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNl
dENvbnN0YW50UmVnaXN0ZXJzKToKKyAgICAgICAgKENvZGVCbG9jayk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb246OldlYWtSZWZlcmVuY2VUcmFuc2l0
aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9FdmFsQ29kZUNhY2hlLmg6CisgICAgICAgIChKU0M6
OkV2YWxDb2RlQ2FjaGU6OmdldFNsb3cpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0
dXMuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KToK
KyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvckNoYWluKToKKyAgICAgICAg
KEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvR2V0
QnlJZFN0YXR1cy5oOgorICAgICAgICAoR2V0QnlJZFN0YXR1cyk6CisgICAgICAgICogYnl0ZWNv
ZGUvSW5zdHJ1Y3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SW5zdHJ1Y3Rpb246Okluc3RydWN0aW9u
KToKKyAgICAgICAgKiBieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oOgorICAgICAg
ICAoSlNDOjpPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChK
U0M6Ok9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpwb3NzaWJsZURlZmF1bHRQcm9wZXJ0eUNvdW50
KToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaDoK
KyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0OjpQb2x5bW9ycGhp
Y1N0dWJJbmZvOjpzZXQpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3Q6OlBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCk6CisgICAgICAgICogYnl0ZWNv
ZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNz
Ojp0cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6cmVwbGFjZSk6Cisg
ICAgICAgICogYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmNwcDoKKyAgICAgICAgKEpTQzo6
Y29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0cyk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5jcHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQp
OgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBi
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoUHV0QnlJ
ZFN0YXR1cyk6CisgICAgICAgICogYnl0ZWNvZGUvUmVzb2x2ZUdsb2JhbFN0YXR1cy5jcHA6Cisg
ICAgICAgIChKU0M6OmNvbXB1dGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJ5dGVjb2RlL1Nh
bXBsaW5nVG9vbC5jcHA6CisgICAgICAgIChKU0M6OlNhbXBsaW5nVG9vbDo6bm90aWZ5T2ZTY29w
ZSk6CisgICAgICAgICogYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmg6CisgICAgICAgIChKU0M6OlNj
cmlwdFNhbXBsZVJlY29yZDo6U2NyaXB0U2FtcGxlUmVjb3JkKToKKyAgICAgICAgKFNhbXBsaW5n
VG9vbCk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRHZXRCeUlkU2VsZik6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0R2V0QnlJZFByb3RvKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlU3R1YkluZm86OmluaXRHZXRCeUlkQ2hhaW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU3R1YkluZm86OmluaXRQdXRCeUlkUmVwbGFjZSk6CisgICAgICAgICogYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUZ1bmN0aW9uQ29kZUJs
b2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGU6OmxpbmspOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
ZnJvbUdsb2JhbENvZGUpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6Y29kZUJsb2NrRm9yKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVubGlu
a2VkQ29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjphZGRSZWdFeHApOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9jazo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRk
RnVuY3Rpb25EZWNsKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZEZ1bmN0
aW9uRXhwcik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp2bSk6CisgICAgICAg
IChVbmxpbmtlZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OlVubGlua2VkR2xvYmFsQ29kZUJsb2NrOjpV
bmxpbmtlZEdsb2JhbENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlVubGlua2VkUHJvZ3JhbUNv
ZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
OjphZGRGdW5jdGlvbkRlY2xhcmF0aW9uKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrOjpVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZFByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkRXZhbENvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRFdmFs
Q29kZUJsb2NrOjpVbmxpbmtlZEV2YWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZEV2YWxDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2s6OlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjphZGRDb25zdGFudCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0TG9hZCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGlyZWN0UHV0
QnlJZCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRTdHJpbmdDb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpleHBlY3RlZEZ1bmN0aW9uRm9y
SWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VGhyb3dS
ZWZlcmVuY2VFcnJvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVh
ZE9ubHlFeGNlcHRpb25JZk5lZWRlZCk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmg6CisgICAgICAgIChCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjp2bSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
Ojpwcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6Om1ha2VG
dW5jdGlvbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAg
ICAgIChKU0M6OlJlZ0V4cE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFycmF5
Tm9kZTo6dG9Bcmd1bWVudExpc3QpOgorICAgICAgICAoSlNDOjpBcHBseUZ1bmN0aW9uQ2FsbERv
dE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZOb2RlOjplbWl0
Qnl0ZWNvZGUpOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6RGVidWdnZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6ZXZh
bHVhdGVJbkdsb2JhbENhbGxGcmFtZSk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuaDoK
KyAgICAgICAgKEpTQyk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJBY3RpdmF0aW9uOjpEZWJ1Z2dlckFjdGl2YXRpb24p
OgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckFjdGl2YXRpb246OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6RGVi
dWdnZXJBY3RpdmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckFjdGl2YXRp
b246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChEZWJ1Z2dlckFjdGl2YXRpb24pOgorICAg
ICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6RGVi
dWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHMp
OgorICAgICAgICAqIGRmZy9ERkdBc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpBc3NlbWJseUhlbHBlcnM6OkFzc2VtYmx5SGVscGVycyk6CisgICAgICAgIChKU0M6OkRGRzo6
QXNzZW1ibHlIZWxwZXJzOjp2bSk6CisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJz
OjpkZWJ1Z0NhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEV4
Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEFzc2VtYmx5SGVscGVycyk6CisgICAgICAgICogZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoQnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24p
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3Rh
Y2tFbnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJs
b2NrKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuaDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgICogZGZnL0RGR0NDYWxsSGVscGVycy5oOgorICAgICAgICAoSlNDOjpERkc6OkND
YWxsSGVscGVyczo6Q0NhbGxIZWxwZXJzKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYW5IYW5kbGVPcGNvZGVzKToKKyAgICAgICAgKiBk
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0
YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKiBkZmcvREZHRGlzYXNz
ZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEaXNhc3NlbWJsZXI6OnJlcG9ydFRvUHJv
ZmlsZXIpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuaDoKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVw
UGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6aXNTdHJp
bmdQcm90b3R5cGVNZXRob2RTYW5lKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpj
YW5PcHRpbWl6ZVN0cmluZ09iamVjdEFjY2Vzcyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6R3JhcGgpOgorICAgICAgICAqIGRmZy9ERkdH
cmFwaC5oOgorICAgICAgICAoR3JhcGgpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OkpJVENvbXBpbGVyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKToKKyAgICAgICAgKEpTQzo6
REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6
OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rp
b24pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVP
U1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAg
ICogZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpP
U1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENv
bXBpbGVyNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRDb21waWxlcjo6Y29tcGls
ZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpwdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6b3BlcmF0aW9uUHV0QnlWYWxJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRl
KToKKyAgICAgICAgKiBkZmcvREZHUGhhc2UuaDoKKyAgICAgICAgKEpTQzo6REZHOjpQaGFzZTo6
dm0pOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpn
ZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDYWNo
ZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRExpc3QpOgorICAg
ICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6
OkRGRzo6ZW1pdFB1dFJlcGxhY2VTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjplbWl0UHV0VHJh
bnNpdGlvblN0dWIpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUNhY2hlUHV0QnlJRCk6CisgICAg
ICAgIChKU0M6OkRGRzo6dHJ5QnVpbGRQdXRCeUlkTGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6
bGlua1Nsb3dGb3IpOgorICAgICAgICAoSlNDOjpERkc6OmRmZ0xpbmtGb3IpOgorICAgICAgICAo
SlNDOjpERkc6OmRmZ0xpbmtTbG93Rm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpkZmdMaW5rQ2xv
c3VyZUNhbGwpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnR5cGVkQXJyYXlEZXNjcmlwdG9yKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxp
dHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxP
blN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVGcm9t
Q2hhckNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTWFr
ZVJvcGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaW5n
RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9T
dHJpbmdPbkNlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGVPYmplY3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVP
YmplY3RPck90aGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRl
U3RyaW5nT3JTdHJpbmdPYmplY3QpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpwcmVwYXJlRm9yRXh0ZXJuYWxD
YWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlQmFz
aWNTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9j
YXRlSlNPYmplY3QpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2Jq
ZWN0T3JPdGhlckVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJy
YW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0
VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdUaHVua3Mu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpERkc6OnRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6c2xvd1BhdGhGb3IpOgorICAgICAgICAoSlNDOjpE
Rkc6OmxpbmtGb3JUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6bGlua0NhbGxU
aHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6bGlua0NvbnN0cnVjdFRodW5rR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkRGRzo6dmlydHVhbEZvclRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6REZHOjp2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
REZHOjp2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGRmZy9ERkdU
aHVua3MuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGhlYXAv
QmxvY2tBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaGVhcC9Db3BpZWRT
cGFjZS5jcHA6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZVNsb3dDYXNl
KToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OnRyeVJlYWxsb2NhdGUpOgorICAgICAgICAq
IGhlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjp0
cnlBbGxvY2F0ZSk6CisgICAgICAgICogaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwOgorICAg
ICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERhdGE6OkdDVGhyZWFkU2hhcmVkRGF0YSk6CisgICAg
ICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6cmVzZXQpOgorICAgICAgICAqIGhlYXAvR0NU
aHJlYWRTaGFyZWREYXRhLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoR0NUaHJlYWRTaGFy
ZWREYXRhKToKKyAgICAgICAgKiBoZWFwL0hhbmRsZVNldC5jcHA6CisgICAgICAgIChKU0M6Okhh
bmRsZVNldDo6SGFuZGxlU2V0KToKKyAgICAgICAgKEpTQzo6SGFuZGxlU2V0Ojp+SGFuZGxlU2V0
KToKKyAgICAgICAgKEpTQzo6SGFuZGxlU2V0Ojpncm93KToKKyAgICAgICAgKiBoZWFwL0hhbmRs
ZVNldC5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEhhbmRsZVNldCk6CisgICAgICAgIChK
U0M6OkhhbmRsZVNldDo6dm0pOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChK
U0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bGFz
dENoYW5jZVRvRmluYWxpemUpOgorICAgICAgICAoSlNDOjpIZWFwOjpwcm90ZWN0KToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6dW5wcm90ZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6c3RhY2spOgor
ICAgICAgICAoSlNDOjpIZWFwOjpnZXRDb25zZXJ2YXRpdmVSZWdpc3RlclJvb3RzKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVsZXRlQWxs
Q29tcGlsZWRDb2RlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdCk6CisgICAgICAgIChK
U0M6OkhlYXA6OmlzVmFsaWRBbGxvY2F0aW9uKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dm0pOgor
ICAgICAgICAqIGhlYXAvSGVhcFRpbWVyLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcFRpbWVyOjpI
ZWFwVGltZXIpOgorICAgICAgICAoSlNDOjpIZWFwVGltZXI6OnRpbWVyRGlkRmlyZSk6CisgICAg
ICAgIChKU0M6OkhlYXBUaW1lcjo6dGltZXJFdmVudCk6CisgICAgICAgICogaGVhcC9IZWFwVGlt
ZXIuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChIZWFwVGltZXIpOgorICAgICAgICAqIGhl
YXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2Vl
cGVyOjpJbmNyZW1lbnRhbFN3ZWVwZXIpOgorICAgICAgICAoSlNDOjpJbmNyZW1lbnRhbFN3ZWVw
ZXI6OnN3ZWVwTmV4dEJsb2NrKToKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjp3
aWxsRmluaXNoU3dlZXBpbmcpOgorICAgICAgICAoSlNDOjpJbmNyZW1lbnRhbFN3ZWVwZXI6OmNy
ZWF0ZSk6CisgICAgICAgICogaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaDoKKyAgICAgICAgKElu
Y3JlbWVudGFsU3dlZXBlcik6CisgICAgICAgICogaGVhcC9Mb2NhbC5oOgorICAgICAgICAoTG9j
YWwpOgorICAgICAgICAoSlNDOjo6OkxvY2FsKToKKyAgICAgICAgKEpTQzo6TG9jYWxTdGFjazo6
TG9jYWxTdGFjayk6CisgICAgICAgIChKU0M6OkxvY2FsU3RhY2s6OnB1c2gpOgorICAgICAgICAo
TG9jYWxTdGFjayk6CisgICAgICAgICogaGVhcC9Mb2NhbFNjb3BlLmg6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoTG9jYWxTY29wZSk6CisgICAgICAgIChKU0M6OkxvY2FsU2NvcGU6OkxvY2Fs
U2NvcGUpOgorICAgICAgICAqIGhlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcDoKKyAgICAgICAg
KEpTQzo6TWFjaGluZVRocmVhZHM6OmFkZEN1cnJlbnRUaHJlYWQpOgorICAgICAgICAqIGhlYXAv
TWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjphbGxv
Y2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmNwcDoKKyAgICAgICAg
KEpTQzo6TWFya2VkQmxvY2s6Ok1hcmtlZEJsb2NrKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJs
b2NrLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjp2bSk6CisgICAgICAgICogaGVhcC9T
bG90VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcik6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpzZXR1cCk6CisgICAgICAgICogaGVhcC9TdHJv
bmcuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChTdHJvbmcpOgorICAgICAgICAoSlNDOjpT
dHJvbmc6Om9wZXJhdG9yPSk6CisgICAgICAgICogaGVhcC9TdHJvbmdJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6Ojo6U3Ryb25nKToKKyAgICAgICAgKEpTQzo6OjpzZXQpOgorICAgICAgICAqIGhl
YXAvU3VwZXJSZWdpb24uaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaGVhcC9XZWFrU2V0
LmNwcDoKKyAgICAgICAgKiBoZWFwL1dlYWtTZXQuaDoKKyAgICAgICAgKFdlYWtTZXQpOgorICAg
ICAgICAoSlNDOjpXZWFrU2V0OjpXZWFrU2V0KToKKyAgICAgICAgKEpTQzo6V2Vha1NldDo6dm0p
OgorICAgICAgICAqIGludGVycHJldGVyL0Fic3RyYWN0UEMuY3BwOgorICAgICAgICAoSlNDOjpB
YnN0cmFjdFBDOjpBYnN0cmFjdFBDKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9BYnN0cmFjdFBD
Lmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoQWJzdHJhY3RQQyk6CisgICAgICAgICogaW50
ZXJwcmV0ZXIvQ2FjaGVkQ2FsbC5oOgorICAgICAgICAoSlNDOjpDYWNoZWRDYWxsOjpDYWNoZWRD
YWxsKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEV4ZWNT
dGF0ZSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6Y2xlYXJFeGNlcHRpb24pOgorICAgICAg
ICAoSlNDOjpFeGVjU3RhdGU6OmNsZWFyU3VwcGxlbWVudGFyeUV4Y2VwdGlvbkluZm8pOgorICAg
ICAgICAoSlNDOjpFeGVjU3RhdGU6OmV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0
ZTo6aGFkRXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpwcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjplbXB0eUxpc3QpOgorICAgICAgICAoSlNDOjpF
eGVjU3RhdGU6OmludGVycHJldGVyKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpoZWFwKToK
KyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjphcnJheUNvbnN0cnVjdG9yVGFibGUpOgorICAgICAg
ICAoSlNDOjpFeGVjU3RhdGU6OmFycmF5UHJvdG90eXBlVGFibGUpOgorICAgICAgICAoSlNDOjpF
eGVjU3RhdGU6OmJvb2xlYW5Qcm90b3R5cGVUYWJsZSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0
ZTo6ZGF0ZVRhYmxlKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpkYXRlQ29uc3RydWN0b3JU
YWJsZSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6ZXJyb3JQcm90b3R5cGVUYWJsZSk6Cisg
ICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6Z2xvYmFsT2JqZWN0VGFibGUpOgorICAgICAgICAoSlND
OjpFeGVjU3RhdGU6Ompzb25UYWJsZSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6bWF0aFRh
YmxlKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpudW1iZXJDb25zdHJ1Y3RvclRhYmxlKToK
KyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpudW1iZXJQcm90b3R5cGVUYWJsZSk6CisgICAgICAg
IChKU0M6OkV4ZWNTdGF0ZTo6b2JqZWN0Q29uc3RydWN0b3JUYWJsZSk6CisgICAgICAgIChKU0M6
OkV4ZWNTdGF0ZTo6cHJpdmF0ZU5hbWVQcm90b3R5cGVUYWJsZSk6CisgICAgICAgIChKU0M6OkV4
ZWNTdGF0ZTo6cmVnRXhwVGFibGUpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnJlZ0V4cENv
bnN0cnVjdG9yVGFibGUpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnJlZ0V4cFByb3RvdHlw
ZVRhYmxlKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpzdHJpbmdDb25zdHJ1Y3RvclRhYmxl
KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjphYnN0cmFjdFJldHVyblBDKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWVDbG9zdXJlLmg6CisgICAgICAgIChDYWxsRnJhbWVDbG9z
dXJlKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChK
U0MpOgorICAgICAgICAoSlNDOjpldmFsKToKKyAgICAgICAgKEpTQzo6bG9hZFZhcmFyZ3MpOgor
ICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIpOgorICAgICAgICAoSlNDOjpJ
bnRlcnByZXRlcjo6ZHVtcFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjp1
bndpbmRDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjphcHBlbmRTb3VyY2VUb0Vycm9yKToKKyAg
ICAgICAgKEpTQzo6Z2V0Q2FsbGVySW5mbyk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpn
ZXRTdGFja1RyYWNlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmFkZFN0YWNrVHJhY2VJ
Zk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjp0aHJvd0V4Y2VwdGlvbik6
CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6SW50
ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1
dGVDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cHJlcGFyZUZvclJlcGVh
dENhbGwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cmV0cmlldmVBcmd1bWVudHNGcm9t
Vk1Db2RlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJldHJpZXZlQ2FsbGVyRnJvbVZN
Q29kZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEpT
Qyk6CisgICAgICAgIChKU0M6OlRvcENhbGxGcmFtZVNldHRlcjo6VG9wQ2FsbEZyYW1lU2V0dGVy
KToKKyAgICAgICAgKEpTQzo6VG9wQ2FsbEZyYW1lU2V0dGVyOjp+VG9wQ2FsbEZyYW1lU2V0dGVy
KToKKyAgICAgICAgKFRvcENhbGxGcmFtZVNldHRlcik6CisgICAgICAgIChKU0M6Ok5hdGl2ZUNh
bGxGcmFtZVRyYWNlcjo6TmF0aXZlQ2FsbEZyYW1lVHJhY2VyKToKKyAgICAgICAgKEludGVycHJl
dGVyKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9KU1N0YWNrLmNwcDoKKyAgICAgICAgKEpTQzo6
SlNTdGFjazo6SlNTdGFjayk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSlNTdGFjay5oOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBqaXQvQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHA6Cisg
ICAgICAgIChKU0M6OkNsb3N1cmVDYWxsU3R1YlJvdXRpbmU6OkNsb3N1cmVDYWxsU3R1YlJvdXRp
bmUpOgorICAgICAgICAqIGppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmg6CisgICAgICAgIChD
bG9zdXJlQ2FsbFN0dWJSb3V0aW5lKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OkV4ZWN1dGFibGVBbGxv
Y2F0b3IpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZSk6Cisg
ICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChFeGVjdXRhYmxlQWxsb2NhdG9yKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9j
YXRvckZpeGVkVk1Qb29sLmNwcDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6
RXhlY3V0YWJsZUFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6
OmFsbG9jYXRlKToKKyAgICAgICAgKiBqaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcDoKKyAg
ICAgICAgKEpTQzo6R0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmUp
OgorICAgICAgICAoSlNDOjpNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aE9uZU9iamVj
dDo6TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3QpOgorICAgICAgICAo
SlNDOjpjcmVhdGVKSVRTdHViUm91dGluZSk6CisgICAgICAgICogaml0L0dDQXdhcmVKSVRTdHVi
Um91dGluZS5oOgorICAgICAgICAoR0NBd2FyZUpJVFN0dWJSb3V0aW5lKToKKyAgICAgICAgKE1h
cmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoT25lT2JqZWN0KToKKyAgICAgICAgKEpTQyk6
CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6SklUKToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6bGlua0Zv
cik6CisgICAgICAgIChKU0M6OkpJVDo6bGlua1Nsb3dDYWxsKToKKyAgICAgICAgKiBqaXQvSklU
Lmg6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZUNsb3N1cmVDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZFByb3Rv
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZFNlbGZMaXN0KToKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6
Y29tcGlsZUdldEJ5SWRDaGFpbkxpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVHZXRC
eUlkQ2hhaW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6
CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDVElOYXRpdmVD
YWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCk6Cisg
ICAgICAgIChKSVQpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxs
RXZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2Up
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlQ2xvc3VyZUNhbGwpOgorICAgICAg
ICAqIGppdC9KSVRDYWxsMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVMb2Fk
VmFyYXJncyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2FsbCk6CisgICAgICAgICogaml0L0pJVENvZGUu
aDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpJVENvZGU6OmV4ZWN1dGUpOgorICAg
ICAgICAqIGppdC9KSVREcml2ZXIuaDoKKyAgICAgICAgKEpTQzo6aml0Q29tcGlsZUlmQXBwcm9w
cmlhdGUpOgorICAgICAgICAoSlNDOjpqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKToK
KyAgICAgICAgKiBqaXQvSklURXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyaWNU
aHJvdyk6CisgICAgICAgIChKU0M6OmppdFRocm93KToKKyAgICAgICAgKiBqaXQvSklURXhjZXB0
aW9ucy5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKToKKyAgICAgICAgKEpTQzo6
SklUOjp1cGRhdGVUb3BDYWxsRnJhbWUpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90b19wcmltaXRpdmUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY29udmVydF90aGlzKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9jb252ZXJ0X3RoaXMpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2Fs
bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25lcSk6CisgICAgICAg
IChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfY2F0Y2gpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY29udmVydF90aGlzKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jb252ZXJ0X3RoaXMpOgorICAgICAgICAqIGpp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6c3RyaW5nR2V0QnlW
YWxTdHViR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlf
dmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCk6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8pOgorICAgICAgICAoSlNDOjpKSVQ6
OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlJZENoYWluTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVHZXRCeUlkQ2hhaW4pOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlW
YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwpOgorICAgICAg
ICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpz
dHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVHZXRCeUlkSG90UGF0
aCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6
CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6CisgICAgICAg
IChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoK
KyAgICAgICAgKEpTQzo6Y3RpVHJhbXBvbGluZSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpwZXJmb3JtUGxhdGZvcm1TcGVjaWZpY0pJVEFzc2VydGlvbnMpOgorICAgICAgICAoSlND
Ojp0cnlDYWNoZVB1dEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgorICAg
ICAgICAoSlNDOjpyZXR1cm5Ub1Rocm93VHJhbXBvbGluZSk6CisgICAgICAgIChKU0M6OnRocm93
RXhjZXB0aW9uRnJvbU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9O
KToKKyAgICAgICAgKEpTQzo6Z2V0UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U2xvdCk6
CisgICAgICAgIChKU0M6OmppdENvbXBpbGVGb3IpOgorICAgICAgICAoSlNDOjpsYXp5TGlua0Zv
cik6CisgICAgICAgIChKU0M6OnB1dEJ5VmFsKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuaDoK
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChKSVRTdGFja0ZyYW1lKToKKyAgICAgICAgKiBqaXQv
SklUVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlOYXRpdmVDYWxsKToK
KyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlOYXRpdmVDb25zdHJ1Y3QpOgorICAgICAgICAo
SlNDOjpKSVRUaHVua3M6OmN0aVN0dWIpOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6Omhvc3RG
dW5jdGlvblN0dWIpOgorICAgICAgICAqIGppdC9KSVRUaHVua3MuaDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgIChKSVRUaHVua3MpOgorICAgICAgICAqIGppdC9KSVRXcml0ZUJhcnJpZXIuaDoK
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpJVFdyaXRlQmFycmllckJhc2U6OnNldCk6
CisgICAgICAgIChKU0M6OkpJVFdyaXRlQmFycmllcjo6c2V0KToKKyAgICAgICAgKiBqaXQvU3Bl
Y2lhbGl6ZWRUaHVua0pJVC5oOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjps
b2FkSlNTdHJpbmdBcmd1bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6
OmZpbmFsaXplKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpT
Qyk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6Omdl
bmVyYXRlU2xvd0Nhc2VGb3IpOgorICAgICAgICAoSlNDOjpsaW5rRm9yR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6bGlua0NhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ29uc3Ry
dWN0R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bGlua0Nsb3N1cmVDYWxsR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6dmlydHVhbEZvckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1
YWxDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6dmlydHVhbENvbnN0cnVjdEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OnN0cmluZ0xlbmd0aFRyYW1wb2xpbmVHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpuYXRpdmVGb3JHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpuYXRpdmVDYWxs
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6c3RyaW5nQ2hhckxvYWQpOgorICAgICAgICAoSlNDOjpjaGFyVG9TdHJpbmcp
OgorICAgICAgICAoSlNDOjpjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpjaGFyQXRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmZyb21DaGFyQ29kZVRodW5r
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6c3FydFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6Zmxvb3JUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmNlaWxUaHVua0dlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OnJvdW5kVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpleHBUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmxvZ1RodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6YWJzVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpwb3dUaHVu
a0dlbmVyYXRvcik6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5oOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0KToKKyAgICAg
ICAgKEdsb2JhbE9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoR2xvYmFsT2JqZWN0OjphZGRGdW5jdGlvbik6CisgICAgICAgIChHbG9iYWxPYmplY3Q6
OmFkZENvbnN0cnVjdGFibGVGdW5jdGlvbik6CisgICAgICAgIChmdW5jdGlvbkR1bXBDYWxsRnJh
bWUpOgorICAgICAgICAoZnVuY3Rpb25KU0NTdGFjayk6CisgICAgICAgIChmdW5jdGlvblJlbGVh
c2VFeGVjdXRhYmxlTWVtb3J5KToKKyAgICAgICAgKGZ1bmN0aW9uUnVuKToKKyAgICAgICAgKG1h
aW4pOgorICAgICAgICAocnVuV2l0aFNjcmlwdHMpOgorICAgICAgICAoanNjbWFpbik6CisgICAg
ICAgICogbGxpbnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkRhdGE6OnBl
cmZvcm1Bc3NlcnRpb25zKToKKyAgICAgICAgKiBsbGludC9MTEludERhdGEuaDoKKyAgICAgICAg
KEpTQyk6CisgICAgICAgIChEYXRhKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OkRhdGE6OnBlcmZv
cm1Bc3NlcnRpb25zKToKKyAgICAgICAgKiBsbGludC9MTEludEVudHJ5cG9pbnRzLmNwcDoKKyAg
ICAgICAgKEpTQzo6TExJbnQ6OmdldEZ1bmN0aW9uRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6
OkxMSW50OjpnZXRFdmFsRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRQcm9n
cmFtRW50cnlwb2ludCk6CisgICAgICAgICogbGxpbnQvTExJbnRFbnRyeXBvaW50cy5oOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKExMSW50KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldEVu
dHJ5cG9pbnQpOgorICAgICAgICAqIGxsaW50L0xMSW50RXhjZXB0aW9ucy5jcHA6CisgICAgICAg
IChKU0M6OkxMSW50OjppbnRlcnByZXRlclRocm93SW5DYWxsZXIpOgorICAgICAgICAoSlNDOjpM
TEludDo6cmV0dXJuVG9UaHJvdyk6CisgICAgICAgIChKU0M6OkxMSW50OjpjYWxsVG9UaHJvdyk6
CisgICAgICAgICogbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcDoKKyAgICAgICAgKiBs
bGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChMTEludCk6CisgICAgICAgIChKU0M6
OkxMSW50OjpsbGludF90cmFjZV9vcGVyYW5kKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmxsaW50
X3RyYWNlX3ZhbHVlKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNM
KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNob3VsZEpJVCk6CisgICAgICAgIChKU0M6OkxMSW50
OjpoYW5kbGVIb3N0Q2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpzZXRVcENhbGwpOgorICAg
ICAgICAqIGxsaW50L0xMSW50VGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdlbmVy
YXRlVGh1bmtXaXRoSnVtcFRvKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmZ1bmN0aW9uRm9yQ2Fs
bEVudHJ5VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpMTEludDo6ZnVuY3Rpb25Gb3JD
b25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmZ1bmN0
aW9uRm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkxMSW50
OjpmdW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OkxMSW50OjpldmFsRW50cnlUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkxM
SW50Ojpwcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcik6CisgICAgICAgICogbGxpbnQvTExJbnRU
aHVua3MuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChMTEludCk6CisgICAgICAgICogbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkNMb29wOjpleGVjdXRlKToKKyAgICAgICAgKiBs
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogb2ZmbGluZWFzbS9jbG9vcC5yYjoKKyAg
ICAgICAgKiBwYXJzZXIvQVNUQnVpbGRlci5oOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpB
U1RCdWlsZGVyKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlU291cmNlRWxlbWVu
dHMpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVDb21tYUV4cHIpOgorICAgICAg
ICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6QVNU
QnVpbGRlcjo6Y3JlYXRlVW5hcnlQbHVzKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3Jl
YXRlVm9pZCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OnRoaXNFeHByKToKKyAgICAgICAg
KEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlUmVzb2x2ZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxk
ZXI6OmNyZWF0ZU9iamVjdExpdGVyYWwpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVh
dGVBcnJheSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZU51bWJlckV4cHIpOgor
ICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpB
U1RCdWlsZGVyOjpjcmVhdGVCb29sZWFuKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3Jl
YXRlTnVsbCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUJyYWNrZXRBY2Nlc3Mp
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVEb3RBY2Nlc3MpOgorICAgICAgICAo
SlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVSZWdFeHApOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjpjcmVhdGVOZXdFeHByKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQ29uZGl0
aW9uYWxFeHByKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQXNzaWduUmVzb2x2
ZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUZ1bmN0aW9uRXhwcik6CisgICAg
ICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUZ1bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6
OkFTVEJ1aWxkZXI6OmNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkpOgorICAgICAgICAoSlND
OjpBU1RCdWlsZGVyOjpjcmVhdGVBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjpjcmVhdGVBcmd1bWVudHNMaXN0KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRl
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVQcm9wZXJ0eUxpc3Qp
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVFbGVtZW50TGlzdCk6CisgICAgICAg
IChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUZvcm1hbFBhcmFtZXRlckxpc3QpOgorICAgICAgICAo
SlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVDbGF1c2UpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjpjcmVhdGVDbGF1c2VMaXN0KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRnVu
Y0RlY2xTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVCbG9ja1N0
YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUV4cHJTdGF0ZW1lbnQp
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVJZlN0YXRlbWVudCk6CisgICAgICAg
IChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUZvckxvb3ApOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjpjcmVhdGVGb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVF
bXB0eVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVZhclN0YXRl
bWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVJldHVyblN0YXRlbWVudCk6
CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUJyZWFrU3RhdGVtZW50KToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQ29udGludWVTdGF0ZW1lbnQpOgorICAgICAgICAo
SlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVUcnlTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RC
dWlsZGVyOjpjcmVhdGVTd2l0Y2hTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjpjcmVhdGVXaGlsZVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0
ZURvV2hpbGVTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVMYWJl
bFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVdpdGhTdGF0ZW1l
bnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVUaHJvd1N0YXRlbWVudCk6Cisg
ICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZURlYnVnZ2VyKToKKyAgICAgICAgKEpTQzo6
QVNUQnVpbGRlcjo6Y3JlYXRlQ29uc3RTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjphcHBlbmRDb25zdERlY2wpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjphZGRWYXIp
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjb21iaW5lQ29tbWFOb2Rlcyk6CisgICAgICAg
IChKU0M6OkFTVEJ1aWxkZXI6OlNjb3BlOjpTY29wZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxk
ZXI6OmNyZWF0ZU51bWJlcik6CisgICAgICAgIChBU1RCdWlsZGVyKToKKyAgICAgICAgKEpTQzo6
QVNUQnVpbGRlcjo6bWFrZVR5cGVPZk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpt
YWtlRGVsZXRlTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VOZWdhdGVOb2Rl
KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUJpdHdpc2VOb3ROb2RlKToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZU11bHROb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVp
bGRlcjo6bWFrZURpdk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlTW9kTm9k
ZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VBZGROb2RlKToKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6bWFrZVN1Yk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpt
YWtlTGVmdFNoaWZ0Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VSaWdodFNo
aWZ0Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VVUmlnaHRTaGlmdE5vZGUp
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlQml0T3JOb2RlKToKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6bWFrZUJpdEFuZE5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjptYWtlQml0WE9yTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlv
bkNhbGxOb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUJpbmFyeU5vZGUpOgor
ICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlQXNzaWduTm9kZSk6CisgICAgICAgIChKU0M6
OkFTVEJ1aWxkZXI6Om1ha2VQcmVmaXhOb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6
bWFrZVBvc3RmaXhOb2RlKToKKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuY3BwOgorICAgICAgICAo
SlNDOjpLZXl3b3Jkczo6S2V5d29yZHMpOgorICAgICAgICAoSlNDOjo6OkxleGVyKToKKyAgICAg
ICAgKEpTQzo6OjpwYXJzZUlkZW50aWZpZXIpOgorICAgICAgICAoSlNDOjo6OnBhcnNlSWRlbnRp
ZmllclNsb3dDYXNlKToKKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuaDoKKyAgICAgICAgKEpTQzo6
S2V5d29yZHM6OmlzS2V5d29yZCk6CisgICAgICAgIChKU0M6OktleXdvcmRzOjpnZXRLZXl3b3Jk
KToKKyAgICAgICAgKEtleXdvcmRzKToKKyAgICAgICAgKExleGVyKToKKyAgICAgICAgKEpTQzo6
OjptYWtlSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6Ojo6bWFrZVJpZ2h0U2l6ZWRJZGVudGlm
aWVyKToKKyAgICAgICAgKEpTQzo6OjptYWtlSWRlbnRpZmllckxDaGFyRnJvbVVDaGFyKToKKyAg
ICAgICAgKEpTQzo6OjptYWtlTENoYXJJZGVudGlmaWVyKToKKyAgICAgICAgKiBwYXJzZXIvTm9k
ZUNvbnN0cnVjdG9ycy5oOgorICAgICAgICAoSlNDOjpQYXJzZXJBcmVuYUZyZWVhYmxlOjpvcGVy
YXRvciBuZXcpOgorICAgICAgICAoSlNDOjpQYXJzZXJBcmVuYURlbGV0YWJsZTo6b3BlcmF0b3Ig
bmV3KToKKyAgICAgICAgKEpTQzo6UGFyc2VyQXJlbmFSZWZDb3VudGVkOjpQYXJzZXJBcmVuYVJl
ZkNvdW50ZWQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5vZGU6OlByb3BlcnR5Tm9kZSk6Cisg
ICAgICAgIChKU0M6OkNvbnRpbnVlTm9kZTo6Q29udGludWVOb2RlKToKKyAgICAgICAgKEpTQzo6
QnJlYWtOb2RlOjpCcmVha05vZGUpOgorICAgICAgICAoSlNDOjpGb3JJbk5vZGU6OkZvckluTm9k
ZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6U2NvcGVOb2Rl
OjpTY29wZU5vZGUpOgorICAgICAgICAoSlNDOjpQcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUpOgor
ICAgICAgICAoSlNDOjpQcm9ncmFtTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RXZhbE5v
ZGU6OkV2YWxOb2RlKToKKyAgICAgICAgKEpTQzo6RXZhbE5vZGU6OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUpOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUpOgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5oOgor
ICAgICAgICAoUGFyc2VyQXJlbmFGcmVlYWJsZSk6CisgICAgICAgIChQYXJzZXJBcmVuYURlbGV0
YWJsZSk6CisgICAgICAgIChQYXJzZXJBcmVuYVJlZkNvdW50ZWQpOgorICAgICAgICAoQXJyYXlO
b2RlKToKKyAgICAgICAgKEZvckluTm9kZSk6CisgICAgICAgIChDb250aW51ZU5vZGUpOgorICAg
ICAgICAoQnJlYWtOb2RlKToKKyAgICAgICAgKFNjb3BlTm9kZSk6CisgICAgICAgIChQcm9ncmFt
Tm9kZSk6CisgICAgICAgIChFdmFsTm9kZSk6CisgICAgICAgIChGdW5jdGlvbkJvZHlOb2RlKToK
KyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6OjpQYXJzZXIpOgor
ICAgICAgICAoSlNDOjo6OnBhcnNlSW5uZXIpOgorICAgICAgICAoSlNDOjo6OnBhcnNlU291cmNl
RWxlbWVudHMpOgorICAgICAgICAoSlNDOjo6OnBhcnNlVHJ5U3RhdGVtZW50KToKKyAgICAgICAg
KEpTQzo6OjpwYXJzZUZ1bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VGdW5jdGlv
bkluZm8pOgorICAgICAgICAoSlNDOjo6OnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOgorICAg
ICAgICAoSlNDOjo6OnBhcnNlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjo6OnBhcnNlUHJpbWFy
eUV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjo6OnBhcnNlTWVtYmVyRXhwcmVzc2lvbik6Cisg
ICAgICAgIChKU0M6Ojo6cGFyc2VVbmFyeUV4cHJlc3Npb24pOgorICAgICAgICAqIHBhcnNlci9Q
YXJzZXIuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OlNjb3BlOjpTY29wZSk6Cisg
ICAgICAgIChKU0M6OlNjb3BlOjpkZWNsYXJlVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpTY29w
ZTo6ZGVjbGFyZVBhcmFtZXRlcik6CisgICAgICAgIChTY29wZSk6CisgICAgICAgIChQYXJzZXIp
OgorICAgICAgICAoSlNDOjpQYXJzZXI6OnB1c2hTY29wZSk6CisgICAgICAgIChKU0M6Ojo6cGFy
c2UpOgorICAgICAgICAoSlNDOjpwYXJzZSk6CisgICAgICAgICogcGFyc2VyL1BhcnNlckFyZW5h
Lmg6CisgICAgICAgIChJZGVudGlmaWVyQXJlbmEpOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVy
QXJlbmE6Om1ha2VJZGVudGlmaWVyKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllckFyZW5hOjpt
YWtlSWRlbnRpZmllckxDaGFyRnJvbVVDaGFyKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllckFy
ZW5hOjptYWtlTnVtZXJpY0lkZW50aWZpZXIpOgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVj
a2VyLmg6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OlN5bnRheENoZWNrZXIpOgorICAg
ICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6
OlN5bnRheENoZWNrZXI6OmNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkpOgorICAgICAgICAq
IHByb2ZpbGVyL0xlZ2FjeVByb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6TGVnYWN5UHJvZmls
ZXI6OnN0YXJ0UHJvZmlsaW5nKToKKyAgICAgICAgKEpTQzo6TGVnYWN5UHJvZmlsZXI6OnN0b3BQ
cm9maWxpbmcpOgorICAgICAgICAqIHByb2ZpbGVyL0xlZ2FjeVByb2ZpbGVyLmg6CisgICAgICAg
IChKU0MpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGUuY3BwOgorICAgICAg
ICAoSlNDOjpQcm9maWxlcjo6Qnl0ZWNvZGU6OnRvSlMpOgorICAgICAgICAqIHByb2ZpbGVyL1By
b2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpCeXRl
Y29kZVNlcXVlbmNlOjpCeXRlY29kZVNlcXVlbmNlKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6
OkJ5dGVjb2RlU2VxdWVuY2U6OmFkZFNlcXVlbmNlUHJvcGVydGllcyk6CisgICAgICAgICogcHJv
ZmlsZXIvUHJvZmlsZXJCeXRlY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6Qnl0
ZWNvZGVzOjp0b0pTKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OkNvbXBpbGF0aW9uOjp0b0pTKToKKyAgICAgICAg
KiBwcm9maWxlci9Qcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuY3BwOgorICAgICAgICAoSlNDOjpQ
cm9maWxlcjo6Q29tcGlsZWRCeXRlY29kZTo6dG9KUyk6CisgICAgICAgICogcHJvZmlsZXIvUHJv
ZmlsZXJEYXRhYmFzZS5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpEYXRhYmFzZTo6RGF0
YWJhc2UpOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6RGF0YWJhc2U6OnRvSlMpOgorICAgICAg
ICAoSlNDOjpQcm9maWxlcjo6RGF0YWJhc2U6OnRvSlNPTik6CisgICAgICAgICogcHJvZmlsZXIv
UHJvZmlsZXJEYXRhYmFzZS5oOgorICAgICAgICAoRGF0YWJhc2UpOgorICAgICAgICAqIHByb2Zp
bGVyL1Byb2ZpbGVyT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpPU1JFeGl0
Ojp0b0pTKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlck9yaWdpbi5jcHA6CisgICAgICAg
IChKU0M6OlByb2ZpbGVyOjpPcmlnaW46OnRvSlMpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2Zp
bGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6UHJvZmls
ZWRCeXRlY29kZXM6OnRvSlMpOgorICAgICAgICAqIHJ1bnRpbWUvQXJnTGlzdC5oOgorICAgICAg
ICAoTWFya2VkQXJndW1lbnRCdWZmZXIpOgorICAgICAgICAqIHJ1bnRpbWUvQXJndW1lbnRzLmNw
cDoKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpwdXRCeUluZGV4KToKKyAgICAgICAgKEpTQzo6
QXJndW1lbnRzOjpwdXQpOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAg
IChKU0M6OkFyZ3VtZW50czo6dGVhck9mZik6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6ZGlk
VGVhck9mZkFjdGl2YXRpb24pOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OnRlYXJPZmZGb3JJ
bmxpbmVDYWxsRnJhbWUpOgorICAgICAgICAqIHJ1bnRpbWUvQXJndW1lbnRzLmg6CisgICAgICAg
IChKU0M6OkFyZ3VtZW50czo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpjcmVh
dGVTdHJ1Y3R1cmUpOgorICAgICAgICAoQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6QXJndW1l
bnRzOjpBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OnRyeVNldEFyZ3VtZW50
KToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICog
cnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlDb25zdHJ1
Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rv
ci5oOgorICAgICAgICAoSlNDOjpBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgor
ICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpBcnJh
eVByb3RvdHlwZTo6QXJyYXlQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpBcnJheVByb3RvdHlw
ZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvcnQpOgor
ICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NwbGljZSk6CisgICAgICAgICogcnVudGltZS9B
cnJheVByb3RvdHlwZS5oOgorICAgICAgICAoSlNDOjpBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0JhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmg6
CisgICAgICAgIChKU0M6OkJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyOjpCYXRjaGVkVHJhbnNp
dGlvbk9wdGltaXplcik6CisgICAgICAgIChKU0M6OkJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVy
Ojp+QmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIpOgorICAgICAgICAoQmF0Y2hlZFRyYW5zaXRp
b25PcHRpbWl6ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Qm9vbGVhbkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgIChKU0M6OmNvbnN0cnVjdEJvb2xlYW4pOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RCb29s
ZWFuRnJvbUltbWVkaWF0ZUJvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhbkNvbnN0
cnVjdG9yLmg6CisgICAgICAgIChKU0M6OkJvb2xlYW5Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5PYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpCb29sZWFuT2JqZWN0OjpCb29sZWFuT2JqZWN0KToKKyAgICAgICAgKEpTQzo6Qm9vbGVhbk9i
amVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhbk9iamVjdC5o
OgorICAgICAgICAoQm9vbGVhbk9iamVjdCk6CisgICAgICAgIChKU0M6OkJvb2xlYW5PYmplY3Q6
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkJvb2xlYW5PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgICogcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6
Qm9vbGVhblByb3RvdHlwZTo6Qm9vbGVhblByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OkJvb2xl
YW5Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Ym9vbGVhblByb3Rv
RnVuY1RvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuaDoKKyAg
ICAgICAgKEpTQzo6Qm9vbGVhblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KiBydW50aW1lL0J1dHRlcmZseS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEJ1dHRlcmZs
eSk6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmg6CisgICAgICAgIChKU0M6
OkJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZs
eTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodCk6CisgICAgICAgIChKU0M6OkJ1
dHRlcmZseTo6cmVzaXplQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmNwcDoK
KyAgICAgICAgKEpTQzo6Q29kZUNhY2hlOjpnZXRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpD
b2RlQ2FjaGU6OmdldFByb2dyYW1Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6
OmdldEV2YWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6OmdldEZ1bmN0aW9u
RXhlY3V0YWJsZUZyb21HbG9iYWxDb2RlKToKKyAgICAgICAgKiBydW50aW1lL0NvZGVDYWNoZS5o
OgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U291cmNlQ29kZVZhbHVlOjpTb3VyY2VD
b2RlVmFsdWUpOgorICAgICAgICAoQ29kZUNhY2hlKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1v
bklkZW50aWZpZXJzLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkNvbW1vbklk
ZW50aWZpZXJzOjpDb21tb25JZGVudGlmaWVycyk6CisgICAgICAgICogcnVudGltZS9Db21tb25J
ZGVudGlmaWVycy5oOgorICAgICAgICAoQ29tbW9uSWRlbnRpZmllcnMpOgorICAgICAgICAqIHJ1
bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgIChKU0M6OkNvbW1vblNsb3dQYXRoczo6
b3BJbik6CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6
Y2hlY2tTeW50YXgpOgorICAgICAgICAoSlNDOjpldmFsdWF0ZSk6CisgICAgICAgICogcnVudGlt
ZS9EYXRlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpEYXRlQ29uc3RydWN0b3I6OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5oOgorICAg
ICAgICAoSlNDOjpEYXRlQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICog
cnVudGltZS9EYXRlSW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpEYXRlSW5zdGFuY2U6OkRh
dGVJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkRhdGVJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoSlNDOjpEYXRlSW5zdGFuY2U6OmNhbGN1bGF0ZUdyZWdvcmlhbkRhdGVUaW1l
KToKKyAgICAgICAgKEpTQzo6RGF0ZUluc3RhbmNlOjpjYWxjdWxhdGVHcmVnb3JpYW5EYXRlVGlt
ZVVUQyk6CisgICAgICAgICogcnVudGltZS9EYXRlSW5zdGFuY2UuaDoKKyAgICAgICAgKERhdGVJ
bnN0YW5jZSk6CisgICAgICAgIChKU0M6OkRhdGVJbnN0YW5jZTo6Y3JlYXRlKToKKyAgICAgICAg
KEpTQzo6RGF0ZUluc3RhbmNlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUv
RGF0ZVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkRhdGVQcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldFRpbWUpOgorICAgICAgICAo
SlNDOjpzZXROZXdWYWx1ZUZyb21UaW1lQXJncyk6CisgICAgICAgIChKU0M6OnNldE5ld1ZhbHVl
RnJvbURhdGVBcmdzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldFllYXIpOgorICAg
ICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9KU09OKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVQ
cm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6RGF0ZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlRXJy
b3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVFdmFsRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVh
dGVSYW5nZUVycm9yKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlUmVmZXJlbmNlRXJyb3IpOgorICAg
ICAgICAoSlNDOjpjcmVhdGVTeW50YXhFcnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZVR5cGVF
cnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZVVSSUVycm9yKToKKyAgICAgICAgKEpTQzo6YWRk
RXJyb3JJbmZvKToKKyAgICAgICAgKEpTQzo6dGhyb3dFcnJvcik6CisgICAgICAgICogcnVudGlt
ZS9FcnJvci5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3RyaWN0TW9kZVR5cGVF
cnJvckZ1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpTdHJpY3RNb2RlVHlwZUVycm9y
RnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9FcnJvckNvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6RXJyb3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlND
OjpFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUv
RXJyb3JJbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OkVycm9ySW5z
dGFuY2UpOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JJbnN0YW5jZS5oOgorICAgICAgICAoSlND
OjpFcnJvckluc3RhbmNlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpFcnJvcklu
c3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAoRXJyb3JJbnN0YW5jZSk6CisgICAgICAgIChKU0M6
OkVycm9ySW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9y
UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6RXJyb3JQcm90b3R5cGU6OkVycm9yUHJvdG90
eXBlKToKKyAgICAgICAgKEpTQzo6RXJyb3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKiBydW50aW1lL0Vycm9yUHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6OkVycm9yUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uSGVs
cGVycy5jcHA6CisgICAgICAgIChKU0M6OmNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0
aW9uKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbik6
CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSlNDOjpJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yOjpJbnRlcnJ1cHRlZEV4ZWN1
dGlvbkVycm9yKToKKyAgICAgICAgKEpTQzo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpUZXJtaW5h
dGVkRXhlY3V0aW9uRXJyb3IpOgorICAgICAgICAoSlNDOjpUZXJtaW5hdGVkRXhlY3V0aW9uRXJy
b3I6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAg
ICAoSlNDOjpqZXR0aXNvbkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxl
OjpFdmFsRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpQcm9n
cmFtRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rp
b25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVPcHRp
bWl6ZWQpOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToK
KyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZSk6Cisg
ICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjaGVja1N5bnRheCk6CisgICAgICAgIChK
U0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6
UHJvZ3JhbUV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZSk6CisgICAgICAgIChKU0M6
OlByb2dyYW1FeGVjdXRhYmxlOjppbml0aWFsaXplR2xvYmFsUHJvcGVydGllcyk6CisgICAgICAg
IChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNhbGwpOgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1
Y3QpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tG
b3IpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVk
Q29kZUZvckNhbGwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29u
T3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0
YWJsZTo6ZnJvbUdsb2JhbENvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6RXhlY3V0YWJsZUJhc2UpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQmFzZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpFeGVj
dXRhYmxlQmFzZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6TmF0aXZlRXhlY3V0
YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6TmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6TmF0aXZlRXhlY3V0YWJsZTo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoSlNDOjpOYXRpdmVFeGVjdXRhYmxlOjpOYXRpdmVFeGVjdXRhYmxlKToKKyAg
ICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6U2NyaXB0RXhlY3V0YWJsZSk6CisgICAgICAg
IChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGUpOgorICAgICAgICAoRXZhbEV4ZWN1dGFibGUpOgorICAg
ICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RXZhbEV4
ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRh
YmxlOjpjcmVhdGUpOgorICAgICAgICAoUHJvZ3JhbUV4ZWN1dGFibGUpOgorICAgICAgICAoSlND
OjpQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVj
dXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFi
bGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZv
ckNhbGwpOgorICAgICAgICAoRnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3IpOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpT
RnVuY3Rpb246OkpTRnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0aW9uSGFybmVz
cy5oOgorICAgICAgICAoSlNDOjpwcmVwYXJlRm9yRXhlY3V0aW9uKToKKyAgICAgICAgKEpTQzo6
cHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9u
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvbnN0cnVjdG9yOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmg6Cisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgICogcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHJv
dG90eXBlOjphZGRGdW5jdGlvblByb3BlcnRpZXMpOgorICAgICAgICAoSlNDOjpmdW5jdGlvblBy
b3RvRnVuY0JpbmQpOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaDoKKyAg
ICAgICAgKEpTQzo6RnVuY3Rpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAg
ICogcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwOgorICAgICAgICAoSlNDOjpEZWZhdWx0
R0NBY3Rpdml0eUNhbGxiYWNrOjpEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKToKKyAgICAgICAg
KEpTQzo6RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6ZG9Xb3JrKToKKyAgICAgICAgKEpTQzo6
RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6ZGlkQWxsb2NhdGUpOgorICAgICAgICAqIHJ1bnRp
bWUvR0NBY3Rpdml0eUNhbGxiYWNrLmg6CisgICAgICAgIChKU0M6OkdDQWN0aXZpdHlDYWxsYmFj
azo6R0NBY3Rpdml0eUNhbGxiYWNrKToKKyAgICAgICAgKiBydW50aW1lL0dDQWN0aXZpdHlDYWxs
YmFja0JsYWNrQmVycnkuY3BwOgorICAgICAgICAoSlNDOjpEZWZhdWx0R0NBY3Rpdml0eUNhbGxi
YWNrOjpEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6RGVmYXVsdEdD
QWN0aXZpdHlDYWxsYmFjazo6ZG9Xb3JrKToKKyAgICAgICAgKEpTQzo6RGVmYXVsdEdDQWN0aXZp
dHlDYWxsYmFjazo6ZGlkQWxsb2NhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVy
Lmg6CisgICAgICAgIChKU0M6OkdldHRlclNldHRlcjo6R2V0dGVyU2V0dGVyKToKKyAgICAgICAg
KEpTQzo6R2V0dGVyU2V0dGVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXI6
OnNldEdldHRlcik6CisgICAgICAgIChKU0M6OkdldHRlclNldHRlcjo6c2V0U2V0dGVyKToKKyAg
ICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1
bnRpbWUvSWRlbnRpZmllci5jcHA6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFkZCk6Cisg
ICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFkZDgpOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVy
OjphZGRTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmZyb20pOgorICAgICAg
ICAoSlNDOjpJZGVudGlmaWVyOjpjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvSWRlbnRpZmllci5oOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjpJZGVu
dGlmaWVyKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6Y3JlYXRlTENoYXJGcm9tVUNoYXIp
OgorICAgICAgICAoSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFkZCk6
CisgICAgICAgICogcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6
SW50ZXJuYWxGdW5jdGlvbjo6SW50ZXJuYWxGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkludGVy
bmFsRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxGdW5j
dGlvbjo6bmFtZSk6CisgICAgICAgIChKU0M6OkludGVybmFsRnVuY3Rpb246OmRpc3BsYXlOYW1l
KToKKyAgICAgICAgKiBydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6
SW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEludGVybmFsRnVu
Y3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNBUElWYWx1ZVdyYXBwZXIuaDoKKyAgICAgICAg
KEpTQzo6SlNBUElWYWx1ZVdyYXBwZXI6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
OkpTQVBJVmFsdWVXcmFwcGVyOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTQVBJ
VmFsdWVXcmFwcGVyOjpKU0FQSVZhbHVlV3JhcHBlcik6CisgICAgICAgICogcnVudGltZS9KU0Fj
dGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxlUHV0
KToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1
dGVzKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgor
ICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OnB1dCk6CisgICAgICAgIChKU0M6OkpTQWN0aXZh
dGlvbjo6cHV0RGlyZWN0VmlydHVhbCk6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6YXJn
dW1lbnRzR2V0dGVyKToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5oOgorICAgICAg
ICAoSlNBY3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChK
U0M6OkpTQWN0aXZhdGlvbjo6SlNBY3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0
aW9uOjp0ZWFyT2ZmKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAo
SlNDOjpjcmVhdGVBcnJheUJ1dHRlcmZseUluRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OnNldExlbmd0aFdyaXRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRM
ZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXNoKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6c2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OkNvbnRp
Z3VvdXNUeXBlQWNjZXNzb3I6OnNldFdpdGhWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OnNvcnRDb21wYWN0ZWRWZWN0b3IpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0VmVjdG9y
KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
SlNBcnJheSk6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hp
ZnRDb3VudEZvclNoaWZ0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50Rm9y
U2hpZnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAg
ICAoSlNDOjpjcmVhdGVDb250aWd1b3VzQXJyYXlCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpj
cmVhdGVBcnJheUJ1dHRlcmZseSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxp
emVkKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNCb3VuZEZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNCb3VuZEZ1bmN0aW9uOjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpKU0JvdW5kRnVuY3Rpb246OkpTQm91bmRGdW5jdGlvbik6Cisg
ICAgICAgICogcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SlNCb3Vu
ZEZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1
ZS5jcHA6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlKToKKyAgICAgICAg
KEpTQzo6SlNWYWx1ZTo6dG9TdHJpbmdTbG93Q2FzZSk6CisgICAgICAgICogcnVudGltZS9KU0NK
U1ZhbHVlLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6Cisg
ICAgICAgIChKU0NlbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjpKU0NlbGw6OkpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAoSlNDOjphbGxvY2F0ZUNlbGwpOgorICAgICAgICAoSlNDOjpK
U0NlbGw6OnNldFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6ZmFzdEdldE93blBy
b3BlcnR5KToKKyAgICAgICAgKiBydW50aW1lL0pTRGF0ZU1hdGguY3BwOgorICAgICAgICAoSlND
OjpnZXREU1RPZmZzZXQpOgorICAgICAgICAoSlNDOjpnZXRVVENPZmZzZXQpOgorICAgICAgICAo
SlNDOjpwYXJzZURhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3Qu
aDoKKyAgICAgICAgKEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Q6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0KToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpK
U0Z1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9u
KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGVBbGxvY2F0aW9uUHJvZmlsZSk6CisgICAgICAgIChKU0M6
OkpTRnVuY3Rpb246Om5hbWUpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpkaXNwbGF5TmFt
ZSk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93blByb3BlcnR5U2xvdCk6CisgICAg
ICAgIChKU0M6OkpTRnVuY3Rpb246OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKiBydW50aW1l
L0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU0Z1
bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpzZXRTY29wZSk6Cisg
ICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbERhdGEuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxEYXRhLmg6IFJlbW92ZWQuCisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6
CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp+SlNHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbE9iamVjdDo6c2V0R2xvYmFsVGhpcyk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0Ojppbml0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnB1dERpcmVjdFZpcnR1
YWwpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmhhdmVBQmFkVGltZSk6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsT2JqZWN0OjpjcmVhdGVUaHJvd1R5cGVFcnJvcik6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0OjpyZXNldFByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OkpTR2xv
YmFsT2JqZWN0OjphZGRTdGF0aWNHbG9iYWxzKToKKyAgICAgICAgKEpTQzo6RHluYW1pY0dsb2Jh
bE9iamVjdFNjb3BlOjpEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUpOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbE9iamVjdDo6Y3JlYXRlUHJvZ3JhbUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjpjcmVhdGVFdmFsQ29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0pT
R2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpjcmVhdGUpOgor
ICAgICAgICAoSlNHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6dm0pOgorICAg
ICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6RXhlY1N0YXRlOjpkeW5hbWljR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6Y29uc3Ry
dWN0RW1wdHlBcnJheSk6CisgICAgICAgIChEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlND
OjpnbG9iYWxGdW5jUHJvdG9TZXR0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNMb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIpOgorICAgICAgICAoSlND
OjpKU0xvY2tIb2xkZXI6OmluaXQpOgorICAgICAgICAoSlNDOjpKU0xvY2tIb2xkZXI6On5KU0xv
Y2tIb2xkZXIpOgorICAgICAgICAoSlNDOjpKU0xvY2s6OkpTTG9jayk6CisgICAgICAgIChKU0M6
OkpTTG9jazo6d2lsbERlc3Ryb3lHbG9iYWxEYXRhKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjps
b2NrKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjp1bmxvY2spOgorICAgICAgICAoSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFsbExvY2tzKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3M6On5Ecm9wQWxsTG9ja3MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNMb2NrLmg6
CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNMb2NrSG9sZGVyKToKKyAgICAgICAgKEpTTG9j
ayk6CisgICAgICAgIChKU0M6OkpTTG9jazo6dm0pOgorICAgICAgICAoRHJvcEFsbExvY2tzKToK
KyAgICAgICAgKiBydW50aW1lL0pTTmFtZVNjb3BlLmg6CisgICAgICAgIChKU0M6OkpTTmFtZVNj
b3BlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU05hbWVTY29wZTo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU05hbWVTY29wZTo6SlNOYW1lU2NvcGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNOb3RBbk9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU05vdEFuT2Jq
ZWN0OjpKU05vdEFuT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNOb3RBbk9iamVjdDo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6SlNOb3RBbk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKiBydW50aW1lL0pTT05PYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09OT2JqZWN0OjpK
U09OT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPTk9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgor
ICAgICAgICAoSG9sZGVyKToKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OlN0cmluZ2lmaWVy
KToKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OnN0cmluZ2lmeSk6CisgICAgICAgIChKU0M6
OlN0cmluZ2lmaWVyOjp0b0pTT04pOgorICAgICAgICAoSlNDOjpTdHJpbmdpZmllcjo6YXBwZW5k
U3RyaW5naWZpZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjpIb2xkZXI6Okhv
bGRlcik6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OldhbGtlcjo6V2Fsa2VyKToKKyAgICAgICAgKEpTQzo6V2Fs
a2VyOjp3YWxrKToKKyAgICAgICAgKEpTQzo6SlNPTlByb3RvRnVuY1BhcnNlKToKKyAgICAgICAg
KEpTQzo6SlNPTlByb3RvRnVuY1N0cmluZ2lmeSk6CisgICAgICAgIChKU0M6OkpTT05TdHJpbmdp
ZnkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09O
T2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OnB1dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6Om5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpjcmVhdGVJbml0aWFsVW5kZWNpZGVkKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmNyZWF0ZUluaXRpYWxJbnQzMik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0
aWFsRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxDb250aWd1
b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0ludDMyKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHMp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvRG91YmxlKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQ29udGlndW91cyk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpnZW5lcmljQ29udmVydERvdWJsZVRvQ29udGlndW91cyk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnJhZ2VDb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRGb3JWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0Ojpjb252ZXJ0SW50MzJGb3JWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRJ
bmRleFF1aWNrbHlUb1VuZGVjaWRlZCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0
SW50MzJUb0RvdWJsZU9yQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1p
bmdTZXRJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVJbnQzMlNsb3cpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlRG91YmxlU2xvdyk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjplbnN1cmVDb250aWd1b3VzU2xvdyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpyYWdlRW5zdXJlQ29udGlndW91c1Nsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5z
dXJlQXJyYXlTdG9yYWdlU2xvdyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJh
eVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6c3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
c2V0UHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldFByb3RvdHlwZVdpdGhD
eWNsZUNoZWNrKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEFjY2Vzc29yKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmdldFByb3BlcnR5U3BlY2lmaWNWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6c2VhbCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpmcmVlemUpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHJldmVudEV4dGVuc2lvbnMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
cmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JEZWxldGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
cmVtb3ZlRGlyZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEluZGV4ZWREZXNjcmlw
dG9yKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphbGxvY2F0ZVNwYXJzZUluZGV4TWFwKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRob3V0QXR0
cmlidXRlcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoV2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUlu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVj
dEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpwdXREaXJlY3ROYXRpdmVGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpl
bnN1cmVMZW5ndGhTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cik6CisgICAgICAgIChKU0M6OnB1dERlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0RGlyZWN0TWF5QmVJbmRleCk6CisgICAgICAgIChKU0M6OkRlZmluZU93blByb3BlcnR5
U2NvcGU6OkRlZmluZU93blByb3BlcnR5U2NvcGUpOgorICAgICAgICAoSlNDOjpEZWZpbmVPd25Q
cm9wZXJ0eVNjb3BlOjp+RGVmaW5lT3duUHJvcGVydHlTY29wZSk6CisgICAgICAgIChEZWZpbmVP
d25Qcm9wZXJ0eVNjb3BlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bk5vbklu
ZGV4UHJvcGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpT
T2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhJbmxpbmUpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6c2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluaXRpYWxp
emVJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXREaXJlY3QpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6Z2V0RGlyZWN0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OnB1dERpcmVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojppc1NlYWxlZCk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0Ojppc0Zyb3plbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpmbGF0
dGVuRGljdGlvbmFyeU9iamVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVJbnQz
Mik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVEb3VibGUpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6ZW5zdXJlQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpy
YWdlRW5zdXJlQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJh
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmVuc3VyZUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTTm9uRmluYWxPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTTm9uRmluYWxPYmplY3Q6OkpTTm9uRmlu
YWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU05vbkZpbmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlv
bik6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
SlNGaW5hbE9iamVjdDo6SlNGaW5hbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmpl
Y3Q6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6SlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
aW5saW5lR2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERp
cmVjdEludGVybmFsKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZFJl
YWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0
T3duRGF0YVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9KU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRv
cjo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcik6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1l
SXRlcmF0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yLmg6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZVN0cnVj
dHVyZSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OnNldENhY2hlZFN0
cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OnNldENhY2hl
ZFByb3RvdHlwZUNoYWluKToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0RW51
bWVyYXRpb25DYWNoZSk6CisgICAgICAgICogcnVudGltZS9KU1Byb3h5LmNwcDoKKyAgICAgICAg
KEpTQzo6SlNQcm94eTo6c2V0VGFyZ2V0KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJveHkuaDoK
KyAgICAgICAgKEpTQzo6SlNQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNQcm94eTo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNQcm94eTo6SlNQcm94eSk6CisgICAg
ICAgIChKU0M6OkpTUHJveHk6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTUHJveHkpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNTY29wZS5jcHA6CisgICAgICAgIChKU0M6OmV4ZWN1dGVSZXNv
bHZlT3BlcmF0aW9ucyk6CisgICAgICAgIChKU0M6OkpTU2NvcGU6OnJlc29sdmVDb250YWluaW5n
U2NvcGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkpTU2NvcGU6OnJlc29sdmVXaXRoQmFzZSk6
CisgICAgICAgIChKU0M6OkpTU2NvcGU6OnJlc29sdmVXaXRoVGhpcyk6CisgICAgICAgIChKU0M6
OkpTU2NvcGU6OnJlc29sdmVQdXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTY29wZS5oOgorICAg
ICAgICAoSlNTY29wZSk6CisgICAgICAgIChKU0M6OkpTU2NvcGU6OkpTU2NvcGUpOgorICAgICAg
ICAoSlNDOjpKU1Njb3BlOjp2bSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6dm0pOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oOgorICAgICAgICAoSlND
OjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KToK
KyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuY3BwOgorICAgICAgICAoSlNDOjpKU1JvcGVT
dHJpbmc6OlJvcGVCdWlsZGVyOjpleHBhbmQpOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6
OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5oOgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKEpTU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OkpTU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
SlNTdHJpbmc6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpjcmVhdGVIYXNPdGhl
ck93bmVyKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgIChKU1JvcGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OlJvcGVCdWls
ZGVyOjpSb3BlQnVpbGRlcik6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6Um9wZUJ1aWxk
ZXI6OmFwcGVuZCk6CisgICAgICAgIChSb3BlQnVpbGRlcik6CisgICAgICAgIChKU0M6OkpTUm9w
ZVN0cmluZzo6SlNSb3BlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6YXBwZW5kKToKKyAgICAg
ICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpjcmVhdGVOdWxsKToKKyAgICAgICAgKEpTQzo6SlNSb3Bl
U3RyaW5nOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpqc0VtcHR5U3RyaW5nKToKKyAgICAgICAg
KEpTQzo6anNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOgorICAgICAgICAoSlNDOjpqc1NpbmdsZUNo
YXJhY3RlclN1YnN0cmluZyk6CisgICAgICAgIChKU0M6OmpzTm9udHJpdmlhbFN0cmluZyk6Cisg
ICAgICAgIChKU0M6OmpzU3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNTdWJzdHJpbmcpOgorICAg
ICAgICAoSlNDOjpqc1N1YnN0cmluZzgpOgorICAgICAgICAoSlNDOjpqc093bmVkU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6anNTdHJpbmdCdWlsZGVyKToKKyAgICAgICAgKEpTQzo6aW5saW5lSlNW
YWx1ZU5vdFN0cmluZ3RvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nSm9pbmVy
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmdKb2luZXI6OmJ1aWxkKToKKyAgICAgICAgKiBy
dW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJs
ZU9iamVjdDo6SlNTeW1ib2xUYWJsZU9iamVjdCk6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFi
bGVPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6c3ltYm9sVGFibGVQdXQp
OgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKToKKyAgICAgICAg
KiBydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNWYXJpYWJsZU9i
amVjdDo6SlNWYXJpYWJsZU9iamVjdCk6CisgICAgICAgICogcnVudGltZS9KU1dpdGhTY29wZS5o
OgorICAgICAgICAoSlNDOjpKU1dpdGhTY29wZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNX
aXRoU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTV2l0aFNjb3BlOjpK
U1dpdGhTY29wZSk6CisgICAgICAgICogcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaDoKKyAgICAg
ICAgKEpTV3JhcHBlck9iamVjdCk6CisgICAgICAgIChKU0M6OkpTV3JhcHBlck9iamVjdDo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNXcmFwcGVyT2JqZWN0OjpKU1dyYXBwZXJP
YmplY3QpOgorICAgICAgICAoSlNDOjpKU1dyYXBwZXJPYmplY3Q6OnNldEludGVybmFsVmFsdWUp
OgorICAgICAgICAqIHJ1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHA6CisgICAgICAgIChKU0M6Ojo6
dHJ5SlNPTlBQYXJzZSk6CisgICAgICAgIChKU0M6Ojo6bWFrZUlkZW50aWZpZXIpOgorICAgICAg
ICAoSlNDOjo6OnBhcnNlKToKKyAgICAgICAgKiBydW50aW1lL0xvb2t1cC5jcHA6CisgICAgICAg
IChKU0M6Okhhc2hUYWJsZTo6Y3JlYXRlVGFibGUpOgorICAgICAgICAoSlNDOjpzZXRVcFN0YXRp
Y0Z1bmN0aW9uU2xvdCk6CisgICAgICAgICogcnVudGltZS9Mb29rdXAuaDoKKyAgICAgICAgKEpT
Qzo6SGFzaFRhYmxlOjppbml0aWFsaXplSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpIYXNoVGFi
bGU6OmVudHJ5KToKKyAgICAgICAgKEpTQzo6SGFzaFRhYmxlOjpiZWdpbik6CisgICAgICAgIChK
U0M6Okhhc2hUYWJsZTo6ZW5kKToKKyAgICAgICAgKEhhc2hUYWJsZSk6CisgICAgICAgIChKU0M6
Omxvb2t1cFB1dCk6CisgICAgICAgICogcnVudGltZS9NYXRoT2JqZWN0LmNwcDoKKyAgICAgICAg
KEpTQzo6TWF0aE9iamVjdDo6TWF0aE9iamVjdCk6CisgICAgICAgIChKU0M6Ok1hdGhPYmplY3Q6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY1Npbik6CisgICAg
ICAgICogcnVudGltZS9NYXRoT2JqZWN0Lmg6CisgICAgICAgIChKU0M6Ok1hdGhPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9NZW1vcnlTdGF0aXN0aWNzLmNwcDoK
KyAgICAgICAgKiBydW50aW1lL01lbW9yeVN0YXRpc3RpY3MuaDoKKyAgICAgICAgKiBydW50aW1l
L05hbWVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6Ok5hbWVDb25zdHJ1Y3Rvcjo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RQcml2YXRlTmFtZSk6CisgICAg
ICAgICogcnVudGltZS9OYW1lQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6TmFtZUNvbnN0
cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvTmFtZUluc3RhbmNl
LmNwcDoKKyAgICAgICAgKEpTQzo6TmFtZUluc3RhbmNlOjpOYW1lSW5zdGFuY2UpOgorICAgICAg
ICAqIHJ1bnRpbWUvTmFtZUluc3RhbmNlLmg6CisgICAgICAgIChKU0M6Ok5hbWVJbnN0YW5jZTo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6TmFtZUluc3RhbmNlOjpjcmVhdGUpOgor
ICAgICAgICAoTmFtZUluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6TmFtZUluc3RhbmNlOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9OYW1lUHJvdG90eXBlLmNwcDoKKyAgICAg
ICAgKEpTQzo6TmFtZVByb3RvdHlwZTo6TmFtZVByb3RvdHlwZSk6CisgICAgICAgIChKU0M6Ok5h
bWVQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL05hbWVQcm90
b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6TmFtZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKiBydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpT
Qzo6TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1
bnRpbWUvTmF0aXZlRXJyb3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpOYXRpdmVFcnJv
clByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpOdW1iZXJDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3Jl
YXRpb24pOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoTnVtYmVyQ29uc3RydWN0b3IpOgor
ICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6TnVt
YmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9OdW1i
ZXJPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpOdW1iZXJPYmplY3Q6Ok51bWJlck9iamVjdCk6
CisgICAgICAgIChKU0M6Ok51bWJlck9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpjb25zdHJ1Y3ROdW1iZXIpOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyT2JqZWN0Lmg6
CisgICAgICAgIChOdW1iZXJPYmplY3QpOgorICAgICAgICAoSlNDOjpOdW1iZXJPYmplY3Q6OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6Ok51bWJlck9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKiBydW50aW1lL051bWJlclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6Ok51bWJl
clByb3RvdHlwZTo6TnVtYmVyUHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6TnVtYmVyUHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OmludGVnZXJWYWx1ZVRvU3RyaW5n
KToKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAqIHJ1
bnRpbWUvTnVtYmVyUHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6Ok51bWJlclByb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6T2JqZWN0Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgor
ICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvclNlYWwpOgorICAgICAgICAoSlNDOjpvYmpl
Y3RDb25zdHJ1Y3RvckZyZWV6ZSk6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yUHJl
dmVudEV4dGVuc2lvbnMpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvcklzU2VhbGVk
KToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JJc0Zyb3plbik6CisgICAgICAgICog
cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpPYmplY3RDb25zdHJ1
Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RW1wdHlPYmpl
Y3QpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpT
Qzo6T2JqZWN0UHJvdG90eXBlOjpPYmplY3RQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpPYmpl
Y3RQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9G
dW5jVG9TdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBy
dW50aW1lL09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpqc1R5cGVTdHJpbmdGb3JWYWx1
ZSk6CisgICAgICAgICogcnVudGltZS9PcGVyYXRpb25zLmg6CisgICAgICAgIChKU0MpOgorICAg
ICAgICAoSlNDOjpqc1N0cmluZyk6CisgICAgICAgIChKU0M6OmpzU3RyaW5nRnJvbUFyZ3VtZW50
cyk6CisgICAgICAgIChKU0M6Om5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3Mp
OgorICAgICAgICAoSlNDOjpub3JtYWxpemVQcm90b3R5cGVDaGFpbik6CisgICAgICAgICogcnVu
dGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU1hcEVu
dHJ5OjpQcm9wZXJ0eU1hcEVudHJ5KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKFByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlNDOjpQ
cm9wZXJ0eVRhYmxlOjpjb3B5KToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5
Lmg6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5OjpQcm9wZXJ0eU5hbWVBcnJheSk6
CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5Ojp2bSk6CisgICAgICAgIChKU0M6OlBy
b3BlcnR5TmFtZUFycmF5OjphZGRLbm93blVuaXF1ZSk6CisgICAgICAgIChQcm9wZXJ0eU5hbWVB
cnJheSk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6UHJvcGVydHlUYWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6
Y2xvbmUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKToKKyAg
ICAgICAgKiBydW50aW1lL1Byb3RvdHlwZU1hcC5jcHA6CisgICAgICAgIChKU0M6OlByb3RvdHlw
ZU1hcDo6ZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUpOgorICAgICAgICAqIHJ1bnRp
bWUvUmVnRXhwLmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpSZWdFeHApOgorICAgICAgICAo
SlNDOjpSZWdFeHA6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpjcmVh
dGVXaXRob3V0Q2FjaGluZyk6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6UmVnRXhwOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpjb21waWxl
SWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpSZWdFeHA6Om1hdGNoKToKKyAgICAgICAgKEpT
Qzo6UmVnRXhwOjpjb21waWxlTWF0Y2hPbmx5KToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpjb21w
aWxlSWZOZWNlc3NhcnlNYXRjaE9ubHkpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwLmg6Cisg
ICAgICAgIChKU0MpOgorICAgICAgICAoUmVnRXhwKToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpj
cmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwOgorICAg
ICAgICAoSlNDOjpSZWdFeHBDYWNoZTo6bG9va3VwT3JDcmVhdGUpOgorICAgICAgICAoSlNDOjpS
ZWdFeHBDYWNoZTo6UmVnRXhwQ2FjaGUpOgorICAgICAgICAoSlNDOjpSZWdFeHBDYWNoZTo6YWRk
VG9TdHJvbmdDYWNoZSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDYWNoZS5oOgorICAgICAg
ICAoUmVnRXhwQ2FjaGUpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNw
cDoKKyAgICAgICAgKEpTQzo6UmVnRXhwQ2FjaGVkUmVzdWx0OjpsYXN0UmVzdWx0KToKKyAgICAg
ICAgKEpTQzo6UmVnRXhwQ2FjaGVkUmVzdWx0OjpzZXRJbnB1dCk6CisgICAgICAgICogcnVudGlt
ZS9SZWdFeHBDYWNoZWRSZXN1bHQuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwQ2FjaGVkUmVzdWx0
OjpSZWdFeHBDYWNoZWRSZXN1bHQpOgorICAgICAgICAoSlNDOjpSZWdFeHBDYWNoZWRSZXN1bHQ6
OnJlY29yZCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OlJlZ0V4cENvbnN0cnVjdG9yOjpSZWdFeHBDb25zdHJ1Y3Rvcik6CisgICAgICAg
IChKU0M6OlJlZ0V4cENvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6
OmNvbnN0cnVjdFJlZ0V4cCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5o
OgorICAgICAgICAoSlNDOjpSZWdFeHBDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKFJlZ0V4cENvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6UmVnRXhwQ29uc3RydWN0
b3I6OnBlcmZvcm1NYXRjaCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXku
Y3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBNYXRjaGVzQXJyYXk6OlJlZ0V4cE1hdGNoZXNBcnJh
eSk6CisgICAgICAgIChKU0M6OlJlZ0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRlKToKKyAgICAgICAg
KEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6
OlJlZ0V4cE1hdGNoZXNBcnJheTo6cmVpZnlBbGxQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBydW50
aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oOgorICAgICAgICAoUmVnRXhwTWF0Y2hlc0FycmF5KToK
KyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAg
ICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2Jq
ZWN0OjpSZWdFeHBPYmplY3QpOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjptYXRjaCk6CisgICAgICAgICog
cnVudGltZS9SZWdFeHBPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OnNldFJlZ0V4cCk6CisgICAgICAgIChK
U0M6OlJlZ0V4cE9iamVjdDo6c2V0TGFzdEluZGV4KToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2Jq
ZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBl
LmNwcDoKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jQ29tcGlsZSk6CisgICAgICAgICog
cnVudGltZS9SZWdFeHBQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwUHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvU21hbGxTdHJpbmdzLmNwcDoK
KyAgICAgICAgKEpTQzo6U21hbGxTdHJpbmdzOjppbml0aWFsaXplQ29tbW9uU3RyaW5ncyk6Cisg
ICAgICAgIChKU0M6OlNtYWxsU3RyaW5nczo6Y3JlYXRlRW1wdHlTdHJpbmcpOgorICAgICAgICAo
SlNDOjpTbWFsbFN0cmluZ3M6OmNyZWF0ZVNpbmdsZUNoYXJhY3RlclN0cmluZyk6CisgICAgICAg
IChKU0M6OlNtYWxsU3RyaW5nczo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcnVudGltZS9TbWFs
bFN0cmluZ3MuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OlNtYWxsU3RyaW5nczo6
c2luZ2xlQ2hhcmFjdGVyU3RyaW5nKToKKyAgICAgICAgKFNtYWxsU3RyaW5ncyk6CisgICAgICAg
ICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcDoKKyAgICAgICAgKEpTQzo6U3BhcnNl
QXJyYXlWYWx1ZU1hcDo6U3BhcnNlQXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6OlNwYXJz
ZUFycmF5VmFsdWVNYXA6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJy
YXlWYWx1ZU1hcDo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0
RGlyZWN0KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6cHV0KToKKyAgICAgICAg
KiBydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cmlj
dEV2YWxBY3RpdmF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaWN0RXZhbEFjdGl2YXRpb246
OlN0cmljdEV2YWxBY3RpdmF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cmljdEV2YWxBY3Rp
dmF0aW9uLmg6CisgICAgICAgIChKU0M6OlN0cmljdEV2YWxBY3RpdmF0aW9uOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpTdHJpY3RFdmFsQWN0aXZhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKiBydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U3Ry
aW5nQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cmlu
Z0NvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6OlN0cmluZ0NvbnN0cnVjdG9yOjpjcmVhdGVT
dHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcDoKKyAgICAgICAg
KEpTQzo6U3RyaW5nT2JqZWN0OjpTdHJpbmdPYmplY3QpOgorICAgICAgICAoSlNDOjpTdHJpbmdP
YmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0U3RyaW5nKToK
KyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5oOgorICAgICAgICAoSlNDOjpTdHJpbmdP
YmplY3Q6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKFN0cmluZ09iamVjdCk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpTdHJpbmdQcm90b3R5cGU6OlN0cmluZ1Byb3Rv
dHlwZSk6CisgICAgICAgIChKU0M6OlN0cmluZ1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgor
ICAgICAgICAoSlNDOjpyZW1vdmVVc2luZ1JlZ0V4cFNlYXJjaCk6CisgICAgICAgIChKU0M6OnJl
cGxhY2VVc2luZ1JlZ0V4cFNlYXJjaCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY01h
dGNoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU2VhcmNoKToKKyAgICAgICAgKEpT
Qzo6c3RyaW5nUHJvdG9GdW5jU3BsaXQpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90
eXBlLmg6CisgICAgICAgIChKU0M6OlN0cmluZ1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKiBydW50aW1lL1N0cmluZ1JlY3Vyc2lvbkNoZWNrZXIuaDoKKyAgICAgICAgKEpT
Qzo6U3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6cGVyZm9ybUNoZWNrKToKKyAgICAgICAgKEpTQzo6
U3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6flN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIpOgorICAgICAg
ICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNp
dGlvblRhYmxlOjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OlN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6ZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0aW9uKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0
b0RpY3Rpb25hcnlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0b0NhY2hl
YWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0b1Vu
Y2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OnNlYWxUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmcmVlemVUcmFuc2l0
aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRp
b24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlm
UGlubmVkKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24p
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmlzU2VhbGVkKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjppc0Zyb3plbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rp
b25hcnlTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5V2l0
aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5
V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFsbG9jYXRlUmFy
ZURhdGEpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNsb25lUmFyZURhdGFGcm9tKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZSk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjpnZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0
aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkZXNwZWNpZnlBbGxGdW5jdGlvbnMpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnB1dFNwZWNpZmljVmFsdWUpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZVByb3BlcnR5TWFwKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjpnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0UHJvdG90
eXBlV2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNldEdsb2Jh
bE9iamVjdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0T2JqZWN0VG9TdHJpbmdWYWx1
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVj
ZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFw
SWZOZWNlc3NhcnlGb3JQaW5uaW5nKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzZXRQcmV2
aW91c0lEKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcDoKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlQ2hhaW46OlN0cnVjdHVyZUNoYWluKToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZUNoYWluLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUNoYWluOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVDaGFpbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlQ2hhaW46OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFN0cnVj
dHVyZUNoYWluKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Z2V0KToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjpzZXRFbnVtZXJhdGlvbkNhY2hlKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjpwcm90b3R5cGVDaGFpbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHJvcGVy
dHlUYWJsZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHA6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
UmFyZURhdGE6OmNsb25lKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OlN0cnVj
dHVyZVJhcmVEYXRhKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmg6Cisg
ICAgICAgIChTdHJ1Y3R1cmVSYXJlRGF0YSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVS
YXJlRGF0YUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnNldFBy
ZXZpb3VzSUQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0T2JqZWN0VG9T
dHJpbmdWYWx1ZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUu
aDoKKyAgICAgICAgKFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6c2V0U2luZ2xlVHJhbnNpdGlvbik6CisgICAgICAgICog
cnVudGltZS9TeW1ib2xUYWJsZS5oOgorICAgICAgICAoSlNDOjpTaGFyZWRTeW1ib2xUYWJsZTo6
Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OlNoYXJlZFN5bWJvbFRhYmxlOjpTaGFyZWRTeW1ib2xUYWJsZSk6
CisgICAgICAgICogcnVudGltZS9WTS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAuCisgICAgICAgIChKU0M6OlZNOjpWTSk6Cisg
ICAgICAgIChKU0M6OlZNOjp+Vk0pOgorICAgICAgICAoSlNDOjpWTTo6Y3JlYXRlQ29udGV4dEdy
b3VwKToKKyAgICAgICAgKEpTQzo6Vk06OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlZNOjpjcmVh
dGVMZWFrZWQpOgorICAgICAgICAoSlNDOjpWTTo6c2hhcmVkSW5zdGFuY2VFeGlzdHMpOgorICAg
ICAgICAoSlNDOjpWTTo6c2hhcmVkSW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpWTTo6c2hhcmVk
SW5zdGFuY2VJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OlZNOjpnZXRIb3N0RnVuY3Rpb24pOgor
ICAgICAgICAoSlNDOjpWTTo6Q2xpZW50RGF0YTo6fkNsaWVudERhdGEpOgorICAgICAgICAoSlND
OjpWTTo6cmVzZXREYXRlQ2FjaGUpOgorICAgICAgICAoSlNDOjpWTTo6c3RhcnRTYW1wbGluZyk6
CisgICAgICAgIChKU0M6OlZNOjpzdG9wU2FtcGxpbmcpOgorICAgICAgICAoSlNDOjpWTTo6ZGlz
Y2FyZEFsbENvZGUpOgorICAgICAgICAoSlNDOjpWTTo6ZHVtcFNhbXBsZURhdGEpOgorICAgICAg
ICAoSlNDOjpWTTo6YWRkU291cmNlUHJvdmlkZXJDYWNoZSk6CisgICAgICAgIChKU0M6OlZNOjpj
bGVhclNvdXJjZVByb3ZpZGVyQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Vk06OnJlbGVhc2VFeGVj
dXRhYmxlTWVtb3J5KToKKyAgICAgICAgKEpTQzo6cmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkpOgor
ICAgICAgICAoSlNDOjpWTTo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMpOgorICAgICAgICAoSlND
OjpWTTo6YWRkUmVnRXhwVG9UcmFjZSk6CisgICAgICAgIChKU0M6OlZNOjpkdW1wUmVnRXhwVHJh
Y2UpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmguCisgICAgICAgIChWTSk6CisgICAgICAgIChK
U0M6OlZNOjppc1NoYXJlZEluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6Vk06OnVzaW5nQVBJKToK
KyAgICAgICAgKEpTQzo6Vk06OmlzSW5pdGlhbGl6aW5nT2JqZWN0KToKKyAgICAgICAgKEpTQzo6
Vk06OnNldEluaXRpYWxpemluZ09iamVjdENsYXNzKToKKyAgICAgICAgKEpTQzo6V2Vha1NldDo6
aGVhcCk6CisgICAgICAgICogcnVudGltZS9Xcml0ZUJhcnJpZXIuaDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgIChKU0M6OldyaXRlQmFycmllckJhc2U6OnNldCk6CisgICAgICAgIChKU0M6Oldy
aXRlQmFycmllckJhc2U6OnNldE1heUJlTnVsbCk6CisgICAgICAgIChKU0M6OldyaXRlQmFycmll
ckJhc2U6OnNldEVhcmx5VmFsdWUpOgorICAgICAgICAoSlNDOjpXcml0ZUJhcnJpZXI6OldyaXRl
QmFycmllcik6CisgICAgICAgICogdGVzdFJlZ0V4cC5jcHA6CisgICAgICAgIChHbG9iYWxPYmpl
Y3QpOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAoR2xvYmFsT2Jq
ZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKHRlc3RPbmVSZWdFeHApOgorICAgICAg
ICAocGFyc2VSZWdFeHBMaW5lKToKKyAgICAgICAgKHJ1bkZyb21GaWxlcyk6CisgICAgICAgIChy
ZWFsTWFpbik6CisgICAgICAgICogeWFyci9ZYXJySW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEJ5
dGVjb2RlUGF0dGVybik6CisgICAgICAgICogeWFyci9ZYXJySklULmNwcDoKKyAgICAgICAgKFlh
cnJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpjb21waWxl
KToKKyAgICAgICAgKEpTQzo6WWFycjo6aml0Q29tcGlsZSk6CisgICAgICAgICogeWFyci9ZYXJy
SklULmg6CisgICAgICAgIChKU0MpOgorCiAyMDEzLTA0LTE0ICBSb2dlciBGb25nICA8cm9nZXJf
Zm9uZ0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gTW9yZSBXaW5kb3dzIGJ1aWxk
IGZpeC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShy
ZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQkod29ya2luZyBjb3B5KQpAQCAtNjQ3LDggKzY0Nyw4IEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlv
bi5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0V4cG9ydE1hY3Jvcy5oIFwKLQlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwIFwKLQlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaCBcCisJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25z
LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5j
dGlvbnMuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0pTQ1R5cGVkQXJyYXlTdHVi
cy5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRB
cnJheVN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDggQEAgcHVibGljOiBcCiAg
ICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOyBcCiAgICAgc3RhdGljIEpTIyNu
YW1lIyNBcnJheSogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8bmFtZSMjQXJyYXk+IGltcGwpIFwKICAgICB7
IFwKLSAgICAgICAgSlMjI25hbWUjI0FycmF5KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxs
b2NhdGVDZWxsPEpTIyNuYW1lIyNBcnJheT4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVh
cCkpIEpTIyNuYW1lIyNBcnJheShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7IFwKLSAg
ICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7IFwK
KyAgICAgICAgSlMjI25hbWUjI0FycmF5KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2Nh
dGVDZWxsPEpTIyNuYW1lIyNBcnJheT4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKUyMjbmFt
ZSMjQXJyYXkoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOyBcCisgICAgICAgIHB0ci0+
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsgXAogICAgICAgICByZXR1cm4gcHRy
OyBcCiAgICAgfVwKIFwKQEAgLTYwLDkgKzYwLDkgQEAgcHVibGljOiBcCiAgICAgc3RhdGljIHZv
aWQgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wpO1wKICAgICBzdGF0aWMgY29uc3QgSlNDOjpD
bGFzc0luZm8gc19pbmZvO1wKIFwKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKVwKKyAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKVwKICAgICB7XAotICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7XAorICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pO1wKICAgICB9XAogXAogICAgIHN0YXRpYyB2b2lk
IGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlIG1vZGUgPSBKU0M6OkV4
Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpO1wKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOiBcCiAg
ICAgUmVmUHRyPG5hbWUjI0FycmF5PiBtX2ltcGw7XAogcHJvdGVjdGVkOlwKICAgICBKUyMjbmFt
ZSMjQXJyYXkoSlNDOjpTdHJ1Y3R1cmUqLCBKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8bmFt
ZSMjQXJyYXk+KTtcCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkpTR2xvYmFsRGF0YSYp
O1wKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTtcCiAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVz
IHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3Ro
SXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1
Y3R1cmVGbGFnczsgXAogICAgIEpTQzo6SlNWYWx1ZSBnZXRCeUluZGV4KEpTQzo6RXhlY1N0YXRl
KiwgdW5zaWduZWQgaW5kZXgpO1wKICAgICB2b2lkIGluZGV4U2V0dGVyKEpTQzo6RXhlY1N0YXRl
KiwgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSk7XApAQCAtODMsMTkgKzgzLDE5IEBAIHBy
b3RlY3RlZDpcCiBjb25zdCBDbGFzc0luZm8gSlMjI25hbWUjI0FycmF5OjpzX2luZm8gPSB7ICNu
YW1lICJBcnJheSIgLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
IyNuYW1lIyNBcnJheSkgfTtcCiBcCiBKUyMjbmFtZSMjQXJyYXk6OkpTIyNuYW1lIyNBcnJheShT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1Jl
ZlB0cjxuYW1lIyNBcnJheT4gaW1wbClcCi0gICAgOiBCYXNlKGdsb2JhbE9iamVjdC0+Z2xvYmFs
RGF0YSgpLCBzdHJ1Y3R1cmUpXAorICAgIDogQmFzZShnbG9iYWxPYmplY3QtPnZtKCksIHN0cnVj
dHVyZSlcCiAgICAgLCBtX2ltcGwoaW1wbClcCiB7XAogfVwKIFwKLXZvaWQgSlMjI25hbWUjI0Fy
cmF5OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpXAordm9pZCBKUyMj
bmFtZSMjQXJyYXk6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSlcCiB7XAotICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKGdsb2JhbERhdGEpO1wKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7XAog
ICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIGRlc2NyaXB0b3IoJkpTIyNuYW1lIyNBcnJheTo6c19p
bmZvLCBPQkpFQ1RfT0ZGU0VUT0YoSlMjI25hbWUjI0FycmF5LCBtX3N0b3JhZ2UpLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlMjI25hbWUjI0FycmF5LCBtX3N0b3JhZ2VMZW5ndGgpKTtcCi0gICAgZ2xvYmFs
RGF0YS5yZWdpc3RlclR5cGVkQXJyYXlEZXNjcmlwdG9yKG1faW1wbC5nZXQoKSwgZGVzY3JpcHRv
cik7XAorICAgIHZtLnJlZ2lzdGVyVHlwZWRBcnJheURlc2NyaXB0b3IobV9pbXBsLmdldCgpLCBk
ZXNjcmlwdG9yKTtcCiAgICAgbV9zdG9yYWdlID0gbV9pbXBsLT5kYXRhKCk7XAogICAgIG1fc3Rv
cmFnZUxlbmd0aCA9IG1faW1wbC0+bGVuZ3RoKCk7XAotICAgIHB1dERpcmVjdChnbG9iYWxEYXRh
LCBnbG9iYWxEYXRhLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIobV9zdG9yYWdlTGVu
Z3RoKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOyBcCisgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKG1fc3RvcmFnZUxlbmd0aCks
IERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsgXAogICAgIEFTU0VSVChpbmhlcml0
cygmc19pbmZvKSk7XAogfVwKIFwKQEAgLTE4NCw3ICsxODQsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgaW50MzJfdCBsZW5ndGggPSBjYWxsRnJhbWUt
PmFyZ3VtZW50KDApLnRvSW50MzIoY2FsbEZyYW1lKTsgXAogICAgIGlmIChsZW5ndGggPCAwKSBc
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7IFwKLSAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTIyNuYW1lIyNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGNh
bGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
Y2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKTsgXAor
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSlMjI25hbWUjI0FycmF5OjpjcmVhdGVTdHJ1Y3R1
cmUoY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2Fs
bEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKTsgXAogICAg
IFJlZlB0cjxuYW1lIyNBcnJheT4gYnVmZmVyID0gbmFtZSMjQXJyYXk6OmNyZWF0ZShsZW5ndGgp
OyBcCiAgICAgaWYgKCFidWZmZXIpIFwKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihjYWxs
RnJhbWUsIGNyZWF0ZVJhbmdlRXJyb3IoY2FsbEZyYW1lLCAiQXJyYXlCdWZmZXIgc2l6ZSBpcyBu
b3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKSk7IFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5vcmRlcgo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUub3JkZXIJKHJldmlzaW9uIDE0ODYzOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5vcmRlcgkod29ya2luZyBjb3B5
KQpAQCAtMjMsNyArMjMsNyBAQCBfX1pOM0pTQ0wyM2luaXRpYWxpemVUaHJlYWRpbmdPbmNlRXYK
IF9fWk4zV1RGMTBTdHJpbmdJbXBsNWVtcHR5RXYKIF9fWk4zV1RGMTNXVEZUaHJlYWREYXRhQzFF
dgogX19aTjNXVEYxMVN0YWNrQm91bmRzMTBpbml0aWFsaXplRXYKLV9fWk4zSlNDMTJKU0dsb2Jh
bERhdGExMHN0b3JlVlB0cnNFdgorX19aTjNKU0MxMlZNMTBzdG9yZVZQdHJzRXYKIF9fWk4zSlND
N0pTQXJyYXlDMUVOU182SlNDZWxsMjBWUHRyU3RlYWxpbmdIYWNrVHlwZUUKIF9fWk4zSlNDMTBK
U0Z1bmN0aW9uQzFFTlNfNkpTQ2VsbDIwVlB0clN0ZWFsaW5nSGFja1R5cGVFCiBfX1pOM1dURjE1
aW5pdGlhbGl6ZURhdGVzRXYKQEAgLTExOSw2NSArMTE5LDY1IEBAIF9fWk4zV1RGMTJBdG9taWNT
dHJpbmc2cmVtb3ZlRVBOU18xMFN0cmkKIF9KU0dsb2JhbENvbnRleHRDcmVhdGUKIF9fWk4zSlND
NkpTTG9jazRsb2NrRU5TXzE0SlNMb2NrQmVoYXZpb3JFCiBfX1pOM0pTQ0wxN2NyZWF0ZUpTTG9j
a0NvdW50RXYKLV9fWk4zSlNDMTJKU0dsb2JhbERhdGExNHNoYXJlZEluc3RhbmNlRXYKLV9fWk4z
SlNDMTJKU0dsb2JhbERhdGFDMkVOUzBfMTRHbG9iYWxEYXRhVHlwZUVOU184SGVhcFR5cGVFCitf
X1pOM0pTQzEyVk0xNHNoYXJlZEluc3RhbmNlRXYKK19fWk4zSlNDMTJWTUMyRU5TMF8xNEdsb2Jh
bERhdGFUeXBlRU5TXzhIZWFwVHlwZUUKIF9fWk4zSlNDMjFjcmVhdGVJZGVudGlmaWVyVGFibGVF
dgotX19aTjNKU0MxN0NvbW1vbklkZW50aWZpZXJzQzFFUE5TXzEySlNHbG9iYWxEYXRhRQotX19a
TjNKU0MxN0NvbW1vbklkZW50aWZpZXJzQzJFUE5TXzEySlNHbG9iYWxEYXRhRQotX19aTjNKU0Mx
MElkZW50aWZpZXIzYWRkRVBOU18xMkpTR2xvYmFsRGF0YUVQS2MKK19fWk4zSlNDMTdDb21tb25J
ZGVudGlmaWVyc0MxRVBOU18xMlZNRQorX19aTjNKU0MxN0NvbW1vbklkZW50aWZpZXJzQzJFUE5T
XzEyVk1FCitfX1pOM0pTQzEwSWRlbnRpZmllcjNhZGRFUE5TXzEyVk1FUEtjCiBfX1pOM0pTQzE1
SWRlbnRpZmllclRhYmxlM2FkZElQS2NOU18yN0lkZW50aWZpZXJDU3RyaW5nVHJhbnNsYXRvckVF
RVN0NHBhaXJJTjNXVEYyOUhhc2hUYWJsZUNvbnN0SXRlcmF0b3JBZGFwdGVySU5TNl85SGFzaFRh
YmxlSVBOUzZfMTBTdHJpbmdJbXBsRVNBX05TNl8xN0lkZW50aXR5RXh0cmFjdG9ySVNBX0VFTlM2
XzEwU3RyaW5nSGFzaEVOUzZfMTBIYXNoVHJhaXRzSVNBX0VFU0ZfRUVTQV9FRWJFVF8KIF9fWk4z
V1RGOUhhc2hUYWJsZUlQTlNfMTBTdHJpbmdJbXBsRVMyX05TXzE3SWRlbnRpdHlFeHRyYWN0b3JJ
UzJfRUVOU18xMFN0cmluZ0hhc2hFTlNfMTBIYXNoVHJhaXRzSVMyX0VFUzdfRTZleHBhbmRFdgog
X19aTjNXVEY5SGFzaFRhYmxlSVBLY1N0NHBhaXJJUzJfTlNfNlJlZlB0cklOU18xMFN0cmluZ0lt
cGxFRUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzdfRUVOU183UHRySGFzaElTMl9FRU5TXzE0
UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMyX0VFTlNEX0lTNl9FRUVFU0VfRTZleHBh
bmRFdgogX19aTjNXVEY5SGFzaFRhYmxlSVBOU18xMFN0cmluZ0ltcGxFUzJfTlNfMTdJZGVudGl0
eUV4dHJhY3RvcklTMl9FRU5TXzEwU3RyaW5nSGFzaEVOU18xMEhhc2hUcmFpdHNJUzJfRUVTN19F
NGZpbmRJUzJfTlNfMjJJZGVudGl0eUhhc2hUcmFuc2xhdG9ySVMyX1MyX1M1X0VFRUVOU18xN0hh
c2hUYWJsZUl0ZXJhdG9ySVMyX1MyX1M0X1M1X1M3X1M3X0VFUktUXwotX19aTjNKU0MxMElkZW50
aWZpZXJDMUVQTlNfMTJKU0dsb2JhbERhdGFFUEtjCitfX1pOM0pTQzEwSWRlbnRpZmllckMxRVBO
U18xMlZNRVBLYwogX19aTjNKU0MxMlNtYWxsU3RyaW5nc0MxRXYKIF9fWk4zSlNDMTlFeGVjdXRh
YmxlQWxsb2NhdG9yMTdpbnRpYWxpemVQYWdlU2l6ZUV2CiBfX1pOSzNKU0MxOUV4ZWN1dGFibGVB
bGxvY2F0b3I3aXNWYWxpZEV2CiBfX1pOM1dURjExT1NBbGxvY2F0b3IxOHJlc2VydmVVbmNvbW1p
dHRlZEVtTlMwXzVVc2FnZUViYgogX19aTjNKU0MxNEV4ZWN1dGFibGVQb29sMTFzeXN0ZW1BbGxv
Y0VtCiBfX1pOM1dURjExT1NBbGxvY2F0b3I2Y29tbWl0RVB2bWJiCi1fX1pOM0pTQzVMZXhlckMx
RVBOU18xMkpTR2xvYmFsRGF0YUUKK19fWk4zSlNDNUxleGVyQzFFUE5TXzEyVk1FCiBfX1pOM0pT
QzExUGFyc2VyQXJlbmFDMUV2CiBfX1pOM0pTQzExUGFyc2VyQXJlbmFDMkV2CiBfX1pOM0pTQzE0
VGltZW91dENoZWNrZXJDMUV2Ci1fX1pOM0pTQzRIZWFwQzFFUE5TXzEySlNHbG9iYWxEYXRhRQot
X19aTjNKU0M0SGVhcEMyRVBOU18xMkpTR2xvYmFsRGF0YUUKLV9fWk4zSlNDMTFNYXJrZWRTcGFj
ZUMxRVBOU18xMkpTR2xvYmFsRGF0YUUKK19fWk4zSlNDNEhlYXBDMUVQTlNfMTJWTUUKK19fWk4z
SlNDNEhlYXBDMkVQTlNfMTJWTUUKK19fWk4zSlNDMTFNYXJrZWRTcGFjZUMxRVBOU18xMlZNRQog
X19aTjNKU0MyNURlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2tDMUVQTlNfNEhlYXBFCiBfX1pOM0pT
QzI1RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazE3Y29tbW9uQ29uc3RydWN0b3JFUE5TXzRIZWFw
RVAxMV9fQ0ZSdW5Mb29wCiBfX1pOM0pTQzE0TWFjaGluZVRocmVhZHNDMUVQTlNfNEhlYXBFCiBf
X1pOM0pTQzlNYXJrU3RhY2sxOGluaXRpYWxpemVQYWdlc2l6ZUV2CiBfX1pOM1dURjExT1NBbGxv
Y2F0b3IxNnJlc2VydmVBbmRDb21taXRFbU5TMF81VXNhZ2VFYmIKLV9fWk4zSlNDMTBIYW5kbGVI
ZWFwQzFFUE5TXzEySlNHbG9iYWxEYXRhRQorX19aTjNKU0MxMEhhbmRsZUhlYXBDMUVQTlNfMTJW
TUUKIF9fWk4zV1RGMTBCbG9ja1N0YWNrSU4zSlNDMTBIYW5kbGVIZWFwNE5vZGVFRTRncm93RXYK
IF9fWk4zV1RGNlZlY3RvcklQTjNKU0MxMEhhbmRsZUhlYXA0Tm9kZUVMbTBFRTE1cmVzZXJ2ZUNh
cGFjaXR5RW0KIF9fWk4zSlNDMTFIYW5kbGVTdGFja0MxRXYKIF9fWk4zV1RGMTBCbG9ja1N0YWNr
SU4zSlNDN0pTVmFsdWVFRTRncm93RXYKIF9fWk4zV1RGNlZlY3RvcklQTjNKU0M3SlNWYWx1ZUVM
bTBFRTE1cmVzZXJ2ZUNhcGFjaXR5RW0KIF9fWk4zSlNDMjVEZWZhdWx0R0NBY3Rpdml0eUNhbGxi
YWNrY2xFdgotX19aTjNKU0MxMVJlZ0V4cENhY2hlQzFFUE5TXzEySlNHbG9iYWxEYXRhRQotX19a
TjNKU0MxMUludGVycHJldGVyQzFFUk5TXzEySlNHbG9iYWxEYXRhRQorX19aTjNKU0MxMVJlZ0V4
cENhY2hlQzFFUE5TXzEyVk1FCitfX1pOM0pTQzExSW50ZXJwcmV0ZXJDMUVSTlNfMTJWTUUKIF9f
Wk4zSlNDMTBIYW5kbGVIZWFwMTJ3cml0ZUJhcnJpZXJFUE5TXzdKU1ZhbHVlRVJLUzFfCiBfX1pO
M0pTQzEySlNTdGFjazIzYWRkVG9Db21taXR0ZWRCeXRlQ291bnRFbAogX19aTjNKU0MxMU1hcmtl
ZFNwYWNlMjFhbGxvY2F0ZUZyb21TaXplQ2xhc3NFUk5TMF85U2l6ZUNsYXNzRQogX19aTjNKU0Mx
MU1hcmtlZFNwYWNlMTNhbGxvY2F0ZUJsb2NrRVJOUzBfOVNpemVDbGFzc0UKLV9fWk4zSlNDMTFN
YXJrZWRCbG9jazZjcmVhdGVFUE5TXzEySlNHbG9iYWxEYXRhRW0KK19fWk4zSlNDMTFNYXJrZWRC
bG9jazZjcmVhdGVFUE5TXzEyVk1FbQogX19aTjNXVEYyMVBhZ2VBbGxvY2F0aW9uQWxpZ25lZDhh
bGxvY2F0ZUVtbU5TXzExT1NBbGxvY2F0b3I1VXNhZ2VFYmIKIF9fWk4zV1RGOUhhc2hUYWJsZUlQ
TjNKU0MxMU1hcmtlZEJsb2NrRVMzX05TXzE3SWRlbnRpdHlFeHRyYWN0b3JJUzNfRUVOU183UHRy
SGFzaElTM19FRU5TXzEwSGFzaFRyYWl0c0lTM19FRVM5X0U2cmVoYXNoRWkKIF9fWk4zSlNDNkpT
Q2VsbEQxRXYKLV9fWk4zSlNDOVN0cnVjdHVyZUMxRVJOU18xMkpTR2xvYmFsRGF0YUUKLV9fWk4z
SlNDNlN0cm9uZ0lOU185U3RydWN0dXJlRUUzc2V0RVJOU18xMkpTR2xvYmFsRGF0YUVQUzFfCi1f
X1pOM0pTQzlTdHJ1Y3R1cmU2Y3JlYXRlRVJOU18xMkpTR2xvYmFsRGF0YUVOU183SlNWYWx1ZUVS
S05TXzhUeXBlSW5mb0VqUEtOU185Q2xhc3NJbmZvRQotX19aTjNKU0M5U3RydWN0dXJlQzFFUk5T
XzEySlNHbG9iYWxEYXRhRU5TXzdKU1ZhbHVlRVJLTlNfOFR5cGVJbmZvRWpQS05TXzlDbGFzc0lu
Zm9FCitfX1pOM0pTQzlTdHJ1Y3R1cmVDMUVSTlNfMTJWTUUKK19fWk4zSlNDNlN0cm9uZ0lOU185
U3RydWN0dXJlRUUzc2V0RVJOU18xMlZNRVBTMV8KK19fWk4zSlNDOVN0cnVjdHVyZTZjcmVhdGVF
Uk5TXzEyVk1FTlNfN0pTVmFsdWVFUktOU184VHlwZUluZm9FalBLTlNfOUNsYXNzSW5mb0UKK19f
Wk4zSlNDOVN0cnVjdHVyZUMxRVJOU18xMlZNRU5TXzdKU1ZhbHVlRVJLTlNfOFR5cGVJbmZvRWpQ
S05TXzlDbGFzc0luZm9FCiBfX1pOM1dURjEzd3RmVGhyZWFkRGF0YUV2CiBfX1pOM0pTQzI3c3Rh
cnRQcm9maWxlclNlcnZlcklmTmVlZGVkRXYKICtbUHJvZmlsZXJTZXJ2ZXIgc2hhcmVkUHJvZmls
ZVNlcnZlcl0KIC1bUHJvZmlsZXJTZXJ2ZXIgaW5pdF0KLV9fWk4zSlNDOUpJVFRodW5rc0MxRVBO
U18xMkpTR2xvYmFsRGF0YUUKLV9fWk4zSlNDOUpJVFRodW5rc0MyRVBOU18xMkpTR2xvYmFsRGF0
YUUKLV9fWk4zSlNDM0pJVEMxRVBOU18xMkpTR2xvYmFsRGF0YUVQTlNfOUNvZGVCbG9ja0UKLV9f
Wk4zSlNDM0pJVEMyRVBOU18xMkpTR2xvYmFsRGF0YUVQTlNfOUNvZGVCbG9ja0UKLV9fWk4zSlND
M0pJVDM1cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXNFUE4zV1RGNlJlZlB0cklO
U18xNEV4ZWN1dGFibGVQb29sRUVFUE5TXzEySlNHbG9iYWxEYXRhRVBOU18xOVRyYW1wb2xpbmVT
dHJ1Y3R1cmVFCitfX1pOM0pTQzlKSVRUaHVua3NDMUVQTlNfMTJWTUUKK19fWk4zSlNDOUpJVFRo
dW5rc0MyRVBOU18xMlZNRQorX19aTjNKU0MzSklUQzFFUE5TXzEyVk1FUE5TXzlDb2RlQmxvY2tF
CitfX1pOM0pTQzNKSVRDMkVQTlNfMTJWTUVQTlNfOUNvZGVCbG9ja0UKK19fWk4zSlNDM0pJVDM1
cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXNFUE4zV1RGNlJlZlB0cklOU18xNEV4
ZWN1dGFibGVQb29sRUVFUE5TXzEyVk1FUE5TXzE5VHJhbXBvbGluZVN0cnVjdHVyZUUKIF9fWk4z
SlNDMjBNYWNyb0Fzc2VtYmxlclg4Nl82NDEzYnJhbmNoVGVzdFB0ckVOU18yM01hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uMTVSZXN1bHRDb25kaXRpb25FTlNfMTJYODZSZWdpc3RlcnMxMFJlZ2lzdGVy
SURFUzRfCiBfX1pOM0pTQzEyWDg2QXNzZW1ibGVyMjNYODZJbnN0cnVjdGlvbkZvcm1hdHRlcjEx
b25lQnl0ZU9wNjRFTlMwXzE1T25lQnl0ZU9wY29kZUlERWlOU18xMlg4NlJlZ2lzdGVyczEwUmVn
aXN0ZXJJREUKIF9fWk4zSlNDMTJYODZBc3NlbWJsZXIzakNDRU5TMF85Q29uZGl0aW9uRQpAQCAt
MTkyLDcgKzE5Miw3IEBAIF9fWk4zSlNDMjBNYWNyb0Fzc2VtYmxlclg4Nl82NDEzYnJhbmNoVGUK
IF9fWk4zSlNDMTJYODZBc3NlbWJsZXIyM1g4Nkluc3RydWN0aW9uRm9ybWF0dGVyOW9uZUJ5dGVP
cEVOUzBfMTVPbmVCeXRlT3Bjb2RlSURFTlNfMTJYODZSZWdpc3RlcnMxMFJlZ2lzdGVySURFCiBf
X1pOM1dURjZWZWN0b3JJY0xtMTI4RUUxNGV4cGFuZENhcGFjaXR5RW0KIF9fWk4zV1RGNlZlY3Rv
ckljTG0xMjhFRTRncm93RW0KLV9fWk4zSlNDM0pJVDI3cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVD
YWxsRVBOU18xMkpTR2xvYmFsRGF0YUViCitfX1pOM0pTQzNKSVQyN3ByaXZhdGVDb21waWxlQ1RJ
TmF0aXZlQ2FsbEVQTlNfMTJWTUViCiBfX1pOSzNKU0MyMkFic3RyYWN0TWFjcm9Bc3NlbWJsZXJJ
TlNfMTJYODZBc3NlbWJsZXJFRTRKdW1wNGxpbmtFUFMyXwogX19aTjNXVEYxMFJlZkNvdW50ZWRJ
TjNKU0MxNEV4ZWN1dGFibGVQb29sRUU1ZGVyZWZFdgogX19aTjNKU0MxNE1hY2hpbmVUaHJlYWRz
MjltYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkc0V2CkBAIC0yMDAsNyArMjAwLDcgQEAgX0pT
R2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXAKIF9fWk4zSlNDNEhlYXAxNmFjdGl2aXR5Q2FsbGJh
Y2tFdgogX19aTjNKU0MyNURlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2sxMXN5bmNocm9uaXplRXYK
IF9fWk4zSlNDMTRUaW1lb3V0Q2hlY2tlcjVyZXNldEV2Ci1fX1pOM0pTQzE0SlNHbG9iYWxPYmpl
Y3Rud0VtUE5TXzEySlNHbG9iYWxEYXRhRQorX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0bndFbVBO
U18xMlZNRQogX19aTjNXVEYxMnJhbmRvbU51bWJlckV2CiBfX1pOM1dURjI5Y3J5cHRvZ3JhcGhp
Y2FsbHlSYW5kb21OdW1iZXJFdgogX19aTjNXVEYzNWNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFs
dWVzRnJvbU9TRVBobQpAQCAtMjA4LDUyICsyMDgsNTIgQEAgX19aTjNKU0MxNEpTR2xvYmFsT2Jq
ZWN0NGluaXRFUE5TXzhKU09iagogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0NXJlc2V0RU5TXzdK
U1ZhbHVlRQogX19aTjNKU0MxN0Z1bmN0aW9uUHJvdG90eXBlQzFFUE5TXzlFeGVjU3RhdGVFUE5T
XzE0SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1cmVFCiBfX1pOM0pTQzE3RnVuY3Rpb25Qcm90
b3R5cGVDMkVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0cnVjdHVy
ZUUKLV9fWk4zSlNDMTZJbnRlcm5hbEZ1bmN0aW9uQzJFUE5TXzEySlNHbG9iYWxEYXRhRVBOU18x
NEpTR2xvYmFsT2JqZWN0RVBOU185U3RydWN0dXJlRVJLTlNfMTBJZGVudGlmaWVyRQorX19aTjNK
U0MxNkludGVybmFsRnVuY3Rpb25DMkVQTlNfMTJWTUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNf
OVN0cnVjdHVyZUVSS05TXzEwSWRlbnRpZmllckUKIF9fWk4zSlNDMjRKU09iamVjdFdpdGhHbG9i
YWxPYmplY3RDMkVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0cnVjdHVyZUUKIF9fWk4zSlND
N1VTdHJpbmdDMUVQS2MKLV9fWk4zSlNDMTJTbWFsbFN0cmluZ3MxN2NyZWF0ZUVtcHR5U3RyaW5n
RVBOU18xMkpTR2xvYmFsRGF0YUUKK19fWk4zSlNDMTJTbWFsbFN0cmluZ3MxN2NyZWF0ZUVtcHR5
U3RyaW5nRVBOU18xMlZNRQogX19aTjNKU0M5U3RydWN0dXJlNDBhZGRQcm9wZXJ0eVRyYW5zaXRp
b25Ub0V4aXN0aW5nU3RydWN0dXJlRVBTMF9SS05TXzEwSWRlbnRpZmllckVqUE5TXzZKU0NlbGxF
Um0KLV9fWk4zSlNDOVN0cnVjdHVyZTNnZXRFUk5TXzEySlNHbG9iYWxEYXRhRVBOM1dURjEwU3Ry
aW5nSW1wbEVSalJQTlNfNkpTQ2VsbEUKLV9fWk4zSlNDOVN0cnVjdHVyZTIxYWRkUHJvcGVydHlU
cmFuc2l0aW9uRVJOU18xMkpTR2xvYmFsRGF0YUVQUzBfUktOU18xMElkZW50aWZpZXJFalBOU182
SlNDZWxsRVJtCitfX1pOM0pTQzlTdHJ1Y3R1cmUzZ2V0RVJOU18xMlZNRVBOM1dURjEwU3RyaW5n
SW1wbEVSalJQTlNfNkpTQ2VsbEUKK19fWk4zSlNDOVN0cnVjdHVyZTIxYWRkUHJvcGVydHlUcmFu
c2l0aW9uRVJOU18xMlZNRVBTMF9SS05TXzEwSWRlbnRpZmllckVqUE5TXzZKU0NlbGxFUm0KIF9f
Wk4zSlNDOVN0cnVjdHVyZTE3Y3JlYXRlUHJvcGVydHlNYXBFagogX19aTjNXVEYxNGRlbGV0ZU93
bmVkUHRySU4zSlNDMTNQcm9wZXJ0eVRhYmxlRUVFdlBUXwotX19aTjNKU0M5U3RydWN0dXJlMTZw
dXRTcGVjaWZpY1ZhbHVlRVJOU18xMkpTR2xvYmFsRGF0YUVSS05TXzEwSWRlbnRpZmllckVqUE5T
XzZKU0NlbGxFCi1fX1pOM0pTQzI0U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlM2FkZEVSTlNfMTJK
U0dsb2JhbERhdGFFUE5TXzlTdHJ1Y3R1cmVFCi1fX1pOM0pTQzlTdHJ1Y3R1cmUyOGFkZFByb3Bl
cnR5V2l0aG91dFRyYW5zaXRpb25FUk5TXzEySlNHbG9iYWxEYXRhRVJLTlNfMTBJZGVudGlmaWVy
RWpQTlNfNkpTQ2VsbEUKK19fWk4zSlNDOVN0cnVjdHVyZTE2cHV0U3BlY2lmaWNWYWx1ZUVSTlNf
MTJWTUVSS05TXzEwSWRlbnRpZmllckVqUE5TXzZKU0NlbGxFCitfX1pOM0pTQzI0U3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlM2FkZEVSTlNfMTJWTUVQTlNfOVN0cnVjdHVyZUUKK19fWk4zSlNDOVN0
cnVjdHVyZTI4YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbkVSTlNfMTJWTUVSS05TXzEwSWRl
bnRpZmllckVqUE5TXzZKU0NlbGxFCiBfX1pOM0pTQzhKU09iamVjdDIzYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2VFbW0KIF9fWk4zSlNDMTdGdW5jdGlvblByb3RvdHlwZTIxYWRkRnVuY3Rpb25Qcm9w
ZXJ0aWVzRVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBOU185U3RydWN0dXJl
RVBQTlNfMTBKU0Z1bmN0aW9uRVM5XwogX19aTjNKU0MxMEpTRnVuY3Rpb25DMUVQTlNfOUV4ZWNT
dGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0cnVjdHVyZUVpUktOU18xMElkZW50aWZp
ZXJFUEZQdlMyX0UKIF9fWk4zSlNDMTBKU0Z1bmN0aW9uQzJFUE5TXzlFeGVjU3RhdGVFUE5TXzE0
SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1cmVFaVJLTlNfMTBJZGVudGlmaWVyRVBGUHZTMl9F
Ci1fX1pOM0pTQzEySlNHbG9iYWxEYXRhMTVnZXRIb3N0RnVuY3Rpb25FUEZQdlBOU185RXhlY1N0
YXRlRUUKLV9fWk4zSlNDOUpJVFRodW5rczE2aG9zdEZ1bmN0aW9uU3R1YkVQTlNfMTJKU0dsb2Jh
bERhdGFFUEZQdlBOU185RXhlY1N0YXRlRUUKK19fWk4zSlNDMTJWTTE1Z2V0SG9zdEZ1bmN0aW9u
RVBGUHZQTlNfOUV4ZWNTdGF0ZUVFCitfX1pOM0pTQzlKSVRUaHVua3MxNmhvc3RGdW5jdGlvblN0
dWJFUE5TXzEyVk1FUEZQdlBOU185RXhlY1N0YXRlRUUKIF9fWk4zV1RGN0hhc2hNYXBJUEZQdlBO
M0pTQzlFeGVjU3RhdGVFRU5TMl80V2Vha0lOUzJfMTZOYXRpdmVFeGVjdXRhYmxlRUVFTlNfN1B0
ckhhc2hJUzZfRUVOU18xMEhhc2hUcmFpdHNJUzZfRUVOU0NfSVM5X0VFRTNhZGRFUktTNl9SS1M5
XwogX19aTjNXVEY5SGFzaFRhYmxlSVBGUHZQTjNKU0M5RXhlY1N0YXRlRUVTdDRwYWlySVM2X05T
Ml80V2Vha0lOUzJfMTZOYXRpdmVFeGVjdXRhYmxlRUVFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9y
SVNCX0VFTlNfN1B0ckhhc2hJUzZfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0
c0lTNl9FRU5TSF9JU0FfRUVFRVNJX0U2ZXhwYW5kRXYKLV9fWk4zSlNDM0pJVDI3cHJpdmF0ZUNv
bXBpbGVDVElOYXRpdmVDYWxsRU4zV1RGMTBQYXNzUmVmUHRySU5TXzE0RXhlY3V0YWJsZVBvb2xF
RUVQTlNfMTJKU0dsb2JhbERhdGFFUEZQdlBOU185RXhlY1N0YXRlRUUKLV9fWk4zSlNDMTZOYXRp
dmVFeGVjdXRhYmxlNmNyZWF0ZUVSTlNfMTJKU0dsb2JhbERhdGFFTlNfMjFNYWNyb0Fzc2VtYmxl
ckNvZGVQdHJFUEZQdlBOU185RXhlY1N0YXRlRUVTM19TOF8KK19fWk4zSlNDM0pJVDI3cHJpdmF0
ZUNvbXBpbGVDVElOYXRpdmVDYWxsRU4zV1RGMTBQYXNzUmVmUHRySU5TXzE0RXhlY3V0YWJsZVBv
b2xFRUVQTlNfMTJWTUVQRlB2UE5TXzlFeGVjU3RhdGVFRQorX19aTjNKU0MxNk5hdGl2ZUV4ZWN1
dGFibGU2Y3JlYXRlRVJOU18xMlZNRU5TXzIxTWFjcm9Bc3NlbWJsZXJDb2RlUHRyRVBGUHZQTlNf
OUV4ZWNTdGF0ZUVFUzNfUzhfCiBfX1pOM0pTQzhKU09iamVjdDM0cHV0RGlyZWN0RnVuY3Rpb25X
aXRob3V0VHJhbnNpdGlvbkVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTBKU0Z1bmN0aW9uRWoKIF9fWk4z
SlNDMTBKU0Z1bmN0aW9uNG5hbWVFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0pTQzE1T2JqZWN0UHJv
dG90eXBlQzFFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1
cmVFCiBfX1pOM0pTQzE0QXJyYXlQcm90b3R5cGVDMUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNf
OVN0cnVjdHVyZUUKLV9fWk4zSlNDN0pTQXJyYXlDMkVSTlNfMTJKU0dsb2JhbERhdGFFUE5TXzlT
dHJ1Y3R1cmVFCitfX1pOM0pTQzdKU0FycmF5QzJFUk5TXzEyVk1FUE5TXzlTdHJ1Y3R1cmVFCiBf
X1pOM0pTQzE1U3RyaW5nUHJvdG90eXBlQzFFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxP
YmplY3RFUE5TXzlTdHJ1Y3R1cmVFCiBfX1pOM0pTQzE1U3RyaW5nUHJvdG90eXBlQzJFUE5TXzlF
eGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1cmVFCiBfX1pOM0pTQzEy
U3RyaW5nT2JqZWN0QzJFUE5TXzlFeGVjU3RhdGVFUE5TXzlTdHJ1Y3R1cmVFCiBfX1pOM0pTQzE2
Qm9vbGVhblByb3RvdHlwZUMxRVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBO
U185U3RydWN0dXJlRQotX19aTjNKU0MxM0Jvb2xlYW5PYmplY3RDMkVSTlNfMTJKU0dsb2JhbERh
dGFFUE5TXzlTdHJ1Y3R1cmVFCitfX1pOM0pTQzEzQm9vbGVhbk9iamVjdEMyRVJOU18xMlZNRVBO
U185U3RydWN0dXJlRQogX19aTjNKU0MxNU51bWJlclByb3RvdHlwZUMxRVBOU185RXhlY1N0YXRl
RVBOU18xNEpTR2xvYmFsT2JqZWN0RVBOU185U3RydWN0dXJlRQotX19aTjNKU0MxMk51bWJlck9i
amVjdEMyRVJOU18xMkpTR2xvYmFsRGF0YUVQTlNfOVN0cnVjdHVyZUUKK19fWk4zSlNDMTJOdW1i
ZXJPYmplY3RDMkVSTlNfMTJWTUVQTlNfOVN0cnVjdHVyZUUKIF9fWk4zSlNDMTNEYXRlUHJvdG90
eXBlQzFFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1cmVF
CiBfX1pOM0pTQzEyRGF0ZUluc3RhbmNlQzJFUE5TXzlFeGVjU3RhdGVFUE5TXzlTdHJ1Y3R1cmVF
CiBfX1pOM0pTQzEybm9uSW5saW5lTmFORXYKIF9fWk4zSlNDMTVSZWdFeHBQcm90b3R5cGVDMUVQ
TlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0cnVjdHVyZUUKIF9fWk4z
SlNDMTVSZWdFeHBQcm90b3R5cGVDMkVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVj
dEVQTlNfOVN0cnVjdHVyZUUKLV9fWk4zSlNDNlJlZ0V4cDZjcmVhdGVFUE5TXzEySlNHbG9iYWxE
YXRhRVJLTlNfN1VTdHJpbmdFTlNfMTFSZWdFeHBGbGFnc0UKLV9fWk4zSlNDNlJlZ0V4cDdjb21w
aWxlRVBOU18xMkpTR2xvYmFsRGF0YUUKK19fWk4zSlNDNlJlZ0V4cDZjcmVhdGVFUE5TXzEyVk1F
UktOU183VVN0cmluZ0VOU18xMVJlZ0V4cEZsYWdzRQorX19aTjNKU0M2UmVnRXhwN2NvbXBpbGVF
UE5TXzEyVk1FCiBfX1pOM0pTQzRZYXJyMTFZYXJyUGF0dGVybkMxRVJLTlNfN1VTdHJpbmdFYmJQ
UEtjCiBfX1pOM0pTQzRZYXJyMTFZYXJyUGF0dGVybjdjb21waWxlRVJLTlNfN1VTdHJpbmdFCiBf
X1pOM1dURjZWZWN0b3JJUE4zSlNDNFlhcnIxOFBhdHRlcm5BbHRlcm5hdGl2ZUVMbTBFRTE0ZXhw
YW5kQ2FwYWNpdHlFbQogX19aTjNKU0M0WWFycjZQYXJzZXJJTlMwXzIyWWFyclBhdHRlcm5Db25z
dHJ1Y3RvckVFNXBhcnNlRXYKLV9fWk4zSlNDNFlhcnIxMGppdENvbXBpbGVFUk5TMF8xMVlhcnJQ
YXR0ZXJuRVBOU18xMkpTR2xvYmFsRGF0YUVSTlMwXzEzWWFyckNvZGVCbG9ja0UKK19fWk4zSlND
NFlhcnIxMGppdENvbXBpbGVFUk5TMF8xMVlhcnJQYXR0ZXJuRVBOU18xMlZNRVJOUzBfMTNZYXJy
Q29kZUJsb2NrRQogX19aTjNKU0M0WWFycjEzWWFyckdlbmVyYXRvcjEzb3BDb21waWxlQm9keUVQ
TlMwXzE4UGF0dGVybkRpc2p1bmN0aW9uRQogX19aTjNXVEY2VmVjdG9ySU4zSlNDMjJBYnN0cmFj
dE1hY3JvQXNzZW1ibGVySU5TMV8xMlg4NkFzc2VtYmxlckVFNEp1bXBFTG0xNkVFRDFFdgogX19a
TjNKU0M0WWFycjEzWWFyckdlbmVyYXRvcjIwb3BDb21waWxlQWx0ZXJuYXRpdmVFUE5TMF8xOFBh
dHRlcm5BbHRlcm5hdGl2ZUUKQEAgLTI2OSw3ICsyNjksNyBAQCBfX1pOM1dURjE1ZGVsZXRlQWxs
VmFsdWVzSVBOM0pTQzRZYXJyMThQCiBfX1pOM1dURjE1ZGVsZXRlQWxsVmFsdWVzSVBOM0pTQzRZ
YXJyMTRDaGFyYWN0ZXJDbGFzc0VMbTBFRUV2UktOU182VmVjdG9ySVRfWFQwX0VFRQogX19aTjNK
U0MxNEVycm9yUHJvdG90eXBlQzFFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxPYmplY3RF
UE5TXzlTdHJ1Y3R1cmVFCiBfX1pOM0pTQzE0RXJyb3JQcm90b3R5cGVDMkVQTlNfOUV4ZWNTdGF0
ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0cnVjdHVyZUUKLV9fWk4zSlNDMTNFcnJvcklu
c3RhbmNlQzJFUE5TXzEySlNHbG9iYWxEYXRhRVBOU185U3RydWN0dXJlRQorX19aTjNKU0MxM0Vy
cm9ySW5zdGFuY2VDMkVQTlNfMTJWTUVQTlNfOVN0cnVjdHVyZUUKIF9fWk4zSlNDMTdPYmplY3RD
b25zdHJ1Y3RvckMxRVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBOU185U3Ry
dWN0dXJlRVBOU18xNU9iamVjdFByb3RvdHlwZUUKIF9fWk4zSlNDMTdPYmplY3RDb25zdHJ1Y3Rv
ckMyRVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBOU185U3RydWN0dXJlRVBO
U18xNU9iamVjdFByb3RvdHlwZUUKIF9fWk4zSlNDMTBJZGVudGlmaWVyM2FkZEVQTlNfOUV4ZWNT
dGF0ZUVQS2MKQEAgLTMwMyw4ICszMDMsOCBAQCBfX1pOM0pTQzE5U21hbGxTdHJpbmdzU3RvcmFn
ZUMyRXYKIF9fWk4zSlNDMTBKU09OT2JqZWN0QzFFUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzlT
dHJ1Y3R1cmVFCiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxNmFkZFN0YXRpY0dsb2JhbHNFUE5T
MF8xOEdsb2JhbFByb3BlcnR5SW5mb0VpCiBfX1pOM1dURjdIYXNoTWFwSU5TXzZSZWZQdHJJTlNf
MTBTdHJpbmdJbXBsRUVFTjNKU0MxNlN5bWJvbFRhYmxlRW50cnlFTlM0XzE3SWRlbnRpZmllclJl
cEhhc2hFTlNfMTBIYXNoVHJhaXRzSVMzX0VFTlM0XzI2U3ltYm9sVGFibGVJbmRleEhhc2hUcmFp
dHNFRTNhZGRFUFMyX1JLUzVfCi1fX1pOM0pTQzlTdHJ1Y3R1cmUyNWNoYW5nZVByb3RvdHlwZVRy
YW5zaXRpb25FUk5TXzEySlNHbG9iYWxEYXRhRVBTMF9OU183SlNWYWx1ZUUKLV9fWk4zSlNDOVN0
cnVjdHVyZTE3Y29weVByb3BlcnR5VGFibGVFUk5TXzEySlNHbG9iYWxEYXRhRVBTMF8KK19fWk4z
SlNDOVN0cnVjdHVyZTI1Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbkVSTlNfMTJWTUVQUzBfTlNf
N0pTVmFsdWVFCitfX1pOM0pTQzlTdHJ1Y3R1cmUxN2NvcHlQcm9wZXJ0eVRhYmxlRVJOU18xMlZN
RVBTMF8KIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDEwZ2xvYmFsRXhlY0V2CiBfSlNHbG9iYWxD
b250ZXh0UmV0YWluCiBfX1pOM0pTQzE0TWFjaGluZVRocmVhZHMxNmFkZEN1cnJlbnRUaHJlYWRF
dgpAQCAtMzE3LDcgKzMxNyw3IEBAIF9fWk5LMTRPcGFxdWVKU1N0cmluZzd1c3RyaW5nRXYKIF9f
Wk4zSlNDN1VTdHJpbmdDMUVQS3RqCiBfX1pOM0pTQzEzTGl0ZXJhbFBhcnNlcjVMZXhlcjNsZXhF
Uk5TMV8xOExpdGVyYWxQYXJzZXJUb2tlbkUKIF9fWk4zSlNDMTNMaXRlcmFsUGFyc2VyNXBhcnNl
RU5TMF8xMVBhcnNlclN0YXRlRQotX19aTjNKU0M3SlNBcnJheUMxRVJOU18xMkpTR2xvYmFsRGF0
YUVQTlNfOVN0cnVjdHVyZUUKK19fWk4zSlNDN0pTQXJyYXlDMUVSTlNfMTJWTUVQTlNfOVN0cnVj
dHVyZUUKIF9fWk4zV1RGMTNTdHJpbmdCdWlsZGVyNmFwcGVuZEVQS3RqCiBfX1pOM1dURjEzU3Ry
aW5nQnVpbGRlcjE5YXBwZW5kVW5pbml0aWFsaXplZEVqCiBfX1pOM1dURjEzU3RyaW5nQnVpbGRl
cjE0YWxsb2NhdGVCdWZmZXJFUEt0agpAQCAtMzQwLDggKzM0MCw4IEBAIF9KU0NvbnRleHRHZXRH
bG9iYWxPYmplY3QKIF9fWk5LM0pTQzhKU09iamVjdDEydG9UaGlzT2JqZWN0RVBOU185RXhlY1N0
YXRlRQogX0pTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nCiBfSlNPYmplY3RHZXRQcm9wZXJ0
eQotX19aTksxNE9wYXF1ZUpTU3RyaW5nMTBpZGVudGlmaWVyRVBOM0pTQzEySlNHbG9iYWxEYXRh
RQotX19aTjNKU0MxMElkZW50aWZpZXIzYWRkRVBOU18xMkpTR2xvYmFsRGF0YUVQS3RpCitfX1pO
SzE0T3BhcXVlSlNTdHJpbmcxMGlkZW50aWZpZXJFUE4zSlNDMTJWTUUKK19fWk4zSlNDMTBJZGVu
dGlmaWVyM2FkZEVQTlNfMTJWTUVQS3RpCiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxOGdldE93
blByb3BlcnR5U2xvdEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9w
ZXJ0eVNsb3RFCiBfSlNWYWx1ZUlzSW5zdGFuY2VPZkNvbnN0cnVjdG9yCiBfX1pOM0pTQzE2QXJy
YXlDb25zdHJ1Y3RvcjE4Z2V0T3duUHJvcGVydHlTbG90RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJ
ZGVudGlmaWVyRVJOU18xMlByb3BlcnR5U2xvdEUKQEAgLTM2MCwxMCArMzYwLDEwIEBAIF9fWk4z
SlNDNEhlYXA5dW5wcm90ZWN0RU5TXzdKU1ZhbHVlRQogX19aTjNXVEY5SGFzaFRhYmxlSVBOM0pT
QzZKU0NlbGxFU3Q0cGFpcklTM19qRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM1X0VFTlNfN1B0
ckhhc2hJUzNfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTM19FRU5TQl9J
akVFRUVTQ19FNGZpbmRJUzNfTlNfMjJJZGVudGl0eUhhc2hUcmFuc2xhdG9ySVMzX1M1X1M5X0VF
RUVOU18xN0hhc2hUYWJsZUl0ZXJhdG9ySVMzX1M1X1M3X1M5X1NFX1NDX0VFUktUXwogX19aTjNX
VEY5SGFzaFRhYmxlSVBOM0pTQzZKU0NlbGxFU3Q0cGFpcklTM19qRU5TXzE4UGFpckZpcnN0RXh0
cmFjdG9ySVM1X0VFTlNfN1B0ckhhc2hJUzNfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFz
aFRyYWl0c0lTM19FRU5TQl9JakVFRUVTQ19FNnJlaGFzaEVpCiBfX1pOM0pTQzEwSGFuZGxlSGVh
cDRncm93RXYKLV9fWk4zSlNDMTJTbWFsbFN0cmluZ3MyN2NyZWF0ZVNpbmdsZUNoYXJhY3RlclN0
cmluZ0VQTlNfMTJKU0dsb2JhbERhdGFFaAorX19aTjNKU0MxMlNtYWxsU3RyaW5nczI3Y3JlYXRl
U2luZ2xlQ2hhcmFjdGVyU3RyaW5nRVBOU18xMlZNRWgKIF9fWk4zSlNDMzdEZWZhdWx0R0NBY3Rp
dml0eUNhbGxiYWNrUGxhdGZvcm1EYXRhN3RyaWdnZXJFUDE2X19DRlJ1bkxvb3BUaW1lclB2CiBf
X1pOM0pTQzRIZWFwMTdjb2xsZWN0QWxsR2FyYmFnZUV2Ci1fX1pOM0pTQzEySlNHbG9iYWxEYXRh
MjNyZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc0V2CitfX1pOM0pTQzEyVk0yM3JlY29tcGlsZUFsbEpT
RnVuY3Rpb25zRXYKIF9fWk4zSlNDNEhlYXA1cmVzZXRFTlMwXzExU3dlZXBUb2dnbGVFCiBfX1pO
M0pTQzRIZWFwOW1hcmtSb290c0V2CiBfX1pOM0pTQzE0TWFjaGluZVRocmVhZHMyM2dhdGhlckNv
bnNlcnZhdGl2ZVJvb3RzRVJOU18xN0NvbnNlcnZhdGl2ZVJvb3RzRVB2CkBAIC00MzksMjAgKzQz
OSwyMCBAQCBfX1pOM1dURjZzdHJ0b2RFUEtjUFBjCiBfX1pOM1dURjEwU3RyaW5nSW1wbDIyY29u
dGFpbnNPbmx5V2hpdGVzcGFjZUV2CiBfX1pOM1dURjEwU3RyaW5nSW1wbDExcmV2ZXJzZUZpbmRF
UFMwX2oKIF9fWk4zV1RGMTdlcXVhbElnbm9yaW5nQ2FzZUVQTlNfMTBTdHJpbmdJbXBsRVMxXwot
X19aTjNKU0MxMkpTR2xvYmFsRGF0YTEyY3JlYXRlTGVha2VkRU5TXzhIZWFwVHlwZUUKLV9fWk4z
SlNDMjRKU09iamVjdFdpdGhHbG9iYWxPYmplY3RDMkVSTlNfMTJKU0dsb2JhbERhdGFFUE5TXzE0
SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1cmVFCitfX1pOM0pTQzEyVk0xMmNyZWF0ZUxlYWtl
ZEVOU184SGVhcFR5cGVFCitfX1pOM0pTQzI0SlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0QzJFUk5T
XzEyVk1FUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1cmVFCiBfX1pOM0pTQzhldmFs
dWF0ZUVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRTY29wZUNoYWluTm9kZUVSS05TXzEwU291cmNlQ29k
ZUVOU183SlNWYWx1ZUUKIF9fWk4zSlNDMTdQcm9ncmFtRXhlY3V0YWJsZUMxRVBOU185RXhlY1N0
YXRlRVJLTlNfMTBTb3VyY2VDb2RlRQogX19aTjNKU0MxMUludGVycHJldGVyN2V4ZWN1dGVFUE5T
XzE3UHJvZ3JhbUV4ZWN1dGFibGVFUE5TXzlFeGVjU3RhdGVFUE5TXzE0U2NvcGVDaGFpbk5vZGVF
UE5TXzhKU09iamVjdEUKLV9fWk4zSlNDMjREeW5hbWljR2xvYmFsT2JqZWN0U2NvcGVDMUVSTlNf
MTJKU0dsb2JhbERhdGFFUE5TXzE0SlNHbG9iYWxPYmplY3RFCitfX1pOM0pTQzI0RHluYW1pY0ds
b2JhbE9iamVjdFNjb3BlQzFFUk5TXzEyVk1FUE5TXzE0SlNHbG9iYWxPYmplY3RFCiBfX1pOM0pT
QzE5RXhlY3V0YWJsZUFsbG9jYXRvcjE5dW5kZXJNZW1vcnlQcmVzc3VyZUV2Ci1fX1pOM0pTQzEy
SlNHbG9iYWxEYXRhMTRyZXNldERhdGVDYWNoZUV2CitfX1pOM0pTQzEyVk0xNHJlc2V0RGF0ZUNh
Y2hlRXYKIF9fWk4zSlNDMTdQcm9ncmFtRXhlY3V0YWJsZTE1Y29tcGlsZUludGVybmFsRVBOU185
RXhlY1N0YXRlRVBOU18xNFNjb3BlQ2hhaW5Ob2RlRQogX19aTjNKU0M2UGFyc2VyNXBhcnNlSU5T
XzExUHJvZ3JhbU5vZGVFRUVOM1dURjEwUGFzc1JlZlB0cklUX0VFUE5TXzE0SlNHbG9iYWxPYmpl
Y3RFUE5TXzhEZWJ1Z2dlckVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwU291cmNlQ29kZUVQTlNfMThG
dW5jdGlvblBhcmFtZXRlcnNFTlNfMThKU1BhcnNlclN0cmljdG5lc3NFUFBOU184SlNPYmplY3RF
Ci1fX1pOM0pTQzZQYXJzZXI1cGFyc2VFUE5TXzEySlNHbG9iYWxEYXRhRVBOU18xOEZ1bmN0aW9u
UGFyYW1ldGVyc0VOU18xOEpTUGFyc2VyU3RyaWN0bmVzc0VOU18xMkpTUGFyc2VyTW9kZUVQaVBO
U183VVN0cmluZ0UKK19fWk4zSlNDNlBhcnNlcjVwYXJzZUVQTlNfMTJWTUVQTlNfMThGdW5jdGlv
blBhcmFtZXRlcnNFTlNfMThKU1BhcnNlclN0cmljdG5lc3NFTlNfMTJKU1BhcnNlck1vZGVFUGlQ
TlNfN1VTdHJpbmdFCiBfX1pOM0pTQzVMZXhlcjdzZXRDb2RlRVJLTlNfMTBTb3VyY2VDb2RlRVJO
U18xMVBhcnNlckFyZW5hRQotX19aTjNKU0M3anNQYXJzZUVQTlNfMTJKU0dsb2JhbERhdGFFUE5T
XzE4RnVuY3Rpb25QYXJhbWV0ZXJzRU5TXzE4SlNQYXJzZXJTdHJpY3RuZXNzRU5TXzEySlNQYXJz
ZXJNb2RlRVBLTlNfMTBTb3VyY2VDb2RlRQotX19aTjNKU0M4SlNQYXJzZXJDMkVQTlNfNUxleGVy
RVBOU18xMkpTR2xvYmFsRGF0YUVQTlNfMThGdW5jdGlvblBhcmFtZXRlcnNFYmJQTlNfMTRTb3Vy
Y2VQcm92aWRlckUKK19fWk4zSlNDN2pzUGFyc2VFUE5TXzEyVk1FUE5TXzE4RnVuY3Rpb25QYXJh
bWV0ZXJzRU5TXzE4SlNQYXJzZXJTdHJpY3RuZXNzRU5TXzEySlNQYXJzZXJNb2RlRVBLTlNfMTBT
b3VyY2VDb2RlRQorX19aTjNKU0M4SlNQYXJzZXJDMkVQTlNfNUxleGVyRVBOU18xMlZNRVBOU18x
OEZ1bmN0aW9uUGFyYW1ldGVyc0ViYlBOU18xNFNvdXJjZVByb3ZpZGVyRQogX19aTjNKU0M4SlNQ
YXJzZXI5cHVzaFNjb3BlRXYKIF9fWk4zSlNDOEpTUGFyc2VyNG5leHRFTlNfNUxleGVyN0xleFR5
cGVFCiBfX1pOM0pTQzVMZXhlcjNsZXhFUE5TXzExSlNUb2tlbkRhdGFFUE5TXzExSlNUb2tlbklu
Zm9FTlMwXzdMZXhUeXBlRWIKQEAgLTQ2NCw4ICs0NjQsOCBAQCBfX1pOM0pTQzhKU1BhcnNlcjE0
cGFyc2VTdGF0ZW1lbnRJTlNfMTBBCiBfX1pOM0pTQzZQYXJzZXIxNmRpZEZpbmlzaFBhcnNpbmdF
UE5TXzE0U291cmNlRWxlbWVudHNFUE5TXzE1UGFyc2VyQXJlbmFEYXRhSU4zV1RGNlZlY3RvcklT
dDRwYWlySVBLTlNfMTBJZGVudGlmaWVyRWpFTG0wRUVFRUVQTlMzX0lOUzVfSVBOU18xNkZ1bmN0
aW9uQm9keU5vZGVFTG0wRUVFRUVqaWlSTlM0XzdIYXNoU2V0SU5TNF82UmVmUHRySU5TNF8xMFN0
cmluZ0ltcGxFRUVOU18xN0lkZW50aWZpZXJSZXBIYXNoRU5TNF8xMEhhc2hUcmFpdHNJU01fRUVF
RQogX19aTjNKU0MxMVBhcnNlckFyZW5hRDFFdgogX19aTjNKU0M1TGV4ZXI1Y2xlYXJFdgotX19a
TjNKU0MxMVByb2dyYW1Ob2RlNmNyZWF0ZUVQTlNfMTJKU0dsb2JhbERhdGFFUE5TXzE0U291cmNl
RWxlbWVudHNFUE4zV1RGNlZlY3RvcklTdDRwYWlySVBLTlNfMTBJZGVudGlmaWVyRWpFTG0wRUVF
UE5TNl9JUE5TXzE2RnVuY3Rpb25Cb2R5Tm9kZUVMbTBFRUVSTlM1XzdIYXNoU2V0SU5TNV82UmVm
UHRySU5TNV8xMFN0cmluZ0ltcGxFRUVOU18xN0lkZW50aWZpZXJSZXBIYXNoRU5TNV8xMEhhc2hU
cmFpdHNJU0xfRUVFRVJLTlNfMTBTb3VyY2VDb2RlRWppCi1fX1pOM0pTQzlTY29wZU5vZGVDMkVQ
TlNfMTJKU0dsb2JhbERhdGFFUktOU18xMFNvdXJjZUNvZGVFUE5TXzE0U291cmNlRWxlbWVudHNF
UE4zV1RGNlZlY3RvcklTdDRwYWlySVBLTlNfMTBJZGVudGlmaWVyRWpFTG0wRUVFUE5TOV9JUE5T
XzE2RnVuY3Rpb25Cb2R5Tm9kZUVMbTBFRUVSTlM4XzdIYXNoU2V0SU5TOF82UmVmUHRySU5TOF8x
MFN0cmluZ0ltcGxFRUVOU18xN0lkZW50aWZpZXJSZXBIYXNoRU5TOF8xMEhhc2hUcmFpdHNJU09f
RUVFRWppCitfX1pOM0pTQzExUHJvZ3JhbU5vZGU2Y3JlYXRlRVBOU18xMlZNRVBOU18xNFNvdXJj
ZUVsZW1lbnRzRVBOM1dURjZWZWN0b3JJU3Q0cGFpcklQS05TXzEwSWRlbnRpZmllckVqRUxtMEVF
RVBOUzZfSVBOU18xNkZ1bmN0aW9uQm9keU5vZGVFTG0wRUVFUk5TNV83SGFzaFNldElOUzVfNlJl
ZlB0cklOUzVfMTBTdHJpbmdJbXBsRUVFTlNfMTdJZGVudGlmaWVyUmVwSGFzaEVOUzVfMTBIYXNo
VHJhaXRzSVNMX0VFRUVSS05TXzEwU291cmNlQ29kZUVqaQorX19aTjNKU0M5U2NvcGVOb2RlQzJF
UE5TXzEyVk1FUktOU18xMFNvdXJjZUNvZGVFUE5TXzE0U291cmNlRWxlbWVudHNFUE4zV1RGNlZl
Y3RvcklTdDRwYWlySVBLTlNfMTBJZGVudGlmaWVyRWpFTG0wRUVFUE5TOV9JUE5TXzE2RnVuY3Rp
b25Cb2R5Tm9kZUVMbTBFRUVSTlM4XzdIYXNoU2V0SU5TOF82UmVmUHRySU5TOF8xMFN0cmluZ0lt
cGxFRUVOU18xN0lkZW50aWZpZXJSZXBIYXNoRU5TOF8xMEhhc2hUcmFpdHNJU09fRUVFRWppCiBf
X1pOM0pTQzExUGFyc2VyQXJlbmExNGRlcmVmV2l0aEFyZW5hRU4zV1RGMTBQYXNzUmVmUHRySU5T
XzIxUGFyc2VyQXJlbmFSZWZDb3VudGVkRUVFCiBfX1pOM0pTQzExUGFyc2VyQXJlbmExMHJlbW92
ZUxhc3RFdgogX19aTjNKU0MxMVBhcnNlckFyZW5hNXJlc2V0RXYKQEAgLTUxNCw3ICs1MTQsNyBA
QCBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxM2NvcHlHbG9iYWxzVG9FCiBfX1pOM0pTQzEySlNT
dGFjazE1c2V0R2xvYmFsT2JqZWN0RVBOU18xNEpTR2xvYmFsT2JqZWN0RQogX2N0aVRyYW1wb2xp
bmUKIF9fWk4zV1RGMTVTZWdtZW50ZWRWZWN0b3JJTjNKU0MxMElkZW50aWZpZXJFTG02NEVFNmFw
cGVuZElTMl9FRXZSS1RfCi1fX1pOSzNKU0M5SGFzaFRhYmxlMTFjcmVhdGVUYWJsZUVQTlNfMTJK
U0dsb2JhbERhdGFFCitfX1pOSzNKU0M5SGFzaFRhYmxlMTFjcmVhdGVUYWJsZUVQTlNfMTJWTUUK
IF9fWk4zSlNDOEpTUGFyc2VyMzFwYXJzZUV4cHJlc3Npb25PckxhYmVsU3RhdGVtZW50SU5TXzEw
QVNUQnVpbGRlckVFRU5UXzlTdGF0ZW1lbnRFUlMzXwogX19aTjNKU0M1TGV4ZXIxNm5leHRUb2tl
bklzQ29sb25FdgogX19aTjNKU0M4SlNQYXJzZXIxNXBhcnNlRXhwcmVzc2lvbklOU18xMEFTVEJ1
aWxkZXJFRUVOVF8xMEV4cHJlc3Npb25FUlMzXwpAQCAtNTYwLDkgKzU2MCw5IEBAIF9fWk4zSlND
MjhjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yRVAKIF9fWk4zSlNDMTFtYWtlVVN0cmluZ0lQ
S2NOU183VVN0cmluZ0VFRVMzX1RfVDBfCiBfX1pOM1dURjEzdHJ5TWFrZVN0cmluZ0lQS2NOM0pT
QzdVU3RyaW5nRUVFTlNfMTBQYXNzUmVmUHRySU5TXzEwU3RyaW5nSW1wbEVFRVRfVDBfCiBfX1pO
M0pTQzIwY3JlYXRlUmVmZXJlbmNlRXJyb3JFUE5TXzlFeGVjU3RhdGVFUktOU183VVN0cmluZ0UK
LV9fWk4zSlNDMTNFcnJvckluc3RhbmNlNmNyZWF0ZUVQTlNfMTJKU0dsb2JhbERhdGFFUE5TXzlT
dHJ1Y3R1cmVFUktOU183VVN0cmluZ0UKLV9fWk4zSlNDMTNFcnJvckluc3RhbmNlQzJFUE5TXzEy
SlNHbG9iYWxEYXRhRVBOU185U3RydWN0dXJlRVJLTlNfN1VTdHJpbmdFCi1fX1pOM0pTQ0wyM3Jl
dHVyblRvVGhyb3dUcmFtcG9saW5lRVBOU18xMkpTR2xvYmFsRGF0YUVOU18xNlJldHVybkFkZHJl
c3NQdHJFUlMyXworX19aTjNKU0MxM0Vycm9ySW5zdGFuY2U2Y3JlYXRlRVBOU18xMlZNRVBOU185
U3RydWN0dXJlRVJLTlNfN1VTdHJpbmdFCitfX1pOM0pTQzEzRXJyb3JJbnN0YW5jZUMyRVBOU18x
MlZNRVBOU185U3RydWN0dXJlRVJLTlNfN1VTdHJpbmdFCitfX1pOM0pTQ0wyM3JldHVyblRvVGhy
b3dUcmFtcG9saW5lRVBOU18xMlZNRU5TXzE2UmV0dXJuQWRkcmVzc1B0ckVSUzJfCiBfY3RpVk1U
aHJvd1RyYW1wb2xpbmUKIF9jdGlfdm1fdGhyb3cKIF9fWk4zSlNDMTFJbnRlcnByZXRlcjE0dGhy
b3dFeGNlcHRpb25FUlBOU185RXhlY1N0YXRlRVJOU183SlNWYWx1ZUVqCkBAIC02MTEsMTQgKzYx
MSwxNCBAQCBfX1pOM0pTQzlBcnJheU5vZGUxMmVtaXRCeXRlY29kZUVSTlNfMTdCCiBfX1pOM0pT
QzE3Qnl0ZWNvZGVHZW5lcmF0b3IxMmVtaXROZXdBcnJheUVQTlNfMTBSZWdpc3RlcklERVBOU18x
MUVsZW1lbnROb2RlRQogX19aTjNKU0MzSklUMTdlbWl0X29wX25ld19hcnJheUVQTlNfMTFJbnN0
cnVjdGlvbkUKIF9jdGlfb3BfbmV3X2FycmF5Ci1fX1pOM0pTQzdKU0FycmF5QzFFUk5TXzEySlNH
bG9iYWxEYXRhRVBOU185U3RydWN0dXJlRVJLTlNfN0FyZ0xpc3RFCitfX1pOM0pTQzdKU0FycmF5
QzFFUk5TXzEyVk1FUE5TXzlTdHJ1Y3R1cmVFUktOU183QXJnTGlzdEUKIF9fWk4zSlNDOEpTUGFy
c2VyMTdwYXJzZUZ1bmN0aW9uSW5mb0lMTlMwXzIwRnVuY3Rpb25SZXF1aXJlbWVudHNFMEVMYjBF
TlNfMTBBU1RCdWlsZGVyRUVFYlJUMV9SUEtOU18xMElkZW50aWZpZXJFUk5TNF8xOUZvcm1hbFBh
cmFtZXRlckxpc3RFUk5TNF8xMkZ1bmN0aW9uQm9keUVSaVNFX1NFXwogX19aTjNKU0M4SlNQYXJz
ZXIxOXBhcnNlU291cmNlRWxlbWVudHNJTE5TMF8xOFNvdXJjZUVsZW1lbnRzTW9kZUUwRU5TXzEz
U3ludGF4Q2hlY2tlckVFRU5UMF8xNFNvdXJjZUVsZW1lbnRzRVJTNF8KIF9fWk4zSlNDOEpTUGFy
c2VyMTRwYXJzZVN0YXRlbWVudElOU18xM1N5bnRheENoZWNrZXJFRUVOVF85U3RhdGVtZW50RVJT
M19SUEtOU18xMElkZW50aWZpZXJFCiBfX1pOM0pTQzhKU1BhcnNlcjE1cGFyc2VFeHByZXNzaW9u
SU5TXzEzU3ludGF4Q2hlY2tlckVFRU5UXzEwRXhwcmVzc2lvbkVSUzNfCiBfX1pOM0pTQzhKU1Bh
cnNlcjI1cGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbklOU18xM1N5bnRheENoZWNrZXJFRUVOVF8x
MEV4cHJlc3Npb25FUlMzXwogX19aTjNKU0M4SlNQYXJzZXIyMXBhcnNlTWVtYmVyRXhwcmVzc2lv
bklOU18xM1N5bnRheENoZWNrZXJFRUVOVF8xMEV4cHJlc3Npb25FUlMzXwotX19aTjNKU0MxNkZ1
bmN0aW9uQm9keU5vZGU2Y3JlYXRlRVBOU18xMkpTR2xvYmFsRGF0YUViCitfX1pOM0pTQzE2RnVu
Y3Rpb25Cb2R5Tm9kZTZjcmVhdGVFUE5TXzEyVk1FYgogX19aTjNKU0M4SlNQYXJzZXI1U2NvcGVE
MUV2CiBfX1pOM0pTQzVMZXhlcjEwc291cmNlQ29kZUVpaWkKIF9fWk4zSlNDMTZGdW5jdGlvbkJv
ZHlOb2RlMTNmaW5pc2hQYXJzaW5nRVJLTlNfMTBTb3VyY2VDb2RlRVBOU18xM1BhcmFtZXRlck5v
ZGVFUktOU18xMElkZW50aWZpZXJFCkBAIC02MjgsNyArNjI4LDcgQEAgX19aTkszSlNDMTRFeHBy
ZXNzaW9uTm9kZTEwaXNMb2NhdGlvbkV2CiBfX1pOM0pTQzIxRnVuY3Rpb25DYWxsVmFsdWVOb2Rl
MTJlbWl0Qnl0ZWNvZGVFUk5TXzE3Qnl0ZWNvZGVHZW5lcmF0b3JFUE5TXzEwUmVnaXN0ZXJJREUK
IF9fWk4zSlNDMTJGdW5jRXhwck5vZGUxMmVtaXRCeXRlY29kZUVSTlNfMTdCeXRlY29kZUdlbmVy
YXRvckVQTlNfMTBSZWdpc3RlcklERQogX19aTjNKU0MxN0J5dGVjb2RlR2VuZXJhdG9yMjVlbWl0
TmV3RnVuY3Rpb25FeHByZXNzaW9uRVBOU18xMFJlZ2lzdGVySURFUE5TXzEyRnVuY0V4cHJOb2Rl
RQotX19aTjNKU0MxOEZ1bmN0aW9uRXhlY3V0YWJsZUMxRVBOU18xMkpTR2xvYmFsRGF0YUVSS05T
XzEwSWRlbnRpZmllckVSS05TXzEwU291cmNlQ29kZUViUE5TXzE4RnVuY3Rpb25QYXJhbWV0ZXJz
RWJpaQorX19aTjNKU0MxOEZ1bmN0aW9uRXhlY3V0YWJsZUMxRVBOU18xMlZNRVJLTlNfMTBJZGVu
dGlmaWVyRVJLTlNfMTBTb3VyY2VDb2RlRWJQTlNfMThGdW5jdGlvblBhcmFtZXRlcnNFYmlpCiBf
X1pOM1dURjZWZWN0b3JJTjNKU0MxMldyaXRlQmFycmllcklOUzFfMThGdW5jdGlvbkV4ZWN1dGFi
bGVFRUVMbTBFRTE0ZXhwYW5kQ2FwYWNpdHlFbQogX19aTjNKU0MxN0J5dGVjb2RlR2VuZXJhdG9y
OGVtaXRDYWxsRVBOU18xMFJlZ2lzdGVySURFUzJfUk5TXzEzQ2FsbEFyZ3VtZW50c0VqamoKIF9f
Wk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvcjhlbWl0Q2FsbEVOU184T3Bjb2RlSURFUE5TXzEwUmVn
aXN0ZXJJREVTM19STlNfMTNDYWxsQXJndW1lbnRzRWpqagpAQCAtNjQ1LDcgKzY0NSw3IEBAIF9f
Wk4zSlNDMThGdW5jdGlvbkV4ZWN1dGFibGUyMmNvbXBpbGVGb3IKIF9fWk4zSlNDNlBhcnNlcjVw
YXJzZUlOU18xNkZ1bmN0aW9uQm9keU5vZGVFRUVOM1dURjEwUGFzc1JlZlB0cklUX0VFUE5TXzE0
SlNHbG9iYWxPYmplY3RFUE5TXzhEZWJ1Z2dlckVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwU291cmNl
Q29kZUVQTlNfMThGdW5jdGlvblBhcmFtZXRlcnNFTlNfMThKU1BhcnNlclN0cmljdG5lc3NFUFBO
U184SlNPYmplY3RFCiBfX1pOM0pTQzhKU1BhcnNlcjE5cGFyc2VTb3VyY2VFbGVtZW50c0lMTlMw
XzE4U291cmNlRWxlbWVudHNNb2RlRTFFTlNfMTBBU1RCdWlsZGVyRUVFTlQwXzE0U291cmNlRWxl
bWVudHNFUlM0XwogX19aTjNKU0M4SlNQYXJzZXIxOXBhcnNlVGhyb3dTdGF0ZW1lbnRJTlNfMTBB
U1RCdWlsZGVyRUVFTlRfOVN0YXRlbWVudEVSUzNfCi1fX1pOM0pTQzE2RnVuY3Rpb25Cb2R5Tm9k
ZTZjcmVhdGVFUE5TXzEySlNHbG9iYWxEYXRhRVBOU18xNFNvdXJjZUVsZW1lbnRzRVBOM1dURjZW
ZWN0b3JJU3Q0cGFpcklQS05TXzEwSWRlbnRpZmllckVqRUxtMEVFRVBOUzZfSVBTMF9MbTBFRUVS
TlM1XzdIYXNoU2V0SU5TNV82UmVmUHRySU5TNV8xMFN0cmluZ0ltcGxFRUVOU18xN0lkZW50aWZp
ZXJSZXBIYXNoRU5TNV8xMEhhc2hUcmFpdHNJU0tfRUVFRVJLTlNfMTBTb3VyY2VDb2RlRWppCitf
X1pOM0pTQzE2RnVuY3Rpb25Cb2R5Tm9kZTZjcmVhdGVFUE5TXzEyVk1FUE5TXzE0U291cmNlRWxl
bWVudHNFUE4zV1RGNlZlY3RvcklTdDRwYWlySVBLTlNfMTBJZGVudGlmaWVyRWpFTG0wRUVFUE5T
Nl9JUFMwX0xtMEVFRVJOUzVfN0hhc2hTZXRJTlM1XzZSZWZQdHJJTlM1XzEwU3RyaW5nSW1wbEVF
RU5TXzE3SWRlbnRpZmllclJlcEhhc2hFTlM1XzEwSGFzaFRyYWl0c0lTS19FRUVFUktOU18xMFNv
dXJjZUNvZGVFamkKIF9fWk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvckMxRVBOU18xNkZ1bmN0aW9u
Qm9keU5vZGVFUE5TXzE0U2NvcGVDaGFpbk5vZGVFUE4zV1RGN0hhc2hNYXBJTlM1XzZSZWZQdHJJ
TlM1XzEwU3RyaW5nSW1wbEVFRU5TXzE2U3ltYm9sVGFibGVFbnRyeUVOU18xN0lkZW50aWZpZXJS
ZXBIYXNoRU5TNV8xMEhhc2hUcmFpdHNJUzlfRUVOU18yNlN5bWJvbFRhYmxlSW5kZXhIYXNoVHJh
aXRzRUVFUE5TXzlDb2RlQmxvY2tFCiBfX1pOM0pTQzE3Qnl0ZWNvZGVHZW5lcmF0b3JDMkVQTlNf
MTZGdW5jdGlvbkJvZHlOb2RlRVBOU18xNFNjb3BlQ2hhaW5Ob2RlRVBOM1dURjdIYXNoTWFwSU5T
NV82UmVmUHRySU5TNV8xMFN0cmluZ0ltcGxFRUVOU18xNlN5bWJvbFRhYmxlRW50cnlFTlNfMTdJ
ZGVudGlmaWVyUmVwSGFzaEVOUzVfMTBIYXNoVHJhaXRzSVM5X0VFTlNfMjZTeW1ib2xUYWJsZUlu
ZGV4SGFzaFRyYWl0c0VFRVBOU185Q29kZUJsb2NrRQogX19aTjNXVEYxNVNlZ21lbnRlZFZlY3Rv
cklOM0pTQzEwUmVnaXN0ZXJJREVMbTMyRUVDMUV2CkBAIC02NjEsNyArNjYxLDcgQEAgX19aTjNK
U0MxMUpJVFN0dWJDYWxsMTFhZGRBcmd1bWVudEVqTlNfMQogX19aTjNKU0MzSklUMTFlbWl0X29w
X3JldEVQTlNfMTFJbnN0cnVjdGlvbkUKIF9jdGlfb3BfdGhyb3cKIF9fWk5LM0pTQzhKU1N0cmlu
Zzh0b09iamVjdEVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEUKLV9fWk4zSlND
MTJTdHJpbmdPYmplY3RDMUVSTlNfMTJKU0dsb2JhbERhdGFFUE5TXzlTdHJ1Y3R1cmVFUE5TXzhK
U1N0cmluZ0UKK19fWk4zSlNDMTJTdHJpbmdPYmplY3RDMUVSTlNfMTJWTUVQTlNfOVN0cnVjdHVy
ZUVQTlNfOEpTU3RyaW5nRQogX19aTjNKU0MxMlN0cmluZ09iamVjdDE4Z2V0T3duUHJvcGVydHlT
bG90RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJOU18xMlByb3BlcnR5U2xvdEUK
IF9fWk4zSlNDMTVTdHJpbmdQcm90b3R5cGUxOGdldE93blByb3BlcnR5U2xvdEVQTlNfOUV4ZWNT
dGF0ZUVSS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzE3Qnl0
ZWNvZGVHZW5lcmF0b3I4ZW1pdE1vdmVFUE5TXzEwUmVnaXN0ZXJJREVTMl8KQEAgLTcwMyw3ICs3
MDMsNyBAQCBfX1pOM0pTQzE2SlNDYWxsYmFja09iamVjdElOU18yNEpTT2JqZWN0CiBfX1pOMTNP
cGFxdWVKU0NsYXNzOXByb3RvdHlwZUVQTjNKU0M5RXhlY1N0YXRlRQogX19aTjEzT3BhcXVlSlND
bGFzczExY29udGV4dERhdGFFUE4zSlNDOUV4ZWNTdGF0ZUUKIF9fWk4zV1RGOUhhc2hUYWJsZUlQ
MTNPcGFxdWVKU0NsYXNzU3Q0cGFpcklTMl9QMjRPcGFxdWVKU0NsYXNzQ29udGV4dERhdGFFTlNf
MThQYWlyRmlyc3RFeHRyYWN0b3JJUzZfRUVOU183UHRySGFzaElTMl9FRU5TXzE0UGFpckhhc2hU
cmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMyX0VFTlNDX0lTNV9FRUVFU0RfRTZleHBhbmRFdgotX19a
TjI0T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhQzJFUk4zSlNDMTJKU0dsb2JhbERhdGFFUDEzT3Bh
cXVlSlNDbGFzcworX19aTjI0T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhQzJFUk4zSlNDMTJWTUVQ
MTNPcGFxdWVKU0NsYXNzCiBfSlNDbGFzc1JlbGVhc2UKIF9KU09iamVjdFNldFByb3BlcnR5CiBf
X1pOSzNKU0M4SlNPYmplY3QxMWhhc1Byb3BlcnR5RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVu
dGlmaWVyRQpAQCAtNzc0LDcgKzc3NCw3IEBAIF9fWk4zV1RGNlZlY3RvcklOU182UmVmUHRySU5T
XzEwU3RyaW5nSW0KIF9fWk4zSlNDMTlTb3VyY2VQcm92aWRlckNhY2hlM2FkZEVpTjNXVEYxMFBh
c3NPd25QdHJJTlNfMjNTb3VyY2VQcm92aWRlckNhY2hlSXRlbUVFRWoKIF9fWk4zV1RGOUhhc2hU
YWJsZUlpU3Q0cGFpcklpUE4zSlNDMjNTb3VyY2VQcm92aWRlckNhY2hlSXRlbUVFTlNfMThQYWly
Rmlyc3RFeHRyYWN0b3JJUzVfRUVOU183SW50SGFzaElqRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5T
XzEwSGFzaFRyYWl0c0lpRUVOU0JfSVM0X0VFRUVTQ19FNmV4cGFuZEV2CiBfX1pOM1dURjZWZWN0
b3JJUE4zSlNDMTZGdW5jdGlvbkJvZHlOb2RlRUxtMEVFMTVyZXNlcnZlQ2FwYWNpdHlFbQotX19a
TjNKU0M4SlNPYmplY3QxMnJlbW92ZURpcmVjdEVSTlNfMTJKU0dsb2JhbERhdGFFUktOU18xMElk
ZW50aWZpZXJFCitfX1pOM0pTQzhKU09iamVjdDEycmVtb3ZlRGlyZWN0RVJOU18xMlZNRVJLTlNf
MTBJZGVudGlmaWVyRQogX19aTjNXVEY5SGFzaFRhYmxlSU5TXzZSZWZQdHJJTlNfMTBTdHJpbmdJ
bXBsRUVFU3Q0cGFpcklTM19OM0pTQzE2U3ltYm9sVGFibGVFbnRyeUVFTlNfMThQYWlyRmlyc3RF
eHRyYWN0b3JJUzdfRUVOUzVfMTdJZGVudGlmaWVyUmVwSGFzaEVOU18xNFBhaXJIYXNoVHJhaXRz
SU5TXzEwSGFzaFRyYWl0c0lTM19FRU5TNV8yNlN5bWJvbFRhYmxlSW5kZXhIYXNoVHJhaXRzRUVF
U0RfRTEzaXNFbXB0eUJ1Y2tldEVSS1M3XwogX19aTjNXVEY5SGFzaFRhYmxlSU5TXzZSZWZQdHJJ
TlNfMTBTdHJpbmdJbXBsRUVFU3Q0cGFpcklTM19OM0pTQzE2U3ltYm9sVGFibGVFbnRyeUVFTlNf
MThQYWlyRmlyc3RFeHRyYWN0b3JJUzdfRUVOUzVfMTdJZGVudGlmaWVyUmVwSGFzaEVOU18xNFBh
aXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTM19FRU5TNV8yNlN5bWJvbFRhYmxlSW5kZXhI
YXNoVHJhaXRzRUVFU0RfRTZleHBhbmRFdgogX19aTjNXVEY5SGFzaFRhYmxlSU5TXzZSZWZQdHJJ
TlNfMTBTdHJpbmdJbXBsRUVFU3Q0cGFpcklTM19OM0pTQzE2U3ltYm9sVGFibGVFbnRyeUVFTlNf
MThQYWlyRmlyc3RFeHRyYWN0b3JJUzdfRUVOUzVfMTdJZGVudGlmaWVyUmVwSGFzaEVOU18xNFBh
aXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTM19FRU5TNV8yNlN5bWJvbFRhYmxlSW5kZXhI
YXNoVHJhaXRzRUVFU0RfRTZyZWhhc2hFaQpAQCAtNzkyLDcgKzc5Miw3IEBAIF9fWk5LM0pTQzIx
VVN0cmluZ1NvdXJjZVByb3ZpZGVyNGRhdGFFdgogX19aTjNKU0M4SlNQYXJzZXIxNmRlY2xhcmVQ
YXJhbWV0ZXJFUEtOU18xMElkZW50aWZpZXJFCiBfX1pOM1dURjZWZWN0b3JJTjNKU0MxMElkZW50
aWZpZXJFTG0wRUUxNGV4cGFuZENhcGFjaXR5RW0KIF9fWk4zSlNDMTBKU0Z1bmN0aW9uMThnZXRP
d25Qcm9wZXJ0eVNsb3RFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUk5TXzEyUHJv
cGVydHlTbG90RQotX19aTjNKU0M5U3RydWN0dXJlMjJtYXRlcmlhbGl6ZVByb3BlcnR5TWFwRVJO
U18xMkpTR2xvYmFsRGF0YUUKK19fWk4zSlNDOVN0cnVjdHVyZTIybWF0ZXJpYWxpemVQcm9wZXJ0
eU1hcEVSTlNfMTJWTUUKIF9fWk5LM0pTQzExUmVzb2x2ZU5vZGUxMGlzTG9jYXRpb25FdgogX19a
TkszSlNDMTFSZXNvbHZlTm9kZTEzaXNSZXNvbHZlTm9kZUV2CiBfX1pOM0pTQzE3Qnl0ZWNvZGVH
ZW5lcmF0b3IxMmFkZFBhcmFtZXRlckVSS05TXzEwSWRlbnRpZmllckVpCkBAIC04OTQsOSArODk0
LDkgQEAgX19aTjNKU0MzSklUMTVlbWl0X29wX3ByZV9pbmNFUE5TXzExSW5zdAogX19aTjNKU0Mz
SklUMTZlbWl0VGltZW91dENoZWNrRXYKIF9fWk4zSlNDM0pJVDEzZW1pdF9vcF9qbGVzc0VQTlNf
MTFJbnN0cnVjdGlvbkUKIF9fWk4zSlNDM0pJVDIyZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbEVQTlNf
MTFJbnN0cnVjdGlvbkVSUE5TXzEzU2xvd0Nhc2VFbnRyeUUKLV9fWk4zSlNDOUpJVFRodW5rczdj
dGlTdHViRVBOU18xMkpTR2xvYmFsRGF0YUVQRk5TXzIxTWFjcm9Bc3NlbWJsZXJDb2RlUHRyRVMy
X1BOU18xNEV4ZWN1dGFibGVQb29sRUUKLV9fWk4zV1RGOUhhc2hUYWJsZUlQRk4zSlNDMjFNYWNy
b0Fzc2VtYmxlckNvZGVQdHJFUE5TMV8xMkpTR2xvYmFsRGF0YUVQTlMxXzE0RXhlY3V0YWJsZVBv
b2xFRVN0NHBhaXJJUzhfUzJfRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVNBX0VFTlNfN1B0ckhh
c2hJUzhfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTOF9FRU5TR19JUzJf
RUVFRVNIX0U2ZXhwYW5kRXYKLV9fWk4zSlNDM0pJVDI3c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJh
dG9yRVBOU18xMkpTR2xvYmFsRGF0YUVQTlNfMTRFeGVjdXRhYmxlUG9vbEUKK19fWk4zSlNDOUpJ
VFRodW5rczdjdGlTdHViRVBOU18xMlZNRVBGTlNfMjFNYWNyb0Fzc2VtYmxlckNvZGVQdHJFUzJf
UE5TXzE0RXhlY3V0YWJsZVBvb2xFRQorX19aTjNXVEY5SGFzaFRhYmxlSVBGTjNKU0MyMU1hY3Jv
QXNzZW1ibGVyQ29kZVB0ckVQTlMxXzEyVk1FUE5TMV8xNEV4ZWN1dGFibGVQb29sRUVTdDRwYWly
SVM4X1MyX0VOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTQV9FRU5TXzdQdHJIYXNoSVM4X0VFTlNf
MTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzhfRUVOU0dfSVMyX0VFRUVTSF9FNmV4
cGFuZEV2CitfX1pOM0pTQzNKSVQyN3N0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvckVQTlNfMTJW
TUVQTlNfMTRFeGVjdXRhYmxlUG9vbEUKIF9fWk4zSlNDMjFyb3VuZFVwQWxsb2NhdGlvblNpemVF
bW0KIF9fWk4zSlNDM0pJVDE5ZW1pdFNsb3dfb3BfcHJlX2luY0VQTlNfMTFJbnN0cnVjdGlvbkVS
UE5TXzEzU2xvd0Nhc2VFbnRyeUUKIF9fWk4zSlNDM0pJVDE3ZW1pdFNsb3dfb3Bfamxlc3NFUE5T
XzExSW5zdHJ1Y3Rpb25FUlBOU18xM1Nsb3dDYXNlRW50cnlFCkBAIC05ODEsNyArOTgxLDcgQEAg
X19aTjNKU0MxMUludGVycHJldGVyOGNhbGxFdmFsRVBOU185RXhlYwogX19aTjNKU0MxNEV2YWxF
eGVjdXRhYmxlQzFFUE5TXzlFeGVjU3RhdGVFUktOU18xMFNvdXJjZUNvZGVFYgogX19aTjNKU0Mx
NEV2YWxFeGVjdXRhYmxlMTVjb21waWxlSW50ZXJuYWxFUE5TXzlFeGVjU3RhdGVFUE5TXzE0U2Nv
cGVDaGFpbk5vZGVFCiBfX1pOM0pTQzZQYXJzZXI1cGFyc2VJTlNfOEV2YWxOb2RlRUVFTjNXVEYx
MFBhc3NSZWZQdHJJVF9FRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBOU184RGVidWdnZXJFUE5TXzlF
eGVjU3RhdGVFUktOU18xMFNvdXJjZUNvZGVFUE5TXzE4RnVuY3Rpb25QYXJhbWV0ZXJzRU5TXzE4
SlNQYXJzZXJTdHJpY3RuZXNzRVBQTlNfOEpTT2JqZWN0RQotX19aTjNKU0M4RXZhbE5vZGU2Y3Jl
YXRlRVBOU18xMkpTR2xvYmFsRGF0YUVQTlNfMTRTb3VyY2VFbGVtZW50c0VQTjNXVEY2VmVjdG9y
SVN0NHBhaXJJUEtOU18xMElkZW50aWZpZXJFakVMbTBFRUVQTlM2X0lQTlNfMTZGdW5jdGlvbkJv
ZHlOb2RlRUxtMEVFRVJOUzVfN0hhc2hTZXRJTlM1XzZSZWZQdHJJTlM1XzEwU3RyaW5nSW1wbEVF
RU5TXzE3SWRlbnRpZmllclJlcEhhc2hFTlM1XzEwSGFzaFRyYWl0c0lTTF9FRUVFUktOU18xMFNv
dXJjZUNvZGVFamkKK19fWk4zSlNDOEV2YWxOb2RlNmNyZWF0ZUVQTlNfMTJWTUVQTlNfMTRTb3Vy
Y2VFbGVtZW50c0VQTjNXVEY2VmVjdG9ySVN0NHBhaXJJUEtOU18xMElkZW50aWZpZXJFakVMbTBF
RUVQTlM2X0lQTlNfMTZGdW5jdGlvbkJvZHlOb2RlRUxtMEVFRVJOUzVfN0hhc2hTZXRJTlM1XzZS
ZWZQdHJJTlM1XzEwU3RyaW5nSW1wbEVFRU5TXzE3SWRlbnRpZmllclJlcEhhc2hFTlM1XzEwSGFz
aFRyYWl0c0lTTF9FRUVFUktOU18xMFNvdXJjZUNvZGVFamkKIF9fWk4zSlNDMTRTY29wZUNoYWlu
Tm9kZTEwbG9jYWxEZXB0aEV2CiBfX1pOM0pTQzE3Qnl0ZWNvZGVHZW5lcmF0b3JDMUVQTlNfOEV2
YWxOb2RlRVBOU18xNFNjb3BlQ2hhaW5Ob2RlRVBOM1dURjdIYXNoTWFwSU5TNV82UmVmUHRySU5T
NV8xMFN0cmluZ0ltcGxFRUVOU18xNlN5bWJvbFRhYmxlRW50cnlFTlNfMTdJZGVudGlmaWVyUmVw
SGFzaEVOUzVfMTBIYXNoVHJhaXRzSVM5X0VFTlNfMjZTeW1ib2xUYWJsZUluZGV4SGFzaFRyYWl0
c0VFRVBOU18xM0V2YWxDb2RlQmxvY2tFCiBfX1pOM0pTQzE3Qnl0ZWNvZGVHZW5lcmF0b3JDMkVQ
TlNfOEV2YWxOb2RlRVBOU18xNFNjb3BlQ2hhaW5Ob2RlRVBOM1dURjdIYXNoTWFwSU5TNV82UmVm
UHRySU5TNV8xMFN0cmluZ0ltcGxFRUVOU18xNlN5bWJvbFRhYmxlRW50cnlFTlNfMTdJZGVudGlm
aWVyUmVwSGFzaEVOUzVfMTBIYXNoVHJhaXRzSVM5X0VFTlNfMjZTeW1ib2xUYWJsZUluZGV4SGFz
aFRyYWl0c0VFRVBOU18xM0V2YWxDb2RlQmxvY2tFCkBAIC0xMDQ2LDEzICsxMDQ2LDEzIEBAIF9f
Wk4zSlNDOUpJVFRodW5rczE1dHJ5Q2FjaGVHZXRCeUlERVBOU18KIF9fWk4zSlNDM0pJVDMzcHJp
dmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoRU5TXzE2UmV0dXJuQWRkcmVzc1B0ckUKIF9f
Wk5LM0pTQzhKU09iamVjdDI0Z2V0UHJvcGVydHlTcGVjaWZpY1ZhbHVlRVBOU185RXhlY1N0YXRl
RVJLTlNfMTBJZGVudGlmaWVyRVJQTlNfNkpTQ2VsbEUKIF9fWk4zSlNDMjdjdGlQYXRjaENhbGxC
eVJldHVybkFkZHJlc3NFUE5TXzlDb2RlQmxvY2tFTlNfMTZSZXR1cm5BZGRyZXNzUHRyRU5TXzEx
RnVuY3Rpb25QdHJFCi1fX1pOM0pTQzNKSVQ4bGlua0NhbGxFUE5TXzEwSlNGdW5jdGlvbkVQTlNf
OUNvZGVCbG9ja0VTNF9OU18yMU1hY3JvQXNzZW1ibGVyQ29kZVB0ckVQTlNfMTJDYWxsTGlua0lu
Zm9FaVBOU18xMkpTR2xvYmFsRGF0YUUKLV9fWk4zSlNDM0pJVDIwcGF0Y2hNZXRob2RDYWxsUHJv
dG9FUk5TXzEySlNHbG9iYWxEYXRhRVBOU185Q29kZUJsb2NrRVJOU18xOE1ldGhvZENhbGxMaW5r
SW5mb0VQTlNfMTBKU0Z1bmN0aW9uRVBOU185U3RydWN0dXJlRVBOU184SlNPYmplY3RFTlNfMTZS
ZXR1cm5BZGRyZXNzUHRyRQorX19aTjNKU0MzSklUOGxpbmtDYWxsRVBOU18xMEpTRnVuY3Rpb25F
UE5TXzlDb2RlQmxvY2tFUzRfTlNfMjFNYWNyb0Fzc2VtYmxlckNvZGVQdHJFUE5TXzEyQ2FsbExp
bmtJbmZvRWlQTlNfMTJWTUUKK19fWk4zSlNDM0pJVDIwcGF0Y2hNZXRob2RDYWxsUHJvdG9FUk5T
XzEyVk1FUE5TXzlDb2RlQmxvY2tFUk5TXzE4TWV0aG9kQ2FsbExpbmtJbmZvRVBOU18xMEpTRnVu
Y3Rpb25FUE5TXzlTdHJ1Y3R1cmVFUE5TXzhKU09iamVjdEVOU18xNlJldHVybkFkZHJlc3NQdHJF
CiBfX1pOM0pTQzlKSVRUaHVua3MxNXRyeUNhY2hlUHV0QnlJREVQTlNfOUV4ZWNTdGF0ZUVQTlNf
OUNvZGVCbG9ja0VOU18xNlJldHVybkFkZHJlc3NQdHJFTlNfN0pTVmFsdWVFUktOU18xNVB1dFBy
b3BlcnR5U2xvdEVQTlNfMTdTdHJ1Y3R1cmVTdHViSW5mb0ViCiBfY3RpX29wX2dldF9ieV9pZF9n
ZW5lcmljCiBfY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljCi1fX1pOM0pTQzE0U3RydWN0dXJlQ2hh
aW5DMUVSTlNfMTJKU0dsb2JhbERhdGFFUE5TXzlTdHJ1Y3R1cmVFUzRfCi1fX1pOM0pTQzE0U3Ry
dWN0dXJlQ2hhaW5DMkVSTlNfMTJKU0dsb2JhbERhdGFFUE5TXzlTdHJ1Y3R1cmVFUzRfCitfX1pO
M0pTQzE0U3RydWN0dXJlQ2hhaW5DMUVSTlNfMTJWTUVQTlNfOVN0cnVjdHVyZUVTNF8KK19fWk4z
SlNDMTRTdHJ1Y3R1cmVDaGFpbkMyRVJOU18xMlZNRVBOU185U3RydWN0dXJlRVM0XwogX19aTjNK
U0MzSklUMjZwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkVQTlNfMTdTdHJ1Y3R1cmVTdHViSW5m
b0VQTlNfOVN0cnVjdHVyZUVQTlNfMTRTdHJ1Y3R1cmVDaGFpbkVtUktOU18xMElkZW50aWZpZXJF
UktOU18xMlByb3BlcnR5U2xvdEVtTlNfMTZSZXR1cm5BZGRyZXNzUHRyRVBOU185RXhlY1N0YXRl
RQogX19aTjNKU0MzSklUMTN0ZXN0UHJvdG90eXBlRU5TXzdKU1ZhbHVlRVJOU18yMkFic3RyYWN0
TWFjcm9Bc3NlbWJsZXJJTlNfMTJYODZBc3NlbWJsZXJFRThKdW1wTGlzdEUKIF9fWk4zSlNDM0pJ
VDIyY29tcGlsZUdldERpcmVjdE9mZnNldEVQTlNfOEpTT2JqZWN0RU5TXzEyWDg2UmVnaXN0ZXJz
MTBSZWdpc3RlcklERW0KQEAgLTExMTcsNyArMTExNyw3IEBAIF9fWk4zSlNDMjNNYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbjRtb3ZlRU4KIF9fWk4zSlNDTDIwc3RyaW5nUHJvdG9GdW5jTWF0Y2hFUE5T
XzlFeGVjU3RhdGVFCiBfX1pOSzNKU0MxN1JlZ0V4cENvbnN0cnVjdG9yMTRhcnJheU9mTWF0Y2hl
c0VQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlNDMThSZWdFeHBNYXRjaGVzQXJyYXlDMkVQTlNfOUV4
ZWNTdGF0ZUVQTlNfMjRSZWdFeHBDb25zdHJ1Y3RvclByaXZhdGVFCi1fX1pOM0pTQzdKU0FycmF5
QzJFUk5TXzEySlNHbG9iYWxEYXRhRVBOU185U3RydWN0dXJlRWpOU18xN0FycmF5Q3JlYXRpb25N
b2RlRQorX19aTjNKU0M3SlNBcnJheUMyRVJOU18xMlZNRVBOU185U3RydWN0dXJlRWpOU18xN0Fy
cmF5Q3JlYXRpb25Nb2RlRQogX19aTjNKU0M3SlNBcnJheTE1c2V0U3ViY2xhc3NEYXRhRVB2CiBf
X1pOM0pTQzE4UmVnRXhwTWF0Y2hlc0FycmF5RDFFdgogX19aTkszSlNDN0pTQXJyYXkxMnN1YmNs
YXNzRGF0YUV2CkBAIC0xMTQ3LDcgKzExNDcsNyBAQCBfX1pOM1dURjEwU3RyaW5nSW1wbDRmaW5k
RVBGYnRFagogX19aTjNXVEYxMFN0cmluZ0ltcGw0ZmluZEVQS2NqCiBfX1pOM1dURjZTdHJpbmcy
NmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrRVBLY20KIF9fWk4zV1RGMTBmYXN0U3RyRHVwRVBL
YwotX19aTjNKU0MxMElkZW50aWZpZXIxMWFkZFNsb3dDYXNlRVBOU18xMkpTR2xvYmFsRGF0YUVQ
TjNXVEYxMFN0cmluZ0ltcGxFCitfX1pOM0pTQzEwSWRlbnRpZmllcjExYWRkU2xvd0Nhc2VFUE5T
XzEyVk1FUE4zV1RGMTBTdHJpbmdJbXBsRQogX0pTU3RyaW5nUmV0YWluCiBfX19pbml0aWFsaXpl
U2NhdmVuZ2VyX2Jsb2NrX2ludm9rZV8xCiBfX1pOM1dURjIzd2FpdEZvclRocmVhZENvbXBsZXRp
b25FagpAQCAtMTE1Niw3ICsxMTU2LDcgQEAgX0pTT2JqZWN0Q29weVByb3BlcnR5TmFtZXMKIF9f
Wk4zSlNDOEpTT2JqZWN0MTZjb3B5QmFja2luZ1N0b3JlRVBOU182SlNDZWxsRVJOU18xMUNvcHlW
aXNpdG9yRQogX19aTjNKU0M4SlNPYmplY3QxNmdldFByb3BlcnR5TmFtZXNFUE5TXzlFeGVjU3Rh
dGVFUk5TXzE3UHJvcGVydHlOYW1lQXJyYXlFTlNfMTVFbnVtZXJhdGlvbk1vZGVFCiBfX1pOM0pT
QzhKU09iamVjdDE5Z2V0T3duUHJvcGVydHlOYW1lc0VQTlNfOUV4ZWNTdGF0ZUVSTlNfMTdQcm9w
ZXJ0eU5hbWVBcnJheUVOU18xNUVudW1lcmF0aW9uTW9kZUUKLV9fWk4zSlNDOVN0cnVjdHVyZTE2
Z2V0UHJvcGVydHlOYW1lc0VSTlNfMTJKU0dsb2JhbERhdGFFUk5TXzE3UHJvcGVydHlOYW1lQXJy
YXlFTlNfMTVFbnVtZXJhdGlvbk1vZGVFCitfX1pOM0pTQzlTdHJ1Y3R1cmUxNmdldFByb3BlcnR5
TmFtZXNFUk5TXzEyVk1FUk5TXzE3UHJvcGVydHlOYW1lQXJyYXlFTlNfMTVFbnVtZXJhdGlvbk1v
ZGVFCiBfX1pOM0pTQzlFeGVjU3RhdGUyMG9iamVjdFByb3RvdHlwZVRhYmxlRVBTMF8KIF9KU1By
b3BlcnR5TmFtZUFycmF5R2V0Q291bnQKIF9KU1Byb3BlcnR5TmFtZUFycmF5UmVsZWFzZQpAQCAt
MTIwMiw3ICsxMjAyLDcgQEAgX19aTjNKU0M5QnJlYWtOb2RlMTJlbWl0Qnl0ZWNvZGVFUk5TXzE3
QgogX19aTjNKU0MxN0J5dGVjb2RlR2VuZXJhdG9yMTFicmVha1RhcmdldEVSS05TXzEwSWRlbnRp
ZmllckUKIF9fWk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvcjE0ZW1pdEp1bXBTY29wZXNFUE5TXzVM
YWJlbEVpCiBfX1pOM0pTQ0wyMHN0cmluZ1Byb3RvRnVuY1NwbGl0RVBOU185RXhlY1N0YXRlRQot
X19aTjNKU0MxMWpzU3Vic3RyaW5nRVBOU18xMkpTR2xvYmFsRGF0YUVSS05TXzdVU3RyaW5nRWpq
CitfX1pOM0pTQzExanNTdWJzdHJpbmdFUE5TXzEyVk1FUktOU183VVN0cmluZ0VqagogX19aTjNK
U0M3SlNBcnJheTNwdXRFUE5TXzlFeGVjU3RhdGVFak5TXzdKU1ZhbHVlRQogX19aTjNKU0M3SlNB
cnJheTExcHV0U2xvd0Nhc2VFUE5TXzlFeGVjU3RhdGVFak5TXzdKU1ZhbHVlRQogX19aTjNKU0Mx
MEFTVEJ1aWxkZXIxMW1ha2VTdWJOb2RlRVBOU18xNEV4cHJlc3Npb25Ob2RlRVMyX2IKQEAgLTEz
MDMsOCArMTMwMyw4IEBAIF9fWk4zSlNDMTB0aHJvd0Vycm9yRVBOU185RXhlY1N0YXRlRU5TXzcK
IF9fWk4zSlNDMTJoYXNFcnJvckluZm9FUE5TXzlFeGVjU3RhdGVFUE5TXzhKU09iamVjdEUKIF9f
Wk4zSlNDOUNvZGVCbG9jazI3bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0RWoKIF9fWk4zSlND
MTJhZGRFcnJvckluZm9FUE5TXzlFeGVjU3RhdGVFUE5TXzhKU09iamVjdEVpUktOU18xMFNvdXJj
ZUNvZGVFCi1fX1pOM0pTQzEyYWRkRXJyb3JJbmZvRVBOU18xMkpTR2xvYmFsRGF0YUVQTlNfOEpT
T2JqZWN0RWlSS05TXzEwU291cmNlQ29kZUUKLV9fWk4zSlNDOEpTT2JqZWN0MTdwdXRXaXRoQXR0
cmlidXRlc0VQTlNfMTJKU0dsb2JhbERhdGFFUktOU18xMElkZW50aWZpZXJFTlNfN0pTVmFsdWVF
agorX19aTjNKU0MxMmFkZEVycm9ySW5mb0VQTlNfMTJWTUVQTlNfOEpTT2JqZWN0RWlSS05TXzEw
U291cmNlQ29kZUUKK19fWk4zSlNDOEpTT2JqZWN0MTdwdXRXaXRoQXR0cmlidXRlc0VQTlNfMTJW
TUVSS05TXzEwSWRlbnRpZmllckVOU183SlNWYWx1ZUVqCiBfY3RpX29wX3B1c2hfbmV3X3Njb3Bl
CiBfX1pOM0pTQzE5SlNTdGF0aWNTY29wZU9iamVjdDE4Z2V0T3duUHJvcGVydHlTbG90RVBOU185
RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJOU18xMlByb3BlcnR5U2xvdEUKIF9fWk4zSlND
MTJKU0FjdGl2YXRpb24zcHV0RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRU5TXzdK
U1ZhbHVlRVJOU18xNVB1dFByb3BlcnR5U2xvdEUKQEAgLTEzNjYsMTUgKzEzNjYsMTUgQEAgX2N0
aV9vcF9wcmVfZGVjCiBfX1pOM1dURjEwU3RyaW5nSW1wbDE2ZmluZElnbm9yaW5nQ2FzZUVQUzBf
agogX19aTjNKU0M1TGV4ZXIxOWdldFVuaWNvZGVDaGFyYWN0ZXJFdgogX19aTjNKU0NMMjNudW1i
ZXJQcm90b0Z1bmNUb1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKLV9fWk4zSlNDMTJKU0dsb2JhbERh
dGExNWdldEhvc3RGdW5jdGlvbkVQRlB2UE5TXzlFeGVjU3RhdGVFRVBGTlNfMjFNYWNyb0Fzc2Vt
YmxlckNvZGVQdHJFUFMwX1BOU18xNEV4ZWN1dGFibGVQb29sRUUKLV9fWk4zSlNDOUpJVFRodW5r
czE2aG9zdEZ1bmN0aW9uU3R1YkVQTlNfMTJKU0dsb2JhbERhdGFFUEZQdlBOU185RXhlY1N0YXRl
RUVQRk5TXzIxTWFjcm9Bc3NlbWJsZXJDb2RlUHRyRVMyX1BOU18xNEV4ZWN1dGFibGVQb29sRUUK
LV9fWk4zSlNDMThzcXJ0VGh1bmtHZW5lcmF0b3JFUE5TXzEySlNHbG9iYWxEYXRhRVBOU18xNEV4
ZWN1dGFibGVQb29sRQorX19aTjNKU0MxMlZNMTVnZXRIb3N0RnVuY3Rpb25FUEZQdlBOU185RXhl
Y1N0YXRlRUVQRk5TXzIxTWFjcm9Bc3NlbWJsZXJDb2RlUHRyRVBTMF9QTlNfMTRFeGVjdXRhYmxl
UG9vbEVFCitfX1pOM0pTQzlKSVRUaHVua3MxNmhvc3RGdW5jdGlvblN0dWJFUE5TXzEyVk1FUEZQ
dlBOU185RXhlY1N0YXRlRUVQRk5TXzIxTWFjcm9Bc3NlbWJsZXJDb2RlUHRyRVMyX1BOU18xNEV4
ZWN1dGFibGVQb29sRUUKK19fWk4zSlNDMThzcXJ0VGh1bmtHZW5lcmF0b3JFUE5TXzEyVk1FUE5T
XzE0RXhlY3V0YWJsZVBvb2xFCiBfX1pOM0pTQzE5U3BlY2lhbGl6ZWRUaHVua0pJVDhmaW5hbGl6
ZUVOU18yMU1hY3JvQXNzZW1ibGVyQ29kZVB0ckUKIF9fWk4zSlNDMTBKU0Z1bmN0aW9uQzFFUE5T
XzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1cmVFaVJLTlNfMTBJ
ZGVudGlmaWVyRVBOU18xNk5hdGl2ZUV4ZWN1dGFibGVFCiBfX1pOM0pTQzEwSlNGdW5jdGlvbkMy
RVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBOU185U3RydWN0dXJlRWlSS05T
XzEwSWRlbnRpZmllckVQTlNfMTZOYXRpdmVFeGVjdXRhYmxlRQogX19aTjNKU0MzSklUMTFlbWl0
X29wX25vdEVQTlNfMTFJbnN0cnVjdGlvbkUKIF9fWk4zSlNDM0pJVDE1ZW1pdFNsb3dfb3Bfbm90
RVBOU18xMUluc3RydWN0aW9uRVJQTlNfMTNTbG93Q2FzZUVudHJ5RQotX19aTjNKU0MxN3Bvd1Ro
dW5rR2VuZXJhdG9yRVBOU18xMkpTR2xvYmFsRGF0YUVQTlNfMTRFeGVjdXRhYmxlUG9vbEUKK19f
Wk4zSlNDMTdwb3dUaHVua0dlbmVyYXRvckVQTlNfMTJWTUVQTlNfMTRFeGVjdXRhYmxlUG9vbEUK
IF9fWk4zSlNDMTJYODZBc3NlbWJsZXI3Y21wbF9pbUVpaU5TXzEyWDg2UmVnaXN0ZXJzMTBSZWdp
c3RlcklERQogX19aTjNKU0MyM01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uMjZicmFuY2hDb252ZXJ0
RG91YmxlVG9JbnQzMkVOU18xMlg4NlJlZ2lzdGVyczEzWE1NUmVnaXN0ZXJJREVOUzFfMTBSZWdp
c3RlcklERVJOU18yMkFic3RyYWN0TWFjcm9Bc3NlbWJsZXJJTlNfMTJYODZBc3NlbWJsZXJFRThK
dW1wTGlzdEVTMl8KIF9fWk4zSlNDMTlTcGVjaWFsaXplZFRodW5rSklUMTFyZXR1cm5JbnQzMkVO
U18xMlg4NlJlZ2lzdGVyczEwUmVnaXN0ZXJJREUKQEAgLTEzODgsOCArMTM4OCw4IEBAIF9jdGlf
b3BfZGVsX2J5X2lkCiBfX1pOM0pTQzE2SlNWYXJpYWJsZU9iamVjdDE0ZGVsZXRlUHJvcGVydHlF
UE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFCiBfX1pOM0pTQzhKU09iamVjdDE0ZGVs
ZXRlUHJvcGVydHlFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFCiBfX1pOM0pTQzE3
T2JqZWN0Q29uc3RydWN0b3IxOGdldE93blByb3BlcnR5U2xvdEVQTlNfOUV4ZWNTdGF0ZUVSS05T
XzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCi1fX1pOM0pTQzlTdHJ1Y3R1cmUyN2Rl
c3BlY2lmeUZ1bmN0aW9uVHJhbnNpdGlvbkVSTlNfMTJKU0dsb2JhbERhdGFFUFMwX1JLTlNfMTBJ
ZGVudGlmaWVyRQotX19aTjNKU0MxM1Byb3BlcnR5VGFibGVDMkVSTlNfMTJKU0dsb2JhbERhdGFF
UE5TXzZKU0NlbGxFUktTMF8KK19fWk4zSlNDOVN0cnVjdHVyZTI3ZGVzcGVjaWZ5RnVuY3Rpb25U
cmFuc2l0aW9uRVJOU18xMlZNRVBTMF9SS05TXzEwSWRlbnRpZmllckUKK19fWk4zSlNDMTNQcm9w
ZXJ0eVRhYmxlQzJFUk5TXzEyVk1FUE5TXzZKU0NlbGxFUktTMF8KIF9fWk5LM1dURjZTdHJpbmc2
dG9VSW50RVBiCiBfX1pOM1dURjEwU3RyaW5nSW1wbDZ0b1VJbnRFUGIKIF9fWk4zV1RGMTZjaGFy
YWN0ZXJzVG9VSW50RVBLdG1QYgpAQCAtMTQzNiw3ICsxNDM2LDcgQEAgX2N0aV9vcF9wdXRfYnlf
aWRfZmFpbAogX19aTjNKU0MxN0J5dGVjb2RlR2VuZXJhdG9yMTFlbWl0UG9zdEluY0VQTlNfMTBS
ZWdpc3RlcklERVMyXwogX19aTjNKU0MzSklUMTZlbWl0X29wX3Bvc3RfaW5jRVBOU18xMUluc3Ry
dWN0aW9uRQogX19aTjNKU0MzSklUMjBlbWl0U2xvd19vcF9wb3N0X2luY0VQTlNfMTFJbnN0cnVj
dGlvbkVSUE5TXzEzU2xvd0Nhc2VFbnRyeUUKLV9fWk4zSlNDTDIzY3JlYXRlUHJvdG90eXBlUHJv
cGVydHlFUk5TXzEySlNHbG9iYWxEYXRhRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBOU18xMEpTRnVu
Y3Rpb25FCitfX1pOM0pTQ0wyM2NyZWF0ZVByb3RvdHlwZVByb3BlcnR5RVJOU18xMlZNRVBOU18x
NEpTR2xvYmFsT2JqZWN0RVBOU18xMEpTRnVuY3Rpb25FCiBfX1pOSzNKU0M4TnVsbE5vZGU2aXNO
dWxsRXYKIF9fWk4zSlNDM0pJVDE3ZW1pdF9vcF9qbmVxX251bGxFUE5TXzExSW5zdHJ1Y3Rpb25F
CiBfY3RpX29wX2NvbnZlcnRfdGhpcwpAQCAtMTQ3OCw3ICsxNDc4LDcgQEAgX19aTjNXVEY3VW5p
Y29kZTE4ZXF1YWxVVEYxNldpdGhVVEY4RVBLdAogX19aTjNXVEYxMWVtcHR5U3RyaW5nRXYKIF9f
Wk4zV1RGNlN0cmluZzZudW1iZXJFagogX19aTjNKU0MxNFBvc3RmaXhEb3ROb2RlMTJlbWl0Qnl0
ZWNvZGVFUk5TXzE3Qnl0ZWNvZGVHZW5lcmF0b3JFUE5TXzEwUmVnaXN0ZXJJREUKLV9fWk4zSlND
N0pTQXJyYXlDMUVSTlNfMTJKU0dsb2JhbERhdGFFUE5TXzlTdHJ1Y3R1cmVFak5TXzE3QXJyYXlD
cmVhdGlvbk1vZGVFCitfX1pOM0pTQzdKU0FycmF5QzFFUk5TXzEyVk1FUE5TXzlTdHJ1Y3R1cmVF
ak5TXzE3QXJyYXlDcmVhdGlvbk1vZGVFCiBfX1pOM0pTQzEwSWRlbnRpZmllcjRmcm9tRVBOU185
RXhlY1N0YXRlRWoKIF9fWk4zSlNDM0pJVDIyY29tcGlsZUdldERpcmVjdE9mZnNldEVOU18xMlg4
NlJlZ2lzdGVyczEwUmVnaXN0ZXJJREVTMl9QTlNfOVN0cnVjdHVyZUVtCiBfX1pOM1dURjZWZWN0
b3JJTjNKU0MxNEV4ZWN1dGFibGVQb29sMTBBbGxvY2F0aW9uRUxtMkVFMTVyZXNlcnZlQ2FwYWNp
dHlFbQpAQCAtMTQ5NCw4ICsxNDk0LDggQEAgX19aTjNKU0M0WWFycjEzWWFyckdlbmVyYXRvcjI5
Z2VuZXJhdGVBcwogX19aTjNKU0MxMlg4NkFzc2VtYmxlcjIzWDg2SW5zdHJ1Y3Rpb25Gb3JtYXR0
ZXIxMW1lbW9yeU1vZFJNRWlOU18xMlg4NlJlZ2lzdGVyczEwUmVnaXN0ZXJJREVTM19paQogX19a
TjNKU0NMMjFzdHJpbmdQcm90b0Z1bmNTZWFyY2hFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0pTQzE3
U3RyaW5nQ29uc3RydWN0b3IxOGdldE93blByb3BlcnR5U2xvdEVQTlNfOUV4ZWNTdGF0ZUVSS05T
XzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCi1fX1pOM0pTQzI2ZnJvbUNoYXJDb2Rl
VGh1bmtHZW5lcmF0b3JFUE5TXzEySlNHbG9iYWxEYXRhRVBOU18xNEV4ZWN1dGFibGVQb29sRQot
X19aTjNKU0NMMTJjaGFyVG9TdHJpbmdFUk5TXzE5U3BlY2lhbGl6ZWRUaHVua0pJVEVQTlNfMTJK
U0dsb2JhbERhdGFFTlNfMTJYODZSZWdpc3RlcnMxMFJlZ2lzdGVySURFUzVfUzVfCitfX1pOM0pT
QzI2ZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3JFUE5TXzEyVk1FUE5TXzE0RXhlY3V0YWJsZVBv
b2xFCitfX1pOM0pTQ0wxMmNoYXJUb1N0cmluZ0VSTlNfMTlTcGVjaWFsaXplZFRodW5rSklURVBO
U18xMlZNRU5TXzEyWDg2UmVnaXN0ZXJzMTBSZWdpc3RlcklERVM1X1M1XwogX19aTjNKU0NMMThz
dHJpbmdGcm9tQ2hhckNvZGVFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M4SlNPYmplY3QxNGlz
R2xvYmFsT2JqZWN0RXYKIF9fWk5LM1dURjZTdHJpbmcxNnJlbW92ZUNoYXJhY3RlcnNFUEZidEUK
QEAgLTE1MTgsMTIgKzE1MTgsMTIgQEAgX19aTjNKU0MzSklUMThlbWl0X29wX2dldF9wbmFtZXNF
UE5TXzExSQogX19aTjNKU0MzSklUMjBlbWl0X29wX2dldF9ieV9wbmFtZUVQTlNfMTFJbnN0cnVj
dGlvbkUKIF9fWk4zSlNDM0pJVDE4ZW1pdF9vcF9uZXh0X3BuYW1lRVBOU18xMUluc3RydWN0aW9u
RQogX19aTjNKU0MzSklUMjRlbWl0U2xvd19vcF9nZXRfYnlfcG5hbWVFUE5TXzExSW5zdHJ1Y3Rp
b25FUlBOU18xM1Nsb3dDYXNlRW50cnlFCi1fX1pOM0pTQzlTdHJ1Y3R1cmUyMnRvRGljdGlvbmFy
eVRyYW5zaXRpb25FUk5TXzEySlNHbG9iYWxEYXRhRVBTMF9OUzBfMTREaWN0aW9uYXJ5S2luZEUK
K19fWk4zSlNDOVN0cnVjdHVyZTIydG9EaWN0aW9uYXJ5VHJhbnNpdGlvbkVSTlNfMTJWTUVQUzBf
TlMwXzE0RGljdGlvbmFyeUtpbmRFCiBfY3RpX29wX2dldF9wbmFtZXMKIF9fWk4zSlNDMjJKU1By
b3BlcnR5TmFtZUl0ZXJhdG9yNmNyZWF0ZUVQTlNfOUV4ZWNTdGF0ZUVQTlNfOEpTT2JqZWN0RQog
X19aTjNXVEY2VmVjdG9ySU4zSlNDMTBJZGVudGlmaWVyRUxtMjBFRTE0ZXhwYW5kQ2FwYWNpdHlF
bQogX2N0aV9oYXNfcHJvcGVydHkKLV9fWk4zSlNDOVN0cnVjdHVyZTI2ZmxhdHRlbkRpY3Rpb25h
cnlTdHJ1Y3R1cmVFUk5TXzEySlNHbG9iYWxEYXRhRVBOU184SlNPYmplY3RFCitfX1pOM0pTQzlT
dHJ1Y3R1cmUyNmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlRVJOU18xMlZNRVBOU184SlNPYmpl
Y3RFCiBfSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcwogX19aTjNKU0MxNkpTQ2FsbGJhY2tPYmplY3RJ
TlNfMjRKU09iamVjdFdpdGhHbG9iYWxPYmplY3RFRTNwdXRFUE5TXzlFeGVjU3RhdGVFUktOU18x
MElkZW50aWZpZXJFTlNfN0pTVmFsdWVFUk5TXzE1UHV0UHJvcGVydHlTbG90RQogX0pTVmFsdWVD
cmVhdGVKU09OU3RyaW5nCkBAIC0xNTk4LDcgKzE1OTgsNyBAQCBfX1pOM0pTQzExU3RyaW5naWZp
ZXIxOGFwcGVuZFF1b3RlZFN0cmluCiBfX1pOM0pTQzdVU3RyaW5nQzFFUEtjagogX0pTT2JqZWN0
R2V0UHJpdmF0ZVByb3BlcnR5CiBfSlNPYmplY3RTZXRQcml2YXRlUHJvcGVydHkKLV9fWk4zSlND
MjBKU0NhbGxiYWNrT2JqZWN0RGF0YTE4c2V0UHJpdmF0ZVByb3BlcnR5RVJOU18xMkpTR2xvYmFs
RGF0YUVQTlNfNkpTQ2VsbEVSS05TXzEwSWRlbnRpZmllckVOU183SlNWYWx1ZUUKK19fWk4zSlND
MjBKU0NhbGxiYWNrT2JqZWN0RGF0YTE4c2V0UHJpdmF0ZVByb3BlcnR5RVJOU18xMlZNRVBOU182
SlNDZWxsRVJLTlNfMTBJZGVudGlmaWVyRU5TXzdKU1ZhbHVlRQogX19aTjNXVEY5SGFzaFRhYmxl
SU5TXzZSZWZQdHJJTlNfMTBTdHJpbmdJbXBsRUVFU3Q0cGFpcklTM19OM0pTQzEyV3JpdGVCYXJy
aWVySU5TNV83VW5rbm93bkVFRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTOV9FRU5TNV8xN0lk
ZW50aWZpZXJSZXBIYXNoRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMzX0VF
TlNFX0lTOF9FRUVFU0ZfRTZyZWhhc2hFaQogX0pTT2JqZWN0RGVsZXRlUHJpdmF0ZVByb3BlcnR5
CiBfX1pOM0pTQzRZYXJyMThQYXR0ZXJuRGlzanVuY3Rpb24xN2FkZE5ld0FsdGVybmF0aXZlRXYK
QEAgLTE2MjMsNyArMTYyMyw3IEBAIF9fWk4zSlNDM0pJVDIwZW1pdFNsb3dfb3BfcG9zdF9kZWNF
UE5TXzEKIF9fWk4zSlNDN0pTQXJyYXkxOWdldE93blByb3BlcnR5TmFtZXNFUE5TXzlFeGVjU3Rh
dGVFUk5TXzE3UHJvcGVydHlOYW1lQXJyYXlFTlNfMTVFbnVtZXJhdGlvbk1vZGVFCiBfX1pOM0pT
QzE3UHJvcGVydHlOYW1lQXJyYXkzYWRkRVBOM1dURjEwU3RyaW5nSW1wbEUKIF9fWk4zSlNDOUV4
ZWNTdGF0ZTE5YXJyYXlQcm90b3R5cGVUYWJsZUVQUzBfCi1fX1pOM0pTQzIwY2hhckF0VGh1bmtH
ZW5lcmF0b3JFUE5TXzEySlNHbG9iYWxEYXRhRVBOU18xNEV4ZWN1dGFibGVQb29sRQorX19aTjNK
U0MyMGNoYXJBdFRodW5rR2VuZXJhdG9yRVBOU18xMlZNRVBOU18xNEV4ZWN1dGFibGVQb29sRQog
X19aTjNKU0NMMTRzdHJpbmdDaGFyTG9hZEVSTlNfMTlTcGVjaWFsaXplZFRodW5rSklURQogX19a
TjNKU0NMMjFzdHJpbmdQcm90b0Z1bmNDaGFyQXRFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM1dURjZW
ZWN0b3JJUE4zSlNDMTRFeHByZXNzaW9uTm9kZUVMbTE2RUUxNGV4cGFuZENhcGFjaXR5RW0KQEAg
LTE2NjUsNyArMTY2NSw3IEBAIF9fWk4zSlNDM0pJVDE0ZW1pdF9vcF9yc2hpZnRFUE5TXzExSW5z
dHIKIF9fWk4zSlNDM0pJVDE4ZW1pdFNsb3dfb3BfcnNoaWZ0RVBOU18xMUluc3RydWN0aW9uRVJQ
TlNfMTNTbG93Q2FzZUVudHJ5RQogX2N0aV9vcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9yZWFsbG9j
CiBfX1pOSzNXVEY2U3RyaW5nNXNwbGl0RXRiUk5TXzZWZWN0b3JJUzBfTG0wRUVFCi1fX1pOM0pT
QzI0Y2hhckNvZGVBdFRodW5rR2VuZXJhdG9yRVBOU18xMkpTR2xvYmFsRGF0YUVQTlNfMTRFeGVj
dXRhYmxlUG9vbEUKK19fWk4zSlNDMjRjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3JFUE5TXzEyVk1F
UE5TXzE0RXhlY3V0YWJsZVBvb2xFCiBfY3RpX29wX2dldF9ieV92YWxfc3RyaW5nCiBfX1pOM0pT
QzE3U3RyaW5nQ29uc3RydWN0b3IxMWdldENhbGxEYXRhRVJOU184Q2FsbERhdGFFCiBfX1pOM0pT
Q0wyMWNhbGxTdHJpbmdDb25zdHJ1Y3RvckVQTlNfOUV4ZWNTdGF0ZUUKQEAgLTE2NzUsMTAgKzE2
NzUsMTAgQEAgX19aTjNKU0MxN051bWJlckNvbnN0cnVjdG9yMThnZXRPd25Qcm9wZQogX19aTjNK
U0MxM2pzQWRkU2xvd0Nhc2VFUE5TXzlFeGVjU3RhdGVFTlNfN0pTVmFsdWVFUzJfCiBfX1pOSzNK
U0M4SlNTdHJpbmcxMXRvUHJpbWl0aXZlRVBOU185RXhlY1N0YXRlRU5TXzIyUHJlZmVycmVkUHJp
bWl0aXZlVHlwZUUKIF9jdGlfb3BfZ2V0X2J5X2lkX2dldHRlcl9zdHViCi1fX1pOM0pTQzlTdHJ1
Y3R1cmUyNHJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbkVSTlNfMTJKU0dsb2JhbERhdGFFUFMwX1JL
TlNfMTBJZGVudGlmaWVyRVJtCitfX1pOM0pTQzlTdHJ1Y3R1cmUyNHJlbW92ZVByb3BlcnR5VHJh
bnNpdGlvbkVSTlNfMTJWTUVQUzBfUktOU18xMElkZW50aWZpZXJFUm0KIF9fWk4zSlNDOVN0cnVj
dHVyZTZyZW1vdmVFUktOU18xMElkZW50aWZpZXJFCiBfX1pOM1dURjZWZWN0b3JJakxtMEVFMTRl
eHBhbmRDYXBhY2l0eUVtCi1fX1pOM0pTQzlTdHJ1Y3R1cmUzMXJlbW92ZVByb3BlcnR5V2l0aG91
dFRyYW5zaXRpb25FUk5TXzEySlNHbG9iYWxEYXRhRVJLTlNfMTBJZGVudGlmaWVyRQorX19aTjNK
U0M5U3RydWN0dXJlMzFyZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uRVJOU18xMlZNRVJL
TlNfMTBJZGVudGlmaWVyRQogX19aTjNKU0MxMkdldHRlclNldHRlcjEzdmlzaXRDaGlsZHJlbkVS
TlNfOU1hcmtTdGFja0UKIF9fWk4zSlNDOUFyZ3VtZW50czEzdmlzaXRDaGlsZHJlbkVSTlNfOU1h
cmtTdGFja0UKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDE3V2Vha01hcHNGaW5hbGl6ZXI4Zmlu
YWxpemVFTlNfNkhhbmRsZUlOU183VW5rbm93bkVFRVB2CkBAIC0xNzAxLDEzICsxNzAxLDEzIEBA
IF9fWk4zSlNDOEpTUGFyc2VyMjFwYXJzZURvV2hpbGVTdGF0ZW1lbnQKIF9fWk4zSlNDTDE2bWF0
aFByb3RvRnVuY01pbkVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlNDTDIxYXJyYXlQcm90b0Z1bmNS
ZXZlcnNlRVBOU185RXhlY1N0YXRlRQogX19aTjNKU0MxN1Byb2dyYW1FeGVjdXRhYmxlMTN2aXNp
dENoaWxkcmVuRVJOU185TWFya1N0YWNrRQotX19aTjNKU0MxMkpTR2xvYmFsRGF0YTE4Y3JlYXRl
Q29udGV4dEdyb3VwRU5TXzhIZWFwVHlwZUUKLV9fWk4zSlNDMTJKU0dsb2JhbERhdGEyMmNsZWFy
QnVpbHRpblN0cnVjdHVyZXNFdgorX19aTjNKU0MxMlZNMThjcmVhdGVDb250ZXh0R3JvdXBFTlNf
OEhlYXBUeXBlRQorX19aTjNKU0MxMlZNMjJjbGVhckJ1aWx0aW5TdHJ1Y3R1cmVzRXYKIF9fWk4z
SlNDNEhlYXA3ZGVzdHJveUV2CiBfX1pOM0pTQzlKSVRUaHVua3MyMmNsZWFySG9zdEZ1bmN0aW9u
U3R1YnNFdgogX19aTjNKU0MxMU1hcmtlZFNwYWNlN2Rlc3Ryb3lFdgotX19aTjNKU0MxMkpTR2xv
YmFsRGF0YUQxRXYKLV9fWk4zSlNDMTJKU0dsb2JhbERhdGFEMkV2CitfX1pOM0pTQzEyVk1EMUV2
CitfX1pOM0pTQzEyVk1EMkV2CiBfX1pOM0pTQzEySlNTdGFja0QxRXYKIF9fWk4zSlNDMTJKU1N0
YWNrRDJFdgogX19aTkszSlNDOUhhc2hUYWJsZTExZGVsZXRlVGFibGVFdgpAQCAtMTcyNiwxMiAr
MTcyNiwxMiBAQCBfX1pOM0pTQzI1RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFja0QwRXYKIF9fWk4z
SlNDOUpJVFRodW5rc0QxRXYKIF9fWk4zSlNDMTJTbWFsbFN0cmluZ3NEMUV2CiBfX1pOMTNPcGFx
dWVKU0NsYXNzMjZjcmVhdGVOb0F1dG9tYXRpY1Byb3RvdHlwZUVQSzE3SlNDbGFzc0RlZmluaXRp
b24KLV9fWk4zSlNDMTZKU0NhbGxiYWNrT2JqZWN0SU5TXzE0SlNHbG9iYWxPYmplY3RFRUMyRVJO
U18xMkpTR2xvYmFsRGF0YUVQMTNPcGFxdWVKU0NsYXNzUE5TXzlTdHJ1Y3R1cmVFCitfX1pOM0pT
QzE2SlNDYWxsYmFja09iamVjdElOU18xNEpTR2xvYmFsT2JqZWN0RUVDMkVSTlNfMTJWTUVQMTNP
cGFxdWVKU0NsYXNzUE5TXzlTdHJ1Y3R1cmVFCiBfX1pOM0pTQzE2SlNDYWxsYmFja09iamVjdElO
U18xNEpTR2xvYmFsT2JqZWN0RUU0aW5pdEVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlNDMTZKU0Nh
bGxiYWNrT2JqZWN0SU5TXzE0SlNHbG9iYWxPYmplY3RFRTE4Z2V0T3duUHJvcGVydHlTbG90RVBO
U185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJOU18xMlByb3BlcnR5U2xvdEUKIF9fWk4x
M09wYXF1ZUpTQ2xhc3MxMnN0YXRpY1ZhbHVlc0VQTjNKU0M5RXhlY1N0YXRlRQogX19aTjEzT3Bh
cXVlSlNDbGFzczE1c3RhdGljRnVuY3Rpb25zRVBOM0pTQzlFeGVjU3RhdGVFCi1fX1pOM0pTQzE0
SlNHbG9iYWxPYmplY3QxNHJlc2V0UHJvdG90eXBlRVJOU18xMkpTR2xvYmFsRGF0YUVOU183SlNW
YWx1ZUUKK19fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDE0cmVzZXRQcm90b3R5cGVFUk5TXzEyVk1F
TlNfN0pTVmFsdWVFCiBfSlNSZXBvcnRFeHRyYU1lbW9yeUNvc3QKIF9KU1ZhbHVlSXNPYmplY3QK
IF9KU1ZhbHVlTWFrZU51bGwKQEAgLTE4MzYsMTggKzE4MzYsMTggQEAgX0pTT2JqZWN0SGFzUHJv
cGVydHkKIF9KU09iamVjdEdldFByb3RvdHlwZQogX19aTjNKU0M4SlNPYmplY3QxNXVud3JhcHBl
ZE9iamVjdEV2CiBfX1pOM0pTQzExY3JlYXRlRXJyb3JFUE5TXzlFeGVjU3RhdGVFUktOU183VVN0
cmluZ0UKLV9fWk4zSlNDMTJKU0dsb2JhbERhdGE2Y3JlYXRlRU5TXzhIZWFwVHlwZUUKK19fWk4z
SlNDMTJWTTZjcmVhdGVFTlNfOEhlYXBUeXBlRQogX19aTjNKU0M4SlNPYmplY3QxN3B1dERpcmVj
dEZ1bmN0aW9uRVBOU185RXhlY1N0YXRlRVBOU18xMEpTRnVuY3Rpb25FagotX19aTjNKU0MxMkpT
R2xvYmFsRGF0YTEzc3RhcnRTYW1wbGluZ0V2CitfX1pOM0pTQzEyVk0xM3N0YXJ0U2FtcGxpbmdF
dgogX19aTjNKU0MxMUludGVycHJldGVyMTNzdGFydFNhbXBsaW5nRXYKIF9fWk4zSlNDMTVEYXRl
Q29uc3RydWN0b3IxNmdldENvbnN0cnVjdERhdGFFUk5TXzEzQ29uc3RydWN0RGF0YUUKIF9fWk4z
SlNDTDI4Y29uc3RydWN0V2l0aERhdGVDb25zdHJ1Y3RvckVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4z
SlNDMjFncmVnb3JpYW5EYXRlVGltZVRvTVNFUE5TXzlFeGVjU3RhdGVFUktOU18xN0dyZWdvcmlh
bkRhdGVUaW1lRWRiCiBfX1pOM0pTQ0wzMGRhdGVQcm90b0Z1bmNHZXRUaW1lem9uZU9mZnNldEVQ
TlNfOUV4ZWNTdGF0ZUUKLV9fWk4zSlNDMTJKU0dsb2JhbERhdGExMnN0b3BTYW1wbGluZ0V2Citf
X1pOM0pTQzEyVk0xMnN0b3BTYW1wbGluZ0V2CiBfX1pOM0pTQzExSW50ZXJwcmV0ZXIxMnN0b3BT
YW1wbGluZ0V2CiBfX1pOM1dURjlIYXNoVGFibGVJalN0NHBhaXJJak4zSlNDMTJXcml0ZUJhcnJp
ZXJJTlMyXzdVbmtub3duRUVFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM2X0VFTlNfN0ludEhh
c2hJakVFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJakVFTlNDX0lTNV9FRUVF
U0RfRTZyZWhhc2hFaQotX19aTjNKU0MxMkpTR2xvYmFsRGF0YTE0ZHVtcFNhbXBsZURhdGFFUE5T
XzlFeGVjU3RhdGVFCitfX1pOM0pTQzEyVk0xNGR1bXBTYW1wbGVEYXRhRVBOU185RXhlY1N0YXRl
RQogX19aTjNKU0MxMUludGVycHJldGVyMTRkdW1wU2FtcGxlRGF0YUVQTlNfOUV4ZWNTdGF0ZUUK
IF9fWk4zSlNDMTZBcnJheUNvbnN0cnVjdG9yMTFnZXRDYWxsRGF0YUVSTlNfOENhbGxEYXRhRQog
X19aTjNKU0NMMjBjYWxsQXJyYXlDb25zdHJ1Y3RvckVQTlNfOUV4ZWNTdGF0ZUUKQEAgLTE4NTUs
MTUgKzE4NTUsMTUgQEAgX19aTjNKU0MxN051bWJlckNvbnN0cnVjdG9yMTFnZXRDYWxsRGF0YQog
X19aTjNKU0NMMjFjYWxsTnVtYmVyQ29uc3RydWN0b3JFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0pT
Q0wyOG51bWJlckNvbnN0cnVjdG9yUG9zSW5maW5pdHlFUE5TXzlFeGVjU3RhdGVFTlNfN0pTVmFs
dWVFUktOU18xMElkZW50aWZpZXJFCiBfY3RpX29wX21vZAotX19aTjNKU0MzSklUMTNsaW5rQ29u
c3RydWN0RVBOU18xMEpTRnVuY3Rpb25FUE5TXzlDb2RlQmxvY2tFUzRfTlNfMjFNYWNyb0Fzc2Vt
YmxlckNvZGVQdHJFUE5TXzEyQ2FsbExpbmtJbmZvRWlQTlNfMTJKU0dsb2JhbERhdGFFCitfX1pO
M0pTQzNKSVQxM2xpbmtDb25zdHJ1Y3RFUE5TXzEwSlNGdW5jdGlvbkVQTlNfOUNvZGVCbG9ja0VT
NF9OU18yMU1hY3JvQXNzZW1ibGVyQ29kZVB0ckVQTlNfMTJDYWxsTGlua0luZm9FaVBOU18xMlZN
RQogX19aTjNKU0MxNEV2YWxFeGVjdXRhYmxlMTN2aXNpdENoaWxkcmVuRVJOU185TWFya1N0YWNr
RQogX19aTjNKU0MxN051bWJlckNvbnN0cnVjdG9yMTZnZXRDb25zdHJ1Y3REYXRhRVJOU18xM0Nv
bnN0cnVjdERhdGFFCiBfX1pOM0pTQ0wzMGNvbnN0cnVjdFdpdGhOdW1iZXJDb25zdHJ1Y3RvckVQ
TlNfOUV4ZWNTdGF0ZUUKLV9fWk4zSlNDMTJOdW1iZXJPYmplY3RDMUVSTlNfMTJKU0dsb2JhbERh
dGFFUE5TXzlTdHJ1Y3R1cmVFCitfX1pOM0pTQzEyTnVtYmVyT2JqZWN0QzFFUk5TXzEyVk1FUE5T
XzlTdHJ1Y3R1cmVFCiBfX1pOM0pTQzE4Qm9vbGVhbkNvbnN0cnVjdG9yMTZnZXRDb25zdHJ1Y3RE
YXRhRVJOU18xM0NvbnN0cnVjdERhdGFFCiBfX1pOM0pTQ0wzMWNvbnN0cnVjdFdpdGhCb29sZWFu
Q29uc3RydWN0b3JFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0pTQzE2Y29uc3RydWN0Qm9vbGVhbkVQ
TlNfOUV4ZWNTdGF0ZUVSS05TXzdBcmdMaXN0RQotX19aTjNKU0MxM0Jvb2xlYW5PYmplY3RDMUVS
TlNfMTJKU0dsb2JhbERhdGFFUE5TXzlTdHJ1Y3R1cmVFCitfX1pOM0pTQzEzQm9vbGVhbk9iamVj
dEMxRVJOU18xMlZNRVBOU185U3RydWN0dXJlRQogX19aTjNKU0MxM0Jvb2xlYW5PYmplY3REMUV2
CiBfX1pOM0pTQzlFeGVjU3RhdGUyMWFycmF5Q29uc3RydWN0b3JUYWJsZUVQUzBfCiBfX1pOM0pT
QzE3RnVuY3Rpb25Qcm90b3R5cGUxMWdldENhbGxEYXRhRVJOU184Q2FsbERhdGFFCkBAIC0yMTkw
LDcgKzIxOTAsNyBAQCBfX1pOM0pTQ0wyNWFycmF5UHJvdG9GdW5jTGFzdEluZGV4T2ZFUE5TCiBf
X1pOM1dURjIwZXF1YWxJZ25vcmluZ051bGxpdHlFUE5TXzEwU3RyaW5nSW1wbEVTMV8KIF9jdGlf
b3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwKIF9fWk4zSlNDMTdQcmVmaXhCcmFja2V0Tm9kZTEyZW1p
dEJ5dGVjb2RlRVJOU18xN0J5dGVjb2RlR2VuZXJhdG9yRVBOU18xMFJlZ2lzdGVySURFCi1fX1pO
M0pTQzEySlNHbG9iYWxEYXRhMTBDbGllbnREYXRhRDJFdgorX19aTjNKU0MxMlZNMTBDbGllbnRE
YXRhRDJFdgogX19aTjNKU0M4RGVidWdnZXJEMkV2CiBfX1pOM1dURjE0VGhyZWFkU3BlY2lmaWNJ
TlNfMTNXVEZUaHJlYWREYXRhRUU3ZGVzdHJveUVQdgogX19aTjNXVEYxM1dURlRocmVhZERhdGFE
MUV2CkBAIC0yMjA3LDcgKzIyMDcsNyBAQCBfX1pOSzNKU0M0SGVhcDExb2JqZWN0Q291bnRFdgog
X19aTkszSlNDMTFNYXJrZWRTcGFjZTExb2JqZWN0Q291bnRFdgogX19aTjNKU0MxNEpTR2xvYmFs
T2JqZWN0MTJkZWZpbmVHZXR0ZXJFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUE5T
XzhKU09iamVjdEVqCiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxMmRlZmluZVNldHRlckVQTlNf
OUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVQTlNfOEpTT2JqZWN0RWoKLV9fWk4zSlNDOVN0
cnVjdHVyZTIyZ2V0dGVyU2V0dGVyVHJhbnNpdGlvbkVSTlNfMTJKU0dsb2JhbERhdGFFUFMwXwor
X19aTjNKU0M5U3RydWN0dXJlMjJnZXR0ZXJTZXR0ZXJUcmFuc2l0aW9uRVJOU18xMlZNRVBTMF8K
IF9fWk4zSlNDTDI4b2JqZWN0UHJvdG9GdW5jSXNQcm90b3R5cGVPZkVQTlNfOUV4ZWNTdGF0ZUUK
IF9fWk4zSlNDTDIxZnVuY3Rpb25Qcm90b0Z1bmNDYWxsRVBOU185RXhlY1N0YXRlRQogX19aTksz
SlNDN0FyZ0xpc3Q4Z2V0U2xpY2VFaVJTMF8KQEAgLTIzMzIsMTcgKzIzMzIsMTcgQEAgX19aTjNK
U0MxM1VuYXJ5UGx1c05vZGUxNHN0cmlwVW5hcnlQbHVzRQogX19aTjNKU0NMMjlvYmplY3RQcm90
b0Z1bmNUb0xvY2FsZVN0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4zV1RGNlZlY3RvcklOM0pT
QzhKU1BhcnNlcjE0U2NvcGVMYWJlbEluZm9FTG0yRUUxNGV4cGFuZENhcGFjaXR5RW0KIF9fWk4z
SlNDTDM0b2JqZWN0Q29uc3RydWN0b3JQcmV2ZW50RXh0ZW5zaW9uc0VQTlNfOUV4ZWNTdGF0ZUUK
LV9fWk4zSlNDMTBKU0Z1bmN0aW9uMTdwcmV2ZW50RXh0ZW5zaW9uc0VSTlNfMTJKU0dsb2JhbERh
dGFFCi1fX1pOM0pTQzhKU09iamVjdDE3cHJldmVudEV4dGVuc2lvbnNFUk5TXzEySlNHbG9iYWxE
YXRhRQotX19aTjNKU0M5U3RydWN0dXJlMjdwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb25FUk5T
XzEySlNHbG9iYWxEYXRhRVBTMF8KK19fWk4zSlNDMTBKU0Z1bmN0aW9uMTdwcmV2ZW50RXh0ZW5z
aW9uc0VSTlNfMTJWTUUKK19fWk4zSlNDOEpTT2JqZWN0MTdwcmV2ZW50RXh0ZW5zaW9uc0VSTlNf
MTJWTUUKK19fWk4zSlNDOVN0cnVjdHVyZTI3cHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uRVJO
U18xMlZNRVBTMF8KIF9fWk4zSlNDTDIxb2JqZWN0Q29uc3RydWN0b3JTZWFsRVBOU185RXhlY1N0
YXRlRQotX19aTjNKU0M4SlNPYmplY3Q0c2VhbEVSTlNfMTJKU0dsb2JhbERhdGFFCi1fX1pOM0pT
QzlTdHJ1Y3R1cmU4aXNTZWFsZWRFUk5TXzEySlNHbG9iYWxEYXRhRQotX19aTjNKU0M5U3RydWN0
dXJlMTRzZWFsVHJhbnNpdGlvbkVSTlNfMTJKU0dsb2JhbERhdGFFUFMwXworX19aTjNKU0M4SlNP
YmplY3Q0c2VhbEVSTlNfMTJWTUUKK19fWk4zSlNDOVN0cnVjdHVyZThpc1NlYWxlZEVSTlNfMTJW
TUUKK19fWk4zSlNDOVN0cnVjdHVyZTE0c2VhbFRyYW5zaXRpb25FUk5TXzEyVk1FUFMwXwogX19a
TjNKU0NMMjNvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZUVQTlNfOUV4ZWNTdGF0ZUUKLV9fWk4zSlND
OEpTT2JqZWN0NmZyZWV6ZUVSTlNfMTJKU0dsb2JhbERhdGFFCi1fX1pOM0pTQzlTdHJ1Y3R1cmU4
aXNGcm96ZW5FUk5TXzEySlNHbG9iYWxEYXRhRQotX19aTjNKU0M5U3RydWN0dXJlMTZmcmVlemVU
cmFuc2l0aW9uRVJOU18xMkpTR2xvYmFsRGF0YUVQUzBfCitfX1pOM0pTQzhKU09iamVjdDZmcmVl
emVFUk5TXzEyVk1FCitfX1pOM0pTQzlTdHJ1Y3R1cmU4aXNGcm96ZW5FUk5TXzEyVk1FCitfX1pO
M0pTQzlTdHJ1Y3R1cmUxNmZyZWV6ZVRyYW5zaXRpb25FUk5TXzEyVk1FUFMwXwogX19aTjNKU0NM
MjVvYmplY3RDb25zdHJ1Y3RvcklzU2VhbGVkRVBOU185RXhlY1N0YXRlRQogX19aTjNKU0NMMjVv
YmplY3RDb25zdHJ1Y3RvcklzRnJvemVuRVBOU185RXhlY1N0YXRlRQogX19aTjNKU0NMMjlvYmpl
Y3RDb25zdHJ1Y3RvcklzRXh0ZW5zaWJsZUVQTlNfOUV4ZWNTdGF0ZUUKQEAgLTIzNjAsNyArMjM2
MCw3IEBAIF9fWk4zV1RGOENvbGxhdG9yMTVyZWxlYXNlQ29sbGF0b3JFdgogX19aTjNKU0MzSklU
MzBlbWl0X29wX2Vuc3VyZV9wcm9wZXJ0eV9leGlzdHNFUE5TXzExSW5zdHJ1Y3Rpb25FCiBfY3Rp
X29wX2Vuc3VyZV9wcm9wZXJ0eV9leGlzdHMKIF9fWk5LM0pTQzIwU3RyaWN0RXZhbEFjdGl2YXRp
b24xMnRvVGhpc09iamVjdEVQTlNfOUV4ZWNTdGF0ZUUKLV9fWk4zSlNDMTVJZGVudGlmaWVyQXJl
bmEyMW1ha2VOdW1lcmljSWRlbnRpZmllckVQTlNfMTJKU0dsb2JhbERhdGFFZAorX19aTjNKU0Mx
NUlkZW50aWZpZXJBcmVuYTIxbWFrZU51bWVyaWNJZGVudGlmaWVyRVBOU18xMlZNRWQKIF9fWk4z
SlNDNkpTQ2VsbDNwdXRFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFTlNfN0pTVmFs
dWVFUk5TXzE1UHV0UHJvcGVydHlTbG90RQogX19aTjNKU0M2SlNDZWxsM3B1dEVQTlNfOUV4ZWNT
dGF0ZUVqTlNfN0pTVmFsdWVFCiBfX1pOM1dURjE2Y29kZVBvaW50Q29tcGFyZUVSS05TXzZTdHJp
bmdFUzJfCkBAIC0yMzk0LDcgKzIzOTQsNyBAQCBfX1pOSzNKU0MxMVByb2ZpbGVOb2RlMjV0cmF2
ZXJzZU5leHROb2RlCiBfX1pOM0pTQzExUHJvZmlsZU5vZGUxM3N0b3BQcm9maWxpbmdFdgogX19a
TjNKU0MxMVByb2ZpbGVOb2RlMTFyZW1vdmVDaGlsZEVQUzBfCiBfX1pOM0pTQzExUHJvZmlsZU5v
ZGU4YWRkQ2hpbGRFTjNXVEYxMFBhc3NSZWZQdHJJUzBfRUUKLV9fWk4zSlNDOERlYnVnZ2VyMjNy
ZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc0VQTlNfMTJKU0dsb2JhbERhdGFFCitfX1pOM0pTQzhEZWJ1
Z2dlcjIzcmVjb21waWxlQWxsSlNGdW5jdGlvbnNFUE5TXzEyVk1FCiBfX1pOM1dURjlIYXNoVGFi
bGVJUE4zSlNDMThGdW5jdGlvbkV4ZWN1dGFibGVFUzNfTlNfMTdJZGVudGl0eUV4dHJhY3RvcklT
M19FRU5TXzdQdHJIYXNoSVMzX0VFTlNfMTBIYXNoVHJhaXRzSVMzX0VFUzlfRTZyZWhhc2hFaQog
X19aTjNKU0M3UHJvZmlsZUQwRXYKIF9fWk4zV1RGMTBSZWZDb3VudGVkSU4zSlNDMTFQcm9maWxl
Tm9kZUVFNWRlcmVmRXYKQEAgLTI0MDIsNyArMjQwMiw3IEBAIF9fWk4zSlNDOFByb2ZpbGVyMTF3
aWxsRXhlY3V0ZUVQTlNfOUV4ZWMKIF9fWk4zSlNDOFByb2ZpbGVyMTBkaWRFeGVjdXRlRVBOU185
RXhlY1N0YXRlRVJLTlNfN1VTdHJpbmdFaQogX19aTkszSlNDMTZQcm9maWxlR2VuZXJhdG9yNXRp
dGxlRXYKIF9fWk4zSlNDOFByb2ZpbGVyMTNzdG9wUHJvZmlsaW5nRVBOU18xNEpTR2xvYmFsT2Jq
ZWN0RQotX19aTjNKU0MzNGNyZWF0ZVRlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb25FUE5TXzEy
SlNHbG9iYWxEYXRhRQorX19aTjNKU0MzNGNyZWF0ZVRlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRp
b25FUE5TXzEyVk1FCiBfX1pOSzNKU0MyNFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcjEzZXhjZXB0
aW9uVHlwZUV2CiBfX1pOM0pTQzI0VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yRDFFdgogX19aTjNX
VEY1TXV0ZXg3dHJ5TG9ja0V2CkBAIC0yNDExLDcgKzI0MTEsNyBAQCBfX1pOM1dURjV5aWVsZEV2
CiBfX1pOM1dURjhDb2xsYXRvckMxRVBLYwogX19aTjNXVEY4Q29sbGF0b3IxOHNldE9yZGVyTG93
ZXJGaXJzdEViCiBfX1pOM0pTQzEwSlNPTk9iamVjdDI0Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJOU18xOFByb3BlcnR5RGVzY3JpcHRv
ckUKLV9fWk4zSlNDOVN0cnVjdHVyZTI3ZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0aW9uRVJOU18x
MkpTR2xvYmFsRGF0YUVSS05TXzEwSWRlbnRpZmllckUKK19fWk4zSlNDOVN0cnVjdHVyZTI3ZGVz
cGVjaWZ5RGljdGlvbmFyeUZ1bmN0aW9uRVJOU18xMlZNRVJLTlNfMTBJZGVudGlmaWVyRQogX19a
TjNKU0MxN09iamVjdENvbnN0cnVjdG9yMjRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JFUE5TXzlF
eGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUk5TXzE4UHJvcGVydHlEZXNjcmlwdG9yRQogX19a
TjNKU0MxNU9iamVjdFByb3RvdHlwZTI0Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRVBOU185RXhl
Y1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJOU18xOFByb3BlcnR5RGVzY3JpcHRvckUKIF9fWk4z
SlNDMTdTdHJpbmdDb25zdHJ1Y3RvcjI0Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRVBOU185RXhl
Y1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJOU18xOFByb3BlcnR5RGVzY3JpcHRvckUKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9LZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9LZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5CShy
ZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvS2V5d29yZExvb2t1cEdl
bmVyYXRvci5weQkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIGNsYXNzIFRyaWU6
CiAgICAgICAgICAgICBwcmludChzdHIgKyAiaWYgKCFpc0lkZW50UGFydChjb2RlWyVkXSkpIHsi
ICUgKGxlbihzZWxmLmZ1bGxQcmVmaXgpKSkKICAgICAgICAgICAgIHByaW50KHN0ciArICIgICAg
aW50ZXJuYWxTaGlmdDwlZD4oKTsiICUgbGVuKHNlbGYuZnVsbFByZWZpeCkpCiAgICAgICAgICAg
ICBwcmludChzdHIgKyAiICAgIGlmIChzaG91bGRDcmVhdGVJZGVudGlmaWVyKSIpCi0gICAgICAg
ICAgICBwcmludChzdHIgKyAoIiAgICAgICAgZGF0YS0+aWRlbnQgPSAmbV9nbG9iYWxEYXRhLT5w
cm9wZXJ0eU5hbWVzLT4lc0tleXdvcmQ7IiAlIHNlbGYuZnVsbFByZWZpeCkpCisgICAgICAgICAg
ICBwcmludChzdHIgKyAoIiAgICAgICAgZGF0YS0+aWRlbnQgPSAmbV92bS0+cHJvcGVydHlOYW1l
cy0+JXNLZXl3b3JkOyIgJSBzZWxmLmZ1bGxQcmVmaXgpKQogICAgICAgICAgICAgcHJpbnQoc3Ry
ICsgIiAgICByZXR1cm4gIiArIHNlbGYudmFsdWUgKyAiOyIpCiAgICAgICAgICAgICBwcmludChz
dHIgKyAifSIpCiAgICAgICAgIHJvb3RJbmRleCA9IGxlbihzZWxmLmZ1bGxQcmVmaXgpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTI2Niw3ICsyNjYsNyBA
QCBTT1VSQ0VTICs9IFwKICAgICBydW50aW1lL0pTRGF0ZU1hdGguY3BwIFwKICAgICBydW50aW1l
L0pTRnVuY3Rpb24uY3BwIFwKICAgICBydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAgXAotICAg
IHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcCBcCisgICAgcnVudGltZS9WTS5jcHAgXAogICAgIHJ1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIFwKICAgICBydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVu
Y3Rpb25zLmNwcCBcCiAgICAgcnVudGltZS9KU1Byb3h5LmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NiwxNyArMTc2LDE3IEBAIGxvbmcgU3RvcFdhdGNoOjpn
ZXRFbGFwc2VkTVMoKQogCiBjbGFzcyBHbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNHbG9iYWxPYmpl
Y3QgewogcHJpdmF0ZToKLSAgICBHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJl
Kik7CisgICAgR2xvYmFsT2JqZWN0KFZNJiwgU3RydWN0dXJlKik7CiAKIHB1YmxpYzoKICAgICB0
eXBlZGVmIEpTR2xvYmFsT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMgR2xvYmFsT2JqZWN0KiBj
cmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50cykKKyAgICBzdGF0aWMgR2xvYmFsT2JqZWN0KiBj
cmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVmVjdG9yPFN0cmluZz4m
IGFyZ3VtZW50cykKICAgICB7Ci0gICAgICAgIEdsb2JhbE9iamVjdCogb2JqZWN0ID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8R2xvYmFsT2JqZWN0PihnbG9iYWxEYXRhLmhlYXApKSBHbG9i
YWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKLSAgICAgICAgb2JqZWN0LT5maW5pc2hD
cmVhdGlvbihnbG9iYWxEYXRhLCBhcmd1bWVudHMpOwotICAgICAgICBnbG9iYWxEYXRhLmhlYXAu
YWRkRmluYWxpemVyKG9iamVjdCwgZGVzdHJveSk7Ci0gICAgICAgIG9iamVjdC0+c2V0R2xvYmFs
VGhpcyhnbG9iYWxEYXRhLCBKU1Byb3h5OjpjcmVhdGUoZ2xvYmFsRGF0YSwgSlNQcm94eTo6Y3Jl
YXRlU3RydWN0dXJlKGdsb2JhbERhdGEsIG9iamVjdCwgb2JqZWN0LT5wcm90b3R5cGUoKSksIG9i
amVjdCkpOworICAgICAgICBHbG9iYWxPYmplY3QqIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEdsb2JhbE9iamVjdD4odm0uaGVhcCkpIEdsb2JhbE9iamVjdCh2bSwgc3RydWN0
dXJlKTsKKyAgICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSwgYXJndW1lbnRzKTsKKyAg
ICAgICAgdm0uaGVhcC5hZGRGaW5hbGl6ZXIob2JqZWN0LCBkZXN0cm95KTsKKyAgICAgICAgb2Jq
ZWN0LT5zZXRHbG9iYWxUaGlzKHZtLCBKU1Byb3h5OjpjcmVhdGUodm0sIEpTUHJveHk6OmNyZWF0
ZVN0cnVjdHVyZSh2bSwgb2JqZWN0LCBvYmplY3QtPnByb3RvdHlwZSgpKSwgb2JqZWN0KSk7CiAg
ICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgfQogCkBAIC0xOTUsNjUgKzE5NSw2NSBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAgICAgc3RhdGljIGNvbnN0
IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIHNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGU7CiAKLSAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCAwLCBwcm90b3R5cGUsIFR5cGVJbmZvKEdsb2Jh
bE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgMCwgcHJvdG90eXBlLCBUeXBlSW5mbyhHbG9iYWxPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogICAgIHN0YXRpYyBib29s
IGphdmFTY3JpcHRFeHBlcmltZW50c0VuYWJsZWQoY29uc3QgSlNHbG9iYWxPYmplY3QqKSB7IHJl
dHVybiB0cnVlOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50cykKKyAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFyZ3Vt
ZW50cykKICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwor
ICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIAotICAgICAgICBhZGRG
dW5jdGlvbihnbG9iYWxEYXRhLCAiZGVidWciLCBmdW5jdGlvbkRlYnVnLCAxKTsKLSAgICAgICAg
YWRkRnVuY3Rpb24oZ2xvYmFsRGF0YSwgImRlc2NyaWJlIiwgZnVuY3Rpb25EZXNjcmliZSwgMSk7
Ci0gICAgICAgIGFkZEZ1bmN0aW9uKGdsb2JhbERhdGEsICJwcmludCIsIGZ1bmN0aW9uUHJpbnQs
IDEpOwotICAgICAgICBhZGRGdW5jdGlvbihnbG9iYWxEYXRhLCAicXVpdCIsIGZ1bmN0aW9uUXVp
dCwgMCk7Ci0gICAgICAgIGFkZEZ1bmN0aW9uKGdsb2JhbERhdGEsICJnYyIsIGZ1bmN0aW9uR0Ms
IDApOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgImRlYnVnIiwgZnVuY3Rpb25EZWJ1ZywgMSk7
CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiZGVzY3JpYmUiLCBmdW5jdGlvbkRlc2NyaWJlLCAx
KTsKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJwcmludCIsIGZ1bmN0aW9uUHJpbnQsIDEpOwor
ICAgICAgICBhZGRGdW5jdGlvbih2bSwgInF1aXQiLCBmdW5jdGlvblF1aXQsIDApOworICAgICAg
ICBhZGRGdW5jdGlvbih2bSwgImdjIiwgZnVuY3Rpb25HQywgMCk7CiAjaWZuZGVmIE5ERUJVRwot
ICAgICAgICBhZGRGdW5jdGlvbihnbG9iYWxEYXRhLCAiZHVtcENhbGxGcmFtZSIsIGZ1bmN0aW9u
RHVtcENhbGxGcmFtZSwgMCk7Ci0gICAgICAgIGFkZEZ1bmN0aW9uKGdsb2JhbERhdGEsICJyZWxl
YXNlRXhlY3V0YWJsZU1lbW9yeSIsIGZ1bmN0aW9uUmVsZWFzZUV4ZWN1dGFibGVNZW1vcnksIDAp
OworICAgICAgICBhZGRGdW5jdGlvbih2bSwgImR1bXBDYWxsRnJhbWUiLCBmdW5jdGlvbkR1bXBD
YWxsRnJhbWUsIDApOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgInJlbGVhc2VFeGVjdXRhYmxl
TWVtb3J5IiwgZnVuY3Rpb25SZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSwgMCk7CiAjZW5kaWYKLSAg
ICAgICAgYWRkRnVuY3Rpb24oZ2xvYmFsRGF0YSwgInZlcnNpb24iLCBmdW5jdGlvblZlcnNpb24s
IDEpOwotICAgICAgICBhZGRGdW5jdGlvbihnbG9iYWxEYXRhLCAicnVuIiwgZnVuY3Rpb25SdW4s
IDEpOwotICAgICAgICBhZGRGdW5jdGlvbihnbG9iYWxEYXRhLCAibG9hZCIsIGZ1bmN0aW9uTG9h
ZCwgMSk7Ci0gICAgICAgIGFkZEZ1bmN0aW9uKGdsb2JhbERhdGEsICJjaGVja1N5bnRheCIsIGZ1
bmN0aW9uQ2hlY2tTeW50YXgsIDEpOwotICAgICAgICBhZGRGdW5jdGlvbihnbG9iYWxEYXRhLCAi
anNjU3RhY2siLCBmdW5jdGlvbkpTQ1N0YWNrLCAxKTsKLSAgICAgICAgYWRkRnVuY3Rpb24oZ2xv
YmFsRGF0YSwgInJlYWRsaW5lIiwgZnVuY3Rpb25SZWFkbGluZSwgMCk7Ci0gICAgICAgIGFkZEZ1
bmN0aW9uKGdsb2JhbERhdGEsICJwcmVjaXNlVGltZSIsIGZ1bmN0aW9uUHJlY2lzZVRpbWUsIDAp
OworICAgICAgICBhZGRGdW5jdGlvbih2bSwgInZlcnNpb24iLCBmdW5jdGlvblZlcnNpb24sIDEp
OworICAgICAgICBhZGRGdW5jdGlvbih2bSwgInJ1biIsIGZ1bmN0aW9uUnVuLCAxKTsKKyAgICAg
ICAgYWRkRnVuY3Rpb24odm0sICJsb2FkIiwgZnVuY3Rpb25Mb2FkLCAxKTsKKyAgICAgICAgYWRk
RnVuY3Rpb24odm0sICJjaGVja1N5bnRheCIsIGZ1bmN0aW9uQ2hlY2tTeW50YXgsIDEpOworICAg
ICAgICBhZGRGdW5jdGlvbih2bSwgImpzY1N0YWNrIiwgZnVuY3Rpb25KU0NTdGFjaywgMSk7Cisg
ICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAicmVhZGxpbmUiLCBmdW5jdGlvblJlYWRsaW5lLCAwKTsK
KyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJwcmVjaXNlVGltZSIsIGZ1bmN0aW9uUHJlY2lzZVRp
bWUsIDApOwogI2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykKLSAgICAgICAgYWRkRnVuY3Rpb24o
Z2xvYmFsRGF0YSwgInNldFNhbXBsaW5nRmxhZ3MiLCBmdW5jdGlvblNldFNhbXBsaW5nRmxhZ3Ms
IDEpOwotICAgICAgICBhZGRGdW5jdGlvbihnbG9iYWxEYXRhLCAiY2xlYXJTYW1wbGluZ0ZsYWdz
IiwgZnVuY3Rpb25DbGVhclNhbXBsaW5nRmxhZ3MsIDEpOworICAgICAgICBhZGRGdW5jdGlvbih2
bSwgInNldFNhbXBsaW5nRmxhZ3MiLCBmdW5jdGlvblNldFNhbXBsaW5nRmxhZ3MsIDEpOworICAg
ICAgICBhZGRGdW5jdGlvbih2bSwgImNsZWFyU2FtcGxpbmdGbGFncyIsIGZ1bmN0aW9uQ2xlYXJT
YW1wbGluZ0ZsYWdzLCAxKTsKICNlbmRpZgogICAgICAgICAKLSAgICAgICAgYWRkQ29uc3RydWN0
YWJsZUZ1bmN0aW9uKGdsb2JhbERhdGEsICJVaW50OEFycmF5IiwgY29uc3RydWN0SlNVaW50OEFy
cmF5LCAxKTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKGdsb2JhbERhdGEsICJV
aW50OENsYW1wZWRBcnJheSIsIGNvbnN0cnVjdEpTVWludDhDbGFtcGVkQXJyYXksIDEpOwotICAg
ICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24oZ2xvYmFsRGF0YSwgIlVpbnQxNkFycmF5Iiwg
Y29uc3RydWN0SlNVaW50MTZBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5j
dGlvbihnbG9iYWxEYXRhLCAiVWludDMyQXJyYXkiLCBjb25zdHJ1Y3RKU1VpbnQzMkFycmF5LCAx
KTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKGdsb2JhbERhdGEsICJJbnQ4QXJy
YXkiLCBjb25zdHJ1Y3RKU0ludDhBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVG
dW5jdGlvbihnbG9iYWxEYXRhLCAiSW50MTZBcnJheSIsIGNvbnN0cnVjdEpTSW50MTZBcnJheSwg
MSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbihnbG9iYWxEYXRhLCAiSW50MzJB
cnJheSIsIGNvbnN0cnVjdEpTSW50MzJBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFi
bGVGdW5jdGlvbihnbG9iYWxEYXRhLCAiRmxvYXQzMkFycmF5IiwgY29uc3RydWN0SlNGbG9hdDMy
QXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24oZ2xvYmFsRGF0YSwg
IkZsb2F0NjRBcnJheSIsIGNvbnN0cnVjdEpTRmxvYXQ2NEFycmF5LCAxKTsKKyAgICAgICAgYWRk
Q29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiVWludDhBcnJheSIsIGNvbnN0cnVjdEpTVWludDhB
cnJheSwgMSk7CisgICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIlVpbnQ4Q2xh
bXBlZEFycmF5IiwgY29uc3RydWN0SlNVaW50OENsYW1wZWRBcnJheSwgMSk7CisgICAgICAgIGFk
ZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIlVpbnQxNkFycmF5IiwgY29uc3RydWN0SlNVaW50
MTZBcnJheSwgMSk7CisgICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIlVpbnQz
MkFycmF5IiwgY29uc3RydWN0SlNVaW50MzJBcnJheSwgMSk7CisgICAgICAgIGFkZENvbnN0cnVj
dGFibGVGdW5jdGlvbih2bSwgIkludDhBcnJheSIsIGNvbnN0cnVjdEpTSW50OEFycmF5LCAxKTsK
KyAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiSW50MTZBcnJheSIsIGNvbnN0
cnVjdEpTSW50MTZBcnJheSwgMSk7CisgICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2
bSwgIkludDMyQXJyYXkiLCBjb25zdHJ1Y3RKU0ludDMyQXJyYXksIDEpOworICAgICAgICBhZGRD
b25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJGbG9hdDMyQXJyYXkiLCBjb25zdHJ1Y3RKU0Zsb2F0
MzJBcnJheSwgMSk7CisgICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIkZsb2F0
NjRBcnJheSIsIGNvbnN0cnVjdEpTRmxvYXQ2NEFycmF5LCAxKTsKIAogICAgICAgICBKU0FycmF5
KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZ2xvYmFsRXhlYygpLCAwKTsKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAg
ICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsRXhlYygpLCBpLCBqc1N0cmluZyhnbG9iYWxF
eGVjKCksIGFyZ3VtZW50c1tpXSkpOwotICAgICAgICBwdXREaXJlY3QoZ2xvYmFsRGF0YSwgSWRl
bnRpZmllcihnbG9iYWxFeGVjKCksICJhcmd1bWVudHMiKSwgYXJyYXkpOworICAgICAgICBwdXRE
aXJlY3Qodm0sIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAiYXJndW1lbnRzIiksIGFycmF5KTsK
ICAgICB9CiAKLSAgICB2b2lkIGFkZEZ1bmN0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
Y29uc3QgY2hhciogbmFtZSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3Vt
ZW50cykKKyAgICB2b2lkIGFkZEZ1bmN0aW9uKFZNJiB2bSwgY29uc3QgY2hhciogbmFtZSwgTmF0
aXZlRnVuY3Rpb24gZnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cykKICAgICB7CiAgICAgICAg
IElkZW50aWZpZXIgaWRlbnRpZmllcihnbG9iYWxFeGVjKCksIG5hbWUpOwotICAgICAgICBwdXRE
aXJlY3QoZ2xvYmFsRGF0YSwgaWRlbnRpZmllciwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4
ZWMoKSwgdGhpcywgYXJndW1lbnRzLCBpZGVudGlmaWVyLnN0cmluZygpLCBmdW5jdGlvbikpOwor
ICAgICAgICBwdXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9i
YWxFeGVjKCksIHRoaXMsIGFyZ3VtZW50cywgaWRlbnRpZmllci5zdHJpbmcoKSwgZnVuY3Rpb24p
KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24oSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5j
dGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKQorICAgIHZvaWQgYWRkQ29uc3RydWN0YWJsZUZ1bmN0
aW9uKFZNJiB2bSwgY29uc3QgY2hhciogbmFtZSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIHVu
c2lnbmVkIGFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllcihn
bG9iYWxFeGVjKCksIG5hbWUpOwotICAgICAgICBwdXREaXJlY3QoZ2xvYmFsRGF0YSwgaWRlbnRp
ZmllciwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgYXJndW1lbnRzLCBp
ZGVudGlmaWVyLnN0cmluZygpLCBmdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGZ1bmN0aW9uKSk7Cisg
ICAgICAgIHB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2Jh
bEV4ZWMoKSwgdGhpcywgYXJndW1lbnRzLCBpZGVudGlmaWVyLnN0cmluZygpLCBmdW5jdGlvbiwg
Tm9JbnRyaW5zaWMsIGZ1bmN0aW9uKSk7CiAgICAgfQogfTsKIApAQCAtMjYzLDggKzI2Myw4IEBA
IGNvbnN0IENsYXNzSW5mbyBHbG9iYWxPYmplY3Q6OnNfaW5mbyA9IHsKIGNvbnN0IEdsb2JhbE9i
amVjdE1ldGhvZFRhYmxlIEdsb2JhbE9iamVjdDo6c19nbG9iYWxPYmplY3RNZXRob2RUYWJsZSA9
IHsgJmFsbG93c0FjY2Vzc0Zyb20sICZzdXBwb3J0c1Byb2ZpbGluZywgJnN1cHBvcnRzUmljaFNv
dXJjZUluZm8sICZzaG91bGRJbnRlcnJ1cHRTY3JpcHQsICZqYXZhU2NyaXB0RXhwZXJpbWVudHNF
bmFibGVkIH07CiAKIAotR2xvYmFsT2JqZWN0OjpHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IEpTR2xvYmFsT2JqZWN0KGds
b2JhbERhdGEsIHN0cnVjdHVyZSwgJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCitHbG9iYWxP
YmplY3Q6Okdsb2JhbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDog
SlNHbG9iYWxPYmplY3Qodm0sIHN0cnVjdHVyZSwgJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUp
CiB7CiB9CiAKQEAgLTMwNSw3ICszMDUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uUHJpCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHVtcENh
bGxGcmFtZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgaWYgKCFleGVjLT5jYWxsZXJGcmFtZSgp
LT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpKQotICAgICAgICBleGVjLT5nbG9iYWxEYXRhKCkuaW50
ZXJwcmV0ZXItPmR1bXBDYWxsRnJhbWUoZXhlYy0+Y2FsbGVyRnJhbWUoKSk7CisgICAgICAgIGV4
ZWMtPnZtKCkuaW50ZXJwcmV0ZXItPmR1bXBDYWxsRnJhbWUoZXhlYy0+Y2FsbGVyRnJhbWUoKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KICNlbmRpZgpA
QCAtMzI4LDcgKzMyOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25K
U0MKICAgICB0cmFjZS5hcHBlbmRMaXRlcmFsKCItLT4gU3RhY2sgdHJhY2U6XG4iKTsKIAogICAg
IFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlOwotICAgIEludGVycHJldGVyOjpnZXRTdGFj
a1RyYWNlKCZleGVjLT5nbG9iYWxEYXRhKCksIHN0YWNrVHJhY2UpOworICAgIEludGVycHJldGVy
OjpnZXRTdGFja1RyYWNlKCZleGVjLT52bSgpLCBzdGFja1RyYWNlKTsKICAgICBpbnQgaSA9IDA7
CiAKICAgICBmb3IgKFZlY3RvcjxTdGFja0ZyYW1lPjo6aXRlcmF0b3IgaXRlciA9IHN0YWNrVHJh
Y2UuYmVnaW4oKTsgaXRlciA8IHN0YWNrVHJhY2UuZW5kKCk7IGl0ZXIrKykgewpAQCAtMzUxLDcg
KzM1MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQygKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZWxlYXNlRXhlY3V0YWJsZU1lbW9yeShF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgZXhl
Yy0+Z2xvYmFsRGF0YSgpLnJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KCk7CisgICAgZXhlYy0+dm0o
KS5yZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiB9CiAjZW5kaWYKQEAgLTM3MCw3ICszNzAsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUnVuCiAgICAgaWYgKCFmaWxsQnVmZmVyV2l0aENv
bnRlbnRzT2ZGaWxlKGZpbGVOYW1lLCBzY3JpcHQpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93RXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgIkNvdWxkIG5vdCBvcGVu
IGZpbGUuIikpKTsKIAotICAgIEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gR2xvYmFsT2Jq
ZWN0OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT5nbG9iYWxEYXRhKCksIGpzTnVsbCgpKSwgVmVjdG9yPFN0cmluZz4oKSk7Cisg
ICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBHbG9iYWxPYmplY3Q6OmNyZWF0ZShleGVj
LT52bSgpLCBHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCBqc051bGwo
KSksIFZlY3RvcjxTdHJpbmc+KCkpOwogCiAgICAgSlNWYWx1ZSBleGNlcHRpb247CiAgICAgU3Rv
cFdhdGNoIHN0b3BXYXRjaDsKQEAgLTUyMyw3ICs1MjMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiAgICAgUUNvcmVBcHBsaWNhdGlvbiBhcHAoYXJnYywgYXJndik7CiAjZW5k
aWYKIAotICAgIC8vIEluaXRpYWxpemUgSlNDIGJlZm9yZSBnZXR0aW5nIEpTR2xvYmFsRGF0YS4K
KyAgICAvLyBJbml0aWFsaXplIEpTQyBiZWZvcmUgZ2V0dGluZyBWTS4KICNpZiBFTkFCTEUoU0FN
UExJTkdfUkVHSU9OUykKICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAjZW5kaWYK
QEAgLTU0OSw3ICs1NDksNyBAQCBzdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmpl
Y3QqCiAgICAgaWYgKGR1bXApCiAgICAgICAgIEpTQzo6T3B0aW9uczo6ZHVtcEdlbmVyYXRlZEJ5
dGVjb2RlcygpID0gdHJ1ZTsKIAotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRGF0YSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
IAogI2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykKICAgICBTYW1wbGluZ0ZsYWdzOjpzdGFydCgp
OwpAQCAtNTY3LDcgKzU2Nyw3IEBAIHN0YXRpYyBib29sIHJ1bldpdGhTY3JpcHRzKEdsb2JhbE9i
amVjdCoKICAgICAgICAgICAgIGZpbGVOYW1lID0gIltDb21tYW5kIExpbmVdIjsKICAgICAgICAg
fQogCi0gICAgICAgIGdsb2JhbERhdGEuc3RhcnRTYW1wbGluZygpOworICAgICAgICB2bS5zdGFy
dFNhbXBsaW5nKCk7CiAKICAgICAgICAgSlNWYWx1ZSBldmFsdWF0aW9uRXhjZXB0aW9uOwogICAg
ICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCksIGpzY1NvdXJjZShzY3JpcHQsIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCAmZXZhbHVhdGlv
bkV4Y2VwdGlvbik7CkBAIC01ODIsNyArNTgyLDcgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlw
dHMoR2xvYmFsT2JqZWN0KgogICAgICAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIHN0YWNrVmFs
dWUudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLT52YWx1ZShnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBn
bG9iYWxEYXRhLnN0b3BTYW1wbGluZygpOworICAgICAgICB2bS5zdG9wU2FtcGxpbmcoKTsKICAg
ICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCktPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAg
fQogCkBAIC01OTIsMTIgKzU5MiwxMiBAQCBzdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9i
YWxPYmplY3QqCiAjaWYgRU5BQkxFKFNBTVBMSU5HX1JFR0lPTlMpCiAgICAgU2FtcGxpbmdSZWdp
b246OmR1bXAoKTsKICNlbmRpZgotICAgIGdsb2JhbERhdGEuZHVtcFNhbXBsZURhdGEoZ2xvYmFs
T2JqZWN0LT5nbG9iYWxFeGVjKCkpOworICAgIHZtLmR1bXBTYW1wbGVEYXRhKGdsb2JhbE9iamVj
dC0+Z2xvYmFsRXhlYygpKTsKICNpZiBFTkFCTEUoU0FNUExJTkdfQ09VTlRFUlMpCiAgICAgQWJz
dHJhY3RTYW1wbGluZ0NvdW50ZXI6OmR1bXAoKTsKICNlbmRpZgogI2lmIEVOQUJMRShSRUdFWFBf
VFJBQ0lORykKLSAgICBnbG9iYWxEYXRhLmR1bXBSZWdFeHBUcmFjZSgpOworICAgIHZtLmR1bXBS
ZWdFeHBUcmFjZSgpOwogI2VuZGlmCiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CkBAIC03NTgsMTcg
Kzc1OCwxNyBAQCB2b2lkIENvbW1hbmRMaW5lOjpwYXJzZUFyZ3VtZW50cyhpbnQgYXJnCiAKIGlu
dCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKLSAgICAvLyBOb3RlIHRoYXQgdGhl
IG9wdGlvbnMgcGFyc2luZyBjYW4gYWZmZWN0IEpTR2xvYmFsRGF0YSBjcmVhdGlvbiwgYW5kIHRo
dXMKKyAgICAvLyBOb3RlIHRoYXQgdGhlIG9wdGlvbnMgcGFyc2luZyBjYW4gYWZmZWN0IFZNIGNy
ZWF0aW9uLCBhbmQgdGh1cwogICAgIC8vIGNvbWVzIGZpcnN0LgogICAgIENvbW1hbmRMaW5lIG9w
dGlvbnMoYXJnYywgYXJndik7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gSlNHbG9i
YWxEYXRhOjpjcmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7Ci0gICAgQVBJRW50cnlTaGltIHNo
aW0oZ2xvYmFsRGF0YSk7CisgICAgVk0qIHZtID0gVk06OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtS
ZWYoKTsKKyAgICBBUElFbnRyeVNoaW0gc2hpbSh2bSk7CiAgICAgaW50IHJlc3VsdDsKIAotICAg
IGlmIChvcHRpb25zLm1fcHJvZmlsZSAmJiAhZ2xvYmFsRGF0YS0+bV9wZXJCeXRlY29kZVByb2Zp
bGVyKQotICAgICAgICBnbG9iYWxEYXRhLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgPSBhZG9wdFB0
cihuZXcgUHJvZmlsZXI6OkRhdGFiYXNlKCpnbG9iYWxEYXRhKSk7CisgICAgaWYgKG9wdGlvbnMu
bV9wcm9maWxlICYmICF2bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKQorICAgICAgICB2bS0+bV9w
ZXJCeXRlY29kZVByb2ZpbGVyID0gYWRvcHRQdHIobmV3IFByb2ZpbGVyOjpEYXRhYmFzZSgqdm0p
KTsKICAgICAKLSAgICBHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEdsb2JhbE9iamVjdDo6
Y3JlYXRlKCpnbG9iYWxEYXRhLCBHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgqZ2xvYmFs
RGF0YSwganNOdWxsKCkpLCBvcHRpb25zLm1fYXJndW1lbnRzKTsKKyAgICBHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IEdsb2JhbE9iamVjdDo6Y3JlYXRlKCp2bSwgR2xvYmFsT2JqZWN0Ojpj
cmVhdGVTdHJ1Y3R1cmUoKnZtLCBqc051bGwoKSksIG9wdGlvbnMubV9hcmd1bWVudHMpOwogICAg
IGJvb2wgc3VjY2VzcyA9IHJ1bldpdGhTY3JpcHRzKGdsb2JhbE9iamVjdCwgb3B0aW9ucy5tX3Nj
cmlwdHMsIG9wdGlvbnMubV9kdW1wKTsKICAgICBpZiAob3B0aW9ucy5tX2ludGVyYWN0aXZlICYm
IHN1Y2Nlc3MpCiAgICAgICAgIHJ1bkludGVyYWN0aXZlKGdsb2JhbE9iamVjdCk7CkBAIC03Nzks
NyArNzc5LDcgQEAgaW50IGpzY21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgICAgICBw
cmludGYoImpzYyBleGl0aW5nICVkXG4iLCByZXN1bHQpOwogICAgIAogICAgIGlmIChvcHRpb25z
Lm1fcHJvZmlsZSkgewotICAgICAgICBpZiAoIWdsb2JhbERhdGEtPm1fcGVyQnl0ZWNvZGVQcm9m
aWxlci0+c2F2ZShvcHRpb25zLm1fcHJvZmlsZXJPdXRwdXQudXRmOCgpLmRhdGEoKSkpCisgICAg
ICAgIGlmICghdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+c2F2ZShvcHRpb25zLm1fcHJvZmls
ZXJPdXRwdXQudXRmOCgpLmRhdGEoKSkpCiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNv
dWxkIG5vdCBzYXZlIHByb2ZpbGVyIG91dHB1dC5cbiIpOwogICAgIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RSZWdFeHAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0UmVnRXhwLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RSZWdFeHAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsMTUgKzEx
MCwxNSBAQCBzdHJ1Y3QgUmVnRXhwVGVzdCB7CiAKIGNsYXNzIEdsb2JhbE9iamVjdCA6IHB1Ymxp
YyBKU0dsb2JhbE9iamVjdCB7CiBwcml2YXRlOgotICAgIEdsb2JhbE9iamVjdChKU0dsb2JhbERh
dGEmLCBTdHJ1Y3R1cmUqLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJndW1lbnRzKTsKKyAgICBH
bG9iYWxPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJndW1l
bnRzKTsKIAogcHVibGljOgogICAgIHR5cGVkZWYgSlNHbG9iYWxPYmplY3QgQmFzZTsKIAotICAg
IHN0YXRpYyBHbG9iYWxPYmplY3QqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJndW1lbnRzKQorICAg
IHN0YXRpYyBHbG9iYWxPYmplY3QqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJndW1lbnRzKQogICAgIHsKLSAgICAgICAgR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxHbG9iYWxP
YmplY3Q+KGdsb2JhbERhdGEuaGVhcCkpIEdsb2JhbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUsIGFyZ3VtZW50cyk7Ci0gICAgICAgIGdsb2JhbERhdGEuaGVhcC5hZGRGaW5hbGl6ZXIoZ2xv
YmFsT2JqZWN0LCBkZXN0cm95KTsKKyAgICAgICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxHbG9iYWxPYmplY3Q+KHZtLmhlYXApKSBHbG9i
YWxPYmplY3Qodm0sIHN0cnVjdHVyZSwgYXJndW1lbnRzKTsKKyAgICAgICAgdm0uaGVhcC5hZGRG
aW5hbGl6ZXIoZ2xvYmFsT2JqZWN0LCBkZXN0cm95KTsKICAgICAgICAgcmV0dXJuIGdsb2JhbE9i
amVjdDsKICAgICB9CiAKQEAgLTEyNiwxNSArMTI2LDE1IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3RvciA9IGZhbHNlOwogCi0gICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBw
cm90b3R5cGUpCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUoZ2xvYmFsRGF0YSwgMCwgcHJvdG90eXBlLCBUeXBlSW5mbyhHbG9iYWxPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIDAsIHByb3RvdHlwZSwgVHlwZUluZm8oR2xvYmFsT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFy
Z3VtZW50cykKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGFyZ3VtZW50cykKICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGds
b2JhbERhdGEpOworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIFVO
VVNFRF9QQVJBTShhcmd1bWVudHMpOwogICAgIH0KIH07CkBAIC0xNDMsMTAgKzE0MywxMCBAQCBD
T01QSUxFX0FTU0VSVCghSXNJbnRlZ2VyPEdsb2JhbE9iamVjdD46CiAKIGNvbnN0IENsYXNzSW5m
byBHbG9iYWxPYmplY3Q6OnNfaW5mbyA9IHsgImdsb2JhbCIsICZKU0dsb2JhbE9iamVjdDo6c19p
bmZvLCAwLCBFeGVjU3RhdGU6Omdsb2JhbE9iamVjdFRhYmxlLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEdsb2JhbE9iamVjdCkgfTsKIAotR2xvYmFsT2JqZWN0OjpHbG9iYWxPYmplY3QoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGFyZ3VtZW50cykKLSAgICA6IEpTR2xvYmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSkKK0dsb2JhbE9iamVjdDo6R2xvYmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhcmd1bWVudHMpCisgICAgOiBKU0dsb2JhbE9iamVj
dCh2bSwgc3RydWN0dXJlKQogewotICAgIGZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIGFyZ3Vt
ZW50cyk7CisgICAgZmluaXNoQ3JlYXRpb24odm0sIGFyZ3VtZW50cyk7CiB9CiAKIC8vIFVzZSBT
RUggZm9yIFJlbGVhc2UgYnVpbGRzIG9ubHkgdG8gZ2V0IHJpZCBvZiB0aGUgY3Jhc2ggcmVwb3J0
IGRpYWxvZwpAQCAtMTkwLDcgKzE5MCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJn
dikKICAgICBRQ29yZUFwcGxpY2F0aW9uIGFwcChhcmdjLCBhcmd2KTsKICNlbmRpZgogCi0gICAg
Ly8gSW5pdGlhbGl6ZSBKU0MgYmVmb3JlIGdldHRpbmcgSlNHbG9iYWxEYXRhLgorICAgIC8vIElu
aXRpYWxpemUgSlNDIGJlZm9yZSBnZXR0aW5nIFZNLgogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVh
ZGluZygpOwogCiAgICAgLy8gV2UgY2FuJ3QgdXNlIGRlc3RydWN0b3JzIGluIHRoZSBmb2xsb3dp
bmcgY29kZSBiZWNhdXNlIGl0IHVzZXMgV2luZG93cwpAQCAtMjAyLDEyICsyMDIsMTIgQEAgaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIHJldHVybiByZXM7CiB9CiAKLXN0YXRp
YyBib29sIHRlc3RPbmVSZWdFeHAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBSZWdFeHAqIHJl
Z2V4cCwgUmVnRXhwVGVzdCogcmVnRXhwVGVzdCwgYm9vbCB2ZXJib3NlLCB1bnNpZ25lZCBpbnQg
bGluZU51bWJlcikKK3N0YXRpYyBib29sIHRlc3RPbmVSZWdFeHAoVk0mIHZtLCBSZWdFeHAqIHJl
Z2V4cCwgUmVnRXhwVGVzdCogcmVnRXhwVGVzdCwgYm9vbCB2ZXJib3NlLCB1bnNpZ25lZCBpbnQg
bGluZU51bWJlcikKIHsKICAgICBib29sIHJlc3VsdCA9IHRydWU7CiAgICAgVmVjdG9yPGludCwg
MzI+IG91dFZlY3RvcjsKICAgICBvdXRWZWN0b3IucmVzaXplKHJlZ0V4cFRlc3QtPmV4cGVjdFZl
Y3Rvci5zaXplKCkpOwotICAgIGludCBtYXRjaFJlc3VsdCA9IHJlZ2V4cC0+bWF0Y2goZ2xvYmFs
RGF0YSwgcmVnRXhwVGVzdC0+c3ViamVjdCwgcmVnRXhwVGVzdC0+b2Zmc2V0LCBvdXRWZWN0b3Ip
OworICAgIGludCBtYXRjaFJlc3VsdCA9IHJlZ2V4cC0+bWF0Y2godm0sIHJlZ0V4cFRlc3QtPnN1
YmplY3QsIHJlZ0V4cFRlc3QtPm9mZnNldCwgb3V0VmVjdG9yKTsKIAogICAgIGlmIChtYXRjaFJl
c3VsdCAhPSByZWdFeHBUZXN0LT5yZXN1bHQpIHsKICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CkBA
IC0zMTAsNyArMzEwLDcgQEAgc3RhdGljIGludCBzY2FuU3RyaW5nKGNoYXIqIGJ1ZmZlciwgaW50
IAogICAgIHJldHVybiAtMTsKIH0KIAotc3RhdGljIFJlZ0V4cCogcGFyc2VSZWdFeHBMaW5lKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY2hhciogbGluZSwgaW50IGxpbmVMZW5ndGgpCitzdGF0
aWMgUmVnRXhwKiBwYXJzZVJlZ0V4cExpbmUoVk0mIHZtLCBjaGFyKiBsaW5lLCBpbnQgbGluZUxl
bmd0aCkKIHsKICAgICBTdHJpbmdCdWlsZGVyIHBhdHRlcm47CiAgICAgCkBAIC0zMjQsNyArMzI0
LDcgQEAgc3RhdGljIFJlZ0V4cCogcGFyc2VSZWdFeHBMaW5lKEpTR2xvYmFsRAogCiAgICAgKytp
OwogCi0gICAgcmV0dXJuIFJlZ0V4cDo6Y3JlYXRlKGdsb2JhbERhdGEsIHBhdHRlcm4udG9TdHJp
bmcoKSwgcmVnRXhwRmxhZ3MobGluZSArIGkpKTsKKyAgICByZXR1cm4gUmVnRXhwOjpjcmVhdGUo
dm0sIHBhdHRlcm4udG9TdHJpbmcoKSwgcmVnRXhwRmxhZ3MobGluZSArIGkpKTsKIH0KIAogc3Rh
dGljIFJlZ0V4cFRlc3QqIHBhcnNlVGVzdExpbmUoY2hhciogbGluZSwgaW50IGxpbmVMZW5ndGgp
CkBAIC00MDgsNyArNDA4LDcgQEAgc3RhdGljIGJvb2wgcnVuRnJvbUZpbGVzKEdsb2JhbE9iamVj
dCogZwogICAgIHVuc2lnbmVkIGZhaWx1cmVzID0gMDsKICAgICBjaGFyKiBsaW5lQnVmZmVyID0g
bmV3IGNoYXJbTWF4TGluZUxlbmd0aCArIDFdOwogCi0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogCiAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGZpbGVzLnNpemUoKTsgaSsrKSB7CkBAIC00MzYsMTMgKzQzNiwxMyBAQCBzdGF0
aWMgYm9vbCBydW5Gcm9tRmlsZXMoR2xvYmFsT2JqZWN0KiBnCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgICAgIGlmIChsaW5lUHRyWzBdID09ICcvJykgewotICAgICAgICAg
ICAgICAgIHJlZ2V4cCA9IHBhcnNlUmVnRXhwTGluZShnbG9iYWxEYXRhLCBsaW5lUHRyLCBsaW5l
TGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWdleHAgPSBwYXJzZVJlZ0V4cExpbmUodm0sIGxp
bmVQdHIsIGxpbmVMZW5ndGgpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChsaW5lUHRyWzBdID09
ICcgJykgewogICAgICAgICAgICAgICAgIFJlZ0V4cFRlc3QqIHJlZ0V4cFRlc3QgPSBwYXJzZVRl
c3RMaW5lKGxpbmVQdHIsIGxpbmVMZW5ndGgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGlmIChyZWdleHAgJiYgcmVnRXhwVGVzdCkgewogICAgICAgICAgICAgICAgICAgICAr
K3Rlc3RzOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXRlc3RPbmVSZWdFeHAoZ2xvYmFsRGF0
YSwgcmVnZXhwLCByZWdFeHBUZXN0LCB2ZXJib3NlLCBsaW5lTnVtYmVyKSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoIXRlc3RPbmVSZWdFeHAodm0sIHJlZ2V4cCwgcmVnRXhwVGVzdCwgdmVy
Ym9zZSwgbGluZU51bWJlcikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmVzKys7
CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkZhaWx1cmUgb24gbGluZSAldVxuIiwg
bGluZU51bWJlcik7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTQ2Myw5ICs0NjMsOSBAQCBz
dGF0aWMgYm9vbCBydW5Gcm9tRmlsZXMoR2xvYmFsT2JqZWN0KiBnCiAKICAgICBkZWxldGVbXSBs
aW5lQnVmZmVyOwogCi0gICAgZ2xvYmFsRGF0YS5kdW1wU2FtcGxlRGF0YShnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKSk7CisgICAgdm0uZHVtcFNhbXBsZURhdGEoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCkpOwogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKLSAgICBnbG9iYWxEYXRhLmR1
bXBSZWdFeHBUcmFjZSgpOworICAgIHZtLmR1bXBSZWdFeHBUcmFjZSgpOwogI2VuZGlmCiAgICAg
cmV0dXJuIHN1Y2Nlc3M7CiB9CkBAIC01MDAsMTMgKzUwMCwxMyBAQCBzdGF0aWMgdm9pZCBwYXJz
ZUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhCiAKIGludCByZWFsTWFpbihpbnQgYXJnYywgY2hhcioq
IGFyZ3YpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gSlNHbG9iYWxEYXRhOjpj
cmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7Ci0gICAgQVBJRW50cnlTaGltIHNoaW0oZ2xvYmFs
RGF0YSk7CisgICAgVk0qIHZtID0gVk06OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKKyAg
ICBBUElFbnRyeVNoaW0gc2hpbSh2bSk7CiAKICAgICBDb21tYW5kTGluZSBvcHRpb25zOwogICAg
IHBhcnNlQXJndW1lbnRzKGFyZ2MsIGFyZ3YsIG9wdGlvbnMpOwogCi0gICAgR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBHbG9iYWxPYmplY3Q6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgR2xvYmFs
T2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKmdsb2JhbERhdGEsIGpzTnVsbCgpKSwgb3B0aW9ucy5h
cmd1bWVudHMpOworICAgIEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gR2xvYmFsT2JqZWN0
OjpjcmVhdGUoKnZtLCBHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgqdm0sIGpzTnVsbCgp
KSwgb3B0aW9ucy5hcmd1bWVudHMpOwogICAgIGJvb2wgc3VjY2VzcyA9IHJ1bkZyb21GaWxlcyhn
bG9iYWxPYmplY3QsIG9wdGlvbnMuZmlsZXMsIG9wdGlvbnMudmVyYm9zZSk7CiAKICAgICByZXR1
cm4gc3VjY2VzcyA/IDAgOiAzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElD
YXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElDYXN0LmgJ
KHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJQ2FzdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKICAgICBj
bGFzcyBFeGVjU3RhdGU7CiAgICAgY2xhc3MgUHJvcGVydHlOYW1lQXJyYXk7Ci0gICAgY2xhc3Mg
SlNHbG9iYWxEYXRhOworICAgIGNsYXNzIFZNOwogICAgIGNsYXNzIEpTT2JqZWN0OwogICAgIGNs
YXNzIEpTVmFsdWU7CiB9CkBAIC0xMTcsOSArMTE3LDkgQEAgaW5saW5lIEpTQzo6UHJvcGVydHlO
YW1lQXJyYXkqIHRvSlMoSlNQcgogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTQzo6UHJv
cGVydHlOYW1lQXJyYXkqPihhKTsKIH0KIAotaW5saW5lIEpTQzo6SlNHbG9iYWxEYXRhKiB0b0pT
KEpTQ29udGV4dEdyb3VwUmVmIGcpCitpbmxpbmUgSlNDOjpWTSogdG9KUyhKU0NvbnRleHRHcm91
cFJlZiBnKQogewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTQzo6SlNHbG9iYWxEYXRh
Kj4oY29uc3RfY2FzdDxPcGFxdWVKU0NvbnRleHRHcm91cCo+KGcpKTsKKyAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxKU0M6OlZNKj4oY29uc3RfY2FzdDxPcGFxdWVKU0NvbnRleHRHcm91cCo+
KGcpKTsKIH0KIAogaW5saW5lIEpTVmFsdWVSZWYgdG9SZWYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IEpTQzo6SlNWYWx1ZSB2KQpAQCAtMTYyLDcgKzE2Miw3IEBAIGlubGluZSBKU1Byb3BlcnR5TmFt
ZUFjY3VtdWxhdG9yUmVmIHRvUmUKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU1Byb3Bl
cnR5TmFtZUFjY3VtdWxhdG9yUmVmPihsKTsKIH0KIAotaW5saW5lIEpTQ29udGV4dEdyb3VwUmVm
IHRvUmVmKEpTQzo6SlNHbG9iYWxEYXRhKiBnKQoraW5saW5lIEpTQ29udGV4dEdyb3VwUmVmIHRv
UmVmKEpTQzo6Vk0qIGcpCiB7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDb250ZXh0
R3JvdXBSZWY+KGcpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElTaGlt
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJU2hpbXMuaAko
cmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElTaGltcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxNCArMzYsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrIHsKIHByb3RlY3RlZDoKLSAgICBBUElFbnRyeVNo
aW1XaXRob3V0TG9jayhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGJvb2wgcmVnaXN0ZXJUaHJl
YWQpCi0gICAgICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCi0gICAgICAgICwgbV9lbnRy
eUlkZW50aWZpZXJUYWJsZSh3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElkZW50aWZpZXJUYWJs
ZShnbG9iYWxEYXRhLT5pZGVudGlmaWVyVGFibGUpKQorICAgIEFQSUVudHJ5U2hpbVdpdGhvdXRM
b2NrKFZNKiB2bSwgYm9vbCByZWdpc3RlclRocmVhZCkKKyAgICAgICAgOiBtX3ZtKHZtKQorICAg
ICAgICAsIG1fZW50cnlJZGVudGlmaWVyVGFibGUod3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJ
ZGVudGlmaWVyVGFibGUodm0tPmlkZW50aWZpZXJUYWJsZSkpCiAgICAgewogICAgICAgICBpZiAo
cmVnaXN0ZXJUaHJlYWQpCi0gICAgICAgICAgICBnbG9iYWxEYXRhLT5oZWFwLm1hY2hpbmVUaHJl
YWRzKCkuYWRkQ3VycmVudFRocmVhZCgpOwotICAgICAgICBtX2dsb2JhbERhdGEtPmhlYXAuYWN0
aXZpdHlDYWxsYmFjaygpLT5zeW5jaHJvbml6ZSgpOwotICAgICAgICBtX2dsb2JhbERhdGEtPmhl
YXAuc3dlZXBlcigpLT5zeW5jaHJvbml6ZSgpOworICAgICAgICAgICAgdm0tPmhlYXAubWFjaGlu
ZVRocmVhZHMoKS5hZGRDdXJyZW50VGhyZWFkKCk7CisgICAgICAgIG1fdm0tPmhlYXAuYWN0aXZp
dHlDYWxsYmFjaygpLT5zeW5jaHJvbml6ZSgpOworICAgICAgICBtX3ZtLT5oZWFwLnN3ZWVwZXIo
KS0+c3luY2hyb25pemUoKTsKICAgICB9CiAKICAgICB+QVBJRW50cnlTaGltV2l0aG91dExvY2so
KQpAQCAtNTIsNyArNTIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAg
UmVmUHRyPEpTR2xvYmFsRGF0YT4gbV9nbG9iYWxEYXRhOworICAgIFJlZlB0cjxWTT4gbV92bTsK
ICAgICBJZGVudGlmaWVyVGFibGUqIG1fZW50cnlJZGVudGlmaWVyVGFibGU7CiB9OwogCkBAIC02
MCwyMiArNjAsMjIgQEAgY2xhc3MgQVBJRW50cnlTaGltIDogcHVibGljIEFQSUVudHJ5U2hpbQog
cHVibGljOgogICAgIC8vIE5vcm1hbCBBUEkgZW50cnkKICAgICBBUElFbnRyeVNoaW0oRXhlY1N0
YXRlKiBleGVjLCBib29sIHJlZ2lzdGVyVGhyZWFkID0gdHJ1ZSkKLSAgICAgICAgOiBBUElFbnRy
eVNoaW1XaXRob3V0TG9jaygmZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWdpc3RlclRocmVhZCkKKyAg
ICAgICAgOiBBUElFbnRyeVNoaW1XaXRob3V0TG9jaygmZXhlYy0+dm0oKSwgcmVnaXN0ZXJUaHJl
YWQpCiAgICAgICAgICwgbV9sb2NrSG9sZGVyKGV4ZWMpCiAgICAgewogICAgIH0KIAotICAgIC8v
IEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3Igb25seSBoYXMgYSBnbG9iYWxEYXRhLgotICAgIEFQ
SUVudHJ5U2hpbShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGJvb2wgcmVnaXN0ZXJUaHJlYWQg
PSB0cnVlKQotICAgICAgICA6IEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKGdsb2JhbERhdGEsIHJl
Z2lzdGVyVGhyZWFkKQotICAgICAgICAsIG1fbG9ja0hvbGRlcihnbG9iYWxEYXRhKQorICAgIC8v
IEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3Igb25seSBoYXMgYSB2bS4KKyAgICBBUElFbnRyeVNo
aW0oVk0qIHZtLCBib29sIHJlZ2lzdGVyVGhyZWFkID0gdHJ1ZSkKKyAgICAgICAgOiBBUElFbnRy
eVNoaW1XaXRob3V0TG9jayh2bSwgcmVnaXN0ZXJUaHJlYWQpCisgICAgICAgICwgbV9sb2NrSG9s
ZGVyKHZtKQogICAgIHsKICAgICB9CiAKICAgICB+QVBJRW50cnlTaGltKCkKICAgICB7Ci0gICAg
ICAgIC8vIERlc3Ryb3lpbmcgb3VyIEpTTG9ja0hvbGRlciBzaG91bGQgYWxzbyBkZXN0cm95IHRo
ZSBKU0dsb2JhbERhdGEuCi0gICAgICAgIG1fZ2xvYmFsRGF0YS5jbGVhcigpOworICAgICAgICAv
LyBEZXN0cm95aW5nIG91ciBKU0xvY2tIb2xkZXIgc2hvdWxkIGFsc28gZGVzdHJveSB0aGUgVk0u
CisgICAgICAgIG1fdm0uY2xlYXIoKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC04NiwxOSArODYs
MTkgQEAgY2xhc3MgQVBJQ2FsbGJhY2tTaGltIHsKIHB1YmxpYzoKICAgICBBUElDYWxsYmFja1No
aW0oRXhlY1N0YXRlKiBleGVjKQogICAgICAgICA6IG1fZHJvcEFsbExvY2tzKGV4ZWMpCi0gICAg
ICAgICwgbV9nbG9iYWxEYXRhKCZleGVjLT5nbG9iYWxEYXRhKCkpCisgICAgICAgICwgbV92bSgm
ZXhlYy0+dm0oKSkKICAgICB7CiAgICAgICAgIHd0ZlRocmVhZERhdGEoKS5yZXNldEN1cnJlbnRJ
ZGVudGlmaWVyVGFibGUoKTsKICAgICB9CiAKICAgICB+QVBJQ2FsbGJhY2tTaGltKCkKICAgICB7
Ci0gICAgICAgIHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKG1fZ2xv
YmFsRGF0YS0+aWRlbnRpZmllclRhYmxlKTsKKyAgICAgICAgd3RmVGhyZWFkRGF0YSgpLnNldEN1
cnJlbnRJZGVudGlmaWVyVGFibGUobV92bS0+aWRlbnRpZmllclRhYmxlKTsKICAgICB9CiAKIHBy
aXZhdGU6CiAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgbV9kcm9wQWxsTG9ja3M7Ci0gICAgSlNH
bG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CisgICAgVk0qIG1fdm07CiB9OwogCiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHJldmlz
aW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgSlNBUElXcmFwcGVy
T2JqZWN0IDogcHVibGljIEpTRGVzdAogcHVibGljOgogICAgIHR5cGVkZWYgSlNEZXN0cnVjdGli
bGVPYmplY3QgQmFzZTsKICAgICAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0
YSYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKICAgICAKICAgICB2b2lkKiB3
cmFwcGVkT2JqZWN0KCkgeyByZXR1cm4gbV93cmFwcGVkT2JqZWN0OyB9CkBAIC00Nyw3ICs0Nyw3
IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7
CiAgICAgCi0gICAgSlNBUElXcmFwcGVyT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSop
OworICAgIEpTQVBJV3JhcHBlck9iamVjdChWTSYsIFN0cnVjdHVyZSopOwogCiBwcml2YXRlOgog
ICAgIHZvaWQqIG1fd3JhcHBlZE9iamVjdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbQkod29ya2luZyBjb3B5
KQpAQCAtNzQsMjAgKzc0LDIwIEBAIHRlbXBsYXRlIDw+IGNvbnN0IENsYXNzSW5mbyBKU0NhbGxi
YWNrT2IKIHRlbXBsYXRlPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBl
ck9iamVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiB0ZW1wbGF0ZSA8PgotU3RydWN0
dXJlKiBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OmNyZWF0ZVN0cnVjdHVy
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG8pCitTdHJ1Y3R1cmUqIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVy
T2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90bykKIHsKLSAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
JnNfaW5mbyk7CiB9CiAKLUpTQVBJV3JhcHBlck9iamVjdDo6SlNBUElXcmFwcGVyT2JqZWN0KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBCYXNl
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKK0pTQVBJV3JhcHBlck9iamVjdDo6SlNBUElXcmFwcGVy
T2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1
Y3R1cmUpCiAgICAgLCBtX3dyYXBwZWRPYmplY3QoMCkKIHsKIH0KIAotdm9pZCBKU0FQSVdyYXBw
ZXJPYmplY3Q6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQg
SlNBUElXcmFwcGVyT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7Ci0gICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OwogICAgIFdlYWtTZXQ6OmFsbG9jYXRlKHRoaXMsIGpzQVBJV3JhcHBlck9iamVjdEhhbmRsZU93
bmVyKCksIDApOyAvLyBCYWxhbmNlZCBpbiBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6
ZmluYWxpemUuCiB9CiAgICAgCkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBKU0FQSVdyYXBwZXJP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4oSgogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlz
aXRvcik7CiAKICAgICBpZiAodGhpc09iamVjdC0+d3JhcHBlZE9iamVjdCgpKQotICAgICAgICBz
Y2FuRXh0ZXJuYWxPYmplY3RHcmFwaChjZWxsLT5zdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbERhdGEoKSwgdmlzaXRvciwgdGhpc09iamVjdC0+d3JhcHBlZE9iamVjdCgpKTsKKyAg
ICAgICAgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoY2VsbC0+c3RydWN0dXJlKCktPmdsb2JhbE9i
amVjdCgpLT52bSgpLCB2aXNpdG9yLCB0aGlzT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNC
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5j
cHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDE0ICsxMDEsMTQgQEAgdm9pZCBKU0dhcmJhZ2VD
b2xsZWN0KEpTQ29udGV4dFJlZiBjdHgpCiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgp
OwogICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYywgZmFsc2UpOwogCi0gICAgZXhlYy0+
Z2xvYmFsRGF0YSgpLmhlYXAucmVwb3J0QWJhbmRvbmVkT2JqZWN0R3JhcGgoKTsKKyAgICBleGVj
LT52bSgpLmhlYXAucmVwb3J0QWJhbmRvbmVkT2JqZWN0R3JhcGgoKTsKIH0KIAogdm9pZCBKU1Jl
cG9ydEV4dHJhTWVtb3J5Q29zdChKU0NvbnRleHRSZWYgY3R4LCBzaXplX3Qgc2l6ZSkKIHsKICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7CiAgICAgQVBJRW50cnlTaGltIGVudHJ5U2hp
bShleGVjKTsKLSAgICBleGVjLT5nbG9iYWxEYXRhKCkuaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNv
c3Qoc2l6ZSk7CisgICAgZXhlYy0+dm0oKS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXpl
KTsKIH0KIAogZXh0ZXJuICJDIiBKU19FWFBPUlQgdm9pZCBKU1N5bmNocm9ub3VzR2FyYmFnZUNv
bGxlY3RGb3JEZWJ1Z2dpbmcoSlNDb250ZXh0UmVmKTsKQEAgLTEyMCw1ICsxMjAsNSBAQCB2b2lk
IEpTU3luY2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRlYnVnCiAKICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSB0b0pTKGN0eCk7CiAgICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShleGVjKTsKLSAgICBl
eGVjLT5nbG9iYWxEYXRhKCkuaGVhcC5jb2xsZWN0QWxsR2FyYmFnZSgpOworICAgIGV4ZWMtPnZt
KCkuaGVhcC5jb2xsZWN0QWxsR2FyYmFnZSgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTQ4
NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogY29u
c3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiQ2FsbGJhY2tD
b25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlND
YWxsYmFja0NvbnN0cnVjdG9yKSB9OwogCiBKU0NhbGxiYWNrQ29uc3RydWN0b3I6OkpTQ2FsbGJh
Y2tDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNDbGFzc1JlZiBqc0NsYXNzLCBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2Fs
bGJhY2sgY2FsbGJhY2spCi0gICAgOiBKU0Rlc3RydWN0aWJsZU9iamVjdChnbG9iYWxPYmplY3Qt
Pmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKQorICAgIDogSlNEZXN0cnVjdGlibGVPYmplY3QoZ2xv
YmFsT2JqZWN0LT52bSgpLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX2NsYXNzKGpzQ2xhc3MpCiAgICAg
LCBtX2NhbGxiYWNrKGNhbGxiYWNrKQogewpAQCAtNDgsNyArNDgsNyBAQCBKU0NhbGxiYWNrQ29u
c3RydWN0b3I6OkpTQ2FsbGJhY2tDb25zdHJ1CiAKIHZvaWQgSlNDYWxsYmFja0NvbnN0cnVjdG9y
OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NsYXNzUmVm
IGpzQ2xhc3MpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT5nbG9i
YWxEYXRhKCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7
CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKICAgICBpZiAobV9jbGFzcykKICAgICAg
ICAgSlNDbGFzc1JldGFpbihqc0NsYXNzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMTQ4NjM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsOSArNDgsOSBAQCBwdWJsaWM6CiAgICAgSlNPYmplY3RDYWxsQXNDb25z
dHJ1Y3RvckNhbGxiYWNrIGNhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFjazsgfQog
ICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykgCisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90bykgCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pOwogICAgIH0KIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMTQ4NjM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MCwxNiArNTAsMTYgQEAgSlNDYWxsYmFja0Z1bmN0aW9uOjpKU0Nh
bGxiYWNrRnVuY3Rpb24oSgogewogfQogCi12b2lkIEpTQ2FsbGJhY2tGdW5jdGlvbjo6ZmluaXNo
Q3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTdHJpbmcmIG5hbWUpCit2
b2lkIEpTQ2FsbGJhY2tGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBjb25zdCBTdHJp
bmcmIG5hbWUpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgbmFtZSk7
CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIG5hbWUpOwogICAgIEFTU0VSVChpbmhlcml0
cygmc19pbmZvKSk7CiB9CiAKIEpTQ2FsbGJhY2tGdW5jdGlvbiogSlNDYWxsYmFja0Z1bmN0aW9u
OjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIGNvbnN0IFN0cmluZyYgbmFt
ZSkKIHsKICAgICBKU0NhbGxiYWNrRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8SlNDYWxsYmFja0Z1bmN0aW9uPigqZXhlYy0+aGVhcCgpKSkgSlNDYWxsYmFj
a0Z1bmN0aW9uKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5jYWxsYmFja0Z1bmN0aW9uU3Ry
dWN0dXJlKCksIGNhbGxiYWNrKTsKLSAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+
Z2xvYmFsRGF0YSgpLCBuYW1lKTsKKyAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+
dm0oKSwgbmFtZSk7CiAgICAgcmV0dXJuIGZ1bmN0aW9uOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDE0ODYz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBKU0Nh
bGxiYWNrRnVuY3Rpb24gOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CiBwcm90ZWN0ZWQ6CiAg
ICAgSlNDYWxsYmFja0Z1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgSlNPYmpl
Y3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xv
YmFsRGF0YSYsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKIHB1YmxpYzoKICAgICB0eXBlZGVmIEludGVybmFs
RnVuY3Rpb24gQmFzZTsKQEAgLTQ1LDkgKzQ1LDkgQEAgcHVibGljOgogICAgIAogICAgIC8vIElu
dGVybmFsRnVuY3Rpb24gbWlzaC1tYXNoZXMgY29uc3RydWN0b3IgYW5kIGZ1bmN0aW9uIGJlaGF2
aW9yIC0tIHdlIHNob3VsZCAKICAgICAvLyByZWZhY3RvciB0aGUgY29kZSBzbyB0aGlzIG92ZXJy
aWRlIGlzbid0IG5lY2Vzc2FyeQotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG8pIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pIAogICAg
IHsgCi0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxP
YmplY3QsIHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOyAKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAK
ICAgICB9CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
YWxsYmFja09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0LmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEs
MjQgKzQxLDI0IEBAIHRlbXBsYXRlPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEoKIHRl
bXBsYXRlPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6bmVl
ZHNEZXN0cnVjdGlvbiA9IGZhbHNlOwogCiB0ZW1wbGF0ZTw+Ci1KU0NhbGxiYWNrT2JqZWN0PEpT
R2xvYmFsT2JqZWN0PiogSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OmNyZWF0ZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2xhc3NSZWYgY2xhc3NSZWYsIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD4qIEpTQ2FsbGJhY2tP
YmplY3Q8SlNHbG9iYWxPYmplY3Q+OjpjcmVhdGUoVk0mIHZtLCBKU0NsYXNzUmVmIGNsYXNzUmVm
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFs
T2JqZWN0PiogY2FsbGJhY2tPYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0Nh
bGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0PiA+KGdsb2JhbERhdGEuaGVhcCkpIEpTQ2FsbGJh
Y2tPYmplY3QoZ2xvYmFsRGF0YSwgY2xhc3NSZWYsIHN0cnVjdHVyZSk7Ci0gICAgY2FsbGJhY2tP
YmplY3QtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgIGdsb2JhbERhdGEuaGVhcC5h
ZGRGaW5hbGl6ZXIoY2FsbGJhY2tPYmplY3QsIGRlc3Ryb3kpOworICAgIEpTQ2FsbGJhY2tPYmpl
Y3Q8SlNHbG9iYWxPYmplY3Q+KiBjYWxsYmFja09iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+ID4odm0uaGVhcCkpIEpTQ2Fs
bGJhY2tPYmplY3Qodm0sIGNsYXNzUmVmLCBzdHJ1Y3R1cmUpOworICAgIGNhbGxiYWNrT2JqZWN0
LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgdm0uaGVhcC5hZGRGaW5hbGl6ZXIoY2FsbGJhY2tP
YmplY3QsIGRlc3Ryb3kpOwogICAgIHJldHVybiBjYWxsYmFja09iamVjdDsKIH0KIAogdGVtcGxh
dGUgPD4KLVN0cnVjdHVyZSogSlNDYWxsYmFja09iamVjdDxKU0Rlc3RydWN0aWJsZU9iamVjdD46
OmNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCitTdHJ1Y3R1cmUqIEpTQ2FsbGJhY2tPYmpl
Y3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQogeyAKLSAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8o
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCisgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAKIH0KICAgICAKIHRlbXBsYXRlIDw+Ci1TdHJ1
Y3R1cmUqIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvKQorU3RydWN0dXJlKiBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0
Pjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90bykKIHsgCi0gICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKEdsb2JhbE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7IAorICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oR2xvYmFsT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsgCiB9CiAKIHZvaWQgSlNDYWxsYmFja09iamVjdERhdGE6OmZpbmFs
aXplKEhhbmRsZTxVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMTQ4NjM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTU0LDExICs1NCwxMSBAQCBzdHJ1Y3QgSlNDYWxsYmFja09iamVjdERhdGEg
OiBXZWFrSGFuZGxlCiAgICAgICAgIHJldHVybiBtX3ByaXZhdGVQcm9wZXJ0aWVzLT5nZXRQcml2
YXRlUHJvcGVydHkocHJvcGVydHlOYW1lKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRQcml2
YXRlUHJvcGVydHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUpCisgICAgdm9pZCBzZXRQ
cml2YXRlUHJvcGVydHkoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIW1fcHJpdmF0
ZVByb3BlcnRpZXMpCiAgICAgICAgICAgICBtX3ByaXZhdGVQcm9wZXJ0aWVzID0gYWRvcHRQdHIo
bmV3IEpTUHJpdmF0ZVByb3BlcnR5TWFwKTsKLSAgICAgICAgbV9wcml2YXRlUHJvcGVydGllcy0+
c2V0UHJpdmF0ZVByb3BlcnR5KGdsb2JhbERhdGEsIG93bmVyLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
KTsKKyAgICAgICAgbV9wcml2YXRlUHJvcGVydGllcy0+c2V0UHJpdmF0ZVByb3BlcnR5KHZtLCBv
d25lciwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZGVsZXRl
UHJpdmF0ZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKQEAgLTg2LDEw
ICs4NiwxMCBAQCBzdHJ1Y3QgSlNDYWxsYmFja09iamVjdERhdGEgOiBXZWFrSGFuZGxlCiAgICAg
ICAgICAgICByZXR1cm4gbG9jYXRpb24tPnZhbHVlLmdldCgpOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICB2b2lkIHNldFByaXZhdGVQcm9wZXJ0eShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSkKKyAgICAgICAgdm9pZCBzZXRQcml2YXRlUHJvcGVydHkoVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBlbXB0eTsKLSAgICAg
ICAgICAgIG1fcHJvcGVydHlNYXAuYWRkKHByb3BlcnR5TmFtZS5pbXBsKCksIGVtcHR5KS5pdGVy
YXRvci0+dmFsdWUuc2V0KGdsb2JhbERhdGEsIG93bmVyLCB2YWx1ZSk7CisgICAgICAgICAgICBt
X3Byb3BlcnR5TWFwLmFkZChwcm9wZXJ0eU5hbWUuaW1wbCgpLCBlbXB0eSkuaXRlcmF0b3ItPnZh
bHVlLnNldCh2bSwgb3duZXIsIHZhbHVlKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
dm9pZCBkZWxldGVQcml2YXRlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
KQpAQCAtMTE4LDEwICsxMTgsMTAgQEAgdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KIGNsYXNzIEpT
Q2FsbGJhY2tPYmplY3QgOiBwdWJsaWMgUGFyZW50IHsKIHByb3RlY3RlZDoKICAgICBKU0NhbGxi
YWNrT2JqZWN0KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEpTQ2xhc3NSZWYsIHZvaWQqIGRhdGEp
OwotICAgIEpTQ2FsbGJhY2tPYmplY3QoSlNHbG9iYWxEYXRhJiwgSlNDbGFzc1JlZiwgU3RydWN0
dXJlKik7CisgICAgSlNDYWxsYmFja09iamVjdChWTSYsIEpTQ2xhc3NSZWYsIFN0cnVjdHVyZSop
OwogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqKTsKLSAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTR2xvYmFsRGF0YSYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
IAogcHVibGljOgogICAgIHR5cGVkZWYgUGFyZW50IEJhc2U7CkBAIC0xMzMsNyArMTMzLDcgQEAg
cHVibGljOgogICAgICAgICBjYWxsYmFja09iamVjdC0+ZmluaXNoQ3JlYXRpb24oZXhlYyk7CiAg
ICAgICAgIHJldHVybiBjYWxsYmFja09iamVjdDsKICAgICB9Ci0gICAgc3RhdGljIEpTQ2FsbGJh
Y2tPYmplY3Q8UGFyZW50PiogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIEpTQ2xhc3NSZWYsIFN0cnVj
dHVyZSopOworICAgIHN0YXRpYyBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD4qIGNyZWF0ZShWTSYs
IEpTQ2xhc3NSZWYsIFN0cnVjdHVyZSopOwogCiAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNE
ZXN0cnVjdGlvbjsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCogY2VsbCkKQEAgLTE0
OSwxNiArMTQ5LDE2IEBAIHB1YmxpYzoKICAgICBKU0NsYXNzUmVmIGNsYXNzUmVmKCkgY29uc3Qg
eyByZXR1cm4gbV9jYWxsYmFja09iamVjdERhdGEtPmpzQ2xhc3M7IH0KICAgICBib29sIGluaGVy
aXRzKEpTQ2xhc3NSZWYpIGNvbnN0OwogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlKTsKICAgICAKICAgICBKU1ZhbHVlIGdldFByaXZhdGVQcm9wZXJ0eShjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9jYWxsYmFj
a09iamVjdERhdGEtPmdldFByaXZhdGVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwogICAgIH0KICAg
ICAKLSAgICB2b2lkIHNldFByaXZhdGVQcm9wZXJ0eShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB2b2lk
IHNldFByaXZhdGVQcm9wZXJ0eShWTSYgdm0sIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIG1fY2FsbGJhY2tPYmplY3REYXRhLT5z
ZXRQcml2YXRlUHJvcGVydHkoZ2xvYmFsRGF0YSwgdGhpcywgcHJvcGVydHlOYW1lLCB2YWx1ZSk7
CisgICAgICAgIG1fY2FsbGJhY2tPYmplY3REYXRhLT5zZXRQcml2YXRlUHJvcGVydHkodm0sIHRo
aXMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGRlbGV0ZVBy
aXZhdGVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlv
bnMuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAg
aW5saW5lIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50PiogSlNDYWxsYgogCiB0ZW1wbGF0ZSA8Y2xh
c3MgUGFyZW50PgogSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpKU0NhbGxiYWNrT2JqZWN0KEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTQ2xhc3NSZWYganNDbGFzcywg
dm9pZCogZGF0YSkKLSAgICA6IFBhcmVudChleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSkK
KyAgICA6IFBhcmVudChleGVjLT52bSgpLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX2NhbGxiYWNrT2Jq
ZWN0RGF0YShhZG9wdFB0cihuZXcgSlNDYWxsYmFja09iamVjdERhdGEoZGF0YSwganNDbGFzcykp
KQogewogfQpAQCAtNTksOCArNTksOCBAQCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OkpTQ2Fs
bGJhY2tPYmplCiAvLyBHbG9iYWwgb2JqZWN0IGNvbnN0cnVjdG9yLgogLy8gRklYTUU6IE1vdmUg
dGhpcyBpbnRvIGEgc2VwYXJhdGUgSlNHbG9iYWxDYWxsYmFja09iamVjdCBjbGFzcyBkZXJpdmVk
IGZyb20gdGhpcyBvbmUuCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgotSlNDYWxsYmFja09iamVj
dDxQYXJlbnQ+OjpKU0NhbGxiYWNrT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlND
bGFzc1JlZiBqc0NsYXNzLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IFBhcmVudChnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUpCitKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OkpTQ2FsbGJhY2tP
YmplY3QoVk0mIHZtLCBKU0NsYXNzUmVmIGpzQ2xhc3MsIFN0cnVjdHVyZSogc3RydWN0dXJlKQor
ICAgIDogUGFyZW50KHZtLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX2NhbGxiYWNrT2JqZWN0RGF0YShh
ZG9wdFB0cihuZXcgSlNDYWxsYmFja09iamVjdERhdGEoMCwganNDbGFzcykpKQogewogfQpAQCAt
NjgsMTggKzY4LDE4IEBAIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6SlNDYWxsYmFja09iamUK
IHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CiB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6
ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+
dm0oKSk7CiAgICAgQVNTRVJUKFBhcmVudDo6aW5oZXJpdHMoJnNfaW5mbykpOwogICAgIGluaXQo
ZXhlYyk7CiB9CiAKIC8vIFRoaXMgaXMganVzdCBmb3IgR2xvYmFsIG9iamVjdCwgc28gd2UgY2Fu
IGFzc3VtZSB0aGF0IEJhc2U6OmZpbmlzaENyZWF0aW9uIGlzIEpTR2xvYmFsT2JqZWN0OjpmaW5p
c2hDcmVhdGlvbi4KIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Ci12b2lkIEpTQ2FsbGJhY2tPYmpl
Y3Q8UGFyZW50Pjo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9p
ZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAg
ICBBU1NFUlQoUGFyZW50Ojppbmhlcml0cygmc19pbmZvKSk7CiAgICAgQVNTRVJUKFBhcmVudDo6
aXNHbG9iYWxPYmplY3QoKSk7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7
CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIGluaXQoanNDYXN0PEpTR2xvYmFs
T2JqZWN0Kj4odGhpcyktPmdsb2JhbEV4ZWMoKSk7CiB9CiAKQEAgLTI4Myw3ICsyODMsNyBAQCB2
b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6cHV0KEpTQ2VsCiAgICAgICAgICAgICAgICAg
aWYgKFN0YXRpY0Z1bmN0aW9uRW50cnkqIGVudHJ5ID0gc3RhdGljRnVuY3Rpb25zLT5nZXQobmFt
ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LT5hdHRyaWJ1dGVzICYga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+SlNDYWxsYmFja09iamVjdDxQYXJlbnQ+
OjpwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsgLy8g
cHV0IGFzIG92ZXJyaWRlIHByb3BlcnR5CisgICAgICAgICAgICAgICAgICAgIHRoaXNPYmplY3Qt
PkpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6cHV0RGlyZWN0KGV4ZWMtPnZtKCksIHByb3BlcnR5
TmFtZSwgdmFsdWUpOyAvLyBwdXQgYXMgb3ZlcnJpZGUgcHJvcGVydHkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTYyNyw3
ICs2MjcsNyBAQCBKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6c3RhdGljCiAgICAg
ICAgICAgICAgICAgICAgIGlmIChKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgY2FsbEFz
RnVuY3Rpb24gPSBlbnRyeS0+Y2FsbEFzRnVuY3Rpb24pIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIG8gPSBKU0NhbGxiYWNrRnVu
Y3Rpb246OmNyZWF0ZShleGVjLCB0aGlzT2JqLT5nbG9iYWxPYmplY3QoKSwgY2FsbEFzRnVuY3Rp
b24sIG5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpc09iai0+cHV0RGlyZWN0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBvLCBlbnRyeS0+YXR0cmlidXRlcyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzT2JqLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgcHJv
cGVydHlOYW1lLCBvLCBlbnRyeS0+YXR0cmlidXRlcyk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbzsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNwcAkocmV2aXNpb24gMTQ4
NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw3IEBAIFBhc3NSZWZQdHI8T3BhcXVlSlNDbGFzcz4gT3Bh
cXVlSlNDbGFzczoKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9wYXF1ZUpTQ2xhc3MoJmRlZmlu
aXRpb24sIHByb3RvQ2xhc3MuZ2V0KCkpKTsKIH0KIAotT3BhcXVlSlNDbGFzc0NvbnRleHREYXRh
OjpPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEoSlNDOjpKU0dsb2JhbERhdGEmLCBPcGFxdWVKU0Ns
YXNzKiBqc0NsYXNzKQorT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhOjpPcGFxdWVKU0NsYXNzQ29u
dGV4dERhdGEoSlNDOjpWTSYsIE9wYXF1ZUpTQ2xhc3MqIGpzQ2xhc3MpCiAgICAgOiBtX2NsYXNz
KGpzQ2xhc3MpCiB7CiAgICAgaWYgKGpzQ2xhc3MtPm1fc3RhdGljVmFsdWVzKSB7CkBAIC0xNTMs
NyArMTUzLDcgQEAgT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhJiBPcGFxdWVKU0NsYXNzOgogewog
ICAgIE93blB0cjxPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE+JiBjb250ZXh0RGF0YSA9IGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+b3BhcXVlSlNDbGFzc0RhdGEoKS5hZGQodGhpcywgbnVs
bHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghY29udGV4dERhdGEpCi0gICAgICAgIGNv
bnRleHREYXRhID0gYWRvcHRQdHIobmV3IE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YShleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMpKTsKKyAgICAgICAgY29udGV4dERhdGEgPSBhZG9wdFB0cihuZXcg
T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhKGV4ZWMtPnZtKCksIHRoaXMpKTsKICAgICByZXR1cm4g
KmNvbnRleHREYXRhOwogfQogCkBAIC0yMDMsNyArMjAzLDcgQEAgSlNPYmplY3QqIE9wYXF1ZUpT
Q2xhc3M6OnByb3RvdHlwZShFeGVjUwogICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBKU0NhbGxi
YWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jYWxsYmFja09i
amVjdFN0cnVjdHVyZSgpLCBwcm90b3R5cGVDbGFzcywgJmpzQ2xhc3NEYXRhKTsgLy8gc2V0IGpz
Q2xhc3NEYXRhIGFzIHRoZSBvYmplY3QncyBwcml2YXRlIGRhdGEsIHNvIGl0IGNhbiBjbGVhciBv
dXIgcmVmZXJlbmNlIG9uIGRlc3RydWN0aW9uCiAgICAgaWYgKHBhcmVudENsYXNzKSB7CiAgICAg
ICAgIGlmIChKU09iamVjdCogcGFyZW50UHJvdG90eXBlID0gcGFyZW50Q2xhc3MtPnByb3RvdHlw
ZShleGVjKSkKLSAgICAgICAgICAgIHByb3RvdHlwZS0+c2V0UHJvdG90eXBlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgcGFyZW50UHJvdG90eXBlKTsKKyAgICAgICAgICAgIHByb3RvdHlwZS0+c2V0UHJv
dG90eXBlKGV4ZWMtPnZtKCksIHBhcmVudFByb3RvdHlwZSk7CiAgICAgfQogCiAgICAganNDbGFz
c0RhdGEuY2FjaGVkUHJvdG90eXBlID0gUGFzc1dlYWs8SlNPYmplY3Q+KHByb3RvdHlwZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuaAkocmV2aXNpb24gMTQ4NjM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY4LDE0ICs2OCwxNCBAQCBzdHJ1Y3QgT3BhcXVlSlNDbGFzczsKIHN0cnVjdCBPcGFx
dWVKU0NsYXNzQ29udGV4dERhdGEgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE9wYXF1ZUpT
Q2xhc3NDb250ZXh0RGF0YSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAg
IE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YShKU0M6OkpTR2xvYmFsRGF0YSYsIE9wYXF1ZUpTQ2xh
c3MqKTsKKyAgICBPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEoSlNDOjpWTSYsIE9wYXF1ZUpTQ2xh
c3MqKTsKIAogICAgIC8vIEl0IGlzIG5lY2Vzc2FyeSB0byBrZWVwIE9wYXF1ZUpTQ2xhc3MgYWxp
dmUgYmVjYXVzZSBvZiB0aGUgZm9sbG93aW5nIHJhcmUgc2NlbmFyaW86Ci0gICAgLy8gMS4gQSBj
bGFzcyBpcyBjcmVhdGVkIGFuZCB1c2VkLCBzbyBpdHMgY29udGV4dCBkYXRhIGlzIHN0b3JlZCBp
biBKU0dsb2JhbERhdGEgaGFzaCBtYXAuCisgICAgLy8gMS4gQSBjbGFzcyBpcyBjcmVhdGVkIGFu
ZCB1c2VkLCBzbyBpdHMgY29udGV4dCBkYXRhIGlzIHN0b3JlZCBpbiBWTSBoYXNoIG1hcC4KICAg
ICAvLyAyLiBUaGUgY2xhc3MgaXMgcmVsZWFzZWQsIGFuZCB3aGVuIGFsbCBKUyBvYmplY3RzIHRo
YXQgdXNlIGl0IGFyZSBjb2xsZWN0ZWQsIE9wYXF1ZUpTQ2xhc3MKICAgICAvLyBpcyBkZWxldGVk
ICh0aGF0J3MgdGhlIHBhcnQgcHJldmVudGVkIGJ5IHRoaXMgUmVmUHRyKS4KICAgICAvLyAzLiBB
bm90aGVyIGNsYXNzIGlzIGNyZWF0ZWQgYXQgdGhlIHNhbWUgYWRkcmVzcy4KLSAgICAvLyA0LiBX
aGVuIGl0IGlzIHVzZWQsIHRoZSBvbGQgY29udGV4dCBkYXRhIGlzIGZvdW5kIGluIEpTR2xvYmFs
RGF0YSBhbmQgdXNlZC4KKyAgICAvLyA0LiBXaGVuIGl0IGlzIHVzZWQsIHRoZSBvbGQgY29udGV4
dCBkYXRhIGlzIGZvdW5kIGluIFZNIGFuZCB1c2VkLgogICAgIFJlZlB0cjxPcGFxdWVKU0NsYXNz
PiBtX2NsYXNzOwogCiAgICAgT3duUHRyPE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZT4g
c3RhdGljVmFsdWVzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0J
KHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAgLSAoSlNWYWx1ZSAqKWV2YWx1
YXRlU2NyaXB0OihOU1N0cmluZyAqKQogLSAodm9pZClzZXRFeGNlcHRpb246KEpTVmFsdWUgKil2
YWx1ZQogewogICAgIGlmICh2YWx1ZSkKLSAgICAgICAgbV9leGNlcHRpb24uc2V0KHRvSlMobV9j
b250ZXh0KS0+Z2xvYmFsRGF0YSgpLCB0b0pTKEpTVmFsdWVUb09iamVjdChtX2NvbnRleHQsIHZh
bHVlSW50ZXJuYWxWYWx1ZSh2YWx1ZSksIDApKSk7CisgICAgICAgIG1fZXhjZXB0aW9uLnNldCh0
b0pTKG1fY29udGV4dCktPnZtKCksIHRvSlMoSlNWYWx1ZVRvT2JqZWN0KG1fY29udGV4dCwgdmFs
dWVJbnRlcm5hbFZhbHVlKHZhbHVlKSwgMCkpKTsKICAgICBlbHNlCiAgICAgICAgIG1fZXhjZXB0
aW9uLmNsZWFyKCk7CiB9CkBAIC0xOTAsNyArMTkwLDcgQEAgLSAoaWQpaW5pdFdpdGhHbG9iYWxD
b250ZXh0UmVmOihKU0dsb2JhbAogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KS0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpOwotICAgIG1fdmlydHVhbE1hY2hpbmUgPSBbW0pTVmlydHVhbE1hY2hpbmUgdmlydHVh
bE1hY2hpbmVXaXRoQ29udGV4dEdyb3VwUmVmOnRvUmVmKCZnbG9iYWxPYmplY3QtPmdsb2JhbERh
dGEoKSldIHJldGFpbl07CisgICAgbV92aXJ0dWFsTWFjaGluZSA9IFtbSlNWaXJ0dWFsTWFjaGlu
ZSB2aXJ0dWFsTWFjaGluZVdpdGhDb250ZXh0R3JvdXBSZWY6dG9SZWYoJmdsb2JhbE9iamVjdC0+
dm0oKSldIHJldGFpbl07CiAgICAgQVNTRVJUKG1fdmlydHVhbE1hY2hpbmUpOwogICAgIG1fY29u
dGV4dCA9IEpTR2xvYmFsQ29udGV4dFJldGFpbihjb250ZXh0KTsKICAgICBtX3dyYXBwZXJNYXAg
PSBbW0pTV3JhcHBlck1hcCBhbGxvY10gaW5pdFdpdGhDb250ZXh0OnNlbGZdOwpAQCAtMjU3LDcg
KzI1Nyw3IEBAIC0gKEpTVmFsdWUgKil3cmFwcGVyRm9ySlNPYmplY3Q6KEpTVmFsdWUKIAogKyAo
SlNDb250ZXh0ICopY29udGV4dFdpdGhHbG9iYWxDb250ZXh0UmVmOihKU0dsb2JhbENvbnRleHRS
ZWYpZ2xvYmFsQ29udGV4dAogewotICAgIEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5l
ID0gW0pTVmlydHVhbE1hY2hpbmUgdmlydHVhbE1hY2hpbmVXaXRoQ29udGV4dEdyb3VwUmVmOnRv
UmVmKCZ0b0pTKGdsb2JhbENvbnRleHQpLT5nbG9iYWxEYXRhKCkpXTsKKyAgICBKU1ZpcnR1YWxN
YWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtKU1ZpcnR1YWxNYWNoaW5lIHZpcnR1YWxNYWNoaW5l
V2l0aENvbnRleHRHcm91cFJlZjp0b1JlZigmdG9KUyhnbG9iYWxDb250ZXh0KS0+dm0oKSldOwog
ICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFt2aXJ0dWFsTWFjaGluZSBjb250ZXh0Rm9yR2xvYmFs
Q29udGV4dFJlZjpnbG9iYWxDb250ZXh0XTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIGNv
bnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRXaXRoR2xvYmFsQ29udGV4dFJlZjpnbG9i
YWxDb250ZXh0XSBhdXRvcmVsZWFzZV07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ29udGV4dFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NvbnRleHRSZWYuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcg
QEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIEpTQ29udGV4dEdyb3VwUmVmIEpTQ29udGV4dEdyb3Vw
Q3JlYXRlKCkKIHsKICAgICBpbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0gICAgcmV0dXJuIHRvUmVm
KEpTR2xvYmFsRGF0YTo6Y3JlYXRlQ29udGV4dEdyb3VwKCkubGVha1JlZigpKTsKKyAgICByZXR1
cm4gdG9SZWYoVk06OmNyZWF0ZUNvbnRleHRHcm91cCgpLmxlYWtSZWYoKSk7CiB9CiAKIEpTQ29u
dGV4dEdyb3VwUmVmIEpTQ29udGV4dEdyb3VwUmV0YWluKEpTQ29udGV4dEdyb3VwUmVmIGdyb3Vw
KQpAQCAtNjgsMTIgKzY4LDEyIEBAIEpTQ29udGV4dEdyb3VwUmVmIEpTQ29udGV4dEdyb3VwUmV0
YWluKEoKIHZvaWQgSlNDb250ZXh0R3JvdXBSZWxlYXNlKEpTQ29udGV4dEdyb3VwUmVmIGdyb3Vw
KQogewogICAgIElkZW50aWZpZXJUYWJsZSogc2F2ZWRJZGVudGlmaWVyVGFibGU7Ci0gICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gKnRvSlMoZ3JvdXApOworICAgIFZNJiB2bSA9ICp0b0pT
KGdyb3VwKTsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsRGF0YSk7
Ci0gICAgICAgIHNhdmVkSWRlbnRpZmllclRhYmxlID0gd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJl
bnRJZGVudGlmaWVyVGFibGUoZ2xvYmFsRGF0YS5pZGVudGlmaWVyVGFibGUpOwotICAgICAgICBn
bG9iYWxEYXRhLmRlcmVmKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAg
ICAgc2F2ZWRJZGVudGlmaWVyVGFibGUgPSB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElkZW50
aWZpZXJUYWJsZSh2bS5pZGVudGlmaWVyVGFibGUpOworICAgICAgICB2bS5kZXJlZigpOwogICAg
IH0KIAogICAgIHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKHNhdmVk
SWRlbnRpZmllclRhYmxlKTsKQEAgLTg2LDEwICs4NiwxMCBAQCBKU0dsb2JhbENvbnRleHRSZWYg
SlNHbG9iYWxDb250ZXh0Q3JlYXRlCiAgICAgaW5pdGlhbGl6ZVRocmVhZGluZygpOwogCiAjaWYg
T1MoREFSV0lOKQotICAgIC8vIElmIHRoZSBhcHBsaWNhdGlvbiB3YXMgbGlua2VkIGJlZm9yZSBK
U0dsb2JhbENvbnRleHRDcmVhdGUgd2FzIGNoYW5nZWQgdG8gdXNlIGEgdW5pcXVlIEpTR2xvYmFs
RGF0YSwKKyAgICAvLyBJZiB0aGUgYXBwbGljYXRpb24gd2FzIGxpbmtlZCBiZWZvcmUgSlNHbG9i
YWxDb250ZXh0Q3JlYXRlIHdhcyBjaGFuZ2VkIHRvIHVzZSBhIHVuaXF1ZSBWTSwKICAgICAvLyB3
ZSB1c2UgYSBzaGFyZWQgb25lIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KICAgICBpZiAo
TlNWZXJzaW9uT2ZMaW5rVGltZUxpYnJhcnkoIkphdmFTY3JpcHRDb3JlIikgPD0gd2Via2l0Rmly
c3RWZXJzaW9uV2l0aENvbmN1cnJlbnRHbG9iYWxDb250ZXh0cykgewotICAgICAgICByZXR1cm4g
SlNHbG9iYWxDb250ZXh0Q3JlYXRlSW5Hcm91cCh0b1JlZigmSlNHbG9iYWxEYXRhOjpzaGFyZWRJ
bnN0YW5jZSgpKSwgZ2xvYmFsT2JqZWN0Q2xhc3MpOworICAgICAgICByZXR1cm4gSlNHbG9iYWxD
b250ZXh0Q3JlYXRlSW5Hcm91cCh0b1JlZigmVk06OnNoYXJlZEluc3RhbmNlKCkpLCBnbG9iYWxP
YmplY3RDbGFzcyk7CiAgICAgfQogI2VuZGlmIC8vIE9TKERBUldJTikKIApAQCAtMTAwLDIyICsx
MDAsMjIgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xvYmFsQ29udGV4dENyZWF0ZQogewogICAg
IGluaXRpYWxpemVUaHJlYWRpbmcoKTsKIAotICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IGdsb2Jh
bERhdGEgPSBncm91cCA/IFBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPih0b0pTKGdyb3VwKSkgOiBK
U0dsb2JhbERhdGE6OmNyZWF0ZUNvbnRleHRHcm91cCgpOworICAgIFJlZlB0cjxWTT4gdm0gPSBn
cm91cCA/IFBhc3NSZWZQdHI8Vk0+KHRvSlMoZ3JvdXApKSA6IFZNOjpjcmVhdGVDb250ZXh0R3Jv
dXAoKTsKIAotICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZ2xvYmFsRGF0YS5nZXQoKSwgZmFs
c2UpOwotICAgIGdsb2JhbERhdGEtPm1ha2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCk7Cisg
ICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbSh2bS5nZXQoKSwgZmFsc2UpOworICAgIHZtLT5tYWtl
VXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpOwogCiAgICAgaWYgKCFnbG9iYWxPYmplY3RDbGFz
cykgewotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gSlNHbG9iYWxPYmpl
Y3Q6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgq
Z2xvYmFsRGF0YSwganNOdWxsKCkpKTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IEpTR2xvYmFsT2JqZWN0OjpjcmVhdGUoKnZtLCBKU0dsb2JhbE9iamVjdDo6Y3JlYXRl
U3RydWN0dXJlKCp2bSwganNOdWxsKCkpKTsKICAgICAgICAgcmV0dXJuIEpTR2xvYmFsQ29udGV4
dFJldGFpbih0b0dsb2JhbFJlZihnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkpOwogICAgIH0K
IAotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0NhbGxiYWNrT2JqZWN0PEpT
R2xvYmFsT2JqZWN0Pjo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3RDbGFzcywgSlND
YWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZSgqZ2xvYmFsRGF0
YSwgMCwganNOdWxsKCkpKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gSlND
YWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OmNyZWF0ZSgqdm0sIGdsb2JhbE9iamVjdENs
YXNzLCBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKCp2
bSwgMCwganNOdWxsKCkpKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKTsKICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IGdsb2JhbE9iamVjdENsYXNzLT5w
cm90b3R5cGUoZXhlYyk7CiAgICAgaWYgKCFwcm90b3R5cGUpCiAgICAgICAgIHByb3RvdHlwZSA9
IGpzTnVsbCgpOwotICAgIGdsb2JhbE9iamVjdC0+cmVzZXRQcm90b3R5cGUoKmdsb2JhbERhdGEs
IHByb3RvdHlwZSk7CisgICAgZ2xvYmFsT2JqZWN0LT5yZXNldFByb3RvdHlwZSgqdm0sIHByb3Rv
dHlwZSk7CiAgICAgcmV0dXJuIEpTR2xvYmFsQ29udGV4dFJldGFpbih0b0dsb2JhbFJlZihleGVj
KSk7CiB9CiAKQEAgLTEyNCw5ICsxMjQsOSBAQCBKU0dsb2JhbENvbnRleHRSZWYgSlNHbG9iYWxD
b250ZXh0UmV0YWluCiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwogICAgIEFQSUVu
dHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7CiAKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEg
PSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBnY1By
b3RlY3QoZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKLSAgICBnbG9iYWxEYXRhLnJlZigp
OworICAgIHZtLnJlZigpOwogICAgIHJldHVybiBjdHg7CiB9CiAKQEAgLTEzNywxMyArMTM3LDEz
IEBAIHZvaWQgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShKU0dsb2JhbENvbnQKICAgICB7CiAgICAg
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCi0gICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgc2F2ZWRJZGVudGlmaWVyVGFi
bGUgPSB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElkZW50aWZpZXJUYWJsZShnbG9iYWxEYXRh
LmlkZW50aWZpZXJUYWJsZSk7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAg
IHNhdmVkSWRlbnRpZmllclRhYmxlID0gd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlm
aWVyVGFibGUodm0uaWRlbnRpZmllclRhYmxlKTsKIAogICAgICAgICBib29sIHByb3RlY3RDb3Vu
dElzWmVybyA9IEhlYXA6OmhlYXAoZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKS0+dW5wcm90
ZWN0KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSk7CiAgICAgICAgIGlmIChwcm90ZWN0Q291
bnRJc1plcm8pCi0gICAgICAgICAgICBnbG9iYWxEYXRhLmhlYXAucmVwb3J0QWJhbmRvbmVkT2Jq
ZWN0R3JhcGgoKTsKLSAgICAgICAgZ2xvYmFsRGF0YS5kZXJlZigpOworICAgICAgICAgICAgdm0u
aGVhcC5yZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpOworICAgICAgICB2bS5kZXJlZigpOwog
ICAgIH0KIAogICAgIHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKHNh
dmVkSWRlbnRpZmllclRhYmxlKTsKQEAgLTE2MSw3ICsxNjEsNyBAQCBKU09iamVjdFJlZiBKU0Nv
bnRleHRHZXRHbG9iYWxPYmplY3QoSlNDCiBKU0NvbnRleHRHcm91cFJlZiBKU0NvbnRleHRHZXRH
cm91cChKU0NvbnRleHRSZWYgY3R4KQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4
KTsKLSAgICByZXR1cm4gdG9SZWYoJmV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgcmV0dXJuIHRv
UmVmKCZleGVjLT52bSgpKTsKIH0KIAogSlNHbG9iYWxDb250ZXh0UmVmIEpTQ29udGV4dEdldEds
b2JhbENvbnRleHQoSlNDb250ZXh0UmVmIGN0eCkKQEAgLTE3OCw3ICsxNzgsNyBAQCBKU1N0cmlu
Z1JlZiBKU0NvbnRleHRDcmVhdGVCYWNrdHJhY2UoSlNDCiAgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgIFZlY3RvcjxTdGFja0ZyYW1l
PiBzdGFja1RyYWNlOwotICAgIEludGVycHJldGVyOjpnZXRTdGFja1RyYWNlKCZleGVjLT5nbG9i
YWxEYXRhKCksIHN0YWNrVHJhY2UsIG1heFN0YWNrU2l6ZSk7CisgICAgSW50ZXJwcmV0ZXI6Omdl
dFN0YWNrVHJhY2UoJmV4ZWMtPnZtKCksIHN0YWNrVHJhY2UsIG1heFN0YWNrU2l6ZSk7CiAKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YWNrVHJhY2Uuc2l6ZSgpOyBpKyspIHsKICAgICAg
ICAgU3RyaW5nIHVybFN0cmluZzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNP
YmplY3RSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNP
YmplY3RSZWYuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTT2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCBKU09i
amVjdFJlZiBKU09iamVjdE1ha2UoSlNDb250ZXh0UmVmIGN0CiAKICAgICBKU0NhbGxiYWNrT2Jq
ZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Piogb2JqZWN0ID0gSlNDYWxsYmFja09iamVjdDxKU0Rl
c3RydWN0aWJsZU9iamVjdD46OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUo
KSwganNDbGFzcywgZGF0YSk7CiAgICAgaWYgKEpTT2JqZWN0KiBwcm90b3R5cGUgPSBqc0NsYXNz
LT5wcm90b3R5cGUoZXhlYykpCi0gICAgICAgIG9iamVjdC0+c2V0UHJvdG90eXBlKGV4ZWMtPmds
b2JhbERhdGEoKSwgcHJvdG90eXBlKTsKKyAgICAgICAgb2JqZWN0LT5zZXRQcm90b3R5cGUoZXhl
Yy0+dm0oKSwgcHJvdG90eXBlKTsKIAogICAgIHJldHVybiB0b1JlZihvYmplY3QpOwogfQpAQCAt
MTEwLDcgKzExMCw3IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUNvbnN0cnVjdG9yKEpTQ28K
ICAgICAgICAganNQcm90b3R5cGUgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVj
dFByb3RvdHlwZSgpOwogCiAgICAgSlNDYWxsYmFja0NvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvciA9
IEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jYWxsYmFja0NvbnN0cnVjdG9y
U3RydWN0dXJlKCksIGpzQ2xhc3MsIGNhbGxBc0NvbnN0cnVjdG9yKTsKLSAgICBjb25zdHJ1Y3Rv
ci0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnBy
b3RvdHlwZSwganNQcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsK
KyAgICBjb25zdHJ1Y3Rvci0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUsIGpzUHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFk
T25seSk7CiAgICAgcmV0dXJuIHRvUmVmKGNvbnN0cnVjdG9yKTsKIH0KIApAQCAtMTE5LDcgKzEx
OSw3IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUZ1bmN0aW9uKEpTQ29udGUKICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7CiAgICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShleGVj
KTsKIAotICAgIElkZW50aWZpZXIgbmFtZUlEID0gbmFtZSA/IG5hbWUtPmlkZW50aWZpZXIoJmV4
ZWMtPmdsb2JhbERhdGEoKSkgOiBJZGVudGlmaWVyKGV4ZWMsICJhbm9ueW1vdXMiKTsKKyAgICBJ
ZGVudGlmaWVyIG5hbWVJRCA9IG5hbWUgPyBuYW1lLT5pZGVudGlmaWVyKCZleGVjLT52bSgpKSA6
IElkZW50aWZpZXIoZXhlYywgImFub255bW91cyIpOwogICAgIAogICAgIE1hcmtlZEFyZ3VtZW50
QnVmZmVyIGFyZ3M7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlckNvdW50
OyBpKyspCkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBKU09iamVjdFNldFByb3RvdHlwZShKU0Nv
bnRleHRSZWYgYwogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKICAgICBK
U1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKIAotICAgIGpzT2JqZWN0LT5zZXRQ
cm90b3R5cGVXaXRoQ3ljbGVDaGVjayhleGVjLT5nbG9iYWxEYXRhKCksIGpzVmFsdWUuaXNPYmpl
Y3QoKSA/IGpzVmFsdWUgOiBqc051bGwoKSk7CisgICAganNPYmplY3QtPnNldFByb3RvdHlwZVdp
dGhDeWNsZUNoZWNrKGV4ZWMtPnZtKCksIGpzVmFsdWUuaXNPYmplY3QoKSA/IGpzVmFsdWUgOiBq
c051bGwoKSk7CiB9CiAKIGJvb2wgSlNPYmplY3RIYXNQcm9wZXJ0eShKU0NvbnRleHRSZWYgY3R4
LCBKU09iamVjdFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSkKQEAgLTI0Nyw3
ICsyNDcsNyBAQCBib29sIEpTT2JqZWN0SGFzUHJvcGVydHkoSlNDb250ZXh0UmVmIGN0CiAKICAg
ICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7CiAgICAgCi0gICAgcmV0dXJuIGpz
T2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMt
Pmdsb2JhbERhdGEoKSkpOworICAgIHJldHVybiBqc09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywg
cHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZleGVjLT52bSgpKSk7CiB9CiAKIEpTVmFsdWVSZWYg
SlNPYmplY3RHZXRQcm9wZXJ0eShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmplY3Qs
IEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpAQCAtMjU3
LDcgKzI1Nyw3IEBAIEpTVmFsdWVSZWYgSlNPYmplY3RHZXRQcm9wZXJ0eShKU0NvbnRleHQKIAog
ICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKIAotICAgIEpTVmFsdWUganNW
YWx1ZSA9IGpzT2JqZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZleGVj
LT5nbG9iYWxEYXRhKCkpKTsKKyAgICBKU1ZhbHVlIGpzVmFsdWUgPSBqc09iamVjdC0+Z2V0KGV4
ZWMsIHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmZXhlYy0+dm0oKSkpOwogICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBpZiAoZXhjZXB0aW9uKQogICAgICAgICAgICAg
KmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4ZWMtPmV4Y2VwdGlvbigpKTsKQEAgLTI3Miw3ICsy
NzIsNyBAQCB2b2lkIEpTT2JqZWN0U2V0UHJvcGVydHkoSlNDb250ZXh0UmVmIGN0CiAgICAgQVBJ
RW50cnlTaGltIGVudHJ5U2hpbShleGVjKTsKIAogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRv
SlMob2JqZWN0KTsKLSAgICBJZGVudGlmaWVyIG5hbWUocHJvcGVydHlOYW1lLT5pZGVudGlmaWVy
KCZleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICBJZGVudGlmaWVyIG5hbWUocHJvcGVydHlOYW1l
LT5pZGVudGlmaWVyKCZleGVjLT52bSgpKSk7CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhl
eGVjLCB2YWx1ZSk7CiAKICAgICBpZiAoYXR0cmlidXRlcyAmJiAhanNPYmplY3QtPmhhc1Byb3Bl
cnR5KGV4ZWMsIG5hbWUpKQpAQCAtMzI5LDcgKzMyOSw3IEBAIGJvb2wgSlNPYmplY3REZWxldGVQ
cm9wZXJ0eShKU0NvbnRleHRSZWYKIAogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2Jq
ZWN0KTsKIAotICAgIGJvb2wgcmVzdWx0ID0ganNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0
ZVByb3BlcnR5KGpzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMt
Pmdsb2JhbERhdGEoKSkpOworICAgIGJvb2wgcmVzdWx0ID0ganNPYmplY3QtPm1ldGhvZFRhYmxl
KCktPmRlbGV0ZVByb3BlcnR5KGpzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUtPmlkZW50aWZp
ZXIoJmV4ZWMtPnZtKCkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAgICAg
ICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBl
eGVjLT5leGNlcHRpb24oKSk7CkBAIC0zODIsNyArMzgyLDcgQEAgSlNWYWx1ZVJlZiBKU09iamVj
dEdldFByaXZhdGVQcm9wZXJ0eShKUwogICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7
CiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogICAgIEpTVmFsdWUgcmVz
dWx0OwotICAgIElkZW50aWZpZXIgbmFtZShwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMt
Pmdsb2JhbERhdGEoKSkpOworICAgIElkZW50aWZpZXIgbmFtZShwcm9wZXJ0eU5hbWUtPmlkZW50
aWZpZXIoJmV4ZWMtPnZtKCkpKTsKICAgICBpZiAoanNPYmplY3QtPmluaGVyaXRzKCZKU0NhbGxi
YWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6c19pbmZvKSkKICAgICAgICAgcmVzdWx0ID0ganND
YXN0PEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+Kj4oanNPYmplY3QpLT5nZXRQcml2
YXRlUHJvcGVydHkobmFtZSk7CiAgICAgZWxzZSBpZiAoanNPYmplY3QtPmluaGVyaXRzKCZKU0Nh
bGxiYWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6c19pbmZvKSkKQEAgLTQwMCwxOCAr
NDAwLDE4IEBAIGJvb2wgSlNPYmplY3RTZXRQcml2YXRlUHJvcGVydHkoSlNDb250ZXgKICAgICBB
UElFbnRyeVNoaW0gZW50cnlTaGltKGV4ZWMpOwogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRv
SlMob2JqZWN0KTsKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZSA/IHRvSlMoZXhlYywgdmFs
dWUpIDogSlNWYWx1ZSgpOwotICAgIElkZW50aWZpZXIgbmFtZShwcm9wZXJ0eU5hbWUtPmlkZW50
aWZpZXIoJmV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgIElkZW50aWZpZXIgbmFtZShwcm9wZXJ0
eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPnZtKCkpKTsKICAgICBpZiAoanNPYmplY3QtPmluaGVy
aXRzKCZKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6c19pbmZvKSkgewotICAgICAg
ICBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD4qPihqc09iamVjdCktPnNl
dFByaXZhdGVQcm9wZXJ0eShleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUsIGpzVmFsdWUpOworICAg
ICAgICBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD4qPihqc09iamVjdCkt
PnNldFByaXZhdGVQcm9wZXJ0eShleGVjLT52bSgpLCBuYW1lLCBqc1ZhbHVlKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChqc09iamVjdC0+aW5oZXJpdHMoJkpTQ2FsbGJh
Y2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+OjpzX2luZm8pKSB7Ci0gICAgICAgIGpzQ2Fz
dDxKU0NhbGxiYWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pio+KGpzT2JqZWN0KS0+c2V0
UHJpdmF0ZVByb3BlcnR5KGV4ZWMtPmdsb2JhbERhdGEoKSwgbmFtZSwganNWYWx1ZSk7CisgICAg
ICAgIGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pio+KGpzT2Jq
ZWN0KS0+c2V0UHJpdmF0ZVByb3BlcnR5KGV4ZWMtPnZtKCksIG5hbWUsIGpzVmFsdWUpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICBp
ZiAoanNPYmplY3QtPmluaGVyaXRzKCZKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVj
dD46OnNfaW5mbykpIHsKLSAgICAgICAganNDYXN0PEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFw
cGVyT2JqZWN0Pio+KGpzT2JqZWN0KS0+c2V0UHJpdmF0ZVByb3BlcnR5KGV4ZWMtPmdsb2JhbERh
dGEoKSwgbmFtZSwganNWYWx1ZSk7CisgICAgICAgIGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0PEpT
QVBJV3JhcHBlck9iamVjdD4qPihqc09iamVjdCktPnNldFByaXZhdGVQcm9wZXJ0eShleGVjLT52
bSgpLCBuYW1lLCBqc1ZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlm
CkBAIC00MjMsNyArNDIzLDcgQEAgYm9vbCBKU09iamVjdERlbGV0ZVByaXZhdGVQcm9wZXJ0eShK
U0NvbgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKICAgICBBUElFbnRyeVNoaW0g
ZW50cnlTaGltKGV4ZWMpOwogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsK
LSAgICBJZGVudGlmaWVyIG5hbWUocHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZleGVjLT5nbG9i
YWxEYXRhKCkpKTsKKyAgICBJZGVudGlmaWVyIG5hbWUocHJvcGVydHlOYW1lLT5pZGVudGlmaWVy
KCZleGVjLT52bSgpKSk7CiAgICAgaWYgKGpzT2JqZWN0LT5pbmhlcml0cygmSlNDYWxsYmFja09i
amVjdDxKU0dsb2JhbE9iamVjdD46OnNfaW5mbykpIHsKICAgICAgICAganNDYXN0PEpTQ2FsbGJh
Y2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+Kj4oanNPYmplY3QpLT5kZWxldGVQcml2YXRlUHJvcGVy
dHkobmFtZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNTI1LDE0ICs1MjUsMTQgQEAgSlNP
YmplY3RSZWYgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvcihKUwogc3RydWN0IE9wYXF1ZUpTUHJv
cGVydHlOYW1lQXJyYXkgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIE9wYXF1ZUpTUHJvcGVydHlOYW1lQXJyYXkoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQor
ICAgIE9wYXF1ZUpTUHJvcGVydHlOYW1lQXJyYXkoVk0qIHZtKQogICAgICAgICA6IHJlZkNvdW50
KDApCi0gICAgICAgICwgZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorICAgICAgICAsIHZtKHZtKQog
ICAgIHsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgcmVmQ291bnQ7Ci0gICAgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhOworICAgIFZNKiB2bTsKICAgICBWZWN0b3I8SlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+ID4gYXJyYXk7CiB9OwogCkBAIC01NDIsMTAgKzU0MiwxMCBAQCBKU1Byb3BlcnR5
TmFtZUFycmF5UmVmIEpTT2JqZWN0Q29weVByb3BlCiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9K
UyhjdHgpOwogICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7CiAKLSAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwogCi0gICAgSlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBwcm9wZXJ0eU5hbWVzID0g
bmV3IE9wYXF1ZUpTUHJvcGVydHlOYW1lQXJyYXkoZ2xvYmFsRGF0YSk7Ci0gICAgUHJvcGVydHlO
YW1lQXJyYXkgYXJyYXkoZ2xvYmFsRGF0YSk7CisgICAgSlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBw
cm9wZXJ0eU5hbWVzID0gbmV3IE9wYXF1ZUpTUHJvcGVydHlOYW1lQXJyYXkodm0pOworICAgIFBy
b3BlcnR5TmFtZUFycmF5IGFycmF5KHZtKTsKICAgICBqc09iamVjdC0+bWV0aG9kVGFibGUoKS0+
Z2V0UHJvcGVydHlOYW1lcyhqc09iamVjdCwgZXhlYywgYXJyYXksIEV4Y2x1ZGVEb250RW51bVBy
b3BlcnRpZXMpOwogCiAgICAgc2l6ZV90IHNpemUgPSBhcnJheS5zaXplKCk7CkBAIC01NjUsNyAr
NTY1LDcgQEAgSlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBKU1Byb3BlcnR5TmFtZUFycgogdm9pZCBK
U1Byb3BlcnR5TmFtZUFycmF5UmVsZWFzZShKU1Byb3BlcnR5TmFtZUFycmF5UmVmIGFycmF5KQog
ewogICAgIGlmICgtLWFycmF5LT5yZWZDb3VudCA9PSAwKSB7Ci0gICAgICAgIEFQSUVudHJ5U2hp
bSBlbnRyeVNoaW0oYXJyYXktPmdsb2JhbERhdGEsIGZhbHNlKTsKKyAgICAgICAgQVBJRW50cnlT
aGltIGVudHJ5U2hpbShhcnJheS0+dm0sIGZhbHNlKTsKICAgICAgICAgZGVsZXRlIGFycmF5Owog
ICAgIH0KIH0KQEAgLTU4Myw2ICs1ODMsNiBAQCBKU1N0cmluZ1JlZiBKU1Byb3BlcnR5TmFtZUFy
cmF5R2V0TmFtZUF0CiB2b2lkIEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JBZGROYW1lKEpTUHJv
cGVydHlOYW1lQWNjdW11bGF0b3JSZWYgYXJyYXksIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSkK
IHsKICAgICBQcm9wZXJ0eU5hbWVBcnJheSogcHJvcGVydHlOYW1lcyA9IHRvSlMoYXJyYXkpOwot
ICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0ocHJvcGVydHlOYW1lcy0+Z2xvYmFsRGF0YSgpKTsK
LSAgICBwcm9wZXJ0eU5hbWVzLT5hZGQocHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKHByb3BlcnR5
TmFtZXMtPmdsb2JhbERhdGEoKSkpOworICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0ocHJvcGVy
dHlOYW1lcy0+dm0oKSk7CisgICAgcHJvcGVydHlOYW1lcy0+YWRkKHByb3BlcnR5TmFtZS0+aWRl
bnRpZmllcihwcm9wZXJ0eU5hbWVzLT52bSgpKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTU2NyaXB0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTU2NyaXB0UmVmLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcg
KzI5LDcgQEAKICNpbmNsdWRlICJBUElTaGltcy5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIK
ICNpbmNsdWRlICJKU0Jhc2VQcml2YXRlLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisj
aW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJKU1NjcmlwdFJlZlByaXZhdGUuaCIKICNpbmNsdWRl
ICJPcGFxdWVKU1N0cmluZy5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKQEAgLTQxLDkgKzQx
LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogc3RydWN0IE9wYXF1ZUpTU2NyaXB0IDogcHVi
bGljIFNvdXJjZVByb3ZpZGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgV1RGOjpQYXNzUmVmUHRy
PE9wYXF1ZUpTU2NyaXB0PiBjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBT
dHJpbmcmIHVybCwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2Up
CisgICAgc3RhdGljIFdURjo6UGFzc1JlZlB0cjxPcGFxdWVKU1NjcmlwdD4gY3JlYXRlKFZNKiB2
bSwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIGNvbnN0IFN0cmlu
ZyYgc291cmNlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6YWRvcHRSZWYobmV3IE9wYXF1
ZUpTU2NyaXB0KGdsb2JhbERhdGEsIHVybCwgc3RhcnRpbmdMaW5lTnVtYmVyLCBzb3VyY2UpKTsK
KyAgICAgICAgcmV0dXJuIFdURjo6YWRvcHRSZWYobmV3IE9wYXF1ZUpTU2NyaXB0KHZtLCB1cmws
IHN0YXJ0aW5nTGluZU51bWJlciwgc291cmNlKSk7CiAgICAgfQogCiAgICAgY29uc3QgU3RyaW5n
JiBzb3VyY2UoKSBjb25zdCBPVkVSUklERQpAQCAtNTEsNDIgKzUxLDQyIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1fc291cmNlOwogICAgIH0KIAotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsRGF0YTsgfQorICAgIFZNKiB2bSgpIGNvbnN0
IHsgcmV0dXJuIG1fdm07IH0KIAogcHJpdmF0ZToKLSAgICBPcGFxdWVKU1NjcmlwdChKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgc3RhcnRpbmdMaW5lTnVt
YmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZSkKKyAgICBPcGFxdWVKU1NjcmlwdChWTSogdm0sIGNv
bnN0IFN0cmluZyYgdXJsLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNv
dXJjZSkKICAgICAgICAgOiBTb3VyY2VQcm92aWRlcih1cmwsIFRleHRQb3NpdGlvbihPcmRpbmFs
TnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc3RhcnRpbmdMaW5lTnVtYmVyKSwgT3JkaW5hbE51bWJl
cjo6Zmlyc3QoKSkpCi0gICAgICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgICAg
ICwgbV92bSh2bSkKICAgICAgICAgLCBtX3NvdXJjZShzb3VyY2UpCiAgICAgewogICAgIH0KIAog
ICAgIH5PcGFxdWVKU1NjcmlwdCgpIHsgfQogCi0gICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERh
dGE7CisgICAgVk0qIG1fdm07CiAgICAgU3RyaW5nIG1fc291cmNlOwogfTsKIAotc3RhdGljIGJv
b2wgcGFyc2VTY3JpcHQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIFBhcnNlckVycm9yJiBlcnJvcikKK3N0YXRpYyBib29sIHBhcnNlU2NyaXB0KFZN
KiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJzZXJFcnJvciYgZXJyb3IpCiB7Ci0g
ICAgcmV0dXJuIEpTQzo6cGFyc2U8SlNDOjpQcm9ncmFtTm9kZT4oZ2xvYmFsRGF0YSwgc291cmNl
LCAwLCBJZGVudGlmaWVyKCksIEpTUGFyc2VOb3JtYWwsIEpTUGFyc2VQcm9ncmFtQ29kZSwgZXJy
b3IpOworICAgIHJldHVybiBKU0M6OnBhcnNlPEpTQzo6UHJvZ3JhbU5vZGU+KHZtLCBzb3VyY2Us
IDAsIElkZW50aWZpZXIoKSwgSlNQYXJzZU5vcm1hbCwgSlNQYXJzZVByb2dyYW1Db2RlLCBlcnJv
cik7CiB9CiAKIGV4dGVybiAiQyIgewogCiBKU1NjcmlwdFJlZiBKU1NjcmlwdENyZWF0ZVJlZmVy
ZW5jaW5nSW1tb3J0YWxBU0NJSVRleHQoSlNDb250ZXh0R3JvdXBSZWYgY29udGV4dEdyb3VwLCBK
U1N0cmluZ1JlZiB1cmwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIGNvbnN0IGNoYXIqIHNvdXJj
ZSwgc2l6ZV90IGxlbmd0aCwgSlNTdHJpbmdSZWYqIGVycm9yTWVzc2FnZSwgaW50KiBlcnJvckxp
bmUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gdG9KUyhjb250ZXh0R3JvdXAp
OwotICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZ2xvYmFsRGF0YSk7CisgICAgVk0qIHZtID0g
dG9KUyhjb250ZXh0R3JvdXApOworICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0odm0pOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgaWYgKCFpc0FT
Q0lJKHNvdXJjZVtpXSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQ
dHI8T3BhcXVlSlNTY3JpcHQ+IHJlc3VsdCA9IE9wYXF1ZUpTU2NyaXB0OjpjcmVhdGUoZ2xvYmFs
RGF0YSwgdXJsLT5zdHJpbmcoKSwgc3RhcnRpbmdMaW5lTnVtYmVyLCBTdHJpbmcoU3RyaW5nSW1w
bDo6Y3JlYXRlRnJvbUxpdGVyYWwoc291cmNlLCBsZW5ndGgpKSk7CisgICAgUmVmUHRyPE9wYXF1
ZUpTU2NyaXB0PiByZXN1bHQgPSBPcGFxdWVKU1NjcmlwdDo6Y3JlYXRlKHZtLCB1cmwtPnN0cmlu
ZygpLCBzdGFydGluZ0xpbmVOdW1iZXIsIFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0
ZXJhbChzb3VyY2UsIGxlbmd0aCkpKTsKIAogICAgIFBhcnNlckVycm9yIGVycm9yOwotICAgIGlm
ICghcGFyc2VTY3JpcHQoZ2xvYmFsRGF0YSwgU291cmNlQ29kZShyZXN1bHQpLCBlcnJvcikpIHsK
KyAgICBpZiAoIXBhcnNlU2NyaXB0KHZtLCBTb3VyY2VDb2RlKHJlc3VsdCksIGVycm9yKSkgewog
ICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKQogICAgICAgICAgICAgKmVycm9yTWVzc2FnZSA9IE9w
YXF1ZUpTU3RyaW5nOjpjcmVhdGUoZXJyb3IubV9tZXNzYWdlKS5sZWFrUmVmKCk7CiAgICAgICAg
IGlmIChlcnJvckxpbmUpCkBAIC05OSwxMyArOTksMTMgQEAgSlNTY3JpcHRSZWYgSlNTY3JpcHRD
cmVhdGVSZWZlcmVuY2luZ0ltbQogCiBKU1NjcmlwdFJlZiBKU1NjcmlwdENyZWF0ZUZyb21TdHJp
bmcoSlNDb250ZXh0R3JvdXBSZWYgY29udGV4dEdyb3VwLCBKU1N0cmluZ1JlZiB1cmwsIGludCBz
dGFydGluZ0xpbmVOdW1iZXIsIEpTU3RyaW5nUmVmIHNvdXJjZSwgSlNTdHJpbmdSZWYqIGVycm9y
TWVzc2FnZSwgaW50KiBlcnJvckxpbmUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gdG9KUyhjb250ZXh0R3JvdXApOwotICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZ2xvYmFs
RGF0YSk7CisgICAgVk0qIHZtID0gdG9KUyhjb250ZXh0R3JvdXApOworICAgIEFQSUVudHJ5U2hp
bSBlbnRyeVNoaW0odm0pOwogCi0gICAgUmVmUHRyPE9wYXF1ZUpTU2NyaXB0PiByZXN1bHQgPSBP
cGFxdWVKU1NjcmlwdDo6Y3JlYXRlKGdsb2JhbERhdGEsIHVybC0+c3RyaW5nKCksIHN0YXJ0aW5n
TGluZU51bWJlciwgc291cmNlLT5zdHJpbmcoKSk7CisgICAgUmVmUHRyPE9wYXF1ZUpTU2NyaXB0
PiByZXN1bHQgPSBPcGFxdWVKU1NjcmlwdDo6Y3JlYXRlKHZtLCB1cmwtPnN0cmluZygpLCBzdGFy
dGluZ0xpbmVOdW1iZXIsIHNvdXJjZS0+c3RyaW5nKCkpOwogCiAgICAgUGFyc2VyRXJyb3IgZXJy
b3I7Ci0gICAgaWYgKCFwYXJzZVNjcmlwdChnbG9iYWxEYXRhLCBTb3VyY2VDb2RlKHJlc3VsdCks
IGVycm9yKSkgeworICAgIGlmICghcGFyc2VTY3JpcHQodm0sIFNvdXJjZUNvZGUocmVzdWx0KSwg
ZXJyb3IpKSB7CiAgICAgICAgIGlmIChlcnJvck1lc3NhZ2UpCiAgICAgICAgICAgICAqZXJyb3JN
ZXNzYWdlID0gT3BhcXVlSlNTdHJpbmc6OmNyZWF0ZShlcnJvci5tX21lc3NhZ2UpLmxlYWtSZWYo
KTsKICAgICAgICAgaWYgKGVycm9yTGluZSkKQEAgLTExOCwxMyArMTE4LDEzIEBAIEpTU2NyaXB0
UmVmIEpTU2NyaXB0Q3JlYXRlRnJvbVN0cmluZyhKU0MKIAogdm9pZCBKU1NjcmlwdFJldGFpbihK
U1NjcmlwdFJlZiBzY3JpcHQpCiB7Ci0gICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShzY3JpcHQt
Pmdsb2JhbERhdGEoKSk7CisgICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShzY3JpcHQtPnZtKCkp
OwogICAgIHNjcmlwdC0+cmVmKCk7CiB9CiAKIHZvaWQgSlNTY3JpcHRSZWxlYXNlKEpTU2NyaXB0
UmVmIHNjcmlwdCkKIHsKLSAgICBBUElFbnRyeVNoaW0gZW50cnlTaGltKHNjcmlwdC0+Z2xvYmFs
RGF0YSgpKTsKKyAgICBBUElFbnRyeVNoaW0gZW50cnlTaGltKHNjcmlwdC0+dm0oKSk7CiAgICAg
c2NyaXB0LT5kZXJlZigpOwogfQogCkBAIC0xMzIsNyArMTMyLDcgQEAgSlNWYWx1ZVJlZiBKU1Nj
cmlwdEV2YWx1YXRlKEpTQ29udGV4dFJlZgogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMo
Y29udGV4dCk7CiAgICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShleGVjKTsKLSAgICBpZiAoc2Ny
aXB0LT5nbG9iYWxEYXRhKCkgIT0gJmV4ZWMtPmdsb2JhbERhdGEoKSkgeworICAgIGlmIChzY3Jp
cHQtPnZtKCkgIT0gJmV4ZWMtPnZtKCkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQkocmV2aXNpb24gMTQ4NjM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjQsMTAgKzIyNCwxMCBAQCAtIChOU01hcFRhYmxlICopZXh0ZXJuYWxPYmplY3RH
cmFwaAogCiBAZW5kCiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJvb3Qp
Cit2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yLCB2b2lkKiByb290KQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAg
ICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtKU1ZpcnR1YWxNYWNoaW5l
IHZpcnR1YWxNYWNoaW5lV2l0aENvbnRleHRHcm91cFJlZjp0b1JlZigmZ2xvYmFsRGF0YSldOwor
ICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtKU1ZpcnR1YWxNYWNo
aW5lIHZpcnR1YWxNYWNoaW5lV2l0aENvbnRleHRHcm91cFJlZjp0b1JlZigmdm0pXTsKICAgICAg
ICAgTlNNYXBUYWJsZSAqZXh0ZXJuYWxPYmplY3RHcmFwaCA9IFt2aXJ0dWFsTWFjaGluZSBleHRl
cm5hbE9iamVjdEdyYXBoXTsKICAgICAgICAgVmVjdG9yPHZvaWQqPiBzdGFjazsKICAgICAgICAg
c3RhY2suYXBwZW5kKHJvb3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Zp
cnR1YWxNYWNoaW5lSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIAog
bmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIGNsYXNzIFNs
b3RWaXNpdG9yOwogfQogCkBAIC01MCw3ICs1MCw3IEBAIEpTQ29udGV4dEdyb3VwUmVmIGdldEdy
b3VwRnJvbVZpcnR1YWxNYWMKIEBlbmQKICNlbmRpZiAvLyBkZWZpbmVkKF9fT0JKQ19fKQogCi12
b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6SlNHbG9iYWxEYXRhJiwgSlNDOjpTbG90
VmlzaXRvciYsIHZvaWQqIHJvb3QpOwordm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6
OlZNJiwgSlNDOjpTbG90VmlzaXRvciYsIHZvaWQqIHJvb3QpOwogCiAjZW5kaWYKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0JKHJldmlzaW9uIDE0ODYz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgc3RhdGljIEpTT2JqZWN0UmVmIG1ha2VXcmFwcGVy
KEpTQ29udGV4dAogICAgIEpTQzo6SlNDYWxsYmFja09iamVjdDxKU0M6OkpTQVBJV3JhcHBlck9i
amVjdD4qIG9iamVjdCA9IEpTQzo6SlNDYWxsYmFja09iamVjdDxKU0M6OkpTQVBJV3JhcHBlck9i
amVjdD46OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+b2JqY1dyYXBwZXJPYmplY3RTdHJ1Y3R1cmUoKSwganNDbGFz
cywgMCk7CiAgICAgb2JqZWN0LT5zZXRXcmFwcGVkT2JqZWN0KHdyYXBwZWRPYmplY3QpOwogICAg
IGlmIChKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUgPSBqc0NsYXNzLT5wcm90b3R5cGUoZXhlYykp
Ci0gICAgICAgIG9iamVjdC0+c2V0UHJvdG90eXBlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvdG90
eXBlKTsKKyAgICAgICAgb2JqZWN0LT5zZXRQcm90b3R5cGUoZXhlYy0+dm0oKSwgcHJvdG90eXBl
KTsKIAogICAgIHJldHVybiB0b1JlZihvYmplY3QpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAkocmV2aXNpb24gMTQ4NjM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC00OSwxMCArNDksMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBPYmpD
Q2FsbGJhY2tGdW5jdGlvbiogY3JlYXRlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgY29u
c3QgU3RyaW5nJiBuYW1lLCBQYXNzT3duUHRyPE9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbD4pOwog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChnbG9iYWxPYmplY3QpOwot
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CiAgICAgfQogCiAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5m
bzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24u
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tG
dW5jdGlvbi5tbQkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDc3LDcgKzQ3Nyw3
IEBAIE9iakNDYWxsYmFja0Z1bmN0aW9uOjpPYmpDQ2FsbGJhY2tGdW5jdGkKIE9iakNDYWxsYmFj
a0Z1bmN0aW9uKiBPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgUGFzc093blB0cjxPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw+IGltcGwpCiB7CiAgICAgT2Jq
Q0NhbGxiYWNrRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
T2JqQ0NhbGxiYWNrRnVuY3Rpb24+KCpleGVjLT5oZWFwKCkpKSBPYmpDQ2FsbGJhY2tGdW5jdGlv
bihnbG9iYWxPYmplY3QsIG9iakNDYWxsYmFja0Z1bmN0aW9uQ2FsbEFzRnVuY3Rpb24sIGltcGwp
OwotICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUp
OworICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpLCBuYW1lKTsKICAgICBy
ZXR1cm4gZnVuY3Rpb247CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT3Bh
cXVlSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
T3BhcXVlSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL09wYXF1ZUpTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgs
NyBAQCBTdHJpbmcgT3BhcXVlSlNTdHJpbmc6OnN0cmluZygpIGNvbnN0CiAgICAgcmV0dXJuIG1f
c3RyaW5nLmlzb2xhdGVkQ29weSgpOwogfQogCi1JZGVudGlmaWVyIE9wYXF1ZUpTU3RyaW5nOjpp
ZGVudGlmaWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkgY29uc3QKK0lkZW50aWZpZXIgT3Bh
cXVlSlNTdHJpbmc6OmlkZW50aWZpZXIoVk0qIHZtKSBjb25zdAogewogICAgIGlmICghdGhpcyB8
fCBtX3N0cmluZy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIElkZW50aWZpZXIoKTsKQEAgLTU3
LDcgKzU3LDcgQEAgSWRlbnRpZmllciBPcGFxdWVKU1N0cmluZzo6aWRlbnRpZmllcihKUwogICAg
ICAgICByZXR1cm4gSWRlbnRpZmllcihJZGVudGlmaWVyOjpFbXB0eUlkZW50aWZpZXIpOwogCiAg
ICAgaWYgKG1fc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gSWRlbnRpZmllcihnbG9i
YWxEYXRhLCBtX3N0cmluZy5jaGFyYWN0ZXJzOCgpLCBtX3N0cmluZy5sZW5ndGgoKSk7CisgICAg
ICAgIHJldHVybiBJZGVudGlmaWVyKHZtLCBtX3N0cmluZy5jaGFyYWN0ZXJzOCgpLCBtX3N0cmlu
Zy5sZW5ndGgoKSk7CiAKLSAgICByZXR1cm4gSWRlbnRpZmllcihnbG9iYWxEYXRhLCBtX3N0cmlu
Zy5jaGFyYWN0ZXJzMTYoKSwgbV9zdHJpbmcubGVuZ3RoKCkpOworICAgIHJldHVybiBJZGVudGlm
aWVyKHZtLCBtX3N0cmluZy5jaGFyYWN0ZXJzMTYoKSwgbV9zdHJpbmcubGVuZ3RoKCkpOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PcGFxdWVKU1N0cmluZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT3BhcXVlSlNTdHJpbmcuaAkocmV2aXNp
b24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PcGFxdWVKU1N0cmluZy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogICAg
IGNsYXNzIElkZW50aWZpZXI7Ci0gICAgY2xhc3MgSlNHbG9iYWxEYXRhOworICAgIGNsYXNzIFZN
OwogfQogCiBzdHJ1Y3QgT3BhcXVlSlNTdHJpbmcgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8T3BhcXVlSlNTdHJpbmc+IHsKQEAgLTU3LDcgKzU3LDcgQEAgc3RydWN0IE9wYXF1ZUpTU3Ry
aW5nIDogcHVibGljIFRocmVhZFNhZgogICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuICEh
dGhpcyA/IG1fc3RyaW5nLmxlbmd0aCgpIDogMDsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
U3RyaW5nIHN0cmluZygpIGNvbnN0OwotICAgIEpTQzo6SWRlbnRpZmllciBpZGVudGlmaWVyKEpT
Qzo6SlNHbG9iYWxEYXRhKikgY29uc3Q7CisgICAgSlNDOjpJZGVudGlmaWVyIGlkZW50aWZpZXIo
SlNDOjpWTSopIGNvbnN0OwogI2lmIFBMQVRGT1JNKFFUKQogICAgIFFTdHJpbmcgcVN0cmluZygp
IGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nOyB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCShyZXZpc2lv
biAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAt
ODU0LDExICs4NTQsMTEgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5cLi5ccnVudGltZVxKU0dsb2JhbERhdGEuY3BwIgorCQkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5ccnVudGltZVxWTS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSlNHbG9iYWxEYXRhLmgiCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlxydW50aW1lXFZNLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmVFeHBvcnRzLmRlZgo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlRXhwb3J0cy5kZWYJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmVFeHBvcnRzLmRlZgkod29ya2luZyBjb3B5KQpAQCAtMSwyMiArMSwyMiBAQAogRVhQT1JUUwog
CiAgICAgPz8wQXJyYXlCdWZmZXJWaWV3QFdURkBASUFFQFY/JFBhc3NSZWZQdHJAVkFycmF5QnVm
ZmVyQFdURkBAQDFASUBaCi0gICAgPz8wQm9vbGVhbk9iamVjdEBKU0NAQElBRUBBQVZKU0dsb2Jh
bERhdGFAMUBQQVZTdHJ1Y3R1cmVAMUBAWgorICAgID8/MEJvb2xlYW5PYmplY3RASlNDQEBJQUVA
QUFWVk1AMUBQQVZTdHJ1Y3R1cmVAMUBAWgogICAgID8/MENvbGxhdG9yQFdURkBAUUFFQFBCREBa
CiAgICAgPz8wQ1N0cmluZ0BXVEZAQFFBRUBQQkRAWgogICAgID8/MENTdHJpbmdAV1RGQEBRQUVA
UEJESUBaCi0gICAgPz8wRGF0YWJhc2VAUHJvZmlsZXJASlNDQEBRQUVAQUFWSlNHbG9iYWxEYXRh
QDJAQFoKKyAgICA/PzBEYXRhYmFzZUBQcm9maWxlckBKU0NAQFFBRUBBQVZWTUAyQEBaCiAgICAg
Pz8wRGF0ZUluc3RhbmNlQEpTQ0BASUFFQFBBVkV4ZWNTdGF0ZUAxQFBBVlN0cnVjdHVyZUAxQEBa
CiAgICAgPz8wRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFja0BKU0NAQFFBRUBQQVZIZWFwQDFAQFoK
ICAgICA/PzBEcm9wQWxsTG9ja3NASlNMb2NrQEpTQ0BAUUFFQFBBVkV4ZWNTdGF0ZUAyQEBaCi0g
ICAgPz8wRHJvcEFsbExvY2tzQEpTTG9ja0BKU0NAQFFBRUBQQVZKU0dsb2JhbERhdGFAMkBAWgot
ICAgID8/MER5bmFtaWNHbG9iYWxPYmplY3RTY29wZUBKU0NAQFFBRUBBQVZKU0dsb2JhbERhdGFA
MUBQQVZKU0dsb2JhbE9iamVjdEAxQEBaIAorICAgID8/MERyb3BBbGxMb2Nrc0BKU0xvY2tASlND
QEBRQUVAUEFWVk1AMkBAWgorICAgID8/MER5bmFtaWNHbG9iYWxPYmplY3RTY29wZUBKU0NAQFFB
RUBBQVZWTUAxQFBBVkpTR2xvYmFsT2JqZWN0QDFAQFogCiAgICAgPz8wRXJyb3JIYW5kbGluZ01v
ZGVASW50ZXJwcmV0ZXJASlNDQEBRQUVAUEFWRXhlY1N0YXRlQDJAQFoKICAgICA/PzBJbnRlcm5h
bEZ1bmN0aW9uQEpTQ0BASUFFQFBBVkpTR2xvYmFsT2JqZWN0QDFAUEFWU3RydWN0dXJlQDFAQFoK
LSAgICA/PzBKU0dsb2JhbE9iamVjdEBKU0NAQElBRUBBQVZKU0dsb2JhbERhdGFAMUBQQVZTdHJ1
Y3R1cmVAMUBQQlVHbG9iYWxPYmplY3RNZXRob2RUYWJsZUAxQEBaCi0gICAgPz8wSlNMb2NrSG9s
ZGVyQEpTQ0BAUUFFQEFBVkpTR2xvYmFsRGF0YUAxQEBaCisgICAgPz8wSlNHbG9iYWxPYmplY3RA
SlNDQEBJQUVAQUFWVk1AMUBQQVZTdHJ1Y3R1cmVAMUBQQlVHbG9iYWxPYmplY3RNZXRob2RUYWJs
ZUAxQEBaCisgICAgPz8wSlNMb2NrSG9sZGVyQEpTQ0BAUUFFQEFBVlZNQDFAQFoKICAgICA/PzBK
U0xvY2tIb2xkZXJASlNDQEBRQUVAUEFWRXhlY1N0YXRlQDFAQFoKLSAgICA/PzBKU0xvY2tIb2xk
ZXJASlNDQEBRQUVAUEFWSlNHbG9iYWxEYXRhQDFAQFoKKyAgICA/PzBKU0xvY2tIb2xkZXJASlND
QEBRQUVAUEFWVk1AMUBAWgogICAgID8/ME1ENUBXVEZAQFFBRUBYWgogICAgID8/ME1lZGlhVGlt
ZUBXVEZAQFFBRUBfSkhJQFogCiAgICAgPz8wTWVtb3J5SW5zdHJ1bWVudGF0aW9uQFdURkBAUUFF
QFBBVk1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEAxQEBaCkBAIC0zMywyMSArMzMsMjEgQEAg
RVhQT1JUUwogICAgID8/MFN0cmluZ0BXVEZAQFFBRUBQQkRJQFoKICAgICA/PzBTdHJpbmdAV1RG
QEBRQUVAUEJFSUBaCiAgICAgPz8wU3RyaW5nQFdURkBAUUFFQFZBU0NJSUxpdGVyYWxAMUBAWgot
ICAgID8/MFN0cmluZ09iamVjdEBKU0NAQElBRUBBQVZKU0dsb2JhbERhdGFAMUBQQVZTdHJ1Y3R1
cmVAMUBAWgorICAgID8/MFN0cmluZ09iamVjdEBKU0NAQElBRUBBQVZWTUAxQFBBVlN0cnVjdHVy
ZUAxQEBaCiAgICAgPz8wU3RyaW5nUHJpbnRTdHJlYW1AV1RGQEBRQUVAWFoKLSAgICA/PzBTdHJ1
Y3R1cmVASlNDQEBBQUVAQUFWSlNHbG9iYWxEYXRhQDFAUEFWSlNHbG9iYWxPYmplY3RAMUBWSlNW
YWx1ZUAxQEFCVlR5cGVJbmZvQDFAUEJVQ2xhc3NJbmZvQDFARUlAWgorICAgID8/MFN0cnVjdHVy
ZUBKU0NAQEFBRUBBQVZWTUAxQFBBVkpTR2xvYmFsT2JqZWN0QDFAVkpTVmFsdWVAMUBBQlZUeXBl
SW5mb0AxQFBCVUNsYXNzSW5mb0AxQEVJQFoKICAgICA/PzBUaHJlYWRDb25kaXRpb25AV1RGQEBR
QUVAWFoKICAgICA/PzBXcmFwcGVyQmFzZUBNZW1vcnlJbnN0cnVtZW50YXRpb25AV1RGQEBRQUVA
UEJEUEJYQFoKICAgICA/PzBXVEZUaHJlYWREYXRhQFdURkBAUUFFQFhaCiAgICAgPz8wWWFyclBh
dHRlcm5AWWFyckBKU0NAQFFBRUBBQlZTdHJpbmdAV1RGQEBfTjFQQVBCREBaCiAgICAgPz8xQXJy
YXlCdWZmZXJWaWV3QFdURkBAVUFFQFhaCi0gICAgPz8xQ2xpZW50RGF0YUBKU0dsb2JhbERhdGFA
SlNDQEBVQUVAWFoKKyAgICA/PzFDbGllbnREYXRhQFZNQEpTQ0BAVUFFQFhaCiAgICAgPz8xQ29s
bGF0b3JAV1RGQEBRQUVAWFoKICAgICA/PzFEYXRhYmFzZUBQcm9maWxlckBKU0NAQFFBRUBYWgog
ICAgID8/MURlYnVnZ2VyQEpTQ0BAVUFFQFhaCiAgICAgPz8xRHJvcEFsbExvY2tzQEpTTG9ja0BK
U0NAQFFBRUBYWgogICAgID8/MUVycm9ySGFuZGxpbmdNb2RlQEludGVycHJldGVyQEpTQ0BAUUFF
QFhaCi0gICAgPz8xSlNHbG9iYWxEYXRhQEpTQ0BAUUFFQFhaCisgICAgPz8xVk1ASlNDQEBRQUVA
WFoKICAgICA/PzFKU0dsb2JhbE9iamVjdEBKU0NAQFFBRUBYWgogICAgID8/MUpTTG9ja0hvbGRl
ckBKU0NAQFFBRUBYWgogICAgID8/MU1lZGlhVGltZUBXVEZAQFFBRUBYWiAKQEAgLTc4LDcgKzc4
LDcgQEAgRVhQT1JUUwogICAgID9hZGRAQXRvbWljU3RyaW5nQFdURkBAQ0E/QVY/JFBhc3NSZWZQ
dHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBQQkRAWgogICAgID9hZGRAQXRvbWljU3RyaW5nQFdURkBA
Q0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBQQkVAWgogICAgID9hZGRAQXRv
bWljU3RyaW5nQFdURkBAQ0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBQQkVJ
QFoKLSAgICA/YWRkQElkZW50aWZpZXJASlNDQEBDQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1w
bEBXVEZAQEBXVEZAQFBBVkpTR2xvYmFsRGF0YUAyQFBBVlN0cmluZ0ltcGxANEBAWgorICAgID9h
ZGRASWRlbnRpZmllckBKU0NAQENBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQFdU
RkBAUEFWVk1AMkBQQVZTdHJpbmdJbXBsQDRAQFoKICAgICA/YWRkQElkZW50aWZpZXJASlNDQEBT
QT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEBXVEZAQFBBVkV4ZWNTdGF0ZUAyQFBC
REBaCiAgICAgP2FkZEBQcm9wZXJ0eU5hbWVBcnJheUBKU0NAQFFBRVhQQVZTdHJpbmdJbXBsQFdU
RkBAQFoKICAgICA/YWRkQnl0ZXNATUQ1QFdURkBAUUFFWFBCRUlAWgpAQCAtODYsMTQgKzg2LDE0
IEBAIEVYUE9SVFMKICAgICA/YWRkQ3VycmVudFRocmVhZEBNYWNoaW5lVGhyZWFkc0BKU0NAQFFB
RVhYWgogICAgID9hZGRGaW5hbGl6ZXJASGVhcEBKU0NAQFFBRVhQQVZKU0NlbGxAMkBQNkFYMEBa
QFoKICAgICA/YWRkRnJvbUxpdGVyYWxEYXRhQEF0b21pY1N0cmluZ0BXVEZAQENBP0FWPyRQYXNz
UmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQDJAUEJESUBaCi0gICAgP2FkZFByb3BlcnR5VHJhbnNp
dGlvbkBTdHJ1Y3R1cmVASlNDQEBTQVBBVjEyQEFBVkpTR2xvYmFsRGF0YUAyQFBBVjEyQFZQcm9w
ZXJ0eU5hbWVAMkBJUEFWSlNDZWxsQDJAQUFIQFoKKyAgICA/YWRkUHJvcGVydHlUcmFuc2l0aW9u
QFN0cnVjdHVyZUBKU0NAQFNBUEFWMTJAQUFWVk1AMkBQQVYxMkBWUHJvcGVydHlOYW1lQDJASVBB
VkpTQ2VsbEAyQEFBSEBaCiAgICAgP2FkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1
Y3R1cmVAU3RydWN0dXJlQEpTQ0BAU0FQQVYxMkBQQVYxMkBWUHJvcGVydHlOYW1lQDJASVBBVkpT
Q2VsbEAyQEFBSEBaCi0gICAgP2FkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb25AU3RydWN0dXJl
QEpTQ0BAUUFFSEFBVkpTR2xvYmFsRGF0YUAyQFZQcm9wZXJ0eU5hbWVAMkBJUEFWSlNDZWxsQDJA
QFoKKyAgICA/YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbkBTdHJ1Y3R1cmVASlNDQEBRQUVI
QUFWVk1AMkBWUHJvcGVydHlOYW1lQDJASVBBVkpTQ2VsbEAyQEBaCiAgICAgP2FkZFByaXZhdGVC
dWZmZXJATWVtb3J5Q2xhc3NJbmZvQFdURkBAUUFFWElQQkQwMEBaCiAgICAgP2FkZFJhd0J1ZmZl
ckBNZW1vcnlDbGFzc0luZm9AV1RGQEBRQUVYUEJYSVBCRDFAWgogICAgID9hZGRTbG93Q2FzZUBB
dG9taWNTdHJpbmdAV1RGQEBDQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAyQFBB
VlN0cmluZ0ltcGxAMkBAWgogICAgID9hZGRTbG93Q2FzZUBJZGVudGlmaWVyQEpTQ0BAQ0E/QVY/
JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAV1RGQEBQQVZFeGVjU3RhdGVAMkBQQVZTdHJp
bmdJbXBsQDRAQFoKLSAgICA/YWRkU2xvd0Nhc2VASWRlbnRpZmllckBKU0NAQENBP0FWPyRQYXNz
UmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQFdURkBAUEFWSlNHbG9iYWxEYXRhQDJAUEFWU3RyaW5n
SW1wbEA0QEBaCisgICAgP2FkZFNsb3dDYXNlQElkZW50aWZpZXJASlNDQEBDQT9BVj8kUGFzc1Jl
ZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEBXVEZAQFBBVlZNQDJAUEFWU3RyaW5nSW1wbEA0QEBaCiAg
ICAgP2FkZFN0YXRpY0dsb2JhbHNASlNHbG9iYWxPYmplY3RASlNDQEBJQUVYUEFVR2xvYmFsUHJv
cGVydHlJbmZvQDEyQEhAWgogICAgID9hZG9wdEBTdHJpbmdJbXBsQFdURkBAU0E/QVY/JFBhc3NS
ZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBBQVY/JFN0cmluZ0J1ZmZlckBfV0AyQEBaCiAgICAg
P2Fkb3B0QFN0cmluZ0ltcGxAV1RGQEBTQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZA
QEAyQEFBVj8kU3RyaW5nQnVmZmVyQEVAMkBAWgpAQCAtMTMyLDcgKzEzMiw3IEBAIEVYUE9SVFMK
ICAgICA/Y2FuY2VsQ2FsbE9uTWFpblRocmVhZEBXVEZAQFlBWFA2QVhQQVhAWjBAWgogICAgID9j
YW5TaHJpbmtAU3RyaW5nQnVpbGRlckBXVEZAQFFCRV9OWFoKICAgICA/Y2FwYWNpdHlASGVhcEBK
U0NAQFFBRUlYWgotICAgID9jaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uQFN0cnVjdHVyZUBKU0NA
QFNBUEFWMTJAQUFWSlNHbG9iYWxEYXRhQDJAUEFWMTJAVkpTVmFsdWVAMkBAWgorICAgID9jaGFu
Z2VQcm90b3R5cGVUcmFuc2l0aW9uQFN0cnVjdHVyZUBKU0NAQFNBUEFWMTJAQUFWVk1AMkBQQVYx
MkBWSlNWYWx1ZUAyQEBaCiAgICAgP2NoYXJhY3RlclN0YXJ0aW5nQXRAU3RyaW5nQFdURkBAUUJF
SElAWgogICAgID9jaGFyYWN0ZXJzVG9Eb3VibGVAV1RGQEBZQU5QQl9XSVBBX05AWgogICAgID9j
aGFyYWN0ZXJzVG9Eb3VibGVAV1RGQEBZQU5QQkVJUEFfTkBaCkBAIC0xNDQsNyArMTQ0LDcgQEAg
RVhQT1JUUwogICAgID9jaGFyYWN0ZXJzVG9VSW50U3RyaWN0QFdURkBAWUFJUEJFSVBBX05IQFoK
ICAgICA/Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb25AU3RyaW5nQFdURkBAUUFFUEJfV1ha
CiAgICAgP2NoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZUBJZGVudGlmaWVyQEpTQ0BAQ0FYUEFW
RXhlY1N0YXRlQDJAQFoKLSAgICA/Y2hlY2tDdXJyZW50SWRlbnRpZmllclRhYmxlQElkZW50aWZp
ZXJASlNDQEBDQVhQQVZKU0dsb2JhbERhdGFAMkBAWgorICAgID9jaGVja0N1cnJlbnRJZGVudGlm
aWVyVGFibGVASWRlbnRpZmllckBKU0NAQENBWFBBVlZNQDJAQFoKICAgICA/Y2hlY2tzdW1ATUQ1
QFdURkBAUUFFWEFBVj8kVmVjdG9yQEUkMEJBQFZDcmFzaE9uT3ZlcmZsb3dAV1RGQEBAMkBAWgog
ICAgID9jaGVja1N5bnRheEBKU0NAQFlBX05QQVZFeGVjU3RhdGVAMUBBQlZTb3VyY2VDb2RlQDFA
UEFWSlNWYWx1ZUAxQEBaCiAgICAgP2NsYXNzTmFtZUBKU09iamVjdEBKU0NAQFNBP0FWU3RyaW5n
QFdURkBAUEJWMTJAQFoKQEAgLTE2MywzMSArMTYzLDMxIEBAIEVYUE9SVFMKICAgICA/Y29uc3Ry
dWN0TnVtYmVyQEpTQ0BAWUFQQVZOdW1iZXJPYmplY3RAMUBQQVZFeGVjU3RhdGVAMUBQQVZKU0ds
b2JhbE9iamVjdEAxQFZKU1ZhbHVlQDFAQFoKICAgICA/Y29uc3RydWN0U3RyaW5nQEpTQ0BAWUFQ
QVZTdHJpbmdPYmplY3RAMUBQQVZFeGVjU3RhdGVAMUBQQVZKU0dsb2JhbE9iamVjdEAxQFZKU1Zh
bHVlQDFAQFoKICAgICA/Y29udGFpbnNPbmx5V2hpdGVzcGFjZUBTdHJpbmdJbXBsQFdURkBAUUFF
X05YWgotICAgID9jb252ZXJ0RG91YmxlVG9Db250aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5k
ZXhASlNPYmplY3RASlNDQEBBQUVYQUFWSlNHbG9iYWxEYXRhQDJASVZKU1ZhbHVlQDJAQFoKLSAg
ICA/Y29udmVydEludDMyVG9Eb3VibGVPckNvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRl
eEBKU09iamVjdEBKU0NAQEFBRVhBQVZKU0dsb2JhbERhdGFAMkBJVkpTVmFsdWVAMkBAWgorICAg
ID9jb252ZXJ0RG91YmxlVG9Db250aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXhASlNPYmpl
Y3RASlNDQEBBQUVYQUFWVk1AMkBJVkpTVmFsdWVAMkBAWgorICAgID9jb252ZXJ0SW50MzJUb0Rv
dWJsZU9yQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4QEpTT2JqZWN0QEpTQ0BAQUFF
WEFBVlZNQDJASVZKU1ZhbHVlQDJAQFoKICAgICA/Y29udmVydExhdGluMVRvVVRGOEBVbmljb2Rl
QFdURkBAWUE/QVc0Q29udmVyc2lvblJlc3VsdEAxMkBQQVBCRVBCRVBBUEFEUEFEQFoKICAgICA/
Y29udmVydFVURjE2VG9VVEY4QFVuaWNvZGVAV1RGQEBZQT9BVzRDb252ZXJzaW9uUmVzdWx0QDEy
QFBBUEJfV1BCX1dQQVBBRFBBRF9OQFoKICAgICA/Y29udmVydFVURjhUb1VURjE2QFVuaWNvZGVA
V1RGQEBZQT9BVzRDb252ZXJzaW9uUmVzdWx0QDEyQFBBUEJEUEJEUEFQQV9XUEFfV1BBX05fTkBa
CiAgICAgP2NvcHlCYWNraW5nU3RvcmVASlNPYmplY3RASlNDQEBTQVhQQVZKU0NlbGxAMkBBQVZD
b3B5VmlzaXRvckAyQEBaCiAgICAgP2NyZWF0ZUBKU0Z1bmN0aW9uQEpTQ0BAU0FQQVYxMkBQQVZF
eGVjU3RhdGVAMkBQQVZKU0dsb2JhbE9iamVjdEAyQEhBQlZTdHJpbmdAV1RGQEBQNklfSjBAWlc0
SW50cmluc2ljQDJAM0BaCi0gICAgP2NyZWF0ZUBKU0dsb2JhbERhdGFASlNDQEBTQT9BVj8kUGFz
c1JlZlB0ckBWSlNHbG9iYWxEYXRhQEpTQ0BAQFdURkBAVzRIZWFwVHlwZUAyQEBaCisgICAgP2Ny
ZWF0ZUBWTUBKU0NAQFNBP0FWPyRQYXNzUmVmUHRyQFZWTUBKU0NAQEBXVEZAQFc0SGVhcFR5cGVA
MkBAWgogICAgID9jcmVhdGVAT3BhcXVlSlNTdHJpbmdAQFNBP0FWPyRQYXNzUmVmUHRyQFVPcGFx
dWVKU1N0cmluZ0BAQFdURkBAQUJWU3RyaW5nQDNAQFoKLSAgICA/Y3JlYXRlQFJlZ0V4cEBKU0NA
QFNBUEFWMTJAQUFWSlNHbG9iYWxEYXRhQDJAQUJWU3RyaW5nQFdURkBAVzRSZWdFeHBGbGFnc0Ay
QEBaCisgICAgP2NyZWF0ZUBSZWdFeHBASlNDQEBTQVBBVjEyQEFBVlZNQDJAQUJWU3RyaW5nQFdU
RkBAVzRSZWdFeHBGbGFnc0AyQEBaCiAgICAgP2NyZWF0ZUBTdHJpbmdJbXBsQFdURkBAU0E/QVY/
JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBQQl9XSUBaCiAgICAgP2NyZWF0ZUBTdHJp
bmdJbXBsQFdURkBAU0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBQQkVAWgog
ICAgID9jcmVhdGVAU3RyaW5nSW1wbEBXVEZAQFNBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBs
QFdURkBAQDJAUEJFSUBaCiAgICAgP2NyZWF0ZThCaXRJZlBvc3NpYmxlQFN0cmluZ0ltcGxAV1RG
QEBTQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAyQFBCX1dJQFoKLSAgICA/Y3Jl
YXRlRW1wdHlTdHJpbmdAU21hbGxTdHJpbmdzQEpTQ0BAQUFFWFBBVkpTR2xvYmFsRGF0YUAyQEBa
CisgICAgP2NyZWF0ZUVtcHR5U3RyaW5nQFNtYWxsU3RyaW5nc0BKU0NAQEFBRVhQQVZWTUAyQEBa
CiAgICAgP2NyZWF0ZUVycm9yQEpTQ0BAWUFQQVZKU09iamVjdEAxQFBBVkV4ZWNTdGF0ZUAxQEFC
VlN0cmluZ0BXVEZAQEBaCi0gICAgP2NyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0aW9u
QEpTQ0BAWUFQQVZKU09iamVjdEAxQFBBVkpTR2xvYmFsRGF0YUAxQEBaCi0gICAgP2NyZWF0ZUxl
YWtlZEBKU0dsb2JhbERhdGFASlNDQEBTQT9BVj8kUGFzc1JlZlB0ckBWSlNHbG9iYWxEYXRhQEpT
Q0BAQFdURkBAVzRIZWFwVHlwZUAyQEBaCisgICAgP2NyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9u
RXhjZXB0aW9uQEpTQ0BAWUFQQVZKU09iamVjdEAxQFBBVlZNQDFAQFoKKyAgICA/Y3JlYXRlTGVh
a2VkQFZNQEpTQ0BAU0E/QVY/JFBhc3NSZWZQdHJAVlZNQEpTQ0BAQFdURkBAVzRIZWFwVHlwZUAy
QEBaCiAgICAgP2NyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yQEpTQ0BAWUFQQVZKU09iamVj
dEAxQFBBVkV4ZWNTdGF0ZUAxQEBaCiAgICAgP2NyZWF0ZVJhbmdlRXJyb3JASlNDQEBZQVBBVkpT
T2JqZWN0QDFAUEFWRXhlY1N0YXRlQDFAQUJWU3RyaW5nQFdURkBAQFoKICAgICA/Y3JlYXRlUmVm
ZXJlbmNlRXJyb3JASlNDQEBZQVBBVkpTT2JqZWN0QDFAUEFWRXhlY1N0YXRlQDFAQUJWU3RyaW5n
QFdURkBAQFoKLSAgICA/Y3JlYXRlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nQFNtYWxsU3RyaW5nc0BK
U0NAQEFBRVhQQVZKU0dsb2JhbERhdGFAMkBFQFoKKyAgICA/Y3JlYXRlU2luZ2xlQ2hhcmFjdGVy
U3RyaW5nQFNtYWxsU3RyaW5nc0BKU0NAQEFBRVhQQVZWTUAyQEVAWgogICAgID9jcmVhdGVTdGFj
a092ZXJmbG93RXJyb3JASlNDQEBZQVBBVkpTT2JqZWN0QDFAUEFWRXhlY1N0YXRlQDFAQFoKICAg
ICA/Y3JlYXRlU3ludGF4RXJyb3JASlNDQEBZQVBBVkpTT2JqZWN0QDFAUEFWRXhlY1N0YXRlQDFA
QUJWU3RyaW5nQFdURkBAQFoKLSAgICA/Y3JlYXRlVGFibGVASGFzaFRhYmxlQEpTQ0BAQUJFWFBB
VkpTR2xvYmFsRGF0YUAyQEBaCisgICAgP2NyZWF0ZVRhYmxlQEhhc2hUYWJsZUBKU0NAQEFCRVhQ
QVZWTUAyQEBaCiAgICAgP2NyZWF0ZVRocmVhZEBXVEZAQFlBSVA2QVBBWFBBWEBaMEBaCiAgICAg
P2NyZWF0ZVRocmVhZEBXVEZAQFlBSVA2QVBBWFBBWEBaMFBCREBaCiAgICAgP2NyZWF0ZVRocmVh
ZEBXVEZAQFlBSVA2QVhQQVhAWjBQQkRAWgpAQCAtMjI0LDIwICsyMjQsMjAgQEAgRVhQT1JUUwog
ICAgID9kZWxldGVQcm9wZXJ0eUJ5SW5kZXhASlNPYmplY3RASlNDQEBTQV9OUEFWSlNDZWxsQDJA
UEFWRXhlY1N0YXRlQDJASUBaCiAgICAgP2RlbGV0ZVByb3BlcnR5QnlJbmRleEBKU1Byb3h5QEpT
Q0BAS0FfTlBBVkpTQ2VsbEAyQFBBVkV4ZWNTdGF0ZUAyQElAWgogICAgID9kZWxldGVUYWJsZUBI
YXNoVGFibGVASlNDQEBRQkVYWFoKLSAgICA/ZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0aW9uQFN0
cnVjdHVyZUBKU0NAQFFBRVhBQVZKU0dsb2JhbERhdGFAMkBWUHJvcGVydHlOYW1lQDJAQFoKLSAg
ICA/ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uQFN0cnVjdHVyZUBKU0NAQFNBUEFWMTJAQUFW
SlNHbG9iYWxEYXRhQDJAUEFWMTJAVlByb3BlcnR5TmFtZUAyQEBaCisgICAgP2Rlc3BlY2lmeURp
Y3Rpb25hcnlGdW5jdGlvbkBTdHJ1Y3R1cmVASlNDQEBRQUVYQUFWVk1AMkBWUHJvcGVydHlOYW1l
QDJAQFoKKyAgICA/ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uQFN0cnVjdHVyZUBKU0NAQFNB
UEFWMTJAQUFWVk1AMkBQQVYxMkBWUHJvcGVydHlOYW1lQDJAQFoKICAgICA/ZGVzdHJveUBKU0Nl
bGxASlNDQEBLQVhQQVYxMkBAWgogICAgID9kZXN0cm95QEpTR2xvYmFsT2JqZWN0QEpTQ0BAU0FY
UEFWSlNDZWxsQDJAQFoKICAgICA/ZGVzdHJveUBPdXRPZkxpbmVCaXRzQEJpdFZlY3RvckBXVEZA
QFNBWFBBVjEyM0BAWgogICAgID9kZXRhY2hARGVidWdnZXJASlNDQEBVQUVYUEFWSlNHbG9iYWxP
YmplY3RAMkBAWgogICAgID9kZXRhY2hUaHJlYWRAV1RGQEBZQVhJQFoKLSAgICA/ZGlzY2FyZEFs
bENvZGVASlNHbG9iYWxEYXRhQEpTQ0BAUUFFWFhaCisgICAgP2Rpc2NhcmRBbGxDb2RlQFZNQEpT
Q0BAUUFFWFhaCiAgICAgP2Rpc3BsYXlOYW1lQEpTRnVuY3Rpb25ASlNDQEBRQUU/QVZTdHJpbmdA
V1RGQEBQQVZFeGVjU3RhdGVAMkBAWgogICAgID9kdG9hQFdURkBAWUFYUUFETkFBX05BQUhBQUlA
WgogICAgID9kdW1wQEpTVmFsdWVASlNDQEBRQkVYQUFWUHJpbnRTdHJlYW1AV1RGQEBAWgogICAg
ID9kdW1wQWxsT3B0aW9uc0BPcHRpb25zQEpTQ0BAU0FYUEFVX2lvYnVmQEBAWgogICAgID9kdW1w
Q2FsbEZyYW1lQEludGVycHJldGVyQEpTQ0BAUUFFWFBBVkV4ZWNTdGF0ZUAyQEBaCi0gICAgP2R1
bXBTYW1wbGVEYXRhQEpTR2xvYmFsRGF0YUBKU0NAQFFBRVhQQVZFeGVjU3RhdGVAMkBAWgorICAg
ID9kdW1wU2FtcGxlRGF0YUBWTUBKU0NAQFFBRVhQQVZFeGVjU3RhdGVAMkBAWgogICAgID9FY21h
U2NyaXB0Q29udmVydGVyQERvdWJsZVRvU3RyaW5nQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9u
QFdURkBAU0FBQlYxMjNAWFoKICAgICA/ZW1wdHlAU3RyaW5nSW1wbEBXVEZAQFNBUEFWMTJAWFoK
ICAgICA/ZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGVAUHJvdG90eXBlTWFwQEpTQ0BA
UUFFUEFWU3RydWN0dXJlQDJAUEFWSlNPYmplY3RAMkBJQFoKQEAgLTI4MywxMSArMjgzLDExIEBA
IEVYUE9SVFMKICAgICA/ZmluZEBTdHJpbmdJbXBsQFdURkBAUUFFSVBBVjEyQElAWgogICAgID9m
aW5kSWdub3JpbmdDYXNlQFN0cmluZ0ltcGxAV1RGQEBRQUVJUEFWMTJASUBaCiAgICAgP2ZpbmRB
bGxvY2F0b3JAV2Vha1NldEBKU0NAQEFBRVBBVUZyZWVDZWxsQFdlYWtCbG9ja0AyQFhaCi0gICAg
P2ZpbmlzaENyZWF0aW9uQEJvb2xlYW5PYmplY3RASlNDQEBJQUVYQUFWSlNHbG9iYWxEYXRhQDJA
QFoKLSAgICA/ZmluaXNoQ3JlYXRpb25ARGF0ZUluc3RhbmNlQEpTQ0BASUFFWEFBVkpTR2xvYmFs
RGF0YUAyQE5AWgotICAgID9maW5pc2hDcmVhdGlvbkBJbnRlcm5hbEZ1bmN0aW9uQEpTQ0BASUFF
WEFBVkpTR2xvYmFsRGF0YUAyQEFCVlN0cmluZ0BXVEZAQEBaCisgICAgP2ZpbmlzaENyZWF0aW9u
QEJvb2xlYW5PYmplY3RASlNDQEBJQUVYQUFWVk1AMkBAWgorICAgID9maW5pc2hDcmVhdGlvbkBE
YXRlSW5zdGFuY2VASlNDQEBJQUVYQUFWVk1AMkBOQFoKKyAgICA/ZmluaXNoQ3JlYXRpb25ASW50
ZXJuYWxGdW5jdGlvbkBKU0NAQElBRVhBQVZWTUAyQEFCVlN0cmluZ0BXVEZAQEBaCiAgICAgP2Zp
bmlzaENyZWF0aW9uQFJlZ0V4cE9iamVjdEBKU0NAQElBRVhQQVZKU0dsb2JhbE9iamVjdEAyQEBa
Ci0gICAgP2ZpbmlzaENyZWF0aW9uQFN0cmluZ09iamVjdEBKU0NAQElBRVhBQVZKU0dsb2JhbERh
dGFAMkBQQVZKU1N0cmluZ0AyQEBaCisgICAgP2ZpbmlzaENyZWF0aW9uQFN0cmluZ09iamVjdEBK
U0NAQElBRVhBQVZWTUAyQFBBVkpTU3RyaW5nQDJAQFoKICAgICA/Zm9jdXNAUHJvZmlsZUBKU0NA
QFFBRVhQQlZQcm9maWxlTm9kZUAyQEBaCiAgICAgP2ZvbGRDYXNlQFN0cmluZ0BXVEZAQFFCRT9B
VjEyQFhaCiAgICAgP2Zvcm1hdEBTdHJpbmdAV1RGQEBTQT9BVjEyQFBCRFpaCkBAIC0yOTksMTQg
KzI5OSwxNCBAQCBFWFBPUlRTCiAgICAgP2Zyb21VVEY4SW50ZXJuYWxAQXRvbWljU3RyaW5nQFdU
RkBAQ0E/QVYxMkBQQkQwQFoKICAgICA/ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2tAU3RyaW5n
QFdURkBAU0E/QVYxMkBQQkVJQFoKICAgICA/ZnVuY3Rpb25HZXR0ZXJAUHJvcGVydHlTbG90QEpT
Q0BAQUJFP0FWSlNWYWx1ZUAyQFBBVkV4ZWNTdGF0ZUAyQEBaCi0gICAgP2dldEBTdHJ1Y3R1cmVA
SlNDQEBRQUVIQUFWSlNHbG9iYWxEYXRhQDJAVlByb3BlcnR5TmFtZUAyQEFBSUFBUEFWSlNDZWxs
QDJAQFoKKyAgICA/Z2V0QFN0cnVjdHVyZUBKU0NAQFFBRUhBQVZWTUAyQFZQcm9wZXJ0eU5hbWVA
MkBBQUlBQVBBVkpTQ2VsbEAyQEBaCiAgICAgP2dldENhbGN1bGF0ZWREaXNwbGF5TmFtZUBKU0NA
QFlBP0FWU3RyaW5nQFdURkBAUEFWRXhlY1N0YXRlQDFAUEFWSlNPYmplY3RAMUBAWgogICAgID9n
ZXRDYWxsYWJsZU9iamVjdFNsb3dASlNDQEBZQVBBVkpTQ2VsbEAxQFBBVjIxQEBaCiAgICAgP2dl
dENhbGxEYXRhQEpTQ2VsbEBKU0NAQFNBP0FXNENhbGxUeXBlQDJAUEFWMTJAQUFUQ2FsbERhdGFA
MkBAWgogICAgID9nZXRDb25zdHJ1Y3REYXRhQEpTQ2VsbEBKU0NAQFNBP0FXNENvbnN0cnVjdFR5
cGVAMkBQQVYxMkBBQVRDb25zdHJ1Y3REYXRhQDJAQFoKICAgICA/Z2V0RGF0YTE2U2xvd0Nhc2VA
U3RyaW5nSW1wbEBXVEZAQEFCRVBCX1dYWgogICAgID9nZXRJREBTb3VyY2VQcm92aWRlckBKU0NA
QEFBRVhYWgotICAgID9nZXRTdGFja1RyYWNlQEludGVycHJldGVyQEpTQ0BAU0FYUEFWSlNHbG9i
YWxEYXRhQDJAQUFWPyRWZWN0b3JAVVN0YWNrRnJhbWVASlNDQEAkMEFAVkNyYXNoT25PdmVyZmxv
d0BXVEZAQEBXVEZAQElAWgorICAgID9nZXRTdGFja1RyYWNlQEludGVycHJldGVyQEpTQ0BAU0FY
UEFWVk1AMkBBQVY/JFZlY3RvckBVU3RhY2tGcmFtZUBKU0NAQCQwQUBWQ3Jhc2hPbk92ZXJmbG93
QFdURkBAQFdURkBASUBaCiAgICAgP2dldE9iamVjdEBKU0NlbGxASlNDQEBRQUVQQVZKU09iamVj
dEAyQFhaCiAgICAgP2dldE9iamVjdFR5cGVATWVtb3J5SW5zdHJ1bWVudGF0aW9uQFdURkBAQ0FQ
QkRQQVZNZW1vcnlPYmplY3RJbmZvQDJAQFoKICAgICA/Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzQEpTT2JqZWN0QEpTQ0BAU0FYUEFWMTJAUEFWRXhlY1N0YXRlQDJAQUFWUHJvcGVydHlOYW1l
QXJyYXlAMkBXNEVudW1lcmF0aW9uTW9kZUAyQEBaCkBAIC0zMzAsNyArMzMwLDcgQEAgRVhQT1JU
UwogICAgID9nbG9iYWxFeGVjQEpTR2xvYmFsT2JqZWN0QEpTQ0BAUUFFUEFWRXhlY1N0YXRlQDJA
WFoKICAgICA/Z2xvYmFsT2JqZWN0Q291bnRASGVhcEBKU0NAQFFBRUlYWgogICAgID9ncm93QEhh
bmRsZVNldEBKU0NAQEFBRVhYWgotICAgID9ncm93T3V0T2ZMaW5lU3RvcmFnZUBKU09iamVjdEBK
U0NAQFFBRVBBVkJ1dHRlcmZseUAyQEFBVkpTR2xvYmFsRGF0YUAyQElJQFoKKyAgICA/Z3Jvd091
dE9mTGluZVN0b3JhZ2VASlNPYmplY3RASlNDQEBRQUVQQVZCdXR0ZXJmbHlAMkBBQVZWTUAyQElJ
QFoKICAgICA/aGFzaFNsb3dDYXNlQFN0cmluZ0ltcGxAV1RGQEBBQkVJWFoKICAgICA/aGFzUHJv
cGVydHlASlNPYmplY3RASlNDQEBRQkVfTlBBVkV4ZWNTdGF0ZUAyQElAWgogICAgID9oYXNQcm9w
ZXJ0eUBKU09iamVjdEBKU0NAQFFCRV9OUEFWRXhlY1N0YXRlQDJAVlByb3BlcnR5TmFtZUAyQEBa
CkBAIC0zNjgsOCArMzY4LDggQEAgRVhQT1JUUwogICAgID9sb3dlckBTdHJpbmdJbXBsQFdURkBA
UUFFP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQDJAWFoKICAgICA/bGluZUBTdGFj
a0ZyYW1lQEpTQ0BAUUFFSVhaCiAgICAgP21ha2U4Qml0RnJvbTE2Qml0U291cmNlQFN0cmluZ0BX
VEZAQFNBP0FWMTJAUEJfV0lAWgotICAgID9tYXRjaEBSZWdFeHBASlNDQEBRQUVIQUFWSlNHbG9i
YWxEYXRhQDJAQUJWU3RyaW5nQFdURkBASUFBVj8kVmVjdG9yQEgkMENBQFZDcmFzaE9uT3ZlcmZs
b3dAV1RGQEBANUBAWgotICAgID9tYXRlcmlhbGl6ZVByb3BlcnR5TWFwQFN0cnVjdHVyZUBKU0NA
QEFBRVhBQVZKU0dsb2JhbERhdGFAMkBAWgorICAgID9tYXRjaEBSZWdFeHBASlNDQEBRQUVIQUFW
Vk1AMkBBQlZTdHJpbmdAV1RGQEBJQUFWPyRWZWN0b3JASCQwQ0FAVkNyYXNoT25PdmVyZmxvd0BX
VEZAQEA1QEBaCisgICAgP21hdGVyaWFsaXplUHJvcGVydHlNYXBAU3RydWN0dXJlQEpTQ0BAQUFF
WEFBVlZNQDJAQFoKICAgICA/bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lQFdURkBAWUFOWFoK
ICAgICA/bW9udGhGcm9tRGF5SW5ZZWFyQFdURkBAWUFISF9OQFoKICAgICA/bXNUb1llYXJAV1RG
QEBZQUhOQFoKQEAgLTQxOCwxNSArNDE4LDE1IEBAIEVYUE9SVFMKICAgICA/cHV0RGlyZWN0Vmly
dHVhbEBKU09iamVjdEBKU0NAQFNBWFBBVjEyQFBBVkV4ZWNTdGF0ZUAyQFZQcm9wZXJ0eU5hbWVA
MkBWSlNWYWx1ZUAyQElAWgogICAgID9wdXREaXJlY3RWaXJ0dWFsQEpTUHJveHlASlNDQEBLQVhQ
QVZKU09iamVjdEAyQFBBVkV4ZWNTdGF0ZUAyQFZQcm9wZXJ0eU5hbWVAMkBWSlNWYWx1ZUAyQElA
WgogICAgID9yYW5kb21OdW1iZXJAV1RGQEBZQU5YWgotICAgID9yZWNvbXBpbGVBbGxKU0Z1bmN0
aW9uc0BEZWJ1Z2dlckBKU0NAQFFBRVhQQVZKU0dsb2JhbERhdGFAMkBAWgorICAgID9yZWNvbXBp
bGVBbGxKU0Z1bmN0aW9uc0BEZWJ1Z2dlckBKU0NAQFFBRVhQQVZWTUAyQEBaCiAgICAgP3JlZ0V4
cEZsYWdzQEpTQ0BAWUE/QVc0UmVnRXhwRmxhZ3NAMUBBQlZTdHJpbmdAV1RGQEBAWgogICAgID9y
ZWlmeVN0cmluZ0BTdHJpbmdCdWlsZGVyQFdURkBAQUJFWFhaCiAgICAgP3JlbGVhc2VEZWNvbW1p
dHRlZEBPU0FsbG9jYXRvckBXVEZAQFNBWFBBWElAWgotICAgID9yZWxlYXNlRXhlY3V0YWJsZU1l
bW9yeUBKU0dsb2JhbERhdGFASlNDQEBRQUVYWFoKKyAgICA/cmVsZWFzZUV4ZWN1dGFibGVNZW1v
cnlAVk1ASlNDQEBRQUVYWFoKICAgICA/cmVtb3ZlQFN0cmluZ0BXVEZAQFFBRVhJSEBaCiAgICAg
P3JlbW92ZUJsb2NrQE1hcmtlZEFsbG9jYXRvckBKU0NAQFFBRVhQQVZNYXJrZWRCbG9ja0AyQEBa
CiAgICAgP3JlbW92ZUNoYXJhY3RlcnNAU3RyaW5nQFdURkBAUUJFP0FWMTJAUDZBX05fV0BaQFoK
LSAgICA/cmVtb3ZlRGlyZWN0QEpTT2JqZWN0QEpTQ0BAUUFFX05BQVZKU0dsb2JhbERhdGFAMkBW
UHJvcGVydHlOYW1lQDJAQFoKKyAgICA/cmVtb3ZlRGlyZWN0QEpTT2JqZWN0QEpTQ0BAUUFFX05B
QVZWTUAyQFZQcm9wZXJ0eU5hbWVAMkBAWgogICAgID9yZXBsYWNlQFN0cmluZ0ltcGxAV1RGQEBR
QUU/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBfVzBAWgogICAgID9yZXBsYWNl
QFN0cmluZ0ltcGxAV1RGQEBRQUU/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBf
V1BBVjEyQEBaCiAgICAgP3JlcGxhY2VAU3RyaW5nSW1wbEBXVEZAQFFBRT9BVj8kUGFzc1JlZlB0
ckBWU3RyaW5nSW1wbEBXVEZAQEAyQF9XUEJFSUBaCkBAIC00NDAsNyArNDQwLDcgQEAgRVhQT1JU
UwogICAgID9yZXNlcnZlQW5kQ29tbWl0QE9TQWxsb2NhdG9yQFdURkBAU0FQQVhJVzRVc2FnZUAx
MkBfTjExQFoKICAgICA/cmVzZXJ2ZUNhcGFjaXR5QFN0cmluZ0J1aWxkZXJAV1RGQEBRQUVYSUBa
CiAgICAgP3Jlc2V0QFBhcnNlckFyZW5hQEpTQ0BAUUFFWFhaCi0gICAgP3Jlc2V0RGF0ZUNhY2hl
QEpTR2xvYmFsRGF0YUBKU0NAQFFBRVhYWgorICAgID9yZXNldERhdGVDYWNoZUBWTUBKU0NAQFFB
RVhYWgogICAgID9yZXNpemVAU3RyaW5nQnVpbGRlckBXVEZAQFFBRVhJQFoKICAgICA/cmVzaXpl
T3V0T2ZMaW5lQEJpdFZlY3RvckBXVEZAQEFBRVhJQFoKICAgICA/cmVzb2x2ZVJvcGVASlNSb3Bl
U3RyaW5nQEpTQ0BAQUJFWFBBVkV4ZWNTdGF0ZUAyQEBaCkBAIC00NTcsMTQgKzQ1NywxNCBAQCBF
WFBPUlRTCiAgICAgP3NldEVudW1lcmFibGVAUHJvcGVydHlEZXNjcmlwdG9yQEpTQ0BAUUFFWF9O
QFoKICAgICA/c2V0R2FyYmFnZUNvbGxlY3Rpb25UaW1lckVuYWJsZWRASGVhcEBKU0NAQFFBRVhf
TkBaCiAgICAgP3NldEdldHRlckBQcm9wZXJ0eURlc2NyaXB0b3JASlNDQEBRQUVYVkpTVmFsdWVA
MkBAWgotICAgID9zZXRHbG9iYWxUaGlzQEpTR2xvYmFsT2JqZWN0QEpTQ0BASUFFWEFBVkpTR2xv
YmFsRGF0YUAyQFBBVkpTT2JqZWN0QDJAQFoKLSAgICA/c2V0SW5kZXhRdWlja2x5VG9VbmRlY2lk
ZWRASlNPYmplY3RASlNDQEBBQUVYQUFWSlNHbG9iYWxEYXRhQDJASVZKU1ZhbHVlQDJAQFoKKyAg
ICA/c2V0R2xvYmFsVGhpc0BKU0dsb2JhbE9iamVjdEBKU0NAQElBRVhBQVZWTUAyQFBBVkpTT2Jq
ZWN0QDJAQFoKKyAgICA/c2V0SW5kZXhRdWlja2x5VG9VbmRlY2lkZWRASlNPYmplY3RASlNDQEBB
QUVYQUFWVk1AMkBJVkpTVmFsdWVAMkBAWgogICAgID9zZXRNYWluVGhyZWFkQ2FsbGJhY2tzUGF1
c2VkQFdURkBAWUFYX05AWgogICAgID9zZXRPcHRpb25AT3B0aW9uc0BKU0NAQFNBX05QQkRAWgog
ICAgID9zZXRPcmRlckxvd2VyRmlyc3RAQ29sbGF0b3JAV1RGQEBRQUVYX05AWgotICAgID9zZXRQ
cm90b3R5cGVASlNPYmplY3RASlNDQEBRQUVYQUFWSlNHbG9iYWxEYXRhQDJAVkpTVmFsdWVAMkBA
WgorICAgID9zZXRQcm90b3R5cGVASlNPYmplY3RASlNDQEBRQUVYQUFWVk1AMkBWSlNWYWx1ZUAy
QEBaCiAgICAgP3NldFNldHRlckBQcm9wZXJ0eURlc2NyaXB0b3JASlNDQEBRQUVYVkpTVmFsdWVA
MkBAWgotICAgID9zZXRUYXJnZXRASlNQcm94eUBKU0NAQElBRVhBQVZKU0dsb2JhbERhdGFAMkBQ
QVZKU0dsb2JhbE9iamVjdEAyQEBaCisgICAgP3NldFRhcmdldEBKU1Byb3h5QEpTQ0BASUFFWEFB
VlZNQDJAUEFWSlNHbG9iYWxPYmplY3RAMkBAWgogICAgID9zZXR0ZXJAUHJvcGVydHlEZXNjcmlw
dG9yQEpTQ0BAUUJFP0FWSlNWYWx1ZUAyQFhaCiAgICAgP3NldFRvQ3VycmVudExvY2FsVGltZUBH
cmVnb3JpYW5EYXRlVGltZUBXVEZAQFFBRVhYWgogICAgID9zZXRVbmRlZmluZWRAUHJvcGVydHlE
ZXNjcmlwdG9yQEpTQ0BAUUFFWFhaCkBAIC00ODUsMTEgKzQ4NSwxMSBAQCBFWFBPUlRTCiAgICAg
P3NwbGl0QFN0cmluZ0BXVEZAQFFCRVhfV19OQUFWPyRWZWN0b3JAVlN0cmluZ0BXVEZAQCQwQUBW
Q3Jhc2hPbk92ZXJmbG93QDJAQDJAQFoKICAgICA/c3BsaXRAU3RyaW5nQFdURkBAUUJFWEFCVjEy
QF9OQUFWPyRWZWN0b3JAVlN0cmluZ0BXVEZAQCQwQUBWQ3Jhc2hPbk92ZXJmbG93QDJAQDJAQFoK
ICAgICA/c3RhcnRQcm9maWxpbmdATGVnYWN5UHJvZmlsZXJASlNDQEBRQUVYUEFWRXhlY1N0YXRl
QDJAQUJWU3RyaW5nQFdURkBAQFoKLSAgICA/c3RhcnRTYW1wbGluZ0BKU0dsb2JhbERhdGFASlND
QEBRQUVYWFoKKyAgICA/c3RhcnRTYW1wbGluZ0BWTUBKU0NAQFFBRVhYWgogICAgID9zdGFydHNX
aXRoQFN0cmluZ0ltcGxAV1RGQEBRQkVfTl9XQFoKICAgICA/c3RhcnRzV2l0aEBTdHJpbmdJbXBs
QFdURkBAUUJFX05QQkRJX05AWgogICAgID9zdG9wUHJvZmlsaW5nQExlZ2FjeVByb2ZpbGVyQEpT
Q0BAUUFFP0FWPyRQYXNzUmVmUHRyQFZQcm9maWxlQEpTQ0BAQFdURkBAUEFWRXhlY1N0YXRlQDJA
QUJWU3RyaW5nQDRAQFoKLSAgICA/c3RvcFNhbXBsaW5nQEpTR2xvYmFsRGF0YUBKU0NAQFFBRVhY
WgorICAgID9zdG9wU2FtcGxpbmdAVk1ASlNDQEBRQUVYWFoKICAgICA/c3RyaW5nQE9wYXF1ZUpT
U3RyaW5nQEBRQkU/QVZTdHJpbmdAV1RGQEBYWgogICAgID9TdHJpbmdUb0RvdWJsZUBTdHJpbmdU
b0RvdWJsZUNvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFNBTlBCRElQQUlAWgogICAg
ID9zdHJpcFdoaXRlU3BhY2VAU3RyaW5nQFdURkBAUUJFP0FWMTJAWFoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzEzLDcgKzMxMyw3IEBACiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEpTQ0pTVmFsdWUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNEYXRlTWF0aC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxKU0Z1bmN0aW9uLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxydW50aW1lXEpTR2xvYmFsRGF0YS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxWTS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cnVudGltZVxKU0dsb2JhbE9iamVjdC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAiIC8+DQogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0xvY2suY3BwIiAvPg0KQEAgLTY3OSw3ICs2NzksNyBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0Rlc3RydWN0aWJsZU9iamVj
dC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNFeHBvcnRNYWNy
b3MuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTRnVuY3Rpb24u
aCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2xvYmFsRGF0YS5o
IiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVk0uaCIgLz4NCiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2xvYmFsT2JqZWN0LmgiIC8+DQogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5o
IiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNMb2NrLmgiIC8+DQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVy
cwkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkp
CkBAIC01NTUsNyArNTU1LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SlNGdW5jdGlvbi5jcHAiPg0KICAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KICAgICA8
L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2xvYmFs
RGF0YS5jcHAiPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVk0uY3BwIj4N
CiAgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCiAgICAgPC9DbENvbXBpbGU+DQogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0dsb2JhbE9iamVjdC5jcHAiPg0KQEAg
LTE1ODAsNyArMTU4MCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpT
RnVuY3Rpb24uaCI+DQogICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQogICAgIDwvQ2xJ
bmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNHbG9iYWxEYXRh
LmgiPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVk0uaCI+DQogICAgICAg
PEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQogICAgIDwvQ2xJbmNsdWRlPg0KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNHbG9iYWxPYmplY3QuaCI+DQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmVFeHBv
cnRHZW5lcmF0b3IvSmF2YVNjcmlwdENvcmVFeHBvcnRzLmRlZi5pbgo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29y
ZUV4cG9ydEdlbmVyYXRvci9KYXZhU2NyaXB0Q29yZUV4cG9ydHMuZGVmLmluCShyZXZpc2lvbiAx
NDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZUV4cG9ydEdlbmVyYXRvci9KYXZhU2NyaXB0Q29yZUV4cG9ydHMuZGVmLmlu
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDIyICsxLDIyIEBACiBFWFBPUlRTCiAKICAgICA/PzBBcnJh
eUJ1ZmZlclZpZXdAV1RGQEBJQUVAVj8kUGFzc1JlZlB0ckBWQXJyYXlCdWZmZXJAV1RGQEBAMUBJ
QFoKLSAgICA/PzBCb29sZWFuT2JqZWN0QEpTQ0BASUFFQEFBVkpTR2xvYmFsRGF0YUAxQFBBVlN0
cnVjdHVyZUAxQEBaCisgICAgPz8wQm9vbGVhbk9iamVjdEBKU0NAQElBRUBBQVZWTUAxQFBBVlN0
cnVjdHVyZUAxQEBaCiAgICAgPz8wQ29sbGF0b3JAV1RGQEBRQUVAUEJEQFoKICAgICA/PzBDU3Ry
aW5nQFdURkBAUUFFQFBCREBaCiAgICAgPz8wQ1N0cmluZ0BXVEZAQFFBRUBQQkRJQFoKLSAgICA/
PzBEYXRhYmFzZUBQcm9maWxlckBKU0NAQFFBRUBBQVZKU0dsb2JhbERhdGFAMkBAWgorICAgID8/
MERhdGFiYXNlQFByb2ZpbGVyQEpTQ0BAUUFFQEFBVlZNQDJAQFoKICAgICA/PzBEYXRlSW5zdGFu
Y2VASlNDQEBJQUVAUEFWRXhlY1N0YXRlQDFAUEFWU3RydWN0dXJlQDFAQFoKICAgICA/PzBEZWZh
dWx0R0NBY3Rpdml0eUNhbGxiYWNrQEpTQ0BAUUFFQFBBVkhlYXBAMUBAWgogICAgID8/MERyb3BB
bGxMb2Nrc0BKU0xvY2tASlNDQEBRQUVAUEFWRXhlY1N0YXRlQDJAQFoKLSAgICA/PzBEcm9wQWxs
TG9ja3NASlNMb2NrQEpTQ0BAUUFFQFBBVkpTR2xvYmFsRGF0YUAyQEBaCi0gICAgPz8wRHluYW1p
Y0dsb2JhbE9iamVjdFNjb3BlQEpTQ0BAUUFFQEFBVkpTR2xvYmFsRGF0YUAxQFBBVkpTR2xvYmFs
T2JqZWN0QDFAQFogCisgICAgPz8wRHJvcEFsbExvY2tzQEpTTG9ja0BKU0NAQFFBRUBQQVZWTUAy
QEBaCisgICAgPz8wRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlQEpTQ0BAUUFFQEFBVlZNQDFAUEFW
SlNHbG9iYWxPYmplY3RAMUBAWiAKICAgICA/PzBFcnJvckhhbmRsaW5nTW9kZUBJbnRlcnByZXRl
ckBKU0NAQFFBRUBQQVZFeGVjU3RhdGVAMkBAWgogICAgID8/MEludGVybmFsRnVuY3Rpb25ASlND
QEBJQUVAUEFWSlNHbG9iYWxPYmplY3RAMUBQQVZTdHJ1Y3R1cmVAMUBAWgotICAgID8/MEpTR2xv
YmFsT2JqZWN0QEpTQ0BASUFFQEFBVkpTR2xvYmFsRGF0YUAxQFBBVlN0cnVjdHVyZUAxQFBCVUds
b2JhbE9iamVjdE1ldGhvZFRhYmxlQDFAQFoKLSAgICA/PzBKU0xvY2tIb2xkZXJASlNDQEBRQUVA
QUFWSlNHbG9iYWxEYXRhQDFAQFoKKyAgICA/PzBKU0dsb2JhbE9iamVjdEBKU0NAQElBRUBBQVZW
TUAxQFBBVlN0cnVjdHVyZUAxQFBCVUdsb2JhbE9iamVjdE1ldGhvZFRhYmxlQDFAQFoKKyAgICA/
PzBKU0xvY2tIb2xkZXJASlNDQEBRQUVAQUFWVk1AMUBAWgogICAgID8/MEpTTG9ja0hvbGRlckBK
U0NAQFFBRUBQQVZFeGVjU3RhdGVAMUBAWgotICAgID8/MEpTTG9ja0hvbGRlckBKU0NAQFFBRUBQ
QVZKU0dsb2JhbERhdGFAMUBAWgorICAgID8/MEpTTG9ja0hvbGRlckBKU0NAQFFBRUBQQVZWTUAx
QEBaCiAgICAgPz8wTUQ1QFdURkBAUUFFQFhaCiAgICAgPz8wTWVkaWFUaW1lQFdURkBAUUFFQF9K
SElAWiAKICAgICA/PzBNZW1vcnlJbnN0cnVtZW50YXRpb25AV1RGQEBRQUVAUEFWTWVtb3J5SW5z
dHJ1bWVudGF0aW9uQ2xpZW50QDFAQFoKQEAgLTMzLDIxICszMywyMSBAQCBFWFBPUlRTCiAgICAg
Pz8wU3RyaW5nQFdURkBAUUFFQFBCRElAWgogICAgID8/MFN0cmluZ0BXVEZAQFFBRUBQQkVJQFoK
ICAgICA/PzBTdHJpbmdAV1RGQEBRQUVAVkFTQ0lJTGl0ZXJhbEAxQEBaCi0gICAgPz8wU3RyaW5n
T2JqZWN0QEpTQ0BASUFFQEFBVkpTR2xvYmFsRGF0YUAxQFBBVlN0cnVjdHVyZUAxQEBaCisgICAg
Pz8wU3RyaW5nT2JqZWN0QEpTQ0BASUFFQEFBVlZNQDFAUEFWU3RydWN0dXJlQDFAQFoKICAgICA/
PzBTdHJpbmdQcmludFN0cmVhbUBXVEZAQFFBRUBYWgotICAgID8/MFN0cnVjdHVyZUBKU0NAQEFB
RUBBQVZKU0dsb2JhbERhdGFAMUBQQVZKU0dsb2JhbE9iamVjdEAxQFZKU1ZhbHVlQDFAQUJWVHlw
ZUluZm9AMUBQQlVDbGFzc0luZm9AMUBFSUBaCisgICAgPz8wU3RydWN0dXJlQEpTQ0BAQUFFQEFB
VlZNQDFAUEFWSlNHbG9iYWxPYmplY3RAMUBWSlNWYWx1ZUAxQEFCVlR5cGVJbmZvQDFAUEJVQ2xh
c3NJbmZvQDFARUlAWgogICAgID8/MFRocmVhZENvbmRpdGlvbkBXVEZAQFFBRUBYWgogICAgID8/
MFdyYXBwZXJCYXNlQE1lbW9yeUluc3RydW1lbnRhdGlvbkBXVEZAQFFBRUBQQkRQQlhAWgogICAg
ID8/MFdURlRocmVhZERhdGFAV1RGQEBRQUVAWFoKICAgICA/PzBZYXJyUGF0dGVybkBZYXJyQEpT
Q0BAUUFFQEFCVlN0cmluZ0BXVEZAQF9OMVBBUEJEQFoKICAgICA/PzFBcnJheUJ1ZmZlclZpZXdA
V1RGQEBVQUVAWFoKLSAgICA/PzFDbGllbnREYXRhQEpTR2xvYmFsRGF0YUBKU0NAQFVBRUBYWgor
ICAgID8/MUNsaWVudERhdGFAVk1ASlNDQEBVQUVAWFoKICAgICA/PzFDb2xsYXRvckBXVEZAQFFB
RUBYWgogICAgID8/MURhdGFiYXNlQFByb2ZpbGVyQEpTQ0BAUUFFQFhaCiAgICAgPz8xRGVidWdn
ZXJASlNDQEBVQUVAWFoKICAgICA/PzFEcm9wQWxsTG9ja3NASlNMb2NrQEpTQ0BAUUFFQFhaCiAg
ICAgPz8xRXJyb3JIYW5kbGluZ01vZGVASW50ZXJwcmV0ZXJASlNDQEBRQUVAWFoKLSAgICA/PzFK
U0dsb2JhbERhdGFASlNDQEBRQUVAWFoKKyAgICA/PzFWTUBKU0NAQFFBRUBYWgogICAgID8/MUpT
R2xvYmFsT2JqZWN0QEpTQ0BAUUFFQFhaCiAgICAgPz8xSlNMb2NrSG9sZGVyQEpTQ0BAUUFFQFha
CiAgICAgPz8xTWVkaWFUaW1lQFdURkBAUUFFQFhaIApAQCAtNzgsNyArNzgsNyBAQCBFWFBPUlRT
CiAgICAgP2FkZEBBdG9taWNTdHJpbmdAV1RGQEBDQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1w
bEBXVEZAQEAyQFBCREBaCiAgICAgP2FkZEBBdG9taWNTdHJpbmdAV1RGQEBDQT9BVj8kUGFzc1Jl
ZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAyQFBCRUBaCiAgICAgP2FkZEBBdG9taWNTdHJpbmdAV1RG
QEBDQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAyQFBCRUlAWgotICAgID9hZGRA
SWRlbnRpZmllckBKU0NAQENBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQFdURkBA
UEFWSlNHbG9iYWxEYXRhQDJAUEFWU3RyaW5nSW1wbEA0QEBaCisgICAgP2FkZEBJZGVudGlmaWVy
QEpTQ0BAQ0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAV1RGQEBQQVZWTUAyQFBB
VlN0cmluZ0ltcGxANEBAWgogICAgID9hZGRASWRlbnRpZmllckBKU0NAQFNBP0FWPyRQYXNzUmVm
UHRyQFZTdHJpbmdJbXBsQFdURkBAQFdURkBAUEFWRXhlY1N0YXRlQDJAUEJEQFoKICAgICA/YWRk
QFByb3BlcnR5TmFtZUFycmF5QEpTQ0BAUUFFWFBBVlN0cmluZ0ltcGxAV1RGQEBAWgogICAgID9h
ZGRCeXRlc0BNRDVAV1RGQEBRQUVYUEJFSUBaCkBAIC04NiwxNCArODYsMTQgQEAgRVhQT1JUUwog
ICAgID9hZGRDdXJyZW50VGhyZWFkQE1hY2hpbmVUaHJlYWRzQEpTQ0BAUUFFWFhaCiAgICAgP2Fk
ZEZpbmFsaXplckBIZWFwQEpTQ0BAUUFFWFBBVkpTQ2VsbEAyQFA2QVgwQFpAWgogICAgID9hZGRG
cm9tTGl0ZXJhbERhdGFAQXRvbWljU3RyaW5nQFdURkBAQ0E/QVY/JFBhc3NSZWZQdHJAVlN0cmlu
Z0ltcGxAV1RGQEBAMkBQQkRJQFoKLSAgICA/YWRkUHJvcGVydHlUcmFuc2l0aW9uQFN0cnVjdHVy
ZUBKU0NAQFNBUEFWMTJAQUFWSlNHbG9iYWxEYXRhQDJAUEFWMTJAVlByb3BlcnR5TmFtZUAyQElQ
QVZKU0NlbGxAMkBBQUhAWgorICAgID9hZGRQcm9wZXJ0eVRyYW5zaXRpb25AU3RydWN0dXJlQEpT
Q0BAU0FQQVYxMkBBQVZWTUAyQFBBVjEyQFZQcm9wZXJ0eU5hbWVAMkBJUEFWSlNDZWxsQDJAQUFI
QFoKICAgICA/YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUBTdHJ1Y3R1
cmVASlNDQEBTQVBBVjEyQFBBVjEyQFZQcm9wZXJ0eU5hbWVAMkBJUEFWSlNDZWxsQDJAQUFIQFoK
LSAgICA/YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbkBTdHJ1Y3R1cmVASlNDQEBRQUVIQUFW
SlNHbG9iYWxEYXRhQDJAVlByb3BlcnR5TmFtZUAyQElQQVZKU0NlbGxAMkBAWgorICAgID9hZGRQ
cm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uQFN0cnVjdHVyZUBKU0NAQFFBRUhBQVZWTUAyQFZQcm9w
ZXJ0eU5hbWVAMkBJUEFWSlNDZWxsQDJAQFoKICAgICA/YWRkUHJpdmF0ZUJ1ZmZlckBNZW1vcnlD
bGFzc0luZm9AV1RGQEBRQUVYSVBCRDAwQFoKICAgICA/YWRkUmF3QnVmZmVyQE1lbW9yeUNsYXNz
SW5mb0BXVEZAQFFBRVhQQlhJUEJEMUBaCiAgICAgP2FkZFNsb3dDYXNlQEF0b21pY1N0cmluZ0BX
VEZAQENBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQDJAUEFWU3RyaW5nSW1wbEAy
QEBaCiAgICAgP2FkZFNsb3dDYXNlQElkZW50aWZpZXJASlNDQEBDQT9BVj8kUGFzc1JlZlB0ckBW
U3RyaW5nSW1wbEBXVEZAQEBXVEZAQFBBVkV4ZWNTdGF0ZUAyQFBBVlN0cmluZ0ltcGxANEBAWgot
ICAgID9hZGRTbG93Q2FzZUBJZGVudGlmaWVyQEpTQ0BAQ0E/QVY/JFBhc3NSZWZQdHJAVlN0cmlu
Z0ltcGxAV1RGQEBAV1RGQEBQQVZKU0dsb2JhbERhdGFAMkBQQVZTdHJpbmdJbXBsQDRAQFoKKyAg
ICA/YWRkU2xvd0Nhc2VASWRlbnRpZmllckBKU0NAQENBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJ
bXBsQFdURkBAQFdURkBAUEFWVk1AMkBQQVZTdHJpbmdJbXBsQDRAQFoKICAgICA/YWRkU3RhdGlj
R2xvYmFsc0BKU0dsb2JhbE9iamVjdEBKU0NAQElBRVhQQVVHbG9iYWxQcm9wZXJ0eUluZm9AMTJA
SEBaCiAgICAgP2Fkb3B0QFN0cmluZ0ltcGxAV1RGQEBTQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5n
SW1wbEBXVEZAQEAyQEFBVj8kU3RyaW5nQnVmZmVyQF9XQDJAQFoKICAgICA/YWRvcHRAU3RyaW5n
SW1wbEBXVEZAQFNBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQDJAQUFWPyRTdHJp
bmdCdWZmZXJARUAyQEBaCkBAIC0xMzIsNyArMTMyLDcgQEAgRVhQT1JUUwogICAgID9jYW5jZWxD
YWxsT25NYWluVGhyZWFkQFdURkBAWUFYUDZBWFBBWEBaMEBaCiAgICAgP2NhblNocmlua0BTdHJp
bmdCdWlsZGVyQFdURkBAUUJFX05YWgogICAgID9jYXBhY2l0eUBIZWFwQEpTQ0BAUUFFSVhaCi0g
ICAgP2NoYW5nZVByb3RvdHlwZVRyYW5zaXRpb25AU3RydWN0dXJlQEpTQ0BAU0FQQVYxMkBBQVZK
U0dsb2JhbERhdGFAMkBQQVYxMkBWSlNWYWx1ZUAyQEBaCisgICAgP2NoYW5nZVByb3RvdHlwZVRy
YW5zaXRpb25AU3RydWN0dXJlQEpTQ0BAU0FQQVYxMkBBQVZWTUAyQFBBVjEyQFZKU1ZhbHVlQDJA
QFoKICAgICA/Y2hhcmFjdGVyU3RhcnRpbmdBdEBTdHJpbmdAV1RGQEBRQkVISUBaCiAgICAgP2No
YXJhY3RlcnNUb0RvdWJsZUBXVEZAQFlBTlBCX1dJUEFfTkBaCiAgICAgP2NoYXJhY3RlcnNUb0Rv
dWJsZUBXVEZAQFlBTlBCRUlQQV9OQFoKQEAgLTE0NCw3ICsxNDQsNyBAQCBFWFBPUlRTCiAgICAg
P2NoYXJhY3RlcnNUb1VJbnRTdHJpY3RAV1RGQEBZQUlQQkVJUEFfTkhAWgogICAgID9jaGFyYWN0
ZXJzV2l0aE51bGxUZXJtaW5hdGlvbkBTdHJpbmdAV1RGQEBRQUVQQl9XWFoKICAgICA/Y2hlY2tD
dXJyZW50SWRlbnRpZmllclRhYmxlQElkZW50aWZpZXJASlNDQEBDQVhQQVZFeGVjU3RhdGVAMkBA
WgotICAgID9jaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGVASWRlbnRpZmllckBKU0NAQENBWFBB
VkpTR2xvYmFsRGF0YUAyQEBaCisgICAgP2NoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZUBJZGVu
dGlmaWVyQEpTQ0BAQ0FYUEFWVk1AMkBAWgogICAgID9jaGVja3N1bUBNRDVAV1RGQEBRQUVYQUFW
PyRWZWN0b3JARSQwQkFAVkNyYXNoT25PdmVyZmxvd0BXVEZAQEAyQEBaCiAgICAgP2NoZWNrU3lu
dGF4QEpTQ0BAWUFfTlBBVkV4ZWNTdGF0ZUAxQEFCVlNvdXJjZUNvZGVAMUBQQVZKU1ZhbHVlQDFA
QFoKICAgICA/Y2xhc3NOYW1lQEpTT2JqZWN0QEpTQ0BAU0E/QVZTdHJpbmdAV1RGQEBQQlYxMkBA
WgpAQCAtMTYzLDMxICsxNjMsMzEgQEAgRVhQT1JUUwogICAgID9jb25zdHJ1Y3ROdW1iZXJASlND
QEBZQVBBVk51bWJlck9iamVjdEAxQFBBVkV4ZWNTdGF0ZUAxQFBBVkpTR2xvYmFsT2JqZWN0QDFA
VkpTVmFsdWVAMUBAWgogICAgID9jb25zdHJ1Y3RTdHJpbmdASlNDQEBZQVBBVlN0cmluZ09iamVj
dEAxQFBBVkV4ZWNTdGF0ZUAxQFBBVkpTR2xvYmFsT2JqZWN0QDFAVkpTVmFsdWVAMUBAWgogICAg
ID9jb250YWluc09ubHlXaGl0ZXNwYWNlQFN0cmluZ0ltcGxAV1RGQEBRQUVfTlhaCi0gICAgP2Nv
bnZlcnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRleEBKU09iamVjdEBK
U0NAQEFBRVhBQVZKU0dsb2JhbERhdGFAMkBJVkpTVmFsdWVAMkBAWgotICAgID9jb252ZXJ0SW50
MzJUb0RvdWJsZU9yQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4QEpTT2JqZWN0QEpT
Q0BAQUFFWEFBVkpTR2xvYmFsRGF0YUAyQElWSlNWYWx1ZUAyQEBaCisgICAgP2NvbnZlcnREb3Vi
bGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRleEBKU09iamVjdEBKU0NAQEFBRVhB
QVZWTUAyQElWSlNWYWx1ZUAyQEBaCisgICAgP2NvbnZlcnRJbnQzMlRvRG91YmxlT3JDb250aWd1
b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXhASlNPYmplY3RASlNDQEBBQUVYQUFWVk1AMkBJVkpT
VmFsdWVAMkBAWgogICAgID9jb252ZXJ0TGF0aW4xVG9VVEY4QFVuaWNvZGVAV1RGQEBZQT9BVzRD
b252ZXJzaW9uUmVzdWx0QDEyQFBBUEJFUEJFUEFQQURQQURAWgogICAgID9jb252ZXJ0VVRGMTZU
b1VURjhAVW5pY29kZUBXVEZAQFlBP0FXNENvbnZlcnNpb25SZXN1bHRAMTJAUEFQQl9XUEJfV1BB
UEFEUEFEX05AWgogICAgID9jb252ZXJ0VVRGOFRvVVRGMTZAVW5pY29kZUBXVEZAQFlBP0FXNENv
bnZlcnNpb25SZXN1bHRAMTJAUEFQQkRQQkRQQVBBX1dQQV9XUEFfTl9OQFoKICAgICA/Y29weUJh
Y2tpbmdTdG9yZUBKU09iamVjdEBKU0NAQFNBWFBBVkpTQ2VsbEAyQEFBVkNvcHlWaXNpdG9yQDJA
QFoKICAgICA/Y3JlYXRlQEpTRnVuY3Rpb25ASlNDQEBTQVBBVjEyQFBBVkV4ZWNTdGF0ZUAyQFBB
VkpTR2xvYmFsT2JqZWN0QDJASEFCVlN0cmluZ0BXVEZAQFA2SV9KMEBaVzRJbnRyaW5zaWNAMkAz
QFoKLSAgICA/Y3JlYXRlQEpTR2xvYmFsRGF0YUBKU0NAQFNBP0FWPyRQYXNzUmVmUHRyQFZKU0ds
b2JhbERhdGFASlNDQEBAV1RGQEBXNEhlYXBUeXBlQDJAQFoKKyAgICA/Y3JlYXRlQFZNQEpTQ0BA
U0E/QVY/JFBhc3NSZWZQdHJAVlZNQEpTQ0BAQFdURkBAVzRIZWFwVHlwZUAyQEBaCiAgICAgP2Ny
ZWF0ZUBPcGFxdWVKU1N0cmluZ0BAU0E/QVY/JFBhc3NSZWZQdHJAVU9wYXF1ZUpTU3RyaW5nQEBA
V1RGQEBBQlZTdHJpbmdAM0BAWgotICAgID9jcmVhdGVAUmVnRXhwQEpTQ0BAU0FQQVYxMkBBQVZK
U0dsb2JhbERhdGFAMkBBQlZTdHJpbmdAV1RGQEBXNFJlZ0V4cEZsYWdzQDJAQFoKKyAgICA/Y3Jl
YXRlQFJlZ0V4cEBKU0NAQFNBUEFWMTJAQUFWVk1AMkBBQlZTdHJpbmdAV1RGQEBXNFJlZ0V4cEZs
YWdzQDJAQFoKICAgICA/Y3JlYXRlQFN0cmluZ0ltcGxAV1RGQEBTQT9BVj8kUGFzc1JlZlB0ckBW
U3RyaW5nSW1wbEBXVEZAQEAyQFBCX1dJQFoKICAgICA/Y3JlYXRlQFN0cmluZ0ltcGxAV1RGQEBT
QT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAyQFBCRUBaCiAgICAgP2NyZWF0ZUBT
dHJpbmdJbXBsQFdURkBAU0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBQQkVJ
QFoKICAgICA/Y3JlYXRlOEJpdElmUG9zc2libGVAU3RyaW5nSW1wbEBXVEZAQFNBP0FWPyRQYXNz
UmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQDJAUEJfV0lAWgotICAgID9jcmVhdGVFbXB0eVN0cmlu
Z0BTbWFsbFN0cmluZ3NASlNDQEBBQUVYUEFWSlNHbG9iYWxEYXRhQDJAQFoKKyAgICA/Y3JlYXRl
RW1wdHlTdHJpbmdAU21hbGxTdHJpbmdzQEpTQ0BAQUFFWFBBVlZNQDJAQFoKICAgICA/Y3JlYXRl
RXJyb3JASlNDQEBZQVBBVkpTT2JqZWN0QDFAUEFWRXhlY1N0YXRlQDFAQUJWU3RyaW5nQFdURkBA
QFoKLSAgICA/Y3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb25ASlNDQEBZQVBBVkpT
T2JqZWN0QDFAUEFWSlNHbG9iYWxEYXRhQDFAQFoKLSAgICA/Y3JlYXRlTGVha2VkQEpTR2xvYmFs
RGF0YUBKU0NAQFNBP0FWPyRQYXNzUmVmUHRyQFZKU0dsb2JhbERhdGFASlNDQEBAV1RGQEBXNEhl
YXBUeXBlQDJAQFoKKyAgICA/Y3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb25ASlND
QEBZQVBBVkpTT2JqZWN0QDFAUEFWVk1AMUBAWgorICAgID9jcmVhdGVMZWFrZWRAVk1ASlNDQEBT
QT9BVj8kUGFzc1JlZlB0ckBWVk1ASlNDQEBAV1RGQEBXNEhlYXBUeXBlQDJAQFoKICAgICA/Y3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3JASlNDQEBZQVBBVkpTT2JqZWN0QDFAUEFWRXhlY1N0
YXRlQDFAQFoKICAgICA/Y3JlYXRlUmFuZ2VFcnJvckBKU0NAQFlBUEFWSlNPYmplY3RAMUBQQVZF
eGVjU3RhdGVAMUBBQlZTdHJpbmdAV1RGQEBAWgogICAgID9jcmVhdGVSZWZlcmVuY2VFcnJvckBK
U0NAQFlBUEFWSlNPYmplY3RAMUBQQVZFeGVjU3RhdGVAMUBBQlZTdHJpbmdAV1RGQEBAWgotICAg
ID9jcmVhdGVTaW5nbGVDaGFyYWN0ZXJTdHJpbmdAU21hbGxTdHJpbmdzQEpTQ0BAQUFFWFBBVkpT
R2xvYmFsRGF0YUAyQEVAWgorICAgID9jcmVhdGVTaW5nbGVDaGFyYWN0ZXJTdHJpbmdAU21hbGxT
dHJpbmdzQEpTQ0BAQUFFWFBBVlZNQDJARUBaCiAgICAgP2NyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJv
ckBKU0NAQFlBUEFWSlNPYmplY3RAMUBQQVZFeGVjU3RhdGVAMUBAWgogICAgID9jcmVhdGVTeW50
YXhFcnJvckBKU0NAQFlBUEFWSlNPYmplY3RAMUBQQVZFeGVjU3RhdGVAMUBBQlZTdHJpbmdAV1RG
QEBAWgotICAgID9jcmVhdGVUYWJsZUBIYXNoVGFibGVASlNDQEBBQkVYUEFWSlNHbG9iYWxEYXRh
QDJAQFoKKyAgICA/Y3JlYXRlVGFibGVASGFzaFRhYmxlQEpTQ0BAQUJFWFBBVlZNQDJAQFoKICAg
ICA/Y3JlYXRlVGhyZWFkQFdURkBAWUFJUDZBUEFYUEFYQFowQFoKICAgICA/Y3JlYXRlVGhyZWFk
QFdURkBAWUFJUDZBUEFYUEFYQFowUEJEQFoKICAgICA/Y3JlYXRlVGhyZWFkQFdURkBAWUFJUDZB
WFBBWEBaMFBCREBaCkBAIC0yMjQsMjAgKzIyNCwyMCBAQCBFWFBPUlRTCiAgICAgP2RlbGV0ZVBy
b3BlcnR5QnlJbmRleEBKU09iamVjdEBKU0NAQFNBX05QQVZKU0NlbGxAMkBQQVZFeGVjU3RhdGVA
MkBJQFoKICAgICA/ZGVsZXRlUHJvcGVydHlCeUluZGV4QEpTUHJveHlASlNDQEBLQV9OUEFWSlND
ZWxsQDJAUEFWRXhlY1N0YXRlQDJASUBaCiAgICAgP2RlbGV0ZVRhYmxlQEhhc2hUYWJsZUBKU0NA
QFFCRVhYWgotICAgID9kZXNwZWNpZnlEaWN0aW9uYXJ5RnVuY3Rpb25AU3RydWN0dXJlQEpTQ0BA
UUFFWEFBVkpTR2xvYmFsRGF0YUAyQFZQcm9wZXJ0eU5hbWVAMkBAWgotICAgID9kZXNwZWNpZnlG
dW5jdGlvblRyYW5zaXRpb25AU3RydWN0dXJlQEpTQ0BAU0FQQVYxMkBBQVZKU0dsb2JhbERhdGFA
MkBQQVYxMkBWUHJvcGVydHlOYW1lQDJAQFoKKyAgICA/ZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0
aW9uQFN0cnVjdHVyZUBKU0NAQFFBRVhBQVZWTUAyQFZQcm9wZXJ0eU5hbWVAMkBAWgorICAgID9k
ZXNwZWNpZnlGdW5jdGlvblRyYW5zaXRpb25AU3RydWN0dXJlQEpTQ0BAU0FQQVYxMkBBQVZWTUAy
QFBBVjEyQFZQcm9wZXJ0eU5hbWVAMkBAWgogICAgID9kZXN0cm95QEpTQ2VsbEBKU0NAQEtBWFBB
VjEyQEBaCiAgICAgP2Rlc3Ryb3lASlNHbG9iYWxPYmplY3RASlNDQEBTQVhQQVZKU0NlbGxAMkBA
WgogICAgID9kZXN0cm95QE91dE9mTGluZUJpdHNAQml0VmVjdG9yQFdURkBAU0FYUEFWMTIzQEBa
CiAgICAgP2RldGFjaEBEZWJ1Z2dlckBKU0NAQFVBRVhQQVZKU0dsb2JhbE9iamVjdEAyQEBaCiAg
ICAgP2RldGFjaFRocmVhZEBXVEZAQFlBWElAWgotICAgID9kaXNjYXJkQWxsQ29kZUBKU0dsb2Jh
bERhdGFASlNDQEBRQUVYWFoKKyAgICA/ZGlzY2FyZEFsbENvZGVAVk1ASlNDQEBRQUVYWFoKICAg
ICA/ZGlzcGxheU5hbWVASlNGdW5jdGlvbkBKU0NAQFFBRT9BVlN0cmluZ0BXVEZAQFBBVkV4ZWNT
dGF0ZUAyQEBaCiAgICAgP2R0b2FAV1RGQEBZQVhRQUROQUFfTkFBSEFBSUBaCiAgICAgP2R1bXBA
SlNWYWx1ZUBKU0NAQFFCRVhBQVZQcmludFN0cmVhbUBXVEZAQEBaCiAgICAgP2R1bXBBbGxPcHRp
b25zQE9wdGlvbnNASlNDQEBTQVhQQVVfaW9idWZAQEBaCiAgICAgP2R1bXBDYWxsRnJhbWVASW50
ZXJwcmV0ZXJASlNDQEBRQUVYUEFWRXhlY1N0YXRlQDJAQFoKLSAgICA/ZHVtcFNhbXBsZURhdGFA
SlNHbG9iYWxEYXRhQEpTQ0BAUUFFWFBBVkV4ZWNTdGF0ZUAyQEBaCisgICAgP2R1bXBTYW1wbGVE
YXRhQFZNQEpTQ0BAUUFFWFBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP0VjbWFTY3JpcHRDb252ZXJ0
ZXJARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJAZG91YmxlX2NvbnZlcnNpb25AV1RGQEBTQUFCVjEy
M0BYWgogICAgID9lbXB0eUBTdHJpbmdJbXBsQFdURkBAU0FQQVYxMkBYWgogICAgID9lbXB0eU9i
amVjdFN0cnVjdHVyZUZvclByb3RvdHlwZUBQcm90b3R5cGVNYXBASlNDQEBRQUVQQVZTdHJ1Y3R1
cmVAMkBQQVZKU09iamVjdEAyQElAWgpAQCAtMjgzLDExICsyODMsMTEgQEAgRVhQT1JUUwogICAg
ID9maW5kQFN0cmluZ0ltcGxAV1RGQEBRQUVJUEFWMTJASUBaCiAgICAgP2ZpbmRJZ25vcmluZ0Nh
c2VAU3RyaW5nSW1wbEBXVEZAQFFBRUlQQVYxMkBJQFoKICAgICA/ZmluZEFsbG9jYXRvckBXZWFr
U2V0QEpTQ0BAQUFFUEFVRnJlZUNlbGxAV2Vha0Jsb2NrQDJAWFoKLSAgICA/ZmluaXNoQ3JlYXRp
b25AQm9vbGVhbk9iamVjdEBKU0NAQElBRVhBQVZKU0dsb2JhbERhdGFAMkBAWgotICAgID9maW5p
c2hDcmVhdGlvbkBEYXRlSW5zdGFuY2VASlNDQEBJQUVYQUFWSlNHbG9iYWxEYXRhQDJATkBaCi0g
ICAgP2ZpbmlzaENyZWF0aW9uQEludGVybmFsRnVuY3Rpb25ASlNDQEBJQUVYQUFWSlNHbG9iYWxE
YXRhQDJAQUJWU3RyaW5nQFdURkBAQFoKKyAgICA/ZmluaXNoQ3JlYXRpb25AQm9vbGVhbk9iamVj
dEBKU0NAQElBRVhBQVZWTUAyQEBaCisgICAgP2ZpbmlzaENyZWF0aW9uQERhdGVJbnN0YW5jZUBK
U0NAQElBRVhBQVZWTUAyQE5AWgorICAgID9maW5pc2hDcmVhdGlvbkBJbnRlcm5hbEZ1bmN0aW9u
QEpTQ0BASUFFWEFBVlZNQDJAQUJWU3RyaW5nQFdURkBAQFoKICAgICA/ZmluaXNoQ3JlYXRpb25A
UmVnRXhwT2JqZWN0QEpTQ0BASUFFWFBBVkpTR2xvYmFsT2JqZWN0QDJAQFoKLSAgICA/ZmluaXNo
Q3JlYXRpb25AU3RyaW5nT2JqZWN0QEpTQ0BASUFFWEFBVkpTR2xvYmFsRGF0YUAyQFBBVkpTU3Ry
aW5nQDJAQFoKKyAgICA/ZmluaXNoQ3JlYXRpb25AU3RyaW5nT2JqZWN0QEpTQ0BASUFFWEFBVlZN
QDJAUEFWSlNTdHJpbmdAMkBAWgogICAgID9mb2N1c0BQcm9maWxlQEpTQ0BAUUFFWFBCVlByb2Zp
bGVOb2RlQDJAQFoKICAgICA/Zm9sZENhc2VAU3RyaW5nQFdURkBAUUJFP0FWMTJAWFoKICAgICA/
Zm9ybWF0QFN0cmluZ0BXVEZAQFNBP0FWMTJAUEJEWloKQEAgLTI5OSwxNCArMjk5LDE0IEBAIEVY
UE9SVFMKICAgICA/ZnJvbVVURjhJbnRlcm5hbEBBdG9taWNTdHJpbmdAV1RGQEBDQT9BVjEyQFBC
RDBAWgogICAgID9mcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFja0BTdHJpbmdAV1RGQEBTQT9BVjEy
QFBCRUlAWgogICAgID9mdW5jdGlvbkdldHRlckBQcm9wZXJ0eVNsb3RASlNDQEBBQkU/QVZKU1Zh
bHVlQDJAUEFWRXhlY1N0YXRlQDJAQFoKLSAgICA/Z2V0QFN0cnVjdHVyZUBKU0NAQFFBRUhBQVZK
U0dsb2JhbERhdGFAMkBWUHJvcGVydHlOYW1lQDJAQUFJQUFQQVZKU0NlbGxAMkBAWgorICAgID9n
ZXRAU3RydWN0dXJlQEpTQ0BAUUFFSEFBVlZNQDJAVlByb3BlcnR5TmFtZUAyQEFBSUFBUEFWSlND
ZWxsQDJAQFoKICAgICA/Z2V0Q2FsY3VsYXRlZERpc3BsYXlOYW1lQEpTQ0BAWUE/QVZTdHJpbmdA
V1RGQEBQQVZFeGVjU3RhdGVAMUBQQVZKU09iamVjdEAxQEBaCiAgICAgP2dldENhbGxhYmxlT2Jq
ZWN0U2xvd0BKU0NAQFlBUEFWSlNDZWxsQDFAUEFWMjFAQFoKICAgICA/Z2V0Q2FsbERhdGFASlND
ZWxsQEpTQ0BAU0E/QVc0Q2FsbFR5cGVAMkBQQVYxMkBBQVRDYWxsRGF0YUAyQEBaCiAgICAgP2dl
dENvbnN0cnVjdERhdGFASlNDZWxsQEpTQ0BAU0E/QVc0Q29uc3RydWN0VHlwZUAyQFBBVjEyQEFB
VENvbnN0cnVjdERhdGFAMkBAWgogICAgID9nZXREYXRhMTZTbG93Q2FzZUBTdHJpbmdJbXBsQFdU
RkBAQUJFUEJfV1haCiAgICAgP2dldElEQFNvdXJjZVByb3ZpZGVyQEpTQ0BAQUFFWFhaCi0gICAg
P2dldFN0YWNrVHJhY2VASW50ZXJwcmV0ZXJASlNDQEBTQVhQQVZKU0dsb2JhbERhdGFAMkBBQVY/
JFZlY3RvckBVU3RhY2tGcmFtZUBKU0NAQCQwQUBWQ3Jhc2hPbk92ZXJmbG93QFdURkBAQFdURkBA
SUBaCisgICAgP2dldFN0YWNrVHJhY2VASW50ZXJwcmV0ZXJASlNDQEBTQVhQQVZWTUAyQEFBVj8k
VmVjdG9yQFVTdGFja0ZyYW1lQEpTQ0BAJDBBQFZDcmFzaE9uT3ZlcmZsb3dAV1RGQEBAV1RGQEBJ
QFoKICAgICA/Z2V0T2JqZWN0QEpTQ2VsbEBKU0NAQFFBRVBBVkpTT2JqZWN0QDJAWFoKICAgICA/
Z2V0T2JqZWN0VHlwZUBNZW1vcnlJbnN0cnVtZW50YXRpb25AV1RGQEBDQVBCRFBBVk1lbW9yeU9i
amVjdEluZm9AMkBAWgogICAgID9nZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXNASlNPYmplY3RA
SlNDQEBTQVhQQVYxMkBQQVZFeGVjU3RhdGVAMkBBQVZQcm9wZXJ0eU5hbWVBcnJheUAyQFc0RW51
bWVyYXRpb25Nb2RlQDJAQFoKQEAgLTMzMCw3ICszMzAsNyBAQCBFWFBPUlRTCiAgICAgP2dsb2Jh
bEV4ZWNASlNHbG9iYWxPYmplY3RASlNDQEBRQUVQQVZFeGVjU3RhdGVAMkBYWgogICAgID9nbG9i
YWxPYmplY3RDb3VudEBIZWFwQEpTQ0BAUUFFSVhaCiAgICAgP2dyb3dASGFuZGxlU2V0QEpTQ0BA
QUFFWFhaCi0gICAgP2dyb3dPdXRPZkxpbmVTdG9yYWdlQEpTT2JqZWN0QEpTQ0BAUUFFUEFWQnV0
dGVyZmx5QDJAQUFWSlNHbG9iYWxEYXRhQDJASUlAWgorICAgID9ncm93T3V0T2ZMaW5lU3RvcmFn
ZUBKU09iamVjdEBKU0NAQFFBRVBBVkJ1dHRlcmZseUAyQEFBVlZNQDJASUlAWgogICAgID9oYXNo
U2xvd0Nhc2VAU3RyaW5nSW1wbEBXVEZAQEFCRUlYWgogICAgID9oYXNQcm9wZXJ0eUBKU09iamVj
dEBKU0NAQFFCRV9OUEFWRXhlY1N0YXRlQDJASUBaCiAgICAgP2hhc1Byb3BlcnR5QEpTT2JqZWN0
QEpTQ0BAUUJFX05QQVZFeGVjU3RhdGVAMkBWUHJvcGVydHlOYW1lQDJAQFoKQEAgLTM2OCw4ICsz
NjgsOCBAQCBFWFBPUlRTCiAgICAgP2xvd2VyQFN0cmluZ0ltcGxAV1RGQEBRQUU/QVY/JFBhc3NS
ZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBYWgogICAgID9saW5lQFN0YWNrRnJhbWVASlNDQEBR
QUVJWFoKICAgICA/bWFrZThCaXRGcm9tMTZCaXRTb3VyY2VAU3RyaW5nQFdURkBAU0E/QVYxMkBQ
Ql9XSUBaCi0gICAgP21hdGNoQFJlZ0V4cEBKU0NAQFFBRUhBQVZKU0dsb2JhbERhdGFAMkBBQlZT
dHJpbmdAV1RGQEBJQUFWPyRWZWN0b3JASCQwQ0FAVkNyYXNoT25PdmVyZmxvd0BXVEZAQEA1QEBa
Ci0gICAgP21hdGVyaWFsaXplUHJvcGVydHlNYXBAU3RydWN0dXJlQEpTQ0BAQUFFWEFBVkpTR2xv
YmFsRGF0YUAyQEBaCisgICAgP21hdGNoQFJlZ0V4cEBKU0NAQFFBRUhBQVZWTUAyQEFCVlN0cmlu
Z0BXVEZAQElBQVY/JFZlY3RvckBIJDBDQUBWQ3Jhc2hPbk92ZXJmbG93QFdURkBAQDVAQFoKKyAg
ICA/bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcEBTdHJ1Y3R1cmVASlNDQEBBQUVYQUFWVk1AMkBAWgog
ICAgID9tb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVAV1RGQEBZQU5YWgogICAgID9tb250aEZy
b21EYXlJblllYXJAV1RGQEBZQUhIX05AWgogICAgID9tc1RvWWVhckBXVEZAQFlBSE5AWgpAQCAt
NDE3LDE1ICs0MTcsMTUgQEAgRVhQT1JUUwogICAgID9wdXREaXJlY3RWaXJ0dWFsQEpTT2JqZWN0
QEpTQ0BAU0FYUEFWMTJAUEFWRXhlY1N0YXRlQDJAVlByb3BlcnR5TmFtZUAyQFZKU1ZhbHVlQDJA
SUBaCiAgICAgP3B1dERpcmVjdFZpcnR1YWxASlNQcm94eUBKU0NAQEtBWFBBVkpTT2JqZWN0QDJA
UEFWRXhlY1N0YXRlQDJAVlByb3BlcnR5TmFtZUAyQFZKU1ZhbHVlQDJASUBaCiAgICAgP3JhbmRv
bU51bWJlckBXVEZAQFlBTlhaCi0gICAgP3JlY29tcGlsZUFsbEpTRnVuY3Rpb25zQERlYnVnZ2Vy
QEpTQ0BAUUFFWFBBVkpTR2xvYmFsRGF0YUAyQEBaCisgICAgP3JlY29tcGlsZUFsbEpTRnVuY3Rp
b25zQERlYnVnZ2VyQEpTQ0BAUUFFWFBBVlZNQDJAQFoKICAgICA/cmVnRXhwRmxhZ3NASlNDQEBZ
QT9BVzRSZWdFeHBGbGFnc0AxQEFCVlN0cmluZ0BXVEZAQEBaCiAgICAgP3JlaWZ5U3RyaW5nQFN0
cmluZ0J1aWxkZXJAV1RGQEBBQkVYWFoKICAgICA/cmVsZWFzZURlY29tbWl0dGVkQE9TQWxsb2Nh
dG9yQFdURkBAU0FYUEFYSUBaCi0gICAgP3JlbGVhc2VFeGVjdXRhYmxlTWVtb3J5QEpTR2xvYmFs
RGF0YUBKU0NAQFFBRVhYWgorICAgID9yZWxlYXNlRXhlY3V0YWJsZU1lbW9yeUBWTUBKU0NAQFFB
RVhYWgogICAgID9yZW1vdmVAU3RyaW5nQFdURkBAUUFFWElIQFoKICAgICA/cmVtb3ZlQmxvY2tA
TWFya2VkQWxsb2NhdG9yQEpTQ0BAUUFFWFBBVk1hcmtlZEJsb2NrQDJAQFoKICAgICA/cmVtb3Zl
Q2hhcmFjdGVyc0BTdHJpbmdAV1RGQEBRQkU/QVYxMkBQNkFfTl9XQFpAWgotICAgID9yZW1vdmVE
aXJlY3RASlNPYmplY3RASlNDQEBRQUVfTkFBVkpTR2xvYmFsRGF0YUAyQFZQcm9wZXJ0eU5hbWVA
MkBAWgorICAgID9yZW1vdmVEaXJlY3RASlNPYmplY3RASlNDQEBRQUVfTkFBVlZNQDJAVlByb3Bl
cnR5TmFtZUAyQEBaCiAgICAgP3JlcGxhY2VAU3RyaW5nSW1wbEBXVEZAQFFBRT9BVj8kUGFzc1Jl
ZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAyQF9XMEBaCiAgICAgP3JlcGxhY2VAU3RyaW5nSW1wbEBX
VEZAQFFBRT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAyQF9XUEFWMTJAQFoKICAg
ICA/cmVwbGFjZUBTdHJpbmdJbXBsQFdURkBAUUFFP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBs
QFdURkBAQDJAX1dQQkVJQFoKQEAgLTQzOSw3ICs0MzksNyBAQCBFWFBPUlRTCiAgICAgP3Jlc2Vy
dmVBbmRDb21taXRAT1NBbGxvY2F0b3JAV1RGQEBTQVBBWElXNFVzYWdlQDEyQF9OMTFAWgogICAg
ID9yZXNlcnZlQ2FwYWNpdHlAU3RyaW5nQnVpbGRlckBXVEZAQFFBRVhJQFoKICAgICA/cmVzZXRA
UGFyc2VyQXJlbmFASlNDQEBRQUVYWFoKLSAgICA/cmVzZXREYXRlQ2FjaGVASlNHbG9iYWxEYXRh
QEpTQ0BAUUFFWFhaCisgICAgP3Jlc2V0RGF0ZUNhY2hlQFZNQEpTQ0BAUUFFWFhaCiAgICAgP3Jl
c2l6ZUBTdHJpbmdCdWlsZGVyQFdURkBAUUFFWElAWgogICAgID9yZXNpemVPdXRPZkxpbmVAQml0
VmVjdG9yQFdURkBAQUFFWElAWgogICAgID9yZXNvbHZlUm9wZUBKU1JvcGVTdHJpbmdASlNDQEBB
QkVYUEFWRXhlY1N0YXRlQDJAQFoKQEAgLTQ1NiwxNCArNDU2LDE0IEBAIEVYUE9SVFMKICAgICA/
c2V0RW51bWVyYWJsZUBQcm9wZXJ0eURlc2NyaXB0b3JASlNDQEBRQUVYX05AWgogICAgID9zZXRH
YXJiYWdlQ29sbGVjdGlvblRpbWVyRW5hYmxlZEBIZWFwQEpTQ0BAUUFFWF9OQFoKICAgICA/c2V0
R2V0dGVyQFByb3BlcnR5RGVzY3JpcHRvckBKU0NAQFFBRVhWSlNWYWx1ZUAyQEBaCi0gICAgP3Nl
dEdsb2JhbFRoaXNASlNHbG9iYWxPYmplY3RASlNDQEBJQUVYQUFWSlNHbG9iYWxEYXRhQDJAUEFW
SlNPYmplY3RAMkBAWgotICAgID9zZXRJbmRleFF1aWNrbHlUb1VuZGVjaWRlZEBKU09iamVjdEBK
U0NAQEFBRVhBQVZKU0dsb2JhbERhdGFAMkBJVkpTVmFsdWVAMkBAWgorICAgID9zZXRHbG9iYWxU
aGlzQEpTR2xvYmFsT2JqZWN0QEpTQ0BASUFFWEFBVlZNQDJAUEFWSlNPYmplY3RAMkBAWgorICAg
ID9zZXRJbmRleFF1aWNrbHlUb1VuZGVjaWRlZEBKU09iamVjdEBKU0NAQEFBRVhBQVZWTUAyQElW
SlNWYWx1ZUAyQEBaCiAgICAgP3NldE1haW5UaHJlYWRDYWxsYmFja3NQYXVzZWRAV1RGQEBZQVhf
TkBaCiAgICAgP3NldE9wdGlvbkBPcHRpb25zQEpTQ0BAU0FfTlBCREBaCiAgICAgP3NldE9yZGVy
TG93ZXJGaXJzdEBDb2xsYXRvckBXVEZAQFFBRVhfTkBaCi0gICAgP3NldFByb3RvdHlwZUBKU09i
amVjdEBKU0NAQFFBRVhBQVZKU0dsb2JhbERhdGFAMkBWSlNWYWx1ZUAyQEBaCisgICAgP3NldFBy
b3RvdHlwZUBKU09iamVjdEBKU0NAQFFBRVhBQVZWTUAyQFZKU1ZhbHVlQDJAQFoKICAgICA/c2V0
U2V0dGVyQFByb3BlcnR5RGVzY3JpcHRvckBKU0NAQFFBRVhWSlNWYWx1ZUAyQEBaCi0gICAgP3Nl
dFRhcmdldEBKU1Byb3h5QEpTQ0BASUFFWEFBVkpTR2xvYmFsRGF0YUAyQFBBVkpTR2xvYmFsT2Jq
ZWN0QDJAQFoKKyAgICA/c2V0VGFyZ2V0QEpTUHJveHlASlNDQEBJQUVYQUFWVk1AMkBQQVZKU0ds
b2JhbE9iamVjdEAyQEBaCiAgICAgP3NldHRlckBQcm9wZXJ0eURlc2NyaXB0b3JASlNDQEBRQkU/
QVZKU1ZhbHVlQDJAWFoKICAgICA/c2V0VG9DdXJyZW50TG9jYWxUaW1lQEdyZWdvcmlhbkRhdGVU
aW1lQFdURkBAUUFFWFhaCiAgICAgP3NldFVuZGVmaW5lZEBQcm9wZXJ0eURlc2NyaXB0b3JASlND
QEBRQUVYWFoKQEAgLTQ4NCwxMSArNDg0LDExIEBAIEVYUE9SVFMKICAgICA/c3BsaXRAU3RyaW5n
QFdURkBAUUJFWF9XX05BQVY/JFZlY3RvckBWU3RyaW5nQFdURkBAJDBBQFZDcmFzaE9uT3ZlcmZs
b3dAMkBAMkBAWgogICAgID9zcGxpdEBTdHJpbmdAV1RGQEBRQkVYQUJWMTJAX05BQVY/JFZlY3Rv
ckBWU3RyaW5nQFdURkBAJDBBQFZDcmFzaE9uT3ZlcmZsb3dAMkBAMkBAWgogICAgID9zdGFydFBy
b2ZpbGluZ0BMZWdhY3lQcm9maWxlckBKU0NAQFFBRVhQQVZFeGVjU3RhdGVAMkBBQlZTdHJpbmdA
V1RGQEBAWgotICAgID9zdGFydFNhbXBsaW5nQEpTR2xvYmFsRGF0YUBKU0NAQFFBRVhYWgorICAg
ID9zdGFydFNhbXBsaW5nQFZNQEpTQ0BAUUFFWFhaCiAgICAgP3N0YXJ0c1dpdGhAU3RyaW5nSW1w
bEBXVEZAQFFCRV9OX1dAWgogICAgID9zdGFydHNXaXRoQFN0cmluZ0ltcGxAV1RGQEBRQkVfTlBC
RElfTkBaCiAgICAgP3N0b3BQcm9maWxpbmdATGVnYWN5UHJvZmlsZXJASlNDQEBRQUU/QVY/JFBh
c3NSZWZQdHJAVlByb2ZpbGVASlNDQEBAV1RGQEBQQVZFeGVjU3RhdGVAMkBBQlZTdHJpbmdANEBA
WgotICAgID9zdG9wU2FtcGxpbmdASlNHbG9iYWxEYXRhQEpTQ0BAUUFFWFhaCisgICAgP3N0b3BT
YW1wbGluZ0BWTUBKU0NAQFFBRVhYWgogICAgID9zdHJpbmdAT3BhcXVlSlNTdHJpbmdAQFFCRT9B
VlN0cmluZ0BXVEZAQFhaCiAgICAgP1N0cmluZ1RvRG91YmxlQFN0cmluZ1RvRG91YmxlQ29udmVy
dGVyQGRvdWJsZV9jb252ZXJzaW9uQFdURkBAU0FOUEJESVBBSUBaCiAgICAgP3N0cmlwV2hpdGVT
cGFjZUBTdHJpbmdAV1RGQEBRQkU/QVYxMkBYWgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03NDUs
NyArNzQ1LDcgQEAKIAkJQkMxOEM0MUQwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2xhc3NSZWYuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NDBGQ0UxMEE1
MUU0NkIwMDA1RjA2MSAvKiBKU0NsYXNzUmVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEM0MUUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ29u
dGV4dFJlZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTRCRDVBMkEwQTNFOTFGNjAwQkFGNTlDIC8qIEpTQ29udGV4dFJlZi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJQkMxOEM0MUYwRTE2RjVDRDAwQjM0
NDYwIC8qIEpTRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY2OTJBODVGMDI1NTU5N0QwMUZGNjBGNyAvKiBKU0Z1bmN0aW9uLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQkMxOEM0MjAwRTE2
RjVDRDAwQjM0NDYwIC8qIEpTR2xvYmFsRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4RTNBNTYwREY5Mjc4QzAwRDkwQjM0IC8qIEpTR2xvYmFs
RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUJDMThDNDIwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBWTS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4RTNBNTYwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEM0
MjEwRTE2RjVDRDAwQjM0NDYwIC8qIEpTR2xvYmFsT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEU4OTQzMzBDRDA2MDNGMDAzNjcxNzkgLyog
SlNHbG9iYWxPYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlCQzE4QzQyMzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNMb2NrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUVBNEM5QTA5MkFGOUUyMDA5
M0Q4MDAgLyogSlNMb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQkMxOEM0MjQwRTE2RjVDRDAwQjM0NDYwIC8qIEpTT2JqZWN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzIyQTM5OTBFMTZFMTQ4
MDBBRjIxQzggLyogSlNPYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtODYyLDcgKzg2Miw3IEBACiAJCUUxMjRBOEY3MEU1NTU3NzUwMDMw
OTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTEyNEE4RjUwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5n
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTEy
NEE4RjgwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjRBOEY2MEU1NTU3NzUwMDMwOTFG
MSAvKiBPcGFxdWVKU1N0cmluZy5jcHAgKi87IH07CiAJCUUxNzg2MzZEMEQ5QkVFQzMwMEQ3NEU3
NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUxNzg2MzZDMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJbml0aWFsaXpl
VGhyZWFkaW5nLmNwcCAqLzsgfTsKLQkJRTE4RTNBNTkwREY5Mjc4QzAwRDkwQjM0IC8qIEpTR2xv
YmFsRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogSlNHbG9iYWxEYXRhLmNwcCAqLzsgfTsKKwkJ
RTE4RTNBNTkwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOEUzQTU3MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5j
cHAgKi87IH07CiAJCUU0OURDMTZCMTJFRjI5M0UwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNh
Y2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
OURDMTU1MTJFRjI3NzIwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmNwcCAqLzsgfTsK
IAkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURDMTUxMTJFRjI3
MjIwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8q
IFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE0OTEyRUYyNjFBMDAxODRBMUYgLyogU291cmNlUHJvdmlk
ZXJDYWNoZUl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMTc3Miw4ICsxNzcyLDggQEAKIAkJRTEyNEE4RjYwRTU1NTc3NTAwMzA5MUYxIC8q
IE9wYXF1ZUpTU3RyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE9wYXF1ZUpTU3RyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE3ODYz
M0YwRDlCRUMwMDAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZVRocmVhZGluZy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFMTc4NjM2QzBEOUJFRUMzMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRo
cmVhZGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0aWFs
aXplVGhyZWFkaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTE4RTNBNTYw
REY5Mjc4QzAwRDkwQjM0IC8qIEpTR2xvYmFsRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0dsb2JhbERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
RTE4RTNBNTcwREY5Mjc4QzAwRDkwQjM0IC8qIEpTR2xvYmFsRGF0YS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0dsb2JhbERhdGEuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFMThFM0E1NjBERjkyNzhDMDBEOTBCMzQgLyogVk0uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTE4RTNBNTcwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZNLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTQ5REMxNDkxMkVGMjYxQTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVt
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0OURDMTUxMTJFRjI3MjIwMDE4NEEx
RiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNvdXJjZVByb3ZpZGVyQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTQ5REMxNTUxMkVGMjc3MjAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU291cmNlUHJvdmlkZXJDYWNoZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDYxLDggKzI0NjEsOCBAQAogCQkJCUE3
QjRBQ0FFMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oICovLAogCQkJCUY2OTJB
ODVFMDI1NTU5N0QwMUZGNjBGNyAvKiBKU0Z1bmN0aW9uLmNwcCAqLywKIAkJCQlGNjkyQTg1RjAy
NTU1OTdEMDFGRjYwRjcgLyogSlNGdW5jdGlvbi5oICovLAotCQkJCUUxOEUzQTU3MERGOTI3OEMw
MEQ5MEIzNCAvKiBKU0dsb2JhbERhdGEuY3BwICovLAotCQkJCUUxOEUzQTU2MERGOTI3OEMwMEQ5
MEIzNCAvKiBKU0dsb2JhbERhdGEuaCAqLywKKwkJCQlFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQg
LyogVk0uY3BwICovLAorCQkJCUUxOEUzQTU2MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5oICovLAog
CQkJCTE0REUwRDY4MEQwMjQzMTQwMEFBQ0NBMiAvKiBKU0dsb2JhbE9iamVjdC5jcHAgKi8sCiAJ
CQkJQThFODk0MzMwQ0QwNjAzRjAwMzY3MTc5IC8qIEpTR2xvYmFsT2JqZWN0LmggKi8sCiAJCQkJ
QkM3NTZGQzYwRTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCAq
LywKQEAgLTMxODEsNyArMzE4MSw3IEBACiAJCQkJODZFM0M2MTQxNjdCQUJENzAwNkQ3NjBBIC8q
IEpTRXhwb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0I0QUNBRjE0ODRDOUNFMDBCMzhBMzYg
LyogSlNFeHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFGMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBKU0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzE4QzQyMDBFMTZG
NUNEMDBCMzQ0NjAgLyogSlNHbG9iYWxEYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzE4QzQy
MDBFMTZGNUNEMDBCMzQ0NjAgLyogVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIxMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBKU0dsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3
NTZGQzkwRTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzZDNTE3NjExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQu
aCBpbiBIZWFkZXJzICovLApAQCAtMzkyNCw3ICszOTI0LDcgQEAKIAkJCQkxNEJENUEzMDBBM0U5
MUY2MDBCQUY1OUMgLyogSlNDb250ZXh0UmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3ODgw
MTQwMTQ3MUFEOTIwMDQxQjAxNiAvKiBKU0RhdGVNYXRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0MDU2NkQ2MTA3RUMyNzEwMDVEQkM4RCAvKiBKU0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCUUxOEUzQTU5MERGOTI3OEMwMEQ5MEIzNCAvKiBKU0dsb2JhbERhdGEuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRTE4RTNBNTkwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0N0YzOUQyMTA3RUMzNzYwMDQyN0E0OCAvKiBKU0dsb2JhbE9iamVjdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEU5RDE3QjEwN0VDNDY5MDA0RERBMjEgLyogSlNHbG9i
YWxPYmplY3RGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NzUxMDdFQzEz
RTAwMTNFN0IyIC8qIEpTTG9jay5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5jcHAJKHJldmlzaW9uIDE0
ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzkxLDE0ICszOTEsMTQgQEAgdm9pZCBBUk1Bc3NlbWJsZXI6
OmJhc2VJbmRleFRyYW5zZmVyRmxvYQogICAgIGRhdGFUcmFuc2ZlckZsb2F0KHRyYW5zZmVyVHlw
ZSwgc3JjRHN0LCBBUk1SZWdpc3RlcnM6OlMxLCBvZmZzZXQpOwogfQogCi1QYXNzUmVmUHRyPEV4
ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEFSTUFzc2VtYmxlcjo6ZXhlY3V0YWJsZUNvcHkoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQg
ZWZmb3J0KQorUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBBUk1Bc3NlbWJsZXI6
OmV4ZWN1dGFibGVDb3B5KFZNJiB2bSwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZm
b3J0IGVmZm9ydCkKIHsKICAgICAvLyA2NC1iaXQgYWxpZ25tZW50IGlzIHJlcXVpcmVkIGZvciBu
ZXh0IGNvbnN0YW50IHBvb2wgYW5kIEpJVCBjb2RlIGFzIHdlbGwKICAgICBtX2J1ZmZlci5mbHVz
aFdpdGhvdXRCYXJyaWVyKHRydWUpOwogICAgIGlmICghbV9idWZmZXIuaXNBbGlnbmVkKDgpKQog
ICAgICAgICBia3B0KDApOwogCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJl
c3VsdCA9IG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGdsb2JhbERhdGEsIG93bmVyVUlELCBlZmZv
cnQpOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBtX2J1ZmZl
ci5leGVjdXRhYmxlQ29weSh2bSwgb3duZXJVSUQsIGVmZm9ydCk7CiAgICAgY2hhciogZGF0YSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdC0+c3RhcnQoKSk7CiAKICAgICBmb3IgKEp1
bXBzOjpJdGVyYXRvciBpdGVyID0gbV9qdW1wcy5iZWdpbigpOyBpdGVyICE9IG1fanVtcHMuZW5k
KCk7ICsraXRlcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1B
c3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0FSTUFzc2VtYmxlci5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NjAsNyArNzYw
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gbG9hZEJyYW5jaFRhcmdl
dChBUk1SZWdpc3RlcnM6OnBjLCBjYywgdXNlQ29uc3RhbnRQb29sKTsKICAgICAgICAgfQogCi0g
ICAgICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJsZUNvcHko
SlNHbG9iYWxEYXRhJiwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAg
ICAgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxlQ29weShW
TSYsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAKICAgICAgICAgdW5z
aWduZWQgZGVidWdPZmZzZXQoKSB7IHJldHVybiBtX2J1ZmZlci5kZWJ1Z09mZnNldCgpOyB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJC
dWZmZXIuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9Bc3NlbWJsZXJCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAog
CiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkpJVENvbXBpbGF0
aW9uRWZmb3J0LmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIK
ICNpbmNsdWRlICJzdGRpbnQuaCIKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgpAQCAtMTMwLDEyICsxMzAsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICByZXR1cm4gQXNzZW1ibGVyTGFiZWwobV9pbmRleCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVDb3B5KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZm
b3J0IGVmZm9ydCkKKyAgICAgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBl
eGVjdXRhYmxlQ29weShWTSYgdm0sIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9y
dCBlZmZvcnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9pbmRleCkKICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICAgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlI
YW5kbGU+IHJlc3VsdCA9IGdsb2JhbERhdGEuZXhlY3V0YWJsZUFsbG9jYXRvci5hbGxvY2F0ZShn
bG9iYWxEYXRhLCBtX2luZGV4LCBvd25lclVJRCwgZWZmb3J0KTsKKyAgICAgICAgICAgIFJlZlB0
cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSB2bS5leGVjdXRhYmxlQWxsb2NhdG9y
LmFsbG9jYXRlKHZtLCBtX2luZGV4LCBvd25lclVJRCwgZWZmb3J0KTsKIAogICAgICAgICAgICAg
aWYgKCFyZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1
ZmZlcldpdGhDb25zdGFudFBvb2wuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE5NSwxMCArMTk1LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcHV0SW50
ZWdyYWxVbmNoZWNrZWQodmFsdWUubG93KTsKICAgICB9CiAKLSAgICBQYXNzUmVmUHRyPEV4ZWN1
dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKKyAgICBQYXNz
UmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVDb3B5KFZNJiB2bSwgdm9p
ZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICB7CiAgICAgICAg
IGZsdXNoQ29uc3RhbnRQb29sKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIEFzc2VtYmxlckJ1ZmZl
cjo6ZXhlY3V0YWJsZUNvcHkoZ2xvYmFsRGF0YSwgb3duZXJVSUQsIGVmZm9ydCk7CisgICAgICAg
IHJldHVybiBBc3NlbWJsZXJCdWZmZXI6OmV4ZWN1dGFibGVDb3B5KHZtLCBvd25lclVJRCwgZWZm
b3J0KTsKICAgICB9CiAKICAgICB2b2lkIHB1dFNob3J0V2l0aENvbnN0YW50SW50KHVpbnQxNl90
IGluc24sIHVpbnQzMl90IGNvbnN0YW50LCBib29sIGlzUmV1c2FibGUgPSBmYWxzZSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkocmV2
aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVm
ZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCB2b2lkIExpbmtCdWZmZXI6
OmxpbmtDb2RlKHZvaWQqIG93bmVyVUlECiB7CiAgICAgQVNTRVJUKCFtX2NvZGUpOwogI2lmICFF
TkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCi0gICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gbV9hc3Nl
bWJsZXItPm1fYXNzZW1ibGVyLmV4ZWN1dGFibGVDb3B5KCptX2dsb2JhbERhdGEsIG93bmVyVUlE
LCBlZmZvcnQpOworICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG1fYXNzZW1ibGVyLT5tX2Fzc2Vt
Ymxlci5leGVjdXRhYmxlQ29weSgqbV92bSwgb3duZXJVSUQsIGVmZm9ydCk7CiAgICAgaWYgKCFt
X2V4ZWN1dGFibGVNZW1vcnkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvZGUgPSBtX2V4ZWN1
dGFibGVNZW1vcnktPnN0YXJ0KCk7CkBAIC03MCw3ICs3MCw3IEBAIHZvaWQgTGlua0J1ZmZlcjo6
bGlua0NvZGUodm9pZCogb3duZXJVSUQKICAgICBBU1NFUlQobV9jb2RlKTsKICNlbHNlCiAgICAg
bV9pbml0aWFsU2l6ZSA9IG1fYXNzZW1ibGVyLT5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOwotICAg
IG1fZXhlY3V0YWJsZU1lbW9yeSA9IG1fZ2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9jYXRvci5h
bGxvY2F0ZSgqbV9nbG9iYWxEYXRhLCBtX2luaXRpYWxTaXplLCBvd25lclVJRCwgZWZmb3J0KTsK
KyAgICBtX2V4ZWN1dGFibGVNZW1vcnkgPSBtX3ZtLT5leGVjdXRhYmxlQWxsb2NhdG9yLmFsbG9j
YXRlKCptX3ZtLCBtX2luaXRpYWxTaXplLCBvd25lclVJRCwgZWZmb3J0KTsKICAgICBpZiAoIW1f
ZXhlY3V0YWJsZU1lbW9yeSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29kZSA9ICh1aW50OF90
KiltX2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDcgKzQxLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTR2xvYmFsRGF0YTsK
K2NsYXNzIFZNOwogCiAvLyBMaW5rQnVmZmVyOgogLy8KQEAgLTc2LDE0ICs3NiwxNCBAQCBjbGFz
cyBMaW5rQnVmZmVyIHsKICNlbmRpZgogCiBwdWJsaWM6Ci0gICAgTGlua0J1ZmZlcihKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVyKiBtYXNtLCB2b2lkKiBvd25lclVJRCwg
SklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0ID0gSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCkK
KyAgICBMaW5rQnVmZmVyKFZNJiB2bSwgTWFjcm9Bc3NlbWJsZXIqIG1hc20sIHZvaWQqIG93bmVy
VUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQgPSBKSVRDb21waWxhdGlvbk11c3RTdWNj
ZWVkKQogICAgICAgICA6IG1fc2l6ZSgwKQogI2lmIEVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikK
ICAgICAgICAgLCBtX2luaXRpYWxTaXplKDApCiAjZW5kaWYKICAgICAgICAgLCBtX2NvZGUoMCkK
ICAgICAgICAgLCBtX2Fzc2VtYmxlcihtYXNtKQotICAgICAgICAsIG1fZ2xvYmFsRGF0YSgmZ2xv
YmFsRGF0YSkKKyAgICAgICAgLCBtX3ZtKCZ2bSkKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwg
bV9jb21wbGV0ZWQoZmFsc2UpCiAgICAgICAgICwgbV9lZmZvcnQoZWZmb3J0KQpAQCAtMjU2LDcg
KzI1Niw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB2b2lkKiBtX2NvZGU7CiAgICAgTWFjcm9B
c3NlbWJsZXIqIG1fYXNzZW1ibGVyOwotICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwor
ICAgIFZNKiBtX3ZtOwogI2lmbmRlZiBOREVCVUcKICAgICBib29sIG1fY29tcGxldGVkOwogICAg
IEpJVENvbXBpbGF0aW9uRWZmb3J0IG1fZWZmb3J0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NSVBTQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NSVBTQXNzZW1ibGVyLmgJKHJldmlzaW9uIDE0ODYzOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC02NzYsOSArNjc2LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9idWZm
ZXIuY29kZVNpemUoKTsKICAgICB9CiAKLSAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlI
YW5kbGU+IGV4ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdm9pZCogb3du
ZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKKyAgICBQYXNzUmVmUHRyPEV4ZWN1
dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVDb3B5KFZNJiB2bSwgdm9pZCogb3duZXJVSUQs
IEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICB7Ci0gICAgICAgIFJlZlB0cjxFeGVj
dXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBtX2J1ZmZlci5leGVjdXRhYmxlQ29weShnbG9i
YWxEYXRhLCBvd25lclVJRCwgZWZmb3J0KTsKKyAgICAgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+IHJlc3VsdCA9IG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KHZtLCBvd25lclVJRCwg
ZWZmb3J0KTsKICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gMDsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5o
CShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NI
NEFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTc1LDkgKzE1NzUsOSBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWFkUENyZWxhdGl2ZUFk
ZHJlc3MoKCppbnN0cnVjdGlvblB0ciAmIDB4ZmYpLCBpbnN0cnVjdGlvblB0cikpOwogICAgIH0K
IAotICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJsZUNvcHko
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25F
ZmZvcnQgZWZmb3J0KQorICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhl
Y3V0YWJsZUNvcHkoVk0mIHZtLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQg
ZWZmb3J0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGds
b2JhbERhdGEsIG93bmVyVUlELCBlZmZvcnQpOworICAgICAgICByZXR1cm4gbV9idWZmZXIuZXhl
Y3V0YWJsZUNvcHkodm0sIG93bmVyVUlELCBlZmZvcnQpOwogICAgIH0KIAogICAgIHN0YXRpYyB2
b2lkIGNhY2hlRmx1c2godm9pZCogY29kZSwgc2l6ZV90IHNpemUpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDE0ODYz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE5OTEsOSArMTk5MSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGIubV9vZmZzZXQgLSBhLm1fb2Zmc2V0OwogICAgIH0KICAgICAKLSAgICBQYXNzUmVmUHRyPEV4
ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKKyAgICBQ
YXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVDb3B5KFZNJiB2bSwg
dm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2Zvcm1hdHRlci5leGVjdXRhYmxlQ29weShnbG9iYWxEYXRhLCBvd25lclVJ
RCwgZWZmb3J0KTsKKyAgICAgICAgcmV0dXJuIG1fZm9ybWF0dGVyLmV4ZWN1dGFibGVDb3B5KHZt
LCBvd25lclVJRCwgZWZmb3J0KTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBkZWJ1Z09mZnNldCgp
IHsgcmV0dXJuIG1fZm9ybWF0dGVyLmRlYnVnT2Zmc2V0KCk7IH0KQEAgLTIzNDksOSArMjM0OSw5
IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgaXNBbGlnbmVkKGludCBhbGlnbm1lbnQpIGNvbnN0
IHsgcmV0dXJuIG1fYnVmZmVyLmlzQWxpZ25lZChhbGlnbm1lbnQpOyB9CiAgICAgICAgIHZvaWQq
IGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5kYXRhKCk7IH0KIAotICAgICAgICBQYXNz
UmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9y
dCkKKyAgICAgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxl
Q29weShWTSYgdm0sIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2J1ZmZlci5leGVjdXRhYmxlQ29weShn
bG9iYWxEYXRhLCBvd25lclVJRCwgZWZmb3J0KTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1ZmZl
ci5leGVjdXRhYmxlQ29weSh2bSwgb3duZXJVSUQsIGVmZm9ydCk7CiAgICAgICAgIH0KIAogICAg
ICAgICB1bnNpZ25lZCBkZWJ1Z09mZnNldCgpIHsgcmV0dXJuIG1fYnVmZmVyLmRlYnVnT2Zmc2V0
KCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTkgKzMzLDE5IEBA
CiAjaWYgRU5BQkxFKEpJVCkKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIENhbGxMaW5rSW5mbzo6
dW5saW5rKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1
ZmZlcikKK3ZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0mIHZtLCBSZXBhdGNoQnVmZmVyJiBy
ZXBhdGNoQnVmZmVyKQogewogICAgIEFTU0VSVChpc0xpbmtlZCgpKTsKICAgICAKICAgICByZXBh
dGNoQnVmZmVyLnJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBhdGNoKFJlcGF0
Y2hCdWZmZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGhvdFBhdGhCZWdp
biksIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihjYWxsZWVHUFIpLCAw
KTsKICAgICBpZiAoaXNERkcpIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoY2FsbFJldHVybkxvY2F0aW9uLCAoY2FsbFR5cGUgPT0gQ29uc3RydWN0
ID8gZ2xvYmFsRGF0YS5nZXRDVElTdHViKERGRzo6bGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9y
KSA6IGdsb2JhbERhdGEuZ2V0Q1RJU3R1YihERkc6OmxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpKS5j
b2RlKCkpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0dXJuTG9jYXRpb24s
IChjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyB2bS5nZXRDVElTdHViKERGRzo6bGlua0NvbnN0cnVj
dFRodW5rR2VuZXJhdG9yKSA6IHZtLmdldENUSVN0dWIoREZHOjpsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKSkuY29kZSgpKTsKICNlbHNlCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAjZW5kaWYKICAgICB9IGVsc2UKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2Fs
bFJldHVybkxvY2F0aW9uLCBjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyBnbG9iYWxEYXRhLmdldENU
SVN0dWIobGlua0NvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpIDogZ2xvYmFsRGF0YS5nZXRDVElT
dHViKGxpbmtDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhjYWxsUmV0dXJuTG9jYXRpb24sIGNhbGxUeXBlID09IENvbnN0cnVjdCA/IHZtLmdldENU
SVN0dWIobGlua0NvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpIDogdm0uZ2V0Q1RJU3R1YihsaW5r
Q2FsbEdlbmVyYXRvcikuY29kZSgpKTsKICAgICBoYXNTZWVuU2hvdWxkUmVwYXRjaCA9IGZhbHNl
OwogICAgIGNhbGxlZS5jbGVhcigpOwogICAgIHN0dWIuY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDE0ODYz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29y
a2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCBzdHJ1Y3QgQ2FsbExpbmtJbmZvIDogcHVibGlj
IEJhc2ljUmF3U2VuCiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwogCiAgICAgYm9vbCBpc0xp
bmtlZCgpIHsgcmV0dXJuIHN0dWIgfHwgY2FsbGVlOyB9Ci0gICAgdm9pZCB1bmxpbmsoSlNHbG9i
YWxEYXRhJiwgUmVwYXRjaEJ1ZmZlciYpOworICAgIHZvaWQgdW5saW5rKFZNJiwgUmVwYXRjaEJ1
ZmZlciYpOwogCiAgICAgYm9vbCBzZWVuT25jZSgpCiAgICAgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMDIsNyArMzAyLDcgQEAgc3RhdGljIHZvaWQgZHVtcFN0cnVjdHVyZShQcmludFN0
cmVhbSYgbwogICAgIAogICAgIG91dC5wcmludGYoIiVzID0gJXAiLCBuYW1lLCBzdHJ1Y3R1cmUp
OwogICAgIAotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgaWRlbnQpOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVj
dHVyZS0+Z2V0KGV4ZWMtPnZtKCksIGlkZW50KTsKICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRP
ZmZzZXQpCiAgICAgICAgIG91dC5wcmludGYoIiAob2Zmc2V0ID0gJWQpIiwgb2Zmc2V0KTsKIH0K
QEAgLTQ4Niw3ICs0ODYsNyBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRTdHJ1Y3R1cmUoUHJpbnRT
dHJlCiAKIHZvaWQgQ29kZUJsb2NrOjpwcmludFN0cnVjdHVyZXMoUHJpbnRTdHJlYW0mIG91dCwg
Y29uc3QgSW5zdHJ1Y3Rpb24qIHZQQykKIHsKLSAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIg
PSBtX2dsb2JhbERhdGEtPmludGVycHJldGVyOworICAgIEludGVycHJldGVyKiBpbnRlcnByZXRl
ciA9IG1fdm0tPmludGVycHJldGVyOwogICAgIHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0ID0g
dlBDIC0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKIAogICAgIGlmICh2UENbMF0udS5vcGNvZGUg
PT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9nZXRfYnlfaWQpKSB7CkBAIC0xNjA3LDkgKzE2
MDcsOSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsCiAgICAgLCBt
X251bUNhbGxlZVJlZ2lzdGVycyhvdGhlci5tX251bUNhbGxlZVJlZ2lzdGVycykKICAgICAsIG1f
bnVtVmFycyhvdGhlci5tX251bVZhcnMpCiAgICAgLCBtX2lzQ29uc3RydWN0b3Iob3RoZXIubV9p
c0NvbnN0cnVjdG9yKQotICAgICwgbV91bmxpbmtlZENvZGUoKm90aGVyLm1fZ2xvYmFsRGF0YSwg
b3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgp
KQotICAgICwgbV9vd25lckV4ZWN1dGFibGUoKm90aGVyLm1fZ2xvYmFsRGF0YSwgb3RoZXIubV9v
d25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpKQotICAg
ICwgbV9nbG9iYWxEYXRhKG90aGVyLm1fZ2xvYmFsRGF0YSkKKyAgICAsIG1fdW5saW5rZWRDb2Rl
KCpvdGhlci5tX3ZtLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSwgb3RoZXIubV91bmxp
bmtlZENvZGUuZ2V0KCkpCisgICAgLCBtX293bmVyRXhlY3V0YWJsZSgqb3RoZXIubV92bSwgb3Ro
ZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgp
KQorICAgICwgbV92bShvdGhlci5tX3ZtKQogICAgICwgbV9pbnN0cnVjdGlvbnMob3RoZXIubV9p
bnN0cnVjdGlvbnMpCiAgICAgLCBtX3RoaXNSZWdpc3RlcihvdGhlci5tX3RoaXNSZWdpc3RlcikK
ICAgICAsIG1fYXJndW1lbnRzUmVnaXN0ZXIob3RoZXIubV9hcmd1bWVudHNSZWdpc3RlcikKQEAg
LTE2NDgsMTQgKzE2NDgsMTQgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29weVBhcnNlZEJsb2Nr
VGFnLAogfQogCiBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgYmFzZVNjb3BlRGVwdGgsIFBhc3NSZWZQdHI8
U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFBh
c3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGds
b2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCkK
LSAgICAsIG1faGVhcCgmbV9nbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKQorICAgIDog
bV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIGdsb2Jh
bE9iamVjdCkKKyAgICAsIG1faGVhcCgmbV9nbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkKICAgICAs
IG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lz
dGVycykKICAgICAsIG1fbnVtVmFycyh1bmxpbmtlZENvZGVCbG9jay0+bV9udW1WYXJzKQogICAg
ICwgbV9pc0NvbnN0cnVjdG9yKHVubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkpCi0g
ICAgLCBtX3VubGlua2VkQ29kZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgb3duZXJFeGVj
dXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaykKLSAgICAsIG1fb3duZXJFeGVjdXRhYmxlKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1dGFibGUsIG93bmVyRXhlY3V0YWJsZSkK
LSAgICAsIG1fZ2xvYmFsRGF0YSh1bmxpbmtlZENvZGVCbG9jay0+Z2xvYmFsRGF0YSgpKQorICAg
ICwgbV91bmxpbmtlZENvZGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIHVu
bGlua2VkQ29kZUJsb2NrKQorICAgICwgbV9vd25lckV4ZWN1dGFibGUoZ2xvYmFsT2JqZWN0LT52
bSgpLCBvd25lckV4ZWN1dGFibGUsIG93bmVyRXhlY3V0YWJsZSkKKyAgICAsIG1fdm0odW5saW5r
ZWRDb2RlQmxvY2stPnZtKCkpCiAgICAgLCBtX3RoaXNSZWdpc3Rlcih1bmxpbmtlZENvZGVCbG9j
ay0+dGhpc1JlZ2lzdGVyKCkpCiAgICAgLCBtX2FyZ3VtZW50c1JlZ2lzdGVyKHVubGlua2VkQ29k
ZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKQogICAgICwgbV9hY3RpdmF0aW9uUmVnaXN0ZXIo
dW5saW5rZWRDb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKQpAQCAtMTY2OSw3ICsxNjY5
LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICwgbV9v
cHRpbWl6YXRpb25EZWxheUNvdW50ZXIoMCkKICAgICAsIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNv
dW50ZXIoMCkKIHsKLSAgICBtX2dsb2JhbERhdGEtPnN0YXJ0ZWRDb21waWxpbmcodGhpcyk7Cisg
ICAgbV92bS0+c3RhcnRlZENvbXBpbGluZyh0aGlzKTsKIAogICAgIEFTU0VSVChtX3NvdXJjZSk7
CiAgICAgc2V0TnVtUGFyYW1ldGVycyh1bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
KTsKQEAgLTE2ODAsNyArMTY4MCw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG8KICAgICBzZXRJZGVudGlmaWVycyh1bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmll
cnMoKSk7CiAgICAgc2V0Q29uc3RhbnRSZWdpc3RlcnModW5saW5rZWRDb2RlQmxvY2stPmNvbnN0
YW50UmVnaXN0ZXJzKCkpOwogICAgIGlmICh1bmxpbmtlZENvZGVCbG9jay0+dXNlc0dsb2JhbE9i
amVjdCgpKQotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3VubGlua2VkQ29kZUJsb2NrLT5n
bG9iYWxPYmplY3RSZWdpc3RlcigpXS5zZXQoKm1fZ2xvYmFsRGF0YSwgb3duZXJFeGVjdXRhYmxl
LCBnbG9iYWxPYmplY3QpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3VubGlua2VkQ29k
ZUJsb2NrLT5nbG9iYWxPYmplY3RSZWdpc3RlcigpXS5zZXQoKm1fdm0sIG93bmVyRXhlY3V0YWJs
ZSwgZ2xvYmFsT2JqZWN0KTsKICAgICBtX2Z1bmN0aW9uRGVjbHMuZ3Jvdyh1bmxpbmtlZENvZGVC
bG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkpOwogICAgIGZvciAoc2l6ZV90IGNvdW50ID0g
dW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygpLCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKICAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2Vk
RXhlY3V0YWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkRlY2woaSk7CkBAIC0xNjg5
LDggKzE2ODksOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAg
ICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gc291cmNlT2Zmc2V0ICsgdW5saW5rZWRFeGVj
dXRhYmxlLT5zdGFydE9mZnNldCgpOwogICAgICAgICB1bnNpZ25lZCBzb3VyY2VMZW5ndGggPSB1
bmxpbmtlZEV4ZWN1dGFibGUtPnNvdXJjZUxlbmd0aCgpOwogICAgICAgICBTb3VyY2VDb2RlIGNv
ZGUobV9zb3VyY2UsIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCArIHNvdXJjZUxlbmd0aCwgZmly
c3RMaW5lKTsKLSAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gRnVuY3Rp
b25FeGVjdXRhYmxlOjpjcmVhdGUoKm1fZ2xvYmFsRGF0YSwgY29kZSwgdW5saW5rZWRFeGVjdXRh
YmxlLCBmaXJzdExpbmUsIGZpcnN0TGluZSArIGxpbmVDb3VudCk7Ci0gICAgICAgIG1fZnVuY3Rp
b25EZWNsc1tpXS5zZXQoKm1fZ2xvYmFsRGF0YSwgb3duZXJFeGVjdXRhYmxlLCBleGVjdXRhYmxl
KTsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gRnVuY3Rpb25FeGVj
dXRhYmxlOjpjcmVhdGUoKm1fdm0sIGNvZGUsIHVubGlua2VkRXhlY3V0YWJsZSwgZmlyc3RMaW5l
LCBmaXJzdExpbmUgKyBsaW5lQ291bnQpOworICAgICAgICBtX2Z1bmN0aW9uRGVjbHNbaV0uc2V0
KCptX3ZtLCBvd25lckV4ZWN1dGFibGUsIGV4ZWN1dGFibGUpOwogICAgIH0KIAogICAgIG1fZnVu
Y3Rpb25FeHBycy5ncm93KHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRXhwcnMo
KSk7CkBAIC0xNzAxLDggKzE3MDEsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVj
dXRhYmxlKiBvCiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gc291cmNlT2Zmc2V0ICsg
dW5saW5rZWRFeGVjdXRhYmxlLT5zdGFydE9mZnNldCgpOwogICAgICAgICB1bnNpZ25lZCBzb3Vy
Y2VMZW5ndGggPSB1bmxpbmtlZEV4ZWN1dGFibGUtPnNvdXJjZUxlbmd0aCgpOwogICAgICAgICBT
b3VyY2VDb2RlIGNvZGUobV9zb3VyY2UsIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCArIHNvdXJj
ZUxlbmd0aCwgZmlyc3RMaW5lKTsKLSAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRh
YmxlID0gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoKm1fZ2xvYmFsRGF0YSwgY29kZSwgdW5s
aW5rZWRFeGVjdXRhYmxlLCBmaXJzdExpbmUsIGZpcnN0TGluZSArIGxpbmVDb3VudCk7Ci0gICAg
ICAgIG1fZnVuY3Rpb25FeHByc1tpXS5zZXQoKm1fZ2xvYmFsRGF0YSwgb3duZXJFeGVjdXRhYmxl
LCBleGVjdXRhYmxlKTsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0g
RnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoKm1fdm0sIGNvZGUsIHVubGlua2VkRXhlY3V0YWJs
ZSwgZmlyc3RMaW5lLCBmaXJzdExpbmUgKyBsaW5lQ291bnQpOworICAgICAgICBtX2Z1bmN0aW9u
RXhwcnNbaV0uc2V0KCptX3ZtLCBvd25lckV4ZWN1dGFibGUsIGV4ZWN1dGFibGUpOwogICAgIH0K
IAogICAgIGlmICh1bmxpbmtlZENvZGVCbG9jay0+aGFzUmFyZURhdGEoKSkgewpAQCAtMTc5MSw3
ICsxNzkxLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAg
IFZlY3RvcjxJbnN0cnVjdGlvbiwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IGluc3RydWN0aW9u
cyhpbnN0cnVjdGlvbkNvdW50KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVubGlua2Vk
Q29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7ICkgewogICAgICAgICB1bnNpZ25lZCBv
cExlbmd0aCA9IG9wY29kZUxlbmd0aChwY1tpXS51Lm9wY29kZSk7Ci0gICAgICAgIGluc3RydWN0
aW9uc1tpXSA9IGdsb2JhbERhdGEoKS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZShwY1tpXS51Lm9w
Y29kZSk7CisgICAgICAgIGluc3RydWN0aW9uc1tpXSA9IHZtKCktPmludGVycHJldGVyLT5nZXRP
cGNvZGUocGNbaV0udS5vcGNvZGUpOwogICAgICAgICBmb3IgKHNpemVfdCBqID0gMTsgaiA8IG9w
TGVuZ3RoOyArK2opIHsKICAgICAgICAgICAgIGlmIChzaXplb2YoaW50MzJfdCkgIT0gc2l6ZW9m
KGludHB0cl90KSkKICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIGpdLnUucG9pbnRl
ciA9IDA7CkBAIC0xODkxLDcgKzE4OTEsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRF
eGVjdXRhYmxlKiBvCiAgICAgICAgICAgICBpbnQgaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSA9IHBj
W2kgKyBvcExlbmd0aCAtIDJdLnUub3BlcmFuZDsKIAogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyBvcExlbmd0aCAtIDFdID0gb2JqZWN0QWxsb2NhdGlvblByb2ZpbGU7Ci0gICAgICAgICAg
ICBvYmplY3RBbGxvY2F0aW9uUHJvZmlsZS0+aW5pdGlhbGl6ZSgqZ2xvYmFsRGF0YSgpLAorICAg
ICAgICAgICAgb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUtPmluaXRpYWxpemUoKnZtKCksCiAgICAg
ICAgICAgICAgICAgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIG1fZ2xvYmFsT2JqZWN0LT5vYmpl
Y3RQcm90b3R5cGUoKSwgaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQpAQCAtMTk0NiwxMyArMTk0NiwxMyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAg
ICAgIGlmIChlbnRyeS5jb3VsZEJlV2F0Y2hlZCgpKSB7Ci0gICAgICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zW2kgKyAwXSA9IGdsb2JhbERhdGEoKS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9p
bml0X2dsb2JhbF9jb25zdF9jaGVjayk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kg
KyAwXSA9IHZtKCktPmludGVycHJldGVyLT5nZXRPcGNvZGUob3BfaW5pdF9nbG9iYWxfY29uc3Rf
Y2hlY2spOwogICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgMV0gPSAmZ2xvYmFsT2Jq
ZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpOwogICAgICAgICAgICAgICAgIGluc3Ry
dWN0aW9uc1tpICsgM10gPSBlbnRyeS5hZGRyZXNzT2ZJc1dhdGNoZWQoKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kg
KyAwXSA9IGdsb2JhbERhdGEoKS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9pbml0X2dsb2Jh
bF9jb25zdCk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDBdID0gdm0oKS0+aW50ZXJw
cmV0ZXItPmdldE9wY29kZShvcF9pbml0X2dsb2JhbF9jb25zdCk7CiAgICAgICAgICAgICBpbnN0
cnVjdGlvbnNbaSArIDFdID0gJmdsb2JhbE9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRl
eCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xOTgwLDE4ICsxOTgwLDE4
IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KIAogICAgIGlmIChP
cHRpb25zOjpkdW1wR2VuZXJhdGVkQnl0ZWNvZGVzKCkpCiAgICAgICAgIGR1bXBCeXRlY29kZSgp
OwotICAgIG1fZ2xvYmFsRGF0YS0+ZmluaXNoZWRDb21waWxpbmcodGhpcyk7CisgICAgbV92bS0+
ZmluaXNoZWRDb21waWxpbmcodGhpcyk7CiB9CiAKIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiB7
Ci0gICAgaWYgKG1fZ2xvYmFsRGF0YS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKQotICAgICAgICBt
X2dsb2JhbERhdGEtPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+bm90aWZ5RGVzdHJ1Y3Rpb24odGhp
cyk7CisgICAgaWYgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikKKyAgICAgICAgbV92bS0+
bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5ub3RpZnlEZXN0cnVjdGlvbih0aGlzKTsKICAgICAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBSZW1vdmUgbXlzZWxmIGZyb20gdGhlIHNldCBvZiBE
RkcgY29kZSBibG9ja3MuIE5vdGUgdGhhdCBJIG1heSBub3QgYmUgaW4gdGhpcyBzZXQKICAgICAv
LyAoYmVjYXVzZSBJJ20gbm90IGEgREZHIGNvZGUgYmxvY2spLCBpbiB3aGljaCBjYXNlIHRoaXMg
aXMgYSBuby1vcCBhbnl3YXkuCi0gICAgbV9nbG9iYWxEYXRhLT5oZWFwLm1fZGZnQ29kZUJsb2Nr
cy5tX3NldC5yZW1vdmUodGhpcyk7CisgICAgbV92bS0+aGVhcC5tX2RmZ0NvZGVCbG9ja3MubV9z
ZXQucmVtb3ZlKHRoaXMpOwogI2VuZGlmCiAgICAgCiAjaWYgRU5BQkxFKFZFUkJPU0VfVkFMVUVf
UFJPRklMRSkKQEAgLTIwMzYsNyArMjAzNiw3IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXROdW1QYXJh
bWV0ZXJzKGludCBuZXcKIAogdm9pZCBDb2RlQmxvY2s6OnZpc2l0U3RydWN0dXJlcyhTbG90Vmlz
aXRvciYgdmlzaXRvciwgSW5zdHJ1Y3Rpb24qIHZQQykKIHsKLSAgICBJbnRlcnByZXRlciogaW50
ZXJwcmV0ZXIgPSBtX2dsb2JhbERhdGEtPmludGVycHJldGVyOworICAgIEludGVycHJldGVyKiBp
bnRlcnByZXRlciA9IG1fdm0tPmludGVycHJldGVyOwogCiAgICAgaWYgKHZQQ1swXS51Lm9wY29k
ZSA9PSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX2dldF9ieV9pZCkgJiYgdlBDWzRdLnUuc3Ry
dWN0dXJlKSB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ2UENbNF0udS5zdHJ1Y3R1cmUpOwpA
QCAtMjIzMCw3ICsyMjMwLDcgQEAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZVVubGlua2luZyA9
IGZhbAogdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkKIHsKICNpZiBF
TkFCTEUoTExJTlQpCi0gICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV9nbG9iYWxEYXRh
LT5pbnRlcnByZXRlcjsKKyAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX3ZtLT5pbnRl
cnByZXRlcjsKICAgICBpZiAoISFudW1iZXJPZkluc3RydWN0aW9ucygpKSB7CiAgICAgICAgIGNv
bnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zID0gbV91bmxp
bmtlZENvZGUtPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKCk7CiAgICAgICAgIGZvciAoc2l6
ZV90IHNpemUgPSBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCksIGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7CkBAIC0yMzUyLDcgKzIzNTIsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWIt
PmV4ZWN1dGFibGUoKS0+aGFzaEZvcihjYWxsTGlua0luZm8oaSkuc3BlY2lhbGl6YXRpb25LaW5k
KCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBzdHViIHJvdXRpbmUgIiwg
UmF3UG9pbnRlcihzdHViKSwgIi5cbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvKGkpLnVubGluaygqbV9nbG9iYWxEYXRh
LCByZXBhdGNoQnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mbyhp
KS51bmxpbmsoKm1fdm0sIHJlcGF0Y2hCdWZmZXIpOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICghSGVhcDo6aXNNYXJrZWQoY2FsbExpbmtJbmZvKGkp
LmNhbGxlZS5nZXQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2VVbmxpbmtp
bmcpIHsKQEAgLTIzNjMsNyArMjM2Myw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxseSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZv
KGkpLnNwZWNpYWxpemF0aW9uS2luZCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
KS5cbiIpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxM
aW5rSW5mbyhpKS51bmxpbmsoKm1fZ2xvYmFsRGF0YSwgcmVwYXRjaEJ1ZmZlcik7CisgICAgICAg
ICAgICAgICAgICAgIGNhbGxMaW5rSW5mbyhpKS51bmxpbmsoKm1fdm0sIHJlcGF0Y2hCdWZmZXIp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghIWNh
bGxMaW5rSW5mbyhpKS5sYXN0U2VlbkNhbGxlZQpAQCAtMjU0NSw3ICsyNTQ1LDcgQEAgdm9pZCBD
b2RlQmxvY2s6OmNyZWF0ZUFjdGl2YXRpb24oQ2FsbEZyYQogICAgIEFTU0VSVChjb2RlVHlwZSgp
ID09IEZ1bmN0aW9uQ29kZSk7CiAgICAgQVNTRVJUKG5lZWRzRnVsbFNjb3BlQ2hhaW4oKSk7CiAg
ICAgQVNTRVJUKCFjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYWN0aXZhdGlvblJlZ2lzdGVyKCkpLmpz
VmFsdWUoKSk7Ci0gICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gSlNBY3RpdmF0aW9uOjpj
cmVhdGUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZSwgdGhpcyk7CisgICAgSlNB
Y3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUoY2FsbEZyYW1lLT52
bSgpLCBjYWxsRnJhbWUsIHRoaXMpOwogICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihhY3RpdmF0
aW9uUmVnaXN0ZXIoKSkgPSBKU1ZhbHVlKGFjdGl2YXRpb24pOwogICAgIGNhbGxGcmFtZS0+c2V0
U2NvcGUoYWN0aXZhdGlvbik7CiB9CkBAIC0yNTczLDEzICsyNTczLDEzIEBAIHZvaWQgQ29kZUJs
b2NrOjp1bmxpbmtDYWxscygpCiAjZW5kaWYKICAgICBpZiAoIW1fY2FsbExpbmtJbmZvcy5zaXpl
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIW1fZ2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkp
CisgICAgaWYgKCFtX3ZtLT5jYW5Vc2VKSVQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcih0aGlzKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fY2FsbExpbmtJbmZvcy5zaXplKCk7IGkrKykgewogICAgICAgICBpZiAoIW1fY2FsbExpbmtJ
bmZvc1tpXS5pc0xpbmtlZCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG1fY2Fs
bExpbmtJbmZvc1tpXS51bmxpbmsoKm1fZ2xvYmFsRGF0YSwgcmVwYXRjaEJ1ZmZlcik7CisgICAg
ICAgIG1fY2FsbExpbmtJbmZvc1tpXS51bmxpbmsoKm1fdm0sIHJlcGF0Y2hCdWZmZXIpOwogICAg
IH0KIH0KIApAQCAtMjU5Myw3ICsyNTkzLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnVubGlua0luY29t
aW5nQ2FsbHMoKQogICAgICAgICByZXR1cm47CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKHRoaXMpOwogICAgIHdoaWxlIChtX2luY29taW5nQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29t
aW5nQ2FsbHMuZW5kKCkpCi0gICAgICAgIG1faW5jb21pbmdDYWxscy5iZWdpbigpLT51bmxpbmso
Km1fZ2xvYmFsRGF0YSwgcmVwYXRjaEJ1ZmZlcik7CisgICAgICAgIG1faW5jb21pbmdDYWxscy5i
ZWdpbigpLT51bmxpbmsoKm1fdm0sIHJlcGF0Y2hCdWZmZXIpOwogfQogI2VuZGlmIC8vIEVOQUJM
RShKSVQpCiAKQEAgLTI2NjYsNyArMjY2Niw3IEBAIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUqIENv
ZGVCbG9jazo6ZmluZEMKICAgICB9CiAgICAgCiAgICAgLy8gVGhlIHN0dWIgcm91dGluZSBtYXkg
aGF2ZSBiZWVuIGpldHRpc29uZWQuIFRoaXMgaXMgcmFyZSwgYnV0IHdlIGhhdmUgdG8gaGFuZGxl
IGl0LgotICAgIGNvbnN0IEpJVFN0dWJSb3V0aW5lU2V0JiBzZXQgPSBtX2dsb2JhbERhdGEtPmhl
YXAuaml0U3R1YlJvdXRpbmVzKCk7CisgICAgY29uc3QgSklUU3R1YlJvdXRpbmVTZXQmIHNldCA9
IG1fdm0tPmhlYXAuaml0U3R1YlJvdXRpbmVzKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gc2V0
LnNpemUoKTsgaS0tOykgewogICAgICAgICBHQ0F3YXJlSklUU3R1YlJvdXRpbmUqIGdlbmVyaWNT
dHViID0gc2V0LmF0KGkpOwogICAgICAgICBpZiAoIWdlbmVyaWNTdHViLT5pc0Nsb3N1cmVDYWxs
KCkpCkBAIC0yODg1LDE3ICsyODg1LDE3IEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbigpCiAK
IHZvaWQgUHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb25JbXBsKCkKIHsKLSAgICBzdGF0aWNfY2Fz
dDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6
ZWRDb2RlKCpnbG9iYWxEYXRhKCkpOworICAgIHN0YXRpY19jYXN0PFByb2dyYW1FeGVjdXRhYmxl
Kj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGUoKnZtKCkpOwogfQog
CiB2b2lkIEV2YWxDb2RlQmxvY2s6OmpldHRpc29uSW1wbCgpCiB7Ci0gICAgc3RhdGljX2Nhc3Q8
RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29k
ZSgqZ2xvYmFsRGF0YSgpKTsKKyAgICBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93bmVy
RXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2RlKCp2bSgpKTsKIH0KIAogdm9pZCBG
dW5jdGlvbkNvZGVCbG9jazo6amV0dGlzb25JbXBsKCkKIHsKLSAgICBzdGF0aWNfY2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29k
ZUZvcigqZ2xvYmFsRGF0YSgpLCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDog
Q29kZUZvckNhbGwpOworICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVy
RXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yKCp2bSgpLCBtX2lzQ29uc3Ry
dWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOwogfQogCiBib29sIFByb2dy
YW1Db2RlQmxvY2s6OmppdENvbXBpbGVJbXBsKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTMyODAsMTgg
KzMyODAsMTggQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGVzKCkKIAogc2l6ZV90
IENvZGVCbG9jazo6cHJlZGljdGVkTWFjaGluZUNvZGVTaXplKCkKIHsKLSAgICAvLyBUaGlzIHdp
bGwgYmUgY2FsbGVkIGZyb20gQ29kZUJsb2NrOjpDb2RlQmxvY2sgYmVmb3JlIGVpdGhlciBtX2ds
b2JhbERhdGEgb3IgdGhlCisgICAgLy8gVGhpcyB3aWxsIGJlIGNhbGxlZCBmcm9tIENvZGVCbG9j
azo6Q29kZUJsb2NrIGJlZm9yZSBlaXRoZXIgbV92bSBvciB0aGUKICAgICAvLyBpbnN0cnVjdGlv
bnMgaGF2ZSBiZWVuIGluaXRpYWxpemVkLiBJdCdzIE9LIHRvIHJldHVybiAwIGJlY2F1c2Ugd2hh
dCB3aWxsIHJlYWxseQogICAgIC8vIG1hdHRlciBpcyB0aGUgcmVjb21wdXRhdGlvbiBvZiB0aGlz
IHZhbHVlIHdoZW4gdGhlIHNsb3cgcGF0aCBpcyB0cmlnZ2VyZWQuCi0gICAgaWYgKCFtX2dsb2Jh
bERhdGEpCisgICAgaWYgKCFtX3ZtKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBpZiAo
IW1fZ2xvYmFsRGF0YS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5l
SklUKQorICAgIGlmICghbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJh
c2VsaW5lSklUKQogICAgICAgICByZXR1cm4gMDsgLy8gSXQncyBhcyBnb29kIG9mIGEgcHJlZGlj
dGlvbiBhcyB3ZSdsbCBnZXQuCiAgICAgCiAgICAgLy8gQmUgY29uc2VydmF0aXZlOiByZXR1cm4g
YSBzaXplIHRoYXQgd2lsbCBiZSBhbiBvdmVyZXN0aW1hdGlvbiA4NCUgb2YgdGhlIHRpbWUuCi0g
ICAgZG91YmxlIG11bHRpcGxpZXIgPSBtX2dsb2JhbERhdGEtPm1hY2hpbmVDb2RlQnl0ZXNQZXJC
eXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC5tZWFuKCkgKwotICAgICAgICBtX2dsb2JhbERhdGEt
Pm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC5zdGFuZGFyZERl
dmlhdGlvbigpOworICAgIGRvdWJsZSBtdWx0aXBsaWVyID0gbV92bS0+bWFjaGluZUNvZGVCeXRl
c1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULm1lYW4oKSArCisgICAgICAgIG1fdm0tPm1h
Y2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC5zdGFuZGFyZERldmlh
dGlvbigpOwogICAgIAogICAgIC8vIEJlIHBhcmFub2lkOiBzaWxlbnRseSByZWplY3QgYm9ndXMg
bXVsdGlwaWVycy4gU2lsZW50bHkgZG9pbmcgdGhlICJ3cm9uZyIgdGhpbmcKICAgICAvLyBoZXJl
IGlzIE9LLCBzaW5jZSB0aGlzIHdob2xlIG1ldGhvZCBpcyBqdXN0IGEgaGV1cmlzdGljLgpAQCAt
MzMxMiw3ICszMzEyLDcgQEAgc2l6ZV90IENvZGVCbG9jazo6cHJlZGljdGVkTWFjaGluZUNvZGVT
aQogCiBib29sIENvZGVCbG9jazo6dXNlc09wY29kZShPcGNvZGVJRCBvcGNvZGVJRCkKIHsKLSAg
ICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBnbG9iYWxEYXRhKCktPmludGVycHJldGVyOwor
ICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IHZtKCktPmludGVycHJldGVyOwogICAgIElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9ucygpLmJlZ2luKCk7CiAg
ICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IGluc3RydWN0aW9ucygpLnNpemUoKTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJl
dmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMzc3LDE0ICszNzcsMTQgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgYXBwZW5kV2Vha1JlZmVyZW5jZShKU0NlbGwqIHRhcmdldCkKICAgICAg
ICAgewogICAgICAgICAgICAgY3JlYXRlREZHRGF0YUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgICAg
ICBtX2RmZ0RhdGEtPndlYWtSZWZlcmVuY2VzLmFwcGVuZChXcml0ZUJhcnJpZXI8SlNDZWxsPigq
Z2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1dGFibGUoKSwgdGFyZ2V0KSk7CisgICAgICAgICAgICBt
X2RmZ0RhdGEtPndlYWtSZWZlcmVuY2VzLmFwcGVuZChXcml0ZUJhcnJpZXI8SlNDZWxsPigqdm0o
KSwgb3duZXJFeGVjdXRhYmxlKCksIHRhcmdldCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICB2b2lkIGFwcGVuZFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uKEpTQ2VsbCogY29kZU9yaWdp
biwgSlNDZWxsKiBmcm9tLCBKU0NlbGwqIHRvKQogICAgICAgICB7CiAgICAgICAgICAgICBjcmVh
dGVERkdEYXRhSWZOZWNlc3NhcnkoKTsKICAgICAgICAgICAgIG1fZGZnRGF0YS0+dHJhbnNpdGlv
bnMuYXBwZW5kKAotICAgICAgICAgICAgICAgIFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uKCpnbG9i
YWxEYXRhKCksIG93bmVyRXhlY3V0YWJsZSgpLCBjb2RlT3JpZ2luLCBmcm9tLCB0bykpOworICAg
ICAgICAgICAgICAgIFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uKCp2bSgpLCBvd25lckV4ZWN1dGFi
bGUoKSwgY29kZU9yaWdpbiwgZnJvbSwgdG8pKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgREZHOjpNaW5pZmllZEdyYXBoJiBtaW5pZmllZERGRygpCkBAIC00MjgsNyArNDI4LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgICAgICBpZiAobV9q
aXRDb2RlLmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpIHsKICAgICAgICAgICAgICAgICBj
cmVhdGVERkdEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgICAgICAgICBtX2dsb2JhbERhdGEt
PmhlYXAubV9kZmdDb2RlQmxvY2tzLm1fc2V0LmFkZCh0aGlzKTsKKyAgICAgICAgICAgICAgICBt
X3ZtLT5oZWFwLm1fZGZnQ29kZUJsb2Nrcy5tX3NldC5hZGQodGhpcyk7CiAgICAgICAgICAgICB9
CiAjZW5kaWYKICAgICAgICAgfQpAQCAtNDg1LDggKzQ4NSw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpOyB9CiAKLSAgICAgICAgdm9pZCBzZXRHbG9iYWxE
YXRhKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkgeyBtX2dsb2JhbERhdGEgPSBnbG9iYWxEYXRh
OyB9Ci0gICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpIHsgcmV0dXJuIG1fZ2xvYmFs
RGF0YTsgfQorICAgICAgICB2b2lkIHNldEdsb2JhbERhdGEoVk0qIHZtKSB7IG1fdm0gPSB2bTsg
fQorICAgICAgICBWTSogdm0oKSB7IHJldHVybiBtX3ZtOyB9CiAKICAgICAgICAgdm9pZCBzZXRU
aGlzUmVnaXN0ZXIoaW50IHRoaXNSZWdpc3RlcikgeyBtX3RoaXNSZWdpc3RlciA9IHRoaXNSZWdp
c3RlcjsgfQogICAgICAgICBpbnQgdGhpc1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV90aGlz
UmVnaXN0ZXI7IH0KQEAgLTYxMyw3ICs2MTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgICAgICBnZXRWYWx1ZVByb2ZpbGVCeXRlY29kZU9mZnNldDxWYWx1ZVByb2ZpbGU+KTsKICAg
ICAgICAgICAgIEFTU0VSVChyZXN1bHQtPm1fYnl0ZWNvZGVPZmZzZXQgIT0gLTEpOwogICAgICAg
ICAgICAgQVNTRVJUKGluc3RydWN0aW9ucygpW2J5dGVjb2RlT2Zmc2V0ICsgb3Bjb2RlTGVuZ3Ro
KAotICAgICAgICAgICAgICAgICAgICAgICBtX2dsb2JhbERhdGEtPmludGVycHJldGVyLT5nZXRP
cGNvZGVJRCgKKyAgICAgICAgICAgICAgICAgICAgICAgbV92bS0+aW50ZXJwcmV0ZXItPmdldE9w
Y29kZUlEKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKClbCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKSkgLSAx
XS51LnByb2ZpbGUgPT0gcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC04
MTYsNyArODE2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHVu
c2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwogICAgICAgICAgICAg
bV9jb25zdGFudFJlZ2lzdGVycy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVua25vd24+KCkpOwotICAg
ICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5sYXN0KCkuc2V0KG1fZ2xvYmFsT2JqZWN0LT5n
bG9iYWxEYXRhKCksIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCB2KTsKKyAgICAgICAgICAgIG1f
Y29uc3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldChtX2dsb2JhbE9iamVjdC0+dm0oKSwgbV9vd25l
ckV4ZWN1dGFibGUuZ2V0KCksIHYpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAg
ICAgfQogCkBAIC0xMDkzLDcgKzEwOTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IHNpemVfdCBjb3VudCA9IGNvbnN0YW50cy5zaXplKCk7CiAgICAgICAgICAgICBtX2NvbnN0YW50
UmVnaXN0ZXJzLnJlc2l6ZShjb3VudCk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpXS5z
ZXQoKm1fZ2xvYmFsRGF0YSwgb3duZXJFeGVjdXRhYmxlKCksIGNvbnN0YW50c1tpXS5nZXQoKSk7
CisgICAgICAgICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpXS5zZXQoKm1fdm0sIG93bmVy
RXhlY3V0YWJsZSgpLCBjb25zdGFudHNbaV0uZ2V0KCkpOwogICAgICAgICB9CiAKICAgICAgICAg
dm9pZCBkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBjb25zdCBJbnN0cnVj
dGlvbiogYmVnaW4sIGNvbnN0IEluc3RydWN0aW9uKiYpOwpAQCAtMTE1OSw3ICsxMTU5LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZENvZGVCbG9jaz4g
bV91bmxpbmtlZENvZGU7CiAgICAgICAgIGludCBtX251bVBhcmFtZXRlcnM7CiAgICAgICAgIFdy
aXRlQmFycmllcjxTY3JpcHRFeGVjdXRhYmxlPiBtX293bmVyRXhlY3V0YWJsZTsKLSAgICAgICAg
SlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CisgICAgICAgIFZNKiBtX3ZtOwogCiAgICAgICAg
IFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4gbV9pbnN0cnVjdGlvbnM7CiAgICAgICAgIGlu
dCBtX3RoaXNSZWdpc3RlcjsKQEAgLTExOTIsMTIgKzExOTIsMTIgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHN0cnVjdCBXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiB7CiAgICAgICAgICAgICBX
ZWFrUmVmZXJlbmNlVHJhbnNpdGlvbigpIHsgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBX
ZWFrUmVmZXJlbmNlVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCog
b3duZXIsIEpTQ2VsbCogY29kZU9yaWdpbiwgSlNDZWxsKiBmcm9tLCBKU0NlbGwqIHRvKQotICAg
ICAgICAgICAgICAgIDogbV9mcm9tKGdsb2JhbERhdGEsIG93bmVyLCBmcm9tKQotICAgICAgICAg
ICAgICAgICwgbV90byhnbG9iYWxEYXRhLCBvd25lciwgdG8pCisgICAgICAgICAgICBXZWFrUmVm
ZXJlbmNlVHJhbnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTQ2VsbCogY29kZU9yaWdp
biwgSlNDZWxsKiBmcm9tLCBKU0NlbGwqIHRvKQorICAgICAgICAgICAgICAgIDogbV9mcm9tKHZt
LCBvd25lciwgZnJvbSkKKyAgICAgICAgICAgICAgICAsIG1fdG8odm0sIG93bmVyLCB0bykKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAoISFjb2RlT3JpZ2luKQotICAgICAgICAg
ICAgICAgICAgICBtX2NvZGVPcmlnaW4uc2V0KGdsb2JhbERhdGEsIG93bmVyLCBjb2RlT3JpZ2lu
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9jb2RlT3JpZ2luLnNldCh2bSwgb3duZXIsIGNvZGVP
cmlnaW4pOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8SlNDZWxs
PiBtX2NvZGVPcmlnaW47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZh
bENvZGVDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FdmFsQ29kZUNhY2hlLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9FdmFsQ29kZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGlmICghaW5TdHJpY3RDb250ZXh0ICYmIGV2YWxTb3VyY2UubGVu
Z3RoKCkgPCBtYXhDYWNoZWFibGVTb3VyY2VMZW5ndGggJiYgc2NvcGUtPmJlZ2luKCktPmlzVmFy
aWFibGVPYmplY3QoKSAmJiBtX2NhY2hlTWFwLnNpemUoKSA8IG1heENhY2hlRW50cmllcykKLSAg
ICAgICAgICAgICAgICBtX2NhY2hlTWFwLnNldChldmFsU291cmNlLmltcGwoKSwgV3JpdGVCYXJy
aWVyPEV2YWxFeGVjdXRhYmxlPihleGVjLT5nbG9iYWxEYXRhKCksIG93bmVyLCBldmFsRXhlY3V0
YWJsZSkpOworICAgICAgICAgICAgICAgIG1fY2FjaGVNYXAuc2V0KGV2YWxTb3VyY2UuaW1wbCgp
LCBXcml0ZUJhcnJpZXI8RXZhbEV4ZWN1dGFibGU+KGV4ZWMtPnZtKCksIG93bmVyLCBldmFsRXhl
Y3V0YWJsZSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gZXZhbEV4ZWN1dGFi
bGU7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIs
NyArNTIsNyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAg
dW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7CiAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwog
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KAotICAgICAgICAqcHJv
ZmlsZWRCbG9jay0+Z2xvYmFsRGF0YSgpLCBpZGVudCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNp
ZmljVmFsdWUpOworICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgaWRlbnQsIGF0dHJpYnV0
ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25h
cnkoKSkKICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7CiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0
KG9mZnNldCkpCkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
ckNoYWluKEdldEIKICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7CiAgICAgICAgIAogICAgIHJl
c3VsdC5tX29mZnNldCA9IGN1cnJlbnRTdHJ1Y3R1cmUtPmdldCgKLSAgICAgICAgKnByb2ZpbGVk
QmxvY2stPmdsb2JhbERhdGEoKSwgaWRlbnQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1Zh
bHVlKTsKKyAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIGlkZW50LCBhdHRyaWJ1dGVzSWdu
b3JlZCwgc3BlY2lmaWNWYWx1ZSk7CiAgICAgaWYgKGN1cnJlbnRTdHJ1Y3R1cmUtPmlzRGljdGlv
bmFyeSgpKQogICAgICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKICAgICBpZiAoIWlzVmFsaWRPZmZz
ZXQocmVzdWx0Lm1fb2Zmc2V0KSkKQEAgLTE2NSw3ICsxNjUsNyBAQCBHZXRCeUlkU3RhdHVzIEdl
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25v
cmVkOwogICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7CiAgICAgICAgIHJlc3VsdC5tX29m
ZnNldCA9IHN0cnVjdHVyZS0+Z2V0KAotICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPmdsb2Jh
bERhdGEoKSwgaWRlbnQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAg
ICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCBpZGVudCwgYXR0cmlidXRlc0lnbm9yZWQsIHNw
ZWNpZmljVmFsdWUpOwogICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKICAg
ICAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwogICAgICAgICAKQEAgLTE5MCw3ICsxOTAsNyBA
QCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICB1
bnNpZ25lZCBhdHRyaWJ1dGVzSWdub3JlZDsKICAgICAgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNW
YWx1ZTsKICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG15T2Zmc2V0ID0gc3RydWN0dXJlLT5n
ZXQoCi0gICAgICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPmdsb2JhbERhdGEoKSwgaWRlbnQs
IGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAqcHJv
ZmlsZWRCbG9jay0+dm0oKSwgaWRlbnQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVl
KTsKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQogICAgICAgICAg
ICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwogICAgICAgICAgICAgCkBAIC0yNTYsNyArMjU2LDcg
QEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogI2VuZGlmIC8vIEVO
QUJMRShKSVQpCiB9CiAKLUdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBJZGVudGlmaWVy
JiBpZGVudCkKK0dldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBJZGVudGlmaWVyJiBpZGVudCkKIHsKICAgICAvLyBGb3Ig
bm93IHdlIG9ubHkgaGFuZGxlIHRoZSBzdXBlciBzaW1wbGUgc2VsZiBhY2Nlc3MgY2FzZS4gV2Ug
Y291bGQgaGFuZGxlIHRoZQogICAgIC8vIHByb3RvdHlwZSBjYXNlIGluIHRoZSBmdXR1cmUuCkBA
IC0yNzEsMTAgKzI3MSwxMCBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IoCiAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIAog
ICAgIEdldEJ5SWRTdGF0dXMgcmVzdWx0OwotICAgIHJlc3VsdC5tX3dhc1NlZW5JbkpJVCA9IGZh
bHNlOyAvLyBUbyBteSBrbm93bGVkZ2Ugbm9ib2R5IHRoYXQgdXNlcyBjb21wdXRlRm9yKEpTR2xv
YmFsRGF0YSYsIFN0cnVjdHVyZSosIElkZW50aWZpZXImKSByZWFkcyB0aGlzIGZpZWxkLCBidXQg
SSBtaWdodCBhcyB3ZWxsIGJlIGhvbmVzdDogbm8sIGl0IHdhc24ndCBzZWVuIGluIHRoZSBKSVQs
IHNpbmNlIEkgY29tcHV0ZWQgaXQgc3RhdGljYWxseS4KKyAgICByZXN1bHQubV93YXNTZWVuSW5K
SVQgPSBmYWxzZTsgLy8gVG8gbXkga25vd2xlZGdlIG5vYm9keSB0aGF0IHVzZXMgY29tcHV0ZUZv
cihWTSYsIFN0cnVjdHVyZSosIElkZW50aWZpZXImKSByZWFkcyB0aGlzIGZpZWxkLCBidXQgSSBt
aWdodCBhcyB3ZWxsIGJlIGhvbmVzdDogbm8sIGl0IHdhc24ndCBzZWVuIGluIHRoZSBKSVQsIHNp
bmNlIEkgY29tcHV0ZWQgaXQgc3RhdGljYWxseS4KICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwog
ICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBzdHJ1Y3R1
cmUtPmdldChnbG9iYWxEYXRhLCBpZGVudCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7Cisg
ICAgcmVzdWx0Lm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIGlkZW50LCBhdHRyaWJ1dGVz
LCBzcGVjaWZpY1ZhbHVlKTsKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQocmVzdWx0Lm1fb2Zmc2V0
KSkKICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7IC8vIEl0J3Mg
cHJvYmFibHkgYSBwcm90b3R5cGUgbG9va3VwLiBHaXZlIHVwIG9uIGxpZmUgZm9yIG5vdywgZXZl
biB0aG91Z2ggd2UgY291bGQgdG90YWxseSBiZSB3YXkgc21hcnRlciBhYm91dCBpdC4KICAgICBp
ZiAoYXR0cmlidXRlcyAmIEFjY2Vzc29yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBA
IC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIEdldEJ5SWRT
dGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBJZGVu
dGlmaWVyJik7Ci0gICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihKU0dsb2JhbERh
dGEmLCBTdHJ1Y3R1cmUqLCBJZGVudGlmaWVyJik7CisgICAgc3RhdGljIEdldEJ5SWRTdGF0dXMg
Y29tcHV0ZUZvcihWTSYsIFN0cnVjdHVyZSosIElkZW50aWZpZXImKTsKICAgICAKICAgICBTdGF0
ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZpc2lvbiAxNDg2Mzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAsMjAgKzcwLDIwIEBAIHN0cnVjdCBJbnN0cnVjdGlvbiB7CiAgICAgICAg
IHUub3BlcmFuZCA9IG9wZXJhbmQ7CiAgICAgfQogCi0gICAgSW5zdHJ1Y3Rpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAg
ICBJbnN0cnVjdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQogICAgIHsKICAgICAgICAgdS5zdHJ1Y3R1cmUuY2xlYXIoKTsKLSAgICAgICAgdS5zdHJ1Y3R1
cmUuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBzdHJ1Y3R1cmUpOworICAgICAgICB1LnN0cnVjdHVy
ZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwogICAgIH0KLSAgICBJbnN0cnVjdGlvbihKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZUNoYWluKiBzdHJ1
Y3R1cmVDaGFpbikKKyAgICBJbnN0cnVjdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVj
dHVyZUNoYWluKiBzdHJ1Y3R1cmVDaGFpbikKICAgICB7CiAgICAgICAgIHUuc3RydWN0dXJlQ2hh
aW4uY2xlYXIoKTsKLSAgICAgICAgdS5zdHJ1Y3R1cmVDaGFpbi5zZXQoZ2xvYmFsRGF0YSwgb3du
ZXIsIHN0cnVjdHVyZUNoYWluKTsKKyAgICAgICAgdS5zdHJ1Y3R1cmVDaGFpbi5zZXQodm0sIG93
bmVyLCBzdHJ1Y3R1cmVDaGFpbik7CiAgICAgfQotICAgIEluc3RydWN0aW9uKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgSlNDZWxsKiBqc0NlbGwpCisgICAgSW5zdHJ1
Y3Rpb24oVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU0NlbGwqIGpzQ2VsbCkKICAgICB7CiAgICAg
ICAgIHUuanNDZWxsLmNsZWFyKCk7Ci0gICAgICAgIHUuanNDZWxsLnNldChnbG9iYWxEYXRhLCBv
d25lciwganNDZWxsKTsKKyAgICAgICAgdS5qc0NlbGwuc2V0KHZtLCBvd25lciwganNDZWxsKTsK
ICAgICB9CiAKICAgICBJbnN0cnVjdGlvbihQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBnZXR0
ZXJGdW5jKSB7IHUuZ2V0dGVyRnVuYyA9IGdldHRlckZ1bmM7IH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmls
ZS5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBA
QAogI2lmbmRlZiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZV9oCiAjZGVmaW5lIE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlX2gKIAotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZN
LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5
cGUuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6
CiAKICAgICBib29sIGlzTnVsbCgpIHsgcmV0dXJuICFtX2FsbG9jYXRvcjsgfQogCi0gICAgdm9p
ZCBpbml0aWFsaXplKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgSlNP
YmplY3QqIHByb3RvdHlwZSwgdW5zaWduZWQgaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSkKKyAgICB2
b2lkIGluaXRpYWxpemUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogcHJvdG90eXBl
LCB1bnNpZ25lZCBpbmZlcnJlZElubGluZUNhcGFjaXR5KQogICAgIHsKICAgICAgICAgQVNTRVJU
KCFtX2FsbG9jYXRvcik7CiAgICAgICAgIEFTU0VSVCghbV9zdHJ1Y3R1cmUpOwpAQCAtNTUsNyAr
NTUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5ID0gMDsKICAg
ICAgICAgaWYgKGluZmVycmVkSW5saW5lQ2FwYWNpdHkgPCBKU0ZpbmFsT2JqZWN0OjpkZWZhdWx0
SW5saW5lQ2FwYWNpdHkoKSkgewogICAgICAgICAgICAgLy8gVHJ5IHRvIHNocmluayB0aGUgb2Jq
ZWN0IGJhc2VkIG9uIHN0YXRpYyBhbmFseXNpcy4KLSAgICAgICAgICAgIGluZmVycmVkSW5saW5l
Q2FwYWNpdHkgKz0gcG9zc2libGVEZWZhdWx0UHJvcGVydHlDb3VudChnbG9iYWxEYXRhLCBwcm90
b3R5cGUpOworICAgICAgICAgICAgaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSArPSBwb3NzaWJsZURl
ZmF1bHRQcm9wZXJ0eUNvdW50KHZtLCBwcm90b3R5cGUpOwogCiAgICAgICAgICAgICBpZiAoIWlu
ZmVycmVkSW5saW5lQ2FwYWNpdHkpIHsKICAgICAgICAgICAgICAgICAvLyBFbXB0eSBvYmplY3Rz
IGFyZSByYXJlLCBzbyBtb3N0IGxpa2VseSB0aGUgc3RhdGljIGFuYWx5emVyIGp1c3QgZGlkbid0
CkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGlubGluZUNhcGFjaXR5
IDw9IEpTRmluYWxPYmplY3Q6Om1heElubGluZUNhcGFjaXR5KCkpOwogCiAgICAgICAgIHNpemVf
dCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKGlubGluZUNh
cGFjaXR5KTsKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmZ2xvYmFsRGF0
YS5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKGFsbG9jYXRpb25TaXpl
KTsKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmdm0uaGVhcC5hbGxvY2F0
b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihhbGxvY2F0aW9uU2l6ZSk7CiAgICAgICAgIEFT
U0VSVChhbGxvY2F0b3ItPmNlbGxTaXplKCkpOwogCiAgICAgICAgIC8vIFRha2UgYWR2YW50YWdl
IG9mIGV4dHJhIGlubGluZSBjYXBhY2l0eSBhdmFpbGFibGUgaW4gdGhlIHNpemUgY2xhc3MuCkBA
IC05MCw4ICs5MCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlubGluZUNhcGFjaXR5ID0gSlNG
aW5hbE9iamVjdDo6bWF4SW5saW5lQ2FwYWNpdHkoKTsKIAogICAgICAgICBtX2FsbG9jYXRvciA9
IGFsbG9jYXRvcjsKLSAgICAgICAgbV9zdHJ1Y3R1cmUuc2V0KGdsb2JhbERhdGEsIG93bmVyLAot
ICAgICAgICAgICAgZ2xvYmFsRGF0YS5wcm90b3R5cGVNYXAuZW1wdHlPYmplY3RTdHJ1Y3R1cmVG
b3JQcm90b3R5cGUocHJvdG90eXBlLCBpbmxpbmVDYXBhY2l0eSkpOworICAgICAgICBtX3N0cnVj
dHVyZS5zZXQodm0sIG93bmVyLAorICAgICAgICAgICAgdm0ucHJvdG90eXBlTWFwLmVtcHR5T2Jq
ZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKHByb3RvdHlwZSwgaW5saW5lQ2FwYWNpdHkpKTsKICAg
ICB9CiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fc3RydWN0dXJlLmdl
dCgpOyB9CkBAIC0xMTEsMTcgKzExMSwxNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAKLSAgICB1
bnNpZ25lZCBwb3NzaWJsZURlZmF1bHRQcm9wZXJ0eUNvdW50KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNPYmplY3QqIHByb3RvdHlwZSkKKyAgICB1bnNpZ25lZCBwb3NzaWJsZURlZmF1bHRQ
cm9wZXJ0eUNvdW50KFZNJiB2bSwgSlNPYmplY3QqIHByb3RvdHlwZSkKICAgICB7CiAgICAgICAg
IGlmIChwcm90b3R5cGUgPT0gcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90
eXBlKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICBzaXplX3QgY291bnQgPSAw
OwotICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVBcnJheSgmZ2xvYmFsRGF0
YSk7Ci0gICAgICAgIHByb3RvdHlwZS0+c3RydWN0dXJlKCktPmdldFByb3BlcnR5TmFtZXNGcm9t
U3RydWN0dXJlKGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZUFycmF5LCBFeGNsdWRlRG9udEVudW1Q
cm9wZXJ0aWVzKTsKKyAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lQXJyYXko
JnZtKTsKKyAgICAgICAgcHJvdG90eXBlLT5zdHJ1Y3R1cmUoKS0+Z2V0UHJvcGVydHlOYW1lc0Zy
b21TdHJ1Y3R1cmUodm0sIHByb3BlcnR5TmFtZUFycmF5LCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0
aWVzKTsKICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXlEYXRhOjpQcm9wZXJ0eU5hbWVWZWN0b3Im
IHByb3BlcnR5TmFtZVZlY3RvciA9IHByb3BlcnR5TmFtZUFycmF5LmRhdGEoKS0+cHJvcGVydHlO
YW1lVmVjdG9yKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvcGVydHlOYW1l
VmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gcHJvdG90
eXBlLT5nZXREaXJlY3QoZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lVmVjdG9yW2ldKTsKKyAgICAg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBwcm90b3R5cGUtPmdldERpcmVjdCh2bSwgcHJvcGVydHlO
YW1lVmVjdG9yW2ldKTsKIAogICAgICAgICAgICAgLy8gRnVuY3Rpb25zIGFyZSBjb21tb24sIGFu
ZCBhcmUgdXN1YWxseSBjbGFzcy1sZXZlbCBvYmplY3RzIHRoYXQgYXJlIG5vdCBvdmVycmlkZGVu
LgogICAgICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZhbHVlKSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsMjkgKzYwLDI5IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHUucHJvdG8uY2xlYXIoKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91
dGluZT4gX3N0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIF9iYXNlLCBib29sIGlzRGlyZWN0KQorICAg
ICAgICB2b2lkIHNldChWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFBhc3NSZWZQdHI8SklUU3R1YlJv
dXRpbmU+IF9zdHViUm91dGluZSwgU3RydWN0dXJlKiBfYmFzZSwgYm9vbCBpc0RpcmVjdCkKICAg
ICAgICAgewogICAgICAgICAgICAgc3R1YlJvdXRpbmUgPSBfc3R1YlJvdXRpbmU7Ci0gICAgICAg
ICAgICBiYXNlLnNldChnbG9iYWxEYXRhLCBvd25lciwgX2Jhc2UpOworICAgICAgICAgICAgYmFz
ZS5zZXQodm0sIG93bmVyLCBfYmFzZSk7CiAgICAgICAgICAgICB1LnByb3RvLmNsZWFyKCk7CiAg
ICAgICAgICAgICBpc0NoYWluID0gZmFsc2U7CiAgICAgICAgICAgICB0aGlzLT5pc0RpcmVjdCA9
IGlzRGlyZWN0OwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgdm9pZCBzZXQoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIFN0cnVjdHVyZSogX3Byb3Rv
LCBib29sIGlzRGlyZWN0KQorICAgICAgICB2b2lkIHNldChWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IF9zdHViUm91dGluZSwgU3RydWN0dXJlKiBfYmFz
ZSwgU3RydWN0dXJlKiBfcHJvdG8sIGJvb2wgaXNEaXJlY3QpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHN0dWJSb3V0aW5lID0gX3N0dWJSb3V0aW5lOwotICAgICAgICAgICAgYmFzZS5zZXQoZ2xv
YmFsRGF0YSwgb3duZXIsIF9iYXNlKTsKLSAgICAgICAgICAgIHUucHJvdG8uc2V0KGdsb2JhbERh
dGEsIG93bmVyLCBfcHJvdG8pOworICAgICAgICAgICAgYmFzZS5zZXQodm0sIG93bmVyLCBfYmFz
ZSk7CisgICAgICAgICAgICB1LnByb3RvLnNldCh2bSwgb3duZXIsIF9wcm90byk7CiAgICAgICAg
ICAgICBpc0NoYWluID0gZmFsc2U7CiAgICAgICAgICAgICB0aGlzLT5pc0RpcmVjdCA9IGlzRGly
ZWN0OwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgdm9pZCBzZXQoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5l
PiBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIFN0cnVjdHVyZUNoYWluKiBfY2hhaW4s
IGJvb2wgaXNEaXJlY3QpCisgICAgICAgIHZvaWQgc2V0KFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
UGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gX3N0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIF9iYXNl
LCBTdHJ1Y3R1cmVDaGFpbiogX2NoYWluLCBib29sIGlzRGlyZWN0KQogICAgICAgICB7CiAgICAg
ICAgICAgICBzdHViUm91dGluZSA9IF9zdHViUm91dGluZTsKLSAgICAgICAgICAgIGJhc2Uuc2V0
KGdsb2JhbERhdGEsIG93bmVyLCBfYmFzZSk7Ci0gICAgICAgICAgICB1LmNoYWluLnNldChnbG9i
YWxEYXRhLCBvd25lciwgX2NoYWluKTsKKyAgICAgICAgICAgIGJhc2Uuc2V0KHZtLCBvd25lciwg
X2Jhc2UpOworICAgICAgICAgICAgdS5jaGFpbi5zZXQodm0sIG93bmVyLCBfY2hhaW4pOwogICAg
ICAgICAgICAgaXNDaGFpbiA9IHRydWU7CiAgICAgICAgICAgICB0aGlzLT5pc0RpcmVjdCA9IGlz
RGlyZWN0OwogICAgICAgICB9CkBAIC05MiwxOSArOTIsMTkgQEAgcHVibGljOgogICAgIHsKICAg
ICB9CiAgICAgICAgIAotICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRp
bmU+IHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSwgYm9vbCBpc0RpcmVjdCkKKyAg
ICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBQ
YXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwgU3RydWN0dXJlKiBmaXJzdEJh
c2UsIGJvb2wgaXNEaXJlY3QpCiAgICAgewotICAgICAgICBsaXN0WzBdLnNldChnbG9iYWxEYXRh
LCBvd25lciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgaXNEaXJlY3QpOworICAgICAgICBsaXN0
WzBdLnNldCh2bSwgb3duZXIsIHN0dWJSb3V0aW5lLCBmaXJzdEJhc2UsIGlzRGlyZWN0KTsKICAg
ICB9CiAKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHVi
Um91dGluZSwgU3RydWN0dXJlKiBmaXJzdEJhc2UsIFN0cnVjdHVyZSogZmlyc3RQcm90bywgYm9v
bCBpc0RpcmVjdCkKKyAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoVk0mIHZtLCBK
U0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwgU3Ry
dWN0dXJlKiBmaXJzdEJhc2UsIFN0cnVjdHVyZSogZmlyc3RQcm90bywgYm9vbCBpc0RpcmVjdCkK
ICAgICB7Ci0gICAgICAgIGxpc3RbMF0uc2V0KGdsb2JhbERhdGEsIG93bmVyLCBzdHViUm91dGlu
ZSwgZmlyc3RCYXNlLCBmaXJzdFByb3RvLCBpc0RpcmVjdCk7CisgICAgICAgIGxpc3RbMF0uc2V0
KHZtLCBvd25lciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgZmlyc3RQcm90bywgaXNEaXJlY3Qp
OwogICAgIH0KIAotICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+
IHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSwgU3RydWN0dXJlQ2hhaW4qIGZpcnN0
Q2hhaW4sIGJvb2wgaXNEaXJlY3QpCisgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJv
dXRpbmUsIFN0cnVjdHVyZSogZmlyc3RCYXNlLCBTdHJ1Y3R1cmVDaGFpbiogZmlyc3RDaGFpbiwg
Ym9vbCBpc0RpcmVjdCkKICAgICB7Ci0gICAgICAgIGxpc3RbMF0uc2V0KGdsb2JhbERhdGEsIG93
bmVyLCBzdHViUm91dGluZSwgZmlyc3RCYXNlLCBmaXJzdENoYWluLCBpc0RpcmVjdCk7CisgICAg
ICAgIGxpc3RbMF0uc2V0KHZtLCBvd25lciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgZmlyc3RD
aGFpbiwgaXNEaXJlY3QpOwogICAgIH0KIAogICAgIGJvb2wgdmlzaXRXZWFrKGludCBjb3VudCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljUHV0QnlJZExpc3QuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBQdXRCeUlk
QWNjZXNzIHRyYW5zaXRpb24oCi0gICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwKKyAg
ICAgICAgVk0mIHZtLAogICAgICAgICBKU0NlbGwqIG93bmVyLAogICAgICAgICBTdHJ1Y3R1cmUq
IG9sZFN0cnVjdHVyZSwKICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCkBAIC02NCwy
MiArNjQsMjIgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7
CiAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBUcmFuc2l0aW9uOwotICAgICAgICByZXN1bHQubV9v
bGRTdHJ1Y3R1cmUuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBvbGRTdHJ1Y3R1cmUpOwotICAgICAg
ICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBuZXdTdHJ1Y3R1
cmUpOwotICAgICAgICByZXN1bHQubV9jaGFpbi5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIGNoYWlu
KTsKKyAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIG9sZFN0cnVj
dHVyZSk7CisgICAgICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBuZXdT
dHJ1Y3R1cmUpOworICAgICAgICByZXN1bHQubV9jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7
CiAgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkQWNjZXNzIHJlcGxh
Y2UoCi0gICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwKKyAgICAgICAgVk0mIHZtLAog
ICAgICAgICBKU0NlbGwqIG93bmVyLAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKICAg
ICAgICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCiAgICAgewogICAg
ICAgICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsKICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFJlcGxh
Y2U7Ci0gICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIs
IHN0cnVjdHVyZSk7CisgICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5zZXQodm0sIG93bmVy
LCBzdHJ1Y3R1cmUpOwogICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJSb3V0aW5l
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuY3BwCShyZXZpc2lv
biAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lzZUp1bXBU
YXJnZXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCB2b2lkIGNvbXB1dGVQ
cmVjaXNlSnVtcFRhcmdldHMoQ29kZUJsb2NrCiAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJs
b2NrLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7IGktLTspCiAgICAgICAgIG91dC5hcHBl
bmQoY29kZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyKGkpLnRhcmdldCk7CiAgICAgCi0gICAgSW50
ZXJwcmV0ZXIqIGludGVycHJldGVyID0gY29kZUJsb2NrLT5nbG9iYWxEYXRhKCktPmludGVycHJl
dGVyOworICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IGNvZGVCbG9jay0+dm0oKS0+aW50
ZXJwcmV0ZXI7CiAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwogICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQg
PSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbkNvdW50OykgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVz
LmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIFB1dEJ5
SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb20KICAgICAKICAgICBpZiAoaW5zdHJ1
Y3Rpb25bMF0udS5vcGNvZGUgPT0gTExJbnQ6OmdldE9wY29kZShsbGludF9vcF9wdXRfYnlfaWQp
CiAgICAgICAgIHx8IGluc3RydWN0aW9uWzBdLnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUo
bGxpbnRfb3BfcHV0X2J5X2lkX291dF9vZl9saW5lKSkgewotICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCgqcHJvZmlsZWRCbG9jay0+Z2xvYmFsRGF0YSgpLCBp
ZGVudCk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KCpw
cm9maWxlZEJsb2NrLT52bSgpLCBpZGVudCk7CiAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChv
ZmZzZXQpKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwg
MCwgMCwgMCwgaW52YWxpZE9mZnNldCk7CiAgICAgICAgIApAQCAtNjgsNyArNjgsNyBAQCBQdXRC
eUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgQVNTRVJUKG5ld1N0cnVj
dHVyZSk7CiAgICAgQVNTRVJUKGNoYWluKTsKICAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBuZXdTdHJ1Y3R1cmUtPmdldCgqcHJvZmlsZWRCbG9jay0+Z2xvYmFsRGF0YSgpLCBpZGVu
dCk7CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXQoKnByb2Zp
bGVkQmxvY2stPnZtKCksIGlkZW50KTsKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkK
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgMCwgMCwgMCwgaW52
YWxpZE9mZnNldCk7CiAgICAgCkBAIC0xMDQsNyArMTA0LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRC
eUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlf
aWRfcmVwbGFjZTogewogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHViSW5mby51
LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUtPmdldCgKLSAgICAgICAgICAgICpw
cm9maWxlZEJsb2NrLT5nbG9iYWxEYXRhKCksIGlkZW50KTsKKyAgICAgICAgICAgICpwcm9maWxl
ZEJsb2NrLT52bSgpLCBpZGVudCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
IHsKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKAogICAgICAgICAgICAgICAgIFNp
bXBsZVJlcGxhY2UsCkBAIC0xMTksNyArMTE5LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKAogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2Rp
cmVjdDogewogICAgICAgICBBU1NFUlQoc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2
aW91c1N0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQo
KSk7CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0dWJJbmZvLnUucHV0QnlJZFRy
YW5zaXRpb24uc3RydWN0dXJlLT5nZXQoCi0gICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+Z2xv
YmFsRGF0YSgpLCBpZGVudCk7CisgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgaWRl
bnQpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CiAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cygKICAgICAgICAgICAgICAgICBTaW1wbGVUcmFuc2l0aW9uLApA
QCAtMTM5LDcgKzEzOSw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
cigKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogfQogCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSWRlbnRpZmllciYgaWRlbnQsIGJv
b2wgaXNEaXJlY3QpCitQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
SWRlbnRpZmllciYgaWRlbnQsIGJvb2wgaXNEaXJlY3QpCiB7CiAgICAgaWYgKFByb3BlcnR5TmFt
ZShpZGVudCkuYXNJbmRleCgpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CkBAIC0xNTIsNyArMTUyLDcgQEAg
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgIAogICAgIHVuc2ln
bmVkIGF0dHJpYnV0ZXM7CiAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KGdsb2JhbERhdGEsIGlkZW50LCBhdHRyaWJ1
dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1
cmUtPmdldCh2bSwgaWRlbnQsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOwogICAgIGlmIChp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiAoQWNjZXNz
b3IgfCBSZWFkT25seSkpCiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Ns
b3dQYXRoKTsKQEAgLTE3OCw3ICsxNzgsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IoCiAgICAgCiAgICAgaWYgKCFpc0RpcmVjdCkgewogICAgICAgICAvLyBJZiB0
aGUgcHJvdG90eXBlIGNoYWluIGhhcyBzZXR0ZXJzIG9yIHJlYWQtb25seSBwcm9wZXJ0aWVzLCB0
aGVuIGdpdmUgdXAuCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluTWF5SW50
ZXJjZXB0U3RvcmVUbyhnbG9iYWxEYXRhLCBpZGVudCkpCisgICAgICAgIGlmIChzdHJ1Y3R1cmUt
PnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyh2bSwgaWRlbnQpKQogICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgIAogICAgICAg
ICAvLyBJZiB0aGUgcHJvdG90eXBlIGNoYWluIGhhc24ndCBiZWVuIG5vcm1hbGl6ZWQgKGkuZS4g
dGhlcmUgYXJlIHByb3hpZXMgb3IgZGljdGlvbmFyaWVzKQpAQCAtMjEzLDcgKzIxMyw3IEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAKICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cygKICAgICAgICAgU2ltcGxlVHJhbnNpdGlvbiwgc3RydWN0dXJlLCB0cmFu
c2l0aW9uLAotICAgICAgICBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGdsb2JhbERhdGEsIGds
b2JhbE9iamVjdCksIG9mZnNldCk7CisgICAgICAgIHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4o
dm0sIGdsb2JhbE9iamVjdCksIG9mZnNldCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCShy
ZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBJZGVudGlmaWVyOwotY2xhc3MgSlNHbG9iYWxE
YXRhOworY2xhc3MgVk07CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNzIFN0cnVjdHVyZTsK
IGNsYXNzIFN0cnVjdHVyZUNoYWluOwpAQCAtOTEsNyArOTEsNyBAQCBwdWJsaWM6CiAgICAgfQog
ICAgIAogICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCwgSWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBQdXRCeUlkU3Rh
dHVzIGNvbXB1dGVGb3IoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUq
LCBJZGVudGlmaWVyJiwgYm9vbCBpc0RpcmVjdCk7CisgICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMg
Y29tcHV0ZUZvcihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgSWRlbnRpZmllciYs
IGJvb2wgaXNEaXJlY3QpOwogICAgIAogICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZTsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Jl
c29sdmVHbG9iYWxTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9SZXNvbHZlR2xvYmFsU3RhdHVzLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Jlc29sdmVHbG9iYWxTdGF0dXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHN0YXRpYyBSZXNvbHZlR2xvYmFsU3RhdHVz
IGNvbXB1dGVGb3JTdHIKIHsKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzSWdub3JlZDsKICAgICBK
U0NlbGwqIHNwZWNpZmljVmFsdWU7Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0
dXJlLT5nZXQoKmNvZGVCbG9jay0+Z2xvYmFsRGF0YSgpLCBpZGVudGlmaWVyLCBhdHRyaWJ1dGVz
SWdub3JlZCwgc3BlY2lmaWNWYWx1ZSk7CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5nZXQoKmNvZGVCbG9jay0+dm0oKSwgaWRlbnRpZmllciwgYXR0cmlidXRlc0lnbm9y
ZWQsIHNwZWNpZmljVmFsdWUpOwogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQog
ICAgICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rv
b2wuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU2FtcGxpbmdUb29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk3LDEzICsyOTcsMTMgQEAg
dm9pZCBTYW1wbGluZ1Rvb2w6OnNhbXBsZSgpCiAgICAgc19zYW1wbGluZ1Rvb2wtPmRvUnVuKCk7
CiB9CiAKLXZvaWQgU2FtcGxpbmdUb29sOjpub3RpZnlPZlNjb3BlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgU2NyaXB0RXhlY3V0YWJsZSogc2NyaXB0KQordm9pZCBTYW1wbGluZ1Rvb2w6Om5v
dGlmeU9mU2NvcGUoVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBzY3JpcHQpCiB7CiAjaWYgRU5B
QkxFKENPREVCTE9DS19TQU1QTElORykKICAgICBNdXRleExvY2tlciBsb2NrZXIobV9zY3JpcHRT
YW1wbGVNYXBNdXRleCk7Ci0gICAgbV9zY29wZVNhbXBsZU1hcC0+c2V0KHNjcmlwdCwgYWRvcHRQ
dHIobmV3IFNjcmlwdFNhbXBsZVJlY29yZChnbG9iYWxEYXRhLCBzY3JpcHQpKSk7CisgICAgbV9z
Y29wZVNhbXBsZU1hcC0+c2V0KHNjcmlwdCwgYWRvcHRQdHIobmV3IFNjcmlwdFNhbXBsZVJlY29y
ZCh2bSwgc2NyaXB0KSkpOwogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsRGF0YSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHZtKTsKICAgICBVTlVTRURfUEFSQU0oc2NyaXB0KTsKICNlbmRpZgog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wu
aAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Nh
bXBsaW5nVG9vbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsOCArMTg1LDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgc3RydWN0IEluc3RydWN0aW9uOwogCiAgICAgc3RydWN0IFNjcmlwdFNhbXBs
ZVJlY29yZCB7Ci0gICAgICAgIFNjcmlwdFNhbXBsZVJlY29yZChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUpCi0gICAgICAgICAgICA6IG1fZXhl
Y3V0YWJsZShnbG9iYWxEYXRhLCBleGVjdXRhYmxlKQorICAgICAgICBTY3JpcHRTYW1wbGVSZWNv
cmQoVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlKQorICAgICAgICAgICAgOiBt
X2V4ZWN1dGFibGUodm0sIGV4ZWN1dGFibGUpCiAgICAgICAgICAgICAsIG1fY29kZUJsb2NrKDAp
CiAgICAgICAgICAgICAsIG1fc2FtcGxlQ291bnQoMCkKICAgICAgICAgICAgICwgbV9vcGNvZGVT
YW1wbGVDb3VudCgwKQpAQCAtMjgxLDcgKzI4MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldHVwKCk7CiAgICAgICAgIHZvaWQgZHVtcChFeGVj
U3RhdGUqKTsKIAotICAgICAgICB2b2lkIG5vdGlmeU9mU2NvcGUoSlNHbG9iYWxEYXRhJiwgU2Ny
aXB0RXhlY3V0YWJsZSogc2NvcGUpOworICAgICAgICB2b2lkIG5vdGlmeU9mU2NvcGUoVk0mLCBT
Y3JpcHRFeGVjdXRhYmxlKiBzY29wZSk7CiAKICAgICAgICAgdm9pZCBzYW1wbGUoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEluc3RydWN0aW9uKiB2UEMpCiAgICAgICAgIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZp
c2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDI4ICsxMDEsMjggQEAgc3RydWN0IFN0
cnVjdHVyZVN0dWJJbmZvIHsKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBpbml0R2V0QnlJZFNl
bGYoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJh
c2VPYmplY3RTdHJ1Y3R1cmUpCisgICAgdm9pZCBpbml0R2V0QnlJZFNlbGYoVk0mIHZtLCBKU0Nl
bGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUpCiAgICAgewogICAgICAg
ICBhY2Nlc3NUeXBlID0gYWNjZXNzX2dldF9ieV9pZF9zZWxmOwogCi0gICAgICAgIHUuZ2V0QnlJ
ZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIGJhc2VPYmpl
Y3RTdHJ1Y3R1cmUpOworICAgICAgICB1LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUu
c2V0KHZtLCBvd25lciwgYmFzZU9iamVjdFN0cnVjdHVyZSk7CiAgICAgfQogCi0gICAgdm9pZCBp
bml0R2V0QnlJZFByb3RvKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwg
U3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVj
dHVyZSwgYm9vbCBpc0RpcmVjdCkKKyAgICB2b2lkIGluaXRHZXRCeUlkUHJvdG8oVk0mIHZtLCBK
U0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFN0cnVjdHVyZSog
cHJvdG90eXBlU3RydWN0dXJlLCBib29sIGlzRGlyZWN0KQogICAgIHsKICAgICAgICAgYWNjZXNz
VHlwZSA9IGFjY2Vzc19nZXRfYnlfaWRfcHJvdG87CiAKLSAgICAgICAgdS5nZXRCeUlkUHJvdG8u
YmFzZU9iamVjdFN0cnVjdHVyZS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIGJhc2VPYmplY3RTdHJ1
Y3R1cmUpOwotICAgICAgICB1LmdldEJ5SWRQcm90by5wcm90b3R5cGVTdHJ1Y3R1cmUuc2V0KGds
b2JhbERhdGEsIG93bmVyLCBwcm90b3R5cGVTdHJ1Y3R1cmUpOworICAgICAgICB1LmdldEJ5SWRQ
cm90by5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIGJhc2VPYmplY3RTdHJ1Y3R1
cmUpOworICAgICAgICB1LmdldEJ5SWRQcm90by5wcm90b3R5cGVTdHJ1Y3R1cmUuc2V0KHZtLCBv
d25lciwgcHJvdG90eXBlU3RydWN0dXJlKTsKICAgICAgICAgdS5nZXRCeUlkUHJvdG8uaXNEaXJl
Y3QgPSBpc0RpcmVjdDsKICAgICB9CiAKLSAgICB2b2lkIGluaXRHZXRCeUlkQ2hhaW4oSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RT
dHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5zaWduZWQgY291bnQsIGJvb2wgaXNE
aXJlY3QpCisgICAgdm9pZCBpbml0R2V0QnlJZENoYWluKFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
U3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHVu
c2lnbmVkIGNvdW50LCBib29sIGlzRGlyZWN0KQogICAgIHsKICAgICAgICAgYWNjZXNzVHlwZSA9
IGFjY2Vzc19nZXRfYnlfaWRfY2hhaW47CiAKLSAgICAgICAgdS5nZXRCeUlkQ2hhaW4uYmFzZU9i
amVjdFN0cnVjdHVyZS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIGJhc2VPYmplY3RTdHJ1Y3R1cmUp
OwotICAgICAgICB1LmdldEJ5SWRDaGFpbi5jaGFpbi5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIGNo
YWluKTsKKyAgICAgICAgdS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5zZXQodm0s
IG93bmVyLCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKKyAgICAgICAgdS5nZXRCeUlkQ2hhaW4uY2hh
aW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOwogICAgICAgICB1LmdldEJ5SWRDaGFpbi5jb3VudCA9
IGNvdW50OwogICAgICAgICB1LmdldEJ5SWRDaGFpbi5pc0RpcmVjdCA9IGlzRGlyZWN0OwogICAg
IH0KQEAgLTE0NSwyMyArMTQ1LDIzIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAKICAg
ICAvLyBQdXRCeUlkKgogCi0gICAgdm9pZCBpbml0UHV0QnlJZFRyYW5zaXRpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0
dXJlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBib29sIGlz
RGlyZWN0KQorICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgYm9vbCBpc0RpcmVjdCkKICAgICB7CiAgICAgICAgIGlm
IChpc0RpcmVjdCkKICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3Ry
YW5zaXRpb25fZGlyZWN0OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhY2Nlc3NUeXBlID0g
YWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDsKIAotICAgICAgICB1LnB1dEJ5SWRU
cmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLnNldChnbG9iYWxEYXRhLCBvd25lciwgcHJldmlv
dXNTdHJ1Y3R1cmUpOwotICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5zZXQo
Z2xvYmFsRGF0YSwgb3duZXIsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHUucHV0QnlJZFRyYW5zaXRp
b24uY2hhaW4uc2V0KGdsb2JhbERhdGEsIG93bmVyLCBjaGFpbik7CisgICAgICAgIHUucHV0QnlJ
ZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgcHJldmlvdXNTdHJ1
Y3R1cmUpOworICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5zZXQodm0sIG93
bmVyLCBzdHJ1Y3R1cmUpOworICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLnNldCh2
bSwgb3duZXIsIGNoYWluKTsKICAgICB9CiAKLSAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9i
amVjdFN0cnVjdHVyZSkKKyAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKICAgICB7CiAgICAgICAg
IGFjY2Vzc1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U7CiAgICAgCi0gICAgICAgIHUu
cHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIs
IGJhc2VPYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICB1LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmpl
Y3RTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgYmFzZU9iamVjdFN0cnVjdHVyZSk7CiAgICAgfQog
ICAgICAgICAKICAgICB2b2lkIGluaXRQdXRCeUlkTGlzdChQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
KiBsaXN0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Nyw5ICs0Nyw5IEBAIGNvbnN0IENsYXNzSW5mbyBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sK
IGNvbnN0IENsYXNzSW5mbyBVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OnNfaW5mbyA9IHsgIlVubGlu
a2VkRXZhbENvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoVW5saW5rZWRFdmFsQ29kZUJsb2NrKSB9OwogY29uc3QgQ2xhc3NJbmZvIFVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2s6OnNfaW5mbyA9IHsgIlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2siLCAm
QmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkRnVuY3Rpb25D
b2RlQmxvY2spIH07CiAKLXN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBnZW5lcmF0
ZUZ1bmN0aW9uQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNTY29wZSogc2Nv
cGUsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgRGVidWdnZXJNb2RlIGRl
YnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9y
KQorc3RhdGljIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGdlbmVyYXRlRnVuY3Rpb25Db2Rl
QmxvY2soVk0mIHZtLCBKU1Njb3BlKiBzY29wZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCBraW5kLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmls
ZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJyb3IpCiB7Ci0gICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5v
ZGU+IGJvZHkgPSBwYXJzZTxGdW5jdGlvbkJvZHlOb2RlPigmZ2xvYmFsRGF0YSwgc291cmNlLCBl
eGVjdXRhYmxlLT5wYXJhbWV0ZXJzKCksIGV4ZWN1dGFibGUtPm5hbWUoKSwgZXhlY3V0YWJsZS0+
aXNJblN0cmljdENvbnRleHQoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCBKU1Bh
cnNlRnVuY3Rpb25Db2RlLCBlcnJvcik7CisgICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGJv
ZHkgPSBwYXJzZTxGdW5jdGlvbkJvZHlOb2RlPigmdm0sIHNvdXJjZSwgZXhlY3V0YWJsZS0+cGFy
YW1ldGVycygpLCBleGVjdXRhYmxlLT5uYW1lKCksIGV4ZWN1dGFibGUtPmlzSW5TdHJpY3RDb250
ZXh0KCkgPyBKU1BhcnNlU3RyaWN0IDogSlNQYXJzZU5vcm1hbCwgSlNQYXJzZUZ1bmN0aW9uQ29k
ZSwgZXJyb3IpOwogCiAgICAgaWYgKCFib2R5KSB7CiAgICAgICAgIEFTU0VSVChlcnJvci5tX3R5
cGUgIT0gUGFyc2VyRXJyb3I6OkVycm9yTm9uZSk7CkBAIC02MSw4ICs2MSw4IEBAIHN0YXRpYyBV
bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBnZW5lcmEKICAgICBib2R5LT5maW5pc2hQYXJzaW5n
KGV4ZWN1dGFibGUtPnBhcmFtZXRlcnMoKSwgZXhlY3V0YWJsZS0+bmFtZSgpLCBleGVjdXRhYmxl
LT5mdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGUoKSk7CiAgICAgZXhlY3V0YWJsZS0+cmVjb3Jk
UGFyc2UoYm9keS0+ZmVhdHVyZXMoKSwgYm9keS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgYm9k
eS0+bGluZU5vKCksIGJvZHktPmxhc3RMaW5lKCkpOwogICAgIAotICAgIFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2sqIHJlc3VsdCA9IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSgm
Z2xvYmFsRGF0YSwgRnVuY3Rpb25Db2RlLCBFeGVjdXRhYmxlSW5mbyhib2R5LT5uZWVkc0FjdGl2
YXRpb24oKSwgYm9keS0+dXNlc0V2YWwoKSwgYm9keS0+aXNTdHJpY3RNb2RlKCksIGtpbmQgPT0g
Q29kZUZvckNvbnN0cnVjdCkpOwotICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJh
dG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihnbG9iYWxEYXRhLCBzY29wZSwgYm9k
eS5nZXQoKSwgcmVzdWx0LCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSkpKTsKKyAgICBVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1bHQgPSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
OjpjcmVhdGUoJnZtLCBGdW5jdGlvbkNvZGUsIEV4ZWN1dGFibGVJbmZvKGJvZHktPm5lZWRzQWN0
aXZhdGlvbigpLCBib2R5LT51c2VzRXZhbCgpLCBib2R5LT5pc1N0cmljdE1vZGUoKSwga2luZCA9
PSBDb2RlRm9yQ29uc3RydWN0KSk7CisgICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5l
cmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKHZtLCBzY29wZSwgYm9keS5nZXQo
KSwgcmVzdWx0LCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSkpKTsKICAgICBlcnJvciA9IGdl
bmVyYXRvci0+Z2VuZXJhdGUoKTsKICAgICBib2R5LT5kZXN0cm95RGF0YSgpOwogICAgIGlmIChl
cnJvci5tX3R5cGUgIT0gUGFyc2VyRXJyb3I6OkVycm9yTm9uZSkKQEAgLTgwLDggKzgwLDggQEAg
dW5zaWduZWQgVW5saW5rZWRDb2RlQmxvY2s6OmFkZE9yRmluZENvbgogICAgIHJldHVybiBhZGRD
b25zdGFudCh2KTsKIH0KIAotVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgRnVuY3Rpb25Cb2R5Tm9kZSogbm9kZSkK
LSAgICA6IEJhc2UoKmdsb2JhbERhdGEsIHN0cnVjdHVyZSkKK1VubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShWTSogdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uQm9keU5vZGUqIG5vZGUp
CisgICAgOiBCYXNlKCp2bSwgc3RydWN0dXJlKQogICAgICwgbV9udW1DYXB0dXJlZFZhcmlhYmxl
cyhub2RlLT5jYXB0dXJlZFZhcmlhYmxlQ291bnQoKSkKICAgICAsIG1fZm9yY2VVc2VzQXJndW1l
bnRzKG5vZGUtPnVzZXNBcmd1bWVudHMoKSkKICAgICAsIG1faXNJblN0cmljdENvbnRleHQobm9k
ZS0+aXNTdHJpY3RNb2RlKCkpCkBAIC0xMTgsMTkgKzExOCwxOSBAQCB2b2lkIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3Qt
Pm1fc3ltYm9sVGFibGVGb3JDb25zdHJ1Y3QpOwogfQogCi1GdW5jdGlvbkV4ZWN1dGFibGUqIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpsaW5rKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlLCBzaXplX3QgbGluZU9mZnNldCwgc2l6ZV90IHNvdXJj
ZU9mZnNldCkKK0Z1bmN0aW9uRXhlY3V0YWJsZSogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6
OmxpbmsoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIHNpemVfdCBsaW5lT2Zmc2V0
LCBzaXplX3Qgc291cmNlT2Zmc2V0KQogewogICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IGxpbmVP
ZmZzZXQgKyBtX2ZpcnN0TGluZU9mZnNldDsKICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IHNv
dXJjZU9mZnNldCArIG1fc3RhcnRPZmZzZXQ7CiAgICAgU291cmNlQ29kZSBjb2RlKHNvdXJjZS5w
cm92aWRlcigpLCBzdGFydE9mZnNldCwgc3RhcnRPZmZzZXQgKyBtX3NvdXJjZUxlbmd0aCwgZmly
c3RMaW5lKTsKLSAgICByZXR1cm4gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoZ2xvYmFsRGF0
YSwgY29kZSwgdGhpcywgZmlyc3RMaW5lLCBmaXJzdExpbmUgKyBtX2xpbmVDb3VudCk7CisgICAg
cmV0dXJuIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKHZtLCBjb2RlLCB0aGlzLCBmaXJzdExp
bmUsIGZpcnN0TGluZSArIG1fbGluZUNvdW50KTsKIH0KIAogVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUqIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZShjb25zdCBJ
ZGVudGlmaWVyJiBuYW1lLCBFeGVjU3RhdGUqIGV4ZWMsIERlYnVnZ2VyKiwgY29uc3QgU291cmNl
Q29kZSYgc291cmNlLCBKU09iamVjdCoqIGV4Y2VwdGlvbikKIHsKICAgICBQYXJzZXJFcnJvciBl
cnJvcjsKLSAgICBDb2RlQ2FjaGUqIGNvZGVDYWNoZSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5jb2Rl
Q2FjaGUoKTsKLSAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGNv
ZGVDYWNoZS0+Z2V0RnVuY3Rpb25FeGVjdXRhYmxlRnJvbUdsb2JhbENvZGUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBuYW1lLCBzb3VyY2UsIGVycm9yKTsKKyAgICBDb2RlQ2FjaGUqIGNvZGVDYWNoZSA9
IGV4ZWMtPnZtKCkuY29kZUNhY2hlKCk7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUgPSBjb2RlQ2FjaGUtPmdldEZ1bmN0aW9uRXhlY3V0YWJsZUZyb21HbG9iYWxD
b2RlKGV4ZWMtPnZtKCksIG5hbWUsIHNvdXJjZSwgZXJyb3IpOwogICAgIGlmIChlcnJvci5tX3R5
cGUgIT0gUGFyc2VyRXJyb3I6OkVycm9yTm9uZSkgewogICAgICAgICAqZXhjZXB0aW9uID0gZXJy
b3IudG9FcnJvck9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHNvdXJjZSk7CiAg
ICAgICAgIHJldHVybiAwOwpAQCAtMTM5LDcgKzEzOSw3IEBAIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiBVbmxpbmtlZEZ1bmMKICAgICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KIAotVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jayogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNvZGVCbG9j
a0ZvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTU2NvcGUqIHNjb3BlLCBjb25zdCBTb3Vy
Y2VDb2RlJiBzb3VyY2UsIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5k
LCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBQ
YXJzZXJFcnJvciYgZXJyb3IpCitVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZTo6Y29kZUJsb2NrRm9yKFZNJiB2bSwgSlNTY29wZSogc2NvcGUsIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXph
dGlvbktpbmQsIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxl
ck1vZGUsIFBhcnNlckVycm9yJiBlcnJvcikKIHsKICAgICBzd2l0Y2ggKHNwZWNpYWxpemF0aW9u
S2luZCkgewogICAgIGNhc2UgQ29kZUZvckNhbGw6CkBAIC0xNTIsMTkgKzE1MiwxOSBAQCBVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBVbmxpbmtlZEZ1bmN0CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAotICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHJlc3VsdCA9IGdlbmVyYXRlRnVu
Y3Rpb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgc2NvcGUsIHRoaXMsIHNvdXJjZSwgc3BlY2lhbGl6
YXRpb25LaW5kLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3IpOworICAgIFVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2sqIHJlc3VsdCA9IGdlbmVyYXRlRnVuY3Rpb25Db2RlQmxvY2so
dm0sIHNjb3BlLCB0aGlzLCBzb3VyY2UsIHNwZWNpYWxpemF0aW9uS2luZCwgZGVidWdnZXJNb2Rl
LCBwcm9maWxlck1vZGUsIGVycm9yKTsKICAgICAKICAgICBpZiAoZXJyb3IubV90eXBlICE9IFBh
cnNlckVycm9yOjpFcnJvck5vbmUpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgc3dpdGNoIChz
cGVjaWFsaXphdGlvbktpbmQpIHsKICAgICBjYXNlIENvZGVGb3JDYWxsOgotICAgICAgICBtX2Nv
ZGVCbG9ja0ZvckNhbGwuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHJlc3VsdCk7Ci0gICAgICAgIG1f
c3ltYm9sVGFibGVGb3JDYWxsLnNldChnbG9iYWxEYXRhLCB0aGlzLCByZXN1bHQtPnN5bWJvbFRh
YmxlKCkpOworICAgICAgICBtX2NvZGVCbG9ja0ZvckNhbGwuc2V0KHZtLCB0aGlzLCByZXN1bHQp
OworICAgICAgICBtX3N5bWJvbFRhYmxlRm9yQ2FsbC5zZXQodm0sIHRoaXMsIHJlc3VsdC0+c3lt
Ym9sVGFibGUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoK
LSAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHJl
c3VsdCk7Ci0gICAgICAgIG1fc3ltYm9sVGFibGVGb3JDb25zdHJ1Y3Quc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHJlc3VsdC0+c3ltYm9sVGFibGUoKSk7CisgICAgICAgIG1fY29kZUJsb2NrRm9yQ29u
c3RydWN0LnNldCh2bSwgdGhpcywgcmVzdWx0KTsKKyAgICAgICAgbV9zeW1ib2xUYWJsZUZvckNv
bnN0cnVjdC5zZXQodm0sIHRoaXMsIHJlc3VsdC0+c3ltYm9sVGFibGUoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTgyLDEyICsxODIsMTIgQEAgU3Ry
aW5nIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpwYXJhbQogICAgIHJldHVybiBidWlsZGVy
LnRvU3RyaW5nKCk7CiB9CiAKLVVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBj
b2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCi0gICAgOiBCYXNlKCpnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUpCitVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soVk0q
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1
dGFibGVJbmZvJiBpbmZvKQorICAgIDogQmFzZSgqdm0sIHN0cnVjdHVyZSkKICAgICAsIG1fbnVt
VmFycygwKQogICAgICwgbV9udW1DYWxsZWVSZWdpc3RlcnMoMCkKICAgICAsIG1fbnVtUGFyYW1l
dGVycygwKQotICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgLCBtX3ZtKHZtKQog
ICAgICwgbV9hcmd1bWVudHNSZWdpc3RlcigtMSkKICAgICAsIG1fZ2xvYmFsT2JqZWN0UmVnaXN0
ZXIoLTEpCiAgICAgLCBtX25lZWRzRnVsbFNjb3BlQ2hhaW4oaW5mby5tX25lZWRzQWN0aXZhdGlv
bikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtODEsMTAgKzgx
LDEwIEBAIGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlIDogcHVibGkKIHB1YmxpYzoK
ICAgICBmcmllbmQgY2xhc3MgQ29kZUNhY2hlOwogICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7Ci0g
ICAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uQm9keU5vZGUq
IG5vZGUpCisgICAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGUoVk0q
IHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uQm9keU5vZGUqIG5vZGUpCiAg
ICAgewotICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogaW5zdGFuY2UgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oZ2xvYmFs
RGF0YS0+aGVhcCkpIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKGdsb2JhbERhdGEsIGdsb2Jh
bERhdGEtPnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBzb3VyY2Us
IG5vZGUpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKmdsb2JhbERhdGEpOwor
ICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogaW5zdGFuY2UgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0tPmhlYXApKSBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSh2bSwgdm0tPnVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlU3RydWN0dXJlLmdldCgpLCBzb3VyY2UsIG5vZGUpOworICAgICAgICBpbnN0YW5jZS0+Zmlu
aXNoQ3JlYXRpb24oKnZtKTsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIApAQCAt
MTA3LDExICsxMDcsMTEgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIHBhcmFtU3RyaW5nKCkgY29u
c3Q7CiAKLSAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3IoSlNHbG9i
YWxEYXRhJiwgSlNTY29wZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImKTsKKyAgICBVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3IoVk0mLCBKU1Njb3BlKiwgY29uc3Qg
U291cmNlQ29kZSYsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIERlYnVnZ2VyTW9kZSwgUHJvZmls
ZXJNb2RlLCBQYXJzZXJFcnJvciYpOwogCiAgICAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiBmcm9tR2xvYmFsQ29kZShjb25zdCBJZGVudGlmaWVyJiwgRXhlY1N0YXRlKiwgRGVi
dWdnZXIqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNPYmplY3QqKiBleGNlcHRpb24pOwogCi0gICAg
RnVuY3Rpb25FeGVjdXRhYmxlKiBsaW5rKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFNvdXJjZUNvZGUm
LCBzaXplX3QgbGluZU9mZnNldCwgc2l6ZV90IHNvdXJjZU9mZnNldCk7CisgICAgRnVuY3Rpb25F
eGVjdXRhYmxlKiBsaW5rKFZNJiwgY29uc3QgU291cmNlQ29kZSYsIHNpemVfdCBsaW5lT2Zmc2V0
LCBzaXplX3Qgc291cmNlT2Zmc2V0KTsKIAogICAgIHZvaWQgY2xlYXJDb2RlRm9yUmVjb21waWxh
dGlvbigpCiAgICAgewpAQCAtMTQwLDcgKzE0MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQ2VsbCopOwogCiBwcml2YXRlOgotICAgIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKEpTR2xvYmFsRGF0YSosIFN0cnVjdHVyZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBGdW5j
dGlvbkJvZHlOb2RlKik7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoVk0qLCBTdHJ1
Y3R1cmUqLCBjb25zdCBTb3VyY2VDb2RlJiwgRnVuY3Rpb25Cb2R5Tm9kZSopOwogICAgIFdyaXRl
QmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7CiAg
ICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0OwogCkBAIC0xNjYsMTggKzE2NiwxOCBAQCBwcml2YXRlOgogICAgIEZ1bmN0aW9u
TmFtZUlzSW5TY29wZVRvZ2dsZSBtX2Z1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZTsKIAogcHJv
dGVjdGVkOgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIHsKLSAgICAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgICAgIG1fbmFtZVZhbHVlLnNldChnbG9i
YWxEYXRhLCB0aGlzLCBqc1N0cmluZygmZ2xvYmFsRGF0YSwgbmFtZSgpLnN0cmluZygpKSk7Cisg
ICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgbV9uYW1lVmFsdWUuc2V0
KHZtLCB0aGlzLCBqc1N0cmluZygmdm0sIG5hbWUoKS5zdHJpbmcoKSkpOwogICAgIH0KIAogICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogcHVi
bGljOgotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8p
CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKICAgICB7Ci0gICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBl
SW5mbyhVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90bywgVHlwZUluZm8oVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBKU0NlbGw6OlN0cnVjdHVy
ZUZsYWdzOwpAQCAtMjgyLDcgKzI4Miw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGNyZWF0
ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKICAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fcmFyZURh
dGEtPm1fcmVnZXhwcy5zaXplKCk7Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fcmVnZXhwcy5hcHBl
bmQoV3JpdGVCYXJyaWVyPFJlZ0V4cD4oKm1fZ2xvYmFsRGF0YSwgdGhpcywgcikpOworICAgICAg
ICBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuYXBwZW5kKFdyaXRlQmFycmllcjxSZWdFeHA+KCptX3Zt
LCB0aGlzLCByKSk7CiAgICAgICAgIHJldHVybiBzaXplOwogICAgIH0KICAgICB1bnNpZ25lZCBu
dW1iZXJPZlJlZ0V4cHMoKSBjb25zdApAQCAtMzA1LDcgKzMwNSw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwog
ICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4o
KSk7Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldCgqbV9nbG9iYWxEYXRh
LCB0aGlzLCB2KTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5sYXN0KCkuc2V0KCptX3Zt
LCB0aGlzLCB2KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgdW5zaWduZWQg
YWRkT3JGaW5kQ29uc3RhbnQoSlNWYWx1ZSk7CkBAIC0zNzMsNyArMzczLDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fZnVuY3Rpb25EZWNscy5zaXplKCk7CiAg
ICAgICAgIG1fZnVuY3Rpb25EZWNscy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlPigpKTsKLSAgICAgICAgbV9mdW5jdGlvbkRlY2xzLmxhc3QoKS5zZXQoKm1f
Z2xvYmFsRGF0YSwgdGhpcywgbik7CisgICAgICAgIG1fZnVuY3Rpb25EZWNscy5sYXN0KCkuc2V0
KCptX3ZtLCB0aGlzLCBuKTsKICAgICAgICAgcmV0dXJuIHNpemU7CiAgICAgfQogICAgIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJldHVybiBt
X2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CkBAIC0zODIsNyArMzgyLDcgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fZnVuY3Rpb25FeHBycy5zaXplKCk7
CiAgICAgICAgIG1fZnVuY3Rpb25FeHBycy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlPigpKTsKLSAgICAgICAgbV9mdW5jdGlvbkV4cHJzLmxhc3QoKS5zZXQo
Km1fZ2xvYmFsRGF0YSwgdGhpcywgbik7CisgICAgICAgIG1fZnVuY3Rpb25FeHBycy5sYXN0KCku
c2V0KCptX3ZtLCB0aGlzLCBuKTsKICAgICAgICAgcmV0dXJuIHNpemU7CiAgICAgfQogICAgIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4cHIoaW50IGluZGV4KSB7IHJldHVy
biBtX2Z1bmN0aW9uRXhwcnNbaW5kZXhdLmdldCgpOyB9CkBAIC0zOTUsNyArMzk1LDcgQEAgcHVi
bGljOgogCiAgICAgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1
cm4gbV9zeW1ib2xUYWJsZS5nZXQoKTsgfQogCi0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxEYXRhOyB9CisgICAgVk0qIHZtKCkgY29uc3QgeyBy
ZXR1cm4gbV92bTsgfQogCiAgICAgdW5zaWduZWQgYWRkUmVzb2x2ZSgpIHsgcmV0dXJuIG1fcmVz
b2x2ZU9wZXJhdGlvbkNvdW50Kys7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZlJlc29sdmVPcGVy
YXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlT3BlcmF0aW9uQ291bnQ7IH0KQEAgLTQ3
MSwxNSArNDcxLDE1IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25zdCB7
IHJldHVybiBtX2xpbmVDb3VudDsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgVW5saW5rZWRDb2RlQmxv
Y2soSlNHbG9iYWxEYXRhKiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJ
bmZvJik7CisgICAgVW5saW5rZWRDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwg
Y29uc3QgRXhlY3V0YWJsZUluZm8mKTsKICAgICB+VW5saW5rZWRDb2RlQmxvY2soKTsKIAotICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIHsKLSAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAg
ICAgaWYgKGNvZGVUeXBlKCkgPT0gR2xvYmFsQ29kZSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgbV9zeW1ib2xUYWJsZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgU2hhcmVkU3ltYm9sVGFi
bGU6OmNyZWF0ZShnbG9iYWxEYXRhKSk7CisgICAgICAgIG1fc3ltYm9sVGFibGUuc2V0KHZtLCB0
aGlzLCBTaGFyZWRTeW1ib2xUYWJsZTo6Y3JlYXRlKHZtKSk7CiAgICAgfQogCiBwcml2YXRlOgpA
QCAtNDkzLDcgKzQ5Myw3IEBAIHByaXZhdGU6CiAgICAgUmVmQ291bnRlZEFycmF5PFVubGlua2Vk
SW5zdHJ1Y3Rpb24+IG1fdW5saW5rZWRJbnN0cnVjdGlvbnM7CiAKICAgICBpbnQgbV9udW1QYXJh
bWV0ZXJzOwotICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworICAgIFZNKiBtX3ZtOwog
CiAgICAgaW50IG1fdGhpc1JlZ2lzdGVyOwogICAgIGludCBtX2FyZ3VtZW50c1JlZ2lzdGVyOwpA
QCAtNTc4LDggKzU3OCw4IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFVubGlua2VkQ29kZUJsb2Nr
IEJhc2U7CiAKIHByb3RlY3RlZDoKLSAgICBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayhKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlVHlw
ZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCi0gICAgICAgIDogQmFzZShnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUsIGNvZGVUeXBlLCBpbmZvKQorICAgIFVubGlua2VkR2xvYmFsQ29kZUJsb2Nr
KFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBF
eGVjdXRhYmxlSW5mbyYgaW5mbykKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIGNvZGVU
eXBlLCBpbmZvKQogICAgIHsKICAgICB9CiAKQEAgLTU5MSwxMCArNTkxLDEwIEBAIHByb3RlY3Rl
ZDoKIGNsYXNzIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayA6IHB1YmxpYyBVbmxpbmtlZEdsb2Jh
bENvZGVCbG9jayB7CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDb2RlQ2FjaGU7Ci0gICAg
c3RhdGljIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCisgICAgc3RhdGljIFVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGlu
Zm8pCiAgICAgewotICAgICAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPihnbG9i
YWxEYXRhLT5oZWFwKSkgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKGdsb2JhbERhdGEsIGdsb2Jh
bERhdGEtPnVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgaW5mbyk7Ci0g
ICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqZ2xvYmFsRGF0YSk7CisgICAgICAgIFVu
bGlua2VkUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+KHZtLT5oZWFwKSkgVW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrKHZtLCB2bS0+dW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgp
LCBpbmZvKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSk7CiAgICAgICAg
IHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKQEAgLTYwMiw5ICs2MDIsOSBAQCBwdWJsaWM6CiAg
ICAgdHlwZWRlZiBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayBCYXNlOwogICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICB2b2lkIGFkZEZ1bmN0aW9uRGVjbGFyYXRpb24oSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlKQorICAgIHZvaWQgYWRkRnVuY3Rp
b25EZWNsYXJhdGlvbihWTSYgdm0sIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUpCiAgICAgewotICAgICAgICBtX2Z1
bmN0aW9uRGVjbGFyYXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihuYW1lLCBXcml0ZUJhcnJp
ZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KGdsb2JhbERhdGEsIHRoaXMsIGZ1bmN0aW9u
RXhlY3V0YWJsZSkpKTsKKyAgICAgICAgbV9mdW5jdGlvbkRlY2xhcmF0aW9ucy5hcHBlbmQoc3Rk
OjptYWtlX3BhaXIobmFtZSwgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
Pih2bSwgdGhpcywgZnVuY3Rpb25FeGVjdXRhYmxlKSkpOwogICAgIH0KIAogICAgIHZvaWQgYWRk
VmFyaWFibGVEZWNsYXJhdGlvbihjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBib29sIGlzQ29uc3Rh
bnQpCkBAIC02MjEsOCArNjIxLDggQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKLSAgICBVbmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCi0gICAgICAgIDogQmFzZShnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUsIEdsb2JhbENvZGUsIGluZm8pCisgICAgVW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZv
JiBpbmZvKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgR2xvYmFsQ29kZSwgaW5mbykK
ICAgICB7CiAgICAgfQogCkBAIC02MzAsOSArNjMwLDkgQEAgcHJpdmF0ZToKICAgICBGdW5jdGlv
bkRlY2xhdGlvbnMgbV9mdW5jdGlvbkRlY2xhcmF0aW9uczsKIAogcHVibGljOgotICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCisgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90bykKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhVbmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2tUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZv
KFVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwpAQCAtNjQ0LDEwICs2
NDQsMTAgQEAgY2xhc3MgVW5saW5rZWRFdmFsQ29kZUJsb2NrIDogcHVibGljIFVubAogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZUNhY2hlOwogCi0gICAgc3RhdGljIFVubGlua2VkRXZh
bENvZGVCbG9jayogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgRXhlY3V0
YWJsZUluZm8mIGluZm8pCisgICAgc3RhdGljIFVubGlua2VkRXZhbENvZGVCbG9jayogY3JlYXRl
KFZNKiB2bSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCiAgICAgewotICAgICAgICBVbmxp
bmtlZEV2YWxDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
VW5saW5rZWRFdmFsQ29kZUJsb2NrPihnbG9iYWxEYXRhLT5oZWFwKSkgVW5saW5rZWRFdmFsQ29k
ZUJsb2NrKGdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnVubGlua2VkRXZhbENvZGVCbG9ja1N0cnVj
dHVyZS5nZXQoKSwgaW5mbyk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqZ2xv
YmFsRGF0YSk7CisgICAgICAgIFVubGlua2VkRXZhbENvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+KHZtLT5oZWFwKSkg
VW5saW5rZWRFdmFsQ29kZUJsb2NrKHZtLCB2bS0+dW5saW5rZWRFdmFsQ29kZUJsb2NrU3RydWN0
dXJlLmdldCgpLCBpbmZvKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSk7
CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKQEAgLTY2NCwxNyArNjY0LDE3IEBA
IHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1
dGFibGVJbmZvJiBpbmZvKQotICAgICAgICA6IEJhc2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBF
dmFsQ29kZSwgaW5mbykKKyAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCisgICAgICAgIDogQmFz
ZSh2bSwgc3RydWN0dXJlLCBFdmFsQ29kZSwgaW5mbykKICAgICB7CiAgICAgfQogCiAgICAgVmVj
dG9yPElkZW50aWZpZXIsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3ZhcmlhYmxlczsKIAog
cHVibGljOgotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG8pCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKICAgICB7Ci0gICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvLCBU
eXBlSW5mbyhVbmxpbmtlZEV2YWxDb2RlQmxvY2tUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG8sIFR5cGVJbmZvKFVubGlua2VkRXZhbENvZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwpA
QCAtNjg0LDEwICs2ODQsMTAgQEAgcHVibGljOgogCiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrIDogcHVibGljIFVubGlua2VkQ29kZUJsb2NrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQorICAgIHN0
YXRpYyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb2RlVHlwZSBj
b2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCiAgICAgewotICAgICAgICBVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+KGdsb2JhbERhdGEtPmhlYXApKSBVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrKGdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGNvZGVUeXBlLCBpbmZvKTsKLSAgICAgICAgaW5z
dGFuY2UtPmZpbmlzaENyZWF0aW9uKCpnbG9iYWxEYXRhKTsKKyAgICAgICAgVW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrPih2bS0+aGVhcCkpIFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2sodm0sIHZtLT51bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBjb2Rl
VHlwZSwgaW5mbyk7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOwogICAg
ICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCkBAIC02OTUsMTUgKzY5NSwxNSBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogcHJpdmF0ZToKLSAgICBV
bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYg
aW5mbykKLSAgICAgICAgOiBCYXNlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgY29kZVR5cGUsIGlu
Zm8pCisgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCisg
ICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjb2RlVHlwZSwgaW5mbykKICAgICB7CiAgICAg
fQogICAgIAogcHVibGljOgotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG8pCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKICAgICB7Ci0g
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3Qs
IHByb3RvLCBUeXBlSW5mbyhVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrVHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrVHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6
U3RydWN0dXJlRmxhZ3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTQ4NjM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSwxMiArMTU1LDEyIEBAIHZvaWQgQnl0ZWNvZGVHZW5l
cmF0b3I6OnByZXNlcnZlTGFzdFZhcigKICAgICAgICAgbV9sYXN0VmFyID0gJm1fY2FsbGVlUmVn
aXN0ZXJzLmxhc3QoKTsKIH0KIAotQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9y
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNTY29wZSosIFByb2dyYW1Ob2RlKiBwcm9ncmFt
Tm9kZSwgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlYnVnZ2VyTW9kZSBk
ZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUpCitCeXRlY29kZUdlbmVyYXRv
cjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBKU1Njb3BlKiwgUHJvZ3JhbU5vZGUqIHByb2dy
YW1Ob2RlLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jaywgRGVidWdnZXJNb2Rl
IGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSkKICAgICA6IG1fc2hvdWxk
RW1pdERlYnVnSG9va3MoZGVidWdnZXJNb2RlID09IERlYnVnZ2VyT24pCiAgICAgLCBtX3Nob3Vs
ZEVtaXRQcm9maWxlSG9va3MocHJvZmlsZXJNb2RlID09IFByb2ZpbGVyT24pCiAgICAgLCBtX3N5
bWJvbFRhYmxlKDApCiAgICAgLCBtX3Njb3BlTm9kZShwcm9ncmFtTm9kZSkKLSAgICAsIG1fY29k
ZUJsb2NrKGdsb2JhbERhdGEsIGNvZGVCbG9jaykKKyAgICAsIG1fY29kZUJsb2NrKHZtLCBjb2Rl
QmxvY2spCiAgICAgLCBtX3RoaXNSZWdpc3RlcihDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNl
dCgpKQogICAgICwgbV9lbXB0eVZhbHVlUmVnaXN0ZXIoMCkKICAgICAsIG1fZ2xvYmFsT2JqZWN0
UmVnaXN0ZXIoMCkKQEAgLTE3Myw3ICsxNzMsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNv
ZGVHZW5lcmF0b3IoSlNHCiAgICAgLCBtX2ZpcnN0TGF6eUZ1bmN0aW9uKDApCiAgICAgLCBtX2xh
c3RMYXp5RnVuY3Rpb24oMCkKICAgICAsIG1fc3RhdGljUHJvcGVydHlBbmFseXplcigmbV9pbnN0
cnVjdGlvbnMpCi0gICAgLCBtX2dsb2JhbERhdGEoJmdsb2JhbERhdGEpCisgICAgLCBtX3ZtKCZ2
bSkKICAgICAsIG1fbGFzdE9wY29kZUlEKG9wX2VuZCkKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBt
X2xhc3RPcGNvZGVQb3NpdGlvbigwKQpAQCAtMTk1LDcgKzE5NSw3IEBAIEJ5dGVjb2RlR2VuZXJh
dG9yOjpCeXRlY29kZUdlbmVyYXRvcihKU0cKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1
bmN0aW9uU3RhY2suc2l6ZSgpOyArK2kpIHsKICAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogZnVu
Y3Rpb24gPSBmdW5jdGlvblN0YWNrW2ldOwogICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSogdW5saW5rZWRGdW5jdGlvbiA9IG1ha2VGdW5jdGlvbihmdW5jdGlvbik7Ci0gICAgICAg
IGNvZGVCbG9jay0+YWRkRnVuY3Rpb25EZWNsYXJhdGlvbigqbV9nbG9iYWxEYXRhLCBmdW5jdGlv
bi0+aWRlbnQoKSwgdW5saW5rZWRGdW5jdGlvbik7CisgICAgICAgIGNvZGVCbG9jay0+YWRkRnVu
Y3Rpb25EZWNsYXJhdGlvbigqbV92bSwgZnVuY3Rpb24tPmlkZW50KCksIHVubGlua2VkRnVuY3Rp
b24pOwogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFyU3RhY2suc2l6ZSgp
OyArK2kpCkBAIC0yMDMsMTMgKzIwMywxMyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVH
ZW5lcmF0b3IoSlNHCiAKIH0KIAotQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9y
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNTY29wZSogc2NvcGUsIEZ1bmN0aW9uQm9keU5v
ZGUqIGZ1bmN0aW9uQm9keSwgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrLCBE
ZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlKQorQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgSlNTY29wZSogc2NvcGUs
IEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keSwgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
ayogY29kZUJsb2NrLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJv
ZmlsZXJNb2RlKQogICAgIDogbV9zaG91bGRFbWl0RGVidWdIb29rcyhkZWJ1Z2dlck1vZGUgPT0g
RGVidWdnZXJPbikKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcyhwcm9maWxlck1vZGUg
PT0gUHJvZmlsZXJPbikKICAgICAsIG1fc3ltYm9sVGFibGUoY29kZUJsb2NrLT5zeW1ib2xUYWJs
ZSgpKQogICAgICwgbV9zY29wZU5vZGUoZnVuY3Rpb25Cb2R5KQotICAgICwgbV9zY29wZShnbG9i
YWxEYXRhLCBzY29wZSkKLSAgICAsIG1fY29kZUJsb2NrKGdsb2JhbERhdGEsIGNvZGVCbG9jaykK
KyAgICAsIG1fc2NvcGUodm0sIHNjb3BlKQorICAgICwgbV9jb2RlQmxvY2sodm0sIGNvZGVCbG9j
aykKICAgICAsIG1fYWN0aXZhdGlvblJlZ2lzdGVyKDApCiAgICAgLCBtX2VtcHR5VmFsdWVSZWdp
c3RlcigwKQogICAgICwgbV9nbG9iYWxPYmplY3RSZWdpc3RlcigwKQpAQCAtMjIyLDcgKzIyMiw3
IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihKU0cKICAgICAsIG1fZmly
c3RMYXp5RnVuY3Rpb24oMCkKICAgICAsIG1fbGFzdExhenlGdW5jdGlvbigwKQogICAgICwgbV9z
dGF0aWNQcm9wZXJ0eUFuYWx5emVyKCZtX2luc3RydWN0aW9ucykKLSAgICAsIG1fZ2xvYmFsRGF0
YSgmZ2xvYmFsRGF0YSkKKyAgICAsIG1fdm0oJnZtKQogICAgICwgbV9sYXN0T3Bjb2RlSUQob3Bf
ZW5kKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fbGFzdE9wY29kZVBvc2l0aW9uKDApCkBAIC00
MDAsMTMgKzQwMCwxMyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoSlNH
CiAgICAgfQogfQogCi1CeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU1Njb3BlKiBzY29wZSwgRXZhbE5vZGUqIGV2YWxOb2RlLCBV
bmxpbmtlZEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jaywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9k
ZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSkKK0J5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcihWTSYgdm0sIEpTU2NvcGUqIHNjb3BlLCBFdmFsTm9kZSogZXZhbE5vZGUsIFVu
bGlua2VkRXZhbENvZGVCbG9jayogY29kZUJsb2NrLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2Rl
LCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlKQogICAgIDogbV9zaG91bGRFbWl0RGVidWdIb29r
cyhkZWJ1Z2dlck1vZGUgPT0gRGVidWdnZXJPbikKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGVI
b29rcyhwcm9maWxlck1vZGUgPT0gUHJvZmlsZXJPbikKICAgICAsIG1fc3ltYm9sVGFibGUoY29k
ZUJsb2NrLT5zeW1ib2xUYWJsZSgpKQogICAgICwgbV9zY29wZU5vZGUoZXZhbE5vZGUpCi0gICAg
LCBtX3Njb3BlKGdsb2JhbERhdGEsIHNjb3BlKQotICAgICwgbV9jb2RlQmxvY2soZ2xvYmFsRGF0
YSwgY29kZUJsb2NrKQorICAgICwgbV9zY29wZSh2bSwgc2NvcGUpCisgICAgLCBtX2NvZGVCbG9j
ayh2bSwgY29kZUJsb2NrKQogICAgICwgbV90aGlzUmVnaXN0ZXIoQ2FsbEZyYW1lOjp0aGlzQXJn
dW1lbnRPZmZzZXQoKSkKICAgICAsIG1fZW1wdHlWYWx1ZVJlZ2lzdGVyKDApCiAgICAgLCBtX2ds
b2JhbE9iamVjdFJlZ2lzdGVyKDApCkBAIC00MTksNyArNDE5LDcgQEAgQnl0ZWNvZGVHZW5lcmF0
b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEpTRwogICAgICwgbV9maXJzdExhenlGdW5jdGlvbigwKQog
ICAgICwgbV9sYXN0TGF6eUZ1bmN0aW9uKDApCiAgICAgLCBtX3N0YXRpY1Byb3BlcnR5QW5hbHl6
ZXIoJm1faW5zdHJ1Y3Rpb25zKQotICAgICwgbV9nbG9iYWxEYXRhKCZnbG9iYWxEYXRhKQorICAg
ICwgbV92bSgmdm0pCiAgICAgLCBtX2xhc3RPcGNvZGVJRChvcF9lbmQpCiAjaWZuZGVmIE5ERUJV
RwogICAgICwgbV9sYXN0T3Bjb2RlUG9zaXRpb24oMCkKQEAgLTk2MCw3ICs5NjAsNyBAQCB1bnNp
Z25lZCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnQoCiAgICAgU3RyaW5nSW1wbCogcmVw
ID0gaWRlbnQuaW1wbCgpOwogICAgIElkZW50aWZpZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBt
X2lkZW50aWZpZXJNYXAuYWRkKHJlcCwgbV9jb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMo
KSk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBtX2NvZGVCbG9jay0+YWRk
SWRlbnRpZmllcihJZGVudGlmaWVyKG1fZ2xvYmFsRGF0YSwgcmVwKSk7CisgICAgICAgIG1fY29k
ZUJsb2NrLT5hZGRJZGVudGlmaWVyKElkZW50aWZpZXIobV92bSwgcmVwKSk7CiAKICAgICByZXR1
cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KQEAgLTExNDksNyArMTE0OSw3IEBAIFJlZ2lz
dGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZCgKIHsKICAgICBKU1N0cmluZyomIHN0
cmluZ0luTWFwID0gbV9zdHJpbmdNYXAuYWRkKGlkZW50aWZpZXIuaW1wbCgpLCAwKS5pdGVyYXRv
ci0+dmFsdWU7CiAgICAgaWYgKCFzdHJpbmdJbk1hcCkKLSAgICAgICAgc3RyaW5nSW5NYXAgPSBq
c093bmVkU3RyaW5nKGdsb2JhbERhdGEoKSwgaWRlbnRpZmllci5zdHJpbmcoKSk7CisgICAgICAg
IHN0cmluZ0luTWFwID0ganNPd25lZFN0cmluZyh2bSgpLCBpZGVudGlmaWVyLnN0cmluZygpKTsK
ICAgICByZXR1cm4gZW1pdExvYWQoZHN0LCBKU1ZhbHVlKHN0cmluZ0luTWFwKSk7CiB9CiAKQEAg
LTE0ODMsNyArMTQ4Myw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGly
ZWMKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKDApOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgKLSAgICAgICAgcHJvcGVydHkgIT0g
bV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8KKyAgICAgICAgcHJv
cGVydHkgIT0gbV92bS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvCiAgICAgICAgICYm
IFByb3BlcnR5TmFtZShwcm9wZXJ0eSkuYXNJbmRleCgpID09IFByb3BlcnR5TmFtZTo6Tm90QW5J
bmRleCk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQpAQCAtMTYxNiw3ICsxNjE2LDcgQEAgSlNTdHJp
bmcqIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRTdHJpbmdDbwogewogICAgIEpTU3RyaW5nKiYgc3Ry
aW5nSW5NYXAgPSBtX3N0cmluZ01hcC5hZGQoaWRlbnRpZmllci5pbXBsKCksIDApLml0ZXJhdG9y
LT52YWx1ZTsKICAgICBpZiAoIXN0cmluZ0luTWFwKSB7Ci0gICAgICAgIHN0cmluZ0luTWFwID0g
anNTdHJpbmcoZ2xvYmFsRGF0YSgpLCBpZGVudGlmaWVyLnN0cmluZygpKTsKKyAgICAgICAgc3Ry
aW5nSW5NYXAgPSBqc1N0cmluZyh2bSgpLCBpZGVudGlmaWVyLnN0cmluZygpKTsKICAgICAgICAg
YWRkQ29uc3RhbnRWYWx1ZShzdHJpbmdJbk1hcCk7CiAgICAgfQogICAgIHJldHVybiBzdHJpbmdJ
bk1hcDsKQEAgLTE3NjIsOSArMTc2Miw5IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0Q2FsbEUKIAogRXhwZWN0ZWRGdW5jdGlvbiBCeXRlY29kZUdlbmVyYXRvcjo6ZXhwZWN0
ZWRGdW5jdGlvbkZvcklkZW50aWZpZXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKIHsK
LSAgICBpZiAoaWRlbnRpZmllciA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPk9iamVj
dCkKKyAgICBpZiAoaWRlbnRpZmllciA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5PYmplY3QpCiAg
ICAgICAgIHJldHVybiBFeHBlY3RPYmplY3RDb25zdHJ1Y3RvcjsKLSAgICBpZiAoaWRlbnRpZmll
ciA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPkFycmF5KQorICAgIGlmIChpZGVudGlm
aWVyID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPkFycmF5KQogICAgICAgICByZXR1cm4gRXhwZWN0
QXJyYXlDb25zdHJ1Y3RvcjsKICAgICByZXR1cm4gTm9FeHBlY3RlZEZ1bmN0aW9uOwogfQpAQCAt
MjM2Nyw3ICsyMzY3LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcFRyeUFu
ZAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQogewogICAgIGVtaXRPcGNvZGUob3BfdGhyb3dfc3RhdGljX2Vycm9y
KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnRWYWx1ZShqc1N0cmluZyhn
bG9iYWxEYXRhKCksIG1lc3NhZ2UpKS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGFkZENvbnN0YW50VmFsdWUoanNTdHJpbmcodm0oKSwgbWVzc2FnZSkpLT5pbmRleCgpKTsK
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodHJ1ZSk7CiB9CiAKQEAgLTI1MjUsNyArMjUyNSw3
IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZWFkT25seUV4Y2UKICAgICBpZiAoIWlz
U3RyaWN0TW9kZSgpKQogICAgICAgICByZXR1cm47CiAgICAgZW1pdE9wY29kZShvcF90aHJvd19z
dGF0aWNfZXJyb3IpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudFZhbHVl
KGpzU3RyaW5nKGdsb2JhbERhdGEoKSwgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVy
cm9yKSktPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudFZh
bHVlKGpzU3RyaW5nKHZtKCksIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcikp
LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZmFsc2UpOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0NCwx
NCArMjQ0LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0eXBlZGVmIERlY2xhcmF0aW9u
U3RhY2tzOjpWYXJTdGFjayBWYXJTdGFjazsKICAgICAgICAgdHlwZWRlZiBEZWNsYXJhdGlvblN0
YWNrczo6RnVuY3Rpb25TdGFjayBGdW5jdGlvblN0YWNrOwogCi0gICAgICAgIEJ5dGVjb2RlR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSYsIEpTU2NvcGUqLCBQcm9ncmFtTm9kZSosIFVubGlua2VkUHJv
Z3JhbUNvZGVCbG9jayosIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlKTsKLSAgICAgICAgQnl0
ZWNvZGVHZW5lcmF0b3IoSlNHbG9iYWxEYXRhJiwgSlNTY29wZSosIEZ1bmN0aW9uQm9keU5vZGUq
LCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiwgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUp
OwotICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihKU0dsb2JhbERhdGEmLCBKU1Njb3BlKiwgRXZh
bE5vZGUqLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9k
ZSk7CisgICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKFZNJiwgSlNTY29wZSosIFByb2dyYW1Ob2Rl
KiwgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiwgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUp
OworICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihWTSYsIEpTU2NvcGUqLCBGdW5jdGlvbkJvZHlO
b2RlKiwgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayosIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJN
b2RlKTsKKyAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoVk0mLCBKU1Njb3BlKiwgRXZhbE5vZGUq
LCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSk7CiAK
ICAgICAgICAgfkJ5dGVjb2RlR2VuZXJhdG9yKCk7CiAgICAgICAgIAotICAgICAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbERhdGE7IH0KLSAgICAg
ICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVy
biAqbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzOyB9CisgICAgICAgIFZNKiB2bSgpIGNvbnN0
IHsgcmV0dXJuIG1fdm07IH0KKyAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3Bl
cnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiAqbV92bS0+cHJvcGVydHlOYW1lczsgfQogCiAgICAg
ICAgIGJvb2wgaXNDb25zdHJ1Y3RvcigpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0cnVj
dG9yKCk7IH0KIApAQCAtNjQzLDcgKzY0Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAK
ICAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIG1ha2VGdW5jdGlvbihGdW5jdGlv
bkJvZHlOb2RlKiBib2R5KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZShtX2dsb2JhbERhdGEsIG1fc2NvcGVOb2RlLT5zb3Vy
Y2UoKSwgYm9keSk7CisgICAgICAgICAgICByZXR1cm4gVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGU6OmNyZWF0ZShtX3ZtLCBtX3Njb3BlTm9kZS0+c291cmNlKCksIGJvZHkpOwogICAgICAgICB9
CiAKICAgICAgICAgSlNTdHJpbmcqIGFkZFN0cmluZ0NvbnN0YW50KGNvbnN0IElkZW50aWZpZXIm
KTsKQEAgLTgxOSw3ICs4MTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBTdGF0aWNQ
cm9wZXJ0eUFuYWx5emVyIG1fc3RhdGljUHJvcGVydHlBbmFseXplcjsKIAotICAgICAgICBKU0ds
b2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKKyAgICAgICAgVk0qIG1fdm07CiAKICAgICAgICAgT3Bj
b2RlSUQgbV9sYXN0T3Bjb2RlSUQ7CiAjaWZuZGVmIE5ERUJVRwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNp
b24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0Nv
ZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgUmVnaXN0ZXJJRCog
UmVnRXhwTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dAogewogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9y
Lmlnbm9yZWRSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0TmV3UmVnRXhwKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIFJlZ0V4cDo6
Y3JlYXRlKCpnZW5lcmF0b3IuZ2xvYmFsRGF0YSgpLCBtX3BhdHRlcm4uc3RyaW5nKCksIHJlZ0V4
cEZsYWdzKG1fZmxhZ3Muc3RyaW5nKCkpKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TmV3
UmVnRXhwKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIFJlZ0V4cDo6Y3JlYXRlKCpn
ZW5lcmF0b3Iudm0oKSwgbV9wYXR0ZXJuLnN0cmluZygpLCByZWdFeHBGbGFncyhtX2ZsYWdzLnN0
cmluZygpKSkpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhpc05v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjEwLDcgKzIxMCw3
IEBAIGJvb2wgQXJyYXlOb2RlOjppc1NpbXBsZUFycmF5KCkgY29uc3QKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotQXJndW1lbnRMaXN0Tm9kZSogQXJyYXlOb2RlOjp0b0FyZ3VtZW50TGlzdChKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVyLCBpbnQgY2hhclBvc2l0aW9uKSBj
b25zdAorQXJndW1lbnRMaXN0Tm9kZSogQXJyYXlOb2RlOjp0b0FyZ3VtZW50TGlzdChWTSogdm0s
IGludCBsaW5lTnVtYmVyLCBpbnQgY2hhclBvc2l0aW9uKSBjb25zdAogewogICAgIEFTU0VSVCgh
bV9lbGlzaW9uICYmICFtX29wdGlvbmFsKTsKICAgICBFbGVtZW50Tm9kZSogcHRyID0gbV9lbGVt
ZW50OwpAQCAtMjE5LDEyICsyMTksMTIgQEAgQXJndW1lbnRMaXN0Tm9kZSogQXJyYXlOb2RlOjp0
b0FyZ3VtZW50TAogICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbjsKICAgICBsb2NhdGlvbi5s
aW5lID0gbGluZU51bWJlcjsKICAgICBsb2NhdGlvbi5jaGFyUG9zaXRpb24gPSBjaGFyUG9zaXRp
b247Ci0gICAgQXJndW1lbnRMaXN0Tm9kZSogaGVhZCA9IG5ldyAoZ2xvYmFsRGF0YSkgQXJndW1l
bnRMaXN0Tm9kZShsb2NhdGlvbiwgcHRyLT52YWx1ZSgpKTsKKyAgICBBcmd1bWVudExpc3ROb2Rl
KiBoZWFkID0gbmV3ICh2bSkgQXJndW1lbnRMaXN0Tm9kZShsb2NhdGlvbiwgcHRyLT52YWx1ZSgp
KTsKICAgICBBcmd1bWVudExpc3ROb2RlKiB0YWlsID0gaGVhZDsKICAgICBwdHIgPSBwdHItPm5l
eHQoKTsKICAgICBmb3IgKDsgcHRyOyBwdHIgPSBwdHItPm5leHQoKSkgewogICAgICAgICBBU1NF
UlQoIXB0ci0+ZWxpc2lvbigpKTsKLSAgICAgICAgdGFpbCA9IG5ldyAoZ2xvYmFsRGF0YSkgQXJn
dW1lbnRMaXN0Tm9kZShsb2NhdGlvbiwgdGFpbCwgcHRyLT52YWx1ZSgpKTsKKyAgICAgICAgdGFp
bCA9IG5ldyAodm0pIEFyZ3VtZW50TGlzdE5vZGUobG9jYXRpb24sIHRhaWwsIHB0ci0+dmFsdWUo
KSk7CiAgICAgfQogICAgIHJldHVybiBoZWFkOwogfQpAQCAtNTU2LDcgKzU1Niw3IEBAIFJlZ2lz
dGVySUQqIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW0KICAgICAgICAgICAgICAgICBpZiAo
bV9hcmdzLT5tX2xpc3ROb2RlLT5tX25leHQpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KG1fYXJncy0+bV9saXN0Tm9kZS0+bV9uZXh0LT5tX2V4cHItPmlzU2ltcGxlQXJyYXkoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbV9hcmdzLT5tX2xpc3ROb2RlLT5tX25leHQtPm1f
bmV4dCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fYXJncy0+bV9saXN0Tm9kZSA9IHN0YXRpY19j
YXN0PEFycmF5Tm9kZSo+KG1fYXJncy0+bV9saXN0Tm9kZS0+bV9uZXh0LT5tX2V4cHIpLT50b0Fy
Z3VtZW50TGlzdChnZW5lcmF0b3IuZ2xvYmFsRGF0YSgpLCAwLCAwKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9hcmdzLT5tX2xpc3ROb2RlID0gc3RhdGljX2Nhc3Q8QXJyYXlOb2RlKj4obV9hcmdz
LT5tX2xpc3ROb2RlLT5tX25leHQtPm1fZXhwciktPnRvQXJndW1lbnRMaXN0KGdlbmVyYXRvci52
bSgpLCAwLCAwKTsKICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlYWxG
dW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRz
dCksIGJhc2UuZ2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBDYWxsQXJndW1lbnRzIGNhbGxB
cmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICAgICAgICAgICAgICBnZW5lcmF0
b3IuZW1pdE5vZGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgb2xkTGlzdC0+bV9leHBy
KTsKQEAgLTExMzAsNyArMTEzMCw3IEBAIFJlZ2lzdGVySUQqIEluc3RhbmNlT2ZOb2RlOjplbWl0
Qnl0ZWNvZGUKICAgICBnZW5lcmF0b3IuZW1pdENoZWNrSGFzSW5zdGFuY2UoZHN0UmVnLmdldCgp
LCBzcmMxLmdldCgpLCBzcmMyLmdldCgpLCB0YXJnZXQuZ2V0KCkpOwogCiAgICAgZ2VuZXJhdG9y
LmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7
Ci0gICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKHByb3RvdHlwZS5nZXQoKSwgc3JjMi5nZXQoKSwg
Z2VuZXJhdG9yLmdsb2JhbERhdGEoKS0+cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKTsKKyAgICBn
ZW5lcmF0b3IuZW1pdEdldEJ5SWQocHJvdG90eXBlLmdldCgpLCBzcmMyLmdldCgpLCBnZW5lcmF0
b3Iudm0oKS0+cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKTsKIAogICAgIGdlbmVyYXRvci5lbWl0
RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAg
IFJlZ2lzdGVySUQqIHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0SW5zdGFuY2VPZihkc3RSZWcuZ2V0
KCksIHNyYzEuZ2V0KCksIHByb3RvdHlwZS5nZXQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExMSwzNCArMTExLDM0IEBAIHZvaWQgRGVidWdnZXI6OmRldGFjaChKU0dsb2JhbE9iamVjdCog
Z2wKICAgICBnbG9iYWxPYmplY3QtPnNldERlYnVnZ2VyKDApOwogfQogCi12b2lkIERlYnVnZ2Vy
OjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCit2b2lk
IERlYnVnZ2VyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhWTSogdm0pCiB7CiAgICAgLy8gSWYg
SmF2YVNjcmlwdCBpcyBydW5uaW5nLCBpdCdzIG5vdCBzYWZlIHRvIHJlY29tcGlsZSwgc2luY2Ug
d2UnbGwgZW5kCiAgICAgLy8gdXAgdGhyb3dpbmcgYXdheSBjb2RlIHRoYXQgaXMgbGl2ZSBvbiB0
aGUgc3RhY2suCi0gICAgQVNTRVJUKCFnbG9iYWxEYXRhLT5keW5hbWljR2xvYmFsT2JqZWN0KTsK
LSAgICBpZiAoZ2xvYmFsRGF0YS0+ZHluYW1pY0dsb2JhbE9iamVjdCkKKyAgICBBU1NFUlQoIXZt
LT5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAodm0tPmR5bmFtaWNHbG9iYWxPYmplY3Qp
CiAgICAgICAgIHJldHVybjsKIAogICAgIFJlY29tcGlsZXIgcmVjb21waWxlcih0aGlzKTsKLSAg
ICBnbG9iYWxEYXRhLT5oZWFwLm9iamVjdFNwYWNlKCkuZm9yRWFjaExpdmVDZWxsKHJlY29tcGls
ZXIpOworICAgIHZtLT5oZWFwLm9iamVjdFNwYWNlKCkuZm9yRWFjaExpdmVDZWxsKHJlY29tcGls
ZXIpOwogfQogCiBKU1ZhbHVlIGV2YWx1YXRlSW5HbG9iYWxDYWxsRnJhbWUoY29uc3QgU3RyaW5n
JiBzY3JpcHQsIEpTVmFsdWUmIGV4Y2VwdGlvbiwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKIHsKICAgICBDYWxsRnJhbWUqIGdsb2JhbENhbGxGcmFtZSA9IGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpOwotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGdsb2JhbE9iamVjdC0+
Z2xvYmFsRGF0YSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKIAogICAgIEV2
YWxFeGVjdXRhYmxlKiBldmFsID0gRXZhbEV4ZWN1dGFibGU6OmNyZWF0ZShnbG9iYWxDYWxsRnJh
bWUsIG1ha2VTb3VyY2Uoc2NyaXB0KSwgZmFsc2UpOwogICAgIGlmICghZXZhbCkgewotICAgICAg
ICBleGNlcHRpb24gPSBnbG9iYWxEYXRhLmV4Y2VwdGlvbjsKLSAgICAgICAgZ2xvYmFsRGF0YS5l
eGNlcHRpb24gPSBKU1ZhbHVlKCk7CisgICAgICAgIGV4Y2VwdGlvbiA9IHZtLmV4Y2VwdGlvbjsK
KyAgICAgICAgdm0uZXhjZXB0aW9uID0gSlNWYWx1ZSgpOwogICAgICAgICByZXR1cm4gZXhjZXB0
aW9uOwogICAgIH0KIAotICAgIEpTVmFsdWUgcmVzdWx0ID0gZ2xvYmFsRGF0YS5pbnRlcnByZXRl
ci0+ZXhlY3V0ZShldmFsLCBnbG9iYWxDYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgZ2xvYmFsQ2Fs
bEZyYW1lLT5zY29wZSgpKTsKLSAgICBpZiAoZ2xvYmFsRGF0YS5leGNlcHRpb24pIHsKLSAgICAg
ICAgZXhjZXB0aW9uID0gZ2xvYmFsRGF0YS5leGNlcHRpb247Ci0gICAgICAgIGdsb2JhbERhdGEu
ZXhjZXB0aW9uID0gSlNWYWx1ZSgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdm0uaW50ZXJwcmV0
ZXItPmV4ZWN1dGUoZXZhbCwgZ2xvYmFsQ2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIGdsb2JhbENh
bGxGcmFtZS0+c2NvcGUoKSk7CisgICAgaWYgKHZtLmV4Y2VwdGlvbikgeworICAgICAgICBleGNl
cHRpb24gPSB2bS5leGNlcHRpb247CisgICAgICAgIHZtLmV4Y2VwdGlvbiA9IEpTVmFsdWUoKTsK
ICAgICB9CiAgICAgQVNTRVJUKHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCShyZXZpc2lvbiAxNDg2Mzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNyArMjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIERlYnVn
Z2VyQ2FsbEZyYW1lOwogICAgIGNsYXNzIEV4ZWNTdGF0ZTsKLSAgICBjbGFzcyBKU0dsb2JhbERh
dGE7CisgICAgY2xhc3MgVk07CiAgICAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiAgICAgY2xhc3Mg
SlNWYWx1ZTsKICAgICBjbGFzcyBTb3VyY2VQcm92aWRlcjsKQEAgLTUyLDcgKzUyLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFjaEJyZWFrcG9pbnQoY29u
c3QgRGVidWdnZXJDYWxsRnJhbWUmLCBpbnRwdHJfdCwgaW50LCBpbnQpID0gMDsKIAogCi0gICAg
ICAgIHZvaWQgcmVjb21waWxlQWxsSlNGdW5jdGlvbnMoSlNHbG9iYWxEYXRhKik7CisgICAgICAg
IHZvaWQgcmVjb21waWxlQWxsSlNGdW5jdGlvbnMoVk0qKTsKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIEhhc2hTZXQ8SlNHbG9iYWxPYmplY3QqPiBtX2dsb2JhbE9iamVjdHM7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9u
LmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2Vy
L0RlYnVnZ2VyQWN0aXZhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE3ICszNSwxNyBA
QCBBU1NFUlRfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUihEZWJ1Z2dlckFjCiAKIGNvbnN0IENsYXNz
SW5mbyBEZWJ1Z2dlckFjdGl2YXRpb246OnNfaW5mbyA9IHsgIkRlYnVnZ2VyQWN0aXZhdGlvbiIs
ICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoRGVidWdnZXJBY3RpdmF0
aW9uKSB9OwogCi1EZWJ1Z2dlckFjdGl2YXRpb246OkRlYnVnZ2VyQWN0aXZhdGlvbihKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCi0gICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIGds
b2JhbERhdGEuZGVidWdnZXJBY3RpdmF0aW9uU3RydWN0dXJlLmdldCgpKQorRGVidWdnZXJBY3Rp
dmF0aW9uOjpEZWJ1Z2dlckFjdGl2YXRpb24oVk0mIHZtKQorICAgIDogSlNOb25GaW5hbE9iamVj
dCh2bSwgdm0uZGVidWdnZXJBY3RpdmF0aW9uU3RydWN0dXJlLmdldCgpKQogewogfQogCi12b2lk
IERlYnVnZ2VyQWN0aXZhdGlvbjo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU09iamVjdCogYWN0aXZhdGlvbikKK3ZvaWQgRGVidWdnZXJBY3RpdmF0aW9uOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIEpTT2JqZWN0KiBhY3RpdmF0aW9uKQogewotICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
ICAgICBBU1NFUlQoYWN0aXZhdGlvbik7CiAgICAgQVNTRVJUKGFjdGl2YXRpb24tPmlzQWN0aXZh
dGlvbk9iamVjdCgpKTsKLSAgICBtX2FjdGl2YXRpb24uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGpz
Q2FzdDxKU0FjdGl2YXRpb24qPihhY3RpdmF0aW9uKSk7CisgICAgbV9hY3RpdmF0aW9uLnNldCh2
bSwgdGhpcywganNDYXN0PEpTQWN0aXZhdGlvbio+KGFjdGl2YXRpb24pKTsKIH0KIAogdm9pZCBE
ZWJ1Z2dlckFjdGl2YXRpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dl
ckFjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdn
ZXIvRGVidWdnZXJBY3RpdmF0aW9uLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsMTAgKzM0LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAg
dHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKLSAgICAgICAgc3RhdGljIERlYnVnZ2Vy
QWN0aXZhdGlvbiogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNPYmplY3QqIG9i
amVjdCkKKyAgICAgICAgc3RhdGljIERlYnVnZ2VyQWN0aXZhdGlvbiogY3JlYXRlKFZNJiB2bSwg
SlNPYmplY3QqIG9iamVjdCkKICAgICAgICAgewotICAgICAgICAgICAgRGVidWdnZXJBY3RpdmF0
aW9uKiBhY3RpdmF0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RGVidWdnZXJBY3Rp
dmF0aW9uPihnbG9iYWxEYXRhLmhlYXApKSBEZWJ1Z2dlckFjdGl2YXRpb24oZ2xvYmFsRGF0YSk7
Ci0gICAgICAgICAgICBhY3RpdmF0aW9uLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBvYmpl
Y3QpOworICAgICAgICAgICAgRGVidWdnZXJBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8RGVidWdnZXJBY3RpdmF0aW9uPih2bS5oZWFwKSkgRGVidWdn
ZXJBY3RpdmF0aW9uKHZtKTsKKyAgICAgICAgICAgIGFjdGl2YXRpb24tPmZpbmlzaENyZWF0aW9u
KHZtLCBvYmplY3QpOwogICAgICAgICAgICAgcmV0dXJuIGFjdGl2YXRpb247CiAgICAgICAgIH0K
IApAQCAtNTMsMTggKzUzLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTX0VYUE9S
VERBVEEgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICAgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpIAorICAgICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCisgICAg
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAKICAg
ICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNW
aXNpdENoaWxkcmVuIHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwogCi0gICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiwgSlNPYmplY3Qq
IGFjdGl2YXRpb24pOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgSlNPYmplY3QqIGFjdGl2YXRpb24pOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgRGVidWdnZXJBY3RpdmF0aW9uKEpTR2xvYmFsRGF0YSYpOworICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBEZWJ1Z2dlckFjdGl2YXRpb24oVk0mKTsKICAgICAgICAg
V3JpdGVCYXJyaWVyPEpTQWN0aXZhdGlvbj4gbV9hY3RpdmF0aW9uOwogICAgIH07CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZy
YW1lLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVn
Z2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsMTcgKzkwLDE3
IEBAIEpTVmFsdWUgRGVidWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlKGNvbnMKICAgICBpZiAoIW1f
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAK
LSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBtX2NhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
OworICAgIFZNJiB2bSA9IG1fY2FsbEZyYW1lLT52bSgpOwogICAgIEV2YWxFeGVjdXRhYmxlKiBl
dmFsID0gRXZhbEV4ZWN1dGFibGU6OmNyZWF0ZShtX2NhbGxGcmFtZSwgbWFrZVNvdXJjZShzY3Jp
cHQpLCBtX2NhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKLSAgICBpZiAo
Z2xvYmFsRGF0YS5leGNlcHRpb24pIHsKLSAgICAgICAgZXhjZXB0aW9uID0gZ2xvYmFsRGF0YS5l
eGNlcHRpb247Ci0gICAgICAgIGdsb2JhbERhdGEuZXhjZXB0aW9uID0gSlNWYWx1ZSgpOworICAg
IGlmICh2bS5leGNlcHRpb24pIHsKKyAgICAgICAgZXhjZXB0aW9uID0gdm0uZXhjZXB0aW9uOwor
ICAgICAgICB2bS5leGNlcHRpb24gPSBKU1ZhbHVlKCk7CiAgICAgfQogCi0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSBnbG9iYWxEYXRhLmludGVycHJldGVyLT5leGVjdXRlKGV2YWwsIG1fY2FsbEZyYW1l
LCB0aGlzT2JqZWN0KCksIG1fY2FsbEZyYW1lLT5zY29wZSgpKTsKLSAgICBpZiAoZ2xvYmFsRGF0
YS5leGNlcHRpb24pIHsKLSAgICAgICAgZXhjZXB0aW9uID0gZ2xvYmFsRGF0YS5leGNlcHRpb247
Ci0gICAgICAgIGdsb2JhbERhdGEuZXhjZXB0aW9uID0gSlNWYWx1ZSgpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0gdm0uaW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgbV9jYWxsRnJhbWUsIHRoaXNP
YmplY3QoKSwgbV9jYWxsRnJhbWUtPnNjb3BlKCkpOworICAgIGlmICh2bS5leGNlcHRpb24pIHsK
KyAgICAgICAgZXhjZXB0aW9uID0gdm0uZXhjZXB0aW9uOworICAgICAgICB2bS5leGNlcHRpb24g
PSBKU1ZhbHVlKCk7CiAgICAgfQogICAgIEFTU0VSVChyZXN1bHQpOwogICAgIHJldHVybiByZXN1
bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3Niw3ICs0NzYsNyBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgfQogICAgICAgICAKICAg
ICBjYXNlIE1ha2VSb3BlOiB7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgubV9n
bG9iYWxEYXRhLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KG1fZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgICAgICAKQEAgLTcyMyw0MSArNzIzLDQxIEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICB9CiAKICAgICBjYXNlIFR5cGVPZjogewot
ICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBtX2NvZGVCbG9jay0+Z2xvYmFsRGF0
YSgpOworICAgICAgICBWTSogdm0gPSBtX2NvZGVCbG9jay0+dm0oKTsKICAgICAgICAgSlNWYWx1
ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIEFic3Ry
YWN0VmFsdWUmIGFic3RyYWN0Q2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAg
ICAgaWYgKGNoaWxkKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHR5cGVTdHJpbmcgPSBqc1R5cGVT
dHJpbmdGb3JWYWx1ZSgqZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihu
b2RlLT5jb2RlT3JpZ2luKSwgY2hpbGQpOworICAgICAgICAgICAgSlNWYWx1ZSB0eXBlU3RyaW5n
ID0ganNUeXBlU3RyaW5nRm9yVmFsdWUoKnZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPmNvZGVPcmlnaW4pLCBjaGlsZCk7CiAgICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3Rh
bnQobm9kZSwgdHlwZVN0cmluZykpIHsKICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRz
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
fSBlbHNlIGlmIChpc051bWJlclNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSkgewot
ICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGUsIGdsb2JhbERhdGEtPnNtYWxsU3Ry
aW5ncy5udW1iZXJTdHJpbmcoKSkpIHsKKyAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChu
b2RlLCB2bS0+c21hbGxTdHJpbmdzLm51bWJlclN0cmluZygpKSkgewogICAgICAgICAgICAgICAg
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAg
ICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGFic3Ry
YWN0Q2hpbGQubV90eXBlKSkgewotICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGUs
IGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zdHJpbmdTdHJpbmcoKSkpIHsKKyAgICAgICAgICAg
IGlmICh0cnlTZXRDb25zdGFudChub2RlLCB2bS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygp
KSkgewogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVj
U3RyaW5nKTsKICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpc0Zp
bmFsT2JqZWN0U3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpIHx8IGlzQXJyYXlTcGVj
dWxhdGlvbihhYnN0cmFjdENoaWxkLm1fdHlwZSkgfHwgaXNBcmd1bWVudHNTcGVjdWxhdGlvbihh
YnN0cmFjdENoaWxkLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChu
b2RlLCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCkpKSB7CisgICAgICAg
ICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgdm0tPnNtYWxsU3RyaW5ncy5vYmplY3RTdHJp
bmcoKSkpIHsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIo
U3BlY0ZpbmFsT2JqZWN0IHwgU3BlY0FycmF5IHwgU3BlY0FyZ3VtZW50cyk7CiAgICAgICAgICAg
ICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvblNwZWN1bGF0aW9uKGFi
c3RyYWN0Q2hpbGQubV90eXBlKSkgewotICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5v
ZGUsIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5mdW5jdGlvblN0cmluZygpKSkgeworICAgICAg
ICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGUsIHZtLT5zbWFsbFN0cmluZ3MuZnVuY3Rpb25T
dHJpbmcoKSkpIHsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0
ZXIoU3BlY0Z1bmN0aW9uKTsKICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl
IGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1fdHlwZSkpIHsKLSAgICAg
ICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Mu
Ym9vbGVhblN0cmluZygpKSkgeworICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGUs
IHZtLT5zbWFsbFN0cmluZ3MuYm9vbGVhblN0cmluZygpKSkgewogICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQm9vbGVhbik7CiAgICAgICAgICAgICAg
ICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC03
NzUsNyArNzc1LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZwog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgubV9nbG9i
YWxEYXRhLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KG1fZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgICAgICAKQEAgLTg2Nyw3ICs4NjcsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAKICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFw
aC5tX2dsb2JhbERhdGEuc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQobV9ncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRCeVZhbDogewpAQCAtODg2LDcgKzg4Niw3
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgICAg
IGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OlN0cmluZzoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgu
bV9nbG9iYWxEYXRhLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChtX2dyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKQEAgLTEwNTIsNyArMTA1Miw3IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgLy8gaWYgKGRlc3RpbmF0aW9u
Lm1fdHlwZSAmICEoU3BlY051bWJlciB8IFNwZWNTdHJpbmcgfCBTcGVjQm9vbGVhbikpIHsKICAg
ICAgICAgLy8gICAgIGRlc3RpbmF0aW9uLmZpbHRlcihTcGVjTnVtYmVyIHwgU3BlY1N0cmluZyB8
IFNwZWNCb29sZWFuKTsKICAgICAgICAgLy8gICAgIEFic3RyYWN0VmFsdWUgc3RyaW5nOwotICAg
ICAgICAvLyAgICAgc3RyaW5nLnNldChnbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUpOworICAg
ICAgICAvLyAgICAgc3RyaW5nLnNldCh2bS0+c3RyaW5nU3RydWN0dXJlKTsKICAgICAgICAgLy8g
ICAgIGRlc3RpbmF0aW9uLm1lcmdlKHN0cmluZyk7CiAgICAgICAgIC8vIH0KICAgICAgICAgLy8K
QEAgLTEwOTcsNyArMTA5Nyw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHMo
dW5zaWcKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBo
Lm1fZ2xvYmFsRGF0YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChtX2dyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgICAgICAKQEAgLTEyNzAsNyArMTI3MCw3IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9u
KG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKSB7CiAgICAgICAgICAgICBpZiAoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0
dXJlKCkpIHsKICAgICAgICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9nbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV92bSwgc3RydWN0
dXJlLAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSkpOwogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMu
aXNTaW1wbGUoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBBc3NlcnQgdGhpbmdzIHRoYXQg
d2UgY2FuJ3QgaGFuZGxlIGFuZCB0aGF0IHRoZSBjb21wdXRlRm9yKCkgbWV0aG9kCkBAIC0xNDcw
LDcgKzE0NzAsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkg
ewogICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yKAotICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9nbG9iYWxEYXRhLAorICAgICAgICAg
ICAgICAgIG1fZ3JhcGgubV92bSwKICAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5jb2RlT3JpZ2luKSwKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsCiAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5tX2NvZGVCbG9jay0+aWRlbnRpZmllcihub2RlLT5pZGVudGlm
aWVyTnVtYmVyKCkpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJs
eUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fz
c2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3
IEBACiAjaW5jbHVkZSAiREZHRlBSSW5mby5oIgogI2luY2x1ZGUgIkRGR0dQUkluZm8uaCIKICNp
bmNsdWRlICJERkdOb2RlLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAi
Vk0uaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CkBAIC00Myw4ICs0Myw4IEBAIHR5cGVkZWYgdm9pZCAoKlZfREZHRGVidWdP
cGVyYXRpb25fRVBQKSgKIAogY2xhc3MgQXNzZW1ibHlIZWxwZXJzIDogcHVibGljIE1hY3JvQXNz
ZW1ibGVyIHsKIHB1YmxpYzoKLSAgICBBc3NlbWJseUhlbHBlcnMoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKLSAgICAgICAgOiBtX2dsb2JhbERhdGEoZ2xv
YmFsRGF0YSkKKyAgICBBc3NlbWJseUhlbHBlcnMoVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aykKKyAgICAgICAgOiBtX3ZtKHZtKQogICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykK
ICAgICAgICAgLCBtX2Jhc2VsaW5lQ29kZUJsb2NrKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+YmFz
ZWxpbmVWZXJzaW9uKCkgOiAwKQogICAgIHsKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAg
IH0KICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2Nr
OyB9Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKCkgeyByZXR1cm4gbV9nbG9iYWxEYXRh
OyB9CisgICAgVk0qIHZtKCkgeyByZXR1cm4gbV92bTsgfQogICAgIEFzc2VtYmxlclR5cGVfVCYg
YXNzZW1ibGVyKCkgeyByZXR1cm4gbV9hc3NlbWJsZXI7IH0KICAgICAKICNpZiBDUFUoWDg2XzY0
KSB8fCBDUFUoWDg2KQpAQCAtMTkwLDcgKzE5MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlYnVn
Q2FsbChWX0RGR0RlYnVnT3BlcmF0aW9uX0VQUCBmdW5jdGlvbiwgdm9pZCogYXJndW1lbnQpCiAg
ICAgewogICAgICAgICBzaXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
ICogKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnMpOwotICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbV9nbG9iYWxEYXRh
LT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7CisgICAgICAgIFNjcmF0Y2hCdWZm
ZXIqIHNjcmF0Y2hCdWZmZXIgPSBtX3ZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6
ZSk7CiAgICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVk
SlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSk7CiAKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKQEAg
LTI5Miw5ICsyOTIsOSBAQCBwdWJsaWM6CiAgICAgSnVtcCBlbWl0RXhjZXB0aW9uQ2hlY2soRXhj
ZXB0aW9uQ2hlY2tLaW5kIGtpbmQgPSBOb3JtYWxFeGNlcHRpb25DaGVjaykKICAgICB7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChraW5kID09IE5vcm1h
bEV4Y2VwdGlvbkNoZWNrID8gTm9uWmVybyA6IFplcm8sIEFic29sdXRlQWRkcmVzcygmZ2xvYmFs
RGF0YSgpLT5leGNlcHRpb24pKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChraW5kID09
IE5vcm1hbEV4Y2VwdGlvbkNoZWNrID8gTm9uWmVybyA6IFplcm8sIEFic29sdXRlQWRkcmVzcygm
dm0oKS0+ZXhjZXB0aW9uKSk7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICByZXR1
cm4gYnJhbmNoMzIoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vdEVxdWFsIDogRXF1
YWwsIEFic29sdXRlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNoYXIqPigmZ2xvYmFsRGF0YSgp
LT5leGNlcHRpb24pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOworICAgICAgICByZXR1cm4gYnJh
bmNoMzIoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vdEVxdWFsIDogRXF1YWwsIEFi
c29sdXRlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNoYXIqPigmdm0oKS0+ZXhjZXB0aW9uKSAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKICNlbmRpZgogICAgIH0KIApAQCAtMzgxLDcgKzM4MSw3
IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2Rl
ZENvZGVNYXBGb3IoQ29kZUJsb2NrKik7CiAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAgSlNHbG9iYWxE
YXRhKiBtX2dsb2JhbERhdGE7CisgICAgVk0qIG1fdm07CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVC
bG9jazsKICAgICBDb2RlQmxvY2sqIG1fYmFzZWxpbmVDb2RlQmxvY2s7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lv
biAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDcgKzEyMiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIGNsYXNzIEJ5dGVDb2RlUGFyc2VyIHsKIHB1YmxpYzoKICAgICBCeXRl
Q29kZVBhcnNlcihHcmFwaCYgZ3JhcGgpCi0gICAgICAgIDogbV9nbG9iYWxEYXRhKCZncmFwaC5t
X2dsb2JhbERhdGEpCisgICAgICAgIDogbV92bSgmZ3JhcGgubV92bSkKICAgICAgICAgLCBtX2Nv
ZGVCbG9jayhncmFwaC5tX2NvZGVCbG9jaykKICAgICAgICAgLCBtX3Byb2ZpbGVkQmxvY2soZ3Jh
cGgubV9wcm9maWxlZEJsb2NrKQogICAgICAgICAsIG1fZ3JhcGgoZ3JhcGgpCkBAIC05NDIsNyAr
OTQyLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGJ1aWxkT3BlcmFuZE1hcHNJZk5lY2Vz
c2FyeSgpOwogICAgIAotICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworICAgIFZNKiBt
X3ZtOwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgQ29kZUJsb2NrKiBtX3Byb2Zp
bGVkQmxvY2s7CiAgICAgR3JhcGgmIG1fZ3JhcGg7CkBAIC0xNjM1LDcgKzE2MzUsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgICAgIE5vZGUqIHJlc3Vs
dDsKICAgICAgICAgCiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8PSAx
KQotICAgICAgICAgICAgcmVzdWx0ID0gY2VsbENvbnN0YW50KG1fZ2xvYmFsRGF0YS0+c21hbGxT
dHJpbmdzLmVtcHR5U3RyaW5nKCkpOworICAgICAgICAgICAgcmVzdWx0ID0gY2VsbENvbnN0YW50
KG1fdm0tPnNtYWxsU3RyaW5ncy5lbXB0eVN0cmluZygpKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgcmVzdWx0ID0gYWRkVG9HcmFwaChUb1N0cmluZywgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsg
YXJndW1lbnRUb09wZXJhbmQoMSkpKTsKICAgICAgICAgCkBAIC0xOTI0LDcgKzE5MjQsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiB7CiAgICAgYm9vbCBzaG91
bGRDb250aW51ZVBhcnNpbmcgPSB0cnVlOwogCi0gICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVy
ID0gbV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlcjsKKyAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0
ZXIgPSBtX3ZtLT5pbnRlcnByZXRlcjsKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVn
aW4gPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4o
KTsKICAgICB1bnNpZ25lZCBibG9ja0JlZ2luID0gbV9jdXJyZW50SW5kZXg7CiAgICAgCkBAIC0x
OTc0LDcgKzE5NzQsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgIAogICAgICAgICBpZiAobV9ncmFwaC5tX2NvbXBpbGF0aW9uICYmIG9wY29kZUlE
ICE9IG9wX2NhbGxfcHV0X3Jlc3VsdCkgewogICAgICAgICAgICAgYWRkVG9HcmFwaChDb3VudEV4
ZWN1dGlvbiwgT3BJbmZvKG1fZ3JhcGgubV9jb21waWxhdGlvbi0+ZXhlY3V0aW9uQ291bnRlckZv
cigKLSAgICAgICAgICAgICAgICBQcm9maWxlcjo6T3JpZ2luU3RhY2soKm1fZ2xvYmFsRGF0YS0+
bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jaywgY3VycmVudENvZGVPcmlnaW4oKSkp
KSk7CisgICAgICAgICAgICAgICAgUHJvZmlsZXI6Ok9yaWdpblN0YWNrKCptX3ZtLT5tX3BlckJ5
dGVjb2RlUHJvZmlsZXIsIG1fY29kZUJsb2NrLCBjdXJyZW50Q29kZU9yaWdpbigpKSkpKTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewpAQCAtMzQ3OSwx
MCArMzQ3OSwxMCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAg
ICAgICAgIEFTU0VSVChjYWxsc2l0ZUJsb2NrSGVhZCAhPSBOb0Jsb2NrKTsKICAgICAgICAgCiAg
ICAgICAgIElubGluZUNhbGxGcmFtZSBpbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIGlubGluZUNh
bGxGcmFtZS5leGVjdXRhYmxlLnNldCgqYnl0ZUNvZGVQYXJzZXItPm1fZ2xvYmFsRGF0YSwgYnl0
ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSk7CisgICAgICAgIGlubGluZUNhbGxGcmFtZS5leGVjdXRhYmxlLnNl
dCgqYnl0ZUNvZGVQYXJzZXItPm1fdm0sIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpOwogICAgICAgICBp
bmxpbmVDYWxsRnJhbWUuc3RhY2tPZmZzZXQgPSBpbmxpbmVDYWxsRnJhbWVTdGFydCArIEpTU3Rh
Y2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CiAgICAgICAgIGlmIChjYWxsZWUpCi0gICAgICAgICAg
ICBpbmxpbmVDYWxsRnJhbWUuY2FsbGVlLnNldCgqYnl0ZUNvZGVQYXJzZXItPm1fZ2xvYmFsRGF0
YSwgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVl
KTsKKyAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS5jYWxsZWUuc2V0KCpieXRlQ29kZVBhcnNl
ci0+bV92bSwgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
Y2FsbGVlKTsKICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLmNhbGxlciA9IGJ5dGVDb2RlUGFyc2Vy
LT5jdXJyZW50Q29kZU9yaWdpbigpOwogICAgICAgICBpbmxpbmVDYWxsRnJhbWUuYXJndW1lbnRz
LnJlc2l6ZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7IC8vIFNldCB0aGUgbnVtYmVyIG9m
IGFyZ3VtZW50cyBpbmNsdWRpbmcgdGhpcywgYnV0IGRvbid0IGNvbmZpZ3VyZSB0aGUgdmFsdWUg
cmVjb3ZlcmllcywgeWV0LgogICAgICAgICBpbmxpbmVDYWxsRnJhbWUuaXNDYWxsID0gaXNDYWxs
KGtpbmQpOwpAQCAtMzUyNCw3ICszNTI0LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNr
RW50cnk6OklubGluZQogICAgICAgICAgICAgU3RyaW5nSW1wbCogcmVwID0gY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGkpLmltcGwoKTsKICAgICAgICAgICAgIElkZW50aWZpZXJNYXA6OkFkZFJlc3Vs
dCByZXN1bHQgPSBieXRlQ29kZVBhcnNlci0+bV9pZGVudGlmaWVyTWFwLmFkZChyZXAsIGJ5dGVD
b2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygpKTsKICAgICAgICAg
ICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBieXRlQ29kZVBhcnNl
ci0+bV9jb2RlQmxvY2stPmFkZElkZW50aWZpZXIoSWRlbnRpZmllcihieXRlQ29kZVBhcnNlci0+
bV9nbG9iYWxEYXRhLCByZXApKTsKKyAgICAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9j
b2RlQmxvY2stPmFkZElkZW50aWZpZXIoSWRlbnRpZmllcihieXRlQ29kZVBhcnNlci0+bV92bSwg
cmVwKSk7CiAgICAgICAgICAgICBtX2lkZW50aWZpZXJSZW1hcFtpXSA9IHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWU7CiAgICAgICAgIH0KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2Rl
QmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKTsgKytpKSB7CkBAIC0zNTk0LDcgKzM1
OTQsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpCiAgICAgCiAgICAg
aWYgKG1fZ3JhcGgubV9jb21waWxhdGlvbikgewogICAgICAgICBtX2dyYXBoLm1fY29tcGlsYXRp
b24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKAotICAgICAgICAgICAgKm1fZ2xvYmFsRGF0YS0+bV9w
ZXJCeXRlY29kZVByb2ZpbGVyLCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2spOwor
ICAgICAgICAgICAgKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBzaG91bGREdW1wQnl0
ZWNvZGUgPSBPcHRpb25zOjpkdW1wQnl0ZWNvZGVBdERGR1RpbWUoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmgJKHJldmlzaW9uIDE0ODYz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENv
ZGVCbG9jazsKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwogCiBuYW1lc3BhY2UgREZH
IHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDQ2FsbEhlbHBlcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NDYWxsSGVscGVycy5o
CShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NDYWxs
SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNyw4IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgQ0NhbGxIZWxwZXJzIDogcHVibGljIEFzc2VtYmx5
SGVscGVycyB7CiBwdWJsaWM6Ci0gICAgQ0NhbGxIZWxwZXJzKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAwKQotICAgICAgICA6IEFzc2VtYmx5SGVscGVy
cyhnbG9iYWxEYXRhLCBjb2RlQmxvY2spCisgICAgQ0NhbGxIZWxwZXJzKFZNKiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSAwKQorICAgICAgICA6IEFzc2VtYmx5SGVscGVycyh2bSwgY29kZUJs
b2NrKQogICAgIHsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyAr
OTcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdGYWlsKENvZGVCbG9jayogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCBSZXR1cm5UeXBlICgqY2FuSGFuZGxlT3Bjb2RlKShPcGNv
ZGVJRCwgQ29kZUJsb2NrKiwgSW5zdHJ1Y3Rpb24qKT4KIFJldHVyblR5cGUgY2FuSGFuZGxlT3Bj
b2RlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgUmV0dXJuVHlwZSBpbml0aWFsVmFsdWUpCiB7Ci0g
ICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gY29kZUJsb2NrLT5nbG9iYWxEYXRhKCktPmlu
dGVycHJldGVyOworICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IGNvZGVCbG9jay0+dm0o
KS0+aW50ZXJwcmV0ZXI7CiAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwogICAgIHVuc2lnbmVkIGluc3RydWN0aW9u
Q291bnQgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKICAgICBSZXR1cm5UeXBl
IHJlc3VsdCA9IGluaXRpYWxWYWx1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNDg2Mzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDcgKzE1NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgYm9vbCBuZWVkc0NlbGxDaGVjayA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV90eXBl
ICYgflNwZWNDZWxsOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEdldEJ5SWRT
dGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAgICAg
ICAgICAgZ2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIGNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGlk
ZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgdm0oKSwgc3RydWN0dXJlLCBj
b2RlQmxvY2soKS0+aWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKSk7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgaWYgKCFzdGF0dXMuaXNTaW1wbGUoKSkgewogICAgICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgaGFuZGxlIHByb3RvdHlwZSBjYXNlcy4KQEAg
LTIyMCw3ICsyMjAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJvb2wgbmVlZHNDZWxs
Q2hlY2sgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fdHlwZSAmIH5TcGVjQ2VsbDsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1cyA9IFB1dEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgIGdsb2JhbERhdGEoKSwK
KyAgICAgICAgICAgICAgICAgICAgdm0oKSwKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbiksCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZSwKICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrKCktPmlkZW50aWZpZXIoaWRlbnRpZmll
ck51bWJlciksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3Nl
bWJsZXIuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Rpc2Fzc2VtYmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgdm9p
ZCBEaXNhc3NlbWJsZXI6OnJlcG9ydFRvUHJvZmlsZXIoUHJvZgogICAgICAgICBQcm9maWxlcjo6
T3JpZ2luU3RhY2sgc3RhY2s7CiAgICAgICAgIAogICAgICAgICBpZiAob3BzW2ldLmNvZGVPcmln
aW4uaXNTZXQoKSkKLSAgICAgICAgICAgIHN0YWNrID0gUHJvZmlsZXI6Ok9yaWdpblN0YWNrKCpt
X2dyYXBoLm1fZ2xvYmFsRGF0YS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fZ3JhcGgubV9jb2Rl
QmxvY2ssIG9wc1tpXS5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgIHN0YWNrID0gUHJvZmlsZXI6
Ok9yaWdpblN0YWNrKCptX2dyYXBoLm1fdm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX2dyYXBo
Lm1fY29kZUJsb2NrLCBvcHNbaV0uY29kZU9yaWdpbik7CiAgICAgICAgIAogICAgICAgICBjb21w
aWxhdGlvbi0+YWRkRGVzY3JpcHRpb24oUHJvZmlsZXI6OkNvbXBpbGVkQnl0ZWNvZGUoc3RhY2ss
IG9wc1tpXS50ZXh0KSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAgaW5saW5l
IGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTQogICAgICAgICAgICAgbXVzdEhhbmRs
ZVZhbHVlc1tpXSA9IGV4ZWMtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgpOwogICAgIH0K
ICAgICAKLSAgICBHcmFwaCBkZmcoZXhlYy0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2ssIG9zckVu
dHJ5Qnl0ZWNvZGVJbmRleCwgbXVzdEhhbmRsZVZhbHVlcyk7CisgICAgR3JhcGggZGZnKGV4ZWMt
PnZtKCksIGNvZGVCbG9jaywgb3NyRW50cnlCeXRlY29kZUluZGV4LCBtdXN0SGFuZGxlVmFsdWVz
KTsKICAgICBpZiAoIXBhcnNlKGV4ZWMsIGRmZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkocmV2aXNpb24gMTQ4
NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2Nr
OwogY2xhc3MgSklUQ29kZTsKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwogY2xhc3Mg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOwogCiBuYW1lc3BhY2UgREZHIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTQ4NjM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjc1LDcgKzY3NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBzZXRVc2VLaW5k
QW5kVW5ib3hJZlByb2ZpdGFibGU8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAg
ICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obm9kZS0+cHJlZGljdGlvbigpKSkKICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRlbnRpZmllcihu
b2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpICE9IGdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgpCisgICAgICAgICAgICBpZiAoY29kZUJsb2NrKCktPmlkZW50aWZpZXIobm9kZS0+aWRl
bnRpZmllck51bWJlcigpKSAhPSB2bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0g
CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5jb2Rl
T3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKApAQCAtMTA0Niw3ICsxMDQ2LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlc1VudXNlZDsKICAgICAgICAgSlNDZWxsKiBzcGVj
aWZpY1ZhbHVlOwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJpbmdQcm90b3R5
cGVTdHJ1Y3R1cmUtPmdldCgKLSAgICAgICAgICAgIGdsb2JhbERhdGEoKSwgaWRlbnQsIGF0dHJp
YnV0ZXNVbnVzZWQsIHNwZWNpZmljVmFsdWUpOworICAgICAgICAgICAgdm0oKSwgaWRlbnQsIGF0
dHJpYnV0ZXNVbnVzZWQsIHNwZWNpZmljVmFsdWUpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCkBAIC0xMDg1
LDkgKzEwODUsOSBAQCBwcml2YXRlOgogICAgICAgICAvLyAodGhhdCB3b3VsZCBjYWxsIHRvU3Ry
aW5nKCkpLiBXZSBkb24ndCB3YW50IHRoZSBERkcgdG8gaGF2ZSB0byBkaXN0aW5ndWlzaAogICAg
ICAgICAvLyBiZXR3ZWVuIHRoZSB0d28sIGp1c3QgYmVjYXVzZSB0aGF0IHNlZW1zIGxpa2UgaXQg
d291bGQgZ2V0IGNvbmZ1c2luZy4gU28gd2UKICAgICAgICAgLy8ganVzdCByZXF1aXJlIGJvdGgg
bWV0aG9kcyB0byBiZSBzYW5lLgotICAgICAgICBpZiAoIWlzU3RyaW5nUHJvdG90eXBlTWV0aG9k
U2FuZShzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUsIGdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVz
LT52YWx1ZU9mKSkKKyAgICAgICAgaWYgKCFpc1N0cmluZ1Byb3RvdHlwZU1ldGhvZFNhbmUoc3Ry
aW5nUHJvdG90eXBlU3RydWN0dXJlLCB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWlzU3RyaW5nUHJvdG90eXBlTWV0
aG9kU2FuZShzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUsIGdsb2JhbERhdGEoKS5wcm9wZXJ0eU5h
bWVzLT50b1N0cmluZykpCisgICAgICAgIGlmICghaXNTdHJpbmdQcm90b3R5cGVNZXRob2RTYW5l
KHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSwgdm0oKS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZykp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAx
NDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsMTIgKzQ0LDEyIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBkZmdPcE5hbWVz
W10gPSB7CiAjdW5kZWYgU1RSSU5HSVpFX0RGR19PUF9FTlVNCiB9OwogCi1HcmFwaDo6R3JhcGgo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQg
b3NyRW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRs
ZVZhbHVlcykKLSAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorR3JhcGg6OkdyYXBoKFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRl
eCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMpCisgICAgOiBtX3Zt
KHZtKQogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAgICwgbV9jb21waWxhdGlvbihn
bG9iYWxEYXRhLm1fcGVyQnl0ZWNvZGVQcm9maWxlciA/IGdsb2JhbERhdGEubV9wZXJCeXRlY29k
ZVByb2ZpbGVyLT5uZXdDb21waWxhdGlvbihjb2RlQmxvY2ssIFByb2ZpbGVyOjpERkcpIDogMCkK
KyAgICAsIG1fY29tcGlsYXRpb24odm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyID8gdm0ubV9wZXJC
eXRlY29kZVByb2ZpbGVyLT5uZXdDb21waWxhdGlvbihjb2RlQmxvY2ssIFByb2ZpbGVyOjpERkcp
IDogMCkKICAgICAsIG1fcHJvZmlsZWRCbG9jayhjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpCi0g
ICAgLCBtX2FsbG9jYXRvcihnbG9iYWxEYXRhLm1fZGZnU3RhdGUtPm1fYWxsb2NhdG9yKQorICAg
ICwgbV9hbGxvY2F0b3Iodm0ubV9kZmdTdGF0ZS0+bV9hbGxvY2F0b3IpCiAgICAgLCBtX2hhc0Fy
Z3VtZW50cyhmYWxzZSkKICAgICAsIG1fb3NyRW50cnlCeXRlY29kZUluZGV4KG9zckVudHJ5Qnl0
ZWNvZGVJbmRleCkKICAgICAsIG1fbXVzdEhhbmRsZVZhbHVlcyhtdXN0SGFuZGxlVmFsdWVzKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTQ4NjM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBA
IC04OSw3ICs4OSw3IEBAIGVudW0gQWRkU3BlY3VsYXRpb25Nb2RlIHsKIC8vIE5vZGVzIHRoYXQg
YXJlICdkZWFkJyByZW1haW4gaW4gdGhlIHZlY3RvciB3aXRoIHJlZkNvdW50IDAuCiBjbGFzcyBH
cmFwaCB7CiBwdWJsaWM6Ci0gICAgR3JhcGgoSlNHbG9iYWxEYXRhJiwgQ29kZUJsb2NrKiwgdW5z
aWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVz
dEhhbmRsZVZhbHVlcyk7CisgICAgR3JhcGgoVk0mLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBvc3JF
bnRyeUJ5dGVjb2RlSW5kZXgsIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFs
dWVzKTsKICAgICB+R3JhcGgoKTsKICAgICAKICAgICB2b2lkIGNoYW5nZUNoaWxkKEVkZ2UmIGVk
Z2UsIE5vZGUqIG5ld05vZGUpCkBAIC02ODcsNyArNjg3LDcgQEAgcHVibGljOgogICAgICAgICB9
CiAgICAgfQogICAgIAotICAgIEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOworICAgIFZNJiBt
X3ZtOwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgUmVmUHRyPFByb2ZpbGVyOjpD
b21waWxhdGlvbj4gbV9jb21waWxhdGlvbjsKICAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9j
azsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
CShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTcgKzM2LDE3IEBACiAjaW5jbHVkZSAi
REZHU3BlY3VsYXRpdmVKSVQuaCIKICNpbmNsdWRlICJERkdUaHVua3MuaCIKICNpbmNsdWRlICJK
U0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUg
IlZNLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAKIEpJVENvbXBpbGVyOjpKSVRDb21waWxlcihHcmFwaCYgZGZnKQotICAgIDog
Q0NhbGxIZWxwZXJzKCZkZmcubV9nbG9iYWxEYXRhLCBkZmcubV9jb2RlQmxvY2spCisgICAgOiBD
Q2FsbEhlbHBlcnMoJmRmZy5tX3ZtLCBkZmcubV9jb2RlQmxvY2spCiAgICAgLCBtX2dyYXBoKGRm
ZykKICAgICAsIG1fY3VycmVudENvZGVPcmlnaW5JbmRleCgwKQogewotICAgIGlmIChzaG91bGRT
aG93RGlzYXNzZW1ibHkoKSB8fCBtX2dyYXBoLm1fZ2xvYmFsRGF0YS5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXIpCisgICAgaWYgKHNob3VsZFNob3dEaXNhc3NlbWJseSgpIHx8IG1fZ3JhcGgubV92bS5t
X3BlckJ5dGVjb2RlUHJvZmlsZXIpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gYWRvcHRQdHIo
bmV3IERpc2Fzc2VtYmxlcihkZmcpKTsKIH0KIApAQCAtNzYsNyArNzYsNyBAQCB2b2lkIEpJVENv
bXBpbGVyOjpsaW5rT1NSRXhpdHMoKQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb2RlQmxv
Y2soKS0+d2F0Y2hwb2ludChleGl0Lm1fd2F0Y2hwb2ludEluZGV4KS5zZXREZXN0aW5hdGlvbihs
YWJlbCgpKTsKICAgICAgICAgaml0QXNzZXJ0SGFzVmFsaWRDYWxsRnJhbWUoKTsKLSAgICAgICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIoaSksICZnbG9iYWxEYXRhKCktPm9zckV4aXRJbmRleCk7Cisg
ICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGkpLCAmdm0oKS0+b3NyRXhpdEluZGV4KTsKICAg
ICAgICAgZXhpdC5zZXRQYXRjaGFibGVDb2RlT2Zmc2V0KHBhdGNoYWJsZUp1bXAoKSk7CiAgICAg
fQogfQpAQCAtMjA2LDE0ICsyMDYsMTQgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVm
ZmVyJiBsaW5rQgogICAgICAgICBpbmZvLmNhbGxUeXBlID0gbV9qc0NhbGxzW2ldLm1fY2FsbFR5
cGU7CiAgICAgICAgIGluZm8uaXNERkcgPSB0cnVlOwogICAgICAgICBpbmZvLmNvZGVPcmlnaW4g
PSBtX2pzQ2FsbHNbaV0ubV9jb2RlT3JpZ2luOwotICAgICAgICBsaW5rQnVmZmVyLmxpbmsobV9q
c0NhbGxzW2ldLm1fc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKChtX2dsb2JhbERhdGEtPmdldENUSVN0
dWIoaW5mby5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA/IGxpbmtDb25zdHJ1
Y3RUaHVua0dlbmVyYXRvciA6IGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpKS5jb2RlKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKSkpOworICAgICAgICBsaW5rQnVmZmVyLmxpbmsobV9qc0NhbGxzW2ldLm1f
c2xvd0NhbGwsIEZ1bmN0aW9uUHRyKChtX3ZtLT5nZXRDVElTdHViKGluZm8uY2FsbFR5cGUgPT0g
Q2FsbExpbmtJbmZvOjpDb25zdHJ1Y3QgPyBsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IgOiBs
aW5rQ2FsbFRodW5rR2VuZXJhdG9yKSkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAg
ICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbChtX2pzQ2FsbHNbaV0ubV9zbG93Q2FsbCk7CiAgICAgICAgIGluZm8uaG90UGF0aEJlZ2lu
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fanNDYWxsc1tpXS5tX3RhcmdldFRvQ2hlY2spOwog
ICAgICAgICBpbmZvLmhvdFBhdGhPdGhlciA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
KG1fanNDYWxsc1tpXS5tX2Zhc3RDYWxsKTsKICAgICAgICAgaW5mby5jYWxsZWVHUFIgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obV9qc0NhbGxzW2ldLm1fY2FsbGVlKTsKICAgICB9CiAgICAgCi0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRUaHVuayA9IGdsb2JhbERhdGEoKS0+Z2V0
Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgb3NyRXhpdFRodW5rID0gdm0oKS0+Z2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJh
dGlvblRodW5rR2VuZXJhdG9yKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCB0YXJnZXQgPSBDb2Rl
TG9jYXRpb25MYWJlbChvc3JFeGl0VGh1bmsuY29kZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY29kZUJsb2NrKCktPm51bWJlck9mT1NSRXhpdHMoKTsgKytpKSB7CiAgICAgICAg
IE9TUkV4aXQmIGV4aXQgPSBjb2RlQmxvY2soKS0+b3NyRXhpdChpKTsKQEAgLTI2MCw3ICsyNjAs
NyBAQCBib29sIEpJVENvbXBpbGVyOjpjb21waWxlKEpJVENvZGUmIGVudHJ5CiAgICAgc3BlY3Vs
YXRpdmUuY3JlYXRlT1NSRW50cmllcygpOwogICAgIHNldEVuZE9mQ29kZSgpOwogCi0gICAgTGlu
a0J1ZmZlciBsaW5rQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLCBKSVRD
b21waWxhdGlvbkNhbkZhaWwpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV92bSwgdGhp
cywgbV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKGxpbmtCdWZm
ZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGxpbmso
bGlua0J1ZmZlcik7CkBAIC0yOTIsNyArMjkyLDcgQEAgYm9vbCBKSVRDb21waWxlcjo6Y29tcGls
ZUZ1bmN0aW9uKEpJVENvZAogICAgIC8vIFBsYW50IGEgY2hlY2sgdGhhdCBzdWZmaWNpZW50IHNw
YWNlIGlzIGF2YWlsYWJsZSBpbiB0aGUgSlNTdGFjay4KICAgICAvLyBGSVhNRTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2MjkxCiAgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QxKTsKLSAgICBKdW1w
IHN0YWNrQ2hlY2sgPSBicmFuY2hQdHIoQmVsb3csIEFic29sdXRlQWRkcmVzcyhtX2dsb2JhbERh
dGEtPmludGVycHJldGVyLT5zdGFjaygpLmFkZHJlc3NPZkVuZCgpKSwgR1BSSW5mbzo6cmVnVDEp
OworICAgIEp1bXAgc3RhY2tDaGVjayA9IGJyYW5jaFB0cihCZWxvdywgQWJzb2x1dGVBZGRyZXNz
KG1fdm0tPmludGVycHJldGVyLT5zdGFjaygpLmFkZHJlc3NPZkVuZCgpKSwgR1BSSW5mbzo6cmVn
VDEpOwogICAgIC8vIFJldHVybiBoZXJlIGFmdGVyIHN0YWNrIGNoZWNrLgogICAgIExhYmVsIGZy
b21TdGFja0NoZWNrID0gbGFiZWwoKTsKIApAQCAtMzQ5LDcgKzM0OSw3IEBAIGJvb2wgSklUQ29t
cGlsZXI6OmNvbXBpbGVGdW5jdGlvbihKSVRDb2QKICAgICBzZXRFbmRPZkNvZGUoKTsKIAogICAg
IC8vID09PSBMaW5rID09PQotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV9nbG9iYWxEYXRh
LCB0aGlzLCBtX2NvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBMaW5rQnVm
ZmVyIGxpbmtCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNh
bkZhaWwpOwogICAgIGlmIChsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBsaW5rKGxpbmtCdWZmZXIpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NSw3ICs0NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBBYnN0cmFjdFNhbXBsaW5n
Q291bnRlcjsKIGNsYXNzIENvZGVCbG9jazsKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZN
OwogCiBuYW1lc3BhY2UgREZHIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHZv
aWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICBkYXRhTG9nKCJPU1Ig
aW4gIiwgKmNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgIiAtPiAiLCAqY29kZUJsb2NrLCAiIGZy
b20gYmMjIiwgYnl0ZWNvZGVJbmRleCwgIlxuIik7CiAjZW5kaWYKICAgICAKLSAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwogICAgIE9TUkVudHJ5RGF0YSogZW50cnkgPSBjb2RlQmxvY2stPmRmZ09TUkVu
dHJ5RGF0YUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgaWYgKCFl
bnRyeSkgewpAQCAtMTMzLDcgKzEzMyw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3Rh
dGUqIGV4ZWMsIEMKICAgICAvLyAgICBpdCBzZWVtcyBzaWxseTogeW91J2QgYmUgZGl2ZXJ0aW5n
IHRoZSBwcm9ncmFtIHRvIGVycm9yIGhhbmRsaW5nIHdoZW4gaXQKICAgICAvLyAgICB3b3VsZCBo
YXZlIG90aGVyd2lzZSBqdXN0IGtlcHQgcnVubmluZyBhbGJlaXQgbGVzcyBxdWlja2x5LgogICAg
IAotICAgIGlmICghZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPnN0YWNrKCkuZ3JvdygmZXhlYy0+
cmVnaXN0ZXJzKClbY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyc10pKSB7CisgICAgaWYg
KCF2bS0+aW50ZXJwcmV0ZXItPnN0YWNrKCkuZ3JvdygmZXhlYy0+cmVnaXN0ZXJzKClbY29kZUJs
b2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyc10pKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09T
UikKICAgICAgICAgZGF0YUxvZ0YoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2Ugc3RhY2sgZ3Jvd3Ro
IGZhaWxlZC5cbiIpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkocmV2aXNpb24gMTQ4NjM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2NCw3ICsyNjQsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6
Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIHNjcmF0Y2hCdWZm
ZXJMZW5ndGhCZWZvcmVVSW50MzJzID0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMg
KyAoKG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyAqIDIpIDw9IEdQUkluZm86Om51
bWJlck9mUmVnaXN0ZXJzID8gMCA6IG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyk7
Ci0gICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1faml0Lmdsb2JhbERhdGEoKS0+
c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIChzY3JhdGNoQnVm
ZmVyTGVuZ3RoQmVmb3JlVUludDMycyArIChoYXZlVUludDMycyA/IDIgOiAwKSkpOworICAgIFNj
cmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBtX2ppdC52bSgpLT5zY3JhdGNoQnVmZmVyRm9y
U2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKHNjcmF0Y2hCdWZmZXJMZW5ndGhCZWZvcmVV
SW50MzJzICsgKGhhdmVVSW50MzJzID8gMiA6IDApKSk7CiAgICAgRW5jb2RlZEpTVmFsdWUqIHNj
cmF0Y2hEYXRhQnVmZmVyID0gc2NyYXRjaEJ1ZmZlciA/IHN0YXRpY19jYXN0PEVuY29kZWRKU1Zh
bHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IDA7CiAKICAgICAvLyBGcm9tIGhl
cmUgb24sIHRoZSBjb2RlIGFzc3VtZXMgdGhhdCBpdCBpcyBwcm9maXRhYmxlIHRvIG1heGltaXpl
IHRoZSBkaXN0YW5jZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXI2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjAsNyArMjYwLDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0
IAogICAgIGRhdGFMb2dGKCIgIik7CiAjZW5kaWYKICAgICAKLSAgICBTY3JhdGNoQnVmZmVyKiBz
Y3JhdGNoQnVmZmVyID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShz
aXplb2YoRW5jb2RlZEpTVmFsdWUpICogc3RkOjptYXgoaGF2ZVVJbnQzMnMgPyAydSA6IDB1LCBu
dW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyArIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1
YWxSZWdpc3RlcnMgPD0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPyAwIDogbnVtYmVyT2ZE
aXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKSkpOworICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hC
dWZmZXIgPSBtX2ppdC52bSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpT
VmFsdWUpICogc3RkOjptYXgoaGF2ZVVJbnQzMnMgPyAydSA6IDB1LCBudW1iZXJPZlBvaXNvbmVk
VmlydHVhbFJlZ2lzdGVycyArIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPD0g
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPyAwIDogbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFs
UmVnaXN0ZXJzKSkpOwogICAgIEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNoRGF0YUJ1ZmZlciA9IHNj
cmF0Y2hCdWZmZXIgPyBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXIt
PmRhdGFCdWZmZXIoKSkgOiAwOwogCiAgICAgLy8gRnJvbSBoZXJlIG9uLCB0aGUgY29kZSBhc3N1
bWVzIHRoYXQgaXQgaXMgcHJvZml0YWJsZSB0byBtYXhpbWl6ZSB0aGUgZGlzdGFuY2UKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJ
KHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgsOSBAQCB2b2lkIGNvbXBp
bGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKICAgICBBU1NFUlQoY29kZUJsb2NrKTsKICAgICBB
U1NFUlQoY29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKICAgICAK
LSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIAotICAgIHVpbnQzMl90IGV4aXRJbmRleCA9IGds
b2JhbERhdGEtPm9zckV4aXRJbmRleDsKKyAgICB1aW50MzJfdCBleGl0SW5kZXggPSB2bS0+b3Ny
RXhpdEluZGV4OwogICAgIE9TUkV4aXQmIGV4aXQgPSBjb2RlQmxvY2stPm9zckV4aXQoZXhpdElu
ZGV4KTsKICAgICAKICAgICAvLyBNYWtlIHN1cmUgYWxsIGNvZGUgb24gb3VyIGlubGluZSBzdGFj
ayBpcyBKSVQgY29tcGlsZWQuIFRoaXMgaXMgbmVjZXNzYXJ5IHNpbmNlCkBAIC05MCwxMyArOTAs
MTMgQEAgdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiAjZW5kaWYKIAogICAg
IHsKLSAgICAgICAgQ0NhbGxIZWxwZXJzIGppdChnbG9iYWxEYXRhLCBjb2RlQmxvY2spOworICAg
ICAgICBDQ2FsbEhlbHBlcnMgaml0KHZtLCBjb2RlQmxvY2spOwogICAgICAgICBPU1JFeGl0Q29t
cGlsZXIgZXhpdENvbXBpbGVyKGppdCk7CiAKICAgICAgICAgaml0LmppdEFzc2VydEhhc1ZhbGlk
Q2FsbEZyYW1lKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoZ2xvYmFsRGF0YS0+bV9wZXJCeXRl
Y29kZVByb2ZpbGVyICYmIGNvZGVCbG9jay0+Y29tcGlsYXRpb24oKSkgewotICAgICAgICAgICAg
UHJvZmlsZXI6OkRhdGFiYXNlJiBkYXRhYmFzZSA9ICpnbG9iYWxEYXRhLT5tX3BlckJ5dGVjb2Rl
UHJvZmlsZXI7CisgICAgICAgIGlmICh2bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIGNvZGVC
bG9jay0+Y29tcGlsYXRpb24oKSkgeworICAgICAgICAgICAgUHJvZmlsZXI6OkRhdGFiYXNlJiBk
YXRhYmFzZSA9ICp2bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyOwogICAgICAgICAgICAgUHJvZmls
ZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbiA9IGNvZGVCbG9jay0+Y29tcGlsYXRpb24oKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgUHJvZmlsZXI6Ok9TUkV4aXQqIHByb2ZpbGVyRXhp
dCA9IGNvbXBpbGF0aW9uLT5hZGRPU1JFeGl0KApAQCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgY29t
cGlsZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAKICAgICAgICAgZXhpdENvbXBp
bGVyLmNvbXBpbGVFeGl0KGV4aXQsIG9wZXJhbmRzLCByZWNvdmVyeSk7CiAgICAgICAgIAotICAg
ICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBjb2RlQmxvY2sp
OworICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgY29kZUJsb2NrKTsK
ICAgICAgICAgZXhpdC5tX2NvZGUgPSBGSU5BTElaRV9DT0RFX0lGKAogICAgICAgICAgICAgc2hv
dWxkU2hvd0Rpc2Fzc2VtYmx5KCksCiAgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKQEAgLTEyMiw3
ICsxMjIsNyBAQCB2b2lkIGNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoZXhpdC5jb2RlTG9jYXRpb25Gb3JSZXBhdGNoKGNvZGVCbG9j
ayksIENvZGVMb2NhdGlvbkxhYmVsKGV4aXQubV9jb2RlLmNvZGUoKSkpOwogICAgIH0KICAgICAK
LSAgICBnbG9iYWxEYXRhLT5vc3JFeGl0SnVtcERlc3RpbmF0aW9uID0gZXhpdC5tX2NvZGUuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgdm0tPm9zckV4aXRKdW1wRGVzdGluYXRpb24g
PSBleGl0Lm1fY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIH0KIAogfSAvLyBleHRl
cm4gIkMiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlICJK
SVQuaCIKICNpbmNsdWRlICJKSVRFeGNlcHRpb25zLmgiCiAjaW5jbHVkZSAiSlNBY3RpdmF0aW9u
LmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRl
ICJKU05hbWVTY29wZS5oIgogI2luY2x1ZGUgIk5hbWVJbnN0YW5jZS5oIgogI2luY2x1ZGUgIk9i
amVjdENvbnN0cnVjdG9yLmgiCkBAIC0yODQsMTMgKzI4NCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiB0ZW1wbGF0ZTxib29sIHN0cmljdD4KIHN0YXRpYyBpbmxpbmUgdm9p
ZCBwdXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCB1aW50MzJfdCBp
bmRleCwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBl
eGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xv
YmFsRGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKGJhc2VWYWx1ZS5p
c09iamVjdCgpKSB7CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFs
dWUpOwogICAgICAgICBpZiAob2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgpKSB7Ci0g
ICAgICAgICAgICBvYmplY3QtPnNldEluZGV4UXVpY2tseShnbG9iYWxEYXRhLCBpbmRleCwgdmFs
dWUpOworICAgICAgICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHkodm0sIGluZGV4LCB2YWx1
ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzA0LDggKzMwNCw4IEBA
IHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRCeVZhbChFeGVjU3RhdGUqIGUKIHRlbXBsYXRlPGJvb2wg
c3RyaWN0PgogQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5VmFsSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2Jh
bERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4
ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZEJhc2UpOwogICAgIEpTVmFsdWUgcHJvcGVydHkgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFByb3BlcnR5KTsKQEAgLTMzMyw3ICszMzMsNyBAQCBBTFdBWVNfSU5MSU5FIHN0
YXRpYyB2b2lkIERGR19PUEVSQVRJT04gCiAKICAgICAvLyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0
IGlmIHRvU3RyaW5nIHRocm93cyBhbiBleGNlcHRpb24uCiAgICAgSWRlbnRpZmllciBpZGVudChl
eGVjLCBwcm9wZXJ0eS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAgIGlmICghZ2xv
YmFsRGF0YS0+ZXhjZXB0aW9uKSB7CisgICAgaWYgKCF2bS0+ZXhjZXB0aW9uKSB7CiAgICAgICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90KHN0cmljdCk7CiAgICAgICAgIGJhc2VWYWx1ZS5wdXQoZXhl
YywgaWRlbnQsIHZhbHVlLCBzbG90KTsKICAgICB9CkBAIC0zNDMsMTYgKzM0MywxNiBAQCBleHRl
cm4gIkMiIHsKIAogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0
VGhpcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcCkKIHsKLSAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3Ap
LnRvVGhpc09iamVjdChleGVjKSk7CiB9CiAKIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRp
b25DcmVhdGVUaGlzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBpbnQz
Ml90IGlubGluZUNhcGFjaXR5KQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZl
eGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9i
YWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAg
ICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CkBAIC0zNjQsMTYgKzM2NCwxNiBAQCBKU0Nl
bGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlVGhpCiAKIEpTQ2VsbCogREZHX09QRVJB
VElPTiBvcGVyYXRpb25OZXdPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0
YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7
CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4
ZWMsIHN0cnVjdHVyZSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uVmFsdWVBZGQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBKU1ZhbHVlIG9w
MSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkT3AyKTsKQEAgLTM4Myw4ICszODMsOCBAQCBFbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uVmFsdWVBZGROb3ROdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAgIEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAg
ICAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBK
U1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKQEAgLTM5OSw4ICszOTks
OCBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAKIHN0YXRpYyBp
bmxpbmUgRW5jb2RlZEpTVmFsdWUgZ2V0QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJh
c2UsIHVpbnQzMl90IGluZGV4KQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4
ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9i
YWxEYXRhLCBleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKICAgICAKICAgICBpZiAoYmFzZS0+aXNPYmpl
Y3QoKSkgewogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZSk7CkBAIC00
MTYsOCArNDE2LDggQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBnZXRCeVZhbChFeAog
CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRQcm9wZXJ0eSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xv
YmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwg
ZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwogICAgIEpTVmFsdWUgcHJvcGVydHkgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFByb3BlcnR5KTsKQEAgLTQ0Nyw4ICs0NDcsOCBAQCBFbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uR2V0QnlWYWxDZWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHkpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIEpT
VmFsdWUgcHJvcGVydHkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFByb3BlcnR5KTsKIApAQCAt
NDczLDggKzQ3Myw4IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2UK
IAogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50
KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYmFzZSwgaW50MzJfdCBpbmRleCkKIHsKLSAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAgICAgCiAgICAgaWYgKGluZGV4IDwgMCkgewogICAgICAgICAvLyBHbyB0aGUgc2xvd2VzdCB3
YXkgcG9zc2libGUgYmVjYXNlIG5lZ2F0aXZlIGluZGljZXMgZG9uJ3QgdXNlIGluZGV4ZWQgc3Rv
cmFnZS4KQEAgLTQ4Nyw4ICs0ODcsOCBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdlCiAKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJ
ZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIElkZW50aWZpZXIqIHByb3Bl
cnR5TmFtZSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFs
RGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhl
Yyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoYmFzZSk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKQEAgLTQ5
OCw4ICs0OTgsOCBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiBK
X0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkob3BlcmF0aW9uR2V0QnlJ
ZEJ1aWxkTGlzdCk7CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5
SWRCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9i
YWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBl
eGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CiAgICAg
QWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8u
YWNjZXNzVHlwZSk7CkBAIC01MTcsOCArNTE3LDggQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25HZQogSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUpJKG9wZXJhdGlvbkdldEJ5SWRQcm90b0J1aWxkTGlzdCk7CiBFbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRQcm90b0J1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNz
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgSWRlbnRpZmllciogcHJvcGVy
dHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiB7Ci0gICAgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAog
ICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRT
dHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0
aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKQEAgLTUzNiw4ICs1MzYs
OCBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiBKX0ZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkob3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
KTsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBJ
ZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykK
IHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwot
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAgICAgCiAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+
Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwogICAgIEFjY2Vzc1R5cGUg
YWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUp
OwpAQCAtNTU4LDE2ICs1NTgsMTYgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25HZQogCiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxDdXN0
b21HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jIGZ1bmN0aW9uLCBJZGVudGlmaWVyKiBpZGVudCkKIHsKLSAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShmdW5jdGlvbihleGVjLCBhc09iamVjdChiYXNlKSwg
KmlkZW50KSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ2Fs
bEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgSlNDZWxsKiB2YWx1ZSkKIHsK
LSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CiAgICAgCiAgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBhc0dldHRlclNl
dHRlcih2YWx1ZSk7CiAgICAgSlNPYmplY3QqIGdldHRlciA9IGdldHRlclNldHRlci0+Z2V0dGVy
KCk7CkBAIC01ODAsNDAgKzU4MCw0MCBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNhCiAKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbFN0cmljdChF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAgICAgCiAgICAgb3BlcmF0aW9uUHV0QnlWYWxJbnRlcm5hbDx0cnVlPihleGVjLCBlbmNvZGVk
QmFzZSwgZW5jb2RlZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOwogfQogCiB2b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIG9wZXJhdGlvblB1
dEJ5VmFsSW50ZXJuYWw8ZmFsc2U+KGV4ZWMsIGVuY29kZWRCYXNlLCBlbmNvZGVkUHJvcGVydHks
IGVuY29kZWRWYWx1ZSk7CiB9CiAKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bENlbGxTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
ICAgICAKICAgICBvcGVyYXRpb25QdXRCeVZhbEludGVybmFsPHRydWU+KGV4ZWMsIEpTVmFsdWU6
OmVuY29kZShjZWxsKSwgZW5jb2RlZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOwogfQogCiB2b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsTm9uU3RyaWN0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBjZWxsLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEg
PSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
Z2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgb3BlcmF0aW9uUHV0
QnlWYWxJbnRlcm5hbDxmYWxzZT4oZXhlYywgSlNWYWx1ZTo6ZW5jb2RlKGNlbGwpLCBlbmNvZGVk
UHJvcGVydHksIGVuY29kZWRWYWx1ZSk7CiB9CiAKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7
Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwogICAgIAogICAgIGlmIChpbmRleCA+PSAwKSB7CiAgICAgICAgIGFycmF5LT5wdXRC
eUluZGV4SW5saW5lKGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwg
dHJ1ZSk7CkBAIC02MjcsOCArNjI3LDggQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5VmFsQmV5bwogCiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRB
cnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgaW50
MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAK
ICAgICBpZiAoaW5kZXggPj0gMCkgewogICAgICAgICBhcnJheS0+cHV0QnlJbmRleElubGluZShl
eGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIGZhbHNlKTsKQEAgLTY0
Miw4ICs2NDIsOCBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvCiAK
IHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5Qm91
bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4
LCBkb3VibGUgdmFsdWUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMt
Pmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERh
dGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIEpTVmFsdWUganNWYWx1ZSA9IEpT
VmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlKTsKICAgICAKQEAgLTY1OSw4ICs2
NTksOCBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWCiAKIHZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9u
U3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBk
b3VibGUgdmFsdWUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmds
b2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEs
IGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIEpTVmFsdWUganNWYWx1ZSA9IEpTVmFs
dWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlKTsKICAgICAKQEAgLTY3Niw4ICs2NzYs
OCBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWCiAKIEVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5KiBhcnJheSkKIHsKLSAgICBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAg
ICAgCiAgICAgYXJyYXktPnB1c2goZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYXJyYXktPmxlbmd0aCgpKSk7
CkBAIC02ODUsOCArNjg1LDggQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRp
b25BcgogCiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaERv
dWJsZShFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB2YWx1ZSwgSlNBcnJheSogYXJyYXkpCiB7Ci0g
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwogICAgIAogICAgIGFycmF5LT5wdXNoKGV4ZWMsIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2Rl
QXNEb3VibGUsIHZhbHVlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihh
cnJheS0+bGVuZ3RoKCkpKTsKQEAgLTY5NCwxNiArNjk0LDE2IEBAIEVuY29kZWRKU1ZhbHVlIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uQXIKIAogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25BcnJheVBvcChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5KQogewotICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKICAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFycmF5LT5wb3AoZXhlYykpOwog
fQogICAgICAgICAKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQ
b3BBbmRSZWNvdmVyTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXkpCiB7Ci0g
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwogICAgIAogICAgIGFycmF5LT5idXR0ZXJmbHkoKS0+c2V0UHVibGljTGVuZ3RoKGFycmF5
LT5idXR0ZXJmbHkoKS0+cHVibGljTGVuZ3RoKCkgKyAxKTsKICAgICAKQEAgLTcxMiw4ICs3MTIs
OCBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAgICAgICAgIAog
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNTdGF0
ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBKU0NlbGwqIGFyZ3VtZW50KQogewotICAgIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKICAgICAK
ICAgICBpZiAoIWJhc2UtPmluaGVyaXRzKCZSZWdFeHBPYmplY3Q6OnNfaW5mbykpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwpAQCAtNzI1LDggKzcyNSw4IEBAIEVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmUKICAgICAgICAgCiBzaXplX3QgREZH
X09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBUZXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBi
YXNlLCBKU0NlbGwqIGFyZ3VtZW50KQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9
IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZn
bG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKIAogICAgIGlmICghYmFzZS0+aW5oZXJp
dHMoJlJlZ0V4cE9iamVjdDo6c19pbmZvKSkgewogICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVj
KTsKQEAgLTc0MCw4ICs3NDAsOCBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdF
eHBUZXN0CiAgICAgICAgIAogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJp
Y3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCog
YmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdCh0cnVlKTsKICAgICBiYXNlLT5tZXRob2RUYWJsZSgpLT5wdXQoYmFz
ZSwgZXhlYywgKnByb3BlcnR5TmFtZSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNs
b3QpOwpAQCAtNzQ5LDggKzc0OSw4IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eUlkU3RyaWMKIAogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3Qo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFz
ZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdChmYWxzZSk7CiAgICAgYmFzZS0+bWV0aG9kVGFibGUoKS0+cHV0KGJhc2Us
IGV4ZWMsICpwcm9wZXJ0eU5hbWUsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90
KTsKQEAgLTc1OCwyOSArNzU4LDI5IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eUlkTm9uU3QKIAogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCog
YmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdCh0cnVlKTsKICAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7Ci0g
ICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksICpwcm9wZXJ0
eU5hbWUsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKKyAgICBhc09iamVj
dChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksICpwcm9wZXJ0eU5hbWUsIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lKQog
ewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKICAgICAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSk7CiAgICAgQVNT
RVJUKGJhc2UtPmlzT2JqZWN0KCkpOwotICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCAqcHJvcGVydHlOYW1lLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSwgc2xvdCk7CisgICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCAq
cHJvcGVydHlOYW1lLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAK
IFZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0
QnlJZFN0cmljdE9wdGltaXplKTsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlk
U3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5h
bWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKLSAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJ
bmZvKHJldHVybkFkZHJlc3MpOwogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19j
YXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwpAQCAtODAzLDggKzgwMyw4IEBA
IHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWMKIFZfRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9w
dGltaXplKTsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0
aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVy
bkFkZHJlc3MpOwogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vz
c1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwpAQCAtODI3LDggKzgyNyw4IEBAIHZvaWQgREZH
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3QKIFZfRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXpl
KTsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1p
emVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEg
PSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
Z2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFk
ZHJlc3MpOwogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5
cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwpAQCAtODM3LDcgKzgzNyw3IEBAIHZvaWQgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWMKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0
cnVlKTsKICAgICAKICAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7Ci0gICAgYXNPYmplY3Qo
YmFzZSktPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksICpwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzbG90KTsKKyAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksICpwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKICAgICAKICAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0
aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtODUxLDggKzg1MSw4IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlk
RGlyZWMKIFZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKIHZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNl
LCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cykKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7Cisg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CiAgICAgCiAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhl
Yy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwogICAgIEFjY2Vzc1R5
cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5
cGUpOwpAQCAtODYxLDcgKzg2MSw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eUlkRGlyZWMKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSk7CiAgICAgCiAgICAgQVNT
RVJUKGJhc2UtPmlzT2JqZWN0KCkpOwotICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCAqcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgYXNPYmpl
Y3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCAqcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dCk7CiAgICAgCiAgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4o
c3R1YkluZm8uYWNjZXNzVHlwZSkpCiAgICAgICAgIHJldHVybjsKQEAgLTg3NSw4ICs4NzUsOCBA
QCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjCiBWX0ZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWls
ZExpc3QpOwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExp
c3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEg
PSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
Z2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFk
ZHJlc3MpOwogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5
cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwpAQCAtODk2LDggKzg5Niw4IEBAIHZvaWQgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWMKIFZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdCk7CiB2
b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdFdpdGhS
ZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVj
LT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxE
YXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7
CiAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1
YkluZm8uYWNjZXNzVHlwZSk7CkBAIC05MTcsOCArOTE3LDggQEAgdm9pZCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5SWROb25TdAogVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0KTsKIHZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0V2l0aFJl
dHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMt
Pmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERh
dGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsK
ICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHVi
SW5mby5hY2Nlc3NUeXBlKTsKQEAgLTkyNyw3ICs5MjcsNyBAQCB2b2lkIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZERpcmVjCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSk7CiAg
ICAgCiAgICAgQVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkpOwotICAgIGFzT2JqZWN0KGJhc2UpLT5w
dXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCAqcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7
CisgICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCAqcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2xvdCk7CiAgICAgCiAgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8
QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCiAgICAgICAgIHJldHVybjsKQEAgLTkz
OCw4ICs5MzgsOCBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjCiBW
X0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5
SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3QpOwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVu
dGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsK
LSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CiAgICAgCiAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29k
ZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwogICAgIEFjY2Vzc1R5cGUgYWNj
ZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwpA
QCAtOTQ4LDcgKzk0OCw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGly
ZWMKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSk7CiAgICAgCiAgICAgQVNTRVJUKGJh
c2UtPmlzT2JqZWN0KCkpOwotICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+Z2xv
YmFsRGF0YSgpLCAqcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgYXNPYmplY3QoYmFz
ZSktPnB1dERpcmVjdChleGVjLT52bSgpLCAqcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiAg
ICAgCiAgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1Yklu
Zm8uYWNjZXNzVHlwZSkpCiAgICAgICAgIHJldHVybjsKQEAgLTk1OCw0MCArOTU4LDQwIEBAIHZv
aWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWMKIAogc2l6ZV90IERGR19PUEVS
QVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAgIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAK
ICAgICByZXR1cm4ganNMZXNzPHRydWU+KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3Ax
KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpKTsKIH0KIAogc2l6ZV90IERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uQ29tcGFyZUxlc3NFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0gICAgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAog
ICAgIHJldHVybiBqc0xlc3NFcTx0cnVlPihleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9w
MSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSk7CiB9CiAKIHNpemVfdCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKLSAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAg
CiAgICAgcmV0dXJuIGpzTGVzczxmYWxzZT4oZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cDIpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSkpOwogfQogCiBzaXplX3QgREZHX09QRVJB
VElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKLSAgICBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAg
ICAgCiAgICAgcmV0dXJuIGpzTGVzc0VxPGZhbHNlPihleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wMiksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSk7CiB9CiAKIHNpemVfdCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0gICAgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAg
IAogICAgIHJldHVybiBKU1ZhbHVlOjplcXVhbFNsb3dDYXNlSW5saW5lKGV4ZWMsIEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpKTsKIH0KQEAg
LTEwMDIsOCArMTAwMiw4IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
Q28KIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcShFeGVjU3Rh
dGUqIGV4ZWMsIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkKICNlbmRpZgogewotICAgIEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
ICAgICAKICAgICBib29sIHJlc3VsdCA9IGFzU3RyaW5nKGxlZnQpLT52YWx1ZShleGVjKSA9PSBh
c1N0cmluZyhyaWdodCktPnZhbHVlKGV4ZWMpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0xMDE1
LDggKzEwMTUsOCBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyCiAK
IHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcUNlbGwoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AyKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxE
YXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVj
KTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
T3AyKTsKQEAgLTEwMjksOCArMTAyOSw4IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkNvbXBhcmVTdHIKIAogc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmlj
dEVxKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZE9wMikKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhl
Yy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFs
RGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBKU1ZhbHVlIHNyYzEgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBzcmMyID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRPcDIpOwpAQCAtMTA0MSw3ICsxMDQxLDcgQEAgc2l6ZV90IERGR19PUEVSQVRJT04g
b3BlcmF0aW9uQ29tcGFyZVN0cgogc3RhdGljIHZvaWQqIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0
ZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBjYWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCkKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwot
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAKICAgICBleGVjQ2FsbGVlLT5zZXRTY29wZShleGVjLT5z
Y29wZSgpKTsKICAgICBleGVjQ2FsbGVlLT5zZXRDb2RlQmxvY2soMCk7CkBAIC0xMDUzLDE4ICsx
MDUzLDE4IEBAIHN0YXRpYyB2b2lkKiBoYW5kbGVIb3N0Q2FsbChFeGVjU3RhdGUqIGUKICAgICAg
ICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlSlMpOwogICAgIAogICAgICAgICBpZiAoY2Fs
bFR5cGUgPT0gQ2FsbFR5cGVIb3N0KSB7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWNDYWxsZWUpOworICAgICAgICAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlY0NhbGxlZSk7CiAgICAgICAgICAgICBleGVjQ2Fs
bGVlLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7Ci0gICAgICAgICAgICBnbG9iYWxEYXRh
LT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5m
dW5jdGlvbihleGVjQ2FsbGVlKSk7Ci0gICAgICAgICAgICBpZiAoZ2xvYmFsRGF0YS0+ZXhjZXB0
aW9uKQotICAgICAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5nZXRDVElTdHViKHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CisgICAgICAgICAgICB2bS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOworICAgICAgICAgICAg
aWYgKHZtLT5leGNlcHRpb24pCisgICAgICAgICAgICAgICAgcmV0dXJuIHZtLT5nZXRDVElTdHVi
KHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCk7CiAKICAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQq
PihnZXRIb3N0Q2FsbFJldHVyblZhbHVlKTsKICAgICAgICAgfQogICAgIAogICAgICAgICBBU1NF
UlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKTsKLSAgICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgp
LmV4Y2VwdGlvbiA9IGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGV4ZWMsIGNhbGxlZSk7Ci0gICAg
ICAgIHJldHVybiBnbG9iYWxEYXRhLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIGV4
ZWMtPnZtKCkuZXhjZXB0aW9uID0gY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoZXhlYywgY2FsbGVl
KTsKKyAgICAgICAgcmV0dXJuIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQogCiAg
ICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CkBAIC0xMDc1LDI1ICsxMDc1LDI1
IEBAIHN0YXRpYyB2b2lkKiBoYW5kbGVIb3N0Q2FsbChFeGVjU3RhdGUqIGUKICAgICBBU1NFUlQo
Y29uc3RydWN0VHlwZSAhPSBDb25zdHJ1Y3RUeXBlSlMpOwogICAgIAogICAgIGlmIChjb25zdHJ1
Y3RUeXBlID09IENvbnN0cnVjdFR5cGVIb3N0KSB7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlY0NhbGxlZSk7CisgICAgICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWNDYWxsZWUpOwogICAgICAgICBleGVjQ2FsbGVlLT5z
ZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7Ci0gICAgICAgIGdsb2JhbERhdGEtPmhvc3RDYWxs
UmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rp
b24oZXhlY0NhbGxlZSkpOwotICAgICAgICBpZiAoZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKQotICAg
ICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAg
ICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY29uc3RydWN0RGF0
YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOworICAgICAgICBpZiAodm0tPmV4Y2VwdGlv
bikKKyAgICAgICAgICAgIHJldHVybiB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogCiAgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihnZXRIb3N0Q2FsbFJldHVyblZhbHVl
KTsKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlw
ZU5vbmUpOwotICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBjcmVhdGVOb3RBQ29u
c3RydWN0b3JFcnJvcihleGVjLCBjYWxsZWUpOwotICAgIHJldHVybiBnbG9iYWxEYXRhLT5nZXRD
VElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgZXhlYy0+dm0oKS5leGNlcHRpb24gPSBjcmVhdGVOb3RB
Q29uc3RydWN0b3JFcnJvcihleGVjLCBjYWxsZWUpOworICAgIHJldHVybiB2bS0+Z2V0Q1RJU3R1
Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpOwogfQogCiBpbmxpbmUgY2hhciogbGlua0ZvcihFeGVjU3RhdGUqIGV4ZWND
YWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBKU1ZhbHVl
IGNhbGxlZUFzVmFsdWUgPSBleGVjQ2FsbGVlLT5jYWxsZWVBc1ZhbHVlKCk7CiAgICAgSlNDZWxs
KiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7CkBA
IC0xMTEyLDggKzExMTIsOCBAQCBpbmxpbmUgY2hhciogbGlua0ZvcihFeGVjU3RhdGUqIGV4ZWND
YWxsCiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3Rh
dGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CiAgICAgICAgIEpTT2Jq
ZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvcihleGVjQ2FsbGVlLCBj
YWxsZWUtPnNjb3BlKCksIGtpbmQpOwogICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAg
IGdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsK
LSAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihnbG9iYWxEYXRhLT5n
ZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgdm0tPmV4Y2VwdGlvbiA9IGNyZWF0
ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PGNoYXIqPih2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1Bh
dGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAgfQogICAg
ICAgICBjb2RlQmxvY2sgPSAmZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRCeXRlY29kZUZv
cihraW5kKTsKICAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkK
QEAgLTExNDIsOCArMTE0Miw4IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nv
bnN0cnUKIGlubGluZSBjaGFyKiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhl
Y0NhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU0NlbGwqJiBjYWxsZWVBc0Z1
bmN0aW9uQ2VsbCkKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJG
cmFtZSgpOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRh
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsK
KyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKIAogICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGV4ZWNDYWxsZWUt
PmNhbGxlZUFzVmFsdWUoKTsKICAgICBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rp
b24oY2FsbGVlQXNWYWx1ZSk7CkBAIC0xMTU3LDggKzExNTcsOCBAQCBpbmxpbmUgY2hhciogdmly
dHVhbEZvcldpdGhGdW5jdGlvbihFeGVjCiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVu
Y3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0
YWJsZSk7CiAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29t
cGlsZUZvcihleGVjQ2FsbGVlLCBmdW5jdGlvbi0+c2NvcGUoKSwga2luZCk7CiAgICAgICAgIGlm
IChlcnJvcikgewotICAgICAgICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGVy
cm9yOwotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGdsb2JhbERh
dGEtPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICBleGVjLT52bSgpLmV4Y2Vw
dGlvbiA9IGVycm9yOworICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvciku
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PGNoYXIqPihleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlV2l0
aEFyaXR5Q2hlY2tGb3Ioa2luZCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CkBAIC0xMjMxLDMxICsx
MjMxLDMxIEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25Ob3RpZnlHbG9iYWwKIAogRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlKEV4ZWNTdGF0ZSogZXhl
YywgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXNvbHZlT3BlcmF0aW9ucyogb3BlcmF0aW9u
cykKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7Cisg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Njb3BlOjpyZXNvbHZl
KGV4ZWMsICpwcm9wZXJ0eU5hbWUsIG9wZXJhdGlvbnMpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlQmFzZShFeGVjU3RhdGUqIGV4ZWMsIElkZW50
aWZpZXIqIHByb3BlcnR5TmFtZSwgUmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMsIFB1dFRv
QmFzZU9wZXJhdGlvbiogcHV0VG9CYXNlT3BlcmF0aW9ucykKIHsKLSAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Njb3BlOjpyZXNvbHZlQmFzZShleGVjLCAqcHJvcGVy
dHlOYW1lLCBmYWxzZSwgb3BlcmF0aW9ucywgcHV0VG9CYXNlT3BlcmF0aW9ucykpOwogfQogCiBF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVCYXNlU3RyaWN0UHV0
KEV4ZWNTdGF0ZSogZXhlYywgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXNvbHZlT3BlcmF0
aW9ucyogb3BlcmF0aW9ucywgUHV0VG9CYXNlT3BlcmF0aW9uKiBwdXRUb0Jhc2VPcGVyYXRpb25z
KQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTU2NvcGU6OnJl
c29sdmVCYXNlKGV4ZWMsICpwcm9wZXJ0eU5hbWUsIHRydWUsIG9wZXJhdGlvbnMsIHB1dFRvQmFz
ZU9wZXJhdGlvbnMpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRp
b25SZXNvbHZlR2xvYmFsKEV4ZWNTdGF0ZSogZXhlYywgUmVzb2x2ZU9wZXJhdGlvbiogcmVzb2x2
ZU9wZXJhdGlvbiwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllciogcHJv
cGVydHlOYW1lKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9i
YWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBl
eGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KTsKICAgICBVTlVT
RURfUEFSQU0ocmVzb2x2ZU9wZXJhdGlvbik7CiAgICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVj
dCk7CkBAIC0xMjY1LDg4ICsxMjY1LDg4IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUmUKIAogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1By
aW1pdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewotICAgIEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
ICAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWU6OmRlY29kZSh2YWx1ZSku
dG9QcmltaXRpdmUoZXhlYykpOwogfQogCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d0FycmF5KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgdm9pZCog
YnVmZmVyLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAm
ZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xv
YmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxjaGFyKj4oY29uc3RydWN0QXJyYXkoZXhlYywgYXJyYXlTdHJ1Y3R1cmUsIHN0YXRpY19j
YXN0PEpTVmFsdWUqPihidWZmZXIpLCBzaXplKSk7CiB9CiAKIGNoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uTmV3RW1wdHlBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlT
dHJ1Y3R1cmUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2Jh
bERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4
ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAotICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+
KEpTQXJyYXk6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgYXJyYXlTdHJ1Y3R1cmUpKTsKKyAgICByZXR1
cm4gYml0d2lzZV9jYXN0PGNoYXIqPihKU0FycmF5OjpjcmVhdGUoKnZtLCBhcnJheVN0cnVjdHVy
ZSkpOwogfQogCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUo
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCBpbnQzMl90IHNpemUp
CiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemUgPCAwKSkKICAgICAgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDxjaGFyKj4odGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4
ZWMsIEFTQ0lJTGl0ZXJhbCgiQXJyYXkgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRp
dmUgaW50ZWdlci4iKSkpKTsKIAotICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KEpTQXJy
YXk6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgYXJyYXlTdHJ1Y3R1cmUsIHNpemUpKTsKKyAgICByZXR1
cm4gYml0d2lzZV9jYXN0PGNoYXIqPihKU0FycmF5OjpjcmVhdGUoKnZtLCBhcnJheVN0cnVjdHVy
ZSwgc2l6ZSkpOwogfQogCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5QnVm
ZmVyKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgc2l6ZV90IHN0
YXJ0LCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVj
LT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFs
RGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFy
Kj4oY29uc3RydWN0QXJyYXkoZXhlYywgYXJyYXlTdHJ1Y3R1cmUsIGV4ZWMtPmNvZGVCbG9jaygp
LT5jb25zdGFudEJ1ZmZlcihzdGFydCksIHNpemUpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdSZWdleHAoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiByZWdl
eHBQdHIpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOwogICAgIFJlZ0V4cCogcmVnZXhwID0gc3RhdGljX2Nhc3Q8UmVnRXhw
Kj4ocmVnZXhwUHRyKTsKICAgICBpZiAoIXJlZ2V4cC0+aXNWYWxpZCgpKSB7CiAgICAgICAgIHRo
cm93RXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgIkludmFsaWQgZmxhZ3Mgc3Vw
cGxpZWQgdG8gUmVnRXhwIGNvbnN0cnVjdG9yLiIpKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShSZWdFeHBPYmplY3Q6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBT
dHJ1Y3R1cmUoKSwgcmVnZXhwKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShSZWdFeHBP
YmplY3Q6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ2V4cCkpOwog
fQogCiBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbihFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEs
IGV4ZWMpOwotICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3Jl
YXRlKGdsb2JhbERhdGEsIGV4ZWMsIGV4ZWMtPmNvZGVCbG9jaygpKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
KyAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2YXRpb246OmNyZWF0ZSh2bSwg
ZXhlYywgZXhlYy0+Y29kZUJsb2NrKCkpOwogICAgIGV4ZWMtPnNldFNjb3BlKGFjdGl2YXRpb24p
OwogICAgIHJldHVybiBhY3RpdmF0aW9uOwogfQogCiBKU0NlbGwqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uQ3JlYXRlQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgLy8g
TkI6IFRoaXMgbmVlZHMgdG8gYmUgZXhjZWVkaW5nbHkgY2FyZWZ1bCB3aXRoIHRvcCBjYWxsIGZy
YW1lIHRyYWNraW5nLCBzaW5jZSBpdAogICAgIC8vIG1heSBiZSBjYWxsZWQgZnJvbSBPU1IgZXhp
dCwgd2hpbGUgdGhlIHN0YXRlIG9mIHRoZSBjYWxsIHN0YWNrIGlzIGJpemFycmUuCi0gICAgQXJn
dW1lbnRzKiByZXN1bHQgPSBBcmd1bWVudHM6OmNyZWF0ZShnbG9iYWxEYXRhLCBleGVjKTsKLSAg
ICBBU1NFUlQoIWdsb2JhbERhdGEuZXhjZXB0aW9uKTsKKyAgICBBcmd1bWVudHMqIHJlc3VsdCA9
IEFyZ3VtZW50czo6Y3JlYXRlKHZtLCBleGVjKTsKKyAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbik7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkNyZWF0ZUlubGluZWRBcmd1bWVudHMoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEg
PSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
Z2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgLy8gTkI6IFRoaXMgbmVlZHMg
dG8gYmUgZXhjZWVkaW5nbHkgY2FyZWZ1bCB3aXRoIHRvcCBjYWxsIGZyYW1lIHRyYWNraW5nLCBz
aW5jZSBpdAogICAgIC8vIG1heSBiZSBjYWxsZWQgZnJvbSBPU1IgZXhpdCwgd2hpbGUgdGhlIHN0
YXRlIG9mIHRoZSBjYWxsIHN0YWNrIGlzIGJpemFycmUuCi0gICAgQXJndW1lbnRzKiByZXN1bHQg
PSBBcmd1bWVudHM6OmNyZWF0ZShnbG9iYWxEYXRhLCBleGVjLCBpbmxpbmVDYWxsRnJhbWUpOwot
ICAgIEFTU0VSVCghZ2xvYmFsRGF0YS5leGNlcHRpb24pOworICAgIEFyZ3VtZW50cyogcmVzdWx0
ID0gQXJndW1lbnRzOjpjcmVhdGUodm0sIGV4ZWMsIGlubGluZUNhbGxGcmFtZSk7CisgICAgQVNT
RVJUKCF2bS5leGNlcHRpb24pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEzNjksMTEg
KzEzNjksMTEgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRlYXJPZmZJbmxpbgogCiBF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFyZ3VtZW50c0xlbmd0aChF
eGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgYXJndW1lbnRzUmVnaXN0ZXIpCiB7Ci0gICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogICAg
IC8vIEhlcmUgd2UgY2FuIGFzc3VtZSB0aGF0IHRoZSBhcmd1bWVybnRzIHdlcmUgY3JlYXRlZC4g
QmVjYXVzZSBvdGhlcndpc2UgdGhlIEpJVCBjb2RlIHdvdWxkCiAgICAgLy8gaGF2ZSBub3QgbWFk
ZSB0aGlzIGNhbGwuCi0gICAgSWRlbnRpZmllciBpZGVudCgmZ2xvYmFsRGF0YSwgImxlbmd0aCIp
OworICAgIElkZW50aWZpZXIgaWRlbnQoJnZtLCAibGVuZ3RoIik7CiAgICAgSlNWYWx1ZSBiYXNl
VmFsdWUgPSBleGVjLT51bmNoZWNrZWRSKGFyZ3VtZW50c1JlZ2lzdGVyKS5qc1ZhbHVlKCk7CiAg
ICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpKTsKQEAgLTEzODEsMTUgKzEzODEs
MTUgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogCiBFbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFyZ3VtZW50QnlWYWwoRXhlY1N0YXRl
KiBleGVjLCBpbnQzMl90IGFyZ3VtZW50c1JlZ2lzdGVyLCBpbnQzMl90IGluZGV4KQogewotICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKIAogICAgIEpTVmFsdWUgYXJndW1lbnRzVmFsdWUgPSBleGVjLT51bmNoZWNrZWRSKGFyZ3Vt
ZW50c1JlZ2lzdGVyKS5qc1ZhbHVlKCk7CiAgICAgCiAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIGFy
Z3VtZW50cywgYW5kIHdlJ3JlIGFjY2Vzc2luZyBvdXQgb2YgYm91bmRzLCB0aGVuIHdlIGhhdmUg
dG8gY3JlYXRlIHRoZQogICAgIC8vIGFyZ3VtZW50cyBpbiBjYXNlIHNvbWVvbmUgaGFzIGluc3Rh
bGxlZCBhIGdldHRlciBvbiBhIG51bWVyaWMgcHJvcGVydHkuCiAgICAgaWYgKCFhcmd1bWVudHNW
YWx1ZSkKLSAgICAgICAgZXhlYy0+dW5jaGVja2VkUihhcmd1bWVudHNSZWdpc3RlcikgPSBhcmd1
bWVudHNWYWx1ZSA9IEFyZ3VtZW50czo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYyk7
CisgICAgICAgIGV4ZWMtPnVuY2hlY2tlZFIoYXJndW1lbnRzUmVnaXN0ZXIpID0gYXJndW1lbnRz
VmFsdWUgPSBBcmd1bWVudHM6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjKTsKICAgICAKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFyZ3VtZW50c1ZhbHVlLmdldChleGVjLCBpbmRleCkpOwog
fQpAQCAtMTM5Nyw4ICsxMzk3LDggQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25HZQogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRJbmxpbmVk
QXJndW1lbnRCeVZhbCgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgYXJndW1lbnRzUmVn
aXN0ZXIsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBpbnQzMl90IGluZGV4KQog
ewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKIAogICAgIEpTVmFsdWUgYXJndW1lbnRzVmFsdWUgPSBleGVjLT51bmNoZWNrZWRS
KGFyZ3VtZW50c1JlZ2lzdGVyKS5qc1ZhbHVlKCk7CiAgICAgCkBAIC0xNDA2LDcgKzE0MDYsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgLy8gYXJndW1l
bnRzIGluIGNhc2Ugc29tZW9uZSBoYXMgaW5zdGFsbGVkIGEgZ2V0dGVyIG9uIGEgbnVtZXJpYyBw
cm9wZXJ0eS4KICAgICBpZiAoIWFyZ3VtZW50c1ZhbHVlKSB7CiAgICAgICAgIGV4ZWMtPnVuY2hl
Y2tlZFIoYXJndW1lbnRzUmVnaXN0ZXIpID0gYXJndW1lbnRzVmFsdWUgPQotICAgICAgICAgICAg
QXJndW1lbnRzOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLCBpbmxpbmVDYWxsRnJh
bWUpOworICAgICAgICAgICAgQXJndW1lbnRzOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYywgaW5s
aW5lQ2FsbEZyYW1lKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShh
cmd1bWVudHNWYWx1ZS5nZXQoZXhlYywgaW5kZXgpKTsKQEAgLTE0MTUsOCArMTQxNSw4IEBAIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2UKIEpTQ2VsbCogREZHX09QRVJB
VElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogZnVuY3Rp
b25FeGVjdXRhYmxlKQogewogICAgIEFTU0VSVChmdW5jdGlvbkV4ZWN1dGFibGUtPmluaGVyaXRz
KCZGdW5jdGlvbkV4ZWN1dGFibGU6OnNfaW5mbykpOwotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKICAgICByZXR1cm4gSlNGdW5j
dGlvbjo6Y3JlYXRlKGV4ZWMsIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGZ1bmN0
aW9uRXhlY3V0YWJsZSksIGV4ZWMtPnNjb3BlKCkpOwogfQogCkBAIC0xNDI0LDggKzE0MjQsOCBA
QCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3RpCiB7CiAgICAgQVNTRVJU
KGZ1bmN0aW9uRXhlY3V0YWJsZUFzQ2VsbC0+aW5oZXJpdHMoJkZ1bmN0aW9uRXhlY3V0YWJsZTo6
c19pbmZvKSk7CiAKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxE
YXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhl
Yyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhl
Y3V0YWJsZSA9CiAgICAgICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGZ1bmN0
aW9uRXhlY3V0YWJsZUFzQ2VsbCk7CkBAIC0xNDQ5LDE1NSArMTQ0OSwxNTUgQEAgSlNDZWxsKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblR5cGVPZihFeAogCiB2b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogYmFzZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
RW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0g
ZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmds
b2JhbERhdGEsIGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogCiAgICAgQVNTRVJUKHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSA+IGJhc2UtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpKTsKLSAgICBBU1NFUlQoIWdsb2JhbERhdGEuaGVhcC5zdG9yYWdlQWxsb2NhdG9yKCkuZmFz
dFBhdGhTaG91bGRTdWNjZWVkKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVv
ZihKU1ZhbHVlKSkpOwotICAgIGJhc2UtPnNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdl
SWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKLSAgICBiYXNlLT5wdXREaXJlY3Qo
Z2xvYmFsRGF0YSwgb2Zmc2V0LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKKyAgICBBU1NFUlQo
IXZtLmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpLmZhc3RQYXRoU2hvdWxkU3VjY2VlZChzdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICBiYXNlLT5z
ZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KHZtLCBzdHJ1Y3R1cmUp
OworICAgIGJhc2UtPnB1dERpcmVjdCh2bSwgb2Zmc2V0LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUp
KTsKIH0KIAogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKIAogICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPigKLSAgICAgICAgQnV0dGVyZmx5OjpjcmVh
dGVVbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIDAsIGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSwg
ZmFsc2UsIDApKTsKKyAgICAgICAgQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKHZtLCAw
LCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHksIGZhbHNlLCAwKSk7CiB9CiAKIGNoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVj
LCBzaXplX3QgbmV3U2l6ZSkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVj
LT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFs
RGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oCi0gICAgICAgIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChnbG9iYWxE
YXRhLCAwLCBuZXdTaXplLCBmYWxzZSwgMCkpOworICAgICAgICBCdXR0ZXJmbHk6OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQodm0sIDAsIG5ld1NpemUsIGZhbHNlLCAwKSk7CiB9CiAKIGNoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFn
ZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0KQog
ewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKIAogICAgIEFTU0VSVCghb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSk7Ci0gICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVT
dG9yYWdlKGdsb2JhbERhdGEsIDAsIGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSk7CisgICAgQnV0
dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCAwLCBpbml0
aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpOwogICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5V2l0aG91dENo
YW5naW5nU3RydWN0dXJlKHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHJlc3VsdCk7CiB9CiAKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0
ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKIAotICAgIEJ1dHRlcmZseSogcmVz
dWx0ID0gb2JqZWN0LT5ncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBvYmplY3QtPnN0
cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdTaXplKTsKKyAgICBCdXR0ZXJmbHkq
IHJlc3VsdCA9IG9iamVjdC0+Z3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIG9iamVjdC0+c3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1NpemUpOwogICAgIG9iamVjdC0+c2V0QnV0
dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKIGNoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uRW5zdXJlSW50MzIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7Ci0gICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OwogICAgIAogICAgIGlmICghY2VsbC0+aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFzT2JqZWN0KGNlbGwpLT5l
bnN1cmVJbnQzMihnbG9iYWxEYXRhKS5kYXRhKCkpOworICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PGNoYXIqPihhc09iamVjdChjZWxsKS0+ZW5zdXJlSW50MzIodm0pLmRhdGEoKSk7CiB9CiAK
IGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlRG91YmxlKEV4ZWNTdGF0ZSogZXhl
YywgSlNDZWxsKiBjZWxsKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMt
Pmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxE
YXRhLCBleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKICAgICAKICAgICBpZiAoIWNlbGwtPmlzT2JqZWN0
KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PGNoYXIqPihhc09iamVjdChjZWxsKS0+ZW5zdXJlRG91YmxlKGdsb2JhbERhdGEpLmRhdGEoKSk7
CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFzT2JqZWN0KGNlbGwpLT5lbnN1
cmVEb3VibGUodm0pLmRhdGEoKSk7CiB9CiAKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
RW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKLSAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CiAgICAgCiAgICAgaWYgKCFjZWxsLT5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gMDsKICAg
ICAKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYXNPYmplY3QoY2VsbCktPmVu
c3VyZUNvbnRpZ3VvdXMoZ2xvYmFsRGF0YSkuZGF0YSgpKTsKKyAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oYXNPYmplY3QoY2VsbCktPmVuc3VyZUNvbnRpZ3VvdXModm0pLmRhdGEo
KSk7CiB9CiAKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmFnZUVuc3VyZUNvbnRpZ3Vv
dXMoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogICAgIAogICAgIGlm
ICghY2VsbC0+aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFzT2JqZWN0KGNlbGwpLT5yYWdlRW5zdXJlQ29udGln
dW91cyhnbG9iYWxEYXRhKS5kYXRhKCkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNo
YXIqPihhc09iamVjdChjZWxsKS0+cmFnZUVuc3VyZUNvbnRpZ3VvdXModm0pLmRhdGEoKSk7CiB9
CiAKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKICAgICAKICAgICBpZiAoIWNlbGwt
PmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KGFzT2JqZWN0KGNlbGwpLT5lbnN1cmVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0
YSkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihhc09iamVjdChjZWxsKS0+
ZW5zdXJlQXJyYXlTdG9yYWdlKHZtKSk7CiB9CiAKIFN0cmluZ0ltcGwqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogc3RyaW5nKQog
ewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKIAogICAgIHJldHVybiBzdHJpbmctPnZhbHVlKGV4ZWMpLmltcGwoKTsKIH0KIAog
SlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1N0cmluZ09iamVjdChFeGVjU3RhdGUq
IGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
ICAgICAKICAgICByZXR1cm4gU3RyaW5nT2JqZWN0OjpjcmVhdGUoZXhlYywgc3RydWN0dXJlLCBz
dHJpbmcpOwogfQogCiBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9TdHJpbmdPbkNl
bGwoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogICAgIAogICAgIHJl
dHVybiBKU1ZhbHVlKGNlbGwpLnRvU3RyaW5nKGV4ZWMpOwogfQogCiBKU0NlbGwqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2
YWx1ZSkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRh
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKCZ2bSwgZXhlYyk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKS50b1N0
cmluZyhleGVjKTsKIH0KIAogSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3Bl
MihFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBsZWZ0LCBKU1N0cmluZyogcmlnaHQpCiB7Ci0g
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOwogCi0gICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlKGdsb2JhbERhdGEsIGxlZnQs
IHJpZ2h0KTsKKyAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGUodm0sIGxlZnQsIHJpZ2h0
KTsKIH0KIAogSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTU3RyaW5nKiBhLCBKU1N0cmluZyogYiwgSlNTdHJpbmcqIGMpCiB7Ci0gICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OwogCi0gICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlKGdsb2JhbERhdGEsIGEsIGIsIGMp
OworICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZSh2bSwgYSwgYiwgYyk7CiB9CiAKIGRv
dWJsZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCBhLCBpbnQzMl90
IGIpCkBAIC0xNjA3LDI5ICsxNjA3LDI5IEBAIGRvdWJsZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkZNb2RPbkludHMKIAogSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ0Zyb21D
aGFyQ29kZShFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3Qgb3AxKQogewotICAgIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICByZXR1
cm4gSlNDOjpzdHJpbmdGcm9tQ2hhckNvZGUoZXhlYywgb3AxKTsKIH0KIAogREZHSGFuZGxlckVu
Y29kZWQgREZHX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVyKEV4ZWNTdGF0ZSogZXhl
YywgdWludDMyX3QgY2FsbEluZGV4KQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9
ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihn
bG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEpTVmFsdWUgZXhjZXB0aW9u
VmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKICAgICBBU1NFUlQoZXhjZXB0aW9uVmFsdWUpOwog
ICAgIAogICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gZXhlYy0+Y29kZUJsb2NrKCktPmJ5dGVjb2Rl
T2Zmc2V0Rm9yQ2FsbEF0SW5kZXgoY2FsbEluZGV4KTsKLSAgICBFeGNlcHRpb25IYW5kbGVyIGhh
bmRsZXIgPSBnZW5lcmljVGhyb3coZ2xvYmFsRGF0YSwgZXhlYywgZXhjZXB0aW9uVmFsdWUsIHZQ
Q0luZGV4KTsKKyAgICBFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXIgPSBnZW5lcmljVGhyb3codm0s
IGV4ZWMsIGV4Y2VwdGlvblZhbHVlLCB2UENJbmRleCk7CiAgICAgQVNTRVJUKGhhbmRsZXIuY2F0
Y2hSb3V0aW5lKTsKICAgICByZXR1cm4gZGZnSGFuZGxlckVuY29kZWQoaGFuZGxlci5jYWxsRnJh
bWUsIGhhbmRsZXIuY2F0Y2hSb3V0aW5lKTsKIH0KIAogREZHSGFuZGxlckVuY29kZWQgREZHX09Q
RVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVySW5TdHViKEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEpTVmFsdWUgZXhjZXB0
aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKICAgICBBU1NFUlQoZXhjZXB0aW9uVmFsdWUp
OwpAQCAtMTYzOCwxNSArMTYzOCwxNSBAQCBERkdIYW5kbGVyRW5jb2RlZCBERkdfT1BFUkFUSU9O
IGxvb2t1cEV4CiAgICAgd2hpbGUgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQogICAgICAg
ICBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcjsKICAgICAK
LSAgICBFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXIgPSBnZW5lcmljVGhyb3coZ2xvYmFsRGF0YSwg
ZXhlYywgZXhjZXB0aW9uVmFsdWUsIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgRXhj
ZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gZ2VuZXJpY1Rocm93KHZtLCBleGVjLCBleGNlcHRpb25W
YWx1ZSwgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAgICBBU1NFUlQoaGFuZGxlci5jYXRj
aFJvdXRpbmUpOwogICAgIHJldHVybiBkZmdIYW5kbGVyRW5jb2RlZChoYW5kbGVyLmNhbGxGcmFt
ZSwgaGFuZGxlci5jYXRjaFJvdXRpbmUpOwogfQogCiBzaXplX3QgREZHX09QRVJBVElPTiBkZmdD
b252ZXJ0SlNWYWx1ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1
ZSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7Cisg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CiAgICAgCiAgICAgLy8gdG9JbnQzMi90b1VJbnQzMiByZXR1cm4gdGhlIHNh
bWUgdmFsdWU7IHdlIHdhbnQgdGhlIHZhbHVlIHplcm8gZXh0ZW5kZWQgdG8gZmlsbCB0aGUgcmVn
aXN0ZXIuCiAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkudG9VSW50MzIoZXhlYyk7
CkBAIC0xNjU0LDE2ICsxNjU0LDE2IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIGRmZ0NvbnZlcnRK
U1ZhbHVlVG8KIAogc2l6ZV90IERGR19PUEVSQVRJT04gZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xl
YW4oRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3ApCiB7Ci0gICAgSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwog
ICAgIAogICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wKS50b0Jvb2xlYW4oZXhl
Yyk7CiB9CiAKIHZvaWQgREZHX09QRVJBVElPTiBkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRp
b25GYWlsdXJlKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogZGVidWdJbmZvUmF3LCB2b2lkKiBzY3Jh
dGNoKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRh
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsK
KyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKICAgICAKICAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRl
YnVnSW5mbyA9IHN0YXRpY19jYXN0PFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyo+KGRlYnVn
SW5mb1Jhdyk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBkZWJ1Z0luZm8tPmNvZGVCbG9j
azsKQEAgLTE3OTgsNyArMTc5OCw3IEBAIGV4dGVybiAiQyIgRW5jb2RlZEpTVmFsdWUgSE9TVF9D
QUxMX1JFVFUKIHsKICAgICBpZiAoIWV4ZWMpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPmdsb2JhbERh
dGEoKS5ob3N0Q2FsbFJldHVyblZhbHVlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4
ZWMtPnZtKCkuaG9zdENhbGxSZXR1cm5WYWx1ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAkocmV2aXNpb24gMTQ4NjM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Nyw3ICs1Nyw3IEBAIHByb3RlY3RlZDoKICAgICAvLyBUaGluZ3MgeW91IG5lZWQgdG8gaGF2
ZSBhIERGRyBjb21waWxlciBwaGFzZS4KICAgICBHcmFwaCYgbV9ncmFwaDsKICAgICAKLSAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEoKSB7IHJldHVybiBtX2dyYXBoLm1fZ2xvYmFsRGF0YTsg
fQorICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fZ3JhcGgubV92bTsgfQogICAgIENvZGVCbG9jayog
Y29kZUJsb2NrKCkgeyByZXR1cm4gbV9ncmFwaC5tX2NvZGVCbG9jazsgfQogICAgIENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jaygpIHsgcmV0dXJuIG1fZ3JhcGgubV9wcm9maWxlZEJsb2NrOyB9CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlz
aW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE3Miw3ICsxNzIsNyBAQCBzdGF0aWMgdm9pZCBsaW5rUmVzdG9y
ZVNjcmF0Y2goTGlua0J1ZmZlCiAKIHN0YXRpYyB2b2lkIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vz
c1N0dWIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVj
dHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVM
b2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJS
b3V0aW5lKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxE
YXRhKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlciBz
dHViSml0OwogICAgICAgICAKQEAgLTIzMSw3ICsyMzEsNyBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0
ZVByb3RvQ2hhaW5BY2Nlc3NTdHViCiAgICAgCiAgICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJK
aXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWls
dXJlQ2FzZXMpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEs
ICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdm0sICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7CiAgICAgCiAgICAgbGlua1Jlc3Rv
cmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFp
bCwgZmFpbHVyZUNhc2VzLCBzdWNjZXNzTGFiZWwsIHNsb3dDYXNlTGFiZWwpOwogICAgIApAQCAt
MjQ3LDcgKzI0Nyw3IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUK
ICAgICAvLyBsaWtlIHRoZSBpbnRlcnByZXRlciBkb2VzLCB0aGVuIGFkZCBhIGNoZWNrIGZvciBy
ZWN1cnNpb24uCiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygp
OwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Cisg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgCiAgICAgaWYgKGlzSlNBcnJheShiYXNlVmFs
dWUpICYmIHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CiAg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRj
aC5kZmcuYmFzZUdQUik7CkBAIC0yOTIsNyArMjkyLDcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVH
ZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICAKICAgICAgICAgZW1pdFJlc3RvcmVTY3JhdGNo
KHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWls
LCBmYWlsdXJlQ2FzZXMpOwogICAgICAgICAKLSAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQsIGNvZGVCbG9jayk7CisgICAgICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgY29kZUJsb2NrKTsKICAgICAgICAgCiAgICAgICAg
IGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN0
dWJJbmZvLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwogICAgICAgICAKQEAgLTMzMCw3
ICszMzAsNyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAg
ICAgIH0KIAogICAgICAgICBkZmdSZXBhdGNoQnlJZFNlbGZBY2Nlc3MoY29kZUJsb2NrLCBzdHVi
SW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBvcGVyYXRpb25HZXRCeUlkQnVp
bGRMaXN0LCB0cnVlKTsKLSAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKCpnbG9iYWxE
YXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICBz
dHViSW5mby5pbml0R2V0QnlJZFNlbGYoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBzdHJ1Y3R1cmUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkBAIC0zNTYs
NyArMzU2LDcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAg
IHJlcGxhY2VXaXRoSnVtcChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbywgc3R1YkluZm8uc3R1YlJv
dXRpbmUtPmNvZGUoKS5jb2RlKCkpOwogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZFByb3RvQnVpbGRMaXN0KTsKICAg
ICAKLSAgICBzdHViSW5mby5pbml0R2V0QnlJZENoYWluKCpnbG9iYWxEYXRhLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgdHJ1
ZSk7CisgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRDaGFpbigqdm0sIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCB0cnVlKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzg2LDcgKzM4Niw3IEBAIHN0YXRpYyBib29sIHRyeUJ1
aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMt
PmNvZGVCbG9jaygpOwogICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7
CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7Ci0gICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKICAgICAKICAgICBBU1NFUlQoc2xvdC5zbG90QmFzZSgpLmlzT2Jq
ZWN0KCkpOwogICAgIApAQCAtNDAwLDcgKzQwMCw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0
QnlJRExpc3QoRXhlY1N0YXQKICAgICAgICAgbGlzdEluZGV4ID0gMDsKICAgICB9IGVsc2UgaWYg
KHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKSB7CiAgICAgICAg
IEFTU0VSVCghc3R1YkluZm8uc3R1YlJvdXRpbmUpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVj
dHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCpnbG9iYWxEYXRh
LCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2Vs
Zk1hbmFnZWRSb3V0aW5lKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSksIHN0dWJJbmZvLnUuZ2V0
QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7CisgICAgICAgIHBvbHlt
b3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qo
KnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBKSVRTdHViUm91dGluZTo6Y3JlYXRl
U2VsZk1hbmFnZWRSb3V0aW5lKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSksIHN0dWJJbmZvLnUu
Z2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7CiAgICAgICAgIHN0
dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxKTsK
ICAgICAgICAgbGlzdEluZGV4ID0gMTsKICAgICB9IGVsc2UgewpAQCAtNDE4LDcgKzQxOCw3IEBA
IHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKICAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVl
R1BSKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBSZWdpc3RlclNldChzdHViSW5mby5w
YXRjaC5kZmcudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOwogICAgICAgICAKLSAgICAgICAg
Q0NhbGxIZWxwZXJzIHN0dWJKaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzIHN0dWJKaXQodm0sIGNvZGVCbG9jayk7CiAgICAgICAgIAogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCB3cm9uZ1N0cnVjdCA9IHN0dWJKaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVj
dHVyZSkpOwogICAgICAgICAKQEAgLTUwNyw3ICs1MDcsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWls
ZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgICAgICBpc0RpcmVjdCA9IHRydWU7CiAgICAg
ICAgIH0KIAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1
YkppdCwgY29kZUJsb2NrKTsKKyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZz
dHViSml0LCBjb2RlQmxvY2spOwogICAgICAgICAKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwg
bGFzdFByb3RvQmVnaW47CiAgICAgICAgIGlmIChsaXN0SW5kZXgpCkBAIC01MzAsMTIgKzUzMCwx
MiBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgICAg
ICAgICAgICAgICgiREZHIEdldEJ5SWQgcG9seW1vcnBoaWMgbGlzdCBhY2Nlc3MgZm9yICVzLCBy
ZXR1cm4gcG9pbnQgJXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVj
LT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcu
ZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICAgICAgICAg
Kmdsb2JhbERhdGEsCisgICAgICAgICAgICAgICAgKnZtLAogICAgICAgICAgICAgICAgIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgICAgICAgICAgc2xvdC5jYWNoZWRQcm9w
ZXJ0eVR5cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OkdldHRlcgogICAgICAgICAgICAgICAgIHx8IHNs
b3QuY2FjaGVkUHJvcGVydHlUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpDdXN0b20pOwogICAgICAg
ICAKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0
KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwg
c3RydWN0dXJlLCBpc0RpcmVjdCk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+
bGlzdFtsaXN0SW5kZXhdLnNldCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0
dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGlzRGlyZWN0KTsKICAgICAgICAgCiAgICAgICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAgICAgICByZXBhdGNoQnVmZmVy
LnJlbGluaygKQEAgLTU3NywxNCArNTc3LDE0IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJ
RFByb3RvTGlzdChFeGUKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VWYWx1ZS5hc0Nl
bGwoKS0+c3RydWN0dXJlKCk7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0g
c3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZl
eGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgCiAgICAg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7
CiAgICAgaW50IGxpc3RJbmRleCA9IDE7CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5
cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9jaGFpbikgewogICAgICAgICBBU1NFUlQoISFzdHViSW5m
by5zdHViUm91dGluZSk7Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIHN0dWJJbmZvLnN0dWJSb3V0aW5lLCBzdHViSW5mby51LmdldEJ5SWRD
aGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5j
aGFpbi5nZXQoKSwgdHJ1ZSk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5l
dyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBzdHViSW5mby5zdHViUm91dGluZSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4u
YmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uY2hhaW4u
Z2V0KCksIHRydWUpOwogICAgICAgICBzdHViSW5mby5zdHViUm91dGluZS5jbGVhcigpOwogICAg
ICAgICBzdHViSW5mby5pbml0R2V0QnlJZFByb3RvTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3QsIDEpOwogICAgIH0gZWxzZSB7CkBAIC02MDMsNyArNjAzLDcgQEAgc3RhdGljIGJvb2wgdHJ5
QnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4ZQogICAgICAgICAKICAgICAgICAgZ2VuZXJhdGVQcm90
b0NoYWluQWNjZXNzU3R1YihleGVjLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBv
ZmZzZXQsIHN0cnVjdHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSksIGxhc3RQcm90b0JlZ2luLCBz
dHViUm91dGluZSk7CiAgICAgICAgIAotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qt
Pmxpc3RbbGlzdEluZGV4XS5zZXQoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHRydWUpOworICAgICAgICBwb2x5bW9ycGhp
Y1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKnZtLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCB0cnVlKTsKICAgICAgICAgCiAg
ICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAgICAgICBy
ZXBsYWNlV2l0aEp1bXAocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8sIHN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKTsKQEAgLTY1Nyw3ICs2NTcsNyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0UmVwbGFj
ZVN0dWIoCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsLAogICAgIFJlZlB0cjxK
SVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRm
Zy5iYXNlR1BSKTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIEdQUlJlZyB2YWx1ZVRhZ0dQ
UiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BSKTsK
QEAgLTczMyw3ICs3MzMsNyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAg
ICAgIGZhaWx1cmUgPSBiYWRTdHJ1Y3R1cmU7CiAgICAgfQogICAgIAotICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7Cisg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2so
KSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSk7
CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOwogICAgICAgICAg
ICAgCkBAIC03NTcsNyArNzU3LDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHVi
KAogICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJlbCwKICAgICBSZWZQdHI8SklUU3R1
YlJvdXRpbmU+JiBzdHViUm91dGluZSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEg
PSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogCiAgICAg
R1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5i
YXNlR1BSKTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQpAQCAtNzcyLDcgKzc3Miw3IEBAIHN0YXRp
YyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICNlbmRpZgogICAgIGFsbG9jYXRvci5sb2Nr
KHZhbHVlR1BSKTsKICAgICAKLSAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdChnbG9iYWxEYXRhKTsK
KyAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSk7CiAgICAgICAgICAgICAKICAgICBHUFJSZWcg
c2NyYXRjaEdQUjEgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAgICAgQVNTRVJU
KHNjcmF0Y2hHUFIxICE9IGJhc2VHUFIpOwpAQCAtODQwLDcgKzg0MCw3IEBAIHN0YXRpYyB2b2lk
IGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAKICAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewogICAg
ICAgICBzaXplX3QgbmV3U2l6ZSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNp
emVvZihKU1ZhbHVlKTsKLSAgICAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3BpZWRBbGxvY2F0b3Ig
PSAmZ2xvYmFsRGF0YS0+aGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7CisgICAgICAgIENvcGllZEFs
bG9jYXRvciogY29waWVkQWxsb2NhdG9yID0gJnZtLT5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsK
ICAgICAgICAgCiAgICAgICAgIGlmICghb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KSB7CiAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJy
ZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSMSk7CkBAIC05MTIsNyArOTEyLDcgQEAgc3RhdGljIHZv
aWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICBzbG93UGF0aC5saW5rKCZzdHViSml0
KTsKICAgICAgICAgCiAgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQ
b3BwaW5nKHN0dWJKaXQpOwotICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0g
Z2xvYmFsRGF0YS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoYWxsb2NhdG9yLmRlc2lyZWRTY3JhdGNo
QnVmZmVyU2l6ZSgpKTsKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZt
LT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhbGxvY2F0b3IuZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXpl
KCkpOwogICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVVc2VkUmVnaXN0ZXJzVG9TY3JhdGNoQnVm
ZmVyKHN0dWJKaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIxKTsKICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKHNsb3QuY2FjaGVkT2Zmc2V0KCkpLCB2YWx1ZUdQUik7CkBAIC05MjQs
NyArOTI0LDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICBz
dWNjZXNzSW5TbG93UGF0aCA9IHN0dWJKaXQuanVtcCgpOwogICAgIH0KICAgICAKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2Nr
KCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29k
ZUJsb2NrKCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRv
RG9uZSkpOwogICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkKICAgICAgICAg
cGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOwpAQCAtOTQ0LDcgKzk0NCw3
IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAgICAgICAgICAg
ICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsCiAgICAgICAgICAgICAgICAgICAgIHRvQ1N0cmlu
ZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICAgICAq
Z2xvYmFsRGF0YSwKKyAgICAgICAgICAgICp2bSwKICAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9j
aygpLT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCiAgICAgICAg
ICAgICBzdHJ1Y3R1cmUpOwpAQCAtOTUzLDcgKzk1Myw3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRU
cmFuc2l0aW9uU3R1YigKIHN0YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHV0
UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQg
cHV0S2luZCkKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygp
OwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Cisg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAKICAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTAwMiwxMyArMTAwMiwxMyBAQCBzdGF0aWMgYm9v
bCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKICAgICAgICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBw
cm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFRyYW5zaXRpb24oKmds
b2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVjdHVyZSwgc3Ry
dWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgcHV0S2luZCA9PSBEaXJlY3QpOworICAgICAgICAgICAg
c3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBwdXRLaW5k
ID09IERpcmVjdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAKICAgICAgICAgZGZnUmVwYXRjaEJ5SWRTZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1
YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgYXBwcm9wcmlhdGVMaXN0QnVp
bGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCksIGZhbHNlKTsKLSAgICAgICAgc3R1
YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNlKCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxh
Y2UoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTEwMjUsNyArMTAyNSw3IEBAIHZvaWQgZGZnUmVw
YXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCAKIHN0YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJ
ZExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQogewogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKIAogICAg
IGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDc3
LDcgKzEwNzcsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGxpc3QtPmFkZEFjY2VzcygKICAgICAgICAgICAgICAg
ICBQdXRCeUlkQWNjZXNzOjp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgICAgICAqZ2xvYmFs
RGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAgICAgICAgICAgICAg
KnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAgICAgICAgICAgICBv
bGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sCiAgICAgICAgICAgICAgICAg
ICAgIHN0dWJSb3V0aW5lKSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMDkyLDcgKzEwOTIsNyBA
QCBzdGF0aWMgYm9vbCB0cnlCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGxpc3QtPmFkZEFjY2VzcygKICAgICAgICAgICAgICAgICBQdXRCeUlkQWNj
ZXNzOjpyZXBsYWNlKAotICAgICAgICAgICAgICAgICAgICAqZ2xvYmFsRGF0YSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIHN0dWJS
b3V0aW5lKSk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xMTE1LDE0ICsxMTE1LDE0IEBAIHZv
aWQgZGZnQnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqIGV4ZWMKICAgICAgICAgZGZnUmVwYXRj
aENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBw
cm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKIH0KIAotc3Rh
dGljIHZvaWQgbGlua1Nsb3dGb3IoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kKQorc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoUmVwYXRjaEJ1ZmZl
ciYgcmVwYXRjaEJ1ZmZlciwgVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIGlmIChraW5kID09IENvZGVGb3JDYWxs
KSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24sIGdsb2JhbERhdGEtPmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRv
cikuY29kZSgpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRv
cikuY29kZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBBU1NFUlQoa2luZCA9PSBD
b2RlRm9yQ29uc3RydWN0KTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8u
Y2FsbFJldHVybkxvY2F0aW9uLCBnbG9iYWxEYXRhLT5nZXRDVElTdHViKHZpcnR1YWxDb25zdHJ1
Y3RUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxs
TGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3Ry
dWN0VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CiB9CiAKIHZvaWQgZGZnTGlua0ZvcihFeGVjU3Rh
dGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNv
ZGVCbG9jaywgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0
ciwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQpAQCAtMTEzMCwzNSArMTEzMCwzNSBAQCB2
b2lkIGRmZ0xpbmtGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGluCiAgICAgQVNTRVJUKCFjYWxs
TGlua0luZm8uc3R1Yik7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBl
eGVjLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSBjYWxsZXJDb2RlQmxvY2stPmdsb2JhbERhdGEoKTsKKyAgICBWTSogdm0gPSBjYWxs
ZXJDb2RlQmxvY2stPnZtKCk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KGNhbGxlckNvZGVCbG9jayk7CiAgICAgCiAgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5r
ZWQoKSk7Ci0gICAgY2FsbExpbmtJbmZvLmNhbGxlZS5zZXQoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+
Z2xvYmFsRGF0YSgpLCBjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luLCBjYWxsZXJDb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwotICAgIGNhbGxMaW5rSW5mby5sYXN0U2VlbkNh
bGxlZS5zZXQoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Z2xvYmFsRGF0YSgpLCBjYWxsZXJDb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOworICAgIGNhbGxMaW5rSW5mby5jYWxsZWUu
c2V0KGV4ZWMtPmNhbGxlckZyYW1lKCktPnZtKCksIGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4s
IGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CisgICAgY2FsbExp
bmtJbmZvLmxhc3RTZWVuQ2FsbGVlLnNldChleGVjLT5jYWxsZXJGcmFtZSgpLT52bSgpLCBjYWxs
ZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwogICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIsIGNvZGVQdHIpOwogICAgIAogICAg
IGlmIChjYWxsZWVDb2RlQmxvY2spCiAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29t
aW5nQ2FsbCgmY2FsbExpbmtJbmZvKTsKICAgICAKICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2Fs
bCkgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2FsbFJldHVy
bkxvY2F0aW9uLCBnbG9iYWxEYXRhLT5nZXRDVElTdHViKGxpbmtDbG9zdXJlQ2FsbFRodW5rR2Vu
ZXJhdG9yKS5jb2RlKCkpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0lu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVu
a0dlbmVyYXRvcikuY29kZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBB
U1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICBsaW5rU2xvd0ZvcihyZXBhdGNo
QnVmZmVyLCBnbG9iYWxEYXRhLCBjYWxsTGlua0luZm8sIENvZGVGb3JDb25zdHJ1Y3QpOworICAg
IGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIENvZGVGb3JDb25z
dHJ1Y3QpOwogfQogCiB2b2lkIGRmZ0xpbmtTbG93Rm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICAg
ICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVC
bG9jaygpOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IGNhbGxlckNvZGVCbG9jay0+
Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKICAgICAK
ICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKICAgICAK
LSAgICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCBnbG9iYWxEYXRhLCBjYWxsTGlua0luZm8s
IGtpbmQpOworICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8s
IGtpbmQpOwogfQogCiB2b2lkIGRmZ0xpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIENh
bGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlLCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgY29kZVB0cikKQEAgLTExNjYsMTEgKzExNjYsMTEgQEAgdm9pZCBkZmdMaW5r
Q2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVjLAogICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0
dWIpOwogICAgIAogICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gZXhlYy0+Y2FsbGVy
RnJhbWUoKS0+Y29kZUJsb2NrKCk7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gY2Fs
bGVyQ29kZUJsb2NrLT5nbG9iYWxEYXRhKCk7CisgICAgVk0qIHZtID0gY2FsbGVyQ29kZUJsb2Nr
LT52bSgpOwogICAgIAogICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+
KGNhbGxMaW5rSW5mby5jYWxsZWVHUFIpOwogICAgIAotICAgIENDYWxsSGVscGVycyBzdHViSml0
KGdsb2JhbERhdGEsIGNhbGxlckNvZGVCbG9jayk7CisgICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQo
dm0sIGNhbGxlckNvZGVCbG9jayk7CiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBz
bG93UGF0aDsKICAgICAKQEAgLTEyMjMsMTEgKzEyMjMsMTEgQEAgdm9pZCBkZmdMaW5rQ2xvc3Vy
ZUNhbGwoRXhlY1N0YXRlKiBleGVjLAogICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NC
ZWZvcmVSZXR1cm4oR1BSSW5mbzo6bm9uQXJnR1BSMik7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAg
c2xvdyA9IHN0dWJKaXQuanVtcCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
Kmdsb2JhbERhdGEsICZzdHViSml0LCBjYWxsZXJDb2RlQmxvY2spOworICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgY2FsbGVyQ29kZUJsb2NrKTsKICAgICAKICAgICBw
YXRjaEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJl
c3MoKSkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KDApKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3cs
IENvZGVMb2NhdGlvbkxhYmVsKGdsb2JhbERhdGEtPmdldENUSVN0dWIodmlydHVhbENhbGxUaHVu
a0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9j
YXRpb25MYWJlbCh2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2Rl
KCkpKTsKICAgICAKICAgICBSZWZQdHI8Q2xvc3VyZUNhbGxTdHViUm91dGluZT4gc3R1YlJvdXRp
bmUgPSBhZG9wdFJlZihuZXcgQ2xvc3VyZUNhbGxTdHViUm91dGluZSgKICAgICAgICAgRklOQUxJ
WkVfREZHX0NPREUoCkBAIC0xMjM1LDE0ICsxMjM1LDE0IEBAIHZvaWQgZGZnTGlua0Nsb3N1cmVD
YWxsKEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgICAgICgiREZHIGNsb3N1cmUgY2FsbCBzdHVi
IGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXQgJXAgKCVzKSIsCiAgICAgICAgICAgICAg
ICAgdG9DU3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRhdGEoKSwgY2FsbExpbmtJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KDApLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAg
ICAgICAgICAgICAgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCB0b0NTdHJpbmcocG9pbnRl
ckR1bXAoY2FsbGVlQ29kZUJsb2NrKSkuZGF0YSgpKSksCi0gICAgICAgICpnbG9iYWxEYXRhLCBj
YWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUsIGV4ZWN1dGFibGUs
IGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKSk7CisgICAgICAgICp2bSwgY2FsbGVyQ29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBleGVjdXRhYmxlLCBjYWxsTGlua0luZm8u
Y29kZU9yaWdpbikpOwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxs
ZXJDb2RlQmxvY2spOwogICAgIAogICAgIHJlcGF0Y2hCdWZmZXIucmVwbGFjZVdpdGhKdW1wKAog
ICAgICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3Rl
cihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luKSwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwo
c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVm
ZmVyLCBnbG9iYWxEYXRhLCBjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsKTsKKyAgICBsaW5rU2xv
d0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCk7CiAgICAg
CiAgICAgY2FsbExpbmtJbmZvLnN0dWIgPSBzdHViUm91dGluZS5yZWxlYXNlKCk7CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyODksMTIg
KzEyODksMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaQogICAg
ICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQx
KCksIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3Ry
dWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgREZH
X1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJH
UFIpLCBub2RlLT5jaGlsZDIoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0g
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFs
RGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgp
KSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7
CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CkBAIC0xMzA0
LDcgKzEzMDQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpCiAg
ICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGls
ZDEoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAKLSAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7
CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hl
ZENlbGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksIAogICAgICAgICAgICAgbV9qaXQuYnJhbmNo
VGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIApAQCAtMTMx
Niw3ICsxMzE2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaQog
ICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS0+Y2hp
bGQyKCksIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCi0gICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkp
OwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94
ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigpLCAKICAgICAgICAgICAgIG1faml0LmJyYW5j
aFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAgLTEz
NjYsMTQgKzEzNjYsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2Jq
ZQogICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENo
aWxkLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwogICAgICAgICBERkdf
VFlQRV9DSEVDSygKICAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQ
UiksIGxlZnRDaGlsZCwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIs
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdl
dCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgCiAgICAgICAgICAgICBtX2ppdC5icmFu
Y2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0x
Mzk1LDcgKzEzOTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmpl
CiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhv
cDJQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3Ay
UGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7CiAg
ICAgICAgIERGR19UWVBFX0NIRUNLKApAQCAtMTQwMyw3ICsxNDAzLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZQogICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRy
KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKICAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmVHUFIsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3Ry
aW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVSZWdzKG9wMlRhZ0dQUiwgb3AyUGF5bG9hZEdQUiksIHJpZ2h0Q2hpbGQsIAogICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sIApAQCAtMTQ3NCwxNCArMTQ3NCwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVk
Q2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVy
ZUdQUik7CiAgICAgICAgIERGR19UWVBFX0NIRUNLKAogICAgICAgICAgICAgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFu
Y2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAg
ICAgICAgICBzdHJ1Y3R1cmVHUFIsIAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkp
OworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZt
KCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsCiAg
ICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Tm9uWmVybywgCkBAIC0xNTAyLDcgKzE1MDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Mob3AyUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksIHN0cnVjdHVyZUdQUik7CiAgICAgICAgIERGR19UWVBFX0NIRUNLKApAQCAtMTUxMCw3ICsx
NTEwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgCiAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAKLSAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyVGFnR1BSLCBvcDJQYXlsb2Fk
R1BSKSwgcmlnaHRDaGlsZCwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAgLTE2MjEsNyArMTYyMSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICAgICAgICAgIG1f
aml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCiAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVQYXlsb2FkR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwogCkBAIC0xNjMwLDcgKzE2
MzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAgICAgICAg
ICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLAogICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwKLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gCiAgICAgICAg
ICAgICBtX2ppdC5icmFuY2hUZXN0OCgKQEAgLTE3NTEsNyArMTc1MSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIKICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0
cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogCkBAIC0xNzYwLDcgKzE3NjAsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAg
ICAgICAgICAgICBzY3JhdGNoR1BSLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkp
OworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZt
KCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKIAogICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBtX2ppdC5icmFuY2hUZXN0OChKSVRDb21w
aWxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJl
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpOwogCkBAIC0yNjg2LDMxICsyNjg2LDMxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRz
KG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJh
eToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9i
YWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIFNp
Z25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFy
cmF5KG1faml0LnZtKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhf
dCksIFNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
QXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVk
QXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBz
aXplb2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgY29tcGlsZUdl
dEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCks
IG5vZGUsIHNpemVvZihpbnQxNl90KSwgU2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBp
bGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlE
ZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Cisg
ICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50
MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBTaWduZWRUeXBlZEFy
cmF5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5
OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0Lmdsb2Jh
bERhdGEoKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBV
bnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBl
ZEFycmF5KG1faml0LnZtKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1
aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRC
eVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4Q2xhbXBlZEFycmF5
RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7
CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+
dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5z
aWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5
OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJh
eShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXpl
b2YodWludDE2X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgY29tcGlsZUdl
dEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigp
LCBub2RlLCBzaXplb2YodWludDE2X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAg
Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMy
QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIFVuc2lnbmVkVHlwZWRB
cnJheSk7CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQu
dm0oKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIFVu
c2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJh
eTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVk
QXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUs
IHNpemVvZihmbG9hdCkpOworICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVk
QXJyYXkobV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2Yo
ZmxvYXQpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0
QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2pp
dC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGRv
dWJsZSkpOworICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9q
aXQudm0oKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yODkyLDM5ICsyODkyLDM5IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIGNv
bXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJy
YXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2Yo
aW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxG
b3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5n
cHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQ4X3QpLCBTaWduZWRUeXBlZEFy
cmF5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJy
YXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFy
cmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIo
KSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgU2lnbmVkVHlwZWRBcnJh
eSk7CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZt
KCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBu
b2RlLCBzaXplb2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAg
ICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgp
LT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9k
ZSwgc2l6ZW9mKGludDMyX3QpLCBTaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGNvbXBp
bGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MzJBcnJheURlc2NyaXB0
b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwg
U2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFs
Rm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9y
KCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVu
c2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBl
ZEFycmF5KG1faml0LnZtKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHBy
b3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpV
aW50OENsYW1wZWRBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVk
QXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwg
YmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWdu
ZWRUeXBlZEFycmF5LCBDbGFtcFJvdW5kaW5nKTsKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZh
bEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9y
KCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVu
c2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAg
IGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50
MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNp
emVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBjb21waWxl
UHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQxNkFycmF5RGVzY3JpcHRv
cigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwg
VW5zaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5
VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQzMkFycmF5RGVzY3Jp
cHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90
KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvcklu
dFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3By
KCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBVbnNpZ25lZFR5cGVk
QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBB
cnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRU
eXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBi
YXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7CisgICAgICAg
ICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQz
MkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6
ZW9mKGZsb2F0KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JG
bG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9y
KCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSk7Cisg
ICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+
ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9k
ZSwgc2l6ZW9mKGRvdWJsZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAg
ICAgICAgZGVmYXVsdDoKQEAgLTMzMTcsNyArMzMxNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxUGF5bG9hZEdQ
UiwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBhbHJlYWR5UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RQcmltaXRpdmUgPSBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhvcDFQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdFByaW1pdGl2
ZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKG9wMVBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgYWxyZWFkeVByaW1pdGl2ZS5saW5r
KCZtX2ppdCk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMVRhZ0dQUiwgcmVzdWx0VGFnR1BS
KTsKQEAgLTMzNTEsNyArMzM1MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aDIgPSBt
X2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVh
bCwKICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3Mob3AxUGF5bG9hZEdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgICAgIFRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMVBheWxvYWRHUFIsIHJl
c3VsdEdQUik7CiAgICAgICAgICAgICAgICAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAgICAg
ICAgICAgICBzbG93UGF0aDEubGluaygmbV9qaXQpOwpAQCAtMzQ1OSw3ICszNDU5LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBzaXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICog
bm9kZS0+bnVtQ2hpbGRyZW4oKTsKLSAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZl
ciA9IG1faml0Lmdsb2JhbERhdGEoKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUp
OworICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbV9qaXQudm0oKS0+c2Ny
YXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOwogICAgICAgICBFbmNvZGVkSlNWYWx1ZSog
YnVmZmVyID0gc2NyYXRjaEJ1ZmZlciA/IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2Ny
YXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IDA7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVu
c2lnbmVkIG9wZXJhbmRJZHggPSAwOyBvcGVyYW5kSWR4IDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsg
KytvcGVyYW5kSWR4KSB7CkBAIC0zNzQ2LDcgKzM3NDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG5vZGUtPnN0cnVjdHVyZSgpOwogICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUg
PSBKU09iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsK
LSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JQdHIgPSAmbV9qaXQuZ2xvYmFsRGF0
YSgpLT5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKGFsbG9jYXRpb25T
aXplKTsKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JQdHIgPSAmbV9qaXQudm0o
KS0+aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihhbGxvY2F0aW9uU2l6
ZSk7CiAKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvclB0ciksIGFs
bG9jYXRvckdQUik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgYWxs
b2NhdG9yR1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIFRydXN0ZWRJbW1QdHIoMCksIHNj
cmF0Y2hHUFIsIHNsb3dQYXRoKTsKQEAgLTQ0MDIsNyArNDQwMiw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5vdFN0cmluZyA9IG1faml0LmJyYW5jaDgoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21w
aWxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKTsKICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKQogICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNL
KEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjU3Ry
aW5nLCBub3RTdHJpbmcpOwotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFs
bFN0cmluZ3Muc3RyaW5nU3RyaW5nKCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgZG9uZUp1
bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSAhPSBTdHJpbmdVc2UpIHsKICAgICAgICAgICAgICAgICBub3RTdHJpbmcubGlu
aygmbV9qaXQpOwpAQCAtNDQxOSwyMiArNDQxOSwyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAKICAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgdGFnR1BSLCB0ZW1wR1BSKTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5v
dE51bWJlciA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsIHRlbXBH
UFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnICsgMSkpOwot
ICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
c21hbGxTdHJpbmdzLm51bWJlclN0cmluZygpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3MubnVtYmVyU3Ry
aW5nKCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5q
dW1wKCkpOwogICAgICAgICAgICAgbm90TnVtYmVyLmxpbmsoJm1faml0KTsKIAogICAgICAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VW5kZWZpbmVkID0gbV9qaXQuYnJhbmNoMzIoSklUQ29t
cGlsZXI6Ok5vdEVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRU
YWcpKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPnNtYWxsU3RyaW5ncy51bmRlZmluZWRTdHJpbmcoKSksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJpbmdz
LnVuZGVmaW5lZFN0cmluZygpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGRvbmVKdW1wcy5h
cHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgICAgIG5vdFVuZGVmaW5lZC5saW5rKCZtX2pp
dCk7CiAKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdE51bGwgPSBtX2ppdC5icmFu
Y2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
Ok51bGxUYWcpKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPnNtYWxsU3RyaW5ncy5vYmplY3RTdHJpbmcoKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJp
bmdzLm9iamVjdFN0cmluZygpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGRvbmVKdW1wcy5h
cHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgICAgIG5vdE51bGwubGluaygmbV9qaXQpOwog
CiAgICAgICAgICAgICAvLyBPbmx5IGJvb2xlYW4gbGVmdAotICAgICAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c21hbGxTdHJpbmdzLmJvb2xlYW5T
dHJpbmcoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1Q
dHIobV9qaXQudm0oKS0+c21hbGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKSksIHJlc3VsdEdQUik7
CiAgICAgICAgIH0KICAgICAgICAgZG9uZUp1bXBzLmxpbmsoJm1faml0KTsKICAgICAgICAgY2Vs
bFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzE1LDEyICsxMzE1LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVPYmplY3RFcXVhbGkKICAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9w
MUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAK
LSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpKSk7CiAgICAgICAgIERGR19UWVBFX0NIRUNLKAogICAgICAgICAgICAgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS0+Y2hpbGQyKCksIFNwZWNPYmplY3QsIG1faml0
LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBHUFJUZW1wb3Jh
cnkgc3RydWN0dXJlKHRoaXMpOwogICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0
dXJlLmdwcigpOwpAQCAtMTMzMCw3ICsxMzMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZU9iamVjdEVxdWFsaQogICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwo
b3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIHN0
cnVjdHVyZUdQUiwgCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5n
U3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLAogICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Ok5vblplcm8sIApAQCAtMTM0Miw3ICsxMzQyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZU9iamVjdEVxdWFsaQogICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwo
b3AyR1BSKSwgbm9kZS0+Y2hpbGQyKCksIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIHN0
cnVjdHVyZUdQUiwgCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5n
U3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigpLAogICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Ok5vblplcm8sIApAQCAtMTM4OCwxNCArMTM4OCwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlT2JqZWN0VG9PYmplCiAgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2Vs
bChvcDFHUFIpLCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAot
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQ
Uik7CiAgICAgICAgIERGR19UWVBFX0NIRUNLKAogICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6
dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQ
dHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAogICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZUdQUiwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5z
dHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLAogICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Ok5vblplcm8sIApAQCAtMTQxNSwxNCArMTQxNSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlT2JqZWN0VG9PYmplCiAgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdo
dENoaWxkLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAot
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQ
Uik7CiAgICAgICAgIERGR19UWVBFX0NIRUNLKAogICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3Ay
R1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQ
dHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAogICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZUdQUiwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5z
dHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwKICAgICAgICAgICAgIG1faml0LmJy
YW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAg
LTE0OTIsMTQgKzE0OTIsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xl
T2JqZQogICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVm
dENoaWxkLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwogICAgICAgICBE
RkdfVFlQRV9DSEVDSygKICAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9w
MUdQUiksIGxlZnRDaGlsZCwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgc3RydWN0dXJl
R1BSLCAKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNv
dXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCAKICAgICAgICAgICAgIG1faml0
LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAK
QEAgLTE1MTksMTQgKzE1MTksMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBI
b2xlT2JqZQogICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwgKH5T
cGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhv
cDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwogICAgICAg
ICBERkdfVFlQRV9DSEVDSygKICAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0
Q2hpbGQsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgc3RydWN0
dXJlR1BSLCAKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciht
X2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4
KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAgLTE2MzEsNyAr
MTYzMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICAg
ICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgKH5TcGVjQ2VsbCkgfCBTcGVj
T2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciht
X2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7CiAKQEAgLTE2MzksNyArMTYzOSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICAgICAgICAg
IEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0
LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LAogICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwKLSAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gCiAgICAgICAgICAg
ICBtX2ppdC5icmFuY2hUZXN0OCgKQEAgLTE3NzQsNyArMTc3NCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIKICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVl
R1BSKSwgbm9kZVVzZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIo
CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKIApAQCAtMTc4Miw3ICsxNzgyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdE9iamVjdE9yT3RoZXJCcgogICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBu
b2RlVXNlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIHNjcmF0
Y2hHUFIsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSkpOwogCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IG1faml0LmJyYW5jaFRlc3Q4KEpJVENvbXBpbGVyOjpaZXJvLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAKQEAgLTI1
ODUsMzEgKzI1ODUsMzEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMobm9kZSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAg
Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFy
cmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7
CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+
aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRB
cnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJh
eToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9i
YWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwg
U2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVk
QXJyYXkobV9qaXQudm0oKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGlu
dDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRU
eXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9k
ZSwgc2l6ZW9mKGludDMyX3QpLCBTaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGNvbXBp
bGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRv
cigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBj
b21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFy
cmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJh
eSk7CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0o
KS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25l
ZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVp
bnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFy
cmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIG5v
ZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OENsYW1wZWRBcnJh
eURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5Ogot
ICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERh
dGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVu
c2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVk
QXJyYXkobV9qaXQudm0oKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1
aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
bkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3Io
KSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAg
ICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MzJBcnJh
eURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6
Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9i
YWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7
CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgp
LT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihmbG9hdCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAg
ICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+
ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSk7CisgICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDY0
QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKQEAgLTI4NzYsMzkgKzI4NzYsMzkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBB
cnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRB
cnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIo
KSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQ4X3QpLCBTaWduZWRUeXBlZEFycmF5
KTsKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0o
KS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9k
ZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAg
ICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5p
bnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwg
c2l6ZW9mKGludDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGNvbXBpbGVQ
dXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MTZBcnJheURlc2NyaXB0b3Io
KSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgU2ln
bmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9y
SW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCks
IGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIFNpZ25l
ZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJh
eShtX2ppdC52bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0
eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBTaWduZWRUeXBlZEFycmF5KTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJy
YXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmds
b2JhbERhdGEoKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHku
Z3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICAg
ICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhB
cnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVv
Zih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAg
ICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCkt
PnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIo
KSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRp
bmcpOworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52
bSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHku
Z3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5LCBDbGFtcFJv
dW5kaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
QXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlw
ZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRU
eXBlZEFycmF5KTsKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXko
bV9qaXQudm0oKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5
LmdwcigpLCBub2RlLCBzaXplb2YodWludDE2X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6VWludDMy
QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0
Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3Bl
cnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwor
ICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51
aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUs
IHNpemVvZih1aW50MzJfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAg
ICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0
YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdwcigp
LCBub2RlLCBzaXplb2YoZmxvYXQpKTsKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZs
b2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2Uu
Z3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZmxvYXQpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToK
LSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9i
YWxEYXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHku
Z3ByKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZh
bEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCks
IGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgpAQCAtMzIzNSw3
ICszMjM1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICAgICAgbV9qaXQubW92ZShvcDFHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYWxyZWFkeVByaW1pdGl2ZSA9IG1faml0
LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AxR1BSLCBHUFJJbmZvOjp0
YWdNYXNrUmVnaXN0ZXIpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90UHJp
bWl0aXZlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdFByaW1p
dGl2ZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBhbHJlYWR5UHJpbWl0aXZlLmxpbmsoJm1f
aml0KTsKICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxR1BSLCByZXN1bHRHUFIpOwpAQCAtMzI2
NSw3ICszMjY1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoMiA9IG1faml0LmJyYW5j
aFB0cigKICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAogICAgICAg
ICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CisgICAgICAgICAgICAgICAgICAg
IFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CiAgICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShvcDFHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgICAgICAg
ICAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgICAgICAgICBzbG93UGF0aDEubGluaygm
bV9qaXQpOwpAQCAtMzM3MSw3ICszMzcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzaXplX3Qgc2NyYXRj
aFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogbm9kZS0+bnVtQ2hpbGRyZW4oKTsKLSAg
ICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1faml0Lmdsb2JhbERhdGEoKS0+
c2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOworICAgICAgICBTY3JhdGNoQnVmZmVy
KiBzY3JhdGNoQnVmZmVyID0gbV9qaXQudm0oKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRj
aFNpemUpOwogICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc2NyYXRjaEJ1ZmZlciA/
IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigp
KSA6IDA7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJZHggPSAwOyBv
cGVyYW5kSWR4IDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5kSWR4KSB7CkBAIC0zNjUz
LDcgKzM2NTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAK
ICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1cmUoKTsKICAgICAg
ICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVj
dHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2Nh
dG9yUHRyID0gJm1faml0Lmdsb2JhbERhdGEoKS0+aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRo
b3V0RGVzdHJ1Y3RvcihhbGxvY2F0aW9uU2l6ZSk7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciog
YWxsb2NhdG9yUHRyID0gJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91
dERlc3RydWN0b3IoYWxsb2NhdGlvblNpemUpOwogCiAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbVB0cihhbGxvY2F0b3JQdHIpLCBhbGxvY2F0b3JHUFIpOwogICAgICAgICBlbWl0QWxsb2Nh
dGVKU09iamVjdChyZXN1bHRHUFIsIGFsbG9jYXRvckdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1
cmUpLCBUcnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CkBAIC00MjkwLDcg
KzQyOTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RTdHJpbmcgPSBtX2ppdC5icmFuY2g4KEpJVENv
bXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGVtcEdQUiwgU3RydWN0dXJl
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSk7CiAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFN0cmluZ1VzZSkKICAgICAg
ICAgICAgICAgICBERkdfVFlQRV9DSEVDSyhKU1ZhbHVlU291cmNlKHZhbHVlR1BSKSwgbm9kZS0+
Y2hpbGQxKCksIFNwZWNTdHJpbmcsIG5vdFN0cmluZyk7Ci0gICAgICAgICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zbWFsbFN0cmluZ3Muc3RyaW5nU3Ry
aW5nKCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRy
KG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy5zdHJpbmdTdHJpbmcoKSksIHJlc3VsdEdQUik7CiAg
ICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpICE9IFN0cmluZ1VzZSkgewogICAgICAgICAgICAg
ICAgIG5vdFN0cmluZy5saW5rKCZtX2ppdCk7CkBAIC00MzA1LDIyICs0MzA1LDIyIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKSB7CiAgICAgICAgICAgICBpc05vdENlbGwu
bGluaygmbV9qaXQpOwogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90TnVtYmVyID0g
bV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnNtYWxsU3RyaW5ncy5udW1iZXJTdHJpbmcoKSksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0o
KS0+c21hbGxTdHJpbmdzLm51bWJlclN0cmluZygpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAg
IGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgICAgIG5vdE51bWJlci5s
aW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFVuZGVmaW5l
ZCA9IG1faml0LmJyYW5jaDY0KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgdmFsdWVHUFIsIEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVVbmRlZmluZWQpKTsKLSAgICAgICAgICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnNtYWxsU3RyaW5ncy51bmRl
ZmluZWRTdHJpbmcoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJpbmdzLnVuZGVmaW5lZFN0cmluZygpKSwgcmVz
dWx0R1BSKTsKICAgICAgICAgICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAg
ICAgICAgICAgIG5vdFVuZGVmaW5lZC5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIG5vdE51bGwgPSBtX2ppdC5icmFuY2g2NChKSVRDb21waWxlcjo6Tm90RXF1
YWwsIHZhbHVlR1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpOwotICAg
ICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c21h
bGxTdHJpbmdzLm9iamVjdFN0cmluZygpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5n
KCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1w
KCkpOwogICAgICAgICAgICAgbm90TnVsbC5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgIC8v
IE9ubHkgYm9vbGVhbiBsZWZ0Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5zbWFsbFN0cmluZ3MuYm9vbGVhblN0cmluZygpKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5z
bWFsbFN0cmluZ3MuYm9vbGVhblN0cmluZygpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgfQogICAg
ICAgICBkb25lSnVtcHMubGluaygmbV9qaXQpOwogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0NiwyMyArNjQ2
LDIzIEBAIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBTcGVjdWxhdGl2ZUoKIHsKICAgICBz
d2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0g
ICAgICAgIHJldHVybiAmbV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCk7
CisgICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+aW50OEFycmF5RGVzY3JpcHRvcigpOwogICAg
IGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQuZ2xvYmFsRGF0
YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpOworICAgICAgICByZXR1cm4gJm1faml0LnZtKCkt
PmludDE2QXJyYXlEZXNjcmlwdG9yKCk7CiAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAg
ICAgICAgcmV0dXJuICZtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCk7
CisgICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKTsKICAg
ICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0Lmdsb2JhbERh
dGEoKS0+dWludDhBcnJheURlc2NyaXB0b3IoKTsKKyAgICAgICAgcmV0dXJuICZtX2ppdC52bSgp
LT51aW50OEFycmF5RGVzY3JpcHRvcigpOwogICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFy
cmF5OgotICAgICAgICByZXR1cm4gJm1faml0Lmdsb2JhbERhdGEoKS0+dWludDhDbGFtcGVkQXJy
YXlEZXNjcmlwdG9yKCk7CisgICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+dWludDhDbGFtcGVk
QXJyYXlEZXNjcmlwdG9yKCk7CiAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAg
IHJldHVybiAmbV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKTsKKyAg
ICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKTsKICAgICBj
YXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC5nbG9iYWxEYXRh
KCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpOworICAgICAgICByZXR1cm4gJm1faml0LnZtKCkt
PnVpbnQzMkFycmF5RGVzY3JpcHRvcigpOwogICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToK
LSAgICAgICAgcmV0dXJuICZtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0
b3IoKTsKKyAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9y
KCk7CiAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0
Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpOworICAgICAgICByZXR1cm4g
Jm1faml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKTsKICAgICBkZWZhdWx0OgogICAg
ICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0xNDIwLDcgKzE0MjAsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNo
UHRyKAogICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7
CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgfQogICAgICAgICBpZiAo
bV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUgJiB+U3BlY09iamVjdCkgewog
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKQEAgLTE0MjgsNyArMTQyOCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICAgICAgICAgICAgICBtX2pp
dC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
CiAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICB9CiAgICAg
fSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKQEAgLTE0NDEs
NyArMTQ0MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAg
ICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCi0g
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKSk7CiAgICAgICAgIH0KICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwKICAg
ICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KApAQCAtMTQ1Niw3ICsxNDU2LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAK
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAKLSAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAg
ICAgfQogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVu
Ym94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigpLAogICAgICAgICAgICAgbV9qaXQuYnJh
bmNoVGVzdDgoCkBAIC0yMDgyLDcgKzIwODIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWxPblN0CiAKICAgICBHUFJUZW1wb3Jhcnkgc21hbGxTdHJpbmdzKHRoaXMpOwog
ICAgIEdQUlJlZyBzbWFsbFN0cmluZ3NSZWcgPSBzbWFsbFN0cmluZ3MuZ3ByKCk7Ci0gICAgbV9q
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpLCBzbWFsbFN0cmluZ3NSZWcp
OworICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0o
KS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSksIHNtYWxsU3RyaW5nc1Jl
Zyk7CiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNtYWxsU3Ry
aW5nc1JlZywgc2NyYXRjaFJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCAwKSwgc2NyYXRj
aFJlZyk7CiAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
MCwgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoUmVnKSk7
CiAgICAgY2VsbFJlc3VsdChzY3JhdGNoUmVnLCBtX2N1cnJlbnROb2RlKTsKQEAgLTIwOTksNyAr
MjA5OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVGcm9tQ2hhckNvZGUKIAogICAg
IEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZCht
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywg
VHJ1c3RlZEltbTMyKDB4ZmYpKSk7Ci0gICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0
ZXJTdHJpbmdzKCkpLCBzbWFsbFN0cmluZ3NSZWcpOworICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJh
Y3RlclN0cmluZ3MoKSksIHNtYWxsU3RyaW5nc1JlZyk7CiAgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNtYWxsU3RyaW5nc1JlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciwgMCksIHNjcmF0Y2hSZWcpOwogCiAgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hSZWcp
KTsKQEAgLTMxNDAsOSArMzE0MCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYWtl
Um9wZShOb2QKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgCiAg
ICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIE1hcmtlZEFsbG9jYXRvciYg
bWFya2VkQWxsb2NhdG9yID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT5oZWFwLmFsbG9jYXRvckZvck9i
amVjdFdpdGhJbW1vcnRhbFN0cnVjdHVyZURlc3RydWN0b3Ioc2l6ZW9mKEpTUm9wZVN0cmluZykp
OworICAgIE1hcmtlZEFsbG9jYXRvciYgbWFya2VkQWxsb2NhdG9yID0gbV9qaXQudm0oKS0+aGVh
cC5hbGxvY2F0b3JGb3JPYmplY3RXaXRoSW1tb3J0YWxTdHJ1Y3R1cmVEZXN0cnVjdG9yKHNpemVv
ZihKU1JvcGVTdHJpbmcpKTsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoJm1hcmtlZEFs
bG9jYXRvciksIGFsbG9jYXRvckdQUik7Ci0gICAgZW1pdEFsbG9jYXRlSlNDZWxsKHJlc3VsdEdQ
UiwgYWxsb2NhdG9yR1BSLCBUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5n
U3RydWN0dXJlLmdldCgpKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOworICAgIGVtaXRBbGxvY2F0
ZUpTQ2VsbChyZXN1bHRHUFIsIGFsbG9jYXRvckdQUiwgVHJ1c3RlZEltbVB0cihtX2ppdC52bSgp
LT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAgICAgICAg
IAogICAgIG1faml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHJlc3VsdEdQUiwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSkpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1PcEdQUnM7ICsraSkKQEAgLTM2ODQsNyArMzY4NCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpbmdFcXVhbGkKICAgICAgICAgSlNWYWx1ZVNv
dXJjZTo6dW5ib3hlZENlbGwobGVmdEdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjU3RyaW5nLCBt
X2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCiAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhsZWZ0R1BSLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSkpOwogICAgIAogICAgIC8vIEl0J3Mgc2FmZSB0byBicmFuY2ggYXJvdW5kIHRo
ZSB0eXBlIGNoZWNrIGJlbG93LCBzaW5jZSBwcm92aW5nIHRoYXQgdGhlIHZhbHVlcyBhcmUKICAg
ICAvLyBlcXVhbCBkb2VzIGluZGVlZCBwcm92ZSB0aGF0IHRoZSByaWdodCB2YWx1ZSBpcyBhIHN0
cmluZy4KQEAgLTM2OTQsNyArMzY5NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVT
dHJpbmdFcXVhbGkKICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwocmlnaHRHUFIp
LCBub2RlLT5jaGlsZDIoKSwgU3BlY1N0cmluZywgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MocmlnaHRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAKICAgICBtX2pp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobGVmdEdQUiwgSlNTdHJpbmc6Om9mZnNl
dE9mTGVuZ3RoKCkpLCBsZW5ndGhHUFIpOwogICAgIApAQCAtNDEyMSw3ICs0MTIxLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvU3RyaW5nT25DZQogICAgICAgICAKICAgICAgICAg
bV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc1N0
cmluZyA9IG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpFcXVhbCwg
cmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6RXF1YWwsIHJlc3VsdEdQUiwg
VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKICAgICAg
ICAgCiAgICAgICAgIHNwZWN1bGF0ZVN0cmluZ09iamVjdEZvclN0cnVjdHVyZShub2RlLT5jaGls
ZDEoKSwgcmVzdWx0R1BSKTsKICAgICAgICAgCkBAIC00MTUxLDcgKzQxNTEsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlVG9TdHJpbmdPbkNlCiAgICAgICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBuZWVkQ2FsbCA9IG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBKSVRD
b21waWxlcjo6Tm90RXF1YWwsCiAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
b3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7Cisg
ICAgICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxR1BSLCByZXN1bHRHUFIpOwogICAg
ICAgICAgICAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgICAgIG5lZWRDYWxsLmxpbmso
Jm1faml0KTsKQEAgLTQyNjQsNyArNDI2NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1
bGF0ZU9iamVjdChFZGcKICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoZ3ByKSwg
ZWRnZSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGdwciwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkp
KSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgp
LT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNw
ZWN1bGF0ZU9iamVjdE9yT3RoZXIoRWRnZSBlZGdlKQpAQCAtNDI4Myw3ICs0MjgzLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT2JqZWN0T3JPdAogICAgICAgICBKU1ZhbHVlUmVn
cyhncHIpLCBlZGdlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigK
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhncHIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgbm90Q2VsbC5saW5r
KCZtX2ppdCk7CiAgICAgaWYgKG5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090
aGVyKSkgewpAQCAtNDMwNiw3ICs0MzA2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRlT2JqZWN0T3JPdAogICAgICAgICBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBl
ZGdlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhwYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIG5vdENlbGwubGluaygm
bV9qaXQpOwogICAgIGlmIChuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhl
cikpIHsKQEAgLTQzMzQsNyArNDMzNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0
ZVN0cmluZyhFZGcKICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoZ3ByKSwgZWRn
ZSwgU3BlY1N0cmluZywgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGdwciwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkp
KSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgp
LT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNw
ZWN1bGF0ZVN0cmluZ09iamVjdChFZGdlIGVkZ2UsIEdQUlJlZyBncHIpCkBAIC00MzcyLDcgKzQz
NzIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVTdHJpbmdPclN0CiAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhncHIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzU3Ry
aW5nID0gbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICBKSVRDb21waWxlcjo6RXF1YWwsIHN0cnVj
dHVyZUdQUiwgVHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkpOworICAgICAgICBKSVRDb21waWxlcjo6RXF1YWwsIHN0cnVjdHVyZUdQUiwgVHJ1
c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKICAgICAKICAg
ICBzcGVjdWxhdGVTdHJpbmdPYmplY3RGb3JTdHJ1Y3R1cmUoZWRnZSwgc3RydWN0dXJlR1BSKTsK
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTc2MSw3ICsxNzYxLDcgQEAgcHVi
bGljOgogICAgICAgICAvLyBhbnl3YXkgc2luY2UgaXQgd2FzIG5vdCBiZWluZyB1cGRhdGVkIGJ5
IEpJVCdlZCBjb2RlIGJ5IGRlc2lnbi4KIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2l6ZW9mKHZvaWQqKSAvIDQ7IGkrKykKLSAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1
c3RlZEltbTMyKDB4YmFkYmVlZiksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZtX2ppdC5nbG9i
YWxEYXRhKCktPnRvcENhbGxGcmFtZSkgKyBpICogNCk7CisgICAgICAgICAgICBtX2ppdC5zdG9y
ZTMyKFRydXN0ZWRJbW0zMigweGJhZGJlZWYpLCByZWludGVycHJldF9jYXN0PGNoYXIqPigmbV9q
aXQudm0oKS0+dG9wQ2FsbEZyYW1lKSArIGkgKiA0KTsKICAgICB9CiAjZWxzZQogICAgIHZvaWQg
cHJlcGFyZUZvckV4dGVybmFsQ2FsbCgpIHsgfQpAQCAtMjE1NCw3ICsyMTU0LDcgQEAgcHVibGlj
OgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNpemVUeXBlPgogICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShTaXplVHlwZSBzaXplLCBHUFJSZWcgcmVzdWx0
R1BSKQogICAgIHsKLSAgICAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3BpZWRBbGxvY2F0b3IgPSAm
bV9qaXQuZ2xvYmFsRGF0YSgpLT5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKKyAgICAgICAgQ29w
aWVkQWxsb2NhdG9yKiBjb3BpZWRBbGxvY2F0b3IgPSAmbV9qaXQudm0oKS0+aGVhcC5zdG9yYWdl
QWxsb2NhdG9yKCk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKCZjb3BpZWRBbGxv
Y2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgcmVzdWx0R1BSKTsKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hTdWJQdHIoSklUQ29tcGlsZXI6OlNp
Z25lZCwgc2l6ZSwgcmVzdWx0R1BSKTsKQEAgLTIyMDEsMTEgKzIyMDEsMTEgQEAgcHVibGljOgog
ICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IDA7CiAgICAgICAgIHNpemVfdCBz
aXplID0gQ2xhc3NUeXBlOjphbGxvY2F0aW9uU2l6ZSgwKTsKICAgICAgICAgaWYgKENsYXNzVHlw
ZTo6bmVlZHNEZXN0cnVjdGlvbiAmJiBDbGFzc1R5cGU6Omhhc0ltbW9ydGFsU3RydWN0dXJlKQot
ICAgICAgICAgICAgYWxsb2NhdG9yID0gJm1faml0Lmdsb2JhbERhdGEoKS0+aGVhcC5hbGxvY2F0
b3JGb3JPYmplY3RXaXRoSW1tb3J0YWxTdHJ1Y3R1cmVEZXN0cnVjdG9yKHNpemUpOworICAgICAg
ICAgICAgYWxsb2NhdG9yID0gJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0
aEltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3RvcihzaXplKTsKICAgICAgICAgZWxzZSBpZiAoQ2xh
c3NUeXBlOjpuZWVkc0Rlc3RydWN0aW9uKQotICAgICAgICAgICAgYWxsb2NhdG9yID0gJm1faml0
Lmdsb2JhbERhdGEoKS0+aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRoTm9ybWFsRGVzdHJ1Y3Rv
cihzaXplKTsKKyAgICAgICAgICAgIGFsbG9jYXRvciA9ICZtX2ppdC52bSgpLT5oZWFwLmFsbG9j
YXRvckZvck9iamVjdFdpdGhOb3JtYWxEZXN0cnVjdG9yKHNpemUpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBhbGxvY2F0b3IgPSAmbV9qaXQuZ2xvYmFsRGF0YSgpLT5oZWFwLmFsbG9jYXRv
ckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKHNpemUpOworICAgICAgICAgICAgYWxsb2NhdG9y
ID0gJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3Io
c2l6ZSk7CiAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBzY3Jh
dGNoR1BSMSk7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgc2NyYXRj
aEdQUjEsIHN0cnVjdHVyZSwgc3RvcmFnZSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCShyZXZpc2lvbiAx
NDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDEyICszNiwxMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBv
c3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBNYWNyb0Fzc2Vt
YmxlciBqaXQ7CiAgICAgCiAgICAgc2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSAqIChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIEZQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzKTsKLSAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gZ2xvYmFsRGF0
YS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOworICAgIFNjcmF0Y2hCdWZmZXIq
IHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOwog
ICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+
KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKQEAgLTg0LDkgKzg0
LDkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVAogI2VuZGlmCiAg
ICAgfQogICAgIAotICAgIGppdC5qdW1wKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3Mo
Jmdsb2JhbERhdGEtPm9zckV4aXRKdW1wRGVzdGluYXRpb24pKTsKKyAgICBqaXQuanVtcChNYWNy
b0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZ2bS0+b3NyRXhpdEp1bXBEZXN0aW5hdGlvbikp
OwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIEdM
T0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdM
T0JBTF9USFVOS19JRCk7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhmdW5jdGlvbkNhbGws
IGNvbXBpbGVPU1JFeGl0KTsKICAgICAKQEAgLTEwOCw5ICsxMDgsOSBAQCBpbmxpbmUgdm9pZCBl
bWl0UG9pbnRlclZhbGlkYXRpb24oQ0NhbGxICiAjZW5kaWYKIH0KIAotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICBDQ2FsbEhlbHBlcnMgaml0KGds
b2JhbERhdGEpOworICAgIENDYWxsSGVscGVycyBqaXQodm0pOwogICAgIAogICAgIC8vIFdlIHdp
bGwganVtcCB0byBoZXJlIGlmIHRoZSBKSVQgY29kZSB0aGlua3MgaXQncyBtYWtpbmcgYSBjYWxs
LCBidXQgdGhlCiAgICAgLy8gbGlua2luZyBoZWxwZXIgKEMrKyBjb2RlKSBkZWNpZGVkIHRvIHRo
cm93IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkLiBXZSB3aWxsCkBAIC0xMzcsMTIgKzEzNywxMiBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tCiAgICAgZW1pdFBvaW50ZXJW
YWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKICAgICBqaXQuanVtcChH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKmdsb2JhbERhdGEsICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsICgiREZHIHRocm93IGV4Y2VwdGlvbiBmcm9tIGNhbGwgc2xv
dyBwYXRoIHRodW5rIikpOwogfQogCiBzdGF0aWMgdm9pZCBzbG93UGF0aEZvcigKLSAgICBDQ2Fs
bEhlbHBlcnMmIGppdCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBQX0RGR09wZXJhdGlvbl9F
IHNsb3dQYXRoRnVuY3Rpb24pCisgICAgQ0NhbGxIZWxwZXJzJiBqaXQsIFZNKiB2bSwgUF9ERkdP
cGVyYXRpb25fRSBzbG93UGF0aEZ1bmN0aW9uKQogewogICAgIGppdC5wcmVzZXJ2ZVJldHVybkFk
ZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMik7CiAgICAgZW1pdFBvaW50ZXJWYWxp
ZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMik7CkBAIC0xNTEsNyArMTUxLDcgQEAgc3Rh
dGljIHZvaWQgc2xvd1BhdGhGb3IoCiAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKICAg
ICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAogICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlJldHVyblBDKSk7
Ci0gICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmZ2xvYmFsRGF0
YS0+dG9wQ2FsbEZyYW1lKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGppdC5w
b2tlNjQoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBKSVRTVEFDS0ZSQU1FX0FS
R1NfSU5ERVgpOwogI2Vsc2UKQEAgLTE4Myw3ICsxODMsNyBAQCBzdGF0aWMgdm9pZCBzbG93UGF0
aEZvcigKIH0KIAogc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rRm9yVGh1bmtHZW5l
cmF0b3IoCi0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCisgICAgVk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAg
ICAgLy8gVGhlIHJldHVybiBhZGRyZXNzIGlzIG9uIHRoZSBzdGFjayBvciBpbiB0aGUgbGluayBy
ZWdpc3Rlci4gV2Ugd2lsbCBoZW5jZQogICAgIC8vIHNhdmUgdGhlIHJldHVybiBhZGRyZXNzIHRv
IHRoZSBjYWxsIGZyYW1lIHdoaWxlIHdlIG1ha2UgYSBDKysgZnVuY3Rpb24gY2FsbApAQCAtMTkz
LDQ2ICsxOTMsNDYgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rRm9yVGh1bgog
ICAgIC8vIGFuZCBhbGwgb3RoZXIgcmVnaXN0ZXJzIHRvIGJlIGF2YWlsYWJsZSBmb3IgdXNlLiBX
ZSB1c2UgSklUU3RhY2tGcmFtZTo6YXJncwogICAgIC8vIHRvIHNhdmUgaW1wb3J0YW50IGluZm9y
bWF0aW9uIGFjcm9zcyBjYWxscy4KICAgICAKLSAgICBDQ2FsbEhlbHBlcnMgaml0KGdsb2JhbERh
dGEpOworICAgIENDYWxsSGVscGVycyBqaXQodm0pOwogICAgIAotICAgIHNsb3dQYXRoRm9yKGpp
dCwgZ2xvYmFsRGF0YSwga2luZCA9PSBDb2RlRm9yQ2FsbCA/IG9wZXJhdGlvbkxpbmtDYWxsIDog
b3BlcmF0aW9uTGlua0NvbnN0cnVjdCk7CisgICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwga2luZCA9
PSBDb2RlRm9yQ2FsbCA/IG9wZXJhdGlvbkxpbmtDYWxsIDogb3BlcmF0aW9uTGlua0NvbnN0cnVj
dCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0
Y2hCdWZmZXIsCiAgICAgICAgICgiREZHIGxpbmsgJXMgc2xvdyBwYXRoIHRodW5rIiwga2luZCA9
PSBDb2RlRm9yQ2FsbCA/ICJjYWxsIiA6ICJjb25zdHJ1Y3QiKSk7CiB9CiAKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkK
IHsKLSAgICByZXR1cm4gbGlua0ZvclRodW5rR2VuZXJhdG9yKGdsb2JhbERhdGEsIENvZGVGb3JD
YWxsKTsKKyAgICByZXR1cm4gbGlua0ZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ2FsbCk7
CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3Io
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25z
dHJ1Y3RUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIGxpbmtGb3JUaHVua0dl
bmVyYXRvcihnbG9iYWxEYXRhLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICByZXR1cm4gbGlua0Zv
clRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAogLy8gRm9yIGNsb3N1
cmUgb3B0aW1pemF0aW9ucywgd2Ugb25seSBpbmNsdWRlIGNhbGxzLCBzaW5jZSBpZiB5b3UncmUg
dXNpbmcgY2xvc3VyZXMgZm9yCiAvLyBvYmplY3QgY29uc3RydWN0aW9uIHRoZW4geW91J3JlIGdv
aW5nIHRvIGxvc2UgYmlnIHRpbWUgYW55d2F5LgotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtD
bG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7
Ci0gICAgQ0NhbGxIZWxwZXJzIGppdChnbG9iYWxEYXRhKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0
KHZtKTsKICAgICAKLSAgICBzbG93UGF0aEZvcihqaXQsIGdsb2JhbERhdGEsIG9wZXJhdGlvbkxp
bmtDbG9zdXJlQ2FsbCk7CisgICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua0Ns
b3N1cmVDYWxsKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRh
LCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZt
LCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNo
QnVmZmVyLCAoIkRGRyBsaW5rIGNsb3N1cmUgY2FsbCBzbG93IHBhdGggdGh1bmsiKSk7CiB9CiAK
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbEZvclRodW5rR2VuZXJhdG9yKAot
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
KQorICAgIFZNKiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIC8vIFRo
ZSByZXR1cm4gYWRkcmVzcyBpcyBvbiB0aGUgc3RhY2ssIG9yIGluIHRoZSBsaW5rIHJlZ2lzdGVy
LiBXZSB3aWxsIGhlbmNlCiAgICAgLy8ganVtcCB0byB0aGUgY2FsbGVlLCBvciBzYXZlIHRoZSBy
ZXR1cm4gYWRkcmVzcyB0byB0aGUgY2FsbCBmcmFtZSB3aGlsZSB3ZQogICAgIC8vIG1ha2UgYSBD
KysgZnVuY3Rpb24gY2FsbCB0byB0aGUgYXBwcm9wcmlhdGUgREZHIG9wZXJhdGlvbi4KIAotICAg
IENDYWxsSGVscGVycyBqaXQoZ2xvYmFsRGF0YSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7
CiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZTsKIApAQCAtMzA3LDIy
ICszMDcsMjIgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yVAogICAg
IAogICAgIC8vIEhlcmUgd2UgZG9uJ3Qga25vdyBhbnl0aGluZywgc28gcmV2ZXJ0IHRvIHRoZSBm
dWxsIHNsb3cgcGF0aC4KICAgICAKLSAgICBzbG93UGF0aEZvcihqaXQsIGdsb2JhbERhdGEsIGtp
bmQgPT0gQ29kZUZvckNhbGwgPyBvcGVyYXRpb25WaXJ0dWFsQ2FsbCA6IG9wZXJhdGlvblZpcnR1
YWxDb25zdHJ1Y3QpOworICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIGtpbmQgPT0gQ29kZUZvckNh
bGwgPyBvcGVyYXRpb25WaXJ0dWFsQ2FsbCA6IG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QpOwog
ICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIEdMT0JB
TF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JB
TF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCiAgICAgICAgIHBhdGNoQnVm
ZmVyLAogICAgICAgICAoIkRGRyB2aXJ0dWFsICVzIHNsb3cgcGF0aCB0aHVuayIsIGtpbmQgPT0g
Q29kZUZvckNhbGwgPyAiY2FsbCIgOiAiY29uc3RydWN0IikpOwogfQogCi1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgdmlydHVhbENhbGxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENhbGxUaHVua0dlbmVyYXRvcihWTSog
dm0pCiB7Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcihnbG9iYWxEYXRhLCBD
b2RlRm9yQ2FsbCk7CisgICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29k
ZUZvckNhbGwpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENvbnN0cnVjdFRo
dW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVy
biB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3IoZ2xvYmFsRGF0YSwgQ29kZUZvckNvbnN0cnVjdCk7
CisgICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVj
dCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVGh1bmtzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdUaHVua3MuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUaHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMjEgKzM0LDIxIEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIAog
bmFtZXNwYWNlIERGRyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlv
blRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9z
ckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qKTsKIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihKU0dsb2JhbERhdGEq
KTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhH
ZW5lcmF0b3IoVk0qKTsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NvbnN0cnVj
dFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29u
c3RydWN0VGh1bmtHZW5lcmF0b3IoVk0qKTsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtD
bG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7CiAKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihKU0dsb2Jh
bERhdGEqKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9y
KFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJh
dG9yKFZNKik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0FsbG9jYXRvci5oCShyZXZpc2lvbiAxNDg2MzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0FsbG9jYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIEJsb2NrQWxsb2NhdG9yOwogY2xhc3MgQ29waWVk
QmxvY2s7CiBjbGFzcyBDb3B5V29ya0xpc3RTZWdtZW50OwogY2xhc3MgSGFuZGxlQmxvY2s7Ci1j
bGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIGNsYXNzIE1hcmtTdGFja1NlZ21lbnQ7CiBj
bGFzcyBNYXJrZWRCbG9jazsKIGNsYXNzIFdlYWtCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjksNyArNjksNyBAQCBDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5QWxsb2NhdGVTCiAg
ICAgaWYgKGlzT3ZlcnNpemUoYnl0ZXMpKQogICAgICAgICByZXR1cm4gdHJ5QWxsb2NhdGVPdmVy
c2l6ZShieXRlcywgb3V0UHRyKTsKICAgICAKLSAgICBBU1NFUlQobV9oZWFwLT5nbG9iYWxEYXRh
KCktPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKKyAgICBBU1NFUlQo
bV9oZWFwLT52bSgpLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAg
ICAgbV9oZWFwLT5kaWRBbGxvY2F0ZShtX2FsbG9jYXRvci5jdXJyZW50Q2FwYWNpdHkoKSk7CiAK
ICAgICBhbGxvY2F0ZUJsb2NrKCk7CkBAIC0xMDMsNyArMTAzLDcgQEAgQ2hlY2tlZEJvb2xlYW4g
Q29waWVkU3BhY2U6OnRyeVJlYWxsb2NhdAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAg
ICB2b2lkKiBvbGRQdHIgPSAqcHRyOwotICAgIEFTU0VSVCghbV9oZWFwLT5nbG9iYWxEYXRhKCkt
PmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkpOworICAgIEFTU0VSVCghbV9oZWFwLT52bSgpLT5pc0lu
aXRpYWxpemluZ09iamVjdCgpKTsKICAgICAKICAgICBpZiAoQ29waWVkU3BhY2U6OmJsb2NrRm9y
KG9sZFB0ciktPmlzT3ZlcnNpemUoKSB8fCBpc092ZXJzaXplKG5ld1NpemUpKQogICAgICAgICBy
ZXR1cm4gdHJ5UmVhbGxvY2F0ZU92ZXJzaXplKHB0ciwgb2xkU2l6ZSwgbmV3U2l6ZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaAko
cmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3Bh
Y2VJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJD
b3BpZWRTcGFjZS5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJIZWFwQmxvY2suaCIK
LSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0
Zi9DaGVja2VkQm9vbGVhbi5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE1MCw3ICsxNTAsNyBA
QCBpbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6YWxsb2NhdGVCbG9jaygpCiAKIGlubGluZSBDaGVj
a2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5QWxsb2NhdGUoc2l6ZV90IGJ5dGVzLCB2b2lkKiog
b3V0UHRyKQogewotICAgIEFTU0VSVCghbV9oZWFwLT5nbG9iYWxEYXRhKCktPmlzSW5pdGlhbGl6
aW5nT2JqZWN0KCkpOworICAgIEFTU0VSVCghbV9oZWFwLT52bSgpLT5pc0luaXRpYWxpemluZ09i
amVjdCgpKTsKIAogICAgIGlmICghbV9hbGxvY2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsIG91dFB0
cikpCiAgICAgICAgIHJldHVybiB0cnlBbGxvY2F0ZVNsb3dDYXNlKGJ5dGVzLCBvdXRQdHIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERh
dGEuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9H
Q1RocmVhZFNoYXJlZERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAj
aW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKICNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMuaCIK
ICNpbmNsdWRlICJHQ1RocmVhZC5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1
ZGUgIlZNLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3Iu
aCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKQEAgLTUyLDExICs1MiwxMSBAQCBz
aXplX3QgR0NUaHJlYWRTaGFyZWREYXRhOjpjaGlsZFZpc2l0Q291CiB9CiAjZW5kaWYKIAotR0NU
aHJlYWRTaGFyZWREYXRhOjpHQ1RocmVhZFNoYXJlZERhdGEoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKQotICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCi0gICAgLCBtX2NvcGllZFNwYWNl
KCZnbG9iYWxEYXRhLT5oZWFwLm1fc3RvcmFnZVNwYWNlKQorR0NUaHJlYWRTaGFyZWREYXRhOjpH
Q1RocmVhZFNoYXJlZERhdGEoVk0qIHZtKQorICAgIDogbV92bSh2bSkKKyAgICAsIG1fY29waWVk
U3BhY2UoJnZtLT5oZWFwLm1fc3RvcmFnZVNwYWNlKQogICAgICwgbV9zaG91bGRIYXNoQ29ucyhm
YWxzZSkKLSAgICAsIG1fc2hhcmVkTWFya1N0YWNrKGdsb2JhbERhdGEtPmhlYXAuYmxvY2tBbGxv
Y2F0b3IoKSkKKyAgICAsIG1fc2hhcmVkTWFya1N0YWNrKHZtLT5oZWFwLmJsb2NrQWxsb2NhdG9y
KCkpCiAgICAgLCBtX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzKDApCiAgICAgLCBtX3Bh
cmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQoZmFsc2UpCiAgICAgLCBtX2NvcHlJbmRleCgwKQpAQCAt
MTE2LDcgKzExNiw3IEBAIHZvaWQgR0NUaHJlYWRTaGFyZWREYXRhOjpyZXNldCgpCiAgICAgbV93
ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5yZW1vdmVBbGwoKTsKIAogICAgIGlmIChtX3Nob3VsZEhh
c2hDb25zKSB7Ci0gICAgICAgIG1fZ2xvYmFsRGF0YS0+cmVzZXROZXdTdHJpbmdzU2luY2VMYXN0
SGFzaENvbnMoKTsKKyAgICAgICAgbV92bS0+cmVzZXROZXdTdHJpbmdzU2luY2VMYXN0SGFzaENv
bnMoKTsKICAgICAgICAgbV9zaG91bGRIYXNoQ29ucyA9IGZhbHNlOwogICAgIH0KIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5oCShy
ZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNo
YXJlZERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQAogbmFtZXNwYWNlIEpT
QyB7CiAKIGNsYXNzIEdDVGhyZWFkOwotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiBj
bGFzcyBDb3BpZWRTcGFjZTsKIGNsYXNzIENvcHlWaXNpdG9yOwogCkBAIC01Miw3ICs1Miw3IEBA
IGVudW0gR0NQaGFzZSB7CiAKIGNsYXNzIEdDVGhyZWFkU2hhcmVkRGF0YSB7CiBwdWJsaWM6Ci0g
ICAgR0NUaHJlYWRTaGFyZWREYXRhKEpTR2xvYmFsRGF0YSopOworICAgIEdDVGhyZWFkU2hhcmVk
RGF0YShWTSopOwogICAgIH5HQ1RocmVhZFNoYXJlZERhdGEoKTsKICAgICAKICAgICB2b2lkIHJl
c2V0KCk7CkBAIC03Nyw3ICs3Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdGFydE5leHRQaGFz
ZShHQ1BoYXNlKTsKICAgICB2b2lkIGVuZEN1cnJlbnRQaGFzZSgpOwogCi0gICAgSlNHbG9iYWxE
YXRhKiBtX2dsb2JhbERhdGE7CisgICAgVk0qIG1fdm07CiAgICAgQ29waWVkU3BhY2UqIG1fY29w
aWVkU3BhY2U7CiAgICAgCiAgICAgYm9vbCBtX3Nob3VsZEhhc2hDb25zOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw4ICszNSw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1IYW5kbGVTZXQ6OkhhbmRsZVNl
dChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCi0gICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0
YSkKK0hhbmRsZVNldDo6SGFuZGxlU2V0KFZNKiB2bSkKKyAgICA6IG1fdm0odm0pCiAgICAgLCBt
X25leHRUb0ZpbmFsaXplKDApCiB7CiAgICAgZ3JvdygpOwpAQCAtNDUsMTIgKzQ1LDEyIEBAIEhh
bmRsZVNldDo6SGFuZGxlU2V0KEpTR2xvYmFsRGF0YSogZ2xvYmEKIEhhbmRsZVNldDo6fkhhbmRs
ZVNldCgpCiB7CiAgICAgd2hpbGUgKCFtX2Jsb2NrTGlzdC5pc0VtcHR5KCkpCi0gICAgICAgIG1f
Z2xvYmFsRGF0YS0+aGVhcC5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2NhdGUoSGFuZGxlQmxvY2s6
OmRlc3Ryb3kobV9ibG9ja0xpc3QucmVtb3ZlSGVhZCgpKSk7CisgICAgICAgIG1fdm0tPmhlYXAu
YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlKEhhbmRsZUJsb2NrOjpkZXN0cm95KG1fYmxvY2tM
aXN0LnJlbW92ZUhlYWQoKSkpOwogfQogCiB2b2lkIEhhbmRsZVNldDo6Z3JvdygpCiB7Ci0gICAg
SGFuZGxlQmxvY2sqIG5ld0Jsb2NrID0gSGFuZGxlQmxvY2s6OmNyZWF0ZShtX2dsb2JhbERhdGEt
PmhlYXAuYmxvY2tBbGxvY2F0b3IoKS5hbGxvY2F0ZTxIYW5kbGVCbG9jaz4oKSwgdGhpcyk7Cisg
ICAgSGFuZGxlQmxvY2sqIG5ld0Jsb2NrID0gSGFuZGxlQmxvY2s6OmNyZWF0ZShtX3ZtLT5oZWFw
LmJsb2NrQWxsb2NhdG9yKCkuYWxsb2NhdGU8SGFuZGxlQmxvY2s+KCksIHRoaXMpOwogICAgIG1f
YmxvY2tMaXN0LmFwcGVuZChuZXdCbG9jayk7CiAKICAgICBmb3IgKGludCBpID0gbmV3QmxvY2st
Pm5vZGVDYXBhY2l0eSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hhbmRsZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hhbmRsZVNldC5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEhhbmRsZUJsb2NrOwogY2xhc3MgSGFuZGxlU2V0Owog
Y2xhc3MgSGVhcFJvb3RWaXNpdG9yOwotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiBj
bGFzcyBKU1ZhbHVlOwogY2xhc3MgU2xvdFZpc2l0b3I7CiAKQEAgLTY3LDEwICs2NywxMCBAQCBj
bGFzcyBIYW5kbGVTZXQgewogcHVibGljOgogICAgIHN0YXRpYyBIYW5kbGVTZXQqIGhlYXBGb3Io
SGFuZGxlU2xvdCk7CiAKLSAgICBIYW5kbGVTZXQoSlNHbG9iYWxEYXRhKik7CisgICAgSGFuZGxl
U2V0KFZNKik7CiAgICAgfkhhbmRsZVNldCgpOwogCi0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKCk7CisgICAgVk0qIHZtKCk7CiAKICAgICBIYW5kbGVTbG90IGFsbG9jYXRlKCk7CiAgICAg
dm9pZCBkZWFsbG9jYXRlKEhhbmRsZVNsb3QpOwpAQCAtOTQsNyArOTQsNyBAQCBwcml2YXRlOgog
ICAgIGJvb2wgaXNMaXZlTm9kZShOb2RlKik7CiAjZW5kaWYKIAotICAgIEpTR2xvYmFsRGF0YSog
bV9nbG9iYWxEYXRhOworICAgIFZNKiBtX3ZtOwogICAgIERvdWJseUxpbmtlZExpc3Q8SGFuZGxl
QmxvY2s+IG1fYmxvY2tMaXN0OwogCiAgICAgU2VudGluZWxMaW5rZWRMaXN0PE5vZGU+IG1fc3Ry
b25nTGlzdDsKQEAgLTEwOCw5ICsxMDgsOSBAQCBpbmxpbmUgSGFuZGxlU2V0KiBIYW5kbGVTZXQ6
OmhlYXBGb3IoSGFuCiAgICAgcmV0dXJuIHRvTm9kZShoYW5kbGUpLT5oYW5kbGVTZXQoKTsKIH0K
IAotaW5saW5lIEpTR2xvYmFsRGF0YSogSGFuZGxlU2V0OjpnbG9iYWxEYXRhKCkKK2lubGluZSBW
TSogSGFuZGxlU2V0Ojp2bSgpCiB7Ci0gICAgcmV0dXJuIG1fZ2xvYmFsRGF0YTsKKyAgICByZXR1
cm4gbV92bTsKIH0KIAogaW5saW5lIEhhbmRsZVNsb3QgSGFuZGxlU2V0Ojp0b0hhbmRsZShIYW5k
bGVTZXQ6Ok5vZGUqIG5vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
cmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJIZWFwU3RhdGlzdGlj
cy5oIgogI2luY2x1ZGUgIkluY3JlbWVudGFsU3dlZXBlci5oIgogI2luY2x1ZGUgIkludGVycHJl
dGVyLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNs
dWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpT
T05PYmplY3QuaCIKQEAgLTE2NCwxNyArMTY0LDE3IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IHBy
b3BvcnRpb25hbEhlYXBTaXoKICAgICByZXR1cm4gMS4yNSAqIGhlYXBTaXplOwogfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wgaXNWYWxpZFNoYXJlZEluc3RhbmNlVGhyZWFkU3RhdGUoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhKQorc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRTaGFyZWRJbnN0YW5j
ZVRocmVhZFN0YXRlKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gZ2xvYmFsRGF0YS0+YXBpTG9jaygp
LmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCk7CisgICAgcmV0dXJuIHZtLT5hcGlMb2NrKCku
Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGlz
VmFsaWRUaHJlYWRTdGF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitzdGF0aWMgaW5saW5l
IGJvb2wgaXNWYWxpZFRocmVhZFN0YXRlKFZNKiB2bSkKIHsKLSAgICBpZiAoZ2xvYmFsRGF0YS0+
aWRlbnRpZmllclRhYmxlICE9IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxl
KCkpCisgICAgaWYgKHZtLT5pZGVudGlmaWVyVGFibGUgIT0gd3RmVGhyZWFkRGF0YSgpLmN1cnJl
bnRJZGVudGlmaWVyVGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGds
b2JhbERhdGEtPmlzU2hhcmVkSW5zdGFuY2UoKSAmJiAhaXNWYWxpZFNoYXJlZEluc3RhbmNlVGhy
ZWFkU3RhdGUoZ2xvYmFsRGF0YSkpCisgICAgaWYgKHZtLT5pc1NoYXJlZEluc3RhbmNlKCkgJiYg
IWlzVmFsaWRTaGFyZWRJbnN0YW5jZVRocmVhZFN0YXRlKHZtKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0yNDEsNyArMjQxLDcgQEAgaW5saW5lIFBhc3NP
d25QdHI8VHlwZUNvdW50U2V0PiBSZWNvcmRUeQogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UK
IAotSGVhcDo6SGVhcChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEhlYXBUeXBlIGhlYXBUeXBl
KQorSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIDogbV9oZWFwVHlw
ZShoZWFwVHlwZSkKICAgICAsIG1fcmFtU2l6ZShyYW1TaXplKCkpCiAgICAgLCBtX21pbkJ5dGVz
UGVyQ3ljbGUobWluSGVhcFNpemUobV9oZWFwVHlwZSwgbV9yYW1TaXplKSkKQEAgLTI1NCwxMiAr
MjU0LDEyIEBAIEhlYXA6OkhlYXAoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBIZWEKICAgICAs
IG1fb2JqZWN0U3BhY2UodGhpcykKICAgICAsIG1fc3RvcmFnZVNwYWNlKHRoaXMpCiAgICAgLCBt
X21hY2hpbmVUaHJlYWRzKHRoaXMpCi0gICAgLCBtX3NoYXJlZERhdGEoZ2xvYmFsRGF0YSkKKyAg
ICAsIG1fc2hhcmVkRGF0YSh2bSkKICAgICAsIG1fc2xvdFZpc2l0b3IobV9zaGFyZWREYXRhKQog
ICAgICwgbV9jb3B5VmlzaXRvcihtX3NoYXJlZERhdGEpCi0gICAgLCBtX2hhbmRsZVNldChnbG9i
YWxEYXRhKQorICAgICwgbV9oYW5kbGVTZXQodm0pCiAgICAgLCBtX2lzU2FmZVRvQ29sbGVjdChm
YWxzZSkKLSAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorICAgICwgbV92bSh2bSkKICAg
ICAsIG1fbGFzdEdDTGVuZ3RoKDApCiAgICAgLCBtX2xhc3RDb2RlRGlzY2FyZFRpbWUoV1RGOjpj
dXJyZW50VGltZSgpKQogICAgICwgbV9hY3Rpdml0eUNhbGxiYWNrKERlZmF1bHRHQ0FjdGl2aXR5
Q2FsbGJhY2s6OmNyZWF0ZSh0aGlzKSkKQEAgLTI3NywxMSArMjc3LDExIEBAIGJvb2wgSGVhcDo6
aXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpCiAgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuaXNQ
YWdlZE91dChkZWFkbGluZSkgfHwgbV9zdG9yYWdlU3BhY2UuaXNQYWdlZE91dChkZWFkbGluZSk7
CiB9CiAKLS8vIFRoZSBKU0dsb2JhbERhdGEgaXMgYmVpbmcgZGVzdHJveWVkIGFuZCB0aGUgY29s
bGVjdG9yIHdpbGwgbmV2ZXIgcnVuIGFnYWluLgorLy8gVGhlIFZNIGlzIGJlaW5nIGRlc3Ryb3ll
ZCBhbmQgdGhlIGNvbGxlY3RvciB3aWxsIG5ldmVyIHJ1biBhZ2Fpbi4KIC8vIFJ1biBhbGwgcGVu
ZGluZyBmaW5hbGl6ZXJzIG5vdyBiZWNhdXNlIHdlIHdvbid0IGdldCBhbm90aGVyIGNoYW5jZS4K
IHZvaWQgSGVhcDo6bGFzdENoYW5jZVRvRmluYWxpemUoKQogewotICAgIFJFTEVBU0VfQVNTRVJU
KCFtX2dsb2JhbERhdGEtPmR5bmFtaWNHbG9iYWxPYmplY3QpOworICAgIFJFTEVBU0VfQVNTRVJU
KCFtX3ZtLT5keW5hbWljR2xvYmFsT2JqZWN0KTsKICAgICBSRUxFQVNFX0FTU0VSVChtX29wZXJh
dGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOwogCiAgICAgbV9vYmplY3RTcGFjZS5sYXN0
Q2hhbmNlVG9GaW5hbGl6ZSgpOwpAQCAtMzMyLDcgKzMzMiw3IEBAIHZvaWQgSGVhcDo6ZGlkQWJh
bmRvbihzaXplX3QgYnl0ZXMpCiB2b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZSBrKQogewogICAg
IEFTU0VSVChrKTsKLSAgICBBU1NFUlQobV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuY3VycmVudFRo
cmVhZElzSG9sZGluZ0xvY2soKSk7CisgICAgQVNTRVJUKG1fdm0tPmFwaUxvY2soKS5jdXJyZW50
VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKIAogICAgIGlmICghay5pc0NlbGwoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMzQzLDcgKzM0Myw3IEBAIHZvaWQgSGVhcDo6cHJvdGVjdChKU1ZhbHVlIGsp
CiBib29sIEhlYXA6OnVucHJvdGVjdChKU1ZhbHVlIGspCiB7CiAgICAgQVNTRVJUKGspOwotICAg
IEFTU0VSVChtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9j
aygpKTsKKyAgICBBU1NFUlQobV92bS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdM
b2NrKCkpOwogCiAgICAgaWYgKCFrLmlzQ2VsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC00MDIsNyArNDAyLDcgQEAgdm9pZCBIZWFwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6
ZQogCiBpbmxpbmUgSlNTdGFjayYgSGVhcDo6c3RhY2soKQogewotICAgIHJldHVybiBtX2dsb2Jh
bERhdGEtPmludGVycHJldGVyLT5zdGFjaygpOworICAgIHJldHVybiBtX3ZtLT5pbnRlcnByZXRl
ci0+c3RhY2soKTsKIH0KIAogdm9pZCBIZWFwOjpjYW5vbmljYWxpemVDZWxsTGl2ZW5lc3NEYXRh
KCkKQEAgLTQxMiw3ICs0MTIsNyBAQCB2b2lkIEhlYXA6OmNhbm9uaWNhbGl6ZUNlbGxMaXZlbmVz
c0RhdGEoCiAKIHZvaWQgSGVhcDo6Z2V0Q29uc2VydmF0aXZlUmVnaXN0ZXJSb290cyhIYXNoU2V0
PEpTQ2VsbCo+JiByb290cykKIHsKLSAgICBBU1NFUlQoaXNWYWxpZFRocmVhZFN0YXRlKG1fZ2xv
YmFsRGF0YSkpOworICAgIEFTU0VSVChpc1ZhbGlkVGhyZWFkU3RhdGUobV92bSkpOwogICAgIENv
bnNlcnZhdGl2ZVJvb3RzIHN0YWNrUm9vdHMoJm1fb2JqZWN0U3BhY2UuYmxvY2tzKCksICZtX3N0
b3JhZ2VTcGFjZSk7CiAgICAgc3RhY2soKS5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhzdGFja1Jv
b3RzKTsKICAgICBzaXplX3Qgc3RhY2tSb290Q291bnQgPSBzdGFja1Jvb3RzLnNpemUoKTsKQEAg
LTQyOCw3ICs0MjgsNyBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAgICAgU2FtcGxpbmdSZWdp
b24gc2FtcGxpbmdSZWdpb24oIkdhcmJhZ2UgQ29sbGVjdGlvbjogVHJhY2luZyIpOwogCiAgICAg
R0NQSEFTRShNYXJrUm9vdHMpOwotICAgIEFTU0VSVChpc1ZhbGlkVGhyZWFkU3RhdGUobV9nbG9i
YWxEYXRhKSk7CisgICAgQVNTRVJUKGlzVmFsaWRUaHJlYWRTdGF0ZShtX3ZtKSk7CiAKICNpZiBF
TkFCTEUoT0JKRUNUX01BUktfTE9HR0lORykKICAgICBkb3VibGUgZ2NTdGFydFRpbWUgPSBXVEY6
OmN1cnJlbnRUaW1lKCk7CkBAIC00NTcsNyArNDU3LDcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMo
KQogICAgIENvbnNlcnZhdGl2ZVJvb3RzIHNjcmF0Y2hCdWZmZXJSb290cygmbV9vYmplY3RTcGFj
ZS5ibG9ja3MoKSwgJm1fc3RvcmFnZVNwYWNlKTsKICAgICB7CiAgICAgICAgIEdDUEhBU0UoR2F0
aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKTsKLSAgICAgICAgbV9nbG9iYWxEYXRhLT5nYXRoZXJDb25z
ZXJ2YXRpdmVSb290cyhzY3JhdGNoQnVmZmVyUm9vdHMpOworICAgICAgICBtX3ZtLT5nYXRoZXJD
b25zZXJ2YXRpdmVSb290cyhzY3JhdGNoQnVmZmVyUm9vdHMpOwogICAgIH0KICNlbmRpZgogCkBA
IC00NzQsMTMgKzQ3NCwxMyBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAgICAgewogICAgICAg
ICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIodmlzaXRvcik7CiAKLSAgICAgICAgaWYgKG1f
Z2xvYmFsRGF0YS0+Y29kZUJsb2Nrc0JlaW5nQ29tcGlsZWQuc2l6ZSgpKSB7CisgICAgICAgIGlm
IChtX3ZtLT5jb2RlQmxvY2tzQmVpbmdDb21waWxlZC5zaXplKCkpIHsKICAgICAgICAgICAgIEdD
UEhBU0UoVmlzaXRBY3RpdmVDb2RlQmxvY2spOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2dsb2JhbERhdGEtPmNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkLnNpemUoKTsgaSsr
KQotICAgICAgICAgICAgICAgIG1fZ2xvYmFsRGF0YS0+Y29kZUJsb2Nrc0JlaW5nQ29tcGlsZWRb
aV0tPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX3ZtLT5jb2RlQmxvY2tzQmVpbmdDb21waWxlZC5zaXplKCk7IGkrKykKKyAgICAg
ICAgICAgICAgICBtX3ZtLT5jb2RlQmxvY2tzQmVpbmdDb21waWxlZFtpXS0+dmlzaXRBZ2dyZWdh
dGUodmlzaXRvcik7CiAgICAgICAgIH0KIAotICAgICAgICBtX2dsb2JhbERhdGEtPnNtYWxsU3Ry
aW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5jZXModmlzaXRvcik7CisgICAgICAgIG1fdm0tPnNtYWxs
U3RyaW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5jZXModmlzaXRvcik7CiAKICAgICAgICAgewogICAg
ICAgICAgICAgR0NQSEFTRShWaXNpdE1hY2hpbmVSb290cyk7CkBAIC01MjMsMTAgKzUyMywxMCBA
QCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAgICAgICAgICAgICAgICAgdmlzaXRvci5kb25hdGVB
bmREcmFpbigpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dsb2Jh
bERhdGEtPmV4Y2VwdGlvbikgeworICAgICAgICBpZiAobV92bS0+ZXhjZXB0aW9uKSB7CiAgICAg
ICAgICAgICBHQ1BIQVNFKE1hcmtpbmdFeGNlcHRpb24pOwogICAgICAgICAgICAgTUFSS19MT0df
Uk9PVCh2aXNpdG9yLCAiRXhjZXB0aW9ucyIpOwotICAgICAgICAgICAgaGVhcFJvb3RWaXNpdG9y
LnZpc2l0KCZtX2dsb2JhbERhdGEtPmV4Y2VwdGlvbik7CisgICAgICAgICAgICBoZWFwUm9vdFZp
c2l0b3IudmlzaXQoJm1fdm0tPmV4Y2VwdGlvbik7CiAgICAgICAgICAgICB2aXNpdG9yLmRvbmF0
ZUFuZERyYWluKCk7CiAgICAgICAgIH0KICAgICAKQEAgLTY1OCw3ICs2NTgsNyBAQCB2b2lkIEhl
YXA6OmRlbGV0ZUFsbENvbXBpbGVkQ29kZSgpCiB7CiAgICAgLy8gSWYgSmF2YVNjcmlwdCBpcyBy
dW5uaW5nLCBpdCdzIG5vdCBzYWZlIHRvIGRlbGV0ZSBjb2RlLCBzaW5jZSB3ZSdsbCBlbmQKICAg
ICAvLyB1cCBkZWxldGluZyBjb2RlIHRoYXQgaXMgbGl2ZSBvbiB0aGUgc3RhY2suCi0gICAgaWYg
KG1fZ2xvYmFsRGF0YS0+ZHluYW1pY0dsb2JhbE9iamVjdCkKKyAgICBpZiAobV92bS0+ZHluYW1p
Y0dsb2JhbE9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChFeGVjdXRhYmxlQmFz
ZSogY3VycmVudCA9IG1fY29tcGlsZWRDb2RlLmhlYWQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1
cnJlbnQtPm5leHQoKSkgewpAQCAtNzA0LDggKzcwNCw4IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChT
d2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigi
R2FyYmFnZSBDb2xsZWN0aW9uIik7CiAgICAgCiAgICAgR0NQSEFTRShDb2xsZWN0KTsKLSAgICBB
U1NFUlQoZ2xvYmFsRGF0YSgpLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2so
KSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZ2xvYmFsRGF0YSgpLT5pZGVudGlmaWVyVGFibGUgPT0g
d3RmVGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSk7CisgICAgQVNTRVJUKHZt
KCktPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCh2bSgpLT5pZGVudGlmaWVyVGFibGUgPT0gd3RmVGhyZWFkRGF0YSgpLmN1cnJlbnRJ
ZGVudGlmaWVyVGFibGUoKSk7CiAgICAgQVNTRVJUKG1faXNTYWZlVG9Db2xsZWN0KTsKICAgICBK
QVZBU0NSSVBUQ09SRV9HQ19CRUdJTigpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fb3BlcmF0aW9u
SW5Qcm9ncmVzcyA9PSBOb09wZXJhdGlvbik7CkBAIC03NDgsNyArNzQ4LDcgQEAgdm9pZCBIZWFw
Ojpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogCiAgICAgewogICAgICAgICBHQ1BIQVNF
KGZpbmFsaXplU21hbGxTdHJpbmdzKTsKLSAgICAgICAgbV9nbG9iYWxEYXRhLT5zbWFsbFN0cmlu
Z3MuZmluYWxpemVTbWFsbFN0cmluZ3MoKTsKKyAgICAgICAgbV92bS0+c21hbGxTdHJpbmdzLmZp
bmFsaXplU21hbGxTdHJpbmdzKCk7CiAgICAgfQogCiAgICAgewpAQCAtNzU4LDcgKzc1OCw3IEBA
IHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKIAogICAgIHsKICAgICAg
ICAgR0NQSEFTRShEZWxldGVTb3VyY2VQcm92aWRlckNhY2hlcyk7Ci0gICAgICAgIG1fZ2xvYmFs
RGF0YS0+Y2xlYXJTb3VyY2VQcm92aWRlckNhY2hlcygpOworICAgICAgICBtX3ZtLT5jbGVhclNv
dXJjZVByb3ZpZGVyQ2FjaGVzKCk7CiAgICAgfQogCiAgICAgaWYgKHN3ZWVwVG9nZ2xlID09IERv
U3dlZXApIHsKQEAgLTg0Miw3ICs4NDIsNyBAQCB2b2lkIEhlYXA6OmRpZEFsbG9jYXRlKHNpemVf
dCBieXRlcykKIAogYm9vbCBIZWFwOjppc1ZhbGlkQWxsb2NhdGlvbihzaXplX3QpCiB7Ci0gICAg
aWYgKCFpc1ZhbGlkVGhyZWFkU3RhdGUobV9nbG9iYWxEYXRhKSkKKyAgICBpZiAoIWlzVmFsaWRU
aHJlYWRTdGF0ZShtX3ZtKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fb3Bl
cmF0aW9uSW5Qcm9ncmVzcyAhPSBOb09wZXJhdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBjbGFzcyBJbmNyZW1lbnRhbFN3ZWVwZXI7CiAgICAgY2xhc3MgSklUU3R1YlJvdXRpbmU7
CiAgICAgY2xhc3MgSlNDZWxsOwotICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKKyAgICBjbGFzcyBW
TTsKICAgICBjbGFzcyBKU1N0YWNrOwogICAgIGNsYXNzIEpTVmFsdWU7CiAgICAgY2xhc3MgTGl2
ZU9iamVjdEl0ZXJhdG9yOwpAQCAtOTYsMTEgKzk2LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBzdGF0aWMgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlNDZWxsKik7CiAg
ICAgICAgIHN0YXRpYyB1aW50OF90KiBhZGRyZXNzT2ZDYXJkRm9yKEpTQ2VsbCopOwogCi0gICAg
ICAgIEhlYXAoSlNHbG9iYWxEYXRhKiwgSGVhcFR5cGUpOworICAgICAgICBIZWFwKFZNKiwgSGVh
cFR5cGUpOwogICAgICAgICB+SGVhcCgpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CiAKLSAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxEYXRhOyB9CisgICAgICAgIFZNKiB2bSgpIGNv
bnN0IHsgcmV0dXJuIG1fdm07IH0KICAgICAgICAgTWFya2VkU3BhY2UmIG9iamVjdFNwYWNlKCkg
eyByZXR1cm4gbV9vYmplY3RTcGFjZTsgfQogICAgICAgICBNYWNoaW5lVGhyZWFkcyYgbWFjaGlu
ZVRocmVhZHMoKSB7IHJldHVybiBtX21hY2hpbmVUaHJlYWRzOyB9CiAKQEAgLTI1OSw3ICsyNTks
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIGJvb2wgbV9pc1NhZmVUb0Nv
bGxlY3Q7CiAKLSAgICAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CisgICAgICAgIFZN
KiBtX3ZtOwogICAgICAgICBkb3VibGUgbV9sYXN0R0NMZW5ndGg7CiAgICAgICAgIGRvdWJsZSBt
X2xhc3RDb2RlRGlzY2FyZFRpbWU7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBUaW1lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcFRpbWVyLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcFRpbWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTIgKzU3LDEyIEBAIHN0
YXRpYyB2b2lkIHJlbGVhc2VBUElMb2NrKGNvbnN0IHZvaWQqIGkKICAgICBzdGF0aWNfY2FzdDxK
U0xvY2sqPihjb25zdF9jYXN0PHZvaWQqPihpbmZvKSktPmRlcmVmKCk7CiB9CiAKLUhlYXBUaW1l
cjo6SGVhcFRpbWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ0ZSdW5Mb29wUmVmIHJ1bkxv
b3ApCi0gICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKK0hlYXBUaW1lcjo6SGVhcFRpbWVy
KFZNKiB2bSwgQ0ZSdW5Mb29wUmVmIHJ1bkxvb3ApCisgICAgOiBtX3ZtKHZtKQogICAgICwgbV9y
dW5Mb29wKHJ1bkxvb3ApCiB7CiAgICAgbWVtc2V0KCZtX2NvbnRleHQsIDAsIHNpemVvZihDRlJ1
bkxvb3BUaW1lckNvbnRleHQpKTsKLSAgICBtX2NvbnRleHQuaW5mbyA9ICZnbG9iYWxEYXRhLT5h
cGlMb2NrKCk7CisgICAgbV9jb250ZXh0LmluZm8gPSAmdm0tPmFwaUxvY2soKTsKICAgICBtX2Nv
bnRleHQucmV0YWluID0gcmV0YWluQVBJTG9jazsKICAgICBtX2NvbnRleHQucmVsZWFzZSA9IHJl
bGVhc2VBUElMb2NrOwogICAgIG1fdGltZXIuYWRvcHRDRihDRlJ1bkxvb3BUaW1lckNyZWF0ZSgw
LCBzX2RlY2FkZSwgc19kZWNhZGUsIDAsIDAsIEhlYXBUaW1lcjo6dGltZXJEaWRGaXJlLCAmbV9j
b250ZXh0KSk7CkBAIC04OSwyMyArODksMjMgQEAgdm9pZCBIZWFwVGltZXI6OnRpbWVyRGlkRmly
ZShDRlJ1bkxvb3BUaQogICAgIEpTTG9jayogYXBpTG9jayA9IHN0YXRpY19jYXN0PEpTTG9jayo+
KGNvbnRleHQpOwogICAgIGFwaUxvY2stPmxvY2soKTsKIAotICAgIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSA9IGFwaUxvY2stPmdsb2JhbERhdGEoKTsKLSAgICAvLyBUaGUgSlNHbG9iYWxEYXRh
IGhhcyBiZWVuIGRlc3Ryb3llZCwgc28gd2Ugc2hvdWxkIGp1c3QgZ2l2ZSB1cC4KLSAgICBpZiAo
IWdsb2JhbERhdGEpIHsKKyAgICBWTSogdm0gPSBhcGlMb2NrLT52bSgpOworICAgIC8vIFRoZSBW
TSBoYXMgYmVlbiBkZXN0cm95ZWQsIHNvIHdlIHNob3VsZCBqdXN0IGdpdmUgdXAuCisgICAgaWYg
KCF2bSkgewogICAgICAgICBhcGlMb2NrLT51bmxvY2soKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIEhlYXBUaW1lciogaGVhcFRpbWVyID0gMDsKLSAgICBpZiAoZ2xvYmFsRGF0YS0+
aGVhcC5hY3Rpdml0eUNhbGxiYWNrKCktPm1fdGltZXIuZ2V0KCkgPT0gdGltZXIpCi0gICAgICAg
IGhlYXBUaW1lciA9IGdsb2JhbERhdGEtPmhlYXAuYWN0aXZpdHlDYWxsYmFjaygpOwotICAgIGVs
c2UgaWYgKGdsb2JhbERhdGEtPmhlYXAuc3dlZXBlcigpLT5tX3RpbWVyLmdldCgpID09IHRpbWVy
KQotICAgICAgICBoZWFwVGltZXIgPSBnbG9iYWxEYXRhLT5oZWFwLnN3ZWVwZXIoKTsKKyAgICBp
ZiAodm0tPmhlYXAuYWN0aXZpdHlDYWxsYmFjaygpLT5tX3RpbWVyLmdldCgpID09IHRpbWVyKQor
ICAgICAgICBoZWFwVGltZXIgPSB2bS0+aGVhcC5hY3Rpdml0eUNhbGxiYWNrKCk7CisgICAgZWxz
ZSBpZiAodm0tPmhlYXAuc3dlZXBlcigpLT5tX3RpbWVyLmdldCgpID09IHRpbWVyKQorICAgICAg
ICBoZWFwVGltZXIgPSB2bS0+aGVhcC5zd2VlcGVyKCk7CiAgICAgZWxzZQogICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCiAgICAgewotICAgICAgICBBUElFbnRyeVNoaW0g
c2hpbShnbG9iYWxEYXRhKTsKKyAgICAgICAgQVBJRW50cnlTaGltIHNoaW0odm0pOwogICAgICAg
ICBoZWFwVGltZXItPmRvV29yaygpOwogICAgIH0KIApAQCAtMTE0LDggKzExNCw4IEBAIHZvaWQg
SGVhcFRpbWVyOjp0aW1lckRpZEZpcmUoQ0ZSdW5Mb29wVGkKIAogI2VsaWYgUExBVEZPUk0oQkxB
Q0tCRVJSWSkKIAotSGVhcFRpbWVyOjpIZWFwVGltZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
KQotICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCitIZWFwVGltZXI6OkhlYXBUaW1lcihW
TSogdm0pCisgICAgOiBtX3ZtKHZtKQogICAgICwgbV90aW1lcih0aGlzLCAmSGVhcFRpbWVyOjp0
aW1lckRpZEZpcmUpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBIZWFwVGltZXIgZm9yIG90
aGVyIHRocmVhZHMuCkBAIC0xNDIsOCArMTQyLDggQEAgdm9pZCBIZWFwVGltZXI6OmludmFsaWRh
dGUoKQogCiAjZWxpZiBQTEFURk9STShRVCkKIAotSGVhcFRpbWVyOjpIZWFwVGltZXIoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhKQotICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCitIZWFw
VGltZXI6OkhlYXBUaW1lcihWTSogdm0pCisgICAgOiBtX3ZtKHZtKQogICAgICwgbV9uZXdUaHJl
YWQoMCkKICAgICAsIG1fbXV0ZXgoUU11dGV4OjpOb25SZWN1cnNpdmUpCiB7CkBAIC0xNjYsNyAr
MTY2LDcgQEAgdm9pZCBIZWFwVGltZXI6OnRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgQVBJRW50cnlTaGltIHNoaW0obV9nbG9iYWxEYXRhKTsK
KyAgICBBUElFbnRyeVNoaW0gc2hpbShtX3ZtKTsKICAgICBkb1dvcmsoKTsKIH0KIApAQCAtMTkx
LDggKzE5MSw4IEBAIHZvaWQgSGVhcFRpbWVyOjpzeW5jaHJvbml6ZSgpCiB9CiAKICNlbHNlCi1I
ZWFwVGltZXI6OkhlYXBUaW1lcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCi0gICAgOiBtX2ds
b2JhbERhdGEoZ2xvYmFsRGF0YSkKK0hlYXBUaW1lcjo6SGVhcFRpbWVyKFZNKiB2bSkKKyAgICA6
IG1fdm0odm0pCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBU
aW1lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1l
ci5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
VGltZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiAKICNpZiBQTEFURk9STShRVCkg
JiYgIVVTRShDRikKIGNsYXNzIEhlYXBUaW1lciA6IHB1YmxpYyBRT2JqZWN0IHsKQEAgLTUxLDEw
ICs1MSwxMCBAQCBjbGFzcyBIZWFwVGltZXIgewogI2VuZGlmCiBwdWJsaWM6CiAjaWYgVVNFKENG
KQotICAgIEhlYXBUaW1lcihKU0dsb2JhbERhdGEqLCBDRlJ1bkxvb3BSZWYpOworICAgIEhlYXBU
aW1lcihWTSosIENGUnVuTG9vcFJlZik7CiAgICAgc3RhdGljIHZvaWQgdGltZXJEaWRGaXJlKENG
UnVuTG9vcFRpbWVyUmVmLCB2b2lkKik7CiAjZWxzZQotICAgIEhlYXBUaW1lcihKU0dsb2JhbERh
dGEqKTsKKyAgICBIZWFwVGltZXIoVk0qKTsKICNlbmRpZgogICAgIAogICAgIHZpcnR1YWwgfkhl
YXBUaW1lcigpOwpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRv
V29yaygpID0gMDsKICAgICAKIHByb3RlY3RlZDoKLSAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFs
RGF0YTsKKyAgICBWTSogbV92bTsKIAogI2lmIFVTRShDRikKICAgICBzdGF0aWMgY29uc3QgQ0ZU
aW1lSW50ZXJ2YWwgc19kZWNhZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
bmNyZW1lbnRhbFN3ZWVwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDcgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSBzd2VlcFRpbWVNdWx0aXBs
aWVyIAogI2lmIFVTRShDRikKICAgICAKIEluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50YWxT
d2VlcGVyKEhlYXAqIGhlYXAsIENGUnVuTG9vcFJlZiBydW5Mb29wKQotICAgIDogSGVhcFRpbWVy
KGhlYXAtPmdsb2JhbERhdGEoKSwgcnVuTG9vcCkKKyAgICA6IEhlYXBUaW1lcihoZWFwLT52bSgp
LCBydW5Mb29wKQogICAgICwgbV9jdXJyZW50QmxvY2tUb1N3ZWVwSW5kZXgoMCkKICAgICAsIG1f
YmxvY2tzVG9Td2VlcChoZWFwLT5tX2Jsb2NrU25hcHNob3QpCiB7CkBAIC03MCw3ICs3MCw3IEBA
IHZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpjYW5jZWxUaW1lcigpCiAjZWxpZiBQTEFURk9STShC
TEFDS0JFUlJZKSB8fCBQTEFURk9STShRVCkKICAgIAogSW5jcmVtZW50YWxTd2VlcGVyOjpJbmNy
ZW1lbnRhbFN3ZWVwZXIoSGVhcCogaGVhcCkKLSAgICA6IEhlYXBUaW1lcihoZWFwLT5nbG9iYWxE
YXRhKCkpCisgICAgOiBIZWFwVGltZXIoaGVhcC0+dm0oKSkKICAgICAsIG1fY3VycmVudEJsb2Nr
VG9Td2VlcEluZGV4KDApCiAgICAgLCBtX2Jsb2Nrc1RvU3dlZXAoaGVhcC0+bV9ibG9ja1NuYXBz
aG90KQogewpAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpzd2Vl
cE5leHRCbG9jaygKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGJsb2NrLT5zd2Vl
cCgpOwotICAgICAgICBtX2dsb2JhbERhdGEtPmhlYXAub2JqZWN0U3BhY2UoKS5mcmVlT3JTaHJp
bmtCbG9jayhibG9jayk7CisgICAgICAgIG1fdm0tPmhlYXAub2JqZWN0U3BhY2UoKS5mcmVlT3JT
aHJpbmtCbG9jayhibG9jayk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiB9CkBAIC0xNDQsMTQg
KzE0NCwxNCBAQCB2b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6d2lsbEZpbmlzaFN3ZWVwCiB7CiAg
ICAgbV9jdXJyZW50QmxvY2tUb1N3ZWVwSW5kZXggPSAwOwogICAgIG1fYmxvY2tzVG9Td2VlcC5j
bGVhcigpOwotICAgIGlmIChtX2dsb2JhbERhdGEpCisgICAgaWYgKG1fdm0pCiAgICAgICAgIGNh
bmNlbFRpbWVyKCk7CiB9CiAKICNlbHNlCiAKLUluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50
YWxTd2VlcGVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKLSAgICA6IEhlYXBUaW1lcihnbG9i
YWxEYXRhKQorSW5jcmVtZW50YWxTd2VlcGVyOjpJbmNyZW1lbnRhbFN3ZWVwZXIoVk0qIHZtKQor
ICAgIDogSGVhcFRpbWVyKHZtKQogewogfQogCkBAIC0xNjEsNyArMTYxLDcgQEAgdm9pZCBJbmNy
ZW1lbnRhbFN3ZWVwZXI6OmRvV29yaygpCiAKIFBhc3NPd25QdHI8SW5jcmVtZW50YWxTd2VlcGVy
PiBJbmNyZW1lbnRhbFN3ZWVwZXI6OmNyZWF0ZShIZWFwKiBoZWFwKQogewotICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgSW5jcmVtZW50YWxTd2VlcGVyKGhlYXAtPmdsb2JhbERhdGEoKSkpOworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgSW5jcmVtZW50YWxTd2VlcGVyKGhlYXAtPnZtKCkpKTsKIH0K
IAogdm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnN0YXJ0U3dlZXBpbmcoVmVjdG9yPE1hcmtlZEJs
b2NrKj4mKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2Vl
cGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50
YWxTd2VlcGVyLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBA
IHByaXZhdGU6CiAgICAgVmVjdG9yPE1hcmtlZEJsb2NrKj4mIG1fYmxvY2tzVG9Td2VlcDsKICNl
bHNlCiAgICAgCi0gICAgSW5jcmVtZW50YWxTd2VlcGVyKEpTR2xvYmFsRGF0YSopOworICAgIElu
Y3JlbWVudGFsU3dlZXBlcihWTSopOwogICAgIAogI2VuZGlmCiB9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTG9jYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Mb2NhbC5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Mb2NhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVm
aW5lIExvY2FsX2gKIAogI2luY2x1ZGUgIkhhbmRsZS5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0
YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAKIC8qCiAgICAgQSBzdHJvbmdseSByZWZlcmVuY2VkIGhh
bmRsZSB3aG9zZSBsaWZldGltZSBpcyB0ZW1wb3JhcnksIGxpbWl0ZWQgdG8gYSBnaXZlbgpAQCAt
NDQsOCArNDQsOCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgTG9jYWwgOiBwdWJsCiBw
dWJsaWM6CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBIYW5kbGU8VD46OkV4dGVybmFsVHlwZSBFeHRl
cm5hbFR5cGU7CiAKLSAgICBMb2NhbChKU0dsb2JhbERhdGEmLCBFeHRlcm5hbFR5cGUgPSBFeHRl
cm5hbFR5cGUoKSk7Ci0gICAgTG9jYWwoSlNHbG9iYWxEYXRhJiwgSGFuZGxlPFQ+KTsKKyAgICBM
b2NhbChWTSYsIEV4dGVybmFsVHlwZSA9IEV4dGVybmFsVHlwZSgpKTsKKyAgICBMb2NhbChWTSYs
IEhhbmRsZTxUPik7CiAgICAgTG9jYWwoY29uc3QgTG9jYWw8VD4mKTsgLy8gQWRvcHRpbmcgY29u
c3RydWN0b3IuIFVzZWQgdG8gcmV0dXJuIGEgTG9jYWwgdG8gYSBjYWxsaW5nIGZ1bmN0aW9uLgog
CiAgICAgTG9jYWwmIG9wZXJhdG9yPShFeHRlcm5hbFR5cGUpOwpAQCAtNTYsMTQgKzU2LDE0IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBzZXQoRXh0ZXJuYWxUeXBlKTsKIH07CiAKLXRlbXBsYXRlIDx0
eXBlbmFtZSBUPiBpbmxpbmUgTG9jYWw8VD46OkxvY2FsKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgRXh0ZXJuYWxUeXBlIHZhbHVlKQotICAgIDogSGFuZGxlPFQ+KGdsb2JhbERhdGEuaGVhcC5o
YW5kbGVTdGFjaygpLT5wdXNoKCkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIExvY2Fs
PFQ+OjpMb2NhbChWTSYgdm0sIEV4dGVybmFsVHlwZSB2YWx1ZSkKKyAgICA6IEhhbmRsZTxUPih2
bS5oZWFwLmhhbmRsZVN0YWNrKCktPnB1c2goKSkKIHsKICAgICBzZXQodmFsdWUpOwogfQogCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIExvY2FsPFQ+OjpMb2NhbChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEhhbmRsZTxUPiBvdGhlcikKLSAgICA6IEhhbmRsZTxUPihnbG9iYWxEYXRh
LmhlYXAuaGFuZGxlU3RhY2soKS0+cHVzaCgpKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGlu
ZSBMb2NhbDxUPjo6TG9jYWwoVk0mIHZtLCBIYW5kbGU8VD4gb3RoZXIpCisgICAgOiBIYW5kbGU8
VD4odm0uaGVhcC5oYW5kbGVTdGFjaygpLT5wdXNoKCkpCiB7CiAgICAgc2V0KG90aGVyLmdldCgp
KTsKIH0KQEAgLTEwMSw4ICsxMDEsOCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIHZv
aWQgTG9jYWw8CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkg
PSAwPiBjbGFzcyBMb2NhbFN0YWNrIHsKICAgICB0eXBlZGVmIHR5cGVuYW1lIEhhbmRsZTxUPjo6
RXh0ZXJuYWxUeXBlIEV4dGVybmFsVHlwZTsKIHB1YmxpYzoKLSAgICBMb2NhbFN0YWNrKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKLSAgICAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkK
KyAgICBMb2NhbFN0YWNrKFZNJiB2bSkKKyAgICAgICAgOiBtX3ZtKHZtKQogICAgICAgICAsIG1f
Y291bnQoMCkKICAgICB7CiAgICAgfQpAQCAtMTIyLDcgKzEyMiw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHB1c2goRXh0ZXJuYWxUeXBlIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKG1fY291bnQg
PT0gbV9zdGFjay5zaXplKCkpCi0gICAgICAgICAgICBtX3N0YWNrLmFwcGVuZChMb2NhbDxUPiht
X2dsb2JhbERhdGEsIHZhbHVlKSk7CisgICAgICAgICAgICBtX3N0YWNrLmFwcGVuZChMb2NhbDxU
PihtX3ZtLCB2YWx1ZSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX3N0YWNrW21fY291
bnRdID0gdmFsdWU7CiAgICAgICAgIG1fY291bnQrKzsKQEAgLTEzMiw3ICsxMzIsNyBAQCBwdWJs
aWM6CiAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnQ7IH0KIAogcHJp
dmF0ZToKLSAgICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsKKyAgICBWTSYgbV92bTsKICAg
ICBWZWN0b3I8TG9jYWw8VD4sIGlubGluZUNhcGFjaXR5PiBtX3N0YWNrOwogICAgIHVuc2lnbmVk
IG1fY291bnQ7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxTY29w
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsU2NvcGUu
aAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxT
Y29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMSArMzcsMTEgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgTG9jYWxTY29wZSBpcyBzaW1pbGFyIGluIGNvbmNlcHQgdG8gTlNBdXRvcmVsZWFzZVBv
b2wuCiAqLwogCi1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIAogY2xhc3MgTG9jYWxT
Y29wZSB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgTG9jYWxTY29wZShKU0dsb2JhbERhdGEmKTsK
KyAgICBleHBsaWNpdCBMb2NhbFNjb3BlKFZNJik7CiAgICAgfkxvY2FsU2NvcGUoKTsKICAgICAK
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gTG9jYWw8VD4gcmVsZWFzZShMb2NhbDxUPik7IC8v
IERlc3Ryb3lzIGFsbCBvdGhlciBsb2NhbHMgaW4gdGhlIHNjb3BlLgpAQCAtNTEsOCArNTEsOCBA
QCBwcml2YXRlOgogICAgIEhhbmRsZVN0YWNrOjpGcmFtZSBtX2xhc3RGcmFtZTsKIH07CiAKLWlu
bGluZSBMb2NhbFNjb3BlOjpMb2NhbFNjb3BlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLSAg
ICA6IG1faGFuZGxlU3RhY2soZ2xvYmFsRGF0YS5oZWFwLmhhbmRsZVN0YWNrKCkpCitpbmxpbmUg
TG9jYWxTY29wZTo6TG9jYWxTY29wZShWTSYgdm0pCisgICAgOiBtX2hhbmRsZVN0YWNrKHZtLmhl
YXAuaGFuZGxlU3RhY2soKSkKIHsKICAgICBtX2hhbmRsZVN0YWNrLT5lbnRlclNjb3BlKG1fbGFz
dEZyYW1lKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFj
a01hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFj
aGluZVN0YWNrTWFya2VyLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUs
NyArMjUsNyBAQAogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCiAjaW5jbHVkZSAiSGVh
cC5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNp
bmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHNldGptcC5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgog
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTE4OCw3ICsxODgsNyBAQCB2b2lkIE1h
Y2hpbmVUaHJlYWRzOjptYWtlVXNhYmxlRnJvbU11bHRpCiAKIHZvaWQgTWFjaGluZVRocmVhZHM6
OmFkZEN1cnJlbnRUaHJlYWQoKQogewotICAgIEFTU0VSVCghbV9oZWFwLT5nbG9iYWxEYXRhKCkt
PmV4Y2x1c2l2ZVRocmVhZCB8fCBtX2hlYXAtPmdsb2JhbERhdGEoKS0+ZXhjbHVzaXZlVGhyZWFk
ID09IGN1cnJlbnRUaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2hlYXAtPnZtKCktPmV4Y2x1c2l2
ZVRocmVhZCB8fCBtX2hlYXAtPnZtKCktPmV4Y2x1c2l2ZVRocmVhZCA9PSBjdXJyZW50VGhyZWFk
KCkpOwogCiAgICAgaWYgKCFtX3RocmVhZFNwZWNpZmljIHx8IHRocmVhZFNwZWNpZmljR2V0KG1f
dGhyZWFkU3BlY2lmaWMpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQsNyArNCw3IEBACiAjaW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAj
aW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkluY3JlbWVudGFsU3dlZXBlci5oIgotI2luY2x1
ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNzAsNyArNzAsNyBAQCBpbmxpbmUgdm9p
ZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0CiAgICAgCiB2b2lkKiBNYXJrZWRBbGxvY2F0
b3I6OmFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90IGJ5dGVzKQogewotICAgIEFTU0VSVChtX2hlYXAt
Pmdsb2JhbERhdGEoKS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwor
ICAgIEFTU0VSVChtX2hlYXAtPnZtKCktPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5n
TG9jaygpKTsKICNpZiBDT0xMRUNUX09OX0VWRVJZX0FMTE9DQVRJT04KICAgICBtX2hlYXAtPmNv
bGxlY3RBbGxHYXJiYWdlKCk7CiAgICAgQVNTRVJUKG1faGVhcC0+bV9vcGVyYXRpb25JblByb2dy
ZXNzID09IE5vT3BlcmF0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBN
YXJrZWRCbG9jazo6TWFya2VkQmxvY2soUmVnaW9uKiByZWdpb24sCiAgICAgLCBtX2Rlc3RydWN0
b3JUeXBlKGRlc3RydWN0b3JUeXBlKQogICAgICwgbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQogICAg
ICwgbV9zdGF0ZShOZXcpIC8vIEFsbCBjZWxscyBzdGFydCBvdXQgdW5tYXJrZWQuCi0gICAgLCBt
X3dlYWtTZXQoYWxsb2NhdG9yLT5oZWFwKCktPmdsb2JhbERhdGEoKSkKKyAgICAsIG1fd2Vha1Nl
dChhbGxvY2F0b3ItPmhlYXAoKS0+dm0oKSkKIHsKICAgICBBU1NFUlQoYWxsb2NhdG9yKTsKICAg
ICBIRUFQX0xPR19CTE9DS19TVEFURV9UUkFOU0lUSU9OKHRoaXMpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTcsNyArMTE3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgTWFya2VkQWxsb2NhdG9y
KiBhbGxvY2F0b3IoKSBjb25zdDsKICAgICAgICAgSGVhcCogaGVhcCgpIGNvbnN0OwotICAgICAg
ICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEoKSBjb25zdDsKKyAgICAgICAgVk0qIHZtKCkgY29u
c3Q7CiAgICAgICAgIFdlYWtTZXQmIHdlYWtTZXQoKTsKICAgICAgICAgCiAgICAgICAgIGVudW0g
U3dlZXBNb2RlIHsgU3dlZXBPbmx5LCBTd2VlcFRvRnJlZUxpc3QgfTsKQEAgLTI0MCw5ICsyNDAs
OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIG1fd2Vha1NldC5oZWFwKCk7CiAg
ICAgfQogCi0gICAgaW5saW5lIEpTR2xvYmFsRGF0YSogTWFya2VkQmxvY2s6Omdsb2JhbERhdGEo
KSBjb25zdAorICAgIGlubGluZSBWTSogTWFya2VkQmxvY2s6OnZtKCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIHJldHVybiBtX3dlYWtTZXQuZ2xvYmFsRGF0YSgpOworICAgICAgICByZXR1cm4gbV93
ZWFrU2V0LnZtKCk7CiAgICAgfQogCiAgICAgaW5saW5lIFdlYWtTZXQmIE1hcmtlZEJsb2NrOjp3
ZWFrU2V0KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5j
cHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOCw3ICs4LDcgQEAKICNpbmNsdWRlICJHQ1Ro
cmVhZC5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9i
amVjdC5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5j
bHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIk9wZXJh
dGlvbnMuaCIKQEAgLTE3LDcgKzE3LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBTbG90VmlzaXRv
cjo6U2xvdFZpc2l0b3IoR0NUaHJlYWRTaGFyZWREYXRhJiBzaGFyZWQpCi0gICAgOiBtX3N0YWNr
KHNoYXJlZC5tX2dsb2JhbERhdGEtPmhlYXAuYmxvY2tBbGxvY2F0b3IoKSkKKyAgICA6IG1fc3Rh
Y2soc2hhcmVkLm1fdm0tPmhlYXAuYmxvY2tBbGxvY2F0b3IoKSkKICAgICAsIG1fdmlzaXRDb3Vu
dCgwKQogICAgICwgbV9pc0luUGFyYWxsZWxNb2RlKGZhbHNlKQogICAgICwgbV9zaGFyZWQoc2hh
cmVkKQpAQCAtMzYsNyArMzYsNyBAQCBTbG90VmlzaXRvcjo6flNsb3RWaXNpdG9yKCkKIAogdm9p
ZCBTbG90VmlzaXRvcjo6c2V0dXAoKQogewotICAgIG1fc2hhcmVkLm1fc2hvdWxkSGFzaENvbnMg
PSBtX3NoYXJlZC5tX2dsb2JhbERhdGEtPmhhdmVFbm91Z2hOZXdTdHJpbmdzVG9IYXNoQ29ucygp
OworICAgIG1fc2hhcmVkLm1fc2hvdWxkSGFzaENvbnMgPSBtX3NoYXJlZC5tX3ZtLT5oYXZlRW5v
dWdoTmV3U3RyaW5nc1RvSGFzaENvbnMoKTsKICAgICBtX3Nob3VsZEhhc2hDb25zID0gbV9zaGFy
ZWQubV9zaG91bGRIYXNoQ29uczsKICNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fc2hhcmVkLm1fZ2NUaHJlYWRzLnNpemUoKTsgKytpKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Ryb25nLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Ryb25nLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0cm9uZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3
ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFz
cyBWTTsKIAogLy8gQSBzdHJvbmdseSByZWZlcmVuY2VkIGhhbmRsZSB0aGF0IHByZXZlbnRzIHRo
ZSBvYmplY3QgaXQgcG9pbnRzIHRvIGZyb20gYmVpbmcgZ2FyYmFnZSBjb2xsZWN0ZWQuCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgU3Ryb25nIDogcHVibGljIEhhbmRsZTxUPiB7CkBAIC00
OCw5ICs0OCw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIFN0cm9uZyhKU0ds
b2JhbERhdGEmLCBFeHRlcm5hbFR5cGUgPSBFeHRlcm5hbFR5cGUoKSk7CisgICAgU3Ryb25nKFZN
JiwgRXh0ZXJuYWxUeXBlID0gRXh0ZXJuYWxUeXBlKCkpOwogCi0gICAgU3Ryb25nKEpTR2xvYmFs
RGF0YSYsIEhhbmRsZTxUPik7CisgICAgU3Ryb25nKFZNJiwgSGFuZGxlPFQ+KTsKICAgICAKICAg
ICBTdHJvbmcoY29uc3QgU3Ryb25nJiBvdGhlcikKICAgICAgICAgOiBIYW5kbGU8VD4oKQpAQCAt
OTUsNyArOTUsNyBAQCBwdWJsaWM6CiAKICAgICBFeHRlcm5hbFR5cGUgZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gSGFuZGxlVHlwZXM8VD46OmdldEZyb21TbG90KHRoaXMtPnNsb3QoKSk7IH0KIAotICAg
IHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYsIEV4dGVybmFsVHlwZSk7CisgICAgdm9pZCBzZXQoVk0m
LCBFeHRlcm5hbFR5cGUpOwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IFN0cm9uZyYgb3Bl
cmF0b3I9KGNvbnN0IFN0cm9uZzxVPiYgb3RoZXIpCiAgICAgewpAQCAtMTA0LDcgKzEwNCw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgfQogCi0gICAgICAg
IHNldCgqSGFuZGxlU2V0OjpoZWFwRm9yKG90aGVyLnNsb3QoKSktPmdsb2JhbERhdGEoKSwgb3Ro
ZXIuZ2V0KCkpOworICAgICAgICBzZXQoKkhhbmRsZVNldDo6aGVhcEZvcihvdGhlci5zbG90KCkp
LT52bSgpLCBvdGhlci5nZXQoKSk7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAgICAg
CkBAIC0xMTUsNyArMTE1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgICAgICB9CiAKLSAgICAgICAgc2V0KCpIYW5kbGVTZXQ6OmhlYXBGb3Iob3RoZXIuc2xvdCgp
KS0+Z2xvYmFsRGF0YSgpLCBvdGhlci5nZXQoKSk7CisgICAgICAgIHNldCgqSGFuZGxlU2V0Ojpo
ZWFwRm9yKG90aGVyLnNsb3QoKSktPnZtKCksIG90aGVyLmdldCgpKTsKICAgICAgICAgcmV0dXJu
ICp0aGlzOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Ryb25n
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0cm9u
Z0lubGluZXMuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3Ryb25nSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyOSArMjYsMjkgQEAKICNp
Zm5kZWYgU3Ryb25nSW5saW5lc19oCiAjZGVmaW5lIFN0cm9uZ0lubGluZXNfaAogCi0jaW5jbHVk
ZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAK
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotaW5saW5lIFN0cm9uZzxUPjo6U3Ryb25nKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgRXh0ZXJuYWxUeXBlIHZhbHVlKQotICAgIDogSGFuZGxlPFQ+KGds
b2JhbERhdGEuaGVhcC5oYW5kbGVTZXQoKS0+YWxsb2NhdGUoKSkKK2lubGluZSBTdHJvbmc8VD46
OlN0cm9uZyhWTSYgdm0sIEV4dGVybmFsVHlwZSB2YWx1ZSkKKyAgICA6IEhhbmRsZTxUPih2bS5o
ZWFwLmhhbmRsZVNldCgpLT5hbGxvY2F0ZSgpKQogewogICAgIHNldCh2YWx1ZSk7CiB9CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgotaW5saW5lIFN0cm9uZzxUPjo6U3Ryb25nKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSGFuZGxlPFQ+IGhhbmRsZSkKLSAgICA6IEhhbmRsZTxUPihnbG9iYWxE
YXRhLmhlYXAuaGFuZGxlU2V0KCktPmFsbG9jYXRlKCkpCitpbmxpbmUgU3Ryb25nPFQ+OjpTdHJv
bmcoVk0mIHZtLCBIYW5kbGU8VD4gaGFuZGxlKQorICAgIDogSGFuZGxlPFQ+KHZtLmhlYXAuaGFu
ZGxlU2V0KCktPmFsbG9jYXRlKCkpCiB7CiAgICAgc2V0KGhhbmRsZS5nZXQoKSk7CiB9CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgotaW5saW5lIHZvaWQgU3Ryb25nPFQ+OjpzZXQoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBFeHRlcm5hbFR5cGUgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHJvbmc8
VD46OnNldChWTSYgdm0sIEV4dGVybmFsVHlwZSB2YWx1ZSkKIHsKICAgICBpZiAoIXNsb3QoKSkK
LSAgICAgICAgc2V0U2xvdChnbG9iYWxEYXRhLmhlYXAuaGFuZGxlU2V0KCktPmFsbG9jYXRlKCkp
OworICAgICAgICBzZXRTbG90KHZtLmhlYXAuaGFuZGxlU2V0KCktPmFsbG9jYXRlKCkpOwogICAg
IHNldCh2YWx1ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1cGVy
UmVnaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3VwZXJS
ZWdpb24uaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U3VwZXJSZWdpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiAKIGNsYXNzIFN1cGVy
UmVnaW9uIDogcHVibGljIFdURjo6TWV0YUFsbG9jYXRvciB7CiBwdWJsaWM6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDcgKzI3LDcgQEAKICNpbmNsdWRlICJXZWFrU2V0LmgiCiAKICNpbmNsdWRlICJIZWFwLmgiCi0j
aW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIKIAogbmFtZXNwYWNlIEpT
QyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgJKHJldmlzaW9uIDE0
ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzgsMTIgKzM4LDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgV2Vha0ltcGwqIGFs
bG9jYXRlKEpTVmFsdWUsIFdlYWtIYW5kbGVPd25lciogPSAwLCB2b2lkKiBjb250ZXh0ID0gMCk7
CiAgICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShXZWFrSW1wbCopOwogCi0gICAgV2Vha1NldChK
U0dsb2JhbERhdGEqKTsKKyAgICBXZWFrU2V0KFZNKik7CiAgICAgfldlYWtTZXQoKTsKICAgICB2
b2lkIGxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CiAKICAgICBIZWFwKiBoZWFwKCkgY29uc3Q7Ci0g
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKCkgY29uc3Q7CisgICAgVk0qIHZtKCkgY29uc3Q7
CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKIApAQCAtNjIsMTkgKzYyLDE5IEBAIHByaXZh
dGU6CiAgICAgV2Vha0Jsb2NrOjpGcmVlQ2VsbCogbV9hbGxvY2F0b3I7CiAgICAgV2Vha0Jsb2Nr
KiBtX25leHRBbGxvY2F0b3I7CiAgICAgRG91Ymx5TGlua2VkTGlzdDxXZWFrQmxvY2s+IG1fYmxv
Y2tzOwotICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworICAgIFZNKiBtX3ZtOwogfTsK
IAotaW5saW5lIFdlYWtTZXQ6OldlYWtTZXQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQoraW5s
aW5lIFdlYWtTZXQ6OldlYWtTZXQoVk0qIHZtKQogICAgIDogbV9hbGxvY2F0b3IoMCkKICAgICAs
IG1fbmV4dEFsbG9jYXRvcigwKQotICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAg
LCBtX3ZtKHZtKQogewogfQogCi1pbmxpbmUgSlNHbG9iYWxEYXRhKiBXZWFrU2V0OjpnbG9iYWxE
YXRhKCkgY29uc3QKK2lubGluZSBWTSogV2Vha1NldDo6dm0oKSBjb25zdAogewotICAgIHJldHVy
biBtX2dsb2JhbERhdGE7CisgICAgcmV0dXJuIG1fdm07CiB9CiAKIGlubGluZSBib29sIFdlYWtT
ZXQ6OmlzRW1wdHkoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0Fic3RyYWN0UEMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9BYnN0cmFjdFBDLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Fic3RyYWN0UEMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNywxOSArMjcsMTkgQEAKICNpbmNsdWRlICJBYnN0cmFjdFBDLmgiCiAKICNpbmNsdWRlICJD
YWxsRnJhbWUuaCIKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJWTS5oIgog
I2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUFic3RyYWN0UEM6
OkFic3RyYWN0UEMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBFeGVjU3RhdGUqIGV4ZWMpCitB
YnN0cmFjdFBDOjpBYnN0cmFjdFBDKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQogewotICAgIFVO
VVNFRF9QQVJBTShnbG9iYWxEYXRhKTsKKyAgICBVTlVTRURfUEFSQU0odm0pOwogICAgIFVOVVNF
RF9QQVJBTShleGVjKTsKICAgICAKICNpZiBFTkFCTEUoSklUKQotICAgIGlmIChnbG9iYWxEYXRh
LmNhblVzZUpJVCgpKSB7CisgICAgaWYgKHZtLmNhblVzZUpJVCgpKSB7CiAgICAgICAgIG1fcG9p
bnRlciA9IGV4ZWMtPnJldHVyblBDKCkudmFsdWUoKTsKICAgICAgICAgbV9tb2RlID0gSklUOwog
ICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
QWJzdHJhY3RQQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9BYnN0cmFjdFBDLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9BYnN0cmFjdFBDLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZN
OwogY2xhc3MgRXhlY1N0YXRlOwogc3RydWN0IEluc3RydWN0aW9uOwogCkBAIC00Myw3ICs0Myw3
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIEFic3RyYWN0UEMoSlNHbG9iYWxE
YXRhJiwgRXhlY1N0YXRlKik7CisgICAgQWJzdHJhY3RQQyhWTSYsIEV4ZWNTdGF0ZSopOwogICAg
IAogI2lmIEVOQUJMRShKSVQpCiAgICAgQWJzdHJhY3RQQyhSZXR1cm5BZGRyZXNzUHRyIHB0cikK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWNoZWRDYWxsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhY2hlZENhbGwu
aAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0NhY2hlZENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgQ2FjaGVkQ2FsbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNGdW5jdGlv
biogZnVuY3Rpb24sIGludCBhcmd1bWVudENvdW50KQogICAgICAgICAgICAgOiBtX3ZhbGlkKGZh
bHNlKQogICAgICAgICAgICAgLCBtX2ludGVycHJldGVyKGNhbGxGcmFtZS0+aW50ZXJwcmV0ZXIo
KSkKLSAgICAgICAgICAgICwgbV9nbG9iYWxPYmplY3RTY29wZShjYWxsRnJhbWUtPmdsb2JhbERh
dGEoKSwgZnVuY3Rpb24tPnNjb3BlKCktPmdsb2JhbE9iamVjdCgpKQorICAgICAgICAgICAgLCBt
X2dsb2JhbE9iamVjdFNjb3BlKGNhbGxGcmFtZS0+dm0oKSwgZnVuY3Rpb24tPnNjb3BlKCktPmds
b2JhbE9iamVjdCgpKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoIWZ1bmN0aW9uLT5p
c0hvc3RGdW5jdGlvbigpKTsKICAgICAgICAgICAgIG1fY2xvc3VyZSA9IG1faW50ZXJwcmV0ZXIt
PnByZXBhcmVGb3JSZXBlYXRDYWxsKGZ1bmN0aW9uLT5qc0V4ZWN1dGFibGUoKSwgY2FsbEZyYW1l
LCBmdW5jdGlvbiwgYXJndW1lbnRDb3VudCArIDEsIGZ1bmN0aW9uLT5zY29wZSgpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHJldmlz
aW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2RlZmluZSBDYWxsRnJhbWVf
aAogCiAjaW5jbHVkZSAiQWJzdHJhY3RQQy5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgor
I2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiSlNTdGFjay5oIgogI2luY2x1ZGUgIk1hY3JvQXNz
ZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyLmgiCkBAIC02MCw0NiArNjAsNDYg
QEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICAvLyB0aGUgYWN0dWFsIERPTSB3aW5kb3csIHdo
aWNoIGNhbid0IGJlICJ0aGlzIiBmb3Igc2VjdXJpdHkgcmVhc29ucy4KICAgICAgICAgSlNPYmpl
Y3QqIGdsb2JhbFRoaXNWYWx1ZSgpIGNvbnN0OwogCi0gICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSgpIGNvbnN0OworICAgICAgICBWTSYgdm0oKSBjb25zdDsKIAogICAgICAgICAvLyBD
b252ZW5pZW5jZSBmdW5jdGlvbnMgZm9yIGFjY2VzcyB0byBnbG9iYWwgZGF0YS4KICAgICAgICAg
Ly8gSXQgdGFrZXMgYSBmZXcgbWVtb3J5IHJlZmVyZW5jZXMgdG8gZ2V0IGZyb20gYSBjYWxsIGZy
YW1lIHRvIHRoZSBnbG9iYWwgZGF0YQogICAgICAgICAvLyBwb2ludGVyLCBzbyB0aGVzZSBhcmUg
aW5lZmZpY2llbnQsIGFuZCBzaG91bGQgYmUgdXNlZCBzcGFyaW5nbHkgaW4gbmV3IGNvZGUuCiAg
ICAgICAgIC8vIEJ1dCB0aGV5J3JlIHVzZWQgaW4gbWFueSBwbGFjZXMgaW4gbGVnYWN5IGNvZGUs
IHNvIHRoZXkncmUgbm90IGdvaW5nIGF3YXkgYW55IHRpbWUgc29vbi4KIAotICAgICAgICB2b2lk
IGNsZWFyRXhjZXB0aW9uKCkgeyBnbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gSlNWYWx1ZSgpOyB9
CisgICAgICAgIHZvaWQgY2xlYXJFeGNlcHRpb24oKSB7IHZtKCkuZXhjZXB0aW9uID0gSlNWYWx1
ZSgpOyB9CiAgICAgICAgIHZvaWQgY2xlYXJTdXBwbGVtZW50YXJ5RXhjZXB0aW9uSW5mbygpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGdsb2JhbERhdGEoKS5leGNlcHRpb25TdGFjayA9IFJlZkNv
dW50ZWRBcnJheTxTdGFja0ZyYW1lPigpOworICAgICAgICAgICAgdm0oKS5leGNlcHRpb25TdGFj
ayA9IFJlZkNvdW50ZWRBcnJheTxTdGFja0ZyYW1lPigpOwogICAgICAgICB9CiAKLSAgICAgICAg
SlNWYWx1ZSBleGNlcHRpb24oKSBjb25zdCB7IHJldHVybiBnbG9iYWxEYXRhKCkuZXhjZXB0aW9u
OyB9Ci0gICAgICAgIGJvb2wgaGFkRXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gZ2xvYmFsRGF0
YSgpLmV4Y2VwdGlvbjsgfQorICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0
dXJuIHZtKCkuZXhjZXB0aW9uOyB9CisgICAgICAgIGJvb2wgaGFkRXhjZXB0aW9uKCkgY29uc3Qg
eyByZXR1cm4gdm0oKS5leGNlcHRpb247IH0KIAotICAgICAgICBjb25zdCBDb21tb25JZGVudGlm
aWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICpnbG9iYWxEYXRhKCkucHJvcGVy
dHlOYW1lczsgfQotICAgICAgICBjb25zdCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYgZW1wdHlMaXN0
KCkgY29uc3QgeyByZXR1cm4gKmdsb2JhbERhdGEoKS5lbXB0eUxpc3Q7IH0KLSAgICAgICAgSW50
ZXJwcmV0ZXIqIGludGVycHJldGVyKCkgeyByZXR1cm4gZ2xvYmFsRGF0YSgpLmludGVycHJldGVy
OyB9Ci0gICAgICAgIEhlYXAqIGhlYXAoKSB7IHJldHVybiAmZ2xvYmFsRGF0YSgpLmhlYXA7IH0K
KyAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25zdCB7
IHJldHVybiAqdm0oKS5wcm9wZXJ0eU5hbWVzOyB9CisgICAgICAgIGNvbnN0IE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyJiBlbXB0eUxpc3QoKSBjb25zdCB7IHJldHVybiAqdm0oKS5lbXB0eUxpc3Q7IH0K
KyAgICAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyKCkgeyByZXR1cm4gdm0oKS5pbnRlcnBy
ZXRlcjsgfQorICAgICAgICBIZWFwKiBoZWFwKCkgeyByZXR1cm4gJnZtKCkuaGVhcDsgfQogI2lm
bmRlZiBOREVCVUcKICAgICAgICAgdm9pZCBkdW1wQ2FsbGVyKCk7CiAjZW5kaWYKLSAgICAgICAg
c3RhdGljIGNvbnN0IEhhc2hUYWJsZSogYXJyYXlDb25zdHJ1Y3RvclRhYmxlKENhbGxGcmFtZSog
Y2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5hcnJheUNvbnN0cnVj
dG9yVGFibGU7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogYXJyYXlQcm90b3R5
cGVUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCkuYXJyYXlQcm90b3R5cGVUYWJsZTsgfQotICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRh
YmxlKiBib29sZWFuUHJvdG90eXBlVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJu
IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmJvb2xlYW5Qcm90b3R5cGVUYWJsZTsgfQotICAgICAg
ICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBkYXRlVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
IHsgcmV0dXJuIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmRhdGVUYWJsZTsgfQotICAgICAgICBz
dGF0aWMgY29uc3QgSGFzaFRhYmxlKiBkYXRlQ29uc3RydWN0b3JUYWJsZShDYWxsRnJhbWUqIGNh
bGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZGF0ZUNvbnN0cnVjdG9y
VGFibGU7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZXJyb3JQcm90b3R5cGVU
YWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT5nbG9iYWxEYXRh
KCkuZXJyb3JQcm90b3R5cGVUYWJsZTsgfQotICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxl
KiBnbG9iYWxPYmplY3RUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZy
YW1lLT5nbG9iYWxEYXRhKCkuZ2xvYmFsT2JqZWN0VGFibGU7IH0KLSAgICAgICAgc3RhdGljIGNv
bnN0IEhhc2hUYWJsZSoganNvblRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBj
YWxsRnJhbWUtPmdsb2JhbERhdGEoKS5qc29uVGFibGU7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0
IEhhc2hUYWJsZSogbWF0aFRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxs
RnJhbWUtPmdsb2JhbERhdGEoKS5tYXRoVGFibGU7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IEhh
c2hUYWJsZSogbnVtYmVyQ29uc3RydWN0b3JUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyBy
ZXR1cm4gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkubnVtYmVyQ29uc3RydWN0b3JUYWJsZTsgfQot
ICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBudW1iZXJQcm90b3R5cGVUYWJsZShDYWxs
RnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkubnVtYmVy
UHJvdG90eXBlVGFibGU7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogb2JqZWN0
Q29uc3RydWN0b3JUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCkub2JqZWN0Q29uc3RydWN0b3JUYWJsZTsgfQotICAgICAgICBzdGF0aWMg
Y29uc3QgSGFzaFRhYmxlKiBwcml2YXRlTmFtZVByb3RvdHlwZVRhYmxlKENhbGxGcmFtZSogY2Fs
bEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5wcml2YXRlTmFtZVByb3Rv
dHlwZVRhYmxlOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIHJlZ0V4cFRhYmxl
KENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5y
ZWdFeHBUYWJsZTsgfQotICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiByZWdFeHBDb25z
dHJ1Y3RvclRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPmds
b2JhbERhdGEoKS5yZWdFeHBDb25zdHJ1Y3RvclRhYmxlOyB9Ci0gICAgICAgIHN0YXRpYyBjb25z
dCBIYXNoVGFibGUqIHJlZ0V4cFByb3RvdHlwZVRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7
IHJldHVybiBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5yZWdFeHBQcm90b3R5cGVUYWJsZTsgfQot
ICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBzdHJpbmdDb25zdHJ1Y3RvclRhYmxlKENh
bGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5zdHJp
bmdDb25zdHJ1Y3RvclRhYmxlOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGFy
cmF5Q29uc3RydWN0b3JUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZy
YW1lLT52bSgpLmFycmF5Q29uc3RydWN0b3JUYWJsZTsgfQorICAgICAgICBzdGF0aWMgY29uc3Qg
SGFzaFRhYmxlKiBhcnJheVByb3RvdHlwZVRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJl
dHVybiBjYWxsRnJhbWUtPnZtKCkuYXJyYXlQcm90b3R5cGVUYWJsZTsgfQorICAgICAgICBzdGF0
aWMgY29uc3QgSGFzaFRhYmxlKiBib29sZWFuUHJvdG90eXBlVGFibGUoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5ib29sZWFuUHJvdG90eXBlVGFibGU7IH0K
KyAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZGF0ZVRhYmxlKENhbGxGcmFtZSogY2Fs
bEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuZGF0ZVRhYmxlOyB9CisgICAgICAgIHN0
YXRpYyBjb25zdCBIYXNoVGFibGUqIGRhdGVDb25zdHJ1Y3RvclRhYmxlKENhbGxGcmFtZSogY2Fs
bEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuZGF0ZUNvbnN0cnVjdG9yVGFibGU7IH0K
KyAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZXJyb3JQcm90b3R5cGVUYWJsZShDYWxs
RnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmVycm9yUHJvdG90eXBl
VGFibGU7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZ2xvYmFsT2JqZWN0VGFi
bGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5nbG9iYWxP
YmplY3RUYWJsZTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBqc29uVGFibGUo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5qc29uVGFibGU7
IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogbWF0aFRhYmxlKENhbGxGcmFtZSog
Y2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkubWF0aFRhYmxlOyB9CisgICAgICAg
IHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIG51bWJlckNvbnN0cnVjdG9yVGFibGUoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5udW1iZXJDb25zdHJ1Y3RvclRh
YmxlOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIG51bWJlclByb3RvdHlwZVRh
YmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkubnVtYmVy
UHJvdG90eXBlVGFibGU7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogb2JqZWN0
Q29uc3RydWN0b3JUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1l
LT52bSgpLm9iamVjdENvbnN0cnVjdG9yVGFibGU7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IEhh
c2hUYWJsZSogcHJpdmF0ZU5hbWVQcm90b3R5cGVUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkg
eyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLnByaXZhdGVOYW1lUHJvdG90eXBlVGFibGU7IH0KKyAg
ICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogcmVnRXhwVGFibGUoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5yZWdFeHBUYWJsZTsgfQorICAgICAgICBz
dGF0aWMgY29uc3QgSGFzaFRhYmxlKiByZWdFeHBDb25zdHJ1Y3RvclRhYmxlKENhbGxGcmFtZSog
Y2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkucmVnRXhwQ29uc3RydWN0b3JUYWJs
ZTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiByZWdFeHBQcm90b3R5cGVUYWJs
ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLnJlZ0V4cFBy
b3RvdHlwZVRhYmxlOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIHN0cmluZ0Nv
bnN0cnVjdG9yVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+
dm0oKS5zdHJpbmdDb25zdHJ1Y3RvclRhYmxlOyB9CiAKICAgICAgICAgc3RhdGljIENhbGxGcmFt
ZSogY3JlYXRlKFJlZ2lzdGVyKiBjYWxsRnJhbWVCYXNlKSB7IHJldHVybiBzdGF0aWNfY2FzdDxD
YWxsRnJhbWUqPihjYWxsRnJhbWVCYXNlKTsgfQogICAgICAgICBSZWdpc3RlciogcmVnaXN0ZXJz
KCkgeyByZXR1cm4gdGhpczsgfQpAQCAtMTEyLDcgKzExMiw3IEBAIG5hbWVzcGFjZSBKU0MgIHsK
ICAgICAgICAgYm9vbCBoYXNSZXR1cm5QQygpIGNvbnN0IHsgcmV0dXJuICEhdGhpc1tKU1N0YWNr
OjpSZXR1cm5QQ10udlBDKCk7IH0KICAgICAgICAgdm9pZCBjbGVhclJldHVyblBDKCkgeyByZWdp
c3RlcnMoKVtKU1N0YWNrOjpSZXR1cm5QQ10gPSBzdGF0aWNfY2FzdDxJbnN0cnVjdGlvbio+KDAp
OyB9CiAjZW5kaWYKLSAgICAgICAgQWJzdHJhY3RQQyBhYnN0cmFjdFJldHVyblBDKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkgeyByZXR1cm4gQWJzdHJhY3RQQyhnbG9iYWxEYXRhLCB0aGlzKTsg
fQorICAgICAgICBBYnN0cmFjdFBDIGFic3RyYWN0UmV0dXJuUEMoVk0mIHZtKSB7IHJldHVybiBB
YnN0cmFjdFBDKHZtLCB0aGlzKTsgfQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0Rm9yTm9uREZHQ29kZSgpIGNvbnN0OwogICAgICAgICB2b2lk
IHNldEJ5dGVjb2RlT2Zmc2V0Rm9yTm9uREZHQ29kZSh1bnNpZ25lZCBvZmZzZXQpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUNsb3N1cmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lQ2xv
c3VyZS5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lQ2xvc3VyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBA
IHN0cnVjdCBDYWxsRnJhbWVDbG9zdXJlIHsKICAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZTsK
ICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbjsKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0
aW9uRXhlY3V0YWJsZTsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGE7CisgICAgVk0qIHZt
OwogICAgIEpTU2NvcGUqIHNjb3BlOwogICAgIGludCBwYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1Ro
aXM7CiAgICAgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lv
biAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNyArMTk5LDcgQEAgSW50ZXJwcmV0ZXI6OlN0
YWNrUG9saWN5OjpTdGFja1BvbGljeShJbgogfQogCiAKLXN0YXRpYyBDYWxsRnJhbWUqIGdldENh
bGxlckluZm8oSlNHbG9iYWxEYXRhKiwgQ2FsbEZyYW1lKiwgdW5zaWduZWQmIGJ5dGVjb2RlT2Zm
c2V0LCBDb2RlQmxvY2sqJiBjYWxsZXJPdXQpOworc3RhdGljIENhbGxGcmFtZSogZ2V0Q2FsbGVy
SW5mbyhWTSosIENhbGxGcmFtZSosIHVuc2lnbmVkJiBieXRlY29kZU9mZnNldCwgQ29kZUJsb2Nr
KiYgY2FsbGVyT3V0KTsKIAogLy8gUmV0dXJucyB0aGUgZGVwdGggb2YgdGhlIHNjb3BlIGNoYWlu
IHdpdGhpbiBhIGdpdmVuIGNhbGwgZnJhbWUuCiBzdGF0aWMgaW50IGRlcHRoKENvZGVCbG9jayog
Y29kZUJsb2NrLCBKU1Njb3BlKiBzYykKQEAgLTIxOCw3ICsyMTgsNyBAQCBKU1ZhbHVlIGV2YWwo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgaWYgKCFwcm9ncmFtLmlzU3RyaW5nKCkpCiAgICAg
ICAgIHJldHVybiBwcm9ncmFtOwogICAgIAotICAgIFRvcENhbGxGcmFtZVNldHRlciB0b3BDYWxs
RnJhbWUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZSk7CisgICAgVG9wQ2FsbEZy
YW1lU2V0dGVyIHRvcENhbGxGcmFtZShjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZSk7CiAgICAg
U3RyaW5nIHByb2dyYW1Tb3VyY2UgPSBhc1N0cmluZyhwcm9ncmFtKS0+dmFsdWUoY2FsbEZyYW1l
KTsKICAgICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKQEAgLTI0NCw3ICsyNDQsNyBAQCBKU1ZhbHVlIGV2YWwoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIElmIHRoZSBsaXRlcmFsIHBh
cnNlciBiYWlsZWQsIGl0IHNob3VsZCBub3QgaGF2ZSB0aHJvd24gZXhjZXB0aW9ucy4KLSAgICAg
ICAgQVNTRVJUKCFjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb24pOworICAgICAgICBB
U1NFUlQoIWNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24pOwogCiAgICAgICAgIEpTVmFsdWUgZXhj
ZXB0aW9uVmFsdWU7CiAgICAgICAgIGV2YWwgPSBjYWxsZXJDb2RlQmxvY2stPmV2YWxDb2RlQ2Fj
aGUoKS5nZXRTbG93KGNhbGxGcmFtZSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgY2FsbGVyQ29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSwgcHJvZ3JhbVNvdXJjZSwgY2FsbGVy
U2NvcGVDaGFpbiwgZXhjZXB0aW9uVmFsdWUpOwpAQCAtMjU2LDcgKzI1Niw3IEBAIEpTVmFsdWUg
ZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2Fs
bGVyRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIEFTU0VSVChpc1ZhbGlkVGhpc09iamVjdCh0aGlz
VmFsdWUsIGNhbGxGcmFtZSkpOwotICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLmludGVycHJldGVyOworICAgIEludGVycHJldGVyKiBpbnRlcnBy
ZXRlciA9IGNhbGxGcmFtZS0+dm0oKS5pbnRlcnByZXRlcjsKICAgICByZXR1cm4gaW50ZXJwcmV0
ZXItPmV4ZWN1dGUoZXZhbCwgY2FsbEZyYW1lLCB0aGlzVmFsdWUsIGNhbGxlclNjb3BlQ2hhaW4p
OwogfQogCkBAIC0yNjYsNyArMjY2LDcgQEAgQ2FsbEZyYW1lKiBsb2FkVmFyYXJncyhDYWxsRnJh
bWUqIGNhbGxGcgogICAgICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9
IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKTsKICAgICAgICAgQ2FsbEZy
YW1lKiBuZXdDYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUtPnJlZ2lzdGVy
cygpICsgZmlyc3RGcmVlUmVnaXN0ZXIgKyBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIEpT
U3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUpOwogICAgICAgICBpZiAoYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPiBBcmd1bWVudHM6Ok1heEFyZ3VtZW50cyArIDEgfHwgIXN0YWNrLT5ncm93
KG5ld0NhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpKSB7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPmds
b2JhbERhdGEoKS5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1l
KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24gPSBjcmVhdGVTdGFja092
ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9
CiAKQEAgLTI4MCw3ICsyODAsNyBAQCBDYWxsRnJhbWUqIGxvYWRWYXJhcmdzKENhbGxGcmFtZSog
Y2FsbEZyCiAgICAgaWYgKGFyZ3VtZW50cy5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAg
IENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5y
ZWdpc3RlcnMoKSArIGZpcnN0RnJlZVJlZ2lzdGVyICsgMSArIEpTU3RhY2s6OkNhbGxGcmFtZUhl
YWRlclNpemUpOwogICAgICAgICBpZiAoIXN0YWNrLT5ncm93KG5ld0NhbGxGcmFtZS0+cmVnaXN0
ZXJzKCkpKSB7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb24g
PSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKKyAgICAgICAgICAgIGNhbGxG
cmFtZS0+dm0oKS5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1l
KTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIG5ld0NhbGxGcmFt
ZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoMSk7CkBAIC0yODksNyArMjg5LDcgQEAg
Q2FsbEZyYW1lKiBsb2FkVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxGcgogICAgIH0KIAogICAgIGlm
ICghYXJndW1lbnRzLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgY2FsbEZyYW1lLT5nbG9iYWxEYXRh
KCkuZXhjZXB0aW9uID0gY3JlYXRlSW52YWxpZFBhcmFtRXJyb3IoY2FsbEZyYW1lLCAiRnVuY3Rp
b24ucHJvdG90eXBlLmFwcGx5IiwgYXJndW1lbnRzKTsKKyAgICAgICAgY2FsbEZyYW1lLT52bSgp
LmV4Y2VwdGlvbiA9IGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKGNhbGxGcmFtZSwgIkZ1bmN0aW9u
LnByb3RvdHlwZS5hcHBseSIsIGFyZ3VtZW50cyk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
IApAQCAtMjk4LDcgKzI5OCw3IEBAIENhbGxGcmFtZSogbG9hZFZhcmFyZ3MoQ2FsbEZyYW1lKiBj
YWxsRnIKICAgICAgICAgdW5zaWduZWQgYXJnQ291bnQgPSBhcmdzT2JqZWN0LT5sZW5ndGgoY2Fs
bEZyYW1lKTsKICAgICAgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNy
ZWF0ZShjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgZmlyc3RGcmVlUmVnaXN0ZXIgKyBDYWxsRnJh
bWU6Om9mZnNldEZvcihhcmdDb3VudCArIDEpKTsKICAgICAgICAgaWYgKGFyZ0NvdW50ID4gQXJn
dW1lbnRzOjpNYXhBcmd1bWVudHMgfHwgIXN0YWNrLT5ncm93KG5ld0NhbGxGcmFtZS0+cmVnaXN0
ZXJzKCkpKSB7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb24g
PSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKKyAgICAgICAgICAgIGNhbGxG
cmFtZS0+dm0oKS5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1l
KTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIG5ld0NhbGxGcmFt
ZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYXJnQ291bnQgKyAxKTsKQEAgLTMxMiw3
ICszMTIsNyBAQCBDYWxsRnJhbWUqIGxvYWRWYXJhcmdzKENhbGxGcmFtZSogY2FsbEZyCiAgICAg
ICAgIHVuc2lnbmVkIGFyZ0NvdW50ID0gYXJyYXktPmxlbmd0aCgpOwogICAgICAgICBDYWxsRnJh
bWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKGNhbGxGcmFtZS0+cmVnaXN0ZXJz
KCkgKyBmaXJzdEZyZWVSZWdpc3RlciArIENhbGxGcmFtZTo6b2Zmc2V0Rm9yKGFyZ0NvdW50ICsg
MSkpOwogICAgICAgICBpZiAoYXJnQ291bnQgPiBBcmd1bWVudHM6Ok1heEFyZ3VtZW50cyB8fCAh
c3RhY2stPmdyb3cobmV3Q2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkpIHsKLSAgICAgICAgICAgIGNh
bGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJv
cihjYWxsRnJhbWUpOworICAgICAgICAgICAgY2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlvbiA9IGNy
ZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOwogICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgIH0KICAgICAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyhhcmdDb3VudCArIDEpOwpAQCAtMzI1LDIyICszMjUsMjIgQEAgQ2FsbEZyYW1lKiBs
b2FkVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxGcgogICAgIHVuc2lnbmVkIGFyZ0NvdW50ID0gYXJn
T2JqZWN0LT5nZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
LnRvVUludDMyKGNhbGxGcmFtZSk7CiAgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBDYWxs
RnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgZmlyc3RGcmVlUmVnaXN0ZXIg
KyBDYWxsRnJhbWU6Om9mZnNldEZvcihhcmdDb3VudCArIDEpKTsKICAgICBpZiAoYXJnQ291bnQg
PiBBcmd1bWVudHM6Ok1heEFyZ3VtZW50cyB8fCAhc3RhY2stPmdyb3cobmV3Q2FsbEZyYW1lLT5y
ZWdpc3RlcnMoKSkpIHsKLSAgICAgICAgY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9u
ID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CisgICAgICAgIGNhbGxGcmFt
ZS0+dm0oKS5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIG5ld0NhbGxGcmFtZS0+c2V0QXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMoYXJnQ291bnQgKyAxKTsKICAgICBuZXdDYWxsRnJhbWUtPnNldFRo
aXNWYWx1ZSh0aGlzVmFsdWUpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291bnQ7
ICsraSkgewogICAgICAgICBuZXdDYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGFzT2JqZWN0KGFy
Z3VtZW50cyktPmdldChjYWxsRnJhbWUsIGkpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbikpCisgICAgICAgIGlmIChVTkxJS0VMWShjYWxs
RnJhbWUtPnZtKCkuZXhjZXB0aW9uKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAg
ICByZXR1cm4gbmV3Q2FsbEZyYW1lOwogfQogCi1JbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorSW50ZXJwcmV0ZXI6OkludGVycHJldGVyKFZNJiB2bSkK
ICAgICA6IG1fc2FtcGxlRW50cnlEZXB0aCgwKQotICAgICwgbV9zdGFjayhnbG9iYWxEYXRhKQor
ICAgICwgbV9zdGFjayh2bSkKICAgICAsIG1fZXJyb3JIYW5kbGluZ01vZGVSZWVudHJ5KDApCiAj
aWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICwgbV9pbml0aWFsaXplZChmYWxzZSkKQEAgLTQxNiwx
NCArNDE2LDE0IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmR1bXBSZWdpc3RlcnMoQ2FsbEZyYW0KICAg
ICBkYXRhTG9nRigiW1Njb3BlQ2hhaW5dICAgICAgICAgICAgICAgfCAlMTBwIHwgJXAgXG4iLCBp
dCwgY2FsbEZyYW1lLT5zY29wZSgpKTsKICAgICArK2l0OwogI2lmIEVOQUJMRShKSVQpCi0gICAg
QWJzdHJhY3RQQyBwYyA9IGNhbGxGcmFtZS0+YWJzdHJhY3RSZXR1cm5QQyhjYWxsRnJhbWUtPmds
b2JhbERhdGEoKSk7CisgICAgQWJzdHJhY3RQQyBwYyA9IGNhbGxGcmFtZS0+YWJzdHJhY3RSZXR1
cm5QQyhjYWxsRnJhbWUtPnZtKCkpOwogICAgIGlmIChwYy5oYXNKSVRSZXR1cm5BZGRyZXNzKCkp
CiAgICAgICAgIGRhdGFMb2dGKCJbUmV0dXJuSklUUENdICAgICAgICAgICAgICB8ICUxMHAgfCAl
cCBcbiIsIGl0LCBwYy5qaXRSZXR1cm5BZGRyZXNzKCkudmFsdWUoKSk7CiAjZW5kaWYKICAgICB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7CiAgICAgaW50IGxpbmUgPSAwOwogICAgIENvZGVC
bG9jayogY2FsbGVyQ29kZUJsb2NrID0gMDsKLSAgICBnZXRDYWxsZXJJbmZvKCZjYWxsRnJhbWUt
Pmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLCBieXRlY29kZU9mZnNldCwgY2FsbGVyQ29kZUJsb2Nr
KTsKKyAgICBnZXRDYWxsZXJJbmZvKCZjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZSwgYnl0ZWNv
ZGVPZmZzZXQsIGNhbGxlckNvZGVCbG9jayk7CiAgICAgbGluZSA9IGNhbGxlckNvZGVCbG9jay0+
bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKICAgICBkYXRhTG9n
RigiW1JldHVyblZQQ10gICAgICAgICAgICAgICAgfCAlMTBwIHwgJWQgKGxpbmUgJWQpXG4iLCBp
dCwgYnl0ZWNvZGVPZmZzZXQsIGxpbmUpOwogICAgICsraXQ7CkBAIC00OTIsNyArNDkyLDcgQEAg
TkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnVud2luZENhbAogICAgIGlmIChvbGRDb2Rl
QmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIG9sZENvZGVCbG9jay0+bmVlZHNB
Y3RpdmF0aW9uKCkpIHsKICAgICAgICAgYWN0aXZhdGlvbiA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihvbGRDb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKS5qc1ZhbHVlKCk7CiAgICAgICAg
IGlmIChhY3RpdmF0aW9uKQotICAgICAgICAgICAganNDYXN0PEpTQWN0aXZhdGlvbio+KGFjdGl2
YXRpb24pLT50ZWFyT2ZmKCpzY29wZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgIGpzQ2Fz
dDxKU0FjdGl2YXRpb24qPihhY3RpdmF0aW9uKS0+dGVhck9mZigqc2NvcGUtPnZtKCkpOwogICAg
IH0KIAogICAgIGlmIChvbGRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYm
IG9sZENvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpKSB7CkBAIC01MDUsMTAgKzUwNSwxMCBAQCBO
RVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6dW53aW5kQ2FsCiAgICAgfQogCiAgICAgQ2Fs
bEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBjYWxs
RnJhbWUtPmdsb2JhbERhdGEoKS50b3BDYWxsRnJhbWUgPSBjYWxsZXJGcmFtZTsKKyAgICBjYWxs
RnJhbWUtPnZtKCkudG9wQ2FsbEZyYW1lID0gY2FsbGVyRnJhbWU7CiAgICAgaWYgKGNhbGxlckZy
YW1lLT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Y2FsbEZyYW1lID0gZ2V0Q2FsbGVySW5mbygmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxG
cmFtZSwgYnl0ZWNvZGVPZmZzZXQsIGNvZGVCbG9jayk7CisgICAgY2FsbEZyYW1lID0gZ2V0Q2Fs
bGVySW5mbygmY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUsIGJ5dGVjb2RlT2Zmc2V0LCBjb2Rl
QmxvY2spOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC01MzMsOCArNTMzLDggQEAgc3RhdGlj
IHZvaWQgYXBwZW5kU291cmNlVG9FcnJvcihDYWxsRnJhbQogICAgIGlmICghZXhwcmVzc2lvblN0
b3AgfHwgZXhwcmVzc2lvblN0YXJ0ID4gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VTdHJpbmcubGVu
Z3RoKCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEg
PSAmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCk7Ci0gICAgSlNWYWx1ZSBqc01lc3NhZ2UgPSBleGNl
cHRpb24tPmdldERpcmVjdCgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+
bWVzc2FnZSk7CisgICAgVk0qIHZtID0gJmNhbGxGcmFtZS0+dm0oKTsKKyAgICBKU1ZhbHVlIGpz
TWVzc2FnZSA9IGV4Y2VwdGlvbi0+Z2V0RGlyZWN0KCp2bSwgdm0tPnByb3BlcnR5TmFtZXMtPm1l
c3NhZ2UpOwogICAgIGlmICghanNNZXNzYWdlIHx8ICFqc01lc3NhZ2UuaXNTdHJpbmcoKSkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC01NjEsNyArNTYxLDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU291
cmNlVG9FcnJvcihDYWxsRnJhbQogICAgICAgICBtZXNzYWdlID0gbWFrZVN0cmluZyhtZXNzYWdl
LCAiIChuZWFyICcuLi4iLCBjb2RlQmxvY2stPnNvdXJjZSgpLT5nZXRSYW5nZShzdGFydCwgc3Rv
cCksICIuLi4nKSIpOwogICAgIH0KIAotICAgIGV4Y2VwdGlvbi0+cHV0RGlyZWN0KCpnbG9iYWxE
YXRhLCBnbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5tZXNzYWdlLCBqc1N0cmluZyhnbG9iYWxE
YXRhLCBtZXNzYWdlKSk7CisgICAgZXhjZXB0aW9uLT5wdXREaXJlY3QoKnZtLCB2bS0+cHJvcGVy
dHlOYW1lcy0+bWVzc2FnZSwganNTdHJpbmcodm0sIG1lc3NhZ2UpKTsKIH0KIAogc3RhdGljIHVu
c2lnbmVkIGdldEJ5dGVjb2RlT2Zmc2V0Rm9yQ2FsbEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1l
KQpAQCAtNTgxLDkgKzU4MSw5IEBAIHN0YXRpYyB1bnNpZ25lZCBnZXRCeXRlY29kZU9mZnNldEZv
ckNhbGwKICNlbmRpZgogfQogCi1zdGF0aWMgQ2FsbEZyYW1lKiBnZXRDYWxsZXJJbmZvKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHVuc2lnbmVkJiBieXRl
Y29kZU9mZnNldCwgQ29kZUJsb2NrKiYgY2FsbGVyKQorc3RhdGljIENhbGxGcmFtZSogZ2V0Q2Fs
bGVySW5mbyhWTSogdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCB1bnNpZ25lZCYgYnl0ZWNvZGVP
ZmZzZXQsIENvZGVCbG9jayomIGNhbGxlcikKIHsKLSAgICBBU1NFUlRfVU5VU0VEKGdsb2JhbERh
dGEsIGdsb2JhbERhdGEpOworICAgIEFTU0VSVF9VTlVTRUQodm0sIHZtKTsKICAgICBieXRlY29k
ZU9mZnNldCA9IDA7CiAgICAgQVNTRVJUKCFjYWxsRnJhbWUtPmhhc0hvc3RDYWxsRnJhbWVGbGFn
KCkpOwogICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
ID8gY2FsbEZyYW1lLT50cnVlQ2FsbGVyRnJhbWUoKSA6IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUo
KS0+cmVtb3ZlSG9zdENhbGxGcmFtZUZsYWcoKTsKQEAgLTcxOSw5ICs3MTksOSBAQCBTdHJpbmcg
U3RhY2tGcmFtZTo6dG9TdHJpbmcoQ2FsbEZyYW1lKiBjCiAgICAgcmV0dXJuIHRyYWNlQnVpbGQu
dG9TdHJpbmcoKS5pbXBsKCk7CiB9CiAKLXZvaWQgSW50ZXJwcmV0ZXI6OmdldFN0YWNrVHJhY2Uo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBWZWN0b3I8U3RhY2tGcmFtZT4mIHJlc3VsdHMsIHNp
emVfdCBtYXhTdGFja1NpemUpCit2b2lkIEludGVycHJldGVyOjpnZXRTdGFja1RyYWNlKFZNKiB2
bSwgVmVjdG9yPFN0YWNrRnJhbWU+JiByZXN1bHRzLCBzaXplX3QgbWF4U3RhY2tTaXplKQogewot
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lLT5yZW1v
dmVIb3N0Q2FsbEZyYW1lRmxhZygpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gdm0tPnRv
cENhbGxGcmFtZS0+cmVtb3ZlSG9zdENhbGxGcmFtZUZsYWcoKTsKICAgICBpZiAoIWNhbGxGcmFt
ZSB8fCBjYWxsRnJhbWUgPT0gQ2FsbEZyYW1lOjpub0NhbGxlcigpKSAKICAgICAgICAgcmV0dXJu
OwogICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gZ2V0Qnl0ZWNvZGVPZmZzZXRGb3JDYWxs
RnJhbWUoY2FsbEZyYW1lKTsKQEAgLTczNSwxMCArNzM1LDEwIEBAIHZvaWQgSW50ZXJwcmV0ZXI6
OmdldFN0YWNrVHJhY2UoSlNHbG9iYWwKICAgICAgICAgaWYgKGNhbGxlckNvZGVCbG9jaykgewog
ICAgICAgICAgICAgc291cmNlVVJMID0gZ2V0U291cmNlVVJMRnJvbUNhbGxGcmFtZShjYWxsRnJh
bWUpOwogICAgICAgICAgICAgU3RhY2tGcmFtZSBzID0gewotICAgICAgICAgICAgICAgIFN0cm9u
ZzxKU09iamVjdD4oKmdsb2JhbERhdGEsIGNhbGxGcmFtZS0+Y2FsbGVlKCkpLAorICAgICAgICAg
ICAgICAgIFN0cm9uZzxKU09iamVjdD4oKnZtLCBjYWxsRnJhbWUtPmNhbGxlZSgpKSwKICAgICAg
ICAgICAgICAgICBnZXRTdGFja0ZyYW1lQ29kZVR5cGUoY2FsbEZyYW1lKSwKLSAgICAgICAgICAg
ICAgICBTdHJvbmc8RXhlY3V0YWJsZUJhc2U+KCpnbG9iYWxEYXRhLCBjYWxsZXJDb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpKSwKLSAgICAgICAgICAgICAgICBTdHJvbmc8VW5saW5rZWRDb2Rl
QmxvY2s+KCpnbG9iYWxEYXRhLCBjYWxsZXJDb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkp
LAorICAgICAgICAgICAgICAgIFN0cm9uZzxFeGVjdXRhYmxlQmFzZT4oKnZtLCBjYWxsZXJDb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSwKKyAgICAgICAgICAgICAgICBTdHJvbmc8VW5saW5r
ZWRDb2RlQmxvY2s+KCp2bSwgY2FsbGVyQ29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpKSwK
ICAgICAgICAgICAgICAgICBjYWxsZXJDb2RlQmxvY2stPnNvdXJjZSgpLAogICAgICAgICAgICAg
ICAgIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmxpbmVObygpLAogICAgICAg
ICAgICAgICAgIGNhbGxlckNvZGVCbG9jay0+c291cmNlT2Zmc2V0KCksCkBAIC03NDcsMjggKzc0
NywyOCBAQCB2b2lkIEludGVycHJldGVyOjpnZXRTdGFja1RyYWNlKEpTR2xvYmFsCiAgICAgICAg
ICAgICB9OwogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocyk7CiAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBTdGFja0ZyYW1lIHMgPSB7IFN0cm9uZzxKU09iamVjdD4oKmdsb2JhbERh
dGEsIGNhbGxGcmFtZS0+Y2FsbGVlKCkpLCBTdGFja0ZyYW1lTmF0aXZlQ29kZSwgU3Ryb25nPEV4
ZWN1dGFibGVCYXNlPigpLCBTdHJvbmc8VW5saW5rZWRDb2RlQmxvY2s+KCksIDAsIDAsIDAsIDAs
IFN0cmluZygpfTsKKyAgICAgICAgICAgIFN0YWNrRnJhbWUgcyA9IHsgU3Ryb25nPEpTT2JqZWN0
Pigqdm0sIGNhbGxGcmFtZS0+Y2FsbGVlKCkpLCBTdGFja0ZyYW1lTmF0aXZlQ29kZSwgU3Ryb25n
PEV4ZWN1dGFibGVCYXNlPigpLCBTdHJvbmc8VW5saW5rZWRDb2RlQmxvY2s+KCksIDAsIDAsIDAs
IDAsIFN0cmluZygpfTsKICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHMpOwogICAgICAgICB9
Ci0gICAgICAgIGNhbGxGcmFtZSA9IGdldENhbGxlckluZm8oZ2xvYmFsRGF0YSwgY2FsbEZyYW1l
LCBieXRlY29kZU9mZnNldCwgY2FsbGVyQ29kZUJsb2NrKTsKKyAgICAgICAgY2FsbEZyYW1lID0g
Z2V0Q2FsbGVySW5mbyh2bSwgY2FsbEZyYW1lLCBieXRlY29kZU9mZnNldCwgY2FsbGVyQ29kZUJs
b2NrKTsKICAgICB9CiB9CiAKIHZvaWQgSW50ZXJwcmV0ZXI6OmFkZFN0YWNrVHJhY2VJZk5lY2Vz
c2FyeShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBlcnJvcikKIHsKLSAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEgPSAmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCk7Ci0gICAgQVNTRVJU
KGNhbGxGcmFtZSA9PSBnbG9iYWxEYXRhLT50b3BDYWxsRnJhbWUgfHwgY2FsbEZyYW1lID09IGNh
bGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkgfHwgY2FsbEZyYW1l
ID09IGNhbGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpOworICAg
IFZNKiB2bSA9ICZjYWxsRnJhbWUtPnZtKCk7CisgICAgQVNTRVJUKGNhbGxGcmFtZSA9PSB2bS0+
dG9wQ2FsbEZyYW1lIHx8IGNhbGxGcmFtZSA9PSBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpIHx8IGNhbGxGcmFtZSA9PSBjYWxsRnJhbWUtPmR5bmFtaWNHbG9i
YWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsKIAogICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFj
a1RyYWNlOwotICAgIGdldFN0YWNrVHJhY2UoJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBzdGFj
a1RyYWNlKTsKLSAgICBnbG9iYWxEYXRhLT5leGNlcHRpb25TdGFjayA9IFJlZkNvdW50ZWRBcnJh
eTxTdGFja0ZyYW1lPihzdGFja1RyYWNlKTsKKyAgICBnZXRTdGFja1RyYWNlKCZjYWxsRnJhbWUt
PnZtKCksIHN0YWNrVHJhY2UpOworICAgIHZtLT5leGNlcHRpb25TdGFjayA9IFJlZkNvdW50ZWRB
cnJheTxTdGFja0ZyYW1lPihzdGFja1RyYWNlKTsKICAgICBpZiAoc3RhY2tUcmFjZS5pc0VtcHR5
KCkgfHwgIWVycm9yLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEpTT2JqZWN0
KiBlcnJvck9iamVjdCA9IGFzT2JqZWN0KGVycm9yKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gMDsKICAgICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGVy
cm9yKSB8fCBpc0ludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGVycm9yKSkKLSAgICAgICAg
Z2xvYmFsT2JqZWN0ID0gZ2xvYmFsRGF0YS0+ZHluYW1pY0dsb2JhbE9iamVjdDsKKyAgICAgICAg
Z2xvYmFsT2JqZWN0ID0gdm0tPmR5bmFtaWNHbG9iYWxPYmplY3Q7CiAgICAgZWxzZQogICAgICAg
ICBnbG9iYWxPYmplY3QgPSBlcnJvck9iamVjdC0+Z2xvYmFsT2JqZWN0KCk7CiAKQEAgLTc4MCw5
ICs3ODAsOSBAQCB2b2lkIEludGVycHJldGVyOjphZGRTdGFja1RyYWNlSWZOZWNlc3NhCiAgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKICAgICB9CiAKLSAgICBpZiAoZXJyb3JPYmpl
Y3QtPmhhc1Byb3BlcnR5KGNhbGxGcmFtZSwgZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+c3Rh
Y2spKQorICAgIGlmIChlcnJvck9iamVjdC0+aGFzUHJvcGVydHkoY2FsbEZyYW1lLCB2bS0+cHJv
cGVydHlOYW1lcy0+c3RhY2spKQogICAgICAgICByZXR1cm47Ci0gICAgZXJyb3JPYmplY3QtPnB1
dERpcmVjdCgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+c3RhY2ssIGpz
U3RyaW5nKGdsb2JhbERhdGEsIGJ1aWxkZXIudG9TdHJpbmcoKSksIFJlYWRPbmx5IHwgRG9udERl
bGV0ZSk7CisgICAgZXJyb3JPYmplY3QtPnB1dERpcmVjdCgqdm0sIHZtLT5wcm9wZXJ0eU5hbWVz
LT5zdGFjaywganNTdHJpbmcodm0sIGJ1aWxkZXIudG9TdHJpbmcoKSksIFJlYWRPbmx5IHwgRG9u
dERlbGV0ZSk7CiB9CiAKIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnRo
cm93RXhjZXB0aW9uKENhbGxGcmFtZSomIGNhbGxGcmFtZSwgSlNWYWx1ZSYgZXhjZXB0aW9uVmFs
dWUsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQpAQCAtODEyLDEwICs4MTIsMTAgQEAgTkVWRVJf
SU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dAogCiAgICAgICAgIGlzSW50ZXJydXB0
ID0gaXNJbnRlcnJ1cHRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihleGNlcHRpb24pIHx8IGlzVGVybWlu
YXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihleGNlcHRpb24pOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmICghY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uU3RhY2suc2l6ZSgpKSB7Cisg
ICAgICAgIGlmICghY2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlvblN0YWNrLnNpemUoKSkgewogICAg
ICAgICAgICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrOwotICAgICAgICAgICAgSW50ZXJwcmV0
ZXI6OmdldFN0YWNrVHJhY2UoJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBzdGFjayk7Ci0gICAg
ICAgICAgICBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb25TdGFjayA9IFJlZkNvdW50
ZWRBcnJheTxTdGFja0ZyYW1lPihzdGFjayk7CisgICAgICAgICAgICBJbnRlcnByZXRlcjo6Z2V0
U3RhY2tUcmFjZSgmY2FsbEZyYW1lLT52bSgpLCBzdGFjayk7CisgICAgICAgICAgICBjYWxsRnJh
bWUtPnZtKCkuZXhjZXB0aW9uU3RhY2sgPSBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4oc3Rh
Y2spOwogICAgICAgICB9CiAgICAgfQogCkBAIC04MjksMTMgKzgyOSwxMyBAQCBORVZFUl9JTkxJ
TkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp0CiAgICAgSGFuZGxlckluZm8qIGhhbmRsZXIg
PSAwOwogICAgIHdoaWxlIChpc0ludGVycnVwdCB8fCAhKGhhbmRsZXIgPSBjb2RlQmxvY2stPmhh
bmRsZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkpKSB7CiAgICAgICAgIGlmICgh
dW53aW5kQ2FsbEZyYW1lKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIGJ5dGVjb2RlT2Zmc2V0
LCBjb2RlQmxvY2spKSB7Ci0gICAgICAgICAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVy
ID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgICAgICAg
ICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gY2FsbEZyYW1lLT52bSgpLmVuYWJsZWRQ
cm9maWxlcigpKQogICAgICAgICAgICAgICAgIHByb2ZpbGVyLT5leGNlcHRpb25VbndpbmQoY2Fs
bEZyYW1lKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQogCi0gICAg
aWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVu
YWJsZWRQcm9maWxlcigpKQorICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSBjYWxs
RnJhbWUtPnZtKCkuZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAgIHByb2ZpbGVyLT5leGNlcHRp
b25VbndpbmQoY2FsbEZyYW1lKTsKIAogICAgIC8vIFVud2luZCB0aGUgc2NvcGUgY2hhaW4gd2l0
aGluIHRoZSBleGNlcHRpb24gaGFuZGxlcidzIGNhbGwgZnJhbWUuCkBAIC04ODcsMTIgKzg4Nywx
MiBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKFByb2dyYW1FeGVjCiAgICAgU2FtcGxp
bmdTY29wZSBzYW1wbGluZ1Njb3BlKHRoaXMpOwogICAgIAogICAgIEpTU2NvcGUqIHNjb3BlID0g
Y2FsbEZyYW1lLT5zY29wZSgpOwotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9ICpzY29w
ZS0+Z2xvYmFsRGF0YSgpOworICAgIFZNJiB2bSA9ICpzY29wZS0+dm0oKTsKIAogICAgIEFTU0VS
VChpc1ZhbGlkVGhpc09iamVjdCh0aGlzT2JqLCBjYWxsRnJhbWUpKTsKLSAgICBBU1NFUlQoIWds
b2JhbERhdGEuZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWdsb2JhbERhdGEuaXNDb2xsZWN0b3JC
dXN5KCkpOwotICAgIGlmIChnbG9iYWxEYXRhLmlzQ29sbGVjdG9yQnVzeSgpKQorICAgIEFTU0VS
VCghdm0uZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeSgpKTsKKyAg
ICBpZiAodm0uaXNDb2xsZWN0b3JCdXN5KCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAog
ICAgIFN0YWNrU3RhdHM6OkNoZWNrUG9pbnQgc3RhY2tDaGVja1BvaW50OwpAQCAtOTA0LDcgKzkw
NCw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3JhbUV4ZWMKICAgICAvLyBG
aXJzdCBjaGVjayBpZiB0aGUgInByb2dyYW0iIGlzIGFjdHVhbGx5IGp1c3QgYSBKU09OIG9iamVj
dC4gSWYgc28sCiAgICAgLy8gd2UnbGwgaGFuZGxlIHRoZSBKU09OIG9iamVjdCBoZXJlLiBFbHNl
LCB3ZSdsbCBoYW5kbGUgcmVhbCBKUyBjb2RlCiAgICAgLy8gYmVsb3cgYXQgZmFpbGVkSlNPTlAu
Ci0gICAgRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKGdsb2JhbERh
dGEsIHNjb3BlLT5nbG9iYWxPYmplY3QoKSk7CisgICAgRHluYW1pY0dsb2JhbE9iamVjdFNjb3Bl
IGdsb2JhbE9iamVjdFNjb3BlKHZtLCBzY29wZS0+Z2xvYmFsT2JqZWN0KCkpOwogICAgIFZlY3Rv
cjxKU09OUERhdGE+IEpTT05QRGF0YTsKICAgICBib29sIHBhcnNlUmVzdWx0OwogICAgIGNvbnN0
IFN0cmluZyBwcm9ncmFtU291cmNlID0gcHJvZ3JhbS0+c291cmNlKCkudG9TdHJpbmcoKTsKQEAg
LTEwMDgsNyArMTAwOCw3IEBAIGZhaWxlZEpTT05QOgogICAgIC8vIG9iamVjdC4KIAogICAgIC8v
IENvbXBpbGUgc291cmNlIHRvIGJ5dGVjb2RlIGlmIG5lY2Vzc2FyeToKLSAgICBpZiAoSlNPYmpl
Y3QqIGVycm9yID0gcHJvZ3JhbS0+aW5pdGlhbGl6ZUdsb2JhbFByb3BlcnRpZXMoZ2xvYmFsRGF0
YSwgY2FsbEZyYW1lLCBzY29wZSkpCisgICAgaWYgKEpTT2JqZWN0KiBlcnJvciA9IHByb2dyYW0t
PmluaXRpYWxpemVHbG9iYWxQcm9wZXJ0aWVzKHZtLCBjYWxsRnJhbWUsIHNjb3BlKSkKICAgICAg
ICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dFcnJvcihjYWxsRnJhbWUsIGVycm9yKSk7CiAK
ICAgICBpZiAoSlNPYmplY3QqIGVycm9yID0gcHJvZ3JhbS0+Y29tcGlsZShjYWxsRnJhbWUsIHNj
b3BlKSkKQEAgLTEwMjUsNyArMTAyNSw3IEBAIGZhaWxlZEpTT05QOgogICAgIC8vIFNldCB0aGUg
YXJndW1lbnRzIGZvciB0aGUgY2FsbGVlOgogICAgIG5ld0NhbGxGcmFtZS0+c2V0VGhpc1ZhbHVl
KHRoaXNPYmopOwogCi0gICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IGdsb2JhbERh
dGEuZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9
IHZtLmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICBwcm9maWxlci0+d2lsbEV4ZWN1dGUoY2Fs
bEZyYW1lLCBwcm9ncmFtLT5zb3VyY2VVUkwoKSwgcHJvZ3JhbS0+bGluZU5vKCkpOwogCiAgICAg
Ly8gRXhlY3V0ZSB0aGUgY29kZToKQEAgLTEwMzYsMTEgKzEwMzYsMTEgQEAgZmFpbGVkSlNPTlA6
CiAjaWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKICAgICAgICAgcmVzdWx0ID0gTExJbnQ6OkNMb29w
OjpleGVjdXRlKG5ld0NhbGxGcmFtZSwgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZSk7CiAjZWxpZiBF
TkFCTEUoSklUKQotICAgICAgICByZXN1bHQgPSBwcm9ncmFtLT5nZW5lcmF0ZWRKSVRDb2RlKCku
ZXhlY3V0ZSgmbV9zdGFjaywgbmV3Q2FsbEZyYW1lLCAmZ2xvYmFsRGF0YSk7CisgICAgICAgIHJl
c3VsdCA9IHByb2dyYW0tPmdlbmVyYXRlZEpJVENvZGUoKS5leGVjdXRlKCZtX3N0YWNrLCBuZXdD
YWxsRnJhbWUsICZ2bSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKICAgICB9CiAKLSAgICBpZiAo
TGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gZ2xvYmFsRGF0YS5lbmFibGVkUHJvZmlsZXIoKSkK
KyAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gdm0uZW5hYmxlZFByb2ZpbGVyKCkp
CiAgICAgICAgIHByb2ZpbGVyLT5kaWRFeGVjdXRlKGNhbGxGcmFtZSwgcHJvZ3JhbS0+c291cmNl
VVJMKCksIHByb2dyYW0tPmxpbmVObygpKTsKIAogICAgIG1fc3RhY2sucG9wRnJhbWUobmV3Q2Fs
bEZyYW1lKTsKQEAgLTEwNTAsMTEgKzEwNTAsMTEgQEAgZmFpbGVkSlNPTlA6CiAKIEpTVmFsdWUg
SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCog
ZnVuY3Rpb24sIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEsIEpT
VmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpOworICAgIFZNJiB2bSA9IGNh
bGxGcmFtZS0+dm0oKTsKICAgICBBU1NFUlQoaXNWYWxpZFRoaXNPYmplY3QodGhpc1ZhbHVlLCBj
YWxsRnJhbWUpKTsKICAgICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpOwotICAg
IEFTU0VSVCghZ2xvYmFsRGF0YS5pc0NvbGxlY3RvckJ1c3koKSk7Ci0gICAgaWYgKGdsb2JhbERh
dGEuaXNDb2xsZWN0b3JCdXN5KCkpCisgICAgQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3koKSk7
CisgICAgaWYgKHZtLmlzQ29sbGVjdG9yQnVzeSgpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7
CiAKICAgICBTdGFja1N0YXRzOjpDaGVja1BvaW50IHN0YWNrQ2hlY2tQb2ludDsKQEAgLTEwNzQs
NyArMTA3NCw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKENhbGxGcmEKICAg
ICAgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxUeXBlSG9zdCk7CiAgICAgICAgIHNjb3BlID0g
Y2FsbEZyYW1lLT5zY29wZSgpOwogICAgIH0KLSAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUg
Z2xvYmFsT2JqZWN0U2NvcGUoZ2xvYmFsRGF0YSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpKTsKKyAg
ICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUodm0sIHNjb3BlLT5n
bG9iYWxPYmplY3QoKSk7CiAKICAgICBpZiAoaXNKU0NhbGwpIHsKICAgICAgICAgLy8gQ29tcGls
ZSB0aGUgY2FsbGVlOgpAQCAtMTA5Niw3ICsxMDk2LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6
ZXhlY3V0ZUNhbGwoQ2FsbEZyYQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJncy5zaXpl
KCk7ICsraSkKICAgICAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCBhcmdzLmF0KGkp
KTsKIAotICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSBnbG9iYWxEYXRhLmVuYWJs
ZWRQcm9maWxlcigpKQorICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSB2bS5lbmFi
bGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJvZmlsZXItPndpbGxFeGVjdXRlKGNhbGxGcmFtZSwg
ZnVuY3Rpb24pOwogCiAgICAgSlNWYWx1ZSByZXN1bHQ7CkBAIC0xMTA4LDEzICsxMTA4LDEzIEBA
IEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKENhbGxGcmEKICNpZiBFTkFCTEUoTExJ
TlRfQ19MT09QKQogICAgICAgICAgICAgcmVzdWx0ID0gTExJbnQ6OkNMb29wOjpleGVjdXRlKG5l
d0NhbGxGcmFtZSwgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUpOwogI2VsaWYgRU5B
QkxFKEpJVCkKLSAgICAgICAgICAgIHJlc3VsdCA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0
YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5leGVjdXRlKCZtX3N0YWNrLCBuZXdDYWxs
RnJhbWUsICZnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGNhbGxEYXRhLmpzLmZ1
bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5leGVjdXRlKCZtX3N0
YWNrLCBuZXdDYWxsRnJhbWUsICZ2bSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICByZXN1bHQgPSBKU1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEubmF0
aXZlLmZ1bmN0aW9uKG5ld0NhbGxGcmFtZSkpOwogICAgIH0KIAotICAgIGlmIChMZWdhY3lQcm9m
aWxlciogcHJvZmlsZXIgPSBnbG9iYWxEYXRhLmVuYWJsZWRQcm9maWxlcigpKQorICAgIGlmIChM
ZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSB2bS5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAg
cHJvZmlsZXItPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBmdW5jdGlvbik7CiAKICAgICBtX3N0YWNr
LnBvcEZyYW1lKG5ld0NhbGxGcmFtZSk7CkBAIC0xMTIzLDEyICsxMTIzLDEyIEBAIEpTVmFsdWUg
SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKENhbGxGcmEKIAogSlNPYmplY3QqIEludGVycHJldGVy
OjpleGVjdXRlQ29uc3RydWN0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogY29uc3Ry
dWN0b3IsIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYg
Y29uc3RydWN0RGF0YSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSBjYWxs
RnJhbWUtPnZtKCk7CiAgICAgQVNTRVJUKCFjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKTsKLSAg
ICBBU1NFUlQoIWdsb2JhbERhdGEuaXNDb2xsZWN0b3JCdXN5KCkpOworICAgIEFTU0VSVCghdm0u
aXNDb2xsZWN0b3JCdXN5KCkpOwogICAgIC8vIFdlIHRocm93IGluIHRoaXMgY2FzZSBiZWNhdXNl
IHdlIGhhdmUgdG8gcmV0dXJuIHNvbWV0aGluZyAidmFsaWQiIGJ1dCB3ZSdyZQogICAgIC8vIGFs
cmVhZHkgaW4gYW4gaW52YWxpZCBzdGF0ZS4KLSAgICBpZiAoZ2xvYmFsRGF0YS5pc0NvbGxlY3Rv
ckJ1c3koKSkKKyAgICBpZiAodm0uaXNDb2xsZWN0b3JCdXN5KCkpCiAgICAgICAgIHJldHVybiBj
aGVja2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSkpOwogCiAgICAg
U3RhY2tTdGF0czo6Q2hlY2tQb2ludCBzdGFja0NoZWNrUG9pbnQ7CkBAIC0xMTQ5LDcgKzExNDks
NyBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoCiAgICAgICAgIHNj
b3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOwogICAgIH0KIAotICAgIER5bmFtaWNHbG9iYWxPYmpl
Y3RTY29wZSBnbG9iYWxPYmplY3RTY29wZShnbG9iYWxEYXRhLCBzY29wZS0+Z2xvYmFsT2JqZWN0
KCkpOworICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZSh2bSwg
c2NvcGUtPmdsb2JhbE9iamVjdCgpKTsKIAogICAgIGlmIChpc0pTQ29uc3RydWN0KSB7CiAgICAg
ICAgIC8vIENvbXBpbGUgdGhlIGNhbGxlZToKQEAgLTExNzEsNyArMTE3MSw3IEBAIEpTT2JqZWN0
KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCgKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGFyZ3Muc2l6ZSgpOyArK2kpCiAgICAgICAgIG5ld0NhbGxGcmFtZS0+c2V0QXJndW1lbnQo
aSwgYXJncy5hdChpKSk7CiAKLSAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gZ2xv
YmFsRGF0YS5lbmFibGVkUHJvZmlsZXIoKSkKKyAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2Zp
bGVyID0gdm0uZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAgIHByb2ZpbGVyLT53aWxsRXhlY3V0
ZShjYWxsRnJhbWUsIGNvbnN0cnVjdG9yKTsKIAogICAgIEpTVmFsdWUgcmVzdWx0OwpAQCAtMTE4
MywxNCArMTE4MywxNCBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3Qo
CiAjaWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKICAgICAgICAgICAgIHJlc3VsdCA9IExMSW50OjpD
TG9vcDo6ZXhlY3V0ZShuZXdDYWxsRnJhbWUsIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3Rf
cHJvbG9ndWUpOwogI2VsaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0
cnVjdERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3Ry
dWN0KCkuZXhlY3V0ZSgmbV9zdGFjaywgbmV3Q2FsbEZyYW1lLCAmZ2xvYmFsRGF0YSk7CisgICAg
ICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2Vu
ZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdCgpLmV4ZWN1dGUoJm1fc3RhY2ssIG5ld0NhbGxGcmFt
ZSwgJnZtKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0
aW9uKG5ld0NhbGxGcmFtZSkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKExlZ2FjeVBy
b2ZpbGVyKiBwcm9maWxlciA9IGdsb2JhbERhdGEuZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgaWYg
KExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IHZtLmVuYWJsZWRQcm9maWxlcigpKQogICAgICAg
ICBwcm9maWxlci0+ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIGNvbnN0cnVjdG9yKTsKIAogICAgIG1f
c3RhY2sucG9wRnJhbWUobmV3Q2FsbEZyYW1lKTsKQEAgLTEyMDMsMTAgKzEyMDMsMTAgQEAgSlNP
YmplY3QqIEludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KAogCiBDYWxsRnJhbWVDbG9zdXJl
IEludGVycHJldGVyOjpwcmVwYXJlRm9yUmVwZWF0Q2FsbChGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1
bmN0aW9uRXhlY3V0YWJsZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGZ1bmN0
aW9uLCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIEpTU2NvcGUqIHNjb3BlKQogewot
ICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9ICpzY29wZS0+Z2xvYmFsRGF0YSgpOwotICAg
IEFTU0VSVCghZ2xvYmFsRGF0YS5leGNlcHRpb24pOworICAgIFZNJiB2bSA9ICpzY29wZS0+dm0o
KTsKKyAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbik7CiAgICAgCi0gICAgaWYgKGdsb2JhbERhdGEu
aXNDb2xsZWN0b3JCdXN5KCkpCisgICAgaWYgKHZtLmlzQ29sbGVjdG9yQnVzeSgpKQogICAgICAg
ICByZXR1cm4gQ2FsbEZyYW1lQ2xvc3VyZSgpOwogCiAgICAgU3RhY2tTdGF0czo6Q2hlY2tQb2lu
dCBzdGFja0NoZWNrUG9pbnQ7CkBAIC0xMjM5LDE3ICsxMjM5LDE3IEBAIENhbGxGcmFtZUNsb3N1
cmUgSW50ZXJwcmV0ZXI6OnByZXBhcmVGb3IKICAgICB9CiAKICAgICAvLyBSZXR1cm4gdGhlIHN1
Y2Nlc3NmdWwgY2xvc3VyZToKLSAgICBDYWxsRnJhbWVDbG9zdXJlIHJlc3VsdCA9IHsgY2FsbEZy
YW1lLCBuZXdDYWxsRnJhbWUsIGZ1bmN0aW9uLCBmdW5jdGlvbkV4ZWN1dGFibGUsICZnbG9iYWxE
YXRhLCBzY29wZSwgbmV3Q29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzIH07CisgICAgQ2FsbEZyYW1lQ2xvc3VyZSByZXN1bHQgPSB7IGNhbGxGcmFt
ZSwgbmV3Q2FsbEZyYW1lLCBmdW5jdGlvbiwgZnVuY3Rpb25FeGVjdXRhYmxlLCAmdm0sIHNjb3Bl
LCBuZXdDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgfTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBKU1ZhbHVlIEludGVycHJldGVyOjpleGVj
dXRlKENhbGxGcmFtZUNsb3N1cmUmIGNsb3N1cmUpIAogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSA9ICpjbG9zdXJlLmdsb2JhbERhdGE7CisgICAgVk0mIHZtID0gKmNsb3N1cmUudm07
CiAgICAgU2FtcGxpbmdTY29wZSBzYW1wbGluZ1Njb3BlKHRoaXMpOwogICAgIAotICAgIEFTU0VS
VCghZ2xvYmFsRGF0YS5pc0NvbGxlY3RvckJ1c3koKSk7Ci0gICAgaWYgKGdsb2JhbERhdGEuaXND
b2xsZWN0b3JCdXN5KCkpCisgICAgQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3koKSk7CisgICAg
aWYgKHZtLmlzQ29sbGVjdG9yQnVzeSgpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKICAg
ICBTdGFja1N0YXRzOjpDaGVja1BvaW50IHN0YWNrQ2hlY2tQb2ludDsKQEAgLTEyNTcsNyArMTI1
Nyw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoQ2FsbEZyYW1lQ2wKICAgICBjbG9z
dXJlLnJlc2V0Q2FsbEZyYW1lKCk7CiAgICAgbV9zdGFjay52YWxpZGF0ZUZlbmNlKGNsb3N1cmUu
bmV3Q2FsbEZyYW1lLCAiU1RFUCAxIik7CiAKLSAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2Zp
bGVyID0gZ2xvYmFsRGF0YS5lbmFibGVkUHJvZmlsZXIoKSkKKyAgICBpZiAoTGVnYWN5UHJvZmls
ZXIqIHByb2ZpbGVyID0gdm0uZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAgIHByb2ZpbGVyLT53
aWxsRXhlY3V0ZShjbG9zdXJlLm9sZENhbGxGcmFtZSwgY2xvc3VyZS5mdW5jdGlvbik7CiAKICAg
ICAvLyBUaGUgY29kZSBleGVjdXRpb24gYmVsb3cgbWF5IHB1c2ggbW9yZSBmcmFtZXMgYW5kIHBv
aW50IHRoZSB0b3BDYWxsRnJhbWUKQEAgLTEyNjgsNyArMTI2OCw3IEBAIEpTVmFsdWUgSW50ZXJw
cmV0ZXI6OmV4ZWN1dGUoQ2FsbEZyYW1lQ2wKICAgICAvLyBIZW5jZSwgd2UgbmVlZCB0byBwcmVz
ZXJ2ZSB0aGUgdG9wQ2FsbEZyYW1lIGhlcmUgb3Vyc2VsdmVzIGJlZm9yZQogICAgIC8vIHJlcGVh
dGluZyB0aGlzIGNhbGwgb24gYSBzZWNvbmQgY2FsbGJhY2sgZnVuY3Rpb24uCiAKLSAgICBUb3BD
YWxsRnJhbWVTZXR0ZXIgdG9wQ2FsbEZyYW1lKGdsb2JhbERhdGEsIGNsb3N1cmUubmV3Q2FsbEZy
YW1lKTsKKyAgICBUb3BDYWxsRnJhbWVTZXR0ZXIgdG9wQ2FsbEZyYW1lKHZtLCBjbG9zdXJlLm5l
d0NhbGxGcmFtZSk7CiAKICAgICAvLyBFeGVjdXRlIHRoZSBjb2RlOgogICAgIEpTVmFsdWUgcmVz
dWx0OwpAQCAtMTI3OCwxMSArMTI3OCwxMSBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRl
KENhbGxGcmFtZUNsCiAjaWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKICAgICAgICAgcmVzdWx0ID0g
TExJbnQ6OkNMb29wOjpleGVjdXRlKGNsb3N1cmUubmV3Q2FsbEZyYW1lLCBsbGludF9mdW5jdGlv
bl9mb3JfY2FsbF9wcm9sb2d1ZSk7CiAjZWxpZiBFTkFCTEUoSklUKQotICAgICAgICByZXN1bHQg
PSBjbG9zdXJlLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5l
eGVjdXRlKCZtX3N0YWNrLCBjbG9zdXJlLm5ld0NhbGxGcmFtZSwgJmdsb2JhbERhdGEpOworICAg
ICAgICByZXN1bHQgPSBjbG9zdXJlLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29k
ZUZvckNhbGwoKS5leGVjdXRlKCZtX3N0YWNrLCBjbG9zdXJlLm5ld0NhbGxGcmFtZSwgJnZtKTsK
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQogICAgIH0KIAotICAgIGlmIChMZWdhY3lQcm9maWxlciog
cHJvZmlsZXIgPSBnbG9iYWxEYXRhLmVuYWJsZWRQcm9maWxlcigpKQorICAgIGlmIChMZWdhY3lQ
cm9maWxlciogcHJvZmlsZXIgPSB2bS5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJvZmls
ZXItPmRpZEV4ZWN1dGUoY2xvc3VyZS5vbGRDYWxsRnJhbWUsIGNsb3N1cmUuZnVuY3Rpb24pOwog
CiAgICAgbV9zdGFjay52YWxpZGF0ZUZlbmNlKGNsb3N1cmUubmV3Q2FsbEZyYW1lLCAiQUZURVIi
KTsKQEAgLTEyOTYsMTcgKzEyOTYsMTcgQEAgdm9pZCBJbnRlcnByZXRlcjo6ZW5kUmVwZWF0Q2Fs
bChDYWxsRnJhbQogCiBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhYmxl
KiBldmFsLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTU2NvcGUq
IHNjb3BlKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9ICpzY29wZS0+Z2xvYmFs
RGF0YSgpOworICAgIFZNJiB2bSA9ICpzY29wZS0+dm0oKTsKICAgICBTYW1wbGluZ1Njb3BlIHNh
bXBsaW5nU2NvcGUodGhpcyk7CiAgICAgCi0gICAgQVNTRVJUKHNjb3BlLT5nbG9iYWxEYXRhKCkg
PT0gJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICBBU1NFUlQoc2NvcGUtPnZtKCkgPT0g
JmNhbGxGcmFtZS0+dm0oKSk7CiAgICAgQVNTRVJUKGlzVmFsaWRUaGlzT2JqZWN0KHRoaXNWYWx1
ZSwgY2FsbEZyYW1lKSk7Ci0gICAgQVNTRVJUKCFnbG9iYWxEYXRhLmV4Y2VwdGlvbik7Ci0gICAg
QVNTRVJUKCFnbG9iYWxEYXRhLmlzQ29sbGVjdG9yQnVzeSgpKTsKLSAgICBpZiAoZ2xvYmFsRGF0
YS5pc0NvbGxlY3RvckJ1c3koKSkKKyAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbik7CisgICAgQVNT
RVJUKCF2bS5pc0NvbGxlY3RvckJ1c3koKSk7CisgICAgaWYgKHZtLmlzQ29sbGVjdG9yQnVzeSgp
KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2Nv
cGUgZ2xvYmFsT2JqZWN0U2NvcGUoZ2xvYmFsRGF0YSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpKTsK
KyAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUodm0sIHNjb3Bl
LT5nbG9iYWxPYmplY3QoKSk7CiAKICAgICBTdGFja1N0YXRzOjpDaGVja1BvaW50IHN0YWNrQ2hl
Y2tQb2ludDsKICAgICBjb25zdCBTdGFja0JvdW5kcyYgbmF0aXZlU3RhY2sgPSB3dGZUaHJlYWRE
YXRhKCkuc3RhY2soKTsKQEAgLTEzMzcsNyArMTMzNyw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6
OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICAgICAgICAgIHZhcmlhYmxlT2JqZWN0ID0gc2NvcGU7
CiAgICAgICAgIH0KICAgICAgICAgLy8gU2NvcGUgZm9yIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1p
emVyCi0gICAgICAgIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyIG9wdGltaXplcihnbG9iYWxE
YXRhLCB2YXJpYWJsZU9iamVjdCk7CisgICAgICAgIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVy
IG9wdGltaXplcih2bSwgdmFyaWFibGVPYmplY3QpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1WYXJpYWJsZXM7ICsraSkgewogICAgICAgICAgICAgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPnZhcmlhYmxlKGkpOwpAQCAtMTM2Myw3ICsxMzYzLDcg
QEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YQogICAgIC8vIFNldCB0
aGUgYXJndW1lbnRzIGZvciB0aGUgY2FsbGVlOgogICAgIG5ld0NhbGxGcmFtZS0+c2V0VGhpc1Zh
bHVlKHRoaXNWYWx1ZSk7CiAKLSAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gZ2xv
YmFsRGF0YS5lbmFibGVkUHJvZmlsZXIoKSkKKyAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2Zp
bGVyID0gdm0uZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAgIHByb2ZpbGVyLT53aWxsRXhlY3V0
ZShjYWxsRnJhbWUsIGV2YWwtPnNvdXJjZVVSTCgpLCBldmFsLT5saW5lTm8oKSk7CiAKICAgICAv
LyBFeGVjdXRlIHRoZSBjb2RlOgpAQCAtMTM3NCwxMSArMTM3NCwxMSBAQCBKU1ZhbHVlIEludGVy
cHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhCiAjaWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKICAg
ICAgICAgcmVzdWx0ID0gTExJbnQ6OkNMb29wOjpleGVjdXRlKG5ld0NhbGxGcmFtZSwgbGxpbnRf
ZXZhbF9wcm9sb2d1ZSk7CiAjZWxpZiBFTkFCTEUoSklUKQotICAgICAgICByZXN1bHQgPSBldmFs
LT5nZW5lcmF0ZWRKSVRDb2RlKCkuZXhlY3V0ZSgmbV9zdGFjaywgbmV3Q2FsbEZyYW1lLCAmZ2xv
YmFsRGF0YSk7CisgICAgICAgIHJlc3VsdCA9IGV2YWwtPmdlbmVyYXRlZEpJVENvZGUoKS5leGVj
dXRlKCZtX3N0YWNrLCBuZXdDYWxsRnJhbWUsICZ2bSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
ICAgICB9CiAKLSAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gZ2xvYmFsRGF0YS5l
bmFibGVkUHJvZmlsZXIoKSkKKyAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gdm0u
ZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAgIHByb2ZpbGVyLT5kaWRFeGVjdXRlKGNhbGxGcmFt
ZSwgZXZhbC0+c291cmNlVVJMKCksIGV2YWwtPmxpbmVObygpKTsKIAogICAgIG1fc3RhY2sucG9w
RnJhbWUobmV3Q2FsbEZyYW1lKTsKQEAgLTE0MTksNyArMTQxOSw3IEBAIEpTVmFsdWUgSW50ZXJw
cmV0ZXI6OnJldHJpZXZlQXJndW1lbnRzRnIKICAgICBpZiAoIWZ1bmN0aW9uQ2FsbEZyYW1lKQog
ICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IEFy
Z3VtZW50czo6Y3JlYXRlKGZ1bmN0aW9uQ2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGZ1bmN0aW9u
Q2FsbEZyYW1lKTsKKyAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRl
KGZ1bmN0aW9uQ2FsbEZyYW1lLT52bSgpLCBmdW5jdGlvbkNhbGxGcmFtZSk7CiAgICAgYXJndW1l
bnRzLT50ZWFyT2ZmKGZ1bmN0aW9uQ2FsbEZyYW1lKTsKICAgICByZXR1cm4gSlNWYWx1ZShhcmd1
bWVudHMpOwogfQpAQCAtMTQzMyw3ICsxNDMzLDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6cmV0
cmlldmVDYWxsZXJGcm9tVgogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0OwogICAg
IENvZGVCbG9jayogdW51c2VkQ2FsbGVyQ29kZUJsb2NrID0gMDsKLSAgICBDYWxsRnJhbWUqIGNh
bGxlckZyYW1lID0gZ2V0Q2FsbGVySW5mbygmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGZ1bmN0
aW9uQ2FsbEZyYW1lLCBieXRlY29kZU9mZnNldCwgdW51c2VkQ2FsbGVyQ29kZUJsb2NrKTsKKyAg
ICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZ2V0Q2FsbGVySW5mbygmY2FsbEZyYW1lLT52bSgp
LCBmdW5jdGlvbkNhbGxGcmFtZSwgYnl0ZWNvZGVPZmZzZXQsIHVudXNlZENhbGxlckNvZGVCbG9j
ayk7CiAgICAgaWYgKCFjYWxsZXJGcmFtZSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAg
IEpTVmFsdWUgY2FsbGVyID0gY2FsbGVyRnJhbWUtPmNhbGxlZSgpOwpAQCAtMTQ0Myw3ICsxNDQz
LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6cmV0cmlldmVDYWxsZXJGcm9tVgogICAgIC8vIFNr
aXAgb3ZlciBmdW5jdGlvbiBiaW5kaW5ncy4KICAgICBBU1NFUlQoY2FsbGVyLmlzT2JqZWN0KCkp
OwogICAgIHdoaWxlIChhc09iamVjdChjYWxsZXIpLT5pbmhlcml0cygmSlNCb3VuZEZ1bmN0aW9u
OjpzX2luZm8pKSB7Ci0gICAgICAgIGNhbGxlckZyYW1lID0gZ2V0Q2FsbGVySW5mbygmY2FsbEZy
YW1lLT5nbG9iYWxEYXRhKCksIGNhbGxlckZyYW1lLCBieXRlY29kZU9mZnNldCwgdW51c2VkQ2Fs
bGVyQ29kZUJsb2NrKTsKKyAgICAgICAgY2FsbGVyRnJhbWUgPSBnZXRDYWxsZXJJbmZvKCZjYWxs
RnJhbWUtPnZtKCksIGNhbGxlckZyYW1lLCBieXRlY29kZU9mZnNldCwgdW51c2VkQ2FsbGVyQ29k
ZUJsb2NrKTsKICAgICAgICAgaWYgKCFjYWxsZXJGcmFtZSkKICAgICAgICAgICAgIHJldHVybiBq
c051bGwoKTsKICAgICAgICAgY2FsbGVyID0gY2FsbGVyRnJhbWUtPmNhbGxlZSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHJl
dmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIGNsYXNzIEV2YWxFeGVjdXRhYmxlOwogICAgIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwog
ICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKLSAgICBjbGFzcyBKU0dsb2JhbERhdGE7Cisg
ICAgY2xhc3MgVk07CiAgICAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiAgICAgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwogICAgIGNsYXNzIFByb2dyYW1FeGVjdXRhYmxlOwpAQCAtMTMyLDgg
KzEzMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgVG9wQ2FsbEZyYW1lU2V0dGVy
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFRvcENhbGxGcmFtZVNldHRlcihKU0dsb2JhbERhdGEm
IGdsb2JhbCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi0gICAgICAgICAgICA6IGdsb2JhbERhdGEo
Z2xvYmFsKQorICAgICAgICBUb3BDYWxsRnJhbWVTZXR0ZXIoVk0mIGdsb2JhbCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCisgICAgICAgICAgICA6IHZtKGdsb2JhbCkKICAgICAgICAgICAgICwgb2xk
Q2FsbEZyYW1lKGdsb2JhbC50b3BDYWxsRnJhbWUpIAogICAgICAgICB7CiAgICAgICAgICAgICBn
bG9iYWwudG9wQ2FsbEZyYW1lID0gY2FsbEZyYW1lOwpAQCAtMTQxLDE2ICsxNDEsMTYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICB+VG9wQ2FsbEZyYW1lU2V0dGVyKCkgCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGdsb2JhbERhdGEudG9wQ2FsbEZyYW1lID0gb2xkQ2FsbEZy
YW1lOworICAgICAgICAgICAgdm0udG9wQ2FsbEZyYW1lID0gb2xkQ2FsbEZyYW1lOwogICAgICAg
ICB9CiAgICAgcHJpdmF0ZToKLSAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhOworICAg
ICAgICBWTSYgdm07CiAgICAgICAgIENhbGxGcmFtZSogb2xkQ2FsbEZyYW1lOwogICAgIH07CiAg
ICAgCiAgICAgY2xhc3MgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIEFMV0FZU19JTkxJTkUgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyKEpTR2xvYmFsRGF0YSogZ2xv
YmFsLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKKyAgICAgICAgQUxXQVlTX0lOTElORSBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIoVk0qIGdsb2JhbCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIEFTU0VSVChnbG9iYWwpOwogICAgICAgICAgICAgQVNTRVJUKGNhbGxG
cmFtZSk7CkBAIC0xNzMsNyArMTczLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBJ
bnRlcnByZXRlciYgbV9pbnRlcnByZXRlcjsKICAgICAgICAgfTsKIAotICAgICAgICBJbnRlcnBy
ZXRlcihKU0dsb2JhbERhdGEgJik7CisgICAgICAgIEludGVycHJldGVyKFZNICYpOwogICAgICAg
ICB+SW50ZXJwcmV0ZXIoKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgaW5pdGlhbGl6ZShib29s
IGNhblVzZUpJVCk7CkBAIC0yMTksNyArMjE5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogdGhyb3dFeGNlcHRpb24oQ2FsbEZyYW1lKiYsIEpT
VmFsdWUmLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CiAgICAgICAgIE5FVkVSX0lOTElORSB2
b2lkIGRlYnVnKENhbGxGcmFtZSosIERlYnVnSG9va0lELCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFz
dExpbmUsIGludCBjb2x1bW4pOwogICAgICAgICBzdGF0aWMgY29uc3QgU3RyaW5nIGdldFRyYWNl
TGluZShDYWxsRnJhbWUqLCBTdGFja0ZyYW1lQ29kZVR5cGUsIGNvbnN0IFN0cmluZyYsIGludCk7
Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFN0YWNrVHJhY2UoSlNH
bG9iYWxEYXRhKiwgVmVjdG9yPFN0YWNrRnJhbWU+JiByZXN1bHRzLCBzaXplX3QgbWF4U3RhY2tT
aXplID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSk7CisgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFN0YWNrVHJhY2UoVk0qLCBWZWN0b3I8U3RhY2tG
cmFtZT4mIHJlc3VsdHMsIHNpemVfdCBtYXhTdGFja1NpemUgPSBzdGQ6Om51bWVyaWNfbGltaXRz
PHNpemVfdD46Om1heCgpKTsKICAgICAgICAgc3RhdGljIHZvaWQgYWRkU3RhY2tUcmFjZUlmTmVj
ZXNzYXJ5KENhbGxGcmFtZSosIEpTVmFsdWUgZXJyb3IpOwogCiAgICAgICAgIHZvaWQgZHVtcFNh
bXBsZURhdGEoRXhlY1N0YXRlKiBleGVjKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9KU1N0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDMsOSArNDMsOSBAQCBzdGF0aWMgTXV0ZXgmIHN0YWNrU3RhdGlzdGljc011dGV4KCkKICAgICBy
ZXR1cm4gc3RhdGljTXV0ZXg7CiB9ICAgIAogCi1KU1N0YWNrOjpKU1N0YWNrKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IGNhcGFjaXR5KQorSlNTdGFjazo6SlNTdGFjayhWTSYgdm0s
IHNpemVfdCBjYXBhY2l0eSkKICAgICA6IG1fZW5kKDApCi0gICAgLCBtX3RvcENhbGxGcmFtZShn
bG9iYWxEYXRhLnRvcENhbGxGcmFtZSkKKyAgICAsIG1fdG9wQ2FsbEZyYW1lKHZtLnRvcENhbGxG
cmFtZSkKIHsKICAgICBBU1NFUlQoY2FwYWNpdHkgJiYgaXNQYWdlQWxpZ25lZChjYXBhY2l0eSkp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmgJ
KHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9K
U1N0YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgY2xhc3MgREZHQ29kZUJsb2NrczsKICAgICBjbGFzcyBFeGVjU3RhdGU7CiAgICAgY2xh
c3MgSklUU3R1YlJvdXRpbmVTZXQ7Ci0gICAgY2xhc3MgSlNHbG9iYWxEYXRhOworICAgIGNsYXNz
IFZNOwogICAgIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgIGNsYXNzIEpTU3Rh
Y2sgewpAQCAtNjcsNyArNjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gQWxsb3cg
OGsgb2YgZXhjZXNzIHJlZ2lzdGVycyBiZWZvcmUgd2Ugc3RhcnQgdHJ5aW5nIHRvIHJlYXAgdGhl
IHN0YWNrCiAgICAgICAgIHN0YXRpYyBjb25zdCBwdHJkaWZmX3QgbWF4RXhjZXNzQ2FwYWNpdHkg
PSA4ICogMTAyNDsKIAotICAgICAgICBKU1N0YWNrKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBjYXBh
Y2l0eSA9IGRlZmF1bHRDYXBhY2l0eSk7CisgICAgICAgIEpTU3RhY2soVk0mLCBzaXplX3QgY2Fw
YWNpdHkgPSBkZWZhdWx0Q2FwYWNpdHkpOwogICAgICAgICB+SlNTdGFjaygpOwogICAgICAgICAK
ICAgICAgICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxs
U3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3
ICszMCw3IEBACiAKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgot
I2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiT3Bl
cmF0aW9ucy5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJl
LmgiCkBAIC0zOCwxMSArMzgsMTEgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBDbG9zdXJlQ2FsbFN0
dWJSb3V0aW5lOjpDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAotICAgIGNvbnN0IE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiYgY29kZSwgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBKU0NlbGwq
IG93bmVyLAorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwgVk0mIHZtLCBj
b25zdCBKU0NlbGwqIG93bmVyLAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFeGVjdXRhYmxl
QmFzZSogZXhlY3V0YWJsZSwgY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKLSAgICA6IEdD
QXdhcmVKSVRTdHViUm91dGluZShjb2RlLCBnbG9iYWxEYXRhLCB0cnVlKQotICAgICwgbV9zdHJ1
Y3R1cmUoZ2xvYmFsRGF0YSwgb3duZXIsIHN0cnVjdHVyZSkKLSAgICAsIG1fZXhlY3V0YWJsZShn
bG9iYWxEYXRhLCBvd25lciwgZXhlY3V0YWJsZSkKKyAgICA6IEdDQXdhcmVKSVRTdHViUm91dGlu
ZShjb2RlLCB2bSwgdHJ1ZSkKKyAgICAsIG1fc3RydWN0dXJlKHZtLCBvd25lciwgc3RydWN0dXJl
KQorICAgICwgbV9leGVjdXRhYmxlKHZtLCBvd25lciwgZXhlY3V0YWJsZSkKICAgICAsIG1fY29k
ZU9yaWdpbihjb2RlT3JpZ2luKQogewogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDE0ODYzOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ2xvc3Vy
ZUNhbGxTdHViUm91dGluZSA6IHB1YmxpYyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUgewogcHVibGlj
OgogICAgIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUoCi0gICAgICAgIGNvbnN0IE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiYsIEpTR2xvYmFsRGF0YSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsCisgICAgICAg
IGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwK
ICAgICAgICAgU3RydWN0dXJlKiwgRXhlY3V0YWJsZUJhc2UqLCBjb25zdCBDb2RlT3JpZ2luJik7
CiAgICAgCiAgICAgdmlydHVhbCB+Q2xvc3VyZUNhbGxTdHViUm91dGluZSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShy
ZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNyArMTY3LDcgQEAgdm9pZCBFeGVj
dXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplQWxsbwogfQogI2VuZGlmCiAKLUV4ZWN1dGFibGVB
bGxvY2F0b3I6OkV4ZWN1dGFibGVBbGxvY2F0b3IoSlNHbG9iYWxEYXRhJikKK0V4ZWN1dGFibGVB
bGxvY2F0b3I6OkV4ZWN1dGFibGVBbGxvY2F0b3IoVk0mKQogI2lmIEVOQUJMRShBU1NFTUJMRVJf
V1hfRVhDTFVTSVZFKQogICAgIDogbV9hbGxvY2F0b3IoYWRvcHRQdHIobmV3ICBEZW1hbmRFeGVj
dXRhYmxlQWxsb2NhdG9yKCkpKQogI2VuZGlmCkBAIC0yMTIsNyArMjEyLDcgQEAgZG91YmxlIEV4
ZWN1dGFibGVBbGxvY2F0b3I6Om1lbW9yeVByZXNzdQogCiB9CiAKLVBhc3NSZWZQdHI8RXhlY3V0
YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoSlNHbG9iYWxE
YXRhJiwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25F
ZmZvcnQgZWZmb3J0KQorUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRh
YmxlQWxsb2NhdG9yOjphbGxvY2F0ZShWTSYsIHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3du
ZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBSZWZQdHI8RXhlY3V0
YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yKCktPmFsbG9jYXRlKHNpemVJbkJ5
dGVzLCBvd25lclVJRCk7CiAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0IHx8IGVmZm9ydCAhPSBK
SVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtNzQsOCArNzQsOCBAQCBleHRlcm4gIkMiIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSB2b2lk
IENhCiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU0dsb2JhbERhdGE7Ci12b2lkIHJlbGVh
c2VFeGVjdXRhYmxlTWVtb3J5KEpTR2xvYmFsRGF0YSYpOworY2xhc3MgVk07Cit2b2lkIHJlbGVh
c2VFeGVjdXRhYmxlTWVtb3J5KFZNJik7CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBqaXRBbGxv
Y2F0aW9uR3JhbnVsZSA9IDMyOwogCkBAIC0xMTgsNyArMTE4LDcgQEAgY2xhc3MgRXhlY3V0YWJs
ZUFsbG9jYXRvciB7CiAgICAgZW51bSBQcm90ZWN0aW9uU2V0dGluZyB7IFdyaXRhYmxlLCBFeGVj
dXRhYmxlIH07CiAKIHB1YmxpYzoKLSAgICBFeGVjdXRhYmxlQWxsb2NhdG9yKEpTR2xvYmFsRGF0
YSYpOworICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IoVk0mKTsKICAgICB+RXhlY3V0YWJsZUFsbG9j
YXRvcigpOwogICAgIAogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVBbGxvY2F0b3IoKTsKQEAg
LTEzNSw3ICsxMzUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcFByb2ZpbGUoKSB7
IH0KICNlbmRpZgogCi0gICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBhbGxv
Y2F0ZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlELCBK
SVRDb21waWxhdGlvbkVmZm9ydCk7CisgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFu
ZGxlPiBhbGxvY2F0ZShWTSYsIHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQsIEpJ
VENvbXBpbGF0aW9uRWZmb3J0KTsKIAogI2lmIEVOQUJMRShBU1NFTUJMRVJfV1hfRVhDTFVTSVZF
KQogICAgIHN0YXRpYyB2b2lkIG1ha2VXcml0YWJsZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemUp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhl
ZFZNUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVj
dXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIEV4ZWN1dGFibGVBbGxvY2F0
b3I6OmluaXRpYWxpemVBbGxvCiAgICAgQ29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9yKGFs
bG9jYXRvcik7CiB9CiAKLUV4ZWN1dGFibGVBbGxvY2F0b3I6OkV4ZWN1dGFibGVBbGxvY2F0b3Io
SlNHbG9iYWxEYXRhJikKK0V4ZWN1dGFibGVBbGxvY2F0b3I6OkV4ZWN1dGFibGVBbGxvY2F0b3Io
Vk0mKQogewogICAgIEFTU0VSVChhbGxvY2F0b3IpOwogfQpAQCAtMTU2LDEzICsxNTYsMTMgQEAg
ZG91YmxlIEV4ZWN1dGFibGVBbGxvY2F0b3I6Om1lbW9yeVByZXNzdQogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLVBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFs
bG9jYXRvcjo6YWxsb2NhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgc2l6ZUlu
Qnl0ZXMsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCitQYXNz
UmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9j
YXRlKFZNJiB2bSwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGls
YXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
PiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBvd25lclVJRCk7CiAg
ICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgaWYgKGVmZm9ydCA9PSBKSVRDb21waWxhdGlvbkNh
bkZhaWwpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICByZWxlYXNlRXhlY3V0
YWJsZU1lbW9yeShnbG9iYWxEYXRhKTsKKyAgICAgICAgcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnko
dm0pOwogICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBv
d25lclVJRCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5l
LmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3
YXJlSklUU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAj
aWYgRU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJKU0dsb2JhbERh
dGEuaCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRl
ICJTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgpAQCAtMzcsMTMgKzM3LDEz
IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpHQ0F3YXJlSklU
U3R1YlJvdXRpbmUoCi0gICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLCBKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIGJvb2wgaXNDbG9zdXJlQ2FsbCkKKyAgICBjb25zdCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUsIFZNJiB2bSwgYm9vbCBpc0Nsb3N1cmVDYWxsKQogICAg
IDogSklUU3R1YlJvdXRpbmUoY29kZSkKICAgICAsIG1fbWF5QmVFeGVjdXRpbmcoZmFsc2UpCiAg
ICAgLCBtX2lzSmV0dGlzb25lZChmYWxzZSkKICAgICAsIG1faXNDbG9zdXJlQ2FsbChpc0Nsb3N1
cmVDYWxsKQogewotICAgIGdsb2JhbERhdGEuaGVhcC5tX2ppdFN0dWJSb3V0aW5lcy5hZGQodGhp
cyk7CisgICAgdm0uaGVhcC5tX2ppdFN0dWJSb3V0aW5lcy5hZGQodGhpcyk7CiB9CiAgICAgCiBH
Q0F3YXJlSklUU3R1YlJvdXRpbmU6On5HQ0F3YXJlSklUU3R1YlJvdXRpbmUoKSB7IH0KQEAgLTc5
LDEwICs3OSwxMCBAQCB2b2lkIEdDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkCiB9
CiAKIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoT25lT2JqZWN0OjpNYXJraW5nR0NB
d2FyZUpJVFN0dWJSb3V0aW5lV2l0aE9uZU9iamVjdCgKLSAgICBjb25zdCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYmIGNvZGUsIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgSlNDZWxsKiBv
d25lciwKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUsIFZNJiB2bSwgY29u
c3QgSlNDZWxsKiBvd25lciwKICAgICBKU0NlbGwqIG9iamVjdCkKLSAgICA6IEdDQXdhcmVKSVRT
dHViUm91dGluZShjb2RlLCBnbG9iYWxEYXRhKQotICAgICwgbV9vYmplY3QoZ2xvYmFsRGF0YSwg
b3duZXIsIG9iamVjdCkKKyAgICA6IEdDQXdhcmVKSVRTdHViUm91dGluZShjb2RlLCB2bSkKKyAg
ICAsIG1fb2JqZWN0KHZtLCBvd25lciwgb2JqZWN0KQogewogfQogCkBAIC05Nyw3ICs5Nyw3IEBA
IHZvaWQgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmUKIAogUGFzc1JlZlB0cjxK
SVRTdHViUm91dGluZT4gY3JlYXRlSklUU3R1YlJvdXRpbmUoCiAgICAgY29uc3QgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmJiBjb2RlLAotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwKKyAgICBW
TSYgdm0sCiAgICAgY29uc3QgSlNDZWxsKiwKICAgICBib29sIG1ha2VzQ2FsbHMpCiB7CkBAIC0x
MDUsMTIgKzEwNSwxMiBAQCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBjcmVhdGVKSVRTdHVi
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSklUU3R1YlJvdXRpbmUoY29kZSkpOwogCiAg
ICAgcmV0dXJuIHN0YXRpY19wb2ludGVyX2Nhc3Q8SklUU3R1YlJvdXRpbmU+KAotICAgICAgICBh
ZG9wdFJlZihuZXcgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIGdsb2JhbERhdGEpKSk7Cisg
ICAgICAgIGFkb3B0UmVmKG5ldyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29kZSwgdm0pKSk7CiB9
CiAKIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAogICAg
IGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwKLSAgICBKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsCisgICAgVk0mIHZtLAogICAgIGNvbnN0IEpTQ2VsbCogb3duZXIsCiAgICAgYm9v
bCBtYWtlc0NhbGxzLAogICAgIEpTQ2VsbCogb2JqZWN0KQpAQCAtMTE5LDcgKzExOSw3IEBAIFBh
c3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0dWIKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBKSVRTdHViUm91dGluZShjb2RlKSk7CiAgICAgCiAgICAgcmV0dXJuIHN0YXRp
Y19wb2ludGVyX2Nhc3Q8SklUU3R1YlJvdXRpbmU+KAotICAgICAgICBhZG9wdFJlZihuZXcgTWFy
a2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3QoY29kZSwgZ2xvYmFsRGF0YSwg
b3duZXIsIG9iamVjdCkpKTsKKyAgICAgICAgYWRvcHRSZWYobmV3IE1hcmtpbmdHQ0F3YXJlSklU
U3R1YlJvdXRpbmVXaXRoT25lT2JqZWN0KGNvZGUsIHZtLCBvd25lciwgb2JqZWN0KSkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NB
d2FyZUpJVFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAkod29ya2luZyBjb3B5
KQpAQCAtNTQsNyArNTQsNyBAQCBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKIC8vIGxpc3Qgd2hp
Y2ggZG9lcyBub3QgZ2V0IHJlY2xhaW1lZCBhbGwgYXQgb25jZSkuCiBjbGFzcyBHQ0F3YXJlSklU
U3R1YlJvdXRpbmUgOiBwdWJsaWMgSklUU3R1YlJvdXRpbmUgewogcHVibGljOgotICAgIEdDQXdh
cmVKSVRTdHViUm91dGluZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmLCBKU0dsb2JhbERh
dGEmLCBib29sIGlzQ2xvc3VyZUNhbGwgPSBmYWxzZSk7CisgICAgR0NBd2FyZUpJVFN0dWJSb3V0
aW5lKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIFZNJiwgYm9vbCBpc0Nsb3N1cmVDYWxs
ID0gZmFsc2UpOwogICAgIHZpcnR1YWwgfkdDQXdhcmVKSVRTdHViUm91dGluZSgpOwogICAgIAog
ICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTg0
LDcgKzg0LDcgQEAgcHJpdmF0ZToKIGNsYXNzIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVX
aXRoT25lT2JqZWN0IDogcHVibGljIEdDQXdhcmVKSVRTdHViUm91dGluZSB7CiBwdWJsaWM6CiAg
ICAgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3QoCi0gICAgICAgIGNv
bnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIEpTR2xvYmFsRGF0YSYsIGNvbnN0IEpTQ2VsbCog
b3duZXIsIEpTQ2VsbCopOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmLCBW
TSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTQ2VsbCopOwogICAgIHZpcnR1YWwgfk1hcmtpbmdH
Q0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoT25lT2JqZWN0KCk7CiAgICAgCiBwcm90ZWN0ZWQ6CkBA
IC0xMDIsNyArMTAyLDcgQEAgcHJpdmF0ZToKIC8vIAogLy8gUGFzc1JlZlB0cjxKSVRTdHViUm91
dGluZT4gY3JlYXRlSklUU3R1YlJvdXRpbmUoCiAvLyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYmIGNvZGUsCi0vLyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsCisvLyAgICBWTSYg
dm0sCiAvLyAgICBjb25zdCBKU0NlbGwqIG93bmVyLAogLy8gICAgYm9vbCBtYWtlc0NhbGxzLAog
Ly8gICAgLi4uKTsKQEAgLTExNCw5ICsxMTQsOSBAQCBwcml2YXRlOgogLy8gd2F5LgogCiBQYXNz
UmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBjcmVhdGVKSVRTdHViUm91dGluZSgKLSAgICBjb25zdCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYmLCBKU0dsb2JhbERhdGEmLCBjb25zdCBKU0NlbGwqIG93bmVy
LCBib29sIG1ha2VzQ2FsbHMpOworICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIFZN
JiwgY29uc3QgSlNDZWxsKiBvd25lciwgYm9vbCBtYWtlc0NhbGxzKTsKIFBhc3NSZWZQdHI8SklU
U3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAotICAgIGNvbnN0IE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiYsIEpTR2xvYmFsRGF0YSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIGJvb2wgbWFr
ZXNDYWxscywKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmLCBWTSYsIGNvbnN0IEpT
Q2VsbCogb3duZXIsIGJvb2wgbWFrZXNDYWxscywKICAgICBKU0NlbGwqKTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxNDg2
MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcwLDkgKzcwLDkgQEAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoQ29kZUJs
bwogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNz
LCBuZXdDYWxsZWVGdW5jdGlvbik7CiB9CiAKLUpJVDo6SklUKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi0gICAgOiBtX2ludGVycHJldGVyKGdsb2JhbERh
dGEtPmludGVycHJldGVyKQotICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCitKSVQ6OkpJ
VChWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIDogbV9pbnRlcnByZXRlcih2bS0+
aW50ZXJwcmV0ZXIpCisgICAgLCBtX3ZtKHZtKQogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2Nr
KQogICAgICwgbV9sYWJlbHMoY29kZUJsb2NrID8gY29kZUJsb2NrLT5udW1iZXJPZkluc3RydWN0
aW9ucygpIDogMCkKICAgICAsIG1fYnl0ZWNvZGVPZmZzZXQoKHVuc2lnbmVkKS0xKQpAQCAtNjAw
LDExICs2MDAsMTEgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgog
ICAgIH0KICNlbmRpZgogICAgIAotICAgIGlmIChPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkoKSB8
fCBtX2dsb2JhbERhdGEtPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikKKyAgICBpZiAoT3B0aW9uczo6
c2hvd0Rpc2Fzc2VtYmx5KCkgfHwgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKQogICAgICAg
ICBtX2Rpc2Fzc2VtYmxlciA9IGFkb3B0UHRyKG5ldyBKSVREaXNhc3NlbWJsZXIobV9jb2RlQmxv
Y2spKTsKLSAgICBpZiAobV9nbG9iYWxEYXRhLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpIHsKLSAg
ICAgICAgbV9jb21waWxhdGlvbiA9IG1fZ2xvYmFsRGF0YS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
LT5uZXdDb21waWxhdGlvbihtX2NvZGVCbG9jaywgUHJvZmlsZXI6OkJhc2VsaW5lKTsKLSAgICAg
ICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fZ2xvYmFsRGF0YS0+bV9w
ZXJCeXRlY29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7CisgICAgaWYgKG1fdm0tPm1fcGVyQnl0
ZWNvZGVQcm9maWxlcikgeworICAgICAgICBtX2NvbXBpbGF0aW9uID0gbV92bS0+bV9wZXJCeXRl
Y29kZVByb2ZpbGVyLT5uZXdDb21waWxhdGlvbihtX2NvZGVCbG9jaywgUHJvZmlsZXI6OkJhc2Vs
aW5lKTsKKyAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0t
Pm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9jb2RlQmxvY2spOwogICAgIH0KICAgICAKICAgICBp
ZiAobV9kaXNhc3NlbWJsZXIpCkBAIC02NTUsNyArNjU1LDcgQEAgSklUQ29kZSBKSVQ6OnByaXZh
dGVDb21waWxlKENvZGVQdHIqIGZ1bgogI2VuZGlmCiAKICAgICAgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICAgICAgc3RhY2tDaGVjayA9IGJyYW5j
aFB0cihCZWxvdywgQWJzb2x1dGVBZGRyZXNzKG1fZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPnN0
YWNrKCkuYWRkcmVzc09mRW5kKCkpLCByZWdUMSk7CisgICAgICAgIHN0YWNrQ2hlY2sgPSBicmFu
Y2hQdHIoQmVsb3csIEFic29sdXRlQWRkcmVzcyhtX3ZtLT5pbnRlcnByZXRlci0+c3RhY2soKS5h
ZGRyZXNzT2ZFbmQoKSksIHJlZ1QxKTsKICAgICB9CiAKICAgICBMYWJlbCBmdW5jdGlvbkJvZHkg
PSBsYWJlbCgpOwpAQCAtNjk5LDcgKzY5OSw3IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGls
ZShDb2RlUHRyKiBmdW4KICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCiAgICAgICAgIG1fZGlzYXNz
ZW1ibGVyLT5zZXRFbmRPZkNvZGUobGFiZWwoKSk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLCBlZmZvcnQpOworICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrLCBlZmZvcnQpOwogICAg
IGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQogICAgICAgICByZXR1cm4gSklU
Q29kZSgpOwogCkBAIC03OTgsNyArNzk4LDcgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxl
KENvZGVQdHIqIGZ1bgogICAgIAogICAgIENvZGVSZWYgcmVzdWx0ID0gcGF0Y2hCdWZmZXIuZmlu
YWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KCk7CiAgICAgCi0gICAgbV9nbG9iYWxEYXRhLT5t
YWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQuYWRkKAorICAgIG1f
dm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC5hZGQoCiAg
ICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4ocmVzdWx0LnNpemUoKSkgLwogICAgICAgICBzdGF0
aWNfY2FzdDxkb3VibGU+KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKICAg
ICAKQEAgLTgxMSwxMyArODExLDEzIEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2Rl
UHRyKiBmdW4KICAgICByZXR1cm4gSklUQ29kZShyZXN1bHQsIEpJVENvZGU6OkJhc2VsaW5lSklU
KTsKIH0KIAotdm9pZCBKSVQ6OmxpbmtGb3IoSlNGdW5jdGlvbiogY2FsbGVlLCBDb2RlQmxvY2sq
IGNhbGxlckNvZGVCbG9jaywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpJVDo6Q29kZVB0
ciBjb2RlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit2b2lkIEpJVDo6bGlua0ZvcihKU0Z1
bmN0aW9uKiBjYWxsZWUsIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGNh
bGxlZUNvZGVCbG9jaywgSklUOjpDb2RlUHRyIGNvZGUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvLCBWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKIAogICAgIEFTU0VSVCghY2Fs
bExpbmtJbmZvLT5pc0xpbmtlZCgpKTsKLSAgICBjYWxsTGlua0luZm8tPmNhbGxlZS5zZXQoKmds
b2JhbERhdGEsIGNhbGxMaW5rSW5mby0+aG90UGF0aEJlZ2luLCBjYWxsZXJDb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwotICAgIGNhbGxMaW5rSW5mby0+bGFzdFNlZW5DYWxs
ZWUuc2V0KCpnbG9iYWxEYXRhLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBj
YWxsZWUpOworICAgIGNhbGxMaW5rSW5mby0+Y2FsbGVlLnNldCgqdm0sIGNhbGxMaW5rSW5mby0+
aG90UGF0aEJlZ2luLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUp
OworICAgIGNhbGxMaW5rSW5mby0+bGFzdFNlZW5DYWxsZWUuc2V0KCp2bSwgY2FsbGVyQ29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKICAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhjYWxsTGlua0luZm8tPmhvdFBhdGhPdGhlciwgY29kZSk7CiAKICAgICBpZiAoY2FsbGVlQ29k
ZUJsb2NrKQpAQCAtODI4LDIzICs4MjgsMjMgQEAgdm9pZCBKSVQ6OmxpbmtGb3IoSlNGdW5jdGlv
biogY2FsbGVlLCBDbwogICAgICAgICBBU1NFUlQoY2FsbExpbmtJbmZvLT5jYWxsVHlwZSA9PSBD
YWxsTGlua0luZm86OkNhbGwKICAgICAgICAgICAgICAgIHx8IGNhbGxMaW5rSW5mby0+Y2FsbFR5
cGUgPT0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJncyk7CiAgICAgICAgIGlmIChjYWxsTGlua0lu
Zm8tPmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q2FsbCkgewotICAgICAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGdsb2JhbERh
dGEtPmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgICAg
ICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRp
b24sIHZtLT5nZXRDVElTdHViKGxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBnbG9iYWxEYXRhLT5nZXRDVElT
dHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgICAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIo
dmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgZ2xvYmFsRGF0YS0+Z2V0
Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCkpOworICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJ
U3R1Yih2aXJ0dWFsQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCkpOwogfQogCiB2b2lkIEpJVDo6
bGlua1Nsb3dDYWxsKENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbykKIHsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29k
ZUJsb2NrKTsKIAotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJl
dHVybkxvY2F0aW9uLCBjYWxsZXJDb2RlQmxvY2stPmdsb2JhbERhdGEoKS0+Z2V0Q1RJU3R1Yih2
aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhj
YWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgY2FsbGVyQ29kZUJsb2NrLT52bSgpLT5n
ZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTQ4NjM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAy
LDgzICszMDIsODMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
cGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKIAogICAgIHB1YmxpYzoKLSAgICAgICAg
c3RhdGljIEpJVENvZGUgY29tcGlsZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIENvZGVQdHIqIGZ1bmN0
aW9uRW50cnlBcml0eUNoZWNrID0gMCkKKyAgICAgICAgc3RhdGljIEpJVENvZGUgY29tcGlsZShW
TSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQs
IENvZGVQdHIqIGZ1bmN0aW9uRW50cnlBcml0eUNoZWNrID0gMCkKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIEpJVChnbG9iYWxEYXRhLCBjb2RlQmxvY2spLnByaXZhdGVDb21waWxlKGZ1
bmN0aW9uRW50cnlBcml0eUNoZWNrLCBlZmZvcnQpOworICAgICAgICAgICAgcmV0dXJuIEpJVCh2
bSwgY29kZUJsb2NrKS5wcml2YXRlQ29tcGlsZShmdW5jdGlvbkVudHJ5QXJpdHlDaGVjaywgZWZm
b3J0KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUNs
b3N1cmVDYWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8sIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVC
bG9jaywgU3RydWN0dXJlKiBleHBlY3RlZFN0cnVjdHVyZSwgRXhlY3V0YWJsZUJhc2UqIGV4cGVj
dGVkRXhlY3V0YWJsZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIpCisgICAgICAgIHN0
YXRpYyB2b2lkIGNvbXBpbGVDbG9zdXJlQ2FsbChWTSogdm0sIENhbGxMaW5rSW5mbyogY2FsbExp
bmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jaywgQ29kZUJsb2NrKiBjYWxsZWVDb2Rl
QmxvY2ssIFN0cnVjdHVyZSogZXhwZWN0ZWRTdHJ1Y3R1cmUsIEV4ZWN1dGFibGVCYXNlKiBleHBl
Y3RlZEV4ZWN1dGFibGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyKQogICAgICAgICB7
Ci0gICAgICAgICAgICBKSVQgaml0KGdsb2JhbERhdGEsIGNhbGxlckNvZGVCbG9jayk7CisgICAg
ICAgICAgICBKSVQgaml0KHZtLCBjYWxsZXJDb2RlQmxvY2spOwogICAgICAgICAgICAgaml0Lm1f
Ynl0ZWNvZGVPZmZzZXQgPSBjYWxsTGlua0luZm8tPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsK
ICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKGNhbGxMaW5rSW5mbywg
Y2FsbGVlQ29kZUJsb2NrLCBleHBlY3RlZFN0cnVjdHVyZSwgZXhwZWN0ZWRFeGVjdXRhYmxlLCBj
b2RlUHRyKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeUlk
UHJvdG8oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBjYWNo
ZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKKyAgICAgICAgc3RhdGlj
IHZvaWQgY29tcGlsZUdldEJ5SWRQcm90byhWTSogdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IGNh
Y2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBKSVQgaml0KGdsb2JhbERhdGEsIGNvZGVCbG9jayk7CisgICAgICAgICAgICBK
SVQgaml0KHZtLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQg
PSBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGls
ZUdldEJ5SWRQcm90byhzdHViSW5mbywgc3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1cmUsIGlk
ZW50LCBzbG90LCBjYWNoZWRPZmZzZXQsIHJldHVybkFkZHJlc3MsIGNhbGxGcmFtZSk7CiAgICAg
ICAgIH0KIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlR2V0QnlJZFNlbGZMaXN0KEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhp
Y1N0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9m
ZnNldCBjYWNoZWRPZmZzZXQpCisgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeUlkU2Vs
Zkxpc3QoVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0
dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IGNh
Y2hlZE9mZnNldCkKICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdChnbG9iYWxEYXRhLCBj
b2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKICAgICAgICAg
ICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAg
ICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3Qoc3R1YkluZm8sIHBvbHlt
b3JwaGljU3RydWN0dXJlcywgY3VycmVudEluZGV4LCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCBj
YWNoZWRPZmZzZXQpOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRC
eUlkUHJvdG9MaXN0KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlTGlzdCwgaW50
IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBl
U3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQpCisgICAgICAgIHN0YXRpYyB2b2lkIGNv
bXBpbGVHZXRCeUlkUHJvdG9MaXN0KFZNKiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlTGlzdCwgaW50IGN1cnJlbnRJ
bmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJl
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9w
ZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQo
Z2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9j
ayk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IHN0dWJJbmZvLT5ieXRlY29k
ZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdChz
dHViSW5mbywgcHJvdG90eXBlU3RydWN0dXJlTGlzdCwgY3VycmVudEluZGV4LCBzdHJ1Y3R1cmUs
IHByb3RvdHlwZVN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIGNhY2hlZE9mZnNldCwgY2FsbEZyYW1l
KTsKICAgICAgICAgfQotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlR2V0QnlJZENoYWluTGlz
dChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIGludCBjdXJyZW50SW5k
ZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBj
b3VudCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwg
UHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0KQorICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxl
R2V0QnlJZENoYWluTGlzdChWTSogdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vz
c1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIGludCBjdXJyZW50SW5kZXgs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3Vu
dCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJv
cGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0KQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0
KGdsb2JhbERhdGEsIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxv
Y2spOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3Qo
c3R1YkluZm8sIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIGN1cnJlbnRJbmRleCwgc3RydWN0dXJl
LCBjaGFpbiwgY291bnQsIGlkZW50LCBzbG90LCBjYWNoZWRPZmZzZXQsIGNhbGxGcmFtZSk7CiAg
ICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlR2V0QnlJZENoYWluKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zm
c2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCisgICAgICAgIHN0YXRpYyB2b2lk
IGNvbXBpbGVHZXRCeUlkQ2hhaW4oVk0qIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBj
YWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKICAgICAgICAgewot
ICAgICAgICAgICAgSklUIGppdChnbG9iYWxEYXRhLCBjb2RlQmxvY2spOworICAgICAgICAgICAg
SklUIGppdCh2bSwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0
ID0gc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBp
bGVHZXRCeUlkQ2hhaW4oc3R1YkluZm8sIHN0cnVjdHVyZSwgY2hhaW4sIGNvdW50LCBpZGVudCwg
c2xvdCwgY2FjaGVkT2Zmc2V0LCByZXR1cm5BZGRyZXNzLCBjYWxsRnJhbWUpOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlJZFRyYW5zaXRpb24o
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgU3RydWN0dXJlQ2hhaW4q
IGNoYWluLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIGJvb2wgZGlyZWN0KQorICAg
ICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlJZFRyYW5zaXRpb24oVk0qIHZtLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IGNhY2hl
ZE9mZnNldCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MsIGJvb2wgZGlyZWN0KQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KGdsb2Jh
bERhdGEsIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwog
ICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKHN0dWJJ
bmZvLCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY2FjaGVkT2Zmc2V0LCBjaGFpbiwgcmV0
dXJuQWRkcmVzcywgZGlyZWN0KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGlj
IHZvaWQgY29tcGlsZUdldEJ5VmFsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCisgICAgICAgIHN0YXRpYyB2b2lkIGNv
bXBpbGVHZXRCeVZhbChWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5
VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJy
YXlNb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KGdsb2JhbERhdGEsIGNvZGVC
bG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwogICAgICAgICAgICAg
aml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAg
ICAgICBqaXQucHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChieVZhbEluZm8sIHJldHVybkFkZHJlc3Ms
IGFycmF5TW9kZSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0
QnlWYWwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlW
YWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJy
YXlNb2RlIGFycmF5TW9kZSkKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsKFZN
KiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAg
ICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9m
ZnNldCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRl
Q29tcGlsZVB1dEJ5VmFsKGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAg
ICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBDb2RlUmVmIGNvbXBpbGVDVElOYXRpdmVDYWxsKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuYykKKyAgICAgICAgc3Rh
dGljIENvZGVSZWYgY29tcGlsZUNUSU5hdGl2ZUNhbGwoVk0qIHZtLCBOYXRpdmVGdW5jdGlvbiBm
dW5jKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWdsb2JhbERhdGEtPmNhblVzZUpJVCgp
KSB7CisgICAgICAgICAgICBpZiAoIXZtLT5jYW5Vc2VKSVQoKSkgewogI2lmIEVOQUJMRShMTElO
VCkKICAgICAgICAgICAgICAgICByZXR1cm4gQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxs
aW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmUpOwogI2Vsc2UKICAgICAgICAgICAgICAgICByZXR1
cm4gQ29kZVJlZigpOwogI2VuZGlmCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBKSVQgaml0
KGdsb2JhbERhdGEsIDApOwotICAgICAgICAgICAgcmV0dXJuIGppdC5wcml2YXRlQ29tcGlsZUNU
SU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuYyk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCAw
KTsKKyAgICAgICAgICAgIHJldHVybiBqaXQucHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKHZt
LCBmdW5jKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lkIHJlc2V0UGF0Y2hHZXRC
eUlkKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyopOwpAQCAtMzg2LDkgKzM4Niw5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgdm9pZCBwYXRjaEdldEJ5SWRTZWxm
KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZz
ZXQgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyKTsKICAgICAgICAgc3RhdGljIHZvaWQg
cGF0Y2hQdXRCeUlkUmVwbGFjZShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVj
dHVyZSosIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciwgYm9v
bCBkaXJlY3QpOwogCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQYXRjaEdldEFycmF5TGVu
Z3RoKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVBh
dGNoR2V0QXJyYXlMZW5ndGgoVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KGds
b2JhbERhdGEsIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2sp
OwogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICAgICAgLy8gRm9yY2UgcHJvZmlsaW5nIHRv
IGJlIGVuYWJsZWQgZHVyaW5nIHN0dWIgZ2VuZXJhdGlvbi4KICAgICAgICAgICAgIGppdC5tX2Nh
bkJlT3B0aW1pemVkID0gdHJ1ZTsKQEAgLTM5OCwxMSArMzk4LDExIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgcmV0dXJuIGppdC5wcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5n
dGgocmV0dXJuQWRkcmVzcyk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdm9pZCBsaW5r
Rm9yKEpTRnVuY3Rpb24qIGNhbGxlZSwgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2ssIENvZGVC
bG9jayogY2FsbGVlQ29kZUJsb2NrLCBDb2RlUHRyLCBDYWxsTGlua0luZm8qLCBKU0dsb2JhbERh
dGEqLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICAgICAgc3RhdGljIHZvaWQgbGlua0Zv
cihKU0Z1bmN0aW9uKiBjYWxsZWUsIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDb2RlQmxv
Y2sqIGNhbGxlZUNvZGVCbG9jaywgQ29kZVB0ciwgQ2FsbExpbmtJbmZvKiwgVk0qLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kKTsKICAgICAgICAgc3RhdGljIHZvaWQgbGlua1Nsb3dDYWxsKENvZGVC
bG9jayogY2FsbGVyQ29kZUJsb2NrLCBDYWxsTGlua0luZm8qKTsKIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIEpJVChKU0dsb2JhbERhdGEqLCBDb2RlQmxvY2sqID0gMCk7CisgICAgICAgIEpJVChW
TSosIENvZGVCbG9jayogPSAwKTsKIAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTWFpblBh
c3MoKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCk7CkBAIC00MjEsOCAr
NDIxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRC
eVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwogICAgICAg
ICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0
ciwgSklUQXJyYXlNb2RlKTsKIAotICAgICAgICBMYWJlbCBwcml2YXRlQ29tcGlsZUNUSU5hdGl2
ZUNhbGwoSlNHbG9iYWxEYXRhKiwgYm9vbCBpc0NvbnN0cnVjdCA9IGZhbHNlKTsKLSAgICAgICAg
Q29kZVJlZiBwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiwgTmF0aXZl
RnVuY3Rpb24pOworICAgICAgICBMYWJlbCBwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoVk0q
LCBib29sIGlzQ29uc3RydWN0ID0gZmFsc2UpOworICAgICAgICBDb2RlUmVmIHByaXZhdGVDb21w
aWxlQ1RJTmF0aXZlQ2FsbChWTSosIE5hdGl2ZUZ1bmN0aW9uKTsKICAgICAgICAgdm9pZCBwcml2
YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBpc0RpcmVjdFB1dEJ5SWQoU3RydWN0dXJlU3R1
YkluZm8qKTsKQEAgLTg5NSw3ICs4OTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAg
ICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwotICAgICAgICBKU0dsb2JhbERhdGEq
IG1fZ2xvYmFsRGF0YTsKKyAgICAgICAgVk0qIG1fdm07CiAgICAgICAgIENvZGVCbG9jayogbV9j
b2RlQmxvY2s7CiAKICAgICAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CkBAIC05MzQs
NyArOTM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE93blB0cjxKSVREaXNhc3NlbWJs
ZXI+IG1fZGlzYXNzZW1ibGVyOwogICAgICAgICBSZWZQdHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9u
PiBtX2NvbXBpbGF0aW9uOwogICAgICAgICBXZWFrUmFuZG9tIG1fcmFuZG9tR2VuZXJhdG9yOwot
ICAgICAgICBzdGF0aWMgQ29kZVJlZiBzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IoSlNHbG9i
YWxEYXRhKik7CisgICAgICAgIHN0YXRpYyBDb2RlUmVmIHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVy
YXRvcihWTSopOwogCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICBib29sIG1f
Y2FuQmVPcHRpbWl6ZWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
MzJfNjQuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lk
IEpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKEluc3RydWN0aW9uCiAgICAgICAgIGFkZFB0cihjYWxs
RnJhbWVSZWdpc3RlciwgcmVnVDMpOwogICAgICAgICAvLyByZWdUMzogbmV3Q2FsbEZyYW1lCiAK
LSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFB0cihCZWxvdywgQWJzb2x1dGVBZGRyZXNz
KG1fZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPnN0YWNrKCkuYWRkcmVzc09mRW5kKCkpLCByZWdU
MykpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoUHRyKEJlbG93LCBBYnNvbHV0ZUFk
ZHJlc3MobV92bS0+aW50ZXJwcmV0ZXItPnN0YWNrKCkuYWRkcmVzc09mRW5kKCkpLCByZWdUMykp
OwogCiAgICAgICAgIC8vIEluaXRpYWxpemUgQXJndW1lbnRDb3VudC4KICAgICAgICAgc3RvcmUz
MihyZWdUMiwgcGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50LCByZWdUMykpOwpAQCAt
MjE1LDcgKzIxNSw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShWZWN0b3IK
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAKICAgICBlbWl0TG9hZChKU1N0YWNrOjpDYWxsZWUs
IHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmdldENUSVN0
dWIodmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgZW1pdE5ha2VkQ2FsbChtX3Zt
LT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgc2FtcGxl
Q29kZUJsb2NrKG1fY29kZUJsb2NrKTsKIH0KQEAgLTMwMCw3ICszMDAsNyBAQCB2b2lkIEpJVDo6
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlECiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwog
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICAKLSAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29t
cGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0
TmFrZWRDYWxsKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJ
U3R1YihsaW5rQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCkgOiBtX2dsb2JhbERhdGEtPmdldENU
SVN0dWIobGlua0NhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgbV9jYWxsU3RydWN0dXJlU3R1
YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0g
ZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBtX3ZtLT5nZXRDVElTdHVi
KGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IG1fdm0tPmdldENUSVN0dWIobGlua0Nh
bGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAKICAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2sp
OwogfQpAQCAtMzI0LDExICszMjQsMTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ2xvc3Vy
ZUNhbGwoQ2FsbAogICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QyKTsK
ICAgICBKdW1wIHNsb3cgPSBqdW1wKCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOwogICAgIAogICAgIHBhdGNoQnVmZmVy
LmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAg
ICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8tPmhvdFBhdGhPdGhlci5sYWJl
bEF0T2Zmc2V0KDApKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxh
YmVsKG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgp
KSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbChtX3ZtLT5n
ZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAKICAgICBSZWZQ
dHI8Q2xvc3VyZUNhbGxTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBhZG9wdFJlZihuZXcgQ2xv
c3VyZUNhbGxTdHViUm91dGluZSgKICAgICAgICAgRklOQUxJWkVfQ09ERSgKQEAgLTMzOCw3ICsz
MzgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2FsbChDYWxsCiAgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5ob3RQYXRoT3RoZXIubGFiZWxBdE9mZnNldCgwKS5leGVj
dXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJl
c3MoKSwKICAgICAgICAgICAgICAgICB0b0NTdHJpbmcocG9pbnRlckR1bXAoY2FsbGVlQ29kZUJs
b2NrKSkuZGF0YSgpKSksCi0gICAgICAgICptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgZXhwZWN0ZWRTdHJ1Y3R1cmUsIGV4cGVjdGVkRXhlY3V0YWJsZSwKKyAg
ICAgICAgKm1fdm0sIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhwZWN0ZWRTdHJ1
Y3R1cmUsIGV4cGVjdGVkRXhlY3V0YWJsZSwKICAgICAgICAgY2FsbExpbmtJbmZvLT5jb2RlT3Jp
Z2luKSk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2Nr
KTsKQEAgLTM0Niw3ICszNDYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2Fs
bChDYWxsCiAgICAgcmVwYXRjaEJ1ZmZlci5yZXBsYWNlV2l0aEp1bXAoCiAgICAgICAgIFJlcGF0
Y2hCdWZmZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGNhbGxMaW5rSW5m
by0+aG90UGF0aEJlZ2luKSwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUt
PmNvZGUoKS5jb2RlKCkpKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8t
PmNhbGxSZXR1cm5Mb2NhdGlvbiwgbV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKHZpcnR1YWxDYWxs
R2VuZXJhdG9yKS5jb2RlKCkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5m
by0+Y2FsbFJldHVybkxvY2F0aW9uLCBtX3ZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJh
dG9yKS5jb2RlKCkpOwogICAgIAogICAgIGNhbGxMaW5rSW5mby0+c3R1YiA9IHN0dWJSb3V0aW5l
LnJlbGVhc2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAko
cmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUxvYWRW
YXJhcmdzKEluc3RydWN0aW9uCiAgICAgICAgIGFkZFB0cihjYWxsRnJhbWVSZWdpc3RlciwgcmVn
VDEpOwogICAgICAgICAvLyByZWdUMTogbmV3Q2FsbEZyYW1lCiAKLSAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGJyYW5jaFB0cihCZWxvdywgQWJzb2x1dGVBZGRyZXNzKG1fZ2xvYmFsRGF0YS0+aW50
ZXJwcmV0ZXItPnN0YWNrKCkuYWRkcmVzc09mRW5kKCkpLCByZWdUMSkpOworICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoYnJhbmNoUHRyKEJlbG93LCBBYnNvbHV0ZUFkZHJlc3MobV92bS0+aW50ZXJw
cmV0ZXItPnN0YWNrKCkuYWRkcmVzc09mRW5kKCkpLCByZWdUMSkpOwogCiAgICAgICAgIC8vIElu
aXRpYWxpemUgQXJndW1lbnRDb3VudC4KICAgICAgICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhy
ZWdUMSwgSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnBheWxvYWQpKSk7CkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZh
bFNsb3dDYXNlKFZlY3RvcgogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAogICAgIGVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyNjQoSlNTdGFjazo6Q2FsbGVlLCByZWdUMCk7Ci0gICAgZW1pdE5h
a2VkQ2FsbChtX2dsb2JhbERhdGEtPmdldENUSVN0dWIodmlydHVhbENhbGxHZW5lcmF0b3IpLmNv
ZGUoKSk7CisgICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2Vu
ZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKIH0K
QEAgLTIyMCw3ICsyMjAsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29k
ZUlECiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgCi0gICAgbV9jYWxsU3RydWN0dXJl
U3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9u
ID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBtX2dsb2JhbERhdGEt
PmdldENUSVN0dWIobGlua0NvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpIDogbV9nbG9iYWxEYXRh
LT5nZXRDVElTdHViKGxpbmtDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIG1fY2FsbFN0cnVj
dHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2Nh
dGlvbiA9IGVtaXROYWtlZENhbGwob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gbV92bS0+Z2V0
Q1RJU3R1YihsaW5rQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCkgOiBtX3ZtLT5nZXRDVElTdHVi
KGxpbmtDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29k
ZUJsb2NrKTsKIH0KQEAgLTI0NCwxMSArMjQ0LDExIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUNsb3N1cmVDYWxsKENhbGwKICAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihy
ZWdUMik7CiAgICAgSnVtcCBzbG93ID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKICAgICAKICAgICBwYXRj
aEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLT5ob3RQYXRoT3Ro
ZXIubGFiZWxBdE9mZnNldCgwKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9j
YXRpb25MYWJlbChtX2dsb2JhbERhdGEtPmdldENUSVN0dWIodmlydHVhbENhbGxHZW5lcmF0b3Ip
LmNvZGUoKSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwo
bV92bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKSk7CiAgICAgCiAg
ICAgUmVmUHRyPENsb3N1cmVDYWxsU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0gYWRvcHRSZWYo
bmV3IENsb3N1cmVDYWxsU3R1YlJvdXRpbmUoCiAgICAgICAgIEZJTkFMSVpFX0NPREUoCkBAIC0y
NTgsNyArMjU4LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ2xvc3VyZUNhbGwoQ2FsbAog
ICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+aG90UGF0aE90aGVyLmxhYmVsQXRPZmZzZXQo
MCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICBjb2RlUHRyLmV4ZWN1dGFi
bGVBZGRyZXNzKCksCiAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKHBvaW50ZXJEdW1wKGNhbGxl
ZUNvZGVCbG9jaykpLmRhdGEoKSkpLAotICAgICAgICAqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIGV4cGVjdGVkU3RydWN0dXJlLCBleHBlY3RlZEV4ZWN1dGFi
bGUsCisgICAgICAgICptX3ZtLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4cGVj
dGVkU3RydWN0dXJlLCBleHBlY3RlZEV4ZWN1dGFibGUsCiAgICAgICAgIGNhbGxMaW5rSW5mby0+
Y29kZU9yaWdpbikpOwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2Nv
ZGVCbG9jayk7CkBAIC0yNjYsNyArMjY2LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ2xv
c3VyZUNhbGwoQ2FsbAogICAgIHJlcGF0Y2hCdWZmZXIucmVwbGFjZVdpdGhKdW1wKAogICAgICAg
ICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihjYWxs
TGlua0luZm8tPmhvdFBhdGhCZWdpbiksCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJS
b3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExp
bmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih2aXJ0
dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxs
TGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgbV92bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2Fs
bEdlbmVyYXRvcikuY29kZSgpKTsKICAgICAKICAgICBjYWxsTGlua0luZm8tPnN0dWIgPSBzdHVi
Um91dGluZS5yZWxlYXNlKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
aAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAj
aWYgRU5BQkxFKEpJVCkKLSAgICBjbGFzcyBKU0dsb2JhbERhdGE7CisgICAgY2xhc3MgVk07CiAg
ICAgY2xhc3MgSlNTdGFjazsKICNlbmRpZgogICAgIApAQCAtMTMwLDEwICsxMzAsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoSklUKQogICAgICAgICAvLyBFeGVjdXRlIHRoZSBj
b2RlIQotICAgICAgICBpbmxpbmUgSlNWYWx1ZSBleGVjdXRlKEpTU3RhY2sqIHN0YWNrLCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorICAgICAgICBpbmxp
bmUgSlNWYWx1ZSBleGVjdXRlKEpTU3RhY2sqIHN0YWNrLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
Vk0qIHZtKQogICAgICAgICB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWU6
OmRlY29kZShjdGlUcmFtcG9saW5lKG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBz
dGFjaywgY2FsbEZyYW1lLCAwLCAwLCBnbG9iYWxEYXRhKSk7Ci0gICAgICAgICAgICByZXR1cm4g
Z2xvYmFsRGF0YS0+ZXhjZXB0aW9uID8ganNOdWxsKCkgOiByZXN1bHQ7CisgICAgICAgICAgICBK
U1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWU6OmRlY29kZShjdGlUcmFtcG9saW5lKG1fcmVmLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpLCBzdGFjaywgY2FsbEZyYW1lLCAwLCAwLCB2bSkpOworICAg
ICAgICAgICAgcmV0dXJuIHZtLT5leGNlcHRpb24gPyBqc051bGwoKSA6IHJlc3VsdDsKICAgICAg
ICAgfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURHJpdmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREcml2ZXIuaAko
cmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREcml2ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTIgKzQwLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogdGVt
cGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KIGlubGluZSBib29sIGppdENvbXBpbGVJZkFw
cHJvcHJpYXRlKEV4ZWNTdGF0ZSogZXhlYywgT3duUHRyPENvZGVCbG9ja1R5cGU+JiBjb2RlQmxv
Y2ssIEpJVENvZGUmIGppdENvZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIAogICAgIGlmIChqaXRUeXBlID09IGNvZGVCbG9jay0+Z2V0SklUVHlw
ZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKLSAgICBpZiAoIWdsb2JhbERhdGEuY2Fu
VXNlSklUKCkpCisgICAgaWYgKCF2bS5jYW5Vc2VKSVQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgCiAgICAgY29kZUJsb2NrLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7CkBAIC02NCw3ICs2
NCw3IEBAIGlubGluZSBib29sIGppdENvbXBpbGVJZkFwcHJvcHJpYXRlKEV4ZWMKICAgICAgICAg
ICAgIGppdENvZGUgPSBvbGRKSVRDb2RlOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9Ci0gICAgICAgIGppdENvZGUgPSBKSVQ6OmNvbXBpbGUoJmdsb2JhbERhdGEsIGNvZGVC
bG9jay5nZXQoKSwgZWZmb3J0KTsKKyAgICAgICAgaml0Q29kZSA9IEpJVDo6Y29tcGlsZSgmdm0s
IGNvZGVCbG9jay5nZXQoKSwgZWZmb3J0KTsKICAgICAgICAgaWYgKCFqaXRDb2RlKSB7CiAgICAg
ICAgICAgICBqaXRDb2RlID0gb2xkSklUQ29kZTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTc3LDEyICs3NywxMiBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlSWZBcHByb3ByaWF0ZShF
eGVjCiAKIGlubGluZSBib29sIGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmlhdGUoRXhlY1N0
YXRlKiBleGVjLCBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+JiBjb2RlQmxvY2ssIEpJVENvZGUm
IGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBK
SVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBl
eGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAKICAgICBp
ZiAoaml0VHlwZSA9PSBjb2RlQmxvY2stPmdldEpJVFR5cGUoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgCi0gICAgaWYgKCFnbG9iYWxEYXRhLmNhblVzZUpJVCgpKQorICAgIGlmICghdm0u
Y2FuVXNlSklUKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIGNvZGVCbG9jay0+
dW5saW5rSW5jb21pbmdDYWxscygpOwpAQCAtMTAzLDcgKzEwMyw3IEBAIGlubGluZSBib29sIGpp
dENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmkKICAgICAgICAgICAgIGppdENvZGVXaXRoQXJpdHlD
aGVjayA9IG9sZEpJVENvZGVXaXRoQXJpdHlDaGVjazsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQotICAgICAgICBqaXRDb2RlID0gSklUOjpjb21waWxlKCZnbG9iYWxEYXRh
LCBjb2RlQmxvY2suZ2V0KCksIGVmZm9ydCwgJmppdENvZGVXaXRoQXJpdHlDaGVjayk7CisgICAg
ICAgIGppdENvZGUgPSBKSVQ6OmNvbXBpbGUoJnZtLCBjb2RlQmxvY2suZ2V0KCksIGVmZm9ydCwg
JmppdENvZGVXaXRoQXJpdHlDaGVjayk7CiAgICAgICAgIGlmICghaml0Q29kZSkgewogICAgICAg
ICAgICAgaml0Q29kZSA9IG9sZEpJVENvZGU7CiAgICAgICAgICAgICBqaXRDb2RlV2l0aEFyaXR5
Q2hlY2sgPSBvbGRKSVRDb2RlV2l0aEFyaXR5Q2hlY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDIwICszMCwyMCBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkludGVy
cHJldGVyLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0
YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogCiAjaWYgRU5B
QkxFKEpJVCkgfHwgRU5BQkxFKExMSU5UKQogCiBuYW1lc3BhY2UgSlNDIHsKIAotRXhjZXB0aW9u
SGFuZGxlciBnZW5lcmljVGhyb3coSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjU3RhdGUq
IGNhbGxGcmFtZSwgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgdW5zaWduZWQgdlBDSW5kZXgpCitF
eGNlcHRpb25IYW5kbGVyIGdlbmVyaWNUaHJvdyhWTSogdm0sIEV4ZWNTdGF0ZSogY2FsbEZyYW1l
LCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCB1bnNpZ25lZCB2UENJbmRleCkKIHsKICAgICBSRUxF
QVNFX0FTU0VSVChleGNlcHRpb25WYWx1ZSk7CiAgICAgCi0gICAgZ2xvYmFsRGF0YS0+ZXhjZXB0
aW9uID0gSlNWYWx1ZSgpOwotICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gZ2xvYmFsRGF0YS0+
aW50ZXJwcmV0ZXItPnRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIHZQ
Q0luZGV4KTsgLy8gVGhpcyBtYXkgdXBkYXRlIGNhbGxGcmFtZSAmIGV4Y2VwdGlvblZhbHVlIQot
ICAgIGdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGV4Y2VwdGlvblZhbHVlOworICAgIHZtLT5leGNl
cHRpb24gPSBKU1ZhbHVlKCk7CisgICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSB2bS0+aW50ZXJw
cmV0ZXItPnRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIHZQQ0luZGV4
KTsgLy8gVGhpcyBtYXkgdXBkYXRlIGNhbGxGcmFtZSAmIGV4Y2VwdGlvblZhbHVlIQorICAgIHZt
LT5leGNlcHRpb24gPSBleGNlcHRpb25WYWx1ZTsKIAogICAgIHZvaWQqIGNhdGNoUm91dGluZTsK
ICAgICBJbnN0cnVjdGlvbiogY2F0Y2hQQ0ZvckludGVycHJldGVyID0gMDsKQEAgLTUzLDE4ICs1
MywxOCBAQCBFeGNlcHRpb25IYW5kbGVyIGdlbmVyaWNUaHJvdyhKU0dsb2JhbERhCiAgICAgfSBl
bHNlCiAgICAgICAgIGNhdGNoUm91dGluZSA9IEZ1bmN0aW9uUHRyKExMSW50OjpnZXRDb2RlUHRy
KGN0aU9wVGhyb3dOb3RDYXVnaHQpKS52YWx1ZSgpOwogICAgIAotICAgIGdsb2JhbERhdGEtPmNh
bGxGcmFtZUZvclRocm93ID0gY2FsbEZyYW1lOwotICAgIGdsb2JhbERhdGEtPnRhcmdldE1hY2hp
bmVQQ0ZvclRocm93ID0gY2F0Y2hSb3V0aW5lOwotICAgIGdsb2JhbERhdGEtPnRhcmdldEludGVy
cHJldGVyUENGb3JUaHJvdyA9IGNhdGNoUENGb3JJbnRlcnByZXRlcjsKKyAgICB2bS0+Y2FsbEZy
YW1lRm9yVGhyb3cgPSBjYWxsRnJhbWU7CisgICAgdm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRocm93
ID0gY2F0Y2hSb3V0aW5lOworICAgIHZtLT50YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3cgPSBj
YXRjaFBDRm9ySW50ZXJwcmV0ZXI7CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQoY2F0Y2hSb3V0
aW5lKTsKICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIgPSB7IGNhdGNoUm91
dGluZSwgY2FsbEZyYW1lIH07CiAgICAgcmV0dXJuIGV4Y2VwdGlvbkhhbmRsZXI7CiB9CiAKLUV4
Y2VwdGlvbkhhbmRsZXIgaml0VGhyb3coSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjU3Rh
dGUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgUmV0dXJuQWRkcmVzc1B0ciBm
YXVsdExvY2F0aW9uKQorRXhjZXB0aW9uSGFuZGxlciBqaXRUaHJvdyhWTSogdm0sIEV4ZWNTdGF0
ZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBSZXR1cm5BZGRyZXNzUHRyIGZh
dWx0TG9jYXRpb24pCiB7Ci0gICAgcmV0dXJuIGdlbmVyaWNUaHJvdyhnbG9iYWxEYXRhLCBjYWxs
RnJhbWUsIGV4Y2VwdGlvblZhbHVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5ieXRlY29kZU9m
ZnNldChjYWxsRnJhbWUsIGZhdWx0TG9jYXRpb24pKTsKKyAgICByZXR1cm4gZ2VuZXJpY1Rocm93
KHZtLCBjYWxsRnJhbWUsIGV4Y2VwdGlvblZhbHVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5i
eXRlY29kZU9mZnNldChjYWxsRnJhbWUsIGZhdWx0TG9jYXRpb24pKTsKIH0KIAogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmgJKHJldmlzaW9uIDE0ODYz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRXhlY1N0
YXRlOwotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiAKIC8vIFRoaXMgaGVhZGVyIGdp
dmVzIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYWNjZXNzIHRvIHRoZSBKSVQncyBwcm90b3Rv
Y29sCiAvLyBmb3IgdGhlIHRocm93aW5nIGFuZCBoYW5kbGluZyBleGNlcHRpb25zLgpAQCAtNDQs
OSArNDQsOSBAQCBzdHJ1Y3QgRXhjZXB0aW9uSGFuZGxlciB7CiAgICAgRXhlY1N0YXRlKiBjYWxs
RnJhbWU7CiB9OwogCi1FeGNlcHRpb25IYW5kbGVyIGdlbmVyaWNUaHJvdyhKU0dsb2JhbERhdGEq
LCBFeGVjU3RhdGUqLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCB1bnNpZ25lZCB2UENJbmRleCk7
CitFeGNlcHRpb25IYW5kbGVyIGdlbmVyaWNUaHJvdyhWTSosIEV4ZWNTdGF0ZSosIEpTVmFsdWUg
ZXhjZXB0aW9uVmFsdWUsIHVuc2lnbmVkIHZQQ0luZGV4KTsKIAotRXhjZXB0aW9uSGFuZGxlciBq
aXRUaHJvdyhKU0dsb2JhbERhdGEqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVl
LCBSZXR1cm5BZGRyZXNzUHRyIGZhdWx0TG9jYXRpb24pOworRXhjZXB0aW9uSGFuZGxlciBqaXRU
aHJvdyhWTSosIEV4ZWNTdGF0ZSosIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUsIFJldHVybkFkZHJl
c3NQdHIgZmF1bHRMb2NhdGlvbik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4
LDcgKzc4LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldEZyb21DYWxsRgogCiBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0TG9hZENoYXJhY3RlclN0cmluZyhSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkc3QsIEp1bXBMaXN0JiBmYWlsdXJlcykKIHsKLSAgICBmYWlsdXJl
cy5hcHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNyYywgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKSk7CisgICAgZmFpbHVyZXMuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVz
cyhzcmMsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1fdm0tPnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICBmYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoTm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNyYywgVGh1bmtIZWxwZXJzOjpqc1N0cmlu
Z0xlbmd0aE9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKDEpKSk7CiAgICAgbG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzcmMsIFRodW5rSGVscGVyczo6anNTdHJpbmdWYWx1ZU9mZnNldCgp
KSwgZHN0KTsKICAgICBmYWlsdXJlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIGRzdCkpOwpA
QCAtMTg2LDcgKzE4Niw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnVwZGF0ZVRvcENhbGxG
cmEKICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobV9ieXRlY29kZU9mZnNldCArIDEpLCBp
bnRUYWdGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwogI2VuZGlmCiAgICAgfQotICAgIHN0
b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCAmbV9nbG9iYWxEYXRhLT50b3BDYWxsRnJhbWUpOwor
ICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCAmbV92bS0+dG9wQ2FsbEZyYW1lKTsKIH0K
IAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlRm9yVHJh
bXBvbGluZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEyICs0MSwxMiBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotSklUOjpDb2RlUmVmIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElO
YXRpdmVDYWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuYykK
K0pJVDo6Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChWTSogdm0sIE5h
dGl2ZUZ1bmN0aW9uIGZ1bmMpCiB7CiAgICAgQ2FsbCBuYXRpdmVDYWxsOwogCiAgICAgZW1pdFB1
dEltbWVkaWF0ZVRvQ2FsbEZyYW1lSGVhZGVyKDAsIEpTU3RhY2s6OkNvZGVCbG9jayk7Ci0gICAg
c3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsICZtX2dsb2JhbERhdGEtPnRvcENhbGxGcmFtZSk7
CisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsICZtX3ZtLT50b3BDYWxsRnJhbWUpOwog
CiAjaWYgQ1BVKFg4NikKICAgICAvLyBMb2FkIGNhbGxlciBmcmFtZSdzIHNjb3BlIGNoYWluIGlu
dG8gdGhpcyBjYWxsZnJhbWUgc28gdGhhdCB3aGF0ZXZlciB3ZSBjYWxsIGNhbgpAQCAtMTU0LDcg
KzE1NCw3IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXYKICNlbmRp
ZiAvLyBDUFUoWDg2KQogCiAgICAgLy8gQ2hlY2sgZm9yIGFuIGV4Y2VwdGlvbgotICAgIEp1bXAg
c2F3RXhjZXB0aW9uID0gYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhyZWludGVy
cHJldF9jYXN0PGNoYXIqPigmZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKSArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFs
dWVUYWcpKTsKKyAgICBKdW1wIHNhd0V4Y2VwdGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNv
bHV0ZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJnZtLT5leGNlcHRpb24pICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6RW1wdHlWYWx1ZVRhZykpOwogCiAgICAgLy8gUmV0dXJuLgogICAgIHJldCgpOwpAQCAtMTY1
LDExICsxNjUsMTEgQEAgSklUOjpDb2RlUmVmIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdgog
ICAgIC8vIEdyYWIgdGhlIHJldHVybiBhZGRyZXNzLgogICAgIHByZXNlcnZlUmV0dXJuQWRkcmVz
c0FmdGVyQ2FsbChyZWdUMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoJmdsb2JhbERhdGEt
PmV4Y2VwdGlvbkxvY2F0aW9uKSwgcmVnVDIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cigmdm0t
PmV4Y2VwdGlvbkxvY2F0aW9uKSwgcmVnVDIpOwogICAgIHN0b3JlUHRyKHJlZ1QxLCByZWdUMik7
CiAgICAgcG9rZShjYWxsRnJhbWVSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRT
dGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQqKSk7CiAgICAgCi0gICAgc3RvcmVQ
dHIoY2FsbEZyYW1lUmVnaXN0ZXIsICZtX2dsb2JhbERhdGEtPnRvcENhbGxGcmFtZSk7CisgICAg
c3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsICZtX3ZtLT50b3BDYWxsRnJhbWUpOwogICAgIC8v
IFNldCB0aGUgcmV0dXJuIGFkZHJlc3MuCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKEZ1bmN0aW9u
UHRyKGN0aVZNVGhyb3dUcmFtcG9saW5lKS52YWx1ZSgpKSwgcmVnVDEpOwogICAgIHJlc3RvcmVS
ZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QxKTsKQEAgLTE3Nyw3ICsxNzcsNyBAQCBKSVQ6
OkNvZGVSZWYgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2CiAgICAgcmV0KCk7CiAKICAgICAv
LyBBbGwgdHJhbXBvbGluZXMgY29uc3RydWN0ZWQhIGNvcHkgdGhlIGNvZGUsIGxpbmsgdXAgY2Fs
bHMsIGFuZCBzZXQgdGhlIHBvaW50ZXJzIG9uIHRoZSBNYWNoaW5lIG9iamVjdC4KLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIEdMT0JBTF9USFVOS19JRCk7
CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgR0xPQkFMX1RIVU5LX0lE
KTsKIAogICAgIHBhdGNoQnVmZmVyLmxpbmsobmF0aXZlQ2FsbCwgRnVuY3Rpb25QdHIoZnVuYykp
OwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkpJVCBDVEkgbmF0aXZl
IGNhbGwiKSk7CkBAIC0yMTUsNyArMjE1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVj
dChJbnN0cnVjdGlvbgogewogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub2JqZWN0QWxsb2NhdGlvblByb2ZpbGUtPnN0cnVjdHVyZSgpOwogICAgIHNp
emVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUt
PmlubGluZUNhcGFjaXR5KCkpOwotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJm1f
Z2xvYmFsRGF0YS0+aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihhbGxv
Y2F0aW9uU2l6ZSk7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmbV92bS0+aGVh
cC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihhbGxvY2F0aW9uU2l6ZSk7CiAK
ICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgYWxsb2Nh
dG9yUmVnID0gcmVnVDE7CkBAIC00MTksNyArNDE5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
cHJpbWl0aXZlKEluc3RydWN0aQogICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKIAog
ICAgIEp1bXAgaXNJbW0gPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0ciht
X2dsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICBhZGRTbG93Q2FzZShi
cmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tUHRyKG1fdm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICBp
c0ltbS5saW5rKHRoaXMpOwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCkBAIC02NDMsOCArNjQzLDgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKEluc3RydWN0aW9uKiBjdQogICAgIGdlbmVyaWND
YXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIHRhZ3Mgbm90IGVxdWFsCiAKICAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7IC8vIHRhZ3MgZXF1YWwgYW5kIEpTQ2VsbAotICAgIGdlbmVyaWND
YXNlLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSkpOwotICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRy
KG1fZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgIGdlbmVyaWNDYXNl
LmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1fdm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkp
KTsKKyAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJl
Z1QyLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihtX3ZtLT5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAKICAgICAvLyBTdHJpbmcgY2FzZS4KICAgICBKSVRTdHVi
Q2FsbCBzdHViQ2FsbEVxU3RyaW5ncyh0aGlzLCBjdGlfb3BfZXFfc3RyaW5ncyk7CkBAIC02OTEs
OCArNjkxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShJbnN0cnVjdGlvbiogYwogICAg
IGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIHRhZ3Mgbm90IGVxdWFs
CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHRhZ3MgZXF1YWwgYW5kIEpTQ2VsbAotICAg
IGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+c3Ry
aW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hQdHIo
Tm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgIGdl
bmVyaWNDYXNlLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1fdm0tPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkpKTsKKyAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCBB
ZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0ciht
X3ZtLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAKICAgICAvLyBTdHJpbmcgY2FzZS4KICAg
ICBKSVRTdHViQ2FsbCBzdHViQ2FsbEVxU3RyaW5ncyh0aGlzLCBjdGlfb3BfZXFfc3RyaW5ncyk7
CkBAIC03MjgsOCArNzI4LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKEluc3RydWN0
aW9uKgogCiAgICAgLy8gSnVtcCB0byBhIHNsb3cgY2FzZSBpZiBib3RoIGFyZSBzdHJpbmdzLgog
ICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpKTsKLSAgICBKdW1wIGZpcnN0Tm90U3RyaW5nID0gYnJhbmNoUHRy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1
c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKSk7CisgICAgSnVtcCBmaXJzdE5vdFN0cmluZyA9IGJyYW5jaFB0cihOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIo
bV92bS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRy
KEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3Rl
ZEltbVB0cihtX3ZtLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgbm90Q2VsbC5saW5r
KHRoaXMpOwogICAgIGZpcnN0Tm90U3RyaW5nLmxpbmsodGhpcyk7CiAKQEAgLTEwMjEsMTEgKzEw
MjEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cgogICAgIG1v
dmUocmVnVDAsIGNhbGxGcmFtZVJlZ2lzdGVyKTsKIAogICAgIC8vIE5vdyBzdG9yZSB0aGUgZXhj
ZXB0aW9uIHJldHVybmVkIGJ5IGN0aV9vcF90aHJvdy4KLSAgICBsb2FkUHRyKEFkZHJlc3Moc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwg
Z2xvYmFsRGF0YSkpLCByZWdUMyk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9P
RkZTRVRPRihKU0dsb2JhbERhdGEsIGV4Y2VwdGlvbikgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDMs
IE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbERhdGEsIGV4Y2VwdGlvbikgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlKCkucGF5bG9hZCgpKSwgQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9G
KEpTR2xvYmFsRGF0YSwgZXhjZXB0aW9uKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy5wYXlsb2FkKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWUoKS50YWco
KSksIEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbERhdGEsIGV4Y2VwdGlv
bikgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBK
SVRTdGFja0ZyYW1lLCB2bSkpLCByZWdUMyk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIE9C
SkVDVF9PRkZTRVRPRihWTSwgZXhjZXB0aW9uKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgT0JK
RUNUX09GRlNFVE9GKFZNLCBleGNlcHRpb24pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnRhZykpLCByZWdUMSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZSgp
LnBheWxvYWQoKSksIEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihWTSwgZXhjZXB0aW9u
KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOworICAgIHN0
b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWUoKS50YWcoKSksIEFkZHJlc3MocmVnVDMsIE9CSkVD
VF9PRkZTRVRPRihWTSwgZXhjZXB0aW9uKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy50YWcpKSk7CiAKICAgICB1bnNpZ25lZCBleGNlcHRpb24gPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOwogICAgIGVtaXRTdG9yZShleGNlcHRpb24sIHJlZ1QxLCByZWdUMCk7
CkBAIC0xMjAwLDcgKzEyMDAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jb252ZXJ0X3RoaXMoSW5z
dHJ1Y3RpCiAgICAgICAgIG1vdmUocmVnVDMsIHJlZ1QxKTsKICAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZSgpOwogICAgIH0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoRXF1YWwsIEFk
ZHJlc3MocmVnVDIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1f
Z2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IFRydXN0ZWRJbW1QdHIobV92bS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY29udmVydF90aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xMjIzLDcg
KzEyMjMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29udmVydF90aGlzKEluc3RyCiAgICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QxKTsKLSAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgp
KSwgcmVnVDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSwgcmVnVDApOwogICAgIH0KICAgICBpc05vdFVuZGVmaW5lZC5saW5rKHRoaXMp
OwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMs
OSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAKLUpJVDo6Q29kZVJl
ZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIE5hdGl2ZUZ1bmN0aW9uKQorSklUOjpDb2RlUmVmIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElO
YXRpdmVDYWxsKFZNKiB2bSwgTmF0aXZlRnVuY3Rpb24pCiB7Ci0gICAgcmV0dXJuIGdsb2JhbERh
dGEtPmdldENUSVN0dWIobmF0aXZlQ2FsbEdlbmVyYXRvcik7CisgICAgcmV0dXJuIHZtLT5nZXRD
VElTdHViKG5hdGl2ZUNhbGxHZW5lcmF0b3IpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tb3Yo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfbmV3X29iamVjdChJbnN0cnVjdGlvbgogewogICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub2JqZWN0QWxsb2NhdGlvblByb2ZpbGUt
PnN0cnVjdHVyZSgpOwogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTT2JqZWN0OjphbGxv
Y2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIE1hcmtlZEFsbG9j
YXRvciogYWxsb2NhdG9yID0gJm1fZ2xvYmFsRGF0YS0+aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RX
aXRob3V0RGVzdHJ1Y3RvcihhbGxvY2F0aW9uU2l6ZSk7CisgICAgTWFya2VkQWxsb2NhdG9yKiBh
bGxvY2F0b3IgPSAmbV92bS0+aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3Rv
cihhbGxvY2F0aW9uU2l6ZSk7CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwog
ICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CkBAIC0zNTAsNyArMzUwLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKEluc3RydWN0aQogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAgICAgCiAgICAgSnVtcCBpc0ltbSA9IGVtaXRKdW1w
SWZOb3RKU0NlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIo
bV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgVHJ1c3RlZEltbVB0cihtX3ZtLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAg
aXNJbW0ubGluayh0aGlzKTsKIAogICAgIGlmIChkc3QgIT0gc3JjKQpAQCAtNzEzLDkgKzcxMyw5
IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXIKIHsKICAgICBraWxs
TGFzdFJlc3VsdFJlZ2lzdGVyKCk7IC8vIEZJWE1FOiBJbXBsaWNpdGx5IHRyZWF0IG9wX2NhdGNo
IGFzIGEgbGFiZWxlZCBzdGF0ZW1lbnQsIGFuZCByZW1vdmUgdGhpcyBsaW5lIG9mIGNvZGUuCiAg
ICAgbW92ZShyZWdUMCwgY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIHBlZWsocmVnVDMsIE9CSkVD
VF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgZ2xvYmFsRGF0YSkgLyBzaXplb2Yodm9p
ZCopKTsKLSAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFs
RGF0YSwgZXhjZXB0aW9uKSksIHJlZ1QwKTsKLSAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihK
U0dsb2JhbERhdGEsIGV4Y2VwdGlvbikpKTsKKyAgICBwZWVrKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VU
T0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHZtKSAvIHNpemVvZih2b2lkKikpOworICAgIGxvYWQ2
NChBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoVk0sIGV4Y2VwdGlvbikpLCByZWdUMCk7
CisgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBB
ZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoVk0sIGV4Y2VwdGlvbikpKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogfQog
CkBAIC05MTAsNyArOTEwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY29udmVydF90aGlzKEluc3Ry
dWN0aQogICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCByZWdUMCk7CiAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICAgICB9
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoRXF1YWwsIEFkZHJl
c3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1fdm0t
PnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Nh
bGxlZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTgxLDcgKzk4MSw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9jb252ZXJ0X3RoaXMoSW5zdHIKIAogICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUobV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKSwgcmVnVDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUobV92bS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSksIHJlZ1QwKTsKICAgICBpc05vdFVu
ZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICAgICBK
SVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfY29udmVydF90aGlzKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsMTEgKzkyLDExIEBA
IHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChJbnN0cnVjdGlvbioKICAgICBzdHViQ2FsbC5j
YWxsKGRzdCk7CiB9CiAKLUpJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVy
YXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitKSVQ6OkNvZGVSZWYgSklUOjpzdHJpbmdH
ZXRCeVZhbFN0dWJHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIEpTSW50ZXJmYWNlSklUIGppdDsK
ICAgICBKdW1wTGlzdCBmYWlsdXJlczsKLSAgICBmYWlsdXJlcy5hcHBlbmQoaml0LmJyYW5jaFB0
cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRy
dXN0ZWRJbW1QdHIoZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgIGZh
aWx1cmVzLmFwcGVuZChqaXQuYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cih2bS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSkpOwogICAgIAogICAgIC8vIExvYWQgc3RyaW5nIGxlbmd0aCB0byByZWdUMSwgYW5k
IHN0YXJ0IHRoZSBwcm9jZXNzIG9mIGxvYWRpbmcgdGhlIGRhdGEgcG9pbnRlciBpbnRvIHJlZ1Qw
CiAgICAgaml0LmxvYWQzMihBZGRyZXNzKHJlZ1QwLCBUaHVua0hlbHBlcnM6OmpzU3RyaW5nTGVu
Z3RoT2Zmc2V0KCkpLCByZWdUMSk7CkBAIC0xMjEsNyArMTIxLDcgQEAgSklUOjpDb2RlUmVmIEpJ
VDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZQogICAgIGNvbnQ4Qml0LmxpbmsoJmppdCk7CiAgICAg
CiAgICAgZmFpbHVyZXMuYXBwZW5kKGppdC5icmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoMHgxMDApKSk7Ci0gICAgaml0Lm1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxE
YXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKSwgcmVnVDEpOworICAg
IGppdC5tb3ZlKFRydXN0ZWRJbW1QdHIodm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJT
dHJpbmdzKCkpLCByZWdUMSk7CiAgICAgaml0LmxvYWRQdHIoQmFzZUluZGV4KHJlZ1QxLCByZWdU
MCwgU2NhbGVQdHIsIDApLCByZWdUMCk7CiAgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpLCByZWdUMSk7IC8vIFdlIG51bGwgY2hlY2sgcmVnVDAgb24gcmV0dXJuIHNv
IHRoaXMgaXMgc2FmZQogICAgIGppdC5yZXQoKTsKQEAgLTEzMCw3ICsxMzAsNyBAQCBKSVQ6OkNv
ZGVSZWYgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lCiAgICAgaml0Lm1vdmUoVHJ1c3RlZElt
bTMyKDApLCByZWdUMCk7CiAgICAgaml0LnJldCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiU3RyaW5nIGdldF9ieV92YWwgc3R1YiIpKTsK
IH0KIApAQCAtMjQ5LDggKzI0OSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFs
KEluc3RydWMKIAogICAgIEp1bXAgbm9uQ2VsbCA9IGp1bXAoKTsKICAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7IC8vIGJhc2UgYXJyYXkgY2hlY2sKLSAgICBKdW1wIG5vdFN0cmluZyA9IGJyYW5jaFB0
cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRy
dXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKLSAgICBl
bWl0TmFrZWRDYWxsKG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0dWJH
ZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgSnVtcCBub3RTdHJpbmcgPSBicmFuY2hQdHIoTm90RXF1
YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
UHRyKG1fdm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOworICAgIGVtaXROYWtlZENhbGwobV92
bS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAg
SnVtcCBmYWlsZWQgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKTsKICAgICBlbWl0U3RvcmUo
ZHN0LCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RF
X0xFTkdUSChvcF9nZXRfYnlfdmFsKSk7CkBAIC00NzcsNyArNDc3LDcgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVHZXRCeUlkSG90UGF0aChJZGVudGlmaQogICAgIC8vIHRvIGFycmF5LWxlbmd0aCAvIHBy
b3RvdHlwZSBhY2Nlc3MgdHJhbnBvbGluZXMsIGFuZCBmaW5hbGx5IHdlIGFsc28gdGhlIHRoZSBw
cm9wZXJ0eS1tYXAgYWNjZXNzIG9mZnNldCBhcyBhIGxhYmVsCiAgICAgLy8gdG8ganVtcCBiYWNr
IHRvIGlmIG9uZSBvZiB0aGVzZSB0cmFtcG9saWVzIGZpbmRzIGEgbWF0Y2guCiAgICAgCi0gICAg
aWYgKCppZGVudCA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91
bGRFbWl0UHJvZmlsaW5nKCkpIHsKKyAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDIpOwogICAgICAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlRm9yQnl0ZWNvZGVJbmRleChyZWdUMiwgcmVnVDMsIG1f
Ynl0ZWNvZGVPZmZzZXQpOwogICAgIH0KQEAgLTcwNCw3ICs3MDQsNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvCiAgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNl
Rm9yVHJhbXBvbGluZSgpOwogICAgIENhbGwgZmFpbHVyZUNhbGwgPSB0YWlsUmVjdXJzaXZlQ2Fs
bCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhp
cywgbV9jb2RlQmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMs
IG1fY29kZUJsb2NrKTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYWxsLCBG
dW5jdGlvblB0cihkaXJlY3QgPyBjdGlfb3BfcHV0X2J5X2lkX2RpcmVjdF9mYWlsIDogY3RpX29w
X3B1dF9ieV9pZF9mYWlsKSk7CiAgICAgCkBAIC03MTgsNyArNzE4LDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpbwogICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCiAg
ICAgICAgICAgICAoIkJhc2VsaW5lIHB1dF9ieV9pZCB0cmFuc2l0aW9uIHN0dWIgZm9yICVzLCBy
ZXR1cm4gcG9pbnQgJXAiLAogICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqbV9jb2RlQmxvY2sp
LmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKSksCi0gICAgICAgICptX2dsb2JhbERhdGEs
CisgICAgICAgICptX3ZtLAogICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
CiAgICAgICAgIHdpbGxOZWVkU3RvcmFnZVJlYWxsb2MsCiAgICAgICAgIG5ld1N0cnVjdHVyZSk7
CkBAIC03NzYsNyArNzc2LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJh
eUxlbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOwog
ICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7CiAgICAgCiAgICAgLy8gVXNlIHRo
ZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhl
IG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgogICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dD
YXNlQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXN0
dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5jb2xkUGF0aEJlZ2luKTsKQEAgLTgzOSw3ICs4
MzksNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3RyCiAgICAgCiAg
ICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKICAgICAKICAgICAvLyBVc2UgdGhl
IHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUg
b3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nh
c2VCZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtc3R1
YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmNvbGRQYXRoQmVnaW4pOwpAQCAtODY0LDcgKzg2
NCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIKICAgICAgICAg
ICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIHByb3RvIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQg
JXAiLAogICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgc3R1
YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAogICAgICAgICAgICAgICAgICAgICBz
dHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVz
cygpKSksCi0gICAgICAgICptX2dsb2JhbERhdGEsCisgICAgICAgICptX3ZtLAogICAgICAgICBt
X2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgIG5lZWRzU3R1YkxpbmspOwog
ICAgIApAQCAtOTA3LDcgKzkwNyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRT
ZWxmTGlzdCgKIAogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7CiAgICAgaWYg
KG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJh
dG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVy
KSB7CiAgICAgICAgICAgICBpZiAoaXRlci0+dG8pCkBAIC05MzAsMTEgKzkzMCwxMSBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAgICAgICAgICAgICAoIkJhc2Vs
aW5lIGdldF9ieV9pZCBzZWxmIGxpc3Qgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCiAg
ICAgICAgICAgICAgICAgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCBzdHViSW5mby0+
aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCiAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZv
LT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwK
LSAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAgICAgKm1fdm0sCiAgICAgICAgIG1fY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgbmVlZHNTdHViTGluayk7CiAKLSAgICBw
b2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0
YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJl
LCBpc0RpcmVjdCk7CisgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRl
eF0uc2V0KCptX3ZtLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5l
LCBzdHJ1Y3R1cmUsIGlzRGlyZWN0KTsKICAgICAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBq
dW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVh
ZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRo
QmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1
cmVDaGVjayk7CkBAIC05ODEsNyArOTgxLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0
QnlJZFByb3RvTGlzdAogICAgIAogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2Nr
KTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7
CiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29y
ZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQo
KTsgKytpdGVyKSB7CiAgICAgICAgICAgICBpZiAoaXRlci0+dG8pCkBAIC0xMDAzLDExICsxMDAz
LDExIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QKICAgICAgICAg
ICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIHByb3RvIGxpc3Qgc3R1YiBmb3IgJXMsIHJldHVybiBw
b2ludCAlcCIsCiAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgp
LCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCiAgICAgICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKSwKLSAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAgICAgKm1fdm0sCiAgICAg
ICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgbmVlZHNTdHViTGlu
ayk7CiAKLSAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNh
bGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0
dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSwgaXNEaXJlY3QpOworICAg
IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT52
bSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1
cmUsIHByb3RvdHlwZVN0cnVjdHVyZSwgaXNEaXJlY3QpOwogICAgIAogICAgIC8vIEZpbmFsbHkg
cGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAg
aGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1Yklu
Zm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUu
Z2V0LnN0cnVjdHVyZUNoZWNrKTsKQEAgLTEwNjAsNyArMTA2MCw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QKIAogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsK
ICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1f
Y29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2Nv
ZGVCbG9jayk7CiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8
Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9j
YWxscy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgICAgICBpZiAoaXRlci0+dG8pCkBAIC0xMDgx
LDEyICsxMDgxLDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QK
ICAgICAgICAgICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIGNoYWluIGxpc3Qgc3R1YiBmb3IgJXMs
IHJldHVybiBwb2ludCAlcCIsCiAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCptX2NvZGVCbG9j
aykuZGF0YSgpLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCiAgICAgICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpKSwKLSAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAgICAgKm1f
dm0sCiAgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgbmVl
ZHNTdHViTGluayk7CiAgICAgCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVk
IHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIHByb3RvdHlwZVN0cnVjdHVy
ZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgY2hhaW4s
IGlzRGlyZWN0KTsKKyAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0u
c2V0KGNhbGxGcmFtZS0+dm0oKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHVi
Um91dGluZSwgc3RydWN0dXJlLCBjaGFpbiwgaXNEaXJlY3QpOwogICAgIAogICAgIC8vIEZpbmFs
bHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1
bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1
YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5l
LnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKQEAgLTExMzUsNyArMTEzNSw3IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHIKICAgICAgICAgY29tcGlsZUdldERpcmVjdE9m
ZnNldChwcm90b09iamVjdCwgcmVnVDEsIHJlZ1QwLCBjYWNoZWRPZmZzZXQpOwogICAgIEp1bXAg
c3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2ds
b2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7CiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAg
ICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJl
Z2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgICAgICBpZiAo
aXRlci0+dG8pCkBAIC0xMTU1LDcgKzExNTUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkQ2hhaW4oU3RyCiAgICAgICAgICAgICAoIkJhc2VsaW5lIGdldF9ieV9pZCBjaGFpbiBz
dHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKICAgICAgICAgICAgICAgICB0b0NTdHJpbmco
Km1fY29kZUJsb2NrKS5kYXRhKCksIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNl
dCgKICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1
dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAotICAgICAgICAqbV9nbG9iYWxEYXRhLAor
ICAgICAgICAqbV92bSwKICAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAog
ICAgICAgICBuZWVkc1N0dWJMaW5rKTsKICAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBzdHVi
Um91dGluZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTEgKzUzLDEx
IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBuYW1lc3BhY2UgSlNDIHsKICNpZiBVU0UoSlNWQUxV
RTY0KQogCi1KSVQ6OkNvZGVSZWYgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorSklUOjpDb2RlUmVmIEpJVDo6c3RyaW5nR2V0QnlWYWxT
dHViR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBKU0ludGVyZmFjZUpJVCBqaXQ7CiAgICAgSnVt
cExpc3QgZmFpbHVyZXM7Ci0gICAgZmFpbHVyZXMuYXBwZW5kKGppdC5icmFuY2hQdHIoTm90RXF1
YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
UHRyKGdsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICBmYWlsdXJlcy5h
cHBlbmQoaml0LmJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIodm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkp
KTsKIAogICAgIC8vIExvYWQgc3RyaW5nIGxlbmd0aCB0byByZWdUMiwgYW5kIHN0YXJ0IHRoZSBw
cm9jZXNzIG9mIGxvYWRpbmcgdGhlIGRhdGEgcG9pbnRlciBpbnRvIHJlZ1QwCiAgICAgaml0Lmxv
YWQzMihBZGRyZXNzKHJlZ1QwLCBUaHVua0hlbHBlcnM6OmpzU3RyaW5nTGVuZ3RoT2Zmc2V0KCkp
LCByZWdUMik7CkBAIC04MSw3ICs4MSw3IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5
VmFsU3R1YkdlbmUKICAgICBjb250OEJpdC5saW5rKCZqaXQpOwogCiAgICAgZmFpbHVyZXMuYXBw
ZW5kKGppdC5icmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoMHgxMDAp
KSk7Ci0gICAgaml0Lm1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Mu
c2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKSwgcmVnVDEpOworICAgIGppdC5tb3ZlKFRydXN0ZWRJ
bW1QdHIodm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpLCByZWdUMSk7
CiAgICAgaml0LmxvYWRQdHIoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgU2NhbGVQdHIsIDApLCBy
ZWdUMCk7CiAgICAgaml0LnJldCgpOwogICAgIApAQCAtODksNyArODksNyBAQCBKSVQ6OkNvZGVS
ZWYgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lCiAgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTMy
KDApLCByZWdUMCk7CiAgICAgaml0LnJldCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiU3RyaW5nIGdldF9ieV92YWwgc3R1YiIpKTsKIH0K
IApAQCAtMjEwLDggKzIxMCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKElu
c3RydWMKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlKTsgLy8gYmFzZSBj
ZWxsIGNoZWNrCiAgICAgSnVtcCBub25DZWxsID0ganVtcCgpOwogICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsgLy8gYmFzZSBhcnJheSBjaGVjawotICAgIEp1bXAgbm90U3RyaW5nID0gYnJhbmNoUHRy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1
c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwotICAgIGVt
aXROYWtlZENhbGwoQ29kZUxvY2F0aW9uTGFiZWwobV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKHN0
cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcikuY29kZSgpKSk7CisgICAgSnVtcCBub3RTdHJpbmcg
PSBicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1fdm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOworICAg
IGVtaXROYWtlZENhbGwoQ29kZUxvY2F0aW9uTGFiZWwobV92bS0+Z2V0Q1RJU3R1YihzdHJpbmdH
ZXRCeVZhbFN0dWJHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgIEp1bXAgZmFpbGVkID0gYnJhbmNo
VGVzdDY0KFplcm8sIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVn
VDApOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9nZXRf
YnlfdmFsKSk7CkBAIC01MzUsNyArNTM1LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRCeUlkSG90
UGF0aChpbnQgYmFzZQogCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlVlJlZyk7CiAgICAgCi0gICAgaWYgKCppZGVudCA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5
TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKKyAgICBpZiAoKmlkZW50
ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkp
IHsKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgcmVnVDEpOwogICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlRm9yQnl0ZWNvZGVJ
bmRleChyZWdUMSwgcmVnVDIsIG1fYnl0ZWNvZGVPZmZzZXQpOwogICAgIH0KQEAgLTc0Niw3ICs3
NDYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvCiAgICAgcmVz
dG9yZUFyZ3VtZW50UmVmZXJlbmNlRm9yVHJhbXBvbGluZSgpOwogICAgIENhbGwgZmFpbHVyZUNh
bGwgPSB0YWlsUmVjdXJzaXZlQ2FsbCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
bV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOwogCiAgICAgcGF0Y2hCdWZmZXIubGluayhm
YWlsdXJlQ2FsbCwgRnVuY3Rpb25QdHIoZGlyZWN0ID8gY3RpX29wX3B1dF9ieV9pZF9kaXJlY3Rf
ZmFpbCA6IGN0aV9vcF9wdXRfYnlfaWRfZmFpbCkpOwogCkBAIC03NjAsNyArNzYwLDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpbwogICAgICAgICAgICAgcGF0Y2hC
dWZmZXIsCiAgICAgICAgICAgICAoIkJhc2VsaW5lIHB1dF9ieV9pZCB0cmFuc2l0aW9uIGZvciAl
cywgcmV0dXJuIHBvaW50ICVwIiwKICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKm1fY29kZUJs
b2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSkpLAotICAgICAgICAqbV9nbG9iYWxE
YXRhLAorICAgICAgICAqbV92bSwKICAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLAogICAgICAgICB3aWxsTmVlZFN0b3JhZ2VSZWFsbG9jLAogICAgICAgICBuZXdTdHJ1Y3R1
cmUpOwpAQCAtODEzLDcgKzgxMyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0
QXJyYXlMZW4KICAgICBlbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKHJlZ1QyLCByZWdUMCk7
CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOwogCiAgICAgLy8gVXNlIHRoZSBwYXRj
aCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdp
bmFsIHNsb3cgY2FzZSByb3V0aW5lLgogICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVn
aW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXN0dWJJbmZv
LT5wYXRjaC5iYXNlbGluZS51LmdldC5jb2xkUGF0aEJlZ2luKTsKQEAgLTg3NSw3ICs4NzUsNyBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3RyCiAgICAgfSBlbHNlCiAg
ICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJlZ1QwLCBjYWNoZWRP
ZmZzZXQpOwogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKLSAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7CiAKICAgICAvLyBVc2UgdGhl
IHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUg
b3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nh
c2VCZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtc3R1
YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmNvbGRQYXRoQmVnaW4pOwpAQCAtODk5LDcgKzg5
OSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIKICAgICAgICAg
ICAgICgiQmFzZWxpbmUgSklUIGdldF9ieV9pZCBwcm90byBzdHViIGZvciAlcywgcmV0dXJuIHBv
aW50ICVwIiwKICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCks
IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKICAgICAgICAgICAgICAgICAg
ICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpLAotICAgICAgICAqbV9nbG9iYWxEYXRhLAorICAgICAgICAqbV92bSwKICAgICAg
ICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICBuZWVkc1N0dWJMaW5r
KTsKIApAQCAtOTM5LDcgKzkzOSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRT
ZWxmTGlzdCgKICAgICB9CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogCi0gICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jayk7CisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOwogCiAgICAg
aWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0
ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytp
dGVyKSB7CkBAIC05NjQsMTEgKzk2NCwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRC
eUlkU2VsZkxpc3QoCiAgICAgICAgICAgICAoIkJhc2VsaW5lIEpJVCBnZXRfYnlfaWQgbGlzdCBz
dHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKICAgICAgICAgICAgICAgICB0b0NTdHJpbmco
Km1fY29kZUJsb2NrKS5kYXRhKCksIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNl
dCgKICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1
dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAotICAgICAgICAqbV9nbG9iYWxEYXRhLAor
ICAgICAgICAqbV92bSwKICAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAog
ICAgICAgICBuZWVkc1N0dWJMaW5rKTsKIAotICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlz
dFtjdXJyZW50SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHN0dWJDb2RlLCBzdHJ1Y3R1cmUsIGlzRGlyZWN0KTsKKyAgICBwb2x5bW9ycGhp
Y1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fdm0sIG1fY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgc3R1YkNvZGUsIHN0cnVjdHVyZSwgaXNEaXJlY3QpOwogCiAgICAg
Ly8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBh
dGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRp
b24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2gu
YmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwpAQCAtMTAxNCw3ICsxMDE0LDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdAogCiAgICAgSnVtcCBzdWNjZXNz
ID0ganVtcCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0
aGlzLCBtX2NvZGVCbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhp
cywgbV9jb2RlQmxvY2spOwogCiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9y
IChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0
ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CkBAIC0xMDM4LDEwICsxMDM4LDEwIEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QKICAgICAgICAgICAgICgiQmFz
ZWxpbmUgSklUIGdldF9ieV9pZCBwcm90byBsaXN0IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQg
JXAiLAogICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgc3R1
YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAogICAgICAgICAgICAgICAgICAgICBz
dHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVz
cygpKSksCi0gICAgICAgICptX2dsb2JhbERhdGEsCisgICAgICAgICptX3ZtLAogICAgICAgICBt
X2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgIG5lZWRzU3R1YkxpbmspOwot
ICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fZ2xvYmFs
RGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViQ29kZSwgc3RydWN0dXJl
LCBwcm90b3R5cGVTdHJ1Y3R1cmUsIGlzRGlyZWN0KTsKKyAgICBwcm90b3R5cGVTdHJ1Y3R1cmVz
LT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KCptX3ZtLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIHN0dWJDb2RlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSwgaXNEaXJlY3Qp
OwogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0
aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBq
dW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5m
by0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwpAQCAtMTA5Miw3ICsxMDky
LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdAogICAgIH0KICAg
ICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpt
X2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7CiAgICAgCiAgICAgaWYgKG5lZWRzU3R1Ykxp
bmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBt
X2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CkBAIC0xMTE1
LDEyICsxMTE1LDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QK
ICAgICAgICAgICAgICgiQmFzZWxpbmUgSklUIGdldF9ieV9pZCBjaGFpbiBsaXN0IHN0dWIgZm9y
ICVzLCByZXR1cm4gcG9pbnQgJXAiLAogICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqbV9jb2Rl
QmxvY2spLmRhdGEoKSwgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAogICAg
ICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0
KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICptX2dsb2JhbERhdGEsCisgICAgICAg
ICptX3ZtLAogICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAg
IG5lZWRzU3R1YkxpbmspOwogCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVk
IHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIHByb3RvdHlwZVN0cnVjdHVy
ZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgY2hhaW4s
IGlzRGlyZWN0KTsKKyAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0u
c2V0KGNhbGxGcmFtZS0+dm0oKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHVi
Um91dGluZSwgc3RydWN0dXJlLCBjaGFpbiwgaXNEaXJlY3QpOwogCiAgICAgLy8gRmluYWxseSBw
YXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBo
ZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5m
by0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5n
ZXQuc3RydWN0dXJlQ2hlY2spOwpAQCAtMTE2OCw3ICsxMTY4LDcgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlR2V0QnlJZENoYWluKFN0cgogICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0
KHByb3RvT2JqZWN0LCByZWdUMCwgY2FjaGVkT2Zmc2V0KTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBq
dW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMs
IG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBt
X2NvZGVCbG9jayk7CiAKICAgICBpZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBmb3IgKFZl
Y3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAh
PSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKQEAgLTExOTAsNyArMTE5MCw3IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHIKICAgICAgICAgICAgICgiQmFzZWxpbmUg
SklUIGdldF9ieV9pZCBjaGFpbiBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKICAgICAg
ICAgICAgICAgICB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHN0dWJJbmZvLT5ob3RQ
YXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBh
dGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAotICAg
ICAgICAqbV9nbG9iYWxEYXRhLAorICAgICAgICAqbV92bSwKICAgICAgICAgbV9jb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICBuZWVkc1N0dWJMaW5rKTsKICAgICBzdHViSW5m
by0+c3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKQEAgLTE0MTcsMzEgKzE0MTcsMzEgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbgogICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRJbnQ4QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBl
LCBtX2dsb2JhbERhdGEtPmludDhBcnJheURlc2NyaXB0b3IoKSwgMSwgU2lnbmVkVHlwZWRBcnJh
eSk7CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIDEsIFNp
Z25lZFR5cGVkQXJyYXkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpJVEludDE2QXJyYXk6
Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudElu
c3RydWN0aW9uLCBiYWRUeXBlLCBtX2dsb2JhbERhdGEtPmludDE2QXJyYXlEZXNjcmlwdG9yKCks
IDIsIFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRB
cnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50MTZBcnJh
eURlc2NyaXB0b3IoKSwgMiwgU2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSklUSW50MzJBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJy
YXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+aW50
MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgIHNsb3dD
YXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRU
eXBlLCBtX3ZtLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBTaWduZWRUeXBlZEFycmF5KTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRVaW50OEFycmF5OgotICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSwgbV9nbG9iYWxEYXRhLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCAxLCBVbnNpZ25lZFR5cGVk
QXJyYXkpOworICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwg
MSwgVW5zaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRVaW50
OENsYW1wZWRBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRC
eVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+dWludDhDbGFt
cGVkQXJyYXlEZXNjcmlwdG9yKCksIDEsIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgIHNs
b3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBi
YWRUeXBlLCBtX3ZtLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRU
eXBlZEFycmF5KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRVaW50MTZBcnJheToKLSAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIs
IFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFy
cmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50MTZBcnJh
eURlc2NyaXB0b3IoKSwgMiwgVW5zaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBKSVRVaW50MzJBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVk
QXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+
dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIDQsIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAg
IHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9u
LCBiYWRUeXBlLCBtX3ZtLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgVW5zaWduZWRUeXBl
ZEFycmF5KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRGbG9hdDMyQXJyYXk6Ci0gICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCA0
KTsKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCA0
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRGbG9hdDY0QXJyYXk6Ci0gICAgICAgIHNs
b3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCA4KTsKKyAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCA4KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsKQEAgLTE0NDksNyAr
MTQ0OSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFsSW4KICAgICAK
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpt
X2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0
ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zm
c2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKICAgICBwYXRjaEJ1ZmZl
ci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFi
ZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CkBAIC0xNDg2
LDMxICsxNDg2LDMxIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4K
ICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYmFkVHlwZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUSW50OEFycmF5
OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCks
IDEsIFNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOworICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSwgbV92bS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCAxLCBTaWduZWRUeXBlZEFycmF5LCBUcnVu
Y2F0ZVJvdW5kaW5nKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRJbnQxNkFycmF5Ogot
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCAy
LCBTaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKKyAgICAgICAgc2xvd0Nhc2Vz
ID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUs
IG1fdm0tPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIsIFNpZ25lZFR5cGVkQXJyYXksIFRydW5j
YXRlUm91bmRpbmcpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpJVEludDMyQXJyYXk6Ci0g
ICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3Ry
dWN0aW9uLCBiYWRUeXBlLCBtX2dsb2JhbERhdGEtPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIDQs
IFNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOworICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwg
bV92bS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgU2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNh
dGVSb3VuZGluZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUVWludDhBcnJheToKLSAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgMSwg
VW5zaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKKyAgICAgICAgc2xvd0Nhc2Vz
ID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUs
IG1fdm0tPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIDEsIFVuc2lnbmVkVHlwZWRBcnJheSwgVHJ1
bmNhdGVSb3VuZGluZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUVWludDhDbGFtcGVk
QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX2dsb2JhbERhdGEtPnVpbnQ4Q2xhbXBlZEFycmF5
RGVzY3JpcHRvcigpLCAxLCBVbnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcpOworICAg
ICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIDEsIFVu
c2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSklUVWludDE2QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5
UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX2dsb2JhbERhdGEtPnVpbnQx
NkFycmF5RGVzY3JpcHRvcigpLCAyLCBVbnNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRp
bmcpOworICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIs
IFVuc2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgSklUVWludDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBl
ZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX2dsb2JhbERhdGEt
PnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBVbnNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRl
Um91bmRpbmcpOworICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDMyQXJyYXlEZXNjcmlwdG9y
KCksIDQsIFVuc2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSklURmxvYXQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0
RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX2ds
b2JhbERhdGEtPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgNCk7CisgICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5
cGUsIG1fdm0tPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgNCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgSklURmxvYXQ2NEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRU
eXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX2dsb2JhbERh
dGEtPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgOCk7CisgICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1f
dm0tPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgOCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC0xNTE5LDcgKzE1MTksNyBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluCiAgICAgCiAgICAgSnVtcCBkb25lID0ganVt
cCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBt
X2NvZGVCbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9j
b2RlQmxvY2spOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0
aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJl
c3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVy
bkFkZHJlc3NUb1Nsb3dQYXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENv
ZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFi
bGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZv
LT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNyArMjI4LDcgQEAgQ09N
UElMRV9BU1NFUlQob2Zmc2V0b2Yoc3RydWN0IEpJVFN0YWNrRgogCiBleHRlcm4gIkMiIHsKIAot
ICAgIF9fZGVjbHNwZWMobmFrZWQpIEVuY29kZWRKU1ZhbHVlIGN0aVRyYW1wb2xpbmUodm9pZCog
Y29kZSwgSlNTdGFjayosIENhbGxGcmFtZSosIHZvaWQqIC8qdW51c2VkMSovLCB2b2lkKiAvKnVu
dXNlZDIqLywgSlNHbG9iYWxEYXRhKikKKyAgICBfX2RlY2xzcGVjKG5ha2VkKSBFbmNvZGVkSlNW
YWx1ZSBjdGlUcmFtcG9saW5lKHZvaWQqIGNvZGUsIEpTU3RhY2sqLCBDYWxsRnJhbWUqLCB2b2lk
KiAvKnVudXNlZDEqLywgdm9pZCogLyp1bnVzZWQyKi8sIFZNKikKICAgICB7CiAgICAgICAgIF9f
YXNtIHsKICAgICAgICAgICAgIHB1c2ggZWJwOwpAQCAtMjkxLDcgKzI5MSw3IEBAIGV4dGVybiAi
QyIgewogI2RlZmluZSBTVEFDS19MRU5HVEggICAgICAgICAgICAgICAxMTIKICNlbGlmIENQVShT
SDQpCiAjZGVmaW5lIFNZTUJPTF9TVFJJTkcobmFtZSkgI25hbWUKLS8qIGNvZGUgKHI0KSwgSlNT
dGFjayogKHI1KSwgQ2FsbEZyYW1lKiAocjYpLCB2b2lkKiB1bnVzZWQxIChyNyksIHZvaWQqIHVu
dXNlZDIoc3ApLCBKU0dsb2JhbERhdGEgKHNwKSovCisvKiBjb2RlIChyNCksIEpTU3RhY2sqIChy
NSksIENhbGxGcmFtZSogKHI2KSwgdm9pZCogdW51c2VkMSAocjcpLCB2b2lkKiB1bnVzZWQyKHNw
KSwgVk0gKHNwKSovCiAKIGFzbSB2b2xhdGlsZSAoCiAiLnRleHRcbiIKQEAgLTQ3Niw5ICs0NzYs
OSBAQCBTWU1CT0xfU1RSSU5HKGN0aVRyYW1wb2xpbmUpICI6IiAiXG4iCiAgICAgIm1vdmUgICQx
NiwkNiAgICAgICAjIHNldCBjYWxsRnJhbWVSZWdpc3RlciIgIlxuIgogICAgICJtb3ZlICAkMjUs
JDQgICAgICAgIyBtb3ZlIGV4ZWN1dGFibGVBZGRyZXNzIHRvIHQ5IiAiXG4iCiAgICAgInN3ICAg
ICQ1LCIgU1RSSU5HSVpFX1ZBTFVFX09GKFJFR0lTVEVSX0ZJTEVfT0ZGU0VUKSAiKCQyOSkgIyBz
dG9yZSBKU1N0YWNrIHRvIGN1cnJlbnQgc3RhY2siICJcbiIKLSAgICAibHcgICAgJDksIiBTVFJJ
TkdJWkVfVkFMVUVfT0YoU1RBQ0tfTEVOR1RIICsgMjApICIoJDI5KSAgICAjIGxvYWQgZ2xvYmFs
RGF0YSBmcm9tIHByZXZpb3VzIHN0YWNrIiAiXG4iCisgICAgImx3ICAgICQ5LCIgU1RSSU5HSVpF
X1ZBTFVFX09GKFNUQUNLX0xFTkdUSCArIDIwKSAiKCQyOSkgICAgIyBsb2FkIHZtIGZyb20gcHJl
dmlvdXMgc3RhY2siICJcbiIKICAgICAiamFsciAgJDI1IiAiXG4iCi0gICAgInN3ICAgICQ5LCIg
U1RSSU5HSVpFX1ZBTFVFX09GKEdMT0JBTF9EQVRBX09GRlNFVCkgIigkMjkpICAgIyBzdG9yZSBn
bG9iYWxEYXRhIHRvIGN1cnJlbnQgc3RhY2siICJcbiIKKyAgICAic3cgICAgJDksIiBTVFJJTkdJ
WkVfVkFMVUVfT0YoR0xPQkFMX0RBVEFfT0ZGU0VUKSAiKCQyOSkgICAjIHN0b3JlIHZtIHRvIGN1
cnJlbnQgc3RhY2siICJcbiIKICAgICAibHcgICAgJDE2LCIgU1RSSU5HSVpFX1ZBTFVFX09GKFBS
RVNFUlZFRF9TMF9PRkZTRVQpICIoJDI5KSIgIlxuIgogICAgICJsdyAgICAkMTcsIiBTVFJJTkdJ
WkVfVkFMVUVfT0YoUFJFU0VSVkVEX1MxX09GRlNFVCkgIigkMjkpIiAiXG4iCiAgICAgImx3ICAg
ICQxOCwiIFNUUklOR0laRV9WQUxVRV9PRihQUkVTRVJWRURfUzJfT0ZGU0VUKSAiKCQyOSkiICJc
biIKQEAgLTY4NSw3ICs2ODUsNyBAQCBTWU1CT0xfU1RSSU5HKGN0aU9wVGhyb3dOb3RDYXVnaHQp
ICI6IiAiCiAKICNlbGlmIENPTVBJTEVSKFJWQ1QpICYmIENQVShBUk1fVEhVTUIyKQogCi1fX2Fz
bSBFbmNvZGVkSlNWYWx1ZSBjdGlUcmFtcG9saW5lKHZvaWQqLCBKU1N0YWNrKiwgQ2FsbEZyYW1l
Kiwgdm9pZCogLyp1bnVzZWQxKi8sIHZvaWQqIC8qdW51c2VkMiovLCBKU0dsb2JhbERhdGEqKQor
X19hc20gRW5jb2RlZEpTVmFsdWUgY3RpVHJhbXBvbGluZSh2b2lkKiwgSlNTdGFjayosIENhbGxG
cmFtZSosIHZvaWQqIC8qdW51c2VkMSovLCB2b2lkKiAvKnVudXNlZDIqLywgVk0qKQogewogICAg
IFBSRVNFUlZFOAogICAgIHN1YiBzcCwgc3AsICMgRklSU1RfU1RBQ0tfQVJHVU1FTlQKQEAgLTc1
Myw3ICs3NTMsNyBAQCBfX2FzbSB2b2lkIGN0aU9wVGhyb3dOb3RDYXVnaHQoKQogCiAjZWxpZiBD
T01QSUxFUihSVkNUKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKQogCi1fX2FzbSBFbmNvZGVkSlNW
YWx1ZSBjdGlUcmFtcG9saW5lKHZvaWQqLCBKU1N0YWNrKiwgQ2FsbEZyYW1lKiwgdm9pZCogLyp1
bnVzZWQxKi8sIHZvaWQqIC8qdW51c2VkMiovLCBKU0dsb2JhbERhdGEqKQorX19hc20gRW5jb2Rl
ZEpTVmFsdWUgY3RpVHJhbXBvbGluZSh2b2lkKiwgSlNTdGFjayosIENhbGxGcmFtZSosIHZvaWQq
IC8qdW51c2VkMSovLCB2b2lkKiAvKnVudXNlZDIqLywgVk0qKQogewogICAgIEFSTQogICAgIHN0
bWRiIHNwISwge3IxLXIzfQpAQCAtNzk1LDE0ICs3OTUsMTQgQEAgX19hc20gdm9pZCBjdGlPcFRo
cm93Tm90Q2F1Z2h0KCkKICNlbmRpZgogCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKLSAg
ICAjZGVmaW5lIENUSV9TQU1QTEVSIHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXIt
PnNhbXBsZXIoKQorICAgICNkZWZpbmUgQ1RJX1NBTVBMRVIgc3RhY2tGcmFtZS52bS0+aW50ZXJw
cmV0ZXItPnNhbXBsZXIoKQogI2Vsc2UKICAgICAjZGVmaW5lIENUSV9TQU1QTEVSIDAKICNlbmRp
ZgogCi12b2lkIHBlcmZvcm1QbGF0Zm9ybVNwZWNpZmljSklUQXNzZXJ0aW9ucyhKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEpCit2b2lkIHBlcmZvcm1QbGF0Zm9ybVNwZWNpZmljSklUQXNzZXJ0aW9u
cyhWTSogdm0pCiB7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSkKKyAgICBpZiAo
IXZtLT5jYW5Vc2VKSVQoKSkKICAgICAgICAgcmV0dXJuOwogCiAjaWYgQ1BVKEFSTV9USFVNQjIp
CkBAIC04MzksNyArODM5LDcgQEAgdm9pZCBwZXJmb3JtUGxhdGZvcm1TcGVjaWZpY0pJVEFzc2Vy
dGlvbgogICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHBy
ZXNlcnZlZFJldHVybkFkZHJlc3MpID09IFBSRVNFUlZFRF9SRVRVUk5fQUREUkVTU19PRkZTRVQp
OwogICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHRodW5r
UmV0dXJuQWRkcmVzcykgPT0gVEhVTktfUkVUVVJOX0FERFJFU1NfT0ZGU0VUKTsKICAgICBBU1NF
UlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBzdGFjaykgPT0gUkVHSVNU
RVJfRklMRV9PRkZTRVQpOwotICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0
YWNrRnJhbWUsIGdsb2JhbERhdGEpID09IEdMT0JBTF9EQVRBX09GRlNFVCk7CisgICAgQVNTRVJU
KE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgdm0pID09IEdMT0JBTF9EQVRB
X09GRlNFVCk7CiAKICNlbmRpZgogfQpAQCAtODg4LDEyICs4ODgsMTIgQEAgTkVWRVJfSU5MSU5F
IHN0YXRpYyB2b2lkIHRyeUNhY2hlUHV0QnlJRAogCiAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBw
cm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oY2FsbEZyYW1lKTsKICAg
ICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+cHJldmlvdXNJRCgpLT50cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKLSAgICAgICAgc3R1YkluZm8tPmluaXRQdXRCeUlk
VHJhbnNpdGlvbihjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgc3RydWN0dXJlLT5wcmV2aW91c0lEKCksIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hh
aW4sIGRpcmVjdCk7Ci0gICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKGNhbGxG
cmFtZS0+c2NvcGUoKS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1
cmUtPnByZXZpb3VzSUQoKSwgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm90b3R5
cGVDaGFpbiwgcmV0dXJuQWRkcmVzcywgZGlyZWN0KTsKKyAgICAgICAgc3R1YkluZm8tPmluaXRQ
dXRCeUlkVHJhbnNpdGlvbihjYWxsRnJhbWUtPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIHN0cnVjdHVyZS0+cHJldmlvdXNJRCgpLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWlu
LCBkaXJlY3QpOworICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihjYWxsRnJh
bWUtPnNjb3BlKCktPnZtKCksIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZS0+cHJldmlv
dXNJRCgpLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3RvdHlwZUNoYWluLCBy
ZXR1cm5BZGRyZXNzLCBkaXJlY3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAg
IHN0dWJJbmZvLT5pbml0UHV0QnlJZFJlcGxhY2UoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CisgICAgc3R1YkluZm8tPmlu
aXRQdXRCeUlkUmVwbGFjZShjYWxsRnJhbWUtPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIHN0cnVjdHVyZSk7CiAKICAgICBKSVQ6OnBhdGNoUHV0QnlJZFJlcGxhY2UoY29kZUJs
b2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCByZXR1cm5BZGRy
ZXNzLCBkaXJlY3QpOwogfQpAQCAtOTA5LDE3ICs5MDksMTcgQEAgTkVWRVJfSU5MSU5FIHN0YXRp
YyB2b2lkIHRyeUNhY2hlR2V0QnlJRAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKTsKKyAg
ICBWTSogdm0gPSAmY2FsbEZyYW1lLT52bSgpOwogCiAgICAgaWYgKGlzSlNBcnJheShiYXNlVmFs
dWUpICYmIHByb3BlcnR5TmFtZSA9PSBjYWxsRnJhbWUtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
IHsKLSAgICAgICAgSklUOjpjb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChjYWxsRnJhbWUtPnNj
b3BlKCktPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzKTsKKyAgICAgICAg
SklUOjpjb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChjYWxsRnJhbWUtPnNjb3BlKCktPnZtKCks
IGNvZGVCbG9jaywgcmV0dXJuQWRkcmVzcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
CiAgICAgaWYgKGlzSlNTdHJpbmcoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0gY2FsbEZy
YW1lLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CiAgICAgICAgIC8vIFRoZSB0cmFkZW9mZiBv
ZiBjb21waWxpbmcgYW4gcGF0Y2hlZCBpbmxpbmUgc3RyaW5nIGxlbmd0aCBhY2Nlc3Mgcm91dGlu
ZSBkb2VzIG5vdCBzZWVtCiAgICAgICAgIC8vIHRvIHBheSBvZmYsIHNvIHdlIGN1cnJlbnRseSBv
bmx5IGRvIHRoaXMgZm9yIGFycmF5cy4KLSAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRy
ZXNzKGNvZGVCbG9jaywgcmV0dXJuQWRkcmVzcywgZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1YihzdHJp
bmdMZW5ndGhUcmFtcG9saW5lR2VuZXJhdG9yKS5jb2RlKCkpOworICAgICAgICBjdGlQYXRjaENh
bGxCeVJldHVybkFkZHJlc3MoY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLCB2bS0+Z2V0Q1RJU3R1
YihzdHJpbmdMZW5ndGhUcmFtcG9saW5lR2VuZXJhdG9yKS5jb2RlKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC05NDgsNyArOTQ4LDcgQEAgTkVWRVJfSU5MSU5FIHN0YXRpYyB2b2lk
IHRyeUNhY2hlR2V0QnlJRAogICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNz
KGNvZGVCbG9jaywgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9z
ZWxmX2ZhaWwpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBKSVQ6OnBhdGNoR2V0QnlJ
ZFNlbGYoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgp
LCByZXR1cm5BZGRyZXNzKTsKLSAgICAgICAgICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZFNlbGYo
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0
cnVjdHVyZSk7CisgICAgICAgICAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRTZWxmKGNhbGxGcmFt
ZS0+dm0oKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTc0LDE1ICs5NzQsMTUgQEAgTkVWRVJf
SU5MSU5FIHN0YXRpYyB2b2lkIHRyeUNhY2hlR2V0QnlJRAogICAgICAgICAvLyBTaW5jZSB3ZSdy
ZSBhY2Nlc3NpbmcgYSBwcm90b3R5cGUgaW4gYSBsb29wLCBpdCdzIGEgZ29vZCBiZXQgdGhhdCBp
dAogICAgICAgICAvLyBzaG91bGQgbm90IGJlIHRyZWF0ZWQgYXMgYSBkaWN0aW9uYXJ5LgogICAg
ICAgICBpZiAoc2xvdEJhc2VPYmplY3QtPnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkgewot
ICAgICAgICAgICAgc2xvdEJhc2VPYmplY3QtPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgICAgIG9mZnNldCA9IHNsb3RCYXNlT2JqZWN0
LT5zdHJ1Y3R1cmUoKS0+Z2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUp
OworICAgICAgICAgICAgc2xvdEJhc2VPYmplY3QtPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KGNh
bGxGcmFtZS0+dm0oKSk7CisgICAgICAgICAgICBvZmZzZXQgPSBzbG90QmFzZU9iamVjdC0+c3Ry
dWN0dXJlKCktPmdldChjYWxsRnJhbWUtPnZtKCksIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZFByb3RvKGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUsIHNs
b3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKSwgc2xvdC5jYWNoZWRQcm9wZXJ0eVR5cGUoKSA9PSBQ
cm9wZXJ0eVNsb3Q6OlZhbHVlKTsKKyAgICAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlkUHJvdG8o
Y2FsbEZyYW1lLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUs
IHNsb3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKSwgc2xvdC5jYWNoZWRQcm9wZXJ0eVR5cGUoKSA9
PSBQcm9wZXJ0eVNsb3Q6OlZhbHVlKTsKIAogICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNE
aWN0aW9uYXJ5KCkpOwogICAgICAgICBBU1NFUlQoIXNsb3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+aXNEaWN0aW9uYXJ5KCkpOwotICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeUlkUHJvdG8oY2Fs
bEZyYW1lLT5zY29wZSgpLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZSwgY29kZUJsb2NrLCBzdHVi
SW5mbywgc3RydWN0dXJlLCBzbG90QmFzZU9iamVjdC0+c3RydWN0dXJlKCksIHByb3BlcnR5TmFt
ZSwgc2xvdCwgb2Zmc2V0LCByZXR1cm5BZGRyZXNzKTsKKyAgICAgICAgSklUOjpjb21waWxlR2V0
QnlJZFByb3RvKGNhbGxGcmFtZS0+c2NvcGUoKS0+dm0oKSwgY2FsbEZyYW1lLCBjb2RlQmxvY2ss
IHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKSwgcHJvcGVy
dHlOYW1lLCBzbG90LCBvZmZzZXQsIHJldHVybkFkZHJlc3MpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC05OTUsOCArOTk1LDggQEAgTkVWRVJfSU5MSU5FIHN0YXRpYyB2b2lkIHRyeUNh
Y2hlR2V0QnlJRAogICAgIH0KIAogICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9
IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oY2FsbEZyYW1lKTsKLSAgICBzdHViSW5mby0+aW5p
dEdldEJ5SWRDaGFpbihjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHNsb3QuY2FjaGVk
UHJvcGVydHlUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpWYWx1ZSk7Ci0gICAgSklUOjpjb21waWxl
R2V0QnlJZENoYWluKGNhbGxGcmFtZS0+c2NvcGUoKS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUs
IGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBw
cm9wZXJ0eU5hbWUsIHNsb3QsIG9mZnNldCwgcmV0dXJuQWRkcmVzcyk7CisgICAgc3R1YkluZm8t
PmluaXRHZXRCeUlkQ2hhaW4oY2FsbEZyYW1lLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgc2xvdC5jYWNoZWRQcm9w
ZXJ0eVR5cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OlZhbHVlKTsKKyAgICBKSVQ6OmNvbXBpbGVHZXRC
eUlkQ2hhaW4oY2FsbEZyYW1lLT5zY29wZSgpLT52bSgpLCBjYWxsRnJhbWUsIGNvZGVCbG9jaywg
c3R1YkluZm8sIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBwcm9wZXJ0eU5hbWUs
IHNsb3QsIG9mZnNldCwgcmV0dXJuQWRkcmVzcyk7CiB9CiAKICNpZiAhZGVmaW5lZChOREVCVUcp
CkBAIC0xMDQ2LDEwICsxMDQ2LDEwIEBAIHN0cnVjdCBTdGFja0hhY2sgewogLy8gdG8gZ2V0IHRo
ZSBhZGRyZXNzIG9mIHRoZSBjdGlWTVRocm93VHJhbXBvbGluZSBmdW5jdGlvbi4gSXQncyBhbHNv
CiAvLyBnb29kIHRvIGtlZXAgdGhlIGNvZGUgc2l6ZSBkb3duIGJ5IGxlYXZpbmcgYXMgbXVjaCBv
ZiB0aGUgZXhjZXB0aW9uCiAvLyBoYW5kbGluZyBjb2RlIG91dCBvZiBsaW5lIGFzIHBvc3NpYmxl
Lgotc3RhdGljIE5FVkVSX0lOTElORSB2b2lkIHJldHVyblRvVGhyb3dUcmFtcG9saW5lKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgUmV0dXJuQWRkcmVzc1B0ciBleGNlcHRpb25Mb2NhdGlvbiwg
UmV0dXJuQWRkcmVzc1B0ciYgcmV0dXJuQWRkcmVzc1Nsb3QpCitzdGF0aWMgTkVWRVJfSU5MSU5F
IHZvaWQgcmV0dXJuVG9UaHJvd1RyYW1wb2xpbmUoVk0qIHZtLCBSZXR1cm5BZGRyZXNzUHRyIGV4
Y2VwdGlvbkxvY2F0aW9uLCBSZXR1cm5BZGRyZXNzUHRyJiByZXR1cm5BZGRyZXNzU2xvdCkKIHsK
LSAgICBSRUxFQVNFX0FTU0VSVChnbG9iYWxEYXRhLT5leGNlcHRpb24pOwotICAgIGdsb2JhbERh
dGEtPmV4Y2VwdGlvbkxvY2F0aW9uID0gZXhjZXB0aW9uTG9jYXRpb247CisgICAgUkVMRUFTRV9B
U1NFUlQodm0tPmV4Y2VwdGlvbik7CisgICAgdm0tPmV4Y2VwdGlvbkxvY2F0aW9uID0gZXhjZXB0
aW9uTG9jYXRpb247CiAgICAgcmV0dXJuQWRkcmVzc1Nsb3QgPSBSZXR1cm5BZGRyZXNzUHRyKEZ1
bmN0aW9uUHRyKGN0aVZNVGhyb3dUcmFtcG9saW5lKSk7CiB9CiAKQEAgLTEwNjAsMjIgKzEwNjAs
MjIgQEAgc3RhdGljIE5FVkVSX0lOTElORSB2b2lkIHJldHVyblRvVGhyb3dUcgogICAgIH0gd2hp
bGUgKDApCiAjZGVmaW5lIFZNX1RIUk9XX0VYQ0VQVElPTl9BVF9FTkQoKSBcCiAgICAgZG8ge1wK
LSAgICAgICAgcmV0dXJuVG9UaHJvd1RyYW1wb2xpbmUoc3RhY2tGcmFtZS5nbG9iYWxEYXRhLCBT
VFVCX1JFVFVSTl9BRERSRVNTLCBTVFVCX1JFVFVSTl9BRERSRVNTKTtcCisgICAgICAgIHJldHVy
blRvVGhyb3dUcmFtcG9saW5lKHN0YWNrRnJhbWUudm0sIFNUVUJfUkVUVVJOX0FERFJFU1MsIFNU
VUJfUkVUVVJOX0FERFJFU1MpO1wKICAgICB9IHdoaWxlICgwKQogCiAjZGVmaW5lIENIRUNLX0ZP
Ul9FWENFUFRJT04oKSBcCiAgICAgZG8geyBcCi0gICAgICAgIGlmIChVTkxJS0VMWShzdGFja0Zy
YW1lLmdsb2JhbERhdGEtPmV4Y2VwdGlvbikpIFwKKyAgICAgICAgaWYgKFVOTElLRUxZKHN0YWNr
RnJhbWUudm0tPmV4Y2VwdGlvbikpIFwKICAgICAgICAgICAgIFZNX1RIUk9XX0VYQ0VQVElPTigp
OyBcCiAgICAgfSB3aGlsZSAoMCkKICNkZWZpbmUgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQo
KSBcCiAgICAgZG8geyBcCi0gICAgICAgIGlmIChVTkxJS0VMWShzdGFja0ZyYW1lLmdsb2JhbERh
dGEtPmV4Y2VwdGlvbikpIFwKKyAgICAgICAgaWYgKFVOTElLRUxZKHN0YWNrRnJhbWUudm0tPmV4
Y2VwdGlvbikpIFwKICAgICAgICAgICAgIFZNX1RIUk9XX0VYQ0VQVElPTl9BVF9FTkQoKTsgXAog
ICAgIH0gd2hpbGUgKDApCiAjZGVmaW5lIENIRUNLX0ZPUl9FWENFUFRJT05fVk9JRCgpIFwKICAg
ICBkbyB7IFwKLSAgICAgICAgaWYgKFVOTElLRUxZKHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhj
ZXB0aW9uKSkgeyBcCisgICAgICAgIGlmIChVTkxJS0VMWShzdGFja0ZyYW1lLnZtLT5leGNlcHRp
b24pKSB7IFwKICAgICAgICAgICAgIFZNX1RIUk9XX0VYQ0VQVElPTl9BVF9FTkQoKTsgXAogICAg
ICAgICAgICAgcmV0dXJuOyBcCiAgICAgICAgIH0gXApAQCAtMTA4NywxNiArMTA4NywxNiBAQCBz
dGF0aWMgTkVWRVJfSU5MSU5FIHZvaWQgcmV0dXJuVG9UaHJvd1RyCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdGF0aWMgVCB0aHJvd0V4Y2VwdGlvbkZyb21PcENhbGwoSklUU3RhY2tGcmFtZSYgaml0
U3RhY2tGcmFtZSwgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUsIFJldHVybkFkZHJlc3NQdHImIHJl
dHVybkFkZHJlc3NTbG90KQogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gbmV3Q2FsbEZy
YW1lLT5jYWxsZXJGcmFtZSgpOwotICAgIEFTU0VSVChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5l
eGNlcHRpb24pOworICAgIEFTU0VSVChjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uKTsKICAgICBq
aXRTdGFja0ZyYW1lLmNhbGxGcmFtZSA9IGNhbGxGcmFtZTsKLSAgICBjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKS50b3BDYWxsRnJhbWUgPSBjYWxsRnJhbWU7Ci0gICAgcmV0dXJuVG9UaHJvd1RyYW1w
b2xpbmUoJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBSZXR1cm5BZGRyZXNzUHRyKG5ld0NhbGxG
cmFtZS0+cmV0dXJuUEMoKSksIHJldHVybkFkZHJlc3NTbG90KTsKKyAgICBjYWxsRnJhbWUtPnZt
KCkudG9wQ2FsbEZyYW1lID0gY2FsbEZyYW1lOworICAgIHJldHVyblRvVGhyb3dUcmFtcG9saW5l
KCZjYWxsRnJhbWUtPnZtKCksIFJldHVybkFkZHJlc3NQdHIobmV3Q2FsbEZyYW1lLT5yZXR1cm5Q
QygpKSwgcmV0dXJuQWRkcmVzc1Nsb3QpOwogICAgIHJldHVybiBUKCk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0YXRpYyBUIHRocm93RXhjZXB0aW9uRnJvbU9wQ2FsbChKSVRTdGFja0Zy
YW1lJiBqaXRTdGFja0ZyYW1lLCBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSwgUmV0dXJuQWRkcmVz
c1B0ciYgcmV0dXJuQWRkcmVzc1Nsb3QsIEpTVmFsdWUgZXhjZXB0aW9uKQogewotICAgIG5ld0Nh
bGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGV4Y2VwdGlv
bjsKKyAgICBuZXdDYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPnZtKCkuZXhjZXB0aW9uID0gZXhj
ZXB0aW9uOwogICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbkZyb21PcENhbGw8VD4oaml0U3RhY2tG
cmFtZSwgbmV3Q2FsbEZyYW1lLCByZXR1cm5BZGRyZXNzU2xvdCk7CiB9CiAKQEAgLTE0MDksNyAr
MTQwOSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV9pZF8KICAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlz
U3RyaWN0TW9kZSgpKTsKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1sw
XS5qc1ZhbHVlKCk7CiAgICAgQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKLSAgICBhc09i
amVjdChiYXNlVmFsdWUpLT5wdXREaXJlY3Qoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmdsb2JhbERh
dGEoKSwgc3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKSwgc3RhY2tGcmFtZS5hcmdzWzJd
LmpzVmFsdWUoKSwgc2xvdCk7CisgICAgYXNPYmplY3QoYmFzZVZhbHVlKS0+cHV0RGlyZWN0KHN0
YWNrRnJhbWUuY2FsbEZyYW1lLT52bSgpLCBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigp
LCBzdGFja0ZyYW1lLmFyZ3NbMl0uanNWYWx1ZSgpLCBzbG90KTsKICAgICBDSEVDS19GT1JfRVhD
RVBUSU9OX0FUX0VORCgpOwogfQogCkBAIC0xNDYzLDcgKzE0NjMsNyBAQCBERUZJTkVfU1RVQl9G
VU5DVElPTih2b2lkLCBvcF9wdXRfYnlfaWRfCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFj
a0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwogICAgIEFTU0VSVChiYXNlVmFsdWUuaXNPYmplY3Qo
KSk7CiAgICAgCi0gICAgYXNPYmplY3QoYmFzZVZhbHVlKS0+cHV0RGlyZWN0KGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLCBpZGVudCwgc3RhY2tGcmFtZS5hcmdzWzJdLmpzVmFsdWUoKSwgc2xvdCk7
CisgICAgYXNPYmplY3QoYmFzZVZhbHVlKS0+cHV0RGlyZWN0KGNhbGxGcmFtZS0+dm0oKSwgaWRl
bnQsIHN0YWNrRnJhbWUuYXJnc1syXS5qc1ZhbHVlKCksIHNsb3QpOwogICAgIAogICAgIGlmIChh
Y2Nlc3NUeXBlID09IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBl
KSkgewogICAgICAgICBzdHViSW5mby0+c2V0U2VlbigpOwpAQCAtMTQ5Niw3ICsxNDk2LDcgQEAg
REVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X2lkXwogICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICBK
U1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CiAgICAgQVNT
RVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlVmFsdWUpLT5wdXRE
aXJlY3QoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGlkZW50LCBzdGFja0ZyYW1lLmFyZ3NbMl0u
anNWYWx1ZSgpLCBzbG90KTsKKyAgICBhc09iamVjdChiYXNlVmFsdWUpLT5wdXREaXJlY3QoY2Fs
bEZyYW1lLT52bSgpLCBpZGVudCwgc3RhY2tGcmFtZS5hcmdzWzJdLmpzVmFsdWUoKSwgc2xvdCk7
CiAgICAgCiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKIH0KQEAgLTE1MTUsOSAr
MTUxNSw5IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfcHV0X2IKIAogICAg
IEFTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7CiAgICAgSlNPYmplY3QqIGJhc2UgPSBhc09i
amVjdChiYXNlVmFsdWUpOwotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9ICpzdGFja0Zy
YW1lLmdsb2JhbERhdGE7Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBiYXNlLT5ncm93T3V0
T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBvbGRTaXplLCBuZXdTaXplKTsKLSAgICBiYXNlLT5z
ZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgYnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOworICAgIFZN
JiB2bSA9ICpzdGFja0ZyYW1lLnZtOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gYmFzZS0+
Z3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIG9sZFNpemUsIG5ld1NpemUpOworICAgIGJhc2UtPnNl
dEJ1dHRlcmZseSh2bSwgYnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOwogCiAgICAgcmV0dXJuIGJh
c2U7CiB9CkBAIC0xNTc5LDExICsxNTc5LDExIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29k
ZWRKU1ZhbHVlLCBvcF8KICAgICAgICAgaW50IGxpc3RJbmRleCA9IDE7CiAKICAgICAgICAgaWYg
KHN0dWJJbmZvLT5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCkKLSAgICAgICAgICAgIHN0dWJJ
bmZvLT5pbml0R2V0QnlJZFNlbGYoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkpOworICAg
ICAgICAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlkU2VsZihjYWxsRnJhbWUtPnZtKCksIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkp
OwogCiAgICAgICAgIGlmIChzdHViSW5mby0+YWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lk
X3NlbGYpIHsKICAgICAgICAgICAgIEFTU0VSVCghc3R1YkluZm8tPnN0dWJSb3V0aW5lKTsKLSAg
ICAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vz
c1N0cnVjdHVyZUxpc3QoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIDAsIHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1
cmUuZ2V0KCksIHRydWUpOworICAgICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0g
bmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChjYWxsRnJhbWUtPnZtKCksIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIDAsIHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmLmJhc2VP
YmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHRydWUpOwogICAgICAgICAgICAgc3R1YkluZm8tPmluaXRH
ZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLT51
LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0OwpAQCAtMTU5MSw3ICsxNTkxLDcgQEAgREVG
SU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgICAgICB9CiAgICAgICAg
IGlmIChsaXN0SW5kZXggPCBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpIHsKICAgICAgICAg
ICAgIHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZSsrOwotICAgICAgICAgICAg
SklUOjpjb21waWxlR2V0QnlJZFNlbGZMaXN0KGNhbGxGcmFtZS0+c2NvcGUoKS0+Z2xvYmFsRGF0
YSgpLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIGxpc3RJ
bmRleCwgYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgaWRlbnQsIHNsb3QsIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgSklUOjpjb21waWxlR2V0QnlJZFNlbGZMaXN0
KGNhbGxGcmFtZS0+c2NvcGUoKS0+dm0oKSwgY29kZUJsb2NrLCBzdHViSW5mbywgcG9seW1vcnBo
aWNTdHJ1Y3R1cmVMaXN0LCBsaXN0SW5kZXgsIGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJl
KCksIGlkZW50LCBzbG90LCBzbG90LmNhY2hlZE9mZnNldCgpKTsKIAogICAgICAgICAgICAgaWYg
KGxpc3RJbmRleCA9PSAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSkpCiAgICAgICAg
ICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNvZGVCbG9jaywgU1RVQl9SRVRV
Uk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9nZW5lcmljKSk7CkBAIC0x
NjAxLDE5ICsxNjAxLDE5IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBv
cF8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLXN0YXRpYyBQb2x5
bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIGdldFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJl
TGlzdFNsb3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25l
ciwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBpbnQmIGxpc3RJbmRleCkKK3N0YXRpYyBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIGdldFBvbHltb3JwaGljQWNjZXNzU3RydWN0
dXJlTGlzdFNsb3QoVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lciwgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBpbnQmIGxpc3RJbmRleCkKIHsKICAgICBQb2x5bW9ycGhpY0FjY2Vz
c1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QgPSAwOwogICAgIGxpc3RJbmRl
eCA9IDE7CiAKICAgICBzd2l0Y2ggKHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSB7CiAgICAgY2FzZSBh
Y2Nlc3NfZ2V0X2J5X2lkX3Byb3RvOgotICAgICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0ID0g
bmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChnbG9iYWxEYXRhLCBvd25lciwgc3R1
YkluZm8tPnN0dWJSb3V0aW5lLCBzdHViSW5mby0+dS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0
cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8tPnUuZ2V0QnlJZFByb3RvLnByb3RvdHlwZVN0cnVjdHVy
ZS5nZXQoKSwgdHJ1ZSk7CisgICAgICAgIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QgPSBuZXcgUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KHZtLCBvd25lciwgc3R1YkluZm8tPnN0dWJSb3V0
aW5lLCBzdHViSW5mby0+dS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwg
c3R1YkluZm8tPnUuZ2V0QnlJZFByb3RvLnByb3RvdHlwZVN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7
CiAgICAgICAgIHN0dWJJbmZvLT5zdHViUm91dGluZS5jbGVhcigpOwogICAgICAgICBzdHViSW5m
by0+aW5pdEdldEJ5SWRQcm90b0xpc3QocHJvdG90eXBlU3RydWN0dXJlTGlzdCwgMik7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKLSAgICAgICAgcHJv
dG90eXBlU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qo
Z2xvYmFsRGF0YSwgb3duZXIsIHN0dWJJbmZvLT5zdHViUm91dGluZSwgc3R1YkluZm8tPnUuZ2V0
QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLT51LmdldEJ5SWRD
aGFpbi5jaGFpbi5nZXQoKSwgdHJ1ZSk7CisgICAgICAgIHByb3RvdHlwZVN0cnVjdHVyZUxpc3Qg
PSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KHZtLCBvd25lciwgc3R1YkluZm8t
PnN0dWJSb3V0aW5lLCBzdHViSW5mby0+dS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVy
ZS5nZXQoKSwgc3R1YkluZm8tPnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpLCB0cnVlKTsKICAg
ICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lLmNsZWFyKCk7CiAgICAgICAgIHN0dWJJbmZvLT5p
bml0R2V0QnlJZFByb3RvTGlzdChwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCAyKTsKICAgICAgICAg
YnJlYWs7CkBAIC0xNjQzLDcgKzE2NDMsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVk
SlNWYWx1ZSwgb3BfCiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXR0ZXItPm1ldGhvZFRhYmxl
KCktPmdldENhbGxEYXRhKGdldHRlciwgY2FsbERhdGEpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
Y2FsbChjYWxsRnJhbWUsIGdldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBzdGFja0ZyYW1lLmFy
Z3NbMV0uanNPYmplY3QoKSwgQXJnTGlzdCgpKTsKICAgICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNl
cHRpb24oKSkKLSAgICAgICAgcmV0dXJuVG9UaHJvd1RyYW1wb2xpbmUoJmNhbGxGcmFtZS0+Z2xv
YmFsRGF0YSgpLCBzdGFja0ZyYW1lLmFyZ3NbMl0ucmV0dXJuQWRkcmVzcygpLCBTVFVCX1JFVFVS
Tl9BRERSRVNTKTsKKyAgICAgICAgcmV0dXJuVG9UaHJvd1RyYW1wb2xpbmUoJmNhbGxGcmFtZS0+
dm0oKSwgc3RhY2tGcmFtZS5hcmdzWzJdLnJldHVybkFkZHJlc3MoKSwgU1RVQl9SRVRVUk5fQURE
UkVTUyk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC0xNjU3
LDcgKzE2NTcsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAg
ICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBzdGFja0ZyYW1lLmFyZ3NbMl0uaWRlbnRpZmll
cigpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gZ2V0dGVyKGNhbGxGcmFtZSwgc2xvdEJhc2UsIGlk
ZW50KTsKICAgICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJu
VG9UaHJvd1RyYW1wb2xpbmUoJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBzdGFja0ZyYW1lLmFy
Z3NbM10ucmV0dXJuQWRkcmVzcygpLCBTVFVCX1JFVFVSTl9BRERSRVNTKTsKKyAgICAgICAgcmV0
dXJuVG9UaHJvd1RyYW1wb2xpbmUoJmNhbGxGcmFtZS0+dm0oKSwgc3RhY2tGcmFtZS5hcmdzWzNd
LnJldHVybkFkZHJlc3MoKSwgU1RVQl9SRVRVUk5fQUREUkVTUyk7CiAgICAgCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQpAQCAtMTcwOCwxNCArMTcwOCwxNCBAQCBERUZJ
TkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgICAgIC8vIFNpbmNlIHdl
J3JlIGFjY2Vzc2luZyBhIHByb3RvdHlwZSBpbiBhIGxvb3AsIGl0J3MgYSBnb29kIGJldCB0aGF0
IGl0CiAgICAgICAgIC8vIHNob3VsZCBub3QgYmUgdHJlYXRlZCBhcyBhIGRpY3Rpb25hcnkuCiAg
ICAgICAgIGlmIChzbG90QmFzZU9iamVjdC0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7
Ci0gICAgICAgICAgICBzbG90QmFzZU9iamVjdC0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoY2Fs
bEZyYW1lLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdEJhc2VPYmpl
Y3QtPnN0cnVjdHVyZSgpLT5nZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFt
ZSk7CisgICAgICAgICAgICBzbG90QmFzZU9iamVjdC0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qo
Y2FsbEZyYW1lLT52bSgpKTsKKyAgICAgICAgICAgIG9mZnNldCA9IHNsb3RCYXNlT2JqZWN0LT5z
dHJ1Y3R1cmUoKS0+Z2V0KGNhbGxGcmFtZS0+dm0oKSwgcHJvcGVydHlOYW1lKTsKICAgICAgICAg
fQogCiAgICAgICAgIGludCBsaXN0SW5kZXg7Ci0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IGdldFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdFNsb3QoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIHN0dWJJbmZvLCBsaXN0SW5kZXgpOworICAgICAgICBQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QgPSBnZXRQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTbG90KGNhbGxGcmFtZS0+dm0oKSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgc3R1YkluZm8sIGxpc3RJbmRleCk7CiAgICAgICAgIGlmIChsaXN0
SW5kZXggPCBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpIHsKLSAgICAgICAgICAgIEpJVDo6
Y29tcGlsZUdldEJ5SWRQcm90b0xpc3QoY2FsbEZyYW1lLT5zY29wZSgpLT5nbG9iYWxEYXRhKCks
IGNhbGxGcmFtZSwgY29kZUJsb2NrLCBzdHViSW5mbywgcHJvdG90eXBlU3RydWN0dXJlTGlzdCwg
bGlzdEluZGV4LCBzdHJ1Y3R1cmUsIHNsb3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKSwgcHJvcGVy
dHlOYW1lLCBzbG90LCBvZmZzZXQpOworICAgICAgICAgICAgSklUOjpjb21waWxlR2V0QnlJZFBy
b3RvTGlzdChjYWxsRnJhbWUtPnNjb3BlKCktPnZtKCksIGNhbGxGcmFtZSwgY29kZUJsb2NrLCBz
dHViSW5mbywgcHJvdG90eXBlU3RydWN0dXJlTGlzdCwgbGlzdEluZGV4LCBzdHJ1Y3R1cmUsIHNs
b3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBzbG90LCBvZmZzZXQpOwog
CiAgICAgICAgICAgICBpZiAobGlzdEluZGV4ID09IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJ
WkUgLSAxKSkKICAgICAgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY29k
ZUJsb2NrLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lk
X3Byb3RvX2xpc3RfZnVsbCkpOwpAQCAtMTcyOSwxMSArMTcyOSwxMSBAQCBERUZJTkVfU1RVQl9G
VU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgICAgIAogICAgICAgICBBU1NFUlQoIWJh
c2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKTsKICAgICAgICAg
aW50IGxpc3RJbmRleDsKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBw
cm90b3R5cGVTdHJ1Y3R1cmVMaXN0ID0gZ2V0UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
U2xvdChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgc3R1YkluZm8sIGxpc3RJbmRleCk7CisgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0
dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IGdldFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdFNsb3QoY2FsbEZyYW1lLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBzdHViSW5mbywgbGlzdEluZGV4KTsKICAgICAgICAgCiAgICAgICAgIGlmIChsaXN0SW5k
ZXggPCBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpIHsKICAgICAgICAgICAgIFN0cnVjdHVy
ZUNoYWluKiBwcm90b0NoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihjYWxsRnJhbWUp
OwotICAgICAgICAgICAgSklUOjpjb21waWxlR2V0QnlJZENoYWluTGlzdChjYWxsRnJhbWUtPnNj
b3BlKCktPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBwcm90
b3R5cGVTdHJ1Y3R1cmVMaXN0LCBsaXN0SW5kZXgsIHN0cnVjdHVyZSwgcHJvdG9DaGFpbiwgY291
bnQsIHByb3BlcnR5TmFtZSwgc2xvdCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIEpJVDo6Y29tcGls
ZUdldEJ5SWRDaGFpbkxpc3QoY2FsbEZyYW1lLT5zY29wZSgpLT52bSgpLCBjYWxsRnJhbWUsIGNv
ZGVCbG9jaywgc3R1YkluZm8sIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIGxpc3RJbmRleCwgc3Ry
dWN0dXJlLCBwcm90b0NoYWluLCBjb3VudCwgcHJvcGVydHlOYW1lLCBzbG90LCBvZmZzZXQpOwog
CiAgICAgICAgICAgICBpZiAobGlzdEluZGV4ID09IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJ
WkUgLSAxKSkKICAgICAgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY29k
ZUJsb2NrLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lk
X3Byb3RvX2xpc3RfZnVsbCkpOwpAQCAtMTgwOSw3ICsxODA5LDcgQEAgREVGSU5FX1NUVUJfRlVO
Q1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgICAgICB9CiAgICAgfQogCi0gICAgc3RhY2tG
cmFtZS5nbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihjYWxs
RnJhbWUsICJpbnN0YW5jZW9mIiwgYmFzZVZhbCk7CisgICAgc3RhY2tGcmFtZS52bS0+ZXhjZXB0
aW9uID0gY3JlYXRlSW52YWxpZFBhcmFtRXJyb3IoY2FsbEZyYW1lLCAiaW5zdGFuY2VvZiIsIGJh
c2VWYWwpOwogICAgIFZNX1RIUk9XX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiB9CkBAIC0xOTc4LDcgKzE5NzgsNyBAQCBERUZJTkVf
U1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgYm9vbCBjb3VsZERlbGV0ZSA9
IGJhc2VPYmotPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KGJhc2VPYmosIGNhbGxGcmFt
ZSwgc3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc0Jvb2xlYW4oY291bGREZWxldGUpOwogICAgIGlmICghY291bGREZWxldGUgJiYgY2FsbEZy
YW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpCi0gICAgICAgIHN0YWNrRnJhbWUuZ2xv
YmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKHN0YWNrRnJhbWUuY2FsbEZyYW1l
LCAiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgc3RhY2tGcmFtZS52bS0+
ZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKHN0YWNrRnJhbWUuY2FsbEZyYW1lLCAiVW5hYmxl
IHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKTsKIAogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5E
KCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtMjAzNCw3ICsyMDM0
LDcgQEAgaW5saW5lIHZvaWQqIGppdENvbXBpbGVGb3IoQ2FsbEZyYW1lKiBjYQogICAgIEpTT2Jq
ZWN0KiBlcnJvciA9IGV4ZWN1dGFibGUtPmNvbXBpbGVGb3IoY2FsbEZyYW1lLCBjYWxsRGF0YVNj
b3BlQ2hhaW4sIGtpbmQpOwogICAgIGlmICghZXJyb3IpCiAgICAgICAgIHJldHVybiBmdW5jdGlv
bjsKLSAgICBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBlcnJvcjsKKyAgICBj
YWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uID0gZXJyb3I7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAg
LTIxMjksNyArMjEyOSw3IEBAIGlubGluZSB2b2lkKiBsYXp5TGlua0ZvcihDYWxsRnJhbWUqIGNh
bGwKICAgICBlbHNlIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1
dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKICAg
ICAgICAgaWYgKEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZv
cihjYWxsRnJhbWUsIGNhbGxlZS0+c2NvcGUoKSwga2luZCkpIHsKLSAgICAgICAgICAgIGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGVycm9yOworICAgICAgICAgICAgY2FsbEZy
YW1lLT52bSgpLmV4Y2VwdGlvbiA9IGVycm9yOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgIH0KICAgICAgICAgY29kZUJsb2NrID0gJmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVk
Qnl0ZWNvZGVGb3Ioa2luZCk7CkBAIC0yMTQzLDcgKzIxNDMsNyBAQCBpbmxpbmUgdm9pZCogbGF6
eUxpbmtGb3IoQ2FsbEZyYW1lKiBjYWxsCiAgICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNl
KCkpCiAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0U2VlbigpOwogICAgIGVsc2UKLSAgICAgICAg
SklUOjpsaW5rRm9yKGNhbGxlZSwgY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2so
KSwgY29kZUJsb2NrLCBjb2RlUHRyLCBjYWxsTGlua0luZm8sICZjYWxsRnJhbWUtPmdsb2JhbERh
dGEoKSwga2luZCk7CisgICAgICAgIEpJVDo6bGlua0ZvcihjYWxsZWUsIGNhbGxGcmFtZS0+Y2Fs
bGVyRnJhbWUoKS0+Y29kZUJsb2NrKCksIGNvZGVCbG9jaywgY29kZVB0ciwgY2FsbExpbmtJbmZv
LCAmY2FsbEZyYW1lLT52bSgpLCBraW5kKTsKIAogICAgIHJldHVybiBjb2RlUHRyLmV4ZWN1dGFi
bGVBZGRyZXNzKCk7CiB9CkBAIC0yMTY3LDcgKzIxNjcsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElP
Tih2b2lkKiwgdm1fbGF6eUxpbmtDCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0Zy
YW1lLmNhbGxGcmFtZTsKICAgICAKICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNh
bGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7Ci0gICAgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhID0gY2FsbGVyQ29kZUJsb2NrLT5nbG9iYWxEYXRhKCk7CisgICAgVk0qIHZtID0g
Y2FsbGVyQ29kZUJsb2NrLT52bSgpOwogICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0g
JmNhbGxlckNvZGVCbG9jay0+Z2V0Q2FsbExpbmtJbmZvKGNhbGxGcmFtZS0+cmV0dXJuUEMoKSk7
CiAgICAgSlNGdW5jdGlvbiogY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUt
PmNhbGxlZSgpKTsKICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+ZXhl
Y3V0YWJsZSgpOwpAQCAtMjIwNiw3ICsyMjA2LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCosIHZtX2xhenlMaW5rQwogICAgICAgICBKU1Njb3BlKiBzY29wZUNoYWluID0gY2FsbGVlLT5z
Y29wZSgpOwogICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNv
bXBpbGVGb3IoY2FsbEZyYW1lLCBzY29wZUNoYWluLCBDb2RlRm9yQ2FsbCk7CiAgICAgICAgIGlm
IChlcnJvcikgewotICAgICAgICAgICAgY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9u
ID0gZXJyb3I7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uID0gZXJyb3I7
CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICAKQEAgLTIyMTUsNyAr
MjIxNSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCB2bV9sYXp5TGlua0MKICAgICAK
ICAgICBpZiAoc2hvdWxkTGluaykgewogICAgICAgICBBU1NFUlQoY29kZVB0cik7Ci0gICAgICAg
IEpJVDo6Y29tcGlsZUNsb3N1cmVDYWxsKGdsb2JhbERhdGEsIGNhbGxMaW5rSW5mbywgY2FsbGVy
Q29kZUJsb2NrLCBjYWxsZWVDb2RlQmxvY2ssIHN0cnVjdHVyZSwgZXhlY3V0YWJsZSwgY29kZVB0
cik7CisgICAgICAgIEpJVDo6Y29tcGlsZUNsb3N1cmVDYWxsKHZtLCBjYWxsTGlua0luZm8sIGNh
bGxlckNvZGVCbG9jaywgY2FsbGVlQ29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGV4ZWN1dGFibGUsIGNv
ZGVQdHIpOwogICAgICAgICBjYWxsTGlua0luZm8tPmhhc1NlZW5DbG9zdXJlID0gdHJ1ZTsKICAg
ICB9IGVsc2UKICAgICAgICAgSklUOjpsaW5rU2xvd0NhbGwoY2FsbGVyQ29kZUJsb2NrLCBjYWxs
TGlua0luZm8pOwpAQCAtMjIzOSw3ICsyMjM5LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNP
YmplY3QqLCBvcF9wdXNoXwogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1l
KTsKIAotICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRl
KHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHN0YWNrRnJhbWUuY2FsbEZyYW1l
LCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCkpOworICAgIEpTQWN0aXZhdGlvbiog
YWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT52
bSgpLCBzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9j
aygpKTsKICAgICBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+c2V0U2NvcGUoYWN0aXZhdGlvbik7CiAg
ICAgcmV0dXJuIGFjdGl2YXRpb247CiB9CkBAIC0yMjY3LDcgKzIyNjcsNyBAQCBERUZJTkVfU1RV
Ql9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgICAgIHJldHVyblZhbHVlID0gY2Fs
bERhdGEubmF0aXZlLmZ1bmN0aW9uKGNhbGxGcmFtZSk7CiAgICAgfQogCi0gICAgaWYgKHN0YWNr
RnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKQorICAgIGlmIChzdGFja0ZyYW1lLnZtLT5leGNl
cHRpb24pCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbkZyb21PcENhbGw8RW5jb2RlZEpT
VmFsdWU+KHN0YWNrRnJhbWUsIGNhbGxGcmFtZSwgU1RVQl9SRVRVUk5fQUREUkVTUyk7CiAKICAg
ICByZXR1cm4gcmV0dXJuVmFsdWU7CkBAIC0yMjc3LDcgKzIyNzcsNyBAQCBERUZJTkVfU1RVQl9G
VU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1F
KHN0YWNrRnJhbWUpOwogCi0gICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBBcmd1bWVudHM6OmNy
ZWF0ZSgqc3RhY2tGcmFtZS5nbG9iYWxEYXRhLCBzdGFja0ZyYW1lLmNhbGxGcmFtZSk7CisgICAg
QXJndW1lbnRzKiBhcmd1bWVudHMgPSBBcmd1bWVudHM6OmNyZWF0ZSgqc3RhY2tGcmFtZS52bSwg
c3RhY2tGcmFtZS5jYWxsRnJhbWUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZShhcmd1bWVudHMpKTsKIH0KIApAQCAtMjI4Niw3ICsyMjg2LDcgQEAgREVGSU5FX1NUVUJfRlVO
Q1RJT04odm9pZCwgb3BfdGVhcl9vZmZfYQogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFj
a0ZyYW1lKTsKIAogICAgIEFTU0VSVChzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
Pm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSk7Ci0gICAganNDYXN0PEpTQWN0aXZhdGlvbio+KHN0YWNr
RnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkpLT50ZWFyT2ZmKCpzdGFja0ZyYW1lLmdsb2JhbERhdGEp
OworICAgIGpzQ2FzdDxKU0FjdGl2YXRpb24qPihzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgp
KS0+dGVhck9mZigqc3RhY2tGcmFtZS52bSk7CiB9CiAKIERFRklORV9TVFVCX0ZVTkNUSU9OKHZv
aWQsIG9wX3RlYXJfb2ZmX2FyZ3VtZW50cykKQEAgLTIzMDcsNyArMjMwNyw3IEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3Byb2ZpbGVfd2kKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tf
RlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0g
c3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5lbmFibGVkUHJvZmlsZXIoKSkKKyAgICBpZiAoTGVnYWN5
UHJvZmlsZXIqIHByb2ZpbGVyID0gc3RhY2tGcmFtZS52bS0+ZW5hYmxlZFByb2ZpbGVyKCkpCiAg
ICAgICAgIHByb2ZpbGVyLT53aWxsRXhlY3V0ZShzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tG
cmFtZS5hcmdzWzBdLmpzVmFsdWUoKSk7CiB9CiAKQEAgLTIzMTUsNyArMjMxNSw3IEBAIERFRklO
RV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3Byb2ZpbGVfZGkKIHsKICAgICBTVFVCX0lOSVRfU1RB
Q0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVy
ID0gc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5lbmFibGVkUHJvZmlsZXIoKSkKKyAgICBpZiAoTGVn
YWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gc3RhY2tGcmFtZS52bS0+ZW5hYmxlZFByb2ZpbGVyKCkp
CiAgICAgICAgIHByb2ZpbGVyLT5kaWRFeGVjdXRlKHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFj
a0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpKTsKIH0KIApAQCAtMjM5Myw3ICsyMzkzLDcgQEAgREVG
SU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgICAgICByZXR1cm5WYWx1
ZSA9IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGNhbGxGcmFtZSk7CiAgICAgfQogCi0g
ICAgaWYgKHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKQorICAgIGlmIChzdGFja0Zy
YW1lLnZtLT5leGNlcHRpb24pCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbkZyb21PcENh
bGw8RW5jb2RlZEpTVmFsdWU+KHN0YWNrRnJhbWUsIGNhbGxGcmFtZSwgU1RVQl9SRVRVUk5fQURE
UkVTUyk7CiAKICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CkBAIC0yNDQ2LDcgKzI0NDYsNyBAQCBE
RUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgICAgICAgICAvLyBB
dHRlbXB0IHRvIG9wdGltaXplLgogICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9
IGppdEFycmF5TW9kZUZvclN0cnVjdHVyZShvYmplY3QtPnN0cnVjdHVyZSgpKTsKICAgICAgICAg
ICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFycmF5TW9kZSkgewotICAgICAgICAgICAg
ICAgIEpJVDo6Y29tcGlsZUdldEJ5VmFsKCZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZy
YW1lLT5jb2RlQmxvY2soKSwgJmJ5VmFsSW5mbywgU1RVQl9SRVRVUk5fQUREUkVTUywgYXJyYXlN
b2RlKTsKKyAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeVZhbCgmY2FsbEZyYW1lLT52
bSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBTVFVCX1JFVFVSTl9BRERS
RVNTLCBhcnJheU1vZGUpOwogICAgICAgICAgICAgICAgIGRpZE9wdGltaXplID0gdHJ1ZTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjUzOSw3ICsyNTM5LDcgQEAgc3RhdGljIHZvaWQg
cHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbQogICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2Jq
ZWN0KCkpIHsKICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFs
dWUpOwogICAgICAgICAgICAgaWYgKG9iamVjdC0+Y2FuU2V0SW5kZXhRdWlja2x5KGkpKQotICAg
ICAgICAgICAgICAgIG9iamVjdC0+c2V0SW5kZXhRdWlja2x5KGNhbGxGcmFtZS0+Z2xvYmFsRGF0
YSgpLCBpLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHko
Y2FsbEZyYW1lLT52bSgpLCBpLCB2YWx1ZSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KG9iamVjdCwgY2FsbEZyYW1l
LCBpLCB2YWx1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwogICAg
ICAgICB9IGVsc2UKQEAgLTI1NDksNyArMjU0OSw3IEBAIHN0YXRpYyB2b2lkIHB1dEJ5VmFsKENh
bGxGcmFtZSogY2FsbEZyYW0KICAgICAgICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIGpzQ2Fz
dDxOYW1lSW5zdGFuY2UqPihzdWJzY3JpcHQuYXNDZWxsKCkpLT5wcml2YXRlTmFtZSgpLCB2YWx1
ZSwgc2xvdCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxs
RnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUpKTsK
LSAgICAgICAgaWYgKCFjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb24pIHsgLy8gRG9u
J3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCisgICAg
ICAgIGlmICghY2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlvbikgeyAvLyBEb24ndCBwdXQgdG8gYW4g
b2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4KICAgICAgICAgICAgIFB1dFBy
b3BlcnR5U2xvdCBzbG90KGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsK
ICAgICAgICAgICAgIGJhc2VWYWx1ZS5wdXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUsIHNs
b3QpOwogICAgICAgICB9CkBAIC0yNTgwLDcgKzI1ODAsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElP
Tih2b2lkLCBvcF9wdXRfYnlfdmFsCiAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXpl
LgogICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0
cnVjdHVyZShvYmplY3QtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgIGlmIChhcnJheU1vZGUg
IT0gYnlWYWxJbmZvLmFycmF5TW9kZSkgewotICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1
dEJ5VmFsKCZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwg
JmJ5VmFsSW5mbywgU1RVQl9SRVRVUk5fQUREUkVTUywgYXJyYXlNb2RlKTsKKyAgICAgICAgICAg
ICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbCgmY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBhcnJheU1vZGUpOwog
ICAgICAgICAgICAgICAgIGRpZE9wdGltaXplID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpAQCAtMjcxNSw3ICsyNzE1LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpT
VmFsdWUsIG9wXwogICAgIFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCk7CiAgICAgQVNTRVJUKHN0
YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwogICAgIGlm
ICghb2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3Qoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJh
bWUuYXJnc1sxXS5pZGVudGlmaWVyKCksIHNsb3QpKSB7Ci0gICAgICAgIHN0YWNrRnJhbWUuZ2xv
YmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlRXJyb3JGb3JJbnZhbGlkR2xvYmFsQXNzaWdubWVu
dChzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKS5z
dHJpbmcoKSk7CisgICAgICAgIHN0YWNrRnJhbWUudm0tPmV4Y2VwdGlvbiA9IGNyZWF0ZUVycm9y
Rm9ySW52YWxpZEdsb2JhbEFzc2lnbm1lbnQoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJh
bWUuYXJnc1sxXS5pZGVudGlmaWVyKCkuc3RyaW5nKCkpOwogICAgICAgICBWTV9USFJPV19FWENF
UFRJT04oKTsKICAgICB9CiAKQEAgLTMwOTIsMTEgKzMwOTIsMTEgQEAgREVGSU5FX1NUVUJfRlVO
Q1RJT04oSlNPYmplY3QqLCBvcF9uZXdfcgogCiAgICAgUmVnRXhwKiByZWdFeHAgPSBzdGFja0Zy
YW1lLmFyZ3NbMF0ucmVnRXhwKCk7CiAgICAgaWYgKCFyZWdFeHAtPmlzVmFsaWQoKSkgewotICAg
ICAgICBzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVN5bnRheEVycm9y
KGNhbGxGcmFtZSwgIkludmFsaWQgZmxhZ3Mgc3VwcGxpZWQgdG8gUmVnRXhwIGNvbnN0cnVjdG9y
LiIpOworICAgICAgICBzdGFja0ZyYW1lLnZtLT5leGNlcHRpb24gPSBjcmVhdGVTeW50YXhFcnJv
cihjYWxsRnJhbWUsICJJbnZhbGlkIGZsYWdzIHN1cHBsaWVkIHRvIFJlZ0V4cCBjb25zdHJ1Y3Rv
ci4iKTsKICAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7CiAgICAgfQogCi0gICAgcmV0dXJu
IFJlZ0V4cE9iamVjdDo6Y3JlYXRlKCpzdGFja0ZyYW1lLmdsb2JhbERhdGEsIHN0YWNrRnJhbWUu
Y2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOworICAgIHJl
dHVybiBSZWdFeHBPYmplY3Q6OmNyZWF0ZSgqc3RhY2tGcmFtZS52bSwgc3RhY2tGcmFtZS5jYWxs
RnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCk7CiB9CiAKIERFRklO
RV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9iaXRvcikKQEAgLTMxMzEsNyArMzEz
MSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBldmFsKGNhbGxGcmFtZSk7Ci0gICAgaWYgKHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0
aW9uKQorICAgIGlmIChzdGFja0ZyYW1lLnZtLT5leGNlcHRpb24pCiAgICAgICAgIHJldHVybiB0
aHJvd0V4Y2VwdGlvbkZyb21PcENhbGw8RW5jb2RlZEpTVmFsdWU+KHN0YWNrRnJhbWUsIGNhbGxG
cmFtZSwgU1RVQl9SRVRVUk5fQUREUkVTUyk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CkBAIC0zMTQwLDcgKzMxNDAsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNv
ZGVkSlNWYWx1ZSwgb3BfCiBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkKiwgb3BfdGhyb3cpCiB7
CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotICAgIEV4Y2VwdGlvbkhh
bmRsZXIgaGFuZGxlciA9IGppdFRocm93KHN0YWNrRnJhbWUuZ2xvYmFsRGF0YSwgc3RhY2tGcmFt
ZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCksIFNUVUJfUkVUVVJOX0FE
RFJFU1MpOworICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGppdFRocm93KHN0YWNrRnJh
bWUudm0sIHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgp
LCBTVFVCX1JFVFVSTl9BRERSRVNTKTsKICAgICBTVFVCX1NFVF9SRVRVUk5fQUREUkVTUyhoYW5k
bGVyLmNhdGNoUm91dGluZSk7CiAgICAgcmV0dXJuIGhhbmRsZXIuY2FsbEZyYW1lOwogfQpAQCAt
MzI2Niw3ICszMjY2LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9w
XwogICAgIEpTVmFsdWUgYmFzZVZhbCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7CiAK
ICAgICBpZiAoIWJhc2VWYWwuaXNPYmplY3QoKSkgewotICAgICAgICBzdGFja0ZyYW1lLmdsb2Jh
bERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKHN0YWNrRnJhbWUuY2Fs
bEZyYW1lLCAiaW4iLCBiYXNlVmFsKTsKKyAgICAgICAgc3RhY2tGcmFtZS52bS0+ZXhjZXB0aW9u
ID0gY3JlYXRlSW52YWxpZFBhcmFtRXJyb3Ioc3RhY2tGcmFtZS5jYWxsRnJhbWUsICJpbiIsIGJh
c2VWYWwpOwogICAgICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKICAgICB9CiAKQEAgLTMzODgs
NyArMzM4OCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAg
ICB9CiAKICAgICBpZiAoIXJlc3VsdCAmJiBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmlj
dE1vZGUoKSkKLSAgICAgICAgc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVh
dGVUeXBlRXJyb3Ioc3RhY2tGcmFtZS5jYWxsRnJhbWUsICJVbmFibGUgdG8gZGVsZXRlIHByb3Bl
cnR5LiIpOworICAgICAgICBzdGFja0ZyYW1lLnZtLT5leGNlcHRpb24gPSBjcmVhdGVUeXBlRXJy
b3Ioc3RhY2tGcmFtZS5jYWxsRnJhbWUsICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOwog
CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbihyZXN1bHQpKTsKQEAgLTM0MTIsOSArMzQxMiw5IEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9nZXR0ZXIKICAgICBBU1NFUlQoZ2V0dGVyLmlzT2Jq
ZWN0KCkgfHwgc2V0dGVyLmlzT2JqZWN0KCkpOwogCiAgICAgaWYgKCFnZXR0ZXIuaXNVbmRlZmlu
ZWQoKSkKLSAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihjYWxsRnJhbWUtPmdsb2JhbERhdGEo
KSwgYXNPYmplY3QoZ2V0dGVyKSk7CisgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoY2FsbEZy
YW1lLT52bSgpLCBhc09iamVjdChnZXR0ZXIpKTsKICAgICBpZiAoIXNldHRlci5pc1VuZGVmaW5l
ZCgpKQotICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0dGVyKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
LCBhc09iamVjdChzZXR0ZXIpKTsKKyAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihjYWxsRnJh
bWUtPnZtKCksIGFzT2JqZWN0KHNldHRlcikpOwogICAgIGJhc2VPYmotPnB1dERpcmVjdEFjY2Vz
c29yKGNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKSwgYWNjZXNzb3Is
IEFjY2Vzc29yKTsKIH0KIApAQCAtMzQyNSw5ICszNDI1LDkgQEAgREVGSU5FX1NUVUJfRlVOQ1RJ
T04odm9pZCwgb3BfdGhyb3dfc3RhdAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tG
cmFtZS5jYWxsRnJhbWU7CiAgICAgU3RyaW5nIG1lc3NhZ2UgPSBzdGFja0ZyYW1lLmFyZ3NbMF0u
anNWYWx1ZSgpLnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSk7CiAgICAgaWYg
KHN0YWNrRnJhbWUuYXJnc1sxXS5hc0ludDMyKQotICAgICAgICBzdGFja0ZyYW1lLmdsb2JhbERh
dGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVJlZmVyZW5jZUVycm9yKGNhbGxGcmFtZSwgbWVzc2FnZSk7
CisgICAgICAgIHN0YWNrRnJhbWUudm0tPmV4Y2VwdGlvbiA9IGNyZWF0ZVJlZmVyZW5jZUVycm9y
KGNhbGxGcmFtZSwgbWVzc2FnZSk7CiAgICAgZWxzZQotICAgICAgICBzdGFja0ZyYW1lLmdsb2Jh
bERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjYWxsRnJhbWUsIG1lc3NhZ2UpOwor
ICAgICAgICBzdGFja0ZyYW1lLnZtLT5leGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY2FsbEZy
YW1lLCBtZXNzYWdlKTsKICAgICBWTV9USFJPV19FWENFUFRJT05fQVRfRU5EKCk7CiB9CiAKQEAg
LTM0NDIsMTQgKzM0NDIsMTQgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfZGVidWcp
CiAgICAgaW50IGxhc3RMaW5lID0gc3RhY2tGcmFtZS5hcmdzWzJdLmludDMyKCk7CiAgICAgaW50
IGNvbHVtbiA9IHN0YWNrRnJhbWUuYXJnc1szXS5pbnQzMigpOwogCi0gICAgc3RhY2tGcmFtZS5n
bG9iYWxEYXRhLT5pbnRlcnByZXRlci0+ZGVidWcoY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxEZWJ1
Z0hvb2tJRD4oZGVidWdIb29rSUQpLCBmaXJzdExpbmUsIGxhc3RMaW5lLCBjb2x1bW4pOworICAg
IHN0YWNrRnJhbWUudm0tPmludGVycHJldGVyLT5kZWJ1ZyhjYWxsRnJhbWUsIHN0YXRpY19jYXN0
PERlYnVnSG9va0lEPihkZWJ1Z0hvb2tJRCksIGZpcnN0TGluZSwgbGFzdExpbmUsIGNvbHVtbik7
CiB9CiAKIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCB2bV90aHJvdykKIHsKICAgICBTVFVC
X0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gc3RhY2tGcmFtZS5nbG9iYWxEYXRhOwotICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxl
ciA9IGppdFRocm93KGdsb2JhbERhdGEsIHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBnbG9iYWxEYXRh
LT5leGNlcHRpb24sIGdsb2JhbERhdGEtPmV4Y2VwdGlvbkxvY2F0aW9uKTsKKyAgICBWTSogdm0g
PSBzdGFja0ZyYW1lLnZtOworICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGppdFRocm93
KHZtLCBzdGFja0ZyYW1lLmNhbGxGcmFtZSwgdm0tPmV4Y2VwdGlvbiwgdm0tPmV4Y2VwdGlvbkxv
Y2F0aW9uKTsKICAgICBTVFVCX1NFVF9SRVRVUk5fQUREUkVTUyhoYW5kbGVyLmNhdGNoUm91dGlu
ZSk7CiAgICAgcmV0dXJuIGhhbmRsZXIuY2FsbEZyYW1lOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIGNs
YXNzIENvZGVCbG9jazsKIGNsYXNzIEV4ZWN1dGFibGVQb29sOwogY2xhc3MgRnVuY3Rpb25FeGVj
dXRhYmxlOwogY2xhc3MgSWRlbnRpZmllcjsKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZN
OwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBKU09iamVjdDsKIGNsYXNzIEpTUHJvcGVy
dHlOYW1lSXRlcmF0b3I7CkBAIC05OCw3ICs5OCw3IEBAIHN0cnVjdCBKSVRTdGFja0ZyYW1lIHsK
ICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZTsKICAgICB2b2lkKiB1bnVzZWQxOwogICAgIHZvaWQq
IHVudXNlZDI7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhOworICAgIFZNKiB2bTsKIAog
ICAgIHZvaWQqIHNhdmVkUkJYOwogICAgIHZvaWQqIHNhdmVkUjE1OwpAQCAtMTM0LDcgKzEzNCw3
IEBAIHN0cnVjdCBKSVRTdGFja0ZyYW1lIHsKIAogICAgIC8vIFBhc3NlZCBvbiB0aGUgc3RhY2sK
ICAgICB2b2lkKiB1bnVzZWQyOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YTsKKyAgICBW
TSogdm07CiAKICAgICAvLyBXaGVuIEpJVCBjb2RlIG1ha2VzIGEgY2FsbCwgaXQgcHVzaGVzIGl0
cyByZXR1cm4gYWRkcmVzcyBqdXN0IGJlbG93IHRoZSByZXN0IG9mIHRoZSBzdGFjay4KICAgICBS
ZXR1cm5BZGRyZXNzUHRyKiByZXR1cm5BZGRyZXNzU2xvdCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8UmV0dXJuQWRkcmVzc1B0cio+KHRoaXMpIC0gMTsgfQpAQCAtMTYyLDcgKzE2Miw3IEBA
IHN0cnVjdCBKSVRTdGFja0ZyYW1lIHsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZTsKICAgICB2
b2lkKiB1bnVzZWQxOwogICAgIHZvaWQqIHVudXNlZDI7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhOworICAgIFZNKiB2bTsKICAgICAgICAgCiAgICAgLy8gV2hlbiBKSVQgY29kZSBtYWtl
cyBhIGNhbGwsIGl0IHB1c2hlcyBpdHMgcmV0dXJuIGFkZHJlc3MganVzdCBiZWxvdyB0aGUgcmVz
dCBvZiB0aGUgc3RhY2suCiAgICAgUmV0dXJuQWRkcmVzc1B0ciogcmV0dXJuQWRkcmVzc1Nsb3Qo
KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFJldHVybkFkZHJlc3NQdHIqPih0aGlzKSAtIDE7
IH0KQEAgLTE5Myw3ICsxOTMsNyBAQCBzdHJ1Y3QgSklUU3RhY2tGcmFtZSB7CiAKICAgICAvLyBU
aGVzZSBhcmd1bWVudHMgcGFzc2VkIG9uIHRoZSBzdGFjay4KICAgICB2b2lkKiB1bnVzZWQxOwot
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YTsKKyAgICBWTSogdm07CiAgICAgICAgIAogICAg
IFJldHVybkFkZHJlc3NQdHIqIHJldHVybkFkZHJlc3NTbG90KCkgeyByZXR1cm4gJnRodW5rUmV0
dXJuQWRkcmVzczsgfQogfTsKQEAgLTIyMyw3ICsyMjMsNyBAQCBzdHJ1Y3QgSklUU3RhY2tGcmFt
ZSB7CiAKICAgICAvLyBUaGVzZSBhcmd1bWVudHMgcGFzc2VkIG9uIHRoZSBzdGFjay4KICAgICB2
b2lkKiB1bnVzZWQyOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YTsKKyAgICBWTSogdm07
CiAKICAgICAvLyBXaGVuIEpJVCBjb2RlIG1ha2VzIGEgY2FsbCwgaXQgcHVzaGVzIGl0cyByZXR1
cm4gYWRkcmVzcyBqdXN0IGJlbG93IHRoZSByZXN0IG9mIHRoZSBzdGFjay4KICAgICBSZXR1cm5B
ZGRyZXNzUHRyKiByZXR1cm5BZGRyZXNzU2xvdCgpIHsgcmV0dXJuICZ0aHVua1JldHVybkFkZHJl
c3M7IH0KQEAgLTI1Nyw3ICsyNTcsNyBAQCBzdHJ1Y3QgSklUU3RhY2tGcmFtZSB7CiAKICAgICAv
LyBUaGVzZSBhcmd1bWVudHMgcGFzc2VkIG9uIHRoZSBzdGFjay4KICAgICB2b2lkKiB1bnVzZWQy
OwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YTsKKyAgICBWTSogdm07CiAKICAgICBSZXR1
cm5BZGRyZXNzUHRyKiByZXR1cm5BZGRyZXNzU2xvdCgpIHsgcmV0dXJuICZ0aHVua1JldHVybkFk
ZHJlc3M7IH0KIH07CkBAIC0yNzgsNyArMjc4LDcgQEAgc3RydWN0IEpJVFN0YWNrRnJhbWUgewog
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lOwogICAgIEpTVmFsdWUqIGV4Y2VwdGlvbjsKICAgICB2
b2lkKiB1bnVzZWQxOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YTsKKyAgICBWTSogdm07
CiAKICAgICBSZXR1cm5BZGRyZXNzUHRyKiByZXR1cm5BZGRyZXNzU2xvdCgpIHsgcmV0dXJuICZ0
aHVua1JldHVybkFkZHJlc3M7IH0KIH07CkBAIC0zMDcsNyArMzA3LDcgQEAgc3RydWN0IEpJVFN0
YWNrRnJhbWUgewogCiBleHRlcm4gIkMiIHZvaWQgY3RpVk1UaHJvd1RyYW1wb2xpbmUoKTsKIGV4
dGVybiAiQyIgdm9pZCBjdGlPcFRocm93Tm90Q2F1Z2h0KCk7Ci1leHRlcm4gIkMiIEVuY29kZWRK
U1ZhbHVlIGN0aVRyYW1wb2xpbmUodm9pZCogY29kZSwgSlNTdGFjayosIENhbGxGcmFtZSosIHZv
aWQqIC8qdW51c2VkMSovLCB2b2lkKiAvKnVudXNlZDIqLywgSlNHbG9iYWxEYXRhKik7CitleHRl
cm4gIkMiIEVuY29kZWRKU1ZhbHVlIGN0aVRyYW1wb2xpbmUodm9pZCogY29kZSwgSlNTdGFjayos
IENhbGxGcmFtZSosIHZvaWQqIC8qdW51c2VkMSovLCB2b2lkKiAvKnVudXNlZDIqLywgVk0qKTsK
ICNpZiBFTkFCTEUoREZHX0pJVCkKIGV4dGVybiAiQyIgdm9pZCBjdGlUcmFtcG9saW5lRW5kKCk7
CiAKQEAgLTMxOCw3ICszMTgsNyBAQCBpbmxpbmUgYm9vbCByZXR1cm5BZGRyZXNzSXNJbkN0aVRy
YW1wb2xpCiB9CiAjZW5kaWYKIAotdm9pZCBwZXJmb3JtUGxhdGZvcm1TcGVjaWZpY0pJVEFzc2Vy
dGlvbnMoSlNHbG9iYWxEYXRhKik7Cit2b2lkIHBlcmZvcm1QbGF0Zm9ybVNwZWNpZmljSklUQXNz
ZXJ0aW9ucyhWTSopOwogCiBleHRlcm4gIkMiIHsKIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0
aV9vcF9hZGQoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CkBAIC00NDcsNyAr
NDQ3LDcgQEAgdm9pZCogSklUX1NUVUIgY3RpX3ZtX3Rocm93KFNUVUJfQVJHU19ERQogI2VsaWYg
RU5BQkxFKExMSU5UX0NfTE9PUCkKIAogc3RydWN0IEpJVFN0YWNrRnJhbWUgewotICAgIEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YTsKKyAgICBWTSogdm07CiB9OwogCiAjZW5kaWYgLy8gRU5BQkxF
KExMSU5UX0NfTE9PUCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5j
cHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1
bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiRXhl
Y3V0YWJsZS5oIgogI2luY2x1ZGUgIkpJVC5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgor
I2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogCiBuYW1lc3BhY2UgSlND
IHsKQEAgLTQ0LDU2ICs0NCw1NiBAQCBKSVRUaHVua3M6On5KSVRUaHVua3MoKQogewogfQogCi1N
YWNyb0Fzc2VtYmxlckNvZGVQdHIgSklUVGh1bmtzOjpjdGlOYXRpdmVDYWxsKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBKSVRUaHVua3M6OmN0aU5hdGl2
ZUNhbGwoVk0qIHZtKQogewogI2lmIEVOQUJMRShMTElOVCkKLSAgICBpZiAoIWdsb2JhbERhdGEt
PmNhblVzZUpJVCgpKQorICAgIGlmICghdm0tPmNhblVzZUpJVCgpKQogICAgICAgICByZXR1cm4g
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVMTEludENvZGVQdHIobGxpbnRfbmF0aXZlX2Nh
bGxfdHJhbXBvbGluZSk7CiAjZW5kaWYKLSAgICByZXR1cm4gY3RpU3R1YihnbG9iYWxEYXRhLCBu
YXRpdmVDYWxsR2VuZXJhdG9yKS5jb2RlKCk7CisgICAgcmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2
ZUNhbGxHZW5lcmF0b3IpLmNvZGUoKTsKIH0KLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBKSVRUaHVu
a3M6OmN0aU5hdGl2ZUNvbnN0cnVjdChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgSklUVGh1bmtzOjpjdGlOYXRpdmVDb25zdHJ1Y3QoVk0qIHZtKQogewog
I2lmIEVOQUJMRShMTElOVCkKLSAgICBpZiAoIWdsb2JhbERhdGEtPmNhblVzZUpJVCgpKQorICAg
IGlmICghdm0tPmNhblVzZUpJVCgpKQogICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyOjpjcmVhdGVMTEludENvZGVQdHIobGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5l
KTsKICNlbmRpZgotICAgIHJldHVybiBjdGlTdHViKGdsb2JhbERhdGEsIG5hdGl2ZUNvbnN0cnVj
dEdlbmVyYXRvcikuY29kZSgpOworICAgIHJldHVybiBjdGlTdHViKHZtLCBuYXRpdmVDb25zdHJ1
Y3RHZW5lcmF0b3IpLmNvZGUoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIEpJVFRodW5r
czo6Y3RpU3R1YihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRodW5rR2VuZXJhdG9yIGdlbmVy
YXRvcikKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBKSVRUaHVua3M6OmN0aVN0dWIoVk0qIHZtLCBU
aHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7CiAgICAgQ1RJU3R1Yk1hcDo6QWRkUmVzdWx0IGVu
dHJ5ID0gbV9jdGlTdHViTWFwLmFkZChnZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZigp
KTsKICAgICBpZiAoZW50cnkuaXNOZXdFbnRyeSkKLSAgICAgICAgZW50cnkuaXRlcmF0b3ItPnZh
bHVlID0gZ2VuZXJhdG9yKGdsb2JhbERhdGEpOworICAgICAgICBlbnRyeS5pdGVyYXRvci0+dmFs
dWUgPSBnZW5lcmF0b3Iodm0pOwogICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+dmFsdWU7CiB9
CiAKLU5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1YihKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlv
biBjb25zdHJ1Y3RvcikKK05hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW9u
U3R1YihWTSogdm0sIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25z
dHJ1Y3RvcikKIHsKICAgICBpZiAoTmF0aXZlRXhlY3V0YWJsZSogbmF0aXZlRXhlY3V0YWJsZSA9
IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcC0+Z2V0KGZ1bmN0aW9uKSkKICAgICAgICAgcmV0dXJuIG5h
dGl2ZUV4ZWN1dGFibGU7CiAKLSAgICBOYXRpdmVFeGVjdXRhYmxlKiBuYXRpdmVFeGVjdXRhYmxl
ID0gTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBKSVQ6OmNvbXBpbGVDVElO
YXRpdmVDYWxsKGdsb2JhbERhdGEsIGZ1bmN0aW9uKSwgZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGN0aU5hdGl2ZUNvbnN0cnVjdChnbG9i
YWxEYXRhKSksIGNvbnN0cnVjdG9yLCBOb0ludHJpbnNpYyk7CisgICAgTmF0aXZlRXhlY3V0YWJs
ZSogbmF0aXZlRXhlY3V0YWJsZSA9IE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqdm0sIEpJVDo6
Y29tcGlsZUNUSU5hdGl2ZUNhbGwodm0sIGZ1bmN0aW9uKSwgZnVuY3Rpb24sIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGN0aU5hdGl2ZUNvbnN0cnVjdCh2
bSkpLCBjb25zdHJ1Y3RvciwgTm9JbnRyaW5zaWMpOwogICAgIHdlYWtBZGQoKm1faG9zdEZ1bmN0
aW9uU3R1Yk1hcCwgZnVuY3Rpb24sIFBhc3NXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+KG5hdGl2ZUV4
ZWN1dGFibGUpKTsKICAgICByZXR1cm4gbmF0aXZlRXhlY3V0YWJsZTsKIH0KIAotTmF0aXZlRXhl
Y3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciwg
SW50cmluc2ljIGludHJpbnNpYykKK05hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1
bmN0aW9uU3R1YihWTSogdm0sIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBUaHVua0dlbmVyYXRv
ciBnZW5lcmF0b3IsIEludHJpbnNpYyBpbnRyaW5zaWMpCiB7CiAgICAgaWYgKE5hdGl2ZUV4ZWN1
dGFibGUqIG5hdGl2ZUV4ZWN1dGFibGUgPSBtX2hvc3RGdW5jdGlvblN0dWJNYXAtPmdldChmdW5j
dGlvbikpCiAgICAgICAgIHJldHVybiBuYXRpdmVFeGVjdXRhYmxlOwogCiAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGNvZGU7CiAgICAgaWYgKGdlbmVyYXRvcikgewotICAgICAgICBpZiAoZ2xv
YmFsRGF0YS0+Y2FuVXNlSklUKCkpCi0gICAgICAgICAgICBjb2RlID0gZ2VuZXJhdG9yKGdsb2Jh
bERhdGEpOworICAgICAgICBpZiAodm0tPmNhblVzZUpJVCgpKQorICAgICAgICAgICAgY29kZSA9
IGdlbmVyYXRvcih2bSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvZGUgPSBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYoKTsKICAgICB9IGVsc2UKLSAgICAgICAgY29kZSA9IEpJVDo6Y29tcGls
ZUNUSU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuY3Rpb24pOworICAgICAgICBjb2RlID0gSklU
Ojpjb21waWxlQ1RJTmF0aXZlQ2FsbCh2bSwgZnVuY3Rpb24pOwogCi0gICAgTmF0aXZlRXhlY3V0
YWJsZSogbmF0aXZlRXhlY3V0YWJsZSA9IE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFs
RGF0YSwgY29kZSwgZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1h
bmFnZWRDb2RlUmVmKGN0aU5hdGl2ZUNvbnN0cnVjdChnbG9iYWxEYXRhKSksIGNhbGxIb3N0RnVu
Y3Rpb25Bc0NvbnN0cnVjdG9yLCBpbnRyaW5zaWMpOworICAgIE5hdGl2ZUV4ZWN1dGFibGUqIG5h
dGl2ZUV4ZWN1dGFibGUgPSBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKnZtLCBjb2RlLCBmdW5j
dGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3Rp
TmF0aXZlQ29uc3RydWN0KHZtKSksIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBpbnRy
aW5zaWMpOwogICAgIHdlYWtBZGQoKm1faG9zdEZ1bmN0aW9uU3R1Yk1hcCwgZnVuY3Rpb24sIFBh
c3NXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+KG5hdGl2ZUV4ZWN1dGFibGUpKTsKICAgICByZXR1cm4g
bmF0aXZlRXhlY3V0YWJsZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
VGh1bmtzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVu
a3MuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRU
aHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiBjbGFzcyBOYXRpdmVFeGVjdXRh
YmxlOwogCiBjbGFzcyBKSVRUaHVua3MgewpAQCAtNTEsMTMgKzUxLDEzIEBAIHB1YmxpYzoKICAg
ICBKSVRUaHVua3MoKTsKICAgICB+SklUVGh1bmtzKCk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgY3RpTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgY3RpTmF0aXZlQ29uc3RydWN0KEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBjdGlOYXRpdmVDYWxsKFZNKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGN0aU5hdGl2ZUNvbnN0cnVjdChWTSopOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGN0
aVN0dWIoSlNHbG9iYWxEYXRhKiwgVGh1bmtHZW5lcmF0b3IpOworICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBjdGlTdHViKFZNKiwgVGh1bmtHZW5lcmF0b3IpOwogCi0gICAgTmF0aXZlRXhlY3V0
YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihKU0dsb2JhbERhdGEqLCBOYXRpdmVGdW5jdGlvbiwgTmF0
aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpOwotICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5j
dGlvblN0dWIoSlNHbG9iYWxEYXRhKiwgTmF0aXZlRnVuY3Rpb24sIFRodW5rR2VuZXJhdG9yLCBJ
bnRyaW5zaWMpOworICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5jdGlvblN0dWIoVk0qLCBO
YXRpdmVGdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpOworICAgIE5hdGl2ZUV4
ZWN1dGFibGUqIGhvc3RGdW5jdGlvblN0dWIoVk0qLCBOYXRpdmVGdW5jdGlvbiwgVGh1bmtHZW5l
cmF0b3IsIEludHJpbnNpYyk7CiAKICAgICB2b2lkIGNsZWFySG9zdEZ1bmN0aW9uU3R1YnMoKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXcml0ZUJhcnJpZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFycmllci5oCShy
ZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFy
cmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiBuYW1lc3BhY2UgSlNDIHsK
IAogY2xhc3MgSlNDZWxsOwotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiAKIC8vIE5l
ZWRzIHRvIGJlIGV2ZW4gdG8gYXBwZWFzZSBzb21lIG9mIHRoZSBiYWNrZW5kcy4KICNkZWZpbmUg
SklUV3JpdGVCYXJyaWVyRmxhZyAoKHZvaWQqKTIpCkBAIC03Nyw3ICs3Nyw3IEBAIHByb3RlY3Rl
ZDoKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiwgQ29kZUxvY2F0
aW9uRGF0YUxhYmVsUHRyIGxvY2F0aW9uLCBKU0NlbGwqIG93bmVyLCBKU0NlbGwqIHZhbHVlKQor
ICAgIHZvaWQgc2V0KFZNJiwgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGxvY2F0aW9uLCBKU0Nl
bGwqIG93bmVyLCBKU0NlbGwqIHZhbHVlKQogICAgIHsKICAgICAgICAgSGVhcDo6d3JpdGVCYXJy
aWVyKG93bmVyLCB2YWx1ZSk7CiAgICAgICAgIG1fbG9jYXRpb24gPSBsb2NhdGlvbjsKQEAgLTEx
NiwxNSArMTE2LDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBzZXQoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgbG9jYXRpb24s
IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQorICAgIHZvaWQgc2V0KFZNJiB2bSwgQ29kZUxvY2F0
aW9uRGF0YUxhYmVsUHRyIGxvY2F0aW9uLCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkKICAgICB7
CiAgICAgICAgIHZhbGlkYXRlQ2VsbChvd25lcik7CiAgICAgICAgIHZhbGlkYXRlQ2VsbCh2YWx1
ZSk7Ci0gICAgICAgIEpJVFdyaXRlQmFycmllckJhc2U6OnNldChnbG9iYWxEYXRhLCBsb2NhdGlv
biwgb3duZXIsIHZhbHVlKTsKKyAgICAgICAgSklUV3JpdGVCYXJyaWVyQmFzZTo6c2V0KHZtLCBs
b2NhdGlvbiwgb3duZXIsIHZhbHVlKTsKICAgICB9Ci0gICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkKKyAgICB2b2lkIHNldChWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQogICAgIHsKLSAgICAgICAgc2V0KGdsb2JhbERh
dGEsIGxvY2F0aW9uKCksIG93bmVyLCB2YWx1ZSk7CisgICAgICAgIHNldCh2bSwgbG9jYXRpb24o
KSwgb3duZXIsIHZhbHVlKTsKICAgICB9CiAgICAgVCogZ2V0KCkgY29uc3QKICAgICB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAko
cmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXpl
ZFRodW5rSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEwICs1NSwxMCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGVtaXRMb2FkSlNDZWxsKHNyYywg
ZHN0KSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgbG9hZEpTU3RyaW5nQXJn
dW1lbnQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBpbnQgYXJndW1lbnQsIFJlZ2lzdGVySUQg
ZHN0KQorICAgICAgICB2b2lkIGxvYWRKU1N0cmluZ0FyZ3VtZW50KFZNJiB2bSwgaW50IGFyZ3Vt
ZW50LCBSZWdpc3RlcklEIGRzdCkKICAgICAgICAgewogICAgICAgICAgICAgbG9hZENlbGxBcmd1
bWVudChhcmd1bWVudCwgZHN0KTsKLSAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGJyYW5j
aFB0cihOb3RFcXVhbCwgQWRkcmVzcyhkc3QsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tUHRyKGdsb2JhbERhdGEuc3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAg
ICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKGRzdCwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIodm0uc3RyaW5nU3RydWN0
dXJlLmdldCgpKSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2b2lkIGxvYWRJbnQz
MkFyZ3VtZW50KGludCBhcmd1bWVudCwgUmVnaXN0ZXJJRCBkc3QsIEp1bXAmIGZhaWxUYXJnZXQp
CkBAIC0xMzAsOSArMTMwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXQoKTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZpbmFs
aXplKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZhbGxi
YWNrLCBjb25zdCBjaGFyKiB0aHVua0tpbmQpCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBmaW5hbGl6ZShWTSYgdm0sIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmYWxsYmFjaywgY29uc3Qg
Y2hhciogdGh1bmtLaW5kKQogICAgICAgICB7Ci0gICAgICAgICAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKGdsb2JhbERhdGEsIHRoaXMsIEdMT0JBTF9USFVOS19JRCk7CisgICAgICAgICAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKHZtLCB0aGlzLCBHTE9CQUxfVEhVTktfSUQpOwogICAgICAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2ZhaWx1cmVzLCBDb2RlTG9jYXRpb25MYWJlbChmYWxs
YmFjaykpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FsbHMuc2l6
ZSgpOyBpKyspCiAgICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzW2ldLmZp
cnN0LCBtX2NhbGxzW2ldLnNlY29uZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvci5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEwICszMSwx
MCBAQAogI2lmIEVOQUJMRShKSVQpCiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgSlNHbG9iYWxE
YXRhOworY2xhc3MgVk07CiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY7CiAKLXR5cGVkZWYg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmICgqVGh1bmtHZW5lcmF0b3IpKEpTR2xvYmFsRGF0YSopOwor
dHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgKCpUaHVua0dlbmVyYXRvcikoVk0qKTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyAr
MzcsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIEpTSW50ZXJmYWNlSklUOjpDYWxs
IGdlbmVyYXRlU2xvd0Nhc2VGb3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU0ludGVyZmFj
ZUpJVCYgaml0KQorc3RhdGljIEpTSW50ZXJmYWNlSklUOjpDYWxsIGdlbmVyYXRlU2xvd0Nhc2VG
b3IoVk0qIHZtLCBKU0ludGVyZmFjZUpJVCYgaml0KQogewogICAgIGppdC5lbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgSlNJbnRlcmZhY2VKSVQ6OnJl
Z1QyKTsKICAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6U2Nv
cGVDaGFpbiwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOwpA
QCAtNDgsNyArNDgsNyBAQCBzdGF0aWMgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgZ2VuZXJhdGVTbG93
CiAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihKU0ludGVyZmFjZUpJVDo6cmVnVDMs
IEpTU3RhY2s6OlJldHVyblBDKTsKICAgICBqaXQuZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZyYW1l
SGVhZGVyKDAsIEpTU3RhY2s6OkNvZGVCbG9jayk7CiAKLSAgICBqaXQuc3RvcmVQdHIoSlNJbnRl
cmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCAmZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsK
KyAgICBqaXQuc3RvcmVQdHIoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0t
PnRvcENhbGxGcmFtZSk7CiAgICAgaml0LnJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwogICAg
IEpTSW50ZXJmYWNlSklUOjpDYWxsIGNhbGxOb3RKU0Z1bmN0aW9uID0gaml0LmNhbGwoKTsKICAg
ICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUs
IEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3Rlcik7CkBAIC01OCw3ICs1OCw3IEBAIHN0
YXRpYyBKU0ludGVyZmFjZUpJVDo6Q2FsbCBnZW5lcmF0ZVNsb3cKICAgICByZXR1cm4gY2FsbE5v
dEpTRnVuY3Rpb247CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Zvckdl
bmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEZ1bmN0aW9uUHRyIGxhenlMaW5rLCBG
dW5jdGlvblB0ciBub3RKU0Z1bmN0aW9uLCBjb25zdCBjaGFyKiBuYW1lKQorc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBsaW5rRm9yR2VuZXJhdG9yKFZNKiB2bSwgRnVuY3Rpb25QdHIgbGF6
eUxpbmssIEZ1bmN0aW9uUHRyIG5vdEpTRnVuY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUpCiB7CiAg
ICAgSlNJbnRlcmZhY2VKSVQgaml0OwogICAgIApAQCAtODAsMzggKzgwLDM4IEBAIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0ZvckdlbmUKICAgICBqaXQucHJlc2VydmVSZXR1cm5B
ZGRyZXNzQWZ0ZXJDYWxsKEpTSW50ZXJmYWNlSklUOjpyZWdUMyk7CiAgICAgaml0LmVtaXRQdXRU
b0NhbGxGcmFtZUhlYWRlcihKU0ludGVyZmFjZUpJVDo6cmVnVDMsIEpTU3RhY2s6OlJldHVyblBD
KTsKICAgICAKLSAgICBqaXQuc3RvcmVQdHIoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lz
dGVyLCAmZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsKKyAgICBqaXQuc3RvcmVQdHIoSlNJbnRl
cmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7CiAgICAgaml0
LnJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwogICAgIEpTSW50ZXJmYWNlSklUOjpDYWxsIGNh
bGxMYXp5TGluayA9IGppdC5jYWxsKCk7CiAgICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVm
b3JlUmV0dXJuKEpTSW50ZXJmYWNlSklUOjpyZWdUMyk7CiAgICAgaml0Lmp1bXAoSlNJbnRlcmZh
Y2VKSVQ6OnJlZ1QwKTsKICAgICAKICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwotICAgIEpTSW50
ZXJmYWNlSklUOjpDYWxsIGNhbGxOb3RKU0Z1bmN0aW9uID0gZ2VuZXJhdGVTbG93Q2FzZUZvcihn
bG9iYWxEYXRhLCBqaXQpOworICAgIEpTSW50ZXJmYWNlSklUOjpDYWxsIGNhbGxOb3RKU0Z1bmN0
aW9uID0gZ2VuZXJhdGVTbG93Q2FzZUZvcih2bSwgaml0KTsKICAgICAKLSAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHBh
dGNoQnVmZmVyLmxpbmsoY2FsbExhenlMaW5rLCBsYXp5TGluayk7CiAgICAgcGF0Y2hCdWZmZXIu
bGluayhjYWxsTm90SlNGdW5jdGlvbiwgbm90SlNGdW5jdGlvbik7CiAgICAgCiAgICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgibGluayAlcyB0cmFtcG9saW5lIiwgbmFtZSkp
OwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxHZW5lcmF0b3IoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsR2VuZXJhdG9y
KFZNKiB2bSkKIHsKLSAgICByZXR1cm4gbGlua0ZvckdlbmVyYXRvcihnbG9iYWxEYXRhLCBGdW5j
dGlvblB0cihjdGlfdm1fbGF6eUxpbmtDYWxsKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfTm90
SlNGdW5jdGlvbiksICJjYWxsIik7CisgICAgcmV0dXJuIGxpbmtGb3JHZW5lcmF0b3Iodm0sIEZ1
bmN0aW9uUHRyKGN0aV92bV9sYXp5TGlua0NhbGwpLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9O
b3RKU0Z1bmN0aW9uKSwgImNhbGwiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtD
b25zdHJ1Y3RHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBs
aW5rRm9yR2VuZXJhdG9yKGdsb2JhbERhdGEsIEZ1bmN0aW9uUHRyKGN0aV92bV9sYXp5TGlua0Nv
bnN0cnVjdCksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3RfTm90SlNDb25zdHJ1Y3QpLCAi
Y29uc3RydWN0Iik7CisgICAgcmV0dXJuIGxpbmtGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRy
KGN0aV92bV9sYXp5TGlua0NvbnN0cnVjdCksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3Rf
Tm90SlNDb25zdHJ1Y3QpLCAiY29uc3RydWN0Iik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBsaW5rQ2xvc3VyZUNhbGxHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRvcihWTSogdm0pCiB7Ci0g
ICAgcmV0dXJuIGxpbmtGb3JHZW5lcmF0b3IoZ2xvYmFsRGF0YSwgRnVuY3Rpb25QdHIoY3RpX3Zt
X2xhenlMaW5rQ2xvc3VyZUNhbGwpLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0
aW9uKSwgImNsb3N1cmUgY2FsbCIpOworICAgIHJldHVybiBsaW5rRm9yR2VuZXJhdG9yKHZtLCBG
dW5jdGlvblB0cihjdGlfdm1fbGF6eUxpbmtDbG9zdXJlQ2FsbCksIEZ1bmN0aW9uUHRyKGN0aV9v
cF9jYWxsX05vdEpTRnVuY3Rpb24pLCAiY2xvc3VyZSBjYWxsIik7CiB9CiAKLXN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbEZvckdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIEZ1bmN0aW9uUHRyIGNvbXBpbGUsIEZ1bmN0aW9uUHRyIG5vdEpTRnVuY3Rpb24sIGNv
bnN0IGNoYXIqIG5hbWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3N0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbEZvckdlbmVyYXRvcihWTSogdm0sIEZ1bmN0aW9uUHRy
IGNvbXBpbGUsIEZ1bmN0aW9uUHRyIG5vdEpTRnVuY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUsIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICAgICBKU0ludGVyZmFjZUpJVCBqaXQ7CiAg
ICAgCkBAIC0xMzEsNyArMTMxLDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0
dWFsRm9yRwogICAgIGppdC5sb2FkUHRyKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJm
YWNlSklUOjpyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLCBKU0ludGVy
ZmFjZUpJVDo6cmVnVDIpOwogICAgIEpTSW50ZXJmYWNlSklUOjpKdW1wIGhhc0NvZGVCbG9jazEg
PSBqaXQuYnJhbmNoMzIoSlNJbnRlcmZhY2VKSVQ6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgSlNJbnRl
cmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyLCBGdW5jdGlvbkV4ZWN1dGFi
bGU6Om9mZnNldE9mTnVtUGFyYW1ldGVyc0ZvcihraW5kKSksIEpTSW50ZXJmYWNlSklUOjpUcnVz
dGVkSW1tMzIoMCkpOwogICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoSlNJ
bnRlcmZhY2VKSVQ6OnJlZ1QzKTsKLSAgICBqaXQuc3RvcmVQdHIoSlNJbnRlcmZhY2VKSVQ6OmNh
bGxGcmFtZVJlZ2lzdGVyLCAmZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsKKyAgICBqaXQuc3Rv
cmVQdHIoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFt
ZSk7CiAgICAgaml0LnJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwogICAgIEpTSW50ZXJmYWNl
SklUOjpDYWxsIGNhbGxDb21waWxlID0gaml0LmNhbGwoKTsKICAgICBqaXQucmVzdG9yZVJldHVy
bkFkZHJlc3NCZWZvcmVSZXR1cm4oSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzKTsKQEAgLTE0MiwyNiAr
MTQyLDI2IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbEZvckcKICAgICBq
aXQuanVtcChKU0ludGVyZmFjZUpJVDo6cmVnVDApOwogICAgIAogICAgIHNsb3dDYXNlLmxpbmso
JmppdCk7Ci0gICAgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgY2FsbE5vdEpTRnVuY3Rpb24gPSBnZW5l
cmF0ZVNsb3dDYXNlRm9yKGdsb2JhbERhdGEsIGppdCk7CisgICAgSlNJbnRlcmZhY2VKSVQ6OkNh
bGwgY2FsbE5vdEpTRnVuY3Rpb24gPSBnZW5lcmF0ZVNsb3dDYXNlRm9yKHZtLCBqaXQpOwogICAg
IAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIEdMT0JBTF9U
SFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9U
SFVOS19JRCk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsQ29tcGlsZSwgY29tcGlsZSk7CiAg
ICAgcGF0Y2hCdWZmZXIubGluayhjYWxsTm90SlNGdW5jdGlvbiwgbm90SlNGdW5jdGlvbik7CiAg
ICAgCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgidmlydHVhbCAlcyB0
cmFtcG9saW5lIiwgbmFtZSkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENh
bGxHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHZpcnR1YWxDYWxsR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gdmlydHVhbEZv
ckdlbmVyYXRvcihnbG9iYWxEYXRhLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9qaXRDb21waWxl
KSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbiksICJjYWxsIiwgQ29kZUZv
ckNhbGwpOworICAgIHJldHVybiB2aXJ0dWFsRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihj
dGlfb3BfY2FsbF9qaXRDb21waWxlKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5j
dGlvbiksICJjYWxsIiwgQ29kZUZvckNhbGwpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
dmlydHVhbENvbnN0cnVjdEdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENvbnN0cnVjdEdlbmVyYXRvcihWTSogdm0pCiB7Ci0g
ICAgcmV0dXJuIHZpcnR1YWxGb3JHZW5lcmF0b3IoZ2xvYmFsRGF0YSwgRnVuY3Rpb25QdHIoY3Rp
X29wX2NvbnN0cnVjdF9qaXRDb21waWxlKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9O
b3RKU0NvbnN0cnVjdCksICJjb25zdHJ1Y3QiLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICByZXR1
cm4gdmlydHVhbEZvckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9q
aXRDb21waWxlKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdCks
ICJjb25zdHJ1Y3QiLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHN0cmluZ0xlbmd0aFRyYW1wb2xpbmVHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0cmluZ0xlbmd0aFRyYW1wb2xpbmVHZW5lcmF0
b3IoVk0qIHZtKQogewogICAgIEpTSW50ZXJmYWNlSklUIGppdDsKICAgICAKQEAgLTE3MSw3ICsx
NzEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3RyaW5nTGVuZ3RoVHJhbXBvCiAgICAgSlNJ
bnRlcmZhY2VKSVQ6Okp1bXAgZmFpbHVyZUNhc2VzMiA9IGppdC5icmFuY2hQdHIoCiAgICAgICAg
IEpTSW50ZXJmYWNlSklUOjpOb3RFcXVhbCwgSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoCiAgICAg
ICAgICAgICBKU0ludGVyZmFjZUpJVDo6cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LAotICAgICAgICBKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbVB0cihnbG9iYWxEYXRhLT5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAgSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1Q
dHIodm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwogCiAgICAgLy8gQ2hlY2tzIG91dCBva2F5
ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIFVzdHJpbmcuCiAgICAgaml0LmxvYWQzMigKQEAg
LTE5Myw3ICsxOTMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3RyaW5nTGVuZ3RoVHJhbXBv
CiAgICAgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgZmFpbHVyZUNhc2VzMiA9IGppdC5icmFuY2hQdHIo
CiAgICAgICAgIEpTSW50ZXJmYWNlSklUOjpOb3RFcXVhbCwKICAgICAgICAgSlNJbnRlcmZhY2VK
SVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwKLSAgICAgICAgSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsRGF0YS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CisgICAgICAgIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVk
SW1tUHRyKHZtLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKIAogICAgIC8vIENoZWNrcyBvdXQg
b2theSEgLSBnZXQgdGhlIGxlbmd0aCBmcm9tIHRoZSBVc3RyaW5nLgogICAgIGppdC5sb2FkMzIo
CkBAIC0yMTIsNyArMjEyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0cmluZ0xlbmd0aFRy
YW1wbwogICAgIEpTSW50ZXJmYWNlSklUOjpDYWxsIGZhaWx1cmVDYXNlczJDYWxsID0gaml0Lm1h
a2VUYWlsUmVjdXJzaXZlQ2FsbChmYWlsdXJlQ2FzZXMyKTsKICAgICBKU0ludGVyZmFjZUpJVDo6
Q2FsbCBmYWlsdXJlQ2FzZXMzQ2FsbCA9IGppdC5tYWtlVGFpbFJlY3Vyc2l2ZUNhbGwoZmFpbHVy
ZUNhc2VzMyk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwg
JmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwg
JmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1
cmVDYXNlczFDYWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7
CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMyQ2FsbCwgRnVuY3Rpb25QdHIoY3Rp
X29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOwpAQCAtMjIxLDE0ICsyMjEsMTQgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHN0cmluZ0xlbmd0aFRyYW1wbwogICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCAoInN0cmluZyBsZW5ndGggdHJhbXBvbGluZSIpKTsKIH0KIAotc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZW5lcmF0b3IoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCitzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdlbmVyYXRvcihWTSogdm0sIENvZGVTcGVjaWFsaXph
dGlvbktpbmQga2luZCkKIHsKICAgICBpbnQgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24gPSBO
YXRpdmVFeGVjdXRhYmxlOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0aW9uRm9yKGtpbmQpOwogICAgIAog
ICAgIEpTSW50ZXJmYWNlSklUIGppdDsKICAgICAKICAgICBqaXQuZW1pdFB1dEltbWVkaWF0ZVRv
Q2FsbEZyYW1lSGVhZGVyKDAsIEpTU3RhY2s6OkNvZGVCbG9jayk7Ci0gICAgaml0LnN0b3JlUHRy
KEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgJmdsb2JhbERhdGEtPnRvcENhbGxG
cmFtZSk7CisgICAgaml0LnN0b3JlUHRyKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgJnZtLT50b3BDYWxsRnJhbWUpOwogCiAjaWYgQ1BVKFg4NikKICAgICAvLyBMb2FkIGNhbGxl
ciBmcmFtZSdzIHNjb3BlIGNoYWluIGludG8gdGhpcyBjYWxsZnJhbWUgc28gdGhhdCB3aGF0ZXZl
ciB3ZSBjYWxsIGNhbgpAQCAtMzczLDEyICszNzMsMTIgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBuYXRpdmVGb3JHZQogCiAgICAgLy8gQ2hlY2sgZm9yIGFuIGV4Y2VwdGlvbgogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgaml0LmxvYWQ2NCgmKGdsb2JhbERhdGEtPmV4Y2VwdGlvbiks
IEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CisgICAgaml0LmxvYWQ2NCgmKHZtLT5leGNlcHRpb24p
LCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOwogICAgIEpTSW50ZXJmYWNlSklUOjpKdW1wIGV4Y2Vw
dGlvbkhhbmRsZXIgPSBqaXQuYnJhbmNoVGVzdDY0KEpTSW50ZXJmYWNlSklUOjpOb25aZXJvLCBK
U0ludGVyZmFjZUpJVDo6cmVnVDIpOwogI2Vsc2UKICAgICBKU0ludGVyZmFjZUpJVDo6SnVtcCBl
eGNlcHRpb25IYW5kbGVyID0gaml0LmJyYW5jaDMyKAogICAgICAgICBKU0ludGVyZmFjZUpJVDo6
Tm90RXF1YWwsCi0gICAgICAgIEpTSW50ZXJmYWNlSklUOjpBYnNvbHV0ZUFkZHJlc3MocmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oJmdsb2JhbERhdGEtPmV4Y2VwdGlvbikgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLAorICAgICAgICBKU0ludGVy
ZmFjZUpJVDo6QWJzb2x1dGVBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZ2bS0+ZXhj
ZXB0aW9uKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
dGFnKSksCiAgICAgICAgIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1w
dHlWYWx1ZVRhZykpOwogI2VuZGlmCiAKQEAgLTM5MSwzNSArMzkxLDM1IEBAIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKICAgICAvLyBHcmFiIHRoZSByZXR1cm4gYWRk
cmVzcy4KICAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEpTSW50ZXJmYWNl
SklUOjpyZWdUMSk7CiAKLSAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbVB0
cigmZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uTG9jYXRpb24pLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIp
OworICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKCZ2bS0+ZXhjZXB0
aW9uTG9jYXRpb24pLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOwogICAgIGppdC5zdG9yZVB0cihK
U0ludGVyZmFjZUpJVDo6cmVnVDEsIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CiAgICAgaml0LnBv
a2UoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0Yoc3Ry
dWN0IEpJVFN0YWNrRnJhbWUsIGNhbGxGcmFtZSkgLyBzaXplb2Yodm9pZCopKTsKIAotICAgIGpp
dC5zdG9yZVB0cihKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZnbG9iYWxEYXRh
LT50b3BDYWxsRnJhbWUpOworICAgIGppdC5zdG9yZVB0cihKU0ludGVyZmFjZUpJVDo6Y2FsbEZy
YW1lUmVnaXN0ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsKICAgICAvLyBTZXQgdGhlIHJldHVybiBh
ZGRyZXNzLgogICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKEZ1bmN0
aW9uUHRyKGN0aVZNVGhyb3dUcmFtcG9saW5lKS52YWx1ZSgpKSwgSlNJbnRlcmZhY2VKSVQ6OnJl
Z1QxKTsKICAgICBqaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oSlNJbnRlcmZh
Y2VKSVQ6OnJlZ1QxKTsKIAogICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgibmF0aXZlICVzIHRyYW1wb2xpbmUiLCB0b0NTdHJp
bmcoa2luZCkuZGF0YSgpKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDYWxs
R2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBuYXRpdmVDYWxsR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gbmF0aXZlRm9yR2Vu
ZXJhdG9yKGdsb2JhbERhdGEsIENvZGVGb3JDYWxsKTsKKyAgICByZXR1cm4gbmF0aXZlRm9yR2Vu
ZXJhdG9yKHZtLCBDb2RlRm9yQ2FsbCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRp
dmVDb25zdHJ1Y3RHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0
dXJuIG5hdGl2ZUZvckdlbmVyYXRvcihnbG9iYWxEYXRhLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAg
ICByZXR1cm4gbmF0aXZlRm9yR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAot
c3RhdGljIHZvaWQgc3RyaW5nQ2hhckxvYWQoU3BlY2lhbGl6ZWRUaHVua0pJVCYgaml0LCBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEpCitzdGF0aWMgdm9pZCBzdHJpbmdDaGFyTG9hZChTcGVjaWFs
aXplZFRodW5rSklUJiBqaXQsIFZNKiB2bSkKIHsKICAgICAvLyBsb2FkIHN0cmluZwotICAgIGpp
dC5sb2FkSlNTdHJpbmdBcmd1bWVudCgqZ2xvYmFsRGF0YSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6
VGhpc0FyZ3VtZW50LCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CisgICAgaml0LmxvYWRK
U1N0cmluZ0FyZ3VtZW50KCp2bSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6VGhpc0FyZ3VtZW50LCBT
cGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAKICAgICAvLyBMb2FkIHN0cmluZyBsZW5ndGgg
dG8gcmVnVDIsIGFuZCBzdGFydCB0aGUgcHJvY2VzcyBvZiBsb2FkaW5nIHRoZSBkYXRhIHBvaW50
ZXIgaW50byByZWdUMAogICAgIGppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoU3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFRodW5rSGVscGVyczo6anNTdHJpbmdMZW5ndGhPZmZz
ZXQoKSksIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyKTsKQEAgLTQ0Niw1MSArNDQ2LDUxIEBA
IHN0YXRpYyB2b2lkIHN0cmluZ0NoYXJMb2FkKFNwZWNpYWxpemVkVGgKICAgICBjb250OEJpdC5s
aW5rKCZqaXQpOwogfQogCi1zdGF0aWMgdm9pZCBjaGFyVG9TdHJpbmcoU3BlY2lhbGl6ZWRUaHVu
a0pJVCYgaml0LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIHNyYywgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgZHN0LCBNYWNyb0Fzc2VtYmxl
cjo6UmVnaXN0ZXJJRCBzY3JhdGNoKQorc3RhdGljIHZvaWQgY2hhclRvU3RyaW5nKFNwZWNpYWxp
emVkVGh1bmtKSVQmIGppdCwgVk0qIHZtLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBzcmMs
IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGRzdCwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVy
SUQgc2NyYXRjaCkKIHsKICAgICBqaXQuYXBwZW5kRmFpbHVyZShqaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3JjLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDB4MTAwKSkpOwotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGds
b2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpLCBzY3JhdGNo
KTsKKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2bS0+c21hbGxT
dHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSksIHNjcmF0Y2gpOwogICAgIGppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaCwgc3JjLCBNYWNyb0Fzc2VtYmxl
cjo6U2NhbGVQdHIsIDApLCBkc3QpOwogICAgIGppdC5hcHBlbmRGYWlsdXJlKGppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBkc3QpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEp
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKFZNKiB2bSkK
IHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxKTsKLSAgICBzdHJpbmdDaGFyTG9hZChq
aXQsIGdsb2JhbERhdGEpOworICAgIHN0cmluZ0NoYXJMb2FkKGppdCwgdm0pOwogICAgIGppdC5y
ZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7Ci0gICAgcmV0dXJuIGppdC5m
aW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwo
Z2xvYmFsRGF0YSksICJjaGFyQ29kZUF0Iik7CisgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqdm0s
IHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSksICJjaGFyQ29kZUF0Iik7CiB9CiAKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQXRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hhckF0VGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEpOwotICAgIHN0cmluZ0NoYXJM
b2FkKGppdCwgZ2xvYmFsRGF0YSk7Ci0gICAgY2hhclRvU3RyaW5nKGppdCwgZ2xvYmFsRGF0YSwg
U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBT
cGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSk7CisgICAgc3RyaW5nQ2hhckxvYWQoaml0LCB2bSk7
CisgICAgY2hhclRvU3RyaW5nKGppdCwgdm0sIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBT
cGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwog
ICAgIGppdC5yZXR1cm5KU0NlbGwoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwotICAgIHJl
dHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlO
YXRpdmVDYWxsKGdsb2JhbERhdGEpLCAiY2hhckF0Iik7CisgICAgcmV0dXJuIGppdC5maW5hbGl6
ZSgqdm0sIHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSksICJjaGFyQXQiKTsKIH0KIAot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBmcm9tQ2hhckNvZGVUaHVu
a0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSk7CiAg
ICAgLy8gbG9hZCBjaGFyIGNvZGUKICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDApOwotICAgIGNoYXJUb1N0cmluZyhqaXQsIGdsb2JhbERhdGEs
IFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwg
U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOworICAgIGNoYXJUb1N0cmluZyhqaXQsIHZtLCBT
cGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNw
ZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxKTsKICAgICBqaXQucmV0dXJuSlNDZWxsKFNwZWNpYWxp
emVkVGh1bmtKSVQ6OnJlZ1QwKTsKLSAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRh
LCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRhKSwgImZyb21D
aGFyQ29kZSIpOworICAgIHJldHVybiBqaXQuZmluYWxpemUoKnZtLCB2bS0+aml0U3R1YnMtPmN0
aU5hdGl2ZUNhbGwodm0pLCAiZnJvbUNoYXJDb2RlIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBzcXJ0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHNxcnRUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgU3BlY2lh
bGl6ZWRUaHVua0pJVCBqaXQoMSk7CiAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50
U3FydCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxm
TWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoZ2xvYmFs
RGF0YSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxm
TWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAKICAgICBq
aXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNw
ZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBqaXQuc3FydERvdWJsZShTcGVjaWFsaXpl
ZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKICAgICBq
aXQucmV0dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwotICAgIHJldHVy
biBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKGdsb2JhbERhdGEpLCAic3FydCIpOworICAgIHJldHVybiBqaXQuZmluYWxpemUoKnZt
LCB2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pLCAic3FydCIpOwogfQogCiAKQEAgLTU2
MSwxMiArNTYxLDEyIEBAIHN0YXRpYyBjb25zdCBkb3VibGUgbmVnYXRpdmVIYWxmQ29uc3RhbnQK
IHN0YXRpYyBjb25zdCBkb3VibGUgemVyb0NvbnN0YW50ID0gMC4wOwogc3RhdGljIGNvbnN0IGRv
dWJsZSBoYWxmQ29uc3RhbnQgPSAwLjU7CiAgICAgCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZmxv
b3JUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgZmxvb3JUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRU
aHVua0pJVCBqaXQoMSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50SnVtcDsKICAg
ICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGZsb29yKSB8fCAhaml0LnN1cHBvcnRzRmxvYXRp
bmdQb2ludCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVT
ZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoZ2xv
YmFsRGF0YSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVT
ZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAgICAg
aml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBub25J
bnRKdW1wKTsKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAp
OwogICAgIG5vbkludEp1bXAubGluaygmaml0KTsKQEAgLTU5MCwxNCArNTkwLDE0IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBmbG9vclRodW5rR2VuZXJhdG8KICAgICBqaXQucmV0dXJuSW50MzIo
U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGRvdWJsZVJlc3VsdC5saW5rKCZqaXQp
OwogICAgIGppdC5yZXR1cm5Eb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7Ci0g
ICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMt
PmN0aU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSksICJmbG9vciIpOworICAgIHJldHVybiBqaXQuZmlu
YWxpemUoKnZtLCB2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pLCAiZmxvb3IiKTsKIH0K
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNlaWxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2VpbFRodW5rR2VuZXJhdG9yKFZN
KiB2bSkKIHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxKTsKICAgICBpZiAoIVVuYXJ5
RG91YmxlT3BXcmFwcGVyKGNlaWwpIHx8ICFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0g
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29k
ZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRhKSk7Cisg
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29k
ZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBub25JbnRKdW1wOwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybkludDMyKFNw
ZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKQEAgLTYwOSwxNCArNjA5LDE0IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBjZWlsVGh1bmtHZW5lcmF0b3IKICAgICBqaXQucmV0dXJuSW50MzIoU3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGRvdWJsZVJlc3VsdC5saW5rKCZqaXQpOwog
ICAgIGppdC5yZXR1cm5Eb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7Ci0gICAg
cmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0
aU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSksICJjZWlsIik7CisgICAgcmV0dXJuIGppdC5maW5hbGl6
ZSgqdm0sIHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSksICJjZWlsIik7CiB9CiAKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiByb3VuZFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiByb3VuZFRodW5rR2VuZXJhdG9yKFZNKiB2
bSkKIHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxKTsKICAgICBpZiAoIVVuYXJ5RG91
YmxlT3BXcmFwcGVyKGpzUm91bmQpIHx8ICFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0g
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29k
ZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRhKSk7Cisg
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29k
ZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBub25JbnRKdW1wOwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybkludDMyKFNw
ZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKQEAgLTY0Myw0MCArNjQzLDQwIEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiByb3VuZFRodW5rR2VuZXJhdG8KICAgICBqaXQucmV0dXJuSW50MzIoU3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGRvdWJsZVJlc3VsdC5saW5rKCZqaXQpOwog
ICAgIGppdC5yZXR1cm5Eb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7Ci0gICAg
cmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0
aU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSksICJyb3VuZCIpOworICAgIHJldHVybiBqaXQuZmluYWxp
emUoKnZtLCB2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pLCAicm91bmQiKTsKIH0KIAot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV4cFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBleHBUaHVua0dlbmVyYXRvcihWTSogdm0p
CiB7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihleHApKQotICAgICAgICByZXR1cm4g
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0
YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSkpOworICAgICAgICByZXR1cm4g
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0
dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSk7
CiAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRh
LT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRhKSk7CisgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1
YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNw
ZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsK
ICAgICBqaXQuY2FsbERvdWJsZVRvRG91YmxlKFVuYXJ5RG91YmxlT3BXcmFwcGVyKGV4cCkpOwog
ICAgIGppdC5yZXR1cm5Eb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7Ci0gICAg
cmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0
aU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSksICJleHAiKTsKKyAgICByZXR1cm4gaml0LmZpbmFsaXpl
KCp2bSwgdm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSwgImV4cCIpOwogfQogCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbG9nVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxvZ1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsK
ICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGxvZykpCi0gICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5q
aXRTdHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRhKSk7CisgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMt
PmN0aU5hdGl2ZUNhbGwodm0pKTsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxKTsKICAg
ICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmpp
dFN0dWJzLT5jdGlOYXRpdmVDYWxsKGdsb2JhbERhdGEpKTsKKyAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCh2bSkpOwogICAgIGppdC5sb2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAg
IGppdC5jYWxsRG91YmxlVG9Eb3VibGUoVW5hcnlEb3VibGVPcFdyYXBwZXIobG9nKSk7CiAgICAg
aml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKLSAgICByZXR1
cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0
aXZlQ2FsbChnbG9iYWxEYXRhKSwgImxvZyIpOworICAgIHJldHVybiBqaXQuZmluYWxpemUoKnZt
LCB2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pLCAibG9nIik7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBhYnNUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEp
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYWJzVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAg
IFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRp
bmdQb2ludEFicygpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVh
dGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwo
Z2xvYmFsRGF0YSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVh
dGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50SnVtcDsKICAgICBqaXQubG9hZEludDMyQXJn
dW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIG5vbkludEp1bXApOwogICAgIGpp
dC5yc2hpZnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigzMSksIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxKTsKQEAgLTY4OSwxNCAr
Njg5LDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhYnNUaHVua0dlbmVyYXRvcigKICAgICBq
aXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNw
ZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBqaXQuYWJzRG91YmxlKFNwZWNpYWxpemVk
VGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDEpOwogICAgIGpp
dC5yZXR1cm5Eb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMSk7Ci0gICAgcmV0dXJu
IGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2
ZUNhbGwoZ2xvYmFsRGF0YSksICJhYnMiKTsKKyAgICByZXR1cm4gaml0LmZpbmFsaXplKCp2bSwg
dm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSwgImFicyIpOwogfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgcG93VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHBvd1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBT
cGVjaWFsaXplZFRodW5rSklUIGppdCgyKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5n
UG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2Vs
Zk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKGdsb2Jh
bERhdGEpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2Vs
Zk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogCiAgICAg
aml0LmxvYWREb3VibGUoJm9uZUNvbnN0YW50LCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1Qx
KTsKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZw
UmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKQEAgLTc0MSw3ICs3NDEsNyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgcG93VGh1bmtHZW5lcmF0b3IoCiAgICAgfSBlbHNlCiAgICAg
ICAgIGppdC5hcHBlbmRGYWlsdXJlKG5vbkludEV4cG9uZW50KTsKIAotICAgIHJldHVybiBqaXQu
ZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxs
KGdsb2JhbERhdGEpLCAicG93Iik7CisgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqdm0sIHZtLT5q
aXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSksICJwb3ciKTsKIH0KIAogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lvbiAxNDg2Mzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSwyNiArMzEsMjYgQEAKICNpZiBFTkFCTEUoSklUKQogbmFtZXNwYWNlIEpT
QyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbEdlbmVyYXRvcihKU0dsb2JhbERh
dGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0R2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRv
cihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbEdlbmVy
YXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3Ry
dWN0R2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0cmlu
Z0xlbmd0aFRyYW1wb2xpbmVHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7Ci1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbmF0aXZlQ2FsbEdlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBuYXRpdmVDb25zdHJ1Y3RHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CitNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiBsaW5rQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbGlua0Nsb3N1cmVDYWxsR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
dmlydHVhbENhbGxHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFs
Q29uc3RydWN0R2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3RyaW5nTGVu
Z3RoVHJhbXBvbGluZUdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2
ZUNhbGxHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDb25zdHJ1
Y3RHZW5lcmF0b3IoVk0qKTsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJDb2RlQXRUaHVu
a0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQXRU
aHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmcm9t
Q2hhckNvZGVUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBhYnNUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBjZWlsVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7Ci1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgZXhwVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7Ci1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgZmxvb3JUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBsb2dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZiByb3VuZFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHNxcnRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBwb3dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZiBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiBjaGFyQXRUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
YWJzVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBjZWlsVGh1bmtH
ZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBleHBUaHVua0dlbmVyYXRvcihW
TSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZsb29yVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBsb2dUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHJvdW5kVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBzcXJ0VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBwb3dUaHVu
a0dlbmVyYXRvcihWTSopOwogCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjIsOSArNjIsOSBAQCB2b2lkIGluaXRpYWxpemUoKQogI3ByYWdtYSBjbGFuZyBkaWFn
bm9zdGljIHB1c2gKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmct
bm9yZXR1cm4iCiAjZW5kaWYKLXZvaWQgRGF0YTo6cGVyZm9ybUFzc2VydGlvbnMoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQordm9pZCBEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyhWTSYgdm0pCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbERhdGEpOworICAgIFVOVVNFRF9QQVJBTSh2bSk7CiAg
ICAgCiAgICAgLy8gQXNzZXJ0aW9ucyB0byBtYXRjaCBMb3dMZXZlbEludGVycHJldGVyLmFzbS4g
IElmIHlvdSBjaGFuZ2UgYW55IG9mIHRoaXMgY29kZSwgYmUKICAgICAvLyBwcmVwYXJlZCB0byBj
aGFuZ2UgTG93TGV2ZWxJbnRlcnByZXRlci5hc20gYXMgd2VsbCEhCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcg
KzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNz
IFZNOwogc3RydWN0IEluc3RydWN0aW9uOwogCiAjaWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKQEAg
LTQ3LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIExMSW50IHsKIAogY2xhc3MgRGF0YSB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIHZvaWQgcGVyZm9ybUFzc2VydGlvbnMoSlNHbG9iYWxEYXRhJik7CisgICAg
c3RhdGljIHZvaWQgcGVyZm9ybUFzc2VydGlvbnMoVk0mKTsKIAogcHJpdmF0ZToKICAgICBzdGF0
aWMgSW5zdHJ1Y3Rpb24qIHNfZXhjZXB0aW9uSW5zdHJ1Y3Rpb25zOwpAQCAtOTYsNyArOTYsNyBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQqIGdldENvZGVQdHIoT3Bjb2RlSUQgCiAKIGNsYXNzIERhdGEg
ewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIHBlcmZvcm1Bc3NlcnRpb25zKEpTR2xvYmFsRGF0
YSYpIHsgfQorICAgIHN0YXRpYyB2b2lkIHBlcmZvcm1Bc3NlcnRpb25zKFZNJikgeyB9CiB9Owog
CiAjaWYgQ09NUElMRVIoQ0xBTkcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRFbnRyeXBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50RW50cnlwb2ludHMuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDcgKzI5LDcgQEAKICNpZiBFTkFCTEUoTExJTlQpCiAKICNpbmNsdWRlICJKSVRDb2Rl
LmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRl
ICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAiTG93TGV2
ZWxJbnRlcnByZXRlci5oIgpAQCAtMzcsOSArMzcsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIExMSW50IHsKIAotdm9pZCBnZXRGdW5jdGlvbkVudHJ5cG9pbnQoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpJVENvZGUmIGppdENv
ZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgYXJpdHlDaGVjaykKK3ZvaWQgZ2V0RnVuY3Rpb25F
bnRyeXBvaW50KFZNJiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKSVRDb2RlJiBq
aXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGFyaXR5Q2hlY2spCiB7Ci0gICAgaWYgKCFn
bG9iYWxEYXRhLmNhblVzZUpJVCgpKSB7CisgICAgaWYgKCF2bS5jYW5Vc2VKSVQoKSkgewogICAg
ICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewogICAgICAgICAgICAgaml0Q29kZSA9IEpJ
VENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZnVu
Y3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKTsKICAg
ICAgICAgICAgIGFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50
Q29kZVB0cihsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjayk7CkBAIC01NCwzNiAr
NTQsMzYgQEAgdm9pZCBnZXRGdW5jdGlvbkVudHJ5cG9pbnQoSlNHbG9iYWxEYXRhJgogICAgIAog
I2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAg
aml0Q29kZSA9IEpJVENvZGUoZ2xvYmFsRGF0YS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ2FsbEVu
dHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKTsKLSAgICAgICAg
YXJpdHlDaGVjayA9IGdsb2JhbERhdGEuZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNhbGxBcml0eUNo
ZWNrVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICAgICAgaml0Q29kZSA9IEpJVENvZGUodm0u
Z2V0Q1RJU3R1YihmdW5jdGlvbkZvckNhbGxFbnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6
SW50ZXJwcmV0ZXJUaHVuayk7CisgICAgICAgIGFyaXR5Q2hlY2sgPSB2bS5nZXRDVElTdHViKGZ1
bmN0aW9uRm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0g
ICAgaml0Q29kZSA9IEpJVENvZGUoZ2xvYmFsRGF0YS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ29u
c3RydWN0RW50cnlUaHVua0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspOwot
ICAgIGFyaXR5Q2hlY2sgPSBnbG9iYWxEYXRhLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1
Y3RBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICBqaXRDb2RlID0gSklUQ29k
ZSh2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ29uc3RydWN0RW50cnlUaHVua0dlbmVyYXRvciks
IEpJVENvZGU6OkludGVycHJldGVyVGh1bmspOworICAgIGFyaXR5Q2hlY2sgPSB2bS5nZXRDVElT
dHViKGZ1bmN0aW9uRm9yQ29uc3RydWN0QXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKS5jb2RlKCk7
CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIAotdm9pZCBnZXRFdmFsRW50cnlwb2ludChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpJVENvZGUmIGppdENvZGUpCit2b2lkIGdldEV2YWxFbnRy
eXBvaW50KFZNJiB2bSwgSklUQ29kZSYgaml0Q29kZSkKIHsKLSAgICBpZiAoIWdsb2JhbERhdGEu
Y2FuVXNlSklUKCkpIHsKKyAgICBpZiAoIXZtLmNhblVzZUpJVCgpKSB7CiAgICAgICAgIGppdENv
ZGUgPSBKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxs
aW50X2V2YWxfcHJvbG9ndWUpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICNpZiBFTkFCTEUoSklUKSAgICAKLSAgICBqaXRDb2RlID0gSklUQ29k
ZShnbG9iYWxEYXRhLmdldENUSVN0dWIoZXZhbEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2Rl
OjpJbnRlcnByZXRlclRodW5rKTsKKyAgICBqaXRDb2RlID0gSklUQ29kZSh2bS5nZXRDVElTdHVi
KGV2YWxFbnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuayk7CiAj
ZW5kaWYKIH0KIAotdm9pZCBnZXRQcm9ncmFtRW50cnlwb2ludChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpJVENvZGUmIGppdENvZGUpCit2b2lkIGdldFByb2dyYW1FbnRyeXBvaW50KFZNJiB2
bSwgSklUQ29kZSYgaml0Q29kZSkKIHsKLSAgICBpZiAoIWdsb2JhbERhdGEuY2FuVXNlSklUKCkp
IHsKKyAgICBpZiAoIXZtLmNhblVzZUpJVCgpKSB7CiAgICAgICAgIGppdENvZGUgPSBKSVRDb2Rl
KE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X3Byb2dyYW1f
cHJvbG9ndWUpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICNpZiBFTkFCTEUoSklUKQotICAgIGppdENvZGUgPSBKSVRDb2RlKGdsb2JhbERhdGEu
Z2V0Q1RJU3R1Yihwcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJl
dGVyVGh1bmspOworICAgIGppdENvZGUgPSBKSVRDb2RlKHZtLmdldENUSVN0dWIocHJvZ3JhbUVu
dHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKTsKICNlbmRpZgog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEVudHJ5cG9p
bnRzLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludEVudHJ5cG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDI1ICszNiwyNSBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogY2xhc3MgRXZhbENvZGVCbG9jazsKIGNsYXNzIEpJVENvZGU7Ci1jbGFz
cyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjsK
IGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKIGNsYXNzIFByb2dyYW1Db2RlQmxvY2s7CiAK
IG5hbWVzcGFjZSBMTEludCB7CiAKLXZvaWQgZ2V0RnVuY3Rpb25FbnRyeXBvaW50KEpTR2xvYmFs
RGF0YSYsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIEpJVENvZGUmLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHImIGFyaXR5Q2hlY2spOwotdm9pZCBnZXRFdmFsRW50cnlwb2ludChKU0dsb2JhbERhdGEm
LCBKSVRDb2RlJik7Ci12b2lkIGdldFByb2dyYW1FbnRyeXBvaW50KEpTR2xvYmFsRGF0YSYsIEpJ
VENvZGUmKTsKK3ZvaWQgZ2V0RnVuY3Rpb25FbnRyeXBvaW50KFZNJiwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCwgSklUQ29kZSYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgYXJpdHlDaGVjayk7Cit2
b2lkIGdldEV2YWxFbnRyeXBvaW50KFZNJiwgSklUQ29kZSYpOwordm9pZCBnZXRQcm9ncmFtRW50
cnlwb2ludChWTSYsIEpJVENvZGUmKTsKIAotaW5saW5lIHZvaWQgZ2V0RW50cnlwb2ludChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEV2YWxDb2RlQmxvY2sqLCBKSVRDb2RlJiBqaXRDb2RlKQor
aW5saW5lIHZvaWQgZ2V0RW50cnlwb2ludChWTSYgdm0sIEV2YWxDb2RlQmxvY2sqLCBKSVRDb2Rl
JiBqaXRDb2RlKQogewotICAgIGdldEV2YWxFbnRyeXBvaW50KGdsb2JhbERhdGEsIGppdENvZGUp
OworICAgIGdldEV2YWxFbnRyeXBvaW50KHZtLCBqaXRDb2RlKTsKIH0KIAotaW5saW5lIHZvaWQg
Z2V0RW50cnlwb2ludChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb2dyYW1Db2RlQmxvY2sq
LCBKSVRDb2RlJiBqaXRDb2RlKQoraW5saW5lIHZvaWQgZ2V0RW50cnlwb2ludChWTSYgdm0sIFBy
b2dyYW1Db2RlQmxvY2sqLCBKSVRDb2RlJiBqaXRDb2RlKQogewotICAgIGdldFByb2dyYW1FbnRy
eXBvaW50KGdsb2JhbERhdGEsIGppdENvZGUpOworICAgIGdldFByb2dyYW1FbnRyeXBvaW50KHZt
LCBqaXRDb2RlKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkxMSW50CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcAkocmV2aXNp
b24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhjZXB0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDE0ICs0OCwxNCBAQCBzdGF0aWMgdm9pZCBmaXh1
cFBDZm9yRXhjZXB0aW9uSWZOZWVkZWQoCiAKIHZvaWQgaW50ZXJwcmV0ZXJUaHJvd0luQ2FsbGVy
KEV4ZWNTdGF0ZSogZXhlYywgUmV0dXJuQWRkcmVzc1B0ciBwYykKIHsKLSAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAjaWYgTExJ
TlRfU0xPV19QQVRIX1RSQUNJTkcKLSAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwg
Z2xvYmFsRGF0YS0+ZXhjZXB0aW9uLCAiLlxuIik7CisgICAgZGF0YUxvZygiVGhyb3dpbmcgZXhj
ZXB0aW9uICIsIHZtLT5leGNlcHRpb24sICIuXG4iKTsKICNlbmRpZgogICAgIGZpeHVwUENmb3JF
eGNlcHRpb25JZk5lZWRlZChleGVjKTsKICAgICBnZW5lcmljVGhyb3coCi0gICAgICAgIGdsb2Jh
bERhdGEsIGV4ZWMsIGdsb2JhbERhdGEtPmV4Y2VwdGlvbiwKKyAgICAgICAgdm0sIGV4ZWMsIHZt
LT5leGNlcHRpb24sCiAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5ieXRlY29kZU9mZnNldChl
eGVjLCBwYykpOwogfQogCkBAIC02NywyNiArNjcsMjYgQEAgSW5zdHJ1Y3Rpb24qIHJldHVyblRv
VGhyb3dGb3JUaHJvd25FeGNlcAogCiBJbnN0cnVjdGlvbiogcmV0dXJuVG9UaHJvdyhFeGVjU3Rh
dGUqIGV4ZWMsIEluc3RydWN0aW9uKiBwYykKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAjaWYgTExJTlRfU0xPV19QQVRI
X1RSQUNJTkcKLSAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwgZ2xvYmFsRGF0YS0+
ZXhjZXB0aW9uLCAiIChyZXR1cm5Ub1Rocm93KS5cbiIpOworICAgIGRhdGFMb2coIlRocm93aW5n
IGV4Y2VwdGlvbiAiLCB2bS0+ZXhjZXB0aW9uLCAiIChyZXR1cm5Ub1Rocm93KS5cbiIpOwogI2Vu
ZGlmCiAgICAgZml4dXBQQ2ZvckV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMpOwotICAgIGdlbmVyaWNU
aHJvdyhnbG9iYWxEYXRhLCBleGVjLCBnbG9iYWxEYXRhLT5leGNlcHRpb24sIHBjIC0gZXhlYy0+
Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmJlZ2luKCkpOworICAgIGdlbmVyaWNUaHJvdyh2
bSwgZXhlYywgdm0tPmV4Y2VwdGlvbiwgcGMgLSBleGVjLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rp
b25zKCkuYmVnaW4oKSk7CiAgICAgCiAgICAgcmV0dXJuIExMSW50OjpleGNlcHRpb25JbnN0cnVj
dGlvbnMoKTsKIH0KIAogdm9pZCogY2FsbFRvVGhyb3coRXhlY1N0YXRlKiBleGVjLCBJbnN0cnVj
dGlvbiogcGMpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2Jh
bERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4
ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwogI2lmIExMSU5UX1NMT1dfUEFUSF9UUkFDSU5HCi0gICAgZGF0
YUxvZygiVGhyb3dpbmcgZXhjZXB0aW9uICIsIGdsb2JhbERhdGEtPmV4Y2VwdGlvbiwgIiAoY2Fs
bFRvVGhyb3cpLlxuIik7CisgICAgZGF0YUxvZygiVGhyb3dpbmcgZXhjZXB0aW9uICIsIHZtLT5l
eGNlcHRpb24sICIgKGNhbGxUb1Rocm93KS5cbiIpOwogI2VuZGlmCiAgICAgZml4dXBQQ2ZvckV4
Y2VwdGlvbklmTmVlZGVkKGV4ZWMpOwotICAgIGdlbmVyaWNUaHJvdyhnbG9iYWxEYXRhLCBleGVj
LCBnbG9iYWxEYXRhLT5leGNlcHRpb24sIHBjIC0gZXhlYy0+Y29kZUJsb2NrKCktPmluc3RydWN0
aW9ucygpLmJlZ2luKCkpOworICAgIGdlbmVyaWNUaHJvdyh2bSwgZXhlYywgdm0tPmV4Y2VwdGlv
biwgcGMgLSBleGVjLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSk7CiAKICAg
ICByZXR1cm4gTExJbnQ6OmdldENvZGVQdHIobGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBv
bGluZSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRz
RXh0cmFjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlND
ZWxsLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5o
IgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRl
ICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCIKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2
aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsOCArNTUsOCBAQAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBMTEludCB7CiAKICNkZWZpbmUgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCkgXAot
ICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsgICAgICBc
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYykKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOyAgICAgIFwKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYykKIAogI2lmbmRlZiBOREVCVUcKICNkZWZpbmUgTExJTlRfU0VUX1BD
X0ZPUl9TVFVCUygpIGRvIHsgXApAQCAtODMsMTMgKzgzLDEzIEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgTExJbnQgewogI2RlZmluZSBMTElOVF9FTkRfSU1QTCgpIExMSU5UX1JFVFVSTl9U
V08ocGMsIGV4ZWMpCiAKICNkZWZpbmUgTExJTlRfVEhST1coZXhjZXB0aW9uVG9UaHJvdykgZG8g
eyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZ2xvYmFsRGF0YS5leGNlcHRpb24g
PSAoZXhjZXB0aW9uVG9UaHJvdyk7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdm0uZXhjZXB0
aW9uID0gKGV4Y2VwdGlvblRvVGhyb3cpOyAgICAgICAgICAgICAgICBcCiAgICAgICAgIHBjID0g
cmV0dXJuVG9UaHJvdyhleGVjLCBwYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg
ICAgICAgIExMSU5UX0VORF9JTVBMKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCiAgICAgfSB3aGlsZSAoZmFsc2UpCiAKICNkZWZpbmUgTExJTlRfQ0hFQ0tfRVhD
RVBUSU9OKCkgZG8geyAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoVU5MSUtFTFko
Z2xvYmFsRGF0YS5leGNlcHRpb24pKSB7ICAgICAgICAgICBcCisgICAgICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24pKSB7ICAgICAgICAgICBcCiAgICAgICAgICAgICBwYyA9IHJldHVyblRv
VGhyb3coZXhlYywgcGMpOyAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIExMSU5UX0VORF9J
TVBMKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xNDMsMTQgKzE0MywxNCBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsKICNkZWZpbmUgTExJTlRfQ0FMTF9U
SFJPVyhleGVjLCBwYywgZXhjZXB0aW9uVG9UaHJvdykgZG8geyAgICAgICAgICAgICAgIFwKICAg
ICAgICAgRXhlY1N0YXRlKiBfX2N0X2V4ZWMgPSAoZXhlYyk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgICAgICAgSW5zdHJ1Y3Rpb24qIF9fY3RfcGMgPSAocGMpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZ2xvYmFsRGF0YS5leGNl
cHRpb24gPSAoZXhjZXB0aW9uVG9UaHJvdyk7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgdm0uZXhjZXB0aW9uID0gKGV4Y2VwdGlvblRvVGhyb3cpOyAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgICAgIExMSU5UX0NBTExfRU5EX0lNUEwoX19jdF9leGVjLCBjYWxsVG9UaHJvdyhf
X2N0X2V4ZWMsIF9fY3RfcGMpKTsgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCiAjZGVmaW5lIExM
SU5UX0NBTExfQ0hFQ0tfRVhDRVBUSU9OKGV4ZWMsIHBjKSBkbyB7ICAgICAgICAgICAgICAgICAg
ICAgICBcCiAgICAgICAgIEV4ZWNTdGF0ZSogX19jY2VfZXhlYyA9IChleGVjKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIEluc3RydWN0aW9uKiBfX2NjZV9wYyA9
IChwYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChV
TkxJS0VMWShnbG9iYWxEYXRhLmV4Y2VwdGlvbikpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKSkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBMTElOVF9DQUxMX0VORF9JTVBMKF9fY2NlX2V4
ZWMsIGNhbGxUb1Rocm93KF9fY2NlX2V4ZWMsIF9fY2NlX3BjKSk7IFwKICAgICB9IHdoaWxlIChm
YWxzZSkKIApAQCAtMTY5LDcgKzE2OSw3IEBAIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBl
IGxsaW50X3RyYWMKICAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLAogICAgICAgICAgICAg
ZXhlYywKICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludHB0cl90PihwYyAtIGV4ZWMtPmNvZGVC
bG9jaygpLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpKSwKLSAgICAgICAgICAgIGV4ZWMtPmdsb2Jh
bERhdGEoKS5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocGNbMF0udS5vcGNvZGUpLAorICAgICAg
ICAgICAgZXhlYy0+dm0oKS5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocGNbMF0udS5vcGNvZGUp
LAogICAgICAgICAgICAgZnJvbVdoZXJlLAogICAgICAgICAgICAgb3BlcmFuZCwKICAgICAgICAg
ICAgIHBjW29wZXJhbmRdLnUub3BlcmFuZCk7CkBAIC0xOTIsNyArMTkyLDcgQEAgZXh0ZXJuICJD
IiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdHJhYwogICAgICAgICBleGVjLT5jb2RlQmxvY2so
KSwKICAgICAgICAgZXhlYywKICAgICAgICAgc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHBjIC0gZXhl
Yy0+Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmJlZ2luKCkpLAotICAgICAgICBleGVjLT5n
bG9iYWxEYXRhKCkuaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHBjWzBdLnUub3Bjb2RlKSwKKyAg
ICAgICAgZXhlYy0+dm0oKS5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocGNbMF0udS5vcGNvZGUp
LAogICAgICAgICBmcm9tV2hlcmUsCiAgICAgICAgIG9wZXJhbmQsCiAgICAgICAgIHBjW29wZXJh
bmRdLnUub3BlcmFuZCwKQEAgLTI0OSw5ICsyNDksOSBAQCBMTElOVF9TTE9XX1BBVEhfREVDTCh0
cmFjZSkKICAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLAogICAgICAgICAgICAgZXhlYywK
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludHB0cl90PihwYyAtIGV4ZWMtPmNvZGVCbG9jaygp
LT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpKSwKLSAgICAgICAgICAgIG9wY29kZU5hbWVzW2V4ZWMt
Pmdsb2JhbERhdGEoKS5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocGNbMF0udS5vcGNvZGUpXSwK
KyAgICAgICAgICAgIG9wY29kZU5hbWVzW2V4ZWMtPnZtKCkuaW50ZXJwcmV0ZXItPmdldE9wY29k
ZUlEKHBjWzBdLnUub3Bjb2RlKV0sCiAgICAgICAgICAgICBleGVjLT5zY29wZSgpKTsKLSAgICBp
ZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmludGVycHJldGVyLT5nZXRPcGNvZGVJRChwY1swXS51Lm9w
Y29kZSkgPT0gb3BfcmV0KSB7CisgICAgaWYgKGV4ZWMtPnZtKCkuaW50ZXJwcmV0ZXItPmdldE9w
Y29kZUlEKHBjWzBdLnUub3Bjb2RlKSA9PSBvcF9yZXQpIHsKICAgICAgICAgZGF0YUxvZ0YoIldp
bGwgYmUgcmV0dXJuaW5nIHRvICVwXG4iLCBleGVjLT5yZXR1cm5QQygpLnZhbHVlKCkpOwogICAg
ICAgICBkYXRhTG9nRigiVGhlIG5ldyBjZnIgd2lsbCBiZSAlcFxuIiwgZXhlYy0+Y2FsbGVyRnJh
bWUoKSk7CiAgICAgfQpAQCAtMjY0LDcgKzI2NCw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNw
ZWNpYWxfdHJhY2UpCiAgICAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwKICAgICAgICAgICAg
IGV4ZWMsCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnRwdHJfdD4ocGMgLSBleGVjLT5jb2Rl
QmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSksCi0gICAgICAgICAgICBleGVjLT5nbG9i
YWxEYXRhKCkuaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHBjWzBdLnUub3Bjb2RlKSwKKyAgICAg
ICAgICAgIGV4ZWMtPnZtKCkuaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHBjWzBdLnUub3Bjb2Rl
KSwKICAgICAgICAgICAgIGV4ZWMtPnJldHVyblBDKCkudmFsdWUoKSk7CiAgICAgTExJTlRfRU5E
X0lNUEwoKTsKIH0KQEAgLTI3Myw3ICsyNzMsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzcGVj
aWFsX3RyYWNlKQogaW5saW5lIGJvb2wgc2hvdWxkSklUKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICAvLyBZb3UgY2FuIG1vZGlmeSB0aGlzIHRvIHR1cm4gb2ZmIEpJVHRpbmcgd2l0aG91dCByZWJ1
aWxkaW5nIHRoZSB3b3JsZC4KLSAgICByZXR1cm4gZXhlYy0+Z2xvYmFsRGF0YSgpLmNhblVzZUpJ
VCgpOworICAgIHJldHVybiBleGVjLT52bSgpLmNhblVzZUpJVCgpOwogfQogCiAvLyBSZXR1cm5z
IHRydWUgaWYgd2Ugc2hvdWxkIHRyeSB0byBPU1IuCkBAIC00MTQsMTMgKzQxNCwxMyBAQCBMTElO
VF9TTE9XX1BBVEhfREVDTChzdGFja19jaGVjaykKICAgICBkYXRhTG9nRigiQ29kZUJsb2NrID0g
JXAuXG4iLCBleGVjLT5jb2RlQmxvY2soKSk7CiAgICAgZGF0YUxvZ0YoIk51bSBjYWxsZWUgcmVn
aXN0ZXJzID0gJXUuXG4iLCBleGVjLT5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMp
OwogICAgIGRhdGFMb2dGKCJOdW0gdmFycyA9ICV1LlxuIiwgZXhlYy0+Y29kZUJsb2NrKCktPm1f
bnVtVmFycyk7Ci0gICAgZGF0YUxvZ0YoIkN1cnJlbnQgZW5kIGlzIGF0ICVwLlxuIiwgZXhlYy0+
Z2xvYmFsRGF0YSgpLmludGVycHJldGVyLT5zdGFjaygpLmVuZCgpKTsKKyAgICBkYXRhTG9nRigi
Q3VycmVudCBlbmQgaXMgYXQgJXAuXG4iLCBleGVjLT52bSgpLmludGVycHJldGVyLT5zdGFjaygp
LmVuZCgpKTsKICNlbmRpZgotICAgIEFTU0VSVCgmZXhlYy0+cmVnaXN0ZXJzKClbZXhlYy0+Y29k
ZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzXSA+IGV4ZWMtPmdsb2JhbERhdGEoKS5pbnRl
cnByZXRlci0+c3RhY2soKS5lbmQoKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFnbG9iYWxEYXRhLmlu
dGVycHJldGVyLT5zdGFjaygpLmdyb3coJmV4ZWMtPnJlZ2lzdGVycygpW2V4ZWMtPmNvZGVCbG9j
aygpLT5tX251bUNhbGxlZVJlZ2lzdGVyc10pKSkgeworICAgIEFTU0VSVCgmZXhlYy0+cmVnaXN0
ZXJzKClbZXhlYy0+Y29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzXSA+IGV4ZWMtPnZt
KCkuaW50ZXJwcmV0ZXItPnN0YWNrKCkuZW5kKCkpOworICAgIGlmIChVTkxJS0VMWSghdm0uaW50
ZXJwcmV0ZXItPnN0YWNrKCkuZ3JvdygmZXhlYy0+cmVnaXN0ZXJzKClbZXhlYy0+Y29kZUJsb2Nr
KCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzXSkpKSB7CiAgICAgICAgIFJldHVybkFkZHJlc3NQdHIg
cmV0dXJuUEMgPSBleGVjLT5yZXR1cm5QQygpOwogICAgICAgICBleGVjID0gZXhlYy0+Y2FsbGVy
RnJhbWUoKTsKLSAgICAgICAgZ2xvYmFsRGF0YS5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJm
bG93RXJyb3IoZXhlYyk7CisgICAgICAgIHZtLmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZs
b3dFcnJvcihleGVjKTsKICAgICAgICAgaW50ZXJwcmV0ZXJUaHJvd0luQ2FsbGVyKGV4ZWMsIHJl
dHVyblBDKTsKICAgICAgICAgcGMgPSByZXR1cm5Ub1Rocm93Rm9yVGhyb3duRXhjZXB0aW9uKGV4
ZWMpOwogICAgIH0KQEAgLTQzMCwxMSArNDMwLDExIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHN0
YWNrX2NoZWNrKQogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NhbGxfYXJpdHlDaGVj
aykKIHsKICAgICBMTElOVF9CRUdJTigpOwotICAgIEV4ZWNTdGF0ZSogbmV3RXhlYyA9IENvbW1v
blNsb3dQYXRoczo6YXJpdHlDaGVja0ZvcihleGVjLCAmZ2xvYmFsRGF0YS5pbnRlcnByZXRlci0+
c3RhY2soKSwgQ29kZUZvckNhbGwpOworICAgIEV4ZWNTdGF0ZSogbmV3RXhlYyA9IENvbW1vblNs
b3dQYXRoczo6YXJpdHlDaGVja0ZvcihleGVjLCAmdm0uaW50ZXJwcmV0ZXItPnN0YWNrKCksIENv
ZGVGb3JDYWxsKTsKICAgICBpZiAoIW5ld0V4ZWMpIHsKICAgICAgICAgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5QQyA9IGV4ZWMtPnJldHVyblBDKCk7CiAgICAgICAgIGV4ZWMgPSBleGVjLT5jYWxs
ZXJGcmFtZSgpOwotICAgICAgICBnbG9iYWxEYXRhLmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3Zl
cmZsb3dFcnJvcihleGVjKTsKKyAgICAgICAgdm0uZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVy
Zmxvd0Vycm9yKGV4ZWMpOwogICAgICAgICBpbnRlcnByZXRlclRocm93SW5DYWxsZXIoZXhlYywg
cmV0dXJuUEMpOwogICAgICAgICBMTElOVF9SRVRVUk5fVFdPKGJpdHdpc2VfY2FzdDx2b2lkKj4o
c3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSksIGV4ZWMpOwogICAgIH0KQEAgLTQ0NCwxMSArNDQ0
LDExIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jYWxsX2FyaXQKIExMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3RfYXJpdHlDaGVjaykKIHsKICAgICBMTElO
VF9CRUdJTigpOwotICAgIEV4ZWNTdGF0ZSogbmV3RXhlYyA9IENvbW1vblNsb3dQYXRoczo6YXJp
dHlDaGVja0ZvcihleGVjLCAmZ2xvYmFsRGF0YS5pbnRlcnByZXRlci0+c3RhY2soKSwgQ29kZUZv
ckNvbnN0cnVjdCk7CisgICAgRXhlY1N0YXRlKiBuZXdFeGVjID0gQ29tbW9uU2xvd1BhdGhzOjph
cml0eUNoZWNrRm9yKGV4ZWMsICZ2bS5pbnRlcnByZXRlci0+c3RhY2soKSwgQ29kZUZvckNvbnN0
cnVjdCk7CiAgICAgaWYgKCFuZXdFeGVjKSB7CiAgICAgICAgIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuUEMgPSBleGVjLT5yZXR1cm5QQygpOwogICAgICAgICBleGVjID0gZXhlYy0+Y2FsbGVyRnJh
bWUoKTsKLSAgICAgICAgZ2xvYmFsRGF0YS5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93
RXJyb3IoZXhlYyk7CisgICAgICAgIHZtLmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dF
cnJvcihleGVjKTsKICAgICAgICAgaW50ZXJwcmV0ZXJUaHJvd0luQ2FsbGVyKGV4ZWMsIHJldHVy
blBDKTsKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4oMSkpLCBleGVjKTsKICAgICB9CkBAIC00NjEsNyArNDYxLDcgQEAg
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9hYwogI2lmIExMSU5UX1NMT1df
UEFUSF9UUkFDSU5HCiAgICAgZGF0YUxvZ0YoIkNyZWF0aW5nIGFuIGFjdGl2YXRpb24sIGV4ZWMg
PSAlcCFcbiIsIGV4ZWMpOwogI2VuZGlmCi0gICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0g
SlNBY3RpdmF0aW9uOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZXhlYywgZXhlYy0+Y29kZUJsb2NrKCkp
OworICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKHZt
LCBleGVjLCBleGVjLT5jb2RlQmxvY2soKSk7CiAgICAgZXhlYy0+c2V0U2NvcGUoYWN0aXZhdGlv
bik7CiAgICAgTExJTlRfUkVUVVJOKEpTVmFsdWUoYWN0aXZhdGlvbikpOwogfQpAQCAtNDY5LDcg
KzQ2OSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfYWMKIExMSU5U
X1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfYXJndW1lbnRzKQogewogICAgIExMSU5U
X0JFR0lOKCk7Ci0gICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVlKEFyZ3VtZW50czo6Y3Jl
YXRlKGdsb2JhbERhdGEsIGV4ZWMpKTsKKyAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWUo
QXJndW1lbnRzOjpjcmVhdGUodm0sIGV4ZWMpKTsKICAgICBMTElOVF9DSEVDS19FWENFUFRJT04o
KTsKICAgICBleGVjLT51bmNoZWNrZWRSKHBjWzFdLnUub3BlcmFuZCkgPSBhcmd1bWVudHM7CiAg
ICAgZXhlYy0+dW5jaGVja2VkUih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIocGNbMV0udS5v
cGVyYW5kKSkgPSBhcmd1bWVudHM7CkBAIC01MzMsNyArNTMzLDcgQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX25ld19yZWdleAogICAgIFJlZ0V4cCogcmVnRXhwID0gZXhlYy0+Y29k
ZUJsb2NrKCktPnJlZ2V4cChwY1syXS51Lm9wZXJhbmQpOwogICAgIGlmICghcmVnRXhwLT5pc1Zh
bGlkKCkpCiAgICAgICAgIExMSU5UX1RIUk9XKGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsICJJbnZh
bGlkIGZsYWcgc3VwcGxpZWQgdG8gUmVnRXhwIGNvbnN0cnVjdG9yLiIpKTsKLSAgICBMTElOVF9S
RVRVUk4oUmVnRXhwT2JqZWN0OjpjcmVhdGUoZ2xvYmFsRGF0YSwgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgp
LCByZWdFeHApKTsKKyAgICBMTElOVF9SRVRVUk4oUmVnRXhwT2JqZWN0OjpjcmVhdGUodm0sIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5y
ZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9ub3QpCkBAIC04NDQsNyArODQ0LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX3Jlc29sdmVfYgogICAgIGlmIChwY1szXS51Lm9wZXJhbmQpIHsKICAgICAgICAgcmVz
dWx0ID0gSlNTY29wZTo6cmVzb2x2ZUJhc2UoZXhlYywgaWRlbnQsIHRydWUsIG9wZXJhdGlvbnMs
IHBjWzVdLnUucHV0VG9CYXNlT3BlcmF0aW9uKTsKICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAg
ICAgICAgICBMTElOVF9USFJPVyhnbG9iYWxEYXRhLmV4Y2VwdGlvbik7CisgICAgICAgICAgICBM
TElOVF9USFJPVyh2bS5leGNlcHRpb24pOwogICAgIH0gZWxzZQogICAgICAgICByZXN1bHQgPSBK
U1Njb3BlOjpyZXNvbHZlQmFzZShleGVjLCBpZGVudCwgZmFsc2UsIG9wZXJhdGlvbnMsIHBjWzVd
LnUucHV0VG9CYXNlT3BlcmF0aW9uKTsKIApAQCAtOTM5LDcgKzkzOSw3IEBAIExMSU5UX1NMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfYnlfaWQKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPmlz
VW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkKICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPnR5cGVJ
bmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkpIHsKICAgICAgICAgICAgIHBjWzRdLnUu
c3RydWN0dXJlLnNldCgKLSAgICAgICAgICAgICAgICBnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgcGNbMF0u
dS5vcGNvZGUgPSBMTEludDo6Z2V0T3Bjb2RlKGxsaW50X29wX2dldF9ieV9pZCk7CiAgICAgICAg
ICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpOwpAQCAtOTg2LDcgKzk4Niw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9wdXRfYnlfaWQKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IExMSU5UX09QX0MoMSkuanNW
YWx1ZSgpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGNvZGVCbG9jay0+aXNTdHJpY3RNb2Rl
KCkpOwogICAgIGlmIChwY1s4XS51Lm9wZXJhbmQpCi0gICAgICAgIGFzT2JqZWN0KGJhc2VWYWx1
ZSktPnB1dERpcmVjdChnbG9iYWxEYXRhLCBpZGVudCwgTExJTlRfT1BfQygzKS5qc1ZhbHVlKCks
IHNsb3QpOworICAgICAgICBhc09iamVjdChiYXNlVmFsdWUpLT5wdXREaXJlY3Qodm0sIGlkZW50
LCBMTElOVF9PUF9DKDMpLmpzVmFsdWUoKSwgc2xvdCk7CiAgICAgZWxzZQogICAgICAgICBiYXNl
VmFsdWUucHV0KGV4ZWMsIGlkZW50LCBMTElOVF9PUF9DKDMpLmpzVmFsdWUoKSwgc2xvdCk7CiAg
ICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CkBAIC0xMDEzLDE3ICsxMDEzLDE3IEBAIExMSU5U
X1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICAgICAgICAgICAgICAgICAg
aWYgKG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIGJhc2VDZWxsKSAhPSBJbnZhbGlkUHJv
dG90eXBlQ2hhaW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUt
PnByZXZpb3VzSUQoKS0+aXNPYmplY3QoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBwY1s0
XS51LnN0cnVjdHVyZS5zZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsRGF0
YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLT5wcmV2aW91c0lEKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNs
b3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgSlNPYmplY3Q6Om9mZnNldE9m
SW5saW5lU3RvcmFnZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldEluQnV0dGVyZmx5KHNs
b3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgcGNbNl0udS5zdHJ1Y3R1cmUuc2V0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiog
Y2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGNoYWluKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHBjWzddLnUu
c3RydWN0dXJlQ2hhaW4uc2V0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbERh
dGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNoYWluKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2hhaW4pOwog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwY1s4XS51
Lm9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZz
ZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCkBAIC0xMDQwLDcgKzEwNDAsNyBAQCBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkCiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBwY1s0XS51LnN0cnVjdHVyZS5zZXQoCi0g
ICAgICAgICAgICAgICAgICAgIGdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9m
ZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewogICAgICAgICAgICAgICAgICAgICBwY1swXS51
Lm9wY29kZSA9IExMSW50OjpnZXRPcGNvZGUobGxpbnRfb3BfcHV0X2J5X2lkKTsKICAgICAgICAg
ICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgSlNPYmplY3Q6Om9mZnNldE9mSW5s
aW5lU3RvcmFnZSgpOwpAQCAtMTEwMCw3ICsxMTAwLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2dldF9hcmd1bQogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgSlNWYWx1ZSBhcmd1
bWVudHMgPSBMTElOVF9PUCgyKS5qc1ZhbHVlKCk7CiAgICAgaWYgKCFhcmd1bWVudHMpIHsKLSAg
ICAgICAgYXJndW1lbnRzID0gQXJndW1lbnRzOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZXhlYyk7Cisg
ICAgICAgIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKHZtLCBleGVjKTsKICAgICAgICAg
TExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgICAgIExMSU5UX09QKDIpID0gYXJndW1lbnRz
OwogICAgICAgICBleGVjLT51bmNoZWNrZWRSKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihw
Y1syXS51Lm9wZXJhbmQpKSA9IGFyZ3VtZW50czsKQEAgLTExMjgsNyArMTEyOCw3IEBAIExMSU5U
X1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfdmEKICAgICAgICAgaWYgKGJhc2VWYWx1
ZS5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qo
YmFzZVZhbHVlKTsKICAgICAgICAgICAgIGlmIChvYmplY3QtPmNhblNldEluZGV4UXVpY2tseShp
KSkKLSAgICAgICAgICAgICAgICBvYmplY3QtPnNldEluZGV4UXVpY2tseShnbG9iYWxEYXRhLCBp
LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHkodm0sIGks
IHZhbHVlKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhv
ZFRhYmxlKCktPnB1dEJ5SW5kZXgob2JqZWN0LCBleGVjLCBpLCB2YWx1ZSwgZXhlYy0+Y29kZUJs
b2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICAgICAgICAgIExMSU5UX0VORCgpOwpAQCAtMTIw
Myw5ICsxMjAzLDkgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9nZXR0ZQog
ICAgIEFTU0VSVChnZXR0ZXIuaXNPYmplY3QoKSB8fCBzZXR0ZXIuaXNPYmplY3QoKSk7CiAgICAg
CiAgICAgaWYgKCFnZXR0ZXIuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgYWNjZXNzb3ItPnNldEdl
dHRlcihnbG9iYWxEYXRhLCBhc09iamVjdChnZXR0ZXIpKTsKKyAgICAgICAgYWNjZXNzb3ItPnNl
dEdldHRlcih2bSwgYXNPYmplY3QoZ2V0dGVyKSk7CiAgICAgaWYgKCFzZXR0ZXIuaXNVbmRlZmlu
ZWQoKSkKLSAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihnbG9iYWxEYXRhLCBhc09iamVjdChz
ZXR0ZXIpKTsKKyAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcih2bSwgYXNPYmplY3Qoc2V0dGVy
KSk7CiAgICAgYmFzZU9iai0+cHV0RGlyZWN0QWNjZXNzb3IoCiAgICAgICAgIGV4ZWMsCiAgICAg
ICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHBjWzJdLnUub3BlcmFuZCksCkBAIC0x
MzQzLDcgKzEzNDMsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2Z1bmNf
CiBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZXhl
Y0NhbGxlZSwgSW5zdHJ1Y3Rpb24qIHBjLCBKU1ZhbHVlIGNhbGxlZSwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxl
ckZyYW1lKCk7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKICAgICBleGVjQ2FsbGVlLT5zZXRTY29w
ZShleGVjLT5zY29wZSgpKTsKICAgICBleGVjQ2FsbGVlLT5zZXRDb2RlQmxvY2soMCk7CkBAIC0x
MzU2LDkgKzEzNTYsOSBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxs
CiAgICAgICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZUpTKTsKICAgICAKICAgICAgICAg
aWYgKGNhbGxUeXBlID09IENhbGxUeXBlSG9zdCkgewotICAgICAgICAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlY0NhbGxlZSk7CisgICAgICAgICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlY0NhbGxlZSk7CiAgICAgICAgICAg
ICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7Ci0gICAgICAgICAgICBn
bG9iYWxEYXRhLmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEu
bmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKKyAgICAgICAgICAgIHZtLmhvc3RDYWxsUmV0
dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWND
YWxsZWUpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZXhl
Y0NhbGxlZSwgcGMsIExMSW50OjpnZXRDb2RlUHRyKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpKTsK
ICAgICAgICAgfQpAQCAtMTM3OSw5ICsxMzc5LDkgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlw
ZSBoYW5kbGVIb3N0Q2FsbAogICAgIEFTU0VSVChjb25zdHJ1Y3RUeXBlICE9IENvbnN0cnVjdFR5
cGVKUyk7CiAgICAgCiAgICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZUhvc3Qp
IHsKLSAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhl
Y0NhbGxlZSk7CisgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
Q2FsbGVlKTsKICAgICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkp
OwotICAgICAgICBnbG9iYWxEYXRhLmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOworICAgICAgICB2
bS5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0
aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKIAogICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihl
eGVjQ2FsbGVlLCBwYywgTExJbnQ6OmdldENvZGVQdHIoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkp
OwogICAgIH0KQEAgLTE0MDYsNyArMTQwNiw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUg
c2V0VXBDYWxsKEV4ZWMKICAgICAKICAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNG
dW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKICAgICBKU1Njb3BlKiBzY29wZSA9IGNh
bGxlZS0+c2NvcGVVbmNoZWNrZWQoKTsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSAq
c2NvcGUtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSAqc2NvcGUtPnZtKCk7CiAgICAgZXhl
Y0NhbGxlZS0+c2V0U2NvcGUoc2NvcGUpOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxl
ID0gY2FsbGVlLT5leGVjdXRhYmxlKCk7CiAgICAgCkBAIC0xNDMxLDggKzE0MzEsOCBAQCBpbmxp
bmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChFeGVjCiAgICAgICAgIGlmIChjYWxsTGlu
a0luZm8tPmlzT25MaXN0KCkpCiAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnJlbW92ZSgpOwog
ICAgICAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZXIgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgp
OwotICAgICAgICBjYWxsTGlua0luZm8tPmNhbGxlZS5zZXQoZ2xvYmFsRGF0YSwgZXhlY0NhbGxl
ci0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwotICAgICAgICBjYWxs
TGlua0luZm8tPmxhc3RTZWVuQ2FsbGVlLnNldChnbG9iYWxEYXRhLCBleGVjQ2FsbGVyLT5jb2Rl
QmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CisgICAgICAgIGNhbGxMaW5rSW5m
by0+Y2FsbGVlLnNldCh2bSwgZXhlY0NhbGxlci0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJs
ZSgpLCBjYWxsZWUpOworICAgICAgICBjYWxsTGlua0luZm8tPmxhc3RTZWVuQ2FsbGVlLnNldCh2
bSwgZXhlY0NhbGxlci0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwog
ICAgICAgICBjYWxsTGlua0luZm8tPm1hY2hpbmVDb2RlVGFyZ2V0ID0gY29kZVB0cjsKICAgICAg
ICAgaWYgKGNvZGVCbG9jaykKICAgICAgICAgICAgIGNvZGVCbG9jay0+bGlua0luY29taW5nQ2Fs
bChjYWxsTGlua0luZm8pOwpAQCAtMTQ4NCw3ICsxNDg0LDcgQEAgTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX2NhbGxfdmFyYQogICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IExMSU5U
X09QX0MoMSkuanNWYWx1ZSgpOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSA9IGxv
YWRWYXJhcmdzKAotICAgICAgICBleGVjLCAmZ2xvYmFsRGF0YS5pbnRlcnByZXRlci0+c3RhY2so
KSwKKyAgICAgICAgZXhlYywgJnZtLmludGVycHJldGVyLT5zdGFjaygpLAogICAgICAgICBMTElO
VF9PUF9DKDIpLmpzVmFsdWUoKSwgTExJTlRfT1BfQygzKS5qc1ZhbHVlKCksIHBjWzRdLnUub3Bl
cmFuZCk7CiAgICAgTExJTlRfQ0FMTF9DSEVDS19FWENFUFRJT04oZXhlYywgcGMpOwogICAgIApA
QCAtMTUxMyw3ICsxNTEzLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NhbGxf
ZXZhbAogICAgIGlmICghaXNIb3N0RnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSwgZ2xvYmFsRnVuY0V2
YWwpKQogICAgICAgICByZXR1cm4gc2V0VXBDYWxsKGV4ZWNDYWxsZWUsIHBjLCBDb2RlRm9yQ2Fs
bCwgY2FsbGVlQXNWYWx1ZSk7CiAgICAgCi0gICAgZ2xvYmFsRGF0YS5ob3N0Q2FsbFJldHVyblZh
bHVlID0gZXZhbChleGVjQ2FsbGVlKTsKKyAgICB2bS5ob3N0Q2FsbFJldHVyblZhbHVlID0gZXZh
bChleGVjQ2FsbGVlKTsKICAgICBMTElOVF9DQUxMX1JFVFVSTihleGVjQ2FsbGVlLCBwYywgTExJ
bnQ6OmdldENvZGVQdHIoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkpOwogfQogCkBAIC0xNTIxLDcg
KzE1MjEsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGVhcl9vZmZfCiB7CiAg
ICAgTExJTlRfQkVHSU4oKTsKICAgICBBU1NFUlQoZXhlYy0+Y29kZUJsb2NrKCktPm5lZWRzRnVs
bFNjb3BlQ2hhaW4oKSk7Ci0gICAganNDYXN0PEpTQWN0aXZhdGlvbio+KExMSU5UX09QKDEpLmpz
VmFsdWUoKSktPnRlYXJPZmYoZ2xvYmFsRGF0YSk7CisgICAganNDYXN0PEpTQWN0aXZhdGlvbio+
KExMSU5UX09QKDEpLmpzVmFsdWUoKSktPnRlYXJPZmYodm0pOwogICAgIExMSU5UX0VORCgpOwog
fQogCkBAIC0xNjM2LDcgKzE2MzYsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
ZGVidWcpCiAgICAgaW50IGxhc3RMaW5lID0gcGNbM10udS5vcGVyYW5kOwogICAgIGludCBjb2x1
bW4gPSBwY1s0XS51Lm9wZXJhbmQ7CiAKLSAgICBnbG9iYWxEYXRhLmludGVycHJldGVyLT5kZWJ1
ZyhleGVjLCBzdGF0aWNfY2FzdDxEZWJ1Z0hvb2tJRD4oZGVidWdIb29rSUQpLCBmaXJzdExpbmUs
IGxhc3RMaW5lLCBjb2x1bW4pOworICAgIHZtLmludGVycHJldGVyLT5kZWJ1ZyhleGVjLCBzdGF0
aWNfY2FzdDxEZWJ1Z0hvb2tJRD4oZGVidWdIb29rSUQpLCBmaXJzdExpbmUsIGxhc3RMaW5lLCBj
b2x1bW4pOwogICAgIAogICAgIExMSU5UX0VORCgpOwogfQpAQCAtMTY0NCw3ICsxNjQ0LDcgQEAg
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2RlYnVnKQogTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX3Byb2ZpbGVfd2lsbF9jYWxsKQogewogICAgIExMSU5UX0JFR0lOKCk7Ci0g
ICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IGdsb2JhbERhdGEuZW5hYmxlZFByb2Zp
bGVyKCkpCisgICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IHZtLmVuYWJsZWRQcm9m
aWxlcigpKQogICAgICAgICBwcm9maWxlci0+d2lsbEV4ZWN1dGUoZXhlYywgTExJTlRfT1AoMSku
anNWYWx1ZSgpKTsKICAgICBMTElOVF9FTkQoKTsKIH0KQEAgLTE2NTIsNyArMTY1Miw3IEBAIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wcm9maWxlX3cKIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9wcm9maWxlX2RpZF9jYWxsKQogewogICAgIExMSU5UX0JFR0lOKCk7Ci0g
ICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IGdsb2JhbERhdGEuZW5hYmxlZFByb2Zp
bGVyKCkpCisgICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IHZtLmVuYWJsZWRQcm9m
aWxlcigpKQogICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0ZShleGVjLCBMTElOVF9PUCgxKS5q
c1ZhbHVlKCkpOwogICAgIExMSU5UX0VORCgpOwogfQpAQCAtMTY2MCw3ICsxNjYwLDcgQEAgTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Byb2ZpbGVfZAogTExJTlRfU0xPV19QQVRIX0RF
Q0wodGhyb3dfZnJvbV9uYXRpdmVfY2FsbCkKIHsKICAgICBMTElOVF9CRUdJTigpOwotICAgIEFT
U0VSVChnbG9iYWxEYXRhLmV4Y2VwdGlvbik7CisgICAgQVNTRVJUKHZtLmV4Y2VwdGlvbik7CiAg
ICAgTExJTlRfRU5EKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFRodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50VGh1bmtzLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsKIAogI2lmICFFTkFCTEUoTExJTlRf
Q19MT09QKQogCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyYXRlVGh1bmtXaXRo
SnVtcFRvKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgdm9pZCAoKnRhcmdldCkoKSwgY29uc3Qg
Y2hhciAqdGh1bmtLaW5kKQorc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5lcmF0ZVRo
dW5rV2l0aEp1bXBUbyhWTSogdm0sIHZvaWQgKCp0YXJnZXQpKCksIGNvbnN0IGNoYXIgKnRodW5r
S2luZCkKIHsKICAgICBKU0ludGVyZmFjZUpJVCBqaXQ7CiAgICAgCkBAIC00NiwzOCArNDYsMzgg
QEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5lcmF0ZVRodQogICAgIGppdC5tb3Zl
KEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4odGFyZ2V0
KSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7CiAgICAgaml0Lmp1bXAoSlNJbnRlcmZhY2VKSVQ6
OnJlZ1QwKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAm
aml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAm
aml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCAoIkxMSW50ICVzIHByb2xvZ3VlIHRodW5rIiwgdGh1bmtLaW5kKSk7CiB9CiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvckNhbGxFbnRyeVRodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvckNh
bGxFbnRyeVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gZ2VuZXJhdGVUaHVu
a1dpdGhKdW1wVG8oZ2xvYmFsRGF0YSwgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUs
ICJmdW5jdGlvbiBmb3IgY2FsbCIpOworICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBU
byh2bSwgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUsICJmdW5jdGlvbiBmb3IgY2Fs
bCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JDb25zdHJ1Y3RFbnRy
eVRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiBmdW5jdGlvbkZvckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQog
ewotICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyhnbG9iYWxEYXRhLCBsbGludF9m
dW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlLCAiZnVuY3Rpb24gZm9yIGNvbnN0cnVjdCIp
OworICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyh2bSwgbGxpbnRfZnVuY3Rpb25f
Zm9yX2NvbnN0cnVjdF9wcm9sb2d1ZSwgImZ1bmN0aW9uIGZvciBjb25zdHJ1Y3QiKTsKIH0KIAot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVy
YXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVu
Y3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1
cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8oZ2xvYmFsRGF0YSwgbGxpbnRfZnVuY3Rpb25fZm9y
X2NhbGxfYXJpdHlfY2hlY2ssICJmdW5jdGlvbiBmb3IgY2FsbCB3aXRoIGFyaXR5IGNoZWNrIik7
CisgICAgcmV0dXJuIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKHZtLCBsbGludF9mdW5jdGlvbl9m
b3JfY2FsbF9hcml0eV9jaGVjaywgImZ1bmN0aW9uIGZvciBjYWxsIHdpdGggYXJpdHkgY2hlY2si
KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ29uc3RydWN0QXJpdHlD
aGVja1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZiBmdW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcihW
TSogdm0pCiB7Ci0gICAgcmV0dXJuIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKGdsb2JhbERhdGEs
IGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2ssICJmdW5jdGlvbiBmb3Ig
Y29uc3RydWN0IHdpdGggYXJpdHkgY2hlY2siKTsKKyAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dp
dGhKdW1wVG8odm0sIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2ssICJm
dW5jdGlvbiBmb3IgY29uc3RydWN0IHdpdGggYXJpdHkgY2hlY2siKTsKIH0KIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGV2YWxFbnRyeVRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBldmFsRW50cnlUaHVua0dlbmVyYXRvcihWTSog
dm0pCiB7Ci0gICAgcmV0dXJuIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKGdsb2JhbERhdGEsIGxs
aW50X2V2YWxfcHJvbG9ndWUsICJldmFsIik7CisgICAgcmV0dXJuIGdlbmVyYXRlVGh1bmtXaXRo
SnVtcFRvKHZtLCBsbGludF9ldmFsX3Byb2xvZ3VlLCAiZXZhbCIpOwogfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgcHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9y
KFZNKiB2bSkKIHsKLSAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8oZ2xvYmFsRGF0
YSwgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZSwgInByb2dyYW0iKTsKKyAgICByZXR1cm4gZ2VuZXJh
dGVUaHVua1dpdGhKdW1wVG8odm0sIGxsaW50X3Byb2dyYW1fcHJvbG9ndWUsICJwcm9ncmFtIik7
CiB9CiAKICNlbmRpZiAvLyAhRU5BQkxFKExMSU5UX0NfTE9PUCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsMTYgKzM0LDE2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU0dsb2JhbERhdGE7
CitjbGFzcyBWTTsKIAogbmFtZXNwYWNlIExMSW50IHsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGZ1bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7Ci1NYWNy
b0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JDb25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9y
KEpTR2xvYmFsRGF0YSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ2FsbEFy
aXR5Q2hlY2tUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBmdW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcihKU0dsb2Jh
bERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBldmFsRW50cnlUaHVua0dlbmVyYXRvcihK
U0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBwcm9ncmFtRW50cnlUaHVua0dl
bmVyYXRvcihKU0dsb2JhbERhdGEqKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZv
ckNhbGxFbnRyeVRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVu
Y3Rpb25Gb3JDb25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgZnVuY3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKFZNKik7CitN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JDb25zdHJ1Y3RBcml0eUNoZWNrVGh1bmtH
ZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBldmFsRW50cnlUaHVua0dlbmVy
YXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHByb2dyYW1FbnRyeVRodW5rR2VuZXJh
dG9yKFZNKik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpMTEludAogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMy
XzY0LmFzbQkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTMwMiw5ICsz
MDIsOSBAQCBtYWNybyBmdW5jdGlvbkFyaXR5Q2hlY2soZG9uZUxhYmVsLCBzbG93CiAgICAgY0Nh
bGwyKHNsb3dfcGF0aCwgY2ZyLCBQQykgICAjIFRoaXMgc2xvd19wYXRoIGhhcyBhIHNpbXBsZSBw
cm90b2NvbDogdDAgPSAwID0+IG5vIGVycm9yLCB0MCAhPSAwID0+IGVycm9yCiAgICAgbW92ZSB0
MSwgY2ZyCiAgICAgYnRpeiB0MCwgLmNvbnRpbnVlCi0gICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6
Z2xvYmFsRGF0YVtzcF0sIHQxCi0gICAgbG9hZHAgSlNHbG9iYWxEYXRhOjpjYWxsRnJhbWVGb3JU
aHJvd1t0MV0sIHQwCi0gICAgam1wIEpTR2xvYmFsRGF0YTo6dGFyZ2V0TWFjaGluZVBDRm9yVGhy
b3dbdDFdCisgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6dm1bc3BdLCB0MQorICAgIGxvYWRwIFZN
OjpjYWxsRnJhbWVGb3JUaHJvd1t0MV0sIHQwCisgICAgam1wIFZNOjp0YXJnZXRNYWNoaW5lUENG
b3JUaHJvd1t0MV0KIC5jb250aW51ZToKICAgICAjIFJlbG9hZCBDb2RlQmxvY2sgYW5kIFBDLCBz
aW5jZSB0aGUgc2xvd19wYXRoIGNsb2JiZXJlZCBpdC4KICAgICBsb2FkcCBDb2RlQmxvY2tbY2Zy
XSwgdDEKQEAgLTE3NjEsMTQgKzE3NjEsMTQgQEAgX2xsaW50X29wX2NhdGNoOgogICAgICMgdGhl
IGludGVycHJldGVyJ3MgdGhyb3cgdHJhbXBvbGluZSAoc2VlIF9sbGludF90aHJvd190cmFtcG9s
aW5lKS4KICAgICAjIFRoZSBKSVQgdGhyb3dpbmcgcHJvdG9jb2wgY2FsbHMgZm9yIHRoZSBjZnIg
dG8gYmUgaW4gdDAuIFRoZSB0aHJvd2luZwogICAgICMgY29kZSBtdXN0IGhhdmUga25vd24gdGhh
dCB3ZSB3ZXJlIHRocm93aW5nIHRvIHRoZSBpbnRlcnByZXRlciwgYW5kIGhhdmUKLSAgICAjIHNl
dCBKU0dsb2JhbERhdGE6OnRhcmdldEludGVycHJldGVyUENGb3JUaHJvdy4KKyAgICAjIHNldCBW
TTo6dGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93LgogICAgIG1vdmUgdDAsIGNmcgotICAgIGxv
YWRwIEpJVFN0YWNrRnJhbWU6Omdsb2JhbERhdGFbc3BdLCB0MwotICAgIGxvYWRpIEpTR2xvYmFs
RGF0YTo6dGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93W3QzXSwgUEMKLSAgICBsb2FkaSBKU0ds
b2JhbERhdGE6OmV4Y2VwdGlvbiArIFBheWxvYWRPZmZzZXRbdDNdLCB0MAotICAgIGxvYWRpIEpT
R2xvYmFsRGF0YTo6ZXhjZXB0aW9uICsgVGFnT2Zmc2V0W3QzXSwgdDEKLSAgICBzdG9yZWkgMCwg
SlNHbG9iYWxEYXRhOjpleGNlcHRpb24gKyBQYXlsb2FkT2Zmc2V0W3QzXQotICAgIHN0b3JlaSBF
bXB0eVZhbHVlVGFnLCBKU0dsb2JhbERhdGE6OmV4Y2VwdGlvbiArIFRhZ09mZnNldFt0M10gICAg
ICAgCisgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6dm1bc3BdLCB0MworICAgIGxvYWRpIFZNOjp0
YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3dbdDNdLCBQQworICAgIGxvYWRpIFZNOjpleGNlcHRp
b24gKyBQYXlsb2FkT2Zmc2V0W3QzXSwgdDAKKyAgICBsb2FkaSBWTTo6ZXhjZXB0aW9uICsgVGFn
T2Zmc2V0W3QzXSwgdDEKKyAgICBzdG9yZWkgMCwgVk06OmV4Y2VwdGlvbiArIFBheWxvYWRPZmZz
ZXRbdDNdCisgICAgc3RvcmVpIEVtcHR5VmFsdWVUYWcsIFZNOjpleGNlcHRpb24gKyBUYWdPZmZz
ZXRbdDNdICAgICAgIAogICAgIGxvYWRpIDRbUENdLCB0MgogICAgIHN0b3JlaSB0MCwgUGF5bG9h
ZE9mZnNldFtjZnIsIHQyLCA4XQogICAgIHN0b3JlaSB0MSwgVGFnT2Zmc2V0W2NmciwgdDIsIDhd
CkBAIC0xODU1LDE2ICsxODU1LDE2IEBAIF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFt
cG9saW5lOgogICAgICMgV2hlbiB0aHJvd2luZyBmcm9tIHRoZSBpbnRlcnByZXRlciAoaS5lLiB0
aHJvd2luZyBmcm9tIExMSW50U2xvd1BhdGhzKSwgc28KICAgICAjIHRoZSB0aHJvdyB0YXJnZXQg
aXMgbm90IG5lY2Vzc2FyaWx5IGludGVycHJldGVkIGNvZGUsIHdlIGNvbWUgdG8gaGVyZS4KICAg
ICAjIFRoaXMgZXNzZW50aWFsbHkgZW11bGF0ZXMgdGhlIEpJVCdzIHRocm93aW5nIHByb3RvY29s
LgotICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6Omdsb2JhbERhdGFbc3BdLCB0MQotICAgIGxvYWRw
IEpTR2xvYmFsRGF0YTo6Y2FsbEZyYW1lRm9yVGhyb3dbdDFdLCB0MAotICAgIGptcCBKU0dsb2Jh
bERhdGE6OnRhcmdldE1hY2hpbmVQQ0ZvclRocm93W3QxXQorICAgIGxvYWRwIEpJVFN0YWNrRnJh
bWU6OnZtW3NwXSwgdDEKKyAgICBsb2FkcCBWTTo6Y2FsbEZyYW1lRm9yVGhyb3dbdDFdLCB0MAor
ICAgIGptcCBWTTo6dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3dbdDFdCiAKIAogX2xsaW50X3Rocm93
X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CiAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJD
YWxsKHQyKQotICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6Omdsb2JhbERhdGFbc3BdLCB0MQotICAg
IGxvYWRwIEpTR2xvYmFsRGF0YTo6Y2FsbEZyYW1lRm9yVGhyb3dbdDFdLCB0MAotICAgIGptcCBK
U0dsb2JhbERhdGE6OnRhcmdldE1hY2hpbmVQQ0ZvclRocm93W3QxXQorICAgIGxvYWRwIEpJVFN0
YWNrRnJhbWU6OnZtW3NwXSwgdDEKKyAgICBsb2FkcCBWTTo6Y2FsbEZyYW1lRm9yVGhyb3dbdDFd
LCB0MAorICAgIGptcCBWTTo6dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3dbdDFdCiAKIAogbWFjcm8g
bmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pCkBAIC0xODc0
LDggKzE4NzQsOCBAQCBtYWNybyBuYXRpdmVDYWxsVHJhbXBvbGluZShleGVjdXRhYmxlT2ZmCiAg
ICAgc3RvcmVpIENlbGxUYWcsIFNjb3BlQ2hhaW4gKyBUYWdPZmZzZXRbY2ZyXQogICAgIHN0b3Jl
aSB0MSwgU2NvcGVDaGFpbiArIFBheWxvYWRPZmZzZXRbY2ZyXQogICAgIGlmIFg4NgotICAgICAg
ICBsb2FkcCBKSVRTdGFja0ZyYW1lOjpnbG9iYWxEYXRhICsgNFtzcF0sIHQzICMgQWRkaXRpb25h
bCBvZmZzZXQgZm9yIHJldHVybiBhZGRyZXNzCi0gICAgICAgIHN0b3JlcCBjZnIsIEpTR2xvYmFs
RGF0YTo6dG9wQ2FsbEZyYW1lW3QzXQorICAgICAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjp2bSAr
IDRbc3BdLCB0MyAjIEFkZGl0aW9uYWwgb2Zmc2V0IGZvciByZXR1cm4gYWRkcmVzcworICAgICAg
ICBzdG9yZXAgY2ZyLCBWTTo6dG9wQ2FsbEZyYW1lW3QzXQogICAgICAgICBwZWVrIDAsIHQxCiAg
ICAgICAgIHN0b3JlcCB0MSwgUmV0dXJuUENbY2ZyXQogICAgICAgICBtb3ZlIGNmciwgdDIgICMg
dDIgPSBlY3gKQEAgLTE4ODUsMTAgKzE4ODUsMTAgQEAgbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xp
bmUoZXhlY3V0YWJsZU9mZgogICAgICAgICBtb3ZlIHQwLCBjZnIKICAgICAgICAgY2FsbCBleGVj
dXRhYmxlT2Zmc2V0VG9GdW5jdGlvblt0MV0KICAgICAgICAgYWRkcCAxNiAtIDQsIHNwCi0gICAg
ICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6Omdsb2JhbERhdGEgKyA0W3NwXSwgdDMKKyAgICAgICAg
bG9hZHAgSklUU3RhY2tGcmFtZTo6dm0gKyA0W3NwXSwgdDMKICAgICBlbHNpZiBBUk0gb3IgQVJN
djcgb3IgQVJNdjdfVFJBRElUSU9OQUwKLSAgICAgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xv
YmFsRGF0YVtzcF0sIHQzCi0gICAgICAgIHN0b3JlcCBjZnIsIEpTR2xvYmFsRGF0YTo6dG9wQ2Fs
bEZyYW1lW3QzXQorICAgICAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjp2bVtzcF0sIHQzCisgICAg
ICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BDYWxsRnJhbWVbdDNdCiAgICAgICAgIG1vdmUgdDAsIHQy
CiAgICAgICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbCh0MykKICAgICAgICAgc3Rv
cmVwIHQzLCBSZXR1cm5QQ1tjZnJdCkBAIC0xODk4LDEwICsxODk4LDEwIEBAIG1hY3JvIG5hdGl2
ZUNhbGxUcmFtcG9saW5lKGV4ZWN1dGFibGVPZmYKICAgICAgICAgbW92ZSB0MiwgY2ZyCiAgICAg
ICAgIGNhbGwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb25bdDFdCiAgICAgICAgIHJlc3RvcmVS
ZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHQzKQotICAgICAgICBsb2FkcCBKSVRTdGFja0ZyYW1l
OjpnbG9iYWxEYXRhW3NwXSwgdDMKKyAgICAgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6dm1bc3Bd
LCB0MwogICAgIGVsc2lmIE1JUFMKLSAgICAgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFs
RGF0YVtzcF0sIHQzCi0gICAgICAgIHN0b3JlcCBjZnIsIEpTR2xvYmFsRGF0YTo6dG9wQ2FsbEZy
YW1lW3QzXQorICAgICAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjp2bVtzcF0sIHQzCisgICAgICAg
IHN0b3JlcCBjZnIsIFZNOjp0b3BDYWxsRnJhbWVbdDNdCiAgICAgICAgIG1vdmUgdDAsIHQyCiAg
ICAgICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbCh0MykKICAgICAgICAgc3RvcmVw
IHQzLCBSZXR1cm5QQ1tjZnJdCkBAIC0xOTEyLDEwICsxOTEyLDEwIEBAIG1hY3JvIG5hdGl2ZUNh
bGxUcmFtcG9saW5lKGV4ZWN1dGFibGVPZmYKICAgICAgICAgbW92ZSB0MCwgYTAKICAgICAgICAg
Y2FsbCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvblt0MV0KICAgICAgICAgcmVzdG9yZVJldHVy
bkFkZHJlc3NCZWZvcmVSZXR1cm4odDMpCi0gICAgICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6Omds
b2JhbERhdGFbc3BdLCB0MworICAgICAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjp2bVtzcF0sIHQz
CiAgICAgZWxzaWYgU0g0Ci0gICAgICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6Omdsb2JhbERhdGFb
c3BdLCB0MwotICAgICAgICBzdG9yZXAgY2ZyLCBKU0dsb2JhbERhdGE6OnRvcENhbGxGcmFtZVt0
M10KKyAgICAgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6dm1bc3BdLCB0MworICAgICAgICBzdG9y
ZXAgY2ZyLCBWTTo6dG9wQ2FsbEZyYW1lW3QzXQogICAgICAgICBtb3ZlIHQwLCB0MgogICAgICAg
ICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwodDMpCiAgICAgICAgIHN0b3JlcCB0Mywg
UmV0dXJuUENbY2ZyXQpAQCAtMTkyNSwxMCArMTkyNSwxMCBAQCBtYWNybyBuYXRpdmVDYWxsVHJh
bXBvbGluZShleGVjdXRhYmxlT2ZmCiAgICAgICAgIG1vdmUgdDIsIGNmcgogICAgICAgICBjYWxs
IGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uW3QxXQogICAgICAgICByZXN0b3JlUmV0dXJuQWRk
cmVzc0JlZm9yZVJldHVybih0MykKLSAgICAgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFs
RGF0YVtzcF0sIHQzCisgICAgICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6OnZtW3NwXSwgdDMKICAg
ICBlbHNpZiBDX0xPT1AKLSAgICAgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0YVtz
cF0sIHQzCi0gICAgICAgIHN0b3JlcCBjZnIsIEpTR2xvYmFsRGF0YTo6dG9wQ2FsbEZyYW1lW3Qz
XQorICAgICAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjp2bVtzcF0sIHQzCisgICAgICAgIHN0b3Jl
cCBjZnIsIFZNOjp0b3BDYWxsRnJhbWVbdDNdCiAgICAgICAgIG1vdmUgdDAsIHQyCiAgICAgICAg
IHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbCh0MykKICAgICAgICAgc3RvcmVwIHQzLCBS
ZXR1cm5QQ1tjZnJdCkBAIC0xOTM4LDExICsxOTM4LDExIEBAIG1hY3JvIG5hdGl2ZUNhbGxUcmFt
cG9saW5lKGV4ZWN1dGFibGVPZmYKICAgICAgICAgbW92ZSB0MiwgY2ZyCiAgICAgICAgIGNsb29w
Q2FsbE5hdGl2ZSBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvblt0MV0KICAgICAgICAgcmVzdG9y
ZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4odDMpCi0gICAgICAgIGxvYWRwIEpJVFN0YWNrRnJh
bWU6Omdsb2JhbERhdGFbc3BdLCB0MworICAgICAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjp2bVtz
cF0sIHQzCiAgICAgZWxzZSAgCiAgICAgICAgIGVycm9yCiAgICAgZW5kCi0gICAgYmluZXEgSlNH
bG9iYWxEYXRhOjpleGNlcHRpb24gKyBUYWdPZmZzZXRbdDNdLCBFbXB0eVZhbHVlVGFnLCAuZXhj
ZXB0aW9uCisgICAgYmluZXEgVk06OmV4Y2VwdGlvbiArIFRhZ09mZnNldFt0M10sIEVtcHR5VmFs
dWVUYWcsIC5leGNlcHRpb24KICAgICByZXQKIC5leGNlcHRpb246CiAgICAgcHJlc2VydmVSZXR1
cm5BZGRyZXNzQWZ0ZXJDYWxsKHQxKSAjIFRoaXMgaXMgcmVhbGx5IG9ubHkgbmVlZGVkIG9uIFg4
NgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2
NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODYsOSArMTg2LDkgQEAgbWFjcm8gZnVuY3Rpb25Bcml0eUNoZWNrKGRvbmVMYWJlbCwgc2xvdwog
ICAgIGNDYWxsMihzbG93X3BhdGgsIGNmciwgUEMpICAgIyBUaGlzIHNsb3dfcGF0aCBoYXMgYSBz
aW1wbGUgcHJvdG9jb2w6IHQwID0gMCA9PiBubyBlcnJvciwgdDAgIT0gMCA9PiBlcnJvcgogICAg
IG1vdmUgdDEsIGNmcgogICAgIGJ0aXogdDAsIC5jb250aW51ZQotICAgIGxvYWRwIEpJVFN0YWNr
RnJhbWU6Omdsb2JhbERhdGFbc3BdLCB0MQotICAgIGxvYWRwIEpTR2xvYmFsRGF0YTo6Y2FsbEZy
YW1lRm9yVGhyb3dbdDFdLCB0MAotICAgIGptcCBKU0dsb2JhbERhdGE6OnRhcmdldE1hY2hpbmVQ
Q0ZvclRocm93W3QxXQorICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6OnZtW3NwXSwgdDEKKyAgICBs
b2FkcCBWTTo6Y2FsbEZyYW1lRm9yVGhyb3dbdDFdLCB0MAorICAgIGptcCBWTTo6dGFyZ2V0TWFj
aGluZVBDRm9yVGhyb3dbdDFdCiAuY29udGludWU6CiAgICAgIyBSZWxvYWQgQ29kZUJsb2NrIGFu
ZCByZXNldCBQQywgc2luY2UgdGhlIHNsb3dfcGF0aCBjbG9iYmVyZWQgdGhlbS4KICAgICBsb2Fk
cCBDb2RlQmxvY2tbY2ZyXSwgdDEKQEAgLTE1ODcsMTYgKzE1ODcsMTYgQEAgX2xsaW50X29wX2Nh
dGNoOgogICAgICMgdGhlIGludGVycHJldGVyJ3MgdGhyb3cgdHJhbXBvbGluZSAoc2VlIF9sbGlu
dF90aHJvd190cmFtcG9saW5lKS4KICAgICAjIFRoZSBKSVQgdGhyb3dpbmcgcHJvdG9jb2wgY2Fs
bHMgZm9yIHRoZSBjZnIgdG8gYmUgaW4gdDAuIFRoZSB0aHJvd2luZwogICAgICMgY29kZSBtdXN0
IGhhdmUga25vd24gdGhhdCB3ZSB3ZXJlIHRocm93aW5nIHRvIHRoZSBpbnRlcnByZXRlciwgYW5k
IGhhdmUKLSAgICAjIHNldCBKU0dsb2JhbERhdGE6OnRhcmdldEludGVycHJldGVyUENGb3JUaHJv
dy4KKyAgICAjIHNldCBWTTo6dGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93LgogICAgIG1vdmUg
dDAsIGNmcgogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQQgogICAgIGxvYWRwIENvZGVCbG9j
azo6bV9pbnN0cnVjdGlvbnNbUEJdLCBQQgotICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6Omdsb2Jh
bERhdGFbc3BdLCB0MwotICAgIGxvYWRwIEpTR2xvYmFsRGF0YTo6dGFyZ2V0SW50ZXJwcmV0ZXJQ
Q0ZvclRocm93W3QzXSwgUEMKKyAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjp2bVtzcF0sIHQzCisg
ICAgbG9hZHAgVk06OnRhcmdldEludGVycHJldGVyUENGb3JUaHJvd1t0M10sIFBDCiAgICAgc3Vi
cCBQQiwgUEMKICAgICByc2hpZnRwIDMsIFBDCi0gICAgbG9hZHEgSlNHbG9iYWxEYXRhOjpleGNl
cHRpb25bdDNdLCB0MAotICAgIHN0b3JlcSAwLCBKU0dsb2JhbERhdGE6OmV4Y2VwdGlvblt0M10K
KyAgICBsb2FkcSBWTTo6ZXhjZXB0aW9uW3QzXSwgdDAKKyAgICBzdG9yZXEgMCwgVk06OmV4Y2Vw
dGlvblt0M10KICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDIpCiAgICAgc3RvcmVxIHQw
LCBbY2ZyLCB0MiwgOF0KICAgICB0cmFjZUV4ZWN1dGlvbigpCkBAIC0xNjE2LDE2ICsxNjE2LDE2
IEBAIF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lOgogICAgICMgV2hlbiB0
aHJvd2luZyBmcm9tIHRoZSBpbnRlcnByZXRlciAoaS5lLiB0aHJvd2luZyBmcm9tIExMSW50U2xv
d1BhdGhzKSwgc28KICAgICAjIHRoZSB0aHJvdyB0YXJnZXQgaXMgbm90IG5lY2Vzc2FyaWx5IGlu
dGVycHJldGVkIGNvZGUsIHdlIGNvbWUgdG8gaGVyZS4KICAgICAjIFRoaXMgZXNzZW50aWFsbHkg
ZW11bGF0ZXMgdGhlIEpJVCdzIHRocm93aW5nIHByb3RvY29sLgotICAgIGxvYWRwIEpJVFN0YWNr
RnJhbWU6Omdsb2JhbERhdGFbc3BdLCB0MQotICAgIGxvYWRwIEpTR2xvYmFsRGF0YTo6Y2FsbEZy
YW1lRm9yVGhyb3dbdDFdLCB0MAotICAgIGptcCBKU0dsb2JhbERhdGE6OnRhcmdldE1hY2hpbmVQ
Q0ZvclRocm93W3QxXQorICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6OnZtW3NwXSwgdDEKKyAgICBs
b2FkcCBWTTo6Y2FsbEZyYW1lRm9yVGhyb3dbdDFdLCB0MAorICAgIGptcCBWTTo6dGFyZ2V0TWFj
aGluZVBDRm9yVGhyb3dbdDFdCiAKIAogX2xsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xp
bmU6CiAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHQyKQotICAgIGxvYWRwIEpJ
VFN0YWNrRnJhbWU6Omdsb2JhbERhdGFbc3BdLCB0MQotICAgIGxvYWRwIEpTR2xvYmFsRGF0YTo6
Y2FsbEZyYW1lRm9yVGhyb3dbdDFdLCB0MAotICAgIGptcCBKU0dsb2JhbERhdGE6OnRhcmdldE1h
Y2hpbmVQQ0ZvclRocm93W3QxXQorICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6OnZtW3NwXSwgdDEK
KyAgICBsb2FkcCBWTTo6Y2FsbEZyYW1lRm9yVGhyb3dbdDFdLCB0MAorICAgIGptcCBWTTo6dGFy
Z2V0TWFjaGluZVBDRm9yVGhyb3dbdDFdCiAKICMgR2l2ZXMgeW91IHRoZSBzY29wZSBpbiB0MCwg
d2hpbGUgYWxsb3dpbmcgeW91IHRvIG9wdGlvbmFsbHkgcGVyZm9ybSBhZGRpdGlvbmFsIGNoZWNr
cyBvbiB0aGUKICMgc2NvcGVzIGFzIHRoZXkgYXJlIHRyYXZlcnNlZC4gc2NvcGVDaGVjaygpIGlz
IGNhbGxlZCB3aXRoIHR3byBhcmd1bWVudHM6IHRoZSByZWdpc3RlcgpAQCAtMTY5Miw4ICsxNjky
LDggQEAgX2xsaW50X29wX3B1dF9zY29wZWRfdmFyOgogbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xp
bmUoZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pCiAgICAgc3RvcmVwIDAsIENvZGVCbG9ja1tj
ZnJdCiAgICAgaWYgWDg2XzY0Ci0gICAgICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6Omdsb2JhbERh
dGEgKyA4W3NwXSwgdDAKLSAgICAgICAgc3RvcmVwIGNmciwgSlNHbG9iYWxEYXRhOjp0b3BDYWxs
RnJhbWVbdDBdCisgICAgICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6OnZtICsgOFtzcF0sIHQwCisg
ICAgICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BDYWxsRnJhbWVbdDBdCiAgICAgICAgIGxvYWRwIENh
bGxlckZyYW1lW2Nmcl0sIHQwCiAgICAgICAgIGxvYWRxIFNjb3BlQ2hhaW5bdDBdLCB0MQogICAg
ICAgICBzdG9yZXEgdDEsIFNjb3BlQ2hhaW5bY2ZyXQpAQCAtMTcwNiwxNSArMTcwNiwxNSBAQCBt
YWNybyBuYXRpdmVDYWxsVHJhbXBvbGluZShleGVjdXRhYmxlT2ZmCiAgICAgICAgIG1vdmUgdDAs
IGNmciAjIFJlc3RvcmUgY2ZyIHRvIGF2b2lkIGxvYWRpbmcgZnJvbSBzdGFjawogICAgICAgICBj
YWxsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uW3QxXQogICAgICAgICBhZGRwIDE2IC0gOCwg
c3AKLSAgICAgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0YSArIDhbc3BdLCB0Mwor
ICAgICAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjp2bSArIDhbc3BdLCB0MwogCiAgICAgZWxzaWYg
Q19MT09QCiAgICAgICAgIGxvYWRwIENhbGxlckZyYW1lW2Nmcl0sIHQwCiAgICAgICAgIGxvYWRw
IFNjb3BlQ2hhaW5bdDBdLCB0MQogICAgICAgICBzdG9yZXAgdDEsIFNjb3BlQ2hhaW5bY2ZyXQog
Ci0gICAgICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6Omdsb2JhbERhdGFbc3BdLCB0MwotICAgICAg
ICBzdG9yZXAgY2ZyLCBKU0dsb2JhbERhdGE6OnRvcENhbGxGcmFtZVt0M10KKyAgICAgICAgbG9h
ZHAgSklUU3RhY2tGcmFtZTo6dm1bc3BdLCB0MworICAgICAgICBzdG9yZXAgY2ZyLCBWTTo6dG9w
Q2FsbEZyYW1lW3QzXQogCiAgICAgICAgIG1vdmUgdDAsIHQyCiAgICAgICAgIHByZXNlcnZlUmV0
dXJuQWRkcmVzc0FmdGVyQ2FsbCh0MykKQEAgLTE3MjYsMjAgKzE3MjYsMjAgQEAgbWFjcm8gbmF0
aXZlQ2FsbFRyYW1wb2xpbmUoZXhlY3V0YWJsZU9mZgogICAgICAgICBjbG9vcENhbGxOYXRpdmUg
ZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb25bdDFdCiAKICAgICAgICAgcmVzdG9yZVJldHVybkFk
ZHJlc3NCZWZvcmVSZXR1cm4odDMpCi0gICAgICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6Omdsb2Jh
bERhdGFbc3BdLCB0MworICAgICAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjp2bVtzcF0sIHQzCiAg
ICAgZWxzZQogICAgICAgICBlcnJvcgogICAgIGVuZAogCi0gICAgYnRxbnogSlNHbG9iYWxEYXRh
OjpleGNlcHRpb25bdDNdLCAuZXhjZXB0aW9uCisgICAgYnRxbnogVk06OmV4Y2VwdGlvblt0M10s
IC5leGNlcHRpb24KICAgICByZXQKIC5leGNlcHRpb246CiAgICAgcHJlc2VydmVSZXR1cm5BZGRy
ZXNzQWZ0ZXJDYWxsKHQxKQogICAgIGxvYWRpIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2Zy
XSwgUEMKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIKICAgICBsb2FkcCBDb2RlQmxvY2s6
Om1faW5zdHJ1Y3Rpb25zW1BCXSwgUEIKLSAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjpnbG9iYWxE
YXRhW3NwXSwgdDAKLSAgICBzdG9yZXAgY2ZyLCBKU0dsb2JhbERhdGE6OnRvcENhbGxGcmFtZVt0
MF0KKyAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjp2bVtzcF0sIHQwCisgICAgc3RvcmVwIGNmciwg
Vk06OnRvcENhbGxGcmFtZVt0MF0KICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Rocm93X2Zyb21f
bmF0aXZlX2NhbGwpCiAgICAgam1wIF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9s
aW5lCiBlbmQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAt
MzYyLDggKzM2Miw4IEBAIG1hY3JvIGZ1bmN0aW9uSW5pdGlhbGl6YXRpb24ocHJvZmlsZUFyZ1MK
ICAgICAgICAgCiAgICAgIyBDaGVjayBzdGFjayBoZWlnaHQuCiAgICAgbG9hZGkgQ29kZUJsb2Nr
OjptX251bUNhbGxlZVJlZ2lzdGVyc1t0MV0sIHQwCi0gICAgbG9hZHAgQ29kZUJsb2NrOjptX2ds
b2JhbERhdGFbdDFdLCB0MgotICAgIGxvYWRwIEpTR2xvYmFsRGF0YTo6aW50ZXJwcmV0ZXJbdDJd
LCB0MiAgICMgRklYTUU6IENhbiBnZXQgdG8gdGhlIEpTU3RhY2sgZnJvbSB0aGUgSklUU3RhY2tG
cmFtZQorICAgIGxvYWRwIENvZGVCbG9jazo6bV92bVt0MV0sIHQyCisgICAgbG9hZHAgVk06Omlu
dGVycHJldGVyW3QyXSwgdDIgICAjIEZJWE1FOiBDYW4gZ2V0IHRvIHRoZSBKU1N0YWNrIGZyb20g
dGhlIEpJVFN0YWNrRnJhbWUKICAgICBsc2hpZnRpIDMsIHQwCiAgICAgYWRkcCB0MCwgY2ZyLCB0
MAogICAgIGJwYWVxIEludGVycHJldGVyOjptX3N0YWNrICsgSlNTdGFjazo6bV9lbmRbdDJdLCB0
MCwgLnN0YWNrSGVpZ2h0T0sKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjY1LDcgKzI2NSw3IEBAIEpTVmFsdWUgQ0xvb3A6OmV4ZWN1dGUoQ2FsbEZyYW1l
KiBjYWxsRnIKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICB9CiAKLSAgICBBU1NFUlQo
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkudG9wQ2FsbEZyYW1lID09IGNhbGxGcmFtZSk7CisgICAg
QVNTRVJUKGNhbGxGcmFtZS0+dm0oKS50b3BDYWxsRnJhbWUgPT0gY2FsbEZyYW1lKTsKIAogICAg
IC8vIERlZmluZSB0aGUgcHNldWRvIHJlZ2lzdGVycyB1c2VkIGJ5IHRoZSBMTElOVCBDIExvb3Ag
YmFja2VuZDoKICAgICBBU1NFUlQoc2l6ZW9mKENMb29wUmVnaXN0ZXIpID09IHNpemVvZihpbnRw
dHJfdCkpOwpAQCAtMzE5LDEwICszMTksMTAgQEAgSlNWYWx1ZSBDTG9vcDo6ZXhlY3V0ZShDYWxs
RnJhbWUqIGNhbGxGcgogICAgIC8vIFRoZSBsbGludCBleHBlY3RzIHRoZSBuYXRpdmUgc3RhY2sg
cG9pbnRlciwgc3AsIHRvIGJlIHBvaW50aW5nIHRvIHRoZQogICAgIC8vIGppdFN0YWNrRnJhbWUg
KHdoaWNoIGlzIHRoZSBzaW11bGF0aW9uIG9mIHRoZSBuYXRpdmUgc3RhY2sgZnJhbWUpOgogICAg
IEpJVFN0YWNrRnJhbWUqIGNvbnN0IHNwID0gJmppdFN0YWNrRnJhbWU7Ci0gICAgc3AtPmdsb2Jh
bERhdGEgPSAmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCk7CisgICAgc3AtPnZtID0gJmNhbGxGcmFt
ZS0+dm0oKTsKIAotICAgIC8vIFNldCB1cCBhbiBhbGlhcyBmb3IgdGhlIGdsb2JhbERhdGEgcHRy
IGluIHRoZSBKSVRTdGFja0ZyYW1lOgotICAgIEpTR2xvYmFsRGF0YSogJmdsb2JhbERhdGEgPSBz
cC0+Z2xvYmFsRGF0YTsKKyAgICAvLyBTZXQgdXAgYW4gYWxpYXMgZm9yIHRoZSB2bSBwdHIgaW4g
dGhlIEpJVFN0YWNrRnJhbWU6CisgICAgVk0qICZ2bSA9IHNwLT52bTsKIAogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBJbnN0cnVjdGlvbiog
dlBDOwpAQCAtNDIzLDcgKzQyMyw3IEBAIEpTVmFsdWUgQ0xvb3A6OmV4ZWN1dGUoQ2FsbEZyYW1l
KiBjYWxsRnIKICAgICAgICAgICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUo
KTsKIAogICAgICAgICAgICAgLy8gVGhlIHBhcnQgaW4gZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdp
dGhFeGVjU3RhdGUoKToKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gZ2xvYmFsRGF0YS0+
aG9zdENhbGxSZXR1cm5WYWx1ZTsKKyAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gdm0tPmhv
c3RDYWxsUmV0dXJuVmFsdWU7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgICAgIHQx
LmkgPSByZXN1bHQudGFnKCk7CiAgICAgICAgICAgICB0MC5pID0gcmVzdWx0LnBheWxvYWQoKTsK
QEAgLTQzNSw3ICs0MzUsNyBAQCBKU1ZhbHVlIENMb29wOjpleGVjdXRlKENhbGxGcmFtZSogY2Fs
bEZyCiAKICAgICAgICAgT0ZGTElORV9BU01fR0xVRV9MQUJFTChjdGlPcFRocm93Tm90Q2F1Z2h0
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uOwor
ICAgICAgICAgICAgcmV0dXJuIHZtLT5leGNlcHRpb247CiAgICAgICAgIH0KIAogI2lmICFFTkFC
TEUoQ09NUFVURURfR09UT19PUENPREVTKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL29m
ZmxpbmVhc20vY2xvb3AucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL29m
ZmxpbmVhc20vY2xvb3AucmIJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9vZmZsaW5lYXNtL2Nsb29wLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNyArMTc4LDcg
QEAgY2xhc3MgQWRkcmVzcwogICAgIGRlZiBwb2ludGVyRXhwcgogICAgICAgICBpZiBiYXNlLmlz
X2E/IFJlZ2lzdGVySUQgYW5kIGJhc2UubmFtZSA9PSAic3AiIAogICAgICAgICAgICAgb2Zmc2V0
VmFsdWUgPSAiI3tvZmZzZXQudmFsdWV9IgotICAgICAgICAgICAgIihBU1NFUlQoI3tvZmZzZXRW
YWx1ZX0gPT0gb2Zmc2V0b2YoSklUU3RhY2tGcmFtZSwgZ2xvYmFsRGF0YSkpLCAmc3AtPmdsb2Jh
bERhdGEpIgorICAgICAgICAgICAgIihBU1NFUlQoI3tvZmZzZXRWYWx1ZX0gPT0gb2Zmc2V0b2Yo
SklUU3RhY2tGcmFtZSwgdm0pKSwgJnNwLT52bSkiCiAgICAgICAgIGVsc2lmIG9mZnNldC52YWx1
ZSA9PSAwCiAgICAgICAgICAgICAiI3tiYXNlLmNsVmFsdWUoOmludDhQdHIpfSIKICAgICAgICAg
ZWxzaWYgb2Zmc2V0LnZhbHVlID4gMApAQCAtMjUwLDcgKzI1MCw3IEBAIGNsYXNzIEJhc2VJbmRl
eAogICAgIGRlZiBwb2ludGVyRXhwcgogICAgICAgICBpZiBiYXNlLmlzX2E/IFJlZ2lzdGVySUQg
YW5kIGJhc2UubmFtZSA9PSAic3AiCiAgICAgICAgICAgICBvZmZzZXRWYWx1ZSA9ICIoI3tpbmRl
eC5jbFZhbHVlfSA8PCAje3NjYWxlU2hpZnR9KSArICN7b2Zmc2V0LmNsVmFsdWV9KSIKLSAgICAg
ICAgICAgICIoQVNTRVJUKCN7b2Zmc2V0VmFsdWV9ID09IG9mZnNldG9mKEpJVFN0YWNrRnJhbWUs
IGdsb2JhbERhdGEpKSwgJnNwLT5nbG9iYWxEYXRhKSIKKyAgICAgICAgICAgICIoQVNTRVJUKCN7
b2Zmc2V0VmFsdWV9ID09IG9mZnNldG9mKEpJVFN0YWNrRnJhbWUsIHZtKSksICZzcC0+dm0pIgog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAiI3tiYXNlLmNsVmFsdWUoOmludDhQdHIpfSArICgj
e2luZGV4LmNsVmFsdWV9IDw8ICN7c2NhbGVTaGlmdH0pICsgI3tvZmZzZXQuY2xWYWx1ZX0iCiAg
ICAgICAgIGVuZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVy
LmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNU
QnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03MywxMCArNzMsMTAgQEAgY2xhc3MgQVNUQnVp
bGRlciB7CiAgICAgICAgIE9wZXJhdG9yIG1fb3A7CiAgICAgfTsKIHB1YmxpYzoKLSAgICBBU1RC
dWlsZGVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU291cmNlQ29kZSogc291cmNlQ29kZSkK
LSAgICAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKKyAgICBBU1RCdWlsZGVyKFZNKiB2
bSwgU291cmNlQ29kZSogc291cmNlQ29kZSkKKyAgICAgICAgOiBtX3ZtKHZtKQogICAgICAgICAs
IG1fc291cmNlQ29kZShzb3VyY2VDb2RlKQotICAgICAgICAsIG1fc2NvcGUoZ2xvYmFsRGF0YSkK
KyAgICAgICAgLCBtX3Njb3BlKHZtKQogICAgICAgICAsIG1fZXZhbENvdW50KDApCiAgICAgewog
ICAgIH0KQEAgLTExNSw3ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAgRXhwcmVzc2lvbk5vZGUqIG1h
a2VCaW5hcnlOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCB0b2tlbiwgc3RkOjpwYWly
PEV4cHJlc3Npb25Ob2RlKiwgQmluYXJ5T3BJbmZvPiwgc3RkOjpwYWlyPEV4cHJlc3Npb25Ob2Rl
KiwgQmluYXJ5T3BJbmZvPik7CiAgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VGdW5jdGlvbkNhbGxO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBBcmd1bWVu
dHNOb2RlKiBhcmdzLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCk7CiAKLSAgICBKU0M6
OlNvdXJjZUVsZW1lbnRzKiBjcmVhdGVTb3VyY2VFbGVtZW50cygpIHsgcmV0dXJuIG5ldyAobV9n
bG9iYWxEYXRhKSBKU0M6OlNvdXJjZUVsZW1lbnRzKCk7IH0KKyAgICBKU0M6OlNvdXJjZUVsZW1l
bnRzKiBjcmVhdGVTb3VyY2VFbGVtZW50cygpIHsgcmV0dXJuIG5ldyAobV92bSkgSlNDOjpTb3Vy
Y2VFbGVtZW50cygpOyB9CiAKICAgICBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6
OlZhclN0YWNrPiogdmFyRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9zY29wZS5tX3ZhckRlY2xh
cmF0aW9uczsgfQogICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rp
b25TdGFjaz4qIGZ1bmNEZWNsYXJhdGlvbnMoKSB7IHJldHVybiBtX3Njb3BlLm1fZnVuY0RlY2xh
cmF0aW9uczsgfQpAQCAtMTI0LDcgKzEyNCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYXBwZW5k
VG9Db21tYShDb21tYU5vZGUqIGNvbW1hTm9kZSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpIHsgY29t
bWFOb2RlLT5hcHBlbmQoZXhwcik7IH0KIAotICAgIENvbW1hTm9kZSogY3JlYXRlQ29tbWFFeHBy
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBsaHMsIEV4
cHJlc3Npb25Ob2RlKiByaHMpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBDb21tYU5vZGUo
bG9jYXRpb24sIGxocywgcmhzKTsgfQorICAgIENvbW1hTm9kZSogY3JlYXRlQ29tbWFFeHByKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBsaHMsIEV4cHJl
c3Npb25Ob2RlKiByaHMpIHsgcmV0dXJuIG5ldyAobV92bSkgQ29tbWFOb2RlKGxvY2F0aW9uLCBs
aHMsIHJocyk7IH0KIAogICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQXNzaWduTm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogbGVmdCwgT3BlcmF0b3IsIEV4cHJlc3Np
b25Ob2RlKiByaWdodCwgYm9vbCBsZWZ0SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3Np
Z25tZW50cywgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQpOwogICAgIEV4cHJlc3Npb25O
b2RlKiBtYWtlUHJlZml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9k
ZSosIE9wZXJhdG9yLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCk7CkBAIC0xNTAsNzYg
KzE1MCw3NiBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChleHByLT5pc051bWJlcigpKQogICAgICAg
ICAgICAgcmV0dXJuIGNyZWF0ZUJvb2xlYW4obG9jYXRpb24sICFzdGF0aWNfY2FzdDxOdW1iZXJO
b2RlKj4oZXhwciktPnZhbHVlKCkpOwogCi0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0
YSkgTG9naWNhbE5vdE5vZGUobG9jYXRpb24sIGV4cHIpOworICAgICAgICByZXR1cm4gbmV3ICht
X3ZtKSBMb2dpY2FsTm90Tm9kZShsb2NhdGlvbiwgZXhwcik7CiAgICAgfQotICAgIEV4cHJlc3Np
b25Ob2RlKiBjcmVhdGVVbmFyeVBsdXMoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBVbmFyeVBs
dXNOb2RlKGxvY2F0aW9uLCBleHByKTsgfQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVVbmFy
eVBsdXMoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIpIHsgcmV0dXJuIG5ldyAobV92bSkgVW5hcnlQbHVzTm9kZShsb2NhdGlvbiwgZXhwcik7IH0K
ICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlVm9pZChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcikKICAgICB7CiAgICAgICAgIGluY0NvbnN0YW50
cygpOwotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFZvaWROb2RlKGxvY2F0aW9u
LCBleHByKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgVm9pZE5vZGUobG9jYXRpb24sIGV4
cHIpOwogICAgIH0KICAgICBFeHByZXNzaW9uTm9kZSogdGhpc0V4cHIoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbikKICAgICB7CiAgICAgICAgIHVzZXNUaGlzKCk7Ci0gICAgICAgIHJl
dHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgVGhpc05vZGUobG9jYXRpb24pOworICAgICAgICByZXR1
cm4gbmV3IChtX3ZtKSBUaGlzTm9kZShsb2NhdGlvbik7CiAgICAgfQogICAgIEV4cHJlc3Npb25O
b2RlKiBjcmVhdGVSZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50LCBpbnQgc3RhcnQpCiAgICAgewotICAgICAgICBpZiAobV9nbG9i
YWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gKmlkZW50KQorICAgICAgICBpZiAo
bV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICppZGVudCkKICAgICAgICAgICAgIHVz
ZXNBcmd1bWVudHMoKTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBSZXNvbHZl
Tm9kZShsb2NhdGlvbiwgKmlkZW50LCBzdGFydCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0p
IFJlc29sdmVOb2RlKGxvY2F0aW9uLCAqaWRlbnQsIHN0YXJ0KTsKICAgICB9Ci0gICAgRXhwcmVz
c2lvbk5vZGUqIGNyZWF0ZU9iamVjdExpdGVyYWwoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbikgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIE9iamVjdExpdGVyYWxOb2RlKGxvY2F0
aW9uKTsgfQotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVPYmplY3RMaXRlcmFsKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFByb3BlcnR5TGlzdE5vZGUqIHByb3BlcnRpZXMpIHsg
cmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBPYmplY3RMaXRlcmFsTm9kZShsb2NhdGlvbiwgcHJv
cGVydGllcyk7IH0KKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlT2JqZWN0TGl0ZXJhbChjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uKSB7IHJldHVybiBuZXcgKG1fdm0pIE9iamVjdExp
dGVyYWxOb2RlKGxvY2F0aW9uKTsgfQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVPYmplY3RM
aXRlcmFsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFByb3BlcnR5TGlzdE5vZGUq
IHByb3BlcnRpZXMpIHsgcmV0dXJuIG5ldyAobV92bSkgT2JqZWN0TGl0ZXJhbE5vZGUobG9jYXRp
b24sIHByb3BlcnRpZXMpOyB9CiAKICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlQXJyYXkoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgaW50IGVsaXNpb25zKQogICAgIHsKICAgICAg
ICAgaWYgKGVsaXNpb25zKQogICAgICAgICAgICAgaW5jQ29uc3RhbnRzKCk7Ci0gICAgICAgIHJl
dHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQXJyYXlOb2RlKGxvY2F0aW9uLCBlbGlzaW9ucyk7Cisg
ICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEFycmF5Tm9kZShsb2NhdGlvbiwgZWxpc2lvbnMpOwog
ICAgIH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVBcnJheShjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uLCBFbGVtZW50Tm9kZSogZWxlbXMpIHsgcmV0dXJuIG5ldyAobV9nbG9i
YWxEYXRhKSBBcnJheU5vZGUobG9jYXRpb24sIGVsZW1zKTsgfQorICAgIEV4cHJlc3Npb25Ob2Rl
KiBjcmVhdGVBcnJheShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFbGVtZW50Tm9k
ZSogZWxlbXMpIHsgcmV0dXJuIG5ldyAobV92bSkgQXJyYXlOb2RlKGxvY2F0aW9uLCBlbGVtcyk7
IH0KICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlQXJyYXkoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgaW50IGVsaXNpb25zLCBFbGVtZW50Tm9kZSogZWxlbXMpCiAgICAgewogICAg
ICAgICBpZiAoZWxpc2lvbnMpCiAgICAgICAgICAgICBpbmNDb25zdGFudHMoKTsKLSAgICAgICAg
cmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBBcnJheU5vZGUobG9jYXRpb24sIGVsaXNpb25zLCBl
bGVtcyk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEFycmF5Tm9kZShsb2NhdGlvbiwgZWxp
c2lvbnMsIGVsZW1zKTsKICAgICB9CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU51bWJlckV4
cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgZG91YmxlIGQpCiAgICAgewogICAg
ICAgICBpbmNDb25zdGFudHMoKTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBO
dW1iZXJOb2RlKGxvY2F0aW9uLCBkKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgTnVtYmVy
Tm9kZShsb2NhdGlvbiwgZCk7CiAgICAgfQogCiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVN0
cmluZyhjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBz
dHJpbmcpCiAgICAgewogICAgICAgICBpbmNDb25zdGFudHMoKTsKLSAgICAgICAgcmV0dXJuIG5l
dyAobV9nbG9iYWxEYXRhKSBTdHJpbmdOb2RlKGxvY2F0aW9uLCAqc3RyaW5nKTsKKyAgICAgICAg
cmV0dXJuIG5ldyAobV92bSkgU3RyaW5nTm9kZShsb2NhdGlvbiwgKnN0cmluZyk7CiAgICAgfQog
CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUJvb2xlYW4oY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgYm9vbCBiKQogICAgIHsKICAgICAgICAgaW5jQ29uc3RhbnRzKCk7Ci0gICAg
ICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQm9vbGVhbk5vZGUobG9jYXRpb24sIGIpOwor
ICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBCb29sZWFuTm9kZShsb2NhdGlvbiwgYik7CiAgICAg
fQogCiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU51bGwoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbikKICAgICB7CiAgICAgICAgIGluY0NvbnN0YW50cygpOwotICAgICAgICByZXR1
cm4gbmV3IChtX2dsb2JhbERhdGEpIE51bGxOb2RlKGxvY2F0aW9uKTsKKyAgICAgICAgcmV0dXJu
IG5ldyAobV92bSkgTnVsbE5vZGUobG9jYXRpb24pOwogICAgIH0KIAogICAgIEV4cHJlc3Npb25O
b2RlKiBjcmVhdGVCcmFja2V0QWNjZXNzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogcHJvcGVydHksIGJvb2wgcHJv
cGVydHlIYXNBc3NpZ25tZW50cywgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQpCiAgICAg
ewotICAgICAgICBCcmFja2V0QWNjZXNzb3JOb2RlKiBub2RlID0gbmV3IChtX2dsb2JhbERhdGEp
IEJyYWNrZXRBY2Nlc3Nvck5vZGUobG9jYXRpb24sIGJhc2UsIHByb3BlcnR5LCBwcm9wZXJ0eUhh
c0Fzc2lnbm1lbnRzKTsKKyAgICAgICAgQnJhY2tldEFjY2Vzc29yTm9kZSogbm9kZSA9IG5ldyAo
bV92bSkgQnJhY2tldEFjY2Vzc29yTm9kZShsb2NhdGlvbiwgYmFzZSwgcHJvcGVydHksIHByb3Bl
cnR5SGFzQXNzaWdubWVudHMpOwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBz
dGFydCwgZGl2b3QsIGVuZCk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAogICAgIEV4
cHJlc3Npb25Ob2RlKiBjcmVhdGVEb3RBY2Nlc3MoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXIqIHByb3BlcnR5LCBp
bnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCkKICAgICB7Ci0gICAgICAgIERvdEFjY2Vzc29y
Tm9kZSogbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBEb3RBY2Nlc3Nvck5vZGUobG9jYXRpb24s
IGJhc2UsICpwcm9wZXJ0eSk7CisgICAgICAgIERvdEFjY2Vzc29yTm9kZSogbm9kZSA9IG5ldyAo
bV92bSkgRG90QWNjZXNzb3JOb2RlKGxvY2F0aW9uLCBiYXNlLCAqcHJvcGVydHkpOwogICAgICAg
ICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCk7CiAgICAgICAg
IHJldHVybiBub2RlOwogICAgIH0KQEAgLTIyOCw3ICsyMjgsNyBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICBpZiAoWWFycjo6Y2hlY2tTeW50YXgocGF0dGVybi5zdHJpbmcoKSkpCiAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgUmVnRXhwTm9kZSogbm9kZSA9IG5ldyAobV9nbG9iYWxE
YXRhKSBSZWdFeHBOb2RlKGxvY2F0aW9uLCBwYXR0ZXJuLCBmbGFncyk7CisgICAgICAgIFJlZ0V4
cE5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIFJlZ0V4cE5vZGUobG9jYXRpb24sIHBhdHRlcm4sIGZs
YWdzKTsKICAgICAgICAgaW50IHNpemUgPSBwYXR0ZXJuLmxlbmd0aCgpICsgMjsgLy8gKyAyIGZv
ciB0aGUgdHdvIC8ncwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwg
c3RhcnQgKyBzaXplLCBzdGFydCArIHNpemUpOwogICAgICAgICByZXR1cm4gbm9kZTsKQEAgLTIz
Niw0MiArMjM2LDQyIEBAIHB1YmxpYzoKIAogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVOZXdF
eHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHBy
LCBBcmd1bWVudHNOb2RlKiBhcmd1bWVudHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5k
KQogICAgIHsKLSAgICAgICAgTmV3RXhwck5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkg
TmV3RXhwck5vZGUobG9jYXRpb24sIGV4cHIsIGFyZ3VtZW50cyk7CisgICAgICAgIE5ld0V4cHJO
b2RlKiBub2RlID0gbmV3IChtX3ZtKSBOZXdFeHByTm9kZShsb2NhdGlvbiwgZXhwciwgYXJndW1l
bnRzKTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgc3RhcnQsIGRpdm90LCBl
bmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKICAgICBFeHByZXNzaW9uTm9kZSog
Y3JlYXRlTmV3RXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9u
Tm9kZSogZXhwciwgaW50IHN0YXJ0LCBpbnQgZW5kKQogICAgIHsKLSAgICAgICAgTmV3RXhwck5v
ZGUqIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgTmV3RXhwck5vZGUobG9jYXRpb24sIGV4cHIp
OworICAgICAgICBOZXdFeHByTm9kZSogbm9kZSA9IG5ldyAobV92bSkgTmV3RXhwck5vZGUobG9j
YXRpb24sIGV4cHIpOwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwg
ZW5kLCBlbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKICAgICBFeHByZXNzaW9u
Tm9kZSogY3JlYXRlQ29uZGl0aW9uYWxFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIEV4cHJlc3Npb25Ob2RlKiBjb25kaXRpb24sIEV4cHJlc3Npb25Ob2RlKiBsaHMsIEV4cHJl
c3Npb25Ob2RlKiByaHMpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEp
IENvbmRpdGlvbmFsTm9kZShsb2NhdGlvbiwgY29uZGl0aW9uLCBsaHMsIHJocyk7CisgICAgICAg
IHJldHVybiBuZXcgKG1fdm0pIENvbmRpdGlvbmFsTm9kZShsb2NhdGlvbiwgY29uZGl0aW9uLCBs
aHMsIHJocyk7CiAgICAgfQogCiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUFzc2lnblJlc29s
dmUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIEV4cHJlc3Npb25Ob2RlKiByaHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kKQog
ICAgIHsKICAgICAgICAgaWYgKHJocy0+aXNGdW5jRXhwck5vZGUoKSkKICAgICAgICAgICAgIHN0
YXRpY19jYXN0PEZ1bmNFeHByTm9kZSo+KHJocyktPmJvZHkoKS0+c2V0SW5mZXJyZWROYW1lKGlk
ZW50KTsKLSAgICAgICAgQXNzaWduUmVzb2x2ZU5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0
YSkgQXNzaWduUmVzb2x2ZU5vZGUobG9jYXRpb24sIGlkZW50LCByaHMpOworICAgICAgICBBc3Np
Z25SZXNvbHZlTm9kZSogbm9kZSA9IG5ldyAobV92bSkgQXNzaWduUmVzb2x2ZU5vZGUobG9jYXRp
b24sIGlkZW50LCByaHMpOwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFy
dCwgZGl2b3QsIGVuZCk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAogICAgIEV4cHJl
c3Npb25Ob2RlKiBjcmVhdGVGdW5jdGlvbkV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgY29uc3QgSWRlbnRpZmllciogbmFtZSwgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwgUGFy
YW1ldGVyTm9kZSogcGFyYW1ldGVycywgaW50IG9wZW5CcmFjZVBvcywgaW50IGNsb3NlQnJhY2VQ
b3MsIGludCBib2R5U3RhcnRMaW5lLCBpbnQgYm9keUVuZExpbmUpCiAgICAgewotICAgICAgICBG
dW5jRXhwck5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBGdW5jRXhwck5vZGUobG9j
YXRpb24sICpuYW1lLCBib2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24ob3BlbkJyYWNl
UG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5U3RhcnRMaW5lKSwgcGFyYW1ldGVycyk7CisgICAgICAg
IEZ1bmNFeHByTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBGdW5jRXhwck5vZGUobG9jYXRpb24s
ICpuYW1lLCBib2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24ob3BlbkJyYWNlUG9zLCBj
bG9zZUJyYWNlUG9zLCBib2R5U3RhcnRMaW5lKSwgcGFyYW1ldGVycyk7CiAgICAgICAgIGJvZHkt
PnNldExvYyhib2R5U3RhcnRMaW5lLCBib2R5RW5kTGluZSwgbG9jYXRpb24uY2hhclBvc2l0aW9u
KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBGdW5jdGlvbkJvZHlOb2Rl
KiBjcmVhdGVGdW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9u
LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCBib29sIGluU3RyaWN0Q29udGV4
dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUobV9nbG9i
YWxEYXRhLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgaW5TdHJpY3RDb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuIEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZShtX3ZtLCBzdGFydExvY2F0aW9u
LCBlbmRMb2NhdGlvbiwgaW5TdHJpY3RDb250ZXh0KTsKICAgICB9CiAKICAgICB2b2lkIHNldEZ1
bmN0aW9uU3RhcnQoRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwgaW50IGZ1bmN0aW9uU3RhcnQpCkBA
IC0yODQsNDYgKzI4NCw0NiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChuYW1lKTsKICAgICAg
ICAgYm9keS0+c2V0TG9jKGJvZHlTdGFydExpbmUsIGJvZHlFbmRMaW5lLCBsb2NhdGlvbi5jaGFy
UG9zaXRpb24pOwogICAgICAgICBib2R5LT5zZXRJbmZlcnJlZE5hbWUoKm5hbWUpOwotICAgICAg
ICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFByb3BlcnR5Tm9kZShtX2dsb2JhbERhdGEsICpu
YW1lLCBuZXcgKG1fZ2xvYmFsRGF0YSkgRnVuY0V4cHJOb2RlKGxvY2F0aW9uLCBtX2dsb2JhbERh
dGEtPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBib2R5LCBtX3NvdXJjZUNvZGUtPnN1
YkV4cHJlc3Npb24ob3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5U3RhcnRMaW5lKSwg
cGFyYW1zKSwgdHlwZSk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIFByb3BlcnR5Tm9kZSht
X3ZtLCAqbmFtZSwgbmV3IChtX3ZtKSBGdW5jRXhwck5vZGUobG9jYXRpb24sIG1fdm0tPnByb3Bl
cnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBib2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Np
b24ob3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5U3RhcnRMaW5lKSwgcGFyYW1zKSwg
dHlwZSk7CiAgICAgfQogICAgIAotICAgIHRlbXBsYXRlIDxib29sPiBQcm9wZXJ0eU5vZGUqIGNy
ZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoSlNHbG9iYWxEYXRhKiwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGRvdWJsZSBuYW1lLCBQ
YXJhbWV0ZXJOb2RlKiBwYXJhbXMsIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIGludCBvcGVuQnJh
Y2VQb3MsIGludCBjbG9zZUJyYWNlUG9zLCBpbnQgYm9keVN0YXJ0TGluZSwgaW50IGJvZHlFbmRM
aW5lKQorICAgIHRlbXBsYXRlIDxib29sPiBQcm9wZXJ0eU5vZGUqIGNyZWF0ZUdldHRlck9yU2V0
dGVyUHJvcGVydHkoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBQcm9wZXJ0
eU5vZGU6OlR5cGUgdHlwZSwgZG91YmxlIG5hbWUsIFBhcmFtZXRlck5vZGUqIHBhcmFtcywgRnVu
Y3Rpb25Cb2R5Tm9kZSogYm9keSwgaW50IG9wZW5CcmFjZVBvcywgaW50IGNsb3NlQnJhY2VQb3Ms
IGludCBib2R5U3RhcnRMaW5lLCBpbnQgYm9keUVuZExpbmUpCiAgICAgewogICAgICAgICBib2R5
LT5zZXRMb2MoYm9keVN0YXJ0TGluZSwgYm9keUVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlv
bik7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUHJvcGVydHlOb2RlKG1fZ2xv
YmFsRGF0YSwgbmFtZSwgbmV3IChtX2dsb2JhbERhdGEpIEZ1bmNFeHByTm9kZShsb2NhdGlvbiwg
bV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgYm9keSwgbV9zb3Vy
Y2VDb2RlLT5zdWJFeHByZXNzaW9uKG9wZW5CcmFjZVBvcywgY2xvc2VCcmFjZVBvcywgYm9keVN0
YXJ0TGluZSksIHBhcmFtcyksIHR5cGUpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBQcm9w
ZXJ0eU5vZGUobV92bSwgbmFtZSwgbmV3IChtX3ZtKSBGdW5jRXhwck5vZGUobG9jYXRpb24sIG1f
dm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBib2R5LCBtX3NvdXJjZUNvZGUtPnN1
YkV4cHJlc3Npb24ob3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5U3RhcnRMaW5lKSwg
cGFyYW1zKSwgdHlwZSk7CiAgICAgfQogCi0gICAgQXJndW1lbnRzTm9kZSogY3JlYXRlQXJndW1l
bnRzKCkgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEFyZ3VtZW50c05vZGUoKTsgfQotICAg
IEFyZ3VtZW50c05vZGUqIGNyZWF0ZUFyZ3VtZW50cyhBcmd1bWVudExpc3ROb2RlKiBhcmdzKSB7
IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQXJndW1lbnRzTm9kZShhcmdzKTsgfQotICAgIEFy
Z3VtZW50TGlzdE5vZGUqIGNyZWF0ZUFyZ3VtZW50c0xpc3QoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGFyZykgeyByZXR1cm4gbmV3IChtX2dsb2JhbERh
dGEpIEFyZ3VtZW50TGlzdE5vZGUobG9jYXRpb24sIGFyZyk7IH0KLSAgICBBcmd1bWVudExpc3RO
b2RlKiBjcmVhdGVBcmd1bWVudHNMaXN0KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IEFyZ3VtZW50TGlzdE5vZGUqIGFyZ3MsIEV4cHJlc3Npb25Ob2RlKiBhcmcpIHsgcmV0dXJuIG5l
dyAobV9nbG9iYWxEYXRhKSBBcmd1bWVudExpc3ROb2RlKGxvY2F0aW9uLCBhcmdzLCBhcmcpOyB9
CisgICAgQXJndW1lbnRzTm9kZSogY3JlYXRlQXJndW1lbnRzKCkgeyByZXR1cm4gbmV3IChtX3Zt
KSBBcmd1bWVudHNOb2RlKCk7IH0KKyAgICBBcmd1bWVudHNOb2RlKiBjcmVhdGVBcmd1bWVudHMo
QXJndW1lbnRMaXN0Tm9kZSogYXJncykgeyByZXR1cm4gbmV3IChtX3ZtKSBBcmd1bWVudHNOb2Rl
KGFyZ3MpOyB9CisgICAgQXJndW1lbnRMaXN0Tm9kZSogY3JlYXRlQXJndW1lbnRzTGlzdChjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYXJnKSB7IHJldHVy
biBuZXcgKG1fdm0pIEFyZ3VtZW50TGlzdE5vZGUobG9jYXRpb24sIGFyZyk7IH0KKyAgICBBcmd1
bWVudExpc3ROb2RlKiBjcmVhdGVBcmd1bWVudHNMaXN0KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24sIEFyZ3VtZW50TGlzdE5vZGUqIGFyZ3MsIEV4cHJlc3Npb25Ob2RlKiBhcmcpIHsg
cmV0dXJuIG5ldyAobV92bSkgQXJndW1lbnRMaXN0Tm9kZShsb2NhdGlvbiwgYXJncywgYXJnKTsg
fQogCiAgICAgdGVtcGxhdGUgPGJvb2w+IFByb3BlcnR5Tm9kZSogY3JlYXRlUHJvcGVydHkoY29u
c3QgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBFeHByZXNzaW9uTm9kZSogbm9kZSwgUHJvcGVy
dHlOb2RlOjpUeXBlIHR5cGUpCiAgICAgewogICAgICAgICBpZiAobm9kZS0+aXNGdW5jRXhwck5v
ZGUoKSkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEZ1bmNFeHByTm9kZSo+KG5vZGUpLT5ib2R5
KCktPnNldEluZmVycmVkTmFtZSgqcHJvcGVydHlOYW1lKTsKLSAgICAgICAgcmV0dXJuIG5ldyAo
bV9nbG9iYWxEYXRhKSBQcm9wZXJ0eU5vZGUobV9nbG9iYWxEYXRhLCAqcHJvcGVydHlOYW1lLCBu
b2RlLCB0eXBlKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgUHJvcGVydHlOb2RlKG1fdm0s
ICpwcm9wZXJ0eU5hbWUsIG5vZGUsIHR5cGUpOwogICAgIH0KLSAgICB0ZW1wbGF0ZSA8Ym9vbD4g
UHJvcGVydHlOb2RlKiBjcmVhdGVQcm9wZXJ0eShKU0dsb2JhbERhdGEqLCBkb3VibGUgcHJvcGVy
dHlOYW1lLCBFeHByZXNzaW9uTm9kZSogbm9kZSwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUpIHsg
cmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBQcm9wZXJ0eU5vZGUobV9nbG9iYWxEYXRhLCBwcm9w
ZXJ0eU5hbWUsIG5vZGUsIHR5cGUpOyB9Ci0gICAgUHJvcGVydHlMaXN0Tm9kZSogY3JlYXRlUHJv
cGVydHlMaXN0KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFByb3BlcnR5Tm9kZSog
cHJvcGVydHkpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBQcm9wZXJ0eUxpc3ROb2RlKGxv
Y2F0aW9uLCBwcm9wZXJ0eSk7IH0KLSAgICBQcm9wZXJ0eUxpc3ROb2RlKiBjcmVhdGVQcm9wZXJ0
eUxpc3QoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgUHJvcGVydHlOb2RlKiBwcm9w
ZXJ0eSwgUHJvcGVydHlMaXN0Tm9kZSogdGFpbCkgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEp
IFByb3BlcnR5TGlzdE5vZGUobG9jYXRpb24sIHByb3BlcnR5LCB0YWlsKTsgfQorICAgIHRlbXBs
YXRlIDxib29sPiBQcm9wZXJ0eU5vZGUqIGNyZWF0ZVByb3BlcnR5KFZNKiwgZG91YmxlIHByb3Bl
cnR5TmFtZSwgRXhwcmVzc2lvbk5vZGUqIG5vZGUsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlKSB7
IHJldHVybiBuZXcgKG1fdm0pIFByb3BlcnR5Tm9kZShtX3ZtLCBwcm9wZXJ0eU5hbWUsIG5vZGUs
IHR5cGUpOyB9CisgICAgUHJvcGVydHlMaXN0Tm9kZSogY3JlYXRlUHJvcGVydHlMaXN0KGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFByb3BlcnR5Tm9kZSogcHJvcGVydHkpIHsgcmV0
dXJuIG5ldyAobV92bSkgUHJvcGVydHlMaXN0Tm9kZShsb2NhdGlvbiwgcHJvcGVydHkpOyB9Cisg
ICAgUHJvcGVydHlMaXN0Tm9kZSogY3JlYXRlUHJvcGVydHlMaXN0KGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgbG9jYXRpb24sIFByb3BlcnR5Tm9kZSogcHJvcGVydHksIFByb3BlcnR5TGlzdE5vZGUq
IHRhaWwpIHsgcmV0dXJuIG5ldyAobV92bSkgUHJvcGVydHlMaXN0Tm9kZShsb2NhdGlvbiwgcHJv
cGVydHksIHRhaWwpOyB9CiAKLSAgICBFbGVtZW50Tm9kZSogY3JlYXRlRWxlbWVudExpc3QoaW50
IGVsaXNpb25zLCBFeHByZXNzaW9uTm9kZSogZXhwcikgeyByZXR1cm4gbmV3IChtX2dsb2JhbERh
dGEpIEVsZW1lbnROb2RlKGVsaXNpb25zLCBleHByKTsgfQotICAgIEVsZW1lbnROb2RlKiBjcmVh
dGVFbGVtZW50TGlzdChFbGVtZW50Tm9kZSogZWxlbXMsIGludCBlbGlzaW9ucywgRXhwcmVzc2lv
bk5vZGUqIGV4cHIpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBFbGVtZW50Tm9kZShlbGVt
cywgZWxpc2lvbnMsIGV4cHIpOyB9CisgICAgRWxlbWVudE5vZGUqIGNyZWF0ZUVsZW1lbnRMaXN0
KGludCBlbGlzaW9ucywgRXhwcmVzc2lvbk5vZGUqIGV4cHIpIHsgcmV0dXJuIG5ldyAobV92bSkg
RWxlbWVudE5vZGUoZWxpc2lvbnMsIGV4cHIpOyB9CisgICAgRWxlbWVudE5vZGUqIGNyZWF0ZUVs
ZW1lbnRMaXN0KEVsZW1lbnROb2RlKiBlbGVtcywgaW50IGVsaXNpb25zLCBFeHByZXNzaW9uTm9k
ZSogZXhwcikgeyByZXR1cm4gbmV3IChtX3ZtKSBFbGVtZW50Tm9kZShlbGVtcywgZWxpc2lvbnMs
IGV4cHIpOyB9CiAKLSAgICBQYXJhbWV0ZXJOb2RlKiBjcmVhdGVGb3JtYWxQYXJhbWV0ZXJMaXN0
KGNvbnN0IElkZW50aWZpZXImIGlkZW50KSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUGFy
YW1ldGVyTm9kZShpZGVudCk7IH0KLSAgICBQYXJhbWV0ZXJOb2RlKiBjcmVhdGVGb3JtYWxQYXJh
bWV0ZXJMaXN0KFBhcmFtZXRlck5vZGUqIGxpc3QsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KSB7
IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUGFyYW1ldGVyTm9kZShsaXN0LCBpZGVudCk7IH0K
KyAgICBQYXJhbWV0ZXJOb2RlKiBjcmVhdGVGb3JtYWxQYXJhbWV0ZXJMaXN0KGNvbnN0IElkZW50
aWZpZXImIGlkZW50KSB7IHJldHVybiBuZXcgKG1fdm0pIFBhcmFtZXRlck5vZGUoaWRlbnQpOyB9
CisgICAgUGFyYW1ldGVyTm9kZSogY3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdChQYXJhbWV0ZXJO
b2RlKiBsaXN0LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkgeyByZXR1cm4gbmV3IChtX3ZtKSBQ
YXJhbWV0ZXJOb2RlKGxpc3QsIGlkZW50KTsgfQogCi0gICAgQ2FzZUNsYXVzZU5vZGUqIGNyZWF0
ZUNsYXVzZShFeHByZXNzaW9uTm9kZSogZXhwciwgSlNDOjpTb3VyY2VFbGVtZW50cyogc3RhdGVt
ZW50cykgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIENhc2VDbGF1c2VOb2RlKGV4cHIsIHN0
YXRlbWVudHMpOyB9Ci0gICAgQ2xhdXNlTGlzdE5vZGUqIGNyZWF0ZUNsYXVzZUxpc3QoQ2FzZUNs
YXVzZU5vZGUqIGNsYXVzZSkgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIENsYXVzZUxpc3RO
b2RlKGNsYXVzZSk7IH0KLSAgICBDbGF1c2VMaXN0Tm9kZSogY3JlYXRlQ2xhdXNlTGlzdChDbGF1
c2VMaXN0Tm9kZSogdGFpbCwgQ2FzZUNsYXVzZU5vZGUqIGNsYXVzZSkgeyByZXR1cm4gbmV3ICht
X2dsb2JhbERhdGEpIENsYXVzZUxpc3ROb2RlKHRhaWwsIGNsYXVzZSk7IH0KKyAgICBDYXNlQ2xh
dXNlTm9kZSogY3JlYXRlQ2xhdXNlKEV4cHJlc3Npb25Ob2RlKiBleHByLCBKU0M6OlNvdXJjZUVs
ZW1lbnRzKiBzdGF0ZW1lbnRzKSB7IHJldHVybiBuZXcgKG1fdm0pIENhc2VDbGF1c2VOb2RlKGV4
cHIsIHN0YXRlbWVudHMpOyB9CisgICAgQ2xhdXNlTGlzdE5vZGUqIGNyZWF0ZUNsYXVzZUxpc3Qo
Q2FzZUNsYXVzZU5vZGUqIGNsYXVzZSkgeyByZXR1cm4gbmV3IChtX3ZtKSBDbGF1c2VMaXN0Tm9k
ZShjbGF1c2UpOyB9CisgICAgQ2xhdXNlTGlzdE5vZGUqIGNyZWF0ZUNsYXVzZUxpc3QoQ2xhdXNl
TGlzdE5vZGUqIHRhaWwsIENhc2VDbGF1c2VOb2RlKiBjbGF1c2UpIHsgcmV0dXJuIG5ldyAobV92
bSkgQ2xhdXNlTGlzdE5vZGUodGFpbCwgY2xhdXNlKTsgfQogCiAgICAgdm9pZCBzZXRVc2VzQXJn
dW1lbnRzKEZ1bmN0aW9uQm9keU5vZGUqIG5vZGUpIHsgbm9kZS0+c2V0VXNlc0FyZ3VtZW50cygp
OyB9CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVGdW5jRGVjbFN0YXRlbWVudChjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBuYW1lLCBGdW5jdGlv
bkJvZHlOb2RlKiBib2R5LCBQYXJhbWV0ZXJOb2RlKiBwYXJhbWV0ZXJzLCBpbnQgb3BlbkJyYWNl
UG9zLCBpbnQgY2xvc2VCcmFjZVBvcywgaW50IGJvZHlTdGFydExpbmUsIGludCBib2R5RW5kTGlu
ZSkKICAgICB7Ci0gICAgICAgIEZ1bmNEZWNsTm9kZSogZGVjbCA9IG5ldyAobV9nbG9iYWxEYXRh
KSBGdW5jRGVjbE5vZGUobG9jYXRpb24sICpuYW1lLCBib2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4
cHJlc3Npb24ob3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5U3RhcnRMaW5lKSwgcGFy
YW1ldGVycyk7Ci0gICAgICAgIGlmICgqbmFtZSA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFt
ZXMtPmFyZ3VtZW50cykKKyAgICAgICAgRnVuY0RlY2xOb2RlKiBkZWNsID0gbmV3IChtX3ZtKSBG
dW5jRGVjbE5vZGUobG9jYXRpb24sICpuYW1lLCBib2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJl
c3Npb24ob3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5U3RhcnRMaW5lKSwgcGFyYW1l
dGVycyk7CisgICAgICAgIGlmICgqbmFtZSA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVu
dHMpCiAgICAgICAgICAgICB1c2VzQXJndW1lbnRzKCk7CiAgICAgICAgIG1fc2NvcGUubV9mdW5j
RGVjbGFyYXRpb25zLT5kYXRhLmFwcGVuZChkZWNsLT5ib2R5KCkpOwogICAgICAgICBib2R5LT5z
ZXRMb2MoYm9keVN0YXJ0TGluZSwgYm9keUVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7
CkBAIC0zMzIsNDIgKzMzMiw0MiBAQCBwdWJsaWM6CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVh
dGVCbG9ja1N0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBKU0M6OlNv
dXJjZUVsZW1lbnRzKiBlbGVtZW50cywgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUpCiAgICAg
ewotICAgICAgICBCbG9ja05vZGUqIGJsb2NrID0gbmV3IChtX2dsb2JhbERhdGEpIEJsb2NrTm9k
ZShsb2NhdGlvbiwgZWxlbWVudHMpOworICAgICAgICBCbG9ja05vZGUqIGJsb2NrID0gbmV3ICht
X3ZtKSBCbG9ja05vZGUobG9jYXRpb24sIGVsZW1lbnRzKTsKICAgICAgICAgYmxvY2stPnNldExv
YyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHJl
dHVybiBibG9jazsKICAgICB9CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVFeHByU3RhdGVt
ZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHBy
LCBpbnQgc3RhcnQsIGludCBlbmQpCiAgICAgewotICAgICAgICBFeHByU3RhdGVtZW50Tm9kZSog
cmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIEV4cHJTdGF0ZW1lbnROb2RlKGxvY2F0aW9uLCBl
eHByKTsKKyAgICAgICAgRXhwclN0YXRlbWVudE5vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgRXhw
clN0YXRlbWVudE5vZGUobG9jYXRpb24sIGV4cHIpOwogICAgICAgICByZXN1bHQtPnNldExvYyhz
dGFydCwgZW5kLCBsb2NhdGlvbi5jaGFyUG9zaXRpb24pOwogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUlmU3RhdGVtZW50KGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBjb25kaXRpb24sIFN0YXRl
bWVudE5vZGUqIHRydWVCbG9jaywgaW50IHN0YXJ0LCBpbnQgZW5kKQogICAgIHsKLSAgICAgICAg
SWZOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgSWZOb2RlKGxvY2F0aW9uLCBjb25k
aXRpb24sIHRydWVCbG9jayk7CisgICAgICAgIElmTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBJ
Zk5vZGUobG9jYXRpb24sIGNvbmRpdGlvbiwgdHJ1ZUJsb2NrKTsKICAgICAgICAgcmVzdWx0LT5z
ZXRMb2Moc3RhcnQsIGVuZCwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVJZlN0YXRlbWVudChj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogY29uZGl0aW9u
LCBTdGF0ZW1lbnROb2RlKiB0cnVlQmxvY2ssIFN0YXRlbWVudE5vZGUqIGZhbHNlQmxvY2ssIGlu
dCBzdGFydCwgaW50IGVuZCkKICAgICB7Ci0gICAgICAgIElmTm9kZSogcmVzdWx0ID0gbmV3ICht
X2dsb2JhbERhdGEpIElmRWxzZU5vZGUobG9jYXRpb24sIGNvbmRpdGlvbiwgdHJ1ZUJsb2NrLCBm
YWxzZUJsb2NrKTsKKyAgICAgICAgSWZOb2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIElmRWxzZU5v
ZGUobG9jYXRpb24sIGNvbmRpdGlvbiwgdHJ1ZUJsb2NrLCBmYWxzZUJsb2NrKTsKICAgICAgICAg
cmVzdWx0LT5zZXRMb2Moc3RhcnQsIGVuZCwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVGb3JM
b29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBpbml0
aWFsaXplciwgRXhwcmVzc2lvbk5vZGUqIGNvbmRpdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGl0ZXIs
IFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudHMsIGludCBzdGFydCwgaW50IGVuZCkKICAgICB7Ci0g
ICAgICAgIEZvck5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBGb3JOb2RlKGxvY2F0
aW9uLCBpbml0aWFsaXplciwgY29uZGl0aW9uLCBpdGVyLCBzdGF0ZW1lbnRzKTsKKyAgICAgICAg
Rm9yTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBGb3JOb2RlKGxvY2F0aW9uLCBpbml0aWFsaXpl
ciwgY29uZGl0aW9uLCBpdGVyLCBzdGF0ZW1lbnRzKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Mo
c3RhcnQsIGVuZCwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVGb3JJbkxvb3AoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciogaWRlbnQsIEV4cHJlc3Np
b25Ob2RlKiBpbml0aWFsaXplciwgRXhwcmVzc2lvbk5vZGUqIGl0ZXIsIFN0YXRlbWVudE5vZGUq
IHN0YXRlbWVudHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kLCBpbnQgaW5pdFN0YXJ0
LCBpbnQgaW5pdEVuZCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUpCiAgICAgewotICAgICAg
ICBGb3JJbk5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBGb3JJbk5vZGUobV9nbG9i
YWxEYXRhLCBsb2NhdGlvbiwgKmlkZW50LCBpbml0aWFsaXplciwgaXRlciwgc3RhdGVtZW50cywg
aW5pdFN0YXJ0LCBpbml0U3RhcnQgLSBzdGFydCwgaW5pdEVuZCAtIGluaXRTdGFydCk7CisgICAg
ICAgIEZvckluTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBGb3JJbk5vZGUobV92bSwgbG9jYXRp
b24sICppZGVudCwgaW5pdGlhbGl6ZXIsIGl0ZXIsIHN0YXRlbWVudHMsIGluaXRTdGFydCwgaW5p
dFN0YXJ0IC0gc3RhcnQsIGluaXRFbmQgLSBpbml0U3RhcnQpOwogICAgICAgICByZXN1bHQtPnNl
dExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAg
IHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGRpdm90ICsgMSwgZW5kKTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTM3NSwyOCArMzc1LDI4IEBAIHB1YmxpYzoKIAogICAg
IFN0YXRlbWVudE5vZGUqIGNyZWF0ZUZvckluTG9vcChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBFeHByZXNzaW9uTm9kZSogbGhzLCBFeHByZXNzaW9uTm9kZSogaXRlciwgU3RhdGVt
ZW50Tm9kZSogc3RhdGVtZW50cywgaW50IGVTdGFydCwgaW50IGVEaXZvdCwgaW50IGVFbmQsIGlu
dCBzdGFydCwgaW50IGVuZCkKICAgICB7Ci0gICAgICAgIEZvckluTm9kZSogcmVzdWx0ID0gbmV3
IChtX2dsb2JhbERhdGEpIEZvckluTm9kZShsb2NhdGlvbiwgbGhzLCBpdGVyLCBzdGF0ZW1lbnRz
KTsKKyAgICAgICAgRm9ySW5Ob2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIEZvckluTm9kZShsb2Nh
dGlvbiwgbGhzLCBpdGVyLCBzdGF0ZW1lbnRzKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3Rh
cnQsIGVuZCwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9j
YXRpb24ocmVzdWx0LCBlU3RhcnQsIGVEaXZvdCwgZUVuZCk7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogCi0gICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlRW1wdHlTdGF0ZW1lbnQoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEp
IEVtcHR5U3RhdGVtZW50Tm9kZShsb2NhdGlvbik7IH0KKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVh
dGVFbXB0eVN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uKSB7IHJldHVy
biBuZXcgKG1fdm0pIEVtcHR5U3RhdGVtZW50Tm9kZShsb2NhdGlvbik7IH0KIAogICAgIFN0YXRl
bWVudE5vZGUqIGNyZWF0ZVZhclN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgaW50IHN0YXJ0LCBpbnQgZW5kKQogICAgIHsKICAg
ICAgICAgU3RhdGVtZW50Tm9kZSogcmVzdWx0OwogICAgICAgICBpZiAoIWV4cHIpCi0gICAgICAg
ICAgICByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgRW1wdHlTdGF0ZW1lbnROb2RlKGxvY2F0
aW9uKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyAobV92bSkgRW1wdHlTdGF0ZW1lbnROb2Rl
KGxvY2F0aW9uKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gbmV3IChtX2ds
b2JhbERhdGEpIFZhclN0YXRlbWVudE5vZGUobG9jYXRpb24sIGV4cHIpOworICAgICAgICAgICAg
cmVzdWx0ID0gbmV3IChtX3ZtKSBWYXJTdGF0ZW1lbnROb2RlKGxvY2F0aW9uLCBleHByKTsKICAg
ICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQsIGVuZCwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVh
dGVSZXR1cm5TdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVz
c2lvbk5vZGUqIGV4cHJlc3Npb24sIGludCBlU3RhcnQsIGludCBlRW5kLCBpbnQgc3RhcnRMaW5l
LCBpbnQgZW5kTGluZSkKICAgICB7Ci0gICAgICAgIFJldHVybk5vZGUqIHJlc3VsdCA9IG5ldyAo
bV9nbG9iYWxEYXRhKSBSZXR1cm5Ob2RlKGxvY2F0aW9uLCBleHByZXNzaW9uKTsKKyAgICAgICAg
UmV0dXJuTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBSZXR1cm5Ob2RlKGxvY2F0aW9uLCBleHBy
ZXNzaW9uKTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVF
bmQsIGVFbmQpOwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxv
Y2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC00MDQsNyAr
NDA0LDcgQEAgcHVibGljOgogCiAgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlQnJlYWtTdGF0ZW1l
bnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgaW50IGVTdGFydCwgaW50IGVFbmQs
IGludCBzdGFydExpbmUsIGludCBlbmRMaW5lKQogICAgIHsKLSAgICAgICAgQnJlYWtOb2RlKiBy
ZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQnJlYWtOb2RlKG1fZ2xvYmFsRGF0YSwgbG9jYXRp
b24pOworICAgICAgICBCcmVha05vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgQnJlYWtOb2RlKG1f
dm0sIGxvY2F0aW9uKTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBlU3Rh
cnQsIGVFbmQsIGVFbmQpOwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExp
bmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC00
MTIsNyArNDEyLDcgQEAgcHVibGljOgogCiAgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlQnJlYWtT
dGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQsIGludCBlU3RhcnQsIGludCBlRW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGlu
ZSkKICAgICB7Ci0gICAgICAgIEJyZWFrTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEp
IEJyZWFrTm9kZShsb2NhdGlvbiwgKmlkZW50KTsKKyAgICAgICAgQnJlYWtOb2RlKiByZXN1bHQg
PSBuZXcgKG1fdm0pIEJyZWFrTm9kZShsb2NhdGlvbiwgKmlkZW50KTsKICAgICAgICAgc2V0RXhj
ZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVFbmQsIGVFbmQpOwogICAgICAgICByZXN1
bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC00MjAsNyArNDIwLDcgQEAgcHVibGljOgogCiAgICAg
U3RhdGVtZW50Tm9kZSogY3JlYXRlQ29udGludWVTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBsb2NhdGlvbiwgaW50IGVTdGFydCwgaW50IGVFbmQsIGludCBzdGFydExpbmUsIGludCBl
bmRMaW5lKQogICAgIHsKLSAgICAgICAgQ29udGludWVOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xv
YmFsRGF0YSkgQ29udGludWVOb2RlKG1fZ2xvYmFsRGF0YSwgbG9jYXRpb24pOworICAgICAgICBD
b250aW51ZU5vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgQ29udGludWVOb2RlKG1fdm0sIGxvY2F0
aW9uKTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVFbmQs
IGVFbmQpOwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0
aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC00MjgsNyArNDI4
LDcgQEAgcHVibGljOgogCiAgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlQ29udGludWVTdGF0ZW1l
bnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciogaWRl
bnQsIGludCBlU3RhcnQsIGludCBlRW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAg
ICB7Ci0gICAgICAgIENvbnRpbnVlTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIENv
bnRpbnVlTm9kZShsb2NhdGlvbiwgKmlkZW50KTsKKyAgICAgICAgQ29udGludWVOb2RlKiByZXN1
bHQgPSBuZXcgKG1fdm0pIENvbnRpbnVlTm9kZShsb2NhdGlvbiwgKmlkZW50KTsKICAgICAgICAg
c2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVFbmQsIGVFbmQpOwogICAgICAg
ICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlv
bik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC00MzYsNyArNDM2LDcgQEAgcHVibGljOgog
CiAgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlVHJ5U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgbG9jYXRpb24sIFN0YXRlbWVudE5vZGUqIHRyeUJsb2NrLCBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCwgU3RhdGVtZW50Tm9kZSogY2F0Y2hCbG9jaywgU3RhdGVtZW50Tm9kZSogZmluYWxs
eUJsb2NrLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7Ci0gICAgICAgIFRyeU5v
ZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBUcnlOb2RlKGxvY2F0aW9uLCB0cnlCbG9j
aywgKmlkZW50LCBjYXRjaEJsb2NrLCBmaW5hbGx5QmxvY2spOworICAgICAgICBUcnlOb2RlKiBy
ZXN1bHQgPSBuZXcgKG1fdm0pIFRyeU5vZGUobG9jYXRpb24sIHRyeUJsb2NrLCAqaWRlbnQsIGNh
dGNoQmxvY2ssIGZpbmFsbHlCbG9jayk7CiAgICAgICAgIGlmIChjYXRjaEJsb2NrKQogICAgICAg
ICAgICAgdXNlc0NhdGNoKCk7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5k
TGluZSwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKQEAgLTQ0NSwyOSArNDQ1LDI5IEBAIHB1Ymxp
YzoKIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVN3aXRjaFN0YXRlbWVudChjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgQ2xhdXNlTGlzdE5v
ZGUqIGZpcnN0Q2xhdXNlcywgQ2FzZUNsYXVzZU5vZGUqIGRlZmF1bHRDbGF1c2UsIENsYXVzZUxp
c3ROb2RlKiBzZWNvbmRDbGF1c2VzLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7
Ci0gICAgICAgIENhc2VCbG9ja05vZGUqIGNhc2VzID0gbmV3IChtX2dsb2JhbERhdGEpIENhc2VC
bG9ja05vZGUoZmlyc3RDbGF1c2VzLCBkZWZhdWx0Q2xhdXNlLCBzZWNvbmRDbGF1c2VzKTsKLSAg
ICAgICAgU3dpdGNoTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIFN3aXRjaE5vZGUo
bG9jYXRpb24sIGV4cHIsIGNhc2VzKTsKKyAgICAgICAgQ2FzZUJsb2NrTm9kZSogY2FzZXMgPSBu
ZXcgKG1fdm0pIENhc2VCbG9ja05vZGUoZmlyc3RDbGF1c2VzLCBkZWZhdWx0Q2xhdXNlLCBzZWNv
bmRDbGF1c2VzKTsKKyAgICAgICAgU3dpdGNoTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBTd2l0
Y2hOb2RlKGxvY2F0aW9uLCBleHByLCBjYXNlcyk7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0
YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVXaGlsZVN0YXRlbWVu
dChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwg
U3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAg
ICB7Ci0gICAgICAgIFdoaWxlTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIFdoaWxl
Tm9kZShsb2NhdGlvbiwgZXhwciwgc3RhdGVtZW50KTsKKyAgICAgICAgV2hpbGVOb2RlKiByZXN1
bHQgPSBuZXcgKG1fdm0pIFdoaWxlTm9kZShsb2NhdGlvbiwgZXhwciwgc3RhdGVtZW50KTsKICAg
ICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jaGFyUG9z
aXRpb24pOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIFN0YXRlbWVudE5v
ZGUqIGNyZWF0ZURvV2hpbGVTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCBFeHByZXNzaW9uTm9kZSogZXhwciwgaW50IHN0
YXJ0TGluZSwgaW50IGVuZExpbmUpCiAgICAgewotICAgICAgICBEb1doaWxlTm9kZSogcmVzdWx0
ID0gbmV3IChtX2dsb2JhbERhdGEpIERvV2hpbGVOb2RlKGxvY2F0aW9uLCBzdGF0ZW1lbnQsIGV4
cHIpOworICAgICAgICBEb1doaWxlTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBEb1doaWxlTm9k
ZShsb2NhdGlvbiwgc3RhdGVtZW50LCBleHByKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3Rh
cnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jaGFyUG9zaXRpb24pOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUxhYmVsU3RhdGVtZW50
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
LCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQsIGludCBzdGFydCwgaW50IGVuZCkKICAgICB7Ci0g
ICAgICAgIExhYmVsTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIExhYmVsTm9kZShs
b2NhdGlvbiwgKmlkZW50LCBzdGF0ZW1lbnQpOworICAgICAgICBMYWJlbE5vZGUqIHJlc3VsdCA9
IG5ldyAobV92bSkgTGFiZWxOb2RlKGxvY2F0aW9uLCAqaWRlbnQsIHN0YXRlbWVudCk7CiAgICAg
ICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGVuZCwgZW5kKTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC00NzUsMTQgKzQ3NSwxNCBAQCBwdWJsaWM6CiAg
ICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlV2l0aFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgU3RhdGVtZW50Tm9kZSogc3RhdGVt
ZW50LCBpbnQgc3RhcnQsIGludCBlbmQsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lKQogICAg
IHsKICAgICAgICAgdXNlc1dpdGgoKTsKLSAgICAgICAgV2l0aE5vZGUqIHJlc3VsdCA9IG5ldyAo
bV9nbG9iYWxEYXRhKSBXaXRoTm9kZShsb2NhdGlvbiwgZXhwciwgc3RhdGVtZW50LCBlbmQsIGVu
ZCAtIHN0YXJ0KTsKKyAgICAgICAgV2l0aE5vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgV2l0aE5v
ZGUobG9jYXRpb24sIGV4cHIsIHN0YXRlbWVudCwgZW5kLCBlbmQgLSBzdGFydCk7CiAgICAgICAg
IHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uY2hhclBvc2l0aW9u
KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9ICAgIAogICAgIAogICAgIFN0YXRlbWVu
dE5vZGUqIGNyZWF0ZVRocm93U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBpbnQgc3RhcnQsIGludCBlbmQsIGludCBzdGFydExp
bmUsIGludCBlbmRMaW5lKQogICAgIHsKLSAgICAgICAgVGhyb3dOb2RlKiByZXN1bHQgPSBuZXcg
KG1fZ2xvYmFsRGF0YSkgVGhyb3dOb2RlKGxvY2F0aW9uLCBleHByKTsKKyAgICAgICAgVGhyb3dO
b2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIFRocm93Tm9kZShsb2NhdGlvbiwgZXhwcik7CiAgICAg
ICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uY2hhclBvc2l0
aW9uKTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBzdGFydCwgZW5kLCBl
bmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDkwLDIxICs0OTAsMjEgQEAgcHVibGlj
OgogICAgIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZURlYnVnZ2VyKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lKQogICAgIHsKLSAg
ICAgICAgRGVidWdnZXJTdGF0ZW1lbnROb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkg
RGVidWdnZXJTdGF0ZW1lbnROb2RlKGxvY2F0aW9uKTsKKyAgICAgICAgRGVidWdnZXJTdGF0ZW1l
bnROb2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIERlYnVnZ2VyU3RhdGVtZW50Tm9kZShsb2NhdGlv
bik7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24u
Y2hhclBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAg
U3RhdGVtZW50Tm9kZSogY3JlYXRlQ29uc3RTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgQ29uc3REZWNsTm9kZSogZGVjbHMsIGludCBzdGFydExpbmUsIGludCBlbmRM
aW5lKQogICAgIHsKLSAgICAgICAgQ29uc3RTdGF0ZW1lbnROb2RlKiByZXN1bHQgPSBuZXcgKG1f
Z2xvYmFsRGF0YSkgQ29uc3RTdGF0ZW1lbnROb2RlKGxvY2F0aW9uLCBkZWNscyk7CisgICAgICAg
IENvbnN0U3RhdGVtZW50Tm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBDb25zdFN0YXRlbWVudE5v
ZGUobG9jYXRpb24sIGRlY2xzKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBl
bmRMaW5lLCBsb2NhdGlvbi5jaGFyUG9zaXRpb24pOwogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KIAogICAgIENvbnN0RGVjbE5vZGUqIGFwcGVuZENvbnN0RGVjbChjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBDb25zdERlY2xOb2RlKiB0YWlsLCBjb25zdCBJZGVudGlmaWVy
KiBuYW1lLCBFeHByZXNzaW9uTm9kZSogaW5pdGlhbGl6ZXIpCiAgICAgewotICAgICAgICBDb25z
dERlY2xOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQ29uc3REZWNsTm9kZShsb2Nh
dGlvbiwgKm5hbWUsIGluaXRpYWxpemVyKTsKKyAgICAgICAgQ29uc3REZWNsTm9kZSogcmVzdWx0
ID0gbmV3IChtX3ZtKSBDb25zdERlY2xOb2RlKGxvY2F0aW9uLCAqbmFtZSwgaW5pdGlhbGl6ZXIp
OwogICAgICAgICBpZiAodGFpbCkKICAgICAgICAgICAgIHRhaWwtPm1fbmV4dCA9IHJlc3VsdDsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTUxNyw3ICs1MTcsNyBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGFkZFZhcihjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgaW50IGF0dHJzKQogICAgIHsK
LSAgICAgICAgaWYgKG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICpp
ZGVudCkKKyAgICAgICAgaWYgKG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqaWRl
bnQpCiAgICAgICAgICAgICB1c2VzQXJndW1lbnRzKCk7CiAgICAgICAgIG1fc2NvcGUubV92YXJE
ZWNsYXJhdGlvbnMtPmRhdGEuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGlkZW50LCBhdHRycykpOwog
ICAgIH0KQEAgLTUzMCw3ICs1MzAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxDb21tYU5vZGUqPihsaXN0KS0+YXBwZW5kKGluaXQpOwogICAgICAgICAgICAgcmV0dXJuIGxp
c3Q7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBDb21tYU5v
ZGUobG9jYXRpb24sIGxpc3QsIGluaXQpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBDb21t
YU5vZGUobG9jYXRpb24sIGxpc3QsIGluaXQpOwogICAgIH0KIAogICAgIGludCBldmFsQ291bnQo
KSBjb25zdCB7IHJldHVybiBtX2V2YWxDb3VudDsgfQpAQCAtNjE4LDkgKzYxOCw5IEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgU2NvcGUgewotICAgICAgICBTY29wZShKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEpCi0gICAgICAgICAgICA6IG1fdmFyRGVjbGFyYXRpb25zKG5ldyAo
Z2xvYmFsRGF0YSkgUGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4p
Ci0gICAgICAgICAgICAsIG1fZnVuY0RlY2xhcmF0aW9ucyhuZXcgKGdsb2JhbERhdGEpIFBhcnNl
ckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjaz4pCisgICAgICAgIFNj
b3BlKFZNKiB2bSkKKyAgICAgICAgICAgIDogbV92YXJEZWNsYXJhdGlvbnMobmV3ICh2bSkgUGFy
c2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4pCisgICAgICAgICAgICAs
IG1fZnVuY0RlY2xhcmF0aW9ucyhuZXcgKHZtKSBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25T
dGFja3M6OkZ1bmN0aW9uU3RhY2s+KQogICAgICAgICAgICAgLCBtX2ZlYXR1cmVzKDApCiAgICAg
ICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKDApCiAgICAgICAgIHsKQEAgLTY0OCwxMCArNjQ4LDEw
IEBAIHByaXZhdGU6CiAgICAgfQogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVOdW1iZXIoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgZG91YmxlIGQpCiAgICAgewotICAgICAgICBy
ZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIE51bWJlck5vZGUobG9jYXRpb24sIGQpOworICAgICAg
ICByZXR1cm4gbmV3IChtX3ZtKSBOdW1iZXJOb2RlKGxvY2F0aW9uLCBkKTsKICAgICB9CiAgICAg
Ci0gICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CisgICAgVk0qIG1fdm07CiAgICAgU291
cmNlQ29kZSogbV9zb3VyY2VDb2RlOwogICAgIFNjb3BlIG1fc2NvcGU7CiAgICAgVmVjdG9yPEJp
bmFyeU9wZXJhbmQsIDEwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9iaW5hcnlPcGVyYW5kU3Rh
Y2s7CkBAIC02NjUsMjYgKzY2NSwyNiBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFr
ZVR5cGVPZk5vCiB7CiAgICAgaWYgKGV4cHItPmlzUmVzb2x2ZU5vZGUoKSkgewogICAgICAgICBS
ZXNvbHZlTm9kZSogcmVzb2x2ZSA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4oZXhwcik7Ci0g
ICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgVHlwZU9mUmVzb2x2ZU5vZGUobG9jYXRp
b24sIHJlc29sdmUtPmlkZW50aWZpZXIoKSk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIFR5
cGVPZlJlc29sdmVOb2RlKGxvY2F0aW9uLCByZXNvbHZlLT5pZGVudGlmaWVyKCkpOwogICAgIH0K
LSAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFR5cGVPZlZhbHVlTm9kZShsb2NhdGlvbiwg
ZXhwcik7CisgICAgcmV0dXJuIG5ldyAobV92bSkgVHlwZU9mVmFsdWVOb2RlKGxvY2F0aW9uLCBl
eHByKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VEZWxldGVOb2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBpbnQg
c3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCkKIHsKICAgICBpZiAoIWV4cHItPmlzTG9jYXRpb24o
KSkKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBEZWxldGVWYWx1ZU5vZGUobG9j
YXRpb24sIGV4cHIpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBEZWxldGVWYWx1ZU5vZGUo
bG9jYXRpb24sIGV4cHIpOwogICAgIGlmIChleHByLT5pc1Jlc29sdmVOb2RlKCkpIHsKICAgICAg
ICAgUmVzb2x2ZU5vZGUqIHJlc29sdmUgPSBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KGV4cHIp
OwotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIERlbGV0ZVJlc29sdmVOb2RlKGxv
Y2F0aW9uLCByZXNvbHZlLT5pZGVudGlmaWVyKCksIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQg
LSBkaXZvdCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIERlbGV0ZVJlc29sdmVOb2RlKGxv
Y2F0aW9uLCByZXNvbHZlLT5pZGVudGlmaWVyKCksIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQg
LSBkaXZvdCk7CiAgICAgfQogICAgIGlmIChleHByLT5pc0JyYWNrZXRBY2Nlc3Nvck5vZGUoKSkg
ewogICAgICAgICBCcmFja2V0QWNjZXNzb3JOb2RlKiBicmFja2V0ID0gc3RhdGljX2Nhc3Q8QnJh
Y2tldEFjY2Vzc29yTm9kZSo+KGV4cHIpOwotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERh
dGEpIERlbGV0ZUJyYWNrZXROb2RlKGxvY2F0aW9uLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQt
PnN1YnNjcmlwdCgpLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOworICAgICAg
ICByZXR1cm4gbmV3IChtX3ZtKSBEZWxldGVCcmFja2V0Tm9kZShsb2NhdGlvbiwgYnJhY2tldC0+
YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAt
IGRpdm90KTsKICAgICB9CiAgICAgQVNTRVJUKGV4cHItPmlzRG90QWNjZXNzb3JOb2RlKCkpOwog
ICAgIERvdEFjY2Vzc29yTm9kZSogZG90ID0gc3RhdGljX2Nhc3Q8RG90QWNjZXNzb3JOb2RlKj4o
ZXhwcik7Ci0gICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBEZWxldGVEb3ROb2RlKGxvY2F0
aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGRpdm90LCBkaXZvdCAtIHN0YXJ0
LCBlbmQgLSBkaXZvdCk7CisgICAgcmV0dXJuIG5ldyAobV92bSkgRGVsZXRlRG90Tm9kZShsb2Nh
dGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBkaXZvdCwgZGl2b3QgLSBzdGFy
dCwgZW5kIC0gZGl2b3QpOwogfQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZU5l
Z2F0ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUq
IG4pCkBAIC02OTUsMTQgKzY5NSwxNCBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFr
ZU5lZ2F0ZU5vCiAgICAgICAgIHJldHVybiBudW1iZXJOb2RlOwogICAgIH0KIAotICAgIHJldHVy
biBuZXcgKG1fZ2xvYmFsRGF0YSkgTmVnYXRlTm9kZShsb2NhdGlvbiwgbik7CisgICAgcmV0dXJu
IG5ldyAobV92bSkgTmVnYXRlTm9kZShsb2NhdGlvbiwgbik7CiB9CiAKIEV4cHJlc3Npb25Ob2Rl
KiBBU1RCdWlsZGVyOjptYWtlQml0d2lzZU5vdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpCiB7CiAgICAgaWYgKGV4cHItPmlzTnVtYmVy
KCkpCiAgICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIH50b0ludDMyKHN0YXRp
Y19jYXN0PE51bWJlck5vZGUqPihleHByKS0+dmFsdWUoKSkpOwotICAgIHJldHVybiBuZXcgKG1f
Z2xvYmFsRGF0YSkgQml0d2lzZU5vdE5vZGUobG9jYXRpb24sIGV4cHIpOworICAgIHJldHVybiBu
ZXcgKG1fdm0pIEJpdHdpc2VOb3ROb2RlKGxvY2F0aW9uLCBleHByKTsKIH0KIAogRXhwcmVzc2lv
bk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VNdWx0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9v
bCByaWdodEhhc0Fzc2lnbm1lbnRzKQpAQCAtNzE0LDEyICs3MTQsMTIgQEAgRXhwcmVzc2lvbk5v
ZGUqIEFTVEJ1aWxkZXI6Om1ha2VNdWx0Tm9kZQogICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVy
KGxvY2F0aW9uLCBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpICogc3Rh
dGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUoKSk7CiAKICAgICBpZiAoZXhwcjEt
PmlzTnVtYmVyKCkgJiYgc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSA9
PSAxKQotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFVuYXJ5UGx1c05vZGUobG9j
YXRpb24sIGV4cHIyKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgVW5hcnlQbHVzTm9kZShs
b2NhdGlvbiwgZXhwcjIpOwogCiAgICAgaWYgKGV4cHIyLT5pc051bWJlcigpICYmIHN0YXRpY19j
YXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIG5l
dyAobV9nbG9iYWxEYXRhKSBVbmFyeVBsdXNOb2RlKGxvY2F0aW9uLCBleHByMSk7CisgICAgICAg
IHJldHVybiBuZXcgKG1fdm0pIFVuYXJ5UGx1c05vZGUobG9jYXRpb24sIGV4cHIxKTsKIAotICAg
IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgTXVsdE5vZGUobG9jYXRpb24sIGV4cHIxLCBleHBy
MiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgcmV0dXJuIG5ldyAobV92bSkgTXVsdE5vZGUo
bG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiB9CiAKIEV4cHJl
c3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlRGl2Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwg
Ym9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQpAQCAtNzI5LDcgKzcyOSw3IEBAIEV4cHJlc3Npb25O
b2RlKiBBU1RCdWlsZGVyOjptYWtlRGl2Tm9kZSgKIAogICAgIGlmIChleHByMS0+aXNOdW1iZXIo
KSAmJiBleHByMi0+aXNOdW1iZXIoKSkKICAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlcihsb2Nh
dGlvbiwgc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSAvIHN0YXRpY19j
YXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkpOwotICAgIHJldHVybiBuZXcgKG1fZ2xv
YmFsRGF0YSkgRGl2Tm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1l
bnRzKTsKKyAgICByZXR1cm4gbmV3IChtX3ZtKSBEaXZOb2RlKGxvY2F0aW9uLCBleHByMSwgZXhw
cjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRl
cjo6bWFrZU1vZE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lv
bk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25t
ZW50cykKQEAgLTczOSwxNCArNzM5LDE0IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjpt
YWtlTW9kTm9kZSgKICAgICAKICAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlz
TnVtYmVyKCkpCiAgICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIGZtb2Qoc3Rh
dGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSwgc3RhdGljX2Nhc3Q8TnVtYmVy
Tm9kZSo+KGV4cHIyKS0+dmFsdWUoKSkpOwotICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkg
TW9kTm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAg
ICByZXR1cm4gbmV3IChtX3ZtKSBNb2ROb2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0
SGFzQXNzaWdubWVudHMpOwogfQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUFk
ZE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKIHsK
ICAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCiAgICAgICAg
IHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihl
eHByMSktPnZhbHVlKCkgKyBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgp
KTsKLSAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEFkZE5vZGUobG9jYXRpb24sIGV4cHIx
LCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgcmV0dXJuIG5ldyAobV92bSkgQWRk
Tm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAog
RXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VTdWJOb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCkBAIC03NTYsNzkgKzc1Niw3OSBAQCBFeHBy
ZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZVN1Yk5vZGUoCiAKICAgICBpZiAoZXhwcjEtPmlz
TnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybiBjcmVhdGVOdW1i
ZXIobG9jYXRpb24sIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkgLSBz
dGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKTsKLSAgICByZXR1cm4gbmV3
IChtX2dsb2JhbERhdGEpIFN1Yk5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNB
c3NpZ25tZW50cyk7CisgICAgcmV0dXJuIG5ldyAobV92bSkgU3ViTm9kZShsb2NhdGlvbiwgZXhw
cjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUqIEFT
VEJ1aWxkZXI6Om1ha2VMZWZ0U2hpZnROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJp
Z2h0SGFzQXNzaWdubWVudHMpCiB7CiAgICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4cHIy
LT5pc051bWJlcigpKQogICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyKGxvY2F0aW9uLCB0b0lu
dDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkpIDw8ICh0b1VJbnQz
MihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKSAmIDB4MWYpKTsKLSAg
ICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIExlZnRTaGlmdE5vZGUobG9jYXRpb24sIGV4cHIx
LCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgcmV0dXJuIG5ldyAobV92bSkgTGVm
dFNoaWZ0Tm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsK
IH0KIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VSaWdodFNoaWZ0Tm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJl
c3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQogewogICAgIGlmIChl
eHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkKICAgICAgICAgcmV0dXJuIGNy
ZWF0ZU51bWJlcihsb2NhdGlvbiwgdG9JbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhw
cjEpLT52YWx1ZSgpKSA+PiAodG9VSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIy
KS0+dmFsdWUoKSkgJiAweDFmKSk7Ci0gICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBSaWdo
dFNoaWZ0Tm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsK
KyAgICByZXR1cm4gbmV3IChtX3ZtKSBSaWdodFNoaWZ0Tm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4
cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxk
ZXI6Om1ha2VVUmlnaHRTaGlmdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRI
YXNBc3NpZ25tZW50cykKIHsKICAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlz
TnVtYmVyKCkpCiAgICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIHRvVUludDMy
KHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkpID4+ICh0b1VJbnQzMihz
dGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKSAmIDB4MWYpKTsKLSAgICBy
ZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFVuc2lnbmVkUmlnaHRTaGlmdE5vZGUobG9jYXRpb24s
IGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgcmV0dXJuIG5ldyAobV92
bSkgVW5zaWduZWRSaWdodFNoaWZ0Tm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhh
c0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VCaXRP
ck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKIHsK
ICAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCiAgICAgICAg
IHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIHRvSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVy
Tm9kZSo+KGV4cHIxKS0+dmFsdWUoKSkgfCB0b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUq
PihleHByMiktPnZhbHVlKCkpKTsKLSAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEJpdE9y
Tm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICBy
ZXR1cm4gbmV3IChtX3ZtKSBCaXRPck5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRI
YXNBc3NpZ25tZW50cyk7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQml0
QW5kTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSog
ZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQog
ewogICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkKICAgICAg
ICAgcmV0dXJuIGNyZWF0ZU51bWJlcihsb2NhdGlvbiwgdG9JbnQzMihzdGF0aWNfY2FzdDxOdW1i
ZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpKSAmIHRvSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9k
ZSo+KGV4cHIyKS0+dmFsdWUoKSkpOwotICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQml0
QW5kTm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAg
ICByZXR1cm4gbmV3IChtX3ZtKSBCaXRBbmROb2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJp
Z2h0SGFzQXNzaWdubWVudHMpOwogfQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFr
ZUJpdFhPck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5v
ZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50
cykKIHsKICAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIHRvSW50MzIoc3RhdGljX2Nhc3Q8
TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSkgXiB0b0ludDMyKHN0YXRpY19jYXN0PE51bWJl
ck5vZGUqPihleHByMiktPnZhbHVlKCkpKTsKLSAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEp
IEJpdFhPck5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7
CisgICAgcmV0dXJuIG5ldyAobV92bSkgQml0WE9yTm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIy
LCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6
Om1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4
cHJlc3Npb25Ob2RlKiBmdW5jLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBpbnQgc3RhcnQsIGludCBk
aXZvdCwgaW50IGVuZCkKIHsKICAgICBpZiAoIWZ1bmMtPmlzTG9jYXRpb24oKSkKLSAgICAgICAg
cmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBGdW5jdGlvbkNhbGxWYWx1ZU5vZGUobG9jYXRpb24s
IGZ1bmMsIGFyZ3MsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CisgICAgICAg
IHJldHVybiBuZXcgKG1fdm0pIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZShsb2NhdGlvbiwgZnVuYywg
YXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKICAgICBpZiAoZnVuYy0+
aXNSZXNvbHZlTm9kZSgpKSB7CiAgICAgICAgIFJlc29sdmVOb2RlKiByZXNvbHZlID0gc3RhdGlj
X2Nhc3Q8UmVzb2x2ZU5vZGUqPihmdW5jKTsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRl
bnRpZmllciA9IHJlc29sdmUtPmlkZW50aWZpZXIoKTsKLSAgICAgICAgaWYgKGlkZW50aWZpZXIg
PT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5ldmFsKSB7CisgICAgICAgIGlmIChpZGVu
dGlmaWVyID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwpIHsKICAgICAgICAgICAgIHVzZXNF
dmFsKCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEV2YWxGdW5jdGlv
bkNhbGxOb2RlKGxvY2F0aW9uLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2
b3QpOworICAgICAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgRXZhbEZ1bmN0aW9uQ2FsbE5vZGUo
bG9jYXRpb24sIGFyZ3MsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CiAgICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBGdW5jdGlvbkNhbGxSZXNv
bHZlTm9kZShsb2NhdGlvbiwgaWRlbnRpZmllciwgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQs
IGVuZCAtIGRpdm90KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgRnVuY3Rpb25DYWxsUmVz
b2x2ZU5vZGUobG9jYXRpb24sIGlkZW50aWZpZXIsIGFyZ3MsIGRpdm90LCBkaXZvdCAtIHN0YXJ0
LCBlbmQgLSBkaXZvdCk7CiAgICAgfQogICAgIGlmIChmdW5jLT5pc0JyYWNrZXRBY2Nlc3Nvck5v
ZGUoKSkgewogICAgICAgICBCcmFja2V0QWNjZXNzb3JOb2RlKiBicmFja2V0ID0gc3RhdGljX2Nh
c3Q8QnJhY2tldEFjY2Vzc29yTm9kZSo+KGZ1bmMpOwotICAgICAgICBGdW5jdGlvbkNhbGxCcmFj
a2V0Tm9kZSogbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBGdW5jdGlvbkNhbGxCcmFja2V0Tm9k
ZShsb2NhdGlvbiwgYnJhY2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwgYXJncywg
ZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKKyAgICAgICAgRnVuY3Rpb25DYWxs
QnJhY2tldE5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlKGxv
Y2F0aW9uLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBhcmdzLCBkaXZv
dCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOwogICAgICAgICBub2RlLT5zZXRTdWJleHBy
ZXNzaW9uSW5mbyhicmFja2V0LT5kaXZvdCgpLCBicmFja2V0LT5lbmRPZmZzZXQoKSk7CiAgICAg
ICAgIHJldHVybiBub2RlOwogICAgIH0KICAgICBBU1NFUlQoZnVuYy0+aXNEb3RBY2Nlc3Nvck5v
ZGUoKSk7CiAgICAgRG90QWNjZXNzb3JOb2RlKiBkb3QgPSBzdGF0aWNfY2FzdDxEb3RBY2Nlc3Nv
ck5vZGUqPihmdW5jKTsKICAgICBGdW5jdGlvbkNhbGxEb3ROb2RlKiBub2RlOwotICAgIGlmIChk
b3QtPmlkZW50aWZpZXIoKSA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmNhbGwpCi0g
ICAgICAgIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGUo
bG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgYXJncywgZGl2b3QsIGRp
dm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKLSAgICBlbHNlIGlmIChkb3QtPmlkZW50aWZpZXIo
KSA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmFwcGx5KQotICAgICAgICBub2RlID0g
bmV3IChtX2dsb2JhbERhdGEpIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZShsb2NhdGlvbiwgZG90
LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwg
ZW5kIC0gZGl2b3QpOworICAgIGlmIChkb3QtPmlkZW50aWZpZXIoKSA9PSBtX3ZtLT5wcm9wZXJ0
eU5hbWVzLT5jYWxsKQorICAgICAgICBub2RlID0gbmV3IChtX3ZtKSBDYWxsRnVuY3Rpb25DYWxs
RG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBhcmdzLCBk
aXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOworICAgIGVsc2UgaWYgKGRvdC0+aWRl
bnRpZmllcigpID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmFwcGx5KQorICAgICAgICBub2RlID0g
bmV3IChtX3ZtKSBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgp
LCBkb3QtPmlkZW50aWZpZXIoKSwgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRp
dm90KTsKICAgICBlbHNlCi0gICAgICAgIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgRnVuY3Rp
b25DYWxsRG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBh
cmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOworICAgICAgICBub2RlID0g
bmV3IChtX3ZtKSBGdW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90
LT5pZGVudGlmaWVyKCksIGFyZ3MsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7
CiAgICAgbm9kZS0+c2V0U3ViZXhwcmVzc2lvbkluZm8oZG90LT5kaXZvdCgpLCBkb3QtPmVuZE9m
ZnNldCgpKTsKICAgICByZXR1cm4gbm9kZTsKIH0KQEAgLTgzNywxMCArODM3LDEwIEBAIEV4cHJl
c3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQmluYXJ5Tm8KIHsKICAgICBzd2l0Y2ggKHRva2Vu
KSB7CiAgICAgY2FzZSBPUjoKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBMb2dp
Y2FsT3BOb2RlKGxvY2F0aW9uLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgT3BMb2dpY2FsT3IpOwor
ICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBMb2dpY2FsT3BOb2RlKGxvY2F0aW9uLCBsaHMuZmly
c3QsIHJocy5maXJzdCwgT3BMb2dpY2FsT3IpOwogCiAgICAgY2FzZSBBTkQ6Ci0gICAgICAgIHJl
dHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgTG9naWNhbE9wTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0
LCByaHMuZmlyc3QsIE9wTG9naWNhbEFuZCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIExv
Z2ljYWxPcE5vZGUobG9jYXRpb24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCBPcExvZ2ljYWxBbmQp
OwogCiAgICAgY2FzZSBCSVRPUjoKICAgICAgICAgcmV0dXJuIG1ha2VCaXRPck5vZGUobG9jYXRp
b24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwpAQCAt
ODUyLDM3ICs4NTIsMzcgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VCaW5hcnlO
bwogICAgICAgICByZXR1cm4gbWFrZUJpdEFuZE5vZGUobG9jYXRpb24sIGxocy5maXJzdCwgcmhz
LmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwogCiAgICAgY2FzZSBFUUVROgotICAg
ICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEVxdWFsTm9kZShsb2NhdGlvbiwgbGhzLmZp
cnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CisgICAgICAgIHJldHVy
biBuZXcgKG1fdm0pIEVxdWFsTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJo
cy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CiAKICAgICBjYXNlIE5FOgotICAgICAgICByZXR1cm4g
bmV3IChtX2dsb2JhbERhdGEpIE5vdEVxdWFsTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMu
Zmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CisgICAgICAgIHJldHVybiBuZXcgKG1f
dm0pIE5vdEVxdWFsTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNv
bmQuaGFzQXNzaWdubWVudCk7CiAKICAgICBjYXNlIFNUUkVROgotICAgICAgICByZXR1cm4gbmV3
IChtX2dsb2JhbERhdGEpIFN0cmljdEVxdWFsTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMu
Zmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CisgICAgICAgIHJldHVybiBuZXcgKG1f
dm0pIFN0cmljdEVxdWFsTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5z
ZWNvbmQuaGFzQXNzaWdubWVudCk7CiAKICAgICBjYXNlIFNUUk5FUToKLSAgICAgICAgcmV0dXJu
IG5ldyAobV9nbG9iYWxEYXRhKSBOb3RTdHJpY3RFcXVhbE5vZGUobG9jYXRpb24sIGxocy5maXJz
dCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOworICAgICAgICByZXR1cm4g
bmV3IChtX3ZtKSBOb3RTdHJpY3RFcXVhbE5vZGUobG9jYXRpb24sIGxocy5maXJzdCwgcmhzLmZp
cnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwogCiAgICAgY2FzZSBMVDoKLSAgICAgICAg
cmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBMZXNzTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCBy
aHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CisgICAgICAgIHJldHVybiBuZXcg
KG1fdm0pIExlc3NOb2RlKGxvY2F0aW9uLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29u
ZC5oYXNBc3NpZ25tZW50KTsKIAogICAgIGNhc2UgR1Q6Ci0gICAgICAgIHJldHVybiBuZXcgKG1f
Z2xvYmFsRGF0YSkgR3JlYXRlck5vZGUobG9jYXRpb24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCBy
aHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBHcmVh
dGVyTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNz
aWdubWVudCk7CiAKICAgICBjYXNlIExFOgotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERh
dGEpIExlc3NFcU5vZGUobG9jYXRpb24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25k
Lmhhc0Fzc2lnbm1lbnQpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBMZXNzRXFOb2RlKGxv
Y2F0aW9uLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsK
IAogICAgIGNhc2UgR0U6Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgR3JlYXRl
ckVxTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNz
aWdubWVudCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEdyZWF0ZXJFcU5vZGUobG9jYXRp
b24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwogCiAg
ICAgY2FzZSBJTlNUQU5DRU9GOiB7Ci0gICAgICAgIEluc3RhbmNlT2ZOb2RlKiBub2RlID0gbmV3
IChtX2dsb2JhbERhdGEpIEluc3RhbmNlT2ZOb2RlKGxvY2F0aW9uLCBsaHMuZmlyc3QsIHJocy5m
aXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKKyAgICAgICAgSW5zdGFuY2VPZk5vZGUq
IG5vZGUgPSBuZXcgKG1fdm0pIEluc3RhbmNlT2ZOb2RlKGxvY2F0aW9uLCBsaHMuZmlyc3QsIHJo
cy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKICAgICAgICAgc2V0RXhjZXB0aW9u
TG9jYXRpb24obm9kZSwgbGhzLnNlY29uZC5zdGFydCwgcmhzLnNlY29uZC5zdGFydCwgcmhzLnNl
Y29uZC5lbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKICAgICBjYXNlIElOVE9L
RU46IHsKLSAgICAgICAgSW5Ob2RlKiBub2RlID0gbmV3IChtX2dsb2JhbERhdGEpIEluTm9kZShs
b2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7
CisgICAgICAgIEluTm9kZSogbm9kZSA9IG5ldyAobV92bSkgSW5Ob2RlKGxvY2F0aW9uLCBsaHMu
Zmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKICAgICAgICAgc2V0
RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgbGhzLnNlY29uZC5zdGFydCwgcmhzLnNlY29uZC5zdGFy
dCwgcmhzLnNlY29uZC5lbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CkBAIC05MTgs
MjQgKzkxOCwyNCBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUJpbmFyeU5vCiBF
eHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUFzc2lnbk5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGxvYywgT3BlcmF0b3Igb3AsIEV4cHJl
c3Npb25Ob2RlKiBleHByLCBib29sIGxvY0hhc0Fzc2lnbm1lbnRzLCBib29sIGV4cHJIYXNBc3Np
Z25tZW50cywgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQpCiB7CiAgICAgaWYgKCFsb2Mt
PmlzTG9jYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBBc3NpZ25F
cnJvck5vZGUobG9jYXRpb24sIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7Cisg
ICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEFzc2lnbkVycm9yTm9kZShsb2NhdGlvbiwgZGl2b3Qs
IGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKIAogICAgIGlmIChsb2MtPmlzUmVzb2x2ZU5v
ZGUoKSkgewogICAgICAgICBSZXNvbHZlTm9kZSogcmVzb2x2ZSA9IHN0YXRpY19jYXN0PFJlc29s
dmVOb2RlKj4obG9jKTsKICAgICAgICAgaWYgKG9wID09IE9wRXF1YWwpIHsKICAgICAgICAgICAg
IGlmIChleHByLT5pc0Z1bmNFeHByTm9kZSgpKQogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PEZ1bmNFeHByTm9kZSo+KGV4cHIpLT5ib2R5KCktPnNldEluZmVycmVkTmFtZShyZXNvbHZlLT5p
ZGVudGlmaWVyKCkpOwotICAgICAgICAgICAgQXNzaWduUmVzb2x2ZU5vZGUqIG5vZGUgPSBuZXcg
KG1fZ2xvYmFsRGF0YSkgQXNzaWduUmVzb2x2ZU5vZGUobG9jYXRpb24sIHJlc29sdmUtPmlkZW50
aWZpZXIoKSwgZXhwcik7CisgICAgICAgICAgICBBc3NpZ25SZXNvbHZlTm9kZSogbm9kZSA9IG5l
dyAobV92bSkgQXNzaWduUmVzb2x2ZU5vZGUobG9jYXRpb24sIHJlc29sdmUtPmlkZW50aWZpZXIo
KSwgZXhwcik7CiAgICAgICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwg
ZGl2b3QsIGVuZCk7CiAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgfQotICAgICAg
ICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFJlYWRNb2RpZnlSZXNvbHZlTm9kZShsb2NhdGlv
biwgcmVzb2x2ZS0+aWRlbnRpZmllcigpLCBvcCwgZXhwciwgZXhwckhhc0Fzc2lnbm1lbnRzLCBk
aXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOworICAgICAgICByZXR1cm4gbmV3ICht
X3ZtKSBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGUobG9jYXRpb24sIHJlc29sdmUtPmlkZW50aWZpZXIo
KSwgb3AsIGV4cHIsIGV4cHJIYXNBc3NpZ25tZW50cywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVu
ZCAtIGRpdm90KTsKICAgICB9CiAgICAgaWYgKGxvYy0+aXNCcmFja2V0QWNjZXNzb3JOb2RlKCkp
IHsKICAgICAgICAgQnJhY2tldEFjY2Vzc29yTm9kZSogYnJhY2tldCA9IHN0YXRpY19jYXN0PEJy
YWNrZXRBY2Nlc3Nvck5vZGUqPihsb2MpOwogICAgICAgICBpZiAob3AgPT0gT3BFcXVhbCkKLSAg
ICAgICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQXNzaWduQnJhY2tldE5vZGUobG9j
YXRpb24sIGJyYWNrZXQtPmJhc2UoKSwgYnJhY2tldC0+c3Vic2NyaXB0KCksIGV4cHIsIGxvY0hh
c0Fzc2lnbm1lbnRzLCBleHBySGFzQXNzaWdubWVudHMsIGJyYWNrZXQtPmRpdm90KCksIGJyYWNr
ZXQtPmRpdm90KCkgLSBzdGFydCwgZW5kIC0gYnJhY2tldC0+ZGl2b3QoKSk7Ci0gICAgICAgIFJl
YWRNb2RpZnlCcmFja2V0Tm9kZSogbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBSZWFkTW9kaWZ5
QnJhY2tldE5vZGUobG9jYXRpb24sIGJyYWNrZXQtPmJhc2UoKSwgYnJhY2tldC0+c3Vic2NyaXB0
KCksIG9wLCBleHByLCBsb2NIYXNBc3NpZ25tZW50cywgZXhwckhhc0Fzc2lnbm1lbnRzLCBkaXZv
dCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOworICAgICAgICAgICAgcmV0dXJuIG5ldyAo
bV92bSkgQXNzaWduQnJhY2tldE5vZGUobG9jYXRpb24sIGJyYWNrZXQtPmJhc2UoKSwgYnJhY2tl
dC0+c3Vic2NyaXB0KCksIGV4cHIsIGxvY0hhc0Fzc2lnbm1lbnRzLCBleHBySGFzQXNzaWdubWVu
dHMsIGJyYWNrZXQtPmRpdm90KCksIGJyYWNrZXQtPmRpdm90KCkgLSBzdGFydCwgZW5kIC0gYnJh
Y2tldC0+ZGl2b3QoKSk7CisgICAgICAgIFJlYWRNb2RpZnlCcmFja2V0Tm9kZSogbm9kZSA9IG5l
dyAobV92bSkgUmVhZE1vZGlmeUJyYWNrZXROb2RlKGxvY2F0aW9uLCBicmFja2V0LT5iYXNlKCks
IGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBvcCwgZXhwciwgbG9jSGFzQXNzaWdubWVudHMsIGV4cHJI
YXNBc3NpZ25tZW50cywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKICAgICAg
ICAgbm9kZS0+c2V0U3ViZXhwcmVzc2lvbkluZm8oYnJhY2tldC0+ZGl2b3QoKSwgYnJhY2tldC0+
ZW5kT2Zmc2V0KCkpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CkBAIC05NDQsMjIgKzk0
NCwyMiBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUFzc2lnbk5vCiAgICAgaWYg
KG9wID09IE9wRXF1YWwpIHsKICAgICAgICAgaWYgKGV4cHItPmlzRnVuY0V4cHJOb2RlKCkpCiAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxGdW5jRXhwck5vZGUqPihleHByKS0+Ym9keSgpLT5zZXRJ
bmZlcnJlZE5hbWUoZG90LT5pZGVudGlmaWVyKCkpOwotICAgICAgICByZXR1cm4gbmV3IChtX2ds
b2JhbERhdGEpIEFzc2lnbkRvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50
aWZpZXIoKSwgZXhwciwgZXhwckhhc0Fzc2lnbm1lbnRzLCBkb3QtPmRpdm90KCksIGRvdC0+ZGl2
b3QoKSAtIHN0YXJ0LCBlbmQgLSBkb3QtPmRpdm90KCkpOworICAgICAgICByZXR1cm4gbmV3ICht
X3ZtKSBBc3NpZ25Eb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVy
KCksIGV4cHIsIGV4cHJIYXNBc3NpZ25tZW50cywgZG90LT5kaXZvdCgpLCBkb3QtPmRpdm90KCkg
LSBzdGFydCwgZW5kIC0gZG90LT5kaXZvdCgpKTsKICAgICB9CiAKLSAgICBSZWFkTW9kaWZ5RG90
Tm9kZSogbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBSZWFkTW9kaWZ5RG90Tm9kZShsb2NhdGlv
biwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBvcCwgZXhwciwgZXhwckhhc0Fzc2ln
bm1lbnRzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOworICAgIFJlYWRNb2Rp
ZnlEb3ROb2RlKiBub2RlID0gbmV3IChtX3ZtKSBSZWFkTW9kaWZ5RG90Tm9kZShsb2NhdGlvbiwg
ZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBvcCwgZXhwciwgZXhwckhhc0Fzc2lnbm1l
bnRzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOwogICAgIG5vZGUtPnNldFN1
YmV4cHJlc3Npb25JbmZvKGRvdC0+ZGl2b3QoKSwgZG90LT5lbmRPZmZzZXQoKSk7CiAgICAgcmV0
dXJuIG5vZGU7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlUHJlZml4Tm9k
ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwg
T3BlcmF0b3Igb3AsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kKQogewotICAgIHJldHVy
biBuZXcgKG1fZ2xvYmFsRGF0YSkgUHJlZml4Tm9kZShsb2NhdGlvbiwgZXhwciwgb3AsIGRpdm90
LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CisgICAgcmV0dXJuIG5ldyAobV92bSkgUHJl
Zml4Tm9kZShsb2NhdGlvbiwgZXhwciwgb3AsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBk
aXZvdCk7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlUG9zdGZpeE5vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIE9w
ZXJhdG9yIG9wLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCkKIHsKLSAgICByZXR1cm4g
bmV3IChtX2dsb2JhbERhdGEpIFBvc3RmaXhOb2RlKGxvY2F0aW9uLCBleHByLCBvcCwgZGl2b3Qs
IGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKKyAgICByZXR1cm4gbmV3IChtX3ZtKSBQb3N0
Zml4Tm9kZShsb2NhdGlvbiwgZXhwciwgb3AsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBk
aXZvdCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3Bw
CShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsOCBAQCB1c2luZyBuYW1lc3BhY2UgVW5p
Y29kZTsKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUtleXdvcmRzOjpLZXl3b3JkcyhKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEpCi0gICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKK0tleXdvcmRz
OjpLZXl3b3JkcyhWTSogdm0pCisgICAgOiBtX3ZtKHZtKQogICAgICwgbV9rZXl3b3JkVGFibGUo
SlNDOjptYWluVGFibGUpCiB7CiB9CkBAIC00ODksOSArNDg5LDkgQEAgc3RhdGljIGNvbnN0IExD
aGFyIHNpbmdsZUNoYXJhY3RlckVzY2FwZQogfTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1M
ZXhlcjxUPjo6TGV4ZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTGV4ZXI8VD46OkxleGVy
KFZNKiB2bSkKICAgICA6IG1faXNSZXBhcnNpbmcoZmFsc2UpCi0gICAgLCBtX2dsb2JhbERhdGEo
Z2xvYmFsRGF0YSkKKyAgICAsIG1fdm0odm0pCiB7CiB9CiAKQEAgLTc4OSw3ICs3ODksNyBAQCB0
ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDcmVhdGVJZGVudGlmaWVyPiBBCiAgICAgaWYgKFVOTElLRUxZ
KChyZW1haW5pbmcgPCBtYXhUb2tlbkxlbmd0aCkgJiYgIShsZXhlckZsYWdzICYgTGV4ZXJGbGFn
c0lnbm9yZVJlc2VydmVkV29yZHMpKSkgewogICAgICAgICBBU1NFUlQoc2hvdWxkQ3JlYXRlSWRl
bnRpZmllcik7CiAgICAgICAgIGlmIChyZW1haW5pbmcgPCBtYXhUb2tlbkxlbmd0aCkgewotICAg
ICAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IG1fZ2xvYmFsRGF0YS0+a2V5d29yZHMt
PmdldEtleXdvcmQoKmlkZW50KTsKKyAgICAgICAgICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkg
PSBtX3ZtLT5rZXl3b3Jkcy0+Z2V0S2V5d29yZCgqaWRlbnQpOwogICAgICAgICAgICAgQVNTRVJU
KChyZW1haW5pbmcgPCBtYXhUb2tlbkxlbmd0aCkgfHwgIWVudHJ5KTsKICAgICAgICAgICAgIGlm
ICghZW50cnkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIElERU5UOwpAQCAtODQ5LDcgKzg0OSw3
IEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+IEEKICAgICBpZiAoVU5M
SUtFTFkoKHJlbWFpbmluZyA8IG1heFRva2VuTGVuZ3RoKSAmJiAhKGxleGVyRmxhZ3MgJiBMZXhl
ckZsYWdzSWdub3JlUmVzZXJ2ZWRXb3JkcykpKSB7CiAgICAgICAgIEFTU0VSVChzaG91bGRDcmVh
dGVJZGVudGlmaWVyKTsKICAgICAgICAgaWYgKHJlbWFpbmluZyA8IG1heFRva2VuTGVuZ3RoKSB7
Ci0gICAgICAgICAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gbV9nbG9iYWxEYXRhLT5rZXl3
b3Jkcy0+Z2V0S2V5d29yZCgqaWRlbnQpOworICAgICAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBl
bnRyeSA9IG1fdm0tPmtleXdvcmRzLT5nZXRLZXl3b3JkKCppZGVudCk7CiAgICAgICAgICAgICBB
U1NFUlQoKHJlbWFpbmluZyA8IG1heFRva2VuTGVuZ3RoKSB8fCAhZW50cnkpOwogICAgICAgICAg
ICAgaWYgKCFlbnRyeSkKICAgICAgICAgICAgICAgICByZXR1cm4gSURFTlQ7CkBAIC05MTYsNyAr
OTE2LDcgQEAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4gSgogICAgICAg
ICBBU1NFUlQoc2hvdWxkQ3JlYXRlSWRlbnRpZmllcik7CiAgICAgICAgIC8vIEtleXdvcmRzIG11
c3Qgbm90IGJlIHJlY29nbml6ZWQgaWYgdGhlcmUgd2FzIGFuIFx1WFhYWCBpbiB0aGUgaWRlbnRp
Zmllci4KICAgICAgICAgaWYgKHJlbWFpbmluZyA8IG1heFRva2VuTGVuZ3RoKSB7Ci0gICAgICAg
ICAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gbV9nbG9iYWxEYXRhLT5rZXl3b3Jkcy0+Z2V0
S2V5d29yZCgqaWRlbnQpOworICAgICAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IG1f
dm0tPmtleXdvcmRzLT5nZXRLZXl3b3JkKCppZGVudCk7CiAgICAgICAgICAgICBBU1NFUlQoKHJl
bWFpbmluZyA8IG1heFRva2VuTGVuZ3RoKSB8fCAhZW50cnkpOwogICAgICAgICAgICAgaWYgKCFl
bnRyeSkKICAgICAgICAgICAgICAgICByZXR1cm4gSURFTlQ7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL0xleGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9MZXhlci5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL0xleGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEyICszOSwxMiBAQCBj
bGFzcyBLZXl3b3JkcyB7CiBwdWJsaWM6CiAgICAgYm9vbCBpc0tleXdvcmQoY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9rZXl3b3JkVGFibGUu
ZW50cnkobV9nbG9iYWxEYXRhLCBpZGVudCk7CisgICAgICAgIHJldHVybiBtX2tleXdvcmRUYWJs
ZS5lbnRyeShtX3ZtLCBpZGVudCk7CiAgICAgfQogICAgIAogICAgIGNvbnN0IEhhc2hFbnRyeSog
Z2V0S2V5d29yZChjb25zdCBJZGVudGlmaWVyJiBpZGVudCkgY29uc3QKICAgICB7Ci0gICAgICAg
IHJldHVybiBtX2tleXdvcmRUYWJsZS5lbnRyeShtX2dsb2JhbERhdGEsIGlkZW50KTsKKyAgICAg
ICAgcmV0dXJuIG1fa2V5d29yZFRhYmxlLmVudHJ5KG1fdm0sIGlkZW50KTsKICAgICB9CiAgICAg
CiAgICAgfktleXdvcmRzKCkKQEAgLTUzLDExICs1MywxMSBAQCBwdWJsaWM6CiAgICAgfQogICAg
IAogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgSlNHbG9iYWxEYXRhOworICAgIGZyaWVuZCBj
bGFzcyBWTTsKICAgICAKLSAgICBLZXl3b3JkcyhKU0dsb2JhbERhdGEqKTsKKyAgICBLZXl3b3Jk
cyhWTSopOwogICAgIAotICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworICAgIFZNKiBt
X3ZtOwogICAgIGNvbnN0IEhhc2hUYWJsZSBtX2tleXdvcmRUYWJsZTsKIH07CiAKQEAgLTczLDcg
KzczLDcgQEAgY2xhc3MgTGV4ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCiBw
dWJsaWM6Ci0gICAgTGV4ZXIoSlNHbG9iYWxEYXRhKik7CisgICAgTGV4ZXIoVk0qKTsKICAgICB+
TGV4ZXIoKTsKIAogICAgIC8vIENoYXJhY3RlciBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLgpAQCAt
MTkwLDcgKzE5MCw3IEBAIHByaXZhdGU6CiAKICAgICBJZGVudGlmaWVyQXJlbmEqIG1fYXJlbmE7
CiAKLSAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKKyAgICBWTSogbV92bTsKIH07CiAK
IHRlbXBsYXRlIDw+CkBAIC0yMzIsMjggKzIzMiwyOCBAQCBpbmxpbmUgVUNoYXIgTGV4ZXI8VD46
OmNvbnZlcnRVbmljb2RlKGluCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIEFMV0FZU19JTkxJTkUg
Y29uc3QgSWRlbnRpZmllciogTGV4ZXI8VD46Om1ha2VJZGVudGlmaWVyKGNvbnN0IExDaGFyKiBj
aGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogewotICAgIHJldHVybiAmbV9hcmVuYS0+bWFrZUlk
ZW50aWZpZXIobV9nbG9iYWxEYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIHJldHVybiAm
bV9hcmVuYS0+bWFrZUlkZW50aWZpZXIobV92bSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKIH0KIAog
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXIqIExl
eGVyPFQ+OjptYWtlSWRlbnRpZmllcihjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxl
bmd0aCkKIHsKLSAgICByZXR1cm4gJm1fYXJlbmEtPm1ha2VJZGVudGlmaWVyKG1fZ2xvYmFsRGF0
YSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICByZXR1cm4gJm1fYXJlbmEtPm1ha2VJZGVudGlm
aWVyKG1fdm0sIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiB9CiAKIHRlbXBsYXRlIDw+CiBBTFdBWVNf
SU5MSU5FIGNvbnN0IElkZW50aWZpZXIqIExleGVyPExDaGFyPjo6bWFrZVJpZ2h0U2l6ZWRJZGVu
dGlmaWVyKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVQ2hhcikKIHsK
LSAgICByZXR1cm4gJm1fYXJlbmEtPm1ha2VJZGVudGlmaWVyTENoYXJGcm9tVUNoYXIobV9nbG9i
YWxEYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIHJldHVybiAmbV9hcmVuYS0+bWFrZUlk
ZW50aWZpZXJMQ2hhckZyb21VQ2hhcihtX3ZtLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwogfQogCiB0
ZW1wbGF0ZSA8PgogQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyKiBMZXhlcjxVQ2hhcj46
Om1ha2VSaWdodFNpemVkSWRlbnRpZmllcihjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90
IGxlbmd0aCwgVUNoYXIgb3JBbGxDaGFycykKIHsKICAgICBpZiAoIShvckFsbENoYXJzICYgfjB4
ZmYpKQotICAgICAgICByZXR1cm4gJm1fYXJlbmEtPm1ha2VJZGVudGlmaWVyTENoYXJGcm9tVUNo
YXIobV9nbG9iYWxEYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgICAgICByZXR1cm4gJm1f
YXJlbmEtPm1ha2VJZGVudGlmaWVyTENoYXJGcm9tVUNoYXIobV92bSwgY2hhcmFjdGVycywgbGVu
Z3RoKTsKIAotICAgIHJldHVybiAmbV9hcmVuYS0+bWFrZUlkZW50aWZpZXIobV9nbG9iYWxEYXRh
LCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIHJldHVybiAmbV9hcmVuYS0+bWFrZUlkZW50aWZp
ZXIobV92bSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKIH0KIAogdGVtcGxhdGUgPD4KQEAgLTI3Mywx
OSArMjczLDE5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBMZXhlcjxVQ2hhcj46OnNldENvZGUKIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgogQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyKiBMZXhl
cjxUPjo6bWFrZUlkZW50aWZpZXJMQ2hhckZyb21VQ2hhcihjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgc2l6ZV90IGxlbmd0aCkKIHsKLSAgICByZXR1cm4gJm1fYXJlbmEtPm1ha2VJZGVudGlmaWVy
TENoYXJGcm9tVUNoYXIobV9nbG9iYWxEYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIHJl
dHVybiAmbV9hcmVuYS0+bWFrZUlkZW50aWZpZXJMQ2hhckZyb21VQ2hhcihtX3ZtLCBjaGFyYWN0
ZXJzLCBsZW5ndGgpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIEFMV0FZU19JTkxJTkUg
Y29uc3QgSWRlbnRpZmllciogTGV4ZXI8VD46Om1ha2VMQ2hhcklkZW50aWZpZXIoY29uc3QgTENo
YXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuICZtX2FyZW5hLT5t
YWtlSWRlbnRpZmllcihtX2dsb2JhbERhdGEsIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgcmV0
dXJuICZtX2FyZW5hLT5tYWtlSWRlbnRpZmllcihtX3ZtLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwog
fQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmll
ciogTGV4ZXI8VD46Om1ha2VMQ2hhcklkZW50aWZpZXIoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IHNpemVfdCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuICZtX2FyZW5hLT5tYWtlSWRlbnRpZmllckxD
aGFyRnJvbVVDaGFyKG1fZ2xvYmFsRGF0YSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICByZXR1
cm4gJm1fYXJlbmEtPm1ha2VJZGVudGlmaWVyTENoYXJGcm9tVUNoYXIobV92bSwgY2hhcmFjdGVy
cywgbGVuZ3RoKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAkocmV2aXNpb24gMTQ4
NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDE5ICsyNywxOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
ICAgIGlubGluZSB2b2lkKiBQYXJzZXJBcmVuYUZyZWVhYmxlOjpvcGVyYXRvciBuZXcoc2l6ZV90
IHNpemUsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgdm9pZCogUGFyc2Vy
QXJlbmFGcmVlYWJsZTo6b3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCBWTSogdm0pCiAgICAgewot
ICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+cGFyc2VyQXJlbmEtPmFsbG9jYXRlRnJlZWFibGUo
c2l6ZSk7CisgICAgICAgIHJldHVybiB2bS0+cGFyc2VyQXJlbmEtPmFsbG9jYXRlRnJlZWFibGUo
c2l6ZSk7CiAgICAgfQogCi0gICAgaW5saW5lIHZvaWQqIFBhcnNlckFyZW5hRGVsZXRhYmxlOjpv
cGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKKyAgICBp
bmxpbmUgdm9pZCogUGFyc2VyQXJlbmFEZWxldGFibGU6Om9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6
ZSwgVk0qIHZtKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPnBhcnNlckFyZW5h
LT5hbGxvY2F0ZURlbGV0YWJsZShzaXplKTsKKyAgICAgICAgcmV0dXJuIHZtLT5wYXJzZXJBcmVu
YS0+YWxsb2NhdGVEZWxldGFibGUoc2l6ZSk7CiAgICAgfQogCi0gICAgaW5saW5lIFBhcnNlckFy
ZW5hUmVmQ291bnRlZDo6UGFyc2VyQXJlbmFSZWZDb3VudGVkKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSkKKyAgICBpbmxpbmUgUGFyc2VyQXJlbmFSZWZDb3VudGVkOjpQYXJzZXJBcmVuYVJlZkNv
dW50ZWQoVk0qIHZtKQogICAgIHsKLSAgICAgICAgZ2xvYmFsRGF0YS0+cGFyc2VyQXJlbmEtPmRl
cmVmV2l0aEFyZW5hKGFkb3B0UmVmKHRoaXMpKTsKKyAgICAgICAgdm0tPnBhcnNlckFyZW5hLT5k
ZXJlZldpdGhBcmVuYShhZG9wdFJlZih0aGlzKSk7CiAgICAgfQogCiAgICAgaW5saW5lIE5vZGU6
Ok5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikKQEAgLTE0MSwxNSArMTQxLDE1
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgUHJvcGVydHlO
b2RlOjpQcm9wZXJ0eU5vZGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwg
RXhwcmVzc2lvbk5vZGUqIGFzc2lnbiwgVHlwZSB0eXBlKQorICAgIGlubGluZSBQcm9wZXJ0eU5v
ZGU6OlByb3BlcnR5Tm9kZShWTSosIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEV4cHJlc3Npb25O
b2RlKiBhc3NpZ24sIFR5cGUgdHlwZSkKICAgICAgICAgOiBtX25hbWUobmFtZSkKICAgICAgICAg
LCBtX2Fzc2lnbihhc3NpZ24pCiAgICAgICAgICwgbV90eXBlKHR5cGUpCiAgICAgewogICAgIH0K
IAotICAgIGlubGluZSBQcm9wZXJ0eU5vZGU6OlByb3BlcnR5Tm9kZShKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIGRvdWJsZSBuYW1lLCBFeHByZXNzaW9uTm9kZSogYXNzaWduLCBUeXBlIHR5cGUp
Ci0gICAgICAgIDogbV9uYW1lKGdsb2JhbERhdGEtPnBhcnNlckFyZW5hLT5pZGVudGlmaWVyQXJl
bmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIoZ2xvYmFsRGF0YSwgbmFtZSkpCisgICAgaW5saW5l
IFByb3BlcnR5Tm9kZTo6UHJvcGVydHlOb2RlKFZNKiB2bSwgZG91YmxlIG5hbWUsIEV4cHJlc3Np
b25Ob2RlKiBhc3NpZ24sIFR5cGUgdHlwZSkKKyAgICAgICAgOiBtX25hbWUodm0tPnBhcnNlckFy
ZW5hLT5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIodm0sIG5hbWUpKQog
ICAgICAgICAsIG1fYXNzaWduKGFzc2lnbikKICAgICAgICAgLCBtX3R5cGUodHlwZSkKICAgICB7
CkBAIC02NjgsOSArNjY4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEFTU0VSVChzdGF0
ZW1lbnQpOwogICAgIH0KIAotICAgIGlubGluZSBDb250aW51ZU5vZGU6OkNvbnRpbnVlTm9kZShK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24p
CisgICAgaW5saW5lIENvbnRpbnVlTm9kZTo6Q29udGludWVOb2RlKFZNKiB2bSwgY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBsb2NhdGlvbikKICAgICAgICAgOiBTdGF0ZW1lbnROb2RlKGxvY2F0aW9u
KQotICAgICAgICAsIG1faWRlbnQoZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50
aWZpZXIpCisgICAgICAgICwgbV9pZGVudCh2bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZp
ZXIpCiAgICAgewogICAgIH0KIApAQCAtNjgwLDkgKzY4MCw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIHsKICAgICB9CiAgICAgCi0gICAgaW5saW5lIEJyZWFrTm9kZTo6QnJlYWtOb2RlKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikKKyAg
ICBpbmxpbmUgQnJlYWtOb2RlOjpCcmVha05vZGUoVk0qIHZtLCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uKQogICAgICAgICA6IFN0YXRlbWVudE5vZGUobG9jYXRpb24pCi0gICAgICAg
ICwgbV9pZGVudChnbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcikKKyAg
ICAgICAgLCBtX2lkZW50KHZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcikKICAgICB7
CiAgICAgfQogCkBAIC04MTIsMTUgKzgxMiwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAg
ICAgfQogCi0gICAgaW5saW5lIEZvckluTm9kZTo6Rm9ySW5Ob2RlKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiBpbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRl
bWVudE5vZGUqIHN0YXRlbWVudCwgaW50IGRpdm90LCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRP
ZmZzZXQpCisgICAgaW5saW5lIEZvckluTm9kZTo6Rm9ySW5Ob2RlKFZNKiB2bSwgY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEV4cHJlc3Np
b25Ob2RlKiBpbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVu
dCwgaW50IGRpdm90LCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQpCiAgICAgICAgIDog
U3RhdGVtZW50Tm9kZShsb2NhdGlvbikKICAgICAgICAgLCBtX2luaXQoMCkKLSAgICAgICAgLCBt
X2xleHByKG5ldyAoZ2xvYmFsRGF0YSkgUmVzb2x2ZU5vZGUobG9jYXRpb24sIGlkZW50LCBkaXZv
dCAtIHN0YXJ0T2Zmc2V0KSkKKyAgICAgICAgLCBtX2xleHByKG5ldyAodm0pIFJlc29sdmVOb2Rl
KGxvY2F0aW9uLCBpZGVudCwgZGl2b3QgLSBzdGFydE9mZnNldCkpCiAgICAgICAgICwgbV9leHBy
KGV4cHIpCiAgICAgICAgICwgbV9zdGF0ZW1lbnQoc3RhdGVtZW50KQogICAgIHsKICAgICAgICAg
aWYgKGluKSB7Ci0gICAgICAgICAgICBBc3NpZ25SZXNvbHZlTm9kZSogbm9kZSA9IG5ldyAoZ2xv
YmFsRGF0YSkgQXNzaWduUmVzb2x2ZU5vZGUobG9jYXRpb24sIGlkZW50LCBpbik7CisgICAgICAg
ICAgICBBc3NpZ25SZXNvbHZlTm9kZSogbm9kZSA9IG5ldyAodm0pIEFzc2lnblJlc29sdmVOb2Rl
KGxvY2F0aW9uLCBpZGVudCwgaW4pOwogICAgICAgICAgICAgbm9kZS0+c2V0RXhjZXB0aW9uU291
cmNlQ29kZShkaXZvdCwgZGl2b3QgLSBzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gZGl2b3QpOwog
ICAgICAgICAgICAgbV9pbml0ID0gbm9kZTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw5ICs3Niw5
IEBAIFN0YXRlbWVudE5vZGUqIFNvdXJjZUVsZW1lbnRzOjpzaW5nbGVTdGEKIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNjb3BlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCi1TY29wZU5vZGU6OlNjb3BlTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBlbmRMb2NhdGlvbiwgYm9vbCBpblN0cmljdENvbnRleHQpCitTY29wZU5vZGU6OlNjb3Bl
Tm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgYm9vbCBpblN0cmljdENvbnRleHQpCiAgICAg
OiBTdGF0ZW1lbnROb2RlKGVuZExvY2F0aW9uKQotICAgICwgUGFyc2VyQXJlbmFSZWZDb3VudGVk
KGdsb2JhbERhdGEpCisgICAgLCBQYXJzZXJBcmVuYVJlZkNvdW50ZWQodm0pCiAgICAgLCBtX3N0
YXJ0TGluZU51bWJlcihzdGFydExvY2F0aW9uLmxpbmUpCiAgICAgLCBtX3N0YXJ0Q2hhclBvc2l0
aW9uKHN0YXJ0TG9jYXRpb24uY2hhclBvc2l0aW9uKQogICAgICwgbV9mZWF0dXJlcyhpblN0cmlj
dENvbnRleHQgPyBTdHJpY3RNb2RlRmVhdHVyZSA6IE5vRmVhdHVyZXMpCkBAIC04Nyw5ICs4Nyw5
IEBAIFNjb3BlTm9kZTo6U2NvcGVOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmEKIHsKIH0KIAotU2Nv
cGVOb2RlOjpTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRp
b24sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBW
YXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNl
dCYgY2FwdHVyZWRWYXJpYWJsZXMsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0
YW50cykKK1Njb3BlTm9kZTo6U2NvcGVOb2RlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCBjb25z
dCBTb3VyY2VDb2RlJiBzb3VyY2UsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sq
IHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1
cmVkVmFyaWFibGVzLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCiAg
ICAgOiBTdGF0ZW1lbnROb2RlKGVuZExvY2F0aW9uKQotICAgICwgUGFyc2VyQXJlbmFSZWZDb3Vu
dGVkKGdsb2JhbERhdGEpCisgICAgLCBQYXJzZXJBcmVuYVJlZkNvdW50ZWQodm0pCiAgICAgLCBt
X3N0YXJ0TGluZU51bWJlcihzdGFydExvY2F0aW9uLmxpbmUpCiAgICAgLCBtX3N0YXJ0Q2hhclBv
c2l0aW9uKHN0YXJ0TG9jYXRpb24uY2hhclBvc2l0aW9uKQogICAgICwgbV9mZWF0dXJlcyhmZWF0
dXJlcykKQEAgLTk3LDcgKzk3LDcgQEAgU2NvcGVOb2RlOjpTY29wZU5vZGUoSlNHbG9iYWxEYXRh
KiBnbG9iYQogICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgICwgbV9zdGF0
ZW1lbnRzKGNoaWxkcmVuKQogewotICAgIG1fYXJlbmEuc3dhcCgqZ2xvYmFsRGF0YS0+cGFyc2Vy
QXJlbmEpOworICAgIG1fYXJlbmEuc3dhcCgqdm0tPnBhcnNlckFyZW5hKTsKICAgICBpZiAodmFy
U3RhY2spCiAgICAgICAgIG1fdmFyU3RhY2suc3dhcCgqdmFyU3RhY2spOwogICAgIGlmIChmdW5j
U3RhY2spCkBAIC0xMTIsMTQgKzExMiwxNCBAQCBTdGF0ZW1lbnROb2RlKiBTY29wZU5vZGU6OnNp
bmdsZVN0YXRlbWVuCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9ncmFt
Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1pbmxpbmUgUHJvZ3JhbU5vZGU6
OlByb2dyYW1Ob2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCBT
b3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFj
ayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMp
Ci0gICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24s
IHNvdXJjZSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVz
LCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKQoraW5saW5lIFByb2dyYW1Ob2RlOjpQcm9ncmFtTm9k
ZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJT
dGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYg
Y2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVz
IGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQorICAgIDogU2NvcGVOb2RlKHZtLCBzdGFydExv
Y2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFj
aywgY2FwdHVyZWRWYXJpYWJsZXMsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpCiB7CiB9CiAKLVBh
c3NSZWZQdHI8UHJvZ3JhbU5vZGU+IFByb2dyYW1Ob2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFy
U3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQm
IGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJl
cyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKK1Bhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IFBy
b2dyYW1Ob2RlOjpjcmVhdGUoVk0qIHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9j
YXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIFNvdXJjZUVsZW1lbnRz
KiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ss
IElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3Vy
Y2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKIHsKLSAgICBSZWZQ
dHI8UHJvZ3JhbU5vZGU+IG5vZGUgPSBuZXcgUHJvZ3JhbU5vZGUoZ2xvYmFsRGF0YSwgc3RhcnRM
b2NhdGlvbiwgZW5kTG9jYXRpb24sIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCAgY2Fw
dHVyZWRWYXJpYWJsZXMsIHNvdXJjZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7CisgICAgUmVm
UHRyPFByb2dyYW1Ob2RlPiBub2RlID0gbmV3IFByb2dyYW1Ob2RlKHZtLCBzdGFydExvY2F0aW9u
LCBlbmRMb2NhdGlvbiwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssICBjYXB0dXJlZFZh
cmlhYmxlcywgc291cmNlLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsKIAogICAgIEFTU0VSVChu
b2RlLT5tX2FyZW5hLmxhc3QoKSA9PSBub2RlKTsKICAgICBub2RlLT5tX2FyZW5hLnJlbW92ZUxh
c3QoKTsKQEAgLTEzMCwxNCArMTMwLDE0IEBAIFBhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IFByb2dy
YW1Ob2RlOjpjcmUKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEV2YWxOb2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWlubGluZSBFdmFsTm9kZTo6RXZhbE5v
ZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0
TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIFNvdXJjZUVsZW1l
bnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3Rh
Y2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKLSAgICA6IFNj
b3BlTm9kZShnbG9iYWxEYXRhLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlLCBj
aGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIGZlYXR1cmVz
LCBudW1Db25zdGFudHMpCitpbmxpbmUgRXZhbE5vZGU6OkV2YWxOb2RlKFZNKiB2bSwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVu
ZExvY2F0aW9uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywg
RnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxl
cywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBu
dW1Db25zdGFudHMpCisgICAgOiBTY29wZU5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0
aW9uLCBzb3VyY2UsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlh
YmxlcywgZmVhdHVyZXMsIG51bUNvbnN0YW50cykKIHsKIH0KIAotUGFzc1JlZlB0cjxFdmFsTm9k
ZT4gRXZhbE5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2Nh
dGlvbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0
aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29u
c3RhbnRzKQorUGFzc1JlZlB0cjxFdmFsTm9kZT4gRXZhbE5vZGU6OmNyZWF0ZShWTSogdm0sIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBlbmRMb2NhdGlvbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3Rh
Y2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJp
YWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBp
bnQgbnVtQ29uc3RhbnRzKQogewotICAgIFJlZlB0cjxFdmFsTm9kZT4gbm9kZSA9IG5ldyBFdmFs
Tm9kZShnbG9iYWxEYXRhLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgY2hpbGRyZW4sIHZh
clN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBzb3VyY2UsIGZlYXR1cmVzLCBu
dW1Db25zdGFudHMpOworICAgIFJlZlB0cjxFdmFsTm9kZT4gbm9kZSA9IG5ldyBFdmFsTm9kZSh2
bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0
YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgc291cmNlLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsK
IAogICAgIEFTU0VSVChub2RlLT5tX2FyZW5hLmxhc3QoKSA9PSBub2RlKTsKICAgICBub2RlLT5t
X2FyZW5hLnJlbW92ZUxhc3QoKTsKQEAgLTE3MywxMyArMTczLDEzIEBAIEZ1bmN0aW9uUGFyYW1l
dGVyczo6fkZ1bmN0aW9uUGFyYW1ldGVycygKICAgICAgICAgaWRlbnRpZmllcnMoKVtpXS5+SWRl
bnRpZmllcigpOwogfQogCi1pbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9k
ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRM
b2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgYm9vbCBpblN0cmlj
dENvbnRleHQpCi0gICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgc3RhcnRMb2NhdGlvbiwgZW5k
TG9jYXRpb24sIGluU3RyaWN0Q29udGV4dCkKK2lubGluZSBGdW5jdGlvbkJvZHlOb2RlOjpGdW5j
dGlvbkJvZHlOb2RlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9u
LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCBib29sIGluU3RyaWN0Q29udGV4
dCkKKyAgICA6IFNjb3BlTm9kZSh2bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGluU3Ry
aWN0Q29udGV4dCkKIHsKIH0KIAotaW5saW5lIEZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9k
eU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0
YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIFNvdXJjZUVs
ZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5j
U3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2VDb2RlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCi0g
ICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNv
dXJjZUNvZGUsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxl
cywgZmVhdHVyZXMsIG51bUNvbnN0YW50cykKK2lubGluZSBGdW5jdGlvbkJvZHlOb2RlOjpGdW5j
dGlvbkJvZHlOb2RlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9u
LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCBTb3VyY2VFbGVtZW50cyogY2hp
bGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVu
dGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29k
ZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQorICAgIDogU2NvcGVO
b2RlKHZtLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlQ29kZSwgY2hpbGRyZW4s
IHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBmZWF0dXJlcywgbnVtQ29u
c3RhbnRzKQogewogfQogCkBAIC0xOTcsMTQgKzE5NywxNCBAQCB2b2lkIEZ1bmN0aW9uQm9keU5v
ZGU6OmZpbmlzaFBhcnNpbmcoUGFzCiAgICAgbV9mdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGUg
PSBmdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGU7CiB9CiAKLUZ1bmN0aW9uQm9keU5vZGUqIEZ1
bmN0aW9uQm9keU5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRM
b2NhdGlvbiwgYm9vbCBpblN0cmljdENvbnRleHQpCitGdW5jdGlvbkJvZHlOb2RlKiBGdW5jdGlv
bkJvZHlOb2RlOjpjcmVhdGUoVk0qIHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9j
YXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIGJvb2wgaW5TdHJpY3RD
b250ZXh0KQogewotICAgIHJldHVybiBuZXcgRnVuY3Rpb25Cb2R5Tm9kZShnbG9iYWxEYXRhLCBz
dGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgaW5TdHJpY3RDb250ZXh0KTsKKyAgICByZXR1cm4g
bmV3IEZ1bmN0aW9uQm9keU5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBpblN0
cmljdENvbnRleHQpOwogfQogCi1QYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IEZ1bmN0aW9u
Qm9keU5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlv
biwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9u
U3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNv
bnN0YW50cykKK1Bhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gRnVuY3Rpb25Cb2R5Tm9kZTo6
Y3JlYXRlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4s
IFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVy
U2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgQ29k
ZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQogewotICAgIFJlZlB0cjxGdW5j
dGlvbkJvZHlOb2RlPiBub2RlID0gbmV3IEZ1bmN0aW9uQm9keU5vZGUoZ2xvYmFsRGF0YSwgc3Rh
cnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBj
YXB0dXJlZFZhcmlhYmxlcywgc291cmNlQ29kZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7Cisg
ICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IG5vZGUgPSBuZXcgRnVuY3Rpb25Cb2R5Tm9kZSh2
bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0
YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgc291cmNlQ29kZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50
cyk7CiAKICAgICBBU1NFUlQobm9kZS0+bV9hcmVuYS5sYXN0KCkgPT0gbm9kZSk7CiAgICAgbm9k
ZS0+bV9hcmVuYS5yZW1vdmVMYXN0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9O
b2Rlcy5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgcHVibGljOgogICAgICAgICAvLyBQYXJzZXJBcmVuYUZyZWVhYmxlIG9iamVjdHMgYXJl
IGFyZSBmcmVlZCB3aGVuIHRoZSBhcmVuYSBpcyBkZWxldGVkLgogICAgICAgICAvLyBEZXN0cnVj
dG9ycyBhcmUgbm90IGNhbGxlZC4gQ2xpZW50cyBtdXN0IG5vdCBjYWxsIGRlbGV0ZSBvbiBzdWNo
IG9iamVjdHMuCi0gICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIEpTR2xvYmFsRGF0
YSopOworICAgICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCBWTSopOwogICAgIH07CiAK
ICAgICBjbGFzcyBQYXJzZXJBcmVuYURlbGV0YWJsZSB7CkBAIC0xMDMsNyArMTAzLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gUGFyc2VyQXJlbmFEZWxldGFibGUgb2JqZWN0cyBh
cmUgZGVsZXRlZCB3aGVuIHRoZSBhcmVuYSBpcyBkZWxldGVkLgogICAgICAgICAvLyBDbGllbnRz
IG11c3Qgbm90IGNhbGwgZGVsZXRlIGRpcmVjdGx5IG9uIHN1Y2ggb2JqZWN0cy4KLSAgICAgICAg
dm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCwgSlNHbG9iYWxEYXRhKik7CisgICAgICAgIHZvaWQq
IG9wZXJhdG9yIG5ldyhzaXplX3QsIFZNKik7CiAgICAgfTsKIAogICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgpAQCAtMTEzLDcgKzExMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3Mg
UGFyc2VyQXJlbmFSZWZDb3VudGVkIDogcHVibGljIFJlZkNvdW50ZWQ8UGFyc2VyQXJlbmFSZWZD
b3VudGVkPiB7CiAgICAgcHJvdGVjdGVkOgotICAgICAgICBQYXJzZXJBcmVuYVJlZkNvdW50ZWQo
SlNHbG9iYWxEYXRhKik7CisgICAgICAgIFBhcnNlckFyZW5hUmVmQ291bnRlZChWTSopOwogCiAg
ICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5QYXJzZXJBcmVuYVJlZkNvdW50ZWQoKQpAQCAt
Mzk1LDcgKzM5NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBBcnJheU5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgRWxlbWVudE5vZGUqKTsKICAgICAgICAgQXJyYXlOb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGludCBlbGlzaW9uLCBFbGVtZW50Tm9kZSopOwogCi0gICAgICAg
IEFyZ3VtZW50TGlzdE5vZGUqIHRvQXJndW1lbnRMaXN0KEpTR2xvYmFsRGF0YSosIGludCwgaW50
KSBjb25zdDsKKyAgICAgICAgQXJndW1lbnRMaXN0Tm9kZSogdG9Bcmd1bWVudExpc3QoVk0qLCBp
bnQsIGludCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVy
SUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBA
IC00MTEsOCArNDExLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICBl
bnVtIFR5cGUgeyBDb25zdGFudCA9IDEsIEdldHRlciA9IDIsIFNldHRlciA9IDQgfTsKIAotICAg
ICAgICBQcm9wZXJ0eU5vZGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSWRlbnRpZmllciYsIEV4cHJl
c3Npb25Ob2RlKiwgVHlwZSk7Ci0gICAgICAgIFByb3BlcnR5Tm9kZShKU0dsb2JhbERhdGEqLCBk
b3VibGUsIEV4cHJlc3Npb25Ob2RlKiwgVHlwZSk7CisgICAgICAgIFByb3BlcnR5Tm9kZShWTSos
IGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uTm9kZSosIFR5cGUpOworICAgICAgICBQcm9w
ZXJ0eU5vZGUoVk0qLCBkb3VibGUsIEV4cHJlc3Npb25Ob2RlKiwgVHlwZSk7CiAKICAgICAgICAg
Y29uc3QgSWRlbnRpZmllciYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogICAgICAg
ICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KQEAgLTExODMsNyArMTE4Myw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEZvckluTm9kZSA6IHB1YmxpYyBTdGF0ZW1l
bnROb2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKICAg
ICAgICAgRm9ySW5Ob2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiwg
RXhwcmVzc2lvbk5vZGUqLCBTdGF0ZW1lbnROb2RlKik7Ci0gICAgICAgIEZvckluTm9kZShKU0ds
b2JhbERhdGEqLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiwgRXhw
cmVzc2lvbk5vZGUqLCBFeHByZXNzaW9uTm9kZSosIFN0YXRlbWVudE5vZGUqLCBpbnQgZGl2b3Qs
IGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCk7CisgICAgICAgIEZvckluTm9kZShWTSos
IGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uTm9k
ZSosIEV4cHJlc3Npb25Ob2RlKiwgU3RhdGVtZW50Tm9kZSosIGludCBkaXZvdCwgaW50IHN0YXJ0
T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpA
QCAtMTE5Niw3ICsxMTk2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBDb250aW51
ZU5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25E
YXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIENvbnRpbnVlTm9kZShKU0dsb2JhbERhdGEqLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mKTsKKyAgICAgICAgQ29udGludWVOb2RlKFZNKiwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJik7CiAgICAgICAgIENvbnRpbnVlTm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgICAgIAogICAgIHByaXZhdGU6CkBAIC0x
MjA3LDcgKzEyMDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEJyZWFrTm9kZSA6
IHB1YmxpYyBTdGF0ZW1lbnROb2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewog
ICAgIHB1YmxpYzoKLSAgICAgICAgQnJlYWtOb2RlKEpTR2xvYmFsRGF0YSosIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYpOworICAgICAgICBCcmVha05vZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mKTsKICAgICAgICAgQnJlYWtOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElk
ZW50aWZpZXImKTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKQEAgLTEyOTUsOCArMTI5NSw4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0eXBlZGVmIERlY2xhcmF0aW9uU3RhY2tzOjpWYXJT
dGFjayBWYXJTdGFjazsKICAgICAgICAgdHlwZWRlZiBEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rp
b25TdGFjayBGdW5jdGlvblN0YWNrOwogCi0gICAgICAgIFNjb3BlTm9kZShKU0dsb2JhbERhdGEq
LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVu
ZCwgYm9vbCBpblN0cmljdENvbnRleHQpOwotICAgICAgICBTY29wZU5vZGUoSlNHbG9iYWxEYXRh
KiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBl
bmQsIGNvbnN0IFNvdXJjZUNvZGUmLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rp
b25TdGFjayosIElkZW50aWZpZXJTZXQmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMp
OworICAgICAgICBTY29wZU5vZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgYm9vbCBpblN0cmljdENvbnRleHQpOworICAgICAg
ICBTY29wZU5vZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIGVuZCwgY29uc3QgU291cmNlQ29kZSYsIFNvdXJjZUVsZW1lbnRzKiwgVmFy
U3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIENvZGVGZWF0dXJlcywgaW50
IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgdXNpbmcgUGFyc2VyQXJlbmFSZWZDb3VudGVkOjpv
cGVyYXRvciBuZXc7CiAKQEAgLTEzNjQsMTIgKzEzNjQsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgY2xhc3MgUHJvZ3JhbU5vZGUgOiBwdWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzRnVuY3Rpb25Ob2RlID0gZmFsc2U7Ci0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFByb2dyYW1Ob2RlPiBjcmVhdGUoSlNHbG9iYWxEYXRhKiwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIFNv
dXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYs
IGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOworICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQcm9ncmFtTm9kZT4gY3JlYXRlKFZNKiwgY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIFNvdXJjZUVs
ZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0
IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOwogCiAgICAgICAg
IHN0YXRpYyBjb25zdCBib29sIHNjb3BlSXNGdW5jdGlvbiA9IGZhbHNlOwogCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgUHJvZ3JhbU5vZGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIFNvdXJjZUVsZW1lbnRzKiwg
VmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNv
ZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOworICAgICAgICBQcm9ncmFtTm9k
ZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgZW5kLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50
aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3Rh
bnRzKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKICAgICB9OwpAQCAtMTM3NywxMiArMTM3NywxMiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBFdmFsTm9kZSA6IHB1YmxpYyBTY29wZU5vZGUgewog
ICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNGdW5jdGlvbk5vZGUgPSBm
YWxzZTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZhbE5vZGU+IGNyZWF0ZShKU0dsb2Jh
bERhdGEqLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGVuZCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVu
dGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0
YW50cyk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV2YWxOb2RlPiBjcmVhdGUoVk0qLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwg
U291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0
JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CiAK
ICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2NvcGVJc0Z1bmN0aW9uID0gZmFsc2U7CiAKICAg
ICBwcml2YXRlOgotICAgICAgICBFdmFsTm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgU291cmNlRWxlbWVu
dHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291
cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CisgICAgICAgIEV2YWxO
b2RlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBlbmQsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRl
bnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25z
dGFudHMpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwogICAgIH07CkBAIC0xNDA5LDggKzE0MDksOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBGdW5jdGlvbkJvZHlOb2RlIDogcHVibGljIFNjb3Bl
Tm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0Z1bmN0aW9u
Tm9kZSA9IHRydWU7Ci0gICAgICAgIHN0YXRpYyBGdW5jdGlvbkJvZHlOb2RlKiBjcmVhdGUoSlNH
bG9iYWxEYXRhKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBlbmQsIGJvb2wgaXNTdHJpY3RNb2RlKTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RnVuY3Rpb25Cb2R5Tm9kZT4gY3JlYXRlKEpTR2xvYmFsRGF0YSosIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCBTb3VyY2VFbGVtZW50
cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3Vy
Y2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgc3RhdGlj
IEZ1bmN0aW9uQm9keU5vZGUqIGNyZWF0ZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3Rh
cnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCBib29sIGlzU3RyaWN0TW9kZSk7CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGNyZWF0ZShWTSosIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCBTb3Vy
Y2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBj
b25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAg
ICAgICBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX3Bh
cmFtZXRlcnMuZ2V0KCk7IH0KICAgICAgICAgc2l6ZV90IHBhcmFtZXRlckNvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9wYXJhbWV0ZXJzLT5zaXplKCk7IH0KQEAgLTE0MzMsOCArMTQzMyw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzY29wZUlzRnVuY3Rpb24g
PSB0cnVlOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZShKU0dsb2Jh
bERhdGEqLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGVuZCwgYm9vbCBpblN0cmljdENvbnRleHQpOwotICAgICAgICBGdW5jdGlvbkJvZHlOb2Rl
KEpTR2xvYmFsRGF0YSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgZW5kLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFj
ayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQg
bnVtQ29uc3RhbnRzKTsKKyAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZShWTSosIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCBib29sIGluU3Ry
aWN0Q29udGV4dCk7CisgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUoVk0qLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgU291cmNlRWxlbWVu
dHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291
cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgSWRl
bnRpZmllciBtX2lkZW50OwogICAgICAgICBJZGVudGlmaWVyIG1faW5mZXJyZWROYW1lOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkocmV2aXNpb24gMTQ4NjM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiQVNUQnVpbGRlci5oIgogI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxE
YXRhLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJMZXhlci5oIgogI2luY2x1ZGUgIk5v
ZGVJbmZvLmgiCiAjaW5jbHVkZSAiU291cmNlUHJvdmlkZXIuaCIKQEAgLTYyLDggKzYyLDggQEAg
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKIG5hbWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgTGV4ZXJUeXBlPgotUGFyc2VyPExleGVyVHlwZT46OlBhcnNlcihKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgRnVuY3Rpb25QYXJhbWV0ZXJzKiBw
YXJhbWV0ZXJzLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBKU1BhcnNlclN0cmljdG5lc3Mgc3Ry
aWN0bmVzcywgSlNQYXJzZXJNb2RlIHBhcnNlck1vZGUpCi0gICAgOiBtX2dsb2JhbERhdGEoZ2xv
YmFsRGF0YSkKK1BhcnNlcjxMZXhlclR5cGU+OjpQYXJzZXIoVk0qIHZtLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywgY29uc3QgSWRlbnRp
ZmllciYgbmFtZSwgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MsIEpTUGFyc2VyTW9kZSBw
YXJzZXJNb2RlKQorICAgIDogbV92bSh2bSkKICAgICAsIG1fc291cmNlKCZzb3VyY2UpCiAgICAg
LCBtX3N0YWNrKHd0ZlRocmVhZERhdGEoKS5zdGFjaygpKQogICAgICwgbV9oYXNTdGFja092ZXJm
bG93KGZhbHNlKQpAQCAtNzgsMTEgKzc4LDExIEBAIFBhcnNlcjxMZXhlclR5cGU+OjpQYXJzZXIo
SlNHbG9iYWxEYXRhKiAKICAgICAsIG1fbGFzdElkZW50aWZpZXIoMCkKICAgICAsIG1fc291cmNl
RWxlbWVudHMoMCkKIHsKLSAgICBtX2xleGVyID0gYWRvcHRQdHIobmV3IExleGVyVHlwZShnbG9i
YWxEYXRhKSk7Ci0gICAgbV9hcmVuYSA9IG1fZ2xvYmFsRGF0YS0+cGFyc2VyQXJlbmEuZ2V0KCk7
CisgICAgbV9sZXhlciA9IGFkb3B0UHRyKG5ldyBMZXhlclR5cGUodm0pKTsKKyAgICBtX2FyZW5h
ID0gbV92bS0+cGFyc2VyQXJlbmEuZ2V0KCk7CiAgICAgbV9sZXhlci0+c2V0Q29kZShzb3VyY2Us
IG1fYXJlbmEpOwogCi0gICAgbV9mdW5jdGlvbkNhY2hlID0gZ2xvYmFsRGF0YS0+YWRkU291cmNl
UHJvdmlkZXJDYWNoZShzb3VyY2UucHJvdmlkZXIoKSk7CisgICAgbV9mdW5jdGlvbkNhY2hlID0g
dm0tPmFkZFNvdXJjZVByb3ZpZGVyQ2FjaGUoc291cmNlLnByb3ZpZGVyKCkpOwogICAgIFNjb3Bl
UmVmIHNjb3BlID0gcHVzaFNjb3BlKCk7CiAgICAgaWYgKHBhcnNlck1vZGUgPT0gSlNQYXJzZUZ1
bmN0aW9uQ29kZSkKICAgICAgICAgc2NvcGUtPnNldElzRnVuY3Rpb24oKTsKQEAgLTEwNyw3ICsx
MDcsNyBAQCBTdHJpbmcgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlSW5uZXIoKQogewogICAgIFN0
cmluZyBwYXJzZUVycm9yID0gU3RyaW5nKCk7CiAgICAgCi0gICAgQVNUQnVpbGRlciBjb250ZXh0
KGNvbnN0X2Nhc3Q8SlNHbG9iYWxEYXRhKj4obV9nbG9iYWxEYXRhKSwgY29uc3RfY2FzdDxTb3Vy
Y2VDb2RlKj4obV9zb3VyY2UpKTsKKyAgICBBU1RCdWlsZGVyIGNvbnRleHQoY29uc3RfY2FzdDxW
TSo+KG1fdm0pLCBjb25zdF9jYXN0PFNvdXJjZUNvZGUqPihtX3NvdXJjZSkpOwogICAgIGlmICht
X2xleGVyLT5pc1JlcGFyc2luZygpKQogICAgICAgICBtX3N0YXRlbWVudERlcHRoLS07CiAgICAg
U2NvcGVSZWYgc2NvcGUgPSBjdXJyZW50U2NvcGUoKTsKQEAgLTE2OCw3ICsxNjgsNyBAQCB0ZW1w
bGF0ZSA8U291cmNlRWxlbWVudHNNb2RlIG1vZGUsIGNsYXNzCiAgICAgICAgIGlmIChtb2RlID09
IENoZWNrRm9yU3RyaWN0TW9kZSAmJiAhc2Vlbk5vbkRpcmVjdGl2ZSkgewogICAgICAgICAgICAg
aWYgKGRpcmVjdGl2ZSkgewogICAgICAgICAgICAgICAgIC8vICJ1c2Ugc3RyaWN0IiBtdXN0IGJl
IHRoZSBleGFjdCBsaXRlcmFsIHdpdGhvdXQgZXNjYXBlIHNlcXVlbmNlcyBvciBsaW5lIGNvbnRp
bnVhdGlvbi4KLSAgICAgICAgICAgICAgICBpZiAoIWhhc1NldFN0cmljdCAmJiBkaXJlY3RpdmVM
aXRlcmFsTGVuZ3RoID09IGxlbmd0aE9mVXNlU3RyaWN0TGl0ZXJhbCAmJiBtX2dsb2JhbERhdGEt
PnByb3BlcnR5TmFtZXMtPnVzZVN0cmljdElkZW50aWZpZXIgPT0gKmRpcmVjdGl2ZSkgeworICAg
ICAgICAgICAgICAgIGlmICghaGFzU2V0U3RyaWN0ICYmIGRpcmVjdGl2ZUxpdGVyYWxMZW5ndGgg
PT0gbGVuZ3RoT2ZVc2VTdHJpY3RMaXRlcmFsICYmIG1fdm0tPnByb3BlcnR5TmFtZXMtPnVzZVN0
cmljdElkZW50aWZpZXIgPT0gKmRpcmVjdGl2ZSkgewogICAgICAgICAgICAgICAgICAgICBzZXRT
dHJpY3RNb2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIGhhc1NldFN0cmljdCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGlzVmFsaWRTdHJpY3RNb2RlKCkpOwpAQCAt
NjMzLDcgKzYzMyw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUK
ICAgICBBU1NFUlQobWF0Y2goVFJZKSk7CiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRv
a2VuTG9jYXRpb24oKSk7CiAgICAgVHJlZVN0YXRlbWVudCB0cnlCbG9jayA9IDA7Ci0gICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5udWxs
SWRlbnRpZmllcjsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZtX3ZtLT5wcm9wZXJ0
eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKICAgICBUcmVlU3RhdGVtZW50IGNhdGNoQmxvY2sgPSAw
OwogICAgIFRyZWVTdGF0ZW1lbnQgZmluYWxseUJsb2NrID0gMDsKICAgICBpbnQgZmlyc3RMaW5l
ID0gdG9rZW5MaW5lKCk7CkBAIC04MDAsNyArODAwLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlRnVuY3RpbwogICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlv
bkJvZHkoc3RhcnRMb2NhdGlvbiwgdG9rZW5Mb2NhdGlvbigpLCBzdHJpY3RNb2RlKCkpOwogICAg
IERlcHRoTWFuYWdlciBzdGF0ZW1lbnREZXB0aCgmbV9zdGF0ZW1lbnREZXB0aCk7CiAgICAgbV9z
dGF0ZW1lbnREZXB0aCA9IDA7Ci0gICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkZ1bmN0aW9uQm9k
eUJ1aWxkZXIgYm9keUJ1aWxkZXIoY29uc3RfY2FzdDxKU0dsb2JhbERhdGEqPihtX2dsb2JhbERh
dGEpLCBtX2xleGVyLmdldCgpKTsKKyAgICB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6RnVuY3Rpb25C
b2R5QnVpbGRlciBib2R5QnVpbGRlcihjb25zdF9jYXN0PFZNKj4obV92bSksIG1fbGV4ZXIuZ2V0
KCkpOwogICAgIGZhaWxJZkZhbHNlKHBhcnNlU291cmNlRWxlbWVudHM8Q2hlY2tGb3JTdHJpY3RN
b2RlPihib2R5QnVpbGRlcikpOwogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9k
eShzdGFydExvY2F0aW9uLCB0b2tlbkxvY2F0aW9uKCksIHN0cmljdE1vZGUoKSk7CiB9CkBAIC04
NTUsOCArODU1LDggQEAgdGVtcGxhdGUgPEZ1bmN0aW9uUmVxdWlyZW1lbnRzIHJlcXVpcmVtZQog
ICAgIGJvZHkgPSBwYXJzZUZ1bmN0aW9uQm9keShjb250ZXh0KTsKICAgICBmYWlsSWZGYWxzZShi
b2R5KTsKICAgICBpZiAoZnVuY3Rpb25TY29wZS0+c3RyaWN0TW9kZSgpICYmIG5hbWUpIHsKLSAg
ICAgICAgZmFpbElmVHJ1ZVdpdGhOYW1lQW5kTWVzc2FnZShtX2dsb2JhbERhdGEtPnByb3BlcnR5
TmFtZXMtPmFyZ3VtZW50cyA9PSAqbmFtZSwgIkZ1bmN0aW9uIG5hbWUiLCBuYW1lLT5pbXBsKCks
ICJpcyBub3QgdmFsaWQgaW4gc3RyaWN0IG1vZGUiKTsKLSAgICAgICAgZmFpbElmVHJ1ZVdpdGhO
YW1lQW5kTWVzc2FnZShtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKm5hbWUs
ICJGdW5jdGlvbiBuYW1lIiwgbmFtZS0+aW1wbCgpLCAiaXMgbm90IHZhbGlkIGluIHN0cmljdCBt
b2RlIik7CisgICAgICAgIGZhaWxJZlRydWVXaXRoTmFtZUFuZE1lc3NhZ2UobV92bS0+cHJvcGVy
dHlOYW1lcy0+YXJndW1lbnRzID09ICpuYW1lLCAiRnVuY3Rpb24gbmFtZSIsIG5hbWUtPmltcGwo
KSwgImlzIG5vdCB2YWxpZCBpbiBzdHJpY3QgbW9kZSIpOworICAgICAgICBmYWlsSWZUcnVlV2l0
aE5hbWVBbmRNZXNzYWdlKG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKm5hbWUsICJGdW5j
dGlvbiBuYW1lIiwgbmFtZS0+aW1wbCgpLCAiaXMgbm90IHZhbGlkIGluIHN0cmljdCBtb2RlIik7
CiAgICAgfQogICAgIGNsb3NlQnJhY2VQb3MgPSBtX3Rva2VuLm1fZGF0YS5pbnRWYWx1ZTsKICAg
ICAKQEAgLTExNDAsOCArMTE0MCw4IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUcmVlQnVpbGRlcj4g
VHJlZUV4cHIKICAgICAgICAgbV9hc3NpZ25tZW50Q291bnQrKzsKICAgICAgICAgbmV4dChUcmVl
QnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5ncyk7CiAgICAgICAgIGlmIChzdHJpY3RNb2RlKCkgJiYg
bV9sYXN0SWRlbnRpZmllciAmJiBjb250ZXh0LmlzUmVzb2x2ZShsaHMpKSB7Ci0gICAgICAgICAg
ICBmYWlsSWZUcnVlSWZTdHJpY3RXaXRoTWVzc2FnZShtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFt
ZXMtPmV2YWwgPT0gKm1fbGFzdElkZW50aWZpZXIsICInZXZhbCcgY2Fubm90IGJlIG1vZGlmaWVk
IGluIHN0cmljdCBtb2RlIik7Ci0gICAgICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3RXaXRoTWVz
c2FnZShtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqbV9sYXN0SWRl
bnRpZmllciwgIidhcmd1bWVudHMnIGNhbm5vdCBiZSBtb2RpZmllZCBpbiBzdHJpY3QgbW9kZSIp
OworICAgICAgICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0V2l0aE1lc3NhZ2UobV92bS0+cHJvcGVy
dHlOYW1lcy0+ZXZhbCA9PSAqbV9sYXN0SWRlbnRpZmllciwgIidldmFsJyBjYW5ub3QgYmUgbW9k
aWZpZWQgaW4gc3RyaWN0IG1vZGUiKTsKKyAgICAgICAgICAgIGZhaWxJZlRydWVJZlN0cmljdFdp
dGhNZXNzYWdlKG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqbV9sYXN0SWRlbnRp
ZmllciwgIidhcmd1bWVudHMnIGNhbm5vdCBiZSBtb2RpZmllZCBpbiBzdHJpY3QgbW9kZSIpOwog
ICAgICAgICAgICAgZGVjbGFyZVdyaXRlKG1fbGFzdElkZW50aWZpZXIpOwogICAgICAgICAgICAg
bV9sYXN0SWRlbnRpZmllciA9IDA7CiAgICAgICAgIH0KQEAgLTEyNTEsNyArMTI1MSw3IEBAIHRl
bXBsYXRlIDxib29sIGNvbXBsZXRlLCBjbGFzcyBUcmVlQnVpbGQKICAgICAgICAgd2FzSWRlbnQg
PSB0cnVlOwogICAgIGNhc2UgU1RSSU5HOiB7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7Ci0gICAgICAgIGlmIChjb21wbGV0ZSB8fCAod2Fz
SWRlbnQgJiYgKCppZGVudCA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmdldCB8fCAq
aWRlbnQgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5zZXQpKSkKKyAgICAgICAgaWYg
KGNvbXBsZXRlIHx8ICh3YXNJZGVudCAmJiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMt
PmdldCB8fCAqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+c2V0KSkpCiAgICAgICAgICAg
ICBuZXh0RXhwZWN0SWRlbnRpZmllcihMZXhlckZsYWdzSWdub3JlUmVzZXJ2ZWRXb3Jkcyk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIG5leHRFeHBlY3RJZGVudGlmaWVyKExleGVyRmxhZ3NJ
Z25vcmVSZXNlcnZlZFdvcmRzIHwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZEtleXdvcmRzKTsKQEAg
LTEyNzAsOSArMTI3MCw5IEBAIHRlbXBsYXRlIDxib29sIGNvbXBsZXRlLCBjbGFzcyBUcmVlQnVp
bGQKICAgICAgICAgaW50IGNsb3NlQnJhY2VQb3MgPSAwOwogICAgICAgICBpbnQgYm9keVN0YXJ0
TGluZSA9IDA7CiAgICAgICAgIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlOwotICAgICAgICBpZiAo
KmlkZW50ID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+Z2V0KQorICAgICAgICBpZiAo
KmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmdldCkKICAgICAgICAgICAgIHR5cGUgPSBQ
cm9wZXJ0eU5vZGU6OkdldHRlcjsKLSAgICAgICAgZWxzZSBpZiAoKmlkZW50ID09IG1fZ2xvYmFs
RGF0YS0+cHJvcGVydHlOYW1lcy0+c2V0KQorICAgICAgICBlbHNlIGlmICgqaWRlbnQgPT0gbV92
bS0+cHJvcGVydHlOYW1lcy0+c2V0KQogICAgICAgICAgICAgdHlwZSA9IFByb3BlcnR5Tm9kZTo6
U2V0dGVyOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBmYWlsKCk7CkBAIC0xMjg5LDcgKzEy
ODksNyBAQCB0ZW1wbGF0ZSA8Ym9vbCBjb21wbGV0ZSwgY2xhc3MgVHJlZUJ1aWxkCiAgICAgICAg
IGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbzxGdW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBm
YWxzZT4oY29udGV4dCwgYWNjZXNzb3JOYW1lLCBwYXJhbWV0ZXJzLCBib2R5LCBvcGVuQnJhY2VQ
b3MsIGNsb3NlQnJhY2VQb3MsIGJvZHlTdGFydExpbmUpKSk7CiAgICAgICAgIGlmIChzdHJpbmdQ
cm9wZXJ0eU5hbWUpCiAgICAgICAgICAgICByZXR1cm4gY29udGV4dC50ZW1wbGF0ZSBjcmVhdGVH
ZXR0ZXJPclNldHRlclByb3BlcnR5PGNvbXBsZXRlPihsb2NhdGlvbiwgdHlwZSwgc3RyaW5nUHJv
cGVydHlOYW1lLCBwYXJhbWV0ZXJzLCBib2R5LCBvcGVuQnJhY2VQb3MsIGNsb3NlQnJhY2VQb3Ms
IGJvZHlTdGFydExpbmUsIG1fbGFzdExpbmUpOwotICAgICAgICByZXR1cm4gY29udGV4dC50ZW1w
bGF0ZSBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5PGNvbXBsZXRlPihjb25zdF9jYXN0PEpT
R2xvYmFsRGF0YSo+KG1fZ2xvYmFsRGF0YSksIGxvY2F0aW9uLCB0eXBlLCBudW1lcmljUHJvcGVy
dHlOYW1lLCBwYXJhbWV0ZXJzLCBib2R5LCBvcGVuQnJhY2VQb3MsIGNsb3NlQnJhY2VQb3MsIGJv
ZHlTdGFydExpbmUsIG1fbGFzdExpbmUpOworICAgICAgICByZXR1cm4gY29udGV4dC50ZW1wbGF0
ZSBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5PGNvbXBsZXRlPihjb25zdF9jYXN0PFZNKj4o
bV92bSksIGxvY2F0aW9uLCB0eXBlLCBudW1lcmljUHJvcGVydHlOYW1lLCBwYXJhbWV0ZXJzLCBi
b2R5LCBvcGVuQnJhY2VQb3MsIGNsb3NlQnJhY2VQb3MsIGJvZHlTdGFydExpbmUsIG1fbGFzdExp
bmUpOwogICAgIH0KICAgICBjYXNlIE5VTUJFUjogewogICAgICAgICBkb3VibGUgcHJvcGVydHlO
YW1lID0gbV90b2tlbi5tX2RhdGEuZG91YmxlVmFsdWU7CkBAIC0xMjk3LDcgKzEyOTcsNyBAQCB0
ZW1wbGF0ZSA8Ym9vbCBjb21wbGV0ZSwgY2xhc3MgVHJlZUJ1aWxkCiAgICAgICAgIGNvbnN1bWVP
ckZhaWwoQ09MT04pOwogICAgICAgICBUcmVlRXhwcmVzc2lvbiBub2RlID0gcGFyc2VBc3NpZ25t
ZW50RXhwcmVzc2lvbihjb250ZXh0KTsKICAgICAgICAgZmFpbElmRmFsc2Uobm9kZSk7Ci0gICAg
ICAgIHJldHVybiBjb250ZXh0LnRlbXBsYXRlIGNyZWF0ZVByb3BlcnR5PGNvbXBsZXRlPihjb25z
dF9jYXN0PEpTR2xvYmFsRGF0YSo+KG1fZ2xvYmFsRGF0YSksIHByb3BlcnR5TmFtZSwgbm9kZSwg
UHJvcGVydHlOb2RlOjpDb25zdGFudCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LnRlbXBsYXRl
IGNyZWF0ZVByb3BlcnR5PGNvbXBsZXRlPihjb25zdF9jYXN0PFZNKj4obV92bSksIHByb3BlcnR5
TmFtZSwgbm9kZSwgUHJvcGVydHlOb2RlOjpDb25zdGFudCk7CiAgICAgfQogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGZhaWxJZkZhbHNlKG1fdG9rZW4ubV90eXBlICYgS2V5d29yZFRva2VuRmxhZyk7
CkBAIC0xNDkwLDcgKzE0OTAsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVF
eHByZXNzCiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2RhdGEu
aWRlbnQ7CiAgICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkp
OwogICAgICAgICBuZXh0KCk7Ci0gICAgICAgIGN1cnJlbnRTY29wZSgpLT51c2VWYXJpYWJsZShp
ZGVudCwgbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICppZGVudCk7CisgICAg
ICAgIGN1cnJlbnRTY29wZSgpLT51c2VWYXJpYWJsZShpZGVudCwgbV92bS0+cHJvcGVydHlOYW1l
cy0+ZXZhbCA9PSAqaWRlbnQpOwogICAgICAgICBtX2xhc3RJZGVudGlmaWVyID0gaWRlbnQ7CiAg
ICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVJlc29sdmUobG9jYXRpb24sIGlkZW50LCBzdGFy
dCk7CiAgICAgfQpAQCAtMTU4NSw3ICsxNTg1LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlRXhwcmVzcwogICAgIH0KICAgICAKICAgICBpZiAobWF0Y2goRlVOQ1RJT04pKSB7
Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXIqIG5hbWUgPSAmbV9nbG9iYWxEYXRhLT5wcm9wZXJ0
eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciogbmFtZSA9
ICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKICAgICAgICAgVHJlZUZvcm1h
bFBhcmFtZXRlckxpc3QgcGFyYW1ldGVycyA9IDA7CiAgICAgICAgIFRyZWVGdW5jdGlvbkJvZHkg
Ym9keSA9IDA7CiAgICAgICAgIGludCBvcGVuQnJhY2VQb3MgPSAwOwpAQCAtMTY5Miw3ICsxNjky
LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgIGJvb2wg
aXNFdmFsT3JBcmd1bWVudHMgPSBmYWxzZTsKICAgICBpZiAoc3RyaWN0TW9kZSgpICYmICFtX3N5
bnRheEFscmVhZHlWYWxpZGF0ZWQpIHsKICAgICAgICAgaWYgKGNvbnRleHQuaXNSZXNvbHZlKGV4
cHIpKQotICAgICAgICAgICAgaXNFdmFsT3JBcmd1bWVudHMgPSAqbV9sYXN0SWRlbnRpZmllciA9
PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmV2YWwgfHwgKm1fbGFzdElkZW50aWZpZXIg
PT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHM7CisgICAgICAgICAgICBp
c0V2YWxPckFyZ3VtZW50cyA9ICptX2xhc3RJZGVudGlmaWVyID09IG1fdm0tPnByb3BlcnR5TmFt
ZXMtPmV2YWwgfHwgKm1fbGFzdElkZW50aWZpZXIgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+YXJn
dW1lbnRzOwogICAgIH0KICAgICBmYWlsSWZUcnVlSWZTdHJpY3RXaXRoTmFtZUFuZE1lc3NhZ2Uo
aXNFdmFsT3JBcmd1bWVudHMgJiYgbW9kaWZpZXNFeHByLCAiJyIsIG1fbGFzdElkZW50aWZpZXIt
PmltcGwoKSwgIicgY2Fubm90IGJlIG1vZGlmaWVkIGluIHN0cmljdCBtb2RlIik7CiAgICAgc3dp
dGNoIChtX3Rva2VuLm1fdHlwZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlci5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIGNsYXNzIEV4ZWNTdGF0
ZTsKIGNsYXNzIEZ1bmN0aW9uQm9keU5vZGU7CiBjbGFzcyBGdW5jdGlvblBhcmFtZXRlcnM7CiBj
bGFzcyBJZGVudGlmaWVyOwotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiBjbGFzcyBQ
cm9ncmFtTm9kZTsKIGNsYXNzIFNvdXJjZUNvZGU7CiAKQEAgLTExMCw4ICsxMTAsOCBAQCBzdHJ1
Y3QgU2NvcGVMYWJlbEluZm8gewogfTsKIAogc3RydWN0IFNjb3BlIHsKLSAgICBTY29wZShjb25z
dCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGJvb2wgaXNGdW5jdGlvbiwgYm9vbCBzdHJpY3RN
b2RlKQotICAgICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorICAgIFNjb3BlKGNvbnN0
IFZNKiB2bSwgYm9vbCBpc0Z1bmN0aW9uLCBib29sIHN0cmljdE1vZGUpCisgICAgICAgIDogbV92
bSh2bSkKICAgICAgICAgLCBtX3NoYWRvd3NBcmd1bWVudHMoZmFsc2UpCiAgICAgICAgICwgbV91
c2VzRXZhbChmYWxzZSkKICAgICAgICAgLCBtX25lZWRzRnVsbEFjdGl2YXRpb24oZmFsc2UpCkBA
IC0xMjYsNyArMTI2LDcgQEAgc3RydWN0IFNjb3BlIHsKICAgICB9CiAKICAgICBTY29wZShjb25z
dCBTY29wZSYgcmhzKQotICAgICAgICA6IG1fZ2xvYmFsRGF0YShyaHMubV9nbG9iYWxEYXRhKQor
ICAgICAgICA6IG1fdm0ocmhzLm1fdm0pCiAgICAgICAgICwgbV9zaGFkb3dzQXJndW1lbnRzKHJo
cy5tX3NoYWRvd3NBcmd1bWVudHMpCiAgICAgICAgICwgbV91c2VzRXZhbChyaHMubV91c2VzRXZh
bCkKICAgICAgICAgLCBtX25lZWRzRnVsbEFjdGl2YXRpb24ocmhzLm1fbmVlZHNGdWxsQWN0aXZh
dGlvbikKQEAgLTE5Niw3ICsxOTYsNyBAQCBzdHJ1Y3QgU2NvcGUgewogCiAgICAgYm9vbCBkZWNs
YXJlVmFyaWFibGUoY29uc3QgSWRlbnRpZmllciogaWRlbnQpCiAgICAgewotICAgICAgICBib29s
IGlzVmFsaWRTdHJpY3RNb2RlID0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5ldmFsICE9
ICppZGVudCAmJiBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyAhPSAqaWRl
bnQ7CisgICAgICAgIGJvb2wgaXNWYWxpZFN0cmljdE1vZGUgPSBtX3ZtLT5wcm9wZXJ0eU5hbWVz
LT5ldmFsICE9ICppZGVudCAmJiBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgIT0gKmlk
ZW50OwogICAgICAgICBtX2lzVmFsaWRTdHJpY3RNb2RlID0gbV9pc1ZhbGlkU3RyaWN0TW9kZSAm
JiBpc1ZhbGlkU3RyaWN0TW9kZTsKICAgICAgICAgbV9kZWNsYXJlZFZhcmlhYmxlcy5hZGQoaWRl
bnQtPnN0cmluZygpLmltcGwoKSk7CiAgICAgICAgIHJldHVybiBpc1ZhbGlkU3RyaWN0TW9kZTsK
QEAgLTIxMyw4ICsyMTMsOCBAQCBzdHJ1Y3QgU2NvcGUgewogCiAgICAgYm9vbCBkZWNsYXJlUGFy
YW1ldGVyKGNvbnN0IElkZW50aWZpZXIqIGlkZW50KQogICAgIHsKLSAgICAgICAgYm9vbCBpc0Fy
Z3VtZW50cyA9IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICppZGVu
dDsKLSAgICAgICAgYm9vbCBpc1ZhbGlkU3RyaWN0TW9kZSA9IG1fZGVjbGFyZWRWYXJpYWJsZXMu
YWRkKGlkZW50LT5zdHJpbmcoKS5pbXBsKCkpLmlzTmV3RW50cnkgJiYgbV9nbG9iYWxEYXRhLT5w
cm9wZXJ0eU5hbWVzLT5ldmFsICE9ICppZGVudCAmJiAhaXNBcmd1bWVudHM7CisgICAgICAgIGJv
b2wgaXNBcmd1bWVudHMgPSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gKmlkZW50
OworICAgICAgICBib29sIGlzVmFsaWRTdHJpY3RNb2RlID0gbV9kZWNsYXJlZFZhcmlhYmxlcy5h
ZGQoaWRlbnQtPnN0cmluZygpLmltcGwoKSkuaXNOZXdFbnRyeSAmJiBtX3ZtLT5wcm9wZXJ0eU5h
bWVzLT5ldmFsICE9ICppZGVudCAmJiAhaXNBcmd1bWVudHM7CiAgICAgICAgIG1faXNWYWxpZFN0
cmljdE1vZGUgPSBtX2lzVmFsaWRTdHJpY3RNb2RlICYmIGlzVmFsaWRTdHJpY3RNb2RlOwogICAg
ICAgICBpZiAoaXNBcmd1bWVudHMpCiAgICAgICAgICAgICBtX3NoYWRvd3NBcmd1bWVudHMgPSB0
cnVlOwpAQCAtMzEyLDcgKzMxMiw3IEBAIHN0cnVjdCBTY29wZSB7CiAgICAgfQogCiBwcml2YXRl
OgotICAgIGNvbnN0IEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworICAgIGNvbnN0IFZNKiBt
X3ZtOwogICAgIGJvb2wgbV9zaGFkb3dzQXJndW1lbnRzIDogMTsKICAgICBib29sIG1fdXNlc0V2
YWwgOiAxOwogICAgIGJvb2wgbV9uZWVkc0Z1bGxBY3RpdmF0aW9uIDogMTsKQEAgLTM2NSw3ICsz
NjUsNyBAQCBjbGFzcyBQYXJzZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCiBw
dWJsaWM6Ci0gICAgUGFyc2VyKEpTR2xvYmFsRGF0YSosIGNvbnN0IFNvdXJjZUNvZGUmLCBGdW5j
dGlvblBhcmFtZXRlcnMqLCBjb25zdCBJZGVudGlmaWVyJiwgSlNQYXJzZXJTdHJpY3RuZXNzLCBK
U1BhcnNlck1vZGUpOworICAgIFBhcnNlcihWTSosIGNvbnN0IFNvdXJjZUNvZGUmLCBGdW5jdGlv
blBhcmFtZXRlcnMqLCBjb25zdCBJZGVudGlmaWVyJiwgSlNQYXJzZXJTdHJpY3RuZXNzLCBKU1Bh
cnNlck1vZGUpOwogICAgIH5QYXJzZXIoKTsKIAogICAgIHRlbXBsYXRlIDxjbGFzcyBQYXJzZWRO
b2RlPgpAQCAtNDIyLDcgKzQyMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpc1N0cmljdCA9
IG1fc2NvcGVTdGFjay5sYXN0KCkuc3RyaWN0TW9kZSgpOwogICAgICAgICAgICAgaXNGdW5jdGlv
biA9IG1fc2NvcGVTdGFjay5sYXN0KCkuaXNGdW5jdGlvbigpOwogICAgICAgICB9Ci0gICAgICAg
IG1fc2NvcGVTdGFjay5hcHBlbmQoU2NvcGUobV9nbG9iYWxEYXRhLCBpc0Z1bmN0aW9uLCBpc1N0
cmljdCkpOworICAgICAgICBtX3Njb3BlU3RhY2suYXBwZW5kKFNjb3BlKG1fdm0sIGlzRnVuY3Rp
b24sIGlzU3RyaWN0KSk7CiAgICAgICAgIHJldHVybiBjdXJyZW50U2NvcGUoKTsKICAgICB9CiAg
ICAgCkBAIC04OTQsNyArODk0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuICFtX2Vycm9y
TWVzc2FnZS5pc051bGwoKTsKICAgICB9CiAKLSAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0
YTsKKyAgICBWTSogbV92bTsKICAgICBjb25zdCBTb3VyY2VDb2RlKiBtX3NvdXJjZTsKICAgICBQ
YXJzZXJBcmVuYSogbV9hcmVuYTsKICAgICBPd25QdHI8TGV4ZXJUeXBlPiBtX2xleGVyOwpAQCAt
OTc1LDcgKzk3NSw3IEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyVHlwZT4K
ICAgICAgICAgSlNUb2tlbkxvY2F0aW9uIGVuZExvY2F0aW9uOwogICAgICAgICBlbmRMb2NhdGlv
bi5saW5lID0gbV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKTsKICAgICAgICAgZW5kTG9jYXRpb24u
Y2hhclBvc2l0aW9uID0gbV9sZXhlci0+Y3VycmVudENoYXJQb3NpdGlvbigpOwotICAgICAgICBy
ZXN1bHQgPSBQYXJzZWROb2RlOjpjcmVhdGUobV9nbG9iYWxEYXRhLAorICAgICAgICByZXN1bHQg
PSBQYXJzZWROb2RlOjpjcmVhdGUobV92bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXJ0TG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbmRMb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc291
cmNlRWxlbWVudHMsCkBAIC0xMDA3LDE2ICsxMDA3LDE2IEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9k
ZT4gUGFyc2VyPExleGVyVHlwZT4KIH0KIAogdGVtcGxhdGUgPGNsYXNzIFBhcnNlZE5vZGU+Ci1Q
YXNzUmVmUHRyPFBhcnNlZE5vZGU+IHBhcnNlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMsIGNv
bnN0IElkZW50aWZpZXImIG5hbWUsIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzLCBKU1Bh
cnNlck1vZGUgcGFyc2VyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yKQorUGFzc1JlZlB0cjxQYXJz
ZWROb2RlPiBwYXJzZShWTSogdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgRnVuY3Rpb25Q
YXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBKU1BhcnNlclN0
cmljdG5lc3Mgc3RyaWN0bmVzcywgSlNQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFBhcnNlckVycm9y
JiBlcnJvcikKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiUGFyc2luZyIp
OwogCiAgICAgQVNTRVJUKCFzb3VyY2UucHJvdmlkZXIoKS0+c291cmNlKCkuaXNOdWxsKCkpOwog
ICAgIGlmIChzb3VyY2UucHJvdmlkZXIoKS0+c291cmNlKCkuaXM4Qml0KCkpIHsKLSAgICAgICAg
UGFyc2VyPCBMZXhlcjxMQ2hhcj4gPiBwYXJzZXIoZ2xvYmFsRGF0YSwgc291cmNlLCBwYXJhbWV0
ZXJzLCBuYW1lLCBzdHJpY3RuZXNzLCBwYXJzZXJNb2RlKTsKKyAgICAgICAgUGFyc2VyPCBMZXhl
cjxMQ2hhcj4gPiBwYXJzZXIodm0sIHNvdXJjZSwgcGFyYW1ldGVycywgbmFtZSwgc3RyaWN0bmVz
cywgcGFyc2VyTW9kZSk7CiAgICAgICAgIHJldHVybiBwYXJzZXIucGFyc2U8UGFyc2VkTm9kZT4o
ZXJyb3IpOwogICAgIH0KLSAgICBQYXJzZXI8IExleGVyPFVDaGFyPiA+IHBhcnNlcihnbG9iYWxE
YXRhLCBzb3VyY2UsIHBhcmFtZXRlcnMsIG5hbWUsIHN0cmljdG5lc3MsIHBhcnNlck1vZGUpOwor
ICAgIFBhcnNlcjwgTGV4ZXI8VUNoYXI+ID4gcGFyc2VyKHZtLCBzb3VyY2UsIHBhcmFtZXRlcnMs
IG5hbWUsIHN0cmljdG5lc3MsIHBhcnNlck1vZGUpOwogICAgIHJldHVybiBwYXJzZXIucGFyc2U8
UGFyc2VkTm9kZT4oZXJyb3IpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlckFyZW5hLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXJBcmVuYS5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlckFyZW5hLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEwICs0Mywx
MCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgotICAgICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIG1ha2VJZGVu
dGlmaWVyKEpTR2xvYmFsRGF0YSosIGNvbnN0IFQqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgp
OwotICAgICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIG1ha2VJZGVudGlmaWVy
TENoYXJGcm9tVUNoYXIoSlNHbG9iYWxEYXRhKiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNp
emVfdCBsZW5ndGgpOworICAgICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIG1h
a2VJZGVudGlmaWVyKFZNKiwgY29uc3QgVCogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCk7Cisg
ICAgICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciYgbWFrZUlkZW50aWZpZXJMQ2hh
ckZyb21VQ2hhcihWTSosIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKTsK
IAotICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBtYWtlTnVtZXJpY0lkZW50aWZpZXIoSlNHbG9i
YWxEYXRhKiwgZG91YmxlIG51bWJlcik7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG1ha2VO
dW1lcmljSWRlbnRpZmllcihWTSosIGRvdWJsZSBudW1iZXIpOwogCiAgICAgICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcnMuaXNFbXB0eSgpOyB9CiAKQEAgLTY5
LDUxICs2OSw1MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+Ci0gICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyJiBJZGVudGlmaWVy
QXJlbmE6Om1ha2VJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVCog
Y2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50
aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZUlkZW50aWZpZXIoVk0qIHZtLCBjb25zdCBUKiBj
aGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogICAgIHsKICAgICAgICAgaWYgKGNoYXJhY3RlcnNb
MF0gPj0gTWF4aW11bUNhY2hhYmxlQ2hhcmFjdGVyKSB7Ci0gICAgICAgICAgICBtX2lkZW50aWZp
ZXJzLmFwcGVuZChJZGVudGlmaWVyKGdsb2JhbERhdGEsIGNoYXJhY3RlcnMsIGxlbmd0aCkpOwor
ICAgICAgICAgICAgbV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcih2bSwgY2hhcmFjdGVy
cywgbGVuZ3RoKSk7CiAgICAgICAgICAgICByZXR1cm4gbV9pZGVudGlmaWVycy5sYXN0KCk7CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKGxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgICBpZiAoSWRl
bnRpZmllciogaWRlbnQgPSBtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0pCiAgICAg
ICAgICAgICAgICAgcmV0dXJuICppZGVudDsKLSAgICAgICAgICAgIG1faWRlbnRpZmllcnMuYXBw
ZW5kKElkZW50aWZpZXIoZ2xvYmFsRGF0YSwgY2hhcmFjdGVycywgbGVuZ3RoKSk7CisgICAgICAg
ICAgICBtX2lkZW50aWZpZXJzLmFwcGVuZChJZGVudGlmaWVyKHZtLCBjaGFyYWN0ZXJzLCBsZW5n
dGgpKTsKICAgICAgICAgICAgIG1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXSA9ICZt
X2lkZW50aWZpZXJzLmxhc3QoKTsKICAgICAgICAgICAgIHJldHVybiBtX2lkZW50aWZpZXJzLmxh
c3QoKTsKICAgICAgICAgfQogICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9IG1fcmVjZW50SWRl
bnRpZmllcnNbY2hhcmFjdGVyc1swXV07CiAgICAgICAgIGlmIChpZGVudCAmJiBJZGVudGlmaWVy
OjplcXVhbChpZGVudC0+aW1wbCgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKQogICAgICAgICAgICAg
cmV0dXJuICppZGVudDsKLSAgICAgICAgbV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcihn
bG9iYWxEYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKKyAgICAgICAgbV9pZGVudGlmaWVycy5h
cHBlbmQoSWRlbnRpZmllcih2bSwgY2hhcmFjdGVycywgbGVuZ3RoKSk7CiAgICAgICAgIG1fcmVj
ZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0gPSAmbV9pZGVudGlmaWVycy5sYXN0KCk7CiAg
ICAgICAgIHJldHVybiBtX2lkZW50aWZpZXJzLmxhc3QoKTsKICAgICB9CiAKLSAgICBBTFdBWVNf
SU5MSU5FIGNvbnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZUlkZW50aWZpZXJM
Q2hhckZyb21VQ2hhcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQorICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmll
ciYgSWRlbnRpZmllckFyZW5hOjptYWtlSWRlbnRpZmllckxDaGFyRnJvbVVDaGFyKFZNKiB2bSwg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiAgICAgewogICAgICAgICBp
ZiAoY2hhcmFjdGVyc1swXSA+PSBNYXhpbXVtQ2FjaGFibGVDaGFyYWN0ZXIpIHsKLSAgICAgICAg
ICAgIG1faWRlbnRpZmllcnMuYXBwZW5kKElkZW50aWZpZXI6OmNyZWF0ZUxDaGFyRnJvbVVDaGFy
KGdsb2JhbERhdGEsIGNoYXJhY3RlcnMsIGxlbmd0aCkpOworICAgICAgICAgICAgbV9pZGVudGlm
aWVycy5hcHBlbmQoSWRlbnRpZmllcjo6Y3JlYXRlTENoYXJGcm9tVUNoYXIodm0sIGNoYXJhY3Rl
cnMsIGxlbmd0aCkpOwogICAgICAgICAgICAgcmV0dXJuIG1faWRlbnRpZmllcnMubGFzdCgpOwog
ICAgICAgICB9CiAgICAgICAgIGlmIChsZW5ndGggPT0gMSkgewogICAgICAgICAgICAgaWYgKElk
ZW50aWZpZXIqIGlkZW50ID0gbV9zaG9ydElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dKQogICAg
ICAgICAgICAgICAgIHJldHVybiAqaWRlbnQ7Ci0gICAgICAgICAgICBtX2lkZW50aWZpZXJzLmFw
cGVuZChJZGVudGlmaWVyKGdsb2JhbERhdGEsIGNoYXJhY3RlcnMsIGxlbmd0aCkpOworICAgICAg
ICAgICAgbV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcih2bSwgY2hhcmFjdGVycywgbGVu
Z3RoKSk7CiAgICAgICAgICAgICBtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0gPSAm
bV9pZGVudGlmaWVycy5sYXN0KCk7CiAgICAgICAgICAgICByZXR1cm4gbV9pZGVudGlmaWVycy5s
YXN0KCk7CiAgICAgICAgIH0KICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSBtX3JlY2VudElk
ZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dOwogICAgICAgICBpZiAoaWRlbnQgJiYgSWRlbnRpZmll
cjo6ZXF1YWwoaWRlbnQtPmltcGwoKSwgY2hhcmFjdGVycywgbGVuZ3RoKSkKICAgICAgICAgICAg
IHJldHVybiAqaWRlbnQ7Ci0gICAgICAgIG1faWRlbnRpZmllcnMuYXBwZW5kKElkZW50aWZpZXI6
OmNyZWF0ZUxDaGFyRnJvbVVDaGFyKGdsb2JhbERhdGEsIGNoYXJhY3RlcnMsIGxlbmd0aCkpOwor
ICAgICAgICBtX2lkZW50aWZpZXJzLmFwcGVuZChJZGVudGlmaWVyOjpjcmVhdGVMQ2hhckZyb21V
Q2hhcih2bSwgY2hhcmFjdGVycywgbGVuZ3RoKSk7CiAgICAgICAgIG1fcmVjZW50SWRlbnRpZmll
cnNbY2hhcmFjdGVyc1swXV0gPSAmbV9pZGVudGlmaWVycy5sYXN0KCk7CiAgICAgICAgIHJldHVy
biBtX2lkZW50aWZpZXJzLmxhc3QoKTsKICAgICB9CiAgICAgCi0gICAgaW5saW5lIGNvbnN0IElk
ZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZU51bWVyaWNJZGVudGlmaWVyKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgZG91YmxlIG51bWJlcikKKyAgICBpbmxpbmUgY29uc3QgSWRlbnRp
ZmllciYgSWRlbnRpZmllckFyZW5hOjptYWtlTnVtZXJpY0lkZW50aWZpZXIoVk0qIHZtLCBkb3Vi
bGUgbnVtYmVyKQogICAgIHsKLSAgICAgICAgbV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmll
cihnbG9iYWxEYXRhLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdChudW1iZXIpKSk7
CisgICAgICAgIG1faWRlbnRpZmllcnMuYXBwZW5kKElkZW50aWZpZXIodm0sIFN0cmluZzo6bnVt
YmVyVG9TdHJpbmdFQ01BU2NyaXB0KG51bWJlcikpKTsKICAgICAgICAgcmV0dXJuIG1faWRlbnRp
ZmllcnMubGFzdCgpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9TeW50YXhDaGVja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9TeW50YXhDaGVja2VyLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2
NCw3IEBAIHB1YmxpYzoKICAgICAgICAgU3ludGF4Q2hlY2tlciogbV9jb250ZXh0OwogICAgIH07
CiAgICAgCi0gICAgU3ludGF4Q2hlY2tlcihKU0dsb2JhbERhdGEqICwgdm9pZCopCisgICAgU3lu
dGF4Q2hlY2tlcihWTSogLCB2b2lkKikKICAgICB7CiAgICAgfQogCkBAIC0xNjMsMTEgKzE2Mywx
MSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChuYW1lKTsKICAgICAgICAgcmV0dXJuIFByb3Bl
cnR5KG5hbWUsIHR5cGUpOwogICAgIH0KLSAgICB0ZW1wbGF0ZSA8Ym9vbCBjb21wbGV0ZT4gUHJv
cGVydHkgY3JlYXRlUHJvcGVydHkoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBkb3VibGUgbmFt
ZSwgaW50LCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSkKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBjb21w
bGV0ZT4gUHJvcGVydHkgY3JlYXRlUHJvcGVydHkoVk0qIHZtLCBkb3VibGUgbmFtZSwgaW50LCBQ
cm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSkKICAgICB7CiAgICAgICAgIGlmICghY29tcGxldGUpCiAg
ICAgICAgICAgICByZXR1cm4gUHJvcGVydHkodHlwZSk7Ci0gICAgICAgIHJldHVybiBQcm9wZXJ0
eSgmZ2xvYmFsRGF0YS0+cGFyc2VyQXJlbmEtPmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmlj
SWRlbnRpZmllcihnbG9iYWxEYXRhLCBuYW1lKSwgdHlwZSk7CisgICAgICAgIHJldHVybiBQcm9w
ZXJ0eSgmdm0tPnBhcnNlckFyZW5hLT5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50
aWZpZXIodm0sIG5hbWUpLCB0eXBlKTsKICAgICB9CiAgICAgaW50IGNyZWF0ZVByb3BlcnR5TGlz
dChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBQcm9wZXJ0eSkgeyByZXR1cm4gMTsgfQogICAgIGlu
dCBjcmVhdGVQcm9wZXJ0eUxpc3QoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgUHJvcGVydHksIGlu
dCkgeyByZXR1cm4gMTsgfQpAQCAtMjExLDExICsyMTEsMTEgQEAgcHVibGljOgogICAgICAgICAg
ICAgcmV0dXJuIFByb3BlcnR5KHR5cGUpOwogICAgICAgICByZXR1cm4gUHJvcGVydHkobmFtZSwg
dHlwZSk7CiAgICAgfQotICAgIHRlbXBsYXRlIDxib29sIHN0cmljdD4gUHJvcGVydHkgY3JlYXRl
R2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBkb3VibGUgbmFtZSwgaW50
LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBzdHJpY3Q+IFBy
b3BlcnR5IGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoVk0qIHZtLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgZG91YmxlIG5hbWUsIGludCwgaW50
LCBpbnQsIGludCwgaW50LCBpbnQpCiAgICAgewogICAgICAgICBpZiAoIXN0cmljdCkKICAgICAg
ICAgICAgIHJldHVybiBQcm9wZXJ0eSh0eXBlKTsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5KCZn
bG9iYWxEYXRhLT5wYXJzZXJBcmVuYS0+aWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVu
dGlmaWVyKGdsb2JhbERhdGEsIG5hbWUpLCB0eXBlKTsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5
KCZ2bS0+cGFyc2VyQXJlbmEtPmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmll
cih2bSwgbmFtZSksIHR5cGUpOwogICAgIH0KIAogICAgIHZvaWQgYXBwZW5kU3RhdGVtZW50KGlu
dCwgaW50KSB7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9MZWdhY3lQ
cm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVy
L0xlZ2FjeVByb2ZpbGVyLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Byb2ZpbGVyL0xlZ2FjeVByb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYs
NyArNzYsNyBAQCB2b2lkIExlZ2FjeVByb2ZpbGVyOjpzdGFydFByb2ZpbGluZyhFeGVjCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZXhlYy0+Z2xvYmFsRGF0YSgpLm1fZW5hYmxl
ZFByb2ZpbGVyID0gdGhpczsKKyAgICBleGVjLT52bSgpLm1fZW5hYmxlZFByb2ZpbGVyID0gdGhp
czsKICAgICBSZWZQdHI8UHJvZmlsZUdlbmVyYXRvcj4gcHJvZmlsZUdlbmVyYXRvciA9IFByb2Zp
bGVHZW5lcmF0b3I6OmNyZWF0ZShleGVjLCB0aXRsZSwgKytQcm9maWxlc1VJRCk7CiAgICAgbV9j
dXJyZW50UHJvZmlsZXMuYXBwZW5kKHByb2ZpbGVHZW5lcmF0b3IpOwogfQpAQCAtOTUsNyArOTUs
NyBAQCBQYXNzUmVmUHRyPFByb2ZpbGU+IExlZ2FjeVByb2ZpbGVyOjpzdG9wCiAKICAgICAgICAg
ICAgIG1fY3VycmVudFByb2ZpbGVzLnJlbW92ZShpKTsKICAgICAgICAgICAgIGlmICghbV9jdXJy
ZW50UHJvZmlsZXMuc2l6ZSgpKQotICAgICAgICAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5t
X2VuYWJsZWRQcm9maWxlciA9IDA7CisgICAgICAgICAgICAgICAgZXhlYy0+dm0oKS5tX2VuYWJs
ZWRQcm9maWxlciA9IDA7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVybiByZXR1cm5Q
cm9maWxlOwogICAgICAgICB9CkBAIC0xMTIsNyArMTEyLDcgQEAgdm9pZCBMZWdhY3lQcm9maWxl
cjo6c3RvcFByb2ZpbGluZyhKU0dsbwogICAgICAgICAgICAgcHJvZmlsZUdlbmVyYXRvci0+c3Rv
cFByb2ZpbGluZygpOwogICAgICAgICAgICAgbV9jdXJyZW50UHJvZmlsZXMucmVtb3ZlKGkpOwog
ICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRQcm9maWxlcy5zaXplKCkpCi0gICAgICAgICAgICAg
ICAgb3JpZ2luLT5nbG9iYWxEYXRhKCkubV9lbmFibGVkUHJvZmlsZXIgPSAwOworICAgICAgICAg
ICAgICAgIG9yaWdpbi0+dm0oKS5tX2VuYWJsZWRQcm9maWxlciA9IDA7CiAgICAgICAgIH0KICAg
ICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvTGVnYWN5UHJvZmls
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvTGVnYWN5
UHJvZmlsZXIuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3By
b2ZpbGVyL0xlZ2FjeVByb2ZpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAK
IG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBFeGVjU3RhdGU7Ci1jbGFzcyBKU0dsb2JhbERhdGE7
CitjbGFzcyBWTTsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgSlNPYmplY3Q7CiBjbGFz
cyBKU1ZhbHVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVy
Qnl0ZWNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxl
ci9Qcm9maWxlckJ5dGVjb2RlLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw5ICszNSw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgUHJvZmlsZXIgewogSlNW
YWx1ZSBCeXRlY29kZTo6dG9KUyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgSlNPYmpl
Y3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgIHJlc3VsdC0+cHV0
RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVjb2Rl
SW5kZXgsIGpzTnVtYmVyKG1fYnl0ZWNvZGVJbmRleCkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm9wY29kZSwganNTdHJp
bmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOChvcGNvZGVOYW1lc1ttX29wY29kZUlEXSkpKTsKLSAg
ICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5kZXNjcmlwdGlvbiwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOChtX2Rlc2Ny
aXB0aW9uKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5ieXRlY29kZUluZGV4LCBqc051bWJlcihtX2J5dGVjb2RlSW5kZXgpKTsKKyAg
ICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkub3Bj
b2RlLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG9wY29kZU5hbWVzW21fb3Bjb2Rl
SURdKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5kZXNjcmlwdGlvbiwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOChtX2Rl
c2NyaXB0aW9uKSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2Vx
dWVuY2UuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJv
ZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIs
OSArNTIsOSBAQCBCeXRlY29kZVNlcXVlbmNlOjpCeXRlY29kZVNlcXVlbmNlKENvZGVCCiAgICAg
Zm9yICh1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gMDsgYnl0ZWNvZGVJbmRleCA8IGNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOykgewogICAgICAgICBvdXQucmVzZXQoKTsKICAgICAg
ICAgY29kZUJsb2NrLT5kdW1wQnl0ZWNvZGUob3V0LCBieXRlY29kZUluZGV4KTsKLSAgICAgICAg
bV9zZXF1ZW5jZS5hcHBlbmQoQnl0ZWNvZGUoYnl0ZWNvZGVJbmRleCwgY29kZUJsb2NrLT5nbG9i
YWxEYXRhKCktPmludGVycHJldGVyLT5nZXRPcGNvZGVJRChjb2RlQmxvY2stPmluc3RydWN0aW9u
cygpW2J5dGVjb2RlSW5kZXhdLnUub3Bjb2RlKSwgb3V0LnRvQ1N0cmluZygpKSk7CisgICAgICAg
IG1fc2VxdWVuY2UuYXBwZW5kKEJ5dGVjb2RlKGJ5dGVjb2RlSW5kZXgsIGNvZGVCbG9jay0+dm0o
KS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbYnl0
ZWNvZGVJbmRleF0udS5vcGNvZGUpLCBvdXQudG9DU3RyaW5nKCkpKTsKICAgICAgICAgYnl0ZWNv
ZGVJbmRleCArPSBvcGNvZGVMZW5ndGgoCi0gICAgICAgICAgICBjb2RlQmxvY2stPmdsb2JhbERh
dGEoKS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKAorICAgICAgICAgICAgY29kZUJsb2NrLT52
bSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoCiAgICAgICAgICAgICAgICAgY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKVtieXRlY29kZUluZGV4XS51Lm9wY29kZSkpOwogICAgIH0KIH0KQEAg
LTc4LDEyICs3OCwxMiBAQCB2b2lkIEJ5dGVjb2RlU2VxdWVuY2U6OmFkZFNlcXVlbmNlUHJvcGVy
CiAgICAgSlNBcnJheSogaGVhZGVyID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9oZWFkZXIuc2l6ZSgpOyArK2kpCiAgICAgICAg
IGhlYWRlci0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpm
cm9tVVRGOChtX2hlYWRlcltpXSkpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5oZWFkZXIsIGhlYWRlcik7CisgICAgcmVz
dWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmhlYWRlciwg
aGVhZGVyKTsKICAgICAKICAgICBKU0FycmF5KiBzZXF1ZW5jZSA9IGNvbnN0cnVjdEVtcHR5QXJy
YXkoZXhlYywgMCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2VxdWVuY2Uuc2l6
ZSgpOyArK2kpCiAgICAgICAgIHNlcXVlbmNlLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX3Nl
cXVlbmNlW2ldLnRvSlMoZXhlYykpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVjb2RlLCBzZXF1ZW5jZSk7CisgICAg
cmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVj
b2RlLCBzZXF1ZW5jZSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpQcm9maWxlcgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRl
Y29kZXMuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJv
ZmlsZXIvUHJvZmlsZXJCeXRlY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMSArNTUs
MTEgQEAgSlNWYWx1ZSBCeXRlY29kZXM6OnRvSlMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpT
T2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKICAgICAKLSAgICBy
ZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5ieXRlY29kZXNJRCwganNOdW1iZXIobV9pZCkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmluZmVycmVkTmFtZSwganNT
dHJpbmcoZXhlYywgbV9pbmZlcnJlZE5hbWUpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVj
LT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zb3VyY2VDb2RlLCBqc1N0cmlu
ZyhleGVjLCBtX3NvdXJjZUNvZGUpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5oYXNoLCBqc1N0cmluZyhleGVjLCBTdHJp
bmc6OmZyb21VVEY4KHRvQ1N0cmluZyhtX2hhc2gpKSkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmluc3RydWN0aW9uQ291
bnQsIGpzTnVtYmVyKG1faW5zdHJ1Y3Rpb25Db3VudCkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0
KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29kZXNJRCwganNOdW1iZXIo
bV9pZCkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5pbmZlcnJlZE5hbWUsIGpzU3RyaW5nKGV4ZWMsIG1faW5mZXJyZWROYW1lKSk7Cisg
ICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNv
dXJjZUNvZGUsIGpzU3RyaW5nKGV4ZWMsIG1fc291cmNlQ29kZSkpOworICAgIHJlc3VsdC0+cHV0
RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5oYXNoLCBqc1N0cmluZyhl
eGVjLCBTdHJpbmc6OmZyb21VVEY4KHRvQ1N0cmluZyhtX2hhc2gpKSkpOworICAgIHJlc3VsdC0+
cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pbnN0cnVjdGlvbkNv
dW50LCBqc051bWJlcihtX2luc3RydWN0aW9uQ291bnQpKTsKICAgICBhZGRTZXF1ZW5jZVByb3Bl
cnRpZXMoZXhlYywgcmVzdWx0KTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckNvbXBpbGF0
aW9uLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw0MiArOTQs
NDIgQEAgSlNWYWx1ZSBDb21waWxhdGlvbjo6dG9KUyhFeGVjU3RhdGUqIGV4ZQogewogICAgIEpT
T2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKICAgICAKLSAgICBy
ZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5ieXRlY29kZXNJRCwganNOdW1iZXIobV9ieXRlY29kZXMtPmlkKCkpKTsKLSAgICByZXN1bHQt
PnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb21w
aWxhdGlvbktpbmQsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgodG9DU3RyaW5nKG1f
a2luZCkpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmJ5dGVjb2Rlc0lELCBqc051bWJlcihtX2J5dGVjb2Rlcy0+aWQoKSkpOworICAg
IHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb21w
aWxhdGlvbktpbmQsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgodG9DU3RyaW5nKG1f
a2luZCkpKSk7CiAgICAgCiAgICAgSlNBcnJheSogcHJvZmlsZWRCeXRlY29kZXMgPSBjb25zdHJ1
Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3By
b2ZpbGVkQnl0ZWNvZGVzLnNpemUoKTsgKytpKQogICAgICAgICBwcm9maWxlZEJ5dGVjb2Rlcy0+
cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgbV9wcm9maWxlZEJ5dGVjb2Rlc1tpXS50b0pTKGV4ZWMp
KTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5wcm9maWxlZEJ5dGVjb2RlcywgcHJvZmlsZWRCeXRlY29kZXMpOworICAgIHJl
c3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm9maWxl
ZEJ5dGVjb2RlcywgcHJvZmlsZWRCeXRlY29kZXMpOwogICAgIAogICAgIEpTQXJyYXkqIGRlc2Ny
aXB0aW9ucyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fZGVzY3JpcHRpb25zLnNpemUoKTsgKytpKQogICAgICAgICBkZXNjcmlw
dGlvbnMtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fZGVzY3JpcHRpb25zW2ldLnRvSlMoZXhl
YykpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmRlc2NyaXB0aW9ucywgZGVzY3JpcHRpb25zKTsKKyAgICByZXN1bHQtPnB1
dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZGVzY3JpcHRpb25zLCBk
ZXNjcmlwdGlvbnMpOwogICAgIAogICAgIEpTQXJyYXkqIGNvdW50ZXJzID0gY29uc3RydWN0RW1w
dHlBcnJheShleGVjLCAwKTsKICAgICBIYXNoTWFwPE9yaWdpblN0YWNrLCBPd25QdHI8RXhlY3V0
aW9uQ291bnRlcj4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jb3VudGVycy5lbmQoKTsKICAg
ICBmb3IgKEhhc2hNYXA8T3JpZ2luU3RhY2ssIE93blB0cjxFeGVjdXRpb25Db3VudGVyPiA+Ojpj
b25zdF9pdGVyYXRvciBpdGVyID0gbV9jb3VudGVycy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytp
dGVyKSB7CiAgICAgICAgIEpTT2JqZWN0KiBjb3VudGVyRW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9i
amVjdChleGVjKTsKLSAgICAgICAgY291bnRlckVudHJ5LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkub3JpZ2luLCBpdGVyLT5rZXkudG9KUyhleGVj
KSk7Ci0gICAgICAgIGNvdW50ZXJFbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmV4ZWN1dGlvbkNvdW50LCBqc051bWJlcihpdGVyLT52YWx1
ZS0+Y291bnQoKSkpOworICAgICAgICBjb3VudGVyRW50cnktPnB1dERpcmVjdChleGVjLT52bSgp
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkub3JpZ2luLCBpdGVyLT5rZXkudG9KUyhleGVjKSk7Cisg
ICAgICAgIGNvdW50ZXJFbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5leGVjdXRpb25Db3VudCwganNOdW1iZXIoaXRlci0+dmFsdWUtPmNvdW50KCkpKTsK
ICAgICAgICAgY291bnRlcnMtPnB1c2goZXhlYywgY291bnRlckVudHJ5KTsKICAgICB9Ci0gICAg
cmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuY291bnRlcnMsIGNvdW50ZXJzKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgp
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY291bnRlcnMsIGNvdW50ZXJzKTsKICAgICAKICAgICBK
U0FycmF5KiBleGl0U2l0ZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX29zckV4aXRTaXRlcy5zaXplKCk7ICsraSkKICAgICAg
ICAgZXhpdFNpdGVzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX29zckV4aXRTaXRlc1tpXS50
b0pTKGV4ZWMpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5vc3JFeGl0U2l0ZXMsIGV4aXRTaXRlcyk7CisgICAgcmVzdWx0
LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm9zckV4aXRTaXRl
cywgZXhpdFNpdGVzKTsKICAgICAKICAgICBKU0FycmF5KiBleGl0cyA9IGNvbnN0cnVjdEVtcHR5
QXJyYXkoZXhlYywgMCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb3NyRXhpdHMu
c2l6ZSgpOyArK2kpCiAgICAgICAgIGV4aXRzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX29z
ckV4aXRzW2ldLnRvSlMoZXhlYykpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm9zckV4aXRzLCBleGl0cyk7CisgICAgcmVz
dWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm9zckV4aXRz
LCBleGl0cyk7CiAgICAgCi0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubnVtSW5saW5lZEdldEJ5SWRzLCBqc051bWJlcihtX251
bUlubGluZWRHZXRCeUlkcykpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm51bUlubGluZWRQdXRCeUlkcywganNOdW1iZXIo
bV9udW1JbmxpbmVkUHV0QnlJZHMpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5udW1JbmxpbmVkQ2FsbHMsIGpzTnVtYmVy
KG1fbnVtSW5saW5lZENhbGxzKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLm51bUlubGluZWRHZXRCeUlkcywganNOdW1iZXIobV9udW1J
bmxpbmVkR2V0QnlJZHMpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubnVtSW5saW5lZFB1dEJ5SWRzLCBqc051bWJlcihtX251bUlubGlu
ZWRQdXRCeUlkcykpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5udW1JbmxpbmVkQ2FsbHMsIGpzTnVtYmVyKG1fbnVtSW5saW5lZENhbGxz
KSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wcm9maWxlci9Qcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUu
Y3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIv
UHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYs
OCBAQCBKU1ZhbHVlIENvbXBpbGVkQnl0ZWNvZGU6OnRvSlMoRXhlY1N0YXRlCiB7CiAgICAgSlNP
YmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogICAgIAotICAgIHJl
c3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
Lm9yaWdpbiwgbV9vcmlnaW4udG9KUyhleGVjKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZGVzY3JpcHRpb24sIGpzU3Ry
aW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgobV9kZXNjcmlwdGlvbikpKTsKKyAgICByZXN1bHQt
PnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkub3JpZ2luLCBtX29y
aWdpbi50b0pTKGV4ZWMpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuZGVzY3JpcHRpb24sIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJv
bVVURjgobV9kZXNjcmlwdGlvbikpKTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckRhdGFi
YXNlLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVyRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw5ICs0Miw5IEBA
IHN0YXRpYyBTcGluTG9jayByZWdpc3RyYXRpb25Mb2NrID0gU1BJTkwKIHN0YXRpYyBpbnQgZGlk
UmVnaXN0ZXJBdEV4aXQ7CiBzdGF0aWMgRGF0YWJhc2UqIGZpcnN0RGF0YWJhc2U7CiAKLURhdGFi
YXNlOjpEYXRhYmFzZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitEYXRhYmFzZTo6RGF0YWJh
c2UoVk0mIHZtKQogICAgIDogbV9kYXRhYmFzZUlEKGF0b21pY0luY3JlbWVudCgmZGF0YWJhc2VD
b3VudGVyKSkKLSAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorICAgICwgbV92bSh2bSkK
ICAgICAsIG1fc2hvdWxkU2F2ZUF0RXhpdChmYWxzZSkKICAgICAsIG1fbmV4dFJlZ2lzdGVyZWRE
YXRhYmFzZSgwKQogewpAQCAtOTgsMTIgKzk4LDEyIEBAIEpTVmFsdWUgRGF0YWJhc2U6OnRvSlMo
RXhlY1N0YXRlKiBleGVjKSAKICAgICBKU0FycmF5KiBieXRlY29kZXMgPSBjb25zdHJ1Y3RFbXB0
eUFycmF5KGV4ZWMsIDApOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2J5dGVjb2Rl
cy5zaXplKCk7ICsraSkKICAgICAgICAgYnl0ZWNvZGVzLT5wdXREaXJlY3RJbmRleChleGVjLCBp
LCBtX2J5dGVjb2Rlc1tpXS50b0pTKGV4ZWMpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVj
LT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29kZXMsIGJ5dGVjb2Rl
cyk7CisgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmJ5dGVjb2RlcywgYnl0ZWNvZGVzKTsKICAgICAKICAgICBKU0FycmF5KiBjb21waWxhdGlv
bnMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2NvbXBpbGF0aW9ucy5zaXplKCk7ICsraSkKICAgICAgICAgY29tcGlsYXRpb25z
LT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX2NvbXBpbGF0aW9uc1tpXS0+dG9KUyhleGVjKSk7
Ci0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuY29tcGlsYXRpb25zLCBjb21waWxhdGlvbnMpOworICAgIHJlc3VsdC0+cHV0RGly
ZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb21waWxhdGlvbnMsIGNvbXBp
bGF0aW9ucyk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTExMSw3ICsxMTEsNyBA
QCBKU1ZhbHVlIERhdGFiYXNlOjp0b0pTKEV4ZWNTdGF0ZSogZXhlYykgCiBTdHJpbmcgRGF0YWJh
c2U6OnRvSlNPTigpIGNvbnN0CiB7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IEpTR2xvYmFsT2JqZWN0OjpjcmVhdGUoCi0gICAgICAgIG1fZ2xvYmFsRGF0YSwgSlNHbG9iYWxP
YmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShtX2dsb2JhbERhdGEsIGpzTnVsbCgpKSk7CisgICAgICAg
IG1fdm0sIEpTR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUobV92bSwganNOdWxsKCkpKTsK
ICAgICAKICAgICByZXR1cm4gSlNPTlN0cmluZ2lmeShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSwgdG9KUyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSksIDApOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5oCShyZXZp
c2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJE
YXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgUHJvZmlsZXIgewogY2xhc3MgRGF0YWJhc2UgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOyBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRhYmFzZSk7CiBwdWJsaWM6Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgRGF0YWJhc2UoSlNHbG9iYWxEYXRhJik7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgRGF0YWJhc2UoVk0mKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB+RGF0YWJh
c2UoKTsKICAgICAKICAgICBpbnQgZGF0YWJhc2VJRCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJh
c2VJRDsgfQpAQCAtNzgsNyArNzgsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGF0RXhp
dENhbGxiYWNrKCk7CiAgICAgCiAgICAgaW50IG1fZGF0YWJhc2VJRDsKLSAgICBKU0dsb2JhbERh
dGEmIG1fZ2xvYmFsRGF0YTsKKyAgICBWTSYgbV92bTsKICAgICBTZWdtZW50ZWRWZWN0b3I8Qnl0
ZWNvZGVzPiBtX2J5dGVjb2RlczsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIEJ5dGVjb2Rlcyo+
IG1fYnl0ZWNvZGVzTWFwOwogICAgIFZlY3RvcjxSZWZQdHI8Q29tcGlsYXRpb24+ID4gbV9jb21w
aWxhdGlvbnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJP
U1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIv
UHJvZmlsZXJPU1JFeGl0LmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDExICs0OCwxMSBAQCBPU1JFeGl0Ojp+T1NSRXhpdCgpCiBKU1ZhbHVlIE9TUkV4aXQ6OnRvSlMo
RXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1
Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxE
YXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pZCwganNOdW1iZXIobV9pZCkpOwotICAgIHJl
c3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
Lm9yaWdpbiwgbV9vcmlnaW4udG9KUyhleGVjKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZXhpdEtpbmQsIGpzU3RyaW5n
KGV4ZWMsIGV4aXRLaW5kVG9TdHJpbmcobV9leGl0S2luZCkpKTsKLSAgICByZXN1bHQtPnB1dERp
cmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pc1dhdGNocG9p
bnQsIGpzQm9vbGVhbihtX2lzV2F0Y2hwb2ludCkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvdW50LCBqc051bWJlciht
X2NvdW50ZXIpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuaWQsIGpzTnVtYmVyKG1faWQpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkub3JpZ2luLCBtX29yaWdpbi50b0pTKGV4
ZWMpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuZXhpdEtpbmQsIGpzU3RyaW5nKGV4ZWMsIGV4aXRLaW5kVG9TdHJpbmcobV9leGl0S2lu
ZCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuaXNXYXRjaHBvaW50LCBqc0Jvb2xlYW4obV9pc1dhdGNocG9pbnQpKTsKKyAgICByZXN1
bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY291bnQsIGpz
TnVtYmVyKG1fY291bnRlcikpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9yaWdpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luLmNwcAkocmV2
aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVy
T3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgsOCBAQCB2b2lkIE9yaWdpbjo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zCiBKU1ZhbHVlIE9yaWdpbjo6dG9KUyhFeGVjU3Rh
dGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5
T2JqZWN0KGV4ZWMpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVjb2Rlc0lELCBqc051bWJlcihtX2J5dGVjb2Rlcy0+
aWQoKSkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmJ5dGVjb2RlSW5kZXgsIGpzTnVtYmVyKG1fYnl0ZWNvZGVJbmRleCkp
OworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5ieXRlY29kZXNJRCwganNOdW1iZXIobV9ieXRlY29kZXMtPmlkKCkpKTsKKyAgICByZXN1bHQt
PnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZWNvZGVJbmRl
eCwganNOdW1iZXIobV9ieXRlY29kZUluZGV4KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyUHJvZmlsZWRCeXRl
Y29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Q
cm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIEpTVmFsdWUgUHJvZmlsZWRCeXRlY29kZXM6
OnRvSlMoRXhlY1N0YXQKIHsKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlP
YmplY3QoZXhlYyk7CiAgICAgCi0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZWNvZGVzSUQsIGpzTnVtYmVyKG1fYnl0ZWNv
ZGVzLT5pZCgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmJ5dGVjb2Rlc0lELCBqc051bWJlcihtX2J5dGVjb2Rlcy0+aWQoKSkpOwog
ICAgIGFkZFNlcXVlbmNlUHJvcGVydGllcyhleGVjLCByZXN1bHQpOwogICAgIAogICAgIHJldHVy
biByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCShy
ZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgY2xhc3MgU2xvdFZpc2l0b3I7CiAK
IGNsYXNzIE1hcmtlZEFyZ3VtZW50QnVmZmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShN
YXJrZWRBcmd1bWVudEJ1ZmZlcik7Ci0gICAgZnJpZW5kIGNsYXNzIEpTR2xvYmFsRGF0YTsKKyAg
ICBmcmllbmQgY2xhc3MgVk07CiAgICAgZnJpZW5kIGNsYXNzIEFyZ0xpc3Q7CiAKIHByaXZhdGU6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAJKHJl
dmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OCw3ICsxOTgsNyBAQCB2b2lkIEFyZ3VtZW50czo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iCiB2b2lkIEFyZ3VtZW50czo6cHV0QnlJbmRleChKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9v
bCBzaG91bGRUaHJvdykKIHsKICAgICBBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8QXJn
dW1lbnRzKj4oY2VsbCk7Ci0gICAgaWYgKHRoaXNPYmplY3QtPnRyeVNldEFyZ3VtZW50KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgaSwgdmFsdWUpKQorICAgIGlmICh0aGlzT2JqZWN0LT50cnlTZXRBcmd1
bWVudChleGVjLT52bSgpLCBpLCB2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFB1dFBy
b3BlcnR5U2xvdCBzbG90KHNob3VsZFRocm93KTsKQEAgLTIwOSwxOSArMjA5LDE5IEBAIHZvaWQg
QXJndW1lbnRzOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3QKIHsKICAgICBBcmd1bWVudHMqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8QXJndW1lbnRzKj4oY2VsbCk7CiAgICAgdW5zaWduZWQgaSA9IHBy
b3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKHRoaXNPYmplY3QtPnRyeVNldEFyZ3VtZW50
KGV4ZWMtPmdsb2JhbERhdGEoKSwgaSwgdmFsdWUpKQorICAgIGlmICh0aGlzT2JqZWN0LT50cnlT
ZXRBcmd1bWVudChleGVjLT52bSgpLCBpLCB2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCAmJiAhdGhp
c09iamVjdC0+bV9vdmVycm9kZUxlbmd0aCkgewogICAgICAgICB0aGlzT2JqZWN0LT5tX292ZXJy
b2RlTGVuZ3RoID0gdHJ1ZTsKLSAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPmds
b2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgRG9udEVudW0pOworICAgICAgICB0aGlz
T2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgRG9udEVu
dW0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVlICYmICF0aGlzT2JqZWN0LT5tX292ZXJyb2RlQ2Fs
bGVlKSB7CiAgICAgICAgIGlmICghdGhpc09iamVjdC0+bV9pc1N0cmljdE1vZGUpIHsKICAgICAg
ICAgICAgIHRoaXNPYmplY3QtPm1fb3ZlcnJvZGVDYWxsZWUgPSB0cnVlOwotICAgICAgICAgICAg
dGhpc09iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgRG9udEVudW0pOworICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0KGV4ZWMt
PnZtKCksIHByb3BlcnR5TmFtZSwgdmFsdWUsIERvbnRFbnVtKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICB0aGlzT2JqZWN0LT5jcmVhdGVTdHJpY3RNb2RlQ2FsbGVl
SWZOZWNlc3NhcnkoZXhlYyk7CkBAIC0yNDcsNyArMjQ3LDcgQEAgYm9vbCBBcmd1bWVudHM6OmRl
bGV0ZVByb3BlcnR5QnlJbmRleChKUwogCiBib29sIEFyZ3VtZW50czo6ZGVsZXRlUHJvcGVydHko
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUp
IAogewotICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCkuaXNJbkRlZmluZU93blByb3BlcnR5KCkp
CisgICAgaWYgKGV4ZWMtPnZtKCkuaXNJbkRlZmluZU93blByb3BlcnR5KCkpCiAgICAgICAgIHJl
dHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eShjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogCiAg
ICAgQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PEFyZ3VtZW50cyo+KGNlbGwpOwpAQCAt
MzA2LDcgKzMwNiw3IEBAIGJvb2wgQXJndW1lbnRzOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamUK
ICAgICAgICAgICAgICAgICAvLyBpLiBJZiBEZXNjLltbVmFsdWVdXSBpcyBwcmVzZW50LCB0aGVu
CiAgICAgICAgICAgICAgICAgLy8gMS4gQ2FsbCB0aGUgW1tQdXRdXSBpbnRlcm5hbCBtZXRob2Qg
b2YgbWFwIHBhc3NpbmcgUCwgRGVzYy5bW1ZhbHVlXV0sIGFuZCBUaHJvdyBhcyB0aGUgYXJndW1l
bnRzLgogICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkpCi0gICAgICAgICAg
ICAgICAgICAgIHRoaXNPYmplY3QtPnRyeVNldEFyZ3VtZW50KGV4ZWMtPmdsb2JhbERhdGEoKSwg
aSwgZGVzY3JpcHRvci52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+
dHJ5U2V0QXJndW1lbnQoZXhlYy0+dm0oKSwgaSwgZGVzY3JpcHRvci52YWx1ZSgpKTsKICAgICAg
ICAgICAgICAgICAvLyBpaS4gSWYgRGVzYy5bW1dyaXRhYmxlXV0gaXMgcHJlc2VudCBhbmQgaXRz
IHZhbHVlIGlzIGZhbHNlLCB0aGVuCiAgICAgICAgICAgICAgICAgLy8gMS4gQ2FsbCB0aGUgW1tE
ZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qgb2YgbWFwIHBhc3NpbmcgUCBhbmQgZmFsc2UgYXMgYXJn
dW1lbnRzLgogICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLndyaXRhYmxlUHJlc2VudCgp
ICYmICFkZXNjcmlwdG9yLndyaXRhYmxlKCkpCkBAIC0zMTcsMTAgKzMxNywxMCBAQCBib29sIEFy
Z3VtZW50czo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplCiAgICAgfQogCiAgICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoICYmICF0aGlzT2JqZWN0LT5t
X292ZXJyb2RlTGVuZ3RoKSB7Ci0gICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdChleGVjLT5n
bG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwganNOdW1iZXIodGhpc09iamVjdC0+bV9udW1Bcmd1
bWVudHMpLCBEb250RW51bSk7CisgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdChleGVjLT52
bSgpLCBwcm9wZXJ0eU5hbWUsIGpzTnVtYmVyKHRoaXNPYmplY3QtPm1fbnVtQXJndW1lbnRzKSwg
RG9udEVudW0pOwogICAgICAgICB0aGlzT2JqZWN0LT5tX292ZXJyb2RlTGVuZ3RoID0gdHJ1ZTsK
ICAgICB9IGVsc2UgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2Fs
bGVlICYmICF0aGlzT2JqZWN0LT5tX292ZXJyb2RlQ2FsbGVlKSB7Ci0gICAgICAgIHRoaXNPYmpl
Y3QtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdGhpc09iamVj
dC0+bV9jYWxsZWUuZ2V0KCksIERvbnRFbnVtKTsKKyAgICAgICAgdGhpc09iamVjdC0+cHV0RGly
ZWN0KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+bV9jYWxsZWUuZ2V0KCks
IERvbnRFbnVtKTsKICAgICAgICAgdGhpc09iamVjdC0+bV9vdmVycm9kZUNhbGxlZSA9IHRydWU7
CiAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmNh
bGxlciAmJiB0aGlzT2JqZWN0LT5tX2lzU3RyaWN0TW9kZSkKICAgICAgICAgdGhpc09iamVjdC0+
Y3JlYXRlU3RyaWN0TW9kZUNhbGxlcklmTmVjZXNzYXJ5KGV4ZWMpOwpAQCAtMzU2LDEyICszNTYs
MTIgQEAgdm9pZCBBcmd1bWVudHM6OnRlYXJPZmYoQ2FsbEZyYW1lKiBjYWxsRgogCiAgICAgaWYg
KCFjYWxsRnJhbWUtPmlzSW5saW5lQ2FsbEZyYW1lKCkpIHsKICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX251bUFyZ3VtZW50czsgKytpKQotICAgICAgICAgICAgdHJ5U2V0QXJndW1l
bnQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGksIGNhbGxGcmFtZS0+YXJndW1lbnRBZnRlckNh
cHR1cmUoaSkpOworICAgICAgICAgICAgdHJ5U2V0QXJndW1lbnQoY2FsbEZyYW1lLT52bSgpLCBp
LCBjYWxsRnJhbWUtPmFyZ3VtZW50QWZ0ZXJDYXB0dXJlKGkpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIHRlYXJPZmZGb3JJbmxpbmVDYWxsRnJhbWUoCi0gICAgICAgIGNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPnJlZ2lzdGVycygpLCBjYWxsRnJhbWUtPmlubGlu
ZUNhbGxGcmFtZSgpKTsKKyAgICAgICAgY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUtPnJlZ2lz
dGVycygpLCBjYWxsRnJhbWUtPmlubGluZUNhbGxGcmFtZSgpKTsKIH0KIAogdm9pZCBBcmd1bWVu
dHM6OmRpZFRlYXJPZmZBY3RpdmF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNBY3RpdmF0aW9uKiBh
Y3RpdmF0aW9uKQpAQCAtMzczLDcgKzM3Myw3IEBAIHZvaWQgQXJndW1lbnRzOjpkaWRUZWFyT2Zm
QWN0aXZhdGlvbihFeGUKICAgICBpZiAoIW1fbnVtQXJndW1lbnRzKQogICAgICAgICByZXR1cm47
CiAgICAgCi0gICAgbV9hY3RpdmF0aW9uLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGFj
dGl2YXRpb24pOworICAgIG1fYWN0aXZhdGlvbi5zZXQoZXhlYy0+dm0oKSwgdGhpcywgYWN0aXZh
dGlvbik7CiAgICAgdGVhck9mZihleGVjKTsKIH0KIApAQCAtMzg5LDExICszODksMTEgQEAgdm9p
ZCBBcmd1bWVudHM6OnRlYXJPZmYoQ2FsbEZyYW1lKiBjYWxsRgogICAgIG1fcmVnaXN0ZXJzID0g
bV9yZWdpc3RlckFycmF5LmdldCgpICsgQ2FsbEZyYW1lOjpvZmZzZXRGb3IobV9udW1Bcmd1bWVu
dHMgKyAxKTsKIAogICAgIHRlYXJPZmZGb3JJbmxpbmVDYWxsRnJhbWUoCi0gICAgICAgIGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCwKKyAgICAgICAgY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUtPnJl
Z2lzdGVycygpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCwKICAgICAgICAgaW5saW5l
Q2FsbEZyYW1lKTsKIH0KIAotdm9pZCBBcmd1bWVudHM6OnRlYXJPZmZGb3JJbmxpbmVDYWxsRnJh
bWUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBSZWdpc3RlciogcmVnaXN0ZXJzLCBJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKK3ZvaWQgQXJndW1lbnRzOjp0ZWFyT2ZmRm9ySW5s
aW5lQ2FsbEZyYW1lKFZNJiB2bSwgUmVnaXN0ZXIqIHJlZ2lzdGVycywgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX251bUFy
Z3VtZW50czsgKytpKSB7CiAgICAgICAgIFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudHNbaSArIDFdOwpAQCAtNDMxLDcgKzQzMSw3IEBAIHZvaWQgQXJn
dW1lbnRzOjp0ZWFyT2ZmRm9ySW5saW5lQ2FsbEZyYW0KICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICB0cnlTZXRBcmd1bWVudChnbG9iYWxEYXRhLCBpLCB2YWx1ZSk7CisgICAgICAgIHRyeVNldEFy
Z3VtZW50KHZtLCBpLCB2YWx1ZSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE2
ICs0MCwxNiBAQCBjbGFzcyBBcmd1bWVudHMgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPCiBwdWJs
aWM6CiAgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGlj
IEFyZ3VtZW50cyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCisgICAgc3RhdGljIEFyZ3VtZW50cyogY3JlYXRlKFZNJiB2bSwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiAgICAgewotICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4oZ2xvYmFsRGF0YS5oZWFwKSkgQXJndW1l
bnRzKGNhbGxGcmFtZSk7CisgICAgICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8QXJndW1lbnRzPih2bS5oZWFwKSkgQXJndW1lbnRzKGNhbGxGcmFt
ZSk7CiAgICAgICAgIGFyZ3VtZW50cy0+ZmluaXNoQ3JlYXRpb24oY2FsbEZyYW1lKTsKICAgICAg
ICAgcmV0dXJuIGFyZ3VtZW50czsKICAgICB9CiAgICAgICAgIAotICAgIHN0YXRpYyBBcmd1bWVu
dHMqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIENhbGxGcmFtZSogY2FsbEZyYW1l
LCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICBzdGF0aWMgQXJndW1lbnRz
KiBjcmVhdGUoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUpCiAgICAgewotICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4oZ2xvYmFsRGF0YS5oZWFwKSkgQXJn
dW1lbnRzKGNhbGxGcmFtZSk7CisgICAgICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8QXJndW1lbnRzPih2bS5oZWFwKSkgQXJndW1lbnRzKGNhbGxG
cmFtZSk7CiAgICAgICAgIGFyZ3VtZW50cy0+ZmluaXNoQ3JlYXRpb24oY2FsbEZyYW1lLCBpbmxp
bmVDYWxsRnJhbWUpOwogICAgICAgICByZXR1cm4gYXJndW1lbnRzOwogICAgIH0KQEAgLTYyLDcg
KzYyLDcgQEAgcHJpdmF0ZToKICAgICBBcmd1bWVudHMoQ2FsbEZyYW1lKik7CiAgICAgQXJndW1l
bnRzKENhbGxGcmFtZSosIE5vUGFyYW1ldGVyc1R5cGUpOwogICAgICAgICAKLSAgICB2b2lkIHRl
YXJPZmZGb3JJbmxpbmVDYWxsRnJhbWUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBSZWdpc3Rl
ciosIElubGluZUNhbGxGcmFtZSopOworICAgIHZvaWQgdGVhck9mZkZvcklubGluZUNhbGxGcmFt
ZShWTSYgdm0sIFJlZ2lzdGVyKiwgSW5saW5lQ2FsbEZyYW1lKik7CiAKIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKQEAgLTg0LDkgKzg0LDkgQEAgcHVibGljOgog
ICAgIGJvb2wgaXNUb3JuT2ZmKCkgY29uc3QgeyByZXR1cm4gbV9yZWdpc3RlckFycmF5OyB9CiAg
ICAgdm9pZCBkaWRUZWFyT2ZmQWN0aXZhdGlvbihFeGVjU3RhdGUqLCBKU0FjdGl2YXRpb24qKTsK
IAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KSAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCiAgICAgeyAKLSAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAK
KyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCiAg
ICAgfQogICAgICAgICAKIHByb3RlY3RlZDoKQEAgLTExMCw3ICsxMTAsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgY3JlYXRlU3RyaWN0TW9kZUNhbGxlZUlmTmVjZXNzYXJ5KEV4ZWNTdGF0ZSopOwog
CiAgICAgYm9vbCBpc0FyZ3VtZW50KHNpemVfdCk7Ci0gICAgYm9vbCB0cnlTZXRBcmd1bWVudChK
U0dsb2JhbERhdGEmLCBzaXplX3QgYXJndW1lbnQsIEpTVmFsdWUpOworICAgIGJvb2wgdHJ5U2V0
QXJndW1lbnQoVk0mLCBzaXplX3QgYXJndW1lbnQsIEpTVmFsdWUpOwogICAgIEpTVmFsdWUgdHJ5
R2V0QXJndW1lbnQoc2l6ZV90IGFyZ3VtZW50KTsKICAgICBib29sIGlzRGVsZXRlZEFyZ3VtZW50
KHNpemVfdCk7CiAgICAgYm9vbCB0cnlEZWxldGVBcmd1bWVudChzaXplX3QpOwpAQCAtMTQ4LDEy
ICsxNDgsMTIgQEAgaW5saW5lIEFyZ3VtZW50cyogYXNBcmd1bWVudHMoSlNWYWx1ZSB2YQogfQog
CiBpbmxpbmUgQXJndW1lbnRzOjpBcmd1bWVudHMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi0gICAg
OiBKU0Rlc3RydWN0aWJsZU9iamVjdChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1l
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFyZ3VtZW50c1N0cnVjdHVyZSgpKQorICAgIDogSlNE
ZXN0cnVjdGlibGVPYmplY3QoY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+YXJndW1lbnRzU3RydWN0dXJlKCkpCiB7CiB9CiAKIGlubGluZSBBcmd1bWVu
dHM6OkFyZ3VtZW50cyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgTm9QYXJhbWV0ZXJzVHlwZSkKLSAg
ICA6IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJh
bWUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJndW1lbnRzU3RydWN0dXJlKCkpCisgICAgOiBK
U0Rlc3RydWN0aWJsZU9iamVjdChjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5hcmd1bWVudHNTdHJ1Y3R1cmUoKSkKIHsKIH0KIApAQCAtMTc3LDExICsx
NzcsMTEgQEAgaW5saW5lIGJvb2wgQXJndW1lbnRzOjp0cnlEZWxldGVBcmd1bWVudAogICAgIHJl
dHVybiB0cnVlOwogfQogCi1pbmxpbmUgYm9vbCBBcmd1bWVudHM6OnRyeVNldEFyZ3VtZW50KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IGFyZ3VtZW50LCBKU1ZhbHVlIHZhbHVlKQor
aW5saW5lIGJvb2wgQXJndW1lbnRzOjp0cnlTZXRBcmd1bWVudChWTSYgdm0sIHNpemVfdCBhcmd1
bWVudCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAoIWlzQXJndW1lbnQoYXJndW1lbnQpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdGhpcy0+YXJndW1lbnQoYXJndW1lbnQpLnNldChn
bG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgdGhpcy0+YXJndW1lbnQoYXJndW1lbnQpLnNl
dCh2bSwgdGhpcywgdmFsdWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMjcsMTMgKzIy
NywxMyBAQCBpbmxpbmUgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYgQXJndW1lCiAKIGlubGlu
ZSB2b2lkIEFyZ3VtZW50czo6ZmluaXNoQ3JlYXRpb24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7
Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOworICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKGNhbGxGcmFtZS0+dm0oKSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKCZzX2luZm8pKTsKIAogICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0
aW9uKj4oY2FsbEZyYW1lLT5jYWxsZWUoKSk7CiAgICAgbV9udW1Bcmd1bWVudHMgPSBjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKTsKICAgICBtX3JlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPio+KGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpOwotICAg
IG1fY2FsbGVlLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgdGhpcywgY2FsbGVlKTsKKyAg
ICBtX2NhbGxlZS5zZXQoY2FsbEZyYW1lLT52bSgpLCB0aGlzLCBjYWxsZWUpOwogICAgIG1fb3Zl
cnJvZGVMZW5ndGggPSBmYWxzZTsKICAgICBtX292ZXJyb2RlQ2FsbGVlID0gZmFsc2U7CiAgICAg
bV9vdmVycm9kZUNhbGxlciA9IGZhbHNlOwpAQCAtMjU2LDEzICsyNTYsMTMgQEAgaW5saW5lIHZv
aWQgQXJndW1lbnRzOjpmaW5pc2hDcmVhdGlvbihDYQogCiBpbmxpbmUgdm9pZCBBcmd1bWVudHM6
OmZpbmlzaENyZWF0aW9uKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihjYWxsRnJhbWUtPmds
b2JhbERhdGEoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oY2FsbEZyYW1lLT52bSgpKTsK
ICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogCiAgICAgSlNGdW5jdGlvbiogY2FsbGVl
ID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVGb3JDYWxsRnJhbWUoY2FsbEZyYW1lKTsKICAgICBt
X251bUFyZ3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDE7CiAg
ICAgbV9yZWdpc3RlcnMgPSByZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllckJhc2U8VW5rbm93
bj4qPihjYWxsRnJhbWUtPnJlZ2lzdGVycygpKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQ7Ci0gICAgbV9jYWxsZWUuc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBjYWxs
ZWUpOworICAgIG1fY2FsbGVlLnNldChjYWxsRnJhbWUtPnZtKCksIHRoaXMsIGNhbGxlZSk7CiAg
ICAgbV9vdmVycm9kZUxlbmd0aCA9IGZhbHNlOwogICAgIG1fb3ZlcnJvZGVDYWxsZWUgPSBmYWxz
ZTsKICAgICBtX292ZXJyb2RlQ2FsbGVyID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTQ4
NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDkgKzYxLDkgQEAgQXJyYXlDb25zdHJ1Y3Rvcjo6QXJy
YXlDb25zdHJ1Y3RvcihKU0dsbwogCiB2b2lkIEFycmF5Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlQcm90b3R5cGUqIGFycmF5UHJvdG90eXBlKQogewot
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXlQcm90b3R5
cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwg
YXJyYXlQcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEpLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9u
dERlbGV0ZSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwgYXJyYXlQcm90
b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIGFycmF5
UHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCwganNOdW1iZXIoMSksIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKIH0K
IAogYm9vbCBBcnJheUNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCAmc2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3Ry
dWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsOSArNDIs
OSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogcHJv
dGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsMTYgKzEy
NCwxNiBAQCBBcnJheVByb3RvdHlwZSogQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShFCiAKIC8vIEVD
TUEgMTUuNC40CiBBcnJheVByb3RvdHlwZTo6QXJyYXlQcm90b3R5cGUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBKU0FycmF5KGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIDApCisgICAgOiBKU0FycmF5KGdsb2Jh
bE9iamVjdC0+dm0oKSwgc3RydWN0dXJlLCAwKQogewogfQogCiB2b2lkIEFycmF5UHJvdG90eXBl
OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpOwotICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGlu
aGVyaXRzKCZzX2luZm8pKTsKLSAgICBnbG9iYWxEYXRhLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5
cGUodGhpcyk7CisgICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3RvdHlwZSh0aGlzKTsKIH0KIAog
Ym9vbCBBcnJheVByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCkBAIC03MzksNyArNzM5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRgogICAgICAgICByZXR1cm4gcGVyZm9ybVNsb3dTb3J0KGV4ZWMsIHRoaXNPYmosIGxl
bmd0aCwgZnVuY3Rpb24sIGNhbGxEYXRhLCBjYWxsVHlwZSkgPyBKU1ZhbHVlOjplbmNvZGUodGhp
c09iaikgOiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgCiAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTR2xvYmFsT2JqZWN0OjpjcmVhdGUoCi0gICAgICAg
IGV4ZWMtPmdsb2JhbERhdGEoKSwgSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT5nbG9iYWxEYXRhKCksIGpzTnVsbCgpKSk7CisgICAgICAgIGV4ZWMtPnZtKCksIEpTR2xvYmFs
T2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwganNOdWxsKCkpKTsKICAgICBKU0Fy
cmF5KiBmbGF0QXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpLCAwKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC04MTgsMTcgKzgxOCwxNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICBkZWxl
dGVDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZWxldGVEb3VibGUpOwogICAgIH0KIAot
ICAgIEpTQXJyYXkqIHJlc09iaiA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5U3RydWN0
dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhVbmRlY2lkZWQpLCBk
ZWxldGVDb3VudCk7CisgICAgSlNBcnJheSogcmVzT2JqID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZChleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5
U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhVbmRlY2lk
ZWQpLCBkZWxldGVDb3VudCk7CiAgICAgaWYgKCFyZXNPYmopCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKIAogICAgIEpTVmFsdWUg
cmVzdWx0ID0gcmVzT2JqOwotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmds
b2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGZvciAodW5zaWduZWQg
ayA9IDA7IGsgPCBkZWxldGVDb3VudDsgaysrKSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGdldFBy
b3BlcnR5KGV4ZWMsIHRoaXNPYmosIGsgKyBiZWdpbik7CiAgICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7Ci0gICAgICAgIHJlc09iai0+aW5pdGlhbGl6ZUluZGV4KGdsb2JhbERhdGEsIGssIHYp
OworICAgICAgICByZXNPYmotPmluaXRpYWxpemVJbmRleCh2bSwgaywgdik7CiAgICAgfQogCiAg
ICAgdW5zaWduZWQgYWRkaXRpb25hbEFyZ3MgPSBzdGQ6Om1heDxpbnQ+KGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSAtIDIsIDApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheVByb3RvdHlwZS5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0
MCw5IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0g
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywgQXJyYXlDbGFz
cyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywg
QXJyYXlDbGFzcyk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9CYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVy
LmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jh
dGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplciB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIpOwogcHVi
bGljOgotICAgIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNPYmplY3QqIG9iamVjdCkKLSAgICAgICAgOiBtX2dsb2JhbERhdGEoJmdsb2JhbERh
dGEpCisgICAgQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIoVk0mIHZtLCBKU09iamVjdCogb2Jq
ZWN0KQorICAgICAgICA6IG1fdm0oJnZtKQogICAgICAgICAsIG1fb2JqZWN0KG9iamVjdCkKICAg
ICB7CiAgICAgfQpAQCAtNDMsMTEgKzQzLDExIEBAIHB1YmxpYzoKICAgICB+QmF0Y2hlZFRyYW5z
aXRpb25PcHRpbWl6ZXIoKQogICAgIHsKICAgICAgICAgaWYgKG1fb2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICBtX29iamVjdC0+ZmxhdHRlbkRpY3Rpb25h
cnlPYmplY3QoKm1fZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBtX29iamVjdC0+ZmxhdHRlbkRp
Y3Rpb25hcnlPYmplY3QoKm1fdm0pOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBKU0dsb2JhbERh
dGEqIG1fZ2xvYmFsRGF0YTsKKyAgICBWTSogbV92bTsKICAgICBKU09iamVjdCogbV9vYmplY3Q7
CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jv
b2xlYW5Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDE4ICszOCwxOCBAQCBCb29sZWFuQ29uc3RydWN0b3I6OkJvb2xlYW5Db25zdHJ1Y3RvcihK
CiAKIHZvaWQgQm9vbGVhbkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEJvb2xlYW5Qcm90b3R5cGUqIGJvb2xlYW5Qcm90b3R5cGUpCiB7Ci0gICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBib29sZWFuUHJvdG90eXBlLT5jbGFzc0lu
Zm8oKS0+Y2xhc3NOYW1lKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5n
bG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIGJvb2xlYW5Qcm90
b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihleGVjLT52bSgpLCBib29sZWFuUHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xh
c3NOYW1lKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBib29sZWFuUHJvdG90eXBlLCBEb250RW51bSB8
IERvbnREZWxldGUgfCBSZWFkT25seSk7CiAKICAgICAvLyBuby4gb2YgYXJndW1lbnRzIGZvciBj
b25zdHJ1Y3RvcgotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERh
dGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSksIFJlYWRPbmx5
IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigxKSwg
UmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCiAvLyBFQ01BIDE1LjYuMgog
SlNPYmplY3QqIGNvbnN0cnVjdEJvb2xlYW4oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogewotICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0
ZShleGVjLT5nbG9iYWxEYXRhKCksIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSkt
Pmdsb2JhbE9iamVjdCgpLT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOwotICAgIG9iai0+c2V0
SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIGpzQm9vbGVhbihhcmdzLmF0KDApLnRv
Qm9vbGVhbihleGVjKSkpOworICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IEJvb2xlYW5PYmplY3Q6
OmNyZWF0ZShleGVjLT52bSgpLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5n
bG9iYWxPYmplY3QoKS0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICBvYmotPnNldElu
dGVybmFsVmFsdWUoZXhlYy0+dm0oKSwganNCb29sZWFuKGFyZ3MuYXQoMCkudG9Cb29sZWFuKGV4
ZWMpKSk7CiAgICAgcmV0dXJuIG9iajsKIH0KIApAQCAtNzksOCArNzksOCBAQCBDYWxsVHlwZSBC
b29sZWFuQ29uc3RydWN0b3I6OmdldENhbGxEYXRhCiAKIEpTT2JqZWN0KiBjb25zdHJ1Y3RCb29s
ZWFuRnJvbUltbWVkaWF0ZUJvb2xlYW4oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGltbWVkaWF0ZUJvb2xlYW5WYWx1ZSkKIHsKLSAgICBCb29s
ZWFuT2JqZWN0KiBvYmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBnbG9iYWxPYmplY3QtPmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7Ci0gICAgb2JqLT5zZXRJ
bnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgaW1tZWRpYXRlQm9vbGVhblZhbHVlKTsK
KyAgICBCb29sZWFuT2JqZWN0KiBvYmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0o
KSwgZ2xvYmFsT2JqZWN0LT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOworICAgIG9iai0+c2V0
SW50ZXJuYWxWYWx1ZShleGVjLT52bSgpLCBpbW1lZGlhdGVCb29sZWFuVmFsdWUpOwogICAgIHJl
dHVybiBvYmo7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xl
YW5Db25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtNDAsOSArNDAsOSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNf
aW5mbzsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKSAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCiAgICAgeyAK
LSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOyAKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsgCiAgICAgfQogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Cb29sZWFuT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Cb29sZWFuT2JqZWN0LmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDE0ICszMCwxNCBAQCBBU1NFUlRfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUihCb29sZWFu
T2JqCiAKIGNvbnN0IENsYXNzSW5mbyBCb29sZWFuT2JqZWN0OjpzX2luZm8gPSB7ICJCb29sZWFu
IiwgJkpTV3JhcHBlck9iamVjdDo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEJv
b2xlYW5PYmplY3QpIH07CiAKLUJvb2xlYW5PYmplY3Q6OkJvb2xlYW5PYmplY3QoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IEpTV3JhcHBlck9i
amVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCitCb29sZWFuT2JqZWN0OjpCb29sZWFuT2JqZWN0
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBKU1dyYXBwZXJPYmplY3Qodm0s
IHN0cnVjdHVyZSkKIHsKIH0KIAotdm9pZCBCb29sZWFuT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEJvb2xlYW5PYmplY3Q6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8p
KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbk9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5P
YmplY3QuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQm9vbGVhbk9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywyNCArMjcsMjQgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEJvb2xlYW5PYmplY3QgOiBwdWJsaWMgSlNXcmFwcGVyT2Jq
ZWN0IHsKIHByb3RlY3RlZDoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBCb29sZWFuT2JqZWN0KEpT
R2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQm9vbGVh
bk9iamVjdChWTSYsIFN0cnVjdHVyZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mKTsKIAogcHVibGljOgogICAgIHR5cGVkZWYgSlNXcmFwcGVyT2JqZWN0
IEJhc2U7CiAKLSAgICBzdGF0aWMgQm9vbGVhbk9iamVjdCogY3JlYXRlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgc3RhdGljIEJvb2xlYW5PYmpl
Y3QqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAg
Qm9vbGVhbk9iamVjdCogYm9vbGVhbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEJvb2xl
YW5PYmplY3Q+KGdsb2JhbERhdGEuaGVhcCkpIEJvb2xlYW5PYmplY3QoZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlKTsKLSAgICAgICAgYm9vbGVhbi0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Cisg
ICAgICAgIEJvb2xlYW5PYmplY3QqIGJvb2xlYW4gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxCb29sZWFuT2JqZWN0Pih2bS5oZWFwKSkgQm9vbGVhbk9iamVjdCh2bSwgc3RydWN0dXJlKTsK
KyAgICAgICAgYm9vbGVhbi0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1cm4gYm9v
bGVhbjsKICAgICB9CiAgICAgICAgIAogICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENs
YXNzSW5mbyBzX2luZm87CiAgICAgICAgIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8pOwogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxNDg2Mzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTEsMTQgKzUxLDE0IEBAIGNvbnN0IENsYXNzSW5mbyBCb29sZWFu
UHJvdG90eXBlOjpzX2luZm8KIEFTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKEJvb2xlYW5Q
cm90b3R5cGUpOwogCiBCb29sZWFuUHJvdG90eXBlOjpCb29sZWFuUHJvdG90eXBlKEV4ZWNTdGF0
ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBCb29sZWFuT2JqZWN0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKQorICAgIDogQm9vbGVhbk9iamVjdChleGVjLT52bSgp
LCBzdHJ1Y3R1cmUpCiB7CiB9CiAKIHZvaWQgQm9vbGVhblByb3RvdHlwZTo6ZmluaXNoQ3JlYXRp
b24oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCopCiB7Ci0gICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBzZXRJbnRlcm5hbFZhbHVlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwganNCb29sZWFuKGZhbHNlKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZXhlYy0+dm0oKSk7CisgICAgc2V0SW50ZXJuYWxWYWx1ZShleGVjLT52bSgpLCBqc0Jvb2xl
YW4oZmFsc2UpKTsKIAogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiB9CkBAIC03Nywy
MiArNzcsMjIgQEAgYm9vbCBCb29sZWFuUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlcwogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xlYW5Qcm90b0Z1bmNUb1N0cmluZyhFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmds
b2JhbERhdGEoKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlID09IGpzQm9v
bGVhbihmYWxzZSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZ2xvYmFsRGF0YS0+
c21hbGxTdHJpbmdzLmZhbHNlU3RyaW5nKCkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHZtLT5zbWFsbFN0cmluZ3MuZmFsc2VTdHJpbmcoKSk7CiAKICAgICBpZiAodGhpc1ZhbHVl
ID09IGpzQm9vbGVhbih0cnVlKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShnbG9i
YWxEYXRhLT5zbWFsbFN0cmluZ3MudHJ1ZVN0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh2bS0+c21hbGxTdHJpbmdzLnRydWVTdHJpbmcoKSk7CiAKICAgICBpZiAoIXRo
aXNWYWx1ZS5pbmhlcml0cygmQm9vbGVhbk9iamVjdDo6c19pbmZvKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAKICAgICBpZiAoYXNCb29sZWFuT2JqZWN0KHRoaXNW
YWx1ZSktPmludGVybmFsVmFsdWUoKSA9PSBqc0Jvb2xlYW4oZmFsc2UpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5mYWxzZVN0cmluZygp
KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2bS0+c21hbGxTdHJpbmdzLmZhbHNl
U3RyaW5nKCkpOwogCiAgICAgQVNTRVJUKGFzQm9vbGVhbk9iamVjdCh0aGlzVmFsdWUpLT5pbnRl
cm5hbFZhbHVlKCkgPT0ganNCb29sZWFuKHRydWUpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy50cnVlU3RyaW5nKCkpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodm0tPnNtYWxsU3RyaW5ncy50cnVlU3RyaW5nKCkpOwogfQogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xlYW5Qcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0
ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Qcm90
b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29s
ZWFuUHJvdG90eXBlLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgs
OSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZv
OwogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cisg
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAg
fQogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0
ZXJmbHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0
ZXJmbHkuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQnV0dGVyZmx5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwogY2xhc3MgQ29weVZp
c2l0b3I7CiBzdHJ1Y3QgQXJyYXlTdG9yYWdlOwogCkBAIC0xMDQsMTAgKzEwNCwxMCBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlB1YmxpY0xlbmd0aCgpIHsgcmV0dXJu
IG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlZlY3Rvckxlbmd0aCgp
IHsgcmV0dXJuIG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZz
ZXRPZlZlY3Rvckxlbmd0aCgpOyB9CiAgICAgCi0gICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRl
VW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBw
cm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZVVuaW5pdGlh
bGl6ZWQoVk0mLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBi
b29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMp
OwogCi0gICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBw
cmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFk
ZXIsIGNvbnN0IEluZGV4aW5nSGVhZGVyJiwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKTsKLSAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0
dXJlKik7CisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKFZNJiwgc2l6ZV90IHByZUNhcGFj
aXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgY29u
c3QgSW5kZXhpbmdIZWFkZXImLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwor
ICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOwogICAgIHN0YXRp
YyBCdXR0ZXJmbHkqIGNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKENvcHlWaXNp
dG9yJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBo
YXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKICAg
ICAKICAgICBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGlu
Z0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQpAQCAtMTQ3LDIwICsxNDcsMjAgQEAgcHVibGljOgogICAg
IHZvaWQqIGJhc2Uoc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkg
eyByZXR1cm4gcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5IC0gcHJlQ2FwYWNp
dHk7IH0KICAgICB2b2lkKiBiYXNlKFN0cnVjdHVyZSopOwogCi0gICAgc3RhdGljIEJ1dHRlcmZs
eSogY3JlYXRlT3JHcm93QXJyYXlSaWdodChCdXR0ZXJmbHkqLCBKU0dsb2JhbERhdGEmLCBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFkSW5k
ZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90
IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgCisgICAgc3RhdGljIEJ1dHRlcmZseSog
Y3JlYXRlT3JHcm93QXJyYXlSaWdodChCdXR0ZXJmbHkqLCBWTSYsIFN0cnVjdHVyZSogb2xkU3Ry
dWN0dXJlLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYWRJbmRleGluZ0hlYWRlciwg
c2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3SW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpOyAKIAogICAgIC8vIFRoZSBidXR0ZXJmbHkgcmVhbGxvY2F0aW9u
IG1ldGhvZHMgcGVyZm9ybSB0aGUgcmVhbGxvY2F0aW9uIGl0c2VsZiBidXQgZG8gbm90IGNoYW5n
ZSBhbnkKICAgICAvLyBvZiB0aGUgbWV0YS1kYXRhIHRvIHJlZmxlY3QgdGhhdCB0aGUgcmVhbGxv
Y2F0aW9uIG9jY3VycmVkLiBOb3RlIHRoYXQgdGhpcyBzZXQgb2YKICAgICAvLyBtZXRob2RzIGlz
IG5vdCBleGhhdXN0aXZlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gZW5jYXBzdWxhdGUgYWxsIHBv
c3NpYmxlIGFsbG9jYXRpb24KICAgICAvLyBtb2RlcyBvZiBidXR0ZXJmbGllcyAtIHRoZXJlIGFy
ZSBjb2RlIHBhdGhzIHRoYXQgYWxsb2NhdGUgYnV0dGVyZmxpZXMgYnkgY2FsbGluZwogICAgIC8v
IGRpcmVjdGx5IGludG8gSGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdlLgotICAgIEJ1dHRlcmZseSog
Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNp
emVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3Qg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsK
LSAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgU3RydWN0
dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3
UHJvcGVydHlDYXBhY2l0eSk7Ci0gICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdlKEpT
R2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3UHJvcGVydHlD
YXBhY2l0eSk7Ci0gICAgQnV0dGVyZmx5KiBncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmLCBT
dHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFk
SW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6
ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgLy8gQXNzdW1lcyB0aGF0IHByZUNh
cGFjaXR5IGlzIHplcm8sIGFuZCBhc3NlcnRzIGFzIG11Y2guCi0gICAgQnV0dGVyZmx5KiBncm93
QXJyYXlSaWdodChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBzaXplX3QgbmV3SW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIEJ1dHRlcmZseSogcmVzaXplQXJyYXkoSlNHbG9iYWxE
YXRhJiwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgb2xkSGFzSW5kZXhpbmdIZWFkZXIs
IHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1ByZUNhcGFj
aXR5LCBib29sIG5ld0hhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpOwotICAgIEJ1dHRlcmZseSogcmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiwg
U3RydWN0dXJlKiwgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpOyAvLyBBc3N1bWVzIHRoYXQgeW91J3JlIG5vdCBjaGFuZ2luZyB3aGV0
aGVyIG9yIG5vdCB0aGUgb2JqZWN0IGhhcyBhbiBpbmRleGluZyBoZWFkZXIuCisgICAgQnV0dGVy
Zmx5KiBncm93UHJvcGVydHlTdG9yYWdlKFZNJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qg
b2xkUHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAg
QnV0dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdlKFZNJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmUsIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0
eSk7CisgICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdlKFZNJiwgU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkq
IGdyb3dBcnJheVJpZ2h0KFZNJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBwcm9w
ZXJ0eUNhcGFjaXR5LCBib29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7
IC8vIEFzc3VtZXMgdGhhdCBwcmVDYXBhY2l0eSBpcyB6ZXJvLCBhbmQgYXNzZXJ0cyBhcyBtdWNo
LgorICAgIEJ1dHRlcmZseSogZ3Jvd0FycmF5UmlnaHQoVk0mLCBTdHJ1Y3R1cmUqLCBzaXplX3Qg
bmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIEJ1dHRlcmZseSogcmVzaXplQXJy
YXkoVk0mLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBvbGRIYXNJbmRleGluZ0hlYWRl
ciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJlQ2Fw
YWNpdHksIGJvb2wgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBuZXdJbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyk7CisgICAgQnV0dGVyZmx5KiByZXNpemVBcnJheShWTSYsIFN0cnVjdHVy
ZSosIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKTsgLy8gQXNzdW1lcyB0aGF0IHlvdSdyZSBub3QgY2hhbmdpbmcgd2hldGhlciBvciBu
b3QgdGhlIG9iamVjdCBoYXMgYW4gaW5kZXhpbmcgaGVhZGVyLgogICAgIEJ1dHRlcmZseSogdW5z
aGlmdChTdHJ1Y3R1cmUqLCBzaXplX3QgbnVtYmVyT2ZTbG90cyk7CiAgICAgQnV0dGVyZmx5KiBz
aGlmdChTdHJ1Y3R1cmUqLCBzaXplX3QgbnVtYmVyT2ZTbG90cyk7CiB9OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkocmV2aXNp
b24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwzMiArMzAsMzIgQEAKICNpbmNsdWRlICJCdXR0
ZXJmbHkuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJDb3B5
VmlzaXRvci5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAj
aW5jbHVkZSAiU3RydWN0dXJlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgQnV0dGVy
Zmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhh
c0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCitpbmxp
bmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mIHZtLCBzaXpl
X3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5n
SGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7CiAgICAgdm9pZCog
dGVtcDsKICAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlD
YXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsK
LSAgICBSRUxFQVNFX0FTU0VSVChnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHNp
emUsICZ0ZW1wKSk7CisgICAgUkVMRUFTRV9BU1NFUlQodm0uaGVhcC50cnlBbGxvY2F0ZVN0b3Jh
Z2Uoc2l6ZSwgJnRlbXApKTsKICAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKHRlbXAs
IHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wg
aGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IEluZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwg
c2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoraW5saW5lIEJ1dHRlcmZseSogQnV0
dGVyZmx5OjpjcmVhdGUoVk0mIHZtLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0
eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBjb25zdCBJbmRleGluZ0hlYWRlciYg
aW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKIHsKICAg
ICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoCi0gICAgICAgIGdsb2Jh
bERhdGEsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgICAgICB2bSwgcHJlQ2FwYWNpdHksIHBy
b3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyk7CiAgICAgaWYgKGhhc0luZGV4aW5nSGVhZGVyKQogICAgICAgICAqcmVzdWx0LT5pbmRl
eGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXI7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
aW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6
Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZShnbG9iYWxEYXRhLCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGhhc0luZGV4
aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpLCBJbmRleGluZ0hlYWRlcigpLCAw
KTsKKyAgICByZXR1cm4gY3JlYXRlKHZtLCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCksIGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpLCBJbmRleGlu
Z0hlYWRlcigpLCAwKTsKIH0KIAogaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVV
bmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbihDb3B5VmlzaXRvciYgdmlzaXRvciwgc2l6ZV90
IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hl
YWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQpAQCAtNzIsMTEgKzcyLDEx
IEBAIGlubGluZSB2b2lkKiBCdXR0ZXJmbHk6OmJhc2UoU3RydWN0dXJlKiAKICAgICByZXR1cm4g
YmFzZShpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkpOwogfQogCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6
Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJl
Q2FwYWNpdHksIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVh
ZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0
eUNhcGFjaXR5KQoraW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9y
YWdlKFZNJiB2bSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0
eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChu
ZXdQcm9wZXJ0eUNhcGFjaXR5ID4gb2xkUHJvcGVydHlDYXBhY2l0eSk7CiAgICAgQnV0dGVyZmx5
KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAotICAgICAgICBnbG9iYWxEYXRhLCBwcmVD
YXBhY2l0eSwgbmV3UHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAgICAgdm0sIHByZUNhcGFjaXR5LCBuZXdQcm9wZXJ0
eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMp
OwogICAgIG1lbWNweSgKICAgICAgICAgcmVzdWx0LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIG9sZFBy
b3BlcnR5Q2FwYWNpdHksCiAgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gb2xkUHJvcGVydHlD
YXBhY2l0eSwKQEAgLTg0LDUxICs4NCw1MSBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6
Omdyb3dQcm9wZXJ0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotaW5saW5lIEJ1dHRlcmZseSog
QnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qg
bmV3UHJvcGVydHlDYXBhY2l0eSkKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1By
b3BlcnR5U3RvcmFnZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb2xkUHJv
cGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCiB7CiAgICAgcmV0dXJu
IGdyb3dQcm9wZXJ0eVN0b3JhZ2UoCi0gICAgICAgIGdsb2JhbERhdGEsIGluZGV4aW5nSGVhZGVy
KCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSksIG9sZFByb3BlcnR5Q2FwYWNpdHksCisgICAgICAg
IHZtLCBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBvbGRQcm9wZXJ0
eUNhcGFjaXR5LAogICAgICAgICBoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpKSwKICAgICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMoc3RydWN0dXJlKSwgbmV3UHJvcGVydHlDYXBhY2l0eSk7CiB9CiAKLWlubGluZSBCdXR0
ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0
eSkKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShWTSYg
dm0sIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkK
IHsKICAgICByZXR1cm4gZ3Jvd1Byb3BlcnR5U3RvcmFnZSgKLSAgICAgICAgZ2xvYmFsRGF0YSwg
b2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1Byb3Bl
cnR5Q2FwYWNpdHkpOworICAgICAgICB2bSwgb2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCksIG5ld1Byb3BlcnR5Q2FwYWNpdHkpOwogfQogCi1pbmxpbmUgQnV0
dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoQnV0dGVyZmx5KiBvbGRC
dXR0ZXJmbHksIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXpl
X3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcykKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93
QXJyYXlSaWdodChCdXR0ZXJmbHkqIG9sZEJ1dHRlcmZseSwgVk0mIHZtLCBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFkSW5kZXhpbmdIZWFk
ZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQogewogICAgIGlmICghb2xkQnV0dGVyZmx5KQotICAgICAg
ICByZXR1cm4gY3JlYXRlKGdsb2JhbERhdGEsIDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIElu
ZGV4aW5nSGVhZGVyKCksIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICByZXR1
cm4gb2xkQnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodChnbG9iYWxEYXRhLCBvbGRTdHJ1Y3R1cmUs
IHByb3BlcnR5Q2FwYWNpdHksIGhhZEluZGV4aW5nSGVhZGVyLCBvbGRJbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcywgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgICAgICByZXR1
cm4gY3JlYXRlKHZtLCAwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBJbmRleGluZ0hlYWRlcigp
LCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgcmV0dXJuIG9sZEJ1dHRlcmZs
eS0+Z3Jvd0FycmF5UmlnaHQodm0sIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlDYXBhY2l0eSwgaGFk
SW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBuZXdJbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyk7CiB9CiAKLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6
Z3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFkSW5kZXhpbmdIZWFkZXIs
IHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKQoraW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJy
YXlSaWdodChWTSYgdm0sIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgcHJvcGVydHlD
YXBhY2l0eSwgYm9vbCBoYWRJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7CiAg
ICAgQVNTRVJUX1VOVVNFRChvbGRTdHJ1Y3R1cmUsICFpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBh
Y2l0eShvbGRTdHJ1Y3R1cmUpKTsKICAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVjdHVyZSwgaGFk
SW5kZXhpbmdIZWFkZXIgPT0gaGFzSW5kZXhpbmdIZWFkZXIob2xkU3RydWN0dXJlLT5pbmRleGlu
Z1R5cGUoKSkpOwogICAgIHZvaWQqIHRoZUJhc2UgPSBiYXNlKDAsIHByb3BlcnR5Q2FwYWNpdHkp
OwogICAgIHNpemVfdCBvbGRTaXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIGhh
ZEluZGV4aW5nSGVhZGVyLCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAgc2l6
ZV90IG5ld1NpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgbmV3SW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeVJl
YWxsb2NhdGVTdG9yYWdlKCZ0aGVCYXNlLCBvbGRTaXplLCBuZXdTaXplKSkKKyAgICBpZiAoIXZt
LmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoJnRoZUJhc2UsIG9sZFNpemUsIG5ld1NpemUpKQog
ICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gZnJvbUJhc2UodGhlQmFzZSwgMCwgcHJvcGVy
dHlDYXBhY2l0eSk7CiB9CiAKLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5
UmlnaHQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwg
c2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoraW5saW5lIEJ1dHRlcmZseSog
QnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChWTSYgdm0sIFN0cnVjdHVyZSogb2xkU3RydWN0dXJl
LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7CiAgICAgcmV0dXJuIGdy
b3dBcnJheVJpZ2h0KAotICAgICAgICBnbG9iYWxEYXRhLCBvbGRTdHJ1Y3R1cmUsIG9sZFN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwKKyAgICAgICAgdm0sIG9sZFN0cnVjdHVyZSwgb2xk
U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAogICAgICAgICBoYXNJbmRleGluZ0hlYWRl
cihvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwKICAgICAgICAgaW5kZXhpbmdIZWFkZXIo
KS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMob2xkU3RydWN0dXJlKSwgbmV3SW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpOwogfQogCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJl
c2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNp
dHksIGJvb2wgb2xkSGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBib29sIG5ld0hhc0luZGV4aW5nSGVh
ZGVyLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCitpbmxpbmUgQnV0dGVy
Zmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KFZNJiB2bSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNp
dHksIGJvb2wgb2xkSGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBib29sIG5ld0hhc0luZGV4aW5nSGVh
ZGVyLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7CiAgICAgQnV0dGVy
Zmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAotICAgICAgICBnbG9iYWxEYXRhLCBu
ZXdQcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIG5l
d0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAgICAgdm0sIG5ld1ByZUNhcGFjaXR5
LCBwcm9wZXJ0eUNhcGFjaXR5LCBuZXdIYXNJbmRleGluZ0hlYWRlciwgbmV3SW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpOwogICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIG1hZGUgbXVjaCBt
b3JlIGVmZmljaWVudCBpZiB3ZSB1c2VkIHRoZSBwcm9wZXJ0eSBzaXplLAogICAgIC8vIG5vdCB0
aGUgY2FwYWNpdHkuCiAgICAgdm9pZCogdG8gPSByZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgpIC0g
cHJvcGVydHlDYXBhY2l0eTsKQEAgLTE0MCwxMSArMTQwLDExIEBAIGlubGluZSBCdXR0ZXJmbHkq
IEJ1dHRlcmZseTo6cmVzaXplQXJyYXkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1pbmxpbmUg
QnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5l
d0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoraW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5
OjpyZXNpemVBcnJheShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbmV3UHJl
Q2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKIHsKICAgICBi
b29sIGhhc0luZGV4aW5nSGVhZGVyID0gSlNDOjpoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKTsKICAgICByZXR1cm4gcmVzaXplQXJyYXkoCi0gICAgICAgIGdsb2Jh
bERhdGEsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgaGFzSW5kZXhpbmdIZWFkZXIs
CisgICAgICAgIHZtLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGhhc0luZGV4aW5n
SGVhZGVyLAogICAgICAgICBpbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyhzdHJ1Y3R1cmUpLCBuZXdQcmVDYXBhY2l0eSwKICAgICAgICAgaGFzSW5kZXhpbmdIZWFk
ZXIsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzUsNyArNzUsNyBAQCB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ2FjaGVUeXBlczxVbmxpbmtl
ZEV2CiB9OwogCiB0ZW1wbGF0ZSA8Y2xhc3MgVW5saW5rZWRDb2RlQmxvY2tUeXBlLCBjbGFzcyBF
eGVjdXRhYmxlVHlwZT4KLVVubGlua2VkQ29kZUJsb2NrVHlwZSogQ29kZUNhY2hlOjpnZXRDb2Rl
QmxvY2soSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1Njb3BlKiBzY29wZSwgRXhlY3V0YWJs
ZVR5cGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQYXJzZXJTdHJp
Y3RuZXNzIHN0cmljdG5lc3MsIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9k
ZSBwcm9maWxlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvcikKK1VubGlua2VkQ29kZUJsb2NrVHlw
ZSogQ29kZUNhY2hlOjpnZXRDb2RlQmxvY2soVk0mIHZtLCBKU1Njb3BlKiBzY29wZSwgRXhlY3V0
YWJsZVR5cGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQYXJzZXJT
dHJpY3RuZXNzIHN0cmljdG5lc3MsIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVy
TW9kZSBwcm9maWxlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvcikKIHsKICAgICBTb3VyY2VDb2Rl
S2V5IGtleSA9IFNvdXJjZUNvZGVLZXkoc291cmNlLCBTdHJpbmcoKSwgQ2FjaGVUeXBlczxVbmxp
bmtlZENvZGVCbG9ja1R5cGU+Ojpjb2RlVHlwZSwgc3RyaWN0bmVzcyk7CiAgICAgQ29kZUNhY2hl
TWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9zb3VyY2VDb2RlLmFkZChrZXksIFNvdXJjZUNv
ZGVWYWx1ZSgpKTsKQEAgLTg4LDE2ICs4OCwxNiBAQCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIENv
ZGVDYWNoZTo6Z2V0Q29kCiAgICAgfQogCiAgICAgdHlwZWRlZiB0eXBlbmFtZSBDYWNoZVR5cGVz
PFVubGlua2VkQ29kZUJsb2NrVHlwZT46OlJvb3ROb2RlIFJvb3ROb2RlOwotICAgIFJlZlB0cjxS
b290Tm9kZT4gcm9vdE5vZGUgPSBwYXJzZTxSb290Tm9kZT4oJmdsb2JhbERhdGEsIHNvdXJjZSwg
MCwgSWRlbnRpZmllcigpLCBzdHJpY3RuZXNzLCBKU1BhcnNlUHJvZ3JhbUNvZGUsIGVycm9yKTsK
KyAgICBSZWZQdHI8Um9vdE5vZGU+IHJvb3ROb2RlID0gcGFyc2U8Um9vdE5vZGU+KCZ2bSwgc291
cmNlLCAwLCBJZGVudGlmaWVyKCksIHN0cmljdG5lc3MsIEpTUGFyc2VQcm9ncmFtQ29kZSwgZXJy
b3IpOwogICAgIGlmICghcm9vdE5vZGUpIHsKICAgICAgICAgbV9zb3VyY2VDb2RlLnJlbW92ZShh
ZGRSZXN1bHQuaXRlcmF0b3IpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgZXhlY3V0
YWJsZS0+cmVjb3JkUGFyc2Uocm9vdE5vZGUtPmZlYXR1cmVzKCksIHJvb3ROb2RlLT5oYXNDYXB0
dXJlZFZhcmlhYmxlcygpLCByb290Tm9kZS0+bGluZU5vKCksIHJvb3ROb2RlLT5sYXN0TGluZSgp
KTsKIAotICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlID0gVW5saW5rZWRD
b2RlQmxvY2tUeXBlOjpjcmVhdGUoJmdsb2JhbERhdGEsIGV4ZWN1dGFibGUtPmV4ZWN1dGFibGVJ
bmZvKCkpOworICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlID0gVW5saW5r
ZWRDb2RlQmxvY2tUeXBlOjpjcmVhdGUoJnZtLCBleGVjdXRhYmxlLT5leGVjdXRhYmxlSW5mbygp
KTsKICAgICB1bmxpbmtlZENvZGUtPnJlY29yZFBhcnNlKHJvb3ROb2RlLT5mZWF0dXJlcygpLCBy
b290Tm9kZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgcm9vdE5vZGUtPmxpbmVObygpIC0gc291
cmNlLmZpcnN0TGluZSgpLCByb290Tm9kZS0+bGFzdExpbmUoKSAtIHJvb3ROb2RlLT5saW5lTm8o
KSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3
IEJ5dGVjb2RlR2VuZXJhdG9yKGdsb2JhbERhdGEsIHNjb3BlLCByb290Tm9kZS5nZXQoKSwgdW5s
aW5rZWRDb2RlLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSkpKTsKKyAgICBPd25QdHI8Qnl0
ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3Io
dm0sIHNjb3BlLCByb290Tm9kZS5nZXQoKSwgdW5saW5rZWRDb2RlLCBkZWJ1Z2dlck1vZGUsIHBy
b2ZpbGVyTW9kZSkpKTsKICAgICBlcnJvciA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKTsKICAgICBy
b290Tm9kZS0+ZGVzdHJveURhdGEoKTsKICAgICBpZiAoZXJyb3IubV90eXBlICE9IFBhcnNlckVy
cm9yOjpFcnJvck5vbmUpIHsKQEAgLTExMCwyOCArMTEwLDI4IEBAIFVubGlua2VkQ29kZUJsb2Nr
VHlwZSogQ29kZUNhY2hlOjpnZXRDb2QKICAgICAgICAgcmV0dXJuIHVubGlua2VkQ29kZTsKICAg
ICB9CiAKLSAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gU291cmNlQ29kZVZhbHVlKGds
b2JhbERhdGEsIHVubGlua2VkQ29kZSwgbV9zb3VyY2VDb2RlLmFnZSgpKTsKKyAgICBhZGRSZXN1
bHQuaXRlcmF0b3ItPnZhbHVlID0gU291cmNlQ29kZVZhbHVlKHZtLCB1bmxpbmtlZENvZGUsIG1f
c291cmNlQ29kZS5hZ2UoKSk7CiAgICAgcmV0dXJuIHVubGlua2VkQ29kZTsKIH0KIAotVW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrKiBDb2RlQ2FjaGU6OmdldFByb2dyYW1Db2RlQmxvY2soSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgY29uc3Qg
U291cmNlQ29kZSYgc291cmNlLCBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywgRGVidWdn
ZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwgUGFyc2VyRXJy
b3ImIGVycm9yKQorVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBDb2RlQ2FjaGU6OmdldFByb2dy
YW1Db2RlQmxvY2soVk0mIHZtLCBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgY29uc3Qg
U291cmNlQ29kZSYgc291cmNlLCBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywgRGVidWdn
ZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwgUGFyc2VyRXJy
b3ImIGVycm9yKQogewotICAgIHJldHVybiBnZXRDb2RlQmxvY2s8VW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrPihnbG9iYWxEYXRhLCAwLCBleGVjdXRhYmxlLCBzb3VyY2UsIHN0cmljdG5lc3MsIGRl
YnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlLCBlcnJvcik7CisgICAgcmV0dXJuIGdldENvZGVCbG9j
azxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+KHZtLCAwLCBleGVjdXRhYmxlLCBzb3VyY2UsIHN0
cmljdG5lc3MsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlLCBlcnJvcik7CiB9CiAKLVVubGlu
a2VkRXZhbENvZGVCbG9jayogQ29kZUNhY2hlOjpnZXRFdmFsQ29kZUJsb2NrKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNTY29wZSogc2NvcGUsIEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxl
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNz
LCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBQ
YXJzZXJFcnJvciYgZXJyb3IpCitVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIENvZGVDYWNoZTo6Z2V0
RXZhbENvZGVCbG9jayhWTSYgdm0sIEpTU2NvcGUqIHNjb3BlLCBFdmFsRXhlY3V0YWJsZSogZXhl
Y3V0YWJsZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1BhcnNlclN0cmljdG5lc3Mgc3Ry
aWN0bmVzcywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVy
TW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yKQogewotICAgIHJldHVybiBnZXRDb2RlQmxvY2s8VW5s
aW5rZWRFdmFsQ29kZUJsb2NrPihnbG9iYWxEYXRhLCBzY29wZSwgZXhlY3V0YWJsZSwgc291cmNl
LCBzdHJpY3RuZXNzLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3IpOworICAgIHJl
dHVybiBnZXRDb2RlQmxvY2s8VW5saW5rZWRFdmFsQ29kZUJsb2NrPih2bSwgc2NvcGUsIGV4ZWN1
dGFibGUsIHNvdXJjZSwgc3RyaWN0bmVzcywgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUsIGVy
cm9yKTsKIH0KIAotVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIENvZGVDYWNoZTo6Z2V0RnVu
Y3Rpb25FeGVjdXRhYmxlRnJvbUdsb2JhbENvZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBj
b25zdCBJZGVudGlmaWVyJiBuYW1lLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFBhcnNlckVy
cm9yJiBlcnJvcikKK1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBDb2RlQ2FjaGU6OmdldEZ1
bmN0aW9uRXhlY3V0YWJsZUZyb21HbG9iYWxDb2RlKFZNJiB2bSwgY29uc3QgSWRlbnRpZmllciYg
bmFtZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJzZXJFcnJvciYgZXJyb3IpCiB7CiAg
ICAgU291cmNlQ29kZUtleSBrZXkgPSBTb3VyY2VDb2RlS2V5KHNvdXJjZSwgbmFtZS5zdHJpbmco
KSwgU291cmNlQ29kZUtleTo6RnVuY3Rpb25UeXBlLCBKU1BhcnNlTm9ybWFsKTsKICAgICBDb2Rl
Q2FjaGVNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX3NvdXJjZUNvZGUuYWRkKGtleSwgU291
cmNlQ29kZVZhbHVlKCkpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAg
IHJldHVybiBqc0Nhc3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqPihhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLmNlbGwuZ2V0KCkpOwogCi0gICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBwcm9n
cmFtID0gcGFyc2U8UHJvZ3JhbU5vZGU+KCZnbG9iYWxEYXRhLCBzb3VyY2UsIDAsIElkZW50aWZp
ZXIoKSwgSlNQYXJzZU5vcm1hbCwgSlNQYXJzZVByb2dyYW1Db2RlLCBlcnJvcik7CisgICAgUmVm
UHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFtID0gcGFyc2U8UHJvZ3JhbU5vZGU+KCZ2bSwgc291cmNl
LCAwLCBJZGVudGlmaWVyKCksIEpTUGFyc2VOb3JtYWwsIEpTUGFyc2VQcm9ncmFtQ29kZSwgZXJy
b3IpOwogICAgIGlmICghcHJvZ3JhbSkgewogICAgICAgICBBU1NFUlQoZXJyb3IubV90eXBlICE9
IFBhcnNlckVycm9yOjpFcnJvck5vbmUpOwogICAgICAgICBtX3NvdXJjZUNvZGUucmVtb3ZlKGFk
ZFJlc3VsdC5pdGVyYXRvcik7CkBAIC0xNDksMTAgKzE0OSwxMCBAQCBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZSogQ29kZUNhY2hlOjpnCiAgICAgQVNTRVJUKGJvZHkpOwogICAgIEFTU0VSVChi
b2R5LT5pZGVudCgpLmlzTnVsbCgpKTsKIAotICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRl
KCZnbG9iYWxEYXRhLCBzb3VyY2UsIGJvZHkpOwotICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+bV9u
YW1lVmFsdWUuc2V0KGdsb2JhbERhdGEsIGZ1bmN0aW9uRXhlY3V0YWJsZSwganNTdHJpbmcoJmds
b2JhbERhdGEsIG5hbWUuc3RyaW5nKCkpKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0
ZSgmdm0sIHNvdXJjZSwgYm9keSk7CisgICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5tX25hbWVWYWx1
ZS5zZXQodm0sIGZ1bmN0aW9uRXhlY3V0YWJsZSwganNTdHJpbmcoJnZtLCBuYW1lLnN0cmluZygp
KSk7CiAKLSAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gU291cmNlQ29kZVZhbHVlKGds
b2JhbERhdGEsIGZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9zb3VyY2VDb2RlLmFnZSgpKTsKKyAgICBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gU291cmNlQ29kZVZhbHVlKHZtLCBmdW5jdGlvbkV4
ZWN1dGFibGUsIG1fc291cmNlQ29kZS5hZ2UoKSk7CiAgICAgcmV0dXJuIGZ1bmN0aW9uRXhlY3V0
YWJsZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hl
LmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
ZGVDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIGNsYXNzIFVubGlua2Vk
RXZhbENvZGVCbG9jazsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKIGNsYXNzIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
azsKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwogc3RydWN0IFBhcnNlckVycm9yOwog
Y2xhc3MgU291cmNlQ29kZTsKIGNsYXNzIFNvdXJjZVByb3ZpZGVyOwpAQCAtMTIwLDggKzEyMCw4
IEBAIHN0cnVjdCBTb3VyY2VDb2RlVmFsdWUgewogICAgIHsKICAgICB9CiAKLSAgICBTb3VyY2VD
b2RlVmFsdWUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIGNlbGwsIGludDY0X3Qg
YWdlKQotICAgICAgICA6IGNlbGwoZ2xvYmFsRGF0YSwgY2VsbCkKKyAgICBTb3VyY2VDb2RlVmFs
dWUoVk0mIHZtLCBKU0NlbGwqIGNlbGwsIGludDY0X3QgYWdlKQorICAgICAgICA6IGNlbGwodm0s
IGNlbGwpCiAgICAgICAgICwgYWdlKGFnZSkKICAgICB7CiAgICAgfQpAQCAtMjM5LDkgKzIzOSw5
IEBAIGNsYXNzIENvZGVDYWNoZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8Q29k
ZUNhY2hlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgQ29kZUNhY2hlKTsgfQogCi0g
ICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBnZXRQcm9ncmFtQ29kZUJsb2NrKEpTR2xvYmFs
RGF0YSYsIFByb2dyYW1FeGVjdXRhYmxlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTUGFyc2VyU3Ry
aWN0bmVzcywgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUsIFBhcnNlckVycm9yJik7Ci0gICAg
VW5saW5rZWRFdmFsQ29kZUJsb2NrKiBnZXRFdmFsQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSYsIEpT
U2NvcGUqLCBFdmFsRXhlY3V0YWJsZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1BhcnNlclN0cmlj
dG5lc3MsIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYpOwotICAgIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBnZXRGdW5jdGlvbkV4ZWN1dGFibGVGcm9tR2xvYmFs
Q29kZShKU0dsb2JhbERhdGEmLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgU291cmNlQ29kZSYs
IFBhcnNlckVycm9yJik7CisgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBnZXRQcm9ncmFt
Q29kZUJsb2NrKFZNJiwgUHJvZ3JhbUV4ZWN1dGFibGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNQ
YXJzZXJTdHJpY3RuZXNzLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3Im
KTsKKyAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGdldEV2YWxDb2RlQmxvY2soVk0mLCBKU1Nj
b3BlKiwgRXZhbEV4ZWN1dGFibGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNQYXJzZXJTdHJpY3Ru
ZXNzLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImKTsKKyAgICBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZ2V0RnVuY3Rpb25FeGVjdXRhYmxlRnJvbUdsb2JhbENv
ZGUoVk0mLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgU291cmNlQ29kZSYsIFBhcnNlckVycm9y
Jik7CiAgICAgfkNvZGVDYWNoZSgpOwogCiAgICAgdm9pZCBjbGVhcigpCkBAIC0yNTMsNyArMjUz
LDcgQEAgcHJpdmF0ZToKICAgICBDb2RlQ2FjaGUoKTsKIAogICAgIHRlbXBsYXRlIDxjbGFzcyBV
bmxpbmtlZENvZGVCbG9ja1R5cGUsIGNsYXNzIEV4ZWN1dGFibGVUeXBlPiAKLSAgICBVbmxpbmtl
ZENvZGVCbG9ja1R5cGUqIGdldENvZGVCbG9jayhKU0dsb2JhbERhdGEmLCBKU1Njb3BlKiwgRXhl
Y3V0YWJsZVR5cGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNQYXJzZXJTdHJpY3RuZXNzLCBEZWJ1
Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImKTsKKyAgICBVbmxpbmtlZENvZGVC
bG9ja1R5cGUqIGdldENvZGVCbG9jayhWTSYsIEpTU2NvcGUqLCBFeGVjdXRhYmxlVHlwZSosIGNv
bnN0IFNvdXJjZUNvZGUmLCBKU1BhcnNlclN0cmljdG5lc3MsIERlYnVnZ2VyTW9kZSwgUHJvZmls
ZXJNb2RlLCBQYXJzZXJFcnJvciYpOwogCiAgICAgQ29kZUNhY2hlTWFwIG1fc291cmNlQ29kZTsK
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVy
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
SWRlbnRpZmllcnMuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDE1
ICsyMywxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotI2RlZmluZSBJTklUSUFMSVpFX1BST1BF
UlRZX05BTUUobmFtZSkgLCBuYW1lKGdsb2JhbERhdGEsICNuYW1lKQotI2RlZmluZSBJTklUSUFM
SVpFX0tFWVdPUkQobmFtZSkgLCBuYW1lIyNLZXl3b3JkKGdsb2JhbERhdGEsICNuYW1lKQorI2Rl
ZmluZSBJTklUSUFMSVpFX1BST1BFUlRZX05BTUUobmFtZSkgLCBuYW1lKHZtLCAjbmFtZSkKKyNk
ZWZpbmUgSU5JVElBTElaRV9LRVlXT1JEKG5hbWUpICwgbmFtZSMjS2V5d29yZCh2bSwgI25hbWUp
CiAKLUNvbW1vbklkZW50aWZpZXJzOjpDb21tb25JZGVudGlmaWVycyhKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEpCitDb21tb25JZGVudGlmaWVyczo6Q29tbW9uSWRlbnRpZmllcnMoVk0qIHZtKQog
ICAgIDogbnVsbElkZW50aWZpZXIoKQogICAgICwgZW1wdHlJZGVudGlmaWVyKElkZW50aWZpZXI6
OkVtcHR5SWRlbnRpZmllcikKLSAgICAsIHVuZGVyc2NvcmVQcm90byhnbG9iYWxEYXRhLCAiX19w
cm90b19fIikKLSAgICAsIHRoaXNJZGVudGlmaWVyKGdsb2JhbERhdGEsICJ0aGlzIikKLSAgICAs
IHVzZVN0cmljdElkZW50aWZpZXIoZ2xvYmFsRGF0YSwgInVzZSBzdHJpY3QiKQorICAgICwgdW5k
ZXJzY29yZVByb3RvKHZtLCAiX19wcm90b19fIikKKyAgICAsIHRoaXNJZGVudGlmaWVyKHZtLCAi
dGhpcyIpCisgICAgLCB1c2VTdHJpY3RJZGVudGlmaWVyKHZtLCAidXNlIHN0cmljdCIpCiAgICAg
SlNDX0NPTU1PTl9JREVOVElGSUVSU19FQUNIX0tFWVdPUkQoSU5JVElBTElaRV9LRVlXT1JEKQog
ICAgIEpTQ19DT01NT05fSURFTlRJRklFUlNfRUFDSF9QUk9QRVJUWV9OQU1FKElOSVRJQUxJWkVf
UFJPUEVSVFlfTkFNRSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vbklkZW50aWZpZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTYxLDggKzE2MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIENvbW1vbklkZW50
aWZpZXJzIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tbW9uSWRlbnRpZmllcnMp
OyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwcml2YXRlOgotICAgICAgICBDb21tb25J
ZGVudGlmaWVycyhKU0dsb2JhbERhdGEqKTsKLSAgICAgICAgZnJpZW5kIGNsYXNzIEpTR2xvYmFs
RGF0YTsKKyAgICAgICAgQ29tbW9uSWRlbnRpZmllcnMoVk0qKTsKKyAgICAgICAgZnJpZW5kIGNs
YXNzIFZNOwogCiAgICAgcHVibGljOgogICAgICAgICBjb25zdCBJZGVudGlmaWVyIG51bGxJZGVu
dGlmaWVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
U2xvd1BhdGhzLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBA
IEFMV0FZU19JTkxJTkUgRXhlY1N0YXRlKiBhcml0eUNoZWNrRm9yKEUKIGlubGluZSBib29sIG9w
SW4oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHByb3BOYW1lLCBKU1ZhbHVlIGJhc2VWYWwpCiB7
CiAgICAgaWYgKCFiYXNlVmFsLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgZXhlYy0+Z2xvYmFsRGF0
YSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKGV4ZWMsICJpbiIsIGJhc2VW
YWwpOworICAgICAgICBleGVjLT52bSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZUludmFsaWRQYXJhbUVy
cm9yKGV4ZWMsICJpbiIsIGJhc2VWYWwpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CkBAIC05Miw3ICs5Miw3IEBAIGlubGluZSBib29sIG9wSW4oRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHUKICAgICAgICAgcmV0dXJuIGJhc2VPYmotPmhhc1Byb3BlcnR5KGV4ZWMsIGpzQ2FzdDxOYW1l
SW5zdGFuY2UqPihwcm9wTmFtZS5hc0NlbGwoKSktPnByaXZhdGVOYW1lKCkpOwogCiAgICAgSWRl
bnRpZmllciBwcm9wZXJ0eShleGVjLCBwcm9wTmFtZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykpOwotICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uKQorICAgIGlmIChleGVj
LT52bSgpLmV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBiYXNl
T2JqLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBib29sIGNoZWNrU3ludGF4KEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlKiByZXR1cm5l
ZEV4Y2VwdGlvbikKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKLSAgICBSRUxFQVNF
X0FTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuaWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVhZERh
dGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMt
PnZtKCkuaWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmll
clRhYmxlKCkpOwogCiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHByb2dyYW0gPSBQcm9ncmFtRXhl
Y3V0YWJsZTo6Y3JlYXRlKGV4ZWMsIHNvdXJjZSk7CiAgICAgSlNPYmplY3QqIGVycm9yID0gcHJv
Z3JhbS0+Y2hlY2tTeW50YXgoZXhlYyk7CkBAIC01NSwxNyArNTUsMTcgQEAgYm9vbCBjaGVja1N5
bnRheChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IAogSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFs
dWUqIHJldHVybmVkRXhjZXB0aW9uKQogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwot
ICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5pZGVudGlmaWVyVGFibGUgPT0g
d3RmVGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSk7Ci0gICAgUkVMRUFTRV9B
U1NFUlQoIWV4ZWMtPmdsb2JhbERhdGEoKS5pc0NvbGxlY3RvckJ1c3koKSk7CisgICAgUkVMRUFT
RV9BU1NFUlQoZXhlYy0+dm0oKS5pZGVudGlmaWVyVGFibGUgPT0gd3RmVGhyZWFkRGF0YSgpLmN1
cnJlbnRJZGVudGlmaWVyVGFibGUoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWMtPnZtKCku
aXNDb2xsZWN0b3JCdXN5KCkpOwogCiAgICAgQ29kZVByb2ZpbGluZyBwcm9maWxlKHNvdXJjZSk7
CiAKICAgICBQcm9ncmFtRXhlY3V0YWJsZSogcHJvZ3JhbSA9IFByb2dyYW1FeGVjdXRhYmxlOjpj
cmVhdGUoZXhlYywgc291cmNlKTsKICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgaWYgKHJl
dHVybmVkRXhjZXB0aW9uKQotICAgICAgICAgICAgKnJldHVybmVkRXhjZXB0aW9uID0gZXhlYy0+
Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbjsKKyAgICAgICAgICAgICpyZXR1cm5lZEV4Y2VwdGlvbiA9
IGV4ZWMtPnZtKCkuZXhjZXB0aW9uOwogCi0gICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5leGNl
cHRpb24gPSBKU1ZhbHVlKCk7CisgICAgICAgIGV4ZWMtPnZtKCkuZXhjZXB0aW9uID0gSlNWYWx1
ZSgpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkocmV2
aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0
cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsOSArODEsOSBAQCBEYXRlQ29uc3RydWN0
b3I6OkRhdGVDb25zdHJ1Y3RvcihKU0dsb2JhCiAKIHZvaWQgRGF0ZUNvbnN0cnVjdG9yOjpmaW5p
c2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIERhdGVQcm90b3R5cGUqIGRhdGVQcm90b3R5cGUp
CiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBkYXRlUHJv
dG90eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5
cGUsIGRhdGVQcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDcpLCBSZWFkT25seSB8IERvbnRFbnVtIHwg
RG9udERlbGV0ZSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwgZGF0ZVBy
b3RvdHlwZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgZGF0
ZVByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgsIGpzTnVtYmVyKDcpLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiB9
CiAKIGJvb2wgRGF0ZUNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCAmc2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1
Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVD
b25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EYXRlQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsOSArNDAsOSBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5m
bzsKIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmNwcAkocmV2aXNpb24g
MTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsMjIgKzM1LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogY29u
c3QgQ2xhc3NJbmZvIERhdGVJbnN0YW5jZTo6c19pbmZvID0geyJEYXRlIiwgJkpTV3JhcHBlck9i
amVjdDo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKERhdGVJbnN0YW5jZSl9Owog
CiBEYXRlSW5zdGFuY2U6OkRhdGVJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSog
c3RydWN0dXJlKQotICAgIDogSlNXcmFwcGVyT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgc3Ry
dWN0dXJlKQorICAgIDogSlNXcmFwcGVyT2JqZWN0KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSkKIHsK
IH0KIAotdm9pZCBEYXRlSW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSkKK3ZvaWQgRGF0ZUluc3RhbmNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7Ci0g
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgc2V0SW50ZXJu
YWxWYWx1ZShnbG9iYWxEYXRhLCBqc05hTigpKTsKKyAgICBzZXRJbnRlcm5hbFZhbHVlKHZtLCBq
c05hTigpKTsKIH0KIAotdm9pZCBEYXRlSW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgZG91YmxlIHRpbWUpCit2b2lkIERhdGVJbnN0YW5jZTo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBkb3VibGUgdGltZSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bihnbG9iYWxEYXRhKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJU
KGluaGVyaXRzKCZzX2luZm8pKTsKLSAgICBzZXRJbnRlcm5hbFZhbHVlKGdsb2JhbERhdGEsIGpz
TnVtYmVyKHRpbWVDbGlwKHRpbWUpKSk7CisgICAgc2V0SW50ZXJuYWxWYWx1ZSh2bSwganNOdW1i
ZXIodGltZUNsaXAodGltZSkpKTsKIH0KIAogdm9pZCBEYXRlSW5zdGFuY2U6OmRlc3Ryb3koSlND
ZWxsKiBjZWxsKQpAQCAtNjUsNyArNjUsNyBAQCBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogRGF0
ZUluc3RhbmNlOjpjCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCFtX2RhdGEpCi0gICAg
ICAgIG1fZGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5kYXRlSW5zdGFuY2VDYWNoZS5hZGQobWls
bGkpOworICAgICAgICBtX2RhdGEgPSBleGVjLT52bSgpLmRhdGVJbnN0YW5jZUNhY2hlLmFkZCht
aWxsaSk7CiAKICAgICBpZiAobV9kYXRhLT5tX2dyZWdvcmlhbkRhdGVUaW1lQ2FjaGVkRm9yTVMg
IT0gbWlsbGkpIHsKICAgICAgICAgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG1pbGxpLCBm
YWxzZSwgbV9kYXRhLT5tX2NhY2hlZEdyZWdvcmlhbkRhdGVUaW1lKTsKQEAgLTgxLDcgKzgxLDcg
QEAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIERhdGVJbnN0YW5jZTo6YwogICAgICAgICByZXR1
cm4gMDsKIAogICAgIGlmICghbV9kYXRhKQotICAgICAgICBtX2RhdGEgPSBleGVjLT5nbG9iYWxE
YXRhKCkuZGF0ZUluc3RhbmNlQ2FjaGUuYWRkKG1pbGxpKTsKKyAgICAgICAgbV9kYXRhID0gZXhl
Yy0+dm0oKS5kYXRlSW5zdGFuY2VDYWNoZS5hZGQobWlsbGkpOwogCiAgICAgaWYgKG1fZGF0YS0+
bV9ncmVnb3JpYW5EYXRlVGltZVVUQ0NhY2hlZEZvck1TICE9IG1pbGxpKSB7CiAgICAgICAgIG1z
VG9HcmVnb3JpYW5EYXRlVGltZShleGVjLCBtaWxsaSwgdHJ1ZSwgbV9kYXRhLT5tX2NhY2hlZEdy
ZWdvcmlhbkRhdGVUaW1lVVRDKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RhdGVJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RhdGVJbnN0YW5jZS5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBEYXRlSW5zdGFuY2UgOiBwdWJsaWMgSlNX
cmFwcGVyT2JqZWN0IHsKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IERhdGVJbnN0YW5jZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKLSAgICAgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0dsb2JhbERhdGEmKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmLCBkb3VibGUpOworICAgICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mLCBkb3VibGUpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
ZWxsKik7CiAgCkBAIC0zOSwxNCArMzksMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0
YXRpYyBEYXRlSW5zdGFuY2UqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBkb3VibGUgZGF0ZSkKICAgICAgICAgewogICAgICAgICAgICAgRGF0ZUluc3RhbmNl
KiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPERhdGVJbnN0YW5jZT4oKmV4
ZWMtPmhlYXAoKSkpIERhdGVJbnN0YW5jZShleGVjLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAg
aW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZGF0ZSk7CisgICAg
ICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwgZGF0ZSk7CiAgICAg
ICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgRGF0
ZUluc3RhbmNlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
ICAgICAgICAgewogICAgICAgICAgICAgRGF0ZUluc3RhbmNlKiBpbnN0YW5jZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPERhdGVJbnN0YW5jZT4oKmV4ZWMtPmhlYXAoKSkpIERhdGVJbnN0
YW5jZShleGVjLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0
aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3Jl
YXRpb24oZXhlYy0+dm0oKSk7CiAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgICAg
IH0KIApAQCAtNjgsOSArNjgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVy
biBjYWxjdWxhdGVHcmVnb3JpYW5EYXRlVGltZVVUQyhleGVjKTsKICAgICAgICAgfQogCi0gICAg
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQor
ICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTA5LDcgKzUwOSw3IEBAIERhdGVQcm90b3R5cGU6OkRhdGVQcm90b3R5cGUo
RXhlY1N0YXRlKiAKIAogdm9pZCBEYXRlUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KikKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihl
eGVjLT5nbG9iYWxEYXRhKCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkp
OwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiAKICAgICAvLyBUaGUgY29uc3RydWN0
b3Igd2lsbCBiZSBhZGRlZCBsYXRlciwgYWZ0ZXIgRGF0ZUNvbnN0cnVjdG9yIGhhcyBiZWVuIGJ1
aWx0LgpAQCAtODgyLDcgKzg4Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnUKIAogICAgIGRvdWJsZSBtaWxsaSA9IHRpbWVDbGlwKGV4ZWMtPmFyZ3VtZW50KDAp
LnRvTnVtYmVyKGV4ZWMpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKG1pbGxpKTsK
LSAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIHJl
c3VsdCk7CisgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+dm0oKSwgcmVz
dWx0KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKQEAgLTg5Nyw3
ICs4OTcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgc2V0TmV3VmFsdWVGcm9tVGltCiAgICAg
CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkgfHwgc3RkOjppc25hbihtaWxsaSkpIHsK
ICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc05hTigpOwotICAgICAgICB0aGlzRGF0ZU9iai0+
c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIHJlc3VsdCk7CisgICAgICAgIHRo
aXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPnZtKCksIHJlc3VsdCk7CiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CiAgICAgIApAQCAtOTE0LDEy
ICs5MTQsMTIgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbVRpbQogICAg
IGdyZWdvcmlhbkRhdGVUaW1lLmNvcHlGcm9tKCpvdGhlcik7CiAgICAgaWYgKCFmaWxsU3RydWN0
dXJlc1VzaW5nVGltZUFyZ3MoZXhlYywgbnVtQXJnc1RvVXNlLCAmbXMsICZncmVnb3JpYW5EYXRl
VGltZSkpIHsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc05hTigpOwotICAgICAgICB0aGlz
RGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIHJlc3VsdCk7Cisg
ICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPnZtKCksIHJlc3VsdCk7
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9IAogICAgIAog
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKGV4ZWMs
IGdyZWdvcmlhbkRhdGVUaW1lLCBtcywgaW5wdXRJc1VUQykpOwotICAgIHRoaXNEYXRlT2JqLT5z
ZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcmVzdWx0KTsKKyAgICB0aGlzRGF0
ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT52bSgpLCByZXN1bHQpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApAQCAtOTMyLDcgKzkzMiw3IEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBzZXROZXdWYWx1ZUZyb21EYXQKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNE
YXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsKICAgICBpZiAoIWV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSkgewogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTmFOKCk7Ci0gICAgICAg
IHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcmVzdWx0
KTsKKyAgICAgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+dm0oKSwgcmVz
dWx0KTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0gICAg
ICAKICAgICAKQEAgLTk1NCwxMiArOTU0LDEyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBzZXRO
ZXdWYWx1ZUZyb21EYXQKICAgICAKICAgICBpZiAoIWZpbGxTdHJ1Y3R1cmVzVXNpbmdEYXRlQXJn
cyhleGVjLCBudW1BcmdzVG9Vc2UsICZtcywgJmdyZWdvcmlhbkRhdGVUaW1lKSkgewogICAgICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTmFOKCk7Ci0gICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRl
cm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcmVzdWx0KTsKKyAgICAgICAgdGhpc0RhdGVP
YmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+dm0oKSwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0gCiAgICAgICAgICAgIAogICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKGV4ZWMsIGdyZWdvcmlh
bkRhdGVUaW1lLCBtcywgaW5wdXRJc1VUQykpOwotICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5h
bFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcmVzdWx0KTsKKyAgICB0aGlzRGF0ZU9iai0+c2V0
SW50ZXJuYWxWYWx1ZShleGVjLT52bSgpLCByZXN1bHQpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKIH0KIApAQCAtMTA1Niw3ICsxMDU2LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmog
PSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpOwogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3Vu
dCgpKSB7IAogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTmFOKCk7Ci0gICAgICAgIHRoaXNE
YXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcmVzdWx0KTsKKyAg
ICAgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+dm0oKSwgcmVzdWx0KTsK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KIApAQCAtMTA3
OCwxMyArMTA3OCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
CiAgICAgZG91YmxlIHllYXIgPSBleGVjLT5hcmd1bWVudCgwKS50b0ludGVnZXJQcmVzZXJ2ZU5h
TihleGVjKTsKICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUoeWVhcikpIHsKICAgICAgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc05hTigpOwotICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1
ZShleGVjLT5nbG9iYWxEYXRhKCksIHJlc3VsdCk7CisgICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJ
bnRlcm5hbFZhbHVlKGV4ZWMtPnZtKCksIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKICAgICB9CiAKICAgICBncmVnb3JpYW5EYXRlVGltZS5zZXRZZWFy
KHRvSW50MzIoKHllYXIgPj0gMCAmJiB5ZWFyIDw9IDk5KSA/ICh5ZWFyICsgMTkwMCkgOiB5ZWFy
KSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihncmVnb3JpYW5EYXRlVGltZVRvTVMo
ZXhlYywgZ3JlZ29yaWFuRGF0ZVRpbWUsIG1zLCBmYWxzZSkpOwotICAgIHRoaXNEYXRlT2JqLT5z
ZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcmVzdWx0KTsKKyAgICB0aGlzRGF0
ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT52bSgpLCByZXN1bHQpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApAQCAtMTExMSw3ICsxMTExLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAgICAg
Ci0gICAgSlNWYWx1ZSB0b0lTT1ZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+Z2xvYmFs
RGF0YSgpLnByb3BlcnR5TmFtZXMtPnRvSVNPU3RyaW5nKTsKKyAgICBKU1ZhbHVlIHRvSVNPVmFs
dWUgPSBvYmplY3QtPmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPnRvSVNPU3Ry
aW5nKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EYXRlUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDkgKzQ2LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3BwCShyZXZpc2lvbiAxNDg2
MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDM3ICs0NywzNyBAQCBzdGF0aWMgY29uc3QgY2hhciogc291cmNlVVJMUHJv
cGVydHlOYW1lCiBKU09iamVjdCogY3JlYXRlRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIEFTU0VSVCghbWVzc2FnZS5pc0Vt
cHR5KCkpOwotICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT5n
bG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7Cisg
ICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIGdsb2Jh
bE9iamVjdC0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CiB9CiAKIEpTT2JqZWN0KiBjcmVh
dGVFdmFsRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQogewogICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAgIHJldHVybiBF
cnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9i
amVjdC0+ZXZhbEVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7
CisgICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIGds
b2JhbE9iamVjdC0+ZXZhbEVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVz
c2FnZSk7CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVSYW5nZUVycm9yKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBBU1NFUlQoIW1lc3Nh
Z2UuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9i
amVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPnJhbmdlRXJyb3JDb25zdHJ1Y3Rvcigp
LT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKKyAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6
Y3JlYXRlKGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5yYW5nZUVycm9yQ29uc3Ry
dWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CiB9CiAKIEpTT2JqZWN0KiBjcmVh
dGVSZWZlcmVuY2VFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCiB7CiAgICAgQVNTRVJUKCFtZXNzYWdlLmlzRW1wdHkoKSk7Ci0gICAgcmV0
dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xv
YmFsT2JqZWN0LT5yZWZlcmVuY2VFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCks
IG1lc3NhZ2UpOworICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0
LT52bSgpLCBnbG9iYWxPYmplY3QtPnJlZmVyZW5jZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JT
dHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVTeW50YXhFcnJvcihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAg
ICAgQVNTRVJUKCFtZXNzYWdlLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6
OmNyZWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5zeW50YXhF
cnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOworICAgIHJldHVy
biBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3Qt
PnN5bnRheEVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CiB9
CiAKIEpTT2JqZWN0KiBjcmVhdGVUeXBlRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5
KCkpOwotICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxEYXRhKCksIGdsb2JhbE9iamVjdC0+dHlwZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1
Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShnbG9i
YWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdC0+dHlwZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJy
b3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpAQCAtODgsNyArODgs
NyBAQCBKU09iamVjdCogY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoCiBKU09iamVjdCog
Y3JlYXRlVVJJRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQogewogICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAgIHJldHVy
biBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2Jh
bE9iamVjdC0+VVJJRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdl
KTsKKyAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+dm0oKSwg
Z2xvYmFsT2JqZWN0LT5VUklFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1l
c3NhZ2UpOwogfQogCiBKU09iamVjdCogY3JlYXRlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCkBAIC0xMzMsMTUgKzEzMywxNSBAQCBKU09iamVjdCogY3JlYXRl
VVJJRXJyb3IoRXhlY1N0YXRlKiBleGVjCiAKIEpTT2JqZWN0KiBhZGRFcnJvckluZm8oQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiBlcnJvciwgaW50IGxpbmUsIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCk7CisgICAgVk0qIHZtID0gJmNhbGxGcmFtZS0+dm0oKTsKICAgICBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCA9IHNvdXJjZS5wcm92aWRlcigpLT51cmwoKTsKIAogICAgIGlm
IChsaW5lICE9IC0xKQotICAgICAgICBlcnJvci0+cHV0RGlyZWN0KCpnbG9iYWxEYXRhLCBJZGVu
dGlmaWVyKGdsb2JhbERhdGEsIGxpbmVQcm9wZXJ0eU5hbWUpLCBqc051bWJlcihsaW5lKSwgUmVh
ZE9ubHkgfCBEb250RGVsZXRlKTsKKyAgICAgICAgZXJyb3ItPnB1dERpcmVjdCgqdm0sIElkZW50
aWZpZXIodm0sIGxpbmVQcm9wZXJ0eU5hbWUpLCBqc051bWJlcihsaW5lKSwgUmVhZE9ubHkgfCBE
b250RGVsZXRlKTsKICAgICBpZiAoIXNvdXJjZVVSTC5pc051bGwoKSkKLSAgICAgICAgZXJyb3It
PnB1dERpcmVjdCgqZ2xvYmFsRGF0YSwgSWRlbnRpZmllcihnbG9iYWxEYXRhLCBzb3VyY2VVUkxQ
cm9wZXJ0eU5hbWUpLCBqc1N0cmluZyhnbG9iYWxEYXRhLCBzb3VyY2VVUkwpLCBSZWFkT25seSB8
IERvbnREZWxldGUpOworICAgICAgICBlcnJvci0+cHV0RGlyZWN0KCp2bSwgSWRlbnRpZmllcih2
bSwgc291cmNlVVJMUHJvcGVydHlOYW1lKSwganNTdHJpbmcodm0sIHNvdXJjZVVSTCksIFJlYWRP
bmx5IHwgRG9udERlbGV0ZSk7CiAKLSAgICBnbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+YWRkU3Rh
Y2tUcmFjZUlmTmVjZXNzYXJ5KGNhbGxGcmFtZSwgZXJyb3IpOworICAgIHZtLT5pbnRlcnByZXRl
ci0+YWRkU3RhY2tUcmFjZUlmTmVjZXNzYXJ5KGNhbGxGcmFtZSwgZXJyb3IpOwogCiAgICAgcmV0
dXJuIGVycm9yOwogfQpAQCAtMTU2LDE0ICsxNTYsMTQgQEAgYm9vbCBoYXNFcnJvckluZm8oRXhl
Y1N0YXRlKiBleGVjLCBKU09iagogSlNWYWx1ZSB0aHJvd0Vycm9yKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBlcnJvcikKIHsKICAgICBJbnRlcnByZXRlcjo6YWRkU3RhY2tUcmFjZUlmTmVjZXNz
YXJ5KGV4ZWMsIGVycm9yKTsKLSAgICBleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gZXJy
b3I7CisgICAgZXhlYy0+dm0oKS5leGNlcHRpb24gPSBlcnJvcjsKICAgICByZXR1cm4gZXJyb3I7
CiB9CiAKIEpTT2JqZWN0KiB0aHJvd0Vycm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGVy
cm9yKQogewogICAgIEludGVycHJldGVyOjphZGRTdGFja1RyYWNlSWZOZWNlc3NhcnkoZXhlYywg
ZXJyb3IpOwotICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBlcnJvcjsKKyAgICBl
eGVjLT52bSgpLmV4Y2VwdGlvbiA9IGVycm9yOwogICAgIHJldHVybiBlcnJvcjsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5oCShyZXZpc2lvbiAxNDg2MzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw3ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEV4ZWNTdGF0ZTsK
LSAgICBjbGFzcyBKU0dsb2JhbERhdGE7CisgICAgY2xhc3MgVk07CiAgICAgY2xhc3MgSlNHbG9i
YWxPYmplY3Q7CiAgICAgY2xhc3MgSlNPYmplY3Q7CiAgICAgY2xhc3MgU291cmNlQ29kZTsKQEAg
LTg5LDcgKzg5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBTdHJpY3RNb2Rl
VHlwZUVycm9yRnVuY3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIFN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbiog
ZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJpY3RNb2RlVHlwZUVycm9y
RnVuY3Rpb24+KCpleGVjLT5oZWFwKCkpKSBTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24oZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIG1lc3NhZ2UpOwotICAgICAgICAgICAgZnVuY3Rpb24tPmZp
bmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgU3RyaW5nKCkpOworICAgICAgICAgICAg
ZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCksIFN0cmluZygpKTsKICAgICAgICAg
ICAgIHJldHVybiBmdW5jdGlvbjsKICAgICAgICAgfQogICAgIApAQCAtMTE5LDkgKzExOSw5IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZv
OwogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKSAKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpIAogICAg
ICAgICB7IAotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEs
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8pOyAKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7IAogICAgICAgICB9CiAKICAgICBwcml2YXRlOgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9y
Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMCArMzksMTAgQEAgRXJyb3JD
b25zdHJ1Y3Rvcjo6RXJyb3JDb25zdHJ1Y3RvcihKU0dsbwogCiB2b2lkIEVycm9yQ29uc3RydWN0
b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXJyb3JQcm90b3R5cGUqIGVycm9y
UHJvdG90eXBlKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEo
KSwgZXJyb3JQcm90b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpOworICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKGV4ZWMtPnZtKCksIGVycm9yUHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xh
c3NOYW1lKTsKICAgICAvLyBFQ01BIDE1LjExLjMuMSBFcnJvci5wcm90b3R5cGUKLSAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5wcm90b3R5cGUsIGVycm9yUHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUg
fCBSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFs
RGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigxKSwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIGVycm9yUHJv
dG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCwganNOdW1iZXIoMSksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKIH0KIAog
Ly8gRUNNQSAxNS45LjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9y
Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FcnJvckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDEs
OSArNDEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJ
bmZvIHNfaW5mbzsKIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkgCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlKSAKICAgICAgICAgeyAKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShn
bG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVk
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5j
ZS5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Vycm9ySW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw4IEBAIEFTU0VS
VF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKEVycm9ySW5zdGEKIAogY29uc3QgQ2xhc3NJbmZvIEVy
cm9ySW5zdGFuY2U6OnNfaW5mbyA9IHsgIkVycm9yIiwgJkpTTm9uRmluYWxPYmplY3Q6OnNfaW5m
bywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShFcnJvckluc3RhbmNlKSB9OwogCi1FcnJvcklu
c3RhbmNlOjpFcnJvckluc3RhbmNlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCi0gICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSkKK0Vycm9ySW5zdGFuY2U6OkVycm9ySW5zdGFuY2UoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICA6IEpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKICAgICAsIG1fYXBw
ZW5kU291cmNlVG9NZXNzYWdlKGZhbHNlKQogewogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSwyMSArMzEsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIGNv
bnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEVycm9y
SW5zdGFuY2VUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oRXJyb3JJbnN0YW5jZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAg
IH0KIAotICAgICAgICBzdGF0aWMgRXJyb3JJbnN0YW5jZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
KyAgICAgICAgc3RhdGljIEVycm9ySW5zdGFuY2UqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IEVycm9ySW5zdGFuY2UqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXJy
b3JJbnN0YW5jZT4oZ2xvYmFsRGF0YS5oZWFwKSkgRXJyb3JJbnN0YW5jZShnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUpOwotICAgICAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEsIG1lc3NhZ2UpOworICAgICAgICAgICAgRXJyb3JJbnN0YW5jZSogaW5zdGFuY2UgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxFcnJvckluc3RhbmNlPih2bS5oZWFwKSkgRXJyb3JJbnN0
YW5jZSh2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlv
bih2bSwgbWVzc2FnZSk7CiAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgICAgIH0K
IAogICAgICAgICBzdGF0aWMgRXJyb3JJbnN0YW5jZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTVmFsdWUgbWVzc2FnZSkKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwgbWVzc2Fn
ZS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBtZXNzYWdlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKSk7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVy
ZSwgbWVzc2FnZS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBtZXNzYWdlLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGFwcGVuZFNvdXJj
ZVRvTWVzc2FnZSgpIHsgcmV0dXJuIG1fYXBwZW5kU291cmNlVG9NZXNzYWdlOyB9CkBAIC01Mywx
NCArNTMsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgY2xlYXJBcHBlbmRTb3Vy
Y2VUb01lc3NhZ2UoKSB7IG1fYXBwZW5kU291cmNlVG9NZXNzYWdlID0gZmFsc2U7IH0KIAogICAg
IHByb3RlY3RlZDoKLSAgICAgICAgZXhwbGljaXQgRXJyb3JJbnN0YW5jZShKU0dsb2JhbERhdGEm
LCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgZXhwbGljaXQgRXJyb3JJbnN0YW5jZShWTSYsIFN0cnVj
dHVyZSopOwogCi0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCisgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICAgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pOwogICAgICAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsK
ICAgICAgICAgICAgIGlmICghbWVzc2FnZS5pc051bGwoKSkKLSAgICAgICAgICAgICAgICBwdXRE
aXJlY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5wcm9wZXJ0eU5hbWVzLT5tZXNzYWdlLCBqc1N0
cmluZygmZ2xvYmFsRGF0YSwgbWVzc2FnZSksIERvbnRFbnVtKTsKKyAgICAgICAgICAgICAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm1lc3NhZ2UsIGpzU3RyaW5nKCZ2bSwgbWVz
c2FnZSksIERvbnRFbnVtKTsKICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgbV9hcHBlbmRTb3Vy
Y2VUb01lc3NhZ2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclBy
b3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXJyb3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDE1
ICs1MCwxNSBAQCBjb25zdCBDbGFzc0luZm8gRXJyb3JQcm90b3R5cGU6OnNfaW5mbyA9CiAqLwog
CiBFcnJvclByb3RvdHlwZTo6RXJyb3JQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKLSAgICA6IEVycm9ySW5zdGFuY2UoZXhlYy0+Z2xvYmFsRGF0YSgpLCBz
dHJ1Y3R1cmUpCisgICAgOiBFcnJvckluc3RhbmNlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSkKIHsK
IH0KIAogdm9pZCBFcnJvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCopCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xv
YmFsRGF0YSgpLCAiIik7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwgIiIp
OwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmds
b2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm5hbWUsIGpzTm9udHJpdmlhbFN0cmlu
ZyhleGVjLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJFcnJvciIpKSksIERvbnRFbnVtKTsKKyAgICBw
dXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm5hbWUsIGpzTm9udHJp
dmlhbFN0cmluZyhleGVjLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJFcnJvciIpKSksIERvbnRFbnVt
KTsKIH0KIAogYm9vbCBFcnJvclByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QgJnNsb3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclBy
b3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vy
cm9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDkgKzQwLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJ
bmZvIHNfaW5mbzsKIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9i
YWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oRXJyb3JJbnN0YW5jZVR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhFcnJvcklu
c3RhbmNlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogCiAgICAg
cHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9u
SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhjZXB0aW9uSGVscGVycy5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Miw5ICs1Miw5IEBAIEpTVmFsdWUgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6ZGVmYXUKICAg
ICByZXR1cm4gSlNWYWx1ZShRTmFOKTsKIH0KIAotSlNPYmplY3QqIGNyZWF0ZUludGVycnVwdGVk
RXhlY3V0aW9uRXhjZXB0aW9uKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK0pTT2JqZWN0KiBj
cmVhdGVJbnRlcnJ1cHRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihWTSogdm0pCiB7Ci0gICAgcmV0dXJu
IEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZSgqZ2xvYmFsRGF0YSk7CisgICAgcmV0
dXJuIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZSgqdm0pOwogfQogCiBib29sIGlz
SW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNPYmplY3QqIG9iamVjdCkKQEAgLTc5LDkg
Kzc5LDkgQEAgSlNWYWx1ZSBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmRlZmF1bAogICAgIHJl
dHVybiBKU1ZhbHVlKFFOYU4pOwogfQogCi1KU09iamVjdCogY3JlYXRlVGVybWluYXRlZEV4ZWN1
dGlvbkV4Y2VwdGlvbihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitKU09iamVjdCogY3JlYXRl
VGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIFRlcm1p
bmF0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlKCpnbG9iYWxEYXRhKTsKKyAgICByZXR1cm4gVGVy
bWluYXRlZEV4ZWN1dGlvbkVycm9yOjpjcmVhdGUoKnZtKTsKIH0KIAogYm9vbCBpc1Rlcm1pbmF0
ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNPYmplY3QqIG9iamVjdCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgJKHJldmlzaW9uIDE0
ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTEgKzMzLDExIEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1KU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25F
eGNlcHRpb24oSlNHbG9iYWxEYXRhKik7CitKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY3Jl
YXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb24oVk0qKTsKIGJvb2wgaXNJbnRlcnJ1cHRl
ZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU09iamVjdCopOwogYm9vbCBpc0ludGVycnVwdGVkRXhlY3V0
aW9uRXhjZXB0aW9uKEpTVmFsdWUpOwogCi1KU09iamVjdCogY3JlYXRlVGVybWluYXRlZEV4ZWN1
dGlvbkV4Y2VwdGlvbihKU0dsb2JhbERhdGEqKTsKK0pTT2JqZWN0KiBjcmVhdGVUZXJtaW5hdGVk
RXhlY3V0aW9uRXhjZXB0aW9uKFZNKik7CiBib29sIGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2Vw
dGlvbihKU09iamVjdCopOwogSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1Rlcm1pbmF0ZWRFeGVj
dXRpb25FeGNlcHRpb24oSlNWYWx1ZSk7CiAKQEAgLTU3LDggKzU3LDggQEAgSlNPYmplY3QqIHRo
cm93U3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdAogCiBjbGFzcyBJbnRlcnJ1cHRlZEV4ZWN1dGlv
bkVycm9yIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHJpdmF0ZToKLSAgICBJbnRlcnJ1
cHRlZEV4ZWN1dGlvbkVycm9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLSAgICAgICAgOiBK
U05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIGdsb2JhbERhdGEuaW50ZXJydXB0ZWRFeGVjdXRp
b25FcnJvclN0cnVjdHVyZS5nZXQoKSkKKyAgICBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yKFZN
JiB2bSkKKyAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KHZtLCB2bS5pbnRlcnJ1cHRlZEV4ZWN1
dGlvbkVycm9yU3RydWN0dXJlLmdldCgpKQogICAgIHsKICAgICB9CiAKQEAgLTY3LDE2ICs2Nywx
NiBAQCBwcml2YXRlOgogcHVibGljOgogICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNl
OwogCi0gICAgc3RhdGljIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3IqIGNyZWF0ZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCisgICAgc3RhdGljIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3Iq
IGNyZWF0ZShWTSYgdm0pCiAgICAgewotICAgICAgICBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9y
KiBlcnJvciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEludGVycnVwdGVkRXhlY3V0aW9u
RXJyb3I+KGdsb2JhbERhdGEuaGVhcCkpIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3IoZ2xvYmFs
RGF0YSk7Ci0gICAgICAgIGVycm9yLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAg
ICAgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvciogZXJyb3IgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yPih2bS5oZWFwKSkgSW50ZXJydXB0ZWRF
eGVjdXRpb25FcnJvcih2bSk7CisgICAgICAgIGVycm9yLT5maW5pc2hDcmVhdGlvbih2bSk7CiAg
ICAgICAgIHJldHVybiBlcnJvcjsKICAgICB9CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9i
YWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZv
IHNfaW5mbzsKQEAgLTg0LDggKzg0LDggQEAgcHVibGljOgogCiBjbGFzcyBUZXJtaW5hdGVkRXhl
Y3V0aW9uRXJyb3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwcml2YXRlOgotICAgIFRl
cm1pbmF0ZWRFeGVjdXRpb25FcnJvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgICAg
IDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnRlcm1pbmF0ZWRFeGVj
dXRpb25FcnJvclN0cnVjdHVyZS5nZXQoKSkKKyAgICBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3Io
Vk0mIHZtKQorICAgICAgICA6IEpTTm9uRmluYWxPYmplY3Qodm0sIHZtLnRlcm1pbmF0ZWRFeGVj
dXRpb25FcnJvclN0cnVjdHVyZS5nZXQoKSkKICAgICB7CiAgICAgfQogCkBAIC05NCwxNiArOTQs
MTYgQEAgcHJpdmF0ZToKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFz
ZTsKIAotICAgIHN0YXRpYyBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3IqIGNyZWF0ZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCisgICAgc3RhdGljIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvciog
Y3JlYXRlKFZNJiB2bSkKICAgICB7Ci0gICAgICAgIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvciog
ZXJyb3IgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxUZXJtaW5hdGVkRXhlY3V0aW9uRXJy
b3I+KGdsb2JhbERhdGEuaGVhcCkpIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcihnbG9iYWxEYXRh
KTsKLSAgICAgICAgZXJyb3ItPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBU
ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3IqIGVycm9yID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yPih2bS5oZWFwKSkgVGVybWluYXRlZEV4ZWN1dGlv
bkVycm9yKHZtKTsKKyAgICAgICAgZXJyb3ItPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAg
cmV0dXJuIGVycm9yOwogICAgIH0KIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEs
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pOwogICAgIH0KIAogICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENs
YXNzSW5mbyBzX2luZm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDE0ICs5NCwxNCBA
QCBJbnRyaW5zaWMgTmF0aXZlRXhlY3V0YWJsZTo6aW50cmluc2ljKCkgCiAjaWYgRU5BQkxFKEpJ
VCkKIC8vIFV0aWxpdHkgbWV0aG9kIHVzZWQgZm9yIGpldHRpc29uaW5nIGNvZGUgYmxvY2tzLgog
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0YXRpYyB2b2lkIGpldHRpc29uQ29kZUJsb2NrKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgT3duUHRyPFQ+JiBjb2RlQmxvY2spCitzdGF0aWMgdm9pZCBq
ZXR0aXNvbkNvZGVCbG9jayhWTSYgdm0sIE93blB0cjxUPiYgY29kZUJsb2NrKQogewogICAgIEFT
U0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5nZXRKSVRUeXBlKCkpKTsK
ICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBPd25QdHI8VD4gY29k
ZUJsb2NrVG9KZXR0aXNvbiA9IGNvZGVCbG9jay5yZWxlYXNlKCk7CiAgICAgY29kZUJsb2NrID0g
c3RhdGljX3BvaW50ZXJfY2FzdDxUPihjb2RlQmxvY2tUb0pldHRpc29uLT5yZWxlYXNlQWx0ZXJu
YXRpdmUoKSk7CiAgICAgY29kZUJsb2NrVG9KZXR0aXNvbi0+dW5saW5rSW5jb21pbmdDYWxscygp
OwotICAgIGdsb2JhbERhdGEuaGVhcC5qZXR0aXNvbkRGR0NvZGVCbG9jayhzdGF0aWNfcG9pbnRl
cl9jYXN0PENvZGVCbG9jaz4oY29kZUJsb2NrVG9KZXR0aXNvbi5yZWxlYXNlKCkpKTsKKyAgICB2
bS5oZWFwLmpldHRpc29uREZHQ29kZUJsb2NrKHN0YXRpY19wb2ludGVyX2Nhc3Q8Q29kZUJsb2Nr
Pihjb2RlQmxvY2tUb0pldHRpc29uLnJlbGVhc2UoKSkpOwogfQogI2VuZGlmCiAKQEAgLTExNyw3
ICsxMTcsNyBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjCiBjb25z
dCBDbGFzc0luZm8gRXZhbEV4ZWN1dGFibGU6OnNfaW5mbyA9IHsgIkV2YWxFeGVjdXRhYmxlIiwg
JlNjcmlwdEV4ZWN1dGFibGU6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShFdmFs
RXhlY3V0YWJsZSkgfTsKIAogRXZhbEV4ZWN1dGFibGU6OkV2YWxFeGVjdXRhYmxlKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29sIGluU3RyaWN0Q29udGV4dCkK
LSAgICA6IFNjcmlwdEV4ZWN1dGFibGUoZXhlYy0+Z2xvYmFsRGF0YSgpLmV2YWxFeGVjdXRhYmxl
U3RydWN0dXJlLmdldCgpLCBleGVjLCBzb3VyY2UsIGluU3RyaWN0Q29udGV4dCkKKyAgICA6IFNj
cmlwdEV4ZWN1dGFibGUoZXhlYy0+dm0oKS5ldmFsRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwg
ZXhlYywgc291cmNlLCBpblN0cmljdENvbnRleHQpCiB7CiB9CiAKQEAgLTEyOSw3ICsxMjksNyBA
QCB2b2lkIEV2YWxFeGVjdXRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsCiBjb25zdCBDbGFzc0lu
Zm8gUHJvZ3JhbUV4ZWN1dGFibGU6OnNfaW5mbyA9IHsgIlByb2dyYW1FeGVjdXRhYmxlIiwgJlNj
cmlwdEV4ZWN1dGFibGU6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShQcm9ncmFt
RXhlY3V0YWJsZSkgfTsKIAogUHJvZ3JhbUV4ZWN1dGFibGU6OlByb2dyYW1FeGVjdXRhYmxlKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQotICAgIDogU2NyaXB0RXhl
Y3V0YWJsZShleGVjLT5nbG9iYWxEYXRhKCkucHJvZ3JhbUV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0
KCksIGV4ZWMsIHNvdXJjZSwgZmFsc2UpCisgICAgOiBTY3JpcHRFeGVjdXRhYmxlKGV4ZWMtPnZt
KCkucHJvZ3JhbUV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIGV4ZWMsIHNvdXJjZSwgZmFsc2Up
CiB7CiB9CiAKQEAgLTE0MCw5ICsxNDAsOSBAQCB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpkZXN0
cm95KEpTQ2VsbCogCiAKIGNvbnN0IENsYXNzSW5mbyBGdW5jdGlvbkV4ZWN1dGFibGU6OnNfaW5m
byA9IHsgIkZ1bmN0aW9uRXhlY3V0YWJsZSIsICZTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8sIDAs
IDAsIENSRUFURV9NRVRIT0RfVEFCTEUoRnVuY3Rpb25FeGVjdXRhYmxlKSB9OwogCi1GdW5jdGlv
bkV4ZWN1dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVu
bGlua2VkRXhlY3V0YWJsZSwgdW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsYXN0TGluZSkK
LSAgICA6IFNjcmlwdEV4ZWN1dGFibGUoZ2xvYmFsRGF0YS5mdW5jdGlvbkV4ZWN1dGFibGVTdHJ1
Y3R1cmUuZ2V0KCksIGdsb2JhbERhdGEsIHNvdXJjZSwgdW5saW5rZWRFeGVjdXRhYmxlLT5pc0lu
U3RyaWN0Q29udGV4dCgpKQotICAgICwgbV91bmxpbmtlZEV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwg
dGhpcywgdW5saW5rZWRFeGVjdXRhYmxlKQorRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4
ZWN1dGFibGUoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUsIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5z
aWduZWQgbGFzdExpbmUpCisgICAgOiBTY3JpcHRFeGVjdXRhYmxlKHZtLmZ1bmN0aW9uRXhlY3V0
YWJsZVN0cnVjdHVyZS5nZXQoKSwgdm0sIHNvdXJjZSwgdW5saW5rZWRFeGVjdXRhYmxlLT5pc0lu
U3RyaWN0Q29udGV4dCgpKQorICAgICwgbV91bmxpbmtlZEV4ZWN1dGFibGUodm0sIHRoaXMsIHVu
bGlua2VkRXhlY3V0YWJsZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghc291cmNlLmlzTnVsbCgp
KTsKICAgICBBU1NFUlQoc291cmNlLmxlbmd0aCgpKTsKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lk
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqCiAKIEpTT2JqZWN0KiBFdmFsRXhl
Y3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3Bl
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewotICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRh
KCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CisgICAgQVNTRVJUKGV4ZWMtPnZtKCkuZHluYW1pY0ds
b2JhbE9iamVjdCk7CiAgICAgQVNTRVJUKCEhbV9ldmFsQ29kZUJsb2NrKTsKICAgICBKU09iamVj
dCogZXJyb3IgPSAwOwogICAgIGlmIChtX2V2YWxDb2RlQmxvY2stPmdldEpJVFR5cGUoKSAhPSBK
SVRDb2RlOjp0b3BUaWVySklUKCkpCkBAIC0xOTYsNyArMTk2LDcgQEAgSlNPYmplY3QqIEV2YWxF
eGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYQogICAgIFVOVVNFRF9QQVJBTShqaXRUeXBlKTsKICAg
ICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7CiAjZW5kaWYKLSAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIAogICAgIGlmICghIW1fZXZhbENvZGVCbG9jaykgewpA
QCAtMjA1LDcgKzIwNSw3IEBAIEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVy
bmEKICAgICAgICAgbV9ldmFsQ29kZUJsb2NrID0gbmV3Q29kZUJsb2NrLnJlbGVhc2UoKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBVTlVTRURfUEFSQU0oc2NvcGUpOwotICAgICAgICBVTlVTRURf
UEFSQU0oZ2xvYmFsRGF0YSk7CisgICAgICAgIFVOVVNFRF9QQVJBTSh2bSk7CiAgICAgICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICAgICAgaWYgKCFsZXhpY2FsR2xv
YmFsT2JqZWN0LT5ldmFsRW5hYmxlZCgpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgY3JlYXRlRXZhbEVycm9yKGV4ZWMsIGxleGljYWxHbG9iYWxPYmplY3QtPmV2YWxEaXNh
YmxlZEVycm9yTWVzc2FnZSgpKSk7CkBAIC0yMTcsNyArMjE3LDcgQEAgSlNPYmplY3QqIEV2YWxF
eGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYQogCiAgICAgICAgIE93blB0cjxDb2RlQmxvY2s+IHBy
ZXZpb3VzQ29kZUJsb2NrID0gbV9ldmFsQ29kZUJsb2NrLnJlbGVhc2UoKTsKICAgICAgICAgQVNT
RVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0gIXByZXZpb3VzQ29k
ZUJsb2NrKTsKLSAgICAgICAgbV91bmxpbmtlZEV2YWxDb2RlQmxvY2suc2V0KCpnbG9iYWxEYXRh
LCB0aGlzLCB1bmxpbmtlZEV2YWxDb2RlKTsKKyAgICAgICAgbV91bmxpbmtlZEV2YWxDb2RlQmxv
Y2suc2V0KCp2bSwgdGhpcywgdW5saW5rZWRFdmFsQ29kZSk7CiAgICAgICAgIG1fZXZhbENvZGVC
bG9jayA9IGFkb3B0UHRyKG5ldyBFdmFsQ29kZUJsb2NrKHRoaXMsIHVubGlua2VkRXZhbENvZGUs
IGxleGljYWxHbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNjb3BlLT5sb2NhbERl
cHRoKCksIHByZXZpb3VzQ29kZUJsb2NrLnJlbGVhc2UoKSkpOwogICAgICAgICBtX2V2YWxDb2Rl
QmxvY2stPmNvcHlQb3N0UGFyc2VEYXRhRnJvbUFsdGVybmF0aXZlKCk7CiAgICAgfQpAQCAtMjM3
LDkgKzIzNyw5IEBAIEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmEKIH0K
IAogI2lmIEVOQUJMRShKSVQpCi12b2lkIEV2YWxFeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXpl
ZENvZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBFdmFsRXhlY3V0YWJsZTo6amV0
dGlzb25PcHRpbWl6ZWRDb2RlKFZNJiB2bSkKIHsKLSAgICBqZXR0aXNvbkNvZGVCbG9jayhnbG9i
YWxEYXRhLCBtX2V2YWxDb2RlQmxvY2spOworICAgIGpldHRpc29uQ29kZUJsb2NrKHZtLCBtX2V2
YWxDb2RlQmxvY2spOwogICAgIG1faml0Q29kZUZvckNhbGwgPSBtX2V2YWxDb2RlQmxvY2stPmdl
dEpJVENvZGUoKTsKICAgICBBU1NFUlQoIW1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7
CiB9CkBAIC0yNzcsOSArMjc3LDkgQEAgdm9pZCBFdmFsRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkK
IEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIFBhcnNlckVycm9yIGVycm9yOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAg
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCk7Ci0gICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFtTm9kZSA9IHBhcnNlPFBy
b2dyYW1Ob2RlPihnbG9iYWxEYXRhLCBtX3NvdXJjZSwgMCwgSWRlbnRpZmllcigpLCBKU1BhcnNl
Tm9ybWFsLCBQcm9ncmFtTm9kZTo6aXNGdW5jdGlvbk5vZGUgPyBKU1BhcnNlRnVuY3Rpb25Db2Rl
IDogSlNQYXJzZVByb2dyYW1Db2RlLCBlcnJvcik7CisgICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBw
cm9ncmFtTm9kZSA9IHBhcnNlPFByb2dyYW1Ob2RlPih2bSwgbV9zb3VyY2UsIDAsIElkZW50aWZp
ZXIoKSwgSlNQYXJzZU5vcm1hbCwgUHJvZ3JhbU5vZGU6OmlzRnVuY3Rpb25Ob2RlID8gSlNQYXJz
ZUZ1bmN0aW9uQ29kZSA6IEpTUGFyc2VQcm9ncmFtQ29kZSwgZXJyb3IpOwogICAgIGlmIChwcm9n
cmFtTm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgQVNTRVJUKGVycm9yLm1fdHlwZSAhPSBQ
YXJzZXJFcnJvcjo6RXJyb3JOb25lKTsKQEAgLTI4OCw3ICsyODgsNyBAQCBKU09iamVjdCogUHJv
Z3JhbUV4ZWN1dGFibGU6OmNoZWNrU3ludGF4CiAKIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJs
ZTo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCB1bnNp
Z25lZCBieXRlY29kZUluZGV4KQogewotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPmdsb2JhbERh
dGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgp
LmR5bmFtaWNHbG9iYWxPYmplY3QpOwogICAgIEFTU0VSVCghIW1fcHJvZ3JhbUNvZGVCbG9jayk7
CiAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAgICBpZiAobV9wcm9ncmFtQ29kZUJsb2NrLT5n
ZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6dG9wVGllckpJVCgpKQpAQCAtMzM4LDkgKzMzOCw5IEBA
IEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGUKIH0KIAogI2lmIEVOQUJM
RShKSVQpCi12b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6amV0dGlzb25P
cHRpbWl6ZWRDb2RlKFZNJiB2bSkKIHsKLSAgICBqZXR0aXNvbkNvZGVCbG9jayhnbG9iYWxEYXRh
LCBtX3Byb2dyYW1Db2RlQmxvY2spOworICAgIGpldHRpc29uQ29kZUJsb2NrKHZtLCBtX3Byb2dy
YW1Db2RlQmxvY2spOwogICAgIG1faml0Q29kZUZvckNhbGwgPSBtX3Byb2dyYW1Db2RlQmxvY2st
PmdldEpJVENvZGUoKTsKICAgICBBU1NFUlQoIW1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVj
ayk7CiB9CkBAIC0zNzMsMjEgKzM3MywyMSBAQCBpbnQgUHJvZ3JhbUV4ZWN1dGFibGU6OmFkZEds
b2JhbFZhcihKU0dsCiAgICAgcmV0dXJuIGluZGV4OwogfQogCi1KU09iamVjdCogUHJvZ3JhbUV4
ZWN1dGFibGU6OmluaXRpYWxpemVHbG9iYWxQcm9wZXJ0aWVzKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTU2NvcGUqIHNjb3BlKQorSlNPYmplY3QqIFBy
b2dyYW1FeGVjdXRhYmxlOjppbml0aWFsaXplR2xvYmFsUHJvcGVydGllcyhWTSYgdm0sIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBKU1Njb3BlKiBzY29wZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChz
Y29wZSk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlLT5nbG9iYWxP
YmplY3QoKTsKICAgICBSRUxFQVNFX0FTU0VSVChnbG9iYWxPYmplY3QpOwotICAgIEFTU0VSVCgm
Z2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkgPT0gJmdsb2JhbERhdGEpOworICAgIEFTU0VSVCgm
Z2xvYmFsT2JqZWN0LT52bSgpID09ICZ2bSk7CiAKICAgICBKU09iamVjdCogZXhjZXB0aW9uID0g
MDsKICAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZSA9IGdsb2JhbE9i
amVjdC0+Y3JlYXRlUHJvZ3JhbUNvZGVCbG9jayhjYWxsRnJhbWUsIHRoaXMsICZleGNlcHRpb24p
OwogICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgIHJldHVybiBleGNlcHRpb247CiAKLSAgICBt
X3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdW5saW5rZWRD
b2RlKTsKKyAgICBtX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5zZXQodm0sIHRoaXMsIHVubGlu
a2VkQ29kZSk7CiAKLSAgICBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplciBvcHRpbWl6ZXIoZ2xv
YmFsRGF0YSwgZ2xvYmFsT2JqZWN0KTsKKyAgICBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplciBv
cHRpbWl6ZXIodm0sIGdsb2JhbE9iamVjdCk7CiAKICAgICBjb25zdCBVbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2s6OlZhcmlhYmxlRGVjbGF0aW9ucyYgdmFyaWFibGVEZWNsYXJhdGlvbnMgPSB1bmxp
bmtlZENvZGUtPnZhcmlhYmxlRGVjbGFyYXRpb25zKCk7CiAgICAgY29uc3QgVW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrOjpGdW5jdGlvbkRlY2xhdGlvbnMmIGZ1bmN0aW9uRGVjbGFyYXRpb25zID0g
dW5saW5rZWRDb2RlLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpOwpAQCAtMzk5LDEyICszOTksMTIg
QEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjppbml0aWFsaXplRwogICAgIENhbGxGcmFt
ZSogZ2xvYmFsRXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbkRlY2xhcmF0aW9ucy5zaXplKCk7ICsraSkgewotICAg
ICAgICBib29sIHByb3BlcnR5RGlkRXhpc3QgPSBnbG9iYWxPYmplY3QtPnJlbW92ZURpcmVjdChn
bG9iYWxEYXRhLCBmdW5jdGlvbkRlY2xhcmF0aW9uc1tpXS5maXJzdCk7IC8vIE5ld2x5IGRlY2xh
cmVkIGZ1bmN0aW9ucyBvdmVyd3JpdGUgZXhpc3RpbmcgcHJvcGVydGllcy4KKyAgICAgICAgYm9v
bCBwcm9wZXJ0eURpZEV4aXN0ID0gZ2xvYmFsT2JqZWN0LT5yZW1vdmVEaXJlY3Qodm0sIGZ1bmN0
aW9uRGVjbGFyYXRpb25zW2ldLmZpcnN0KTsgLy8gTmV3bHkgZGVjbGFyZWQgZnVuY3Rpb25zIG92
ZXJ3cml0ZSBleGlzdGluZyBwcm9wZXJ0aWVzLgogICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSogdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUgPSBmdW5jdGlvbkRlY2xhcmF0aW9u
c1tpXS5zZWNvbmQuZ2V0KCk7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBKU0Z1bmN0aW9uOjpj
cmVhdGUoZ2xvYmFsRXhlYywgdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUtPmxpbmsoZ2xvYmFs
RGF0YSwgbV9zb3VyY2UsIGxpbmVObygpLCAwKSwgc2NvcGUpOworICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMsIHVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlLT5saW5rKHZtLCBtX3NvdXJjZSwgbGluZU5vKCksIDApLCBzY29wZSk7CiAgICAgICAg
IGludCBpbmRleCA9IGFkZEdsb2JhbFZhcihnbG9iYWxPYmplY3QsIGZ1bmN0aW9uRGVjbGFyYXRp
b25zW2ldLmZpcnN0LCBJc1ZhcmlhYmxlLAogICAgICAgICAgICAgIXByb3BlcnR5RGlkRXhpc3Qg
PyBJc0Z1bmN0aW9uVG9TcGVjaWFsaXplIDogTm90RnVuY3Rpb25Pck5vdFNwZWNpYWxpemFibGUp
OwotICAgICAgICBnbG9iYWxPYmplY3QtPnJlZ2lzdGVyQXQoaW5kZXgpLnNldChnbG9iYWxEYXRh
LCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5yZWdpc3RlckF0
KGluZGV4KS5zZXQodm0sIGdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIH0KIAogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgdmFyaWFibGVEZWNsYXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKQEAg
LTQ1Niw3ICs0NTYsNyBAQCBGdW5jdGlvbkNvZGVCbG9jayogRnVuY3Rpb25FeGVjdXRhYmxlOjpi
CiAKIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxs
KEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgp
CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxP
YmplY3QpOworICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuZHluYW1pY0dsb2JhbE9iamVj
dCk7CiAgICAgQVNTRVJUKCEhbV9jb2RlQmxvY2tGb3JDYWxsKTsKICAgICBKU09iamVjdCogZXJy
b3IgPSAwOwogICAgIGlmIChtX2NvZGVCbG9ja0ZvckNhbGwtPmdldEpJVFR5cGUoKSAhPSBKSVRD
b2RlOjp0b3BUaWVySklUKCkpCkBAIC00NjcsNyArNDY3LDcgQEAgSlNPYmplY3QqIEZ1bmN0aW9u
RXhlY3V0YWJsZTo6Y29tcGlsZU9wdAogCiBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpj
b21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2Nv
cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+
Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOworICAgIFJFTEVBU0VfQVNTRVJUKGV4
ZWMtPnZtKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CiAgICAgQVNTRVJUKCEhbV9jb2RlQmxvY2tG
b3JDb25zdHJ1Y3QpOwogICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAgICAgaWYgKG1fY29kZUJs
b2NrRm9yQ29uc3RydWN0LT5nZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6dG9wVGllckpJVCgpKQpA
QCAtNDkzLDEyICs0OTMsMTIgQEAgUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gRnVuY3Rp
b25FeAogICAgIGlmICghIWNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQpKQogICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKENvZGVCbG9jazo6Q29weVBh
cnNlZEJsb2NrLCAqY29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCkpKTsKIAotICAgIEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IHNjb3BlLT5nbG9iYWxEYXRhKCk7CisgICAgVk0qIHZt
ID0gc2NvcGUtPnZtKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3Bl
LT5nbG9iYWxPYmplY3QoKTsKICAgICBQYXJzZXJFcnJvciBlcnJvcjsKICAgICBEZWJ1Z2dlck1v
ZGUgZGVidWdnZXJNb2RlID0gZ2xvYmFsT2JqZWN0LT5oYXNEZWJ1Z2dlcigpID8gRGVidWdnZXJP
biA6IERlYnVnZ2VyT2ZmOwogICAgIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUgPSBnbG9iYWxP
YmplY3QtPmhhc1Byb2ZpbGVyKCkgPyBQcm9maWxlck9uIDogUHJvZmlsZXJPZmY7Ci0gICAgVW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2sgPSBtX3VubGlua2VkRXhl
Y3V0YWJsZS0+Y29kZUJsb2NrRm9yKCpnbG9iYWxEYXRhLCBzY29wZSwgbV9zb3VyY2UsIHNwZWNp
YWxpemF0aW9uS2luZCwgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUsIGVycm9yKTsKKyAgICBV
bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jayA9IG1fdW5saW5rZWRF
eGVjdXRhYmxlLT5jb2RlQmxvY2tGb3IoKnZtLCBzY29wZSwgbV9zb3VyY2UsIHNwZWNpYWxpemF0
aW9uS2luZCwgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUsIGVycm9yKTsKICAgICByZWNvcmRQ
YXJzZShtX3VubGlua2VkRXhlY3V0YWJsZS0+ZmVhdHVyZXMoKSwgbV91bmxpbmtlZEV4ZWN1dGFi
bGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIGxpbmVObygpLCBsYXN0TGluZSgpKTsKIAogICAg
IGlmICghdW5saW5rZWRDb2RlQmxvY2spIHsKQEAgLTU4NSwxNiArNTg1LDE2IEBAIEpTT2JqZWN0
KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKIH0KIAogI2lmIEVOQUJMRShKSVQpCi12
b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6amV0dGlzb25P
cHRpbWl6ZWRDb2RlRm9yQ2FsbChWTSYgdm0pCiB7Ci0gICAgamV0dGlzb25Db2RlQmxvY2soZ2xv
YmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDYWxsKTsKKyAgICBqZXR0aXNvbkNvZGVCbG9jayh2bSwg
bV9jb2RlQmxvY2tGb3JDYWxsKTsKICAgICBtX2ppdENvZGVGb3JDYWxsID0gbV9jb2RlQmxvY2tG
b3JDYWxsLT5nZXRKSVRDb2RlKCk7CiAgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNr
ID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5nZXRKSVRDb2RlV2l0aEFyaXR5Q2hlY2soKTsKIH0KIAot
dm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVj
dChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6amV0
dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KFZNJiB2bSkKIHsKLSAgICBqZXR0aXNvbkNv
ZGVCbG9jayhnbG9iYWxEYXRhLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CisgICAgamV0dGlz
b25Db2RlQmxvY2sodm0sIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKICAgICBtX2ppdENvZGVG
b3JDb25zdHJ1Y3QgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+Z2V0SklUQ29kZSgpOwogICAg
IG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gbV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QtPmdldEpJVENvZGVXaXRoQXJpdHlDaGVjaygpOwogfQpAQCAtNjU4LDcgKzY1OCw3IEBA
IEZ1bmN0aW9uRXhlY3V0YWJsZSogRnVuY3Rpb25FeGVjdXRhYmxlOjoKICAgICB1bnNpZ25lZCBz
dGFydE9mZnNldCA9IHNvdXJjZS5zdGFydE9mZnNldCgpICsgdW5saW5rZWRGdW5jdGlvbi0+c3Rh
cnRPZmZzZXQoKTsKICAgICB1bnNpZ25lZCBzb3VyY2VMZW5ndGggPSB1bmxpbmtlZEZ1bmN0aW9u
LT5zb3VyY2VMZW5ndGgoKTsKICAgICBTb3VyY2VDb2RlIGZ1bmN0aW9uU291cmNlKHNvdXJjZS5w
cm92aWRlcigpLCBzdGFydE9mZnNldCwgc3RhcnRPZmZzZXQgKyBzb3VyY2VMZW5ndGgsIGZpcnN0
TGluZSk7Ci0gICAgcmV0dXJuIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZnVuY3Rpb25Tb3VyY2UsIHVubGlua2VkRnVuY3Rpb24sIGZpcnN0TGluZSwgdW5s
aW5rZWRGdW5jdGlvbi0+bGluZUNvdW50KCkpOworICAgIHJldHVybiBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmNyZWF0ZShleGVjLT52bSgpLCBmdW5jdGlvblNvdXJjZSwgdW5saW5rZWRGdW5jdGlvbiwg
Zmlyc3RMaW5lLCB1bmxpbmtlZEZ1bmN0aW9uLT5saW5lQ291bnQoKSk7CiB9CiAKIFN0cmluZyBG
dW5jdGlvbkV4ZWN1dGFibGU6OnBhcmFtU3RyaW5nKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNjgsMTYgKzY4LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IE5VTV9QQVJBTUVURVJTX0lTX0hPU1QgPSAwOwogICAgICAgICBzdGF0aWMgY29uc3QgaW50
IE5VTV9QQVJBTUVURVJTX05PVF9DT01QSUxFRCA9IC0xOwogCi0gICAgICAgIEV4ZWN1dGFibGVC
YXNlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludCBu
dW1QYXJhbWV0ZXJzKQotICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgc3RydWN0dXJl
KQorICAgICAgICBFeGVjdXRhYmxlQmFzZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBp
bnQgbnVtUGFyYW1ldGVycykKKyAgICAgICAgICAgIDogSlNDZWxsKHZtLCBzdHJ1Y3R1cmUpCiAg
ICAgICAgICAgICAsIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwobnVtUGFyYW1ldGVycykKICAgICAg
ICAgICAgICwgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0KG51bVBhcmFtZXRlcnMpCiAgICAg
ICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQorICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAg
ICAgICAgewotICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Cisg
ICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIH0KIAogICAgIHB1
YmxpYzoKQEAgLTEwMiw3ICsxMDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJl
dHVybiBtX251bVBhcmFtZXRlcnNGb3JDYWxsID09IE5VTV9QQVJBTUVURVJTX0lTX0hPU1Q7CiAg
ICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvKSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxP
YmplY3QsIHByb3RvLCBUeXBlSW5mbyhDb21wb3VuZFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7IH0KKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykgeyByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKENvbXBv
dW5kVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgfQogICAgICAgICAKICAgICAgICAg
dm9pZCBjbGVhckNvZGUoKTsKIApAQCAtMjcxLDI2ICsyNzEsMjYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHR5cGVkZWYgRXhlY3V0YWJsZUJhc2UgQmFzZTsKIAogI2lmIEVOQUJMRShKSVQp
Ci0gICAgICAgIHN0YXRpYyBOYXRpdmVFeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2FsbFRodW5rLCBOYXRpdmVGdW5jdGlv
biBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvbnN0cnVjdFRodW5rLCBOYXRpdmVG
dW5jdGlvbiBjb25zdHJ1Y3RvciwgSW50cmluc2ljIGludHJpbnNpYykKKyAgICAgICAgc3RhdGlj
IE5hdGl2ZUV4ZWN1dGFibGUqIGNyZWF0ZShWTSYgdm0sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
YWxsVGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
Y29uc3RydWN0VGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBJbnRyaW5zaWMgaW50
cmluc2ljKQogICAgICAgICB7CiAgICAgICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRh
YmxlOwogICAgICAgICAgICAgaWYgKCFjYWxsVGh1bmspIHsKLSAgICAgICAgICAgICAgICBleGVj
dXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8TmF0aXZlRXhlY3V0YWJsZT4oZ2xv
YmFsRGF0YS5oZWFwKSkgTmF0aXZlRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBmdW5jdGlvbiwgY29u
c3RydWN0b3IpOwotICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKGds
b2JhbERhdGEsIEpJVENvZGUoKSwgSklUQ29kZSgpLCBpbnRyaW5zaWMpOworICAgICAgICAgICAg
ICAgIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxOYXRpdmVFeGVjdXRh
YmxlPih2bS5oZWFwKSkgTmF0aXZlRXhlY3V0YWJsZSh2bSwgZnVuY3Rpb24sIGNvbnN0cnVjdG9y
KTsKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbih2bSwgSklUQ29k
ZSgpLCBKSVRDb2RlKCksIGludHJpbnNpYyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxOYXRpdmVF
eGVjdXRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBOYXRpdmVFeGVjdXRhYmxlKGdsb2JhbERhdGEs
IGZ1bmN0aW9uLCBjb25zdHJ1Y3Rvcik7Ci0gICAgICAgICAgICAgICAgZXhlY3V0YWJsZS0+Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgSklUQ29kZTo6SG9zdEZ1bmN0aW9uKGNhbGxUaHVuayks
IEpJVENvZGU6Okhvc3RGdW5jdGlvbihjb25zdHJ1Y3RUaHVuayksIGludHJpbnNpYyk7CisgICAg
ICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE5hdGl2
ZUV4ZWN1dGFibGU+KHZtLmhlYXApKSBOYXRpdmVFeGVjdXRhYmxlKHZtLCBmdW5jdGlvbiwgY29u
c3RydWN0b3IpOworICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKHZt
LCBKSVRDb2RlOjpIb3N0RnVuY3Rpb24oY2FsbFRodW5rKSwgSklUQ29kZTo6SG9zdEZ1bmN0aW9u
KGNvbnN0cnVjdFRodW5rKSwgaW50cmluc2ljKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHJldHVybiBleGVjdXRhYmxlOwogICAgICAgICB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShMTElO
VF9DX0xPT1ApCi0gICAgICAgIHN0YXRpYyBOYXRpdmVFeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rp
b24gY29uc3RydWN0b3IpCisgICAgICAgIHN0YXRpYyBOYXRpdmVFeGVjdXRhYmxlKiBjcmVhdGUo
Vk0mIHZtLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0
b3IpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghZ2xvYmFsRGF0YS5jYW5Vc2VKSVQo
KSk7Ci0gICAgICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8TmF0aXZlRXhlY3V0YWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgTmF0
aXZlRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBmdW5jdGlvbiwgY29uc3RydWN0b3IpOwotICAgICAg
ICAgICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgICAg
ICBBU1NFUlQoIXZtLmNhblVzZUpJVCgpKTsKKyAgICAgICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxOYXRpdmVFeGVjdXRhYmxl
Pih2bS5oZWFwKSkgTmF0aXZlRXhlY3V0YWJsZSh2bSwgZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsK
KyAgICAgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgICAg
IHJldHVybiBleGVjdXRhYmxlOwogICAgICAgICB9CiAjZW5kaWYKQEAgLTMyMCw3ICszMjAsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTmF0
aXZlRXhlY3V0YWJsZSwgbV9jb25zdHJ1Y3Rvcik7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKSB7IHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhM
ZWFmVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgfQorICAgICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvKSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90bywgVHlwZUluZm8oTGVhZlR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7IH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwog
CkBAIC0zMjgsOSArMzI4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwcm90ZWN0ZWQ6CiAj
aWYgRU5BQkxFKEpJVCkKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpJVENvZGUgY2FsbFRodW5rLCBKSVRDb2RlIGNvbnN0cnVjdFRodW5rLCBJ
bnRyaW5zaWMgaW50cmluc2ljKQorICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
SklUQ29kZSBjYWxsVGh1bmssIEpJVENvZGUgY29uc3RydWN0VGh1bmssIEludHJpbnNpYyBpbnRy
aW5zaWMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2Jh
bERhdGEpOworICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICAg
ICAgbV9qaXRDb2RlRm9yQ2FsbCA9IGNhbGxUaHVuazsKICAgICAgICAgICAgIG1faml0Q29kZUZv
ckNvbnN0cnVjdCA9IGNvbnN0cnVjdFRodW5rOwogICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2Fs
bFdpdGhBcml0eUNoZWNrID0gY2FsbFRodW5rLmFkZHJlc3NGb3JDYWxsKCk7CkBAIC0zNDAsOCAr
MzQwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogICAgIHByaXZhdGU6Ci0gICAgICAg
IE5hdGl2ZUV4ZWN1dGFibGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlv
biBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpCi0gICAgICAgICAgICA6IEV4
ZWN1dGFibGVCYXNlKGdsb2JhbERhdGEsIGdsb2JhbERhdGEubmF0aXZlRXhlY3V0YWJsZVN0cnVj
dHVyZS5nZXQoKSwgTlVNX1BBUkFNRVRFUlNfSVNfSE9TVCkKKyAgICAgICAgTmF0aXZlRXhlY3V0
YWJsZShWTSYgdm0sIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25z
dHJ1Y3RvcikKKyAgICAgICAgICAgIDogRXhlY3V0YWJsZUJhc2Uodm0sIHZtLm5hdGl2ZUV4ZWN1
dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIE5VTV9QQVJBTUVURVJTX0lTX0hPU1QpCiAgICAgICAgICAg
ICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCiAgICAgICAgICAgICAsIG1fY29uc3RydWN0b3IoY29u
c3RydWN0b3IpCiAgICAgICAgIHsKQEAgLTM1NywxNSArMzU3LDE1IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBFeGVjdXRhYmxlQmFzZSBCYXNlOwogCi0g
ICAgICAgIFNjcmlwdEV4ZWN1dGFibGUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29sIGlzSW5TdHJpY3RD
b250ZXh0KQotICAgICAgICAgICAgOiBFeGVjdXRhYmxlQmFzZShnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUsIE5VTV9QQVJBTUVURVJTX05PVF9DT01QSUxFRCkKKyAgICAgICAgU2NyaXB0RXhlY3V0YWJs
ZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IGJvb2wgaXNJblN0cmljdENvbnRleHQpCisgICAgICAgICAgICA6IEV4ZWN1dGFibGVCYXNlKHZt
LCBzdHJ1Y3R1cmUsIE5VTV9QQVJBTUVURVJTX05PVF9DT01QSUxFRCkKICAgICAgICAgICAgICwg
bV9zb3VyY2Uoc291cmNlKQogICAgICAgICAgICAgLCBtX2ZlYXR1cmVzKGlzSW5TdHJpY3RDb250
ZXh0ID8gU3RyaWN0TW9kZUZlYXR1cmUgOiAwKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAg
ICAgICBTY3JpcHRFeGVjdXRhYmxlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCkKLSAg
ICAgICAgICAgIDogRXhlY3V0YWJsZUJhc2UoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUs
IE5VTV9QQVJBTUVURVJTX05PVF9DT01QSUxFRCkKKyAgICAgICAgICAgIDogRXhlY3V0YWJsZUJh
c2UoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQpCiAg
ICAgICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAgICAgICAgICwgbV9mZWF0dXJlcyhp
c0luU3RyaWN0Q29udGV4dCA/IFN0cmljdE1vZGVGZWF0dXJlIDogMCkKICAgICAgICAgewpAQCAt
NDAzLDE0ICs0MDMsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCisgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICAgICAgICAgIGds
b2JhbERhdGEuaGVhcC5hZGRDb21waWxlZENvZGUodGhpcyk7IC8vIEJhbGFuY2VkIGJ5IEhlYXA6
OmRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCkuCisgICAgICAgICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CisgICAgICAgICAgICB2bS5oZWFwLmFkZENvbXBpbGVkQ29kZSh0aGlzKTsg
Ly8gQmFsYW5jZWQgYnkgSGVhcDo6ZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKS4KIAogI2lm
IEVOQUJMRShDT0RFQkxPQ0tfU0FNUExJTkcpCi0gICAgICAgICAgICBpZiAoU2FtcGxpbmdUb29s
KiBzYW1wbGVyID0gZ2xvYmFsRGF0YS5pbnRlcnByZXRlci0+c2FtcGxlcigpKQotICAgICAgICAg
ICAgICAgIHNhbXBsZXItPm5vdGlmeU9mU2NvcGUoZ2xvYmFsRGF0YSwgdGhpcyk7CisgICAgICAg
ICAgICBpZiAoU2FtcGxpbmdUb29sKiBzYW1wbGVyID0gdm0uaW50ZXJwcmV0ZXItPnNhbXBsZXIo
KSkKKyAgICAgICAgICAgICAgICBzYW1wbGVyLT5ub3RpZnlPZlNjb3BlKHZtLCB0aGlzKTsKICNl
bmRpZgogICAgICAgICB9CiAKQEAgLTQzMCw3ICs0MzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICBKU09iamVjdCogY29tcGlsZShFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3Bl
KQogICAgICAgICB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChleGVjLT5nbG9iYWxEYXRh
KCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChleGVj
LT52bSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgSlNPYmplY3QqIGVycm9y
ID0gMDsKICAgICAgICAgICAgIGlmICghbV9ldmFsQ29kZUJsb2NrKQogICAgICAgICAgICAgICAg
IGVycm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNjb3BlLCBKSVRDb2RlOjpib3R0b21UaWVy
SklUKCkpOwpAQCAtNDQxLDcgKzQ0MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU09i
amVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCk7CiAgICAgICAgIAogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIHZvaWQgamV0
dGlzb25PcHRpbWl6ZWRDb2RlKEpTR2xvYmFsRGF0YSYpOworICAgICAgICB2b2lkIGpldHRpc29u
T3B0aW1pemVkQ29kZShWTSYpOwogICAgICAgICBib29sIGppdENvbXBpbGUoRXhlY1N0YXRlKik7
CiAjZW5kaWYKIApAQCAtNDU0LDcgKzQ1NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBz
dGF0aWMgRXZhbEV4ZWN1dGFibGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCkgCiAgICAgICAgIHsKICAgICAg
ICAgICAgIEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8RXZhbEV4ZWN1dGFibGU+KCpleGVjLT5oZWFwKCkpKSBFdmFsRXhlY3V0YWJsZShleGVj
LCBzb3VyY2UsIGlzSW5TdHJpY3RDb250ZXh0KTsKLSAgICAgICAgICAgIGV4ZWN1dGFibGUtPmZp
bmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgICAgICBleGVjdXRhYmxl
LT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKICAgICAgICAgICAgIHJldHVybiBleGVjdXRh
YmxlOwogICAgICAgICB9CiAKQEAgLTQ2NCw5ICs0NjQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpOwogICAgICAgICB9CiAj
ZW5kaWYKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90bykKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9i
amVjdCwgcHJvdG8sIFR5cGVJbmZvKEV2YWxFeGVjdXRhYmxlVHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oRXZhbEV4ZWN1dGFibGVUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8pOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgY29u
c3QgQ2xhc3NJbmZvIHNfaW5mbzsKQEAgLTQ5NiwxOCArNDk2LDE4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBzdGF0aWMgUHJvZ3JhbUV4ZWN1dGFibGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKICAgICAgICAgewogICAgICAgICAgICAgUHJv
Z3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQ
cm9ncmFtRXhlY3V0YWJsZT4oKmV4ZWMtPmhlYXAoKSkpIFByb2dyYW1FeGVjdXRhYmxlKGV4ZWMs
IHNvdXJjZSk7Ci0gICAgICAgICAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihleGVjLT5n
bG9iYWxEYXRhKCkpOworICAgICAgICAgICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24oZXhl
Yy0+dm0oKSk7CiAgICAgICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTsKICAgICAgICAgfQogCiAK
LSAgICAgICAgSlNPYmplY3QqIGluaXRpYWxpemVHbG9iYWxQcm9wZXJ0aWVzKEpTR2xvYmFsRGF0
YSYsIENhbGxGcmFtZSosIEpTU2NvcGUqKTsKKyAgICAgICAgSlNPYmplY3QqIGluaXRpYWxpemVH
bG9iYWxQcm9wZXJ0aWVzKFZNJiwgQ2FsbEZyYW1lKiwgSlNTY29wZSopOwogCiAgICAgICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGUo
RXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSkKICAgICAgICAgewotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5keW5hbWljR2xvYmFsT2JqZWN0
KTsKICAgICAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAgICAgICAgICAgICBpZiAoIW1f
cHJvZ3JhbUNvZGVCbG9jaykKICAgICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5h
bChleGVjLCBzY29wZSwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKTsKQEAgLTUxOCw3ICs1MTgs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQo
RXhlY1N0YXRlKiwgSlNTY29wZSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAK
ICNpZiBFTkFCTEUoSklUKQotICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZShKU0ds
b2JhbERhdGEmKTsKKyAgICAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGUoVk0mKTsKICAg
ICAgICAgYm9vbCBqaXRDb21waWxlKEV4ZWNTdGF0ZSopOwogI2VuZGlmCiAKQEAgLTUzNyw5ICs1
MzcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIAotICAg
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorICAg
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQogICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90
bywgVHlwZUluZm8oUHJvZ3JhbUV4ZWN1dGFibGVUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvLCBUeXBlSW5mbyhQcm9ncmFtRXhlY3V0YWJsZVR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25zdCBD
bGFzc0luZm8gc19pbmZvOwpAQCAtNTcyLDEwICs1NzIsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIFNjcmlwdEV4ZWN1dGFibGUgQmFzZTsKIAotICAg
ICAgICBzdGF0aWMgRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUsIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGFz
dExpbmUpCisgICAgICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShWTSYgdm0s
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVu
bGlua2VkRXhlY3V0YWJsZSwgdW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsYXN0TGluZSkK
ICAgICAgICAgewotICAgICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RnVuY3Rpb25FeGVjdXRhYmxlPihnbG9iYWxEYXRh
LmhlYXApKSBGdW5jdGlvbkV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgc291cmNlLCB1bmxpbmtlZEV4
ZWN1dGFibGUsIGZpcnN0TGluZSwgbGFzdExpbmUpOwotICAgICAgICAgICAgZXhlY3V0YWJsZS0+
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBGdW5jdGlvbkV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxGdW5jdGlvbkV4ZWN1
dGFibGU+KHZtLmhlYXApKSBGdW5jdGlvbkV4ZWN1dGFibGUodm0sIHNvdXJjZSwgdW5saW5rZWRF
eGVjdXRhYmxlLCBmaXJzdExpbmUsIGxhc3RMaW5lKTsKKyAgICAgICAgICAgIGV4ZWN1dGFibGUt
PmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgICAgIHJldHVybiBleGVjdXRhYmxlOwogICAg
ICAgICB9CiAgICAgICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUqIGZyb21HbG9iYWxDb2Rl
KGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEV4ZWNTdGF0ZSosIERlYnVnZ2VyKiwgY29uc3QgU291
cmNlQ29kZSYsIEpTT2JqZWN0KiogZXhjZXB0aW9uKTsKQEAgLTYwMiw3ICs2MDIsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNhbGwoRXhlY1N0YXRl
KiBleGVjLCBKU1Njb3BlKiBzY29wZSkKICAgICAgICAgewotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKICAgICAg
ICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAgICAgICAgICAgICBpZiAoIW1fY29kZUJsb2Nr
Rm9yQ2FsbCkKICAgICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwo
ZXhlYywgc2NvcGUsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7CkBAIC02MTMsNyArNjEzLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9y
Q2FsbChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CiAgICAg
ICAgIAogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2Rl
Rm9yQ2FsbChKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENv
ZGVGb3JDYWxsKFZNJik7CiAgICAgICAgIGJvb2wgaml0Q29tcGlsZUZvckNhbGwoRXhlY1N0YXRl
Kik7CiAjZW5kaWYKIApAQCAtNjMwLDcgKzYzMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNTY29w
ZSogc2NvcGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPmds
b2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGV4ZWMtPnZtKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICBKU09iamVj
dCogZXJyb3IgPSAwOwogICAgICAgICAgICAgaWYgKCFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCkK
ICAgICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChleGVj
LCBzY29wZSwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKTsKQEAgLTY0MSw3ICs2NDEsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25z
dHJ1Y3QoRXhlY1N0YXRlKiwgSlNTY29wZSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogICAg
ICAgICAKICNpZiBFTkFCTEUoSklUKQotICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29k
ZUZvckNvbnN0cnVjdChKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgdm9pZCBqZXR0aXNvbk9wdGlt
aXplZENvZGVGb3JDb25zdHJ1Y3QoVk0mKTsKICAgICAgICAgYm9vbCBqaXRDb21waWxlRm9yQ29u
c3RydWN0KEV4ZWNTdGF0ZSopOwogI2VuZGlmCiAKQEAgLTY4MSwxMyArNjgxLDEzIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIAogI2lmIEVOQUJMRShKSVQpCi0gICAgICAg
IHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1p
emVkQ29kZUZvcihWTSYgdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKICAgICAgICAg
ewogICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIAotICAgICAgICAgICAgICAg
IGpldHRpc29uT3B0aW1pemVkQ29kZUZvckNhbGwoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICAg
ICAgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbCh2bSk7CiAgICAgICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICAg
ICAgICAgICAgICBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QoZ2xvYmFsRGF0YSk7
CisgICAgICAgICAgICAgICAgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KHZtKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKQEAgLTczMyw5ICs3MzMsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBjbGVhckNvZGVJZk5vdENvbXBpbGluZygpOwog
ICAgICAgICB2b2lkIGNsZWFyVW5saW5rZWRDb2RlRm9yUmVjb21waWxhdGlvbklmTm90Q29tcGls
aW5nKCk7CiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90bykKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKICAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2Jh
bE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpAQCAtNzQ1LDcgKzc0NSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkIGNsZWFyQ29kZSgpOwogCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFNvdXJjZUNvZGUm
LCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSosIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWdu
ZWQgbGFzdExpbmUpOworICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUoVk0mLCBjb25zdCBTb3Vy
Y2VDb2RlJiwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqLCB1bnNpZ25lZCBmaXJzdExpbmUs
IHVuc2lnbmVkIGxhc3RMaW5lKTsKIAogICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNhbGxJ
bnRlcm5hbChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgSklUQ29kZTo6SklUVHlwZSwgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCA9IFVJTlRfTUFYKTsKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JD
b25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgSklUQ29kZTo6SklUVHlwZSwg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IFVJTlRfTUFYKTsKQEAgLTc3NSwxMCArNzc1LDEwIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0OwogICAgIH07CiAKLSAgICBpbmxpbmUgSlNGdW5jdGlvbjo6SlNG
dW5jdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhl
Y3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCi0gICAgICAgIDogQmFzZShnbG9iYWxEYXRhLCBzY29w
ZS0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCkpCi0gICAgICAgICwgbV9leGVj
dXRhYmxlKGdsb2JhbERhdGEsIHRoaXMsIGV4ZWN1dGFibGUpCi0gICAgICAgICwgbV9zY29wZShn
bG9iYWxEYXRhLCB0aGlzLCBzY29wZSkKKyAgICBpbmxpbmUgSlNGdW5jdGlvbjo6SlNGdW5jdGlv
bihWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUp
CisgICAgICAgIDogQmFzZSh2bSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVj
dHVyZSgpKQorICAgICAgICAsIG1fZXhlY3V0YWJsZSh2bSwgdGhpcywgZXhlY3V0YWJsZSkKKyAg
ICAgICAgLCBtX3Njb3BlKHZtLCB0aGlzLCBzY29wZSkKICAgICAgICAgLCBtX2FsbG9jYXRpb25Q
cm9maWxlV2F0Y2hwb2ludChJbml0aWFsaXplZEJsaW5kKSAvLyBTZWUgY29tbWVudCBpbiBKU0Z1
bmN0aW9uLmNwcCBjb25jZXJuaW5nIHRoZSByZWFzb24gZm9yIHVzaW5nIEluaXRpYWxpemVkQmxp
bmQgYXMgb3Bwb3NlZCB0byBJbml0aWFsaXplZFdhdGNoaW5nLgogICAgIHsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5o
CShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRpb25IYXJuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEwICs0MSwxMCBAQCBpbmxpbmUg
Ym9vbCBwcmVwYXJlRm9yRXhlY3V0aW9uKEV4ZWNTdGF0CiAjaWYgRU5BQkxFKExMSU5UKQogICAg
IGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkgewogICAgICAgICAvLyBTdGFy
dCBvZmYgaW4gdGhlIGxvdyBsZXZlbCBpbnRlcnByZXRlci4KLSAgICAgICAgTExJbnQ6OmdldEVu
dHJ5cG9pbnQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2suZ2V0KCksIGppdENvZGUpOwor
ICAgICAgICBMTEludDo6Z2V0RW50cnlwb2ludChleGVjLT52bSgpLCBjb2RlQmxvY2suZ2V0KCks
IGppdENvZGUpOwogICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoaml0Q29kZSwgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyKCkpOwotICAgICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLm1fcGVy
Qnl0ZWNvZGVQcm9maWxlcikKLSAgICAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5tX3BlckJ5
dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zvcihjb2RlQmxvY2suZ2V0KCkpOworICAg
ICAgICBpZiAoZXhlYy0+dm0oKS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCisgICAgICAgICAgICBl
eGVjLT52bSgpLm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKGNvZGVC
bG9jay5nZXQoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZiAvLyBFTkFC
TEUoTExJTlQpCkBAIC01NiwxMCArNTYsMTAgQEAgaW5saW5lIGJvb2wgcHJlcGFyZUZ1bmN0aW9u
Rm9yRXhlY3V0aW9uKAogI2lmIEVOQUJMRShMTElOVCkKICAgICBpZiAoSklUQ29kZTo6aXNCYXNl
bGluZUNvZGUoaml0VHlwZSkpIHsKICAgICAgICAgLy8gU3RhcnQgb2ZmIGluIHRoZSBsb3cgbGV2
ZWwgaW50ZXJwcmV0ZXIuCi0gICAgICAgIExMSW50OjpnZXRGdW5jdGlvbkVudHJ5cG9pbnQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBraW5kLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwor
ICAgICAgICBMTEludDo6Z2V0RnVuY3Rpb25FbnRyeXBvaW50KGV4ZWMtPnZtKCksIGtpbmQsIGpp
dENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjayk7CiAgICAgICAgIGNvZGVCbG9jay0+c2V0SklU
Q29kZShqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwotICAgICAgICBpZiAoZXhlYy0+
Z2xvYmFsRGF0YSgpLm1fcGVyQnl0ZWNvZGVQcm9maWxlcikKLSAgICAgICAgICAgIGV4ZWMtPmds
b2JhbERhdGEoKS5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zvcihjb2Rl
QmxvY2suZ2V0KCkpOworICAgICAgICBpZiAoZXhlYy0+dm0oKS5tX3BlckJ5dGVjb2RlUHJvZmls
ZXIpCisgICAgICAgICAgICBleGVjLT52bSgpLm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJl
Qnl0ZWNvZGVzRm9yKGNvZGVCbG9jay5nZXQoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDExICs0NiwxMSBAQCBGdW5jdGlvbkNvbnN0cnVjdG9yOjpGdW5jdGlvbkNvbnN0
cnVjdG9yCiAKIHZvaWQgRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0
YXRlKiBleGVjLCBGdW5jdGlvblByb3RvdHlwZSogZnVuY3Rpb25Qcm90b3R5cGUpCiB7Ci0gICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvblByb3RvdHlw
ZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRp
b24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBm
dW5jdGlvblByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCksIGZ1bmN0aW9uUHJvdG90eXBlLT5jbGFz
c0luZm8oKS0+Y2xhc3NOYW1lKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVj
LT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBmdW5jdGlvblByb3RvdHlw
ZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogCiAgICAgLy8gTnVtYmVyIG9m
IGFyZ3VtZW50cyBmb3IgY29uc3RydWN0b3IKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVt
YmVyKDEpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCwganNOdW1iZXIoMSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KIAog
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2l0aEZ1bmN0aW9u
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMTQ4NjM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAKKyAgICAgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpIAogICAgICAgICB7IAotICAgICAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAKKyAgICAg
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7IAogICAg
ICAgICB9CiAKICAgICBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSwyMyArNDksMjMgQEAgRnVuY3Rpb25Qcm90b3R5cGU6OkZ1bmN0aW9u
UHJvdG90eXBlKEpTRwogCiB2b2lkIEZ1bmN0aW9uUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUpOwotICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCwganNOdW1iZXIoMCksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpLCBuYW1lKTsKKyAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBq
c051bWJlcigwKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwogfQogCiB2b2lk
IEZ1bmN0aW9uUHJvdG90eXBlOjphZGRGdW5jdGlvblByb3BlcnRpZXMoRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0Z1bmN0aW9uKiogY2FsbEZ1bmN0aW9u
LCBKU0Z1bmN0aW9uKiogYXBwbHlGdW5jdGlvbikKIHsKICAgICBKU0Z1bmN0aW9uKiB0b1N0cmlu
Z0Z1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCwgMCwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLnN0cmluZygpLCBmdW5jdGlvblByb3RvRnVuY1Rv
U3RyaW5nKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRh
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZywgdG9TdHJpbmdGdW5jdGlvbiwgRG9u
dEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS50b1N0cmluZywgdG9TdHJpbmdGdW5jdGlvbiwgRG9udEVudW0pOwog
CiAgICAgKmFwcGx5RnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCAyLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXBwbHkuc3RyaW5nKCksIGZ1bmN0aW9uUHJv
dG9GdW5jQXBwbHkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmFwcGx5LCAqYXBwbHlGdW5jdGlvbiwgRG9u
dEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5hcHBseSwgKmFwcGx5RnVuY3Rpb24sIERvbnRFbnVtKTsKIAogICAg
ICpjYWxsRnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCAx
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbC5zdHJpbmcoKSwgZnVuY3Rpb25Qcm90b0Z1bmND
YWxsKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCks
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsLCAqY2FsbEZ1bmN0aW9uLCBEb250RW51bSk7Cisg
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLmNhbGwsICpjYWxsRnVuY3Rpb24sIERvbnRFbnVtKTsKIAogICAgIEpTRnVuY3Rpb24q
IGJpbmRGdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIDEs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5iaW5kLnN0cmluZygpLCBmdW5jdGlvblByb3RvRnVuY0Jp
bmQpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmJpbmQsIGJpbmRGdW5jdGlvbiwgRG9udEVudW0pOworICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5iaW5kLCBiaW5kRnVuY3Rpb24sIERvbnRFbnVtKTsKIH0KIAogc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEZ1bmN0aW9uUHJvdG90eXBlKEV4ZWNTdGF0ZSopCkBA
IC0xODcsMTIgKzE4NywxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
UHJvCiAKICAgICAvLyBMZXQgQSBiZSBhIG5ldyAocG9zc2libHkgZW1wdHkpIGludGVybmFsIGxp
c3Qgb2YgYWxsIG9mIHRoZSBhcmd1bWVudCB2YWx1ZXMgcHJvdmlkZWQgYWZ0ZXIgdGhpc0FyZyAo
YXJnMSwgYXJnMiBldGMpLCBpbiBvcmRlci4KICAgICBzaXplX3QgbnVtQm91bmRBcmdzID0gZXhl
Yy0+YXJndW1lbnRDb3VudCgpID4gMSA/IGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAtIDEgOiAwOwot
ICAgIEpTQXJyYXkqIGJvdW5kQXJncyA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhp
bmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhVbmRlY2lkZWQpLCBudW1Cb3VuZEFyZ3Mp
OworICAgIEpTQXJyYXkqIGJvdW5kQXJncyA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlw
ZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoVW5kZWNpZGVkKSwgbnVtQm91bmRBcmdzKTsKICAg
ICBpZiAoIWJvdW5kQXJncykKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd091
dE9mTWVtb3J5RXJyb3IoZXhlYykpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1C
b3VuZEFyZ3M7ICsraSkKLSAgICAgICAgYm91bmRBcmdzLT5pbml0aWFsaXplSW5kZXgoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBpLCBleGVjLT5hcmd1bWVudChpICsgMSkpOworICAgICAgICBib3VuZEFy
Z3MtPmluaXRpYWxpemVJbmRleChleGVjLT52bSgpLCBpLCBleGVjLT5hcmd1bWVudChpICsgMSkp
OwogCiAgICAgLy8gSWYgdGhlIFtbQ2xhc3NdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBUYXJnZXQg
aXMgIkZ1bmN0aW9uIiwgdGhlbiAuLi4KICAgICAvLyBFbHNlIHNldCB0aGUgbGVuZ3RoIG93biBw
cm9wZXJ0eSBvZiBGIHRvIDAuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
dW5jdGlvblByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDkgKzM4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICB2b2lk
IGFkZEZ1bmN0aW9uUHJvcGVydGllcyhFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEpTRnVu
Y3Rpb24qKiBjYWxsRnVuY3Rpb24sIEpTRnVuY3Rpb24qKiBhcHBseUZ1bmN0aW9uKTsKICAgICAg
ICAgCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG8pCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmpl
Y3QsIHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8p
OworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwog
ICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlDYWxs
YmFjay5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcg
QEAKIAogI2luY2x1ZGUgIkFQSVNoaW1zLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUg
IkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAj
aW5jbHVkZSAiSlNPYmplY3QuaCIKIApAQCAtNTAsMTkgKzUwLDE5IEBAIGNvbnN0IGRvdWJsZSBo
b3VyID0gNjAgKiA2MDsKIAogI2lmIFVTRShDRikKIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6
OkRlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2soSGVhcCogaGVhcCkKLSAgICA6IEdDQWN0aXZpdHlD
YWxsYmFjayhoZWFwLT5nbG9iYWxEYXRhKCksIENGUnVuTG9vcEdldEN1cnJlbnQoKSkKKyAgICA6
IEdDQWN0aXZpdHlDYWxsYmFjayhoZWFwLT52bSgpLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCkpCiAg
ICAgLCBtX2RlbGF5KHNfZGVjYWRlKQogewogfQogCiBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNr
OjpEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKEhlYXAqIGhlYXAsIENGUnVuTG9vcFJlZiBydW5M
b29wKQotICAgIDogR0NBY3Rpdml0eUNhbGxiYWNrKGhlYXAtPmdsb2JhbERhdGEoKSwgcnVuTG9v
cCkKKyAgICA6IEdDQWN0aXZpdHlDYWxsYmFjayhoZWFwLT52bSgpLCBydW5Mb29wKQogICAgICwg
bV9kZWxheShzX2RlY2FkZSkKIHsKIH0KICNlbGlmIFBMQVRGT1JNKFFUKQogRGVmYXVsdEdDQWN0
aXZpdHlDYWxsYmFjazo6RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayhIZWFwKiBoZWFwKQotICAg
IDogR0NBY3Rpdml0eUNhbGxiYWNrKGhlYXAtPmdsb2JhbERhdGEoKSkKKyAgICA6IEdDQWN0aXZp
dHlDYWxsYmFjayhoZWFwLT52bSgpKQogICAgICwgbV9kZWxheShob3VyKQogewogfQpAQCAtNzAs
MTEgKzcwLDExIEBAIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OkRlZmF1bHRHQ0FjdGkKIAog
dm9pZCBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpkb1dvcmsoKQogewotICAgIEhlYXAqIGhl
YXAgPSAmbV9nbG9iYWxEYXRhLT5oZWFwOworICAgIEhlYXAqIGhlYXAgPSAmbV92bS0+aGVhcDsK
ICAgICBpZiAoIWlzRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgQVBJRW50
cnlTaGltIHNoaW0obV9nbG9iYWxEYXRhKTsKKyAgICBBUElFbnRyeVNoaW0gc2hpbShtX3ZtKTsK
ICNpZiAhUExBVEZPUk0oSU9TKQogICAgIGRvdWJsZSBzdGFydFRpbWUgPSBXVEY6Om1vbm90b25p
Y2FsbHlJbmNyZWFzaW5nVGltZSgpOwogICAgIGlmIChoZWFwLT5pc1BhZ2VkT3V0KHN0YXJ0VGlt
ZSArIHBhZ2luZ1RpbWVPdXQpKSB7CkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBEZWZhdWx0R0NB
Y3Rpdml0eUNhbGxiYWNrOjpkaWRBbGxvYwogICAgIC8vIFdlIHByZXRlbmQgaXQncyBvbmUgYnl0
ZSBzbyB0aGF0IHdlIGRvbid0IGlnbm9yZSB0aGlzIGFsbG9jYXRpb24gZW50aXJlbHkuCiAgICAg
aWYgKCFieXRlcykKICAgICAgICAgYnl0ZXMgPSAxOwotICAgIEhlYXAqIGhlYXAgPSBzdGF0aWNf
Y2FzdDxIZWFwKj4oJm1fZ2xvYmFsRGF0YS0+aGVhcCk7CisgICAgSGVhcCogaGVhcCA9IHN0YXRp
Y19jYXN0PEhlYXAqPigmbV92bS0+aGVhcCk7CiAgICAgZG91YmxlIGdjVGltZVNsaWNlID0gc3Rk
OjptaW4oKHN0YXRpY19jYXN0PGRvdWJsZT4oYnl0ZXMpIC8gTUIpICogZ2NUaW1lU2xpY2VQZXJN
QiwgbWF4R0NUaW1lU2xpY2UpOwogICAgIGRvdWJsZSBuZXdEZWxheSA9IGhlYXAtPmxhc3RHQ0xl
bmd0aCgpIC8gZ2NUaW1lU2xpY2U7CiAgICAgc2NoZWR1bGVUaW1lcihuZXdEZWxheSk7CkBAIC0x
NDMsNyArMTQzLDcgQEAgdm9pZCBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpjYW5jZWwoKQog
I2Vsc2UKIAogRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6RGVmYXVsdEdDQWN0aXZpdHlDYWxs
YmFjayhIZWFwKiBoZWFwKQotICAgIDogR0NBY3Rpdml0eUNhbGxiYWNrKGhlYXAtPmdsb2JhbERh
dGEoKSkKKyAgICA6IEdDQWN0aXZpdHlDYWxsYmFjayhoZWFwLT52bSgpKQogewogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJh
Y2suaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R0NBY3Rpdml0eUNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDE0ICs1MiwxNCBAQCBw
dWJsaWM6CiAKIHByb3RlY3RlZDoKICNpZiBVU0UoQ0YpCi0gICAgR0NBY3Rpdml0eUNhbGxiYWNr
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ0ZSdW5Mb29wUmVmIHJ1bkxvb3ApCi0gICAgICAg
IDogSGVhcFRpbWVyKGdsb2JhbERhdGEsIHJ1bkxvb3ApCisgICAgR0NBY3Rpdml0eUNhbGxiYWNr
KFZNKiB2bSwgQ0ZSdW5Mb29wUmVmIHJ1bkxvb3ApCisgICAgICAgIDogSGVhcFRpbWVyKHZtLCBy
dW5Mb29wKQogICAgICAgICAsIG1fZW5hYmxlZCh0cnVlKQogICAgIHsKICAgICB9CiAjZWxzZQot
ICAgIEdDQWN0aXZpdHlDYWxsYmFjayhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCi0gICAgICAg
IDogSGVhcFRpbWVyKGdsb2JhbERhdGEpCisgICAgR0NBY3Rpdml0eUNhbGxiYWNrKFZNKiB2bSkK
KyAgICAgICAgOiBIZWFwVGltZXIodm0pCiAgICAgICAgICwgbV9lbmFibGVkKHRydWUpCiAgICAg
ewogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlD
YWxsYmFja0JsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFja0JsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNDg2
MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2tC
bGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsMjAgKzIwLDIwIEBACiAjaW5jbHVk
ZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAKICNpbmNsdWRlICJIZWFwLmgiCi0jaW5jbHVkZSAi
SlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxh
dGZvcm1NZW1vcnkuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIERlZmF1bHRHQ0FjdGl2aXR5Q2Fs
bGJhY2s6OkRlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2soSGVhcCogaGVhcCkKLSAgICA6IEdDQWN0
aXZpdHlDYWxsYmFjayhoZWFwLT5nbG9iYWxEYXRhKCkpCisgICAgOiBHQ0FjdGl2aXR5Q2FsbGJh
Y2soaGVhcC0+dm0oKSkKIHsKIH0KIAogdm9pZCBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpk
b1dvcmsoKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZ2xvYmFsRGF0YSk7Ci0gICAgbV9n
bG9iYWxEYXRhLT5oZWFwLmNvbGxlY3QoSGVhcDo6RG9Ob3RTd2VlcCk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2sobV92bSk7CisgICAgbV92bS0+aGVhcC5jb2xsZWN0KEhlYXA6OkRvTm90U3dlZXAp
OwogfQogCiB2b2lkIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OmRpZEFsbG9jYXRlKHNpemVf
dCBieXRlc0FsbG9jYXRlZCkKQEAgLTQyLDcgKzQyLDcgQEAgdm9pZCBEZWZhdWx0R0NBY3Rpdml0
eUNhbGxiYWNrOjpkaWRBbGxvYwogICAgICAgICByZXR1cm47CiAKICAgICAvLyBUcnkgdXNpbmcg
fjUlIENQVSB0aW1lLgotICAgIG1fdGltZXIuc3RhcnQobV9nbG9iYWxEYXRhLT5oZWFwLmxhc3RH
Q0xlbmd0aCgpICogMjApOworICAgIG1fdGltZXIuc3RhcnQobV92bS0+aGVhcC5sYXN0R0NMZW5n
dGgoKSAqIDIwKTsKIH0KIAogdm9pZCBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjp3aWxsQ29s
bGVjdCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0
ZXIuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2V0dGVyU2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICBwcml2YXRlOiAgICAgICAgCiAgICAgICAgIEdldHRlclNldHRlcihFeGVj
U3RhdGUqIGV4ZWMpCi0gICAgICAgICAgICA6IEpTQ2VsbChleGVjLT5nbG9iYWxEYXRhKCksIGV4
ZWMtPmdsb2JhbERhdGEoKS5nZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgICAg
ICA6IEpTQ2VsbChleGVjLT52bSgpLCBleGVjLT52bSgpLmdldHRlclNldHRlclN0cnVjdHVyZS5n
ZXQoKSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTQ5LDE5ICs0OSwxOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgc3RhdGljIEdldHRlclNldHRlciogY3JlYXRlKEV4ZWNTdGF0ZSog
ZXhlYykKICAgICAgICAgewogICAgICAgICAgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxHZXR0ZXJTZXR0ZXI+KCpleGVjLT5oZWFwKCkp
KSBHZXR0ZXJTZXR0ZXIoZXhlYyk7Ci0gICAgICAgICAgICBnZXR0ZXJTZXR0ZXItPmZpbmlzaENy
ZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgICAgICBnZXR0ZXJTZXR0ZXItPmZp
bmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwogICAgICAgICAgICAgcmV0dXJuIGdldHRlclNldHRl
cjsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKIAogICAgICAgICBKU09iamVjdCogZ2V0dGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9nZXR0ZXIuZ2V0KCk7IH0KLSAgICAgICAgdm9pZCBzZXRHZXR0ZXIoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU09iamVjdCogZ2V0dGVyKSB7IG1fZ2V0dGVyLnNldE1heUJlTnVs
bChnbG9iYWxEYXRhLCB0aGlzLCBnZXR0ZXIpOyB9CisgICAgICAgIHZvaWQgc2V0R2V0dGVyKFZN
JiB2bSwgSlNPYmplY3QqIGdldHRlcikgeyBtX2dldHRlci5zZXRNYXlCZU51bGwodm0sIHRoaXMs
IGdldHRlcik7IH0KICAgICAgICAgSlNPYmplY3QqIHNldHRlcigpIGNvbnN0IHsgcmV0dXJuIG1f
c2V0dGVyLmdldCgpOyB9Ci0gICAgICAgIHZvaWQgc2V0U2V0dGVyKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNPYmplY3QqIHNldHRlcikgeyBtX3NldHRlci5zZXRNYXlCZU51bGwoZ2xvYmFs
RGF0YSwgdGhpcywgc2V0dGVyKTsgfQotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICAgICAgdm9pZCBzZXRTZXR0ZXIoVk0mIHZt
LCBKU09iamVjdCogc2V0dGVyKSB7IG1fc2V0dGVyLnNldE1heUJlTnVsbCh2bSwgdGhpcywgc2V0
dGVyKTsgfQorICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhHZXR0ZXJTZXR0ZXJUeXBlLCBPdmVycmlk
ZXNWaXNpdENoaWxkcmVuKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhHZXR0ZXJTZXR0
ZXJUeXBlLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDE0
ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OCwxNCArODgsMTQgQEAgc3RydWN0IElkZW50aWZpZXJMQ2hhckZy
b21VQ2hhclRyYW5zbGF0bwogICAgIH0KIH07CiAKLVBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRl
bnRpZmllcjo6YWRkKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgY2hhciogYykKK1Bh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKFZNKiB2bSwgY29uc3QgY2hhciog
YykKIHsKICAgICBBU1NFUlQoYyk7CiAgICAgQVNTRVJUKGNbMF0pOwogICAgIGlmICghY1sxXSkK
LSAgICAgICAgcmV0dXJuIGFkZChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Mu
c2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKGNbMF0pKTsKKyAgICAgICAgcmV0dXJuIGFkZCh2bSwg
dm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoY1swXSkpOwogCi0gICAg
SWRlbnRpZmllclRhYmxlJiBpZGVudGlmaWVyVGFibGUgPSAqZ2xvYmFsRGF0YS0+aWRlbnRpZmll
clRhYmxlOworICAgIElkZW50aWZpZXJUYWJsZSYgaWRlbnRpZmllclRhYmxlID0gKnZtLT5pZGVu
dGlmaWVyVGFibGU7CiAgICAgTGl0ZXJhbElkZW50aWZpZXJUYWJsZSYgbGl0ZXJhbElkZW50aWZp
ZXJUYWJsZSA9IGlkZW50aWZpZXJUYWJsZS5saXRlcmFsVGFibGUoKTsKIAogICAgIGNvbnN0IExp
dGVyYWxJZGVudGlmaWVyVGFibGU6Oml0ZXJhdG9yJiBpdGVyID0gbGl0ZXJhbElkZW50aWZpZXJU
YWJsZS5maW5kKGMpOwpAQCAtMTE1LDI5ICsxMTUsMjkgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBs
PiBJZGVudGlmaWVyOjphZGQoSgogCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6
OmFkZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIqIGMpCiB7Ci0gICAgcmV0dXJuIGFkZCgm
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBjKTsKKyAgICByZXR1cm4gYWRkKCZleGVjLT52bSgpLCBjKTsK
IH0KIAotUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQ4KEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgY29uc3QgVUNoYXIqIHMsIGludCBsZW5ndGgpCitQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZDgoVk0qIHZtLCBjb25zdCBVQ2hhciogcywgaW50IGxl
bmd0aCkKIHsKICAgICBpZiAobGVuZ3RoID09IDEpIHsKICAgICAgICAgVUNoYXIgYyA9IHNbMF07
CiAgICAgICAgIEFTU0VSVChjIDw9IDB4ZmYpOwogICAgICAgICBpZiAoY2FuVXNlU2luZ2xlQ2hh
cmFjdGVyU3RyaW5nKGMpKQotICAgICAgICAgICAgcmV0dXJuIGFkZChnbG9iYWxEYXRhLCBnbG9i
YWxEYXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKGMpKTsKKyAgICAg
ICAgICAgIHJldHVybiBhZGQodm0sIHZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nUmVwKGMpKTsKICAgICB9CiAgICAgCiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVy
biBTdHJpbmdJbXBsOjplbXB0eSgpOwogICAgIENoYXJCdWZmZXI8VUNoYXI+IGJ1ZiA9IHsgcywg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCkgfTsKLSAgICBIYXNoU2V0PFN0cmluZ0ltcGwq
Pjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IGdsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZS0+YWRk
PENoYXJCdWZmZXI8VUNoYXI+LCBJZGVudGlmaWVyTENoYXJGcm9tVUNoYXJUcmFuc2xhdG9yID4o
YnVmKTsKKyAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IHZt
LT5pZGVudGlmaWVyVGFibGUtPmFkZDxDaGFyQnVmZmVyPFVDaGFyPiwgSWRlbnRpZmllckxDaGFy
RnJvbVVDaGFyVHJhbnNsYXRvciA+KGJ1Zik7CiAgICAgCiAgICAgLy8gSWYgdGhlIHN0cmluZyBp
cyBuZXdseS10cmFuc2xhdGVkLCB0aGVuIHdlIG5lZWQgdG8gYWRvcHQgaXQuCiAgICAgLy8gVGhl
IGJvb2xlYW4gaW4gdGhlIHBhaXIgdGVsbHMgdXMgaWYgdGhhdCBpcyBzby4KICAgICByZXR1cm4g
YWRkUmVzdWx0LmlzTmV3RW50cnkgPyBhZG9wdFJlZigqYWRkUmVzdWx0Lml0ZXJhdG9yKSA6ICph
ZGRSZXN1bHQuaXRlcmF0b3I7CiB9CiAKLVBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmll
cjo6YWRkU2xvd0Nhc2UoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTdHJpbmdJbXBsKiByKQor
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGRTbG93Q2FzZShWTSogdm0sIFN0
cmluZ0ltcGwqIHIpCiB7CiAgICAgQVNTRVJUKCFyLT5pc0lkZW50aWZpZXIoKSk7CiAgICAgLy8g
VGhlIGVtcHR5ICYgbnVsbCBzdHJpbmdzIGFyZSBzdGF0aWMgc2luZ2xldG9ucywgYW5kIHN0YXRp
YyBzdHJpbmdzIGFyZSBoYW5kbGVkCkBAIC0xNDcsNjggKzE0Nyw2OCBAQCBQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZFNsCiAgICAgaWYgKHItPmxlbmd0aCgpID09IDEpIHsK
ICAgICAgICAgVUNoYXIgYyA9ICgqcilbMF07CiAgICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNo
YXJhY3RlclN0cmluZykKLSAgICAgICAgICAgIHIgPSBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Mu
c2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKGMpOworICAgICAgICAgICAgciA9IHZtLT5zbWFsbFN0
cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKGMpOwogICAgICAgICAgICAgaWYgKHItPmlz
SWRlbnRpZmllcigpKQogICAgICAgICAgICAgICAgIHJldHVybiByOwogICAgIH0KIAotICAgIHJl
dHVybiAqZ2xvYmFsRGF0YS0+aWRlbnRpZmllclRhYmxlLT5hZGQocikuaXRlcmF0b3I7CisgICAg
cmV0dXJuICp2bS0+aWRlbnRpZmllclRhYmxlLT5hZGQocikuaXRlcmF0b3I7CiB9CiAKIFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVj
LCBTdHJpbmdJbXBsKiByKQogewotICAgIHJldHVybiBhZGRTbG93Q2FzZSgmZXhlYy0+Z2xvYmFs
RGF0YSgpLCByKTsKKyAgICByZXR1cm4gYWRkU2xvd0Nhc2UoJmV4ZWMtPnZtKCksIHIpOwogfQog
CiBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb20oRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCB2
YWx1ZSkKIHsKLSAgICByZXR1cm4gSWRlbnRpZmllcihleGVjLCBleGVjLT5nbG9iYWxEYXRhKCku
bnVtZXJpY1N0cmluZ3MuYWRkKHZhbHVlKSk7CisgICAgcmV0dXJuIElkZW50aWZpZXIoZXhlYywg
ZXhlYy0+dm0oKS5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUpKTsKIH0KIAogSWRlbnRpZmllciBJ
ZGVudGlmaWVyOjpmcm9tKEV4ZWNTdGF0ZSogZXhlYywgaW50IHZhbHVlKQogewotICAgIHJldHVy
biBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmdsb2JhbERhdGEoKS5udW1lcmljU3RyaW5ncy5hZGQo
dmFsdWUpKTsKKyAgICByZXR1cm4gSWRlbnRpZmllcihleGVjLCBleGVjLT52bSgpLm51bWVyaWNT
dHJpbmdzLmFkZCh2YWx1ZSkpOwogfQogCiBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb20oRXhl
Y1N0YXRlKiBleGVjLCBkb3VibGUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIElkZW50aWZpZXIoZXhl
YywgZXhlYy0+Z2xvYmFsRGF0YSgpLm51bWVyaWNTdHJpbmdzLmFkZCh2YWx1ZSkpOworICAgIHJl
dHVybiBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPnZtKCkubnVtZXJpY1N0cmluZ3MuYWRkKHZhbHVl
KSk7CiB9CiAKLUlkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbShKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIHVuc2lnbmVkIHZhbHVlKQorSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tKFZNKiB2
bSwgdW5zaWduZWQgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIElkZW50aWZpZXIoZ2xvYmFsRGF0YSwg
Z2xvYmFsRGF0YS0+bnVtZXJpY1N0cmluZ3MuYWRkKHZhbHVlKSk7CisgICAgcmV0dXJuIElkZW50
aWZpZXIodm0sIHZtLT5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUpKTsKIH0KIAotSWRlbnRpZmll
ciBJZGVudGlmaWVyOjpmcm9tKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50IHZhbHVlKQor
SWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tKFZNKiB2bSwgaW50IHZhbHVlKQogewotICAgIHJl
dHVybiBJZGVudGlmaWVyKGdsb2JhbERhdGEsIGdsb2JhbERhdGEtPm51bWVyaWNTdHJpbmdzLmFk
ZCh2YWx1ZSkpOworICAgIHJldHVybiBJZGVudGlmaWVyKHZtLCB2bS0+bnVtZXJpY1N0cmluZ3Mu
YWRkKHZhbHVlKSk7CiB9CiAKLUlkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbShKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIGRvdWJsZSB2YWx1ZSkKK0lkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJv
bShWTSogdm0sIGRvdWJsZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gSWRlbnRpZmllcihnbG9iYWxE
YXRhLCBnbG9iYWxEYXRhLT5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUpKTsKKyAgICByZXR1cm4g
SWRlbnRpZmllcih2bSwgdm0tPm51bWVyaWNTdHJpbmdzLmFkZCh2YWx1ZSkpOwogfQogCiAjaWZu
ZGVmIE5ERUJVRwogCi12b2lkIElkZW50aWZpZXI6OmNoZWNrQ3VycmVudElkZW50aWZpZXJUYWJs
ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCit2b2lkIElkZW50aWZpZXI6OmNoZWNrQ3VycmVu
dElkZW50aWZpZXJUYWJsZShWTSogdm0pCiB7CiAgICAgLy8gQ2hlY2sgdGhlIGlkZW50aWZpZXIg
dGFibGUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSB0aHJlYWRzcGVjaWZpYyBtYXRjaGVzIHRoZQot
ICAgIC8vIGdsb2JhbERhdGEncyBpZGVudGlmaWVyIHRhYmxlLgotICAgIEFTU0VSVF9VTlVTRUQo
Z2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEo
KS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOworICAgIC8vIHZtJ3MgaWRlbnRpZmllciB0YWJs
ZS4KKyAgICBBU1NFUlRfVU5VU0VEKHZtLCB2bS0+aWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVh
ZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOwogfQogCiB2b2lkIElkZW50aWZpZXI6
OmNoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgY2hl
Y2tDdXJyZW50SWRlbnRpZmllclRhYmxlKCZleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIGNoZWNr
Q3VycmVudElkZW50aWZpZXJUYWJsZSgmZXhlYy0+dm0oKSk7CiB9CiAKICNlbHNlCiAKIC8vIFRo
ZXNlIG9ubHkgZXhpc3RzIHNvIHRoYXQgb3VyIGV4cG9ydHMgYXJlIHRoZSBzYW1lIGZvciBkZWJ1
ZyBhbmQgcmVsZWFzZSBidWlsZHMuCiAvLyBUaGlzIHdvdWxkIGJlIGFuIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCksIGJ1dCB3ZSdyZSBpbiBOREVCVUcgb25seSBjb2RlIGhlcmUhCi1OT19S
RVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgSWRlbnRpZmllcjo6Y2hlY2tDdXJyZW50SWRlbnRpZmll
clRhYmxlKEpTR2xvYmFsRGF0YSopIHsgQ1JBU0goKTsgfQorTk9fUkVUVVJOX0RVRV9UT19DUkFT
SCB2b2lkIElkZW50aWZpZXI6OmNoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZShWTSopIHsgQ1JB
U0goKTsgfQogTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIElkZW50aWZpZXI6OmNoZWNrQ3Vy
cmVudElkZW50aWZpZXJUYWJsZShFeGVjU3RhdGUqKSB7IENSQVNIKCk7IH0KIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oCShyZXZpc2lv
biAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNpZm5kZWYgSWRlbnRpZmllcl9oCiAj
ZGVmaW5lIElkZW50aWZpZXJfaAogCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVk
ZSAiVk0uaCIKICNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KICNpbmNsdWRlIDx3dGYv
V1RGVGhyZWFkRGF0YS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTQyLDE1
ICs0MiwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dW5zaWduZWQgY2hh
cmFjdGVyc0NvdW50PgogICAgICAgICBJZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
Y2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0pIDogbV9zdHJpbmcoYWRkKGV4ZWMs
IGNoYXJhY3RlcnMpKSB7IH0KICAgICAgICAgdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyc0Nv
dW50PgotICAgICAgICBJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3Qg
Y2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0pIDogbV9zdHJpbmcoYWRkKGdsb2Jh
bERhdGEsIGNoYXJhY3RlcnMpKSB7IH0KKyAgICAgICAgSWRlbnRpZmllcihWTSogdm0sIGNvbnN0
IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJzQ291bnRdKSA6IG1fc3RyaW5nKGFkZCh2bSwg
Y2hhcmFjdGVycykpIHsgfQogCiAgICAgICAgIElkZW50aWZpZXIoRXhlY1N0YXRlKiBleGVjLCBT
dHJpbmdJbXBsKiByZXApIDogbV9zdHJpbmcoYWRkKGV4ZWMsIHJlcCkpIHsgfQogICAgICAgICBJ
ZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKSA6IG1fc3RyaW5nKGFk
ZChleGVjLCBzLmltcGwoKSkpIHsgfQogCi0gICAgICAgIElkZW50aWZpZXIoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBjb25zdCBMQ2hhciogcywgaW50IGxlbmd0aCkgOiBtX3N0cmluZyhhZGQo
Z2xvYmFsRGF0YSwgcywgbGVuZ3RoKSkgeyB9Ci0gICAgICAgIElkZW50aWZpZXIoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVQ2hhciogcywgaW50IGxlbmd0aCkgOiBtX3N0cmluZyhh
ZGQoZ2xvYmFsRGF0YSwgcywgbGVuZ3RoKSkgeyB9Ci0gICAgICAgIElkZW50aWZpZXIoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBTdHJpbmdJbXBsKiByZXApIDogbV9zdHJpbmcoYWRkKGdsb2Jh
bERhdGEsIHJlcCkpIHsgfSAKLSAgICAgICAgSWRlbnRpZmllcihKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIGNvbnN0IFN0cmluZyYgcykgOiBtX3N0cmluZyhhZGQoZ2xvYmFsRGF0YSwgcy5pbXBs
KCkpKSB7IH0KKyAgICAgICAgSWRlbnRpZmllcihWTSogdm0sIGNvbnN0IExDaGFyKiBzLCBpbnQg
bGVuZ3RoKSA6IG1fc3RyaW5nKGFkZCh2bSwgcywgbGVuZ3RoKSkgeyB9CisgICAgICAgIElkZW50
aWZpZXIoVk0qIHZtLCBjb25zdCBVQ2hhciogcywgaW50IGxlbmd0aCkgOiBtX3N0cmluZyhhZGQo
dm0sIHMsIGxlbmd0aCkpIHsgfQorICAgICAgICBJZGVudGlmaWVyKFZNKiB2bSwgU3RyaW5nSW1w
bCogcmVwKSA6IG1fc3RyaW5nKGFkZCh2bSwgcmVwKSkgeyB9IAorICAgICAgICBJZGVudGlmaWVy
KFZNKiB2bSwgY29uc3QgU3RyaW5nJiBzKSA6IG1fc3RyaW5nKGFkZCh2bSwgcy5pbXBsKCkpKSB7
IH0KIAogICAgICAgICBjb25zdCBTdHJpbmcmIHN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
aW5nOyB9CiAgICAgICAgIFN0cmluZ0ltcGwqIGltcGwoKSBjb25zdCB7IHJldHVybiBtX3N0cmlu
Zy5pbXBsKCk7IH0KQEAgLTYwLDE0ICs2MCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
CiAgICAgICAgIENTdHJpbmcgYXNjaWkoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5hc2NpaSgp
OyB9CiAKLSAgICAgICAgc3RhdGljIElkZW50aWZpZXIgY3JlYXRlTENoYXJGcm9tVUNoYXIoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVQ2hhciogcywgaW50IGxlbmd0aCkgeyByZXR1
cm4gSWRlbnRpZmllcihnbG9iYWxEYXRhLCBhZGQ4KGdsb2JhbERhdGEsIHMsIGxlbmd0aCkpOyB9
CisgICAgICAgIHN0YXRpYyBJZGVudGlmaWVyIGNyZWF0ZUxDaGFyRnJvbVVDaGFyKFZNKiB2bSwg
Y29uc3QgVUNoYXIqIHMsIGludCBsZW5ndGgpIHsgcmV0dXJuIElkZW50aWZpZXIodm0sIGFkZDgo
dm0sIHMsIGxlbmd0aCkpOyB9CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIElk
ZW50aWZpZXIgZnJvbShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHkpOwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgSWRlbnRpZmllciBmcm9tKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHkpOwogICAgICAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tKEV4ZWNTdGF0ZSogZXhlYywgZG91
YmxlIHkpOwotICAgICAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tKEpTR2xvYmFsRGF0YSosIHVu
c2lnbmVkIHkpOwotICAgICAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tKEpTR2xvYmFsRGF0YSos
IGludCB5KTsKLSAgICAgICAgc3RhdGljIElkZW50aWZpZXIgZnJvbShKU0dsb2JhbERhdGEqLCBk
b3VibGUgeSk7CisgICAgICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb20oVk0qLCB1bnNpZ25lZCB5
KTsKKyAgICAgICAgc3RhdGljIElkZW50aWZpZXIgZnJvbShWTSosIGludCB5KTsKKyAgICAgICAg
c3RhdGljIElkZW50aWZpZXIgZnJvbShWTSosIGRvdWJsZSB5KTsKIAogICAgICAgICBib29sIGlz
TnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzTnVsbCgpOyB9CiAgICAgICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzRW1wdHkoKTsgfQpAQCAtODcsNyAr
ODcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qg
U3RyaW5nSW1wbCogYSwgY29uc3QgU3RyaW5nSW1wbCogYikgeyByZXR1cm4gOjplcXVhbChhLCBi
KTsgfQogCiAgICAgICAgIC8vIE9ubHkgdG8gYmUgdXNlZCB3aXRoIHN0cmluZyBsaXRlcmFscy4K
LSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKEpTR2xvYmFsRGF0YSos
IGNvbnN0IGNoYXIqKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRk
KFZNKiwgY29uc3QgY2hhciopOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoRXhlY1N0YXRlKiwgY29uc3QgY2hhciopOwogCiAgICAg
cHJpdmF0ZToKQEAgLTk5LDggKzk5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IElkZW50aWZpZXImIGEsIGNvbnN0IElkZW50aWZpZXImIGIpIHsg
cmV0dXJuIGEubV9zdHJpbmcuaW1wbCgpID09IGIubV9zdHJpbmcuaW1wbCgpOyB9CiAgICAgICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IElkZW50aWZpZXImIGEsIGNvbnN0IExDaGFyKiBiKSB7
IHJldHVybiBlcXVhbChhLm1fc3RyaW5nLmltcGwoKSwgYik7IH0KIAotICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKEpTR2xvYmFs
RGF0YSosIGNvbnN0IFQqLCBpbnQgbGVuZ3RoKTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gYWRkOChKU0dsb2JhbERhdGEqLCBjb25zdCBVQ2hhciosIGludCBsZW5ndGgp
OworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gYWRkKFZNKiwgY29uc3QgVCosIGludCBsZW5ndGgpOworICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQ4KFZNKiwgY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsK
ICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wg
Y2FuVXNlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKFQpOwogCiAgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IGFkZChFeGVjU3RhdGUqIGV4ZWMsIFN0cmluZ0ltcGwqIHIpCkBAIC0x
MTIsMjEgKzExMiwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICByZXR1cm4g
cjsKICAgICAgICAgICAgIHJldHVybiBhZGRTbG93Q2FzZShleGVjLCByKTsKICAgICAgICAgfQot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBTdHJpbmdJbXBsKiByKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBhZGQoVk0qIHZtLCBTdHJpbmdJbXBsKiByKQogICAgICAgICB7CiAjaWZuZGVmIE5E
RUJVRwotICAgICAgICAgICAgY2hlY2tDdXJyZW50SWRlbnRpZmllclRhYmxlKGdsb2JhbERhdGEp
OworICAgICAgICAgICAgY2hlY2tDdXJyZW50SWRlbnRpZmllclRhYmxlKHZtKTsKICNlbmRpZgog
ICAgICAgICAgICAgaWYgKHItPmlzSWRlbnRpZmllcigpKQogICAgICAgICAgICAgICAgIHJldHVy
biByOwotICAgICAgICAgICAgcmV0dXJuIGFkZFNsb3dDYXNlKGdsb2JhbERhdGEsIHIpOworICAg
ICAgICAgICAgcmV0dXJuIGFkZFNsb3dDYXNlKHZtLCByKTsKICAgICAgICAgfQogCiAgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZFNsb3dD
YXNlKEV4ZWNTdGF0ZSosIFN0cmluZ0ltcGwqIHIpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGRTbG93Q2FzZShKU0dsb2JhbERhdGEq
LCBTdHJpbmdJbXBsKiByKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gYWRkU2xvd0Nhc2UoVk0qLCBTdHJpbmdJbXBsKiByKTsKIAogICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBjaGVja0N1cnJlbnRJZGVudGlmaWVy
VGFibGUoRXhlY1N0YXRlKik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IGNoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZShKU0dsb2JhbERhdGEqKTsKKyAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY2hlY2tDdXJyZW50SWRlbnRpZmllclRhYmxlKFZN
Kik7CiAgICAgfTsKIAogICAgIHRlbXBsYXRlIDw+IEFMV0FZU19JTkxJTkUgYm9vbCBJZGVudGlm
aWVyOjpjYW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoTENoYXIpCkBAIC0xNzAsMTggKzE3MCwx
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
Ci0gICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBjb25zdCBUKiBzLCBpbnQgbGVuZ3RoKQorICAgIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKFZNKiB2bSwgY29uc3QgVCogcywgaW50IGxlbmd0aCkK
ICAgICB7CiAgICAgICAgIGlmIChsZW5ndGggPT0gMSkgewogICAgICAgICAgICAgVCBjID0gc1sw
XTsKICAgICAgICAgICAgIGlmIChjYW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoYykpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGFkZChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5zbWFsbFN0cmlu
Z3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKGMpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
YWRkKHZtLCB2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChjKSk7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghbGVuZ3RoKQogICAgICAgICAgICAgcmV0
dXJuIFN0cmluZ0ltcGw6OmVtcHR5KCk7CiAgICAgICAgIENoYXJCdWZmZXI8VD4gYnVmID0geyBz
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKSB9OwotICAgICAgICBIYXNoU2V0PFN0cmlu
Z0ltcGwqPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IGdsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJs
ZS0+YWRkPENoYXJCdWZmZXI8VD4sIElkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjxUPiA+
KGJ1Zik7CisgICAgICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgYWRkUmVzdWx0
ID0gdm0tPmlkZW50aWZpZXJUYWJsZS0+YWRkPENoYXJCdWZmZXI8VD4sIElkZW50aWZpZXJDaGFy
QnVmZmVyVHJhbnNsYXRvcjxUPiA+KGJ1Zik7CiAgICAgICAgIAogICAgICAgICAvLyBJZiB0aGUg
c3RyaW5nIGlzIG5ld2x5LXRyYW5zbGF0ZWQsIHRoZW4gd2UgbmVlZCB0byBhZG9wdCBpdC4KICAg
ICAgICAgLy8gVGhlIGJvb2xlYW4gaW4gdGhlIHBhaXIgdGVsbHMgdXMgaWYgdGhhdCBpcyBzby4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVu
Y3Rpb24uY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMjYgKzM1LDI2
IEBAIEFTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKEludGVybmFsRnUKIGNvbnN0IENsYXNz
SW5mbyBJbnRlcm5hbEZ1bmN0aW9uOjpzX2luZm8gPSB7ICJGdW5jdGlvbiIsICZCYXNlOjpzX2lu
Zm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSW50ZXJuYWxGdW5jdGlvbikgfTsKIAogSW50
ZXJuYWxGdW5jdGlvbjo6SW50ZXJuYWxGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0KGds
b2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpCisgICAgOiBKU0Rlc3RydWN0aWJs
ZU9iamVjdChnbG9iYWxPYmplY3QtPnZtKCksIHN0cnVjdHVyZSkKIHsKIH0KIAotdm9pZCBJbnRl
cm5hbEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNv
bnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsRGF0YSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChp
bmhlcml0cygmc19pbmZvKSk7CiAgICAgQVNTRVJUKG1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRh
ICE9IEludGVybmFsRnVuY3Rpb246OnNfaW5mby5tZXRob2RUYWJsZS5nZXRDYWxsRGF0YSk7Ci0g
ICAgcHV0RGlyZWN0KGdsb2JhbERhdGEsIGdsb2JhbERhdGEucHJvcGVydHlOYW1lcy0+bmFtZSwg
anNTdHJpbmcoJmdsb2JhbERhdGEsIG5hbWUpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250
RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc1N0cmlu
Zygmdm0sIG5hbWUpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CiB9CiAKIGNv
bnN0IFN0cmluZyYgSW50ZXJuYWxGdW5jdGlvbjo6bmFtZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgcmV0dXJuIGFzU3RyaW5nKGdldERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmds
b2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5uYW1lKSktPnRyeUdldFZhbHVlKCk7CisgICAgcmV0
dXJuIGFzU3RyaW5nKGdldERpcmVjdChleGVjLT52bSgpLCBleGVjLT52bSgpLnByb3BlcnR5TmFt
ZXMtPm5hbWUpKS0+dHJ5R2V0VmFsdWUoKTsKIH0KIAogY29uc3QgU3RyaW5nIEludGVybmFsRnVu
Y3Rpb246OmRpc3BsYXlOYW1lKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU1ZhbHVlIGRpc3Bs
YXlOYW1lID0gZ2V0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0YSgp
LnByb3BlcnR5TmFtZXMtPmRpc3BsYXlOYW1lKTsKKyAgICBKU1ZhbHVlIGRpc3BsYXlOYW1lID0g
Z2V0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+ZGlzcGxheU5h
bWUpOwogICAgIAogICAgIGlmIChkaXNwbGF5TmFtZSAmJiBpc0pTU3RyaW5nKGRpc3BsYXlOYW1l
KSkKICAgICAgICAgcmV0dXJuIGFzU3RyaW5nKGRpc3BsYXlOYW1lKS0+dHJ5R2V0VmFsdWUoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0
aW9uLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGVybmFsRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDEsOSArNDEsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgY29uc3QgU3RyaW5nIGRpc3BsYXlOYW1lKEV4ZWNTdGF0ZSop
OwogICAgICAgICBjb25zdCBTdHJpbmcgY2FsY3VsYXRlZERpc3BsYXlOYW1lKEV4ZWNTdGF0ZSop
OwogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG8pIAorICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKSAKICAgICAgICAgeyAK
LSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxP
YmplY3QsIHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOyAKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsgCiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKQEAgLTUxLDcgKzUxLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSW50ZXJuYWxGdW5jdGlvbihK
U0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwogCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiwgY29uc3QgU3RyaW5nJiBuYW1lKTsK
KyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIGNvbnN0
IFN0cmluZyYgbmFtZSk7CiAKICAgICAgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpT
Q2VsbCosIENhbGxEYXRhJik7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBUElWYWx1ZVdyYXBwZXIuaAkocmV2aXNpb24gMTQ4NjM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBUElWYWx1ZVdyYXBwZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsOSArMzcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU1Zh
bHVlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5nZXQoKTsgfQogCi0gICAgICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhBUElWYWx1ZVdyYXBwZXJUeXBlLCBPdmVycmlkZXNWaXNpdENoaWxk
cmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyksICZzX2luZm8pOworICAgICAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oQVBJVmFsdWVXcmFwcGVyVHlwZSwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJy
aWRlc0dldFByb3BlcnR5TmFtZXMpLCAmc19pbmZvKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKQEAgLTU0
LDE0ICs1NCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkp
OwotICAgICAgICAgICAgbV92YWx1ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1
ZSk7CisgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKKyAgICAg
ICAgICAgIG1fdmFsdWUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIHZhbHVlKTsKICAgICAgICAgICAg
IEFTU0VSVCghdmFsdWUuaXNDZWxsKCkpOwogICAgICAgICB9CiAKICAgICBwcml2YXRlOgogICAg
ICAgICBKU0FQSVZhbHVlV3JhcHBlcihFeGVjU3RhdGUqIGV4ZWMpCi0gICAgICAgICAgICA6IEpT
Q2VsbChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmdsb2JhbERhdGEoKS5hcGlXcmFwcGVyU3Ry
dWN0dXJlLmdldCgpKQorICAgICAgICAgICAgOiBKU0NlbGwoZXhlYy0+dm0oKSwgZXhlYy0+dm0o
KS5hcGlXcmFwcGVyU3RydWN0dXJlLmdldCgpKQogICAgICAgICB7CiAgICAgICAgIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCShy
ZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2
YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIGlubGluZSBib29sIEpT
QWN0aXZhdGlvbjo6c3ltYm9sVGFibGVHZXQKIAogaW5saW5lIGJvb2wgSlNBY3RpdmF0aW9uOjpz
eW1ib2xUYWJsZVB1dChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBI
ZWFwOjpoZWFwKHRoaXMpKTsKICAgICAKICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3lt
Ym9sVGFibGUoKS0+aW5saW5lR2V0KHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwpAQCAtMTAy
LDcgKzEwMiw3IEBAIGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXQKICAg
ICBpZiAoaXNUb3JuT2ZmKCkgJiYgIWlzVmFsaWQoZW50cnkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICByZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLnNldChnbG9iYWxEYXRhLCB0
aGlzLCB2YWx1ZSk7CisgICAgcmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5zZXQodm0sIHRo
aXMsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTI1LDcgKzEyNSw3IEBAIHZv
aWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnQKICAgICBKU09iamVjdDo6Z2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMs
IG1vZGUpOwogfQogCi1pbmxpbmUgYm9vbCBKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxlUHV0V2l0
aEF0dHJpYnV0ZXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQoraW5saW5lIGJvb2wg
SlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKFZNJiB2bSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykK
IHsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09
IEhlYXA6OmhlYXAodGhpcykpOwogICAgIApAQCAtMTM4LDcgKzEzOCw3IEBAIGlubGluZSBib29s
IEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgZW50cnkuc2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKLSAgICByZWdpc3RlckF0KGVudHJ5
LmdldEluZGV4KCkpLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgcmVnaXN0ZXJB
dChlbnRyeS5nZXRJbmRleCgpKS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApAQCAtMTU3LDcgKzE1Nyw3IEBAIGJvb2wgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlMKICAgICBpZiAodGhpc09iamVjdC0+c3ltYm9sVGFibGVHZXQocHJvcGVydHlO
YW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoSlNWYWx1ZSB2YWx1
ZSA9IHRoaXNPYmplY3QtPmdldERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFt
ZSkpIHsKKyAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHRoaXNPYmplY3QtPmdldERpcmVjdChleGVj
LT52bSgpLCBwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yMDEsNyArMjAxLDcgQEAgdm9pZCBKU0Fj
dGl2YXRpb246OnB1dChKU0NlbGwqIGNlbGwsIEV4ZQogICAgIC8vIHByb3BlcnRpZXMgYXJlIG5v
bi1zdGFuZGFyZCBleHRlbnNpb25zIHRoYXQgb3RoZXIgaW1wbGVtZW50YXRpb25zIGRvIG5vdAog
ICAgIC8vIGV4cG9zZSBpbiB0aGUgYWN0aXZhdGlvbiBvYmplY3QuCiAgICAgQVNTRVJUKCF0aGlz
T2JqZWN0LT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkpOwotICAgIHRoaXNPYmplY3QtPnB1
dE93bkRhdGFQcm9wZXJ0eShleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNsb3QpOworICAgIHRoaXNPYmplY3QtPnB1dE93bkRhdGFQcm9wZXJ0eShleGVjLT52bSgpLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAogLy8gRklYTUU6IE1ha2UgdGhpcyBmdW5j
dGlvbiBob25vciBSZWFkT25seSAoY29uc3QpIGFuZCBEb250RW51bQpAQCAtMjEwLDcgKzIxMCw3
IEBAIHZvaWQgSlNBY3RpdmF0aW9uOjpwdXREaXJlY3RWaXJ0dWFsKEpTT2IKICAgICBKU0FjdGl2
YXRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4ob2JqZWN0KTsKICAgICBB
U1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6Omhl
YXAodGhpc09iamVjdCkpOwogCi0gICAgaWYgKHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlUHV0V2l0
aEF0dHJpYnV0ZXMoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRy
aWJ1dGVzKSkKKyAgICBpZiAodGhpc09iamVjdC0+c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRl
cyhleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gV2UgZG9uJ3QgY2FsbCB0aHJvdWdoIHRvIEpTT2JqZWN0IGJlY2F1
c2UgX19wcm90b19fIGFuZCBnZXR0ZXIvc2V0dGVyIApAQCAtMjQ1LDcgKzI0NSw3IEBAIEpTVmFs
dWUgSlNBY3RpdmF0aW9uOjphcmd1bWVudHNHZXR0ZXIoRXgKICAgICAgICAgcmV0dXJuIGFyZ3Vt
ZW50czsKICAgICBpbnQgcmVhbEFyZ3VtZW50c1JlZ2lzdGVyID0gdW5tb2RpZmllZEFyZ3VtZW50
c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKTsKIAotICAgIEpTVmFsdWUgYXJndW1lbnRzID0g
SlNWYWx1ZShBcmd1bWVudHM6OmNyZWF0ZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZy
YW1lKSk7CisgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVlKEFyZ3VtZW50czo6Y3JlYXRl
KGNhbGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1lKSk7CiAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRS
KGFyZ3VtZW50c1JlZ2lzdGVyKSA9IGFyZ3VtZW50czsKICAgICBjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIocmVhbEFyZ3VtZW50c1JlZ2lzdGVyKSA9IGFyZ3VtZW50czsKICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCShyZXZpc2lvbiAxNDg2
MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtNDEsMjIgKzQxLDIyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIAogICAg
IGNsYXNzIEpTQWN0aXZhdGlvbiA6IHB1YmxpYyBKU1ZhcmlhYmxlT2JqZWN0IHsKICAgICBwcml2
YXRlOgotICAgICAgICBKU0FjdGl2YXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDYWxs
RnJhbWUqLCBTaGFyZWRTeW1ib2xUYWJsZSopOworICAgICAgICBKU0FjdGl2YXRpb24oVk0mIHZt
LCBDYWxsRnJhbWUqLCBTaGFyZWRTeW1ib2xUYWJsZSopOwogICAgIAogICAgIHB1YmxpYzoKICAg
ICAgICAgdHlwZWRlZiBKU1ZhcmlhYmxlT2JqZWN0IEJhc2U7CiAKLSAgICAgICAgc3RhdGljIEpT
QWN0aXZhdGlvbiogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgICAgICBzdGF0aWMgSlNBY3RpdmF0
aW9uKiBjcmVhdGUoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCiAgICAgICAgIHsKICAgICAgICAgICAgIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xU
YWJsZSA9IGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKTsKICAgICAgICAgICAgIEpTQWN0aXZhdGlv
biogYWN0aXZhdGlvbiA9IG5ldyAoCiAgICAgICAgICAgICAgICAgTm90TnVsbCwKICAgICAgICAg
ICAgICAgICBhbGxvY2F0ZUNlbGw8SlNBY3RpdmF0aW9uPigKLSAgICAgICAgICAgICAgICAgICAg
Z2xvYmFsRGF0YS5oZWFwLAorICAgICAgICAgICAgICAgICAgICB2bS5oZWFwLAogICAgICAgICAg
ICAgICAgICAgICBhbGxvY2F0aW9uU2l6ZShzeW1ib2xUYWJsZSkKICAgICAgICAgICAgICAgICAp
Ci0gICAgICAgICAgICApIEpTQWN0aXZhdGlvbihnbG9iYWxEYXRhLCBjYWxsRnJhbWUsIHN5bWJv
bFRhYmxlKTsKLSAgICAgICAgICAgIGFjdGl2YXRpb24tPmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOworICAgICAgICAgICAgKSBKU0FjdGl2YXRpb24odm0sIGNhbGxGcmFtZSwgc3ltYm9sVGFi
bGUpOworICAgICAgICAgICAgYWN0aXZhdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAg
ICAgICAgcmV0dXJuIGFjdGl2YXRpb247CiAgICAgICAgIH0KIApAQCAtNzUsMTEgKzc1LDExIEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBKU09iamVjdCogdG9UaGlzT2JqZWN0
KEpTQ2VsbCosIEV4ZWNTdGF0ZSopOwogCi0gICAgICAgIHZvaWQgdGVhck9mZihKU0dsb2JhbERh
dGEmKTsKKyAgICAgICAgdm9pZCB0ZWFyT2ZmKFZNJik7CiAgICAgICAgIAogICAgICAgICBzdGF0
aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShn
bG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhBY3RpdmF0aW9uT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgfQorICAgICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvKSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90bywgVHlwZUluZm8oQWN0aXZhdGlvbk9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7IH0KIAogICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiByZWdp
c3RlckF0KGludCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNWYWxpZEluZGV4KGludCkgY29uc3Q7
CkBAIC05Niw3ICs5Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHN5bWJvbFRh
YmxlR2V0KFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgICAgIGJvb2wg
c3ltYm9sVGFibGVHZXQoUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmLCBib29sJiBzbG90SXNX
cml0ZWFibGUpOwogICAgICAgICBib29sIHN5bWJvbFRhYmxlUHV0KEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIGJvb2wgc3ltYm9s
VGFibGVQdXRXaXRoQXR0cmlidXRlcyhKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOworICAgICAgICBib29sIHN5bWJvbFRhYmxlUHV0V2l0
aEF0dHJpYnV0ZXMoVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMpOwogCiAgICAgICAgIHN0YXRpYyBKU1ZhbHVlIGFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUq
LCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwogICAgICAgICBORVZFUl9JTkxJTkUgUHJvcGVydHlT
bG90OjpHZXRWYWx1ZUZ1bmMgZ2V0QXJndW1lbnRzR2V0dGVyKCk7CkBAIC0xMTAsOSArMTEwLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgZXh0ZXJuIGludCBhY3RpdmF0aW9uQ291bnQ7CiAgICAg
ZXh0ZXJuIGludCBhbGxUaGVUaGluZ3NDb3VudDsKIAotICAgIGlubGluZSBKU0FjdGl2YXRpb246
OkpTQWN0aXZhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIENhbGxGcmFtZSogY2FsbEZy
YW1lLCBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCisgICAgaW5saW5lIEpTQWN0aXZh
dGlvbjo6SlNBY3RpdmF0aW9uKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFNoYXJlZFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKICAgICAgICAgOiBCYXNlKAotICAgICAgICAgICAgZ2xv
YmFsRGF0YSwKKyAgICAgICAgICAgIHZtLAogICAgICAgICAgICAgY2FsbEZyYW1lLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSwKICAgICAgICAgICAgIGNhbGxG
cmFtZS0+cmVnaXN0ZXJzKCksCiAgICAgICAgICAgICBjYWxsRnJhbWUtPnNjb3BlKCksCkBAIC0x
NDksNyArMTQ5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBzdG9yYWdlT2Zm
c2V0KCkgLSAoc3ltYm9sVGFibGUtPmNhcHR1cmVTdGFydCgpICogc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpOwogICAgIH0KIAotICAgIGlubGluZSB2b2lkIEpTQWN0aXZhdGlvbjo6dGVh
ck9mZihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgaW5saW5lIHZvaWQgSlNBY3RpdmF0
aW9uOjp0ZWFyT2ZmKFZNJiB2bSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNUb3JuT2ZmKCkp
OwogCkBAIC0xNTksNyArMTU5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgaW50IGNh
cHR1cmVFbmQgPSBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlRW5kKCk7CiAgICAgICAgIGZvciAoaW50
IGkgPSBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlU3RhcnQoKTsgaSA8IGNhcHR1cmVFbmQ7ICsraSkK
LSAgICAgICAgICAgIGRzdFtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgc3JjW2ldLmdldCgpKTsK
KyAgICAgICAgICAgIGRzdFtpXS5zZXQodm0sIHRoaXMsIHNyY1tpXS5nZXQoKSk7CiAKICAgICAg
ICAgbV9yZWdpc3RlcnMgPSBkc3Q7CiAgICAgICAgIEFTU0VSVChpc1Rvcm5PZmYoKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTQ4
NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDEwICs0OCwxMCBAQCBBU1NFUlRfSEFTX1RSSVZJQUxfREVTVFJVQ1RP
UihKU0FycmF5KTsKIAogY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXk6OnNfaW5mbyA9IHsiQXJyYXki
LCAmSlNOb25GaW5hbE9iamVjdDo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
QXJyYXkpfTsKIAotQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseUluRGljdGlvbmFyeUlu
ZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGluaXRpYWxMZW5n
dGgpCitCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5SW5EaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlKFZNJiB2bSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKIHsKICAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKAotICAgICAgICBnbG9iYWxEYXRhLCAwLCAwLCB0
cnVlLCBJbmRleGluZ0hlYWRlcigpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOworICAgICAg
ICB2bSwgMCwgMCwgdHJ1ZSwgSW5kZXhpbmdIZWFkZXIoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9y
KDApKTsKICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOwogICAgIHN0b3JhZ2UtPnNldExlbmd0aChpbml0aWFsTGVuZ3RoKTsKICAgICBzdG9yYWdl
LT5zZXRWZWN0b3JMZW5ndGgoMCk7CkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgSlNBcnJheTo6c2V0
TGVuZ3RoV3JpdGFibGUoRXhlY1N0YXQKICAgICBpZiAoIWlzTGVuZ3RoV3JpdGFibGUoKSB8fCB3
cml0YWJsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
KGV4ZWMtPnZtKCkpOwogCiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gYXJyYXlTdG9y
YWdlKCktPm1fc3BhcnNlTWFwLmdldCgpOwogICAgIEFTU0VSVChtYXApOwpAQCAtMjQ0LDkgKzI0
NCw5IEBAIHZvaWQgSlNBcnJheTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWUKIH0KIAogLy8g
VGhpcyBtZXRob2QgbWFrZXMgcm9vbSBpbiB0aGUgdmVjdG9yLCBidXQgbGVhdmVzIHRoZSBuZXcg
c3BhY2UgZm9yIGNvdW50IHNsb3RzIHVuY2xlYXJlZC4KLWJvb2wgSlNBcnJheTo6dW5zaGlmdENv
dW50U2xvd0Nhc2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBib29sIGFkZFRvRnJvbnQsIHVu
c2lnbmVkIGNvdW50KQorYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdm0s
IGJvb2wgYWRkVG9Gcm9udCwgdW5zaWduZWQgY291bnQpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOworICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZSh2bSk7CiAgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKTsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFj
aXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgdW5zaWduZWQgcHJv
cGVydHlTaXplID0gc3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKTsKQEAgLTI4Niw3ICsyODYs
NyBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvCiAgICAgICAgIG5l
d1N0b3JhZ2VDYXBhY2l0eSA9IGN1cnJlbnRDYXBhY2l0eTsKICAgICB9IGVsc2UgewogICAgICAg
ICBzaXplX3QgbmV3U2l6ZSA9IEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNp
dHksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihkZXNpcmVkQ2FwYWNpdHkpKTsKLSAgICAg
ICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKG5ld1NpemUsICZuZXdB
bGxvY0Jhc2UpKQorICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKG5ld1Np
emUsICZuZXdBbGxvY0Jhc2UpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBu
ZXdTdG9yYWdlQ2FwYWNpdHkgPSBkZXNpcmVkQ2FwYWNpdHk7CiAgICAgfQpAQCAtNDA4LDkgKzQw
OCw5IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAg
aWYgKG5ld0xlbmd0aCA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKSB7CiAgICAgICAgICAgICBy
ZXR1cm4gc2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKICAgICAgICAgICAgICAgICBleGVjLCBu
ZXdMZW5ndGgsIHRocm93RXhjZXB0aW9uLAotICAgICAgICAgICAgICAgIGNvbnZlcnRDb250aWd1
b3VzVG9BcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgICAgICAgICAg
Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVjLT52bSgpKSk7CiAgICAgICAgIH0K
LSAgICAgICAgY3JlYXRlSW5pdGlhbFVuZGVjaWRlZChleGVjLT5nbG9iYWxEYXRhKCksIG5ld0xl
bmd0aCk7CisgICAgICAgIGNyZWF0ZUluaXRpYWxVbmRlY2lkZWQoZXhlYy0+dm0oKSwgbmV3TGVu
Z3RoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRo
VW5kZWNpZGVkOgpAQCAtNDI0LDEwICs0MjQsMTAgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgo
RXhlY1N0YXRlKiBleGVjLAogICAgICAgICAgICAgICAgICYmICFpc0RlbnNlRW5vdWdoRm9yVmVj
dG9yKG5ld0xlbmd0aCwgY291bnRFbGVtZW50cygpKSkpIHsKICAgICAgICAgICAgIHJldHVybiBz
ZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAogICAgICAgICAgICAgICAgIGV4ZWMsIG5ld0xlbmd0
aCwgdGhyb3dFeGNlcHRpb24sCi0gICAgICAgICAgICAgICAgZW5zdXJlQXJyYXlTdG9yYWdlKGV4
ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAgICAgICAgICAgIGVuc3VyZUFycmF5U3RvcmFnZShl
eGVjLT52bSgpKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG5ld0xlbmd0aCA+IG1fYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKSkgewotICAgICAgICAgICAgZW5zdXJlTGVuZ3RoKGV4ZWMtPmds
b2JhbERhdGEoKSwgbmV3TGVuZ3RoKTsKKyAgICAgICAgICAgIGVuc3VyZUxlbmd0aChleGVjLT52
bSgpLCBuZXdMZW5ndGgpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhEb3VibGUp
IHsKQEAgLTU0OSwxOSArNTQ5LDE5IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmEKIHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewog
ICAgIGNhc2UgQXJyYXlDbGFzczogewotICAgICAgICBjcmVhdGVJbml0aWFsVW5kZWNpZGVkKGV4
ZWMtPmdsb2JhbERhdGEoKSwgMCk7CisgICAgICAgIGNyZWF0ZUluaXRpYWxVbmRlY2lkZWQoZXhl
Yy0+dm0oKSwgMCk7CiAgICAgICAgIC8vIEZhbGwgdGhyb3VnaC4KICAgICB9CiAgICAgICAgIAog
ICAgIGNhc2UgQXJyYXlXaXRoVW5kZWNpZGVkOiB7Ci0gICAgICAgIGNvbnZlcnRVbmRlY2lkZWRG
b3JWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIHZhbHVlKTsKKyAgICAgICAgY29udmVydFVuZGVj
aWRlZEZvclZhbHVlKGV4ZWMtPnZtKCksIHZhbHVlKTsKICAgICAgICAgcHVzaChleGVjLCB2YWx1
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRo
SW50MzI6IHsKICAgICAgICAgaWYgKCF2YWx1ZS5pc0ludDMyKCkpIHsKLSAgICAgICAgICAgIGNv
bnZlcnRJbnQzMkZvclZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdmFsdWUpOworICAgICAgICAg
ICAgY29udmVydEludDMyRm9yVmFsdWUoZXhlYy0+dm0oKSwgdmFsdWUpOwogICAgICAgICAgICAg
cHVzaChleGVjLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTU4
OSw3ICs1ODksNyBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAg
ICAgICAgQVNTRVJUKGxlbmd0aCA8PSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwogICAg
ICAgICBpZiAobGVuZ3RoIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKSB7Ci0gICAgICAg
ICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2xlbmd0aF0uc2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtsZW5ndGhdLnNldChleGVjLT52bSgpLCB0aGlzLCB2YWx1ZSk7CiAgICAgICAgICAgICBtX2J1
dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCArIDEpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CkBAIC02MDcsMTMgKzYwNywxMyBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRoRG91YmxlOiB7
CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgY29udmVydERv
dWJsZVRvQ29udGlndW91cyhleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICAgICAgY29udmVy
dERvdWJsZVRvQ29udGlndW91cyhleGVjLT52bSgpKTsKICAgICAgICAgICAgIHB1c2goZXhlYywg
dmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGRvdWJsZSB2
YWx1ZUFzRG91YmxlID0gdmFsdWUuYXNOdW1iZXIoKTsKICAgICAgICAgaWYgKHZhbHVlQXNEb3Vi
bGUgIT0gdmFsdWVBc0RvdWJsZSkgewotICAgICAgICAgICAgY29udmVydERvdWJsZVRvQ29udGln
dW91cyhleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICAgICAgY29udmVydERvdWJsZVRvQ29u
dGlndW91cyhleGVjLT52bSgpKTsKICAgICAgICAgICAgIHB1c2goZXhlYywgdmFsdWUpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC02NTMsNyArNjUzLDcgQEAgdm9pZCBKU0Fy
cmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgICAgICAvLyBGYXN0IGNhc2UgLSBw
dXNoIHdpdGhpbiB2ZWN0b3IsIGFsd2F5cyB1cGRhdGUgbV9sZW5ndGggJiBtX251bVZhbHVlc0lu
VmVjdG9yLgogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKICAg
ICAgICAgaWYgKGxlbmd0aCA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7Ci0gICAgICAgICAg
ICBzdG9yYWdlLT5tX3ZlY3RvcltsZW5ndGhdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IHZhbHVlKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2xlbmd0aF0uc2V0KGV4ZWMt
PnZtKCksIHRoaXMsIHZhbHVlKTsKICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5n
dGggKyAxKTsKICAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTc1NCw3ICs3NTQsNyBAQCBib29sIEpTQXJyYXk6OnNoaWZ0
Q291bnRXaXRoQW55SW5kZXhpbmdUCiAgICAgICAgIC8vIFdlIG1heSBoYXZlIHRvIHdhbGsgdGhl
IGVudGlyZSBhcnJheSB0byBkbyB0aGUgc2hpZnQuIFdlJ3JlIHdpbGxpbmcgdG8gZG8KICAgICAg
ICAgLy8gc28gb25seSBpZiBpdCdzIG5vdCBob3JyaWJseSBzbG93LgogICAgICAgICBpZiAob2xk
TGVuZ3RoIC0gKHN0YXJ0SW5kZXggKyBjb3VudCkgPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkK
LSAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShzdGFydEluZGV4
LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAg
ICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50
LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOwogICAgICAgICAKICAgICAgICAgdW5z
aWduZWQgZW5kID0gb2xkTGVuZ3RoIC0gY291bnQ7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IHN0YXJ0SW5kZXg7IGkgPCBlbmQ7ICsraSkgewpAQCAtNzY4LDcgKzc2OCw3IEBAIGJvb2wgSlNB
cnJheTo6c2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1QKICAgICAgICAgICAgICAgICAvLyBhYm91
dCBob2xlcyAoYXQgbGVhc3QgZm9yIG5vdyksIGJ1dCBpdCBjYW4gZGV0ZWN0IHRoZW0gcXVpY2ts
eS4gU28KICAgICAgICAgICAgICAgICAvLyB3ZSBjb252ZXJ0IHRvIGFycmF5IHN0b3JhZ2UgYW5k
IHRoZW4gYWxsb3cgdGhlIGFycmF5IHN0b3JhZ2UgcGF0aCB0bwogICAgICAgICAgICAgICAgIC8v
IGZpZ3VyZSBpdCBvdXQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJy
YXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xv
YmFsRGF0YSgpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlT
dG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gTm8gbmVlZCBmb3IgYSBiYXJyaWVyIHNp
bmNlIHdlJ3JlIGp1c3QgbW92aW5nIGRhdGEgYXJvdW5kIGluIHRoZSBzYW1lIHZlY3Rvci4KICAg
ICAgICAgICAgIC8vIFRoaXMgaXMgaW4gbGluZSB3aXRoIG91ciBzdGFuZGluZyBhc3N1bXB0aW9u
IHRoYXQgd2Ugd29uJ3QgaGF2ZSBhIGRlbGV0aW9uCkBAIC03ODksNyArNzg5LDcgQEAgYm9vbCBK
U0FycmF5OjpzaGlmdENvdW50V2l0aEFueUluZGV4aW5nVAogICAgICAgICAvLyBXZSBtYXkgaGF2
ZSB0byB3YWxrIHRoZSBlbnRpcmUgYXJyYXkgdG8gZG8gdGhlIHNoaWZ0LiBXZSdyZSB3aWxsaW5n
IHRvIGRvCiAgICAgICAgIC8vIHNvIG9ubHkgaWYgaXQncyBub3QgaG9ycmlibHkgc2xvdy4KICAg
ICAgICAgaWYgKG9sZExlbmd0aCAtIChzdGFydEluZGV4ICsgY291bnQpID49IE1JTl9TUEFSU0Vf
QVJSQVlfSU5ERVgpCi0gICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3Jh
Z2Uoc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRh
KCkpKTsKKyAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShzdGFy
dEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsKICAgICAgICAg
CiAgICAgICAgIHVuc2lnbmVkIGVuZCA9IG9sZExlbmd0aCAtIGNvdW50OwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpIDwgZW5kOyArK2kpIHsKQEAgLTgwMyw3ICs4MDMs
NyBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUCiAgICAgICAgICAg
ICAgICAgLy8gYWJvdXQgaG9sZXMgKGF0IGxlYXN0IGZvciBub3cpLCBidXQgaXQgY2FuIGRldGVj
dCB0aGVtIHF1aWNrbHkuIFNvCiAgICAgICAgICAgICAgICAgLy8gd2UgY29udmVydCB0byBhcnJh
eSBzdG9yYWdlIGFuZCB0aGVuIGFsbG93IHRoZSBhcnJheSBzdG9yYWdlIHBhdGggdG8KICAgICAg
ICAgICAgICAgICAvLyBmaWd1cmUgaXQgb3V0LgotICAgICAgICAgICAgICAgIHJldHVybiBzaGlm
dENvdW50V2l0aEFycmF5U3RvcmFnZShzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9y
YWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBzaGlmdENv
dW50V2l0aEFycmF5U3RvcmFnZShzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdl
KGV4ZWMtPnZtKCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIE5vIG5lZWQgZm9y
IGEgYmFycmllciBzaW5jZSB3ZSdyZSBqdXN0IG1vdmluZyBkYXRhIGFyb3VuZCBpbiB0aGUgc2Ft
ZSB2ZWN0b3IuCiAgICAgICAgICAgICAvLyBUaGlzIGlzIGluIGxpbmUgd2l0aCBvdXIgc3RhbmRp
bmcgYXNzdW1wdGlvbiB0aGF0IHdlIHdvbid0IGhhdmUgYSBkZWxldGlvbgpAQCAtODUwLDcgKzg1
MCw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmEKICAgICAgICAg
c3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCArIGNvdW50KTsKICAgICB9IGVs
c2UgaWYgKCFtb3ZlRnJvbnQgJiYgdmVjdG9yTGVuZ3RoIC0gbGVuZ3RoID49IGNvdW50KQogICAg
ICAgICBzdG9yYWdlID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPmFycmF5U3RvcmFnZSgpOwotICAg
IGVsc2UgaWYgKHVuc2hpZnRDb3VudFNsb3dDYXNlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbW92ZUZy
b250LCBjb3VudCkpCisgICAgZWxzZSBpZiAodW5zaGlmdENvdW50U2xvd0Nhc2UoZXhlYy0+dm0o
KSwgbW92ZUZyb250LCBjb3VudCkpCiAgICAgICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsK
ICAgICBlbHNlIHsKICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwpAQCAtODg2
LDE0ICs4ODYsMTQgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbgog
ICAgICAgICAvLyBXZSBtYXkgaGF2ZSB0byB3YWxrIHRoZSBlbnRpcmUgYXJyYXkgdG8gZG8gdGhl
IHVuc2hpZnQuIFdlJ3JlIHdpbGxpbmcgdG8gZG8gc28KICAgICAgICAgLy8gb25seSBpZiBpdCdz
IG5vdCBob3JyaWJseSBzbG93LgogICAgICAgICBpZiAob2xkTGVuZ3RoIC0gc3RhcnRJbmRleCA+
PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKQotICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3Vu
dFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3Rv
cmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291
bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0
b3JhZ2UoZXhlYy0+dm0oKSkpOwogICAgICAgICAKLSAgICAgICAgZW5zdXJlTGVuZ3RoKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgb2xkTGVuZ3RoICsgY291bnQpOworICAgICAgICBlbnN1cmVMZW5ndGgo
ZXhlYy0+dm0oKSwgb2xkTGVuZ3RoICsgY291bnQpOwogICAgICAgICAKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gb2xkTGVuZ3RoOyBpLS0gPiBzdGFydEluZGV4OykgewogICAgICAgICAgICAg
SlNWYWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKICAgICAgICAg
ICAgIGlmIChVTkxJS0VMWSghdikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3Vu
dFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3Rv
cmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5zaGlm
dENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJy
YXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsKICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1
b3VzKClbaSArIGNvdW50XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOwogICAgICAgICB9CiAg
ICAgICAgIApAQCAtOTExLDE0ICs5MTEsMTQgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRX
aXRoQW55SW5kZXhpbgogICAgICAgICAvLyBXZSBtYXkgaGF2ZSB0byB3YWxrIHRoZSBlbnRpcmUg
YXJyYXkgdG8gZG8gdGhlIHVuc2hpZnQuIFdlJ3JlIHdpbGxpbmcgdG8gZG8gc28KICAgICAgICAg
Ly8gb25seSBpZiBpdCdzIG5vdCBob3JyaWJseSBzbG93LgogICAgICAgICBpZiAob2xkTGVuZ3Ro
IC0gc3RhcnRJbmRleCA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKQotICAgICAgICAgICAgcmV0
dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgc3RhcnRJbmRleCwgY291bnQs
IGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgICAgIHJl
dHVybiB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50
LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOwogICAgICAgICAKLSAgICAgICAgZW5z
dXJlTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgb2xkTGVuZ3RoICsgY291bnQpOworICAgICAg
ICBlbnN1cmVMZW5ndGgoZXhlYy0+dm0oKSwgb2xkTGVuZ3RoICsgY291bnQpOwogICAgICAgICAK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkTGVuZ3RoOyBpLS0gPiBzdGFydEluZGV4Oykg
ewogICAgICAgICAgICAgZG91YmxlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgp
W2ldOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKHYgIT0gdikpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgc3RhcnRJbmRleCwgY291
bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBzdGFydEluZGV4
LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsKICAgICAgICAgICAgIG1f
YnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaSArIGNvdW50XSA9IHY7CiAgICAgICAgIH0K
ICAgICAgICAgCkBAIC0xMDY0LDkgKzEwNjQsOSBAQCB2b2lkIEpTQXJyYXk6OnNvcnROdW1lcmlj
KEV4ZWNTdGF0ZSogZXhlCiB0ZW1wbGF0ZSA8SW5kZXhpbmdUeXBlPiBzdHJ1Y3QgQ29udGlndW91
c1R5cGVBY2Nlc3NvciB7CiAgICAgdHlwZWRlZiBXcml0ZUJhcnJpZXI8VW5rbm93bj4gVHlwZTsK
ICAgICBzdGF0aWMgSlNWYWx1ZSBnZXRBc1ZhbHVlKENvbnRpZ3VvdXNEYXRhPFR5cGU+IGRhdGEs
IHNpemVfdCBpKSB7IHJldHVybiBkYXRhW2ldLmdldCgpOyB9Ci0gICAgc3RhdGljIHZvaWQgc2V0
V2l0aFZhbHVlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNBcnJheSogdGhpc1ZhbHVlLCBD
b250aWd1b3VzRGF0YTxUeXBlPiBkYXRhLCBzaXplX3QgaSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICBz
dGF0aWMgdm9pZCBzZXRXaXRoVmFsdWUoVk0mIHZtLCBKU0FycmF5KiB0aGlzVmFsdWUsIENvbnRp
Z3VvdXNEYXRhPFR5cGU+IGRhdGEsIHNpemVfdCBpLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAg
ICAgICAgZGF0YVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpc1ZhbHVlLCB2YWx1ZSk7CisgICAgICAg
IGRhdGFbaV0uc2V0KHZtLCB0aGlzVmFsdWUsIHZhbHVlKTsKICAgICB9CiAgICAgc3RhdGljIHZv
aWQgcmVwbGFjZURhdGFSZWZlcmVuY2UoQ29udGlndW91c0RhdGE8VHlwZT4qIG91dERhdGEsIENv
bnRpZ3VvdXNKU1ZhbHVlcyBpbkRhdGEpCiAgICAgewpAQCAtMTA3Nyw3ICsxMDc3LDcgQEAgdGVt
cGxhdGUgPEluZGV4aW5nVHlwZT4gc3RydWN0IENvbnRpZ3VvdQogdGVtcGxhdGUgPD4gc3RydWN0
IENvbnRpZ3VvdXNUeXBlQWNjZXNzb3I8QXJyYXlXaXRoRG91YmxlPiB7CiAgICAgdHlwZWRlZiBk
b3VibGUgVHlwZTsKICAgICBzdGF0aWMgSlNWYWx1ZSBnZXRBc1ZhbHVlKENvbnRpZ3VvdXNEYXRh
PFR5cGU+IGRhdGEsIHNpemVfdCBpKSB7IEFTU0VSVChkYXRhW2ldID09IGRhdGFbaV0pOyByZXR1
cm4gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgZGF0YVtpXSk7IH0KLSAgICBzdGF0
aWMgdm9pZCBzZXRXaXRoVmFsdWUoSlNHbG9iYWxEYXRhJiwgSlNBcnJheSosIENvbnRpZ3VvdXNE
YXRhPFR5cGU+IGRhdGEsIHNpemVfdCBpLCBKU1ZhbHVlIHZhbHVlKQorICAgIHN0YXRpYyB2b2lk
IHNldFdpdGhWYWx1ZShWTSYsIEpTQXJyYXkqLCBDb250aWd1b3VzRGF0YTxUeXBlPiBkYXRhLCBz
aXplX3QgaSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIGRhdGFbaV0gPSB2YWx1ZS5h
c051bWJlcigpOwogICAgIH0KQEAgLTEwOTQsNyArMTA5NCw3IEBAIHZvaWQgSlNBcnJheTo6c29y
dENvbXBhY3RlZFZlY3RvcihFeGVjU3QKICAgICBpZiAoIXJlbGV2YW50TGVuZ3RoKQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKICAgICAvLyBDb252ZXJ0aW5n
IEphdmFTY3JpcHQgdmFsdWVzIHRvIHN0cmluZ3MgY2FuIGJlIGV4cGVuc2l2ZSwgc28gd2UgZG8g
aXQgb25jZSB1cCBmcm9udCBhbmQgc29ydCBiYXNlZCBvbiB0aGF0LgogICAgIC8vIFRoaXMgaXMg
YSBjb25zaWRlcmFibGUgaW1wcm92ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFy
aXNvbiwgdGhvdWdoIGl0IHJlcXVpcmVzIGEgbGFyZ2UgdGVtcG9yYXJ5CkBAIC0xMTUxLDEyICsx
MTUxLDEyIEBAIHZvaWQgSlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3RvcihFeGVjU3QKICAgICBj
YXNlIEFycmF5V2l0aEludDMyOgogICAgIGNhc2UgQXJyYXlXaXRoRG91YmxlOgogICAgIGNhc2Ug
QXJyYXlXaXRoQ29udGlndW91czoKLSAgICAgICAgZW5zdXJlTGVuZ3RoKGdsb2JhbERhdGEsIHJl
bGV2YW50TGVuZ3RoKTsKKyAgICAgICAgZW5zdXJlTGVuZ3RoKHZtLCByZWxldmFudExlbmd0aCk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFn
ZToKICAgICAgICAgaWYgKGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSA8IHJlbGV2YW50
TGVuZ3RoKSB7Ci0gICAgICAgICAgICBpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxE
YXRhKCksIHJlbGV2YW50TGVuZ3RoKTsKKyAgICAgICAgICAgIGluY3JlYXNlVmVjdG9yTGVuZ3Ro
KGV4ZWMtPnZtKCksIHJlbGV2YW50TGVuZ3RoKTsKICAgICAgICAgICAgIENvbnRpZ3VvdXNUeXBl
QWNjZXNzb3I8aW5kZXhpbmdUeXBlPjo6cmVwbGFjZURhdGFSZWZlcmVuY2UoJmRhdGEsIGFycmF5
U3RvcmFnZSgpLT52ZWN0b3IoKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGFycmF5U3RvcmFn
ZSgpLT5sZW5ndGgoKSA8IHJlbGV2YW50TGVuZ3RoKQpAQCAtMTE2OCw3ICsxMTY4LDcgQEAgdm9p
ZCBKU0FycmF5Ojpzb3J0Q29tcGFjdGVkVmVjdG9yKEV4ZWNTdAogICAgIH0KIAogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcmVsZXZhbnRMZW5ndGg7IGkrKykKLSAgICAgICAgQ29udGlndW91
c1R5cGVBY2Nlc3NvcjxpbmRleGluZ1R5cGU+OjpzZXRXaXRoVmFsdWUoZ2xvYmFsRGF0YSwgdGhp
cywgZGF0YSwgaSwgdmFsdWVzW2ldLmZpcnN0KTsKKyAgICAgICAgQ29udGlndW91c1R5cGVBY2Nl
c3NvcjxpbmRleGluZ1R5cGU+OjpzZXRXaXRoVmFsdWUodm0sIHRoaXMsIGRhdGEsIGksIHZhbHVl
c1tpXS5maXJzdCk7CiAgICAgCiAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0
b3IoJnZhbHVlcyk7CiB9CkBAIC0xMzg3LDEzICsxMzg3LDEzIEBAIHZvaWQgSlNBcnJheTo6c29y
dFZlY3RvcihFeGVjU3RhdGUqIGV4ZWMKICAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFjayBpbnRv
IG1fc3RvcmFnZS4KICAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJl
LCA0ND46Okl0ZXJhdG9yIGl0ZXI7CiAgICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOwot
ICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtZW50
c1RvRXh0cmFjdFRocmVzaG9sZDsgKytpKSB7CiAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5
KCktPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSA9PSBBcnJheVdpdGhEb3VibGUpCiAgICAgICAgICAgICBidXR0ZXJmbHkoKS0+Y29udGln
dW91c0RvdWJsZSgpW2ldID0gdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1sqaXRlcl0udmFsdWUu
YXNOdW1iZXIoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY3VycmVudEluZGV4aW5nRGF0
YSgpW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzWypp
dGVyXS52YWx1ZSk7CisgICAgICAgICAgICBjdXJyZW50SW5kZXhpbmdEYXRhKClbaV0uc2V0KHZt
LCB0aGlzLCB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzWyppdGVyXS52YWx1ZSk7CiAgICAgICAg
ICsraXRlcjsKICAgICB9CiAgICAgLy8gUHV0IHVuZGVmaW5lZCB2YWx1ZXMgYmFjayBpbi4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDE0ODYz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBj
b3B5KQpAQCAtMzksMTkgKzM5LDE5IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTTm9uRmluYWxP
YmplY3QgQmFzZTsKIAogcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IEpTQXJyYXkoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJm
bHkpCi0gICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1
dHRlcmZseSkKKyAgICBleHBsaWNpdCBKU0FycmF5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQorICAgICAgICA6IEpTTm9uRmluYWxPYmplY3Qodm0s
IHN0cnVjdHVyZSwgYnV0dGVyZmx5KQogICAgIHsKICAgICB9CiAKIHB1YmxpYzoKLSAgICBzdGF0
aWMgSlNBcnJheSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGlu
aXRpYWxMZW5ndGggPSAwKTsKKyAgICBzdGF0aWMgSlNBcnJheSogY3JlYXRlKFZNJiwgU3RydWN0
dXJlKiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDApOwogCiAgICAgLy8gdHJ5Q3JlYXRlVW5p
bml0aWFsaXplZCBpcyB1c2VkIGZvciBmYXN0IGNvbnN0cnVjdGlvbiBvZiBhcnJheXMgd2hvc2Ug
c2l6ZSBhbmQKICAgICAvLyBjb250ZW50cyBhcmUga25vd24gYXQgdGltZSBvZiBjcmVhdGlvbi4g
Q2xpZW50cyBvZiB0aGlzIGludGVyZmFjZSBtdXN0OgogICAgIC8vICAgLSBudWxsLWNoZWNrIHRo
ZSByZXN1bHQgKGluZGljYXRpbmcgb3V0IG9mIG1lbW9yeSwgb3Igb3RoZXJ3aXNlIHVuYWJsZSB0
byBhbGxvY2F0ZSB2ZWN0b3IpLgogICAgIC8vICAgLSBjYWxsICdpbml0aWFsaXplSW5kZXgnIGZv
ciBhbGwgcHJvcGVydGllcyBpbiBzZXF1ZW5jZSwgZm9yIDAgPD0gaSA8IGluaXRpYWxMZW5ndGgu
Ci0gICAgc3RhdGljIEpTQXJyYXkqIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRh
JiwgU3RydWN0dXJlKiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCk7CisgICAgc3RhdGljIEpTQXJy
YXkqIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBpbml0
aWFsTGVuZ3RoKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93
blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsKIApAQCAtODQsNyArODQsNyBAQCBwdWJs
aWM6CiAKICAgICBib29sIHNoaWZ0Q291bnRGb3JTaGlmdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHNo
aWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0
b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0
aEFycmF5U3RvcmFnZShzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMt
PnZtKCkpKTsKICAgICB9CiAgICAgYm9vbCBzaGlmdENvdW50Rm9yU3BsaWNlKEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCiAgICAgewpAQCAtMTA2
LDcgKzEwNiw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgYm9vbCB1bnNoaWZ0Q291bnRGb3JT
aGlmdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoZXhl
Yywgc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRh
KCkpKTsKKyAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoZXhlYywg
c3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT52bSgpKSk7CiAgICAg
fQogICAgIGJvb2wgdW5zaGlmdENvdW50Rm9yU3BsaWNlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCiAgICAgewpAQCAtMTI5LDkgKzEyOSw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIGZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSosIE1hcmtlZEFyZ3VtZW50
QnVmZmVyJik7CiAgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwgQ2FsbEZyYW1l
KiwgdWludDMyX3QgbGVuZ3RoKTsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQorICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8sIGluZGV4aW5nVHlwZSk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywgaW5kZXhpbmdUeXBlKTsKICAgICB9CiAgICAgICAgIAog
cHJvdGVjdGVkOgpAQCAtMTU2LDcgKzE1Niw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIHVuc2hp
ZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUoRXhlY1N0YXRlKiwgdW5zaWduZWQgc3RhcnRJbmRl
eCwgdW5zaWduZWQgY291bnQpOwogICAgIGJvb2wgdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFn
ZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCwgQXJyYXlT
dG9yYWdlKik7Ci0gICAgYm9vbCB1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsb2JhbERhdGEmLCBi
b29sLCB1bnNpZ25lZCk7CisgICAgYm9vbCB1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYsIGJvb2ws
IHVuc2lnbmVkKTsKIAogICAgIHRlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+CiAg
ICAgdm9pZCBzb3J0TnVtZXJpY1ZlY3RvcihFeGVjU3RhdGUqLCBKU1ZhbHVlIGNvbXBhcmVGdW5j
dGlvbiwgQ2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJik7CkBAIC0xNzQsMjEgKzE3NCwyMSBAQCBw
cml2YXRlOgogICAgIHZvaWQgY29tcGFjdEZvclNvcnRpbmcodW5zaWduZWQmIG51bURlZmluZWQs
IHVuc2lnbmVkJiBuZXdSZWxldmFudExlbmd0aCk7CiB9OwogCi1pbmxpbmUgQnV0dGVyZmx5KiBj
cmVhdGVDb250aWd1b3VzQXJyYXlCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1
bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkJiB2ZWN0b3JMZW5ndGgpCitpbmxpbmUgQnV0dGVyZmx5
KiBjcmVhdGVDb250aWd1b3VzQXJyYXlCdXR0ZXJmbHkoVk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgs
IHVuc2lnbmVkJiB2ZWN0b3JMZW5ndGgpCiB7CiAgICAgSW5kZXhpbmdIZWFkZXIgaGVhZGVyOwog
ICAgIHZlY3Rvckxlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKICAg
ICBoZWFkZXIuc2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CiAgICAgaGVhZGVyLnNldFB1
YmxpY0xlbmd0aChsZW5ndGgpOwogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gQnV0dGVyZmx5Ojpj
cmVhdGUoCi0gICAgICAgIGdsb2JhbERhdGEsIDAsIDAsIHRydWUsIGhlYWRlciwgdmVjdG9yTGVu
Z3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgICAgIHZtLCAwLCAwLCB0cnVlLCBo
ZWFkZXIsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLWlubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKK2lubGluZSBC
dXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5KFZNJiB2bSwgdW5zaWduZWQgaW5pdGlhbExl
bmd0aCkKIHsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKAot
ICAgICAgICBnbG9iYWxEYXRhLCAwLCAwLCB0cnVlLCBiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJh
eShpbml0aWFsTGVuZ3RoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKEJBU0VfVkVDVE9SX0xFTikp
OworICAgICAgICB2bSwgMCwgMCwgdHJ1ZSwgYmFzZUluZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5p
dGlhbExlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihCQVNFX1ZFQ1RPUl9MRU4pKTsKICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAg
IHN0b3JhZ2UtPm1faW5kZXhCaWFzID0gMDsKICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVh
cigpOwpAQCAtMTk2LDkgKzE5Niw5IEBAIGlubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0
dGVyZmx5KEoKICAgICByZXR1cm4gYnV0dGVyZmx5OwogfQogCi1CdXR0ZXJmbHkqIGNyZWF0ZUFy
cmF5QnV0dGVyZmx5SW5EaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYsIHVuc2ln
bmVkIGluaXRpYWxMZW5ndGgpOworQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseUluRGlj
dGlvbmFyeUluZGV4aW5nTW9kZShWTSYsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpOwogCi1pbmxp
bmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCitpbmxpbmUgSlNBcnJh
eSogSlNBcnJheTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVk
IGluaXRpYWxMZW5ndGgpCiB7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHk7CiAgICAgaWYgKExJ
S0VMWSghaGFzQXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSkgewpAQCAt
MjA4LDcgKzIwOCw3IEBAIGlubGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGUoSlNHbG9iYWwK
ICAgICAgICAgICAgIHx8IGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQogICAg
ICAgICAgICAgfHwgaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAg
ICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aDsKLSAgICAgICAgYnV0dGVyZmx5ID0gY3JlYXRl
Q29udGlndW91c0FycmF5QnV0dGVyZmx5KGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgsIHZlY3Rv
ckxlbmd0aCk7CisgICAgICAgIGJ1dHRlcmZseSA9IGNyZWF0ZUNvbnRpZ3VvdXNBcnJheUJ1dHRl
cmZseSh2bSwgaW5pdGlhbExlbmd0aCwgdmVjdG9yTGVuZ3RoKTsKICAgICAgICAgQVNTRVJUKGlu
aXRpYWxMZW5ndGggPCBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKTsKICAgICAgICAgaWYgKGhhc0Rv
dWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgKytpKQpAQCAtMjE4LDE0ICsyMTgsMTQgQEAg
aW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNyZWF0ZShKU0dsb2JhbAogICAgICAgICBBU1NFUlQo
CiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aFNsb3dQ
dXRBcnJheVN0b3JhZ2UKICAgICAgICAgICAgIHx8IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkg
PT0gQXJyYXlXaXRoQXJyYXlTdG9yYWdlKTsKLSAgICAgICAgYnV0dGVyZmx5ID0gY3JlYXRlQXJy
YXlCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIGJ1dHRlcmZs
eSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5KHZtLCBpbml0aWFsTGVuZ3RoKTsKICAgICB9Ci0gICAg
SlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9i
YWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsK
LSAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgSlNBcnJheSogYXJy
YXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5Pih2bS5oZWFwKSkgSlNBcnJh
eSh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOworICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgcmV0dXJuIGFycmF5OwogfQogCi1pbmxpbmUgSlNBcnJheSogSlNBcnJheTo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQoraW5saW5lIEpTQXJyYXkqIEpTQXJy
YXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
dW5zaWduZWQgaW5pdGlhbExlbmd0aCkKIHsKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBz
dGQ6Om1heChCQVNFX1ZFQ1RPUl9MRU4sIGluaXRpYWxMZW5ndGgpOwogICAgIGlmICh2ZWN0b3JM
ZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQpAQCAtMjQwLDcgKzI0MCw3IEBAIGlu
bGluZSBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXQKICAgICAgICAgICAgIHx8IGhh
c0NvbnRpZ3VvdXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwogCiAgICAgICAgIHZvaWQq
IHRlbXA7Ci0gICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShC
dXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKSwgJnRlbXApKQorICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVT
dG9yYWdlKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVtcCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKICAgICAg
ICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKQEAgLTI1MSw3ICsy
NTEsNyBAQCBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0CiAgICAgICAg
IH0KICAgICB9IGVsc2UgewogICAgICAgICB2b2lkKiB0ZW1wOwotICAgICAgICBpZiAoIWdsb2Jh
bERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwg
dHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpLCAmdGVtcCkpCisgICAg
ICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoQnV0dGVyZmx5Ojp0b3RhbFNpemUo
MCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpLCAmdGVtcCkp
CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpm
cm9tQmFzZSh0ZW1wLCAwLCAwKTsKICAgICAgICAgKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIo
KSA9IGluZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCwgdmVjdG9yTGVuZ3RoKTsK
QEAgLTI2MSw4ICsyNjEsOCBAQCBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0CiAgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsTGVuZ3Ro
OwogICAgIH0KICAgICAgICAgCi0gICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEs
IHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKLSAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSk7CisgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U0FycmF5Pih2bS5oZWFwKSkgSlNBcnJheSh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOworICAg
IGFycmF5LT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0dXJuIGFycmF5OwogfQogCkBAIC0y
ODQsOSArMjg0LDkgQEAgaW5saW5lIGJvb2wgaXNKU0FycmF5KEpTVmFsdWUgdikgeyByZXR1cgog
CiBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1
cmUqIGFycmF5U3RydWN0dXJlLCBjb25zdCBBcmdMaXN0JiB2YWx1ZXMpCiB7Ci0gICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdmFsdWVzLnNpemUoKTsKLSAgICBKU0Fy
cmF5KiBhcnJheSA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoZ2xvYmFsRGF0YSwg
YXJyYXlTdHJ1Y3R1cmUsIGxlbmd0aCk7CisgICAgSlNBcnJheSogYXJyYXkgPSBKU0FycmF5Ojp0
cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCBhcnJheVN0cnVjdHVyZSwgbGVuZ3RoKTsKIAogICAg
IC8vIEZJWE1FOiB3ZSBzaG91bGQgcHJvYmFibHkgdGhyb3cgYW4gb3V0IG9mIG1lbW9yeSBlcnJv
ciBoZXJlLCBidXQKICAgICAvLyB3aGVuIG1ha2luZyB0aGlzIGNoYW5nZSB3ZSBzaG91bGQgY2hl
Y2sgdGhhdCBhbGwgY2xpZW50cyBvZiB0aGlzCkBAIC0yOTQsMTQgKzI5NCwxNCBAQCBpbmxpbmUg
SlNBcnJheSogY29uc3RydWN0QXJyYXkoRXhlY1N0YXRlCiAgICAgUkVMRUFTRV9BU1NFUlQoYXJy
YXkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAg
ICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KGdsb2JhbERhdGEsIGksIHZhbHVlcy5hdChpKSk7Cisg
ICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGksIHZhbHVlcy5hdChpKSk7CiAgICAg
cmV0dXJuIGFycmF5OwogfQogICAgIAogaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgY29uc3QgSlNWYWx1ZSog
dmFsdWVzLCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
ID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIEpTQXJyYXkqIGFycmF5ID0gSlNBcnJheTo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZChnbG9iYWxEYXRhLCBhcnJheVN0cnVjdHVyZSwgbGVuZ3RoKTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTQXJyYXkqIGFycmF5ID0gSlNBcnJheTo6
dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgYXJyYXlTdHJ1Y3R1cmUsIGxlbmd0aCk7CiAKICAg
ICAvLyBGSVhNRTogd2Ugc2hvdWxkIHByb2JhYmx5IHRocm93IGFuIG91dCBvZiBtZW1vcnkgZXJy
b3IgaGVyZSwgYnV0CiAgICAgLy8gd2hlbiBtYWtpbmcgdGhpcyBjaGFuZ2Ugd2Ugc2hvdWxkIGNo
ZWNrIHRoYXQgYWxsIGNsaWVudHMgb2YgdGhpcwpAQCAtMzA5LDcgKzMwOSw3IEBAIGlubGluZSBK
U0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUKICAgICBSRUxFQVNFX0FTU0VSVChhcnJh
eSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAg
IGFycmF5LT5pbml0aWFsaXplSW5kZXgoZ2xvYmFsRGF0YSwgaSwgdmFsdWVzW2ldKTsKKyAgICAg
ICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgaSwgdmFsdWVzW2ldKTsKICAgICByZXR1cm4g
YXJyYXk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRG
dW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNCb3VuZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAs
NyArODAsNyBAQCBKU0JvdW5kRnVuY3Rpb24qIEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlCiAgICAg
Q29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gSlNDOjpnZXRDb25zdHJ1Y3REYXRhKHRhcmdl
dEZ1bmN0aW9uLCBjb25zdHJ1Y3REYXRhKTsKICAgICBib29sIGNhbkNvbnN0cnVjdCA9IGNvbnN0
cnVjdFR5cGUgIT0gQ29uc3RydWN0VHlwZU5vbmU7CiAKLSAgICBOYXRpdmVFeGVjdXRhYmxlKiBl
eGVjdXRhYmxlID0gZXhlYy0+Z2xvYmFsRGF0YSgpLmdldEhvc3RGdW5jdGlvbihib3VuZEZ1bmN0
aW9uQ2FsbCwgY2FuQ29uc3RydWN0ID8gYm91bmRGdW5jdGlvbkNvbnN0cnVjdCA6IGNhbGxIb3N0
RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKTsKKyAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxl
ID0gZXhlYy0+dm0oKS5nZXRIb3N0RnVuY3Rpb24oYm91bmRGdW5jdGlvbkNhbGwsIGNhbkNvbnN0
cnVjdCA/IGJvdW5kRnVuY3Rpb25Db25zdHJ1Y3QgOiBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1
Y3Rvcik7CiAgICAgSlNCb3VuZEZ1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEpTQm91bmRGdW5jdGlvbj4oKmV4ZWMtPmhlYXAoKSkpIEpTQm91bmRGdW5jdGlv
bihleGVjLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+Ym91bmRGdW5jdGlvblN0cnVjdHVy
ZSgpLCB0YXJnZXRGdW5jdGlvbiwgYm91bmRUaGlzLCBib3VuZEFyZ3MpOwogCiAgICAgZnVuY3Rp
b24tPmZpbmlzaENyZWF0aW9uKGV4ZWMsIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7CkBAIC05
OSw5ICs5OSw5IEBAIGJvb2wgSlNCb3VuZEZ1bmN0aW9uOjpjdXN0b21IYXNJbnN0YW5jZSgKIAog
SlNCb3VuZEZ1bmN0aW9uOjpKU0JvdW5kRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIHRh
cmdldEZ1bmN0aW9uLCBKU1ZhbHVlIGJvdW5kVGhpcywgSlNWYWx1ZSBib3VuZEFyZ3MpCiAgICAg
OiBCYXNlKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQotICAgICwgbV90YXJnZXRGdW5j
dGlvbihleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHRhcmdldEZ1bmN0aW9uKQotICAgICwgbV9i
b3VuZFRoaXMoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBib3VuZFRoaXMpCi0gICAgLCBtX2Jv
dW5kQXJncyhleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGJvdW5kQXJncykKKyAgICAsIG1fdGFy
Z2V0RnVuY3Rpb24oZXhlYy0+dm0oKSwgdGhpcywgdGFyZ2V0RnVuY3Rpb24pCisgICAgLCBtX2Jv
dW5kVGhpcyhleGVjLT52bSgpLCB0aGlzLCBib3VuZFRoaXMpCisgICAgLCBtX2JvdW5kQXJncyhl
eGVjLT52bSgpLCB0aGlzLCBib3VuZEFyZ3MpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCShyZXZpc2lvbiAxNDg2Mzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtNDcsMTAgKzQ3LDEwIEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGJvdW5k
VGhpcygpIHsgcmV0dXJuIG1fYm91bmRUaGlzLmdldCgpOyB9CiAgICAgSlNWYWx1ZSBib3VuZEFy
Z3MoKSB7IHJldHVybiBtX2JvdW5kQXJncy5nZXQoKTsgfQogCi0gICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpIAorICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKSAKICAgICB7CiAgICAgICAgIEFTU0VSVChnbG9iYWxPYmplY3Qp
OwotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8pOyAKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7IAogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZv
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJ
KHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pT
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDcgQEAgSlNPYmplY3QqIEpT
VmFsdWU6OnN5bnRoZXNpemVQcm90b3R5cGUoRQogLy8gRUNNQSA4LjcuMgogdm9pZCBKU1ZhbHVl
OjpwdXRUb1ByaW1pdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsK
ICAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7CkBAIC0xMzcsNyAr
MTM3LDcgQEAgdm9pZCBKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZShFeGVjU3RhdGUqIAogICAgIGZv
ciAoOyA7IG9iaiA9IGFzT2JqZWN0KHByb3RvdHlwZSkpIHsKICAgICAgICAgdW5zaWduZWQgYXR0
cmlidXRlczsKICAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSBvYmotPnN0cnVjdHVyZSgpLT5nZXQoZ2xvYmFsRGF0YSwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gb2JqLT5zdHJ1Y3R1cmUoKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJp
YnV0ZXMsIHNwZWNpZmljVmFsdWUpOwogICAgICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZz
ZXQpIHsKICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpIHsKICAgICAgICAg
ICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKQEAgLTI5NSwyMCArMjk1LDIwIEBAIGJv
b2wgSlNWYWx1ZTo6aXNWYWxpZENhbGxlZSgpCiAKIEpTU3RyaW5nKiBKU1ZhbHVlOjp0b1N0cmlu
Z1Nsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICBKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBBU1NFUlQoIWlzU3RyaW5nKCkpOwogICAgIGlmIChpc0ludDMyKCkpCi0gICAgICAgIHJl
dHVybiBqc1N0cmluZygmZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5udW1lcmljU3RyaW5ncy5hZGQo
YXNJbnQzMigpKSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZygmdm0sIHZtLm51bWVyaWNTdHJp
bmdzLmFkZChhc0ludDMyKCkpKTsKICAgICBpZiAoaXNEb3VibGUoKSkKLSAgICAgICAgcmV0dXJu
IGpzU3RyaW5nKCZnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLm51bWVyaWNTdHJpbmdzLmFkZChhc0Rv
dWJsZSgpKSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZygmdm0sIHZtLm51bWVyaWNTdHJpbmdz
LmFkZChhc0RvdWJsZSgpKSk7CiAgICAgaWYgKGlzVHJ1ZSgpKQotICAgICAgICByZXR1cm4gZ2xv
YmFsRGF0YS5zbWFsbFN0cmluZ3MudHJ1ZVN0cmluZygpOworICAgICAgICByZXR1cm4gdm0uc21h
bGxTdHJpbmdzLnRydWVTdHJpbmcoKTsKICAgICBpZiAoaXNGYWxzZSgpKQotICAgICAgICByZXR1
cm4gZ2xvYmFsRGF0YS5zbWFsbFN0cmluZ3MuZmFsc2VTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJu
IHZtLnNtYWxsU3RyaW5ncy5mYWxzZVN0cmluZygpOwogICAgIGlmIChpc051bGwoKSkKLSAgICAg
ICAgcmV0dXJuIGdsb2JhbERhdGEuc21hbGxTdHJpbmdzLm51bGxTdHJpbmcoKTsKKyAgICAgICAg
cmV0dXJuIHZtLnNtYWxsU3RyaW5ncy5udWxsU3RyaW5nKCk7CiAgICAgaWYgKGlzVW5kZWZpbmVk
KCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLnNtYWxsU3RyaW5ncy51bmRlZmluZWRTdHJp
bmcoKTsKKyAgICAgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy51bmRlZmluZWRTdHJpbmcoKTsK
IAogICAgIEFTU0VSVChpc0NlbGwoKSk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGFzQ2VsbCgpLT50
b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJTdHJpbmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3
ICs0Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBKU0Nl
bGw7Ci1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0
OwogY2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBKU1N0cmluZzsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBA
QCBwdWJsaWM6CiAgICAgSlNDZWxsKENyZWF0aW5nRWFybHlDZWxsVGFnKTsKIAogcHJvdGVjdGVk
OgotICAgIEpTQ2VsbChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICBKU0NlbGwoVk0m
LCBTdHJ1Y3R1cmUqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBkZXN0cm95
KEpTQ2VsbCopOwogCiBwdWJsaWM6CkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICBib29s
IGlzQVBJVmFsdWVXcmFwcGVyKCkgY29uc3Q7CiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgp
IGNvbnN0OwotICAgIHZvaWQgc2V0U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSop
OworICAgIHZvaWQgc2V0U3RydWN0dXJlKFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBjbGVh
clN0cnVjdHVyZSgpIHsgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsgfQogCiAgICAgY29uc3QgY2hhciog
Y2xhc3NOYW1lKCk7CkBAIC0xNDEsOCArMTQxLDggQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25z
dCBUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5cGUgPSBUeXBlZEFycmF5Tm9uZTsK
IHByb3RlY3RlZDoKIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJik7Ci0g
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBDcmVhdGlu
Z0Vhcmx5Q2VsbFRhZyk7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBDcmVhdGluZ0Vhcmx5Q2VsbFRhZyk7CiAK
ICAgICAvLyBCYXNlIGltcGxlbWVudGF0aW9uOyBmb3Igbm9uLW9iamVjdCBjbGFzc2VzIGltcGxl
bWVudHMgZ2V0UHJvcGVydHlTbG90LgogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkocmV2
aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwzMiArMzksMzIgQEAgaW5saW5lIEpTQ2VsbDo6
SlNDZWxsKENyZWF0aW5nRWFybHlDZWxsVAogewogfQogCi1pbmxpbmUgSlNDZWxsOjpKU0NlbGwo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IG1f
c3RydWN0dXJlKGdsb2JhbERhdGEsIHRoaXMsIHN0cnVjdHVyZSkKK2lubGluZSBKU0NlbGw6OkpT
Q2VsbChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogbV9zdHJ1Y3R1cmUodm0s
IHRoaXMsIHN0cnVjdHVyZSkKIHsKIH0KIAotaW5saW5lIHZvaWQgSlNDZWxsOjpmaW5pc2hDcmVh
dGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitpbmxpbmUgdm9pZCBKU0NlbGw6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKIHsKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKLSAgICBBU1NF
UlQoZ2xvYmFsRGF0YS5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKLSAgICBnbG9iYWxEYXRhLnNl
dEluaXRpYWxpemluZ09iamVjdENsYXNzKDApOworICAgIEFTU0VSVCh2bS5pc0luaXRpYWxpemlu
Z09iamVjdCgpKTsKKyAgICB2bS5zZXRJbml0aWFsaXppbmdPYmplY3RDbGFzcygwKTsKICNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbERhdGEpOworICAgIFVOVVNFRF9QQVJBTSh2bSk7CiAj
ZW5kaWYKICAgICBBU1NFUlQobV9zdHJ1Y3R1cmUpOwogfQogCi1pbmxpbmUgdm9pZCBKU0NlbGw6
OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIENyZWF0aW5nRWFybHlDZWxsVGFnKQoraW5saW5lIHZvaWQgSlNDZWxsOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDcmVhdGluZ0Vhcmx5Q2VsbFRh
ZykKIHsKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKLSAgICBBU1NFUlQoZ2xvYmFsRGF0YS5p
c0luaXRpYWxpemluZ09iamVjdCgpKTsKLSAgICBnbG9iYWxEYXRhLnNldEluaXRpYWxpemluZ09i
amVjdENsYXNzKDApOworICAgIEFTU0VSVCh2bS5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKKyAg
ICB2bS5zZXRJbml0aWFsaXppbmdPYmplY3RDbGFzcygwKTsKICAgICBpZiAoc3RydWN0dXJlKQog
I2VuZGlmCi0gICAgICAgIG1fc3RydWN0dXJlLnNldEVhcmx5VmFsdWUoZ2xvYmFsRGF0YSwgdGhp
cywgc3RydWN0dXJlKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUuc2V0RWFybHlWYWx1ZSh2bSwgdGhp
cywgc3RydWN0dXJlKTsKICAgICAvLyBWZXJ5IGZpcnN0IHNldCBvZiBhbGxvY2F0aW9ucyB3b24n
dCBoYXZlIGEgcmVhbCBzdHJ1Y3R1cmUuCi0gICAgQVNTRVJUKG1fc3RydWN0dXJlIHx8ICFnbG9i
YWxEYXRhLnN0cnVjdHVyZVN0cnVjdHVyZSk7CisgICAgQVNTRVJUKG1fc3RydWN0dXJlIHx8ICF2
bS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUpOwogfQogCiBpbmxpbmUgU3RydWN0dXJlKiBKU0NlbGw6OnN0
cnVjdHVyZSgpIGNvbnN0CkBAIC04NCw4ICs4NCw4IEBAIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFw
JiBoZWFwLCBzaXplX3Qgc2kKIHsKICAgICBBU1NFUlQoc2l6ZSA+PSBzaXplb2YoVCkpOwogI2lm
IEVOQUJMRShHQ19WQUxJREFUSU9OKQotICAgIEFTU0VSVCghaGVhcC5nbG9iYWxEYXRhKCktPmlz
SW5pdGlhbGl6aW5nT2JqZWN0KCkpOwotICAgIGhlYXAuZ2xvYmFsRGF0YSgpLT5zZXRJbml0aWFs
aXppbmdPYmplY3RDbGFzcygmVDo6c19pbmZvKTsKKyAgICBBU1NFUlQoIWhlYXAudm0oKS0+aXNJ
bml0aWFsaXppbmdPYmplY3QoKSk7CisgICAgaGVhcC52bSgpLT5zZXRJbml0aWFsaXppbmdPYmpl
Y3RDbGFzcygmVDo6c19pbmZvKTsKICNlbmRpZgogICAgIEpTQ2VsbCogcmVzdWx0ID0gMDsKICAg
ICBpZiAoVDo6bmVlZHNEZXN0cnVjdGlvbiAmJiBUOjpoYXNJbW1vcnRhbFN0cnVjdHVyZSkKQEAg
LTEzNCwxNCArMTM0LDE0IEBAIGlubGluZSBib29sIEpTQ2VsbDo6aXNBUElWYWx1ZVdyYXBwZXIo
KSAKICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IEFQSVZhbHVl
V3JhcHBlclR5cGU7CiB9CiAKLWlubGluZSB2b2lkIEpTQ2VsbDo6c2V0U3RydWN0dXJlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitpbmxpbmUgdm9pZCBK
U0NlbGw6OnNldFN0cnVjdHVyZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAg
IEFTU0VSVChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpID09
IHRoaXMtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7
CiAgICAgQVNTRVJUKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCkgPT0gbV9zdHJ1Y3R1cmUtPmNsYXNz
SW5mbygpKTsKICAgICBBU1NFUlQoIW1fc3RydWN0dXJlCiAgICAgICAgIHx8IG1fc3RydWN0dXJl
LT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpCiAgICAgICAgIHx8
IG1fc3RydWN0dXJlLmdldCgpID09IHN0cnVjdHVyZSk7Ci0gICAgbV9zdHJ1Y3R1cmUuc2V0KGds
b2JhbERhdGEsIHRoaXMsIHN0cnVjdHVyZSk7CisgICAgbV9zdHJ1Y3R1cmUuc2V0KHZtLCB0aGlz
LCBzdHJ1Y3R1cmUpOwogfQogCiBpbmxpbmUgY29uc3QgTWV0aG9kVGFibGUqIEpTQ2VsbDo6bWV0
aG9kVGFibGVGb3JEZXN0cnVjdGlvbigpIGNvbnN0CkBAIC0xNzcsOCArMTc3LDggQEAgQUxXQVlT
X0lOTElORSBKU1ZhbHVlIEpTQ2VsbDo6ZmFzdEdldE93bgogewogICAgIGlmICghc3RydWN0dXJl
KCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KCkgJiYgIXN0cnVjdHVy
ZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkpIHsKICAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gbmFtZS5pbXBsKCktPmhhc0hhc2goKQotICAgICAgICAgICAgPyBzdHJ1Y3R1
cmUoKS0+Z2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCBuYW1lKSkKLSAg
ICAgICAgICAgIDogc3RydWN0dXJlKCktPmdldChleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUpOwor
ICAgICAgICAgICAgPyBzdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhl
YywgbmFtZSkpCisgICAgICAgICAgICA6IHN0cnVjdHVyZSgpLT5nZXQoZXhlYy0+dm0oKSwgbmFt
ZSk7CiAgICAgICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkKICAgICAgICAgICAgIHJl
dHVybiBhc09iamVjdCh0aGlzKS0+bG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KS0+Z2V0KCk7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5j
cHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RGF0ZU1hdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgc3RhdGljIGlu
bGluZSBpbnQgbXNUb1dlZWtEYXkoZG91YmxlIG1zKQogLy8gSWYgdGhpcyBmdW5jdGlvbiBpcyBj
YWxsZWQgd2l0aCBOYU4gaXQgcmV0dXJucyBOYU4uCiBzdGF0aWMgZG91YmxlIGdldERTVE9mZnNl
dChFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSBtcywgZG91YmxlIHV0Y09mZnNldCkKIHsKLSAgICBE
U1RPZmZzZXRDYWNoZSYgY2FjaGUgPSBleGVjLT5nbG9iYWxEYXRhKCkuZHN0T2Zmc2V0Q2FjaGU7
CisgICAgRFNUT2Zmc2V0Q2FjaGUmIGNhY2hlID0gZXhlYy0+dm0oKS5kc3RPZmZzZXRDYWNoZTsK
ICAgICBkb3VibGUgc3RhcnQgPSBjYWNoZS5zdGFydDsKICAgICBkb3VibGUgZW5kID0gY2FjaGUu
ZW5kOwogCkBAIC0xOTUsMTEgKzE5NSwxMSBAQCBzdGF0aWMgZG91YmxlIGdldERTVE9mZnNldChF
eGVjU3RhdGUqIGV4CiAgKi8KIGRvdWJsZSBnZXRVVENPZmZzZXQoRXhlY1N0YXRlKiBleGVjKQog
ewotICAgIGRvdWJsZSB1dGNPZmZzZXQgPSBleGVjLT5nbG9iYWxEYXRhKCkuY2FjaGVkVVRDT2Zm
c2V0OworICAgIGRvdWJsZSB1dGNPZmZzZXQgPSBleGVjLT52bSgpLmNhY2hlZFVUQ09mZnNldDsK
ICAgICBpZiAoIXN0ZDo6aXNuYW4odXRjT2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIHV0Y09mZnNl
dDsKLSAgICBleGVjLT5nbG9iYWxEYXRhKCkuY2FjaGVkVVRDT2Zmc2V0ID0gY2FsY3VsYXRlVVRD
T2Zmc2V0KCk7Ci0gICAgcmV0dXJuIGV4ZWMtPmdsb2JhbERhdGEoKS5jYWNoZWRVVENPZmZzZXQ7
CisgICAgZXhlYy0+dm0oKS5jYWNoZWRVVENPZmZzZXQgPSBjYWxjdWxhdGVVVENPZmZzZXQoKTsK
KyAgICByZXR1cm4gZXhlYy0+dm0oKS5jYWNoZWRVVENPZmZzZXQ7CiB9CiAKIGRvdWJsZSBncmVn
b3JpYW5EYXRlVGltZVRvTVMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBHcmVnb3JpYW5EYXRlVGlt
ZSYgdCwgZG91YmxlIG1pbGxpU2Vjb25kcywgYm9vbCBpbnB1dElzVVRDKQpAQCAtMjYxLDEzICsy
NjEsMTMgQEAgZG91YmxlIHBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhYwogCiBkb3Vi
bGUgcGFyc2VEYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBkYXRlKQogewotICAg
IGlmIChkYXRlID09IGV4ZWMtPmdsb2JhbERhdGEoKS5jYWNoZWREYXRlU3RyaW5nKQotICAgICAg
ICByZXR1cm4gZXhlYy0+Z2xvYmFsRGF0YSgpLmNhY2hlZERhdGVTdHJpbmdWYWx1ZTsKKyAgICBp
ZiAoZGF0ZSA9PSBleGVjLT52bSgpLmNhY2hlZERhdGVTdHJpbmcpCisgICAgICAgIHJldHVybiBl
eGVjLT52bSgpLmNhY2hlZERhdGVTdHJpbmdWYWx1ZTsKICAgICBkb3VibGUgdmFsdWUgPSBwYXJz
ZUVTNURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKGRhdGUudXRmOCgpLmRhdGEoKSk7
CiAgICAgaWYgKHN0ZDo6aXNuYW4odmFsdWUpKQogICAgICAgICB2YWx1ZSA9IHBhcnNlRGF0ZUZy
b21OdWxsVGVybWluYXRlZENoYXJhY3RlcnMoZXhlYywgZGF0ZS51dGY4KCkuZGF0YSgpKTsKLSAg
ICBleGVjLT5nbG9iYWxEYXRhKCkuY2FjaGVkRGF0ZVN0cmluZyA9IGRhdGU7Ci0gICAgZXhlYy0+
Z2xvYmFsRGF0YSgpLmNhY2hlZERhdGVTdHJpbmdWYWx1ZSA9IHZhbHVlOworICAgIGV4ZWMtPnZt
KCkuY2FjaGVkRGF0ZVN0cmluZyA9IGRhdGU7CisgICAgZXhlYy0+dm0oKS5jYWNoZWREYXRlU3Ry
aW5nVmFsdWUgPSB2YWx1ZTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3QuaAko
cmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0
cnVjdGlibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTgsOCArMTgsOCBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIHB0cmRpZmZfdCBjbGFzc0luZm9PZmZzZXQoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoSlNEZXN0cnVjdGlibGVPYmplY3QsIG1fY2xhc3NJbmZvKTsgfQogCiBwcm90ZWN0
ZWQ6Ci0gICAgSlNEZXN0cnVjdGlibGVPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSAwKQotICAgICAgICA6
IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCisgICAg
SlNEZXN0cnVjdGlibGVPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSAwKQorICAgICAgICA6IEpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVj
dHVyZSwgYnV0dGVyZmx5KQogICAgICAgICAsIG1fY2xhc3NJbmZvKHN0cnVjdHVyZS0+Y2xhc3NJ
bmZvKCkpCiAgICAgewogICAgICAgICBBU1NFUlQobV9jbGFzc0luZm8pOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDE0ODYz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MywxMiArNjMsMTIgQEAgSlNGdW5jdGlvbiogSlNGdW5jdGlvbjo6Y3Jl
YXRlKEV4ZWNTdGF0ZQogI2lmICFFTkFCTEUoSklUKQogICAgIFVOVVNFRF9QQVJBTShpbnRyaW5z
aWMpOwogI2Vsc2UKLSAgICBpZiAoaW50cmluc2ljICE9IE5vSW50cmluc2ljICYmIGV4ZWMtPmds
b2JhbERhdGEoKS5jYW5Vc2VKSVQoKSkgeworICAgIGlmIChpbnRyaW5zaWMgIT0gTm9JbnRyaW5z
aWMgJiYgZXhlYy0+dm0oKS5jYW5Vc2VKSVQoKSkgewogICAgICAgICBBU1NFUlQobmF0aXZlQ29u
c3RydWN0b3IgPT0gY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpOwotICAgICAgICBleGVj
dXRhYmxlID0gZXhlYy0+Z2xvYmFsRGF0YSgpLmdldEhvc3RGdW5jdGlvbihuYXRpdmVGdW5jdGlv
biwgaW50cmluc2ljKTsKKyAgICAgICAgZXhlY3V0YWJsZSA9IGV4ZWMtPnZtKCkuZ2V0SG9zdEZ1
bmN0aW9uKG5hdGl2ZUZ1bmN0aW9uLCBpbnRyaW5zaWMpOwogICAgIH0gZWxzZQogI2VuZGlmCi0g
ICAgICAgIGV4ZWN1dGFibGUgPSBleGVjLT5nbG9iYWxEYXRhKCkuZ2V0SG9zdEZ1bmN0aW9uKG5h
dGl2ZUZ1bmN0aW9uLCBuYXRpdmVDb25zdHJ1Y3Rvcik7CisgICAgICAgIGV4ZWN1dGFibGUgPSBl
eGVjLT52bSgpLmdldEhvc3RGdW5jdGlvbihuYXRpdmVGdW5jdGlvbiwgbmF0aXZlQ29uc3RydWN0
b3IpOwogCiAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU0Z1bmN0aW9uPigqZXhlYy0+aGVhcCgpKSkgSlNGdW5jdGlvbihleGVjLCBnbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdC0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSk7CiAgICAgLy8gQ2FuJ3Qg
ZG8gdGhpcyBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYmVjYXVzZSBnZXRIb3N0RnVuY3Rpb24gbWln
aHQgZG8gYSBHQyBhbGxvY2F0aW9uLgpAQCAtODIsOSArODIsOSBAQCB2b2lkIEpTRnVuY3Rpb246
OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogfQogCiBKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCi0gICAgOiBCYXNlKGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKQorICAgIDog
QmFzZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX2V4ZWN1dGFibGUoKQotICAgICwg
bV9zY29wZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGdsb2JhbE9iamVjdCkKKyAgICAsIG1f
c2NvcGUoZXhlYy0+dm0oKSwgdGhpcywgZ2xvYmFsT2JqZWN0KQogICAgIC8vIFdlIGluaXRpYWxp
emUgYmxpbmQgc28gdGhhdCBjaGFuZ2VzIHRvIHRoZSBwcm90b3R5cGUgYWZ0ZXIgZnVuY3Rpb24g
Y3JlYXRpb24gYnV0IGJlZm9yZQogICAgIC8vIHRoZSBvcHRpbWl6ZXIga2lja3MgaW4gZG9uJ3Qg
ZGlzYWJsZSBvcHRpbWl6YXRpb25zLiBPbmNlIHRoZSBvcHRpbWl6ZXIga2lja3MgaW4sIHRoZQog
ICAgIC8vIHdhdGNocG9pbnQgd2lsbCBzdGFydCB3YXRjaGluZyBhbmQgYW55IGNoYW5nZXMgd2ls
bCBib3RoIGZvcmNlIGRlb3B0aW1pemF0aW9uIGFuZCBkaXNhYmxlCkBAIC0xMDAsMzEgKzEwMCwz
MSBAQCBKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgCiAKIHZvaWQgSlNG
dW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBOYXRpdmVFeGVjdXRhYmxl
KiBleGVjdXRhYmxlLCBpbnQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbihleGVjLT52bSgpKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwotICAg
IG1fZXhlY3V0YWJsZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBleGVjdXRhYmxlKTsK
LSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRhKCkucHJv
cGVydHlOYW1lcy0+bmFtZSwganNTdHJpbmcoZXhlYywgbmFtZSksIERvbnREZWxldGUgfCBSZWFk
T25seSB8IERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihsZW5ndGgpLCBEb250RGVsZXRlIHwg
UmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgbV9leGVjdXRhYmxlLnNldChleGVjLT52bSgpLCB0
aGlzLCBleGVjdXRhYmxlKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+dm0oKS5w
cm9wZXJ0eU5hbWVzLT5uYW1lLCBqc1N0cmluZyhleGVjLCBuYW1lKSwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihsZW5ndGgpLCBEb250RGVsZXRlIHwgUmVhZE9u
bHkgfCBEb250RW51bSk7CiB9CiAKIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKiBKU0Z1bmN0aW9u
OjpjcmVhdGVBbGxvY2F0aW9uUHJvZmlsZShFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eSkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxE
YXRhKCk7Ci0gICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3Qq
PihnZXQoZXhlYywgZ2xvYmFsRGF0YS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpKTsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBqc0R5bmFtaWND
YXN0PEpTT2JqZWN0Kj4oZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSkpOwog
ICAgIGlmICghcHJvdG90eXBlKQogICAgICAgICBwcm90b3R5cGUgPSBnbG9iYWxPYmplY3QoKS0+
b2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgbV9hbGxvY2F0aW9uUHJvZmlsZS5pbml0aWFsaXplKGds
b2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCksIHRoaXMsIHByb3RvdHlwZSwgaW5saW5lQ2FwYWNp
dHkpOworICAgIG1fYWxsb2NhdGlvblByb2ZpbGUuaW5pdGlhbGl6ZShnbG9iYWxPYmplY3QoKS0+
dm0oKSwgdGhpcywgcHJvdG90eXBlLCBpbmxpbmVDYXBhY2l0eSk7CiAgICAgcmV0dXJuICZtX2Fs
bG9jYXRpb25Qcm9maWxlOwogfQogCiBTdHJpbmcgSlNGdW5jdGlvbjo6bmFtZShFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGdldChleGVjLCBleGVjLT5nbG9iYWxEYXRhKCkucHJvcGVy
dHlOYW1lcy0+bmFtZSkudG9XVEZTdHJpbmcoZXhlYyk7CisgICAgcmV0dXJuIGdldChleGVjLCBl
eGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPm5hbWUpLnRvV1RGU3RyaW5nKGV4ZWMpOwogfQogCiBT
dHJpbmcgSlNGdW5jdGlvbjo6ZGlzcGxheU5hbWUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpT
VmFsdWUgZGlzcGxheU5hbWUgPSBnZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5n
bG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+ZGlzcGxheU5hbWUpOworICAgIEpTVmFsdWUgZGlz
cGxheU5hbWUgPSBnZXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVz
LT5kaXNwbGF5TmFtZSk7CiAgICAgCiAgICAgaWYgKGRpc3BsYXlOYW1lICYmIGlzSlNTdHJpbmco
ZGlzcGxheU5hbWUpKQogICAgICAgICByZXR1cm4gYXNTdHJpbmcoZGlzcGxheU5hbWUpLT50cnlH
ZXRWYWx1ZSgpOwpAQCAtMjIxLDEzICsyMjEsMTMgQEAgYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDZQogICAgICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAKICAgICBpZiAocHJvcGVy
dHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpIHsKLSAgICAgICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSB0aGlzT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQoZ2xvYmFsRGF0
YSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gdGhpc09iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KHZtLCBw
cm9wZXJ0eU5hbWUpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewogICAg
ICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMp
OwotICAgICAgICAgICAgcHJvdG90eXBlLT5wdXREaXJlY3QoZ2xvYmFsRGF0YSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB0aGlzT2JqZWN0LCBEb250RW51bSk7Ci0gICAgICAg
ICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3QoZ2xvYmFsRGF0YSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLnByb3RvdHlwZSwgcHJvdG90eXBlLCBEb250RGVsZXRlIHwgRG9udEVudW0pOwotICAgICAg
ICAgICAgb2Zmc2V0ID0gdGhpc09iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KGdsb2JhbERhdGEsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpOworICAgICAgICAgICAgcHJvdG90eXBlLT5w
dXREaXJlY3Qodm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdGhpc09iamVj
dCwgRG9udEVudW0pOworICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0KHZtLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBwcm90b3R5cGUsIERvbnREZWxldGUgfCBEb250
RW51bSk7CisgICAgICAgICAgICBvZmZzZXQgPSB0aGlzT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQo
dm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpOwogICAgICAgICAgICAgQVNTRVJU
KGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgICAgIH0KIApAQCAtMzgyLDcgKzM4Miw3IEBA
IGJvb2wgSlNGdW5jdGlvbjo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiAKIHsKICAgICBKU0Z1bmN0
aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRnVuY3Rpb24qPihjZWxsKTsKICAgICAvLyBGb3Ig
bm9uLWhvc3QgZnVuY3Rpb25zLCBkb24ndCBsZXQgdGhlc2UgcHJvcGVydGllcyBieSBkZWxldGVk
IC0gZXhjZXB0IGJ5IERlZmluZU93blByb3BlcnR5LgotICAgIGlmICghdGhpc09iamVjdC0+aXNI
b3N0RnVuY3Rpb24oKSAmJiAhZXhlYy0+Z2xvYmFsRGF0YSgpLmlzSW5EZWZpbmVPd25Qcm9wZXJ0
eSgpCisgICAgaWYgKCF0aGlzT2JqZWN0LT5pc0hvc3RGdW5jdGlvbigpICYmICFleGVjLT52bSgp
LmlzSW5EZWZpbmVPd25Qcm9wZXJ0eSgpCiAgICAgICAgICYmIChwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cwogICAgICAgICAgICAgfHwgcHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgKICAgICAgICAgICAgIHx8IHByb3BlcnR5
TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwog
ICAgICAgICBmcmllbmQgY2xhc3MgREZHOjpTcGVjdWxhdGl2ZUpJVDsKICAgICAgICAgZnJpZW5k
IGNsYXNzIERGRzo6SklUQ29tcGlsZXI7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBKU0dsb2JhbERh
dGE7CisgICAgICAgIGZyaWVuZCBjbGFzcyBWTTsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdHlw
ZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwpAQCAtNjIsMTAgKzYyLDEwIEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoRXhlY1N0YXRl
KiBleGVjLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3BlKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5n
bG9iYWxEYXRhKCk7Ci0gICAgICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+KGdsb2JhbERhdGEuaGVhcCkpIEpTRnVuY3Rp
b24oZ2xvYmFsRGF0YSwgZXhlY3V0YWJsZSwgc2NvcGUpOworICAgICAgICAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNGdW5jdGlvbj4odm0uaGVhcCkpIEpTRnVuY3Rpb24odm0sIGV4
ZWN1dGFibGUsIHNjb3BlKTsKICAgICAgICAgICAgIEFTU0VSVChmdW5jdGlvbi0+c3RydWN0dXJl
KCktPmdsb2JhbE9iamVjdCgpKTsKLSAgICAgICAgICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlv
bihnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb247CiAgICAgICAgIH0KICAgICAgICAgCkBAIC04
OSwxMCArODksMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiBtX3Njb3BlLmdldCgpOwogICAgICAgICB9Ci0gICAgICAgIHZvaWQgc2V0U2NvcGUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1Njb3BlKiBzY29wZSkKKyAgICAgICAgdm9pZCBzZXRT
Y29wZShWTSYgdm0sIEpTU2NvcGUqIHNjb3BlKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NF
UlQoIWlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lKCkpOwotICAgICAgICAgICAgbV9zY29wZS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgc2NvcGUpOworICAgICAgICAgICAgbV9zY29wZS5zZXQodm0sIHRo
aXMsIHNjb3BlKTsKICAgICAgICAgfQogCiAgICAgICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRh
YmxlKCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRhYmxlLmdldCgpOyB9CkBAIC0xMDUsMTAgKzEw
NSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBj
b25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpIAogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsT2Jq
ZWN0KTsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7IAorICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7IAogICAgICAgICB9CiAKICAgICAgICAgTmF0aXZlRnVu
Y3Rpb24gbmF0aXZlRnVuY3Rpb24oKTsKQEAgLTE1OCw3ICsxNTgsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgT3ZlcnJpZGVz
VmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3Ry
dWN0dXJlRmxhZ3M7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNGdW5jdGlvbihFeGVj
U3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwotICAgICAgICBKU0Z1bmN0aW9u
KEpTR2xvYmFsRGF0YSYsIEZ1bmN0aW9uRXhlY3V0YWJsZSosIEpTU2NvcGUqKTsKKyAgICAgICAg
SlNGdW5jdGlvbihWTSYsIEZ1bmN0aW9uRXhlY3V0YWJsZSosIEpTU2NvcGUqKTsKICAgICAgICAg
CiAgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiwgTmF0aXZlRXhlY3V0YWJs
ZSosIGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgICAgIHVzaW5nIEJhc2U6
OmZpbmlzaENyZWF0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU2OCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDExLCAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNH
bG9iYWxEYXRhLmgiCi0KLSNpbmNsdWRlICJBcmdMaXN0LmgiCi0jaW5jbHVkZSAiQ29kZUNhY2hl
LmgiCi0jaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKLSNpbmNsdWRlICJERkdMb25nTGl2
ZWRTdGF0ZS5oIgotI2luY2x1ZGUgIkRlYnVnZ2VyQWN0aXZhdGlvbi5oIgotI2luY2x1ZGUgIkZ1
bmN0aW9uQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKLSNp
bmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKLSNpbmNsdWRlICJIZWFwLmgiCi0jaW5jbHVkZSAiSG9z
dENhbGxSZXR1cm5WYWx1ZS5oIgotI2luY2x1ZGUgIkluY3JlbWVudGFsU3dlZXBlci5oIgotI2lu
Y2x1ZGUgIkludGVycHJldGVyLmgiCi0jaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCi0jaW5jbHVk
ZSAiSlNBUElWYWx1ZVdyYXBwZXIuaCIKLSNpbmNsdWRlICJKU0FycmF5LmgiCi0jaW5jbHVkZSAi
SlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkpTTG9jay5oIgotI2luY2x1ZGUgIkpTTmFtZVNjb3Bl
LmgiCi0jaW5jbHVkZSAiSlNOb3RBbk9iamVjdC5oIgotI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1l
SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJKU1dpdGhTY29wZS5oIgotI2luY2x1ZGUgIkxleGVyLmgi
Ci0jaW5jbHVkZSAiTG9va3VwLmgiCi0jaW5jbHVkZSAiTm9kZXMuaCIKLSNpbmNsdWRlICJQYXJz
ZXJBcmVuYS5oIgotI2luY2x1ZGUgIlJlZ0V4cENhY2hlLmgiCi0jaW5jbHVkZSAiUmVnRXhwT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiU291cmNlUHJvdmlkZXJDYWNoZS5oIgotI2luY2x1ZGUgIlN0cmlj
dEV2YWxBY3RpdmF0aW9uLmgiCi0jaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgotI2luY2x1ZGUg
IlVubGlua2VkQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgotI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4K
LSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEu
aD4KLQotI2lmIEVOQUJMRShERkdfSklUKQotI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgi
Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKLSNpbmNsdWRlICJSZWdFeHAu
aCIKLSNlbmRpZgotCi0jaWYgVVNFKENGKQotI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVG
b3VuZGF0aW9uLmg+Ci0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdURjsKLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLWV4dGVybiBjb25zdCBIYXNoVGFibGUgYXJyYXlDb25zdHJ1Y3RvclRhYmxlOwot
ZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBhcnJheVByb3RvdHlwZVRhYmxlOwotZXh0ZXJuIGNvbnN0
IEhhc2hUYWJsZSBib29sZWFuUHJvdG90eXBlVGFibGU7Ci1leHRlcm4gY29uc3QgSGFzaFRhYmxl
IGpzb25UYWJsZTsKLWV4dGVybiBjb25zdCBIYXNoVGFibGUgZGF0ZVRhYmxlOwotZXh0ZXJuIGNv
bnN0IEhhc2hUYWJsZSBkYXRlQ29uc3RydWN0b3JUYWJsZTsKLWV4dGVybiBjb25zdCBIYXNoVGFi
bGUgZXJyb3JQcm90b3R5cGVUYWJsZTsKLWV4dGVybiBjb25zdCBIYXNoVGFibGUgZ2xvYmFsT2Jq
ZWN0VGFibGU7Ci1leHRlcm4gY29uc3QgSGFzaFRhYmxlIG1hdGhUYWJsZTsKLWV4dGVybiBjb25z
dCBIYXNoVGFibGUgbnVtYmVyQ29uc3RydWN0b3JUYWJsZTsKLWV4dGVybiBjb25zdCBIYXNoVGFi
bGUgbnVtYmVyUHJvdG90eXBlVGFibGU7Ci1KU19FWFBPUlREQVRBIGV4dGVybiBjb25zdCBIYXNo
VGFibGUgb2JqZWN0Q29uc3RydWN0b3JUYWJsZTsKLWV4dGVybiBjb25zdCBIYXNoVGFibGUgcHJp
dmF0ZU5hbWVQcm90b3R5cGVUYWJsZTsKLWV4dGVybiBjb25zdCBIYXNoVGFibGUgcmVnRXhwVGFi
bGU7Ci1leHRlcm4gY29uc3QgSGFzaFRhYmxlIHJlZ0V4cENvbnN0cnVjdG9yVGFibGU7Ci1leHRl
cm4gY29uc3QgSGFzaFRhYmxlIHJlZ0V4cFByb3RvdHlwZVRhYmxlOwotZXh0ZXJuIGNvbnN0IEhh
c2hUYWJsZSBzdHJpbmdDb25zdHJ1Y3RvclRhYmxlOwotCi0vLyBOb3RlOiBQbGF0Zm9ybS5oIHdp
bGwgZW5mb3JjZSB0aGF0IEVOQUJMRShBU1NFTUJMRVIpIGlzIHRydWUgaWYgZWl0aGVyCi0vLyBF
TkFCTEUoSklUKSBvciBFTkFCTEUoWUFSUl9KSVQpIG9yIGJvdGggYXJlIGVuYWJsZWQuIFRoZSBj
b2RlIGJlbG93Ci0vLyBqdXN0IGNoZWNrcyBmb3IgRU5BQkxFKEpJVCkgb3IgRU5BQkxFKFlBUlJf
SklUKSB3aXRoIHRoaXMgcHJlbWlzZSBpbiBtaW5kLgotCi0jaWYgRU5BQkxFKEFTU0VNQkxFUikK
LXN0YXRpYyBib29sIGVuYWJsZUFzc2VtYmxlcihFeGVjdXRhYmxlQWxsb2NhdG9yJiBleGVjdXRh
YmxlQWxsb2NhdG9yKQotewotICAgIGlmICghZXhlY3V0YWJsZUFsbG9jYXRvci5pc1ZhbGlkKCkg
fHwgKCFPcHRpb25zOjp1c2VKSVQoKSAmJiAhT3B0aW9uczo6dXNlUmVnRXhwSklUKCkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSNpZiBVU0UoQ0YpCi0jaWYgQ09NUElMRVIoR0NDKSAmJiAh
Q09NUElMRVIoQ0xBTkcpCi0gICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIG9uY2UgdGhlIEVXUyBo
YXZlIGJlZW4gdXBncmFkZWQgdG8gTExWTS4KLSAgICAvLyBXb3JrIGFyb3VuZCBhIGJ1ZyBvZiBH
Q0Mgd2l0aCBzdHJpY3QtYWxpYXNpbmcuCi0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjYW5V
c2VKSVRLZXlSZXRhaW4oQWRvcHRDRiwgQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZygwICwgIkph
dmFTY3JpcHRDb3JlVXNlSklUIiwga0NGU3RyaW5nRW5jb2RpbmdNYWNSb21hbikpOwotICAgIENG
U3RyaW5nUmVmIGNhblVzZUpJVEtleSA9IGNhblVzZUpJVEtleVJldGFpbi5nZXQoKTsKLSNlbHNl
Ci0gICAgQ0ZTdHJpbmdSZWYgY2FuVXNlSklUS2V5ID0gQ0ZTVFIoIkphdmFTY3JpcHRDb3JlVXNl
SklUIik7Ci0jZW5kaWYgLy8gQ09NUElMRVIoR0NDKSAmJiAhQ09NUElMRVIoQ0xBTkcpCi0gICAg
UmV0YWluUHRyPENGQm9vbGVhblJlZj4gY2FuVXNlSklUKEFkb3B0Q0YsIChDRkJvb2xlYW5SZWYp
Q0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZShjYW5Vc2VKSVRLZXksIGtDRlByZWZlcmVuY2VzQ3Vy
cmVudEFwcGxpY2F0aW9uKSk7Ci0gICAgaWYgKGNhblVzZUpJVCkKLSAgICAgICAgcmV0dXJuIGtD
RkJvb2xlYW5UcnVlID09IGNhblVzZUpJVC5nZXQoKTsKLSNlbmRpZgotCi0jaWYgVVNFKENGKSB8
fCBPUyhVTklYKQotICAgIGNoYXIqIGNhblVzZUpJVFN0cmluZyA9IGdldGVudigiSmF2YVNjcmlw
dENvcmVVc2VKSVQiKTsKLSAgICByZXR1cm4gIWNhblVzZUpJVFN0cmluZyB8fCBhdG9pKGNhblVz
ZUpJVFN0cmluZyk7Ci0jZWxzZQotICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi19Ci0jZW5kaWYg
Ly8gRU5BQkxFKCFBU1NFTUJMRVIpCi0KLUpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2Jh
bERhdGFUeXBlIGdsb2JhbERhdGFUeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKLSAgICA6IG1fYXBp
TG9jayhhZG9wdFJlZihuZXcgSlNMb2NrKHRoaXMpKSkKLSNpZiBFTkFCTEUoQVNTRU1CTEVSKQot
ICAgICwgZXhlY3V0YWJsZUFsbG9jYXRvcigqdGhpcykKLSNlbmRpZgotICAgICwgaGVhcCh0aGlz
LCBoZWFwVHlwZSkKLSAgICAsIGdsb2JhbERhdGFUeXBlKGdsb2JhbERhdGFUeXBlKQotICAgICwg
Y2xpZW50RGF0YSgwKQotICAgICwgdG9wQ2FsbEZyYW1lKENhbGxGcmFtZTo6bm9DYWxsZXIoKSkK
LSAgICAsIGFycmF5Q29uc3RydWN0b3JUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjphcnJh
eUNvbnN0cnVjdG9yVGFibGUpKQotICAgICwgYXJyYXlQcm90b3R5cGVUYWJsZShmYXN0TmV3PEhh
c2hUYWJsZT4oSlNDOjphcnJheVByb3RvdHlwZVRhYmxlKSkKLSAgICAsIGJvb2xlYW5Qcm90b3R5
cGVUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpib29sZWFuUHJvdG90eXBlVGFibGUpKQot
ICAgICwgZGF0ZVRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmRhdGVUYWJsZSkpCi0gICAg
LCBkYXRlQ29uc3RydWN0b3JUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpkYXRlQ29uc3Ry
dWN0b3JUYWJsZSkpCi0gICAgLCBlcnJvclByb3RvdHlwZVRhYmxlKGZhc3ROZXc8SGFzaFRhYmxl
PihKU0M6OmVycm9yUHJvdG90eXBlVGFibGUpKQotICAgICwgZ2xvYmFsT2JqZWN0VGFibGUoZmFz
dE5ldzxIYXNoVGFibGU+KEpTQzo6Z2xvYmFsT2JqZWN0VGFibGUpKQotICAgICwganNvblRhYmxl
KGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6Ompzb25UYWJsZSkpCi0gICAgLCBtYXRoVGFibGUoZmFz
dE5ldzxIYXNoVGFibGU+KEpTQzo6bWF0aFRhYmxlKSkKLSAgICAsIG51bWJlckNvbnN0cnVjdG9y
VGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6bnVtYmVyQ29uc3RydWN0b3JUYWJsZSkpCi0g
ICAgLCBudW1iZXJQcm90b3R5cGVUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpudW1iZXJQ
cm90b3R5cGVUYWJsZSkpCi0gICAgLCBvYmplY3RDb25zdHJ1Y3RvclRhYmxlKGZhc3ROZXc8SGFz
aFRhYmxlPihKU0M6Om9iamVjdENvbnN0cnVjdG9yVGFibGUpKQotICAgICwgcHJpdmF0ZU5hbWVQ
cm90b3R5cGVUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpwcml2YXRlTmFtZVByb3RvdHlw
ZVRhYmxlKSkKLSAgICAsIHJlZ0V4cFRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OnJlZ0V4
cFRhYmxlKSkKLSAgICAsIHJlZ0V4cENvbnN0cnVjdG9yVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+
KEpTQzo6cmVnRXhwQ29uc3RydWN0b3JUYWJsZSkpCi0gICAgLCByZWdFeHBQcm90b3R5cGVUYWJs
ZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpyZWdFeHBQcm90b3R5cGVUYWJsZSkpCi0gICAgLCBz
dHJpbmdDb25zdHJ1Y3RvclRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OnN0cmluZ0NvbnN0
cnVjdG9yVGFibGUpKQotICAgICwgaWRlbnRpZmllclRhYmxlKGdsb2JhbERhdGFUeXBlID09IERl
ZmF1bHQgPyB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpIDogY3JlYXRl
SWRlbnRpZmllclRhYmxlKCkpCi0gICAgLCBwcm9wZXJ0eU5hbWVzKG5ldyBDb21tb25JZGVudGlm
aWVycyh0aGlzKSkKLSAgICAsIGVtcHR5TGlzdChuZXcgTWFya2VkQXJndW1lbnRCdWZmZXIpCi0g
ICAgLCBwYXJzZXJBcmVuYShhZG9wdFB0cihuZXcgUGFyc2VyQXJlbmEpKQotICAgICwga2V5d29y
ZHMoYWRvcHRQdHIobmV3IEtleXdvcmRzKHRoaXMpKSkKLSAgICAsIGludGVycHJldGVyKDApCi0g
ICAgLCBqc0FycmF5Q2xhc3NJbmZvKCZKU0FycmF5OjpzX2luZm8pCi0gICAgLCBqc0ZpbmFsT2Jq
ZWN0Q2xhc3NJbmZvKCZKU0ZpbmFsT2JqZWN0OjpzX2luZm8pCi0jaWYgRU5BQkxFKERGR19KSVQp
Ci0gICAgLCBzaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlcigwKQotI2VuZGlmCi0gICAgLCBkeW5hbWlj
R2xvYmFsT2JqZWN0KDApCi0gICAgLCBjYWNoZWRVVENPZmZzZXQoUU5hTikKLSAgICAsIG1fZW5h
YmxlZFByb2ZpbGVyKDApCi0gICAgLCBtX3JlZ0V4cENhY2hlKG5ldyBSZWdFeHBDYWNoZSh0aGlz
KSkKLSNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCi0gICAgLCBtX3J0VHJhY2VMaXN0KG5ldyBS
VFRyYWNlTGlzdCgpKQotI2VuZGlmCi0jaWZuZGVmIE5ERUJVRwotICAgICwgZXhjbHVzaXZlVGhy
ZWFkKDApCi0jZW5kaWYKLSAgICAsIG1fbmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zKDApCi0j
aWYgRU5BQkxFKEFTU0VNQkxFUikKLSAgICAsIG1fY2FuVXNlQXNzZW1ibGVyKGVuYWJsZUFzc2Vt
YmxlcihleGVjdXRhYmxlQWxsb2NhdG9yKSkKLSNlbmRpZgotI2lmIEVOQUJMRShKSVQpCi0gICAg
LCBtX2NhblVzZUpJVChtX2NhblVzZUFzc2VtYmxlciAmJiBPcHRpb25zOjp1c2VKSVQoKSkKLSNl
bmRpZgotI2lmIEVOQUJMRShZQVJSX0pJVCkKLSAgICAsIG1fY2FuVXNlUmVnRXhwSklUKG1fY2Fu
VXNlQXNzZW1ibGVyICYmIE9wdGlvbnM6OnVzZVJlZ0V4cEpJVCgpKQotI2VuZGlmCi0jaWYgRU5B
QkxFKEdDX1ZBTElEQVRJT04pCi0gICAgLCBtX2luaXRpYWxpemluZ09iamVjdENsYXNzKDApCi0j
ZW5kaWYKLSAgICAsIG1faW5EZWZpbmVPd25Qcm9wZXJ0eShmYWxzZSkKLSAgICAsIG1fY29kZUNh
Y2hlKENvZGVDYWNoZTo6Y3JlYXRlKCkpCi17Ci0gICAgaW50ZXJwcmV0ZXIgPSBuZXcgSW50ZXJw
cmV0ZXIoKnRoaXMpOwotCi0gICAgLy8gTmVlZCB0byBiZSBjYXJlZnVsIHRvIGtlZXAgZXZlcnl0
aGluZyBjb25zaXN0ZW50IGhlcmUKLSAgICBKU0xvY2tIb2xkZXIgbG9jayh0aGlzKTsKLSAgICBJ
ZGVudGlmaWVyVGFibGUqIGV4aXN0aW5nRW50cnlJZGVudGlmaWVyVGFibGUgPSB3dGZUaHJlYWRE
YXRhKCkuc2V0Q3VycmVudElkZW50aWZpZXJUYWJsZShpZGVudGlmaWVyVGFibGUpOwotICAgIHN0
cnVjdHVyZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFN0cnVjdHVyZTo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzKSk7Ci0gICAgc3RydWN0dXJlUmFyZURhdGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTdHJ1Y3R1
cmVSYXJlRGF0YTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAgIGRl
YnVnZ2VyQWN0aXZhdGlvblN0cnVjdHVyZS5zZXQoKnRoaXMsIERlYnVnZ2VyQWN0aXZhdGlvbjo6
Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAgIGludGVycnVwdGVkRXhl
Y3V0aW9uRXJyb3JTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9y
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgdGVybWluYXRlZEV4
ZWN1dGlvbkVycm9yU3RydWN0dXJlLnNldCgqdGhpcywgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9y
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgc3RyaW5nU3RydWN0
dXJlLnNldCgqdGhpcywgSlNTdHJpbmc6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxs
KCkpKTsKLSAgICBub3RBbk9iamVjdFN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTTm90QW5PYmplY3Q6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICBwcm9wZXJ0eU5hbWVJ
dGVyYXRvclN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICBnZXR0ZXJTZXR0ZXJTdHJ1Y3R1
cmUuc2V0KCp0aGlzLCBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKLSAgICBhcGlXcmFwcGVyU3RydWN0dXJlLnNldCgqdGhpcywgSlNBUElWYWx1ZVdy
YXBwZXI6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICBKU1Njb3Bl
U3RydWN0dXJlLnNldCgqdGhpcywgSlNTY29wZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBq
c051bGwoKSkpOwotICAgIGV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBFeGVjdXRhYmxl
QmFzZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAgIG5hdGl2ZUV4
ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGVTdHJ1
Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgZXZhbEV4ZWN1dGFibGVTdHJ1Y3R1cmUu
c2V0KCp0aGlzLCBFdmFsRXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOwotICAgIHByb2dyYW1FeGVjdXRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgUHJvZ3Jh
bUV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICBm
dW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBGdW5jdGlvbkV4ZWN1dGFibGU6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICByZWdFeHBTdHJ1Y3R1
cmUuc2V0KCp0aGlzLCBSZWdFeHA6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkp
KTsKLSAgICBzaGFyZWRTeW1ib2xUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFNoYXJlZFN5bWJv
bFRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgc3RydWN0
dXJlQ2hhaW5TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTdHJ1Y3R1cmVDaGFpbjo6Y3JlYXRlU3RydWN0
dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAgIHNwYXJzZUFycmF5VmFsdWVNYXBTdHJ1Y3R1
cmUuc2V0KCp0aGlzLCBTcGFyc2VBcnJheVZhbHVlTWFwOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMs
IDAsIGpzTnVsbCgpKSk7Ci0gICAgd2l0aFNjb3BlU3RydWN0dXJlLnNldCgqdGhpcywgSlNXaXRo
U2NvcGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICB1bmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgdW5s
aW5rZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgdW5s
aW5rZWRFdmFsQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRFdmFsQ29kZUJs
b2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgdW5saW5rZWRG
dW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICBwcm9wZXJ0
eVRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgUHJvcGVydHlUYWJsZTo6Y3JlYXRlU3RydWN0dXJl
KCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAgIHNtYWxsU3RyaW5ncy5pbml0aWFsaXplQ29tbW9u
U3RyaW5ncygqdGhpcyk7Ci0KLSAgICB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElkZW50aWZp
ZXJUYWJsZShleGlzdGluZ0VudHJ5SWRlbnRpZmllclRhYmxlKTsKLQotI2lmIEVOQUJMRShKSVQp
Ci0gICAgaml0U3R1YnMgPSBhZG9wdFB0cihuZXcgSklUVGh1bmtzKCkpOwotICAgIHBlcmZvcm1Q
bGF0Zm9ybVNwZWNpZmljSklUQXNzZXJ0aW9ucyh0aGlzKTsKLSNlbmRpZgotICAgIAotICAgIGlu
dGVycHJldGVyLT5pbml0aWFsaXplKHRoaXMtPmNhblVzZUpJVCgpKTsKLSAgICAKLSNpZiBFTkFC
TEUoSklUKQotICAgIGluaXRpYWxpemVIb3N0Q2FsbFJldHVyblZhbHVlKCk7IC8vIFRoaXMgaXMg
bmVlZGVkIHRvIGNvbnZpbmNlIHRoZSBsaW5rZXIgbm90IHRvIGRyb3AgaG9zdCBjYWxsIHJldHVy
biBzdXBwb3J0LgotI2VuZGlmCi0KLSAgICBoZWFwLm5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpOwot
Ci0gICAgTExJbnQ6OkRhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKCp0aGlzKTsKLSAgICAKLSAgICBp
ZiAoT3B0aW9uczo6ZW5hYmxlUHJvZmlsZXIoKSkgewotICAgICAgICBtX3BlckJ5dGVjb2RlUHJv
ZmlsZXIgPSBhZG9wdFB0cihuZXcgUHJvZmlsZXI6OkRhdGFiYXNlKCp0aGlzKSk7Ci0KLSAgICAg
ICAgU3RyaW5nUHJpbnRTdHJlYW0gcGF0aE91dDsKLSNpZiAhT1MoV0lOQ0UpCi0gICAgICAgIGNv
bnN0IGNoYXIqIHByb2ZpbGVyUGF0aCA9IGdldGVudigiSlNDX1BST0ZJTEVSX1BBVEgiKTsKLSAg
ICAgICAgaWYgKHByb2ZpbGVyUGF0aCkKLSAgICAgICAgICAgIHBhdGhPdXQucHJpbnQocHJvZmls
ZXJQYXRoLCAiLyIpOwotI2VuZGlmCi0gICAgICAgIHBhdGhPdXQucHJpbnQoIkpTQ1Byb2ZpbGUt
IiwgZ2V0Q3VycmVudFByb2Nlc3NJRCgpLCAiLSIsIG1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZGF0
YWJhc2VJRCgpLCAiLmpzb24iKTsKLSAgICAgICAgbV9wZXJCeXRlY29kZVByb2ZpbGVyLT5yZWdp
c3RlclRvU2F2ZUF0RXhpdChwYXRoT3V0LnRvQ1N0cmluZygpLmRhdGEoKSk7Ci0gICAgfQotCi0j
aWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKGNhblVzZUpJVCgpKQotICAgICAgICBtX2RmZ1N0
YXRlID0gYWRvcHRQdHIobmV3IERGRzo6TG9uZ0xpdmVkU3RhdGUoKSk7Ci0jZW5kaWYKLX0KLQot
SlNHbG9iYWxEYXRhOjp+SlNHbG9iYWxEYXRhKCkKLXsKLSAgICAvLyBDbGVhciB0aGlzIGZpcnN0
IHRvIGVuc3VyZSB0aGF0IG5vYm9keSB0cmllcyB0byByZW1vdmUgdGhlbXNlbHZlcyBmcm9tIGl0
LgotICAgIG1fcGVyQnl0ZWNvZGVQcm9maWxlci5jbGVhcigpOwotICAgIAotICAgIEFTU0VSVCht
X2FwaUxvY2stPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwotICAgIG1fYXBpTG9jay0+
d2lsbERlc3Ryb3lHbG9iYWxEYXRhKHRoaXMpOwotICAgIGhlYXAubGFzdENoYW5jZVRvRmluYWxp
emUoKTsKLQotICAgIGRlbGV0ZSBpbnRlcnByZXRlcjsKLSNpZm5kZWYgTkRFQlVHCi0gICAgaW50
ZXJwcmV0ZXIgPSByZWludGVycHJldF9jYXN0PEludGVycHJldGVyKj4oMHhiYmFkYmVlZik7Ci0j
ZW5kaWYKLQotICAgIGFycmF5UHJvdG90eXBlVGFibGUtPmRlbGV0ZVRhYmxlKCk7Ci0gICAgYXJy
YXlDb25zdHJ1Y3RvclRhYmxlLT5kZWxldGVUYWJsZSgpOwotICAgIGJvb2xlYW5Qcm90b3R5cGVU
YWJsZS0+ZGVsZXRlVGFibGUoKTsKLSAgICBkYXRlVGFibGUtPmRlbGV0ZVRhYmxlKCk7Ci0gICAg
ZGF0ZUNvbnN0cnVjdG9yVGFibGUtPmRlbGV0ZVRhYmxlKCk7Ci0gICAgZXJyb3JQcm90b3R5cGVU
YWJsZS0+ZGVsZXRlVGFibGUoKTsKLSAgICBnbG9iYWxPYmplY3RUYWJsZS0+ZGVsZXRlVGFibGUo
KTsKLSAgICBqc29uVGFibGUtPmRlbGV0ZVRhYmxlKCk7Ci0gICAgbWF0aFRhYmxlLT5kZWxldGVU
YWJsZSgpOwotICAgIG51bWJlckNvbnN0cnVjdG9yVGFibGUtPmRlbGV0ZVRhYmxlKCk7Ci0gICAg
bnVtYmVyUHJvdG90eXBlVGFibGUtPmRlbGV0ZVRhYmxlKCk7Ci0gICAgb2JqZWN0Q29uc3RydWN0
b3JUYWJsZS0+ZGVsZXRlVGFibGUoKTsKLSAgICBwcml2YXRlTmFtZVByb3RvdHlwZVRhYmxlLT5k
ZWxldGVUYWJsZSgpOwotICAgIHJlZ0V4cFRhYmxlLT5kZWxldGVUYWJsZSgpOwotICAgIHJlZ0V4
cENvbnN0cnVjdG9yVGFibGUtPmRlbGV0ZVRhYmxlKCk7Ci0gICAgcmVnRXhwUHJvdG90eXBlVGFi
bGUtPmRlbGV0ZVRhYmxlKCk7Ci0gICAgc3RyaW5nQ29uc3RydWN0b3JUYWJsZS0+ZGVsZXRlVGFi
bGUoKTsKLQotICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihhcnJheUNvbnN0
cnVjdG9yVGFibGUpKTsKLSAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oYXJy
YXlQcm90b3R5cGVUYWJsZSkpOwotICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUq
Pihib29sZWFuUHJvdG90eXBlVGFibGUpKTsKLSAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFz
aFRhYmxlKj4oZGF0ZVRhYmxlKSk7Ci0gICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJs
ZSo+KGRhdGVDb25zdHJ1Y3RvclRhYmxlKSk7Ci0gICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhh
c2hUYWJsZSo+KGVycm9yUHJvdG90eXBlVGFibGUpKTsKLSAgICBmYXN0RGVsZXRlKGNvbnN0X2Nh
c3Q8SGFzaFRhYmxlKj4oZ2xvYmFsT2JqZWN0VGFibGUpKTsKLSAgICBmYXN0RGVsZXRlKGNvbnN0
X2Nhc3Q8SGFzaFRhYmxlKj4oanNvblRhYmxlKSk7Ci0gICAgZmFzdERlbGV0ZShjb25zdF9jYXN0
PEhhc2hUYWJsZSo+KG1hdGhUYWJsZSkpOwotICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNo
VGFibGUqPihudW1iZXJDb25zdHJ1Y3RvclRhYmxlKSk7Ci0gICAgZmFzdERlbGV0ZShjb25zdF9j
YXN0PEhhc2hUYWJsZSo+KG51bWJlclByb3RvdHlwZVRhYmxlKSk7Ci0gICAgZmFzdERlbGV0ZShj
b25zdF9jYXN0PEhhc2hUYWJsZSo+KG9iamVjdENvbnN0cnVjdG9yVGFibGUpKTsKLSAgICBmYXN0
RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4ocHJpdmF0ZU5hbWVQcm90b3R5cGVUYWJsZSkp
OwotICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihyZWdFeHBUYWJsZSkpOwot
ICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihyZWdFeHBDb25zdHJ1Y3RvclRh
YmxlKSk7Ci0gICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KHJlZ0V4cFByb3Rv
dHlwZVRhYmxlKSk7Ci0gICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KHN0cmlu
Z0NvbnN0cnVjdG9yVGFibGUpKTsKLQotICAgIGRlbGV0ZSBlbXB0eUxpc3Q7Ci0KLSAgICBkZWxl
dGUgcHJvcGVydHlOYW1lczsKLSAgICBpZiAoZ2xvYmFsRGF0YVR5cGUgIT0gRGVmYXVsdCkKLSAg
ICAgICAgZGVsZXRlSWRlbnRpZmllclRhYmxlKGlkZW50aWZpZXJUYWJsZSk7Ci0KLSAgICBkZWxl
dGUgY2xpZW50RGF0YTsKLSAgICBkZWxldGUgbV9yZWdFeHBDYWNoZTsKLSNpZiBFTkFCTEUoUkVH
RVhQX1RSQUNJTkcpCi0gICAgZGVsZXRlIG1fcnRUcmFjZUxpc3Q7Ci0jZW5kaWYKLQotI2lmIEVO
QUJMRShERkdfSklUKQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzY3JhdGNoQnVmZmVy
cy5zaXplKCk7ICsraSkKLSAgICAgICAgZmFzdEZyZWUoc2NyYXRjaEJ1ZmZlcnNbaV0pOwotI2Vu
ZGlmCi19Ci0KLVBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBKU0dsb2JhbERhdGE6OmNyZWF0ZUNv
bnRleHRHcm91cChIZWFwVHlwZSBoZWFwVHlwZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEpTR2xvYmFsRGF0YShBUElDb250ZXh0R3JvdXAsIGhlYXBUeXBlKSk7Ci19Ci0KLVBhc3NSZWZQ
dHI8SlNHbG9iYWxEYXRhPiBKU0dsb2JhbERhdGE6OmNyZWF0ZShIZWFwVHlwZSBoZWFwVHlwZSkK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpTR2xvYmFsRGF0YShEZWZhdWx0LCBoZWFwVHlw
ZSkpOwotfQotCi1QYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4gSlNHbG9iYWxEYXRhOjpjcmVhdGVM
ZWFrZWQoSGVhcFR5cGUgaGVhcFR5cGUpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZShoZWFwVHlwZSk7
Ci19Ci0KLWJvb2wgSlNHbG9iYWxEYXRhOjpzaGFyZWRJbnN0YW5jZUV4aXN0cygpCi17Ci0gICAg
cmV0dXJuIHNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKTsKLX0KLQotSlNHbG9iYWxEYXRhJiBKU0ds
b2JhbERhdGE6OnNoYXJlZEluc3RhbmNlKCkKLXsKLSAgICBHbG9iYWxKU0xvY2sgZ2xvYmFsTG9j
azsKLSAgICBKU0dsb2JhbERhdGEqJiBpbnN0YW5jZSA9IHNoYXJlZEluc3RhbmNlSW50ZXJuYWwo
KTsKLSAgICBpZiAoIWluc3RhbmNlKSB7Ci0gICAgICAgIGluc3RhbmNlID0gYWRvcHRSZWYobmV3
IEpTR2xvYmFsRGF0YShBUElTaGFyZWQsIFNtYWxsSGVhcCkpLmxlYWtSZWYoKTsKLSAgICAgICAg
aW5zdGFuY2UtPm1ha2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCk7Ci0gICAgfQotICAgIHJl
dHVybiAqaW5zdGFuY2U7Ci19Ci0KLUpTR2xvYmFsRGF0YSomIEpTR2xvYmFsRGF0YTo6c2hhcmVk
SW5zdGFuY2VJbnRlcm5hbCgpCi17Ci0gICAgc3RhdGljIEpTR2xvYmFsRGF0YSogc2hhcmVkSW5z
dGFuY2U7Ci0gICAgcmV0dXJuIHNoYXJlZEluc3RhbmNlOwotfQotCi0jaWYgRU5BQkxFKEpJVCkK
LXN0YXRpYyBUaHVua0dlbmVyYXRvciB0aHVua0dlbmVyYXRvckZvckludHJpbnNpYyhJbnRyaW5z
aWMgaW50cmluc2ljKQotewotICAgIHN3aXRjaCAoaW50cmluc2ljKSB7Ci0gICAgY2FzZSBDaGFy
Q29kZUF0SW50cmluc2ljOgotICAgICAgICByZXR1cm4gY2hhckNvZGVBdFRodW5rR2VuZXJhdG9y
OwotICAgIGNhc2UgQ2hhckF0SW50cmluc2ljOgotICAgICAgICByZXR1cm4gY2hhckF0VGh1bmtH
ZW5lcmF0b3I7Ci0gICAgY2FzZSBGcm9tQ2hhckNvZGVJbnRyaW5zaWM6Ci0gICAgICAgIHJldHVy
biBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcjsKLSAgICBjYXNlIFNxcnRJbnRyaW5zaWM6Ci0g
ICAgICAgIHJldHVybiBzcXJ0VGh1bmtHZW5lcmF0b3I7Ci0gICAgY2FzZSBQb3dJbnRyaW5zaWM6
Ci0gICAgICAgIHJldHVybiBwb3dUaHVua0dlbmVyYXRvcjsKLSAgICBjYXNlIEFic0ludHJpbnNp
YzoKLSAgICAgICAgcmV0dXJuIGFic1RodW5rR2VuZXJhdG9yOwotICAgIGNhc2UgRmxvb3JJbnRy
aW5zaWM6Ci0gICAgICAgIHJldHVybiBmbG9vclRodW5rR2VuZXJhdG9yOwotICAgIGNhc2UgQ2Vp
bEludHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIGNlaWxUaHVua0dlbmVyYXRvcjsKLSAgICBjYXNl
IFJvdW5kSW50cmluc2ljOgotICAgICAgICByZXR1cm4gcm91bmRUaHVua0dlbmVyYXRvcjsKLSAg
ICBjYXNlIEV4cEludHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIGV4cFRodW5rR2VuZXJhdG9yOwot
ICAgIGNhc2UgTG9nSW50cmluc2ljOgotICAgICAgICByZXR1cm4gbG9nVGh1bmtHZW5lcmF0b3I7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1OYXRpdmVFeGVj
dXRhYmxlKiBKU0dsb2JhbERhdGE6OmdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiBmdW5j
dGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpCi17Ci0gICAgcmV0dXJuIGppdFN0dWJz
LT5ob3N0RnVuY3Rpb25TdHViKHRoaXMsIGZ1bmN0aW9uLCBjb25zdHJ1Y3Rvcik7Ci19Ci1OYXRp
dmVFeGVjdXRhYmxlKiBKU0dsb2JhbERhdGE6OmdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlv
biBmdW5jdGlvbiwgSW50cmluc2ljIGludHJpbnNpYykKLXsKLSAgICBBU1NFUlQoY2FuVXNlSklU
KCkpOwotICAgIHJldHVybiBqaXRTdHVicy0+aG9zdEZ1bmN0aW9uU3R1Yih0aGlzLCBmdW5jdGlv
biwgaW50cmluc2ljICE9IE5vSW50cmluc2ljID8gdGh1bmtHZW5lcmF0b3JGb3JJbnRyaW5zaWMo
aW50cmluc2ljKSA6IDAsIGludHJpbnNpYyk7Ci19Ci0KLSNlbHNlIC8vICFFTkFCTEUoSklUKQot
TmF0aXZlRXhlY3V0YWJsZSogSlNHbG9iYWxEYXRhOjpnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVu
Y3Rpb24gZnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQotewotICAgIHJldHVy
biBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKnRoaXMsIGZ1bmN0aW9uLCBjb25zdHJ1Y3Rvcik7
Ci19Ci0jZW5kaWYgLy8gIUVOQUJMRShKSVQpCi0KLUpTR2xvYmFsRGF0YTo6Q2xpZW50RGF0YTo6
fkNsaWVudERhdGEoKQotewotfQotCi12b2lkIEpTR2xvYmFsRGF0YTo6cmVzZXREYXRlQ2FjaGUo
KQotewotICAgIGNhY2hlZFVUQ09mZnNldCA9IFFOYU47Ci0gICAgZHN0T2Zmc2V0Q2FjaGUucmVz
ZXQoKTsKLSAgICBjYWNoZWREYXRlU3RyaW5nID0gU3RyaW5nKCk7Ci0gICAgY2FjaGVkRGF0ZVN0
cmluZ1ZhbHVlID0gUU5hTjsKLSAgICBkYXRlSW5zdGFuY2VDYWNoZS5yZXNldCgpOwotfQotCi12
b2lkIEpTR2xvYmFsRGF0YTo6c3RhcnRTYW1wbGluZygpCi17Ci0gICAgaW50ZXJwcmV0ZXItPnN0
YXJ0U2FtcGxpbmcoKTsKLX0KLQotdm9pZCBKU0dsb2JhbERhdGE6OnN0b3BTYW1wbGluZygpCi17
Ci0gICAgaW50ZXJwcmV0ZXItPnN0b3BTYW1wbGluZygpOwotfQotCi12b2lkIEpTR2xvYmFsRGF0
YTo6ZGlzY2FyZEFsbENvZGUoKQotewotICAgIG1fY29kZUNhY2hlLT5jbGVhcigpOwotICAgIGhl
YXAuZGVsZXRlQWxsQ29tcGlsZWRDb2RlKCk7Ci0gICAgaGVhcC5yZXBvcnRBYmFuZG9uZWRPYmpl
Y3RHcmFwaCgpOwotfQotCi12b2lkIEpTR2xvYmFsRGF0YTo6ZHVtcFNhbXBsZURhdGEoRXhlY1N0
YXRlKiBleGVjKQotewotICAgIGludGVycHJldGVyLT5kdW1wU2FtcGxlRGF0YShleGVjKTsKLSNp
ZiBFTkFCTEUoQVNTRU1CTEVSKQotICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmR1bXBQcm9maWxl
KCk7Ci0jZW5kaWYKLX0KLQotU291cmNlUHJvdmlkZXJDYWNoZSogSlNHbG9iYWxEYXRhOjphZGRT
b3VyY2VQcm92aWRlckNhY2hlKFNvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlcikKLXsKLSAg
ICBTb3VyY2VQcm92aWRlckNhY2hlTWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gc291cmNlUHJv
dmlkZXJDYWNoZU1hcC5hZGQoc291cmNlUHJvdmlkZXIsIDApOwotICAgIGlmIChhZGRSZXN1bHQu
aXNOZXdFbnRyeSkKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFkb3B0UmVm
KG5ldyBTb3VyY2VQcm92aWRlckNhY2hlKTsKLSAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS5nZXQoKTsKLX0KLQotdm9pZCBKU0dsb2JhbERhdGE6OmNsZWFyU291cmNlUHJvdmlk
ZXJDYWNoZXMoKQotewotICAgIHNvdXJjZVByb3ZpZGVyQ2FjaGVNYXAuY2xlYXIoKTsKLX0KLQot
c3RydWN0IFN0YWNrUHJlc2VydmluZ1JlY29tcGlsZXIgOiBwdWJsaWMgTWFya2VkQmxvY2s6OlZv
aWRGdW5jdG9yIHsKLSAgICBIYXNoU2V0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+IGN1cnJlbnRseUV4
ZWN1dGluZ0Z1bmN0aW9uczsKLSAgICB2b2lkIG9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQotICAg
IHsKLSAgICAgICAgaWYgKCFjZWxsLT5pbmhlcml0cygmRnVuY3Rpb25FeGVjdXRhYmxlOjpzX2lu
Zm8pKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7Ci0gICAgICAgIGlm
IChjdXJyZW50bHlFeGVjdXRpbmdGdW5jdGlvbnMuY29udGFpbnMoZXhlY3V0YWJsZSkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGV4ZWN1dGFibGUtPmNsZWFyQ29kZUlmTm90Q29tcGls
aW5nKCk7Ci0gICAgfQotfTsKLQotdm9pZCBKU0dsb2JhbERhdGE6OnJlbGVhc2VFeGVjdXRhYmxl
TWVtb3J5KCkKLXsKLSAgICBpZiAoZHluYW1pY0dsb2JhbE9iamVjdCkgewotICAgICAgICBTdGFj
a1ByZXNlcnZpbmdSZWNvbXBpbGVyIHJlY29tcGlsZXI7Ci0gICAgICAgIEhhc2hTZXQ8SlNDZWxs
Kj4gcm9vdHM7Ci0gICAgICAgIGhlYXAuY2Fub25pY2FsaXplQ2VsbExpdmVuZXNzRGF0YSgpOwot
ICAgICAgICBoZWFwLmdldENvbnNlcnZhdGl2ZVJlZ2lzdGVyUm9vdHMocm9vdHMpOwotICAgICAg
ICBIYXNoU2V0PEpTQ2VsbCo+OjppdGVyYXRvciBlbmQgPSByb290cy5lbmQoKTsKLSAgICAgICAg
Zm9yIChIYXNoU2V0PEpTQ2VsbCo+OjppdGVyYXRvciBwdHIgPSByb290cy5iZWdpbigpOyBwdHIg
IT0gZW5kOyArK3B0cikgewotICAgICAgICAgICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSA9IDA7Ci0gICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSAqcHRyOwotICAgICAgICAgICAgaWYg
KGNlbGwtPmluaGVyaXRzKCZTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8pKQotICAgICAgICAgICAg
ICAgIGV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxTY3JpcHRFeGVjdXRhYmxlKj4oKnB0cik7Ci0g
ICAgICAgICAgICBlbHNlIGlmIChjZWxsLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6c19pbmZvKSkg
ewotICAgICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rp
b24qPigqcHRyKTsKLSAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmlzSG9zdEZ1bmN0aW9u
KCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGV4ZWN1
dGFibGUgPSBmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIEFTU0VSVChleGVjdXRhYmxlLT5p
bmhlcml0cygmU2NyaXB0RXhlY3V0YWJsZTo6c19pbmZvKSk7Ci0gICAgICAgICAgICBleGVjdXRh
YmxlLT51bmxpbmtDYWxscygpOwotICAgICAgICAgICAgaWYgKGV4ZWN1dGFibGUtPmluaGVyaXRz
KCZGdW5jdGlvbkV4ZWN1dGFibGU6OnNfaW5mbykpCi0gICAgICAgICAgICAgICAgcmVjb21waWxl
ci5jdXJyZW50bHlFeGVjdXRpbmdGdW5jdGlvbnMuYWRkKHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KGV4ZWN1dGFibGUpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgfQotICAg
ICAgICBoZWFwLm9iamVjdFNwYWNlKCkuZm9yRWFjaExpdmVDZWxsPFN0YWNrUHJlc2VydmluZ1Jl
Y29tcGlsZXI+KHJlY29tcGlsZXIpOwotICAgIH0KLSAgICBtX3JlZ0V4cENhY2hlLT5pbnZhbGlk
YXRlQ29kZSgpOwotICAgIGhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKLX0KLSAgICAKLXZvaWQg
cmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotewotICAg
IGdsb2JhbERhdGEucmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoKTsKLX0KLQotI2lmIEVOQUJMRShE
RkdfSklUKQotdm9pZCBKU0dsb2JhbERhdGE6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNl
cnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykKLXsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNjcmF0Y2hCdWZmZXJzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIFNjcmF0Y2hCdWZm
ZXIqIHNjcmF0Y2hCdWZmZXIgPSBzY3JhdGNoQnVmZmVyc1tpXTsKLSAgICAgICAgaWYgKHNjcmF0
Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aCgpKSB7Ci0gICAgICAgICAgICB2b2lkKiBidWZmZXJTdGFy
dCA9IHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKTsKLSAgICAgICAgICAgIGNvbnNlcnZhdGl2
ZVJvb3RzLmFkZChidWZmZXJTdGFydCwgc3RhdGljX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGNo
YXIqPihidWZmZXJTdGFydCkgKyBzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5ndGgoKSkpOwotICAg
ICAgICB9Ci0gICAgfQotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCi12
b2lkIEpTR2xvYmFsRGF0YTo6YWRkUmVnRXhwVG9UcmFjZShSZWdFeHAqIHJlZ0V4cCkKLXsKLSAg
ICBtX3J0VHJhY2VMaXN0LT5hZGQocmVnRXhwKTsKLX0KLQotdm9pZCBKU0dsb2JhbERhdGE6OmR1
bXBSZWdFeHBUcmFjZSgpCi17Ci0gICAgLy8gVGhlIGZpcnN0IFJlZ0V4cCBvYmplY3QgaXMgaWdu
b3JlZC4gIEl0IGlzIGNyZWF0ZSBieSB0aGUgUmVnRXhwUHJvdG90eXBlIGN0b3IgYW5kIG5vdCB1
c2VkLgotICAgIFJUVHJhY2VMaXN0OjppdGVyYXRvciBpdGVyID0gKyttX3J0VHJhY2VMaXN0LT5i
ZWdpbigpOwotICAgIAotICAgIGlmIChpdGVyICE9IG1fcnRUcmFjZUxpc3QtPmVuZCgpKSB7Ci0g
ICAgICAgIGRhdGFMb2dGKCJcblJlZ0V4cCBUcmFjaW5nXG4iKTsKLSAgICAgICAgZGF0YUxvZ0Yo
IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1hdGNoKCkgICAgbWF0Y2hlc1xuIik7Ci0gICAgICAgIGRhdGFMb2dGKCJSZWd1bGFyIEV4
cHJlc3Npb24gICAgICAgICAgICAgICAgICAgICAgICAgIEpJVCBBZGRyZXNzICAgICAgY2FsbHMg
ICAgICBmb3VuZFxuIik7Ci0gICAgICAgIGRhdGFMb2dGKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0t
XG4iKTsKLSAgICAKLSAgICAgICAgdW5zaWduZWQgcmVDb3VudCA9IDA7Ci0gICAgCi0gICAgICAg
IGZvciAoOyBpdGVyICE9IG1fcnRUcmFjZUxpc3QtPmVuZCgpOyArK2l0ZXIsICsrcmVDb3VudCkK
LSAgICAgICAgICAgICgqaXRlciktPnByaW50VHJhY2VEYXRhKCk7Ci0KLSAgICAgICAgZGF0YUxv
Z0YoIiVkIFJlZ3VsYXIgRXhwcmVzc2lvbnNcbiIsIHJlQ291bnQpOwotICAgIH0KLSAgICAKLSAg
ICBtX3J0VHJhY2VMaXN0LT5jbGVhcigpOwotfQotI2Vsc2UKLXZvaWQgSlNHbG9iYWxEYXRhOjpk
dW1wUmVnRXhwVHJhY2UoKQotewotfQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlz
aW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIEpTR2xvYmFsRGF0YV9oCi0jZGVmaW5lIEpTR2xvYmFsRGF0YV9oCi0KLSNpbmNsdWRlICJD
YWNoZWRUcmFuc2NlbmRlbnRhbEZ1bmN0aW9uLmgiCi0jaW5jbHVkZSAiRGF0ZUluc3RhbmNlQ2Fj
aGUuaCIKLSNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCi0jaW5jbHVkZSAiSGVhcC5o
IgotI2luY2x1ZGUgIkludHJpbnNpYy5oIgotI2luY2x1ZGUgIkpJVFRodW5rcy5oIgotI2luY2x1
ZGUgIkpJVFRodW5rcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKLSNpbmNsdWRlICJKU0xv
Y2suaCIKLSNpbmNsdWRlICJMTEludERhdGEuaCIKLSNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuaCIKLSNpbmNsdWRlICJOdW1lcmljU3RyaW5ncy5oIgotI2luY2x1ZGUgIlByb2ZpbGVy
RGF0YWJhc2UuaCIKLSNpbmNsdWRlICJQcml2YXRlTmFtZS5oIgotI2luY2x1ZGUgIlByb3RvdHlw
ZU1hcC5oIgotI2luY2x1ZGUgIlNtYWxsU3RyaW5ncy5oIgotI2luY2x1ZGUgIlN0cm9uZy5oIgot
I2luY2x1ZGUgIlRlcm1pbmF0b3IuaCIKLSNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKLSNp
bmNsdWRlICJUeXBlZEFycmF5RGVzY3JpcHRvci5oIgotI2luY2x1ZGUgIldlYWtSYW5kb20uaCIK
LSNpbmNsdWRlIDx3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3IuaD4KLSNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9TaW1wbGVTdGF0cy5oPgotI2luY2x1ZGUgPHd0Zi9U
aHJlYWRTYWZlUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgot
I2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+Ci0jaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5H
KQotI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBKU0Mg
ewotCi0gICAgY2xhc3MgQ29kZUJsb2NrOwotICAgIGNsYXNzIENvZGVDYWNoZTsKLSAgICBjbGFz
cyBDb21tb25JZGVudGlmaWVyczsKLSAgICBjbGFzcyBFeGVjU3RhdGU7Ci0gICAgY2xhc3MgSGFu
ZGxlU3RhY2s7Ci0gICAgY2xhc3MgSWRlbnRpZmllclRhYmxlOwotICAgIGNsYXNzIEludGVycHJl
dGVyOwotICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwotICAgIGNsYXNzIEpTT2JqZWN0OwotICAg
IGNsYXNzIEtleXdvcmRzOwotICAgIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLSAgICBj
bGFzcyBMZWdhY3lQcm9maWxlcjsKLSAgICBjbGFzcyBOYXRpdmVFeGVjdXRhYmxlOwotICAgIGNs
YXNzIFBhcnNlckFyZW5hOwotICAgIGNsYXNzIFJlZ0V4cENhY2hlOwotICAgIGNsYXNzIFNvdXJj
ZVByb3ZpZGVyOwotICAgIGNsYXNzIFNvdXJjZVByb3ZpZGVyQ2FjaGU7Ci0gICAgc3RydWN0IFN0
YWNrRnJhbWU7Ci0gICAgY2xhc3MgU3RyaW5naWZpZXI7Ci0gICAgY2xhc3MgU3RydWN0dXJlOwot
I2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKLSAgICBjbGFzcyBSZWdFeHA7Ci0jZW5kaWYKLSAg
ICBjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKLSAgICBjbGFzcyBVbmxpbmtlZEV2YWxDb2RlQmxv
Y2s7Ci0gICAgY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7Ci0gICAgY2xhc3MgVW5s
aW5rZWRQcm9ncmFtQ29kZUJsb2NrOwotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgbmFtZXNw
YWNlIERGRyB7Ci0gICAgY2xhc3MgTG9uZ0xpdmVkU3RhdGU7Ci0gICAgfQotI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQotCi0gICAgc3RydWN0IEhhc2hUYWJsZTsKLSAgICBzdHJ1Y3QgSW5zdHJ1
Y3Rpb247Ci0KLSAgICBzdHJ1Y3QgRFNUT2Zmc2V0Q2FjaGUgewotICAgICAgICBEU1RPZmZzZXRD
YWNoZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc2V0KCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIHZvaWQgcmVzZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBvZmZzZXQg
PSAwLjA7Ci0gICAgICAgICAgICBzdGFydCA9IDAuMDsKLSAgICAgICAgICAgIGVuZCA9IC0xLjA7
Ci0gICAgICAgICAgICBpbmNyZW1lbnQgPSAwLjA7Ci0gICAgICAgIH0KLQotICAgICAgICBkb3Vi
bGUgb2Zmc2V0OwotICAgICAgICBkb3VibGUgc3RhcnQ7Ci0gICAgICAgIGRvdWJsZSBlbmQ7Ci0g
ICAgICAgIGRvdWJsZSBpbmNyZW1lbnQ7Ci0gICAgfTsKLQotI2lmIEVOQUJMRShERkdfSklUKQot
ICAgIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOwotCi0jaWYgQ09NUElMRVIoTVNWQykKLSNwcmFn
bWEgd2FybmluZyhwdXNoKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQyMDApIC8vIERpc2Fi
bGUgInplcm8tc2l6ZWQgYXJyYXkgaW4gc3RydWN0L3VuaW9uIiB3YXJuaW5nCi0jZW5kaWYKLSAg
ICBzdHJ1Y3QgU2NyYXRjaEJ1ZmZlciB7Ci0gICAgICAgIFNjcmF0Y2hCdWZmZXIoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICB1Lm1fYWN0aXZlTGVuZ3RoID0gMDsKLSAgICAgICAgfQotCi0gICAg
ICAgIHN0YXRpYyBTY3JhdGNoQnVmZmVyKiBjcmVhdGUoc2l6ZV90IHNpemUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIFNjcmF0Y2hCdWZmZXIqIHJlc3VsdCA9IG5ldyAoZmFzdE1hbGxvYyhTY3Jh
dGNoQnVmZmVyOjphbGxvY2F0aW9uU2l6ZShzaXplKSkpIFNjcmF0Y2hCdWZmZXI7Ci0KLSAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgc2l6ZV90
IGFsbG9jYXRpb25TaXplKHNpemVfdCBidWZmZXJTaXplKSB7IHJldHVybiBzaXplb2YoU2NyYXRj
aEJ1ZmZlcikgKyBidWZmZXJTaXplOyB9Ci0gICAgICAgIHZvaWQgc2V0QWN0aXZlTGVuZ3RoKHNp
emVfdCBhY3RpdmVMZW5ndGgpIHsgdS5tX2FjdGl2ZUxlbmd0aCA9IGFjdGl2ZUxlbmd0aDsgfQot
ICAgICAgICBzaXplX3QgYWN0aXZlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gdS5tX2FjdGl2ZUxl
bmd0aDsgfTsKLSAgICAgICAgc2l6ZV90KiBhY3RpdmVMZW5ndGhQdHIoKSB7IHJldHVybiAmdS5t
X2FjdGl2ZUxlbmd0aDsgfTsKLSAgICAgICAgdm9pZCogZGF0YUJ1ZmZlcigpIHsgcmV0dXJuIG1f
YnVmZmVyOyB9Ci0KLSAgICAgICAgdW5pb24gewotICAgICAgICAgICAgc2l6ZV90IG1fYWN0aXZl
TGVuZ3RoOwotICAgICAgICAgICAgZG91YmxlIHBhZDsgLy8gTWFrZSBzdXJlIG1fYnVmZmVyIGlz
IGRvdWJsZSBhbGlnbmVkLgotICAgICAgICB9IHU7Ci0jaWYgQ1BVKE1JUFMpICYmIChkZWZpbmVk
IFdURl9NSVBTX0FSQ0hfUkVWICYmIFdURl9NSVBTX0FSQ0hfUkVWID09IDIpCi0gICAgICAgIHZv
aWQqIG1fYnVmZmVyWzBdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKLSNlbHNlCi0gICAg
ICAgIHZvaWQqIG1fYnVmZmVyWzBdOwotI2VuZGlmCi0gICAgfTsKLSNpZiBDT01QSUxFUihNU1ZD
KQotI3ByYWdtYSB3YXJuaW5nKHBvcCkKLSNlbmRpZgotI2VuZGlmCi0KLSAgICBjbGFzcyBKU0ds
b2JhbERhdGEgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SlNHbG9iYWxEYXRhPiB7Ci0g
ICAgcHVibGljOgotICAgICAgICAvLyBXZWJDb3JlIGhhcyBhIG9uZS10by1vbmUgbWFwcGluZyBv
ZiB0aHJlYWRzIHRvIEpTR2xvYmFsRGF0YXM7Ci0gICAgICAgIC8vIGVpdGhlciBjcmVhdGUoKSBv
ciBjcmVhdGVMZWFrZWQoKSBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZQotICAgICAgICAvLyBv
biBhIHRocmVhZCwgdGhpcyBpcyB0aGUgJ2RlZmF1bHQnIEpTR2xvYmFsRGF0YSAoaXQgdXNlcyB0
aGUKLSAgICAgICAgLy8gdGhyZWFkJ3MgZGVmYXVsdCBzdHJpbmcgdW5pcXVpbmcgdGFibGUgZnJv
bSB3dGZUaHJlYWREYXRhKS4KLSAgICAgICAgLy8gQVBJIGNvbnRleHRzIGNyZWF0ZWQgdXNpbmcg
dGhlIG5ldyBjb250ZXh0IGdyb3VwIGF3YXJlIGludGVyZmFjZQotICAgICAgICAvLyBjcmVhdGUg
QVBJQ29udGV4dEdyb3VwIG9iamVjdHMgd2hpY2ggcmVxdWlyZSBsZXNzIGxvY2tpbmcgb2YgSlND
Ci0gICAgICAgIC8vIHRoYW4gdGhlIG9sZCBzaW5nbGV0b24gQVBJU2hhcmVkIEpTR2xvYmFsRGF0
YSBjcmVhdGVkIGZvciB1c2UgYnkKLSAgICAgICAgLy8gdGhlIG9yaWdpbmFsIEFQSS4KLSAgICAg
ICAgZW51bSBHbG9iYWxEYXRhVHlwZSB7IERlZmF1bHQsIEFQSUNvbnRleHRHcm91cCwgQVBJU2hh
cmVkIH07Ci0gICAgICAgIAotICAgICAgICBzdHJ1Y3QgQ2xpZW50RGF0YSB7Ci0gICAgICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5DbGllbnREYXRhKCkgPSAwOwotICAgICAgICB9
OwotCi0gICAgICAgIGJvb2wgaXNTaGFyZWRJbnN0YW5jZSgpIHsgcmV0dXJuIGdsb2JhbERhdGFU
eXBlID09IEFQSVNoYXJlZDsgfQotICAgICAgICBib29sIHVzaW5nQVBJKCkgeyByZXR1cm4gZ2xv
YmFsRGF0YVR5cGUgIT0gRGVmYXVsdDsgfQotICAgICAgICBzdGF0aWMgYm9vbCBzaGFyZWRJbnN0
YW5jZUV4aXN0cygpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNHbG9iYWxE
YXRhJiBzaGFyZWRJbnN0YW5jZSgpOwotCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBQYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4gY3JlYXRlKEhlYXBUeXBlID0gU21hbGxIZWFwKTsK
LSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFBhc3NSZWZQdHI8SlNHbG9iYWxEYXRh
PiBjcmVhdGVMZWFrZWQoSGVhcFR5cGUgPSBTbWFsbEhlYXApOwotICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxKU0dsb2JhbERhdGE+IGNyZWF0ZUNvbnRleHRHcm91cChIZWFwVHlwZSA9IFNtYWxs
SGVhcCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIH5KU0dsb2JhbERhdGEoKTsKLQotICAg
ICAgICB2b2lkIG1ha2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCkgeyBoZWFwLm1hY2hpbmVU
aHJlYWRzKCkubWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKTsgfQotCi0gICAgcHJpdmF0
ZToKLSAgICAgICAgUmVmUHRyPEpTTG9jaz4gbV9hcGlMb2NrOwotCi0gICAgcHVibGljOgotI2lm
IEVOQUJMRShBU1NFTUJMRVIpCi0gICAgICAgIC8vIGV4ZWN1dGFibGVBbGxvY2F0b3Igc2hvdWxk
IGJlIGRlc3RydWN0ZWQgYWZ0ZXIgdGhlIGhlYXAsIGFzIHRoZSBoZWFwIGNhbiBjYWxsIGV4ZWN1
dGFibGVBbGxvY2F0b3IKLSAgICAgICAgLy8gaW4gaXRzIGRlc3RydWN0b3IuCi0gICAgICAgIEV4
ZWN1dGFibGVBbGxvY2F0b3IgZXhlY3V0YWJsZUFsbG9jYXRvcjsKLSNlbmRpZgotCi0gICAgICAg
IC8vIFRoZSBoZWFwIHNob3VsZCBiZSBqdXN0IGFmdGVyIGV4ZWN1dGFibGVBbGxvY2F0b3IgYW5k
IGJlZm9yZSBvdGhlciBtZW1iZXJzIHRvIGVuc3VyZSB0aGF0IGl0J3MKLSAgICAgICAgLy8gZGVz
dHJ1Y3RlZCBhZnRlciBhbGwgdGhlIG9iamVjdHMgdGhhdCByZWZlcmVuY2UgaXQuCi0gICAgICAg
IEhlYXAgaGVhcDsKLSAgICAgICAgCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIE93blB0
cjxERkc6OkxvbmdMaXZlZFN0YXRlPiBtX2RmZ1N0YXRlOwotI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQotCi0gICAgICAgIEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFUeXBlOwotICAgICAgICBD
bGllbnREYXRhKiBjbGllbnREYXRhOwotICAgICAgICBFeGVjU3RhdGUqIHRvcENhbGxGcmFtZTsK
LQotICAgICAgICBjb25zdCBIYXNoVGFibGUqIGFycmF5Q29uc3RydWN0b3JUYWJsZTsKLSAgICAg
ICAgY29uc3QgSGFzaFRhYmxlKiBhcnJheVByb3RvdHlwZVRhYmxlOwotICAgICAgICBjb25zdCBI
YXNoVGFibGUqIGJvb2xlYW5Qcm90b3R5cGVUYWJsZTsKLSAgICAgICAgY29uc3QgSGFzaFRhYmxl
KiBkYXRlVGFibGU7Ci0gICAgICAgIGNvbnN0IEhhc2hUYWJsZSogZGF0ZUNvbnN0cnVjdG9yVGFi
bGU7Ci0gICAgICAgIGNvbnN0IEhhc2hUYWJsZSogZXJyb3JQcm90b3R5cGVUYWJsZTsKLSAgICAg
ICAgY29uc3QgSGFzaFRhYmxlKiBnbG9iYWxPYmplY3RUYWJsZTsKLSAgICAgICAgY29uc3QgSGFz
aFRhYmxlKiBqc29uVGFibGU7Ci0gICAgICAgIGNvbnN0IEhhc2hUYWJsZSogbWF0aFRhYmxlOwot
ICAgICAgICBjb25zdCBIYXNoVGFibGUqIG51bWJlckNvbnN0cnVjdG9yVGFibGU7Ci0gICAgICAg
IGNvbnN0IEhhc2hUYWJsZSogbnVtYmVyUHJvdG90eXBlVGFibGU7Ci0gICAgICAgIGNvbnN0IEhh
c2hUYWJsZSogb2JqZWN0Q29uc3RydWN0b3JUYWJsZTsKLSAgICAgICAgY29uc3QgSGFzaFRhYmxl
KiBwcml2YXRlTmFtZVByb3RvdHlwZVRhYmxlOwotICAgICAgICBjb25zdCBIYXNoVGFibGUqIHJl
Z0V4cFRhYmxlOwotICAgICAgICBjb25zdCBIYXNoVGFibGUqIHJlZ0V4cENvbnN0cnVjdG9yVGFi
bGU7Ci0gICAgICAgIGNvbnN0IEhhc2hUYWJsZSogcmVnRXhwUHJvdG90eXBlVGFibGU7Ci0gICAg
ICAgIGNvbnN0IEhhc2hUYWJsZSogc3RyaW5nQ29uc3RydWN0b3JUYWJsZTsKLSAgICAgICAgCi0g
ICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVyZVN0cnVjdHVyZTsKLSAgICAgICAgU3Ry
b25nPFN0cnVjdHVyZT4gc3RydWN0dXJlUmFyZURhdGFTdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9u
ZzxTdHJ1Y3R1cmU+IGRlYnVnZ2VyQWN0aXZhdGlvblN0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25n
PFN0cnVjdHVyZT4gaW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZTsKLSAgICAgICAg
U3Ryb25nPFN0cnVjdHVyZT4gdGVybWluYXRlZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlOwotICAg
ICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJpbmdTdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxT
dHJ1Y3R1cmU+IG5vdEFuT2JqZWN0U3RydWN0dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0dXJl
PiBwcm9wZXJ0eU5hbWVJdGVyYXRvclN0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVy
ZT4gZ2V0dGVyU2V0dGVyU3RydWN0dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBhcGlX
cmFwcGVyU3RydWN0dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBKU1Njb3BlU3RydWN0
dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBleGVjdXRhYmxlU3RydWN0dXJlOwotICAg
ICAgICBTdHJvbmc8U3RydWN0dXJlPiBuYXRpdmVFeGVjdXRhYmxlU3RydWN0dXJlOwotICAgICAg
ICBTdHJvbmc8U3RydWN0dXJlPiBldmFsRXhlY3V0YWJsZVN0cnVjdHVyZTsKLSAgICAgICAgU3Ry
b25nPFN0cnVjdHVyZT4gcHJvZ3JhbUV4ZWN1dGFibGVTdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9u
ZzxTdHJ1Y3R1cmU+IGZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25n
PFN0cnVjdHVyZT4gcmVnRXhwU3RydWN0dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBz
aGFyZWRTeW1ib2xUYWJsZVN0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3Ry
dWN0dXJlQ2hhaW5TdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHNwYXJzZUFy
cmF5VmFsdWVNYXBTdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdpdGhTY29w
ZVN0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGVTdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkUHJv
Z3JhbUNvZGVCbG9ja1N0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5r
ZWRFdmFsQ29kZUJsb2NrU3RydWN0dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0dXJl
PiBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlOwotCi0gICAgICAgIElkZW50aWZpZXJUYWJsZSogaWRl
bnRpZmllclRhYmxlOwotICAgICAgICBDb21tb25JZGVudGlmaWVycyogcHJvcGVydHlOYW1lczsK
LSAgICAgICAgY29uc3QgTWFya2VkQXJndW1lbnRCdWZmZXIqIGVtcHR5TGlzdDsgLy8gTGlzdHMg
YXJlIHN1cHBvc2VkIHRvIGJlIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgdG8gaGF2ZSB0aGVpciBl
bGVtZW50cyBwcm9wZXJseSBtYXJrZWQsIHdoaWNoIGlzIG5vdCB0aGUgY2FzZSBoZXJlIC0gYnV0
IHRoaXMgbGlzdCBoYXMgbm90aGluZyB0byBtYXJrLgotICAgICAgICBTbWFsbFN0cmluZ3Mgc21h
bGxTdHJpbmdzOwotICAgICAgICBOdW1lcmljU3RyaW5ncyBudW1lcmljU3RyaW5nczsKLSAgICAg
ICAgRGF0ZUluc3RhbmNlQ2FjaGUgZGF0ZUluc3RhbmNlQ2FjaGU7Ci0gICAgICAgIFdURjo6U2lt
cGxlU3RhdHMgbWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklUOwot
ICAgICAgICBWZWN0b3I8Q29kZUJsb2NrKj4gY29kZUJsb2Nrc0JlaW5nQ29tcGlsZWQ7Ci0gICAg
ICAgIHZvaWQgc3RhcnRlZENvbXBpbGluZyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKLSAgICAgICAg
ewotICAgICAgICAgICAgY29kZUJsb2Nrc0JlaW5nQ29tcGlsZWQuYXBwZW5kKGNvZGVCbG9jayk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGZpbmlzaGVkQ29tcGlsaW5nKENvZGVCbG9jayog
Y29kZUJsb2NrKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9j
aywgY29kZUJsb2NrID09IGNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkLmxhc3QoKSk7Ci0gICAgICAg
ICAgICBjb2RlQmxvY2tzQmVpbmdDb21waWxlZC5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2b2lkIHNldEluRGVmaW5lT3duUHJvcGVydHkoYm9vbCBpbkRlZmluZU93blByb3Bl
cnR5KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2luRGVmaW5lT3duUHJvcGVydHkgPSBpbkRl
ZmluZU93blByb3BlcnR5OwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBpc0luRGVmaW5lT3du
UHJvcGVydHkoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9pbkRlZmluZU93blBy
b3BlcnR5OwotICAgICAgICB9Ci0KLSAgICAgICAgTGVnYWN5UHJvZmlsZXIqIGVuYWJsZWRQcm9m
aWxlcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2VuYWJsZWRQcm9maWxlcjsK
LSAgICAgICAgfQotCi0jaWYgRU5BQkxFKEpJVCkgJiYgRU5BQkxFKExMSU5UKQotICAgICAgICBi
b29sIGNhblVzZUpJVCgpIHsgcmV0dXJuIG1fY2FuVXNlSklUOyB9Ci0jZWxpZiBFTkFCTEUoSklU
KQotICAgICAgICBib29sIGNhblVzZUpJVCgpIHsgcmV0dXJuIHRydWU7IH0gLy8gaml0IG9ubHkK
LSNlbHNlCi0gICAgICAgIGJvb2wgY2FuVXNlSklUKCkgeyByZXR1cm4gZmFsc2U7IH0gLy8gaW50
ZXJwcmV0ZXIgb25seQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoWUFSUl9KSVQpCi0gICAgICAgIGJv
b2wgY2FuVXNlUmVnRXhwSklUKCkgeyByZXR1cm4gbV9jYW5Vc2VSZWdFeHBKSVQ7IH0KLSNlbHNl
Ci0gICAgICAgIGJvb2wgY2FuVXNlUmVnRXhwSklUKCkgeyByZXR1cm4gZmFsc2U7IH0gLy8gaW50
ZXJwcmV0ZXIgb25seQotI2VuZGlmCi0KLSAgICAgICAgU291cmNlUHJvdmlkZXJDYWNoZSogYWRk
U291cmNlUHJvdmlkZXJDYWNoZShTb3VyY2VQcm92aWRlciopOwotICAgICAgICB2b2lkIGNsZWFy
U291cmNlUHJvdmlkZXJDYWNoZXMoKTsKLQotICAgICAgICBQcm90b3R5cGVNYXAgcHJvdG90eXBl
TWFwOwotCi0gICAgICAgIE93blB0cjxQYXJzZXJBcmVuYT4gcGFyc2VyQXJlbmE7Ci0gICAgICAg
IHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U291cmNlUHJvdmlkZXI+LCBSZWZQdHI8U291cmNlUHJv
dmlkZXJDYWNoZT4gPiBTb3VyY2VQcm92aWRlckNhY2hlTWFwOwotICAgICAgICBTb3VyY2VQcm92
aWRlckNhY2hlTWFwIHNvdXJjZVByb3ZpZGVyQ2FjaGVNYXA7Ci0gICAgICAgIE93blB0cjxLZXl3
b3Jkcz4ga2V5d29yZHM7Ci0gICAgICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlcjsKLSNpZiBF
TkFCTEUoSklUKQotICAgICAgICBPd25QdHI8SklUVGh1bmtzPiBqaXRTdHViczsKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdldENUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9y
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0aVN0dWIodGhpcywg
Z2VuZXJhdG9yKTsKLSAgICAgICAgfQotICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBnZXRIb3N0
RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24sIEludHJpbnNpYyk7Ci0jZW5kaWYKLSAgICAgICAgTmF0
aXZlRXhlY3V0YWJsZSogZ2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uLCBOYXRpdmVGdW5j
dGlvbiBjb25zdHJ1Y3Rvcik7Ci0KLSAgICAgICAgVGVybWluYXRvciB0ZXJtaW5hdG9yOwotCi0g
ICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uOwotICAgICAgICBSZWZDb3VudGVkQXJyYXk8U3RhY2tG
cmFtZT4gZXhjZXB0aW9uU3RhY2s7Ci0KLSAgICAgICAgY29uc3QgQ2xhc3NJbmZvKiBjb25zdCBq
c0FycmF5Q2xhc3NJbmZvOwotICAgICAgICBjb25zdCBDbGFzc0luZm8qIGNvbnN0IGpzRmluYWxP
YmplY3RDbGFzc0luZm87Ci0KLSAgICAgICAgUmV0dXJuQWRkcmVzc1B0ciBleGNlcHRpb25Mb2Nh
dGlvbjsKLSAgICAgICAgSlNWYWx1ZSBob3N0Q2FsbFJldHVyblZhbHVlOwotICAgICAgICBFeGVj
U3RhdGUqIGNhbGxGcmFtZUZvclRocm93OwotICAgICAgICB2b2lkKiB0YXJnZXRNYWNoaW5lUENG
b3JUaHJvdzsKLSAgICAgICAgSW5zdHJ1Y3Rpb24qIHRhcmdldEludGVycHJldGVyUENGb3JUaHJv
dzsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgdWludDMyX3Qgb3NyRXhpdEluZGV4Owot
ICAgICAgICB2b2lkKiBvc3JFeGl0SnVtcERlc3RpbmF0aW9uOwotICAgICAgICBWZWN0b3I8U2Ny
YXRjaEJ1ZmZlcio+IHNjcmF0Y2hCdWZmZXJzOwotICAgICAgICBzaXplX3Qgc2l6ZU9mTGFzdFNj
cmF0Y2hCdWZmZXI7Ci0gICAgICAgIAotICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVm
ZmVyRm9yU2l6ZShzaXplX3Qgc2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFzaXpl
KQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoc2l6ZSA+IHNpemVPZkxhc3RTY3JhdGNoQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgLy8g
UHJvdGVjdCBhZ2FpbnN0IGEgTl4yIG1lbW9yeSB1c2FnZSBwYXRob2xvZ3kgYnkgZW5zdXJpbmcK
LSAgICAgICAgICAgICAgICAvLyB0aGF0IGF0IHdvcnN0LCB3ZSBnZXQgYSBnZW9tZXRyaWMgc2Vy
aWVzLCBtZWFuaW5nIHRoYXQgdGhlCi0gICAgICAgICAgICAgICAgLy8gdG90YWwgbWVtb3J5IHVz
YWdlIGlzIHNvbWV3aGVyZSBhcm91bmQKLSAgICAgICAgICAgICAgICAvLyBtYXgoc2NyYXRjaCBi
dWZmZXIgc2l6ZSkgKiA0LgotICAgICAgICAgICAgICAgIHNpemVPZkxhc3RTY3JhdGNoQnVmZmVy
ID0gc2l6ZSAqIDI7Ci0KLSAgICAgICAgICAgICAgICBzY3JhdGNoQnVmZmVycy5hcHBlbmQoU2Ny
YXRjaEJ1ZmZlcjo6Y3JlYXRlKHNpemVPZkxhc3RTY3JhdGNoQnVmZmVyKSk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIFNjcmF0Y2hCdWZmZXIqIHJlc3VsdCA9IHNjcmF0Y2hCdWZmZXJz
Lmxhc3QoKTsKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0QWN0aXZlTGVuZ3RoKDApOwotICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZ2F0aGVyQ29u
c2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKLSNlbmRpZgotCi0gICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBkeW5hbWljR2xvYmFsT2JqZWN0OwotCi0gICAgICAgIEhhc2hTZXQ8SlNP
YmplY3QqPiBzdHJpbmdSZWN1cnNpb25DaGVja1Zpc2l0ZWRPYmplY3RzOwotCi0gICAgICAgIGRv
dWJsZSBjYWNoZWRVVENPZmZzZXQ7Ci0gICAgICAgIERTVE9mZnNldENhY2hlIGRzdE9mZnNldENh
Y2hlOwotICAgICAgICAKLSAgICAgICAgU3RyaW5nIGNhY2hlZERhdGVTdHJpbmc7Ci0gICAgICAg
IGRvdWJsZSBjYWNoZWREYXRlU3RyaW5nVmFsdWU7Ci0KLSAgICAgICAgTGVnYWN5UHJvZmlsZXIq
IG1fZW5hYmxlZFByb2ZpbGVyOwotICAgICAgICBPd25QdHI8UHJvZmlsZXI6OkRhdGFiYXNlPiBt
X3BlckJ5dGVjb2RlUHJvZmlsZXI7Ci0gICAgICAgIFJlZ0V4cENhY2hlKiBtX3JlZ0V4cENhY2hl
OwotICAgICAgICBCdW1wUG9pbnRlckFsbG9jYXRvciBtX3JlZ0V4cEFsbG9jYXRvcjsKLQotI2lm
IEVOQUJMRShSRUdFWFBfVFJBQ0lORykKLSAgICAgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxSZWZQ
dHI8UmVnRXhwPiA+IFJUVHJhY2VMaXN0OwotICAgICAgICBSVFRyYWNlTGlzdCogbV9ydFRyYWNl
TGlzdDsKLSNlbmRpZgotCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICBUaHJlYWRJZGVudGlmaWVy
IGV4Y2x1c2l2ZVRocmVhZDsKLSNlbmRpZgotCi0gICAgICAgIENhY2hlZFRyYW5zY2VuZGVudGFs
RnVuY3Rpb248c3RkOjpzaW4+IGNhY2hlZFNpbjsKLQotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHJlc2V0RGF0ZUNhY2hlKCk7Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBzdGFydFNhbXBsaW5nKCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc3RvcFNh
bXBsaW5nKCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcFNhbXBsZURhdGEo
RXhlY1N0YXRlKiBleGVjKTsKLSAgICAgICAgUmVnRXhwQ2FjaGUqIHJlZ0V4cENhY2hlKCkgeyBy
ZXR1cm4gbV9yZWdFeHBDYWNoZTsgfQotI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKLSAgICAg
ICAgdm9pZCBhZGRSZWdFeHBUb1RyYWNlKFBhc3NSZWZQdHI8UmVnRXhwPiByZWdFeHApOwotI2Vu
ZGlmCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcFJlZ0V4cFRyYWNlKCk7Ci0K
LSAgICAgICAgYm9vbCBpc0NvbGxlY3RvckJ1c3koKSB7IHJldHVybiBoZWFwLmlzQnVzeSgpOyB9
Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnko
KTsKLQotI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQotICAgICAgICBib29sIGlzSW5pdGlhbGl6
aW5nT2JqZWN0KCkgY29uc3Q7IAotICAgICAgICB2b2lkIHNldEluaXRpYWxpemluZ09iamVjdENs
YXNzKGNvbnN0IENsYXNzSW5mbyopOwotI2VuZGlmCi0KLSAgICAgICAgdW5zaWduZWQgbV9uZXdT
dHJpbmdzU2luY2VMYXN0SGFzaENvbnM7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IHNfbWluTnVtYmVyT2ZOZXdTdHJpbmdzVG9IYXNoQ29ucyA9IDEwMDsKLQotICAgICAgICBib29s
IGhhdmVFbm91Z2hOZXdTdHJpbmdzVG9IYXNoQ29ucygpIHsgcmV0dXJuIG1fbmV3U3RyaW5nc1Np
bmNlTGFzdEhhc2hDb25zID4gc19taW5OdW1iZXJPZk5ld1N0cmluZ3NUb0hhc2hDb25zOyB9Ci0g
ICAgICAgIHZvaWQgcmVzZXROZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMoKSB7IG1fbmV3U3Ry
aW5nc1NpbmNlTGFzdEhhc2hDb25zID0gMDsgfQotCi0jZGVmaW5lIHJlZ2lzdGVyVHlwZWRBcnJh
eUZ1bmN0aW9uKHR5cGUsIGNhcGl0YWxpemVkVHlwZSkgXAotICAgICAgICB2b2lkIHJlZ2lzdGVy
VHlwZWRBcnJheURlc2NyaXB0b3IoY29uc3QgY2FwaXRhbGl6ZWRUeXBlIyNBcnJheSosIGNvbnN0
IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKSBcCi0gICAgICAgIHsgXAotICAgICAg
ICAgICAgQVNTRVJUKCFtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yLm1fY2xhc3NJbmZvIHx8IG1f
IyN0eXBlIyNBcnJheURlc2NyaXB0b3IubV9jbGFzc0luZm8gPT0gZGVzY3JpcHRvci5tX2NsYXNz
SW5mbyk7IFwKLSAgICAgICAgICAgIG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IgPSBkZXNjcmlw
dG9yOyBcCi0gICAgICAgICAgICBBU1NFUlQobV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvci5tX2Ns
YXNzSW5mbyk7IFwKLSAgICAgICAgfSBcCi0gICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlw
dG9yJiB0eXBlIyNBcnJheURlc2NyaXB0b3IoKSBjb25zdCB7IEFTU0VSVChtXyMjdHlwZSMjQXJy
YXlEZXNjcmlwdG9yLm1fY2xhc3NJbmZvKTsgcmV0dXJuIG1fIyN0eXBlIyNBcnJheURlc2NyaXB0
b3I7IH0KLQotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihpbnQ4LCBJbnQ4KTsK
LSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oaW50MTYsIEludDE2KTsKLSAgICAg
ICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oaW50MzIsIEludDMyKTsKLSAgICAgICAgcmVn
aXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odWludDgsIFVpbnQ4KTsKLSAgICAgICAgcmVnaXN0ZXJU
eXBlZEFycmF5RnVuY3Rpb24odWludDhDbGFtcGVkLCBVaW50OENsYW1wZWQpOwotICAgICAgICBy
ZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih1aW50MTYsIFVpbnQxNik7Ci0gICAgICAgIHJlZ2lz
dGVyVHlwZWRBcnJheUZ1bmN0aW9uKHVpbnQzMiwgVWludDMyKTsKLSAgICAgICAgcmVnaXN0ZXJU
eXBlZEFycmF5RnVuY3Rpb24oZmxvYXQzMiwgRmxvYXQzMik7Ci0gICAgICAgIHJlZ2lzdGVyVHlw
ZWRBcnJheUZ1bmN0aW9uKGZsb2F0NjQsIEZsb2F0NjQpOwotI3VuZGVmIHJlZ2lzdGVyVHlwZWRB
cnJheUZ1bmN0aW9uCi0gICAgICAgIAotICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRv
ciogdHlwZWRBcnJheURlc2NyaXB0b3IoVHlwZWRBcnJheVR5cGUgdHlwZSkgY29uc3QKLSAgICAg
ICAgewotICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFR5cGVk
QXJyYXlOb25lOgotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgY2FzZSBU
eXBlZEFycmF5SW50ODoKLSAgICAgICAgICAgICAgICByZXR1cm4gJmludDhBcnJheURlc2NyaXB0
b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUludDE2OgotICAgICAgICAgICAgICAg
IHJldHVybiAmaW50MTZBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRB
cnJheUludDMyOgotICAgICAgICAgICAgICAgIHJldHVybiAmaW50MzJBcnJheURlc2NyaXB0b3Io
KTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4OgotICAgICAgICAgICAgICAgIHJl
dHVybiAmdWludDhBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJh
eVVpbnQ4Q2xhbXBlZDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJnVpbnQ4Q2xhbXBlZEFycmF5
RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDE2OgotICAgICAg
ICAgICAgICAgIHJldHVybiAmdWludDE2QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBj
YXNlIFR5cGVkQXJyYXlVaW50MzI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50MzJBcnJh
eURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUZsb2F0MzI6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICZmbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAg
ICBjYXNlIFR5cGVkQXJyYXlGbG9hdDY0OgotICAgICAgICAgICAgICAgIHJldHVybiAmZmxvYXQ2
NEFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBDUkFTSCgpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgSlNMb2NrJiBhcGlMb2NrKCkgeyByZXR1cm4gKm1fYXBpTG9jazsg
fQotICAgICAgICBDb2RlQ2FjaGUqIGNvZGVDYWNoZSgpIHsgcmV0dXJuIG1fY29kZUNhY2hlLmdl
dCgpOyB9Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkaXNjYXJkQWxsQ29kZSgp
OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKLSAgICAgICAgCi0gICAgICAgIEpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwZSwgSGVh
cFR5cGUpOwotICAgICAgICBzdGF0aWMgSlNHbG9iYWxEYXRhKiYgc2hhcmVkSW5zdGFuY2VJbnRl
cm5hbCgpOwotICAgICAgICB2b2lkIGNyZWF0ZU5hdGl2ZVRodW5rKCk7Ci0jaWYgRU5BQkxFKEFT
U0VNQkxFUikKLSAgICAgICAgYm9vbCBtX2NhblVzZUFzc2VtYmxlcjsKLSNlbmRpZgotI2lmIEVO
QUJMRShKSVQpCi0gICAgICAgIGJvb2wgbV9jYW5Vc2VKSVQ7Ci0jZW5kaWYKLSNpZiBFTkFCTEUo
WUFSUl9KSVQpCi0gICAgICAgIGJvb2wgbV9jYW5Vc2VSZWdFeHBKSVQ7Ci0jZW5kaWYKLSNpZiBF
TkFCTEUoR0NfVkFMSURBVElPTikKLSAgICAgICAgY29uc3QgQ2xhc3NJbmZvKiBtX2luaXRpYWxp
emluZ09iamVjdENsYXNzOwotI2VuZGlmCi0gICAgICAgIGJvb2wgbV9pbkRlZmluZU93blByb3Bl
cnR5OwotICAgICAgICBPd25QdHI8Q29kZUNhY2hlPiBtX2NvZGVDYWNoZTsKLQotICAgICAgICBU
eXBlZEFycmF5RGVzY3JpcHRvciBtX2ludDhBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVk
QXJyYXlEZXNjcmlwdG9yIG1faW50MTZBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJy
YXlEZXNjcmlwdG9yIG1faW50MzJBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlE
ZXNjcmlwdG9yIG1fdWludDhBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNj
cmlwdG9yIG1fdWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5
RGVzY3JpcHRvciBtX3VpbnQxNkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURl
c2NyaXB0b3IgbV91aW50MzJBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNj
cmlwdG9yIG1fZmxvYXQzMkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2Ny
aXB0b3IgbV9mbG9hdDY0QXJyYXlEZXNjcmlwdG9yOwotICAgIH07Ci0KLSNpZiBFTkFCTEUoR0Nf
VkFMSURBVElPTikKLSAgICBpbmxpbmUgYm9vbCBKU0dsb2JhbERhdGE6OmlzSW5pdGlhbGl6aW5n
T2JqZWN0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhIW1faW5pdGlhbGl6aW5nT2Jq
ZWN0Q2xhc3M7Ci0gICAgfQotCi0gICAgaW5saW5lIHZvaWQgSlNHbG9iYWxEYXRhOjpzZXRJbml0
aWFsaXppbmdPYmplY3RDbGFzcyhjb25zdCBDbGFzc0luZm8qIGluaXRpYWxpemluZ09iamVjdENs
YXNzKQotICAgIHsKLSAgICAgICAgbV9pbml0aWFsaXppbmdPYmplY3RDbGFzcyA9IGluaXRpYWxp
emluZ09iamVjdENsYXNzOwotICAgIH0KLSNlbmRpZgotCi0gICAgaW5saW5lIEhlYXAqIFdlYWtT
ZXQ6OmhlYXAoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICZtX2dsb2JhbERhdGEtPmhl
YXA7Ci0gICAgfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEpTR2xvYmFsRGF0
YV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw4ICsxMDUsOCBA
QCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSBKU0dsb2JhbE9iCiBAZW5kCiAqLwogCi1K
U0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqIGdsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlKQotICAgIDogQmFzZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIDAp
CitKU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqIGdsb2JhbE9iamVjdE1ldGhvZFRh
YmxlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCAwKQogICAgICwgbV9tYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkV2F0Y2hwb2ludChhZG9wdFJlZihuZXcgV2F0Y2hwb2ludFNldChJbml0aWFsaXpl
ZFdhdGNoaW5nKSkpCiAgICAgLCBtX2hhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludChhZG9wdFJlZihu
ZXcgV2F0Y2hwb2ludFNldChJbml0aWFsaXplZFdhdGNoaW5nKSkpCiAgICAgLCBtX3dlYWtSYW5k
b20oT3B0aW9uczo6Zm9yY2VXZWFrUmFuZG9tU2VlZCgpID8gT3B0aW9uczo6Zm9yY2VkV2Vha1Jh
bmRvbVNlZWQoKSA6IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5kb21OdW1iZXIoKSAqIChzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgKyAxLjApKSkKQEAgLTEyMCw3ICsxMjAs
NyBAQCBKU0dsb2JhbE9iamVjdDo6fkpTR2xvYmFsT2JqZWN0KCkKICAgICBpZiAobV9kZWJ1Z2dl
cikKICAgICAgICAgbV9kZWJ1Z2dlci0+ZGV0YWNoKHRoaXMpOwogCi0gICAgaWYgKExlZ2FjeVBy
b2ZpbGVyKiBwcm9maWxlciA9IGdsb2JhbERhdGEoKS5lbmFibGVkUHJvZmlsZXIoKSkKKyAgICBp
ZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gdm0oKS5lbmFibGVkUHJvZmlsZXIoKSkKICAg
ICAgICAgcHJvZmlsZXItPnN0b3BQcm9maWxpbmcodGhpcyk7CiB9CiAKQEAgLTEyOSwxNiArMTI5
LDE2IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmRlc3Ryb3koSlNDZWxsKiBjZWwKICAgICBzdGF0
aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KGNlbGwpLT5KU0dsb2JhbE9iamVjdDo6fkpTR2xvYmFs
T2JqZWN0KCk7CiB9CiAKLXZvaWQgSlNHbG9iYWxPYmplY3Q6OnNldEdsb2JhbFRoaXMoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU09iamVjdCogZ2xvYmFsVGhpcykKK3ZvaWQgSlNHbG9iYWxP
YmplY3Q6OnNldEdsb2JhbFRoaXMoVk0mIHZtLCBKU09iamVjdCogZ2xvYmFsVGhpcykKIHsgCi0g
ICAgbV9nbG9iYWxUaGlzLnNldChnbG9iYWxEYXRhLCB0aGlzLCBnbG9iYWxUaGlzKTsKKyAgICBt
X2dsb2JhbFRoaXMuc2V0KHZtLCB0aGlzLCBnbG9iYWxUaGlzKTsKIH0KIAogdm9pZCBKU0dsb2Jh
bE9iamVjdDo6aW5pdChKU09iamVjdCogdGhpc1ZhbHVlKQogewotICAgIEFTU0VSVChnbG9iYWxE
YXRhKCkuYXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOworICAgIEFTU0VS
VCh2bSgpLmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKIAotICAgIHNl
dEdsb2JhbFRoaXMoZ2xvYmFsRGF0YSgpLCB0aGlzVmFsdWUpOworICAgIHNldEdsb2JhbFRoaXMo
dm0oKSwgdGhpc1ZhbHVlKTsKICAgICBKU0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhlYygpLT5pbml0
KDAsIDAsIHRoaXMsIENhbGxGcmFtZTo6bm9DYWxsZXIoKSwgMCwgMCk7CiAKICAgICBtX2RlYnVn
Z2VyID0gMDsKQEAgLTE2MSwxNCArMTYxLDE0IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnB1dERp
cmVjdFZpcnR1YWwoSlMKICAgICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0dsb2JhbE9iamVjdCo+KG9iamVjdCk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8
fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpKTsKIAotICAgIGlm
IChzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKHRoaXNPYmplY3QsIGV4ZWMtPmdsb2JhbERh
dGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcykpCisgICAgaWYgKHN5bWJvbFRh
YmxlUHV0V2l0aEF0dHJpYnV0ZXModGhpc09iamVjdCwgZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgYXR0cmlidXRlcykpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTVmFsdWUgdmFs
dWVCZWZvcmUgPSB0aGlzT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9w
ZXJ0eU5hbWUpOworICAgIEpTVmFsdWUgdmFsdWVCZWZvcmUgPSB0aGlzT2JqZWN0LT5nZXREaXJl
Y3QoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsK
ICAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dCk7CiAgICAgaWYgKCF2YWx1ZUJlZm9yZSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlQWZ0ZXIg
PSB0aGlzT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUp
OworICAgICAgICBKU1ZhbHVlIHZhbHVlQWZ0ZXIgPSB0aGlzT2JqZWN0LT5nZXREaXJlY3QoZXhl
Yy0+dm0oKSwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgaWYgKHZhbHVlQWZ0ZXIpCiAgICAgICAg
ICAgICBKU09iamVjdDo6cHV0RGlyZWN0VmlydHVhbCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlQWZ0ZXIsIGF0dHJpYnV0ZXMpOwogICAgIH0KQEAgLTE5NywxMjYgKzE5Nywx
MjYgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogewogICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IEpTR2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVjKCk7CiAKLSAgICBtX2Z1
bmN0aW9uUHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEZ1bmN0aW9uUHJv
dG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgRnVuY3Rpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGpzTnVsbCgpKSkpOyAvLyBUaGUgcmVhbCBw
cm90b3R5cGUgd2lsbCBiZSBzZXQgb25jZSBPYmplY3RQcm90b3R5cGUgaXMgY3JlYXRlZC4KLSAg
ICBtX2Z1bmN0aW9uU3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTRnVu
Y3Rpb246OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fZnVuY3Rp
b25Qcm90b3R5cGUuZ2V0KCkpKTsKLSAgICBtX2JvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7Ci0g
ICAgbV9uYW1lZEZ1bmN0aW9uU3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9m
dW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMt
Pm5hbWUsIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtLCAwLCBtX2Z1bmN0aW9uTmFt
ZU9mZnNldCkpOwotICAgIG1faW50ZXJuYWxGdW5jdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CisgICAgbV9m
dW5jdGlvblByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgRnVuY3Rpb25Qcm90b3R5cGU6
OmNyZWF0ZShleGVjLCB0aGlzLCBGdW5jdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIHRoaXMsIGpzTnVsbCgpKSkpOyAvLyBUaGUgcmVhbCBwcm90b3R5cGUgd2lsbCBi
ZSBzZXQgb25jZSBPYmplY3RQcm90b3R5cGUgaXMgY3JlYXRlZC4KKyAgICBtX2Z1bmN0aW9uU3Ry
dWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0Z1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fYm91
bmRGdW5jdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNCb3VuZEZ1bmN0aW9u
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5n
ZXQoKSkpOworICAgIG1fbmFtZWRGdW5jdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhp
cywgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24oZXhlYy0+dm0oKSwgbV9mdW5jdGlv
blN0cnVjdHVyZS5nZXQoKSwgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSwgMCwgbV9mdW5jdGlvbk5hbWVPZmZzZXQpKTsKKyAg
ICBtX2ludGVybmFsRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEludGVy
bmFsRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9u
UHJvdG90eXBlLmdldCgpKSk7CiAgICAgSlNGdW5jdGlvbiogY2FsbEZ1bmN0aW9uID0gMDsKICAg
ICBKU0Z1bmN0aW9uKiBhcHBseUZ1bmN0aW9uID0gMDsKICAgICBtX2Z1bmN0aW9uUHJvdG90eXBl
LT5hZGRGdW5jdGlvblByb3BlcnRpZXMoZXhlYywgdGhpcywgJmNhbGxGdW5jdGlvbiwgJmFwcGx5
RnVuY3Rpb24pOwotICAgIG1fY2FsbEZ1bmN0aW9uLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRo
aXMsIGNhbGxGdW5jdGlvbik7Ci0gICAgbV9hcHBseUZ1bmN0aW9uLnNldChleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMsIGFwcGx5RnVuY3Rpb24pOwotICAgIG1fb2JqZWN0UHJvdG90eXBlLnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE9iamVjdFByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRo
aXMsIE9iamVjdFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywganNOdWxsKCkpKSk7CisgICAgbV9jYWxsRnVuY3Rpb24uc2V0KGV4ZWMtPnZtKCksIHRo
aXMsIGNhbGxGdW5jdGlvbik7CisgICAgbV9hcHBseUZ1bmN0aW9uLnNldChleGVjLT52bSgpLCB0
aGlzLCBhcHBseUZ1bmN0aW9uKTsKKyAgICBtX29iamVjdFByb3RvdHlwZS5zZXQoZXhlYy0+dm0o
KSwgdGhpcywgT2JqZWN0UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgT2JqZWN0UHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywganNOdWxsKCkpKSk7CiAgICAg
R2V0dGVyU2V0dGVyKiBwcm90b0FjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7
Ci0gICAgcHJvdG9BY2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgSlNGdW5j
dGlvbjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIDAsIFN0cmluZygpLCBnbG9iYWxGdW5jUHJvdG9HZXR0
ZXIpKTsKLSAgICBwcm90b0FjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBK
U0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhpcywgMCwgU3RyaW5nKCksIGdsb2JhbEZ1bmNQcm90
b1NldHRlcikpOworICAgIHByb3RvQWNjZXNzb3ItPnNldEdldHRlcihleGVjLT52bSgpLCBKU0Z1
bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhpcywgMCwgU3RyaW5nKCksIGdsb2JhbEZ1bmNQcm90b0dl
dHRlcikpOworICAgIHByb3RvQWNjZXNzb3ItPnNldFNldHRlcihleGVjLT52bSgpLCBKU0Z1bmN0
aW9uOjpjcmVhdGUoZXhlYywgdGhpcywgMCwgU3RyaW5nKCksIGdsb2JhbEZ1bmNQcm90b1NldHRl
cikpOwogICAgIG1fb2JqZWN0UHJvdG90eXBlLT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvLCBwcm90b0FjY2Vzc29yLCBBY2Nlc3Nv
ciB8IERvbnRFbnVtKTsKLSAgICBtX2Z1bmN0aW9uUHJvdG90eXBlLT5zdHJ1Y3R1cmUoKS0+c2V0
UHJvdG90eXBlV2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFBy
b3RvdHlwZS5nZXQoKSk7CisgICAgbV9mdW5jdGlvblByb3RvdHlwZS0+c3RydWN0dXJlKCktPnNl
dFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIG1fb2JqZWN0UHJvdG90eXBl
LmdldCgpKTsKIAotICAgIG1fbmFtZVNjb3BlU3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIEpTTmFtZVNjb3BlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBqc051bGwoKSkpOwotICAgIG1fYWN0aXZhdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIGpzTnVsbCgpKSk7Ci0gICAgbV9zdHJpY3RFdmFsQWN0aXZhdGlv
blN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBTdHJpY3RFdmFsQWN0aXZh
dGlvbjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywganNOdWxsKCkp
KTsKLSAgICBtX3dpdGhTY29wZVN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBKU1dpdGhTY29wZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
anNOdWxsKCkpKTsKLQotICAgIG1fbnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZS5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0ZpbmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZ2xv
YmFsRGF0YSgpLCB0aGlzLCBqc051bGwoKSwgSlNGaW5hbE9iamVjdDo6ZGVmYXVsdElubGluZUNh
cGFjaXR5KCkpKTsKLQotICAgIG1fY2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKLSAg
ICBtX2FyZ3VtZW50c1N0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBBcmd1
bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0
UHJvdG90eXBlLmdldCgpKSk7Ci0gICAgbV9jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlLnNl
dChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0
KCkpKTsKLSAgICBtX2NhbGxiYWNrT2JqZWN0U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIEpTQ2FsbGJhY2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+OjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQo
KSkpOworICAgIG1fbmFtZVNjb3BlU3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU05h
bWVTY29wZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIGpzTnVsbCgpKSk7Cisg
ICAgbV9hY3RpdmF0aW9uU3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0FjdGl2YXRp
b246OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBqc051bGwoKSkpOworICAgIG1f
c3RyaWN0RXZhbEFjdGl2YXRpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIFN0cmlj
dEV2YWxBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywganNOdWxs
KCkpKTsKKyAgICBtX3dpdGhTY29wZVN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNX
aXRoU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBqc051bGwoKSkpOwor
CisgICAgbV9udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlz
LCBKU0ZpbmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0oKSwgdGhpcywganNOdWxsKCksIEpT
RmluYWxPYmplY3Q6OmRlZmF1bHRJbmxpbmVDYXBhY2l0eSgpKSk7CisKKyAgICBtX2NhbGxiYWNr
RnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQ2FsbGJhY2tGdW5jdGlv
bjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUu
Z2V0KCkpKTsKKyAgICBtX2FyZ3VtZW50c1N0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywg
QXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90
b3R5cGUuZ2V0KCkpKTsKKyAgICBtX2NhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUuc2V0KGV4
ZWMtPnZtKCksIHRoaXMsIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CisgICAgbV9jYWxsYmFj
a09iamVjdFN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNDYWxsYmFja09iamVjdDxK
U0Rlc3RydWN0aWJsZU9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBt
X29iamVjdFByb3RvdHlwZS5nZXQoKSkpOwogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECi0gICAg
bV9vYmpjQ2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzLCBPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOwotICAgIG1fb2JqY1dyYXBw
ZXJPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNDYWxsYmFj
a09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fb2JqY0NhbGxi
YWNrRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIE9iakNDYWxsYmFja0Z1
bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3Rv
dHlwZS5nZXQoKSkpOworICAgIG1fb2JqY1dyYXBwZXJPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMt
PnZtKCksIHRoaXMsIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CiAj
ZW5kaWYKIAotICAgIG1fYXJyYXlQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUu
Z2V0KCkpKSk7CisgICAgbV9hcnJheVByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgQXJy
YXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwogICAg
IAotICAgIG1fb3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5nU2hhcGVbVW5kZWNpZGVk
U2hhcGUgPj4gSW5kZXhpbmdTaGFwZVNoaWZ0XS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Fy
cmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdpdGhVbmRlY2lkZWQpKTsKLSAgICBtX29yaWdpbmFs
QXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1NoYXBlW0ludDMyU2hhcGUgPj4gSW5kZXhpbmdTaGFw
ZVNoaWZ0XS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBB
cnJheVdpdGhJbnQzMikpOwotICAgIG1fb3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5n
U2hhcGVbRG91YmxlU2hhcGUgPj4gSW5kZXhpbmdTaGFwZVNoaWZ0XS5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdpdGhEb3VibGUpKTsKLSAgICBt
X29yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1NoYXBlW0NvbnRpZ3VvdXNTaGFwZSA+
PiBJbmRleGluZ1NoYXBlU2hpZnRdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJy
YXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90
b3R5cGUuZ2V0KCksIEFycmF5V2l0aENvbnRpZ3VvdXMpKTsKLSAgICBtX29yaWdpbmFsQXJyYXlT
dHJ1Y3R1cmVGb3JJbmRleGluZ1NoYXBlW0FycmF5U3RvcmFnZVNoYXBlID4+IEluZGV4aW5nU2hh
cGVTaGlmdF0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwg
QXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7Ci0gICAgbV9vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9y
SW5kZXhpbmdTaGFwZVtTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgPj4gSW5kZXhpbmdTaGFwZVNo
aWZ0XS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJh
eVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSk7CisgICAgbV9vcmlnaW5hbEFycmF5U3RydWN0dXJl
Rm9ySW5kZXhpbmdTaGFwZVtVbmRlY2lkZWRTaGFwZSA+PiBJbmRleGluZ1NoYXBlU2hpZnRdLnNl
dChleGVjLT52bSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwg
dGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwgQXJyYXlXaXRoVW5kZWNpZGVkKSk7CisgICAg
bV9vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdTaGFwZVtJbnQzMlNoYXBlID4+IElu
ZGV4aW5nU2hhcGVTaGlmdF0uc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdp
dGhJbnQzMikpOworICAgIG1fb3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5nU2hhcGVb
RG91YmxlU2hhcGUgPj4gSW5kZXhpbmdTaGFwZVNoaWZ0XS5zZXQoZXhlYy0+dm0oKSwgdGhpcywg
SlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5
cGUuZ2V0KCksIEFycmF5V2l0aERvdWJsZSkpOworICAgIG1fb3JpZ2luYWxBcnJheVN0cnVjdHVy
ZUZvckluZGV4aW5nU2hhcGVbQ29udGlndW91c1NoYXBlID4+IEluZGV4aW5nU2hhcGVTaGlmdF0u
c2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgp
LCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdpdGhDb250aWd1b3VzKSk7Cisg
ICAgbV9vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdTaGFwZVtBcnJheVN0b3JhZ2VT
aGFwZSA+PiBJbmRleGluZ1NoYXBlU2hpZnRdLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0FycmF5
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQo
KSwgQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7CisgICAgbV9vcmlnaW5hbEFycmF5U3RydWN0dXJl
Rm9ySW5kZXhpbmdTaGFwZVtTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgPj4gSW5kZXhpbmdTaGFw
ZVNoaWZ0XS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2UpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTnVtYmVyT2ZJbmRl
eGluZ1NoYXBlczsgKytpKQogICAgICAgICBtX2FycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdTaGFw
ZUR1cmluZ0FsbG9jYXRpb25baV0gPSBtX29yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGlu
Z1NoYXBlW2ldOwogICAgIAotICAgIG1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIFJlZ0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSkpOwor
ICAgIG1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBS
ZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Fy
cmF5UHJvdG90eXBlLmdldCgpKSk7CiAKLSAgICBtX3N0cmluZ1Byb3RvdHlwZS5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBTdHJpbmdQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBT
dHJpbmdQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwotICAgIG1fc3RyaW5nT2JqZWN0U3RydWN0dXJl
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIFN0cmluZ09iamVjdDo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9zdHJpbmdQcm90b3R5cGUuZ2V0KCkpKTsK
KyAgICBtX3N0cmluZ1Byb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgU3RyaW5nUHJvdG90
eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgU3RyaW5nUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV9zdHJp
bmdPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIFN0cmluZ09iamVjdDo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fc3RyaW5nUHJvdG90eXBlLmdldCgpKSk7
CiAKLSAgICBtX2Jvb2xlYW5Qcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
Qm9vbGVhblByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEJvb2xlYW5Qcm90b3R5cGU6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBl
LmdldCgpKSkpOwotICAgIG1fYm9vbGVhbk9iamVjdFN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCBCb29sZWFuT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCBtX2Jvb2xlYW5Qcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX2Jvb2xlYW5Q
cm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEJvb2xlYW5Qcm90b3R5cGU6OmNyZWF0ZShl
eGVjLCB0aGlzLCBCb29sZWFuUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwg
dGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV9ib29sZWFuT2JqZWN0U3Ry
dWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBCb29sZWFuT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9ib29sZWFuUHJvdG90eXBlLmdldCgpKSk7CiAKLSAgICBt
X251bWJlclByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOdW1iZXJQcm90
b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBOdW1iZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwot
ICAgIG1fbnVtYmVyT2JqZWN0U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IE51bWJlck9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
bV9udW1iZXJQcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX251bWJlclByb3RvdHlwZS5zZXQoZXhl
Yy0+dm0oKSwgdGhpcywgTnVtYmVyUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgTnVtYmVy
UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90
b3R5cGUuZ2V0KCkpKSk7CisgICAgbV9udW1iZXJPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZt
KCksIHRoaXMsIE51bWJlck9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMs
IG1fbnVtYmVyUHJvdG90eXBlLmdldCgpKSk7CiAKLSAgICBtX2RhdGVQcm90b3R5cGUuc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgRGF0ZVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMs
IERhdGVQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwotICAgIG1fZGF0ZVN0cnVjdHVyZS5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBEYXRlSW5zdGFuY2U6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fZGF0ZVByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fZGF0
ZVByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgRGF0ZVByb3RvdHlwZTo6Y3JlYXRlKGV4
ZWMsIHRoaXMsIERhdGVQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlz
LCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX2RhdGVTdHJ1Y3R1cmUuc2V0KGV4
ZWMtPnZtKCksIHRoaXMsIERhdGVJbnN0YW5jZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCks
IHRoaXMsIG1fZGF0ZVByb3RvdHlwZS5nZXQoKSkpOwogCi0gICAgUmVnRXhwKiBlbXB0eVJlZ2V4
ID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCAiIiwgTm9GbGFncyk7CisgICAg
UmVnRXhwKiBlbXB0eVJlZ2V4ID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+dm0oKSwgIiIsIE5vRmxh
Z3MpOwogICAgIAotICAgIG1fcmVnRXhwUHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCks
IHRoaXMsIFJlZ0V4cFByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIFJlZ0V4cFByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90
b3R5cGUuZ2V0KCkpLCBlbXB0eVJlZ2V4KSk7Ci0gICAgbV9yZWdFeHBTdHJ1Y3R1cmUuc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgUmVnRXhwT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX3JlZ0V4cFByb3RvdHlwZS5nZXQoKSkpOworICAgIG1f
cmVnRXhwUHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBSZWdFeHBQcm90b3R5cGU6OmNy
ZWF0ZShleGVjLCB0aGlzLCBSZWdFeHBQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52
bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSksIGVtcHR5UmVnZXgpKTsKKyAgICBt
X3JlZ0V4cFN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgUmVnRXhwT2JqZWN0OjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9yZWdFeHBQcm90b3R5cGUuZ2V0KCkpKTsK
IAotICAgIG1fZXJyb3JQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgRXJy
b3JQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBFcnJvclByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkp
KSk7Ci0gICAgbV9lcnJvclN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBF
cnJvckluc3RhbmNlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBt
X2Vycm9yUHJvdG90eXBlLmdldCgpKSk7CisgICAgbV9lcnJvclByb3RvdHlwZS5zZXQoZXhlYy0+
dm0oKSwgdGhpcywgRXJyb3JQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBFcnJvclByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBl
LmdldCgpKSkpOworICAgIG1fZXJyb3JTdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEVy
cm9ySW5zdGFuY2U6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Vycm9yUHJv
dG90eXBlLmdldCgpKSk7CiAKICAgICAvLyBDb25zdHJ1Y3RvcnMKIAotICAgIEpTQ2VsbCogb2Jq
ZWN0Q29uc3RydWN0b3IgPSBPYmplY3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIE9i
amVjdENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpOwot
ICAgIEpTQ2VsbCogZnVuY3Rpb25Db25zdHJ1Y3RvciA9IEZ1bmN0aW9uQ29uc3RydWN0b3I6OmNy
ZWF0ZShleGVjLCB0aGlzLCBGdW5jdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9mdW5j
dGlvblByb3RvdHlwZS5nZXQoKSk7Ci0gICAgSlNDZWxsKiBhcnJheUNvbnN0cnVjdG9yID0gQXJy
YXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEFycmF5Q29uc3RydWN0b3I6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUu
Z2V0KCkpLCBtX2FycmF5UHJvdG90eXBlLmdldCgpKTsKLSAgICBKU0NlbGwqIHN0cmluZ0NvbnN0
cnVjdG9yID0gU3RyaW5nQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBTdHJpbmdDb25z
dHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9mdW5j
dGlvblByb3RvdHlwZS5nZXQoKSksIG1fc3RyaW5nUHJvdG90eXBlLmdldCgpKTsKLSAgICBKU0Nl
bGwqIGJvb2xlYW5Db25zdHJ1Y3RvciA9IEJvb2xlYW5Db25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMs
IHRoaXMsIEJvb2xlYW5Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fYm9vbGVhblByb3RvdHlw
ZS5nZXQoKSk7Ci0gICAgSlNDZWxsKiBudW1iZXJDb25zdHJ1Y3RvciA9IE51bWJlckNvbnN0cnVj
dG9yOjpjcmVhdGUoZXhlYywgdGhpcywgTnVtYmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBt
X251bWJlclByb3RvdHlwZS5nZXQoKSk7Ci0gICAgSlNDZWxsKiBkYXRlQ29uc3RydWN0b3IgPSBE
YXRlQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBEYXRlQ29uc3RydWN0b3I6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUu
Z2V0KCkpLCBtX2RhdGVQcm90b3R5cGUuZ2V0KCkpOwotCi0gICAgbV9yZWdFeHBDb25zdHJ1Y3Rv
ci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBSZWdFeHBDb25zdHJ1Y3Rvcjo6Y3JlYXRl
KGV4ZWMsIHRoaXMsIFJlZ0V4cENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9yZWdFeHBQcm90
b3R5cGUuZ2V0KCkpKTsKLQotICAgIG1fZXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCBFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgRXJyb3JD
b25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9m
dW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fZXJyb3JQcm90b3R5cGUuZ2V0KCkpKTsKLQotICAg
IFN0cnVjdHVyZSogbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUgPSBOYXRpdmVFcnJvclBy
b3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9lcnJv
clByb3RvdHlwZS5nZXQoKSk7Ci0gICAgU3RydWN0dXJlKiBuYXRpdmVFcnJvclN0cnVjdHVyZSA9
IE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpOwotICAgIG1fZXZhbEVycm9yQ29u
c3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgTmF0aXZlRXJyb3JDb25zdHJ1
Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBuYXRpdmVFcnJv
clByb3RvdHlwZVN0cnVjdHVyZSwgQVNDSUlMaXRlcmFsKCJFdmFsRXJyb3IiKSkpOwotICAgIG1f
cmFuZ2VFcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE5hdGl2
ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVy
ZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsIEFTQ0lJTGl0ZXJhbCgiUmFuZ2VFcnJv
ciIpKSk7Ci0gICAgbV9yZWZlcmVuY2VFcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMsIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBu
YXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsIEFTQ0lJ
TGl0ZXJhbCgiUmVmZXJlbmNlRXJyb3IiKSkpOwotICAgIG1fc3ludGF4RXJyb3JDb25zdHJ1Y3Rv
ci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpj
cmVhdGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90
eXBlU3RydWN0dXJlLCBBU0NJSUxpdGVyYWwoIlN5bnRheEVycm9yIikpKTsKLSAgICBtX3R5cGVF
cnJvckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE5hdGl2ZUVycm9y
Q29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0
aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsIEFTQ0lJTGl0ZXJhbCgiVHlwZUVycm9yIikpKTsK
LSAgICBtX1VSSUVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3Ry
dWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgQVNDSUlMaXRlcmFsKCJVUklF
cnJvciIpKSk7Ci0KLSAgICBtX29iamVjdFByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0
b3IsIG9iamVjdENvbnN0cnVjdG9yLCBEb250RW51bSk7Ci0gICAgbV9mdW5jdGlvblByb3RvdHlw
ZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGZ1bmN0aW9uQ29uc3RydWN0b3IsIERvbnRFbnVt
KTsKLSAgICBtX2FycmF5UHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVj
LT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgYXJyYXlD
b25zdHJ1Y3RvciwgRG9udEVudW0pOwotICAgIG1fYm9vbGVhblByb3RvdHlwZS0+cHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuY29uc3RydWN0b3IsIGJvb2xlYW5Db25zdHJ1Y3RvciwgRG9udEVudW0pOwotICAgIG1fc3Ry
aW5nUHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRh
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvciwgc3RyaW5nQ29uc3RydWN0b3Is
IERvbnRFbnVtKTsKLSAgICBtX251bWJlclByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0
b3IsIG51bWJlckNvbnN0cnVjdG9yLCBEb250RW51bSk7Ci0gICAgbV9kYXRlUHJvdG90eXBlLT5w
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgZGF0ZUNvbnN0cnVjdG9yLCBEb250RW51bSk7Ci0gICAg
bV9yZWdFeHBQcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBtX3JlZ0V4cENvbnN0
cnVjdG9yLmdldCgpLCBEb250RW51bSk7Ci0gICAgbV9lcnJvclByb3RvdHlwZS0+cHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuY29uc3RydWN0b3IsIG1fZXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOwotCi0g
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuT2JqZWN0LCBvYmplY3RDb25zdHJ1Y3RvciwgRG9udEVudW0pOwotICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmll
cihleGVjLCAiRnVuY3Rpb24iKSwgZnVuY3Rpb25Db25zdHJ1Y3RvciwgRG9udEVudW0pOwotICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLkFycmF5LCBhcnJheUNvbnN0cnVjdG9yLCBEb250RW51bSk7Ci0gICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4
ZWMsICJCb29sZWFuIiksIGJvb2xlYW5Db25zdHJ1Y3RvciwgRG9udEVudW0pOwotICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVj
LCAiU3RyaW5nIiksIHN0cmluZ0NvbnN0cnVjdG9yLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJO
dW1iZXIiKSwgbnVtYmVyQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgIkRhdGUi
KSwgZGF0ZUNvbnN0cnVjdG9yLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJSZWdFeHAiKSwgbV9y
ZWdFeHBDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiRXJyb3IiKSwg
bV9lcnJvckNvbnN0cnVjdG9yLmdldCgpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJFdmFsRXJy
b3IiKSwgbV9ldmFsRXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOwotICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVj
LCAiUmFuZ2VFcnJvciIpLCBtX3JhbmdlRXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0p
OwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRl
bnRpZmllcihleGVjLCAiUmVmZXJlbmNlRXJyb3IiKSwgbV9yZWZlcmVuY2VFcnJvckNvbnN0cnVj
dG9yLmdldCgpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJTeW50YXhFcnJvciIpLCBtX3N5bnRh
eEVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgIlR5cGVFcnJv
ciIpLCBtX3R5cGVFcnJvckNvbnN0cnVjdG9yLmdldCgpLCBEb250RW51bSk7Ci0gICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMs
ICJVUklFcnJvciIpLCBtX1VSSUVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsKKyAg
ICBKU0NlbGwqIG9iamVjdENvbnN0cnVjdG9yID0gT2JqZWN0Q29uc3RydWN0b3I6OmNyZWF0ZShl
eGVjLCB0aGlzLCBPYmplY3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCks
IHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX29iamVjdFByb3RvdHlwZS5nZXQo
KSk7CisgICAgSlNDZWxsKiBmdW5jdGlvbkNvbnN0cnVjdG9yID0gRnVuY3Rpb25Db25zdHJ1Y3Rv
cjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEZ1bmN0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9mdW5jdGlv
blByb3RvdHlwZS5nZXQoKSk7CisgICAgSlNDZWxsKiBhcnJheUNvbnN0cnVjdG9yID0gQXJyYXlD
b25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9h
cnJheVByb3RvdHlwZS5nZXQoKSk7CisgICAgSlNDZWxsKiBzdHJpbmdDb25zdHJ1Y3RvciA9IFN0
cmluZ0NvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgU3RyaW5nQ29uc3RydWN0b3I6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgp
KSwgbV9zdHJpbmdQcm90b3R5cGUuZ2V0KCkpOworICAgIEpTQ2VsbCogYm9vbGVhbkNvbnN0cnVj
dG9yID0gQm9vbGVhbkNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgQm9vbGVhbkNvbnN0
cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3Rv
dHlwZS5nZXQoKSksIG1fYm9vbGVhblByb3RvdHlwZS5nZXQoKSk7CisgICAgSlNDZWxsKiBudW1i
ZXJDb25zdHJ1Y3RvciA9IE51bWJlckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgTnVt
YmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0
aW9uUHJvdG90eXBlLmdldCgpKSwgbV9udW1iZXJQcm90b3R5cGUuZ2V0KCkpOworICAgIEpTQ2Vs
bCogZGF0ZUNvbnN0cnVjdG9yID0gRGF0ZUNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywg
RGF0ZUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5j
dGlvblByb3RvdHlwZS5nZXQoKSksIG1fZGF0ZVByb3RvdHlwZS5nZXQoKSk7CisKKyAgICBtX3Jl
Z0V4cENvbnN0cnVjdG9yLnNldChleGVjLT52bSgpLCB0aGlzLCBSZWdFeHBDb25zdHJ1Y3Rvcjo6
Y3JlYXRlKGV4ZWMsIHRoaXMsIFJlZ0V4cENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fcmVnRXhwUHJvdG90
eXBlLmdldCgpKSk7CisKKyAgICBtX2Vycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPnZtKCksIHRo
aXMsIEVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBFcnJvckNvbnN0cnVjdG9y
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5n
ZXQoKSksIG1fZXJyb3JQcm90b3R5cGUuZ2V0KCkpKTsKKworICAgIFN0cnVjdHVyZSogbmF0aXZl
RXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUgPSBOYXRpdmVFcnJvclByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZXJyb3JQcm90b3R5cGUuZ2V0KCkpOworICAgIFN0
cnVjdHVyZSogbmF0aXZlRXJyb3JTdHJ1Y3R1cmUgPSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQo
KSk7CisgICAgbV9ldmFsRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+dm0oKSwgdGhpcywgTmF0
aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0
dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgQVNDSUlMaXRlcmFsKCJFdmFsRXJy
b3IiKSkpOworICAgIG1fcmFuZ2VFcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT52bSgpLCB0aGlz
LCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JT
dHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCBBU0NJSUxpdGVyYWwoIlJh
bmdlRXJyb3IiKSkpOworICAgIG1fcmVmZXJlbmNlRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+
dm0oKSwgdGhpcywgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5h
dGl2ZUVycm9yU3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgQVNDSUlM
aXRlcmFsKCJSZWZlcmVuY2VFcnJvciIpKSk7CisgICAgbV9zeW50YXhFcnJvckNvbnN0cnVjdG9y
LnNldChleGVjLT52bSgpLCB0aGlzLCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhl
YywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0
dXJlLCBBU0NJSUxpdGVyYWwoIlN5bnRheEVycm9yIikpKTsKKyAgICBtX3R5cGVFcnJvckNvbnN0
cnVjdG9yLnNldChleGVjLT52bSgpLCB0aGlzLCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVh
dGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBl
U3RydWN0dXJlLCBBU0NJSUxpdGVyYWwoIlR5cGVFcnJvciIpKSk7CisgICAgbV9VUklFcnJvckNv
bnN0cnVjdG9yLnNldChleGVjLT52bSgpLCB0aGlzLCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpj
cmVhdGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90
eXBlU3RydWN0dXJlLCBBU0NJSUxpdGVyYWwoIlVSSUVycm9yIikpKTsKKworICAgIG1fb2JqZWN0
UHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIG9iamVjdENvbnN0cnVjdG9yLCBEb250RW51bSk7
CisgICAgbV9mdW5jdGlvblByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhl
Yy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBmdW5jdGlvbkNvbnN0
cnVjdG9yLCBEb250RW51bSk7CisgICAgbV9hcnJheVByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9y
LCBhcnJheUNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgbV9ib29sZWFuUHJvdG90eXBlLT5w
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuY29uc3RydWN0b3IsIGJvb2xlYW5Db25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIG1fc3Ry
aW5nUHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHN0cmluZ0NvbnN0cnVjdG9yLCBEb250RW51
bSk7CisgICAgbV9udW1iZXJQcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4
ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgbnVtYmVyQ29uc3Ry
dWN0b3IsIERvbnRFbnVtKTsKKyAgICBtX2RhdGVQcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvciwg
ZGF0ZUNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgbV9yZWdFeHBQcm90b3R5cGUtPnB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5j
b25zdHJ1Y3RvciwgbV9yZWdFeHBDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOworICAgIG1f
ZXJyb3JQcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgbV9lcnJvckNvbnN0cnVjdG9yLmdldCgp
LCBEb250RW51bSk7CisKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgp
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuT2JqZWN0LCBvYmplY3RDb25zdHJ1Y3RvciwgRG9udEVu
dW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZp
ZXIoZXhlYywgIkZ1bmN0aW9uIiksIGZ1bmN0aW9uQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuQXJyYXksIGFycmF5Q29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJCb29sZWFuIiks
IGJvb2xlYW5Db25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgIlN0cmluZyIpLCBzdHJpbmdDb25z
dHJ1Y3RvciwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMt
PnZtKCksIElkZW50aWZpZXIoZXhlYywgIk51bWJlciIpLCBudW1iZXJDb25zdHJ1Y3RvciwgRG9u
dEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElkZW50
aWZpZXIoZXhlYywgIkRhdGUiKSwgZGF0ZUNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiUmVn
RXhwIiksIG1fcmVnRXhwQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsKKyAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJFcnJvciIp
LCBtX2Vycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJFdmFsRXJyb3IiKSwg
bV9ldmFsRXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgIlJhbmdlRXJyb3Ii
KSwgbV9yYW5nZUVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsKKyAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJSZWZlcmVu
Y2VFcnJvciIpLCBtX3JlZmVyZW5jZUVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsK
KyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4
ZWMsICJTeW50YXhFcnJvciIpLCBtX3N5bnRheEVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRF
bnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlm
aWVyKGV4ZWMsICJUeXBlRXJyb3IiKSwgbV90eXBlRXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9u
dEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElkZW50
aWZpZXIoZXhlYywgIlVSSUVycm9yIiksIG1fVVJJRXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9u
dEVudW0pOwogCi0gICAgbV9ldmFsRnVuY3Rpb24uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5ldmFsLnN0cmluZygpLCBnbG9iYWxGdW5jRXZhbCkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmV2YWws
IG1fZXZhbEZ1bmN0aW9uLmdldCgpLCBEb250RW51bSk7CisgICAgbV9ldmFsRnVuY3Rpb24uc2V0
KGV4ZWMtPnZtKCksIHRoaXMsIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCB0aGlzLCAxLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuZXZhbC5zdHJpbmcoKSwgZ2xvYmFsRnVuY0V2YWwpKTsKKyAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuZXZhbCwgbV9ldmFsRnVuY3Rpb24uZ2V0KCksIERvbnRFbnVtKTsKIAotICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAi
SlNPTiIpLCBKU09OT2JqZWN0OjpjcmVhdGUoZXhlYywgdGhpcywgSlNPTk9iamVjdDo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0
KCkpKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmds
b2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiTWF0aCIpLCBNYXRoT2JqZWN0OjpjcmVhdGUo
ZXhlYywgdGhpcywgTWF0aE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0pOworICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgIkpTT04i
KSwgSlNPTk9iamVjdDo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTT05PYmplY3Q6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpLCBEb250RW51
bSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmll
cihleGVjLCAiTWF0aCIpLCBNYXRoT2JqZWN0OjpjcmVhdGUoZXhlYywgdGhpcywgTWF0aE9iamVj
dDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdl
dCgpKSksIERvbnRFbnVtKTsKIAogICAgIEdsb2JhbFByb3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxz
W10gPSB7CiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhJZGVudGlmaWVyKGV4ZWMsICJOYU4i
KSwganNOYU4oKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLApAQCAtMzMxLDE1
ICszMzEsMTUgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAg
IG1fc3BlY2lhbFBvaW50ZXJzW1NwZWNpYWw6OkFycmF5Q29uc3RydWN0b3JdID0gYXJyYXlDb25z
dHJ1Y3RvcjsKIAogICAgIGlmIChtX2V4cGVyaW1lbnRzRW5hYmxlZCkgewotICAgICAgICBOYW1l
UHJvdG90eXBlKiBwcml2YXRlTmFtZVByb3RvdHlwZSA9IE5hbWVQcm90b3R5cGU6OmNyZWF0ZShl
eGVjLCBOYW1lUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOwotICAgICAgICBtX3ByaXZhdGVOYW1lU3Ry
dWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE5hbWVJbnN0YW5jZTo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgcHJpdmF0ZU5hbWVQcm90b3R5cGUp
KTsKKyAgICAgICAgTmFtZVByb3RvdHlwZSogcHJpdmF0ZU5hbWVQcm90b3R5cGUgPSBOYW1lUHJv
dG90eXBlOjpjcmVhdGUoZXhlYywgTmFtZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
PnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CisgICAgICAgIG1fcHJpdmF0
ZU5hbWVTdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIE5hbWVJbnN0YW5jZTo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIHByaXZhdGVOYW1lUHJvdG90eXBlKSk7CiAKLSAg
ICAgICAgSlNDZWxsKiBwcml2YXRlTmFtZUNvbnN0cnVjdG9yID0gTmFtZUNvbnN0cnVjdG9yOjpj
cmVhdGUoZXhlYywgdGhpcywgTmFtZUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgcHJpdmF0ZU5h
bWVQcm90b3R5cGUpOwotICAgICAgICBwcml2YXRlTmFtZVByb3RvdHlwZS0+cHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
Y29uc3RydWN0b3IsIHByaXZhdGVOYW1lQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKLSAgICAgICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVy
KGV4ZWMsICJOYW1lIiksIHByaXZhdGVOYW1lQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICAg
ICAgSlNDZWxsKiBwcml2YXRlTmFtZUNvbnN0cnVjdG9yID0gTmFtZUNvbnN0cnVjdG9yOjpjcmVh
dGUoZXhlYywgdGhpcywgTmFtZUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0o
KSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIHByaXZhdGVOYW1lUHJvdG90eXBl
KTsKKyAgICAgICAgcHJpdmF0ZU5hbWVQcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgcHJpdmF0
ZU5hbWVDb25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgICAgICBwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJOYW1lIiksIHByaXZhdGVOYW1l
Q29uc3RydWN0b3IsIERvbnRFbnVtKTsKICAgICB9CiAKLSAgICByZXNldFByb3RvdHlwZShleGVj
LT5nbG9iYWxEYXRhKCksIHByb3RvdHlwZSk7CisgICAgcmVzZXRQcm90b3R5cGUoZXhlYy0+dm0o
KSwgcHJvdG90eXBlKTsKIH0KIAogLy8gUHJpdmF0ZSBuYW1lc3BhY2UgZm9yIGhlbHBlcnMgZm9y
IEpTR2xvYmFsT2JqZWN0OjpoYXZlQUJhZFRpbWUoKQpAQCAtNDA1LDkgKzQwNSw5IEBAIHZvaWQg
T2JqZWN0c1dpdGhCcm9rZW5JbmRleGluZ0ZpbmRlcjo6b3AKIAogfSAvLyBlbmQgcHJpdmF0ZSBu
YW1lc3BhY2UgZm9yIGhlbHBlcnMgZm9yIEpTR2xvYmFsT2JqZWN0OjpoYXZlQUJhZFRpbWUoKQog
Ci12b2lkIEpTR2xvYmFsT2JqZWN0OjpoYXZlQUJhZFRpbWUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQordm9pZCBKU0dsb2JhbE9iamVjdDo6aGF2ZUFCYWRUaW1lKFZNJiB2bSkKIHsKLSAgICBB
U1NFUlQoJmdsb2JhbERhdGEgPT0gJnRoaXMtPmdsb2JhbERhdGEoKSk7CisgICAgQVNTRVJUKCZ2
bSA9PSAmdGhpcy0+dm0oKSk7CiAgICAgCiAgICAgaWYgKGlzSGF2aW5nQUJhZFRpbWUoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNDIxLDE4ICs0MjEsMTggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6
aGF2ZUFCYWRUaW1lKEpTR2xvYgogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFsbCBKU0FycmF5IGFs
bG9jYXRpb25zIHRoYXQgbG9hZCB0aGUgYXBwcm9wcmlhdGUgc3RydWN0dXJlIGZyb20KICAgICAv
LyB0aGlzIG9iamVjdCBub3cgbG9hZCBhIHN0cnVjdHVyZSB0aGF0IHVzZXMgU2xvd1B1dC4KICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTnVtYmVyT2ZJbmRleGluZ1NoYXBlczsgKytpKQot
ICAgICAgICBtX2FycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdTaGFwZUR1cmluZ0FsbG9jYXRpb25b
aV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIG9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGlu
Z1R5cGUoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkpOworICAgICAgICBtX2FycmF5U3Ry
dWN0dXJlRm9ySW5kZXhpbmdTaGFwZUR1cmluZ0FsbG9jYXRpb25baV0uc2V0KHZtLCB0aGlzLCBv
cmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlKEFycmF5V2l0aFNsb3dQdXRBcnJh
eVN0b3JhZ2UpKTsKICAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbGwgb2JqZWN0cyB0aGF0
IGhhdmUgaW5kZXhlZCBzdG9yYWdlIHN3aXRjaCB0byB0aGUgc2xvdyBraW5kIG9mCiAgICAgLy8g
aW5kZXhlZCBzdG9yYWdlLgogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGZvdW5kT2JqZWN0czsg
Ly8gVXNlIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGJlY2F1c2Ugc3dpdGNoVG9TbG93UHV0QXJyYXlT
dG9yYWdlKCkgbWF5IEdDLgogICAgIE9iamVjdHNXaXRoQnJva2VuSW5kZXhpbmdGaW5kZXIgZmlu
ZGVyKGZvdW5kT2JqZWN0cywgdGhpcyk7Ci0gICAgZ2xvYmFsRGF0YS5oZWFwLm9iamVjdFNwYWNl
KCkuZm9yRWFjaExpdmVDZWxsKGZpbmRlcik7CisgICAgdm0uaGVhcC5vYmplY3RTcGFjZSgpLmZv
ckVhY2hMaXZlQ2VsbChmaW5kZXIpOwogICAgIHdoaWxlICghZm91bmRPYmplY3RzLmlzRW1wdHko
KSkgewogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoZm91bmRPYmplY3RzLmxh
c3QoKSk7CiAgICAgICAgIGZvdW5kT2JqZWN0cy5yZW1vdmVMYXN0KCk7CiAgICAgICAgIEFTU0VS
VChoYXNCcm9rZW5JbmRleGluZyhvYmplY3QpKTsKLSAgICAgICAgb2JqZWN0LT5zd2l0Y2hUb1Ns
b3dQdXRBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAgICAgIG9iamVjdC0+c3dpdGNoVG9T
bG93UHV0QXJyYXlTdG9yYWdlKHZtKTsKICAgICB9CiB9CiAKQEAgLTQ0OCwyMCArNDQ4LDIwIEBA
IHZvaWQgSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZVRocm93VHlwZUVycm8KIHsKICAgICBKU0Z1bmN0
aW9uKiB0aHJvd2VyID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIDAsIFN0cmluZygp
LCBnbG9iYWxGdW5jVGhyb3dUeXBlRXJyb3IpOwogICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0
dGVyID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7Ci0gICAgZ2V0dGVyU2V0dGVyLT5zZXRH
ZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aHJvd2VyKTsKLSAgICBnZXR0ZXJTZXR0ZXItPnNl
dFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIHRocm93ZXIpOwotICAgIG1fdGhyb3dUeXBlRXJy
b3JHZXR0ZXJTZXR0ZXIuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZ2V0dGVyU2V0dGVy
KTsKKyAgICBnZXR0ZXJTZXR0ZXItPnNldEdldHRlcihleGVjLT52bSgpLCB0aHJvd2VyKTsKKyAg
ICBnZXR0ZXJTZXR0ZXItPnNldFNldHRlcihleGVjLT52bSgpLCB0aHJvd2VyKTsKKyAgICBtX3Ro
cm93VHlwZUVycm9yR2V0dGVyU2V0dGVyLnNldChleGVjLT52bSgpLCB0aGlzLCBnZXR0ZXJTZXR0
ZXIpOwogfQogCiAvLyBTZXQgcHJvdG90eXBlLCBhbmQgYWxzbyBpbnNlcnQgdGhlIG9iamVjdCBw
cm90b3R5cGUgYXQgdGhlIGVuZCBvZiB0aGUgY2hhaW4uCi12b2lkIEpTR2xvYmFsT2JqZWN0Ojpy
ZXNldFByb3RvdHlwZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBl
KQordm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXRQcm90b3R5cGUoVk0mIHZtLCBKU1ZhbHVlIHBy
b3RvdHlwZSkKIHsKLSAgICBzZXRQcm90b3R5cGUoZ2xvYmFsRGF0YSwgcHJvdG90eXBlKTsKKyAg
ICBzZXRQcm90b3R5cGUodm0sIHByb3RvdHlwZSk7CiAKICAgICBKU09iamVjdCogb2xkTGFzdElu
UHJvdG90eXBlQ2hhaW4gPSBsYXN0SW5Qcm90b3R5cGVDaGFpbih0aGlzKTsKICAgICBKU09iamVj
dCogb2JqZWN0UHJvdG90eXBlID0gbV9vYmplY3RQcm90b3R5cGUuZ2V0KCk7CiAgICAgaWYgKG9s
ZExhc3RJblByb3RvdHlwZUNoYWluICE9IG9iamVjdFByb3RvdHlwZSkKLSAgICAgICAgb2xkTGFz
dEluUHJvdG90eXBlQ2hhaW4tPnNldFByb3RvdHlwZShnbG9iYWxEYXRhLCBvYmplY3RQcm90b3R5
cGUpOworICAgICAgICBvbGRMYXN0SW5Qcm90b3R5cGVDaGFpbi0+c2V0UHJvdG90eXBlKHZtLCBv
YmplY3RQcm90b3R5cGUpOwogfQogCiB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC01NTAsNyArNTUwLDcgQEAg
dm9pZCBKU0dsb2JhbE9iamVjdDo6YWRkU3RhdGljR2xvYmFscyhHbAogICAgICAgICBpbnQgaW5k
ZXggPSBzeW1ib2xUYWJsZSgpLT5zaXplKCk7CiAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgbmV3
RW50cnkoaW5kZXgsIGdsb2JhbC5hdHRyaWJ1dGVzKTsKICAgICAgICAgc3ltYm9sVGFibGUoKS0+
YWRkKGdsb2JhbC5pZGVudGlmaWVyLmltcGwoKSwgbmV3RW50cnkpOwotICAgICAgICByZWdpc3Rl
ckF0KGluZGV4KS5zZXQoZ2xvYmFsRGF0YSgpLCB0aGlzLCBnbG9iYWwudmFsdWUpOworICAgICAg
ICByZWdpc3RlckF0KGluZGV4KS5zZXQodm0oKSwgdGhpcywgZ2xvYmFsLnZhbHVlKTsKICAgICB9
CiB9CiAKQEAgLTU3NSwyNCArNTc1LDI0IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmNsZWFyUmFy
ZURhdGEoSlNDZWwKICAgICBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihjZWxsKS0+bV9yYXJlRGF0
YS5jbGVhcigpOwogfQogCi1EeW5hbWljR2xvYmFsT2JqZWN0U2NvcGU6OkR5bmFtaWNHbG9iYWxP
YmplY3RTY29wZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBkeW5h
bWljR2xvYmFsT2JqZWN0KQotICAgIDogbV9keW5hbWljR2xvYmFsT2JqZWN0U2xvdChnbG9iYWxE
YXRhLmR5bmFtaWNHbG9iYWxPYmplY3QpCitEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGU6OkR5bmFt
aWNHbG9iYWxPYmplY3RTY29wZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBkeW5hbWljR2xvYmFs
T2JqZWN0KQorICAgIDogbV9keW5hbWljR2xvYmFsT2JqZWN0U2xvdCh2bS5keW5hbWljR2xvYmFs
T2JqZWN0KQogICAgICwgbV9zYXZlZER5bmFtaWNHbG9iYWxPYmplY3QobV9keW5hbWljR2xvYmFs
T2JqZWN0U2xvdCkKIHsKICAgICBpZiAoIW1fZHluYW1pY0dsb2JhbE9iamVjdFNsb3QpIHsKICNp
ZiBFTkFCTEUoQVNTRU1CTEVSKQogICAgICAgICBpZiAoRXhlY3V0YWJsZUFsbG9jYXRvcjo6dW5k
ZXJNZW1vcnlQcmVzc3VyZSgpKQotICAgICAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLmRlbGV0ZUFs
bENvbXBpbGVkQ29kZSgpOworICAgICAgICAgICAgdm0uaGVhcC5kZWxldGVBbGxDb21waWxlZENv
ZGUoKTsKICNlbmRpZgogCiAgICAgICAgIG1fZHluYW1pY0dsb2JhbE9iamVjdFNsb3QgPSBkeW5h
bWljR2xvYmFsT2JqZWN0OwogCiAgICAgICAgIC8vIFJlc2V0IHRoZSBkYXRlIGNhY2hlIGJldHdl
ZW4gSlMgaW52b2NhdGlvbnMgdG8gZm9yY2UgdGhlIFZNCiAgICAgICAgIC8vIHRvIG9ic2VydmUg
dGltZSB6b25lIGNoYW5nZXMuCi0gICAgICAgIGdsb2JhbERhdGEucmVzZXREYXRlQ2FjaGUoKTsK
KyAgICAgICAgdm0ucmVzZXREYXRlQ2FjaGUoKTsKICAgICB9CiAgICAgLy8gQ2xlYXIgdGhlIGV4
Y2VwdGlvbiBzdGFjayBiZXR3ZWVuIGVudHJpZXMKLSAgICBnbG9iYWxEYXRhLmV4Y2VwdGlvblN0
YWNrID0gUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+KCk7CisgICAgdm0uZXhjZXB0aW9uU3Rh
Y2sgPSBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4oKTsKIH0KIAogdm9pZCBzbG93VmFsaWRh
dGVDZWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBAIC02MDcsNyArNjA3LDcgQEAg
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBKU0dsb2JhbE9iamVjdAogICAgIEpTUGFyc2VyU3Ry
aWN0bmVzcyBzdHJpY3RuZXNzID0gZXhlY3V0YWJsZS0+aXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNl
U3RyaWN0IDogSlNQYXJzZU5vcm1hbDsKICAgICBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlID0g
aGFzRGVidWdnZXIoKSA/IERlYnVnZ2VyT24gOiBEZWJ1Z2dlck9mZjsKICAgICBQcm9maWxlck1v
ZGUgcHJvZmlsZXJNb2RlID0gaGFzUHJvZmlsZXIoKSA/IFByb2ZpbGVyT24gOiBQcm9maWxlck9m
ZjsKLSAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZSA9IGdsb2JhbERh
dGEoKS5jb2RlQ2FjaGUoKS0+Z2V0UHJvZ3JhbUNvZGVCbG9jayhnbG9iYWxEYXRhKCksIGV4ZWN1
dGFibGUsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLCBzdHJpY3RuZXNzLCBkZWJ1Z2dlck1vZGUsIHBy
b2ZpbGVyTW9kZSwgZXJyb3IpOworICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogdW5saW5r
ZWRDb2RlID0gdm0oKS5jb2RlQ2FjaGUoKS0+Z2V0UHJvZ3JhbUNvZGVCbG9jayh2bSgpLCBleGVj
dXRhYmxlLCBleGVjdXRhYmxlLT5zb3VyY2UoKSwgc3RyaWN0bmVzcywgZGVidWdnZXJNb2RlLCBw
cm9maWxlck1vZGUsIGVycm9yKTsKIAogICAgIGlmIChoYXNEZWJ1Z2dlcigpKQogICAgICAgICBk
ZWJ1Z2dlcigpLT5zb3VyY2VQYXJzZWQoY2FsbEZyYW1lLCBleGVjdXRhYmxlLT5zb3VyY2UoKS5w
cm92aWRlcigpLCBlcnJvci5tX2xpbmUsIGVycm9yLm1fbWVzc2FnZSk7CkBAIC02MjYsNyArNjI2
LDcgQEAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBKU0dsb2JhbE9iamVjdDo6YwogICAgIEpTUGFy
c2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzID0gZXhlY3V0YWJsZS0+aXNTdHJpY3RNb2RlKCkgPyBK
U1BhcnNlU3RyaWN0IDogSlNQYXJzZU5vcm1hbDsKICAgICBEZWJ1Z2dlck1vZGUgZGVidWdnZXJN
b2RlID0gaGFzRGVidWdnZXIoKSA/IERlYnVnZ2VyT24gOiBEZWJ1Z2dlck9mZjsKICAgICBQcm9m
aWxlck1vZGUgcHJvZmlsZXJNb2RlID0gaGFzUHJvZmlsZXIoKSA/IFByb2ZpbGVyT24gOiBQcm9m
aWxlck9mZjsKLSAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkQ29kZSA9IGdsb2Jh
bERhdGEoKS5jb2RlQ2FjaGUoKS0+Z2V0RXZhbENvZGVCbG9jayhnbG9iYWxEYXRhKCksIHNjb3Bl
LCBleGVjdXRhYmxlLCBleGVjdXRhYmxlLT5zb3VyY2UoKSwgc3RyaWN0bmVzcywgZGVidWdnZXJN
b2RlLCBwcm9maWxlck1vZGUsIGVycm9yKTsKKyAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVu
bGlua2VkQ29kZSA9IHZtKCkuY29kZUNhY2hlKCktPmdldEV2YWxDb2RlQmxvY2sodm0oKSwgc2Nv
cGUsIGV4ZWN1dGFibGUsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLCBzdHJpY3RuZXNzLCBkZWJ1Z2dl
ck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3IpOwogCiAgICAgaWYgKGhhc0RlYnVnZ2VyKCkpCiAg
ICAgICAgIGRlYnVnZ2VyKCktPnNvdXJjZVBhcnNlZChjYWxsRnJhbWUsIGV4ZWN1dGFibGUtPnNv
dXJjZSgpLnByb3ZpZGVyKCksIGVycm9yLm1fbGluZSwgZXJyb3IubV9tZXNzYWdlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2
aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIkFycmF5
QWxsb2NhdGlvblByb2ZpbGUuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlND
bGFzc1JlZi5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAj
aW5jbHVkZSAiSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTV2Vha09i
amVjdE1hcFJlZkludGVybmFsLmgiCiAjaW5jbHVkZSAiTnVtYmVyUHJvdG90eXBlLmgiCkBAIC0x
OTUsMTEgKzE5NSwxMSBAQCBwcm90ZWN0ZWQ6CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMgSlNHbG9iYWxPYmplY3QqIGNy
ZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
IHN0YXRpYyBKU0dsb2JhbE9iamVjdCogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiAgICAgewotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHbG9iYWxPYmplY3Q+KGdsb2JhbERhdGEuaGVhcCkpIEpT
R2xvYmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgICAgIGdsb2JhbE9iamVj
dC0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgICAgIGdsb2JhbERhdGEuaGVhcC5h
ZGRGaW5hbGl6ZXIoZ2xvYmFsT2JqZWN0LCBkZXN0cm95KTsKKyAgICAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2xvYmFsT2Jq
ZWN0Pih2bS5oZWFwKSkgSlNHbG9iYWxPYmplY3Qodm0sIHN0cnVjdHVyZSk7CisgICAgICAgIGds
b2JhbE9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICB2bS5oZWFwLmFkZEZpbmFs
aXplcihnbG9iYWxPYmplY3QsIGRlc3Ryb3kpOwogICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0
OwogICAgIH0KIApAQCAtMjA5LDIwICsyMDksMjAgQEAgcHVibGljOgogICAgIGJvb2wgaGFzUHJv
ZmlsZXIoKSBjb25zdCB7IHJldHVybiBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5zdXBwb3J0
c1Byb2ZpbGluZyh0aGlzKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
ZXhwbGljaXQgSlNHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgY29uc3Qg
R2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqID0gMCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgZXhw
bGljaXQgSlNHbG9iYWxPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBHbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSogPSAwKTsKIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIHsKLSAg
ICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgICAgIHN0cnVjdHVy
ZSgpLT5zZXRHbG9iYWxPYmplY3QoZ2xvYmFsRGF0YSwgdGhpcyk7CisgICAgICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgc3RydWN0dXJlKCktPnNldEdsb2JhbE9iamVjdCh2
bSwgdGhpcyk7CiAgICAgICAgIG1fZXhwZXJpbWVudHNFbmFibGVkID0gbV9nbG9iYWxPYmplY3RN
ZXRob2RUYWJsZS0+amF2YVNjcmlwdEV4cGVyaW1lbnRzRW5hYmxlZCh0aGlzKTsKICAgICAgICAg
aW5pdCh0aGlzKTsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNPYmplY3QqIHRoaXNWYWx1ZSkKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgSlNPYmplY3QqIHRoaXNWYWx1ZSkKICAgICB7Ci0gICAgICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICBzdHJ1Y3R1cmUoKS0+c2V0R2xvYmFs
T2JqZWN0KGdsb2JhbERhdGEsIHRoaXMpOworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CisgICAgICAgIHN0cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3Qodm0sIHRoaXMpOwogICAg
ICAgICBtX2V4cGVyaW1lbnRzRW5hYmxlZCA9IG1fZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUtPmph
dmFTY3JpcHRFeHBlcmltZW50c0VuYWJsZWQodGhpcyk7CiAgICAgICAgIGluaXQodGhpc1ZhbHVl
KTsKICAgICB9CkBAIC0zNDQsNyArMzQ0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9o
YXZpbmdBQmFkVGltZVdhdGNocG9pbnQtPmhhc0JlZW5JbnZhbGlkYXRlZCgpOwogICAgIH0KICAg
ICAgICAgCi0gICAgdm9pZCBoYXZlQUJhZFRpbWUoSlNHbG9iYWxEYXRhJik7CisgICAgdm9pZCBo
YXZlQUJhZFRpbWUoVk0mKTsKICAgICAgICAgCiAgICAgYm9vbCBhcnJheVByb3RvdHlwZUNoYWlu
SXNTYW5lKCk7CiAKQEAgLTM4MCwxNCArMzgwLDE0IEBAIHB1YmxpYzoKICAgICAgICAgbV9ldmFs
RGlzYWJsZWRFcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7CiAgICAgfQogCi0gICAgdm9pZCBy
ZXNldFByb3RvdHlwZShKU0dsb2JhbERhdGEmLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisgICAgdm9p
ZCByZXNldFByb3RvdHlwZShWTSYsIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAgIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSgpIGNvbnN0IHsgcmV0dXJuICpIZWFwOjpoZWFwKHRoaXMpLT5nbG9i
YWxEYXRhKCk7IH0KKyAgICBWTSYgdm0oKSBjb25zdCB7IHJldHVybiAqSGVhcDo6aGVhcCh0aGlz
KS0+dm0oKTsgfQogICAgIEpTT2JqZWN0KiBnbG9iYWxUaGlzKCkgY29uc3Q7CiAKLSAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCAwLCBwcm90b3R5cGUsIFR5cGVJbmZvKEdsb2JhbE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgMCwgcHJvdG90eXBlLCBUeXBlSW5mbyhHbG9iYWxPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogICAgIHZvaWQgcmVnaXN0ZXJXZWFr
TWFwKE9wYXF1ZUpTV2Vha09iamVjdE1hcCogbWFwKQpAQCAtNDM0LDcgKzQzNCw3IEBAIHByb3Rl
Y3RlZDoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiB0b1Ro
aXNPYmplY3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSopOwogCi0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBzZXRHbG9iYWxUaGlzKEpTR2xvYmFsRGF0YSYsIEpTT2JqZWN0KiBnbG9i
YWxUaGlzKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldEdsb2JhbFRoaXMoVk0mLCBK
U09iamVjdCogZ2xvYmFsVGhpcyk7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTQ3OCwxMyArNDc4LDEzIEBAIGlubGluZSBKU0dsb2JhbE9i
amVjdCogRXhlY1N0YXRlOjpkeW5hbWkKIAogICAgIC8vIEZvciBhbnkgRXhlY1N0YXRlIHRoYXQn
cyBub3QgYSBnbG9iYWxFeGVjLCB0aGUgCiAgICAgLy8gZHluYW1pYyBnbG9iYWwgb2JqZWN0IG11
c3QgYmUgc2V0IHNpbmNlIGNvZGUgaXMgcnVubmluZwotICAgIEFTU0VSVChnbG9iYWxEYXRhKCku
ZHluYW1pY0dsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIGdsb2JhbERhdGEoKS5keW5hbWljR2xv
YmFsT2JqZWN0OworICAgIEFTU0VSVCh2bSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOworICAgIHJl
dHVybiB2bSgpLmR5bmFtaWNHbG9iYWxPYmplY3Q7CiB9CiAKIGlubGluZSBKU0FycmF5KiBjb25z
dHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSog
cHJvZmlsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5pdGlhbExl
bmd0aCA9IDApCiB7Ci0gICAgcmV0dXJuIEFycmF5QWxsb2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxh
c3RBbGxvY2F0aW9uRm9yKHByb2ZpbGUsIEpTQXJyYXk6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRh
KCksIGluaXRpYWxMZW5ndGggPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCA/IGdsb2JhbE9iamVj
dC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0
aEFycmF5U3RvcmFnZSkgOiBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1
cmluZ0FsbG9jYXRpb24ocHJvZmlsZSksIGluaXRpYWxMZW5ndGgpKTsKKyAgICByZXR1cm4gQXJy
YXlBbGxvY2F0aW9uUHJvZmlsZTo6dXBkYXRlTGFzdEFsbG9jYXRpb25Gb3IocHJvZmlsZSwgSlNB
cnJheTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGluaXRpYWxMZW5ndGggPj0gTUlOX1NQQVJTRV9BUlJB
WV9JTkRFWCA/IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJp
bmdBbGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3RvcmFnZSkgOiBnbG9iYWxPYmplY3QtPmFycmF5
U3RydWN0dXJlRm9yUHJvZmlsZUR1cmluZ0FsbG9jYXRpb24ocHJvZmlsZSksIGluaXRpYWxMZW5n
dGgpKTsKIH0KIAogaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlY1N0YXRl
KiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCB1bnNpZ25lZCBpbml0aWFs
TGVuZ3RoID0gMCkKQEAgLTUxNSw3ICs1MTUsNyBAQCBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0
QXJyYXkoRXhlY1N0YXRlCiBjbGFzcyBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSk7CiBwdWJsaWM6Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlKEpTR2xvYmFsRGF0
YSYsIEpTR2xvYmFsT2JqZWN0Kik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgRHluYW1pY0dsb2Jh
bE9iamVjdFNjb3BlKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKIAogICAgIH5EeW5hbWljR2xvYmFs
T2JqZWN0U2NvcGUoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDE0
ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVu
Y3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzM2LDcgKzczNiw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1AKICAgICBpZiAoIXRoaXNPYmplY3QtPmlzRXh0
ZW5zaWJsZSgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKTsKIAotICAg
IGlmICghdGhpc09iamVjdC0+c2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlY2soZXhlYy0+Z2xvYmFs
RGF0YSgpLCB2YWx1ZSkpCisgICAgaWYgKCF0aGlzT2JqZWN0LT5zZXRQcm90b3R5cGVXaXRoQ3lj
bGVDaGVjayhleGVjLT52bSgpLCB2YWx1ZSkpCiAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3Jl
YXRlRXJyb3IoZXhlYywgImN5Y2xpYyBfX3Byb3RvX18gdmFsdWUiKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNMb2NrLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNDAgKzUx
LDQwIEBAIHZvaWQgR2xvYmFsSlNMb2NrOjppbml0aWFsaXplKCkKIH0KIAogSlNMb2NrSG9sZGVy
OjpKU0xvY2tIb2xkZXIoRXhlY1N0YXRlKiBleGVjKQotICAgIDogbV9nbG9iYWxEYXRhKCZleGVj
LT5nbG9iYWxEYXRhKCkpCisgICAgOiBtX3ZtKCZleGVjLT52bSgpKQogewogICAgIGluaXQoKTsK
IH0KIAotSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
KQotICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCitKU0xvY2tIb2xkZXI6OkpTTG9ja0hv
bGRlcihWTSogdm0pCisgICAgOiBtX3ZtKHZtKQogewogICAgIGluaXQoKTsKIH0KIAotSlNMb2Nr
SG9sZGVyOjpKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAgIDogbV9n
bG9iYWxEYXRhKCZnbG9iYWxEYXRhKQorSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoVk0mIHZt
KQorICAgIDogbV92bSgmdm0pCiB7CiAgICAgaW5pdCgpOwogfQogCiB2b2lkIEpTTG9ja0hvbGRl
cjo6aW5pdCgpCiB7Ci0gICAgbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkubG9jaygpOworICAgIG1f
dm0tPmFwaUxvY2soKS5sb2NrKCk7CiB9CiAKIEpTTG9ja0hvbGRlcjo6fkpTTG9ja0hvbGRlcigp
CiB7Ci0gICAgUmVmUHRyPEpTTG9jaz4gYXBpTG9jaygmbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkp
OwotICAgIG1fZ2xvYmFsRGF0YS5jbGVhcigpOworICAgIFJlZlB0cjxKU0xvY2s+IGFwaUxvY2so
Jm1fdm0tPmFwaUxvY2soKSk7CisgICAgbV92bS5jbGVhcigpOwogICAgIGFwaUxvY2stPnVubG9j
aygpOwogfQogCi1KU0xvY2s6OkpTTG9jayhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitKU0xv
Y2s6OkpTTG9jayhWTSogdm0pCiAgICAgOiBtX293bmVyVGhyZWFkKDApCiAgICAgLCBtX2xvY2tD
b3VudCgwKQogICAgICwgbV9sb2NrRHJvcERlcHRoKDApCi0gICAgLCBtX2dsb2JhbERhdGEoZ2xv
YmFsRGF0YSkKKyAgICAsIG1fdm0odm0pCiB7CiAgICAgbV9zcGluTG9jay5Jbml0KCk7CiB9CkBA
IC05MywxMCArOTMsMTAgQEAgSlNMb2NrOjp+SlNMb2NrKCkKIHsKIH0KIAotdm9pZCBKU0xvY2s6
OndpbGxEZXN0cm95R2xvYmFsRGF0YShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCit2b2lkIEpT
TG9jazo6d2lsbERlc3Ryb3lHbG9iYWxEYXRhKFZNKiB2bSkKIHsKLSAgICBBU1NFUlRfVU5VU0VE
KGdsb2JhbERhdGEsIG1fZ2xvYmFsRGF0YSA9PSBnbG9iYWxEYXRhKTsKLSAgICBtX2dsb2JhbERh
dGEgPSAwOworICAgIEFTU0VSVF9VTlVTRUQodm0sIG1fdm0gPT0gdm0pOworICAgIG1fdm0gPSAw
OwogfQogCiB2b2lkIEpTTG9jazo6bG9jaygpCkBAIC0xMzMsMTIgKzEzMywxMiBAQCB2b2lkIEpT
TG9jazo6dW5sb2NrKCkKIAogdm9pZCBKU0xvY2s6OmxvY2soRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5hcGlMb2NrKCkubG9jaygpOworICAgIGV4ZWMtPnZtKCku
YXBpTG9jaygpLmxvY2soKTsKIH0KIAogdm9pZCBKU0xvY2s6OnVubG9jayhFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmFwaUxvY2soKS51bmxvY2soKTsKKyAgICBl
eGVjLT52bSgpLmFwaUxvY2soKS51bmxvY2soKTsKIH0KIAogYm9vbCBKU0xvY2s6OmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdMb2NrKCkKQEAgLTIxNSwyMSArMjE1LDIxIEBAIHZvaWQgSlNMb2NrOjpn
cmFiQWxsTG9ja3ModW5zaWduZWQgbG9ja0MKIAogSlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BB
bGxMb2NrcyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgOiBtX2xvY2tDb3VudCgwKQotICAgICwgbV9n
bG9iYWxEYXRhKCZleGVjLT5nbG9iYWxEYXRhKCkpCisgICAgLCBtX3ZtKCZleGVjLT52bSgpKQog
ewotICAgIG1fbG9ja0NvdW50ID0gbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuZHJvcEFsbExvY2tz
KCk7CisgICAgbV9sb2NrQ291bnQgPSBtX3ZtLT5hcGlMb2NrKCkuZHJvcEFsbExvY2tzKCk7CiB9
CiAKLUpTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhKQorSlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcyhWTSogdm0pCiAgICAg
OiBtX2xvY2tDb3VudCgwKQotICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgLCBt
X3ZtKHZtKQogewotICAgIG1fbG9ja0NvdW50ID0gbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuZHJv
cEFsbExvY2tzKCk7CisgICAgbV9sb2NrQ291bnQgPSBtX3ZtLT5hcGlMb2NrKCkuZHJvcEFsbExv
Y2tzKCk7CiB9CiAKIEpTTG9jazo6RHJvcEFsbExvY2tzOjp+RHJvcEFsbExvY2tzKCkKIHsKLSAg
ICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5ncmFiQWxsTG9ja3MobV9sb2NrQ291bnQpOworICAg
IG1fdm0tPmFwaUxvY2soKS5ncmFiQWxsTG9ja3MobV9sb2NrQ291bnQpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCShy
ZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtNDksMTAgKzQ5LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IC8vIHRocmVhZCBhY3F1aXJlZCBpdCB0byBiZWdpbiB3aXRoLgogCiAgICAgY2xhc3MgRXhlY1N0
YXRlOwotICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKKyAgICBjbGFzcyBWTTsKIAogICAgIC8vIFRo
aXMgY2xhc3MgaXMgdXNlZCB0byBwcm90ZWN0IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgbGVn
YWN5IHNpbmdsZSAKLSAgICAvLyBzaGFyZWQgSlNHbG9iYWxEYXRhLgorICAgIC8vIHNoYXJlZCBW
TS4KICAgICBjbGFzcyBHbG9iYWxKU0xvY2sgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShHbG9iYWxKU0xvY2spOwogICAgIHB1YmxpYzoKQEAgLTY2LDIxICs2NiwyMSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgIGNsYXNzIEpTTG9ja0hvbGRlciB7CiAgICAgcHVibGljOgotICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhKik7Ci0gICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIEpTTG9ja0hvbGRlcihKU0dsb2JhbERhdGEmKTsKKyAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgSlNMb2NrSG9sZGVyKFZNKik7CisgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIEpTTG9ja0hvbGRlcihWTSYpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0xv
Y2tIb2xkZXIoRXhlY1N0YXRlKik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTTG9j
a0hvbGRlcigpOwogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgaW5pdCgpOwogCi0gICAgICAg
IFJlZlB0cjxKU0dsb2JhbERhdGE+IG1fZ2xvYmFsRGF0YTsKKyAgICAgICAgUmVmUHRyPFZNPiBt
X3ZtOwogICAgIH07CiAKICAgICBjbGFzcyBKU0xvY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8SlNMb2NrPiB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEpTTG9jayk7CiAg
ICAgcHVibGljOgotICAgICAgICBKU0xvY2soSlNHbG9iYWxEYXRhKik7CisgICAgICAgIEpTTG9j
ayhWTSopOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB+SlNMb2NrKCk7CiAKICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBsb2NrKCk7CkBAIC04OCwxMCArODgsMTAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIHZvaWQgbG9jayhFeGVjU3RhdGUqKTsKICAgICAg
ICAgc3RhdGljIHZvaWQgdW5sb2NrKEV4ZWNTdGF0ZSopOwotICAgICAgICBzdGF0aWMgdm9pZCBs
b2NrKEpTR2xvYmFsRGF0YSYpOwotICAgICAgICBzdGF0aWMgdm9pZCB1bmxvY2soSlNHbG9iYWxE
YXRhJik7CisgICAgICAgIHN0YXRpYyB2b2lkIGxvY2soVk0mKTsKKyAgICAgICAgc3RhdGljIHZv
aWQgdW5sb2NrKFZNJik7CiAKLSAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKCkgeyBy
ZXR1cm4gbV9nbG9iYWxEYXRhOyB9CisgICAgICAgIFZNKiB2bSgpIHsgcmV0dXJuIG1fdm07IH0K
IAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdM
b2NrKCk7CiAKQEAgLTk5LDE4ICs5OSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5z
aWduZWQgZHJvcEFsbExvY2tzVW5jb25kaXRpb25hbGx5KCk7CiAgICAgICAgIHZvaWQgZ3JhYkFs
bExvY2tzKHVuc2lnbmVkIGxvY2tDb3VudCk7CiAKLSAgICAgICAgdm9pZCB3aWxsRGVzdHJveUds
b2JhbERhdGEoSlNHbG9iYWxEYXRhKik7CisgICAgICAgIHZvaWQgd2lsbERlc3Ryb3lHbG9iYWxE
YXRhKFZNKik7CiAKICAgICAgICAgY2xhc3MgRHJvcEFsbExvY2tzIHsKICAgICAgICAgICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKERyb3BBbGxMb2Nrcyk7CiAgICAgICAgIHB1YmxpYzoKICAgICAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIERyb3BBbGxMb2NrcyhFeGVjU3RhdGUqIGV4ZWMpOwot
ICAgICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgRHJvcEFsbExvY2tzKEpTR2xvYmFsRGF0YSop
OworICAgICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgRHJvcEFsbExvY2tzKFZNKik7CiAgICAg
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB+RHJvcEFsbExvY2tzKCk7CiAgICAgICAgICAgICAK
ICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIGludHB0cl90IG1fbG9ja0NvdW50OwotICAg
ICAgICAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gbV9nbG9iYWxEYXRhOworICAgICAgICAgICAg
UmVmUHRyPFZNPiBtX3ZtOwogICAgICAgICB9OwogCiAgICAgcHJpdmF0ZToKQEAgLTExOSw3ICsx
MTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX293bmVy
VGhyZWFkOwogICAgICAgICBpbnRwdHJfdCBtX2xvY2tDb3VudDsKICAgICAgICAgdW5zaWduZWQg
bV9sb2NrRHJvcERlcHRoOwotICAgICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKKyAg
ICAgICAgVk0qIG1fdm07CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaAkocmV2aXNpb24gMTQ4NjM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNTYsMTUgKzU2LDE1IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKE5hbWVTY29wZU9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7IH0KKyAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvKSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90bywgVHlwZUluZm8oTmFtZVNjb3BlT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAm
c19pbmZvKTsgfQogCiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKIHByb3Rl
Y3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgaWRlbnRpZmllciwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykK
ICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7
Ci0gICAgICAgIG1fcmVnaXN0ZXJTdG9yZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2
YWx1ZSk7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOworICAgICAg
ICBtX3JlZ2lzdGVyU3RvcmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIHZhbHVlKTsKICAgICAgICAg
c3ltYm9sVGFibGUoKS0+YWRkKGlkZW50aWZpZXIuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KC0x
LCBhdHRyaWJ1dGVzKSk7CiAgICAgfQogCkBAIC03Myw3ICs3Myw3IEBAIHByb3RlY3RlZDoKIHBy
aXZhdGU6CiAgICAgSlNOYW1lU2NvcGUoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBuZXh0KQog
ICAgICAgICA6IEJhc2UoCi0gICAgICAgICAgICBleGVjLT5nbG9iYWxEYXRhKCksCisgICAgICAg
ICAgICBleGVjLT52bSgpLAogICAgICAgICAgICAgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5uYW1lU2NvcGVTdHJ1Y3R1cmUoKSwKICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8UmVn
aXN0ZXIqPigmbV9yZWdpc3RlclN0b3JlICsgMSksCiAgICAgICAgICAgICBuZXh0CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5oCShyZXZpc2lv
biAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
Y2xhc3MgSlNOb3RBbk9iamVjdCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICBwcml2
YXRlOgogICAgICAgICBKU05vdEFuT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKLSAgICAgICAgICAg
IDogSlNOb25GaW5hbE9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmdsb2JhbERhdGEo
KS5ub3RBbk9iamVjdFN0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgICAgIDogSlNOb25GaW5hbE9i
amVjdChleGVjLT52bSgpLCBleGVjLT52bSgpLm5vdEFuT2JqZWN0U3RydWN0dXJlLmdldCgpKQog
ICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC00OSwxMyArNDksMTMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBKU05vdEFuT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRl
KiBleGVjKQogICAgICAgICB7CiAgICAgICAgICAgICBKU05vdEFuT2JqZWN0KiBvYmplY3QgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU05vdEFuT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkg
SlNOb3RBbk9iamVjdChleGVjKTsKLSAgICAgICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24o
ZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24o
ZXhlYy0+dm0oKSk7CiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICAgICB9CiAKLSAg
ICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2lu
Zm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNw
cAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
Tk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEzICs1NSwxMyBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09OCiBuYW1lc3BhY2UgSlNDIHsKIAogSlNPTk9i
amVjdDo6SlNPTk9iamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKLSAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT5nbG9iYWxE
YXRhKCksIHN0cnVjdHVyZSkKKyAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT52
bSgpLCBzdHJ1Y3R1cmUpCiB7CiB9CiAKIHZvaWQgSlNPTk9iamVjdDo6ZmluaXNoQ3JlYXRpb24o
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogfQog
CkBAIC05MCw3ICs5MCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgY2xhc3MgSG9sZGVyIHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIEhvbGRlcihKU0dsb2JhbERhdGEmLCBKU09iamVjdCopOwor
ICAgICAgICBIb2xkZXIoVk0mLCBKU09iamVjdCopOwogCiAgICAgICAgIEpTT2JqZWN0KiBvYmpl
Y3QoKSBjb25zdCB7IHJldHVybiBtX29iamVjdC5nZXQoKTsgfQogCkBAIC0yMTcsNyArMjE3LDcg
QEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmaWVyKEV4ZWNTdGF0ZSogZXhlYwogICAgIGlmIChtX3Jl
cGxhY2VyLmFzT2JqZWN0KCktPmluaGVyaXRzKCZKU0FycmF5OjpzX2luZm8pKSB7CiAgICAgICAg
IG1fdXNpbmdBcnJheVJlcGxhY2VyID0gdHJ1ZTsKICAgICAgICAgSGFuZGxlPEpTT2JqZWN0PiBh
cnJheSA9IG1fcmVwbGFjZXIuYXNPYmplY3QoKTsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
YXJyYXktPmdldChleGVjLCBleGVjLT5nbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
KS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmdldChl
eGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICAg
ICAgSlNWYWx1ZSBuYW1lID0gYXJyYXktPmdldChleGVjLCBpKTsKICAgICAgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKQEAgLTI0MCwxOCArMjQwLDE4IEBAIExvY2FsPFVua25vd24+
IFN0cmluZ2lmaWVyOjpzdHJpbmdpZnkoSGEKIHsKICAgICBKU09iamVjdCogb2JqZWN0ID0gY29u
c3RydWN0RW1wdHlPYmplY3QobV9leGVjKTsKICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24o
KSkKLSAgICAgICAgcmV0dXJuIExvY2FsPFVua25vd24+KG1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBq
c051bGwoKSk7CisgICAgICAgIHJldHVybiBMb2NhbDxVbmtub3duPihtX2V4ZWMtPnZtKCksIGpz
TnVsbCgpKTsKIAotICAgIFByb3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbCBlbXB0eVByb3BlcnR5
TmFtZShtX2V4ZWMtPmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXIp
OwotICAgIG9iamVjdC0+cHV0RGlyZWN0KG1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2V4ZWMtPmds
b2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXIsIHZhbHVlLmdldCgpKTsK
KyAgICBQcm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGwgZW1wdHlQcm9wZXJ0eU5hbWUobV9leGVj
LT52bSgpLnByb3BlcnR5TmFtZXMtPmVtcHR5SWRlbnRpZmllcik7CisgICAgb2JqZWN0LT5wdXRE
aXJlY3QobV9leGVjLT52bSgpLCBtX2V4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVu
dGlmaWVyLCB2YWx1ZS5nZXQoKSk7CiAKICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICBp
ZiAoYXBwZW5kU3RyaW5naWZpZWRWYWx1ZShyZXN1bHQsIHZhbHVlLmdldCgpLCBvYmplY3QsIGVt
cHR5UHJvcGVydHlOYW1lKSAhPSBTdHJpbmdpZnlTdWNjZWVkZWQpCi0gICAgICAgIHJldHVybiBM
b2NhbDxVbmtub3duPihtX2V4ZWMtPmdsb2JhbERhdGEoKSwganNVbmRlZmluZWQoKSk7CisgICAg
ICAgIHJldHVybiBMb2NhbDxVbmtub3duPihtX2V4ZWMtPnZtKCksIGpzVW5kZWZpbmVkKCkpOwog
ICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gTG9jYWw8VW5r
bm93bj4obV9leGVjLT5nbG9iYWxEYXRhKCksIGpzTnVsbCgpKTsKKyAgICAgICAgcmV0dXJuIExv
Y2FsPFVua25vd24+KG1fZXhlYy0+dm0oKSwganNOdWxsKCkpOwogCi0gICAgcmV0dXJuIExvY2Fs
PFVua25vd24+KG1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc1N0cmluZyhtX2V4ZWMsIHJlc3VsdC50
b1N0cmluZygpKSk7CisgICAgcmV0dXJuIExvY2FsPFVua25vd24+KG1fZXhlYy0+dm0oKSwganNT
dHJpbmcobV9leGVjLCByZXN1bHQudG9TdHJpbmcoKSkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhclR5cGU+CkBAIC0zMjAsMTAgKzMyMCwxMCBAQCB2b2lkIFN0cmluZ2lmaWVyOjphcHBl
bmRRdW90ZWRTdHJpbmcoU3RyCiBpbmxpbmUgSlNWYWx1ZSBTdHJpbmdpZmllcjo6dG9KU09OKEpT
VmFsdWUgdmFsdWUsIGNvbnN0IFByb3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbCYgcHJvcGVydHlO
YW1lKQogewogICAgIEFTU0VSVCghbV9leGVjLT5oYWRFeGNlcHRpb24oKSk7Ci0gICAgaWYgKCF2
YWx1ZS5pc09iamVjdCgpIHx8ICFhc09iamVjdCh2YWx1ZSktPmhhc1Byb3BlcnR5KG1fZXhlYywg
bV9leGVjLT5nbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+dG9KU09OKSkKKyAgICBpZiAoIXZh
bHVlLmlzT2JqZWN0KCkgfHwgIWFzT2JqZWN0KHZhbHVlKS0+aGFzUHJvcGVydHkobV9leGVjLCBt
X2V4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+dG9KU09OKSkKICAgICAgICAgcmV0dXJuIHZhbHVl
OwogCi0gICAgSlNWYWx1ZSB0b0pTT05GdW5jdGlvbiA9IGFzT2JqZWN0KHZhbHVlKS0+Z2V0KG1f
ZXhlYywgbV9leGVjLT5nbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+dG9KU09OKTsKKyAgICBK
U1ZhbHVlIHRvSlNPTkZ1bmN0aW9uID0gYXNPYmplY3QodmFsdWUpLT5nZXQobV9leGVjLCBtX2V4
ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+dG9KU09OKTsKICAgICBpZiAobV9leGVjLT5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCkBAIC00MTYsNyArNDE2LDcgQEAg
U3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBTdHJpbmdpZmllcgogICAgICAgICB9CiAgICAg
fQogICAgIGJvb2wgaG9sZGVyU3RhY2tXYXNFbXB0eSA9IG1faG9sZGVyU3RhY2suaXNFbXB0eSgp
OwotICAgIG1faG9sZGVyU3RhY2suYXBwZW5kKEhvbGRlcihtX2V4ZWMtPmdsb2JhbERhdGEoKSwg
b2JqZWN0KSk7CisgICAgbV9ob2xkZXJTdGFjay5hcHBlbmQoSG9sZGVyKG1fZXhlYy0+dm0oKSwg
b2JqZWN0KSk7CiAgICAgaWYgKCFob2xkZXJTdGFja1dhc0VtcHR5KQogICAgICAgICByZXR1cm4g
U3RyaW5naWZ5U3VjY2VlZGVkOwogCkBAIC00NTksOCArNDU5LDggQEAgaW5saW5lIHZvaWQgU3Ry
aW5naWZpZXI6OnN0YXJ0TmV3TGluZShTdAogICAgIGJ1aWxkZXIuYXBwZW5kKG1faW5kZW50KTsK
IH0KIAotaW5saW5lIFN0cmluZ2lmaWVyOjpIb2xkZXI6OkhvbGRlcihKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTT2JqZWN0KiBvYmplY3QpCi0gICAgOiBtX29iamVjdChnbG9iYWxEYXRhLCBv
YmplY3QpCitpbmxpbmUgU3RyaW5naWZpZXI6OkhvbGRlcjo6SG9sZGVyKFZNJiB2bSwgSlNPYmpl
Y3QqIG9iamVjdCkKKyAgICA6IG1fb2JqZWN0KHZtLCBvYmplY3QpCiAgICAgLCBtX2lzQXJyYXko
b2JqZWN0LT5pbmhlcml0cygmSlNBcnJheTo6c19pbmZvKSkKICAgICAsIG1faW5kZXgoMCkKICNp
Zm5kZWYgTkRFQlVHCkBAIC00NzksNyArNDc5LDcgQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVy
OjphcHBlbmROZXh0UHJvcAogICAgIGlmICghbV9pbmRleCkgewogICAgICAgICBpZiAobV9pc0Fy
cmF5KSB7CiAgICAgICAgICAgICBtX2lzSlNBcnJheSA9IGlzSlNBcnJheShtX29iamVjdC5nZXQo
KSk7Ci0gICAgICAgICAgICBtX3NpemUgPSBtX29iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPmdsb2Jh
bERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAgICAgICAg
ICAgbV9zaXplID0gbV9vYmplY3QtPmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnWycp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHN0cmluZ2lmaWVyLm1fdXNpbmdB
cnJheVJlcGxhY2VyKQpAQCAtNjA0LDcgKzYwNCw3IEBAIGNsYXNzIFdhbGtlciB7CiBwdWJsaWM6
CiAgICAgV2Fsa2VyKEV4ZWNTdGF0ZSogZXhlYywgSGFuZGxlPEpTT2JqZWN0PiBmdW5jdGlvbiwg
Q2FsbFR5cGUgY2FsbFR5cGUsIENhbGxEYXRhIGNhbGxEYXRhKQogICAgICAgICA6IG1fZXhlYyhl
eGVjKQotICAgICAgICAsIG1fZnVuY3Rpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvbikK
KyAgICAgICAgLCBtX2Z1bmN0aW9uKGV4ZWMtPnZtKCksIGZ1bmN0aW9uKQogICAgICAgICAsIG1f
Y2FsbFR5cGUoY2FsbFR5cGUpCiAgICAgICAgICwgbV9jYWxsRGF0YShjYWxsRGF0YSkKICAgICB7
CkBAIC02MzUsOCArNjM1LDggQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpT
VmFsdQogewogICAgIFZlY3RvcjxQcm9wZXJ0eU5hbWVBcnJheSwgMTYsIFVuc2FmZVZlY3Rvck92
ZXJmbG93PiBwcm9wZXJ0eVN0YWNrOwogICAgIFZlY3Rvcjx1aW50MzJfdCwgMTYsIFVuc2FmZVZl
Y3Rvck92ZXJmbG93PiBpbmRleFN0YWNrOwotICAgIExvY2FsU3RhY2s8SlNPYmplY3QsIDE2PiBv
YmplY3RTdGFjayhtX2V4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgTG9jYWxTdGFjazxKU0FycmF5
LCAxNj4gYXJyYXlTdGFjayhtX2V4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgTG9jYWxTdGFjazxK
U09iamVjdCwgMTY+IG9iamVjdFN0YWNrKG1fZXhlYy0+dm0oKSk7CisgICAgTG9jYWxTdGFjazxK
U0FycmF5LCAxNj4gYXJyYXlTdGFjayhtX2V4ZWMtPnZtKCkpOwogICAgIAogICAgIFZlY3RvcjxX
YWxrZXJTdGF0ZSwgMTYsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBzdGF0ZVN0YWNrOwogICAgIFdh
bGtlclN0YXRlIHN0YXRlID0gU3RhdGVVbmtub3duOwpAQCAtNzcyLDcgKzc3Miw3IEBAIE5FVkVS
X0lOTElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAgICB9CiAgICAgSlNPYmplY3Qq
IGZpbmFsSG9sZGVyID0gY29uc3RydWN0RW1wdHlPYmplY3QobV9leGVjKTsKICAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdDsKLSAgICBmaW5hbEhvbGRlci0+bWV0aG9kVGFibGUoKS0+cHV0KGZpbmFs
SG9sZGVyLCBtX2V4ZWMsIG1fZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPmVtcHR5
SWRlbnRpZmllciwgb3V0VmFsdWUsIHNsb3QpOworICAgIGZpbmFsSG9sZGVyLT5tZXRob2RUYWJs
ZSgpLT5wdXQoZmluYWxIb2xkZXIsIG1fZXhlYywgbV9leGVjLT52bSgpLnByb3BlcnR5TmFtZXMt
PmVtcHR5SWRlbnRpZmllciwgb3V0VmFsdWUsIHNsb3QpOwogICAgIHJldHVybiBjYWxsUmV2aXZl
cihmaW5hbEhvbGRlciwganNFbXB0eVN0cmluZyhtX2V4ZWMpLCBvdXRWYWx1ZSk7CiB9CiAKQEAg
LTc4Niw3ICs3ODYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTT05Qcm90b0Z1
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogCiAgICAgSlNWYWx1
ZSB1bmZpbHRlcmVkOwotICAgIExvY2FsU2NvcGUgc2NvcGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsK
KyAgICBMb2NhbFNjb3BlIHNjb3BlKGV4ZWMtPnZtKCkpOwogICAgIGlmIChzb3VyY2UuaXM4Qml0
KCkpIHsKICAgICAgICAgTGl0ZXJhbFBhcnNlcjxMQ2hhcj4ganNvblBhcnNlcihleGVjLCBzb3Vy
Y2UuY2hhcmFjdGVyczgoKSwgc291cmNlLmxlbmd0aCgpLCBTdHJpY3RKU09OKTsKICAgICAgICAg
dW5maWx0ZXJlZCA9IGpzb25QYXJzZXIudHJ5TGl0ZXJhbFBhcnNlKCk7CkBAIC04MDcsNyArODA3
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09OUHJvdG9GdQogICAgIENhbGxU
eXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBpZiAo
Y2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHVuZmlsdGVyZWQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoV2Fsa2VyKGV4ZWMsIExv
Y2FsPEpTT2JqZWN0PihleGVjLT5nbG9iYWxEYXRhKCksIGFzT2JqZWN0KGZ1bmN0aW9uKSksIGNh
bGxUeXBlLCBjYWxsRGF0YSkud2Fsayh1bmZpbHRlcmVkKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShXYWxrZXIoZXhlYywgTG9jYWw8SlNPYmplY3Q+KGV4ZWMtPnZtKCksIGFzT2JqZWN0
KGZ1bmN0aW9uKSksIGNhbGxUeXBlLCBjYWxsRGF0YSkud2Fsayh1bmZpbHRlcmVkKSk7CiB9CiAK
IC8vIEVDTUEtMjYyIHY1IDE1LjEyLjMKQEAgLTgxNSwxNyArODE1LDE3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgSlNPTlByb3RvRnUKIHsKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50
Q291bnQoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoIk5vIGlucHV0IHRvIHN0cmluZ2lmeSIpKSk7Ci0gICAgTG9jYWxT
Y29wZSBzY29wZShleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgIExvY2FsPFVua25vd24+IHZhbHVl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIExvY2FsPFVua25v
d24+IHJlcGxhY2VyKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+YXJndW1lbnQoMSkpOwotICAg
IExvY2FsPFVua25vd24+IHNwYWNlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+YXJndW1lbnQo
MikpOworICAgIExvY2FsU2NvcGUgc2NvcGUoZXhlYy0+dm0oKSk7CisgICAgTG9jYWw8VW5rbm93
bj4gdmFsdWUoZXhlYy0+dm0oKSwgZXhlYy0+YXJndW1lbnQoMCkpOworICAgIExvY2FsPFVua25v
d24+IHJlcGxhY2VyKGV4ZWMtPnZtKCksIGV4ZWMtPmFyZ3VtZW50KDEpKTsKKyAgICBMb2NhbDxV
bmtub3duPiBzcGFjZShleGVjLT52bSgpLCBleGVjLT5hcmd1bWVudCgyKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShTdHJpbmdpZmllcihleGVjLCByZXBsYWNlciwgc3BhY2UpLnN0cmlu
Z2lmeSh2YWx1ZSkuZ2V0KCkpOwogfQogCiBTdHJpbmcgSlNPTlN0cmluZ2lmeShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGluZGVudCkKIHsKLSAgICBMb2NhbFNjb3Bl
IHNjb3BlKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgTG9jYWw8VW5rbm93bj4gcmVzdWx0ID0g
U3RyaW5naWZpZXIoZXhlYywgTG9jYWw8VW5rbm93bj4oZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc051
bGwoKSksIExvY2FsPFVua25vd24+KGV4ZWMtPmdsb2JhbERhdGEoKSwganNOdW1iZXIoaW5kZW50
KSkpLnN0cmluZ2lmeShMb2NhbDxVbmtub3duPihleGVjLT5nbG9iYWxEYXRhKCksIHZhbHVlKSk7
CisgICAgTG9jYWxTY29wZSBzY29wZShleGVjLT52bSgpKTsKKyAgICBMb2NhbDxVbmtub3duPiBy
ZXN1bHQgPSBTdHJpbmdpZmllcihleGVjLCBMb2NhbDxVbmtub3duPihleGVjLT52bSgpLCBqc051
bGwoKSksIExvY2FsPFVua25vd24+KGV4ZWMtPnZtKCksIGpzTnVtYmVyKGluZGVudCkpKS5zdHJp
bmdpZnkoTG9jYWw8VW5rbm93bj4oZXhlYy0+dm0oKSwgdmFsdWUpKTsKICAgICBpZiAocmVzdWx0
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICByZXR1
cm4gcmVzdWx0LmdldFN0cmluZyhleGVjKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT05PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09OT2JqZWN0LmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMs
OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQorICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3Rh
dGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Miw3ICsz
NDIsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAgICAgSlNP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlQo
dmFsdWUpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1
ZSkgPT0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KSk7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
CiAgICAgLy8gVHJ5IGluZGV4ZWQgcHV0IGZpcnN0LiBUaGlzIGlzIHJlcXVpcmVkIGZvciBjb3Jy
ZWN0bmVzcywgc2luY2UgbG9hZHMgb24gcHJvcGVydHkgbmFtZXMgdGhhdCBhcHBlYXIgbGlrZQog
ICAgIC8vIHZhbGlkIGluZGljZXMgd2lsbCBuZXZlciBsb29rIGluIHRoZSBuYW1lZCBwcm9wZXJ0
eSBzdG9yYWdlLgpAQCAtMzU4LDggKzM1OCw4IEBAIHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGEKICAgICAgICAgZm9yIChKU09iamVjdCogb2JqID0gdGhpc09iamVjdDsg
IW9iai0+c3RydWN0dXJlKCktPmhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhj
bHVkaW5nUHJvdG8oKTsgb2JqID0gYXNPYmplY3QocHJvdG90eXBlKSkgewogICAgICAgICAgICAg
cHJvdG90eXBlID0gb2JqLT5wcm90b3R5cGUoKTsKICAgICAgICAgICAgIGlmIChwcm90b3R5cGUu
aXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXRoaXNPYmplY3QtPnN0cnVjdHVy
ZSgpLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oZXhlYy0+Z2xvYmFsRGF0YSgp
LCBwcm9wZXJ0eU5hbWUpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXRoaXNPYmplY3QtPnB1dERp
cmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IDAsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSkKKyAgICAgICAgICAgICAgICBBU1NF
UlQoIXRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0
b3JlVG8oZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgICAgICAgICAgaWYgKCF0
aGlzT2JqZWN0LT5wdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgMCwgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKQogICAgICAgICAgICAg
ICAgICAgICAmJiBzbG90LmlzU3RyaWN0TW9kZSgpKQogICAgICAgICAgICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlX
cml0ZUVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzcxLDEwICszNzEsMTAg
QEAgdm9pZCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YQogICAgIGZvciAob2Jq
ID0gdGhpc09iamVjdDsgOyBvYmogPSBhc09iamVjdChwcm90b3R5cGUpKSB7CiAgICAgICAgIHVu
c2lnbmVkIGF0dHJpYnV0ZXM7CiAgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gb2JqLT5zdHJ1Y3R1cmUoKS0+Z2V0KGdsb2JhbERh
dGEsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IG9iai0+c3RydWN0dXJlKCktPmdldCh2bSwgcHJvcGVydHlO
YW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSkgewogICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkgewot
ICAgICAgICAgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBl
Q2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1l
KSB8fCBvYmogPT0gdGhpc09iamVjdCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHRoaXNPYmpl
Y3QtPnN0cnVjdHVyZSgpLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oZXhlYy0+
dm0oKSwgcHJvcGVydHlOYW1lKSB8fCBvYmogPT0gdGhpc09iamVjdCk7CiAgICAgICAgICAgICAg
ICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCiAgICAgICAgICAgICAgICAgICAgIHRocm93RXJy
b3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVh
ZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAt
MzgzLDcgKzM4Myw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGEK
ICAgICAgICAgICAgIEpTVmFsdWUgZ3MgPSBvYmotPmdldERpcmVjdChvZmZzZXQpOwogICAgICAg
ICAgICAgaWYgKGdzLmlzR2V0dGVyU2V0dGVyKCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQo
YXR0cmlidXRlcyAmIEFjY2Vzc29yKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQodGhpc09iamVj
dC0+c3RydWN0dXJlKCktPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhleGVjLT5n
bG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSkgfHwgb2JqID09IHRoaXNPYmplY3QpOworICAgICAg
ICAgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBlQ2hhaW5N
YXlJbnRlcmNlcHRTdG9yZVRvKGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSkgfHwgb2JqID09IHRo
aXNPYmplY3QpOwogICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBzZXR0ZXJGdW5jID0gYXNHZXR0
ZXJTZXR0ZXIoZ3MpLT5zZXR0ZXIoKTsgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICghc2V0
dGVyRnVuYykgewogICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkK
QEAgLTQxMiw4ICs0MTIsOCBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgCi0gICAgQVNTRVJUKCF0aGlzT2Jq
ZWN0LT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKSB8fCBvYmogPT0gdGhpc09iamVjdCk7Ci0gICAg
aWYgKCF0aGlzT2JqZWN0LT5wdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0PihnbG9iYWxEYXRh
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkp
ICYmIHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKGV4ZWMtPnZtKCksIHByb3Bl
cnR5TmFtZSkgfHwgb2JqID09IHRoaXNPYmplY3QpOworICAgIGlmICghdGhpc09iamVjdC0+cHV0
RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNs
b3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSkgJiYgc2xvdC5pc1N0cmljdE1vZGUoKSkKICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKFN0cmljdE1vZGVSZWFkb25s
eVByb3BlcnR5V3JpdGVFcnJvcikpOwogICAgIHJldHVybjsKIH0KQEAgLTQzMyw3ICs0MzMsNyBA
QCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAgICAgIGJyZWFr
OwogICAgICAgICAKICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6IHsKLSAg
ICAgICAgdGhpc09iamVjdC0+Y29udmVydFVuZGVjaWRlZEZvclZhbHVlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgdmFsdWUpOworICAgICAgICB0aGlzT2JqZWN0LT5jb252ZXJ0VW5kZWNpZGVkRm9yVmFs
dWUoZXhlYy0+dm0oKSwgdmFsdWUpOwogICAgICAgICAvLyBSZWxvb3AuCiAgICAgICAgIHB1dEJ5
SW5kZXgoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwogICAg
ICAgICByZXR1cm47CkBAIC00NDEsNyArNDQxLDcgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRl
eChKU0NlbGwqIGNlbGwsIAogICAgICAgICAKICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19U
WVBFUzogewogICAgICAgICBpZiAoIXZhbHVlLmlzSW50MzIoKSkgewotICAgICAgICAgICAgdGhp
c09iamVjdC0+Y29udmVydEludDMyRm9yVmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB2YWx1ZSk7
CisgICAgICAgICAgICB0aGlzT2JqZWN0LT5jb252ZXJ0SW50MzJGb3JWYWx1ZShleGVjLT52bSgp
LCB2YWx1ZSk7CiAgICAgICAgICAgICBwdXRCeUluZGV4KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNob3VsZFRocm93KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpA
QCAtNDUyLDcgKzQ1Miw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxs
LCAKICAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZs
eTsKICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA+PSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgp
KQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW3By
b3BlcnR5TmFtZV0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOwor
ICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtwcm9wZXJ0eU5hbWVdLnNldChleGVjLT52
bSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPj0gYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKICAgICAgICAgICAgIGJ1dHRlcmZseS0+c2V0UHVibGlj
TGVuZ3RoKHByb3BlcnR5TmFtZSArIDEpOwogICAgICAgICByZXR1cm47CkBAIC00NjAsMTQgKzQ2
MCwxNCBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAgICAg
IAogICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBpZiAoIXZh
bHVlLmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPmNvbnZlcnREb3VibGVU
b0NvbnRpZ3VvdXMoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3Qt
PmNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoZXhlYy0+dm0oKSk7CiAgICAgICAgICAgICAvLyBS
ZWxvb3AuCiAgICAgICAgICAgICBwdXRCeUluZGV4KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNob3VsZFRocm93KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICBkb3VibGUgdmFsdWVBc0RvdWJsZSA9IHZhbHVlLmFzTnVtYmVyKCk7CiAgICAgICAgIGlm
ICh2YWx1ZUFzRG91YmxlICE9IHZhbHVlQXNEb3VibGUpIHsKLSAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPmNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAg
ICAgICAgIHRoaXNPYmplY3QtPmNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoZXhlYy0+dm0oKSk7
CiAgICAgICAgICAgICAvLyBSZWxvb3AuCiAgICAgICAgICAgICBwdXRCeUluZGV4KGNlbGwsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTQ5OSw3ICs0OTksNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCog
Y2VsbCwgCiAgICAgICAgIH0gZWxzZSBpZiAoIXZhbHVlU2xvdCkKICAgICAgICAgICAgICsrc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKICAgICAgICAgCi0gICAgICAgIHZhbHVlU2xvdC5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAgICAgIHZhbHVl
U2xvdC5zZXQoZXhlYy0+dm0oKSwgdGhpc09iamVjdCwgdmFsdWUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgICAgICAKQEAgLTUyNiw3ICs1MjYsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXRC
eUluZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3I7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZhbHVlU2xvdC5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAgICAgIHZhbHVlU2xvdC5z
ZXQoZXhlYy0+dm0oKSwgdGhpc09iamVjdCwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgICAgICAKQEAgLTUzNywxMiArNTM3LDEyIEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5k
ZXgoSlNDZWxsKiBjZWxsLCAKICAgICB0aGlzT2JqZWN0LT5wdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKIH0KIAotQXJy
YXlTdG9yYWdlKiBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5
U3RvcmFnZUFscmVhZHlFeGlzdHMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UpCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRl
eGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhWTSYgdm0sIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSkKIHsKICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5t
X3NwYXJzZU1hcC5nZXQoKTsKIAogICAgIGlmICghbWFwKQotICAgICAgICBtYXAgPSBhbGxvY2F0
ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworICAgICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJz
ZUluZGV4TWFwKHZtKTsKIAogICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSkKICAgICAgICAgcmV0
dXJuIHN0b3JhZ2U7CkBAIC01NTUsMjEgKzU1NSwyMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0
OjplbnRlckRpY3Rpb25hcnlJCiAgICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMgYmUgYSBuZXcg
ZW50cnkgaW4gdGhlIG1hcCwgc28gbm8gbmVlZCB0byBjaGVjayB3ZSBjYW4gd3JpdGUsCiAgICAg
ICAgIC8vIGFuZCBhdHRyaWJ1dGVzIGFyZSBkZWZhdWx0IHNvIG5vIG5lZWQgdG8gc2V0IHRoZW0u
CiAgICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIG1hcC0+YWRkKHRoaXMsIGkpLml0ZXJh
dG9yLT52YWx1ZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgbWFw
LT5hZGQodGhpcywgaSkuaXRlcmF0b3ItPnZhbHVlLnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAg
IH0KIAotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCkt
PnJlc2l6ZUFycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCAwLCBBcnJheVN0b3JhZ2U6OnNp
emVGb3IoMCkpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVy
Zmx5KCktPnJlc2l6ZUFycmF5KHZtLCBzdHJ1Y3R1cmUoKSwgMCwgQXJyYXlTdG9yYWdlOjpzaXpl
Rm9yKDApKTsKICAgICBSRUxFQVNFX0FTU0VSVChuZXdCdXR0ZXJmbHkpOwogICAgIAogICAgIG1f
YnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPm1faW5kZXhCaWFzID0gMDsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5z
ZXRWZWN0b3JMZW5ndGgoMCk7Ci0gICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9z
cGFyc2VNYXAuc2V0KGdsb2JhbERhdGEsIHRoaXMsIG1hcCk7CisgICAgbmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuc2V0KHZtLCB0aGlzLCBtYXApOwogICAgIAogICAg
IHJldHVybiBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogfQogCi12b2lkIEpTT2JqZWN0
OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQor
dm9pZCBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKFZNJiB2bSkKIHsKICAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQUxMX0JM
QU5LX0lOREVYSU5HX1RZUEVTOgpAQCAtNTc5LDEwICs1NzksMTAgQEAgdm9pZCBKU09iamVjdDo6
ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNbwogICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6CiAgICAgICAgIC8vIE5PVEU6IHRoaXMgaXMgaG9ycmlibHkgaW5lZmZpY2llbnQs
IGFzIGl0IHdpbGwgcGVyZm9ybSB0d28gY29udmVyc2lvbnMuIFdlIGNvdWxkIG9wdGltaXplCiAg
ICAgICAgIC8vIHRoaXMgY2FzZSBpZiB3ZSBldmVyIGNhcmVkLgotICAgICAgICBlbnRlckRpY3Rp
b25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRh
LCBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KGdsb2JhbERhdGEpKTsKKyAgICAgICAgZW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIGVuc3Vy
ZUFycmF5U3RvcmFnZVNsb3codm0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBTExfQVJS
QVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
V2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0OgpAQCAtNTkwLDIw
ICs1OTAsMjAgQEAgdm9pZCBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNbwogICAg
IH0KIH0KIAotdm9pZCBKU09iamVjdDo6bm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRBY2Nlc3NvcnMo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBKU09iamVjdDo6bm90aWZ5UHJlc2VuY2VP
ZkluZGV4ZWRBY2Nlc3NvcnMoVk0mIHZtKQogewogICAgIGlmIChtYXlJbnRlcmNlcHRJbmRleGVk
QWNjZXNzZXMoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIHNldFN0cnVjdHVyZShnbG9i
YWxEYXRhLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUoKSwgQWRkSW5kZXhlZEFjY2Vzc29ycykpOworICAgIHNldFN0cnVjdHVyZSh2bSwgU3Ry
dWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCBBZGRJbmRleGVk
QWNjZXNzb3JzKSk7CiAgICAgCi0gICAgaWYgKCFnbG9iYWxEYXRhLnByb3RvdHlwZU1hcC5pc1By
b3RvdHlwZSh0aGlzKSkKKyAgICBpZiAoIXZtLnByb3RvdHlwZU1hcC5pc1Byb3RvdHlwZSh0aGlz
KSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGdsb2JhbE9iamVjdCgpLT5oYXZlQUJhZFRp
bWUoZ2xvYmFsRGF0YSk7CisgICAgZ2xvYmFsT2JqZWN0KCktPmhhdmVBQmFkVGltZSh2bSk7CiB9
CiAKLUJ1dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCwgc2l6ZV90IGVsZW1lbnRTaXpl
KQorQnV0dGVyZmx5KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKFZNJiB2
bSwgdW5zaWduZWQgbGVuZ3RoLCBzaXplX3QgZWxlbWVudFNpemUpCiB7CiAgICAgQVNTRVJUKGxl
bmd0aCA8IE1BWF9BUlJBWV9JTkRFWCk7CiAgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCk7CkBAIC02MTIsNTMgKzYxMiw1MyBAQCBCdXR0ZXJmbHkq
IEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsSW5kZXhlCiAgICAgQVNTRVJUKCFpbmRleGluZ1Nob3Vs
ZEJlU3BhcnNlKCkpOwogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0
aCwgQkFTRV9WRUNUT1JfTEVOKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRl
cmZseTo6Y3JlYXRlT3JHcm93QXJyYXlSaWdodChtX2J1dHRlcmZseSwgCi0gICAgICAgIGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFs
c2UsIDAsCisgICAgICAgIHZtLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNh
cGFjaXR5KCksIGZhbHNlLCAwLAogICAgICAgICBlbGVtZW50U2l6ZSAqIHZlY3Rvckxlbmd0aCk7
CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKICAgICBuZXdCdXR0
ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwogICAgIHJldHVybiBuZXdCdXR0
ZXJmbHk7CiB9CiAKLUJ1dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxVbmRlY2lkZWQo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgpCitCdXR0ZXJmbHkqIEpT
T2JqZWN0OjpjcmVhdGVJbml0aWFsVW5kZWNpZGVkKFZNJiB2bSwgdW5zaWduZWQgbGVuZ3RoKQog
ewotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9y
YWdlKGdsb2JhbERhdGEsIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihn
bG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVVbmRlY2lkZWQpOwotICAgIHNldEJ1dHRl
cmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CisgICAgQnV0dGVy
Zmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uodm0sIGxlbmd0
aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUg
PSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKCksIEFsbG9j
YXRlVW5kZWNpZGVkKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSwgbmV3U3Ry
dWN0dXJlKTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5OwogfQogCi1Db250aWd1b3VzSlNWYWx1
ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbnQzMihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IHVuc2lnbmVkIGxlbmd0aCkKK0NvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRlSW5p
dGlhbEludDMyKFZNJiB2bSwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIEJ1dHRlcmZseSogbmV3
QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKGdsb2JhbERhdGEsIGxlbmd0
aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUg
PSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUo
KSwgQWxsb2NhdGVJbnQzMik7Ci0gICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRl
cmZseSwgbmV3U3RydWN0dXJlKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0
ZUluaXRpYWxJbmRleGVkU3RvcmFnZSh2bSwgbGVuZ3RoLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KTsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlU
cmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVJbnQzMik7CisgICAgc2V0QnV0dGVy
Zmx5KHZtLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld0J1dHRl
cmZseS0+Y29udGlndW91c0ludDMyKCk7CiB9CiAKLUNvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0
OjpjcmVhdGVJbml0aWFsRG91YmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQg
bGVuZ3RoKQorQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxEb3VibGUo
Vk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkg
PSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2UoZ2xvYmFsRGF0YSwgbGVuZ3RoLCBzaXplb2Yo
ZG91YmxlKSk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5k
ZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCwgc2l6ZW9mKGRvdWJsZSkpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCiAgICAgICAgIG5ld0J1
dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUU5hTjsKLSAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEs
IHN0cnVjdHVyZSgpLCBBbGxvY2F0ZURvdWJsZSk7Ci0gICAgc2V0QnV0dGVyZmx5KGdsb2JhbERh
dGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwg
QWxsb2NhdGVEb3VibGUpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5LCBuZXdT
dHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKTsK
IH0KIAotQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQ29udGlndW91
cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK0NvbnRpZ3VvdXNK
U1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoVk0mIHZtLCB1bnNpZ25l
ZCBsZW5ndGgpCiB7Ci0gICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFs
SW5kZXhlZFN0b3JhZ2UoZ2xvYmFsRGF0YSwgbGVuZ3RoLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KTsKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlU
cmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZUNvbnRpZ3VvdXMpOwot
ICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7
CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3Jh
Z2Uodm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0
dXJlKCksIEFsbG9jYXRlQ29udGlndW91cyk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0
ZXJmbHksIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91
cygpOwogfQogCi1BcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxl
bmd0aCkKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZShWTSYgdm0s
IHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQogewogICAgIEluZGV4aW5n
VHlwZSBvbGRUeXBlID0gc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpOwogICAgIEFTU0VSVF9V
TlVTRUQob2xkVHlwZSwgIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKG9sZFR5cGUpKTsKICAgICBCdXR0
ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93QXJyYXlSaWdodCht
X2J1dHRlcmZseSwgCi0gICAgICAgIGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCisgICAgICAgIHZtLCBzdHJ1Y3R1cmUo
KSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAwLAogICAgICAgICBB
cnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQo
bmV3QnV0dGVyZmx5KTsKIApAQCAtNjY4LDQ5ICs2NjgsNDkgQEAgQXJyYXlTdG9yYWdlKiBKU09i
amVjdDo6Y3JlYXRlQXJyYXlTdG9yYQogICAgIHJlc3VsdC0+bV9zcGFyc2VNYXAuY2xlYXIoKTsK
ICAgICByZXN1bHQtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOwogICAgIHJlc3VsdC0+bV9pbmRl
eEJpYXMgPSAwOwotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Q
cm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5z
dWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOwotICAgIHNldEJ1dHRlcmZseShnbG9i
YWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CisgICAgU3RydWN0dXJlKiBuZXdT
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJl
KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOworICAg
IHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLUFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxBcnJh
eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCBCQVNFX1ZFQ1RPUl9MRU4pOworICAgIHJldHVy
biBjcmVhdGVBcnJheVN0b3JhZ2Uodm0sIDAsIEJBU0VfVkVDVE9SX0xFTik7CiB9CiAKLUNvbnRp
Z3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvSW50MzIoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQorQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5k
ZWNpZGVkVG9JbnQzMihWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKLSAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgU3Ry
dWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIEFs
bG9jYXRlSW50MzIpKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVy
dHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVJbnQzMikpOwogICAgIHJldHVy
biBtX2J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKCk7CiB9CiAKLUNvbnRpZ3VvdXNEb3VibGVz
IEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9Eb3VibGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQorQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0RvdWJs
ZShWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUoKS0+aW5kZXhp
bmdUeXBlKCkpKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2J1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCk7IGktLTspCiAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91Ymxl
KClbaV0gPSBRTmFOOwogICAgIAotICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBTdHJ1Y3R1
cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgQWxsb2Nh
dGVEb3VibGUpKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlU
cmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVEb3VibGUpKTsKICAgICByZXR1cm4g
bV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKTsKIH0KIAotQ29udGlndW91c0pTVmFsdWVz
IEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9Db250aWd1b3VzKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSkKK0NvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRv
Q29udGlndW91cyhWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpKTsKLSAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgU3RydWN0
dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIEFsbG9j
YXRlQ29udGlndW91cykpOworICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9w
ZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZUNvbnRpZ3VvdXMpKTsKICAg
ICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKIH0KIAotQXJyYXlTdG9yYWdlKiBK
U09iamVjdDo6Y29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVt
ZW50cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIG5lZWRlZExlbmd0aCkKK0Fy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhv
dXRDb3B5aW5nRWxlbWVudHMoVk0mIHZtLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpCiB7CiAgICAg
dW5zaWduZWQgcHVibGljTGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwogICAg
IHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKTsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eVNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
U2l6ZSgpOwogICAgIAogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpj
cmVhdGVVbmluaXRpYWxpemVkKAotICAgICAgICBnbG9iYWxEYXRhLCAwLCBwcm9wZXJ0eUNhcGFj
aXR5LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmVlZGVkTGVuZ3RoKSk7CisgICAgICAg
IHZtLCAwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmVl
ZGVkTGVuZ3RoKSk7CiAgICAgCiAgICAgbWVtY3B5KAogICAgICAgICBuZXdCdXR0ZXJmbHktPnBy
b3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLApAQCAtNzI3LDI5ICs3MjcsMjkgQEAgQXJy
YXlTdG9yYWdlKiBKU09iamVjdDo6Y29uc3RydWN0Q29udmVydAogICAgIHJldHVybiBuZXdTdG9y
YWdlOwogfQogCi1BcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9BcnJh
eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24g
dHJhbnNpdGlvbiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKQorQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6Y29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdlKFZNJiB2bSwgTm9uUHJvcGVydHlUcmFu
c2l0aW9uIHRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCkKIHsKICAgICBBU1NFUlQo
aGFzVW5kZWNpZGVkKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOwogICAgIAotICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhv
dXRDb3B5aW5nRWxlbWVudHMoZ2xvYmFsRGF0YSwgbmVlZGVkTGVuZ3RoKTsKKyAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29w
eWluZ0VsZW1lbnRzKHZtLCBuZWVkZWRMZW5ndGgpOwogICAgIC8vIE5vIG5lZWQgdG8gY29weSBl
bGVtZW50cy4KICAgICAKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6
bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9u
KTsKLSAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgc3RvcmFnZS0+YnV0dGVyZmx5KCksIG5l
d1N0cnVjdHVyZSk7CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKCksIHRyYW5zaXRpb24pOworICAgIHNl
dEJ1dHRlcmZseSh2bSwgc3RvcmFnZS0+YnV0dGVyZmx5KCksIG5ld1N0cnVjdHVyZSk7CiAgICAg
cmV0dXJuIHN0b3JhZ2U7CiB9CiAKLUFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRVbmRl
Y2lkZWRUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE5vblByb3BlcnR5
VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQorQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydFVu
ZGVjaWRlZFRvQXJyYXlTdG9yYWdlKFZNJiB2bSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5z
aXRpb24pCiB7Ci0gICAgcmV0dXJuIGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZShnbG9i
YWxEYXRhLCB0cmFuc2l0aW9uLCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIHJl
dHVybiBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2Uodm0sIHRyYW5zaXRpb24sIG1fYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CiB9CiAKLUFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNv
bnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitB
cnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UoVk0m
IHZtKQogewotICAgIHJldHVybiBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7Cisg
ICAgcmV0dXJuIGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZSh2bSwgc3RydWN0dXJlKCkt
PnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7CiB9CiAKLUNvbnRpZ3VvdXNEb3Vi
bGVzIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0RvdWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCitDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y29udmVydEludDMyVG9Eb3VibGUoVk0m
IHZtKQogewogICAgIEFTU0VSVChoYXNJbnQzMihzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
KTsKICAgICAKQEAgLTc2NSwyMyArNzY1LDIzIEBAIENvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0
Ojpjb252ZXJ0SW50MzIKICAgICAgICAgKmN1cnJlbnRBc0RvdWJsZSA9IHYuYXNJbnQzMigpOwog
ICAgIH0KICAgICAKLSAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgU3RydWN0dXJlOjpub25Q
cm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIEFsbG9jYXRlRG91Ymxl
KSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlv
bih2bSwgc3RydWN0dXJlKCksIEFsbG9jYXRlRG91YmxlKSk7CiAgICAgcmV0dXJuIG1fYnV0dGVy
Zmx5LT5jb250aWd1b3VzRG91YmxlKCk7CiB9CiAKLUNvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVj
dDo6Y29udmVydEludDMyVG9Db250aWd1b3VzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK0Nv
bnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydEludDMyVG9Db250aWd1b3VzKFZNJiB2
bSkKIHsKICAgICBBU1NFUlQoaGFzSW50MzIoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7
CiAgICAgCi0gICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0cnVjdHVyZTo6bm9uUHJvcGVy
dHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZUNvbnRpZ3VvdXMp
KTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KHZtLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVDb250aWd1b3VzKSk7CiAgICAgcmV0dXJuIG1fYnV0
dGVyZmx5LT5jb250aWd1b3VzKCk7CiB9CiAKLUFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZl
cnRJbnQzMlRvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTm9uUHJvcGVy
dHlUcmFuc2l0aW9uIHRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCkKK0FycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKFZNJiB2bSwgTm9uUHJv
cGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCkKIHsKICAg
ICBBU1NFUlQoaGFzSW50MzIoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgCi0g
ICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9y
YWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyhnbG9iYWxEYXRhLCBuZWVkZWRMZW5ndGgpOworICAg
IEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFn
ZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIG5lZWRlZExlbmd0aCk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpLS07KSB7CiAgICAgICAgIEpT
VmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAgICAgIGlm
ICghdikKQEAgLTc5MCwyMyArNzkwLDIzIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZl
cnRJbnQzMlRvQXIKICAgICAgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOwog
ICAgIH0KICAgICAKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9u
UHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsK
LSAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCksIG5l
d1N0cnVjdHVyZSk7CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKCksIHRyYW5zaXRpb24pOworICAgIHNl
dEJ1dHRlcmZseSh2bSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCksIG5ld1N0cnVjdHVyZSk7CiAg
ICAgcmV0dXJuIG5ld1N0b3JhZ2U7CiB9CiAKLUFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZl
cnRJbnQzMlRvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTm9uUHJvcGVy
dHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0
SW50MzJUb0FycmF5U3RvcmFnZShWTSYgdm0sIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0
aW9uKQogewotICAgIHJldHVybiBjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRh
LCB0cmFuc2l0aW9uLCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIHJldHVybiBj
b252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZSh2bSwgdHJhbnNpdGlvbiwgbV9idXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpKTsKIH0KIAotQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydEludDMy
VG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorQXJyYXlTdG9yYWdlKiBK
U09iamVjdDo6Y29udmVydEludDMyVG9BcnJheVN0b3JhZ2UoVk0mIHZtKQogewotICAgIHJldHVy
biBjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+c3Vn
Z2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKKyAgICByZXR1cm4gY29udmVydEludDMy
VG9BcnJheVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFu
c2l0aW9uKCkpOwogfQogCiB0ZW1wbGF0ZTxKU09iamVjdDo6RG91YmxlVG9Db250aWd1b3VzTW9k
ZSBtb2RlPgotQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpnZW5lcmljQ29udmVydERvdWJs
ZVRvQ29udGlndW91cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitDb250aWd1b3VzSlNWYWx1
ZXMgSlNPYmplY3Q6OmdlbmVyaWNDb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKFZNJiB2bSkKIHsK
ICAgICBBU1NFUlQoaGFzRG91YmxlKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOwogICAg
IApAQCAtODMxLDI1ICs4MzEsMjUgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpnZW5l
cmljQ29udgogICAgICAgICBjdXJyZW50QXNWYWx1ZS0+c2V0V2l0aG91dFdyaXRlQmFycmllcih2
KTsKICAgICB9CiAgICAgCi0gICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0cnVjdHVyZTo6
bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZUNv
bnRpZ3VvdXMpKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlU
cmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVDb250aWd1b3VzKSk7CiAgICAgcmV0
dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CiB9CiAKLUNvbnRpZ3VvdXNKU1ZhbHVlcyBK
U09iamVjdDo6Y29udmVydERvdWJsZVRvQ29udGlndW91cyhKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCitDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0NvbnRpZ3Vv
dXMoVk0mIHZtKQogewotICAgIHJldHVybiBnZW5lcmljQ29udmVydERvdWJsZVRvQ29udGlndW91
czxFbmNvZGVWYWx1ZUFzRG91YmxlPihnbG9iYWxEYXRhKTsKKyAgICByZXR1cm4gZ2VuZXJpY0Nv
bnZlcnREb3VibGVUb0NvbnRpZ3VvdXM8RW5jb2RlVmFsdWVBc0RvdWJsZT4odm0pOwogfQogCi1D
b250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OnJhZ2VDb252ZXJ0RG91YmxlVG9Db250aWd1b3Vz
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK0NvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6
cmFnZUNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoVk0mIHZtKQogewotICAgIHJldHVybiBnZW5l
cmljQ29udmVydERvdWJsZVRvQ29udGlndW91czxSYWdlQ29udmVydERvdWJsZVRvVmFsdWU+KGds
b2JhbERhdGEpOworICAgIHJldHVybiBnZW5lcmljQ29udmVydERvdWJsZVRvQ29udGlndW91czxS
YWdlQ29udmVydERvdWJsZVRvVmFsdWU+KHZtKTsKIH0KIAotQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6Y29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
Tm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCkK
K0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZShWTSYg
dm0sIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVkZWRMZW5n
dGgpCiB7CiAgICAgQVNTRVJUKGhhc0RvdWJsZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
KTsKICAgICAKLSAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0
ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKGdsb2JhbERhdGEsIG5lZWRlZExl
bmd0aCk7CisgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVk
QXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgbmVlZGVkTGVuZ3RoKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGktLTspIHsK
ICAgICAgICAgZG91YmxlIHZhbHVlID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtp
XTsKICAgICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKQpAQCAtODU4LDI2ICs4NTgsMjYgQEAgQXJy
YXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQQogICAgICAgICBuZXdTdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yKys7CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwg
c3RydWN0dXJlKCksIHRyYW5zaXRpb24pOwotICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBu
ZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSwgbmV3U3RydWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1
cmUoKSwgdHJhbnNpdGlvbik7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdTdG9yYWdlLT5idXR0
ZXJmbHkoKSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3U3RvcmFnZTsKIH0KIAotQXJy
YXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCitBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2UoVk0mIHZtLCBO
b25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKIHsKLSAgICByZXR1cm4gY29udmVydERv
dWJsZVRvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIG1fYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKSk7CisgICAgcmV0dXJuIGNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSh2
bSwgdHJhbnNpdGlvbiwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKIH0KIAotQXJyYXlT
dG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0Fy
cmF5U3RvcmFnZShWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIGNvbnZlcnREb3VibGVUb0FycmF5U3Rv
cmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNp
dGlvbigpKTsKKyAgICByZXR1cm4gY29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKHZtLCBzdHJ1
Y3R1cmUoKS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKIH0KIAotQXJyYXlT
dG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uLCB1bnNp
Z25lZCBuZWVkZWRMZW5ndGgpCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGln
dW91c1RvQXJyYXlTdG9yYWdlKFZNJiB2bSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRp
b24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCkKIHsKICAgICBBU1NFUlQoaGFzQ29udGlndW91cyhz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICAKLSAgICBBcnJheVN0b3JhZ2UqIG5l
d1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0Vs
ZW1lbnRzKGdsb2JhbERhdGEsIG5lZWRlZExlbmd0aCk7CisgICAgQXJyYXlTdG9yYWdlKiBuZXdT
dG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVt
ZW50cyh2bSwgbmVlZGVkTGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2J1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCk7IGktLTspIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gbV9idXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKICAgICAgICAgaWYgKCF2KQpAQCAtODg2LDcxICs4
ODYsNzEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdQogICAgICAg
ICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7CiAgICAgfQogICAgIAotICAgIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24o
Z2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHRyYW5zaXRpb24pOwotICAgIHNldEJ1dHRlcmZseShn
bG9iYWxEYXRhLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSwgbmV3U3RydWN0dXJlKTsKKyAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KHZtLCBzdHJ1Y3R1cmUoKSwgdHJhbnNpdGlvbik7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdT
dG9yYWdlLT5idXR0ZXJmbHkoKSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3U3RvcmFn
ZTsKIH0KIAotQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5
U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0
cmFuc2l0aW9uKQorQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0Fy
cmF5U3RvcmFnZShWTSYgdm0sIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQogewot
ICAgIHJldHVybiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIHRy
YW5zaXRpb24sIG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgcmV0dXJuIGNvbnZl
cnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uodm0sIHRyYW5zaXRpb24sIG1fYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKSk7CiB9CiAKLUFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250
aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShWTSYgdm0pCiB7
Ci0gICAgcmV0dXJuIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlKCktPnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7CisgICAgcmV0
dXJuIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5zdWdn
ZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOwogfQogCi12b2lkIEpTT2JqZWN0Ojpjb252
ZXJ0VW5kZWNpZGVkRm9yVmFsdWUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHZh
bHVlKQordm9pZCBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZEZvclZhbHVlKFZNJiB2bSwgSlNW
YWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUuaXNJbnQzMigpKSB7Ci0gICAgICAgIGNvbnZl
cnRVbmRlY2lkZWRUb0ludDMyKGdsb2JhbERhdGEpOworICAgICAgICBjb252ZXJ0VW5kZWNpZGVk
VG9JbnQzMih2bSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgaWYgKHZhbHVl
LmlzRG91YmxlKCkpIHsKLSAgICAgICAgY29udmVydFVuZGVjaWRlZFRvRG91YmxlKGdsb2JhbERh
dGEpOworICAgICAgICBjb252ZXJ0VW5kZWNpZGVkVG9Eb3VibGUodm0pOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIAotICAgIGNvbnZlcnRVbmRlY2lkZWRUb0NvbnRpZ3VvdXMoZ2xvYmFs
RGF0YSk7CisgICAgY29udmVydFVuZGVjaWRlZFRvQ29udGlndW91cyh2bSk7CiB9CiAKLXZvaWQg
SlNPYmplY3Q6OmNvbnZlcnRJbnQzMkZvclZhbHVlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMkZvclZhbHVlKFZNJiB2
bSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBBU1NFUlQoIXZhbHVlLmlzSW50MzIoKSk7CiAgICAg
CiAgICAgaWYgKHZhbHVlLmlzRG91YmxlKCkpIHsKLSAgICAgICAgY29udmVydEludDMyVG9Eb3Vi
bGUoZ2xvYmFsRGF0YSk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHZtKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBjb252ZXJ0SW50MzJUb0NvbnRpZ3VvdXMoZ2xv
YmFsRGF0YSk7CisgICAgY29udmVydEludDMyVG9Db250aWd1b3VzKHZtKTsKIH0KIAotdm9pZCBK
U09iamVjdDo6c2V0SW5kZXhRdWlja2x5VG9VbmRlY2lkZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNPYmplY3Q6OnNldElu
ZGV4UXVpY2tseVRvVW5kZWNpZGVkKFZNJiB2bSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFs
dWUpCiB7CiAgICAgQVNTRVJUKGluZGV4IDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsK
ICAgICBBU1NFUlQoaW5kZXggPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgIGNv
bnZlcnRVbmRlY2lkZWRGb3JWYWx1ZShnbG9iYWxEYXRhLCB2YWx1ZSk7Ci0gICAgc2V0SW5kZXhR
dWlja2x5KGdsb2JhbERhdGEsIGluZGV4LCB2YWx1ZSk7CisgICAgY29udmVydFVuZGVjaWRlZEZv
clZhbHVlKHZtLCB2YWx1ZSk7CisgICAgc2V0SW5kZXhRdWlja2x5KHZtLCBpbmRleCwgdmFsdWUp
OwogfQogCi12b2lkIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0RvdWJsZU9yQ29udGlndW91c1do
aWxlUGVyZm9ybWluZ1NldEluZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQg
aW5kZXgsIEpTVmFsdWUgdmFsdWUpCit2b2lkIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0RvdWJs
ZU9yQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KFZNJiB2bSwgdW5zaWduZWQgaW5k
ZXgsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc0ludDMyKCkpOwotICAg
IGNvbnZlcnRJbnQzMkZvclZhbHVlKGdsb2JhbERhdGEsIHZhbHVlKTsKLSAgICBzZXRJbmRleFF1
aWNrbHkoZ2xvYmFsRGF0YSwgaW5kZXgsIHZhbHVlKTsKKyAgICBjb252ZXJ0SW50MzJGb3JWYWx1
ZSh2bSwgdmFsdWUpOworICAgIHNldEluZGV4UXVpY2tseSh2bSwgaW5kZXgsIHZhbHVlKTsKIH0K
IAotdm9pZCBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQ29udGlndW91c1doaWxlUGVyZm9ybWlu
Z1NldEluZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5kZXgsIEpTVmFs
dWUgdmFsdWUpCit2b2lkIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzV2hpbGVQ
ZXJmb3JtaW5nU2V0SW5kZXgoVk0mIHZtLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSkK
IHsKICAgICBBU1NFUlQoIXZhbHVlLmlzTnVtYmVyKCkgfHwgdmFsdWUuYXNOdW1iZXIoKSAhPSB2
YWx1ZS5hc051bWJlcigpKTsKLSAgICBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKGdsb2JhbERh
dGEpOwotICAgIHNldEluZGV4UXVpY2tseShnbG9iYWxEYXRhLCBpbmRleCwgdmFsdWUpOworICAg
IGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXModm0pOworICAgIHNldEluZGV4UXVpY2tseSh2bSwg
aW5kZXgsIHZhbHVlKTsKIH0KIAotQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjplbnN1cmVJ
bnQzMlNsb3coSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorQ29udGlndW91c0pTVmFsdWVzIEpT
T2JqZWN0OjplbnN1cmVJbnQzMlNsb3coVk0mIHZtKQogewogICAgIEFTU0VSVChpbmhlcml0cygm
c19pbmZvKSk7CiAgICAgCkBAIC05NTgsMTAgKzk1OCwxMCBAQCBDb250aWd1b3VzSlNWYWx1ZXMg
SlNPYmplY3Q6OmVuc3VyZUludDMyCiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6
CiAgICAgICAgIGlmIChVTkxJS0VMWShpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkgfHwgc3RydWN0
dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpKQogICAgICAgICAgICAgcmV0dXJuIENvbnRp
Z3VvdXNKU1ZhbHVlcygpOwotICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlhbEludDMyKGdsb2Jh
bERhdGEsIDApOworICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlhbEludDMyKHZtLCAwKTsKICAg
ICAgICAgCiAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgotICAgICAgICBy
ZXR1cm4gY29udmVydFVuZGVjaWRlZFRvSW50MzIoZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVy
biBjb252ZXJ0VW5kZWNpZGVkVG9JbnQzMih2bSk7CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0RP
VUJMRV9JTkRFWElOR19UWVBFUzoKICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZ
UEVTOgpAQCAtOTc0LDcgKzk3NCw3IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6ZW5z
dXJlSW50MzIKICAgICB9CiB9CiAKLUNvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0OjplbnN1cmVE
b3VibGVTbG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK0NvbnRpZ3VvdXNEb3VibGVzIEpT
T2JqZWN0OjplbnN1cmVEb3VibGVTbG93KFZNJiB2bSkKIHsKICAgICBBU1NFUlQoaW5oZXJpdHMo
JnNfaW5mbykpOwogICAgIApAQCAtOTgyLDEzICs5ODIsMTMgQEAgQ29udGlndW91c0RvdWJsZXMg
SlNPYmplY3Q6OmVuc3VyZURvdWJsZQogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVT
OgogICAgICAgICBpZiAoVU5MSUtFTFkoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpIHx8IHN0cnVj
dHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKSkKICAgICAgICAgICAgIHJldHVybiBDb250
aWd1b3VzRG91YmxlcygpOwotICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlhbERvdWJsZShnbG9i
YWxEYXRhLCAwKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxEb3VibGUodm0sIDApOwog
ICAgICAgICAKICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAg
IHJldHVybiBjb252ZXJ0VW5kZWNpZGVkVG9Eb3VibGUoZ2xvYmFsRGF0YSk7CisgICAgICAgIHJl
dHVybiBjb252ZXJ0VW5kZWNpZGVkVG9Eb3VibGUodm0pOwogICAgICAgICAKICAgICBjYXNlIEFM
TF9JTlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRJbnQzMlRvRG91
YmxlKGdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4gY29udmVydEludDMyVG9Eb3VibGUodm0p
OwogICAgICAgICAKICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAg
IGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CkBAIC0xMDAwLDcgKzEwMDAs
NyBAQCBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6ZW5zdXJlRG91YmxlCiAgICAgfQogfQog
Ci1Db250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNTbG93KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgRG91YmxlVG9Db250aWd1b3VzTW9kZSBtb2RlKQorQ29udGln
dW91c0pTVmFsdWVzIEpTT2JqZWN0OjplbnN1cmVDb250aWd1b3VzU2xvdyhWTSYgdm0sIERvdWJs
ZVRvQ29udGlndW91c01vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykp
OwogICAgIApAQCAtMTAwOCwxOCArMTAwOCwxOCBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmpl
Y3Q6OmVuc3VyZUNvbnRpCiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAg
ICAgIGlmIChVTkxJS0VMWShpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkgfHwgc3RydWN0dXJlKCkt
Pm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpKQogICAgICAgICAgICAgcmV0dXJuIENvbnRpZ3VvdXNK
U1ZhbHVlcygpOwotICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoZ2xvYmFs
RGF0YSwgMCk7CisgICAgICAgIHJldHVybiBjcmVhdGVJbml0aWFsQ29udGlndW91cyh2bSwgMCk7
CiAgICAgICAgIAogICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKLSAgICAg
ICAgcmV0dXJuIGNvbnZlcnRVbmRlY2lkZWRUb0NvbnRpZ3VvdXMoZ2xvYmFsRGF0YSk7CisgICAg
ICAgIHJldHVybiBjb252ZXJ0VW5kZWNpZGVkVG9Db250aWd1b3VzKHZtKTsKICAgICAgICAgCiAg
ICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIHJldHVybiBjb252ZXJ0
SW50MzJUb0NvbnRpZ3VvdXMoZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBjb252ZXJ0SW50
MzJUb0NvbnRpZ3VvdXModm0pOwogICAgICAgICAKICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJ
TkdfVFlQRVM6CiAgICAgICAgIGlmIChtb2RlID09IFJhZ2VDb252ZXJ0RG91YmxlVG9WYWx1ZSkK
LSAgICAgICAgICAgIHJldHVybiByYWdlQ29udmVydERvdWJsZVRvQ29udGlndW91cyhnbG9iYWxE
YXRhKTsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoZ2xvYmFsRGF0
YSk7CisgICAgICAgICAgICByZXR1cm4gcmFnZUNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXModm0p
OworICAgICAgICByZXR1cm4gY29udmVydERvdWJsZVRvQ29udGlndW91cyh2bSk7CiAgICAgICAg
IAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIHJl
dHVybiBDb250aWd1b3VzSlNWYWx1ZXMoKTsKQEAgLTEwMzAsNDUgKzEwMzAsNDUgQEAgQ29udGln
dW91c0pTVmFsdWVzIEpTT2JqZWN0OjplbnN1cmVDb250aQogICAgIH0KIH0KIAotQ29udGlndW91
c0pTVmFsdWVzIEpTT2JqZWN0OjplbnN1cmVDb250aWd1b3VzU2xvdyhKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCitDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNT
bG93KFZNJiB2bSkKIHsKLSAgICByZXR1cm4gZW5zdXJlQ29udGlndW91c1Nsb3coZ2xvYmFsRGF0
YSwgRW5jb2RlVmFsdWVBc0RvdWJsZSk7CisgICAgcmV0dXJuIGVuc3VyZUNvbnRpZ3VvdXNTbG93
KHZtLCBFbmNvZGVWYWx1ZUFzRG91YmxlKTsKIH0KIAotQ29udGlndW91c0pTVmFsdWVzIEpTT2Jq
ZWN0OjpyYWdlRW5zdXJlQ29udGlndW91c1Nsb3coSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQor
Q29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpyYWdlRW5zdXJlQ29udGlndW91c1Nsb3coVk0m
IHZtKQogewotICAgIHJldHVybiBlbnN1cmVDb250aWd1b3VzU2xvdyhnbG9iYWxEYXRhLCBSYWdl
Q29udmVydERvdWJsZVRvVmFsdWUpOworICAgIHJldHVybiBlbnN1cmVDb250aWd1b3VzU2xvdyh2
bSwgUmFnZUNvbnZlcnREb3VibGVUb1ZhbHVlKTsKIH0KIAotQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6ZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VTbG93KFZNJiB2bSkKIHsKICAg
ICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogICAgIAogICAgIHN3aXRjaCAoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6
CiAgICAgICAgIGlmIChVTkxJS0VMWShpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpKQotICAgICAg
ICAgICAgcmV0dXJuIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUlu
ZGV4aW5nTW9kZShnbG9iYWxEYXRhKTsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxBcnJh
eVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICByZXR1cm4gZW5zdXJlQXJyYXlTdG9y
YWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKHZtKTsKKyAgICAgICAgcmV0
dXJuIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2Uodm0pOwogICAgICAgICAKICAgICBjYXNlIEFM
TF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIEFTU0VSVCghaW5kZXhpbmdTaG91
bGRCZVNwYXJzZSgpKTsKICAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0
SW5kZXhpbmcoKSk7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3Jh
Z2UoZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0
b3JhZ2Uodm0pOwogICAgICAgICAKICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoK
ICAgICAgICAgQVNTRVJUKCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpOwogICAgICAgICBBU1NF
UlQoIXN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKTsKLSAgICAgICAgcmV0dXJu
IGNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4g
Y29udmVydEludDMyVG9BcnJheVN0b3JhZ2Uodm0pOwogICAgICAgICAKICAgICBjYXNlIEFMTF9E
T1VCTEVfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIEFTU0VSVCghaW5kZXhpbmdTaG91bGRCZVNw
YXJzZSgpKTsKICAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhp
bmcoKSk7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2UoZ2xvYmFs
RGF0YSk7CisgICAgICAgIHJldHVybiBjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2Uodm0pOwog
ICAgICAgICAKICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAg
ICBBU1NFUlQoIWluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSk7CiAgICAgICAgIEFTU0VSVCghc3Ry
dWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpOwotICAgICAgICByZXR1cm4gY29udmVy
dENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIGNv
bnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uodm0pOwogICAgICAgICAKICAgICBkZWZhdWx0
OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTA3NiwzMCArMTA3
NiwzMCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhCiAgICAgfQog
fQogCi1BcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRF
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorQXJy
YXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlKFZNJiB2bSkKIHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOiB7Ci0g
ICAgICAgIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKTsKLSAgICAgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChnbG9iYWxEYXRh
KTsKKyAgICAgICAgY3JlYXRlQXJyYXlTdG9yYWdlKHZtLCAwLCAwKTsKKyAgICAgICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcCogbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcCh2bSk7CiAgICAgICAg
IG1hcC0+c2V0U3BhcnNlTW9kZSgpOwogICAgICAgICByZXR1cm4gYXJyYXlTdG9yYWdlKCk7CiAg
ICAgfQogICAgICAgICAKICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6Ci0g
ICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdl
QWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2Uo
Z2xvYmFsRGF0YSkpOworICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
V2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5
U3RvcmFnZSh2bSkpOwogICAgICAgICAKICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBF
UzoKLSAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0
b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIGNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdl
KGdsb2JhbERhdGEpKTsKKyAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBjb252ZXJ0SW50MzJUb0FycmF5U3Rv
cmFnZSh2bSkpOwogICAgICAgICAKICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6
Ci0gICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9y
YWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2Uo
Z2xvYmFsRGF0YSkpOworICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
V2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIGNvbnZlcnREb3VibGVUb0FycmF5U3Rv
cmFnZSh2bSkpOwogICAgICAgICAKICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZ
UEVTOgotICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5
U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5
U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRl
eGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgY29udmVydENvbnRpZ3Vv
dXNUb0FycmF5U3RvcmFnZSh2bSkpOwogICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9S
QUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4
aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCkpOwogICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBDUkFTSCgpOwpA
QCAtMTEwNywyOSArMTEwNywyOSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJh
eVN0b3JhCiAgICAgfQogfQogCi12b2lkIEpTT2JqZWN0Ojpzd2l0Y2hUb1Nsb3dQdXRBcnJheVN0
b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBKU09iamVjdDo6c3dpdGNoVG9T
bG93UHV0QXJyYXlTdG9yYWdlKFZNJiB2bSkKIHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoK
LSAgICAgICAgY29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIEFsbG9j
YXRlU2xvd1B1dEFycmF5U3RvcmFnZSk7CisgICAgICAgIGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5
U3RvcmFnZSh2bSwgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgotICAgICAgICBj
b252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBBbGxvY2F0ZVNsb3dQdXRBcnJh
eVN0b3JhZ2UpOworICAgICAgICBjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZSh2bSwgQWxsb2Nh
dGVTbG93UHV0QXJyYXlTdG9yYWdlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNh
c2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgY29udmVydERvdWJsZVRvQXJy
YXlTdG9yYWdlKGdsb2JhbERhdGEsIEFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZSk7CisgICAg
ICAgIGNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSh2bSwgQWxsb2NhdGVTbG93UHV0QXJyYXlT
dG9yYWdlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0NPTlRJR1VP
VVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3Jh
Z2UoZ2xvYmFsRGF0YSwgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlKTsKKyAgICAgICAgY29u
dmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZSh2bSwgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9y
YWdlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24o
Z2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSk7Ci0g
ICAgICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBuZXdTdHJ1Y3R1cmUpOworICAgICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KHZtLCBzdHJ1Y3R1cmUoKSwgU3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKTsKKyAgICAgICAg
c2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIApAQCAtMTE0MywyMyArMTE0MywyMyBAQCB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RW
aXJ0dWFsKEpTT2JqZWN0CiB7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc0dldHRlclNldHRlcigpICYm
ICEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7Ci0g
ICAgb2JqZWN0LT5wdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KGV4
ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcywgc2xvdCwg
Z2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdEludGVybmFs
PFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4oZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgYXR0cmlidXRlcywgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKIH0KIAotdm9p
ZCBKU09iamVjdDo6c2V0UHJvdG90eXBlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1
ZSBwcm90b3R5cGUpCit2b2lkIEpTT2JqZWN0OjpzZXRQcm90b3R5cGUoVk0mIHZtLCBKU1ZhbHVl
IHByb3RvdHlwZSkKIHsKICAgICBBU1NFUlQocHJvdG90eXBlKTsKICAgICBpZiAocHJvdG90eXBl
LmlzT2JqZWN0KCkpCi0gICAgICAgIGdsb2JhbERhdGEucHJvdG90eXBlTWFwLmFkZFByb3RvdHlw
ZShhc09iamVjdChwcm90b3R5cGUpKTsKKyAgICAgICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3Rv
dHlwZShhc09iamVjdChwcm90b3R5cGUpKTsKICAgICAKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSA9IFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUoKSwgcHJvdG90eXBlKTsKLSAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgbmV3
U3RydWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6Y2hh
bmdlUHJvdG90eXBlVHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKCksIHByb3RvdHlwZSk7CisgICAg
c2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIAogICAgIGlmICghbmV3U3RydWN0
dXJlLT5hbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoZ2xvYmFsRGF0YS5wcm90b3R5cGVNYXAuaXNQcm90
b3R5cGUodGhpcykpIHsKLSAgICAgICAgbmV3U3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKS0+aGF2
ZUFCYWRUaW1lKGdsb2JhbERhdGEpOworICAgIGlmICh2bS5wcm90b3R5cGVNYXAuaXNQcm90b3R5
cGUodGhpcykpIHsKKyAgICAgICAgbmV3U3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKS0+aGF2ZUFC
YWRUaW1lKHZtKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTExNjksMTAgKzEx
NjksMTAgQEAgdm9pZCBKU09iamVjdDo6c2V0UHJvdG90eXBlKEpTR2xvYmFsRGF0YQogICAgIGlm
IChzaG91bGRVc2VTbG93UHV0KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpCiAgICAgICAg
IHJldHVybjsKICAgICAKLSAgICBzd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0
YSk7CisgICAgc3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKHZtKTsKIH0KIAotYm9vbCBKU09i
amVjdDo6c2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlY2soSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU1ZhbHVlIHByb3RvdHlwZSkKK2Jvb2wgSlNPYmplY3Q6OnNldFByb3RvdHlwZVdpdGhDeWNs
ZUNoZWNrKFZNJiB2bSwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CiAgICAgSlNWYWx1ZSBjaGVja0Zv
ciA9IHRoaXM7CiAgICAgaWYgKHRoaXMtPmlzR2xvYmFsT2JqZWN0KCkpCkBAIC0xMTg0LDcgKzEx
ODQsNyBAQCBib29sIEpTT2JqZWN0OjpzZXRQcm90b3R5cGVXaXRoQ3ljbGVDaGVjCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG5leHRQcm90b3R5cGUgPSBhc09iamVjdChuZXh0
UHJvdG90eXBlKS0+cHJvdG90eXBlKCk7CiAgICAgfQotICAgIHNldFByb3RvdHlwZShnbG9iYWxE
YXRhLCBwcm90b3R5cGUpOworICAgIHNldFByb3RvdHlwZSh2bSwgcHJvdG90eXBlKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTIwNCwyMSArMTIwNCwyMSBAQCB2b2lkIEpTT2JqZWN0Ojpw
dXREaXJlY3RBY2Nlc3NvcihFeGVjU3RhCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwotICAgIHB1dERpcmVj
dEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4oZ2xvYmFsRGF0YSwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgYXR0cmlidXRlcywgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsK
KyAgICBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZtLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1
ZSkpOwogCiAgICAgLy8gcHV0RGlyZWN0IHdpbGwgY2hhbmdlIG91ciBTdHJ1Y3R1cmUgaWYgd2Ug
YWRkIGEgbmV3IHByb3BlcnR5LiBGb3IKICAgICAvLyBnZXR0ZXJzIGFuZCBzZXR0ZXJzLCB0aG91
Z2gsIHdlIGFsc28gbmVlZCB0byBjaGFuZ2Ugb3VyIFN0cnVjdHVyZQogICAgIC8vIGlmIHdlIG92
ZXJyaWRlIGFuIGV4aXN0aW5nIG5vbi1nZXR0ZXIgb3Igbm9uLXNldHRlci4KICAgICBpZiAoc2xv
dC50eXBlKCkgIT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkKLSAgICAgICAgc2V0U3Ry
dWN0dXJlKGdsb2JhbERhdGEsIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihn
bG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKSk7CisgICAg
ICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9u
KHZtLCBzdHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKSk7CiAKICAgICBpZiAo
YXR0cmlidXRlcyAmIFJlYWRPbmx5KQogICAgICAgICBzdHJ1Y3R1cmUoKS0+c2V0Q29udGFpbnNS
ZWFkT25seVByb3BlcnRpZXMoKTsKIAotICAgIHN0cnVjdHVyZSgpLT5zZXRIYXNHZXR0ZXJTZXR0
ZXJQcm9wZXJ0aWVzKHByb3BlcnR5TmFtZSA9PSBnbG9iYWxEYXRhLnByb3BlcnR5TmFtZXMtPnVu
ZGVyc2NvcmVQcm90byk7CisgICAgc3RydWN0dXJlKCktPnNldEhhc0dldHRlclNldHRlclByb3Bl
cnRpZXMocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90byk7
CiB9CiAKIGJvb2wgSlNPYmplY3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKQEAgLTEyNDcsMTYgKzEyNDcsMTYgQEAgYm9vbCBK
U09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZQogCiAgICAgdW5zaWduZWQgYXR0cmli
dXRlczsKICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7Ci0gICAgaWYgKGlzVmFsaWRPZmZzZXQo
dGhpc09iamVjdC0+c3RydWN0dXJlKCktPmdldChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5
TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSkpKSB7Ci0gICAgICAgIGlmIChhdHRyaWJ1
dGVzICYgRG9udERlbGV0ZSAmJiAhZXhlYy0+Z2xvYmFsRGF0YSgpLmlzSW5EZWZpbmVPd25Qcm9w
ZXJ0eSgpKQorICAgIGlmIChpc1ZhbGlkT2Zmc2V0KHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5n
ZXQoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKSkp
IHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBEb250RGVsZXRlICYmICFleGVjLT52bSgpLmlz
SW5EZWZpbmVPd25Qcm9wZXJ0eSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB0aGlzT2JqZWN0LT5yZW1vdmVEaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5h
bWUpOworICAgICAgICB0aGlzT2JqZWN0LT5yZW1vdmVEaXJlY3QoZXhlYy0+dm0oKSwgcHJvcGVy
dHlOYW1lKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgLy8gTG9vayBpbiB0
aGUgc3RhdGljIGhhc2h0YWJsZSBvZiBwcm9wZXJ0aWVzCiAgICAgY29uc3QgSGFzaEVudHJ5KiBl
bnRyeSA9IHRoaXNPYmplY3QtPmZpbmRQcm9wZXJ0eUhhc2hFbnRyeShleGVjLCBwcm9wZXJ0eU5h
bWUpOwotICAgIGlmIChlbnRyeSAmJiBlbnRyeS0+YXR0cmlidXRlcygpICYgRG9udERlbGV0ZSAm
JiAhZXhlYy0+Z2xvYmFsRGF0YSgpLmlzSW5EZWZpbmVPd25Qcm9wZXJ0eSgpKQorICAgIGlmIChl
bnRyeSAmJiBlbnRyeS0+YXR0cmlidXRlcygpICYgRG9udERlbGV0ZSAmJiAhZXhlYy0+dm0oKS5p
c0luRGVmaW5lT3duUHJvcGVydHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyB0aGlzIGJ1
aWx0aW4gcHJvcGVydHkgY2FuJ3QgYmUgZGVsZXRlZAogCiAgICAgLy8gRklYTUU6IFNob3VsZCB0
aGUgY29kZSBoZXJlIGFjdHVhbGx5IGRvIHNvbWUgZGVsZXRpb24/CkBAIC0xNDMwLDcgKzE0MzAs
NyBAQCBib29sIEpTT2JqZWN0Ojpwcm9wZXJ0eUlzRW51bWVyYWJsZShFeGVjCiBib29sIEpTT2Jq
ZWN0OjpnZXRQcm9wZXJ0eVNwZWNpZmljVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU0NlbGwqJiBzcGVjaWZpY1ZhbHVlKSBjb25zdAogewogICAgIHVu
c2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgaWYgKGlzVmFsaWRPZmZzZXQoc3RydWN0dXJlKCktPmdl
dChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNW
YWx1ZSkpKQorICAgIGlmIChpc1ZhbGlkT2Zmc2V0KHN0cnVjdHVyZSgpLT5nZXQoZXhlYy0+dm0o
KSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKSkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgLy8gVGhpcyBjb3VsZCBiZSBhIGZ1bmN0aW9uIHdpdGhpbiB0aGUg
c3RhdGljIHRhYmxlPyAtIHNob3VsZCBwcm9iYWJseQpAQCAtMTUzNSw3ICsxNTM1LDcgQEAgdm9p
ZCBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbQogICAgIGdldENsYXNzUHJvcGVy
dHlOYW1lcyhleGVjLCBvYmplY3QtPmNsYXNzSW5mbygpLCBwcm9wZXJ0eU5hbWVzLCBtb2RlLCBv
YmplY3QtPnN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSk7CiAKICAgICBib29sIGNhbkNhY2hlUHJv
cGVydGllc0Zyb21TdHJ1Y3R1cmUgPSAhcHJvcGVydHlOYW1lcy5zaXplKCk7Ci0gICAgb2JqZWN0
LT5zdHJ1Y3R1cmUoKS0+Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBvYmplY3QtPnN0cnVjdHVyZSgpLT5n
ZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKIAogICAgIGlmIChjYW5DYWNoZVByb3BlcnRpZXNGcm9tU3RydWN0dXJlKQogICAgICAg
ICBwcm9wZXJ0eU5hbWVzLnNldE51bUNhY2hlYWJsZVNsb3RzRm9yT2JqZWN0KG9iamVjdCwgcHJv
cGVydHlOYW1lcy5zaXplKCkpOwpAQCAtMTU2MiwyNyArMTU2MiwyNyBAQCBKU09iamVjdCogSlNP
YmplY3Q6OnRvVGhpc09iamVjdChKU0NlbGwqCiAgICAgcmV0dXJuIGpzQ2FzdDxKU09iamVjdCo+
KGNlbGwpOwogfQogCi12b2lkIEpTT2JqZWN0OjpzZWFsKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKK3ZvaWQgSlNPYmplY3Q6OnNlYWwoVk0mIHZtKQogewotICAgIGlmIChpc1NlYWxlZChnbG9i
YWxEYXRhKSkKKyAgICBpZiAoaXNTZWFsZWQodm0pKQogICAgICAgICByZXR1cm47Ci0gICAgcHJl
dmVudEV4dGVuc2lvbnMoZ2xvYmFsRGF0YSk7Ci0gICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEs
IFN0cnVjdHVyZTo6c2VhbFRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCkpKTsKKyAg
ICBwcmV2ZW50RXh0ZW5zaW9ucyh2bSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6
OnNlYWxUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSkpOwogfQogCi12b2lkIEpTT2JqZWN0Ojpm
cmVlemUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBKU09iamVjdDo6ZnJlZXplKFZN
JiB2bSkKIHsKLSAgICBpZiAoaXNGcm96ZW4oZ2xvYmFsRGF0YSkpCisgICAgaWYgKGlzRnJvemVu
KHZtKSkKICAgICAgICAgcmV0dXJuOwotICAgIHByZXZlbnRFeHRlbnNpb25zKGdsb2JhbERhdGEp
OwotICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBTdHJ1Y3R1cmU6OmZyZWV6ZVRyYW5zaXRp
b24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCkpKTsKKyAgICBwcmV2ZW50RXh0ZW5zaW9ucyh2bSk7
CisgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6OmZyZWV6ZVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSgpKSk7CiB9CiAKLXZvaWQgSlNPYmplY3Q6OnByZXZlbnRFeHRlbnNpb25zKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgSlNPYmplY3Q6OnByZXZlbnRFeHRlbnNpb25zKFZN
JiB2bSkKIHsKLSAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSk7Cisg
ICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKHZtKTsKICAgICBpZiAoaXNFeHRlbnNpYmxl
KCkpCi0gICAgICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBTdHJ1Y3R1cmU6OnByZXZlbnRF
eHRlbnNpb25zVHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSkpOworICAgICAgICBz
ZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKHZt
LCBzdHJ1Y3R1cmUoKSkpOwogfQogCiAvLyBUaGlzIHByZXNlbnRseSB3aWxsIGZsYXR0ZW4gdG8g
YW4gdW5jYWNoYWJsZSBkaWN0aW9uYXJ5OyB0aGlzIGlzIHN1aXRhYmxlCkBAIC0xNTkwLDcgKzE1
OTAsNyBAQCB2b2lkIEpTT2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyhKU0dsb2JhCiB2b2lkIEpT
T2JqZWN0OjpyZWlmeVN0YXRpY0Z1bmN0aW9uc0ZvckRlbGV0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgQVNTRVJUKCFzdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCkpOwotICAgIEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogCiAgICAgLy8gSWYgdGhpcyBvYmplY3QncyBDbGFzc0luZm8gaGFzIG5vIHN0YXRpYyBw
cm9wZXJ0aWVzLCB0aGVuIG5vdGhpbmcgdG8gcmVpZnkhCiAgICAgLy8gV2UgY2FuIHNhZmVseSBz
ZXQgdGhlIGZsYWcgdG8gYXZvaWQgdGhlIGV4cGVuc2l2ZSBjaGVjayBhZ2FpbiBpbiB0aGUgZnV0
dXJlLgpAQCAtMTYwMCwzNyArMTYwMCwzNyBAQCB2b2lkIEpTT2JqZWN0OjpyZWlmeVN0YXRpY0Z1
bmN0aW9uc0ZvckRlCiAgICAgfQogCiAgICAgaWYgKCFzdHJ1Y3R1cmUoKS0+aXNVbmNhY2hlYWJs
ZURpY3Rpb25hcnkoKSkKLSAgICAgICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0cnVjdHVy
ZTo6dG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSgpKSk7CisgICAgICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjp0b1VuY2FjaGVhYmxl
RGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpKSk7CiAKICAgICBmb3IgKGNvbnN0
IENsYXNzSW5mbyogaW5mbyA9IGNsYXNzSW5mbygpOyBpbmZvOyBpbmZvID0gaW5mby0+cGFyZW50
Q2xhc3MpIHsKICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBoYXNoVGFibGUgPSBpbmZvLT5wcm9w
SGFzaFRhYmxlKGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpOwogICAgICAgICBpZiAoIWhh
c2hUYWJsZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xv
dDsKLSAgICAgICAgZm9yIChIYXNoVGFibGU6OkNvbnN0SXRlcmF0b3IgaXRlciA9IGhhc2hUYWJs
ZS0+YmVnaW4oZ2xvYmFsRGF0YSk7IGl0ZXIgIT0gaGFzaFRhYmxlLT5lbmQoZ2xvYmFsRGF0YSk7
ICsraXRlcikgeworICAgICAgICBmb3IgKEhhc2hUYWJsZTo6Q29uc3RJdGVyYXRvciBpdGVyID0g
aGFzaFRhYmxlLT5iZWdpbih2bSk7IGl0ZXIgIT0gaGFzaFRhYmxlLT5lbmQodm0pOyArK2l0ZXIp
IHsKICAgICAgICAgICAgIGlmIChpdGVyLT5hdHRyaWJ1dGVzKCkgJiBGdW5jdGlvbikKLSAgICAg
ICAgICAgICAgICBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChnbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpLCAqaXRlciwgdGhpcywgSWRlbnRpZmllcigmZ2xvYmFsRGF0YSwgaXRlci0+a2V5KCkp
LCBzbG90KTsKKyAgICAgICAgICAgICAgICBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChnbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpLCAqaXRlciwgdGhpcywgSWRlbnRpZmllcigmdm0sIGl0ZXIt
PmtleSgpKSwgc2xvdCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBzdHJ1Y3R1cmUoKS0+c2V0
U3RhdGljRnVuY3Rpb25zUmVpZmllZCgpOwogfQogCi1ib29sIEpTT2JqZWN0OjpyZW1vdmVEaXJl
Y3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQor
Ym9vbCBKU09iamVjdDo6cmVtb3ZlRGlyZWN0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkKIHsKLSAgICBpZiAoIWlzVmFsaWRPZmZzZXQoc3RydWN0dXJlKCktPmdldChnbG9iYWxE
YXRhLCBwcm9wZXJ0eU5hbWUpKSkKKyAgICBpZiAoIWlzVmFsaWRPZmZzZXQoc3RydWN0dXJlKCkt
PmdldCh2bSwgcHJvcGVydHlOYW1lKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICBpZiAoc3RydWN0dXJlKCktPmlzVW5jYWNoZWFibGVE
aWN0aW9uYXJ5KCkpIHsKLSAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlKCktPnJlbW92ZVByb3Bl
cnR5V2l0aG91dFRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAg
b2Zmc2V0ID0gc3RydWN0dXJlKCktPnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0s
IHByb3BlcnR5TmFtZSk7CiAgICAgICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcHV0RGlyZWN0VW5kZWZpbmVkKG9mZnNl
dCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHNldFN0cnVjdHVyZShnbG9i
YWxEYXRhLCBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBvZmZzZXQpKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0s
IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwgcHJv
cGVydHlOYW1lLCBvZmZzZXQpKTsKICAgICBpZiAob2Zmc2V0ID09IGludmFsaWRPZmZzZXQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBwdXREaXJlY3RVbmRlZmluZWQob2Zmc2V0KTsKQEAg
LTE2NTIsOSArMTY1Miw5IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEluZGV4ZWREZXNjcmlwdG9yKEV4
ZWMKIHsKICAgICBpZiAoZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKICAgICAgICAg
aWYgKGRlc2NyaXB0b3IudmFsdWUoKSkKLSAgICAgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIGRlc2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAgICAgICBl
bnRyeUluTWFwLT5zZXQoZXhlYy0+dm0oKSwgdGhpcywgZGVzY3JpcHRvci52YWx1ZSgpKTsKICAg
ICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQotICAg
ICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywganNVbmRl
ZmluZWQoKSk7CisgICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+dm0oKSwgdGhpcywg
anNVbmRlZmluZWQoKSk7CiAgICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlw
dG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5BY2Nlc3Nv
cjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE2NzMsMTEgKzE2NzMsMTEgQEAgdm9pZCBK
U09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0b3IoRXhlYwogCiAgICAgICAgIEdldHRlclNldHRl
ciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKICAgICAgICAgaWYgKGdl
dHRlcikKLSAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBnZXR0ZXIpOworICAgICAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihleGVjLT52bSgpLCBn
ZXR0ZXIpOwogICAgICAgICBpZiAoc2V0dGVyKQotICAgICAgICAgICAgYWNjZXNzb3ItPnNldFNl
dHRlcihleGVjLT5nbG9iYWxEYXRhKCksIHNldHRlcik7CisgICAgICAgICAgICBhY2Nlc3Nvci0+
c2V0U2V0dGVyKGV4ZWMtPnZtKCksIHNldHRlcik7CiAKLSAgICAgICAgZW50cnlJbk1hcC0+c2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYWNjZXNzb3IpOworICAgICAgICBlbnRyeUluTWFw
LT5zZXQoZXhlYy0+dm0oKSwgdGhpcywgYWNjZXNzb3IpOwogICAgICAgICBlbnRyeUluTWFwLT5h
dHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVz
Y3JpcHRvcikgJiB+UmVhZE9ubHk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNzAxLDEx
ICsxNzAxLDExIEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSgKICAg
ICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwgZGVzY3JpcHRvci52
YWx1ZSgpLCAwLCB0aHJvd0V4Y2VwdGlvbiA/IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgOiBQ
dXREaXJlY3RJbmRleFNob3VsZE5vdFRocm93KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
KGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0Fu
ZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShleGVjLT52bSgpKTsKICAgICB9CiAKICAgICBp
ZiAoZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpCi0gICAg
ICAgIG5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNjZXNzb3JzKGV4ZWMtPmdsb2JhbERhdGEoKSk7
CisgICAgICAgIG5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNjZXNzb3JzKGV4ZWMtPnZtKCkpOwog
CiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5tX3NwYXJzZU1hcC5nZXQoKTsKICAgICBSRUxFQVNFX0FTU0VSVChtYXApOwpAQCAtMTgw
OCwxMCArMTgwOCwxMCBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHko
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVNwYXJzZUFycmF5VmFsdWVNYXAqIEpTT2JqZWN0Ojph
bGxvY2F0ZVNwYXJzZUluZGV4TWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK1NwYXJzZUFy
cmF5VmFsdWVNYXAqIEpTT2JqZWN0OjphbGxvY2F0ZVNwYXJzZUluZGV4TWFwKFZNJiB2bSkKIHsK
LSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiByZXN1bHQgPSBTcGFyc2VBcnJheVZhbHVlTWFwOjpj
cmVhdGUoZ2xvYmFsRGF0YSk7Ci0gICAgYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLnNldChn
bG9iYWxEYXRhLCB0aGlzLCByZXN1bHQpOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIHJlc3Vs
dCA9IFNwYXJzZUFycmF5VmFsdWVNYXA6OmNyZWF0ZSh2bSk7CisgICAgYXJyYXlTdG9yYWdlKCkt
Pm1fc3BhcnNlTWFwLnNldCh2bSwgdGhpcywgcmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCkBAIC0xODY1LDIxICsxODY1LDIxIEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlv
bmRWZWN0b3JMZW4KICAgICAvLyBvciBlcXVhbCB0byB0aGUgdmVjdG9yIGxlbmd0aC4KICAgICBB
U1NFUlQoaSA+PSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgIAotICAgIEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIAogICAgIGlmIChpID49IE1BWF9BUlJBWV9JTkRFWCAtIDEKICAgICAg
ICAgfHwgKGkgPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWAogICAgICAgICAgICAgJiYgIWlzRGVu
c2VFbm91Z2hGb3JWZWN0b3IoaSwgY291bnRFbGVtZW50czxpbmRleGluZ1NoYXBlPihtX2J1dHRl
cmZseSkpKSkgewogICAgICAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOwotICAgICAg
ICBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KGdsb2JhbERhdGEpOwotICAgICAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworICAg
ICAgICBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KHZtKTsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1
ZU1hcCogbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcCh2bSk7CiAgICAgICAgIG1hcC0+cHV0
RW50cnkoZXhlYywgdGhpcywgaSwgdmFsdWUsIGZhbHNlKTsKICAgICAgICAgQVNTRVJUKGkgPj0g
YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpKTsKICAgICAgICAgYXJyYXlTdG9yYWdlKCktPnNldExl
bmd0aChpICsgMSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBlbnN1cmVMZW5ndGgo
Z2xvYmFsRGF0YSwgaSArIDEpOworICAgIGVuc3VyZUxlbmd0aCh2bSwgaSArIDEpOwogCiAgICAg
UkVMRUFTRV9BU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgc3dp
dGNoIChpbmRleGluZ1NoYXBlKSB7CkBAIC0xODk3LDcgKzE4OTcsNyBAQCB2b2lkIEpTT2JqZWN0
OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENv
bnRpZ3VvdXNTaGFwZToKLSAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91
cygpW2ldLnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAg
ICAgZGVmYXVsdDoKQEAgLTE5MDcsNyArMTkwNyw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5k
ZXhCZXlvbmRWZWN0b3JMZW4KIAogdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7Ci0g
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAKICAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGlu
ZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCiAgICAgQVNTRVJUKGkg
PD0gTUFYX0FSUkFZX0lOREVYKTsKQEAgLTE5MjUsMTUgKzE5MjUsMTUgQEAgdm9pZCBKU09iamVj
dDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVu
Z3RoKGkgKyAxKTsKIAogICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRvIHN0
aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9yLgot
ICAgICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBp
ICsgMSkpKSB7CisgICAgICAgIGlmIChMSUtFTFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwg
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKHZt
LCBpICsgMSkpKSB7CiAgICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ug
c2luY2UgaXQgaGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZl
Y3Rvci4KICAgICAgICAgICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgICAg
IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAg
ICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICAg
ICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2Ug
YSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYg
YWRkIHRoZSB2YWx1ZS4KLSAgICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChleGVj
LT5nbG9iYWxEYXRhKCkpOworICAgICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGV4
ZWMtPnZtKCkpOwogICAgICAgICBtYXAtPnB1dEVudHJ5KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBz
aG91bGRUaHJvdyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xOTU0LDcgKzE5NTQsNyBA
QCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgLy8gV2UgYXJl
IGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBi
ZSBkb2luZyBzby4KICAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFw
IGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBp
ZiBhbGxvY2F0aW9uIGZhaWxzLgogICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7Ci0gICAgaWYgKG1hcC0+c3Bh
cnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5B
cnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3Ro
KSkgeworICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3Rv
cihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVj
LT52bSgpLCBsZW5ndGgpKSB7CiAgICAgICAgIG1hcC0+cHV0RW50cnkoZXhlYywgdGhpcywgaSwg
dmFsdWUsIHNob3VsZFRocm93KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE5NjcsMTkg
KzE5NjcsMTkgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAg
ICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+a2V5XS5zZXQoZ2xvYmFs
RGF0YSwgdGhpcywgaXQtPnZhbHVlLmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgICAgIHZlY3Rv
cltpdC0+a2V5XS5zZXQodm0sIHRoaXMsIGl0LT52YWx1ZS5nZXROb25TcGFyc2VNb2RlKCkpOwog
ICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOwogCiAgICAgLy8gU3RvcmUgdGhlIG5ldyBw
cm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1
ZVNsb3QgPSB2ZWN0b3JbaV07CiAgICAgaWYgKCF2YWx1ZVNsb3QpCiAgICAgICAgICsrc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHZhbHVlKTsKKyAgICB2YWx1ZVNsb3Quc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiB9CiAKIHZv
aWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogewotICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogCiAgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0
aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgogICAgIEFTU0VSVChpIDw9IE1B
WF9BUlJBWV9JTkRFWCk7CkBAIC0xOTg5LDIyICsxOTg5LDIyIEBAIHZvaWQgSlNPYmplY3Q6OnB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4KICAgICAgICAgaWYgKGluZGV4aW5nU2hvdWxkQmVTcGFy
c2UoKSkgewogICAgICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJh
eVN0b3JhZ2UoCiAgICAgICAgICAgICAgICAgZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LAot
ICAgICAgICAgICAgICAgIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFy
eUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7CisgICAgICAgICAgICAgICAgZW5zdXJlQXJyYXlT
dG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKHZtKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAoaSA+PSBNSU5fU1BBUlNFX0FSUkFZ
X0lOREVYKSB7CiAgICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFy
cmF5U3RvcmFnZSgKLSAgICAgICAgICAgICAgICBleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cs
IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKSk7CisgICAgICAgICAgICAgICAg
ZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBjcmVhdGVBcnJheVN0b3JhZ2Uodm0sIDAsIDAp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUo
KS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSkgewotICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIGkgKyAxLCBnZXROZXdWZWN0
b3JMZW5ndGgoMCwgMCwgaSArIDEpKTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ld
LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2Uodm0sIGkgKyAxLCBnZXROZXdWZWN0b3JMZW5n
dGgoMCwgMCwgaSArIDEpKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldCh2
bSwgdGhpcywgdmFsdWUpOwogICAgICAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
cisrOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICBjcmVhdGVJbml0aWFsQ29udGlndW91cyhnbG9iYWxEYXRhLCBpICsgMSlbaV0uc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXModm0s
IGkgKyAxKVtpXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgICAgICAKQEAgLTIwNDksNyArMjA0OSw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW4KIAogYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNW
YWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlIG1vZGUs
IEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEg
PSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAKICAg
ICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0
aGUgY3VycmVudCB2ZWN0b3IuCiAgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpKTsKQEAgLTIwNzIsMTUgKzIwNzIsMTUgQEAgYm9vbCBKU09iamVj
dDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0bwogICAgICAgICBpZiAoTElLRUxZKAogICAgICAg
ICAgICAgICAgICFhdHRyaWJ1dGVzCiAgICAgICAgICAgICAgICAgJiYgKGlzRGVuc2VFbm91Z2hG
b3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpCi0gICAgICAgICAgICAg
ICAgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgeworICAgICAg
ICAgICAgICAgICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKHZtLCBpICsgMSkpKSB7CiAgICAgICAg
ICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ugc2luY2UgaXQgaGFzIGxpa2VseSBi
ZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZlY3Rvci4KICAgICAgICAgICAgIHN0
b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ld
LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3Zl
Y3RvcltpXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICAgICAgICAgICsrc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcjsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAg
ICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xk
IHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgot
ICAgICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7
CisgICAgICAgIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZXhlYy0+dm0oKSk7CiAgICAg
ICAgIHJldHVybiBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgYXR0cmlidXRl
cywgbW9kZSk7CiAgICAgfQogCkBAIC0yMTAxLDcgKzIxMDEsNyBAQCBib29sIEpTT2JqZWN0Ojpw
dXREaXJlY3RJbmRleEJleW9uZFZlY3RvCiAgICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBh
IG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2luZyBzby4KICAgICAv
LyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMg
c2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxz
LgogICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yICsgbWFwLT5zaXplKCk7Ci0gICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8IGF0dHJp
YnV0ZXMgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5
KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKQor
ICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCBhdHRyaWJ1dGVzIHx8ICFpc0RlbnNlRW5vdWdo
Rm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVu
Z3RoKGV4ZWMtPnZtKCksIGxlbmd0aCkpCiAgICAgICAgIHJldHVybiBtYXAtPnB1dERpcmVjdChl
eGVjLCB0aGlzLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSk7CiAKICAgICAvLyBSZXJlYWQg
bV9zdG9yYWdlIGFmdGVyIGluY3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJ
blZlY3Rvci4KQEAgLTIxMTIsNTEgKzIxMTIsNTEgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0
SW5kZXhCZXlvbmRWZWN0bwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3Rv
cmFnZS0+bV92ZWN0b3I7CiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbWFwLT5lbmQoKTsKICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3Rv
cltpdC0+a2V5XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnZhbHVlLmdldE5vblNwYXJzZU1v
ZGUoKSk7CisgICAgICAgIHZlY3RvcltpdC0+a2V5XS5zZXQodm0sIHRoaXMsIGl0LT52YWx1ZS5n
ZXROb25TcGFyc2VNb2RlKCkpOwogICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOwogCiAg
ICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCiAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07CiAgICAgaWYgKCF2YWx1ZVNs
b3QpCiAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICB2YWx1ZVNs
b3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICB2YWx1ZVNsb3Quc2V0KHZtLCB0
aGlzLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgSlNPYmplY3Q6OnB1dERp
cmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwg
SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlIG1v
ZGUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKICAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlk
IGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCiAgICAg
QVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKICAgICAKICAgICBpZiAoYXR0cmlidXRlcyAm
IChSZWFkT25seSB8IEFjY2Vzc29yKSkKLSAgICAgICAgbm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRB
Y2Nlc3NvcnMoZ2xvYmFsRGF0YSk7CisgICAgICAgIG5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNj
ZXNzb3JzKHZtKTsKICAgICAKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgewogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGlmIChp
bmRleGluZ1Nob3VsZEJlU3BhcnNlKCkgfHwgYXR0cmlidXRlcykgewogICAgICAgICAgICAgcmV0
dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKICAg
ICAgICAgICAgICAgICBleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwKLSAgICAgICAg
ICAgICAgICBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGlu
Z01vZGUoZ2xvYmFsRGF0YSkpOworICAgICAgICAgICAgICAgIGVuc3VyZUFycmF5U3RvcmFnZUV4
aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSh2bSkpOwogICAgICAgICB9CiAgICAg
ICAgIGlmIChpID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpIHsKICAgICAgICAgICAgIHJldHVy
biBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCi0gICAg
ICAgICAgICAgICAgZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNyZWF0ZUFycmF5
U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKSk7CisgICAgICAgICAgICAgICAgZXhlYywgaSwgdmFs
dWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNyZWF0ZUFycmF5U3RvcmFnZSh2bSwgMCwgMCkpOwogICAg
ICAgICB9CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSkg
ewotICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdl
KGdsb2JhbERhdGEsIGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoMCwgMCwgaSArIDEpKTsKLSAg
ICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1
ZSk7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3Jh
Z2Uodm0sIGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoMCwgMCwgaSArIDEpKTsKKyAgICAgICAg
ICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgICAgICAg
ICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGNyZWF0ZUluaXRpYWxDb250aWd1b3Vz
KGdsb2JhbERhdGEsIGkgKyAxKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAg
ICAgICBjcmVhdGVJbml0aWFsQ29udGlndW91cyh2bSwgaSArIDEpW2ldLnNldCh2bSwgdGhpcywg
dmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
QUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzogewotICAgICAgICBjb252ZXJ0VW5kZWNpZGVk
Rm9yVmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB2YWx1ZSk7CisgICAgICAgIGNvbnZlcnRVbmRl
Y2lkZWRGb3JWYWx1ZShleGVjLT52bSgpLCB2YWx1ZSk7CiAgICAgICAgIC8vIFJlbG9vcC4KICAg
ICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBt
b2RlKTsKICAgICB9CkBAIC0yMTY0LDEwICsyMTY0LDEwIEBAIGJvb2wgSlNPYmplY3Q6OnB1dERp
cmVjdEluZGV4QmV5b25kVmVjdG8KICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzog
ewogICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChSZWFkT25seSB8IEFjY2Vzc29yKSkgewogICAg
ICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5
U3RvcmFnZSgKLSAgICAgICAgICAgICAgICBleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9k
ZSwgY29udmVydEludDMyVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAgICAgICAgICAg
ICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjb252ZXJ0SW50MzJUb0FycmF5
U3RvcmFnZSh2bSkpOwogICAgICAgICB9CiAgICAgICAgIGlmICghdmFsdWUuaXNJbnQzMigpKSB7
Ci0gICAgICAgICAgICBjb252ZXJ0SW50MzJGb3JWYWx1ZShnbG9iYWxEYXRhLCB2YWx1ZSk7Cisg
ICAgICAgICAgICBjb252ZXJ0SW50MzJGb3JWYWx1ZSh2bSwgdmFsdWUpOwogICAgICAgICAgICAg
cmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIGksIHZhbHVlLCBh
dHRyaWJ1dGVzLCBtb2RlKTsKICAgICAgICAgfQogICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVj
dG9yTGVuZ3RoV2l0aG91dEF0dHJpYnV0ZXM8SW50MzJTaGFwZT4oZXhlYywgaSwgdmFsdWUpOwpA
QCAtMjE3NywxNSArMjE3NywxNSBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9u
ZFZlY3RvCiAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGlm
IChhdHRyaWJ1dGVzICYgKFJlYWRPbmx5IHwgQWNjZXNzb3IpKSB7CiAgICAgICAgICAgICByZXR1
cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAotICAg
ICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjb252ZXJ0RG91
YmxlVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAgICAgICAgICAgICAgIGV4ZWMsIGks
IHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2Uodm0p
KTsKICAgICAgICAgfQogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpIHsKLSAgICAgICAg
ICAgIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBj
b252ZXJ0RG91YmxlVG9Db250aWd1b3VzKHZtKTsKICAgICAgICAgICAgIHJldHVybiBwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9k
ZSk7CiAgICAgICAgIH0KICAgICAgICAgZG91YmxlIHZhbHVlQXNEb3VibGUgPSB2YWx1ZS5hc051
bWJlcigpOwogICAgICAgICBpZiAodmFsdWVBc0RvdWJsZSAhPSB2YWx1ZUFzRG91YmxlKSB7Ci0g
ICAgICAgICAgICBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKGdsb2JhbERhdGEpOworICAgICAg
ICAgICAgY29udmVydERvdWJsZVRvQ29udGlndW91cyh2bSk7CiAgICAgICAgICAgICByZXR1cm4g
cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0
ZXMsIG1vZGUpOwogICAgICAgICB9CiAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGhXaXRob3V0QXR0cmlidXRlczxEb3VibGVTaGFwZT4oZXhlYywgaSwgdmFsdWUpOwpAQCAtMjE5
NSw3ICsyMTk1LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0bwog
ICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgaWYgKGF0
dHJpYnV0ZXMgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpIHsKICAgICAgICAgICAgIHJldHVybiBw
dXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCi0gICAgICAg
ICAgICAgICAgZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNvbnZlcnRDb250aWd1
b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAgICAgICAgICAgICAgIGV4ZWMsIGks
IHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdl
KHZtKSk7CiAgICAgICAgIH0KICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdp
dGhvdXRBdHRyaWJ1dGVzPENvbnRpZ3VvdXNTaGFwZT4oZXhlYywgaSwgdmFsdWUpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTIyMTcsNyArMjIxNyw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dERp
cmVjdE5hdGl2ZUZ1bmN0aW9uKEUKICAgICAKICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9CiAg
ICAgICAgIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9uTGVu
Z3RoLCBuYW1lLCBuYXRpdmVGdW5jdGlvbiwgaW50cmluc2ljKTsKLSAgICBwdXREaXJlY3QoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGZ1bmN0aW9uLCBhdHRyaWJ1dGVzKTsKKyAg
ICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCBmdW5jdGlvbiwgYXR0cmlidXRl
cyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxl
bmd0aCh1bnNpZ25lZCBjdXJyZW50VmVjdG9yTGVuZ3RoLCB1bnNpZ25lZCBjdXJyZW50TGVuZ3Ro
LCB1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKQpAQCAtMjMwNiw3ICsyMzA2LDcgQEAgdW5zaWduZWQg
SlNPYmplY3Q6OmNvdW50RWxlbWVudHMoKQogICAgIH0KIH0KIAotYm9vbCBKU09iamVjdDo6aW5j
cmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdM
ZW5ndGgpCitib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgdm0sIHVuc2ln
bmVkIG5ld0xlbmd0aCkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgYXJyYXkg
aW4gYW4gaW50ZXJuYWxseSBpbmNvbnNpc3RlbnQgc3RhdGUsIGJlY2F1c2UgaXQgZG9lcyBub3Qg
bW92ZSBhbnkgdmFsdWVzIGZyb20gc3BhcnNlIHZhbHVlIG1hcAogICAgIC8vIHRvIHRoZSB2ZWN0
b3IuIENhbGxlcnMgaGF2ZSB0byBhY2NvdW50IGZvciB0aGF0LCBiZWNhdXNlIHRoZXkgY2FuIGRv
IGl0IG1vcmUgZWZmaWNpZW50bHkuCkBAIC0yMzI2LDcgKzIzMjYsNyBAQCBib29sIEpTT2JqZWN0
OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsCiAKICAgICAvLyBGYXN0IGNhc2UgLSB0aGVyZSBp
cyBubyBwcmVjYXBhY2l0eS4gSW4gdGhlc2UgY2FzZXMgYSByZWFsbG9jIG1ha2VzIHNlbnNlLgog
ICAgIGlmIChMSUtFTFkoIWluZGV4QmlhcykpIHsKLSAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0
ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+Z3Jvd0FycmF5UmlnaHQoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5l
d1ZlY3Rvckxlbmd0aCkpOworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3Jh
Z2UtPmJ1dHRlcmZseSgpLT5ncm93QXJyYXlSaWdodCh2bSwgc3RydWN0dXJlKCksIHN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVj
dG9yTGVuZ3RoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkpOwogICAg
ICAgICBpZiAoIW5ld0J1dHRlcmZseSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CkBAIC0yMzM3LDcgKzIzMzcsNyBAQCBib29s
IEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsCiAgICAgLy8gUmVtb3ZlIHNvbWUs
IGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0eS4gQXRvbWljIGRlY2F5LCAmIGNhcHBlZCB0
byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgogICAgIHVuc2lnbmVkIG5ld0luZGV4QmlhcyA9
IHN0ZDo6bWluKGluZGV4QmlhcyA+PiAxLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbmV3
VmVjdG9yTGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1
dHRlcmZseSgpLT5yZXNpemVBcnJheSgKLSAgICAgICAgZ2xvYmFsRGF0YSwKKyAgICAgICAgdm0s
CiAgICAgICAgIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCBBcnJheVN0
b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSwKICAgICAgICAgbmV3SW5kZXhCaWFzLCB0cnVl
LCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7CiAgICAgaWYgKCFuZXdC
dXR0ZXJmbHkpCkBAIC0yMzQ5LDcgKzIzNDksNyBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZl
Y3Rvckxlbmd0aChKU0dsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSlNPYmplY3Q6OmVu
c3VyZUxlbmd0aFNsb3coSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgp
Cit2b2lkIEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgdW5zaWduZWQgbGVuZ3Ro
KQogewogICAgIEFTU0VSVChsZW5ndGggPCBNQVhfQVJSQVlfSU5ERVgpOwogICAgIEFTU0VSVCho
YXNDb250aWd1b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgfHwgaGFzSW50MzIoc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB8fCBoYXNEb3VibGUoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSB8fCBoYXNVbmRlY2lkZWQoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7
CkBAIC0yMzYwLDcgKzIzNjAsNyBAQCB2b2lkIEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KEpT
R2xvYmFsCiAgICAgICAgIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwogICAgIHVuc2lnbmVk
IG9sZFZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKICAgICBtX2J1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodCgKLSAgICAgICAgZ2xvYmFsRGF0
YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLAor
ICAgICAgICB2bSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
LCB0cnVlLAogICAgICAgICBvbGRWZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
LAogICAgICAgICBuZXdWZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKICAg
ICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpIHsKQEAgLTIzNzAs
MjEgKzIzNzAsMjEgQEAgdm9pZCBKU09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyhKU0dsb2JhbAog
ICAgIG1fYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKIH0KIAot
QnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCitCdXR0ZXJmbHkqIEpT
T2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShWTSYgdm0sIHNpemVfdCBvbGRTaXplLCBzaXpl
X3QgbmV3U2l6ZSkKIHsKICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogCiAgICAgLy8g
SXQncyBpbXBvcnRhbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVyZSgp
LCBmb3IgdGhlIHByb3BlcnR5CiAgICAgLy8gY2FwYWNpdHksIHNpbmNlIHdlIG1pZ2h0IGhhdmUg
YWxyZWFkeSBtdXRhdGVkIHRoZSBzdHJ1Y3R1cmUgaW4tcGxhY2UuCiAgICAgCi0gICAgcmV0dXJu
IG1fYnV0dGVyZmx5LT5ncm93UHJvcGVydHlTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgp
LCBvbGRTaXplLCBuZXdTaXplKTsKKyAgICByZXR1cm4gbV9idXR0ZXJmbHktPmdyb3dQcm9wZXJ0
eVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLCBvbGRTaXplLCBuZXdTaXplKTsKIH0KIAogYm9vbCBK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yKQogewogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSAwOwogICAgIEpTQ2Vs
bCogY2VsbCA9IDA7Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gb2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+Z2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBj
ZWxsKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmplY3QtPnN0cnVjdHVyZSgpLT5n
ZXQoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBjZWxsKTsKICAgICBpZiAo
aXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CiAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRv
cihvYmplY3QtPmdldERpcmVjdChvZmZzZXQpLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC0yNDY4LDkgKzI0NjgsOSBAQCBzdGF0aWMgYm9vbCBwdXREZXNjcmlwdG9yKEV4
ZWNTdGF0ZSogZXhlCiAgICAgICAgIGlmIChkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3Io
KSAmJiBvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKICAgICAgICAgICAg
IEdldHRlclNldHRlciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKICAg
ICAgICAgICAgIGlmIChvbGREZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSkKLSAgICAgICAgICAg
ICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgb2xkRGVzY3JpcHRv
ci5nZXR0ZXJPYmplY3QoKSk7CisgICAgICAgICAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihl
eGVjLT52bSgpLCBvbGREZXNjcmlwdG9yLmdldHRlck9iamVjdCgpKTsKICAgICAgICAgICAgIGlm
IChvbGREZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSkKLSAgICAgICAgICAgICAgICBhY2Nlc3Nv
ci0+c2V0U2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmpl
Y3QoKSk7CisgICAgICAgICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVjLT52bSgpLCBv
bGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgpKTsKICAgICAgICAgICAgIHRhcmdldC0+cHV0RGly
ZWN0QWNjZXNzb3IoZXhlYywgcHJvcGVydHlOYW1lLCBhY2Nlc3NvciwgYXR0cmlidXRlcyB8IEFj
Y2Vzc29yKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0yNDc5LDcg
KzI0NzksNyBAQCBzdGF0aWMgYm9vbCBwdXREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlCiAgICAg
ICAgICAgICBuZXdWYWx1ZSA9IGRlc2NyaXB0b3IudmFsdWUoKTsKICAgICAgICAgZWxzZSBpZiAo
b2xkRGVzY3JpcHRvci52YWx1ZSgpKQogICAgICAgICAgICAgbmV3VmFsdWUgPSBvbGREZXNjcmlw
dG9yLnZhbHVlKCk7Ci0gICAgICAgIHRhcmdldC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgcHJvcGVydHlOYW1lLCBuZXdWYWx1ZSwgYXR0cmlidXRlcyAmIH5BY2Nlc3Nvcik7CisgICAg
ICAgIHRhcmdldC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSwgbmV3VmFsdWUs
IGF0dHJpYnV0ZXMgJiB+QWNjZXNzb3IpOwogICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRP
bmx5KQogICAgICAgICAgICAgdGFyZ2V0LT5zdHJ1Y3R1cmUoKS0+c2V0Q29udGFpbnNSZWFkT25s
eVByb3BlcnRpZXMoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNDg4LDEzICsyNDg4LDEz
IEBAIHN0YXRpYyBib29sIHB1dERlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGUKICAgICBHZXR0ZXJT
ZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7CiAKICAgICBpZiAo
ZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkpCi0gICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBkZXNjcmlwdG9yLmdldHRlck9iamVjdCgpKTsKKyAgICAgICAg
YWNjZXNzb3ItPnNldEdldHRlcihleGVjLT52bSgpLCBkZXNjcmlwdG9yLmdldHRlck9iamVjdCgp
KTsKICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSkKLSAgICAgICAg
YWNjZXNzb3ItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIG9sZERlc2NyaXB0b3IuZ2V0
dGVyT2JqZWN0KCkpOworICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPnZtKCksIG9s
ZERlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCkpOwogICAgIGlmIChkZXNjcmlwdG9yLnNldHRlclBy
ZXNlbnQoKSkKLSAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCks
IGRlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCkpOworICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0dGVy
KGV4ZWMtPnZtKCksIGRlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCkpOwogICAgIGVsc2UgaWYgKG9s
ZERlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpKQotICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0dGVy
KGV4ZWMtPmdsb2JhbERhdGEoKSwgb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKSk7CisgICAg
ICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+dm0oKSwgb2xkRGVzY3JpcHRvci5zZXR0ZXJP
YmplY3QoKSk7CiAKICAgICB0YXJnZXQtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5
TmFtZSwgYWNjZXNzb3IsIGF0dHJpYnV0ZXMgfCBBY2Nlc3Nvcik7CiAgICAgcmV0dXJuIHRydWU7
CkBAIC0yNTA0LDcgKzI1MDQsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RNYXlCZUluZGV4
KEV4ZWNTCiB7CiAgICAgdW5zaWduZWQgYXNJbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7
CiAgICAgaWYgKGFzSW5kZXggPT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAgICAgICBw
dXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAg
ICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOwogICAgIGVsc2UK
ICAgICAgICAgcHV0RGlyZWN0SW5kZXgoZXhlYywgYXNJbmRleCwgdmFsdWUpOwogfQpAQCAtMjUx
MiwxOCArMjUxMiwxOCBAQCB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RNYXlCZUluZGV4KEV4ZWNT
CiBjbGFzcyBEZWZpbmVPd25Qcm9wZXJ0eVNjb3BlIHsKIHB1YmxpYzoKICAgICBEZWZpbmVPd25Q
cm9wZXJ0eVNjb3BlKEV4ZWNTdGF0ZSogZXhlYykKLSAgICAgICAgOiBtX2dsb2JhbERhdGEoZXhl
Yy0+Z2xvYmFsRGF0YSgpKQorICAgICAgICA6IG1fdm0oZXhlYy0+dm0oKSkKICAgICB7Ci0gICAg
ICAgIG1fZ2xvYmFsRGF0YS5zZXRJbkRlZmluZU93blByb3BlcnR5KHRydWUpOworICAgICAgICBt
X3ZtLnNldEluRGVmaW5lT3duUHJvcGVydHkodHJ1ZSk7CiAgICAgfQogCiAgICAgfkRlZmluZU93
blByb3BlcnR5U2NvcGUoKQogICAgIHsKLSAgICAgICAgbV9nbG9iYWxEYXRhLnNldEluRGVmaW5l
T3duUHJvcGVydHkoZmFsc2UpOworICAgICAgICBtX3ZtLnNldEluRGVmaW5lT3duUHJvcGVydHko
ZmFsc2UpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0
YTsKKyAgICBWTSYgbV92bTsKIH07CiAKIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4
UHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCkBAIC0yNjI0
LDE0ICsyNjI0LDE0IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KLSAgICBKU1ZhbHVl
IGFjY2Vzc29yID0gZ2V0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsK
KyAgICBKU1ZhbHVlIGFjY2Vzc29yID0gZ2V0RGlyZWN0KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFt
ZSk7CiAgICAgaWYgKCFhY2Nlc3NvcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEdldHRl
clNldHRlciogZ2V0dGVyU2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNzb3IpOwogICAgIGlm
IChkZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSkKLSAgICAgICAgZ2V0dGVyU2V0dGVyLT5zZXRT
ZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBkZXNjcmlwdG9yLnNldHRlck9iamVjdCgpKTsKKyAg
ICAgICAgZ2V0dGVyU2V0dGVyLT5zZXRTZXR0ZXIoZXhlYy0+dm0oKSwgZGVzY3JpcHRvci5zZXR0
ZXJPYmplY3QoKSk7CiAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpKQotICAgICAg
ICBnZXR0ZXJTZXR0ZXItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIGRlc2NyaXB0b3Iu
Z2V0dGVyT2JqZWN0KCkpOworICAgICAgICBnZXR0ZXJTZXR0ZXItPnNldEdldHRlcihleGVjLT52
bSgpLCBkZXNjcmlwdG9yLmdldHRlck9iamVjdCgpKTsKICAgICBpZiAoY3VycmVudC5hdHRyaWJ1
dGVzRXF1YWwoZGVzY3JpcHRvcikpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIG1ldGhvZFRh
YmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDE0ODYzOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJQdXRQcm9wZXJ0eVNsb3QuaCIKIAogI2lu
Y2x1ZGUgIlN0cnVjdHVyZS5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUg
IlZNLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGlu
ZXMuaCIKICNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCkBAIC0xMjEsOCArMTIxLDgg
QEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1l
KGNvbnN0IEpTT2JqZWN0Kik7CiAKICAgICBKU1ZhbHVlIHByb3RvdHlwZSgpIGNvbnN0OwotICAg
IHZvaWQgc2V0UHJvdG90eXBlKEpTR2xvYmFsRGF0YSYsIEpTVmFsdWUgcHJvdG90eXBlKTsKLSAg
ICBib29sIHNldFByb3RvdHlwZVdpdGhDeWNsZUNoZWNrKEpTR2xvYmFsRGF0YSYsIEpTVmFsdWUg
cHJvdG90eXBlKTsKKyAgICB2b2lkIHNldFByb3RvdHlwZShWTSYsIEpTVmFsdWUgcHJvdG90eXBl
KTsKKyAgICBib29sIHNldFByb3RvdHlwZVdpdGhDeWNsZUNoZWNrKFZNJiwgSlNWYWx1ZSBwcm90
b3R5cGUpOwogICAgICAgICAKICAgICBib29sIG1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3Nlcygp
CiAgICAgewpAQCAtMTYyLDcgKzE2Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHB1dEJ5SW5kZXhJ
bmxpbmUoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cpCiAgICAgewogICAgICAgICBpZiAoY2FuU2V0SW5kZXhRdWlj
a2x5KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgIHNldEluZGV4UXVpY2tseShleGVjLT5n
bG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgICAgICAgICAgc2V0SW5kZXhR
dWlja2x5KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIG1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgodGhpcywg
ZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwpAQCAtMTc2LDcgKzE3Niw3
IEBAIHB1YmxpYzoKICAgICBib29sIHB1dERpcmVjdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQ
dXREaXJlY3RJbmRleE1vZGUgbW9kZSkKICAgICB7CiAgICAgICAgIGlmICghYXR0cmlidXRlcyAm
JiBjYW5TZXRJbmRleFF1aWNrbHlGb3JQdXREaXJlY3QocHJvcGVydHlOYW1lKSkgewotICAgICAg
ICAgICAgc2V0SW5kZXhRdWlja2x5KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2
YWx1ZSk7CisgICAgICAgICAgICBzZXRJbmRleFF1aWNrbHkoZXhlYy0+dm0oKSwgcHJvcGVydHlO
YW1lLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSk7CkBAIC0zMTYsMjAgKzMxNiwyMCBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgICAgIAotICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQorICAgIHZv
aWQgc2V0SW5kZXhRdWlja2x5KFZNJiB2bSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQogICAgIHsK
ICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAg
Y2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgIEFTU0VSVChpIDwg
bV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAgIGlmICghdi5pc0ludDMy
KCkpIHsKLSAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZU9yQ29udGlndW91c1do
aWxlUGVyZm9ybWluZ1NldEluZGV4KGdsb2JhbERhdGEsIGksIHYpOworICAgICAgICAgICAgICAg
IGNvbnZlcnRJbnQzMlRvRG91YmxlT3JDb250aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXgo
dm0sIGksIHYpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBjb250aWd1b3VzIGNhc2UuCiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogewogICAgICAgICAgICAg
QVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICAgICAgbV9i
dXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAg
ICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldCh2bSwgdGhpcywgdik7CiAg
ICAgICAgICAgICBpZiAoaSA+PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCiAgICAgICAg
ICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpICsgMSk7CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTMzNywxMiArMzM3LDEyIEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBTExf
RE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgICAgICBpZiAoIXYuaXNOdW1iZXIoKSkgewot
ICAgICAgICAgICAgICAgIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdT
ZXRJbmRleChnbG9iYWxEYXRhLCBpLCB2KTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0RG91Ymxl
VG9Db250aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXgodm0sIGksIHYpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRvdWJsZSB2YWx1ZSA9
IHYuYXNOdW1iZXIoKTsKICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgewotICAgICAg
ICAgICAgICAgIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRl
eChnbG9iYWxEYXRhLCBpLCB2KTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0RG91YmxlVG9Db250
aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXgodm0sIGksIHYpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1
b3VzRG91YmxlKClbaV0gPSB2YWx1ZTsKQEAgLTM1NCw3ICszNTQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHggPSBzdG9yYWdlLT5tX3Zl
Y3RvcltpXTsKICAgICAgICAgICAgIEpTVmFsdWUgb2xkID0geC5nZXQoKTsKLSAgICAgICAgICAg
IHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgeC5zZXQodm0sIHRoaXMs
IHYpOwogICAgICAgICAgICAgaWYgKCFvbGQpIHsKICAgICAgICAgICAgICAgICArK3N0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3I7CiAgICAgICAgICAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+
bGVuZ3RoKCkpCkBAIC0zNjcsMTggKzM2NywxOCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9
CiAgICAgICAgIAotICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQorICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4KFZN
JiB2bSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQogICAgIHsKICAgICAgICAgc3dpdGNoIChzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lO
REVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICBzZXRJbmRleFF1aWNrbHlUb1VuZGVjaWRlZChn
bG9iYWxEYXRhLCBpLCB2KTsKKyAgICAgICAgICAgIHNldEluZGV4UXVpY2tseVRvVW5kZWNpZGVk
KHZtLCBpLCB2KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
QUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CiAgICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgICAgICBpZiAoIXYuaXNJbnQzMigpKSB7Ci0g
ICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGVPckNvbnRpZ3VvdXNXaGlsZVBlcmZv
cm1pbmdTZXRJbmRleChnbG9iYWxEYXRhLCBpLCB2KTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0
SW50MzJUb0RvdWJsZU9yQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KHZtLCBpLCB2
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8v
IEZhbGwgdGhyb3VnaC4KQEAgLTM4NiwxOSArMzg2LDE5IEBAIHB1YmxpYzoKICAgICAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogewogICAgICAgICAgICAgQVNTRVJUKGkg
PCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwogICAgICAgICAgICAgQVNTRVJUKGkgPCBt
X2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNv
bnRpZ3VvdXMoKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAgICBtX2J1
dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldCh2bSwgdGhpcywgdik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6
IHsKICAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsK
ICAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAg
ICAgICAgICAgIGlmICghdi5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICAgICAgY29udmVydERv
dWJsZVRvQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KGdsb2JhbERhdGEsIGksIHYp
OworICAgICAgICAgICAgICAgIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1p
bmdTZXRJbmRleCh2bSwgaSwgdik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgZG91YmxlIHZhbHVlID0gdi5hc051bWJlcigpOwogICAgICAgICAg
ICAgaWYgKHZhbHVlICE9IHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgY29udmVydERvdWJsZVRv
Q29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KGdsb2JhbERhdGEsIGksIHYpOworICAg
ICAgICAgICAgICAgIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJ
bmRleCh2bSwgaSwgdik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IHZhbHVlOwpA
QCAtNDA4LDcgKzQwOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgICAgIEFTU0VSVChp
IDwgc3RvcmFnZS0+bGVuZ3RoKCkpOwogICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ld
LnNldCh2bSwgdGhpcywgdik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBkZWZhdWx0OgpAQCAtNDUwLDcgKzQ1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0K
ICAgICAgICAgCi0gICAgdm9pZCBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxE
YXRhJik7CisgICAgdm9pZCBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoVk0mKTsKIAogICAg
IC8vIHB1dERpcmVjdCBpcyBlZmZlY3RpdmVseSBhbiB1bmNoZWNrZWQgdmVzaW9uIG9mICdkZWZp
bmVPd25Qcm9wZXJ0eSc6CiAgICAgLy8gIC0gdGhlIHByb3RvdHlwZSBjaGFpbiBpcyBub3QgY29u
c3VsdGVkCkBAIC00NTgsOSArNDU4LDkgQEAgcHVibGljOgogICAgIC8vICAtIGF0dHJpYnV0ZXMg
d2lsbCBiZSByZXNwZWN0ZWQgKGFmdGVyIHRoZSBjYWxsIHRoZSBwcm9wZXJ0eSB3aWxsIGV4aXN0
IHdpdGggdGhlIGdpdmVuIGF0dHJpYnV0ZXMpCiAgICAgLy8gIC0gdGhlIHByb3BlcnR5IG5hbWUg
aXMgYXNzdW1lZCB0byBub3QgYmUgYW4gaW5kZXguCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgcHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7Ci0gICAgdm9pZCBwdXREaXJlY3Qo
SlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
ID0gMCk7Ci0gICAgdm9pZCBwdXREaXJlY3QoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICB2b2lkIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0
cmlidXRlcyA9IDApOworICAgIHZvaWQgcHV0RGlyZWN0KFZNJiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gMCk7CisgICAgdm9pZCBwdXREaXJlY3QoVk0mLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHZvaWQgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMgPSAwKTsKICAgICB2b2lkIHB1dERpcmVjdEFjY2Vzc29yKEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAKICAgICBib29s
IHByb3BlcnR5SXNFbnVtZXJhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSkgY29uc3Q7CkBAIC00OTMsMTYgKzQ5MywxNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBn
ZXRQcm9wZXJ0eVNwZWNpZmljVmFsdWUoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU0NlbGwq
JiBzcGVjaWZpY0Z1bmN0aW9uKSBjb25zdDsKIAogICAgIC8vIFRoaXMgZ2V0IGZ1bmN0aW9uIG9u
bHkgbG9va3MgYXQgdGhlIHByb3BlcnR5IG1hcC4KLSAgICBKU1ZhbHVlIGdldERpcmVjdChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0Cisg
ICAgSlNWYWx1ZSBnZXREaXJlY3QoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBj
b25zdAogICAgIHsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCkt
PmdldChnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBjaGVj
a09mZnNldChvZmZzZXQsIHN0cnVjdHVyZSgpLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAg
cmV0dXJuIG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0ID8gZ2V0RGlyZWN0KG9mZnNldCkgOiBKU1Zh
bHVlKCk7CiAgICAgfQogCi0gICAgUHJvcGVydHlPZmZzZXQgZ2V0RGlyZWN0T2Zmc2V0KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKKyAgICBQcm9w
ZXJ0eU9mZnNldCBnZXREaXJlY3RPZmZzZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKQogICAgIHsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCkt
PmdldChnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBjaGVj
a09mZnNldChvZmZzZXQsIHN0cnVjdHVyZSgpLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAg
cmV0dXJuIG9mZnNldDsKICAgICB9CkBAIC01NDcsOSArNTQ3LDkgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gJm91dE9mTGluZVN0b3JhZ2UoKVtvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zm
c2V0KV07CiAgICAgfQogCi0gICAgdm9pZCB0cmFuc2l0aW9uVG8oSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKik7CisgICAgdm9pZCB0cmFuc2l0aW9uVG8oVk0mLCBTdHJ1Y3R1cmUqKTsKIAotICAg
IGJvb2wgcmVtb3ZlRGlyZWN0KEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSk7IC8vIFJldHVy
biB0cnVlIGlmIGFueXRoaW5nIGlzIHJlbW92ZWQuCisgICAgYm9vbCByZW1vdmVEaXJlY3QoVk0m
LCBQcm9wZXJ0eU5hbWUpOyAvLyBSZXR1cm4gdHJ1ZSBpZiBhbnl0aGluZyBpcyByZW1vdmVkLgog
ICAgIGJvb2wgaGFzQ3VzdG9tUHJvcGVydGllcygpIHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5kaWRU
cmFuc2l0aW9uKCk7IH0KICAgICBib29sIGhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSB7IHJl
dHVybiBzdHJ1Y3R1cmUoKS0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpOyB9CiAKQEAgLTU1
OCwxMSArNTU4LDExIEBAIHB1YmxpYzoKICAgICAvLyAgLSBwcm92aWRlcyBubyBzcGVjaWFsIGhh
bmRsaW5nIGZvciBfX3Byb3RvX18KICAgICAvLyAgLSBkb2VzIG5vdCB3YWxrIHRoZSBwcm90b3R5
cGUgY2hhaW4gKHRvIGNoZWNrIGZvciBhY2Nlc3NvcnMgb3Igbm9uLXdyaXRhYmxlIHByb3BlcnRp
ZXMpLgogICAgIC8vIFRoaXMgaXMgdXNlZCBieSBKU0FjdGl2YXRpb24uCi0gICAgYm9vbCBwdXRP
d25EYXRhUHJvcGVydHkoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmKTsKKyAgICBib29sIHB1dE93bkRhdGFQcm9wZXJ0eShWTSYsIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKICAgICAvLyBGYXN0IGFjY2VzcyB0
byBrbm93biBwcm9wZXJ0eSBvZmZzZXRzLgogICAgIEpTVmFsdWUgZ2V0RGlyZWN0KFByb3BlcnR5
T2Zmc2V0IG9mZnNldCkgY29uc3QgeyByZXR1cm4gbG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KS0+
Z2V0KCk7IH0KLSAgICB2b2lkIHB1dERpcmVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwgSlNWYWx1ZSB2YWx1ZSkgeyBsb2NhdGlvbkZvck9mZnNldChv
ZmZzZXQpLT5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOyB9CisgICAgdm9pZCBwdXREaXJl
Y3QoVk0mIHZtLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEpTVmFsdWUgdmFsdWUpIHsgbG9jYXRp
b25Gb3JPZmZzZXQob2Zmc2V0KS0+c2V0KHZtLCB0aGlzLCB2YWx1ZSk7IH0KICAgICB2b2lkIHB1
dERpcmVjdFVuZGVmaW5lZChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpIHsgbG9jYXRpb25Gb3JPZmZz
ZXQob2Zmc2V0KS0+c2V0VW5kZWZpbmVkKCk7IH0KIAogICAgIHZvaWQgcHV0RGlyZWN0TmF0aXZl
RnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBQcm9wZXJ0eU5hbWUm
LCB1bnNpZ25lZCBmdW5jdGlvbkxlbmd0aCwgTmF0aXZlRnVuY3Rpb24sIEludHJpbnNpYywgdW5z
aWduZWQgYXR0cmlidXRlcyk7CkBAIC01NzUsMTEgKzU3NSwxMSBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpc0FjdGl2YXRpb25PYmplY3QoKSBjb25zdDsKICAgICBib29sIGlzRXJyb3JJbnN0YW5jZSgp
IGNvbnN0OwogCi0gICAgdm9pZCBzZWFsKEpTR2xvYmFsRGF0YSYpOwotICAgIHZvaWQgZnJlZXpl
KEpTR2xvYmFsRGF0YSYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJldmVudEV4dGVu
c2lvbnMoSlNHbG9iYWxEYXRhJik7Ci0gICAgYm9vbCBpc1NlYWxlZChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpIHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5pc1NlYWxlZChnbG9iYWxEYXRhKTsgfQot
ICAgIGJvb2wgaXNGcm96ZW4oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKSB7IHJldHVybiBzdHJ1
Y3R1cmUoKS0+aXNGcm96ZW4oZ2xvYmFsRGF0YSk7IH0KKyAgICB2b2lkIHNlYWwoVk0mKTsKKyAg
ICB2b2lkIGZyZWV6ZShWTSYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJldmVudEV4
dGVuc2lvbnMoVk0mKTsKKyAgICBib29sIGlzU2VhbGVkKFZNJiB2bSkgeyByZXR1cm4gc3RydWN0
dXJlKCktPmlzU2VhbGVkKHZtKTsgfQorICAgIGJvb2wgaXNGcm96ZW4oVk0mIHZtKSB7IHJldHVy
biBzdHJ1Y3R1cmUoKS0+aXNGcm96ZW4odm0pOyB9CiAgICAgYm9vbCBpc0V4dGVuc2libGUoKSB7
IHJldHVybiBzdHJ1Y3R1cmUoKS0+aXNFeHRlbnNpYmxlKCk7IH0KICAgICBib29sIGluZGV4aW5n
U2hvdWxkQmVTcGFyc2UoKQogICAgIHsKQEAgLTU5MCwxNiArNTkwLDE2IEBAIHB1YmxpYzoKICAg
ICBib29sIHN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+c3Rh
dGljRnVuY3Rpb25zUmVpZmllZCgpOyB9CiAgICAgdm9pZCByZWlmeVN0YXRpY0Z1bmN0aW9uc0Zv
ckRlbGV0ZShFeGVjU3RhdGUqIGV4ZWMpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgQnV0dGVy
Zmx5KiBncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xkU2l6ZSwg
c2l6ZV90IG5ld1NpemUpOwotICAgIHZvaWQgc2V0QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYsIEJ1
dHRlcmZseSosIFN0cnVjdHVyZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSog
Z3Jvd091dE9mTGluZVN0b3JhZ2UoVk0mLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUp
OworICAgIHZvaWQgc2V0QnV0dGVyZmx5KFZNJiwgQnV0dGVyZmx5KiwgU3RydWN0dXJlKik7CiAg
ICAgdm9pZCBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUoQnV0dGVyZmx5Kik7
IC8vIFlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGNhbGwgdGhpcy4KICAgICAgICAgCi0gICAg
dm9pZCBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFs
RGF0YSYsIHVuc2lnbmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1cmUqKTsKLSAgICB2b2lkIHNldFN0
cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKik7CisgICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVj
ZXNzYXJ5KFZNJiwgdW5zaWduZWQgb2xkQ2FwYWNpdHksIFN0cnVjdHVyZSopOworICAgIHZvaWQg
c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShWTSYsIFN0cnVjdHVy
ZSopOwogCi0gICAgdm9pZCBmbGF0dGVuRGljdGlvbmFyeU9iamVjdChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCisgICAgdm9pZCBmbGF0dGVuRGljdGlvbmFyeU9iamVjdChWTSYgdm0pCiAgICAg
ewotICAgICAgICBzdHJ1Y3R1cmUoKS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUoZ2xvYmFs
RGF0YSwgdGhpcyk7CisgICAgICAgIHN0cnVjdHVyZSgpLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVj
dHVyZSh2bSwgdGhpcyk7CiAgICAgfQogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCgpIGNvbnN0CkBAIC02MDksNyArNjA5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3Ry
dWN0dXJlKCktPmdsb2JhbE9iamVjdCgpOwogICAgIH0KICAgICAgICAgCi0gICAgdm9pZCBzd2l0
Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJik7CisgICAgdm9pZCBzd2l0Y2hU
b1Nsb3dQdXRBcnJheVN0b3JhZ2UoVk0mKTsKICAgICAgICAgCiAgICAgLy8gVGhlIHJlY2VpdmVy
IGlzIHRoZSBwcm90b3R5cGUgaW4gdGhpcyBjYXNlLiBUaGUgZm9sbG93aW5nOgogICAgIC8vCkBA
IC02MjQsNTcgKzYyNCw1NyBAQCBwdWJsaWM6CiAgICAgLy8gaW5kZXhpbmcgc2hvdWxkIGJlIHNw
YXJzZSwgd2UncmUgaGF2aW5nIGEgYmFkIHRpbWUsIG9yIGJlY2F1c2UKICAgICAvLyB3ZSBhbHJl
YWR5IGhhdmUgYSBtb3JlIGdlbmVyYWwgZm9ybSBvZiBzdG9yYWdlIChkb3VibGUsCiAgICAgLy8g
Y29udGlndW91cywgYXJyYXkgc3RvcmFnZSkuCi0gICAgQ29udGlndW91c0pTVmFsdWVzIGVuc3Vy
ZUludDMyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICBDb250aWd1b3VzSlNWYWx1ZXMg
ZW5zdXJlSW50MzIoVk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgKExJS0VMWShoYXNJbnQzMihz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSkKICAgICAgICAgICAgIHJldHVybiBtX2J1dHRl
cmZseS0+Y29udGlndW91c0ludDMyKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgcmV0dXJuIGVu
c3VyZUludDMyU2xvdyhnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIGVuc3VyZUludDMyU2xv
dyh2bSk7CiAgICAgfQogICAgICAgICAKICAgICAvLyBSZXR1cm5zIDAgaWYgZG91YmxlIHN0b3Jh
Z2UgY2Fubm90IGJlIGNyZWF0ZWQgLSBlaXRoZXIgYmVjYXVzZQogICAgIC8vIGluZGV4aW5nIHNo
b3VsZCBiZSBzcGFyc2UsIHdlJ3JlIGhhdmluZyBhIGJhZCB0aW1lLCBvciBiZWNhdXNlCiAgICAg
Ly8gd2UgYWxyZWFkeSBoYXZlIGEgbW9yZSBnZW5lcmFsIGZvcm0gb2Ygc3RvcmFnZSAoY29udGln
dW91cywKICAgICAvLyBvciBhcnJheSBzdG9yYWdlKS4KLSAgICBDb250aWd1b3VzRG91YmxlcyBl
bnN1cmVEb3VibGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIENvbnRpZ3VvdXNEb3Vi
bGVzIGVuc3VyZURvdWJsZShWTSYgdm0pCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKGhhc0Rv
dWJsZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSkKICAgICAgICAgICAgIHJldHVybiBt
X2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpOwogICAgICAgICAgICAgCi0gICAgICAgIHJl
dHVybiBlbnN1cmVEb3VibGVTbG93KGdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4gZW5zdXJl
RG91YmxlU2xvdyh2bSk7CiAgICAgfQogICAgICAgICAKICAgICAvLyBSZXR1cm5zIDAgaWYgY29u
dGlndW91cyBzdG9yYWdlIGNhbm5vdCBiZSBjcmVhdGVkIC0gZWl0aGVyIGJlY2F1c2UKICAgICAv
LyBpbmRleGluZyBzaG91bGQgYmUgc3BhcnNlIG9yIGJlY2F1c2Ugd2UncmUgaGF2aW5nIGEgYmFk
IHRpbWUuCi0gICAgQ29udGlndW91c0pTVmFsdWVzIGVuc3VyZUNvbnRpZ3VvdXMoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQorICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBlbnN1cmVDb250aWd1b3Vz
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkoaGFzQ29udGlndW91cyhzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSkKICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+
Y29udGlndW91cygpOwogICAgICAgICAgICAgCi0gICAgICAgIHJldHVybiBlbnN1cmVDb250aWd1
b3VzU2xvdyhnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIGVuc3VyZUNvbnRpZ3VvdXNTbG93
KHZtKTsKICAgICB9CiAgICAgICAgIAogICAgIC8vIFNhbWUgYXMgZW5zdXJlQ29udGlndW91cygp
LCBleGNlcHQgdGhhdCBpZiB0aGUgaW5kZXhlZCBzdG9yYWdlIGlzIGluCiAgICAgLy8gZG91Ymxl
IG1vZGUsIHRoZW4gaXQgZG9lcyBhIHJhZ2UgY29udmVyc2lvbiB0byBjb250aWd1b3VzOiBpdAog
ICAgIC8vIGF0dGVtcHRzIHRvIGNvbnZlcnQgZWFjaCBkb3VibGUgdG8gYW4gaW50MzIuCi0gICAg
Q29udGlndW91c0pTVmFsdWVzIHJhZ2VFbnN1cmVDb250aWd1b3VzKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSkKKyAgICBDb250aWd1b3VzSlNWYWx1ZXMgcmFnZUVuc3VyZUNvbnRpZ3VvdXMoVk0m
IHZtKQogICAgIHsKICAgICAgICAgaWYgKExJS0VMWShoYXNDb250aWd1b3VzKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkpKQogICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgcmV0dXJuIHJhZ2VFbnN1cmVDb250aWd1
b3VzU2xvdyhnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIHJhZ2VFbnN1cmVDb250aWd1b3Vz
U2xvdyh2bSk7CiAgICAgfQogICAgICAgICAKICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgb2JqZWN0
IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkgc3RvcmFnZS4gVXNlCiAgICAgLy8gdGhp
cyBpZiB5b3UncmUgYWJvdXQgdG8gcGVyZm9ybSBhY3Rpb25zIHRoYXQgd291bGQgaGF2ZSByZXF1
aXJlZCB0aGUKICAgICAvLyBvYmplY3QgdG8gYmUgY29udmVydGVkIHRvIGhhdmUgYXJyYXkgc3Rv
cmFnZSwgaWYgaXQgZGlkbid0IGhhdmUgaXQKICAgICAvLyBhbHJlYWR5LgotICAgIEFycmF5U3Rv
cmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICBB
cnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZShWTSYgdm0pCiAgICAgewogICAgICAgICBp
ZiAoTElLRUxZKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSkK
ICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgcmV0dXJuIGVuc3VyZUFycmF5U3RvcmFnZVNsb3coZ2xvYmFsRGF0YSk7
CisgICAgICAgIHJldHVybiBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KHZtKTsKICAgICB9CiAgICAg
ICAgIAogICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7CkBAIC02OTIs
OSArNjkyLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAg
ICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZv
KSk7CiAgICAgICAgIEFTU0VSVCghc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwog
ICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmlzRW1wdHkoKSk7CkBAIC03MDMsMTQgKzcwMywx
NCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVChjbGFzc0luZm8oKSk7CiAgICAgfQogCi0g
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAg
ICAgLy8gVG8gaW5zdGFudGlhdGUgb2JqZWN0cyB5b3UgbGlrZWx5IHdhbnQgSlNGaW5hbE9iamVj
dCwgYmVsb3cuCiAgICAgLy8gVG8gY3JlYXRlIGRlcml2ZWQgdHlwZXMgeW91IGxpa2VseSB3YW50
IEpTTm9uRmluYWxPYmplY3QsIGJlbG93LgotICAgIEpTT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0
cnVjdHVyZSosIEJ1dHRlcmZseSogPSAwKTsKKyAgICBKU09iamVjdChWTSYsIFN0cnVjdHVyZSos
IEJ1dHRlcmZseSogPSAwKTsKICAgICAgICAgCiAgICAgdm9pZCB2aXNpdEJ1dHRlcmZseShTbG90
VmlzaXRvciYsIEJ1dHRlcmZseSosIHNpemVfdCBzdG9yYWdlU2l6ZSk7CiAgICAgdm9pZCBjb3B5
QnV0dGVyZmx5KENvcHlWaXNpdG9yJiwgQnV0dGVyZmx5Kiwgc2l6ZV90IHN0b3JhZ2VTaXplKTsK
QEAgLTczNiw0MiArNzM2LDQyIEBAIHByb3RlY3RlZDoKICAgICAgICAgfQogICAgIH0KICAgICAg
ICAgCi0gICAgQnV0dGVyZmx5KiBjcmVhdGVJbml0aWFsVW5kZWNpZGVkKEpTR2xvYmFsRGF0YSYs
IHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgQ29udGlndW91c0pTVmFsdWVzIGNyZWF0ZUluaXRpYWxJ
bnQzMihKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIENvbnRpZ3VvdXNEb3Vi
bGVzIGNyZWF0ZUluaXRpYWxEb3VibGUoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbGVuZ3RoKTsK
LSAgICBDb250aWd1b3VzSlNWYWx1ZXMgY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoSlNHbG9iYWxE
YXRhJiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAgICAgCi0gICAgdm9pZCBjb252ZXJ0VW5kZWNp
ZGVkRm9yVmFsdWUoSlNHbG9iYWxEYXRhJiwgSlNWYWx1ZSk7Ci0gICAgdm9pZCBjb252ZXJ0SW50
MzJGb3JWYWx1ZShKU0dsb2JhbERhdGEmLCBKU1ZhbHVlKTsKLSAgICAgICAgCi0gICAgQXJyYXlT
dG9yYWdlKiBjcmVhdGVBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbGVuZ3Ro
LCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpOwotICAgIEFycmF5U3RvcmFnZSogY3JlYXRlSW5pdGlh
bEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKLSAgICAgICAgCi0gICAgQ29udGlndW91c0pT
VmFsdWVzIGNvbnZlcnRVbmRlY2lkZWRUb0ludDMyKEpTR2xvYmFsRGF0YSYpOwotICAgIENvbnRp
Z3VvdXNEb3VibGVzIGNvbnZlcnRVbmRlY2lkZWRUb0RvdWJsZShKU0dsb2JhbERhdGEmKTsKLSAg
ICBDb250aWd1b3VzSlNWYWx1ZXMgY29udmVydFVuZGVjaWRlZFRvQ29udGlndW91cyhKU0dsb2Jh
bERhdGEmKTsKLSAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFn
ZShKU0dsb2JhbERhdGEmLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExl
bmd0aCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsKLSAgICBBcnJheVN0b3JhZ2Uq
IGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKLSAgICAgICAg
Ci0gICAgQ29udGlndW91c0RvdWJsZXMgY29udmVydEludDMyVG9Eb3VibGUoSlNHbG9iYWxEYXRh
Jik7Ci0gICAgQ29udGlndW91c0pTVmFsdWVzIGNvbnZlcnRJbnQzMlRvQ29udGlndW91cyhKU0ds
b2JhbERhdGEmKTsKLSAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdl
KEpTR2xvYmFsRGF0YSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbiwgdW5zaWduZWQgbmVlZGVkTGVu
Z3RoKTsKLSAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKEpTR2xv
YmFsRGF0YSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbik7Ci0gICAgQXJyYXlTdG9yYWdlKiBjb252
ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKKyAgICBCdXR0ZXJmbHkqIGNy
ZWF0ZUluaXRpYWxVbmRlY2lkZWQoVk0mLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIENvbnRpZ3Vv
dXNKU1ZhbHVlcyBjcmVhdGVJbml0aWFsSW50MzIoVk0mLCB1bnNpZ25lZCBsZW5ndGgpOworICAg
IENvbnRpZ3VvdXNEb3VibGVzIGNyZWF0ZUluaXRpYWxEb3VibGUoVk0mLCB1bnNpZ25lZCBsZW5n
dGgpOworICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBjcmVhdGVJbml0aWFsQ29udGlndW91cyhWTSYs
IHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIAorICAgIHZvaWQgY29udmVydFVuZGVjaWRlZEZv
clZhbHVlKFZNJiwgSlNWYWx1ZSk7CisgICAgdm9pZCBjb252ZXJ0SW50MzJGb3JWYWx1ZShWTSYs
IEpTVmFsdWUpOworICAgICAgICAKKyAgICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUFycmF5U3RvcmFn
ZShWTSYsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKTsKKyAgICBBcnJh
eVN0b3JhZ2UqIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoVk0mKTsKKyAgICAgICAgCisgICAg
Q29udGlndW91c0pTVmFsdWVzIGNvbnZlcnRVbmRlY2lkZWRUb0ludDMyKFZNJik7CisgICAgQ29u
dGlndW91c0RvdWJsZXMgY29udmVydFVuZGVjaWRlZFRvRG91YmxlKFZNJik7CisgICAgQ29udGln
dW91c0pTVmFsdWVzIGNvbnZlcnRVbmRlY2lkZWRUb0NvbnRpZ3VvdXMoVk0mKTsKKyAgICBBcnJh
eVN0b3JhZ2UqIGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZShWTSYsIE5vblByb3BlcnR5
VHJhbnNpdGlvbiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKTsKKyAgICBBcnJheVN0b3JhZ2UqIGNv
bnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZShWTSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbik7
CisgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UoVk0mKTsK
KyAgICAgICAgCisgICAgQ29udGlndW91c0RvdWJsZXMgY29udmVydEludDMyVG9Eb3VibGUoVk0m
KTsKKyAgICBDb250aWd1b3VzSlNWYWx1ZXMgY29udmVydEludDMyVG9Db250aWd1b3VzKFZNJik7
CisgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShWTSYsIE5vblBy
b3BlcnR5VHJhbnNpdGlvbiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKTsKKyAgICBBcnJheVN0b3Jh
Z2UqIGNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKFZNJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9u
KTsKKyAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKFZNJik7CiAg
ICAgCi0gICAgQ29udGlndW91c0pTVmFsdWVzIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoSlNH
bG9iYWxEYXRhJik7Ci0gICAgQ29udGlndW91c0pTVmFsdWVzIHJhZ2VDb252ZXJ0RG91YmxlVG9D
b250aWd1b3VzKEpTR2xvYmFsRGF0YSYpOwotICAgIEFycmF5U3RvcmFnZSogY29udmVydERvdWJs
ZVRvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbiwgdW5z
aWduZWQgbmVlZGVkTGVuZ3RoKTsKLSAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnREb3VibGVUb0Fy
cmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24pOwotICAgIEFy
cmF5U3RvcmFnZSogY29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYpOwot
ICAgICAgICAKLSAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3Jh
Z2UoSlNHbG9iYWxEYXRhJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVkZWRM
ZW5ndGgpOwotICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFn
ZShKU0dsb2JhbERhdGEmLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24pOwotICAgIEFycmF5U3RvcmFn
ZSogY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKKyAgICBD
b250aWd1b3VzSlNWYWx1ZXMgY29udmVydERvdWJsZVRvQ29udGlndW91cyhWTSYpOworICAgIENv
bnRpZ3VvdXNKU1ZhbHVlcyByYWdlQ29udmVydERvdWJsZVRvQ29udGlndW91cyhWTSYpOworICAg
IEFycmF5U3RvcmFnZSogY29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKFZNJiwgTm9uUHJvcGVy
dHlUcmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpOworICAgIEFycmF5U3RvcmFnZSog
Y29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKFZNJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsK
KyAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZShWTSYpOworICAg
ICAgICAKKyAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uo
Vk0mLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCk7CisgICAg
QXJyYXlTdG9yYWdlKiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKFZNJiwgTm9uUHJv
cGVydHlUcmFuc2l0aW9uKTsKKyAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRDb250aWd1b3VzVG9B
cnJheVN0b3JhZ2UoVk0mKTsKIAogICAgICAgICAKLSAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFy
cmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERh
dGEmKTsKKyAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVy
RGljdGlvbmFyeUluZGV4aW5nTW9kZShWTSYpOwogICAgICAgICAKICAgICBib29sIGRlZmluZU93
bk5vbkluZGV4UHJvcGVydHkoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsKIApAQCAtNzc5LDI0ICs3NzksMjQgQEAgcHJv
dGVjdGVkOgogICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhvdXRBdHRy
aWJ1dGVzKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSk7CiAgICAg
dm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFy
cmF5U3RvcmFnZSopOwogCi0gICAgYm9vbCBpbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERh
dGEmLCB1bnNpZ25lZCBuZXdMZW5ndGgpOworICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgo
Vk0mLCB1bnNpZ25lZCBuZXdMZW5ndGgpOwogICAgIHZvaWQgZGVhbGxvY2F0ZVNwYXJzZUluZGV4
TWFwKCk7CiAgICAgYm9vbCBkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiwgdW5z
aWduZWQsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwotICAgIFNw
YXJzZUFycmF5VmFsdWVNYXAqIGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoSlNHbG9iYWxEYXRhJik7
CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogYWxsb2NhdGVTcGFyc2VJbmRleE1hcChWTSYpOwog
ICAgICAgICAKLSAgICB2b2lkIG5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNjZXNzb3JzKEpTR2xv
YmFsRGF0YSYpOworICAgIHZvaWQgbm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRBY2Nlc3NvcnMoVk0m
KTsKICAgICAgICAgCiAgICAgYm9vbCBhdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xl
KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsK
ICAgICAgICAgCiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSB3YW50IHNldEluZGV4UXVpY2tseSB0
byBzdWNjZWVkIGFuZCB5b3UncmUgc3VyZSB0aGF0CiAgICAgLy8gdGhlIGFycmF5IGlzIGNvbnRp
Z3VvdXMuCi0gICAgdm9pZCBlbnN1cmVMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1
bnNpZ25lZCBsZW5ndGgpCisgICAgdm9pZCBlbnN1cmVMZW5ndGgoVk0mIHZtLCB1bnNpZ25lZCBs
ZW5ndGgpCiAgICAgewogICAgICAgICBBU1NFUlQobGVuZ3RoIDwgTUFYX0FSUkFZX0lOREVYKTsK
ICAgICAgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB8fCBoYXNJbnQzMihzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHx8IGhhc0RvdWJsZShz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHx8IGhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUoKS0+
aW5kZXhpbmdUeXBlKCkpKTsKICAgICAgICAgICAgIAogICAgICAgICBpZiAobV9idXR0ZXJmbHkt
PnZlY3Rvckxlbmd0aCgpIDwgbGVuZ3RoKQotICAgICAgICAgICAgZW5zdXJlTGVuZ3RoU2xvdyhn
bG9iYWxEYXRhLCBsZW5ndGgpOworICAgICAgICAgICAgZW5zdXJlTGVuZ3RoU2xvdyh2bSwgbGVu
Z3RoKTsKICAgICAgICAgICAgIAogICAgICAgICBpZiAobV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpIDwgbGVuZ3RoKQogICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChs
ZW5ndGgpOwpAQCAtOTE2LDEyICs5MTYsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGlzT2JqZWN0
KCk7CiAgICAgdm9pZCBpc1N0cmluZygpOwogICAgICAgICAKLSAgICBCdXR0ZXJmbHkqIGNyZWF0
ZUluaXRpYWxJbmRleGVkU3RvcmFnZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBsZW5ndGgsIHNp
emVfdCBlbGVtZW50U2l6ZSk7CisgICAgQnV0dGVyZmx5KiBjcmVhdGVJbml0aWFsSW5kZXhlZFN0
b3JhZ2UoVk0mLCB1bnNpZ25lZCBsZW5ndGgsIHNpemVfdCBlbGVtZW50U2l6ZSk7CiAgICAgICAg
IAotICAgIEFycmF5U3RvcmFnZSogZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5
U3RvcmFnZUFscmVhZHlFeGlzdHMoSlNHbG9iYWxEYXRhJiwgQXJyYXlTdG9yYWdlKik7CisgICAg
QXJyYXlTdG9yYWdlKiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdl
QWxyZWFkeUV4aXN0cyhWTSYsIEFycmF5U3RvcmFnZSopOwogICAgICAgICAKICAgICB0ZW1wbGF0
ZTxQdXRNb2RlPgotICAgIGJvb2wgcHV0RGlyZWN0SW50ZXJuYWwoSlNHbG9iYWxEYXRhJiwgUHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyLCBQdXRQcm9wZXJ0eVNsb3QmLCBKU0Nl
bGwqKTsKKyAgICBib29sIHB1dERpcmVjdEludGVybmFsKFZNJiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCB1bnNpZ25lZCBhdHRyLCBQdXRQcm9wZXJ0eVNsb3QmLCBKU0NlbGwqKTsKIAogICAgIGJv
b2wgaW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaWxsR2V0dGVyUHJvcGVy
dHlTbG90KFByb3BlcnR5U2xvdCYsIFByb3BlcnR5T2Zmc2V0KTsKQEAgLTkzOSwyNCArOTM5LDI0
IEBAIHByaXZhdGU6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGdldE93blByb3BlcnR5
U2xvdFNsb3coRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAg
ICAgCi0gICAgQXJyYXlTdG9yYWdlKiBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRo
b3V0Q29weWluZ0VsZW1lbnRzKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG5lZWRlZExlbmd0aCk7
CisgICAgQXJyYXlTdG9yYWdlKiBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0
Q29weWluZ0VsZW1lbnRzKFZNJiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKTsKICAgICAgICAgCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRJbmRleFF1aWNrbHlUb1VuZGVjaWRlZChKU0ds
b2JhbERhdGEmLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBjb252ZXJ0SW50MzJUb0RvdWJsZU9yQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1Nl
dEluZGV4KEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlKTsKLSAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1p
bmdTZXRJbmRleChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSk7Ci0gICAg
ICAgIAotICAgIHZvaWQgZW5zdXJlTGVuZ3RoU2xvdyhKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBs
ZW5ndGgpOwotICAgICAgICAKLSAgICBDb250aWd1b3VzSlNWYWx1ZXMgZW5zdXJlSW50MzJTbG93
KEpTR2xvYmFsRGF0YSYpOwotICAgIENvbnRpZ3VvdXNEb3VibGVzIGVuc3VyZURvdWJsZVNsb3co
SlNHbG9iYWxEYXRhJik7Ci0gICAgQ29udGlndW91c0pTVmFsdWVzIGVuc3VyZUNvbnRpZ3VvdXNT
bG93KEpTR2xvYmFsRGF0YSYpOwotICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyByYWdlRW5zdXJlQ29u
dGlndW91c1Nsb3coSlNHbG9iYWxEYXRhJik7Ci0gICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJh
eVN0b3JhZ2VTbG93KEpTR2xvYmFsRGF0YSYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
c2V0SW5kZXhRdWlja2x5VG9VbmRlY2lkZWQoVk0mLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSk7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb252ZXJ0SW50MzJUb0RvdWJsZU9yQ29udGln
dW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KFZNJiwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29udmVydERvdWJsZVRvQ29udGlndW91c1do
aWxlUGVyZm9ybWluZ1NldEluZGV4KFZNJiwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUpOworICAg
ICAgICAKKyAgICB2b2lkIGVuc3VyZUxlbmd0aFNsb3coVk0mLCB1bnNpZ25lZCBsZW5ndGgpOwor
ICAgICAgICAKKyAgICBDb250aWd1b3VzSlNWYWx1ZXMgZW5zdXJlSW50MzJTbG93KFZNJik7Cisg
ICAgQ29udGlndW91c0RvdWJsZXMgZW5zdXJlRG91YmxlU2xvdyhWTSYpOworICAgIENvbnRpZ3Vv
dXNKU1ZhbHVlcyBlbnN1cmVDb250aWd1b3VzU2xvdyhWTSYpOworICAgIENvbnRpZ3VvdXNKU1Zh
bHVlcyByYWdlRW5zdXJlQ29udGlndW91c1Nsb3coVk0mKTsKKyAgICBBcnJheVN0b3JhZ2UqIGVu
c3VyZUFycmF5U3RvcmFnZVNsb3coVk0mKTsKICAgICAKICAgICBlbnVtIERvdWJsZVRvQ29udGln
dW91c01vZGUgeyBFbmNvZGVWYWx1ZUFzRG91YmxlLCBSYWdlQ29udmVydERvdWJsZVRvVmFsdWUg
fTsKICAgICB0ZW1wbGF0ZTxEb3VibGVUb0NvbnRpZ3VvdXNNb2RlIG1vZGU+Ci0gICAgQ29udGln
dW91c0pTVmFsdWVzIGdlbmVyaWNDb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKEpTR2xvYmFsRGF0
YSYpOwotICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBlbnN1cmVDb250aWd1b3VzU2xvdyhKU0dsb2Jh
bERhdGEmLCBEb3VibGVUb0NvbnRpZ3VvdXNNb2RlKTsKKyAgICBDb250aWd1b3VzSlNWYWx1ZXMg
Z2VuZXJpY0NvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoVk0mKTsKKyAgICBDb250aWd1b3VzSlNW
YWx1ZXMgZW5zdXJlQ29udGlndW91c1Nsb3coVk0mLCBEb3VibGVUb0NvbnRpZ3VvdXNNb2RlKTsK
ICAgICAKIHByb3RlY3RlZDoKICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OwpAQCAtOTcxLDIw
ICs5NzEsMjAgQEAgY2xhc3MgSlNOb25GaW5hbE9iamVjdCA6IHB1YmxpYyBKU09iamVjdAogcHVi
bGljOgogICAgIHR5cGVkZWYgSlNPYmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogcHJvdGVjdGVkOgotICAgIGV4cGxp
Y2l0IEpTTm9uRmluYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSAwKQotICAgICAgICA6IEpTT2JqZWN0
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KQorICAgIGV4cGxpY2l0IEpTTm9uRmlu
YWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSAwKQorICAgICAgICA6IEpTT2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAg
ICB7CiAgICAgfQogCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgewotICAgICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOwogICAgICAgICBBU1NFUlQoIXRoaXMtPnN0cnVjdHVyZSgpLT50b3RhbFN0b3Jh
Z2VDYXBhY2l0eSgpKTsKICAgICAgICAgQVNTRVJUKGNsYXNzSW5mbygpKTsKICAgICB9CkBAIC0x
MDEzLDkgKzEwMTMsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTRmluYWxPYmpl
Y3QqIGNyZWF0ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKLSAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNp
dHkpCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIHVuc2lnbmVkIGlubGlu
ZUNhcGFjaXR5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhGaW5hbE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywgTm9uQXJyYXksIGlubGluZUNhcGFjaXR5KTsKKyAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oRmluYWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIE5v
bkFycmF5LCBpbmxpbmVDYXBhY2l0eSk7CiAgICAgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpAQCAtMTAy
NSw5ICsxMDI1LDkgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZvaWQgdmlzaXRDaGlsZHJl
bkNvbW1vbihTbG90VmlzaXRvciYpOwogICAgICAgICAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAg
ICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUo
KS0+dG90YWxTdG9yYWdlQ2FwYWNpdHkoKSA9PSBzdHJ1Y3R1cmUoKS0+aW5saW5lQ2FwYWNpdHko
KSk7CiAgICAgICAgIEFTU0VSVChjbGFzc0luZm8oKSk7CiAgICAgfQpAQCAtMTAzNSw4ICsxMDM1
LDggQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOwogCi0gICAgZXhwbGljaXQgSlNGaW5hbE9iamVjdChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICA6IEpTT2JqZWN0KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSkKKyAgICBleHBsaWNpdCBKU0ZpbmFsT2JqZWN0KFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNPYmplY3Qodm0sIHN0cnVjdHVyZSkKICAg
ICB7CiAgICAgfQogCkBAIC0xMDUxLDggKzEwNTEsOCBAQCBpbmxpbmUgSlNGaW5hbE9iamVjdCog
SlNGaW5hbE9iamVjdDo6Y3JlCiAgICAgICAgICAgICAqZXhlYy0+aGVhcCgpLAogICAgICAgICAg
ICAgYWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKQogICAgICAgICAp
Ci0gICAgKSBKU0ZpbmFsT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKTsKLSAg
ICBmaW5hbE9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAp
IEpTRmluYWxPYmplY3QoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsKKyAgICBmaW5hbE9iamVjdC0+
ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAgICAgcmV0dXJuIGZpbmFsT2JqZWN0OwogfQog
CkBAIC0xMDk2LDExICsxMDk2LDExIEBAIGlubGluZSBib29sIEpTT2JqZWN0Ojppc0Vycm9ySW5z
dGFuY2UoKSAKICAgICByZXR1cm4gc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID09IEVy
cm9ySW5zdGFuY2VUeXBlOwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0QnV0dGVyZmx5
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQoraW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldEJ1dHRlcmZseShWTSYgdm0s
IEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBBU1NF
UlQoc3RydWN0dXJlKTsKICAgICBBU1NFUlQoIWJ1dHRlcmZseSA9PSAoIXN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSAmJiAhaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGlu
Z1R5cGUoKSkpKTsKLSAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKKyAg
ICBzZXRTdHJ1Y3R1cmUodm0sIHN0cnVjdHVyZSk7CiAgICAgbV9idXR0ZXJmbHkgPSBidXR0ZXJm
bHk7CiB9CiAKQEAgLTExMzQsOCArMTEzNCw4IEBAIGlubGluZSBKU09iamVjdCogYXNPYmplY3Qo
SlNWYWx1ZSB2YWx1ZSkKICAgICByZXR1cm4gYXNPYmplY3QodmFsdWUuYXNDZWxsKCkpOwogfQog
Ci1pbmxpbmUgSlNPYmplY3Q6OkpTT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQotICAgIDogSlNDZWxsKGds
b2JhbERhdGEsIHN0cnVjdHVyZSkKK2lubGluZSBKU09iamVjdDo6SlNPYmplY3QoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgOiBKU0NlbGwo
dm0sIHN0cnVjdHVyZSkKICAgICAsIG1fYnV0dGVyZmx5KGJ1dHRlcmZseSkKIHsKIH0KQEAgLTEx
NDcsNyArMTE0Nyw3IEBAIGlubGluZSBKU1ZhbHVlIEpTT2JqZWN0Ojpwcm90b3R5cGUoKSBjb24K
IAogQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmdldChl
eGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CisgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gc3RydWN0dXJlKCktPmdldChleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUpOwogICAgIGlm
IChMSUtFTFkoaXNWYWxpZE9mZnNldChvZmZzZXQpKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gZ2V0RGlyZWN0KG9mZnNldCk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+aGFzR2V0dGVy
U2V0dGVyUHJvcGVydGllcygpICYmIHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpCkBAIC0xMjE1LDcg
KzEyMTUsNyBAQCBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6Z2V0KEV4ZWNTdGF0ZSogCiB9CiAK
IHRlbXBsYXRlPEpTT2JqZWN0OjpQdXRNb2RlIG1vZGU+Ci1pbmxpbmUgYm9vbCBKU09iamVjdDo6
cHV0RGlyZWN0SW50ZXJuYWwoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QsIEpTQ2VsbCogc3BlY2lmaWNGdW5jdGlvbikKK2lubGluZSBib29sIEpT
T2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCwgSlNDZWxsKiBzcGVjaWZpY0Z1bmN0aW9uKQogewogICAgIEFTU0VSVCh2YWx1ZSk7CiAg
ICAgQVNTRVJUKHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgPT0gISEoYXR0cmlidXRlcyAmIEFjY2Vz
c29yKSk7CkBAIC0xMjI1LDE2ICsxMjI1LDE2IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXRE
aXJlY3RJbnRlcm5hbCgKICAgICBpZiAoc3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7CiAg
ICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwogICAgICAgICBKU0NlbGwqIGN1cnJl
bnRTcGVjaWZpY0Z1bmN0aW9uOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1
Y3R1cmUoKS0+Z2V0KGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMs
IGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gc3RydWN0dXJlKCktPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcywg
Y3VycmVudFNwZWNpZmljRnVuY3Rpb24pOwogICAgICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRP
ZmZzZXQpIHsKICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGN1cnJlbnRseSBhIHNwZWNpZmlj
IGZ1bmN0aW9uLCBhbmQgdGhlcmUgbm93IGVpdGhlciBpc24ndCwKICAgICAgICAgICAgIC8vIG9y
IHRoZSBuZXcgdmFsdWUgaXMgZGlmZmVyZW50LCB0aGVuIGRlc3BlY2lmeS4KICAgICAgICAgICAg
IGlmIChjdXJyZW50U3BlY2lmaWNGdW5jdGlvbiAmJiAoc3BlY2lmaWNGdW5jdGlvbiAhPSBjdXJy
ZW50U3BlY2lmaWNGdW5jdGlvbikpCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlKCktPmRlc3Bl
Y2lmeURpY3Rpb25hcnlGdW5jdGlvbihnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUpOworICAgICAg
ICAgICAgICAgIHN0cnVjdHVyZSgpLT5kZXNwZWNpZnlEaWN0aW9uYXJ5RnVuY3Rpb24odm0sIHBy
b3BlcnR5TmFtZSk7CiAgICAgICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgY3Vy
cmVudEF0dHJpYnV0ZXMgJiBSZWFkT25seSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICAgICAgICAgIHB1dERpcmVjdChnbG9iYWxEYXRhLCBvZmZzZXQsIHZhbHVlKTsKKyAg
ICAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAgICAgICAgICAgICAvLyBB
dCB0aGlzIHBvaW50LCB0aGUgb2JqZWN0cyBzdHJ1Y3R1cmUgb25seSBoYXMgYSBzcGVjaWZpYyB2
YWx1ZSBzZXQgaWYgcHJldmlvdXNseSB0aGVyZQogICAgICAgICAgICAgLy8gaGFkIGJlZW4gb25l
IHNldCwgYW5kIGlmIHRoZSBuZXcgdmFsdWUgYmVpbmcgc3BlY2lmaWVkIGlzIHRoZSBzYW1lIChv
dGhlcndpc2Ugd2Ugd291bGQKICAgICAgICAgICAgIC8vIGhhdmUgZGVzcGVjaWZpZWQsIGFib3Zl
KS4gIFNvLCBpZiBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbiBpcyBub3Qgc2V0LCBvciBpZiB0aGUg
bmV3CkBAIC0xMjUxLDEzICsxMjUxLDEzIEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJl
Y3RJbnRlcm5hbCgKIAogICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVy
Zmx5OwogICAgICAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFn
ZSgpKQotICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5z
dWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG9mZnNldCA9
IHN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHBy
b3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNGdW5jdGlvbik7Ci0gICAgICAgIHNldEJ1
dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIHN0cnVjdHVyZSgpKTsKKyAgICAgICAg
ICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBzdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0
b3JhZ2VDYXBhY2l0eSgpKTsKKyAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmFkZFByb3Bl
cnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lm
aWNGdW5jdGlvbik7CisgICAgICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5LCBzdHJ1
Y3R1cmUoKSk7CiAKICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICAgICAgQVNT
RVJUKHN0cnVjdHVyZSgpLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgICAgICBwdXREaXJl
Y3QoZ2xvYmFsRGF0YSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zm
c2V0LCB2YWx1ZSk7CiAgICAgICAgIC8vIFNlZSBjb21tZW50IG9uIHNldE5ld1Byb3BlcnR5IGNh
bGwgYmVsb3cuCiAgICAgICAgIGlmICghc3BlY2lmaWNGdW5jdGlvbikKICAgICAgICAgICAgIHNs
b3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKQEAgLTEyNzEsMTIgKzEyNzEsMTIgQEAg
aW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgIGlmIChTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGlu
Z1N0cnVjdHVyZSh0aGlzLT5zdHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBz
cGVjaWZpY0Z1bmN0aW9uLCBvZmZzZXQpKSB7CiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVy
Zmx5ID0gbV9idXR0ZXJmbHk7CiAgICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gc3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQotICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jv
d091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgY3VycmVudENhcGFjaXR5LCBzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091
dE9mTGluZVN0b3JhZ2Uodm0sIGN1cnJlbnRDYXBhY2l0eSwgc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpKTsKIAogICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgICAgICBB
U1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgICAgICBzZXRCdXR0
ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdXRE
aXJlY3QoZ2xvYmFsRGF0YSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAgICAgIHNldEJ1dHRlcmZseSh2
bSwgbmV3QnV0dGVyZmx5LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNl
dCwgdmFsdWUpOwogICAgICAgICAvLyBUaGlzIGlzIGEgbmV3IHByb3BlcnR5OyB0cmFuc2l0aW9u
cyB3aXRoIHNwZWNpZmljIHZhbHVlcyBhcmUgbm90IGN1cnJlbnRseSBjYWNoYWJsZSwKICAgICAg
ICAgLy8gc28gbGVhdmUgdGhlIHNsb3QgaW4gYW4gdW5jYWNoYWJsZSBzdGF0ZS4KICAgICAgICAg
aWYgKCFzcGVjaWZpY0Z1bmN0aW9uKQpAQCAtMTI4Niw3ICsxMjg2LDcgQEAgaW5saW5lIGJvb2wg
SlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogCiAgICAgdW5zaWduZWQgY3VycmVudEF0dHJp
YnV0ZXM7CiAgICAgSlNDZWxsKiBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbjsKLSAgICBvZmZzZXQg
PSBzdHJ1Y3R1cmUoKS0+Z2V0KGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJp
YnV0ZXMsIGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uKTsKKyAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUo
KS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzLCBjdXJyZW50U3BlY2lm
aWNGdW5jdGlvbik7CiAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CiAgICAgICAg
IGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFJlYWRPbmx5
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTMwMywyOSArMTMwMywyOSBAQCBpbmxp
bmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgICAgIGlmIChjdXJyZW50
U3BlY2lmaWNGdW5jdGlvbikgewogICAgICAgICAgICAgLy8gY2FzZSAoMSkgRG8gdGhlIHB1dCwg
dGhlbiByZXR1cm4gbGVhdmluZyB0aGUgc2xvdCB1bmNhY2hhYmxlLgogICAgICAgICAgICAgaWYg
KHNwZWNpZmljRnVuY3Rpb24gPT0gY3VycmVudFNwZWNpZmljRnVuY3Rpb24pIHsKLSAgICAgICAg
ICAgICAgICBwdXREaXJlY3QoZ2xvYmFsRGF0YSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIGNhc2UgKDIpIERlc3BlY2lm
eSwgZmFsbCB0aHJvdWdoIHRvICgzKS4KLSAgICAgICAgICAgIHNldFN0cnVjdHVyZShnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uVHJhbnNpdGlvbihnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgICAgICBzZXRTdHJ1Y3R1cmUodm0s
IFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwg
cHJvcGVydHlOYW1lKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBjYXNlICgzKSBzZXQgdGhl
IHNsb3QsIGRvIHRoZSBwdXQsIHJldHVybi4KICAgICAgICAgc2xvdC5zZXRFeGlzdGluZ1Byb3Bl
cnR5KHRoaXMsIG9mZnNldCk7Ci0gICAgICAgIHB1dERpcmVjdChnbG9iYWxEYXRhLCBvZmZzZXQs
IHZhbHVlKTsKKyAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmICFp
c0V4dGVuc2libGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCB0
aGlzLT5zdHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0
aW9uLCBvZmZzZXQpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQ
cm9wZXJ0eVRyYW5zaXRpb24odm0sIHRoaXMtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24sIG9mZnNldCk7CiAgICAgCiAgICAgdmFsaWRhdGVP
ZmZzZXQob2Zmc2V0KTsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNl
dCkpOwotICAgIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFn
ZUlmTmVjZXNzYXJ5KHZtLCBzdHJ1Y3R1cmUpOwogCi0gICAgcHV0RGlyZWN0KGdsb2JhbERhdGEs
IG9mZnNldCwgdmFsdWUpOworICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAgICAg
Ly8gVGhpcyBpcyBhIG5ldyBwcm9wZXJ0eTsgdHJhbnNpdGlvbnMgd2l0aCBzcGVjaWZpYyB2YWx1
ZXMgYXJlIG5vdCBjdXJyZW50bHkgY2FjaGFibGUsCiAgICAgLy8gc28gbGVhdmUgdGhlIHNsb3Qg
aW4gYW4gdW5jYWNoYWJsZSBzdGF0ZS4KICAgICBpZiAoIXNwZWNpZmljRnVuY3Rpb24pCkBAIC0x
MzM1LDU3ICsxMzM1LDU3IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5h
bCgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVj
dHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBvbGRDYXBhY2l0eSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUpCitpbmxp
bmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vz
c2FyeShWTSYgdm0sIHVuc2lnbmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSkKIHsKICAgICBBU1NFUlQob2xkQ2FwYWNpdHkgPD0gbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpKTsKICAgICAKICAgICBpZiAob2xkQ2FwYWNpdHkgPT0gbmV3U3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBu
ZXdTdHJ1Y3R1cmUpOworICAgICAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkg
PSBncm93T3V0T2ZMaW5lU3RvcmFnZSgKLSAgICAgICAgZ2xvYmFsRGF0YSwgb2xkQ2FwYWNpdHks
IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgc2V0QnV0dGVyZmx5KGds
b2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKKyAgICAgICAgdm0sIG9sZENh
cGFjaXR5LCBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgIHNldEJ1dHRl
cmZseSh2bSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOwogfQogCi1pbmxpbmUgdm9pZCBK
U09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKQoraW5saW5lIHZv
aWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3Nhcnko
Vk0mIHZtLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSkKIHsKICAgICBzZXRTdHJ1Y3R1cmVBbmRS
ZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KAotICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3U3RydWN0dXJlKTsKKyAgICAgICAgdm0sIHN0
cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdTdHJ1Y3R1cmUpOwogfQogCi1pbmxp
bmUgYm9vbCBKU09iamVjdDo6cHV0T3duRGF0YVByb3BlcnR5KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVy
dHlTbG90JiBzbG90KQoraW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dE93bkRhdGFQcm9wZXJ0eShW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NFUlQodmFsdWUpOwogICAgIEFTU0VSVCghSGVhcDo6
aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzKSk7CiAg
ICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpKTsKIAot
ICAgIHJldHVybiBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0PihnbG9iYWxEYXRhLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOworICAg
IHJldHVybiBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgMCwgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKIH0KIAotaW5saW5lIHZv
aWQgSlNPYmplY3Q6OnB1dERpcmVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCitp
bmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBBU1NF
UlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgJiYgIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsK
ICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2Rl
RGVmaW5lT3duUHJvcGVydHk+KGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJp
YnV0ZXMsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7CisgICAgcHV0RGlyZWN0SW50
ZXJuYWw8UHV0TW9kZURlZmluZU93blByb3BlcnR5Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
YXR0cmlidXRlcywgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKIH0KIAotaW5saW5l
IHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3QoVk0mIHZtLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAg
ICAgQVNTRVJUKCF2YWx1ZS5pc0dldHRlclNldHRlcigpKTsKLSAgICBwdXREaXJlY3RJbnRlcm5h
bDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIDAsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7CisgICAgcHV0RGlyZWN0SW50
ZXJuYWw8UHV0TW9kZURlZmluZU93blByb3BlcnR5Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
MCwgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKIH0KIAotaW5saW5lIHZvaWQgSlNP
YmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0
cmlidXRlcykKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc0dldHRlclNldHRlcigpICYm
ICEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkg
PSBtX2J1dHRlcmZseTsKICAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5l
U3RvcmFnZSgpKQotICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShn
bG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCkt
PnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKLSAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihn
bG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGdldENhbGxhYmxlT2JqZWN0KHZh
bHVlKSk7Ci0gICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgc3RydWN0
dXJlKCkpOwotICAgIHB1dERpcmVjdChnbG9iYWxEYXRhLCBvZmZzZXQsIHZhbHVlKTsKKyAgICAg
ICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3Rv
cmFnZUNhcGFjaXR5KCkpOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgp
LT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0
ZXMsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdC
dXR0ZXJmbHksIHN0cnVjdHVyZSgpKTsKKyAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUp
OwogfQogCiBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiBl
eGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIHByZWZlcnJlZFR5cGUpIGNvbnN0CkBAIC0xNDUz
LDcgKzE0NTMsNyBAQCBDT01QSUxFX0FTU0VSVCghKHNpemVvZihKU09iamVjdCkgJSBzaXplCiAK
IC8vIEhlbHBlciBmb3IgZGVmaW5pbmcgbmF0aXZlIGZ1bmN0aW9ucywgaWYgeW91J3JlIG5vdCB1
c2luZyBhIHN0YXRpYyBoYXNoIHRhYmxlLgogLy8gVXNlIHRoaXMgbWFjcm8gZnJvbSB3aXRoaW4g
ZmluaXNoQ3JlYXRpb24oKSBtZXRob2RzIGluIHByb3RvdHlwZXMuIFRoaXMgYXNzdW1lcwotLy8g
eW91J3ZlIGRlZmluZWQgdmFyaWFibGVzIGNhbGxlZCBleGVjLCBnbG9iYWxPYmplY3QsIGFuZCBn
bG9iYWxEYXRhLCBhbmQgdGhleQorLy8geW91J3ZlIGRlZmluZWQgdmFyaWFibGVzIGNhbGxlZCBl
eGVjLCBnbG9iYWxPYmplY3QsIGFuZCB2bSwgYW5kIHRoZXkKIC8vIGhhdmUgdGhlIGV4cGVjdGVk
IG1lYW5pbmdzLgogI2RlZmluZSBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTihqc05hbWUs
IGNwcE5hbWUsIGF0dHJpYnV0ZXMsIGxlbmd0aCwgaW50cmluc2ljKSBcCiAgICAgcHV0RGlyZWN0
TmF0aXZlRnVuY3Rpb24oXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDE0ODYzOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogY29u
c3QgQ2xhc3NJbmZvIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OnNfaW5mbyA9IHsgIkpTUHJvcGVy
dHlOYW1lSXRlcmF0b3IiLCAwLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTUHJvcGVydHlO
YW1lSXRlcmF0b3IpIH07CiAKIGlubGluZSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpKU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXlEYXRhKiBw
cm9wZXJ0eU5hbWVBcnJheURhdGEsIHNpemVfdCBudW1DYWNoZWFibGVTbG90cykKLSAgICA6IEpT
Q2VsbChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVJ
dGVyYXRvclN0cnVjdHVyZS5nZXQoKSkKKyAgICA6IEpTQ2VsbChleGVjLT52bSgpLCBleGVjLT52
bSgpLnByb3BlcnR5TmFtZUl0ZXJhdG9yU3RydWN0dXJlLmdldCgpKQogICAgICwgbV9udW1DYWNo
ZWFibGVTbG90cyhudW1DYWNoZWFibGVTbG90cykKICAgICAsIG1fanNTdHJpbmdzU2l6ZShwcm9w
ZXJ0eU5hbWVBcnJheURhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpLnNpemUoKSkKICAgICAsIG1f
anNTdHJpbmdzKGFkb3B0QXJyYXlQdHIobmV3IFdyaXRlQmFycmllcjxVbmtub3duPlttX2pzU3Ry
aW5nc1NpemVdKSkKQEAgLTc2LDkgKzc2LDkgQEAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogSlNQ
cm9wZXJ0eU5hbWVJdAogICAgICAgICAgICAgcmV0dXJuIGpzUHJvcGVydHlOYW1lSXRlcmF0b3I7
CiAgICAgfQogCi0gICAganNQcm9wZXJ0eU5hbWVJdGVyYXRvci0+c2V0Q2FjaGVkUHJvdG90eXBl
Q2hhaW4oZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmVDaGFpbik7Ci0gICAganNQcm9wZXJ0
eU5hbWVJdGVyYXRvci0+c2V0Q2FjaGVkU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgby0+
c3RydWN0dXJlKCkpOwotICAgIG8tPnN0cnVjdHVyZSgpLT5zZXRFbnVtZXJhdGlvbkNhY2hlKGV4
ZWMtPmdsb2JhbERhdGEoKSwganNQcm9wZXJ0eU5hbWVJdGVyYXRvcik7CisgICAganNQcm9wZXJ0
eU5hbWVJdGVyYXRvci0+c2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4oZXhlYy0+dm0oKSwgc3RydWN0
dXJlQ2hhaW4pOworICAgIGpzUHJvcGVydHlOYW1lSXRlcmF0b3ItPnNldENhY2hlZFN0cnVjdHVy
ZShleGVjLT52bSgpLCBvLT5zdHJ1Y3R1cmUoKSk7CisgICAgby0+c3RydWN0dXJlKCktPnNldEVu
dW1lcmF0aW9uQ2FjaGUoZXhlYy0+dm0oKSwganNQcm9wZXJ0eU5hbWVJdGVyYXRvcik7CiAgICAg
cmV0dXJuIGpzUHJvcGVydHlOYW1lSXRlcmF0b3I7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgJKHJl
dmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVy
dHlOYW1lSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSW1tb3J0YWxTdHJ1Y3R1cmUg
PSB0cnVlOwogICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgICAgIAot
ICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ29tcG91bmRUeXBlLCBPdmVycmlkZXNWaXNpdENo
aWxkcmVuKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDb21wb3VuZFR5cGUsIE92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW4pLCAmc19pbmZvKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKQEAgLTYyLDE1ICs2
MiwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBzaXplX3QgaSk7CiAgICAgICAgIHNpemVfdCBzaXplKCkgeyByZXR1cm4gbV9q
c1N0cmluZ3NTaXplOyB9CiAKLSAgICAgICAgdm9pZCBzZXRDYWNoZWRTdHJ1Y3R1cmUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgdm9pZCBz
ZXRDYWNoZWRTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAg
ewogICAgICAgICAgICAgQVNTRVJUKCFtX2NhY2hlZFN0cnVjdHVyZSk7CiAgICAgICAgICAgICBB
U1NFUlQoc3RydWN0dXJlKTsKLSAgICAgICAgICAgIG1fY2FjaGVkU3RydWN0dXJlLnNldChnbG9i
YWxEYXRhLCB0aGlzLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgbV9jYWNoZWRTdHJ1Y3R1cmUu
c2V0KHZtLCB0aGlzLCBzdHJ1Y3R1cmUpOwogICAgICAgICB9CiAgICAgICAgIFN0cnVjdHVyZSog
Y2FjaGVkU3RydWN0dXJlKCkgeyByZXR1cm4gbV9jYWNoZWRTdHJ1Y3R1cmUuZ2V0KCk7IH0KIAot
ICAgICAgICB2b2lkIHNldENhY2hlZFByb3RvdHlwZUNoYWluKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlQ2hhaW4qIGNhY2hlZFByb3RvdHlwZUNoYWluKSB7IG1fY2FjaGVkUHJv
dG90eXBlQ2hhaW4uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGNhY2hlZFByb3RvdHlwZUNoYWluKTsg
fQorICAgICAgICB2b2lkIHNldENhY2hlZFByb3RvdHlwZUNoYWluKFZNJiB2bSwgU3RydWN0dXJl
Q2hhaW4qIGNhY2hlZFByb3RvdHlwZUNoYWluKSB7IG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uc2V0
KHZtLCB0aGlzLCBjYWNoZWRQcm90b3R5cGVDaGFpbik7IH0KICAgICAgICAgU3RydWN0dXJlQ2hh
aW4qIGNhY2hlZFByb3RvdHlwZUNoYWluKCkgeyByZXR1cm4gbV9jYWNoZWRQcm90b3R5cGVDaGFp
bi5nZXQoKTsgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3Qg
Q2xhc3NJbmZvIHNfaW5mbzsKQEAgLTc4LDEwICs3OCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWVBcnJheURhdGEqIHByb3BlcnR5TmFtZUFycmF5RGF0YSwgSlNPYmplY3Qq
IG9iamVjdCkKICAgICAgICAgewotICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhl
Yy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMt
PnZtKCkpOwogICAgICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXlEYXRhOjpQcm9wZXJ0eU5hbWVW
ZWN0b3ImIHByb3BlcnR5TmFtZVZlY3RvciA9IHByb3BlcnR5TmFtZUFycmF5RGF0YS0+cHJvcGVy
dHlOYW1lVmVjdG9yKCk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fanNT
dHJpbmdzU2l6ZTsgKytpKQotICAgICAgICAgICAgICAgIG1fanNTdHJpbmdzW2ldLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIGpzT3duZWRTdHJpbmcoZXhlYywgcHJvcGVydHlOYW1lVmVj
dG9yW2ldLnN0cmluZygpKSk7CisgICAgICAgICAgICAgICAgbV9qc1N0cmluZ3NbaV0uc2V0KGV4
ZWMtPnZtKCksIHRoaXMsIGpzT3duZWRTdHJpbmcoZXhlYywgcHJvcGVydHlOYW1lVmVjdG9yW2ld
LnN0cmluZygpKSk7CiAgICAgICAgICAgICBtX2NhY2hlZFN0cnVjdHVyZUlubGluZUNhcGFjaXR5
ID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5saW5lQ2FwYWNpdHkoKTsKICAgICAgICAgfQogCkBA
IC0xMDgsOSArMTA4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBtX2VudW1l
cmF0aW9uQ2FjaGUuZ2V0KCk7CiAgICAgfQogICAgIAotICAgIGlubGluZSB2b2lkIFN0cnVjdHVy
ZVJhcmVEYXRhOjpzZXRFbnVtZXJhdGlvbkNhY2hlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
Y29uc3QgU3RydWN0dXJlKiBvd25lciwgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogdmFsdWUpCisg
ICAgaW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNldEVudW1lcmF0aW9uQ2FjaGUoVk0m
IHZtLCBjb25zdCBTdHJ1Y3R1cmUqIG93bmVyLCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiB2YWx1
ZSkKICAgICB7Ci0gICAgICAgIG1fZW51bWVyYXRpb25DYWNoZS5zZXQoZ2xvYmFsRGF0YSwgb3du
ZXIsIHZhbHVlKTsKKyAgICAgICAgbV9lbnVtZXJhdGlvbkNhY2hlLnNldCh2bSwgb3duZXIsIHZh
bHVlKTsKICAgICB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nywx
MyArNDcsMTMgQEAgdm9pZCBKU1Byb3h5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbAogICAg
IHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3RhcmdldCk7CiB9CiAKLXZvaWQgSlNQcm94
eTo6c2V0VGFyZ2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKK3ZvaWQgSlNQcm94eTo6c2V0VGFyZ2V0KFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBBU1NFUlRfQVJHKGdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0KTsKLSAgICBtX3RhcmdldC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgZ2xvYmFsT2JqZWN0
KTsKLSAgICBzZXRQcm90b3R5cGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LT5wcm90b3R5cGUo
KSk7CisgICAgbV90YXJnZXQuc2V0KHZtLCB0aGlzLCBnbG9iYWxPYmplY3QpOworICAgIHNldFBy
b3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LT5wcm90b3R5cGUoKSk7CiAKLSAgICBQcm90b3R5cGVN
YXAmIHByb3RvdHlwZU1hcCA9IGdsb2JhbERhdGEucHJvdG90eXBlTWFwOworICAgIFByb3RvdHlw
ZU1hcCYgcHJvdG90eXBlTWFwID0gdm0ucHJvdG90eXBlTWFwOwogICAgIGlmICghcHJvdG90eXBl
TWFwLmlzUHJvdG90eXBlKHRoaXMpKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzQs
MTYgKzM0LDE2IEBAIGNsYXNzIEpTUHJveHkgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmoKIHB1
YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0
aWMgSlNQcm94eSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTT2JqZWN0KiB0YXJnZXQpCisgICAgc3RhdGljIEpTUHJveHkqIGNyZWF0ZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogdGFyZ2V0KQogICAgIHsKLSAg
ICAgICAgSlNQcm94eSogcHJveHkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1Byb3h5
PihnbG9iYWxEYXRhLmhlYXApKSBKU1Byb3h5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAg
ICAgIHByb3h5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCB0YXJnZXQpOworICAgICAgICBK
U1Byb3h5KiBwcm94eSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTUHJveHk+KHZtLmhl
YXApKSBKU1Byb3h5KHZtLCBzdHJ1Y3R1cmUpOworICAgICAgICBwcm94eS0+ZmluaXNoQ3JlYXRp
b24odm0sIHRhcmdldCk7CiAgICAgICAgIHJldHVybiBwcm94eTsKICAgICB9CiAKLSAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oUHJveHlUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhQ
cm94eVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGlj
IEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKQEAgLTUxLDI3ICs1MSwyNyBA
QCBwdWJsaWM6CiAgICAgSlNPYmplY3QqIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0
LmdldCgpOyB9CiAKIHByb3RlY3RlZDoKLSAgICBKU1Byb3h5KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgIDogSlNEZXN0cnVjdGlibGVPYmpl
Y3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQorICAgIEpTUHJveHkoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0Rlc3RydWN0aWJsZU9iamVjdCh2bSwgc3RydWN0dXJl
KQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICB7Ci0gICAg
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CiAgICAgfQogCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTT2JqZWN0KiB0YXJnZXQpCisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIEpTT2JqZWN0KiB0YXJnZXQpCiAgICAgewotICAgICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICAgICAgbV90YXJnZXQuc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHRhcmdldCk7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAg
ICAgbV90YXJnZXQuc2V0KHZtLCB0aGlzLCB0YXJnZXQpOwogICAgIH0KIAogICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwg
SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVy
byB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBzZXRUYXJnZXQoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmplY3Qq
KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldFRhcmdldChWTSYsIEpTR2xvYmFsT2Jq
ZWN0Kik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShj
b25zdCBKU09iamVjdCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJ
KHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2Nv
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNyArMTg3LDcgQEAgc3RhdGljIGJvb2wgZXhl
Y3V0ZVJlc29sdmVPcGVyYXRpb25zKENhbAogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBwYy0+bV9zdHJ1Y3R1cmUuc2V0KGNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUo
KSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIHBjLT5tX3N0cnVjdHVyZS5zZXQoY2FsbEZyYW1l
LT52bSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0
dXJlKTsKICAgICAgICAgICAgIHBjLT5tX29mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CiAg
ICAgICAgICAgICByZXN1bHQuc2V0VmFsdWUodmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC0zMDMsNyArMzAzLDcgQEAgdGVtcGxhdGUgPEpTU2NvcGU6Okxvb2t1cE1vZGUgbW9k
ZSwgSlNTYwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB1dFRvQmFzZU9wZXJhdGlvbikg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFRvQmFzZU9wZXJhdGlvbi0+bV9pc0R5
bmFtaWMgPSByZXF1aXJlc0R5bmFtaWNDaGVja3M7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHV0VG9CYXNlT3BlcmF0aW9uLT5tX2tpbmQgPSBQdXRUb0Jhc2VPcGVyYXRpb246Okdsb2Jh
bFByb3BlcnR5UHV0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFRvQmFzZU9wZXJh
dGlvbi0+bV9zdHJ1Y3R1cmUuc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwgZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0VG9CYXNlT3BlcmF0aW9uLT5tX3N0
cnVjdHVyZS5zZXQoY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25l
ckV4ZWN1dGFibGUoKSwgZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0UHV0UHJvcGVydHlBY2Nlc3NPZmZzZXQocHV0VG9CYXNlT3BlcmF0
aW9uLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmV0dXJuVmFsdWVzKSB7CkBAIC0zNDYsNyAr
MzQ2LDcgQEAgdGVtcGxhdGUgPEpTU2NvcGU6Okxvb2t1cE1vZGUgbW9kZSwgSlNTYwogCiAgICAg
ICAgICAgICAgICAgICAgIGlmIChwdXRUb0Jhc2VPcGVyYXRpb24pIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1dFRvQmFzZU9wZXJhdGlvbi0+bV9raW5kID0gZW50cnkuaXNSZWFkT25seSgp
ID8gUHV0VG9CYXNlT3BlcmF0aW9uOjpSZWFkb25seSA6IFB1dFRvQmFzZU9wZXJhdGlvbjo6VmFy
aWFibGVQdXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXRUb0Jhc2VPcGVyYXRpb24tPm1f
c3RydWN0dXJlLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcHV0VG9C
YXNlT3BlcmF0aW9uLT5tX3N0cnVjdHVyZS5zZXQoY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBwdXRUb0Jhc2VPcGVyYXRpb24tPm1fb2Zmc2V0ID0gZW50cnkuZ2V0SW5kZXgoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1dFRvQmFzZU9wZXJhdGlvbi0+bV9zY29wZURlcHRoID0gKHNr
aXBUb3BTY29wZU5vZGUgPyAxIDogMCkgKyBzY29wZUNvdW50OwogICAgICAgICAgICAgICAgICAg
ICB9CkBAIC00OTksNyArNDk5LDcgQEAgSlNWYWx1ZSBKU1Njb3BlOjpyZXNvbHZlV2l0aEJhc2Uo
Q2FsbEZyYQogICAgIGlmIChKU09iamVjdCogcHJvcGVydHlCYXNlID0gSlNTY29wZTo6cmVzb2x2
ZUNvbnRhaW5pbmdTY29wZTxSZXR1cm5CYXNlQW5kVmFsdWU+KGNhbGxGcmFtZSwgaWRlbnRpZmll
ciwgc2xvdCwgb3BlcmF0aW9ucywgcHV0VG9CYXNlT3BlcmF0aW9ucywgZmFsc2UpKSB7CiAgICAg
ICAgIEFTU0VSVChvcGVyYXRpb25zLT5zaXplKCkpOwogICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
c2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50aWZpZXIpOwotICAgICAgICBpZiAoY2FsbEZy
YW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uKQorICAgICAgICBpZiAoY2FsbEZyYW1lLT52bSgp
LmV4Y2VwdGlvbikKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAgICAgICAgKmJh
c2UgPSBwcm9wZXJ0eUJhc2U7CkBAIC01MjksNyArNTI5LDcgQEAgSlNWYWx1ZSBKU1Njb3BlOjpy
ZXNvbHZlV2l0aFRoaXMoQ2FsbEZyYQogICAgIGlmIChKU09iamVjdCogcHJvcGVydHlCYXNlID0g
SlNTY29wZTo6cmVzb2x2ZUNvbnRhaW5pbmdTY29wZTxSZXR1cm5UaGlzQW5kVmFsdWU+KGNhbGxG
cmFtZSwgaWRlbnRpZmllciwgc2xvdCwgb3BlcmF0aW9ucywgMCwgZmFsc2UpKSB7CiAgICAgICAg
IEFTU0VSVChvcGVyYXRpb25zLT5zaXplKCkpOwogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc2xv
dC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50aWZpZXIpOwotICAgICAgICBpZiAoY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uKQorICAgICAgICBpZiAoY2FsbEZyYW1lLT52bSgpLmV4
Y2VwdGlvbikKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIEFTU0VSVCh2
YWx1ZSk7CiAgICAgICAgICpiYXNlID0gcHJvcGVydHlCYXNlLT5zdHJ1Y3R1cmUoKS0+dHlwZUlu
Zm8oKS5pc0Vudmlyb25tZW50UmVjb3JkKCkgPyBqc1VuZGVmaW5lZCgpIDogSlNWYWx1ZShwcm9w
ZXJ0eUJhc2UpOwpAQCAtNTY0LDcgKzU2NCw3IEBAIHZvaWQgSlNTY29wZTo6cmVzb2x2ZVB1dChD
YWxsRnJhbWUqIGNhbGwKICAgICAgICAgICAgICAgICBnb3RvIGdlbmVyaWNIYW5kbGVyOwogICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIG9wZXJhdGlvbi0+bV9yZWdpc3RlckFkZHJl
c3MtPnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgYmFzZS5hc0NlbGwoKSwgdmFsdWUpOwor
ICAgICAgICBvcGVyYXRpb24tPm1fcmVnaXN0ZXJBZGRyZXNzLT5zZXQoY2FsbEZyYW1lLT52bSgp
LCBiYXNlLmFzQ2VsbCgpLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgUHV0
VG9CYXNlT3BlcmF0aW9uOjpWYXJpYWJsZVB1dDogewpAQCAtNTc0LDcgKzU3NCw3IEBAIHZvaWQg
SlNTY29wZTo6cmVzb2x2ZVB1dChDYWxsRnJhbWUqIGNhbGwKICAgICAgICAgICAgICAgICBnb3Rv
IGdlbmVyaWNIYW5kbGVyOwogICAgICAgICB9CiAgICAgICAgIEpTVmFyaWFibGVPYmplY3QqIHZh
cmlhYmxlT2JqZWN0ID0ganNDYXN0PEpTVmFyaWFibGVPYmplY3QqPihiYXNlKTsKLSAgICAgICAg
dmFyaWFibGVPYmplY3QtPnJlZ2lzdGVyQXQob3BlcmF0aW9uLT5tX29mZnNldCkuc2V0KGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLCB2YXJpYWJsZU9iamVjdCwgdmFsdWUpOworICAgICAgICB2YXJp
YWJsZU9iamVjdC0+cmVnaXN0ZXJBdChvcGVyYXRpb24tPm1fb2Zmc2V0KS5zZXQoY2FsbEZyYW1l
LT52bSgpLCB2YXJpYWJsZU9iamVjdCwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC01ODIsNyArNTgyLDcgQEAgdm9pZCBKU1Njb3BlOjpyZXNvbHZlUHV0KENhbGxGcmFtZSog
Y2FsbAogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oYmFzZSk7
CiAgICAgICAgIGlmIChvcGVyYXRpb24tPm1fc3RydWN0dXJlLmdldCgpICE9IG9iamVjdC0+c3Ry
dWN0dXJlKCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgb2JqZWN0LT5wdXREaXJlY3Qo
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG9wZXJhdGlvbi0+bV9vZmZzZXQsIHZhbHVlKTsKKyAg
ICAgICAgb2JqZWN0LT5wdXREaXJlY3QoY2FsbEZyYW1lLT52bSgpLCBvcGVyYXRpb24tPm1fb2Zm
c2V0LCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTYwNyw3ICs2MDcsNyBA
QCB2b2lkIEpTU2NvcGU6OnJlc29sdmVQdXQoQ2FsbEZyYW1lKiBjYWxsCiAgICAgaWYgKHNsb3Qu
YmFzZSgpICE9IGJhc2VPYmplY3QpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIWJhc2VP
YmplY3QtPmhhc0lubGluZVN0b3JhZ2UoKSk7Ci0gICAgb3BlcmF0aW9uLT5tX3N0cnVjdHVyZS5z
ZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVy
RXhlY3V0YWJsZSgpLCBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKSk7CisgICAgb3BlcmF0aW9uLT5t
X3N0cnVjdHVyZS5zZXQoY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5v
d25lckV4ZWN1dGFibGUoKSwgYmFzZU9iamVjdC0+c3RydWN0dXJlKCkpOwogICAgIHNldFB1dFBy
b3BlcnR5QWNjZXNzT2Zmc2V0KG9wZXJhdGlvbiwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAg
cmV0dXJuOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAko
cmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29w
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMSArNTksMTEgQEAgcHVibGljOgogICAgIGludCBs
b2NhbERlcHRoKCk7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCk7Ci0gICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKCk7CisgICAgVk0qIHZtKCk7CiAgICAgSlNPYmplY3Qq
IGdsb2JhbFRoaXMoKTsKIAogcHJvdGVjdGVkOgotICAgIEpTU2NvcGUoSlNHbG9iYWxEYXRhJiwg
U3RydWN0dXJlKiwgSlNTY29wZSogbmV4dCk7CisgICAgSlNTY29wZShWTSYsIFN0cnVjdHVyZSos
IEpTU2NvcGUqIG5leHQpOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogcHJp
dmF0ZToKQEAgLTgwLDkgKzgwLDkgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8UmV0dXJuVmFs
dWVzPiBzdGF0aWMgSlNPYmplY3QqIHJlc29sdmVDb250YWluaW5nU2NvcGUoQ2FsbEZyYW1lKiwg
Y29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYsIFJlc29sdmVPcGVyYXRpb25zKiwgUHV0
VG9CYXNlT3BlcmF0aW9uKiwgYm9vbCBpc1N0cmljdCk7CiB9OwogCi1pbmxpbmUgSlNTY29wZTo6
SlNTY29wZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U1Njb3BlKiBuZXh0KQotICAgIDogQmFzZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCi0gICAgLCBt
X25leHQoZ2xvYmFsRGF0YSwgdGhpcywgbmV4dCwgV3JpdGVCYXJyaWVyPEpTU2NvcGU+OjpNYXlC
ZU51bGwpCitpbmxpbmUgSlNTY29wZTo6SlNTY29wZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU1Njb3BlKiBuZXh0KQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICwgbV9u
ZXh0KHZtLCB0aGlzLCBuZXh0LCBXcml0ZUJhcnJpZXI8SlNTY29wZT46Ok1heUJlTnVsbCkKIHsK
IH0KIApAQCAtMTI3LDkgKzEyNyw5IEBAIGlubGluZSBKU0dsb2JhbE9iamVjdCogSlNTY29wZTo6
Z2xvYmFsT2IKICAgICByZXR1cm4gc3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpOwogfQogCi1p
bmxpbmUgSlNHbG9iYWxEYXRhKiBKU1Njb3BlOjpnbG9iYWxEYXRhKCkKK2lubGluZSBWTSogSlNT
Y29wZTo6dm0oKQogeyAKLSAgICByZXR1cm4gSGVhcDo6aGVhcCh0aGlzKS0+Z2xvYmFsRGF0YSgp
OworICAgIHJldHVybiBIZWFwOjpoZWFwKHRoaXMpLT52bSgpOwogfQogCiBpbmxpbmUgUmVnaXN0
ZXImIFJlZ2lzdGVyOjpvcGVyYXRvcj0oSlNTY29wZSogc2NvcGUpCkBAIC0xNDMsMTAgKzE0Mywx
MCBAQCBpbmxpbmUgSlNTY29wZSogUmVnaXN0ZXI6OnNjb3BlKCkgY29uc3QKICAgICByZXR1cm4g
anNDYXN0PEpTU2NvcGUqPihqc1ZhbHVlKCkpOwogfQogCi1pbmxpbmUgSlNHbG9iYWxEYXRhJiBF
eGVjU3RhdGU6Omdsb2JhbERhdGEoKSBjb25zdAoraW5saW5lIFZNJiBFeGVjU3RhdGU6OnZtKCkg
Y29uc3QKIHsKLSAgICBBU1NFUlQoc2NvcGUoKS0+Z2xvYmFsRGF0YSgpKTsKLSAgICByZXR1cm4g
KnNjb3BlKCktPmdsb2JhbERhdGEoKTsKKyAgICBBU1NFUlQoc2NvcGUoKS0+dm0oKSk7CisgICAg
cmV0dXJuICpzY29wZSgpLT52bSgpOwogfQogCiBpbmxpbmUgSlNHbG9iYWxPYmplY3QqIEV4ZWNT
dGF0ZTo6bGV4aWNhbEdsb2JhbE9iamVjdCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5o
CShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDE0ICs4MiwxNCBA
QCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEpTU3ltYm9sVGFibGVPYmplY3Q6OlN0
cnVjdHVyZUZsYWdzOwogCi0gICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1Njb3BlKiBzY29wZSkKLSAg
ICAgICAgOiBKU1N5bWJvbFRhYmxlT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgc2NvcGUp
CisgICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU1Njb3BlKiBzY29wZSkKKyAgICAgICAgOiBKU1N5bWJvbFRhYmxlT2JqZWN0KHZtLCBz
dHJ1Y3R1cmUsIHNjb3BlKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAg
ICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgfQogCiAgICAgU2VnbWVudGVkVmVj
dG9yPFdyaXRlQmFycmllcjxVbmtub3duPiwgMTY+IG1fcmVnaXN0ZXJzOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gMTQ4NjM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw3ICs0MCw3IEBAIHZvaWQgSlNSb3BlU3RyaW5nOjpSb3BlQnVpbGRlcjo6ZXhw
YW5kKCkKIHsKICAgICBBU1NFUlQobV9pbmRleCA9PSBKU1JvcGVTdHJpbmc6OnNfbWF4SW50ZXJu
YWxSb3BlTGVuZ3RoKTsKICAgICBKU1N0cmluZyoganNTdHJpbmcgPSBtX2pzU3RyaW5nOwotICAg
IG1fanNTdHJpbmcgPSBqc1N0cmluZ0J1aWxkZXIoJm1fZ2xvYmFsRGF0YSk7CisgICAgbV9qc1N0
cmluZyA9IGpzU3RyaW5nQnVpbGRlcigmbV92bSk7CiAgICAgbV9pbmRleCA9IDA7CiAgICAgYXBw
ZW5kKGpzU3RyaW5nKTsKIH0KQEAgLTI2MSw4ICsyNjEsOCBAQCBkb3VibGUgSlNTdHJpbmc6OnRv
TnVtYmVyKEV4ZWNTdGF0ZSogZXhlCiAKIGlubGluZSBTdHJpbmdPYmplY3QqIFN0cmluZ09iamVj
dDo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNTdHJpbmcqIHN0cmluZykKIHsKLSAgICBTdHJpbmdPYmplY3QqIG9iamVjdCA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPFN0cmluZ09iamVjdD4oKmV4ZWMtPmhlYXAoKSkpIFN0cmluZ09i
amVjdChleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+c3RyaW5nT2JqZWN0U3RydWN0
dXJlKCkpOwotICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBz
dHJpbmcpOworICAgIFN0cmluZ09iamVjdCogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8U3RyaW5nT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgU3RyaW5nT2JqZWN0KGV4ZWMtPnZt
KCksIGdsb2JhbE9iamVjdC0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCkpOworICAgIG9iamVjdC0+
ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwgc3RyaW5nKTsKICAgICByZXR1cm4gb2JqZWN0Owog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlz
aW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDM0ICszNSwzNCBAQCBjbGFzcyBKU1N0cmluZzsKIGNsYXNz
IEpTUm9wZVN0cmluZzsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotSlNTdHJpbmcq
IGpzRW1wdHlTdHJpbmcoSlNHbG9iYWxEYXRhKik7CitKU1N0cmluZyoganNFbXB0eVN0cmluZyhW
TSopOwogSlNTdHJpbmcqIGpzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKik7Ci1KU1N0cmluZyoganNT
dHJpbmcoSlNHbG9iYWxEYXRhKiwgY29uc3QgU3RyaW5nJik7IC8vIHJldHVybnMgZW1wdHkgc3Ry
aW5nIGlmIHBhc3NlZCBudWxsIHN0cmluZworSlNTdHJpbmcqIGpzU3RyaW5nKFZNKiwgY29uc3Qg
U3RyaW5nJik7IC8vIHJldHVybnMgZW1wdHkgc3RyaW5nIGlmIHBhc3NlZCBudWxsIHN0cmluZwog
SlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOyAvLyByZXR1cm5z
IGVtcHR5IHN0cmluZyBpZiBwYXNzZWQgbnVsbCBzdHJpbmcKIAotSlNTdHJpbmcqIGpzU2luZ2xl
Q2hhcmFjdGVyU3RyaW5nKEpTR2xvYmFsRGF0YSosIFVDaGFyKTsKK0pTU3RyaW5nKiBqc1Npbmds
ZUNoYXJhY3RlclN0cmluZyhWTSosIFVDaGFyKTsKIEpTU3RyaW5nKiBqc1NpbmdsZUNoYXJhY3Rl
clN0cmluZyhFeGVjU3RhdGUqLCBVQ2hhcik7CiBKU1N0cmluZyoganNTaW5nbGVDaGFyYWN0ZXJT
dWJzdHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgb2Zmc2V0KTsKLUpT
U3RyaW5nKiBqc1N1YnN0cmluZyhKU0dsb2JhbERhdGEqLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CitKU1N0cmluZyoganNTdWJzdHJpbmcoVk0qLCBj
b25zdCBTdHJpbmcmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiBKU1N0cmlu
ZyoganNTdWJzdHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAvLyBOb24tdHJpdmlhbCBzdHJpbmdzIGFyZSB0d28gb3Ig
bW9yZSBjaGFyYWN0ZXJzIGxvbmcuCiAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIGZhc3RlciB0aGFu
IGp1c3QgY2FsbGluZyBqc1N0cmluZy4KLUpTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoSlNH
bG9iYWxEYXRhKiwgY29uc3QgU3RyaW5nJik7CitKU1N0cmluZyoganNOb250cml2aWFsU3RyaW5n
KFZNKiwgY29uc3QgU3RyaW5nJik7CiBKU1N0cmluZyoganNOb250cml2aWFsU3RyaW5nKEV4ZWNT
dGF0ZSosIGNvbnN0IFN0cmluZyYpOwogCiAvLyBTaG91bGQgYmUgdXNlZCBmb3Igc3RyaW5ncyB0
aGF0IGFyZSBvd25lZCBieSBhbiBvYmplY3QgdGhhdCB3aWxsCiAvLyBsaWtlbHkgb3V0bGl2ZSB0
aGUgSlNWYWx1ZSB0aGlzIG1ha2VzLCBzdWNoIGFzIHRoZSBwYXJzZSB0cmVlIG9yIGEKIC8vIERP
TSBvYmplY3QgdGhhdCBjb250YWlucyBhIFN0cmluZwotSlNTdHJpbmcqIGpzT3duZWRTdHJpbmco
SlNHbG9iYWxEYXRhKiwgY29uc3QgU3RyaW5nJik7CitKU1N0cmluZyoganNPd25lZFN0cmluZyhW
TSosIGNvbnN0IFN0cmluZyYpOwogSlNTdHJpbmcqIGpzT3duZWRTdHJpbmcoRXhlY1N0YXRlKiwg
Y29uc3QgU3RyaW5nJik7CiAKLUpTUm9wZVN0cmluZyoganNTdHJpbmdCdWlsZGVyKEpTR2xvYmFs
RGF0YSopOworSlNSb3BlU3RyaW5nKiBqc1N0cmluZ0J1aWxkZXIoVk0qKTsKIAogY2xhc3MgSlNT
dHJpbmcgOiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgSklUOwot
ICAgIGZyaWVuZCBjbGFzcyBKU0dsb2JhbERhdGE7CisgICAgZnJpZW5kIGNsYXNzIFZNOwogICAg
IGZyaWVuZCBjbGFzcyBTcGVjaWFsaXplZFRodW5rSklUOwogICAgIGZyaWVuZCBjbGFzcyBKU1Jv
cGVTdHJpbmc7CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtTdGFjazsKQEAgLTc2LDYzICs3Niw2MyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogcHJpdmF0ZToK
LSAgICBKU1N0cmluZyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gdmFsdWUpCi0gICAgICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3Ry
aW5nU3RydWN0dXJlLmdldCgpKQorICAgIEpTU3RyaW5nKFZNJiB2bSwgUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiB2YWx1ZSkKKyAgICAgICAgOiBKU0NlbGwodm0sIHZtLnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSkKICAgICAgICAgLCBtX2ZsYWdzKDApCiAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKICAg
ICB7CiAgICAgfQogCi0gICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAg
ICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkKKyAgICBKU1N0cmluZyhWTSYgdm0pCisgICAgICAgIDogSlNDZWxsKHZtLCB2bS5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgICwgbV9mbGFncygwKQogICAgIHsKICAgICB9CiAKLSAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IGxl
bmd0aCkKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSwgc2l6ZV90IGxlbmd0aCkKICAg
ICB7CiAgICAgICAgIEFTU0VSVCghbV92YWx1ZS5pc051bGwoKSk7Ci0gICAgICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgICAgIG1fbGVuZ3RoID0gbGVuZ3RoOwogICAgICAgICBzZXRJczhCaXQobV92YWx1
ZS5pbXBsKCktPmlzOEJpdCgpKTsKLSAgICAgICAgZ2xvYmFsRGF0YS5tX25ld1N0cmluZ3NTaW5j
ZUxhc3RIYXNoQ29ucysrOworICAgICAgICB2bS5tX25ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29u
cysrOwogICAgIH0KIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgY29zdCkKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgc2l6ZV90IGxlbmd0aCwgc2l6ZV90IGNvc3QpCiAgICAgewogICAgICAgICBB
U1NFUlQoIW1fdmFsdWUuaXNOdWxsKCkpOwotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihn
bG9iYWxEYXRhKTsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICBt
X2xlbmd0aCA9IGxlbmd0aDsKICAgICAgICAgc2V0SXM4Qml0KG1fdmFsdWUuaW1wbCgpLT5pczhC
aXQoKSk7CiAgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChj
b3N0KTsKLSAgICAgICAgZ2xvYmFsRGF0YS5tX25ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29ucysr
OworICAgICAgICB2bS5tX25ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29ucysrOwogICAgIH0KIAog
cHJvdGVjdGVkOgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIHsKLSAgICAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICAgICAgbV9sZW5ndGggPSAwOwogICAgICAgICBzZXRJczhCaXQodHJ1ZSk7
Ci0gICAgICAgIGdsb2JhbERhdGEubV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMrKzsKKyAg
ICAgICAgdm0ubV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMrKzsKICAgICB9CiAgICAgICAg
IAogcHVibGljOgotICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB2YWx1ZSkKKyAgICBzdGF0aWMgSlNTdHJp
bmcqIGNyZWF0ZShWTSYgdm0sIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdmFsdWUpCiAgICAgewog
ICAgICAgICBBU1NFUlQodmFsdWUpOwogICAgICAgICBzaXplX3QgbGVuZ3RoID0gdmFsdWUtPmxl
bmd0aCgpOwogICAgICAgICBzaXplX3QgY29zdCA9IHZhbHVlLT5jb3N0KCk7Ci0gICAgICAgIEpT
U3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0cmluZz4o
Z2xvYmFsRGF0YS5oZWFwKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgdmFsdWUpOwotICAgICAgICBu
ZXdTdHJpbmctPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIGxlbmd0aCwgY29zdCk7CisgICAg
ICAgIEpTU3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0
cmluZz4odm0uaGVhcCkpIEpTU3RyaW5nKHZtLCB2YWx1ZSk7CisgICAgICAgIG5ld1N0cmluZy0+
ZmluaXNoQ3JlYXRpb24odm0sIGxlbmd0aCwgY29zdCk7CiAgICAgICAgIHJldHVybiBuZXdTdHJp
bmc7CiAgICAgfQotICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlSGFzT3RoZXJPd25lcihKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdmFsdWUpCisgICAg
c3RhdGljIEpTU3RyaW5nKiBjcmVhdGVIYXNPdGhlck93bmVyKFZNJiB2bSwgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgICAg
IHNpemVfdCBsZW5ndGggPSB2YWx1ZS0+bGVuZ3RoKCk7Ci0gICAgICAgIEpTU3RyaW5nKiBuZXdT
dHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0cmluZz4oZ2xvYmFsRGF0YS5o
ZWFwKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgdmFsdWUpOwotICAgICAgICBuZXdTdHJpbmctPmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIGxlbmd0aCk7CisgICAgICAgIEpTU3RyaW5nKiBuZXdT
dHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0cmluZz4odm0uaGVhcCkpIEpT
U3RyaW5nKHZtLCB2YWx1ZSk7CisgICAgICAgIG5ld1N0cmluZy0+ZmluaXNoQ3JlYXRpb24odm0s
IGxlbmd0aCk7CiAgICAgICAgIHJldHVybiBuZXdTdHJpbmc7CiAgICAgfQogCkBAIC0xNTMsOSAr
MTUzLDkgQEAgcHVibGljOgogICAgIGJvb2wgY2FuR2V0SW5kZXgodW5zaWduZWQgaSkgeyByZXR1
cm4gaSA8IG1fbGVuZ3RoOyB9CiAgICAgSlNTdHJpbmcqIGdldEluZGV4KEV4ZWNTdGF0ZSosIHVu
c2lnbmVkKTsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG8pCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKICAgICB7Ci0gICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3Rv
LCBUeXBlSW5mbyhTdHJpbmdUeXBlLCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRl
cmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKSwg
JnNfaW5mbyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90bywgVHlwZUluZm8oU3RyaW5nVHlwZSwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElz
Tm90WmVybyksICZzX2luZm8pOwogICAgIH0KIAogICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZM
ZW5ndGgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNTdHJpbmcsIG1fbGVuZ3RoKTsgfQpA
QCAtMjE1LDEzICsyMTUsMTMgQEAgcHJpdmF0ZToKIGNsYXNzIEpTUm9wZVN0cmluZyA6IHB1Ymxp
YyBKU1N0cmluZyB7CiAgICAgZnJpZW5kIGNsYXNzIEpTU3RyaW5nOwogCi0gICAgZnJpZW5kIEpT
Um9wZVN0cmluZyoganNTdHJpbmdCdWlsZGVyKEpTR2xvYmFsRGF0YSopOworICAgIGZyaWVuZCBK
U1JvcGVTdHJpbmcqIGpzU3RyaW5nQnVpbGRlcihWTSopOwogCiAgICAgY2xhc3MgUm9wZUJ1aWxk
ZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgUm9wZUJ1aWxkZXIoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQotICAgICAgICAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKLSAgICAgICAg
ICAgICwgbV9qc1N0cmluZyhqc1N0cmluZ0J1aWxkZXIoJmdsb2JhbERhdGEpKQorICAgICAgICBS
b3BlQnVpbGRlcihWTSYgdm0pCisgICAgICAgICAgICA6IG1fdm0odm0pCisgICAgICAgICAgICAs
IG1fanNTdHJpbmcoanNTdHJpbmdCdWlsZGVyKCZ2bSkpCiAgICAgICAgICAgICAsIG1faW5kZXgo
MCkKICAgICAgICAgewogICAgICAgICB9CkBAIC0yMzAsNyArMjMwLDcgQEAgY2xhc3MgSlNSb3Bl
U3RyaW5nIDogcHVibGljIEpTU3RyaW5nIHsKICAgICAgICAgewogICAgICAgICAgICAgaWYgKG1f
aW5kZXggPT0gSlNSb3BlU3RyaW5nOjpzX21heEludGVybmFsUm9wZUxlbmd0aCkKICAgICAgICAg
ICAgICAgICBleHBhbmQoKTsKLSAgICAgICAgICAgIG1fanNTdHJpbmctPmFwcGVuZChtX2dsb2Jh
bERhdGEsIG1faW5kZXgrKywganNTdHJpbmcpOworICAgICAgICAgICAgbV9qc1N0cmluZy0+YXBw
ZW5kKG1fdm0sIG1faW5kZXgrKywganNTdHJpbmcpOwogICAgICAgICB9CiAKICAgICAgICAgSlNS
b3BlU3RyaW5nKiByZWxlYXNlKCkKQEAgLTI0NSw2NiArMjQ1LDY2IEBAIGNsYXNzIEpTUm9wZVN0
cmluZyA6IHB1YmxpYyBKU1N0cmluZyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBleHBh
bmQoKTsKICAgICAgICAgICAgIAotICAgICAgICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsK
KyAgICAgICAgVk0mIG1fdm07CiAgICAgICAgIEpTUm9wZVN0cmluZyogbV9qc1N0cmluZzsKICAg
ICAgICAgc2l6ZV90IG1faW5kZXg7CiAgICAgfTsKICAgICAgICAgCiBwcml2YXRlOgotICAgIEpT
Um9wZVN0cmluZyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgICAgIDogSlNTdHJpbmco
Z2xvYmFsRGF0YSkKKyAgICBKU1JvcGVTdHJpbmcoVk0mIHZtKQorICAgICAgICA6IEpTU3RyaW5n
KHZtKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIpCisgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIEpTU3RyaW5nKiBzMSwgSlNTdHJpbmcqIHMyKQogICAgIHsKLSAg
ICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgbV9sZW5ndGggPSBzMS0+bGVuZ3RoKCkgKyBzMi0+
bGVuZ3RoKCk7CiAgICAgICAgIHNldElzOEJpdChzMS0+aXM4Qml0KCkgJiYgczItPmlzOEJpdCgp
KTsKLSAgICAgICAgbV9maWJlcnNbMF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMxKTsKLSAgICAg
ICAgbV9maWJlcnNbMV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMyKTsKKyAgICAgICAgbV9maWJl
cnNbMF0uc2V0KHZtLCB0aGlzLCBzMSk7CisgICAgICAgIG1fZmliZXJzWzFdLnNldCh2bSwgdGhp
cywgczIpOwogICAgIH0KICAgICAgICAgCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTU3RyaW5nKiBzMSwgSlNTdHJpbmcqIHMyLCBKU1N0cmluZyog
czMpCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTU3RyaW5nKiBzMSwgSlNTdHJp
bmcqIHMyLCBKU1N0cmluZyogczMpCiAgICAgewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bihnbG9iYWxEYXRhKTsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAg
ICBtX2xlbmd0aCA9IHMxLT5sZW5ndGgoKSArIHMyLT5sZW5ndGgoKSArIHMzLT5sZW5ndGgoKTsK
ICAgICAgICAgc2V0SXM4Qml0KHMxLT5pczhCaXQoKSAmJiBzMi0+aXM4Qml0KCkgJiYgIHMzLT5p
czhCaXQoKSk7Ci0gICAgICAgIG1fZmliZXJzWzBdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMSk7
Ci0gICAgICAgIG1fZmliZXJzWzFdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMik7Ci0gICAgICAg
IG1fZmliZXJzWzJdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMyk7CisgICAgICAgIG1fZmliZXJz
WzBdLnNldCh2bSwgdGhpcywgczEpOworICAgICAgICBtX2ZpYmVyc1sxXS5zZXQodm0sIHRoaXMs
IHMyKTsKKyAgICAgICAgbV9maWJlcnNbMl0uc2V0KHZtLCB0aGlzLCBzMyk7CiAgICAgfQogCi0g
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgewotICAgICAgICBKU1N0cmluZzo6ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEpTU3RyaW5nOjpmaW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBlbmQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBz
aXplX3QgaW5kZXgsIEpTU3RyaW5nKiBqc1N0cmluZykKKyAgICB2b2lkIGFwcGVuZChWTSYgdm0s
IHNpemVfdCBpbmRleCwgSlNTdHJpbmcqIGpzU3RyaW5nKQogICAgIHsKLSAgICAgICAgbV9maWJl
cnNbaW5kZXhdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBqc1N0cmluZyk7CisgICAgICAgIG1fZmli
ZXJzW2luZGV4XS5zZXQodm0sIHRoaXMsIGpzU3RyaW5nKTsKICAgICAgICAgbV9sZW5ndGggKz0g
anNTdHJpbmctPm1fbGVuZ3RoOwogICAgICAgICBzZXRJczhCaXQoaXM4Qml0KCkgJiYganNTdHJp
bmctPmlzOEJpdCgpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNSb3BlU3RyaW5nKiBjcmVhdGVO
dWxsKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICBzdGF0aWMgSlNSb3BlU3RyaW5nKiBj
cmVhdGVOdWxsKFZNJiB2bSkKICAgICB7Ci0gICAgICAgIEpTUm9wZVN0cmluZyogbmV3U3RyaW5n
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNSb3BlU3RyaW5nPihnbG9iYWxEYXRhLmhl
YXApKSBKU1JvcGVTdHJpbmcoZ2xvYmFsRGF0YSk7Ci0gICAgICAgIG5ld1N0cmluZy0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEpTUm9wZVN0cmluZyogbmV3U3RyaW5nID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNSb3BlU3RyaW5nPih2bS5oZWFwKSkgSlNSb3Bl
U3RyaW5nKHZtKTsKKyAgICAgICAgbmV3U3RyaW5nLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAg
ICAgIHJldHVybiBuZXdTdHJpbmc7CiAgICAgfQogCiBwdWJsaWM6Ci0gICAgc3RhdGljIEpTU3Ry
aW5nKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1N0cmluZyogczEsIEpTU3Ry
aW5nKiBzMikKKyAgICBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZShWTSYgdm0sIEpTU3RyaW5nKiBz
MSwgSlNTdHJpbmcqIHMyKQogICAgIHsKLSAgICAgICAgSlNSb3BlU3RyaW5nKiBuZXdTdHJpbmcg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1JvcGVTdHJpbmc+KGdsb2JhbERhdGEuaGVh
cCkpIEpTUm9wZVN0cmluZyhnbG9iYWxEYXRhKTsKLSAgICAgICAgbmV3U3RyaW5nLT5maW5pc2hD
cmVhdGlvbihnbG9iYWxEYXRhLCBzMSwgczIpOworICAgICAgICBKU1JvcGVTdHJpbmcqIG5ld1N0
cmluZyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTUm9wZVN0cmluZz4odm0uaGVhcCkp
IEpTUm9wZVN0cmluZyh2bSk7CisgICAgICAgIG5ld1N0cmluZy0+ZmluaXNoQ3JlYXRpb24odm0s
IHMxLCBzMik7CiAgICAgICAgIHJldHVybiBuZXdTdHJpbmc7CiAgICAgfQotICAgIHN0YXRpYyBK
U1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNTdHJpbmcqIHMxLCBK
U1N0cmluZyogczIsIEpTU3RyaW5nKiBzMykKKyAgICBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZShW
TSYgdm0sIEpTU3RyaW5nKiBzMSwgSlNTdHJpbmcqIHMyLCBKU1N0cmluZyogczMpCiAgICAgewot
ICAgICAgICBKU1JvcGVTdHJpbmcqIG5ld1N0cmluZyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEpTUm9wZVN0cmluZz4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNSb3BlU3RyaW5nKGdsb2JhbERh
dGEpOwotICAgICAgICBuZXdTdHJpbmctPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIHMxLCBz
MiwgczMpOworICAgICAgICBKU1JvcGVTdHJpbmcqIG5ld1N0cmluZyA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEpTUm9wZVN0cmluZz4odm0uaGVhcCkpIEpTUm9wZVN0cmluZyh2bSk7Cisg
ICAgICAgIG5ld1N0cmluZy0+ZmluaXNoQ3JlYXRpb24odm0sIHMxLCBzMiwgczMpOwogICAgICAg
ICByZXR1cm4gbmV3U3RyaW5nOwogICAgIH0KIApAQCAtMzM2LDMyICszMzYsMzIgQEAgaW5saW5l
IEpTU3RyaW5nKiBhc1N0cmluZyhKU1ZhbHVlIHZhbHVlKQogICAgIHJldHVybiBqc0Nhc3Q8SlNT
dHJpbmcqPih2YWx1ZS5hc0NlbGwoKSk7CiB9CiAKLWlubGluZSBKU1N0cmluZyoganNFbXB0eVN0
cmluZyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitpbmxpbmUgSlNTdHJpbmcqIGpzRW1wdHlT
dHJpbmcoVk0qIHZtKQogewotICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuZW1w
dHlTdHJpbmcoKTsKKyAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy5lbXB0eVN0cmluZygpOwog
fQogCi1BTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1NpbmdsZUNoYXJhY3RlclN0cmluZyhKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIFVDaGFyIGMpCitBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBq
c1NpbmdsZUNoYXJhY3RlclN0cmluZyhWTSogdm0sIFVDaGFyIGMpCiB7CiAgICAgaWYgKGMgPD0g
bWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+c21h
bGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhnbG9iYWxEYXRhLCBjKTsKLSAgICByZXR1
cm4gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgU3RyaW5nKCZjLCAxKS5pbXBsKCkpOwor
ICAgICAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcodm0s
IGMpOworICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKCp2bSwgU3RyaW5nKCZjLCAxKS5pbXBs
KCkpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1NpbmdsZUNoYXJhY3RlclN1YnN0
cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcywgdW5zaWduZWQgb2Zmc2V0KQog
ewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Cisg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgQVNTRVJUKG9mZnNldCA8IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzLmxlbmd0aCgpKSk7CiAgICAgVUNoYXIgYyA9IHMuY2hhcmFjdGVyQXQob2Zm
c2V0KTsKICAgICBpZiAoYyA8PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpCi0gICAgICAgIHJl
dHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGdsb2Jh
bERhdGEsIGMpOwotICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBTdHJp
bmdJbXBsOjpjcmVhdGUocy5pbXBsKCksIG9mZnNldCwgMSkpOworICAgICAgICByZXR1cm4gdm0t
PnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcodm0sIGMpOworICAgIHJldHVybiBK
U1N0cmluZzo6Y3JlYXRlKCp2bSwgU3RyaW5nSW1wbDo6Y3JlYXRlKHMuaW1wbCgpLCBvZmZzZXQs
IDEpKTsKIH0KIAotaW5saW5lIEpTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBjb25zdCBTdHJpbmcmIHMpCitpbmxpbmUgSlNTdHJpbmcqIGpzTm9u
dHJpdmlhbFN0cmluZyhWTSogdm0sIGNvbnN0IFN0cmluZyYgcykKIHsKICAgICBBU1NFUlQocy5s
ZW5ndGgoKSA+IDEpOwotICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBz
LmltcGwoKSk7CisgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKnZtLCBzLmltcGwoKSk7CiB9
CiAKIGlubGluZSBjb25zdCBTdHJpbmcmIEpTU3RyaW5nOjp2YWx1ZShFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0CkBAIC0zODcsMTcgKzM4NywxNyBAQCBpbmxpbmUgSlNTdHJpbmcqIEpTU3RyaW5nOjpn
ZXRJbmRleChFeGVjCiAgICAgcmV0dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nKGV4ZWMs
IG1fdmFsdWUsIGkpOwogfQogCi1pbmxpbmUgSlNTdHJpbmcqIGpzU3RyaW5nKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgY29uc3QgU3RyaW5nJiBzKQoraW5saW5lIEpTU3RyaW5nKiBqc1N0cmlu
ZyhWTSogdm0sIGNvbnN0IFN0cmluZyYgcykKIHsKICAgICBpbnQgc2l6ZSA9IHMubGVuZ3RoKCk7
CiAgICAgaWYgKCFzaXplKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdz
LmVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLmVtcHR5U3Ry
aW5nKCk7CiAgICAgaWYgKHNpemUgPT0gMSkgewogICAgICAgICBVQ2hhciBjID0gcy5jaGFyYWN0
ZXJBdCgwKTsKICAgICAgICAgaWYgKGMgPD0gbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKQotICAg
ICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJT
dHJpbmcoZ2xvYmFsRGF0YSwgYyk7CisgICAgICAgICAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5n
cy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcodm0sIGMpOwogICAgIH0KLSAgICByZXR1cm4gSlNTdHJp
bmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgcy5pbXBsKCkpOworICAgIHJldHVybiBKU1N0cmluZzo6
Y3JlYXRlKCp2bSwgcy5pbXBsKCkpOwogfQogCiBpbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHMsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKQpAQCAtNDA1LDY3ICs0MDUsNjcgQEAgaW5saW5lIEpTU3RyaW5nKiBqc1N1YnN0cmlu
ZyhFeGVjU3RhdGUqIAogICAgIEFTU0VSVChvZmZzZXQgPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHMtPmxlbmd0aCgpKSk7CiAgICAgQVNTRVJUKGxlbmd0aCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4ocy0+bGVuZ3RoKCkpKTsKICAgICBBU1NFUlQob2Zmc2V0ICsgbGVuZ3RoIDw9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzLT5sZW5ndGgoKSkpOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAg
aWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuZW1w
dHlTdHJpbmcoKTsKLSAgICByZXR1cm4ganNTdWJzdHJpbmcoZ2xvYmFsRGF0YSwgcy0+dmFsdWUo
ZXhlYyksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3Mu
ZW1wdHlTdHJpbmcoKTsKKyAgICByZXR1cm4ganNTdWJzdHJpbmcodm0sIHMtPnZhbHVlKGV4ZWMp
LCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKLWlubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmc4KEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKK2lubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmc4KFZNKiB2bSwg
Y29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAg
ICBBU1NFUlQob2Zmc2V0IDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzLmxlbmd0aCgpKSk7CiAg
ICAgQVNTRVJUKGxlbmd0aCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocy5sZW5ndGgoKSkpOwog
ICAgIEFTU0VSVChvZmZzZXQgKyBsZW5ndGggPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHMubGVu
Z3RoKCkpKTsKICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPnNt
YWxsU3RyaW5ncy5lbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5n
cy5lbXB0eVN0cmluZygpOwogICAgIGlmIChsZW5ndGggPT0gMSkgewogICAgICAgICBVQ2hhciBj
ID0gcy5jaGFyYWN0ZXJBdChvZmZzZXQpOwogICAgICAgICBpZiAoYyA8PSBtYXhTaW5nbGVDaGFy
YWN0ZXJTdHJpbmcpCi0gICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdz
LnNpbmdsZUNoYXJhY3RlclN0cmluZyhnbG9iYWxEYXRhLCBjKTsKKyAgICAgICAgICAgIHJldHVy
biB2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyh2bSwgYyk7CiAgICAgfQot
ICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlSGFzT3RoZXJPd25lcigqZ2xvYmFsRGF0YSwgU3Ry
aW5nSW1wbDo6Y3JlYXRlOChzLmltcGwoKSwgb2Zmc2V0LCBsZW5ndGgpKTsKKyAgICByZXR1cm4g
SlNTdHJpbmc6OmNyZWF0ZUhhc090aGVyT3duZXIoKnZtLCBTdHJpbmdJbXBsOjpjcmVhdGU4KHMu
aW1wbCgpLCBvZmZzZXQsIGxlbmd0aCkpOwogfQogCi1pbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3Ry
aW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK2lubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmcoVk0q
IHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQog
ewogICAgIEFTU0VSVChvZmZzZXQgPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHMubGVuZ3RoKCkp
KTsKICAgICBBU1NFUlQobGVuZ3RoIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzLmxlbmd0aCgp
KSk7CiAgICAgQVNTRVJUKG9mZnNldCArIGxlbmd0aCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
cy5sZW5ndGgoKSkpOwogICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0
YS0+c21hbGxTdHJpbmdzLmVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2bS0+c21hbGxT
dHJpbmdzLmVtcHR5U3RyaW5nKCk7CiAgICAgaWYgKGxlbmd0aCA9PSAxKSB7CiAgICAgICAgIFVD
aGFyIGMgPSBzLmNoYXJhY3RlckF0KG9mZnNldCk7CiAgICAgICAgIGlmIChjIDw9IG1heFNpbmds
ZUNoYXJhY3RlclN0cmluZykKLSAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0
cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMpOworICAgICAgICAgICAg
cmV0dXJuIHZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHZtLCBjKTsKICAg
ICB9Ci0gICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGVIYXNPdGhlck93bmVyKCpnbG9iYWxEYXRh
LCBTdHJpbmdJbXBsOjpjcmVhdGUocy5pbXBsKCksIG9mZnNldCwgbGVuZ3RoKSk7CisgICAgcmV0
dXJuIEpTU3RyaW5nOjpjcmVhdGVIYXNPdGhlck93bmVyKCp2bSwgU3RyaW5nSW1wbDo6Y3JlYXRl
KHMuaW1wbCgpLCBvZmZzZXQsIGxlbmd0aCkpOwogfQogCi1pbmxpbmUgSlNTdHJpbmcqIGpzT3du
ZWRTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBTdHJpbmcmIHMpCitpbmxp
bmUgSlNTdHJpbmcqIGpzT3duZWRTdHJpbmcoVk0qIHZtLCBjb25zdCBTdHJpbmcmIHMpCiB7CiAg
ICAgaW50IHNpemUgPSBzLmxlbmd0aCgpOwogICAgIGlmICghc2l6ZSkKLSAgICAgICAgcmV0dXJu
IGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5lbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4g
dm0tPnNtYWxsU3RyaW5ncy5lbXB0eVN0cmluZygpOwogICAgIGlmIChzaXplID09IDEpIHsKICAg
ICAgICAgVUNoYXIgYyA9IHMuY2hhcmFjdGVyQXQoMCk7CiAgICAgICAgIGlmIChjIDw9IG1heFNp
bmdsZUNoYXJhY3RlclN0cmluZykKLSAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFs
bFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMpOworICAgICAgICAg
ICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHZtLCBjKTsK
ICAgICB9Ci0gICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGVIYXNPdGhlck93bmVyKCpnbG9iYWxE
YXRhLCBzLmltcGwoKSk7CisgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGVIYXNPdGhlck93bmVy
KCp2bSwgcy5pbXBsKCkpOwogfQogCi1pbmxpbmUgSlNSb3BlU3RyaW5nKiBqc1N0cmluZ0J1aWxk
ZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQoraW5saW5lIEpTUm9wZVN0cmluZyoganNTdHJp
bmdCdWlsZGVyKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGVOdWxs
KCpnbG9iYWxEYXRhKTsKKyAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGVOdWxsKCp2bSk7
CiB9CiAKLWlubGluZSBKU1N0cmluZyoganNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIHsg
cmV0dXJuIGpzRW1wdHlTdHJpbmcoJmV4ZWMtPmdsb2JhbERhdGEoKSk7IH0KLWlubGluZSBKU1N0
cmluZyoganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpIHsgcmV0dXJu
IGpzU3RyaW5nKCZleGVjLT5nbG9iYWxEYXRhKCksIHMpOyB9Ci1pbmxpbmUgSlNTdHJpbmcqIGpz
U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgVUNoYXIgYykgeyByZXR1cm4g
anNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoJmV4ZWMtPmdsb2JhbERhdGEoKSwgYyk7IH0KLWlubGlu
ZSBKU1N0cmluZyoganNTdWJzdHJpbmc4KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBz
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkgeyByZXR1cm4ganNTdWJzdHJpbmc4
KCZleGVjLT5nbG9iYWxEYXRhKCksIHMsIG9mZnNldCwgbGVuZ3RoKTsgfQotaW5saW5lIEpTU3Ry
aW5nKiBqc1N1YnN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcywgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpIHsgcmV0dXJuIGpzU3Vic3RyaW5nKCZleGVjLT5n
bG9iYWxEYXRhKCksIHMsIG9mZnNldCwgbGVuZ3RoKTsgfQotaW5saW5lIEpTU3RyaW5nKiBqc05v
bnRyaXZpYWxTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpIHsgcmV0dXJu
IGpzTm9udHJpdmlhbFN0cmluZygmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzKTsgfQotaW5saW5lIEpT
U3RyaW5nKiBqc093bmVkU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKSB7
IHJldHVybiBqc093bmVkU3RyaW5nKCZleGVjLT5nbG9iYWxEYXRhKCksIHMpOyB9CitpbmxpbmUg
SlNTdHJpbmcqIGpzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBleGVjKSB7IHJldHVybiBqc0VtcHR5
U3RyaW5nKCZleGVjLT52bSgpKTsgfQoraW5saW5lIEpTU3RyaW5nKiBqc1N0cmluZyhFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykgeyByZXR1cm4ganNTdHJpbmcoJmV4ZWMtPnZtKCks
IHMpOyB9CitpbmxpbmUgSlNTdHJpbmcqIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYywgVUNoYXIgYykgeyByZXR1cm4ganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoJmV4ZWMt
PnZtKCksIGMpOyB9CitpbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5nOChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFN0cmluZyYgcywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpIHsg
cmV0dXJuIGpzU3Vic3RyaW5nOCgmZXhlYy0+dm0oKSwgcywgb2Zmc2V0LCBsZW5ndGgpOyB9Citp
bmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5n
JiBzLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkgeyByZXR1cm4ganNTdWJzdHJp
bmcoJmV4ZWMtPnZtKCksIHMsIG9mZnNldCwgbGVuZ3RoKTsgfQoraW5saW5lIEpTU3RyaW5nKiBq
c05vbnRyaXZpYWxTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpIHsgcmV0
dXJuIGpzTm9udHJpdmlhbFN0cmluZygmZXhlYy0+dm0oKSwgcyk7IH0KK2lubGluZSBKU1N0cmlu
ZyoganNPd25lZFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykgeyByZXR1
cm4ganNPd25lZFN0cmluZygmZXhlYy0+dm0oKSwgcyk7IH0KIAogQUxXQVlTX0lOTElORSBib29s
IEpTU3RyaW5nOjpnZXRTdHJpbmdQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CkBAIC01MjUsMTkgKzUy
NSwxOSBAQCBpbmxpbmUgU3RyaW5nIEpTVmFsdWU6OnRvV1RGU3RyaW5nKEV4ZWNTCiAKIEFMV0FZ
U19JTkxJTkUgU3RyaW5nIGlubGluZUpTVmFsdWVOb3RTdHJpbmd0b1N0cmluZyhjb25zdCBKU1Zh
bHVlJiB2YWx1ZSwgRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLm51bWVyaWNT
dHJpbmdzLmFkZCh2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gdm0ubnVtZXJpY1N0
cmluZ3MuYWRkKHZhbHVlLmFzSW50MzIoKSk7CiAgICAgaWYgKHZhbHVlLmlzRG91YmxlKCkpCi0g
ICAgICAgIHJldHVybiBnbG9iYWxEYXRhLm51bWVyaWNTdHJpbmdzLmFkZCh2YWx1ZS5hc0RvdWJs
ZSgpKTsKKyAgICAgICAgcmV0dXJuIHZtLm51bWVyaWNTdHJpbmdzLmFkZCh2YWx1ZS5hc0RvdWJs
ZSgpKTsKICAgICBpZiAodmFsdWUuaXNUcnVlKCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRh
LnByb3BlcnR5TmFtZXMtPnRydWVLZXl3b3JkLnN0cmluZygpOworICAgICAgICByZXR1cm4gdm0u
cHJvcGVydHlOYW1lcy0+dHJ1ZUtleXdvcmQuc3RyaW5nKCk7CiAgICAgaWYgKHZhbHVlLmlzRmFs
c2UoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEucHJvcGVydHlOYW1lcy0+ZmFsc2VLZXl3
b3JkLnN0cmluZygpOworICAgICAgICByZXR1cm4gdm0ucHJvcGVydHlOYW1lcy0+ZmFsc2VLZXl3
b3JkLnN0cmluZygpOwogICAgIGlmICh2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGds
b2JhbERhdGEucHJvcGVydHlOYW1lcy0+bnVsbEtleXdvcmQuc3RyaW5nKCk7CisgICAgICAgIHJl
dHVybiB2bS5wcm9wZXJ0eU5hbWVzLT5udWxsS2V5d29yZC5zdHJpbmcoKTsKICAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEucHJvcGVydHlOYW1l
cy0+dW5kZWZpbmVkS2V5d29yZC5zdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZtLnByb3BlcnR5
TmFtZXMtPnVuZGVmaW5lZEtleXdvcmQuc3RyaW5nKCk7CiAgICAgcmV0dXJuIHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjQsNyArMTI0LDcgQEAgSlNWYWx1ZSBKU1N0cmluZ0pvaW5lcjo6YnVpbGQo
RXhlY1N0YXRlKgogICAgIGlmICghb3V0cHV0U3RyaW5nSW1wbCkKICAgICAgICAgcmV0dXJuIHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKIAotICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgb3V0cHV0U3RyaW5nSW1wbC5yZWxlYXNlKCkpOworICAgIHJl
dHVybiBKU1N0cmluZzo6Y3JlYXRlKGV4ZWMtPnZtKCksIG91dHB1dFN0cmluZ0ltcGwucmVsZWFz
ZSgpKTsKIH0KIAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1i
b2xUYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OSwxOCArNDksMTggQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IElzRW52aXJvbm1lbnRSZWNvcmQgfCBPdmVycmlk
ZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVj
dHVyZUZsYWdzOwogICAgIAotICAgIEpTU3ltYm9sVGFibGVPYmplY3QoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTY29wZSogc2NvcGUsIFNoYXJlZFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IDApCi0gICAgICAgIDogQmFzZShnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUsIHNjb3BlKQorICAgIEpTU3ltYm9sVGFibGVPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNTY29wZSogc2NvcGUsIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xU
YWJsZSA9IDApCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBzY29wZSkKICAgICB7CiAg
ICAgICAgIGlmIChzeW1ib2xUYWJsZSkKLSAgICAgICAgICAgIG1fc3ltYm9sVGFibGUuc2V0KGds
b2JhbERhdGEsIHRoaXMsIHN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgIG1fc3ltYm9sVGFibGUu
c2V0KHZtLCB0aGlzLCBzeW1ib2xUYWJsZSk7CiAgICAgfQogCi0gICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCiAgICAgewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsK
KyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICBpZiAoIW1fc3ltYm9s
VGFibGUpCi0gICAgICAgICAgICBtX3N5bWJvbFRhYmxlLnNldChnbG9iYWxEYXRhLCB0aGlzLCBT
aGFyZWRTeW1ib2xUYWJsZTo6Y3JlYXRlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgIG1fc3lt
Ym9sVGFibGUuc2V0KHZtLCB0aGlzLCBTaGFyZWRTeW1ib2xUYWJsZTo6Y3JlYXRlKHZtKSk7CiAg
ICAgfQogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOwpAQCAtMTE4LDcgKzExOCw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0KAogICAg
IFN5bWJvbFRhYmxlT2JqZWN0VHlwZSogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsCiAgICAgYm9vbCBzaG91bGRUaHJvdykK
IHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8
IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAob2JqZWN0KSk7CiAgICAgCiAgICAgU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlID0gKm9iamVjdC0+c3ltYm9sVGFibGUoKTsKQEAgLTEzNSwx
MyArMTM1LDEzIEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0KAogICAgIH0KICAgICBpZiAo
VU5MSUtFTFkod2FzRmF0KSkKICAgICAgICAgaXRlci0+dmFsdWUubm90aWZ5V3JpdGUoKTsKLSAg
ICBvYmplY3QtPnJlZ2lzdGVyQXQoZmFzdEVudHJ5LmdldEluZGV4KCkpLnNldChnbG9iYWxEYXRh
LCBvYmplY3QsIHZhbHVlKTsKKyAgICBvYmplY3QtPnJlZ2lzdGVyQXQoZmFzdEVudHJ5LmdldElu
ZGV4KCkpLnNldCh2bSwgb2JqZWN0LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFN5bWJvbFRhYmxlT2JqZWN0VHlwZT4KIGlubGluZSBib29sIHN5bWJv
bFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoCi0gICAgU3ltYm9sVGFibGVPYmplY3RUeXBlKiBvYmpl
Y3QsIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwK
KyAgICBTeW1ib2xUYWJsZU9iamVjdFR5cGUqIG9iamVjdCwgVk0mIHZtLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLAogICAgIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7
CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBI
ZWFwOjpoZWFwKG9iamVjdCkpOwpAQCAtMTUzLDcgKzE1Myw3IEBAIGlubGluZSBib29sIHN5bWJv
bFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMKICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKICAg
ICBlbnRyeS5ub3RpZnlXcml0ZSgpOwogICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0cmlidXRl
cyk7Ci0gICAgb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLnNldChnbG9iYWxE
YXRhLCBvYmplY3QsIHZhbHVlKTsKKyAgICBvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5k
ZXgoKSkuc2V0KHZtLCBvYmplY3QsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3Qu
aAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNW
YXJpYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMyArNTksMTMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgICAgIEpTVmFyaWFibGVPYmplY3QoCi0gICAg
ICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsCisgICAgICAgICAgICBWTSYgdm0sCiAg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKICAgICAgICAgICAgIFJlZ2lzdGVyKiBy
ZWdpc3RlcnMsCiAgICAgICAgICAgICBKU1Njb3BlKiBzY29wZSwKICAgICAgICAgICAgIFNoYXJl
ZFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IDAKICAgICAgICAgKQotICAgICAgICAgICAgOiBC
YXNlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgc2NvcGUsIHN5bWJvbFRhYmxlKQorICAgICAgICAg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIHNjb3BlLCBzeW1ib2xUYWJsZSkKICAgICAgICAgICAg
ICwgbV9yZWdpc3RlcnMocmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+
Kj4ocmVnaXN0ZXJzKSkKICAgICAgICAgewogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDE0ICszNywxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTV2l0aFNjb3BlKiBjcmVh
dGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0KQogICAgIHsKICAgICAgICAgSlNX
aXRoU2NvcGUqIHdpdGhTY29wZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2l0aFNj
b3BlPigqZXhlYy0+aGVhcCgpKSkgSlNXaXRoU2NvcGUoZXhlYywgb2JqZWN0KTsKLSAgICAgICAg
d2l0aFNjb3BlLT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICB3
aXRoU2NvcGUtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwogICAgICAgICByZXR1cm4gd2l0
aFNjb3BlOwogICAgIH0KIAogICAgIHN0YXRpYyBKU1dpdGhTY29wZSogY3JlYXRlKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgSlNTY29wZSogbmV4dCkKICAgICB7CiAgICAgICAg
IEpTV2l0aFNjb3BlKiB3aXRoU2NvcGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dp
dGhTY29wZT4oKmV4ZWMtPmhlYXAoKSkpIEpTV2l0aFNjb3BlKGV4ZWMsIG9iamVjdCwgbmV4dCk7
Ci0gICAgICAgIHdpdGhTY29wZS0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsK
KyAgICAgICAgd2l0aFNjb3BlLT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKICAgICAgICAg
cmV0dXJuIHdpdGhTY29wZTsKICAgICB9CiAKQEAgLTUyLDkgKzUyLDkgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0g
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKKyAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFdp
dGhTY29wZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oV2l0aFNj
b3BlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMg
SlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpAQCAtNjUsMjEgKzY1LDIxIEBA
IHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgSlNXaXRoU2NvcGUoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogb2JqZWN0KQogICAgICAgICA6IEJhc2UoCi0gICAgICAgICAgICBleGVjLT5nbG9i
YWxEYXRhKCksCisgICAgICAgICAgICBleGVjLT52bSgpLAogICAgICAgICAgICAgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT53aXRoU2NvcGVTdHJ1Y3R1cmUoKSwKICAgICAgICAgICAgIGV4
ZWMtPnNjb3BlKCkKICAgICAgICAgKQotICAgICAgICAsIG1fb2JqZWN0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgb2JqZWN0KQorICAgICAgICAsIG1fb2JqZWN0KGV4ZWMtPnZtKCksIHRoaXMs
IG9iamVjdCkKICAgICB7CiAgICAgfQogCiAgICAgSlNXaXRoU2NvcGUoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogb2JqZWN0LCBKU1Njb3BlKiBuZXh0KQogICAgICAgICA6IEJhc2UoCi0gICAg
ICAgICAgICBleGVjLT5nbG9iYWxEYXRhKCksCisgICAgICAgICAgICBleGVjLT52bSgpLAogICAg
ICAgICAgICAgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT53aXRoU2NvcGVTdHJ1Y3R1cmUo
KSwKICAgICAgICAgICAgIG5leHQKICAgICAgICAgKQotICAgICAgICAsIG1fb2JqZWN0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywgb2JqZWN0KQorICAgICAgICAsIG1fb2JqZWN0KGV4ZWMtPnZt
KCksIHRoaXMsIG9iamVjdCkKICAgICB7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAkocmV2aXNpb24gMTQ4NjM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDExICszOSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQog
CiAgICAgICAgIEpTVmFsdWUgaW50ZXJuYWxWYWx1ZSgpIGNvbnN0OwotICAgICAgICB2b2lkIHNl
dEludGVybmFsVmFsdWUoSlNHbG9iYWxEYXRhJiwgSlNWYWx1ZSk7CisgICAgICAgIHZvaWQgc2V0
SW50ZXJuYWxWYWx1ZShWTSYsIEpTVmFsdWUpOwogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAKKyAgICAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpIAogICAgICAgICB7IAotICAgICAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBpbnRlcm5hbFZhbHVlT2Zmc2V0KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV3JhcHBlck9iamVjdCwgbV9pbnRlcm5hbFZhbHVl
KTsgfQpAQCAtNTcsNyArNTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAg
cHJvdGVjdGVkOgotICAgICAgICBleHBsaWNpdCBKU1dyYXBwZXJPYmplY3QoSlNHbG9iYWxEYXRh
JiwgU3RydWN0dXJlKik7CisgICAgICAgIGV4cGxpY2l0IEpTV3JhcHBlck9iamVjdChWTSYsIFN0
cnVjdHVyZSopOwogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICAg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpAQCAt
NjYsOCArNjYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+IG1faW50ZXJuYWxWYWx1ZTsKICAgICB9OwogCi0gICAgaW5saW5lIEpTV3JhcHBlck9iamVj
dDo6SlNXcmFwcGVyT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCi0gICAgICAgIDogSlNEZXN0cnVjdGlibGVPYmplY3QoZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlKQorICAgIGlubGluZSBKU1dyYXBwZXJPYmplY3Q6OkpTV3JhcHBlck9iamVjdChWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
KHZtLCBzdHJ1Y3R1cmUpCiAgICAgewogICAgIH0KIApAQCAtNzYsMTEgKzc2LDExIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICByZXR1cm4gbV9pbnRlcm5hbFZhbHVlLmdldCgpOwogICAgIH0K
IAotICAgIGlubGluZSB2b2lkIEpTV3JhcHBlck9iamVjdDo6c2V0SW50ZXJuYWxWYWx1ZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgdmFsdWUpCisgICAgaW5saW5lIHZvaWQgSlNX
cmFwcGVyT2JqZWN0OjpzZXRJbnRlcm5hbFZhbHVlKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgICAgIEFTU0VSVCghdmFsdWUuaXNPYmpl
Y3QoKSk7Ci0gICAgICAgIG1faW50ZXJuYWxWYWx1ZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFs
dWUpOworICAgICAgICBtX2ludGVybmFsVmFsdWUuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAg
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0xpdGVyYWxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTcsMjAgKzU3LDIwIEBAIGJvb2wgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OnRyeUpTT05Q
UGEKICAgICBkbyB7CiAgICAgICAgIFZlY3RvcjxKU09OUFBhdGhFbnRyeT4gcGF0aDsKICAgICAg
ICAgLy8gVW5ndWFyZGVkIG5leHQgdG8gc3RhcnQgb2ZmIHRoZSBsZXhlcgotICAgICAgICBJZGVu
dGlmaWVyIG5hbWUgPSBJZGVudGlmaWVyKCZtX2V4ZWMtPmdsb2JhbERhdGEoKSwgbV9sZXhlci5j
dXJyZW50VG9rZW4oKS5zdGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5lbmQgLSBtX2xleGVy
LmN1cnJlbnRUb2tlbigpLnN0YXJ0KTsKKyAgICAgICAgSWRlbnRpZmllciBuYW1lID0gSWRlbnRp
ZmllcigmbV9leGVjLT52bSgpLCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0LCBtX2xleGVy
LmN1cnJlbnRUb2tlbigpLmVuZCAtIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3RhcnQpOwogICAg
ICAgICBKU09OUFBhdGhFbnRyeSBlbnRyeTsKLSAgICAgICAgaWYgKG5hbWUgPT0gbV9leGVjLT5n
bG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+dmFyS2V5d29yZCkgeworICAgICAgICBpZiAobmFt
ZSA9PSBtX2V4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+dmFyS2V5d29yZCkgewogICAgICAgICAg
ICAgaWYgKG1fbGV4ZXIubmV4dCgpICE9IFRva0lkZW50aWZpZXIpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgZW50cnkubV90eXBlID0gSlNPTlBQYXRoRW50cnlU
eXBlRGVjbGFyZTsKLSAgICAgICAgICAgIGVudHJ5Lm1fcGF0aEVudHJ5TmFtZSA9IElkZW50aWZp
ZXIoJm1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0LCBt
X2xleGVyLmN1cnJlbnRUb2tlbigpLmVuZCAtIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3RhcnQp
OworICAgICAgICAgICAgZW50cnkubV9wYXRoRW50cnlOYW1lID0gSWRlbnRpZmllcigmbV9leGVj
LT52bSgpLCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0LCBtX2xleGVyLmN1cnJlbnRUb2tl
bigpLmVuZCAtIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3RhcnQpOwogICAgICAgICAgICAgcGF0
aC5hcHBlbmQoZW50cnkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZW50cnkubV90
eXBlID0gSlNPTlBQYXRoRW50cnlUeXBlRG90OwotICAgICAgICAgICAgZW50cnkubV9wYXRoRW50
cnlOYW1lID0gSWRlbnRpZmllcigmbV9leGVjLT5nbG9iYWxEYXRhKCksIG1fbGV4ZXIuY3VycmVu
dFRva2VuKCkuc3RhcnQsIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuZW5kIC0gbV9sZXhlci5jdXJy
ZW50VG9rZW4oKS5zdGFydCk7CisgICAgICAgICAgICBlbnRyeS5tX3BhdGhFbnRyeU5hbWUgPSBJ
ZGVudGlmaWVyKCZtX2V4ZWMtPnZtKCksIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3RhcnQsIG1f
bGV4ZXIuY3VycmVudFRva2VuKCkuZW5kIC0gbV9sZXhlci5jdXJyZW50VG9rZW4oKS5zdGFydCk7
CiAgICAgICAgICAgICBwYXRoLmFwcGVuZChlbnRyeSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KG1fZXhlYy0+Z2xvYmFsRGF0YSgpLmtleXdvcmRzLT5pc0tleXdvcmQoZW50cnkubV9wYXRoRW50
cnlOYW1lKSkKKyAgICAgICAgaWYgKG1fZXhlYy0+dm0oKS5rZXl3b3Jkcy0+aXNLZXl3b3JkKGVu
dHJ5Lm1fcGF0aEVudHJ5TmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IFRva2VuVHlwZSB0b2tlblR5cGUgPSBtX2xleGVyLm5leHQoKTsKICAgICAgICAgaWYgKGVudHJ5
Lm1fdHlwZSA9PSBKU09OUFBhdGhFbnRyeVR5cGVEZWNsYXJlICYmIHRva2VuVHlwZSAhPSBUb2tB
c3NpZ24pCkBAIC05NCw3ICs5NCw3IEBAIGJvb2wgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OnRy
eUpTT05QUGEKICAgICAgICAgICAgICAgICBlbnRyeS5tX3R5cGUgPSBKU09OUFBhdGhFbnRyeVR5
cGVEb3Q7CiAgICAgICAgICAgICAgICAgaWYgKG1fbGV4ZXIubmV4dCgpICE9IFRva0lkZW50aWZp
ZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBl
bnRyeS5tX3BhdGhFbnRyeU5hbWUgPSBJZGVudGlmaWVyKCZtX2V4ZWMtPmdsb2JhbERhdGEoKSwg
bV9sZXhlci5jdXJyZW50VG9rZW4oKS5zdGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5lbmQg
LSBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0KTsKKyAgICAgICAgICAgICAgICBlbnRyeS5t
X3BhdGhFbnRyeU5hbWUgPSBJZGVudGlmaWVyKCZtX2V4ZWMtPnZtKCksIG1fbGV4ZXIuY3VycmVu
dFRva2VuKCkuc3RhcnQsIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuZW5kIC0gbV9sZXhlci5jdXJy
ZW50VG9rZW4oKS5zdGFydCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBjYXNlIFRva0xQYXJlbjogewpAQCAtMTEzLDcgKzExMyw3IEBAIGJvb2wg
TGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OnRyeUpTT05QUGEKICAgICBzdGFydEpTT046CiAgICAg
ICAgIG1fbGV4ZXIubmV4dCgpOwogICAgICAgICByZXN1bHRzLmFwcGVuZChKU09OUERhdGEoKSk7
Ci0gICAgICAgIHJlc3VsdHMubGFzdCgpLm1fdmFsdWUuc2V0KG1fZXhlYy0+Z2xvYmFsRGF0YSgp
LCBwYXJzZShTdGFydFBhcnNlRXhwcmVzc2lvbikpOworICAgICAgICByZXN1bHRzLmxhc3QoKS5t
X3ZhbHVlLnNldChtX2V4ZWMtPnZtKCksIHBhcnNlKFN0YXJ0UGFyc2VFeHByZXNzaW9uKSk7CiAg
ICAgICAgIGlmICghcmVzdWx0cy5sYXN0KCkubV92YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgcmVzdWx0cy5sYXN0KCkubV9wYXRoLnN3YXAocGF0aCk7CkBAIC0xMzMs
MTkgKzEzMywxOSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+CiBBTFdBWVNfSU5MSU5F
IGNvbnN0IElkZW50aWZpZXIgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46Om1ha2VJZGVudGlmaWVy
KGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogewogICAgIGlmICghbGVu
Z3RoKQotICAgICAgICByZXR1cm4gbV9leGVjLT5nbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+
ZW1wdHlJZGVudGlmaWVyOworICAgICAgICByZXR1cm4gbV9leGVjLT52bSgpLnByb3BlcnR5TmFt
ZXMtPmVtcHR5SWRlbnRpZmllcjsKICAgICBpZiAoY2hhcmFjdGVyc1swXSA+PSBNYXhpbXVtQ2Fj
aGFibGVDaGFyYWN0ZXIpCi0gICAgICAgIHJldHVybiBJZGVudGlmaWVyKCZtX2V4ZWMtPmdsb2Jh
bERhdGEoKSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIElkZW50aWZpZXIo
Jm1fZXhlYy0+dm0oKSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKIAogICAgIGlmIChsZW5ndGggPT0g
MSkgewogICAgICAgICBpZiAoIW1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXS5pc051
bGwoKSkKICAgICAgICAgICAgIHJldHVybiBtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1sw
XV07Ci0gICAgICAgIG1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXSA9IElkZW50aWZp
ZXIoJm1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgICAgICBt
X3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0gPSBJZGVudGlmaWVyKCZtX2V4ZWMtPnZt
KCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybiBtX3Nob3J0SWRlbnRpZmll
cnNbY2hhcmFjdGVyc1swXV07CiAgICAgfQogICAgIGlmICghbV9yZWNlbnRJZGVudGlmaWVyc1tj
aGFyYWN0ZXJzWzBdXS5pc051bGwoKSAmJiBJZGVudGlmaWVyOjplcXVhbChtX3JlY2VudElkZW50
aWZpZXJzW2NoYXJhY3RlcnNbMF1dLmltcGwoKSwgY2hhcmFjdGVycywgbGVuZ3RoKSkKICAgICAg
ICAgcmV0dXJuIG1fcmVjZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV07Ci0gICAgbV9yZWNl
bnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXSA9IElkZW50aWZpZXIoJm1fZXhlYy0+Z2xvYmFs
RGF0YSgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIG1fcmVjZW50SWRlbnRpZmllcnNbY2hh
cmFjdGVyc1swXV0gPSBJZGVudGlmaWVyKCZtX2V4ZWMtPnZtKCksIGNoYXJhY3RlcnMsIGxlbmd0
aCk7CiAgICAgcmV0dXJuIG1fcmVjZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV07CiB9CiAK
QEAgLTE1MywxOSArMTUzLDE5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KIEFMV0FZ
U19JTkxJTkUgY29uc3QgSWRlbnRpZmllciBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6bWFrZUlk
ZW50aWZpZXIoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiB7CiAgICAg
aWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBtX2V4ZWMtPmdsb2JhbERhdGEoKS5wcm9wZXJ0
eU5hbWVzLT5lbXB0eUlkZW50aWZpZXI7CisgICAgICAgIHJldHVybiBtX2V4ZWMtPnZtKCkucHJv
cGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyOwogICAgIGlmIChjaGFyYWN0ZXJzWzBdID49IE1h
eGltdW1DYWNoYWJsZUNoYXJhY3RlcikKLSAgICAgICAgcmV0dXJuIElkZW50aWZpZXIoJm1fZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgICAgICByZXR1cm4gSWRl
bnRpZmllcigmbV9leGVjLT52bSgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwogCiAgICAgaWYgKGxl
bmd0aCA9PSAxKSB7CiAgICAgICAgIGlmICghbV9zaG9ydElkZW50aWZpZXJzW2NoYXJhY3RlcnNb
MF1dLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIG1fc2hvcnRJZGVudGlmaWVyc1tjaGFy
YWN0ZXJzWzBdXTsKLSAgICAgICAgbV9zaG9ydElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dID0g
SWRlbnRpZmllcigmbV9leGVjLT5nbG9iYWxEYXRhKCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7Cisg
ICAgICAgIG1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXSA9IElkZW50aWZpZXIoJm1f
ZXhlYy0+dm0oKSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIG1fc2hvcnRJ
ZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXTsKICAgICB9CiAgICAgaWYgKCFtX3JlY2VudElkZW50
aWZpZXJzW2NoYXJhY3RlcnNbMF1dLmlzTnVsbCgpICYmIElkZW50aWZpZXI6OmVxdWFsKG1fcmVj
ZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0uaW1wbCgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgp
KQogICAgICAgICByZXR1cm4gbV9yZWNlbnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXTsKLSAg
ICBtX3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dID0gSWRlbnRpZmllcigmbV9leGVj
LT5nbG9iYWxEYXRhKCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgbV9yZWNlbnRJZGVudGlm
aWVyc1tjaGFyYWN0ZXJzWzBdXSA9IElkZW50aWZpZXIoJm1fZXhlYy0+dm0oKSwgY2hhcmFjdGVy
cywgbGVuZ3RoKTsKICAgICByZXR1cm4gbV9yZWNlbnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBd
XTsKIH0KIApAQCAtNjUzLDcgKzY1Myw3IEBAIEpTVmFsdWUgTGl0ZXJhbFBhcnNlcjxDaGFyVHlw
ZT46OnBhcnNlKFAKICAgICAgICAgICAgICAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFu
SW5kZXgpCiAgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0SW5kZXgobV9leGVj
LCBpLCBsYXN0VmFsdWUpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgb2JqZWN0LT5wdXREaXJlY3QobV9leGVjLT5nbG9iYWxEYXRhKCksIGlkZW50LCBsYXN0VmFs
dWUpOworICAgICAgICAgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdChtX2V4ZWMtPnZtKCks
IGlkZW50LCBsYXN0VmFsdWUpOwogICAgICAgICAgICAgICAgIGlkZW50aWZpZXJTdGFjay5yZW1v
dmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fbGV4ZXIuY3VycmVudFRva2VuKCkudHlw
ZSA9PSBUb2tDb21tYSkKICAgICAgICAgICAgICAgICAgICAgZ290byBkb1BhcnNlT2JqZWN0U3Rh
cnRFeHByZXNzaW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3Vw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAu
Y3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9M
b29rdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi12b2lkIEhhc2hUYWJsZTo6Y3JlYXRlVGFibGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKSBjb25zdAordm9pZCBIYXNoVGFibGU6OmNyZWF0ZVRhYmxlKFZNKiB2bSkgY29uc3QKIHsK
ICAgICBBU1NFUlQoIXRhYmxlKTsKICAgICBpbnQgbGlua0luZGV4ID0gY29tcGFjdEhhc2hTaXpl
TWFzayArIDE7CkBAIC0zNCw3ICszNCw3IEBAIHZvaWQgSGFzaFRhYmxlOjpjcmVhdGVUYWJsZShK
U0dsb2JhbERhdGEKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbXBhY3RTaXplOyArK2kpCiAg
ICAgICAgIGVudHJpZXNbaV0uc2V0S2V5KDApOwogICAgIGZvciAoaW50IGkgPSAwOyB2YWx1ZXNb
aV0ua2V5OyArK2kpIHsKLSAgICAgICAgU3RyaW5nSW1wbCogaWRlbnRpZmllciA9IElkZW50aWZp
ZXI6OmFkZChnbG9iYWxEYXRhLCB2YWx1ZXNbaV0ua2V5KS5sZWFrUmVmKCk7CisgICAgICAgIFN0
cmluZ0ltcGwqIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjphZGQodm0sIHZhbHVlc1tpXS5rZXkp
LmxlYWtSZWYoKTsKICAgICAgICAgaW50IGhhc2hJbmRleCA9IGlkZW50aWZpZXItPmV4aXN0aW5n
SGFzaCgpICYgY29tcGFjdEhhc2hTaXplTWFzazsKICAgICAgICAgSGFzaEVudHJ5KiBlbnRyeSA9
ICZlbnRyaWVzW2hhc2hJbmRleF07CiAKQEAgLTY5LDcgKzY5LDcgQEAgYm9vbCBzZXRVcFN0YXRp
Y0Z1bmN0aW9uU2xvdChFeGVjU3RhdGUqIAogewogICAgIEFTU0VSVCh0aGlzT2JqLT5nbG9iYWxP
YmplY3QoKSk7CiAgICAgQVNTRVJUKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBGdW5jdGlvbik7Ci0g
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gdGhpc09iai0+Z2V0RGlyZWN0T2Zmc2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSB0aGlzT2JqLT5nZXREaXJlY3RPZmZzZXQoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKTsKIAog
ICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CiAgICAgICAgIC8vIElmIGEgcHJvcGVy
dHkgaXMgZXZlciBkZWxldGVkIGZyb20gYW4gb2JqZWN0IHdpdGggYSBzdGF0aWMgdGFibGUsIHRo
ZW4gd2UgcmVpZnkKQEAgLTgwLDcgKzgwLDcgQEAgYm9vbCBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xv
dChFeGVjU3RhdGUqIAogICAgICAgICB0aGlzT2JqLT5wdXREaXJlY3ROYXRpdmVGdW5jdGlvbigK
ICAgICAgICAgICAgIGV4ZWMsIHRoaXNPYmotPmdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUs
IGVudHJ5LT5mdW5jdGlvbkxlbmd0aCgpLAogICAgICAgICAgICAgZW50cnktPmZ1bmN0aW9uKCks
IGVudHJ5LT5pbnRyaW5zaWMoKSwgZW50cnktPmF0dHJpYnV0ZXMoKSk7Ci0gICAgICAgIG9mZnNl
dCA9IHRoaXNPYmotPmdldERpcmVjdE9mZnNldChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5
TmFtZSk7CisgICAgICAgIG9mZnNldCA9IHRoaXNPYmotPmdldERpcmVjdE9mZnNldChleGVjLT52
bSgpLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQp
KTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCShy
ZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAu
aAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDI0ICsxMjEsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAKLSAgICAgICAgQUxXQVlTX0lO
TElORSB2b2lkIGluaXRpYWxpemVJZk5lZWRlZChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpIGNv
bnN0CisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBpbml0aWFsaXplSWZOZWVkZWQoVk0qIHZt
KSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIXRhYmxlKQotICAgICAgICAgICAg
ICAgIGNyZWF0ZVRhYmxlKGdsb2JhbERhdGEpOworICAgICAgICAgICAgICAgIGNyZWF0ZVRhYmxl
KHZtKTsKICAgICAgICAgfQogCiAgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBpbml0aWFsaXpl
SWZOZWVkZWQoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAoIXRhYmxlKQotICAgICAgICAgICAgICAgIGNyZWF0ZVRhYmxlKCZleGVjLT5nbG9iYWxEYXRh
KCkpOworICAgICAgICAgICAgICAgIGNyZWF0ZVRhYmxlKCZleGVjLT52bSgpKTsKICAgICAgICAg
fQogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVsZXRlVGFibGUoKSBjb25zdDsK
IAogICAgICAgICAvLyBGaW5kIGFuIGVudHJ5IGluIHRoZSB0YWJsZSwgYW5kIHJldHVybiB0aGUg
ZW50cnkuCi0gICAgICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSGFzaEVudHJ5KiBlbnRyeShKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBpZGVudGlmaWVyKSBjb25zdAorICAg
ICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IEhhc2hFbnRyeSogZW50cnkoVk0qIHZtLCBQcm9wZXJ0
eU5hbWUgaWRlbnRpZmllcikgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgaW5pdGlhbGl6
ZUlmTmVlZGVkKGdsb2JhbERhdGEpOworICAgICAgICAgICAgaW5pdGlhbGl6ZUlmTmVlZGVkKHZt
KTsKICAgICAgICAgICAgIHJldHVybiBlbnRyeShpZGVudGlmaWVyKTsKICAgICAgICAgfQogCkBA
IC0xOTQsMTQgKzE5NCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGludCBtX3Bv
c2l0aW9uOwogICAgICAgICB9OwogCi0gICAgICAgIENvbnN0SXRlcmF0b3IgYmVnaW4oSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKSBjb25zdAorICAgICAgICBDb25zdEl0ZXJhdG9yIGJlZ2luKFZN
JiB2bSkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgaW5pdGlhbGl6ZUlmTmVlZGVkKCZn
bG9iYWxEYXRhKTsKKyAgICAgICAgICAgIGluaXRpYWxpemVJZk5lZWRlZCgmdm0pOwogICAgICAg
ICAgICAgcmV0dXJuIENvbnN0SXRlcmF0b3IodGhpcywgMCk7CiAgICAgICAgIH0KLSAgICAgICAg
Q29uc3RJdGVyYXRvciBlbmQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKSBjb25zdAorICAgICAg
ICBDb25zdEl0ZXJhdG9yIGVuZChWTSYgdm0pIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAg
IGluaXRpYWxpemVJZk5lZWRlZCgmZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBpbml0aWFsaXpl
SWZOZWVkZWQoJnZtKTsKICAgICAgICAgICAgIHJldHVybiBDb25zdEl0ZXJhdG9yKHRoaXMsIGNv
bXBhY3RTaXplKTsKICAgICAgICAgfQogCkBAIC0yMjksNyArMjI5LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBDb252ZXJ0IHRoZSBoYXNoIHRhYmxlIGtleXMg
dG8gaWRlbnRpZmllcnMuCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY3JlYXRlVGFi
bGUoSlNHbG9iYWxEYXRhKikgY29uc3Q7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
Y3JlYXRlVGFibGUoVk0qKSBjb25zdDsKICAgICB9OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChFeGVjU3RhdGUqLCBjb25zdCBIYXNoRW50cnkq
LCBKU09iamVjdCogdGhpc09iamVjdCwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKQEAg
LTM2OCw3ICszNjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBJZiB0aGlzIGlz
IGEgZnVuY3Rpb24gcHV0IGl0IGFzIGFuIG92ZXJyaWRlIHByb3BlcnR5LgogICAgICAgICBpZiAo
ZW50cnktPmF0dHJpYnV0ZXMoKSAmIEZ1bmN0aW9uKQotICAgICAgICAgICAgdGhpc09iai0+cHV0
RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgICAg
ICAgICB0aGlzT2JqLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7
CiAgICAgICAgIGVsc2UgaWYgKCEoZW50cnktPmF0dHJpYnV0ZXMoKSAmIFJlYWRPbmx5KSkKICAg
ICAgICAgICAgIGVudHJ5LT5wcm9wZXJ0eVB1dHRlcigpKGV4ZWMsIHRoaXNPYmosIHZhbHVlKTsK
ICAgICAgICAgZWxzZSBpZiAoc2hvdWxkVGhyb3cpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9NYXRoT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg1LDIzICs4NSwyMyBAQCBjb25zdCBDbGFzc0luZm8gTWF0aE9iamVjdDo6c19pbmZvID0geyAi
CiAqLwogCiBNYXRoT2JqZWN0OjpNYXRoT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxP
YmplY3QtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKQorICAgIDogSlNOb25GaW5hbE9iamVjdChn
bG9iYWxPYmplY3QtPnZtKCksIHN0cnVjdHVyZSkKIHsKIH0KIAogdm9pZCBNYXRoT2JqZWN0Ojpm
aW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRh
KCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CiAgICAg
QVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIAotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiRSIpLCBqc051bWJlcihl
eHAoMS4wKSksIERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywg
IkxOMiIpLCBqc051bWJlcihsb2coMi4wKSksIERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRP
bmx5KTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCks
IElkZW50aWZpZXIoZXhlYywgIkxOMTAiKSwganNOdW1iZXIobG9nKDEwLjApKSwgRG9udERlbGV0
ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiTE9HMkUiKSwganNOdW1iZXIo
MS4wIC8gbG9nKDIuMCkpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seSk7Ci0gICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVy
KGV4ZWMsICJMT0cxMEUiKSwganNOdW1iZXIoMC40MzQyOTQ0ODE5MDMyNTE4KSwgRG9udERlbGV0
ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkpOyAvLyBTZWUgRUNNQS0yNjIgMTUuOC4xLjUKLSAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIo
ZXhlYywgIlBJIiksIGpzTnVtYmVyKHBpRG91YmxlKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwg
UmVhZE9ubHkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERh
dGEoKSwgSWRlbnRpZmllcihleGVjLCAiU1FSVDFfMiIpLCBqc051bWJlcihzcXJ0KDAuNSkpLCBE
b250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJTUVJUMiIpLCBq
c051bWJlcihzcXJ0KDIuMCkpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seSk7Cisg
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVj
LCAiRSIpLCBqc051bWJlcihleHAoMS4wKSksIERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRP
bmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlm
aWVyKGV4ZWMsICJMTjIiKSwganNOdW1iZXIobG9nKDIuMCkpLCBEb250RGVsZXRlIHwgRG9udEVu
dW0gfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0o
KSwgSWRlbnRpZmllcihleGVjLCAiTE4xMCIpLCBqc051bWJlcihsb2coMTAuMCkpLCBEb250RGVs
ZXRlIHwgRG9udEVudW0gfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRp
b24oZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiTE9HMkUiKSwganNOdW1iZXIoMS4wIC8g
bG9nKDIuMCkpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seSk7CisgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiTE9HMTBF
IiksIGpzTnVtYmVyKDAuNDM0Mjk0NDgxOTAzMjUxOCksIERvbnREZWxldGUgfCBEb250RW51bSB8
IFJlYWRPbmx5KTsgLy8gU2VlIEVDTUEtMjYyIDE1LjguMS41CisgICAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiUEkiKSwganNOdW1iZXIo
cGlEb3VibGUpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seSk7CisgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiU1FSVDFf
MiIpLCBqc051bWJlcihzcXJ0KDAuNSkpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25s
eSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmll
cihleGVjLCAiU1FSVDIiKSwganNOdW1iZXIoc3FydCgyLjApKSwgRG9udERlbGV0ZSB8IERvbnRF
bnVtIHwgUmVhZE9ubHkpOwogfQogCiBib29sIE1hdGhPYmplY3Q6OmdldE93blByb3BlcnR5U2xv
dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90ICZzbG90KQpAQCAtMjY1LDcgKzI2NSw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnUKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBtYXRoUHJvdG9GdW5jU2luKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGV4ZWMtPmdsb2JhbERhdGEoKS5jYWNoZWRTaW4oZXhlYy0+YXJndW1lbnQoMCku
dG9OdW1iZXIoZXhlYykpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPnZtKCku
Y2FjaGVkU2luKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1NxcnQoRXhlY1N0YXRlKiBleGVj
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuaAkocmV2
aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAg
ICAgfQogCiAgICAgcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTWVtb3J5U3RhdGlzdGljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWVtb3J5U3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01lbW9yeVN0YXRpc3RpY3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiTWVtb3J5U3RhdGlzdGljcy5oIgog
CiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0
YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiSlNTdGFjay5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01lbW9yeVN0YXRpc3Rp
Y3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NZW1vcnlT
dGF0aXN0aWNzLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01lbW9yeVN0YXRpc3RpY3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBA
QAogCiAjaW5jbHVkZSAiSGVhcC5oIgogCi1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsK
IAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L05hbWVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTmFtZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFtZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDMsMTUgKzQzLDE1IEBAIE5hbWVDb25zdHJ1Y3Rvcjo6TmFtZUNvbnN0cnVjdG9yKEpT
R2xvYmEKIAogdm9pZCBOYW1lQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgTmFtZVByb3RvdHlwZSogcHJvdG90eXBlKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1l
KTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIHByb3RvdHlwZSwgRG9udEVudW0gfCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSks
IERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihleGVjLT52bSgpLCBwcm90b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpOworICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUsIHByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9u
bHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkg
fCBEb250RW51bSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnN0cnVjdFByaXZhdGVOYW1lKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHB1Ymxp
Y05hbWUgPSBleGVjLT5hcmd1bWVudENvdW50KCkgPyBleGVjLT5hcmd1bWVudCgwKSA6IGpzVW5k
ZWZpbmVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShOYW1lSW5zdGFuY2U6OmNyZWF0
ZShleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHJpdmF0
ZU5hbWVTdHJ1Y3R1cmUoKSwgcHVibGljTmFtZS50b1N0cmluZyhleGVjKSkpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoTmFtZUluc3RhbmNlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcml2YXRlTmFtZVN0cnVjdHVyZSgpLCBwdWJsaWNOYW1l
LnRvU3RyaW5nKGV4ZWMpKSk7CiB9CiAKIENvbnN0cnVjdFR5cGUgTmFtZUNvbnN0cnVjdG9yOjpn
ZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lQ29uc3RydWN0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lQ29uc3RydWN0b3Iu
aAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFt
ZUNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2LDkgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCisgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpIAogICAgIHsgCi0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCisgICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7IAogICAgIH0KIAogcHJvdGVjdGVkOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFtZUluc3RhbmNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lSW5zdGFuY2UuY3Bw
CShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1l
SW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMCArMzMsMTAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBOYW1lSW5zdGFuY2U6OnNfaW5mbyA9IHsgIk5hbWUi
LCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKE5hbWVJbnN0YW5jZSkg
fTsKIAotTmFtZUluc3RhbmNlOjpOYW1lSW5zdGFuY2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTdHJpbmcqIG5hbWVTdHJpbmcpCi0gICAgOiBCYXNl
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKK05hbWVJbnN0YW5jZTo6TmFtZUluc3RhbmNlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU3RyaW5nKiBuYW1lU3RyaW5nKQorICAgIDogQmFz
ZSh2bSwgc3RydWN0dXJlKQogewotICAgIG1fbmFtZVN0cmluZy5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgbmFtZVN0cmluZyk7CisgICAgbV9uYW1lU3RyaW5nLnNldCh2bSwgdGhpcywgbmFtZVN0cmlu
Zyk7CiB9CiAKIHZvaWQgTmFtZUluc3RhbmNlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hbWVJbnN0YW5jZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hbWVJbnN0YW5jZS5oCShyZXZpc2lv
biAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lSW5zdGFuY2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTUgKzM3LDE1IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFs
RGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE5hbWVJbnN0YW5jZVR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE5hbWVJbnN0YW5jZVR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCi0gICAgc3RhdGljIE5hbWVJ
bnN0YW5jZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTU3RyaW5nKiBuYW1lU3RyaW5nKQorICAgIHN0YXRpYyBOYW1lSW5zdGFuY2UqIGNy
ZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1N0cmluZyogbmFtZVN0cmluZykK
ICAgICB7Ci0gICAgICAgIE5hbWVJbnN0YW5jZSogbmFtZSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPE5hbWVJbnN0YW5jZT4oZ2xvYmFsRGF0YS5oZWFwKSkgTmFtZUluc3RhbmNlKGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSwgbmFtZVN0cmluZyk7Ci0gICAgICAgIG5hbWUtPmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpOworICAgICAgICBOYW1lSW5zdGFuY2UqIG5hbWUgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxOYW1lSW5zdGFuY2U+KHZtLmhlYXApKSBOYW1lSW5zdGFuY2Uodm0s
IHN0cnVjdHVyZSwgbmFtZVN0cmluZyk7CisgICAgICAgIG5hbWUtPmZpbmlzaENyZWF0aW9uKHZt
KTsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQogCkBAIC01NSwxMSArNTUsMTEgQEAgcHVi
bGljOgogcHJvdGVjdGVkOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAg
ICBOYW1lSW5zdGFuY2UoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgSlNTdHJpbmcqKTsKKyAg
ICBOYW1lSW5zdGFuY2UoVk0mLCBTdHJ1Y3R1cmUqLCBKU1N0cmluZyopOwogCi0gICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCiAgICAgewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9i
YWxEYXRhKTsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICBBU1NF
UlQoaW5oZXJpdHMoJnNfaW5mbykpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTmFtZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTmFtZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hbWVQcm90b3R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OCwxMyArNDgsMTMgQEAgY29uc3QgQ2xhc3NJbmZvIE5hbWVQcm90b3R5cGU6
OnNfaW5mbyA9IAogKi8KIAogTmFtZVByb3RvdHlwZTo6TmFtZVByb3RvdHlwZShFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogQmFzZShleGVjLT5nbG9iYWxEYXRh
KCksIHN0cnVjdHVyZSwganNFbXB0eVN0cmluZyhleGVjKSkKKyAgICA6IEJhc2UoZXhlYy0+dm0o
KSwgc3RydWN0dXJlLCBqc0VtcHR5U3RyaW5nKGV4ZWMpKQogewogfQogCiB2b2lkIE5hbWVQcm90
b3R5cGU6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGV4ZWMtPnZtKCkpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hbWVQcm90b3R5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lUHJvdG90eXBlLmgJKHJldmlz
aW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hbWVQcm90b3R5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShn
bG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oTmFtZUluc3RhbmNl
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oTmFtZUluc3Rh
bmNlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKIHByb3RlY3RlZDoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVF
cnJvckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMsOSArNDMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogCiAgICAgICAg
IFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1cmUoKSB7IHJldHVybiBtX2Vycm9yU3RydWN0dXJlLmdl
dCgpOyB9CkBAIC01MywxNCArNTMsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJvdGVjdGVk
OgogICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0
IFN0cmluZyYgbmFtZSkKICAgICAgICAgewotICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBuYW1lKTsKKyAgICAgICAgICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKGV4ZWMtPnZtKCksIG5hbWUpOwogICAgICAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZz
X2luZm8pKTsKIAogICAgICAgICAgICAgTmF0aXZlRXJyb3JQcm90b3R5cGUqIHByb3RvdHlwZSA9
IE5hdGl2ZUVycm9yUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGVTdHJ1Y3R1cmUsIG5hbWUsIHRoaXMpOwogCi0gICAgICAgICAgICBwdXREaXJlY3QoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigxKSwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOyAvLyBFQ01BIDE1LjExLjcuNQotICAg
ICAgICAgICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLnByb3RvdHlwZSwgcHJvdG90eXBlLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51
bSk7Ci0gICAgICAgICAgICBtX2Vycm9yU3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCks
IHRoaXMsIEVycm9ySW5zdGFuY2U6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCks
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlKSk7CisgICAgICAgICAgICBwdXREaXJlY3QoZXhlYy0+
dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSksIERvbnREZWxl
dGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsgLy8gRUNNQSAxNS4xMS43LjUKKyAgICAgICAgICAg
IHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBw
cm90b3R5cGUsIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICAgICAgICAg
IG1fZXJyb3JTdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEVycm9ySW5zdGFuY2U6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSkpOwogICAg
ICAgICAgICAgQVNTRVJUKG1fZXJyb3JTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgQVNTRVJUKG1f
ZXJyb3JTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JQcm90b3R5cGUuY3Bw
CShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRp
dmVFcnJvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDkgQEAgTmF0
aXZlRXJyb3JQcm90b3R5cGU6Ok5hdGl2ZUVycm9yUHJvdG90eQogdm9pZCBOYXRpdmVFcnJvclBy
b3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZUFuZE1lc3NhZ2UsIE5hdGl2ZUVy
cm9yQ29uc3RydWN0b3IqIGNvbnN0cnVjdG9yKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGV4ZWMsIGdsb2JhbE9iamVjdCk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLm5hbWUsIGpzU3RyaW5nKGV4ZWMsIG5hbWVBbmRNZXNzYWdl
KSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5tZXNzYWdlLCBqc0VtcHR5U3RyaW5nKGV4ZWMpLCBEb250RW51bSk7Ci0g
ICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNv
bnN0cnVjdG9yLCBjb25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIHB1dERpcmVjdChleGVjLT52
bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSwganNTdHJpbmcoZXhlYywgbmFtZUFuZE1l
c3NhZ2UpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5tZXNzYWdlLCBqc0VtcHR5U3RyaW5nKGV4ZWMpLCBEb250RW51bSk7CisgICAg
cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvciwg
Y29uc3RydWN0b3IsIERvbnRFbnVtKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
dW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDE0ICs2MiwxNCBAQCBO
dW1iZXJDb25zdHJ1Y3Rvcjo6TnVtYmVyQ29uc3RydWN0b3IoSlNHCiAKIHZvaWQgTnVtYmVyQ29u
c3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgTnVtYmVyUHJvdG90eXBl
KiBudW1iZXJQcm90b3R5cGUpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xv
YmFsRGF0YSgpLCBudW1iZXJQcm90b3R5cGUtPnNfaW5mby5jbGFzc05hbWUpOworICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCksIG51bWJlclByb3RvdHlwZS0+c19pbmZvLmNsYXNz
TmFtZSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIAogICAgIC8vIE51bWJlci5Q
cm90b3R5cGUKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRh
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIG51bWJlclByb3RvdHlwZSwgRG9u
dEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIG51bWJl
clByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogCiAgICAgLy8g
bm8uIG9mIGFyZ3VtZW50cyBmb3IgY29uc3RydWN0b3IKLSAgICBwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgs
IGpzTnVtYmVyKDEpLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CisgICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
Lmxlbmd0aCwganNOdW1iZXIoMSksIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsK
IH0KIAogYm9vbCBOdW1iZXJDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCkBAIC0xMTUsOSArMTE1LDkgQEAgc3RhdGljIEpTVmFsdWUgbnVtYmVyQ29u
c3RydWN0b3JNaW5WYWx1ZQogLy8gRUNNQSAxNS43LjEKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhOdW1iZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgTnVtYmVyT2JqZWN0KiBvYmplY3QgPSBOdW1iZXJPYmplY3Q6OmNyZWF0ZShl
eGVjLT5nbG9iYWxEYXRhKCksIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmds
b2JhbE9iamVjdCgpLT5udW1iZXJPYmplY3RTdHJ1Y3R1cmUoKSk7CisgICAgTnVtYmVyT2JqZWN0
KiBvYmplY3QgPSBOdW1iZXJPYmplY3Q6OmNyZWF0ZShleGVjLT52bSgpLCBhc0ludGVybmFsRnVu
Y3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+bnVtYmVyT2JqZWN0U3RydWN0
dXJlKCkpOwogICAgIGRvdWJsZSBuID0gZXhlYy0+YXJndW1lbnRDb3VudCgpID8gZXhlYy0+YXJn
dW1lbnQoMCkudG9OdW1iZXIoZXhlYykgOiAwOwotICAgIG9iamVjdC0+c2V0SW50ZXJuYWxWYWx1
ZShleGVjLT5nbG9iYWxEYXRhKCksIGpzTnVtYmVyKG4pKTsKKyAgICBvYmplY3QtPnNldEludGVy
bmFsVmFsdWUoZXhlYy0+dm0oKSwganNOdW1iZXIobikpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUob2JqZWN0KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TnVtYmVyQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw5ICs0Niw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBjb25z
dCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG8pIAorICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvKSAKICAgICAgICAgeyAKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShn
bG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksICZzX2luZm8pOyAKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsgCiAgICAgICAgIH0KIAogICAgICAgICBlbnVtIHsgTmFOVmFs
dWUsIE5lZ0luZmluaXR5LCBQb3NJbmZpbml0eSwgTWF4VmFsdWUsIE1pblZhbHVlIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5jcHAJKHJl
dmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDIxICszMiwyMSBAQCBBU1NFUlRfSEFTX1RS
SVZJQUxfREVTVFJVQ1RPUihOdW1iZXJPYmplCiAKIGNvbnN0IENsYXNzSW5mbyBOdW1iZXJPYmpl
Y3Q6OnNfaW5mbyA9IHsgIk51bWJlciIsICZKU1dyYXBwZXJPYmplY3Q6OnNfaW5mbywgMCwgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShOdW1iZXJPYmplY3QpIH07CiAKLU51bWJlck9iamVjdDo6TnVt
YmVyT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
Ci0gICAgOiBKU1dyYXBwZXJPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQorTnVtYmVyT2Jq
ZWN0OjpOdW1iZXJPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEpT
V3JhcHBlck9iamVjdCh2bSwgc3RydWN0dXJlKQogewogfQogCi12b2lkIE51bWJlck9iamVjdDo6
ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBOdW1iZXJPYmpl
Y3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihn
bG9iYWxEYXRhKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGlu
aGVyaXRzKCZzX2luZm8pKTsKIH0KIAogTnVtYmVyT2JqZWN0KiBjb25zdHJ1Y3ROdW1iZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG51bWJl
cikKIHsKLSAgICBOdW1iZXJPYmplY3QqIG9iamVjdCA9IE51bWJlck9iamVjdDo6Y3JlYXRlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5udW1iZXJPYmplY3RTdHJ1Y3R1cmUoKSk7
Ci0gICAgb2JqZWN0LT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbnVtYmVy
KTsKKyAgICBOdW1iZXJPYmplY3QqIG9iamVjdCA9IE51bWJlck9iamVjdDo6Y3JlYXRlKGV4ZWMt
PnZtKCksIGdsb2JhbE9iamVjdC0+bnVtYmVyT2JqZWN0U3RydWN0dXJlKCkpOworICAgIG9iamVj
dC0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT52bSgpLCBudW1iZXIpOwogICAgIHJldHVybiBvYmpl
Y3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9i
amVjdC5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9OdW1iZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMjQgKzI3LDI0IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgY2xhc3MgTnVtYmVyT2JqZWN0IDogcHVibGljIEpTV3JhcHBlck9i
amVjdCB7CiAgICAgcHJvdGVjdGVkOgotICAgICAgICBOdW1iZXJPYmplY3QoSlNHbG9iYWxEYXRh
JiwgU3RydWN0dXJlKik7Ci0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRh
Jik7CisgICAgICAgIE51bWJlck9iamVjdChWTSYsIFN0cnVjdHVyZSopOworICAgICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJik7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNX
cmFwcGVyT2JqZWN0IEJhc2U7CiAKLSAgICAgICAgc3RhdGljIE51bWJlck9iamVjdCogY3JlYXRl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAg
IHN0YXRpYyBOdW1iZXJPYmplY3QqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
KQogICAgICAgICB7Ci0gICAgICAgICAgICBOdW1iZXJPYmplY3QqIG51bWJlciA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPE51bWJlck9iamVjdD4oZ2xvYmFsRGF0YS5oZWFwKSkgTnVtYmVy
T2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBudW1iZXItPmZpbmlz
aENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICAgICAgTnVtYmVyT2JqZWN0KiBudW1iZXIg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxOdW1iZXJPYmplY3Q+KHZtLmhlYXApKSBOdW1i
ZXJPYmplY3Qodm0sIHN0cnVjdHVyZSk7CisgICAgICAgICAgICBudW1iZXItPmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICAgICAgICAgIHJldHVybiBudW1iZXI7CiAgICAgICAgIH0KIAogICAgICAg
ICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAg
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhOdW1iZXJPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oTnVtYmVyT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTQ4
NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzEsMTQgKzcxLDE0IEBAIGNvbnN0IENsYXNzSW5mbyBOdW1i
ZXJQcm90b3R5cGU6OnNfaW5mbyAKIEFTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKE51bWJl
clByb3RvdHlwZSk7CiAKIE51bWJlclByb3RvdHlwZTo6TnVtYmVyUHJvdG90eXBlKEV4ZWNTdGF0
ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBOdW1iZXJPYmplY3QoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpCisgICAgOiBOdW1iZXJPYmplY3QoZXhlYy0+dm0oKSwg
c3RydWN0dXJlKQogewogfQogCiB2b2lkIE51bWJlclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24o
RXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCopCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBzZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmds
b2JhbERhdGEoKSwganNOdW1iZXIoMCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMt
PnZtKCkpOworICAgIHNldEludGVybmFsVmFsdWUoZXhlYy0+dm0oKSwganNOdW1iZXIoMCkpOwog
CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIH0KQEAgLTQ3NSwxMyArNDc1LDEzIEBA
IHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgaW50ZWdlclZhbHUKICAgICBpZiAoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHZhbHVlKSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYWRpeCkpIHsK
ICAgICAgICAgQVNTRVJUKHZhbHVlIDw9IDM2KTsKICAgICAgICAgQVNTRVJUKHZhbHVlID49IDAp
OwotICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgp
OwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGdsb2JhbERhdGEtPnNtYWxsU3RyaW5n
cy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZ2xvYmFsRGF0YSwgcmFkaXhEaWdpdHNbdmFsdWVdKSk7
CisgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHZtLCByYWRpeERp
Z2l0c1t2YWx1ZV0pKTsKICAgICB9CiAKICAgICBpZiAocmFkaXggPT0gMTApIHsKLSAgICAgICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5u
dW1lcmljU3RyaW5ncy5hZGQodmFsdWUpKSk7CisgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCB2bS0+bnVtZXJp
Y1N0cmluZ3MuYWRkKHZhbHVlKSkpOwogICAgIH0KIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNTdHJpbmcoZXhlYywgdG9TdHJpbmdXaXRoUmFkaXgodmFsdWUsIHJhZGl4KSkpOwpAQCAt
NTAzLDggKzUwMyw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG8K
ICAgICAgICAgcmV0dXJuIGludGVnZXJWYWx1ZVRvU3RyaW5nKGV4ZWMsIHJhZGl4LCBpbnRlZ2Vy
VmFsdWUpOwogCiAgICAgaWYgKHJhZGl4ID09IDEwKSB7Ci0gICAgICAgIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNTdHJpbmcoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+bnVtZXJpY1N0cmluZ3Mu
YWRkKGRvdWJsZVZhbHVlKSkpOworICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgdm0tPm51bWVyaWNTdHJpbmdz
LmFkZChkb3VibGVWYWx1ZSkpKTsKICAgICB9CiAKICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUoZG91
YmxlVmFsdWUpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJv
dG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVt
YmVyUHJvdG90eXBlLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5ICszOCw5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE51bWJlck9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhOdW1iZXJP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgICAgICB9CiAKICAgICBw
cm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25z
dHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg1LDExICs4NSwxMSBAQCBPYmplY3RDb25zdHJ1Y3Rvcjo6T2JqZWN0Q29uc3RydWN0b3IoSlNH
CiAKIHZvaWQgT2JqZWN0Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgT2JqZWN0UHJvdG90eXBlKiBvYmplY3RQcm90b3R5cGUpCiB7Ci0gICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJPYmplY3QiKS5z
dHJpbmcoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmll
cihleGVjLCAiT2JqZWN0Iikuc3RyaW5nKCkpOwogICAgIC8vIEVDTUEgMTUuMi4zLjEKLSAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5wcm90b3R5cGUsIG9iamVjdFByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZt
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIG9iamVjdFByb3RvdHlwZSwgRG9u
dEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIC8vIG5vLiBvZiBhcmd1bWVudHMg
Zm9yIGNvbnN0cnVjdG9yCi0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xv
YmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigxKSwgUmVh
ZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVy
KDEpLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiB9CiAKIGJvb2wgT2JqZWN0
Q29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90ICZzbG90KQpAQCAt
MTYwLDE3ICsxNjAsMTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25z
dAogCiAgICAgSlNPYmplY3QqIGRlc2NyaXB0aW9uID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhl
Yyk7CiAgICAgaWYgKCFkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKLSAgICAg
ICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS52YWx1ZSwgZGVzY3JpcHRvci52YWx1ZSgpID8gZGVzY3JpcHRvci52YWx1ZSgp
IDoganNVbmRlZmluZWQoKSwgMCk7Ci0gICAgICAgIGRlc2NyaXB0aW9uLT5wdXREaXJlY3QoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkud3JpdGFibGUsIGpzQm9vbGVh
bihkZXNjcmlwdG9yLndyaXRhYmxlKCkpLCAwKTsKKyAgICAgICAgZGVzY3JpcHRpb24tPnB1dERp
cmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWUsIGRlc2NyaXB0b3Iu
dmFsdWUoKSA/IGRlc2NyaXB0b3IudmFsdWUoKSA6IGpzVW5kZWZpbmVkKCksIDApOworICAgICAg
ICBkZXNjcmlwdGlvbi0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS53cml0YWJsZSwganNCb29sZWFuKGRlc2NyaXB0b3Iud3JpdGFibGUoKSksIDApOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIEFTU0VSVChkZXNjcmlwdG9yLmdldHRlcigpKTsKICAgICAgICAgQVNT
RVJUKGRlc2NyaXB0b3Iuc2V0dGVyKCkpOwotICAgICAgICBkZXNjcmlwdGlvbi0+cHV0RGlyZWN0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmdldCwgZGVzY3JpcHRv
ci5nZXR0ZXIoKSwgMCk7Ci0gICAgICAgIGRlc2NyaXB0aW9uLT5wdXREaXJlY3QoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc2V0LCBkZXNjcmlwdG9yLnNldHRlcigp
LCAwKTsKKyAgICAgICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuZ2V0LCBkZXNjcmlwdG9yLmdldHRlcigpLCAwKTsKKyAgICAgICAgZGVz
Y3JpcHRpb24tPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc2V0
LCBkZXNjcmlwdG9yLnNldHRlcigpLCAwKTsKICAgICB9CiAgICAgCi0gICAgZGVzY3JpcHRpb24t
PnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5lbnVt
ZXJhYmxlLCBqc0Jvb2xlYW4oZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpLCAwKTsKLSAgICBkZXNj
cmlwdGlvbi0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmNvbmZpZ3VyYWJsZSwganNCb29sZWFuKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCkpLCAw
KTsKKyAgICBkZXNjcmlwdGlvbi0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5lbnVtZXJhYmxlLCBqc0Jvb2xlYW4oZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpLCAw
KTsKKyAgICBkZXNjcmlwdGlvbi0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5jb25maWd1cmFibGUsIGpzQm9vbGVhbihkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgp
KSwgMCk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGRlc2NyaXB0aW9uKTsKIH0KQEAg
LTM2OCw3ICszNjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0
CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KG9iaik7CiAKICAgICBpZiAoaXNKU0Zp
bmFsT2JqZWN0KG9iamVjdCkpIHsKLSAgICAgICAgb2JqZWN0LT5zZWFsKGV4ZWMtPmdsb2JhbERh
dGEoKSk7CisgICAgICAgIG9iamVjdC0+c2VhbChleGVjLT52bSgpKTsKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShvYmopOwogICAgIH0KIApAQCAtMzkwLDcgKzM5MCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICB9CiAKICAgICAvLyAzLiBT
ZXQgdGhlIFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8gdG8gZmFsc2UuCi0g
ICAgb2JqZWN0LT5wcmV2ZW50RXh0ZW5zaW9ucyhleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIG9i
amVjdC0+cHJldmVudEV4dGVuc2lvbnMoZXhlYy0+dm0oKSk7CiAKICAgICAvLyA0LiBSZXR1cm4g
Ty4KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iaik7CkBAIC00MDUsNyArNDA1LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIEpTT2JqZWN0KiBv
YmplY3QgPSBhc09iamVjdChvYmopOwogCiAgICAgaWYgKGlzSlNGaW5hbE9iamVjdChvYmplY3Qp
ICYmICFoYXNJbmRleGVkUHJvcGVydGllcyhvYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkpIHsKLSAgICAgICAgb2JqZWN0LT5mcmVlemUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAg
ICAgICAgb2JqZWN0LT5mcmVlemUoZXhlYy0+dm0oKSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUob2JqKTsKICAgICB9CiAKQEAgLTQzMSw3ICs0MzEsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgfQogCiAgICAgLy8gMy4gU2V0IHRoZSBb
W0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPIHRvIGZhbHNlLgotICAgIG9iamVj
dC0+cHJldmVudEV4dGVuc2lvbnMoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBvYmplY3QtPnBy
ZXZlbnRFeHRlbnNpb25zKGV4ZWMtPnZtKCkpOwogCiAgICAgLy8gNC4gUmV0dXJuIE8uCiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmopOwpAQCAtNDQyLDcgKzQ0Miw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICBKU1ZhbHVlIG9iaiA9IGV4ZWMt
PmFyZ3VtZW50KDApOwogICAgIGlmICghb2JqLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiT2Jq
ZWN0LnByZXZlbnRFeHRlbnNpb25zIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiBPYmplY3RzLiIpKSk7
Ci0gICAgYXNPYmplY3Qob2JqKS0+cHJldmVudEV4dGVuc2lvbnMoZXhlYy0+Z2xvYmFsRGF0YSgp
KTsKKyAgICBhc09iamVjdChvYmopLT5wcmV2ZW50RXh0ZW5zaW9ucyhleGVjLT52bSgpKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iaik7CiB9CiAKQEAgLTQ1NSw3ICs0NTUsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgSlNPYmplY3QqIG9i
amVjdCA9IGFzT2JqZWN0KG9iaik7CiAKICAgICBpZiAoaXNKU0ZpbmFsT2JqZWN0KG9iamVjdCkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG9iamVjdC0+aXNTZWFs
ZWQoZXhlYy0+Z2xvYmFsRGF0YSgpKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbihvYmplY3QtPmlzU2VhbGVkKGV4ZWMtPnZtKCkpKSk7CiAKICAgICAvLyAyLiBG
b3IgZWFjaCBuYW1lZCBvd24gcHJvcGVydHkgbmFtZSBQIG9mIE8sCiAgICAgUHJvcGVydHlOYW1l
QXJyYXkgcHJvcGVydGllcyhleGVjKTsKQEAgLTQ4NSw3ICs0ODUsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2Jq
ZWN0KG9iaik7CiAKICAgICBpZiAoaXNKU0ZpbmFsT2JqZWN0KG9iamVjdCkpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG9iamVjdC0+aXNGcm96ZW4oZXhlYy0+Z2xv
YmFsRGF0YSgpKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihv
YmplY3QtPmlzRnJvemVuKGV4ZWMtPnZtKCkpKSk7CiAKICAgICAvLyAyLiBGb3IgZWFjaCBuYW1l
ZCBvd24gcHJvcGVydHkgbmFtZSBQIG9mIE8sCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVy
dGllcyhleGVjKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENv
bnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T2JqZWN0Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDUs
OSArNDUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJ
bmZvIHNfaW5mbzsKIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9i
YWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKQEAg
LTY4LDcgKzY4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgaW5saW5lIEpTT2JqZWN0KiBjb25z
dHJ1Y3RFbXB0eU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBwcm90b3R5cGUsIHVu
c2lnbmVkIGlubGluZUNhcGFjaXR5KQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKLSAgICAgICAgUHJvdG90
eXBlTWFwJiBwcm90b3R5cGVNYXAgPSBnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5wcm90b3R5
cGVNYXA7CisgICAgICAgIFByb3RvdHlwZU1hcCYgcHJvdG90eXBlTWFwID0gZ2xvYmFsT2JqZWN0
LT52bSgpLnByb3RvdHlwZU1hcDsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBwcm90
b3R5cGVNYXAuZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUoCiAgICAgICAgICAgICBw
cm90b3R5cGUsIGlubGluZUNhcGFjaXR5KTsKICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5
T2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PYmplY3RQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1LDE3ICs0NSwxNyBAQCBBU1NFUlRfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUihP
YmplY3RQcm90CiBjb25zdCBDbGFzc0luZm8gT2JqZWN0UHJvdG90eXBlOjpzX2luZm8gPSB7ICJP
YmplY3QiLCAmSlNOb25GaW5hbE9iamVjdDo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKE9iamVjdFByb3RvdHlwZSkgfTsKIAogT2JqZWN0UHJvdG90eXBlOjpPYmplY3RQcm90b3R5
cGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0dWN0dXJlKQotICAgIDogSlNOb25GaW5h
bE9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIHN0dWN0dXJlKQorICAgIDogSlNOb25GaW5hbE9i
amVjdChleGVjLT52bSgpLCBzdHVjdHVyZSkKIHsKIH0KIAogdm9pZCBPYmplY3RQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRh
KCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAKLSAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihnbG9iYWxEYXRhKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNT
RVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLSAgICBnbG9iYWxEYXRhLnByb3RvdHlwZU1hcC5hZGRQ
cm90b3R5cGUodGhpcyk7CisgICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3RvdHlwZSh0aGlzKTsK
ICAgICAKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKCJ0b1N0cmluZyIsIG9iamVjdFByb3RvRnVu
Y1RvU3RyaW5nLCBEb250RW51bSwgMCk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTigidG9Mb2Nh
bGVTdHJpbmciLCBvYmplY3RQcm90b0Z1bmNUb0xvY2FsZVN0cmluZywgRG9udEVudW0sIDApOwpA
QCAtMjE4LDcgKzIxOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJv
dG8KICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dPdXRPZk1lbW9yeUVy
cm9yKGV4ZWMpKTsKIAogICAgICAgICByZXN1bHQgPSBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywg
bmV3U3RyaW5nLnJlbGVhc2UoKSk7Ci0gICAgICAgIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5z
ZXRPYmplY3RUb1N0cmluZ1ZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgcmVz
dWx0KTsKKyAgICAgICAgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPnNldE9iamVjdFRvU3RyaW5n
VmFsdWUoZXhlYy0+dm0oKSwgdGhpc09iamVjdCwgcmVzdWx0KTsKICAgICB9CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw5ICszMyw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogCiAgICAgcHJv
dGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9u
cy5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NiwzMiArNTYsMzIgQEAgTkVWRVJf
SU5MSU5FIEpTVmFsdWUganNBZGRTbG93Q2FzZShDYWxsRgogICAgIHJldHVybiBqc051bWJlcihw
MS50b051bWJlcihjYWxsRnJhbWUpICsgcDIudG9OdW1iZXIoY2FsbEZyYW1lKSk7CiB9CiAKLUpT
VmFsdWUganNUeXBlU3RyaW5nRm9yVmFsdWUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHYpCitKU1ZhbHVlIGpzVHlwZVN0cmlu
Z0ZvclZhbHVlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2
KQogewogICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRh
LnNtYWxsU3RyaW5ncy51bmRlZmluZWRTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZtLnNtYWxs
U3RyaW5ncy51bmRlZmluZWRTdHJpbmcoKTsKICAgICBpZiAodi5pc0Jvb2xlYW4oKSkKLSAgICAg
ICAgcmV0dXJuIGdsb2JhbERhdGEuc21hbGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKTsKKyAgICAg
ICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy5ib29sZWFuU3RyaW5nKCk7CiAgICAgaWYgKHYuaXNO
dW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEuc21hbGxTdHJpbmdzLm51bWJlclN0
cmluZygpOworICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdzLm51bWJlclN0cmluZygpOwog
ICAgIGlmICh2LmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLnNtYWxsU3Ry
aW5ncy5zdHJpbmdTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy5zdHJp
bmdTdHJpbmcoKTsKICAgICBpZiAodi5pc09iamVjdCgpKSB7CiAgICAgICAgIC8vIFJldHVybiAi
dW5kZWZpbmVkIiBmb3Igb2JqZWN0cyB0aGF0IHNob3VsZCBiZSB0cmVhdGVkCiAgICAgICAgIC8v
IGFzIG51bGwgd2hlbiBkb2luZyBjb21wYXJpc29ucy4KICAgICAgICAgaWYgKGFzT2JqZWN0KHYp
LT5zdHJ1Y3R1cmUoKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChnbG9iYWxPYmplY3QpKQotICAg
ICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEuc21hbGxTdHJpbmdzLnVuZGVmaW5lZFN0cmluZygp
OworICAgICAgICAgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy51bmRlZmluZWRTdHJpbmcoKTsK
ICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBh
c09iamVjdCh2KTsKICAgICAgICAgaWYgKG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERh
dGEob2JqZWN0LCBjYWxsRGF0YSkgIT0gQ2FsbFR5cGVOb25lKQotICAgICAgICAgICAgcmV0dXJu
IGdsb2JhbERhdGEuc21hbGxTdHJpbmdzLmZ1bmN0aW9uU3RyaW5nKCk7CisgICAgICAgICAgICBy
ZXR1cm4gdm0uc21hbGxTdHJpbmdzLmZ1bmN0aW9uU3RyaW5nKCk7CiAgICAgfQotICAgIHJldHVy
biBnbG9iYWxEYXRhLnNtYWxsU3RyaW5ncy5vYmplY3RTdHJpbmcoKTsKKyAgICByZXR1cm4gdm0u
c21hbGxTdHJpbmdzLm9iamVjdFN0cmluZygpOwogfQogCiBKU1ZhbHVlIGpzVHlwZVN0cmluZ0Zv
clZhbHVlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHYpCiB7Ci0gICAgcmV0dXJuIGpz
VHlwZVN0cmluZ0ZvclZhbHVlKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSwgdik7CisgICAgcmV0dXJuIGpzVHlwZVN0cmluZ0ZvclZhbHVl
KGNhbGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHYpOwog
fQogCiBib29sIGpzSXNPYmplY3RUeXBlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHYp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCShyZXZp
c2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEzICszMywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
TkVWRVJfSU5MSU5FIEpTVmFsdWUganNBZGRTbG93Q2FzZShDYWxsRnJhbWUqLCBKU1ZhbHVlLCBK
U1ZhbHVlKTsKIEpTVmFsdWUganNUeXBlU3RyaW5nRm9yVmFsdWUoQ2FsbEZyYW1lKiwgSlNWYWx1
ZSk7Ci1KU1ZhbHVlIGpzVHlwZVN0cmluZ0ZvclZhbHVlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSk7CitKU1ZhbHVlIGpzVHlwZVN0cmluZ0ZvclZhbHVlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIGJvb2wganNJc09iamVjdFR5cGUoQ2FsbEZyYW1lKiwg
SlNWYWx1ZSk7CiBib29sIGpzSXNGdW5jdGlvblR5cGUoSlNWYWx1ZSk7CiAKIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzMSwgSlNTdHJp
bmcqIHMyKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERh
dGEoKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoMSA9
IHMxLT5sZW5ndGgoKTsKICAgICBpZiAoIWxlbmd0aDEpCkBAIC01MCwzNSArNTAsMzUgQEAgQUxX
QVlTX0lOTElORSBKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZQogICAgIGlmICgobGVuZ3RoMSAr
IGxlbmd0aDIpIDwgbGVuZ3RoMSkKICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJv
cihleGVjKTsKIAotICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZShnbG9iYWxEYXRhLCBz
MSwgczIpOworICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZSh2bSwgczEsIHMyKTsKIH0K
IAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
U3RyaW5nJiB1MSwgY29uc3QgU3RyaW5nJiB1MiwgY29uc3QgU3RyaW5nJiB1MykKIHsKLSAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoMSA9IHUxLmxlbmd0aCgpOwog
ICAgIHVuc2lnbmVkIGxlbmd0aDIgPSB1Mi5sZW5ndGgoKTsKICAgICB1bnNpZ25lZCBsZW5ndGgz
ID0gdTMubGVuZ3RoKCk7CiAgICAgaWYgKCFsZW5ndGgxKQotICAgICAgICByZXR1cm4ganNTdHJp
bmcoZXhlYywganNTdHJpbmcoZ2xvYmFsRGF0YSwgdTIpLCBqc1N0cmluZyhnbG9iYWxEYXRhLCB1
MykpOworICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywganNTdHJpbmcodm0sIHUyKSwganNT
dHJpbmcodm0sIHUzKSk7CiAgICAgaWYgKCFsZW5ndGgyKQotICAgICAgICByZXR1cm4ganNTdHJp
bmcoZXhlYywganNTdHJpbmcoZ2xvYmFsRGF0YSwgdTEpLCBqc1N0cmluZyhnbG9iYWxEYXRhLCB1
MykpOworICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywganNTdHJpbmcodm0sIHUxKSwganNT
dHJpbmcodm0sIHUzKSk7CiAgICAgaWYgKCFsZW5ndGgzKQotICAgICAgICByZXR1cm4ganNTdHJp
bmcoZXhlYywganNTdHJpbmcoZ2xvYmFsRGF0YSwgdTEpLCBqc1N0cmluZyhnbG9iYWxEYXRhLCB1
MikpOworICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywganNTdHJpbmcodm0sIHUxKSwganNT
dHJpbmcodm0sIHUyKSk7CiAKICAgICBpZiAoKGxlbmd0aDEgKyBsZW5ndGgyKSA8IGxlbmd0aDEp
CiAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAgICAgaWYgKChs
ZW5ndGgxICsgbGVuZ3RoMiArIGxlbmd0aDMpIDwgbGVuZ3RoMykKICAgICAgICAgcmV0dXJuIHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKIAotICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNy
ZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGpzU3RyaW5nKGdsb2JhbERhdGEsIHUxKSwganNTdHJp
bmcoZ2xvYmFsRGF0YSwgdTIpLCBqc1N0cmluZyhnbG9iYWxEYXRhLCB1MykpOworICAgIHJldHVy
biBKU1JvcGVTdHJpbmc6OmNyZWF0ZShleGVjLT52bSgpLCBqc1N0cmluZyh2bSwgdTEpLCBqc1N0
cmluZyh2bSwgdTIpLCBqc1N0cmluZyh2bSwgdTMpKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1Zh
bHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgUmVnaXN0ZXIqIHN0cmluZ3MsIHVuc2lnbmVk
IGNvdW50KQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxE
YXRhKCk7Ci0gICAgSlNSb3BlU3RyaW5nOjpSb3BlQnVpbGRlciByb3BlQnVpbGRlcigqZ2xvYmFs
RGF0YSk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgSlNSb3BlU3RyaW5nOjpSb3Bl
QnVpbGRlciByb3BlQnVpbGRlcigqdm0pOwogCiAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gMDsK
IApAQCAtOTYsOCArOTYsOCBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTdHJpbmcoRXhlY1N0
YXRlCiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZ0Zyb21Bcmd1bWVudHMoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIEpTUm9wZVN0cmluZzo6Um9wZUJ1aWxk
ZXIgcm9wZUJ1aWxkZXIoKmdsb2JhbERhdGEpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwor
ICAgIEpTUm9wZVN0cmluZzo6Um9wZUJ1aWxkZXIgcm9wZUJ1aWxkZXIoKnZtKTsKICAgICByb3Bl
QnVpbGRlci5hcHBlbmQodGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsKIAogICAgIHVuc2lnbmVk
IG9sZExlbmd0aCA9IDA7CkBAIC0yMzAsOSArMjMwLDkgQEAgaW5saW5lIHNpemVfdCBub3JtYWxp
emVQcm90b3R5cGVDaGFpbkZvcgogICAgICAgICAvLyBTaW5jZSB3ZSdyZSBhY2Nlc3NpbmcgYSBw
cm90b3R5cGUgaW4gYSBsb29wLCBpdCdzIGEgZ29vZCBiZXQgdGhhdCBpdAogICAgICAgICAvLyBz
aG91bGQgbm90IGJlIHRyZWF0ZWQgYXMgYSBkaWN0aW9uYXJ5LgogICAgICAgICBpZiAoY2VsbC0+
c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7Ci0gICAgICAgICAgICBhc09iamVjdChjZWxs
KS0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOworICAg
ICAgICAgICAgYXNPYmplY3QoY2VsbCktPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KGNhbGxGcmFt
ZS0+dm0oKSk7CiAgICAgICAgICAgICBpZiAoc2xvdEJhc2UgPT0gY2VsbCkKLSAgICAgICAgICAg
ICAgICBzbG90T2Zmc2V0ID0gY2VsbC0+c3RydWN0dXJlKCktPmdldChjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKSwgcHJvcGVydHlOYW1lKTsgCisgICAgICAgICAgICAgICAgc2xvdE9mZnNldCA9IGNl
bGwtPnN0cnVjdHVyZSgpLT5nZXQoY2FsbEZyYW1lLT52bSgpLCBwcm9wZXJ0eU5hbWUpOyAKICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICsrY291bnQ7CkBAIC0yNTgsNyArMjU4LDcg
QEAgaW5saW5lIHNpemVfdCBub3JtYWxpemVQcm90b3R5cGVDaGFpbihDYQogICAgICAgICAvLyBT
aW5jZSB3ZSdyZSBhY2Nlc3NpbmcgYSBwcm90b3R5cGUgaW4gYSBsb29wLCBpdCdzIGEgZ29vZCBi
ZXQgdGhhdCBpdAogICAgICAgICAvLyBzaG91bGQgbm90IGJlIHRyZWF0ZWQgYXMgYSBkaWN0aW9u
YXJ5LgogICAgICAgICBpZiAoYmFzZS0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKQotICAg
ICAgICAgICAgYXNPYmplY3QoYmFzZSktPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KGNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgIGFzT2JqZWN0KGJhc2UpLT5mbGF0dGVuRGlj
dGlvbmFyeU9iamVjdChjYWxsRnJhbWUtPnZtKCkpOwogCiAgICAgICAgICsrY291bnQ7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eU1hcEhhc2hUYWJsZS5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nywx
MSArNzcsMTEgQEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgIHVuc2lnbmVkIGF0dHJp
YnV0ZXM7CiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gc3BlY2lmaWNWYWx1ZTsKIAotICAgIFBy
b3BlcnR5TWFwRW50cnkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBT
dHJpbmdJbXBsKiBrZXksIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgdW5zaWduZWQgYXR0cmlidXRl
cywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKQorICAgIFByb3BlcnR5TWFwRW50cnkoVk0mIHZtLCBK
U0NlbGwqIG93bmVyLCBTdHJpbmdJbXBsKiBrZXksIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgdW5z
aWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKQogICAgICAgICA6IGtleShr
ZXkpCiAgICAgICAgICwgb2Zmc2V0KG9mZnNldCkKICAgICAgICAgLCBhdHRyaWJ1dGVzKGF0dHJp
YnV0ZXMpCi0gICAgICAgICwgc3BlY2lmaWNWYWx1ZShnbG9iYWxEYXRhLCBvd25lciwgc3BlY2lm
aWNWYWx1ZSwgV3JpdGVCYXJyaWVyPEpTQ2VsbD46Ok1heUJlTnVsbCkKKyAgICAgICAgLCBzcGVj
aWZpY1ZhbHVlKHZtLCBvd25lciwgc3BlY2lmaWNWYWx1ZSwgV3JpdGVCYXJyaWVyPEpTQ2VsbD46
Ok1heUJlTnVsbCkKICAgICB7CiAgICAgfQogfTsKQEAgLTEzNSw5ICsxMzUsOSBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0g
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKENvbXBvdW5kVHlwZSwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiksICZzX2luZm8p
OworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhDb21wb3VuZFR5cGUsIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4pLCAm
c19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CkBAIC0xNTUsOSArMTU1LDkgQEAgcHVibGljOgogICAgIHR5cGVkZWYg
c3RkOjpwYWlyPFZhbHVlVHlwZSosIHVuc2lnbmVkPiBmaW5kX2l0ZXJhdG9yOwogCiAgICAgLy8g
Q29uc3RydWN0b3IgaXMgcGFzc2VkIGFuIGluaXRpYWwgY2FwYWNpdHksIGEgUHJvcGVydHlUYWJs
ZSB0byBjb3B5LCBvciBib3RoLgotICAgIHN0YXRpYyBQcm9wZXJ0eVRhYmxlKiBjcmVhdGUoSlNH
bG9iYWxEYXRhJiwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5KTsKLSAgICBzdGF0aWMgUHJvcGVy
dHlUYWJsZSogY2xvbmUoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiBvd25lciwgY29uc3QgUHJvcGVy
dHlUYWJsZSYpOwotICAgIHN0YXRpYyBQcm9wZXJ0eVRhYmxlKiBjbG9uZShKU0dsb2JhbERhdGEm
LCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5
VGFibGUmKTsKKyAgICBzdGF0aWMgUHJvcGVydHlUYWJsZSogY3JlYXRlKFZNJiwgdW5zaWduZWQg
aW5pdGlhbENhcGFjaXR5KTsKKyAgICBzdGF0aWMgUHJvcGVydHlUYWJsZSogY2xvbmUoVk0mLCBK
U0NlbGwqIG93bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CisgICAgc3RhdGljIFByb3BlcnR5
VGFibGUqIGNsb25lKFZNJiwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5
LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CiAgICAgflByb3BlcnR5VGFibGUoKTsKIAogICAgIC8v
IE9yZGVyZWQgaXRlcmF0aW9uIG1ldGhvZHMuCkBAIC0xOTQsNyArMTk0LDcgQEAgcHVibGljOgog
ICAgIFByb3BlcnR5T2Zmc2V0IG5leHRPZmZzZXQoUHJvcGVydHlPZmZzZXQgaW5saW5lQ2FwYWNp
dHkpOwogCiAgICAgLy8gQ29weSB0aGlzIFByb3BlcnR5VGFibGUsIGVuc3VyaW5nIHRoZSBjb3B5
IGhhcyBhdCBsZWFzdCB0aGUgY2FwYWNpdHkgcHJvdmlkZWQuCi0gICAgUHJvcGVydHlUYWJsZSog
Y29weShKU0dsb2JhbERhdGEmLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBuZXdDYXBhY2l0eSk7
CisgICAgUHJvcGVydHlUYWJsZSogY29weShWTSYsIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIG5l
d0NhcGFjaXR5KTsKIAogI2lmbmRlZiBOREVCVUcKICAgICBzaXplX3Qgc2l6ZUluTWVtb3J5KCk7
CkBAIC0yMDIsOSArMjAyLDkgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgUHJv
cGVydHlUYWJsZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkpOwotICAg
IFByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiwgY29uc3QgUHJvcGVydHlUYWJs
ZSYpOwotICAgIFByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiwgdW5zaWduZWQg
aW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CisgICAgUHJvcGVydHlUYWJs
ZShWTSYsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSk7CisgICAgUHJvcGVydHlUYWJsZShWTSYs
IEpTQ2VsbCosIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAgICBQcm9wZXJ0eVRhYmxlKFZNJiwg
SlNDZWxsKiwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7
CiAKICAgICBQcm9wZXJ0eVRhYmxlKGNvbnN0IFByb3BlcnR5VGFibGUmKTsKICAgICAvLyBVc2Vk
IHRvIGluc2VydCBhIHZhbHVlIGtub3duIG5vdCB0byBiZSBpbiB0aGUgdGFibGUsIGFuZCB3aGVy
ZSB3ZSBrbm93IGNhcGFjaXR5IHRvIGJlIGF2YWlsYWJsZS4KQEAgLTQ1MywxNSArNDUzLDE1IEBA
IGlubGluZSBQcm9wZXJ0eU9mZnNldCBQcm9wZXJ0eVRhYmxlOjpuZXgKICAgICByZXR1cm4gb2Zm
c2V0Rm9yUHJvcGVydHlOdW1iZXIoc2l6ZSgpLCBpbmxpbmVDYXBhY2l0eSk7CiB9CiAKLWlubGlu
ZSBQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxlOjpjb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgbmV3Q2FwYWNpdHkpCitpbmxpbmUgUHJvcGVy
dHlUYWJsZSogUHJvcGVydHlUYWJsZTo6Y29weShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIHVuc2ln
bmVkIG5ld0NhcGFjaXR5KQogewogICAgIEFTU0VSVChuZXdDYXBhY2l0eSA+PSBtX2tleUNvdW50
KTsKIAogICAgIC8vIEZhc3QgY2FzZTsgaWYgdGhlIG5ldyB0YWJsZSB3aWxsIGJlIHRoZSBzYW1l
IG1faW5kZXhTaXplIGFzIHRoaXMgb25lLCB3ZSBjYW4gbWVtY3B5IGl0LAogICAgIC8vIHNhdmUg
cmVoYXNoaW5nIGFsbCBrZXlzLgogICAgIGlmIChzaXplRm9yQ2FwYWNpdHkobmV3Q2FwYWNpdHkp
ID09IG1faW5kZXhTaXplKQotICAgICAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUoZ2xv
YmFsRGF0YSwgb3duZXIsICp0aGlzKTsKLSAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUo
Z2xvYmFsRGF0YSwgb3duZXIsIG5ld0NhcGFjaXR5LCAqdGhpcyk7CisgICAgICAgIHJldHVybiBQ
cm9wZXJ0eVRhYmxlOjpjbG9uZSh2bSwgb3duZXIsICp0aGlzKTsKKyAgICByZXR1cm4gUHJvcGVy
dHlUYWJsZTo6Y2xvbmUodm0sIG93bmVyLCBuZXdDYXBhY2l0eSwgKnRoaXMpOwogfQogCiAjaWZu
ZGVmIE5ERUJVRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlO
YW1lQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eU5hbWVBcnJheS5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5
ICs1Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIC8vIEZJWE1FOiBSZW5hbWUgdG8gUHJvcGVy
dHlOYW1lQXJyYXlCdWlsZGVyLgogICAgIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5IHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIFByb3BlcnR5TmFtZUFycmF5KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSkKKyAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkoVk0qIHZtKQogICAgICAgICAgICAgOiBtX2Rh
dGEoUHJvcGVydHlOYW1lQXJyYXlEYXRhOjpjcmVhdGUoKSkKLSAgICAgICAgICAgICwgbV9nbG9i
YWxEYXRhKGdsb2JhbERhdGEpCisgICAgICAgICAgICAsIG1fdm0odm0pCiAgICAgICAgICAgICAs
IG1fbnVtQ2FjaGVhYmxlU2xvdHMoMCkKICAgICAgICAgICAgICwgbV9iYXNlT2JqZWN0KDApCiAg
ICAgICAgIHsKQEAgLTYyLDE3ICs2MiwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBQ
cm9wZXJ0eU5hbWVBcnJheShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICA6IG1fZGF0YShQ
cm9wZXJ0eU5hbWVBcnJheURhdGE6OmNyZWF0ZSgpKQotICAgICAgICAgICAgLCBtX2dsb2JhbERh
dGEoJmV4ZWMtPmdsb2JhbERhdGEoKSkKKyAgICAgICAgICAgICwgbV92bSgmZXhlYy0+dm0oKSkK
ICAgICAgICAgICAgICwgbV9udW1DYWNoZWFibGVTbG90cygwKQogICAgICAgICAgICAgLCBtX2Jh
c2VPYmplY3QoMCkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhKCkgeyByZXR1cm4gbV9nbG9iYWxEYXRhOyB9CisgICAgICAgIFZNKiB2bSgp
IHsgcmV0dXJuIG1fdm07IH0KIAogICAgICAgICB2b2lkIGFkZChjb25zdCBJZGVudGlmaWVyJiBp
ZGVudGlmaWVyKSB7IGFkZChpZGVudGlmaWVyLmltcGwoKSk7IH0KICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBhZGQoU3RyaW5nSW1wbCopOwotICAgICAgICB2b2lkIGFkZEtub3duVW5p
cXVlKFN0cmluZ0ltcGwqIGlkZW50aWZpZXIpIHsgbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3Io
KS5hcHBlbmQoSWRlbnRpZmllcihtX2dsb2JhbERhdGEsIGlkZW50aWZpZXIpKTsgfQorICAgICAg
ICB2b2lkIGFkZEtub3duVW5pcXVlKFN0cmluZ0ltcGwqIGlkZW50aWZpZXIpIHsgbV9kYXRhLT5w
cm9wZXJ0eU5hbWVWZWN0b3IoKS5hcHBlbmQoSWRlbnRpZmllcihtX3ZtLCBpZGVudGlmaWVyKSk7
IH0KIAogICAgICAgICBJZGVudGlmaWVyJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIHsgcmV0dXJu
IG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKClbaV07IH0KICAgICAgICAgY29uc3QgSWRlbnRp
ZmllciYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2RhdGEtPnByb3Bl
cnR5TmFtZVZlY3RvcigpW2ldOyB9CkBAIC0xMDYsNyArMTA2LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgUmVmUHRyPFByb3BlcnR5TmFtZUFycmF5RGF0YT4gbV9kYXRhOwogICAgICAg
ICBJZGVudGlmaWVyU2V0IG1fc2V0OwotICAgICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0
YTsKKyAgICAgICAgVk0qIG1fdm07CiAgICAgICAgIHNpemVfdCBtX251bUNhY2hlYWJsZVNsb3Rz
OwogICAgICAgICBKU09iamVjdCogbV9iYXNlT2JqZWN0OwogICAgIH07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAkocmV2aXNpb24g
MTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDI5ICszNSwyOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
Y29uc3QgQ2xhc3NJbmZvIFByb3BlcnR5VGFibGU6OnNfaW5mbyA9IHsgIlByb3BlcnR5VGFibGUi
LCAwLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFByb3BlcnR5VGFibGUpIH07CiAKLVByb3Bl
cnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSkKK1Byb3BlcnR5VGFibGUqIFByb3BlcnR5VGFibGU6
OmNyZWF0ZShWTSYgdm0sIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSkKIHsKLSAgICBQcm9wZXJ0
eVRhYmxlKiB0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb3BlcnR5VGFibGU+
KGdsb2JhbERhdGEuaGVhcCkpIFByb3BlcnR5VGFibGUoZ2xvYmFsRGF0YSwgaW5pdGlhbENhcGFj
aXR5KTsKLSAgICB0YWJsZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgUHJvcGVy
dHlUYWJsZSogdGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9wZXJ0eVRhYmxl
Pih2bS5oZWFwKSkgUHJvcGVydHlUYWJsZSh2bSwgaW5pdGlhbENhcGFjaXR5KTsKKyAgICB0YWJs
ZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiB0YWJsZTsKIH0KIAotUHJvcGVydHlU
YWJsZSogUHJvcGVydHlUYWJsZTo6Y2xvbmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0Nl
bGwqIG93bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKK1Byb3BlcnR5VGFibGUqIFBy
b3BlcnR5VGFibGU6OmNsb25lKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgY29uc3QgUHJvcGVydHlU
YWJsZSYgb3RoZXIpCiB7Ci0gICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxQcm9wZXJ0eVRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBQcm9wZXJ0eVRh
YmxlKGdsb2JhbERhdGEsIG93bmVyLCBvdGhlcik7Ci0gICAgdGFibGUtPmZpbmlzaENyZWF0aW9u
KGdsb2JhbERhdGEpOworICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8UHJvcGVydHlUYWJsZT4odm0uaGVhcCkpIFByb3BlcnR5VGFibGUodm0sIG93
bmVyLCBvdGhlcik7CisgICAgdGFibGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4g
dGFibGU7CiB9CiAKLVByb3BlcnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNsb25lKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5
LCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKK1Byb3BlcnR5VGFibGUqIFByb3BlcnR5VGFi
bGU6OmNsb25lKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5
LCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKIHsKLSAgICBQcm9wZXJ0eVRhYmxlKiB0YWJs
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb3BlcnR5VGFibGU+KGdsb2JhbERhdGEu
aGVhcCkpIFByb3BlcnR5VGFibGUoZ2xvYmFsRGF0YSwgb3duZXIsIGluaXRpYWxDYXBhY2l0eSwg
b3RoZXIpOwotICAgIHRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBQcm9w
ZXJ0eVRhYmxlKiB0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb3BlcnR5VGFi
bGU+KHZtLmhlYXApKSBQcm9wZXJ0eVRhYmxlKHZtLCBvd25lciwgaW5pdGlhbENhcGFjaXR5LCBv
dGhlcik7CisgICAgdGFibGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gdGFibGU7
CiB9CiAKLVByb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkpCi0gICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwg
Z2xvYmFsRGF0YS5wcm9wZXJ0eVRhYmxlU3RydWN0dXJlLmdldCgpKQorUHJvcGVydHlUYWJsZTo6
UHJvcGVydHlUYWJsZShWTSYgdm0sIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSkKKyAgICA6IEpT
Q2VsbCh2bSwgdm0ucHJvcGVydHlUYWJsZVN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1faW5kZXhT
aXplKHNpemVGb3JDYXBhY2l0eShpbml0aWFsQ2FwYWNpdHkpKQogICAgICwgbV9pbmRleE1hc2so
bV9pbmRleFNpemUgLSAxKQogICAgICwgbV9pbmRleChzdGF0aWNfY2FzdDx1bnNpZ25lZCo+KGZh
c3RaZXJvZWRNYWxsb2MoZGF0YVNpemUoKSkpKQpAQCAtNjcsOCArNjcsOCBAQCBQcm9wZXJ0eVRh
YmxlOjpQcm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0CiAgICAgQVNTRVJUKGlzUG93ZXJPZjIobV9p
bmRleFNpemUpKTsKIH0KIAotUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVy
KQotICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEucHJvcGVydHlUYWJsZVN0cnVj
dHVyZS5nZXQoKSkKK1Byb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKKyAgICA6IEpTQ2VsbCh2bSwgdm0u
cHJvcGVydHlUYWJsZVN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1faW5kZXhTaXplKG90aGVyLm1f
aW5kZXhTaXplKQogICAgICwgbV9pbmRleE1hc2sob3RoZXIubV9pbmRleE1hc2spCiAgICAgLCBt
X2luZGV4KHN0YXRpY19jYXN0PHVuc2lnbmVkKj4oZmFzdE1hbGxvYyhkYXRhU2l6ZSgpKSkpCkBA
IC05MSw4ICs5MSw4IEBAIFByb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXQK
ICAgICAgICAgbV9kZWxldGVkT2Zmc2V0cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UHJvcGVydHlP
ZmZzZXQ+KCpvdGhlckRlbGV0ZWRPZmZzZXRzKSk7CiB9CiAKLVByb3BlcnR5VGFibGU6OlByb3Bl
cnR5VGFibGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25l
ZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQotICAgIDogSlND
ZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEucHJvcGVydHlUYWJsZVN0cnVjdHVyZS5nZXQoKSkK
K1Byb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCB1bnNp
Z25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQorICAgIDog
SlNDZWxsKHZtLCB2bS5wcm9wZXJ0eVRhYmxlU3RydWN0dXJlLmdldCgpKQogICAgICwgbV9pbmRl
eFNpemUoc2l6ZUZvckNhcGFjaXR5KGluaXRpYWxDYXBhY2l0eSkpCiAgICAgLCBtX2luZGV4TWFz
ayhtX2luZGV4U2l6ZSAtIDEpCiAgICAgLCBtX2luZGV4KHN0YXRpY19jYXN0PHVuc2lnbmVkKj4o
ZmFzdFplcm9lZE1hbGxvYyhkYXRhU2l6ZSgpKSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm90b3R5cGVNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZU1hcC5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZU1hcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYyLDcgKzYyLDcgQEAgU3RydWN0dXJlKiBQcm90b3R5cGVNYXA6OmVtcHR5T2JqZWN0
U3RydQogCiAgICAgYWRkUHJvdG90eXBlKHByb3RvdHlwZSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBKU0ZpbmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoCi0gICAgICAgIHByb3RvdHlw
ZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3Qo
KSwgcHJvdG90eXBlLCBpbmxpbmVDYXBhY2l0eSk7CisgICAgICAgIHByb3RvdHlwZS0+Z2xvYmFs
T2JqZWN0KCktPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCksIHByb3RvdHlwZSwgaW5s
aW5lQ2FwYWNpdHkpOwogICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBzdHJ1Y3R1cmU7
CiAgICAgcmV0dXJuIHN0cnVjdHVyZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDggKzIxNyw4IEBA
IHZvaWQgUmVnRXhwRnVuY3Rpb25hbFRlc3RDb2xsZWN0b3I6Om91dHAKIH0KICNlbmRpZgogCi1S
ZWdFeHA6OlJlZ0V4cChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFN0cmluZyYgcGF0
dGVyblN0cmluZywgUmVnRXhwRmxhZ3MgZmxhZ3MpCi0gICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwg
Z2xvYmFsRGF0YS5yZWdFeHBTdHJ1Y3R1cmUuZ2V0KCkpCitSZWdFeHA6OlJlZ0V4cChWTSYgdm0s
IGNvbnN0IFN0cmluZyYgcGF0dGVyblN0cmluZywgUmVnRXhwRmxhZ3MgZmxhZ3MpCisgICAgOiBK
U0NlbGwodm0sIHZtLnJlZ0V4cFN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1fc3RhdGUoTm90Q29t
cGlsZWQpCiAgICAgLCBtX3BhdHRlcm5TdHJpbmcocGF0dGVyblN0cmluZykKICAgICAsIG1fZmxh
Z3MoZmxhZ3MpCkBAIC0yMzEsOSArMjMxLDkgQEAgUmVnRXhwOjpSZWdFeHAoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLAogewogfQogCi12b2lkIFJlZ0V4cDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBSZWdFeHA6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
IHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CiAgICAgWWFycjo6WWFyclBhdHRlcm4gcGF0dGVybihtX3BhdHRlcm5T
dHJpbmcsIGlnbm9yZUNhc2UoKSwgbXVsdGlsaW5lKCksICZtX2NvbnN0cnVjdGlvbkVycm9yKTsK
ICAgICBpZiAobV9jb25zdHJ1Y3Rpb25FcnJvcikKICAgICAgICAgbV9zdGF0ZSA9IFBhcnNlRXJy
b3I7CkBAIC0yNTAsMTkgKzI1MCwxOSBAQCB2b2lkIFJlZ0V4cDo6ZGVzdHJveShKU0NlbGwqIGNl
bGwpCiAgICAgdGhpc09iamVjdC0+UmVnRXhwOjp+UmVnRXhwKCk7CiB9CiAKLVJlZ0V4cCogUmVn
RXhwOjpjcmVhdGVXaXRob3V0Q2FjaGluZyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0
IFN0cmluZyYgcGF0dGVyblN0cmluZywgUmVnRXhwRmxhZ3MgZmxhZ3MpCitSZWdFeHAqIFJlZ0V4
cDo6Y3JlYXRlV2l0aG91dENhY2hpbmcoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHBhdHRlcm5TdHJp
bmcsIFJlZ0V4cEZsYWdzIGZsYWdzKQogewotICAgIFJlZ0V4cCogcmVnRXhwID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8UmVnRXhwPihnbG9iYWxEYXRhLmhlYXApKSBSZWdFeHAoZ2xvYmFs
RGF0YSwgcGF0dGVyblN0cmluZywgZmxhZ3MpOwotICAgIHJlZ0V4cC0+ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsRGF0YSk7CisgICAgUmVnRXhwKiByZWdFeHAgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxSZWdFeHA+KHZtLmhlYXApKSBSZWdFeHAodm0sIHBhdHRlcm5TdHJpbmcsIGZsYWdzKTsK
KyAgICByZWdFeHAtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gcmVnRXhwOwogfQog
Ci1SZWdFeHAqIFJlZ0V4cDo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3Qg
U3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBSZWdFeHBGbGFncyBmbGFncykKK1JlZ0V4cCogUmVnRXhw
OjpjcmVhdGUoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIFJlZ0V4cEZsYWdz
IGZsYWdzKQogewotICAgIHJldHVybiBnbG9iYWxEYXRhLnJlZ0V4cENhY2hlKCktPmxvb2t1cE9y
Q3JlYXRlKHBhdHRlcm5TdHJpbmcsIGZsYWdzKTsKKyAgICByZXR1cm4gdm0ucmVnRXhwQ2FjaGUo
KS0+bG9va3VwT3JDcmVhdGUocGF0dGVyblN0cmluZywgZmxhZ3MpOwogfQogCi12b2lkIFJlZ0V4
cDo6Y29tcGlsZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFlhcnI6OllhcnJDaGFyU2l6ZSBj
aGFyU2l6ZSkKK3ZvaWQgUmVnRXhwOjpjb21waWxlKFZNKiB2bSwgWWFycjo6WWFyckNoYXJTaXpl
IGNoYXJTaXplKQogewogICAgIFlhcnI6OllhcnJQYXR0ZXJuIHBhdHRlcm4obV9wYXR0ZXJuU3Ry
aW5nLCBpZ25vcmVDYXNlKCksIG11bHRpbGluZSgpLCAmbV9jb25zdHJ1Y3Rpb25FcnJvcik7CiAg
ICAgaWYgKG1fY29uc3RydWN0aW9uRXJyb3IpIHsKQEAgLTI3NCwxMyArMjc0LDEzIEBAIHZvaWQg
UmVnRXhwOjpjb21waWxlKEpTR2xvYmFsRGF0YSogZ2xvYmEKIAogICAgIGlmICghaGFzQ29kZSgp
KSB7CiAgICAgICAgIEFTU0VSVChtX3N0YXRlID09IE5vdENvbXBpbGVkKTsKLSAgICAgICAgZ2xv
YmFsRGF0YS0+cmVnRXhwQ2FjaGUoKS0+YWRkVG9TdHJvbmdDYWNoZSh0aGlzKTsKKyAgICAgICAg
dm0tPnJlZ0V4cENhY2hlKCktPmFkZFRvU3Ryb25nQ2FjaGUodGhpcyk7CiAgICAgICAgIG1fc3Rh
dGUgPSBCeXRlQ29kZTsKICAgICB9CiAKICNpZiBFTkFCTEUoWUFSUl9KSVQpCi0gICAgaWYgKCFw
YXR0ZXJuLm1fY29udGFpbnNCYWNrcmVmZXJlbmNlcyAmJiBnbG9iYWxEYXRhLT5jYW5Vc2VSZWdF
eHBKSVQoKSkgewotICAgICAgICBZYXJyOjpqaXRDb21waWxlKHBhdHRlcm4sIGNoYXJTaXplLCBn
bG9iYWxEYXRhLCBtX3JlZ0V4cEpJVENvZGUpOworICAgIGlmICghcGF0dGVybi5tX2NvbnRhaW5z
QmFja3JlZmVyZW5jZXMgJiYgdm0tPmNhblVzZVJlZ0V4cEpJVCgpKSB7CisgICAgICAgIFlhcnI6
OmppdENvbXBpbGUocGF0dGVybiwgY2hhclNpemUsIHZtLCBtX3JlZ0V4cEpJVENvZGUpOwogI2lm
IEVOQUJMRShZQVJSX0pJVF9ERUJVRykKICAgICAgICAgaWYgKCFtX3JlZ0V4cEpJVENvZGUuaXNG
YWxsQmFjaygpKQogICAgICAgICAgICAgbV9zdGF0ZSA9IEpJVENvZGU7CkBAIC0yOTcsMTAgKzI5
NywxMCBAQCB2b2lkIFJlZ0V4cDo6Y29tcGlsZShKU0dsb2JhbERhdGEqIGdsb2JhCiAgICAgVU5V
U0VEX1BBUkFNKGNoYXJTaXplKTsKICNlbmRpZgogCi0gICAgbV9yZWdFeHBCeXRlY29kZSA9IFlh
cnI6OmJ5dGVDb21waWxlKHBhdHRlcm4sICZnbG9iYWxEYXRhLT5tX3JlZ0V4cEFsbG9jYXRvcik7
CisgICAgbV9yZWdFeHBCeXRlY29kZSA9IFlhcnI6OmJ5dGVDb21waWxlKHBhdHRlcm4sICZ2bS0+
bV9yZWdFeHBBbGxvY2F0b3IpOwogfQogCi12b2lkIFJlZ0V4cDo6Y29tcGlsZUlmTmVjZXNzYXJ5
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgWWFycjo6WWFyckNoYXJTaXplIGNoYXJTaXplKQor
dm9pZCBSZWdFeHA6OmNvbXBpbGVJZk5lY2Vzc2FyeShWTSYgdm0sIFlhcnI6OllhcnJDaGFyU2l6
ZSBjaGFyU2l6ZSkKIHsKICAgICBpZiAoaGFzQ29kZSgpKSB7CiAjaWYgRU5BQkxFKFlBUlJfSklU
KQpAQCAtMzE1LDE3ICszMTUsMTcgQEAgdm9pZCBSZWdFeHA6OmNvbXBpbGVJZk5lY2Vzc2FyeShK
U0dsb2JhbAogI2VuZGlmCiAgICAgfQogCi0gICAgY29tcGlsZSgmZ2xvYmFsRGF0YSwgY2hhclNp
emUpOworICAgIGNvbXBpbGUoJnZtLCBjaGFyU2l6ZSk7CiB9CiAKLWludCBSZWdFeHA6Om1hdGNo
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBzdGFy
dE9mZnNldCwgVmVjdG9yPGludCwgMzI+JiBvdmVjdG9yKQoraW50IFJlZ0V4cDo6bWF0Y2goVk0m
IHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBWZWN0b3I8aW50LCAz
Mj4mIG92ZWN0b3IpCiB7CiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQogICAgIG1fcnRNYXRj
aENhbGxDb3VudCsrOwogI2VuZGlmCiAKICAgICBBU1NFUlQobV9zdGF0ZSAhPSBQYXJzZUVycm9y
KTsKLSAgICBjb21waWxlSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSwgcy5pczhCaXQoKSA/IFlhcnI6
OkNoYXI4IDogWWFycjo6Q2hhcjE2KTsKKyAgICBjb21waWxlSWZOZWNlc3Nhcnkodm0sIHMuaXM4
Qml0KCkgPyBZYXJyOjpDaGFyOCA6IFlhcnI6OkNoYXIxNik7CiAKICAgICBpbnQgb2Zmc2V0VmVj
dG9yU2l6ZSA9IChtX251bVN1YnBhdHRlcm5zICsgMSkgKiAyOwogICAgIG92ZWN0b3IucmVzaXpl
KG9mZnNldFZlY3RvclNpemUpOwpAQCAtMzg0LDcgKzM4NCw3IEBAIGludCBSZWdFeHA6Om1hdGNo
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGEKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFJl
Z0V4cDo6Y29tcGlsZU1hdGNoT25seShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFlhcnI6Ollh
cnJDaGFyU2l6ZSBjaGFyU2l6ZSkKK3ZvaWQgUmVnRXhwOjpjb21waWxlTWF0Y2hPbmx5KFZNKiB2
bSwgWWFycjo6WWFyckNoYXJTaXplIGNoYXJTaXplKQogewogICAgIFlhcnI6OllhcnJQYXR0ZXJu
IHBhdHRlcm4obV9wYXR0ZXJuU3RyaW5nLCBpZ25vcmVDYXNlKCksIG11bHRpbGluZSgpLCAmbV9j
b25zdHJ1Y3Rpb25FcnJvcik7CiAgICAgaWYgKG1fY29uc3RydWN0aW9uRXJyb3IpIHsKQEAgLTM5
NiwxMyArMzk2LDEzIEBAIHZvaWQgUmVnRXhwOjpjb21waWxlTWF0Y2hPbmx5KEpTR2xvYmFsRGEK
IAogICAgIGlmICghaGFzQ29kZSgpKSB7CiAgICAgICAgIEFTU0VSVChtX3N0YXRlID09IE5vdENv
bXBpbGVkKTsKLSAgICAgICAgZ2xvYmFsRGF0YS0+cmVnRXhwQ2FjaGUoKS0+YWRkVG9TdHJvbmdD
YWNoZSh0aGlzKTsKKyAgICAgICAgdm0tPnJlZ0V4cENhY2hlKCktPmFkZFRvU3Ryb25nQ2FjaGUo
dGhpcyk7CiAgICAgICAgIG1fc3RhdGUgPSBCeXRlQ29kZTsKICAgICB9CiAKICNpZiBFTkFCTEUo
WUFSUl9KSVQpCi0gICAgaWYgKCFwYXR0ZXJuLm1fY29udGFpbnNCYWNrcmVmZXJlbmNlcyAmJiBn
bG9iYWxEYXRhLT5jYW5Vc2VSZWdFeHBKSVQoKSkgewotICAgICAgICBZYXJyOjpqaXRDb21waWxl
KHBhdHRlcm4sIGNoYXJTaXplLCBnbG9iYWxEYXRhLCBtX3JlZ0V4cEpJVENvZGUsIFlhcnI6Ok1h
dGNoT25seSk7CisgICAgaWYgKCFwYXR0ZXJuLm1fY29udGFpbnNCYWNrcmVmZXJlbmNlcyAmJiB2
bS0+Y2FuVXNlUmVnRXhwSklUKCkpIHsKKyAgICAgICAgWWFycjo6aml0Q29tcGlsZShwYXR0ZXJu
LCBjaGFyU2l6ZSwgdm0sIG1fcmVnRXhwSklUQ29kZSwgWWFycjo6TWF0Y2hPbmx5KTsKICNpZiBF
TkFCTEUoWUFSUl9KSVRfREVCVUcpCiAgICAgICAgIGlmICghbV9yZWdFeHBKSVRDb2RlLmlzRmFs
bEJhY2soKSkKICAgICAgICAgICAgIG1fc3RhdGUgPSBKSVRDb2RlOwpAQCAtNDE5LDEwICs0MTks
MTAgQEAgdm9pZCBSZWdFeHA6OmNvbXBpbGVNYXRjaE9ubHkoSlNHbG9iYWxEYQogICAgIFVOVVNF
RF9QQVJBTShjaGFyU2l6ZSk7CiAjZW5kaWYKIAotICAgIG1fcmVnRXhwQnl0ZWNvZGUgPSBZYXJy
OjpieXRlQ29tcGlsZShwYXR0ZXJuLCAmZ2xvYmFsRGF0YS0+bV9yZWdFeHBBbGxvY2F0b3IpOwor
ICAgIG1fcmVnRXhwQnl0ZWNvZGUgPSBZYXJyOjpieXRlQ29tcGlsZShwYXR0ZXJuLCAmdm0tPm1f
cmVnRXhwQWxsb2NhdG9yKTsKIH0KIAotdm9pZCBSZWdFeHA6OmNvbXBpbGVJZk5lY2Vzc2FyeU1h
dGNoT25seShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFlhcnI6OllhcnJDaGFyU2l6ZSBjaGFy
U2l6ZSkKK3ZvaWQgUmVnRXhwOjpjb21waWxlSWZOZWNlc3NhcnlNYXRjaE9ubHkoVk0mIHZtLCBZ
YXJyOjpZYXJyQ2hhclNpemUgY2hhclNpemUpCiB7CiAgICAgaWYgKGhhc0NvZGUoKSkgewogI2lm
IEVOQUJMRShZQVJSX0pJVCkKQEAgLTQzNywxNyArNDM3LDE3IEBAIHZvaWQgUmVnRXhwOjpjb21w
aWxlSWZOZWNlc3NhcnlNYXRjaE9ubHkKICNlbmRpZgogICAgIH0KIAotICAgIGNvbXBpbGVNYXRj
aE9ubHkoJmdsb2JhbERhdGEsIGNoYXJTaXplKTsKKyAgICBjb21waWxlTWF0Y2hPbmx5KCZ2bSwg
Y2hhclNpemUpOwogfQogCi1NYXRjaFJlc3VsdCBSZWdFeHA6Om1hdGNoKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgY29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBzdGFydE9mZnNldCkKK01hdGNo
UmVzdWx0IFJlZ0V4cDo6bWF0Y2goVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0KQogewogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKICAgICBtX3J0TWF0Y2hD
YWxsQ291bnQrKzsKICNlbmRpZgogCiAgICAgQVNTRVJUKG1fc3RhdGUgIT0gUGFyc2VFcnJvcik7
Ci0gICAgY29tcGlsZUlmTmVjZXNzYXJ5TWF0Y2hPbmx5KGdsb2JhbERhdGEsIHMuaXM4Qml0KCkg
PyBZYXJyOjpDaGFyOCA6IFlhcnI6OkNoYXIxNik7CisgICAgY29tcGlsZUlmTmVjZXNzYXJ5TWF0
Y2hPbmx5KHZtLCBzLmlzOEJpdCgpID8gWWFycjo6Q2hhcjggOiBZYXJyOjpDaGFyMTYpOwogCiAj
aWYgRU5BQkxFKFlBUlJfSklUKQogICAgIGlmIChtX3N0YXRlID09IEpJVENvZGUpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCShyZXZpc2lvbiAxNDg2MzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNyArMzgsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBzdHJ1Y3QgUmVnRXhwUmVw
cmVzZW50YXRpb247Ci0gICAgY2xhc3MgSlNHbG9iYWxEYXRhOworICAgIGNsYXNzIFZNOwogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgUmVnRXhwRmxhZ3MgcmVnRXhwRmxhZ3MoY29uc3QgU3RyaW5n
Jik7CiAKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAg
ICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBSZWdFeHAqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBjb25zdCBTdHJpbmcmIHBhdHRlcm4s
IFJlZ0V4cEZsYWdzKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZ0V4cCog
Y3JlYXRlKFZNJiwgY29uc3QgU3RyaW5nJiBwYXR0ZXJuLCBSZWdFeHBGbGFncyk7CiAgICAgICAg
IHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CiAgICAgICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CkBAIC02MCw4ICs2MCw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAhbV9jb25zdHJ1Y3Rpb25F
cnJvciAmJiBtX2ZsYWdzICE9IEludmFsaWRGbGFnczsgfQogICAgICAgICBjb25zdCBjaGFyKiBl
cnJvck1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0cnVjdGlvbkVycm9yOyB9CiAKLSAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgaW50IG1hdGNoKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFN0
cmluZyYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBWZWN0b3I8aW50LCAzMj4mIG92ZWN0b3IpOwot
ICAgICAgICBNYXRjaFJlc3VsdCBtYXRjaChKU0dsb2JhbERhdGEmLCBjb25zdCBTdHJpbmcmLCB1
bnNpZ25lZCBzdGFydE9mZnNldCk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGludCBtYXRj
aChWTSYsIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBWZWN0b3I8aW50LCAz
Mj4mIG92ZWN0b3IpOworICAgICAgICBNYXRjaFJlc3VsdCBtYXRjaChWTSYsIGNvbnN0IFN0cmlu
ZyYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KTsKICAgICAgICAgdW5zaWduZWQgbnVtU3VicGF0dGVy
bnMoKSBjb25zdCB7IHJldHVybiBtX251bVN1YnBhdHRlcm5zOyB9CiAKICAgICAgICAgYm9vbCBo
YXNDb2RlKCkKQEAgLTc1LDkgKzc1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
cHJpbnRUcmFjZURhdGEoKTsKICNlbmRpZgogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgICAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhM
ZWFmVHlwZSwgMCksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oTGVhZlR5cGUsIDApLCAm
c19pbmZvKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CkBAIC04NSwxMyArODUsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IFJlZ0V4cEtleSBrZXkoKSB7IHJldHVybiBSZWdFeHBLZXkobV9mbGFncywgbV9wYXR0ZXJuU3Ry
aW5nKTsgfQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
R2xvYmFsRGF0YSYpOworICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAKICAgICBw
cml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgUmVnRXhwQ2FjaGU7Ci0gICAgICAgIFJlZ0V4
cChKU0dsb2JhbERhdGEmLCBjb25zdCBTdHJpbmcmLCBSZWdFeHBGbGFncyk7CisgICAgICAgIFJl
Z0V4cChWTSYsIGNvbnN0IFN0cmluZyYsIFJlZ0V4cEZsYWdzKTsKIAotICAgICAgICBzdGF0aWMg
UmVnRXhwKiBjcmVhdGVXaXRob3V0Q2FjaGluZyhKU0dsb2JhbERhdGEmLCBjb25zdCBTdHJpbmcm
LCBSZWdFeHBGbGFncyk7CisgICAgICAgIHN0YXRpYyBSZWdFeHAqIGNyZWF0ZVdpdGhvdXRDYWNo
aW5nKFZNJiwgY29uc3QgU3RyaW5nJiwgUmVnRXhwRmxhZ3MpOwogCiAgICAgICAgIGVudW0gUmVn
RXhwU3RhdGUgewogICAgICAgICAgICAgUGFyc2VFcnJvciwKQEAgLTEwMCwxMSArMTAwLDExIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgTm90Q29tcGlsZWQKICAgICAgICAgfSBtX3N0
YXRlOwogCi0gICAgICAgIHZvaWQgY29tcGlsZShKU0dsb2JhbERhdGEqLCBZYXJyOjpZYXJyQ2hh
clNpemUpOwotICAgICAgICB2b2lkIGNvbXBpbGVJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmLCBZ
YXJyOjpZYXJyQ2hhclNpemUpOworICAgICAgICB2b2lkIGNvbXBpbGUoVk0qLCBZYXJyOjpZYXJy
Q2hhclNpemUpOworICAgICAgICB2b2lkIGNvbXBpbGVJZk5lY2Vzc2FyeShWTSYsIFlhcnI6Ollh
cnJDaGFyU2l6ZSk7CiAKLSAgICAgICAgdm9pZCBjb21waWxlTWF0Y2hPbmx5KEpTR2xvYmFsRGF0
YSosIFlhcnI6OllhcnJDaGFyU2l6ZSk7Ci0gICAgICAgIHZvaWQgY29tcGlsZUlmTmVjZXNzYXJ5
TWF0Y2hPbmx5KEpTR2xvYmFsRGF0YSYsIFlhcnI6OllhcnJDaGFyU2l6ZSk7CisgICAgICAgIHZv
aWQgY29tcGlsZU1hdGNoT25seShWTSosIFlhcnI6OllhcnJDaGFyU2l6ZSk7CisgICAgICAgIHZv
aWQgY29tcGlsZUlmTmVjZXNzYXJ5TWF0Y2hPbmx5KFZNJiwgWWFycjo6WWFyckNoYXJTaXplKTsK
IAogI2lmIEVOQUJMRShZQVJSX0pJVF9ERUJVRykKICAgICAgICAgdm9pZCBtYXRjaENvbXBhcmVX
aXRoSW50ZXJwcmV0ZXIoY29uc3QgU3RyaW5nJiwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQqIG9mZnNl
dFZlY3RvciwgaW50IGppdFJlc3VsdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDE4ICs0MSwxOCBAQCBSZWdFeHAqIFJlZ0V4cENhY2hlOjpsb29rdXBPckNyZWF0ZShjb25zCiAg
ICAgaWYgKFJlZ0V4cCogcmVnRXhwID0gbV93ZWFrQ2FjaGUuZ2V0KGtleSkpCiAgICAgICAgIHJl
dHVybiByZWdFeHA7CiAKLSAgICBSZWdFeHAqIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlV2l0aG91
dENhY2hpbmcoKm1fZ2xvYmFsRGF0YSwgcGF0dGVyblN0cmluZywgZmxhZ3MpOworICAgIFJlZ0V4
cCogcmVnRXhwID0gUmVnRXhwOjpjcmVhdGVXaXRob3V0Q2FjaGluZygqbV92bSwgcGF0dGVyblN0
cmluZywgZmxhZ3MpOwogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKLSAgICBtX2dsb2JhbERh
dGEtPmFkZFJlZ0V4cFRvVHJhY2UocmVnRXhwKTsKKyAgICBtX3ZtLT5hZGRSZWdFeHBUb1RyYWNl
KHJlZ0V4cCk7CiAjZW5kaWYKIAogICAgIHdlYWtBZGQobV93ZWFrQ2FjaGUsIGtleSwgUGFzc1dl
YWs8UmVnRXhwPihyZWdFeHAsIHRoaXMpKTsKICAgICByZXR1cm4gcmVnRXhwOwogfQogCi1SZWdF
eHBDYWNoZTo6UmVnRXhwQ2FjaGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorUmVnRXhwQ2Fj
aGU6OlJlZ0V4cENhY2hlKFZNKiB2bSkKICAgICA6IG1fbmV4dEVudHJ5SW5TdHJvbmdDYWNoZSgw
KQotICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgLCBtX3ZtKHZtKQogewogfQog
CkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgUmVnRXhwQ2FjaGU6OmFkZFRvU3Ryb25nQ2FjaGUoUmVn
RXgKICAgICBTdHJpbmcgcGF0dGVybiA9IHJlZ0V4cC0+cGF0dGVybigpOwogICAgIGlmIChwYXR0
ZXJuLmxlbmd0aCgpID4gbWF4U3Ryb25nQ2FjaGVhYmxlUGF0dGVybkxlbmd0aCkKICAgICAgICAg
cmV0dXJuOwotICAgIG1fc3Ryb25nQ2FjaGVbbV9uZXh0RW50cnlJblN0cm9uZ0NhY2hlXS5zZXQo
Km1fZ2xvYmFsRGF0YSwgcmVnRXhwKTsKKyAgICBtX3N0cm9uZ0NhY2hlW21fbmV4dEVudHJ5SW5T
dHJvbmdDYWNoZV0uc2V0KCptX3ZtLCByZWdFeHApOwogICAgIG1fbmV4dEVudHJ5SW5TdHJvbmdD
YWNoZSsrOwogICAgIGlmIChtX25leHRFbnRyeUluU3Ryb25nQ2FjaGUgPT0gbWF4U3Ryb25nQ2Fj
aGVhYmxlRW50cmllcykKICAgICAgICAgbV9uZXh0RW50cnlJblN0cm9uZ0NhY2hlID0gMDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuaAkocmV2aXNp
b24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBmcmllbmQgY2xhc3MgUmVnRXhwOwog
dHlwZWRlZiBIYXNoTWFwPFJlZ0V4cEtleSwgV2VhazxSZWdFeHA+ID4gUmVnRXhwQ2FjaGVNYXA7
CiAKIHB1YmxpYzoKLSAgICBSZWdFeHBDYWNoZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpOwor
ICAgIFJlZ0V4cENhY2hlKFZNKiB2bSk7CiAgICAgdm9pZCBpbnZhbGlkYXRlQ29kZSgpOwogCiBw
cml2YXRlOgpAQCAtNTksNyArNTksNyBAQCBwcml2YXRlOgogICAgIFJlZ0V4cENhY2hlTWFwIG1f
d2Vha0NhY2hlOyAvLyBIb2xkcyBhbGwgcmVndWxhciBleHByZXNzaW9ucyBjdXJyZW50bHkgbGl2
ZS4KICAgICBpbnQgbV9uZXh0RW50cnlJblN0cm9uZ0NhY2hlOwogICAgIFdURjo6Rml4ZWRBcnJh
eTxTdHJvbmc8UmVnRXhwPiwgbWF4U3Ryb25nQ2FjaGVhYmxlRW50cmllcz4gbV9zdHJvbmdDYWNo
ZTsgLy8gSG9sZHMgYSBzZWxlY3QgZmV3IHJlZ3VsYXIgZXhwcmVzc2lvbnMgdGhhdCBoYXZlIGNv
bXBpbGVkIGFuZCBleGVjdXRlZAotICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworICAg
IFZNKiBtX3ZtOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAJKHJldmlz
aW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hl
ZFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDggQEAgdm9pZCBSZWdFeHBD
YWNoZWRSZXN1bHQ6OnZpc2l0Q2hpbGRyZW4oUwogUmVnRXhwTWF0Y2hlc0FycmF5KiBSZWdFeHBD
YWNoZWRSZXN1bHQ6Omxhc3RSZXN1bHQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3duZXIp
CiB7CiAgICAgaWYgKG1fcmVzdWx0KSB7Ci0gICAgICAgIG1fcmVpZmllZElucHV0LnNldChleGVj
LT5nbG9iYWxEYXRhKCksIG93bmVyLCBtX2xhc3RJbnB1dC5nZXQoKSk7Ci0gICAgICAgIG1fcmVp
ZmllZFJlc3VsdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBvd25lciwgUmVnRXhwTWF0Y2hlc0Fy
cmF5OjpjcmVhdGUoZXhlYywgbV9sYXN0SW5wdXQuZ2V0KCksIG1fbGFzdFJlZ0V4cC5nZXQoKSwg
bV9yZXN1bHQpKTsKKyAgICAgICAgbV9yZWlmaWVkSW5wdXQuc2V0KGV4ZWMtPnZtKCksIG93bmVy
LCBtX2xhc3RJbnB1dC5nZXQoKSk7CisgICAgICAgIG1fcmVpZmllZFJlc3VsdC5zZXQoZXhlYy0+
dm0oKSwgb3duZXIsIFJlZ0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRlKGV4ZWMsIG1fbGFzdElucHV0
LmdldCgpLCBtX2xhc3RSZWdFeHAuZ2V0KCksIG1fcmVzdWx0KSk7CiAgICAgICAgIG1fcmVzdWx0
ID0gTWF0Y2hSZXN1bHQ6OmZhaWxlZCgpOwogICAgIH0KICAgICByZXR1cm4gbV9yZWlmaWVkUmVz
dWx0LmdldCgpOwpAQCAtNTQsNyArNTQsNyBAQCB2b2lkIFJlZ0V4cENhY2hlZFJlc3VsdDo6c2V0
SW5wdXQoRXhlY1N0CiAgICAgLy8gTWFrZSBzdXJlIHdlJ3JlIHJlaWZpZWQsIG90aGVyd2lzZSBt
X3JlaWZpZWRJbnB1dCB3aWxsIGJlIGlnbm9yZWQuCiAgICAgbGFzdFJlc3VsdChleGVjLCBvd25l
cik7CiAgICAgQVNTRVJUKCFtX3Jlc3VsdCk7Ci0gICAgbV9yZWlmaWVkSW5wdXQuc2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgb3duZXIsIGlucHV0KTsKKyAgICBtX3JlaWZpZWRJbnB1dC5zZXQoZXhl
Yy0+dm0oKSwgb3duZXIsIGlucHV0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQu
aAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwQ2FjaGVkUmVzdWx0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE3ICs0NCwxNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAvLyBtX3JlaWZpZWRSZXN1bHQgYW5kIG1fcmVpZmllZElucHV0IGhv
bGQgdGhlIGNhY2hlZCByZXN1bHRzLgogICAgIGNsYXNzIFJlZ0V4cENhY2hlZFJlc3VsdCB7CiAg
ICAgcHVibGljOgotICAgICAgICBSZWdFeHBDYWNoZWRSZXN1bHQoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU09iamVjdCogb3duZXIsIFJlZ0V4cCogZW1wdHlSZWdFeHApCisgICAgICAgIFJl
Z0V4cENhY2hlZFJlc3VsdChWTSYgdm0sIEpTT2JqZWN0KiBvd25lciwgUmVnRXhwKiBlbXB0eVJl
Z0V4cCkKICAgICAgICAgICAgIDogbV9yZXN1bHQoMCwgMCkKICAgICAgICAgewotICAgICAgICAg
ICAgbV9sYXN0SW5wdXQuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBqc0VtcHR5U3RyaW5nKCZnbG9i
YWxEYXRhKSk7Ci0gICAgICAgICAgICBtX2xhc3RSZWdFeHAuc2V0KGdsb2JhbERhdGEsIG93bmVy
LCBlbXB0eVJlZ0V4cCk7CisgICAgICAgICAgICBtX2xhc3RJbnB1dC5zZXQodm0sIG93bmVyLCBq
c0VtcHR5U3RyaW5nKCZ2bSkpOworICAgICAgICAgICAgbV9sYXN0UmVnRXhwLnNldCh2bSwgb3du
ZXIsIGVtcHR5UmVnRXhwKTsKICAgICAgICAgfQogCi0gICAgICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCByZWNvcmQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU09iamVjdCogb3duZXIsIFJlZ0V4
cCogcmVnRXhwLCBKU1N0cmluZyogaW5wdXQsIE1hdGNoUmVzdWx0IHJlc3VsdCkKKyAgICAgICAg
QUxXQVlTX0lOTElORSB2b2lkIHJlY29yZChWTSYgdm0sIEpTT2JqZWN0KiBvd25lciwgUmVnRXhw
KiByZWdFeHAsIEpTU3RyaW5nKiBpbnB1dCwgTWF0Y2hSZXN1bHQgcmVzdWx0KQogICAgICAgICB7
Ci0gICAgICAgICAgICBtX2xhc3RSZWdFeHAuc2V0KGdsb2JhbERhdGEsIG93bmVyLCByZWdFeHAp
OwotICAgICAgICAgICAgbV9sYXN0SW5wdXQuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBpbnB1dCk7
CisgICAgICAgICAgICBtX2xhc3RSZWdFeHAuc2V0KHZtLCBvd25lciwgcmVnRXhwKTsKKyAgICAg
ICAgICAgIG1fbGFzdElucHV0LnNldCh2bSwgb3duZXIsIGlucHV0KTsKICAgICAgICAgICAgIG1f
cmVzdWx0ID0gcmVzdWx0OwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE0ODYz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODQsMjEgKzg0LDIxIEBAIGNvbnN0IENsYXNzSW5mbyBSZWdF
eHBDb25zdHJ1Y3Rvcjo6c19pbmYKIAogUmVnRXhwQ29uc3RydWN0b3I6OlJlZ0V4cENvbnN0cnVj
dG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBS
ZWdFeHBQcm90b3R5cGUqIHJlZ0V4cFByb3RvdHlwZSkKICAgICA6IEludGVybmFsRnVuY3Rpb24o
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCi0gICAgLCBtX2NhY2hlZFJlc3VsdChnbG9iYWxPYmpl
Y3QtPmdsb2JhbERhdGEoKSwgdGhpcywgcmVnRXhwUHJvdG90eXBlLT5yZWdFeHAoKSkKKyAgICAs
IG1fY2FjaGVkUmVzdWx0KGdsb2JhbE9iamVjdC0+dm0oKSwgdGhpcywgcmVnRXhwUHJvdG90eXBl
LT5yZWdFeHAoKSkKICAgICAsIG1fbXVsdGlsaW5lKGZhbHNlKQogewogfQogCiB2b2lkIFJlZ0V4
cENvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFJlZ0V4cFByb3Rv
dHlwZSogcmVnRXhwUHJvdG90eXBlKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiUmVnRXhwIikuc3RyaW5nKCkpOworICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgIlJlZ0V4
cCIpLnN0cmluZygpKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogCiAgICAgLy8g
RUNNQSAxNS4xMC41LjEgUmVnRXhwLnByb3RvdHlwZQotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlw
ZSwgcmVnRXhwUHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7Cisg
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLnByb3RvdHlwZSwgcmVnRXhwUHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUg
fCBSZWFkT25seSk7CiAKICAgICAvLyBuby4gb2YgYXJndW1lbnRzIGZvciBjb25zdHJ1Y3Rvcgot
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMiksIFJlYWRPbmx5IHwgRG9udERlbGV0
ZSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgp
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigyKSwgUmVhZE9ubHkgfCBE
b250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCiB2b2lkIFJlZ0V4cENvbnN0cnVjdG9yOjpkZXN0
cm95KEpTQ2VsbCogY2VsbCkKQEAgLTI4Myw3ICsyODMsNyBAQCBKU09iamVjdCogY29uc3RydWN0
UmVnRXhwKEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkludmFsaWQgZmxhZ3Mgc3Vw
cGxpZWQgdG8gUmVnRXhwIGNvbnN0cnVjdG9yLiIpKSk7CiAgICAgfQogCi0gICAgUmVnRXhwKiBy
ZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4sIGZsYWdz
KTsKKyAgICBSZWdFeHAqIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMtPnZtKCksIHBhdHRl
cm4sIGZsYWdzKTsKICAgICBpZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCByZWdFeHAtPmVycm9yTWVz
c2FnZSgpKSk7CiAgICAgcmV0dXJuIFJlZ0V4cE9iamVjdDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVn
RXhwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVj
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMs
OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKICAg
ICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQorICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1
dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOwpAQCAtNTUsOCArNTUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0
aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgICAgICBNYXRjaFJlc3VsdCBwZXJmb3Jt
TWF0Y2goSlNHbG9iYWxEYXRhJiwgUmVnRXhwKiwgSlNTdHJpbmcqLCBjb25zdCBTdHJpbmcmLCBp
bnQgc3RhcnRPZmZzZXQsIGludCoqIG92ZWN0b3IpOwotICAgICAgICBNYXRjaFJlc3VsdCBwZXJm
b3JtTWF0Y2goSlNHbG9iYWxEYXRhJiwgUmVnRXhwKiwgSlNTdHJpbmcqLCBjb25zdCBTdHJpbmcm
LCBpbnQgc3RhcnRPZmZzZXQpOworICAgICAgICBNYXRjaFJlc3VsdCBwZXJmb3JtTWF0Y2goVk0m
LCBSZWdFeHAqLCBKU1N0cmluZyosIGNvbnN0IFN0cmluZyYsIGludCBzdGFydE9mZnNldCwgaW50
Kiogb3ZlY3Rvcik7CisgICAgICAgIE1hdGNoUmVzdWx0IHBlcmZvcm1NYXRjaChWTSYsIFJlZ0V4
cCosIEpTU3RyaW5nKiwgY29uc3QgU3RyaW5nJiwgaW50IHN0YXJ0T2Zmc2V0KTsKIAogICAgICAg
ICB2b2lkIHNldE11bHRpbGluZShib29sIG11bHRpbGluZSkgeyBtX211bHRpbGluZSA9IG11bHRp
bGluZTsgfQogICAgICAgICBib29sIG11bHRpbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fbXVsdGls
aW5lOyB9CkBAIC0xMDEsOSArMTAxLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICBleHByZXNz
aW9uIG1hdGNoaW5nIHRocm91Z2ggdGhlIHBlcmZvcm1NYXRjaCBmdW5jdGlvbi4gV2UgdXNlIGNh
Y2hlZCByZXN1bHRzIHRvIGNhbGN1bGF0ZSwgCiAgICAgICBlLmcuLCBSZWdFeHAubGFzdE1hdGNo
IGFuZCBSZWdFeHAubGVmdFBhcmVuLgogICAgICovCi0gICAgQUxXQVlTX0lOTElORSBNYXRjaFJl
c3VsdCBSZWdFeHBDb25zdHJ1Y3Rvcjo6cGVyZm9ybU1hdGNoKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgUmVnRXhwKiByZWdFeHAsIEpTU3RyaW5nKiBzdHJpbmcsIGNvbnN0IFN0cmluZyYgaW5w
dXQsIGludCBzdGFydE9mZnNldCwgaW50Kiogb3ZlY3RvcikKKyAgICBBTFdBWVNfSU5MSU5FIE1h
dGNoUmVzdWx0IFJlZ0V4cENvbnN0cnVjdG9yOjpwZXJmb3JtTWF0Y2goVk0mIHZtLCBSZWdFeHAq
IHJlZ0V4cCwgSlNTdHJpbmcqIHN0cmluZywgY29uc3QgU3RyaW5nJiBpbnB1dCwgaW50IHN0YXJ0
T2Zmc2V0LCBpbnQqKiBvdmVjdG9yKQogICAgIHsKLSAgICAgICAgaW50IHBvc2l0aW9uID0gcmVn
RXhwLT5tYXRjaChnbG9iYWxEYXRhLCBpbnB1dCwgc3RhcnRPZmZzZXQsIG1fb3ZlY3Rvcik7Cisg
ICAgICAgIGludCBwb3NpdGlvbiA9IHJlZ0V4cC0+bWF0Y2godm0sIGlucHV0LCBzdGFydE9mZnNl
dCwgbV9vdmVjdG9yKTsKIAogICAgICAgICBpZiAob3ZlY3RvcikKICAgICAgICAgICAgICpvdmVj
dG9yID0gbV9vdmVjdG9yLmRhdGEoKTsKQEAgLTExNiwxNSArMTE2LDE1IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBBU1NFUlQobV9vdmVjdG9yWzFdID49IHBvc2l0aW9uKTsKICAgICAgICAg
c2l6ZV90IGVuZCA9IG1fb3ZlY3RvclsxXTsKIAotICAgICAgICBtX2NhY2hlZFJlc3VsdC5yZWNv
cmQoZ2xvYmFsRGF0YSwgdGhpcywgcmVnRXhwLCBzdHJpbmcsIE1hdGNoUmVzdWx0KHBvc2l0aW9u
LCBlbmQpKTsKKyAgICAgICAgbV9jYWNoZWRSZXN1bHQucmVjb3JkKHZtLCB0aGlzLCByZWdFeHAs
IHN0cmluZywgTWF0Y2hSZXN1bHQocG9zaXRpb24sIGVuZCkpOwogCiAgICAgICAgIHJldHVybiBN
YXRjaFJlc3VsdChwb3NpdGlvbiwgZW5kKTsKICAgICB9Ci0gICAgQUxXQVlTX0lOTElORSBNYXRj
aFJlc3VsdCBSZWdFeHBDb25zdHJ1Y3Rvcjo6cGVyZm9ybU1hdGNoKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgUmVnRXhwKiByZWdFeHAsIEpTU3RyaW5nKiBzdHJpbmcsIGNvbnN0IFN0cmluZyYg
aW5wdXQsIGludCBzdGFydE9mZnNldCkKKyAgICBBTFdBWVNfSU5MSU5FIE1hdGNoUmVzdWx0IFJl
Z0V4cENvbnN0cnVjdG9yOjpwZXJmb3JtTWF0Y2goVk0mIHZtLCBSZWdFeHAqIHJlZ0V4cCwgSlNT
dHJpbmcqIHN0cmluZywgY29uc3QgU3RyaW5nJiBpbnB1dCwgaW50IHN0YXJ0T2Zmc2V0KQogICAg
IHsKLSAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gcmVnRXhwLT5tYXRjaChnbG9iYWxEYXRh
LCBpbnB1dCwgc3RhcnRPZmZzZXQpOworICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSByZWdF
eHAtPm1hdGNoKHZtLCBpbnB1dCwgc3RhcnRPZmZzZXQpOwogICAgICAgICBpZiAocmVzdWx0KQot
ICAgICAgICAgICAgbV9jYWNoZWRSZXN1bHQucmVjb3JkKGdsb2JhbERhdGEsIHRoaXMsIHJlZ0V4
cCwgc3RyaW5nLCByZXN1bHQpOworICAgICAgICAgICAgbV9jYWNoZWRSZXN1bHQucmVjb3JkKHZt
LCB0aGlzLCByZWdFeHAsIHN0cmluZywgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNo
ZXNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwTWF0Y2hlc0FycmF5LmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsMjggKzMzLDI4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gUmVn
RXhwTWF0Y2hlc0FycmF5OjpzX2luZm8gPSB7IkFycmF5IiwgJkpTQXJyYXk6OnNfaW5mbywgMCwg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShSZWdFeHBNYXRjaGVzQXJyYXkpfTsKIAotUmVnRXhwTWF0
Y2hlc0FycmF5OjpSZWdFeHBNYXRjaGVzQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJp
bmcqIGlucHV0LCBSZWdFeHAqIHJlZ0V4cCwgTWF0Y2hSZXN1bHQgcmVzdWx0KQotICAgIDogSlNB
cnJheShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVy
ZSgpLCBidXR0ZXJmbHkpCitSZWdFeHBNYXRjaGVzQXJyYXk6OlJlZ0V4cE1hdGNoZXNBcnJheShW
TSYgdm0sIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1N0cmluZyogaW5wdXQsIFJlZ0V4cCogcmVnRXhwLCBNYXRjaFJlc3VsdCByZXN1bHQpCisg
ICAgOiBKU0FycmF5KHZtLCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVy
ZSgpLCBidXR0ZXJmbHkpCiAgICAgLCBtX3Jlc3VsdChyZXN1bHQpCiAgICAgLCBtX3N0YXRlKFJl
aWZpZWROb25lKQogewotICAgIG1faW5wdXQuc2V0KGdsb2JhbERhdGEsIHRoaXMsIGlucHV0KTsK
LSAgICBtX3JlZ0V4cC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgcmVnRXhwKTsKKyAgICBtX2lucHV0
LnNldCh2bSwgdGhpcywgaW5wdXQpOworICAgIG1fcmVnRXhwLnNldCh2bSwgdGhpcywgcmVnRXhw
KTsKIH0KIAogUmVnRXhwTWF0Y2hlc0FycmF5KiBSZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBpbnB1dCwgUmVnRXhwKiByZWdFeHAsIE1hdGNoUmVz
dWx0IHJlc3VsdCkKIHsKICAgICBBU1NFUlQocmVzdWx0KTsKLSAgICBKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCByZWdFeHAtPm51bVN1YnBhdHRlcm5z
KCkgKyAxKTsKLSAgICBSZWdFeHBNYXRjaGVzQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8UmVnRXhwTWF0Y2hlc0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBSZWdFeHBN
YXRjaGVzQXJyYXkoZ2xvYmFsRGF0YSwgYnV0dGVyZmx5LCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIGlucHV0LCByZWdFeHAsIHJlc3VsdCk7Ci0gICAgYXJyYXktPmZpbmlzaENyZWF0aW9u
KGdsb2JhbERhdGEpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseSh2bSwgcmVnRXhwLT5udW1TdWJwYXR0ZXJu
cygpICsgMSk7CisgICAgUmVnRXhwTWF0Y2hlc0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPFJlZ0V4cE1hdGNoZXNBcnJheT4odm0uaGVhcCkpIFJlZ0V4cE1hdGNoZXNB
cnJheSh2bSwgYnV0dGVyZmx5LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGlucHV0LCBy
ZWdFeHAsIHJlc3VsdCk7CisgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1
cm4gYXJyYXk7CiB9CiAKLXZvaWQgUmVnRXhwTWF0Y2hlc0FycmF5OjpmaW5pc2hDcmVhdGlvbihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIFJlZ0V4cE1hdGNoZXNBcnJheTo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEp
OworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAogdm9pZCBSZWdFeHBNYXRjaGVz
QXJyYXk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
QEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBSZWdFeHBNYXRjaGVzQXJyYXk6OnJlaWZ5QWxsUHJvcGVy
dAogCiAgICAgaWYgKHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zID0gbV9yZWdFeHAtPm51bVN1YnBh
dHRlcm5zKCkpIHsKICAgICAgICAgVmVjdG9yPGludCwgMzI+IHN1YnBhdHRlcm5SZXN1bHRzOwot
ICAgICAgICBpbnQgcG9zaXRpb24gPSBtX3JlZ0V4cC0+bWF0Y2goZXhlYy0+Z2xvYmFsRGF0YSgp
LCBtX2lucHV0LT52YWx1ZShleGVjKSwgbV9yZXN1bHQuc3RhcnQsIHN1YnBhdHRlcm5SZXN1bHRz
KTsKKyAgICAgICAgaW50IHBvc2l0aW9uID0gbV9yZWdFeHAtPm1hdGNoKGV4ZWMtPnZtKCksIG1f
aW5wdXQtPnZhbHVlKGV4ZWMpLCBtX3Jlc3VsdC5zdGFydCwgc3VicGF0dGVyblJlc3VsdHMpOwog
ICAgICAgICBBU1NFUlRfVU5VU0VEKHBvc2l0aW9uLCBwb3NpdGlvbiA+PSAwICYmIHN0YXRpY19j
YXN0PHNpemVfdD4ocG9zaXRpb24pID09IG1fcmVzdWx0LnN0YXJ0KTsKICAgICAgICAgQVNTRVJU
KG1fcmVzdWx0LnN0YXJ0ID09IHN0YXRpY19jYXN0PHNpemVfdD4oc3VicGF0dGVyblJlc3VsdHNb
MF0pKTsKICAgICAgICAgQVNTRVJUKG1fcmVzdWx0LmVuZCA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+
KHN1YnBhdHRlcm5SZXN1bHRzWzFdKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkocmV2aXNpb24gMTQ4NjM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBS
ZWdFeHBNYXRjaGVzQXJyYXkgOiBwdWJsaWMgSlNBcnJheSB7CiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgUmVnRXhwTWF0Y2hlc0FycmF5KEpTR2xvYmFsRGF0YSYsIEJ1dHRlcmZseSosIEpTR2xvYmFs
T2JqZWN0KiwgSlNTdHJpbmcqLCBSZWdFeHAqLCBNYXRjaFJlc3VsdCk7CisgICAgICAgIFJlZ0V4
cE1hdGNoZXNBcnJheShWTSYsIEJ1dHRlcmZseSosIEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcq
LCBSZWdFeHAqLCBNYXRjaFJlc3VsdCk7CiAKICAgICAgICAgZW51bSBSZWlmaWVkU3RhdGUgeyBS
ZWlmaWVkTm9uZSwgUmVpZmllZE1hdGNoLCBSZWlmaWVkQWxsIH07CiAKQEAgLTQyLDE1ICs0Miwx
NSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNf
aW5mbzsKIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRh
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UpOworICAgICAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBBcnJheVdpdGhBcnJheVN0
b3JhZ2UpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYpOworICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJik7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92
ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZp
c2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw4ICs2NCw4IEBAIGNvbnN0IENsYXNzSW5mbyBS
ZWdFeHBPYmplY3Q6OnNfaW5mbyA9IHsKICovCiAKIFJlZ0V4cE9iamVjdDo6UmVnRXhwT2JqZWN0
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWdF
eHAqIHJlZ0V4cCkKLSAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT5nbG9iYWxE
YXRhKCksIHN0cnVjdHVyZSkKLSAgICAsIG1fcmVnRXhwKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCByZWdFeHApCisgICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+
dm0oKSwgc3RydWN0dXJlKQorICAgICwgbV9yZWdFeHAoZ2xvYmFsT2JqZWN0LT52bSgpLCB0aGlz
LCByZWdFeHApCiAgICAgLCBtX2xhc3RJbmRleElzV3JpdGFibGUodHJ1ZSkKIHsKICAgICBtX2xh
c3RJbmRleC5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzTnVtYmVyKDApKTsKQEAgLTczLDcgKzcz
LDcgQEAgUmVnRXhwT2JqZWN0OjpSZWdFeHBPYmplY3QoSlNHbG9iYWxPYmplYwogCiB2b2lkIFJl
Z0V4cE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
IHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7
CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICBBU1NF
UlQoaW5oZXJpdHMoJnNfaW5mbykpOwogfQogCkBAIC0zMTUsOSArMzE1LDkgQEAgTWF0Y2hSZXN1
bHQgUmVnRXhwT2JqZWN0OjptYXRjaChFeGVjU3RhdAogICAgIFJlZ0V4cCogcmVnRXhwID0gdGhp
cy0+cmVnRXhwKCk7CiAgICAgUmVnRXhwQ29uc3RydWN0b3IqIHJlZ0V4cENvbnN0cnVjdG9yID0g
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBDb25zdHJ1Y3RvcigpOwogICAgIFN0
cmluZyBpbnB1dCA9IHN0cmluZy0+dmFsdWUoZXhlYyk7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgaWYgKCFyZWdFeHAtPmdsb2JhbCgpKQotICAgICAgICByZXR1cm4gcmVnRXhwQ29uc3RydWN0
b3ItPnBlcmZvcm1NYXRjaChnbG9iYWxEYXRhLCByZWdFeHAsIHN0cmluZywgaW5wdXQsIDApOwor
ICAgICAgICByZXR1cm4gcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRjaCh2bSwgcmVnRXhw
LCBzdHJpbmcsIGlucHV0LCAwKTsKIAogICAgIEpTVmFsdWUganNMYXN0SW5kZXggPSBnZXRMYXN0
SW5kZXgoKTsKICAgICB1bnNpZ25lZCBsYXN0SW5kZXg7CkBAIC0zMzYsNyArMzM2LDcgQEAgTWF0
Y2hSZXN1bHQgUmVnRXhwT2JqZWN0OjptYXRjaChFeGVjU3RhdAogICAgICAgICBsYXN0SW5kZXgg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZG91YmxlTGFzdEluZGV4KTsKICAgICB9CiAKLSAgICBN
YXRjaFJlc3VsdCByZXN1bHQgPSByZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9ybU1hdGNoKGdsb2Jh
bERhdGEsIHJlZ0V4cCwgc3RyaW5nLCBpbnB1dCwgbGFzdEluZGV4KTsKKyAgICBNYXRjaFJlc3Vs
dCByZXN1bHQgPSByZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9ybU1hdGNoKHZtLCByZWdFeHAsIHN0
cmluZywgaW5wdXQsIGxhc3RJbmRleCk7CiAgICAgc2V0TGFzdEluZGV4KGV4ZWMsIHJlc3VsdC5l
bmQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDE0ICszNywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyBSZWdFeHBPYmplY3QqIGNyZWF0
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWdFeHAqIHJlZ0V4cCkKKyAgICAgICAgc3RhdGljIFJl
Z0V4cE9iamVjdCogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZ0V4cCogcmVnRXhwKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBSZWdFeHBPYmplY3QqIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFJl
Z0V4cE9iamVjdD4oZ2xvYmFsRGF0YS5oZWFwKSkgUmVnRXhwT2JqZWN0KGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlLCByZWdFeHApOworICAgICAgICAgICAgUmVnRXhwT2JqZWN0KiBvYmplY3QgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxSZWdFeHBPYmplY3Q+KHZtLmhlYXApKSBSZWdFeHBP
YmplY3QoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHJlZ0V4cCk7CiAgICAgICAgICAgICBvYmpl
Y3QtPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICByZXR1cm4gb2Jq
ZWN0OwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBzZXRSZWdFeHAoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBSZWdFeHAqIHIpIHsgbV9yZWdFeHAuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHIp
OyB9CisgICAgICAgIHZvaWQgc2V0UmVnRXhwKFZNJiB2bSwgUmVnRXhwKiByKSB7IG1fcmVnRXhw
LnNldCh2bSwgdGhpcywgcik7IH0KICAgICAgICAgUmVnRXhwKiByZWdFeHAoKSBjb25zdCB7IHJl
dHVybiBtX3JlZ0V4cC5nZXQoKTsgfQogCiAgICAgICAgIHZvaWQgc2V0TGFzdEluZGV4KEV4ZWNT
dGF0ZSogZXhlYywgc2l6ZV90IGxhc3RJbmRleCkKQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgc2V0TGFzdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBsYXN0SW5kZXgsIGJvb2wgc2hvdWxkVGhyb3cpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlm
IChMSUtFTFkobV9sYXN0SW5kZXhJc1dyaXRhYmxlKSkKLSAgICAgICAgICAgICAgICBtX2xhc3RJ
bmRleC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBsYXN0SW5kZXgpOworICAgICAgICAg
ICAgICAgIG1fbGFzdEluZGV4LnNldChleGVjLT52bSgpLCB0aGlzLCBsYXN0SW5kZXgpOwogICAg
ICAgICAgICAgZWxzZSBpZiAoc2hvdWxkVGhyb3cpCiAgICAgICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKICAgICAg
ICAgfQpAQCAtNzYsOSArNzYsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMg
SlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAg
ICAgfQogCiAgICAgcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjAsMTMgKzEyMCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJl
Z0V4cFByb3RvCiAgICAgICAgICAgICBpZiAoZmxhZ3MgPT0gSW52YWxpZEZsYWdzKQogICAgICAg
ICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhl
YywgQVNDSUlMaXRlcmFsKCJJbnZhbGlkIGZsYWdzIHN1cHBsaWVkIHRvIFJlZ0V4cCBjb25zdHJ1
Y3Rvci4iKSkpOwogICAgICAgICB9Ci0gICAgICAgIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgcGF0dGVybiwgZmxhZ3MpOworICAgICAgICByZWdFeHAgPSBSZWdF
eHA6OmNyZWF0ZShleGVjLT52bSgpLCBwYXR0ZXJuLCBmbGFncyk7CiAgICAgfQogCiAgICAgaWYg
KCFyZWdFeHAtPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVTeW50YXhFcnJvcihleGVjLCByZWdFeHAtPmVycm9yTWVzc2FnZSgpKSk7CiAKLSAgICBh
c1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5zZXRSZWdFeHAoZXhlYy0+Z2xvYmFsRGF0YSgpLCBy
ZWdFeHApOworICAgIGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPnNldFJlZ0V4cChleGVjLT52
bSgpLCByZWdFeHApOwogICAgIGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPnNldExhc3RJbmRl
eChleGVjLCAwKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90
eXBlLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw5ICszOSw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2lu
Zm87CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8pOwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAJKHJldmlzaW9u
IDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDEwICs4MSwxMCBAQCBTbWFsbFN0cmluZ3M6OlNtYWxs
U3RyaW5ncygpCiAgICAgICAgIG1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tpXSA9IDA7CiB9CiAK
LXZvaWQgU21hbGxTdHJpbmdzOjppbml0aWFsaXplQ29tbW9uU3RyaW5ncyhKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCit2b2lkIFNtYWxsU3RyaW5nczo6aW5pdGlhbGl6ZUNvbW1vblN0cmluZ3Mo
Vk0mIHZtKQogewotICAgIGNyZWF0ZUVtcHR5U3RyaW5nKCZnbG9iYWxEYXRhKTsKLSNkZWZpbmUg
SlNDX0NPTU1PTl9TVFJJTkdTX0FUVFJJQlVURV9JTklUSUFMSVpFKG5hbWUpIGluaXRpYWxpemUo
Jmdsb2JhbERhdGEsIG1fIyNuYW1lLCAjbmFtZSk7CisgICAgY3JlYXRlRW1wdHlTdHJpbmcoJnZt
KTsKKyNkZWZpbmUgSlNDX0NPTU1PTl9TVFJJTkdTX0FUVFJJQlVURV9JTklUSUFMSVpFKG5hbWUp
IGluaXRpYWxpemUoJnZtLCBtXyMjbmFtZSwgI25hbWUpOwogICAgIEpTQ19DT01NT05fU1RSSU5H
U19FQUNIX05BTUUoSlNDX0NPTU1PTl9TVFJJTkdTX0FUVFJJQlVURV9JTklUSUFMSVpFKQogI3Vu
ZGVmIEpTQ19DT01NT05fU1RSSU5HU19BVFRSSUJVVEVfSU5JVElBTElaRQogfQpAQCAtMTA4LDE4
ICsxMDgsMTggQEAgdm9pZCBTbWFsbFN0cmluZ3M6OmZpbmFsaXplU21hbGxTdHJpbmdzKAogICAg
ICAgICBmaW5hbGl6ZShtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbaV0pOwogfQogCi12b2lkIFNt
YWxsU3RyaW5nczo6Y3JlYXRlRW1wdHlTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQor
dm9pZCBTbWFsbFN0cmluZ3M6OmNyZWF0ZUVtcHR5U3RyaW5nKFZNKiB2bSkKIHsKICAgICBBU1NF
UlQoIW1fZW1wdHlTdHJpbmcpOwotICAgIG1fZW1wdHlTdHJpbmcgPSBKU1N0cmluZzo6Y3JlYXRl
SGFzT3RoZXJPd25lcigqZ2xvYmFsRGF0YSwgU3RyaW5nSW1wbDo6ZW1wdHkoKSk7CisgICAgbV9l
bXB0eVN0cmluZyA9IEpTU3RyaW5nOjpjcmVhdGVIYXNPdGhlck93bmVyKCp2bSwgU3RyaW5nSW1w
bDo6ZW1wdHkoKSk7CiB9CiAKLXZvaWQgU21hbGxTdHJpbmdzOjpjcmVhdGVTaW5nbGVDaGFyYWN0
ZXJTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBjaGFyIGNoYXJhY3Rl
cikKK3ZvaWQgU21hbGxTdHJpbmdzOjpjcmVhdGVTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVk0qIHZt
LCB1bnNpZ25lZCBjaGFyIGNoYXJhY3RlcikKIHsKICAgICBpZiAoIW1fc3RvcmFnZSkKICAgICAg
ICAgbV9zdG9yYWdlID0gYWRvcHRQdHIobmV3IFNtYWxsU3RyaW5nc1N0b3JhZ2UpOwogICAgIEFT
U0VSVCghbV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzW2NoYXJhY3Rlcl0pOwotICAgIG1fc2luZ2xl
Q2hhcmFjdGVyU3RyaW5nc1tjaGFyYWN0ZXJdID0gSlNTdHJpbmc6OmNyZWF0ZUhhc090aGVyT3du
ZXIoKmdsb2JhbERhdGEsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4obV9zdG9yYWdlLT5yZXAoY2hh
cmFjdGVyKSkpOworICAgIG1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tjaGFyYWN0ZXJdID0gSlNT
dHJpbmc6OmNyZWF0ZUhhc090aGVyT3duZXIoKnZtLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+KG1f
c3RvcmFnZS0+cmVwKGNoYXJhY3RlcikpKTsKIH0KIAogU3RyaW5nSW1wbCogU21hbGxTdHJpbmdz
OjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAodW5zaWduZWQgY2hhciBjaGFyYWN0ZXIpCkBAIC0x
MjksOSArMTI5LDkgQEAgU3RyaW5nSW1wbCogU21hbGxTdHJpbmdzOjpzaW5nbGVDaGFyYWN0ZQog
ICAgIHJldHVybiBtX3N0b3JhZ2UtPnJlcChjaGFyYWN0ZXIpOwogfQogCi12b2lkIFNtYWxsU3Ry
aW5nczo6aW5pdGlhbGl6ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTU3RyaW5nKiYgc3Ry
aW5nLCBjb25zdCBjaGFyKiB2YWx1ZSkgY29uc3QKK3ZvaWQgU21hbGxTdHJpbmdzOjppbml0aWFs
aXplKFZNKiB2bSwgSlNTdHJpbmcqJiBzdHJpbmcsIGNvbnN0IGNoYXIqIHZhbHVlKSBjb25zdAog
ewotICAgIHN0cmluZyA9IEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIFN0cmluZ0ltcGw6
OmNyZWF0ZSh2YWx1ZSkpOworICAgIHN0cmluZyA9IEpTU3RyaW5nOjpjcmVhdGUoKnZtLCBTdHJp
bmdJbXBsOjpjcmVhdGUodmFsdWUpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAkocmV2aXNpb24g
MTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgY2xhc3MgU3RyaW5nSW1wbDsKIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgY2xhc3MgSGVhcFJvb3RWaXNpdG9yOwotICAgIGNsYXNzIEpTR2xv
YmFsRGF0YTsKKyAgICBjbGFzcyBWTTsKICAgICBjbGFzcyBKU1N0cmluZzsKICAgICBjbGFzcyBT
bWFsbFN0cmluZ3NTdG9yYWdlOwogICAgIGNsYXNzIFNsb3RWaXNpdG9yOwpAQCAtNjgsMTAgKzY4
LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIG1fZW1wdHlTdHJpbmc7
CiAgICAgICAgIH0KIAotICAgICAgICBKU1N0cmluZyogc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgdW5zaWduZWQgY2hhciBjaGFyYWN0ZXIpCisgICAgICAg
IEpTU3RyaW5nKiBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVk0qIHZtLCB1bnNpZ25lZCBjaGFyIGNo
YXJhY3RlcikKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX3NpbmdsZUNoYXJhY3RlclN0
cmluZ3NbY2hhcmFjdGVyXSkKLSAgICAgICAgICAgICAgICBjcmVhdGVTaW5nbGVDaGFyYWN0ZXJT
dHJpbmcoZ2xvYmFsRGF0YSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICBjcmVhdGVTaW5n
bGVDaGFyYWN0ZXJTdHJpbmcodm0sIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICByZXR1cm4gbV9z
aW5nbGVDaGFyYWN0ZXJTdHJpbmdzW2NoYXJhY3Rlcl07CiAgICAgICAgIH0KIApAQCAtODEsNyAr
ODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU1N0cmluZyoqIHNpbmdsZUNoYXJh
Y3RlclN0cmluZ3MoKSB7IHJldHVybiAmbV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzWzBdOyB9CiAK
LSAgICAgICAgdm9pZCBpbml0aWFsaXplQ29tbW9uU3RyaW5ncyhKU0dsb2JhbERhdGEmKTsKKyAg
ICAgICAgdm9pZCBpbml0aWFsaXplQ29tbW9uU3RyaW5ncyhWTSYpOwogICAgICAgICB2b2lkIHZp
c2l0U3Ryb25nUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOwogCiAjZGVmaW5lIEpTQ19DT01NT05f
U1RSSU5HU19BQ0NFU1NPUl9ERUZJTklUSU9OKG5hbWUpIFwKQEAgLTk1LDEwICs5NSwxMCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgc2luZ2xlQ2hhcmFjdGVyU3RyaW5nQ291bnQgPSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcg
KyAxOwogCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY3JlYXRlRW1wdHlTdHJpbmco
SlNHbG9iYWxEYXRhKik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY3JlYXRlU2lu
Z2xlQ2hhcmFjdGVyU3RyaW5nKEpTR2xvYmFsRGF0YSosIHVuc2lnbmVkIGNoYXIpOworICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNyZWF0ZUVtcHR5U3RyaW5nKFZNKik7CisgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY3JlYXRlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKFZNKiwg
dW5zaWduZWQgY2hhcik7CiAKLSAgICAgICAgdm9pZCBpbml0aWFsaXplKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgSlNTdHJpbmcqJiBzdHJpbmcsIGNvbnN0IGNoYXIqIHZhbHVlKSBjb25zdDsK
KyAgICAgICAgdm9pZCBpbml0aWFsaXplKFZNKiB2bSwgSlNTdHJpbmcqJiBzdHJpbmcsIGNvbnN0
IGNoYXIqIHZhbHVlKSBjb25zdDsKIAogICAgICAgICBKU1N0cmluZyogbV9lbXB0eVN0cmluZzsK
ICNkZWZpbmUgSlNDX0NPTU1PTl9TVFJJTkdTX0FUVFJJQlVURV9ERUNMQVJBVElPTihuYW1lKSBK
U1N0cmluZyogbV8jI25hbWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
cGFyc2VBcnJheVZhbHVlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENs
YXNzSW5mbyBTcGFyc2VBcnJheVZhbHVlTWFwOjpzX2luZm8gPSB7ICJTcGFyc2VBcnJheVZhbHVl
TWFwIiwgMCwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShTcGFyc2VBcnJheVZhbHVlTWFwKSB9
OwogCi1TcGFyc2VBcnJheVZhbHVlTWFwOjpTcGFyc2VBcnJheVZhbHVlTWFwKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKLSAgICA6IEJhc2UoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zcGFyc2VB
cnJheVZhbHVlTWFwU3RydWN0dXJlLmdldCgpKQorU3BhcnNlQXJyYXlWYWx1ZU1hcDo6U3BhcnNl
QXJyYXlWYWx1ZU1hcChWTSYgdm0pCisgICAgOiBCYXNlKHZtLCB2bS5zcGFyc2VBcnJheVZhbHVl
TWFwU3RydWN0dXJlLmdldCgpKQogICAgICwgbV9mbGFncyhOb3JtYWwpCiAgICAgLCBtX3JlcG9y
dGVkQ2FwYWNpdHkoMCkKIHsKQEAgLTUwLDE1ICs1MCwxNSBAQCBTcGFyc2VBcnJheVZhbHVlTWFw
Ojp+U3BhcnNlQXJyYXlWYWx1ZU1hCiB7CiB9CiAKLXZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBTcGFyc2VBcnJh
eVZhbHVlTWFwOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogfQogCi1T
cGFyc2VBcnJheVZhbHVlTWFwKiBTcGFyc2VBcnJheVZhbHVlTWFwOjpjcmVhdGUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQorU3BhcnNlQXJyYXlWYWx1ZU1hcCogU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6Y3JlYXRlKFZNJiB2bSkKIHsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiByZXN1bHQgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTcGFyc2VBcnJheVZhbHVlTWFwPihnbG9iYWxEYXRh
LmhlYXApKSBTcGFyc2VBcnJheVZhbHVlTWFwKGdsb2JhbERhdGEpOwotICAgIHJlc3VsdC0+Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogcmVzdWx0
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3BhcnNlQXJyYXlWYWx1ZU1hcD4odm0uaGVh
cCkpIFNwYXJzZUFycmF5VmFsdWVNYXAodm0pOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24o
dm0pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTY3LDkgKzY3LDkgQEAgdm9pZCBTcGFy
c2VBcnJheVZhbHVlTWFwOjpkZXN0cm95KEpTQ2VsbAogICAgIHN0YXRpY19jYXN0PFNwYXJzZUFy
cmF5VmFsdWVNYXAqPihjZWxsKS0+U3BhcnNlQXJyYXlWYWx1ZU1hcDo6flNwYXJzZUFycmF5VmFs
dWVNYXAoKTsKIH0KIAotU3RydWN0dXJlKiBTcGFyc2VBcnJheVZhbHVlTWFwOjpjcmVhdGVTdHJ1
Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK1N0cnVjdHVyZSogU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCiB7Ci0gICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDb21wb3VuZFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ29tcG91bmRUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8pOwogfQogCiBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTT2JqZWN0KiBhcnJheSwgdW5zaWduZWQgaSkKQEAgLTEx
OCw3ICsxMTgsNyBAQCBib29sIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdChFeGVjCiAg
ICAgfQogCiAgICAgZW50cnkuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7Ci0gICAgZW50cnkuc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOworICAgIGVudHJ5LnNldChleGVjLT52
bSgpLCB0aGlzLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE3Miw3ICsxNzIs
NyBAQCB2b2lkIFNwYXJzZUFycmF5RW50cnk6OnB1dChFeGVjU3RhdGUqIGV4CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBzZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBt
YXAsIHZhbHVlKTsKKyAgICAgICAgc2V0KGV4ZWMtPnZtKCksIG1hcCwgdmFsdWUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
cGFyc2VBcnJheVZhbHVlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY1LDEwICs2NSwxMCBAQCBwcml2YXRlOgogICAgICAgICBMZW5ndGhJc1JlYWRP
bmx5ID0gMiwKICAgICB9OwogCi0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcChKU0dsb2JhbERhdGEm
KTsKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKFZNJik7CiAgICAgflNwYXJzZUFycmF5VmFsdWVN
YXAoKTsKICAgICAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYpOworICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBKU0NlbGw6OlN0cnVjdHVy
ZUZsYWdzOwogCkBAIC03OSwxMyArNzksMTMgQEAgcHVibGljOgogICAgIHR5cGVkZWYgTWFwOjpj
b25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICAgICB0eXBlZGVmIE1hcDo6QWRkUmVzdWx0
IEFkZFJlc3VsdDsKIAotICAgIHN0YXRpYyBTcGFyc2VBcnJheVZhbHVlTWFwKiBjcmVhdGUoSlNH
bG9iYWxEYXRhJik7CisgICAgc3RhdGljIFNwYXJzZUFycmF5VmFsdWVNYXAqIGNyZWF0ZShWTSYp
OwogICAgIAogICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwog
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
cHJvdG90eXBlKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAogICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmljdEV2YWxBY3RpdmF0aW9uLmNwcAko
cmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaWN0
RXZhbEFjdGl2YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIGNvbnN0
IENsYXNzSW5mbyBTdHJpY3RFdmFsQWN0aXZhdGlvbjo6c18KIAogU3RyaWN0RXZhbEFjdGl2YXRp
b246OlN0cmljdEV2YWxBY3RpdmF0aW9uKEV4ZWNTdGF0ZSogZXhlYykKICAgICA6IEJhc2UoCi0g
ICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKSwKKyAgICAgICAgZXhlYy0+dm0oKSwKICAgICAgICAg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5zdHJpY3RFdmFsQWN0aXZhdGlvblN0cnVjdHVy
ZSgpLAogICAgICAgICBleGVjLT5zY29wZSgpCiAgICAgKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaWN0RXZhbEFjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5oCShyZXZpc2lv
biAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpY3RFdmFsQWN0
aXZhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNiArMzcsMTYgQEAgcHVibGljOgogICAg
IHN0YXRpYyBTdHJpY3RFdmFsQWN0aXZhdGlvbiogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYykKICAg
ICB7CiAgICAgICAgIFN0cmljdEV2YWxBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8U3RyaWN0RXZhbEFjdGl2YXRpb24+KCpleGVjLT5oZWFwKCkpKSBT
dHJpY3RFdmFsQWN0aXZhdGlvbihleGVjKTsKLSAgICAgICAgYWN0aXZhdGlvbi0+ZmluaXNoQ3Jl
YXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgYWN0aXZhdGlvbi0+ZmluaXNoQ3Jl
YXRpb24oZXhlYy0+dm0oKSk7CiAgICAgICAgIHJldHVybiBhY3RpdmF0aW9uOwogICAgIH0KIAog
ICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSk7CiAgICAgc3RhdGljIEpTT2JqZWN0KiB0b1RoaXNPYmplY3QoSlNDZWxsKiwgRXhl
Y1N0YXRlKik7CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvdHlwZSkKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0
b3IuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDkgKzU1LDkgQEAg
U3RyaW5nQ29uc3RydWN0b3I6OlN0cmluZ0NvbnN0cnVjdG9yKEpTRwogCiB2b2lkIFN0cmluZ0Nv
bnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFN0cmluZ1Byb3RvdHlw
ZSogc3RyaW5nUHJvdG90eXBlKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmds
b2JhbERhdGEoKSwgc3RyaW5nUHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKTsKLSAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIHN0cmluZ1Byb3RvdHlwZSwgUmVhZE9ubHkgfCBEb250
RW51bSB8IERvbnREZWxldGUpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSks
IFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihleGVjLT52bSgpLCBzdHJpbmdQcm90b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUp
OworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5wcm90b3R5cGUsIHN0cmluZ1Byb3RvdHlwZSwgUmVhZE9ubHkgfCBEb250RW51
bSB8IERvbnREZWxldGUpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZt
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEpLCBSZWFkT25seSB8
IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiB9CiAKIGJvb2wgU3RyaW5nQ29uc3RydWN0b3I6Omdl
dE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90ICZzbG90KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAx
NDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0MCw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAg
ICAgfQogCiAgICAgcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RyaW5nT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdPYmplY3QuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MiwxNiArMzIsMTYgQEAgQVNTRVJUX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoU3RyaW5nT2JqZQog
CiBjb25zdCBDbGFzc0luZm8gU3RyaW5nT2JqZWN0OjpzX2luZm8gPSB7ICJTdHJpbmciLCAmSlNX
cmFwcGVyT2JqZWN0OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoU3RyaW5nT2Jq
ZWN0KSB9OwogCi1TdHJpbmdPYmplY3Q6OlN0cmluZ09iamVjdChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogSlNXcmFwcGVyT2JqZWN0KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSkKK1N0cmluZ09iamVjdDo6U3RyaW5nT2JqZWN0KFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBKU1dyYXBwZXJPYmplY3Qodm0sIHN0cnVjdHVyZSkK
IHsKIH0KIAotdm9pZCBTdHJpbmdPYmplY3Q6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNTdHJpbmcqIHN0cmluZykKK3ZvaWQgU3RyaW5nT2JqZWN0OjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIEpTU3RyaW5nKiBzdHJpbmcpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFT
U0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgc2V0SW50ZXJuYWxWYWx1ZShnbG9iYWxEYXRh
LCBzdHJpbmcpOworICAgIHNldEludGVybmFsVmFsdWUodm0sIHN0cmluZyk7CiB9CiAKIGJvb2wg
U3RyaW5nT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAg
LTE2Niw3ICsxNjYsNyBAQCB2b2lkIFN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
CiBTdHJpbmdPYmplY3QqIGNvbnN0cnVjdFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgc3RyaW5nKQogewogICAgIFN0cmluZ09iamVj
dCogb2JqZWN0ID0gU3RyaW5nT2JqZWN0OjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT5zdHJp
bmdPYmplY3RTdHJ1Y3R1cmUoKSk7Ci0gICAgb2JqZWN0LT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgc3RyaW5nKTsKKyAgICBvYmplY3QtPnNldEludGVybmFsVmFsdWUoZXhl
Yy0+dm0oKSwgc3RyaW5nKTsKICAgICByZXR1cm4gb2JqZWN0OwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkocmV2aXNpb24gMTQ4NjM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDE0ICszMywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3Rh
dGljIFN0cmluZ09iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBqc0VtcHR5
U3RyaW5nKGV4ZWMpOwotICAgICAgICAgICAgU3RyaW5nT2JqZWN0KiBvYmplY3QgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJpbmdPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBTdHJpbmdP
YmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpOyAgCi0gICAgICAgICAgICBvYmpl
Y3QtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RyaW5nKTsKKyAgICAgICAg
ICAgIFN0cmluZ09iamVjdCogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3Ry
aW5nT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgU3RyaW5nT2JqZWN0KGV4ZWMtPnZtKCksIHN0cnVj
dHVyZSk7ICAKKyAgICAgICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwg
c3RyaW5nKTsKICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgIH0KICAgICAgICAg
c3RhdGljIFN0cmluZ09iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTU3RyaW5nKiBzdHJpbmcpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmlu
Z09iamVjdCogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RyaW5nT2JqZWN0
PigqZXhlYy0+aGVhcCgpKSkgU3RyaW5nT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0
dXJlKTsKLSAgICAgICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0
YSgpLCBzdHJpbmcpOworICAgICAgICAgICAgU3RyaW5nT2JqZWN0KiBvYmplY3QgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJpbmdPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBTdHJpbmdP
YmplY3QoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIG9iamVjdC0+ZmluaXNo
Q3JlYXRpb24oZXhlYy0+dm0oKSwgc3RyaW5nKTsKICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7
CiAgICAgICAgIH0KICAgICAgICAgc3RhdGljIFN0cmluZ09iamVjdCogY3JlYXRlKEV4ZWNTdGF0
ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKQEAgLTYxLDE1ICs2MSwxNSBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBKU1N0cmluZyogaW50ZXJuYWxWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIGFzU3RyaW5nKEpTV3JhcHBlck9iamVjdDo6aW50ZXJuYWxWYWx1ZSgpKTt9CiAKLSAg
ICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiwgSlNTdHJpbmcqKTsKKyAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTU3RyaW5n
Kik7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwg
SlNXcmFwcGVyT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgU3RyaW5nT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOworICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBTdHJpbmdPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB9OwogCiAg
ICAgU3RyaW5nT2JqZWN0KiBhc1N0cmluZ09iamVjdChKU1ZhbHVlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNp
b24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsMTUgKzg2LDE1IEBAIGNvbnN0IENsYXNzSW5m
byBTdHJpbmdQcm90b3R5cGU6OnNfaW5mbyAKIAogLy8gRUNNQSAxNS41LjQKIFN0cmluZ1Byb3Rv
dHlwZTo6U3RyaW5nUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCi0gICAgOiBTdHJpbmdPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpCisg
ICAgOiBTdHJpbmdPYmplY3QoZXhlYy0+dm0oKSwgc3RydWN0dXJlKQogewogfQogCiB2b2lkIFN0
cmluZ1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogbmFtZUFuZE1lc3NhZ2UpCiB7Ci0gICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgCi0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwg
bmFtZUFuZE1lc3NhZ2UpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBuYW1lQW5kTWVz
c2FnZSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIAogICAgIEpTQ19OQVRJVkVf
SU5UUklOU0lDX0ZVTkNUSU9OKCJ0b1N0cmluZyIsIHN0cmluZ1Byb3RvRnVuY1RvU3RyaW5nLCBE
b250RW51bSwgMCwgU3RyaW5nUHJvdG90eXBlVmFsdWVPZkludHJpbnNpYyk7CkBAIC0xMzQsNyAr
MTM0LDcgQEAgdm9pZCBTdHJpbmdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKEV4ZQogICAgIEpT
Q19OQVRJVkVfRlVOQ1RJT04oInRyaW1SaWdodCIsIHN0cmluZ1Byb3RvRnVuY1RyaW1SaWdodCwg
RG9udEVudW0sIDApOwogCiAgICAgLy8gVGhlIGNvbnN0cnVjdG9yIHdpbGwgYmUgYWRkZWQgbGF0
ZXIsIGFmdGVyIFN0cmluZ0NvbnN0cnVjdG9yIGhhcyBiZWVuIGJ1aWx0Ci0gICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkubGVuZ3RoLCBqc051bWJlcigwKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0p
OworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDApLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBE
b250RW51bSk7CiB9CiAKIFN0cmluZ1Byb3RvdHlwZSogU3RyaW5nUHJvdG90eXBlOjpjcmVhdGUo
RXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKQEAgLTQwNSwxMiArNDA1LDEyIEBAIHN0YXRpYyBORVZFUl9JTkxJTkUgRW5j
b2RlZEpTVmFsdWUgcmVtb3YKICAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uID0gMDsKIAogICAg
IFZlY3RvcjxTdHJpbmdSYW5nZSwgMTY+IHNvdXJjZVJhbmdlczsKLSAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwogICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9IGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0b3IoKTsKICAgICB1bnNpZ25lZCBz
b3VyY2VMZW4gPSBzb3VyY2UubGVuZ3RoKCk7CiAKICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAg
ICBNYXRjaFJlc3VsdCByZXN1bHQgPSByZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9ybU1hdGNoKCpn
bG9iYWxEYXRhLCByZWdFeHAsIHN0cmluZywgc291cmNlLCBzdGFydFBvc2l0aW9uKTsKKyAgICAg
ICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRjaCgq
dm0sIHJlZ0V4cCwgc3RyaW5nLCBzb3VyY2UsIHN0YXJ0UG9zaXRpb24pOwogICAgICAgICBpZiAo
IXJlc3VsdCkKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC00ODAsMTEgKzQ4MCwxMSBAQCBzdGF0
aWMgTkVWRVJfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhCiAgICAgICAgIENhY2hlZENhbGwg
Y2FjaGVkQ2FsbChleGVjLCBmdW5jLCBhcmdDb3VudCk7CiAgICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkp
OwotICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgp
OworICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICAgICAgaWYgKHNvdXJjZS5pczhC
aXQoKSkgewogICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICBpbnQq
IG92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gcmVnRXhwQ29u
c3RydWN0b3ItPnBlcmZvcm1NYXRjaCgqZ2xvYmFsRGF0YSwgcmVnRXhwLCBzdHJpbmcsIHNvdXJj
ZSwgc3RhcnRQb3NpdGlvbiwgJm92ZWN0b3IpOworICAgICAgICAgICAgICAgIE1hdGNoUmVzdWx0
IHJlc3VsdCA9IHJlZ0V4cENvbnN0cnVjdG9yLT5wZXJmb3JtTWF0Y2goKnZtLCByZWdFeHAsIHN0
cmluZywgc291cmNlLCBzdGFydFBvc2l0aW9uLCAmb3ZlY3Rvcik7CiAgICAgICAgICAgICAgICAg
aWYgKCFyZXN1bHQpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCkBAIC00OTgsNyArNDk4
LDcgQEAgc3RhdGljIE5FVkVSX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYQogICAgICAgICAg
ICAgICAgICAgICBpZiAobWF0Y2hTdGFydCA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICBj
YWNoZWRDYWxsLnNldEFyZ3VtZW50KGksIGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50
KGksIGpzU3Vic3RyaW5nOChnbG9iYWxEYXRhLCBzb3VyY2UsIG1hdGNoU3RhcnQsIG1hdGNoTGVu
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KGksIGpz
U3Vic3RyaW5nOCh2bSwgc291cmNlLCBtYXRjaFN0YXJ0LCBtYXRjaExlbikpOwogICAgICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoaSsrLCBq
c051bWJlcihyZXN1bHQuc3RhcnQpKTsKQEAgLTUyMyw3ICs1MjMsNyBAQCBzdGF0aWMgTkVWRVJf
SU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgIGludCogb3ZlY3RvcjsKLSAgICAgICAg
ICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSByZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9ybU1h
dGNoKCpnbG9iYWxEYXRhLCByZWdFeHAsIHN0cmluZywgc291cmNlLCBzdGFydFBvc2l0aW9uLCAm
b3ZlY3Rvcik7CisgICAgICAgICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gcmVnRXhwQ29u
c3RydWN0b3ItPnBlcmZvcm1NYXRjaCgqdm0sIHJlZ0V4cCwgc3RyaW5nLCBzb3VyY2UsIHN0YXJ0
UG9zaXRpb24sICZvdmVjdG9yKTsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTUzNyw3ICs1MzcsNyBAQCBzdGF0aWMgTkVWRVJf
SU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhCiAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRj
aFN0YXJ0IDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1l
bnQoaSwganNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoaSwganNTdWJzdHJpbmcoZ2xv
YmFsRGF0YSwgc291cmNlLCBtYXRjaFN0YXJ0LCBtYXRjaExlbikpOworICAgICAgICAgICAgICAg
ICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudChpLCBqc1N1YnN0cmluZyh2bSwgc291cmNl
LCBtYXRjaFN0YXJ0LCBtYXRjaExlbikpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoaSsrLCBqc051bWJlcihyZXN1bHQuc3RhcnQp
KTsKQEAgLTU2MSwxMCArNTYxLDEwIEBAIHN0YXRpYyBORVZFUl9JTkxJTkUgRW5jb2RlZEpTVmFs
dWUgcmVwbGEKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgICAgICBkbyB7CiAgICAgICAgICAgICBpbnQqIG92
ZWN0b3I7Ci0gICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSByZWdFeHBDb25zdHJ1Y3Rv
ci0+cGVyZm9ybU1hdGNoKCpnbG9iYWxEYXRhLCByZWdFeHAsIHN0cmluZywgc291cmNlLCBzdGFy
dFBvc2l0aW9uLCAmb3ZlY3Rvcik7CisgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBy
ZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9ybU1hdGNoKCp2bSwgcmVnRXhwLCBzdHJpbmcsIHNvdXJj
ZSwgc3RhcnRQb3NpdGlvbiwgJm92ZWN0b3IpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQpCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTgxMCw3ICs4MTAsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMpOwogICAgIEpTU3RyaW5nKiBzdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhl
Yyk7CiAgICAgU3RyaW5nIHMgPSBzdHJpbmctPnZhbHVlKGV4ZWMpOwotICAgIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAKQEAgLTgzMiwx
MiArODMyLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAg
ICAgICAgICogIHJlcGxhY2VkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbiBuZXcg
UmVnRXhwKHJlZ2V4cCkuCiAgICAgICAgICAqICBQZXIgRUNNQSAxNS4xMC40LjEsIGlmIGEwIGlz
IHVuZGVmaW5lZCBzdWJzdGl0dXRlIHRoZSBlbXB0eSBzdHJpbmcuCiAgICAgICAgICAqLwotICAg
ICAgICByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGEwLmlzVW5k
ZWZpbmVkKCkgPyBTdHJpbmcoIiIpIDogYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCBO
b0ZsYWdzKTsKKyAgICAgICAgcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+dm0oKSwgYTAu
aXNVbmRlZmluZWQoKSA/IFN0cmluZygiIikgOiBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YyksIE5vRmxhZ3MpOwogICAgICAgICBpZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKQogICAgICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCByZWdF
eHAtPmVycm9yTWVzc2FnZSgpKSk7CiAgICAgfQogICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdF
eHBDb25zdHJ1Y3RvciA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3Ry
dWN0b3IoKTsKLSAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSByZWdFeHBDb25zdHJ1Y3Rvci0+cGVy
Zm9ybU1hdGNoKCpnbG9iYWxEYXRhLCByZWdFeHAsIHN0cmluZywgcywgMCk7CisgICAgTWF0Y2hS
ZXN1bHQgcmVzdWx0ID0gcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRjaCgqdm0sIHJlZ0V4
cCwgc3RyaW5nLCBzLCAwKTsKICAgICAvLyBjYXNlIHdpdGhvdXQgJ2cnIGZsYWcgaXMgaGFuZGxl
ZCBsaWtlIFJlZ0V4cC5wcm90b3R5cGUuZXhlYwogICAgIGlmICghZ2xvYmFsKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCA/IFJlZ0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRl
KGV4ZWMsIHN0cmluZywgcmVnRXhwLCByZXN1bHQpIDoganNOdWxsKCkpOwpAQCAtODUwLDcgKzg1
MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAg
bGlzdC5hcHBlbmQoanNTdWJzdHJpbmcoZXhlYywgcywgcmVzdWx0LnN0YXJ0LCBsZW5ndGgpKTsK
ICAgICAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgICAgICArK2VuZDsKLSAgICAgICAgcmVzdWx0
ID0gcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRjaCgqZ2xvYmFsRGF0YSwgcmVnRXhwLCBz
dHJpbmcsIHMsIGVuZCk7CisgICAgICAgIHJlc3VsdCA9IHJlZ0V4cENvbnN0cnVjdG9yLT5wZXJm
b3JtTWF0Y2goKnZtLCByZWdFeHAsIHN0cmluZywgcywgZW5kKTsKICAgICB9CiAgICAgaWYgKGxp
c3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIGlmIHRoZXJlIGFyZSBubyBtYXRjaGVzIGF0IGFs
bCwgaXQncyBpbXBvcnRhbnQgdG8gcmV0dXJuCkBAIC04NjksNyArODY5LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjKTsKICAgICBKU1N0cmluZyogc3RyaW5nID0gdGhpc1ZhbHVlLnRvU3RyaW5n
KGV4ZWMpOwogICAgIFN0cmluZyBzID0gc3RyaW5nLT52YWx1ZShleGVjKTsKLSAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogCkBAIC04
ODMsMTIgKzg4MywxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
CiAgICAgICAgICAqICByZXBsYWNlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24g
bmV3IFJlZ0V4cChyZWdleHApLgogICAgICAgICAgKiAgUGVyIEVDTUEgMTUuMTAuNC4xLCBpZiBh
MCBpcyB1bmRlZmluZWQgc3Vic3RpdHV0ZSB0aGUgZW1wdHkgc3RyaW5nLgogICAgICAgICAgKi8K
LSAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhMC5pc1Vu
ZGVmaW5lZCgpID8gU3RyaW5nKCIiKSA6IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwg
Tm9GbGFncyk7CisgICAgICAgIHJlZyA9IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMtPnZtKCksIGEwLmlz
VW5kZWZpbmVkKCkgPyBTdHJpbmcoIiIpIDogYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
LCBOb0ZsYWdzKTsKICAgICAgICAgaWYgKCFyZWctPmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgcmVnLT5lcnJv
ck1lc3NhZ2UoKSkpOwogICAgIH0KICAgICBSZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhwQ29uc3Ry
dWN0b3IgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cENvbnN0cnVjdG9yKCk7
Ci0gICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRj
aCgqZ2xvYmFsRGF0YSwgcmVnLCBzdHJpbmcsIHMsIDApOworICAgIE1hdGNoUmVzdWx0IHJlc3Vs
dCA9IHJlZ0V4cENvbnN0cnVjdG9yLT5wZXJmb3JtTWF0Y2goKnZtLCByZWcsIHN0cmluZywgcywg
MCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQgPyBqc051bWJlcihyZXN1bHQu
c3RhcnQpIDoganNOdW1iZXIoLTEpKTsKIH0KIApAQCAtOTc4LDcgKzk3OCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAvLyAgICBvdGhlcndpc2UgbGV0
IFIgPSBUb1N0cmluZyhzZXBhcmF0b3IpLgogICAgIEpTVmFsdWUgc2VwYXJhdG9yVmFsdWUgPSBl
eGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoc2VwYXJhdG9yVmFsdWUuaW5oZXJpdHMoJlJlZ0V4
cE9iamVjdDo6c19pbmZvKSkgewotICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAm
ZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICAg
ICAgUmVnRXhwKiByZWcgPSBhc1JlZ0V4cE9iamVjdChzZXBhcmF0b3JWYWx1ZSktPnJlZ0V4cCgp
OwogCiAgICAgICAgIC8vIDkuIElmIGxpbSA9PSAwLCByZXR1cm4gQS4KQEAgLTEwMDEsNyArMTAw
MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAg
ICAgIC8vIGMuIENhbGwgdGhlIFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qg
b2YgQSB3aXRoIGFyZ3VtZW50cyAiMCIsCiAgICAgICAgICAgICAvLyAgICBQcm9wZXJ0eSBEZXNj
cmlwdG9yIHtbW1ZhbHVlXV06IFMsIFtbV3JpdGFibGVdXTogdHJ1ZSwgW1tFbnVtZXJhYmxlXV06
IHRydWUsIFtbQ29uZmlndXJhYmxlXV06IHRydWV9LCBhbmQgZmFsc2UuCiAgICAgICAgICAgICAv
LyBkLiBSZXR1cm4gQS4KLSAgICAgICAgICAgIGlmICghcmVnLT5tYXRjaCgqZ2xvYmFsRGF0YSwg
aW5wdXQsIDApKQorICAgICAgICAgICAgaWYgKCFyZWctPm1hdGNoKCp2bSwgaW5wdXQsIDApKQog
ICAgICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgMCwganNTdHJpbmdX
aXRoUmV1c2UoZXhlYywgdGhpc1ZhbHVlLCBpbnB1dCkpOwogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgICAgICB9CkBAIC0xMDEyLDcgKzEwMTIsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIHdoaWxlICht
YXRjaFBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkpIHsKICAgICAgICAgICAgIC8vIGEuIENhbGwg
U3BsaXRNYXRjaChTLCBxLCBSKSBhbmQgbGV0IHogYmUgaXRzIE1hdGNoUmVzdWx0IHJlc3VsdC4K
ICAgICAgICAgICAgIFZlY3RvcjxpbnQsIDMyPiBvdmVjdG9yOwotICAgICAgICAgICAgaW50IG1w
b3MgPSByZWctPm1hdGNoKCpnbG9iYWxEYXRhLCBpbnB1dCwgbWF0Y2hQb3NpdGlvbiwgb3ZlY3Rv
cik7CisgICAgICAgICAgICBpbnQgbXBvcyA9IHJlZy0+bWF0Y2goKnZtLCBpbnB1dCwgbWF0Y2hQ
b3NpdGlvbiwgb3ZlY3Rvcik7CiAgICAgICAgICAgICAvLyBiLiBJZiB6IGlzIGZhaWx1cmUsIHRo
ZW4gbGV0IHEgPSBxICsgMS4KICAgICAgICAgICAgIGlmIChtcG9zIDwgMCkKICAgICAgICAgICAg
ICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1By
b3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cmluZ1Byb3RvdHlwZS5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOSArMzYs
OSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgU3RyaW5nUHJvdG90eXBlKiBj
cmVhdGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAotICAgICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAg
ICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1JlY3Vyc2lvbkNoZWNr
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdS
ZWN1cnNpb25DaGVja2VyLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cmluZ1JlY3Vyc2lvbkNoZWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NTIsNyArNTIsNyBAQCBpbmxpbmUgSlNWYWx1ZSBTdHJpbmdSZWN1cnNpb25DaGVja2VyOjpwCiAg
ICAgY29uc3QgU3RhY2tCb3VuZHMmIG5hdGl2ZVN0YWNrID0gd3RmVGhyZWFkRGF0YSgpLnN0YWNr
KCk7CiAgICAgaWYgKCFuYXRpdmVTdGFjay5pc1NhZmVUb1JlY3Vyc2UoKSkKICAgICAgICAgcmV0
dXJuIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKCk7Ci0gICAgYm9vbCBhbHJlYWR5VmlzaXRlZCA9
ICFtX2V4ZWMtPmdsb2JhbERhdGEoKS5zdHJpbmdSZWN1cnNpb25DaGVja1Zpc2l0ZWRPYmplY3Rz
LmFkZChtX3RoaXNPYmplY3QpLmlzTmV3RW50cnk7CisgICAgYm9vbCBhbHJlYWR5VmlzaXRlZCA9
ICFtX2V4ZWMtPnZtKCkuc3RyaW5nUmVjdXJzaW9uQ2hlY2tWaXNpdGVkT2JqZWN0cy5hZGQobV90
aGlzT2JqZWN0KS5pc05ld0VudHJ5OwogICAgIGlmIChhbHJlYWR5VmlzaXRlZCkKICAgICAgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7IC8vIFJldHVybiBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgaW5m
aW5pdGUgcmVjdXJzaW9uLgogICAgIHJldHVybiBKU1ZhbHVlKCk7IC8vIEluZGljYXRlIHN1Y2Nl
c3MuCkBAIC03NCw4ICs3NCw4IEBAIGlubGluZSBTdHJpbmdSZWN1cnNpb25DaGVja2VyOjp+U3Ry
aW5nUmUKIHsKICAgICBpZiAobV9lYXJseVJldHVyblZhbHVlKQogICAgICAgICByZXR1cm47Ci0g
ICAgQVNTRVJUKG1fZXhlYy0+Z2xvYmFsRGF0YSgpLnN0cmluZ1JlY3Vyc2lvbkNoZWNrVmlzaXRl
ZE9iamVjdHMuY29udGFpbnMobV90aGlzT2JqZWN0KSk7Ci0gICAgbV9leGVjLT5nbG9iYWxEYXRh
KCkuc3RyaW5nUmVjdXJzaW9uQ2hlY2tWaXNpdGVkT2JqZWN0cy5yZW1vdmUobV90aGlzT2JqZWN0
KTsKKyAgICBBU1NFUlQobV9leGVjLT52bSgpLnN0cmluZ1JlY3Vyc2lvbkNoZWNrVmlzaXRlZE9i
amVjdHMuY29udGFpbnMobV90aGlzT2JqZWN0KSk7CisgICAgbV9leGVjLT52bSgpLnN0cmluZ1Jl
Y3Vyc2lvbkNoZWNrVmlzaXRlZE9iamVjdHMucmVtb3ZlKG1fdGhpc09iamVjdCk7CiB9CiAKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2
aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsMjEgKzgxLDIxIEBAIGlubGluZSBTdHJ1Y3R1cmUq
IFN0cnVjdHVyZVRyYW5zaXRpb25UYWIKICAgICByZXR1cm4gbWFwKCktPmdldChtYWtlX3BhaXIo
cmVwLCBhdHRyaWJ1dGVzKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0cnVjdHVyZVRyYW5zaXRpb25U
YWJsZTo6YWRkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmFkZChWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogewogICAgIGlmIChpc1VzaW5nU2luZ2xlU2xvdCgpKSB7CiAgICAg
ICAgIFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uID0gc2luZ2xlVHJhbnNpdGlvbigpOwog
CiAgICAgICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgZmlyc3QgdHJhbnNpdGlvbiBiZWluZyBhZGRl
ZC4KICAgICAgICAgaWYgKCFleGlzdGluZ1RyYW5zaXRpb24pIHsKLSAgICAgICAgICAgIHNldFNp
bmdsZVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIHNldFNp
bmdsZVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAogICAgICAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIHNlY29uZCB0cmFuc2l0aW9uIGJl
aW5nIGFkZGVkCiAgICAgICAgIC8vIChvciB0aGUgZmlyc3QgdHJhbnNpdGlvbiBiZWluZyBkZXNw
ZWNpZmllZCEpCiAgICAgICAgIHNldE1hcChuZXcgVHJhbnNpdGlvbk1hcCgpKTsKLSAgICAgICAg
YWRkKGdsb2JhbERhdGEsIGV4aXN0aW5nVHJhbnNpdGlvbik7CisgICAgICAgIGFkZCh2bSwgZXhp
c3RpbmdUcmFuc2l0aW9uKTsKICAgICB9CiAKICAgICAvLyBBZGQgdGhlIHN0cnVjdHVyZSB0byB0
aGUgbWFwLgpAQCAtMTUxLDEwICsxNTEsMTAgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0
aWNzKCkKICNlbmRpZgogfQogCi1TdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
LCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBJ
bmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSkKLSAgICA6
IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkK
LSAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCwgV3Jp
dGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0Pjo6TWF5QmVOdWxsKQotICAgICwgbV9wcm90b3R5cGUo
Z2xvYmFsRGF0YSwgdGhpcywgcHJvdG90eXBlKQorU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3Qg
VHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgSW5kZXhpbmdU
eXBlIGluZGV4aW5nVHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpCisgICAgOiBKU0NlbGwo
dm0sIHZtLnN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1fZ2xvYmFsT2JqZWN0KHZt
LCB0aGlzLCBnbG9iYWxPYmplY3QsIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD46Ok1heUJl
TnVsbCkKKyAgICAsIG1fcHJvdG90eXBlKHZtLCB0aGlzLCBwcm90b3R5cGUpCiAgICAgLCBtX2Ns
YXNzSW5mbyhjbGFzc0luZm8pCiAgICAgLCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0KEluaXRp
YWxpemVkV2F0Y2hpbmcpCiAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQpAQCAtMTc5LDkg
KzE3OSw5IEBAIFN0cnVjdHVyZTo6U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmEKIAogY29u
c3QgQ2xhc3NJbmZvIFN0cnVjdHVyZTo6c19pbmZvID0geyAiU3RydWN0dXJlIiwgMCwgMCwgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShTdHJ1Y3R1cmUpIH07CiAKLVN0cnVjdHVyZTo6U3RydWN0dXJl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK1N0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSkK
ICAgICA6IEpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2VsbCkKLSAgICAsIG1fcHJvdG90eXBlKGdsb2Jh
bERhdGEsIHRoaXMsIGpzTnVsbCgpKQorICAgICwgbV9wcm90b3R5cGUodm0sIHRoaXMsIGpzTnVs
bCgpKQogICAgICwgbV9jbGFzc0luZm8oJnNfaW5mbykKICAgICAsIG1fdHJhbnNpdGlvbldhdGNo
cG9pbnRTZXQoSW5pdGlhbGl6ZWRXYXRjaGluZykKICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZz
ZXQpCkBAIC0yMDEsOSArMjAxLDkgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRh
JiBnbG9iYQogewogfQogCi1TdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIGNvbnN0IFN0cnVjdHVyZSogcHJldmlvdXMpCi0gICAgOiBKU0NlbGwoZ2xvYmFsRGF0
YSwgZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgLCBtX3Byb3RvdHlw
ZShnbG9iYWxEYXRhLCB0aGlzLCBwcmV2aW91cy0+c3RvcmVkUHJvdG90eXBlKCkpCitTdHJ1Y3R1
cmU6OlN0cnVjdHVyZShWTSYgdm0sIGNvbnN0IFN0cnVjdHVyZSogcHJldmlvdXMpCisgICAgOiBK
U0NlbGwodm0sIHZtLnN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1fcHJvdG90eXBl
KHZtLCB0aGlzLCBwcmV2aW91cy0+c3RvcmVkUHJvdG90eXBlKCkpCiAgICAgLCBtX2NsYXNzSW5m
byhwcmV2aW91cy0+bV9jbGFzc0luZm8pCiAgICAgLCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0
KEluaXRpYWxpemVkV2F0Y2hpbmcpCiAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQpAQCAt
MjIyLDEzICsyMjIsMTMgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9i
YQogICAgICwgbV9zdGF0aWNGdW5jdGlvblJlaWZpZWQocHJldmlvdXMtPm1fc3RhdGljRnVuY3Rp
b25SZWlmaWVkKQogewogICAgIGlmIChwcmV2aW91cy0+dHlwZUluZm8oKS5zdHJ1Y3R1cmVIYXNS
YXJlRGF0YSgpICYmIHByZXZpb3VzLT5yYXJlRGF0YSgpLT5uZWVkc0Nsb25pbmcoKSkKLSAgICAg
ICAgY2xvbmVSYXJlRGF0YUZyb20oZ2xvYmFsRGF0YSwgcHJldmlvdXMpOworICAgICAgICBjbG9u
ZVJhcmVEYXRhRnJvbSh2bSwgcHJldmlvdXMpOwogICAgIGVsc2UgaWYgKHByZXZpb3VzLT5wcmV2
aW91c0lEKCkpCi0gICAgICAgIG1fcHJldmlvdXNPclJhcmVEYXRhLnNldChnbG9iYWxEYXRhLCB0
aGlzLCBwcmV2aW91cy0+cHJldmlvdXNJRCgpKTsKKyAgICAgICAgbV9wcmV2aW91c09yUmFyZURh
dGEuc2V0KHZtLCB0aGlzLCBwcmV2aW91cy0+cHJldmlvdXNJRCgpKTsKIAogICAgIHByZXZpb3Vz
LT5ub3RpZnlUcmFuc2l0aW9uRnJvbVRoaXNTdHJ1Y3R1cmUoKTsKICAgICBpZiAocHJldmlvdXMt
Pm1fZ2xvYmFsT2JqZWN0KQotICAgICAgICBtX2dsb2JhbE9iamVjdC5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgcHJldmlvdXMtPm1fZ2xvYmFsT2JqZWN0LmdldCgpKTsKKyAgICAgICAgbV9nbG9iYWxP
YmplY3Quc2V0KHZtLCB0aGlzLCBwcmV2aW91cy0+bV9nbG9iYWxPYmplY3QuZ2V0KCkpOwogfQog
CiB2b2lkIFN0cnVjdHVyZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC0yMzYsNyArMjM2LDcg
QEAgdm9pZCBTdHJ1Y3R1cmU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogICAgIHN0YXRpY19jYXN0
PFN0cnVjdHVyZSo+KGNlbGwpLT5TdHJ1Y3R1cmU6On5TdHJ1Y3R1cmUoKTsKIH0KIAotdm9pZCBT
dHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KQordm9pZCBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXAoVk0mIHZtKQogewogICAg
IEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7CiAgICAgQVNTRVJU
KCFwcm9wZXJ0eVRhYmxlKCkpOwpAQCAtMjUyLDcgKzI1Miw3IEBAIHZvaWQgU3RydWN0dXJlOjpt
YXRlcmlhbGl6ZVByb3BlcnR5TWFwKEoKICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnBy
b3BlcnR5VGFibGUoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+cHJldmlvdXNJ
RCgpKTsKIAotICAgICAgICAgICAgcHJvcGVydHlUYWJsZSgpLnNldChnbG9iYWxEYXRhLCB0aGlz
LCBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGUoKS0+Y29weShnbG9iYWxEYXRhLCAwLCBudW1iZXJP
ZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpKTsKKyAgICAg
ICAgICAgIHByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRoaXMsIHN0cnVjdHVyZS0+cHJvcGVydHlU
YWJsZSgpLT5jb3B5KHZtLCAwLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwg
bV9pbmxpbmVDYXBhY2l0eSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAg
LTI2MCwxMyArMjYwLDEzIEBAIHZvaWQgU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFw
KEoKICAgICB9CiAKICAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgY3JlYXRlUHJv
cGVydHlNYXAoZ2xvYmFsRGF0YSwgbnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQs
IG1faW5saW5lQ2FwYWNpdHkpKTsKKyAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAodm0sIG51bWJl
ck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CiAKICAg
ICBmb3IgKHB0cmRpZmZfdCBpID0gc3RydWN0dXJlcy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkg
ewogICAgICAgICBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVzW2ldOwogICAgICAgICBpZiAoIXN0cnVj
dHVyZS0+bV9uYW1lSW5QcmV2aW91cykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBQ
cm9wZXJ0eU1hcEVudHJ5IGVudHJ5KGdsb2JhbERhdGEsIHRoaXMsIHN0cnVjdHVyZS0+bV9uYW1l
SW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5tX29mZnNldCwgc3RydWN0dXJlLT5tX2F0dHJp
YnV0ZXNJblByZXZpb3VzLCBzdHJ1Y3R1cmUtPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMuZ2V0
KCkpOworICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5KHZtLCB0aGlzLCBzdHJ1Y3R1cmUt
Pm1fbmFtZUluUHJldmlvdXMuZ2V0KCksIHN0cnVjdHVyZS0+bV9vZmZzZXQsIHN0cnVjdHVyZS0+
bV9hdHRyaWJ1dGVzSW5QcmV2aW91cywgc3RydWN0dXJlLT5tX3NwZWNpZmljVmFsdWVJblByZXZp
b3VzLmdldCgpKTsKICAgICAgICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoZW50cnksIG1fb2Zmc2V0
LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE11c3ROb3RDaGFuZ2UpOwogICAgIH0KICAg
ICAKQEAgLTI4NSwxMSArMjg1LDExIEBAIHNpemVfdCBTdHJ1Y3R1cmU6OnN1Z2dlc3RlZE5ld091
dE9mTGluZVMKICAgICByZXR1cm4gbmV4dE91dE9mTGluZVN0b3JhZ2VDYXBhY2l0eShvdXRPZkxp
bmVDYXBhY2l0eSgpKTsKIH0KICAKLXZvaWQgU3RydWN0dXJlOjpkZXNwZWNpZnlEaWN0aW9uYXJ5
RnVuY3Rpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKQordm9pZCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeURpY3Rpb25hcnlGdW5jdGlvbihWTSYgdm0s
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgU3RyaW5nSW1wbCogcmVwID0gcHJv
cGVydHlOYW1lLnVpZCgpOwogCi0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5
KGdsb2JhbERhdGEpOworICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSk7
CiAKICAgICBBU1NFUlQoaXNEaWN0aW9uYXJ5KCkpOwogICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxl
KCkpOwpAQCAtMzQ0LDcgKzM0NCw3IEBAIE5vblByb3BlcnR5VHJhbnNpdGlvbiBTdHJ1Y3R1cmU6
OnN1Z2dlc3QKICAgICByZXR1cm4gQWxsb2NhdGVBcnJheVN0b3JhZ2U7CiB9CiAKLVN0cnVjdHVy
ZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5z
aWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYg
b2Zmc2V0KQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbihWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3BlcnR5T2Zmc2V0JiBv
ZmZzZXQpCiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBhIHNwZWNpZmljIGZ1bmN0aW9uLCB3ZSBtYXkg
aGF2ZSBnb3QgdG8gdGhpcyBwb2ludCBpZiB0aGVyZSBpcwogICAgIC8vIGFscmVhZHkgYSB0cmFu
c2l0aW9uIHdpdGggdGhlIGNvcnJlY3QgcHJvcGVydHkgbmFtZSBhbmQgYXR0cmlidXRlcywgYnV0
CkBAIC0zNjQsMzYgKzM2NCwzNiBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlU
cmFuc2l0CiAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwogCiAgICAgaWYgKHN0cnVjdHVyZS0+
dHJhbnNpdGlvbkNvdW50KCkgPiBzX21heFRyYW5zaXRpb25MZW5ndGgpIHsKLSAgICAgICAgU3Ry
dWN0dXJlKiB0cmFuc2l0aW9uID0gdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUpOworICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSB0b0Nh
Y2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUpOwogICAgICAgICBBU1NF
UlQoc3RydWN0dXJlICE9IHRyYW5zaXRpb24pOwotICAgICAgICBvZmZzZXQgPSB0cmFuc2l0aW9u
LT5wdXRTcGVjaWZpY1ZhbHVlKGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywg
c3BlY2lmaWNWYWx1ZSk7CisgICAgICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPnB1dFNwZWNpZmlj
VmFsdWUodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CiAgICAg
ICAgIHJldHVybiB0cmFuc2l0aW9uOwogICAgIH0KICAgICAKLSAgICBTdHJ1Y3R1cmUqIHRyYW5z
aXRpb24gPSBjcmVhdGUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIHRy
YW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAKLSAgICB0cmFuc2l0aW9uLT5tX2Nh
Y2hlZFByb3RvdHlwZUNoYWluLnNldE1heUJlTnVsbChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBz
dHJ1Y3R1cmUtPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uZ2V0KCkpOwotICAgIHRyYW5zaXRpb24t
PnNldFByZXZpb3VzSUQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlKTsKKyAgICB0
cmFuc2l0aW9uLT5tX2NhY2hlZFByb3RvdHlwZUNoYWluLnNldE1heUJlTnVsbCh2bSwgdHJhbnNp
dGlvbiwgc3RydWN0dXJlLT5tX2NhY2hlZFByb3RvdHlwZUNoYWluLmdldCgpKTsKKyAgICB0cmFu
c2l0aW9uLT5zZXRQcmV2aW91c0lEKHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUpOwogICAgIHRy
YW5zaXRpb24tPm1fbmFtZUluUHJldmlvdXMgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CiAgICAgdHJh
bnNpdGlvbi0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA9IGF0dHJpYnV0ZXM7Ci0gICAgdHJhbnNp
dGlvbi0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cy5zZXRNYXlCZU51bGwoZ2xvYmFsRGF0YSwg
dHJhbnNpdGlvbiwgc3BlY2lmaWNWYWx1ZSk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJs
ZSgpLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRh
YmxlT3JDbG9uZUlmUGlubmVkKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pKTsKKyAgICB0cmFuc2l0
aW9uLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzLnNldE1heUJlTnVsbCh2bSwgdHJhbnNpdGlv
biwgc3BlY2lmaWNWYWx1ZSk7CisgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2
bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5l
ZCh2bSwgdHJhbnNpdGlvbikpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJl
LT5tX29mZnNldDsKIAotICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPnB1dFNwZWNpZmljVmFsdWUo
Z2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAg
ICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5wdXRTcGVjaWZpY1ZhbHVlKHZtLCBwcm9wZXJ0eU5hbWUs
IGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOwogCiAgICAgY2hlY2tPZmZzZXQodHJhbnNpdGlv
bi0+bV9vZmZzZXQsIHRyYW5zaXRpb24tPmlubGluZUNhcGFjaXR5KCkpOwotICAgIHN0cnVjdHVy
ZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pOworICAgIHN0
cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKHZtLCB0cmFuc2l0aW9uKTsKICAgICB0cmFu
c2l0aW9uLT5jaGVja09mZnNldENvbnNpc3RlbmN5KCk7CiAgICAgc3RydWN0dXJlLT5jaGVja09m
ZnNldENvbnNpc3RlbmN5KCk7CiAgICAgcmV0dXJuIHRyYW5zaXRpb247CiB9CiAKLVN0cnVjdHVy
ZSogU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlPZmZzZXQmIG9mZnNldCkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjpyZW1vdmVQcm9w
ZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKIHsKICAgICBBU1NFUlQoIXN0
cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CiAKLSAgICBTdHJ1Y3R1cmUqIHRy
YW5zaXRpb24gPSB0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwg
c3RydWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSB0b1VuY2FjaGVhYmxlRGlj
dGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSk7CiAKICAgICBvZmZzZXQgPSB0cmFuc2l0
aW9uLT5yZW1vdmUocHJvcGVydHlOYW1lKTsKIApAQCAtNDAxLDE0ICs0MDEsMTQgQEAgU3RydWN0
dXJlKiBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbgogICAgIHJldHVybiB0cmFuc2l0aW9u
OwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1ZhbHVlIHBy
b3RvdHlwZSkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9u
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTVmFsdWUgcHJvdG90eXBlKQogewotICAg
IFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwor
ICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKIAotICAg
IHRyYW5zaXRpb24tPm1fcHJvdG90eXBlLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBwcm90
b3R5cGUpOworICAgIHRyYW5zaXRpb24tPm1fcHJvdG90eXBlLnNldCh2bSwgdHJhbnNpdGlvbiwg
cHJvdG90eXBlKTsKIAotICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVj
ZXNzYXJ5KGdsb2JhbERhdGEpOwotICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQo
Z2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBp
bm5pbmcoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbikpOworICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxp
emVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtKTsKKyAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRh
YmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9y
UGlubmluZyh2bSwgdHJhbnNpdGlvbikpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5tX29mZnNldDsKICAgICB0cmFuc2l0aW9uLT5waW4oKTsKIApAQCAtNDE2LDIyICs0
MTYsMjIgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYQogICAgIHJl
dHVybiB0cmFuc2l0aW9uOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVu
Y3Rpb25UcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFByb3BlcnR5TmFtZSByZXBsYWNlRnVuY3Rpb24pCitTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFByb3BlcnR5TmFtZSByZXBsYWNlRnVuY3Rpb24pCiB7CiAgICAgQVNTRVJUKHN0cnVjdHVy
ZS0+bV9zcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQgPCBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhy
YXNoQ291bnQpOwotICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZShnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUpOworICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3Ry
dWN0dXJlKTsKIAogICAgICsrdHJhbnNpdGlvbi0+bV9zcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291
bnQ7CiAKLSAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShn
bG9iYWxEYXRhKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KGdsb2JhbERh
dGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKGds
b2JhbERhdGEsIHRyYW5zaXRpb24pKTsKKyAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVy
dHlNYXBJZk5lY2Vzc2FyeSh2bSk7CisgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNl
dCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmco
dm0sIHRyYW5zaXRpb24pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+
bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+cGluKCk7CiAKICAgICBpZiAodHJhbnNpdGlvbi0+
bV9zcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQgPT0gbWF4U3BlY2lmaWNGdW5jdGlvblRocmFz
aENvdW50KQotICAgICAgICB0cmFuc2l0aW9uLT5kZXNwZWNpZnlBbGxGdW5jdGlvbnMoZ2xvYmFs
RGF0YSk7CisgICAgICAgIHRyYW5zaXRpb24tPmRlc3BlY2lmeUFsbEZ1bmN0aW9ucyh2bSk7CiAg
ICAgZWxzZSB7Ci0gICAgICAgIGJvb2wgcmVtb3ZlZCA9IHRyYW5zaXRpb24tPmRlc3BlY2lmeUZ1
bmN0aW9uKGdsb2JhbERhdGEsIHJlcGxhY2VGdW5jdGlvbik7CisgICAgICAgIGJvb2wgcmVtb3Zl
ZCA9IHRyYW5zaXRpb24tPmRlc3BlY2lmeUZ1bmN0aW9uKHZtLCByZXBsYWNlRnVuY3Rpb24pOwog
ICAgICAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwogICAgIH0KIApAQCAtNDM5
LDEzICs0MzksMTMgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uVAog
ICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YXR0cmli
dXRlQ2hhbmdlVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
KQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24oVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWdu
ZWQgYXR0cmlidXRlcykKIHsKICAgICBpZiAoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rp
b25hcnkoKSkgewotICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKTsKKyAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRl
KHZtLCBzdHJ1Y3R1cmUpOwogCi0gICAgICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0
eU1hcElmTmVjZXNzYXJ5KGdsb2JhbERhdGEpOwotICAgICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0
eVRhYmxlKCkuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3Bl
cnR5VGFibGVGb3JQaW5uaW5nKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pKTsKKyAgICAgICAgc3Ry
dWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0pOworICAgICAgICB0
cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUt
PmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSwgdHJhbnNpdGlvbikpOwogICAgICAgICB0
cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgICAgIHRyYW5z
aXRpb24tPnBpbigpOwogICAgICAgICAKQEAgLTQ2MSwxNCArNDYxLDE0IEBAIFN0cnVjdHVyZSog
U3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmEKICAgICByZXR1cm4gc3RydWN0dXJlOwogfQog
Ci1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBEaWN0aW9uYXJ5S2luZCBraW5k
KQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGljdGlvbmFyeUtpbmQga2luZCkKIHsKICAgICBBU1NFUlQo
IXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CiAgICAgCi0gICAgU3RydWN0
dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CisgICAgU3Ry
dWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogCi0gICAgc3RydWN0
dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAg
dHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBz
dHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0
aW9uKSk7CisgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnko
dm0pOworICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24s
IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtLCB0cmFuc2l0aW9uKSk7
CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRy
YW5zaXRpb24tPm1fZGljdGlvbmFyeUtpbmQgPSBraW5kOwogICAgIHRyYW5zaXRpb24tPnBpbigp
OwpAQCAtNDc3LDIwICs0NzcsMjAgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFy
eVRyYW5zaQogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvQ2FjaGVh
YmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsK
LSAgICByZXR1cm4gdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUs
IENhY2hlZERpY3Rpb25hcnlLaW5kKTsKKyAgICByZXR1cm4gdG9EaWN0aW9uYXJ5VHJhbnNpdGlv
bih2bSwgc3RydWN0dXJlLCBDYWNoZWREaWN0aW9uYXJ5S2luZCk7CiB9CiAKLVN0cnVjdHVyZSog
U3RydWN0dXJlOjp0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK1N0cnVjdHVyZSogU3RydWN0dXJl
Ojp0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKIHsKLSAgICByZXR1cm4gdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUsIFVuY2FjaGVkRGljdGlvbmFyeUtpbmQpOworICAgIHJldHVybiB0b0RpY3Rp
b25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIFVuY2FjaGVkRGljdGlvbmFyeUtpbmQpOwog
fQogCiAvLyBJbiBmdXR1cmUgd2UgbWF5IHdhbnQgdG8gY2FjaGUgdGhpcyB0cmFuc2l0aW9uLgot
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnNlYWxUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6c2VhbFRy
YW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBTdHJ1Y3R1cmUq
IHRyYW5zaXRpb24gPSBwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBwcmV2ZW50RXh0ZW5zaW9uc1Ry
YW5zaXRpb24odm0sIHN0cnVjdHVyZSk7CiAKICAgICBpZiAodHJhbnNpdGlvbi0+cHJvcGVydHlU
YWJsZSgpKSB7CiAgICAgICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRyYW5zaXRp
b24tPnByb3BlcnR5VGFibGUoKS0+ZW5kKCk7CkBAIC01MDMsOSArNTAzLDkgQEAgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OnNlYWxUcmFuc2l0aW9uKEpTRwogfQogCiAvLyBJbiBmdXR1cmUgd2UgbWF5
IHdhbnQgdG8gY2FjaGUgdGhpcyB0cmFuc2l0aW9uLgotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZy
ZWV6ZVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjpmcmVlemVUcmFuc2l0aW9uKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gcHJldmVu
dEV4dGVuc2lvbnNUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CisgICAgU3RydWN0
dXJlKiB0cmFuc2l0aW9uID0gcHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1
cmUpOwogCiAgICAgaWYgKHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKSkgewogICAgICAgICBQ
cm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgp
LT5iZWdpbigpOwpAQCAtNTIxLDE0ICs1MjEsMTQgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZy
ZWV6ZVRyYW5zaXRpb24oSgogfQogCiAvLyBJbiBmdXR1cmUgd2UgbWF5IHdhbnQgdG8gY2FjaGUg
dGhpcyB0cmFuc2l0aW9uLgotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25z
VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbihWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9
IGNyZWF0ZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOworICAgIFN0cnVjdHVyZSogdHJhbnNpdGlv
biA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKIAogICAgIC8vIERvbid0IHNldCBtX29mZnNldCwg
YXMgb25lIGNhbiBub3QgdHJhbnNpdGlvbiB0byB0aGlzLgogCi0gICAgc3RydWN0dXJlLT5tYXRl
cmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgdHJhbnNpdGlv
bi0+cHJvcGVydHlUYWJsZSgpLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUt
PmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKSk7Cisg
ICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0pOworICAg
IHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVy
ZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtLCB0cmFuc2l0aW9uKSk7CiAgICAgdHJh
bnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24t
Pm1fcHJldmVudEV4dGVuc2lvbnMgPSB0cnVlOwogICAgIHRyYW5zaXRpb24tPnBpbigpOwpAQCAt
NTM3LDE3ICs1MzcsMTcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25z
VAogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCi1Qcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6
OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBvd25lcikKK1Byb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6dGFrZVByb3Bl
cnR5VGFibGVPckNsb25lSWZQaW5uZWQoVk0mIHZtLCBTdHJ1Y3R1cmUqIG93bmVyKQogewotICAg
IG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcoZ2xvYmFsRGF0YSk7
CisgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmluZyh2bSk7CiAg
ICAgaWYgKG1faXNQaW5uZWRQcm9wZXJ0eVRhYmxlKQotICAgICAgICByZXR1cm4gcHJvcGVydHlU
YWJsZSgpLT5jb3B5KGdsb2JhbERhdGEsIG93bmVyLCBwcm9wZXJ0eVRhYmxlKCktPnNpemUoKSAr
IDEpOworICAgICAgICByZXR1cm4gcHJvcGVydHlUYWJsZSgpLT5jb3B5KHZtLCBvd25lciwgcHJv
cGVydHlUYWJsZSgpLT5zaXplKCkgKyAxKTsKICAgICBQcm9wZXJ0eVRhYmxlKiB0YWtlblByb3Bl
cnR5VGFibGUgPSBwcm9wZXJ0eVRhYmxlKCkuZ2V0KCk7CiAgICAgcHJvcGVydHlUYWJsZSgpLmNs
ZWFyKCk7CiAgICAgcmV0dXJuIHRha2VuUHJvcGVydHlUYWJsZTsKIH0KIAotU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbktp
bmQpCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uS2lu
ZCkKIHsKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gdG9BdHRyaWJ1dGVzKHRyYW5zaXRpb25L
aW5kKTsKICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gbmV3SW5kZXhpbmdUeXBlKHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpLCB0cmFuc2l0aW9uS2luZCk7
CkBAIC01NjgsMjYgKzU2OCwyNiBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlU
cmFuc2l0CiAgICAgICAgIHJldHVybiBleGlzdGluZ1RyYW5zaXRpb247CiAgICAgfQogICAgIAot
ICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUp
OwotICAgIHRyYW5zaXRpb24tPnNldFByZXZpb3VzSUQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwg
c3RydWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVj
dHVyZSk7CisgICAgdHJhbnNpdGlvbi0+c2V0UHJldmlvdXNJRCh2bSwgdHJhbnNpdGlvbiwgc3Ry
dWN0dXJlKTsKICAgICB0cmFuc2l0aW9uLT5tX2F0dHJpYnV0ZXNJblByZXZpb3VzID0gYXR0cmli
dXRlczsKICAgICB0cmFuc2l0aW9uLT5tX2luZGV4aW5nVHlwZSA9IGluZGV4aW5nVHlwZTsKLSAg
ICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24s
IHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQoZ2xvYmFsRGF0YSwg
dHJhbnNpdGlvbikpOworICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRy
YW5zaXRpb24sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0s
IHRyYW5zaXRpb24pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9v
ZmZzZXQ7CiAgICAgY2hlY2tPZmZzZXQodHJhbnNpdGlvbi0+bV9vZmZzZXQsIHRyYW5zaXRpb24t
PmlubGluZUNhcGFjaXR5KCkpOwogICAgIAotICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFi
bGUuYWRkKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pOworICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0
aW9uVGFibGUuYWRkKHZtLCB0cmFuc2l0aW9uKTsKICAgICB0cmFuc2l0aW9uLT5jaGVja09mZnNl
dENvbnNpc3RlbmN5KCk7CiAgICAgcmV0dXJuIHRyYW5zaXRpb247CiB9CiAKIC8vIEluIGZ1dHVy
ZSB3ZSBtYXkgd2FudCB0byBjYWNoZSB0aGlzIHByb3BlcnR5LgotYm9vbCBTdHJ1Y3R1cmU6Omlz
U2VhbGVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK2Jvb2wgU3RydWN0dXJlOjppc1NlYWxl
ZChWTSYgdm0pCiB7CiAgICAgaWYgKGlzRXh0ZW5zaWJsZSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7
CisgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtKTsKICAgICBpZiAoIXBy
b3BlcnR5VGFibGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTYwMCwxMiArNjAwLDEy
IEBAIGJvb2wgU3RydWN0dXJlOjppc1NlYWxlZChKU0dsb2JhbERhdGEmIGcKIH0KIAogLy8gSW4g
ZnV0dXJlIHdlIG1heSB3YW50IHRvIGNhY2hlIHRoaXMgcHJvcGVydHkuCi1ib29sIFN0cnVjdHVy
ZTo6aXNGcm96ZW4oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorYm9vbCBTdHJ1Y3R1cmU6Omlz
RnJvemVuKFZNJiB2bSkKIHsKICAgICBpZiAoaXNFeHRlbnNpYmxlKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxE
YXRhKTsKKyAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0pOwogICAgIGlm
ICghcHJvcGVydHlUYWJsZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtNjE5LDcgKzYx
OSw3IEBAIGJvb2wgU3RydWN0dXJlOjppc0Zyb3plbihKU0dsb2JhbERhdGEmIGcKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5U3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNPYmplY3QqIG9iamVjdCkKK1N0cnVj
dHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShWTSYgdm0sIEpTT2Jq
ZWN0KiBvYmplY3QpCiB7CiAgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwogICAgIEFTU0VS
VChpc0RpY3Rpb25hcnkoKSk7CkBAIC02NDIsNyArNjQyLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5UwogICAgICAgICAKICAgICAgICAgLy8gQ29waWVzIGluIG91
ciB2YWx1ZXMgdG8gdGhlaXIgY29tcGFjdGVkIGxvY2F0aW9ucy4KICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7IGkrKykKLSAgICAgICAgICAgIG9iamVjdC0+
cHV0RGlyZWN0KGdsb2JhbERhdGEsIG9mZnNldEZvclByb3BlcnR5TnVtYmVyKGksIG1faW5saW5l
Q2FwYWNpdHkpLCB2YWx1ZXNbaV0pOworICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0s
IG9mZnNldEZvclByb3BlcnR5TnVtYmVyKGksIG1faW5saW5lQ2FwYWNpdHkpLCB2YWx1ZXNbaV0p
OwogCiAgICAgICAgIHByb3BlcnR5VGFibGUoKS0+Y2xlYXJEZWxldGVkT2Zmc2V0cygpOwogICAg
ICAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7CkBAIC02NTIsMjYgKzY1MiwyNiBAQCBTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTCiAgICAgcmV0dXJuIHRoaXM7CiB9
CiAKLVByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlv
bihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSkKK1Byb3BlcnR5T2Zmc2V0
IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNW
YWx1ZSkKIHsKICAgICBBU1NFUlQoIWVudW1lcmF0aW9uQ2FjaGUoKSk7CiAKICAgICBpZiAobV9z
cGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQgPT0gbWF4U3BlY2lmaWNGdW5jdGlvblRocmFzaENv
dW50KQogICAgICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKIAotICAgIG1hdGVyaWFsaXplUHJvcGVy
dHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcoZ2xvYmFsRGF0YSk7CisgICAgbWF0ZXJpYWxpemVQ
cm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmluZyh2bSk7CiAgICAgCiAgICAgcGluKCk7CiAK
LSAgICByZXR1cm4gcHV0U3BlY2lmaWNWYWx1ZShnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgIHJldHVybiBwdXRTcGVjaWZpY1ZhbHVlKHZt
LCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOwogfQogCi1Qcm9wZXJ0
eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorUHJvcGVydHlP
ZmZzZXQgU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBBU1NFUlQoaXNVbmNhY2hlYWJsZURp
Y3Rpb25hcnkoKSk7CiAgICAgQVNTRVJUKCFlbnVtZXJhdGlvbkNhY2hlKCkpOwogCi0gICAgbWF0
ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmluZyhnbG9iYWxEYXRhKTsKKyAg
ICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5nKHZtKTsKIAogICAg
IHBpbigpOwogICAgIHJldHVybiByZW1vdmUocHJvcGVydHlOYW1lKTsKQEAgLTY4NSwyMCArNjg1
LDIwIEBAIHZvaWQgU3RydWN0dXJlOjpwaW4oKQogICAgIG1fbmFtZUluUHJldmlvdXMuY2xlYXIo
KTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6OmFsbG9jYXRlUmFyZURhdGEoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQordm9pZCBTdHJ1Y3R1cmU6OmFsbG9jYXRlUmFyZURhdGEoVk0mIHZtKQogewog
ICAgIEFTU0VSVCghdHlwZUluZm8oKS5zdHJ1Y3R1cmVIYXNSYXJlRGF0YSgpKTsKLSAgICBTdHJ1
Y3R1cmVSYXJlRGF0YSogcmFyZURhdGEgPSBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIHByZXZpb3VzKCkpOworICAgIFN0cnVjdHVyZVJhcmVEYXRhKiByYXJlRGF0YSA9IFN0
cnVjdHVyZVJhcmVEYXRhOjpjcmVhdGUodm0sIHByZXZpb3VzKCkpOwogICAgIG1fdHlwZUluZm8g
PSBUeXBlSW5mbyh0eXBlSW5mbygpLnR5cGUoKSwgdHlwZUluZm8oKS5mbGFncygpIHwgU3RydWN0
dXJlSGFzUmFyZURhdGEpOwotICAgIG1fcHJldmlvdXNPclJhcmVEYXRhLnNldChnbG9iYWxEYXRh
LCB0aGlzLCByYXJlRGF0YSk7CisgICAgbV9wcmV2aW91c09yUmFyZURhdGEuc2V0KHZtLCB0aGlz
LCByYXJlRGF0YSk7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjpjbG9uZVJhcmVEYXRhRnJvbShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFN0cnVjdHVyZSogb3RoZXIpCit2b2lkIFN0cnVj
dHVyZTo6Y2xvbmVSYXJlRGF0YUZyb20oVk0mIHZtLCBjb25zdCBTdHJ1Y3R1cmUqIG90aGVyKQog
ewogICAgIEFTU0VSVChvdGhlci0+dHlwZUluZm8oKS5zdHJ1Y3R1cmVIYXNSYXJlRGF0YSgpKTsK
LSAgICBTdHJ1Y3R1cmVSYXJlRGF0YSogbmV3UmFyZURhdGEgPSBTdHJ1Y3R1cmVSYXJlRGF0YTo6
Y2xvbmUoZ2xvYmFsRGF0YSwgb3RoZXItPnJhcmVEYXRhKCkpOworICAgIFN0cnVjdHVyZVJhcmVE
YXRhKiBuZXdSYXJlRGF0YSA9IFN0cnVjdHVyZVJhcmVEYXRhOjpjbG9uZSh2bSwgb3RoZXItPnJh
cmVEYXRhKCkpOwogICAgIG1fdHlwZUluZm8gPSBUeXBlSW5mbyh0eXBlSW5mbygpLnR5cGUoKSwg
dHlwZUluZm8oKS5mbGFncygpIHwgU3RydWN0dXJlSGFzUmFyZURhdGEpOwotICAgIG1fcHJldmlv
dXNPclJhcmVEYXRhLnNldChnbG9iYWxEYXRhLCB0aGlzLCBuZXdSYXJlRGF0YSk7CisgICAgbV9w
cmV2aW91c09yUmFyZURhdGEuc2V0KHZtLCB0aGlzLCBuZXdSYXJlRGF0YSk7CiB9CiAKICNpZiBE
VU1QX1BST1BFUlRZTUFQX1NUQVRTCkBAIC03MjksMjUgKzcyOSwyNSBAQCBpbmxpbmUgdm9pZCBT
dHJ1Y3R1cmU6OmNoZWNrQ29uc2lzdGVuY3koCiAKICNlbmRpZgogCi1Qcm9wZXJ0eVRhYmxlKiBT
dHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3Ry
dWN0dXJlKiBvd25lcikKK1Byb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFi
bGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIG93bmVyKQogewogICAgIGlmICghcHJvcGVydHlUYWJsZSgp
KQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUoZ2xv
YmFsRGF0YSwgb3duZXIsICpwcm9wZXJ0eVRhYmxlKCkuZ2V0KCkpOworICAgIHJldHVybiBQcm9w
ZXJ0eVRhYmxlOjpjbG9uZSh2bSwgb3duZXIsICpwcm9wZXJ0eVRhYmxlKCkuZ2V0KCkpOwogfQog
Ci1Qcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogb3duZXIpCitQcm9wZXJ0eVRhYmxl
KiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhWTSYgdm0sIFN0cnVjdHVy
ZSogb3duZXIpCiB7CiAgICAgaWYgKHByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJuIFBy
b3BlcnR5VGFibGU6OmNsb25lKGdsb2JhbERhdGEsIG93bmVyLCAqcHJvcGVydHlUYWJsZSgpLmdl
dCgpKTsKLSAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y3JlYXRlKGdsb2JhbERhdGEsIG51bWJl
ck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CisgICAg
ICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9uZSh2bSwgb3duZXIsICpwcm9wZXJ0eVRhYmxl
KCkuZ2V0KCkpOworICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUodm0sIG51bWJlck9m
U2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CiB9CiAKLVBy
b3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIEpTQ2VsbComIHNw
ZWNpZmljVmFsdWUpCitQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBKU0NlbGwqJiBzcGVj
aWZpY1ZhbHVlKQogewogICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNf
aW5mbyk7CiAKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0
YSk7CisgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtKTsKICAgICBpZiAo
IXByb3BlcnR5VGFibGUoKSkKICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiAKQEAgLTc2
MCw5ICs3NjAsOSBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChKU0dsb2JhbERhCiAg
ICAgcmV0dXJuIGVudHJ5LT5vZmZzZXQ7CiB9CiAKLWJvb2wgU3RydWN0dXJlOjpkZXNwZWNpZnlG
dW5jdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpCitib29sIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVuY3Rpb24oVk0mIHZtLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lKQogewotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2Fy
eShnbG9iYWxEYXRhKTsKKyAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0p
OwogICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAg
LTc3NSw5ICs3NzUsOSBAQCBib29sIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVuY3Rpb24oSlNHbG9i
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjpkZXNwZWNpZnlBbGxGdW5j
dGlvbnMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBTdHJ1Y3R1cmU6OmRlc3BlY2lm
eUFsbEZ1bmN0aW9ucyhWTSYgdm0pCiB7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVj
ZXNzYXJ5KGdsb2JhbERhdGEpOworICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2Fy
eSh2bSk7CiAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAt
Nzg2LDkgKzc4Niw5IEBAIHZvaWQgU3RydWN0dXJlOjpkZXNwZWNpZnlBbGxGdW5jdGlvbnMoSlMK
ICAgICAgICAgaXRlci0+c3BlY2lmaWNWYWx1ZS5jbGVhcigpOwogfQogCi1Qcm9wZXJ0eU9mZnNl
dCBTdHJ1Y3R1cmU6OnB1dFNwZWNpZmljVmFsdWUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNw
ZWNpZmljVmFsdWUpCitQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnB1dFNwZWNpZmljVmFsdWUo
Vk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBK
U0NlbGwqIHNwZWNpZmljVmFsdWUpCiB7Ci0gICAgQVNTRVJUKCFKU0M6OmlzVmFsaWRPZmZzZXQo
Z2V0KGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSkpKTsKKyAgICBBU1NFUlQoIUpTQzo6aXNWYWxp
ZE9mZnNldChnZXQodm0sIHByb3BlcnR5TmFtZSkpKTsKIAogICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKICAgICBpZiAoYXR0cmlidXRlcyAmIERvbnRFbnVtKQpAQCAtNzk3LDExICs3OTcsMTEgQEAg
UHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpwdXRTcGVjaWZpY1ZhbAogICAgIFN0cmluZ0ltcGwq
IHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsKIAogICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQot
ICAgICAgICBjcmVhdGVQcm9wZXJ0eU1hcChnbG9iYWxEYXRhKTsKKyAgICAgICAgY3JlYXRlUHJv
cGVydHlNYXAodm0pOwogCiAgICAgUHJvcGVydHlPZmZzZXQgbmV3T2Zmc2V0ID0gcHJvcGVydHlU
YWJsZSgpLT5uZXh0T2Zmc2V0KG1faW5saW5lQ2FwYWNpdHkpOwogCi0gICAgcHJvcGVydHlUYWJs
ZSgpLT5hZGQoUHJvcGVydHlNYXBFbnRyeShnbG9iYWxEYXRhLCB0aGlzLCByZXAsIG5ld09mZnNl
dCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQ
cm9wZXJ0eU9mZnNldE1heUNoYW5nZSk7CisgICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoUHJvcGVy
dHlNYXBFbnRyeSh2bSwgdGhpcywgcmVwLCBuZXdPZmZzZXQsIGF0dHJpYnV0ZXMsIHNwZWNpZmlj
VmFsdWUpLCBtX29mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNYXlDaGFuZ2Up
OwogICAgIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICByZXR1cm4gbmV3T2Zmc2V0OwpA
QCAtODI5LDE3ICs4MjksMTcgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoUHJv
cGVydAogICAgIHJldHVybiBvZmZzZXQ7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjpjcmVhdGVQcm9w
ZXJ0eU1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGNhcGFjaXR5KQordm9p
ZCBTdHJ1Y3R1cmU6OmNyZWF0ZVByb3BlcnR5TWFwKFZNJiB2bSwgdW5zaWduZWQgY2FwYWNpdHkp
CiB7CiAgICAgQVNTRVJUKCFwcm9wZXJ0eVRhYmxlKCkpOwogCiAgICAgY2hlY2tDb25zaXN0ZW5j
eSgpOwotICAgIHByb3BlcnR5VGFibGUoKS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgUHJvcGVydHlU
YWJsZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGNhcGFjaXR5KSk7CisgICAgcHJvcGVydHlUYWJsZSgp
LnNldCh2bSwgdGhpcywgUHJvcGVydHlUYWJsZTo6Y3JlYXRlKHZtLCBjYXBhY2l0eSkpOwogfQog
Ci12b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCit2b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1
Y3R1cmUoVk0mIHZtLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRp
b25Nb2RlIG1vZGUpCiB7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KGds
b2JhbERhdGEpOworICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSk7CiAg
ICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtODg2LDcgKzg4
Niw3IEBAIHZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAgICAg
dGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CiB9CiAKLWJvb2wgU3Ry
dWN0dXJlOjpwcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorYm9vbCBTdHJ1Y3R1cmU6OnBy
b3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCiB7CiAgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CiAg
ICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQpAQCAtOTAxLDcgKzkwMSw3IEBA
IGJvb2wgU3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbk1heUludGVyY2UKICAgICAgICAgCiAgICAg
ICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CiAgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsK
LSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gY3VycmVudC0+Z2V0KGdsb2JhbERhdGEs
IHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IGN1cnJlbnQtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1
dGVzLCBzcGVjaWZpY1ZhbHVlKTsKICAgICAgICAgaWYgKCFKU0M6OmlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAt
NjksNTcgKzY5LDU3IEBAIHB1YmxpYzoKIAogICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CiAKLSAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8qLCBJ
bmRleGluZ1R5cGUgPSBOb25BcnJheSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkgPSAwKTsKKyAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
cHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENsYXNzSW5mbyosIEluZGV4aW5nVHlw
ZSA9IE5vbkFycmF5LCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9IDApOwogCiBwcm90ZWN0ZWQ6
Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgewotICAgICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwog
ICAgICAgICBBU1NFUlQobV9wcm90b3R5cGUpOwogICAgICAgICBBU1NFUlQobV9wcm90b3R5cGUu
aXNPYmplY3QoKSB8fCBtX3Byb3RvdHlwZS5pc051bGwoKSk7CiAgICAgfQogCi0gICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIENyZWF0aW5nRWFybHlDZWxs
VGFnKQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBDcmVhdGluZ0Vhcmx5Q2VsbFRh
ZykKICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIHRoaXMs
IENyZWF0aW5nRWFybHlDZWxsKTsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIHRo
aXMsIENyZWF0aW5nRWFybHlDZWxsKTsKICAgICAgICAgQVNTRVJUKG1fcHJvdG90eXBlKTsKICAg
ICAgICAgQVNTRVJUKG1fcHJvdG90eXBlLmlzTnVsbCgpKTsKLSAgICAgICAgQVNTRVJUKCFnbG9i
YWxEYXRhLnN0cnVjdHVyZVN0cnVjdHVyZSk7CisgICAgICAgIEFTU0VSVCghdm0uc3RydWN0dXJl
U3RydWN0dXJlKTsKICAgICB9CiAKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkdW1wU3RhdGlz
dGljcygpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJv
cGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwg
dW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNl
dCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3BlcnR5
VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmli
dXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYpOwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhp
c3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3BlcnR5T2Zmc2V0Jik7Ci0gICAgc3RhdGlj
IFN0cnVjdHVyZSogcmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVj
dHVyZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmKTsKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgU3RydWN0dXJlKiBjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKEpTR2xvYmFs
RGF0YSYsIFN0cnVjdHVyZSosIEpTVmFsdWUgcHJvdG90eXBlKTsKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgU3RydWN0dXJlKiBkZXNwZWNpZnlGdW5jdGlvblRyYW5zaXRpb24oSlNHbG9i
YWxEYXRhJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lKTsKLSAgICBzdGF0aWMgU3RydWN0dXJl
KiBhdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIFBy
b3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7Ci0gICAgc3RhdGljIFN0cnVjdHVyZSog
dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUq
KTsKLSAgICBzdGF0aWMgU3RydWN0dXJlKiB0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRp
b24oSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7Ci0gICAgc3RhdGljIFN0cnVjdHVyZSogc2Vh
bFRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7Ci0gICAgc3RhdGljIFN0cnVj
dHVyZSogZnJlZXplVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKLSAgICBz
dGF0aWMgU3RydWN0dXJlKiBwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24oSlNHbG9iYWxEYXRh
JiwgU3RydWN0dXJlKik7Ci0gICAgc3RhdGljIFN0cnVjdHVyZSogbm9uUHJvcGVydHlUcmFuc2l0
aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIE5vblByb3BlcnR5VHJhbnNpdGlvbik7Cisg
ICAgc3RhdGljIFN0cnVjdHVyZSogcmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKFZNJiwgU3RydWN0
dXJlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24oVk0mLCBTdHJ1
Y3R1cmUqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IFN0cnVjdHVyZSogZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwg
UHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBhdHRyaWJ1dGVDaGFuZ2VUcmFu
c2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
KTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiB0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9u
KFZNJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogdG9VbmNhY2hlYWJsZURp
Y3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIFN0cnVjdHVy
ZSogc2VhbFRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgU3RydWN0dXJl
KiBmcmVlemVUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIFN0cnVjdHVy
ZSogcHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKik7CisgICAgc3Rh
dGljIFN0cnVjdHVyZSogbm9uUHJvcGVydHlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgTm9u
UHJvcGVydHlUcmFuc2l0aW9uKTsKIAotICAgIGJvb2wgaXNTZWFsZWQoSlNHbG9iYWxEYXRhJik7
Ci0gICAgYm9vbCBpc0Zyb3plbihKU0dsb2JhbERhdGEmKTsKKyAgICBib29sIGlzU2VhbGVkKFZN
Jik7CisgICAgYm9vbCBpc0Zyb3plbihWTSYpOwogICAgIGJvb2wgaXNFeHRlbnNpYmxlKCkgY29u
c3QgeyByZXR1cm4gIW1fcHJldmVudEV4dGVuc2lvbnM7IH0KICAgICBib29sIGRpZFRyYW5zaXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2RpZFRyYW5zaXRpb247IH0KICAgICBib29sIHB1dFdpbGxH
cm93T3V0T2ZMaW5lU3RvcmFnZSgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBzdWdn
ZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKTsgCiAKLSAgICBTdHJ1Y3R1cmUqIGZs
YXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIEpTT2JqZWN0Kik7CisgICAg
U3RydWN0dXJlKiBmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShWTSYsIEpTT2JqZWN0Kik7CiAK
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAgIC8vIFRoZXNlIHNob3VsZCBiZSB1c2VkIHdpdGgg
Y2F1dGlvbi4gIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb3BlcnR5T2Zmc2V0IGFkZFByb3Bl
cnR5V2l0aG91dFRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUpOwotICAgIFByb3BlcnR5T2Zmc2V0
IHJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlO
YW1lKTsKLSAgICB2b2lkIHNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpIHsgbV9wcm90b3R5cGUuc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHByb3RvdHlwZSk7IH0KKyAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0
eU9mZnNldCBhZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUpOworICAgIFByb3BlcnR5
T2Zmc2V0IHJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUp
OworICAgIHZvaWQgc2V0UHJvdG90eXBlV2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBKU1ZhbHVl
IHByb3RvdHlwZSkgeyBtX3Byb3RvdHlwZS5zZXQodm0sIHRoaXMsIHByb3RvdHlwZSk7IH0KICAg
ICAgICAgCiAgICAgYm9vbCBpc0RpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBtX2RpY3Rpb25h
cnlLaW5kICE9IE5vbmVEaWN0aW9uYXJ5S2luZDsgfQogICAgIGJvb2wgaXNVbmNhY2hlYWJsZURp
Y3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBtX2RpY3Rpb25hcnlLaW5kID09IFVuY2FjaGVkRGlj
dGlvbmFyeUtpbmQ7IH0KQEAgLTE0NCwxOCArMTQ0LDE4IEBAIHB1YmxpYzoKICAgICBOb25Qcm9w
ZXJ0eVRyYW5zaXRpb24gc3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpIGNvbnN0Owog
ICAgICAgICAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9nbG9iYWxPYmplY3QuZ2V0KCk7IH0KLSAgICB2b2lkIHNldEdsb2JhbE9iamVjdChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIHsgbV9n
bG9iYWxPYmplY3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCk7IH0KKyAgICB2
b2lkIHNldEdsb2JhbE9iamVjdChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
IHsgbV9nbG9iYWxPYmplY3Quc2V0KHZtLCB0aGlzLCBnbG9iYWxPYmplY3QpOyB9CiAgICAgICAg
IAogICAgIEpTVmFsdWUgc3RvcmVkUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gbV9wcm90b3R5
cGUuZ2V0KCk7IH0KICAgICBKU1ZhbHVlIHByb3RvdHlwZUZvckxvb2t1cChFeGVjU3RhdGUqKSBj
b25zdDsKICAgICBKU1ZhbHVlIHByb3RvdHlwZUZvckxvb2t1cChKU0dsb2JhbE9iamVjdCopIGNv
bnN0OwogICAgIEpTVmFsdWUgcHJvdG90eXBlRm9yTG9va3VwKENvZGVCbG9jayopIGNvbnN0Owot
ICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbihKU0dsb2JhbERhdGEmLCBKU0dsb2Jh
bE9iamVjdCopIGNvbnN0OworICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbihWTSYs
IEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNo
YWluKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICAgICAgCiAgICAgLy8gV2lsbCBqdXN0IHRoZSBwcm90
b3R5cGUgY2hhaW4gaW50ZXJjZXB0IHRoaXMgcHJvcGVydHkgYWNjZXNzPwotICAgIGJvb2wgcHJv
dG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFt
ZSk7CisgICAgYm9vbCBwcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oVk0mLCBQcm9w
ZXJ0eU5hbWUpOwogICAgICAgICAKICAgICBib29sIHRyYW5zaXRpb25EaWRJbnZvbHZlU3BlY2lm
aWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICEhbV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91czsgfQog
ICAgICAgICAKQEAgLTIzMSw5ICsyMzEsOSBAQCBwdWJsaWM6CiAKICAgICBib29sIG1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QpOwogCi0g
ICAgUHJvcGVydHlPZmZzZXQgZ2V0KEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSk7Ci0gICAg
UHJvcGVydHlPZmZzZXQgZ2V0KEpTR2xvYmFsRGF0YSYsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1l
KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eU9mZnNldCBnZXQoSlNHbG9iYWxEYXRh
JiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgSlNDZWxsKiYgc3BlY2lmaWNW
YWx1ZSk7CisgICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lKTsKKyAgICBQ
cm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSk7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lLCB1bnNp
Z25lZCYgYXR0cmlidXRlcywgSlNDZWxsKiYgc3BlY2lmaWNWYWx1ZSk7CiAKICAgICBib29sIGhh
c0dldHRlclNldHRlclByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX2hhc0dldHRlclNldHRl
clByb3BlcnRpZXM7IH0KICAgICBib29sIGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0
aWVzRXhjbHVkaW5nUHJvdG8oKSBjb25zdCB7IHJldHVybiBtX2hhc1JlYWRPbmx5T3JHZXR0ZXJT
ZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG87IH0KQEAgLTI1NiwxMiArMjU2LDEyIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuICFKU0M6OmlzVmFsaWRPZmZzZXQobV9vZmZzZXQpOwogICAg
IH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0
aW9uKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBkZXNwZWNpZnlEaWN0aW9uYXJ5RnVuY3Rpb24oVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAg
IHZvaWQgZGlzYWJsZVNwZWNpZmljRnVuY3Rpb25UcmFja2luZygpIHsgbV9zcGVjaWZpY0Z1bmN0
aW9uVGhyYXNoQ291bnQgPSBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQ7IH0KIAotICAg
IHZvaWQgc2V0RW51bWVyYXRpb25DYWNoZShKU0dsb2JhbERhdGEmLCBKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yKiBlbnVtZXJhdGlvbkNhY2hlKTsgLy8gRGVmaW5lZCBpbiBKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yLmguCisgICAgdm9pZCBzZXRFbnVtZXJhdGlvbkNhY2hlKFZNJiwgSlNQcm9wZXJ0eU5h
bWVJdGVyYXRvciogZW51bWVyYXRpb25DYWNoZSk7IC8vIERlZmluZWQgaW4gSlNQcm9wZXJ0eU5h
bWVJdGVyYXRvci5oLgogICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGVudW1lcmF0aW9uQ2Fj
aGUoKTsgLy8gRGVmaW5lZCBpbiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmguCi0gICAgdm9pZCBn
ZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0
cnVjdHVyZShWTSYsIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAg
IEpTU3RyaW5nKiBvYmplY3RUb1N0cmluZ1ZhbHVlKCkKICAgICB7CkBAIC0yNzAsMTEgKzI3MCwx
MSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByYXJlRGF0YSgpLT5vYmplY3RUb1N0cmluZ1Zh
bHVlKCk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRPYmplY3RUb1N0cmluZ1ZhbHVlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNTdHJpbmcqIHZhbHVlKQor
ICAgIHZvaWQgc2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3du
ZXIsIEpTU3RyaW5nKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdHlwZUluZm8oKS5zdHJ1
Y3R1cmVIYXNSYXJlRGF0YSgpKQotICAgICAgICAgICAgYWxsb2NhdGVSYXJlRGF0YShnbG9iYWxE
YXRhKTsKLSAgICAgICAgcmFyZURhdGEoKS0+c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShnbG9iYWxE
YXRhLCBvd25lciwgdmFsdWUpOworICAgICAgICAgICAgYWxsb2NhdGVSYXJlRGF0YSh2bSk7Cisg
ICAgICAgIHJhcmVEYXRhKCktPnNldE9iamVjdFRvU3RyaW5nVmFsdWUodm0sIG93bmVyLCB2YWx1
ZSk7CiAgICAgfQogCiAgICAgYm9vbCBzdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCkKQEAgLTMxOSw3
ICszMTksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0
dXJlLCBtX2luZGV4aW5nVHlwZSk7CiAgICAgfQogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYpOwogICAgICAgICAKICAgICBib29sIHRyYW5zaXRpb25XYXRjaHBvaW50
U2V0SGFzQmVlbkludmFsaWRhdGVkKCkgY29uc3QKICAgICB7CkBAIC0zNDcsNTQgKzM0Nyw1NCBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBD
bGFzc0luZm8qLCBJbmRleGluZ1R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5KTsKLSAgICBT
dHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJik7Ci0gICAgU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIGNv
bnN0IFN0cnVjdHVyZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cnVjdHVyZShWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3Qg
Q2xhc3NJbmZvKiwgSW5kZXhpbmdUeXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSk7CisgICAg
U3RydWN0dXJlKFZNJik7CisgICAgU3RydWN0dXJlKFZNJiwgY29uc3QgU3RydWN0dXJlKik7CiAK
LSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgY29uc3QgU3RydWN0
dXJlKik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlKFZNJiwgY29uc3QgU3RydWN0dXJl
Kik7CiAgICAgICAgIAogICAgIHR5cGVkZWYgZW51bSB7IAogICAgICAgICBOb25lRGljdGlvbmFy
eUtpbmQgPSAwLAogICAgICAgICBDYWNoZWREaWN0aW9uYXJ5S2luZCA9IDEsCiAgICAgICAgIFVu
Y2FjaGVkRGljdGlvbmFyeUtpbmQgPSAyCiAgICAgfSBEaWN0aW9uYXJ5S2luZDsKLSAgICBzdGF0
aWMgU3RydWN0dXJlKiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVj
dHVyZSosIERpY3Rpb25hcnlLaW5kKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiB0b0RpY3Rpb25h
cnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgRGljdGlvbmFyeUtpbmQpOwogCi0gICAgUHJv
cGVydHlPZmZzZXQgcHV0U3BlY2lmaWNWYWx1ZShKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSk7CisgICAgUHJvcGVy
dHlPZmZzZXQgcHV0U3BlY2lmaWNWYWx1ZShWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0
cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKTsKICAgICBQcm9wZXJ0eU9mZnNldCByZW1v
dmUoUHJvcGVydHlOYW1lKTsKIAotICAgIHZvaWQgY3JlYXRlUHJvcGVydHlNYXAoSlNHbG9iYWxE
YXRhJiwgdW5zaWduZWQga2V5Q291bnQgPSAwKTsKKyAgICB2b2lkIGNyZWF0ZVByb3BlcnR5TWFw
KFZNJiwgdW5zaWduZWQga2V5Q291bnQgPSAwKTsKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3ko
KTsKIAotICAgIGJvb2wgZGVzcGVjaWZ5RnVuY3Rpb24oSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlO
YW1lKTsKLSAgICB2b2lkIGRlc3BlY2lmeUFsbEZ1bmN0aW9ucyhKU0dsb2JhbERhdGEmKTsKKyAg
ICBib29sIGRlc3BlY2lmeUZ1bmN0aW9uKFZNJiwgUHJvcGVydHlOYW1lKTsKKyAgICB2b2lkIGRl
c3BlY2lmeUFsbEZ1bmN0aW9ucyhWTSYpOwogCiAgICAgV3JpdGVCYXJyaWVyPFByb3BlcnR5VGFi
bGU+JiBwcm9wZXJ0eVRhYmxlKCk7Ci0gICAgUHJvcGVydHlUYWJsZSogdGFrZVByb3BlcnR5VGFi
bGVPckNsb25lSWZQaW5uZWQoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvd25lcik7Ci0gICAg
UHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJl
KiBvd25lcik7Ci0gICAgUHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5n
KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogb3duZXIpOwotICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChKU0dsb2JhbERhdGEmKTsKLSAgICB2b2lkIG1h
dGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
CisgICAgUHJvcGVydHlUYWJsZSogdGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQoVk0m
LCBTdHJ1Y3R1cmUqIG93bmVyKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlUYWJs
ZShWTSYsIFN0cnVjdHVyZSogb3duZXIpOworICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0
eVRhYmxlRm9yUGlubmluZyhWTSYsIFN0cnVjdHVyZSogb3duZXIpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChWTSYpOworICAgIHZvaWQgbWF0ZXJp
YWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KFZNJiB2bSkKICAgICB7CiAgICAgICAgIEFTU0VS
VChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7CiAgICAgICAgIEFTU0VSVChj
aGVja09mZnNldENvbnNpc3RlbmN5KCkpOwogICAgICAgICBpZiAoIXByb3BlcnR5VGFibGUoKSAm
JiBwcmV2aW91c0lEKCkpCi0gICAgICAgICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwKGdsb2Jh
bERhdGEpOworICAgICAgICAgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCh2bSk7CiAgICAgfQot
ICAgIHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmluZyhKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgdm9pZCBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZO
ZWNlc3NhcnlGb3JQaW5uaW5nKFZNJiB2bSkKICAgICB7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1
cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7CiAgICAgICAgIGNoZWNrT2Zmc2V0Q29uc2lz
dGVuY3koKTsKICAgICAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgICAgICBtYXRl
cmlhbGl6ZVByb3BlcnR5TWFwKGdsb2JhbERhdGEpOworICAgICAgICAgICAgbWF0ZXJpYWxpemVQ
cm9wZXJ0eU1hcCh2bSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRQcmV2aW91c0lEKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiB0cmFuc2l0aW9uLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICB2b2lkIHNldFByZXZpb3VzSUQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHRyYW5zaXRp
b24sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgaWYgKHR5cGVJbmZvKCku
c3RydWN0dXJlSGFzUmFyZURhdGEoKSkKLSAgICAgICAgICAgIHJhcmVEYXRhKCktPnNldFByZXZp
b3VzSUQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIHJh
cmVEYXRhKCktPnNldFByZXZpb3VzSUQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1fcHJldmlvdXNPclJhcmVEYXRhLnNldChnbG9iYWxEYXRh
LCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgbV9wcmV2aW91c09yUmFyZURh
dGEuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUpOwogICAgIH0KIAogICAgIHZvaWQgY2xl
YXJQcmV2aW91c0lEKCkKQEAgLTQzMCw4ICs0MzAsOCBAQCBwcml2YXRlOgogICAgICAgICAKICAg
ICBib29sIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKSBjb25zdDsKIAotICAgIHZvaWQgYWxsb2Nh
dGVSYXJlRGF0YShKU0dsb2JhbERhdGEmKTsKLSAgICB2b2lkIGNsb25lUmFyZURhdGFGcm9tKEpT
R2xvYmFsRGF0YSYsIGNvbnN0IFN0cnVjdHVyZSopOworICAgIHZvaWQgYWxsb2NhdGVSYXJlRGF0
YShWTSYpOworICAgIHZvaWQgY2xvbmVSYXJlRGF0YUZyb20oVk0mLCBjb25zdCBTdHJ1Y3R1cmUq
KTsKIAogICAgIHN0YXRpYyBjb25zdCBpbnQgc19tYXhUcmFuc2l0aW9uTGVuZ3RoID0gNjQ7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFp
bi5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUNoYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAKIENsYXNzSW5mbyBTdHJ1Y3R1cmVDaGFpbjo6c19pbmZvID0geyAi
U3RydWN0dXJlQ2hhaW4iLCAwLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFN0cnVjdHVyZUNo
YWluKSB9OwogCi1TdHJ1Y3R1cmVDaGFpbjo6U3RydWN0dXJlQ2hhaW4oSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IEpTQ2VsbChnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUpCitTdHJ1Y3R1cmVDaGFpbjo6U3RydWN0dXJlQ2hhaW4oVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEpTQ2VsbCh2bSwgc3RydWN0dXJlKQogewogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJ
KHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZUNoYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE2ICs0NiwxNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CiAKLSAgICAg
ICAgc3RhdGljIFN0cnVjdHVyZUNoYWluKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBTdHJ1Y3R1cmUqIGhlYWQpCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmVDaGFpbiogY3JlYXRl
KFZNJiB2bSwgU3RydWN0dXJlKiBoZWFkKQogICAgICAgICB7IAotICAgICAgICAgICAgU3RydWN0
dXJlQ2hhaW4qIGNoYWluID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJlQ2hh
aW4+KGdsb2JhbERhdGEuaGVhcCkpIFN0cnVjdHVyZUNoYWluKGdsb2JhbERhdGEsIGdsb2JhbERh
dGEuc3RydWN0dXJlQ2hhaW5TdHJ1Y3R1cmUuZ2V0KCkpOwotICAgICAgICAgICAgY2hhaW4tPmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIGhlYWQpOworICAgICAgICAgICAgU3RydWN0dXJlQ2hh
aW4qIGNoYWluID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJlQ2hhaW4+KHZt
LmhlYXApKSBTdHJ1Y3R1cmVDaGFpbih2bSwgdm0uc3RydWN0dXJlQ2hhaW5TdHJ1Y3R1cmUuZ2V0
KCkpOworICAgICAgICAgICAgY2hhaW4tPmZpbmlzaENyZWF0aW9uKHZtLCBoZWFkKTsKICAgICAg
ICAgICAgIHJldHVybiBjaGFpbjsKICAgICAgICAgfQogICAgICAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiogaGVhZCgpIHsgcmV0dXJuIG1fdmVjdG9yLmdldCgpOyB9CiAgICAgICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgeyByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKENvbXBvdW5kVHlwZSwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiksICZzX2luZm8p
OyB9CisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSB7IHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENv
bXBvdW5kVHlwZSwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiksICZzX2luZm8pOyB9CiAgICAgICAg
IAogICAgICAgICBzdGF0aWMgQ2xhc3NJbmZvIHNfaW5mbzsKIApAQCAtNjQsOSArNjQsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAog
ICAgIHByb3RlY3RlZDoKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFN0cnVjdHVyZSogaGVhZCkKKyAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYgdm0sIFN0cnVjdHVyZSogaGVhZCkKICAgICAgICAgewotICAgICAgICAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CiAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IDA7CiAgICAgICAgICAgICBmb3Ig
KFN0cnVjdHVyZSogY3VycmVudCA9IGhlYWQ7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5z
dG9yZWRQcm90b3R5cGUoKS5pc051bGwoKSA/IDAgOiBhc09iamVjdChjdXJyZW50LT5zdG9yZWRQ
cm90b3R5cGUoKSktPnN0cnVjdHVyZSgpKQogICAgICAgICAgICAgICAgICsrc2l6ZTsKQEAgLTc1
LDEzICs3NSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAgICAgc2l6ZV90IGkgPSAw
OwogICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSBoZWFkOyBjdXJyZW50OyBj
dXJyZW50ID0gY3VycmVudC0+c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxsKCkgPyAwIDogYXNPYmpl
Y3QoY3VycmVudC0+c3RvcmVkUHJvdG90eXBlKCkpLT5zdHJ1Y3R1cmUoKSkKLSAgICAgICAgICAg
ICAgICBtX3ZlY3RvcltpKytdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBjdXJyZW50KTsKKyAgICAg
ICAgICAgICAgICBtX3ZlY3RvcltpKytdLnNldCh2bSwgdGhpcywgY3VycmVudCk7CiAgICAgICAg
IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CiAgICAgICAgIAotICAgICAgICBTdHJ1Y3R1cmVDaGFpbihKU0dsb2JhbERhdGEmLCBT
dHJ1Y3R1cmUqKTsKKyAgICAgICAgU3RydWN0dXJlQ2hhaW4oVk0mLCBTdHJ1Y3R1cmUqKTsKICAg
ICAgICAgT3duQXJyYXlQdHI8V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gPiBtX3ZlY3RvcjsKICAg
ICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDM1ICszMSwz
NSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlOjpj
cmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBD
bGFzc0luZm8qIGNsYXNzSW5mbywgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwgdW5zaWduZWQg
aW5saW5lQ2FwYWNpdHkpCitpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNyZWF0ZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjb25z
dCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSkKIHsKLSAgICBBU1NF
UlQoZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUpOworICAgIEFTU0VSVCh2bS5zdHJ1Y3R1
cmVTdHJ1Y3R1cmUpOwogICAgIEFTU0VSVChjbGFzc0luZm8pOwotICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJlPihnbG9iYWxEYXRh
LmhlYXApKSBTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5
cGVJbmZvLCBjbGFzc0luZm8sIGluZGV4aW5nVHlwZSwgaW5saW5lQ2FwYWNpdHkpOwotICAgIHN0
cnVjdHVyZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmU+KHZtLmhlYXApKSBT
dHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCB0eXBlSW5mbywgY2xhc3NJbmZv
LCBpbmRleGluZ1R5cGUsIGlubGluZUNhcGFjaXR5KTsKKyAgICBzdHJ1Y3R1cmUtPmZpbmlzaENy
ZWF0aW9uKHZtKTsKICAgICByZXR1cm4gc3RydWN0dXJlOwogfQogCi1pbmxpbmUgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OmNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitp
bmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0pCiB7Ci0g
ICAgQVNTRVJUKCFnbG9iYWxEYXRhLnN0cnVjdHVyZVN0cnVjdHVyZSk7Ci0gICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmU+KGdsb2Jh
bERhdGEuaGVhcCkpIFN0cnVjdHVyZShnbG9iYWxEYXRhKTsKLSAgICBzdHJ1Y3R1cmUtPmZpbmlz
aENyZWF0aW9uKGdsb2JhbERhdGEsIENyZWF0aW5nRWFybHlDZWxsKTsKKyAgICBBU1NFUlQoIXZt
LnN0cnVjdHVyZVN0cnVjdHVyZSk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmU+KHZtLmhlYXApKSBTdHJ1Y3R1cmUodm0pOwor
ICAgIHN0cnVjdHVyZS0+ZmluaXNoQ3JlYXRpb24odm0sIENyZWF0aW5nRWFybHlDZWxsKTsKICAg
ICByZXR1cm4gc3RydWN0dXJlOwogfQogCi1pbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNy
ZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFN0cnVjdHVyZSogc3RydWN0dXJl
KQoraW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjcmVhdGUoVk0mIHZtLCBjb25zdCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBBU1NFUlQoZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1
Y3R1cmUpOwotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8U3RydWN0dXJlPihnbG9iYWxEYXRhLmhlYXApKSBTdHJ1Y3R1cmUoZ2xvYmFsRGF0
YSwgc3RydWN0dXJlKTsKLSAgICBuZXdTdHJ1Y3R1cmUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOworICAgIEFTU0VSVCh2bS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUpOworICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJlPih2bS5o
ZWFwKSkgU3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpOworICAgIG5ld1N0cnVjdHVyZS0+ZmluaXNo
Q3JlYXRpb24odm0pOwogICAgIHJldHVybiBuZXdTdHJ1Y3R1cmU7CiB9CiAKLWlubGluZSBQcm9w
ZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpn
ZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEFTU0VSVChzdHJ1
Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0
eU1hcElmTmVjZXNzYXJ5KGdsb2JhbERhdGEpOworICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJ
Zk5lY2Vzc2FyeSh2bSk7CiAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVy
biBpbnZhbGlkT2Zmc2V0OwogCkBAIC02NywxMCArNjcsMTAgQEAgaW5saW5lIFByb3BlcnR5T2Zm
c2V0IFN0cnVjdHVyZTo6Z2V0KEpTRwogICAgIHJldHVybiBlbnRyeSA/IGVudHJ5LT5vZmZzZXQg
OiBpbnZhbGlkT2Zmc2V0OwogfQogCi1pbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpn
ZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSkKK2lu
bGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIGNvbnN0IFdURjo6U3Ry
aW5nJiBuYW1lKQogewogICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNf
aW5mbyk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KGdsb2JhbERhdGEp
OworICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSk7CiAgICAgaWYgKCFw
cm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwogCkBAIC0xMTMs
MTIgKzExMywxMiBAQCBpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6OnRyYW5zaXRpdmVseVRyYW5zCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1pbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OnNldEVudW1lcmF0
aW9uQ2FjaGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
KiBlbnVtZXJhdGlvbkNhY2hlKQoraW5saW5lIHZvaWQgU3RydWN0dXJlOjpzZXRFbnVtZXJhdGlv
bkNhY2hlKFZNJiB2bSwgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogZW51bWVyYXRpb25DYWNoZSkK
IHsKICAgICBBU1NFUlQoIWlzRGljdGlvbmFyeSgpKTsKICAgICBpZiAoIXR5cGVJbmZvKCkuc3Ry
dWN0dXJlSGFzUmFyZURhdGEoKSkKLSAgICAgICAgYWxsb2NhdGVSYXJlRGF0YShnbG9iYWxEYXRh
KTsKLSAgICByYXJlRGF0YSgpLT5zZXRFbnVtZXJhdGlvbkNhY2hlKGdsb2JhbERhdGEsIHRoaXMs
IGVudW1lcmF0aW9uQ2FjaGUpOworICAgICAgICBhbGxvY2F0ZVJhcmVEYXRhKHZtKTsKKyAgICBy
YXJlRGF0YSgpLT5zZXRFbnVtZXJhdGlvbkNhY2hlKHZtLCB0aGlzLCBlbnVtZXJhdGlvbkNhY2hl
KTsKIH0KIAogaW5saW5lIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIFN0cnVjdHVyZTo6ZW51bWVy
YXRpb25DYWNoZSgpCkBAIC0xNDIsMTkgKzE0MiwxOSBAQCBpbmxpbmUgSlNWYWx1ZSBTdHJ1Y3R1
cmU6OnByb3RvdHlwZUZvckxvCiAgICAgcmV0dXJuIHByb3RvdHlwZUZvckxvb2t1cChleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogfQogCi1pbmxpbmUgU3RydWN0dXJlQ2hhaW4qIFN0cnVj
dHVyZTo6cHJvdG90eXBlQ2hhaW4oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAoraW5saW5lIFN0cnVjdHVyZUNoYWluKiBTdHJ1Y3R1
cmU6OnByb3RvdHlwZUNoYWluKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkg
Y29uc3QKIHsKICAgICAvLyBXZSBjYWNoZSBvdXIgcHJvdG90eXBlIGNoYWluIHNvIG91ciBjbGll
bnRzIGNhbiBzaGFyZSBpdC4KICAgICBpZiAoIWlzVmFsaWQoZ2xvYmFsT2JqZWN0LCBtX2NhY2hl
ZFByb3RvdHlwZUNoYWluLmdldCgpKSkgewogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHBy
b3RvdHlwZUZvckxvb2t1cChnbG9iYWxPYmplY3QpOwotICAgICAgICBtX2NhY2hlZFByb3RvdHlw
ZUNoYWluLnNldChnbG9iYWxEYXRhLCB0aGlzLCBTdHJ1Y3R1cmVDaGFpbjo6Y3JlYXRlKGdsb2Jh
bERhdGEsIHByb3RvdHlwZS5pc051bGwoKSA/IDAgOiBhc09iamVjdChwcm90b3R5cGUpLT5zdHJ1
Y3R1cmUoKSkpOworICAgICAgICBtX2NhY2hlZFByb3RvdHlwZUNoYWluLnNldCh2bSwgdGhpcywg
U3RydWN0dXJlQ2hhaW46OmNyZWF0ZSh2bSwgcHJvdG90eXBlLmlzTnVsbCgpID8gMCA6IGFzT2Jq
ZWN0KHByb3RvdHlwZSktPnN0cnVjdHVyZSgpKSk7CiAgICAgfQogICAgIHJldHVybiBtX2NhY2hl
ZFByb3RvdHlwZUNoYWluLmdldCgpOwogfQogCiBpbmxpbmUgU3RydWN0dXJlQ2hhaW4qIFN0cnVj
dHVyZTo6cHJvdG90eXBlQ2hhaW4oRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAgIHJldHVy
biBwcm90b3R5cGVDaGFpbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSk7CisgICAgcmV0dXJuIHByb3RvdHlwZUNoYWluKGV4ZWMtPnZtKCksIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSk7CiB9CiAKIGlubGluZSBib29sIFN0cnVjdHVyZTo6aXNWYWxp
ZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVDaGFpbiogY2FjaGVkUHJv
dG90eXBlQ2hhaW4pIGNvbnN0CkBAIC0yMDAsNyArMjAwLDcgQEAgaW5saW5lIGJvb2wgU3RydWN0
dXJlOjpwdXRXaWxsR3Jvd091dE9mTAogCiBBTFdBWVNfSU5MSU5FIFdyaXRlQmFycmllcjxQcm9w
ZXJ0eVRhYmxlPiYgU3RydWN0dXJlOjpwcm9wZXJ0eVRhYmxlKCkKIHsKLSAgICBBU1NFUlQoIWds
b2JhbE9iamVjdCgpIHx8ICFnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLmhlYXAuaXNCdXN5
KCkpOworICAgIEFTU0VSVCghZ2xvYmFsT2JqZWN0KCkgfHwgIWdsb2JhbE9iamVjdCgpLT52bSgp
LmhlYXAuaXNCdXN5KCkpOwogICAgIHJldHVybiBtX3Byb3BlcnR5VGFibGVVbnNhZmU7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVS
YXJlRGF0YS5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMzkgKzMz
LDM5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gU3RydWN0dXJlUmFyZURh
dGE6OnNfaW5mbyA9IHsgIlN0cnVjdHVyZVJhcmVEYXRhIiwgMCwgMCwgMCwgQ1JFQVRFX01FVEhP
RF9UQUJMRShTdHJ1Y3R1cmVSYXJlRGF0YSkgfTsKIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmVSYXJl
RGF0YTo6Y3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCitTdHJ1Y3R1cmUqIFN0cnVj
dHVyZVJhcmVEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsKLSAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENvbXBv
dW5kVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDb21wb3VuZFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiB9CiAKLVN0cnVjdHVyZVJhcmVEYXRhKiBT
dHJ1Y3R1cmVSYXJlRGF0YTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0
dXJlKiBwcmV2aW91cykKK1N0cnVjdHVyZVJhcmVEYXRhKiBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y3Jl
YXRlKFZNJiB2bSwgU3RydWN0dXJlKiBwcmV2aW91cykKIHsKLSAgICBTdHJ1Y3R1cmVSYXJlRGF0
YSogcmFyZURhdGEgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmVSYXJlRGF0
YT4oZ2xvYmFsRGF0YS5oZWFwKSkgU3RydWN0dXJlUmFyZURhdGEoZ2xvYmFsRGF0YSwgcHJldmlv
dXMpOwotICAgIHJhcmVEYXRhLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBTdHJ1
Y3R1cmVSYXJlRGF0YSogcmFyZURhdGEgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1
Y3R1cmVSYXJlRGF0YT4odm0uaGVhcCkpIFN0cnVjdHVyZVJhcmVEYXRhKHZtLCBwcmV2aW91cyk7
CisgICAgcmFyZURhdGEtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gcmFyZURhdGE7
CiB9CiAKLVN0cnVjdHVyZVJhcmVEYXRhKiBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2xvbmUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTdHJ1Y3R1cmVSYXJlRGF0YSogb3RoZXIpCitTdHJ1
Y3R1cmVSYXJlRGF0YSogU3RydWN0dXJlUmFyZURhdGE6OmNsb25lKFZNJiB2bSwgY29uc3QgU3Ry
dWN0dXJlUmFyZURhdGEqIG90aGVyKQogewotICAgIFN0cnVjdHVyZVJhcmVEYXRhKiBuZXdSYXJl
RGF0YSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cnVjdHVyZVJhcmVEYXRhPihnbG9i
YWxEYXRhLmhlYXApKSBTdHJ1Y3R1cmVSYXJlRGF0YShnbG9iYWxEYXRhLCBvdGhlcik7Ci0gICAg
bmV3UmFyZURhdGEtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIFN0cnVjdHVyZVJh
cmVEYXRhKiBuZXdSYXJlRGF0YSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cnVjdHVy
ZVJhcmVEYXRhPih2bS5oZWFwKSkgU3RydWN0dXJlUmFyZURhdGEodm0sIG90aGVyKTsKKyAgICBu
ZXdSYXJlRGF0YS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiBuZXdSYXJlRGF0YTsK
IH0KIAotU3RydWN0dXJlUmFyZURhdGE6OlN0cnVjdHVyZVJhcmVEYXRhKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgU3RydWN0dXJlKiBwcmV2aW91cykKLSAgICA6IEpTQ2VsbChnbG9iYWxEYXRh
LCBnbG9iYWxEYXRhLnN0cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlLmdldCgpKQorU3RydWN0dXJl
UmFyZURhdGE6OlN0cnVjdHVyZVJhcmVEYXRhKFZNJiB2bSwgU3RydWN0dXJlKiBwcmV2aW91cykK
KyAgICA6IEpTQ2VsbCh2bSwgdm0uc3RydWN0dXJlUmFyZURhdGFTdHJ1Y3R1cmUuZ2V0KCkpCiB7
CiAgICAgaWYgKHByZXZpb3VzKQotICAgICAgICBtX3ByZXZpb3VzLnNldChnbG9iYWxEYXRhLCB0
aGlzLCBwcmV2aW91cyk7CisgICAgICAgIG1fcHJldmlvdXMuc2V0KHZtLCB0aGlzLCBwcmV2aW91
cyk7CiB9CiAKLVN0cnVjdHVyZVJhcmVEYXRhOjpTdHJ1Y3R1cmVSYXJlRGF0YShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIGNvbnN0IFN0cnVjdHVyZVJhcmVEYXRhKiBvdGhlcikKLSAgICA6IEpT
Q2VsbChnbG9iYWxEYXRhLCBvdGhlci0+c3RydWN0dXJlKCkpCitTdHJ1Y3R1cmVSYXJlRGF0YTo6
U3RydWN0dXJlUmFyZURhdGEoVk0mIHZtLCBjb25zdCBTdHJ1Y3R1cmVSYXJlRGF0YSogb3RoZXIp
CisgICAgOiBKU0NlbGwodm0sIG90aGVyLT5zdHJ1Y3R1cmUoKSkKIHsKICAgICBpZiAob3RoZXIt
PnByZXZpb3VzSUQoKSkKLSAgICAgICAgbV9wcmV2aW91cy5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
b3RoZXItPnByZXZpb3VzSUQoKSk7CisgICAgICAgIG1fcHJldmlvdXMuc2V0KHZtLCB0aGlzLCBv
dGhlci0+cHJldmlvdXNJRCgpKTsKICAgICBpZiAob3RoZXItPm9iamVjdFRvU3RyaW5nVmFsdWUo
KSkKLSAgICAgICAgbV9vYmplY3RUb1N0cmluZ1ZhbHVlLnNldChnbG9iYWxEYXRhLCB0aGlzLCBv
dGhlci0+b2JqZWN0VG9TdHJpbmdWYWx1ZSgpKTsKKyAgICAgICAgbV9vYmplY3RUb1N0cmluZ1Zh
bHVlLnNldCh2bSwgdGhpcywgb3RoZXItPm9iamVjdFRvU3RyaW5nVmFsdWUoKSk7CiB9CiAKIHZv
aWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZVJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlUmFyZURhdGEuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
MzgsMzEgKzM4LDMxIEBAIGNsYXNzIFN0cnVjdHVyZTsKIGNsYXNzIFN0cnVjdHVyZVJhcmVEYXRh
IDogcHVibGljIEpTQ2VsbCB7CiAgICAgZnJpZW5kIGNsYXNzIFN0cnVjdHVyZTsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgU3RydWN0dXJlUmFyZURhdGEqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBTdHJ1
Y3R1cmUqKTsKLSAgICBzdGF0aWMgU3RydWN0dXJlUmFyZURhdGEqIGNsb25lKEpTR2xvYmFsRGF0
YSYsIGNvbnN0IFN0cnVjdHVyZVJhcmVEYXRhKiBvdGhlcik7CisgICAgc3RhdGljIFN0cnVjdHVy
ZVJhcmVEYXRhKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgU3RydWN0dXJl
UmFyZURhdGEqIGNsb25lKFZNJiwgY29uc3QgU3RydWN0dXJlUmFyZURhdGEqIG90aGVyKTsKIAog
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAot
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmLCBKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsK
IAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIFN0cnVjdHVyZVJhcmVEYXRhIHNob3VsZCBh
bHNvIGJlIGNsb25lZCB3aGVuIGNsb25pbmcgdGhlIG93bmVyIFN0cnVjdHVyZS4KICAgICBib29s
IG5lZWRzQ2xvbmluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBTdHJ1Y3R1cmUq
IHByZXZpb3VzSUQoKSBjb25zdDsKLSAgICB2b2lkIHNldFByZXZpb3VzSUQoSlNHbG9iYWxEYXRh
JiwgU3RydWN0dXJlKiB0cmFuc2l0aW9uLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIHNldFByZXZp
b3VzSUQoVk0mLCBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24sIFN0cnVjdHVyZSopOwogICAgIHZvaWQg
Y2xlYXJQcmV2aW91c0lEKCk7CiAKICAgICBKU1N0cmluZyogb2JqZWN0VG9TdHJpbmdWYWx1ZSgp
IGNvbnN0OwotICAgIHZvaWQgc2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShKU0dsb2JhbERhdGEmLCBj
b25zdCBKU0NlbGwqIG93bmVyLCBKU1N0cmluZyogdmFsdWUpOworICAgIHZvaWQgc2V0T2JqZWN0
VG9TdHJpbmdWYWx1ZShWTSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTU3RyaW5nKiB2YWx1ZSk7
CiAKICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBlbnVtZXJhdGlvbkNhY2hlKCk7Ci0gICAg
dm9pZCBzZXRFbnVtZXJhdGlvbkNhY2hlKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFN0cnVjdHVyZSog
b3duZXIsIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIHZhbHVlKTsKKyAgICB2b2lkIHNldEVudW1l
cmF0aW9uQ2FjaGUoVk0mLCBjb25zdCBTdHJ1Y3R1cmUqIG93bmVyLCBKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yKiB2YWx1ZSk7CiAKICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOwogCiBwcml2YXRlOgotICAgIFN0cnVjdHVyZVJhcmVEYXRhKEpTR2xvYmFsRGF0
YSYsIFN0cnVjdHVyZSopOwotICAgIFN0cnVjdHVyZVJhcmVEYXRhKEpTR2xvYmFsRGF0YSYsIGNv
bnN0IFN0cnVjdHVyZVJhcmVEYXRhKik7CisgICAgU3RydWN0dXJlUmFyZURhdGEoVk0mLCBTdHJ1
Y3R1cmUqKTsKKyAgICBTdHJ1Y3R1cmVSYXJlRGF0YShWTSYsIGNvbnN0IFN0cnVjdHVyZVJhcmVE
YXRhKik7CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVy
cmlkZXNWaXNpdENoaWxkcmVuIHwgSlNDZWxsOjpTdHJ1Y3R1cmVGbGFnczsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURh
dGFJbmxpbmVzLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5
ICszNSw5IEBAIGlubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZVJhcmVEYXRhOjpwcmUKICAgICBy
ZXR1cm4gbV9wcmV2aW91cy5nZXQoKTsKIH0KIAotaW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURh
dGE6OnNldFByZXZpb3VzSUQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHRy
YW5zaXRpb24sIFN0cnVjdHVyZSogc3RydWN0dXJlKQoraW5saW5lIHZvaWQgU3RydWN0dXJlUmFy
ZURhdGE6OnNldFByZXZpb3VzSUQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogewotICAgIG1fcHJldmlvdXMuc2V0KGdsb2JhbERhdGEsIHRyYW5z
aXRpb24sIHN0cnVjdHVyZSk7CisgICAgbV9wcmV2aW91cy5zZXQodm0sIHRyYW5zaXRpb24sIHN0
cnVjdHVyZSk7CiB9CiAKIGlubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpjbGVhclByZXZp
b3VzSUQoKQpAQCAtNTAsOSArNTAsOSBAQCBpbmxpbmUgSlNTdHJpbmcqIFN0cnVjdHVyZVJhcmVE
YXRhOjpvYmplCiAgICAgcmV0dXJuIG1fb2JqZWN0VG9TdHJpbmdWYWx1ZS5nZXQoKTsKIH0KIAot
aW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNldE9iamVjdFRvU3RyaW5nVmFsdWUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBKU0NlbGwqIG93bmVyLCBKU1N0cmluZyogdmFs
dWUpCitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0T2JqZWN0VG9TdHJpbmdWYWx1
ZShWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTU3RyaW5nKiB2YWx1ZSkKIHsKLSAgICBt
X29iamVjdFRvU3RyaW5nVmFsdWUuc2V0KGdsb2JhbERhdGEsIG93bmVyLCB2YWx1ZSk7CisgICAg
bV9vYmplY3RUb1N0cmluZ1ZhbHVlLnNldCh2bSwgb3duZXIsIHZhbHVlKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVUcmFuc2l0aW9uVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkocmV2aXNpb24gMTQ4NjM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBAQCBwdWJsaWM6CiAgICAgICAgIFdlYWtT
ZXQ6OmRlYWxsb2NhdGUoaW1wbCk7CiAgICAgfQogCi0gICAgaW5saW5lIHZvaWQgYWRkKEpTR2xv
YmFsRGF0YSYsIFN0cnVjdHVyZSopOworICAgIGlubGluZSB2b2lkIGFkZChWTSYsIFN0cnVjdHVy
ZSopOwogICAgIGlubGluZSBib29sIGNvbnRhaW5zKFN0cmluZ0ltcGwqIHJlcCwgdW5zaWduZWQg
YXR0cmlidXRlcykgY29uc3Q7CiAgICAgaW5saW5lIFN0cnVjdHVyZSogZ2V0KFN0cmluZ0ltcGwq
IHJlcCwgdW5zaWduZWQgYXR0cmlidXRlcykgY29uc3Q7CiAKQEAgLTE3Nyw3ICsxNzcsNyBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRTaW5n
bGVUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHZv
aWQgc2V0U2luZ2xlVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKGlzVXNpbmdTaW5nbGVTbG90KCkpOwogICAgICAgICBpZiAoV2Vha0lt
cGwqIGltcGwgPSB0aGlzLT53ZWFrSW1wbCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYs
MTkgKzM0NiwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVk
ZWYgSlNDZWxsIEJhc2U7CiAKLSAgICAgICAgc3RhdGljIFNoYXJlZFN5bWJvbFRhYmxlKiBjcmVh
dGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICBzdGF0aWMgU2hhcmVkU3ltYm9s
VGFibGUqIGNyZWF0ZShWTSYgdm0pCiAgICAgICAgIHsKLSAgICAgICAgICAgIFNoYXJlZFN5bWJv
bFRhYmxlKiBzaGFyZWRTeW1ib2xUYWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFNo
YXJlZFN5bWJvbFRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBTaGFyZWRTeW1ib2xUYWJsZShnbG9i
YWxEYXRhKTsKLSAgICAgICAgICAgIHNoYXJlZFN5bWJvbFRhYmxlLT5maW5pc2hDcmVhdGlvbihn
bG9iYWxEYXRhKTsKKyAgICAgICAgICAgIFNoYXJlZFN5bWJvbFRhYmxlKiBzaGFyZWRTeW1ib2xU
YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFNoYXJlZFN5bWJvbFRhYmxlPih2bS5o
ZWFwKSkgU2hhcmVkU3ltYm9sVGFibGUodm0pOworICAgICAgICAgICAgc2hhcmVkU3ltYm9sVGFi
bGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgICAgIHJldHVybiBzaGFyZWRTeW1ib2xU
YWJsZTsKICAgICAgICAgfQogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0
aW9uID0gdHJ1ZTsKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSW1tb3J0YWxTdHJ1Y3R1
cmUgPSB0cnVlOwogICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAg
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQor
ICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhMZWFmVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKExlYWZUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8p
OwogICAgICAgICB9CiAKICAgICAgICAgYm9vbCB1c2VzTm9uU3RyaWN0RXZhbCgpIHsgcmV0dXJu
IG1fdXNlc05vblN0cmljdEV2YWw7IH0KQEAgLTM4Myw4ICszODMsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsK
IAogICAgIHByaXZhdGU6Ci0gICAgICAgIFNoYXJlZFN5bWJvbFRhYmxlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKLSAgICAgICAgICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEu
c2hhcmVkU3ltYm9sVGFibGVTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgIFNoYXJlZFN5bWJvbFRh
YmxlKFZNJiB2bSkKKyAgICAgICAgICAgIDogSlNDZWxsKHZtLCB2bS5zaGFyZWRTeW1ib2xUYWJs
ZVN0cnVjdHVyZS5nZXQoKSkKICAgICAgICAgICAgICwgbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGlu
Z1RoaXMoMCkKICAgICAgICAgICAgICwgbV91c2VzTm9uU3RyaWN0RXZhbChmYWxzZSkKICAgICAg
ICAgICAgICwgbV9jYXB0dXJlU3RhcnQoMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAJKHJldmlzaW9uIDE0ODYzOCkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NjggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKwor
I2luY2x1ZGUgIkFyZ0xpc3QuaCIKKyNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKKyNpbmNsdWRlICJD
b21tb25JZGVudGlmaWVycy5oIgorI2luY2x1ZGUgIkRGR0xvbmdMaXZlZFN0YXRlLmgiCisjaW5j
bHVkZSAiRGVidWdnZXJBY3RpdmF0aW9uLmgiCisjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rv
ci5oIgorI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgorI2luY2x1ZGUgIkdldHRlclNl
dHRlci5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJIb3N0Q2FsbFJldHVyblZhbHVl
LmgiCisjaW5jbHVkZSAiSW5jcmVtZW50YWxTd2VlcGVyLmgiCisjaW5jbHVkZSAiSW50ZXJwcmV0
ZXIuaCIKKyNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKKyNpbmNsdWRlICJKU0FQSVZhbHVlV3Jh
cHBlci5oIgorI2luY2x1ZGUgIkpTQXJyYXkuaCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisj
aW5jbHVkZSAiSlNMb2NrLmgiCisjaW5jbHVkZSAiSlNOYW1lU2NvcGUuaCIKKyNpbmNsdWRlICJK
U05vdEFuT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgorI2lu
Y2x1ZGUgIkpTV2l0aFNjb3BlLmgiCisjaW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNsdWRlICJMb29r
dXAuaCIKKyNpbmNsdWRlICJOb2Rlcy5oIgorI2luY2x1ZGUgIlBhcnNlckFyZW5hLmgiCisjaW5j
bHVkZSAiUmVnRXhwQ2FjaGUuaCIKKyNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKKyNpbmNsdWRl
ICJTb3VyY2VQcm92aWRlckNhY2hlLmgiCisjaW5jbHVkZSAiU3RyaWN0RXZhbEFjdGl2YXRpb24u
aCIKKyNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCisjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxv
Y2suaCIKKyNpbmNsdWRlIDx3dGYvUHJvY2Vzc0lELmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisjaW5jbHVkZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKKyNlbmRpZgorCisjaWYg
RU5BQkxFKFJFR0VYUF9UUkFDSU5HKQorI2luY2x1ZGUgIlJlZ0V4cC5oIgorI2VuZGlmCisKKyNp
ZiBVU0UoQ0YpCisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyNl
bmRpZgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgSlNDIHsKKworZXh0ZXJu
IGNvbnN0IEhhc2hUYWJsZSBhcnJheUNvbnN0cnVjdG9yVGFibGU7CitleHRlcm4gY29uc3QgSGFz
aFRhYmxlIGFycmF5UHJvdG90eXBlVGFibGU7CitleHRlcm4gY29uc3QgSGFzaFRhYmxlIGJvb2xl
YW5Qcm90b3R5cGVUYWJsZTsKK2V4dGVybiBjb25zdCBIYXNoVGFibGUganNvblRhYmxlOworZXh0
ZXJuIGNvbnN0IEhhc2hUYWJsZSBkYXRlVGFibGU7CitleHRlcm4gY29uc3QgSGFzaFRhYmxlIGRh
dGVDb25zdHJ1Y3RvclRhYmxlOworZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBlcnJvclByb3RvdHlw
ZVRhYmxlOworZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBnbG9iYWxPYmplY3RUYWJsZTsKK2V4dGVy
biBjb25zdCBIYXNoVGFibGUgbWF0aFRhYmxlOworZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBudW1i
ZXJDb25zdHJ1Y3RvclRhYmxlOworZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBudW1iZXJQcm90b3R5
cGVUYWJsZTsKK0pTX0VYUE9SVERBVEEgZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBvYmplY3RDb25z
dHJ1Y3RvclRhYmxlOworZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBwcml2YXRlTmFtZVByb3RvdHlw
ZVRhYmxlOworZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSByZWdFeHBUYWJsZTsKK2V4dGVybiBjb25z
dCBIYXNoVGFibGUgcmVnRXhwQ29uc3RydWN0b3JUYWJsZTsKK2V4dGVybiBjb25zdCBIYXNoVGFi
bGUgcmVnRXhwUHJvdG90eXBlVGFibGU7CitleHRlcm4gY29uc3QgSGFzaFRhYmxlIHN0cmluZ0Nv
bnN0cnVjdG9yVGFibGU7CisKKy8vIE5vdGU6IFBsYXRmb3JtLmggd2lsbCBlbmZvcmNlIHRoYXQg
RU5BQkxFKEFTU0VNQkxFUikgaXMgdHJ1ZSBpZiBlaXRoZXIKKy8vIEVOQUJMRShKSVQpIG9yIEVO
QUJMRShZQVJSX0pJVCkgb3IgYm90aCBhcmUgZW5hYmxlZC4gVGhlIGNvZGUgYmVsb3cKKy8vIGp1
c3QgY2hlY2tzIGZvciBFTkFCTEUoSklUKSBvciBFTkFCTEUoWUFSUl9KSVQpIHdpdGggdGhpcyBw
cmVtaXNlIGluIG1pbmQuCisKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKQorc3RhdGljIGJvb2wgZW5h
YmxlQXNzZW1ibGVyKEV4ZWN1dGFibGVBbGxvY2F0b3ImIGV4ZWN1dGFibGVBbGxvY2F0b3IpCit7
CisgICAgaWYgKCFleGVjdXRhYmxlQWxsb2NhdG9yLmlzVmFsaWQoKSB8fCAoIU9wdGlvbnM6OnVz
ZUpJVCgpICYmICFPcHRpb25zOjp1c2VSZWdFeHBKSVQoKSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworI2lmIFVTRShDRikKKyNpZiBDT01QSUxFUihHQ0MpICYmICFDT01QSUxFUihDTEFORykK
KyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgb25jZSB0aGUgRVdTIGhhdmUgYmVlbiB1cGdyYWRl
ZCB0byBMTFZNLgorICAgIC8vIFdvcmsgYXJvdW5kIGEgYnVnIG9mIEdDQyB3aXRoIHN0cmljdC1h
bGlhc2luZy4KKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNhblVzZUpJVEtleVJldGFpbihB
ZG9wdENGLCBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nKDAgLCAiSmF2YVNjcmlwdENvcmVVc2VK
SVQiLCBrQ0ZTdHJpbmdFbmNvZGluZ01hY1JvbWFuKSk7CisgICAgQ0ZTdHJpbmdSZWYgY2FuVXNl
SklUS2V5ID0gY2FuVXNlSklUS2V5UmV0YWluLmdldCgpOworI2Vsc2UKKyAgICBDRlN0cmluZ1Jl
ZiBjYW5Vc2VKSVRLZXkgPSBDRlNUUigiSmF2YVNjcmlwdENvcmVVc2VKSVQiKTsKKyNlbmRpZiAv
LyBDT01QSUxFUihHQ0MpICYmICFDT01QSUxFUihDTEFORykKKyAgICBSZXRhaW5QdHI8Q0ZCb29s
ZWFuUmVmPiBjYW5Vc2VKSVQoQWRvcHRDRiwgKENGQm9vbGVhblJlZilDRlByZWZlcmVuY2VzQ29w
eUFwcFZhbHVlKGNhblVzZUpJVEtleSwga0NGUHJlZmVyZW5jZXNDdXJyZW50QXBwbGljYXRpb24p
KTsKKyAgICBpZiAoY2FuVXNlSklUKQorICAgICAgICByZXR1cm4ga0NGQm9vbGVhblRydWUgPT0g
Y2FuVXNlSklULmdldCgpOworI2VuZGlmCisKKyNpZiBVU0UoQ0YpIHx8IE9TKFVOSVgpCisgICAg
Y2hhciogY2FuVXNlSklUU3RyaW5nID0gZ2V0ZW52KCJKYXZhU2NyaXB0Q29yZVVzZUpJVCIpOwor
ICAgIHJldHVybiAhY2FuVXNlSklUU3RyaW5nIHx8IGF0b2koY2FuVXNlSklUU3RyaW5nKTsKKyNl
bHNlCisgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKK30KKyNlbmRpZiAvLyBFTkFCTEUoIUFTU0VN
QkxFUikKKworSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cGUgZ2xvYmFs
RGF0YVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQorICAgIDogbV9hcGlMb2NrKGFkb3B0UmVmKG5l
dyBKU0xvY2sodGhpcykpKQorI2lmIEVOQUJMRShBU1NFTUJMRVIpCisgICAgLCBleGVjdXRhYmxl
QWxsb2NhdG9yKCp0aGlzKQorI2VuZGlmCisgICAgLCBoZWFwKHRoaXMsIGhlYXBUeXBlKQorICAg
ICwgZ2xvYmFsRGF0YVR5cGUoZ2xvYmFsRGF0YVR5cGUpCisgICAgLCBjbGllbnREYXRhKDApCisg
ICAgLCB0b3BDYWxsRnJhbWUoQ2FsbEZyYW1lOjpub0NhbGxlcigpKQorICAgICwgYXJyYXlDb25z
dHJ1Y3RvclRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmFycmF5Q29uc3RydWN0b3JUYWJs
ZSkpCisgICAgLCBhcnJheVByb3RvdHlwZVRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmFy
cmF5UHJvdG90eXBlVGFibGUpKQorICAgICwgYm9vbGVhblByb3RvdHlwZVRhYmxlKGZhc3ROZXc8
SGFzaFRhYmxlPihKU0M6OmJvb2xlYW5Qcm90b3R5cGVUYWJsZSkpCisgICAgLCBkYXRlVGFibGUo
ZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6ZGF0ZVRhYmxlKSkKKyAgICAsIGRhdGVDb25zdHJ1Y3Rv
clRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmRhdGVDb25zdHJ1Y3RvclRhYmxlKSkKKyAg
ICAsIGVycm9yUHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6ZXJyb3JQcm90
b3R5cGVUYWJsZSkpCisgICAgLCBnbG9iYWxPYmplY3RUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4o
SlNDOjpnbG9iYWxPYmplY3RUYWJsZSkpCisgICAgLCBqc29uVGFibGUoZmFzdE5ldzxIYXNoVGFi
bGU+KEpTQzo6anNvblRhYmxlKSkKKyAgICAsIG1hdGhUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4o
SlNDOjptYXRoVGFibGUpKQorICAgICwgbnVtYmVyQ29uc3RydWN0b3JUYWJsZShmYXN0TmV3PEhh
c2hUYWJsZT4oSlNDOjpudW1iZXJDb25zdHJ1Y3RvclRhYmxlKSkKKyAgICAsIG51bWJlclByb3Rv
dHlwZVRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6Om51bWJlclByb3RvdHlwZVRhYmxlKSkK
KyAgICAsIG9iamVjdENvbnN0cnVjdG9yVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6b2Jq
ZWN0Q29uc3RydWN0b3JUYWJsZSkpCisgICAgLCBwcml2YXRlTmFtZVByb3RvdHlwZVRhYmxlKGZh
c3ROZXc8SGFzaFRhYmxlPihKU0M6OnByaXZhdGVOYW1lUHJvdG90eXBlVGFibGUpKQorICAgICwg
cmVnRXhwVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6cmVnRXhwVGFibGUpKQorICAgICwg
cmVnRXhwQ29uc3RydWN0b3JUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpyZWdFeHBDb25z
dHJ1Y3RvclRhYmxlKSkKKyAgICAsIHJlZ0V4cFByb3RvdHlwZVRhYmxlKGZhc3ROZXc8SGFzaFRh
YmxlPihKU0M6OnJlZ0V4cFByb3RvdHlwZVRhYmxlKSkKKyAgICAsIHN0cmluZ0NvbnN0cnVjdG9y
VGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6c3RyaW5nQ29uc3RydWN0b3JUYWJsZSkpCisg
ICAgLCBpZGVudGlmaWVyVGFibGUoZ2xvYmFsRGF0YVR5cGUgPT0gRGVmYXVsdCA/IHd0ZlRocmVh
ZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkgOiBjcmVhdGVJZGVudGlmaWVyVGFibGUo
KSkKKyAgICAsIHByb3BlcnR5TmFtZXMobmV3IENvbW1vbklkZW50aWZpZXJzKHRoaXMpKQorICAg
ICwgZW1wdHlMaXN0KG5ldyBNYXJrZWRBcmd1bWVudEJ1ZmZlcikKKyAgICAsIHBhcnNlckFyZW5h
KGFkb3B0UHRyKG5ldyBQYXJzZXJBcmVuYSkpCisgICAgLCBrZXl3b3JkcyhhZG9wdFB0cihuZXcg
S2V5d29yZHModGhpcykpKQorICAgICwgaW50ZXJwcmV0ZXIoMCkKKyAgICAsIGpzQXJyYXlDbGFz
c0luZm8oJkpTQXJyYXk6OnNfaW5mbykKKyAgICAsIGpzRmluYWxPYmplY3RDbGFzc0luZm8oJkpT
RmluYWxPYmplY3Q6OnNfaW5mbykKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAsIHNpemVPZkxh
c3RTY3JhdGNoQnVmZmVyKDApCisjZW5kaWYKKyAgICAsIGR5bmFtaWNHbG9iYWxPYmplY3QoMCkK
KyAgICAsIGNhY2hlZFVUQ09mZnNldChRTmFOKQorICAgICwgbV9lbmFibGVkUHJvZmlsZXIoMCkK
KyAgICAsIG1fcmVnRXhwQ2FjaGUobmV3IFJlZ0V4cENhY2hlKHRoaXMpKQorI2lmIEVOQUJMRShS
RUdFWFBfVFJBQ0lORykKKyAgICAsIG1fcnRUcmFjZUxpc3QobmV3IFJUVHJhY2VMaXN0KCkpCisj
ZW5kaWYKKyNpZm5kZWYgTkRFQlVHCisgICAgLCBleGNsdXNpdmVUaHJlYWQoMCkKKyNlbmRpZgor
ICAgICwgbV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMoMCkKKyNpZiBFTkFCTEUoQVNTRU1C
TEVSKQorICAgICwgbV9jYW5Vc2VBc3NlbWJsZXIoZW5hYmxlQXNzZW1ibGVyKGV4ZWN1dGFibGVB
bGxvY2F0b3IpKQorI2VuZGlmCisjaWYgRU5BQkxFKEpJVCkKKyAgICAsIG1fY2FuVXNlSklUKG1f
Y2FuVXNlQXNzZW1ibGVyICYmIE9wdGlvbnM6OnVzZUpJVCgpKQorI2VuZGlmCisjaWYgRU5BQkxF
KFlBUlJfSklUKQorICAgICwgbV9jYW5Vc2VSZWdFeHBKSVQobV9jYW5Vc2VBc3NlbWJsZXIgJiYg
T3B0aW9uczo6dXNlUmVnRXhwSklUKCkpCisjZW5kaWYKKyNpZiBFTkFCTEUoR0NfVkFMSURBVElP
TikKKyAgICAsIG1faW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoMCkKKyNlbmRpZgorICAgICwgbV9p
bkRlZmluZU93blByb3BlcnR5KGZhbHNlKQorICAgICwgbV9jb2RlQ2FjaGUoQ29kZUNhY2hlOjpj
cmVhdGUoKSkKK3sKKyAgICBpbnRlcnByZXRlciA9IG5ldyBJbnRlcnByZXRlcigqdGhpcyk7CisK
KyAgICAvLyBOZWVkIHRvIGJlIGNhcmVmdWwgdG8ga2VlcCBldmVyeXRoaW5nIGNvbnNpc3RlbnQg
aGVyZQorICAgIEpTTG9ja0hvbGRlciBsb2NrKHRoaXMpOworICAgIElkZW50aWZpZXJUYWJsZSog
ZXhpc3RpbmdFbnRyeUlkZW50aWZpZXJUYWJsZSA9IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50
SWRlbnRpZmllclRhYmxlKGlkZW50aWZpZXJUYWJsZSk7CisgICAgc3RydWN0dXJlU3RydWN0dXJl
LnNldCgqdGhpcywgU3RydWN0dXJlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMpKTsKKyAgICBzdHJ1
Y3R1cmVSYXJlRGF0YVN0cnVjdHVyZS5zZXQoKnRoaXMsIFN0cnVjdHVyZVJhcmVEYXRhOjpjcmVh
dGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgZGVidWdnZXJBY3RpdmF0aW9u
U3RydWN0dXJlLnNldCgqdGhpcywgRGVidWdnZXJBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgaW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvclN0cnVj
dHVyZS5zZXQoKnRoaXMsIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB0ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1
Y3R1cmUuc2V0KCp0aGlzLCBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBzdHJpbmdTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBK
U1N0cmluZzo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIG5vdEFu
T2JqZWN0U3RydWN0dXJlLnNldCgqdGhpcywgSlNOb3RBbk9iamVjdDo6Y3JlYXRlU3RydWN0dXJl
KCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHByb3BlcnR5TmFtZUl0ZXJhdG9yU3RydWN0dXJl
LnNldCgqdGhpcywgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlz
LCAwLCBqc051bGwoKSkpOworICAgIGdldHRlclNldHRlclN0cnVjdHVyZS5zZXQoKnRoaXMsIEdl
dHRlclNldHRlcjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIGFw
aVdyYXBwZXJTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU0FQSVZhbHVlV3JhcHBlcjo6Y3JlYXRlU3Ry
dWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIEpTU2NvcGVTdHJ1Y3R1cmUuc2V0KCp0
aGlzLCBKU1Njb3BlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAg
ZXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEV4ZWN1dGFibGVCYXNlOjpjcmVhdGVTdHJ1
Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgbmF0aXZlRXhlY3V0YWJsZVN0cnVjdHVy
ZS5zZXQoKnRoaXMsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwg
anNOdWxsKCkpKTsKKyAgICBldmFsRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEV2YWxF
eGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgcHJv
Z3JhbUV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9ncmFtRXhlY3V0YWJsZTo6Y3Jl
YXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIGZ1bmN0aW9uRXhlY3V0YWJs
ZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJl
KCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHJlZ0V4cFN0cnVjdHVyZS5zZXQoKnRoaXMsIFJl
Z0V4cDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHNoYXJlZFN5
bWJvbFRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgU2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBzdHJ1Y3R1cmVDaGFpblN0cnVjdHVy
ZS5zZXQoKnRoaXMsIFN0cnVjdHVyZUNoYWluOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CisgICAgc3BhcnNlQXJyYXlWYWx1ZU1hcFN0cnVjdHVyZS5zZXQoKnRoaXMsIFNw
YXJzZUFycmF5VmFsdWVNYXA6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
KyAgICB3aXRoU2NvcGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1dpdGhTY29wZTo6Y3JlYXRlU3Ry
dWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlU3RydWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB1bmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB1bmxpbmtlZEV2YWxDb2RlQmxv
Y2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OmNyZWF0ZVN0cnVj
dHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
U3RydWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlU3Ry
dWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHByb3BlcnR5VGFibGVTdHJ1Y3R1cmUu
c2V0KCp0aGlzLCBQcm9wZXJ0eVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVs
bCgpKSk7CisgICAgc21hbGxTdHJpbmdzLmluaXRpYWxpemVDb21tb25TdHJpbmdzKCp0aGlzKTsK
KworICAgIHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKGV4aXN0aW5n
RW50cnlJZGVudGlmaWVyVGFibGUpOworCisjaWYgRU5BQkxFKEpJVCkKKyAgICBqaXRTdHVicyA9
IGFkb3B0UHRyKG5ldyBKSVRUaHVua3MoKSk7CisgICAgcGVyZm9ybVBsYXRmb3JtU3BlY2lmaWNK
SVRBc3NlcnRpb25zKHRoaXMpOworI2VuZGlmCisgICAgCisgICAgaW50ZXJwcmV0ZXItPmluaXRp
YWxpemUodGhpcy0+Y2FuVXNlSklUKCkpOworICAgIAorI2lmIEVOQUJMRShKSVQpCisgICAgaW5p
dGlhbGl6ZUhvc3RDYWxsUmV0dXJuVmFsdWUoKTsgLy8gVGhpcyBpcyBuZWVkZWQgdG8gY29udmlu
Y2UgdGhlIGxpbmtlciBub3QgdG8gZHJvcCBob3N0IGNhbGwgcmV0dXJuIHN1cHBvcnQuCisjZW5k
aWYKKworICAgIGhlYXAubm90aWZ5SXNTYWZlVG9Db2xsZWN0KCk7CisKKyAgICBMTEludDo6RGF0
YTo6cGVyZm9ybUFzc2VydGlvbnMoKnRoaXMpOworICAgIAorICAgIGlmIChPcHRpb25zOjplbmFi
bGVQcm9maWxlcigpKSB7CisgICAgICAgIG1fcGVyQnl0ZWNvZGVQcm9maWxlciA9IGFkb3B0UHRy
KG5ldyBQcm9maWxlcjo6RGF0YWJhc2UoKnRoaXMpKTsKKworICAgICAgICBTdHJpbmdQcmludFN0
cmVhbSBwYXRoT3V0OworI2lmICFPUyhXSU5DRSkKKyAgICAgICAgY29uc3QgY2hhciogcHJvZmls
ZXJQYXRoID0gZ2V0ZW52KCJKU0NfUFJPRklMRVJfUEFUSCIpOworICAgICAgICBpZiAocHJvZmls
ZXJQYXRoKQorICAgICAgICAgICAgcGF0aE91dC5wcmludChwcm9maWxlclBhdGgsICIvIik7Cisj
ZW5kaWYKKyAgICAgICAgcGF0aE91dC5wcmludCgiSlNDUHJvZmlsZS0iLCBnZXRDdXJyZW50UHJv
Y2Vzc0lEKCksICItIiwgbV9wZXJCeXRlY29kZVByb2ZpbGVyLT5kYXRhYmFzZUlEKCksICIuanNv
biIpOworICAgICAgICBtX3BlckJ5dGVjb2RlUHJvZmlsZXItPnJlZ2lzdGVyVG9TYXZlQXRFeGl0
KHBhdGhPdXQudG9DU3RyaW5nKCkuZGF0YSgpKTsKKyAgICB9CisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKyAgICBpZiAoY2FuVXNlSklUKCkpCisgICAgICAgIG1fZGZnU3RhdGUgPSBhZG9wdFB0cihu
ZXcgREZHOjpMb25nTGl2ZWRTdGF0ZSgpKTsKKyNlbmRpZgorfQorCitKU0dsb2JhbERhdGE6On5K
U0dsb2JhbERhdGEoKQoreworICAgIC8vIENsZWFyIHRoaXMgZmlyc3QgdG8gZW5zdXJlIHRoYXQg
bm9ib2R5IHRyaWVzIHRvIHJlbW92ZSB0aGVtc2VsdmVzIGZyb20gaXQuCisgICAgbV9wZXJCeXRl
Y29kZVByb2ZpbGVyLmNsZWFyKCk7CisgICAgCisgICAgQVNTRVJUKG1fYXBpTG9jay0+Y3VycmVu
dFRocmVhZElzSG9sZGluZ0xvY2soKSk7CisgICAgbV9hcGlMb2NrLT53aWxsRGVzdHJveUdsb2Jh
bERhdGEodGhpcyk7CisgICAgaGVhcC5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOworCisgICAgZGVs
ZXRlIGludGVycHJldGVyOworI2lmbmRlZiBOREVCVUcKKyAgICBpbnRlcnByZXRlciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8SW50ZXJwcmV0ZXIqPigweGJiYWRiZWVmKTsKKyNlbmRpZgorCisgICAgYXJy
YXlQcm90b3R5cGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKKyAgICBhcnJheUNvbnN0cnVjdG9yVGFi
bGUtPmRlbGV0ZVRhYmxlKCk7CisgICAgYm9vbGVhblByb3RvdHlwZVRhYmxlLT5kZWxldGVUYWJs
ZSgpOworICAgIGRhdGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKKyAgICBkYXRlQ29uc3RydWN0b3JU
YWJsZS0+ZGVsZXRlVGFibGUoKTsKKyAgICBlcnJvclByb3RvdHlwZVRhYmxlLT5kZWxldGVUYWJs
ZSgpOworICAgIGdsb2JhbE9iamVjdFRhYmxlLT5kZWxldGVUYWJsZSgpOworICAgIGpzb25UYWJs
ZS0+ZGVsZXRlVGFibGUoKTsKKyAgICBtYXRoVGFibGUtPmRlbGV0ZVRhYmxlKCk7CisgICAgbnVt
YmVyQ29uc3RydWN0b3JUYWJsZS0+ZGVsZXRlVGFibGUoKTsKKyAgICBudW1iZXJQcm90b3R5cGVU
YWJsZS0+ZGVsZXRlVGFibGUoKTsKKyAgICBvYmplY3RDb25zdHJ1Y3RvclRhYmxlLT5kZWxldGVU
YWJsZSgpOworICAgIHByaXZhdGVOYW1lUHJvdG90eXBlVGFibGUtPmRlbGV0ZVRhYmxlKCk7Cisg
ICAgcmVnRXhwVGFibGUtPmRlbGV0ZVRhYmxlKCk7CisgICAgcmVnRXhwQ29uc3RydWN0b3JUYWJs
ZS0+ZGVsZXRlVGFibGUoKTsKKyAgICByZWdFeHBQcm90b3R5cGVUYWJsZS0+ZGVsZXRlVGFibGUo
KTsKKyAgICBzdHJpbmdDb25zdHJ1Y3RvclRhYmxlLT5kZWxldGVUYWJsZSgpOworCisgICAgZmFz
dERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGFycmF5Q29uc3RydWN0b3JUYWJsZSkpOwor
ICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihhcnJheVByb3RvdHlwZVRhYmxl
KSk7CisgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGJvb2xlYW5Qcm90b3R5
cGVUYWJsZSkpOworICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihkYXRlVGFi
bGUpKTsKKyAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oZGF0ZUNvbnN0cnVj
dG9yVGFibGUpKTsKKyAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oZXJyb3JQ
cm90b3R5cGVUYWJsZSkpOworICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihn
bG9iYWxPYmplY3RUYWJsZSkpOworICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUq
Pihqc29uVGFibGUpKTsKKyAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4obWF0
aFRhYmxlKSk7CisgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KG51bWJlckNv
bnN0cnVjdG9yVGFibGUpKTsKKyAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4o
bnVtYmVyUHJvdG90eXBlVGFibGUpKTsKKyAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRh
YmxlKj4ob2JqZWN0Q29uc3RydWN0b3JUYWJsZSkpOworICAgIGZhc3REZWxldGUoY29uc3RfY2Fz
dDxIYXNoVGFibGUqPihwcml2YXRlTmFtZVByb3RvdHlwZVRhYmxlKSk7CisgICAgZmFzdERlbGV0
ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KHJlZ0V4cFRhYmxlKSk7CisgICAgZmFzdERlbGV0ZShj
b25zdF9jYXN0PEhhc2hUYWJsZSo+KHJlZ0V4cENvbnN0cnVjdG9yVGFibGUpKTsKKyAgICBmYXN0
RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4ocmVnRXhwUHJvdG90eXBlVGFibGUpKTsKKyAg
ICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oc3RyaW5nQ29uc3RydWN0b3JUYWJs
ZSkpOworCisgICAgZGVsZXRlIGVtcHR5TGlzdDsKKworICAgIGRlbGV0ZSBwcm9wZXJ0eU5hbWVz
OworICAgIGlmIChnbG9iYWxEYXRhVHlwZSAhPSBEZWZhdWx0KQorICAgICAgICBkZWxldGVJZGVu
dGlmaWVyVGFibGUoaWRlbnRpZmllclRhYmxlKTsKKworICAgIGRlbGV0ZSBjbGllbnREYXRhOwor
ICAgIGRlbGV0ZSBtX3JlZ0V4cENhY2hlOworI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKKyAg
ICBkZWxldGUgbV9ydFRyYWNlTGlzdDsKKyNlbmRpZgorCisjaWYgRU5BQkxFKERGR19KSVQpCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNjcmF0Y2hCdWZmZXJzLnNpemUoKTsgKytpKQor
ICAgICAgICBmYXN0RnJlZShzY3JhdGNoQnVmZmVyc1tpXSk7CisjZW5kaWYKK30KKworUGFzc1Jl
ZlB0cjxKU0dsb2JhbERhdGE+IEpTR2xvYmFsRGF0YTo6Y3JlYXRlQ29udGV4dEdyb3VwKEhlYXBU
eXBlIGhlYXBUeXBlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRhKEFQ
SUNvbnRleHRHcm91cCwgaGVhcFR5cGUpKTsKK30KKworUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+
IEpTR2xvYmFsRGF0YTo6Y3JlYXRlKEhlYXBUeXBlIGhlYXBUeXBlKQoreworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRhKERlZmF1bHQsIGhlYXBUeXBlKSk7Cit9CisKK1Bhc3NS
ZWZQdHI8SlNHbG9iYWxEYXRhPiBKU0dsb2JhbERhdGE6OmNyZWF0ZUxlYWtlZChIZWFwVHlwZSBo
ZWFwVHlwZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGhlYXBUeXBlKTsKK30KKworYm9vbCBKU0ds
b2JhbERhdGE6OnNoYXJlZEluc3RhbmNlRXhpc3RzKCkKK3sKKyAgICByZXR1cm4gc2hhcmVkSW5z
dGFuY2VJbnRlcm5hbCgpOworfQorCitKU0dsb2JhbERhdGEmIEpTR2xvYmFsRGF0YTo6c2hhcmVk
SW5zdGFuY2UoKQoreworICAgIEdsb2JhbEpTTG9jayBnbG9iYWxMb2NrOworICAgIEpTR2xvYmFs
RGF0YSomIGluc3RhbmNlID0gc2hhcmVkSW5zdGFuY2VJbnRlcm5hbCgpOworICAgIGlmICghaW5z
dGFuY2UpIHsKKyAgICAgICAgaW5zdGFuY2UgPSBhZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRhKEFQ
SVNoYXJlZCwgU21hbGxIZWFwKSkubGVha1JlZigpOworICAgICAgICBpbnN0YW5jZS0+bWFrZVVz
YWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKTsKKyAgICB9CisgICAgcmV0dXJuICppbnN0YW5jZTsK
K30KKworSlNHbG9iYWxEYXRhKiYgSlNHbG9iYWxEYXRhOjpzaGFyZWRJbnN0YW5jZUludGVybmFs
KCkKK3sKKyAgICBzdGF0aWMgSlNHbG9iYWxEYXRhKiBzaGFyZWRJbnN0YW5jZTsKKyAgICByZXR1
cm4gc2hhcmVkSW5zdGFuY2U7Cit9CisKKyNpZiBFTkFCTEUoSklUKQorc3RhdGljIFRodW5rR2Vu
ZXJhdG9yIHRodW5rR2VuZXJhdG9yRm9ySW50cmluc2ljKEludHJpbnNpYyBpbnRyaW5zaWMpCit7
CisgICAgc3dpdGNoIChpbnRyaW5zaWMpIHsKKyAgICBjYXNlIENoYXJDb2RlQXRJbnRyaW5zaWM6
CisgICAgICAgIHJldHVybiBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3I7CisgICAgY2FzZSBDaGFy
QXRJbnRyaW5zaWM6CisgICAgICAgIHJldHVybiBjaGFyQXRUaHVua0dlbmVyYXRvcjsKKyAgICBj
YXNlIEZyb21DaGFyQ29kZUludHJpbnNpYzoKKyAgICAgICAgcmV0dXJuIGZyb21DaGFyQ29kZVRo
dW5rR2VuZXJhdG9yOworICAgIGNhc2UgU3FydEludHJpbnNpYzoKKyAgICAgICAgcmV0dXJuIHNx
cnRUaHVua0dlbmVyYXRvcjsKKyAgICBjYXNlIFBvd0ludHJpbnNpYzoKKyAgICAgICAgcmV0dXJu
IHBvd1RodW5rR2VuZXJhdG9yOworICAgIGNhc2UgQWJzSW50cmluc2ljOgorICAgICAgICByZXR1
cm4gYWJzVGh1bmtHZW5lcmF0b3I7CisgICAgY2FzZSBGbG9vckludHJpbnNpYzoKKyAgICAgICAg
cmV0dXJuIGZsb29yVGh1bmtHZW5lcmF0b3I7CisgICAgY2FzZSBDZWlsSW50cmluc2ljOgorICAg
ICAgICByZXR1cm4gY2VpbFRodW5rR2VuZXJhdG9yOworICAgIGNhc2UgUm91bmRJbnRyaW5zaWM6
CisgICAgICAgIHJldHVybiByb3VuZFRodW5rR2VuZXJhdG9yOworICAgIGNhc2UgRXhwSW50cmlu
c2ljOgorICAgICAgICByZXR1cm4gZXhwVGh1bmtHZW5lcmF0b3I7CisgICAgY2FzZSBMb2dJbnRy
aW5zaWM6CisgICAgICAgIHJldHVybiBsb2dUaHVua0dlbmVyYXRvcjsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK05hdGl2ZUV4ZWN1dGFibGUqIEpTR2xvYmFs
RGF0YTo6Z2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5j
dGlvbiBjb25zdHJ1Y3RvcikKK3sKKyAgICByZXR1cm4gaml0U3R1YnMtPmhvc3RGdW5jdGlvblN0
dWIodGhpcywgZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKK30KK05hdGl2ZUV4ZWN1dGFibGUqIEpT
R2xvYmFsRGF0YTo6Z2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBJbnRy
aW5zaWMgaW50cmluc2ljKQoreworICAgIEFTU0VSVChjYW5Vc2VKSVQoKSk7CisgICAgcmV0dXJu
IGppdFN0dWJzLT5ob3N0RnVuY3Rpb25TdHViKHRoaXMsIGZ1bmN0aW9uLCBpbnRyaW5zaWMgIT0g
Tm9JbnRyaW5zaWMgPyB0aHVua0dlbmVyYXRvckZvckludHJpbnNpYyhpbnRyaW5zaWMpIDogMCwg
aW50cmluc2ljKTsKK30KKworI2Vsc2UgLy8gIUVOQUJMRShKSVQpCitOYXRpdmVFeGVjdXRhYmxl
KiBKU0dsb2JhbERhdGE6OmdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwg
TmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpCit7CisgICAgcmV0dXJuIE5hdGl2ZUV4ZWN1dGFi
bGU6OmNyZWF0ZSgqdGhpcywgZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKK30KKyNlbmRpZiAvLyAh
RU5BQkxFKEpJVCkKKworSlNHbG9iYWxEYXRhOjpDbGllbnREYXRhOjp+Q2xpZW50RGF0YSgpCit7
Cit9CisKK3ZvaWQgSlNHbG9iYWxEYXRhOjpyZXNldERhdGVDYWNoZSgpCit7CisgICAgY2FjaGVk
VVRDT2Zmc2V0ID0gUU5hTjsKKyAgICBkc3RPZmZzZXRDYWNoZS5yZXNldCgpOworICAgIGNhY2hl
ZERhdGVTdHJpbmcgPSBTdHJpbmcoKTsKKyAgICBjYWNoZWREYXRlU3RyaW5nVmFsdWUgPSBRTmFO
OworICAgIGRhdGVJbnN0YW5jZUNhY2hlLnJlc2V0KCk7Cit9CisKK3ZvaWQgSlNHbG9iYWxEYXRh
OjpzdGFydFNhbXBsaW5nKCkKK3sKKyAgICBpbnRlcnByZXRlci0+c3RhcnRTYW1wbGluZygpOwor
fQorCit2b2lkIEpTR2xvYmFsRGF0YTo6c3RvcFNhbXBsaW5nKCkKK3sKKyAgICBpbnRlcnByZXRl
ci0+c3RvcFNhbXBsaW5nKCk7Cit9CisKK3ZvaWQgSlNHbG9iYWxEYXRhOjpkaXNjYXJkQWxsQ29k
ZSgpCit7CisgICAgbV9jb2RlQ2FjaGUtPmNsZWFyKCk7CisgICAgaGVhcC5kZWxldGVBbGxDb21w
aWxlZENvZGUoKTsKKyAgICBoZWFwLnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCk7Cit9CisK
K3ZvaWQgSlNHbG9iYWxEYXRhOjpkdW1wU2FtcGxlRGF0YShFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgaW50ZXJwcmV0ZXItPmR1bXBTYW1wbGVEYXRhKGV4ZWMpOworI2lmIEVOQUJMRShBU1NFTUJM
RVIpCisgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKTsKKyNlbmRpZgorfQor
CitTb3VyY2VQcm92aWRlckNhY2hlKiBKU0dsb2JhbERhdGE6OmFkZFNvdXJjZVByb3ZpZGVyQ2Fj
aGUoU291cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVyKQoreworICAgIFNvdXJjZVByb3ZpZGVy
Q2FjaGVNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBzb3VyY2VQcm92aWRlckNhY2hlTWFwLmFk
ZChzb3VyY2VQcm92aWRlciwgMCk7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAg
ICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gYWRvcHRSZWYobmV3IFNvdXJjZVByb3Zp
ZGVyQ2FjaGUpOworICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwor
fQorCit2b2lkIEpTR2xvYmFsRGF0YTo6Y2xlYXJTb3VyY2VQcm92aWRlckNhY2hlcygpCit7Cisg
ICAgc291cmNlUHJvdmlkZXJDYWNoZU1hcC5jbGVhcigpOworfQorCitzdHJ1Y3QgU3RhY2tQcmVz
ZXJ2aW5nUmVjb21waWxlciA6IHB1YmxpYyBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgeworICAg
IEhhc2hTZXQ8RnVuY3Rpb25FeGVjdXRhYmxlKj4gY3VycmVudGx5RXhlY3V0aW5nRnVuY3Rpb25z
OworICAgIHZvaWQgb3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCisgICAgeworICAgICAgICBpZiAo
IWNlbGwtPmluaGVyaXRzKCZGdW5jdGlvbkV4ZWN1dGFibGU6OnNfaW5mbykpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2Fz
dDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKKyAgICAgICAgaWYgKGN1cnJlbnRseUV4ZWN1
dGluZ0Z1bmN0aW9ucy5jb250YWlucyhleGVjdXRhYmxlKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgZXhlY3V0YWJsZS0+Y2xlYXJDb2RlSWZOb3RDb21waWxpbmcoKTsKKyAgICB9Cit9
OworCit2b2lkIEpTR2xvYmFsRGF0YTo6cmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoKQoreworICAg
IGlmIChkeW5hbWljR2xvYmFsT2JqZWN0KSB7CisgICAgICAgIFN0YWNrUHJlc2VydmluZ1JlY29t
cGlsZXIgcmVjb21waWxlcjsKKyAgICAgICAgSGFzaFNldDxKU0NlbGwqPiByb290czsKKyAgICAg
ICAgaGVhcC5jYW5vbmljYWxpemVDZWxsTGl2ZW5lc3NEYXRhKCk7CisgICAgICAgIGhlYXAuZ2V0
Q29uc2VydmF0aXZlUmVnaXN0ZXJSb290cyhyb290cyk7CisgICAgICAgIEhhc2hTZXQ8SlNDZWxs
Kj46Oml0ZXJhdG9yIGVuZCA9IHJvb3RzLmVuZCgpOworICAgICAgICBmb3IgKEhhc2hTZXQ8SlND
ZWxsKj46Oml0ZXJhdG9yIHB0ciA9IHJvb3RzLmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKSB7
CisgICAgICAgICAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gMDsKKyAgICAgICAg
ICAgIEpTQ2VsbCogY2VsbCA9ICpwdHI7CisgICAgICAgICAgICBpZiAoY2VsbC0+aW5oZXJpdHMo
JlNjcmlwdEV4ZWN1dGFibGU6OnNfaW5mbykpCisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9
IHN0YXRpY19jYXN0PFNjcmlwdEV4ZWN1dGFibGUqPigqcHRyKTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKGNlbGwtPmluaGVyaXRzKCZKU0Z1bmN0aW9uOjpzX2luZm8pKSB7CisgICAgICAgICAgICAg
ICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KCpwdHIpOworICAg
ICAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IGZ1bmN0aW9u
LT5qc0V4ZWN1dGFibGUoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgQVNTRVJUKGV4ZWN1dGFibGUtPmluaGVyaXRzKCZTY3JpcHRF
eGVjdXRhYmxlOjpzX2luZm8pKTsKKyAgICAgICAgICAgIGV4ZWN1dGFibGUtPnVubGlua0NhbGxz
KCk7CisgICAgICAgICAgICBpZiAoZXhlY3V0YWJsZS0+aW5oZXJpdHMoJkZ1bmN0aW9uRXhlY3V0
YWJsZTo6c19pbmZvKSkKKyAgICAgICAgICAgICAgICByZWNvbXBpbGVyLmN1cnJlbnRseUV4ZWN1
dGluZ0Z1bmN0aW9ucy5hZGQoc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0
YWJsZSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICB9CisgICAgICAgIGhlYXAub2JqZWN0
U3BhY2UoKS5mb3JFYWNoTGl2ZUNlbGw8U3RhY2tQcmVzZXJ2aW5nUmVjb21waWxlcj4ocmVjb21w
aWxlcik7CisgICAgfQorICAgIG1fcmVnRXhwQ2FjaGUtPmludmFsaWRhdGVDb2RlKCk7CisgICAg
aGVhcC5jb2xsZWN0QWxsR2FyYmFnZSgpOworfQorICAgIAordm9pZCByZWxlYXNlRXhlY3V0YWJs
ZU1lbW9yeShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgZ2xvYmFsRGF0YS5yZWxl
YXNlRXhlY3V0YWJsZU1lbW9yeSgpOworfQorCisjaWYgRU5BQkxFKERGR19KSVQpCit2b2lkIEpT
R2xvYmFsRGF0YTo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNv
bnNlcnZhdGl2ZVJvb3RzKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2NyYXRjaEJ1
ZmZlcnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZl
ciA9IHNjcmF0Y2hCdWZmZXJzW2ldOworICAgICAgICBpZiAoc2NyYXRjaEJ1ZmZlci0+YWN0aXZl
TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHZvaWQqIGJ1ZmZlclN0YXJ0ID0gc2NyYXRjaEJ1ZmZl
ci0+ZGF0YUJ1ZmZlcigpOworICAgICAgICAgICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJ1ZmZl
clN0YXJ0LCBzdGF0aWNfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KGJ1ZmZlclN0YXJ0
KSArIHNjcmF0Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aCgpKSk7CisgICAgICAgIH0KKyAgICB9Cit9
CisjZW5kaWYKKworI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKK3ZvaWQgSlNHbG9iYWxEYXRh
OjphZGRSZWdFeHBUb1RyYWNlKFJlZ0V4cCogcmVnRXhwKQoreworICAgIG1fcnRUcmFjZUxpc3Qt
PmFkZChyZWdFeHApOworfQorCit2b2lkIEpTR2xvYmFsRGF0YTo6ZHVtcFJlZ0V4cFRyYWNlKCkK
K3sKKyAgICAvLyBUaGUgZmlyc3QgUmVnRXhwIG9iamVjdCBpcyBpZ25vcmVkLiAgSXQgaXMgY3Jl
YXRlIGJ5IHRoZSBSZWdFeHBQcm90b3R5cGUgY3RvciBhbmQgbm90IHVzZWQuCisgICAgUlRUcmFj
ZUxpc3Q6Oml0ZXJhdG9yIGl0ZXIgPSArK21fcnRUcmFjZUxpc3QtPmJlZ2luKCk7CisgICAgCisg
ICAgaWYgKGl0ZXIgIT0gbV9ydFRyYWNlTGlzdC0+ZW5kKCkpIHsKKyAgICAgICAgZGF0YUxvZ0Yo
IlxuUmVnRXhwIFRyYWNpbmdcbiIpOworICAgICAgICBkYXRhTG9nRigiICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2goKSAgICBt
YXRjaGVzXG4iKTsKKyAgICAgICAgZGF0YUxvZ0YoIlJlZ3VsYXIgRXhwcmVzc2lvbiAgICAgICAg
ICAgICAgICAgICAgICAgICAgSklUIEFkZHJlc3MgICAgICBjYWxscyAgICAgIGZvdW5kXG4iKTsK
KyAgICAgICAgZGF0YUxvZ0YoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS1cbiIpOworICAgIAorICAg
ICAgICB1bnNpZ25lZCByZUNvdW50ID0gMDsKKyAgICAKKyAgICAgICAgZm9yICg7IGl0ZXIgIT0g
bV9ydFRyYWNlTGlzdC0+ZW5kKCk7ICsraXRlciwgKytyZUNvdW50KQorICAgICAgICAgICAgKCpp
dGVyKS0+cHJpbnRUcmFjZURhdGEoKTsKKworICAgICAgICBkYXRhTG9nRigiJWQgUmVndWxhciBF
eHByZXNzaW9uc1xuIiwgcmVDb3VudCk7CisgICAgfQorICAgIAorICAgIG1fcnRUcmFjZUxpc3Qt
PmNsZWFyKCk7Cit9CisjZWxzZQordm9pZCBKU0dsb2JhbERhdGE6OmR1bXBSZWdFeHBUcmFjZSgp
Cit7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICAqLwog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVk
ZSAiVk0uaCIKIAogI2luY2x1ZGUgIkFyZ0xpc3QuaCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIK
QEAgLTEzMywxMyArMTMzLDEzIEBAIHN0YXRpYyBib29sIGVuYWJsZUFzc2VtYmxlcihFeGVjdXRh
YmxlQWwKIH0KICNlbmRpZiAvLyBFTkFCTEUoIUFTU0VNQkxFUikKIAotSlNHbG9iYWxEYXRhOjpK
U0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cGUgZ2xvYmFsRGF0YVR5cGUsIEhlYXBUeXBlIGhlYXBU
eXBlKQorVk06OlZNKEdsb2JhbERhdGFUeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAg
ICAgOiBtX2FwaUxvY2soYWRvcHRSZWYobmV3IEpTTG9jayh0aGlzKSkpCiAjaWYgRU5BQkxFKEFT
U0VNQkxFUikKICAgICAsIGV4ZWN1dGFibGVBbGxvY2F0b3IoKnRoaXMpCiAjZW5kaWYKICAgICAs
IGhlYXAodGhpcywgaGVhcFR5cGUpCi0gICAgLCBnbG9iYWxEYXRhVHlwZShnbG9iYWxEYXRhVHlw
ZSkKKyAgICAsIHZtVHlwZSh2bVR5cGUpCiAgICAgLCBjbGllbnREYXRhKDApCiAgICAgLCB0b3BD
YWxsRnJhbWUoQ2FsbEZyYW1lOjpub0NhbGxlcigpKQogICAgICwgYXJyYXlDb25zdHJ1Y3RvclRh
YmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmFycmF5Q29uc3RydWN0b3JUYWJsZSkpCkBAIC0x
NTksNyArMTU5LDcgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cAog
ICAgICwgcmVnRXhwQ29uc3RydWN0b3JUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpyZWdF
eHBDb25zdHJ1Y3RvclRhYmxlKSkKICAgICAsIHJlZ0V4cFByb3RvdHlwZVRhYmxlKGZhc3ROZXc8
SGFzaFRhYmxlPihKU0M6OnJlZ0V4cFByb3RvdHlwZVRhYmxlKSkKICAgICAsIHN0cmluZ0NvbnN0
cnVjdG9yVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6c3RyaW5nQ29uc3RydWN0b3JUYWJs
ZSkpCi0gICAgLCBpZGVudGlmaWVyVGFibGUoZ2xvYmFsRGF0YVR5cGUgPT0gRGVmYXVsdCA/IHd0
ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkgOiBjcmVhdGVJZGVudGlmaWVy
VGFibGUoKSkKKyAgICAsIGlkZW50aWZpZXJUYWJsZSh2bVR5cGUgPT0gRGVmYXVsdCA/IHd0ZlRo
cmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkgOiBjcmVhdGVJZGVudGlmaWVyVGFi
bGUoKSkKICAgICAsIHByb3BlcnR5TmFtZXMobmV3IENvbW1vbklkZW50aWZpZXJzKHRoaXMpKQog
ICAgICwgZW1wdHlMaXN0KG5ldyBNYXJrZWRBcmd1bWVudEJ1ZmZlcikKICAgICAsIHBhcnNlckFy
ZW5hKGFkb3B0UHRyKG5ldyBQYXJzZXJBcmVuYSkpCkBAIC0yNjUsNyArMjY1LDcgQEAgSlNHbG9i
YWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cAogI2VuZGlmCiB9CiAKLUpTR2xvYmFs
RGF0YTo6fkpTR2xvYmFsRGF0YSgpCitWTTo6flZNKCkKIHsKICAgICAvLyBDbGVhciB0aGlzIGZp
cnN0IHRvIGVuc3VyZSB0aGF0IG5vYm9keSB0cmllcyB0byByZW1vdmUgdGhlbXNlbHZlcyBmcm9t
IGl0LgogICAgIG1fcGVyQnl0ZWNvZGVQcm9maWxlci5jbGVhcigpOwpAQCAtMzE4LDcgKzMxOCw3
IEBAIEpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSgpCiAgICAgZGVsZXRlIGVtcHR5TGlzdDsK
IAogICAgIGRlbGV0ZSBwcm9wZXJ0eU5hbWVzOwotICAgIGlmIChnbG9iYWxEYXRhVHlwZSAhPSBE
ZWZhdWx0KQorICAgIGlmICh2bVR5cGUgIT0gRGVmYXVsdCkKICAgICAgICAgZGVsZXRlSWRlbnRp
ZmllclRhYmxlKGlkZW50aWZpZXJUYWJsZSk7CiAKICAgICBkZWxldGUgY2xpZW50RGF0YTsKQEAg
LTMzMyw0MCArMzMzLDQwIEBAIEpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSgpCiAjZW5kaWYK
IH0KIAotUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IEpTR2xvYmFsRGF0YTo6Y3JlYXRlQ29udGV4
dEdyb3VwKEhlYXBUeXBlIGhlYXBUeXBlKQorUGFzc1JlZlB0cjxWTT4gVk06OmNyZWF0ZUNvbnRl
eHRHcm91cChIZWFwVHlwZSBoZWFwVHlwZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpT
R2xvYmFsRGF0YShBUElDb250ZXh0R3JvdXAsIGhlYXBUeXBlKSk7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBWTShBUElDb250ZXh0R3JvdXAsIGhlYXBUeXBlKSk7CiB9CiAKLVBhc3NSZWZQdHI8
SlNHbG9iYWxEYXRhPiBKU0dsb2JhbERhdGE6OmNyZWF0ZShIZWFwVHlwZSBoZWFwVHlwZSkKK1Bh
c3NSZWZQdHI8Vk0+IFZNOjpjcmVhdGUoSGVhcFR5cGUgaGVhcFR5cGUpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBKU0dsb2JhbERhdGEoRGVmYXVsdCwgaGVhcFR5cGUpKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFZNKERlZmF1bHQsIGhlYXBUeXBlKSk7CiB9CiAKLVBhc3NSZWZQdHI8
SlNHbG9iYWxEYXRhPiBKU0dsb2JhbERhdGE6OmNyZWF0ZUxlYWtlZChIZWFwVHlwZSBoZWFwVHlw
ZSkKK1Bhc3NSZWZQdHI8Vk0+IFZNOjpjcmVhdGVMZWFrZWQoSGVhcFR5cGUgaGVhcFR5cGUpCiB7
CiAgICAgcmV0dXJuIGNyZWF0ZShoZWFwVHlwZSk7CiB9CiAKLWJvb2wgSlNHbG9iYWxEYXRhOjpz
aGFyZWRJbnN0YW5jZUV4aXN0cygpCitib29sIFZNOjpzaGFyZWRJbnN0YW5jZUV4aXN0cygpCiB7
CiAgICAgcmV0dXJuIHNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKTsKIH0KIAotSlNHbG9iYWxEYXRh
JiBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNlKCkKK1ZNJiBWTTo6c2hhcmVkSW5zdGFuY2Uo
KQogewogICAgIEdsb2JhbEpTTG9jayBnbG9iYWxMb2NrOwotICAgIEpTR2xvYmFsRGF0YSomIGlu
c3RhbmNlID0gc2hhcmVkSW5zdGFuY2VJbnRlcm5hbCgpOworICAgIFZNKiYgaW5zdGFuY2UgPSBz
aGFyZWRJbnN0YW5jZUludGVybmFsKCk7CiAgICAgaWYgKCFpbnN0YW5jZSkgewotICAgICAgICBp
bnN0YW5jZSA9IGFkb3B0UmVmKG5ldyBKU0dsb2JhbERhdGEoQVBJU2hhcmVkLCBTbWFsbEhlYXAp
KS5sZWFrUmVmKCk7CisgICAgICAgIGluc3RhbmNlID0gYWRvcHRSZWYobmV3IFZNKEFQSVNoYXJl
ZCwgU21hbGxIZWFwKSkubGVha1JlZigpOwogICAgICAgICBpbnN0YW5jZS0+bWFrZVVzYWJsZUZy
b21NdWx0aXBsZVRocmVhZHMoKTsKICAgICB9CiAgICAgcmV0dXJuICppbnN0YW5jZTsKIH0KIAot
SlNHbG9iYWxEYXRhKiYgSlNHbG9iYWxEYXRhOjpzaGFyZWRJbnN0YW5jZUludGVybmFsKCkKK1ZN
KiYgVk06OnNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKQogewotICAgIHN0YXRpYyBKU0dsb2JhbERh
dGEqIHNoYXJlZEluc3RhbmNlOworICAgIHN0YXRpYyBWTSogc2hhcmVkSW5zdGFuY2U7CiAgICAg
cmV0dXJuIHNoYXJlZEluc3RhbmNlOwogfQogCkBAIC00MDEsMjggKzQwMSwyOCBAQCBzdGF0aWMg
VGh1bmtHZW5lcmF0b3IgdGh1bmtHZW5lcmF0b3JGb3JJCiAgICAgfQogfQogCi1OYXRpdmVFeGVj
dXRhYmxlKiBKU0dsb2JhbERhdGE6OmdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiBmdW5j
dGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpCitOYXRpdmVFeGVjdXRhYmxlKiBWTTo6
Z2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBj
b25zdHJ1Y3RvcikKIHsKICAgICByZXR1cm4gaml0U3R1YnMtPmhvc3RGdW5jdGlvblN0dWIodGhp
cywgZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKIH0KLU5hdGl2ZUV4ZWN1dGFibGUqIEpTR2xvYmFs
RGF0YTo6Z2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBJbnRyaW5zaWMg
aW50cmluc2ljKQorTmF0aXZlRXhlY3V0YWJsZSogVk06OmdldEhvc3RGdW5jdGlvbihOYXRpdmVG
dW5jdGlvbiBmdW5jdGlvbiwgSW50cmluc2ljIGludHJpbnNpYykKIHsKICAgICBBU1NFUlQoY2Fu
VXNlSklUKCkpOwogICAgIHJldHVybiBqaXRTdHVicy0+aG9zdEZ1bmN0aW9uU3R1Yih0aGlzLCBm
dW5jdGlvbiwgaW50cmluc2ljICE9IE5vSW50cmluc2ljID8gdGh1bmtHZW5lcmF0b3JGb3JJbnRy
aW5zaWMoaW50cmluc2ljKSA6IDAsIGludHJpbnNpYyk7CiB9CiAKICNlbHNlIC8vICFFTkFCTEUo
SklUKQotTmF0aXZlRXhlY3V0YWJsZSogSlNHbG9iYWxEYXRhOjpnZXRIb3N0RnVuY3Rpb24oTmF0
aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQorTmF0aXZl
RXhlY3V0YWJsZSogVk06OmdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwg
TmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpCiB7CiAgICAgcmV0dXJuIE5hdGl2ZUV4ZWN1dGFi
bGU6OmNyZWF0ZSgqdGhpcywgZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKIH0KICNlbmRpZiAvLyAh
RU5BQkxFKEpJVCkKIAotSlNHbG9iYWxEYXRhOjpDbGllbnREYXRhOjp+Q2xpZW50RGF0YSgpCitW
TTo6Q2xpZW50RGF0YTo6fkNsaWVudERhdGEoKQogewogfQogCi12b2lkIEpTR2xvYmFsRGF0YTo6
cmVzZXREYXRlQ2FjaGUoKQordm9pZCBWTTo6cmVzZXREYXRlQ2FjaGUoKQogewogICAgIGNhY2hl
ZFVUQ09mZnNldCA9IFFOYU47CiAgICAgZHN0T2Zmc2V0Q2FjaGUucmVzZXQoKTsKQEAgLTQzMSwy
NCArNDMxLDI0IEBAIHZvaWQgSlNHbG9iYWxEYXRhOjpyZXNldERhdGVDYWNoZSgpCiAgICAgZGF0
ZUluc3RhbmNlQ2FjaGUucmVzZXQoKTsKIH0KIAotdm9pZCBKU0dsb2JhbERhdGE6OnN0YXJ0U2Ft
cGxpbmcoKQordm9pZCBWTTo6c3RhcnRTYW1wbGluZygpCiB7CiAgICAgaW50ZXJwcmV0ZXItPnN0
YXJ0U2FtcGxpbmcoKTsKIH0KIAotdm9pZCBKU0dsb2JhbERhdGE6OnN0b3BTYW1wbGluZygpCit2
b2lkIFZNOjpzdG9wU2FtcGxpbmcoKQogewogICAgIGludGVycHJldGVyLT5zdG9wU2FtcGxpbmco
KTsKIH0KIAotdm9pZCBKU0dsb2JhbERhdGE6OmRpc2NhcmRBbGxDb2RlKCkKK3ZvaWQgVk06OmRp
c2NhcmRBbGxDb2RlKCkKIHsKICAgICBtX2NvZGVDYWNoZS0+Y2xlYXIoKTsKICAgICBoZWFwLmRl
bGV0ZUFsbENvbXBpbGVkQ29kZSgpOwogICAgIGhlYXAucmVwb3J0QWJhbmRvbmVkT2JqZWN0R3Jh
cGgoKTsKIH0KIAotdm9pZCBKU0dsb2JhbERhdGE6OmR1bXBTYW1wbGVEYXRhKEV4ZWNTdGF0ZSog
ZXhlYykKK3ZvaWQgVk06OmR1bXBTYW1wbGVEYXRhKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBp
bnRlcnByZXRlci0+ZHVtcFNhbXBsZURhdGEoZXhlYyk7CiAjaWYgRU5BQkxFKEFTU0VNQkxFUikK
QEAgLTQ1Niw3ICs0NTYsNyBAQCB2b2lkIEpTR2xvYmFsRGF0YTo6ZHVtcFNhbXBsZURhdGEoRXhl
Y1N0CiAjZW5kaWYKIH0KIAotU291cmNlUHJvdmlkZXJDYWNoZSogSlNHbG9iYWxEYXRhOjphZGRT
b3VyY2VQcm92aWRlckNhY2hlKFNvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlcikKK1NvdXJj
ZVByb3ZpZGVyQ2FjaGUqIFZNOjphZGRTb3VyY2VQcm92aWRlckNhY2hlKFNvdXJjZVByb3ZpZGVy
KiBzb3VyY2VQcm92aWRlcikKIHsKICAgICBTb3VyY2VQcm92aWRlckNhY2hlTWFwOjpBZGRSZXN1
bHQgYWRkUmVzdWx0ID0gc291cmNlUHJvdmlkZXJDYWNoZU1hcC5hZGQoc291cmNlUHJvdmlkZXIs
IDApOwogICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKQEAgLTQ2NCw3ICs0NjQsNyBAQCBT
b3VyY2VQcm92aWRlckNhY2hlKiBKU0dsb2JhbERhdGE6OmFkZFNvCiAgICAgcmV0dXJuIGFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKLXZvaWQgSlNHbG9iYWxEYXRhOjpjbGVh
clNvdXJjZVByb3ZpZGVyQ2FjaGVzKCkKK3ZvaWQgVk06OmNsZWFyU291cmNlUHJvdmlkZXJDYWNo
ZXMoKQogewogICAgIHNvdXJjZVByb3ZpZGVyQ2FjaGVNYXAuY2xlYXIoKTsKIH0KQEAgLTQ4Miw3
ICs0ODIsNyBAQCBzdHJ1Y3QgU3RhY2tQcmVzZXJ2aW5nUmVjb21waWxlciA6IHB1YmxpCiAgICAg
fQogfTsKIAotdm9pZCBKU0dsb2JhbERhdGE6OnJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KCkKK3Zv
aWQgVk06OnJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KCkKIHsKICAgICBpZiAoZHluYW1pY0dsb2Jh
bE9iamVjdCkgewogICAgICAgICBTdGFja1ByZXNlcnZpbmdSZWNvbXBpbGVyIHJlY29tcGlsZXI7
CkBAIC01MTQsMTMgKzUxNCwxMyBAQCB2b2lkIEpTR2xvYmFsRGF0YTo6cmVsZWFzZUV4ZWN1dGFi
bGVNZW1vCiAgICAgaGVhcC5jb2xsZWN0QWxsR2FyYmFnZSgpOwogfQogICAgIAotdm9pZCByZWxl
YXNlRXhlY3V0YWJsZU1lbW9yeShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIHJlbGVh
c2VFeGVjdXRhYmxlTWVtb3J5KFZNJiB2bSkKIHsKLSAgICBnbG9iYWxEYXRhLnJlbGVhc2VFeGVj
dXRhYmxlTWVtb3J5KCk7CisgICAgdm0ucmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoKTsKIH0KIAog
I2lmIEVOQUJMRShERkdfSklUKQotdm9pZCBKU0dsb2JhbERhdGE6OmdhdGhlckNvbnNlcnZhdGl2
ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykKK3ZvaWQgVk06Omdh
dGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290
cykKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNjcmF0Y2hCdWZmZXJzLnNpemUoKTsg
aSsrKSB7CiAgICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBzY3JhdGNoQnVm
ZmVyc1tpXTsKQEAgLTUzMywxMiArNTMzLDEyIEBAIHZvaWQgSlNHbG9iYWxEYXRhOjpnYXRoZXJD
b25zZXJ2YXRpdmVSb28KICNlbmRpZgogCiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQotdm9p
ZCBKU0dsb2JhbERhdGE6OmFkZFJlZ0V4cFRvVHJhY2UoUmVnRXhwKiByZWdFeHApCit2b2lkIFZN
OjphZGRSZWdFeHBUb1RyYWNlKFJlZ0V4cCogcmVnRXhwKQogewogICAgIG1fcnRUcmFjZUxpc3Qt
PmFkZChyZWdFeHApOwogfQogCi12b2lkIEpTR2xvYmFsRGF0YTo6ZHVtcFJlZ0V4cFRyYWNlKCkK
K3ZvaWQgVk06OmR1bXBSZWdFeHBUcmFjZSgpCiB7CiAgICAgLy8gVGhlIGZpcnN0IFJlZ0V4cCBv
YmplY3QgaXMgaWdub3JlZC4gIEl0IGlzIGNyZWF0ZSBieSB0aGUgUmVnRXhwUHJvdG90eXBlIGN0
b3IgYW5kIG5vdCB1c2VkLgogICAgIFJUVHJhY2VMaXN0OjppdGVyYXRvciBpdGVyID0gKyttX3J0
VHJhY2VMaXN0LT5iZWdpbigpOwpAQCAtNTYwLDcgKzU2MCw3IEBAIHZvaWQgSlNHbG9iYWxEYXRh
OjpkdW1wUmVnRXhwVHJhY2UoKQogICAgIG1fcnRUcmFjZUxpc3QtPmNsZWFyKCk7CiB9CiAjZWxz
ZQotdm9pZCBKU0dsb2JhbERhdGE6OmR1bXBSZWdFeHBUcmFjZSgpCit2b2lkIFZNOjpkdW1wUmVn
RXhwVHJhY2UoKQogewogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgJKHJldmlzaW9uIDE0ODYzOCkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxEYXRhLmg6MTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBKU0dsb2JhbERhdGFfaAorI2RlZmluZSBKU0dsb2JhbERhdGFfaAorCisjaW5jbHVkZSAi
Q2FjaGVkVHJhbnNjZW5kZW50YWxGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkRhdGVJbnN0YW5jZUNh
Y2hlLmgiCisjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgorI2luY2x1ZGUgIkhlYXAu
aCIKKyNpbmNsdWRlICJJbnRyaW5zaWMuaCIKKyNpbmNsdWRlICJKSVRUaHVua3MuaCIKKyNpbmNs
dWRlICJKSVRUaHVua3MuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiSlNM
b2NrLmgiCisjaW5jbHVkZSAiTExJbnREYXRhLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmgiCisjaW5jbHVkZSAiTnVtZXJpY1N0cmluZ3MuaCIKKyNpbmNsdWRlICJQcm9maWxl
ckRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUHJpdmF0ZU5hbWUuaCIKKyNpbmNsdWRlICJQcm90b3R5
cGVNYXAuaCIKKyNpbmNsdWRlICJTbWFsbFN0cmluZ3MuaCIKKyNpbmNsdWRlICJTdHJvbmcuaCIK
KyNpbmNsdWRlICJUZXJtaW5hdG9yLmgiCisjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCisj
aW5jbHVkZSAiVHlwZWRBcnJheURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXZWFrUmFuZG9tLmgi
CisjaW5jbHVkZSA8d3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KKyNpbmNsdWRlIDx3dGYv
VGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4K
KyNpbmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgorI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lO
RykKKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgSlND
IHsKKworICAgIGNsYXNzIENvZGVCbG9jazsKKyAgICBjbGFzcyBDb2RlQ2FjaGU7CisgICAgY2xh
c3MgQ29tbW9uSWRlbnRpZmllcnM7CisgICAgY2xhc3MgRXhlY1N0YXRlOworICAgIGNsYXNzIEhh
bmRsZVN0YWNrOworICAgIGNsYXNzIElkZW50aWZpZXJUYWJsZTsKKyAgICBjbGFzcyBJbnRlcnBy
ZXRlcjsKKyAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKKyAgICBjbGFzcyBKU09iamVjdDsKKyAg
ICBjbGFzcyBLZXl3b3JkczsKKyAgICBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisgICAg
Y2xhc3MgTGVnYWN5UHJvZmlsZXI7CisgICAgY2xhc3MgTmF0aXZlRXhlY3V0YWJsZTsKKyAgICBj
bGFzcyBQYXJzZXJBcmVuYTsKKyAgICBjbGFzcyBSZWdFeHBDYWNoZTsKKyAgICBjbGFzcyBTb3Vy
Y2VQcm92aWRlcjsKKyAgICBjbGFzcyBTb3VyY2VQcm92aWRlckNhY2hlOworICAgIHN0cnVjdCBT
dGFja0ZyYW1lOworICAgIGNsYXNzIFN0cmluZ2lmaWVyOworICAgIGNsYXNzIFN0cnVjdHVyZTsK
KyNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCisgICAgY2xhc3MgUmVnRXhwOworI2VuZGlmCisg
ICAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CisgICAgY2xhc3MgVW5saW5rZWRFdmFsQ29kZUJs
b2NrOworICAgIGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOworICAgIGNsYXNzIFVu
bGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKKworI2lmIEVOQUJMRShERkdfSklUKQorICAgIG5hbWVz
cGFjZSBERkcgeworICAgIGNsYXNzIExvbmdMaXZlZFN0YXRlOworICAgIH0KKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworICAgIHN0cnVjdCBIYXNoVGFibGU7CisgICAgc3RydWN0IEluc3Ry
dWN0aW9uOworCisgICAgc3RydWN0IERTVE9mZnNldENhY2hlIHsKKyAgICAgICAgRFNUT2Zmc2V0
Q2FjaGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXNldCgpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB2b2lkIHJlc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgb2Zmc2V0
ID0gMC4wOworICAgICAgICAgICAgc3RhcnQgPSAwLjA7CisgICAgICAgICAgICBlbmQgPSAtMS4w
OworICAgICAgICAgICAgaW5jcmVtZW50ID0gMC4wOworICAgICAgICB9CisKKyAgICAgICAgZG91
YmxlIG9mZnNldDsKKyAgICAgICAgZG91YmxlIHN0YXJ0OworICAgICAgICBkb3VibGUgZW5kOwor
ICAgICAgICBkb3VibGUgaW5jcmVtZW50OworICAgIH07CisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KyAgICBjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKKworI2lmIENPTVBJTEVSKE1TVkMpCisjcHJh
Z21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MjAwKSAvLyBEaXNh
YmxlICJ6ZXJvLXNpemVkIGFycmF5IGluIHN0cnVjdC91bmlvbiIgd2FybmluZworI2VuZGlmCisg
ICAgc3RydWN0IFNjcmF0Y2hCdWZmZXIgeworICAgICAgICBTY3JhdGNoQnVmZmVyKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgdS5tX2FjdGl2ZUxlbmd0aCA9IDA7CisgICAgICAgIH0KKworICAg
ICAgICBzdGF0aWMgU2NyYXRjaEJ1ZmZlciogY3JlYXRlKHNpemVfdCBzaXplKQorICAgICAgICB7
CisgICAgICAgICAgICBTY3JhdGNoQnVmZmVyKiByZXN1bHQgPSBuZXcgKGZhc3RNYWxsb2MoU2Ny
YXRjaEJ1ZmZlcjo6YWxsb2NhdGlvblNpemUoc2l6ZSkpKSBTY3JhdGNoQnVmZmVyOworCisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHNpemVf
dCBhbGxvY2F0aW9uU2l6ZShzaXplX3QgYnVmZmVyU2l6ZSkgeyByZXR1cm4gc2l6ZW9mKFNjcmF0
Y2hCdWZmZXIpICsgYnVmZmVyU2l6ZTsgfQorICAgICAgICB2b2lkIHNldEFjdGl2ZUxlbmd0aChz
aXplX3QgYWN0aXZlTGVuZ3RoKSB7IHUubV9hY3RpdmVMZW5ndGggPSBhY3RpdmVMZW5ndGg7IH0K
KyAgICAgICAgc2l6ZV90IGFjdGl2ZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHUubV9hY3RpdmVM
ZW5ndGg7IH07CisgICAgICAgIHNpemVfdCogYWN0aXZlTGVuZ3RoUHRyKCkgeyByZXR1cm4gJnUu
bV9hY3RpdmVMZW5ndGg7IH07CisgICAgICAgIHZvaWQqIGRhdGFCdWZmZXIoKSB7IHJldHVybiBt
X2J1ZmZlcjsgfQorCisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIHNpemVfdCBtX2FjdGl2
ZUxlbmd0aDsKKyAgICAgICAgICAgIGRvdWJsZSBwYWQ7IC8vIE1ha2Ugc3VyZSBtX2J1ZmZlciBp
cyBkb3VibGUgYWxpZ25lZC4KKyAgICAgICAgfSB1OworI2lmIENQVShNSVBTKSAmJiAoZGVmaW5l
ZCBXVEZfTUlQU19BUkNIX1JFViAmJiBXVEZfTUlQU19BUkNIX1JFViA9PSAyKQorICAgICAgICB2
b2lkKiBtX2J1ZmZlclswXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CisjZWxzZQorICAg
ICAgICB2b2lkKiBtX2J1ZmZlclswXTsKKyNlbmRpZgorICAgIH07CisjaWYgQ09NUElMRVIoTVNW
QykKKyNwcmFnbWEgd2FybmluZyhwb3ApCisjZW5kaWYKKyNlbmRpZgorCisgICAgY2xhc3MgSlNH
bG9iYWxEYXRhIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpTR2xvYmFsRGF0YT4gewor
ICAgIHB1YmxpYzoKKyAgICAgICAgLy8gV2ViQ29yZSBoYXMgYSBvbmUtdG8tb25lIG1hcHBpbmcg
b2YgdGhyZWFkcyB0byBKU0dsb2JhbERhdGFzOworICAgICAgICAvLyBlaXRoZXIgY3JlYXRlKCkg
b3IgY3JlYXRlTGVha2VkKCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UKKyAgICAgICAgLy8g
b24gYSB0aHJlYWQsIHRoaXMgaXMgdGhlICdkZWZhdWx0JyBKU0dsb2JhbERhdGEgKGl0IHVzZXMg
dGhlCisgICAgICAgIC8vIHRocmVhZCdzIGRlZmF1bHQgc3RyaW5nIHVuaXF1aW5nIHRhYmxlIGZy
b20gd3RmVGhyZWFkRGF0YSkuCisgICAgICAgIC8vIEFQSSBjb250ZXh0cyBjcmVhdGVkIHVzaW5n
IHRoZSBuZXcgY29udGV4dCBncm91cCBhd2FyZSBpbnRlcmZhY2UKKyAgICAgICAgLy8gY3JlYXRl
IEFQSUNvbnRleHRHcm91cCBvYmplY3RzIHdoaWNoIHJlcXVpcmUgbGVzcyBsb2NraW5nIG9mIEpT
QworICAgICAgICAvLyB0aGFuIHRoZSBvbGQgc2luZ2xldG9uIEFQSVNoYXJlZCBKU0dsb2JhbERh
dGEgY3JlYXRlZCBmb3IgdXNlIGJ5CisgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBBUEkuCisgICAg
ICAgIGVudW0gR2xvYmFsRGF0YVR5cGUgeyBEZWZhdWx0LCBBUElDb250ZXh0R3JvdXAsIEFQSVNo
YXJlZCB9OworICAgICAgICAKKyAgICAgICAgc3RydWN0IENsaWVudERhdGEgeworICAgICAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+Q2xpZW50RGF0YSgpID0gMDsKKyAgICAgICAg
fTsKKworICAgICAgICBib29sIGlzU2hhcmVkSW5zdGFuY2UoKSB7IHJldHVybiBnbG9iYWxEYXRh
VHlwZSA9PSBBUElTaGFyZWQ7IH0KKyAgICAgICAgYm9vbCB1c2luZ0FQSSgpIHsgcmV0dXJuIGds
b2JhbERhdGFUeXBlICE9IERlZmF1bHQ7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgc2hhcmVkSW5z
dGFuY2VFeGlzdHMoKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTR2xvYmFs
RGF0YSYgc2hhcmVkSW5zdGFuY2UoKTsKKworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IGNyZWF0ZShIZWFwVHlwZSA9IFNtYWxsSGVhcCk7
CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPEpTR2xvYmFsRGF0
YT4gY3JlYXRlTGVha2VkKEhlYXBUeXBlID0gU21hbGxIZWFwKTsKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBjcmVhdGVDb250ZXh0R3JvdXAoSGVhcFR5cGUgPSBTbWFs
bEhlYXApOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB+SlNHbG9iYWxEYXRhKCk7CisKKyAg
ICAgICAgdm9pZCBtYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpIHsgaGVhcC5tYWNoaW5l
VGhyZWFkcygpLm1ha2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCk7IH0KKworICAgIHByaXZh
dGU6CisgICAgICAgIFJlZlB0cjxKU0xvY2s+IG1fYXBpTG9jazsKKworICAgIHB1YmxpYzoKKyNp
ZiBFTkFCTEUoQVNTRU1CTEVSKQorICAgICAgICAvLyBleGVjdXRhYmxlQWxsb2NhdG9yIHNob3Vs
ZCBiZSBkZXN0cnVjdGVkIGFmdGVyIHRoZSBoZWFwLCBhcyB0aGUgaGVhcCBjYW4gY2FsbCBleGVj
dXRhYmxlQWxsb2NhdG9yCisgICAgICAgIC8vIGluIGl0cyBkZXN0cnVjdG9yLgorICAgICAgICBF
eGVjdXRhYmxlQWxsb2NhdG9yIGV4ZWN1dGFibGVBbGxvY2F0b3I7CisjZW5kaWYKKworICAgICAg
ICAvLyBUaGUgaGVhcCBzaG91bGQgYmUganVzdCBhZnRlciBleGVjdXRhYmxlQWxsb2NhdG9yIGFu
ZCBiZWZvcmUgb3RoZXIgbWVtYmVycyB0byBlbnN1cmUgdGhhdCBpdCdzCisgICAgICAgIC8vIGRl
c3RydWN0ZWQgYWZ0ZXIgYWxsIHRoZSBvYmplY3RzIHRoYXQgcmVmZXJlbmNlIGl0LgorICAgICAg
ICBIZWFwIGhlYXA7CisgICAgICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICBPd25Q
dHI8REZHOjpMb25nTGl2ZWRTdGF0ZT4gbV9kZmdTdGF0ZTsKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKworICAgICAgICBHbG9iYWxEYXRhVHlwZSBnbG9iYWxEYXRhVHlwZTsKKyAgICAgICAg
Q2xpZW50RGF0YSogY2xpZW50RGF0YTsKKyAgICAgICAgRXhlY1N0YXRlKiB0b3BDYWxsRnJhbWU7
CisKKyAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBhcnJheUNvbnN0cnVjdG9yVGFibGU7CisgICAg
ICAgIGNvbnN0IEhhc2hUYWJsZSogYXJyYXlQcm90b3R5cGVUYWJsZTsKKyAgICAgICAgY29uc3Qg
SGFzaFRhYmxlKiBib29sZWFuUHJvdG90eXBlVGFibGU7CisgICAgICAgIGNvbnN0IEhhc2hUYWJs
ZSogZGF0ZVRhYmxlOworICAgICAgICBjb25zdCBIYXNoVGFibGUqIGRhdGVDb25zdHJ1Y3RvclRh
YmxlOworICAgICAgICBjb25zdCBIYXNoVGFibGUqIGVycm9yUHJvdG90eXBlVGFibGU7CisgICAg
ICAgIGNvbnN0IEhhc2hUYWJsZSogZ2xvYmFsT2JqZWN0VGFibGU7CisgICAgICAgIGNvbnN0IEhh
c2hUYWJsZSoganNvblRhYmxlOworICAgICAgICBjb25zdCBIYXNoVGFibGUqIG1hdGhUYWJsZTsK
KyAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBudW1iZXJDb25zdHJ1Y3RvclRhYmxlOworICAgICAg
ICBjb25zdCBIYXNoVGFibGUqIG51bWJlclByb3RvdHlwZVRhYmxlOworICAgICAgICBjb25zdCBI
YXNoVGFibGUqIG9iamVjdENvbnN0cnVjdG9yVGFibGU7CisgICAgICAgIGNvbnN0IEhhc2hUYWJs
ZSogcHJpdmF0ZU5hbWVQcm90b3R5cGVUYWJsZTsKKyAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBy
ZWdFeHBUYWJsZTsKKyAgICAgICAgY29uc3QgSGFzaFRhYmxlKiByZWdFeHBDb25zdHJ1Y3RvclRh
YmxlOworICAgICAgICBjb25zdCBIYXNoVGFibGUqIHJlZ0V4cFByb3RvdHlwZVRhYmxlOworICAg
ICAgICBjb25zdCBIYXNoVGFibGUqIHN0cmluZ0NvbnN0cnVjdG9yVGFibGU7CisgICAgICAgIAor
ICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1cmVTdHJ1Y3R1cmU7CisgICAgICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlOworICAgICAgICBTdHJv
bmc8U3RydWN0dXJlPiBkZWJ1Z2dlckFjdGl2YXRpb25TdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9u
ZzxTdHJ1Y3R1cmU+IGludGVycnVwdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmU7CisgICAgICAg
IFN0cm9uZzxTdHJ1Y3R1cmU+IHRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZTsKKyAg
ICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3RyaW5nU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8
U3RydWN0dXJlPiBub3RBbk9iamVjdFN0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVy
ZT4gcHJvcGVydHlOYW1lSXRlcmF0b3JTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1
cmU+IGdldHRlclNldHRlclN0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gYXBp
V3JhcHBlclN0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gSlNTY29wZVN0cnVj
dHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZXhlY3V0YWJsZVN0cnVjdHVyZTsKKyAg
ICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gbmF0aXZlRXhlY3V0YWJsZVN0cnVjdHVyZTsKKyAgICAg
ICAgU3Ryb25nPFN0cnVjdHVyZT4gZXZhbEV4ZWN1dGFibGVTdHJ1Y3R1cmU7CisgICAgICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IHByb2dyYW1FeGVjdXRhYmxlU3RydWN0dXJlOworICAgICAgICBTdHJv
bmc8U3RydWN0dXJlPiBmdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9u
ZzxTdHJ1Y3R1cmU+IHJlZ0V4cFN0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4g
c2hhcmVkU3ltYm9sVGFibGVTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0
cnVjdHVyZUNoYWluU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzcGFyc2VB
cnJheVZhbHVlTWFwU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB3aXRoU2Nv
cGVTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlu
a2VkRXZhbENvZGVCbG9ja1N0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVy
ZT4gcHJvcGVydHlUYWJsZVN0cnVjdHVyZTsKKworICAgICAgICBJZGVudGlmaWVyVGFibGUqIGlk
ZW50aWZpZXJUYWJsZTsKKyAgICAgICAgQ29tbW9uSWRlbnRpZmllcnMqIHByb3BlcnR5TmFtZXM7
CisgICAgICAgIGNvbnN0IE1hcmtlZEFyZ3VtZW50QnVmZmVyKiBlbXB0eUxpc3Q7IC8vIExpc3Rz
IGFyZSBzdXBwb3NlZCB0byBiZSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIHRvIGhhdmUgdGhlaXIg
ZWxlbWVudHMgcHJvcGVybHkgbWFya2VkLCB3aGljaCBpcyBub3QgdGhlIGNhc2UgaGVyZSAtIGJ1
dCB0aGlzIGxpc3QgaGFzIG5vdGhpbmcgdG8gbWFyay4KKyAgICAgICAgU21hbGxTdHJpbmdzIHNt
YWxsU3RyaW5nczsKKyAgICAgICAgTnVtZXJpY1N0cmluZ3MgbnVtZXJpY1N0cmluZ3M7CisgICAg
ICAgIERhdGVJbnN0YW5jZUNhY2hlIGRhdGVJbnN0YW5jZUNhY2hlOworICAgICAgICBXVEY6OlNp
bXBsZVN0YXRzIG1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVDsK
KyAgICAgICAgVmVjdG9yPENvZGVCbG9jayo+IGNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkOworICAg
ICAgICB2b2lkIHN0YXJ0ZWRDb21waWxpbmcoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkLmFwcGVuZChjb2RlQmxvY2sp
OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmaW5pc2hlZENvbXBpbGluZyhDb2RlQmxvY2sq
IGNvZGVCbG9jaykKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxv
Y2ssIGNvZGVCbG9jayA9PSBjb2RlQmxvY2tzQmVpbmdDb21waWxlZC5sYXN0KCkpOworICAgICAg
ICAgICAgY29kZUJsb2Nrc0JlaW5nQ29tcGlsZWQucmVtb3ZlTGFzdCgpOworICAgICAgICB9CisK
KyAgICAgICAgdm9pZCBzZXRJbkRlZmluZU93blByb3BlcnR5KGJvb2wgaW5EZWZpbmVPd25Qcm9w
ZXJ0eSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbkRlZmluZU93blByb3BlcnR5ID0gaW5E
ZWZpbmVPd25Qcm9wZXJ0eTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaXNJbkRlZmluZU93
blByb3BlcnR5KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5EZWZpbmVPd25Q
cm9wZXJ0eTsKKyAgICAgICAgfQorCisgICAgICAgIExlZ2FjeVByb2ZpbGVyKiBlbmFibGVkUHJv
ZmlsZXIoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9lbmFibGVkUHJvZmlsZXI7
CisgICAgICAgIH0KKworI2lmIEVOQUJMRShKSVQpICYmIEVOQUJMRShMTElOVCkKKyAgICAgICAg
Ym9vbCBjYW5Vc2VKSVQoKSB7IHJldHVybiBtX2NhblVzZUpJVDsgfQorI2VsaWYgRU5BQkxFKEpJ
VCkKKyAgICAgICAgYm9vbCBjYW5Vc2VKSVQoKSB7IHJldHVybiB0cnVlOyB9IC8vIGppdCBvbmx5
CisjZWxzZQorICAgICAgICBib29sIGNhblVzZUpJVCgpIHsgcmV0dXJuIGZhbHNlOyB9IC8vIGlu
dGVycHJldGVyIG9ubHkKKyNlbmRpZgorCisjaWYgRU5BQkxFKFlBUlJfSklUKQorICAgICAgICBi
b29sIGNhblVzZVJlZ0V4cEpJVCgpIHsgcmV0dXJuIG1fY2FuVXNlUmVnRXhwSklUOyB9CisjZWxz
ZQorICAgICAgICBib29sIGNhblVzZVJlZ0V4cEpJVCgpIHsgcmV0dXJuIGZhbHNlOyB9IC8vIGlu
dGVycHJldGVyIG9ubHkKKyNlbmRpZgorCisgICAgICAgIFNvdXJjZVByb3ZpZGVyQ2FjaGUqIGFk
ZFNvdXJjZVByb3ZpZGVyQ2FjaGUoU291cmNlUHJvdmlkZXIqKTsKKyAgICAgICAgdm9pZCBjbGVh
clNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7CisKKyAgICAgICAgUHJvdG90eXBlTWFwIHByb3RvdHlw
ZU1hcDsKKworICAgICAgICBPd25QdHI8UGFyc2VyQXJlbmE+IHBhcnNlckFyZW5hOworICAgICAg
ICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFNvdXJjZVByb3ZpZGVyPiwgUmVmUHRyPFNvdXJjZVBy
b3ZpZGVyQ2FjaGU+ID4gU291cmNlUHJvdmlkZXJDYWNoZU1hcDsKKyAgICAgICAgU291cmNlUHJv
dmlkZXJDYWNoZU1hcCBzb3VyY2VQcm92aWRlckNhY2hlTWFwOworICAgICAgICBPd25QdHI8S2V5
d29yZHM+IGtleXdvcmRzOworICAgICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXI7CisjaWYg
RU5BQkxFKEpJVCkKKyAgICAgICAgT3duUHRyPEpJVFRodW5rcz4gaml0U3R1YnM7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZXRDVElTdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRv
cikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGppdFN0dWJzLT5jdGlTdHViKHRoaXMs
IGdlbmVyYXRvcik7CisgICAgICAgIH0KKyAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0SG9z
dEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uLCBJbnRyaW5zaWMpOworI2VuZGlmCisgICAgICAgIE5h
dGl2ZUV4ZWN1dGFibGUqIGdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiwgTmF0aXZlRnVu
Y3Rpb24gY29uc3RydWN0b3IpOworCisgICAgICAgIFRlcm1pbmF0b3IgdGVybWluYXRvcjsKKwor
ICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICAgICAgUmVmQ291bnRlZEFycmF5PFN0YWNr
RnJhbWU+IGV4Y2VwdGlvblN0YWNrOworCisgICAgICAgIGNvbnN0IENsYXNzSW5mbyogY29uc3Qg
anNBcnJheUNsYXNzSW5mbzsKKyAgICAgICAgY29uc3QgQ2xhc3NJbmZvKiBjb25zdCBqc0ZpbmFs
T2JqZWN0Q2xhc3NJbmZvOworCisgICAgICAgIFJldHVybkFkZHJlc3NQdHIgZXhjZXB0aW9uTG9j
YXRpb247CisgICAgICAgIEpTVmFsdWUgaG9zdENhbGxSZXR1cm5WYWx1ZTsKKyAgICAgICAgRXhl
Y1N0YXRlKiBjYWxsRnJhbWVGb3JUaHJvdzsKKyAgICAgICAgdm9pZCogdGFyZ2V0TWFjaGluZVBD
Rm9yVGhyb3c7CisgICAgICAgIEluc3RydWN0aW9uKiB0YXJnZXRJbnRlcnByZXRlclBDRm9yVGhy
b3c7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgIHVpbnQzMl90IG9zckV4aXRJbmRleDsK
KyAgICAgICAgdm9pZCogb3NyRXhpdEp1bXBEZXN0aW5hdGlvbjsKKyAgICAgICAgVmVjdG9yPFNj
cmF0Y2hCdWZmZXIqPiBzY3JhdGNoQnVmZmVyczsKKyAgICAgICAgc2l6ZV90IHNpemVPZkxhc3RT
Y3JhdGNoQnVmZmVyOworICAgICAgICAKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1
ZmZlckZvclNpemUoc2l6ZV90IHNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghc2l6
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKHNpemUgPiBzaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlcikgeworICAgICAgICAgICAgICAgIC8v
IFByb3RlY3QgYWdhaW5zdCBhIE5eMiBtZW1vcnkgdXNhZ2UgcGF0aG9sb2d5IGJ5IGVuc3VyaW5n
CisgICAgICAgICAgICAgICAgLy8gdGhhdCBhdCB3b3JzdCwgd2UgZ2V0IGEgZ2VvbWV0cmljIHNl
cmllcywgbWVhbmluZyB0aGF0IHRoZQorICAgICAgICAgICAgICAgIC8vIHRvdGFsIG1lbW9yeSB1
c2FnZSBpcyBzb21ld2hlcmUgYXJvdW5kCisgICAgICAgICAgICAgICAgLy8gbWF4KHNjcmF0Y2gg
YnVmZmVyIHNpemUpICogNC4KKyAgICAgICAgICAgICAgICBzaXplT2ZMYXN0U2NyYXRjaEJ1ZmZl
ciA9IHNpemUgKiAyOworCisgICAgICAgICAgICAgICAgc2NyYXRjaEJ1ZmZlcnMuYXBwZW5kKFNj
cmF0Y2hCdWZmZXI6OmNyZWF0ZShzaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlcikpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBTY3JhdGNoQnVmZmVyKiByZXN1bHQgPSBzY3JhdGNoQnVmZmVy
cy5sYXN0KCk7CisgICAgICAgICAgICByZXN1bHQtPnNldEFjdGl2ZUxlbmd0aCgwKTsKKyAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGdhdGhlckNv
bnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CisjZW5kaWYKKworICAgICAgICBK
U0dsb2JhbE9iamVjdCogZHluYW1pY0dsb2JhbE9iamVjdDsKKworICAgICAgICBIYXNoU2V0PEpT
T2JqZWN0Kj4gc3RyaW5nUmVjdXJzaW9uQ2hlY2tWaXNpdGVkT2JqZWN0czsKKworICAgICAgICBk
b3VibGUgY2FjaGVkVVRDT2Zmc2V0OworICAgICAgICBEU1RPZmZzZXRDYWNoZSBkc3RPZmZzZXRD
YWNoZTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBjYWNoZWREYXRlU3RyaW5nOworICAgICAg
ICBkb3VibGUgY2FjaGVkRGF0ZVN0cmluZ1ZhbHVlOworCisgICAgICAgIExlZ2FjeVByb2ZpbGVy
KiBtX2VuYWJsZWRQcm9maWxlcjsKKyAgICAgICAgT3duUHRyPFByb2ZpbGVyOjpEYXRhYmFzZT4g
bV9wZXJCeXRlY29kZVByb2ZpbGVyOworICAgICAgICBSZWdFeHBDYWNoZSogbV9yZWdFeHBDYWNo
ZTsKKyAgICAgICAgQnVtcFBvaW50ZXJBbGxvY2F0b3IgbV9yZWdFeHBBbGxvY2F0b3I7CisKKyNp
ZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCisgICAgICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8UmVm
UHRyPFJlZ0V4cD4gPiBSVFRyYWNlTGlzdDsKKyAgICAgICAgUlRUcmFjZUxpc3QqIG1fcnRUcmFj
ZUxpc3Q7CisjZW5kaWYKKworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgVGhyZWFkSWRlbnRpZmll
ciBleGNsdXNpdmVUaHJlYWQ7CisjZW5kaWYKKworICAgICAgICBDYWNoZWRUcmFuc2NlbmRlbnRh
bEZ1bmN0aW9uPHN0ZDo6c2luPiBjYWNoZWRTaW47CisKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCByZXNldERhdGVDYWNoZSgpOworCisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgc3RhcnRTYW1wbGluZygpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHN0b3BT
YW1wbGluZygpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXBTYW1wbGVEYXRh
KEV4ZWNTdGF0ZSogZXhlYyk7CisgICAgICAgIFJlZ0V4cENhY2hlKiByZWdFeHBDYWNoZSgpIHsg
cmV0dXJuIG1fcmVnRXhwQ2FjaGU7IH0KKyNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCisgICAg
ICAgIHZvaWQgYWRkUmVnRXhwVG9UcmFjZShQYXNzUmVmUHRyPFJlZ0V4cD4gcmVnRXhwKTsKKyNl
bmRpZgorICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXBSZWdFeHBUcmFjZSgpOwor
CisgICAgICAgIGJvb2wgaXNDb2xsZWN0b3JCdXN5KCkgeyByZXR1cm4gaGVhcC5pc0J1c3koKTsg
fQorICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5
KCk7CisKKyNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKKyAgICAgICAgYm9vbCBpc0luaXRpYWxp
emluZ09iamVjdCgpIGNvbnN0OyAKKyAgICAgICAgdm9pZCBzZXRJbml0aWFsaXppbmdPYmplY3RD
bGFzcyhjb25zdCBDbGFzc0luZm8qKTsKKyNlbmRpZgorCisgICAgICAgIHVuc2lnbmVkIG1fbmV3
U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zOworCisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBzX21pbk51bWJlck9mTmV3U3RyaW5nc1RvSGFzaENvbnMgPSAxMDA7CisKKyAgICAgICAgYm9v
bCBoYXZlRW5vdWdoTmV3U3RyaW5nc1RvSGFzaENvbnMoKSB7IHJldHVybiBtX25ld1N0cmluZ3NT
aW5jZUxhc3RIYXNoQ29ucyA+IHNfbWluTnVtYmVyT2ZOZXdTdHJpbmdzVG9IYXNoQ29uczsgfQor
ICAgICAgICB2b2lkIHJlc2V0TmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zKCkgeyBtX25ld1N0
cmluZ3NTaW5jZUxhc3RIYXNoQ29ucyA9IDA7IH0KKworI2RlZmluZSByZWdpc3RlclR5cGVkQXJy
YXlGdW5jdGlvbih0eXBlLCBjYXBpdGFsaXplZFR5cGUpIFwKKyAgICAgICAgdm9pZCByZWdpc3Rl
clR5cGVkQXJyYXlEZXNjcmlwdG9yKGNvbnN0IGNhcGl0YWxpemVkVHlwZSMjQXJyYXkqLCBjb25z
dCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgXAorICAgICAgICB7IFwKKyAgICAg
ICAgICAgIEFTU0VSVCghbV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvci5tX2NsYXNzSW5mbyB8fCBt
XyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yLm1fY2xhc3NJbmZvID09IGRlc2NyaXB0b3IubV9jbGFz
c0luZm8pOyBcCisgICAgICAgICAgICBtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yID0gZGVzY3Jp
cHRvcjsgXAorICAgICAgICAgICAgQVNTRVJUKG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IubV9j
bGFzc0luZm8pOyBcCisgICAgICAgIH0gXAorICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3Jp
cHRvciYgdHlwZSMjQXJyYXlEZXNjcmlwdG9yKCkgY29uc3QgeyBBU1NFUlQobV8jI3R5cGUjI0Fy
cmF5RGVzY3JpcHRvci5tX2NsYXNzSW5mbyk7IHJldHVybiBtXyMjdHlwZSMjQXJyYXlEZXNjcmlw
dG9yOyB9CisKKyAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oaW50OCwgSW50OCk7
CisgICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKGludDE2LCBJbnQxNik7CisgICAg
ICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKGludDMyLCBJbnQzMik7CisgICAgICAgIHJl
Z2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKHVpbnQ4LCBVaW50OCk7CisgICAgICAgIHJlZ2lzdGVy
VHlwZWRBcnJheUZ1bmN0aW9uKHVpbnQ4Q2xhbXBlZCwgVWludDhDbGFtcGVkKTsKKyAgICAgICAg
cmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odWludDE2LCBVaW50MTYpOworICAgICAgICByZWdp
c3RlclR5cGVkQXJyYXlGdW5jdGlvbih1aW50MzIsIFVpbnQzMik7CisgICAgICAgIHJlZ2lzdGVy
VHlwZWRBcnJheUZ1bmN0aW9uKGZsb2F0MzIsIEZsb2F0MzIpOworICAgICAgICByZWdpc3RlclR5
cGVkQXJyYXlGdW5jdGlvbihmbG9hdDY0LCBGbG9hdDY0KTsKKyN1bmRlZiByZWdpc3RlclR5cGVk
QXJyYXlGdW5jdGlvbgorICAgICAgICAKKyAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0
b3IqIHR5cGVkQXJyYXlEZXNjcmlwdG9yKFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAgY2FzZSBUeXBl
ZEFycmF5Tm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGNhc2Ug
VHlwZWRBcnJheUludDg6CisgICAgICAgICAgICAgICAgcmV0dXJuICZpbnQ4QXJyYXlEZXNjcmlw
dG9yKCk7CisgICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlJbnQxNjoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJmludDE2QXJyYXlEZXNjcmlwdG9yKCk7CisgICAgICAgICAgICBjYXNlIFR5cGVk
QXJyYXlJbnQzMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gJmludDMyQXJyYXlEZXNjcmlwdG9y
KCk7CisgICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50ODoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gJnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCk7CisgICAgICAgICAgICBjYXNlIFR5cGVkQXJy
YXlVaW50OENsYW1wZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50OENsYW1wZWRBcnJh
eURlc2NyaXB0b3IoKTsKKyAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQxNjoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gJnVpbnQxNkFycmF5RGVzY3JpcHRvcigpOworICAgICAgICAgICAg
Y2FzZSBUeXBlZEFycmF5VWludDMyOgorICAgICAgICAgICAgICAgIHJldHVybiAmdWludDMyQXJy
YXlEZXNjcmlwdG9yKCk7CisgICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgorICAg
ICAgICAgICAgICAgIHJldHVybiAmZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpOworICAgICAgICAg
ICAgY2FzZSBUeXBlZEFycmF5RmxvYXQ2NDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJmZsb2F0
NjRBcnJheURlc2NyaXB0b3IoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgQ1JBU0goKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIEpTTG9jayYgYXBpTG9jaygpIHsgcmV0dXJuICptX2FwaUxvY2s7
IH0KKyAgICAgICAgQ29kZUNhY2hlKiBjb2RlQ2FjaGUoKSB7IHJldHVybiBtX2NvZGVDYWNoZS5n
ZXQoKTsgfQorCisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGlzY2FyZEFsbENvZGUo
KTsKKworICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CisgICAgICAgIAorICAgICAgICBKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cGUsIEhl
YXBUeXBlKTsKKyAgICAgICAgc3RhdGljIEpTR2xvYmFsRGF0YSomIHNoYXJlZEluc3RhbmNlSW50
ZXJuYWwoKTsKKyAgICAgICAgdm9pZCBjcmVhdGVOYXRpdmVUaHVuaygpOworI2lmIEVOQUJMRShB
U1NFTUJMRVIpCisgICAgICAgIGJvb2wgbV9jYW5Vc2VBc3NlbWJsZXI7CisjZW5kaWYKKyNpZiBF
TkFCTEUoSklUKQorICAgICAgICBib29sIG1fY2FuVXNlSklUOworI2VuZGlmCisjaWYgRU5BQkxF
KFlBUlJfSklUKQorICAgICAgICBib29sIG1fY2FuVXNlUmVnRXhwSklUOworI2VuZGlmCisjaWYg
RU5BQkxFKEdDX1ZBTElEQVRJT04pCisgICAgICAgIGNvbnN0IENsYXNzSW5mbyogbV9pbml0aWFs
aXppbmdPYmplY3RDbGFzczsKKyNlbmRpZgorICAgICAgICBib29sIG1faW5EZWZpbmVPd25Qcm9w
ZXJ0eTsKKyAgICAgICAgT3duUHRyPENvZGVDYWNoZT4gbV9jb2RlQ2FjaGU7CisKKyAgICAgICAg
VHlwZWRBcnJheURlc2NyaXB0b3IgbV9pbnQ4QXJyYXlEZXNjcmlwdG9yOworICAgICAgICBUeXBl
ZEFycmF5RGVzY3JpcHRvciBtX2ludDE2QXJyYXlEZXNjcmlwdG9yOworICAgICAgICBUeXBlZEFy
cmF5RGVzY3JpcHRvciBtX2ludDMyQXJyYXlEZXNjcmlwdG9yOworICAgICAgICBUeXBlZEFycmF5
RGVzY3JpcHRvciBtX3VpbnQ4QXJyYXlEZXNjcmlwdG9yOworICAgICAgICBUeXBlZEFycmF5RGVz
Y3JpcHRvciBtX3VpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcjsKKyAgICAgICAgVHlwZWRBcnJh
eURlc2NyaXB0b3IgbV91aW50MTZBcnJheURlc2NyaXB0b3I7CisgICAgICAgIFR5cGVkQXJyYXlE
ZXNjcmlwdG9yIG1fdWludDMyQXJyYXlEZXNjcmlwdG9yOworICAgICAgICBUeXBlZEFycmF5RGVz
Y3JpcHRvciBtX2Zsb2F0MzJBcnJheURlc2NyaXB0b3I7CisgICAgICAgIFR5cGVkQXJyYXlEZXNj
cmlwdG9yIG1fZmxvYXQ2NEFycmF5RGVzY3JpcHRvcjsKKyAgICB9OworCisjaWYgRU5BQkxFKEdD
X1ZBTElEQVRJT04pCisgICAgaW5saW5lIGJvb2wgSlNHbG9iYWxEYXRhOjppc0luaXRpYWxpemlu
Z09iamVjdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISFtX2luaXRpYWxpemluZ09i
amVjdENsYXNzOworICAgIH0KKworICAgIGlubGluZSB2b2lkIEpTR2xvYmFsRGF0YTo6c2V0SW5p
dGlhbGl6aW5nT2JqZWN0Q2xhc3MoY29uc3QgQ2xhc3NJbmZvKiBpbml0aWFsaXppbmdPYmplY3RD
bGFzcykKKyAgICB7CisgICAgICAgIG1faW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MgPSBpbml0aWFs
aXppbmdPYmplY3RDbGFzczsKKyAgICB9CisjZW5kaWYKKworICAgIGlubGluZSBIZWFwKiBXZWFr
U2V0OjpoZWFwKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAmbV9nbG9iYWxEYXRhLT5o
ZWFwOworICAgIH0KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dsb2JhbERh
dGFfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw4ICsyNiw4IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgSlNHbG9iYWxEYXRhX2gK
LSNkZWZpbmUgSlNHbG9iYWxEYXRhX2gKKyNpZm5kZWYgVk1faAorI2RlZmluZSBWTV9oCiAKICNp
bmNsdWRlICJDYWNoZWRUcmFuc2NlbmRlbnRhbEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiRGF0ZUlu
c3RhbmNlQ2FjaGUuaCIKQEAgLTE2MiwxNSArMTYyLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogI2Vu
ZGlmCiAjZW5kaWYKIAotICAgIGNsYXNzIEpTR2xvYmFsRGF0YSA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxKU0dsb2JhbERhdGE+IHsKKyAgICBjbGFzcyBWTSA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxWTT4gewogICAgIHB1YmxpYzoKLSAgICAgICAgLy8gV2ViQ29yZSBoYXMg
YSBvbmUtdG8tb25lIG1hcHBpbmcgb2YgdGhyZWFkcyB0byBKU0dsb2JhbERhdGFzOworICAgICAg
ICAvLyBXZWJDb3JlIGhhcyBhIG9uZS10by1vbmUgbWFwcGluZyBvZiB0aHJlYWRzIHRvIFZNczsK
ICAgICAgICAgLy8gZWl0aGVyIGNyZWF0ZSgpIG9yIGNyZWF0ZUxlYWtlZCgpIHNob3VsZCBvbmx5
IGJlIGNhbGxlZCBvbmNlCi0gICAgICAgIC8vIG9uIGEgdGhyZWFkLCB0aGlzIGlzIHRoZSAnZGVm
YXVsdCcgSlNHbG9iYWxEYXRhIChpdCB1c2VzIHRoZQorICAgICAgICAvLyBvbiBhIHRocmVhZCwg
dGhpcyBpcyB0aGUgJ2RlZmF1bHQnIFZNIChpdCB1c2VzIHRoZQogICAgICAgICAvLyB0aHJlYWQn
cyBkZWZhdWx0IHN0cmluZyB1bmlxdWluZyB0YWJsZSBmcm9tIHd0ZlRocmVhZERhdGEpLgogICAg
ICAgICAvLyBBUEkgY29udGV4dHMgY3JlYXRlZCB1c2luZyB0aGUgbmV3IGNvbnRleHQgZ3JvdXAg
YXdhcmUgaW50ZXJmYWNlCiAgICAgICAgIC8vIGNyZWF0ZSBBUElDb250ZXh0R3JvdXAgb2JqZWN0
cyB3aGljaCByZXF1aXJlIGxlc3MgbG9ja2luZyBvZiBKU0MKLSAgICAgICAgLy8gdGhhbiB0aGUg
b2xkIHNpbmdsZXRvbiBBUElTaGFyZWQgSlNHbG9iYWxEYXRhIGNyZWF0ZWQgZm9yIHVzZSBieQor
ICAgICAgICAvLyB0aGFuIHRoZSBvbGQgc2luZ2xldG9uIEFQSVNoYXJlZCBWTSBjcmVhdGVkIGZv
ciB1c2UgYnkKICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIEFQSS4KICAgICAgICAgZW51bSBHbG9i
YWxEYXRhVHlwZSB7IERlZmF1bHQsIEFQSUNvbnRleHRHcm91cCwgQVBJU2hhcmVkIH07CiAgICAg
ICAgIApAQCAtMTc4LDE1ICsxNzgsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5DbGllbnREYXRhKCkgPSAwOwogICAgICAgICB9Owog
Ci0gICAgICAgIGJvb2wgaXNTaGFyZWRJbnN0YW5jZSgpIHsgcmV0dXJuIGdsb2JhbERhdGFUeXBl
ID09IEFQSVNoYXJlZDsgfQotICAgICAgICBib29sIHVzaW5nQVBJKCkgeyByZXR1cm4gZ2xvYmFs
RGF0YVR5cGUgIT0gRGVmYXVsdDsgfQorICAgICAgICBib29sIGlzU2hhcmVkSW5zdGFuY2UoKSB7
IHJldHVybiB2bVR5cGUgPT0gQVBJU2hhcmVkOyB9CisgICAgICAgIGJvb2wgdXNpbmdBUEkoKSB7
IHJldHVybiB2bVR5cGUgIT0gRGVmYXVsdDsgfQogICAgICAgICBzdGF0aWMgYm9vbCBzaGFyZWRJ
bnN0YW5jZUV4aXN0cygpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNHbG9i
YWxEYXRhJiBzaGFyZWRJbnN0YW5jZSgpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgVk0mIHNoYXJlZEluc3RhbmNlKCk7CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIFBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBjcmVhdGUoSGVhcFR5cGUgPSBTbWFsbEhlYXAp
OwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUGFzc1JlZlB0cjxKU0dsb2JhbERh
dGE+IGNyZWF0ZUxlYWtlZChIZWFwVHlwZSA9IFNtYWxsSGVhcCk7Ci0gICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4gY3JlYXRlQ29udGV4dEdyb3VwKEhlYXBUeXBlID0gU21h
bGxIZWFwKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTR2xvYmFsRGF0YSgpOworICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUGFzc1JlZlB0cjxWTT4gY3JlYXRlKEhlYXBU
eXBlID0gU21hbGxIZWFwKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFBhc3NS
ZWZQdHI8Vk0+IGNyZWF0ZUxlYWtlZChIZWFwVHlwZSA9IFNtYWxsSGVhcCk7CisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFZNPiBjcmVhdGVDb250ZXh0R3JvdXAoSGVhcFR5cGUgPSBTbWFsbEhl
YXApOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB+Vk0oKTsKIAogICAgICAgICB2b2lkIG1h
a2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCkgeyBoZWFwLm1hY2hpbmVUaHJlYWRzKCkubWFr
ZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKTsgfQogCkBAIC0yMDgsNyArMjA4LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIE93blB0cjxERkc6OkxvbmdMaXZlZFN0YXRlPiBtX2RmZ1N0
YXRlOwogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCi0gICAgICAgIEdsb2JhbERhdGFUeXBl
IGdsb2JhbERhdGFUeXBlOworICAgICAgICBHbG9iYWxEYXRhVHlwZSB2bVR5cGU7CiAgICAgICAg
IENsaWVudERhdGEqIGNsaWVudERhdGE7CiAgICAgICAgIEV4ZWNTdGF0ZSogdG9wQ2FsbEZyYW1l
OwogCkBAIC00NzYsOCArNDc2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAg
ICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAgICAgCi0gICAg
ICAgIEpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwZSwgSGVhcFR5cGUpOwotICAgICAgICBzdGF0
aWMgSlNHbG9iYWxEYXRhKiYgc2hhcmVkSW5zdGFuY2VJbnRlcm5hbCgpOworICAgICAgICBWTShH
bG9iYWxEYXRhVHlwZSwgSGVhcFR5cGUpOworICAgICAgICBzdGF0aWMgVk0qJiBzaGFyZWRJbnN0
YW5jZUludGVybmFsKCk7CiAgICAgICAgIHZvaWQgY3JlYXRlTmF0aXZlVGh1bmsoKTsKICNpZiBF
TkFCTEUoQVNTRU1CTEVSKQogICAgICAgICBib29sIG1fY2FuVXNlQXNzZW1ibGVyOwpAQCAtNTA2
LDEyICs1MDYsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lmIEVOQUJMRShHQ19W
QUxJREFUSU9OKQotICAgIGlubGluZSBib29sIEpTR2xvYmFsRGF0YTo6aXNJbml0aWFsaXppbmdP
YmplY3QoKSBjb25zdAorICAgIGlubGluZSBib29sIFZNOjppc0luaXRpYWxpemluZ09iamVjdCgp
IGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gISFtX2luaXRpYWxpemluZ09iamVjdENsYXNz
OwogICAgIH0KIAotICAgIGlubGluZSB2b2lkIEpTR2xvYmFsRGF0YTo6c2V0SW5pdGlhbGl6aW5n
T2JqZWN0Q2xhc3MoY29uc3QgQ2xhc3NJbmZvKiBpbml0aWFsaXppbmdPYmplY3RDbGFzcykKKyAg
ICBpbmxpbmUgdm9pZCBWTTo6c2V0SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoY29uc3QgQ2xhc3NJ
bmZvKiBpbml0aWFsaXppbmdPYmplY3RDbGFzcykKICAgICB7CiAgICAgICAgIG1faW5pdGlhbGl6
aW5nT2JqZWN0Q2xhc3MgPSBpbml0aWFsaXppbmdPYmplY3RDbGFzczsKICAgICB9CkBAIC01MTks
OSArNTE5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBpbmxpbmUgSGVhcCogV2Vha1NldDo6
aGVhcCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gJm1fZ2xvYmFsRGF0YS0+aGVhcDsK
KyAgICAgICAgcmV0dXJuICZtX3ZtLT5oZWFwOwogICAgIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CiAKLSNlbmRpZiAvLyBKU0dsb2JhbERhdGFfaAorI2VuZGlmIC8vIFZNX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dyaXRlQmFycmllci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dyaXRlQmFycmllci5oCShyZXZpc2lvbiAxNDg2
MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Xcml0ZUJhcnJpZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpT
Q2VsbDsKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwogY2xhc3MgSlNHbG9iYWxPYmpl
Y3Q7CiAKIHRlbXBsYXRlPGNsYXNzIFQ+IGNsYXNzIFdyaXRlQmFycmllckJhc2U7CkBAIC02OCwx
MSArNjgsMTEgQEAgdGVtcGxhdGU8Y2xhc3MgVD4gaW5saW5lIHZvaWQgdmFsaWRhdGVDZQogLy8g
V2UgaGF2ZSBhIHNlcGFyYXRlIGJhc2UgY2xhc3Mgd2l0aCBubyBjb25zdHJ1Y3RvcnMgZm9yIHVz
ZSBpbiBVbmlvbnMuCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV3JpdGVCYXJyaWVyQmFz
ZSB7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25z
dCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkKKyAgICB2b2lkIHNldChWTSYgdm0sIGNvbnN0IEpT
Q2VsbCogb3duZXIsIFQqIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKHZhbHVlKTsKICAg
ICAgICAgdmFsaWRhdGVDZWxsKHZhbHVlKTsKLSAgICAgICAgc2V0RWFybHlWYWx1ZShnbG9iYWxE
YXRhLCBvd25lciwgdmFsdWUpOworICAgICAgICBzZXRFYXJseVZhbHVlKHZtLCBvd25lciwgdmFs
dWUpOwogICAgIH0KICAgICAKICAgICAvLyBUaGlzIGlzIG1lYW50IHRvIGJlIHVzZWQgbGlrZSBv
cGVyYXRvcj0sIGJ1dCBpcyBjYWxsZWQgY29weUZyb20gaW5zdGVhZCwgaW4KQEAgLTgyLDE2ICs4
MiwxNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2VsbCA9IG90aGVyLm1fY2VsbDsKICAgICB9CiAK
LSAgICB2b2lkIHNldE1heUJlTnVsbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IEpT
Q2VsbCogb3duZXIsIFQqIHZhbHVlKQorICAgIHZvaWQgc2V0TWF5QmVOdWxsKFZNJiB2bSwgY29u
c3QgSlNDZWxsKiBvd25lciwgVCogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUpCiAg
ICAgICAgICAgICB2YWxpZGF0ZUNlbGwodmFsdWUpOwotICAgICAgICBzZXRFYXJseVZhbHVlKGds
b2JhbERhdGEsIG93bmVyLCB2YWx1ZSk7CisgICAgICAgIHNldEVhcmx5VmFsdWUodm0sIG93bmVy
LCB2YWx1ZSk7CiAgICAgfQogCiAgICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCBieSBKU0NlbGwg
ZHVyaW5nIGVhcmx5IGluaXRpYWxpc2F0aW9uCiAgICAgLy8gd2hlbiBzb21lIGJhc2ljIHR5cGVz
IGFyZW4ndCB5ZXQgY29tcGxldGVseSBpbnN0YW50aWF0ZWQKLSAgICB2b2lkIHNldEVhcmx5VmFs
dWUoSlNHbG9iYWxEYXRhJiwgY29uc3QgSlNDZWxsKiBvd25lciwgVCogdmFsdWUpCisgICAgdm9p
ZCBzZXRFYXJseVZhbHVlKFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwgVCogdmFsdWUpCiAgICAg
ewogICAgICAgICB0aGlzLT5tX2NlbGwgPSByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHZhbHVl
KTsKICAgICAgICAgSGVhcDo6d3JpdGVCYXJyaWVyKG93bmVyLCB0aGlzLT5tX2NlbGwpOwpAQCAt
MTQ3LDcgKzE0Nyw3IEBAIHByaXZhdGU6CiAKIHRlbXBsYXRlIDw+IGNsYXNzIFdyaXRlQmFycmll
ckJhc2U8VW5rbm93bj4gewogcHVibGljOgotICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYsIGNv
bnN0IEpTQ2VsbCogb3duZXIsIEpTVmFsdWUgdmFsdWUpCisgICAgdm9pZCBzZXQoVk0mLCBjb25z
dCBKU0NlbGwqIG93bmVyLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgbV92YWx1ZSA9
IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7CiAgICAgICAgIEhlYXA6OndyaXRlQmFycmllcihvd25l
ciwgdmFsdWUpOwpAQCAtMTk3LDE1ICsxOTcsMTUgQEAgcHVibGljOgogICAgICAgICB0aGlzLT5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKDApOwogICAgIH0KIAotICAgIFdyaXRlQmFycmllcihKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQorICAg
IFdyaXRlQmFycmllcihWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQogICAg
IHsKLSAgICAgICAgdGhpcy0+c2V0KGdsb2JhbERhdGEsIG93bmVyLCB2YWx1ZSk7CisgICAgICAg
IHRoaXMtPnNldCh2bSwgb3duZXIsIHZhbHVlKTsKICAgICB9CiAKICAgICBlbnVtIE1heUJlTnVs
bFRhZyB7IE1heUJlTnVsbCB9OwotICAgIFdyaXRlQmFycmllcihKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlLCBNYXlCZU51bGxUYWcpCisgICAg
V3JpdGVCYXJyaWVyKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgVCogdmFsdWUsIE1heUJl
TnVsbFRhZykKICAgICB7Ci0gICAgICAgIHRoaXMtPnNldE1heUJlTnVsbChnbG9iYWxEYXRhLCBv
d25lciwgdmFsdWUpOworICAgICAgICB0aGlzLT5zZXRNYXlCZU51bGwodm0sIG93bmVyLCB2YWx1
ZSk7CiAgICAgfQogfTsKIApAQCAtMjE2LDkgKzIxNiw5IEBAIHB1YmxpYzoKICAgICAgICAgdGhp
cy0+c2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIH0KIAotICAgIFdyaXRl
QmFycmllcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpT
VmFsdWUgdmFsdWUpCisgICAgV3JpdGVCYXJyaWVyKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25l
ciwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHRoaXMtPnNldChnbG9iYWxEYXRhLCBv
d25lciwgdmFsdWUpOworICAgICAgICB0aGlzLT5zZXQodm0sIG93bmVyLCB2YWx1ZSk7CiAgICAg
fQogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVycHJldGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVycHJl
dGVyLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lh
cnJJbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTksNyArMzU5LDcgQEAgcHVibGlj
OgogICAgIGJvb2wgbV9pZ25vcmVDYXNlOwogICAgIGJvb2wgbV9tdWx0aWxpbmU7CiAgICAgLy8g
RWFjaCBCeXRlY29kZVBhdHRlcm4gaXMgYXNzb2NpYXRlZCB3aXRoIGEgUmVnRXhwLCBlYWNoIFJl
Z0V4cCBpcyBhc3NvY2lhdGVkCi0gICAgLy8gd2l0aCBhIEpTR2xvYmFsRGF0YS4gIENhY2hlIGEg
cG9pbnRlciB0byBvdXQgSlNHbG9iYWxEYXRhJ3MgbV9yZWdFeHBBbGxvY2F0b3IuCisgICAgLy8g
d2l0aCBhIFZNLiAgQ2FjaGUgYSBwb2ludGVyIHRvIG91dCBWTSdzIG1fcmVnRXhwQWxsb2NhdG9y
LgogICAgIEJ1bXBQb2ludGVyQWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsKIAogICAgIENoYXJhY3Rl
ckNsYXNzKiBuZXdsaW5lQ2hhcmFjdGVyQ2xhc3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUveWFyci9ZYXJySklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
eWFyci9ZYXJySklULmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3lhcnIvWWFyckpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBZYXJyIHsKIAogdGVtcGxhdGU8WWFyckpJVENvbXBpbGVN
b2RlIGNvbXBpbGVNb2RlPgogY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3Nl
bWJsZXIgewotICAgIGZyaWVuZCB2b2lkIGppdENvbXBpbGUoSlNHbG9iYWxEYXRhKiwgWWFyckNv
ZGVCbG9jayYgaml0T2JqZWN0LCBjb25zdCBTdHJpbmcmIHBhdHRlcm4sIHVuc2lnbmVkJiBudW1T
dWJwYXR0ZXJucywgY29uc3QgY2hhciomIGVycm9yLCBib29sIGlnbm9yZUNhc2UsIGJvb2wgbXVs
dGlsaW5lKTsKKyAgICBmcmllbmQgdm9pZCBqaXRDb21waWxlKFZNKiwgWWFyckNvZGVCbG9jayYg
aml0T2JqZWN0LCBjb25zdCBTdHJpbmcmIHBhdHRlcm4sIHVuc2lnbmVkJiBudW1TdWJwYXR0ZXJu
cywgY29uc3QgY2hhciomIGVycm9yLCBib29sIGlnbm9yZUNhc2UsIGJvb2wgbXVsdGlsaW5lKTsK
IAogI2lmIENQVShBUk0pCiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5wdXQgPSBBUk1S
ZWdpc3RlcnM6OnIwOwpAQCAtMjYwOCw3ICsyNjA4LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9
CiAKLSAgICB2b2lkIGNvbXBpbGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBZYXJyQ29kZUJs
b2NrJiBqaXRPYmplY3QpCisgICAgdm9pZCBjb21waWxlKFZNKiB2bSwgWWFyckNvZGVCbG9jayYg
aml0T2JqZWN0KQogICAgIHsKICAgICAgICAgZ2VuZXJhdGVFbnRlcigpOwogCkBAIC0yNjQyLDcg
KzI2NDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIGJhY2t0cmFjaygpOwogCiAgICAgICAgIC8vIExp
bmsgJiBmaW5hbGl6ZSB0aGUgY29kZS4KLSAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpn
bG9iYWxEYXRhLCB0aGlzLCBSRUdFWFBfQ09ERV9JRCk7CisgICAgICAgIExpbmtCdWZmZXIgbGlu
a0J1ZmZlcigqdm0sIHRoaXMsIFJFR0VYUF9DT0RFX0lEKTsKICAgICAgICAgbV9iYWNrdHJhY2tp
bmdTdGF0ZS5saW5rRGF0YUxhYmVscyhsaW5rQnVmZmVyKTsKIAogICAgICAgICBpZiAoY29tcGls
ZU1vZGUgPT0gTWF0Y2hPbmx5KSB7CkBAIC0yNjg5LDEyICsyNjg5LDEyIEBAIHByaXZhdGU6CiAg
ICAgQmFja3RyYWNraW5nU3RhdGUgbV9iYWNrdHJhY2tpbmdTdGF0ZTsKIH07CiAKLXZvaWQgaml0
Q29tcGlsZShZYXJyUGF0dGVybiYgcGF0dGVybiwgWWFyckNoYXJTaXplIGNoYXJTaXplLCBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIFlhcnJDb2RlQmxvY2smIGppdE9iamVjdCwgWWFyckpJVENv
bXBpbGVNb2RlIG1vZGUpCit2b2lkIGppdENvbXBpbGUoWWFyclBhdHRlcm4mIHBhdHRlcm4sIFlh
cnJDaGFyU2l6ZSBjaGFyU2l6ZSwgVk0qIHZtLCBZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3QsIFlh
cnJKSVRDb21waWxlTW9kZSBtb2RlKQogewogICAgIGlmIChtb2RlID09IE1hdGNoT25seSkKLSAg
ICAgICAgWWFyckdlbmVyYXRvcjxNYXRjaE9ubHk+KHBhdHRlcm4sIGNoYXJTaXplKS5jb21waWxl
KGdsb2JhbERhdGEsIGppdE9iamVjdCk7CisgICAgICAgIFlhcnJHZW5lcmF0b3I8TWF0Y2hPbmx5
PihwYXR0ZXJuLCBjaGFyU2l6ZSkuY29tcGlsZSh2bSwgaml0T2JqZWN0KTsKICAgICBlbHNlCi0g
ICAgICAgIFlhcnJHZW5lcmF0b3I8SW5jbHVkZVN1YnBhdHRlcm5zPihwYXR0ZXJuLCBjaGFyU2l6
ZSkuY29tcGlsZShnbG9iYWxEYXRhLCBqaXRPYmplY3QpOworICAgICAgICBZYXJyR2VuZXJhdG9y
PEluY2x1ZGVTdWJwYXR0ZXJucz4ocGF0dGVybiwgY2hhclNpemUpLmNvbXBpbGUodm0sIGppdE9i
amVjdCk7CiB9CiAKIH19CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklU
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCShy
ZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShZQVJSX0pJVCkK
IAotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAi
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiTWF0Y2hSZXN1bHQuaCIKICNpbmNs
dWRlICJZYXJyLmgiCkBAIC00Miw3ICs0Miw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFz
cyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIGNsYXNzIEV4ZWN1dGFibGVQb29sOwogCiBuYW1l
c3BhY2UgWWFyciB7CkBAIC0xMzIsNyArMTMyLDcgQEAgZW51bSBZYXJySklUQ29tcGlsZU1vZGUg
ewogICAgIE1hdGNoT25seSwKICAgICBJbmNsdWRlU3VicGF0dGVybnMKIH07Ci12b2lkIGppdENv
bXBpbGUoWWFyclBhdHRlcm4mLCBZYXJyQ2hhclNpemUsIEpTR2xvYmFsRGF0YSosIFlhcnJDb2Rl
QmxvY2smIGppdE9iamVjdCwgWWFyckpJVENvbXBpbGVNb2RlID0gSW5jbHVkZVN1YnBhdHRlcm5z
KTsKK3ZvaWQgaml0Q29tcGlsZShZYXJyUGF0dGVybiYsIFlhcnJDaGFyU2l6ZSwgVk0qLCBZYXJy
Q29kZUJsb2NrJiBqaXRPYmplY3QsIFlhcnJKSVRDb21waWxlTW9kZSA9IEluY2x1ZGVTdWJwYXR0
ZXJucyk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpZYXJyCiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE0ODY1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDUzMiBAQAorMjAxMy0wNC0xNyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZWQgSlNHbG9iYWxEYXRhIHRvIFZNCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ3NzcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9P
UFMhKS4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNHbG9iYWxEYXRh
Lmg6IFJlbW92ZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9WTS5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTR2xv
YmFsRGF0YS5oLgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUu
b3JkZXI6CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAg
ICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICog
YmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRPTU9iamVjdEhhc2hUYWJsZU1hcDo6bWFwRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9E
T01PYmplY3RIYXNoVGFibGVNYXAuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChET01PYmpl
Y3RIYXNoVGFibGVNYXApOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpET01XcmFwcGVyV29ybGQ6OkRPTVdyYXBwZXJXb3JsZCk6
CisgICAgICAgIChXZWJDb3JlOjpET01XcmFwcGVyV29ybGQ6On5ET01XcmFwcGVyV29ybGQpOgor
ICAgICAgICAoV2ViQ29yZTo6bm9ybWFsV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6bWFpblRo
cmVhZE5vcm1hbFdvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRPTVdyYXBwZXJXb3JsZDo6dm0pOgorICAgICAgICAoRE9NV3JhcHBlcldvcmxk
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0dDQ29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdD
Q29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RTb29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdDQ29u
dHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3ROb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0NDb250cm9s
bGVyOjpzZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZCk6CisgICAgICAg
IChXZWJDb3JlOjpHQ0NvbnRyb2xsZXI6OmRpc2NhcmRBbGxDb21waWxlZENvZGUpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpkZXNl
cmlhbGl6ZUlEQlZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2VyaWFsaXplSURCVmFsdWVC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6aWRiS2V5VG9TY3JpcHRWYWx1ZSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2Fs
bGJhY2tEYXRhOjpKU0NhbGxiYWNrRGF0YSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0
b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3Vz
dG9tWFBhdGhOU1Jlc29sdmVyOjpKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6bG9va3VwTmFtZXNwYWNlVVJJKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpyZXBvcnRFeGNl
cHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y2FjaGVET01TdHJ1Y3R1cmUpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6RE9NQ29uc3Ry
dWN0b3JPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpET01Db25z
dHJ1Y3RvcldpdGhEb2N1bWVudDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0RE9NU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldElubGluZUNhY2hlZFdyYXBw
ZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1N0cmluZ1dpdGhD
YWNoZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OkpTRE9NR2xvYmFsT2JqZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTRE9NR2xv
YmFsT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0OjpjcmVhdGVT
dHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RE9NQ29uc3RydWN0b3IpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U0RPTVdpbmRvd0Jhc2U6OkpTRE9NV2luZG93QmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0RP
TVdpbmRvd0Jhc2U6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2lu
ZG93QmFzZTo6dXBkYXRlRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dC
YXNlOjpjb21tb25WTSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmg6
CisgICAgICAgIChKU0RPTVdpbmRvd0Jhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5k
b3dCYXNlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpzZXRMb2NhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpEaWFsb2dIYW5kbGVyOjpkaWFsb2dDcmVhdGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpYWxvZ0hhbmRsZXI6OnJldHVyblZhbHVlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9N
V2luZG93U2hlbGw6OkpTRE9NV2luZG93U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01X
aW5kb3dTaGVsbDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5k
b3dTaGVsbDo6c2V0V2luZG93KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1No
ZWxsLmg6CisgICAgICAgIChKU0RPTVdpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
RE9NV2luZG93U2hlbGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd1No
ZWxsOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV3JhcHBl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XcmFwcGVyOjpKU0RPTVdyYXBwZXIpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZlbnRDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlQWNjZWxlcmF0aW9uT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZVJvdGF0aW9uUmF0ZU9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEaWN0
aW9uYXJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVl
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTRGljdGlvbmFyeTo6SlNEaWN0aW9uYXJ5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0Vycm9ySGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0Vycm9ySGFuZGxlcjo6aGFu
ZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZl
bnRMaXN0ZW5lcjo6c2V0V3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVu
ZXI6OmpzRnVuY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50OjphbGwpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6OnNldEFsbCk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
SFRNTFRlbXBsYXRlRWxlbWVudDo6Y29udGVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNI
aXN0b3J5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSGlzdG9yeTo6c3RhdGUpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0ltYWdlQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSW1h
Z2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0ltYWdlRGF0YUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6Om5vZGVBc1NjcmlwdFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpmdW5jdGlvbkRldGFpbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0SlNMaXN0ZW5lckZ1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpK
U0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0RXZlbnRMaXN0ZW5lcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6Omluc3BlY3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNMYXp5RXZlbnRM
aXN0ZW5lcjo6aW5pdGlhbGl6ZUpTRnVuY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
TWVzc2FnZUV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZUV2ZW50
OjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZUluaXRNZXNzYWdlRXZlbnQpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTTXV0YXRpb25DYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU011dGF0aW9uQ2FsbGJhY2s6OmNhbGwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
TXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU011dGF0aW9u
T2JzZXJ2ZXJDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNNdXRhdGlvbk9ic2VydmVyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNOb2RlRmlsdGVyQ29uZGl0aW9uOjpKU05vZGVGaWx0ZXJDb25kaXRpb24pOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5oOgorICAgICAgICAoV2Vi
Q29yZTo6SlNOb2RlRmlsdGVyQ29uZGl0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNOb2RlRmls
dGVyQ29uZGl0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9Ob2RlRmlsdGVyKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FjaGVT
dGF0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxs
YmFja0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1JlcXVlc3RBbmltYXRpb25GcmFt
ZUNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTUUxSZXN1
bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1FMUmVzdWx0U2V0
Um93TGlzdDo6aXRlbSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0QmFz
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckNvbnRleHRCYXNlOjpKU1dvcmtlckNv
bnRleHRCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyQ29udGV4dEJhc2U6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRCYXNlLmg6
CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckNvbnRleHRCYXNlOjpjcmVhdGVTdHJ1Y3R1cmUp
OgorICAgICAgICAoSlNXb3JrZXJDb250ZXh0QmFzZSk6CisgICAgICAgICogYmluZGluZ3MvanMv
UGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTY3JpcHRE
ZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL1NjaGVkdWxlZEFjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWRBY3Rp
b246OlNjaGVkdWxlZEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb246
OmV4ZWN1dGVGdW5jdGlvbkluQ29udGV4dCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NoZWR1
bGVkQWN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb246OlNjaGVkdWxl
ZEFjdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0Q2FjaGVk
RnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVz
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OmNsZWFyKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZVNjcmlwdENhbGxTdGFjayk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVTY3JpcHRBcmd1bWVudHMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlV2lu
ZG93U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJ
bldvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVdvcmxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmdldEFsbFdvcmxkcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmluaXRTY3JpcHQpOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6YmluZGluZ1Jvb3RPYmplY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3RzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OnNob3VsZEJ5cGFzc01haW5Xb3JsZENv
bnRlbnRTZWN1cml0eVBvbGljeSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJv
bGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1Nj
cmlwdE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGF1c2Up
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6ZXZlbnRMaXN0ZW5lckhhbmRsZXJCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6
OmV2ZW50TGlzdGVuZXJIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmV2ZW50TGlzdGVuZXJI
YW5kbGVyTG9jYXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2Fs
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbGJhY2s6OmNhbGwpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL1NjcmlwdEdDRXZlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0R0NFdmVudDo6
Z2V0SGVhcFNpemUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRPYmplY3Q6OlNjcmlwdE9iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRHbG9iYWxPYmplY3Q6OnNldCk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2NyaXB0U3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpkZXNlcmlh
bGl6ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdFZhbHVlOjpTY3JpcHRWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2NyaXB0V3JhcHBhYmxlLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoU2NyaXB0V3JhcHBh
YmxlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRXcmFwcGFibGVJbmxpbmVzLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRXcmFwcGFibGU6OnNldFdyYXBwZXIpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZFRlcm1pbmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemVGb3JJbnNwZWN0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjptYXliZVRocm93RXhjZXB0aW9uSWZTZXJp
YWxpemF0aW9uRmFpbGVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnRE
YXRhLmg6CisgICAgICAgIChXZWJDb3JlSlNDbGllbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OmluaXROb3JtYWxXb3JsZENsaWVudERhdGEpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dvcmtl
clNjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29u
dHJvbGxlcjo6V29ya2VyU2NyaXB0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJTY3JpcHRDb250cm9sbGVyOjp+V29ya2VyU2NyaXB0Q29udHJvbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjppbml0U2NyaXB0KToKKyAgICAgICAgKFdl
YkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OnNjaGVkdWxlRXhlY3V0aW9uVGVybWluYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6aXNFeGVjdXRpb25U
ZXJtaW5hdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpk
aXNhYmxlRXZhbCk6CisgICAgICAgICogYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxl
ci5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRy
b2xsZXI6OnZtKToKKyAgICAgICAgKFdvcmtlclNjcmlwdENvbnRyb2xsZXIpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlclNjcmlwdERlYnVnU2VydmVyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyk6Cisg
ICAgICAgICogYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW06CisgICAgICAgICgrW1dl
YlNjcmlwdE9iamVjdCBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6SlNDOjpvcmlnaW5Sb290T2Jq
ZWN0OnJvb3RPYmplY3Q6XSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgIChHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbik6
CisgICAgICAgIChKU1ZhbHVlVG9OYXRpdmUpOgorICAgICAgICAoR2VuZXJhdGVDb25zdHJ1Y3Rv
ckRlY2xhcmF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JIZWxwZXJNZXRob2Rz
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNGbG9hdDY0QXJyYXkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0SlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3RvclRhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTRmxvYXQ2NEFycmF5Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlVGFibGUp
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0SlNGbG9hdDY0QXJyYXlUYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpKU0Zsb2F0NjRBcnJheTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SlNGbG9hdDY0QXJyYXk6OmNyZWF0ZVByb3RvdHlwZSk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTRmxvYXQ2NEFycmF5Lmg6CisgICAgICAgIChXZWJDb3JlOjpKU0Zs
b2F0NjRBcnJheTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRmxvYXQ2NEFycmF5Ojpj
cmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNGbG9hdDY0QXJyYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNGbG9hdDY0QXJyYXlQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0Zsb2F0NjRBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTRmxvYXQ2NEFycmF5UHJvdG90eXBlOjpKU0Zsb2F0NjRBcnJheVByb3RvdHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVE
T01PYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29u
c3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEFjdGl2
ZURPTU9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0QWN0
aXZlRE9NT2JqZWN0OjpjcmVhdGVQcm90b3R5cGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdEFjdGl2ZURPTU9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEFj
dGl2ZURPTU9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTVGVzdEFjdGl2ZURP
TU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5
cGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90
b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RBY3RpdmVE
T01PYmplY3RQcm90b3R5cGU6OkpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJh
Y2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aE5v
UGFyYW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENs
YXNzMVBhcmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dp
dGhDbGFzczJQYXJhbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6Y2FsbGJh
Y2tXaXRoU3RyaW5nTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6Y2Fs
bGJhY2tXaXRoQm9vbGVhbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6Y2Fs
bGJhY2tSZXF1aXJlc1RoaXNUb1Bhc3MpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OmNyZWF0ZVByb3RvdHlwZSk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0
dGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBl
OjpKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
cjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25zdHJ1
Y3Rvcjo6Y3JlYXRlUHJvdG90eXBlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZl
bnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29u
c3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU1Rlc3RFdmVudENvbnN0cnVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25z
dHJ1Y3RvclByb3RvdHlwZTo6SlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmNyZWF0ZVN0
cnVjdHVyZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50
VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0
b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFyZ2V0
OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudFRhcmdldDo6
Y3JlYXRlUHJvdG90eXBlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RXZlbnRUYXJnZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFyZ2V0Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRUYXJnZXQ6OmNyZWF0ZVN0cnVj
dHVyZSk6CisgICAgICAgIChKU1Rlc3RFdmVudFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU6OkpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV4Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFeGNlcHRpb25Db25zdHJ1
Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXhjZXB0aW9u
OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFeGNlcHRpb246OmNy
ZWF0ZVByb3RvdHlwZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV4Y2VwdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXhjZXB0aW9uOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXhjZXB0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUpOgor
ICAgICAgICAoSlNUZXN0RXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV4Y2Vw
dGlvblByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV4Y2VwdGlv
blByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV4
Y2VwdGlvblByb3RvdHlwZTo6SlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZTo6ZmluaXNoQ3JlYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlOjpjcmVhdGVQcm90b3R5cGUpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdEludGVyZmFjZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTVGVzdEludGVy
ZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU6OkpT
VGVzdEludGVyZmFjZVByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZh
Y2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3I6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXI6OmNyZWF0ZVByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlRnVuY3Rpb25NZXRob2QpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyUHJvdG90eXBlOjpKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25z
dHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpj
cmVhdGVQcm90b3R5cGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZENvbnN0cnVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0
cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rv
cjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTVGVzdE5hbWVkQ29uc3RydWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9y
UHJvdG90eXBlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVj
dG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5vZGVDb25zdHJ1Y3Rv
cjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Tm9kZTo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Tm9kZTo6Y3JlYXRlUHJvdG90eXBl
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0Tm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE5vZGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU1Rlc3ROb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE5vZGVQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3ROb2RlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0Tm9kZVByb3RvdHlwZTo6SlNUZXN0Tm9kZVByb3RvdHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3ROb2RlQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0T2JqOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RPYmo6OmNyZWF0ZVByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpD
YWNoZWRBdHRyaWJ1dGUxKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNhY2hlZEF0dHJp
YnV0ZTIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENv
bnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0
cjVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25kaXRpb25h
bEF0dHI2Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQW55QXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmli
dXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmo6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RPYmo6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU1Rlc3RPYmopOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0T2JqUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0T2JqUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0T2JqUHJvdG90eXBlOjpKU1Rlc3RPYmpQcm90b3R5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0T2JqQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVj
dG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGVQcm90b3R5cGUpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmg6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGU6
OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzUHJvdG90eXBlOjpKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1
Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2U6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Y3JlYXRlUHJvdG90eXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZUNhY2hlZFJlYWRvbmx5VmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5
cGU6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1
Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0VHlwZWRlZnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0VHlwZWRlZnND
b25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0VHlw
ZWRlZnM6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFR5cGVkZWZz
OjpjcmVhdGVQcm90b3R5cGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RUeXBlZGVmcy5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0VHlwZWRlZnM6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RUeXBlZGVmczo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKEpTVGVzdFR5cGVkZWZzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFR5cGVk
ZWZzUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0VHlwZWRlZnNQ
cm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RUeXBl
ZGVmc1Byb3RvdHlwZTo6SlNUZXN0VHlwZWRlZnNQcm90b3R5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KiBicmlkZ2UvYy9DUnVudGltZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q1J1
bnRpbWVPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYnJpZGdlL2MvY19pbnN0
YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDUnVudGltZU1ldGhvZDo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNSdW50aW1lTWV0aG9kOjpjcmVhdGVTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q1J1bnRpbWVNZXRob2Q6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKiBicmlkZ2UvanNjL0JyaWRnZUpTQy5jcHA6CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpJbnN0YW5jZTo6Y3JlYXRlUnVudGltZU9iamVjdCk6CisgICAgICAgICogYnJp
ZGdlL29iamMvT2JqQ1J1bnRpbWVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Ok9i
akNSdW50aW1lT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJyaWRnZS9vYmpj
L29iamNfaW5zdGFuY2UubW06CisgICAgICAgIChPYmpDUnVudGltZU1ldGhvZDo6Y3JlYXRlKToK
KyAgICAgICAgKE9iakNSdW50aW1lTWV0aG9kOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAo
T2JqQ1J1bnRpbWVNZXRob2Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBicmlkZ2Uvb2Jq
Yy9vYmpjX3J1bnRpbWUuaDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNGYWxsYmFja09i
amVjdEltcDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1
bnRpbWUubW06CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpPYmpjRmFsbGJhY2tPYmplY3RJbXA6
Ok9iamNGYWxsYmFja09iamVjdEltcCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpPYmpjRmFs
bGJhY2tPYmplY3RJbXA6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBicmlkZ2UvcXQvcXRf
aW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lT2JqZWN0Ojpj
cmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6flF0
SW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6Z2V0UXRJbnN0
YW5jZSk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwOgorICAgICAgICAoSlND
OjpSdW50aW1lQXJyYXk6OlJ1bnRpbWVBcnJheSk6CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJh
eTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX2FycmF5Lmg6Cisg
ICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6UnVudGlt
ZUFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoUnVudGltZUFycmF5KToKKyAgICAg
ICAgKiBicmlkZ2UvcnVudGltZV9tZXRob2QuY3BwOgorICAgICAgICAoSlNDOjpSdW50aW1lTWV0
aG9kOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmg6
CisgICAgICAgIChKU0M6OlJ1bnRpbWVNZXRob2Q6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlJ1
bnRpbWVNZXRob2Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChSdW50aW1lTWV0aG9kKToK
KyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpCaW5k
aW5nczo6UnVudGltZU9iamVjdDo6UnVudGltZU9iamVjdCk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpSdW50aW1lT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogYnJpZGdlL3J1
bnRpbWVfb2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpSdW50aW1lT2JqZWN0Ojpj
cmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX3Jvb3QuY3BwOgorICAg
ICAgICAoSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdDo6Um9vdE9iamVjdCk6CisgICAgICAgIChK
U0M6OkJpbmRpbmdzOjpSb290T2JqZWN0OjpnY1Byb3RlY3QpOgorICAgICAgICAoSlNDOjpCaW5k
aW5nczo6Um9vdE9iamVjdDo6Z2NVbnByb3RlY3QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
Um9vdE9iamVjdDo6dXBkYXRlR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OlJvb3RPYmplY3Q6OmFkZFJ1bnRpbWVPYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1l
X3Jvb3QuaDoKKyAgICAgICAgKFJvb3RPYmplY3QpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoK
KyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBkb20vU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRp
b25Db250ZXh0Ojp2bSk6CisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaDoK
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChTY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAg
ICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxD
YW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogaHRtbC9IVE1MSW1h
Z2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlTG9hZGVyOjpub3RpZnlG
aW5pc2hlZCk6CisgICAgICAgICogaW5zcGVjdG9yL1NjcmlwdEFyZ3VtZW50cy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRBcmd1bWVudHM6OlNjcmlwdEFyZ3VtZW50cyk6CisgICAgICAg
ICogbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6Omljb25EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRH
bG9iYWxJY29uRGF0YWJhc2UpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L01lbW9yeVVzYWdlU3Vw
cG9ydFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1lbW9yeVVzYWdlS0IpOgorICAgICAgICAo
V2ViQ29yZTo6YWN0dWFsTWVtb3J5VXNhZ2VLQik6CisgICAgICAgICogcGxhdGZvcm0vd2luL0Ns
aXBib2FyZFV0aWxpdGllc1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHbG9iYWxE
YXRhKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c3Rv
cCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwZXJmb3JtUmVxdWVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpucE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3Ojpwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQpOgorICAgICAgICAqIHBsdWdp
bnMvYmxhY2tiZXJyeS9QbHVnaW5WaWV3QmxhY2tCZXJyeS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmdldFdpbmRv
d0luZm8pOgorICAgICAgICAqIHBsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAgICAgKiBwbHVn
aW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVL
ZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZU1vdXNl
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAg
ICAgKiBwbHVnaW5zL21hYy9QbHVnaW5WaWV3TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6cGxhdGZvcm1TdGFydCk6CisgICAgICAgICogcGx1Z2lucy9xdC9QbHVnaW5WaWV3
UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAg
ICAgICAqIHBsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6
aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdp
bmRvd1JlY3QpOgorICAgICAgICAqIHRlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmVUZXN0U3VwcG9ydDo6aW5qZWN0SW50ZXJuYWxzT2JqZWN0KToKKyAg
ICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3Q6OmRyb3BQcm90ZWN0aW9uKToKKwogMjAxMy0wNC0xNyAgQ2hyaXMgRmxlaXphY2gg
IDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBWb2ljZU92ZXIgc2F5cyBldmVy
eXRoaW5nIHRoYXQgaXNuJ3QgYSBsaW5rIGlzIGEgImNsaWNrYWJsZSIgaW4gU2FmYXJpIHJlYWRl
cj8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtNDY0LDcgKzQ2NCw3IEBA
IF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0OWRyYXdJbWFnZUUKIF9fWk43V2ViQ29yZTE1
R3JhcGhpY3NDb250ZXh0OXNldFNoYWRvd0VSS05TXzlGbG9hdFNpemVFZlJLTlNfNUNvbG9yRU5T
XzEwQ29sb3JTcGFjZUUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0OXRyYW5zbGF0ZUVm
ZgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHREMUV2Ci1fX1pON1dlYkNvcmUxNUpTRE9N
V2luZG93QmFzZTE4Y29tbW9uSlNHbG9iYWxEYXRhRXYKK19fWk43V2ViQ29yZTE1SlNET01XaW5k
b3dCYXNlOGNvbW1vblZNRXYKIF9fWk43V2ViQ29yZTE1UGxhdGZvcm1DQUxheWVyMThzZXRHZW9t
ZXRyeUZsaXBwZWRFYgogX19aTjdXZWJDb3JlMTVQcm90ZWN0aW9uU3BhY2VDMUVSS04zV1RGNlN0
cmluZ0VpTlNfMjVQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJUeXBlRVM0X05TXzM1UHJvdGVjdGlvblNw
YWNlQXV0aGVudGljYXRpb25TY2hlbWVFCiBfX1pON1dlYkNvcmUxNVByb3RlY3Rpb25TcGFjZUMx
RXYKQEAgLTI1OTYsNyArMjU5Niw3IEBAIF9fWk43V2ViQ29yZTRQYWdlMThzZXRWaXNpYmlsaXR5
U3RhdGVFTlMKIAogI2lmIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKQogX19aTjNKU0MxM1J1bnRp
bWVNZXRob2QxMWdldENhbGxEYXRhRVBOU182SlNDZWxsRVJOU184Q2FsbERhdGFFCi1fX1pOM0pT
QzEzUnVudGltZU1ldGhvZDE0ZmluaXNoQ3JlYXRpb25FUk5TXzEySlNHbG9iYWxEYXRhRVJLTjNX
VEY2U3RyaW5nRQorX19aTjNKU0MxM1J1bnRpbWVNZXRob2QxNGZpbmlzaENyZWF0aW9uRVJOU18y
Vk1FUktOM1dURjZTdHJpbmdFCiBfX1pOM0pTQzEzUnVudGltZU1ldGhvZDE4Z2V0T3duUHJvcGVy
dHlTbG90RVBOU182SlNDZWxsRVBOU185RXhlY1N0YXRlRU5TXzEyUHJvcGVydHlOYW1lRVJOU18x
MlByb3BlcnR5U2xvdEUKIF9fWk4zSlNDMTNSdW50aW1lTWV0aG9kMjRnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3JFUE5TXzhKU09iamVjdEVQTlNfOUV4ZWNTdGF0ZUVOU18xMlByb3BlcnR5TmFtZUVS
TlNfMThQcm9wZXJ0eURlc2NyaXB0b3JFCiBfX1pOM0pTQzEzUnVudGltZU1ldGhvZDZzX2luZm9F
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLm9yZGVyCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUub3JkZXIJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUub3JkZXIJKHdvcmtpbmcgY29weSkKQEAgLTE5NTYsOCArMTk1Niw4IEBAIF9f
Wk43V2ViQ29yZTE2U2NyaXB0Q29udHJvbGxlcjEzZXhlY3V0ZVMKIF9fWk43V2ViQ29yZTE2U2Ny
aXB0Q29udHJvbGxlcjE3Y2FuRXhlY3V0ZVNjcmlwdHNFTlNfMzNSZWFzb25Gb3JDYWxsaW5nQ2Fu
RXhlY3V0ZVNjcmlwdHNFCiBfX1pON1dlYkNvcmUxNlNjcmlwdENvbnRyb2xsZXI4ZXZhbHVhdGVF
UktOU18xNlNjcmlwdFNvdXJjZUNvZGVFCiBfX1pON1dlYkNvcmUyMW1haW5UaHJlYWROb3JtYWxX
b3JsZEV2Ci1fX1pON1dlYkNvcmUxNUpTRE9NV2luZG93QmFzZTE4Y29tbW9uSlNHbG9iYWxEYXRh
RXYKLV9fWk43V2ViQ29yZTE1RE9NV3JhcHBlcldvcmxkQzFFUE4zSlNDMTJKU0dsb2JhbERhdGFF
YgorX19aTjdXZWJDb3JlMTVKU0RPTVdpbmRvd0Jhc2UxOGNvbW1vblZNRXYKK19fWk43V2ViQ29y
ZTE1RE9NV3JhcHBlcldvcmxkQzFFUE4zSlNDMTJWTUViCiBfX1pOM1dURjlIYXNoVGFibGVJUE43
V2ViQ29yZTE1RE9NV3JhcHBlcldvcmxkRVMzX05TXzE3SWRlbnRpdHlFeHRyYWN0b3JJUzNfRUVO
U183UHRySGFzaElTM19FRU5TXzEwSGFzaFRyYWl0c0lTM19FRVM5X0UzYWRkSVMzX1MzX05TXzIy
SWRlbnRpdHlIYXNoVHJhbnNsYXRvcklTM19TM19TN19FRUVFU3Q0cGFpcklOU18xN0hhc2hUYWJs
ZUl0ZXJhdG9ySVMzX1MzX1M1X1M3X1M5X1M5X0VFYkVSS1RfUktUMF8KIF9fWk4zV1RGOUhhc2hU
YWJsZUlQTjdXZWJDb3JlMTVET01XcmFwcGVyV29ybGRFUzNfTlNfMTdJZGVudGl0eUV4dHJhY3Rv
cklTM19FRU5TXzdQdHJIYXNoSVMzX0VFTlNfMTBIYXNoVHJhaXRzSVMzX0VFUzlfRTZleHBhbmRF
dgogX19aTjdXZWJDb3JlMTZTY3JpcHRDb250cm9sbGVyMTVldmFsdWF0ZUluV29ybGRFUktOU18x
NlNjcmlwdFNvdXJjZUNvZGVFUE5TXzE1RE9NV3JhcHBlcldvcmxkRQpAQCAtMTk2OCwxMCArMTk2
OCwxMCBAQCBfX1pON1dlYkNvcmUxNkpTRE9NV2luZG93U2hlbGxDMUVOM1dURjEwCiBfX1pON1dl
YkNvcmUxNkpTRE9NV2luZG93U2hlbGxDMkVOM1dURjEwUGFzc1JlZlB0cklOU185RE9NV2luZG93
RUVFUE5TXzE1RE9NV3JhcHBlcldvcmxkRQogX19aTjdXZWJDb3JlMTZKU0RPTVdpbmRvd1NoZWxs
OXNldFdpbmRvd0VOM1dURjEwUGFzc1JlZlB0cklOU185RE9NV2luZG93RUVFCiBfX1pON1dlYkNv
cmUyMEpTRE9NV2luZG93UHJvdG90eXBlbndFbQotX19aTjdXZWJDb3JlMTFKU0RPTVdpbmRvd0Mx
RVJOM0pTQzEySlNHbG9iYWxEYXRhRVBOUzFfOVN0cnVjdHVyZUVOM1dURjEwUGFzc1JlZlB0cklO
U185RE9NV2luZG93RUVFUE5TXzE2SlNET01XaW5kb3dTaGVsbEUKLV9fWk43V2ViQ29yZTE1SlNE
T01XaW5kb3dCYXNlQzJFUk4zSlNDMTJKU0dsb2JhbERhdGFFUE5TMV85U3RydWN0dXJlRU4zV1RG
MTBQYXNzUmVmUHRySU5TXzlET01XaW5kb3dFRUVQTlNfMTZKU0RPTVdpbmRvd1NoZWxsRQotX19a
TjdXZWJDb3JlMTdKU0RPTUdsb2JhbE9iamVjdEMyRVJOM0pTQzEySlNHbG9iYWxEYXRhRVBOUzFf
OVN0cnVjdHVyZUVOM1dURjEwUGFzc1JlZlB0cklOU18xNURPTVdyYXBwZXJXb3JsZEVFRVBOUzFf
OEpTT2JqZWN0RQotX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0QzJFUk5TXzEySlNHbG9iYWxEYXRh
RVBOU185U3RydWN0dXJlRVBOU184SlNPYmplY3RFCitfX1pON1dlYkNvcmUxMUpTRE9NV2luZG93
QzFFUk4zSlNDMTJWTUVQTlMxXzlTdHJ1Y3R1cmVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfOURPTVdp
bmRvd0VFRVBOU18xNkpTRE9NV2luZG93U2hlbGxFCitfX1pON1dlYkNvcmUxNUpTRE9NV2luZG93
QmFzZUMyRVJOM0pTQzEyVk1FUE5TMV85U3RydWN0dXJlRU4zV1RGMTBQYXNzUmVmUHRySU5TXzlE
T01XaW5kb3dFRUVQTlNfMTZKU0RPTVdpbmRvd1NoZWxsRQorX19aTjdXZWJDb3JlMTdKU0RPTUds
b2JhbE9iamVjdEMyRVJOM0pTQzEyVk1FUE5TMV85U3RydWN0dXJlRU4zV1RGMTBQYXNzUmVmUHRy
SU5TXzE1RE9NV3JhcHBlcldvcmxkRUVFUE5TMV84SlNPYmplY3RFCitfX1pOM0pTQzE0SlNHbG9i
YWxPYmplY3RDMkVSTlNfMTJWTUVQTlNfOVN0cnVjdHVyZUVQTlNfOEpTT2JqZWN0RQogX19aTjdX
ZWJDb3JlNUZyYW1lOWtlZXBBbGl2ZUV2CiBfX1pOM0pTQzZTdHJvbmdJTjdXZWJDb3JlMTZKU0RP
TVdpbmRvd1NoZWxsRUVDMkVSS1MzXwogX19aTjNXVEY5SGFzaFRhYmxlSU5TXzZSZWZQdHJJTjdX
ZWJDb3JlMTVET01XcmFwcGVyV29ybGRFRUVTdDRwYWlySVM0X04zSlNDNlN0cm9uZ0lOUzJfMTZK
U0RPTVdpbmRvd1NoZWxsRUVFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVNBX0VFTlNfN1B0ckhh
c2hJUzRfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTNF9FRU5TR19JUzlf
RUVFRVNIX0UxNWRlYWxsb2NhdGVUYWJsZUVQU0FfaQpAQCAtMjAwNiw3ICsyMDA2LDcgQEAgX19a
TjdXZWJDb3JlMTRKU0hUTUxEb2N1bWVudEMxRVBOM0pTQzlTdAogX19aTjdXZWJDb3JlMTBKU0Rv
Y3VtZW50QzJFUE4zSlNDOVN0cnVjdHVyZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVOM1dURjEw
UGFzc1JlZlB0cklOU184RG9jdW1lbnRFRUUKIF9fWk43V2ViQ29yZTZKU05vZGVDMkVQTjNKU0M5
U3RydWN0dXJlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RU4zV1RGMTBQYXNzUmVmUHRySU5TXzRO
b2RlRUVFCiBfX1pON1dlYkNvcmUxMmNhY2hlV3JhcHBlcklOU18xMkhUTUxEb2N1bWVudEVFRXZQ
TlNfMTVET01XcmFwcGVyV29ybGRFUFRfUE5TXzEySlNET01XcmFwcGVyRQotX19aTjNKU0M0V2Vh
a0lON1dlYkNvcmUxMkpTRE9NV3JhcHBlckVFM3NldEVSTlNfMTJKU0dsb2JhbERhdGFFUFMyX1BO
U18xNVdlYWtIYW5kbGVPd25lckVQdgorX19aTjNKU0M0V2Vha0lON1dlYkNvcmUxMkpTRE9NV3Jh
cHBlckVFM3NldEVSTlNfMTJWTUVQUzJfUE5TXzE1V2Vha0hhbmRsZU93bmVyRVB2CiBfX1pOM1dU
RjlIYXNoVGFibGVJTlNfNlJlZlB0cklOU18xMFN0cmluZ0ltcGxFRUVTdDRwYWlySVMzX04zSlND
MTZTeW1ib2xUYWJsZUVudHJ5RUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTN19FRU5TNV8xN0lk
ZW50aWZpZXJSZXBIYXNoRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMzX0VF
TlM1XzI2U3ltYm9sVGFibGVJbmRleEhhc2hUcmFpdHNFRUVTRF9FNGZpbmRJUFMyX05TXzI5UmVm
UHRySGFzaE1hcFJhd0tleVRyYW5zbGF0b3JJU0lfUzdfU0ZfU0FfRUVFRU5TXzE3SGFzaFRhYmxl
SXRlcmF0b3JJUzNfUzdfUzlfU0FfU0ZfU0RfRUVSS1RfCiBfX1pON1dlYkNvcmUxMUZyYW1lTG9h
ZGVyMzVkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZEVQTlNfMTVET01XcmFwcGVy
V29ybGRFCiBfX1pOSzNXVEY5SGFzaFRhYmxlSU5TXzZSZWZQdHJJTjdXZWJDb3JlMTVET01XcmFw
cGVyV29ybGRFRUVTdDRwYWlySVM0X04zSlNDNlN0cm9uZ0lOUzJfMTZKU0RPTVdpbmRvd1NoZWxs
RUVFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVNBX0VFTlNfN1B0ckhhc2hJUzRfRUVOU18xNFBh
aXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTNF9FRU5TR19JUzlfRUVFRVNIX0U0ZmluZElQ
UzNfTlNfMjlSZWZQdHJIYXNoTWFwUmF3S2V5VHJhbnNsYXRvcklTTV9TQV9TSl9TRV9FRUVFTlNf
MjJIYXNoVGFibGVDb25zdEl0ZXJhdG9ySVM0X1NBX1NDX1NFX1NKX1NIX0VFUktUXwpAQCAtMjAy
Nyw3ICsyMDI3LDcgQEAgX19aTks3V2ViQ29yZTE1SlNET01XaW5kb3dCYXNlMTZhbGxvd3NBYwog
X19aTks3V2ViQ29yZTlGcmFtZVRyZWU1Y2hpbGRFUktOM1dURjEyQXRvbWljU3RyaW5nRQogX19a
TjdXZWJDb3JlMjBKU0RPTVdpbmRvd1Byb3RvdHlwZTE4Z2V0T3duUHJvcGVydHlTbG90RVBOM0pT
QzlFeGVjU3RhdGVFUktOUzFfMTBJZGVudGlmaWVyRVJOUzFfMTJQcm9wZXJ0eVNsb3RFCiBfX1pO
M0pTQzIxZ2V0U3RhdGljRnVuY3Rpb25TbG90SU5TXzhKU09iamVjdEVFRWJQTlNfOUV4ZWNTdGF0
ZUVQS05TXzlIYXNoVGFibGVFUFMxX1JLTlNfMTBJZGVudGlmaWVyRVJOU18xMlByb3BlcnR5U2xv
dEUKLV9fWk4zSlNDOEpTT2JqZWN0MTdnZXREaXJlY3RMb2NhdGlvbkVSTlNfMTJKU0dsb2JhbERh
dGFFUktOU18xMElkZW50aWZpZXJFCitfX1pOM0pTQzhKU09iamVjdDE3Z2V0RGlyZWN0TG9jYXRp
b25FUk5TXzEyVk1FUktOU18xMElkZW50aWZpZXJFCiBfX1pON1dlYkNvcmUxNmZpbmRBdG9taWNT
dHJpbmdFUktOM0pTQzEwSWRlbnRpZmllckUKIF9fWk5LM1dURjlIYXNoVGFibGVJUE5TXzE2QXRv
bWljU3RyaW5nSW1wbEVTdDRwYWlySVMyX2pFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzRfRUVO
U183UHRySGFzaElTMl9FRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMyX0VF
TlNBX0lqRUVFRVNCX0U4Y29udGFpbnNJUzJfTlNfMjJJZGVudGl0eUhhc2hUcmFuc2xhdG9ySVMy
X1M0X1M4X0VFRUViUktUXwogX19aTkszV1RGOUhhc2hUYWJsZUlQTlNfMTZBdG9taWNTdHJpbmdJ
bXBsRVN0NHBhaXJJUzJfUE43V2ViQ29yZTdFbGVtZW50RUVOU18xOFBhaXJGaXJzdEV4dHJhY3Rv
cklTN19FRU5TXzdQdHJIYXNoSVMyX0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFp
dHNJUzJfRUVOU0RfSVM2X0VFRUVTRV9FOGNvbnRhaW5zSVMyX05TXzIySWRlbnRpdHlIYXNoVHJh
bnNsYXRvcklTMl9TN19TQl9FRUVFYlJLVF8KQEAgLTI4MzUsMTQgKzI4MzUsMTQgQEAgX19aTjNK
U0M4QmluZGluZ3MyMHdlYlNjcmlwdE9iamVjdENsYXNzRQogX19aTjNKU0M4QmluZGluZ3MxMk9i
amNJbnN0YW5jZTZjcmVhdGVFUDExb2JqY19vYmplY3ROM1dURjEwUGFzc1JlZlB0cklOUzBfMTBS
b290T2JqZWN0RUVFCiBfX1pOM0pTQzhCaW5kaW5nczEyT2JqY0luc3RhbmNlQzJFUDExb2JqY19v
YmplY3ROM1dURjEwUGFzc1JlZlB0cklOUzBfMTBSb290T2JqZWN0RUVFCiBfX1pOM0pTQzhCaW5k
aW5nczhJbnN0YW5jZUMyRU4zV1RGMTBQYXNzUmVmUHRySU5TMF8xMFJvb3RPYmplY3RFRUUKLV9f
Wk4zSlNDNFdlYWtJTlNfOEJpbmRpbmdzMTNSdW50aW1lT2JqZWN0RUVDMkVSTlNfMTJKU0dsb2Jh
bERhdGFFUFMyX1BOU18xNVdlYWtIYW5kbGVPd25lckVQdgorX19aTjNKU0M0V2Vha0lOU184Qmlu
ZGluZ3MxM1J1bnRpbWVPYmplY3RFRUMyRVJOU18xMlZNRVBTMl9QTlNfMTVXZWFrSGFuZGxlT3du
ZXJFUHYKIF9fWk4zSlNDOEJpbmRpbmdzOEluc3RhbmNlMTljcmVhdGVSdW50aW1lT2JqZWN0RVBO
U185RXhlY1N0YXRlRQogX19aTjNKU0M4QmluZGluZ3MxMk9iamNJbnN0YW5jZTE2bmV3UnVudGlt
ZU9iamVjdEVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlNDOEJpbmRpbmdzMTdPYmpDUnVudGltZU9i
amVjdEMxRVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0RU4zV1RGMTBQYXNzUmVm
UHRySU5TMF8xMk9iamNJbnN0YW5jZUVFRQogX19aTjNKU0M4QmluZGluZ3MxN09iakNSdW50aW1l
T2JqZWN0QzJFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxPYmplY3RFTjNXVEYxMFBhc3NS
ZWZQdHJJTlMwXzEyT2JqY0luc3RhbmNlRUVFCiBfX1pOM0pTQzhCaW5kaW5nczEzUnVudGltZU9i
amVjdEMyRVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBOU185U3RydWN0dXJl
RU4zV1RGMTBQYXNzUmVmUHRySU5TMF84SW5zdGFuY2VFRUUKLV9fWk4zSlNDNFdlYWtJTlNfOEJp
bmRpbmdzMTNSdW50aW1lT2JqZWN0RUUzc2V0RVJOU18xMkpTR2xvYmFsRGF0YUVQUzJfUE5TXzE1
V2Vha0hhbmRsZU93bmVyRVB2Ci1fX1pOM0pTQzhCaW5kaW5nczEwUm9vdE9iamVjdDE2YWRkUnVu
dGltZU9iamVjdEVSTlNfMTJKU0dsb2JhbERhdGFFUE5TMF8xM1J1bnRpbWVPYmplY3RFCitfX1pO
M0pTQzRXZWFrSU5TXzhCaW5kaW5nczEzUnVudGltZU9iamVjdEVFM3NldEVSTlNfMTJWTUVQUzJf
UE5TXzE1V2Vha0hhbmRsZU93bmVyRVB2CitfX1pOM0pTQzhCaW5kaW5nczEwUm9vdE9iamVjdDE2
YWRkUnVudGltZU9iamVjdEVSTlNfMTJWTUVQTlMwXzEzUnVudGltZU9iamVjdEUKIF9fWk4zSlND
NFdlYWtJTlNfOEJpbmRpbmdzMTNSdW50aW1lT2JqZWN0RUVhU0VSS1MzXwogX19aTjdXZWJDb3Jl
MTZKU0RPTVdpbmRvd1NoZWxsM3B1dEVQTjNKU0M5RXhlY1N0YXRlRVJLTlMxXzEwSWRlbnRpZmll
ckVOUzFfN0pTVmFsdWVFUk5TMV8xNVB1dFByb3BlcnR5U2xvdEUKIF9fWk43V2ViQ29yZTExSlNE
T01XaW5kb3czcHV0RVBOM0pTQzlFeGVjU3RhdGVFUktOUzFfMTBJZGVudGlmaWVyRU5TMV83SlNW
YWx1ZUVSTlMxXzE1UHV0UHJvcGVydHlTbG90RQpAQCAtMzA3Niw3ICszMDc2LDcgQEAgX19aTjdX
ZWJDb3JlMTN0b0pTRE9NV2luZG93RVBOU181RnJhbWVFUAogX19aTjdXZWJDb3JlTDE4ZXZlbnRQ
YXJhbWV0ZXJOYW1lRWIKIF9fWk43V2ViQ29yZTE5SlNMYXp5RXZlbnRMaXN0ZW5lckMxRVJLTjNX
VEY2U3RyaW5nRVM0X1M0X1BOU180Tm9kZUVTNF9pUE4zSlNDOEpTT2JqZWN0RVBOU18xNURPTVdy
YXBwZXJXb3JsZEUKIF9fWk43V2ViQ29yZTE1SlNFdmVudExpc3RlbmVyQzJFUE4zSlNDOEpTT2Jq
ZWN0RVMzX2JQTlNfMTVET01XcmFwcGVyV29ybGRFCi1fX1pOM0pTQzRXZWFrSU5TXzhKU09iamVj
dEVFQzJFUk5TXzEySlNHbG9iYWxEYXRhRVBTMV9QTlNfMTVXZWFrSGFuZGxlT3duZXJFUHYKK19f
Wk4zSlNDNFdlYWtJTlNfOEpTT2JqZWN0RUVDMkVSTlNfMTJWTUVQUzFfUE5TXzE1V2Vha0hhbmRs
ZU93bmVyRVB2CiBfX1pON1dlYkNvcmU4RG9jdW1lbnQzMXNldFdpbmRvd0F0dHJpYnV0ZUV2ZW50
TGlzdGVuZXJFUktOM1dURjEyQXRvbWljU3RyaW5nRU5TMV8xMFBhc3NSZWZQdHJJTlNfMTNFdmVu
dExpc3RlbmVyRUVFCiBfX1pON1dlYkNvcmUxMUV2ZW50VGFyZ2V0MjVzZXRBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyRVJLTjNXVEYxMkF0b21pY1N0cmluZ0VOUzFfMTBQYXNzUmVmUHRySU5TXzEzRXZl
bnRMaXN0ZW5lckVFRQogX19aTjdXZWJDb3JlMTFFdmVudFRhcmdldDI1Z2V0QXR0cmlidXRlRXZl
bnRMaXN0ZW5lckVSS04zV1RGMTJBdG9taWNTdHJpbmdFCkBAIC0zMzM5LDEzICszMzM5LDEzIEBA
IF9fWk5LN1dlYkNvcmUxOUpTTGF6eUV2ZW50TGlzdGVuZXIyMGluaXQKIF9fWk5LN1dlYkNvcmUy
MUNvbnRlbnRTZWN1cml0eVBvbGljeTI0YWxsb3dJbmxpbmVFdmVudEhhbmRsZXJzRXYKIF9fWk43
V2ViQ29yZTE5dG9KU0RPTUdsb2JhbE9iamVjdEVQTlNfMjJTY3JpcHRFeGVjdXRpb25Db250ZXh0
RVBOU18xNURPTVdyYXBwZXJXb3JsZEUKIF9fWlRobjIwOF9OSzdXZWJDb3JlOERvY3VtZW50MTBp
c0RvY3VtZW50RXYKLV9fWk4zSlNDMThqc05vbnRyaXZpYWxTdHJpbmdFUE5TXzEySlNHbG9iYWxE
YXRhRVJLTlNfN1VTdHJpbmdFCitfX1pOM0pTQzE4anNOb250cml2aWFsU3RyaW5nRVBOU18xMlZN
RVJLTlNfN1VTdHJpbmdFCiBfX1pON1dlYkNvcmU4anNTdHJpbmdFUE4zSlNDOUV4ZWNTdGF0ZUVS
S04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE2anNTdHJpbmdTbG93Q2FzZUVQTjNKU0M5RXhl
Y1N0YXRlRVJOM1dURjdIYXNoTWFwSVBOUzNfMTBTdHJpbmdJbXBsRU5TMF80V2Vha0lOUzBfOEpT
U3RyaW5nRUVFTlMzXzEwU3RyaW5nSGFzaEVOUzNfMTBIYXNoVHJhaXRzSVM2X0VFTlNCX0lTOV9F
RUVFUzZfCi1fX1pOM0pTQzhqc1N0cmluZ0VQTlNfMTJKU0dsb2JhbERhdGFFUktOU183VVN0cmlu
Z0UKLV9fWk4zSlNDNFdlYWtJTlNfOEpTU3RyaW5nRUVDMkVSTlNfMTJKU0dsb2JhbERhdGFFUFMx
X1BOU18xNVdlYWtIYW5kbGVPd25lckVQdgorX19aTjNKU0M4anNTdHJpbmdFUE5TXzEyVk1FUktO
U183VVN0cmluZ0UKK19fWk4zSlNDNFdlYWtJTlNfOEpTU3RyaW5nRUVDMkVSTlNfMTJWTUVQUzFf
UE5TXzE1V2Vha0hhbmRsZU93bmVyRVB2CiBfX1pOM0pTQzRXZWFrSU5TXzhKU1N0cmluZ0VFYVNF
UktTMl8KLV9fWk43V2ViQ29yZTIyU2NyaXB0RXhlY3V0aW9uQ29udGV4dDEwZ2xvYmFsRGF0YUV2
CitfX1pON1dlYkNvcmUyMlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQxMHZtRXYKIF9fWk43V2ViQ29y
ZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5TXzVFdmVu
dEUKIF9fWk5LN1dlYkNvcmU1RXZlbnQ5aXNVSUV2ZW50RXYKIF9fWk5LN1dlYkNvcmU1RXZlbnQx
NWlzTXV0YXRpb25FdmVudEV2CkBAIC0zMzY2LDcgKzMzNjYsNyBAQCBfX1pON1dlYkNvcmUxM2Ny
ZWF0ZVdyYXBwZXJJTlNfN0pTRXZlbnRFCiBfX1pON1dlYkNvcmUxNWdldERPTVN0cnVjdHVyZUlO
U183SlNFdmVudEVFRVBOM0pTQzlTdHJ1Y3R1cmVFUE5TMl85RXhlY1N0YXRlRVBOU18xN0pTRE9N
R2xvYmFsT2JqZWN0RQogX19aTjdXZWJDb3JlN0pTRXZlbnQxNWNyZWF0ZVByb3RvdHlwZUVQTjNK
U0M5RXhlY1N0YXRlRVBOUzFfMTRKU0dsb2JhbE9iamVjdEUKIF9fWk43V2ViQ29yZTdKU0V2ZW50
QzFFUE4zSlNDOVN0cnVjdHVyZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVOM1dURjEwUGFzc1Jl
ZlB0cklOU181RXZlbnRFRUUKLV9fWk4zSlNDNFdlYWtJTjdXZWJDb3JlMTJKU0RPTVdyYXBwZXJF
RUMyRVJOU18xMkpTR2xvYmFsRGF0YUVQUzJfUE5TXzE1V2Vha0hhbmRsZU93bmVyRVB2CitfX1pO
M0pTQzRXZWFrSU43V2ViQ29yZTEySlNET01XcmFwcGVyRUVDMkVSTlNfMTJWTUVQUzJfUE5TXzE1
V2Vha0hhbmRsZU93bmVyRVB2CiBfX1pOM0pTQzRXZWFrSU43V2ViQ29yZTEySlNET01XcmFwcGVy
RUVhU0VSS1MzXwogX19aTks3V2ViQ29yZTE3SlNET01HbG9iYWxPYmplY3QxMmN1cnJlbnRFdmVu
dEV2CiBfX1pON1dlYkNvcmU0dG9KU0VQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFs
T2JqZWN0RVBOU18xMUV2ZW50VGFyZ2V0RQpAQCAtMzY3NSw3ICszNjc1LDcgQEAgX19aTjdXZWJD
b3JlMTdNb3VzZVJlbGF0ZWRFdmVudDE0cmVjZWl2ZQogX19aTks3V2ViQ29yZTEwTW91c2VFdmVu
dDEyaXNNb3VzZUV2ZW50RXYKIF9fWk43V2ViQ29yZTlJbnB1dFR5cGUxN3dpbGxEaXNwYXRjaENs
aWNrRXYKIF9fWk5LN1dlYkNvcmU0Tm9kZTIyc2NyaXB0RXhlY3V0aW9uQ29udGV4dEV2Ci1fX1pO
M0pTQzRXZWFrSU5TXzhKU09iamVjdEVFM3NldEVSTlNfMTJKU0dsb2JhbERhdGFFUFMxX1BOU18x
NVdlYWtIYW5kbGVPd25lckVQdgorX19aTjNKU0M0V2Vha0lOU184SlNPYmplY3RFRTNzZXRFUk5T
XzEyVk1FUFMxX1BOU18xNVdlYWtIYW5kbGVPd25lckVQdgogX19aTks3V2ViQ29yZTEzSlNIVE1M
RWxlbWVudDIxcHVzaEV2ZW50SGFuZGxlclNjb3BlRVBOM0pTQzlFeGVjU3RhdGVFUE5TMV8xNFNj
b3BlQ2hhaW5Ob2RlRQogX19aTks3V2ViQ29yZTROb2RlMTNvd25lckRvY3VtZW50RXYKIF9fWk5L
N1dlYkNvcmUyMkhUTUxGb3JtQ29udHJvbEVsZW1lbnQxMXZpcnR1YWxGb3JtRXYKQEAgLTQ4NTIs
NyArNDg1Miw3IEBAIF9fWk43V2ViQ29yZTIwSFRNTENvbnN0cnVjdGlvblNpdGUyOGluc2UKIF9f
Wk5LN1dlYkNvcmUxNkhUTUxFbGVtZW50U3RhY2sxMWh0bWxFbGVtZW50RXYKIF9fWk43V2ViQ29y
ZTIwSFRNTENvbnN0cnVjdGlvblNpdGUzNW1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVt
ZW50RVJOU18xNUF0b21pY0hUTUxUb2tlbkVQTlNfN0VsZW1lbnRFCiBfX1pON1dlYkNvcmUyMHNl
dEpTRE9NV2luZG93UGFyZW50RVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84SlNPYmplY3RFTlMwXzdK
U1ZhbHVlRQotX19aTjNKU0M4SlNPYmplY3QxN3B1dERpcmVjdEludGVybmFsRVJOU18xMkpTR2xv
YmFsRGF0YUVSS05TXzEwSWRlbnRpZmllckVOU183SlNWYWx1ZUVqYlJOU18xNVB1dFByb3BlcnR5
U2xvdEVQTlNfNkpTQ2VsbEUKK19fWk4zSlNDOEpTT2JqZWN0MTdwdXREaXJlY3RJbnRlcm5hbEVS
TlNfMTJWTUVSS05TXzEwSWRlbnRpZmllckVOU183SlNWYWx1ZUVqYlJOU18xNVB1dFByb3BlcnR5
U2xvdEVQTlNfNkpTQ2VsbEUKIF9fWk43V2ViQ29yZUwxNnRhYmxlQ29uc3RydWN0b3JFUktOU18x
M1F1YWxpZmllZE5hbWVFUE5TXzhEb2N1bWVudEVQTlNfMTVIVE1MRm9ybUVsZW1lbnRFYgogX19a
TjdXZWJDb3JlMTZIVE1MVGFibGVFbGVtZW50NmNyZWF0ZUVSS05TXzEzUXVhbGlmaWVkTmFtZUVQ
TlNfOERvY3VtZW50RQogX19aTks3V2ViQ29yZTE2SFRNTFRhYmxlRWxlbWVudDEwbWFwVG9FbnRy
eUVSS05TXzEzUXVhbGlmaWVkTmFtZUVSTlNfMjBNYXBwZWRBdHRyaWJ1dGVFbnRyeUUKQEAgLTcz
MzYsOCArNzMzNiw4IEBAIF9fWk43V2ViQ29yZTE2anNET01XaW5kb3dFdmVudEVQTjNKU0M5RXgK
IF9fWk5LN1dlYkNvcmUxMUpTRE9NV2luZG93NWV2ZW50RVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pO
M0pTQzRXZWFrSU43V2ViQ29yZTEySlNET01XcmFwcGVyRUVDMkVSS1MzXwogX19aTjdXZWJDb3Jl
N0pTRXZlbnQxOGdldE93blByb3BlcnR5U2xvdEVQTjNKU0M5RXhlY1N0YXRlRVJLTlMxXzEwSWRl
bnRpZmllckVSTlMxXzEyUHJvcGVydHlTbG90RQotX19aTjdXZWJDb3JlMjVnZXRIYXNoVGFibGVG
b3JHbG9iYWxEYXRhRVJOM0pTQzEySlNHbG9iYWxEYXRhRVBLTlMwXzlIYXNoVGFibGVFCi1fX1pO
N1dlYkNvcmUyMURPTU9iamVjdEhhc2hUYWJsZU1hcDZtYXBGb3JFUk4zSlNDMTJKU0dsb2JhbERh
dGFFCitfX1pON1dlYkNvcmUyNWdldEhhc2hUYWJsZUZvckdsb2JhbERhdGFFUk4zSlNDMTJWTUVQ
S05TMF85SGFzaFRhYmxlRQorX19aTjdXZWJDb3JlMjFET01PYmplY3RIYXNoVGFibGVNYXA2bWFw
Rm9yRVJOM0pTQzEyVk1FCiBfX1pON1dlYkNvcmUyMURPTU9iamVjdEhhc2hUYWJsZU1hcDNnZXRF
UEtOM0pTQzlIYXNoVGFibGVFCiBfX1pOM0pTQzE4Z2V0U3RhdGljVmFsdWVTbG90SU43V2ViQ29y
ZTdKU0V2ZW50RU5TMV8xMkpTRE9NV3JhcHBlckVFRWJQTlNfOUV4ZWNTdGF0ZUVQS05TXzlIYXNo
VGFibGVFUFRfUktOU18xMElkZW50aWZpZXJFUk5TXzEyUHJvcGVydHlTbG90RQogX19aTjdXZWJD
b3JlMTFqc0V2ZW50VHlwZUVQTjNKU0M5RXhlY1N0YXRlRU5TMF83SlNWYWx1ZUVSS05TMF8xMElk
ZW50aWZpZXJFCkBAIC0xNDM0NCw3ICsxNDM0NCw3IEBAIF9fWk43V2ViQ29yZTE1R3JhcGhpY3ND
b250ZXh0MjNzZXRVcGRhdGkKIF9fWk5LN1dlYkNvcmUxNFJlbmRlclRoZW1lTWFjMjBjb250cm9s
U3VwcG9ydHNUaW50c0VQS05TXzEyUmVuZGVyT2JqZWN0RQogX19aTjdXZWJDb3JlMjFTZXJpYWxp
emVkU2NyaXB0VmFsdWVDMUVSTjNXVEY2VmVjdG9ySWhMbTBFRUUKIF9fWk43V2ViQ29yZTIxU2Vy
aWFsaXplZFNjcmlwdFZhbHVlNmNyZWF0ZUVQSzE1T3BhcXVlSlNDb250ZXh0UEsxM09wYXF1ZUpT
VmFsdWVQUzZfCi1fX1pOM0pTQzIzQVBJRW50cnlTaGltV2l0aG91dExvY2tDMkVQTlNfMTJKU0ds
b2JhbERhdGFFYgorX19aTjNKU0MyM0FQSUVudHJ5U2hpbVdpdGhvdXRMb2NrQzJFUE5TXzEyVk1F
YgogX19aTjdXZWJDb3JlMjFTZXJpYWxpemVkU2NyaXB0VmFsdWU2Y3JlYXRlRVBOM0pTQzlFeGVj
U3RhdGVFTlMxXzdKU1ZhbHVlRU5TXzIyU2VyaWFsaXphdGlvbkVycm9yTW9kZUUKIF9fWk43V2Vi
Q29yZTE1Q2xvbmVTZXJpYWxpemVyQzJFUE4zSlNDOUV4ZWNTdGF0ZUVSTjNXVEY2VmVjdG9ySWhM
bTBFRUUKIF9fWk43V2ViQ29yZUwxN3dyaXRlTGl0dGxlRW5kaWFuSWpFRXZSTjNXVEY2VmVjdG9y
SWhMbTBFRUVUXwpAQCAtMTczNDcsNyArMTczNDcsNyBAQCBfX1pON1dlYkNvcmUyOGpzWE1MSHR0
cFJlcXVlc3RSZXNwb25zZVRlCiBfX1pOSzdXZWJDb3JlMTZKU1hNTEh0dHBSZXF1ZXN0MTJyZXNw
b25zZVRleHRFUE4zSlNDOUV4ZWNTdGF0ZUUKIF9fWk43V2ViQ29yZTE0WE1MSHR0cFJlcXVlc3Qx
MnJlc3BvbnNlVGV4dEVSaQogX19aTjdXZWJDb3JlMTlqc093bmVkU3RyaW5nT3JOdWxsRVBOM0pT
QzlFeGVjU3RhdGVFUktOM1dURjZTdHJpbmdFCi1fX1pOM0pTQzEzanNPd25lZFN0cmluZ0VQTlNf
MTJKU0dsb2JhbERhdGFFUktOU183VVN0cmluZ0UKK19fWk4zSlNDMTNqc093bmVkU3RyaW5nRVBO
U18xMlZNRVJLTlNfN1VTdHJpbmdFCiBfX1pON1dlYkNvcmU0OGpzV2ViR0xSZW5kZXJpbmdDb250
ZXh0UHJvdG90eXBlRnVuY3Rpb25HZXRFcnJvckVQTjNKU0M5RXhlY1N0YXRlRQogX19aTjdXZWJD
b3JlMjFXZWJHTFJlbmRlcmluZ0NvbnRleHQ4Z2V0RXJyb3JFdgogX19aTjdXZWJDb3JlMTdHcmFw
aGljc0NvbnRleHQzRDhnZXRFcnJvckV2CkBAIC0xODYwMSwxNCArMTg2MDEsMTQgQEAgX19aTjdX
ZWJDb3JlMjNXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlckMxRQogX19aTjdXZWJDb3JlMjJXb3JrZXJT
Y3JpcHRDb250cm9sbGVyOGV2YWx1YXRlRVJLTlNfMTZTY3JpcHRTb3VyY2VDb2RlRQogX19aTjdX
ZWJDb3JlMjJXb3JrZXJTY3JpcHRDb250cm9sbGVyOGV2YWx1YXRlRVJLTlNfMTZTY3JpcHRTb3Vy
Y2VDb2RlRVBOU18xMVNjcmlwdFZhbHVlRQogX19aTjdXZWJDb3JlMjJXb3JrZXJTY3JpcHRDb250
cm9sbGVyMTBpbml0U2NyaXB0RXYKLV9fWk43V2ViQ29yZTI0SlNXb3JrZXJDb250ZXh0UHJvdG90
eXBlbndFbVBOM0pTQzEySlNHbG9iYWxEYXRhRQorX19aTjdXZWJDb3JlMjRKU1dvcmtlckNvbnRl
eHRQcm90b3R5cGVud0VtUE4zSlNDMTJWTUUKIF9fWk5LN1dlYkNvcmUyMkRlZGljYXRlZFdvcmtl
ckNvbnRleHQyNGlzRGVkaWNhdGVkV29ya2VyQ29udGV4dEV2Ci1fX1pON1dlYkNvcmUzM0pTRGVk
aWNhdGVkV29ya2VyQ29udGV4dFByb3RvdHlwZW53RW1QTjNKU0MxMkpTR2xvYmFsRGF0YUUKK19f
Wk43V2ViQ29yZTMzSlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0UHJvdG90eXBlbndFbVBOM0pTQzEy
Vk1FCiBfX1pUaG4xMjhfTjdXZWJDb3JlMjJEZWRpY2F0ZWRXb3JrZXJDb250ZXh0MjR0b0RlZGlj
YXRlZFdvcmtlckNvbnRleHRFdgotX19aTjdXZWJDb3JlMjRKU0RlZGljYXRlZFdvcmtlckNvbnRl
eHRDMUVSTjNKU0MxMkpTR2xvYmFsRGF0YUVQTlMxXzlTdHJ1Y3R1cmVFTjNXVEYxMFBhc3NSZWZQ
dHJJTlNfMjJEZWRpY2F0ZWRXb3JrZXJDb250ZXh0RUVFCi1fX1pON1dlYkNvcmUxNUpTV29ya2Vy
Q29udGV4dEMyRVJOM0pTQzEySlNHbG9iYWxEYXRhRVBOUzFfOVN0cnVjdHVyZUVOM1dURjEwUGFz
c1JlZlB0cklOU18xM1dvcmtlckNvbnRleHRFRUUKLV9fWk43V2ViQ29yZTE5SlNXb3JrZXJDb250
ZXh0QmFzZUMyRVJOM0pTQzEySlNHbG9iYWxEYXRhRVBOUzFfOVN0cnVjdHVyZUVOM1dURjEwUGFz
c1JlZlB0cklOU18xM1dvcmtlckNvbnRleHRFRUUKLV9fWk43V2ViQ29yZTExbm9ybWFsV29ybGRF
Uk4zSlNDMTJKU0dsb2JhbERhdGFFCitfX1pON1dlYkNvcmUyNEpTRGVkaWNhdGVkV29ya2VyQ29u
dGV4dEMxRVJOM0pTQzEyVk1FUE5TMV85U3RydWN0dXJlRU4zV1RGMTBQYXNzUmVmUHRySU5TXzIy
RGVkaWNhdGVkV29ya2VyQ29udGV4dEVFRQorX19aTjdXZWJDb3JlMTVKU1dvcmtlckNvbnRleHRD
MkVSTjNKU0MxMlZNRVBOUzFfOVN0cnVjdHVyZUVOM1dURjEwUGFzc1JlZlB0cklOU18xM1dvcmtl
ckNvbnRleHRFRUUKK19fWk43V2ViQ29yZTE5SlNXb3JrZXJDb250ZXh0QmFzZUMyRVJOM0pTQzEy
Vk1FUE5TMV85U3RydWN0dXJlRU4zV1RGMTBQYXNzUmVmUHRySU5TXzEzV29ya2VyQ29udGV4dEVF
RQorX19aTjdXZWJDb3JlMTFub3JtYWxXb3JsZEVSTjNKU0MxMlZNRQogX19aTkszSlNDMTRKU0ds
b2JhbE9iamVjdDE3c3VwcG9ydHNQcm9maWxpbmdFdgogX19aTkszSlNDMTRKU0dsb2JhbE9iamVj
dDIyc3VwcG9ydHNSaWNoU291cmNlSW5mb0V2CiBfX1pON1dlYkNvcmUyNEpTRGVkaWNhdGVkV29y
a2VyQ29udGV4dDNwdXRFUE4zSlNDOUV4ZWNTdGF0ZUVSS05TMV8xMElkZW50aWZpZXJFTlMxXzdK
U1ZhbHVlRVJOUzFfMTVQdXRQcm9wZXJ0eVNsb3RFCkBAIC0xOTY5OCw3ICsxOTY5OCw3IEBAIF9f
Wk43V2ViQ29yZTIyanNIVE1MTWVkaWFFbGVtZW50TG9vcEVQTjMKIF9fWk43V2ViQ29yZTI1c2V0
SlNIVE1MTWVkaWFFbGVtZW50TG9vcEVQTjNKU0M5RXhlY1N0YXRlRVBOUzBfOEpTT2JqZWN0RU5T
MF83SlNWYWx1ZUUKIF9fWk43V2ViQ29yZTE3anNIVE1MRG9jdW1lbnRBbGxFUE4zSlNDOUV4ZWNT
dGF0ZUVOUzBfN0pTVmFsdWVFUktOUzBfMTBJZGVudGlmaWVyRQogX19aTks3V2ViQ29yZTE0SlNI
VE1MRG9jdW1lbnQzYWxsRVBOM0pTQzlFeGVjU3RhdGVFCi1fX1pOSzNKU0M4SlNPYmplY3Q5Z2V0
RGlyZWN0RVJOU18xMkpTR2xvYmFsRGF0YUVSS05TXzEwSWRlbnRpZmllckUKK19fWk5LM0pTQzhK
U09iamVjdDlnZXREaXJlY3RFUk5TXzEyVk1FUktOU18xMElkZW50aWZpZXJFCiBfX1pON1dlYkNv
cmU4RG9jdW1lbnQzYWxsRXYKIF9fWk43V2ViQ29yZTE3SFRNTEFsbENvbGxlY3Rpb242Y3JlYXRl
RU4zV1RGMTBQYXNzUmVmUHRySU5TXzROb2RlRUVFCiBfX1pON1dlYkNvcmUxNEhUTUxDb2xsZWN0
aW9uQzJFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNE5vZGVFRUVOU18xNENvbGxlY3Rpb25UeXBlRQpA
QCAtMTk3NTEsOSArMTk3NTEsOSBAQCBfX1pON1dlYkNvcmUyM0pTTm9kZUZpbHRlckNvbnN0cnVj
dG9yMThnCiBfX1pOM0pTQzE4Z2V0U3RhdGljVmFsdWVTbG90SU43V2ViQ29yZTIzSlNOb2RlRmls
dGVyQ29uc3RydWN0b3JFTlMxXzEySlNET01XcmFwcGVyRUVFYlBOU185RXhlY1N0YXRlRVBLTlNf
OUhhc2hUYWJsZUVQVF9SS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCiBfX1pO
N1dlYkNvcmUyNGpzTm9kZUZpbHRlclNIT1dfRUxFTUVOVEVQTjNKU0M5RXhlY1N0YXRlRU5TMF83
SlNWYWx1ZUVSS05TMF8xMElkZW50aWZpZXJFCiBfX1pON1dlYkNvcmU0NWpzRG9jdW1lbnRQcm90
b3R5cGVGdW5jdGlvbkNyZWF0ZU5vZGVJdGVyYXRvckVQTjNKU0M5RXhlY1N0YXRlRQotX19aTjdX
ZWJDb3JlMTJ0b05vZGVGaWx0ZXJFUk4zSlNDMTJKU0dsb2JhbERhdGFFTlMwXzdKU1ZhbHVlRQot
X19aTjdXZWJDb3JlMjFKU05vZGVGaWx0ZXJDb25kaXRpb25DMUVSTjNKU0MxMkpTR2xvYmFsRGF0
YUVQTlNfMTBOb2RlRmlsdGVyRU5TMV83SlNWYWx1ZUUKLV9fWk4zSlNDNFdlYWtJTlNfN1Vua25v
d25FRUMyRVJOU18xMkpTR2xvYmFsRGF0YUVOU183SlNWYWx1ZUVQTlNfMTVXZWFrSGFuZGxlT3du
ZXJFUHYKK19fWk43V2ViQ29yZTEydG9Ob2RlRmlsdGVyRVJOM0pTQzEyVk1FTlMwXzdKU1ZhbHVl
RQorX19aTjdXZWJDb3JlMjFKU05vZGVGaWx0ZXJDb25kaXRpb25DMUVSTjNKU0MxMlZNRVBOU18x
ME5vZGVGaWx0ZXJFTlMxXzdKU1ZhbHVlRQorX19aTjNKU0M0V2Vha0lOU183VW5rbm93bkVFQzJF
Uk5TXzEyVk1FTlNfN0pTVmFsdWVFUE5TXzE1V2Vha0hhbmRsZU93bmVyRVB2CiBfX1pON1dlYkNv
cmU0dG9KU0VQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOU18xMk5v
ZGVJdGVyYXRvckUKIF9fWk43V2ViQ29yZTEzY3JlYXRlV3JhcHBlcklOU18xNEpTTm9kZUl0ZXJh
dG9yRU5TXzEyTm9kZUl0ZXJhdG9yRUVFUE5TXzEySlNET01XcmFwcGVyRVBOM0pTQzlFeGVjU3Rh
dGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUFQwXwogX19aTjdXZWJDb3JlMTVnZXRET01TdHJ1
Y3R1cmVJTlNfMTRKU05vZGVJdGVyYXRvckVFRVBOM0pTQzlTdHJ1Y3R1cmVFUE5TMl85RXhlY1N0
YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RQpAQCAtMjYzMjYsOSArMjYzMjYsOSBAQCBfX1pO
N1dlYkNvcmUyNFNoYXJlZFdvcmtlclNjcmlwdExvYWRlckQwCiBfX1pON1dlYkNvcmUxOFNoYXJl
ZFdvcmtlclRocmVhZDE5Y3JlYXRlV29ya2VyQ29udGV4dEVSS05TXzRLVVJMRVJLTjNXVEY2U3Ry
aW5nRQogX19aTjdXZWJDb3JlMTlTaGFyZWRXb3JrZXJDb250ZXh0QzFFUktOM1dURjZTdHJpbmdF
UktOU180S1VSTEVTNF9QTlNfMThTaGFyZWRXb3JrZXJUaHJlYWRFCiBfX1pOSzdXZWJDb3JlMTNX
b3JrZXJDb250ZXh0MjRpc0RlZGljYXRlZFdvcmtlckNvbnRleHRFdgotX19aTjdXZWJDb3JlMzBK
U1NoYXJlZFdvcmtlckNvbnRleHRQcm90b3R5cGVud0VtUE4zSlNDMTJKU0dsb2JhbERhdGFFCitf
X1pON1dlYkNvcmUzMEpTU2hhcmVkV29ya2VyQ29udGV4dFByb3RvdHlwZW53RW1QTjNKU0MxMlZN
RQogX19aVGhuMTI4X043V2ViQ29yZTE5U2hhcmVkV29ya2VyQ29udGV4dDIxdG9TaGFyZWRXb3Jr
ZXJDb250ZXh0RXYKLV9fWk43V2ViQ29yZTIxSlNTaGFyZWRXb3JrZXJDb250ZXh0QzFFUk4zSlND
MTJKU0dsb2JhbERhdGFFUE5TMV85U3RydWN0dXJlRU4zV1RGMTBQYXNzUmVmUHRySU5TXzE5U2hh
cmVkV29ya2VyQ29udGV4dEVFRQorX19aTjdXZWJDb3JlMjFKU1NoYXJlZFdvcmtlckNvbnRleHRD
MUVSTjNKU0MxMlZNRVBOUzFfOVN0cnVjdHVyZUVOM1dURjEwUGFzc1JlZlB0cklOU18xOVNoYXJl
ZFdvcmtlckNvbnRleHRFRUUKIF9fWk43V2ViQ29yZTIxSlNTaGFyZWRXb3JrZXJDb250ZXh0M3B1
dEVQTjNKU0M5RXhlY1N0YXRlRVJLTlMxXzEwSWRlbnRpZmllckVOUzFfN0pTVmFsdWVFUk5TMV8x
NVB1dFByb3BlcnR5U2xvdEUKIF9fWk4zSlNDOWxvb2t1cFB1dElON1dlYkNvcmUyMUpTU2hhcmVk
V29ya2VyQ29udGV4dEVFRWJQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVOU183SlNW
YWx1ZUVQS05TXzlIYXNoVGFibGVFUFRfCiBfX1pON1dlYkNvcmUzM3NldEpTU2hhcmVkV29ya2Vy
Q29udGV4dE9uY29ubmVjdEVQTjNKU0M5RXhlY1N0YXRlRVBOUzBfOEpTT2JqZWN0RU5TMF83SlNW
YWx1ZUUKQEAgLTQxMjA1LDcgKzQxMjA1LDcgQEAgX19aWk43V2ViQ29yZTI0cGFyc2VYU1NQcm90
ZWN0aW9uSGVhZGVyRQogX19aR1ZaTjdXZWJDb3JlMjRwYXJzZVhTU1Byb3RlY3Rpb25IZWFkZXJF
UktOM1dURjZTdHJpbmdFUlMxX1JqUzRfRTI4ZmFpbHVyZVJlYXNvbkR1cGxpY2F0ZVJlcG9ydC5i
CiBfX1paTjdXZWJDb3JlMjRwYXJzZVhTU1Byb3RlY3Rpb25IZWFkZXJFUktOM1dURjZTdHJpbmdF
UlMxX1JqUzRfRTI5ZmFpbHVyZVJlYXNvbkludmFsaWREaXJlY3RpdmUKIF9fWkdWWk43V2ViQ29y
ZTI0cGFyc2VYU1NQcm90ZWN0aW9uSGVhZGVyRVJLTjNXVEY2U3RyaW5nRVJTMV9SalM0X0UyOWZh
aWx1cmVSZWFzb25JbnZhbGlkRGlyZWN0aXZlLmIKLV9fWk43V2ViQ29yZUwxNGdsb2JhbERhdGFi
YXNlRQorX19aTjdXZWJDb3JlTDE0dm1iYXNlRQogX19aWk43V2ViQ29yZTVJbWFnZTludWxsSW1h
Z2VFdkU5bnVsbEltYWdlCiBfX1pHVlpON1dlYkNvcmU1SW1hZ2U5bnVsbEltYWdlRXZFOW51bGxJ
bWFnZS5iCiBfX1paTjdXZWJDb3JlTDE2ZXJyb3JFdmVudFNlbmRlckV2RTZzZW5kZXIKQEAgLTQx
MjUyLDcgKzQxMjUyLDcgQEAgX19aR1ZaTjdXZWJDb3JlMTRJbnB1dFR5cGVOYW1lczN1cmxFdkU0
bgogX19aTjdXZWJDb3JlMTJfR0xPQkFMX19OXzFMMjJpbnN0cnVtZW50aW5nQWdlbnRzU2V0RQog
X19aWk43V2ViQ29yZUwzM2Nzc1Byb3BlcnR5SURGb3JKU0NTU1Byb3BlcnR5TmFtZUVOM0pTQzEy
UHJvcGVydHlOYW1lRUUxN3Byb3BlcnR5SW5mb0NhY2hlCiBfX1pHVlpON1dlYkNvcmVMMzNjc3NQ
cm9wZXJ0eUlERm9ySlNDU1NQcm9wZXJ0eU5hbWVFTjNKU0MxMlByb3BlcnR5TmFtZUVFMTdwcm9w
ZXJ0eUluZm9DYWNoZS5iCi1fX1paTjdXZWJDb3JlMTVKU0RPTVdpbmRvd0Jhc2UxOGNvbW1vbkpT
R2xvYmFsRGF0YUV2RTEwZ2xvYmFsRGF0YQorX19aWk43V2ViQ29yZTE1SlNET01XaW5kb3dCYXNl
MThjb21tb25WTUV2RTEwdm0KIF9fWlpON1dlYkNvcmUxOWNyZWF0ZUpTSFRNTFdyYXBwZXJFUE4z
SlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVOM1dURjEwUGFzc1JlZlB0cklO
U18xMUhUTUxFbGVtZW50RUVFRTNtYXAKIF9fWkdWWk43V2ViQ29yZTE5Y3JlYXRlSlNIVE1MV3Jh
cHBlckVQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RU4zV1RGMTBQYXNz
UmVmUHRySU5TXzExSFRNTEVsZW1lbnRFRUVFM21hcC5iCiBfX1paTjdXZWJDb3JlOGJsYW5rVVJM
RXZFMTRzdGF0aWNCbGFua1VSTApJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRl
cnMvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAxNDg2Mzgp
CisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTR2xvYmFsRGF0
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzAsMCBAQAotI2lmbmRlZiBXZWJDb3JlX0ZXRF9K
U0dsb2JhbERhdGFfaAotI2RlZmluZSBXZWJDb3JlX0ZXRF9KU0dsb2JhbERhdGFfaAotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTR2xvYmFsRGF0YS5oPgotI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxNDg2
MzgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNHbG9i
YWxEYXRhLmg6MTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVu
dGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3Jl
X0ZXRF9KU0dsb2JhbERhdGFfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9KU0dsb2JhbERhdGFfaAor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTR2xvYmFsRGF0YS5oPgorI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9WTS5oCSh3b3JraW5n
IGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1ZNLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0jaWZuZGVmIFdlYkNvcmVfRldEX0pTR2xv
YmFsRGF0YV9oCi0jZGVmaW5lIFdlYkNvcmVfRldEX0pTR2xvYmFsRGF0YV9oCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNHbG9iYWxEYXRhLmg+CisjaWZuZGVmIFdlYkNvcmVfRldEX1ZNX2gK
KyNkZWZpbmUgV2ViQ29yZV9GV0RfVk1faAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1ZNLmg+
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZj
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvagkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTExNjMsNyArMTExNjMs
NyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cRm9yd2FyZGluZ0hlYWRlcnNccnVudGlt
ZVxKU0Rlc3RydWN0aWJsZU9iamVjdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Rm9yd2FyZGluZ0hlYWRlcnNccnVudGltZVxKU0V4cG9ydE1hY3Jvcy5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cRm9yd2FyZGluZ0hlYWRlcnNccnVudGltZVxKU0Z1bmN0aW9uLmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxGb3J3YXJkaW5nSGVhZGVyc1xydW50aW1l
XEpTR2xvYmFsRGF0YS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cRm9yd2FyZGlu
Z0hlYWRlcnNccnVudGltZVxWTS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cRm9y
d2FyZGluZ0hlYWRlcnNccnVudGltZVxKU0dsb2JhbE9iamVjdC5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cRm9yd2FyZGluZ0hlYWRlcnNccnVudGltZVxKU1Byb3h5LmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxGb3J3YXJkaW5nSGVhZGVyc1xydW50aW1lXEpTV2l0
aFNjb3BlLmgiIC8+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMJKHdvcmtp
bmcgY29weSkKQEAgLTE0MDM1LDcgKzE0MDM1LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXEZvcndhcmRpbmdIZWFkZXJzXHJ1bnRpbWVcSlNGdW5jdGlvbi5oIj4KICAgICAgIDxGaWx0
ZXI+Rm9yd2FyZGluZ0hlYWRlcnNccnVudGltZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cRm9yd2FyZGluZ0hlYWRlcnNccnVudGltZVxKU0ds
b2JhbERhdGEuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxGb3J3YXJkaW5nSGVhZGVy
c1xydW50aW1lXFZNLmgiPgogICAgICAgPEZpbHRlcj5Gb3J3YXJkaW5nSGVhZGVyc1xydW50aW1l
PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxG
b3J3YXJkaW5nSGVhZGVyc1xydW50aW1lXEpTR2xvYmFsT2JqZWN0LmgiPgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01PYmplY3RIYXNoVGFibGVNYXAuY3Bw
CShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01PYmpl
Y3RIYXNoVGFibGVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNyw5IEBAIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlewogCi1ET01PYmplY3RIYXNoVGFi
bGVNYXAmIERPTU9iamVjdEhhc2hUYWJsZU1hcDo6bWFwRm9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKK0RPTU9iamVjdEhhc2hUYWJsZU1hcCYgRE9NT2JqZWN0SGFzaFRhYmxlTWFwOjptYXBG
b3IoVk0mIHZtKQogewotICAgIEpTR2xvYmFsRGF0YTo6Q2xpZW50RGF0YSogY2xpZW50RGF0YSA9
IGdsb2JhbERhdGEuY2xpZW50RGF0YTsKKyAgICBWTTo6Q2xpZW50RGF0YSogY2xpZW50RGF0YSA9
IHZtLmNsaWVudERhdGE7CiAgICAgQVNTRVJUKGNsaWVudERhdGEpOwogICAgIHJldHVybiBzdGF0
aWNfY2FzdDxXZWJDb3JlSlNDbGllbnREYXRhKj4oY2xpZW50RGF0YSktPmhhc2hUYWJsZU1hcDsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1h
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTU9iamVjdEhh
c2hUYWJsZU1hcC5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9ET01PYmplY3RIYXNoVGFibGVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYs
NyBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBKU0MgewotICAgIGNs
YXNzIEpTR2xvYmFsRGF0YTsKKyAgICBjbGFzcyBWTTsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBNYXAgZnJvbSBzdGF0
aWMgSGFzaFRhYmxlIGluc3RhbmNlcyB0byBwZXItR2xvYmFsRGF0YSBvbmVzLgogY2xhc3MgRE9N
T2JqZWN0SGFzaFRhYmxlTWFwIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgRE9NT2JqZWN0SGFzaFRh
YmxlTWFwJiBtYXBGb3IoSlNDOjpKU0dsb2JhbERhdGEmKTsKKyAgICBzdGF0aWMgRE9NT2JqZWN0
SGFzaFRhYmxlTWFwJiBtYXBGb3IoSlNDOjpWTSYpOwogCiAgICAgfkRPTU9iamVjdEhhc2hUYWJs
ZU1hcCgpCiAgICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBl
cldvcmxkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01X
cmFwcGVyV29ybGQuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxOCArMzAs
MTggQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ET01X
cmFwcGVyV29ybGQ6OkRPTVdyYXBwZXJXb3JsZChKU0M6OkpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgYm9vbCBpc05vcm1hbCkKLSAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorRE9NV3Jh
cHBlcldvcmxkOjpET01XcmFwcGVyV29ybGQoSlNDOjpWTSogdm0sIGJvb2wgaXNOb3JtYWwpCisg
ICAgOiBtX3ZtKHZtKQogICAgICwgbV9pc05vcm1hbChpc05vcm1hbCkKIHsKLSAgICBKU0dsb2Jh
bERhdGE6OkNsaWVudERhdGEqIGNsaWVudERhdGEgPSBtX2dsb2JhbERhdGEtPmNsaWVudERhdGE7
CisgICAgVk06OkNsaWVudERhdGEqIGNsaWVudERhdGEgPSBtX3ZtLT5jbGllbnREYXRhOwogICAg
IEFTU0VSVChjbGllbnREYXRhKTsKICAgICBzdGF0aWNfY2FzdDxXZWJDb3JlSlNDbGllbnREYXRh
Kj4oY2xpZW50RGF0YSktPnJlbWVtYmVyV29ybGQodGhpcyk7CiB9CiAKIERPTVdyYXBwZXJXb3Js
ZDo6fkRPTVdyYXBwZXJXb3JsZCgpCiB7Ci0gICAgSlNHbG9iYWxEYXRhOjpDbGllbnREYXRhKiBj
bGllbnREYXRhID0gbV9nbG9iYWxEYXRhLT5jbGllbnREYXRhOworICAgIFZNOjpDbGllbnREYXRh
KiBjbGllbnREYXRhID0gbV92bS0+Y2xpZW50RGF0YTsKICAgICBBU1NFUlQoY2xpZW50RGF0YSk7
CiAgICAgc3RhdGljX2Nhc3Q8V2ViQ29yZUpTQ2xpZW50RGF0YSo+KGNsaWVudERhdGEpLT5mb3Jn
ZXRXb3JsZCh0aGlzKTsKIApAQCAtNjAsOSArNjAsOSBAQCB2b2lkIERPTVdyYXBwZXJXb3JsZDo6
Y2xlYXJXcmFwcGVycygpCiAgICAgICAgICgqbV9zY3JpcHRDb250cm9sbGVyc1dpdGhXaW5kb3dT
aGVsbHMuYmVnaW4oKSktPmRlc3Ryb3lXaW5kb3dTaGVsbCh0aGlzKTsKIH0KIAotRE9NV3JhcHBl
cldvcmxkKiBub3JtYWxXb3JsZChKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK0RPTVdy
YXBwZXJXb3JsZCogbm9ybWFsV29ybGQoSlNDOjpWTSYgdm0pCiB7Ci0gICAgSlNHbG9iYWxEYXRh
OjpDbGllbnREYXRhKiBjbGllbnREYXRhID0gZ2xvYmFsRGF0YS5jbGllbnREYXRhOworICAgIFZN
OjpDbGllbnREYXRhKiBjbGllbnREYXRhID0gdm0uY2xpZW50RGF0YTsKICAgICBBU1NFUlQoY2xp
ZW50RGF0YSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmVKU0NsaWVudERhdGEqPihj
bGllbnREYXRhKS0+bm9ybWFsV29ybGQoKTsKIH0KQEAgLTcwLDcgKzcwLDcgQEAgRE9NV3JhcHBl
cldvcmxkKiBub3JtYWxXb3JsZChKU0M6OkpTR2xvYgogRE9NV3JhcHBlcldvcmxkKiBtYWluVGhy
ZWFkTm9ybWFsV29ybGQoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc3Rh
dGljIERPTVdyYXBwZXJXb3JsZCogY2FjaGVkTm9ybWFsV29ybGQgPSBub3JtYWxXb3JsZCgqSlNE
T01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBzdGF0aWMgRE9NV3JhcHBlcldv
cmxkKiBjYWNoZWROb3JtYWxXb3JsZCA9IG5vcm1hbFdvcmxkKCpKU0RPTVdpbmRvdzo6Y29tbW9u
Vk0oKSk7CiAgICAgcmV0dXJuIGNhY2hlZE5vcm1hbFdvcmxkOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuaAkocmV2aXNpb24gMTQ4NjM4
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDkgKzM3LDkgQEAgdHlwZWRlZiBKU0M6OldlYWtHQ01hcDxTdHJpbmdJ
bXBsKiwgSlNDOgogCiBjbGFzcyBET01XcmFwcGVyV29ybGQgOiBwdWJsaWMgUmVmQ291bnRlZDxE
T01XcmFwcGVyV29ybGQ+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxET01XcmFw
cGVyV29ybGQ+IGNyZWF0ZShKU0M6OkpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCBpc05v
cm1hbCA9IGZhbHNlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gY3Jl
YXRlKEpTQzo6Vk0qIHZtLCBib29sIGlzTm9ybWFsID0gZmFsc2UpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IERPTVdyYXBwZXJXb3JsZChnbG9iYWxEYXRhLCBpc05vcm1hbCkp
OworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERPTVdyYXBwZXJXb3JsZCh2bSwgaXNOb3Jt
YWwpKTsKICAgICB9CiAgICAgfkRPTVdyYXBwZXJXb3JsZCgpOwogCkBAIC01NiwxOCArNTYsMTgg
QEAgcHVibGljOgogCiAgICAgYm9vbCBpc05vcm1hbCgpIGNvbnN0IHsgcmV0dXJuIG1faXNOb3Jt
YWw7IH0KIAotICAgIEpTQzo6SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9nbG9iYWxEYXRhOyB9CisgICAgSlNDOjpWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3Zt
OyB9CiAKIHByb3RlY3RlZDoKLSAgICBET01XcmFwcGVyV29ybGQoSlNDOjpKU0dsb2JhbERhdGEq
LCBib29sIGlzTm9ybWFsKTsKKyAgICBET01XcmFwcGVyV29ybGQoSlNDOjpWTSosIGJvb2wgaXNO
b3JtYWwpOwogCiBwcml2YXRlOgotICAgIEpTQzo6SlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7
CisgICAgSlNDOjpWTSogbV92bTsKICAgICBIYXNoU2V0PFNjcmlwdENvbnRyb2xsZXIqPiBtX3Nj
cmlwdENvbnRyb2xsZXJzV2l0aFdpbmRvd1NoZWxsczsKICAgICBib29sIG1faXNOb3JtYWw7CiB9
OwogCi1ET01XcmFwcGVyV29ybGQqIG5vcm1hbFdvcmxkKEpTQzo6SlNHbG9iYWxEYXRhJik7CitE
T01XcmFwcGVyV29ybGQqIG5vcm1hbFdvcmxkKEpTQzo6Vk0mKTsKIERPTVdyYXBwZXJXb3JsZCog
bWFpblRocmVhZE5vcm1hbFdvcmxkKCk7CiBpbmxpbmUgRE9NV3JhcHBlcldvcmxkKiBkZWJ1Z2dl
cldvcmxkKCkgeyByZXR1cm4gbWFpblRocmVhZE5vcm1hbFdvcmxkKCk7IH0KIGlubGluZSBET01X
cmFwcGVyV29ybGQqIHBsdWdpbldvcmxkKCkgeyByZXR1cm4gbWFpblRocmVhZE5vcm1hbFdvcmxk
KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNw
cAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250
cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkdD
Q29udHJvbGxlci5oIgogCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKLSNpbmNsdWRlIDxydW50
aW1lL0pTR2xvYmFsRGF0YS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KICNpbmNsdWRlIDxy
dW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUgPGhlYXAvSGVhcC5oPgogI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KQEAgLTM4LDggKzM4LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBz
dGF0aWMgdm9pZCBjb2xsZWN0KHZvaWQqKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9N
V2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7Ci0gICAgSlNET01XaW5kb3c6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpLT5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOworICAgIEpTRE9NV2luZG93Ojpjb21tb25W
TSgpLT5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7CiB9CiAKIEdDQ29udHJvbGxlciYgZ2NDb250
cm9sbGVyKCkKQEAgLTYzLDggKzYzLDggQEAgdm9pZCBHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xs
ZWN0U29vbigpCiAgICAgLy8gZG93biBpbnRvIFdURiBzbyB0aGF0IG1vcmUgcGxhdGZvcm1zIGNh
biB0YWtlIGFkdmFudGFnZSBvZiBpdCwgd2Ugd2lsbCBiZSAKICAgICAvLyBhYmxlIHRvIHVzZSBy
ZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCBvbiBtb3JlIHBsYXRmb3Jtcy4KICNpZiBVU0UoQ0Yp
IHx8IFBMQVRGT1JNKEJMQUNLQkVSUlkpIHx8IFBMQVRGT1JNKFFUKQotICAgIEpTTG9ja0hvbGRl
ciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7Ci0gICAgSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBo
KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOworICAg
IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFwLnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBo
KCk7CiAjZWxzZQogICAgIGlmICghbV9HQ1RpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fR0NU
aW1lci5zdGFydE9uZVNob3QoMCk7CkBAIC04MCw5ICs4MCw5IEBAIHZvaWQgR0NDb250cm9sbGVy
OjpnY1RpbWVyRmlyZWQoVGltZXI8R0MKIAogdm9pZCBHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xs
ZWN0Tm93KCkKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOwotICAgIGlmICghSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
LT5oZWFwLmlzQnVzeSgpKQotICAgICAgICBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRh
KCktPmhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RP
TVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAgaWYgKCFKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+
aGVhcC5pc0J1c3koKSkKKyAgICAgICAgSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhlYXAuY29s
bGVjdEFsbEdhcmJhZ2UoKTsKIH0KIAogdm9pZCBHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xsZWN0
T25BbHRlcm5hdGVUaHJlYWRGb3JEZWJ1Z2dpbmcoYm9vbCB3YWl0VW50aWxEb25lKQpAQCAtOTks
MTMgKzk5LDEzIEBAIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE9uQWx0ZXIKIAog
dm9pZCBHQ0NvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFi
bGVkKGJvb2wgZW5hYmxlKQogewotICAgIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEo
KS0+aGVhcC5zZXRHYXJiYWdlQ29sbGVjdGlvblRpbWVyRW5hYmxlZChlbmFibGUpOworICAgIEpT
RE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFwLnNldEdhcmJhZ2VDb2xsZWN0aW9uVGltZXJFbmFi
bGVkKGVuYWJsZSk7CiB9CiAKIHZvaWQgR0NDb250cm9sbGVyOjpkaXNjYXJkQWxsQ29tcGlsZWRD
b2RlKCkKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwotICAgIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+ZGlzY2Fy
ZEFsbENvZGUoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0o
KSk7CisgICAgSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmRpc2NhcmRBbGxDb2RlKCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBzdGF0aWMgYm9vbCBnZXQoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlCiAgICAgfQogICAgIGlmICghb2JqZWN0LmlzT2JqZWN0KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERhdGEo
KSwga2V5UGF0aEVsZW1lbnQudXRmOCgpLmRhdGEoKSk7CisgICAgSWRlbnRpZmllciBpZGVudGlm
aWVyKCZleGVjLT52bSgpLCBrZXlQYXRoRWxlbWVudC51dGY4KCkuZGF0YSgpKTsKICAgICBpZiAo
IWFzT2JqZWN0KG9iamVjdCktPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50aWZpZXIpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgcmVzdWx0ID0gYXNPYmplY3Qob2JqZWN0KS0+Z2V0KGV4ZWMs
IGlkZW50aWZpZXIpOwpAQCAtNjcsOCArNjcsOCBAQCBzdGF0aWMgYm9vbCBzZXQoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlCiB7CiAgICAgaWYgKCFjYW5TZXQob2JqZWN0LCBrZXlQYXRoRWxlbWVu
dCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIoJmV4
ZWMtPmdsb2JhbERhdGEoKSwga2V5UGF0aEVsZW1lbnQudXRmOCgpLmRhdGEoKSk7Ci0gICAgYXNP
YmplY3Qob2JqZWN0KS0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgaWRlbnRpZmllciwg
anNWYWx1ZSk7CisgICAgSWRlbnRpZmllciBpZGVudGlmaWVyKCZleGVjLT52bSgpLCBrZXlQYXRo
RWxlbWVudC51dGY4KCkuZGF0YSgpKTsKKyAgICBhc09iamVjdChvYmplY3QpLT5wdXREaXJlY3Qo
ZXhlYy0+dm0oKSwgaWRlbnRpZmllciwganNWYWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
QEAgLTMwMCw3ICszMDAsNyBAQCBTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlKERPTVJl
cXVlCiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0g
cHJwVmFsdWU7CiAgICAgaWYgKHNlcmlhbGl6ZWRWYWx1ZSkKICAgICAgICAgcmV0dXJuIFNjcmlw
dFZhbHVlOjpkZXNlcmlhbGl6ZShleGVjLCBzZXJpYWxpemVkVmFsdWUuZ2V0KCksIE5vblRocm93
aW5nKTsKLSAgICByZXR1cm4gU2NyaXB0VmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc051bGwo
KSk7CisgICAgcmV0dXJuIFNjcmlwdFZhbHVlKGV4ZWMtPnZtKCksIGpzTnVsbCgpKTsKIH0KIAog
U2NyaXB0VmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZUJ1ZmZlcihET01SZXF1ZXN0U3RhdGUqIHJl
cXVlc3RTdGF0ZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHBycEJ1ZmZlcikKQEAgLTMxNCwx
MyArMzE0LDEzIEBAIFNjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWVCdWZmZXIoRE8KICAg
ICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZUJ5dGVzKHZhbHVlKTsKICAgICAgICAg
cmV0dXJuIFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShleGVjLCBzZXJpYWxpemVkVmFsdWUuZ2V0
KCksIE5vblRocm93aW5nKTsKICAgICB9Ci0gICAgcmV0dXJuIFNjcmlwdFZhbHVlKGV4ZWMtPmds
b2JhbERhdGEoKSwganNOdWxsKCkpOworICAgIHJldHVybiBTY3JpcHRWYWx1ZShleGVjLT52bSgp
LCBqc051bGwoKSk7CiB9CiAKIFNjcmlwdFZhbHVlIGlkYktleVRvU2NyaXB0VmFsdWUoRE9NUmVx
dWVzdFN0YXRlKiByZXF1ZXN0U3RhdGUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXkpCiB7CiAgICAg
RXhlY1N0YXRlKiBleGVjID0gcmVxdWVzdFN0YXRlLT5leGVjKCk7Ci0gICAgcmV0dXJuIFNjcmlw
dFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgaWRiS2V5VG9KU1ZhbHVlKGV4ZWMsIGpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIGtleS5nZXQo
KSkpOworICAgIHJldHVybiBTY3JpcHRWYWx1ZShleGVjLT52bSgpLCBpZGJLZXlUb0pTVmFsdWUo
ZXhlYywganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpKSwga2V5LmdldCgpKSk7CiB9CiAKIFBhc3NSZWZQdHI8SURCS2V5PiBzY3JpcHRWYWx1ZVRv
SURCS2V5KERPTVJlcXVlc3RTdGF0ZSogcmVxdWVzdFN0YXRlLCBjb25zdCBTY3JpcHRWYWx1ZSYg
c2NyaXB0VmFsdWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNr
RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJh
Y2tEYXRhLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ2FsbGJhY2tEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDggQEAgcHVibGlj
OgogICAgIHN0YXRpYyB2b2lkIGRlbGV0ZURhdGEodm9pZCopOwogCiAgICAgSlNDYWxsYmFja0Rh
dGEoSlNDOjpKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCi0gICAgICAgIDogbV9jYWxsYmFjayhnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgY2Fs
bGJhY2spCi0gICAgICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRh
KCksIGdsb2JhbE9iamVjdCkKKyAgICAgICAgOiBtX2NhbGxiYWNrKGdsb2JhbE9iamVjdC0+dm0o
KSwgY2FsbGJhY2spCisgICAgICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT52bSgp
LCBnbG9iYWxPYmplY3QpCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAsIG1fdGhyZWFkKGN1cnJl
bnRUaHJlYWQoKSkKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
dXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3Bw
CShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3Rv
bVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0
OCw3IEBAIGJvb2wgSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGUKIAogICAgIFJl
ZlB0cjxKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IHByb3RlY3QodGhpcyk7CiAKLSAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEo
KSk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT52
bSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVy
LmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
dXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw4ICs1NSw4IEBA
IFBhc3NSZWZQdHI8SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI+IEpTQ3UKIH0KIAogSlNDdXN0b21Y
UGF0aE5TUmVzb2x2ZXI6OkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIGN1c3RvbVJlc29sdmVyLCBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqZWN0KQotICAg
IDogbV9jdXN0b21SZXNvbHZlcihleGVjLT5nbG9iYWxEYXRhKCksIGN1c3RvbVJlc29sdmVyKQot
ICAgICwgbV9nbG9iYWxPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QpCisg
ICAgOiBtX2N1c3RvbVJlc29sdmVyKGV4ZWMtPnZtKCksIGN1c3RvbVJlc29sdmVyKQorICAgICwg
bV9nbG9iYWxPYmplY3QoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0KQogewogfQogCkBAIC02OCw3
ICs2OCw3IEBAIFN0cmluZyBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6bG9va3VwTmEKIHsKICAg
ICBBU1NFUlQobV9jdXN0b21SZXNvbHZlcik7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RP
TVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0g
bV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDkgKzQ2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogQVNTRVJUX0hBU19UUklW
SUFMX0RFU1RSVUNUT1IoRE9NQ29uc3RydWN0b3JPYmplY3QpOwogQVNTRVJUX0hBU19UUklWSUFM
X0RFU1RSVUNUT1IoRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQpOwogCi1jb25zdCBKU0M6Okhh
c2hUYWJsZSogZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIGNvbnN0IEpTQzo6SGFzaFRhYmxlKiBzdGF0aWNUYWJsZSkKK2NvbnN0IEpTQzo6SGFzaFRh
YmxlKiBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKFZNJiB2bSwgY29uc3QgSlNDOjpIYXNoVGFi
bGUqIHN0YXRpY1RhYmxlKQogewotICAgIHJldHVybiBET01PYmplY3RIYXNoVGFibGVNYXA6Om1h
cEZvcihnbG9iYWxEYXRhKS5nZXQoc3RhdGljVGFibGUpOworICAgIHJldHVybiBET01PYmplY3RI
YXNoVGFibGVNYXA6Om1hcEZvcih2bSkuZ2V0KHN0YXRpY1RhYmxlKTsKIH0KIAogSlNWYWx1ZSBq
c1N0cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykKQEAgLTE1MCw3
ICsxNTAsNyBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAg
aW50IGxpbmVOdW1iZXIgPSAwOwogICAgIFN0cmluZyBleGNlcHRpb25Tb3VyY2VVUkw7CiAKLSAg
ICBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZSA9IGV4ZWMtPmdsb2JhbERh
dGEoKS5leGNlcHRpb25TdGFjazsKKyAgICBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4gc3Rh
Y2tUcmFjZSA9IGV4ZWMtPnZtKCkuZXhjZXB0aW9uU3RhY2s7CiAgICAgZXhlYy0+Y2xlYXJFeGNl
cHRpb24oKTsKICAgICBleGVjLT5jbGVhclN1cHBsZW1lbnRhcnlFeGNlcHRpb25JbmZvKCk7CiAK
QEAgLTI2OCw3ICsyNjgsNyBAQCBTdHJ1Y3R1cmUqIGNhY2hlRE9NU3RydWN0dXJlKEpTRE9NR2xv
YmFsCiB7CiAgICAgSlNET01TdHJ1Y3R1cmVNYXAmIHN0cnVjdHVyZXMgPSBnbG9iYWxPYmplY3Qt
PnN0cnVjdHVyZXMoKTsKICAgICBBU1NFUlQoIXN0cnVjdHVyZXMuY29udGFpbnMoY2xhc3NJbmZv
KSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZXMuc2V0KGNsYXNzSW5mbywgV3JpdGVCYXJyaWVyPFN0
cnVjdHVyZT4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlKSkuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworICAgIHJldHVybiBzdHJ1Y3R1cmVzLnNldChj
bGFzc0luZm8sIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUpKS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKIHN0YXRp
YyBjb25zdCBpbnQzMl90IGtNYXhJbnQzMiA9IDB4N2ZmZmZmZmY7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYzLDkgKzYzLDkgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKICAgICBjbGFzcyBET01Db25zdHJ1
Y3Rvck9iamVjdCA6IHB1YmxpYyBKU0RPTVdyYXBwZXIgewogICAgICAgICB0eXBlZGVmIEpTRE9N
V3JhcHBlciBCYXNlOwogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICAg
ICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAg
ICAgfQogCiAgICAgcHJvdGVjdGVkOgpAQCAtOTQsNyArOTQsNyBAQCBjbGFzcyBET01TdHJpbmdM
aXN0OwogCiAgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKICAgICAgICAgewotICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpOworICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICAgICAgICAgIEFTU0VSVChnbG9iYWxPYmpl
Y3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNEb2N1bWVudCgpKTsKICAgICAgICAgfQog
ICAgIH07CkBAIC0xMTQsNyArMTE0LDcgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKICAgICB7CiAg
ICAgICAgIGlmIChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2V0Q2FjaGVkRE9NU3RydWN0
dXJlKGdsb2JhbE9iamVjdCwgJldyYXBwZXJDbGFzczo6c19pbmZvKSkKICAgICAgICAgICAgIHJl
dHVybiBzdHJ1Y3R1cmU7Ci0gICAgICAgIHJldHVybiBjYWNoZURPTVN0cnVjdHVyZShnbG9iYWxP
YmplY3QsIFdyYXBwZXJDbGFzczo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
Z2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmNyZWF0ZVByb3RvdHlwZShleGVjLCBnbG9iYWxP
YmplY3QpKSwgJldyYXBwZXJDbGFzczo6c19pbmZvKTsKKyAgICAgICAgcmV0dXJuIGNhY2hlRE9N
U3RydWN0dXJlKGdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNzOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmNyZWF0ZVByb3RvdHlwZShleGVj
LCBnbG9iYWxPYmplY3QpKSwgJldyYXBwZXJDbGFzczo6c19pbmZvKTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTxjbGFzcyBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OlN0cnVjdHVyZSogZGVwcmVj
YXRlZEdldERPTVN0cnVjdHVyZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKQEAgLTE0Myw3ICsxNDMs
NyBAQCBjbGFzcyBET01TdHJpbmdMaXN0OwogICAgIHsKICAgICAgICAgaWYgKCF3b3JsZC0+aXNO
b3JtYWwoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZG9tT2JqZWN0LT5z
ZXRXcmFwcGVyKCp3b3JsZC0+Z2xvYmFsRGF0YSgpLCB3cmFwcGVyLCB3cmFwcGVyT3duZXIsIGNv
bnRleHQpOworICAgICAgICBkb21PYmplY3QtPnNldFdyYXBwZXIoKndvcmxkLT52bSgpLCB3cmFw
cGVyLCB3cmFwcGVyT3duZXIsIGNvbnRleHQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKQEAgLTIxOCw3ICsyMTgsNyBAQCBjbGFzcyBET01TdHJpbmdMaXN0OwogICAgICAgICByZXR1
cm4gaW5kZXggPj0gZXhlYy0+YXJndW1lbnRDb3VudCgpID8gSlNDOjpKU1ZhbHVlKCkgOiBleGVj
LT5hcmd1bWVudChpbmRleCk7CiAgICAgfQogCi0gICAgY29uc3QgSlNDOjpIYXNoVGFibGUqIGdl
dEhhc2hUYWJsZUZvckdsb2JhbERhdGEoSlNDOjpKU0dsb2JhbERhdGEmLCBjb25zdCBKU0M6Okhh
c2hUYWJsZSogc3RhdGljVGFibGUpOworICAgIGNvbnN0IEpTQzo6SGFzaFRhYmxlKiBnZXRIYXNo
VGFibGVGb3JHbG9iYWxEYXRhKEpTQzo6Vk0mLCBjb25zdCBKU0M6Okhhc2hUYWJsZSogc3RhdGlj
VGFibGUpOwogCiAgICAgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUgZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqID0gMCk7CiAgICAgdm9pZCByZXBvcnRD
dXJyZW50RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7CkBAIC00ODYsOCArNDg2LDggQEAgY2xh
c3MgRE9NU3RyaW5nTGlzdDsKICAgICAgICAgaWYgKHN0cmluZ0ltcGwtPmxlbmd0aCgpID09IDEp
IHsKICAgICAgICAgICAgIFVDaGFyIHNpbmdsZUNoYXJhY3RlciA9ICgqc3RyaW5nSW1wbClbMHVd
OwogICAgICAgICAgICAgaWYgKHNpbmdsZUNoYXJhY3RlciA8PSBKU0M6Om1heFNpbmdsZUNoYXJh
Y3RlclN0cmluZykgewotICAgICAgICAgICAgICAgIEpTQzo6SlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2xvYmFs
RGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhnbG9iYWxEYXRhLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihzaW5nbGVDaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgICAg
ICBKU0M6OlZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgICAgIHJldHVybiB2bS0+
c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyh2bSwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcj4oc2luZ2xlQ2hhcmFjdGVyKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0
LmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01HbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTRE9NR2xvYmFsT2JqZWN0OjpzX2lu
Zm8gPSB7ICJET01HbG9iYWxPYmplY3QiLCAmSlNHbG9iYWxPYmplY3Q6OnNfaW5mbywgMCwgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU0RPTUdsb2JhbE9iamVjdCkgfTsKIAotSlNET01HbG9iYWxP
YmplY3Q6OkpTRE9NR2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiB3b3JsZCwgY29uc3Qg
R2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQotICAgIDog
SlNHbG9iYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBnbG9iYWxPYmplY3RNZXRob2RU
YWJsZSkKK0pTRE9NR2xvYmFsT2JqZWN0OjpKU0RPTUdsb2JhbE9iamVjdChWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gd29ybGQsIGNvbnN0
IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSkKKyAgICA6
IEpTR2xvYmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQog
ICAgICwgbV9jdXJyZW50RXZlbnQoMCkKICAgICAsIG1fd29ybGQod29ybGQpCiB7CkBAIC01NCwx
NSArNTQsMTUgQEAgdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6ZGVzdHJveShKU0NlbGwqIAogICAg
IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oY2VsbCktPkpTRE9NR2xvYmFsT2JqZWN0
Ojp+SlNET01HbG9iYWxPYmplY3QoKTsKIH0KIAotdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6Zmlu
aXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBKU0RPTUdsb2JhbE9i
amVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGdsb2JhbERhdGEpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQo
aW5oZXJpdHMoJnNfaW5mbykpOwogfQogCi12b2lkIEpTRE9NR2xvYmFsT2JqZWN0OjpmaW5pc2hD
cmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTT2JqZWN0KiB0aGlzVmFsdWUpCit2
b2lkIEpTRE9NR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTT2JqZWN0KiB0
aGlzVmFsdWUpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgdGhpc1Zh
bHVlKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgdGhpc1ZhbHVlKTsKICAgICBBU1NF
UlQoaW5oZXJpdHMoJnNfaW5mbykpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDEwICs0OCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJvdGVjdGVkOgog
ICAgICAgICBzdHJ1Y3QgSlNET01HbG9iYWxPYmplY3REYXRhOwogCi0gICAgICAgIEpTRE9NR2xv
YmFsT2JqZWN0KEpTQzo6SlNHbG9iYWxEYXRhJiwgSlNDOjpTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRy
PERPTVdyYXBwZXJXb3JsZD4sIGNvbnN0IEpTQzo6R2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqID0g
MCk7CisgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0KEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSos
IFBhc3NSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiwgY29uc3QgSlNDOjpHbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSogPSAwKTsKICAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCop
OwotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJik7Ci0gICAg
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpKU0dsb2JhbERhdGEmLCBKU0M6OkpTT2JqZWN0
Kik7CisgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworICAgICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTT2JqZWN0Kik7CiAKICAgICBwdWJsaWM6
CiAgICAgICAgIEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzKCkgeyByZXR1cm4gbV9zdHJ1
Y3R1cmVzOyB9CkBAIC03MSw5ICs3MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAg
ICBzdGF0aWMgV0VCS0lUX0VYUE9SVERBVEEgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwog
Ci0gICAgICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgICAgICBz
dGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgMCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpT
Qzo6R2xvYmFsT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAg
ICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCAwLCBwcm90b3R5cGUsIEpTQzo6
VHlwZUluZm8oSlNDOjpHbG9iYWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8p
OwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC04OSwxMCArODksMTAgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIHsKICAgICAgICAgaWYgKEpTQzo6SlNPYmplY3QqIGNvbnN0cnVj
dG9yID0gY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCktPmNvbnN0
cnVjdG9ycygpLmdldCgmQ29uc3RydWN0b3JDbGFzczo6c19pbmZvKS5nZXQoKSkKICAgICAgICAg
ICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKLSAgICAgICAgSlNDOjpKU09iamVjdCogY29uc3RydWN0
b3IgPSBDb25zdHJ1Y3RvckNsYXNzOjpjcmVhdGUoZXhlYywgQ29uc3RydWN0b3JDbGFzczo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGdsb2JhbE9iamVjdCksIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpLCBj
b25zdF9jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CisgICAgICAgIEpT
Qzo6SlNPYmplY3QqIGNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3JDbGFzczo6Y3JlYXRlKGV4ZWMs
IENvbnN0cnVjdG9yQ2xhc3M6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCBjb25zdF9jYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQ
cm90b3R5cGUoKSksIGNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3Qp
KTsKICAgICAgICAgQVNTRVJUKCFjb25zdF9jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFs
T2JqZWN0KS0+Y29uc3RydWN0b3JzKCkuY29udGFpbnMoJkNvbnN0cnVjdG9yQ2xhc3M6OnNfaW5m
bykpOwogICAgICAgICBKU0M6OldyaXRlQmFycmllcjxKU0M6OkpTT2JqZWN0PiB0ZW1wOwotICAg
ICAgICBjb25zdF9jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KS0+Y29uc3Ry
dWN0b3JzKCkuYWRkKCZDb25zdHJ1Y3RvckNsYXNzOjpzX2luZm8sIHRlbXApLml0ZXJhdG9yLT52
YWx1ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yKTsK
KyAgICAgICAgY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCktPmNv
bnN0cnVjdG9ycygpLmFkZCgmQ29uc3RydWN0b3JDbGFzczo6c19pbmZvLCB0ZW1wKS5pdGVyYXRv
ci0+dmFsdWUuc2V0KGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3IpOwogICAg
ICAgICByZXR1cm4gY29uc3RydWN0b3I7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUzLDE2ICs1MywxNiBAQCBjb25zdCBDbGFzc0luZm8gSlNET01XaW5kb3dCYXNl
OjpzX2luZm8gCiAKIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIEpTRE9NV2luZG93QmFz
ZTo6c19nbG9iYWxPYmplY3RNZXRob2RUYWJsZSA9IHsgJnNob3VsZEFsbG93QWNjZXNzRnJvbSwg
JnN1cHBvcnRzUHJvZmlsaW5nLCAmc3VwcG9ydHNSaWNoU291cmNlSW5mbywgJnNob3VsZEludGVy
cnVwdFNjcmlwdCwgJmphdmFTY3JpcHRFeHBlcmltZW50c0VuYWJsZWQgfTsKIAotSlNET01XaW5k
b3dCYXNlOjpKU0RPTVdpbmRvd0Jhc2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxET01XaW5kb3c+IHdpbmRvdywgSlNET01XaW5kb3dT
aGVsbCogc2hlbGwpCi0gICAgOiBKU0RPTUdsb2JhbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUsIHNoZWxsLT53b3JsZCgpLCAmc19nbG9iYWxPYmplY3RNZXRob2RUYWJsZSkKK0pTRE9NV2lu
ZG93QmFzZTo6SlNET01XaW5kb3dCYXNlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBh
c3NSZWZQdHI8RE9NV2luZG93PiB3aW5kb3csIEpTRE9NV2luZG93U2hlbGwqIHNoZWxsKQorICAg
IDogSlNET01HbG9iYWxPYmplY3Qodm0sIHN0cnVjdHVyZSwgc2hlbGwtPndvcmxkKCksICZzX2ds
b2JhbE9iamVjdE1ldGhvZFRhYmxlKQogICAgICwgbV9pbXBsKHdpbmRvdykKICAgICAsIG1fc2hl
bGwoc2hlbGwpCiB7CiB9CiAKLXZvaWQgSlNET01XaW5kb3dCYXNlOjpmaW5pc2hDcmVhdGlvbihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTRE9NV2luZG93U2hlbGwqIHNoZWxsKQordm9pZCBK
U0RPTVdpbmRvd0Jhc2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNET01XaW5kb3dTaGVsbCog
c2hlbGwpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgc2hlbGwpOwor
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBzaGVsbCk7CiAgICAgQVNTRVJUKGluaGVyaXRz
KCZzX2luZm8pKTsKIAogICAgIEdsb2JhbFByb3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxzW10gPSB7
CkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgSlNET01XaW5kb3dCYXNlOjp1cGRhdGVEb2N1bWVudCgp
CiB7CiAgICAgQVNTRVJUKG1faW1wbC0+ZG9jdW1lbnQoKSk7CiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gZ2xvYmFsRXhlYygpOwotICAgIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXModGhpcywg
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJkb2N1bWVudCIpLCB0b0pTKGV4
ZWMsIHRoaXMsIG1faW1wbC0+ZG9jdW1lbnQoKSksIERvbnREZWxldGUgfCBSZWFkT25seSk7Cisg
ICAgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyh0aGlzLCBleGVjLT52bSgpLCBJZGVudGlm
aWVyKGV4ZWMsICJkb2N1bWVudCIpLCB0b0pTKGV4ZWMsIHRoaXMsIG1faW1wbC0+ZG9jdW1lbnQo
KSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IEpTRE9NV2luZG93QmFzZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CkBAIC0xNzcs
MjEgKzE3NywyMSBAQCBKU0RPTVdpbmRvd1NoZWxsKiBKU0RPTVdpbmRvd0Jhc2U6OnNoZWxsCiAg
ICAgcmV0dXJuIG1fc2hlbGw7CiB9CiAKLUpTR2xvYmFsRGF0YSogSlNET01XaW5kb3dCYXNlOjpj
b21tb25KU0dsb2JhbERhdGEoKQorVk0qIEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBzdGF0aWMgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhID0gMDsKLSAgICBpZiAoIWdsb2JhbERhdGEpIHsKKyAgICBzdGF0aWMgVk0qIHZt
ID0gMDsKKyAgICBpZiAoIXZtKSB7CiAgICAgICAgIFNjcmlwdENvbnRyb2xsZXI6OmluaXRpYWxp
emVUaHJlYWRpbmcoKTsKLSAgICAgICAgZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3JlYXRl
TGVha2VkKExhcmdlSGVhcCkubGVha1JlZigpOworICAgICAgICB2bSA9IFZNOjpjcmVhdGVMZWFr
ZWQoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7CiAjaWZuZGVmIE5ERUJVRwotICAgICAgICBnbG9iYWxE
YXRhLT5leGNsdXNpdmVUaHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7CisgICAgICAgIHZtLT5leGNs
dXNpdmVUaHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7CiAjZW5kaWYKLSAgICAgICAgaW5pdE5vcm1h
bFdvcmxkQ2xpZW50RGF0YShnbG9iYWxEYXRhKTsKKyAgICAgICAgaW5pdE5vcm1hbFdvcmxkQ2xp
ZW50RGF0YSh2bSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGdsb2JhbERhdGE7CisgICAgcmV0dXJu
IHZtOwogfQogCiAvLyBKU0RPTUdsb2JhbE9iamVjdCogaXMgaWdub3JlZCwgYWNjZXNzaW5nIGEg
d2luZG93IGluIGFueSBjb250ZXh0IHdpbGwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzcs
OCArMzcsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgSlNET01XaW5kb3dCYXNl
IDogcHVibGljIEpTRE9NR2xvYmFsT2JqZWN0IHsKICAgICAgICAgdHlwZWRlZiBKU0RPTUdsb2Jh
bE9iamVjdCBCYXNlOwogICAgIHByb3RlY3RlZDoKLSAgICAgICAgSlNET01XaW5kb3dCYXNlKEpT
Qzo6SlNHbG9iYWxEYXRhJiwgSlNDOjpTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPERPTVdpbmRvdz4s
IEpTRE9NV2luZG93U2hlbGwqKTsKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkpT
R2xvYmFsRGF0YSYsIEpTRE9NV2luZG93U2hlbGwqKTsKKyAgICAgICAgSlNET01XaW5kb3dCYXNl
KEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFBhc3NSZWZQdHI8RE9NV2luZG93PiwgSlNET01X
aW5kb3dTaGVsbCopOworICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RP
TVdpbmRvd1NoZWxsKik7CiAKICAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsK
IApAQCAtNTMsOSArNTMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgc3RhdGlj
IGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAotICAgICAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEs
IDAsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Okdsb2JhbE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgMCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6R2xvYmFsT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0
YXRpYyBjb25zdCBKU0M6Okdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIHNfZ2xvYmFsT2JqZWN0TWV0
aG9kVGFibGU7CkBAIC02OCw3ICs2OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAg
ICBKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCgpIGNvbnN0OwogCi0gICAgICAgIHN0YXRpYyBKU0M6
OkpTR2xvYmFsRGF0YSogY29tbW9uSlNHbG9iYWxEYXRhKCk7CisgICAgICAgIHN0YXRpYyBKU0M6
OlZNKiBjb21tb25WTSgpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPERPTVdpbmRv
dz4gbV9pbXBsOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
V2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTYsNyAr
NDk2LDcgQEAgdm9pZCBKU0RPTVdpbmRvdzo6c2V0TG9jYXRpb24oRXhlY1N0YXRlKgogICAgICAg
ICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gYWN0aXZlRnJhbWUtPnNldHRpbmdzKCkpIHsKICAg
ICAgICAgICAgIGlmIChzZXR0aW5ncy0+dXNlc0Rhc2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0
eU1vZGUoKSAmJiAhYWN0aXZlRnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpIHsKICAgICAgICAgICAg
ICAgICBpZiAoQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4
ZWMsIGltcGwoKSkpCi0gICAgICAgICAgICAgICAgICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxE
YXRhKCksIElkZW50aWZpZXIoZXhlYywgImxvY2F0aW9uIiksIHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgImxvY2F0aW9u
IiksIHZhbHVlKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTU4NywxNCArNTg3LDE0IEBAIGlubGluZSB2b2lkIERpYWxvZ0hhbmRsZXI6OmRp
YWxvZ0NyZWF0ZWQKICAgICBtX2ZyYW1lID0gZGlhbG9nLT5mcmFtZSgpOwogICAgIC8vIEZJWE1F
OiBUaGlzIGxvb2tzIGxpa2UgYSBsZWFrIGJldHdlZW4gdGhlIG5vcm1hbCB3b3JsZCBhbmQgYW4g
aXNvbGF0ZWQKICAgICAvLyAgICAgICAgd29ybGQgaWYgZGlhbG9nQXJndW1lbnRzIGNvbWVzIGZy
b20gYW4gaXNvbGF0ZWQgd29ybGQuCi0gICAgSlNET01XaW5kb3cqIGdsb2JhbE9iamVjdCA9IHRv
SlNET01XaW5kb3cobV9mcmFtZS5nZXQoKSwgbm9ybWFsV29ybGQobV9leGVjLT5nbG9iYWxEYXRh
KCkpKTsKKyAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTVdpbmRvdyhtX2Zy
YW1lLmdldCgpLCBub3JtYWxXb3JsZChtX2V4ZWMtPnZtKCkpKTsKICAgICBpZiAoSlNWYWx1ZSBk
aWFsb2dBcmd1bWVudHMgPSBtX2V4ZWMtPmFyZ3VtZW50KDEpKQotICAgICAgICBnbG9iYWxPYmpl
Y3QtPnB1dERpcmVjdChtX2V4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihtX2V4ZWMsICJk
aWFsb2dBcmd1bWVudHMiKSwgZGlhbG9nQXJndW1lbnRzKTsKKyAgICAgICAgZ2xvYmFsT2JqZWN0
LT5wdXREaXJlY3QobV9leGVjLT52bSgpLCBJZGVudGlmaWVyKG1fZXhlYywgImRpYWxvZ0FyZ3Vt
ZW50cyIpLCBkaWFsb2dBcmd1bWVudHMpOwogfQogCiBpbmxpbmUgSlNWYWx1ZSBEaWFsb2dIYW5k
bGVyOjpyZXR1cm5WYWx1ZSgpIGNvbnN0CiB7Ci0gICAgSlNET01XaW5kb3cqIGdsb2JhbE9iamVj
dCA9IHRvSlNET01XaW5kb3cobV9mcmFtZS5nZXQoKSwgbm9ybWFsV29ybGQobV9leGVjLT5nbG9i
YWxEYXRhKCkpKTsKKyAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTVdpbmRv
dyhtX2ZyYW1lLmdldCgpLCBub3JtYWxXb3JsZChtX2V4ZWMtPnZtKCkpKTsKICAgICBpZiAoIWds
b2JhbE9iamVjdCkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgSWRlbnRpZmll
ciBpZGVudGlmaWVyKG1fZXhlYywgInJldHVyblZhbHVlIik7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcAkocmV2aXNpb24gMTQ4NjM4
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDE0ICs0NCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjb25z
dCBDbGFzc0luZm8gSlNET01XaW5kb3dTaGVsbDo6c19pbmZvID0geyAiSlNET01XaW5kb3dTaGVs
bCIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNET01XaW5kb3dT
aGVsbCkgfTsKIAogSlNET01XaW5kb3dTaGVsbDo6SlNET01XaW5kb3dTaGVsbChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKLSAgICA6IEJhc2UoKndvcmxkLT5n
bG9iYWxEYXRhKCksIHN0cnVjdHVyZSkKKyAgICA6IEJhc2UoKndvcmxkLT52bSgpLCBzdHJ1Y3R1
cmUpCiAgICAgLCBtX3dvcmxkKHdvcmxkKQogewogfQogCi12b2lkIEpTRE9NV2luZG93U2hlbGw6
OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUGFzc1JlZlB0cjxET01X
aW5kb3c+IHdpbmRvdykKK3ZvaWQgSlNET01XaW5kb3dTaGVsbDo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBQYXNzUmVmUHRyPERPTVdpbmRvdz4gd2luZG93KQogewotICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKGdsb2JhbERhdGEpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBB
U1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogICAgIHNldFdpbmRvdyh3aW5kb3cpOwogfQpAQCAt
NjEsMTEgKzYxLDExIEBAIHZvaWQgSlNET01XaW5kb3dTaGVsbDo6ZGVzdHJveShKU0NlbGwqIGMK
ICAgICBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd1NoZWxsKj4oY2VsbCktPkpTRE9NV2luZG93U2hl
bGw6On5KU0RPTVdpbmRvd1NoZWxsKCk7CiB9CiAKLXZvaWQgSlNET01XaW5kb3dTaGVsbDo6c2V0
V2luZG93KEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0RPTVdpbmRvdyogd2luZG93
KQordm9pZCBKU0RPTVdpbmRvd1NoZWxsOjpzZXRXaW5kb3coSlNDOjpWTSYgdm0sIEpTRE9NV2lu
ZG93KiB3aW5kb3cpCiB7CiAgICAgQVNTRVJUX0FSRyh3aW5kb3csIHdpbmRvdyk7Ci0gICAgc2V0
VGFyZ2V0KGdsb2JhbERhdGEsIHdpbmRvdyk7Ci0gICAgc3RydWN0dXJlKCktPnNldEdsb2JhbE9i
amVjdCgqSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLCB3aW5kb3cpOworICAgIHNl
dFRhcmdldCh2bSwgd2luZG93KTsKKyAgICBzdHJ1Y3R1cmUoKS0+c2V0R2xvYmFsT2JqZWN0KCpK
U0RPTVdpbmRvdzo6Y29tbW9uVk0oKSwgd2luZG93KTsKICAgICBnY0NvbnRyb2xsZXIoKS5nYXJi
YWdlQ29sbGVjdFNvb24oKTsKIH0KIApAQCAtNzcsMTMgKzc3LDEzIEBAIHZvaWQgSlNET01XaW5k
b3dTaGVsbDo6c2V0V2luZG93KFBhc3NSZWYKICAgICAvLyBFeHBsaWNpdGx5IHByb3RlY3QgdGhl
IGdsb2JhbCBvYmplY3QncyBwcm90b3R5cGUgc28gaXQgaXNuJ3QgY29sbGVjdGVkCiAgICAgLy8g
d2hlbiB3ZSBhbGxvY2F0ZSB0aGUgZ2xvYmFsIG9iamVjdC4gKE9uY2UgdGhlIGdsb2JhbCBvYmpl
Y3QgaXMgZnVsbHkKICAgICAvLyBjb25zdHJ1Y3RlZCwgaXQgY2FuIG1hcmsgaXRzIG93biBwcm90
b3R5cGUuKQotICAgIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlID0gSlNET01XaW5kb3dQ
cm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSgqSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpLCAwLCBqc051bGwoKSk7Ci0gICAgU3Ryb25nPEpTRE9NV2luZG93UHJvdG90eXBlPiBwcm90
b3R5cGUoKkpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSwgSlNET01XaW5kb3dQcm90
b3R5cGU6OmNyZWF0ZSgqSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLCAwLCBwcm90
b3R5cGVTdHJ1Y3R1cmUpKTsKKyAgICBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSA9IEpT
RE9NV2luZG93UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoKkpTRE9NV2luZG93Ojpjb21tb25W
TSgpLCAwLCBqc051bGwoKSk7CisgICAgU3Ryb25nPEpTRE9NV2luZG93UHJvdG90eXBlPiBwcm90
b3R5cGUoKkpTRE9NV2luZG93Ojpjb21tb25WTSgpLCBKU0RPTVdpbmRvd1Byb3RvdHlwZTo6Y3Jl
YXRlKCpKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSwgMCwgcHJvdG90eXBlU3RydWN0dXJlKSk7CiAK
LSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTRE9NV2luZG93OjpjcmVhdGVTdHJ1Y3R1cmUo
KkpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSwgMCwgcHJvdG90eXBlLmdldCgpKTsK
LSAgICBKU0RPTVdpbmRvdyoganNET01XaW5kb3cgPSBKU0RPTVdpbmRvdzo6Y3JlYXRlKCpKU0RP
TVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwgZG9tV2luZG93LCB0aGlz
KTsKLSAgICBwcm90b3R5cGUtPnN0cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3QoKkpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSwganNET01XaW5kb3cpOwotICAgIHNldFdpbmRvdygq
SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLCBqc0RPTVdpbmRvdyk7CisgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBKU0RPTVdpbmRvdzo6Y3JlYXRlU3RydWN0dXJlKCpKU0RPTVdp
bmRvdzo6Y29tbW9uVk0oKSwgMCwgcHJvdG90eXBlLmdldCgpKTsKKyAgICBKU0RPTVdpbmRvdyog
anNET01XaW5kb3cgPSBKU0RPTVdpbmRvdzo6Y3JlYXRlKCpKU0RPTVdpbmRvdzo6Y29tbW9uVk0o
KSwgc3RydWN0dXJlLCBkb21XaW5kb3csIHRoaXMpOworICAgIHByb3RvdHlwZS0+c3RydWN0dXJl
KCktPnNldEdsb2JhbE9iamVjdCgqSlNET01XaW5kb3c6OmNvbW1vblZNKCksIGpzRE9NV2luZG93
KTsKKyAgICBzZXRXaW5kb3coKkpTRE9NV2luZG93Ojpjb21tb25WTSgpLCBqc0RPTVdpbmRvdyk7
CiAgICAgQVNTRVJUKGpzRE9NV2luZG93LT5nbG9iYWxPYmplY3QoKSA9PSBqc0RPTVdpbmRvdyk7
CiAgICAgQVNTRVJUKHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkgPT0ganNET01XaW5kb3cpOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwu
aAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dTaGVsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAgICAg
ICBKU0RPTVdpbmRvdyogd2luZG93KCkgY29uc3QgeyByZXR1cm4gSlNDOjpqc0Nhc3Q8SlNET01X
aW5kb3cqPih0YXJnZXQoKSk7IH0KLSAgICAgICAgdm9pZCBzZXRXaW5kb3coSlNDOjpKU0dsb2Jh
bERhdGEmLCBKU0RPTVdpbmRvdyopOworICAgICAgICB2b2lkIHNldFdpbmRvdyhKU0M6OlZNJiwg
SlNET01XaW5kb3cqKTsKICAgICAgICAgdm9pZCBzZXRXaW5kb3coUGFzc1JlZlB0cjxET01XaW5k
b3c+KTsKIAogICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwpAQCAt
NTMsMjIgKzUzLDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0aWMgSlNE
T01XaW5kb3dTaGVsbCogY3JlYXRlKFBhc3NSZWZQdHI8RE9NV2luZG93PiB3aW5kb3csIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIERPTVdyYXBwZXJXb3JsZCogd29ybGQpIAogICAgICAgICB7
Ci0gICAgICAgICAgICBKU0M6OkhlYXAmIGhlYXAgPSBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9i
YWxEYXRhKCktPmhlYXA7CisgICAgICAgICAgICBKU0M6OkhlYXAmIGhlYXAgPSBKU0RPTVdpbmRv
dzo6Y29tbW9uVk0oKS0+aGVhcDsKICAgICAgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHNoZWxs
ID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU0RPTVdpbmRvd1NoZWxsPihoZWFw
KSkgSlNET01XaW5kb3dTaGVsbChzdHJ1Y3R1cmUsIHdvcmxkKTsKLSAgICAgICAgICAgIHNoZWxs
LT5maW5pc2hDcmVhdGlvbigqd29ybGQtPmdsb2JhbERhdGEoKSwgd2luZG93KTsKKyAgICAgICAg
ICAgIHNoZWxsLT5maW5pc2hDcmVhdGlvbigqd29ybGQtPnZtKCksIHdpbmRvdyk7CiAgICAgICAg
ICAgICByZXR1cm4gc2hlbGw7IAogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpIAorICAgICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkgCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERh
dGEsIDAsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6OlByb3h5VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCAwLCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpQcm94eVR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KIAogICAgICAgICBET01XcmFwcGVyV29y
bGQqIHdvcmxkKCkgeyByZXR1cm4gbV93b3JsZC5nZXQoKTsgfQogCiAgICAgcHJvdGVjdGVkOgog
ICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKEpTQzo6U3RydWN0dXJlKiwgRE9NV3JhcHBlcldvcmxk
Kik7Ci0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpKU0dsb2JhbERhdGEmLCBQYXNz
UmVmUHRyPERPTVdpbmRvdz4pOworICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0m
LCBQYXNzUmVmUHRyPERPTVdpbmRvdz4pOwogCiAgICAgICAgIFJlZlB0cjxET01XcmFwcGVyV29y
bGQ+IG1fd29ybGQ7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV3JhcHBlci5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdyYXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJs
aWM6CiAKIHByb3RlY3RlZDoKICAgICBKU0RPTVdyYXBwZXIoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSAKLSAgICAgICAgOiBKU0Rl
c3RydWN0aWJsZU9iamVjdChnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKQor
ICAgICAgICA6IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0KGdsb2JhbE9iamVjdC0+dm0oKSwgc3RydWN0
dXJlKQogICAgIHsKICAgICAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXZpY2VNb3Rpb25FdmVu
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
ZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZlbnRDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTYsMTggKzExNiwxOCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxEZXZpY2VNb3Rp
b25EYXRhOjpSb3RhCiBzdGF0aWMgSlNPYmplY3QqIGNyZWF0ZUFjY2VsZXJhdGlvbk9iamVjdChj
b25zdCBEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVyYXRpb24qIGFjY2VsZXJhdGlvbiwgRXhlY1N0
YXRlKiBleGVjKQogewogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVj
dChleGVjKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIElkZW50
aWZpZXIoZXhlYywgIngiKSwgYWNjZWxlcmF0aW9uLT5jYW5Qcm92aWRlWCgpID8ganNOdW1iZXIo
YWNjZWxlcmF0aW9uLT54KCkpIDoganNOdWxsKCkpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAieSIpLCBhY2NlbGVyYXRpb24tPmNh
blByb3ZpZGVZKCkgPyBqc051bWJlcihhY2NlbGVyYXRpb24tPnkoKSkgOiBqc051bGwoKSk7Ci0g
ICAgb2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMs
ICJ6IiksIGFjY2VsZXJhdGlvbi0+Y2FuUHJvdmlkZVooKSA/IGpzTnVtYmVyKGFjY2VsZXJhdGlv
bi0+eigpKSA6IGpzTnVsbCgpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBJ
ZGVudGlmaWVyKGV4ZWMsICJ4IiksIGFjY2VsZXJhdGlvbi0+Y2FuUHJvdmlkZVgoKSA/IGpzTnVt
YmVyKGFjY2VsZXJhdGlvbi0+eCgpKSA6IGpzTnVsbCgpKTsKKyAgICBvYmplY3QtPnB1dERpcmVj
dChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJ5IiksIGFjY2VsZXJhdGlvbi0+Y2FuUHJv
dmlkZVkoKSA/IGpzTnVtYmVyKGFjY2VsZXJhdGlvbi0+eSgpKSA6IGpzTnVsbCgpKTsKKyAgICBv
YmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJ6IiksIGFjY2Vs
ZXJhdGlvbi0+Y2FuUHJvdmlkZVooKSA/IGpzTnVtYmVyKGFjY2VsZXJhdGlvbi0+eigpKSA6IGpz
TnVsbCgpKTsKICAgICByZXR1cm4gb2JqZWN0OwogfQogCiBzdGF0aWMgSlNPYmplY3QqIGNyZWF0
ZVJvdGF0aW9uUmF0ZU9iamVjdChjb25zdCBEZXZpY2VNb3Rpb25EYXRhOjpSb3RhdGlvblJhdGUq
IHJvdGF0aW9uUmF0ZSwgRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTT2JqZWN0KiBvYmplY3Qg
PSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdChleGVj
LT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgImFscGhhIiksIHJvdGF0aW9uUmF0ZS0+
Y2FuUHJvdmlkZUFscGhhKCkgPyBqc051bWJlcihyb3RhdGlvblJhdGUtPmFscGhhKCkpIDoganNO
dWxsKCkpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRp
ZmllcihleGVjLCAiYmV0YSIpLCAgcm90YXRpb25SYXRlLT5jYW5Qcm92aWRlQmV0YSgpICA/IGpz
TnVtYmVyKHJvdGF0aW9uUmF0ZS0+YmV0YSgpKSAgOiBqc051bGwoKSk7Ci0gICAgb2JqZWN0LT5w
dXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJnYW1tYSIpLCBy
b3RhdGlvblJhdGUtPmNhblByb3ZpZGVHYW1tYSgpID8ganNOdW1iZXIocm90YXRpb25SYXRlLT5n
YW1tYSgpKSA6IGpzTnVsbCgpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBJ
ZGVudGlmaWVyKGV4ZWMsICJhbHBoYSIpLCByb3RhdGlvblJhdGUtPmNhblByb3ZpZGVBbHBoYSgp
ID8ganNOdW1iZXIocm90YXRpb25SYXRlLT5hbHBoYSgpKSA6IGpzTnVsbCgpKTsKKyAgICBvYmpl
Y3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJiZXRhIiksICByb3Rh
dGlvblJhdGUtPmNhblByb3ZpZGVCZXRhKCkgID8ganNOdW1iZXIocm90YXRpb25SYXRlLT5iZXRh
KCkpICA6IGpzTnVsbCgpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVu
dGlmaWVyKGV4ZWMsICJnYW1tYSIpLCByb3RhdGlvblJhdGUtPmNhblByb3ZpZGVHYW1tYSgpID8g
anNOdW1iZXIocm90YXRpb25SYXRlLT5nYW1tYSgpKSA6IGpzTnVsbCgpKTsKICAgICByZXR1cm4g
b2JqZWN0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25h
cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlv
bmFyeS5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRGljdGlvbmFyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lk
IEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVlKEV4ZWNTdGF0CiAKIHZvaWQgSlNEaWN0aW9uYXJ5
Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBTY3JpcHRWYWx1
ZSYgcmVzdWx0KQogewotICAgIHJlc3VsdCA9IFNjcmlwdFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEo
KSwgdmFsdWUpOworICAgIHJlc3VsdCA9IFNjcmlwdFZhbHVlKGV4ZWMtPnZtKCksIHZhbHVlKTsK
IH0KIAogdm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUsIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+JiByZXN1bHQpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaAkocmV2aXNpb24gMTQ4
NjM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgICAgICA6IG1fZXhlYyhleGVj
KQogICAgIHsKICAgICAgICAgaWYgKGV4ZWMgJiYgaW5pdGlhbGl6ZXJPYmplY3QpCi0gICAgICAg
ICAgICBtX2luaXRpYWxpemVyT2JqZWN0ID0gSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4oZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBpbml0aWFsaXplck9iamVjdCk7CisgICAgICAgICAgICBtX2luaXRp
YWxpemVyT2JqZWN0ID0gSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4oZXhlYy0+dm0oKSwgaW5p
dGlhbGl6ZXJPYmplY3QpOwogICAgIH0KIAogICAgIC8vIFJldHVybnMgZmFsc2UgaWYgYW55IGV4
Y2VwdGlvbnMgd2VyZSB0aHJvd24sIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcHJvcGVydHkg
d2FzIGZvdW5kLgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JI
YW5kbGVyLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNFcnJvckhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHZv
aWQgSlNFcnJvckhhbmRsZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEUKIAogICAgIEVycm9yRXZlbnQq
IGVycm9yRXZlbnQgPSBzdGF0aWNfY2FzdDxFcnJvckV2ZW50Kj4oZXZlbnQpOwogCi0gICAgSlNM
b2NrSG9sZGVyIGxvY2soc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+Z2xvYmFsRGF0YSgpKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhzY3JpcHRFeGVjdXRpb25Db250ZXh0LT52bSgpKTsKIAogICAg
IEpTT2JqZWN0KiBqc0Z1bmN0aW9uID0gdGhpcy0+anNGdW5jdGlvbihzY3JpcHRFeGVjdXRpb25D
b250ZXh0KTsKICAgICBpZiAoIWpzRnVuY3Rpb24pCkBAIC04OSw4ICs4OSw4IEBAIHZvaWQgSlNF
cnJvckhhbmRsZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEUKICAgICAgICAgYXJncy5hcHBlbmQoanNT
dHJpbmdXaXRoQ2FjaGUoZXhlYywgZXJyb3JFdmVudC0+ZmlsZW5hbWUoKSkpOwogICAgICAgICBh
cmdzLmFwcGVuZChqc051bWJlcihlcnJvckV2ZW50LT5saW5lbm8oKSkpOwogCi0gICAgICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpOwotICAg
ICAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUoZ2xvYmFsRGF0
YSwgZ2xvYmFsRGF0YS5keW5hbWljR2xvYmFsT2JqZWN0ID8gZ2xvYmFsRGF0YS5keW5hbWljR2xv
YmFsT2JqZWN0IDogZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgICAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2Nv
cGUodm0sIHZtLmR5bmFtaWNHbG9iYWxPYmplY3QgPyB2bS5keW5hbWljR2xvYmFsT2JqZWN0IDog
Z2xvYmFsT2JqZWN0KTsKIAogICAgICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGdsb2JhbE9iamVj
dC0+bWV0aG9kVGFibGUoKS0+dG9UaGlzT2JqZWN0KGdsb2JhbE9iamVjdCwgZXhlYyk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAko
cmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExp
c3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCB2b2lkIEpTRXZlbnRM
aXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0CiAgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250
ZXh0IHx8IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzSlNFeGVjdXRpb25Gb3JiaWRkZW4oKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC0+Z2xvYmFsRGF0YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhzY3JpcHRFeGVj
dXRpb25Db250ZXh0LT52bSgpKTsKIAogICAgIEpTT2JqZWN0KiBqc0Z1bmN0aW9uID0gdGhpcy0+
anNGdW5jdGlvbihzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKICAgICBpZiAoIWpzRnVuY3Rpb24p
CkBAIC0xMTksOCArMTE5LDggQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNj
cmlwdAogICAgICAgICBFdmVudCogc2F2ZWRFdmVudCA9IGdsb2JhbE9iamVjdC0+Y3VycmVudEV2
ZW50KCk7CiAgICAgICAgIGdsb2JhbE9iamVjdC0+c2V0Q3VycmVudEV2ZW50KGV2ZW50KTsKIAot
ICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBnbG9iYWxPYmplY3QtPmdsb2JhbERh
dGEoKTsKLSAgICAgICAgRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3Bl
KGdsb2JhbERhdGEsIGdsb2JhbERhdGEuZHluYW1pY0dsb2JhbE9iamVjdCA/IGdsb2JhbERhdGEu
ZHluYW1pY0dsb2JhbE9iamVjdCA6IGdsb2JhbE9iamVjdCk7CisgICAgICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIGdsb2Jh
bE9iamVjdFNjb3BlKHZtLCB2bS5keW5hbWljR2xvYmFsT2JqZWN0ID8gdm0uZHluYW1pY0dsb2Jh
bE9iamVjdCA6IGdsb2JhbE9iamVjdCk7CiAKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uQ29va2llIGNvb2tpZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6aW5zdHJ1bWVudEZ1bmN0
aW9uQ2FsbChzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjYWxsVHlwZSwgY2FsbERhdGEpOwogCkBA
IC0xMzYsNyArMTM2LDcgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlw
dAogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgICAgICBpZiAoc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+aXNXb3JrZXJDb250ZXh0KCkpIHsKICAgICAgICAgICAgIGJvb2wgdGVybWluYXRvckNhdXNl
ZEV4Y2VwdGlvbiA9IChleGVjLT5oYWRFeGNlcHRpb24oKSAmJiBpc1Rlcm1pbmF0ZWRFeGVjdXRp
b25FeGNlcHRpb24oZXhlYy0+ZXhjZXB0aW9uKCkpKTsKLSAgICAgICAgICAgIGlmICh0ZXJtaW5h
dG9yQ2F1c2VkRXhjZXB0aW9uIHx8IGdsb2JhbERhdGEudGVybWluYXRvci5zaG91bGRUZXJtaW5h
dGUoKSkKKyAgICAgICAgICAgIGlmICh0ZXJtaW5hdG9yQ2F1c2VkRXhjZXB0aW9uIHx8IHZtLnRl
cm1pbmF0b3Iuc2hvdWxkVGVybWluYXRlKCkpCiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
V29ya2VyQ29udGV4dCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLT5zY3JpcHQoKS0+Zm9yYmlk
RXhlY3V0aW9uKCk7CiAgICAgICAgIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Niw3ICs1Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgRE9NV3JhcHBlcldv
cmxkKiBpc29sYXRlZFdvcmxkKCkgY29uc3QgeyByZXR1cm4gbV9pc29sYXRlZFdvcmxkLmdldCgp
OyB9CiAKICAgICAgICAgSlNDOjpKU09iamVjdCogd3JhcHBlcigpIGNvbnN0IHsgcmV0dXJuIG1f
d3JhcHBlci5nZXQoKTsgfQotICAgICAgICB2b2lkIHNldFdyYXBwZXIoSlNDOjpKU0dsb2JhbERh
dGEmLCBKU0M6OkpTT2JqZWN0KiB3cmFwcGVyKSBjb25zdCB7IG1fd3JhcHBlciA9IEpTQzo6UGFz
c1dlYWs8SlNDOjpKU09iamVjdD4od3JhcHBlcik7IH0KKyAgICAgICAgdm9pZCBzZXRXcmFwcGVy
KEpTQzo6Vk0mLCBKU0M6OkpTT2JqZWN0KiB3cmFwcGVyKSBjb25zdCB7IG1fd3JhcHBlciA9IEpT
Qzo6UGFzc1dlYWs8SlNDOjpKU09iamVjdD4od3JhcHBlcik7IH0KIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIHZpcnR1YWwgSlNDOjpKU09iamVjdCogaW5pdGlhbGl6ZUpTRnVuY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCopIGNvbnN0OwpAQCAtODAsNyArODAsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIC8vIGluaXRpYWxpemVKU0Z1bmN0aW9uIGNhbiB0cmlnZ2VyIGNvZGUg
dGhhdCBkZWxldGVzIHRoaXMgZXZlbnQgbGlzdGVuZXIKICAgICAgICAgLy8gYmVmb3JlIHdlJ3Jl
IGRvbmUuIEl0IHNob3VsZCBhbHdheXMgcmV0dXJuIDAgaW4gdGhpcyBjYXNlLgogICAgICAgICBS
ZWZQdHI8SlNFdmVudExpc3RlbmVyPiBwcm90ZWN0KGNvbnN0X2Nhc3Q8SlNFdmVudExpc3RlbmVy
Kj4odGhpcykpOwotICAgICAgICBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiB3cmFwcGVyKCpt
X2lzb2xhdGVkV29ybGQtPmdsb2JhbERhdGEoKSwgbV93cmFwcGVyLmdldCgpKTsKKyAgICAgICAg
SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4gd3JhcHBlcigqbV9pc29sYXRlZFdvcmxkLT52bSgp
LCBtX3dyYXBwZXIuZ2V0KCkpOwogCiAgICAgICAgIGlmICghbV9qc0Z1bmN0aW9uKSB7CiAgICAg
ICAgICAgICBKU0M6OkpTT2JqZWN0KiBmdW5jdGlvbiA9IGluaXRpYWxpemVKU0Z1bmN0aW9uKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIEpTVmFsdWUgSlNIVE1MRG9jdW1lbnQ6Om5hbWVH
ZXR0ZXIoRXhlY1MKIEpTVmFsdWUgSlNIVE1MRG9jdW1lbnQ6OmFsbChFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0CiB7CiAgICAgLy8gSWYgImFsbCIgaGFzIGJlZW4gb3ZlcndyaXR0ZW4sIHJldHVybiB0
aGUgb3ZlcndyaXR0ZW4gdmFsdWUKLSAgICBKU1ZhbHVlIHYgPSBnZXREaXJlY3QoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJhbGwiKSk7CisgICAgSlNWYWx1ZSB2ID0gZ2V0
RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgImFsbCIpKTsKICAgICBpZiAodikK
ICAgICAgICAgcmV0dXJuIHY7CiAKQEAgLTk1LDcgKzk1LDcgQEAgSlNWYWx1ZSBKU0hUTUxEb2N1
bWVudDo6YWxsKEV4ZWNTdGF0ZSogZQogdm9pZCBKU0hUTUxEb2N1bWVudDo6c2V0QWxsKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICAvLyBBZGQgImFsbCIgdG8gdGhlIHBy
b3BlcnR5IG1hcC4KLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVy
KGV4ZWMsICJhbGwiKSwgdmFsdWUpOworICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlm
aWVyKGV4ZWMsICJhbGwiKSwgdmFsdWUpOwogfQogCiAvLyBDdXN0b20gZnVuY3Rpb25zCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBs
YXRlRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU2LDcgKzU2LDcgQEAgSlNWYWx1ZSBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OmNvbnRl
bnQoRQogCiAgICAgd3JhcHBlciA9IENSRUFURV9ET01fV1JBUFBFUihleGVjLCBnbG9iYWxPYmpl
Y3QoKSwgRG9jdW1lbnRGcmFnbWVudCwgY29udGVudCk7CiAgICAgUHJpdmF0ZU5hbWUgcHJvcGVy
dHlOYW1lOwotICAgIGNvbnN0X2Nhc3Q8SlNIVE1MVGVtcGxhdGVFbGVtZW50Kj4odGhpcyktPnB1
dERpcmVjdChnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHdyYXBw
ZXIpOworICAgIGNvbnN0X2Nhc3Q8SlNIVE1MVGVtcGxhdGVFbGVtZW50Kj4odGhpcyktPnB1dERp
cmVjdChnbG9iYWxPYmplY3QoKS0+dm0oKSwgcHJvcGVydHlOYW1lLCB3cmFwcGVyKTsKICAgICBy
ZXR1cm4gd3JhcHBlcjsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNI
aXN0b3J5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hpc3RvcnlDdXN0b20uY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODMs
NyArMTgzLDcgQEAgSlNWYWx1ZSBKU0hpc3Rvcnk6OnN0YXRlKEV4ZWNTdGF0ZSAqZXhlYwogCiAg
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZCA9IGhpc3RvcnktPnN0
YXRlKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBzZXJpYWxpemVkID8gc2VyaWFsaXplZC0+ZGVz
ZXJpYWxpemUoZXhlYywgZ2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7Ci0gICAgY29uc3Rf
Y2FzdDxKU0hpc3RvcnkqPih0aGlzKS0+bV9zdGF0ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzLCByZXN1bHQpOworICAgIGNvbnN0X2Nhc3Q8SlNIaXN0b3J5Kj4odGhpcyktPm1fc3RhdGUu
c2V0KGV4ZWMtPnZtKCksIHRoaXMsIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0
b3IuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0ltYWdlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHZv
aWQgSlNJbWFnZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbigKIHsKICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihnbG9iYWxPYmplY3QpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7
Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
LnByb3RvdHlwZSwgSlNIVE1MSW1hZ2VFbGVtZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2Jh
bE9iamVjdCksIE5vbmUpOworICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkucHJvdG90eXBlLCBKU0hUTUxJbWFnZUVsZW1lbnRQcm90b3R5cGU6OnNlbGYoZXhl
YywgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnN0cnVjdEltYWdlKEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAx
NDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMzYsOSArMzYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQorICAgICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSlNDOjpTdHJ1
Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAg
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8pOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJ
bmZvIHNfaW5mbzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRh
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lt
YWdlRGF0YUN1c3RvbS5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyAr
NDYsNyBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAgCiAg
ICAgd3JhcHBlciA9IENSRUFURV9ET01fV1JBUFBFUihleGVjLCBnbG9iYWxPYmplY3QsIEltYWdl
RGF0YSwgaW1hZ2VEYXRhKTsKICAgICBJZGVudGlmaWVyIGRhdGFOYW1lKGV4ZWMsICJkYXRhIik7
Ci0gICAgd3JhcHBlci0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZGF0YU5hbWUsIHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbWFnZURhdGEtPmRhdGEoKSksIERvbnREZWxldGUgfCBS
ZWFkT25seSk7CisgICAgd3JhcHBlci0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGRhdGFOYW1lLCB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW1hZ2VEYXRhLT5kYXRhKCkpLCBEb250RGVsZXRlIHwg
UmVhZE9ubHkpOwogICAgIGV4ZWMtPmhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KGltYWdl
RGF0YS0+ZGF0YSgpLT5sZW5ndGgoKSk7CiAgICAgCiAgICAgcmV0dXJuIHdyYXBwZXI7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNj
cmlwdEhvc3RDdXN0b20uY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg0LDEwICs4NCwxMCBAQCBOb2RlKiBJbmplY3RlZFNjcmlwdEhvc3Q6OnNjcmlwdFZhbHVl
QXNOCiBTY3JpcHRWYWx1ZSBJbmplY3RlZFNjcmlwdEhvc3Q6Om5vZGVBc1NjcmlwdFZhbHVlKFNj
cmlwdFN0YXRlKiBzdGF0ZSwgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIXNob3VsZEFsbG93QWNj
ZXNzVG9Ob2RlKHN0YXRlLCBub2RlKSkKLSAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKHN0YXRl
LT5nbG9iYWxEYXRhKCksIGpzTnVsbCgpKTsKKyAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKHN0
YXRlLT52bSgpLCBqc051bGwoKSk7CiAKICAgICBKU0xvY2tIb2xkZXIgbG9jayhzdGF0ZSk7Ci0g
ICAgcmV0dXJuIFNjcmlwdFZhbHVlKHN0YXRlLT5nbG9iYWxEYXRhKCksIHRvSlMoc3RhdGUsIGRl
cHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoc3RhdGUpLCBub2RlKSk7CisgICAgcmV0
dXJuIFNjcmlwdFZhbHVlKHN0YXRlLT52bSgpLCB0b0pTKHN0YXRlLCBkZXByZWNhdGVkR2xvYmFs
T2JqZWN0Rm9yUHJvdG90eXBlKHN0YXRlKSwgbm9kZSkpOwogfQogCiBKU1ZhbHVlIEpTSW5qZWN0
ZWRTY3JpcHRIb3N0OjppbnNwZWN0ZWRPYmplY3QoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTc3LDE3
ICsxNzcsMTcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6ZnVuY3Rpb25EZQogICAg
IFN0cmluZyBzY3JpcHRJZCA9IFN0cmluZzo6bnVtYmVyKHNvdXJjZUNvZGUtPnByb3ZpZGVyKCkt
PmFzSUQoKSk7CiAKICAgICBKU09iamVjdCogbG9jYXRpb24gPSBjb25zdHJ1Y3RFbXB0eU9iamVj
dChleGVjKTsKLSAgICBsb2NhdGlvbi0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRl
bnRpZmllcihleGVjLCAibGluZU51bWJlciIpLCBqc051bWJlcihsaW5lTnVtYmVyKSk7Ci0gICAg
bG9jYXRpb24tPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywg
InNjcmlwdElkIiksIGpzU3RyaW5nKGV4ZWMsIHNjcmlwdElkKSk7CisgICAgbG9jYXRpb24tPnB1
dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJsaW5lTnVtYmVyIiksIGpzTnVt
YmVyKGxpbmVOdW1iZXIpKTsKKyAgICBsb2NhdGlvbi0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElk
ZW50aWZpZXIoZXhlYywgInNjcmlwdElkIiksIGpzU3RyaW5nKGV4ZWMsIHNjcmlwdElkKSk7CiAK
ICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAg
cmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJs
b2NhdGlvbiIpLCBsb2NhdGlvbik7CisgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwg
SWRlbnRpZmllcihleGVjLCAibG9jYXRpb24iKSwgbG9jYXRpb24pOwogICAgIFN0cmluZyBuYW1l
ID0gZnVuY3Rpb24tPm5hbWUoZXhlYyk7CiAgICAgaWYgKCFuYW1lLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMs
ICJuYW1lIiksIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIG5hbWUpKTsKKyAgICAgICAgcmVzdWx0
LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAibmFtZSIpLCBqc1N0cmlu
Z1dpdGhDYWNoZShleGVjLCBuYW1lKSk7CiAgICAgU3RyaW5nIGRpc3BsYXlOYW1lID0gZnVuY3Rp
b24tPmRpc3BsYXlOYW1lKGV4ZWMpOwogICAgIGlmICghZGlzcGxheU5hbWUuaXNFbXB0eSgpKQot
ICAgICAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIo
ZXhlYywgImRpc3BsYXlOYW1lIiksIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGRpc3BsYXlOYW1l
KSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhl
YywgImRpc3BsYXlOYW1lIiksIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGRpc3BsYXlOYW1lKSk7
CiAgICAgLy8gRklYTUU6IHByb3ZpZGUgZnVuY3Rpb24gc2NvcGUgZGF0YSBpbiAic2NvcGVzUmF3
IiBwcm9wZXJ0eSB3aGVuIEpTQyBzdXBwb3J0cyBpdC4KICAgICAvLyAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3MTkyCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAg
LTIxNiw4ICsyMTYsOCBAQCBzdGF0aWMgSlNBcnJheSogZ2V0SlNMaXN0ZW5lckZ1bmN0aW9ucyhF
CiAgICAgICAgIGlmICghZnVuY3Rpb24pCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
SlNPYmplY3QqIGxpc3RlbmVyRW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAg
ICAgICAgbGlzdGVuZXJFbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRp
ZmllcihleGVjLCAibGlzdGVuZXIiKSwgZnVuY3Rpb24pOwotICAgICAgICBsaXN0ZW5lckVudHJ5
LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJ1c2VDYXB0
dXJlIiksIGpzQm9vbGVhbihsaXN0ZW5lckluZm8uZXZlbnRMaXN0ZW5lclZlY3RvcltpXS51c2VD
YXB0dXJlKSk7CisgICAgICAgIGxpc3RlbmVyRW50cnktPnB1dERpcmVjdChleGVjLT52bSgpLCBJ
ZGVudGlmaWVyKGV4ZWMsICJsaXN0ZW5lciIpLCBmdW5jdGlvbik7CisgICAgICAgIGxpc3RlbmVy
RW50cnktPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJ1c2VDYXB0dXJl
IiksIGpzQm9vbGVhbihsaXN0ZW5lckluZm8uZXZlbnRMaXN0ZW5lclZlY3RvcltpXS51c2VDYXB0
dXJlKSk7CiAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgb3V0cHV0SW5kZXgr
KywgSlNWYWx1ZShsaXN0ZW5lckVudHJ5KSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBA
IC0yNDcsNyArMjQ3LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0RXZlbnRM
aQogICAgICAgICBpZiAoIWxpc3RlbmVycy0+bGVuZ3RoKCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgQXRvbWljU3RyaW5nIGV2ZW50VHlwZSA9IGxpc3RlbmVyc0FycmF5W2ldLmV2
ZW50VHlwZTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJ
ZGVudGlmaWVyKGV4ZWMsIGV2ZW50VHlwZS5pbXBsKCkpLCBKU1ZhbHVlKGxpc3RlbmVycykpOwor
ICAgICAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsIGV2
ZW50VHlwZS5pbXBsKCkpLCBKU1ZhbHVlKGxpc3RlbmVycykpOwogICAgIH0KIAogICAgIHJldHVy
biByZXN1bHQ7CkBAIC0yNTYsOCArMjU2LDggQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9z
dDo6Z2V0RXZlbnRMaQogSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdChFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7Ci0g
ICAgICAgIFNjcmlwdFZhbHVlIG9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmFyZ3Vt
ZW50KDApKTsKLSAgICAgICAgU2NyaXB0VmFsdWUgaGludHMoZXhlYy0+Z2xvYmFsRGF0YSgpLCBl
eGVjLT5hcmd1bWVudCgxKSk7CisgICAgICAgIFNjcmlwdFZhbHVlIG9iamVjdChleGVjLT52bSgp
LCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgICAgIFNjcmlwdFZhbHVlIGhpbnRzKGV4ZWMtPnZt
KCksIGV4ZWMtPmFyZ3VtZW50KDEpKTsKICAgICAgICAgaW1wbCgpLT5pbnNwZWN0SW1wbChvYmpl
Y3QudG9JbnNwZWN0b3JWYWx1ZShleGVjKSwgaGludHMudG9JbnNwZWN0b3JWYWx1ZShleGVjKSk7
CiAgICAgfQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDE0
ODYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsMTIgKzExOCwxMiBAQCBKU09iamVjdCogSlNMYXp5
RXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6CiAgICAgICAgICAgICAvLyBFbnN1cmUgdGhhdCAnbm9k
ZScgaGFzIGEgSmF2YVNjcmlwdCB3cmFwcGVyIHRvIG1hcmsgdGhlIGV2ZW50IGxpc3RlbmVyIHdl
J3JlIGNyZWF0aW5nLgogICAgICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAg
ICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHBhc3MgdGhlIGdsb2JhbCBvYmplY3QgYXNzb2NpYXRl
ZCB3aXRoIHRoZSBub2RlCi0gICAgICAgICAgICBzZXRXcmFwcGVyKGV4ZWMtPmdsb2JhbERhdGEo
KSwgYXNPYmplY3QodG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIG1fb3JpZ2luYWxOb2RlKSkpOwor
ICAgICAgICAgICAgc2V0V3JhcHBlcihleGVjLT52bSgpLCBhc09iamVjdCh0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCwgbV9vcmlnaW5hbE5vZGUpKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBB
ZGQgdGhlIGV2ZW50J3MgaG9tZSBlbGVtZW50IHRvIHRoZSBzY29wZQogICAgICAgICAvLyAoYW5k
IHRoZSBkb2N1bWVudCwgYW5kIHRoZSBmb3JtIC0gc2VlIEpTSFRNTEVsZW1lbnQ6OmV2ZW50SGFu
ZGxlclNjb3BlKQotICAgICAgICBsaXN0ZW5lckFzRnVuY3Rpb24tPnNldFNjb3BlKGV4ZWMtPmds
b2JhbERhdGEoKSwganNDYXN0PEpTTm9kZSo+KHdyYXBwZXIoKSktPnB1c2hFdmVudEhhbmRsZXJT
Y29wZShleGVjLCBsaXN0ZW5lckFzRnVuY3Rpb24tPnNjb3BlKCkpKTsKKyAgICAgICAgbGlzdGVu
ZXJBc0Z1bmN0aW9uLT5zZXRTY29wZShleGVjLT52bSgpLCBqc0Nhc3Q8SlNOb2RlKj4od3JhcHBl
cigpKS0+cHVzaEV2ZW50SGFuZGxlclNjb3BlKGV4ZWMsIGxpc3RlbmVyQXNGdW5jdGlvbi0+c2Nv
cGUoKSkpOwogICAgIH0KICAgICByZXR1cm4ganNGdW5jdGlvbjsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2
ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBKU1ZhbHVlIEpT
TWVzc2FnZUV2ZW50OjpkYXRhKEV4ZWNTdGF0ZSogCiAgICAgfQogCiAgICAgLy8gU2F2ZSB0aGUg
cmVzdWx0IHNvIHdlIGRvbid0IGhhdmUgdG8gZGVzZXJpYWxpemUgdGhlIHZhbHVlIGFnYWluLgot
ICAgIGNvbnN0X2Nhc3Q8SlNNZXNzYWdlRXZlbnQqPih0aGlzKS0+bV9kYXRhLnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIHJlc3VsdCk7CisgICAgY29uc3RfY2FzdDxKU01lc3NhZ2VFdmVu
dCo+KHRoaXMpLT5tX2RhdGEuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIHJlc3VsdCk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIApAQCAtMTE3LDEzICsxMTcsMTMgQEAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBoYW5kbGVJbml0TWVzc2FnZUV2ZQogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgU2NyaXB0VmFs
dWUgZGF0YUFyZyA9IFNjcmlwdFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+YXJndW1l
bnQoMykpOworICAgIFNjcmlwdFZhbHVlIGRhdGFBcmcgPSBTY3JpcHRWYWx1ZShleGVjLT52bSgp
LCBleGVjLT5hcmd1bWVudCgzKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIE1lc3NhZ2VFdmVudCogZXZlbnQgPSBz
dGF0aWNfY2FzdDxNZXNzYWdlRXZlbnQqPihqc0V2ZW50LT5pbXBsKCkpOwogICAgIGV2ZW50LT5p
bml0TWVzc2FnZUV2ZW50KHR5cGVBcmcsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZywgZGF0
YUFyZywgb3JpZ2luQXJnLCBsYXN0RXZlbnRJZEFyZywgc291cmNlQXJnLCBtZXNzYWdlUG9ydHMu
cmVsZWFzZSgpKTsKLSAgICBqc0V2ZW50LT5tX2RhdGEuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
anNFdmVudCwgZGF0YUFyZy5qc1ZhbHVlKCkpOworICAgIGpzRXZlbnQtPm1fZGF0YS5zZXQoZXhl
Yy0+dm0oKSwganNFdmVudCwgZGF0YUFyZy5qc1ZhbHVlKCkpOwogICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9u
Q2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TXV0YXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTXV0YXRpb25DYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3
LDcgKzU3LDcgQEAgdm9pZCBKU011dGF0aW9uQ2FsbGJhY2s6OmNhbGwoY29uc3QgVmVjdAogCiAg
ICAgUmVmUHRyPEpTTXV0YXRpb25DYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9j
a0hvbGRlciBsb2NrKG1faXNvbGF0ZWRXb3JsZC0+Z2xvYmFsRGF0YSgpKTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhtX2lzb2xhdGVkV29ybGQtPnZtKCkpOwogCiAgICAgaWYgKCFtX2NhbGxiYWNr
KQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011
dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDE0ODYzOCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBKU011dGF0aW9uTwogICAgIFJlZlB0cjxKU011dGF0aW9uQ2FsbGJhY2s+IGNhbGxi
YWNrID0gSlNNdXRhdGlvbkNhbGxiYWNrOjpjcmVhdGUob2JqZWN0LCBqc0NvbnN0cnVjdG9yLT5n
bG9iYWxPYmplY3QoKSk7CiAgICAgSlNPYmplY3QqIGpzT2JzZXJ2ZXIgPSBhc09iamVjdCh0b0pT
KGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBNdXRhdGlvbk9ic2VydmVyOjpj
cmVhdGUoY2FsbGJhY2sucmVsZWFzZSgpKSkpOwogICAgIFByaXZhdGVOYW1lIHByb3BlcnR5TmFt
ZTsKLSAgICBqc09ic2VydmVyLT5wdXREaXJlY3QoanNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBvYmplY3QpOworICAgIGpzT2JzZXJ2ZXIt
PnB1dERpcmVjdChqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKS0+dm0oKSwgcHJvcGVydHlO
YW1lLCBvYmplY3QpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNPYnNlcnZlcik7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmls
dGVyQ29uZGl0aW9uLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAK
LUpTTm9kZUZpbHRlckNvbmRpdGlvbjo6SlNOb2RlRmlsdGVyQ29uZGl0aW9uKEpTR2xvYmFsRGF0
YSYsIE5vZGVGaWx0ZXIqIG93bmVyLCBKU1ZhbHVlIGZpbHRlcikKK0pTTm9kZUZpbHRlckNvbmRp
dGlvbjo6SlNOb2RlRmlsdGVyQ29uZGl0aW9uKFZNJiwgTm9kZUZpbHRlciogb3duZXIsIEpTVmFs
dWUgZmlsdGVyKQogICAgIDogbV9maWx0ZXIoZmlsdGVyLmlzT2JqZWN0KCkgPyBQYXNzV2VhazxK
U09iamVjdD4oanNDYXN0PEpTT2JqZWN0Kj4oZmlsdGVyKSwgJm1fd2Vha093bmVyLCBvd25lcikg
OiBudWxscHRyKQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2Rl
RmlsdGVyQ29uZGl0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCwxMyArMzQsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgSlNO
b2RlRmlsdGVyQ29uZGl0aW9uIDogcHVibGljIE5vZGVGaWx0ZXJDb25kaXRpb24gewogICAgIHB1
YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNOb2RlRmlsdGVyQ29uZGl0aW9uPiBj
cmVhdGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE5vZGVGaWx0ZXIqIG93bmVyLCBK
U0M6OkpTVmFsdWUgZmlsdGVyKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU05vZGVGaWx0
ZXJDb25kaXRpb24+IGNyZWF0ZShKU0M6OlZNJiB2bSwgTm9kZUZpbHRlciogb3duZXIsIEpTQzo6
SlNWYWx1ZSBmaWx0ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSlNOb2RlRmlsdGVyQ29uZGl0aW9uKGdsb2JhbERhdGEsIG93bmVyLCBmaWx0ZXIpKTsKKyAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSlNOb2RlRmlsdGVyQ29uZGl0aW9uKHZtLCBv
d25lciwgZmlsdGVyKSk7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEpTTm9k
ZUZpbHRlckNvbmRpdGlvbihKU0M6OkpTR2xvYmFsRGF0YSYsIE5vZGVGaWx0ZXIqIG93bmVyLCBK
U0M6OkpTVmFsdWUgZmlsdGVyKTsKKyAgICAgICAgSlNOb2RlRmlsdGVyQ29uZGl0aW9uKEpTQzo6
Vk0mLCBOb2RlRmlsdGVyKiBvd25lciwgSlNDOjpKU1ZhbHVlIGZpbHRlcik7CiAKICAgICAgICAg
dmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKFNjcmlwdFN0YXRlKiwgTm9kZSopIGNvbnN0OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3Rv
bS5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUZpbHRlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEzICs0NiwxMyBAQCB2
b2lkIEpTTm9kZUZpbHRlcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqCiAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KHRoaXNPYmplY3QtPmltcGwoKSk7CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZUZpbHRl
cj4gdG9Ob2RlRmlsdGVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSB2YWx1ZSkK
K1Bhc3NSZWZQdHI8Tm9kZUZpbHRlcj4gdG9Ob2RlRmlsdGVyKFZNJiB2bSwgSlNWYWx1ZSB2YWx1
ZSkKIHsKICAgICBpZiAodmFsdWUuaW5oZXJpdHMoJkpTTm9kZUZpbHRlcjo6c19pbmZvKSkKICAg
ICAgICAgcmV0dXJuIGpzQ2FzdDxKU05vZGVGaWx0ZXIqPihhc09iamVjdCh2YWx1ZSkpLT5pbXBs
KCk7CiAKICAgICBSZWZQdHI8Tm9kZUZpbHRlcj4gcmVzdWx0ID0gTm9kZUZpbHRlcjo6Y3JlYXRl
KCk7Ci0gICAgcmVzdWx0LT5zZXRDb25kaXRpb24oSlNOb2RlRmlsdGVyQ29uZGl0aW9uOjpjcmVh
dGUoZ2xvYmFsRGF0YSwgcmVzdWx0LmdldCgpLCB2YWx1ZSkpOworICAgIHJlc3VsdC0+c2V0Q29u
ZGl0aW9uKEpTTm9kZUZpbHRlckNvbmRpdGlvbjo6Y3JlYXRlKHZtLCByZXN1bHQuZ2V0KCksIHZh
bHVlKSk7CiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAko
cmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0
ZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAvLyBTYXZlIHRoZSBzdGF0ZSB2YWx1ZSB0byB0aGUgbV9zdGF0ZSBtZW1i
ZXIgb2YgYSBKU1BvcFN0YXRlRXZlbnQsIGFuZCByZXR1cm4gaXQsIGZvciBjb252ZW5pZW5jZS4K
IHN0YXRpYyBjb25zdCBKU1ZhbHVlJiBjYWNoZVN0YXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNQb3BT
dGF0ZUV2ZW50KiBldmVudCwgY29uc3QgSlNWYWx1ZSYgc3RhdGUpCiB7Ci0gICAgZXZlbnQtPm1f
c3RhdGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXZlbnQsIHN0YXRlKTsKKyAgICBldmVudC0+
bV9zdGF0ZS5zZXQoZXhlYy0+dm0oKSwgZXZlbnQsIHN0YXRlKTsKICAgICByZXR1cm4gc3RhdGU7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVxdWVzdEFuaW1hdGlv
bkZyYW1lQ2FsbGJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tDdXN0b20uY3BwCShyZXZp
c2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlcXVlc3RBbmlt
YXRpb25GcmFtZUNhbGxiYWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAs
NyBAQCBib29sIEpTUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s6OmhhCiAKICAgICBSZWZQ
dHI8SlNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAg
IEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+dm0oKSk7CiAK
ICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGFyZ3MuYXBwZW5kKGpzTnVtYmVy
KGhpZ2hSZXNOb3dNcykpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxS
ZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAxNDg2
MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFJlc3VsdFNldFJvd0xpc3RD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIEpTVmFsdWUgSlNTUUxS
ZXN1bHRTZXRSb3dMaXN0OjppdGVtKEV4ZWMKICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIH0KIAotICAgICAgICBvYmplY3QtPnB1dERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgbV9pbXBsLT5jb2x1bW5OYW1lcygpW2ldKSwganNW
YWx1ZSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgb2JqZWN0LT5wdXREaXJlY3Qo
ZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCBtX2ltcGwtPmNvbHVtbk5hbWVzKClbaV0pLCBq
c1ZhbHVlLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIH0KIAogICAgIHJldHVybiBvYmpl
Y3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRCYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNv
bnRleHRCYXNlLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXb3JrZXJDb250ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE1ICs0
NiwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dvcmtlckNv
bnRleHRCYXNlOjpzX2luZm8gPSB7ICJXb3JrZXJDb250ZXh0IiwgJkpTRE9NR2xvYmFsT2JqZWN0
OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXb3JrZXJDb250ZXh0QmFzZSkg
fTsKIAotSlNXb3JrZXJDb250ZXh0QmFzZTo6SlNXb3JrZXJDb250ZXh0QmFzZShKU0M6OkpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0
cjxXb3JrZXJDb250ZXh0PiBpbXBsKQotICAgIDogSlNET01HbG9iYWxPYmplY3QoZ2xvYmFsRGF0
YSwgc3RydWN0dXJlLCBub3JtYWxXb3JsZChnbG9iYWxEYXRhKSkKK0pTV29ya2VyQ29udGV4dEJh
c2U6OkpTV29ya2VyQ29udGV4dEJhc2UoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFBhc3NSZWZQdHI8V29ya2VyQ29udGV4dD4gaW1wbCkKKyAgICA6IEpTRE9NR2xvYmFs
T2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIG5vcm1hbFdvcmxkKHZtKSkKICAgICAsIG1faW1wbChpbXBs
KQogewogfQogCi12b2lkIEpTV29ya2VyQ29udGV4dEJhc2U6OmZpbmlzaENyZWF0aW9uKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgSlNXb3JrZXJDb250ZXh0QmFzZTo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwor
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5m
bykpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRl
eHRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3Jr
ZXJDb250ZXh0QmFzZS5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtlckNvbnRleHRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDE0ICs0
OCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFdvcmtlckNvbnRleHQqIGltcGwo
KSBjb25zdCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KICAgICAgICAgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCi0gICAgICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6R2xvYmFsT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsK
KyAgICAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Okdsb2JhbE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAg
ICAgSlNXb3JrZXJDb250ZXh0QmFzZShKU0M6OkpTR2xvYmFsRGF0YSYsIEpTQzo6U3RydWN0dXJl
KiwgUGFzc1JlZlB0cjxXb3JrZXJDb250ZXh0Pik7Ci0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNDOjpKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgSlNXb3JrZXJDb250ZXh0QmFzZShKU0M6
OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPFdvcmtlckNvbnRleHQ+KTsKKyAgICAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBSZWZQdHI8V29ya2VyQ29udGV4dD4gbV9pbXBsOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAx
NDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsMTIgKzExMiwxMiBAQCB2b2lkIFBhZ2VTY3Jp
cHREZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuCiAKIHZvaWQgUGFnZVNjcmlwdERlYnVnU2VydmVy
OjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhUaW1lcjxTY3JpcHREZWJ1Z1NlcnZlcj4qKQogewot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwogICAgIC8v
IElmIEphdmFTY3JpcHQgc3RhY2sgaXMgbm90IGVtcHR5IHBvc3Rwb25lIHJlY29tcGlsYXRpb24u
Ci0gICAgaWYgKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+ZHluYW1pY0dsb2Jh
bE9iamVjdCkKKyAgICBpZiAoSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmR5bmFtaWNHbG9iYWxP
YmplY3QpCiAgICAgICAgIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpOwogICAgIGVsc2UK
LSAgICAgICAgRGVidWdnZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKEpTRE9NV2luZG93Ojpj
b21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgICAgIERlYnVnZ2VyOjpyZWNvbXBpbGVBbGxKU0Z1
bmN0aW9ucyhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CiB9CiAKIFNjcmlwdERlYnVnU2VydmVy
OjpMaXN0ZW5lclNldCogUGFnZVNjcmlwdERlYnVnU2VydmVyOjpnZXRMaXN0ZW5lcnNGb3JHbG9i
YWxPYmplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAkocmV2aXNpb24gMTQ4NjM4
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjUsMTMgKzY1LDEzIEBAIFBhc3NPd25QdHI8U2NoZWR1bGVkQWN0aW9u
PiBTY2hlZHVsZWRBY3QKIH0KIAogU2NoZWR1bGVkQWN0aW9uOjpTY2hlZHVsZWRBY3Rpb24oRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1bmN0aW9uLCBET01XcmFwcGVyV29ybGQqIGlzb2xhdGVk
V29ybGQpCi0gICAgOiBtX2Z1bmN0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZnVuY3Rpb24pCisg
ICAgOiBtX2Z1bmN0aW9uKGV4ZWMtPnZtKCksIGZ1bmN0aW9uKQogICAgICwgbV9pc29sYXRlZFdv
cmxkKGlzb2xhdGVkV29ybGQpCiB7CiAgICAgLy8gc2V0VGltZW91dChmdW5jdGlvbiwgaW50ZXJ2
YWwsIGFyZzAsIGFyZzEuLi4pLgogICAgIC8vIFN0YXJ0IGF0IDIgdG8gc2tpcCBmdW5jdGlvbiBh
bmQgaW50ZXJ2YWwuCiAgICAgZm9yIChzaXplX3QgaSA9IDI7IGkgPCBleGVjLT5hcmd1bWVudENv
dW50KCk7ICsraSkKLSAgICAgICAgbV9hcmdzLmFwcGVuZChTdHJvbmc8SlNDOjpVbmtub3duPihl
eGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmFyZ3VtZW50KGkpKSk7CisgICAgICAgIG1fYXJncy5h
cHBlbmQoU3Ryb25nPEpTQzo6VW5rbm93bj4oZXhlYy0+dm0oKSwgZXhlYy0+YXJndW1lbnQoaSkp
KTsKIH0KIAogdm9pZCBTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCkKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBTY2hlZHVsZWRBY3Rpb246OmV4
ZWN1dGUoU2NyaXB0RXhlYwogdm9pZCBTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGVGdW5jdGlvbklu
Q29udGV4dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKICAgICBBU1NFUlQobV9mdW5jdGlv
bik7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soY29udGV4dC0+Z2xvYmFsRGF0YSgpKTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhjb250ZXh0LT52bSgpKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRh
OwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEobV9mdW5jdGlvbi5nZXQoKSwg
Y2FsbERhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVk
QWN0aW9uLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjaGVkdWxlZEFjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBwcml2YXRlOgogICAgICAgICBTY2hlZHVsZWRBY3Rpb24oSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUgZnVuY3Rpb24sIERPTVdyYXBwZXJXb3JsZCogaXNv
bGF0ZWRXb3JsZCk7CiAgICAgICAgIFNjaGVkdWxlZEFjdGlvbihjb25zdCBTdHJpbmcmIGNvZGUs
IERPTVdyYXBwZXJXb3JsZCogaXNvbGF0ZWRXb3JsZCkKLSAgICAgICAgICAgIDogbV9mdW5jdGlv
bigqaXNvbGF0ZWRXb3JsZC0+Z2xvYmFsRGF0YSgpKQorICAgICAgICAgICAgOiBtX2Z1bmN0aW9u
KCppc29sYXRlZFdvcmxkLT52bSgpKQogICAgICAgICAgICAgLCBtX2NvZGUoY29kZSkKICAgICAg
ICAgICAgICwgbV9pc29sYXRlZFdvcmxkKGlzb2xhdGVkV29ybGQpCiAgICAgICAgIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVE
YXRhLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0Q2Fj
aGVkRnJhbWVEYXRhKEZyYW1lKiBmcmFtZSkKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RP
TVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogCiAgICAgU2NyaXB0Q29udHJvbGxlciog
c2NyaXB0Q29udHJvbGxlciA9IGZyYW1lLT5zY3JpcHQoKTsKICAgICBTY3JpcHRDb250cm9sbGVy
OjpTaGVsbE1hcCYgd2luZG93U2hlbGxzID0gc2NyaXB0Q29udHJvbGxlci0+bV93aW5kb3dTaGVs
bHM7CkBAIC01NCw3ICs1NCw3IEBAIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0Q2FjaGVk
RnJhbWUKICAgICBTY3JpcHRDb250cm9sbGVyOjpTaGVsbE1hcDo6aXRlcmF0b3Igd2luZG93U2hl
bGxzRW5kID0gd2luZG93U2hlbGxzLmVuZCgpOwogICAgIGZvciAoU2NyaXB0Q29udHJvbGxlcjo6
U2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSB3aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSB3
aW5kb3dTaGVsbHNFbmQ7ICsraXRlcikgewogICAgICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0g
aXRlci0+dmFsdWUtPndpbmRvdygpOwotICAgICAgICBtX3dpbmRvd3MuYWRkKGl0ZXItPmtleS5n
ZXQoKSwgU3Ryb25nPEpTRE9NV2luZG93Pih3aW5kb3ctPmdsb2JhbERhdGEoKSwgd2luZG93KSk7
CisgICAgICAgIG1fd2luZG93cy5hZGQoaXRlci0+a2V5LmdldCgpLCBTdHJvbmc8SlNET01XaW5k
b3c+KHdpbmRvdy0+dm0oKSwgd2luZG93KSk7CiAgICAgfQogCiAgICAgc2NyaXB0Q29udHJvbGxl
ci0+YXR0YWNoRGVidWdnZXIoMCk7CkBAIC02Nyw3ICs2Nyw3IEBAIFNjcmlwdENhY2hlZEZyYW1l
RGF0YTo6flNjcmlwdENhY2hlZEZyYW0KIAogdm9pZCBTY3JpcHRDYWNoZWRGcmFtZURhdGE6OnJl
c3RvcmUoRnJhbWUqIGZyYW1lKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9N
V2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAKICAgICBTY3JpcHRDb250cm9sbGVyKiBzY3JpcHRD
b250cm9sbGVyID0gZnJhbWUtPnNjcmlwdCgpOwogICAgIFNjcmlwdENvbnRyb2xsZXI6OlNoZWxs
TWFwJiB3aW5kb3dTaGVsbHMgPSBzY3JpcHRDb250cm9sbGVyLT5tX3dpbmRvd1NoZWxsczsKQEAg
LTc4LDcgKzc4LDcgQEAgdm9pZCBTY3JpcHRDYWNoZWRGcmFtZURhdGE6OnJlc3RvcmUoRnJhbQog
ICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnZhbHVlLmdldCgp
OwogCiAgICAgICAgIGlmIChKU0RPTVdpbmRvdyogd2luZG93ID0gbV93aW5kb3dzLmdldCh3b3Js
ZCkuZ2V0KCkpCi0gICAgICAgICAgICB3aW5kb3dTaGVsbC0+c2V0V2luZG93KHdpbmRvdy0+Z2xv
YmFsRGF0YSgpLCB3aW5kb3cpOworICAgICAgICAgICAgd2luZG93U2hlbGwtPnNldFdpbmRvdyh3
aW5kb3ctPnZtKCksIHdpbmRvdyk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgRE9NV2lu
ZG93KiBkb21XaW5kb3cgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCk7CiAgICAgICAg
ICAgICBpZiAod2luZG93U2hlbGwtPndpbmRvdygpLT5pbXBsKCkgPT0gZG9tV2luZG93KQpAQCAt
OTksNyArOTksNyBAQCB2b2lkIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6Y2xlYXIoKQogICAgIGlm
IChtX3dpbmRvd3MuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0xvY2tIb2xk
ZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgIG1fd2luZG93
cy5jbGVhcigpOwogICAgIGdjQ29udHJvbGxlcigpLmdhcmJhZ2VDb2xsZWN0U29vbigpOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0
YWNrRmFjdG9yeS5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3
ICs0NCw3IEBACiAjaW5jbHVkZSA8cnVudGltZS9BcmdMaXN0Lmg+CiAjaW5jbHVkZSA8cnVudGlt
ZS9KU0NKU1ZhbHVlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9KU0dsb2JhbERhdGEuaD4KKyNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkBAIC01
OCw3ICs1OCw3IEBAIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHQKICAg
ICBWZWN0b3I8U2NyaXB0Q2FsbEZyYW1lPiBmcmFtZXM7CiAgICAgaWYgKEpTQzo6RXhlY1N0YXRl
KiBleGVjID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjdXJyZW50U3RhdGUoKSkgewogICAgICAg
ICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsKLSAgICAgICAgSW50ZXJwcmV0ZXI6Omdl
dFN0YWNrVHJhY2UoJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3RhY2tUcmFjZSwgbWF4U3RhY2tTaXpl
KTsKKyAgICAgICAgSW50ZXJwcmV0ZXI6OmdldFN0YWNrVHJhY2UoJmV4ZWMtPnZtKCksIHN0YWNr
VHJhY2UsIG1heFN0YWNrU2l6ZSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3Rh
Y2tUcmFjZS5zaXplKCk7IGkrKykKICAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQoU2NyaXB0Q2Fs
bEZyYW1lKHN0YWNrVHJhY2VbaV0uZnJpZW5kbHlGdW5jdGlvbk5hbWUoZXhlYyksIHN0YWNrVHJh
Y2VbaV0uZnJpZW5kbHlTb3VyY2VVUkwoKSwgc3RhY2tUcmFjZVtpXS5saW5lKCksIHN0YWNrVHJh
Y2VbaV0uY29sdW1uKCkpKTsKICAgICB9CkBAIC03NSw3ICs3NSw3IEBAIFBhc3NSZWZQdHI8U2Ny
aXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHQKIHsKICAgICBWZWN0b3I8U2NyaXB0Q2FsbEZyYW1l
PiBmcmFtZXM7CiAgICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJhY2U7Ci0gICAgSW50ZXJw
cmV0ZXI6OmdldFN0YWNrVHJhY2UoJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3RhY2tUcmFjZSwgbWF4
U3RhY2tTaXplICsgMSk7CisgICAgSW50ZXJwcmV0ZXI6OmdldFN0YWNrVHJhY2UoJmV4ZWMtPnZt
KCksIHN0YWNrVHJhY2UsIG1heFN0YWNrU2l6ZSArIDEpOwogICAgIGZvciAoc2l6ZV90IGkgPSBz
dGFja1RyYWNlLnNpemUoKSA9PSAxID8gMCA6IDE7IGkgPCBzdGFja1RyYWNlLnNpemUoKTsgaSsr
KSB7CiAgICAgICAgIC8vIFRoaXMgZWFybHkgZXhpdCBpcyBuZWNlc3NhcnkgdG8gbWFpbnRhaW4g
b3VyIG9sZCBiZWhhdmlvdXIKICAgICAgICAgLy8gYnV0IHRoZSBzdGFjayB0cmFjZSB3ZSBwcm9k
dWNlIG5vdyBpcyBjb21wbGV0ZSBhbmQgaGFuZGxlcyBhbGwKQEAgLTEwNiw3ICsxMDYsNyBAQCBQ
YXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gY3JlYXRlU2NyaXB0CiAgICAgVmVjdG9yPFNjcmlw
dFZhbHVlPiBhcmd1bWVudHM7CiAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBleGVjLT5hcmd1
bWVudENvdW50KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IHNraXBBcmd1bWVudENvdW50OyBpIDwg
YXJndW1lbnRDb3VudDsgKytpKQotICAgICAgICBhcmd1bWVudHMuYXBwZW5kKFNjcmlwdFZhbHVl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+YXJndW1lbnQoaSkpKTsKKyAgICAgICAgYXJndW1l
bnRzLmFwcGVuZChTY3JpcHRWYWx1ZShleGVjLT52bSgpLCBleGVjLT5hcmd1bWVudChpKSkpOwog
ICAgIHJldHVybiBTY3JpcHRBcmd1bWVudHM6OmNyZWF0ZShleGVjLCBhcmd1bWVudHMpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVy
LmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw4ICsxMDQsOCBAQCB2b2lk
IFNjcmlwdENvbnRyb2xsZXI6OmRlc3Ryb3lXaW5kb3dTaGVsCiBKU0RPTVdpbmRvd1NoZWxsKiBT
Y3JpcHRDb250cm9sbGVyOjpjcmVhdGVXaW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqIHdvcmxk
KQogewogICAgIEFTU0VSVCghbV93aW5kb3dTaGVsbHMuY29udGFpbnMod29ybGQpKTsKLSAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTRE9NV2luZG93U2hlbGw6OmNyZWF0ZVN0cnVjdHVyZSgq
d29ybGQtPmdsb2JhbERhdGEoKSwganNOdWxsKCkpOwotICAgIFN0cm9uZzxKU0RPTVdpbmRvd1No
ZWxsPiB3aW5kb3dTaGVsbCgqd29ybGQtPmdsb2JhbERhdGEoKSwgSlNET01XaW5kb3dTaGVsbDo6
Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCktPmRvbVdpbmRvdygpLCBzdHJ1Y3R1cmUsIHdvcmxk
KSk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBKU0RPTVdpbmRvd1NoZWxsOjpjcmVhdGVT
dHJ1Y3R1cmUoKndvcmxkLT52bSgpLCBqc051bGwoKSk7CisgICAgU3Ryb25nPEpTRE9NV2luZG93
U2hlbGw+IHdpbmRvd1NoZWxsKCp3b3JsZC0+dm0oKSwgSlNET01XaW5kb3dTaGVsbDo6Y3JlYXRl
KG1fZnJhbWUtPmRvY3VtZW50KCktPmRvbVdpbmRvdygpLCBzdHJ1Y3R1cmUsIHdvcmxkKSk7CiAg
ICAgU3Ryb25nPEpTRE9NV2luZG93U2hlbGw+IHdpbmRvd1NoZWxsMih3aW5kb3dTaGVsbCk7CiAg
ICAgbV93aW5kb3dTaGVsbHMuYWRkKHdvcmxkLCB3aW5kb3dTaGVsbCk7CiAgICAgd29ybGQtPmRp
ZENyZWF0ZVdpbmRvd1NoZWxsKHRoaXMpOwpAQCAtMTQ4LDcgKzE0OCw3IEBAIFNjcmlwdFZhbHVl
IFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW4KICAgICB9CiAKICAgICBtX3NvdXJjZVVSTCA9
IHNhdmVkU291cmNlVVJMOwotICAgIHJldHVybiBTY3JpcHRWYWx1ZShleGVjLT5nbG9iYWxEYXRh
KCksIHJldHVyblZhbHVlKTsKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUoZXhlYy0+dm0oKSwgcmV0
dXJuVmFsdWUpOwogfQogCiBTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShj
b25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKSAKQEAgLTE1OCwxMiArMTU4LDEyIEBA
IFNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGMKIAogUGFzc1JlZlB0cjxE
T01XcmFwcGVyV29ybGQ+IFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVdvcmxkKCkKIHsKLSAgICBy
ZXR1cm4gRE9NV3JhcHBlcldvcmxkOjpjcmVhdGUoSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKKyAgICByZXR1cm4gRE9NV3JhcHBlcldvcmxkOjpjcmVhdGUoSlNET01XaW5kb3c6
OmNvbW1vblZNKCkpOwogfQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmdldEFsbFdvcmxkcyhW
ZWN0b3I8UmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gPiYgd29ybGRzKQogewotICAgIHN0YXRpY19j
YXN0PFdlYkNvcmVKU0NsaWVudERhdGEqPihKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRh
KCktPmNsaWVudERhdGEpLT5nZXRBbGxXb3JsZHMod29ybGRzKTsKKyAgICBzdGF0aWNfY2FzdDxX
ZWJDb3JlSlNDbGllbnREYXRhKj4oSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmNsaWVudERhdGEp
LT5nZXRBbGxXb3JsZHMod29ybGRzKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVh
cldpbmRvd1NoZWxsKERPTVdpbmRvdyogbmV3RE9NV2luZG93LCBib29sIGdvaW5nSW50b1BhZ2VD
YWNoZSkKQEAgLTE3MSw3ICsxNzEsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyV2lu
ZG93U2hlbGwoCiAgICAgaWYgKG1fd2luZG93U2hlbGxzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0ds
b2JhbERhdGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21t
b25WTSgpKTsKIAogICAgIGZvciAoU2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1No
ZWxscy5iZWdpbigpOyBpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpIHsKICAg
ICAgICAgSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwgPSBpdGVyLT52YWx1ZS5nZXQoKTsK
QEAgLTIwNiw3ICsyMDYsNyBAQCBKU0RPTVdpbmRvd1NoZWxsKiBTY3JpcHRDb250cm9sbGVyOjpp
bml0CiB7CiAgICAgQVNTRVJUKCFtX3dpbmRvd1NoZWxscy5jb250YWlucyh3b3JsZCkpOwogCi0g
ICAgSlNMb2NrSG9sZGVyIGxvY2sod29ybGQtPmdsb2JhbERhdGEoKSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2sod29ybGQtPnZtKCkpOwogCiAgICAgSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hl
bGwgPSBjcmVhdGVXaW5kb3dTaGVsbCh3b3JsZCk7CiAKQEAgLTI4NSw3ICsyODUsNyBAQCB2b2lk
IFNjcmlwdENvbnRyb2xsZXI6OmF0dGFjaERlYnVnZ2VyKEpTCiB2b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OnVwZGF0ZURvY3VtZW50KCkKIHsKICAgICBmb3IgKFNoZWxsTWFwOjppdGVyYXRvciBpdGVy
ID0gbV93aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKTsg
KytpdGVyKSB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGl0ZXItPmtleS0+Z2xvYmFsRGF0
YSgpKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soaXRlci0+a2V5LT52bSgpKTsKICAgICAg
ICAgaXRlci0+dmFsdWUtPndpbmRvdygpLT51cGRhdGVEb2N1bWVudCgpOwogICAgIH0KIH0KQEAg
LTMwMSw3ICszMDEsNyBAQCBCaW5kaW5nczo6Um9vdE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6
CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCFtX2NhY2hlYWJsZUJpbmRpbmdSb290T2Jq
ZWN0KSB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vblZNKCkpOwogICAgICAgICBtX2NhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0ID0g
QmluZGluZ3M6OlJvb3RPYmplY3Q6OmNyZWF0ZSgwLCBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQo
KSkpOwogICAgIH0KICAgICByZXR1cm4gbV9jYWNoZWFibGVCaW5kaW5nUm9vdE9iamVjdC5nZXQo
KTsKQEAgLTMxMyw3ICszMTMsNyBAQCBCaW5kaW5nczo6Um9vdE9iamVjdCogU2NyaXB0Q29udHJv
bGxlcjo6CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCFtX2JpbmRpbmdSb290T2JqZWN0
KSB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vblZNKCkpOwogICAgICAgICBtX2JpbmRpbmdSb290T2JqZWN0ID0gQmluZGluZ3M6OlJv
b3RPYmplY3Q6OmNyZWF0ZSgwLCBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSkpOwogICAgIH0K
ICAgICByZXR1cm4gbV9iaW5kaW5nUm9vdE9iamVjdC5nZXQoKTsKQEAgLTQzNCw3ICs0MzQsNyBA
QCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFudXBTY3JpcHRPYmplCiAKIHZvaWQgU2NyaXB0
Q29udHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3RzKCkKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9j
ayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogCiAgICAgUm9vdE9iamVjdE1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yb290T2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKFJv
b3RPYmplY3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yb290T2JqZWN0cy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCkBAIC00NzEsNyArNDcxLDcgQEAgU2NyaXB0VmFsdWUgU2NyaXB0Q29u
dHJvbGxlcjo6ZXhlY3V0ZVNjcgogCiBib29sIFNjcmlwdENvbnRyb2xsZXI6OnNob3VsZEJ5cGFz
c01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSgpCiB7Ci0gICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPnRvcENhbGxGcmFtZTsK
KyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT50b3BD
YWxsRnJhbWU7CiAgICAgaWYgKCFjYWxsRnJhbWUgfHwgY2FsbEZyYW1lID09IENhbGxGcmFtZTo6
bm9DYWxsZXIoKSkgCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBET01XcmFwcGVyV29ybGQq
IGRvbVdyYXBwZXJXb3JsZCA9IGN1cnJlbnRXb3JsZChjYWxsRnJhbWUpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1tCShyZXZp
c2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9s
bGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDcgQEAgV2ViU2NyaXB0T2Jq
ZWN0KiBTY3JpcHRDb250cm9sbGVyOjp3aW5kbwogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlm
ICghbV93aW5kb3dTY3JpcHRPYmplY3QpIHsKLSAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9j
ayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNDOjpK
U0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICBK
U0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290ID0gYmluZGluZ1Jvb3RPYmplY3QoKTsKICAg
ICAgICAgbV93aW5kb3dTY3JpcHRPYmplY3QgPSBbV2ViU2NyaXB0T2JqZWN0IHNjcmlwdE9iamVj
dEZvckpTT2JqZWN0OnRvUmVmKHdpbmRvd1NoZWxsKHBsdWdpbldvcmxkKCkpKSBvcmlnaW5Sb290
T2JqZWN0OnJvb3Qgcm9vdE9iamVjdDpyb290XTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxNDg2
MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3Myw3ICsyNzMsNyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVy
OjpkaXNwYXRjaERpZFBhdXNlCiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAganNDYWxsRnJh
bWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIH0KLSAgICBsaXN0ZW5lci0+ZGlkUGF1c2Uoc3RhdGUs
IFNjcmlwdFZhbHVlKHN0YXRlLT5nbG9iYWxEYXRhKCksIGpzQ2FsbEZyYW1lKSwgU2NyaXB0VmFs
dWUoKSk7CisgICAgbGlzdGVuZXItPmRpZFBhdXNlKHN0YXRlLCBTY3JpcHRWYWx1ZShzdGF0ZS0+
dm0oKSwganNDYWxsRnJhbWUpLCBTY3JpcHRWYWx1ZSgpKTsKIH0KIAogdm9pZCBTY3JpcHREZWJ1
Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRDb250aW51ZShTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5l
cikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEV2ZW50
TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTks
NyBAQCBTdHJpbmcgZXZlbnRMaXN0ZW5lckhhbmRsZXJCb2R5KERvY3VtZW50CiAgICAgQVNTRVJU
KGpzTGlzdGVuZXIpOwogICAgIGlmICghanNMaXN0ZW5lcikKICAgICAgICAgcmV0dXJuICIiOwot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGpzTGlzdGVuZXItPmlzb2xhdGVkV29ybGQoKS0+Z2xvYmFs
RGF0YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhqc0xpc3RlbmVyLT5pc29sYXRlZFdvcmxk
KCktPnZtKCkpOwogICAgIEpTQzo6SlNPYmplY3QqIGpzRnVuY3Rpb24gPSBqc0xpc3RlbmVyLT5q
c0Z1bmN0aW9uKGRvY3VtZW50KTsKICAgICBpZiAoIWpzRnVuY3Rpb24pCiAgICAgICAgIHJldHVy
biAiIjsKQEAgLTExMywxMSArMTEzLDExIEBAIFNjcmlwdFZhbHVlIGV2ZW50TGlzdGVuZXJIYW5k
bGVyKERvY3VtZW4KICAgICBBU1NFUlQoanNMaXN0ZW5lcik7CiAgICAgaWYgKCFqc0xpc3RlbmVy
KQogICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhq
c0xpc3RlbmVyLT5pc29sYXRlZFdvcmxkKCktPmdsb2JhbERhdGEoKSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soanNMaXN0ZW5lci0+aXNvbGF0ZWRXb3JsZCgpLT52bSgpKTsKICAgICBKU0M6OkpT
T2JqZWN0KiBqc0Z1bmN0aW9uID0ganNMaXN0ZW5lci0+anNGdW5jdGlvbihkb2N1bWVudCk7CiAg
ICAgaWYgKCFqc0Z1bmN0aW9uKQogICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKLSAgICBy
ZXR1cm4gU2NyaXB0VmFsdWUoKmpzTGlzdGVuZXItPmlzb2xhdGVkV29ybGQoKS0+Z2xvYmFsRGF0
YSgpLCBqc0Z1bmN0aW9uKTsKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUoKmpzTGlzdGVuZXItPmlz
b2xhdGVkV29ybGQoKS0+dm0oKSwganNGdW5jdGlvbik7CiB9CiAKIFNjcmlwdFN0YXRlKiBldmVu
dExpc3RlbmVySGFuZGxlclNjcmlwdFN0YXRlKEZyYW1lKiBmcmFtZSwgRXZlbnRMaXN0ZW5lciog
ZXZlbnRMaXN0ZW5lcikKQEAgLTEzOCw3ICsxMzgsNyBAQCBib29sIGV2ZW50TGlzdGVuZXJIYW5k
bGVyTG9jYXRpb24oRG9jdW1lCiAgICAgQVNTRVJUKGpzTGlzdGVuZXIpOwogICAgIGlmICghanNM
aXN0ZW5lcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGpz
TGlzdGVuZXItPmlzb2xhdGVkV29ybGQoKS0+Z2xvYmFsRGF0YSgpKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhqc0xpc3RlbmVyLT5pc29sYXRlZFdvcmxkKCktPnZtKCkpOwogICAgIEpTQzo6SlNP
YmplY3QqIGpzT2JqZWN0ID0ganNMaXN0ZW5lci0+anNGdW5jdGlvbihkb2N1bWVudCk7CiAgICAg
aWYgKCFqc09iamVjdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCShyZXZpc2lvbiAx
NDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksNyArMTQ5LDcgQEAgU2NyaXB0VmFsdWUgU2NyaXB0
RnVuY3Rpb25DYWxsOjpjYWxsKGJvbwogICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gU2NyaXB0VmFsdWUobV9leGVjLT5nbG9iYWxEYXRhKCksIHJlc3Vs
dCk7CisgICAgcmV0dXJuIFNjcmlwdFZhbHVlKG1fZXhlYy0+dm0oKSwgcmVzdWx0KTsKIH0KIAog
U2NyaXB0VmFsdWUgU2NyaXB0RnVuY3Rpb25DYWxsOjpjYWxsKCkKQEAgLTIxMyw3ICsyMTMsNyBA
QCBTY3JpcHRWYWx1ZSBTY3JpcHRDYWxsYmFjazo6Y2FsbCgpCiAgICAgICAgIHJldHVybiBTY3Jp
cHRWYWx1ZSgpOwogICAgIH0KIAotICAgIHJldHVybiBTY3JpcHRWYWx1ZShtX2V4ZWMtPmdsb2Jh
bERhdGEoKSwgcmVzdWx0KTsKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUobV9leGVjLT52bSgpLCBy
ZXN1bHQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRHQ0V2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRHQ0V2ZW50LmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0R0NFdmVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDcgKzM2LDcgQEAKIAogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAjaW5jbHVk
ZSA8aGVhcC9IZWFwLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbERhdGEuaD4KKyNpbmNs
dWRlIDxydW50aW1lL1ZNLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTQ1LDkgKzQ1LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAog
dm9pZCBTY3JpcHRHQ0V2ZW50OjpnZXRIZWFwU2l6ZShIZWFwSW5mbyYgaW5mbykKIHsKLSAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRh
KCk7Ci0gICAgaW5mby50b3RhbEpTSGVhcFNpemUgPSBnbG9iYWxEYXRhLT5oZWFwLmNhcGFjaXR5
KCk7Ci0gICAgaW5mby51c2VkSlNIZWFwU2l6ZSA9IGdsb2JhbERhdGEtPmhlYXAuc2l6ZSgpOwor
ICAgIFZNKiB2bSA9IEpTRE9NV2luZG93Ojpjb21tb25WTSgpOworICAgIGluZm8udG90YWxKU0hl
YXBTaXplID0gdm0tPmhlYXAuY2FwYWNpdHkoKTsKKyAgICBpbmZvLnVzZWRKU0hlYXBTaXplID0g
dm0tPmhlYXAuc2l6ZSgpOwogICAgIGluZm8uanNIZWFwU2l6ZUxpbWl0ID0gMDsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuY3BwCShyZXZpc2lv
biAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMyArNDUsMTMgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2NyaXB0T2JqZWN0OjpTY3JpcHRPYmplY3QoU2NyaXB0
U3RhdGUqIHNjcmlwdFN0YXRlLCBKU09iamVjdCogb2JqZWN0KQotICAgIDogU2NyaXB0VmFsdWUo
c2NyaXB0U3RhdGUtPmdsb2JhbERhdGEoKSwgb2JqZWN0KQorICAgIDogU2NyaXB0VmFsdWUoc2Ny
aXB0U3RhdGUtPnZtKCksIG9iamVjdCkKICAgICAsIG1fc2NyaXB0U3RhdGUoc2NyaXB0U3RhdGUp
CiB7CiB9CiAKIFNjcmlwdE9iamVjdDo6U2NyaXB0T2JqZWN0KFNjcmlwdFN0YXRlKiBzY3JpcHRT
dGF0ZSwgY29uc3QgU2NyaXB0VmFsdWUmIHNjcmlwdFZhbHVlKQotICAgIDogU2NyaXB0VmFsdWUo
c2NyaXB0U3RhdGUtPmdsb2JhbERhdGEoKSwgc2NyaXB0VmFsdWUuanNWYWx1ZSgpKQorICAgIDog
U2NyaXB0VmFsdWUoc2NyaXB0U3RhdGUtPnZtKCksIHNjcmlwdFZhbHVlLmpzVmFsdWUoKSkKICAg
ICAsIG1fc2NyaXB0U3RhdGUoc2NyaXB0U3RhdGUpCiB7CiB9CkBAIC02OCw3ICs2OCw3IEBAIHN0
YXRpYyBib29sIGhhbmRsZUV4Y2VwdGlvbihTY3JpcHRTdGF0ZSoKIGJvb2wgU2NyaXB0R2xvYmFs
T2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBj
b25zdCBTY3JpcHRPYmplY3QmIHZhbHVlKQogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlw
dFN0YXRlKTsKLSAgICBzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wdXREaXJl
Y3Qoc2NyaXB0U3RhdGUtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFt
ZSksIHZhbHVlLmpzT2JqZWN0KCkpOworICAgIHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPnB1dERpcmVjdChzY3JpcHRTdGF0ZS0+dm0oKSwgSWRlbnRpZmllcihzY3JpcHRTdGF0
ZSwgbmFtZSksIHZhbHVlLmpzT2JqZWN0KCkpOwogICAgIHJldHVybiBoYW5kbGVFeGNlcHRpb24o
c2NyaXB0U3RhdGUpOwogfQogCkBAIC03Nyw3ICs3Nyw3IEBAIGJvb2wgU2NyaXB0R2xvYmFsT2Jq
ZWN0OjpzZXQoU2NyaXB0U3RhdGUKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhzY3JpcHRTdGF0
ZSk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwotICAgIGds
b2JhbE9iamVjdC0+cHV0RGlyZWN0KHNjcmlwdFN0YXRlLT5nbG9iYWxEYXRhKCksIElkZW50aWZp
ZXIoc2NyaXB0U3RhdGUsIG5hbWUpLCB0b0pTKHNjcmlwdFN0YXRlLCBnbG9iYWxPYmplY3QsIHZh
bHVlKSk7CisgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3Qoc2NyaXB0U3RhdGUtPnZtKCksIElk
ZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpLCB0b0pTKHNjcmlwdFN0YXRlLCBnbG9iYWxPYmpl
Y3QsIHZhbHVlKSk7CiAgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihzY3JpcHRTdGF0ZSk7CiB9
CiAKQEAgLTg1LDcgKzg1LDcgQEAgYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRT
dGF0ZQogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAgICBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2Ny
aXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7Ci0gICAgZ2xvYmFsT2JqZWN0LT5wdXRE
aXJlY3Qoc2NyaXB0U3RhdGUtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwg
bmFtZSksIHRvSlMoc2NyaXB0U3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUpKTsKKyAgICBnbG9i
YWxPYmplY3QtPnB1dERpcmVjdChzY3JpcHRTdGF0ZS0+dm0oKSwgSWRlbnRpZmllcihzY3JpcHRT
dGF0ZSwgbmFtZSksIHRvSlMoc2NyaXB0U3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUpKTsKICAg
ICByZXR1cm4gaGFuZGxlRXhjZXB0aW9uKHNjcmlwdFN0YXRlKTsKIH0KICNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3Rh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGF0
ZS5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIGNsYXNzIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBXb3JrZXJDb250ZXh0OwogCiAvLyBUaGUgaWRlYSBpcyB0
byBleHBvc2UgInN0YXRlLWxpa2UiIG1ldGhvZHMgKGhhZEV4Y2VwdGlvbiwgYW5kIGFueSBvdGhl
cgotLy8gbWV0aG9kcyB3aGVyZSBFeGVjU3RhdGUganVzdCBkaXBzIGludG8gZ2xvYmFsRGF0YSkg
b2YgSlNDOjpFeGVjU3RhdGUgYXMgYQorLy8gbWV0aG9kcyB3aGVyZSBFeGVjU3RhdGUganVzdCBk
aXBzIGludG8gdm0pIG9mIEpTQzo6RXhlY1N0YXRlIGFzIGEKIC8vIHNlcGFyYXRlIGFic3RyYWN0
aW9uLgogLy8gRm9yIG5vdywgdGhlIHNlcGFyYXRpb24gaXMgcHVyZWx5IGJ5IGNvbnZlbnRpb24u
CiB0eXBlZGVmIEpTQzo6RXhlY1N0YXRlIFNjcmlwdFN0YXRlOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTIsNyArMTEyLDcgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNjcmlw
dAogCiBTY3JpcHRWYWx1ZSBTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoU2NyaXB0U3RhdGUqIHNj
cmlwdFN0YXRlLCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHZhbHVlLCBTZXJpYWxpemF0aW9uRXJy
b3JNb2RlIHRocm93RXhjZXB0aW9ucykKIHsKLSAgICByZXR1cm4gU2NyaXB0VmFsdWUoc2NyaXB0
U3RhdGUtPmdsb2JhbERhdGEoKSwgdmFsdWUtPmRlc2VyaWFsaXplKHNjcmlwdFN0YXRlLCBzY3Jp
cHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwLCB0aHJvd0V4Y2VwdGlvbnMpKTsKKyAg
ICByZXR1cm4gU2NyaXB0VmFsdWUoc2NyaXB0U3RhdGUtPnZtKCksIHZhbHVlLT5kZXNlcmlhbGl6
ZShzY3JpcHRTdGF0ZSwgc2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgMCwgdGhy
b3dFeGNlcHRpb25zKSk7CiB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw3ICs0OCw3IEBAIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIGNsYXNzIFNjcmlw
dFZhbHVlIHsKIHB1YmxpYzoKICAgICBTY3JpcHRWYWx1ZSgpIHsgfQotICAgIFNjcmlwdFZhbHVl
KEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTVmFsdWUgdmFsdWUpIDogbV92
YWx1ZShnbG9iYWxEYXRhLCB2YWx1ZSkge30KKyAgICBTY3JpcHRWYWx1ZShKU0M6OlZNJiB2bSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKSA6IG1fdmFsdWUodm0sIHZhbHVlKSB7fQogICAgIHZpcnR1YWwg
flNjcmlwdFZhbHVlKCkge30KIAogICAgIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZS5nZXQoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0V3JhcHBhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0V3JhcHBhYmxlLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdFdyYXBwYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICsz
NSw3IEBACiAjaW5jbHVkZSA8aGVhcC9XZWFrLmg+CiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3Mg
SlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiBjbGFzcyBXZWFrSGFuZGxlT3duZXI7CiB9CiAKQEAg
LTQ2LDcgKzQ2LDcgQEAgY2xhc3MgSlNET01XcmFwcGVyOwogY2xhc3MgU2NyaXB0V3JhcHBhYmxl
IHsKIHB1YmxpYzoKICAgICBKU0RPTVdyYXBwZXIqIHdyYXBwZXIoKSBjb25zdDsKLSAgICB2b2lk
IHNldFdyYXBwZXIoSlNDOjpKU0dsb2JhbERhdGEmLCBKU0RPTVdyYXBwZXIqLCBKU0M6OldlYWtI
YW5kbGVPd25lciosIHZvaWQqKTsKKyAgICB2b2lkIHNldFdyYXBwZXIoSlNDOjpWTSYsIEpTRE9N
V3JhcHBlciosIEpTQzo6V2Vha0hhbmRsZU93bmVyKiwgdm9pZCopOwogICAgIHZvaWQgY2xlYXJX
cmFwcGVyKEpTRE9NV3JhcHBlciopOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFdyYXBwYWJsZUlubGluZXMuaAkocmV2aXNpb24g
MTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0V3JhcHBhYmxlSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIGlubGluZSBKU0RPTVdyYXBw
ZXIqIFNjcmlwdFdyYXBwYWJsZTo6d3IKICAgICByZXR1cm4gbV93cmFwcGVyLmdldCgpOwogfQog
Ci1pbmxpbmUgdm9pZCBTY3JpcHRXcmFwcGFibGU6OnNldFdyYXBwZXIoSlNDOjpKU0dsb2JhbERh
dGEmLCBKU0RPTVdyYXBwZXIqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVy
T3duZXIsIHZvaWQqIGNvbnRleHQpCitpbmxpbmUgdm9pZCBTY3JpcHRXcmFwcGFibGU6OnNldFdy
YXBwZXIoSlNDOjpWTSYsIEpTRE9NV3JhcHBlciogd3JhcHBlciwgSlNDOjpXZWFrSGFuZGxlT3du
ZXIqIHdyYXBwZXJPd25lciwgdm9pZCogY29udGV4dCkKIHsKICAgICBBU1NFUlQoIW1fd3JhcHBl
cik7CiAgICAgbV93cmFwcGVyID0gSlNDOjpQYXNzV2VhazxKU0RPTVdyYXBwZXI+KHdyYXBwZXIs
IHdyYXBwZXJPd25lciwgY29udGV4dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDE0ODYzOCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzODMsMTQgKzEzODMsMTQgQEAgcHJpdmF0ZToKICAgICAgICAg
Y2FzZSBUcnVlVGFnOgogICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbih0cnVlKTsKICAgICAg
ICAgY2FzZSBGYWxzZU9iamVjdFRhZzogewotICAgICAgICAgICAgQm9vbGVhbk9iamVjdCogb2Jq
ID0gQm9vbGVhbk9iamVjdDo6Y3JlYXRlKG1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2dsb2JhbE9i
amVjdC0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgIG9iai0+c2V0SW50
ZXJuYWxWYWx1ZShtX2V4ZWMtPmdsb2JhbERhdGEoKSwganNCb29sZWFuKGZhbHNlKSk7CisgICAg
ICAgICAgICBCb29sZWFuT2JqZWN0KiBvYmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUobV9leGVj
LT52bSgpLCBtX2dsb2JhbE9iamVjdC0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICAg
ICAgICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1ZShtX2V4ZWMtPnZtKCksIGpzQm9vbGVhbihmYWxz
ZSkpOwogICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQob2JqKTsKICAgICAgICAgICAgIHJl
dHVybiBvYmo7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBUcnVlT2JqZWN0VGFnOiB7Ci0gICAg
ICAgICAgICBCb29sZWFuT2JqZWN0KiBvYmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUobV9leGVj
LT5nbG9iYWxEYXRhKCksIG1fZ2xvYmFsT2JqZWN0LT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkp
OwotICAgICAgICAgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKG1fZXhlYy0+Z2xvYmFsRGF0YSgp
LCBqc0Jvb2xlYW4odHJ1ZSkpOworICAgICAgICAgICAgQm9vbGVhbk9iamVjdCogb2JqID0gQm9v
bGVhbk9iamVjdDo6Y3JlYXRlKG1fZXhlYy0+dm0oKSwgbV9nbG9iYWxPYmplY3QtPmJvb2xlYW5P
YmplY3RTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBvYmotPnNldEludGVybmFsVmFsdWUobV9l
eGVjLT52bSgpLCBqc0Jvb2xlYW4odHJ1ZSkpOwogICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBw
ZW5kKG9iaik7CiAgICAgICAgICAgICByZXR1cm4gb2JqOwogICAgICAgICB9CkBAIC0xNDgyLDcg
KzE0ODIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFN0cmluZy0+anNT
dHJpbmcobV9leGVjKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIEVtcHR5U3RyaW5nVGFnOgot
ICAgICAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoJm1fZXhlYy0+Z2xvYmFsRGF0YSgpKTsK
KyAgICAgICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKCZtX2V4ZWMtPnZtKCkpOwogICAgICAg
ICBjYXNlIFN0cmluZ09iamVjdFRhZzogewogICAgICAgICAgICAgQ2FjaGVkU3RyaW5nUmVmIGNh
Y2hlZFN0cmluZzsKICAgICAgICAgICAgIGlmICghcmVhZFN0cmluZ0RhdGEoY2FjaGVkU3RyaW5n
KSkKQEAgLTE0OTIsNyArMTQ5Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gb2Jq
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRW1wdHlTdHJpbmdPYmplY3RUYWc6IHsKLSAgICAg
ICAgICAgIFN0cmluZ09iamVjdCogb2JqID0gY29uc3RydWN0U3RyaW5nKG1fZXhlYywgbV9nbG9i
YWxPYmplY3QsIGpzRW1wdHlTdHJpbmcoJm1fZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAg
ICAgICBTdHJpbmdPYmplY3QqIG9iaiA9IGNvbnN0cnVjdFN0cmluZyhtX2V4ZWMsIG1fZ2xvYmFs
T2JqZWN0LCBqc0VtcHR5U3RyaW5nKCZtX2V4ZWMtPnZtKCkpKTsKICAgICAgICAgICAgIG1fZ2NC
dWZmZXIuYXBwZW5kKG9iaik7CiAgICAgICAgICAgICByZXR1cm4gb2JqOwogICAgICAgICB9CkBA
IC0xNTA1LDcgKzE1MDUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CiAgICAgICAgICAgICBSZWdFeHBGbGFncyByZUZsYWdzID0gcmVnRXhwRmxhZ3MoZmxh
Z3MtPnN0cmluZygpKTsKICAgICAgICAgICAgIEFTU0VSVChyZUZsYWdzICE9IEludmFsaWRGbGFn
cyk7Ci0gICAgICAgICAgICBSZWdFeHAqIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKG1fZXhlYy0+
Z2xvYmFsRGF0YSgpLCBwYXR0ZXJuLT5zdHJpbmcoKSwgcmVGbGFncyk7CisgICAgICAgICAgICBS
ZWdFeHAqIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKG1fZXhlYy0+dm0oKSwgcGF0dGVybi0+c3Ry
aW5nKCksIHJlRmxhZ3MpOwogICAgICAgICAgICAgcmV0dXJuIFJlZ0V4cE9iamVjdDo6Y3JlYXRl
KG1fZXhlYywgbV9leGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIG1fZ2xvYmFsT2JqZWN0LT5y
ZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKTsgCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBPYmpl
Y3RSZWZlcmVuY2VUYWc6IHsKQEAgLTE4NDksNyArMTg0OSw3IEBAIEpTVmFsdWUgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGkKIFNjcmlwdFZhbHVlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6ZGVzZXJpYWxpemVGb3JJbnNwZWN0b3IoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKQogewog
ICAgIEpTVmFsdWUgdmFsdWUgPSBkZXNlcmlhbGl6ZShzY3JpcHRTdGF0ZSwgc2NyaXB0U3RhdGUt
PmxleGljYWxHbG9iYWxPYmplY3QoKSwgMCk7Ci0gICAgcmV0dXJuIFNjcmlwdFZhbHVlKHNjcmlw
dFN0YXRlLT5nbG9iYWxEYXRhKCksIHZhbHVlKTsKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUoc2Ny
aXB0U3RhdGUtPnZtKCksIHZhbHVlKTsKIH0KICNlbmRpZgogCkBAIC0xOTAzLDcgKzE5MDMsNyBA
QCB2b2lkIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bWF5YmVUaHJvd0V4CiAgICAgICAgIHRocm93
RXJyb3IoZXhlYywgY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yOgotICAgICAgICB0aHJvd0Vy
cm9yKGV4ZWMsIGNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0aW9uKCZleGVjLT5nbG9i
YWxEYXRhKCkpKTsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVJbnRlcnJ1cHRlZEV4
ZWN1dGlvbkV4Y2VwdGlvbigmZXhlYy0+dm0oKSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IFZhbGlkYXRpb25FcnJvcjoKICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJy
b3IoZXhlYywgIlVuYWJsZSB0byBkZXNlcmlhbGl6ZSBkYXRhLiIpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgJKHJldmlzaW9u
IDE0ODYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERh
dGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDEwIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgV2ViQ29yZUpTQ2xpZW50RGF0YSA6IHB1YmxpYyBKU0M6OkpTR2xvYmFs
RGF0YTo6Q2xpZW50RGF0YSB7CitjbGFzcyBXZWJDb3JlSlNDbGllbnREYXRhIDogcHVibGljIEpT
Qzo6Vk06OkNsaWVudERhdGEgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYkNvcmVKU0Ns
aWVudERhdGEpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBmcmllbmQgY2xhc3MgSlNH
bG9iYWxEYXRhV29ybGRJdGVyYXRvcjsKLSAgICBmcmllbmQgdm9pZCBpbml0Tm9ybWFsV29ybGRD
bGllbnREYXRhKEpTQzo6SlNHbG9iYWxEYXRhKik7CisgICAgZnJpZW5kIGNsYXNzIFZNV29ybGRJ
dGVyYXRvcjsKKyAgICBmcmllbmQgdm9pZCBpbml0Tm9ybWFsV29ybGRDbGllbnREYXRhKEpTQzo6
Vk0qKTsKIAogcHVibGljOgogICAgIFdlYkNvcmVKU0NsaWVudERhdGEoKSB7IH0KQEAgLTcwLDEx
ICs3MCwxMSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IG1fbm9ybWFs
V29ybGQ7CiB9OwogCi1pbmxpbmUgdm9pZCBpbml0Tm9ybWFsV29ybGRDbGllbnREYXRhKEpTQzo6
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQoraW5saW5lIHZvaWQgaW5pdE5vcm1hbFdvcmxkQ2xp
ZW50RGF0YShKU0M6OlZNKiB2bSkKIHsKICAgICBXZWJDb3JlSlNDbGllbnREYXRhKiB3ZWJDb3Jl
SlNDbGllbnREYXRhID0gbmV3IFdlYkNvcmVKU0NsaWVudERhdGE7Ci0gICAgZ2xvYmFsRGF0YS0+
Y2xpZW50RGF0YSA9IHdlYkNvcmVKU0NsaWVudERhdGE7IC8vIH5KU0dsb2JhbERhdGEgZGVsZXRl
cyB0aGlzIHBvaW50ZXIuCi0gICAgd2ViQ29yZUpTQ2xpZW50RGF0YS0+bV9ub3JtYWxXb3JsZCA9
IERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKGdsb2JhbERhdGEsIHRydWUpOworICAgIHZtLT5jbGll
bnREYXRhID0gd2ViQ29yZUpTQ2xpZW50RGF0YTsgLy8gflZNIGRlbGV0ZXMgdGhpcyBwb2ludGVy
LgorICAgIHdlYkNvcmVKU0NsaWVudERhdGEtPm1fbm9ybWFsV29ybGQgPSBET01XcmFwcGVyV29y
bGQ6OmNyZWF0ZSh2bSwgdHJ1ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNTUgKzU2
LDU1IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdvcmtl
clNjcmlwdENvbnRyb2xsZXI6OldvcmtlclNjcmlwdENvbnRyb2xsZXIoV29ya2VyQ29udGV4dCog
d29ya2VyQ29udGV4dCkKLSAgICA6IG1fZ2xvYmFsRGF0YShKU0dsb2JhbERhdGE6OmNyZWF0ZSgp
KQorICAgIDogbV92bShWTTo6Y3JlYXRlKCkpCiAgICAgLCBtX3dvcmtlckNvbnRleHQod29ya2Vy
Q29udGV4dCkKLSAgICAsIG1fd29ya2VyQ29udGV4dFdyYXBwZXIoKm1fZ2xvYmFsRGF0YSkKKyAg
ICAsIG1fd29ya2VyQ29udGV4dFdyYXBwZXIoKm1fdm0pCiAgICAgLCBtX2V4ZWN1dGlvbkZvcmJp
ZGRlbihmYWxzZSkKIHsKLSAgICBpbml0Tm9ybWFsV29ybGRDbGllbnREYXRhKG1fZ2xvYmFsRGF0
YS5nZXQoKSk7CisgICAgaW5pdE5vcm1hbFdvcmxkQ2xpZW50RGF0YShtX3ZtLmdldCgpKTsKIH0K
IAogV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6fldvcmtlclNjcmlwdENvbnRyb2xsZXIoKQogewot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbERhdGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2sodm0oKSk7CiAgICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci5jbGVhcigpOwotICAgIG1fZ2xv
YmFsRGF0YS5jbGVhcigpOworICAgIG1fdm0uY2xlYXIoKTsKIH0KIAogdm9pZCBXb3JrZXJTY3Jp
cHRDb250cm9sbGVyOjppbml0U2NyaXB0KCkKIHsKICAgICBBU1NFUlQoIW1fd29ya2VyQ29udGV4
dFdyYXBwZXIpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2sobV9nbG9iYWxEYXRhLmdldCgpKTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX3ZtLmdldCgpKTsKIAogICAgIC8vIEV4cGxpY2l0bHkg
cHJvdGVjdCB0aGUgZ2xvYmFsIG9iamVjdCdzIHByb3RvdHlwZSBzbyBpdCBpc24ndCBjb2xsZWN0
ZWQKICAgICAvLyB3aGVuIHdlIGFsbG9jYXRlIHRoZSBnbG9iYWwgb2JqZWN0LiAoT25jZSB0aGUg
Z2xvYmFsIG9iamVjdCBpcyBmdWxseQogICAgIC8vIGNvbnN0cnVjdGVkLCBpdCBjYW4gbWFyayBp
dHMgb3duIHByb3RvdHlwZS4pCi0gICAgU3RydWN0dXJlKiB3b3JrZXJDb250ZXh0UHJvdG90eXBl
U3RydWN0dXJlID0gSlNXb3JrZXJDb250ZXh0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoKm1f
Z2xvYmFsRGF0YSwgMCwganNOdWxsKCkpOwotICAgIFN0cm9uZzxKU1dvcmtlckNvbnRleHRQcm90
b3R5cGU+IHdvcmtlckNvbnRleHRQcm90b3R5cGUoKm1fZ2xvYmFsRGF0YSwgSlNXb3JrZXJDb250
ZXh0UHJvdG90eXBlOjpjcmVhdGUoKm1fZ2xvYmFsRGF0YSwgMCwgd29ya2VyQ29udGV4dFByb3Rv
dHlwZVN0cnVjdHVyZSkpOworICAgIFN0cnVjdHVyZSogd29ya2VyQ29udGV4dFByb3RvdHlwZVN0
cnVjdHVyZSA9IEpTV29ya2VyQ29udGV4dFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKCptX3Zt
LCAwLCBqc051bGwoKSk7CisgICAgU3Ryb25nPEpTV29ya2VyQ29udGV4dFByb3RvdHlwZT4gd29y
a2VyQ29udGV4dFByb3RvdHlwZSgqbV92bSwgSlNXb3JrZXJDb250ZXh0UHJvdG90eXBlOjpjcmVh
dGUoKm1fdm0sIDAsIHdvcmtlckNvbnRleHRQcm90b3R5cGVTdHJ1Y3R1cmUpKTsKIAogICAgIGlm
IChtX3dvcmtlckNvbnRleHQtPmlzRGVkaWNhdGVkV29ya2VyQ29udGV4dCgpKSB7Ci0gICAgICAg
IFN0cnVjdHVyZSogZGVkaWNhdGVkQ29udGV4dFByb3RvdHlwZVN0cnVjdHVyZSA9IEpTRGVkaWNh
dGVkV29ya2VyQ29udGV4dFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKCptX2dsb2JhbERhdGEs
IDAsIHdvcmtlckNvbnRleHRQcm90b3R5cGUuZ2V0KCkpOwotICAgICAgICBTdHJvbmc8SlNEZWRp
Y2F0ZWRXb3JrZXJDb250ZXh0UHJvdG90eXBlPiBkZWRpY2F0ZWRDb250ZXh0UHJvdG90eXBlKCpt
X2dsb2JhbERhdGEsIEpTRGVkaWNhdGVkV29ya2VyQ29udGV4dFByb3RvdHlwZTo6Y3JlYXRlKCpt
X2dsb2JhbERhdGEsIDAsIGRlZGljYXRlZENvbnRleHRQcm90b3R5cGVTdHJ1Y3R1cmUpKTsKLSAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBKU0RlZGljYXRlZFdvcmtlckNvbnRleHQ6OmNy
ZWF0ZVN0cnVjdHVyZSgqbV9nbG9iYWxEYXRhLCAwLCBkZWRpY2F0ZWRDb250ZXh0UHJvdG90eXBl
LmdldCgpKTsKLQotICAgICAgICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLnNldCgqbV9nbG9iYWxE
YXRhLCBKU0RlZGljYXRlZFdvcmtlckNvbnRleHQ6OmNyZWF0ZSgqbV9nbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUsIHN0YXRpY19jYXN0PERlZGljYXRlZFdvcmtlckNvbnRleHQqPihtX3dvcmtlckNvbnRl
eHQpKSk7Ci0gICAgICAgIHdvcmtlckNvbnRleHRQcm90b3R5cGVTdHJ1Y3R1cmUtPnNldEdsb2Jh
bE9iamVjdCgqbV9nbG9iYWxEYXRhLCBtX3dvcmtlckNvbnRleHRXcmFwcGVyLmdldCgpKTsKLSAg
ICAgICAgZGVkaWNhdGVkQ29udGV4dFByb3RvdHlwZVN0cnVjdHVyZS0+c2V0R2xvYmFsT2JqZWN0
KCptX2dsb2JhbERhdGEsIG1fd29ya2VyQ29udGV4dFdyYXBwZXIuZ2V0KCkpOworICAgICAgICBT
dHJ1Y3R1cmUqIGRlZGljYXRlZENvbnRleHRQcm90b3R5cGVTdHJ1Y3R1cmUgPSBKU0RlZGljYXRl
ZFdvcmtlckNvbnRleHRQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSgqbV92bSwgMCwgd29ya2Vy
Q29udGV4dFByb3RvdHlwZS5nZXQoKSk7CisgICAgICAgIFN0cm9uZzxKU0RlZGljYXRlZFdvcmtl
ckNvbnRleHRQcm90b3R5cGU+IGRlZGljYXRlZENvbnRleHRQcm90b3R5cGUoKm1fdm0sIEpTRGVk
aWNhdGVkV29ya2VyQ29udGV4dFByb3RvdHlwZTo6Y3JlYXRlKCptX3ZtLCAwLCBkZWRpY2F0ZWRD
b250ZXh0UHJvdG90eXBlU3RydWN0dXJlKSk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gSlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0OjpjcmVhdGVTdHJ1Y3R1cmUoKm1fdm0sIDAsIGRl
ZGljYXRlZENvbnRleHRQcm90b3R5cGUuZ2V0KCkpOworCisgICAgICAgIG1fd29ya2VyQ29udGV4
dFdyYXBwZXIuc2V0KCptX3ZtLCBKU0RlZGljYXRlZFdvcmtlckNvbnRleHQ6OmNyZWF0ZSgqbV92
bSwgc3RydWN0dXJlLCBzdGF0aWNfY2FzdDxEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Kj4obV93b3Jr
ZXJDb250ZXh0KSkpOworICAgICAgICB3b3JrZXJDb250ZXh0UHJvdG90eXBlU3RydWN0dXJlLT5z
ZXRHbG9iYWxPYmplY3QoKm1fdm0sIG1fd29ya2VyQ29udGV4dFdyYXBwZXIuZ2V0KCkpOworICAg
ICAgICBkZWRpY2F0ZWRDb250ZXh0UHJvdG90eXBlU3RydWN0dXJlLT5zZXRHbG9iYWxPYmplY3Qo
Km1fdm0sIG1fd29ya2VyQ29udGV4dFdyYXBwZXIuZ2V0KCkpOwogICAgICAgICBBU1NFUlQoc3Ry
dWN0dXJlLT5nbG9iYWxPYmplY3QoKSA9PSBtX3dvcmtlckNvbnRleHRXcmFwcGVyKTsKICAgICAg
ICAgQVNTRVJUKG1fd29ya2VyQ29udGV4dFdyYXBwZXItPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmpl
Y3QoKSA9PSBtX3dvcmtlckNvbnRleHRXcmFwcGVyKTsKLSAgICAgICAgd29ya2VyQ29udGV4dFBy
b3RvdHlwZS0+c3RydWN0dXJlKCktPnNldEdsb2JhbE9iamVjdCgqbV9nbG9iYWxEYXRhLCBtX3dv
cmtlckNvbnRleHRXcmFwcGVyLmdldCgpKTsKLSAgICAgICAgZGVkaWNhdGVkQ29udGV4dFByb3Rv
dHlwZS0+c3RydWN0dXJlKCktPnNldEdsb2JhbE9iamVjdCgqbV9nbG9iYWxEYXRhLCBtX3dvcmtl
ckNvbnRleHRXcmFwcGVyLmdldCgpKTsKKyAgICAgICAgd29ya2VyQ29udGV4dFByb3RvdHlwZS0+
c3RydWN0dXJlKCktPnNldEdsb2JhbE9iamVjdCgqbV92bSwgbV93b3JrZXJDb250ZXh0V3JhcHBl
ci5nZXQoKSk7CisgICAgICAgIGRlZGljYXRlZENvbnRleHRQcm90b3R5cGUtPnN0cnVjdHVyZSgp
LT5zZXRHbG9iYWxPYmplY3QoKm1fdm0sIG1fd29ya2VyQ29udGV4dFdyYXBwZXIuZ2V0KCkpOwog
I2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQo
bV93b3JrZXJDb250ZXh0LT5pc1NoYXJlZFdvcmtlckNvbnRleHQoKSk7Ci0gICAgICAgIFN0cnVj
dHVyZSogc2hhcmVkQ29udGV4dFByb3RvdHlwZVN0cnVjdHVyZSA9IEpTU2hhcmVkV29ya2VyQ29u
dGV4dFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKCptX2dsb2JhbERhdGEsIDAsIHdvcmtlckNv
bnRleHRQcm90b3R5cGUuZ2V0KCkpOwotICAgICAgICBTdHJvbmc8SlNTaGFyZWRXb3JrZXJDb250
ZXh0UHJvdG90eXBlPiBzaGFyZWRDb250ZXh0UHJvdG90eXBlKCptX2dsb2JhbERhdGEsIEpTU2hh
cmVkV29ya2VyQ29udGV4dFByb3RvdHlwZTo6Y3JlYXRlKCptX2dsb2JhbERhdGEsIDAsIHNoYXJl
ZENvbnRleHRQcm90b3R5cGVTdHJ1Y3R1cmUpKTsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBKU1NoYXJlZFdvcmtlckNvbnRleHQ6OmNyZWF0ZVN0cnVjdHVyZSgqbV9nbG9iYWxEYXRh
LCAwLCBzaGFyZWRDb250ZXh0UHJvdG90eXBlLmdldCgpKTsKLQotICAgICAgICBtX3dvcmtlckNv
bnRleHRXcmFwcGVyLnNldCgqbV9nbG9iYWxEYXRhLCBKU1NoYXJlZFdvcmtlckNvbnRleHQ6OmNy
ZWF0ZSgqbV9nbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIHN0YXRpY19jYXN0PFNoYXJlZFdvcmtlckNv
bnRleHQqPihtX3dvcmtlckNvbnRleHQpKSk7Ci0gICAgICAgIHdvcmtlckNvbnRleHRQcm90b3R5
cGUtPnN0cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3QoKm1fZ2xvYmFsRGF0YSwgbV93b3JrZXJD
b250ZXh0V3JhcHBlci5nZXQoKSk7Ci0gICAgICAgIHNoYXJlZENvbnRleHRQcm90b3R5cGUtPnN0
cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3QoKm1fZ2xvYmFsRGF0YSwgbV93b3JrZXJDb250ZXh0
V3JhcHBlci5nZXQoKSk7CisgICAgICAgIFN0cnVjdHVyZSogc2hhcmVkQ29udGV4dFByb3RvdHlw
ZVN0cnVjdHVyZSA9IEpTU2hhcmVkV29ya2VyQ29udGV4dFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0
dXJlKCptX3ZtLCAwLCB3b3JrZXJDb250ZXh0UHJvdG90eXBlLmdldCgpKTsKKyAgICAgICAgU3Ry
b25nPEpTU2hhcmVkV29ya2VyQ29udGV4dFByb3RvdHlwZT4gc2hhcmVkQ29udGV4dFByb3RvdHlw
ZSgqbV92bSwgSlNTaGFyZWRXb3JrZXJDb250ZXh0UHJvdG90eXBlOjpjcmVhdGUoKm1fdm0sIDAs
IHNoYXJlZENvbnRleHRQcm90b3R5cGVTdHJ1Y3R1cmUpKTsKKyAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBKU1NoYXJlZFdvcmtlckNvbnRleHQ6OmNyZWF0ZVN0cnVjdHVyZSgqbV92bSwg
MCwgc2hhcmVkQ29udGV4dFByb3RvdHlwZS5nZXQoKSk7CisKKyAgICAgICAgbV93b3JrZXJDb250
ZXh0V3JhcHBlci5zZXQoKm1fdm0sIEpTU2hhcmVkV29ya2VyQ29udGV4dDo6Y3JlYXRlKCptX3Zt
LCBzdHJ1Y3R1cmUsIHN0YXRpY19jYXN0PFNoYXJlZFdvcmtlckNvbnRleHQqPihtX3dvcmtlckNv
bnRleHQpKSk7CisgICAgICAgIHdvcmtlckNvbnRleHRQcm90b3R5cGUtPnN0cnVjdHVyZSgpLT5z
ZXRHbG9iYWxPYmplY3QoKm1fdm0sIG1fd29ya2VyQ29udGV4dFdyYXBwZXIuZ2V0KCkpOworICAg
ICAgICBzaGFyZWRDb250ZXh0UHJvdG90eXBlLT5zdHJ1Y3R1cmUoKS0+c2V0R2xvYmFsT2JqZWN0
KCptX3ZtLCBtX3dvcmtlckNvbnRleHRXcmFwcGVyLmdldCgpKTsKICNlbmRpZgogICAgIH0KICAg
ICBBU1NFUlQobV93b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xvYmFsT2JqZWN0KCkgPT0gbV93b3Jr
ZXJDb250ZXh0V3JhcHBlcik7CkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBXb3JrZXJTY3JpcHRD
b250cm9sbGVyOjpldmFsdWF0ZShjbwogICAgIFNjcmlwdFZhbHVlIGV4Y2VwdGlvbjsKICAgICBl
dmFsdWF0ZShzb3VyY2VDb2RlLCAmZXhjZXB0aW9uKTsKICAgICBpZiAoZXhjZXB0aW9uLmpzVmFs
dWUoKSkgewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxEYXRhKCkpOworICAgICAg
ICBKU0xvY2tIb2xkZXIgbG9jayh2bSgpKTsKICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKG1fd29y
a2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbEV4ZWMoKSwgZXhjZXB0aW9uLmpzVmFsdWUoKSk7CiAg
ICAgfQogfQpAQCAtMTM3LDcgKzEzNyw3IEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6
ZXZhbHVhdGUoY28KICAgICBKU1ZhbHVlIGV2YWx1YXRpb25FeGNlcHRpb247CiAgICAgSlNDOjpl
dmFsdWF0ZShleGVjLCBzb3VyY2VDb2RlLmpzU291cmNlQ29kZSgpLCBtX3dvcmtlckNvbnRleHRX
cmFwcGVyLmdldCgpLCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAKLSAgICBpZiAoKGV2YWx1YXRp
b25FeGNlcHRpb24gJiYgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV2YWx1YXRpb25F
eGNlcHRpb24pKSB8fCAgbV93b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xvYmFsRGF0YSgpLnRlcm1p
bmF0b3Iuc2hvdWxkVGVybWluYXRlKCkpIHsKKyAgICBpZiAoKGV2YWx1YXRpb25FeGNlcHRpb24g
JiYgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV2YWx1YXRpb25FeGNlcHRpb24pKSB8
fCAgbV93b3JrZXJDb250ZXh0V3JhcHBlci0+dm0oKS50ZXJtaW5hdG9yLnNob3VsZFRlcm1pbmF0
ZSgpKSB7CiAgICAgICAgIGZvcmJpZEV4ZWN1dGlvbigpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMTQ3LDkgKzE0Nyw5IEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVh
dGUoY28KICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSAwOwogICAgICAgICBTdHJpbmcgc291cmNl
VVJMID0gc291cmNlQ29kZS51cmwoKS5zdHJpbmcoKTsKICAgICAgICAgaWYgKG1fd29ya2VyQ29u
dGV4dC0+c2FuaXRpemVTY3JpcHRFcnJvcihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJj
ZVVSTCwgc291cmNlQ29kZS5jYWNoZWRTY3JpcHQoKSkpCi0gICAgICAgICAgICAqZXhjZXB0aW9u
ID0gU2NyaXB0VmFsdWUoKm1fZ2xvYmFsRGF0YSwgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVFcnJv
cihleGVjLCBlcnJvck1lc3NhZ2UuaW1wbCgpKSkpOworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9
IFNjcmlwdFZhbHVlKCptX3ZtLCB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGVy
cm9yTWVzc2FnZS5pbXBsKCkpKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICpleGNlcHRp
b24gPSBTY3JpcHRWYWx1ZSgqbV9nbG9iYWxEYXRhLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAg
ICAgICAgICAgICpleGNlcHRpb24gPSBTY3JpcHRWYWx1ZSgqbV92bSwgZXZhbHVhdGlvbkV4Y2Vw
dGlvbik7CiAgICAgfQogfQogCkBAIC0xNjQsMTQgKzE2NCwxNCBAQCB2b2lkIFdvcmtlclNjcmlw
dENvbnRyb2xsZXI6OnNjaGVkdWxlRXhlCiAgICAgLy8gdGVybWluYXRpb24gaXMgc2NoZWR1bGVk
LCBpc0V4ZWN1dGlvblRlcm1pbmF0aW5nIHdpbGwKICAgICAvLyBhY2N1cmF0ZWx5IHJlZmxlY3Qg
dGhhdCBzdGF0ZSB3aGVuIGNhbGxlZCBmcm9tIGFub3RoZXIgdGhyZWFkLgogICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX3NjaGVkdWxlZFRlcm1pbmF0aW9uTXV0ZXgpOwotICAgIG1fZ2xvYmFsRGF0
YS0+dGVybWluYXRvci50ZXJtaW5hdGVTb29uKCk7CisgICAgbV92bS0+dGVybWluYXRvci50ZXJt
aW5hdGVTb29uKCk7CiB9CiAKIGJvb2wgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6aXNFeGVjdXRp
b25UZXJtaW5hdGluZygpIGNvbnN0CiB7CiAgICAgLy8gU2VlIGNvbW1lbnRzIGluIHNjaGVkdWxl
RXhlY3V0aW9uVGVybWluYXRpb24gcmVnYXJkaW5nIG11dGV4IHVzYWdlLgogICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX3NjaGVkdWxlZFRlcm1pbmF0aW9uTXV0ZXgpOwotICAgIHJldHVybiBtX2ds
b2JhbERhdGEtPnRlcm1pbmF0b3Iuc2hvdWxkVGVybWluYXRlKCk7CisgICAgcmV0dXJuIG1fdm0t
PnRlcm1pbmF0b3Iuc2hvdWxkVGVybWluYXRlKCk7CiB9CiAKIHZvaWQgV29ya2VyU2NyaXB0Q29u
dHJvbGxlcjo6Zm9yYmlkRXhlY3V0aW9uKCkKQEAgLTE4OSw3ICsxODksNyBAQCBib29sIFdvcmtl
clNjcmlwdENvbnRyb2xsZXI6OmlzRXhlY3V0aW9uCiB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xs
ZXI6OmRpc2FibGVFdmFsKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQogewogICAgIGluaXRT
Y3JpcHRJZk5lZWRlZCgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbERhdGEoKSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2sodm0oKSk7CiAKICAgICBtX3dvcmtlckNvbnRleHRXcmFwcGVy
LT5zZXRFdmFsRW5hYmxlZChmYWxzZSwgZXJyb3JNZXNzYWdlKTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgJKHJl
dmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlw
dENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7Ci0gICAgY2xhc3MgSlNHbG9iYWxE
YXRhOworICAgIGNsYXNzIFZNOwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03Nyw3ICs3
Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIGRpc2FibGVFdmFsKGNv
bnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKIAotICAgICAgICBKU0M6OkpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSgpIHsgcmV0dXJuIG1fZ2xvYmFsRGF0YS5nZXQoKTsgfQorICAgICAgICBKU0M6
OlZNKiB2bSgpIHsgcmV0dXJuIG1fdm0uZ2V0KCk7IH0KIAogICAgICAgICB2b2lkIGF0dGFjaERl
YnVnZ2VyKEpTQzo6RGVidWdnZXIqKTsKICAgICAgICAgdm9pZCBkZXRhY2hEZWJ1Z2dlcihKU0M6
OkRlYnVnZ2VyKik7CkBAIC05MCw3ICs5MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgfQogICAgICAgICB2b2lkIGluaXRTY3JpcHQoKTsKIAotICAgICAgICBSZWZQdHI8SlNDOjpK
U0dsb2JhbERhdGE+IG1fZ2xvYmFsRGF0YTsKKyAgICAgICAgUmVmUHRyPEpTQzo6Vk0+IG1fdm07
CiAgICAgICAgIFdvcmtlckNvbnRleHQqIG1fd29ya2VyQ29udGV4dDsKICAgICAgICAgSlNDOjpT
dHJvbmc8SlNXb3JrZXJDb250ZXh0PiBtX3dvcmtlckNvbnRleHRXcmFwcGVyOwogICAgICAgICBi
b29sIG1fZXhlY3V0aW9uRm9yYmlkZGVuOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gMTQ4
NjM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0RGVidWdTZXJ2
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxNCArNjgsMTQgQEAgdm9pZCBXb3JrZXJTY3Jp
cHREZWJ1Z1NlcnZlcjo6d2lsbEV4ZWN1dAogCiB2b2lkIFdvcmtlclNjcmlwdERlYnVnU2VydmVy
OjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhUaW1lcjxTY3JpcHREZWJ1Z1NlcnZlcj4qKQogewot
ICAgIEpTQzo6SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gbV93b3JrZXJDb250ZXh0LT5zY3Jp
cHQoKS0+Z2xvYmFsRGF0YSgpOworICAgIEpTQzo6Vk0qIHZtID0gbV93b3JrZXJDb250ZXh0LT5z
Y3JpcHQoKS0+dm0oKTsKIAotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsRGF0YSk7
CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgLy8gSWYgSmF2YVNjcmlwdCBz
dGFjayBpcyBub3QgZW1wdHkgcG9zdHBvbmUgcmVjb21waWxhdGlvbi4KLSAgICBpZiAoZ2xvYmFs
RGF0YS0+ZHluYW1pY0dsb2JhbE9iamVjdCkKKyAgICBpZiAodm0tPmR5bmFtaWNHbG9iYWxPYmpl
Y3QpCiAgICAgICAgIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpOwogICAgIGVsc2UKLSAg
ICAgICAgSlNDOjpEZWJ1Z2dlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoZ2xvYmFsRGF0YSk7
CisgICAgICAgIEpTQzo6RGVidWdnZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKHZtKTsKIH0K
IAogdm9pZCBXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVi
dWdMaXN0ZW5lciogbGlzdGVuZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpj
L1dlYlNjcmlwdE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAg
LTUzMiw3ICs1MzIsNyBAQCArIChpZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6KEpTQzo6SlNW
CiB7CiAgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgSlNPYmplY3QqIG9iamVj
dCA9IGFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2socm9vdE9iamVj
dC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT52bSgpKTsKIAogICAgICAgICBpZiAob2Jq
ZWN0LT5pbmhlcml0cygmSlNIVE1MRWxlbWVudDo6c19pbmZvKSkgewogICAgICAgICAgICAgLy8g
UGx1Z2luIGVsZW1lbnRzIGNhY2hlIHRoZSBpbnN0YW5jZSBpbnRlcm5hbGx5LgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0J
KHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC03MzMsMTkgKzczMywxOSBAQCBzdWIg
R2VuZXJhdGVIZWFkZXIKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHVibGljOlxuIik7CiAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB0eXBlZGVmICRwYXJlbnRDbGFzc05hbWUgQmFz
ZTtcbiIpOwogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgewotICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyAkY2xhc3NOYW1lKiBjcmVhdGUoSlND
OjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBh
c3NSZWZQdHI8JGltcGxUeXBlPiBpbXBsLCBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbClc
biIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyAkY2xhc3NOYW1l
KiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQ
dHI8JGltcGxUeXBlPiBpbXBsLCBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbClcbiIpOwog
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHtcbiIpOwotICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgICAgICAkY2xhc3NOYW1lKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpT
Qzo6YWxsb2NhdGVDZWxsPCRjbGFzc05hbWU+KGdsb2JhbERhdGEuaGVhcCkpICR7Y2xhc3NOYW1l
fShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGltcGwsIHdpbmRvd1NoZWxsKTtcbiIpOwotICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2Jh
bERhdGEsIHdpbmRvd1NoZWxsKTtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgICAgICBnbG9iYWxEYXRhLmhlYXAuYWRkRmluYWxpemVyKHB0ciwgZGVzdHJveSk7XG4iKTsK
KyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgJGNsYXNzTmFtZSogcHRyID0g
bmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDwkY2xhc3NOYW1lPih2bS5oZWFwKSkgJHtj
bGFzc05hbWV9KHZtLCBzdHJ1Y3R1cmUsIGltcGwsIHdpbmRvd1NoZWxsKTtcbiIpOworICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCB3
aW5kb3dTaGVsbCk7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAg
dm0uaGVhcC5hZGRGaW5hbGl6ZXIocHRyLCBkZXN0cm95KTtcbiIpOwogICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgICAgICByZXR1cm4gcHRyO1xuIik7CiAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgfVxuXG4iKTsKICAgICB9IGVsc2lmICgkaW50ZXJmYWNlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiSXNXb3JrZXJDb250ZXh0In0pIHsKLSAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBzdGF0aWMgJGNsYXNzTmFtZSogY3JlYXRlKEpTQzo6SlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPCRp
bXBsVHlwZT4gaW1wbClcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0
YXRpYyAkY2xhc3NOYW1lKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFBhc3NSZWZQdHI8JGltcGxUeXBlPiBpbXBsKVxuIik7CiAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAge1xuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgICAgICRjbGFzc05hbWUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
JGNsYXNzTmFtZT4oZ2xvYmFsRGF0YS5oZWFwKSkgJHtjbGFzc05hbWV9KGdsb2JhbERhdGEsIHN0
cnVjdHVyZSwgaW1wbCk7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAg
ICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTtcbiIpOwotICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgICAgICBnbG9iYWxEYXRhLmhlYXAuYWRkRmluYWxpemVyKHB0ciwg
ZGVzdHJveSk7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgJGNs
YXNzTmFtZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDwkY2xhc3NOYW1l
Pih2bS5oZWFwKSkgJHtjbGFzc05hbWV9KHZtLCBzdHJ1Y3R1cmUsIGltcGwpO1xuIik7CisgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0p
O1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIHZtLmhlYXAuYWRk
RmluYWxpemVyKHB0ciwgZGVzdHJveSk7XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICAgICAgcmV0dXJuIHB0cjtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIH1cblxuIik7CiAgICAgfSBlbHNpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Ik1hc3F1ZXJhZGVzQXNVbmRlZmluZWQifSkgewpAQCAtNzUzLDE2ICs3NTMsMTYgQEAg
c3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3Rh
dGljICRjbGFzc05hbWUqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4gaW1wbClcbiIp
OwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHtcbiIpOwogICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiICAgICAgICBnbG9iYWxPYmplY3QtPm1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWRXYXRjaHBvaW50KCktPm5vdGlmeVdyaXRlKCk7XG4iKTsKLSAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICAgICAgJGNsYXNzTmFtZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6
OmFsbG9jYXRlQ2VsbDwkY2xhc3NOYW1lPihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFw
KSkgJGNsYXNzTmFtZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7XG4iKTsKLSAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9i
YWxPYmplY3QtPmdsb2JhbERhdGEoKSk7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICAgICAgJGNsYXNzTmFtZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRl
Q2VsbDwkY2xhc3NOYW1lPihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpICRjbGFzc05hbWUoc3Ry
dWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTtc
biIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICByZXR1cm4gcHRyO1xu
Iik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgfVxuXG4iKTsKICAgICB9IGVs
c2UgewogICAgICAgICBBZGRJbmNsdWRlc0ZvclR5cGVJbkhlYWRlcigkaW1wbFR5cGUpIHVubGVz
cyAkc3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5cGU7CiAgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgc3RhdGljICRjbGFzc05hbWUqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPCRpbXBs
VHlwZT4gaW1wbClcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHtcbiIp
OwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICAkY2xhc3NOYW1lKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPCRjbGFzc05hbWU+KGdsb2JhbE9iamVj
dC0+Z2xvYmFsRGF0YSgpLmhlYXApKSAkY2xhc3NOYW1lKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0
LCBpbXBsKTtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICBwdHIt
PmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKTtcbiIpOworICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICAkY2xhc3NOYW1lKiBwdHIgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPCRjbGFzc05hbWU+KGdsb2JhbE9iamVjdC0+dm0oKS5o
ZWFwKSkgJGNsYXNzTmFtZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7XG4iKTsKKyAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihn
bG9iYWxPYmplY3QtPnZtKCkpO1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgICAgIHJldHVybiBwdHI7XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICB9XG5cbiIpOwogICAgIH0KQEAgLTg0MywxMiArODQzLDEyIEBAIHN1YiBHZW5lcmF0ZUhlYWRl
cgogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgewogICAgICAgICAkc3Ry
dWN0dXJlRmxhZ3N7IkpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIn0gPSAxOwogICAgIH0KLSAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpXG4iKTsKKyAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
SlNWYWx1ZSBwcm90b3R5cGUpXG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHtc
biIpOwogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IiB8fCAkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSXNXb3JrZXJDb250ZXh0In0pIHsKLSAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUo
Z2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpH
bG9iYWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pO1xuIik7CisgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Okdsb2Jh
bE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7XG4iKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICByZXR1cm4gSlNDOjpTdHJ1
Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7XG4iKTsK
KyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpT
Qzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTtcbiIpOwogICAgIH0KICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIH1cblxuIik7CiAKQEAgLTk3OSwxMiArOTc5LDEy
IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJwcm90ZWN0
ZWQ6XG4iKTsKICAgICAjIENvbnN0cnVjdG9yCiAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJE
T01XaW5kb3ciKSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFt
ZShKU0M6OkpTR2xvYmFsRGF0YSYsIEpTQzo6U3RydWN0dXJlKiwgUGFzc1JlZlB0cjwkaW1wbFR5
cGU+LCBKU0RPTVdpbmRvd1NoZWxsKik7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICAkY2xhc3NOYW1lKEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFBhc3NSZWZQdHI8
JGltcGxUeXBlPiwgSlNET01XaW5kb3dTaGVsbCopO1xuIik7CiAgICAgfSBlbHNpZiAoJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IklzV29ya2VyQ29udGV4dCJ9KSB7Ci0gICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShKU0M6OkpTR2xvYmFsRGF0YSYs
IEpTQzo6U3RydWN0dXJlKiwgUGFzc1JlZlB0cjwkaW1wbFR5cGU+KTtcbiIpOworICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRjbGFzc05hbWUoSlNDOjpWTSYsIEpTQzo6U3RydWN0
dXJlKiwgUGFzc1JlZlB0cjwkaW1wbFR5cGU+KTtcbiIpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShKU0M6OlN0cnVjdHVyZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjwkaW1wbFR5cGU+KTtcbiIpOwotICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpKU0dsb2Jh
bERhdGEmKTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNDOjpWTSYpO1xuIik7CiAgICAgfQogCiAgICAgIyBzdHJ1Y3R1cmUgZmxh
Z3MKQEAgLTEwNjMsNyArMTA2Myw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIH0KICAgICBp
ZiAoISRoYXNQYXJlbnQgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTR2Vu
ZXJhdGVUb05hdGl2ZU9iamVjdCJ9KSB7CiAgICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAi
Tm9kZUZpbHRlciIpIHsKLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJQYXNzUmVm
UHRyPE5vZGVGaWx0ZXI+IHRvTm9kZUZpbHRlcihKU0M6OkpTR2xvYmFsRGF0YSYsIEpTQzo6SlNW
YWx1ZSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJQYXNzUmVmUHRy
PE5vZGVGaWx0ZXI+IHRvTm9kZUZpbHRlcihKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTtcbiIpOwog
ICAgICAgICB9IGVsc2lmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NU3RyaW5nTGlzdCIpIHsKICAg
ICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+
IHRvRE9NU3RyaW5nTGlzdChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7XG4iKTsKICAg
ICAgICAgfSBlbHNlIHsKQEAgLTEwODUsMTAgKzEwODUsMTAgQEAgc3ViIEdlbmVyYXRlSGVhZGVy
CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6SlNPYmplY3Qq
IHNlbGYoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7XG4iKTsKICAgICB9
CiAKLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyAke2NsYXNzTmFtZX1Qcm90
b3R5cGUqIGNyZWF0ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKVxuIik7Cisg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgJHtjbGFzc05hbWV9UHJvdG90eXBl
KiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSlcbiIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAge1xuIik7Ci0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgJHtjbGFzc05h
bWV9UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPCR7Y2xh
c3NOYW1lfVByb3RvdHlwZT4oZ2xvYmFsRGF0YS5oZWFwKSkgJHtjbGFzc05hbWV9UHJvdG90eXBl
KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTtcbiIpOwotICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7XG4i
KTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICAke2NsYXNzTmFtZX1Qcm90b3R5
cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8JHtjbGFzc05hbWV9UHJv
dG90eXBlPih2bS5oZWFwKSkgJHtjbGFzc05hbWV9UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSk7XG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICBwdHIt
PmZpbmlzaENyZWF0aW9uKHZtKTtcbiIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
ICAgIHJldHVybiBwdHI7XG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIH1cblxu
Iik7CiAKQEAgLTExMDIsOSArMTEwMiw5IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICAk
c3RydWN0dXJlRmxhZ3N7IkpTQzo6T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiJ9ID0gMTsKICAgICB9
CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwKLSAgICAgICAgIiAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKVxu
IiAuCisgICAgICAgICIgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSlcbiIgLgogICAgICAgICAiICAgIHtcbiIgLgotICAgICAgICAiICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7XG4iIC4KKyAgICAgICAgIiAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTtcbiIgLgogICAgICAgICAiICAg
IH1cbiIpOwogICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0
b21OYW1lZEdldHRlck9uUHJvdG90eXBlIn0pIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICBzdGF0aWMgdm9pZCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7XG4i
KTsKQEAgLTExMTUsNyArMTExNSw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09i
amVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlE
ZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21EZWZpbmVPd25Qcm9wZXJ0eU9uUHJvdG90eXBlIn07CiAK
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5wcml2YXRlOlxuIik7Ci0gICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX1Qcm90b3R5cGUoSlNDOjpKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpIHsgfVxu
Iik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX1Qcm90b3R5cGUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH1cbiIpOwogCiAg
ICAgIyBzdHJ1Y3R1cmUgZmxhZ3MKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHJvdGVjdGVk
OlxuIik7CkBAIC0xNzA3LDcgKzE3MDcsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
ICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNOb1N0YXRpY1RhYmxl
cyJ9KSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAic3RhdGljIGNvbnN0IEhhc2hUYWJs
ZSogZ2V0JHtjbGFzc05hbWV9UHJvdG90eXBlVGFibGUoRXhlY1N0YXRlKiBleGVjKVxuIik7CiAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIHJldHVybiBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKGV4ZWMtPmdsb2JhbERh
dGEoKSwgJiR7Y2xhc3NOYW1lfVByb3RvdHlwZVRhYmxlKTtcbiIpOworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICByZXR1cm4gZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShleGVjLT52
bSgpLCAmJHtjbGFzc05hbWV9UHJvdG90eXBlVGFibGUpO1xuIik7CiAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAifVxuXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJjb25zdCBD
bGFzc0luZm8gJHtjbGFzc05hbWV9UHJvdG90eXBlOjpzX2luZm8gPSB7IFwiJHt2aXNpYmxlSW50
ZXJmYWNlTmFtZX1Qcm90b3R5cGVcIiwgJkJhc2U6OnNfaW5mbywgMCwgZ2V0JHtjbGFzc05hbWV9
UHJvdG90eXBlVGFibGUsIENSRUFURV9NRVRIT0RfVEFCTEUoJHtjbGFzc05hbWV9UHJvdG90eXBl
KSB9O1xuXG4iKTsKICAgICB9IGVsc2UgewpAQCAtMTc2Niw3ICsxNzY2LDcgQEAgc3ViIEdlbmVy
YXRlSW1wbGVtZW50YXRpb24KICAgICBpZiAoJG51bUF0dHJpYnV0ZXMgPiAwICYmICRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU05vU3RhdGljVGFibGVzIn0pIHsKICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBnZXQke2NsYXNzTmFt
ZX1UYWJsZShFeGVjU3RhdGUqIGV4ZWMpXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ7XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGdldEhhc2hU
YWJsZUZvckdsb2JhbERhdGEoZXhlYy0+Z2xvYmFsRGF0YSgpLCAmJHtjbGFzc05hbWV9VGFibGUp
O1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBnZXRIYXNoVGFi
bGVGb3JHbG9iYWxEYXRhKGV4ZWMtPnZtKCksICYke2NsYXNzTmFtZX1UYWJsZSk7XG4iKTsKICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAgIH0KIApAQCAtMTc5NSwxNCAr
MTc5NSwxNCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICMgQ29uc3RydWN0b3IK
ICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKICAgICAgICAgQWRkSW5j
bHVkZXNGb3JUeXBlSW5JbXBsKCJKU0RPTVdpbmRvd1NoZWxsIik7Ci0gICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiJHtjbGFzc05hbWV9OjokY2xhc3NOYW1lKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8JGltcGxUeXBlPiBpbXBsLCBK
U0RPTVdpbmRvd1NoZWxsKiBzaGVsbClcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICA6ICRwYXJlbnRDbGFzc05hbWUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBpbXBsLCBzaGVs
bClcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NOYW1lfTo6JGNsYXNz
TmFtZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4g
aW1wbCwgSlNET01XaW5kb3dTaGVsbCogc2hlbGwpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgOiAkcGFyZW50Q2xhc3NOYW1lKHZtLCBzdHJ1Y3R1cmUsIGltcGwsIHNoZWxs
KVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICB9IGVsc2lmICgkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiSXNXb3JrZXJDb250ZXh0In0pIHsKICAgICAgICAgQWRkSW5jbHVkZXNG
b3JUeXBlSW5JbXBsKCRpbnRlcmZhY2VOYW1lKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIke2NsYXNzTmFtZX06OiRjbGFzc05hbWUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjwkaW1wbFR5cGU+IGltcGwpXG4iKTsKLSAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgOiAkcGFyZW50Q2xhc3NOYW1lKGdsb2JhbERhdGEs
IHN0cnVjdHVyZSwgaW1wbClcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xh
c3NOYW1lfTo6JGNsYXNzTmFtZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVm
UHRyPCRpbXBsVHlwZT4gaW1wbClcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICA6ICRwYXJlbnRDbGFzc05hbWUodm0sIHN0cnVjdHVyZSwgaW1wbClcbiIpOwogICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1c
blxuIik7CiAgICAgfSBlbHNlIHsKQEAgLTE4MTYsMTIgKzE4MTYsMTIgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogCi0gICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSlcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05h
bWV9OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ7XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pO1xuIik7CiAgICAgICAgIGlmICgkY29kZUdlbmVy
YXRvci0+SXNUeXBlZEFycmF5VHlwZSgkaW1wbFR5cGUpIGFuZCAoJGltcGxUeXBlIG5lICJBcnJh
eUJ1ZmZlclZpZXciKSBhbmQgKCRpbXBsVHlwZSBuZSAiQXJyYXlCdWZmZXIiKSkgewogICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgZGVzY3Jp
cHRvcigmJHtjbGFzc05hbWV9OjpzX2luZm8sIE9CSkVDVF9PRkZTRVRPRigke2NsYXNzTmFtZX0s
IG1fc3RvcmFnZSksIE9CSkVDVF9PRkZTRVRPRigke2NsYXNzTmFtZX0sIG1fc3RvcmFnZUxlbmd0
aCkpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBnbG9iYWxEYXRh
LnJlZ2lzdGVyVHlwZWRBcnJheURlc2NyaXB0b3IoaW1wbCgpLCBkZXNjcmlwdG9yKTtcbiIpOwor
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdm0ucmVnaXN0ZXJUeXBlZEFycmF5
RGVzY3JpcHRvcihpbXBsKCksIGRlc2NyaXB0b3IpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBtX3N0b3JhZ2UgPSBpbXBsKCktPmRhdGEoKTtcbiIpOwogICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgbV9zdG9yYWdlTGVuZ3RoID0gaW1wbCgpLT5s
ZW5ndGgoKTtcbiIpOwogICAgICAgICB9CkBAIC0xODMzLDEwICsxODMzLDEwIEBAIHN1YiBHZW5l
cmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNPYmplY3Qq
ICR7Y2xhc3NOYW1lfTo6Y3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdClcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntc
biIpOwogICAgICAgICBpZiAoJGhhc1BhcmVudCAmJiAkcGFyZW50Q2xhc3NOYW1lIG5lICJKU0M6
OkRPTU5vZGVGaWx0ZXIiKSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBy
ZXR1cm4gJHtjbGFzc05hbWV9UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBn
bG9iYWxPYmplY3QsICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCAke3BhcmVudENsYXNzTmFtZX1Qcm90b3R5cGU6
OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSkpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICByZXR1cm4gJHtjbGFzc05hbWV9UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+
dm0oKSwgZ2xvYmFsT2JqZWN0LCAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT52bSgpLCBnbG9iYWxPYmplY3QsICR7cGFyZW50Q2xhc3NOYW1lfVByb3RvdHlwZTo6
c2VsZihleGVjLCBnbG9iYWxPYmplY3QpKSk7XG4iKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIG15ICRwcm90b3R5cGUgPSAkaW50ZXJmYWNlLT5pc0V4Y2VwdGlvbiA/ICJlcnJvclBy
b3RvdHlwZSIgOiAib2JqZWN0UHJvdG90eXBlIjsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIHJldHVybiAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmNyZWF0ZShleGVjLT5nbG9i
YWxEYXRhKCksIGdsb2JhbE9iamVjdCwgJHtjbGFzc05hbWV9UHJvdG90eXBlOjpjcmVhdGVTdHJ1
Y3R1cmUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LT4ke3Byb3RvdHlwZX0oKSkpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICByZXR1cm4gJHtjbGFzc05hbWV9UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwg
Z2xvYmFsT2JqZWN0LCAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9i
YWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT4ke3Byb3RvdHlwZX0o
KSkpO1xuIik7CiAgICAgICAgIH0KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIp
OwogICAgIH0KQEAgLTIwNjAsNyArMjA2MCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9u
CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBjYXN0ZWRUaGlzLT5tXyIg
LiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiLnNldChleGVjLT5nbG9iYWxEYXRhKCks
IGNhc3RlZFRoaXMsIHJlc3VsdCk7XG4iKSBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ2FjaGVkQXR0cmlidXRlIn0pOworICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBjYXN0ZWRUaGlzLT5tXyIgLiAkYXR0cmlidXRlLT5z
aWduYXR1cmUtPm5hbWUgLiAiLnNldChleGVjLT52bSgpLCBjYXN0ZWRUaGlzLCByZXN1bHQpO1xu
IikgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhY2hl
ZEF0dHJpYnV0ZSJ9KTsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgcmV0dXJuIHJlc3VsdDtcbiIpOwogCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTIy
MzMsMTMgKzIyMzMsMTMgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgLy8gU2hhZG93aW5n
IGEgYnVpbHQtaW4gY29uc3RydWN0b3JcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIgJiYgJGNsYXNzTmFtZSBlcSAi
SlNibGFoIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTog
VGhpcyBicmFuY2ggbmV2ZXIgZXhlY3V0ZXMgYW5kIHNob3VsZCBiZSByZW1vdmVkLgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAganND
YXN0PCRjbGFzc05hbWUqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2YWx1ZSk7XG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGpz
Q2FzdDwkY2xhc3NOYW1lKj4odGhpc09iamVjdCktPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHZhbHVlKTtcbiIpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAganNDYXN0PCRjbGFzc05hbWUqPih0aGlz
T2JqZWN0KS0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCBc
IiRuYW1lXCIpLCB2YWx1ZSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGpzQ2FzdDwkY2xhc3NOYW1lKj4odGhpc09iamVj
dCktPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsIFwiJG5hbWVcIiksIHZh
bHVlKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiUmVwbGFjZWFibGUifSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBv
YmplY3RcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBqc0Nhc3Q8JGNsYXNzTmFtZSo+KHRoaXNPYmplY3QpLT5wdXREaXJlY3QoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsIFwiJG5hbWVcIiksIHZhbHVlKTtcbiIp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBqc0Nhc3Q8JGNsYXNzTmFtZSo+KHRoaXNPYmplY3QpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwg
SWRlbnRpZmllcihleGVjLCBcIiRuYW1lXCIpLCB2YWx1ZSk7XG4iKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoISRhdHRyaWJ1dGUtPmlzU3RhdGljKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKiBjYXN0ZWRUaGlzID0g
anNDYXN0PCRjbGFzc05hbWUqPih0aGlzT2JqZWN0KTtcbiIpOwpAQCAtMjM1MCw3ICsyMzUwLDcg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvclxuIik7CiAK
ICAgICAgICAgICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAganNDYXN0PCRjbGFzc05h
bWUqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2YWx1ZSk7XG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAganNDYXN0PCRjbGFzc05hbWUqPih0aGlzT2JqZWN0
KS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rv
ciwgdmFsdWUpO1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgZGllICJObyB3YXkgdG8gaGFuZGxlIGludGVyZmFjZSB3aXRoIFJlcGxhY2VhYmxlQ29u
c3RydWN0b3IgZXh0ZW5kZWQgYXR0cmlidXRlOiAkaW50ZXJmYWNlTmFtZSI7CiAgICAgICAgICAg
ICAgICAgfQpAQCAtMzE3NCw3ICszMTc0LDcgQEAgRU5ECiAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBpZiAoIWNhbkludm9rZUNhbGxiYWNrKCkpXG4iKTsKICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcblxuIik7CiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8JGNsYXNzTmFtZT4gcHJvdGVjdCh0
aGlzKTtcblxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU0xvY2tI
b2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpO1xuXG4iKTsK
KyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTTG9ja0hvbGRlciBsb2NrKG1f
ZGF0YS0+Z2xvYmFsT2JqZWN0KCktPnZtKCkpO1xuXG4iKTsKICAgICAgICAgICAgIGlmIChAcGFy
YW1zKSB7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgRXhlY1N0YXRl
KiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpO1xuIik7CiAgICAg
ICAgICAgICB9CkBAIC0zNDEwLDE3ICszNDEwLDE3IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAg
ICB9CiAKICAgICBpZiAoJHR5cGUgZXEgImFueSIpIHsKLSAgICAgICAgcmV0dXJuICJleGVjLT5n
bG9iYWxEYXRhKCksICR2YWx1ZSI7CisgICAgICAgIHJldHVybiAiZXhlYy0+dm0oKSwgJHZhbHVl
IjsKICAgICB9CiAKICAgICBpZiAoJHR5cGUgZXEgIk5vZGVGaWx0ZXIiKSB7CiAgICAgICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCJKUyR0eXBlLmgiLCAkY29uZGl0aW9uYWwpOwotICAgICAgICByZXR1
cm4gInRvJHR5cGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCAkdmFsdWUpIjsKKyAgICAgICAgcmV0dXJu
ICJ0byR0eXBlKGV4ZWMtPnZtKCksICR2YWx1ZSkiOwogICAgIH0KIAogICAgIGlmICgkdHlwZSBl
cSAiTWVkaWFRdWVyeUxpc3RMaXN0ZW5lciIpIHsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMo
Ik1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCIsICRjb25kaXRpb25hbCk7Ci0gICAgICAgIHJldHVy
biAiTWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6Y3JlYXRlKFNjcmlwdFZhbHVlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgIiAuICR2YWx1ZSAuIikpIjsKKyAgICAgICAgcmV0dXJuICJNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyOjpjcmVhdGUoU2NyaXB0VmFsdWUoZXhlYy0+dm0oKSwgIiAuICR2YWx1ZSAuIikp
IjsKICAgICB9CiAKICAgICBpZiAoJHR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIpIHsK
QEAgLTM4MzgsOSArMzgzOCw5IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRpb24K
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlO
YW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpO1xuIik7CiAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87XG4iKTsKIAotICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKVxuIik7CisgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpXG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAge1xuIik7
Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6
OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7XG4iKTsKKyAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7XG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgfVxuIik7CiAKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJwcm90ZWN0ZWQ6XG4i
KTsKQEAgLTM4ODMsOSArMzg4Myw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNvbnN0cnVj
dG9yOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0lu
Zm8gc19pbmZvOwpAQCAtNDE3Niw3ICs0MTc2LDcgQEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JI
ZWxwZXJNZXRob2RzCiAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiSlNOb1N0YXRpY1RhYmxlcyJ9KSB7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICJzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBnZXQke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfVRhYmxl
KEV4ZWNTdGF0ZSogZXhlYylcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
e1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIGdldEhh
c2hUYWJsZUZvckdsb2JhbERhdGEoZXhlYy0+Z2xvYmFsRGF0YSgpLCAmJHtjb25zdHJ1Y3RvckNs
YXNzTmFtZX1UYWJsZSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICByZXR1cm4gZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShleGVjLT52bSgpLCAmJHtjb25zdHJ1
Y3RvckNsYXNzTmFtZX1UYWJsZSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIn1cblxuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJjb25zdCBDbGFz
c0luZm8gJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OnNfaW5mbyA9IHsgXCIke3Zpc2libGVJbnRl
cmZhY2VOYW1lfUNvbnN0cnVjdG9yXCIsICZCYXNlOjpzX2luZm8sIDAsIGdldCR7Y29uc3RydWN0
b3JDbGFzc05hbWV9VGFibGUsIENSRUFURV9NRVRIT0RfVEFCTEUoJGNvbnN0cnVjdG9yQ2xhc3NO
YW1lKSB9O1xuXG4iKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTQxOTEsMTkgKzQxOTEsMTkgQEAg
c3ViIEdlbmVyYXRlQ29uc3RydWN0b3JIZWxwZXJNZXRob2RzCiAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAidm9pZCAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0
YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KVxuIik7CiAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAie1xuIik7CiAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01X
aW5kb3ciKSB7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTtcbiIpOwogICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTtcbiIp
OwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgZ2xvYmFsT2JqZWN0LT5w
cm90b3R5cGUoKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTtcbiIpOworICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUsIGdsb2JhbE9iamVjdC0+cHJvdG90eXBlKCksIERvbnREZWxldGUgfCBS
ZWFkT25seSk7XG4iKTsKICAgICB9IGVsc2lmICgkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3Ip
IHsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGdsb2JhbE9iamVjdCk7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEFT
U0VSVChpbmhlcml0cygmc19pbmZvKSk7XG4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5wcm90b3R5cGUsICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmpl
Y3QpLCBOb25lKTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGly
ZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsICR7Y2xhc3NO
YW1lfVByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTtcbiIpOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTtcbiIpOwogICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTtcbiIp
OwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgJHtwcm90b0NsYXNzTmFt
ZX06OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTtcbiIp
OworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCks
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsICR7cHJvdG9DbGFzc05hbWV9OjpzZWxm
KGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7XG4iKTsKICAgICB9
Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRh
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKCR7bnVtYmVyT2ZDb25z
dHJ1Y3RvclBhcmFtZXRlcnN9KSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pO1xu
IikgaWYgZGVmaW5lZCAkbnVtYmVyT2ZDb25zdHJ1Y3RvclBhcmFtZXRlcnM7CisgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkubGVuZ3RoLCBqc051bWJlcigke251bWJlck9mQ29uc3RydWN0b3JQYXJhbWV0ZXJzfSks
IFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTtcbiIpIGlmIGRlZmluZWQgJG51bWJl
ck9mQ29uc3RydWN0b3JQYXJhbWV0ZXJzOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxu
Iik7CiAKICAgICBpZiAoISRnZW5lcmF0aW5nTmFtZWRDb25zdHJ1Y3RvcikgewpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRmxvYXQ2NEFycmF5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNG
bG9hdDY0QXJyYXkuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNGbG9hdDY0QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03NSw3ICs3NSw3IEBAIHZvaWQgSlNGbG9hdDY0QXJyYXk6OmluZGV4U2V0dGVyKEpTQzo6RXgK
IAogc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZ2V0SlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3RvclRh
YmxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gZ2V0SGFzaFRhYmxlRm9yR2xvYmFs
RGF0YShleGVjLT5nbG9iYWxEYXRhKCksICZKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yVGFibGUp
OworICAgIHJldHVybiBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKGV4ZWMtPnZtKCksICZKU0Zs
b2F0NjRBcnJheUNvbnN0cnVjdG9yVGFibGUpOwogfQogCiBjb25zdCBDbGFzc0luZm8gSlNGbG9h
dDY0QXJyYXlDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiRmxvYXQ2NEFycmF5Q29uc3RydWN0b3Ii
LCAmQmFzZTo6c19pbmZvLCAwLCBnZXRKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yVGFibGUsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3RvcikgfTsKQEAgLTg3LDEw
ICs4NywxMCBAQCBKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yOjpKU0Zsb2F0NjRBcnJhCiAKIHZv
aWQgSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBl
eGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
ZXhlYy0+dm0oKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLSAgICBwdXREaXJl
Y3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBK
U0Zsb2F0NjRBcnJheVByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkpOwotICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEyMyksIFJlYWRPbmx5IHwgRG9udERl
bGV0ZSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnByb3RvdHlwZSwgSlNGbG9hdDY0QXJyYXlQcm90b3R5cGU6OnNlbGYoZXhlYywg
Z2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3QoZXhl
Yy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMTIzKSwgUmVh
ZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCiBib29sIEpTRmxvYXQ2NEFycmF5
Q29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAt
MTIxLDcgKzEyMSw3IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU0Zsb2F0NjRBcnIK
IHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNGbG9hdDY0QXJyYXlQcm90b3R5cGVUYWJsZSA9IHsg
NCwgMywgSlNGbG9hdDY0QXJyYXlQcm90b3R5cGVUYWJsZVZhbHVlcywgMCB9Owogc3RhdGljIGNv
bnN0IEhhc2hUYWJsZSogZ2V0SlNGbG9hdDY0QXJyYXlQcm90b3R5cGVUYWJsZShFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGdldEhhc2hUYWJsZUZvckdsb2JhbERhdGEoZXhlYy0+Z2xv
YmFsRGF0YSgpLCAmSlNGbG9hdDY0QXJyYXlQcm90b3R5cGVUYWJsZSk7CisgICAgcmV0dXJuIGdl
dEhhc2hUYWJsZUZvckdsb2JhbERhdGEoZXhlYy0+dm0oKSwgJkpTRmxvYXQ2NEFycmF5UHJvdG90
eXBlVGFibGUpOwogfQogCiBjb25zdCBDbGFzc0luZm8gSlNGbG9hdDY0QXJyYXlQcm90b3R5cGU6
OnNfaW5mbyA9IHsgIkZsb2F0NjRBcnJheVByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIGdl
dEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlVGFibGUsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNGbG9h
dDY0QXJyYXlQcm90b3R5cGUpIH07CkBAIC0xNDUsNyArMTQ1LDcgQEAgYm9vbCBKU0Zsb2F0NjRB
cnJheVByb3RvdHlwZTo6Z2V0T3duUHJvcAogCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBnZXRK
U0Zsb2F0NjRBcnJheVRhYmxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gZ2V0SGFz
aFRhYmxlRm9yR2xvYmFsRGF0YShleGVjLT5nbG9iYWxEYXRhKCksICZKU0Zsb2F0NjRBcnJheVRh
YmxlKTsKKyAgICByZXR1cm4gZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShleGVjLT52bSgpLCAm
SlNGbG9hdDY0QXJyYXlUYWJsZSk7CiB9CiAKIGNvbnN0IENsYXNzSW5mbyBKU0Zsb2F0NjRBcnJh
eTo6c19pbmZvID0geyAiRmxvYXQ2NEFycmF5IiwgJkJhc2U6OnNfaW5mbywgMCwgZ2V0SlNGbG9h
dDY0QXJyYXlUYWJsZSAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNGbG9hdDY0QXJyYXkpIH07CkBA
IC0xNTUsMTEgKzE1NSwxMSBAQCBKU0Zsb2F0NjRBcnJheTo6SlNGbG9hdDY0QXJyYXkoU3RydWN0
dXJlCiB7CiB9CiAKLXZvaWQgSlNGbG9hdDY0QXJyYXk6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgSlNGbG9hdDY0QXJyYXk6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgZGVzY3JpcHRv
cigmSlNGbG9hdDY0QXJyYXk6OnNfaW5mbywgT0JKRUNUX09GRlNFVE9GKEpTRmxvYXQ2NEFycmF5
LCBtX3N0b3JhZ2UpLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGbG9hdDY0QXJyYXksIG1fc3RvcmFnZUxl
bmd0aCkpOwotICAgIGdsb2JhbERhdGEucmVnaXN0ZXJUeXBlZEFycmF5RGVzY3JpcHRvcihpbXBs
KCksIGRlc2NyaXB0b3IpOworICAgIHZtLnJlZ2lzdGVyVHlwZWRBcnJheURlc2NyaXB0b3IoaW1w
bCgpLCBkZXNjcmlwdG9yKTsKICAgICBtX3N0b3JhZ2UgPSBpbXBsKCktPmRhdGEoKTsKICAgICBt
X3N0b3JhZ2VMZW5ndGggPSBpbXBsKCktPmxlbmd0aCgpOwogICAgIEFTU0VSVChpbmhlcml0cygm
c19pbmZvKSk7CkBAIC0xNjcsNyArMTY3LDcgQEAgdm9pZCBKU0Zsb2F0NjRBcnJheTo6ZmluaXNo
Q3JlYXRpb24oSlNHbAogCiBKU09iamVjdCogSlNGbG9hdDY0QXJyYXk6OmNyZWF0ZVByb3RvdHlw
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAg
cmV0dXJuIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBnbG9iYWxPYmplY3QsIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIEpTQXJyYXlCdWZmZXJWaWV3UHJvdG90
eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCkpKTsKKyAgICByZXR1cm4gSlNGbG9hdDY0QXJy
YXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLT52bSgpLCBnbG9iYWxPYmplY3QsIEpTRmxvYXQ2NEFy
cmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBK
U0FycmF5QnVmZmVyVmlld1Byb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpKSk7CiB9
CiAKIGJvb2wgSlNGbG9hdDY0QXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiBzbG90KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
RmxvYXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTRmxvYXQ2NEFycmF5LmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0Zsb2F0NjRBcnJheS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw4ICszMyw4IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQXJyYXlC
dWZmZXJWaWV3IEJhc2U7CiAgICAgc3RhdGljIEpTRmxvYXQ2NEFycmF5KiBjcmVhdGUoSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFz
c1JlZlB0cjxGbG9hdDY0QXJyYXk+IGltcGwpCiAgICAgewotICAgICAgICBKU0Zsb2F0NjRBcnJh
eSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU0Zsb2F0NjRBcnJheT4o
Z2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkpIEpTRmxvYXQ2NEFycmF5KHN0cnVjdHVy
ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9i
YWxPYmplY3QtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEpTRmxvYXQ2NEFycmF5KiBwdHIgPSBu
ZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTRmxvYXQ2NEFycmF5PihnbG9iYWxPYmpl
Y3QtPnZtKCkuaGVhcCkpIEpTRmxvYXQ2NEFycmF5KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBp
bXBsKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwog
ICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIApAQCAtNDYsOSArNDYsOSBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwog
ICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAKLSAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9i
YWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAg
ICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUg
bW9kZSA9IEpTQzo6RXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CkBAIC02Miw3ICs2Miw3IEBA
IHB1YmxpYzoKICAgICB2b2lkKiBtX3N0b3JhZ2U7CiBwcm90ZWN0ZWQ6CiAgICAgSlNGbG9hdDY0
QXJyYXkoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8Rmxv
YXQ2NEFycmF5Pik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkpTR2xvYmFsRGF0YSYp
OworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwogICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgQmFzZTo6U3RydWN0
dXJlRmxhZ3M7CiAgICAgSlNDOjpKU1ZhbHVlIGdldEJ5SW5kZXgoSlNDOjpFeGVjU3RhdGUqLCB1
bnNpZ25lZCBpbmRleCk7CiAgICAgdm9pZCBpbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSosIHVu
c2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUpOwpAQCAtNzUsMjMgKzc1LDIzIEBAIGNsYXNzIEpT
RmxvYXQ2NEFycmF5UHJvdG90eXBlIDogcHVibGljIEoKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpT
Qzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxm
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU0Zs
b2F0NjRBcnJheVByb3RvdHlwZSogY3JlYXRlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCisgICAgc3RhdGljIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTRmxvYXQ2NEFycmF5UHJvdG90eXBl
PihnbG9iYWxEYXRhLmhlYXApKSBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZShnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xv
YmFsRGF0YSk7CisgICAgICAgIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlPih2bS5oZWFw
KSkgSlNGbG9hdDY0QXJyYXlQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsK
KyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVybiBwdHI7CiAg
ICAgfQogCiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAg
fQogCiBwcml2YXRlOgotICAgIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlKEpTQzo6SlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKSB7
IH0KKyAgICBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
QmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwpAQCAtMTEzLDkgKzExMyw5IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAg
ICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpT
Qzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiBwcm90ZWN0
ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IERP
TUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RB
Y3RpdmVET01PYmplY3QuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsOSArNjAsOSBAQCBKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3Rv
cjo6SlNUZXN0CiAKIHZvaWQgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3I6OmZpbmlz
aENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwogICAgIEFTU0VSVChpbmhlcml0cygm
c19pbmZvKSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlOjpzZWxm
KGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGly
ZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdEFj
dGl2ZURPTU9iamVjdFByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkpOwogfQogCiBib29sIEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVj
dG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAgLTExMiwxNSAr
MTEyLDE1IEBAIEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6SlNUZXN0QWN0aXZlRE9NT2IKIHsKIH0K
IAotdm9pZCBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgSlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7
CiB9CiAKIEpTT2JqZWN0KiBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OmNyZWF0ZVByb3RvdHlwZShF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgcmV0
dXJuIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU6OmNyZWF0
ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CisgICAgcmV0dXJuIEpTVGVzdEFjdGl2ZURP
TU9iamVjdFByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdCwgSlNUZXN0
QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT52
bSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0K
IAogdm9pZCBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0
aXZlRE9NT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5oCShyZXZpc2lvbiAxNDg2MzgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9N
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDggQEAgcHVibGljOgogICAgIHR5
cGVkZWYgSlNET01XcmFwcGVyIEJhc2U7CiAgICAgc3RhdGljIEpTVGVzdEFjdGl2ZURPTU9iamVj
dCogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8VGVzdEFjdGl2ZURPTU9iamVjdD4gaW1wbCkKICAgICB7
Ci0gICAgICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdCogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6
OmFsbG9jYXRlQ2VsbDxKU1Rlc3RBY3RpdmVET01PYmplY3Q+KGdsb2JhbE9iamVjdC0+Z2xvYmFs
RGF0YSgpLmhlYXApKSBKU1Rlc3RBY3RpdmVET01PYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxPYmpl
Y3QsIGltcGwpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xv
YmFsRGF0YSgpKTsKKyAgICAgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KiBwdHIgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEFjdGl2ZURPTU9iamVjdD4oZ2xvYmFsT2Jq
ZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RBY3RpdmVET01PYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxP
YmplY3QsIGltcGwpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+
dm0oKSk7CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogCkBAIC00Niw5ICs0Niw5IEBAIHB1
YmxpYzoKICAgICB+SlNUZXN0QWN0aXZlRE9NT2JqZWN0KCk7CiAgICAgc3RhdGljIGNvbnN0IEpT
Qzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpT
Qzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCop
OwpAQCAtNjEsNyArNjEsNyBAQCBwcml2YXRlOgogICAgIFRlc3RBY3RpdmVET01PYmplY3QqIG1f
aW1wbDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RBY3RpdmVET01PYmplY3QoSlNDOjpTdHJ1Y3R1
cmUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8VGVzdEFjdGl2ZURPTU9iamVjdD4p
OwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpKU0dsb2JhbERhdGEmKTsKKyAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8
IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIApAQCAtODksMjMgKzg5LDIzIEBAIGNsYXNzIEpT
VGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSA6IHAKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpT
Qzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxm
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rl
c3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUqIGNyZWF0ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgIHN0YXRpYyBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUq
IGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgSlNUZXN0QWN0aXZlRE9N
T2JqZWN0UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpT
VGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNUZXN0QWN0
aXZlRE9NT2JqZWN0UHJvdG90eXBlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgSlNU
ZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxs
b2NhdGVDZWxsPEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVz
dEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwor
ICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIHB0cjsKICAg
ICB9CiAKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwogICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVl
IHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9
CiAKIHByaXZhdGU6Ci0gICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKEpTQzo6SlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0
dXJlKSB7IH0KKyAgICBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6
SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KIHByb3RlY3RlZDoKICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKQEAgLTEyNyw5ICsxMjcsOSBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxs
KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3Qm
KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVj
dCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNj
cmlwdG9yJik7CiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBz
dGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAg
ICAgfQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFz
SW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RDYWxsYmFjay5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY1LDcgKzY1LDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoTm9QYXJh
bQogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgSlNM
b2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT52bSgpKTsKIAogICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAKQEAgLTgxLDcgKzgxLDcgQEAgYm9vbCBKU1Rl
c3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUAogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxi
YWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9i
YWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEt
Pmdsb2JhbE9iamVjdCgpLT52bSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBh
cmdzOwpAQCAtOTksNyArOTksNyBAQCBib29sIEpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhD
bGFzczJQCiAKICAgICBSZWZQdHI8SlNUZXN0Q2FsbGJhY2s+IHByb3RlY3QodGhpcyk7CiAKLSAg
ICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPnZtKCkpOwog
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkBAIC0xMTgsNyArMTE4LDcgQEAg
Ym9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoU3RyaW5nTAogCiAgICAgUmVmUHRyPEpT
VGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2sobV9k
YXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT52bSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBhcmdzOwpAQCAtMTM2LDcgKzEzNiw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNh
bGxiYWNrV2l0aEJvb2xlYW4KIAogICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0
aGlzKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbERhdGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3Qo
KS0+dm0oKSk7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKQEAgLTE1Niw3
ICsxNTYsNyBAQCBib29sIEpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1JlcXVpcmVzVGhpCiAKICAg
ICBSZWZQdHI8SlNUZXN0Q2FsbGJhY2s+IHByb3RlY3QodGhpcyk7CiAKLSAgICBKU0xvY2tIb2xk
ZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPnZtKCkpOwogCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1l
ZEdldHRlci5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDkgKzU4LDkgQEAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3Rvcjo6
SlNUZQogCiB2b2lkIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3I6OmZpbmlzaENy
ZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
IHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19p
bmZvKSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLnByb3RvdHlwZSwgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6OnNlbGYo
ZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJl
Y3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KTsKIH0KIAogYm9vbCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0
cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAgLTEwOSwx
NSArMTA5LDE1IEBAIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpKU1Rlc3RDdXN0b21OYW0KIHsK
IH0KIAotdm9pZCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6ZmluaXNoQ3JlYXRpb24oSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEp
OworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNf
aW5mbykpOwogfQogCiBKU09iamVjdCogSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OmNyZWF0ZVBy
b3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7
Ci0gICAgcmV0dXJuIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlOjpjcmVhdGUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2Jh
bE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworICAgIHJldHVybiBK
U1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGdsb2Jh
bE9iamVjdCwgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZShnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQ
cm90b3R5cGUoKSkpOwogfQogCiB2b2lkIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpkZXN0cm95
KEpTQzo6SlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVy
LmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4
ICszNCw4IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRE9NV3JhcHBlciBCYXNlOwogICAgIHN0
YXRpYyBKU1Rlc3RDdXN0b21OYW1lZEdldHRlciogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8VGVzdEN1
c3RvbU5hbWVkR2V0dGVyPiBpbXBsKQogICAgIHsKLSAgICAgICAgSlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXIqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXI+KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLmhlYXApKSBKU1Rlc3RDdXN0
b21OYW1lZEdldHRlcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7Ci0gICAgICAgIHB0
ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpOworICAgICAgICBK
U1Rlc3RDdXN0b21OYW1lZEdldHRlciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRl
Q2VsbDxKU1Rlc3RDdXN0b21OYW1lZEdldHRlcj4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBK
U1Rlc3RDdXN0b21OYW1lZEdldHRlcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7Cisg
ICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICAgICAg
cmV0dXJuIHB0cjsKICAgICB9CiAKQEAgLTQ3LDkgKzQ3LDkgQEAgcHVibGljOgogICAgIH5KU1Rl
c3RDdXN0b21OYW1lZEdldHRlcigpOwogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBz
X2luZm87CiAKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6
OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKQEAgLTYyLDcgKzYy
LDcgQEAgcHJpdmF0ZToKICAgICBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIG1faW1wbDsKIHByb3Rl
Y3RlZDoKICAgICBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcihKU0M6OlN0cnVjdHVyZSosIEpTRE9N
R2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI+KTsKLSAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJik7CisgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OlZNJik7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkludGVyY2VwdHNH
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Okhh
c0ltcHVyZUdldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogcHJpdmF0
ZToKICAgICBzdGF0aWMgYm9vbCBjYW5HZXRJdGVtc0Zvck5hbWUoSlNDOjpFeGVjU3RhdGUqLCBU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqLCBKU0M6OlByb3BlcnR5TmFtZSk7CkBAIC05MywyMyArOTMs
MjMgQEAgY2xhc3MgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUgOgogcHVibGljOgog
ICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAgICAgc3RhdGljIEpTQzo6
SlNPYmplY3QqIHNlbGYoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0g
ICAgc3RhdGljIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBzdGF0aWMgSlNUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXJQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKLSAgICAg
ICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwg
SlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU+KGdsb2Jh
bERhdGEuaGVhcCkpIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKGdsb2JhbERhdGEs
IGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihn
bG9iYWxEYXRhKTsKKyAgICAgICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUqIHB0
ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXJQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZSh2
bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9u
KHZtKTsKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgSlND
OjpDbGFzc0luZm8gc19pbmZvOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChK
U0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJv
cGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlBy
b3BlcnR5RGVzY3JpcHRvciYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSlNUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNO
b25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpIHsgfQorICAgIEpTVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0
cnVjdHVyZSkgeyB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1
Y3R1cmVGbGFnczsKIH07CkBAIC0xMzEsOSArMTMxLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIHN0YXRpYyBj
b25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIHByb3RlY3RlZDoKICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgRE9NQ29uc3RydWN0
b3JPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05OCwxMCArOTgsMTAgQEAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpK
U1RlcwogCiB2b2lkIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3Jl
YXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQog
ewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2lu
Zm8pKTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkucHJvdG90eXBlLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlOjpzZWxmKGV4
ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1i
ZXIoMiksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qo
ZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0RXZlbnRD
b25zdHJ1Y3RvclByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkubGVuZ3RoLCBqc051bWJlcigyKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVu
dW0pOwogfQogCiBib29sIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6Z2V0T3du
UHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC0xNDMsMTUgKzE0MywxNSBAQCBK
U1Rlc3RFdmVudENvbnN0cnVjdG9yOjpKU1Rlc3RFdmVudENvbnN0CiB7CiB9CiAKLXZvaWQgSlNU
ZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQordm9pZCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0p
CiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiB9CiAKIEpT
T2JqZWN0KiBKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpjcmVhdGVQcm90b3R5cGUoRXhlY1N0YXRl
KiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIHJldHVybiBKU1Rl
c3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBn
bG9iYWxPYmplY3QsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVj
dHVyZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmpl
Y3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CisgICAgcmV0dXJuIEpTVGVzdEV2ZW50Q29uc3RydWN0
b3JQcm90b3R5cGU6OmNyZWF0ZShleGVjLT52bSgpLCBnbG9iYWxPYmplY3QsIEpTVGVzdEV2ZW50
Q29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPnZtKCks
IGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQogCiB2
b2lkIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE0ODYzOCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0
cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDggQEAgcHVibGljOgogICAgIHR5
cGVkZWYgSlNET01XcmFwcGVyIEJhc2U7CiAgICAgc3RhdGljIEpTVGVzdEV2ZW50Q29uc3RydWN0
b3IqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFRlc3RFdmVudENvbnN0cnVjdG9yPiBpbXBsKQogICAg
IHsKLSAgICAgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBK
U0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFdmVudENvbnN0cnVjdG9yPihnbG9iYWxPYmplY3QtPmds
b2JhbERhdGEoKS5oZWFwKSkgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2Jh
bE9iamVjdCwgaW1wbCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0
LT5nbG9iYWxEYXRhKCkpOworICAgICAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yKiBwdHIgPSBu
ZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50Q29uc3RydWN0b3I+KGds
b2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUs
IGdsb2JhbE9iamVjdCwgaW1wbCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
T2JqZWN0LT52bSgpKTsKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAKQEAgLTQ4LDkgKzQ4
LDkgQEAgcHVibGljOgogICAgIH5KU1Rlc3RFdmVudENvbnN0cnVjdG9yKCk7CiAgICAgc3RhdGlj
IGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAg
c3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCopOwpAQCAtNjMsNyArNjMsNyBAQCBwcml2YXRlOgogICAgIFRlc3RFdmVudENvbnN0
cnVjdG9yKiBtX2ltcGw7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvcihK
U0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxUZXN0RXZlbnRD
b25zdHJ1Y3Rvcj4pOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpKU0dsb2JhbERhdGEm
KTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKICAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIApAQCAtOTEsMjEgKzkxLDIx
IEBAIGNsYXNzIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGUgOiAKIHB1YmxpYzoKICAg
ICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwogICAgIHN0YXRpYyBKU0M6OkpT
T2JqZWN0KiBzZWxmKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAg
IHN0YXRpYyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBzdGF0aWMgSlNUZXN0RXZlbnRDb25zdHJ1
Y3RvclByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBK
U1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6
YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU+KGdsb2JhbERhdGEu
aGVhcCkpIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGUoZ2xvYmFsRGF0YSwgZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOworICAgICAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5
cGU+KHZtLmhlYXApKSBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAg
ICAgICByZXR1cm4gcHRyOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5m
byBzX2luZm87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8p
OworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBKU1Rlc3RFdmVudENvbnN0cnVj
dG9yUHJvdG90eXBlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmpl
Y3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKSB7IH0KKyAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9y
UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9
CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwpAQCAtMTI3LDkgKzEyNyw5IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAg
ICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpT
Qzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiBwcm90ZWN0
ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IERP
TUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50
VGFyZ2V0LmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjQsOSArNjQsOSBAQCBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yOjpKU1Rlc3RFdmVuCiAK
IHZvaWQgSlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0
YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZXhlYy0+dm0oKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLSAgICBw
dXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90
eXBlLCBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3Qp
LCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZTo6
c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogfQogCiBi
b29sIEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdChKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JiBzbG90KQpAQCAtMTE4LDE1ICsxMTgsMTUgQEAgSlNUZXN0RXZlbnRUYXJnZXQ6
OkpTVGVzdEV2ZW50VGFyZ2V0KFN0cgogewogfQogCi12b2lkIEpTVGVzdEV2ZW50VGFyZ2V0Ojpm
aW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEpTVGVzdEV2ZW50
VGFyZ2V0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZ2xvYmFsRGF0YSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VS
VChpbmhlcml0cygmc19pbmZvKSk7CiB9CiAKIEpTT2JqZWN0KiBKU1Rlc3RFdmVudFRhcmdldDo6
Y3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKIHsKLSAgICByZXR1cm4gSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU6OmNyZWF0ZShl
eGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2Jq
ZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CisgICAgcmV0dXJuIEpTVGVz
dEV2ZW50VGFyZ2V0UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBK
U1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+
dm0oKSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9
CiAKIHZvaWQgSlNUZXN0RXZlbnRUYXJnZXQ6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRU
YXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBKU1Rlc3RFdmVu
dFRhcmdldCogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8VGVzdEV2ZW50VGFyZ2V0PiBpbXBsKQogICAg
IHsKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2lu
dCgpLT5ub3RpZnlXcml0ZSgpOwotICAgICAgICBKU1Rlc3RFdmVudFRhcmdldCogcHRyID0gbmV3
IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFdmVudFRhcmdldD4oZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkpIEpTVGVzdEV2ZW50VGFyZ2V0KHN0cnVjdHVyZSwgZ2xv
YmFsT2JqZWN0LCBpbXBsKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmpl
Y3QtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEpTVGVzdEV2ZW50VGFyZ2V0KiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50VGFyZ2V0PihnbG9iYWxPYmpl
Y3QtPnZtKCkuaGVhcCkpIEpTVGVzdEV2ZW50VGFyZ2V0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0
LCBpbXBsKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkp
OwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIApAQCAtNDgsOSArNDgsOSBAQCBwdWJsaWM6
CiAgICAgfkpTVGVzdEV2ZW50VGFyZ2V0KCk7CiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJ
bmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1l
QXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSBtb2RlID0gSlNDOjpFeGNsdWRlRG9udEVudW1Q
cm9wZXJ0aWVzKTsKQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICBUZXN0RXZlbnRUYXJn
ZXQqIG1faW1wbDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RFdmVudFRhcmdldChKU0M6OlN0cnVj
dHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxUZXN0RXZlbnRUYXJnZXQ+KTsK
LSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJik7CisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc1Zpc2l0Q2hpbGRy
ZW4gfCBKU0M6Ok1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgfCBKU0M6Okhhc0ltcHVyZUdldE93blBy
b3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgaW5kZXhHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIHVuc2lnbmVkKTsK
IHByaXZhdGU6CkBAIC05OCwyMyArOTgsMjMgQEAgY2xhc3MgSlNUZXN0RXZlbnRUYXJnZXRQcm90
b3R5cGUgOiBwdWJsaQogcHVibGljOgogICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0
IEJhc2U7CiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90
eXBlKiBjcmVhdGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBzdGF0
aWMgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQog
ICAgIHsKLSAgICAgICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU+KGdsb2Jh
bERhdGEuaGVhcCkpIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKGdsb2JhbERhdGEsIGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxE
YXRhKTsKKyAgICAgICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU+KHZtLmhl
YXApKSBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIHB0
cjsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwogICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwotICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsK
ICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUoSlNDOjpK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUpIHsgfQorICAgIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpT
Tm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVG
bGFnczsKIH07CkBAIC0xMzYsOSArMTM2LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9w
ZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJv
cGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIHN0YXRpYyBjb25zdCBK
U0M6OkNsYXNzSW5mbyBzX2luZm87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIHByb3RlY3RlZDoKICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgRE9NQ29uc3RydWN0b3JPYmpl
Y3Q6OlN0cnVjdHVyZUZsYWdzOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAJKHJldmlzaW9u
IDE0ODYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw5ICs1Nyw5IEBAIEpTVGVzdEV4
Y2VwdGlvbkNvbnN0cnVjdG9yOjpKU1Rlc3RFeGNlcHQKIAogdm9pZCBKU1Rlc3RFeGNlcHRpb25D
b25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmds
b2JhbERhdGEoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAgICAg
QVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RFeGNlcHRpb25Qcm90
b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsK
KyAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlw
ZSwgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERv
bnREZWxldGUgfCBSZWFkT25seSk7CiB9CiAKIGJvb2wgSlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0
b3I6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtOTUsMTUgKzk1
LDE1IEBAIEpTVGVzdEV4Y2VwdGlvbjo6SlNUZXN0RXhjZXB0aW9uKFN0cnVjdHUKIHsKIH0KIAot
dm9pZCBKU1Rlc3RFeGNlcHRpb246OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKK3ZvaWQgSlNUZXN0RXhjZXB0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7Ci0g
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiB9CiAKIEpTT2JqZWN0
KiBKU1Rlc3RFeGNlcHRpb246OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgcmV0dXJuIEpTVGVzdEV4Y2VwdGlvblBy
b3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RF
eGNlcHRpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmdsb2JhbERh
dGEoKSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmVycm9yUHJvdG90eXBlKCkpKTsKKyAg
ICByZXR1cm4gSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZ2xv
YmFsT2JqZWN0LCBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9i
YWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5lcnJvclByb3RvdHlw
ZSgpKSk7CiB9CiAKIHZvaWQgSlNUZXN0RXhjZXB0aW9uOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBj
ZWxsKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw4ICszNCw4IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRE9NV3Jh
cHBlciBCYXNlOwogICAgIHN0YXRpYyBKU1Rlc3RFeGNlcHRpb24qIGNyZWF0ZShKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVm
UHRyPFRlc3RFeGNlcHRpb24+IGltcGwpCiAgICAgewotICAgICAgICBKU1Rlc3RFeGNlcHRpb24q
IHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXhjZXB0aW9uPihn
bG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKSkgSlNUZXN0RXhjZXB0aW9uKHN0cnVjdHVy
ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9i
YWxPYmplY3QtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEpTVGVzdEV4Y2VwdGlvbiogcHRyID0g
bmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFeGNlcHRpb24+KGdsb2JhbE9i
amVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0RXhjZXB0aW9uKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0
LCBpbXBsKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkp
OwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIApAQCAtNDYsOSArNDYsOSBAQCBwdWJsaWM6
CiAgICAgfkpTVGVzdEV4Y2VwdGlvbigpOwogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5m
byBzX2luZm87CiAKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4g
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKQEAgLTYxLDcg
KzYxLDcgQEAgcHJpdmF0ZToKICAgICBUZXN0RXhjZXB0aW9uKiBtX2ltcGw7CiBwcm90ZWN0ZWQ6
CiAgICAgSlNUZXN0RXhjZXB0aW9uKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3Qq
LCBQYXNzUmVmUHRyPFRlc3RFeGNlcHRpb24+KTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
Qzo6SlNHbG9iYWxEYXRhJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CiAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CiAK
QEAgLTg5LDIxICs4OSwyMSBAQCBjbGFzcyBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUgOiBwdWJs
aWMgCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKICAg
ICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9i
YWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlKiBjcmVhdGUo
SlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBzdGF0aWMgSlNUZXN0RXhj
ZXB0aW9uUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAg
IEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9j
YXRlQ2VsbDxKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGU+KGdsb2JhbERhdGEuaGVhcCkpIEpTVGVz
dEV4Y2VwdGlvblByb3RvdHlwZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7
Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEpTVGVz
dEV4Y2VwdGlvblByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDxKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RFeGNlcHRpb25Qcm90
b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogCiAgICAgc3RhdGljIGNv
bnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEpT
VGVzdEV4Y2VwdGlvblByb3RvdHlwZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05v
bkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkgeyB9CisgICAgSlNUZXN0RXhjZXB0
aW9uUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkg
eyB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwpAQCAtMTI1LDkgKzEyNSw5IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsK
ICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiBwcm90
ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8
IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRl
cmZhY2UuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMy
LDEwICsxMzIsMTAgQEAgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OkpTVGVzdEludGVyZgog
CiB2b2lkIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihleGVjLT52bSgpKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwotICAgIHB1
dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5
cGUsIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkpOwotICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCks
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDIpLCBSZWFkT25seSB8IERv
bnREZWxldGUgfCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZTo6c2VsZihl
eGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVj
dChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigyKSwg
UmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCiBib29sIEpTVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
QEAgLTIwNiwxNSArMjA2LDE1IEBAIEpTVGVzdEludGVyZmFjZTo6SlNUZXN0SW50ZXJmYWNlKFN0
cnVjdHUKIHsKIH0KIAotdm9pZCBKU1Rlc3RJbnRlcmZhY2U6OmZpbmlzaENyZWF0aW9uKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgSlNUZXN0SW50ZXJmYWNlOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7
CiB9CiAKIEpTT2JqZWN0KiBKU1Rlc3RJbnRlcmZhY2U6OmNyZWF0ZVByb3RvdHlwZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgcmV0dXJuIEpT
VGVzdEludGVyZmFjZVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFs
T2JqZWN0LCBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxP
YmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFBy
b3RvdHlwZSgpKSk7CisgICAgcmV0dXJuIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZTo6Y3JlYXRl
KGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdCwgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAogdm9pZCBKU1Rlc3RJbnRlcmZhY2U6OmRlc3Ry
b3koSlNDOjpKU0NlbGwqIGNlbGwpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oCShyZXZpc2lvbiAx
NDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDggQEAgcHVibGljOgogICAg
IHR5cGVkZWYgSlNET01XcmFwcGVyIEJhc2U7CiAgICAgc3RhdGljIEpTVGVzdEludGVyZmFjZSog
Y3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFBhc3NSZWZQdHI8VGVzdEludGVyZmFjZT4gaW1wbCkKICAgICB7Ci0gICAgICAg
IEpTVGVzdEludGVyZmFjZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxK
U1Rlc3RJbnRlcmZhY2U+KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLmhlYXApKSBKU1Rlc3RJ
bnRlcmZhY2Uoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOwotICAgICAgICBwdHItPmZp
bmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNUZXN0
SW50ZXJmYWNlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdElu
dGVyZmFjZT4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RJbnRlcmZhY2Uoc3RydWN0
dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGds
b2JhbE9iamVjdC0+dm0oKSk7CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogCkBAIC01MSw5
ICs1MSw5IEBAIHB1YmxpYzoKICAgICB+SlNUZXN0SW50ZXJmYWNlKCk7CiAgICAgc3RhdGljIGNv
bnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9i
amVjdCopOwpAQCAtNzksNyArNzksNyBAQCBwcml2YXRlOgogICAgIFRlc3RJbnRlcmZhY2UqIG1f
aW1wbDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RJbnRlcmZhY2UoSlNDOjpTdHJ1Y3R1cmUqLCBK
U0RPTUdsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8VGVzdEludGVyZmFjZT4pOwotICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNDOjpKU0dsb2JhbERhdGEmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTQzo6Vk0mKTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW50ZXJjZXB0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEJhc2U6OlN0cnVj
dHVyZUZsYWdzOwogfTsKIApAQCAtMTA3LDIzICsxMDcsMjMgQEAgY2xhc3MgSlNUZXN0SW50ZXJm
YWNlUHJvdG90eXBlIDogcHVibGljIAogcHVibGljOgogICAgIHR5cGVkZWYgSlNDOjpKU05vbkZp
bmFsT2JqZWN0IEJhc2U7CiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdEludGVyZmFj
ZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgc3RhdGljIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiAgICAgewotICAgICAgICBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUqIHB0ciA9IG5ldyAo
Tm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlPihnbG9i
YWxEYXRhLmhlYXApKSBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUoZ2xvYmFsRGF0YSwgZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOworICAgICAgICBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVs
bCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlPih2bS5oZWFwKSkg
SlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Cisg
ICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1cm4gcHRyOwogICAg
IH0KIAogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgc3RhdGlj
IEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUo
Z2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUoSlNDOjpKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpIHsg
fQorICAgIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
QmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwpAQCAtMTQ1LDkgKzE0NSw5IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAg
ICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpT
Qzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiBwcm90ZWN0
ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IERP
TUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsOSArNTgsOSBAQCBKU1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3I6CiAKIHZvaWQgSlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52
bSgpKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwotICAgIHB1dERpcmVjdChleGVj
LT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclBy
b3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
OwogfQogCiBib29sIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rvcjo6Z2V0
T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC0xMDksMTUgKzEwOSwxNSBA
QCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpKU1Rlc3RNZWRpCiB7CiB9CiAKLXZvaWQg
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQordm9pZCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7
CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cygmc19p
bmZvKSk7CiB9CiAKIEpTT2JqZWN0KiBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpjcmVh
dGVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQogewotICAgIHJldHVybiBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlOjpj
cmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIEpTVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmdsb2Jh
bERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7
CisgICAgcmV0dXJuIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGU6OmNyZWF0
ZShleGVjLT52bSgpLCBnbG9iYWxPYmplY3QsIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQ
cm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQogCiB2b2lkIEpTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCkBAIC0xNjYs
NyArMTY2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RNZWRpYQogICAg
IFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXIqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBSZWZQdHI8TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lcj4gbGlzdGVuZXIoTWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6Y3JlYXRlKFNj
cmlwdFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+YXJndW1lbnQoMCkpKSk7CisgICAg
UmVmUHRyPE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+IGxpc3RlbmVyKE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXI6OmNyZWF0ZShTY3JpcHRWYWx1ZShleGVjLT52bSgpLCBleGVjLT5hcmd1bWVudCgwKSkp
KTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC0+bWV0aG9kKGxpc3RlbmVyKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaAkocmV2aXNpb24g
MTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsOCBA
QCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0RPTVdyYXBwZXIgQmFzZTsKICAgICBzdGF0aWMgSlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8VGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXI+IGltcGwpCiAgICAgewotICAgICAgICBKU1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLmhlYXAp
KSBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBp
bXBsKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERh
dGEoKSk7CisgICAgICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIHB0ciA9IG5ldyAo
Tm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4o
Z2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKHN0
cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlv
bihnbG9iYWxPYmplY3QtPnZtKCkpOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIApAQCAt
NDYsOSArNDYsOSBAQCBwdWJsaWM6CiAgICAgfkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIo
KTsKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwogCi0gICAgc3RhdGlj
IEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUo
Z2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0K
IAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CkBAIC02MSw3ICs2MSw3IEBAIHByaXZhdGU6CiAgICAg
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIG1faW1wbDsKIHByb3RlY3RlZDoKICAgICBKU1Rl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmpl
Y3QqLCBQYXNzUmVmUHRyPFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPik7Ci0gICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OkpTR2xvYmFsRGF0YSYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNDOjpWTSYpOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgQmFzZTo6U3RydWN0
dXJlRmxhZ3M7CiB9OwogCkBAIC04OSwyMyArODksMjMgQEAgY2xhc3MgSlNUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lclByb3RvdAogcHVibGljOgogICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFs
T2JqZWN0IEJhc2U7CiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXJQcm90b3R5cGUqIGNyZWF0ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgIHN0YXRpYyBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBl
KiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIEpTVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXJQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0
ZUNlbGw8SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZT4oZ2xvYmFsRGF0YS5o
ZWFwKSkgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZShnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xv
YmFsRGF0YSk7CisgICAgICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUq
IHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lclByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXJQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5m
aW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogCiAgICAgc3Rh
dGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlO
YW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5
TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAg
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUoSlNDOjpKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpIHsg
fQorICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6
SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KIHByb3RlY3RlZDoKICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKQEAgLTEyNyw5ICsxMjcsOSBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxs
KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3Qm
KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVj
dCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNj
cmlwdG9yJik7CiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBz
dGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAg
ICAgfQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFz
SW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDkgKzU3LDkgQEAgSlNUZXN0TmFtZWRDb25z
dHJ1Y3RvckNvbnN0cnVjdG9yOjpKU1RlcwogCiB2b2lkIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JD
b25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmds
b2JhbERhdGEoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAgICAg
QVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3ROYW1lZENvbnN0cnVj
dG9yUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFk
T25seSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5w
cm90b3R5cGUsIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xv
YmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKIH0KIAogYm9vbCBKU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiBzbG90KQpAQCAtMTA2LDcgKzEwNiw3IEBAIHZvaWQgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5h
bWVkQ29uc3RydWMKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QpOwog
ICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0TmFtZWRDb25z
dHJ1Y3RvclByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTsKKyAgICBw
dXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNU
ZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBO
b25lKTsKIH0KIAogQ29uc3RydWN0VHlwZSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25z
dHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1
Y3REYXRhKQpAQCAtMTM4LDE1ICsxMzgsMTUgQEAgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6SlNU
ZXN0TmFtZWRDb25zdAogewogfQogCi12b2lkIEpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OmZpbmlz
aENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgSlNUZXN0TmFtZWRDb25z
dHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NF
UlQoaW5oZXJpdHMoJnNfaW5mbykpOwogfQogCiBKU09iamVjdCogSlNUZXN0TmFtZWRDb25zdHJ1
Y3Rvcjo6Y3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKIHsKLSAgICByZXR1cm4gSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlw
ZTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxE
YXRhKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwor
ICAgIHJldHVybiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+
dm0oKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9y
OjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25z
dHJ1Y3Rvci5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw4ICszNCw4IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRE9NV3JhcHBlciBCYXNlOwog
ICAgIHN0YXRpYyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxU
ZXN0TmFtZWRDb25zdHJ1Y3Rvcj4gaW1wbCkKICAgICB7Ci0gICAgICAgIEpTVGVzdE5hbWVkQ29u
c3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvcj4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkpIEpTVGVzdE5h
bWVkQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOwotICAgICAgICBw
dHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAg
SlNUZXN0TmFtZWRDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRl
Q2VsbDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yPihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpT
VGVzdE5hbWVkQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOworICAg
ICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CiAgICAgICAgIHJl
dHVybiBwdHI7CiAgICAgfQogCkBAIC00Niw5ICs0Niw5IEBAIHB1YmxpYzoKICAgICB+SlNUZXN0
TmFtZWRDb25zdHJ1Y3RvcigpOwogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2lu
Zm87CiAKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cisg
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
JnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3Rv
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKQEAgLTYxLDcgKzYxLDcg
QEAgcHJpdmF0ZToKICAgICBUZXN0TmFtZWRDb25zdHJ1Y3RvciogbV9pbXBsOwogcHJvdGVjdGVk
OgogICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIFBhc3NSZWZQdHI8VGVzdE5hbWVkQ29uc3RydWN0b3I+KTsKLSAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0M6OlZNJik7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
SlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBCYXNlOjpTdHJ1Y3R1
cmVGbGFnczsKIH07CiAKQEAgLTg5LDIxICs4OSwyMSBAQCBjbGFzcyBKU1Rlc3ROYW1lZENvbnN0
cnVjdG9yUHJvdG90eXBlIDogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxP
YmplY3QgQmFzZTsKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0TmFtZWRDb25zdHJ1
Y3RvclByb3RvdHlwZSogY3JlYXRlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgc3RhdGljIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUqIGNyZWF0ZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3Rv
dHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yUHJvdG90eXBlPihnbG9iYWxEYXRhLmhlYXApKSBKU1Rlc3ROYW1lZENvbnN0cnVj
dG9yUHJvdG90eXBlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAg
ICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgSlNUZXN0TmFtZWRD
b25zdHJ1Y3RvclByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0TmFtZWRD
b25zdHJ1Y3RvclByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAg
ICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAK
ICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKIHBy
aXZhdGU6Ci0gICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZShKU0M6OkpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkg
eyB9CisgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05v
bkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsK
QEAgLTEyNSw5ICsxMjUsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwg
SlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUs
IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJ
bmZvIHNfaW5mbzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4g
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7CiAgICAgfQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
SlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0
dXJlRmxhZ3M7CkBAIC0xNDQsOSArMTQ0LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY29u
c3RydWN0b3I7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNs
YXNzSW5mbyBzX2luZm87CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY0LDEwICs2NCwxMCBAQCBKU1Rlc3ROb2RlQ29uc3RydWN0b3I6OkpT
VGVzdE5vZGVDb25zdHJ1CiAKIHZvaWQgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVh
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7
Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5m
bykpOwotICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUsIEpTVGVzdE5vZGVQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2Jq
ZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9u
bHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3ROb2RlUHJvdG90eXBlOjpzZWxm
KGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGly
ZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDAp
LCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKIGJvb2wgSlNUZXN0Tm9k
ZUNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAg
LTEwOCwxNSArMTA4LDE1IEBAIEpTVGVzdE5vZGU6OkpTVGVzdE5vZGUoU3RydWN0dXJlKiBzdHJ1
Y3QKIHsKIH0KIAotdm9pZCBKU1Rlc3ROb2RlOjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCit2b2lkIEpTVGVzdE5vZGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsK
LSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIH0KIAogSlNPYmpl
Y3QqIEpTVGVzdE5vZGU6OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgcmV0dXJuIEpTVGVzdE5vZGVQcm90b3R5cGU6
OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgSlNUZXN0Tm9kZVByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBK
U05vZGVQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSkpOworICAgIHJldHVybiBK
U1Rlc3ROb2RlUHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBKU1Rl
c3ROb2RlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0
LCBKU05vZGVQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSkpOwogfQogCiBib29s
IEpTVGVzdE5vZGU6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Tm9kZS5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw4
IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTTm9kZSBCYXNlOwogICAgIHN0YXRpYyBKU1Rlc3RO
b2RlKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxUZXN0Tm9kZT4gaW1wbCkKICAgICB7Ci0gICAgICAg
IEpTVGVzdE5vZGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0
Tm9kZT4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkpIEpTVGVzdE5vZGUoc3RydWN0
dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGds
b2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNUZXN0Tm9kZSogcHRyID0gbmV3
IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROb2RlPihnbG9iYWxPYmplY3QtPnZt
KCkuaGVhcCkpIEpTVGVzdE5vZGUoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOworICAg
ICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CiAgICAgICAgIHJl
dHVybiBwdHI7CiAgICAgfQogCkBAIC00Myw5ICs0Myw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAg
c3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpT
Qzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U0dsb2JhbE9iamVjdCopOwpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoK
ICAgICBKU1Rlc3ROb2RlKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqLCBQYXNz
UmVmUHRyPFRlc3ROb2RlPik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkpTR2xvYmFs
RGF0YSYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwogICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVu
TGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3Ry
dWN0dXJlRmxhZ3M7CiB9OwogCkBAIC02MiwyMSArNjIsMjEgQEAgY2xhc3MgSlNUZXN0Tm9kZVBy
b3RvdHlwZSA6IHB1YmxpYyBKU0M6OgogcHVibGljOgogICAgIHR5cGVkZWYgSlNDOjpKU05vbkZp
bmFsT2JqZWN0IEJhc2U7CiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdE5vZGVQcm90
b3R5cGUqIGNyZWF0ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHN0
YXRpYyBKU1Rlc3ROb2RlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7
Ci0gICAgICAgIEpTVGVzdE5vZGVQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjph
bGxvY2F0ZUNlbGw8SlNUZXN0Tm9kZVByb3RvdHlwZT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNUZXN0
Tm9kZVByb3RvdHlwZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEpTVGVzdE5vZGVQ
cm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9k
ZVByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE5vZGVQcm90b3R5cGUodm0sIGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAg
IHJldHVybiBwdHI7CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNf
aW5mbzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cisg
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
JnNfaW5mbyk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEpTVGVzdE5vZGVQcm90b3R5cGUoSlND
OjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUpIHsgfQorICAgIEpTVGVzdE5vZGVQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25G
aW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4g
fCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CkBAIC05OCw5ICs5OCw5IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAg
ICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpT
Qzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiBwcm90ZWN0
ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IERP
TUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCShyZXZp
c2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDEwICsyMjgsMTAgQEAgSlNUZXN0
T2JqQ29uc3RydWN0b3I6OkpTVGVzdE9iakNvbnN0cnVjdAogCiB2b2lkIEpTVGVzdE9iakNvbnN0
cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFs
RGF0YSgpKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKICAgICBBU1NF
UlQoaW5oZXJpdHMoJnNfaW5mbykpOwotICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCks
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdE9ialByb3RvdHlwZTo6c2Vs
ZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwotICAgIHB1dERp
cmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpz
TnVtYmVyKDEpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CisgICAgcHV0RGly
ZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdE9i
alByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9u
bHkpOworICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQog
CiBib29sIEpTVGVzdE9iakNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYgc2xvdCkKQEAgLTM2MSwxNSArMzYxLDE1IEBAIEpTVGVzdE9iajo6SlNUZXN0T2JqKFN0
cnVjdHVyZSogc3RydWN0dXIKIHsKIH0KIAotdm9pZCBKU1Rlc3RPYmo6OmZpbmlzaENyZWF0aW9u
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgSlNUZXN0T2JqOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7
CiB9CiAKIEpTT2JqZWN0KiBKU1Rlc3RPYmo6OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgcmV0dXJuIEpTVGVzdE9i
alByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBKU1Rl
c3RPYmpQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEo
KSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CisgICAg
cmV0dXJuIEpTVGVzdE9ialByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGdsb2JhbE9iamVj
dCwgSlNUZXN0T2JqUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT52bSgp
LCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAog
dm9pZCBKU1Rlc3RPYmo6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCkBAIC04NjUsNyArODY1
LDcgQEAgSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUxKEV4ZWNTdAogICAgICAgICBy
ZXR1cm4gY2FjaGVkVmFsdWU7CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RP
YmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gKGltcGwtPmNh
Y2hlZEF0dHJpYnV0ZTEoKS5oYXNOb1ZhbHVlKCkgPyBqc051bGwoKSA6IGltcGwtPmNhY2hlZEF0
dHJpYnV0ZTEoKS5qc1ZhbHVlKCkpOwotICAgIGNhc3RlZFRoaXMtPm1fY2FjaGVkQXR0cmlidXRl
MS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBjYXN0ZWRUaGlzLCByZXN1bHQpOworICAgIGNhc3Rl
ZFRoaXMtPm1fY2FjaGVkQXR0cmlidXRlMS5zZXQoZXhlYy0+dm0oKSwgY2FzdGVkVGhpcywgcmVz
dWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC04NzgsNyArODc4LDcgQEAgSlNWYWx1
ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUyKEV4ZWNTdAogICAgICAgICByZXR1cm4gY2FjaGVk
VmFsdWU7CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRU
aGlzLT5pbXBsKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gKGltcGwtPmNhY2hlZEF0dHJpYnV0
ZTIoKS5oYXNOb1ZhbHVlKCkgPyBqc051bGwoKSA6IGltcGwtPmNhY2hlZEF0dHJpYnV0ZTIoKS5q
c1ZhbHVlKCkpOwotICAgIGNhc3RlZFRoaXMtPm1fY2FjaGVkQXR0cmlidXRlMi5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBjYXN0ZWRUaGlzLCByZXN1bHQpOworICAgIGNhc3RlZFRoaXMtPm1fY2Fj
aGVkQXR0cmlidXRlMi5zZXQoZXhlYy0+dm0oKSwgY2FzdGVkVGhpcywgcmVzdWx0KTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNTQyLDcgKzE1NDIsNyBAQCB2b2lkIHNldEpTVGVzdE9i
akNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1CiB7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAganNDYXN0PEpTVGVzdE9i
aio+KHRoaXNPYmplY3QpLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVy
KGV4ZWMsICJjb25kaXRpb25hbEF0dHI0IiksIHZhbHVlKTsKKyAgICBqc0Nhc3Q8SlNUZXN0T2Jq
Kj4odGhpc09iamVjdCktPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJj
b25kaXRpb25hbEF0dHI0IiksIHZhbHVlKTsKIH0KIAogI2VuZGlmCkBAIC0xNTUyLDcgKzE1NTIs
NyBAQCB2b2lkIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1CiB7CiAgICAgVU5V
U0VEX1BBUkFNKGV4ZWMpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9y
Ci0gICAganNDYXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpLT5wdXREaXJlY3QoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJjb25kaXRpb25hbEF0dHI1IiksIHZhbHVlKTsK
KyAgICBqc0Nhc3Q8SlNUZXN0T2JqKj4odGhpc09iamVjdCktPnB1dERpcmVjdChleGVjLT52bSgp
LCBJZGVudGlmaWVyKGV4ZWMsICJjb25kaXRpb25hbEF0dHI1IiksIHZhbHVlKTsKIH0KIAogI2Vu
ZGlmCkBAIC0xNTYyLDcgKzE1NjIsNyBAQCB2b2lkIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0
cjZDb25zdHJ1CiB7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIC8vIFNoYWRvd2luZyBh
IGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAganNDYXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3Qp
LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJjb25kaXRp
b25hbEF0dHI2IiksIHZhbHVlKTsKKyAgICBqc0Nhc3Q8SlNUZXN0T2JqKj4odGhpc09iamVjdCkt
PnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJjb25kaXRpb25hbEF0dHI2
IiksIHZhbHVlKTsKIH0KIAogI2VuZGlmCkBAIC0xNTcyLDcgKzE1NzIsNyBAQCB2b2lkIHNldEpT
VGVzdE9iakFueUF0dHJpYnV0ZShFeGVjU3RhdGUqCiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0
KTsKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMt
PmltcGwoKSk7Ci0gICAgU2NyaXB0VmFsdWUgbmF0aXZlVmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB2YWx1ZSk7CisgICAgU2NyaXB0VmFsdWUgbmF0aXZlVmFsdWUoZXhlYy0+dm0oKSwgdmFsdWUp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlt
cGwtPnNldEFueUF0dHJpYnV0ZShuYXRpdmVWYWx1ZSk7CkBAIC0xNjQzLDcgKzE2NDMsNyBAQCB2
b2lkIHNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKEV4CiB7CiAgICAgVU5VU0VEX1BB
UkFNKGV4ZWMpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIG9iamVjdAotICAgIGpzQ2Fz
dDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
SWRlbnRpZmllcihleGVjLCAicmVwbGFjZWFibGVBdHRyaWJ1dGUiKSwgdmFsdWUpOworICAgIGpz
Q2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50
aWZpZXIoZXhlYywgInJlcGxhY2VhYmxlQXR0cmlidXRlIiksIHZhbHVlKTsKIH0KIAogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDggQEAg
cHVibGljOgogICAgIHR5cGVkZWYgSlNET01XcmFwcGVyIEJhc2U7CiAgICAgc3RhdGljIEpTVGVz
dE9iaiogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8VGVzdE9iaj4gaW1wbCkKICAgICB7Ci0gICAgICAg
IEpTVGVzdE9iaiogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RP
Ymo+KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLmhlYXApKSBKU1Rlc3RPYmooc3RydWN0dXJl
LCBnbG9iYWxPYmplY3QsIGltcGwpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNUZXN0T2JqKiBwdHIgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE9iaj4oZ2xvYmFsT2JqZWN0LT52bSgpLmhl
YXApKSBKU1Rlc3RPYmooc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOworICAgICAgICBw
dHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CiAgICAgICAgIHJldHVybiBw
dHI7CiAgICAgfQogCkBAIC00Nyw5ICs0Nyw5IEBAIHB1YmxpYzoKICAgICB+SlNUZXN0T2JqKCk7
CiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBK
U0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGds
b2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJ
bmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAK
ICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU0dsb2JhbE9iamVjdCopOwpAQCAtNzUsNyArNzUsNyBAQCBwcml2YXRlOgogICAgIFRl
c3RPYmoqIG1faW1wbDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RPYmooSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8VGVzdE9iaj4pOwotICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNDOjpKU0dsb2JhbERhdGEmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTQzo6Vk0mKTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBK
U0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW50ZXJjZXB0c0dldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVz
VmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIApAQCAtMTAzLDIzICsx
MDMsMjMgQEAgY2xhc3MgSlNUZXN0T2JqUHJvdG90eXBlIDogcHVibGljIEpTQzo6SgogcHVibGlj
OgogICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAgICAgc3RhdGljIEpT
Qzo6SlNPYmplY3QqIHNlbGYoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7
Ci0gICAgc3RhdGljIEpTVGVzdE9ialByb3RvdHlwZSogY3JlYXRlKEpTQzo6SlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgc3RhdGljIEpTVGVzdE9ialByb3RvdHlwZSogY3JlYXRl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBKU1Rlc3RPYmpQcm90b3R5cGUqIHB0
ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0T2JqUHJvdG90eXBlPihn
bG9iYWxEYXRhLmhlYXApKSBKU1Rlc3RPYmpQcm90b3R5cGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEp
OworICAgICAgICBKU1Rlc3RPYmpQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjph
bGxvY2F0ZUNlbGw8SlNUZXN0T2JqUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0T2JqUHJvdG90
eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3Jl
YXRpb24odm0pOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25z
dCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlND
OjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpT
Qzo6UHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMg
SlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBKU1Rl
c3RPYmpQcm90b3R5cGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9i
amVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpIHsgfQorICAgIEpTVGVzdE9ialByb3RvdHlwZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1
cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQogcHJvdGVjdGVk
OgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFz
ZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwpAQCAtMTQxLDkgKzE0MSw5IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBz
dGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisg
ICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEs
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiBwcm90ZWN0ZWQ6
CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IERPTUNv
bnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDEwICsxMjUsMTAgQEAgSlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOgogCiB2b2lkIEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+
dm0oKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLSAgICBwdXREaXJlY3QoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCks
IERvbnREZWxldGUgfCBSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSksIFJlYWRPbmx5IHwg
RG9udERlbGV0ZSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1By
b3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
OworICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
LCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCiBi
b29sIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVy
dHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC0xNzAsMTUgKzE3MCwxNSBAQCBKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzOjpKU1Rlc3RPdmVyCiB7CiB9CiAKLXZvaWQgSlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yczo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQordm9pZCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiB9
CiAKIEpTT2JqZWN0KiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGVQcm90b3R5
cGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAg
IHJldHVybiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlOjpjcmVhdGUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwg
Z2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CisgICAgcmV0
dXJuIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGU6OmNyZWF0ZShleGVjLT52
bSgpLCBnbG9iYWxPYmplY3QsIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGU6
OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQogCiB2b2lkIEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnM6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDggQEAgcHVibGljOgogICAg
IHR5cGVkZWYgSlNET01XcmFwcGVyIEJhc2U7CiAgICAgc3RhdGljIEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnMqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzPiBpbXBsKQogICAgIHsKLSAgICAgICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyog
cHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzPihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKSkgSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycyhzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7Ci0gICAgICAg
IHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpOworICAgICAg
ICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6
YWxsb2NhdGVDZWxsPEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+KGdsb2JhbE9iamVjdC0+
dm0oKS5oZWFwKSkgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyhzdHJ1Y3R1cmUsIGdsb2Jh
bE9iamVjdCwgaW1wbCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0
LT52bSgpKTsKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAKQEAgLTQ2LDkgKzQ2LDkgQEAg
cHVibGljOgogICAgIH5KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKCk7CiAgICAgc3RhdGlj
IGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAg
c3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCopOwpAQCAtNjEsNyArNjEsNyBAQCBwcml2YXRlOgogICAgIFRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzKiBtX2ltcGw7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9ycyhKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0
cjxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4pOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
SlNDOjpKU0dsb2JhbERhdGEmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsK
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsK
IApAQCAtODksMjEgKzg5LDIxIEBAIGNsYXNzIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQ
cm90b3QKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwog
ICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0ds
b2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJv
dG90eXBlKiBjcmVhdGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBz
dGF0aWMgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSogY3JlYXRlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGU+KGdsb2JhbERhdGEuaGVhcCkpIEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAg
ICAgICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90
b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKHZt
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24o
dm0pOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBKU0M6
OkNsYXNzSW5mbyBzX2luZm87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6
OkpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKSB7IH0KKyAgICBKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmpl
Y3Qodm0sIHN0cnVjdHVyZSkgeyB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwpAQCAtMTI1LDkg
KzEyNSw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlND
OjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3Bl
cnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6
OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9w
ZXJ0eURlc2NyaXB0b3ImKTsKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZv
OwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKICAgICB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxl
bWVudHNIYXNJbnN0YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODgsMTAgKzg4LDEwIEBAIEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZUNvbnMKIAogdm9pZCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0o
KSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLSAgICBwdXREaXJlY3QoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2Jq
ZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigzKSwgUmVhZE9u
bHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLmxlbmd0aCwganNOdW1iZXIoMyksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRF
bnVtKTsKIH0KIAogYm9vbCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25z
dHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC0xNDcs
MTUgKzE0NywxNSBAQCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OkpTCiB7
CiB9CiAKLXZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpmaW5pc2hD
cmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewotICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogfQogCiBKU09iamVjdCogSlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpjcmVhdGVQcm90b3R5cGUoRXhlY1N0YXRl
KiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIHJldHVybiBKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6OmNyZWF0ZShleGVjLT5n
bG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRh
KCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworICAg
IHJldHVybiBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6OmNy
ZWF0ZShleGVjLT52bSgpLCBnbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+dm0oKSwg
Z2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKIHZv
aWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpkZXN0cm95KEpTQzo6SlND
ZWxsKiBjZWxsKQpAQCAtMjExLDcgKzIxMSw3IEBAIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXIKICAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlOwogICAgIFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGltcGwtPmNhY2hlZFZhbHVlKCkgPyBpbXBsLT5jYWNoZWRWYWx1ZSgpLT5k
ZXNlcmlhbGl6ZShleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwo
KTsKLSAgICBjYXN0ZWRUaGlzLT5tX2NhY2hlZFZhbHVlLnNldChleGVjLT5nbG9iYWxEYXRhKCks
IGNhc3RlZFRoaXMsIHJlc3VsdCk7CisgICAgY2FzdGVkVGhpcy0+bV9jYWNoZWRWYWx1ZS5zZXQo
ZXhlYy0+dm0oKSwgY2FzdGVkVGhpcywgcmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CkBAIC0yMzQsNyArMjM0LDcgQEAgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcgogICAgICAgICByZXR1cm4gY2FjaGVkVmFsdWU7CiAgICAgVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0gaW1wbC0+Y2FjaGVkUmVhZG9ubHlWYWx1ZSgpID8gaW1wbC0+Y2FjaGVkUmVhZG9ubHlWYWx1
ZSgpLT5kZXNlcmlhbGl6ZShleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgMCkgOiBq
c051bGwoKTsKLSAgICBjYXN0ZWRUaGlzLT5tX2NhY2hlZFJlYWRvbmx5VmFsdWUuc2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgY2FzdGVkVGhpcywgcmVzdWx0KTsKKyAgICBjYXN0ZWRUaGlzLT5tX2Nh
Y2hlZFJlYWRvbmx5VmFsdWUuc2V0KGV4ZWMtPnZtKCksIGNhc3RlZFRoaXMsIHJlc3VsdCk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw4IEBAIHB1Ymxp
YzoKICAgICB0eXBlZGVmIEpTRE9NV3JhcHBlciBCYXNlOwogICAgIHN0YXRpYyBKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+IGltcGwpCiAgICAgewotICAgICAgICBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjph
bGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPihnbG9iYWxP
YmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKSkgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKLSAgICAgICAgcHRyLT5maW5p
c2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFs
bG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+KGdsb2JhbE9i
amVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKHN0
cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlv
bihnbG9iYWxPYmplY3QtPnZtKCkpOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIApAQCAt
NDksOSArNDksOSBAQCBwdWJsaWM6CiAgICAgfkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSgpOwogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAKLSAg
ICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6
OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKQEAgLTY4LDcgKzY4LDcgQEAgcHJpdmF0
ZToKICAgICBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBtX2ltcGw7CiBwcm90
ZWN0ZWQ6CiAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKEpTQzo6U3Ry
dWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPFRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2U+KTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6SlNHbG9i
YWxEYXRhJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CiAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpT
dHJ1Y3R1cmVGbGFnczsKIH07CiAKQEAgLTk2LDIzICs5NiwyMyBAQCBjbGFzcyBKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0M6OkpTTm9u
RmluYWxPYmplY3QgQmFzZTsKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBzdGF0aWMgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7Ci0g
ICAgICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSogcHRy
ID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU+KGdsb2JhbERhdGEuaGVhcCkpIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Cisg
ICAgICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSogcHRy
ID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAg
ICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAg
fQogCiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICBzdGF0aWMg
SlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJv
dG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShn
bG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQog
CiBwcml2YXRlOgotICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3Rv
dHlwZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSkgeyB9CisgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVy
ZSkgeyB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1Zp
c2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CkBAIC0xMzQsOSArMTM0LDkg
QEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2Vs
bCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90
Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVz
Y3JpcHRvciYpOwogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87Ci0gICAg
c3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8o
SlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwog
ICAgIH0KIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW1wbGVtZW50c0hh
c0luc3RhbmNlIHwgRE9NQ29uc3RydWN0b3JPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0VHlwZWRlZnMuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MCwxMCArOTAsMTAgQEAgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcjo6SlNUZXN0VHlw
ZWRlZgogCiB2b2lkIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKGV4ZWMtPnZtKCkpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0g
ICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnBy
b3RvdHlwZSwgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0
KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigyKSwgUmVhZE9ubHkg
fCBEb250RGVsZXRlIHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZTo6c2Vs
ZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERp
cmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigy
KSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCiBib29sIEpTVGVzdFR5
cGVkZWZzQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQpAQCAtMTU3LDE1ICsxNTcsMTUgQEAgSlNUZXN0VHlwZWRlZnM6OkpTVGVzdFR5cGVkZWZzKFN0
cnVjdHVyZQogewogfQogCi12b2lkIEpTVGVzdFR5cGVkZWZzOjpmaW5pc2hDcmVhdGlvbihKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEpTVGVzdFR5cGVkZWZzOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7
CiB9CiAKIEpTT2JqZWN0KiBKU1Rlc3RUeXBlZGVmczo6Y3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0
ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICByZXR1cm4gSlNU
ZXN0VHlwZWRlZnNQcm90b3R5cGU6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9i
amVjdCwgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmpl
Y3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3Rv
dHlwZSgpKSk7CisgICAgcmV0dXJuIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlOjpjcmVhdGUoZXhl
Yy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9i
amVjdFByb3RvdHlwZSgpKSk7CiB9CiAKIHZvaWQgSlNUZXN0VHlwZWRlZnM6OmRlc3Ryb3koSlND
OjpKU0NlbGwqIGNlbGwpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0VHlwZWRlZnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuaAkocmV2aXNpb24gMTQ4NjM4KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDggQEAgcHVibGljOgogICAgIHR5cGVkZWYg
SlNET01XcmFwcGVyIEJhc2U7CiAgICAgc3RhdGljIEpTVGVzdFR5cGVkZWZzKiBjcmVhdGUoSlND
OjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UGFzc1JlZlB0cjxUZXN0VHlwZWRlZnM+IGltcGwpCiAgICAgewotICAgICAgICBKU1Rlc3RUeXBl
ZGVmcyogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RUeXBlZGVm
cz4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkpIEpTVGVzdFR5cGVkZWZzKHN0cnVj
dHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihn
bG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEpTVGVzdFR5cGVkZWZzKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFR5cGVkZWZzPihnbG9iYWxP
YmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdFR5cGVkZWZzKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0
LCBpbXBsKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkp
OwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIApAQCAtNDcsOSArNDcsOSBAQCBwdWJsaWM6
CiAgICAgfkpTVGVzdFR5cGVkZWZzKCk7CiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZv
IHNfaW5mbzsKIAotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwpAQCAtNjIsNyAr
NjIsNyBAQCBwcml2YXRlOgogICAgIFRlc3RUeXBlZGVmcyogbV9pbXBsOwogcHJvdGVjdGVkOgog
ICAgIEpTVGVzdFR5cGVkZWZzKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqLCBQ
YXNzUmVmUHRyPFRlc3RUeXBlZGVmcz4pOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpK
U0dsb2JhbERhdGEmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhF
dmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIApAQCAt
OTAsMjMgKzkwLDIzIEBAIGNsYXNzIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlIDogcHVibGljIEoK
IHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwogICAgIHN0
YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9i
amVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSogY3JlYXRlKEpTQzo6
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgc3RhdGljIEpTVGVzdFR5cGVkZWZz
UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIEpTVGVz
dFR5cGVkZWZzUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxs
PEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlPihnbG9iYWxEYXRhLmhlYXApKSBKU1Rlc3RUeXBlZGVm
c1Byb3RvdHlwZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAg
IHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEpTVGVzdFR5cGVkZWZz
UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFR5
cGVkZWZzUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xh
c3NJbmZvIHNfaW5mbzsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpK
U0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5
U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpT
T2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0
eURlc2NyaXB0b3ImKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEpTVGVzdFR5cGVkZWZz
UHJvdG90eXBlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qo
Z2xvYmFsRGF0YSwgc3RydWN0dXJlKSB7IH0KKyAgICBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1
cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQogcHJvdGVjdGVk
OgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwpAQCAtMTI4
LDkgKzEyOCw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlBy
b3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQ
cm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19p
bmZvOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAm
c19pbmZvKTsKICAgICB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Oklt
cGxlbWVudHNIYXNJbnN0YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFn
czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAJKHJldmlzaW9u
IDE0ODYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzgsMTQgKzM4LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogY29uc3QgQ2xh
c3NJbmZvIFJ1bnRpbWVBcnJheTo6c19pbmZvID0geyAiUnVudGltZUFycmF5IiwgJkJhc2U6OnNf
aW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShSdW50aW1lQXJyYXkpIH07CiAKIFJ1bnRp
bWVBcnJheTo6UnVudGltZUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCi0gICAgOiBKU0FycmF5KGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCAwKQorICAg
IDogSlNBcnJheShleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIDApCiAgICAgLCBtX2FycmF5KDApCiB7
CiB9CiAKLXZvaWQgUnVudGltZUFycmF5OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEJpbmRpbmdzOjpBcnJheSogYXJyYXkpCit2b2lkIFJ1bnRpbWVBcnJheTo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBCaW5kaW5nczo6QXJyYXkqIGFycmF5KQogewotICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogICAgIG1fYXJyYXkgPSBhcnJheTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkocmV2aXNpb24gMTQ4
NjM4KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkod29ya2luZyBj
b3B5KQpAQCAtNDIsOCArNDIsOCBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gcGFz
cyBpbiB0aGUgcmlnaHQgZ2xvYmFsIG9iamVjdCBmb3IgImFycmF5Ii4KICAgICAgICAgU3RydWN0
dXJlKiBkb21TdHJ1Y3R1cmUgPSBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPFJ1
bnRpbWVBcnJheT4oZXhlYyk7CiAgICAgICAgIFJ1bnRpbWVBcnJheSogcnVudGltZUFycmF5ID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UnVudGltZUFycmF5PigqZXhlYy0+aGVhcCgpKSkg
UnVudGltZUFycmF5KGV4ZWMsIGRvbVN0cnVjdHVyZSk7Ci0gICAgICAgIHJ1bnRpbWVBcnJheS0+
ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBhcnJheSk7Ci0gICAgICAgIGV4ZWMt
Pmdsb2JhbERhdGEoKS5oZWFwLmFkZEZpbmFsaXplcihydW50aW1lQXJyYXksIGRlc3Ryb3kpOwor
ICAgICAgICBydW50aW1lQXJyYXktPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCksIGFycmF5KTsK
KyAgICAgICAgZXhlYy0+dm0oKS5oZWFwLmFkZEZpbmFsaXplcihydW50aW1lQXJyYXksIGRlc3Ry
b3kpOwogICAgICAgICByZXR1cm4gcnVudGltZUFycmF5OwogICAgIH0KIApAQCAtNzMsMTMgKzcz
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+YXJyYXlQcm90b3R5
cGUoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAm
c19pbmZvLCBBcnJheUNsYXNzKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvLCBBcnJheUNsYXNzKTsKICAgICB9CiAKIHByb3RlY3RlZDoKLSAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYsIEJpbmRpbmdzOjpBcnJheSopOworICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBCaW5kaW5nczo6QXJyYXkqKTsKIAogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm8gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNBcnJheTo6U3RydWN0dXJl
RmxhZ3M7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcAko
cmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgsOSBAQCBSdW50aW1lTWV0aG9kOjpSdW50
aW1lTWV0aG9kKEpTR2xvYmFsT2JqCiB7CiB9CiAKLXZvaWQgUnVudGltZU1ldGhvZDo6ZmluaXNo
Q3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTdHJpbmcmIGlkZW50KQor
dm9pZCBSdW50aW1lTWV0aG9kOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIGNvbnN0IFN0cmluZyYg
aWRlbnQpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgaWRlbnQpOwor
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBpZGVudCk7CiAgICAgQVNTRVJUKGluaGVyaXRz
KCZzX2luZm8pKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0
aG9kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9k
LmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21l
dGhvZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgUnVudGltZU1ldGhvZCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFN0cmluZyYgbmFtZSwg
QmluZGluZ3M6Ok1ldGhvZCogbWV0aG9kKQogICAgIHsKICAgICAgICAgUnVudGltZU1ldGhvZCog
cnVudGltZU1ldGhvZCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFJ1bnRpbWVNZXRob2Q+
KCpleGVjLT5oZWFwKCkpKSBSdW50aW1lTWV0aG9kKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBt
ZXRob2QpOwotICAgICAgICBydW50aW1lTWV0aG9kLT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9i
YWxEYXRhKCksIG5hbWUpOworICAgICAgICBydW50aW1lTWV0aG9kLT5maW5pc2hDcmVhdGlvbihl
eGVjLT52bSgpLCBuYW1lKTsKICAgICAgICAgcmV0dXJuIHJ1bnRpbWVNZXRob2Q7CiAgICAgfQog
CkBAIC01MywxNCArNTMsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0
LT5mdW5jdGlvblByb3RvdHlwZSgpOwogICAgIH0KIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGds
b2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogcHJvdGVjdGVkOgogICAgIFJ1bnRpbWVN
ZXRob2QoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBCaW5kaW5nczo6TWV0aG9kKik7Ci0g
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmLCBjb25zdCBTdHJpbmcmKTsKKyAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgY29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgSW50ZXJuYWxGdW5jdGlvbjo6U3RydWN0dXJlRmxhZ3M7CiAgICAgc3RhdGljIENhbGxUeXBl
IGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dl
YkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTQg
KzM4LDE0IEBAIG5hbWVzcGFjZSBCaW5kaW5ncyB7CiBjb25zdCBDbGFzc0luZm8gUnVudGltZU9i
amVjdDo6c19pbmZvID0geyAiUnVudGltZU9iamVjdCIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoUnVudGltZU9iamVjdCkgfTsKIAogUnVudGltZU9iamVjdDo6UnVu
dGltZU9iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxJbnN0YW5jZT4gaW5zdGFuY2UpCi0gICAgOiBK
U0Rlc3RydWN0aWJsZU9iamVjdChnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJl
KQorICAgIDogSlNEZXN0cnVjdGlibGVPYmplY3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBzdHJ1Y3R1
cmUpCiAgICAgLCBtX2luc3RhbmNlKGluc3RhbmNlKQogewogfQogCiB2b2lkIFJ1bnRpbWVPYmpl
Y3Q6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpOworICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKCZzX2luZm8pKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
b2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2Jq
ZWN0LmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1l
X29iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw5ICs2OCw5IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCk7CiAgICAgfQogCi0gICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiBwcm90
ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9yb290LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9yb290LmNwcAkocmV2aXNp
b24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgUGFzc1JlZlB0cjxSb290T2JqZWN0PiBSb290
T2JqZWN0OjpjcmVhdAogUm9vdE9iamVjdDo6Um9vdE9iamVjdChjb25zdCB2b2lkKiBuYXRpdmVI
YW5kbGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgOiBtX2lzVmFsaWQodHJ1
ZSkKICAgICAsIG1fbmF0aXZlSGFuZGxlKG5hdGl2ZUhhbmRsZSkKLSAgICAsIG1fZ2xvYmFsT2Jq
ZWN0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QpCisgICAgLCBtX2ds
b2JhbE9iamVjdChnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdCkKIHsKICAgICBBU1NF
UlQoZ2xvYmFsT2JqZWN0KTsKICAgICByb290T2JqZWN0U2V0KCktPmFkZCh0aGlzKTsKQEAgLTE0
MSw3ICsxNDEsNyBAQCB2b2lkIFJvb3RPYmplY3Q6OmdjUHJvdGVjdChKU09iamVjdCoganNPCiAg
ICAgQVNTRVJUKG1faXNWYWxpZCk7CiAgICAgCiAgICAgaWYgKCFtX3Byb3RlY3RDb3VudFNldC5j
b250YWlucyhqc09iamVjdCkpIHsKLSAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgaG9sZGVyKCZn
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIg
aG9sZGVyKCZnbG9iYWxPYmplY3QoKS0+dm0oKSk7CiAgICAgICAgIEpTQzo6Z2NQcm90ZWN0KGpz
T2JqZWN0KTsKICAgICB9CiAgICAgbV9wcm90ZWN0Q291bnRTZXQuYWRkKGpzT2JqZWN0KTsKQEAg
LTE1NSw3ICsxNTUsNyBAQCB2b2lkIFJvb3RPYmplY3Q6OmdjVW5wcm90ZWN0KEpTT2JqZWN0KiBq
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3Byb3RlY3RDb3VudFNldC5jb3VudChqc09i
amVjdCkgPT0gMSkgewotICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBob2xkZXIoJmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBob2xkZXIo
Jmdsb2JhbE9iamVjdCgpLT52bSgpKTsKICAgICAgICAgSlNDOjpnY1VucHJvdGVjdChqc09iamVj
dCk7CiAgICAgfQogICAgIG1fcHJvdGVjdENvdW50U2V0LnJlbW92ZShqc09iamVjdCk7CkBAIC0x
ODEsMTAgKzE4MSwxMCBAQCBKU0dsb2JhbE9iamVjdCogUm9vdE9iamVjdDo6Z2xvYmFsT2JqZWN0
CiAKIHZvaWQgUm9vdE9iamVjdDo6dXBkYXRlR2xvYmFsT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCiB7Ci0gICAgbV9nbG9iYWxPYmplY3Quc2V0KGdsb2JhbE9iamVjdC0+Z2xv
YmFsRGF0YSgpLCBnbG9iYWxPYmplY3QpOworICAgIG1fZ2xvYmFsT2JqZWN0LnNldChnbG9iYWxP
YmplY3QtPnZtKCksIGdsb2JhbE9iamVjdCk7CiB9CiAKLXZvaWQgUm9vdE9iamVjdDo6YWRkUnVu
dGltZU9iamVjdChKU0dsb2JhbERhdGEmLCBSdW50aW1lT2JqZWN0KiBvYmplY3QpCit2b2lkIFJv
b3RPYmplY3Q6OmFkZFJ1bnRpbWVPYmplY3QoVk0mLCBSdW50aW1lT2JqZWN0KiBvYmplY3QpCiB7
CiAgICAgQVNTRVJUKG1faXNWYWxpZCk7CiAgICAgd2Vha0FkZChtX3J1bnRpbWVPYmplY3RzLCBv
YmplY3QsIEpTQzo6UGFzc1dlYWs8UnVudGltZU9iamVjdD4ob2JqZWN0LCB0aGlzKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9yb290LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9yb290LmgJKHdvcmtpbmcgY29weSkKQEAgLTcw
LDcgKzcwLDcgQEAgcHVibGljOgogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBj
b25zdDsKICAgICB2b2lkIHVwZGF0ZUdsb2JhbE9iamVjdChKU0dsb2JhbE9iamVjdCopOwogCi0g
ICAgdm9pZCBhZGRSdW50aW1lT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFJ1bnRpbWVPYmplY3QqKTsK
KyAgICB2b2lkIGFkZFJ1bnRpbWVPYmplY3QoVk0mLCBSdW50aW1lT2JqZWN0Kik7CiAgICAgdm9p
ZCByZW1vdmVSdW50aW1lT2JqZWN0KFJ1bnRpbWVPYmplY3QqKTsKIAogICAgIHN0cnVjdCBJbnZh
bGlkYXRpb25DYWxsYmFjayB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9DUnVudGlt
ZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL0NSdW50aW1l
T2JqZWN0LmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL0NS
dW50aW1lT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDkgKzU0LDkgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKIHByaXZhdGU6CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysg
U291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExNywxMyArMTE3LDEzIEBAIHB1YmxpYzoKICAgICAgICAgLy8gV2UgbmVlZCB0byBwYXNzIGlu
IHRoZSByaWdodCBnbG9iYWwgb2JqZWN0IGZvciAiaSIuCiAgICAgICAgIFN0cnVjdHVyZSogZG9t
U3RydWN0dXJlID0gV2ViQ29yZTo6ZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZTxDUnVudGltZU1l
dGhvZD4oZXhlYyk7CiAgICAgICAgIENSdW50aW1lTWV0aG9kKiBydW50aW1lTWV0aG9kID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8Q1J1bnRpbWVNZXRob2Q+KCpleGVjLT5oZWFwKCkpKSBD
UnVudGltZU1ldGhvZChnbG9iYWxPYmplY3QsIGRvbVN0cnVjdHVyZSwgbWV0aG9kKTsKLSAgICAg
ICAgcnVudGltZU1ldGhvZC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBuYW1l
KTsKKyAgICAgICAgcnVudGltZU1ldGhvZC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwgbmFt
ZSk7CiAgICAgICAgIHJldHVybiBydW50aW1lTWV0aG9kOwogICAgIH0KIAotICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gc19pbmZvOwpAQCAtMTM0LDkgKzEzNCw5IEBAIHByaXZhdGU6CiAgICAg
ewogICAgIH0KIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGdsb2JhbERhdGEsIG5hbWUpOworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgbmFt
ZSk7CiAgICAgICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9icmlkZ2UvanNjL0JyaWRnZUpTQy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0MuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisr
KyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvanNjL0JyaWRnZUpTQy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgzLDcgKzgzLDcgQEAgSlNPYmplY3QqIEluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0
KAogICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFJ1bnRpbWVPYmplY3QqIG5ld09i
amVjdCA9IG5ld1J1bnRpbWVPYmplY3QoZXhlYyk7CiAgICAgbV9ydW50aW1lT2JqZWN0ID0gUGFz
c1dlYWs8UnVudGltZU9iamVjdD4obmV3T2JqZWN0KTsKLSAgICBtX3Jvb3RPYmplY3QtPmFkZFJ1
bnRpbWVPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBuZXdPYmplY3QpOworICAgIG1fcm9vdE9i
amVjdC0+YWRkUnVudGltZU9iamVjdChleGVjLT52bSgpLCBuZXdPYmplY3QpOwogICAgIHJldHVy
biBuZXdPYmplY3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL09iakNS
dW50aW1lT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMv
T2JqQ1J1bnRpbWVPYmplY3QuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUv
YnJpZGdlL29iamMvT2JqQ1J1bnRpbWVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsOSAr
NTEsOSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAot
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQor
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAog
cHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2Uu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5j
ZS5tbQkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2Jq
Y19pbnN0YW5jZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTg3LDEzICsxODcsMTMgQEAgcHVibGlj
OgogICAgICAgICAvLyBXZSBuZWVkIHRvIHBhc3MgaW4gdGhlIHJpZ2h0IGdsb2JhbCBvYmplY3Qg
Zm9yICJpIi4KICAgICAgICAgU3RydWN0dXJlKiBkb21TdHJ1Y3R1cmUgPSBXZWJDb3JlOjpkZXBy
ZWNhdGVkR2V0RE9NU3RydWN0dXJlPE9iakNSdW50aW1lTWV0aG9kPihleGVjKTsKICAgICAgICAg
T2JqQ1J1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxPYmpDUnVudGltZU1ldGhvZD4oKmV4ZWMtPmhlYXAoKSkpIE9iakNSdW50aW1lTWV0aG9k
KGdsb2JhbE9iamVjdCwgZG9tU3RydWN0dXJlLCBtZXRob2QpOwotICAgICAgICBydW50aW1lTWV0
aG9kLT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUpOworICAgICAgICBy
dW50aW1lTWV0aG9kLT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpLCBuYW1lKTsKICAgICAgICAg
cmV0dXJuIHJ1bnRpbWVNZXRob2Q7CiAgICAgfQogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25z
dCBDbGFzc0luZm8gc19pbmZvOwpAQCAtMjA2LDkgKzIwNiw5IEBAIHByaXZhdGU6CiAgICAgewog
ICAgIH0KIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0sIGNv
bnN0IFN0cmluZyYgbmFtZSkKICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGds
b2JhbERhdGEsIG5hbWUpOworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgbmFtZSk7
CiAgICAgICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiAgICAgfQogfTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5oCShyZXZpc2lvbiAxNDg2Mzgp
CisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTEyLDkgKzExMiw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGdsb2JhbE9i
amVjdC0+b2JqZWN0UHJvdG90eXBlKCk7CiAgICAgfQogCi0gICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
Z2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCShyZXZpc2lvbiAxNDg2Mzgp
CisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTE5MSw3ICsxOTEsNyBAQCB1bnNpZ25lZCBpbnQgT2JqY0FycmF5OjpnZXRMZW5n
dGgoKSBjb25zCiBjb25zdCBDbGFzc0luZm8gT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpzX2luZm8g
PSB7ICJPYmpjRmFsbGJhY2tPYmplY3QiLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKE9iamNGYWxsYmFja09iamVjdEltcCkgfTsKIAogT2JqY0ZhbGxiYWNrT2JqZWN0
SW1wOjpPYmpjRmFsbGJhY2tPYmplY3RJbXAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE9iamNJbnN0YW5jZSogaSwgY29uc3QgU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUpCi0gICAgOiBKU0Rlc3RydWN0aWJsZU9iamVjdChnbG9iYWxPYmplY3QtPmdsb2Jh
bERhdGEoKSwgc3RydWN0dXJlKQorICAgIDogSlNEZXN0cnVjdGlibGVPYmplY3QoZ2xvYmFsT2Jq
ZWN0LT52bSgpLCBzdHJ1Y3R1cmUpCiAgICAgLCBfaW5zdGFuY2UoaSkKICAgICAsIG1faXRlbShw
cm9wZXJ0eU5hbWUpCiB7CkBAIC0yMDQsNyArMjA0LDcgQEAgdm9pZCBPYmpjRmFsbGJhY2tPYmpl
Y3RJbXA6OmRlc3Ryb3koSlNDZQogCiB2b2lkIE9iamNGYWxsYmFja09iamVjdEltcDo6ZmluaXNo
Q3JlYXRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7CisgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5m
bykpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAJ
KHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5j
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDkgKzYwLDkgQEAgcHVibGljOgogICAgIAogICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
Z2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUs
ICBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCAg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKIHByb3RlY3RlZDoKQEAgLTkxLDcg
KzkxLDcgQEAgUXRJbnN0YW5jZTo6UXRJbnN0YW5jZShRT2JqZWN0KiBvLCBQYXNzUgogCiBRdElu
c3RhbmNlOjp+UXRJbnN0YW5jZSgpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soV2ViQ29yZTo6
SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKIAogICAgIGNhY2hl
ZEluc3RhbmNlcy5yZW1vdmUobV9oYXNoa2V5KTsKIApAQCAtMTE4LDcgKzExOCw3IEBAIFF0SW5z
dGFuY2U6On5RdEluc3RhbmNlKCkKIAogUGFzc1JlZlB0cjxRdEluc3RhbmNlPiBRdEluc3RhbmNl
OjpnZXRRdEluc3RhbmNlKFFPYmplY3QqIG8sIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdE9i
amVjdCwgVmFsdWVPd25lcnNoaXAgb3duZXJzaGlwKQogewotICAgIEpTTG9ja0hvbGRlciBsb2Nr
KFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAK
ICAgICBmb3JlYWNoIChRdEluc3RhbmNlKiBpbnN0YW5jZSwgY2FjaGVkSW5zdGFuY2VzLnZhbHVl
cyhvKSkKICAgICAgICAgaWYgKGluc3RhbmNlLT5yb290T2JqZWN0KCkgPT0gcm9vdE9iamVjdCkg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAKICNpbmNs
dWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHJ1bnRpbWUv
SlNHbG9iYWxEYXRhLmg+CisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgogI2luY2x1ZGUgPHJ1bnRp
bWUvT3BlcmF0aW9ucy5oPgogCiAjaWYgRU5BQkxFKE1JQ1JPREFUQSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
aAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKLSAgICBjbGFzcyBKU0dsb2JhbERhdGE7CisgICAgY2xh
c3MgVk07CiAgICAgY2xhc3MgU2xvdFZpc2l0b3I7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDA0LDE0ICs0MDQsMTQgQEAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzazo6
flRhc2soKQogewogfQogCi1KU0M6OkpTR2xvYmFsRGF0YSogU2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6Z2xvYmFsRGF0YSgpCitKU0M6OlZNKiBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojp2bSgpCiB7
CiAgICAgIGlmIChpc0RvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29t
bW9uSlNHbG9iYWxEYXRhKCk7CisgICAgICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uVk0o
KTsKIAogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgIGlmIChpc1dvcmtlckNvbnRleHQoKSkKLSAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPih0aGlzKS0+c2NyaXB0KCkt
Pmdsb2JhbERhdGEoKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQq
Pih0aGlzKS0+c2NyaXB0KCktPnZtKCk7CiAjZW5kaWYKIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
CShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogY2xhc3MgRXhlY1N0YXRlOwotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiB9
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE0Myw3ICsxNDMsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCByZW1vdmVUaW1lb3V0KGludCB0aW1lb3V0SWQpIHsgbV90aW1lb3V0cy5yZW1vdmUodGlt
ZW91dElkKTsgfQogICAgIERPTVRpbWVyKiBmaW5kVGltZW91dChpbnQgdGltZW91dElkKSB7IHJl
dHVybiBtX3RpbWVvdXRzLmdldCh0aW1lb3V0SWQpOyB9CiAKLSAgICBKU0M6OkpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSgpOworICAgIEpTQzo6Vk0qIHZtKCk7CiAKICAgICAvLyBJbnRlcnZhbCBp
cyBpbiBzZWNvbmRzLgogICAgIHZvaWQgYWRqdXN0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91Ymxl
IG9sZE1pbmltdW1UaW1lckludGVydmFsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUwLDkgKzU1MCw5
IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmUKICAgICBtX2ltYWdl
QnVmZmVyLT5jb250ZXh0KCktPnNldFN0cm9rZVRoaWNrbmVzcygxKTsKICAgICBtX2NvbnRleHRT
dGF0ZVNhdmVyID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIoKm1faW1h
Z2VCdWZmZXItPmNvbnRleHQoKSkpOwogCi0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmdsb2JhbERhdGEoKSk7CisgICAgSlNDOjpKU0xvY2tIb2xk
ZXIgbG9jayhzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnZtKCkpOwogICAgIHNpemVfdCBudW1C
eXRlcyA9IDQgKiBtX2ltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKS53aWR0aCgpICogbV9pbWFn
ZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5nbG9iYWxEYXRhKCktPmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KG51bUJ5dGVz
KTsKKyAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnZtKCktPmhlYXAucmVwb3J0RXh0cmFN
ZW1vcnlDb3N0KG51bUJ5dGVzKTsKIAogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpIHx8IChFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpKQogICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJkKCkp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3BwCShyZXZpc2lvbiAx
NDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc5LDkgKzc5LDkgQEAgdm9pZCBIVE1MSW1hZ2VMb2FkZXI6Om5vdGlmeUZp
bmlzaGVkKENhYwogICAgIGJvb2wgbG9hZEVycm9yID0gY2FjaGVkSW1hZ2UtPmVycm9yT2NjdXJy
ZWQoKSB8fCBjYWNoZWRJbWFnZS0+cmVzcG9uc2UoKS5odHRwU3RhdHVzQ29kZSgpID49IDQwMDsK
ICAgICBpZiAoIWxvYWRFcnJvcikgewogICAgICAgICBpZiAoIWVsZW1lbnQtPmluRG9jdW1lbnQo
KSkgewotICAgICAgICAgICAgSlNDOjpKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpOwotICAgICAgICAgICAgSlNDOjpKU0xvY2tI
b2xkZXIgbG9jayhnbG9iYWxEYXRhKTsKLSAgICAgICAgICAgIGdsb2JhbERhdGEtPmhlYXAucmVw
b3J0RXh0cmFNZW1vcnlDb3N0KGNhY2hlZEltYWdlLT5lbmNvZGVkU2l6ZSgpKTsKKyAgICAgICAg
ICAgIEpTQzo6Vk0qIHZtID0gSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpOworICAgICAgICAg
ICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgICAgICAgICB2bS0+aGVhcC5yZXBv
cnRFeHRyYU1lbW9yeUNvc3QoY2FjaGVkSW1hZ2UtPmVuY29kZWRTaXplKCkpOwogICAgICAgICB9
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0QXJndW1lbnRz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0QXJndW1l
bnRzLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1Nj
cmlwdEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgUGFzc1Jl
ZlB0cjxTY3JpcHRBcmd1bWVudHM+IFNjcmlwdEFyZ3VtZQogfQogCiBTY3JpcHRBcmd1bWVudHM6
OlNjcmlwdEFyZ3VtZW50cyhTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIFZlY3RvcjxTY3JpcHRW
YWx1ZT4mIGFyZ3VtZW50cykKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KHNjcmlwdFN0YXRlLT5nbG9i
YWxEYXRhKCksIHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpCisgICAgOiBtX2ds
b2JhbE9iamVjdChzY3JpcHRTdGF0ZS0+dm0oKSwgc2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxP
YmplY3QoKSkKIHsKICAgICBtX2FyZ3VtZW50cy5zd2FwKGFyZ3VtZW50cyk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2VCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2VCYXNlLmNwcAkocmV2
aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNl
QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEzICs0NywxMyBAQCBib29sIEljb25EYXRh
YmFzZUJhc2U6Om9wZW4oY29uc3QgU3RyaW5nCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0
aWMgSWNvbkRhdGFiYXNlQmFzZSogZ2xvYmFsRGF0YWJhc2UgPSAwOworc3RhdGljIEljb25EYXRh
YmFzZUJhc2UqIHZtYmFzZSA9IDA7CiAKIC8vIEZ1bmN0aW9ucyB0byBnZXQvc2V0IHRoZSBnbG9i
YWwgaWNvbiBkYXRhYmFzZS4KIEljb25EYXRhYmFzZUJhc2UmIGljb25EYXRhYmFzZSgpCiB7Ci0g
ICAgaWYgKGdsb2JhbERhdGFiYXNlKQotICAgICAgICByZXR1cm4gKmdsb2JhbERhdGFiYXNlOwor
ICAgIGlmICh2bWJhc2UpCisgICAgICAgIHJldHVybiAqdm1iYXNlOwogCiAgICAgc3RhdGljIElj
b25EYXRhYmFzZUJhc2UqIGRlZmF1bHREYXRhYmFzZSA9IDA7ICAgICAgICAKICAgICBpZiAoIWRl
ZmF1bHREYXRhYmFzZSkKQEAgLTY0LDcgKzY0LDcgQEAgSWNvbkRhdGFiYXNlQmFzZSYgaWNvbkRh
dGFiYXNlKCkKIAogdm9pZCBzZXRHbG9iYWxJY29uRGF0YWJhc2UoSWNvbkRhdGFiYXNlQmFzZSog
bmV3R2xvYmFsRGF0YWJhc2UpCiB7Ci0gICAgZ2xvYmFsRGF0YWJhc2UgPSBuZXdHbG9iYWxEYXRh
YmFzZTsKKyAgICB2bWJhc2UgPSBuZXdHbG9iYWxEYXRhYmFzZTsKIH0KIAogYm9vbCBkb2N1bWVu
dENhbkhhdmVJY29uKGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9NZW1vcnlVc2FnZVN1cHBvcnRRdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvTWVtb3J5VXNhZ2VTdXBwb3J0UXQuY3BwCShyZXZp
c2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9NZW1vcnlVc2FnZVN1
cHBvcnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgc3RhdGljIGludCBt
ZW1vcnlVc2FnZUtCKCkKIAogICAgIC8vIEV4dHJhY3QgbWVtb3J5IHN0YXRpc3RpY3MgZnJvbSBK
YXZhU2NyaXB0Q29yZToKICAgICBKU0M6Okdsb2JhbE1lbW9yeVN0YXRpc3RpY3MganNjU3RhdHMg
PSBKU0M6Omdsb2JhbE1lbW9yeVN0YXRpc3RpY3MoKTsKLSAgICBzaXplX3QganNjSGVhcFVzYWdl
ID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmNhcGFjaXR5KCk7Cisg
ICAgc2l6ZV90IGpzY0hlYXBVc2FnZSA9IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFwLmNh
cGFjaXR5KCk7CiAgICAgcmV0dXJuIChtYWxsb2NVc2FnZSArIGZtU3RhdHMuY29tbWl0dGVkVk1C
eXRlcyArIGpzY1N0YXRzLnN0YWNrQnl0ZXMgKyBqc2NTdGF0cy5KSVRCeXRlcyArIGpzY0hlYXBV
c2FnZSkgPj4gMTA7CiB9CiAKQEAgLTcwLDcgKzcwLDcgQEAgc3RhdGljIGludCBhY3R1YWxNZW1v
cnlVc2FnZUtCKCkKIAogICAgIC8vIEV4dHJhY3QgbWVtb3J5IHN0YXRpc3RpY3MgZnJvbSBKYXZh
U2NyaXB0Q29yZToKICAgICBKU0M6Okdsb2JhbE1lbW9yeVN0YXRpc3RpY3MganNjU3RhdHMgPSBK
U0M6Omdsb2JhbE1lbW9yeVN0YXRpc3RpY3MoKTsKLSAgICBzaXplX3QganNjSGVhcFVzYWdlID0g
SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnNpemUoKTsKKyAgICBzaXpl
X3QganNjSGVhcFVzYWdlID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhlYXAuc2l6ZSgpOwog
ICAgIHJldHVybiAobWFsbG9jVXNhZ2UgKyBmbVN0YXRzLmNvbW1pdHRlZFZNQnl0ZXMgLSBmbVN0
YXRzLmZyZWVMaXN0Qnl0ZXMgKyBqc2NTdGF0cy5zdGFja0J5dGVzICsganNjU3RhdHMuSklUQnl0
ZXMgKyBqc2NIZWFwVXNhZ2UpID4+IDEwOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcAkocmV2aXNpb24g
MTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGll
c1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MCwyNiArMTkwLDI2IEBAIEhHTE9CQUwgY3Jl
YXRlR2xvYmFsRGF0YShjb25zdCBLVVJMJiB1cmwKIAogSEdMT0JBTCBjcmVhdGVHbG9iYWxEYXRh
KGNvbnN0IFN0cmluZyYgc3RyKQogewotICAgIEhHTE9CQUwgZ2xvYmFsRGF0YSA9IDo6R2xvYmFs
QWxsb2MoR1BUUiwgKHN0ci5sZW5ndGgoKSArIDEpICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgaWYg
KCFnbG9iYWxEYXRhKQorICAgIEhHTE9CQUwgdm0gPSA6Okdsb2JhbEFsbG9jKEdQVFIsIChzdHIu
bGVuZ3RoKCkgKyAxKSAqIHNpemVvZihVQ2hhcikpOworICAgIGlmICghdm0pCiAgICAgICAgIHJl
dHVybiAwOwotICAgIFVDaGFyKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxVQ2hhcio+KEdsb2JhbExv
Y2soZ2xvYmFsRGF0YSkpOworICAgIFVDaGFyKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxVQ2hhcio+
KEdsb2JhbExvY2sodm0pKTsKICAgICBtZW1jcHkoYnVmZmVyLCBzdHIuY2hhcmFjdGVycygpLCBz
dHIubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKICAgICBidWZmZXJbc3RyLmxlbmd0aCgpXSA9
IDA7Ci0gICAgR2xvYmFsVW5sb2NrKGdsb2JhbERhdGEpOwotICAgIHJldHVybiBnbG9iYWxEYXRh
OworICAgIEdsb2JhbFVubG9jayh2bSk7CisgICAgcmV0dXJuIHZtOwogfQogCiBIR0xPQkFMIGNy
ZWF0ZUdsb2JhbERhdGEoY29uc3QgVmVjdG9yPGNoYXI+JiB2ZWN0b3IpCiB7Ci0gICAgSEdMT0JB
TCBnbG9iYWxEYXRhID0gOjpHbG9iYWxBbGxvYyhHUFRSLCB2ZWN0b3Iuc2l6ZSgpICsgMSk7Ci0g
ICAgaWYgKCFnbG9iYWxEYXRhKQorICAgIEhHTE9CQUwgdm0gPSA6Okdsb2JhbEFsbG9jKEdQVFIs
IHZlY3Rvci5zaXplKCkgKyAxKTsKKyAgICBpZiAoIXZtKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICBjaGFyKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oR2xvYmFsTG9jayhnbG9iYWxEYXRh
KSk7CisgICAgY2hhciogYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KEdsb2JhbExvY2sodm0p
KTsKICAgICBtZW1jcHkoYnVmZmVyLCB2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpKTsKICAg
ICBidWZmZXJbdmVjdG9yLnNpemUoKV0gPSAwOwotICAgIEdsb2JhbFVubG9jayhnbG9iYWxEYXRh
KTsKLSAgICByZXR1cm4gZ2xvYmFsRGF0YTsKKyAgICBHbG9iYWxVbmxvY2sodm0pOworICAgIHJl
dHVybiB2bTsKIH0KIAogc3RhdGljIFN0cmluZyBnZXRGdWxsQ0ZIVE1MKElEYXRhT2JqZWN0KiBk
YXRhKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiAx
NDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNDYsNyArMjQ2LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpzdGFydCgpCiAgICAg
TlBFcnJvciBucEVycjsKICAgICB7CiAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVn
aW5WaWV3KHRoaXMpOwotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25WTSgpKTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAgbnBFcnIg
PSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+bmV3cCgoTlBNSU1FVHlwZSltX21pbWVUeXBlLnV0
ZjgoKS5kYXRhKCksIG1faW5zdGFuY2UsIG1fbW9kZSwgbV9wYXJhbUNvdW50LCBtX3BhcmFtTmFt
ZXMsIG1fcGFyYW1WYWx1ZXMsIE5VTEwpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNl
KTsKQEAgLTMzNCw3ICszMzQsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnN0b3AoKQogCiAgICAgbV9p
c1N0YXJ0ZWQgPSBmYWxzZTsKIAotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
Vk0oKSk7CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICNpZiBkZWZpbmVkKFhQ
X1dJTikgJiYgIVBMQVRGT1JNKEdUSykKQEAgLTQ1MSw3ICs0NTEsNyBAQCB2b2lkIFBsdWdpblZp
ZXc6OnBlcmZvcm1SZXF1ZXN0KFBsdWdpblJlCiAgICAgICAgICAgICAvLyBGSVhNRTogPHJkYXI6
Ly9wcm9ibGVtLzQ4MDc0Njk+IFRoaXMgc2hvdWxkIGJlIHNlbnQgd2hlbiB0aGUgZG9jdW1lbnQg
aGFzIGZpbmlzaGVkIGxvYWRpbmcKICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5zZW5kTm90aWZp
Y2F0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2lu
Vmlldyh0aGlzKTsKLSAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAg
ICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICAgICAgICAgIHNldENhbGxpbmdQbHVnaW4o
dHJ1ZSk7CiAgICAgICAgICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnVybG5vdGlm
eShtX2luc3RhbmNlLCByZXF1ZXN0VVJMLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIE5QUkVTX0RP
TkUsIHJlcXVlc3QtPm5vdGlmeURhdGEoKSk7CiAgICAgICAgICAgICAgICAgc2V0Q2FsbGluZ1Bs
dWdpbihmYWxzZSk7CkBAIC03MzUsNyArNzM1LDcgQEAgTlBPYmplY3QqIFBsdWdpblZpZXc6Om5w
T2JqZWN0KCkKICAgICBOUEVycm9yIG5wRXJyOwogICAgIHsKICAgICAgICAgUGx1Z2luVmlldzo6
c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkp
OworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwog
ICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3Rh
bmNlLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0LCAmb2JqZWN0KTsKICAgICAgICAgc2V0
Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkBAIC0xNTA3LDcgKzE1MDcsNyBAQCB2b2lkIFBsdWdpblZp
ZXc6OnByaXZhdGVCcm93c2luZ1N0YXRlQ2hhCiAgICAgICAgIHJldHVybjsKIAogICAgIFBsdWdp
blZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2lu
ZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBO
UEJvb2wgdmFsdWUgPSBwcml2YXRlQnJvd3NpbmdFbmFibGVkOwogICAgIHNldFZhbHVlKG1faW5z
dGFuY2UsIE5QTlZwcml2YXRlTW9kZUJvb2wsICZ2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld0JsYWNrQmVycnkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5WaWV3QmxhY2tCZXJy
eS5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2ti
ZXJyeS9QbHVnaW5WaWV3QmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NCw3ICsy
NjQsNyBAQCBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50CiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRo
aXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2lu
ZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgc2V0
Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAgIGJvb2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+cGx1
Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKQEAgLTgxNSw3ICs4MTUsNyBA
QCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQogICAgICAgICAoKE5QU2V0
V2luZG93Q2FsbGJhY2tTdHJ1Y3QqKW1fbnBXaW5kb3cud3NfaW5mbyktPndpbmRvd0dyb3VwID0g
d2luZG93LT53aW5kb3dHcm91cCgpOwogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdp
blZpZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsK
ICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogCiAgICAgLy8gRklYTUU6IFBhc3Npbmcgem9v
bUZhY3RvciB0byBzZXR3aW5kb3cgbWFrZSB3aW5kb3dlZCBwbHVnaW4gc2NhbGUgaW5jb3JyZWN0
bHkuCkBAIC0xMDY1LDcgKzEwNjUsNyBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQo
KQogCiAgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSkgewogICAgICAg
ICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICAgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25K
U0dsb2JhbERhdGEoKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgIHNldENhbGxpbmdQ
bHVnaW4odHJ1ZSk7CiAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSht
X2luc3RhbmNlLCBOUFBWcGx1Z2luTmVlZHNYRW1iZWQsICZtX25lZWRzWEVtYmVkKTsKICAgICAg
ICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkBAIC0xMTQ2LDcgKzExNDYsNyBAQCB2b2lkIFBs
dWdpblZpZXc6OmdldFdpbmRvd0luZm8oVmVjdG9yPFBsCiAgICAgdm9pZCogdmFsUHRyID0gMDsK
IAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0
cnVlKTsKICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwg
TlBQVnBsdWdpblNjcmVlbldpbmRvdywgJnZhbFB0cik7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbihm
YWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZs
LmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1
Z2luVmlld0VmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgYm9vbCBQbHVn
aW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudAogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1
ZSk7CiAKICAgICBib29sIGFjY2VwdGVkID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50
KG1faW5zdGFuY2UsICZldmVudCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9Q
bHVnaW5WaWV3R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0
ay9QbHVnaW5WaWV3R3RrLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsx
MDAsNyBAQCBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50CiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRo
aXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2lu
ZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgc2V0
Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAgIGJvb2wgYWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZldmVudCk7CkBAIC0yNjQsNyArMjY0LDcg
QEAgdm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIAogCiB2b2lkIFBsdWdp
blZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7Ci0gICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKIAogICAgIGlmICghbV9pc1N0
YXJ0ZWQgfHwgbV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQogICAg
ICAgICByZXR1cm47CkBAIC0zOTAsNyArMzkwLDcgQEAgc3RhdGljIHZvaWQgc2V0WENyb3NzaW5n
RXZlbnRTcGVjaWZpY0ZpZQogCiB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91
c2VFdmVudCogZXZlbnQpCiB7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25W
TSgpKTsKIAogICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgbV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVz
TG9hZGVkU3VjY2Vzc2Z1bGx5KQogICAgICAgICByZXR1cm47CkBAIC01MTUsNyArNTE1LDcgQEAg
dm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKICAgICB9CiAKICAgICBQbHVn
aW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAg
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRv
dyk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkBAIC03ODksNyArNzg5LDcgQEAgYm9v
bCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKIAogICAgIGlmIChtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+Z2V0dmFsdWUpIHsKICAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdp
blZpZXcodGhpcyk7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1v
blZNKCkpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAgICBtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVt
YmVkLCAmbV9uZWVkc1hFbWJlZCk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL21hYy9QbHVnaW5WaWV3TWFjLm1tCShyZXZp
c2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL21hYy9QbHVnaW5WaWV3TWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OTUsNyArNDk1LDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojpz
ZXROUFdpbmRvd0lmTmVlZGVkKCkKICAgICAgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3Qucmln
aHQgLSBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQsIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9t
IC0gbV9ucFdpbmRvdy5jbGlwUmVjdC50b3ApOwogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVu
dFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25W
TSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgIG1fcGx1Z2luLT5wbHVnaW5G
dW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOwogICAgIHNldENhbGxp
bmdQbHVnaW4oZmFsc2UpOwpAQCAtMTA2MCw3ICsxMDYwLDcgQEAgUG9pbnQgUGx1Z2luVmlldzo6
bW91c2VQb3NGb3JQbHVnaW4oTW91cwogYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQo
TlBFdmVudCYgZXZlbnQpCiB7CiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXco
dGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICBz
ZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogCiAgICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1Z2luLT5w
bHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwpAQCAtMTA3NSw3ICsxMDc1
LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudAogaW50MTZfdCBQ
bHVnaW5WaWV3OjpkaXNwYXRjaE5QQ29jb2FFdmVudChOUENvY29hRXZlbnQmIGNvY29hRXZlbnQp
CiB7CiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2lu
KHRydWUpOwogCiAgICAgaW50MTZfdCByZXNwb25zZSA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5ldmVudChtX2luc3RhbmNlLCAmY29jb2FFdmVudCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
NCw3ICsyNzQsNyBAQCBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50CiAg
ICAgfQogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICBzZXRDYWxsaW5nUGx1
Z2luKHRydWUpOwogICAgIGJvb2wgYWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCkt
PmV2ZW50KG1faW5zdGFuY2UsICZldmVudCk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7
CkBAIC01NTcsNyArNTU3LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVk
KCkKICAgICB9CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsK
LSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgIHNldENhbGxp
bmdQbHVnaW4odHJ1ZSk7CiAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyht
X2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAkocmV2
aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyOCw3ICs1MjgsNyBAQCBib29sIFBsdWdpblZpZXc6
OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50CiAgICAgICAgIHNob3VsZFBvcCA9IHRydWU7CiAgICAg
fQogCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICBzZXRD
YWxsaW5nUGx1Z2luKHRydWUpOwogICAgIGJvb2wgYWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KTsKICAgICBzZXRDYWxsaW5nUGx1
Z2luKGZhbHNlKTsKQEAgLTY4Nyw3ICs2ODcsNyBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtl
eWJvYXJkRXZlbnQoS2V5CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgaWYgKGRpc3BhdGNoTlBFdmVu
dChucEV2ZW50KSkKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiB9CkBAIC03
NTcsNyArNzU3LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRQog
ICAgIH0gZWxzZQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
KyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vblZNKCkpOwogICAgIC8vIEZJWE1FOiBDb25zaWRlciBiYWNrIHBvcnRpbmcgdGhl
IGh0dHA6Ly93ZWJraXQub3JnL2IvNTgxMDggZml4IGhlcmUuCiAgICAgaWYgKGRpc3BhdGNoTlBF
dmVudChucEV2ZW50KSkKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CkBAIC04
NTEsNyArODUxLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSQog
ICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKIAogICAgIGlmIChtX3BsdWdpbi0+cGx1
Z2luRnVuY3MoKS0+c2V0d2luZG93KSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwor
ICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRv
d0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAg
ICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25w
V2luZG93KTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwCShyZXZpc2lv
biAxNDg2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9y
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBpbmplY3RJbnRlcm5h
bHNPYmplY3QoSlNDb250ZXh0UmVmIAogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBnbG9iYWxP
YmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoc2NyaXB0Q29udGV4dC0+
aXNEb2N1bWVudCgpKQotICAgICAgICBnbG9iYWxPYmplY3QtPnB1dERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgSW50ZXJuYWxzOjppbnRlcm5hbHNJZCksIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBJbnRlcm5hbHM6OmNyZWF0ZSh0b0RvY3VtZW50KHNjcmlwdENv
bnRleHQpKSkpOworICAgICAgICBnbG9iYWxPYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBJ
ZGVudGlmaWVyKGV4ZWMsIEludGVybmFsczo6aW50ZXJuYWxzSWQpLCB0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgSW50ZXJuYWxzOjpjcmVhdGUodG9Eb2N1bWVudChzY3JpcHRDb250ZXh0KSkpKTsK
IH0KIAogdm9pZCByZXNldEludGVybmFsc09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gMTQ4NjM4KQor
KysgU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTQyLDkgKzk0Miw5IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRyb3BQcm90ZWN0aW9uKCkK
ICAgICAvLyBvdXQuIEJ1dCBpdCBpcyBwcm90ZWN0ZWQgZnJvbSBHQyB3aGlsZSBsb2FkaW5nLCBz
byB0aGlzCiAgICAgLy8gY2FuJ3QgYmUgcmVjb3VwZWQgdW50aWwgdGhlIGxvYWQgaXMgZG9uZSwg
c28gb25seQogICAgIC8vIHJlcG9ydCB0aGUgZXh0cmEgY29zdCBhdCB0aGF0IHBvaW50LgotICAg
IEpTQzo6SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5nbG9iYWxEYXRhKCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxEYXRhKTsK
LSAgICBnbG9iYWxEYXRhLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChtX3Jlc3BvbnNlQnVp
bGRlci5sZW5ndGgoKSAqIDIpOworICAgIEpTQzo6Vk0qIHZtID0gc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIHZtLT5o
ZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChtX3Jlc3BvbnNlQnVpbGRlci5sZW5ndGgoKSAqIDIp
OwogCiAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxNDg2NTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSw1NiBAQAorMjAxMy0wNC0xNyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZWQgSlNHbG9iYWxEYXRhIHRvIFZNCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ3NzcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9saW51eC9X
ZWJNZW1vcnlTYW1wbGVyTGludXguY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJNZW1vcnlTYW1w
bGVyOjpzYW1wbGVXZWJLaXQpOgorICAgICAgICAqIFNoYXJlZC9tYWMvV2ViTWVtb3J5U2FtcGxl
ci5tYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNhbXBsZXI6OnNhbXBsZVdlYktp
dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpqYXZhU2NyaXB0T2JqZWN0c0Nv
dW50KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkpTTlBNZXRob2Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5oOgorICAgICAgICAo
V2ViS2l0OjpKU05QTWV0aG9kOjpjcmVhdGUpOgorICAgICAgICAoSlNOUE1ldGhvZCk6CisgICAg
ICAgIChXZWJLaXQ6OkpTTlBNZXRob2Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwOgorICAgICAgICAoV2ViS2l0
OjpKU05QT2JqZWN0OjpKU05QT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpjYWxsTWV0aG9k
KToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Y2FsbE9iamVjdCk6CisgICAgICAgIChX
ZWJLaXQ6OkpTTlBPYmplY3Q6OmNhbGxDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJLaXQ6OkpT
TlBPYmplY3Q6OnB1dCk6CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmRlbGV0ZVByb3Bl
cnR5KToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6
CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OnByb3BlcnR5R2V0dGVyKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oOgorICAgICAgICAoV2Vi
S2l0OjpKU05QT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0Ojpj
cmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
UEpTT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChOUEpTT2JqZWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
TlBSdW50aW1lT2JqZWN0TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2JqZWN0
TWFwOjpnZXRPckNyZWF0ZU5QT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2Jq
ZWN0TWFwOjpjb252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KToKKyAgICAgICAgKFdlYktpdDo6TlBS
dW50aW1lT2JqZWN0TWFwOjpldmFsdWF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5z
L05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KE5QUnVudGltZU9iamVjdE1hcCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3Ojp3aW5kb3dTY3JpcHROUE9i
amVjdCk6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OnBsdWdpbkVsZW1lbnROUE9iamVj
dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjpydW5KYXZhU2NyaXB0SW5NYWluRnJhbWUpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6Omdl
dFdlYkNvcmVTdGF0aXN0aWNzKToKKwogMjAxMy0wNC0xNyAgSm9vbmUgSHVyICA8am9vbmUuaHVy
QGludGVsLmNvbT4KIAogICAgICAgICBbRUZMXVtBQ10gbV9wZW5kaW5nU3VyZmFjZVJlc2l6ZSBu
ZWVkcyB0byBiZSBndWFyZGVkIGJ5IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9XZWJNZW1vcnlTYW1wbGVyTGludXguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9XZWJNZW1vcnlTYW1wbGVy
TGludXguY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGlu
dXgvV2ViTWVtb3J5U2FtcGxlckxpbnV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDggKzE1
NCw4IEBAIFdlYk1lbW9yeVN0YXRpc3RpY3MgV2ViTWVtb3J5U2FtcGxlcjo6c2EKICAgICBhcHBl
bmRLZXlWYWx1ZVBhaXIod2ViS2l0TWVtb3J5U3RhdHMsIEFTQ0lJTGl0ZXJhbCgiRmFzdCBNYWxs
b2MgQ29tbWl0dGVkIE1lbW9yeSIpLCBmYXN0TWFsbG9jQnl0ZXNDb21taXR0ZWQpOwogI2VuZGlm
CiAKLSAgICBzaXplX3QganNjSGVhcEJ5dGVzSW5Vc2UgPSBKU0RPTVdpbmRvdzo6Y29tbW9uSlNH
bG9iYWxEYXRhKCktPmhlYXAuc2l6ZSgpOwotICAgIHNpemVfdCBqc2NIZWFwQnl0ZXNDb21taXR0
ZWQgPSBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuY2FwYWNpdHkoKTsK
KyAgICBzaXplX3QganNjSGVhcEJ5dGVzSW5Vc2UgPSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+
aGVhcC5zaXplKCk7CisgICAgc2l6ZV90IGpzY0hlYXBCeXRlc0NvbW1pdHRlZCA9IEpTRE9NV2lu
ZG93Ojpjb21tb25WTSgpLT5oZWFwLmNhcGFjaXR5KCk7CiAgICAgdG90YWxCeXRlc0luVXNlICs9
IGpzY0hlYXBCeXRlc0luVXNlOwogICAgIHRvdGFsQnl0ZXNDb21taXR0ZWQgKz0ganNjSGVhcEJ5
dGVzQ29tbWl0dGVkOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYk1lbW9y
eVNhbXBsZXIubWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMv
V2ViTWVtb3J5U2FtcGxlci5tYWMubW0JKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9tYWMvV2ViTWVtb3J5U2FtcGxlci5tYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTExNiw5ICsxMTYsOSBAQCBXZWJNZW1vcnlTdGF0aXN0aWNzIFdlYk1lbW9yeVNhbXBsZXI6OnNh
CiAgICAgdG90YWxCeXRlc0luVXNlICs9IGZhc3RNYWxsb2NCeXRlc0luVXNlOwogICAgIHRvdGFs
Qnl0ZXNDb21taXR0ZWQgKz0gZmFzdE1hbGxvY0J5dGVzQ29tbWl0dGVkOwogICAgIAotICAgIEpT
TG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7Ci0gICAg
c2l6ZV90IGpzY0hlYXBCeXRlc0luVXNlID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpLT5oZWFwLnNpemUoKTsKLSAgICBzaXplX3QganNjSGVhcEJ5dGVzQ29tbWl0dGVkID0gSlNE
T01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmNhcGFjaXR5KCk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOworICAgIHNpemVfdCBqc2NI
ZWFwQnl0ZXNJblVzZSA9IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFwLnNpemUoKTsKKyAg
ICBzaXplX3QganNjSGVhcEJ5dGVzQ29tbWl0dGVkID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCkt
PmhlYXAuY2FwYWNpdHkoKTsKICAgICB0b3RhbEJ5dGVzSW5Vc2UgKz0ganNjSGVhcEJ5dGVzSW5V
c2U7CiAgICAgdG90YWxCeXRlc0NvbW1pdHRlZCArPSBqc2NIZWFwQnl0ZXNDb21taXR0ZWQ7CiAg
ICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHJldmlz
aW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkyNSwyMSArOTI1LDIxIEBAIHZvaWQgV2ViUHJvY2Vzczo6Z2V0
V2ViQ29yZVN0YXRpc3RpY3ModWkKICAgICAKICAgICAvLyBHYXRoZXIgSmF2YVNjcmlwdCBzdGF0
aXN0aWNzLgogICAgIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpKTsKLSAgICAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQo
IkphdmFTY3JpcHRPYmplY3RzQ291bnQiLCBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRh
KCktPmhlYXAub2JqZWN0Q291bnQoKSk7Ci0gICAgICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMu
c2V0KCJKYXZhU2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50IiwgSlNET01XaW5kb3c6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpLT5oZWFwLmdsb2JhbE9iamVjdENvdW50KCkpOwotICAgICAgICBkYXRhLnN0
YXRpc3RpY3NOdW1iZXJzLnNldCgiSmF2YVNjcmlwdFByb3RlY3RlZE9iamVjdHNDb3VudCIsIEpT
RE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRPYmplY3RDb3Vu
dCgpKTsKLSAgICAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoIkphdmFTY3JpcHRQcm90
ZWN0ZWRHbG9iYWxPYmplY3RzQ291bnQiLCBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRh
KCktPmhlYXAucHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKSk7CisgICAgICAgIEpTTG9ja0hv
bGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKKyAgICAgICAgZGF0YS5zdGF0aXN0
aWNzTnVtYmVycy5zZXQoIkphdmFTY3JpcHRPYmplY3RzQ291bnQiLCBKU0RPTVdpbmRvdzo6Y29t
bW9uVk0oKS0+aGVhcC5vYmplY3RDb3VudCgpKTsKKyAgICAgICAgZGF0YS5zdGF0aXN0aWNzTnVt
YmVycy5zZXQoIkphdmFTY3JpcHRHbG9iYWxPYmplY3RzQ291bnQiLCBKU0RPTVdpbmRvdzo6Y29t
bW9uVk0oKS0+aGVhcC5nbG9iYWxPYmplY3RDb3VudCgpKTsKKyAgICAgICAgZGF0YS5zdGF0aXN0
aWNzTnVtYmVycy5zZXQoIkphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RzQ291bnQiLCBKU0RPTVdp
bmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5wcm90ZWN0ZWRPYmplY3RDb3VudCgpKTsKKyAgICAgICAg
ZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoIkphdmFTY3JpcHRQcm90ZWN0ZWRHbG9iYWxPYmpl
Y3RzQ291bnQiLCBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5wcm90ZWN0ZWRHbG9iYWxP
YmplY3RDb3VudCgpKTsKICAgICAgICAgCi0gICAgICAgIE93blB0cjxUeXBlQ291bnRTZXQ+IHBy
b3RlY3RlZE9iamVjdFR5cGVDb3VudHMoSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
LT5oZWFwLnByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKSk7CisgICAgICAgIE93blB0cjxUeXBl
Q291bnRTZXQ+IHByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoSlNET01XaW5kb3c6OmNvbW1vblZN
KCktPmhlYXAucHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygpKTsKICAgICAgICAgZnJvbUNvdW50
ZWRTZXRUb0hhc2hNYXAocHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cy5nZXQoKSwgZGF0YS5qYXZh
U2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cyk7CiAgICAgICAgIAotICAgICAgICBPd25Q
dHI8VHlwZUNvdW50U2V0PiBvYmplY3RUeXBlQ291bnRzKEpTRE9NV2luZG93Ojpjb21tb25KU0ds
b2JhbERhdGEoKS0+aGVhcC5vYmplY3RUeXBlQ291bnRzKCkpOworICAgICAgICBPd25QdHI8VHlw
ZUNvdW50U2V0PiBvYmplY3RUeXBlQ291bnRzKEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFw
Lm9iamVjdFR5cGVDb3VudHMoKSk7CiAgICAgICAgIGZyb21Db3VudGVkU2V0VG9IYXNoTWFwKG9i
amVjdFR5cGVDb3VudHMuZ2V0KCksIGRhdGEuamF2YVNjcmlwdE9iamVjdFR5cGVDb3VudHMpOwog
ICAgICAgICAKLSAgICAgICAgdWludDY0X3QgamF2YVNjcmlwdEhlYXBTaXplID0gSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnNpemUoKTsKKyAgICAgICAgdWludDY0X3Qg
amF2YVNjcmlwdEhlYXBTaXplID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhlYXAuc2l6ZSgp
OwogICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldCgiSmF2YVNjcmlwdEhlYXBTaXpl
IiwgamF2YVNjcmlwdEhlYXBTaXplKTsKLSAgICAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5z
ZXQoIkphdmFTY3JpcHRGcmVlU2l6ZSIsIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEo
KS0+aGVhcC5jYXBhY2l0eSgpIC0gamF2YVNjcmlwdEhlYXBTaXplKTsKKyAgICAgICAgZGF0YS5z
dGF0aXN0aWNzTnVtYmVycy5zZXQoIkphdmFTY3JpcHRGcmVlU2l6ZSIsIEpTRE9NV2luZG93Ojpj
b21tb25WTSgpLT5oZWFwLmNhcGFjaXR5KCkgLSBqYXZhU2NyaXB0SGVhcFNpemUpOwogICAgIH0K
IAogICAgIFdURjo6RmFzdE1hbGxvY1N0YXRpc3RpY3MgZmFzdE1hbGxvY1N0YXRpc3RpY3MgPSBX
VEY6OmZhc3RNYWxsb2NTdGF0aXN0aWNzKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAko
cmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1Miw4ICs1NTIsOCBA
QCB2b2lkIEluamVjdGVkQnVuZGxlOjpnYXJiYWdlQ29sbGVjdEphdmFTCiAKIHNpemVfdCBJbmpl
Y3RlZEJ1bmRsZTo6amF2YVNjcmlwdE9iamVjdHNDb3VudCgpCiB7Ci0gICAgSlNMb2NrSG9sZGVy
IGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKLSAgICByZXR1cm4gSlNE
T01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLm9iamVjdENvdW50KCk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOworICAgIHJldHVybiBK
U0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5vYmplY3RDb3VudCgpOwogfQogCiB2b2lkIElu
amVjdGVkQnVuZGxlOjpyZXBvcnRFeGNlcHRpb24oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFs
dWVSZWYgZXhjZXB0aW9uKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzIzLDcgKzEzMjMsNyBAQCBOUE9iamVjdCogUGx1Z2luVmlldzo6d2luZG93U2NyaXB0TlBPYmpl
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHJldHVybiBtX25wUnVudGltZU9iamVj
dE1hcC5nZXRPckNyZWF0ZU5QT2JqZWN0KCpwbHVnaW5Xb3JsZCgpLT5nbG9iYWxEYXRhKCksIGZy
YW1lKCktPnNjcmlwdCgpLT53aW5kb3dTaGVsbChwbHVnaW5Xb3JsZCgpKS0+d2luZG93KCkpOwor
ICAgIHJldHVybiBtX25wUnVudGltZU9iamVjdE1hcC5nZXRPckNyZWF0ZU5QT2JqZWN0KCpwbHVn
aW5Xb3JsZCgpLT52bSgpLCBmcmFtZSgpLT5zY3JpcHQoKS0+d2luZG93U2hlbGwocGx1Z2luV29y
bGQoKSktPndpbmRvdygpKTsKIH0KIAogTlBPYmplY3QqIFBsdWdpblZpZXc6OnBsdWdpbkVsZW1l
bnROUE9iamVjdCgpCkBAIC0xMzM5LDcgKzEzMzksNyBAQCBOUE9iamVjdCogUGx1Z2luVmlldzo6
cGx1Z2luRWxlbWVudE5QT2JqCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGZyYW1lKCktPnNjcmlw
dCgpLT5qc09iamVjdEZvclBsdWdpbkVsZW1lbnQobV9wbHVnaW5FbGVtZW50LmdldCgpKTsKICAg
ICBBU1NFUlQob2JqZWN0KTsKIAotICAgIHJldHVybiBtX25wUnVudGltZU9iamVjdE1hcC5nZXRP
ckNyZWF0ZU5QT2JqZWN0KCpwbHVnaW5Xb3JsZCgpLT5nbG9iYWxEYXRhKCksIG9iamVjdCk7Cisg
ICAgcmV0dXJuIG1fbnBSdW50aW1lT2JqZWN0TWFwLmdldE9yQ3JlYXRlTlBPYmplY3QoKnBsdWdp
bldvcmxkKCktPnZtKCksIG9iamVjdCk7CiB9CiAKIGJvb2wgUGx1Z2luVmlldzo6ZXZhbHVhdGUo
TlBPYmplY3QqIG5wT2JqZWN0LCBjb25zdCBTdHJpbmcmIHNjcmlwdFN0cmluZywgTlBWYXJpYW50
KiByZXN1bHQsIGJvb2wgYWxsb3dQb3B1cHMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBNZXRob2QuY3BwCShyZXZp
c2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvSlNOUE1ldGhvZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDkgQEAgSlNOUE1l
dGhvZDo6SlNOUE1ldGhvZChKU0dsb2JhbE9iamVjdCogZwogewogfQogCi12b2lkIEpTTlBNZXRo
b2Q6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgU3RyaW5n
JiBuYW1lKQordm9pZCBKU05QTWV0aG9kOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIGNvbnN0IFN0
cmluZyYgbmFtZSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBuYW1l
KTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgbmFtZSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKCZzX2luZm8pKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL0pTTlBNZXRob2QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5oCShyZXZpc2lvbiAxNDg2Mzgp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhv
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0Myw5IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyBKU05QTWV0aG9kKiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBOUElkZW50aWZpZXIgbnBJ
ZGVudCkKICAgICB7Ci0gICAgICAgIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+
ZnVuY3Rpb25Qcm90b3R5cGUoKSk7CisgICAgICAgIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qt
PmZ1bmN0aW9uUHJvdG90eXBlKCkpOwogICAgICAgICBKU05QTWV0aG9kKiBtZXRob2QgPSBuZXcg
KEpTQzo6YWxsb2NhdGVDZWxsPEpTTlBNZXRob2Q+KCpleGVjLT5oZWFwKCkpKSBKU05QTWV0aG9k
KGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBucElkZW50KTsKLSAgICAgICAgbWV0aG9kLT5maW5p
c2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUpOworICAgICAgICBtZXRob2QtPmZp
bmlzaENyZWF0aW9uKGV4ZWMtPnZtKCksIG5hbWUpOwogICAgICAgICByZXR1cm4gbWV0aG9kOwog
ICAgIH0KIApAQCAtNTQsMTQgKzU0LDE0IEBAIHB1YmxpYzoKICAgICBOUElkZW50aWZpZXIgbnBJ
ZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9ucElkZW50aWZpZXI7IH0KIAogcHJvdGVjdGVk
OgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpKU0dsb2JhbERhdGEmLCBjb25zdCBTdHJp
bmcmIG5hbWUpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIGNvbnN0IFN0cmlu
ZyYgbmFtZSk7CiAKIHByaXZhdGU6ICAgIAogICAgIEpTTlBNZXRob2QoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6U3RydWN0dXJlKiwgTlBJZGVudGlmaWVyKTsKIAotICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAg
ICBzdGF0aWMgSlNDOjpDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q2Fs
bERhdGEmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2Fw
ZS9KU05QT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBzdGF0aWMgTlBJZGVudGlmaWVyIG5wSWRl
bnRpZmllckZyb21JZGVuCiBjb25zdCBDbGFzc0luZm8gSlNOUE9iamVjdDo6c19pbmZvID0geyAi
TlBPYmplY3QiLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTTlBP
YmplY3QpIH07CiAKIEpTTlBPYmplY3Q6OkpTTlBPYmplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5QUnVudGltZU9iamVjdE1hcCogb2JqZWN0
TWFwLCBOUE9iamVjdCogbnBPYmplY3QpCi0gICAgOiBKU0Rlc3RydWN0aWJsZU9iamVjdChnbG9i
YWxPYmplY3QtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKQorICAgIDogSlNEZXN0cnVjdGlibGVP
YmplY3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX29iamVjdE1hcChv
YmplY3RNYXApCiAgICAgLCBtX25wT2JqZWN0KG5wT2JqZWN0KQogewpAQCAtNjYsNyArNjYsNyBA
QCBKU05QT2JqZWN0OjpKU05QT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBnCiAKIHZvaWQgSlNOUE9i
amVjdDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7CisgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICBBU1NFUlQoaW5o
ZXJpdHMoJnNfaW5mbykpOwogCiAgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGhhdmUgYW4gTlBKU09i
amVjdCBpbnNpZGUgYSBKU05QT2JqZWN0LgpAQCAtMTI3LDcgKzEyNyw3IEBAIEpTVmFsdWUgSlNO
UE9iamVjdDo6Y2FsbE1ldGhvZChFeGVjU3RhdGUKICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1
bHQpOwogICAgIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICBKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgp
KTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5fY2xhc3MtPmludm9rZShtX25w
T2JqZWN0LCBtZXRob2ROYW1lLCBhcmd1bWVudHMuZGF0YSgpLCBhcmd1bWVudENvdW50LCAmcmVz
dWx0KTsKICAgICAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9F
eGVjU3RhdGUoZXhlYyk7CiAgICAgfQpAQCAtMTY3LDcgKzE2Nyw3IEBAIEpTQzo6SlNWYWx1ZSBK
U05QT2JqZWN0OjpjYWxsT2JqZWN0KEpTQzoKICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHQp
OwogCiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgICAgIEpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAg
ICAgICByZXR1cm5WYWx1ZSA9IG1fbnBPYmplY3QtPl9jbGFzcy0+aW52b2tlRGVmYXVsdChtX25w
T2JqZWN0LCBhcmd1bWVudHMuZGF0YSgpLCBhcmd1bWVudENvdW50LCAmcmVzdWx0KTsKICAgICAg
ICAgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhl
Yyk7CiAgICAgfQpAQCAtMjA3LDcgKzIwNyw3IEBAIEpTVmFsdWUgSlNOUE9iamVjdDo6Y2FsbENv
bnN0cnVjdG9yKEV4ZWMKICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHQpOwogICAgIAogICAg
IHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgcmV0
dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5fY2xhc3MtPmNvbnN0cnVjdChtX25wT2JqZWN0LCBhcmd1
bWVudHMuZGF0YSgpLCBhcmd1bWVudENvdW50LCAmcmVzdWx0KTsKICAgICAgICAgTlBSdW50aW1l
T2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiAgICAgfQpA
QCAtMzUyLDcgKzM1Miw3IEBAIHZvaWQgSlNOUE9iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhl
Y1MKICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBwcm90ZWN0b3IodGhp
c09iamVjdC0+bV9vYmplY3RNYXApOwogCiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7
CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vblZNKCkpOwogICAgICAgICB0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5fY2xhc3Mt
PnNldFByb3BlcnR5KHRoaXNPYmplY3QtPm1fbnBPYmplY3QsIG5wSWRlbnRpZmllciwgJnZhcmlh
bnQpOwogCiAgICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRv
RXhlY1N0YXRlKGV4ZWMpOwpAQCAtMzkyLDcgKzM5Miw3IEBAIGJvb2wgSlNOUE9iamVjdDo6ZGVs
ZXRlUHJvcGVydHkoRXhlY1N0YXQKICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3Rl
Y3RvciBwcm90ZWN0b3IobV9vYmplY3RNYXApOwogCiAgICAgewotICAgICAgICBKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogCiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdGhy
b3cgYW4gZXhjZXB0aW9uIGlmIHJlbW92ZVByb3BlcnR5IHJldHVybnMgZmFsc2U/CiAgICAgICAg
IGlmICghbV9ucE9iamVjdC0+X2NsYXNzLT5yZW1vdmVQcm9wZXJ0eShtX25wT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUpKQpAQCAtNDI1LDcgKzQyNSw3IEBAIHZvaWQgSlNOUE9iamVjdDo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU08KICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBw
cm90ZWN0b3IodGhpc09iamVjdC0+bV9vYmplY3RNYXApOwogICAgIAogICAgIHsKLSAgICAgICAg
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKIAogICAgICAgICAvLyBGSVhNRTogU2hv
dWxkIHdlIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBlbnVtZXJhdGUgcmV0dXJucyBmYWxzZT8KICAg
ICAgICAgaWYgKCF0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5fY2xhc3MtPmVudW1lcmF0ZSh0aGlz
T2JqZWN0LT5tX25wT2JqZWN0LCAmaWRlbnRpZmllcnMsICZpZGVudGlmaWVyQ291bnQpKQpAQCAt
NDczLDcgKzQ3Myw3IEBAIEpTVmFsdWUgSlNOUE9iamVjdDo6cHJvcGVydHlHZXR0ZXIoRXhlY1MK
ICAgICAKICAgICBib29sIHJldHVyblZhbHVlOwogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgTlBJZGVudGlmaWVyIG5wSWRlbnRpZmllciA9
IG5wSWRlbnRpZmllckZyb21JZGVudGlmaWVyKHByb3BlcnR5TmFtZSk7CiAgICAgICAgIHJldHVy
blZhbHVlID0gdGhpc09iai0+bV9ucE9iamVjdC0+X2NsYXNzLT5nZXRQcm9wZXJ0eSh0aGlzT2Jq
LT5tX25wT2JqZWN0LCBucElkZW50aWZpZXIsICZyZXN1bHQpOwogICAgICAgICAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pT
TlBPYmplY3QuaAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCAr
NDcsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgSlNOUE9iamVjdCogY3JlYXRlKEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTlBSdW50aW1lT2JqZWN0TWFwKiBvYmplY3RNYXAs
IE5QT2JqZWN0KiBucE9iamVjdCkKICAgICB7Ci0gICAgICAgIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2Jh
bE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSk7Ci0gICAgICAgIEpTTlBP
YmplY3QqIG9iamVjdCA9IG5ldyAoSlNDOjphbGxvY2F0ZUNlbGw8SlNOUE9iamVjdD4oZ2xvYmFs
T2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkpIEpTTlBPYmplY3QoZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUsIG9iamVjdE1hcCwgbnBPYmplY3QpOworICAgICAgICBKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gY3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKTsKKyAgICAgICAgSlNOUE9iamVjdCog
b2JqZWN0ID0gbmV3IChKU0M6OmFsbG9jYXRlQ2VsbDxKU05QT2JqZWN0PihnbG9iYWxPYmplY3Qt
PnZtKCkuaGVhcCkpIEpTTlBPYmplY3QoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIG9iamVjdE1h
cCwgbnBPYmplY3QpOwogICAgICAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVj
dCk7CiAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgfQpAQCAtNzcsOSArNzcsOSBAQCBwcml2
YXRlOgogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc0dldFByb3BlcnR5TmFt
ZXMgfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAgICAgCi0gICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkK
KyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0
YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogICAgIHN0
YXRpYyBKU0M6OkNhbGxUeXBlIGdldENhbGxEYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDYWxsRGF0
YSYpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05Q
SlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NiwxMyArNDYsMTMgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCi1OUEpTT2JqZWN0KiBOUEpTT2JqZWN0OjpjcmVhdGUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBOUFJ1bnRpbWVPYmplY3RNYXAqIG9iamVjdE1hcCwgSlNP
YmplY3QqIGpzT2JqZWN0KQorTlBKU09iamVjdCogTlBKU09iamVjdDo6Y3JlYXRlKFZNJiB2bSwg
TlBSdW50aW1lT2JqZWN0TWFwKiBvYmplY3RNYXAsIEpTT2JqZWN0KiBqc09iamVjdCkKIHsKICAg
ICAvLyBXZSBzaG91bGQgbmV2ZXIgaGF2ZSBhIEpTTlBPYmplY3QgaW5zaWRlIGFuIE5QSlNPYmpl
Y3QuCiAgICAgQVNTRVJUKCFqc09iamVjdC0+aW5oZXJpdHMoJkpTTlBPYmplY3Q6OnNfaW5mbykp
OwogCiAgICAgTlBKU09iamVjdCogbnBKU09iamVjdCA9IHRvTlBKU09iamVjdChjcmVhdGVOUE9i
amVjdCgwLCBucENsYXNzKCkpKTsKLSAgICBucEpTT2JqZWN0LT5pbml0aWFsaXplKGdsb2JhbERh
dGEsIG9iamVjdE1hcCwganNPYmplY3QpOworICAgIG5wSlNPYmplY3QtPmluaXRpYWxpemUodm0s
IG9iamVjdE1hcCwganNPYmplY3QpOwogCiAgICAgcmV0dXJuIG5wSlNPYmplY3Q7CiB9CkBAIC03
MiwxMyArNzIsMTMgQEAgYm9vbCBOUEpTT2JqZWN0Ojppc05QSlNPYmplY3QoTlBPYmplY3QqIAog
ICAgIHJldHVybiBucE9iamVjdC0+X2NsYXNzID09IG5wQ2xhc3MoKTsKIH0KIAotdm9pZCBOUEpT
T2JqZWN0Ojppbml0aWFsaXplKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTlBSdW50aW1lT2Jq
ZWN0TWFwKiBvYmplY3RNYXAsIEpTT2JqZWN0KiBqc09iamVjdCkKK3ZvaWQgTlBKU09iamVjdDo6
aW5pdGlhbGl6ZShWTSYgdm0sIE5QUnVudGltZU9iamVjdE1hcCogb2JqZWN0TWFwLCBKU09iamVj
dCoganNPYmplY3QpCiB7CiAgICAgQVNTRVJUKCFtX29iamVjdE1hcCk7CiAgICAgQVNTRVJUKCFt
X2pzT2JqZWN0KTsKIAogICAgIG1fb2JqZWN0TWFwID0gb2JqZWN0TWFwOwotICAgIG1fanNPYmpl
Y3Quc2V0KGdsb2JhbERhdGEsIGpzT2JqZWN0KTsKKyAgICBtX2pzT2JqZWN0LnNldCh2bSwganNP
YmplY3QpOwogfQogCiBzdGF0aWMgSWRlbnRpZmllciBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJS
ZXAoRXhlY1N0YXRlKiBleGVjLCBJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyUmVwKQpJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
TlBKU09iamVjdC5oCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3
ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFz
cyBWTTsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgSlNPYmplY3Q7CiAKQEAgLTQ4LDcg
KzQ4LDcgQEAgY2xhc3MgTlBSdW50aW1lT2JqZWN0TWFwOwogY2xhc3MgTlBKU09iamVjdCA6IHB1
YmxpYyBOUE9iamVjdCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTlBKU09iamVjdCk7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIE5QSlNPYmplY3QqIGNyZWF0ZShKU0M6OkpTR2xvYmFsRGF0YSYs
IE5QUnVudGltZU9iamVjdE1hcCosIEpTQzo6SlNPYmplY3QqKTsKKyAgICBzdGF0aWMgTlBKU09i
amVjdCogY3JlYXRlKEpTQzo6Vk0mLCBOUFJ1bnRpbWVPYmplY3RNYXAqLCBKU0M6OkpTT2JqZWN0
Kik7CiAKICAgICBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fanNP
YmplY3QuZ2V0KCk7IH0KIApAQCAtNjQsNyArNjQsNyBAQCBwcml2YXRlOgogICAgIE5QSlNPYmpl
Y3QoKTsKICAgICB+TlBKU09iamVjdCgpOwogCi0gICAgdm9pZCBpbml0aWFsaXplKEpTQzo6SlNH
bG9iYWxEYXRhJiwgTlBSdW50aW1lT2JqZWN0TWFwKiwgSlNDOjpKU09iamVjdCopOworICAgIHZv
aWQgaW5pdGlhbGl6ZShKU0M6OlZNJiwgTlBSdW50aW1lT2JqZWN0TWFwKiwgSlNDOjpKU09iamVj
dCopOwogCiAgICAgYm9vbCBoYXNNZXRob2QoTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUpOwogICAg
IGJvb2wgaW52b2tlKE5QSWRlbnRpZmllciBtZXRob2ROYW1lLCBjb25zdCBOUFZhcmlhbnQqIGFy
Z3VtZW50cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9i
amVjdE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAJKHJldmlzaW9uIDE0ODYzOCkKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmpl
Y3RNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIE5QUnVudGltZU9iamVj
dE1hcDo6UGx1Z2luUHJvdGVjdG9yOjp+UGwKIHsKIH0KIAotTlBPYmplY3QqIE5QUnVudGltZU9i
amVjdE1hcDo6Z2V0T3JDcmVhdGVOUE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
T2JqZWN0KiBqc09iamVjdCkKK05QT2JqZWN0KiBOUFJ1bnRpbWVPYmplY3RNYXA6OmdldE9yQ3Jl
YXRlTlBPYmplY3QoVk0mIHZtLCBKU09iamVjdCoganNPYmplY3QpCiB7CiAgICAgLy8gSWYgdGhp
cyBpcyBhIEpTTlBPYmplY3QsIHdlIGNhbiBqdXN0IGdldCBpdHMgdW5kZXJseWluZyBOUE9iamVj
dC4KICAgICBpZiAoanNPYmplY3QtPmNsYXNzSW5mbygpID09ICZKU05QT2JqZWN0OjpzX2luZm8p
IHsKQEAgLTgzLDcgKzgzLDcgQEAgTlBPYmplY3QqIE5QUnVudGltZU9iamVjdE1hcDo6Z2V0T3JD
cmVhdAogICAgICAgICByZXR1cm4gbnBKU09iamVjdDsKICAgICB9CiAKLSAgICBOUEpTT2JqZWN0
KiBucEpTT2JqZWN0ID0gTlBKU09iamVjdDo6Y3JlYXRlKGdsb2JhbERhdGEsIHRoaXMsIGpzT2Jq
ZWN0KTsKKyAgICBOUEpTT2JqZWN0KiBucEpTT2JqZWN0ID0gTlBKU09iamVjdDo6Y3JlYXRlKHZt
LCB0aGlzLCBqc09iamVjdCk7CiAgICAgbV9ucEpTT2JqZWN0cy5zZXQoanNPYmplY3QsIG5wSlNP
YmplY3QpOwogCiAgICAgcmV0dXJuIG5wSlNPYmplY3Q7CkBAIC0xNzIsNyArMTcyLDcgQEAgdm9p
ZCBOUFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnRKU1ZhbHVlVAogICAgIH0KIAogICAgIGlmICh2
YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgIE5QT2JqZWN0KiBucE9iamVjdCA9IGdldE9yQ3Jl
YXRlTlBPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhc09iamVjdCh2YWx1ZSkpOworICAgICAg
ICBOUE9iamVjdCogbnBPYmplY3QgPSBnZXRPckNyZWF0ZU5QT2JqZWN0KGV4ZWMtPnZtKCksIGFz
T2JqZWN0KHZhbHVlKSk7CiAgICAgICAgIE9CSkVDVF9UT19OUFZBUklBTlQobnBPYmplY3QsIHZh
cmlhbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQg
TlBSdW50aW1lT2JqZWN0TWFwOjpjb252ZXJ0SlNWYWx1ZVQKIAogYm9vbCBOUFJ1bnRpbWVPYmpl
Y3RNYXA6OmV2YWx1YXRlKE5QT2JqZWN0KiBucE9iamVjdCwgY29uc3QgU3RyaW5nJiBzY3JpcHRT
dHJpbmcsIE5QVmFyaWFudCogcmVzdWx0KQogewotICAgIFN0cm9uZzxKU0dsb2JhbE9iamVjdD4g
Z2xvYmFsT2JqZWN0KHRoaXMtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCksIHRoaXMtPmds
b2JhbE9iamVjdCgpKTsKKyAgICBTdHJvbmc8SlNHbG9iYWxPYmplY3Q+IGdsb2JhbE9iamVjdCh0
aGlzLT5nbG9iYWxPYmplY3QoKS0+dm0oKSwgdGhpcy0+Z2xvYmFsT2JqZWN0KCkpOwogICAgIGlm
ICghZ2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
TlBSdW50aW1lT2JqZWN0TWFwLmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCB0eXBlZGVmIHN0cnVjdCBfTlBWYXJpYW50IE5QVmFy
aWFudDsKIAogbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRXhlY1N0YXRlOwotICAgIGNsYXNz
IEpTR2xvYmFsRGF0YTsKKyAgICBjbGFzcyBWTTsKICAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsK
ICAgICBjbGFzcyBKU09iamVjdDsKICAgICBjbGFzcyBKU1ZhbHVlOwpAQCAtNjcsNyArNjcsNyBA
QCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5zIGFuIE5QT2JqZWN0IHRoYXQgd3JhcHMgdGhlIGdp
dmVuIEpTT2JqZWN0IG9iamVjdC4gSWYgdGhlcmUgaXMgYWxyZWFkeSBhbiBOUE9iamVjdCB0aGF0
IHdyYXBzIHRoaXMgSlNPYmplY3QsIGl0IHdpbGwKICAgICAvLyByZXRhaW4gaXQgYW5kIHJldHVy
biBpdC4KLSAgICBOUE9iamVjdCogZ2V0T3JDcmVhdGVOUE9iamVjdChKU0M6OkpTR2xvYmFsRGF0
YSYsIEpTQzo6SlNPYmplY3QqKTsKKyAgICBOUE9iamVjdCogZ2V0T3JDcmVhdGVOUE9iamVjdChK
U0M6OlZNJiwgSlNDOjpKU09iamVjdCopOwogICAgIHZvaWQgbnBKU09iamVjdERlc3Ryb3llZChO
UEpTT2JqZWN0Kik7CiAKICAgICAvLyBSZXR1cm5zIGEgSlNPYmplY3Qgb2JqZWN0IHRoYXQgd3Jh
cHMgdGhlIGdpdmVuIE5QT2JqZWN0LgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAy
LDcgKzIxMDIsNyBAQCB2b2lkIFdlYlBhZ2U6OnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZShjCiAg
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFJlc3VsdFZhbHVlOwog
ICAgIENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YVJlZmVyZW5jZTsKIAotICAgIEpTTG9ja0hv
bGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwogICAgIGlmIChKU1ZhbHVlIHJl
c3VsdFZhbHVlID0gbV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpLT5zY3JpcHQoKS0+ZXhlY3V0ZVNj
cmlwdChzY3JpcHQsIHRydWUpLmpzVmFsdWUoKSkgewogICAgICAgICBpZiAoKHNlcmlhbGl6ZWRS
ZXN1bHRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKG1fbWFpbkZyYW1lLT5q
c0NvbnRleHQoKSwgdG9SZWYobV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpLT5zY3JpcHQoKS0+Z2xv
YmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpLCByZXN1bHRW
YWx1ZSksIDApKSkKICAgICAgICAgICAgIGRhdGFSZWZlcmVuY2UgPSBzZXJpYWxpemVkUmVzdWx0
VmFsdWUtPmRhdGEoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwkocmV2aXNp
b24gMTQ4NjUyKQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDEzLTA0LTE3ICBHZW9mZnJleSBHYXJlbiAgPGdn
YXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lZCBKU0dsb2JhbERhdGEgdG8gVk0KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDc3NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQXBpL0JsYWNr
QmVycnlHbG9iYWwuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpjbGVhck1lbW9y
eUNhY2hlcyk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9BYm91dERhdGEuY3BwOgorICAgICAg
ICAqIFdlYktpdFN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0LmNwcDoKKyAgICAgICAgKER1
bXBSZW5kZXJUcmVlU3VwcG9ydDo6amF2YVNjcmlwdE9iamVjdHNDb3VudCk6CisKIDIwMTMtMDQt
MTcgIE5pbWEgR2hhbmF2YXRpYW4gIDxuZ2hhbmF2YXRpYW5AYmxhY2tiZXJyeS5jb20+CiAKICAg
ICAgICAgQ2xlYW4gdXAgc3BlbGxjaGVjayBzdGF0ZSB3aGVuIGNoYW5naW5nIGZvY3VzLgpJbmRl
eDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CbGFja0JlcnJ5R2xvYmFsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JsYWNrQmVycnlHbG9iYWwu
Y3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0Js
YWNrQmVycnlHbG9iYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5j
bHVkZSAiSW5pdGlhbGl6ZUxvZ2dpbmcuaCIKICNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5n
LmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIK
KyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAiTmV0
d29ya1N0YXRlTm90aWZpZXIuaCIKICNpbmNsdWRlICJQYWdlQ2FjaGUuaCIKQEAgLTExNCw3ICsx
MTQsNyBAQCB2b2lkIGNsZWFyTWVtb3J5Q2FjaGVzKCkKICNlbmRpZgogCiAgICAgewotICAgICAg
ICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEo
KSk7CisgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZN
KCkpOwogICAgICAgICBjb2xsZWN0SmF2YXNjcmlwdEdhcmJhZ2VOb3coKTsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0Fib3V0RGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQWJv
dXREYXRhLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvQWJvdXREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
NyBAQAogI2luY2x1ZGUgPEJ1aWxkSW5mb3JtYXRpb24uaD4KICNpbmNsdWRlIDxoZWFwL0hlYXAu
aD4KICNpbmNsdWRlIDxwcm9jZXNzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbERhdGEu
aD4KKyNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNs
dWRlIDxzeXMvdXRzbmFtZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTI0
NSw3ICsyNDUsNyBAQCBzdGF0aWMgU3RyaW5nIG1lbW9yeVBhZ2UoKQogCiAgICAgLy8gSlMgZW5n
aW5lIG1lbW9yeSB1c2FnZS4KICAgICBKU0M6Okdsb2JhbE1lbW9yeVN0YXRpc3RpY3MganNjTWVt
b3J5U3RhdCA9IEpTQzo6Z2xvYmFsTWVtb3J5U3RhdGlzdGljcygpOwotICAgIEpTQzo6SGVhcCYg
bWFpbkhlYXAgPSBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXA7CisgICAg
SlNDOjpIZWFwJiBtYWluSGVhcCA9IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFwOwogICAg
IE93blB0cjxKU0M6OlR5cGVDb3VudFNldD4gb2JqZWN0VHlwZUNvdW50cyA9IG1haW5IZWFwLm9i
amVjdFR5cGVDb3VudHMoKTsKICAgICBPd25QdHI8SlNDOjpUeXBlQ291bnRTZXQ+IHByb3RlY3Rl
ZE9iamVjdFR5cGVDb3VudHMgPSBtYWluSGVhcC5wcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCk7
CiAKQEAgLTM3Myw3ICszNzMsNyBAQCB2b2lkIE1lbW9yeVRyYWNrZXI6OnVwZGF0ZU1lbW9yeVBl
YWtzKFRpCiB7CiAgICAgLy8gSlMgZW5naW5lIG1lbW9yeSB1c2FnZS4KICAgICBKU0M6Okdsb2Jh
bE1lbW9yeVN0YXRpc3RpY3MganNjTWVtb3J5U3RhdCA9IEpTQzo6Z2xvYmFsTWVtb3J5U3RhdGlz
dGljcygpOwotICAgIEpTQzo6SGVhcCYgbWFpbkhlYXAgPSBKU0RPTVdpbmRvdzo6Y29tbW9uSlNH
bG9iYWxEYXRhKCktPmhlYXA7CisgICAgSlNDOjpIZWFwJiBtYWluSGVhcCA9IEpTRE9NV2luZG93
Ojpjb21tb25WTSgpLT5oZWFwOwogCiAgICAgLy8gTWFsbG9jIGluZm8uCiAgICAgc3RydWN0IG1h
bGxpbmZvIG1hbGxvY0luZm8gPSBtYWxsaW5mbygpOwpJbmRleDogU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L1dlYktpdFN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnQuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViS2l0U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NCw3ICs2NCw3IEBAIFBhZ2UqIER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6Y29yZVBhZ2Uo
V2UKIAogaW50IER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6amF2YVNjcmlwdE9iamVjdHNDb3VudCgp
CiB7Ci0gICAgcmV0dXJuIEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhl
YXAuZ2xvYmFsT2JqZWN0Q291bnQoKTsKKyAgICByZXR1cm4gSlNET01XaW5kb3dCYXNlOjpjb21t
b25WTSgpLT5oZWFwLmdsb2JhbE9iamVjdENvdW50KCk7CiB9CiAKIHZvaWQgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0OjpnYXJiYWdlQ29sbGVjdG9yQ29sbGVjdCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2VmbC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNDg2NTIpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMy0wNC0xNyAgR2VvZmZyZXkgR2FyZW4gIDxn
Z2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZWQgSlNHbG9iYWxEYXRhIHRvIFZNCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ3NzcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHA6CisgICAgICAgIChEdW1wUmVuZGVy
VHJlZVN1cHBvcnRFZmw6OmphdmFTY3JpcHRPYmplY3RzQ291bnQpOgorCiAyMDEzLTA0LTE2ICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIE1vcmUgRUZMIGJ1aWxk
IGZpeGVzLgpJbmRleDogU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRl
clRyZWVTdXBwb3J0RWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9XZWJD
b3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuY3BwCShyZXZpc2lvbiAxNDg2Mzgp
CisrKyBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsNyArMzk0LDcgQEAgdm9pZCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmw6OmdhcmJhZ2VDbwogCiBzaXplX3QgRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsOjpqYXZhU2NyaXB0T2JqZWN0c0NvdW50KCkKIHsKLSAgICByZXR1cm4gV2ViQ29yZTo6
SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLm9iamVjdENvdW50KCk7Cisg
ICAgcmV0dXJuIFdlYkNvcmU6OkpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFwLm9iamVjdENv
dW50KCk7CiB9CiAKIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZXREZWFkRGVjb2Rl
ZERhdGFEZWxldGlvbkludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE0ODY1MikKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEzLTA0LTE3ICBHZW9mZnJleSBHYXJlbiAg
PGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lZCBKU0dsb2JhbERhdGEgdG8gVk0K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDc3Nwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcDoKKyAgICAgICAgKER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEd0azo6Z2NDb3VudEphdmFzY3JpcHRPYmplY3RzKToKKwogMjAxMy0wNC0x
NiAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBz
cGVsaW5nIGVycm9yLgpJbmRleDogU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVt
cFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCShyZXZpc2lvbiAx
NDg2MzgpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzcsOCArNDc3LDggQEAgdm9pZCBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdjQ29sbGVjdAogCiB1bnNpZ25lZCBsb25nIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEd0azo6Z2NDb3VudEphdmFzY3JpcHRPYmplY3RzKCkKIHsKLSAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7
Ci0gICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5vYmpl
Y3RDb3VudCgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1v
blZNKCkpOworICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5vYmplY3RD
b3VudCgpOwogfQogCiB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6bGF5b3V0RnJhbWUo
V2ViS2l0V2ViRnJhbWUqIGZyYW1lKQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4
NjUyKQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsNjQgQEAKKzIwMTMtMDQtMTcgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW5hbWVkIEpTR2xvYmFsRGF0YSB0byBWTQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0Nzc3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNz
Lm1tOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0T2JqZWN0c0NvdW50
XSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRHbG9iYWxPYmplY3Rz
Q291bnRdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdFByb3RlY3Rl
ZE9iamVjdHNDb3VudF0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0
UHJvdGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50XSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0
aWNzIGphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzXSk6CisgICAgICAgICgrW1dl
YkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRPYmplY3RUeXBlQ291bnRzXSk6CisgICAgICAgICgr
W1dlYkNvcmVTdGF0aXN0aWNzIHNob3VsZFByaW50RXhjZXB0aW9uc10pOgorICAgICAgICAoK1tX
ZWJDb3JlU3RhdGlzdGljcyBzZXRTaG91bGRQcmludEV4Y2VwdGlvbnM6XSk6CisgICAgICAgICgr
W1dlYkNvcmVTdGF0aXN0aWNzIG1lbW9yeVN0YXRpc3RpY3NdKToKKyAgICAgICAgKCtbV2ViQ29y
ZVN0YXRpc3RpY3MgamF2YVNjcmlwdFJlZmVyZW5jZWRPYmplY3RzQ291bnRdKToKKyAgICAgICAg
KiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbToKKyAgICAgICAgKGlk
ZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcCk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lmg6CisgICAgICAgIChMb2NhbE9iamVjdE1hcCk6Cisg
ICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tOgor
ICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0
TWFwOjppZEZvck9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6Z2V0V2luZG93TlBPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6OmdldFBsdWdpbkVsZW1lbnROUE9iamVjdCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZXZhbHVhdGUpOgorICAgICAgICAo
V2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmFkZFZhbHVlVG9BcnJheSk6Cisg
ICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbToKKyAgICAgICAgKFdlYktp
dDo6UHJveHlSdW50aW1lTWV0aG9kOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpQcm94eVJ1
bnRpbWVNZXRob2Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJLaXQ6OlByb3h5UnVu
dGltZU1ldGhvZDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpQcm94eUluc3Rh
bmNlOjpnZXRQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9Qcm94eVJ1
bnRpbWVPYmplY3QuaDoKKyAgICAgICAgKFdlYktpdDo6UHJveHlSdW50aW1lT2JqZWN0OjpjcmVh
dGUpOgorICAgICAgICAoV2ViS2l0OjpQcm94eVJ1bnRpbWVPYmplY3Q6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbToKKyAgICAg
ICAgKFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjp3YW50c0FsbFN0cmVhbXMpOgorICAgICAgICAq
IFBsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tOgorICAgICAgICAoLVtXZWJOZXRzY2Fw
ZVBsdWdpblZpZXcgc2VuZEV2ZW50OmlzRHJhd1JlY3Q6XSk6CisgICAgICAgICgtW1dlYk5ldHNj
YXBlUGx1Z2luVmlldyBwcml2YXRlQnJvd3NpbmdNb2RlRGlkQ2hhbmdlXSk6CisgICAgICAgICgt
W1dlYk5ldHNjYXBlUGx1Z2luVmlldyBzZXRXaW5kb3dJZk5lY2Vzc2FyeV0pOgorICAgICAgICAo
LVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgY3JlYXRlUGx1Z2luU2NyaXB0YWJsZU9iamVjdF0pOgor
ICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgZ2V0Rm9ybVZhbHVlOl0pOgorICAgICAg
ICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0UGx1Z2luUmVxdWVz
dDpdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHdlYkZyYW1lOmRpZEZpbmlz
aExvYWRXaXRoUmVhc29uOl0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgbG9h
ZFBsdWdpblJlcXVlc3Q6XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBfcHJp
bnRlZFBsdWdpbkJpdG1hcF0pOgorICAgICAgICAqIFBsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxl
ci5tbToKKyAgICAgICAgKCtbV2ViUGx1Z2luQ29udHJvbGxlciBwbHVnSW5WaWV3V2l0aEFyZ3Vt
ZW50czpmcm9tUGx1Z2luUGFja2FnZTpdKToKKyAgICAgICAgKC1bV2ViUGx1Z2luQ29udHJvbGxl
ciBzdG9wT25lUGx1Z2luOl0pOgorICAgICAgICAoLVtXZWJQbHVnaW5Db250cm9sbGVyIGRlc3Ry
b3lPbmVQbHVnaW46XSk6CisgICAgICAgICgtW1dlYlBsdWdpbkNvbnRyb2xsZXIgc3RhcnRBbGxQ
bHVnaW5zXSk6CisgICAgICAgICgtW1dlYlBsdWdpbkNvbnRyb2xsZXIgYWRkUGx1Z2luOl0pOgor
ICAgICAgICAqIFdlYktpdC5vcmRlcjoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlNjcmlwdERlYnVn
RGVsZWdhdGUubW06CisgICAgICAgICgtW1dlYlNjcmlwdENhbGxGcmFtZSBzY29wZUNoYWluXSk6
CisgICAgICAgICgtW1dlYlNjcmlwdENhbGxGcmFtZSBldmFsdWF0ZVdlYlNjcmlwdDpdKToKKyAg
ICAgICAgKiBXZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1tOgorICAgICAgICAoV2ViU2NyaXB0
RGVidWdnZXI6OldlYlNjcmlwdERlYnVnZ2VyKToKKwogMjAxMy0wNC0xNiAgQmV0aCBEYWtpbiAg
PGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmUtbmFtZSBQYWdlOjpsYXlvdXRNaWxlc3Rv
bmVzKCkgdG8gUGFnZTo6cmVxdWVzdGVkTGF5b3V0TWlsZXN0b25lcygpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJLaXQub3JkZXIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
V2ViS2l0Lm9yZGVyCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJL
aXQub3JkZXIJKHdvcmtpbmcgY29weSkKQEAgLTEwNTAsNyArMTA1MCw3IEBAIF9fWFBDR2V0V2lu
ZG93TlBPYmplY3QKIF9XS1BDR2V0V2luZG93TlBPYmplY3QKIF9fWk5LM1dURjdIYXNoTWFwSWpQ
TjZXZWJLaXQyM05ldHNjYXBlUGx1Z2luSG9zdFByb3h5RU5TXzdJbnRIYXNoSWpFRU5TXzEwSGFz
aFRyYWl0c0lqRUVOUzZfSVMzX0VFRTNnZXRFUktqCiBfX1pONldlYktpdDI3TmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5MTdnZXRXaW5kb3dOUE9iamVjdEVSagotX19aTjZXZWJLaXQyN05ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eTE0TG9jYWxPYmplY3RNYXAxMWlkRm9yT2JqZWN0RVJOM0pT
QzEySlNHbG9iYWxEYXRhRVBOUzJfOEpTT2JqZWN0RQorX19aTjZXZWJLaXQyN05ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eTE0TG9jYWxPYmplY3RNYXAxMWlkRm9yT2JqZWN0RVJOM0pTQzEyVk1F
UE5TMl84SlNPYmplY3RFCiBfX1pOSzNXVEY5SGFzaFRhYmxlSWpTdDRwYWlySWpOM0pTQzZTdHJv
bmdJTlMyXzhKU09iamVjdEVFRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTNl9FRU5TXzdJbnRI
YXNoSWpFRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSWpFRU5TQ19JUzVfRUVF
RVNEX0U4Y29udGFpbnNJak5TXzIySWRlbnRpdHlIYXNoVHJhbnNsYXRvcklqUzZfU0FfRUVFRWJS
S1RfCiBfX1pOM0pTQzZTdHJvbmdJTlNfOEpTT2JqZWN0RUVhU0VSS1MyXwogX19YUENFdmFsdWF0
ZQpAQCAtMjI0NSw3ICsyMjQ1LDcgQEAgX19aTjdXZWJDb3JlMTRQbHVnaW5WaWV3QmFzZTI3cHJp
dmF0ZUJybwogX19aTjZXZWJLaXQyN05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTI4cHJpdmF0
ZUJyb3dzaW5nTW9kZURpZENoYW5nZUViCiBfX1dLUEhQbHVnaW5JbnN0YW5jZVByaXZhdGVCcm93
c2luZ01vZGVEaWRDaGFuZ2UKIF9XS1NldENvb2tpZVN0b3JhZ2VQcml2YXRlQnJvd3NpbmdFbmFi
bGVkCi1fX1pOM0pTQzhKU09iamVjdDE3Z2V0RGlyZWN0TG9jYXRpb25FUk5TXzEySlNHbG9iYWxE
YXRhRVJLTlNfMTBJZGVudGlmaWVyRQorX19aTjNKU0M4SlNPYmplY3QxN2dldERpcmVjdExvY2F0
aW9uRVJOU18xMlZNRVJLTlNfMTBJZGVudGlmaWVyRQogX19YUENTdGF0dXNUZXh0CiBfV0tQQ1N0
YXR1c1RleHQKIF9fWk42V2ViS2l0MjdOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk2c3RhdHVz
RVBLYwpAQCAtMjI2MCw3ICsyMjYwLDcgQEAgX1dLUENFbnVtZXJhdGUKIF9fWk42V2ViS2l0MjdO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk5ZW51bWVyYXRlRWpSUGNSagogX19aTjNKU0MxN1By
b3BlcnR5TmFtZUFycmF5RDFFdgogX19aTjNXVEY2VmVjdG9ySU4zSlNDMTBJZGVudGlmaWVyRUxt
MjBFRUQxRXYKLV9fWk4zSlNDOGpzU3RyaW5nRVBOU18xMkpTR2xvYmFsRGF0YUVSS05TXzdVU3Ry
aW5nRQorX19aTjNKU0M4anNTdHJpbmdFUE5TXzEyVk1FUktOU183VVN0cmluZ0UKIF9fWk42V2Vi
S2l0MTNQcm94eUluc3RhbmNlMTZnZXRQcm9wZXJ0eU5hbWVzRVBOM0pTQzlFeGVjU3RhdGVFUk5T
MV8xN1Byb3BlcnR5TmFtZUFycmF5RQogX19XS1BITlBPYmplY3RFbnVtZXJhdGUKIF9fWFBDR2V0
SW50SWRlbnRpZmllcgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlz
dGljcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0
aXN0aWNzLm1tCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dl
YkNvcmVTdGF0aXN0aWNzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01OCwzNSArNTgsMzUgQEAgKyAo
TlNBcnJheSAqKXN0YXRpc3RpY3MKIAogKyAoc2l6ZV90KWphdmFTY3JpcHRPYmplY3RzQ291bnQK
IHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOwotICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAu
b2JqZWN0Q291bnQoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9u
Vk0oKSk7CisgICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFwLm9iamVjdENv
dW50KCk7CiB9CiAKICsgKHNpemVfdClqYXZhU2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50CiB7Ci0g
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
LSAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmdsb2Jh
bE9iamVjdENvdW50KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1v
blZNKCkpOworICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5nbG9iYWxP
YmplY3RDb3VudCgpOwogfQogCiArIChzaXplX3QpamF2YVNjcmlwdFByb3RlY3RlZE9iamVjdHND
b3VudAogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2Jh
bERhdGEoKSk7Ci0gICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+
aGVhcC5wcm90ZWN0ZWRPYmplY3RDb3VudCgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9N
V2luZG93Ojpjb21tb25WTSgpKTsKKyAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vblZNKCkt
PmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKIH0KIAogKyAoc2l6ZV90KWphdmFTY3JpcHRQ
cm90ZWN0ZWRHbG9iYWxPYmplY3RzQ291bnQKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RP
TVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwotICAgIHJldHVybiBKU0RPTVdpbmRvdzo6
Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAgcmV0
dXJuIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFwLnByb3RlY3RlZEdsb2JhbE9iamVjdENv
dW50KCk7CiB9CiAKICsgKE5TQ291bnRlZFNldCAqKWphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RU
eXBlQ291bnRzCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9u
Vk0oKSk7CiAgICAgCiAgICAgTlNDb3VudGVkU2V0ICpyZXN1bHQgPSBbTlNDb3VudGVkU2V0IHNl
dF07CiAKLSAgICBPd25QdHI8VHlwZUNvdW50U2V0PiBjb3VudHMoSlNET01XaW5kb3c6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKSk7CisgICAg
T3duUHRyPFR5cGVDb3VudFNldD4gY291bnRzKEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFw
LnByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKSk7CiAgICAgSGFzaENvdW50ZWRTZXQ8Y29uc3Qg
Y2hhcio+OjppdGVyYXRvciBlbmQgPSBjb3VudHMtPmVuZCgpOwogICAgIGZvciAoSGFzaENvdW50
ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVyYXRvciBpdCA9IGNvdW50cy0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXQtPnZhbHVlOyAr
K2kpCkBAIC05NywxMSArOTcsMTEgQEAgKyAoTlNDb3VudGVkU2V0ICopamF2YVNjcmlwdFByb3Rl
Y3RlZE9iagogCiArIChOU0NvdW50ZWRTZXQgKilqYXZhU2NyaXB0T2JqZWN0VHlwZUNvdW50cwog
ewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEo
KSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwogICAg
IAogICAgIE5TQ291bnRlZFNldCAqcmVzdWx0ID0gW05TQ291bnRlZFNldCBzZXRdOwogCi0gICAg
T3duUHRyPFR5cGVDb3VudFNldD4gY291bnRzKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERh
dGEoKS0+aGVhcC5vYmplY3RUeXBlQ291bnRzKCkpOworICAgIE93blB0cjxUeXBlQ291bnRTZXQ+
IGNvdW50cyhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5vYmplY3RUeXBlQ291bnRzKCkp
OwogICAgIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPjo6aXRlcmF0b3IgZW5kID0gY291bnRz
LT5lbmQoKTsKICAgICBmb3IgKEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPjo6aXRlcmF0b3Ig
aXQgPSBjb3VudHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGl0LT52YWx1ZTsgKytpKQpAQCAtMTY3LDEzICsxNjcsMTMgQEAgKyAo
c2l6ZV90KWdseXBoUGFnZUNvdW50CiAKICsgKEJPT0wpc2hvdWxkUHJpbnRFeGNlcHRpb25zCiB7
Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CiAgICAg
cmV0dXJuIFBhZ2VDb25zb2xlOjpzaG91bGRQcmludEV4Y2VwdGlvbnMoKTsKIH0KIAogKyAodm9p
ZClzZXRTaG91bGRQcmludEV4Y2VwdGlvbnM6KEJPT0wpcHJpbnQKIHsKLSAgICBKU0xvY2tIb2xk
ZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKICAgICBQYWdlQ29uc29sZTo6c2V0
U2hvdWxkUHJpbnRFeGNlcHRpb25zKHByaW50KTsKIH0KIApAQCAtMjAxLDkgKzIwMSw5IEBAICsg
KE5TRGljdGlvbmFyeSAqKW1lbW9yeVN0YXRpc3RpY3MKIHsKICAgICBXVEY6OkZhc3RNYWxsb2NT
dGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0aWNzID0gV1RGOjpmYXN0TWFsbG9jU3RhdGlzdGlj
cygpOwogICAgIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0ds
b2JhbERhdGEoKSk7Ci0gICAgc2l6ZV90IGhlYXBTaXplID0gSlNET01XaW5kb3c6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpLT5oZWFwLnNpemUoKTsKLSAgICBzaXplX3QgaGVhcEZyZWUgPSBKU0RPTVdp
bmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuY2FwYWNpdHkoKSAtIGhlYXBTaXplOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKKyAgICBzaXpl
X3QgaGVhcFNpemUgPSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5zaXplKCk7CisgICAg
c2l6ZV90IGhlYXBGcmVlID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhlYXAuY2FwYWNpdHko
KSAtIGhlYXBTaXplOwogICAgIEdsb2JhbE1lbW9yeVN0YXRpc3RpY3MgZ2xvYmFsTWVtb3J5U3Rh
dHMgPSBnbG9iYWxNZW1vcnlTdGF0aXN0aWNzKCk7CiAgICAgCiAgICAgcmV0dXJuIFtOU0RpY3Rp
b25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKQEAgLTI0Niw4ICsyNDYsOCBAQCAr
IChzaXplX3QpamF2YVNjcmlwdE5vR0NBbGxvd2VkT2JqZWN0c0NvCiAKICsgKHNpemVfdClqYXZh
U2NyaXB0UmVmZXJlbmNlZE9iamVjdHNDb3VudAogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpT
RE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7Ci0gICAgcmV0dXJuIEpTRE9NV2luZG93
Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRPYmplY3RDb3VudCgpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKKyAgICByZXR1cm4g
SlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKIH0K
IAogKyAoTlNTZXQgKilqYXZhU2NyaXB0Um9vdE9iamVjdENsYXNzZXMKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQko
cmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2Fw
ZVBsdWdpblN0cmVhbS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzY4LDcgKzM2OCw3IEBAIGJvb2wg
V2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OndhbnRzQWxsU3QKICAgICBOUEVycm9yIGVycm9yOwog
ICAgIHsKICAgICAgICAgUGx1Z2luU3RvcERlZmVycmVyIGRlZmVycmVyKG1fcGx1Z2luVmlldy5n
ZXQoKSk7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkp
OwogICAgICAgICBlcnJvciA9IG1fcGx1Z2luRnVuY3MtPmdldHZhbHVlKG1fcGx1Z2luLCBOUFBW
cGx1Z2luV2FudHNBbGxOZXR3b3JrU3RyZWFtcywgJnZhbHVlKTsKICAgICB9CiAgICAgaWYgKGVy
cm9yICE9IE5QRVJSX05PX0VSUk9SKQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9X
ZWJOZXRzY2FwZVBsdWdpblZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
UGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0JKHJldmlzaW9uIDE0ODYzOCkKKysrIFNv
dXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC02NjksNyArNjY5LDcgQEAgLSAoQk9PTClzZW5kRXZlbnQ6KHZvaWQqKWV2ZW50
IGlzRHJhd1JlYwogICAgIC8vIFNldCB0aGUgcGx1Z2luQWxsb3dQb3B1cCBmbGFnLgogICAgIEFT
U0VSVChfZXZlbnRIYW5kbGVyKTsKICAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkp
OworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0
dXJlSW5kaWNhdG9yKF9ldmVudEhhbmRsZXItPmN1cnJlbnRFdmVudElzVXNlckdlc3R1cmUoKSA/
IERlZmluaXRlbHlQcm9jZXNzaW5nTmV3VXNlckdlc3R1cmUgOiBQb3NzaWJseVByb2Nlc3NpbmdV
c2VyR2VzdHVyZSk7CiAgICAgICAgIGFjY2VwdGVkRXZlbnQgPSBbX3BsdWdpblBhY2thZ2UuZ2V0
KCkgcGx1Z2luRnVuY3NdLT5ldmVudChwbHVnaW4sIGV2ZW50KTsKICAgICB9CkBAIC04NTAsNyAr
ODUwLDcgQEAgLSAodm9pZClwcml2YXRlQnJvd3NpbmdNb2RlRGlkQ2hhbmdlCiAKICAgICBbc2Vs
ZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxE
YXRhKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICBpZiAoW19wbHVnaW5QYWNrYWdl
LmdldCgpIHBsdWdpbkZ1bmNzXS0+c2V0dmFsdWUpCiAgICAgICAgICAgICBbX3BsdWdpblBhY2th
Z2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5zZXR2YWx1ZShwbHVnaW4sIE5QTlZwcml2YXRlTW9kZUJv
b2wsICZ2YWx1ZSk7CiAgICAgfQpAQCAtOTkxLDcgKzk5MSw3IEBAIC0gKHZvaWQpc2V0V2luZG93
SWZOZWNlc3NhcnkKICAgICAgICAgaW5TZXRXaW5kb3cgPSBZRVM7ICAgICAgICAKICAgICAgICAg
W3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgICAgIHsKLSAgICAgICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgICAg
IG5wRXJyID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+c2V0d2luZG93KHBs
dWdpbiwgJndpbmRvdyk7CiAgICAgICAgIH0KICAgICAgICAgW3NlbGYgZGlkQ2FsbFBsdWdJbkZ1
bmN0aW9uXTsKQEAgLTE0NDMsNyArMTQ0Myw3IEBAIC0gKE5QT2JqZWN0ICopY3JlYXRlUGx1Z2lu
U2NyaXB0YWJsZU9iamUKICAgICBOUEVycm9yIGVycm9yOwogICAgIFtzZWxmIHdpbGxDYWxsUGx1
Z0luRnVuY3Rpb25dOwogICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAg
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgIGVycm9yID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBs
dWdpbkZ1bmNzXS0+Z2V0dmFsdWUocGx1Z2luLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0
LCAmdmFsdWUpOwogICAgIH0KICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAt
MTQ2Miw3ICsxNDYyLDcgQEAgLSAoQk9PTClnZXRGb3JtVmFsdWU6KE5TU3RyaW5nICoqKXZhbHVl
CiAgICAgTlBFcnJvciBlcnJvcjsKICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsK
ICAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkp
OwogICAgICAgICBlcnJvciA9IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPmdl
dHZhbHVlKHBsdWdpbiwgTlBQVmZvcm1WYWx1ZSwgJmJ1ZmZlcik7CiAgICAgfQogICAgIFtzZWxm
IGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0xNTk0LDcgKzE1OTQsNyBAQCAtICh2b2lkKWV2
YWx1YXRlSmF2YVNjcmlwdFBsdWdpblJlcXVlc3Q6CiAgICAgICAgIGlmIChbSlNQbHVnaW5SZXF1
ZXN0IHNlbmROb3RpZmljYXRpb25dKSB7CiAgICAgICAgICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJ
bkZ1bmN0aW9uXTsKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKKyAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICAgICAgICAgIFtf
cGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPnVybG5vdGlmeShwbHVnaW4sIFtVUkwg
X3dlYl9VUkxDU3RyaW5nXSwgTlBSRVNfRE9ORSwgW0pTUGx1Z2luUmVxdWVzdCBub3RpZnlEYXRh
XSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rp
b25dOwpAQCAtMTYyNiw3ICsxNjI2LDcgQEAgLSAodm9pZCl3ZWJGcmFtZTooV2ViRnJhbWUgKil3
ZWJGcmFtZSBkaQogICAgICAgICAKICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsK
ICAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkp
OwogICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT51cmxub3RpZnko
cGx1Z2luLCBbW1twbHVnaW5SZXF1ZXN0IHJlcXVlc3RdIFVSTF0gX3dlYl9VUkxDU3RyaW5nXSwg
cmVhc29uLCBbcGx1Z2luUmVxdWVzdCBub3RpZnlEYXRhXSk7CiAgICAgfQogICAgIFtzZWxmIGRp
ZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0xNjcwLDcgKzE2NzAsNyBAQCAtICh2b2lkKWxvYWRQ
bHVnaW5SZXF1ZXN0OihXZWJQbHVnaW5SZXF1CiAgICAgICAgICAgICAgICAgaWYgKFtwbHVnaW5S
ZXF1ZXN0IHNlbmROb3RpZmljYXRpb25dKSB7CiAgICAgICAgICAgICAgICAgICAgIFtzZWxmIHdp
bGxDYWxsUGx1Z0luRnVuY3Rpb25dOwogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RP
TVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBbX3BsdWdpblBhY2thZ2Uu
Z2V0KCkgcGx1Z2luRnVuY3NdLT51cmxub3RpZnkocGx1Z2luLCBbW1twbHVnaW5SZXF1ZXN0IHJl
cXVlc3RdIFVSTF0gX3dlYl9VUkxDU3RyaW5nXSwgTlBFUlJfR0VORVJJQ19FUlJPUiwgW3BsdWdp
blJlcXVlc3Qgbm90aWZ5RGF0YV0pOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0yNDY0LDcgKzI0NjQs
NyBAQCAtIChOU0JpdG1hcEltYWdlUmVwICopX3ByaW50ZWRQbHVnaW5CaXRtCiAgICAgLy8gVGVs
bCB0aGUgcGx1Z2luIHRvIHByaW50IGludG8gdGhlIEdXb3JsZAogICAgIFtzZWxmIHdpbGxDYWxs
UGx1Z0luRnVuY3Rpb25dOwogICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7Cisg
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgIFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5G
dW5jc10tPnByaW50KHBsdWdpbiwgJm5wUHJpbnQpOwogICAgIH0KICAgICBbc2VsZiBkaWRDYWxs
UGx1Z0luRnVuY3Rpb25dOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJQbHVn
aW5Db250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMv
V2ViUGx1Z2luQ29udHJvbGxlci5tbQkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYktp
dC9tYWMvUGx1Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05
NywxMCArOTcsMTAgQEAgKyAoTlNWaWV3ICopcGx1Z0luVmlld1dpdGhBcmd1bWVudHM6KE5TRAog
ICAgIE5TVmlldyAqdmlldyA9IG5pbDsKIAogICAgIGlmIChbdmlld0ZhY3RvcnkgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnSW5WaWV3V2l0aEFyZ3VtZW50czopXSkgewotICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgdmll
dyA9IFt2aWV3RmFjdG9yeSBwbHVnSW5WaWV3V2l0aEFyZ3VtZW50czphcmd1bWVudHNdOwogICAg
IH0gZWxzZSBpZiAoW3ZpZXdGYWN0b3J5IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1
Z2luVmlld1dpdGhBcmd1bWVudHM6KV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7
CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2lu
ZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgIHZpZXcgPSBbdmlld0ZhY3RvcnkgcGx1Z2lu
Vmlld1dpdGhBcmd1bWVudHM6YXJndW1lbnRzXTsKICAgICB9CiAgICAgCkBAIC0xNTAsMTAgKzE1
MCwxMCBAQCAtICh2b2lkKWRlYWxsb2MKIC0gKHZvaWQpc3RvcE9uZVBsdWdpbjooTlNWaWV3ICop
dmlldwogewogICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlBs
dWdJblN0b3ApXSkgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25WTSgpKTsKICAgICAgICAgW3ZpZXcgd2ViUGx1Z0luU3RvcF07CiAgICAgfSBlbHNlIGlmIChb
dmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdpblN0b3ApXSkgewotICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgW3Zp
ZXcgcGx1Z2luU3RvcF07CiAgICAgfQogfQpAQCAtMTYxLDEwICsxNjEsMTAgQEAgLSAodm9pZClz
dG9wT25lUGx1Z2luOihOU1ZpZXcgKil2aWV3CiAtICh2b2lkKWRlc3Ryb3lPbmVQbHVnaW46KE5T
VmlldyAqKXZpZXcKIHsKICAgICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cih3ZWJQbHVnSW5EZXN0cm95KV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7Cisg
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgIFt2aWV3IHdlYlBsdWdJbkRlc3Ryb3ldOwogICAg
IH0gZWxzZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnaW5EZXN0
cm95KV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0o
KSk7CiAgICAgICAgIFt2aWV3IHBsdWdpbkRlc3Ryb3ldOwogICAgIH0KIH0KQEAgLTE4MSwxMCAr
MTgxLDEwIEBAIC0gKHZvaWQpc3RhcnRBbGxQbHVnaW5zCiAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKSB7CiAgICAgICAgIGlkIGFWaWV3ID0gW192aWV3cyBvYmplY3RBdEluZGV4
OmldOwogICAgICAgICBpZiAoW2FWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2Vi
UGx1Z0luU3RhcnQpXSkgewotICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAg
ICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRv
d0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICAgICAgW2FWaWV3IHdlYlBsdWdJblN0YXJ0XTsK
ICAgICAgICAgfSBlbHNlIGlmIChbYVZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihw
bHVnaW5TdGFydCldKSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAg
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgICAgICBbYVZpZXcgcGx1Z2luU3RhcnRdOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMjUzLDEwICsyNTMsMTAgQEAgLSAodm9pZClhZGRQbHVnaW46KE5T
VmlldyAqKXZpZXcKIAogICAgICAgICBMT0coUGx1Z2lucywgImluaXRpYWxpemluZyBwbHVnLWlu
ICVAIiwgdmlldyk7CiAgICAgICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKHdlYlBsdWdJbkluaXRpYWxpemUpXSkgewotICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKSk7CisgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICAgICAgW3ZpZXcgd2ViUGx1
Z0luSW5pdGlhbGl6ZV07CiAgICAgICAgIH0gZWxzZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3RvcihwbHVnaW5Jbml0aWFsaXplKV0pIHsKLSAgICAgICAgICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOworICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgICAgIFt2aWV3
IHBsdWdpbkluaXRpYWxpemVdOwogICAgICAgICB9CiAKQEAgLTI2NiwxNSArMjY2LDE1IEBAIC0g
KHZvaWQpYWRkUGx1Z2luOihOU1ZpZXcgKil2aWV3CiAgICAgICAgIGlmIChfc3RhcnRlZCkgewog
ICAgICAgICAgICAgTE9HKFBsdWdpbnMsICJzdGFydGluZyBwbHVnLWluICVAIiwgdmlldyk7CiAg
ICAgICAgICAgICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVn
SW5TdGFydCldKSB7Ci0gICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAg
ICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgICAgICAgICBbdmlldyB3ZWJQbHVnSW5T
dGFydF07CiAgICAgICAgICAgICB9IGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IocGx1Z2luU3RhcnQpXSkgewotICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxE
YXRhKCkpOworICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgICAgICAgICAgW3Zp
ZXcgcGx1Z2luU3RhcnRdOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzZXRDb250YWluaW5nV2lu
ZG93OildKSB7Ci0gICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgICAg
ICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgICAgICAgICBbdmlldyBzZXRDb250YWluaW5n
V2luZG93OltfZG9jdW1lbnRWaWV3IHdpbmRvd11dOwogICAgICAgICAgICAgfQogICAgICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhv
c3RQcm94eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3Rl
ZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbQkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNl
L1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0JKHdv
cmtpbmcgY29weSkKQEAgLTYzOSw3ICs2MzksNyBAQCBzdGF0aWMgSWRlbnRpZmllciBpZGVudGlm
aWVyRnJvbUlkZW50aWZpCiAgICAgQVNTRVJUKGlkZW50aWZpZXItPmlzU3RyaW5nKCkpOwogICAK
ICAgICBjb25zdCBjaGFyKiBzdHIgPSBpZGVudGlmaWVyLT5zdHJpbmcoKTsgICAgCi0gICAgcmV0
dXJuIElkZW50aWZpZXIoSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLCBTdHJpbmc6
OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKHN0ciwgc3RybGVuKHN0cikpKTsKKyAgICByZXR1
cm4gSWRlbnRpZmllcihKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSwgU3RyaW5nOjpmcm9tVVRGOFdp
dGhMYXRpbjFGYWxsYmFjayhzdHIsIHN0cmxlbihzdHIpKSk7CiB9CiAKIGtlcm5fcmV0dXJuX3Qg
V0tQQ0ludm9rZShtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50MzJfdCBwbHVnaW5JRCwgdWlu
dDMyX3QgcmVxdWVzdElELCB1aW50MzJfdCBvYmplY3RJRCwgdWludDY0X3Qgc2VydmVySWRlbnRp
ZmllciwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdp
bnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5oCShyZXZpc2lvbiAxNDg2Mzgp
CisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2RlZmluZSBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHlfaAogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSWRl
bnRpZmllci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTR2xvYmFsRGF0YS5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1ZNLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Ry
b25nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgogI2luY2x1ZGUgPFdlYktpdC9ucGFw
aS5oPgpAQCAtMzIwLDcgKzMyMCw3IEBAIHByaXZhdGU6CiAgICAgcHVibGljOgogICAgICAgICBM
b2NhbE9iamVjdE1hcCgpOwogICAgICAgICB+TG9jYWxPYmplY3RNYXAoKTsKLSAgICAgICAgdWlu
dDMyX3QgaWRGb3JPYmplY3QoSlNDOjpKU0dsb2JhbERhdGEmLCBKU0M6OkpTT2JqZWN0Kik7Cisg
ICAgICAgIHVpbnQzMl90IGlkRm9yT2JqZWN0KEpTQzo6Vk0mLCBKU0M6OkpTT2JqZWN0Kik7CiAg
ICAgICAgIHZvaWQgcmV0YWluKEpTQzo6SlNPYmplY3QqKTsKICAgICAgICAgdm9pZCByZWxlYXNl
KEpTQzo6SlNPYmplY3QqKTsKICAgICAgICAgdm9pZCBjbGVhcigpOwpJbmRleDogU291cmNlL1dl
YktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eS5tbQkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYktpdC9t
YWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjcsNyArMTI3LDcgQEAgaW5saW5lIEpTQzo6SlNPYmplY3QqIE5ldHNjYXBl
UGx1Z2luSW5zdAogICAgIHJldHVybiBtX2lkVG9KU09iamVjdE1hcC5nZXQob2JqZWN0SUQpLmdl
dCgpOwogfQogCi11aW50MzJfdCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2Jq
ZWN0TWFwOjppZEZvck9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTT2JqZWN0KiBv
YmplY3QpCit1aW50MzJfdCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0
TWFwOjppZEZvck9iamVjdChWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgLy8gVGhp
cyBtZXRob2QgY3JlYXRlcyBvYmplY3RzIHdpdGggcmVmY291bnQgb2YgMSwgYnV0IGRvZXNuJ3Qg
aW5jcmVhc2UgcmVmY291bnQgd2hlbiByZXR1cm5pbmcKICAgICAvLyBmb3VuZCBvYmplY3RzLiBU
aGlzIGV4dHJhIGNvdW50IGFjY291bnRzIGZvciB0aGUgbWFpbiAicmVmZXJlbmNlIiBrZXB0IGJ5
IHBsdWdpbiBwcm9jZXNzLgpAQCAtMTUxLDcgKzE1MSw3IEBAIHVpbnQzMl90IE5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eTo6TG8KICAgICAgICAgb2JqZWN0SUQgPSArK21fb2JqZWN0SURDb3Vu
dGVyOwogICAgIH0gd2hpbGUgKCFtX29iamVjdElEQ291bnRlciB8fCBtX29iamVjdElEQ291bnRl
ciA9PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oLTEpIHx8IG1faWRUb0pTT2JqZWN0TWFwLmNvbnRh
aW5zKG9iamVjdElEKSk7CiAKLSAgICBtX2lkVG9KU09iamVjdE1hcC5zZXQob2JqZWN0SUQsIFN0
cm9uZzxKU09iamVjdD4oZ2xvYmFsRGF0YSwgb2JqZWN0KSk7CisgICAgbV9pZFRvSlNPYmplY3RN
YXAuc2V0KG9iamVjdElELCBTdHJvbmc8SlNPYmplY3Q+KHZtLCBvYmplY3QpKTsKICAgICBtX2pz
T2JqZWN0VG9JRE1hcC5zZXQob2JqZWN0LCBtYWtlX3BhaXIob2JqZWN0SUQsIDEpKTsKIAogICAg
IHJldHVybiBvYmplY3RJRDsKQEAgLTgyOSw3ICs4MjksNyBAQCBib29sIE5ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eTo6Z2V0V2luCiAgICAgaWYgKCFmcmFtZS0+c2NyaXB0KCktPmNhbkV4ZWN1
dGVTY3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkKICAgICAgICAgb2JqZWN0SUQgPSAw
OwogICAgIGVsc2UKLSAgICAgICAgb2JqZWN0SUQgPSBtX2xvY2FsT2JqZWN0cy5pZEZvck9iamVj
dCgqcGx1Z2luV29ybGQoKS0+Z2xvYmFsRGF0YSgpLCBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1No
ZWxsKHBsdWdpbldvcmxkKCkpLT53aW5kb3coKSk7CisgICAgICAgIG9iamVjdElEID0gbV9sb2Nh
bE9iamVjdHMuaWRGb3JPYmplY3QoKnBsdWdpbldvcmxkKCktPnZtKCksIGZyYW1lLT5zY3JpcHQo
KS0+d2luZG93U2hlbGwocGx1Z2luV29ybGQoKSktPndpbmRvdygpKTsKICAgICAgICAgCiAgICAg
cmV0dXJuIHRydWU7CiB9CkBAIC04NDEsNyArODQxLDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6OmdldFBsdQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgaWYg
KEpTT2JqZWN0KiBvYmplY3QgPSBmcmFtZS0+c2NyaXB0KCktPmpzT2JqZWN0Rm9yUGx1Z2luRWxl
bWVudChbbV9wbHVnaW5WaWV3IGVsZW1lbnRdKSkKLSAgICAgICAgb2JqZWN0SUQgPSBtX2xvY2Fs
T2JqZWN0cy5pZEZvck9iamVjdCgqcGx1Z2luV29ybGQoKS0+Z2xvYmFsRGF0YSgpLCBvYmplY3Qp
OworICAgICAgICBvYmplY3RJRCA9IG1fbG9jYWxPYmplY3RzLmlkRm9yT2JqZWN0KCpwbHVnaW5X
b3JsZCgpLT52bSgpLCBvYmplY3QpOwogICAgIGVsc2UKICAgICAgICAgb2JqZWN0SUQgPSAwOwog
ICAgIApAQCAtODcwLDggKzg3MCw4IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
OjpldmFsdWEKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBK
U0xvY2tIb2xkZXIgbG9jayhwbHVnaW5Xb3JsZCgpLT5nbG9iYWxEYXRhKCkpOwotICAgIFN0cm9u
ZzxKU0dsb2JhbE9iamVjdD4gZ2xvYmFsT2JqZWN0KCpwbHVnaW5Xb3JsZCgpLT5nbG9iYWxEYXRh
KCksIGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpKTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhwbHVnaW5Xb3JsZCgpLT52bSgpKTsKKyAgICBTdHJvbmc8SlNHbG9i
YWxPYmplY3Q+IGdsb2JhbE9iamVjdCgqcGx1Z2luV29ybGQoKS0+dm0oKSwgZnJhbWUtPnNjcmlw
dCgpLT5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCiAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3Ig
Z2VzdHVyZUluZGljYXRvcihhbGxvd1BvcHVwcyA/IERlZmluaXRlbHlQcm9jZXNzaW5nTmV3VXNl
ckdlc3R1cmUgOiBQb3NzaWJseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CkBAIC0xMjgxLDcgKzEy
ODEsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6YWRkVmFsCiAgICAgICAg
ICAgICBbYXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50Om9iamVjdElEXV07
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OltOU051bWJl
ciBudW1iZXJXaXRoSW50OkpTT2JqZWN0VmFsdWVUeXBlXV07Ci0gICAgICAgICAgICBbYXJyYXkg
YWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50Om1fbG9jYWxPYmplY3RzLmlkRm9yT2Jq
ZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgb2JqZWN0KV1dOworICAgICAgICAgICAgW2FycmF5IGFk
ZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDptX2xvY2FsT2JqZWN0cy5pZEZvck9iamVj
dChleGVjLT52bSgpLCBvYmplY3QpXV07CiAgICAgICAgIH0KICAgICB9IGVsc2UKICAgICAgICAg
W2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpWb2lkVmFsdWVUeXBlXV07
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5z
dGFuY2UubW0JKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMv
SG9zdGVkL1Byb3h5SW5zdGFuY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4NCwxNiArMTg0LDE2
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUHJveHlSdW50aW1lTWV0aG9kKiBjcmVhdGUoRXhlY1N0
YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5h
bWUsIEJpbmRpbmdzOjpNZXRob2QqIG1ldGhvZCkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBk
ZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlIHVzZXMgdGhlIHByb3RvdHlwZSBvZmYgb2YgdGhlIHdy
b25nIGdsb2JhbCBvYmplY3QKLSAgICAgICAgLy8gZXhlYy1nbG9iYWxEYXRhKCkgaXMgYWxzbyBs
aWtlbHkgd3JvbmcuCisgICAgICAgIC8vIGV4ZWMtdm0oKSBpcyBhbHNvIGxpa2VseSB3cm9uZy4K
ICAgICAgICAgU3RydWN0dXJlKiBkb21TdHJ1Y3R1cmUgPSBkZXByZWNhdGVkR2V0RE9NU3RydWN0
dXJlPFByb3h5UnVudGltZU1ldGhvZD4oZXhlYyk7CiAgICAgICAgIFByb3h5UnVudGltZU1ldGhv
ZCogcnVudGltZU1ldGhvZCA9IG5ldyAoYWxsb2NhdGVDZWxsPFByb3h5UnVudGltZU1ldGhvZD4o
KmV4ZWMtPmhlYXAoKSkpIFByb3h5UnVudGltZU1ldGhvZChnbG9iYWxPYmplY3QsIGRvbVN0cnVj
dHVyZSwgbWV0aG9kKTsKLSAgICAgICAgcnVudGltZU1ldGhvZC0+ZmluaXNoQ3JlYXRpb24oZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBuYW1lKTsKKyAgICAgICAgcnVudGltZU1ldGhvZC0+ZmluaXNoQ3Jl
YXRpb24oZXhlYy0+dm0oKSwgbmFtZSk7CiAgICAgICAgIHJldHVybiBydW50aW1lTWV0aG9kOwog
ICAgIH0KIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8p
OworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwog
ICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpAQCAtMjA0LDkgKzIw
NCw5IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICB7Ci0gICAgICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIG5hbWUpOworICAgICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSwgbmFtZSk7CiAgICAgICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZv
KSk7CiAgICAgfQogfTsKQEAgLTMzNyw3ICszMzcsNyBAQCB2b2lkIFByb3h5SW5zdGFuY2U6Omdl
dFByb3BlcnR5TmFtZXMoRXhlCiAKICAgICAgICAgaWYgKGlkZW50aWZpZXItPmlzU3RyaW5nKCkp
IHsKICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHN0ciA9IGlkZW50aWZpZXItPnN0cmluZygpOwot
ICAgICAgICAgICAgbmFtZUFycmF5LmFkZChJZGVudGlmaWVyKEpTRE9NV2luZG93Ojpjb21tb25K
U0dsb2JhbERhdGEoKSwgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhzdHIsIHN0
cmxlbihzdHIpKSkpOworICAgICAgICAgICAgbmFtZUFycmF5LmFkZChJZGVudGlmaWVyKEpTRE9N
V2luZG93Ojpjb21tb25WTSgpLCBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKHN0
ciwgc3RybGVuKHN0cikpKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbmFtZUFycmF5
LmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGlkZW50aWZpZXItPm51bWJlcigpKSk7CiAgICAg
fQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlSdW50aW1lT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJv
eHlSdW50aW1lT2JqZWN0LmgJKHJldmlzaW9uIDE0ODYzOCkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1BsdWdpbnMvSG9zdGVkL1Byb3h5UnVudGltZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUHJveHlSdW50aW1lT2JqZWN0KiBjcmVh
dGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUGFzc1JlZlB0cjxQcm94eUluc3RhbmNlPiBpbnN0YW5jZSkKICAgICB7CiAgICAgICAgIC8v
IEZJWE1FOiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlIHVzZXMgdGhlIHByb3RvdHlwZSBvZmYg
b2YgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QuCi0gICAgICAgIC8vIGV4ZWMtPmdsb2JhbERhdGEo
KSBpcyBhbHNvIGxpa2VseSB3cm9uZy4KKyAgICAgICAgLy8gZXhlYy0+dm0oKSBpcyBhbHNvIGxp
a2VseSB3cm9uZy4KICAgICAgICAgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IFdlYkNvcmU6
OmRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8UHJveHlSdW50aW1lT2JqZWN0PihleGVjKTsKICAg
ICAgICAgUHJveHlSdW50aW1lT2JqZWN0KiBvYmplY3QgPSBuZXcgKEpTQzo6YWxsb2NhdGVDZWxs
PFByb3h5UnVudGltZU9iamVjdD4oKmV4ZWMtPmhlYXAoKSkpIFByb3h5UnVudGltZU9iamVjdChl
eGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgaW5zdGFuY2UpOwogICAgICAgICBvYmplY3Qt
PmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdCk7CkBAIC01MSw5ICs1MSw5IEBAIHB1YmxpYzoK
IAogICAgIFByb3h5SW5zdGFuY2UqIGdldEludGVybmFsUHJveHlJbnN0YW5jZSgpIGNvbnN0Owog
Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z0Rl
bGVnYXRlLm1tCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYs
NyBAQCAtIChOU0FycmF5ICopc2NvcGVDaGFpbgogCiAKICAgICBKU1Njb3BlKiBzY29wZSA9IF9w
cml2YXRlLT5kZWJ1Z2dlckNhbGxGcmFtZS0+c2NvcGUoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9j
ayhzY29wZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhzY29wZS0+dm0o
KSk7CiAgICAgaWYgKCFzY29wZS0+bmV4dCgpKSAgLy8gZ2xvYmFsIGZyYW1lCiAgICAgICAgIHJl
dHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6X3ByaXZhdGUtPmdsb2JhbE9iamVjdF07CiAK
QEAgLTE4Niw3ICsxODYsNyBAQCAtIChOU0FycmF5ICopc2NvcGVDaGFpbgogICAgIGZvciAoU2Nv
cGVDaGFpbkl0ZXJhdG9yIGl0ID0gc2NvcGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewog
ICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gaXQuZ2V0KCk7CiAgICAgICAgIGlmIChvYmplY3Qt
PmlzQWN0aXZhdGlvbk9iamVjdCgpKQotICAgICAgICAgICAgb2JqZWN0ID0gRGVidWdnZXJBY3Rp
dmF0aW9uOjpjcmVhdGUoKnNjb3BlLT5nbG9iYWxEYXRhKCksIG9iamVjdCk7CisgICAgICAgICAg
ICBvYmplY3QgPSBEZWJ1Z2dlckFjdGl2YXRpb246OmNyZWF0ZSgqc2NvcGUtPnZtKCksIG9iamVj
dCk7CiAgICAgICAgIFtzY29wZXMgYWRkT2JqZWN0OltzZWxmIF9jb252ZXJ0VmFsdWVUb09iamNW
YWx1ZTpvYmplY3RdXTsKICAgICB9CiAKQEAgLTIzNCwxMiArMjM0LDEyIEBAIC0gKGlkKWV2YWx1
YXRlV2ViU2NyaXB0OihOU1N0cmluZyAqKXNjcmkKICAgICAvLyBXZWJTY3JpcHRDYWxsRnJhbWUu
IEluc3RlYWQsIHdlIG5lZWQgdG8gc2V0IHRoZSBkeW5hbWljIGdsb2JhbCBvYmplY3QKICAgICAv
LyBhbmQgZXZhbHVhdGUgdGhlIEpTIGluIHRoZSBnbG9iYWwgb2JqZWN0J3MgZ2xvYmFsIGNhbGwg
ZnJhbWUuCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IF9wcml2YXRlLT5kZWJ1
Z2dlci0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0
LT5nbG9iYWxEYXRhKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iamVjdC0+dm0o
KSk7CiAKLSAgICBpZiAoc2VsZiA9PSBfcHJpdmF0ZS0+ZGVidWdnZXItPmdsb2JhbENhbGxGcmFt
ZSgpICYmICFnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KSB7
CisgICAgaWYgKHNlbGYgPT0gX3ByaXZhdGUtPmRlYnVnZ2VyLT5nbG9iYWxDYWxsRnJhbWUoKSAm
JiAhZ2xvYmFsT2JqZWN0LT52bSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpIHsKICAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IF9wcml2YXRlLT5kZWJ1Z2dlci0+Z2xvYmFsT2Jq
ZWN0KCk7CiAKLSAgICAgICAgRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNj
b3BlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QpOworICAgICAgICBE
eW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUoZ2xvYmFsT2JqZWN0LT52
bSgpLCBnbG9iYWxPYmplY3QpOwogCiAgICAgICAgIEpTQzo6SlNWYWx1ZSBleGNlcHRpb247CiAg
ICAgICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBldmFsdWF0ZUluR2xvYmFsQ2FsbEZyYW1lKHNj
cmlwdCwgZXhjZXB0aW9uLCBnbG9iYWxPYmplY3QpOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1tCShyZXZpc2lvbiAxNDg2MzgpCisrKyBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC03NSw3ICs3NSw3IEBAIHN0YXRpYyBXZWJGcmFtZSAqdG9XZWJGcmFtZShKU0dsb2Jh
bE9iamUKIAogV2ViU2NyaXB0RGVidWdnZXI6OldlYlNjcmlwdERlYnVnZ2VyKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgOiBtX2NhbGxpbmdEZWxlZ2F0ZShmYWxzZSkKLSAgICAs
IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3Qp
CisgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdCkK
IHsKICAgICBhdHRhY2goZ2xvYmFsT2JqZWN0KTsKICAgICBpbml0R2xvYmFsQ2FsbEZyYW1lKGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAx
NDg2NTIpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE1IEBACisyMDEzLTA0LTE3ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5j
b20+CisKKyAgICAgICAgUmVuYW1lZCBKU0dsb2JhbERhdGEgdG8gVk0KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDc3NworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQuY3BwOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OmphdmFTY3JpcHRPYmplY3RzQ291bnQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1FXZWJG
cmFtZUFkYXB0ZXIuY3BwOgorICAgICAgICAoUVdlYkZyYW1lQWRhcHRlcjo6YWRkVG9KYXZhU2Ny
aXB0V2luZG93T2JqZWN0KToKKwogMjAxMy0wNC0xNSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJlbW92ZSBtb3JlICNpbmNsdWRlcyBmcm9tIEZyYW1lLmgKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQuY3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNs
ZWFyRnJhbWUKIAogaW50IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpqYXZhU2NyaXB0T2JqZWN0
c0NvdW50KCkKIHsKLSAgICByZXR1cm4gSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKS0+aGVhcC5nbG9iYWxPYmplY3RDb3VudCgpOworICAgIHJldHVybiBKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vblZNKCktPmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQoKTsKIH0KIAogdm9pZCBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6Z2FyYmFnZUNvbGxlY3RvckNvbGxlY3QoKQpJbmRleDogU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViRnJhbWVBZGFwdGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FXZWJGcmFtZUFkYXB0ZXIu
Y3BwCShyZXZpc2lvbiAxNDg2MzgpCisrKyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1FXZWJGcmFtZUFkYXB0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsNyArMjM2LDcgQEAg
dm9pZCBRV2ViRnJhbWVBZGFwdGVyOjphZGRUb0phdmFTY3JpcHRXaQogICAgIEpTQzo6SlNPYmpl
Y3QqIHJ1bnRpbWVPYmplY3QgPSBKU0M6OkJpbmRpbmdzOjpRdEluc3RhbmNlOjpnZXRRdEluc3Rh
bmNlKG9iamVjdCwgcm9vdCwgdmFsdWVPd25lcnNoaXApLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4
ZWMpOwogCiAgICAgSlNDOjpQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICB3aW5kb3ctPm1ldGhv
ZFRhYmxlKCktPnB1dCh3aW5kb3csIGV4ZWMsIEpTQzo6SWRlbnRpZmllcigmZXhlYy0+Z2xvYmFs
RGF0YSgpLCByZWludGVycHJldF9jYXN0X3B0cjxjb25zdCBVQ2hhcio+KG5hbWUuY29uc3REYXRh
KCkpLCBuYW1lLmxlbmd0aCgpKSwgcnVudGltZU9iamVjdCwgc2xvdCk7CisgICAgd2luZG93LT5t
ZXRob2RUYWJsZSgpLT5wdXQod2luZG93LCBleGVjLCBKU0M6OklkZW50aWZpZXIoJmV4ZWMtPnZt
KCksIHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IFVDaGFyKj4obmFtZS5jb25zdERhdGEoKSks
IG5hbWUubGVuZ3RoKCkpLCBydW50aW1lT2JqZWN0LCBzbG90KTsKIH0KIAogUVN0cmluZyBRV2Vi
RnJhbWVBZGFwdGVyOjp0b0h0bWwoKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdC93aW4vQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNp
b24gMTQ4NjUyKQorKysgU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTkgQEAKKzIwMTMtMDQtMTcgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFw
cGxlLmNvbT4KKworICAgICAgICBSZW5hbWVkIEpTR2xvYmFsRGF0YSB0byBWTQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0Nzc3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3RhdGlzdGlj
cy5jcHA6CisgICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlwdE9iamVjdHNDb3Vu
dCk6CisgICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlwdEdsb2JhbE9iamVjdHND
b3VudCk6CisgICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlwdFByb3RlY3RlZE9i
amVjdHNDb3VudCk6CisgICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlwdFByb3Rl
Y3RlZEdsb2JhbE9iamVjdHNDb3VudCk6CisgICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6amF2
YVNjcmlwdFByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMpOgorICAgICAgICAqIFdlYkphdmFTY3Jp
cHRDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2ViSmF2YVNjcmlwdENvbGxlY3Rvcjo6b2JqZWN0
Q291bnQpOgorCiAyMDEzLTA0LTEzICBSb2dlciBGb25nICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQnVpbGQgZml4IGZvciBXaW5kb3dzLgpJbmRleDogU291
cmNlL1dlYktpdC93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysg
U291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05OCw4ICs5OCw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29yZVN0YXRpc3QK
ICAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgSlNMb2Nr
SG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKLSAgICAqY291
bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0
Q291bnQoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7
CisgICAgKmNvdW50ID0gKFVJTlQpSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhlYXAub2JqZWN0
Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTA5LDggKzEwOSw4IEBAIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29yZVN0YXRpc3QKICAgICBpZiAoIWNvdW50KQogICAg
ICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKLSAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRv
dzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQoKTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAgKmNvdW50ID0g
KFVJTlQpSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQoKTsK
ICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTIwLDggKzEyMCw4IEBAIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgV2ViQ29yZVN0YXRpc3QKICAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1
cm4gRV9QT0lOVEVSOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpKTsKLSAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAgKmNvdW50ID0gKFVJTlQp
SlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKICAg
ICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTMxLDE2ICsxMzEsMTYgQEAgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBXZWJDb3JlU3RhdGlzdAogICAgIGlmICghY291bnQpCiAgICAgICAgIHJldHVy
biBFX1BPSU5URVI7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOwotICAgICpjb3VudCA9IChVSU5UKUpTRE9NV2luZG93Ojpjb21tb25K
U0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKKyAgICAqY291bnQgPSAo
VUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5wcm90ZWN0ZWRHbG9iYWxPYmplY3RD
b3VudCgpOwogICAgIHJldHVybiBTX09LOwogfQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygg
CiAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBJUHJvcGVydHlCYWcyKiogdHlwZU5hbWVzQW5kQ291
bnRzKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2Jh
bERhdGEoKSk7Ci0gICAgT3duUHRyPFR5cGVDb3VudFNldD4ganNPYmplY3RUeXBlTmFtZXMoSlNE
T01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdFR5cGVD
b3VudHMoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkp
OworICAgIE93blB0cjxUeXBlQ291bnRTZXQ+IGpzT2JqZWN0VHlwZU5hbWVzKEpTRE9NV2luZG93
Ojpjb21tb25WTSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKSk7CiAgICAgdHlw
ZWRlZiBUeXBlQ291bnRTZXQ6OmNvbnN0X2l0ZXJhdG9yIEl0ZXJhdG9yOwogICAgIEl0ZXJhdG9y
IGVuZCA9IGpzT2JqZWN0VHlwZU5hbWVzLT5lbmQoKTsKICAgICBIYXNoTWFwPFN0cmluZywgaW50
PiB0eXBlQ291bnRNYXA7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJKYXZhU2NyaXB0Q29s
bGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJKYXZhU2NyaXB0
Q29sbGVjdG9yLmNwcAkocmV2aXNpb24gMTQ4NjM4KQorKysgU291cmNlL1dlYktpdC93aW4vV2Vi
SmF2YVNjcmlwdENvbGxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAK
ICNpbmNsdWRlICJXZWJKYXZhU2NyaXB0Q29sbGVjdG9yLmgiCiAKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9IZWFwLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNHbG9iYWxEYXRhLmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVk0uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dDQ29u
dHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSlNET01XaW5kb3cuaD4KICNpbmNsdWRlIDxy
dW50aW1lL0pTTG9jay5oPgpAQCAtMTExLDcgKzExMSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgV2ViSmF2YVNjcmlwdEMKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKICAgICB9CiAK
LSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkp
OwotICAgICpjb3VudCA9IChVSU5UKUpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+
aGVhcC5vYmplY3RDb3VudCgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpj
b21tb25WTSgpKTsKKyAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+
aGVhcC5vYmplY3RDb3VudCgpOwogICAgIHJldHVybiBTX09LOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198674</attachid>
            <date>2013-04-17 20:38:02 -0700</date>
            <delta_ts>2013-04-17 20:59:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-114777-20130417203734.patch</filename>
            <type>text/plain</type>
            <size>1990379</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4NTQg
QEAKKzIwMTMtMDQtMTcgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZW5hbWVkIEpTR2xvYmFsRGF0YSB0byBWTQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0Nzc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBUEkvQVBJQ2FzdC5oOgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKHRvSlMpOgorICAgICAgICAodG9SZWYpOgorICAgICAgICAqIEFQSS9BUElTaGlt
cy5oOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW1XaXRob3V0TG9jazo6QVBJRW50cnlTaGlt
V2l0aG91dExvY2spOgorICAgICAgICAoQVBJRW50cnlTaGltV2l0aG91dExvY2spOgorICAgICAg
ICAoSlNDOjpBUElFbnRyeVNoaW06OkFQSUVudHJ5U2hpbSk6CisgICAgICAgIChBUElFbnRyeVNo
aW0pOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW06On5BUElFbnRyeVNoaW0pOgorICAgICAg
ICAoSlNDOjpBUElDYWxsYmFja1NoaW06OkFQSUNhbGxiYWNrU2hpbSk6CisgICAgICAgIChKU0M6
OkFQSUNhbGxiYWNrU2hpbTo6fkFQSUNhbGxiYWNrU2hpbSk6CisgICAgICAgIChBUElDYWxsYmFj
a1NoaW0pOgorICAgICAgICAqIEFQSS9KU0FQSVdyYXBwZXJPYmplY3QuaDoKKyAgICAgICAgKEpT
QVBJV3JhcHBlck9iamVjdCk6CisgICAgICAgICogQVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbToK
KyAgICAgICAgKEpTQzo6OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU0FQSVdy
YXBwZXJPYmplY3Q6OkpTQVBJV3JhcHBlck9iamVjdCk6CisgICAgICAgIChKU0M6OkpTQVBJV3Jh
cHBlck9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0FQSVdyYXBwZXJP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIEFQSS9KU0Jhc2UuY3BwOgorICAgICAg
ICAoSlNHYXJiYWdlQ29sbGVjdCk6CisgICAgICAgIChKU1JlcG9ydEV4dHJhTWVtb3J5Q29zdCk6
CisgICAgICAgIChKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmcpOgorICAg
ICAgICAqIEFQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpKU0Nh
bGxiYWNrQ29uc3RydWN0b3I6OkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6
OkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIEFQSS9K
U0NhbGxiYWNrQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja0NvbnN0cnVj
dG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrRnVuY3Rpb24u
Y3BwOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKEpTQzo6SlNDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAqIEFQ
SS9KU0NhbGxiYWNrRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQ2FsbGJhY2tGdW5jdGlvbik6Cisg
ICAgICAgIChKU0M6OkpTQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5jcHA6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIEFQSS9KU0NhbGxi
YWNrT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3REYXRhOjpzZXRQcml2
YXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0RGF0YTo6SlNQcml2
YXRlUHJvcGVydHlNYXA6OnNldFByaXZhdGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0NhbGxiYWNr
T2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDo6c2V0UHJpdmF0ZVByb3Bl
cnR5KToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oOgorICAgICAg
ICAoSlNDOjo6OkpTQ2FsbGJhY2tPYmplY3QpOgorICAgICAgICAoSlNDOjo6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKEpTQzo6OjpwdXQpOgorICAgICAgICAoSlNDOjo6OnN0YXRpY0Z1bmN0
aW9uR2V0dGVyKToKKyAgICAgICAgKiBBUEkvSlNDbGFzc1JlZi5jcHA6CisgICAgICAgIChPcGFx
dWVKU0NsYXNzQ29udGV4dERhdGE6Ok9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSk6CisgICAgICAg
IChPcGFxdWVKU0NsYXNzOjpjb250ZXh0RGF0YSk6CisgICAgICAgIChPcGFxdWVKU0NsYXNzOjpw
cm90b3R5cGUpOgorICAgICAgICAqIEFQSS9KU0NsYXNzUmVmLmg6CisgICAgICAgIChPcGFxdWVK
U0NsYXNzQ29udGV4dERhdGEpOgorICAgICAgICAqIEFQSS9KU0NvbnRleHQubW06CisgICAgICAg
ICgtW0pTQ29udGV4dCBzZXRFeGNlcHRpb246XSk6CisgICAgICAgICgtW0pTQ29udGV4dCBpbml0
V2l0aEdsb2JhbENvbnRleHRSZWY6XSk6CisgICAgICAgICgrW0pTQ29udGV4dCBjb250ZXh0V2l0
aEdsb2JhbENvbnRleHRSZWY6XSk6CisgICAgICAgICogQVBJL0pTQ29udGV4dFJlZi5jcHA6Cisg
ICAgICAgIChKU0NvbnRleHRHcm91cENyZWF0ZSk6CisgICAgICAgIChKU0NvbnRleHRHcm91cFJl
bGVhc2UpOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0Q3JlYXRlKToKKyAgICAgICAgKEpTR2xv
YmFsQ29udGV4dENyZWF0ZUluR3JvdXApOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0UmV0YWlu
KToKKyAgICAgICAgKEpTR2xvYmFsQ29udGV4dFJlbGVhc2UpOgorICAgICAgICAoSlNDb250ZXh0
R2V0R3JvdXApOgorICAgICAgICAoSlNDb250ZXh0Q3JlYXRlQmFja3RyYWNlKToKKyAgICAgICAg
KiBBUEkvSlNPYmplY3RSZWYuY3BwOgorICAgICAgICAoSlNPYmplY3RNYWtlKToKKyAgICAgICAg
KEpTT2JqZWN0TWFrZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTT2JqZWN0TWFrZUZ1bmN0aW9u
KToKKyAgICAgICAgKEpTT2JqZWN0U2V0UHJvdG90eXBlKToKKyAgICAgICAgKEpTT2JqZWN0SGFz
UHJvcGVydHkpOgorICAgICAgICAoSlNPYmplY3RHZXRQcm9wZXJ0eSk6CisgICAgICAgIChKU09i
amVjdFNldFByb3BlcnR5KToKKyAgICAgICAgKEpTT2JqZWN0RGVsZXRlUHJvcGVydHkpOgorICAg
ICAgICAoSlNPYmplY3RHZXRQcml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlNPYmplY3RTZXRQ
cml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlNPYmplY3REZWxldGVQcml2YXRlUHJvcGVydHkp
OgorICAgICAgICAoT3BhcXVlSlNQcm9wZXJ0eU5hbWVBcnJheTo6T3BhcXVlSlNQcm9wZXJ0eU5h
bWVBcnJheSk6CisgICAgICAgIChPcGFxdWVKU1Byb3BlcnR5TmFtZUFycmF5KToKKyAgICAgICAg
KEpTT2JqZWN0Q29weVByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNQcm9wZXJ0eU5hbWVBcnJh
eVJlbGVhc2UpOgorICAgICAgICAoSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvckFkZE5hbWUpOgor
ICAgICAgICAqIEFQSS9KU1NjcmlwdFJlZi5jcHA6CisgICAgICAgIChPcGFxdWVKU1NjcmlwdDo6
Y3JlYXRlKToKKyAgICAgICAgKE9wYXF1ZUpTU2NyaXB0Ojp2bSk6CisgICAgICAgIChPcGFxdWVK
U1NjcmlwdDo6T3BhcXVlSlNTY3JpcHQpOgorICAgICAgICAoT3BhcXVlSlNTY3JpcHQpOgorICAg
ICAgICAocGFyc2VTY3JpcHQpOgorICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tOgor
ICAgICAgICAoc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgpOgorICAgICAgICAqIEFQSS9KU1ZpcnR1
YWxNYWNoaW5lSW50ZXJuYWwuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogQVBJL0pTV3Jh
cHBlck1hcC5tbToKKyAgICAgICAgKG1ha2VXcmFwcGVyKToKKyAgICAgICAgKiBBUEkvT2JqQ0Nh
bGxiYWNrRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb246OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tOgor
ICAgICAgICAoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBB
UEkvT3BhcXVlSlNTdHJpbmcuY3BwOgorICAgICAgICAoT3BhcXVlSlNTdHJpbmc6OmlkZW50aWZp
ZXIpOgorICAgICAgICAqIEFQSS9PcGFxdWVKU1N0cmluZy5oOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKE9wYXF1ZUpTU3RyaW5nKToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIEpTQ1R5cGVkQXJyYXlTdHVicy5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS5vcmRlcjoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZUV4cG9ydHMuZGVmOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ou
ZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
RXhwb3J0R2VuZXJhdG9yL0phdmFTY3JpcHRDb3JlRXhwb3J0cy5kZWYuaW46CisgICAgICAgICog
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBLZXl3
b3JkTG9va3VwR2VuZXJhdG9yLnB5OgorICAgICAgICAoVHJpZS5wcmludFN1YlRyZWVBc0MpOgor
ICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5j
cHA6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6ZXhlY3V0YWJsZUNvcHkpOgorICAgICAg
ICAqIGFzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEFSTUFzc2VtYmxlcik6Cisg
ICAgICAgICogYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBc3Nl
bWJsZXJCdWZmZXI6OmV4ZWN1dGFibGVDb3B5KToKKyAgICAgICAgKiBhc3NlbWJsZXIvQXNzZW1i
bGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZm
ZXJXaXRoQ29uc3RhbnRQb29sOjpleGVjdXRhYmxlQ29weSk6CisgICAgICAgICogYXNzZW1ibGVy
L0xpbmtCdWZmZXIuY3BwOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpsaW5rQ29kZSk6Cisg
ICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChKU0M6OkxpbmtCdWZmZXI6OkxpbmtCdWZmZXIpOgorICAgICAgICAoTGlua0J1ZmZlcik6Cisg
ICAgICAgICogYXNzZW1ibGVyL01JUFNBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6TUlQU0Fz
c2VtYmxlcjo6ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAqIGFzc2VtYmxlci9TSDRBc3NlbWJs
ZXIuaDoKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpleGVjdXRhYmxlQ29weSk6CisgICAg
ICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJs
ZXI6OmV4ZWN1dGFibGVDb3B5KToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpYODZJbnN0
cnVjdGlvbkZvcm1hdHRlcjo6ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nh
bGxMaW5rSW5mby5jcHA6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dW5saW5rKToKKyAg
ICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uaDoKKyAgICAgICAgKENhbGxMaW5rSW5mbyk6
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6ZHVtcFN0
cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRTdHJ1Y3R1cmVzKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6On5Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0U3RydWN0dXJl
cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNyZWF0ZUFjdGl2YXRpb24pOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnVubGlua0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxp
bmtJbmNvbWluZ0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5kQ2xvc3VyZUNh
bGxGb3JSZXR1cm5QQyk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OmpldHRpc29u
SW1wbCk6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6OmpldHRpc29uSW1wbCk6CisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpqZXR0aXNvbkltcGwpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnByZWRpY3RlZE1hY2hpbmVDb2RlU2l6ZSk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6dXNlc09wY29kZSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6YXBwZW5kV2Vha1JlZmVyZW5jZSk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6YXBwZW5kV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnNldEpJVENvZGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNl
dEdsb2JhbERhdGEpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZtKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjp2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNl
dENvbnN0YW50UmVnaXN0ZXJzKToKKyAgICAgICAgKENvZGVCbG9jayk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb246OldlYWtSZWZlcmVuY2VUcmFuc2l0
aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9FdmFsQ29kZUNhY2hlLmg6CisgICAgICAgIChKU0M6
OkV2YWxDb2RlQ2FjaGU6OmdldFNsb3cpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0
dXMuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KToK
KyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvckNoYWluKToKKyAgICAgICAg
KEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvR2V0
QnlJZFN0YXR1cy5oOgorICAgICAgICAoR2V0QnlJZFN0YXR1cyk6CisgICAgICAgICogYnl0ZWNv
ZGUvSW5zdHJ1Y3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SW5zdHJ1Y3Rpb246Okluc3RydWN0aW9u
KToKKyAgICAgICAgKiBieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oOgorICAgICAg
ICAoSlNDOjpPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChK
U0M6Ok9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpwb3NzaWJsZURlZmF1bHRQcm9wZXJ0eUNvdW50
KToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaDoK
KyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0OjpQb2x5bW9ycGhp
Y1N0dWJJbmZvOjpzZXQpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3Q6OlBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCk6CisgICAgICAgICogYnl0ZWNv
ZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNz
Ojp0cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6cmVwbGFjZSk6Cisg
ICAgICAgICogYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmNwcDoKKyAgICAgICAgKEpTQzo6
Y29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0cyk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5jcHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQp
OgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBi
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoUHV0QnlJ
ZFN0YXR1cyk6CisgICAgICAgICogYnl0ZWNvZGUvUmVzb2x2ZUdsb2JhbFN0YXR1cy5jcHA6Cisg
ICAgICAgIChKU0M6OmNvbXB1dGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJ5dGVjb2RlL1Nh
bXBsaW5nVG9vbC5jcHA6CisgICAgICAgIChKU0M6OlNhbXBsaW5nVG9vbDo6bm90aWZ5T2ZTY29w
ZSk6CisgICAgICAgICogYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmg6CisgICAgICAgIChKU0M6OlNj
cmlwdFNhbXBsZVJlY29yZDo6U2NyaXB0U2FtcGxlUmVjb3JkKToKKyAgICAgICAgKFNhbXBsaW5n
VG9vbCk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRHZXRCeUlkU2VsZik6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0R2V0QnlJZFByb3RvKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlU3R1YkluZm86OmluaXRHZXRCeUlkQ2hhaW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU3R1YkluZm86OmluaXRQdXRCeUlkUmVwbGFjZSk6CisgICAgICAgICogYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUZ1bmN0aW9uQ29kZUJs
b2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGU6OmxpbmspOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
ZnJvbUdsb2JhbENvZGUpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6Y29kZUJsb2NrRm9yKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVubGlu
a2VkQ29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjphZGRSZWdFeHApOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9jazo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRk
RnVuY3Rpb25EZWNsKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZEZ1bmN0
aW9uRXhwcik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp2bSk6CisgICAgICAg
IChVbmxpbmtlZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OlVubGlua2VkR2xvYmFsQ29kZUJsb2NrOjpV
bmxpbmtlZEdsb2JhbENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlVubGlua2VkUHJvZ3JhbUNv
ZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
OjphZGRGdW5jdGlvbkRlY2xhcmF0aW9uKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrOjpVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZFByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkRXZhbENvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRFdmFs
Q29kZUJsb2NrOjpVbmxpbmtlZEV2YWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZEV2YWxDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2s6OlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjphZGRDb25zdGFudCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0TG9hZCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGlyZWN0UHV0
QnlJZCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRTdHJpbmdDb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpleHBlY3RlZEZ1bmN0aW9uRm9y
SWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VGhyb3dS
ZWZlcmVuY2VFcnJvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVh
ZE9ubHlFeGNlcHRpb25JZk5lZWRlZCk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmg6CisgICAgICAgIChCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjp2bSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
Ojpwcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6Om1ha2VG
dW5jdGlvbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAg
ICAgIChKU0M6OlJlZ0V4cE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFycmF5
Tm9kZTo6dG9Bcmd1bWVudExpc3QpOgorICAgICAgICAoSlNDOjpBcHBseUZ1bmN0aW9uQ2FsbERv
dE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZOb2RlOjplbWl0
Qnl0ZWNvZGUpOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6RGVidWdnZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6ZXZh
bHVhdGVJbkdsb2JhbENhbGxGcmFtZSk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuaDoK
KyAgICAgICAgKEpTQyk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJBY3RpdmF0aW9uOjpEZWJ1Z2dlckFjdGl2YXRpb24p
OgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckFjdGl2YXRpb246OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6RGVi
dWdnZXJBY3RpdmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckFjdGl2YXRp
b246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChEZWJ1Z2dlckFjdGl2YXRpb24pOgorICAg
ICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6RGVi
dWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHMp
OgorICAgICAgICAqIGRmZy9ERkdBc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpBc3NlbWJseUhlbHBlcnM6OkFzc2VtYmx5SGVscGVycyk6CisgICAgICAgIChKU0M6OkRGRzo6
QXNzZW1ibHlIZWxwZXJzOjp2bSk6CisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJz
OjpkZWJ1Z0NhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEV4
Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEFzc2VtYmx5SGVscGVycyk6CisgICAgICAgICogZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoQnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24p
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3Rh
Y2tFbnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJs
b2NrKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuaDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgICogZGZnL0RGR0NDYWxsSGVscGVycy5oOgorICAgICAgICAoSlNDOjpERkc6OkND
YWxsSGVscGVyczo6Q0NhbGxIZWxwZXJzKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYW5IYW5kbGVPcGNvZGVzKToKKyAgICAgICAgKiBk
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0
YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKiBkZmcvREZHRGlzYXNz
ZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEaXNhc3NlbWJsZXI6OnJlcG9ydFRvUHJv
ZmlsZXIpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuaDoKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVw
UGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6aXNTdHJp
bmdQcm90b3R5cGVNZXRob2RTYW5lKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpj
YW5PcHRpbWl6ZVN0cmluZ09iamVjdEFjY2Vzcyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6R3JhcGgpOgorICAgICAgICAqIGRmZy9ERkdH
cmFwaC5oOgorICAgICAgICAoR3JhcGgpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OkpJVENvbXBpbGVyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKToKKyAgICAgICAgKEpTQzo6
REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6
OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rp
b24pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVP
U1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAg
ICogZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpP
U1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENv
bXBpbGVyNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRDb21waWxlcjo6Y29tcGls
ZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpwdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6b3BlcmF0aW9uUHV0QnlWYWxJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRl
KToKKyAgICAgICAgKiBkZmcvREZHUGhhc2UuaDoKKyAgICAgICAgKEpTQzo6REZHOjpQaGFzZTo6
dm0pOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpn
ZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDYWNo
ZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRExpc3QpOgorICAg
ICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6
OkRGRzo6ZW1pdFB1dFJlcGxhY2VTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjplbWl0UHV0VHJh
bnNpdGlvblN0dWIpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUNhY2hlUHV0QnlJRCk6CisgICAg
ICAgIChKU0M6OkRGRzo6dHJ5QnVpbGRQdXRCeUlkTGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6
bGlua1Nsb3dGb3IpOgorICAgICAgICAoSlNDOjpERkc6OmRmZ0xpbmtGb3IpOgorICAgICAgICAo
SlNDOjpERkc6OmRmZ0xpbmtTbG93Rm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpkZmdMaW5rQ2xv
c3VyZUNhbGwpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnR5cGVkQXJyYXlEZXNjcmlwdG9yKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxp
dHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxP
blN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVGcm9t
Q2hhckNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTWFr
ZVJvcGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaW5n
RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9T
dHJpbmdPbkNlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGVPYmplY3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVP
YmplY3RPck90aGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRl
U3RyaW5nT3JTdHJpbmdPYmplY3QpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpwcmVwYXJlRm9yRXh0ZXJuYWxD
YWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlQmFz
aWNTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9j
YXRlSlNPYmplY3QpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2Jq
ZWN0T3JPdGhlckVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJy
YW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0
VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdUaHVua3Mu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpERkc6OnRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6c2xvd1BhdGhGb3IpOgorICAgICAgICAoSlNDOjpE
Rkc6OmxpbmtGb3JUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6bGlua0NhbGxU
aHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6bGlua0NvbnN0cnVjdFRodW5rR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkRGRzo6dmlydHVhbEZvclRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6REZHOjp2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
REZHOjp2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGRmZy9ERkdU
aHVua3MuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGhlYXAv
QmxvY2tBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaGVhcC9Db3BpZWRT
cGFjZS5jcHA6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZVNsb3dDYXNl
KToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OnRyeVJlYWxsb2NhdGUpOgorICAgICAgICAq
IGhlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjp0
cnlBbGxvY2F0ZSk6CisgICAgICAgICogaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwOgorICAg
ICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERhdGE6OkdDVGhyZWFkU2hhcmVkRGF0YSk6CisgICAg
ICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6cmVzZXQpOgorICAgICAgICAqIGhlYXAvR0NU
aHJlYWRTaGFyZWREYXRhLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoR0NUaHJlYWRTaGFy
ZWREYXRhKToKKyAgICAgICAgKiBoZWFwL0hhbmRsZVNldC5jcHA6CisgICAgICAgIChKU0M6Okhh
bmRsZVNldDo6SGFuZGxlU2V0KToKKyAgICAgICAgKEpTQzo6SGFuZGxlU2V0Ojp+SGFuZGxlU2V0
KToKKyAgICAgICAgKEpTQzo6SGFuZGxlU2V0Ojpncm93KToKKyAgICAgICAgKiBoZWFwL0hhbmRs
ZVNldC5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEhhbmRsZVNldCk6CisgICAgICAgIChK
U0M6OkhhbmRsZVNldDo6dm0pOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChK
U0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bGFz
dENoYW5jZVRvRmluYWxpemUpOgorICAgICAgICAoSlNDOjpIZWFwOjpwcm90ZWN0KToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6dW5wcm90ZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6c3RhY2spOgor
ICAgICAgICAoSlNDOjpIZWFwOjpnZXRDb25zZXJ2YXRpdmVSZWdpc3RlclJvb3RzKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVsZXRlQWxs
Q29tcGlsZWRDb2RlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdCk6CisgICAgICAgIChK
U0M6OkhlYXA6OmlzVmFsaWRBbGxvY2F0aW9uKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dm0pOgor
ICAgICAgICAqIGhlYXAvSGVhcFRpbWVyLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcFRpbWVyOjpI
ZWFwVGltZXIpOgorICAgICAgICAoSlNDOjpIZWFwVGltZXI6OnRpbWVyRGlkRmlyZSk6CisgICAg
ICAgIChKU0M6OkhlYXBUaW1lcjo6dGltZXJFdmVudCk6CisgICAgICAgICogaGVhcC9IZWFwVGlt
ZXIuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChIZWFwVGltZXIpOgorICAgICAgICAqIGhl
YXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2Vl
cGVyOjpJbmNyZW1lbnRhbFN3ZWVwZXIpOgorICAgICAgICAoSlNDOjpJbmNyZW1lbnRhbFN3ZWVw
ZXI6OnN3ZWVwTmV4dEJsb2NrKToKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjp3
aWxsRmluaXNoU3dlZXBpbmcpOgorICAgICAgICAoSlNDOjpJbmNyZW1lbnRhbFN3ZWVwZXI6OmNy
ZWF0ZSk6CisgICAgICAgICogaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaDoKKyAgICAgICAgKElu
Y3JlbWVudGFsU3dlZXBlcik6CisgICAgICAgICogaGVhcC9Mb2NhbC5oOgorICAgICAgICAoTG9j
YWwpOgorICAgICAgICAoSlNDOjo6OkxvY2FsKToKKyAgICAgICAgKEpTQzo6TG9jYWxTdGFjazo6
TG9jYWxTdGFjayk6CisgICAgICAgIChKU0M6OkxvY2FsU3RhY2s6OnB1c2gpOgorICAgICAgICAo
TG9jYWxTdGFjayk6CisgICAgICAgICogaGVhcC9Mb2NhbFNjb3BlLmg6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoTG9jYWxTY29wZSk6CisgICAgICAgIChKU0M6OkxvY2FsU2NvcGU6OkxvY2Fs
U2NvcGUpOgorICAgICAgICAqIGhlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcDoKKyAgICAgICAg
KEpTQzo6TWFjaGluZVRocmVhZHM6OmFkZEN1cnJlbnRUaHJlYWQpOgorICAgICAgICAqIGhlYXAv
TWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjphbGxv
Y2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmNwcDoKKyAgICAgICAg
KEpTQzo6TWFya2VkQmxvY2s6Ok1hcmtlZEJsb2NrKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJs
b2NrLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjp2bSk6CisgICAgICAgICogaGVhcC9T
bG90VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcik6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpzZXR1cCk6CisgICAgICAgICogaGVhcC9TdHJv
bmcuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChTdHJvbmcpOgorICAgICAgICAoSlNDOjpT
dHJvbmc6Om9wZXJhdG9yPSk6CisgICAgICAgICogaGVhcC9TdHJvbmdJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6Ojo6U3Ryb25nKToKKyAgICAgICAgKEpTQzo6OjpzZXQpOgorICAgICAgICAqIGhl
YXAvU3VwZXJSZWdpb24uaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaGVhcC9XZWFrU2V0
LmNwcDoKKyAgICAgICAgKiBoZWFwL1dlYWtTZXQuaDoKKyAgICAgICAgKFdlYWtTZXQpOgorICAg
ICAgICAoSlNDOjpXZWFrU2V0OjpXZWFrU2V0KToKKyAgICAgICAgKEpTQzo6V2Vha1NldDo6dm0p
OgorICAgICAgICAqIGludGVycHJldGVyL0Fic3RyYWN0UEMuY3BwOgorICAgICAgICAoSlNDOjpB
YnN0cmFjdFBDOjpBYnN0cmFjdFBDKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9BYnN0cmFjdFBD
Lmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoQWJzdHJhY3RQQyk6CisgICAgICAgICogaW50
ZXJwcmV0ZXIvQ2FjaGVkQ2FsbC5oOgorICAgICAgICAoSlNDOjpDYWNoZWRDYWxsOjpDYWNoZWRD
YWxsKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEV4ZWNT
dGF0ZSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6Y2xlYXJFeGNlcHRpb24pOgorICAgICAg
ICAoSlNDOjpFeGVjU3RhdGU6OmNsZWFyU3VwcGxlbWVudGFyeUV4Y2VwdGlvbkluZm8pOgorICAg
ICAgICAoSlNDOjpFeGVjU3RhdGU6OmV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0
ZTo6aGFkRXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpwcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjplbXB0eUxpc3QpOgorICAgICAgICAoSlNDOjpF
eGVjU3RhdGU6OmludGVycHJldGVyKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpoZWFwKToK
KyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjphcnJheUNvbnN0cnVjdG9yVGFibGUpOgorICAgICAg
ICAoSlNDOjpFeGVjU3RhdGU6OmFycmF5UHJvdG90eXBlVGFibGUpOgorICAgICAgICAoSlNDOjpF
eGVjU3RhdGU6OmJvb2xlYW5Qcm90b3R5cGVUYWJsZSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0
ZTo6ZGF0ZVRhYmxlKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpkYXRlQ29uc3RydWN0b3JU
YWJsZSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6ZXJyb3JQcm90b3R5cGVUYWJsZSk6Cisg
ICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6Z2xvYmFsT2JqZWN0VGFibGUpOgorICAgICAgICAoSlND
OjpFeGVjU3RhdGU6Ompzb25UYWJsZSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6bWF0aFRh
YmxlKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpudW1iZXJDb25zdHJ1Y3RvclRhYmxlKToK
KyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpudW1iZXJQcm90b3R5cGVUYWJsZSk6CisgICAgICAg
IChKU0M6OkV4ZWNTdGF0ZTo6b2JqZWN0Q29uc3RydWN0b3JUYWJsZSk6CisgICAgICAgIChKU0M6
OkV4ZWNTdGF0ZTo6cHJpdmF0ZU5hbWVQcm90b3R5cGVUYWJsZSk6CisgICAgICAgIChKU0M6OkV4
ZWNTdGF0ZTo6cmVnRXhwVGFibGUpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnJlZ0V4cENv
bnN0cnVjdG9yVGFibGUpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnJlZ0V4cFByb3RvdHlw
ZVRhYmxlKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpzdHJpbmdDb25zdHJ1Y3RvclRhYmxl
KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjphYnN0cmFjdFJldHVyblBDKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWVDbG9zdXJlLmg6CisgICAgICAgIChDYWxsRnJhbWVDbG9z
dXJlKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChK
U0MpOgorICAgICAgICAoSlNDOjpldmFsKToKKyAgICAgICAgKEpTQzo6bG9hZFZhcmFyZ3MpOgor
ICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIpOgorICAgICAgICAoSlNDOjpJ
bnRlcnByZXRlcjo6ZHVtcFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjp1
bndpbmRDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjphcHBlbmRTb3VyY2VUb0Vycm9yKToKKyAg
ICAgICAgKEpTQzo6Z2V0Q2FsbGVySW5mbyk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpn
ZXRTdGFja1RyYWNlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmFkZFN0YWNrVHJhY2VJ
Zk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjp0aHJvd0V4Y2VwdGlvbik6
CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6SW50
ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1
dGVDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cHJlcGFyZUZvclJlcGVh
dENhbGwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cmV0cmlldmVBcmd1bWVudHNGcm9t
Vk1Db2RlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJldHJpZXZlQ2FsbGVyRnJvbVZN
Q29kZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEpT
Qyk6CisgICAgICAgIChKU0M6OlRvcENhbGxGcmFtZVNldHRlcjo6VG9wQ2FsbEZyYW1lU2V0dGVy
KToKKyAgICAgICAgKEpTQzo6VG9wQ2FsbEZyYW1lU2V0dGVyOjp+VG9wQ2FsbEZyYW1lU2V0dGVy
KToKKyAgICAgICAgKFRvcENhbGxGcmFtZVNldHRlcik6CisgICAgICAgIChKU0M6Ok5hdGl2ZUNh
bGxGcmFtZVRyYWNlcjo6TmF0aXZlQ2FsbEZyYW1lVHJhY2VyKToKKyAgICAgICAgKEludGVycHJl
dGVyKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9KU1N0YWNrLmNwcDoKKyAgICAgICAgKEpTQzo6
SlNTdGFjazo6SlNTdGFjayk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSlNTdGFjay5oOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBqaXQvQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHA6Cisg
ICAgICAgIChKU0M6OkNsb3N1cmVDYWxsU3R1YlJvdXRpbmU6OkNsb3N1cmVDYWxsU3R1YlJvdXRp
bmUpOgorICAgICAgICAqIGppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmg6CisgICAgICAgIChD
bG9zdXJlQ2FsbFN0dWJSb3V0aW5lKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OkV4ZWN1dGFibGVBbGxv
Y2F0b3IpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZSk6Cisg
ICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChFeGVjdXRhYmxlQWxsb2NhdG9yKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9j
YXRvckZpeGVkVk1Qb29sLmNwcDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6
RXhlY3V0YWJsZUFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6
OmFsbG9jYXRlKToKKyAgICAgICAgKiBqaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcDoKKyAg
ICAgICAgKEpTQzo6R0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmUp
OgorICAgICAgICAoSlNDOjpNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aE9uZU9iamVj
dDo6TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3QpOgorICAgICAgICAo
SlNDOjpjcmVhdGVKSVRTdHViUm91dGluZSk6CisgICAgICAgICogaml0L0dDQXdhcmVKSVRTdHVi
Um91dGluZS5oOgorICAgICAgICAoR0NBd2FyZUpJVFN0dWJSb3V0aW5lKToKKyAgICAgICAgKE1h
cmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoT25lT2JqZWN0KToKKyAgICAgICAgKEpTQyk6
CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6SklUKToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6bGlua0Zv
cik6CisgICAgICAgIChKU0M6OkpJVDo6bGlua1Nsb3dDYWxsKToKKyAgICAgICAgKiBqaXQvSklU
Lmg6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZUNsb3N1cmVDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZFByb3Rv
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZFNlbGZMaXN0KToKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6
Y29tcGlsZUdldEJ5SWRDaGFpbkxpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVHZXRC
eUlkQ2hhaW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6
CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDVElOYXRpdmVD
YWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCk6Cisg
ICAgICAgIChKSVQpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxs
RXZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2Up
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlQ2xvc3VyZUNhbGwpOgorICAgICAg
ICAqIGppdC9KSVRDYWxsMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVMb2Fk
VmFyYXJncyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2FsbCk6CisgICAgICAgICogaml0L0pJVENvZGUu
aDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpJVENvZGU6OmV4ZWN1dGUpOgorICAg
ICAgICAqIGppdC9KSVREcml2ZXIuaDoKKyAgICAgICAgKEpTQzo6aml0Q29tcGlsZUlmQXBwcm9w
cmlhdGUpOgorICAgICAgICAoSlNDOjpqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKToK
KyAgICAgICAgKiBqaXQvSklURXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyaWNU
aHJvdyk6CisgICAgICAgIChKU0M6OmppdFRocm93KToKKyAgICAgICAgKiBqaXQvSklURXhjZXB0
aW9ucy5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKToKKyAgICAgICAgKEpTQzo6
SklUOjp1cGRhdGVUb3BDYWxsRnJhbWUpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90b19wcmltaXRpdmUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY29udmVydF90aGlzKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9jb252ZXJ0X3RoaXMpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2Fs
bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25lcSk6CisgICAgICAg
IChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfY2F0Y2gpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY29udmVydF90aGlzKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jb252ZXJ0X3RoaXMpOgorICAgICAgICAqIGpp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6c3RyaW5nR2V0QnlW
YWxTdHViR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlf
dmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCk6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8pOgorICAgICAgICAoSlNDOjpKSVQ6
OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlJZENoYWluTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVHZXRCeUlkQ2hhaW4pOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlW
YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwpOgorICAgICAg
ICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpz
dHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVHZXRCeUlkSG90UGF0
aCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6
CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6CisgICAgICAg
IChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoK
KyAgICAgICAgKEpTQzo6Y3RpVHJhbXBvbGluZSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpwZXJmb3JtUGxhdGZvcm1TcGVjaWZpY0pJVEFzc2VydGlvbnMpOgorICAgICAgICAoSlND
Ojp0cnlDYWNoZVB1dEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgorICAg
ICAgICAoSlNDOjpyZXR1cm5Ub1Rocm93VHJhbXBvbGluZSk6CisgICAgICAgIChKU0M6OnRocm93
RXhjZXB0aW9uRnJvbU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9O
KToKKyAgICAgICAgKEpTQzo6Z2V0UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U2xvdCk6
CisgICAgICAgIChKU0M6OmppdENvbXBpbGVGb3IpOgorICAgICAgICAoSlNDOjpsYXp5TGlua0Zv
cik6CisgICAgICAgIChKU0M6OnB1dEJ5VmFsKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuaDoK
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChKSVRTdGFja0ZyYW1lKToKKyAgICAgICAgKiBqaXQv
SklUVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlOYXRpdmVDYWxsKToK
KyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlOYXRpdmVDb25zdHJ1Y3QpOgorICAgICAgICAo
SlNDOjpKSVRUaHVua3M6OmN0aVN0dWIpOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6Omhvc3RG
dW5jdGlvblN0dWIpOgorICAgICAgICAqIGppdC9KSVRUaHVua3MuaDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgIChKSVRUaHVua3MpOgorICAgICAgICAqIGppdC9KSVRXcml0ZUJhcnJpZXIuaDoK
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpJVFdyaXRlQmFycmllckJhc2U6OnNldCk6
CisgICAgICAgIChKU0M6OkpJVFdyaXRlQmFycmllcjo6c2V0KToKKyAgICAgICAgKiBqaXQvU3Bl
Y2lhbGl6ZWRUaHVua0pJVC5oOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjps
b2FkSlNTdHJpbmdBcmd1bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6
OmZpbmFsaXplKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpT
Qyk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6Omdl
bmVyYXRlU2xvd0Nhc2VGb3IpOgorICAgICAgICAoSlNDOjpsaW5rRm9yR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6bGlua0NhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ29uc3Ry
dWN0R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bGlua0Nsb3N1cmVDYWxsR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6dmlydHVhbEZvckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1
YWxDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6dmlydHVhbENvbnN0cnVjdEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OnN0cmluZ0xlbmd0aFRyYW1wb2xpbmVHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpuYXRpdmVGb3JHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpuYXRpdmVDYWxs
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6c3RyaW5nQ2hhckxvYWQpOgorICAgICAgICAoSlNDOjpjaGFyVG9TdHJpbmcp
OgorICAgICAgICAoSlNDOjpjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpjaGFyQXRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmZyb21DaGFyQ29kZVRodW5r
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6c3FydFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6Zmxvb3JUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmNlaWxUaHVua0dlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OnJvdW5kVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpleHBUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmxvZ1RodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6YWJzVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpwb3dUaHVu
a0dlbmVyYXRvcik6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5oOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0KToKKyAgICAg
ICAgKEdsb2JhbE9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoR2xvYmFsT2JqZWN0OjphZGRGdW5jdGlvbik6CisgICAgICAgIChHbG9iYWxPYmplY3Q6
OmFkZENvbnN0cnVjdGFibGVGdW5jdGlvbik6CisgICAgICAgIChmdW5jdGlvbkR1bXBDYWxsRnJh
bWUpOgorICAgICAgICAoZnVuY3Rpb25KU0NTdGFjayk6CisgICAgICAgIChmdW5jdGlvblJlbGVh
c2VFeGVjdXRhYmxlTWVtb3J5KToKKyAgICAgICAgKGZ1bmN0aW9uUnVuKToKKyAgICAgICAgKG1h
aW4pOgorICAgICAgICAocnVuV2l0aFNjcmlwdHMpOgorICAgICAgICAoanNjbWFpbik6CisgICAg
ICAgICogbGxpbnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkRhdGE6OnBl
cmZvcm1Bc3NlcnRpb25zKToKKyAgICAgICAgKiBsbGludC9MTEludERhdGEuaDoKKyAgICAgICAg
KEpTQyk6CisgICAgICAgIChEYXRhKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OkRhdGE6OnBlcmZv
cm1Bc3NlcnRpb25zKToKKyAgICAgICAgKiBsbGludC9MTEludEVudHJ5cG9pbnRzLmNwcDoKKyAg
ICAgICAgKEpTQzo6TExJbnQ6OmdldEZ1bmN0aW9uRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6
OkxMSW50OjpnZXRFdmFsRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRQcm9n
cmFtRW50cnlwb2ludCk6CisgICAgICAgICogbGxpbnQvTExJbnRFbnRyeXBvaW50cy5oOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKExMSW50KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldEVu
dHJ5cG9pbnQpOgorICAgICAgICAqIGxsaW50L0xMSW50RXhjZXB0aW9ucy5jcHA6CisgICAgICAg
IChKU0M6OkxMSW50OjppbnRlcnByZXRlclRocm93SW5DYWxsZXIpOgorICAgICAgICAoSlNDOjpM
TEludDo6cmV0dXJuVG9UaHJvdyk6CisgICAgICAgIChKU0M6OkxMSW50OjpjYWxsVG9UaHJvdyk6
CisgICAgICAgICogbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcDoKKyAgICAgICAgKiBs
bGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChMTEludCk6CisgICAgICAgIChKU0M6
OkxMSW50OjpsbGludF90cmFjZV9vcGVyYW5kKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmxsaW50
X3RyYWNlX3ZhbHVlKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNM
KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNob3VsZEpJVCk6CisgICAgICAgIChKU0M6OkxMSW50
OjpoYW5kbGVIb3N0Q2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpzZXRVcENhbGwpOgorICAg
ICAgICAqIGxsaW50L0xMSW50VGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdlbmVy
YXRlVGh1bmtXaXRoSnVtcFRvKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmZ1bmN0aW9uRm9yQ2Fs
bEVudHJ5VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpMTEludDo6ZnVuY3Rpb25Gb3JD
b25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmZ1bmN0
aW9uRm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkxMSW50
OjpmdW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OkxMSW50OjpldmFsRW50cnlUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkxM
SW50Ojpwcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcik6CisgICAgICAgICogbGxpbnQvTExJbnRU
aHVua3MuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChMTEludCk6CisgICAgICAgICogbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkNMb29wOjpleGVjdXRlKToKKyAgICAgICAgKiBs
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogb2ZmbGluZWFzbS9jbG9vcC5yYjoKKyAg
ICAgICAgKiBwYXJzZXIvQVNUQnVpbGRlci5oOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpB
U1RCdWlsZGVyKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlU291cmNlRWxlbWVu
dHMpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVDb21tYUV4cHIpOgorICAgICAg
ICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6QVNU
QnVpbGRlcjo6Y3JlYXRlVW5hcnlQbHVzKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3Jl
YXRlVm9pZCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OnRoaXNFeHByKToKKyAgICAgICAg
KEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlUmVzb2x2ZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxk
ZXI6OmNyZWF0ZU9iamVjdExpdGVyYWwpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVh
dGVBcnJheSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZU51bWJlckV4cHIpOgor
ICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpB
U1RCdWlsZGVyOjpjcmVhdGVCb29sZWFuKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3Jl
YXRlTnVsbCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUJyYWNrZXRBY2Nlc3Mp
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVEb3RBY2Nlc3MpOgorICAgICAgICAo
SlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVSZWdFeHApOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjpjcmVhdGVOZXdFeHByKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQ29uZGl0
aW9uYWxFeHByKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQXNzaWduUmVzb2x2
ZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUZ1bmN0aW9uRXhwcik6CisgICAg
ICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUZ1bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6
OkFTVEJ1aWxkZXI6OmNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkpOgorICAgICAgICAoSlND
OjpBU1RCdWlsZGVyOjpjcmVhdGVBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjpjcmVhdGVBcmd1bWVudHNMaXN0KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRl
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVQcm9wZXJ0eUxpc3Qp
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVFbGVtZW50TGlzdCk6CisgICAgICAg
IChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUZvcm1hbFBhcmFtZXRlckxpc3QpOgorICAgICAgICAo
SlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVDbGF1c2UpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjpjcmVhdGVDbGF1c2VMaXN0KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRnVu
Y0RlY2xTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVCbG9ja1N0
YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUV4cHJTdGF0ZW1lbnQp
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVJZlN0YXRlbWVudCk6CisgICAgICAg
IChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUZvckxvb3ApOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjpjcmVhdGVGb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVF
bXB0eVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVZhclN0YXRl
bWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVJldHVyblN0YXRlbWVudCk6
CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUJyZWFrU3RhdGVtZW50KToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQ29udGludWVTdGF0ZW1lbnQpOgorICAgICAgICAo
SlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVUcnlTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RC
dWlsZGVyOjpjcmVhdGVTd2l0Y2hTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjpjcmVhdGVXaGlsZVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0
ZURvV2hpbGVTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVMYWJl
bFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVdpdGhTdGF0ZW1l
bnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVUaHJvd1N0YXRlbWVudCk6Cisg
ICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZURlYnVnZ2VyKToKKyAgICAgICAgKEpTQzo6
QVNUQnVpbGRlcjo6Y3JlYXRlQ29uc3RTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjphcHBlbmRDb25zdERlY2wpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjphZGRWYXIp
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjb21iaW5lQ29tbWFOb2Rlcyk6CisgICAgICAg
IChKU0M6OkFTVEJ1aWxkZXI6OlNjb3BlOjpTY29wZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxk
ZXI6OmNyZWF0ZU51bWJlcik6CisgICAgICAgIChBU1RCdWlsZGVyKToKKyAgICAgICAgKEpTQzo6
QVNUQnVpbGRlcjo6bWFrZVR5cGVPZk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpt
YWtlRGVsZXRlTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VOZWdhdGVOb2Rl
KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUJpdHdpc2VOb3ROb2RlKToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZU11bHROb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVp
bGRlcjo6bWFrZURpdk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlTW9kTm9k
ZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VBZGROb2RlKToKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6bWFrZVN1Yk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpt
YWtlTGVmdFNoaWZ0Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VSaWdodFNo
aWZ0Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VVUmlnaHRTaGlmdE5vZGUp
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlQml0T3JOb2RlKToKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6bWFrZUJpdEFuZE5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjptYWtlQml0WE9yTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlv
bkNhbGxOb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUJpbmFyeU5vZGUpOgor
ICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlQXNzaWduTm9kZSk6CisgICAgICAgIChKU0M6
OkFTVEJ1aWxkZXI6Om1ha2VQcmVmaXhOb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6
bWFrZVBvc3RmaXhOb2RlKToKKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuY3BwOgorICAgICAgICAo
SlNDOjpLZXl3b3Jkczo6S2V5d29yZHMpOgorICAgICAgICAoSlNDOjo6OkxleGVyKToKKyAgICAg
ICAgKEpTQzo6OjpwYXJzZUlkZW50aWZpZXIpOgorICAgICAgICAoSlNDOjo6OnBhcnNlSWRlbnRp
ZmllclNsb3dDYXNlKToKKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuaDoKKyAgICAgICAgKEpTQzo6
S2V5d29yZHM6OmlzS2V5d29yZCk6CisgICAgICAgIChKU0M6OktleXdvcmRzOjpnZXRLZXl3b3Jk
KToKKyAgICAgICAgKEtleXdvcmRzKToKKyAgICAgICAgKExleGVyKToKKyAgICAgICAgKEpTQzo6
OjptYWtlSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6Ojo6bWFrZVJpZ2h0U2l6ZWRJZGVudGlm
aWVyKToKKyAgICAgICAgKEpTQzo6OjptYWtlSWRlbnRpZmllckxDaGFyRnJvbVVDaGFyKToKKyAg
ICAgICAgKEpTQzo6OjptYWtlTENoYXJJZGVudGlmaWVyKToKKyAgICAgICAgKiBwYXJzZXIvTm9k
ZUNvbnN0cnVjdG9ycy5oOgorICAgICAgICAoSlNDOjpQYXJzZXJBcmVuYUZyZWVhYmxlOjpvcGVy
YXRvciBuZXcpOgorICAgICAgICAoSlNDOjpQYXJzZXJBcmVuYURlbGV0YWJsZTo6b3BlcmF0b3Ig
bmV3KToKKyAgICAgICAgKEpTQzo6UGFyc2VyQXJlbmFSZWZDb3VudGVkOjpQYXJzZXJBcmVuYVJl
ZkNvdW50ZWQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5vZGU6OlByb3BlcnR5Tm9kZSk6Cisg
ICAgICAgIChKU0M6OkNvbnRpbnVlTm9kZTo6Q29udGludWVOb2RlKToKKyAgICAgICAgKEpTQzo6
QnJlYWtOb2RlOjpCcmVha05vZGUpOgorICAgICAgICAoSlNDOjpGb3JJbk5vZGU6OkZvckluTm9k
ZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6U2NvcGVOb2Rl
OjpTY29wZU5vZGUpOgorICAgICAgICAoSlNDOjpQcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUpOgor
ICAgICAgICAoSlNDOjpQcm9ncmFtTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RXZhbE5v
ZGU6OkV2YWxOb2RlKToKKyAgICAgICAgKEpTQzo6RXZhbE5vZGU6OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUpOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUpOgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5oOgor
ICAgICAgICAoUGFyc2VyQXJlbmFGcmVlYWJsZSk6CisgICAgICAgIChQYXJzZXJBcmVuYURlbGV0
YWJsZSk6CisgICAgICAgIChQYXJzZXJBcmVuYVJlZkNvdW50ZWQpOgorICAgICAgICAoQXJyYXlO
b2RlKToKKyAgICAgICAgKEZvckluTm9kZSk6CisgICAgICAgIChDb250aW51ZU5vZGUpOgorICAg
ICAgICAoQnJlYWtOb2RlKToKKyAgICAgICAgKFNjb3BlTm9kZSk6CisgICAgICAgIChQcm9ncmFt
Tm9kZSk6CisgICAgICAgIChFdmFsTm9kZSk6CisgICAgICAgIChGdW5jdGlvbkJvZHlOb2RlKToK
KyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6OjpQYXJzZXIpOgor
ICAgICAgICAoSlNDOjo6OnBhcnNlSW5uZXIpOgorICAgICAgICAoSlNDOjo6OnBhcnNlU291cmNl
RWxlbWVudHMpOgorICAgICAgICAoSlNDOjo6OnBhcnNlVHJ5U3RhdGVtZW50KToKKyAgICAgICAg
KEpTQzo6OjpwYXJzZUZ1bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VGdW5jdGlv
bkluZm8pOgorICAgICAgICAoSlNDOjo6OnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOgorICAg
ICAgICAoSlNDOjo6OnBhcnNlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjo6OnBhcnNlUHJpbWFy
eUV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjo6OnBhcnNlTWVtYmVyRXhwcmVzc2lvbik6Cisg
ICAgICAgIChKU0M6Ojo6cGFyc2VVbmFyeUV4cHJlc3Npb24pOgorICAgICAgICAqIHBhcnNlci9Q
YXJzZXIuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OlNjb3BlOjpTY29wZSk6Cisg
ICAgICAgIChKU0M6OlNjb3BlOjpkZWNsYXJlVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpTY29w
ZTo6ZGVjbGFyZVBhcmFtZXRlcik6CisgICAgICAgIChTY29wZSk6CisgICAgICAgIChQYXJzZXIp
OgorICAgICAgICAoSlNDOjpQYXJzZXI6OnB1c2hTY29wZSk6CisgICAgICAgIChKU0M6Ojo6cGFy
c2UpOgorICAgICAgICAoSlNDOjpwYXJzZSk6CisgICAgICAgICogcGFyc2VyL1BhcnNlckFyZW5h
Lmg6CisgICAgICAgIChJZGVudGlmaWVyQXJlbmEpOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVy
QXJlbmE6Om1ha2VJZGVudGlmaWVyKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllckFyZW5hOjpt
YWtlSWRlbnRpZmllckxDaGFyRnJvbVVDaGFyKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllckFy
ZW5hOjptYWtlTnVtZXJpY0lkZW50aWZpZXIpOgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVj
a2VyLmg6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OlN5bnRheENoZWNrZXIpOgorICAg
ICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6
OlN5bnRheENoZWNrZXI6OmNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkpOgorICAgICAgICAq
IHByb2ZpbGVyL0xlZ2FjeVByb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6TGVnYWN5UHJvZmls
ZXI6OnN0YXJ0UHJvZmlsaW5nKToKKyAgICAgICAgKEpTQzo6TGVnYWN5UHJvZmlsZXI6OnN0b3BQ
cm9maWxpbmcpOgorICAgICAgICAqIHByb2ZpbGVyL0xlZ2FjeVByb2ZpbGVyLmg6CisgICAgICAg
IChKU0MpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGUuY3BwOgorICAgICAg
ICAoSlNDOjpQcm9maWxlcjo6Qnl0ZWNvZGU6OnRvSlMpOgorICAgICAgICAqIHByb2ZpbGVyL1By
b2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpCeXRl
Y29kZVNlcXVlbmNlOjpCeXRlY29kZVNlcXVlbmNlKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6
OkJ5dGVjb2RlU2VxdWVuY2U6OmFkZFNlcXVlbmNlUHJvcGVydGllcyk6CisgICAgICAgICogcHJv
ZmlsZXIvUHJvZmlsZXJCeXRlY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6Qnl0
ZWNvZGVzOjp0b0pTKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OkNvbXBpbGF0aW9uOjp0b0pTKToKKyAgICAgICAg
KiBwcm9maWxlci9Qcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuY3BwOgorICAgICAgICAoSlNDOjpQ
cm9maWxlcjo6Q29tcGlsZWRCeXRlY29kZTo6dG9KUyk6CisgICAgICAgICogcHJvZmlsZXIvUHJv
ZmlsZXJEYXRhYmFzZS5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpEYXRhYmFzZTo6RGF0
YWJhc2UpOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6RGF0YWJhc2U6OnRvSlMpOgorICAgICAg
ICAoSlNDOjpQcm9maWxlcjo6RGF0YWJhc2U6OnRvSlNPTik6CisgICAgICAgICogcHJvZmlsZXIv
UHJvZmlsZXJEYXRhYmFzZS5oOgorICAgICAgICAoRGF0YWJhc2UpOgorICAgICAgICAqIHByb2Zp
bGVyL1Byb2ZpbGVyT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpPU1JFeGl0
Ojp0b0pTKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlck9yaWdpbi5jcHA6CisgICAgICAg
IChKU0M6OlByb2ZpbGVyOjpPcmlnaW46OnRvSlMpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2Zp
bGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6UHJvZmls
ZWRCeXRlY29kZXM6OnRvSlMpOgorICAgICAgICAqIHJ1bnRpbWUvQXJnTGlzdC5oOgorICAgICAg
ICAoTWFya2VkQXJndW1lbnRCdWZmZXIpOgorICAgICAgICAqIHJ1bnRpbWUvQXJndW1lbnRzLmNw
cDoKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpwdXRCeUluZGV4KToKKyAgICAgICAgKEpTQzo6
QXJndW1lbnRzOjpwdXQpOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAg
IChKU0M6OkFyZ3VtZW50czo6dGVhck9mZik6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6ZGlk
VGVhck9mZkFjdGl2YXRpb24pOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OnRlYXJPZmZGb3JJ
bmxpbmVDYWxsRnJhbWUpOgorICAgICAgICAqIHJ1bnRpbWUvQXJndW1lbnRzLmg6CisgICAgICAg
IChKU0M6OkFyZ3VtZW50czo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpjcmVh
dGVTdHJ1Y3R1cmUpOgorICAgICAgICAoQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6QXJndW1l
bnRzOjpBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OnRyeVNldEFyZ3VtZW50
KToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICog
cnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlDb25zdHJ1
Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rv
ci5oOgorICAgICAgICAoSlNDOjpBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgor
ICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpBcnJh
eVByb3RvdHlwZTo6QXJyYXlQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpBcnJheVByb3RvdHlw
ZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvcnQpOgor
ICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NwbGljZSk6CisgICAgICAgICogcnVudGltZS9B
cnJheVByb3RvdHlwZS5oOgorICAgICAgICAoSlNDOjpBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0JhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmg6
CisgICAgICAgIChKU0M6OkJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyOjpCYXRjaGVkVHJhbnNp
dGlvbk9wdGltaXplcik6CisgICAgICAgIChKU0M6OkJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVy
Ojp+QmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIpOgorICAgICAgICAoQmF0Y2hlZFRyYW5zaXRp
b25PcHRpbWl6ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Qm9vbGVhbkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgIChKU0M6OmNvbnN0cnVjdEJvb2xlYW4pOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RCb29s
ZWFuRnJvbUltbWVkaWF0ZUJvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhbkNvbnN0
cnVjdG9yLmg6CisgICAgICAgIChKU0M6OkJvb2xlYW5Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5PYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpCb29sZWFuT2JqZWN0OjpCb29sZWFuT2JqZWN0KToKKyAgICAgICAgKEpTQzo6Qm9vbGVhbk9i
amVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhbk9iamVjdC5o
OgorICAgICAgICAoQm9vbGVhbk9iamVjdCk6CisgICAgICAgIChKU0M6OkJvb2xlYW5PYmplY3Q6
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkJvb2xlYW5PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgICogcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6
Qm9vbGVhblByb3RvdHlwZTo6Qm9vbGVhblByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OkJvb2xl
YW5Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Ym9vbGVhblByb3Rv
RnVuY1RvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuaDoKKyAg
ICAgICAgKEpTQzo6Qm9vbGVhblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KiBydW50aW1lL0J1dHRlcmZseS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEJ1dHRlcmZs
eSk6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmg6CisgICAgICAgIChKU0M6
OkJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZs
eTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodCk6CisgICAgICAgIChKU0M6OkJ1
dHRlcmZseTo6cmVzaXplQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmNwcDoK
KyAgICAgICAgKEpTQzo6Q29kZUNhY2hlOjpnZXRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpD
b2RlQ2FjaGU6OmdldFByb2dyYW1Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6
OmdldEV2YWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6OmdldEZ1bmN0aW9u
RXhlY3V0YWJsZUZyb21HbG9iYWxDb2RlKToKKyAgICAgICAgKiBydW50aW1lL0NvZGVDYWNoZS5o
OgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U291cmNlQ29kZVZhbHVlOjpTb3VyY2VD
b2RlVmFsdWUpOgorICAgICAgICAoQ29kZUNhY2hlKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1v
bklkZW50aWZpZXJzLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkNvbW1vbklk
ZW50aWZpZXJzOjpDb21tb25JZGVudGlmaWVycyk6CisgICAgICAgICogcnVudGltZS9Db21tb25J
ZGVudGlmaWVycy5oOgorICAgICAgICAoQ29tbW9uSWRlbnRpZmllcnMpOgorICAgICAgICAqIHJ1
bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgIChKU0M6OkNvbW1vblNsb3dQYXRoczo6
b3BJbik6CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6
Y2hlY2tTeW50YXgpOgorICAgICAgICAoSlNDOjpldmFsdWF0ZSk6CisgICAgICAgICogcnVudGlt
ZS9EYXRlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpEYXRlQ29uc3RydWN0b3I6OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5oOgorICAg
ICAgICAoSlNDOjpEYXRlQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICog
cnVudGltZS9EYXRlSW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpEYXRlSW5zdGFuY2U6OkRh
dGVJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkRhdGVJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoSlNDOjpEYXRlSW5zdGFuY2U6OmNhbGN1bGF0ZUdyZWdvcmlhbkRhdGVUaW1l
KToKKyAgICAgICAgKEpTQzo6RGF0ZUluc3RhbmNlOjpjYWxjdWxhdGVHcmVnb3JpYW5EYXRlVGlt
ZVVUQyk6CisgICAgICAgICogcnVudGltZS9EYXRlSW5zdGFuY2UuaDoKKyAgICAgICAgKERhdGVJ
bnN0YW5jZSk6CisgICAgICAgIChKU0M6OkRhdGVJbnN0YW5jZTo6Y3JlYXRlKToKKyAgICAgICAg
KEpTQzo6RGF0ZUluc3RhbmNlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUv
RGF0ZVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkRhdGVQcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldFRpbWUpOgorICAgICAgICAo
SlNDOjpzZXROZXdWYWx1ZUZyb21UaW1lQXJncyk6CisgICAgICAgIChKU0M6OnNldE5ld1ZhbHVl
RnJvbURhdGVBcmdzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldFllYXIpOgorICAg
ICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9KU09OKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVQ
cm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6RGF0ZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlRXJy
b3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVFdmFsRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVh
dGVSYW5nZUVycm9yKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlUmVmZXJlbmNlRXJyb3IpOgorICAg
ICAgICAoSlNDOjpjcmVhdGVTeW50YXhFcnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZVR5cGVF
cnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZVVSSUVycm9yKToKKyAgICAgICAgKEpTQzo6YWRk
RXJyb3JJbmZvKToKKyAgICAgICAgKEpTQzo6dGhyb3dFcnJvcik6CisgICAgICAgICogcnVudGlt
ZS9FcnJvci5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3RyaWN0TW9kZVR5cGVF
cnJvckZ1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpTdHJpY3RNb2RlVHlwZUVycm9y
RnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9FcnJvckNvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6RXJyb3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlND
OjpFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUv
RXJyb3JJbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OkVycm9ySW5z
dGFuY2UpOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JJbnN0YW5jZS5oOgorICAgICAgICAoSlND
OjpFcnJvckluc3RhbmNlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpFcnJvcklu
c3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAoRXJyb3JJbnN0YW5jZSk6CisgICAgICAgIChKU0M6
OkVycm9ySW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9y
UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6RXJyb3JQcm90b3R5cGU6OkVycm9yUHJvdG90
eXBlKToKKyAgICAgICAgKEpTQzo6RXJyb3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKiBydW50aW1lL0Vycm9yUHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6OkVycm9yUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uSGVs
cGVycy5jcHA6CisgICAgICAgIChKU0M6OmNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0
aW9uKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbik6
CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSlNDOjpJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yOjpJbnRlcnJ1cHRlZEV4ZWN1
dGlvbkVycm9yKToKKyAgICAgICAgKEpTQzo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpUZXJtaW5h
dGVkRXhlY3V0aW9uRXJyb3IpOgorICAgICAgICAoSlNDOjpUZXJtaW5hdGVkRXhlY3V0aW9uRXJy
b3I6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAg
ICAoSlNDOjpqZXR0aXNvbkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxl
OjpFdmFsRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpQcm9n
cmFtRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rp
b25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVPcHRp
bWl6ZWQpOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToK
KyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZSk6Cisg
ICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjaGVja1N5bnRheCk6CisgICAgICAgIChK
U0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6
UHJvZ3JhbUV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZSk6CisgICAgICAgIChKU0M6
OlByb2dyYW1FeGVjdXRhYmxlOjppbml0aWFsaXplR2xvYmFsUHJvcGVydGllcyk6CisgICAgICAg
IChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNhbGwpOgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1
Y3QpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tG
b3IpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVk
Q29kZUZvckNhbGwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29u
T3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0
YWJsZTo6ZnJvbUdsb2JhbENvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6RXhlY3V0YWJsZUJhc2UpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQmFzZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpFeGVj
dXRhYmxlQmFzZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6TmF0aXZlRXhlY3V0
YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6TmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6TmF0aXZlRXhlY3V0YWJsZTo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoSlNDOjpOYXRpdmVFeGVjdXRhYmxlOjpOYXRpdmVFeGVjdXRhYmxlKToKKyAg
ICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6U2NyaXB0RXhlY3V0YWJsZSk6CisgICAgICAg
IChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGUpOgorICAgICAgICAoRXZhbEV4ZWN1dGFibGUpOgorICAg
ICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RXZhbEV4
ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRh
YmxlOjpjcmVhdGUpOgorICAgICAgICAoUHJvZ3JhbUV4ZWN1dGFibGUpOgorICAgICAgICAoSlND
OjpQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVj
dXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFi
bGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZv
ckNhbGwpOgorICAgICAgICAoRnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3IpOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpT
RnVuY3Rpb246OkpTRnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0aW9uSGFybmVz
cy5oOgorICAgICAgICAoSlNDOjpwcmVwYXJlRm9yRXhlY3V0aW9uKToKKyAgICAgICAgKEpTQzo6
cHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9u
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvbnN0cnVjdG9yOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmg6Cisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgICogcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHJv
dG90eXBlOjphZGRGdW5jdGlvblByb3BlcnRpZXMpOgorICAgICAgICAoSlNDOjpmdW5jdGlvblBy
b3RvRnVuY0JpbmQpOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaDoKKyAg
ICAgICAgKEpTQzo6RnVuY3Rpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAg
ICogcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwOgorICAgICAgICAoSlNDOjpEZWZhdWx0
R0NBY3Rpdml0eUNhbGxiYWNrOjpEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKToKKyAgICAgICAg
KEpTQzo6RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6ZG9Xb3JrKToKKyAgICAgICAgKEpTQzo6
RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6ZGlkQWxsb2NhdGUpOgorICAgICAgICAqIHJ1bnRp
bWUvR0NBY3Rpdml0eUNhbGxiYWNrLmg6CisgICAgICAgIChKU0M6OkdDQWN0aXZpdHlDYWxsYmFj
azo6R0NBY3Rpdml0eUNhbGxiYWNrKToKKyAgICAgICAgKiBydW50aW1lL0dDQWN0aXZpdHlDYWxs
YmFja0JsYWNrQmVycnkuY3BwOgorICAgICAgICAoSlNDOjpEZWZhdWx0R0NBY3Rpdml0eUNhbGxi
YWNrOjpEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6RGVmYXVsdEdD
QWN0aXZpdHlDYWxsYmFjazo6ZG9Xb3JrKToKKyAgICAgICAgKEpTQzo6RGVmYXVsdEdDQWN0aXZp
dHlDYWxsYmFjazo6ZGlkQWxsb2NhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVy
Lmg6CisgICAgICAgIChKU0M6OkdldHRlclNldHRlcjo6R2V0dGVyU2V0dGVyKToKKyAgICAgICAg
KEpTQzo6R2V0dGVyU2V0dGVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXI6
OnNldEdldHRlcik6CisgICAgICAgIChKU0M6OkdldHRlclNldHRlcjo6c2V0U2V0dGVyKToKKyAg
ICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1
bnRpbWUvSWRlbnRpZmllci5jcHA6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFkZCk6Cisg
ICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFkZDgpOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVy
OjphZGRTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmZyb20pOgorICAgICAg
ICAoSlNDOjpJZGVudGlmaWVyOjpjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvSWRlbnRpZmllci5oOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjpJZGVu
dGlmaWVyKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6Y3JlYXRlTENoYXJGcm9tVUNoYXIp
OgorICAgICAgICAoSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFkZCk6
CisgICAgICAgICogcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6
SW50ZXJuYWxGdW5jdGlvbjo6SW50ZXJuYWxGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkludGVy
bmFsRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxGdW5j
dGlvbjo6bmFtZSk6CisgICAgICAgIChKU0M6OkludGVybmFsRnVuY3Rpb246OmRpc3BsYXlOYW1l
KToKKyAgICAgICAgKiBydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6
SW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEludGVybmFsRnVu
Y3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNBUElWYWx1ZVdyYXBwZXIuaDoKKyAgICAgICAg
KEpTQzo6SlNBUElWYWx1ZVdyYXBwZXI6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
OkpTQVBJVmFsdWVXcmFwcGVyOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTQVBJ
VmFsdWVXcmFwcGVyOjpKU0FQSVZhbHVlV3JhcHBlcik6CisgICAgICAgICogcnVudGltZS9KU0Fj
dGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxlUHV0
KToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1
dGVzKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgor
ICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OnB1dCk6CisgICAgICAgIChKU0M6OkpTQWN0aXZh
dGlvbjo6cHV0RGlyZWN0VmlydHVhbCk6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6YXJn
dW1lbnRzR2V0dGVyKToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5oOgorICAgICAg
ICAoSlNBY3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChK
U0M6OkpTQWN0aXZhdGlvbjo6SlNBY3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0
aW9uOjp0ZWFyT2ZmKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAo
SlNDOjpjcmVhdGVBcnJheUJ1dHRlcmZseUluRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OnNldExlbmd0aFdyaXRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRM
ZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXNoKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6c2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OkNvbnRp
Z3VvdXNUeXBlQWNjZXNzb3I6OnNldFdpdGhWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OnNvcnRDb21wYWN0ZWRWZWN0b3IpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0VmVjdG9y
KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
SlNBcnJheSk6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hp
ZnRDb3VudEZvclNoaWZ0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50Rm9y
U2hpZnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAg
ICAoSlNDOjpjcmVhdGVDb250aWd1b3VzQXJyYXlCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpj
cmVhdGVBcnJheUJ1dHRlcmZseSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxp
emVkKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNCb3VuZEZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNCb3VuZEZ1bmN0aW9uOjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpKU0JvdW5kRnVuY3Rpb246OkpTQm91bmRGdW5jdGlvbik6Cisg
ICAgICAgICogcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SlNCb3Vu
ZEZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1
ZS5jcHA6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlKToKKyAgICAgICAg
KEpTQzo6SlNWYWx1ZTo6dG9TdHJpbmdTbG93Q2FzZSk6CisgICAgICAgICogcnVudGltZS9KU0NK
U1ZhbHVlLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6Cisg
ICAgICAgIChKU0NlbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjpKU0NlbGw6OkpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAoSlNDOjphbGxvY2F0ZUNlbGwpOgorICAgICAgICAoSlNDOjpK
U0NlbGw6OnNldFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6ZmFzdEdldE93blBy
b3BlcnR5KToKKyAgICAgICAgKiBydW50aW1lL0pTRGF0ZU1hdGguY3BwOgorICAgICAgICAoSlND
OjpnZXREU1RPZmZzZXQpOgorICAgICAgICAoSlNDOjpnZXRVVENPZmZzZXQpOgorICAgICAgICAo
SlNDOjpwYXJzZURhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3Qu
aDoKKyAgICAgICAgKEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Q6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0KToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpK
U0Z1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9u
KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGVBbGxvY2F0aW9uUHJvZmlsZSk6CisgICAgICAgIChKU0M6
OkpTRnVuY3Rpb246Om5hbWUpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpkaXNwbGF5TmFt
ZSk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93blByb3BlcnR5U2xvdCk6CisgICAg
ICAgIChKU0M6OkpTRnVuY3Rpb246OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKiBydW50aW1l
L0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU0Z1
bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpzZXRTY29wZSk6Cisg
ICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbERhdGEuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxEYXRhLmg6IFJlbW92ZWQuCisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6
CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp+SlNHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbE9iamVjdDo6c2V0R2xvYmFsVGhpcyk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0Ojppbml0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnB1dERpcmVjdFZpcnR1
YWwpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmhhdmVBQmFkVGltZSk6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsT2JqZWN0OjpjcmVhdGVUaHJvd1R5cGVFcnJvcik6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0OjpyZXNldFByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OkpTR2xv
YmFsT2JqZWN0OjphZGRTdGF0aWNHbG9iYWxzKToKKyAgICAgICAgKEpTQzo6RHluYW1pY0dsb2Jh
bE9iamVjdFNjb3BlOjpEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUpOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbE9iamVjdDo6Y3JlYXRlUHJvZ3JhbUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjpjcmVhdGVFdmFsQ29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0pT
R2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpjcmVhdGUpOgor
ICAgICAgICAoSlNHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6dm0pOgorICAg
ICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6RXhlY1N0YXRlOjpkeW5hbWljR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6Y29uc3Ry
dWN0RW1wdHlBcnJheSk6CisgICAgICAgIChEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlND
OjpnbG9iYWxGdW5jUHJvdG9TZXR0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNMb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIpOgorICAgICAgICAoSlND
OjpKU0xvY2tIb2xkZXI6OmluaXQpOgorICAgICAgICAoSlNDOjpKU0xvY2tIb2xkZXI6On5KU0xv
Y2tIb2xkZXIpOgorICAgICAgICAoSlNDOjpKU0xvY2s6OkpTTG9jayk6CisgICAgICAgIChKU0M6
OkpTTG9jazo6d2lsbERlc3Ryb3lHbG9iYWxEYXRhKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjps
b2NrKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjp1bmxvY2spOgorICAgICAgICAoSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFsbExvY2tzKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3M6On5Ecm9wQWxsTG9ja3MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNMb2NrLmg6
CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNMb2NrSG9sZGVyKToKKyAgICAgICAgKEpTTG9j
ayk6CisgICAgICAgIChKU0M6OkpTTG9jazo6dm0pOgorICAgICAgICAoRHJvcEFsbExvY2tzKToK
KyAgICAgICAgKiBydW50aW1lL0pTTmFtZVNjb3BlLmg6CisgICAgICAgIChKU0M6OkpTTmFtZVNj
b3BlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU05hbWVTY29wZTo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU05hbWVTY29wZTo6SlNOYW1lU2NvcGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNOb3RBbk9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU05vdEFuT2Jq
ZWN0OjpKU05vdEFuT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNOb3RBbk9iamVjdDo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6SlNOb3RBbk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKiBydW50aW1lL0pTT05PYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09OT2JqZWN0OjpK
U09OT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPTk9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgor
ICAgICAgICAoSG9sZGVyKToKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OlN0cmluZ2lmaWVy
KToKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OnN0cmluZ2lmeSk6CisgICAgICAgIChKU0M6
OlN0cmluZ2lmaWVyOjp0b0pTT04pOgorICAgICAgICAoSlNDOjpTdHJpbmdpZmllcjo6YXBwZW5k
U3RyaW5naWZpZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjpIb2xkZXI6Okhv
bGRlcik6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OldhbGtlcjo6V2Fsa2VyKToKKyAgICAgICAgKEpTQzo6V2Fs
a2VyOjp3YWxrKToKKyAgICAgICAgKEpTQzo6SlNPTlByb3RvRnVuY1BhcnNlKToKKyAgICAgICAg
KEpTQzo6SlNPTlByb3RvRnVuY1N0cmluZ2lmeSk6CisgICAgICAgIChKU0M6OkpTT05TdHJpbmdp
ZnkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09O
T2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OnB1dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6Om5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpjcmVhdGVJbml0aWFsVW5kZWNpZGVkKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmNyZWF0ZUluaXRpYWxJbnQzMik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0
aWFsRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxDb250aWd1
b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0ludDMyKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHMp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvRG91YmxlKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQ29udGlndW91cyk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpnZW5lcmljQ29udmVydERvdWJsZVRvQ29udGlndW91cyk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnJhZ2VDb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRGb3JWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0Ojpjb252ZXJ0SW50MzJGb3JWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRJ
bmRleFF1aWNrbHlUb1VuZGVjaWRlZCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0
SW50MzJUb0RvdWJsZU9yQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1p
bmdTZXRJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVJbnQzMlNsb3cpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlRG91YmxlU2xvdyk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjplbnN1cmVDb250aWd1b3VzU2xvdyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpyYWdlRW5zdXJlQ29udGlndW91c1Nsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5z
dXJlQXJyYXlTdG9yYWdlU2xvdyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJh
eVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6c3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
c2V0UHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldFByb3RvdHlwZVdpdGhD
eWNsZUNoZWNrKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEFjY2Vzc29yKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmdldFByb3BlcnR5U3BlY2lmaWNWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6c2VhbCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpmcmVlemUpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHJldmVudEV4dGVuc2lvbnMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
cmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JEZWxldGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
cmVtb3ZlRGlyZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEluZGV4ZWREZXNjcmlw
dG9yKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphbGxvY2F0ZVNwYXJzZUluZGV4TWFwKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRob3V0QXR0
cmlidXRlcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoV2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUlu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVj
dEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpwdXREaXJlY3ROYXRpdmVGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpl
bnN1cmVMZW5ndGhTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cik6CisgICAgICAgIChKU0M6OnB1dERlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0RGlyZWN0TWF5QmVJbmRleCk6CisgICAgICAgIChKU0M6OkRlZmluZU93blByb3BlcnR5
U2NvcGU6OkRlZmluZU93blByb3BlcnR5U2NvcGUpOgorICAgICAgICAoSlNDOjpEZWZpbmVPd25Q
cm9wZXJ0eVNjb3BlOjp+RGVmaW5lT3duUHJvcGVydHlTY29wZSk6CisgICAgICAgIChEZWZpbmVP
d25Qcm9wZXJ0eVNjb3BlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bk5vbklu
ZGV4UHJvcGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpT
T2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhJbmxpbmUpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6c2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluaXRpYWxp
emVJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXREaXJlY3QpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6Z2V0RGlyZWN0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OnB1dERpcmVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojppc1NlYWxlZCk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0Ojppc0Zyb3plbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpmbGF0
dGVuRGljdGlvbmFyeU9iamVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVJbnQz
Mik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVEb3VibGUpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6ZW5zdXJlQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpy
YWdlRW5zdXJlQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJh
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmVuc3VyZUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTTm9uRmluYWxPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTTm9uRmluYWxPYmplY3Q6OkpTTm9uRmlu
YWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU05vbkZpbmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlv
bik6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
SlNGaW5hbE9iamVjdDo6SlNGaW5hbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmpl
Y3Q6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6SlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
aW5saW5lR2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERp
cmVjdEludGVybmFsKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZFJl
YWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0
T3duRGF0YVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9KU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRv
cjo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcik6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1l
SXRlcmF0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yLmg6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZVN0cnVj
dHVyZSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OnNldENhY2hlZFN0
cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OnNldENhY2hl
ZFByb3RvdHlwZUNoYWluKToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0RW51
bWVyYXRpb25DYWNoZSk6CisgICAgICAgICogcnVudGltZS9KU1Byb3h5LmNwcDoKKyAgICAgICAg
KEpTQzo6SlNQcm94eTo6c2V0VGFyZ2V0KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJveHkuaDoK
KyAgICAgICAgKEpTQzo6SlNQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNQcm94eTo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNQcm94eTo6SlNQcm94eSk6CisgICAg
ICAgIChKU0M6OkpTUHJveHk6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTUHJveHkpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNTY29wZS5jcHA6CisgICAgICAgIChKU0M6OmV4ZWN1dGVSZXNv
bHZlT3BlcmF0aW9ucyk6CisgICAgICAgIChKU0M6OkpTU2NvcGU6OnJlc29sdmVDb250YWluaW5n
U2NvcGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkpTU2NvcGU6OnJlc29sdmVXaXRoQmFzZSk6
CisgICAgICAgIChKU0M6OkpTU2NvcGU6OnJlc29sdmVXaXRoVGhpcyk6CisgICAgICAgIChKU0M6
OkpTU2NvcGU6OnJlc29sdmVQdXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTY29wZS5oOgorICAg
ICAgICAoSlNTY29wZSk6CisgICAgICAgIChKU0M6OkpTU2NvcGU6OkpTU2NvcGUpOgorICAgICAg
ICAoSlNDOjpKU1Njb3BlOjp2bSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6dm0pOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oOgorICAgICAgICAoSlND
OjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KToK
KyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuY3BwOgorICAgICAgICAoSlNDOjpKU1JvcGVT
dHJpbmc6OlJvcGVCdWlsZGVyOjpleHBhbmQpOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6
OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5oOgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKEpTU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OkpTU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
SlNTdHJpbmc6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpjcmVhdGVIYXNPdGhl
ck93bmVyKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgIChKU1JvcGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OlJvcGVCdWls
ZGVyOjpSb3BlQnVpbGRlcik6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6Um9wZUJ1aWxk
ZXI6OmFwcGVuZCk6CisgICAgICAgIChSb3BlQnVpbGRlcik6CisgICAgICAgIChKU0M6OkpTUm9w
ZVN0cmluZzo6SlNSb3BlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6YXBwZW5kKToKKyAgICAg
ICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpjcmVhdGVOdWxsKToKKyAgICAgICAgKEpTQzo6SlNSb3Bl
U3RyaW5nOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpqc0VtcHR5U3RyaW5nKToKKyAgICAgICAg
KEpTQzo6anNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOgorICAgICAgICAoSlNDOjpqc1NpbmdsZUNo
YXJhY3RlclN1YnN0cmluZyk6CisgICAgICAgIChKU0M6OmpzTm9udHJpdmlhbFN0cmluZyk6Cisg
ICAgICAgIChKU0M6OmpzU3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNTdWJzdHJpbmcpOgorICAg
ICAgICAoSlNDOjpqc1N1YnN0cmluZzgpOgorICAgICAgICAoSlNDOjpqc093bmVkU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6anNTdHJpbmdCdWlsZGVyKToKKyAgICAgICAgKEpTQzo6aW5saW5lSlNW
YWx1ZU5vdFN0cmluZ3RvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nSm9pbmVy
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmdKb2luZXI6OmJ1aWxkKToKKyAgICAgICAgKiBy
dW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJs
ZU9iamVjdDo6SlNTeW1ib2xUYWJsZU9iamVjdCk6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFi
bGVPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6c3ltYm9sVGFibGVQdXQp
OgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKToKKyAgICAgICAg
KiBydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNWYXJpYWJsZU9i
amVjdDo6SlNWYXJpYWJsZU9iamVjdCk6CisgICAgICAgICogcnVudGltZS9KU1dpdGhTY29wZS5o
OgorICAgICAgICAoSlNDOjpKU1dpdGhTY29wZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNX
aXRoU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTV2l0aFNjb3BlOjpK
U1dpdGhTY29wZSk6CisgICAgICAgICogcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaDoKKyAgICAg
ICAgKEpTV3JhcHBlck9iamVjdCk6CisgICAgICAgIChKU0M6OkpTV3JhcHBlck9iamVjdDo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNXcmFwcGVyT2JqZWN0OjpKU1dyYXBwZXJP
YmplY3QpOgorICAgICAgICAoSlNDOjpKU1dyYXBwZXJPYmplY3Q6OnNldEludGVybmFsVmFsdWUp
OgorICAgICAgICAqIHJ1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHA6CisgICAgICAgIChKU0M6Ojo6
dHJ5SlNPTlBQYXJzZSk6CisgICAgICAgIChKU0M6Ojo6bWFrZUlkZW50aWZpZXIpOgorICAgICAg
ICAoSlNDOjo6OnBhcnNlKToKKyAgICAgICAgKiBydW50aW1lL0xvb2t1cC5jcHA6CisgICAgICAg
IChKU0M6Okhhc2hUYWJsZTo6Y3JlYXRlVGFibGUpOgorICAgICAgICAoSlNDOjpzZXRVcFN0YXRp
Y0Z1bmN0aW9uU2xvdCk6CisgICAgICAgICogcnVudGltZS9Mb29rdXAuaDoKKyAgICAgICAgKEpT
Qzo6SGFzaFRhYmxlOjppbml0aWFsaXplSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpIYXNoVGFi
bGU6OmVudHJ5KToKKyAgICAgICAgKEpTQzo6SGFzaFRhYmxlOjpiZWdpbik6CisgICAgICAgIChK
U0M6Okhhc2hUYWJsZTo6ZW5kKToKKyAgICAgICAgKEhhc2hUYWJsZSk6CisgICAgICAgIChKU0M6
Omxvb2t1cFB1dCk6CisgICAgICAgICogcnVudGltZS9NYXRoT2JqZWN0LmNwcDoKKyAgICAgICAg
KEpTQzo6TWF0aE9iamVjdDo6TWF0aE9iamVjdCk6CisgICAgICAgIChKU0M6Ok1hdGhPYmplY3Q6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY1Npbik6CisgICAg
ICAgICogcnVudGltZS9NYXRoT2JqZWN0Lmg6CisgICAgICAgIChKU0M6Ok1hdGhPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9NZW1vcnlTdGF0aXN0aWNzLmNwcDoK
KyAgICAgICAgKiBydW50aW1lL01lbW9yeVN0YXRpc3RpY3MuaDoKKyAgICAgICAgKiBydW50aW1l
L05hbWVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6Ok5hbWVDb25zdHJ1Y3Rvcjo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RQcml2YXRlTmFtZSk6CisgICAg
ICAgICogcnVudGltZS9OYW1lQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6TmFtZUNvbnN0
cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvTmFtZUluc3RhbmNl
LmNwcDoKKyAgICAgICAgKEpTQzo6TmFtZUluc3RhbmNlOjpOYW1lSW5zdGFuY2UpOgorICAgICAg
ICAqIHJ1bnRpbWUvTmFtZUluc3RhbmNlLmg6CisgICAgICAgIChKU0M6Ok5hbWVJbnN0YW5jZTo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6TmFtZUluc3RhbmNlOjpjcmVhdGUpOgor
ICAgICAgICAoTmFtZUluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6TmFtZUluc3RhbmNlOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9OYW1lUHJvdG90eXBlLmNwcDoKKyAgICAg
ICAgKEpTQzo6TmFtZVByb3RvdHlwZTo6TmFtZVByb3RvdHlwZSk6CisgICAgICAgIChKU0M6Ok5h
bWVQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL05hbWVQcm90
b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6TmFtZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKiBydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpT
Qzo6TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1
bnRpbWUvTmF0aXZlRXJyb3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpOYXRpdmVFcnJv
clByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpOdW1iZXJDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3Jl
YXRpb24pOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoTnVtYmVyQ29uc3RydWN0b3IpOgor
ICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6TnVt
YmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9OdW1i
ZXJPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpOdW1iZXJPYmplY3Q6Ok51bWJlck9iamVjdCk6
CisgICAgICAgIChKU0M6Ok51bWJlck9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpjb25zdHJ1Y3ROdW1iZXIpOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyT2JqZWN0Lmg6
CisgICAgICAgIChOdW1iZXJPYmplY3QpOgorICAgICAgICAoSlNDOjpOdW1iZXJPYmplY3Q6OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6Ok51bWJlck9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKiBydW50aW1lL051bWJlclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6Ok51bWJl
clByb3RvdHlwZTo6TnVtYmVyUHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6TnVtYmVyUHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OmludGVnZXJWYWx1ZVRvU3RyaW5n
KToKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAqIHJ1
bnRpbWUvTnVtYmVyUHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6Ok51bWJlclByb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6T2JqZWN0Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgor
ICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvclNlYWwpOgorICAgICAgICAoSlNDOjpvYmpl
Y3RDb25zdHJ1Y3RvckZyZWV6ZSk6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yUHJl
dmVudEV4dGVuc2lvbnMpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvcklzU2VhbGVk
KToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JJc0Zyb3plbik6CisgICAgICAgICog
cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpPYmplY3RDb25zdHJ1
Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RW1wdHlPYmpl
Y3QpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpT
Qzo6T2JqZWN0UHJvdG90eXBlOjpPYmplY3RQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpPYmpl
Y3RQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9G
dW5jVG9TdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBy
dW50aW1lL09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpqc1R5cGVTdHJpbmdGb3JWYWx1
ZSk6CisgICAgICAgICogcnVudGltZS9PcGVyYXRpb25zLmg6CisgICAgICAgIChKU0MpOgorICAg
ICAgICAoSlNDOjpqc1N0cmluZyk6CisgICAgICAgIChKU0M6OmpzU3RyaW5nRnJvbUFyZ3VtZW50
cyk6CisgICAgICAgIChKU0M6Om5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3Mp
OgorICAgICAgICAoSlNDOjpub3JtYWxpemVQcm90b3R5cGVDaGFpbik6CisgICAgICAgICogcnVu
dGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU1hcEVu
dHJ5OjpQcm9wZXJ0eU1hcEVudHJ5KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKFByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlNDOjpQ
cm9wZXJ0eVRhYmxlOjpjb3B5KToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5
Lmg6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5OjpQcm9wZXJ0eU5hbWVBcnJheSk6
CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5Ojp2bSk6CisgICAgICAgIChKU0M6OlBy
b3BlcnR5TmFtZUFycmF5OjphZGRLbm93blVuaXF1ZSk6CisgICAgICAgIChQcm9wZXJ0eU5hbWVB
cnJheSk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6UHJvcGVydHlUYWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6
Y2xvbmUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKToKKyAg
ICAgICAgKiBydW50aW1lL1Byb3RvdHlwZU1hcC5jcHA6CisgICAgICAgIChKU0M6OlByb3RvdHlw
ZU1hcDo6ZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUpOgorICAgICAgICAqIHJ1bnRp
bWUvUmVnRXhwLmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpSZWdFeHApOgorICAgICAgICAo
SlNDOjpSZWdFeHA6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpjcmVh
dGVXaXRob3V0Q2FjaGluZyk6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6UmVnRXhwOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpjb21waWxl
SWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpSZWdFeHA6Om1hdGNoKToKKyAgICAgICAgKEpT
Qzo6UmVnRXhwOjpjb21waWxlTWF0Y2hPbmx5KToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpjb21w
aWxlSWZOZWNlc3NhcnlNYXRjaE9ubHkpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwLmg6Cisg
ICAgICAgIChKU0MpOgorICAgICAgICAoUmVnRXhwKToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpj
cmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwOgorICAg
ICAgICAoSlNDOjpSZWdFeHBDYWNoZTo6bG9va3VwT3JDcmVhdGUpOgorICAgICAgICAoSlNDOjpS
ZWdFeHBDYWNoZTo6UmVnRXhwQ2FjaGUpOgorICAgICAgICAoSlNDOjpSZWdFeHBDYWNoZTo6YWRk
VG9TdHJvbmdDYWNoZSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDYWNoZS5oOgorICAgICAg
ICAoUmVnRXhwQ2FjaGUpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNw
cDoKKyAgICAgICAgKEpTQzo6UmVnRXhwQ2FjaGVkUmVzdWx0OjpsYXN0UmVzdWx0KToKKyAgICAg
ICAgKEpTQzo6UmVnRXhwQ2FjaGVkUmVzdWx0OjpzZXRJbnB1dCk6CisgICAgICAgICogcnVudGlt
ZS9SZWdFeHBDYWNoZWRSZXN1bHQuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwQ2FjaGVkUmVzdWx0
OjpSZWdFeHBDYWNoZWRSZXN1bHQpOgorICAgICAgICAoSlNDOjpSZWdFeHBDYWNoZWRSZXN1bHQ6
OnJlY29yZCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OlJlZ0V4cENvbnN0cnVjdG9yOjpSZWdFeHBDb25zdHJ1Y3Rvcik6CisgICAgICAg
IChKU0M6OlJlZ0V4cENvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6
OmNvbnN0cnVjdFJlZ0V4cCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5o
OgorICAgICAgICAoSlNDOjpSZWdFeHBDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKFJlZ0V4cENvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6UmVnRXhwQ29uc3RydWN0
b3I6OnBlcmZvcm1NYXRjaCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXku
Y3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBNYXRjaGVzQXJyYXk6OlJlZ0V4cE1hdGNoZXNBcnJh
eSk6CisgICAgICAgIChKU0M6OlJlZ0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRlKToKKyAgICAgICAg
KEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6
OlJlZ0V4cE1hdGNoZXNBcnJheTo6cmVpZnlBbGxQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBydW50
aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oOgorICAgICAgICAoUmVnRXhwTWF0Y2hlc0FycmF5KToK
KyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAg
ICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2Jq
ZWN0OjpSZWdFeHBPYmplY3QpOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjptYXRjaCk6CisgICAgICAgICog
cnVudGltZS9SZWdFeHBPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OnNldFJlZ0V4cCk6CisgICAgICAgIChK
U0M6OlJlZ0V4cE9iamVjdDo6c2V0TGFzdEluZGV4KToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2Jq
ZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBl
LmNwcDoKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jQ29tcGlsZSk6CisgICAgICAgICog
cnVudGltZS9SZWdFeHBQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwUHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvU21hbGxTdHJpbmdzLmNwcDoK
KyAgICAgICAgKEpTQzo6U21hbGxTdHJpbmdzOjppbml0aWFsaXplQ29tbW9uU3RyaW5ncyk6Cisg
ICAgICAgIChKU0M6OlNtYWxsU3RyaW5nczo6Y3JlYXRlRW1wdHlTdHJpbmcpOgorICAgICAgICAo
SlNDOjpTbWFsbFN0cmluZ3M6OmNyZWF0ZVNpbmdsZUNoYXJhY3RlclN0cmluZyk6CisgICAgICAg
IChKU0M6OlNtYWxsU3RyaW5nczo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcnVudGltZS9TbWFs
bFN0cmluZ3MuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OlNtYWxsU3RyaW5nczo6
c2luZ2xlQ2hhcmFjdGVyU3RyaW5nKToKKyAgICAgICAgKFNtYWxsU3RyaW5ncyk6CisgICAgICAg
ICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcDoKKyAgICAgICAgKEpTQzo6U3BhcnNl
QXJyYXlWYWx1ZU1hcDo6U3BhcnNlQXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6OlNwYXJz
ZUFycmF5VmFsdWVNYXA6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJy
YXlWYWx1ZU1hcDo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0
RGlyZWN0KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6cHV0KToKKyAgICAgICAg
KiBydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cmlj
dEV2YWxBY3RpdmF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaWN0RXZhbEFjdGl2YXRpb246
OlN0cmljdEV2YWxBY3RpdmF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cmljdEV2YWxBY3Rp
dmF0aW9uLmg6CisgICAgICAgIChKU0M6OlN0cmljdEV2YWxBY3RpdmF0aW9uOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpTdHJpY3RFdmFsQWN0aXZhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKiBydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U3Ry
aW5nQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cmlu
Z0NvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6OlN0cmluZ0NvbnN0cnVjdG9yOjpjcmVhdGVT
dHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcDoKKyAgICAgICAg
KEpTQzo6U3RyaW5nT2JqZWN0OjpTdHJpbmdPYmplY3QpOgorICAgICAgICAoSlNDOjpTdHJpbmdP
YmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0U3RyaW5nKToK
KyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5oOgorICAgICAgICAoSlNDOjpTdHJpbmdP
YmplY3Q6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKFN0cmluZ09iamVjdCk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpTdHJpbmdQcm90b3R5cGU6OlN0cmluZ1Byb3Rv
dHlwZSk6CisgICAgICAgIChKU0M6OlN0cmluZ1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgor
ICAgICAgICAoSlNDOjpyZW1vdmVVc2luZ1JlZ0V4cFNlYXJjaCk6CisgICAgICAgIChKU0M6OnJl
cGxhY2VVc2luZ1JlZ0V4cFNlYXJjaCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY01h
dGNoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU2VhcmNoKToKKyAgICAgICAgKEpT
Qzo6c3RyaW5nUHJvdG9GdW5jU3BsaXQpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90
eXBlLmg6CisgICAgICAgIChKU0M6OlN0cmluZ1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKiBydW50aW1lL1N0cmluZ1JlY3Vyc2lvbkNoZWNrZXIuaDoKKyAgICAgICAgKEpT
Qzo6U3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6cGVyZm9ybUNoZWNrKToKKyAgICAgICAgKEpTQzo6
U3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6flN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIpOgorICAgICAg
ICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNp
dGlvblRhYmxlOjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OlN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6ZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0aW9uKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0
b0RpY3Rpb25hcnlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0b0NhY2hl
YWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0b1Vu
Y2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OnNlYWxUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmcmVlemVUcmFuc2l0
aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRp
b24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlm
UGlubmVkKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24p
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmlzU2VhbGVkKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjppc0Zyb3plbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rp
b25hcnlTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5V2l0
aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5
V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFsbG9jYXRlUmFy
ZURhdGEpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNsb25lUmFyZURhdGFGcm9tKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZSk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjpnZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0
aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkZXNwZWNpZnlBbGxGdW5jdGlvbnMpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnB1dFNwZWNpZmljVmFsdWUpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZVByb3BlcnR5TWFwKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjpnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0UHJvdG90
eXBlV2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNldEdsb2Jh
bE9iamVjdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0T2JqZWN0VG9TdHJpbmdWYWx1
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVj
ZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFw
SWZOZWNlc3NhcnlGb3JQaW5uaW5nKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzZXRQcmV2
aW91c0lEKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcDoKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlQ2hhaW46OlN0cnVjdHVyZUNoYWluKToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZUNoYWluLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUNoYWluOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVDaGFpbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlQ2hhaW46OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFN0cnVj
dHVyZUNoYWluKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Z2V0KToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjpzZXRFbnVtZXJhdGlvbkNhY2hlKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjpwcm90b3R5cGVDaGFpbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHJvcGVy
dHlUYWJsZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHA6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
UmFyZURhdGE6OmNsb25lKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OlN0cnVj
dHVyZVJhcmVEYXRhKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmg6Cisg
ICAgICAgIChTdHJ1Y3R1cmVSYXJlRGF0YSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVS
YXJlRGF0YUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnNldFBy
ZXZpb3VzSUQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0T2JqZWN0VG9T
dHJpbmdWYWx1ZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUu
aDoKKyAgICAgICAgKFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6c2V0U2luZ2xlVHJhbnNpdGlvbik6CisgICAgICAgICog
cnVudGltZS9TeW1ib2xUYWJsZS5oOgorICAgICAgICAoSlNDOjpTaGFyZWRTeW1ib2xUYWJsZTo6
Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OlNoYXJlZFN5bWJvbFRhYmxlOjpTaGFyZWRTeW1ib2xUYWJsZSk6
CisgICAgICAgICogcnVudGltZS9WTS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAuCisgICAgICAgIChKU0M6OlZNOjpWTSk6Cisg
ICAgICAgIChKU0M6OlZNOjp+Vk0pOgorICAgICAgICAoSlNDOjpWTTo6Y3JlYXRlQ29udGV4dEdy
b3VwKToKKyAgICAgICAgKEpTQzo6Vk06OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlZNOjpjcmVh
dGVMZWFrZWQpOgorICAgICAgICAoSlNDOjpWTTo6c2hhcmVkSW5zdGFuY2VFeGlzdHMpOgorICAg
ICAgICAoSlNDOjpWTTo6c2hhcmVkSW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpWTTo6c2hhcmVk
SW5zdGFuY2VJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OlZNOjpnZXRIb3N0RnVuY3Rpb24pOgor
ICAgICAgICAoSlNDOjpWTTo6Q2xpZW50RGF0YTo6fkNsaWVudERhdGEpOgorICAgICAgICAoSlND
OjpWTTo6cmVzZXREYXRlQ2FjaGUpOgorICAgICAgICAoSlNDOjpWTTo6c3RhcnRTYW1wbGluZyk6
CisgICAgICAgIChKU0M6OlZNOjpzdG9wU2FtcGxpbmcpOgorICAgICAgICAoSlNDOjpWTTo6ZGlz
Y2FyZEFsbENvZGUpOgorICAgICAgICAoSlNDOjpWTTo6ZHVtcFNhbXBsZURhdGEpOgorICAgICAg
ICAoSlNDOjpWTTo6YWRkU291cmNlUHJvdmlkZXJDYWNoZSk6CisgICAgICAgIChKU0M6OlZNOjpj
bGVhclNvdXJjZVByb3ZpZGVyQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Vk06OnJlbGVhc2VFeGVj
dXRhYmxlTWVtb3J5KToKKyAgICAgICAgKEpTQzo6cmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkpOgor
ICAgICAgICAoSlNDOjpWTTo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMpOgorICAgICAgICAoSlND
OjpWTTo6YWRkUmVnRXhwVG9UcmFjZSk6CisgICAgICAgIChKU0M6OlZNOjpkdW1wUmVnRXhwVHJh
Y2UpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmguCisgICAgICAgIChWTSk6CisgICAgICAgIChK
U0M6OlZNOjppc1NoYXJlZEluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6Vk06OnVzaW5nQVBJKToK
KyAgICAgICAgKEpTQzo6Vk06OmlzSW5pdGlhbGl6aW5nT2JqZWN0KToKKyAgICAgICAgKEpTQzo6
Vk06OnNldEluaXRpYWxpemluZ09iamVjdENsYXNzKToKKyAgICAgICAgKEpTQzo6V2Vha1NldDo6
aGVhcCk6CisgICAgICAgICogcnVudGltZS9Xcml0ZUJhcnJpZXIuaDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgIChKU0M6OldyaXRlQmFycmllckJhc2U6OnNldCk6CisgICAgICAgIChKU0M6Oldy
aXRlQmFycmllckJhc2U6OnNldE1heUJlTnVsbCk6CisgICAgICAgIChKU0M6OldyaXRlQmFycmll
ckJhc2U6OnNldEVhcmx5VmFsdWUpOgorICAgICAgICAoSlNDOjpXcml0ZUJhcnJpZXI6OldyaXRl
QmFycmllcik6CisgICAgICAgICogdGVzdFJlZ0V4cC5jcHA6CisgICAgICAgIChHbG9iYWxPYmpl
Y3QpOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAoR2xvYmFsT2Jq
ZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKHRlc3RPbmVSZWdFeHApOgorICAgICAg
ICAocGFyc2VSZWdFeHBMaW5lKToKKyAgICAgICAgKHJ1bkZyb21GaWxlcyk6CisgICAgICAgIChy
ZWFsTWFpbik6CisgICAgICAgICogeWFyci9ZYXJySW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEJ5
dGVjb2RlUGF0dGVybik6CisgICAgICAgICogeWFyci9ZYXJySklULmNwcDoKKyAgICAgICAgKFlh
cnJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpjb21waWxl
KToKKyAgICAgICAgKEpTQzo6WWFycjo6aml0Q29tcGlsZSk6CisgICAgICAgICogeWFyci9ZYXJy
SklULmg6CisgICAgICAgIChKU0MpOgorCiAyMDEzLTA0LTE3ICBNYXJrIExhbSAgPG1hcmsubGFt
QGFwcGxlLmNvbT4KIAogICAgICAgICBBdm9pZCB1c2luZyBhIGJyYW5jaCByYW5nZSB0aGF0IGlz
IHRvbyBmYXIgZm9yIHNvbWUgQ1BVIGFyY2hpdGVjdHVyZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTY0
Nyw4ICs2NDcsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNFeHBvcnRNYWNyb3MuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxEYXRhLmNwcCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxEYXRhLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmggXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0pTQ1R5cGVkQXJyYXlTdHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KU0NUeXBlZEFycmF5U3R1YnMuaAkocmV2aXNpb24gMTQ4NjU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0pTQ1R5cGVkQXJyYXlTdHVicy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw4ICs0OCw4IEBAIHB1YmxpYzogXAogICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVP
YmplY3QgQmFzZTsgXAogICAgIHN0YXRpYyBKUyMjbmFtZSMjQXJyYXkqIGNyZWF0ZShKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVm
UHRyPG5hbWUjI0FycmF5PiBpbXBsKSBcCiAgICAgeyBcCi0gICAgICAgIEpTIyNuYW1lIyNBcnJh
eSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKUyMjbmFtZSMjQXJyYXk+
KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLmhlYXApKSBKUyMjbmFtZSMjQXJyYXkoc3RydWN0
dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOyBcCi0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpOyBcCisgICAgICAgIEpTIyNuYW1lIyNBcnJheSog
cHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKUyMjbmFtZSMjQXJyYXk+KGds
b2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlMjI25hbWUjI0FycmF5KHN0cnVjdHVyZSwgZ2xvYmFs
T2JqZWN0LCBpbXBsKTsgXAorICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVj
dC0+dm0oKSk7IFwKICAgICAgICAgcmV0dXJuIHB0cjsgXAogICAgIH1cCiBcCkBAIC02MCw5ICs2
MCw5IEBAIHB1YmxpYzogXAogICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwq
LCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBi
b29sKTtcCiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbztcCiBcCi0gICAg
c3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSlcCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSlcCiAgICAge1wKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pO1wKKyAgICAgICAg
cmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTtcCiAgICAgfVwKIFwKICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6
SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6
OkVudW1lcmF0aW9uTW9kZSBtb2RlID0gSlNDOjpFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTtc
CkBAIC03NCw3ICs3NCw3IEBAIHB1YmxpYzogXAogICAgIFJlZlB0cjxuYW1lIyNBcnJheT4gbV9p
bXBsO1wKIHByb3RlY3RlZDpcCiAgICAgSlMjI25hbWUjI0FycmF5KEpTQzo6U3RydWN0dXJlKiwg
SlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPG5hbWUjI0FycmF5Pik7XAotICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNDOjpKU0dsb2JhbERhdGEmKTtcCisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0M6OlZNJik7XAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEpTQzo6T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7IFwKICAgICBKU0M6OkpT
VmFsdWUgZ2V0QnlJbmRleChKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4KTtcCiAgICAg
dm9pZCBpbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpT
VmFsdWUpO1wKQEAgLTgzLDE5ICs4MywxOSBAQCBwcm90ZWN0ZWQ6XAogY29uc3QgQ2xhc3NJbmZv
IEpTIyNuYW1lIyNBcnJheTo6c19pbmZvID0geyAjbmFtZSAiQXJyYXkiICwgJkJhc2U6OnNfaW5m
bywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKUyMjbmFtZSMjQXJyYXkpIH07XAogXAogSlMj
I25hbWUjI0FycmF5OjpKUyMjbmFtZSMjQXJyYXkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8bmFtZSMjQXJyYXk+IGltcGwpXAot
ICAgIDogQmFzZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKVwKKyAgICA6
IEJhc2UoZ2xvYmFsT2JqZWN0LT52bSgpLCBzdHJ1Y3R1cmUpXAogICAgICwgbV9pbXBsKGltcGwp
XAoge1wKIH1cCiBcCi12b2lkIEpTIyNuYW1lIyNBcnJheTo6ZmluaXNoQ3JlYXRpb24oSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKVwKK3ZvaWQgSlMjI25hbWUjI0FycmF5OjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0pXAoge1wKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTtcCisg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pO1wKICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBk
ZXNjcmlwdG9yKCZKUyMjbmFtZSMjQXJyYXk6OnNfaW5mbywgT0JKRUNUX09GRlNFVE9GKEpTIyNu
YW1lIyNBcnJheSwgbV9zdG9yYWdlKSwgT0JKRUNUX09GRlNFVE9GKEpTIyNuYW1lIyNBcnJheSwg
bV9zdG9yYWdlTGVuZ3RoKSk7XAotICAgIGdsb2JhbERhdGEucmVnaXN0ZXJUeXBlZEFycmF5RGVz
Y3JpcHRvcihtX2ltcGwuZ2V0KCksIGRlc2NyaXB0b3IpO1wKKyAgICB2bS5yZWdpc3RlclR5cGVk
QXJyYXlEZXNjcmlwdG9yKG1faW1wbC5nZXQoKSwgZGVzY3JpcHRvcik7XAogICAgIG1fc3RvcmFn
ZSA9IG1faW1wbC0+ZGF0YSgpO1wKICAgICBtX3N0b3JhZ2VMZW5ndGggPSBtX2ltcGwtPmxlbmd0
aCgpO1wKLSAgICBwdXREaXJlY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgsIGpzTnVtYmVyKG1fc3RvcmFnZUxlbmd0aCksIERvbnREZWxldGUgfCBSZWFkT25s
eSB8IERvbnRFbnVtKTsgXAorICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVu
Z3RoLCBqc051bWJlcihtX3N0b3JhZ2VMZW5ndGgpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBE
b250RW51bSk7IFwKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpO1wKIH1cCiBcCkBAIC0x
ODQsNyArMTg0LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwog
ICAgIGludDMyX3QgbGVuZ3RoID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b0ludDMyKGNhbGxG
cmFtZSk7IFwKICAgICBpZiAobGVuZ3RoIDwgMCkgXAogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOyBcCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBKUyMj
bmFtZSMjQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2Fs
bEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSk7IFwKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IEpTIyNuYW1lIyNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGNhbGxGcmFtZS0+dm0oKSwgY2FsbEZy
YW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5vYmplY3RQcm90b3R5cGUoKSk7IFwKICAgICBSZWZQdHI8bmFtZSMjQXJyYXk+IGJ1ZmZl
ciA9IG5hbWUjI0FycmF5OjpjcmVhdGUobGVuZ3RoKTsgXAogICAgIGlmICghYnVmZmVyKSBcCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoY2FsbEZyYW1lLCBjcmVhdGVSYW5nZUVycm9yKGNh
bGxGcmFtZSwgIkFycmF5QnVmZmVyIHNpemUgaXMgbm90IGEgc21hbGwgZW5vdWdoIHBvc2l0aXZl
IGludGVnZXIuIikpOyBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUub3JkZXIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLm9yZGVyCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUub3JkZXIJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAgX19aTjNK
U0NMMjNpbml0aWFsaXplVGhyZWFkaW5nT25jZUV2CiBfX1pOM1dURjEwU3RyaW5nSW1wbDVlbXB0
eUV2CiBfX1pOM1dURjEzV1RGVGhyZWFkRGF0YUMxRXYKIF9fWk4zV1RGMTFTdGFja0JvdW5kczEw
aW5pdGlhbGl6ZUV2Ci1fX1pOM0pTQzEySlNHbG9iYWxEYXRhMTBzdG9yZVZQdHJzRXYKK19fWk4z
SlNDMTJWTTEwc3RvcmVWUHRyc0V2CiBfX1pOM0pTQzdKU0FycmF5QzFFTlNfNkpTQ2VsbDIwVlB0
clN0ZWFsaW5nSGFja1R5cGVFCiBfX1pOM0pTQzEwSlNGdW5jdGlvbkMxRU5TXzZKU0NlbGwyMFZQ
dHJTdGVhbGluZ0hhY2tUeXBlRQogX19aTjNXVEYxNWluaXRpYWxpemVEYXRlc0V2CkBAIC0xMTks
NjUgKzExOSw2NSBAQCBfX1pOM1dURjEyQXRvbWljU3RyaW5nNnJlbW92ZUVQTlNfMTBTdHJpCiBf
SlNHbG9iYWxDb250ZXh0Q3JlYXRlCiBfX1pOM0pTQzZKU0xvY2s0bG9ja0VOU18xNEpTTG9ja0Jl
aGF2aW9yRQogX19aTjNKU0NMMTdjcmVhdGVKU0xvY2tDb3VudEV2Ci1fX1pOM0pTQzEySlNHbG9i
YWxEYXRhMTRzaGFyZWRJbnN0YW5jZUV2Ci1fX1pOM0pTQzEySlNHbG9iYWxEYXRhQzJFTlMwXzE0
R2xvYmFsRGF0YVR5cGVFTlNfOEhlYXBUeXBlRQorX19aTjNKU0MxMlZNMTRzaGFyZWRJbnN0YW5j
ZUV2CitfX1pOM0pTQzEyVk1DMkVOUzBfMTRWTVR5cGVFTlNfOEhlYXBUeXBlRQogX19aTjNKU0My
MWNyZWF0ZUlkZW50aWZpZXJUYWJsZUV2Ci1fX1pOM0pTQzE3Q29tbW9uSWRlbnRpZmllcnNDMUVQ
TlNfMTJKU0dsb2JhbERhdGFFCi1fX1pOM0pTQzE3Q29tbW9uSWRlbnRpZmllcnNDMkVQTlNfMTJK
U0dsb2JhbERhdGFFCi1fX1pOM0pTQzEwSWRlbnRpZmllcjNhZGRFUE5TXzEySlNHbG9iYWxEYXRh
RVBLYworX19aTjNKU0MxN0NvbW1vbklkZW50aWZpZXJzQzFFUE5TXzEyVk1FCitfX1pOM0pTQzE3
Q29tbW9uSWRlbnRpZmllcnNDMkVQTlNfMTJWTUUKK19fWk4zSlNDMTBJZGVudGlmaWVyM2FkZEVQ
TlNfMTJWTUVQS2MKIF9fWk4zSlNDMTVJZGVudGlmaWVyVGFibGUzYWRkSVBLY05TXzI3SWRlbnRp
ZmllckNTdHJpbmdUcmFuc2xhdG9yRUVFU3Q0cGFpcklOM1dURjI5SGFzaFRhYmxlQ29uc3RJdGVy
YXRvckFkYXB0ZXJJTlM2XzlIYXNoVGFibGVJUE5TNl8xMFN0cmluZ0ltcGxFU0FfTlM2XzE3SWRl
bnRpdHlFeHRyYWN0b3JJU0FfRUVOUzZfMTBTdHJpbmdIYXNoRU5TNl8xMEhhc2hUcmFpdHNJU0Ff
RUVTRl9FRVNBX0VFYkVUXwogX19aTjNXVEY5SGFzaFRhYmxlSVBOU18xMFN0cmluZ0ltcGxFUzJf
TlNfMTdJZGVudGl0eUV4dHJhY3RvcklTMl9FRU5TXzEwU3RyaW5nSGFzaEVOU18xMEhhc2hUcmFp
dHNJUzJfRUVTN19FNmV4cGFuZEV2CiBfX1pOM1dURjlIYXNoVGFibGVJUEtjU3Q0cGFpcklTMl9O
U182UmVmUHRySU5TXzEwU3RyaW5nSW1wbEVFRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTN19F
RU5TXzdQdHJIYXNoSVMyX0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzJf
RUVOU0RfSVM2X0VFRUVTRV9FNmV4cGFuZEV2CiBfX1pOM1dURjlIYXNoVGFibGVJUE5TXzEwU3Ry
aW5nSW1wbEVTMl9OU18xN0lkZW50aXR5RXh0cmFjdG9ySVMyX0VFTlNfMTBTdHJpbmdIYXNoRU5T
XzEwSGFzaFRyYWl0c0lTMl9FRVM3X0U0ZmluZElTMl9OU18yMklkZW50aXR5SGFzaFRyYW5zbGF0
b3JJUzJfUzJfUzVfRUVFRU5TXzE3SGFzaFRhYmxlSXRlcmF0b3JJUzJfUzJfUzRfUzVfUzdfUzdf
RUVSS1RfCi1fX1pOM0pTQzEwSWRlbnRpZmllckMxRVBOU18xMkpTR2xvYmFsRGF0YUVQS2MKK19f
Wk4zSlNDMTBJZGVudGlmaWVyQzFFUE5TXzEyVk1FUEtjCiBfX1pOM0pTQzEyU21hbGxTdHJpbmdz
QzFFdgogX19aTjNKU0MxOUV4ZWN1dGFibGVBbGxvY2F0b3IxN2ludGlhbGl6ZVBhZ2VTaXplRXYK
IF9fWk5LM0pTQzE5RXhlY3V0YWJsZUFsbG9jYXRvcjdpc1ZhbGlkRXYKIF9fWk4zV1RGMTFPU0Fs
bG9jYXRvcjE4cmVzZXJ2ZVVuY29tbWl0dGVkRW1OUzBfNVVzYWdlRWJiCiBfX1pOM0pTQzE0RXhl
Y3V0YWJsZVBvb2wxMXN5c3RlbUFsbG9jRW0KIF9fWk4zV1RGMTFPU0FsbG9jYXRvcjZjb21taXRF
UHZtYmIKLV9fWk4zSlNDNUxleGVyQzFFUE5TXzEySlNHbG9iYWxEYXRhRQorX19aTjNKU0M1TGV4
ZXJDMUVQTlNfMTJWTUUKIF9fWk4zSlNDMTFQYXJzZXJBcmVuYUMxRXYKIF9fWk4zSlNDMTFQYXJz
ZXJBcmVuYUMyRXYKIF9fWk4zSlNDMTRUaW1lb3V0Q2hlY2tlckMxRXYKLV9fWk4zSlNDNEhlYXBD
MUVQTlNfMTJKU0dsb2JhbERhdGFFCi1fX1pOM0pTQzRIZWFwQzJFUE5TXzEySlNHbG9iYWxEYXRh
RQotX19aTjNKU0MxMU1hcmtlZFNwYWNlQzFFUE5TXzEySlNHbG9iYWxEYXRhRQorX19aTjNKU0M0
SGVhcEMxRVBOU18xMlZNRQorX19aTjNKU0M0SGVhcEMyRVBOU18xMlZNRQorX19aTjNKU0MxMU1h
cmtlZFNwYWNlQzFFUE5TXzEyVk1FCiBfX1pOM0pTQzI1RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFj
a0MxRVBOU180SGVhcEUKIF9fWk4zSlNDMjVEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrMTdjb21t
b25Db25zdHJ1Y3RvckVQTlNfNEhlYXBFUDExX19DRlJ1bkxvb3AKIF9fWk4zSlNDMTRNYWNoaW5l
VGhyZWFkc0MxRVBOU180SGVhcEUKIF9fWk4zSlNDOU1hcmtTdGFjazE4aW5pdGlhbGl6ZVBhZ2Vz
aXplRXYKIF9fWk4zV1RGMTFPU0FsbG9jYXRvcjE2cmVzZXJ2ZUFuZENvbW1pdEVtTlMwXzVVc2Fn
ZUViYgotX19aTjNKU0MxMEhhbmRsZUhlYXBDMUVQTlNfMTJKU0dsb2JhbERhdGFFCitfX1pOM0pT
QzEwSGFuZGxlSGVhcEMxRVBOU18xMlZNRQogX19aTjNXVEYxMEJsb2NrU3RhY2tJTjNKU0MxMEhh
bmRsZUhlYXA0Tm9kZUVFNGdyb3dFdgogX19aTjNXVEY2VmVjdG9ySVBOM0pTQzEwSGFuZGxlSGVh
cDROb2RlRUxtMEVFMTVyZXNlcnZlQ2FwYWNpdHlFbQogX19aTjNKU0MxMUhhbmRsZVN0YWNrQzFF
dgogX19aTjNXVEYxMEJsb2NrU3RhY2tJTjNKU0M3SlNWYWx1ZUVFNGdyb3dFdgogX19aTjNXVEY2
VmVjdG9ySVBOM0pTQzdKU1ZhbHVlRUxtMEVFMTVyZXNlcnZlQ2FwYWNpdHlFbQogX19aTjNKU0My
NURlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2tjbEV2Ci1fX1pOM0pTQzExUmVnRXhwQ2FjaGVDMUVQ
TlNfMTJKU0dsb2JhbERhdGFFCi1fX1pOM0pTQzExSW50ZXJwcmV0ZXJDMUVSTlNfMTJKU0dsb2Jh
bERhdGFFCitfX1pOM0pTQzExUmVnRXhwQ2FjaGVDMUVQTlNfMTJWTUUKK19fWk4zSlNDMTFJbnRl
cnByZXRlckMxRVJOU18xMlZNRQogX19aTjNKU0MxMEhhbmRsZUhlYXAxMndyaXRlQmFycmllckVQ
TlNfN0pTVmFsdWVFUktTMV8KIF9fWk4zSlNDMTJKU1N0YWNrMjNhZGRUb0NvbW1pdHRlZEJ5dGVD
b3VudEVsCiBfX1pOM0pTQzExTWFya2VkU3BhY2UyMWFsbG9jYXRlRnJvbVNpemVDbGFzc0VSTlMw
XzlTaXplQ2xhc3NFCiBfX1pOM0pTQzExTWFya2VkU3BhY2UxM2FsbG9jYXRlQmxvY2tFUk5TMF85
U2l6ZUNsYXNzRQotX19aTjNKU0MxMU1hcmtlZEJsb2NrNmNyZWF0ZUVQTlNfMTJKU0dsb2JhbERh
dGFFbQorX19aTjNKU0MxMU1hcmtlZEJsb2NrNmNyZWF0ZUVQTlNfMTJWTUVtCiBfX1pOM1dURjIx
UGFnZUFsbG9jYXRpb25BbGlnbmVkOGFsbG9jYXRlRW1tTlNfMTFPU0FsbG9jYXRvcjVVc2FnZUVi
YgogX19aTjNXVEY5SGFzaFRhYmxlSVBOM0pTQzExTWFya2VkQmxvY2tFUzNfTlNfMTdJZGVudGl0
eUV4dHJhY3RvcklTM19FRU5TXzdQdHJIYXNoSVMzX0VFTlNfMTBIYXNoVHJhaXRzSVMzX0VFUzlf
RTZyZWhhc2hFaQogX19aTjNKU0M2SlNDZWxsRDFFdgotX19aTjNKU0M5U3RydWN0dXJlQzFFUk5T
XzEySlNHbG9iYWxEYXRhRQotX19aTjNKU0M2U3Ryb25nSU5TXzlTdHJ1Y3R1cmVFRTNzZXRFUk5T
XzEySlNHbG9iYWxEYXRhRVBTMV8KLV9fWk4zSlNDOVN0cnVjdHVyZTZjcmVhdGVFUk5TXzEySlNH
bG9iYWxEYXRhRU5TXzdKU1ZhbHVlRVJLTlNfOFR5cGVJbmZvRWpQS05TXzlDbGFzc0luZm9FCi1f
X1pOM0pTQzlTdHJ1Y3R1cmVDMUVSTlNfMTJKU0dsb2JhbERhdGFFTlNfN0pTVmFsdWVFUktOU184
VHlwZUluZm9FalBLTlNfOUNsYXNzSW5mb0UKK19fWk4zSlNDOVN0cnVjdHVyZUMxRVJOU18xMlZN
RQorX19aTjNKU0M2U3Ryb25nSU5TXzlTdHJ1Y3R1cmVFRTNzZXRFUk5TXzEyVk1FUFMxXworX19a
TjNKU0M5U3RydWN0dXJlNmNyZWF0ZUVSTlNfMTJWTUVOU183SlNWYWx1ZUVSS05TXzhUeXBlSW5m
b0VqUEtOU185Q2xhc3NJbmZvRQorX19aTjNKU0M5U3RydWN0dXJlQzFFUk5TXzEyVk1FTlNfN0pT
VmFsdWVFUktOU184VHlwZUluZm9FalBLTlNfOUNsYXNzSW5mb0UKIF9fWk4zV1RGMTN3dGZUaHJl
YWREYXRhRXYKIF9fWk4zSlNDMjdzdGFydFByb2ZpbGVyU2VydmVySWZOZWVkZWRFdgogK1tQcm9m
aWxlclNlcnZlciBzaGFyZWRQcm9maWxlU2VydmVyXQogLVtQcm9maWxlclNlcnZlciBpbml0XQot
X19aTjNKU0M5SklUVGh1bmtzQzFFUE5TXzEySlNHbG9iYWxEYXRhRQotX19aTjNKU0M5SklUVGh1
bmtzQzJFUE5TXzEySlNHbG9iYWxEYXRhRQotX19aTjNKU0MzSklUQzFFUE5TXzEySlNHbG9iYWxE
YXRhRVBOU185Q29kZUJsb2NrRQotX19aTjNKU0MzSklUQzJFUE5TXzEySlNHbG9iYWxEYXRhRVBO
U185Q29kZUJsb2NrRQotX19aTjNKU0MzSklUMzVwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFt
cG9saW5lc0VQTjNXVEY2UmVmUHRySU5TXzE0RXhlY3V0YWJsZVBvb2xFRUVQTlNfMTJKU0dsb2Jh
bERhdGFFUE5TXzE5VHJhbXBvbGluZVN0cnVjdHVyZUUKK19fWk4zSlNDOUpJVFRodW5rc0MxRVBO
U18xMlZNRQorX19aTjNKU0M5SklUVGh1bmtzQzJFUE5TXzEyVk1FCitfX1pOM0pTQzNKSVRDMUVQ
TlNfMTJWTUVQTlNfOUNvZGVCbG9ja0UKK19fWk4zSlNDM0pJVEMyRVBOU18xMlZNRVBOU185Q29k
ZUJsb2NrRQorX19aTjNKU0MzSklUMzVwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5l
c0VQTjNXVEY2UmVmUHRySU5TXzE0RXhlY3V0YWJsZVBvb2xFRUVQTlNfMTJWTUVQTlNfMTlUcmFt
cG9saW5lU3RydWN0dXJlRQogX19aTjNKU0MyME1hY3JvQXNzZW1ibGVyWDg2XzY0MTNicmFuY2hU
ZXN0UHRyRU5TXzIzTWFjcm9Bc3NlbWJsZXJYODZDb21tb24xNVJlc3VsdENvbmRpdGlvbkVOU18x
Mlg4NlJlZ2lzdGVyczEwUmVnaXN0ZXJJREVTNF8KIF9fWk4zSlNDMTJYODZBc3NlbWJsZXIyM1g4
Nkluc3RydWN0aW9uRm9ybWF0dGVyMTFvbmVCeXRlT3A2NEVOUzBfMTVPbmVCeXRlT3Bjb2RlSURF
aU5TXzEyWDg2UmVnaXN0ZXJzMTBSZWdpc3RlcklERQogX19aTjNKU0MxMlg4NkFzc2VtYmxlcjNq
Q0NFTlMwXzlDb25kaXRpb25FCkBAIC0xOTIsNyArMTkyLDcgQEAgX19aTjNKU0MyME1hY3JvQXNz
ZW1ibGVyWDg2XzY0MTNicmFuY2hUZQogX19aTjNKU0MxMlg4NkFzc2VtYmxlcjIzWDg2SW5zdHJ1
Y3Rpb25Gb3JtYXR0ZXI5b25lQnl0ZU9wRU5TMF8xNU9uZUJ5dGVPcGNvZGVJREVOU18xMlg4NlJl
Z2lzdGVyczEwUmVnaXN0ZXJJREUKIF9fWk4zV1RGNlZlY3RvckljTG0xMjhFRTE0ZXhwYW5kQ2Fw
YWNpdHlFbQogX19aTjNXVEY2VmVjdG9ySWNMbTEyOEVFNGdyb3dFbQotX19aTjNKU0MzSklUMjdw
cml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGxFUE5TXzEySlNHbG9iYWxEYXRhRWIKK19fWk4zSlND
M0pJVDI3cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsRVBOU18xMlZNRWIKIF9fWk5LM0pTQzIy
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcklOU18xMlg4NkFzc2VtYmxlckVFNEp1bXA0bGlua0VQUzJf
CiBfX1pOM1dURjEwUmVmQ291bnRlZElOM0pTQzE0RXhlY3V0YWJsZVBvb2xFRTVkZXJlZkV2CiBf
X1pOM0pTQzE0TWFjaGluZVRocmVhZHMyOW1ha2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzRXYK
QEAgLTIwMCw3ICsyMDAsNyBAQCBfSlNHbG9iYWxDb250ZXh0Q3JlYXRlSW5Hcm91cAogX19aTjNK
U0M0SGVhcDE2YWN0aXZpdHlDYWxsYmFja0V2CiBfX1pOM0pTQzI1RGVmYXVsdEdDQWN0aXZpdHlD
YWxsYmFjazExc3luY2hyb25pemVFdgogX19aTjNKU0MxNFRpbWVvdXRDaGVja2VyNXJlc2V0RXYK
LV9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdG53RW1QTlNfMTJKU0dsb2JhbERhdGFFCitfX1pOM0pT
QzE0SlNHbG9iYWxPYmplY3Rud0VtUE5TXzEyVk1FCiBfX1pOM1dURjEycmFuZG9tTnVtYmVyRXYK
IF9fWk4zV1RGMjljcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlckV2CiBfX1pOM1dURjM1Y3J5
cHRvZ3JhcGhpY2FsbHlSYW5kb21WYWx1ZXNGcm9tT1NFUGhtCkBAIC0yMDgsNTIgKzIwOCw1MiBA
QCBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3Q0aW5pdEVQTlNfOEpTT2JqCiBfX1pOM0pTQzE0SlNH
bG9iYWxPYmplY3Q1cmVzZXRFTlNfN0pTVmFsdWVFCiBfX1pOM0pTQzE3RnVuY3Rpb25Qcm90b3R5
cGVDMUVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0cnVjdHVyZUUK
IF9fWk4zSlNDMTdGdW5jdGlvblByb3RvdHlwZUMyRVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xv
YmFsT2JqZWN0RVBOU185U3RydWN0dXJlRQotX19aTjNKU0MxNkludGVybmFsRnVuY3Rpb25DMkVQ
TlNfMTJKU0dsb2JhbERhdGFFUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1cmVFUktO
U18xMElkZW50aWZpZXJFCitfX1pOM0pTQzE2SW50ZXJuYWxGdW5jdGlvbkMyRVBOU18xMlZNRVBO
U18xNEpTR2xvYmFsT2JqZWN0RVBOU185U3RydWN0dXJlRVJLTlNfMTBJZGVudGlmaWVyRQogX19a
TjNKU0MyNEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdEMyRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBO
U185U3RydWN0dXJlRQogX19aTjNKU0M3VVN0cmluZ0MxRVBLYwotX19aTjNKU0MxMlNtYWxsU3Ry
aW5nczE3Y3JlYXRlRW1wdHlTdHJpbmdFUE5TXzEySlNHbG9iYWxEYXRhRQorX19aTjNKU0MxMlNt
YWxsU3RyaW5nczE3Y3JlYXRlRW1wdHlTdHJpbmdFUE5TXzEyVk1FCiBfX1pOM0pTQzlTdHJ1Y3R1
cmU0MGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVFUFMwX1JLTlNfMTBJ
ZGVudGlmaWVyRWpQTlNfNkpTQ2VsbEVSbQotX19aTjNKU0M5U3RydWN0dXJlM2dldEVSTlNfMTJK
U0dsb2JhbERhdGFFUE4zV1RGMTBTdHJpbmdJbXBsRVJqUlBOU182SlNDZWxsRQotX19aTjNKU0M5
U3RydWN0dXJlMjFhZGRQcm9wZXJ0eVRyYW5zaXRpb25FUk5TXzEySlNHbG9iYWxEYXRhRVBTMF9S
S05TXzEwSWRlbnRpZmllckVqUE5TXzZKU0NlbGxFUm0KK19fWk4zSlNDOVN0cnVjdHVyZTNnZXRF
Uk5TXzEyVk1FUE4zV1RGMTBTdHJpbmdJbXBsRVJqUlBOU182SlNDZWxsRQorX19aTjNKU0M5U3Ry
dWN0dXJlMjFhZGRQcm9wZXJ0eVRyYW5zaXRpb25FUk5TXzEyVk1FUFMwX1JLTlNfMTBJZGVudGlm
aWVyRWpQTlNfNkpTQ2VsbEVSbQogX19aTjNKU0M5U3RydWN0dXJlMTdjcmVhdGVQcm9wZXJ0eU1h
cEVqCiBfX1pOM1dURjE0ZGVsZXRlT3duZWRQdHJJTjNKU0MxM1Byb3BlcnR5VGFibGVFRUV2UFRf
Ci1fX1pOM0pTQzlTdHJ1Y3R1cmUxNnB1dFNwZWNpZmljVmFsdWVFUk5TXzEySlNHbG9iYWxEYXRh
RVJLTlNfMTBJZGVudGlmaWVyRWpQTlNfNkpTQ2VsbEUKLV9fWk4zSlNDMjRTdHJ1Y3R1cmVUcmFu
c2l0aW9uVGFibGUzYWRkRVJOU18xMkpTR2xvYmFsRGF0YUVQTlNfOVN0cnVjdHVyZUUKLV9fWk4z
SlNDOVN0cnVjdHVyZTI4YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbkVSTlNfMTJKU0dsb2Jh
bERhdGFFUktOU18xMElkZW50aWZpZXJFalBOU182SlNDZWxsRQorX19aTjNKU0M5U3RydWN0dXJl
MTZwdXRTcGVjaWZpY1ZhbHVlRVJOU18xMlZNRVJLTlNfMTBJZGVudGlmaWVyRWpQTlNfNkpTQ2Vs
bEUKK19fWk4zSlNDMjRTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUzYWRkRVJOU18xMlZNRVBOU185
U3RydWN0dXJlRQorX19aTjNKU0M5U3RydWN0dXJlMjhhZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0
aW9uRVJOU18xMlZNRVJLTlNfMTBJZGVudGlmaWVyRWpQTlNfNkpTQ2VsbEUKIF9fWk4zSlNDOEpT
T2JqZWN0MjNhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZUVtbQogX19aTjNKU0MxN0Z1bmN0aW9uUHJv
dG90eXBlMjFhZGRGdW5jdGlvblByb3BlcnRpZXNFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9i
YWxPYmplY3RFUE5TXzlTdHJ1Y3R1cmVFUFBOU18xMEpTRnVuY3Rpb25FUzlfCiBfX1pOM0pTQzEw
SlNGdW5jdGlvbkMxRVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBOU185U3Ry
dWN0dXJlRWlSS05TXzEwSWRlbnRpZmllckVQRlB2UzJfRQogX19aTjNKU0MxMEpTRnVuY3Rpb25D
MkVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0cnVjdHVyZUVpUktO
U18xMElkZW50aWZpZXJFUEZQdlMyX0UKLV9fWk4zSlNDMTJKU0dsb2JhbERhdGExNWdldEhvc3RG
dW5jdGlvbkVQRlB2UE5TXzlFeGVjU3RhdGVFRQotX19aTjNKU0M5SklUVGh1bmtzMTZob3N0RnVu
Y3Rpb25TdHViRVBOU18xMkpTR2xvYmFsRGF0YUVQRlB2UE5TXzlFeGVjU3RhdGVFRQorX19aTjNK
U0MxMlZNMTVnZXRIb3N0RnVuY3Rpb25FUEZQdlBOU185RXhlY1N0YXRlRUUKK19fWk4zSlNDOUpJ
VFRodW5rczE2aG9zdEZ1bmN0aW9uU3R1YkVQTlNfMTJWTUVQRlB2UE5TXzlFeGVjU3RhdGVFRQog
X19aTjNXVEY3SGFzaE1hcElQRlB2UE4zSlNDOUV4ZWNTdGF0ZUVFTlMyXzRXZWFrSU5TMl8xNk5h
dGl2ZUV4ZWN1dGFibGVFRUVOU183UHRySGFzaElTNl9FRU5TXzEwSGFzaFRyYWl0c0lTNl9FRU5T
Q19JUzlfRUVFM2FkZEVSS1M2X1JLUzlfCiBfX1pOM1dURjlIYXNoVGFibGVJUEZQdlBOM0pTQzlF
eGVjU3RhdGVFRVN0NHBhaXJJUzZfTlMyXzRXZWFrSU5TMl8xNk5hdGl2ZUV4ZWN1dGFibGVFRUVF
TlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJU0JfRUVOU183UHRySGFzaElTNl9FRU5TXzE0UGFpckhh
c2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVM2X0VFTlNIX0lTQV9FRUVFU0lfRTZleHBhbmRFdgot
X19aTjNKU0MzSklUMjdwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGxFTjNXVEYxMFBhc3NSZWZQ
dHJJTlNfMTRFeGVjdXRhYmxlUG9vbEVFRVBOU18xMkpTR2xvYmFsRGF0YUVQRlB2UE5TXzlFeGVj
U3RhdGVFRQotX19aTjNKU0MxNk5hdGl2ZUV4ZWN1dGFibGU2Y3JlYXRlRVJOU18xMkpTR2xvYmFs
RGF0YUVOU18yMU1hY3JvQXNzZW1ibGVyQ29kZVB0ckVQRlB2UE5TXzlFeGVjU3RhdGVFRVMzX1M4
XworX19aTjNKU0MzSklUMjdwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGxFTjNXVEYxMFBhc3NS
ZWZQdHJJTlNfMTRFeGVjdXRhYmxlUG9vbEVFRVBOU18xMlZNRVBGUHZQTlNfOUV4ZWNTdGF0ZUVF
CitfX1pOM0pTQzE2TmF0aXZlRXhlY3V0YWJsZTZjcmVhdGVFUk5TXzEyVk1FTlNfMjFNYWNyb0Fz
c2VtYmxlckNvZGVQdHJFUEZQdlBOU185RXhlY1N0YXRlRUVTM19TOF8KIF9fWk4zSlNDOEpTT2Jq
ZWN0MzRwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uRVBOU185RXhlY1N0YXRlRVBO
U18xMEpTRnVuY3Rpb25FagogX19aTjNKU0MxMEpTRnVuY3Rpb240bmFtZUVQTlNfOUV4ZWNTdGF0
ZUUKIF9fWk4zSlNDMTVPYmplY3RQcm90b3R5cGVDMUVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0ds
b2JhbE9iamVjdEVQTlNfOVN0cnVjdHVyZUUKIF9fWk4zSlNDMTRBcnJheVByb3RvdHlwZUMxRVBO
U18xNEpTR2xvYmFsT2JqZWN0RVBOU185U3RydWN0dXJlRQotX19aTjNKU0M3SlNBcnJheUMyRVJO
U18xMkpTR2xvYmFsRGF0YUVQTlNfOVN0cnVjdHVyZUUKK19fWk4zSlNDN0pTQXJyYXlDMkVSTlNf
MTJWTUVQTlNfOVN0cnVjdHVyZUUKIF9fWk4zSlNDMTVTdHJpbmdQcm90b3R5cGVDMUVQTlNfOUV4
ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0cnVjdHVyZUUKIF9fWk4zSlNDMTVT
dHJpbmdQcm90b3R5cGVDMkVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNf
OVN0cnVjdHVyZUUKIF9fWk4zSlNDMTJTdHJpbmdPYmplY3RDMkVQTlNfOUV4ZWNTdGF0ZUVQTlNf
OVN0cnVjdHVyZUUKIF9fWk4zSlNDMTZCb29sZWFuUHJvdG90eXBlQzFFUE5TXzlFeGVjU3RhdGVF
UE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1cmVFCi1fX1pOM0pTQzEzQm9vbGVhbk9i
amVjdEMyRVJOU18xMkpTR2xvYmFsRGF0YUVQTlNfOVN0cnVjdHVyZUUKK19fWk4zSlNDMTNCb29s
ZWFuT2JqZWN0QzJFUk5TXzEyVk1FUE5TXzlTdHJ1Y3R1cmVFCiBfX1pOM0pTQzE1TnVtYmVyUHJv
dG90eXBlQzFFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1
cmVFCi1fX1pOM0pTQzEyTnVtYmVyT2JqZWN0QzJFUk5TXzEySlNHbG9iYWxEYXRhRVBOU185U3Ry
dWN0dXJlRQorX19aTjNKU0MxMk51bWJlck9iamVjdEMyRVJOU18xMlZNRVBOU185U3RydWN0dXJl
RQogX19aTjNKU0MxM0RhdGVQcm90b3R5cGVDMUVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2Jh
bE9iamVjdEVQTlNfOVN0cnVjdHVyZUUKIF9fWk4zSlNDMTJEYXRlSW5zdGFuY2VDMkVQTlNfOUV4
ZWNTdGF0ZUVQTlNfOVN0cnVjdHVyZUUKIF9fWk4zSlNDMTJub25JbmxpbmVOYU5FdgogX19aTjNK
U0MxNVJlZ0V4cFByb3RvdHlwZUMxRVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0
RVBOU185U3RydWN0dXJlRQogX19aTjNKU0MxNVJlZ0V4cFByb3RvdHlwZUMyRVBOU185RXhlY1N0
YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBOU185U3RydWN0dXJlRQotX19aTjNKU0M2UmVnRXhw
NmNyZWF0ZUVQTlNfMTJKU0dsb2JhbERhdGFFUktOU183VVN0cmluZ0VOU18xMVJlZ0V4cEZsYWdz
RQotX19aTjNKU0M2UmVnRXhwN2NvbXBpbGVFUE5TXzEySlNHbG9iYWxEYXRhRQorX19aTjNKU0M2
UmVnRXhwNmNyZWF0ZUVQTlNfMTJWTUVSS05TXzdVU3RyaW5nRU5TXzExUmVnRXhwRmxhZ3NFCitf
X1pOM0pTQzZSZWdFeHA3Y29tcGlsZUVQTlNfMTJWTUUKIF9fWk4zSlNDNFlhcnIxMVlhcnJQYXR0
ZXJuQzFFUktOU183VVN0cmluZ0ViYlBQS2MKIF9fWk4zSlNDNFlhcnIxMVlhcnJQYXR0ZXJuN2Nv
bXBpbGVFUktOU183VVN0cmluZ0UKIF9fWk4zV1RGNlZlY3RvcklQTjNKU0M0WWFycjE4UGF0dGVy
bkFsdGVybmF0aXZlRUxtMEVFMTRleHBhbmRDYXBhY2l0eUVtCiBfX1pOM0pTQzRZYXJyNlBhcnNl
cklOUzBfMjJZYXJyUGF0dGVybkNvbnN0cnVjdG9yRUU1cGFyc2VFdgotX19aTjNKU0M0WWFycjEw
aml0Q29tcGlsZUVSTlMwXzExWWFyclBhdHRlcm5FUE5TXzEySlNHbG9iYWxEYXRhRVJOUzBfMTNZ
YXJyQ29kZUJsb2NrRQorX19aTjNKU0M0WWFycjEwaml0Q29tcGlsZUVSTlMwXzExWWFyclBhdHRl
cm5FUE5TXzEyVk1FUk5TMF8xM1lhcnJDb2RlQmxvY2tFCiBfX1pOM0pTQzRZYXJyMTNZYXJyR2Vu
ZXJhdG9yMTNvcENvbXBpbGVCb2R5RVBOUzBfMThQYXR0ZXJuRGlzanVuY3Rpb25FCiBfX1pOM1dU
RjZWZWN0b3JJTjNKU0MyMkFic3RyYWN0TWFjcm9Bc3NlbWJsZXJJTlMxXzEyWDg2QXNzZW1ibGVy
RUU0SnVtcEVMbTE2RUVEMUV2CiBfX1pOM0pTQzRZYXJyMTNZYXJyR2VuZXJhdG9yMjBvcENvbXBp
bGVBbHRlcm5hdGl2ZUVQTlMwXzE4UGF0dGVybkFsdGVybmF0aXZlRQpAQCAtMjY5LDcgKzI2OSw3
IEBAIF9fWk4zV1RGMTVkZWxldGVBbGxWYWx1ZXNJUE4zSlNDNFlhcnIxOFAKIF9fWk4zV1RGMTVk
ZWxldGVBbGxWYWx1ZXNJUE4zSlNDNFlhcnIxNENoYXJhY3RlckNsYXNzRUxtMEVFRXZSS05TXzZW
ZWN0b3JJVF9YVDBfRUVFCiBfX1pOM0pTQzE0RXJyb3JQcm90b3R5cGVDMUVQTlNfOUV4ZWNTdGF0
ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0cnVjdHVyZUUKIF9fWk4zSlNDMTRFcnJvclBy
b3RvdHlwZUMyRVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBOU185U3RydWN0
dXJlRQotX19aTjNKU0MxM0Vycm9ySW5zdGFuY2VDMkVQTlNfMTJKU0dsb2JhbERhdGFFUE5TXzlT
dHJ1Y3R1cmVFCitfX1pOM0pTQzEzRXJyb3JJbnN0YW5jZUMyRVBOU18xMlZNRVBOU185U3RydWN0
dXJlRQogX19aTjNKU0MxN09iamVjdENvbnN0cnVjdG9yQzFFUE5TXzlFeGVjU3RhdGVFUE5TXzE0
SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1cmVFUE5TXzE1T2JqZWN0UHJvdG90eXBlRQogX19a
TjNKU0MxN09iamVjdENvbnN0cnVjdG9yQzJFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxP
YmplY3RFUE5TXzlTdHJ1Y3R1cmVFUE5TXzE1T2JqZWN0UHJvdG90eXBlRQogX19aTjNKU0MxMElk
ZW50aWZpZXIzYWRkRVBOU185RXhlY1N0YXRlRVBLYwpAQCAtMzAzLDggKzMwMyw4IEBAIF9fWk4z
SlNDMTlTbWFsbFN0cmluZ3NTdG9yYWdlQzJFdgogX19aTjNKU0MxMEpTT05PYmplY3RDMUVQTlNf
MTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0cnVjdHVyZUUKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVj
dDE2YWRkU3RhdGljR2xvYmFsc0VQTlMwXzE4R2xvYmFsUHJvcGVydHlJbmZvRWkKIF9fWk4zV1RG
N0hhc2hNYXBJTlNfNlJlZlB0cklOU18xMFN0cmluZ0ltcGxFRUVOM0pTQzE2U3ltYm9sVGFibGVF
bnRyeUVOUzRfMTdJZGVudGlmaWVyUmVwSGFzaEVOU18xMEhhc2hUcmFpdHNJUzNfRUVOUzRfMjZT
eW1ib2xUYWJsZUluZGV4SGFzaFRyYWl0c0VFM2FkZEVQUzJfUktTNV8KLV9fWk4zSlNDOVN0cnVj
dHVyZTI1Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbkVSTlNfMTJKU0dsb2JhbERhdGFFUFMwX05T
XzdKU1ZhbHVlRQotX19aTjNKU0M5U3RydWN0dXJlMTdjb3B5UHJvcGVydHlUYWJsZUVSTlNfMTJK
U0dsb2JhbERhdGFFUFMwXworX19aTjNKU0M5U3RydWN0dXJlMjVjaGFuZ2VQcm90b3R5cGVUcmFu
c2l0aW9uRVJOU18xMlZNRVBTMF9OU183SlNWYWx1ZUUKK19fWk4zSlNDOVN0cnVjdHVyZTE3Y29w
eVByb3BlcnR5VGFibGVFUk5TXzEyVk1FUFMwXwogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0MTBn
bG9iYWxFeGVjRXYKIF9KU0dsb2JhbENvbnRleHRSZXRhaW4KIF9fWk4zSlNDMTRNYWNoaW5lVGhy
ZWFkczE2YWRkQ3VycmVudFRocmVhZEV2CkBAIC0zMTcsNyArMzE3LDcgQEAgX19aTksxNE9wYXF1
ZUpTU3RyaW5nN3VzdHJpbmdFdgogX19aTjNKU0M3VVN0cmluZ0MxRVBLdGoKIF9fWk4zSlNDMTNM
aXRlcmFsUGFyc2VyNUxleGVyM2xleEVSTlMxXzE4TGl0ZXJhbFBhcnNlclRva2VuRQogX19aTjNK
U0MxM0xpdGVyYWxQYXJzZXI1cGFyc2VFTlMwXzExUGFyc2VyU3RhdGVFCi1fX1pOM0pTQzdKU0Fy
cmF5QzFFUk5TXzEySlNHbG9iYWxEYXRhRVBOU185U3RydWN0dXJlRQorX19aTjNKU0M3SlNBcnJh
eUMxRVJOU18xMlZNRVBOU185U3RydWN0dXJlRQogX19aTjNXVEYxM1N0cmluZ0J1aWxkZXI2YXBw
ZW5kRVBLdGoKIF9fWk4zV1RGMTNTdHJpbmdCdWlsZGVyMTlhcHBlbmRVbmluaXRpYWxpemVkRWoK
IF9fWk4zV1RGMTNTdHJpbmdCdWlsZGVyMTRhbGxvY2F0ZUJ1ZmZlckVQS3RqCkBAIC0zNDAsOCAr
MzQwLDggQEAgX0pTQ29udGV4dEdldEdsb2JhbE9iamVjdAogX19aTkszSlNDOEpTT2JqZWN0MTJ0
b1RoaXNPYmplY3RFUE5TXzlFeGVjU3RhdGVFCiBfSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcKIF9KU09iamVjdEdldFByb3BlcnR5Ci1fX1pOSzE0T3BhcXVlSlNTdHJpbmcxMGlkZW50aWZp
ZXJFUE4zSlNDMTJKU0dsb2JhbERhdGFFCi1fX1pOM0pTQzEwSWRlbnRpZmllcjNhZGRFUE5TXzEy
SlNHbG9iYWxEYXRhRVBLdGkKK19fWk5LMTRPcGFxdWVKU1N0cmluZzEwaWRlbnRpZmllckVQTjNK
U0MxMlZNRQorX19aTjNKU0MxMElkZW50aWZpZXIzYWRkRVBOU18xMlZNRVBLdGkKIF9fWk4zSlND
MTRKU0dsb2JhbE9iamVjdDE4Z2V0T3duUHJvcGVydHlTbG90RVBOU185RXhlY1N0YXRlRVJLTlNf
MTBJZGVudGlmaWVyRVJOU18xMlByb3BlcnR5U2xvdEUKIF9KU1ZhbHVlSXNJbnN0YW5jZU9mQ29u
c3RydWN0b3IKIF9fWk4zSlNDMTZBcnJheUNvbnN0cnVjdG9yMThnZXRPd25Qcm9wZXJ0eVNsb3RF
UE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUk5TXzEyUHJvcGVydHlTbG90RQpAQCAt
MzYwLDEwICszNjAsMTAgQEAgX19aTjNKU0M0SGVhcDl1bnByb3RlY3RFTlNfN0pTVmFsdWVFCiBf
X1pOM1dURjlIYXNoVGFibGVJUE4zSlNDNkpTQ2VsbEVTdDRwYWlySVMzX2pFTlNfMThQYWlyRmly
c3RFeHRyYWN0b3JJUzVfRUVOU183UHRySGFzaElTM19FRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNf
MTBIYXNoVHJhaXRzSVMzX0VFTlNCX0lqRUVFRVNDX0U0ZmluZElTM19OU18yMklkZW50aXR5SGFz
aFRyYW5zbGF0b3JJUzNfUzVfUzlfRUVFRU5TXzE3SGFzaFRhYmxlSXRlcmF0b3JJUzNfUzVfUzdf
UzlfU0VfU0NfRUVSS1RfCiBfX1pOM1dURjlIYXNoVGFibGVJUE4zSlNDNkpTQ2VsbEVTdDRwYWly
SVMzX2pFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzVfRUVOU183UHRySGFzaElTM19FRU5TXzE0
UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMzX0VFTlNCX0lqRUVFRVNDX0U2cmVoYXNo
RWkKIF9fWk4zSlNDMTBIYW5kbGVIZWFwNGdyb3dFdgotX19aTjNKU0MxMlNtYWxsU3RyaW5nczI3
Y3JlYXRlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nRVBOU18xMkpTR2xvYmFsRGF0YUVoCitfX1pOM0pT
QzEyU21hbGxTdHJpbmdzMjdjcmVhdGVTaW5nbGVDaGFyYWN0ZXJTdHJpbmdFUE5TXzEyVk1FaAog
X19aTjNKU0MzN0RlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2tQbGF0Zm9ybURhdGE3dHJpZ2dlckVQ
MTZfX0NGUnVuTG9vcFRpbWVyUHYKIF9fWk4zSlNDNEhlYXAxN2NvbGxlY3RBbGxHYXJiYWdlRXYK
LV9fWk4zSlNDMTJKU0dsb2JhbERhdGEyM3JlY29tcGlsZUFsbEpTRnVuY3Rpb25zRXYKK19fWk4z
SlNDMTJWTTIzcmVjb21waWxlQWxsSlNGdW5jdGlvbnNFdgogX19aTjNKU0M0SGVhcDVyZXNldEVO
UzBfMTFTd2VlcFRvZ2dsZUUKIF9fWk4zSlNDNEhlYXA5bWFya1Jvb3RzRXYKIF9fWk4zSlNDMTRN
YWNoaW5lVGhyZWFkczIzZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHNFUk5TXzE3Q29uc2VydmF0aXZl
Um9vdHNFUHYKQEAgLTQzOSwyMCArNDM5LDIwIEBAIF9fWk4zV1RGNnN0cnRvZEVQS2NQUGMKIF9f
Wk4zV1RGMTBTdHJpbmdJbXBsMjJjb250YWluc09ubHlXaGl0ZXNwYWNlRXYKIF9fWk4zV1RGMTBT
dHJpbmdJbXBsMTFyZXZlcnNlRmluZEVQUzBfagogX19aTjNXVEYxN2VxdWFsSWdub3JpbmdDYXNl
RVBOU18xMFN0cmluZ0ltcGxFUzFfCi1fX1pOM0pTQzEySlNHbG9iYWxEYXRhMTJjcmVhdGVMZWFr
ZWRFTlNfOEhlYXBUeXBlRQotX19aTjNKU0MyNEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdEMyRVJO
U18xMkpTR2xvYmFsRGF0YUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0cnVjdHVyZUUKK19f
Wk4zSlNDMTJWTTEyY3JlYXRlTGVha2VkRU5TXzhIZWFwVHlwZUUKK19fWk4zSlNDMjRKU09iamVj
dFdpdGhHbG9iYWxPYmplY3RDMkVSTlNfMTJWTUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0
cnVjdHVyZUUKIF9fWk4zSlNDOGV2YWx1YXRlRVBOU185RXhlY1N0YXRlRVBOU18xNFNjb3BlQ2hh
aW5Ob2RlRVJLTlNfMTBTb3VyY2VDb2RlRU5TXzdKU1ZhbHVlRQogX19aTjNKU0MxN1Byb2dyYW1F
eGVjdXRhYmxlQzFFUE5TXzlFeGVjU3RhdGVFUktOU18xMFNvdXJjZUNvZGVFCiBfX1pOM0pTQzEx
SW50ZXJwcmV0ZXI3ZXhlY3V0ZUVQTlNfMTdQcm9ncmFtRXhlY3V0YWJsZUVQTlNfOUV4ZWNTdGF0
ZUVQTlNfMTRTY29wZUNoYWluTm9kZUVQTlNfOEpTT2JqZWN0RQotX19aTjNKU0MyNER5bmFtaWNH
bG9iYWxPYmplY3RTY29wZUMxRVJOU18xMkpTR2xvYmFsRGF0YUVQTlNfMTRKU0dsb2JhbE9iamVj
dEUKK19fWk4zSlNDMjREeW5hbWljR2xvYmFsT2JqZWN0U2NvcGVDMUVSTlNfMTJWTUVQTlNfMTRK
U0dsb2JhbE9iamVjdEUKIF9fWk4zSlNDMTlFeGVjdXRhYmxlQWxsb2NhdG9yMTl1bmRlck1lbW9y
eVByZXNzdXJlRXYKLV9fWk4zSlNDMTJKU0dsb2JhbERhdGExNHJlc2V0RGF0ZUNhY2hlRXYKK19f
Wk4zSlNDMTJWTTE0cmVzZXREYXRlQ2FjaGVFdgogX19aTjNKU0MxN1Byb2dyYW1FeGVjdXRhYmxl
MTVjb21waWxlSW50ZXJuYWxFUE5TXzlFeGVjU3RhdGVFUE5TXzE0U2NvcGVDaGFpbk5vZGVFCiBf
X1pOM0pTQzZQYXJzZXI1cGFyc2VJTlNfMTFQcm9ncmFtTm9kZUVFRU4zV1RGMTBQYXNzUmVmUHRy
SVRfRUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfOERlYnVnZ2VyRVBOU185RXhlY1N0YXRlRVJL
TlNfMTBTb3VyY2VDb2RlRVBOU18xOEZ1bmN0aW9uUGFyYW1ldGVyc0VOU18xOEpTUGFyc2VyU3Ry
aWN0bmVzc0VQUE5TXzhKU09iamVjdEUKLV9fWk4zSlNDNlBhcnNlcjVwYXJzZUVQTlNfMTJKU0ds
b2JhbERhdGFFUE5TXzE4RnVuY3Rpb25QYXJhbWV0ZXJzRU5TXzE4SlNQYXJzZXJTdHJpY3RuZXNz
RU5TXzEySlNQYXJzZXJNb2RlRVBpUE5TXzdVU3RyaW5nRQorX19aTjNKU0M2UGFyc2VyNXBhcnNl
RVBOU18xMlZNRVBOU18xOEZ1bmN0aW9uUGFyYW1ldGVyc0VOU18xOEpTUGFyc2VyU3RyaWN0bmVz
c0VOU18xMkpTUGFyc2VyTW9kZUVQaVBOU183VVN0cmluZ0UKIF9fWk4zSlNDNUxleGVyN3NldENv
ZGVFUktOU18xMFNvdXJjZUNvZGVFUk5TXzExUGFyc2VyQXJlbmFFCi1fX1pOM0pTQzdqc1BhcnNl
RVBOU18xMkpTR2xvYmFsRGF0YUVQTlNfMThGdW5jdGlvblBhcmFtZXRlcnNFTlNfMThKU1BhcnNl
clN0cmljdG5lc3NFTlNfMTJKU1BhcnNlck1vZGVFUEtOU18xMFNvdXJjZUNvZGVFCi1fX1pOM0pT
QzhKU1BhcnNlckMyRVBOU181TGV4ZXJFUE5TXzEySlNHbG9iYWxEYXRhRVBOU18xOEZ1bmN0aW9u
UGFyYW1ldGVyc0ViYlBOU18xNFNvdXJjZVByb3ZpZGVyRQorX19aTjNKU0M3anNQYXJzZUVQTlNf
MTJWTUVQTlNfMThGdW5jdGlvblBhcmFtZXRlcnNFTlNfMThKU1BhcnNlclN0cmljdG5lc3NFTlNf
MTJKU1BhcnNlck1vZGVFUEtOU18xMFNvdXJjZUNvZGVFCitfX1pOM0pTQzhKU1BhcnNlckMyRVBO
U181TGV4ZXJFUE5TXzEyVk1FUE5TXzE4RnVuY3Rpb25QYXJhbWV0ZXJzRWJiUE5TXzE0U291cmNl
UHJvdmlkZXJFCiBfX1pOM0pTQzhKU1BhcnNlcjlwdXNoU2NvcGVFdgogX19aTjNKU0M4SlNQYXJz
ZXI0bmV4dEVOU181TGV4ZXI3TGV4VHlwZUUKIF9fWk4zSlNDNUxleGVyM2xleEVQTlNfMTFKU1Rv
a2VuRGF0YUVQTlNfMTFKU1Rva2VuSW5mb0VOUzBfN0xleFR5cGVFYgpAQCAtNDY0LDggKzQ2NCw4
IEBAIF9fWk4zSlNDOEpTUGFyc2VyMTRwYXJzZVN0YXRlbWVudElOU18xMEEKIF9fWk4zSlNDNlBh
cnNlcjE2ZGlkRmluaXNoUGFyc2luZ0VQTlNfMTRTb3VyY2VFbGVtZW50c0VQTlNfMTVQYXJzZXJB
cmVuYURhdGFJTjNXVEY2VmVjdG9ySVN0NHBhaXJJUEtOU18xMElkZW50aWZpZXJFakVMbTBFRUVF
RVBOUzNfSU5TNV9JUE5TXzE2RnVuY3Rpb25Cb2R5Tm9kZUVMbTBFRUVFRWppaVJOUzRfN0hhc2hT
ZXRJTlM0XzZSZWZQdHJJTlM0XzEwU3RyaW5nSW1wbEVFRU5TXzE3SWRlbnRpZmllclJlcEhhc2hF
TlM0XzEwSGFzaFRyYWl0c0lTTV9FRUVFCiBfX1pOM0pTQzExUGFyc2VyQXJlbmFEMUV2CiBfX1pO
M0pTQzVMZXhlcjVjbGVhckV2Ci1fX1pOM0pTQzExUHJvZ3JhbU5vZGU2Y3JlYXRlRVBOU18xMkpT
R2xvYmFsRGF0YUVQTlNfMTRTb3VyY2VFbGVtZW50c0VQTjNXVEY2VmVjdG9ySVN0NHBhaXJJUEtO
U18xMElkZW50aWZpZXJFakVMbTBFRUVQTlM2X0lQTlNfMTZGdW5jdGlvbkJvZHlOb2RlRUxtMEVF
RVJOUzVfN0hhc2hTZXRJTlM1XzZSZWZQdHJJTlM1XzEwU3RyaW5nSW1wbEVFRU5TXzE3SWRlbnRp
ZmllclJlcEhhc2hFTlM1XzEwSGFzaFRyYWl0c0lTTF9FRUVFUktOU18xMFNvdXJjZUNvZGVFamkK
LV9fWk4zSlNDOVNjb3BlTm9kZUMyRVBOU18xMkpTR2xvYmFsRGF0YUVSS05TXzEwU291cmNlQ29k
ZUVQTlNfMTRTb3VyY2VFbGVtZW50c0VQTjNXVEY2VmVjdG9ySVN0NHBhaXJJUEtOU18xMElkZW50
aWZpZXJFakVMbTBFRUVQTlM5X0lQTlNfMTZGdW5jdGlvbkJvZHlOb2RlRUxtMEVFRVJOUzhfN0hh
c2hTZXRJTlM4XzZSZWZQdHJJTlM4XzEwU3RyaW5nSW1wbEVFRU5TXzE3SWRlbnRpZmllclJlcEhh
c2hFTlM4XzEwSGFzaFRyYWl0c0lTT19FRUVFamkKK19fWk4zSlNDMTFQcm9ncmFtTm9kZTZjcmVh
dGVFUE5TXzEyVk1FUE5TXzE0U291cmNlRWxlbWVudHNFUE4zV1RGNlZlY3RvcklTdDRwYWlySVBL
TlNfMTBJZGVudGlmaWVyRWpFTG0wRUVFUE5TNl9JUE5TXzE2RnVuY3Rpb25Cb2R5Tm9kZUVMbTBF
RUVSTlM1XzdIYXNoU2V0SU5TNV82UmVmUHRySU5TNV8xMFN0cmluZ0ltcGxFRUVOU18xN0lkZW50
aWZpZXJSZXBIYXNoRU5TNV8xMEhhc2hUcmFpdHNJU0xfRUVFRVJLTlNfMTBTb3VyY2VDb2RlRWpp
CitfX1pOM0pTQzlTY29wZU5vZGVDMkVQTlNfMTJWTUVSS05TXzEwU291cmNlQ29kZUVQTlNfMTRT
b3VyY2VFbGVtZW50c0VQTjNXVEY2VmVjdG9ySVN0NHBhaXJJUEtOU18xMElkZW50aWZpZXJFakVM
bTBFRUVQTlM5X0lQTlNfMTZGdW5jdGlvbkJvZHlOb2RlRUxtMEVFRVJOUzhfN0hhc2hTZXRJTlM4
XzZSZWZQdHJJTlM4XzEwU3RyaW5nSW1wbEVFRU5TXzE3SWRlbnRpZmllclJlcEhhc2hFTlM4XzEw
SGFzaFRyYWl0c0lTT19FRUVFamkKIF9fWk4zSlNDMTFQYXJzZXJBcmVuYTE0ZGVyZWZXaXRoQXJl
bmFFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMjFQYXJzZXJBcmVuYVJlZkNvdW50ZWRFRUUKIF9fWk4z
SlNDMTFQYXJzZXJBcmVuYTEwcmVtb3ZlTGFzdEV2CiBfX1pOM0pTQzExUGFyc2VyQXJlbmE1cmVz
ZXRFdgpAQCAtNTE0LDcgKzUxNCw3IEBAIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDEzY29weUds
b2JhbHNUb0UKIF9fWk4zSlNDMTJKU1N0YWNrMTVzZXRHbG9iYWxPYmplY3RFUE5TXzE0SlNHbG9i
YWxPYmplY3RFCiBfY3RpVHJhbXBvbGluZQogX19aTjNXVEYxNVNlZ21lbnRlZFZlY3RvcklOM0pT
QzEwSWRlbnRpZmllckVMbTY0RUU2YXBwZW5kSVMyX0VFdlJLVF8KLV9fWk5LM0pTQzlIYXNoVGFi
bGUxMWNyZWF0ZVRhYmxlRVBOU18xMkpTR2xvYmFsRGF0YUUKK19fWk5LM0pTQzlIYXNoVGFibGUx
MWNyZWF0ZVRhYmxlRVBOU18xMlZNRQogX19aTjNKU0M4SlNQYXJzZXIzMXBhcnNlRXhwcmVzc2lv
bk9yTGFiZWxTdGF0ZW1lbnRJTlNfMTBBU1RCdWlsZGVyRUVFTlRfOVN0YXRlbWVudEVSUzNfCiBf
X1pOM0pTQzVMZXhlcjE2bmV4dFRva2VuSXNDb2xvbkV2CiBfX1pOM0pTQzhKU1BhcnNlcjE1cGFy
c2VFeHByZXNzaW9uSU5TXzEwQVNUQnVpbGRlckVFRU5UXzEwRXhwcmVzc2lvbkVSUzNfCkBAIC01
NjAsOSArNTYwLDkgQEAgX19aTjNKU0MyOGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3JFUAog
X19aTjNKU0MxMW1ha2VVU3RyaW5nSVBLY05TXzdVU3RyaW5nRUVFUzNfVF9UMF8KIF9fWk4zV1RG
MTN0cnlNYWtlU3RyaW5nSVBLY04zSlNDN1VTdHJpbmdFRUVOU18xMFBhc3NSZWZQdHJJTlNfMTBT
dHJpbmdJbXBsRUVFVF9UMF8KIF9fWk4zSlNDMjBjcmVhdGVSZWZlcmVuY2VFcnJvckVQTlNfOUV4
ZWNTdGF0ZUVSS05TXzdVU3RyaW5nRQotX19aTjNKU0MxM0Vycm9ySW5zdGFuY2U2Y3JlYXRlRVBO
U18xMkpTR2xvYmFsRGF0YUVQTlNfOVN0cnVjdHVyZUVSS05TXzdVU3RyaW5nRQotX19aTjNKU0Mx
M0Vycm9ySW5zdGFuY2VDMkVQTlNfMTJKU0dsb2JhbERhdGFFUE5TXzlTdHJ1Y3R1cmVFUktOU183
VVN0cmluZ0UKLV9fWk4zSlNDTDIzcmV0dXJuVG9UaHJvd1RyYW1wb2xpbmVFUE5TXzEySlNHbG9i
YWxEYXRhRU5TXzE2UmV0dXJuQWRkcmVzc1B0ckVSUzJfCitfX1pOM0pTQzEzRXJyb3JJbnN0YW5j
ZTZjcmVhdGVFUE5TXzEyVk1FUE5TXzlTdHJ1Y3R1cmVFUktOU183VVN0cmluZ0UKK19fWk4zSlND
MTNFcnJvckluc3RhbmNlQzJFUE5TXzEyVk1FUE5TXzlTdHJ1Y3R1cmVFUktOU183VVN0cmluZ0UK
K19fWk4zSlNDTDIzcmV0dXJuVG9UaHJvd1RyYW1wb2xpbmVFUE5TXzEyVk1FTlNfMTZSZXR1cm5B
ZGRyZXNzUHRyRVJTMl8KIF9jdGlWTVRocm93VHJhbXBvbGluZQogX2N0aV92bV90aHJvdwogX19a
TjNKU0MxMUludGVycHJldGVyMTR0aHJvd0V4Y2VwdGlvbkVSUE5TXzlFeGVjU3RhdGVFUk5TXzdK
U1ZhbHVlRWoKQEAgLTYxMSwxNCArNjExLDE0IEBAIF9fWk4zSlNDOUFycmF5Tm9kZTEyZW1pdEJ5
dGVjb2RlRVJOU18xN0IKIF9fWk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvcjEyZW1pdE5ld0FycmF5
RVBOU18xMFJlZ2lzdGVySURFUE5TXzExRWxlbWVudE5vZGVFCiBfX1pOM0pTQzNKSVQxN2VtaXRf
b3BfbmV3X2FycmF5RVBOU18xMUluc3RydWN0aW9uRQogX2N0aV9vcF9uZXdfYXJyYXkKLV9fWk4z
SlNDN0pTQXJyYXlDMUVSTlNfMTJKU0dsb2JhbERhdGFFUE5TXzlTdHJ1Y3R1cmVFUktOU183QXJn
TGlzdEUKK19fWk4zSlNDN0pTQXJyYXlDMUVSTlNfMTJWTUVQTlNfOVN0cnVjdHVyZUVSS05TXzdB
cmdMaXN0RQogX19aTjNKU0M4SlNQYXJzZXIxN3BhcnNlRnVuY3Rpb25JbmZvSUxOUzBfMjBGdW5j
dGlvblJlcXVpcmVtZW50c0UwRUxiMEVOU18xMEFTVEJ1aWxkZXJFRUViUlQxX1JQS05TXzEwSWRl
bnRpZmllckVSTlM0XzE5Rm9ybWFsUGFyYW1ldGVyTGlzdEVSTlM0XzEyRnVuY3Rpb25Cb2R5RVJp
U0VfU0VfCiBfX1pOM0pTQzhKU1BhcnNlcjE5cGFyc2VTb3VyY2VFbGVtZW50c0lMTlMwXzE4U291
cmNlRWxlbWVudHNNb2RlRTBFTlNfMTNTeW50YXhDaGVja2VyRUVFTlQwXzE0U291cmNlRWxlbWVu
dHNFUlM0XwogX19aTjNKU0M4SlNQYXJzZXIxNHBhcnNlU3RhdGVtZW50SU5TXzEzU3ludGF4Q2hl
Y2tlckVFRU5UXzlTdGF0ZW1lbnRFUlMzX1JQS05TXzEwSWRlbnRpZmllckUKIF9fWk4zSlNDOEpT
UGFyc2VyMTVwYXJzZUV4cHJlc3Npb25JTlNfMTNTeW50YXhDaGVja2VyRUVFTlRfMTBFeHByZXNz
aW9uRVJTM18KIF9fWk4zSlNDOEpTUGFyc2VyMjVwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uSU5T
XzEzU3ludGF4Q2hlY2tlckVFRU5UXzEwRXhwcmVzc2lvbkVSUzNfCiBfX1pOM0pTQzhKU1BhcnNl
cjIxcGFyc2VNZW1iZXJFeHByZXNzaW9uSU5TXzEzU3ludGF4Q2hlY2tlckVFRU5UXzEwRXhwcmVz
c2lvbkVSUzNfCi1fX1pOM0pTQzE2RnVuY3Rpb25Cb2R5Tm9kZTZjcmVhdGVFUE5TXzEySlNHbG9i
YWxEYXRhRWIKK19fWk4zSlNDMTZGdW5jdGlvbkJvZHlOb2RlNmNyZWF0ZUVQTlNfMTJWTUViCiBf
X1pOM0pTQzhKU1BhcnNlcjVTY29wZUQxRXYKIF9fWk4zSlNDNUxleGVyMTBzb3VyY2VDb2RlRWlp
aQogX19aTjNKU0MxNkZ1bmN0aW9uQm9keU5vZGUxM2ZpbmlzaFBhcnNpbmdFUktOU18xMFNvdXJj
ZUNvZGVFUE5TXzEzUGFyYW1ldGVyTm9kZUVSS05TXzEwSWRlbnRpZmllckUKQEAgLTYyOCw3ICs2
MjgsNyBAQCBfX1pOSzNKU0MxNEV4cHJlc3Npb25Ob2RlMTBpc0xvY2F0aW9uRXYKIF9fWk4zSlND
MjFGdW5jdGlvbkNhbGxWYWx1ZU5vZGUxMmVtaXRCeXRlY29kZUVSTlNfMTdCeXRlY29kZUdlbmVy
YXRvckVQTlNfMTBSZWdpc3RlcklERQogX19aTjNKU0MxMkZ1bmNFeHByTm9kZTEyZW1pdEJ5dGVj
b2RlRVJOU18xN0J5dGVjb2RlR2VuZXJhdG9yRVBOU18xMFJlZ2lzdGVySURFCiBfX1pOM0pTQzE3
Qnl0ZWNvZGVHZW5lcmF0b3IyNWVtaXROZXdGdW5jdGlvbkV4cHJlc3Npb25FUE5TXzEwUmVnaXN0
ZXJJREVQTlNfMTJGdW5jRXhwck5vZGVFCi1fX1pOM0pTQzE4RnVuY3Rpb25FeGVjdXRhYmxlQzFF
UE5TXzEySlNHbG9iYWxEYXRhRVJLTlNfMTBJZGVudGlmaWVyRVJLTlNfMTBTb3VyY2VDb2RlRWJQ
TlNfMThGdW5jdGlvblBhcmFtZXRlcnNFYmlpCitfX1pOM0pTQzE4RnVuY3Rpb25FeGVjdXRhYmxl
QzFFUE5TXzEyVk1FUktOU18xMElkZW50aWZpZXJFUktOU18xMFNvdXJjZUNvZGVFYlBOU18xOEZ1
bmN0aW9uUGFyYW1ldGVyc0ViaWkKIF9fWk4zV1RGNlZlY3RvcklOM0pTQzEyV3JpdGVCYXJyaWVy
SU5TMV8xOEZ1bmN0aW9uRXhlY3V0YWJsZUVFRUxtMEVFMTRleHBhbmRDYXBhY2l0eUVtCiBfX1pO
M0pTQzE3Qnl0ZWNvZGVHZW5lcmF0b3I4ZW1pdENhbGxFUE5TXzEwUmVnaXN0ZXJJREVTMl9STlNf
MTNDYWxsQXJndW1lbnRzRWpqagogX19aTjNKU0MxN0J5dGVjb2RlR2VuZXJhdG9yOGVtaXRDYWxs
RU5TXzhPcGNvZGVJREVQTlNfMTBSZWdpc3RlcklERVMzX1JOU18xM0NhbGxBcmd1bWVudHNFampq
CkBAIC02NDUsNyArNjQ1LDcgQEAgX19aTjNKU0MxOEZ1bmN0aW9uRXhlY3V0YWJsZTIyY29tcGls
ZUZvcgogX19aTjNKU0M2UGFyc2VyNXBhcnNlSU5TXzE2RnVuY3Rpb25Cb2R5Tm9kZUVFRU4zV1RG
MTBQYXNzUmVmUHRySVRfRUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfOERlYnVnZ2VyRVBOU185
RXhlY1N0YXRlRVJLTlNfMTBTb3VyY2VDb2RlRVBOU18xOEZ1bmN0aW9uUGFyYW1ldGVyc0VOU18x
OEpTUGFyc2VyU3RyaWN0bmVzc0VQUE5TXzhKU09iamVjdEUKIF9fWk4zSlNDOEpTUGFyc2VyMTlw
YXJzZVNvdXJjZUVsZW1lbnRzSUxOUzBfMThTb3VyY2VFbGVtZW50c01vZGVFMUVOU18xMEFTVEJ1
aWxkZXJFRUVOVDBfMTRTb3VyY2VFbGVtZW50c0VSUzRfCiBfX1pOM0pTQzhKU1BhcnNlcjE5cGFy
c2VUaHJvd1N0YXRlbWVudElOU18xMEFTVEJ1aWxkZXJFRUVOVF85U3RhdGVtZW50RVJTM18KLV9f
Wk4zSlNDMTZGdW5jdGlvbkJvZHlOb2RlNmNyZWF0ZUVQTlNfMTJKU0dsb2JhbERhdGFFUE5TXzE0
U291cmNlRWxlbWVudHNFUE4zV1RGNlZlY3RvcklTdDRwYWlySVBLTlNfMTBJZGVudGlmaWVyRWpF
TG0wRUVFUE5TNl9JUFMwX0xtMEVFRVJOUzVfN0hhc2hTZXRJTlM1XzZSZWZQdHJJTlM1XzEwU3Ry
aW5nSW1wbEVFRU5TXzE3SWRlbnRpZmllclJlcEhhc2hFTlM1XzEwSGFzaFRyYWl0c0lTS19FRUVF
UktOU18xMFNvdXJjZUNvZGVFamkKK19fWk4zSlNDMTZGdW5jdGlvbkJvZHlOb2RlNmNyZWF0ZUVQ
TlNfMTJWTUVQTlNfMTRTb3VyY2VFbGVtZW50c0VQTjNXVEY2VmVjdG9ySVN0NHBhaXJJUEtOU18x
MElkZW50aWZpZXJFakVMbTBFRUVQTlM2X0lQUzBfTG0wRUVFUk5TNV83SGFzaFNldElOUzVfNlJl
ZlB0cklOUzVfMTBTdHJpbmdJbXBsRUVFTlNfMTdJZGVudGlmaWVyUmVwSGFzaEVOUzVfMTBIYXNo
VHJhaXRzSVNLX0VFRUVSS05TXzEwU291cmNlQ29kZUVqaQogX19aTjNKU0MxN0J5dGVjb2RlR2Vu
ZXJhdG9yQzFFUE5TXzE2RnVuY3Rpb25Cb2R5Tm9kZUVQTlNfMTRTY29wZUNoYWluTm9kZUVQTjNX
VEY3SGFzaE1hcElOUzVfNlJlZlB0cklOUzVfMTBTdHJpbmdJbXBsRUVFTlNfMTZTeW1ib2xUYWJs
ZUVudHJ5RU5TXzE3SWRlbnRpZmllclJlcEhhc2hFTlM1XzEwSGFzaFRyYWl0c0lTOV9FRU5TXzI2
U3ltYm9sVGFibGVJbmRleEhhc2hUcmFpdHNFRUVQTlNfOUNvZGVCbG9ja0UKIF9fWk4zSlNDMTdC
eXRlY29kZUdlbmVyYXRvckMyRVBOU18xNkZ1bmN0aW9uQm9keU5vZGVFUE5TXzE0U2NvcGVDaGFp
bk5vZGVFUE4zV1RGN0hhc2hNYXBJTlM1XzZSZWZQdHJJTlM1XzEwU3RyaW5nSW1wbEVFRU5TXzE2
U3ltYm9sVGFibGVFbnRyeUVOU18xN0lkZW50aWZpZXJSZXBIYXNoRU5TNV8xMEhhc2hUcmFpdHNJ
UzlfRUVOU18yNlN5bWJvbFRhYmxlSW5kZXhIYXNoVHJhaXRzRUVFUE5TXzlDb2RlQmxvY2tFCiBf
X1pOM1dURjE1U2VnbWVudGVkVmVjdG9ySU4zSlNDMTBSZWdpc3RlcklERUxtMzJFRUMxRXYKQEAg
LTY2MSw3ICs2NjEsNyBAQCBfX1pOM0pTQzExSklUU3R1YkNhbGwxMWFkZEFyZ3VtZW50RWpOU18x
CiBfX1pOM0pTQzNKSVQxMWVtaXRfb3BfcmV0RVBOU18xMUluc3RydWN0aW9uRQogX2N0aV9vcF90
aHJvdwogX19aTkszSlNDOEpTU3RyaW5nOHRvT2JqZWN0RVBOU185RXhlY1N0YXRlRVBOU18xNEpT
R2xvYmFsT2JqZWN0RQotX19aTjNKU0MxMlN0cmluZ09iamVjdEMxRVJOU18xMkpTR2xvYmFsRGF0
YUVQTlNfOVN0cnVjdHVyZUVQTlNfOEpTU3RyaW5nRQorX19aTjNKU0MxMlN0cmluZ09iamVjdEMx
RVJOU18xMlZNRVBOU185U3RydWN0dXJlRVBOU184SlNTdHJpbmdFCiBfX1pOM0pTQzEyU3RyaW5n
T2JqZWN0MThnZXRPd25Qcm9wZXJ0eVNsb3RFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZp
ZXJFUk5TXzEyUHJvcGVydHlTbG90RQogX19aTjNKU0MxNVN0cmluZ1Byb3RvdHlwZTE4Z2V0T3du
UHJvcGVydHlTbG90RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJOU18xMlByb3Bl
cnR5U2xvdEUKIF9fWk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvcjhlbWl0TW92ZUVQTlNfMTBSZWdp
c3RlcklERVMyXwpAQCAtNzAzLDcgKzcwMyw3IEBAIF9fWk4zSlNDMTZKU0NhbGxiYWNrT2JqZWN0
SU5TXzI0SlNPYmplY3QKIF9fWk4xM09wYXF1ZUpTQ2xhc3M5cHJvdG90eXBlRVBOM0pTQzlFeGVj
U3RhdGVFCiBfX1pOMTNPcGFxdWVKU0NsYXNzMTFjb250ZXh0RGF0YUVQTjNKU0M5RXhlY1N0YXRl
RQogX19aTjNXVEY5SGFzaFRhYmxlSVAxM09wYXF1ZUpTQ2xhc3NTdDRwYWlySVMyX1AyNE9wYXF1
ZUpTQ2xhc3NDb250ZXh0RGF0YUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTNl9FRU5TXzdQdHJI
YXNoSVMyX0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzJfRUVOU0NfSVM1
X0VFRUVTRF9FNmV4cGFuZEV2Ci1fX1pOMjRPcGFxdWVKU0NsYXNzQ29udGV4dERhdGFDMkVSTjNK
U0MxMkpTR2xvYmFsRGF0YUVQMTNPcGFxdWVKU0NsYXNzCitfX1pOMjRPcGFxdWVKU0NsYXNzQ29u
dGV4dERhdGFDMkVSTjNKU0MxMlZNRVAxM09wYXF1ZUpTQ2xhc3MKIF9KU0NsYXNzUmVsZWFzZQog
X0pTT2JqZWN0U2V0UHJvcGVydHkKIF9fWk5LM0pTQzhKU09iamVjdDExaGFzUHJvcGVydHlFUE5T
XzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFCkBAIC03NzQsNyArNzc0LDcgQEAgX19aTjNX
VEY2VmVjdG9ySU5TXzZSZWZQdHJJTlNfMTBTdHJpbmdJbQogX19aTjNKU0MxOVNvdXJjZVByb3Zp
ZGVyQ2FjaGUzYWRkRWlOM1dURjEwUGFzc093blB0cklOU18yM1NvdXJjZVByb3ZpZGVyQ2FjaGVJ
dGVtRUVFagogX19aTjNXVEY5SGFzaFRhYmxlSWlTdDRwYWlySWlQTjNKU0MyM1NvdXJjZVByb3Zp
ZGVyQ2FjaGVJdGVtRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTNV9FRU5TXzdJbnRIYXNoSWpF
RU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSWlFRU5TQl9JUzRfRUVFRVNDX0U2
ZXhwYW5kRXYKIF9fWk4zV1RGNlZlY3RvcklQTjNKU0MxNkZ1bmN0aW9uQm9keU5vZGVFTG0wRUUx
NXJlc2VydmVDYXBhY2l0eUVtCi1fX1pOM0pTQzhKU09iamVjdDEycmVtb3ZlRGlyZWN0RVJOU18x
MkpTR2xvYmFsRGF0YUVSS05TXzEwSWRlbnRpZmllckUKK19fWk4zSlNDOEpTT2JqZWN0MTJyZW1v
dmVEaXJlY3RFUk5TXzEyVk1FUktOU18xMElkZW50aWZpZXJFCiBfX1pOM1dURjlIYXNoVGFibGVJ
TlNfNlJlZlB0cklOU18xMFN0cmluZ0ltcGxFRUVTdDRwYWlySVMzX04zSlNDMTZTeW1ib2xUYWJs
ZUVudHJ5RUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTN19FRU5TNV8xN0lkZW50aWZpZXJSZXBI
YXNoRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMzX0VFTlM1XzI2U3ltYm9s
VGFibGVJbmRleEhhc2hUcmFpdHNFRUVTRF9FMTNpc0VtcHR5QnVja2V0RVJLUzdfCiBfX1pOM1dU
RjlIYXNoVGFibGVJTlNfNlJlZlB0cklOU18xMFN0cmluZ0ltcGxFRUVTdDRwYWlySVMzX04zSlND
MTZTeW1ib2xUYWJsZUVudHJ5RUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTN19FRU5TNV8xN0lk
ZW50aWZpZXJSZXBIYXNoRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMzX0VF
TlM1XzI2U3ltYm9sVGFibGVJbmRleEhhc2hUcmFpdHNFRUVTRF9FNmV4cGFuZEV2CiBfX1pOM1dU
RjlIYXNoVGFibGVJTlNfNlJlZlB0cklOU18xMFN0cmluZ0ltcGxFRUVTdDRwYWlySVMzX04zSlND
MTZTeW1ib2xUYWJsZUVudHJ5RUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTN19FRU5TNV8xN0lk
ZW50aWZpZXJSZXBIYXNoRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMzX0VF
TlM1XzI2U3ltYm9sVGFibGVJbmRleEhhc2hUcmFpdHNFRUVTRF9FNnJlaGFzaEVpCkBAIC03OTIs
NyArNzkyLDcgQEAgX19aTkszSlNDMjFVU3RyaW5nU291cmNlUHJvdmlkZXI0ZGF0YUV2CiBfX1pO
M0pTQzhKU1BhcnNlcjE2ZGVjbGFyZVBhcmFtZXRlckVQS05TXzEwSWRlbnRpZmllckUKIF9fWk4z
V1RGNlZlY3RvcklOM0pTQzEwSWRlbnRpZmllckVMbTBFRTE0ZXhwYW5kQ2FwYWNpdHlFbQogX19a
TjNKU0MxMEpTRnVuY3Rpb24xOGdldE93blByb3BlcnR5U2xvdEVQTlNfOUV4ZWNTdGF0ZUVSS05T
XzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCi1fX1pOM0pTQzlTdHJ1Y3R1cmUyMm1h
dGVyaWFsaXplUHJvcGVydHlNYXBFUk5TXzEySlNHbG9iYWxEYXRhRQorX19aTjNKU0M5U3RydWN0
dXJlMjJtYXRlcmlhbGl6ZVByb3BlcnR5TWFwRVJOU18xMlZNRQogX19aTkszSlNDMTFSZXNvbHZl
Tm9kZTEwaXNMb2NhdGlvbkV2CiBfX1pOSzNKU0MxMVJlc29sdmVOb2RlMTNpc1Jlc29sdmVOb2Rl
RXYKIF9fWk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvcjEyYWRkUGFyYW1ldGVyRVJLTlNfMTBJZGVu
dGlmaWVyRWkKQEAgLTg5NCw5ICs4OTQsOSBAQCBfX1pOM0pTQzNKSVQxNWVtaXRfb3BfcHJlX2lu
Y0VQTlNfMTFJbnN0CiBfX1pOM0pTQzNKSVQxNmVtaXRUaW1lb3V0Q2hlY2tFdgogX19aTjNKU0Mz
SklUMTNlbWl0X29wX2psZXNzRVBOU18xMUluc3RydWN0aW9uRQogX19aTjNKU0MzSklUMjJlbWl0
U2xvd19vcF9nZXRfYnlfdmFsRVBOU18xMUluc3RydWN0aW9uRVJQTlNfMTNTbG93Q2FzZUVudHJ5
RQotX19aTjNKU0M5SklUVGh1bmtzN2N0aVN0dWJFUE5TXzEySlNHbG9iYWxEYXRhRVBGTlNfMjFN
YWNyb0Fzc2VtYmxlckNvZGVQdHJFUzJfUE5TXzE0RXhlY3V0YWJsZVBvb2xFRQotX19aTjNXVEY5
SGFzaFRhYmxlSVBGTjNKU0MyMU1hY3JvQXNzZW1ibGVyQ29kZVB0ckVQTlMxXzEySlNHbG9iYWxE
YXRhRVBOUzFfMTRFeGVjdXRhYmxlUG9vbEVFU3Q0cGFpcklTOF9TMl9FTlNfMThQYWlyRmlyc3RF
eHRyYWN0b3JJU0FfRUVOU183UHRySGFzaElTOF9FRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBI
YXNoVHJhaXRzSVM4X0VFTlNHX0lTMl9FRUVFU0hfRTZleHBhbmRFdgotX19aTjNKU0MzSklUMjdz
dHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3JFUE5TXzEySlNHbG9iYWxEYXRhRVBOU18xNEV4ZWN1
dGFibGVQb29sRQorX19aTjNKU0M5SklUVGh1bmtzN2N0aVN0dWJFUE5TXzEyVk1FUEZOU18yMU1h
Y3JvQXNzZW1ibGVyQ29kZVB0ckVTMl9QTlNfMTRFeGVjdXRhYmxlUG9vbEVFCitfX1pOM1dURjlI
YXNoVGFibGVJUEZOM0pTQzIxTWFjcm9Bc3NlbWJsZXJDb2RlUHRyRVBOUzFfMTJWTUVQTlMxXzE0
RXhlY3V0YWJsZVBvb2xFRVN0NHBhaXJJUzhfUzJfRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVNB
X0VFTlNfN1B0ckhhc2hJUzhfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lT
OF9FRU5TR19JUzJfRUVFRVNIX0U2ZXhwYW5kRXYKK19fWk4zSlNDM0pJVDI3c3RyaW5nR2V0QnlW
YWxTdHViR2VuZXJhdG9yRVBOU18xMlZNRVBOU18xNEV4ZWN1dGFibGVQb29sRQogX19aTjNKU0My
MXJvdW5kVXBBbGxvY2F0aW9uU2l6ZUVtbQogX19aTjNKU0MzSklUMTllbWl0U2xvd19vcF9wcmVf
aW5jRVBOU18xMUluc3RydWN0aW9uRVJQTlNfMTNTbG93Q2FzZUVudHJ5RQogX19aTjNKU0MzSklU
MTdlbWl0U2xvd19vcF9qbGVzc0VQTlNfMTFJbnN0cnVjdGlvbkVSUE5TXzEzU2xvd0Nhc2VFbnRy
eUUKQEAgLTk4MSw3ICs5ODEsNyBAQCBfX1pOM0pTQzExSW50ZXJwcmV0ZXI4Y2FsbEV2YWxFUE5T
XzlFeGVjCiBfX1pOM0pTQzE0RXZhbEV4ZWN1dGFibGVDMUVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEw
U291cmNlQ29kZUViCiBfX1pOM0pTQzE0RXZhbEV4ZWN1dGFibGUxNWNvbXBpbGVJbnRlcm5hbEVQ
TlNfOUV4ZWNTdGF0ZUVQTlNfMTRTY29wZUNoYWluTm9kZUUKIF9fWk4zSlNDNlBhcnNlcjVwYXJz
ZUlOU184RXZhbE5vZGVFRUVOM1dURjEwUGFzc1JlZlB0cklUX0VFUE5TXzE0SlNHbG9iYWxPYmpl
Y3RFUE5TXzhEZWJ1Z2dlckVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwU291cmNlQ29kZUVQTlNfMThG
dW5jdGlvblBhcmFtZXRlcnNFTlNfMThKU1BhcnNlclN0cmljdG5lc3NFUFBOU184SlNPYmplY3RF
Ci1fX1pOM0pTQzhFdmFsTm9kZTZjcmVhdGVFUE5TXzEySlNHbG9iYWxEYXRhRVBOU18xNFNvdXJj
ZUVsZW1lbnRzRVBOM1dURjZWZWN0b3JJU3Q0cGFpcklQS05TXzEwSWRlbnRpZmllckVqRUxtMEVF
RVBOUzZfSVBOU18xNkZ1bmN0aW9uQm9keU5vZGVFTG0wRUVFUk5TNV83SGFzaFNldElOUzVfNlJl
ZlB0cklOUzVfMTBTdHJpbmdJbXBsRUVFTlNfMTdJZGVudGlmaWVyUmVwSGFzaEVOUzVfMTBIYXNo
VHJhaXRzSVNMX0VFRUVSS05TXzEwU291cmNlQ29kZUVqaQorX19aTjNKU0M4RXZhbE5vZGU2Y3Jl
YXRlRVBOU18xMlZNRVBOU18xNFNvdXJjZUVsZW1lbnRzRVBOM1dURjZWZWN0b3JJU3Q0cGFpcklQ
S05TXzEwSWRlbnRpZmllckVqRUxtMEVFRVBOUzZfSVBOU18xNkZ1bmN0aW9uQm9keU5vZGVFTG0w
RUVFUk5TNV83SGFzaFNldElOUzVfNlJlZlB0cklOUzVfMTBTdHJpbmdJbXBsRUVFTlNfMTdJZGVu
dGlmaWVyUmVwSGFzaEVOUzVfMTBIYXNoVHJhaXRzSVNMX0VFRUVSS05TXzEwU291cmNlQ29kZUVq
aQogX19aTjNKU0MxNFNjb3BlQ2hhaW5Ob2RlMTBsb2NhbERlcHRoRXYKIF9fWk4zSlNDMTdCeXRl
Y29kZUdlbmVyYXRvckMxRVBOU184RXZhbE5vZGVFUE5TXzE0U2NvcGVDaGFpbk5vZGVFUE4zV1RG
N0hhc2hNYXBJTlM1XzZSZWZQdHJJTlM1XzEwU3RyaW5nSW1wbEVFRU5TXzE2U3ltYm9sVGFibGVF
bnRyeUVOU18xN0lkZW50aWZpZXJSZXBIYXNoRU5TNV8xMEhhc2hUcmFpdHNJUzlfRUVOU18yNlN5
bWJvbFRhYmxlSW5kZXhIYXNoVHJhaXRzRUVFUE5TXzEzRXZhbENvZGVCbG9ja0UKIF9fWk4zSlND
MTdCeXRlY29kZUdlbmVyYXRvckMyRVBOU184RXZhbE5vZGVFUE5TXzE0U2NvcGVDaGFpbk5vZGVF
UE4zV1RGN0hhc2hNYXBJTlM1XzZSZWZQdHJJTlM1XzEwU3RyaW5nSW1wbEVFRU5TXzE2U3ltYm9s
VGFibGVFbnRyeUVOU18xN0lkZW50aWZpZXJSZXBIYXNoRU5TNV8xMEhhc2hUcmFpdHNJUzlfRUVO
U18yNlN5bWJvbFRhYmxlSW5kZXhIYXNoVHJhaXRzRUVFUE5TXzEzRXZhbENvZGVCbG9ja0UKQEAg
LTEwNDYsMTMgKzEwNDYsMTMgQEAgX19aTjNKU0M5SklUVGh1bmtzMTV0cnlDYWNoZUdldEJ5SURF
UE5TXwogX19aTjNKU0MzSklUMzNwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGhFTlNf
MTZSZXR1cm5BZGRyZXNzUHRyRQogX19aTkszSlNDOEpTT2JqZWN0MjRnZXRQcm9wZXJ0eVNwZWNp
ZmljVmFsdWVFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUlBOU182SlNDZWxsRQog
X19aTjNKU0MyN2N0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzc0VQTlNfOUNvZGVCbG9ja0VOU18x
NlJldHVybkFkZHJlc3NQdHJFTlNfMTFGdW5jdGlvblB0ckUKLV9fWk4zSlNDM0pJVDhsaW5rQ2Fs
bEVQTlNfMTBKU0Z1bmN0aW9uRVBOU185Q29kZUJsb2NrRVM0X05TXzIxTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyRVBOU18xMkNhbGxMaW5rSW5mb0VpUE5TXzEySlNHbG9iYWxEYXRhRQotX19aTjNKU0Mz
SklUMjBwYXRjaE1ldGhvZENhbGxQcm90b0VSTlNfMTJKU0dsb2JhbERhdGFFUE5TXzlDb2RlQmxv
Y2tFUk5TXzE4TWV0aG9kQ2FsbExpbmtJbmZvRVBOU18xMEpTRnVuY3Rpb25FUE5TXzlTdHJ1Y3R1
cmVFUE5TXzhKU09iamVjdEVOU18xNlJldHVybkFkZHJlc3NQdHJFCitfX1pOM0pTQzNKSVQ4bGlu
a0NhbGxFUE5TXzEwSlNGdW5jdGlvbkVQTlNfOUNvZGVCbG9ja0VTNF9OU18yMU1hY3JvQXNzZW1i
bGVyQ29kZVB0ckVQTlNfMTJDYWxsTGlua0luZm9FaVBOU18xMlZNRQorX19aTjNKU0MzSklUMjBw
YXRjaE1ldGhvZENhbGxQcm90b0VSTlNfMTJWTUVQTlNfOUNvZGVCbG9ja0VSTlNfMThNZXRob2RD
YWxsTGlua0luZm9FUE5TXzEwSlNGdW5jdGlvbkVQTlNfOVN0cnVjdHVyZUVQTlNfOEpTT2JqZWN0
RU5TXzE2UmV0dXJuQWRkcmVzc1B0ckUKIF9fWk4zSlNDOUpJVFRodW5rczE1dHJ5Q2FjaGVQdXRC
eUlERVBOU185RXhlY1N0YXRlRVBOU185Q29kZUJsb2NrRU5TXzE2UmV0dXJuQWRkcmVzc1B0ckVO
U183SlNWYWx1ZUVSS05TXzE1UHV0UHJvcGVydHlTbG90RVBOU18xN1N0cnVjdHVyZVN0dWJJbmZv
RWIKIF9jdGlfb3BfZ2V0X2J5X2lkX2dlbmVyaWMKIF9jdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMK
LV9fWk4zSlNDMTRTdHJ1Y3R1cmVDaGFpbkMxRVJOU18xMkpTR2xvYmFsRGF0YUVQTlNfOVN0cnVj
dHVyZUVTNF8KLV9fWk4zSlNDMTRTdHJ1Y3R1cmVDaGFpbkMyRVJOU18xMkpTR2xvYmFsRGF0YUVQ
TlNfOVN0cnVjdHVyZUVTNF8KK19fWk4zSlNDMTRTdHJ1Y3R1cmVDaGFpbkMxRVJOU18xMlZNRVBO
U185U3RydWN0dXJlRVM0XworX19aTjNKU0MxNFN0cnVjdHVyZUNoYWluQzJFUk5TXzEyVk1FUE5T
XzlTdHJ1Y3R1cmVFUzRfCiBfX1pOM0pTQzNKSVQyNnByaXZhdGVDb21waWxlR2V0QnlJZENoYWlu
RVBOU18xN1N0cnVjdHVyZVN0dWJJbmZvRVBOU185U3RydWN0dXJlRVBOU18xNFN0cnVjdHVyZUNo
YWluRW1SS05TXzEwSWRlbnRpZmllckVSS05TXzEyUHJvcGVydHlTbG90RW1OU18xNlJldHVybkFk
ZHJlc3NQdHJFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0pTQzNKSVQxM3Rlc3RQcm90b3R5cGVFTlNf
N0pTVmFsdWVFUk5TXzIyQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcklOU18xMlg4NkFzc2VtYmxlckVF
OEp1bXBMaXN0RQogX19aTjNKU0MzSklUMjJjb21waWxlR2V0RGlyZWN0T2Zmc2V0RVBOU184SlNP
YmplY3RFTlNfMTJYODZSZWdpc3RlcnMxMFJlZ2lzdGVySURFbQpAQCAtMTExNyw3ICsxMTE3LDcg
QEAgX19aTjNKU0MyM01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uNG1vdmVFTgogX19aTjNKU0NMMjBz
dHJpbmdQcm90b0Z1bmNNYXRjaEVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzE3UmVnRXhwQ29u
c3RydWN0b3IxNGFycmF5T2ZNYXRjaGVzRVBOU185RXhlY1N0YXRlRQogX19aTjNKU0MxOFJlZ0V4
cE1hdGNoZXNBcnJheUMyRVBOU185RXhlY1N0YXRlRVBOU18yNFJlZ0V4cENvbnN0cnVjdG9yUHJp
dmF0ZUUKLV9fWk4zSlNDN0pTQXJyYXlDMkVSTlNfMTJKU0dsb2JhbERhdGFFUE5TXzlTdHJ1Y3R1
cmVFak5TXzE3QXJyYXlDcmVhdGlvbk1vZGVFCitfX1pOM0pTQzdKU0FycmF5QzJFUk5TXzEyVk1F
UE5TXzlTdHJ1Y3R1cmVFak5TXzE3QXJyYXlDcmVhdGlvbk1vZGVFCiBfX1pOM0pTQzdKU0FycmF5
MTVzZXRTdWJjbGFzc0RhdGFFUHYKIF9fWk4zSlNDMThSZWdFeHBNYXRjaGVzQXJyYXlEMUV2CiBf
X1pOSzNKU0M3SlNBcnJheTEyc3ViY2xhc3NEYXRhRXYKQEAgLTExNDcsNyArMTE0Nyw3IEBAIF9f
Wk4zV1RGMTBTdHJpbmdJbXBsNGZpbmRFUEZidEVqCiBfX1pOM1dURjEwU3RyaW5nSW1wbDRmaW5k
RVBLY2oKIF9fWk4zV1RGNlN0cmluZzI2ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2tFUEtjbQog
X19aTjNXVEYxMGZhc3RTdHJEdXBFUEtjCi1fX1pOM0pTQzEwSWRlbnRpZmllcjExYWRkU2xvd0Nh
c2VFUE5TXzEySlNHbG9iYWxEYXRhRVBOM1dURjEwU3RyaW5nSW1wbEUKK19fWk4zSlNDMTBJZGVu
dGlmaWVyMTFhZGRTbG93Q2FzZUVQTlNfMTJWTUVQTjNXVEYxMFN0cmluZ0ltcGxFCiBfSlNTdHJp
bmdSZXRhaW4KIF9fX2luaXRpYWxpemVTY2F2ZW5nZXJfYmxvY2tfaW52b2tlXzEKIF9fWk4zV1RG
MjN3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbkVqCkBAIC0xMTU2LDcgKzExNTYsNyBAQCBfSlNPYmpl
Y3RDb3B5UHJvcGVydHlOYW1lcwogX19aTjNKU0M4SlNPYmplY3QxNmNvcHlCYWNraW5nU3RvcmVF
UE5TXzZKU0NlbGxFUk5TXzExQ29weVZpc2l0b3JFCiBfX1pOM0pTQzhKU09iamVjdDE2Z2V0UHJv
cGVydHlOYW1lc0VQTlNfOUV4ZWNTdGF0ZUVSTlNfMTdQcm9wZXJ0eU5hbWVBcnJheUVOU18xNUVu
dW1lcmF0aW9uTW9kZUUKIF9fWk4zSlNDOEpTT2JqZWN0MTlnZXRPd25Qcm9wZXJ0eU5hbWVzRVBO
U185RXhlY1N0YXRlRVJOU18xN1Byb3BlcnR5TmFtZUFycmF5RU5TXzE1RW51bWVyYXRpb25Nb2Rl
RQotX19aTjNKU0M5U3RydWN0dXJlMTZnZXRQcm9wZXJ0eU5hbWVzRVJOU18xMkpTR2xvYmFsRGF0
YUVSTlNfMTdQcm9wZXJ0eU5hbWVBcnJheUVOU18xNUVudW1lcmF0aW9uTW9kZUUKK19fWk4zSlND
OVN0cnVjdHVyZTE2Z2V0UHJvcGVydHlOYW1lc0VSTlNfMTJWTUVSTlNfMTdQcm9wZXJ0eU5hbWVB
cnJheUVOU18xNUVudW1lcmF0aW9uTW9kZUUKIF9fWk4zSlNDOUV4ZWNTdGF0ZTIwb2JqZWN0UHJv
dG90eXBlVGFibGVFUFMwXwogX0pTUHJvcGVydHlOYW1lQXJyYXlHZXRDb3VudAogX0pTUHJvcGVy
dHlOYW1lQXJyYXlSZWxlYXNlCkBAIC0xMjAyLDcgKzEyMDIsNyBAQCBfX1pOM0pTQzlCcmVha05v
ZGUxMmVtaXRCeXRlY29kZUVSTlNfMTdCCiBfX1pOM0pTQzE3Qnl0ZWNvZGVHZW5lcmF0b3IxMWJy
ZWFrVGFyZ2V0RVJLTlNfMTBJZGVudGlmaWVyRQogX19aTjNKU0MxN0J5dGVjb2RlR2VuZXJhdG9y
MTRlbWl0SnVtcFNjb3Blc0VQTlNfNUxhYmVsRWkKIF9fWk4zSlNDTDIwc3RyaW5nUHJvdG9GdW5j
U3BsaXRFUE5TXzlFeGVjU3RhdGVFCi1fX1pOM0pTQzExanNTdWJzdHJpbmdFUE5TXzEySlNHbG9i
YWxEYXRhRVJLTlNfN1VTdHJpbmdFamoKK19fWk4zSlNDMTFqc1N1YnN0cmluZ0VQTlNfMTJWTUVS
S05TXzdVU3RyaW5nRWpqCiBfX1pOM0pTQzdKU0FycmF5M3B1dEVQTlNfOUV4ZWNTdGF0ZUVqTlNf
N0pTVmFsdWVFCiBfX1pOM0pTQzdKU0FycmF5MTFwdXRTbG93Q2FzZUVQTlNfOUV4ZWNTdGF0ZUVq
TlNfN0pTVmFsdWVFCiBfX1pOM0pTQzEwQVNUQnVpbGRlcjExbWFrZVN1Yk5vZGVFUE5TXzE0RXhw
cmVzc2lvbk5vZGVFUzJfYgpAQCAtMTMwMyw4ICsxMzAzLDggQEAgX19aTjNKU0MxMHRocm93RXJy
b3JFUE5TXzlFeGVjU3RhdGVFTlNfNwogX19aTjNKU0MxMmhhc0Vycm9ySW5mb0VQTlNfOUV4ZWNT
dGF0ZUVQTlNfOEpTT2JqZWN0RQogX19aTjNKU0M5Q29kZUJsb2NrMjdsaW5lTnVtYmVyRm9yQnl0
ZWNvZGVPZmZzZXRFagogX19aTjNKU0MxMmFkZEVycm9ySW5mb0VQTlNfOUV4ZWNTdGF0ZUVQTlNf
OEpTT2JqZWN0RWlSS05TXzEwU291cmNlQ29kZUUKLV9fWk4zSlNDMTJhZGRFcnJvckluZm9FUE5T
XzEySlNHbG9iYWxEYXRhRVBOU184SlNPYmplY3RFaVJLTlNfMTBTb3VyY2VDb2RlRQotX19aTjNK
U0M4SlNPYmplY3QxN3B1dFdpdGhBdHRyaWJ1dGVzRVBOU18xMkpTR2xvYmFsRGF0YUVSS05TXzEw
SWRlbnRpZmllckVOU183SlNWYWx1ZUVqCitfX1pOM0pTQzEyYWRkRXJyb3JJbmZvRVBOU18xMlZN
RVBOU184SlNPYmplY3RFaVJLTlNfMTBTb3VyY2VDb2RlRQorX19aTjNKU0M4SlNPYmplY3QxN3B1
dFdpdGhBdHRyaWJ1dGVzRVBOU18xMlZNRVJLTlNfMTBJZGVudGlmaWVyRU5TXzdKU1ZhbHVlRWoK
IF9jdGlfb3BfcHVzaF9uZXdfc2NvcGUKIF9fWk4zSlNDMTlKU1N0YXRpY1Njb3BlT2JqZWN0MThn
ZXRPd25Qcm9wZXJ0eVNsb3RFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUk5TXzEy
UHJvcGVydHlTbG90RQogX19aTjNKU0MxMkpTQWN0aXZhdGlvbjNwdXRFUE5TXzlFeGVjU3RhdGVF
UktOU18xMElkZW50aWZpZXJFTlNfN0pTVmFsdWVFUk5TXzE1UHV0UHJvcGVydHlTbG90RQpAQCAt
MTM2NiwxNSArMTM2NiwxNSBAQCBfY3RpX29wX3ByZV9kZWMKIF9fWk4zV1RGMTBTdHJpbmdJbXBs
MTZmaW5kSWdub3JpbmdDYXNlRVBTMF9qCiBfX1pOM0pTQzVMZXhlcjE5Z2V0VW5pY29kZUNoYXJh
Y3RlckV2CiBfX1pOM0pTQ0wyM251bWJlclByb3RvRnVuY1RvU3RyaW5nRVBOU185RXhlY1N0YXRl
RQotX19aTjNKU0MxMkpTR2xvYmFsRGF0YTE1Z2V0SG9zdEZ1bmN0aW9uRVBGUHZQTlNfOUV4ZWNT
dGF0ZUVFUEZOU18yMU1hY3JvQXNzZW1ibGVyQ29kZVB0ckVQUzBfUE5TXzE0RXhlY3V0YWJsZVBv
b2xFRQotX19aTjNKU0M5SklUVGh1bmtzMTZob3N0RnVuY3Rpb25TdHViRVBOU18xMkpTR2xvYmFs
RGF0YUVQRlB2UE5TXzlFeGVjU3RhdGVFRVBGTlNfMjFNYWNyb0Fzc2VtYmxlckNvZGVQdHJFUzJf
UE5TXzE0RXhlY3V0YWJsZVBvb2xFRQotX19aTjNKU0MxOHNxcnRUaHVua0dlbmVyYXRvckVQTlNf
MTJKU0dsb2JhbERhdGFFUE5TXzE0RXhlY3V0YWJsZVBvb2xFCitfX1pOM0pTQzEyVk0xNWdldEhv
c3RGdW5jdGlvbkVQRlB2UE5TXzlFeGVjU3RhdGVFRVBGTlNfMjFNYWNyb0Fzc2VtYmxlckNvZGVQ
dHJFUFMwX1BOU18xNEV4ZWN1dGFibGVQb29sRUUKK19fWk4zSlNDOUpJVFRodW5rczE2aG9zdEZ1
bmN0aW9uU3R1YkVQTlNfMTJWTUVQRlB2UE5TXzlFeGVjU3RhdGVFRVBGTlNfMjFNYWNyb0Fzc2Vt
YmxlckNvZGVQdHJFUzJfUE5TXzE0RXhlY3V0YWJsZVBvb2xFRQorX19aTjNKU0MxOHNxcnRUaHVu
a0dlbmVyYXRvckVQTlNfMTJWTUVQTlNfMTRFeGVjdXRhYmxlUG9vbEUKIF9fWk4zSlNDMTlTcGVj
aWFsaXplZFRodW5rSklUOGZpbmFsaXplRU5TXzIxTWFjcm9Bc3NlbWJsZXJDb2RlUHRyRQogX19a
TjNKU0MxMEpTRnVuY3Rpb25DMUVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQ
TlNfOVN0cnVjdHVyZUVpUktOU18xMElkZW50aWZpZXJFUE5TXzE2TmF0aXZlRXhlY3V0YWJsZUUK
IF9fWk4zSlNDMTBKU0Z1bmN0aW9uQzJFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxPYmpl
Y3RFUE5TXzlTdHJ1Y3R1cmVFaVJLTlNfMTBJZGVudGlmaWVyRVBOU18xNk5hdGl2ZUV4ZWN1dGFi
bGVFCiBfX1pOM0pTQzNKSVQxMWVtaXRfb3Bfbm90RVBOU18xMUluc3RydWN0aW9uRQogX19aTjNK
U0MzSklUMTVlbWl0U2xvd19vcF9ub3RFUE5TXzExSW5zdHJ1Y3Rpb25FUlBOU18xM1Nsb3dDYXNl
RW50cnlFCi1fX1pOM0pTQzE3cG93VGh1bmtHZW5lcmF0b3JFUE5TXzEySlNHbG9iYWxEYXRhRVBO
U18xNEV4ZWN1dGFibGVQb29sRQorX19aTjNKU0MxN3Bvd1RodW5rR2VuZXJhdG9yRVBOU18xMlZN
RVBOU18xNEV4ZWN1dGFibGVQb29sRQogX19aTjNKU0MxMlg4NkFzc2VtYmxlcjdjbXBsX2ltRWlp
TlNfMTJYODZSZWdpc3RlcnMxMFJlZ2lzdGVySURFCiBfX1pOM0pTQzIzTWFjcm9Bc3NlbWJsZXJY
ODZDb21tb24yNmJyYW5jaENvbnZlcnREb3VibGVUb0ludDMyRU5TXzEyWDg2UmVnaXN0ZXJzMTNY
TU1SZWdpc3RlcklERU5TMV8xMFJlZ2lzdGVySURFUk5TXzIyQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
cklOU18xMlg4NkFzc2VtYmxlckVFOEp1bXBMaXN0RVMyXwogX19aTjNKU0MxOVNwZWNpYWxpemVk
VGh1bmtKSVQxMXJldHVybkludDMyRU5TXzEyWDg2UmVnaXN0ZXJzMTBSZWdpc3RlcklERQpAQCAt
MTM4OCw4ICsxMzg4LDggQEAgX2N0aV9vcF9kZWxfYnlfaWQKIF9fWk4zSlNDMTZKU1ZhcmlhYmxl
T2JqZWN0MTRkZWxldGVQcm9wZXJ0eUVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckUK
IF9fWk4zSlNDOEpTT2JqZWN0MTRkZWxldGVQcm9wZXJ0eUVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEw
SWRlbnRpZmllckUKIF9fWk4zSlNDMTdPYmplY3RDb25zdHJ1Y3RvcjE4Z2V0T3duUHJvcGVydHlT
bG90RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJOU18xMlByb3BlcnR5U2xvdEUK
LV9fWk4zSlNDOVN0cnVjdHVyZTI3ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uRVJOU18xMkpT
R2xvYmFsRGF0YUVQUzBfUktOU18xMElkZW50aWZpZXJFCi1fX1pOM0pTQzEzUHJvcGVydHlUYWJs
ZUMyRVJOU18xMkpTR2xvYmFsRGF0YUVQTlNfNkpTQ2VsbEVSS1MwXworX19aTjNKU0M5U3RydWN0
dXJlMjdkZXNwZWNpZnlGdW5jdGlvblRyYW5zaXRpb25FUk5TXzEyVk1FUFMwX1JLTlNfMTBJZGVu
dGlmaWVyRQorX19aTjNKU0MxM1Byb3BlcnR5VGFibGVDMkVSTlNfMTJWTUVQTlNfNkpTQ2VsbEVS
S1MwXwogX19aTkszV1RGNlN0cmluZzZ0b1VJbnRFUGIKIF9fWk4zV1RGMTBTdHJpbmdJbXBsNnRv
VUludEVQYgogX19aTjNXVEYxNmNoYXJhY3RlcnNUb1VJbnRFUEt0bVBiCkBAIC0xNDM2LDcgKzE0
MzYsNyBAQCBfY3RpX29wX3B1dF9ieV9pZF9mYWlsCiBfX1pOM0pTQzE3Qnl0ZWNvZGVHZW5lcmF0
b3IxMWVtaXRQb3N0SW5jRVBOU18xMFJlZ2lzdGVySURFUzJfCiBfX1pOM0pTQzNKSVQxNmVtaXRf
b3BfcG9zdF9pbmNFUE5TXzExSW5zdHJ1Y3Rpb25FCiBfX1pOM0pTQzNKSVQyMGVtaXRTbG93X29w
X3Bvc3RfaW5jRVBOU18xMUluc3RydWN0aW9uRVJQTlNfMTNTbG93Q2FzZUVudHJ5RQotX19aTjNK
U0NMMjNjcmVhdGVQcm90b3R5cGVQcm9wZXJ0eUVSTlNfMTJKU0dsb2JhbERhdGFFUE5TXzE0SlNH
bG9iYWxPYmplY3RFUE5TXzEwSlNGdW5jdGlvbkUKK19fWk4zSlNDTDIzY3JlYXRlUHJvdG90eXBl
UHJvcGVydHlFUk5TXzEyVk1FUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzEwSlNGdW5jdGlvbkUK
IF9fWk5LM0pTQzhOdWxsTm9kZTZpc051bGxFdgogX19aTjNKU0MzSklUMTdlbWl0X29wX2puZXFf
bnVsbEVQTlNfMTFJbnN0cnVjdGlvbkUKIF9jdGlfb3BfY29udmVydF90aGlzCkBAIC0xNDc4LDcg
KzE0NzgsNyBAQCBfX1pOM1dURjdVbmljb2RlMThlcXVhbFVURjE2V2l0aFVURjhFUEt0CiBfX1pO
M1dURjExZW1wdHlTdHJpbmdFdgogX19aTjNXVEY2U3RyaW5nNm51bWJlckVqCiBfX1pOM0pTQzE0
UG9zdGZpeERvdE5vZGUxMmVtaXRCeXRlY29kZUVSTlNfMTdCeXRlY29kZUdlbmVyYXRvckVQTlNf
MTBSZWdpc3RlcklERQotX19aTjNKU0M3SlNBcnJheUMxRVJOU18xMkpTR2xvYmFsRGF0YUVQTlNf
OVN0cnVjdHVyZUVqTlNfMTdBcnJheUNyZWF0aW9uTW9kZUUKK19fWk4zSlNDN0pTQXJyYXlDMUVS
TlNfMTJWTUVQTlNfOVN0cnVjdHVyZUVqTlNfMTdBcnJheUNyZWF0aW9uTW9kZUUKIF9fWk4zSlND
MTBJZGVudGlmaWVyNGZyb21FUE5TXzlFeGVjU3RhdGVFagogX19aTjNKU0MzSklUMjJjb21waWxl
R2V0RGlyZWN0T2Zmc2V0RU5TXzEyWDg2UmVnaXN0ZXJzMTBSZWdpc3RlcklERVMyX1BOU185U3Ry
dWN0dXJlRW0KIF9fWk4zV1RGNlZlY3RvcklOM0pTQzE0RXhlY3V0YWJsZVBvb2wxMEFsbG9jYXRp
b25FTG0yRUUxNXJlc2VydmVDYXBhY2l0eUVtCkBAIC0xNDk0LDggKzE0OTQsOCBAQCBfX1pOM0pT
QzRZYXJyMTNZYXJyR2VuZXJhdG9yMjlnZW5lcmF0ZUFzCiBfX1pOM0pTQzEyWDg2QXNzZW1ibGVy
MjNYODZJbnN0cnVjdGlvbkZvcm1hdHRlcjExbWVtb3J5TW9kUk1FaU5TXzEyWDg2UmVnaXN0ZXJz
MTBSZWdpc3RlcklERVMzX2lpCiBfX1pOM0pTQ0wyMXN0cmluZ1Byb3RvRnVuY1NlYXJjaEVQTlNf
OUV4ZWNTdGF0ZUUKIF9fWk4zSlNDMTdTdHJpbmdDb25zdHJ1Y3RvcjE4Z2V0T3duUHJvcGVydHlT
bG90RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJOU18xMlByb3BlcnR5U2xvdEUK
LV9fWk4zSlNDMjZmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvckVQTlNfMTJKU0dsb2JhbERhdGFF
UE5TXzE0RXhlY3V0YWJsZVBvb2xFCi1fX1pOM0pTQ0wxMmNoYXJUb1N0cmluZ0VSTlNfMTlTcGVj
aWFsaXplZFRodW5rSklURVBOU18xMkpTR2xvYmFsRGF0YUVOU18xMlg4NlJlZ2lzdGVyczEwUmVn
aXN0ZXJJREVTNV9TNV8KK19fWk4zSlNDMjZmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvckVQTlNf
MTJWTUVQTlNfMTRFeGVjdXRhYmxlUG9vbEUKK19fWk4zSlNDTDEyY2hhclRvU3RyaW5nRVJOU18x
OVNwZWNpYWxpemVkVGh1bmtKSVRFUE5TXzEyVk1FTlNfMTJYODZSZWdpc3RlcnMxMFJlZ2lzdGVy
SURFUzVfUzVfCiBfX1pOM0pTQ0wxOHN0cmluZ0Zyb21DaGFyQ29kZUVQTlNfOUV4ZWNTdGF0ZUUK
IF9fWk5LM0pTQzhKU09iamVjdDE0aXNHbG9iYWxPYmplY3RFdgogX19aTkszV1RGNlN0cmluZzE2
cmVtb3ZlQ2hhcmFjdGVyc0VQRmJ0RQpAQCAtMTUxOCwxMiArMTUxOCwxMiBAQCBfX1pOM0pTQzNK
SVQxOGVtaXRfb3BfZ2V0X3BuYW1lc0VQTlNfMTFJCiBfX1pOM0pTQzNKSVQyMGVtaXRfb3BfZ2V0
X2J5X3BuYW1lRVBOU18xMUluc3RydWN0aW9uRQogX19aTjNKU0MzSklUMThlbWl0X29wX25leHRf
cG5hbWVFUE5TXzExSW5zdHJ1Y3Rpb25FCiBfX1pOM0pTQzNKSVQyNGVtaXRTbG93X29wX2dldF9i
eV9wbmFtZUVQTlNfMTFJbnN0cnVjdGlvbkVSUE5TXzEzU2xvd0Nhc2VFbnRyeUUKLV9fWk4zSlND
OVN0cnVjdHVyZTIydG9EaWN0aW9uYXJ5VHJhbnNpdGlvbkVSTlNfMTJKU0dsb2JhbERhdGFFUFMw
X05TMF8xNERpY3Rpb25hcnlLaW5kRQorX19aTjNKU0M5U3RydWN0dXJlMjJ0b0RpY3Rpb25hcnlU
cmFuc2l0aW9uRVJOU18xMlZNRVBTMF9OUzBfMTREaWN0aW9uYXJ5S2luZEUKIF9jdGlfb3BfZ2V0
X3BuYW1lcwogX19aTjNKU0MyMkpTUHJvcGVydHlOYW1lSXRlcmF0b3I2Y3JlYXRlRVBOU185RXhl
Y1N0YXRlRVBOU184SlNPYmplY3RFCiBfX1pOM1dURjZWZWN0b3JJTjNKU0MxMElkZW50aWZpZXJF
TG0yMEVFMTRleHBhbmRDYXBhY2l0eUVtCiBfY3RpX2hhc19wcm9wZXJ0eQotX19aTjNKU0M5U3Ry
dWN0dXJlMjZmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZUVSTlNfMTJKU0dsb2JhbERhdGFFUE5T
XzhKU09iamVjdEUKK19fWk4zSlNDOVN0cnVjdHVyZTI2ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1
cmVFUk5TXzEyVk1FUE5TXzhKU09iamVjdEUKIF9KU1ZhbHVlSXNPYmplY3RPZkNsYXNzCiBfX1pO
M0pTQzE2SlNDYWxsYmFja09iamVjdElOU18yNEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdEVFM3B1
dEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVOU183SlNWYWx1ZUVSTlNfMTVQdXRQ
cm9wZXJ0eVNsb3RFCiBfSlNWYWx1ZUNyZWF0ZUpTT05TdHJpbmcKQEAgLTE1OTgsNyArMTU5OCw3
IEBAIF9fWk4zSlNDMTFTdHJpbmdpZmllcjE4YXBwZW5kUXVvdGVkU3RyaW4KIF9fWk4zSlNDN1VT
dHJpbmdDMUVQS2NqCiBfSlNPYmplY3RHZXRQcml2YXRlUHJvcGVydHkKIF9KU09iamVjdFNldFBy
aXZhdGVQcm9wZXJ0eQotX19aTjNKU0MyMEpTQ2FsbGJhY2tPYmplY3REYXRhMThzZXRQcml2YXRl
UHJvcGVydHlFUk5TXzEySlNHbG9iYWxEYXRhRVBOU182SlNDZWxsRVJLTlNfMTBJZGVudGlmaWVy
RU5TXzdKU1ZhbHVlRQorX19aTjNKU0MyMEpTQ2FsbGJhY2tPYmplY3REYXRhMThzZXRQcml2YXRl
UHJvcGVydHlFUk5TXzEyVk1FUE5TXzZKU0NlbGxFUktOU18xMElkZW50aWZpZXJFTlNfN0pTVmFs
dWVFCiBfX1pOM1dURjlIYXNoVGFibGVJTlNfNlJlZlB0cklOU18xMFN0cmluZ0ltcGxFRUVTdDRw
YWlySVMzX04zSlNDMTJXcml0ZUJhcnJpZXJJTlM1XzdVbmtub3duRUVFRU5TXzE4UGFpckZpcnN0
RXh0cmFjdG9ySVM5X0VFTlM1XzE3SWRlbnRpZmllclJlcEhhc2hFTlNfMTRQYWlySGFzaFRyYWl0
c0lOU18xMEhhc2hUcmFpdHNJUzNfRUVOU0VfSVM4X0VFRUVTRl9FNnJlaGFzaEVpCiBfSlNPYmpl
Y3REZWxldGVQcml2YXRlUHJvcGVydHkKIF9fWk4zSlNDNFlhcnIxOFBhdHRlcm5EaXNqdW5jdGlv
bjE3YWRkTmV3QWx0ZXJuYXRpdmVFdgpAQCAtMTYyMyw3ICsxNjIzLDcgQEAgX19aTjNKU0MzSklU
MjBlbWl0U2xvd19vcF9wb3N0X2RlY0VQTlNfMQogX19aTjNKU0M3SlNBcnJheTE5Z2V0T3duUHJv
cGVydHlOYW1lc0VQTlNfOUV4ZWNTdGF0ZUVSTlNfMTdQcm9wZXJ0eU5hbWVBcnJheUVOU18xNUVu
dW1lcmF0aW9uTW9kZUUKIF9fWk4zSlNDMTdQcm9wZXJ0eU5hbWVBcnJheTNhZGRFUE4zV1RGMTBT
dHJpbmdJbXBsRQogX19aTjNKU0M5RXhlY1N0YXRlMTlhcnJheVByb3RvdHlwZVRhYmxlRVBTMF8K
LV9fWk4zSlNDMjBjaGFyQXRUaHVua0dlbmVyYXRvckVQTlNfMTJKU0dsb2JhbERhdGFFUE5TXzE0
RXhlY3V0YWJsZVBvb2xFCitfX1pOM0pTQzIwY2hhckF0VGh1bmtHZW5lcmF0b3JFUE5TXzEyVk1F
UE5TXzE0RXhlY3V0YWJsZVBvb2xFCiBfX1pOM0pTQ0wxNHN0cmluZ0NoYXJMb2FkRVJOU18xOVNw
ZWNpYWxpemVkVGh1bmtKSVRFCiBfX1pOM0pTQ0wyMXN0cmluZ1Byb3RvRnVuY0NoYXJBdEVQTlNf
OUV4ZWNTdGF0ZUUKIF9fWk4zV1RGNlZlY3RvcklQTjNKU0MxNEV4cHJlc3Npb25Ob2RlRUxtMTZF
RTE0ZXhwYW5kQ2FwYWNpdHlFbQpAQCAtMTY2NSw3ICsxNjY1LDcgQEAgX19aTjNKU0MzSklUMTRl
bWl0X29wX3JzaGlmdEVQTlNfMTFJbnN0cgogX19aTjNKU0MzSklUMThlbWl0U2xvd19vcF9yc2hp
ZnRFUE5TXzExSW5zdHJ1Y3Rpb25FUlBOU18xM1Nsb3dDYXNlRW50cnlFCiBfY3RpX29wX3B1dF9i
eV9pZF90cmFuc2l0aW9uX3JlYWxsb2MKIF9fWk5LM1dURjZTdHJpbmc1c3BsaXRFdGJSTlNfNlZl
Y3RvcklTMF9MbTBFRUUKLV9fWk4zSlNDMjRjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3JFUE5TXzEy
SlNHbG9iYWxEYXRhRVBOU18xNEV4ZWN1dGFibGVQb29sRQorX19aTjNKU0MyNGNoYXJDb2RlQXRU
aHVua0dlbmVyYXRvckVQTlNfMTJWTUVQTlNfMTRFeGVjdXRhYmxlUG9vbEUKIF9jdGlfb3BfZ2V0
X2J5X3ZhbF9zdHJpbmcKIF9fWk4zSlNDMTdTdHJpbmdDb25zdHJ1Y3RvcjExZ2V0Q2FsbERhdGFF
Uk5TXzhDYWxsRGF0YUUKIF9fWk4zSlNDTDIxY2FsbFN0cmluZ0NvbnN0cnVjdG9yRVBOU185RXhl
Y1N0YXRlRQpAQCAtMTY3NSwxMCArMTY3NSwxMCBAQCBfX1pOM0pTQzE3TnVtYmVyQ29uc3RydWN0
b3IxOGdldE93blByb3BlCiBfX1pOM0pTQzEzanNBZGRTbG93Q2FzZUVQTlNfOUV4ZWNTdGF0ZUVO
U183SlNWYWx1ZUVTMl8KIF9fWk5LM0pTQzhKU1N0cmluZzExdG9QcmltaXRpdmVFUE5TXzlFeGVj
U3RhdGVFTlNfMjJQcmVmZXJyZWRQcmltaXRpdmVUeXBlRQogX2N0aV9vcF9nZXRfYnlfaWRfZ2V0
dGVyX3N0dWIKLV9fWk4zSlNDOVN0cnVjdHVyZTI0cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uRVJO
U18xMkpTR2xvYmFsRGF0YUVQUzBfUktOU18xMElkZW50aWZpZXJFUm0KK19fWk4zSlNDOVN0cnVj
dHVyZTI0cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uRVJOU18xMlZNRVBTMF9SS05TXzEwSWRlbnRp
ZmllckVSbQogX19aTjNKU0M5U3RydWN0dXJlNnJlbW92ZUVSS05TXzEwSWRlbnRpZmllckUKIF9f
Wk4zV1RGNlZlY3RvcklqTG0wRUUxNGV4cGFuZENhcGFjaXR5RW0KLV9fWk4zSlNDOVN0cnVjdHVy
ZTMxcmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbkVSTlNfMTJKU0dsb2JhbERhdGFFUktO
U18xMElkZW50aWZpZXJFCitfX1pOM0pTQzlTdHJ1Y3R1cmUzMXJlbW92ZVByb3BlcnR5V2l0aG91
dFRyYW5zaXRpb25FUk5TXzEyVk1FUktOU18xMElkZW50aWZpZXJFCiBfX1pOM0pTQzEyR2V0dGVy
U2V0dGVyMTN2aXNpdENoaWxkcmVuRVJOU185TWFya1N0YWNrRQogX19aTjNKU0M5QXJndW1lbnRz
MTN2aXNpdENoaWxkcmVuRVJOU185TWFya1N0YWNrRQogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0
MTdXZWFrTWFwc0ZpbmFsaXplcjhmaW5hbGl6ZUVOU182SGFuZGxlSU5TXzdVbmtub3duRUVFUHYK
QEAgLTE3MDEsMTMgKzE3MDEsMTMgQEAgX19aTjNKU0M4SlNQYXJzZXIyMXBhcnNlRG9XaGlsZVN0
YXRlbWVudAogX19aTjNKU0NMMTZtYXRoUHJvdG9GdW5jTWluRVBOU185RXhlY1N0YXRlRQogX19a
TjNKU0NMMjFhcnJheVByb3RvRnVuY1JldmVyc2VFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0pTQzE3
UHJvZ3JhbUV4ZWN1dGFibGUxM3Zpc2l0Q2hpbGRyZW5FUk5TXzlNYXJrU3RhY2tFCi1fX1pOM0pT
QzEySlNHbG9iYWxEYXRhMThjcmVhdGVDb250ZXh0R3JvdXBFTlNfOEhlYXBUeXBlRQotX19aTjNK
U0MxMkpTR2xvYmFsRGF0YTIyY2xlYXJCdWlsdGluU3RydWN0dXJlc0V2CitfX1pOM0pTQzEyVk0x
OGNyZWF0ZUNvbnRleHRHcm91cEVOU184SGVhcFR5cGVFCitfX1pOM0pTQzEyVk0yMmNsZWFyQnVp
bHRpblN0cnVjdHVyZXNFdgogX19aTjNKU0M0SGVhcDdkZXN0cm95RXYKIF9fWk4zSlNDOUpJVFRo
dW5rczIyY2xlYXJIb3N0RnVuY3Rpb25TdHVic0V2CiBfX1pOM0pTQzExTWFya2VkU3BhY2U3ZGVz
dHJveUV2Ci1fX1pOM0pTQzEySlNHbG9iYWxEYXRhRDFFdgotX19aTjNKU0MxMkpTR2xvYmFsRGF0
YUQyRXYKK19fWk4zSlNDMTJWTUQxRXYKK19fWk4zSlNDMTJWTUQyRXYKIF9fWk4zSlNDMTJKU1N0
YWNrRDFFdgogX19aTjNKU0MxMkpTU3RhY2tEMkV2CiBfX1pOSzNKU0M5SGFzaFRhYmxlMTFkZWxl
dGVUYWJsZUV2CkBAIC0xNzI2LDEyICsxNzI2LDEyIEBAIF9fWk4zSlNDMjVEZWZhdWx0R0NBY3Rp
dml0eUNhbGxiYWNrRDBFdgogX19aTjNKU0M5SklUVGh1bmtzRDFFdgogX19aTjNKU0MxMlNtYWxs
U3RyaW5nc0QxRXYKIF9fWk4xM09wYXF1ZUpTQ2xhc3MyNmNyZWF0ZU5vQXV0b21hdGljUHJvdG90
eXBlRVBLMTdKU0NsYXNzRGVmaW5pdGlvbgotX19aTjNKU0MxNkpTQ2FsbGJhY2tPYmplY3RJTlNf
MTRKU0dsb2JhbE9iamVjdEVFQzJFUk5TXzEySlNHbG9iYWxEYXRhRVAxM09wYXF1ZUpTQ2xhc3NQ
TlNfOVN0cnVjdHVyZUUKK19fWk4zSlNDMTZKU0NhbGxiYWNrT2JqZWN0SU5TXzE0SlNHbG9iYWxP
YmplY3RFRUMyRVJOU18xMlZNRVAxM09wYXF1ZUpTQ2xhc3NQTlNfOVN0cnVjdHVyZUUKIF9fWk4z
SlNDMTZKU0NhbGxiYWNrT2JqZWN0SU5TXzE0SlNHbG9iYWxPYmplY3RFRTRpbml0RVBOU185RXhl
Y1N0YXRlRQogX19aTjNKU0MxNkpTQ2FsbGJhY2tPYmplY3RJTlNfMTRKU0dsb2JhbE9iamVjdEVF
MThnZXRPd25Qcm9wZXJ0eVNsb3RFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUk5T
XzEyUHJvcGVydHlTbG90RQogX19aTjEzT3BhcXVlSlNDbGFzczEyc3RhdGljVmFsdWVzRVBOM0pT
QzlFeGVjU3RhdGVFCiBfX1pOMTNPcGFxdWVKU0NsYXNzMTVzdGF0aWNGdW5jdGlvbnNFUE4zSlND
OUV4ZWNTdGF0ZUUKLV9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDE0cmVzZXRQcm90b3R5cGVFUk5T
XzEySlNHbG9iYWxEYXRhRU5TXzdKU1ZhbHVlRQorX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0MTRy
ZXNldFByb3RvdHlwZUVSTlNfMTJWTUVOU183SlNWYWx1ZUUKIF9KU1JlcG9ydEV4dHJhTWVtb3J5
Q29zdAogX0pTVmFsdWVJc09iamVjdAogX0pTVmFsdWVNYWtlTnVsbApAQCAtMTgzNiwxOCArMTgz
NiwxOCBAQCBfSlNPYmplY3RIYXNQcm9wZXJ0eQogX0pTT2JqZWN0R2V0UHJvdG90eXBlCiBfX1pO
M0pTQzhKU09iamVjdDE1dW53cmFwcGVkT2JqZWN0RXYKIF9fWk4zSlNDMTFjcmVhdGVFcnJvckVQ
TlNfOUV4ZWNTdGF0ZUVSS05TXzdVU3RyaW5nRQotX19aTjNKU0MxMkpTR2xvYmFsRGF0YTZjcmVh
dGVFTlNfOEhlYXBUeXBlRQorX19aTjNKU0MxMlZNNmNyZWF0ZUVOU184SGVhcFR5cGVFCiBfX1pO
M0pTQzhKU09iamVjdDE3cHV0RGlyZWN0RnVuY3Rpb25FUE5TXzlFeGVjU3RhdGVFUE5TXzEwSlNG
dW5jdGlvbkVqCi1fX1pOM0pTQzEySlNHbG9iYWxEYXRhMTNzdGFydFNhbXBsaW5nRXYKK19fWk4z
SlNDMTJWTTEzc3RhcnRTYW1wbGluZ0V2CiBfX1pOM0pTQzExSW50ZXJwcmV0ZXIxM3N0YXJ0U2Ft
cGxpbmdFdgogX19aTjNKU0MxNURhdGVDb25zdHJ1Y3RvcjE2Z2V0Q29uc3RydWN0RGF0YUVSTlNf
MTNDb25zdHJ1Y3REYXRhRQogX19aTjNKU0NMMjhjb25zdHJ1Y3RXaXRoRGF0ZUNvbnN0cnVjdG9y
RVBOU185RXhlY1N0YXRlRQogX19aTjNKU0MyMWdyZWdvcmlhbkRhdGVUaW1lVG9NU0VQTlNfOUV4
ZWNTdGF0ZUVSS05TXzE3R3JlZ29yaWFuRGF0ZVRpbWVFZGIKIF9fWk4zSlNDTDMwZGF0ZVByb3Rv
RnVuY0dldFRpbWV6b25lT2Zmc2V0RVBOU185RXhlY1N0YXRlRQotX19aTjNKU0MxMkpTR2xvYmFs
RGF0YTEyc3RvcFNhbXBsaW5nRXYKK19fWk4zSlNDMTJWTTEyc3RvcFNhbXBsaW5nRXYKIF9fWk4z
SlNDMTFJbnRlcnByZXRlcjEyc3RvcFNhbXBsaW5nRXYKIF9fWk4zV1RGOUhhc2hUYWJsZUlqU3Q0
cGFpcklqTjNKU0MxMldyaXRlQmFycmllcklOUzJfN1Vua25vd25FRUVFTlNfMThQYWlyRmlyc3RF
eHRyYWN0b3JJUzZfRUVOU183SW50SGFzaElqRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFz
aFRyYWl0c0lqRUVOU0NfSVM1X0VFRUVTRF9FNnJlaGFzaEVpCi1fX1pOM0pTQzEySlNHbG9iYWxE
YXRhMTRkdW1wU2FtcGxlRGF0YUVQTlNfOUV4ZWNTdGF0ZUUKK19fWk4zSlNDMTJWTTE0ZHVtcFNh
bXBsZURhdGFFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0pTQzExSW50ZXJwcmV0ZXIxNGR1bXBTYW1w
bGVEYXRhRVBOU185RXhlY1N0YXRlRQogX19aTjNKU0MxNkFycmF5Q29uc3RydWN0b3IxMWdldENh
bGxEYXRhRVJOU184Q2FsbERhdGFFCiBfX1pOM0pTQ0wyMGNhbGxBcnJheUNvbnN0cnVjdG9yRVBO
U185RXhlY1N0YXRlRQpAQCAtMTg1NSwxNSArMTg1NSwxNSBAQCBfX1pOM0pTQzE3TnVtYmVyQ29u
c3RydWN0b3IxMWdldENhbGxEYXRhCiBfX1pOM0pTQ0wyMWNhbGxOdW1iZXJDb25zdHJ1Y3RvckVQ
TlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlNDTDI4bnVtYmVyQ29uc3RydWN0b3JQb3NJbmZpbml0eUVQ
TlNfOUV4ZWNTdGF0ZUVOU183SlNWYWx1ZUVSS05TXzEwSWRlbnRpZmllckUKIF9jdGlfb3BfbW9k
Ci1fX1pOM0pTQzNKSVQxM2xpbmtDb25zdHJ1Y3RFUE5TXzEwSlNGdW5jdGlvbkVQTlNfOUNvZGVC
bG9ja0VTNF9OU18yMU1hY3JvQXNzZW1ibGVyQ29kZVB0ckVQTlNfMTJDYWxsTGlua0luZm9FaVBO
U18xMkpTR2xvYmFsRGF0YUUKK19fWk4zSlNDM0pJVDEzbGlua0NvbnN0cnVjdEVQTlNfMTBKU0Z1
bmN0aW9uRVBOU185Q29kZUJsb2NrRVM0X05TXzIxTWFjcm9Bc3NlbWJsZXJDb2RlUHRyRVBOU18x
MkNhbGxMaW5rSW5mb0VpUE5TXzEyVk1FCiBfX1pOM0pTQzE0RXZhbEV4ZWN1dGFibGUxM3Zpc2l0
Q2hpbGRyZW5FUk5TXzlNYXJrU3RhY2tFCiBfX1pOM0pTQzE3TnVtYmVyQ29uc3RydWN0b3IxNmdl
dENvbnN0cnVjdERhdGFFUk5TXzEzQ29uc3RydWN0RGF0YUUKIF9fWk4zSlNDTDMwY29uc3RydWN0
V2l0aE51bWJlckNvbnN0cnVjdG9yRVBOU185RXhlY1N0YXRlRQotX19aTjNKU0MxMk51bWJlck9i
amVjdEMxRVJOU18xMkpTR2xvYmFsRGF0YUVQTlNfOVN0cnVjdHVyZUUKK19fWk4zSlNDMTJOdW1i
ZXJPYmplY3RDMUVSTlNfMTJWTUVQTlNfOVN0cnVjdHVyZUUKIF9fWk4zSlNDMThCb29sZWFuQ29u
c3RydWN0b3IxNmdldENvbnN0cnVjdERhdGFFUk5TXzEzQ29uc3RydWN0RGF0YUUKIF9fWk4zSlND
TDMxY29uc3RydWN0V2l0aEJvb2xlYW5Db25zdHJ1Y3RvckVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4z
SlNDMTZjb25zdHJ1Y3RCb29sZWFuRVBOU185RXhlY1N0YXRlRVJLTlNfN0FyZ0xpc3RFCi1fX1pO
M0pTQzEzQm9vbGVhbk9iamVjdEMxRVJOU18xMkpTR2xvYmFsRGF0YUVQTlNfOVN0cnVjdHVyZUUK
K19fWk4zSlNDMTNCb29sZWFuT2JqZWN0QzFFUk5TXzEyVk1FUE5TXzlTdHJ1Y3R1cmVFCiBfX1pO
M0pTQzEzQm9vbGVhbk9iamVjdEQxRXYKIF9fWk4zSlNDOUV4ZWNTdGF0ZTIxYXJyYXlDb25zdHJ1
Y3RvclRhYmxlRVBTMF8KIF9fWk4zSlNDMTdGdW5jdGlvblByb3RvdHlwZTExZ2V0Q2FsbERhdGFF
Uk5TXzhDYWxsRGF0YUUKQEAgLTIxOTAsNyArMjE5MCw3IEBAIF9fWk4zSlNDTDI1YXJyYXlQcm90
b0Z1bmNMYXN0SW5kZXhPZkVQTlMKIF9fWk4zV1RGMjBlcXVhbElnbm9yaW5nTnVsbGl0eUVQTlNf
MTBTdHJpbmdJbXBsRVMxXwogX2N0aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbAogX19aTjNKU0Mx
N1ByZWZpeEJyYWNrZXROb2RlMTJlbWl0Qnl0ZWNvZGVFUk5TXzE3Qnl0ZWNvZGVHZW5lcmF0b3JF
UE5TXzEwUmVnaXN0ZXJJREUKLV9fWk4zSlNDMTJKU0dsb2JhbERhdGExMENsaWVudERhdGFEMkV2
CitfX1pOM0pTQzEyVk0xMENsaWVudERhdGFEMkV2CiBfX1pOM0pTQzhEZWJ1Z2dlckQyRXYKIF9f
Wk4zV1RGMTRUaHJlYWRTcGVjaWZpY0lOU18xM1dURlRocmVhZERhdGFFRTdkZXN0cm95RVB2CiBf
X1pOM1dURjEzV1RGVGhyZWFkRGF0YUQxRXYKQEAgLTIyMDcsNyArMjIwNyw3IEBAIF9fWk5LM0pT
QzRIZWFwMTFvYmplY3RDb3VudEV2CiBfX1pOSzNKU0MxMU1hcmtlZFNwYWNlMTFvYmplY3RDb3Vu
dEV2CiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxMmRlZmluZUdldHRlckVQTlNfOUV4ZWNTdGF0
ZUVSS05TXzEwSWRlbnRpZmllckVQTlNfOEpTT2JqZWN0RWoKIF9fWk4zSlNDMTRKU0dsb2JhbE9i
amVjdDEyZGVmaW5lU2V0dGVyRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVBOU184
SlNPYmplY3RFagotX19aTjNKU0M5U3RydWN0dXJlMjJnZXR0ZXJTZXR0ZXJUcmFuc2l0aW9uRVJO
U18xMkpTR2xvYmFsRGF0YUVQUzBfCitfX1pOM0pTQzlTdHJ1Y3R1cmUyMmdldHRlclNldHRlclRy
YW5zaXRpb25FUk5TXzEyVk1FUFMwXwogX19aTjNKU0NMMjhvYmplY3RQcm90b0Z1bmNJc1Byb3Rv
dHlwZU9mRVBOU185RXhlY1N0YXRlRQogX19aTjNKU0NMMjFmdW5jdGlvblByb3RvRnVuY0NhbGxF
UE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M3QXJnTGlzdDhnZXRTbGljZUVpUlMwXwpAQCAtMjMz
MiwxNyArMjMzMiwxNyBAQCBfX1pOM0pTQzEzVW5hcnlQbHVzTm9kZTE0c3RyaXBVbmFyeVBsdXNF
CiBfX1pOM0pTQ0wyOW9iamVjdFByb3RvRnVuY1RvTG9jYWxlU3RyaW5nRVBOU185RXhlY1N0YXRl
RQogX19aTjNXVEY2VmVjdG9ySU4zSlNDOEpTUGFyc2VyMTRTY29wZUxhYmVsSW5mb0VMbTJFRTE0
ZXhwYW5kQ2FwYWNpdHlFbQogX19aTjNKU0NMMzRvYmplY3RDb25zdHJ1Y3RvclByZXZlbnRFeHRl
bnNpb25zRVBOU185RXhlY1N0YXRlRQotX19aTjNKU0MxMEpTRnVuY3Rpb24xN3ByZXZlbnRFeHRl
bnNpb25zRVJOU18xMkpTR2xvYmFsRGF0YUUKLV9fWk4zSlNDOEpTT2JqZWN0MTdwcmV2ZW50RXh0
ZW5zaW9uc0VSTlNfMTJKU0dsb2JhbERhdGFFCi1fX1pOM0pTQzlTdHJ1Y3R1cmUyN3ByZXZlbnRF
eHRlbnNpb25zVHJhbnNpdGlvbkVSTlNfMTJKU0dsb2JhbERhdGFFUFMwXworX19aTjNKU0MxMEpT
RnVuY3Rpb24xN3ByZXZlbnRFeHRlbnNpb25zRVJOU18xMlZNRQorX19aTjNKU0M4SlNPYmplY3Qx
N3ByZXZlbnRFeHRlbnNpb25zRVJOU18xMlZNRQorX19aTjNKU0M5U3RydWN0dXJlMjdwcmV2ZW50
RXh0ZW5zaW9uc1RyYW5zaXRpb25FUk5TXzEyVk1FUFMwXwogX19aTjNKU0NMMjFvYmplY3RDb25z
dHJ1Y3RvclNlYWxFUE5TXzlFeGVjU3RhdGVFCi1fX1pOM0pTQzhKU09iamVjdDRzZWFsRVJOU18x
MkpTR2xvYmFsRGF0YUUKLV9fWk4zSlNDOVN0cnVjdHVyZThpc1NlYWxlZEVSTlNfMTJKU0dsb2Jh
bERhdGFFCi1fX1pOM0pTQzlTdHJ1Y3R1cmUxNHNlYWxUcmFuc2l0aW9uRVJOU18xMkpTR2xvYmFs
RGF0YUVQUzBfCitfX1pOM0pTQzhKU09iamVjdDRzZWFsRVJOU18xMlZNRQorX19aTjNKU0M5U3Ry
dWN0dXJlOGlzU2VhbGVkRVJOU18xMlZNRQorX19aTjNKU0M5U3RydWN0dXJlMTRzZWFsVHJhbnNp
dGlvbkVSTlNfMTJWTUVQUzBfCiBfX1pOM0pTQ0wyM29iamVjdENvbnN0cnVjdG9yRnJlZXplRVBO
U185RXhlY1N0YXRlRQotX19aTjNKU0M4SlNPYmplY3Q2ZnJlZXplRVJOU18xMkpTR2xvYmFsRGF0
YUUKLV9fWk4zSlNDOVN0cnVjdHVyZThpc0Zyb3plbkVSTlNfMTJKU0dsb2JhbERhdGFFCi1fX1pO
M0pTQzlTdHJ1Y3R1cmUxNmZyZWV6ZVRyYW5zaXRpb25FUk5TXzEySlNHbG9iYWxEYXRhRVBTMF8K
K19fWk4zSlNDOEpTT2JqZWN0NmZyZWV6ZUVSTlNfMTJWTUUKK19fWk4zSlNDOVN0cnVjdHVyZThp
c0Zyb3plbkVSTlNfMTJWTUUKK19fWk4zSlNDOVN0cnVjdHVyZTE2ZnJlZXplVHJhbnNpdGlvbkVS
TlNfMTJWTUVQUzBfCiBfX1pOM0pTQ0wyNW9iamVjdENvbnN0cnVjdG9ySXNTZWFsZWRFUE5TXzlF
eGVjU3RhdGVFCiBfX1pOM0pTQ0wyNW9iamVjdENvbnN0cnVjdG9ySXNGcm96ZW5FUE5TXzlFeGVj
U3RhdGVFCiBfX1pOM0pTQ0wyOW9iamVjdENvbnN0cnVjdG9ySXNFeHRlbnNpYmxlRVBOU185RXhl
Y1N0YXRlRQpAQCAtMjM2MCw3ICsyMzYwLDcgQEAgX19aTjNXVEY4Q29sbGF0b3IxNXJlbGVhc2VD
b2xsYXRvckV2CiBfX1pOM0pTQzNKSVQzMGVtaXRfb3BfZW5zdXJlX3Byb3BlcnR5X2V4aXN0c0VQ
TlNfMTFJbnN0cnVjdGlvbkUKIF9jdGlfb3BfZW5zdXJlX3Byb3BlcnR5X2V4aXN0cwogX19aTksz
SlNDMjBTdHJpY3RFdmFsQWN0aXZhdGlvbjEydG9UaGlzT2JqZWN0RVBOU185RXhlY1N0YXRlRQot
X19aTjNKU0MxNUlkZW50aWZpZXJBcmVuYTIxbWFrZU51bWVyaWNJZGVudGlmaWVyRVBOU18xMkpT
R2xvYmFsRGF0YUVkCitfX1pOM0pTQzE1SWRlbnRpZmllckFyZW5hMjFtYWtlTnVtZXJpY0lkZW50
aWZpZXJFUE5TXzEyVk1FZAogX19aTjNKU0M2SlNDZWxsM3B1dEVQTlNfOUV4ZWNTdGF0ZUVSS05T
XzEwSWRlbnRpZmllckVOU183SlNWYWx1ZUVSTlNfMTVQdXRQcm9wZXJ0eVNsb3RFCiBfX1pOM0pT
QzZKU0NlbGwzcHV0RVBOU185RXhlY1N0YXRlRWpOU183SlNWYWx1ZUUKIF9fWk4zV1RGMTZjb2Rl
UG9pbnRDb21wYXJlRVJLTlNfNlN0cmluZ0VTMl8KQEAgLTIzOTQsNyArMjM5NCw3IEBAIF9fWk5L
M0pTQzExUHJvZmlsZU5vZGUyNXRyYXZlcnNlTmV4dE5vZGUKIF9fWk4zSlNDMTFQcm9maWxlTm9k
ZTEzc3RvcFByb2ZpbGluZ0V2CiBfX1pOM0pTQzExUHJvZmlsZU5vZGUxMXJlbW92ZUNoaWxkRVBT
MF8KIF9fWk4zSlNDMTFQcm9maWxlTm9kZThhZGRDaGlsZEVOM1dURjEwUGFzc1JlZlB0cklTMF9F
RQotX19aTjNKU0M4RGVidWdnZXIyM3JlY29tcGlsZUFsbEpTRnVuY3Rpb25zRVBOU18xMkpTR2xv
YmFsRGF0YUUKK19fWk4zSlNDOERlYnVnZ2VyMjNyZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc0VQTlNf
MTJWTUUKIF9fWk4zV1RGOUhhc2hUYWJsZUlQTjNKU0MxOEZ1bmN0aW9uRXhlY3V0YWJsZUVTM19O
U18xN0lkZW50aXR5RXh0cmFjdG9ySVMzX0VFTlNfN1B0ckhhc2hJUzNfRUVOU18xMEhhc2hUcmFp
dHNJUzNfRUVTOV9FNnJlaGFzaEVpCiBfX1pOM0pTQzdQcm9maWxlRDBFdgogX19aTjNXVEYxMFJl
ZkNvdW50ZWRJTjNKU0MxMVByb2ZpbGVOb2RlRUU1ZGVyZWZFdgpAQCAtMjQwMiw3ICsyNDAyLDcg
QEAgX19aTjNKU0M4UHJvZmlsZXIxMXdpbGxFeGVjdXRlRVBOU185RXhlYwogX19aTjNKU0M4UHJv
ZmlsZXIxMGRpZEV4ZWN1dGVFUE5TXzlFeGVjU3RhdGVFUktOU183VVN0cmluZ0VpCiBfX1pOSzNK
U0MxNlByb2ZpbGVHZW5lcmF0b3I1dGl0bGVFdgogX19aTjNKU0M4UHJvZmlsZXIxM3N0b3BQcm9m
aWxpbmdFUE5TXzE0SlNHbG9iYWxPYmplY3RFCi1fX1pOM0pTQzM0Y3JlYXRlVGVybWluYXRlZEV4
ZWN1dGlvbkV4Y2VwdGlvbkVQTlNfMTJKU0dsb2JhbERhdGFFCitfX1pOM0pTQzM0Y3JlYXRlVGVy
bWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbkVQTlNfMTJWTUUKIF9fWk5LM0pTQzI0VGVybWluYXRl
ZEV4ZWN1dGlvbkVycm9yMTNleGNlcHRpb25UeXBlRXYKIF9fWk4zSlNDMjRUZXJtaW5hdGVkRXhl
Y3V0aW9uRXJyb3JEMUV2CiBfX1pOM1dURjVNdXRleDd0cnlMb2NrRXYKQEAgLTI0MTEsNyArMjQx
MSw3IEBAIF9fWk4zV1RGNXlpZWxkRXYKIF9fWk4zV1RGOENvbGxhdG9yQzFFUEtjCiBfX1pOM1dU
RjhDb2xsYXRvcjE4c2V0T3JkZXJMb3dlckZpcnN0RWIKIF9fWk4zSlNDMTBKU09OT2JqZWN0MjRn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJF
Uk5TXzE4UHJvcGVydHlEZXNjcmlwdG9yRQotX19aTjNKU0M5U3RydWN0dXJlMjdkZXNwZWNpZnlE
aWN0aW9uYXJ5RnVuY3Rpb25FUk5TXzEySlNHbG9iYWxEYXRhRVJLTlNfMTBJZGVudGlmaWVyRQor
X19aTjNKU0M5U3RydWN0dXJlMjdkZXNwZWNpZnlEaWN0aW9uYXJ5RnVuY3Rpb25FUk5TXzEyVk1F
UktOU18xMElkZW50aWZpZXJFCiBfX1pOM0pTQzE3T2JqZWN0Q29uc3RydWN0b3IyNGdldE93blBy
b3BlcnR5RGVzY3JpcHRvckVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVSTlNfMThQ
cm9wZXJ0eURlc2NyaXB0b3JFCiBfX1pOM0pTQzE1T2JqZWN0UHJvdG90eXBlMjRnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3JFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUk5TXzE4UHJv
cGVydHlEZXNjcmlwdG9yRQogX19aTjNKU0MxN1N0cmluZ0NvbnN0cnVjdG9yMjRnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3JFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUk5TXzE4UHJv
cGVydHlEZXNjcmlwdG9yRQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0tleXdvcmRMb29r
dXBHZW5lcmF0b3IucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0tleXdv
cmRMb29rdXBHZW5lcmF0b3IucHkJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9LZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xNDQs
NyArMTQ0LDcgQEAgY2xhc3MgVHJpZToKICAgICAgICAgICAgIHByaW50KHN0ciArICJpZiAoIWlz
SWRlbnRQYXJ0KGNvZGVbJWRdKSkgeyIgJSAobGVuKHNlbGYuZnVsbFByZWZpeCkpKQogICAgICAg
ICAgICAgcHJpbnQoc3RyICsgIiAgICBpbnRlcm5hbFNoaWZ0PCVkPigpOyIgJSBsZW4oc2VsZi5m
dWxsUHJlZml4KSkKICAgICAgICAgICAgIHByaW50KHN0ciArICIgICAgaWYgKHNob3VsZENyZWF0
ZUlkZW50aWZpZXIpIikKLSAgICAgICAgICAgIHByaW50KHN0ciArICgiICAgICAgICBkYXRhLT5p
ZGVudCA9ICZtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPiVzS2V5d29yZDsiICUgc2VsZi5m
dWxsUHJlZml4KSkKKyAgICAgICAgICAgIHByaW50KHN0ciArICgiICAgICAgICBkYXRhLT5pZGVu
dCA9ICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT4lc0tleXdvcmQ7IiAlIHNlbGYuZnVsbFByZWZpeCkp
CiAgICAgICAgICAgICBwcmludChzdHIgKyAiICAgIHJldHVybiAiICsgc2VsZi52YWx1ZSArICI7
IikKICAgICAgICAgICAgIHByaW50KHN0ciArICJ9IikKICAgICAgICAgcm9vdEluZGV4ID0gbGVu
KHNlbGYuZnVsbFByZWZpeCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lv
biAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBj
b3B5KQpAQCAtMjY2LDcgKzI2Niw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJ1bnRpbWUvSlNEYXRl
TWF0aC5jcHAgXAogICAgIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHAgXAogICAgIHJ1bnRpbWUvSlNC
b3VuZEZ1bmN0aW9uLmNwcCBcCi0gICAgcnVudGltZS9KU0dsb2JhbERhdGEuY3BwIFwKKyAgICBy
dW50aW1lL1ZNLmNwcCBcCiAgICAgcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgXAogICAgIHJ1
bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIFwKICAgICBydW50aW1lL0pTUHJveHku
Y3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDE3ICsxNzYs
MTcgQEAgbG9uZyBTdG9wV2F0Y2g6OmdldEVsYXBzZWRNUygpCiAKIGNsYXNzIEdsb2JhbE9iamVj
dCA6IHB1YmxpYyBKU0dsb2JhbE9iamVjdCB7CiBwcml2YXRlOgotICAgIEdsb2JhbE9iamVjdChK
U0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICBHbG9iYWxPYmplY3QoVk0mLCBTdHJ1Y3R1
cmUqKTsKIAogcHVibGljOgogICAgIHR5cGVkZWYgSlNHbG9iYWxPYmplY3QgQmFzZTsKIAotICAg
IHN0YXRpYyBHbG9iYWxPYmplY3QqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJndW1lbnRzKQorICAg
IHN0YXRpYyBHbG9iYWxPYmplY3QqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJndW1lbnRzKQogICAgIHsKLSAgICAgICAgR2xvYmFs
T2JqZWN0KiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxHbG9iYWxPYmplY3Q+
KGdsb2JhbERhdGEuaGVhcCkpIEdsb2JhbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwot
ICAgICAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIGFyZ3VtZW50cyk7Ci0g
ICAgICAgIGdsb2JhbERhdGEuaGVhcC5hZGRGaW5hbGl6ZXIob2JqZWN0LCBkZXN0cm95KTsKLSAg
ICAgICAgb2JqZWN0LT5zZXRHbG9iYWxUaGlzKGdsb2JhbERhdGEsIEpTUHJveHk6OmNyZWF0ZShn
bG9iYWxEYXRhLCBKU1Byb3h5OjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgb2JqZWN0LCBv
YmplY3QtPnByb3RvdHlwZSgpKSwgb2JqZWN0KSk7CisgICAgICAgIEdsb2JhbE9iamVjdCogb2Jq
ZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8R2xvYmFsT2JqZWN0Pih2bS5oZWFwKSkg
R2xvYmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpOworICAgICAgICBvYmplY3QtPmZpbmlzaENyZWF0
aW9uKHZtLCBhcmd1bWVudHMpOworICAgICAgICB2bS5oZWFwLmFkZEZpbmFsaXplcihvYmplY3Qs
IGRlc3Ryb3kpOworICAgICAgICBvYmplY3QtPnNldEdsb2JhbFRoaXModm0sIEpTUHJveHk6OmNy
ZWF0ZSh2bSwgSlNQcm94eTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBvYmplY3QsIG9iamVjdC0+cHJv
dG90eXBlKCkpLCBvYmplY3QpKTsKICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICB9CiAKQEAg
LTE5NSw2NSArMTk1LDY1IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNf
aW5mbzsKICAgICBzdGF0aWMgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgc19nbG9iYWxP
YmplY3RNZXRob2RUYWJsZTsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTVmFsdWUgcHJvdG90eXBlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIDAsIHBy
b3RvdHlwZSwgVHlwZUluZm8oR2xvYmFsT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCAwLCBwcm90b3R5cGUs
IFR5cGVJbmZvKEdsb2JhbE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAg
ICAgfQogCiAgICAgc3RhdGljIGJvb2wgamF2YVNjcmlwdEV4cGVyaW1lbnRzRW5hYmxlZChjb25z
dCBKU0dsb2JhbE9iamVjdCopIHsgcmV0dXJuIHRydWU7IH0KIAogcHJvdGVjdGVkOgotICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgYXJndW1lbnRzKQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgYXJndW1lbnRzKQogICAgIHsKLSAgICAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
ICAgICAgICAgCi0gICAgICAgIGFkZEZ1bmN0aW9uKGdsb2JhbERhdGEsICJkZWJ1ZyIsIGZ1bmN0
aW9uRGVidWcsIDEpOwotICAgICAgICBhZGRGdW5jdGlvbihnbG9iYWxEYXRhLCAiZGVzY3JpYmUi
LCBmdW5jdGlvbkRlc2NyaWJlLCAxKTsKLSAgICAgICAgYWRkRnVuY3Rpb24oZ2xvYmFsRGF0YSwg
InByaW50IiwgZnVuY3Rpb25QcmludCwgMSk7Ci0gICAgICAgIGFkZEZ1bmN0aW9uKGdsb2JhbERh
dGEsICJxdWl0IiwgZnVuY3Rpb25RdWl0LCAwKTsKLSAgICAgICAgYWRkRnVuY3Rpb24oZ2xvYmFs
RGF0YSwgImdjIiwgZnVuY3Rpb25HQywgMCk7CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiZGVi
dWciLCBmdW5jdGlvbkRlYnVnLCAxKTsKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJkZXNjcmli
ZSIsIGZ1bmN0aW9uRGVzY3JpYmUsIDEpOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgInByaW50
IiwgZnVuY3Rpb25QcmludCwgMSk7CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAicXVpdCIsIGZ1
bmN0aW9uUXVpdCwgMCk7CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiZ2MiLCBmdW5jdGlvbkdD
LCAwKTsKICNpZm5kZWYgTkRFQlVHCi0gICAgICAgIGFkZEZ1bmN0aW9uKGdsb2JhbERhdGEsICJk
dW1wQ2FsbEZyYW1lIiwgZnVuY3Rpb25EdW1wQ2FsbEZyYW1lLCAwKTsKLSAgICAgICAgYWRkRnVu
Y3Rpb24oZ2xvYmFsRGF0YSwgInJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5IiwgZnVuY3Rpb25SZWxl
YXNlRXhlY3V0YWJsZU1lbW9yeSwgMCk7CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiZHVtcENh
bGxGcmFtZSIsIGZ1bmN0aW9uRHVtcENhbGxGcmFtZSwgMCk7CisgICAgICAgIGFkZEZ1bmN0aW9u
KHZtLCAicmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkiLCBmdW5jdGlvblJlbGVhc2VFeGVjdXRhYmxl
TWVtb3J5LCAwKTsKICNlbmRpZgotICAgICAgICBhZGRGdW5jdGlvbihnbG9iYWxEYXRhLCAidmVy
c2lvbiIsIGZ1bmN0aW9uVmVyc2lvbiwgMSk7Ci0gICAgICAgIGFkZEZ1bmN0aW9uKGdsb2JhbERh
dGEsICJydW4iLCBmdW5jdGlvblJ1biwgMSk7Ci0gICAgICAgIGFkZEZ1bmN0aW9uKGdsb2JhbERh
dGEsICJsb2FkIiwgZnVuY3Rpb25Mb2FkLCAxKTsKLSAgICAgICAgYWRkRnVuY3Rpb24oZ2xvYmFs
RGF0YSwgImNoZWNrU3ludGF4IiwgZnVuY3Rpb25DaGVja1N5bnRheCwgMSk7Ci0gICAgICAgIGFk
ZEZ1bmN0aW9uKGdsb2JhbERhdGEsICJqc2NTdGFjayIsIGZ1bmN0aW9uSlNDU3RhY2ssIDEpOwot
ICAgICAgICBhZGRGdW5jdGlvbihnbG9iYWxEYXRhLCAicmVhZGxpbmUiLCBmdW5jdGlvblJlYWRs
aW5lLCAwKTsKLSAgICAgICAgYWRkRnVuY3Rpb24oZ2xvYmFsRGF0YSwgInByZWNpc2VUaW1lIiwg
ZnVuY3Rpb25QcmVjaXNlVGltZSwgMCk7CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAidmVyc2lv
biIsIGZ1bmN0aW9uVmVyc2lvbiwgMSk7CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAicnVuIiwg
ZnVuY3Rpb25SdW4sIDEpOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgImxvYWQiLCBmdW5jdGlv
bkxvYWQsIDEpOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgImNoZWNrU3ludGF4IiwgZnVuY3Rp
b25DaGVja1N5bnRheCwgMSk7CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAianNjU3RhY2siLCBm
dW5jdGlvbkpTQ1N0YWNrLCAxKTsKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJyZWFkbGluZSIs
IGZ1bmN0aW9uUmVhZGxpbmUsIDApOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgInByZWNpc2VU
aW1lIiwgZnVuY3Rpb25QcmVjaXNlVGltZSwgMCk7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdT
KQotICAgICAgICBhZGRGdW5jdGlvbihnbG9iYWxEYXRhLCAic2V0U2FtcGxpbmdGbGFncyIsIGZ1
bmN0aW9uU2V0U2FtcGxpbmdGbGFncywgMSk7Ci0gICAgICAgIGFkZEZ1bmN0aW9uKGdsb2JhbERh
dGEsICJjbGVhclNhbXBsaW5nRmxhZ3MiLCBmdW5jdGlvbkNsZWFyU2FtcGxpbmdGbGFncywgMSk7
CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAic2V0U2FtcGxpbmdGbGFncyIsIGZ1bmN0aW9uU2V0
U2FtcGxpbmdGbGFncywgMSk7CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiY2xlYXJTYW1wbGlu
Z0ZsYWdzIiwgZnVuY3Rpb25DbGVhclNhbXBsaW5nRmxhZ3MsIDEpOwogI2VuZGlmCiAgICAgICAg
IAotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24oZ2xvYmFsRGF0YSwgIlVpbnQ4QXJy
YXkiLCBjb25zdHJ1Y3RKU1VpbnQ4QXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxl
RnVuY3Rpb24oZ2xvYmFsRGF0YSwgIlVpbnQ4Q2xhbXBlZEFycmF5IiwgY29uc3RydWN0SlNVaW50
OENsYW1wZWRBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbihnbG9i
YWxEYXRhLCAiVWludDE2QXJyYXkiLCBjb25zdHJ1Y3RKU1VpbnQxNkFycmF5LCAxKTsKLSAgICAg
ICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKGdsb2JhbERhdGEsICJVaW50MzJBcnJheSIsIGNv
bnN0cnVjdEpTVWludDMyQXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rp
b24oZ2xvYmFsRGF0YSwgIkludDhBcnJheSIsIGNvbnN0cnVjdEpTSW50OEFycmF5LCAxKTsKLSAg
ICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKGdsb2JhbERhdGEsICJJbnQxNkFycmF5Iiwg
Y29uc3RydWN0SlNJbnQxNkFycmF5LCAxKTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0
aW9uKGdsb2JhbERhdGEsICJJbnQzMkFycmF5IiwgY29uc3RydWN0SlNJbnQzMkFycmF5LCAxKTsK
LSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKGdsb2JhbERhdGEsICJGbG9hdDMyQXJy
YXkiLCBjb25zdHJ1Y3RKU0Zsb2F0MzJBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFi
bGVGdW5jdGlvbihnbG9iYWxEYXRhLCAiRmxvYXQ2NEFycmF5IiwgY29uc3RydWN0SlNGbG9hdDY0
QXJyYXksIDEpOworICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJVaW50OEFy
cmF5IiwgY29uc3RydWN0SlNVaW50OEFycmF5LCAxKTsKKyAgICAgICAgYWRkQ29uc3RydWN0YWJs
ZUZ1bmN0aW9uKHZtLCAiVWludDhDbGFtcGVkQXJyYXkiLCBjb25zdHJ1Y3RKU1VpbnQ4Q2xhbXBl
ZEFycmF5LCAxKTsKKyAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiVWludDE2
QXJyYXkiLCBjb25zdHJ1Y3RKU1VpbnQxNkFycmF5LCAxKTsKKyAgICAgICAgYWRkQ29uc3RydWN0
YWJsZUZ1bmN0aW9uKHZtLCAiVWludDMyQXJyYXkiLCBjb25zdHJ1Y3RKU1VpbnQzMkFycmF5LCAx
KTsKKyAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiSW50OEFycmF5IiwgY29u
c3RydWN0SlNJbnQ4QXJyYXksIDEpOworICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24o
dm0sICJJbnQxNkFycmF5IiwgY29uc3RydWN0SlNJbnQxNkFycmF5LCAxKTsKKyAgICAgICAgYWRk
Q29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiSW50MzJBcnJheSIsIGNvbnN0cnVjdEpTSW50MzJB
cnJheSwgMSk7CisgICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIkZsb2F0MzJB
cnJheSIsIGNvbnN0cnVjdEpTRmxvYXQzMkFycmF5LCAxKTsKKyAgICAgICAgYWRkQ29uc3RydWN0
YWJsZUZ1bmN0aW9uKHZtLCAiRmxvYXQ2NEFycmF5IiwgY29uc3RydWN0SlNGbG9hdDY0QXJyYXks
IDEpOwogCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9i
YWxFeGVjKCksIDApOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50cy5z
aXplKCk7ICsraSkKICAgICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChnbG9iYWxFeGVj
KCksIGksIGpzU3RyaW5nKGdsb2JhbEV4ZWMoKSwgYXJndW1lbnRzW2ldKSk7Ci0gICAgICAgIHB1
dERpcmVjdChnbG9iYWxEYXRhLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgImFyZ3VtZW50cyIp
LCBhcnJheSk7CisgICAgICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCks
ICJhcmd1bWVudHMiKSwgYXJyYXkpOwogICAgIH0KIAotICAgIHZvaWQgYWRkRnVuY3Rpb24oSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBm
dW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKQorICAgIHZvaWQgYWRkRnVuY3Rpb24oVk0mIHZt
LCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgdW5zaWduZWQgYXJn
dW1lbnRzKQogICAgIHsKICAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyKGdsb2JhbEV4ZWMo
KSwgbmFtZSk7Ci0gICAgICAgIHB1dERpcmVjdChnbG9iYWxEYXRhLCBpZGVudGlmaWVyLCBKU0Z1
bmN0aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBhcmd1bWVudHMsIGlkZW50aWZpZXIu
c3RyaW5nKCksIGZ1bmN0aW9uKSk7CisgICAgICAgIHB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwg
SlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgYXJndW1lbnRzLCBpZGVudGlm
aWVyLnN0cmluZygpLCBmdW5jdGlvbikpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGFkZENvbnN0
cnVjdGFibGVGdW5jdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IGNoYXIqIG5h
bWUsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpCisgICAgdm9p
ZCBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24oVk0mIHZtLCBjb25zdCBjaGFyKiBuYW1lLCBOYXRp
dmVGdW5jdGlvbiBmdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKQogICAgIHsKICAgICAgICAg
SWRlbnRpZmllciBpZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgbmFtZSk7Ci0gICAgICAgIHB1dERp
cmVjdChnbG9iYWxEYXRhLCBpZGVudGlmaWVyLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZ2xvYmFsRXhl
YygpLCB0aGlzLCBhcmd1bWVudHMsIGlkZW50aWZpZXIuc3RyaW5nKCksIGZ1bmN0aW9uLCBOb0lu
dHJpbnNpYywgZnVuY3Rpb24pKTsKKyAgICAgICAgcHV0RGlyZWN0KHZtLCBpZGVudGlmaWVyLCBK
U0Z1bmN0aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBhcmd1bWVudHMsIGlkZW50aWZp
ZXIuc3RyaW5nKCksIGZ1bmN0aW9uLCBOb0ludHJpbnNpYywgZnVuY3Rpb24pKTsKICAgICB9CiB9
OwogCkBAIC0yNjMsOCArMjYzLDggQEAgY29uc3QgQ2xhc3NJbmZvIEdsb2JhbE9iamVjdDo6c19p
bmZvID0gewogY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgR2xvYmFsT2JqZWN0OjpzX2ds
b2JhbE9iamVjdE1ldGhvZFRhYmxlID0geyAmYWxsb3dzQWNjZXNzRnJvbSwgJnN1cHBvcnRzUHJv
ZmlsaW5nLCAmc3VwcG9ydHNSaWNoU291cmNlSW5mbywgJnNob3VsZEludGVycnVwdFNjcmlwdCwg
JmphdmFTY3JpcHRFeHBlcmltZW50c0VuYWJsZWQgfTsKIAogCi1HbG9iYWxPYmplY3Q6Okdsb2Jh
bE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQot
ICAgIDogSlNHbG9iYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCAmc19nbG9iYWxPYmpl
Y3RNZXRob2RUYWJsZSkKK0dsb2JhbE9iamVjdDo6R2xvYmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBKU0dsb2JhbE9iamVjdCh2bSwgc3RydWN0dXJlLCAmc19n
bG9iYWxPYmplY3RNZXRob2RUYWJsZSkKIHsKIH0KIApAQCAtMzA1LDcgKzMwNSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmkKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25EdW1wQ2FsbEZyYW1lKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBp
ZiAoIWV4ZWMtPmNhbGxlckZyYW1lKCktPmhhc0hvc3RDYWxsRnJhbWVGbGFnKCkpCi0gICAgICAg
IGV4ZWMtPmdsb2JhbERhdGEoKS5pbnRlcnByZXRlci0+ZHVtcENhbGxGcmFtZShleGVjLT5jYWxs
ZXJGcmFtZSgpKTsKKyAgICAgICAgZXhlYy0+dm0oKS5pbnRlcnByZXRlci0+ZHVtcENhbGxGcmFt
ZShleGVjLT5jYWxsZXJGcmFtZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogfQogI2VuZGlmCkBAIC0zMjgsNyArMzI4LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkpTQwogICAgIHRyYWNlLmFwcGVuZExpdGVyYWwoIi0tPiBT
dGFjayB0cmFjZTpcbiIpOwogCiAgICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJhY2U7Ci0g
ICAgSW50ZXJwcmV0ZXI6OmdldFN0YWNrVHJhY2UoJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3RhY2tU
cmFjZSk7CisgICAgSW50ZXJwcmV0ZXI6OmdldFN0YWNrVHJhY2UoJmV4ZWMtPnZtKCksIHN0YWNr
VHJhY2UpOwogICAgIGludCBpID0gMDsKIAogICAgIGZvciAoVmVjdG9yPFN0YWNrRnJhbWU+Ojpp
dGVyYXRvciBpdGVyID0gc3RhY2tUcmFjZS5iZWdpbigpOyBpdGVyIDwgc3RhY2tUcmFjZS5lbmQo
KTsgaXRlcisrKSB7CkBAIC0zNTEsNyArMzUxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkdDKAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJl
bGVhc2VFeGVjdXRhYmxlTWVtb3J5KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKLSAgICBleGVjLT5nbG9iYWxEYXRhKCkucmVsZWFzZUV4ZWN1dGFibGVN
ZW1vcnkoKTsKKyAgICBleGVjLT52bSgpLnJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KCk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KICNlbmRpZgpAQCAtMzcw
LDcgKzM3MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4KICAg
ICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZU5hbWUsIHNjcmlwdCkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFcnJvcihleGVjLCBjcmVhdGVFcnJv
cihleGVjLCAiQ291bGQgbm90IG9wZW4gZmlsZS4iKSkpOwogCi0gICAgR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBHbG9iYWxPYmplY3Q6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIEds
b2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNOdWxsKCkp
LCBWZWN0b3I8U3RyaW5nPigpKTsKKyAgICBHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEds
b2JhbE9iamVjdDo6Y3JlYXRlKGV4ZWMtPnZtKCksIEdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPnZtKCksIGpzTnVsbCgpKSwgVmVjdG9yPFN0cmluZz4oKSk7CiAKICAgICBKU1Zh
bHVlIGV4Y2VwdGlvbjsKICAgICBTdG9wV2F0Y2ggc3RvcFdhdGNoOwpAQCAtNTIzLDcgKzUyMyw3
IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICBRQ29yZUFwcGxpY2F0aW9u
IGFwcChhcmdjLCBhcmd2KTsKICNlbmRpZgogCi0gICAgLy8gSW5pdGlhbGl6ZSBKU0MgYmVmb3Jl
IGdldHRpbmcgSlNHbG9iYWxEYXRhLgorICAgIC8vIEluaXRpYWxpemUgSlNDIGJlZm9yZSBnZXR0
aW5nIFZNLgogI2lmIEVOQUJMRShTQU1QTElOR19SRUdJT05TKQogICAgIFdURjo6aW5pdGlhbGl6
ZU1haW5UaHJlYWQoKTsKICNlbmRpZgpAQCAtNTQ5LDcgKzU0OSw3IEBAIHN0YXRpYyBib29sIHJ1
bldpdGhTY3JpcHRzKEdsb2JhbE9iamVjdCoKICAgICBpZiAoZHVtcCkKICAgICAgICAgSlNDOjpP
cHRpb25zOjpkdW1wR2VuZXJhdGVkQnl0ZWNvZGVzKCkgPSB0cnVlOwogCi0gICAgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQogICAg
IFNhbXBsaW5nRmxhZ3M6OnN0YXJ0KCk7CkBAIC01NjcsNyArNTY3LDcgQEAgc3RhdGljIGJvb2wg
cnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0KgogICAgICAgICAgICAgZmlsZU5hbWUgPSAiW0Nv
bW1hbmQgTGluZV0iOwogICAgICAgICB9CiAKLSAgICAgICAgZ2xvYmFsRGF0YS5zdGFydFNhbXBs
aW5nKCk7CisgICAgICAgIHZtLnN0YXJ0U2FtcGxpbmcoKTsKIAogICAgICAgICBKU1ZhbHVlIGV2
YWx1YXRpb25FeGNlcHRpb247CiAgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0
ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKHNjcmlwdCwgZmlsZU5hbWUp
LCBKU1ZhbHVlKCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKQEAgLTU4Miw3ICs1ODIsNyBAQCBz
dGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqCiAgICAgICAgICAgICAgICAg
cHJpbnRmKCIlc1xuIiwgc3RhY2tWYWx1ZS50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGdsb2JhbERhdGEuc3RvcFNhbXBsaW5nKCk7CisgICAgICAg
IHZtLnN0b3BTYW1wbGluZygpOwogICAgICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKS0+
Y2xlYXJFeGNlcHRpb24oKTsKICAgICB9CiAKQEAgLTU5MiwxMiArNTkyLDEyIEBAIHN0YXRpYyBi
b29sIHJ1bldpdGhTY3JpcHRzKEdsb2JhbE9iamVjdCoKICNpZiBFTkFCTEUoU0FNUExJTkdfUkVH
SU9OUykKICAgICBTYW1wbGluZ1JlZ2lvbjo6ZHVtcCgpOwogI2VuZGlmCi0gICAgZ2xvYmFsRGF0
YS5kdW1wU2FtcGxlRGF0YShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSk7CisgICAgdm0uZHVt
cFNhbXBsZURhdGEoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpOwogI2lmIEVOQUJMRShTQU1Q
TElOR19DT1VOVEVSUykKICAgICBBYnN0cmFjdFNhbXBsaW5nQ291bnRlcjo6ZHVtcCgpOwogI2Vu
ZGlmCiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQotICAgIGdsb2JhbERhdGEuZHVtcFJlZ0V4
cFRyYWNlKCk7CisgICAgdm0uZHVtcFJlZ0V4cFRyYWNlKCk7CiAjZW5kaWYKICAgICByZXR1cm4g
c3VjY2VzczsKIH0KQEAgLTc1OCwxNyArNzU4LDE3IEBAIHZvaWQgQ29tbWFuZExpbmU6OnBhcnNl
QXJndW1lbnRzKGludCBhcmcKIAogaW50IGpzY21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQog
ewotICAgIC8vIE5vdGUgdGhhdCB0aGUgb3B0aW9ucyBwYXJzaW5nIGNhbiBhZmZlY3QgSlNHbG9i
YWxEYXRhIGNyZWF0aW9uLCBhbmQgdGh1cworICAgIC8vIE5vdGUgdGhhdCB0aGUgb3B0aW9ucyBw
YXJzaW5nIGNhbiBhZmZlY3QgVk0gY3JlYXRpb24sIGFuZCB0aHVzCiAgICAgLy8gY29tZXMgZmly
c3QuCiAgICAgQ29tbWFuZExpbmUgb3B0aW9ucyhhcmdjLCBhcmd2KTsKLSAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEgPSBKU0dsb2JhbERhdGE6OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYo
KTsKLSAgICBBUElFbnRyeVNoaW0gc2hpbShnbG9iYWxEYXRhKTsKKyAgICBWTSogdm0gPSBWTTo6
Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigpOworICAgIEFQSUVudHJ5U2hpbSBzaGltKHZtKTsK
ICAgICBpbnQgcmVzdWx0OwogCi0gICAgaWYgKG9wdGlvbnMubV9wcm9maWxlICYmICFnbG9iYWxE
YXRhLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCi0gICAgICAgIGdsb2JhbERhdGEtPm1fcGVyQnl0
ZWNvZGVQcm9maWxlciA9IGFkb3B0UHRyKG5ldyBQcm9maWxlcjo6RGF0YWJhc2UoKmdsb2JhbERh
dGEpKTsKKyAgICBpZiAob3B0aW9ucy5tX3Byb2ZpbGUgJiYgIXZtLT5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXIpCisgICAgICAgIHZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgPSBhZG9wdFB0cihuZXcg
UHJvZmlsZXI6OkRhdGFiYXNlKCp2bSkpOwogICAgIAotICAgIEdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gR2xvYmFsT2JqZWN0OjpjcmVhdGUoKmdsb2JhbERhdGEsIEdsb2JhbE9iamVjdDo6
Y3JlYXRlU3RydWN0dXJlKCpnbG9iYWxEYXRhLCBqc051bGwoKSksIG9wdGlvbnMubV9hcmd1bWVu
dHMpOworICAgIEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gR2xvYmFsT2JqZWN0OjpjcmVh
dGUoKnZtLCBHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgqdm0sIGpzTnVsbCgpKSwgb3B0
aW9ucy5tX2FyZ3VtZW50cyk7CiAgICAgYm9vbCBzdWNjZXNzID0gcnVuV2l0aFNjcmlwdHMoZ2xv
YmFsT2JqZWN0LCBvcHRpb25zLm1fc2NyaXB0cywgb3B0aW9ucy5tX2R1bXApOwogICAgIGlmIChv
cHRpb25zLm1faW50ZXJhY3RpdmUgJiYgc3VjY2VzcykKICAgICAgICAgcnVuSW50ZXJhY3RpdmUo
Z2xvYmFsT2JqZWN0KTsKQEAgLTc3OSw3ICs3NzksNyBAQCBpbnQganNjbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiAgICAgICAgIHByaW50ZigianNjIGV4aXRpbmcgJWRcbiIsIHJlc3VsdCk7
CiAgICAgCiAgICAgaWYgKG9wdGlvbnMubV9wcm9maWxlKSB7Ci0gICAgICAgIGlmICghZ2xvYmFs
RGF0YS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5zYXZlKG9wdGlvbnMubV9wcm9maWxlck91dHB1
dC51dGY4KCkuZGF0YSgpKSkKKyAgICAgICAgaWYgKCF2bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
LT5zYXZlKG9wdGlvbnMubV9wcm9maWxlck91dHB1dC51dGY4KCkuZGF0YSgpKSkKICAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiY291bGQgbm90IHNhdmUgcHJvZmlsZXIgb3V0cHV0LlxuIik7
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFJlZ0V4cC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RSZWdFeHAuY3BwCShyZXZpc2lv
biAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFJlZ0V4cC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMCwxNSArMTEwLDE1IEBAIHN0cnVjdCBSZWdFeHBUZXN0IHsKIAogY2xh
c3MgR2xvYmFsT2JqZWN0IDogcHVibGljIEpTR2xvYmFsT2JqZWN0IHsKIHByaXZhdGU6Ci0gICAg
R2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBhcmd1bWVudHMpOworICAgIEdsb2JhbE9iamVjdChWTSYsIFN0cnVjdHVyZSosIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBhcmd1bWVudHMpOwogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0ds
b2JhbE9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEdsb2JhbE9iamVjdCogY3JlYXRlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBhcmd1bWVudHMpCisgICAgc3RhdGljIEdsb2JhbE9iamVjdCogY3JlYXRlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhcmd1bWVudHMp
CiAgICAgewotICAgICAgICBHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEdsb2JhbE9iamVjdD4oZ2xvYmFsRGF0YS5oZWFwKSkgR2xvYmFsT2Jq
ZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYXJndW1lbnRzKTsKLSAgICAgICAgZ2xvYmFsRGF0
YS5oZWFwLmFkZEZpbmFsaXplcihnbG9iYWxPYmplY3QsIGRlc3Ryb3kpOworICAgICAgICBHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEdsb2Jh
bE9iamVjdD4odm0uaGVhcCkpIEdsb2JhbE9iamVjdCh2bSwgc3RydWN0dXJlLCBhcmd1bWVudHMp
OworICAgICAgICB2bS5oZWFwLmFkZEZpbmFsaXplcihnbG9iYWxPYmplY3QsIGRlc3Ryb3kpOwog
ICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0OwogICAgIH0KIApAQCAtMTI2LDE1ICsxMjYsMTUg
QEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdG9yID0gZmFs
c2U7CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCAwLCBwcm90b3R5cGUsIFR5cGVJ
bmZvKEdsb2JhbE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgMCwgcHJvdG90eXBlLCBUeXBlSW5mbyhHbG9i
YWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogcHJvdGVj
dGVkOgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgYXJndW1lbnRzKQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJndW1lbnRzKQogICAgIHsKLSAgICAgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKICAgICAgICAgVU5VU0VEX1BBUkFNKGFyZ3VtZW50cyk7CiAgICAgfQogfTsK
QEAgLTE0MywxMCArMTQzLDEwIEBAIENPTVBJTEVfQVNTRVJUKCFJc0ludGVnZXI8R2xvYmFsT2Jq
ZWN0PjoKIAogY29uc3QgQ2xhc3NJbmZvIEdsb2JhbE9iamVjdDo6c19pbmZvID0geyAiZ2xvYmFs
IiwgJkpTR2xvYmFsT2JqZWN0OjpzX2luZm8sIDAsIEV4ZWNTdGF0ZTo6Z2xvYmFsT2JqZWN0VGFi
bGUsIENSRUFURV9NRVRIT0RfVEFCTEUoR2xvYmFsT2JqZWN0KSB9OwogCi1HbG9iYWxPYmplY3Q6
Okdsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJndW1lbnRzKQotICAgIDogSlNHbG9iYWxPYmpl
Y3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQorR2xvYmFsT2JqZWN0OjpHbG9iYWxPYmplY3QoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50
cykKKyAgICA6IEpTR2xvYmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCiB7Ci0gICAgZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSwgYXJndW1lbnRzKTsKKyAgICBmaW5pc2hDcmVhdGlvbih2bSwgYXJn
dW1lbnRzKTsKIH0KIAogLy8gVXNlIFNFSCBmb3IgUmVsZWFzZSBidWlsZHMgb25seSB0byBnZXQg
cmlkIG9mIHRoZSBjcmFzaCByZXBvcnQgZGlhbG9nCkBAIC0xOTAsNyArMTkwLDcgQEAgaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIFFDb3JlQXBwbGljYXRpb24gYXBwKGFyZ2Ms
IGFyZ3YpOwogI2VuZGlmCiAKLSAgICAvLyBJbml0aWFsaXplIEpTQyBiZWZvcmUgZ2V0dGluZyBK
U0dsb2JhbERhdGEuCisgICAgLy8gSW5pdGlhbGl6ZSBKU0MgYmVmb3JlIGdldHRpbmcgVk0uCiAg
ICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAKICAgICAvLyBXZSBjYW4ndCB1c2UgZGVz
dHJ1Y3RvcnMgaW4gdGhlIGZvbGxvd2luZyBjb2RlIGJlY2F1c2UgaXQgdXNlcyBXaW5kb3dzCkBA
IC0yMDIsMTIgKzIwMiwxMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAg
cmV0dXJuIHJlczsKIH0KIAotc3RhdGljIGJvb2wgdGVzdE9uZVJlZ0V4cChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFJlZ0V4cCogcmVnZXhwLCBSZWdFeHBUZXN0KiByZWdFeHBUZXN0LCBib29s
IHZlcmJvc2UsIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyKQorc3RhdGljIGJvb2wgdGVzdE9uZVJl
Z0V4cChWTSYgdm0sIFJlZ0V4cCogcmVnZXhwLCBSZWdFeHBUZXN0KiByZWdFeHBUZXN0LCBib29s
IHZlcmJvc2UsIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyKQogewogICAgIGJvb2wgcmVzdWx0ID0g
dHJ1ZTsKICAgICBWZWN0b3I8aW50LCAzMj4gb3V0VmVjdG9yOwogICAgIG91dFZlY3Rvci5yZXNp
emUocmVnRXhwVGVzdC0+ZXhwZWN0VmVjdG9yLnNpemUoKSk7Ci0gICAgaW50IG1hdGNoUmVzdWx0
ID0gcmVnZXhwLT5tYXRjaChnbG9iYWxEYXRhLCByZWdFeHBUZXN0LT5zdWJqZWN0LCByZWdFeHBU
ZXN0LT5vZmZzZXQsIG91dFZlY3Rvcik7CisgICAgaW50IG1hdGNoUmVzdWx0ID0gcmVnZXhwLT5t
YXRjaCh2bSwgcmVnRXhwVGVzdC0+c3ViamVjdCwgcmVnRXhwVGVzdC0+b2Zmc2V0LCBvdXRWZWN0
b3IpOwogCiAgICAgaWYgKG1hdGNoUmVzdWx0ICE9IHJlZ0V4cFRlc3QtPnJlc3VsdCkgewogICAg
ICAgICByZXN1bHQgPSBmYWxzZTsKQEAgLTMxMCw3ICszMTAsNyBAQCBzdGF0aWMgaW50IHNjYW5T
dHJpbmcoY2hhciogYnVmZmVyLCBpbnQgCiAgICAgcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgUmVn
RXhwKiBwYXJzZVJlZ0V4cExpbmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjaGFyKiBsaW5l
LCBpbnQgbGluZUxlbmd0aCkKK3N0YXRpYyBSZWdFeHAqIHBhcnNlUmVnRXhwTGluZShWTSYgdm0s
IGNoYXIqIGxpbmUsIGludCBsaW5lTGVuZ3RoKQogewogICAgIFN0cmluZ0J1aWxkZXIgcGF0dGVy
bjsKICAgICAKQEAgLTMyNCw3ICszMjQsNyBAQCBzdGF0aWMgUmVnRXhwKiBwYXJzZVJlZ0V4cExp
bmUoSlNHbG9iYWxECiAKICAgICArK2k7CiAKLSAgICByZXR1cm4gUmVnRXhwOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgcGF0dGVybi50b1N0cmluZygpLCByZWdFeHBGbGFncyhsaW5lICsgaSkpOworICAg
IHJldHVybiBSZWdFeHA6OmNyZWF0ZSh2bSwgcGF0dGVybi50b1N0cmluZygpLCByZWdFeHBGbGFn
cyhsaW5lICsgaSkpOwogfQogCiBzdGF0aWMgUmVnRXhwVGVzdCogcGFyc2VUZXN0TGluZShjaGFy
KiBsaW5lLCBpbnQgbGluZUxlbmd0aCkKQEAgLTQwOCw3ICs0MDgsNyBAQCBzdGF0aWMgYm9vbCBy
dW5Gcm9tRmlsZXMoR2xvYmFsT2JqZWN0KiBnCiAgICAgdW5zaWduZWQgZmFpbHVyZXMgPSAwOwog
ICAgIGNoYXIqIGxpbmVCdWZmZXIgPSBuZXcgY2hhcltNYXhMaW5lTGVuZ3RoICsgMV07CiAKLSAg
ICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKTsK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAKICAgICBib29sIHN1Y2Nlc3MgPSB0
cnVlOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZXMuc2l6ZSgpOyBpKyspIHsKQEAg
LTQzNiwxMyArNDM2LDEzIEBAIHN0YXRpYyBib29sIHJ1bkZyb21GaWxlcyhHbG9iYWxPYmplY3Qq
IGcKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgaWYgKGxpbmVQdHJb
MF0gPT0gJy8nKSB7Ci0gICAgICAgICAgICAgICAgcmVnZXhwID0gcGFyc2VSZWdFeHBMaW5lKGds
b2JhbERhdGEsIGxpbmVQdHIsIGxpbmVMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlZ2V4cCA9
IHBhcnNlUmVnRXhwTGluZSh2bSwgbGluZVB0ciwgbGluZUxlbmd0aCk7CiAgICAgICAgICAgICB9
IGVsc2UgaWYgKGxpbmVQdHJbMF0gPT0gJyAnKSB7CiAgICAgICAgICAgICAgICAgUmVnRXhwVGVz
dCogcmVnRXhwVGVzdCA9IHBhcnNlVGVzdExpbmUobGluZVB0ciwgbGluZUxlbmd0aCk7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHJlZ2V4cCAmJiByZWdFeHBUZXN0KSB7
CiAgICAgICAgICAgICAgICAgICAgICsrdGVzdHM7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
dGVzdE9uZVJlZ0V4cChnbG9iYWxEYXRhLCByZWdleHAsIHJlZ0V4cFRlc3QsIHZlcmJvc2UsIGxp
bmVOdW1iZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghdGVzdE9uZVJlZ0V4cCh2bSwg
cmVnZXhwLCByZWdFeHBUZXN0LCB2ZXJib3NlLCBsaW5lTnVtYmVyKSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgZmFpbHVyZXMrKzsKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigi
RmFpbHVyZSBvbiBsaW5lICV1XG4iLCBsaW5lTnVtYmVyKTsKICAgICAgICAgICAgICAgICAgICAg
fQpAQCAtNDYzLDkgKzQ2Myw5IEBAIHN0YXRpYyBib29sIHJ1bkZyb21GaWxlcyhHbG9iYWxPYmpl
Y3QqIGcKIAogICAgIGRlbGV0ZVtdIGxpbmVCdWZmZXI7CiAKLSAgICBnbG9iYWxEYXRhLmR1bXBT
YW1wbGVEYXRhKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKTsKKyAgICB2bS5kdW1wU2FtcGxl
RGF0YShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSk7CiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFD
SU5HKQotICAgIGdsb2JhbERhdGEuZHVtcFJlZ0V4cFRyYWNlKCk7CisgICAgdm0uZHVtcFJlZ0V4
cFRyYWNlKCk7CiAjZW5kaWYKICAgICByZXR1cm4gc3VjY2VzczsKIH0KQEAgLTUwMCwxMyArNTAw
LDEzIEBAIHN0YXRpYyB2b2lkIHBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBjaGEKIAogaW50IHJl
YWxNYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSBKU0dsb2JhbERhdGE6OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKLSAgICBB
UElFbnRyeVNoaW0gc2hpbShnbG9iYWxEYXRhKTsKKyAgICBWTSogdm0gPSBWTTo6Y3JlYXRlKExh
cmdlSGVhcCkubGVha1JlZigpOworICAgIEFQSUVudHJ5U2hpbSBzaGltKHZtKTsKIAogICAgIENv
bW1hbmRMaW5lIG9wdGlvbnM7CiAgICAgcGFyc2VBcmd1bWVudHMoYXJnYywgYXJndiwgb3B0aW9u
cyk7CiAKLSAgICBHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEdsb2JhbE9iamVjdDo6Y3Jl
YXRlKCpnbG9iYWxEYXRhLCBHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgqZ2xvYmFsRGF0
YSwganNOdWxsKCkpLCBvcHRpb25zLmFyZ3VtZW50cyk7CisgICAgR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBHbG9iYWxPYmplY3Q6OmNyZWF0ZSgqdm0sIEdsb2JhbE9iamVjdDo6Y3JlYXRl
U3RydWN0dXJlKCp2bSwganNOdWxsKCkpLCBvcHRpb25zLmFyZ3VtZW50cyk7CiAgICAgYm9vbCBz
dWNjZXNzID0gcnVuRnJvbUZpbGVzKGdsb2JhbE9iamVjdCwgb3B0aW9ucy5maWxlcywgb3B0aW9u
cy52ZXJib3NlKTsKIAogICAgIHJldHVybiBzdWNjZXNzID8gMCA6IDM7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0FQSUNhc3QuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9BUElDYXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAK
IG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEV4ZWNTdGF0ZTsKICAgICBjbGFzcyBQcm9wZXJ0
eU5hbWVBcnJheTsKLSAgICBjbGFzcyBKU0dsb2JhbERhdGE7CisgICAgY2xhc3MgVk07CiAgICAg
Y2xhc3MgSlNPYmplY3Q7CiAgICAgY2xhc3MgSlNWYWx1ZTsKIH0KQEAgLTExNyw5ICsxMTcsOSBA
QCBpbmxpbmUgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSogdG9KUyhKU1ByCiAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8SlNDOjpQcm9wZXJ0eU5hbWVBcnJheSo+KGEpOwogfQogCi1pbmxpbmUg
SlNDOjpKU0dsb2JhbERhdGEqIHRvSlMoSlNDb250ZXh0R3JvdXBSZWYgZykKK2lubGluZSBKU0M6
OlZNKiB0b0pTKEpTQ29udGV4dEdyb3VwUmVmIGcpCiB7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8SlNDOjpKU0dsb2JhbERhdGEqPihjb25zdF9jYXN0PE9wYXF1ZUpTQ29udGV4dEdyb3Vw
Kj4oZykpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTQzo6Vk0qPihjb25zdF9jYXN0
PE9wYXF1ZUpTQ29udGV4dEdyb3VwKj4oZykpOwogfQogCiBpbmxpbmUgSlNWYWx1ZVJlZiB0b1Jl
ZihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHYpCkBAIC0xNjIsNyArMTYyLDcg
QEAgaW5saW5lIEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JSZWYgdG9SZQogICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JSZWY+KGwpOwogfQogCi1p
bmxpbmUgSlNDb250ZXh0R3JvdXBSZWYgdG9SZWYoSlNDOjpKU0dsb2JhbERhdGEqIGcpCitpbmxp
bmUgSlNDb250ZXh0R3JvdXBSZWYgdG9SZWYoSlNDOjpWTSogZykKIHsKICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxKU0NvbnRleHRHcm91cFJlZj4oZyk7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0FQSVNoaW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9BUElTaGltcy5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0FQSVNoaW1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE0ICszNiwxNCBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQVBJRW50cnlTaGltV2l0aG91dExvY2sgewogcHJv
dGVjdGVkOgotICAgIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgYm9vbCByZWdpc3RlclRocmVhZCkKLSAgICAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFs
RGF0YSkKLSAgICAgICAgLCBtX2VudHJ5SWRlbnRpZmllclRhYmxlKHd0ZlRocmVhZERhdGEoKS5z
ZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKGdsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZSkpCisg
ICAgQVBJRW50cnlTaGltV2l0aG91dExvY2soVk0qIHZtLCBib29sIHJlZ2lzdGVyVGhyZWFkKQor
ICAgICAgICA6IG1fdm0odm0pCisgICAgICAgICwgbV9lbnRyeUlkZW50aWZpZXJUYWJsZSh3dGZU
aHJlYWREYXRhKCkuc2V0Q3VycmVudElkZW50aWZpZXJUYWJsZSh2bS0+aWRlbnRpZmllclRhYmxl
KSkKICAgICB7CiAgICAgICAgIGlmIChyZWdpc3RlclRocmVhZCkKLSAgICAgICAgICAgIGdsb2Jh
bERhdGEtPmhlYXAubWFjaGluZVRocmVhZHMoKS5hZGRDdXJyZW50VGhyZWFkKCk7Ci0gICAgICAg
IG1fZ2xvYmFsRGF0YS0+aGVhcC5hY3Rpdml0eUNhbGxiYWNrKCktPnN5bmNocm9uaXplKCk7Ci0g
ICAgICAgIG1fZ2xvYmFsRGF0YS0+aGVhcC5zd2VlcGVyKCktPnN5bmNocm9uaXplKCk7CisgICAg
ICAgICAgICB2bS0+aGVhcC5tYWNoaW5lVGhyZWFkcygpLmFkZEN1cnJlbnRUaHJlYWQoKTsKKyAg
ICAgICAgbV92bS0+aGVhcC5hY3Rpdml0eUNhbGxiYWNrKCktPnN5bmNocm9uaXplKCk7CisgICAg
ICAgIG1fdm0tPmhlYXAuc3dlZXBlcigpLT5zeW5jaHJvbml6ZSgpOwogICAgIH0KIAogICAgIH5B
UElFbnRyeVNoaW1XaXRob3V0TG9jaygpCkBAIC01Miw3ICs1Miw3IEBAIHByb3RlY3RlZDoKICAg
ICB9CiAKIHByb3RlY3RlZDoKLSAgICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBtX2dsb2JhbERhdGE7
CisgICAgUmVmUHRyPFZNPiBtX3ZtOwogICAgIElkZW50aWZpZXJUYWJsZSogbV9lbnRyeUlkZW50
aWZpZXJUYWJsZTsKIH07CiAKQEAgLTYwLDIyICs2MCwyMiBAQCBjbGFzcyBBUElFbnRyeVNoaW0g
OiBwdWJsaWMgQVBJRW50cnlTaGltCiBwdWJsaWM6CiAgICAgLy8gTm9ybWFsIEFQSSBlbnRyeQog
ICAgIEFQSUVudHJ5U2hpbShFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgcmVnaXN0ZXJUaHJlYWQgPSB0
cnVlKQotICAgICAgICA6IEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKCZleGVjLT5nbG9iYWxEYXRh
KCksIHJlZ2lzdGVyVGhyZWFkKQorICAgICAgICA6IEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKCZl
eGVjLT52bSgpLCByZWdpc3RlclRocmVhZCkKICAgICAgICAgLCBtX2xvY2tIb2xkZXIoZXhlYykK
ICAgICB7CiAgICAgfQogCi0gICAgLy8gSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvciBvbmx5IGhh
cyBhIGdsb2JhbERhdGEuCi0gICAgQVBJRW50cnlTaGltKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgYm9vbCByZWdpc3RlclRocmVhZCA9IHRydWUpCi0gICAgICAgIDogQVBJRW50cnlTaGltV2l0
aG91dExvY2soZ2xvYmFsRGF0YSwgcmVnaXN0ZXJUaHJlYWQpCi0gICAgICAgICwgbV9sb2NrSG9s
ZGVyKGdsb2JhbERhdGEpCisgICAgLy8gSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvciBvbmx5IGhh
cyBhIHZtLgorICAgIEFQSUVudHJ5U2hpbShWTSogdm0sIGJvb2wgcmVnaXN0ZXJUaHJlYWQgPSB0
cnVlKQorICAgICAgICA6IEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKHZtLCByZWdpc3RlclRocmVh
ZCkKKyAgICAgICAgLCBtX2xvY2tIb2xkZXIodm0pCiAgICAgewogICAgIH0KIAogICAgIH5BUElF
bnRyeVNoaW0oKQogICAgIHsKLSAgICAgICAgLy8gRGVzdHJveWluZyBvdXIgSlNMb2NrSG9sZGVy
IHNob3VsZCBhbHNvIGRlc3Ryb3kgdGhlIEpTR2xvYmFsRGF0YS4KLSAgICAgICAgbV9nbG9iYWxE
YXRhLmNsZWFyKCk7CisgICAgICAgIC8vIERlc3Ryb3lpbmcgb3VyIEpTTG9ja0hvbGRlciBzaG91
bGQgYWxzbyBkZXN0cm95IHRoZSBWTS4KKyAgICAgICAgbV92bS5jbGVhcigpOwogICAgIH0KIAog
cHJpdmF0ZToKQEAgLTg2LDE5ICs4NiwxOSBAQCBjbGFzcyBBUElDYWxsYmFja1NoaW0gewogcHVi
bGljOgogICAgIEFQSUNhbGxiYWNrU2hpbShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIDogbV9k
cm9wQWxsTG9ja3MoZXhlYykKLSAgICAgICAgLCBtX2dsb2JhbERhdGEoJmV4ZWMtPmdsb2JhbERh
dGEoKSkKKyAgICAgICAgLCBtX3ZtKCZleGVjLT52bSgpKQogICAgIHsKICAgICAgICAgd3RmVGhy
ZWFkRGF0YSgpLnJlc2V0Q3VycmVudElkZW50aWZpZXJUYWJsZSgpOwogICAgIH0KIAogICAgIH5B
UElDYWxsYmFja1NoaW0oKQogICAgIHsKLSAgICAgICAgd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJl
bnRJZGVudGlmaWVyVGFibGUobV9nbG9iYWxEYXRhLT5pZGVudGlmaWVyVGFibGUpOworICAgICAg
ICB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElkZW50aWZpZXJUYWJsZShtX3ZtLT5pZGVudGlm
aWVyVGFibGUpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBt
X2Ryb3BBbGxMb2NrczsKLSAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKKyAgICBWTSog
bV92bTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFw
cGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQ
SVdyYXBwZXJPYmplY3QuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgs
NyBAQCBjbGFzcyBKU0FQSVdyYXBwZXJPYmplY3QgOiBwdWJsaWMgSlNEZXN0CiBwdWJsaWM6CiAg
ICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwogICAgIAotICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYp
OwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpOwogICAgIAogICAgIHZvaWQqIHdyYXBwZWRPYmplY3QoKSB7IHJldHVybiBtX3dyYXBwZWRP
YmplY3Q7IH0KQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4g
fCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKICAgICAKLSAgICBKU0FQSVdyYXBwZXJPYmplY3QoSlNH
bG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CisgICAgSlNBUElXcmFwcGVyT2JqZWN0KFZNJiwgU3Ry
dWN0dXJlKik7CiAKIHByaXZhdGU6CiAgICAgdm9pZCogbV93cmFwcGVkT2JqZWN0OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QubW0JKHJl
dmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVy
T2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC03NCwyMCArNzQsMjAgQEAgdGVtcGxhdGUgPD4g
Y29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYgogdGVtcGxhdGU8PiBjb25zdCBib29sIEpTQ2Fs
bGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7
CiAKIHRlbXBsYXRlIDw+Ci1TdHJ1Y3R1cmUqIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVy
T2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKK1N0cnVjdHVyZSogSlNDYWxs
YmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQogewotICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBl
SW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKIH0KIAotSlNBUElXcmFwcGVyT2JqZWN0
OjpKU0FQSVdyYXBwZXJPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKLSAgICA6IEJhc2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQorSlNBUElXcmFw
cGVyT2JqZWN0OjpKU0FQSVdyYXBwZXJPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKICAgICAsIG1fd3JhcHBlZE9iamVjdCgwKQog
ewogfQogCi12b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQordm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgV2Vha1NldDo6YWxsb2NhdGUodGhpcywganNB
UElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIoKSwgMCk7IC8vIEJhbGFuY2VkIGluIEpTQVBJV3Jh
cHBlck9iamVjdEhhbmRsZU93bmVyOjpmaW5hbGl6ZS4KIH0KICAgICAKQEAgLTEwNCw3ICsxMDQs
NyBAQCB2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbihKCiAgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT53cmFw
cGVkT2JqZWN0KCkpCi0gICAgICAgIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKGNlbGwtPnN0cnVj
dHVyZSgpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLCB2aXNpdG9yLCB0aGlzT2JqZWN0
LT53cmFwcGVkT2JqZWN0KCkpOworICAgICAgICBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChjZWxs
LT5zdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCktPnZtKCksIHZpc2l0b3IsIHRoaXNPYmplY3Qt
PndyYXBwZWRPYmplY3QoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMTQgKzEw
MSwxNCBAQCB2b2lkIEpTR2FyYmFnZUNvbGxlY3QoSlNDb250ZXh0UmVmIGN0eCkKICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7CiAgICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShleGVj
LCBmYWxzZSk7CiAKLSAgICBleGVjLT5nbG9iYWxEYXRhKCkuaGVhcC5yZXBvcnRBYmFuZG9uZWRP
YmplY3RHcmFwaCgpOworICAgIGV4ZWMtPnZtKCkuaGVhcC5yZXBvcnRBYmFuZG9uZWRPYmplY3RH
cmFwaCgpOwogfQogCiB2b2lkIEpTUmVwb3J0RXh0cmFNZW1vcnlDb3N0KEpTQ29udGV4dFJlZiBj
dHgsIHNpemVfdCBzaXplKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKICAg
ICBBUElFbnRyeVNoaW0gZW50cnlTaGltKGV4ZWMpOwotICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5o
ZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplKTsKKyAgICBleGVjLT52bSgpLmhlYXAucmVw
b3J0RXh0cmFNZW1vcnlDb3N0KHNpemUpOwogfQogCiBleHRlcm4gIkMiIEpTX0VYUE9SVCB2b2lk
IEpTU3luY2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRlYnVnZ2luZyhKU0NvbnRleHRSZWYpOwpA
QCAtMTIwLDUgKzEyMCw1IEBAIHZvaWQgSlNTeW5jaHJvbm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVi
dWcKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKICAgICBBUElFbnRyeVNoaW0g
ZW50cnlTaGltKGV4ZWMpOwotICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5oZWFwLmNvbGxlY3RBbGxH
YXJiYWdlKCk7CisgICAgZXhlYy0+dm0oKS5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiBjb25zdCBDbGFzc0luZm8gSlNDYWxsYmFja0NvbnN0cnVjdG9y
OjpzX2luZm8gPSB7ICJDYWxsYmFja0NvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU0NhbGxiYWNrQ29uc3RydWN0b3IpIH07CiAKIEpTQ2FsbGJh
Y2tDb25zdHJ1Y3Rvcjo6SlNDYWxsYmFja0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0NsYXNzUmVmIGpzQ2xhc3MsIEpTT2Jq
ZWN0Q2FsbEFzQ29uc3RydWN0b3JDYWxsYmFjayBjYWxsYmFjaykKLSAgICA6IEpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpCisgICAgOiBK
U0Rlc3RydWN0aWJsZU9iamVjdChnbG9iYWxPYmplY3QtPnZtKCksIHN0cnVjdHVyZSkKICAgICAs
IG1fY2xhc3MoanNDbGFzcykKICAgICAsIG1fY2FsbGJhY2soY2FsbGJhY2spCiB7CkBAIC00OCw3
ICs0OCw3IEBAIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6SlNDYWxsYmFja0NvbnN0cnUKIAogdm9p
ZCBKU0NhbGxiYWNrQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQ2xhc3NSZWYganNDbGFzcykKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwog
ICAgIGlmIChtX2NsYXNzKQogICAgICAgICBKU0NsYXNzUmV0YWluKGpzQ2xhc3MpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5o
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw5ICs0OCw5IEBAIHB1YmxpYzoK
ICAgICBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2sgY2FsbGJhY2soKSBjb25zdCB7
IHJldHVybiBtX2NhbGxiYWNrOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87
CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKSAK
KyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKSAKICAgICB7Ci0gICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBl
SW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKE9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rp
b24uY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2FsbGJhY2tGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDE2ICs1MCwxNiBAQCBK
U0NhbGxiYWNrRnVuY3Rpb246OkpTQ2FsbGJhY2tGdW5jdGlvbihKCiB7CiB9CiAKLXZvaWQgSlND
YWxsYmFja0Z1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgSlNDYWxsYmFja0Z1bmN0aW9uOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihnbG9iYWxEYXRhLCBuYW1lKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgbmFt
ZSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIH0KIAogSlNDYWxsYmFja0Z1bmN0
aW9uKiBKU0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayBjYWxs
YmFjaywgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIEpTQ2FsbGJhY2tGdW5jdGlvbiogZnVu
Y3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0NhbGxiYWNrRnVuY3Rpb24+KCpl
eGVjLT5oZWFwKCkpKSBKU0NhbGxiYWNrRnVuY3Rpb24oZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmpl
Y3QtPmNhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgY2FsbGJhY2spOwotICAgIGZ1bmN0aW9u
LT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUpOworICAgIGZ1bmN0aW9u
LT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpLCBuYW1lKTsKICAgICByZXR1cm4gZnVuY3Rpb247
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVu
Y3Rpb24uaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIGNsYXNzIEpTQ2FsbGJhY2tGdW5jdGlvbiA6IHB1YmxpYyBJbnRlcm5hbEZ1
bmN0aW9uIHsKIHByb3RlY3RlZDoKICAgICBKU0NhbGxiYWNrRnVuY3Rpb24oSlNHbG9iYWxPYmpl
Y3QqLCBTdHJ1Y3R1cmUqLCBKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2spOwotICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogcHVibGlj
OgogICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOwpAQCAtNDUsOSArNDUsOSBAQCBw
dWJsaWM6CiAgICAgCiAgICAgLy8gSW50ZXJuYWxGdW5jdGlvbiBtaXNoLW1hc2hlcyBjb25zdHJ1
Y3RvciBhbmQgZnVuY3Rpb24gYmVoYXZpb3IgLS0gd2Ugc2hvdWxkIAogICAgIC8vIHJlZmFjdG9y
IHRoZSBjb2RlIHNvIHRoaXMgb3ZlcnJpZGUgaXNuJ3QgbmVjZXNzYXJ5Ci0gICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykgCisgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90bykgCiAgICAgeyAKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7IAorICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7IAogICAgIH0KIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuY3BwCShyZXZpc2lvbiAx
NDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MSwyNCArNDEsMjQgQEAgdGVtcGxhdGU8PiBjb25zdCBib29s
IEpTQ2FsbGJhY2tPYmplY3Q8SgogdGVtcGxhdGU8PiBjb25zdCBib29sIEpTQ2FsbGJhY2tPYmpl
Y3Q8SlNHbG9iYWxPYmplY3Q+OjpuZWVkc0Rlc3RydWN0aW9uID0gZmFsc2U7CiAKIHRlbXBsYXRl
PD4KLUpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+KiBKU0NhbGxiYWNrT2JqZWN0PEpT
R2xvYmFsT2JqZWN0Pjo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDbGFzc1Jl
ZiBjbGFzc1JlZiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitKU0NhbGxiYWNrT2JqZWN0PEpTR2xv
YmFsT2JqZWN0PiogSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OmNyZWF0ZShWTSYg
dm0sIEpTQ2xhc3NSZWYgY2xhc3NSZWYsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIEpT
Q2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+KiBjYWxsYmFja09iamVjdCA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+ID4oZ2xv
YmFsRGF0YS5oZWFwKSkgSlNDYWxsYmFja09iamVjdChnbG9iYWxEYXRhLCBjbGFzc1JlZiwgc3Ry
dWN0dXJlKTsKLSAgICBjYWxsYmFja09iamVjdC0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7
Ci0gICAgZ2xvYmFsRGF0YS5oZWFwLmFkZEZpbmFsaXplcihjYWxsYmFja09iamVjdCwgZGVzdHJv
eSk7CisgICAgSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD4qIGNhbGxiYWNrT2JqZWN0
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9i
amVjdD4gPih2bS5oZWFwKSkgSlNDYWxsYmFja09iamVjdCh2bSwgY2xhc3NSZWYsIHN0cnVjdHVy
ZSk7CisgICAgY2FsbGJhY2tPYmplY3QtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICB2bS5oZWFw
LmFkZEZpbmFsaXplcihjYWxsYmFja09iamVjdCwgZGVzdHJveSk7CiAgICAgcmV0dXJuIGNhbGxi
YWNrT2JqZWN0OwogfQogCiB0ZW1wbGF0ZSA8PgotU3RydWN0dXJlKiBKU0NhbGxiYWNrT2JqZWN0
PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKK1N0
cnVjdHVyZSogSlNDYWxsYmFja09iamVjdDxKU0Rlc3RydWN0aWJsZU9iamVjdD46OmNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG8pCiB7IAotICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxP
YmplY3QsIHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOyAKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7IAogfQog
ICAgIAogdGVtcGxhdGUgPD4KLVN0cnVjdHVyZSogSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9i
amVjdD46OmNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCitTdHJ1Y3R1cmUqIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQogeyAKLSAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8o
R2xvYmFsT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCisgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhHbG9i
YWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAKIH0KIAogdm9pZCBKU0Nh
bGxiYWNrT2JqZWN0RGF0YTo6ZmluYWxpemUoSGFuZGxlPFVua25vd24+IGhhbmRsZSwgdm9pZCog
Y29udGV4dCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09i
amVjdC5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2FsbGJhY2tPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTEgKzU0LDExIEBAIHN0cnVj
dCBKU0NhbGxiYWNrT2JqZWN0RGF0YSA6IFdlYWtIYW5kbGUKICAgICAgICAgcmV0dXJuIG1fcHJp
dmF0ZVByb3BlcnRpZXMtPmdldFByaXZhdGVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIHNldFByaXZhdGVQcm9wZXJ0eShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSkKKyAgICB2b2lkIHNldFByaXZhdGVQcm9wZXJ0eShWTSYgdm0sIEpTQ2VsbCogb3du
ZXIsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7
CiAgICAgICAgIGlmICghbV9wcml2YXRlUHJvcGVydGllcykKICAgICAgICAgICAgIG1fcHJpdmF0
ZVByb3BlcnRpZXMgPSBhZG9wdFB0cihuZXcgSlNQcml2YXRlUHJvcGVydHlNYXApOwotICAgICAg
ICBtX3ByaXZhdGVQcm9wZXJ0aWVzLT5zZXRQcml2YXRlUHJvcGVydHkoZ2xvYmFsRGF0YSwgb3du
ZXIsIHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgICAgICBtX3ByaXZhdGVQcm9wZXJ0aWVzLT5z
ZXRQcml2YXRlUHJvcGVydHkodm0sIG93bmVyLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKICAgICB9
CiAgICAgCiAgICAgdm9pZCBkZWxldGVQcml2YXRlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lKQpAQCAtODYsMTAgKzg2LDEwIEBAIHN0cnVjdCBKU0NhbGxiYWNrT2JqZWN0
RGF0YSA6IFdlYWtIYW5kbGUKICAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbi0+dmFsdWUuZ2V0
KCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0UHJpdmF0ZVByb3BlcnR5
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQorICAgICAgICB2b2lkIHNldFByaXZhdGVQ
cm9wZXJ0eShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+IGVtcHR5OwotICAgICAgICAgICAgbV9wcm9wZXJ0eU1hcC5hZGQocHJvcGVydHlO
YW1lLmltcGwoKSwgZW1wdHkpLml0ZXJhdG9yLT52YWx1ZS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIs
IHZhbHVlKTsKKyAgICAgICAgICAgIG1fcHJvcGVydHlNYXAuYWRkKHByb3BlcnR5TmFtZS5pbXBs
KCksIGVtcHR5KS5pdGVyYXRvci0+dmFsdWUuc2V0KHZtLCBvd25lciwgdmFsdWUpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICB2b2lkIGRlbGV0ZVByaXZhdGVQcm9wZXJ0eShjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCkBAIC0xMTgsMTAgKzExOCwxMCBAQCB0ZW1wbGF0ZSA8
Y2xhc3MgUGFyZW50PgogY2xhc3MgSlNDYWxsYmFja09iamVjdCA6IHB1YmxpYyBQYXJlbnQgewog
cHJvdGVjdGVkOgogICAgIEpTQ2FsbGJhY2tPYmplY3QoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwg
SlNDbGFzc1JlZiwgdm9pZCogZGF0YSk7Ci0gICAgSlNDYWxsYmFja09iamVjdChKU0dsb2JhbERh
dGEmLCBKU0NsYXNzUmVmLCBTdHJ1Y3R1cmUqKTsKKyAgICBKU0NhbGxiYWNrT2JqZWN0KFZNJiwg
SlNDbGFzc1JlZiwgU3RydWN0dXJlKik7CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNT
dGF0ZSopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJik7CisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBQYXJlbnQgQmFz
ZTsKQEAgLTEzMyw3ICsxMzMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhbGxiYWNrT2JqZWN0LT5m
aW5pc2hDcmVhdGlvbihleGVjKTsKICAgICAgICAgcmV0dXJuIGNhbGxiYWNrT2JqZWN0OwogICAg
IH0KLSAgICBzdGF0aWMgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+KiBjcmVhdGUoSlNHbG9iYWxE
YXRhJiwgSlNDbGFzc1JlZiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIEpTQ2FsbGJhY2tPYmpl
Y3Q8UGFyZW50PiogY3JlYXRlKFZNJiwgSlNDbGFzc1JlZiwgU3RydWN0dXJlKik7CiAKICAgICBz
dGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDZWxsKiBjZWxsKQpAQCAtMTQ5LDE2ICsxNDksMTYgQEAgcHVibGljOgogICAgIEpTQ2xh
c3NSZWYgY2xhc3NSZWYoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrT2JqZWN0RGF0YS0+anND
bGFzczsgfQogICAgIGJvb2wgaW5oZXJpdHMoSlNDbGFzc1JlZikgY29uc3Q7CiAKLSAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
LCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogICAgIAogICAgIEpTVmFsdWUgZ2V0UHJpdmF0
ZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiBtX2NhbGxiYWNrT2JqZWN0RGF0YS0+Z2V0UHJpdmF0ZVByb3BlcnR5KHBy
b3BlcnR5TmFtZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0UHJpdmF0ZVByb3BlcnR5KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlIHZhbHVlKQorICAgIHZvaWQgc2V0UHJpdmF0ZVByb3BlcnR5KFZNJiB2bSwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAg
bV9jYWxsYmFja09iamVjdERhdGEtPnNldFByaXZhdGVQcm9wZXJ0eShnbG9iYWxEYXRhLCB0aGlz
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAgICAgbV9jYWxsYmFja09iamVjdERhdGEtPnNl
dFByaXZhdGVQcm9wZXJ0eSh2bSwgdGhpcywgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgZGVsZXRlUHJpdmF0ZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09i
amVjdEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtNTEsNyArNTEsNyBAQCBpbmxpbmUgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+KiBK
U0NhbGxiCiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CiBKU0NhbGxiYWNrT2JqZWN0PFBhcmVu
dD46OkpTQ2FsbGJhY2tPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNDbGFzc1JlZiBqc0NsYXNzLCB2b2lkKiBkYXRhKQotICAgIDogUGFyZW50KGV4ZWMtPmds
b2JhbERhdGEoKSwgc3RydWN0dXJlKQorICAgIDogUGFyZW50KGV4ZWMtPnZtKCksIHN0cnVjdHVy
ZSkKICAgICAsIG1fY2FsbGJhY2tPYmplY3REYXRhKGFkb3B0UHRyKG5ldyBKU0NhbGxiYWNrT2Jq
ZWN0RGF0YShkYXRhLCBqc0NsYXNzKSkpCiB7CiB9CkBAIC01OSw4ICs1OSw4IEBAIEpTQ2FsbGJh
Y2tPYmplY3Q8UGFyZW50Pjo6SlNDYWxsYmFja09iamUKIC8vIEdsb2JhbCBvYmplY3QgY29uc3Ry
dWN0b3IuCiAvLyBGSVhNRTogTW92ZSB0aGlzIGludG8gYSBzZXBhcmF0ZSBKU0dsb2JhbENhbGxi
YWNrT2JqZWN0IGNsYXNzIGRlcml2ZWQgZnJvbSB0aGlzIG9uZS4KIHRlbXBsYXRlIDxjbGFzcyBQ
YXJlbnQ+Ci1KU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OkpTQ2FsbGJhY2tPYmplY3QoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NsYXNzUmVmIGpzQ2xhc3MsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQotICAgIDogUGFyZW50KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKK0pTQ2FsbGJhY2tPYmpl
Y3Q8UGFyZW50Pjo6SlNDYWxsYmFja09iamVjdChWTSYgdm0sIEpTQ2xhc3NSZWYganNDbGFzcywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBQYXJlbnQodm0sIHN0cnVjdHVyZSkKICAgICAs
IG1fY2FsbGJhY2tPYmplY3REYXRhKGFkb3B0UHRyKG5ldyBKU0NhbGxiYWNrT2JqZWN0RGF0YSgw
LCBqc0NsYXNzKSkpCiB7CiB9CkBAIC02OCwxOCArNjgsMTggQEAgSlNDYWxsYmFja09iamVjdDxQ
YXJlbnQ+OjpKU0NhbGxiYWNrT2JqZQogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KIHZvaWQgSlND
YWxsYmFja09iamVjdDxQYXJlbnQ+OjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKICAgICBBU1NFUlQoUGFyZW50Ojppbmhlcml0
cygmc19pbmZvKSk7CiAgICAgaW5pdChleGVjKTsKIH0KIAogLy8gVGhpcyBpcyBqdXN0IGZvciBH
bG9iYWwgb2JqZWN0LCBzbyB3ZSBjYW4gYXNzdW1lIHRoYXQgQmFzZTo6ZmluaXNoQ3JlYXRpb24g
aXMgSlNHbG9iYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uLgogdGVtcGxhdGUgPGNsYXNzIFBhcmVu
dD4KLXZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpmaW5pc2hDcmVhdGlvbihKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtKQogewogICAgIEFTU0VSVChQYXJlbnQ6OmluaGVyaXRzKCZzX2luZm8p
KTsKICAgICBBU1NFUlQoUGFyZW50Ojppc0dsb2JhbE9iamVjdCgpKTsKLSAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAg
ICAgaW5pdChqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPih0aGlzKS0+Z2xvYmFsRXhlYygpKTsKIH0K
IApAQCAtMjgzLDcgKzI4Myw3IEBAIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpwdXQo
SlNDZWwKICAgICAgICAgICAgICAgICBpZiAoU3RhdGljRnVuY3Rpb25FbnRyeSogZW50cnkgPSBz
dGF0aWNGdW5jdGlvbnMtPmdldChuYW1lKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoZW50
cnktPmF0dHJpYnV0ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5KQogICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5K
U0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHBy
b3BlcnR5TmFtZSwgdmFsdWUpOyAvLyBwdXQgYXMgb3ZlcnJpZGUgcHJvcGVydHkKKyAgICAgICAg
ICAgICAgICAgICAgdGhpc09iamVjdC0+SlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpwdXREaXJl
Y3QoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7IC8vIHB1dCBhcyBvdmVycmlkZSBw
cm9wZXJ0eQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQpAQCAtNjI3LDcgKzYyNyw3IEBAIEpTVmFsdWUgSlNDYWxsYmFja09iamVj
dDxQYXJlbnQ+OjpzdGF0aWMKICAgICAgICAgICAgICAgICAgICAgaWYgKEpTT2JqZWN0Q2FsbEFz
RnVuY3Rpb25DYWxsYmFjayBjYWxsQXNGdW5jdGlvbiA9IGVudHJ5LT5jYWxsQXNGdW5jdGlvbikg
ewogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBKU09i
amVjdCogbyA9IEpTQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIHRoaXNPYmotPmdsb2Jh
bE9iamVjdCgpLCBjYWxsQXNGdW5jdGlvbiwgbmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzT2JqLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIG8s
IGVudHJ5LT5hdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNPYmotPnB1
dERpcmVjdChleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUsIG8sIGVudHJ5LT5hdHRyaWJ1dGVzKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Ns
YXNzUmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xh
c3NSZWYuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2xhc3NSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDcgQEAgUGFzc1Jl
ZlB0cjxPcGFxdWVKU0NsYXNzPiBPcGFxdWVKU0NsYXNzOgogICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgT3BhcXVlSlNDbGFzcygmZGVmaW5pdGlvbiwgcHJvdG9DbGFzcy5nZXQoKSkpOwogfQogCi1P
cGFxdWVKU0NsYXNzQ29udGV4dERhdGE6Ok9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YShKU0M6OkpT
R2xvYmFsRGF0YSYsIE9wYXF1ZUpTQ2xhc3MqIGpzQ2xhc3MpCitPcGFxdWVKU0NsYXNzQ29udGV4
dERhdGE6Ok9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YShKU0M6OlZNJiwgT3BhcXVlSlNDbGFzcyog
anNDbGFzcykKICAgICA6IG1fY2xhc3MoanNDbGFzcykKIHsKICAgICBpZiAoanNDbGFzcy0+bV9z
dGF0aWNWYWx1ZXMpIHsKQEAgLTE1Myw3ICsxNTMsNyBAQCBPcGFxdWVKU0NsYXNzQ29udGV4dERh
dGEmIE9wYXF1ZUpTQ2xhc3M6CiB7CiAgICAgT3duUHRyPE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0
YT4mIGNvbnRleHREYXRhID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vcGFxdWVKU0Ns
YXNzRGF0YSgpLmFkZCh0aGlzLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFj
b250ZXh0RGF0YSkKLSAgICAgICAgY29udGV4dERhdGEgPSBhZG9wdFB0cihuZXcgT3BhcXVlSlND
bGFzc0NvbnRleHREYXRhKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcykpOworICAgICAgICBjb250
ZXh0RGF0YSA9IGFkb3B0UHRyKG5ldyBPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEoZXhlYy0+dm0o
KSwgdGhpcykpOwogICAgIHJldHVybiAqY29udGV4dERhdGE7CiB9CiAKQEAgLTIwMyw3ICsyMDMs
NyBAQCBKU09iamVjdCogT3BhcXVlSlNDbGFzczo6cHJvdG90eXBlKEV4ZWNTCiAgICAgSlNPYmpl
Y3QqIHByb3RvdHlwZSA9IEpTQ2FsbGJhY2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+Ojpj
cmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPmNhbGxiYWNrT2JqZWN0U3RydWN0dXJlKCksIHByb3RvdHlwZUNsYXNzLCAm
anNDbGFzc0RhdGEpOyAvLyBzZXQganNDbGFzc0RhdGEgYXMgdGhlIG9iamVjdCdzIHByaXZhdGUg
ZGF0YSwgc28gaXQgY2FuIGNsZWFyIG91ciByZWZlcmVuY2Ugb24gZGVzdHJ1Y3Rpb24KICAgICBp
ZiAocGFyZW50Q2xhc3MpIHsKICAgICAgICAgaWYgKEpTT2JqZWN0KiBwYXJlbnRQcm90b3R5cGUg
PSBwYXJlbnRDbGFzcy0+cHJvdG90eXBlKGV4ZWMpKQotICAgICAgICAgICAgcHJvdG90eXBlLT5z
ZXRQcm90b3R5cGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwYXJlbnRQcm90b3R5cGUpOworICAgICAg
ICAgICAgcHJvdG90eXBlLT5zZXRQcm90b3R5cGUoZXhlYy0+dm0oKSwgcGFyZW50UHJvdG90eXBl
KTsKICAgICB9CiAKICAgICBqc0NsYXNzRGF0YS5jYWNoZWRQcm90b3R5cGUgPSBQYXNzV2VhazxK
U09iamVjdD4ocHJvdG90eXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
bGFzc1JlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFz
c1JlZi5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2xhc3NSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTQgKzY4LDE0IEBAIHN0cnVjdCBPcGFx
dWVKU0NsYXNzOwogc3RydWN0IE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhKTsgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhKEpTQzo6SlNH
bG9iYWxEYXRhJiwgT3BhcXVlSlNDbGFzcyopOworICAgIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0
YShKU0M6OlZNJiwgT3BhcXVlSlNDbGFzcyopOwogCiAgICAgLy8gSXQgaXMgbmVjZXNzYXJ5IHRv
IGtlZXAgT3BhcXVlSlNDbGFzcyBhbGl2ZSBiZWNhdXNlIG9mIHRoZSBmb2xsb3dpbmcgcmFyZSBz
Y2VuYXJpbzoKLSAgICAvLyAxLiBBIGNsYXNzIGlzIGNyZWF0ZWQgYW5kIHVzZWQsIHNvIGl0cyBj
b250ZXh0IGRhdGEgaXMgc3RvcmVkIGluIEpTR2xvYmFsRGF0YSBoYXNoIG1hcC4KKyAgICAvLyAx
LiBBIGNsYXNzIGlzIGNyZWF0ZWQgYW5kIHVzZWQsIHNvIGl0cyBjb250ZXh0IGRhdGEgaXMgc3Rv
cmVkIGluIFZNIGhhc2ggbWFwLgogICAgIC8vIDIuIFRoZSBjbGFzcyBpcyByZWxlYXNlZCwgYW5k
IHdoZW4gYWxsIEpTIG9iamVjdHMgdGhhdCB1c2UgaXQgYXJlIGNvbGxlY3RlZCwgT3BhcXVlSlND
bGFzcwogICAgIC8vIGlzIGRlbGV0ZWQgKHRoYXQncyB0aGUgcGFydCBwcmV2ZW50ZWQgYnkgdGhp
cyBSZWZQdHIpLgogICAgIC8vIDMuIEFub3RoZXIgY2xhc3MgaXMgY3JlYXRlZCBhdCB0aGUgc2Ft
ZSBhZGRyZXNzLgotICAgIC8vIDQuIFdoZW4gaXQgaXMgdXNlZCwgdGhlIG9sZCBjb250ZXh0IGRh
dGEgaXMgZm91bmQgaW4gSlNHbG9iYWxEYXRhIGFuZCB1c2VkLgorICAgIC8vIDQuIFdoZW4gaXQg
aXMgdXNlZCwgdGhlIG9sZCBjb250ZXh0IGRhdGEgaXMgZm91bmQgaW4gVk0gYW5kIHVzZWQuCiAg
ICAgUmVmUHRyPE9wYXF1ZUpTQ2xhc3M+IG1fY2xhc3M7CiAKICAgICBPd25QdHI8T3BhcXVlSlND
bGFzc1N0YXRpY1ZhbHVlc1RhYmxlPiBzdGF0aWNWYWx1ZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ29udGV4dC5tbQkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMs
NyBAQCAtIChKU1ZhbHVlICopZXZhbHVhdGVTY3JpcHQ6KE5TU3RyaW5nICopCiAtICh2b2lkKXNl
dEV4Y2VwdGlvbjooSlNWYWx1ZSAqKXZhbHVlCiB7CiAgICAgaWYgKHZhbHVlKQotICAgICAgICBt
X2V4Y2VwdGlvbi5zZXQodG9KUyhtX2NvbnRleHQpLT5nbG9iYWxEYXRhKCksIHRvSlMoSlNWYWx1
ZVRvT2JqZWN0KG1fY29udGV4dCwgdmFsdWVJbnRlcm5hbFZhbHVlKHZhbHVlKSwgMCkpKTsKKyAg
ICAgICAgbV9leGNlcHRpb24uc2V0KHRvSlMobV9jb250ZXh0KS0+dm0oKSwgdG9KUyhKU1ZhbHVl
VG9PYmplY3QobV9jb250ZXh0LCB2YWx1ZUludGVybmFsVmFsdWUodmFsdWUpLCAwKSkpOwogICAg
IGVsc2UKICAgICAgICAgbV9leGNlcHRpb24uY2xlYXIoKTsKIH0KQEAgLTE5MCw3ICsxOTAsNyBA
QCAtIChpZClpbml0V2l0aEdsb2JhbENvbnRleHRSZWY6KEpTR2xvYmFsCiAgICAgICAgIHJldHVy
biBuaWw7CiAKICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGNv
bnRleHQpLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgbV92aXJ0dWFsTWFjaGluZSA9IFtb
SlNWaXJ0dWFsTWFjaGluZSB2aXJ0dWFsTWFjaGluZVdpdGhDb250ZXh0R3JvdXBSZWY6dG9SZWYo
Jmdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKV0gcmV0YWluXTsKKyAgICBtX3ZpcnR1YWxNYWNo
aW5lID0gW1tKU1ZpcnR1YWxNYWNoaW5lIHZpcnR1YWxNYWNoaW5lV2l0aENvbnRleHRHcm91cFJl
Zjp0b1JlZigmZ2xvYmFsT2JqZWN0LT52bSgpKV0gcmV0YWluXTsKICAgICBBU1NFUlQobV92aXJ0
dWFsTWFjaGluZSk7CiAgICAgbV9jb250ZXh0ID0gSlNHbG9iYWxDb250ZXh0UmV0YWluKGNvbnRl
eHQpOwogICAgIG1fd3JhcHBlck1hcCA9IFtbSlNXcmFwcGVyTWFwIGFsbG9jXSBpbml0V2l0aENv
bnRleHQ6c2VsZl07CkBAIC0yNTcsNyArMjU3LDcgQEAgLSAoSlNWYWx1ZSAqKXdyYXBwZXJGb3JK
U09iamVjdDooSlNWYWx1ZQogCiArIChKU0NvbnRleHQgKiljb250ZXh0V2l0aEdsb2JhbENvbnRl
eHRSZWY6KEpTR2xvYmFsQ29udGV4dFJlZilnbG9iYWxDb250ZXh0CiB7Ci0gICAgSlNWaXJ0dWFs
TWFjaGluZSAqdmlydHVhbE1hY2hpbmUgPSBbSlNWaXJ0dWFsTWFjaGluZSB2aXJ0dWFsTWFjaGlu
ZVdpdGhDb250ZXh0R3JvdXBSZWY6dG9SZWYoJnRvSlMoZ2xvYmFsQ29udGV4dCktPmdsb2JhbERh
dGEoKSldOworICAgIEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5lID0gW0pTVmlydHVh
bE1hY2hpbmUgdmlydHVhbE1hY2hpbmVXaXRoQ29udGV4dEdyb3VwUmVmOnRvUmVmKCZ0b0pTKGds
b2JhbENvbnRleHQpLT52bSgpKV07CiAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW3ZpcnR1YWxN
YWNoaW5lIGNvbnRleHRGb3JHbG9iYWxDb250ZXh0UmVmOmdsb2JhbENvbnRleHRdOwogICAgIGlm
ICghY29udGV4dCkKICAgICAgICAgY29udGV4dCA9IFtbW0pTQ29udGV4dCBhbGxvY10gaW5pdFdp
dGhHbG9iYWxDb250ZXh0UmVmOmdsb2JhbENvbnRleHRdIGF1dG9yZWxlYXNlXTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJKHJldmlzaW9uIDE0ODY1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogSlNDb250ZXh0
R3JvdXBSZWYgSlNDb250ZXh0R3JvdXBDcmVhdGUoKQogewogICAgIGluaXRpYWxpemVUaHJlYWRp
bmcoKTsKLSAgICByZXR1cm4gdG9SZWYoSlNHbG9iYWxEYXRhOjpjcmVhdGVDb250ZXh0R3JvdXAo
KS5sZWFrUmVmKCkpOworICAgIHJldHVybiB0b1JlZihWTTo6Y3JlYXRlQ29udGV4dEdyb3VwKCku
bGVha1JlZigpKTsKIH0KIAogSlNDb250ZXh0R3JvdXBSZWYgSlNDb250ZXh0R3JvdXBSZXRhaW4o
SlNDb250ZXh0R3JvdXBSZWYgZ3JvdXApCkBAIC02OCwxMiArNjgsMTIgQEAgSlNDb250ZXh0R3Jv
dXBSZWYgSlNDb250ZXh0R3JvdXBSZXRhaW4oSgogdm9pZCBKU0NvbnRleHRHcm91cFJlbGVhc2Uo
SlNDb250ZXh0R3JvdXBSZWYgZ3JvdXApCiB7CiAgICAgSWRlbnRpZmllclRhYmxlKiBzYXZlZElk
ZW50aWZpZXJUYWJsZTsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSAqdG9KUyhncm91
cCk7CisgICAgVk0mIHZtID0gKnRvSlMoZ3JvdXApOwogCiAgICAgewotICAgICAgICBKU0xvY2tI
b2xkZXIgbG9jayhnbG9iYWxEYXRhKTsKLSAgICAgICAgc2F2ZWRJZGVudGlmaWVyVGFibGUgPSB3
dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElkZW50aWZpZXJUYWJsZShnbG9iYWxEYXRhLmlkZW50
aWZpZXJUYWJsZSk7Ci0gICAgICAgIGdsb2JhbERhdGEuZGVyZWYoKTsKKyAgICAgICAgSlNMb2Nr
SG9sZGVyIGxvY2sodm0pOworICAgICAgICBzYXZlZElkZW50aWZpZXJUYWJsZSA9IHd0ZlRocmVh
ZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKHZtLmlkZW50aWZpZXJUYWJsZSk7Cisg
ICAgICAgIHZtLmRlcmVmKCk7CiAgICAgfQogCiAgICAgd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJl
bnRJZGVudGlmaWVyVGFibGUoc2F2ZWRJZGVudGlmaWVyVGFibGUpOwpAQCAtODgsMTkgKzg4LDE5
IEBAIHN0YXRpYyBib29sIGludGVybmFsU2NyaXB0VGltZW91dENhbGxiYWMKIAogdm9pZCBKU0Nv
bnRleHRHcm91cFNldEV4ZWN1dGlvblRpbWVMaW1pdChKU0NvbnRleHRHcm91cFJlZiBncm91cCwg
ZG91YmxlIGxpbWl0LCBKU1Nob3VsZFRlcm1pbmF0ZUNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkKiBj
YWxsYmFja0RhdGEpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gKnRvSlMoZ3Jv
dXApOwotICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oJmdsb2JhbERhdGEpOwotICAgIFdhdGNo
ZG9nJiB3YXRjaGRvZyA9IGdsb2JhbERhdGEud2F0Y2hkb2c7CisgICAgVk0mIHZtID0gKnRvSlMo
Z3JvdXApOworICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oJnZtKTsKKyAgICBXYXRjaGRvZyYg
d2F0Y2hkb2cgPSB2bS53YXRjaGRvZzsKICAgICB2b2lkKiBjYWxsYmFja1B0ciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGNhbGxiYWNrKTsKLSAgICB3YXRjaGRvZy5zZXRUaW1lTGltaXQoZ2xv
YmFsRGF0YSwgbGltaXQsIGludGVybmFsU2NyaXB0VGltZW91dENhbGxiYWNrLCBjYWxsYmFja1B0
ciwgY2FsbGJhY2tEYXRhKTsKKyAgICB3YXRjaGRvZy5zZXRUaW1lTGltaXQodm0sIGxpbWl0LCBp
bnRlcm5hbFNjcmlwdFRpbWVvdXRDYWxsYmFjaywgY2FsbGJhY2tQdHIsIGNhbGxiYWNrRGF0YSk7
CiB9CiAKIHZvaWQgSlNDb250ZXh0R3JvdXBDbGVhckV4ZWN1dGlvblRpbWVMaW1pdChKU0NvbnRl
eHRHcm91cFJlZiBncm91cCkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSAqdG9K
Uyhncm91cCk7Ci0gICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbSgmZ2xvYmFsRGF0YSk7Ci0gICAg
V2F0Y2hkb2cmIHdhdGNoZG9nID0gZ2xvYmFsRGF0YS53YXRjaGRvZzsKLSAgICB3YXRjaGRvZy5z
ZXRUaW1lTGltaXQoZ2xvYmFsRGF0YSwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZp
bml0eSgpKTsKKyAgICBWTSYgdm0gPSAqdG9KUyhncm91cCk7CisgICAgQVBJRW50cnlTaGltIGVu
dHJ5U2hpbSgmdm0pOworICAgIFdhdGNoZG9nJiB3YXRjaGRvZyA9IHZtLndhdGNoZG9nOworICAg
IHdhdGNoZG9nLnNldFRpbWVMaW1pdCh2bSwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpp
bmZpbml0eSgpKTsKIH0KIAogLy8gRnJvbSB0aGUgQVBJJ3MgcGVyc3BlY3RpdmUsIGEgZ2xvYmFs
IGNvbnRleHQgcmVtYWlucyBhbGl2ZSBpZmYgaXQgaGFzIGJlZW4gSlNHbG9iYWxDb250ZXh0UmV0
YWluZWQuCkBAIC0xMTAsMTAgKzExMCwxMCBAQCBKU0dsb2JhbENvbnRleHRSZWYgSlNHbG9iYWxD
b250ZXh0Q3JlYXRlCiAgICAgaW5pdGlhbGl6ZVRocmVhZGluZygpOwogCiAjaWYgT1MoREFSV0lO
KQotICAgIC8vIElmIHRoZSBhcHBsaWNhdGlvbiB3YXMgbGlua2VkIGJlZm9yZSBKU0dsb2JhbENv
bnRleHRDcmVhdGUgd2FzIGNoYW5nZWQgdG8gdXNlIGEgdW5pcXVlIEpTR2xvYmFsRGF0YSwKKyAg
ICAvLyBJZiB0aGUgYXBwbGljYXRpb24gd2FzIGxpbmtlZCBiZWZvcmUgSlNHbG9iYWxDb250ZXh0
Q3JlYXRlIHdhcyBjaGFuZ2VkIHRvIHVzZSBhIHVuaXF1ZSBWTSwKICAgICAvLyB3ZSB1c2UgYSBz
aGFyZWQgb25lIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KICAgICBpZiAoTlNWZXJzaW9u
T2ZMaW5rVGltZUxpYnJhcnkoIkphdmFTY3JpcHRDb3JlIikgPD0gd2Via2l0Rmlyc3RWZXJzaW9u
V2l0aENvbmN1cnJlbnRHbG9iYWxDb250ZXh0cykgewotICAgICAgICByZXR1cm4gSlNHbG9iYWxD
b250ZXh0Q3JlYXRlSW5Hcm91cCh0b1JlZigmSlNHbG9iYWxEYXRhOjpzaGFyZWRJbnN0YW5jZSgp
KSwgZ2xvYmFsT2JqZWN0Q2xhc3MpOworICAgICAgICByZXR1cm4gSlNHbG9iYWxDb250ZXh0Q3Jl
YXRlSW5Hcm91cCh0b1JlZigmVk06OnNoYXJlZEluc3RhbmNlKCkpLCBnbG9iYWxPYmplY3RDbGFz
cyk7CiAgICAgfQogI2VuZGlmIC8vIE9TKERBUldJTikKIApAQCAtMTI0LDIyICsxMjQsMjIgQEAg
SlNHbG9iYWxDb250ZXh0UmVmIEpTR2xvYmFsQ29udGV4dENyZWF0ZQogewogICAgIGluaXRpYWxp
emVUaHJlYWRpbmcoKTsKIAotICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IGdsb2JhbERhdGEgPSBn
cm91cCA/IFBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPih0b0pTKGdyb3VwKSkgOiBKU0dsb2JhbERh
dGE6OmNyZWF0ZUNvbnRleHRHcm91cCgpOworICAgIFJlZlB0cjxWTT4gdm0gPSBncm91cCA/IFBh
c3NSZWZQdHI8Vk0+KHRvSlMoZ3JvdXApKSA6IFZNOjpjcmVhdGVDb250ZXh0R3JvdXAoKTsKIAot
ICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZ2xvYmFsRGF0YS5nZXQoKSwgZmFsc2UpOwotICAg
IGdsb2JhbERhdGEtPm1ha2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCk7CisgICAgQVBJRW50
cnlTaGltIGVudHJ5U2hpbSh2bS5nZXQoKSwgZmFsc2UpOworICAgIHZtLT5tYWtlVXNhYmxlRnJv
bU11bHRpcGxlVGhyZWFkcygpOwogCiAgICAgaWYgKCFnbG9iYWxPYmplY3RDbGFzcykgewotICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gSlNHbG9iYWxPYmplY3Q6OmNyZWF0
ZSgqZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgqZ2xvYmFsRGF0
YSwganNOdWxsKCkpKTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpT
R2xvYmFsT2JqZWN0OjpjcmVhdGUoKnZtLCBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJl
KCp2bSwganNOdWxsKCkpKTsKICAgICAgICAgcmV0dXJuIEpTR2xvYmFsQ29udGV4dFJldGFpbih0
b0dsb2JhbFJlZihnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkpOwogICAgIH0KIAotICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2Jq
ZWN0Pjo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3RDbGFzcywgSlNDYWxsYmFja09i
amVjdDxKU0dsb2JhbE9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZSgqZ2xvYmFsRGF0YSwgMCwganNO
dWxsKCkpKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gSlNDYWxsYmFja09i
amVjdDxKU0dsb2JhbE9iamVjdD46OmNyZWF0ZSgqdm0sIGdsb2JhbE9iamVjdENsYXNzLCBKU0Nh
bGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKCp2bSwgMCwganNO
dWxsKCkpKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KTsKICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IGdsb2JhbE9iamVjdENsYXNzLT5wcm90b3R5cGUo
ZXhlYyk7CiAgICAgaWYgKCFwcm90b3R5cGUpCiAgICAgICAgIHByb3RvdHlwZSA9IGpzTnVsbCgp
OwotICAgIGdsb2JhbE9iamVjdC0+cmVzZXRQcm90b3R5cGUoKmdsb2JhbERhdGEsIHByb3RvdHlw
ZSk7CisgICAgZ2xvYmFsT2JqZWN0LT5yZXNldFByb3RvdHlwZSgqdm0sIHByb3RvdHlwZSk7CiAg
ICAgcmV0dXJuIEpTR2xvYmFsQ29udGV4dFJldGFpbih0b0dsb2JhbFJlZihleGVjKSk7CiB9CiAK
QEAgLTE0OCw5ICsxNDgsOSBAQCBKU0dsb2JhbENvbnRleHRSZWYgSlNHbG9iYWxDb250ZXh0UmV0
YWluCiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwogICAgIEFQSUVudHJ5U2hpbSBl
bnRyeVNoaW0oZXhlYyk7CiAKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5n
bG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBnY1Byb3RlY3QoZXhl
Yy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKLSAgICBnbG9iYWxEYXRhLnJlZigpOworICAgIHZt
LnJlZigpOwogICAgIHJldHVybiBjdHg7CiB9CiAKQEAgLTE2MSwxMyArMTYxLDEzIEBAIHZvaWQg
SlNHbG9iYWxDb250ZXh0UmVsZWFzZShKU0dsb2JhbENvbnQKICAgICB7CiAgICAgICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogCi0gICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9
IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgc2F2ZWRJZGVudGlmaWVyVGFibGUgPSB3dGZU
aHJlYWREYXRhKCkuc2V0Q3VycmVudElkZW50aWZpZXJUYWJsZShnbG9iYWxEYXRhLmlkZW50aWZp
ZXJUYWJsZSk7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIHNhdmVkSWRl
bnRpZmllclRhYmxlID0gd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUo
dm0uaWRlbnRpZmllclRhYmxlKTsKIAogICAgICAgICBib29sIHByb3RlY3RDb3VudElzWmVybyA9
IEhlYXA6OmhlYXAoZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKS0+dW5wcm90ZWN0KGV4ZWMt
PmR5bmFtaWNHbG9iYWxPYmplY3QoKSk7CiAgICAgICAgIGlmIChwcm90ZWN0Q291bnRJc1plcm8p
Ci0gICAgICAgICAgICBnbG9iYWxEYXRhLmhlYXAucmVwb3J0QWJhbmRvbmVkT2JqZWN0R3JhcGgo
KTsKLSAgICAgICAgZ2xvYmFsRGF0YS5kZXJlZigpOworICAgICAgICAgICAgdm0uaGVhcC5yZXBv
cnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpOworICAgICAgICB2bS5kZXJlZigpOwogICAgIH0KIAog
ICAgIHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKHNhdmVkSWRlbnRp
ZmllclRhYmxlKTsKQEAgLTE4NSw3ICsxODUsNyBAQCBKU09iamVjdFJlZiBKU0NvbnRleHRHZXRH
bG9iYWxPYmplY3QoSlNDCiBKU0NvbnRleHRHcm91cFJlZiBKU0NvbnRleHRHZXRHcm91cChKU0Nv
bnRleHRSZWYgY3R4KQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBy
ZXR1cm4gdG9SZWYoJmV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgcmV0dXJuIHRvUmVmKCZleGVj
LT52bSgpKTsKIH0KIAogSlNHbG9iYWxDb250ZXh0UmVmIEpTQ29udGV4dEdldEdsb2JhbENvbnRl
eHQoSlNDb250ZXh0UmVmIGN0eCkKQEAgLTIwMiw3ICsyMDIsNyBAQCBKU1N0cmluZ1JlZiBKU0Nv
bnRleHRDcmVhdGVCYWNrdHJhY2UoSlNDCiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAg
ICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1Ry
YWNlOwotICAgIEludGVycHJldGVyOjpnZXRTdGFja1RyYWNlKCZleGVjLT5nbG9iYWxEYXRhKCks
IHN0YWNrVHJhY2UsIG1heFN0YWNrU2l6ZSk7CisgICAgSW50ZXJwcmV0ZXI6OmdldFN0YWNrVHJh
Y2UoJmV4ZWMtPnZtKCksIHN0YWNrVHJhY2UsIG1heFN0YWNrU2l6ZSk7CiAKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHN0YWNrVHJhY2Uuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgU3RyaW5n
IHVybFN0cmluZzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYu
Y3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2Jq
ZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCBKU09iamVjdFJlZiBK
U09iamVjdE1ha2UoSlNDb250ZXh0UmVmIGN0CiAKICAgICBKU0NhbGxiYWNrT2JqZWN0PEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0Piogb2JqZWN0ID0gSlNDYWxsYmFja09iamVjdDxKU0Rlc3RydWN0aWJs
ZU9iamVjdD46OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUoKSwganNDbGFz
cywgZGF0YSk7CiAgICAgaWYgKEpTT2JqZWN0KiBwcm90b3R5cGUgPSBqc0NsYXNzLT5wcm90b3R5
cGUoZXhlYykpCi0gICAgICAgIG9iamVjdC0+c2V0UHJvdG90eXBlKGV4ZWMtPmdsb2JhbERhdGEo
KSwgcHJvdG90eXBlKTsKKyAgICAgICAgb2JqZWN0LT5zZXRQcm90b3R5cGUoZXhlYy0+dm0oKSwg
cHJvdG90eXBlKTsKIAogICAgIHJldHVybiB0b1JlZihvYmplY3QpOwogfQpAQCAtMTEwLDcgKzEx
MCw3IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUNvbnN0cnVjdG9yKEpTQ28KICAgICAgICAg
anNQcm90b3R5cGUgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlw
ZSgpOwogCiAgICAgSlNDYWxsYmFja0NvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvciA9IEpTQ2FsbGJh
Y2tDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJl
KCksIGpzQ2xhc3MsIGNhbGxBc0NvbnN0cnVjdG9yKTsKLSAgICBjb25zdHJ1Y3Rvci0+cHV0RGly
ZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwg
anNQcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBjb25z
dHJ1Y3Rvci0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90
b3R5cGUsIGpzUHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CiAg
ICAgcmV0dXJuIHRvUmVmKGNvbnN0cnVjdG9yKTsKIH0KIApAQCAtMTE5LDcgKzExOSw3IEBAIEpT
T2JqZWN0UmVmIEpTT2JqZWN0TWFrZUZ1bmN0aW9uKEpTQ29udGUKICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSB0b0pTKGN0eCk7CiAgICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShleGVjKTsKIAotICAg
IElkZW50aWZpZXIgbmFtZUlEID0gbmFtZSA/IG5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPmdsb2Jh
bERhdGEoKSkgOiBJZGVudGlmaWVyKGV4ZWMsICJhbm9ueW1vdXMiKTsKKyAgICBJZGVudGlmaWVy
IG5hbWVJRCA9IG5hbWUgPyBuYW1lLT5pZGVudGlmaWVyKCZleGVjLT52bSgpKSA6IElkZW50aWZp
ZXIoZXhlYywgImFub255bW91cyIpOwogICAgIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFy
Z3M7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlckNvdW50OyBpKyspCkBA
IC0yMzcsNyArMjM3LDcgQEAgdm9pZCBKU09iamVjdFNldFByb3RvdHlwZShKU0NvbnRleHRSZWYg
YwogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKICAgICBKU1ZhbHVlIGpz
VmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKIAotICAgIGpzT2JqZWN0LT5zZXRQcm90b3R5cGVX
aXRoQ3ljbGVDaGVjayhleGVjLT5nbG9iYWxEYXRhKCksIGpzVmFsdWUuaXNPYmplY3QoKSA/IGpz
VmFsdWUgOiBqc051bGwoKSk7CisgICAganNPYmplY3QtPnNldFByb3RvdHlwZVdpdGhDeWNsZUNo
ZWNrKGV4ZWMtPnZtKCksIGpzVmFsdWUuaXNPYmplY3QoKSA/IGpzVmFsdWUgOiBqc051bGwoKSk7
CiB9CiAKIGJvb2wgSlNPYmplY3RIYXNQcm9wZXJ0eShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVj
dFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSkKQEAgLTI0Nyw3ICsyNDcsNyBA
QCBib29sIEpTT2JqZWN0SGFzUHJvcGVydHkoSlNDb250ZXh0UmVmIGN0CiAKICAgICBKU09iamVj
dCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7CiAgICAgCi0gICAgcmV0dXJuIGpzT2JqZWN0LT5o
YXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERh
dGEoKSkpOworICAgIHJldHVybiBqc09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlO
YW1lLT5pZGVudGlmaWVyKCZleGVjLT52bSgpKSk7CiB9CiAKIEpTVmFsdWVSZWYgSlNPYmplY3RH
ZXRQcm9wZXJ0eShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmplY3QsIEpTU3RyaW5n
UmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpAQCAtMjU3LDcgKzI1Nyw3
IEBAIEpTVmFsdWVSZWYgSlNPYmplY3RHZXRQcm9wZXJ0eShKU0NvbnRleHQKIAogICAgIEpTT2Jq
ZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKIAotICAgIEpTVmFsdWUganNWYWx1ZSA9IGpz
T2JqZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZleGVjLT5nbG9iYWxE
YXRhKCkpKTsKKyAgICBKU1ZhbHVlIGpzVmFsdWUgPSBqc09iamVjdC0+Z2V0KGV4ZWMsIHByb3Bl
cnR5TmFtZS0+aWRlbnRpZmllcigmZXhlYy0+dm0oKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkgewogICAgICAgICBpZiAoZXhjZXB0aW9uKQogICAgICAgICAgICAgKmV4Y2VwdGlv
biA9IHRvUmVmKGV4ZWMsIGV4ZWMtPmV4Y2VwdGlvbigpKTsKQEAgLTI3Miw3ICsyNzIsNyBAQCB2
b2lkIEpTT2JqZWN0U2V0UHJvcGVydHkoSlNDb250ZXh0UmVmIGN0CiAgICAgQVBJRW50cnlTaGlt
IGVudHJ5U2hpbShleGVjKTsKIAogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0
KTsKLSAgICBJZGVudGlmaWVyIG5hbWUocHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZleGVjLT5n
bG9iYWxEYXRhKCkpKTsKKyAgICBJZGVudGlmaWVyIG5hbWUocHJvcGVydHlOYW1lLT5pZGVudGlm
aWVyKCZleGVjLT52bSgpKSk7CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVjLCB2YWx1
ZSk7CiAKICAgICBpZiAoYXR0cmlidXRlcyAmJiAhanNPYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMs
IG5hbWUpKQpAQCAtMzI5LDcgKzMyOSw3IEBAIGJvb2wgSlNPYmplY3REZWxldGVQcm9wZXJ0eShK
U0NvbnRleHRSZWYKIAogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKIAot
ICAgIGJvb2wgcmVzdWx0ID0ganNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5
KGpzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERh
dGEoKSkpOworICAgIGJvb2wgcmVzdWx0ID0ganNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0
ZVByb3BlcnR5KGpzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMt
PnZtKCkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAgICAgICAgaWYgKGV4
Y2VwdGlvbikKICAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBleGVjLT5leGNl
cHRpb24oKSk7CkBAIC0zODIsNyArMzgyLDcgQEAgSlNWYWx1ZVJlZiBKU09iamVjdEdldFByaXZh
dGVQcm9wZXJ0eShKUwogICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7CiAgICAgSlNP
YmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogICAgIEpTVmFsdWUgcmVzdWx0OwotICAg
IElkZW50aWZpZXIgbmFtZShwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERh
dGEoKSkpOworICAgIElkZW50aWZpZXIgbmFtZShwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4
ZWMtPnZtKCkpKTsKICAgICBpZiAoanNPYmplY3QtPmluaGVyaXRzKCZKU0NhbGxiYWNrT2JqZWN0
PEpTR2xvYmFsT2JqZWN0Pjo6c19pbmZvKSkKICAgICAgICAgcmVzdWx0ID0ganNDYXN0PEpTQ2Fs
bGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+Kj4oanNPYmplY3QpLT5nZXRQcml2YXRlUHJvcGVy
dHkobmFtZSk7CiAgICAgZWxzZSBpZiAoanNPYmplY3QtPmluaGVyaXRzKCZKU0NhbGxiYWNrT2Jq
ZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6c19pbmZvKSkKQEAgLTQwMCwxOCArNDAwLDE4IEBA
IGJvb2wgSlNPYmplY3RTZXRQcml2YXRlUHJvcGVydHkoSlNDb250ZXgKICAgICBBUElFbnRyeVNo
aW0gZW50cnlTaGltKGV4ZWMpOwogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0
KTsKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZSA/IHRvSlMoZXhlYywgdmFsdWUpIDogSlNW
YWx1ZSgpOwotICAgIElkZW50aWZpZXIgbmFtZShwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4
ZWMtPmdsb2JhbERhdGEoKSkpOworICAgIElkZW50aWZpZXIgbmFtZShwcm9wZXJ0eU5hbWUtPmlk
ZW50aWZpZXIoJmV4ZWMtPnZtKCkpKTsKICAgICBpZiAoanNPYmplY3QtPmluaGVyaXRzKCZKU0Nh
bGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6c19pbmZvKSkgewotICAgICAgICBqc0Nhc3Q8
SlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD4qPihqc09iamVjdCktPnNldFByaXZhdGVQ
cm9wZXJ0eShleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUsIGpzVmFsdWUpOworICAgICAgICBqc0Nh
c3Q8SlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD4qPihqc09iamVjdCktPnNldFByaXZh
dGVQcm9wZXJ0eShleGVjLT52bSgpLCBuYW1lLCBqc1ZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogICAgIGlmIChqc09iamVjdC0+aW5oZXJpdHMoJkpTQ2FsbGJhY2tPYmplY3Q8
SlNEZXN0cnVjdGlibGVPYmplY3Q+OjpzX2luZm8pKSB7Ci0gICAgICAgIGpzQ2FzdDxKU0NhbGxi
YWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pio+KGpzT2JqZWN0KS0+c2V0UHJpdmF0ZVBy
b3BlcnR5KGV4ZWMtPmdsb2JhbERhdGEoKSwgbmFtZSwganNWYWx1ZSk7CisgICAgICAgIGpzQ2Fz
dDxKU0NhbGxiYWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pio+KGpzT2JqZWN0KS0+c2V0
UHJpdmF0ZVByb3BlcnR5KGV4ZWMtPnZtKCksIG5hbWUsIGpzVmFsdWUpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICBpZiAoanNPYmpl
Y3QtPmluaGVyaXRzKCZKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnNfaW5m
bykpIHsKLSAgICAgICAganNDYXN0PEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0
Pio+KGpzT2JqZWN0KS0+c2V0UHJpdmF0ZVByb3BlcnR5KGV4ZWMtPmdsb2JhbERhdGEoKSwgbmFt
ZSwganNWYWx1ZSk7CisgICAgICAgIGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBl
ck9iamVjdD4qPihqc09iamVjdCktPnNldFByaXZhdGVQcm9wZXJ0eShleGVjLT52bSgpLCBuYW1l
LCBqc1ZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCkBAIC00MjMs
NyArNDIzLDcgQEAgYm9vbCBKU09iamVjdERlbGV0ZVByaXZhdGVQcm9wZXJ0eShKU0NvbgogICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKICAgICBBUElFbnRyeVNoaW0gZW50cnlTaGlt
KGV4ZWMpOwogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKLSAgICBJZGVu
dGlmaWVyIG5hbWUocHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCkp
KTsKKyAgICBJZGVudGlmaWVyIG5hbWUocHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZleGVjLT52
bSgpKSk7CiAgICAgaWYgKGpzT2JqZWN0LT5pbmhlcml0cygmSlNDYWxsYmFja09iamVjdDxKU0ds
b2JhbE9iamVjdD46OnNfaW5mbykpIHsKICAgICAgICAganNDYXN0PEpTQ2FsbGJhY2tPYmplY3Q8
SlNHbG9iYWxPYmplY3Q+Kj4oanNPYmplY3QpLT5kZWxldGVQcml2YXRlUHJvcGVydHkobmFtZSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNTI1LDE0ICs1MjUsMTQgQEAgSlNPYmplY3RSZWYg
SlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvcihKUwogc3RydWN0IE9wYXF1ZUpTUHJvcGVydHlOYW1l
QXJyYXkgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIE9wYXF1
ZUpTUHJvcGVydHlOYW1lQXJyYXkoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorICAgIE9wYXF1
ZUpTUHJvcGVydHlOYW1lQXJyYXkoVk0qIHZtKQogICAgICAgICA6IHJlZkNvdW50KDApCi0gICAg
ICAgICwgZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorICAgICAgICAsIHZtKHZtKQogICAgIHsKICAg
ICB9CiAgICAgCiAgICAgdW5zaWduZWQgcmVmQ291bnQ7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhOworICAgIFZNKiB2bTsKICAgICBWZWN0b3I8SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
ID4gYXJyYXk7CiB9OwogCkBAIC01NDIsMTAgKzU0MiwxMCBAQCBKU1Byb3BlcnR5TmFtZUFycmF5
UmVmIEpTT2JqZWN0Q29weVByb3BlCiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwog
ICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7CiAKLSAgICBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwogCi0gICAgSlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBwcm9wZXJ0eU5hbWVzID0gbmV3IE9wYXF1
ZUpTUHJvcGVydHlOYW1lQXJyYXkoZ2xvYmFsRGF0YSk7Ci0gICAgUHJvcGVydHlOYW1lQXJyYXkg
YXJyYXkoZ2xvYmFsRGF0YSk7CisgICAgSlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBwcm9wZXJ0eU5h
bWVzID0gbmV3IE9wYXF1ZUpTUHJvcGVydHlOYW1lQXJyYXkodm0pOworICAgIFByb3BlcnR5TmFt
ZUFycmF5IGFycmF5KHZtKTsKICAgICBqc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVy
dHlOYW1lcyhqc09iamVjdCwgZXhlYywgYXJyYXksIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMp
OwogCiAgICAgc2l6ZV90IHNpemUgPSBhcnJheS5zaXplKCk7CkBAIC01NjUsNyArNTY1LDcgQEAg
SlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBKU1Byb3BlcnR5TmFtZUFycgogdm9pZCBKU1Byb3BlcnR5
TmFtZUFycmF5UmVsZWFzZShKU1Byb3BlcnR5TmFtZUFycmF5UmVmIGFycmF5KQogewogICAgIGlm
ICgtLWFycmF5LT5yZWZDb3VudCA9PSAwKSB7Ci0gICAgICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNo
aW0oYXJyYXktPmdsb2JhbERhdGEsIGZhbHNlKTsKKyAgICAgICAgQVBJRW50cnlTaGltIGVudHJ5
U2hpbShhcnJheS0+dm0sIGZhbHNlKTsKICAgICAgICAgZGVsZXRlIGFycmF5OwogICAgIH0KIH0K
QEAgLTU4Myw2ICs1ODMsNiBAQCBKU1N0cmluZ1JlZiBKU1Byb3BlcnR5TmFtZUFycmF5R2V0TmFt
ZUF0CiB2b2lkIEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JBZGROYW1lKEpTUHJvcGVydHlOYW1l
QWNjdW11bGF0b3JSZWYgYXJyYXksIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSkKIHsKICAgICBQ
cm9wZXJ0eU5hbWVBcnJheSogcHJvcGVydHlOYW1lcyA9IHRvSlMoYXJyYXkpOwotICAgIEFQSUVu
dHJ5U2hpbSBlbnRyeVNoaW0ocHJvcGVydHlOYW1lcy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBwcm9w
ZXJ0eU5hbWVzLT5hZGQocHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKHByb3BlcnR5TmFtZXMtPmds
b2JhbERhdGEoKSkpOworICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0ocHJvcGVydHlOYW1lcy0+
dm0oKSk7CisgICAgcHJvcGVydHlOYW1lcy0+YWRkKHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcihw
cm9wZXJ0eU5hbWVzLT52bSgpKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTU2NyaXB0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTU2NyaXB0UmVmLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1NjcmlwdFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAK
ICNpbmNsdWRlICJBUElTaGltcy5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKICNpbmNsdWRl
ICJKU0Jhc2VQcml2YXRlLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAi
Vk0uaCIKICNpbmNsdWRlICJKU1NjcmlwdFJlZlByaXZhdGUuaCIKICNpbmNsdWRlICJPcGFxdWVK
U1N0cmluZy5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKQEAgLTQxLDkgKzQxLDkgQEAgdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAogc3RydWN0IE9wYXF1ZUpTU2NyaXB0IDogcHVibGljIFNvdXJj
ZVByb3ZpZGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgV1RGOjpQYXNzUmVmUHRyPE9wYXF1ZUpT
U2NyaXB0PiBjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBTdHJpbmcmIHVy
bCwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2UpCisgICAgc3Rh
dGljIFdURjo6UGFzc1JlZlB0cjxPcGFxdWVKU1NjcmlwdD4gY3JlYXRlKFZNKiB2bSwgY29uc3Qg
U3RyaW5nJiB1cmwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6YWRvcHRSZWYobmV3IE9wYXF1ZUpTU2NyaXB0
KGdsb2JhbERhdGEsIHVybCwgc3RhcnRpbmdMaW5lTnVtYmVyLCBzb3VyY2UpKTsKKyAgICAgICAg
cmV0dXJuIFdURjo6YWRvcHRSZWYobmV3IE9wYXF1ZUpTU2NyaXB0KHZtLCB1cmwsIHN0YXJ0aW5n
TGluZU51bWJlciwgc291cmNlKSk7CiAgICAgfQogCiAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2Uo
KSBjb25zdCBPVkVSUklERQpAQCAtNTEsNDIgKzUxLDQyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIG1fc291cmNlOwogICAgIH0KIAotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fZ2xvYmFsRGF0YTsgfQorICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0dXJu
IG1fdm07IH0KIAogcHJpdmF0ZToKLSAgICBPcGFxdWVKU1NjcmlwdChKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBjb25z
dCBTdHJpbmcmIHNvdXJjZSkKKyAgICBPcGFxdWVKU1NjcmlwdChWTSogdm0sIGNvbnN0IFN0cmlu
ZyYgdXJsLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZSkKICAg
ICAgICAgOiBTb3VyY2VQcm92aWRlcih1cmwsIFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpm
cm9tT25lQmFzZWRJbnQoc3RhcnRpbmdMaW5lTnVtYmVyKSwgT3JkaW5hbE51bWJlcjo6Zmlyc3Qo
KSkpCi0gICAgICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgICAgICwgbV92bSh2
bSkKICAgICAgICAgLCBtX3NvdXJjZShzb3VyY2UpCiAgICAgewogICAgIH0KIAogICAgIH5PcGFx
dWVKU1NjcmlwdCgpIHsgfQogCi0gICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CisgICAg
Vk0qIG1fdm07CiAgICAgU3RyaW5nIG1fc291cmNlOwogfTsKIAotc3RhdGljIGJvb2wgcGFyc2VT
Y3JpcHQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IFBhcnNlckVycm9yJiBlcnJvcikKK3N0YXRpYyBib29sIHBhcnNlU2NyaXB0KFZNKiB2bSwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJzZXJFcnJvciYgZXJyb3IpCiB7Ci0gICAgcmV0dXJu
IEpTQzo6cGFyc2U8SlNDOjpQcm9ncmFtTm9kZT4oZ2xvYmFsRGF0YSwgc291cmNlLCAwLCBJZGVu
dGlmaWVyKCksIEpTUGFyc2VOb3JtYWwsIEpTUGFyc2VQcm9ncmFtQ29kZSwgZXJyb3IpOworICAg
IHJldHVybiBKU0M6OnBhcnNlPEpTQzo6UHJvZ3JhbU5vZGU+KHZtLCBzb3VyY2UsIDAsIElkZW50
aWZpZXIoKSwgSlNQYXJzZU5vcm1hbCwgSlNQYXJzZVByb2dyYW1Db2RlLCBlcnJvcik7CiB9CiAK
IGV4dGVybiAiQyIgewogCiBKU1NjcmlwdFJlZiBKU1NjcmlwdENyZWF0ZVJlZmVyZW5jaW5nSW1t
b3J0YWxBU0NJSVRleHQoSlNDb250ZXh0R3JvdXBSZWYgY29udGV4dEdyb3VwLCBKU1N0cmluZ1Jl
ZiB1cmwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIGNvbnN0IGNoYXIqIHNvdXJjZSwgc2l6ZV90
IGxlbmd0aCwgSlNTdHJpbmdSZWYqIGVycm9yTWVzc2FnZSwgaW50KiBlcnJvckxpbmUpCiB7Ci0g
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gdG9KUyhjb250ZXh0R3JvdXApOwotICAgIEFQ
SUVudHJ5U2hpbSBlbnRyeVNoaW0oZ2xvYmFsRGF0YSk7CisgICAgVk0qIHZtID0gdG9KUyhjb250
ZXh0R3JvdXApOworICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0odm0pOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgaWYgKCFpc0FTQ0lJKHNvdXJj
ZVtpXSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8T3BhcXVl
SlNTY3JpcHQ+IHJlc3VsdCA9IE9wYXF1ZUpTU2NyaXB0OjpjcmVhdGUoZ2xvYmFsRGF0YSwgdXJs
LT5zdHJpbmcoKSwgc3RhcnRpbmdMaW5lTnVtYmVyLCBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRl
RnJvbUxpdGVyYWwoc291cmNlLCBsZW5ndGgpKSk7CisgICAgUmVmUHRyPE9wYXF1ZUpTU2NyaXB0
PiByZXN1bHQgPSBPcGFxdWVKU1NjcmlwdDo6Y3JlYXRlKHZtLCB1cmwtPnN0cmluZygpLCBzdGFy
dGluZ0xpbmVOdW1iZXIsIFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbChzb3Vy
Y2UsIGxlbmd0aCkpKTsKIAogICAgIFBhcnNlckVycm9yIGVycm9yOwotICAgIGlmICghcGFyc2VT
Y3JpcHQoZ2xvYmFsRGF0YSwgU291cmNlQ29kZShyZXN1bHQpLCBlcnJvcikpIHsKKyAgICBpZiAo
IXBhcnNlU2NyaXB0KHZtLCBTb3VyY2VDb2RlKHJlc3VsdCksIGVycm9yKSkgewogICAgICAgICBp
ZiAoZXJyb3JNZXNzYWdlKQogICAgICAgICAgICAgKmVycm9yTWVzc2FnZSA9IE9wYXF1ZUpTU3Ry
aW5nOjpjcmVhdGUoZXJyb3IubV9tZXNzYWdlKS5sZWFrUmVmKCk7CiAgICAgICAgIGlmIChlcnJv
ckxpbmUpCkBAIC05OSwxMyArOTksMTMgQEAgSlNTY3JpcHRSZWYgSlNTY3JpcHRDcmVhdGVSZWZl
cmVuY2luZ0ltbQogCiBKU1NjcmlwdFJlZiBKU1NjcmlwdENyZWF0ZUZyb21TdHJpbmcoSlNDb250
ZXh0R3JvdXBSZWYgY29udGV4dEdyb3VwLCBKU1N0cmluZ1JlZiB1cmwsIGludCBzdGFydGluZ0xp
bmVOdW1iZXIsIEpTU3RyaW5nUmVmIHNvdXJjZSwgSlNTdHJpbmdSZWYqIGVycm9yTWVzc2FnZSwg
aW50KiBlcnJvckxpbmUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gdG9KUyhj
b250ZXh0R3JvdXApOwotICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZ2xvYmFsRGF0YSk7Cisg
ICAgVk0qIHZtID0gdG9KUyhjb250ZXh0R3JvdXApOworICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNo
aW0odm0pOwogCi0gICAgUmVmUHRyPE9wYXF1ZUpTU2NyaXB0PiByZXN1bHQgPSBPcGFxdWVKU1Nj
cmlwdDo6Y3JlYXRlKGdsb2JhbERhdGEsIHVybC0+c3RyaW5nKCksIHN0YXJ0aW5nTGluZU51bWJl
ciwgc291cmNlLT5zdHJpbmcoKSk7CisgICAgUmVmUHRyPE9wYXF1ZUpTU2NyaXB0PiByZXN1bHQg
PSBPcGFxdWVKU1NjcmlwdDo6Y3JlYXRlKHZtLCB1cmwtPnN0cmluZygpLCBzdGFydGluZ0xpbmVO
dW1iZXIsIHNvdXJjZS0+c3RyaW5nKCkpOwogCiAgICAgUGFyc2VyRXJyb3IgZXJyb3I7Ci0gICAg
aWYgKCFwYXJzZVNjcmlwdChnbG9iYWxEYXRhLCBTb3VyY2VDb2RlKHJlc3VsdCksIGVycm9yKSkg
eworICAgIGlmICghcGFyc2VTY3JpcHQodm0sIFNvdXJjZUNvZGUocmVzdWx0KSwgZXJyb3IpKSB7
CiAgICAgICAgIGlmIChlcnJvck1lc3NhZ2UpCiAgICAgICAgICAgICAqZXJyb3JNZXNzYWdlID0g
T3BhcXVlSlNTdHJpbmc6OmNyZWF0ZShlcnJvci5tX21lc3NhZ2UpLmxlYWtSZWYoKTsKICAgICAg
ICAgaWYgKGVycm9yTGluZSkKQEAgLTExOCwxMyArMTE4LDEzIEBAIEpTU2NyaXB0UmVmIEpTU2Ny
aXB0Q3JlYXRlRnJvbVN0cmluZyhKU0MKIAogdm9pZCBKU1NjcmlwdFJldGFpbihKU1NjcmlwdFJl
ZiBzY3JpcHQpCiB7Ci0gICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShzY3JpcHQtPmdsb2JhbERh
dGEoKSk7CisgICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShzY3JpcHQtPnZtKCkpOwogICAgIHNj
cmlwdC0+cmVmKCk7CiB9CiAKIHZvaWQgSlNTY3JpcHRSZWxlYXNlKEpTU2NyaXB0UmVmIHNjcmlw
dCkKIHsKLSAgICBBUElFbnRyeVNoaW0gZW50cnlTaGltKHNjcmlwdC0+Z2xvYmFsRGF0YSgpKTsK
KyAgICBBUElFbnRyeVNoaW0gZW50cnlTaGltKHNjcmlwdC0+dm0oKSk7CiAgICAgc2NyaXB0LT5k
ZXJlZigpOwogfQogCkBAIC0xMzIsNyArMTMyLDcgQEAgSlNWYWx1ZVJlZiBKU1NjcmlwdEV2YWx1
YXRlKEpTQ29udGV4dFJlZgogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7
CiAgICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShleGVjKTsKLSAgICBpZiAoc2NyaXB0LT5nbG9i
YWxEYXRhKCkgIT0gJmV4ZWMtPmdsb2JhbERhdGEoKSkgeworICAgIGlmIChzY3JpcHQtPnZtKCkg
IT0gJmV4ZWMtPnZtKCkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1ZpcnR1YWxNYWNoaW5lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
MjQsMTAgKzIyNCwxMCBAQCAtIChOU01hcFRhYmxlICopZXh0ZXJuYWxPYmplY3RHcmFwaAogCiBA
ZW5kCiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJvb3QpCit2b2lkIHNj
YW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yLCB2b2lkKiByb290KQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBKU1Zp
cnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtKU1ZpcnR1YWxNYWNoaW5lIHZpcnR1YWxN
YWNoaW5lV2l0aENvbnRleHRHcm91cFJlZjp0b1JlZigmZ2xvYmFsRGF0YSldOworICAgICAgICBK
U1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtKU1ZpcnR1YWxNYWNoaW5lIHZpcnR1
YWxNYWNoaW5lV2l0aENvbnRleHRHcm91cFJlZjp0b1JlZigmdm0pXTsKICAgICAgICAgTlNNYXBU
YWJsZSAqZXh0ZXJuYWxPYmplY3RHcmFwaCA9IFt2aXJ0dWFsTWFjaGluZSBleHRlcm5hbE9iamVj
dEdyYXBoXTsKICAgICAgICAgVmVjdG9yPHZvaWQqPiBzdGFjazsKICAgICAgICAgc3RhY2suYXBw
ZW5kKHJvb3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNo
aW5lSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
VmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw3ICszMSw3IEBACiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIAogbmFtZXNwYWNl
IEpTQyB7Ci1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIGNsYXNzIFNsb3RWaXNpdG9y
OwogfQogCkBAIC01MCw3ICs1MCw3IEBAIEpTQ29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZp
cnR1YWxNYWMKIEBlbmQKICNlbmRpZiAvLyBkZWZpbmVkKF9fT0JKQ19fKQogCi12b2lkIHNjYW5F
eHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6SlNHbG9iYWxEYXRhJiwgSlNDOjpTbG90VmlzaXRvciYs
IHZvaWQqIHJvb3QpOwordm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiwgSlND
OjpTbG90VmlzaXRvciYsIHZvaWQqIHJvb3QpOwogCiAjZW5kaWYKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0JKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDIsNyArMTAyLDcgQEAgc3RhdGljIEpTT2JqZWN0UmVmIG1ha2VXcmFwcGVyKEpTQ29udGV4
dAogICAgIEpTQzo6SlNDYWxsYmFja09iamVjdDxKU0M6OkpTQVBJV3JhcHBlck9iamVjdD4qIG9i
amVjdCA9IEpTQzo6SlNDYWxsYmFja09iamVjdDxKU0M6OkpTQVBJV3JhcHBlck9iamVjdD46OmNy
ZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+b2JqY1dyYXBwZXJPYmplY3RTdHJ1Y3R1cmUoKSwganNDbGFzcywgMCk7CiAg
ICAgb2JqZWN0LT5zZXRXcmFwcGVkT2JqZWN0KHdyYXBwZWRPYmplY3QpOwogICAgIGlmIChKU0M6
OkpTT2JqZWN0KiBwcm90b3R5cGUgPSBqc0NsYXNzLT5wcm90b3R5cGUoZXhlYykpCi0gICAgICAg
IG9iamVjdC0+c2V0UHJvdG90eXBlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvdG90eXBlKTsKKyAg
ICAgICAgb2JqZWN0LT5zZXRQcm90b3R5cGUoZXhlYy0+dm0oKSwgcHJvdG90eXBlKTsKIAogICAg
IHJldHVybiB0b1JlZihvYmplY3QpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OSwxMCArNDksMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBPYmpDQ2FsbGJhY2tG
dW5jdGlvbiogY3JlYXRlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBQYXNzT3duUHRyPE9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbD4pOwogICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChnbG9iYWxPYmplY3QpOwotICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQog
CiAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5t
bQkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2Fs
bGJhY2tGdW5jdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDc3LDcgKzQ3Nyw3IEBAIE9iakND
YWxsYmFja0Z1bmN0aW9uOjpPYmpDQ2FsbGJhY2tGdW5jdGkKIE9iakNDYWxsYmFja0Z1bmN0aW9u
KiBPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093
blB0cjxPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw+IGltcGwpCiB7CiAgICAgT2JqQ0NhbGxiYWNr
RnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8T2JqQ0NhbGxi
YWNrRnVuY3Rpb24+KCpleGVjLT5oZWFwKCkpKSBPYmpDQ2FsbGJhY2tGdW5jdGlvbihnbG9iYWxP
YmplY3QsIG9iakNDYWxsYmFja0Z1bmN0aW9uQ2FsbEFzRnVuY3Rpb24sIGltcGwpOwotICAgIGZ1
bmN0aW9uLT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUpOworICAgIGZ1
bmN0aW9uLT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpLCBuYW1lKTsKICAgICByZXR1cm4gZnVu
Y3Rpb247CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT3BhcXVlSlNTdHJp
bmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT3BhcXVlSlNT
dHJpbmcuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L09wYXF1ZUpTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBTdHJp
bmcgT3BhcXVlSlNTdHJpbmc6OnN0cmluZygpIGNvbnN0CiAgICAgcmV0dXJuIG1fc3RyaW5nLmlz
b2xhdGVkQ29weSgpOwogfQogCi1JZGVudGlmaWVyIE9wYXF1ZUpTU3RyaW5nOjppZGVudGlmaWVy
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkgY29uc3QKK0lkZW50aWZpZXIgT3BhcXVlSlNTdHJp
bmc6OmlkZW50aWZpZXIoVk0qIHZtKSBjb25zdAogewogICAgIGlmICghdGhpcyB8fCBtX3N0cmlu
Zy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIElkZW50aWZpZXIoKTsKQEAgLTU3LDcgKzU3LDcg
QEAgSWRlbnRpZmllciBPcGFxdWVKU1N0cmluZzo6aWRlbnRpZmllcihKUwogICAgICAgICByZXR1
cm4gSWRlbnRpZmllcihJZGVudGlmaWVyOjpFbXB0eUlkZW50aWZpZXIpOwogCiAgICAgaWYgKG1f
c3RyaW5nLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gSWRlbnRpZmllcihnbG9iYWxEYXRhLCBt
X3N0cmluZy5jaGFyYWN0ZXJzOCgpLCBtX3N0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIHJldHVy
biBJZGVudGlmaWVyKHZtLCBtX3N0cmluZy5jaGFyYWN0ZXJzOCgpLCBtX3N0cmluZy5sZW5ndGgo
KSk7CiAKLSAgICByZXR1cm4gSWRlbnRpZmllcihnbG9iYWxEYXRhLCBtX3N0cmluZy5jaGFyYWN0
ZXJzMTYoKSwgbV9zdHJpbmcubGVuZ3RoKCkpOworICAgIHJldHVybiBJZGVudGlmaWVyKHZtLCBt
X3N0cmluZy5jaGFyYWN0ZXJzMTYoKSwgbV9zdHJpbmcubGVuZ3RoKCkpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PcGFxdWVKU1N0cmluZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT3BhcXVlSlNTdHJpbmcuaAkocmV2aXNpb24gMTQ4NjU1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PcGFxdWVKU1N0cmluZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIElk
ZW50aWZpZXI7Ci0gICAgY2xhc3MgSlNHbG9iYWxEYXRhOworICAgIGNsYXNzIFZNOwogfQogCiBz
dHJ1Y3QgT3BhcXVlSlNTdHJpbmcgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8T3BhcXVl
SlNTdHJpbmc+IHsKQEAgLTU3LDcgKzU3LDcgQEAgc3RydWN0IE9wYXF1ZUpTU3RyaW5nIDogcHVi
bGljIFRocmVhZFNhZgogICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuICEhdGhpcyA/IG1f
c3RyaW5nLmxlbmd0aCgpIDogMDsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHN0
cmluZygpIGNvbnN0OwotICAgIEpTQzo6SWRlbnRpZmllciBpZGVudGlmaWVyKEpTQzo6SlNHbG9i
YWxEYXRhKikgY29uc3Q7CisgICAgSlNDOjpJZGVudGlmaWVyIGlkZW50aWZpZXIoSlNDOjpWTSop
IGNvbnN0OwogI2lmIFBMQVRGT1JNKFFUKQogICAgIFFTdHJpbmcgcVN0cmluZygpIGNvbnN0IHsg
cmV0dXJuIG1fc3RyaW5nOyB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCShyZXZpc2lvbiAxNDg2NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtODU0LDExICs4
NTQsMTEgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5ccnVudGltZVxKU0dsb2JhbERhdGEuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
cnVudGltZVxWTS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSlNHbG9iYWxEYXRhLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlwuLlxydW50aW1lXFZNLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmVFeHBvcnRzLmRlZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
RXhwb3J0cy5kZWYJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVFeHBvcnRz
LmRlZgkod29ya2luZyBjb3B5KQpAQCAtMSwyMiArMSwxNSBAQAogRVhQT1JUUwogCiAgICAgPz8w
QXJyYXlCdWZmZXJWaWV3QFdURkBASUFFQFY/JFBhc3NSZWZQdHJAVkFycmF5QnVmZmVyQFdURkBA
QDFASUBaCi0gICAgPz8wQm9vbGVhbk9iamVjdEBKU0NAQElBRUBBQVZKU0dsb2JhbERhdGFAMUBQ
QVZTdHJ1Y3R1cmVAMUBAWgogICAgID8/MENvbGxhdG9yQFdURkBAUUFFQFBCREBaCiAgICAgPz8w
Q1N0cmluZ0BXVEZAQFFBRUBQQkRAWgogICAgID8/MENTdHJpbmdAV1RGQEBRQUVAUEJESUBaCi0g
ICAgPz8wRGF0YWJhc2VAUHJvZmlsZXJASlNDQEBRQUVAQUFWSlNHbG9iYWxEYXRhQDJAQFoKICAg
ICA/PzBEYXRlSW5zdGFuY2VASlNDQEBJQUVAUEFWRXhlY1N0YXRlQDFAUEFWU3RydWN0dXJlQDFA
QFoKICAgICA/PzBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrQEpTQ0BAUUFFQFBBVkhlYXBAMUBA
WgogICAgID8/MERyb3BBbGxMb2Nrc0BKU0xvY2tASlNDQEBRQUVAUEFWRXhlY1N0YXRlQDJAQFoK
LSAgICA/PzBEcm9wQWxsTG9ja3NASlNMb2NrQEpTQ0BAUUFFQFBBVkpTR2xvYmFsRGF0YUAyQEBa
Ci0gICAgPz8wRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlQEpTQ0BAUUFFQEFBVkpTR2xvYmFsRGF0
YUAxQFBBVkpTR2xvYmFsT2JqZWN0QDFAQFogCiAgICAgPz8wRXJyb3JIYW5kbGluZ01vZGVASW50
ZXJwcmV0ZXJASlNDQEBRQUVAUEFWRXhlY1N0YXRlQDJAQFoKICAgICA/PzBJbnRlcm5hbEZ1bmN0
aW9uQEpTQ0BASUFFQFBBVkpTR2xvYmFsT2JqZWN0QDFAUEFWU3RydWN0dXJlQDFAQFoKLSAgICA/
PzBKU0dsb2JhbE9iamVjdEBKU0NAQElBRUBBQVZKU0dsb2JhbERhdGFAMUBQQVZTdHJ1Y3R1cmVA
MUBQQlVHbG9iYWxPYmplY3RNZXRob2RUYWJsZUAxQEBaCi0gICAgPz8wSlNMb2NrSG9sZGVyQEpT
Q0BAUUFFQEFBVkpTR2xvYmFsRGF0YUAxQEBaCiAgICAgPz8wSlNMb2NrSG9sZGVyQEpTQ0BAUUFF
QFBBVkV4ZWNTdGF0ZUAxQEBaCi0gICAgPz8wSlNMb2NrSG9sZGVyQEpTQ0BAUUFFQFBBVkpTR2xv
YmFsRGF0YUAxQEBaCiAgICAgPz8wTUQ1QFdURkBAUUFFQFhaCiAgICAgPz8wTWVkaWFUaW1lQFdU
RkBAUUFFQF9KSElAWiAKICAgICA/PzBNZW1vcnlJbnN0cnVtZW50YXRpb25AV1RGQEBRQUVAUEFW
TWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50QDFAQFoKQEAgLTMzLDIxICsyNiwxNyBAQCBFWFBP
UlRTCiAgICAgPz8wU3RyaW5nQFdURkBAUUFFQFBCRElAWgogICAgID8/MFN0cmluZ0BXVEZAQFFB
RUBQQkVJQFoKICAgICA/PzBTdHJpbmdAV1RGQEBRQUVAVkFTQ0lJTGl0ZXJhbEAxQEBaCi0gICAg
Pz8wU3RyaW5nT2JqZWN0QEpTQ0BASUFFQEFBVkpTR2xvYmFsRGF0YUAxQFBBVlN0cnVjdHVyZUAx
QEBaCiAgICAgPz8wU3RyaW5nUHJpbnRTdHJlYW1AV1RGQEBRQUVAWFoKLSAgICA/PzBTdHJ1Y3R1
cmVASlNDQEBBQUVAQUFWSlNHbG9iYWxEYXRhQDFAUEFWSlNHbG9iYWxPYmplY3RAMUBWSlNWYWx1
ZUAxQEFCVlR5cGVJbmZvQDFAUEJVQ2xhc3NJbmZvQDFARUlAWgogICAgID8/MFRocmVhZENvbmRp
dGlvbkBXVEZAQFFBRUBYWgogICAgID8/MFdyYXBwZXJCYXNlQE1lbW9yeUluc3RydW1lbnRhdGlv
bkBXVEZAQFFBRUBQQkRQQlhAWgogICAgID8/MFdURlRocmVhZERhdGFAV1RGQEBRQUVAWFoKICAg
ICA/PzBZYXJyUGF0dGVybkBZYXJyQEpTQ0BAUUFFQEFCVlN0cmluZ0BXVEZAQF9OMVBBUEJEQFoK
ICAgICA/PzFBcnJheUJ1ZmZlclZpZXdAV1RGQEBVQUVAWFoKLSAgICA/PzFDbGllbnREYXRhQEpT
R2xvYmFsRGF0YUBKU0NAQFVBRUBYWgogICAgID8/MUNvbGxhdG9yQFdURkBAUUFFQFhaCiAgICAg
Pz8xRGF0YWJhc2VAUHJvZmlsZXJASlNDQEBRQUVAWFoKICAgICA/PzFEZWJ1Z2dlckBKU0NAQFVB
RUBYWgogICAgID8/MURyb3BBbGxMb2Nrc0BKU0xvY2tASlNDQEBRQUVAWFoKICAgICA/PzFFcnJv
ckhhbmRsaW5nTW9kZUBJbnRlcnByZXRlckBKU0NAQFFBRUBYWgotICAgID8/MUpTR2xvYmFsRGF0
YUBKU0NAQFFBRUBYWgogICAgID8/MUpTR2xvYmFsT2JqZWN0QEpTQ0BAUUFFQFhaCiAgICAgPz8x
SlNMb2NrSG9sZGVyQEpTQ0BAUUFFQFhaCiAgICAgPz8xTWVkaWFUaW1lQFdURkBAUUFFQFhaIApA
QCAtNzgsNyArNjcsNiBAQCBFWFBPUlRTCiAgICAgP2FkZEBBdG9taWNTdHJpbmdAV1RGQEBDQT9B
Vj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAyQFBCREBaCiAgICAgP2FkZEBBdG9taWNT
dHJpbmdAV1RGQEBDQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAyQFBCRUBaCiAg
ICAgP2FkZEBBdG9taWNTdHJpbmdAV1RGQEBDQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBX
VEZAQEAyQFBCRUlAWgotICAgID9hZGRASWRlbnRpZmllckBKU0NAQENBP0FWPyRQYXNzUmVmUHRy
QFZTdHJpbmdJbXBsQFdURkBAQFdURkBAUEFWSlNHbG9iYWxEYXRhQDJAUEFWU3RyaW5nSW1wbEA0
QEBaCiAgICAgP2FkZEBJZGVudGlmaWVyQEpTQ0BAU0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0lt
cGxAV1RGQEBAV1RGQEBQQVZFeGVjU3RhdGVAMkBQQkRAWgogICAgID9hZGRAUHJvcGVydHlOYW1l
QXJyYXlASlNDQEBRQUVYUEFWU3RyaW5nSW1wbEBXVEZAQEBaCiAgICAgP2FkZEJ5dGVzQE1ENUBX
VEZAQFFBRVhQQkVJQFoKQEAgLTg2LDE0ICs3NCwxMSBAQCBFWFBPUlRTCiAgICAgP2FkZEN1cnJl
bnRUaHJlYWRATWFjaGluZVRocmVhZHNASlNDQEBRQUVYWFoKICAgICA/YWRkRmluYWxpemVyQEhl
YXBASlNDQEBRQUVYUEFWSlNDZWxsQDJAUDZBWDBAWkBaCiAgICAgP2FkZEZyb21MaXRlcmFsRGF0
YUBBdG9taWNTdHJpbmdAV1RGQEBDQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAy
QFBCRElAWgotICAgID9hZGRQcm9wZXJ0eVRyYW5zaXRpb25AU3RydWN0dXJlQEpTQ0BAU0FQQVYx
MkBBQVZKU0dsb2JhbERhdGFAMkBQQVYxMkBWUHJvcGVydHlOYW1lQDJASVBBVkpTQ2VsbEAyQEFB
SEBaCiAgICAgP2FkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVAU3RydWN0
dXJlQEpTQ0BAU0FQQVYxMkBQQVYxMkBWUHJvcGVydHlOYW1lQDJASVBBVkpTQ2VsbEAyQEFBSEBa
Ci0gICAgP2FkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb25AU3RydWN0dXJlQEpTQ0BAUUFFSEFB
VkpTR2xvYmFsRGF0YUAyQFZQcm9wZXJ0eU5hbWVAMkBJUEFWSlNDZWxsQDJAQFoKICAgICA/YWRk
UHJpdmF0ZUJ1ZmZlckBNZW1vcnlDbGFzc0luZm9AV1RGQEBRQUVYSVBCRDAwQFoKICAgICA/YWRk
UmF3QnVmZmVyQE1lbW9yeUNsYXNzSW5mb0BXVEZAQFFBRVhQQlhJUEJEMUBaCiAgICAgP2FkZFNs
b3dDYXNlQEF0b21pY1N0cmluZ0BXVEZAQENBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdU
RkBAQDJAUEFWU3RyaW5nSW1wbEAyQEBaCiAgICAgP2FkZFNsb3dDYXNlQElkZW50aWZpZXJASlND
QEBDQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEBXVEZAQFBBVkV4ZWNTdGF0ZUAy
QFBBVlN0cmluZ0ltcGxANEBAWgotICAgID9hZGRTbG93Q2FzZUBJZGVudGlmaWVyQEpTQ0BAQ0E/
QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAV1RGQEBQQVZKU0dsb2JhbERhdGFAMkBQ
QVZTdHJpbmdJbXBsQDRAQFoKICAgICA/YWRkU3RhdGljR2xvYmFsc0BKU0dsb2JhbE9iamVjdEBK
U0NAQElBRVhQQVVHbG9iYWxQcm9wZXJ0eUluZm9AMTJASEBaCiAgICAgP2Fkb3B0QFN0cmluZ0lt
cGxAV1RGQEBTQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAyQEFBVj8kU3RyaW5n
QnVmZmVyQF9XQDJAQFoKICAgICA/YWRvcHRAU3RyaW5nSW1wbEBXVEZAQFNBP0FWPyRQYXNzUmVm
UHRyQFZTdHJpbmdJbXBsQFdURkBAQDJAQUFWPyRTdHJpbmdCdWZmZXJARUAyQEBaCkBAIC0xMzIs
NyArMTE3LDYgQEAgRVhQT1JUUwogICAgID9jYW5jZWxDYWxsT25NYWluVGhyZWFkQFdURkBAWUFY
UDZBWFBBWEBaMEBaCiAgICAgP2NhblNocmlua0BTdHJpbmdCdWlsZGVyQFdURkBAUUJFX05YWgog
ICAgID9jYXBhY2l0eUBIZWFwQEpTQ0BAUUFFSVhaCi0gICAgP2NoYW5nZVByb3RvdHlwZVRyYW5z
aXRpb25AU3RydWN0dXJlQEpTQ0BAU0FQQVYxMkBBQVZKU0dsb2JhbERhdGFAMkBQQVYxMkBWSlNW
YWx1ZUAyQEBaCiAgICAgP2NoYXJhY3RlclN0YXJ0aW5nQXRAU3RyaW5nQFdURkBAUUJFSElAWgog
ICAgID9jaGFyYWN0ZXJzVG9Eb3VibGVAV1RGQEBZQU5QQl9XSVBBX05AWgogICAgID9jaGFyYWN0
ZXJzVG9Eb3VibGVAV1RGQEBZQU5QQkVJUEFfTkBaCkBAIC0xNDQsNyArMTI4LDYgQEAgRVhQT1JU
UwogICAgID9jaGFyYWN0ZXJzVG9VSW50U3RyaWN0QFdURkBAWUFJUEJFSVBBX05IQFoKICAgICA/
Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb25AU3RyaW5nQFdURkBAUUFFUEJfV1haCiAgICAg
P2NoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZUBJZGVudGlmaWVyQEpTQ0BAQ0FYUEFWRXhlY1N0
YXRlQDJAQFoKLSAgICA/Y2hlY2tDdXJyZW50SWRlbnRpZmllclRhYmxlQElkZW50aWZpZXJASlND
QEBDQVhQQVZKU0dsb2JhbERhdGFAMkBAWgogICAgID9jaGVja3N1bUBNRDVAV1RGQEBRQUVYQUFW
PyRWZWN0b3JARSQwQkFAVkNyYXNoT25PdmVyZmxvd0BXVEZAQEAyQEBaCiAgICAgP2NoZWNrU3lu
dGF4QEpTQ0BAWUFfTlBBVkV4ZWNTdGF0ZUAxQEFCVlNvdXJjZUNvZGVAMUBQQVZKU1ZhbHVlQDFA
QFoKICAgICA/Y2xhc3NOYW1lQEpTT2JqZWN0QEpTQ0BAU0E/QVZTdHJpbmdAV1RGQEBQQlYxMkBA
WgpAQCAtMTYzLDMwICsxNDYsMjIgQEAgRVhQT1JUUwogICAgID9jb25zdHJ1Y3ROdW1iZXJASlND
QEBZQVBBVk51bWJlck9iamVjdEAxQFBBVkV4ZWNTdGF0ZUAxQFBBVkpTR2xvYmFsT2JqZWN0QDFA
VkpTVmFsdWVAMUBAWgogICAgID9jb25zdHJ1Y3RTdHJpbmdASlNDQEBZQVBBVlN0cmluZ09iamVj
dEAxQFBBVkV4ZWNTdGF0ZUAxQFBBVkpTR2xvYmFsT2JqZWN0QDFAVkpTVmFsdWVAMUBAWgogICAg
ID9jb250YWluc09ubHlXaGl0ZXNwYWNlQFN0cmluZ0ltcGxAV1RGQEBRQUVfTlhaCi0gICAgP2Nv
bnZlcnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRleEBKU09iamVjdEBK
U0NAQEFBRVhBQVZKU0dsb2JhbERhdGFAMkBJVkpTVmFsdWVAMkBAWgotICAgID9jb252ZXJ0SW50
MzJUb0RvdWJsZU9yQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4QEpTT2JqZWN0QEpT
Q0BAQUFFWEFBVkpTR2xvYmFsRGF0YUAyQElWSlNWYWx1ZUAyQEBaCiAgICAgP2NvbnZlcnRMYXRp
bjFUb1VURjhAVW5pY29kZUBXVEZAQFlBP0FXNENvbnZlcnNpb25SZXN1bHRAMTJAUEFQQkVQQkVQ
QVBBRFBBREBaCiAgICAgP2NvbnZlcnRVVEYxNlRvVVRGOEBVbmljb2RlQFdURkBAWUE/QVc0Q29u
dmVyc2lvblJlc3VsdEAxMkBQQVBCX1dQQl9XUEFQQURQQURfTkBaCiAgICAgP2NvbnZlcnRVVEY4
VG9VVEYxNkBVbmljb2RlQFdURkBAWUE/QVc0Q29udmVyc2lvblJlc3VsdEAxMkBQQVBCRFBCRFBB
UEFfV1BBX1dQQV9OX05AWgogICAgID9jb3B5QmFja2luZ1N0b3JlQEpTT2JqZWN0QEpTQ0BAU0FY
UEFWSlNDZWxsQDJAQUFWQ29weVZpc2l0b3JAMkBAWgogICAgID9jcmVhdGVASlNGdW5jdGlvbkBK
U0NAQFNBUEFWMTJAUEFWRXhlY1N0YXRlQDJAUEFWSlNHbG9iYWxPYmplY3RAMkBIQUJWU3RyaW5n
QFdURkBAUDZJX0owQFpXNEludHJpbnNpY0AyQDNAWgotICAgID9jcmVhdGVASlNHbG9iYWxEYXRh
QEpTQ0BAU0E/QVY/JFBhc3NSZWZQdHJAVkpTR2xvYmFsRGF0YUBKU0NAQEBXVEZAQFc0SGVhcFR5
cGVAMkBAWgogICAgID9jcmVhdGVAT3BhcXVlSlNTdHJpbmdAQFNBP0FWPyRQYXNzUmVmUHRyQFVP
cGFxdWVKU1N0cmluZ0BAQFdURkBAQUJWU3RyaW5nQDNAQFoKLSAgICA/Y3JlYXRlQFJlZ0V4cEBK
U0NAQFNBUEFWMTJAQUFWSlNHbG9iYWxEYXRhQDJAQUJWU3RyaW5nQFdURkBAVzRSZWdFeHBGbGFn
c0AyQEBaCiAgICAgP2NyZWF0ZUBTdHJpbmdJbXBsQFdURkBAU0E/QVY/JFBhc3NSZWZQdHJAVlN0
cmluZ0ltcGxAV1RGQEBAMkBQQl9XSUBaCiAgICAgP2NyZWF0ZUBTdHJpbmdJbXBsQFdURkBAU0E/
QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBQQkVAWgogICAgID9jcmVhdGVAU3Ry
aW5nSW1wbEBXVEZAQFNBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQDJAUEJFSUBa
CiAgICAgP2NyZWF0ZThCaXRJZlBvc3NpYmxlQFN0cmluZ0ltcGxAV1RGQEBTQT9BVj8kUGFzc1Jl
ZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAyQFBCX1dJQFoKLSAgICA/Y3JlYXRlRW1wdHlTdHJpbmdA
U21hbGxTdHJpbmdzQEpTQ0BAQUFFWFBBVkpTR2xvYmFsRGF0YUAyQEBaCiAgICAgP2NyZWF0ZUVy
cm9yQEpTQ0BAWUFQQVZKU09iamVjdEAxQFBBVkV4ZWNTdGF0ZUAxQEFCVlN0cmluZ0BXVEZAQEBa
Ci0gICAgP2NyZWF0ZUxlYWtlZEBKU0dsb2JhbERhdGFASlNDQEBTQT9BVj8kUGFzc1JlZlB0ckBW
SlNHbG9iYWxEYXRhQEpTQ0BAQFdURkBAVzRIZWFwVHlwZUAyQEBaCiAgICAgP2NyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yQEpTQ0BAWUFQQVZKU09iamVjdEAxQFBBVkV4ZWNTdGF0ZUAxQEBa
CiAgICAgP2NyZWF0ZVJhbmdlRXJyb3JASlNDQEBZQVBBVkpTT2JqZWN0QDFAUEFWRXhlY1N0YXRl
QDFAQUJWU3RyaW5nQFdURkBAQFoKICAgICA/Y3JlYXRlUmVmZXJlbmNlRXJyb3JASlNDQEBZQVBB
VkpTT2JqZWN0QDFAUEFWRXhlY1N0YXRlQDFAQUJWU3RyaW5nQFdURkBAQFoKLSAgICA/Y3JlYXRl
U2luZ2xlQ2hhcmFjdGVyU3RyaW5nQFNtYWxsU3RyaW5nc0BKU0NAQEFBRVhQQVZKU0dsb2JhbERh
dGFAMkBFQFoKICAgICA/Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yQEpTQ0BAWUFQQVZKU09iamVj
dEAxQFBBVkV4ZWNTdGF0ZUAxQEBaCiAgICAgP2NyZWF0ZVN5bnRheEVycm9yQEpTQ0BAWUFQQVZK
U09iamVjdEAxQFBBVkV4ZWNTdGF0ZUAxQEFCVlN0cmluZ0BXVEZAQEBaCi0gICAgP2NyZWF0ZVRh
YmxlQEhhc2hUYWJsZUBKU0NAQEFCRVhQQVZKU0dsb2JhbERhdGFAMkBAWgogICAgID9jcmVhdGVU
aHJlYWRAV1RGQEBZQUlQNkFQQVhQQVhAWjBAWgogICAgID9jcmVhdGVUaHJlYWRAV1RGQEBZQUlQ
NkFQQVhQQVhAWjBQQkRAWgogICAgID9jcmVhdGVUaHJlYWRAV1RGQEBZQUlQNkFYUEFYQFowUEJE
QFoKQEAgLTIyMywyMCArMTk4LDE2IEBAIEVYUE9SVFMKICAgICA/ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4QEpTT2JqZWN0QEpTQ0BAU0FfTlBBVkpTQ2VsbEAyQFBBVkV4ZWNTdGF0ZUAyQElAWgogICAg
ID9kZWxldGVQcm9wZXJ0eUJ5SW5kZXhASlNQcm94eUBKU0NAQEtBX05QQVZKU0NlbGxAMkBQQVZF
eGVjU3RhdGVAMkBJQFoKICAgICA/ZGVsZXRlVGFibGVASGFzaFRhYmxlQEpTQ0BAUUJFWFhaCi0g
ICAgP2Rlc3BlY2lmeURpY3Rpb25hcnlGdW5jdGlvbkBTdHJ1Y3R1cmVASlNDQEBRQUVYQUFWSlNH
bG9iYWxEYXRhQDJAVlByb3BlcnR5TmFtZUAyQEBaCi0gICAgP2Rlc3BlY2lmeUZ1bmN0aW9uVHJh
bnNpdGlvbkBTdHJ1Y3R1cmVASlNDQEBTQVBBVjEyQEFBVkpTR2xvYmFsRGF0YUAyQFBBVjEyQFZQ
cm9wZXJ0eU5hbWVAMkBAWgogICAgID9kZXN0cm95QEpTQ2VsbEBKU0NAQEtBWFBBVjEyQEBaCiAg
ICAgP2Rlc3Ryb3lASlNHbG9iYWxPYmplY3RASlNDQEBTQVhQQVZKU0NlbGxAMkBAWgogICAgID9k
ZXN0cm95QE91dE9mTGluZUJpdHNAQml0VmVjdG9yQFdURkBAU0FYUEFWMTIzQEBaCiAgICAgP2Rl
dGFjaEBEZWJ1Z2dlckBKU0NAQFVBRVhQQVZKU0dsb2JhbE9iamVjdEAyQEBaCiAgICAgP2RldGFj
aFRocmVhZEBXVEZAQFlBWElAWgotICAgID9kaXNjYXJkQWxsQ29kZUBKU0dsb2JhbERhdGFASlND
QEBRQUVYWFoKICAgICA/ZGlzcGxheU5hbWVASlNGdW5jdGlvbkBKU0NAQFFBRT9BVlN0cmluZ0BX
VEZAQFBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP2R0b2FAV1RGQEBZQVhRQUROQUFfTkFBSEFBSUBa
CiAgICAgP2R1bXBASlNWYWx1ZUBKU0NAQFFCRVhBQVZQcmludFN0cmVhbUBXVEZAQEBaCiAgICAg
P2R1bXBBbGxPcHRpb25zQE9wdGlvbnNASlNDQEBTQVhQQVVfaW9idWZAQEBaCiAgICAgP2R1bXBD
YWxsRnJhbWVASW50ZXJwcmV0ZXJASlNDQEBRQUVYUEFWRXhlY1N0YXRlQDJAQFoKLSAgICA/ZHVt
cFNhbXBsZURhdGFASlNHbG9iYWxEYXRhQEpTQ0BAUUFFWFBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAg
P0VjbWFTY3JpcHRDb252ZXJ0ZXJARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJAZG91YmxlX2NvbnZl
cnNpb25AV1RGQEBTQUFCVjEyM0BYWgogICAgID9lbXB0eUBTdHJpbmdJbXBsQFdURkBAU0FQQVYx
MkBYWgogICAgID9lbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZUBQcm90b3R5cGVNYXBA
SlNDQEBRQUVQQVZTdHJ1Y3R1cmVAMkBQQVZKU09iamVjdEAyQElAWgpAQCAtMjgyLDExICsyNTMs
NyBAQCBFWFBPUlRTCiAgICAgP2ZpbmRAU3RyaW5nSW1wbEBXVEZAQFFBRUlQQVYxMkBJQFoKICAg
ICA/ZmluZElnbm9yaW5nQ2FzZUBTdHJpbmdJbXBsQFdURkBAUUFFSVBBVjEyQElAWgogICAgID9m
aW5kQWxsb2NhdG9yQFdlYWtTZXRASlNDQEBBQUVQQVVGcmVlQ2VsbEBXZWFrQmxvY2tAMkBYWgot
ICAgID9maW5pc2hDcmVhdGlvbkBCb29sZWFuT2JqZWN0QEpTQ0BASUFFWEFBVkpTR2xvYmFsRGF0
YUAyQEBaCi0gICAgP2ZpbmlzaENyZWF0aW9uQERhdGVJbnN0YW5jZUBKU0NAQElBRVhBQVZKU0ds
b2JhbERhdGFAMkBOQFoKLSAgICA/ZmluaXNoQ3JlYXRpb25ASW50ZXJuYWxGdW5jdGlvbkBKU0NA
QElBRVhBQVZKU0dsb2JhbERhdGFAMkBBQlZTdHJpbmdAV1RGQEBAWgogICAgID9maW5pc2hDcmVh
dGlvbkBSZWdFeHBPYmplY3RASlNDQEBJQUVYUEFWSlNHbG9iYWxPYmplY3RAMkBAWgotICAgID9m
aW5pc2hDcmVhdGlvbkBTdHJpbmdPYmplY3RASlNDQEBJQUVYQUFWSlNHbG9iYWxEYXRhQDJAUEFW
SlNTdHJpbmdAMkBAWgogICAgID9maXJlQFdhdGNoZG9nQEpTQ0BAUUFFWFhaCiAgICAgP2ZvY3Vz
QFByb2ZpbGVASlNDQEBRQUVYUEJWUHJvZmlsZU5vZGVAMkBAWgogICAgID9mb2xkQ2FzZUBTdHJp
bmdAV1RGQEBRQkU/QVYxMkBYWgpAQCAtMjk5LDE0ICsyNjYsMTIgQEAgRVhQT1JUUwogICAgID9m
cm9tVVRGOEludGVybmFsQEF0b21pY1N0cmluZ0BXVEZAQENBP0FWMTJAUEJEMEBaCiAgICAgP2Zy
b21VVEY4V2l0aExhdGluMUZhbGxiYWNrQFN0cmluZ0BXVEZAQFNBP0FWMTJAUEJFSUBaCiAgICAg
P2Z1bmN0aW9uR2V0dGVyQFByb3BlcnR5U2xvdEBKU0NAQEFCRT9BVkpTVmFsdWVAMkBQQVZFeGVj
U3RhdGVAMkBAWgotICAgID9nZXRAU3RydWN0dXJlQEpTQ0BAUUFFSEFBVkpTR2xvYmFsRGF0YUAy
QFZQcm9wZXJ0eU5hbWVAMkBBQUlBQVBBVkpTQ2VsbEAyQEBaCiAgICAgP2dldENhbGN1bGF0ZWRE
aXNwbGF5TmFtZUBKU0NAQFlBP0FWU3RyaW5nQFdURkBAUEFWRXhlY1N0YXRlQDFAUEFWSlNPYmpl
Y3RAMUBAWgogICAgID9nZXRDYWxsYWJsZU9iamVjdFNsb3dASlNDQEBZQVBBVkpTQ2VsbEAxQFBB
VjIxQEBaCiAgICAgP2dldENhbGxEYXRhQEpTQ2VsbEBKU0NAQFNBP0FXNENhbGxUeXBlQDJAUEFW
MTJAQUFUQ2FsbERhdGFAMkBAWgogICAgID9nZXRDb25zdHJ1Y3REYXRhQEpTQ2VsbEBKU0NAQFNB
P0FXNENvbnN0cnVjdFR5cGVAMkBQQVYxMkBBQVRDb25zdHJ1Y3REYXRhQDJAQFoKICAgICA/Z2V0
RGF0YTE2U2xvd0Nhc2VAU3RyaW5nSW1wbEBXVEZAQEFCRVBCX1dYWgogICAgID9nZXRJREBTb3Vy
Y2VQcm92aWRlckBKU0NAQEFBRVhYWgotICAgID9nZXRTdGFja1RyYWNlQEludGVycHJldGVyQEpT
Q0BAU0FYUEFWSlNHbG9iYWxEYXRhQDJAQUFWPyRWZWN0b3JAVVN0YWNrRnJhbWVASlNDQEAkMEFA
VkNyYXNoT25PdmVyZmxvd0BXVEZAQEBXVEZAQElAWgogICAgID9nZXRPYmplY3RASlNDZWxsQEpT
Q0BAUUFFUEFWSlNPYmplY3RAMkBYWgogICAgID9nZXRPYmplY3RUeXBlQE1lbW9yeUluc3RydW1l
bnRhdGlvbkBXVEZAQENBUEJEUEFWTWVtb3J5T2JqZWN0SW5mb0AyQEBaCiAgICAgP2dldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lc0BKU09iamVjdEBKU0NAQFNBWFBBVjEyQFBBVkV4ZWNTdGF0ZUAy
QEFBVlByb3BlcnR5TmFtZUFycmF5QDJAVzRFbnVtZXJhdGlvbk1vZGVAMkBAWgpAQCAtMzMwLDcg
KzI5NSw2IEBAIEVYUE9SVFMKICAgICA/Z2xvYmFsRXhlY0BKU0dsb2JhbE9iamVjdEBKU0NAQFFB
RVBBVkV4ZWNTdGF0ZUAyQFhaCiAgICAgP2dsb2JhbE9iamVjdENvdW50QEhlYXBASlNDQEBRQUVJ
WFoKICAgICA/Z3Jvd0BIYW5kbGVTZXRASlNDQEBBQUVYWFoKLSAgICA/Z3Jvd091dE9mTGluZVN0
b3JhZ2VASlNPYmplY3RASlNDQEBRQUVQQVZCdXR0ZXJmbHlAMkBBQVZKU0dsb2JhbERhdGFAMkBJ
SUBaCiAgICAgP2hhc2hTbG93Q2FzZUBTdHJpbmdJbXBsQFdURkBAQUJFSVhaCiAgICAgP2hhc1By
b3BlcnR5QEpTT2JqZWN0QEpTQ0BAUUJFX05QQVZFeGVjU3RhdGVAMkBJQFoKICAgICA/aGFzUHJv
cGVydHlASlNPYmplY3RASlNDQEBRQkVfTlBBVkV4ZWNTdGF0ZUAyQFZQcm9wZXJ0eU5hbWVAMkBA
WgpAQCAtMzY4LDggKzMzMiw2IEBAIEVYUE9SVFMKICAgICA/bG93ZXJAU3RyaW5nSW1wbEBXVEZA
QFFBRT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAyQFhaCiAgICAgP2xpbmVAU3Rh
Y2tGcmFtZUBKU0NAQFFBRUlYWgogICAgID9tYWtlOEJpdEZyb20xNkJpdFNvdXJjZUBTdHJpbmdA
V1RGQEBTQT9BVjEyQFBCX1dJQFoKLSAgICA/bWF0Y2hAUmVnRXhwQEpTQ0BAUUFFSEFBVkpTR2xv
YmFsRGF0YUAyQEFCVlN0cmluZ0BXVEZAQElBQVY/JFZlY3RvckBIJDBDQUBWQ3Jhc2hPbk92ZXJm
bG93QFdURkBAQDVAQFoKLSAgICA/bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcEBTdHJ1Y3R1cmVASlND
QEBBQUVYQUFWSlNHbG9iYWxEYXRhQDJAQFoKICAgICA/bW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lQFdURkBAWUFOWFoKICAgICA/bW9udGhGcm9tRGF5SW5ZZWFyQFdURkBAWUFISF9OQFoKICAg
ICA/bXNUb1llYXJAV1RGQEBZQUhOQFoKQEAgLTQxOCwxNSArMzgwLDEyIEBAIEVYUE9SVFMKICAg
ICA/cHV0RGlyZWN0VmlydHVhbEBKU09iamVjdEBKU0NAQFNBWFBBVjEyQFBBVkV4ZWNTdGF0ZUAy
QFZQcm9wZXJ0eU5hbWVAMkBWSlNWYWx1ZUAyQElAWgogICAgID9wdXREaXJlY3RWaXJ0dWFsQEpT
UHJveHlASlNDQEBLQVhQQVZKU09iamVjdEAyQFBBVkV4ZWNTdGF0ZUAyQFZQcm9wZXJ0eU5hbWVA
MkBWSlNWYWx1ZUAyQElAWgogICAgID9yYW5kb21OdW1iZXJAV1RGQEBZQU5YWgotICAgID9yZWNv
bXBpbGVBbGxKU0Z1bmN0aW9uc0BEZWJ1Z2dlckBKU0NAQFFBRVhQQVZKU0dsb2JhbERhdGFAMkBA
WgogICAgID9yZWdFeHBGbGFnc0BKU0NAQFlBP0FXNFJlZ0V4cEZsYWdzQDFAQUJWU3RyaW5nQFdU
RkBAQFoKICAgICA/cmVpZnlTdHJpbmdAU3RyaW5nQnVpbGRlckBXVEZAQEFCRVhYWgogICAgID9y
ZWxlYXNlRGVjb21taXR0ZWRAT1NBbGxvY2F0b3JAV1RGQEBTQVhQQVhJQFoKLSAgICA/cmVsZWFz
ZUV4ZWN1dGFibGVNZW1vcnlASlNHbG9iYWxEYXRhQEpTQ0BAUUFFWFhaCiAgICAgP3JlbW92ZUBT
dHJpbmdAV1RGQEBRQUVYSUhAWgogICAgID9yZW1vdmVCbG9ja0BNYXJrZWRBbGxvY2F0b3JASlND
QEBRQUVYUEFWTWFya2VkQmxvY2tAMkBAWgogICAgID9yZW1vdmVDaGFyYWN0ZXJzQFN0cmluZ0BX
VEZAQFFCRT9BVjEyQFA2QV9OX1dAWkBaCi0gICAgP3JlbW92ZURpcmVjdEBKU09iamVjdEBKU0NA
QFFBRV9OQUFWSlNHbG9iYWxEYXRhQDJAVlByb3BlcnR5TmFtZUAyQEBaCiAgICAgP3JlcGxhY2VA
U3RyaW5nSW1wbEBXVEZAQFFBRT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAyQF9X
MEBaCiAgICAgP3JlcGxhY2VAU3RyaW5nSW1wbEBXVEZAQFFBRT9BVj8kUGFzc1JlZlB0ckBWU3Ry
aW5nSW1wbEBXVEZAQEAyQF9XUEFWMTJAQFoKICAgICA/cmVwbGFjZUBTdHJpbmdJbXBsQFdURkBA
UUFFP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQDJAX1dQQkVJQFoKQEAgLTQ0MCw3
ICszOTksNiBAQCBFWFBPUlRTCiAgICAgP3Jlc2VydmVBbmRDb21taXRAT1NBbGxvY2F0b3JAV1RG
QEBTQVBBWElXNFVzYWdlQDEyQF9OMTFAWgogICAgID9yZXNlcnZlQ2FwYWNpdHlAU3RyaW5nQnVp
bGRlckBXVEZAQFFBRVhJQFoKICAgICA/cmVzZXRAUGFyc2VyQXJlbmFASlNDQEBRQUVYWFoKLSAg
ICA/cmVzZXREYXRlQ2FjaGVASlNHbG9iYWxEYXRhQEpTQ0BAUUFFWFhaCiAgICAgP3Jlc2l6ZUBT
dHJpbmdCdWlsZGVyQFdURkBAUUFFWElAWgogICAgID9yZXNpemVPdXRPZkxpbmVAQml0VmVjdG9y
QFdURkBAQUFFWElAWgogICAgID9yZXNvbHZlUm9wZUBKU1JvcGVTdHJpbmdASlNDQEBBQkVYUEFW
RXhlY1N0YXRlQDJAQFoKQEAgLTQ1NywxNCArNDE1LDEwIEBAIEVYUE9SVFMKICAgICA/c2V0RW51
bWVyYWJsZUBQcm9wZXJ0eURlc2NyaXB0b3JASlNDQEBRQUVYX05AWgogICAgID9zZXRHYXJiYWdl
Q29sbGVjdGlvblRpbWVyRW5hYmxlZEBIZWFwQEpTQ0BAUUFFWF9OQFoKICAgICA/c2V0R2V0dGVy
QFByb3BlcnR5RGVzY3JpcHRvckBKU0NAQFFBRVhWSlNWYWx1ZUAyQEBaCi0gICAgP3NldEdsb2Jh
bFRoaXNASlNHbG9iYWxPYmplY3RASlNDQEBJQUVYQUFWSlNHbG9iYWxEYXRhQDJAUEFWSlNPYmpl
Y3RAMkBAWgotICAgID9zZXRJbmRleFF1aWNrbHlUb1VuZGVjaWRlZEBKU09iamVjdEBKU0NAQEFB
RVhBQVZKU0dsb2JhbERhdGFAMkBJVkpTVmFsdWVAMkBAWgogICAgID9zZXRNYWluVGhyZWFkQ2Fs
bGJhY2tzUGF1c2VkQFdURkBAWUFYX05AWgogICAgID9zZXRPcHRpb25AT3B0aW9uc0BKU0NAQFNB
X05QQkRAWgogICAgID9zZXRPcmRlckxvd2VyRmlyc3RAQ29sbGF0b3JAV1RGQEBRQUVYX05AWgot
ICAgID9zZXRQcm90b3R5cGVASlNPYmplY3RASlNDQEBRQUVYQUFWSlNHbG9iYWxEYXRhQDJAVkpT
VmFsdWVAMkBAWgogICAgID9zZXRTZXR0ZXJAUHJvcGVydHlEZXNjcmlwdG9yQEpTQ0BAUUFFWFZK
U1ZhbHVlQDJAQFoKLSAgICA/c2V0VGFyZ2V0QEpTUHJveHlASlNDQEBJQUVYQUFWSlNHbG9iYWxE
YXRhQDJAUEFWSlNHbG9iYWxPYmplY3RAMkBAWgogICAgID9zZXR0ZXJAUHJvcGVydHlEZXNjcmlw
dG9yQEpTQ0BAUUJFP0FWSlNWYWx1ZUAyQFhaCiAgICAgP3NldFRvQ3VycmVudExvY2FsVGltZUBH
cmVnb3JpYW5EYXRlVGltZUBXVEZAQFFBRVhYWgogICAgID9zZXRVbmRlZmluZWRAUHJvcGVydHlE
ZXNjcmlwdG9yQEpTQ0BAUUFFWFhaCkBAIC00ODUsMTEgKzQzOSw5IEBAIEVYUE9SVFMKICAgICA/
c3BsaXRAU3RyaW5nQFdURkBAUUJFWF9XX05BQVY/JFZlY3RvckBWU3RyaW5nQFdURkBAJDBBQFZD
cmFzaE9uT3ZlcmZsb3dAMkBAMkBAWgogICAgID9zcGxpdEBTdHJpbmdAV1RGQEBRQkVYQUJWMTJA
X05BQVY/JFZlY3RvckBWU3RyaW5nQFdURkBAJDBBQFZDcmFzaE9uT3ZlcmZsb3dAMkBAMkBAWgog
ICAgID9zdGFydFByb2ZpbGluZ0BMZWdhY3lQcm9maWxlckBKU0NAQFFBRVhQQVZFeGVjU3RhdGVA
MkBBQlZTdHJpbmdAV1RGQEBAWgotICAgID9zdGFydFNhbXBsaW5nQEpTR2xvYmFsRGF0YUBKU0NA
QFFBRVhYWgogICAgID9zdGFydHNXaXRoQFN0cmluZ0ltcGxAV1RGQEBRQkVfTl9XQFoKICAgICA/
c3RhcnRzV2l0aEBTdHJpbmdJbXBsQFdURkBAUUJFX05QQkRJX05AWgogICAgID9zdG9wUHJvZmls
aW5nQExlZ2FjeVByb2ZpbGVyQEpTQ0BAUUFFP0FWPyRQYXNzUmVmUHRyQFZQcm9maWxlQEpTQ0BA
QFdURkBAUEFWRXhlY1N0YXRlQDJAQUJWU3RyaW5nQDRAQFoKLSAgICA/c3RvcFNhbXBsaW5nQEpT
R2xvYmFsRGF0YUBKU0NAQFFBRVhYWgogICAgID9zdHJpbmdAT3BhcXVlSlNTdHJpbmdAQFFCRT9B
VlN0cmluZ0BXVEZAQFhaCiAgICAgP1N0cmluZ1RvRG91YmxlQFN0cmluZ1RvRG91YmxlQ29udmVy
dGVyQGRvdWJsZV9jb252ZXJzaW9uQFdURkBAU0FOUEJESVBBSUBaCiAgICAgP3N0cmlwV2hpdGVT
cGFjZUBTdHJpbmdAV1RGQEBRQkU/QVYxMkBYWgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0zMTMsNyArMzEzLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSlNDSlNWYWx1ZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxKU0RhdGVNYXRoLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXEpTRnVuY3Rpb24uY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSlNHbG9iYWxEYXRhLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXFZNLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2xv
YmFsT2JqZWN0LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpT
R2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXEpTTG9jay5jcHAiIC8+DQpAQCAtNjgxLDcgKzY4MSw3IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiIC8+DQogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0V4cG9ydE1hY3Jvcy5oIiAvPg0KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNGdW5jdGlvbi5oIiAvPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNHbG9iYWxEYXRhLmgiIC8+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxWTS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNHbG9iYWxPYmplY3QuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgiIC8+DQogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0xvY2suaCIgLz4NCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAx
NDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTU1NSw3ICs1
NTUsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0Z1bmN0aW9uLmNw
cCI+DQogICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQogICAgIDwvQ2xDb21waWxlPg0K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNHbG9iYWxEYXRhLmNwcCI+DQor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxWTS5jcHAiPg0KICAgICAgIDxGaWx0
ZXI+cnVudGltZTwvRmlsdGVyPg0KICAgICA8L0NsQ29tcGlsZT4NCiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEpTR2xvYmFsT2JqZWN0LmNwcCI+DQpAQCAtMTU4Niw3ICsxNTg2
LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNGdW5jdGlvbi5oIj4N
CiAgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCiAgICAgPC9DbEluY2x1ZGU+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0dsb2JhbERhdGEuaCI+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxWTS5oIj4NCiAgICAgICA8RmlsdGVyPnJ1bnRp
bWU8L0ZpbHRlcj4NCiAgICAgPC9DbEluY2x1ZGU+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxKU0dsb2JhbE9iamVjdC5oIj4NCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZUV4cG9ydEdlbmVyYXRvci9K
YXZhU2NyaXB0Q29yZUV4cG9ydHMuZGVmLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlRXhwb3J0R2VuZXJh
dG9yL0phdmFTY3JpcHRDb3JlRXhwb3J0cy5kZWYuaW4JKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
RXhwb3J0R2VuZXJhdG9yL0phdmFTY3JpcHRDb3JlRXhwb3J0cy5kZWYuaW4JKHdvcmtpbmcgY29w
eSkKQEAgLTEsMjIgKzEsMTUgQEAKIEVYUE9SVFMKIAogICAgID8/MEFycmF5QnVmZmVyVmlld0BX
VEZAQElBRUBWPyRQYXNzUmVmUHRyQFZBcnJheUJ1ZmZlckBXVEZAQEAxQElAWgotICAgID8/MEJv
b2xlYW5PYmplY3RASlNDQEBJQUVAQUFWSlNHbG9iYWxEYXRhQDFAUEFWU3RydWN0dXJlQDFAQFoK
ICAgICA/PzBDb2xsYXRvckBXVEZAQFFBRUBQQkRAWgogICAgID8/MENTdHJpbmdAV1RGQEBRQUVA
UEJEQFoKICAgICA/PzBDU3RyaW5nQFdURkBAUUFFQFBCRElAWgotICAgID8/MERhdGFiYXNlQFBy
b2ZpbGVyQEpTQ0BAUUFFQEFBVkpTR2xvYmFsRGF0YUAyQEBaCiAgICAgPz8wRGF0ZUluc3RhbmNl
QEpTQ0BASUFFQFBBVkV4ZWNTdGF0ZUAxQFBBVlN0cnVjdHVyZUAxQEBaCiAgICAgPz8wRGVmYXVs
dEdDQWN0aXZpdHlDYWxsYmFja0BKU0NAQFFBRUBQQVZIZWFwQDFAQFoKICAgICA/PzBEcm9wQWxs
TG9ja3NASlNMb2NrQEpTQ0BAUUFFQFBBVkV4ZWNTdGF0ZUAyQEBaCi0gICAgPz8wRHJvcEFsbExv
Y2tzQEpTTG9ja0BKU0NAQFFBRUBQQVZKU0dsb2JhbERhdGFAMkBAWgotICAgID8/MER5bmFtaWNH
bG9iYWxPYmplY3RTY29wZUBKU0NAQFFBRUBBQVZKU0dsb2JhbERhdGFAMUBQQVZKU0dsb2JhbE9i
amVjdEAxQEBaIAogICAgID8/MEVycm9ySGFuZGxpbmdNb2RlQEludGVycHJldGVyQEpTQ0BAUUFF
QFBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgPz8wSW50ZXJuYWxGdW5jdGlvbkBKU0NAQElBRUBQQVZK
U0dsb2JhbE9iamVjdEAxQFBBVlN0cnVjdHVyZUAxQEBaCi0gICAgPz8wSlNHbG9iYWxPYmplY3RA
SlNDQEBJQUVAQUFWSlNHbG9iYWxEYXRhQDFAUEFWU3RydWN0dXJlQDFAUEJVR2xvYmFsT2JqZWN0
TWV0aG9kVGFibGVAMUBAWgotICAgID8/MEpTTG9ja0hvbGRlckBKU0NAQFFBRUBBQVZKU0dsb2Jh
bERhdGFAMUBAWgogICAgID8/MEpTTG9ja0hvbGRlckBKU0NAQFFBRUBQQVZFeGVjU3RhdGVAMUBA
WgotICAgID8/MEpTTG9ja0hvbGRlckBKU0NAQFFBRUBQQVZKU0dsb2JhbERhdGFAMUBAWgogICAg
ID8/ME1ENUBXVEZAQFFBRUBYWgogICAgID8/ME1lZGlhVGltZUBXVEZAQFFBRUBfSkhJQFogCiAg
ICAgPz8wTWVtb3J5SW5zdHJ1bWVudGF0aW9uQFdURkBAUUFFQFBBVk1lbW9yeUluc3RydW1lbnRh
dGlvbkNsaWVudEAxQEBaCkBAIC0zMywyMSArMjYsMTcgQEAgRVhQT1JUUwogICAgID8/MFN0cmlu
Z0BXVEZAQFFBRUBQQkRJQFoKICAgICA/PzBTdHJpbmdAV1RGQEBRQUVAUEJFSUBaCiAgICAgPz8w
U3RyaW5nQFdURkBAUUFFQFZBU0NJSUxpdGVyYWxAMUBAWgotICAgID8/MFN0cmluZ09iamVjdEBK
U0NAQElBRUBBQVZKU0dsb2JhbERhdGFAMUBQQVZTdHJ1Y3R1cmVAMUBAWgogICAgID8/MFN0cmlu
Z1ByaW50U3RyZWFtQFdURkBAUUFFQFhaCi0gICAgPz8wU3RydWN0dXJlQEpTQ0BAQUFFQEFBVkpT
R2xvYmFsRGF0YUAxQFBBVkpTR2xvYmFsT2JqZWN0QDFAVkpTVmFsdWVAMUBBQlZUeXBlSW5mb0Ax
QFBCVUNsYXNzSW5mb0AxQEVJQFoKICAgICA/PzBUaHJlYWRDb25kaXRpb25AV1RGQEBRQUVAWFoK
ICAgICA/PzBXcmFwcGVyQmFzZUBNZW1vcnlJbnN0cnVtZW50YXRpb25AV1RGQEBRQUVAUEJEUEJY
QFoKICAgICA/PzBXVEZUaHJlYWREYXRhQFdURkBAUUFFQFhaCiAgICAgPz8wWWFyclBhdHRlcm5A
WWFyckBKU0NAQFFBRUBBQlZTdHJpbmdAV1RGQEBfTjFQQVBCREBaCiAgICAgPz8xQXJyYXlCdWZm
ZXJWaWV3QFdURkBAVUFFQFhaCi0gICAgPz8xQ2xpZW50RGF0YUBKU0dsb2JhbERhdGFASlNDQEBV
QUVAWFoKICAgICA/PzFDb2xsYXRvckBXVEZAQFFBRUBYWgogICAgID8/MURhdGFiYXNlQFByb2Zp
bGVyQEpTQ0BAUUFFQFhaCiAgICAgPz8xRGVidWdnZXJASlNDQEBVQUVAWFoKICAgICA/PzFEcm9w
QWxsTG9ja3NASlNMb2NrQEpTQ0BAUUFFQFhaCiAgICAgPz8xRXJyb3JIYW5kbGluZ01vZGVASW50
ZXJwcmV0ZXJASlNDQEBRQUVAWFoKLSAgICA/PzFKU0dsb2JhbERhdGFASlNDQEBRQUVAWFoKICAg
ICA/PzFKU0dsb2JhbE9iamVjdEBKU0NAQFFBRUBYWgogICAgID8/MUpTTG9ja0hvbGRlckBKU0NA
QFFBRUBYWgogICAgID8/MU1lZGlhVGltZUBXVEZAQFFBRUBYWiAKQEAgLTc4LDcgKzY3LDYgQEAg
RVhQT1JUUwogICAgID9hZGRAQXRvbWljU3RyaW5nQFdURkBAQ0E/QVY/JFBhc3NSZWZQdHJAVlN0
cmluZ0ltcGxAV1RGQEBAMkBQQkRAWgogICAgID9hZGRAQXRvbWljU3RyaW5nQFdURkBAQ0E/QVY/
JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBQQkVAWgogICAgID9hZGRAQXRvbWljU3Ry
aW5nQFdURkBAQ0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBQQkVJQFoKLSAg
ICA/YWRkQElkZW50aWZpZXJASlNDQEBDQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZA
QEBXVEZAQFBBVkpTR2xvYmFsRGF0YUAyQFBBVlN0cmluZ0ltcGxANEBAWgogICAgID9hZGRASWRl
bnRpZmllckBKU0NAQFNBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQFdURkBAUEFW
RXhlY1N0YXRlQDJAUEJEQFoKICAgICA/YWRkQFByb3BlcnR5TmFtZUFycmF5QEpTQ0BAUUFFWFBB
VlN0cmluZ0ltcGxAV1RGQEBAWgogICAgID9hZGRCeXRlc0BNRDVAV1RGQEBRQUVYUEJFSUBaCkBA
IC04NiwxNCArNzQsMTEgQEAgRVhQT1JUUwogICAgID9hZGRDdXJyZW50VGhyZWFkQE1hY2hpbmVU
aHJlYWRzQEpTQ0BAUUFFWFhaCiAgICAgP2FkZEZpbmFsaXplckBIZWFwQEpTQ0BAUUFFWFBBVkpT
Q2VsbEAyQFA2QVgwQFpAWgogICAgID9hZGRGcm9tTGl0ZXJhbERhdGFAQXRvbWljU3RyaW5nQFdU
RkBAQ0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBQQkRJQFoKLSAgICA/YWRk
UHJvcGVydHlUcmFuc2l0aW9uQFN0cnVjdHVyZUBKU0NAQFNBUEFWMTJAQUFWSlNHbG9iYWxEYXRh
QDJAUEFWMTJAVlByb3BlcnR5TmFtZUAyQElQQVZKU0NlbGxAMkBBQUhAWgogICAgID9hZGRQcm9w
ZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQFN0cnVjdHVyZUBKU0NAQFNBUEFWMTJA
UEFWMTJAVlByb3BlcnR5TmFtZUAyQElQQVZKU0NlbGxAMkBBQUhAWgotICAgID9hZGRQcm9wZXJ0
eVdpdGhvdXRUcmFuc2l0aW9uQFN0cnVjdHVyZUBKU0NAQFFBRUhBQVZKU0dsb2JhbERhdGFAMkBW
UHJvcGVydHlOYW1lQDJASVBBVkpTQ2VsbEAyQEBaCiAgICAgP2FkZFByaXZhdGVCdWZmZXJATWVt
b3J5Q2xhc3NJbmZvQFdURkBAUUFFWElQQkQwMEBaCiAgICAgP2FkZFJhd0J1ZmZlckBNZW1vcnlD
bGFzc0luZm9AV1RGQEBRQUVYUEJYSVBCRDFAWgogICAgID9hZGRTbG93Q2FzZUBBdG9taWNTdHJp
bmdAV1RGQEBDQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAyQFBBVlN0cmluZ0lt
cGxAMkBAWgogICAgID9hZGRTbG93Q2FzZUBJZGVudGlmaWVyQEpTQ0BAQ0E/QVY/JFBhc3NSZWZQ
dHJAVlN0cmluZ0ltcGxAV1RGQEBAV1RGQEBQQVZFeGVjU3RhdGVAMkBQQVZTdHJpbmdJbXBsQDRA
QFoKLSAgICA/YWRkU2xvd0Nhc2VASWRlbnRpZmllckBKU0NAQENBP0FWPyRQYXNzUmVmUHRyQFZT
dHJpbmdJbXBsQFdURkBAQFdURkBAUEFWSlNHbG9iYWxEYXRhQDJAUEFWU3RyaW5nSW1wbEA0QEBa
CiAgICAgP2FkZFN0YXRpY0dsb2JhbHNASlNHbG9iYWxPYmplY3RASlNDQEBJQUVYUEFVR2xvYmFs
UHJvcGVydHlJbmZvQDEyQEhAWgogICAgID9hZG9wdEBTdHJpbmdJbXBsQFdURkBAU0E/QVY/JFBh
c3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBBQVY/JFN0cmluZ0J1ZmZlckBfV0AyQEBaCiAg
ICAgP2Fkb3B0QFN0cmluZ0ltcGxAV1RGQEBTQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBX
VEZAQEAyQEFBVj8kU3RyaW5nQnVmZmVyQEVAMkBAWgpAQCAtMTMyLDcgKzExNyw2IEBAIEVYUE9S
VFMKICAgICA/Y2FuY2VsQ2FsbE9uTWFpblRocmVhZEBXVEZAQFlBWFA2QVhQQVhAWjBAWgogICAg
ID9jYW5TaHJpbmtAU3RyaW5nQnVpbGRlckBXVEZAQFFCRV9OWFoKICAgICA/Y2FwYWNpdHlASGVh
cEBKU0NAQFFBRUlYWgotICAgID9jaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uQFN0cnVjdHVyZUBK
U0NAQFNBUEFWMTJAQUFWSlNHbG9iYWxEYXRhQDJAUEFWMTJAVkpTVmFsdWVAMkBAWgogICAgID9j
aGFyYWN0ZXJTdGFydGluZ0F0QFN0cmluZ0BXVEZAQFFCRUhJQFoKICAgICA/Y2hhcmFjdGVyc1Rv
RG91YmxlQFdURkBAWUFOUEJfV0lQQV9OQFoKICAgICA/Y2hhcmFjdGVyc1RvRG91YmxlQFdURkBA
WUFOUEJFSVBBX05AWgpAQCAtMTQ0LDcgKzEyOCw2IEBAIEVYUE9SVFMKICAgICA/Y2hhcmFjdGVy
c1RvVUludFN0cmljdEBXVEZAQFlBSVBCRUlQQV9OSEBaCiAgICAgP2NoYXJhY3RlcnNXaXRoTnVs
bFRlcm1pbmF0aW9uQFN0cmluZ0BXVEZAQFFBRVBCX1dYWgogICAgID9jaGVja0N1cnJlbnRJZGVu
dGlmaWVyVGFibGVASWRlbnRpZmllckBKU0NAQENBWFBBVkV4ZWNTdGF0ZUAyQEBaCi0gICAgP2No
ZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZUBJZGVudGlmaWVyQEpTQ0BAQ0FYUEFWSlNHbG9iYWxE
YXRhQDJAQFoKICAgICA/Y2hlY2tzdW1ATUQ1QFdURkBAUUFFWEFBVj8kVmVjdG9yQEUkMEJBQFZD
cmFzaE9uT3ZlcmZsb3dAV1RGQEBAMkBAWgogICAgID9jaGVja1N5bnRheEBKU0NAQFlBX05QQVZF
eGVjU3RhdGVAMUBBQlZTb3VyY2VDb2RlQDFAUEFWSlNWYWx1ZUAxQEBaCiAgICAgP2NsYXNzTmFt
ZUBKU09iamVjdEBKU0NAQFNBP0FWU3RyaW5nQFdURkBAUEJWMTJAQFoKQEAgLTE2MywzMCArMTQ2
LDIyIEBAIEVYUE9SVFMKICAgICA/Y29uc3RydWN0TnVtYmVyQEpTQ0BAWUFQQVZOdW1iZXJPYmpl
Y3RAMUBQQVZFeGVjU3RhdGVAMUBQQVZKU0dsb2JhbE9iamVjdEAxQFZKU1ZhbHVlQDFAQFoKICAg
ICA/Y29uc3RydWN0U3RyaW5nQEpTQ0BAWUFQQVZTdHJpbmdPYmplY3RAMUBQQVZFeGVjU3RhdGVA
MUBQQVZKU0dsb2JhbE9iamVjdEAxQFZKU1ZhbHVlQDFAQFoKICAgICA/Y29udGFpbnNPbmx5V2hp
dGVzcGFjZUBTdHJpbmdJbXBsQFdURkBAUUFFX05YWgotICAgID9jb252ZXJ0RG91YmxlVG9Db250
aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXhASlNPYmplY3RASlNDQEBBQUVYQUFWSlNHbG9i
YWxEYXRhQDJASVZKU1ZhbHVlQDJAQFoKLSAgICA/Y29udmVydEludDMyVG9Eb3VibGVPckNvbnRp
Z3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRleEBKU09iamVjdEBKU0NAQEFBRVhBQVZKU0dsb2Jh
bERhdGFAMkBJVkpTVmFsdWVAMkBAWgogICAgID9jb252ZXJ0TGF0aW4xVG9VVEY4QFVuaWNvZGVA
V1RGQEBZQT9BVzRDb252ZXJzaW9uUmVzdWx0QDEyQFBBUEJFUEJFUEFQQURQQURAWgogICAgID9j
b252ZXJ0VVRGMTZUb1VURjhAVW5pY29kZUBXVEZAQFlBP0FXNENvbnZlcnNpb25SZXN1bHRAMTJA
UEFQQl9XUEJfV1BBUEFEUEFEX05AWgogICAgID9jb252ZXJ0VVRGOFRvVVRGMTZAVW5pY29kZUBX
VEZAQFlBP0FXNENvbnZlcnNpb25SZXN1bHRAMTJAUEFQQkRQQkRQQVBBX1dQQV9XUEFfTl9OQFoK
ICAgICA/Y29weUJhY2tpbmdTdG9yZUBKU09iamVjdEBKU0NAQFNBWFBBVkpTQ2VsbEAyQEFBVkNv
cHlWaXNpdG9yQDJAQFoKICAgICA/Y3JlYXRlQEpTRnVuY3Rpb25ASlNDQEBTQVBBVjEyQFBBVkV4
ZWNTdGF0ZUAyQFBBVkpTR2xvYmFsT2JqZWN0QDJASEFCVlN0cmluZ0BXVEZAQFA2SV9KMEBaVzRJ
bnRyaW5zaWNAMkAzQFoKLSAgICA/Y3JlYXRlQEpTR2xvYmFsRGF0YUBKU0NAQFNBP0FWPyRQYXNz
UmVmUHRyQFZKU0dsb2JhbERhdGFASlNDQEBAV1RGQEBXNEhlYXBUeXBlQDJAQFoKICAgICA/Y3Jl
YXRlQE9wYXF1ZUpTU3RyaW5nQEBTQT9BVj8kUGFzc1JlZlB0ckBVT3BhcXVlSlNTdHJpbmdAQEBX
VEZAQEFCVlN0cmluZ0AzQEBaCi0gICAgP2NyZWF0ZUBSZWdFeHBASlNDQEBTQVBBVjEyQEFBVkpT
R2xvYmFsRGF0YUAyQEFCVlN0cmluZ0BXVEZAQFc0UmVnRXhwRmxhZ3NAMkBAWgogICAgID9jcmVh
dGVAU3RyaW5nSW1wbEBXVEZAQFNBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQDJA
UEJfV0lAWgogICAgID9jcmVhdGVAU3RyaW5nSW1wbEBXVEZAQFNBP0FWPyRQYXNzUmVmUHRyQFZT
dHJpbmdJbXBsQFdURkBAQDJAUEJFQFoKICAgICA/Y3JlYXRlQFN0cmluZ0ltcGxAV1RGQEBTQT9B
Vj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAyQFBCRUlAWgogICAgID9jcmVhdGU4Qml0
SWZQb3NzaWJsZUBTdHJpbmdJbXBsQFdURkBAU0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxA
V1RGQEBAMkBQQl9XSUBaCi0gICAgP2NyZWF0ZUVtcHR5U3RyaW5nQFNtYWxsU3RyaW5nc0BKU0NA
QEFBRVhQQVZKU0dsb2JhbERhdGFAMkBAWgogICAgID9jcmVhdGVFcnJvckBKU0NAQFlBUEFWSlNP
YmplY3RAMUBQQVZFeGVjU3RhdGVAMUBBQlZTdHJpbmdAV1RGQEBAWgotICAgID9jcmVhdGVMZWFr
ZWRASlNHbG9iYWxEYXRhQEpTQ0BAU0E/QVY/JFBhc3NSZWZQdHJAVkpTR2xvYmFsRGF0YUBKU0NA
QEBXVEZAQFc0SGVhcFR5cGVAMkBAWgogICAgID9jcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
ckBKU0NAQFlBUEFWSlNPYmplY3RAMUBQQVZFeGVjU3RhdGVAMUBAWgogICAgID9jcmVhdGVSYW5n
ZUVycm9yQEpTQ0BAWUFQQVZKU09iamVjdEAxQFBBVkV4ZWNTdGF0ZUAxQEFCVlN0cmluZ0BXVEZA
QEBaCiAgICAgP2NyZWF0ZVJlZmVyZW5jZUVycm9yQEpTQ0BAWUFQQVZKU09iamVjdEAxQFBBVkV4
ZWNTdGF0ZUAxQEFCVlN0cmluZ0BXVEZAQEBaCi0gICAgP2NyZWF0ZVNpbmdsZUNoYXJhY3RlclN0
cmluZ0BTbWFsbFN0cmluZ3NASlNDQEBBQUVYUEFWSlNHbG9iYWxEYXRhQDJARUBaCiAgICAgP2Ny
ZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvckBKU0NAQFlBUEFWSlNPYmplY3RAMUBQQVZFeGVjU3RhdGVA
MUBAWgogICAgID9jcmVhdGVTeW50YXhFcnJvckBKU0NAQFlBUEFWSlNPYmplY3RAMUBQQVZFeGVj
U3RhdGVAMUBBQlZTdHJpbmdAV1RGQEBAWgotICAgID9jcmVhdGVUYWJsZUBIYXNoVGFibGVASlND
QEBBQkVYUEFWSlNHbG9iYWxEYXRhQDJAQFoKICAgICA/Y3JlYXRlVGhyZWFkQFdURkBAWUFJUDZB
UEFYUEFYQFowQFoKICAgICA/Y3JlYXRlVGhyZWFkQFdURkBAWUFJUDZBUEFYUEFYQFowUEJEQFoK
ICAgICA/Y3JlYXRlVGhyZWFkQFdURkBAWUFJUDZBWFBBWEBaMFBCREBaCkBAIC0yMjMsMjAgKzE5
OCwxNiBAQCBFWFBPUlRTCiAgICAgP2RlbGV0ZVByb3BlcnR5QnlJbmRleEBKU09iamVjdEBKU0NA
QFNBX05QQVZKU0NlbGxAMkBQQVZFeGVjU3RhdGVAMkBJQFoKICAgICA/ZGVsZXRlUHJvcGVydHlC
eUluZGV4QEpTUHJveHlASlNDQEBLQV9OUEFWSlNDZWxsQDJAUEFWRXhlY1N0YXRlQDJASUBaCiAg
ICAgP2RlbGV0ZVRhYmxlQEhhc2hUYWJsZUBKU0NAQFFCRVhYWgotICAgID9kZXNwZWNpZnlEaWN0
aW9uYXJ5RnVuY3Rpb25AU3RydWN0dXJlQEpTQ0BAUUFFWEFBVkpTR2xvYmFsRGF0YUAyQFZQcm9w
ZXJ0eU5hbWVAMkBAWgotICAgID9kZXNwZWNpZnlGdW5jdGlvblRyYW5zaXRpb25AU3RydWN0dXJl
QEpTQ0BAU0FQQVYxMkBBQVZKU0dsb2JhbERhdGFAMkBQQVYxMkBWUHJvcGVydHlOYW1lQDJAQFoK
ICAgICA/ZGVzdHJveUBKU0NlbGxASlNDQEBLQVhQQVYxMkBAWgogICAgID9kZXN0cm95QEpTR2xv
YmFsT2JqZWN0QEpTQ0BAU0FYUEFWSlNDZWxsQDJAQFoKICAgICA/ZGVzdHJveUBPdXRPZkxpbmVC
aXRzQEJpdFZlY3RvckBXVEZAQFNBWFBBVjEyM0BAWgogICAgID9kZXRhY2hARGVidWdnZXJASlND
QEBVQUVYUEFWSlNHbG9iYWxPYmplY3RAMkBAWgogICAgID9kZXRhY2hUaHJlYWRAV1RGQEBZQVhJ
QFoKLSAgICA/ZGlzY2FyZEFsbENvZGVASlNHbG9iYWxEYXRhQEpTQ0BAUUFFWFhaCiAgICAgP2Rp
c3BsYXlOYW1lQEpTRnVuY3Rpb25ASlNDQEBRQUU/QVZTdHJpbmdAV1RGQEBQQVZFeGVjU3RhdGVA
MkBAWgogICAgID9kdG9hQFdURkBAWUFYUUFETkFBX05BQUhBQUlAWgogICAgID9kdW1wQEpTVmFs
dWVASlNDQEBRQkVYQUFWUHJpbnRTdHJlYW1AV1RGQEBAWgogICAgID9kdW1wQWxsT3B0aW9uc0BP
cHRpb25zQEpTQ0BAU0FYUEFVX2lvYnVmQEBAWgogICAgID9kdW1wQ2FsbEZyYW1lQEludGVycHJl
dGVyQEpTQ0BAUUFFWFBBVkV4ZWNTdGF0ZUAyQEBaCi0gICAgP2R1bXBTYW1wbGVEYXRhQEpTR2xv
YmFsRGF0YUBKU0NAQFFBRVhQQVZFeGVjU3RhdGVAMkBAWgogICAgID9FY21hU2NyaXB0Q29udmVy
dGVyQERvdWJsZVRvU3RyaW5nQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9uQFdURkBAU0FBQlYx
MjNAWFoKICAgICA/ZW1wdHlAU3RyaW5nSW1wbEBXVEZAQFNBUEFWMTJAWFoKICAgICA/ZW1wdHlP
YmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGVAUHJvdG90eXBlTWFwQEpTQ0BAUUFFUEFWU3RydWN0
dXJlQDJAUEFWSlNPYmplY3RAMkBJQFoKQEAgLTI4MiwxMSArMjUzLDcgQEAgRVhQT1JUUwogICAg
ID9maW5kQFN0cmluZ0ltcGxAV1RGQEBRQUVJUEFWMTJASUBaCiAgICAgP2ZpbmRJZ25vcmluZ0Nh
c2VAU3RyaW5nSW1wbEBXVEZAQFFBRUlQQVYxMkBJQFoKICAgICA/ZmluZEFsbG9jYXRvckBXZWFr
U2V0QEpTQ0BAQUFFUEFVRnJlZUNlbGxAV2Vha0Jsb2NrQDJAWFoKLSAgICA/ZmluaXNoQ3JlYXRp
b25AQm9vbGVhbk9iamVjdEBKU0NAQElBRVhBQVZKU0dsb2JhbERhdGFAMkBAWgotICAgID9maW5p
c2hDcmVhdGlvbkBEYXRlSW5zdGFuY2VASlNDQEBJQUVYQUFWSlNHbG9iYWxEYXRhQDJATkBaCi0g
ICAgP2ZpbmlzaENyZWF0aW9uQEludGVybmFsRnVuY3Rpb25ASlNDQEBJQUVYQUFWSlNHbG9iYWxE
YXRhQDJAQUJWU3RyaW5nQFdURkBAQFoKICAgICA/ZmluaXNoQ3JlYXRpb25AUmVnRXhwT2JqZWN0
QEpTQ0BASUFFWFBBVkpTR2xvYmFsT2JqZWN0QDJAQFoKLSAgICA/ZmluaXNoQ3JlYXRpb25AU3Ry
aW5nT2JqZWN0QEpTQ0BASUFFWEFBVkpTR2xvYmFsRGF0YUAyQFBBVkpTU3RyaW5nQDJAQFoKICAg
ICA/ZmlyZUBXYXRjaGRvZ0BKU0NAQFFBRVhYWgogICAgID9mb2N1c0BQcm9maWxlQEpTQ0BAUUFF
WFBCVlByb2ZpbGVOb2RlQDJAQFoKICAgICA/Zm9sZENhc2VAU3RyaW5nQFdURkBAUUJFP0FWMTJA
WFoKQEAgLTI5OSwxNCArMjY2LDEyIEBAIEVYUE9SVFMKICAgICA/ZnJvbVVURjhJbnRlcm5hbEBB
dG9taWNTdHJpbmdAV1RGQEBDQT9BVjEyQFBCRDBAWgogICAgID9mcm9tVVRGOFdpdGhMYXRpbjFG
YWxsYmFja0BTdHJpbmdAV1RGQEBTQT9BVjEyQFBCRUlAWgogICAgID9mdW5jdGlvbkdldHRlckBQ
cm9wZXJ0eVNsb3RASlNDQEBBQkU/QVZKU1ZhbHVlQDJAUEFWRXhlY1N0YXRlQDJAQFoKLSAgICA/
Z2V0QFN0cnVjdHVyZUBKU0NAQFFBRUhBQVZKU0dsb2JhbERhdGFAMkBWUHJvcGVydHlOYW1lQDJA
QUFJQUFQQVZKU0NlbGxAMkBAWgogICAgID9nZXRDYWxjdWxhdGVkRGlzcGxheU5hbWVASlNDQEBZ
QT9BVlN0cmluZ0BXVEZAQFBBVkV4ZWNTdGF0ZUAxQFBBVkpTT2JqZWN0QDFAQFoKICAgICA/Z2V0
Q2FsbGFibGVPYmplY3RTbG93QEpTQ0BAWUFQQVZKU0NlbGxAMUBQQVYyMUBAWgogICAgID9nZXRD
YWxsRGF0YUBKU0NlbGxASlNDQEBTQT9BVzRDYWxsVHlwZUAyQFBBVjEyQEFBVENhbGxEYXRhQDJA
QFoKICAgICA/Z2V0Q29uc3RydWN0RGF0YUBKU0NlbGxASlNDQEBTQT9BVzRDb25zdHJ1Y3RUeXBl
QDJAUEFWMTJAQUFUQ29uc3RydWN0RGF0YUAyQEBaCiAgICAgP2dldERhdGExNlNsb3dDYXNlQFN0
cmluZ0ltcGxAV1RGQEBBQkVQQl9XWFoKICAgICA/Z2V0SURAU291cmNlUHJvdmlkZXJASlNDQEBB
QUVYWFoKLSAgICA/Z2V0U3RhY2tUcmFjZUBJbnRlcnByZXRlckBKU0NAQFNBWFBBVkpTR2xvYmFs
RGF0YUAyQEFBVj8kVmVjdG9yQFVTdGFja0ZyYW1lQEpTQ0BAJDBBQFZDcmFzaE9uT3ZlcmZsb3dA
V1RGQEBAV1RGQEBJQFoKICAgICA/Z2V0T2JqZWN0QEpTQ2VsbEBKU0NAQFFBRVBBVkpTT2JqZWN0
QDJAWFoKICAgICA/Z2V0T2JqZWN0VHlwZUBNZW1vcnlJbnN0cnVtZW50YXRpb25AV1RGQEBDQVBC
RFBBVk1lbW9yeU9iamVjdEluZm9AMkBAWgogICAgID9nZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXNASlNPYmplY3RASlNDQEBTQVhQQVYxMkBQQVZFeGVjU3RhdGVAMkBBQVZQcm9wZXJ0eU5hbWVB
cnJheUAyQFc0RW51bWVyYXRpb25Nb2RlQDJAQFoKQEAgLTMzMCw3ICsyOTUsNiBAQCBFWFBPUlRT
CiAgICAgP2dsb2JhbEV4ZWNASlNHbG9iYWxPYmplY3RASlNDQEBRQUVQQVZFeGVjU3RhdGVAMkBY
WgogICAgID9nbG9iYWxPYmplY3RDb3VudEBIZWFwQEpTQ0BAUUFFSVhaCiAgICAgP2dyb3dASGFu
ZGxlU2V0QEpTQ0BAQUFFWFhaCi0gICAgP2dyb3dPdXRPZkxpbmVTdG9yYWdlQEpTT2JqZWN0QEpT
Q0BAUUFFUEFWQnV0dGVyZmx5QDJAQUFWSlNHbG9iYWxEYXRhQDJASUlAWgogICAgID9oYXNoU2xv
d0Nhc2VAU3RyaW5nSW1wbEBXVEZAQEFCRUlYWgogICAgID9oYXNQcm9wZXJ0eUBKU09iamVjdEBK
U0NAQFFCRV9OUEFWRXhlY1N0YXRlQDJASUBaCiAgICAgP2hhc1Byb3BlcnR5QEpTT2JqZWN0QEpT
Q0BAUUJFX05QQVZFeGVjU3RhdGVAMkBWUHJvcGVydHlOYW1lQDJAQFoKQEAgLTM2OCw4ICszMzIs
NiBAQCBFWFBPUlRTCiAgICAgP2xvd2VyQFN0cmluZ0ltcGxAV1RGQEBRQUU/QVY/JFBhc3NSZWZQ
dHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBYWgogICAgID9saW5lQFN0YWNrRnJhbWVASlNDQEBRQUVJ
WFoKICAgICA/bWFrZThCaXRGcm9tMTZCaXRTb3VyY2VAU3RyaW5nQFdURkBAU0E/QVYxMkBQQl9X
SUBaCi0gICAgP21hdGNoQFJlZ0V4cEBKU0NAQFFBRUhBQVZKU0dsb2JhbERhdGFAMkBBQlZTdHJp
bmdAV1RGQEBJQUFWPyRWZWN0b3JASCQwQ0FAVkNyYXNoT25PdmVyZmxvd0BXVEZAQEA1QEBaCi0g
ICAgP21hdGVyaWFsaXplUHJvcGVydHlNYXBAU3RydWN0dXJlQEpTQ0BAQUFFWEFBVkpTR2xvYmFs
RGF0YUAyQEBaCiAgICAgP21vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZUBXVEZAQFlBTlhaCiAg
ICAgP21vbnRoRnJvbURheUluWWVhckBXVEZAQFlBSEhfTkBaCiAgICAgP21zVG9ZZWFyQFdURkBA
WUFITkBaCkBAIC00MTcsMTUgKzM3OSwxMiBAQCBFWFBPUlRTCiAgICAgP3B1dERpcmVjdFZpcnR1
YWxASlNPYmplY3RASlNDQEBTQVhQQVYxMkBQQVZFeGVjU3RhdGVAMkBWUHJvcGVydHlOYW1lQDJA
VkpTVmFsdWVAMkBJQFoKICAgICA/cHV0RGlyZWN0VmlydHVhbEBKU1Byb3h5QEpTQ0BAS0FYUEFW
SlNPYmplY3RAMkBQQVZFeGVjU3RhdGVAMkBWUHJvcGVydHlOYW1lQDJAVkpTVmFsdWVAMkBJQFoK
ICAgICA/cmFuZG9tTnVtYmVyQFdURkBAWUFOWFoKLSAgICA/cmVjb21waWxlQWxsSlNGdW5jdGlv
bnNARGVidWdnZXJASlNDQEBRQUVYUEFWSlNHbG9iYWxEYXRhQDJAQFoKICAgICA/cmVnRXhwRmxh
Z3NASlNDQEBZQT9BVzRSZWdFeHBGbGFnc0AxQEFCVlN0cmluZ0BXVEZAQEBaCiAgICAgP3JlaWZ5
U3RyaW5nQFN0cmluZ0J1aWxkZXJAV1RGQEBBQkVYWFoKICAgICA/cmVsZWFzZURlY29tbWl0dGVk
QE9TQWxsb2NhdG9yQFdURkBAU0FYUEFYSUBaCi0gICAgP3JlbGVhc2VFeGVjdXRhYmxlTWVtb3J5
QEpTR2xvYmFsRGF0YUBKU0NAQFFBRVhYWgogICAgID9yZW1vdmVAU3RyaW5nQFdURkBAUUFFWElI
QFoKICAgICA/cmVtb3ZlQmxvY2tATWFya2VkQWxsb2NhdG9yQEpTQ0BAUUFFWFBBVk1hcmtlZEJs
b2NrQDJAQFoKICAgICA/cmVtb3ZlQ2hhcmFjdGVyc0BTdHJpbmdAV1RGQEBRQkU/QVYxMkBQNkFf
Tl9XQFpAWgotICAgID9yZW1vdmVEaXJlY3RASlNPYmplY3RASlNDQEBRQUVfTkFBVkpTR2xvYmFs
RGF0YUAyQFZQcm9wZXJ0eU5hbWVAMkBAWgogICAgID9yZXBsYWNlQFN0cmluZ0ltcGxAV1RGQEBR
QUU/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBfVzBAWgogICAgID9yZXBsYWNl
QFN0cmluZ0ltcGxAV1RGQEBRQUU/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBf
V1BBVjEyQEBaCiAgICAgP3JlcGxhY2VAU3RyaW5nSW1wbEBXVEZAQFFBRT9BVj8kUGFzc1JlZlB0
ckBWU3RyaW5nSW1wbEBXVEZAQEAyQF9XUEJFSUBaCkBAIC00MzksNyArMzk4LDYgQEAgRVhQT1JU
UwogICAgID9yZXNlcnZlQW5kQ29tbWl0QE9TQWxsb2NhdG9yQFdURkBAU0FQQVhJVzRVc2FnZUAx
MkBfTjExQFoKICAgICA/cmVzZXJ2ZUNhcGFjaXR5QFN0cmluZ0J1aWxkZXJAV1RGQEBRQUVYSUBa
CiAgICAgP3Jlc2V0QFBhcnNlckFyZW5hQEpTQ0BAUUFFWFhaCi0gICAgP3Jlc2V0RGF0ZUNhY2hl
QEpTR2xvYmFsRGF0YUBKU0NAQFFBRVhYWgogICAgID9yZXNpemVAU3RyaW5nQnVpbGRlckBXVEZA
QFFBRVhJQFoKICAgICA/cmVzaXplT3V0T2ZMaW5lQEJpdFZlY3RvckBXVEZAQEFBRVhJQFoKICAg
ICA/cmVzb2x2ZVJvcGVASlNSb3BlU3RyaW5nQEpTQ0BAQUJFWFBBVkV4ZWNTdGF0ZUAyQEBaCkBA
IC00NTYsMTQgKzQxNCwxMCBAQCBFWFBPUlRTCiAgICAgP3NldEVudW1lcmFibGVAUHJvcGVydHlE
ZXNjcmlwdG9yQEpTQ0BAUUFFWF9OQFoKICAgICA/c2V0R2FyYmFnZUNvbGxlY3Rpb25UaW1lckVu
YWJsZWRASGVhcEBKU0NAQFFBRVhfTkBaCiAgICAgP3NldEdldHRlckBQcm9wZXJ0eURlc2NyaXB0
b3JASlNDQEBRQUVYVkpTVmFsdWVAMkBAWgotICAgID9zZXRHbG9iYWxUaGlzQEpTR2xvYmFsT2Jq
ZWN0QEpTQ0BASUFFWEFBVkpTR2xvYmFsRGF0YUAyQFBBVkpTT2JqZWN0QDJAQFoKLSAgICA/c2V0
SW5kZXhRdWlja2x5VG9VbmRlY2lkZWRASlNPYmplY3RASlNDQEBBQUVYQUFWSlNHbG9iYWxEYXRh
QDJASVZKU1ZhbHVlQDJAQFoKICAgICA/c2V0TWFpblRocmVhZENhbGxiYWNrc1BhdXNlZEBXVEZA
QFlBWF9OQFoKICAgICA/c2V0T3B0aW9uQE9wdGlvbnNASlNDQEBTQV9OUEJEQFoKICAgICA/c2V0
T3JkZXJMb3dlckZpcnN0QENvbGxhdG9yQFdURkBAUUFFWF9OQFoKLSAgICA/c2V0UHJvdG90eXBl
QEpTT2JqZWN0QEpTQ0BAUUFFWEFBVkpTR2xvYmFsRGF0YUAyQFZKU1ZhbHVlQDJAQFoKICAgICA/
c2V0U2V0dGVyQFByb3BlcnR5RGVzY3JpcHRvckBKU0NAQFFBRVhWSlNWYWx1ZUAyQEBaCi0gICAg
P3NldFRhcmdldEBKU1Byb3h5QEpTQ0BASUFFWEFBVkpTR2xvYmFsRGF0YUAyQFBBVkpTR2xvYmFs
T2JqZWN0QDJAQFoKICAgICA/c2V0dGVyQFByb3BlcnR5RGVzY3JpcHRvckBKU0NAQFFCRT9BVkpT
VmFsdWVAMkBYWgogICAgID9zZXRUb0N1cnJlbnRMb2NhbFRpbWVAR3JlZ29yaWFuRGF0ZVRpbWVA
V1RGQEBRQUVYWFoKICAgICA/c2V0VW5kZWZpbmVkQFByb3BlcnR5RGVzY3JpcHRvckBKU0NAQFFB
RVhYWgpAQCAtNDg0LDExICs0MzgsOSBAQCBFWFBPUlRTCiAgICAgP3NwbGl0QFN0cmluZ0BXVEZA
QFFCRVhfV19OQUFWPyRWZWN0b3JAVlN0cmluZ0BXVEZAQCQwQUBWQ3Jhc2hPbk92ZXJmbG93QDJA
QDJAQFoKICAgICA/c3BsaXRAU3RyaW5nQFdURkBAUUJFWEFCVjEyQF9OQUFWPyRWZWN0b3JAVlN0
cmluZ0BXVEZAQCQwQUBWQ3Jhc2hPbk92ZXJmbG93QDJAQDJAQFoKICAgICA/c3RhcnRQcm9maWxp
bmdATGVnYWN5UHJvZmlsZXJASlNDQEBRQUVYUEFWRXhlY1N0YXRlQDJAQUJWU3RyaW5nQFdURkBA
QFoKLSAgICA/c3RhcnRTYW1wbGluZ0BKU0dsb2JhbERhdGFASlNDQEBRQUVYWFoKICAgICA/c3Rh
cnRzV2l0aEBTdHJpbmdJbXBsQFdURkBAUUJFX05fV0BaCiAgICAgP3N0YXJ0c1dpdGhAU3RyaW5n
SW1wbEBXVEZAQFFCRV9OUEJESV9OQFoKICAgICA/c3RvcFByb2ZpbGluZ0BMZWdhY3lQcm9maWxl
ckBKU0NAQFFBRT9BVj8kUGFzc1JlZlB0ckBWUHJvZmlsZUBKU0NAQEBXVEZAQFBBVkV4ZWNTdGF0
ZUAyQEFCVlN0cmluZ0A0QEBaCi0gICAgP3N0b3BTYW1wbGluZ0BKU0dsb2JhbERhdGFASlNDQEBR
QUVYWFoKICAgICA/c3RyaW5nQE9wYXF1ZUpTU3RyaW5nQEBRQkU/QVZTdHJpbmdAV1RGQEBYWgog
ICAgID9TdHJpbmdUb0RvdWJsZUBTdHJpbmdUb0RvdWJsZUNvbnZlcnRlckBkb3VibGVfY29udmVy
c2lvbkBXVEZAQFNBTlBCRElQQUlAWgogICAgID9zdHJpcFdoaXRlU3BhY2VAU3RyaW5nQFdURkBA
UUJFP0FWMTJAWFoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAx
NDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzQ0LDcgKzc0NCw3IEBACiAJCUJD
MThDNDFEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NsYXNzUmVmLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQwRkNFMTBBNTFFNDZCMDAwNUYwNjEgLyog
SlNDbGFzc1JlZi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUJDMThDNDFFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NvbnRleHRSZWYuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QkQ1QTJBMEEzRTkxRjYw
MEJBRjU5QyAvKiBKU0NvbnRleHRSZWYuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
dWJsaWMsICk7IH07IH07CiAJCUJDMThDNDFGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Z1bmN0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNjkyQTg1
RjAyNTU1OTdEMDFGRjYwRjcgLyogSlNGdW5jdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUJDMThDNDIwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBK
U0dsb2JhbERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUxOEUzQTU2MERGOTI3OEMwMEQ5MEIzNCAvKiBKU0dsb2JhbERhdGEuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCQzE4QzQyMDBFMTZGNUNE
MDBCMzQ0NjAgLyogVk0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxOEUzQTU2MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMThDNDIxMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBKU0dsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQThFODk0MzMwQ0QwNjAzRjAwMzY3MTc5IC8qIEpTR2xvYmFsT2JqZWN0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEM0
MjMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNjVFQTRDOUEwOTJBRjlFMjAwOTNEODAwIC8qIEpTTG9jay5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMThD
NDI0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU09iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyMkEzOTkwRTE2RTE0ODAwQUYyMUM4IC8qIEpTT2Jq
ZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTg2MSw3ICs4NjEsNyBAQAogCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNT
dHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
MjRBOEY1MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUxMjRBOEY4MEU1NTU3NzUwMDMw
OTFGMSAvKiBPcGFxdWVKU1N0cmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMTI0QThGNjBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJp
bmcuY3BwICovOyB9OwogCQlFMTc4NjM2RDBEOUJFRUMzMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRo
cmVhZGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMTc4NjM2QzBEOUJFRUMzMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgKi87
IH07Ci0JCUUxOEUzQTU5MERGOTI3OEMwMEQ5MEIzNCAvKiBKU0dsb2JhbERhdGEuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4RTNBNTcwREY5Mjc4
QzAwRDkwQjM0IC8qIEpTR2xvYmFsRGF0YS5jcHAgKi87IH07CisJCUUxOEUzQTU5MERGOTI3OEMw
MEQ5MEIzNCAvKiBWTS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwICovOyB9OwogCQlFNDlE
QzE2QjEyRUYyOTNFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE1NTEyRUYyNzcyMDAx
ODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5jcHAgKi87IH07CiAJCUU0OURDMTZDMTJFRjI5
NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE1MTEyRUYyNzIyMDAxODRBMUYgLyogU291
cmNlUHJvdmlkZXJDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNh
Y2hlSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTQ5REMxNDkxMkVGMjYxQTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE3NzMsOCAr
MTc3Myw4IEBACiAJCUUxMjRBOEY2MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcGFxdWVKU1N0cmluZy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNzg2MzNGMEQ5QkVDMDAwMEQ3NEU3
NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluaXRpYWxpemVUaHJlYWRpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTE3ODYzNkMwRDlCRUVDMzAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZVRocmVhZGluZy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxOEUzQTU2MERGOTI3OEMwMEQ5MEIzNCAv
KiBKU0dsb2JhbERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHbG9i
YWxEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxOEUzQTU3MERGOTI3OEMw
MEQ5MEIzNCAvKiBKU0dsb2JhbERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNHbG9iYWxEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RTE4RTNBNTYwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFZNLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxOEUzQTU3MERG
OTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBWTS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0OURDMTQ5MTJFRjI2
MUEwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFNDlEQzE1MTEyRUYyNzIyMDAxODRBMUYgLyogU291cmNlUHJvdmlk
ZXJDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VQcm92aWRl
ckNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0OURDMTU1MTJFRjI3NzIw
MDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNvdXJjZVByb3ZpZGVyQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjQ2NSw4ICsyNDY1LDggQEAKIAkJCQlBN0I0QUNBRTE0ODRDOUNFMDBC
MzhBMzYgLyogSlNFeHBvcnRNYWNyb3MuaCAqLywKIAkJCQlGNjkyQTg1RTAyNTU1OTdEMDFGRjYw
RjcgLyogSlNGdW5jdGlvbi5jcHAgKi8sCiAJCQkJRjY5MkE4NUYwMjU1NTk3RDAxRkY2MEY3IC8q
IEpTRnVuY3Rpb24uaCAqLywKLQkJCQlFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogSlNHbG9i
YWxEYXRhLmNwcCAqLywKLQkJCQlFMThFM0E1NjBERjkyNzhDMDBEOTBCMzQgLyogSlNHbG9iYWxE
YXRhLmggKi8sCisJCQkJRTE4RTNBNTcwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCAqLywKKwkJ
CQlFMThFM0E1NjBERjkyNzhDMDBEOTBCMzQgLyogVk0uaCAqLywKIAkJCQkxNERFMEQ2ODBEMDI0
MzE0MDBBQUNDQTIgLyogSlNHbG9iYWxPYmplY3QuY3BwICovLAogCQkJCUE4RTg5NDMzMENEMDYw
M0YwMDM2NzE3OSAvKiBKU0dsb2JhbE9iamVjdC5oICovLAogCQkJCUJDNzU2RkM2MEUyMDMxQjIw
MERFN0QxMiAvKiBKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAgKi8sCkBAIC0zMTg4LDcgKzMx
ODgsNyBAQAogCQkJCTg2RTNDNjE0MTY3QkFCRDcwMDZENzYwQSAvKiBKU0V4cG9ydC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdCNEFDQUYxNDg0QzlDRTAwQjM4QTM2IC8qIEpTRXhwb3J0TWFjcm9z
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxRjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNGdW5j
dGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkMxOEM0MjAwRTE2RjVDRDAwQjM0NDYwIC8qIEpT
R2xvYmFsRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkMxOEM0MjAwRTE2RjVDRDAwQjM0NDYw
IC8qIFZNLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyMTBFMTZGNUNEMDBCMzQ0NjAgLyog
SlNHbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNzU2RkM5MEUyMDMxQjIwMERF
N0QxMiAvKiBKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc2
QzUxNzYxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggaW4gSGVhZGVycyAqLywK
QEAgLTM5MzAsNyArMzkzMCw3IEBACiAJCQkJMTRCRDVBMzAwQTNFOTFGNjAwQkFGNTlDIC8qIEpT
Q29udGV4dFJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5Nzg4MDE0MDE0NzFBRDkyMDA0MUIw
MTYgLyogSlNEYXRlTWF0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDA1NjZENjEwN0VDMjcx
MDA1REJDOEQgLyogSlNGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlFMThFM0E1OTBE
RjkyNzhDMDBEOTBCMzQgLyogSlNHbG9iYWxEYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUx
OEUzQTU5MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdG
MzlEMjEwN0VDMzc2MDA0MjdBNDggLyogSlNHbG9iYWxPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTRFOUQxN0IxMDdFQzQ2OTAwNEREQTIxIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25z
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODc1MTA3RUMxM0UwMDEzRTdCMiAvKiBKU0xv
Y2suY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0FSTUFzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5MSwxNCArMzkxLDE0IEBAIHZvaWQgQVJNQXNzZW1ibGVyOjpiYXNlSW5kZXhUcmFuc2Zl
ckZsb2EKICAgICBkYXRhVHJhbnNmZXJGbG9hdCh0cmFuc2ZlclR5cGUsIHNyY0RzdCwgQVJNUmVn
aXN0ZXJzOjpTMSwgb2Zmc2V0KTsKIH0KIAotUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFu
ZGxlPiBBUk1Bc3NlbWJsZXI6OmV4ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK1Bhc3NSZWZQ
dHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gQVJNQXNzZW1ibGVyOjpleGVjdXRhYmxlQ29weShW
TSYgdm0sIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAg
ICAgLy8gNjQtYml0IGFsaWdubWVudCBpcyByZXF1aXJlZCBmb3IgbmV4dCBjb25zdGFudCBwb29s
IGFuZCBKSVQgY29kZSBhcyB3ZWxsCiAgICAgbV9idWZmZXIuZmx1c2hXaXRob3V0QmFycmllcih0
cnVlKTsKICAgICBpZiAoIW1fYnVmZmVyLmlzQWxpZ25lZCg4KSkKICAgICAgICAgYmtwdCgwKTsK
IAotICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBtX2J1ZmZlci5l
eGVjdXRhYmxlQ29weShnbG9iYWxEYXRhLCBvd25lclVJRCwgZWZmb3J0KTsKKyAgICBSZWZQdHI8
RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0gbV9idWZmZXIuZXhlY3V0YWJsZUNvcHko
dm0sIG93bmVyVUlELCBlZmZvcnQpOwogICAgIGNoYXIqIGRhdGEgPSByZWludGVycHJldF9jYXN0
PGNoYXIqPihyZXN1bHQtPnN0YXJ0KCkpOwogCiAgICAgZm9yIChKdW1wczo6SXRlcmF0b3IgaXRl
ciA9IG1fanVtcHMuYmVnaW4oKTsgaXRlciAhPSBtX2p1bXBzLmVuZCgpOyArK2l0ZXIpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1B
c3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzYwLDcgKzc2MCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgcmV0dXJuIGxvYWRCcmFuY2hUYXJnZXQoQVJNUmVnaXN0ZXJzOjpw
YywgY2MsIHVzZUNvbnN0YW50UG9vbCk7CiAgICAgICAgIH0KIAotICAgICAgICBQYXNzUmVmUHRy
PEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYsIHZv
aWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CisgICAgICAgIFBhc3NSZWZQdHI8
RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJsZUNvcHkoVk0mLCB2b2lkKiBvd25lclVJ
RCwgSklUQ29tcGlsYXRpb25FZmZvcnQpOwogCiAgICAgICAgIHVuc2lnbmVkIGRlYnVnT2Zmc2V0
KCkgeyByZXR1cm4gbV9idWZmZXIuZGVidWdPZmZzZXQoKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJKHJldmlzaW9u
IDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVm
ZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkV4ZWN1
dGFibGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJKSVRDb21waWxhdGlvbkVmZm9ydC5oIgotI2lu
Y2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAic3RkaW50
LmgiCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KQEAg
LTEzMCwxMiArMTMwLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIEFz
c2VtYmxlckxhYmVsKG1faW5kZXgpOwogICAgICAgICB9CiAKLSAgICAgICAgUGFzc1JlZlB0cjxF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxlQ29weShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCisgICAg
ICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJsZUNvcHkoVk0m
IHZtLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgICAg
ICB7CiAgICAgICAgICAgICBpZiAoIW1faW5kZXgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICAgICAgICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBn
bG9iYWxEYXRhLmV4ZWN1dGFibGVBbGxvY2F0b3IuYWxsb2NhdGUoZ2xvYmFsRGF0YSwgbV9pbmRl
eCwgb3duZXJVSUQsIGVmZm9ydCk7CisgICAgICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9y
eUhhbmRsZT4gcmVzdWx0ID0gdm0uZXhlY3V0YWJsZUFsbG9jYXRvci5hbGxvY2F0ZSh2bSwgbV9p
bmRleCwgb3duZXJVSUQsIGVmZm9ydCk7CiAKICAgICAgICAgICAgIGlmICghcmVzdWx0KQogICAg
ICAgICAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9Bc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQ
b29sLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTUsMTAgKzE5NSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHB1dEludGVncmFsVW5jaGVja2VkKHZh
bHVlLmxvdyk7CiAgICAgfQogCi0gICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
PiBleGVjdXRhYmxlQ29weShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHZvaWQqIG93bmVyVUlE
LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCisgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxl
TWVtb3J5SGFuZGxlPiBleGVjdXRhYmxlQ29weShWTSYgdm0sIHZvaWQqIG93bmVyVUlELCBKSVRD
b21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgewogICAgICAgICBmbHVzaENvbnN0YW50UG9v
bChmYWxzZSk7Ci0gICAgICAgIHJldHVybiBBc3NlbWJsZXJCdWZmZXI6OmV4ZWN1dGFibGVDb3B5
KGdsb2JhbERhdGEsIG93bmVyVUlELCBlZmZvcnQpOworICAgICAgICByZXR1cm4gQXNzZW1ibGVy
QnVmZmVyOjpleGVjdXRhYmxlQ29weSh2bSwgb3duZXJVSUQsIGVmZm9ydCk7CiAgICAgfQogCiAg
ICAgdm9pZCBwdXRTaG9ydFdpdGhDb25zdGFudEludCh1aW50MTZfdCBpbnNuLCB1aW50MzJfdCBj
b25zdGFudCwgYm9vbCBpc1JldXNhYmxlID0gZmFsc2UpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBMaW5rQnVmZmVyOjpsaW5rQ29kZSh2b2lkKiBv
d25lclVJRAogewogICAgIEFTU0VSVCghbV9jb2RlKTsKICNpZiAhRU5BQkxFKEJSQU5DSF9DT01Q
QUNUSU9OKQotICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG1fYXNzZW1ibGVyLT5tX2Fzc2VtYmxl
ci5leGVjdXRhYmxlQ29weSgqbV9nbG9iYWxEYXRhLCBvd25lclVJRCwgZWZmb3J0KTsKKyAgICBt
X2V4ZWN1dGFibGVNZW1vcnkgPSBtX2Fzc2VtYmxlci0+bV9hc3NlbWJsZXIuZXhlY3V0YWJsZUNv
cHkoKm1fdm0sIG93bmVyVUlELCBlZmZvcnQpOwogICAgIGlmICghbV9leGVjdXRhYmxlTWVtb3J5
KQogICAgICAgICByZXR1cm47CiAgICAgbV9jb2RlID0gbV9leGVjdXRhYmxlTWVtb3J5LT5zdGFy
dCgpOwpAQCAtNzAsNyArNzAsNyBAQCB2b2lkIExpbmtCdWZmZXI6OmxpbmtDb2RlKHZvaWQqIG93
bmVyVUlECiAgICAgQVNTRVJUKG1fY29kZSk7CiAjZWxzZQogICAgIG1faW5pdGlhbFNpemUgPSBt
X2Fzc2VtYmxlci0+bV9hc3NlbWJsZXIuY29kZVNpemUoKTsKLSAgICBtX2V4ZWN1dGFibGVNZW1v
cnkgPSBtX2dsb2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0b3IuYWxsb2NhdGUoKm1fZ2xvYmFs
RGF0YSwgbV9pbml0aWFsU2l6ZSwgb3duZXJVSUQsIGVmZm9ydCk7CisgICAgbV9leGVjdXRhYmxl
TWVtb3J5ID0gbV92bS0+ZXhlY3V0YWJsZUFsbG9jYXRvci5hbGxvY2F0ZSgqbV92bSwgbV9pbml0
aWFsU2l6ZSwgb3duZXJVSUQsIGVmZm9ydCk7CiAgICAgaWYgKCFtX2V4ZWN1dGFibGVNZW1vcnkp
CiAgICAgICAgIHJldHVybjsKICAgICBtX2NvZGUgPSAodWludDhfdCopbV9leGVjdXRhYmxlTWVt
b3J5LT5zdGFydCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5r
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9M
aW5rQnVmZmVyLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTGlua0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIAogLy8g
TGlua0J1ZmZlcjoKIC8vCkBAIC03NiwxNCArNzYsMTQgQEAgY2xhc3MgTGlua0J1ZmZlciB7CiAj
ZW5kaWYKIAogcHVibGljOgotICAgIExpbmtCdWZmZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBNYWNyb0Fzc2VtYmxlciogbWFzbSwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZm
b3J0IGVmZm9ydCA9IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpCisgICAgTGlua0J1ZmZlcihW
TSYgdm0sIE1hY3JvQXNzZW1ibGVyKiBtYXNtLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0ID0gSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCkKICAgICAgICAgOiBt
X3NpemUoMCkKICNpZiBFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCiAgICAgICAgICwgbV9pbml0
aWFsU2l6ZSgwKQogI2VuZGlmCiAgICAgICAgICwgbV9jb2RlKDApCiAgICAgICAgICwgbV9hc3Nl
bWJsZXIobWFzbSkKLSAgICAgICAgLCBtX2dsb2JhbERhdGEoJmdsb2JhbERhdGEpCisgICAgICAg
ICwgbV92bSgmdm0pCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAsIG1fY29tcGxldGVkKGZhbHNl
KQogICAgICAgICAsIG1fZWZmb3J0KGVmZm9ydCkKQEAgLTI1Niw3ICsyNTYsNyBAQCBwcml2YXRl
OgogI2VuZGlmCiAgICAgdm9pZCogbV9jb2RlOwogICAgIE1hY3JvQXNzZW1ibGVyKiBtX2Fzc2Vt
YmxlcjsKLSAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKKyAgICBWTSogbV92bTsKICNp
Zm5kZWYgTkRFQlVHCiAgICAgYm9vbCBtX2NvbXBsZXRlZDsKICAgICBKSVRDb21waWxhdGlvbkVm
Zm9ydCBtX2VmZm9ydDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTUlQ
U0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTUlQU0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01JUFNBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjc2LDkg
KzY3Niw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fYnVmZmVyLmNvZGVTaXplKCk7CiAg
ICAgfQogCi0gICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxl
Q29weShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxh
dGlvbkVmZm9ydCBlZmZvcnQpCisgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
PiBleGVjdXRhYmxlQ29weShWTSYgdm0sIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVm
Zm9ydCBlZmZvcnQpCiAgICAgewotICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRs
ZT4gcmVzdWx0ID0gbV9idWZmZXIuZXhlY3V0YWJsZUNvcHkoZ2xvYmFsRGF0YSwgb3duZXJVSUQs
IGVmZm9ydCk7CisgICAgICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQg
PSBtX2J1ZmZlci5leGVjdXRhYmxlQ29weSh2bSwgb3duZXJVSUQsIGVmZm9ydCk7CiAgICAgICAg
IGlmICghcmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuaAkocmV2aXNpb24gMTQ4NjU1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMTU3NSw5ICsxNTc1LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVhZFBDcmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1Y3Rp
b25QdHIgJiAweGZmKSwgaW5zdHJ1Y3Rpb25QdHIpKTsKICAgICB9CiAKLSAgICBQYXNzUmVmUHRy
PEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKKyAg
ICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVDb3B5KFZNJiB2
bSwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2J1ZmZlci5leGVjdXRhYmxlQ29weShnbG9iYWxEYXRhLCBvd25lclVJ
RCwgZWZmb3J0KTsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KHZtLCBv
d25lclVJRCwgZWZmb3J0KTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCBjYWNoZUZsdXNoKHZv
aWQqIGNvZGUsIHNpemVfdCBzaXplKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTkxLDkgKzE5OTEsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiLm1fb2Zmc2V0IC0gYS5t
X29mZnNldDsKICAgICB9CiAgICAgCi0gICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFu
ZGxlPiBleGVjdXRhYmxlQ29weShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHZvaWQqIG93bmVy
VUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCisgICAgUGFzc1JlZlB0cjxFeGVjdXRh
YmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxlQ29weShWTSYgdm0sIHZvaWQqIG93bmVyVUlELCBK
SVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgewotICAgICAgICByZXR1cm4gbV9mb3Jt
YXR0ZXIuZXhlY3V0YWJsZUNvcHkoZ2xvYmFsRGF0YSwgb3duZXJVSUQsIGVmZm9ydCk7CisgICAg
ICAgIHJldHVybiBtX2Zvcm1hdHRlci5leGVjdXRhYmxlQ29weSh2bSwgb3duZXJVSUQsIGVmZm9y
dCk7CiAgICAgfQogCiAgICAgdW5zaWduZWQgZGVidWdPZmZzZXQoKSB7IHJldHVybiBtX2Zvcm1h
dHRlci5kZWJ1Z09mZnNldCgpOyB9CkBAIC0yMzQ5LDkgKzIzNDksOSBAQCBwcml2YXRlOgogICAg
ICAgICBib29sIGlzQWxpZ25lZChpbnQgYWxpZ25tZW50KSBjb25zdCB7IHJldHVybiBtX2J1ZmZl
ci5pc0FsaWduZWQoYWxpZ25tZW50KTsgfQogICAgICAgICB2b2lkKiBkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gbV9idWZmZXIuZGF0YSgpOyB9CiAKLSAgICAgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxl
TWVtb3J5SGFuZGxlPiBleGVjdXRhYmxlQ29weShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHZv
aWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCisgICAgICAgIFBhc3NS
ZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJsZUNvcHkoVk0mIHZtLCB2b2lk
KiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbV9idWZmZXIuZXhlY3V0YWJsZUNvcHkoZ2xvYmFsRGF0YSwgb3duZXJV
SUQsIGVmZm9ydCk7CisgICAgICAgICAgICByZXR1cm4gbV9idWZmZXIuZXhlY3V0YWJsZUNvcHko
dm0sIG93bmVyVUlELCBlZmZvcnQpOwogICAgICAgICB9CiAKICAgICAgICAgdW5zaWduZWQgZGVi
dWdPZmZzZXQoKSB7IHJldHVybiBtX2J1ZmZlci5kZWJ1Z09mZnNldCgpOyB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNp
b24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5m
by5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE5ICszMywxOSBAQAogI2lmIEVOQUJMRShKSVQp
CiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBDYWxsTGlua0luZm86OnVubGluayhKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIpCit2b2lkIENhbGxM
aW5rSW5mbzo6dW5saW5rKFZNJiB2bSwgUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlcikKIHsK
ICAgICBBU1NFUlQoaXNMaW5rZWQoKSk7CiAgICAgCiAgICAgcmVwYXRjaEJ1ZmZlci5yZXZlcnRK
dW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaChSZXBhdGNoQnVmZmVyOjpzdGFydE9m
QnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3Rlcihob3RQYXRoQmVnaW4pLCBzdGF0aWNfY2FzdDxN
YWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4oY2FsbGVlR1BSKSwgMCk7CiAgICAgaWYgKGlzREZH
KSB7CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNh
bGxSZXR1cm5Mb2NhdGlvbiwgKGNhbGxUeXBlID09IENvbnN0cnVjdCA/IGdsb2JhbERhdGEuZ2V0
Q1RJU3R1YihERkc6OmxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcikgOiBnbG9iYWxEYXRhLmdl
dENUSVN0dWIoREZHOjpsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKSkuY29kZSgpKTsKKyAgICAgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbFJldHVybkxvY2F0aW9uLCAoY2FsbFR5cGUgPT0gQ29u
c3RydWN0ID8gdm0uZ2V0Q1RJU3R1YihERkc6OmxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcikg
OiB2bS5nZXRDVElTdHViKERGRzo6bGlua0NhbGxUaHVua0dlbmVyYXRvcikpLmNvZGUoKSk7CiAj
ZWxzZQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCiAgICAg
fSBlbHNlCi0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxSZXR1cm5Mb2NhdGlvbiwg
Y2FsbFR5cGUgPT0gQ29uc3RydWN0ID8gZ2xvYmFsRGF0YS5nZXRDVElTdHViKGxpbmtDb25zdHJ1
Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IGdsb2JhbERhdGEuZ2V0Q1RJU3R1YihsaW5rQ2FsbEdlbmVy
YXRvcikuY29kZSgpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbFJldHVybkxv
Y2F0aW9uLCBjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1
Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IHZtLmdldENUSVN0dWIobGlua0NhbGxHZW5lcmF0b3IpLmNv
ZGUoKSk7CiAgICAgaGFzU2VlblNob3VsZFJlcGF0Y2ggPSBmYWxzZTsKICAgICBjYWxsZWUuY2xl
YXIoKTsKICAgICBzdHViLmNsZWFyKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3
LDcgKzg3LDcgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1NlbgogICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbjsKIAogICAgIGJvb2wgaXNMaW5rZWQoKSB7IHJldHVybiBz
dHViIHx8IGNhbGxlZTsgfQotICAgIHZvaWQgdW5saW5rKEpTR2xvYmFsRGF0YSYsIFJlcGF0Y2hC
dWZmZXImKTsKKyAgICB2b2lkIHVubGluayhWTSYsIFJlcGF0Y2hCdWZmZXImKTsKIAogICAgIGJv
b2wgc2Vlbk9uY2UoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAyLDcgKzMw
Miw3IEBAIHN0YXRpYyB2b2lkIGR1bXBTdHJ1Y3R1cmUoUHJpbnRTdHJlYW0mIG8KICAgICAKICAg
ICBvdXQucHJpbnRmKCIlcyA9ICVwIiwgbmFtZSwgc3RydWN0dXJlKTsKICAgICAKLSAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldChleGVjLT5nbG9iYWxEYXRhKCksIGlk
ZW50KTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldChleGVjLT52
bSgpLCBpZGVudCk7CiAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KQogICAgICAgICBv
dXQucHJpbnRmKCIgKG9mZnNldCA9ICVkKSIsIG9mZnNldCk7CiB9CkBAIC00ODYsNyArNDg2LDcg
QEAgdm9pZCBDb2RlQmxvY2s6OnByaW50U3RydWN0dXJlKFByaW50U3RyZQogCiB2b2lkIENvZGVC
bG9jazo6cHJpbnRTdHJ1Y3R1cmVzKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IEluc3RydWN0aW9u
KiB2UEMpCiB7Ci0gICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV9nbG9iYWxEYXRhLT5p
bnRlcnByZXRlcjsKKyAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX3ZtLT5pbnRlcnBy
ZXRlcjsKICAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCA9IHZQQyAtIGluc3RydWN0aW9u
cygpLmJlZ2luKCk7CiAKICAgICBpZiAodlBDWzBdLnUub3Bjb2RlID09IGludGVycHJldGVyLT5n
ZXRPcGNvZGUob3BfZ2V0X2J5X2lkKSkgewpAQCAtMTYwNyw5ICsxNjA3LDkgQEAgQ29kZUJsb2Nr
OjpDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAgICwgbV9udW1DYWxsZWVSZWdpc3Rl
cnMob3RoZXIubV9udW1DYWxsZWVSZWdpc3RlcnMpCiAgICAgLCBtX251bVZhcnMob3RoZXIubV9u
dW1WYXJzKQogICAgICwgbV9pc0NvbnN0cnVjdG9yKG90aGVyLm1faXNDb25zdHJ1Y3RvcikKLSAg
ICAsIG1fdW5saW5rZWRDb2RlKCpvdGhlci5tX2dsb2JhbERhdGEsIG90aGVyLm1fb3duZXJFeGVj
dXRhYmxlLmdldCgpLCBvdGhlci5tX3VubGlua2VkQ29kZS5nZXQoKSkKLSAgICAsIG1fb3duZXJF
eGVjdXRhYmxlKCpvdGhlci5tX2dsb2JhbERhdGEsIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdl
dCgpLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKLSAgICAsIG1fZ2xvYmFsRGF0YShv
dGhlci5tX2dsb2JhbERhdGEpCisgICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIubV92bSwgb3Ro
ZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgpKQor
ICAgICwgbV9vd25lckV4ZWN1dGFibGUoKm90aGVyLm1fdm0sIG90aGVyLm1fb3duZXJFeGVjdXRh
YmxlLmdldCgpLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKKyAgICAsIG1fdm0ob3Ro
ZXIubV92bSkKICAgICAsIG1faW5zdHJ1Y3Rpb25zKG90aGVyLm1faW5zdHJ1Y3Rpb25zKQogICAg
ICwgbV90aGlzUmVnaXN0ZXIob3RoZXIubV90aGlzUmVnaXN0ZXIpCiAgICAgLCBtX2FyZ3VtZW50
c1JlZ2lzdGVyKG90aGVyLm1fYXJndW1lbnRzUmVnaXN0ZXIpCkBAIC0xNjQ4LDE0ICsxNjQ4LDE0
IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKIH0KIAogQ29kZUJs
b2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtl
ZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIHVuc2lnbmVkIGJhc2VTY29wZURlcHRoLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBz
b3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBQYXNzT3duUHRyPENvZGVCbG9j
az4gYWx0ZXJuYXRpdmUpCi0gICAgOiBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPmdsb2Jh
bERhdGEoKSwgb3duZXJFeGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpCi0gICAgLCBtX2hlYXAoJm1f
Z2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkKKyAgICA6IG1fZ2xvYmFsT2JqZWN0KGds
b2JhbE9iamVjdC0+dm0oKSwgb3duZXJFeGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpCisgICAgLCBt
X2hlYXAoJm1fZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApCiAgICAgLCBtX251bUNhbGxlZVJlZ2lz
dGVycyh1bmxpbmtlZENvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMpCiAgICAgLCBtX251
bVZhcnModW5saW5rZWRDb2RlQmxvY2stPm1fbnVtVmFycykKICAgICAsIG1faXNDb25zdHJ1Y3Rv
cih1bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpKQotICAgICwgbV91bmxpbmtlZENv
ZGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRD
b2RlQmxvY2spCi0gICAgLCBtX293bmVyRXhlY3V0YWJsZShnbG9iYWxPYmplY3QtPmdsb2JhbERh
dGEoKSwgb3duZXJFeGVjdXRhYmxlLCBvd25lckV4ZWN1dGFibGUpCi0gICAgLCBtX2dsb2JhbERh
dGEodW5saW5rZWRDb2RlQmxvY2stPmdsb2JhbERhdGEoKSkKKyAgICAsIG1fdW5saW5rZWRDb2Rl
KGdsb2JhbE9iamVjdC0+dm0oKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaykK
KyAgICAsIG1fb3duZXJFeGVjdXRhYmxlKGdsb2JhbE9iamVjdC0+dm0oKSwgb3duZXJFeGVjdXRh
YmxlLCBvd25lckV4ZWN1dGFibGUpCisgICAgLCBtX3ZtKHVubGlua2VkQ29kZUJsb2NrLT52bSgp
KQogICAgICwgbV90aGlzUmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2stPnRoaXNSZWdpc3Rlcigp
KQogICAgICwgbV9hcmd1bWVudHNSZWdpc3Rlcih1bmxpbmtlZENvZGVCbG9jay0+YXJndW1lbnRz
UmVnaXN0ZXIoKSkKICAgICAsIG1fYWN0aXZhdGlvblJlZ2lzdGVyKHVubGlua2VkQ29kZUJsb2Nr
LT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkKQEAgLTE2NjksNyArMTY2OSw3IEBAIENvZGVCbG9jazo6
Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAsIG1fb3B0aW1pemF0aW9uRGVsYXlD
b3VudGVyKDApCiAgICAgLCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKDApCiB7Ci0gICAg
bV9nbG9iYWxEYXRhLT5zdGFydGVkQ29tcGlsaW5nKHRoaXMpOworICAgIG1fdm0tPnN0YXJ0ZWRD
b21waWxpbmcodGhpcyk7CiAKICAgICBBU1NFUlQobV9zb3VyY2UpOwogICAgIHNldE51bVBhcmFt
ZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CkBAIC0xNjgwLDcgKzE2
ODAsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgc2V0
SWRlbnRpZmllcnModW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXJzKCkpOwogICAgIHNldENv
bnN0YW50UmVnaXN0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVycygpKTsK
ICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2stPnVzZXNHbG9iYWxPYmplY3QoKSkKLSAgICAgICAg
bV9jb25zdGFudFJlZ2lzdGVyc1t1bmxpbmtlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0UmVnaXN0
ZXIoKV0uc2V0KCptX2dsb2JhbERhdGEsIG93bmVyRXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0KTsK
KyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1t1bmxpbmtlZENvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0UmVnaXN0ZXIoKV0uc2V0KCptX3ZtLCBvd25lckV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCk7
CiAgICAgbV9mdW5jdGlvbkRlY2xzLmdyb3codW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVu
Y3Rpb25EZWNscygpKTsKICAgICBmb3IgKHNpemVfdCBjb3VudCA9IHVubGlua2VkQ29kZUJsb2Nr
LT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSwgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAg
ICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUgPSB1bmxp
bmtlZENvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGkpOwpAQCAtMTY4OSw4ICsxNjg5LDggQEAgQ29k
ZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICB1bnNpZ25lZCBz
dGFydE9mZnNldCA9IHNvdXJjZU9mZnNldCArIHVubGlua2VkRXhlY3V0YWJsZS0+c3RhcnRPZmZz
ZXQoKTsKICAgICAgICAgdW5zaWduZWQgc291cmNlTGVuZ3RoID0gdW5saW5rZWRFeGVjdXRhYmxl
LT5zb3VyY2VMZW5ndGgoKTsKICAgICAgICAgU291cmNlQ29kZSBjb2RlKG1fc291cmNlLCBzdGFy
dE9mZnNldCwgc3RhcnRPZmZzZXQgKyBzb3VyY2VMZW5ndGgsIGZpcnN0TGluZSk7Ci0gICAgICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3Jl
YXRlKCptX2dsb2JhbERhdGEsIGNvZGUsIHVubGlua2VkRXhlY3V0YWJsZSwgZmlyc3RMaW5lLCBm
aXJzdExpbmUgKyBsaW5lQ291bnQpOwotICAgICAgICBtX2Z1bmN0aW9uRGVjbHNbaV0uc2V0KCpt
X2dsb2JhbERhdGEsIG93bmVyRXhlY3V0YWJsZSwgZXhlY3V0YWJsZSk7CisgICAgICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCpt
X3ZtLCBjb2RlLCB1bmxpbmtlZEV4ZWN1dGFibGUsIGZpcnN0TGluZSwgZmlyc3RMaW5lICsgbGlu
ZUNvdW50KTsKKyAgICAgICAgbV9mdW5jdGlvbkRlY2xzW2ldLnNldCgqbV92bSwgb3duZXJFeGVj
dXRhYmxlLCBleGVjdXRhYmxlKTsKICAgICB9CiAKICAgICBtX2Z1bmN0aW9uRXhwcnMuZ3Jvdyh1
bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkV4cHJzKCkpOwpAQCAtMTcwMSw4ICsx
NzAxLDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAg
ICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IHNvdXJjZU9mZnNldCArIHVubGlua2VkRXhlY3V0YWJs
ZS0+c3RhcnRPZmZzZXQoKTsKICAgICAgICAgdW5zaWduZWQgc291cmNlTGVuZ3RoID0gdW5saW5r
ZWRFeGVjdXRhYmxlLT5zb3VyY2VMZW5ndGgoKTsKICAgICAgICAgU291cmNlQ29kZSBjb2RlKG1f
c291cmNlLCBzdGFydE9mZnNldCwgc3RhcnRPZmZzZXQgKyBzb3VyY2VMZW5ndGgsIGZpcnN0TGlu
ZSk7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6Y3JlYXRlKCptX2dsb2JhbERhdGEsIGNvZGUsIHVubGlua2VkRXhlY3V0YWJsZSwg
Zmlyc3RMaW5lLCBmaXJzdExpbmUgKyBsaW5lQ291bnQpOwotICAgICAgICBtX2Z1bmN0aW9uRXhw
cnNbaV0uc2V0KCptX2dsb2JhbERhdGEsIG93bmVyRXhlY3V0YWJsZSwgZXhlY3V0YWJsZSk7Cisg
ICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6Y3JlYXRlKCptX3ZtLCBjb2RlLCB1bmxpbmtlZEV4ZWN1dGFibGUsIGZpcnN0TGluZSwgZmly
c3RMaW5lICsgbGluZUNvdW50KTsKKyAgICAgICAgbV9mdW5jdGlvbkV4cHJzW2ldLnNldCgqbV92
bSwgb3duZXJFeGVjdXRhYmxlLCBleGVjdXRhYmxlKTsKICAgICB9CiAKICAgICBpZiAodW5saW5r
ZWRDb2RlQmxvY2stPmhhc1JhcmVEYXRhKCkpIHsKQEAgLTE3OTEsNyArMTc5MSw3IEBAIENvZGVC
bG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICBWZWN0b3I8SW5zdHJ1Y3Rp
b24sIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBpbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25Db3Vu
dCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB1bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpOyApIHsKICAgICAgICAgdW5zaWduZWQgb3BMZW5ndGggPSBvcGNvZGVM
ZW5ndGgocGNbaV0udS5vcGNvZGUpOwotICAgICAgICBpbnN0cnVjdGlvbnNbaV0gPSBnbG9iYWxE
YXRhKCktPmludGVycHJldGVyLT5nZXRPcGNvZGUocGNbaV0udS5vcGNvZGUpOworICAgICAgICBp
bnN0cnVjdGlvbnNbaV0gPSB2bSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlKHBjW2ldLnUub3Bj
b2RlKTsKICAgICAgICAgZm9yIChzaXplX3QgaiA9IDE7IGogPCBvcExlbmd0aDsgKytqKSB7CiAg
ICAgICAgICAgICBpZiAoc2l6ZW9mKGludDMyX3QpICE9IHNpemVvZihpbnRwdHJfdCkpCiAgICAg
ICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBqXS51LnBvaW50ZXIgPSAwOwpAQCAtMTg5MSw3
ICsxODkxLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAg
ICAgICAgICAgaW50IGluZmVycmVkSW5saW5lQ2FwYWNpdHkgPSBwY1tpICsgb3BMZW5ndGggLSAy
XS51Lm9wZXJhbmQ7CiAKICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAx
XSA9IG9iamVjdEFsbG9jYXRpb25Qcm9maWxlOwotICAgICAgICAgICAgb2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUtPmluaXRpYWxpemUoKmdsb2JhbERhdGEoKSwKKyAgICAgICAgICAgIG9iamVjdEFs
bG9jYXRpb25Qcm9maWxlLT5pbml0aWFsaXplKCp2bSgpLAogICAgICAgICAgICAgICAgIG1fb3du
ZXJFeGVjdXRhYmxlLmdldCgpLCBtX2dsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCksIGlu
ZmVycmVkSW5saW5lQ2FwYWNpdHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTE5NDYsMTMgKzE5NDYsMTMgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJs
ZSogbwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBpZiAoZW50cnkuY291
bGRCZVdhdGNoZWQoKSkgewotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgMF0gPSBn
bG9iYWxEYXRhKCktPmludGVycHJldGVyLT5nZXRPcGNvZGUob3BfaW5pdF9nbG9iYWxfY29uc3Rf
Y2hlY2spOworICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgMF0gPSB2bSgpLT5pbnRl
cnByZXRlci0+Z2V0T3Bjb2RlKG9wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrKTsKICAgICAgICAg
ICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDFdID0gJmdsb2JhbE9iamVjdC0+cmVnaXN0ZXJBdChl
bnRyeS5nZXRJbmRleCgpKTsKICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDNdID0g
ZW50cnkuYWRkcmVzc09mSXNXYXRjaGVkKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgMF0gPSBnbG9iYWxEYXRh
KCktPmludGVycHJldGVyLT5nZXRPcGNvZGUob3BfaW5pdF9nbG9iYWxfY29uc3QpOworICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAwXSA9IHZtKCktPmludGVycHJldGVyLT5nZXRPcGNvZGUo
b3BfaW5pdF9nbG9iYWxfY29uc3QpOwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAxXSA9
ICZnbG9iYWxPYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpAQCAtMTk4MCwxOCArMTk4MCwxOCBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAKICAgICBpZiAoT3B0aW9uczo6ZHVtcEdlbmVy
YXRlZEJ5dGVjb2RlcygpKQogICAgICAgICBkdW1wQnl0ZWNvZGUoKTsKLSAgICBtX2dsb2JhbERh
dGEtPmZpbmlzaGVkQ29tcGlsaW5nKHRoaXMpOworICAgIG1fdm0tPmZpbmlzaGVkQ29tcGlsaW5n
KHRoaXMpOwogfQogCiBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogewotICAgIGlmIChtX2dsb2Jh
bERhdGEtPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikKLSAgICAgICAgbV9nbG9iYWxEYXRhLT5tX3Bl
ckJ5dGVjb2RlUHJvZmlsZXItPm5vdGlmeURlc3RydWN0aW9uKHRoaXMpOworICAgIGlmIChtX3Zt
LT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCisgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9m
aWxlci0+bm90aWZ5RGVzdHJ1Y3Rpb24odGhpcyk7CiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQp
CiAgICAgLy8gUmVtb3ZlIG15c2VsZiBmcm9tIHRoZSBzZXQgb2YgREZHIGNvZGUgYmxvY2tzLiBO
b3RlIHRoYXQgSSBtYXkgbm90IGJlIGluIHRoaXMgc2V0CiAgICAgLy8gKGJlY2F1c2UgSSdtIG5v
dCBhIERGRyBjb2RlIGJsb2NrKSwgaW4gd2hpY2ggY2FzZSB0aGlzIGlzIGEgbm8tb3AgYW55d2F5
LgotICAgIG1fZ2xvYmFsRGF0YS0+aGVhcC5tX2RmZ0NvZGVCbG9ja3MubV9zZXQucmVtb3ZlKHRo
aXMpOworICAgIG1fdm0tPmhlYXAubV9kZmdDb2RlQmxvY2tzLm1fc2V0LnJlbW92ZSh0aGlzKTsK
ICNlbmRpZgogICAgIAogI2lmIEVOQUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCkBAIC0yMDM2
LDcgKzIwMzYsNyBAQCB2b2lkIENvZGVCbG9jazo6c2V0TnVtUGFyYW1ldGVycyhpbnQgbmV3CiAK
IHZvaWQgQ29kZUJsb2NrOjp2aXNpdFN0cnVjdHVyZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIElu
c3RydWN0aW9uKiB2UEMpCiB7Ci0gICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV9nbG9i
YWxEYXRhLT5pbnRlcnByZXRlcjsKKyAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX3Zt
LT5pbnRlcnByZXRlcjsKIAogICAgIGlmICh2UENbMF0udS5vcGNvZGUgPT0gaW50ZXJwcmV0ZXIt
PmdldE9wY29kZShvcF9nZXRfYnlfaWQpICYmIHZQQ1s0XS51LnN0cnVjdHVyZSkgewogICAgICAg
ICB2aXNpdG9yLmFwcGVuZCgmdlBDWzRdLnUuc3RydWN0dXJlKTsKQEAgLTIyMzAsNyArMjIzMCw3
IEBAIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2VVbmxpbmtpbmcgPSBmYWwKIHZvaWQgQ29kZUJs
b2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCiB7CiAjaWYgRU5BQkxFKExMSU5UKQotICAg
IEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IG1fZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXI7Cisg
ICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV92bS0+aW50ZXJwcmV0ZXI7CiAgICAgaWYg
KCEhbnVtYmVyT2ZJbnN0cnVjdGlvbnMoKSkgewogICAgICAgICBjb25zdCBWZWN0b3I8dW5zaWdu
ZWQ+JiBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucyA9IG1fdW5saW5rZWRDb2RlLT5wcm9wZXJ0
eUFjY2Vzc0luc3RydWN0aW9ucygpOwogICAgICAgICBmb3IgKHNpemVfdCBzaXplID0gcHJvcGVy
dHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkgewpAQCAt
MjM1Miw3ICsyMzUyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViLT5leGVjdXRhYmxlKCktPmhh
c2hGb3IoY2FsbExpbmtJbmZvKGkpLnNwZWNpYWxpemF0aW9uS2luZCgpKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIiwgc3R1YiByb3V0aW5lICIsIFJhd1BvaW50ZXIoc3R1Yiks
ICIuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mbyhpKS51bmxpbmsoKm1fZ2xvYmFsRGF0YSwgcmVwYXRjaEJ1ZmZlcik7
CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8oaSkudW5saW5rKCptX3ZtLCBy
ZXBhdGNoQnVmZmVyKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIUhlYXA6OmlzTWFya2VkKGNhbGxMaW5rSW5mbyhpKS5jYWxsZWUuZ2V0KCkpKSB7
CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlVW5saW5raW5nKSB7CkBAIC0yMzYzLDcg
KzIzNjMsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mbyhpKS5zcGVjaWFsaXphdGlv
bktpbmQoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIikuXG4iKTsKICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8oaSkudW5saW5r
KCptX2dsb2JhbERhdGEsIHJlcGF0Y2hCdWZmZXIpOworICAgICAgICAgICAgICAgICAgICBjYWxs
TGlua0luZm8oaSkudW5saW5rKCptX3ZtLCByZXBhdGNoQnVmZmVyKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoISFjYWxsTGlua0luZm8oaSkubGFz
dFNlZW5DYWxsZWUKQEAgLTI1NDUsNyArMjU0NSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpjcmVhdGVB
Y3RpdmF0aW9uKENhbGxGcmEKICAgICBBU1NFUlQoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUp
OwogICAgIEFTU0VSVChuZWVkc0Z1bGxTY29wZUNoYWluKCkpOwogICAgIEFTU0VSVCghY2FsbEZy
YW1lLT51bmNoZWNrZWRSKGFjdGl2YXRpb25SZWdpc3RlcigpKS5qc1ZhbHVlKCkpOwotICAgIEpT
QWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUsIHRoaXMpOworICAgIEpTQWN0aXZhdGlvbiogYWN0aXZh
dGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKGNhbGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1lLCB0
aGlzKTsKICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYWN0aXZhdGlvblJlZ2lzdGVyKCkpID0g
SlNWYWx1ZShhY3RpdmF0aW9uKTsKICAgICBjYWxsRnJhbWUtPnNldFNjb3BlKGFjdGl2YXRpb24p
OwogfQpAQCAtMjU3MywxMyArMjU3MywxMyBAQCB2b2lkIENvZGVCbG9jazo6dW5saW5rQ2FsbHMo
KQogI2VuZGlmCiAgICAgaWYgKCFtX2NhbGxMaW5rSW5mb3Muc2l6ZSgpKQogICAgICAgICByZXR1
cm47Ci0gICAgaWYgKCFtX2dsb2JhbERhdGEtPmNhblVzZUpJVCgpKQorICAgIGlmICghbV92bS0+
Y2FuVXNlSklUKCkpCiAgICAgICAgIHJldHVybjsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hC
dWZmZXIodGhpcyk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NhbGxMaW5rSW5mb3Mu
c2l6ZSgpOyBpKyspIHsKICAgICAgICAgaWYgKCFtX2NhbGxMaW5rSW5mb3NbaV0uaXNMaW5rZWQo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBtX2NhbGxMaW5rSW5mb3NbaV0udW5s
aW5rKCptX2dsb2JhbERhdGEsIHJlcGF0Y2hCdWZmZXIpOworICAgICAgICBtX2NhbGxMaW5rSW5m
b3NbaV0udW5saW5rKCptX3ZtLCByZXBhdGNoQnVmZmVyKTsKICAgICB9CiB9CiAKQEAgLTI1OTMs
NyArMjU5Myw3IEBAIHZvaWQgQ29kZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKCkKICAgICAg
ICAgcmV0dXJuOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcih0aGlzKTsKICAgICB3
aGlsZSAobV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ0NhbGxzLmVuZCgpKQot
ICAgICAgICBtX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5rKCptX2dsb2JhbERhdGEsIHJl
cGF0Y2hCdWZmZXIpOworICAgICAgICBtX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5rKCpt
X3ZtLCByZXBhdGNoQnVmZmVyKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCkBAIC0yNjY2
LDcgKzI2NjYsNyBAQCBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKiBDb2RlQmxvY2s6OmZpbmRDCiAg
ICAgfQogICAgIAogICAgIC8vIFRoZSBzdHViIHJvdXRpbmUgbWF5IGhhdmUgYmVlbiBqZXR0aXNv
bmVkLiBUaGlzIGlzIHJhcmUsIGJ1dCB3ZSBoYXZlIHRvIGhhbmRsZSBpdC4KLSAgICBjb25zdCBK
SVRTdHViUm91dGluZVNldCYgc2V0ID0gbV9nbG9iYWxEYXRhLT5oZWFwLmppdFN0dWJSb3V0aW5l
cygpOworICAgIGNvbnN0IEpJVFN0dWJSb3V0aW5lU2V0JiBzZXQgPSBtX3ZtLT5oZWFwLmppdFN0
dWJSb3V0aW5lcygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IHNldC5zaXplKCk7IGktLTspIHsK
ICAgICAgICAgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKiBnZW5lcmljU3R1YiA9IHNldC5hdChpKTsK
ICAgICAgICAgaWYgKCFnZW5lcmljU3R1Yi0+aXNDbG9zdXJlQ2FsbCgpKQpAQCAtMjg4NSwxNyAr
Mjg4NSwxNyBAQCB2b2lkIENvZGVCbG9jazo6amV0dGlzb24oKQogCiB2b2lkIFByb2dyYW1Db2Rl
QmxvY2s6OmpldHRpc29uSW1wbCgpCiB7Ci0gICAgc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFi
bGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29kZSgqZ2xvYmFsRGF0
YSgpKTsKKyAgICBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJs
ZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2RlKCp2bSgpKTsKIH0KIAogdm9pZCBFdmFsQ29kZUJs
b2NrOjpqZXR0aXNvbkltcGwoKQogewotICAgIHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4o
b3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGUoKmdsb2JhbERhdGEoKSk7
CisgICAgc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpl
dHRpc29uT3B0aW1pemVkQ29kZSgqdm0oKSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25Db2RlQmxvY2s6
OmpldHRpc29uSW1wbCgpCiB7Ci0gICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
b3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGVGb3IoKmdsb2JhbERhdGEo
KSwgbV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKKyAg
ICBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpl
dHRpc29uT3B0aW1pemVkQ29kZUZvcigqdm0oKSwgbV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNv
bnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKIH0KIAogYm9vbCBQcm9ncmFtQ29kZUJsb2NrOjpqaXRD
b21waWxlSW1wbChFeGVjU3RhdGUqIGV4ZWMpCkBAIC0zMjgwLDE4ICszMjgwLDE4IEBAIHZvaWQg
Q29kZUJsb2NrOjpkdW1wVmFsdWVQcm9maWxlcygpCiAKIHNpemVfdCBDb2RlQmxvY2s6OnByZWRp
Y3RlZE1hY2hpbmVDb2RlU2l6ZSgpCiB7Ci0gICAgLy8gVGhpcyB3aWxsIGJlIGNhbGxlZCBmcm9t
IENvZGVCbG9jazo6Q29kZUJsb2NrIGJlZm9yZSBlaXRoZXIgbV9nbG9iYWxEYXRhIG9yIHRoZQor
ICAgIC8vIFRoaXMgd2lsbCBiZSBjYWxsZWQgZnJvbSBDb2RlQmxvY2s6OkNvZGVCbG9jayBiZWZv
cmUgZWl0aGVyIG1fdm0gb3IgdGhlCiAgICAgLy8gaW5zdHJ1Y3Rpb25zIGhhdmUgYmVlbiBpbml0
aWFsaXplZC4gSXQncyBPSyB0byByZXR1cm4gMCBiZWNhdXNlIHdoYXQgd2lsbCByZWFsbHkKICAg
ICAvLyBtYXR0ZXIgaXMgdGhlIHJlY29tcHV0YXRpb24gb2YgdGhpcyB2YWx1ZSB3aGVuIHRoZSBz
bG93IHBhdGggaXMgdHJpZ2dlcmVkLgotICAgIGlmICghbV9nbG9iYWxEYXRhKQorICAgIGlmICgh
bV92bSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgaWYgKCFtX2dsb2JhbERhdGEtPm1h
Y2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVCkKKyAgICBpZiAoIW1f
dm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVCkKICAgICAg
ICAgcmV0dXJuIDA7IC8vIEl0J3MgYXMgZ29vZCBvZiBhIHByZWRpY3Rpb24gYXMgd2UnbGwgZ2V0
LgogICAgIAogICAgIC8vIEJlIGNvbnNlcnZhdGl2ZTogcmV0dXJuIGEgc2l6ZSB0aGF0IHdpbGwg
YmUgYW4gb3ZlcmVzdGltYXRpb24gODQlIG9mIHRoZSB0aW1lLgotICAgIGRvdWJsZSBtdWx0aXBs
aWVyID0gbV9nbG9iYWxEYXRhLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFz
ZWxpbmVKSVQubWVhbigpICsKLSAgICAgICAgbV9nbG9iYWxEYXRhLT5tYWNoaW5lQ29kZUJ5dGVz
UGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQuc3RhbmRhcmREZXZpYXRpb24oKTsKKyAgICBk
b3VibGUgbXVsdGlwbGllciA9IG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRG
b3JCYXNlbGluZUpJVC5tZWFuKCkgKworICAgICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVy
Qnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQuc3RhbmRhcmREZXZpYXRpb24oKTsKICAgICAKICAg
ICAvLyBCZSBwYXJhbm9pZDogc2lsZW50bHkgcmVqZWN0IGJvZ3VzIG11bHRpcGllcnMuIFNpbGVu
dGx5IGRvaW5nIHRoZSAid3JvbmciIHRoaW5nCiAgICAgLy8gaGVyZSBpcyBPSywgc2luY2UgdGhp
cyB3aG9sZSBtZXRob2QgaXMganVzdCBhIGhldXJpc3RpYy4KQEAgLTMzMTIsNyArMzMxMiw3IEBA
IHNpemVfdCBDb2RlQmxvY2s6OnByZWRpY3RlZE1hY2hpbmVDb2RlU2kKIAogYm9vbCBDb2RlQmxv
Y2s6OnVzZXNPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7Ci0gICAgSW50ZXJwcmV0ZXIqIGlu
dGVycHJldGVyID0gZ2xvYmFsRGF0YSgpLT5pbnRlcnByZXRlcjsKKyAgICBJbnRlcnByZXRlciog
aW50ZXJwcmV0ZXIgPSB2bSgpLT5pbnRlcnByZXRlcjsKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb25zQmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpOwogICAgIHVuc2lnbmVkIGluc3Ry
dWN0aW9uQ291bnQgPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNDg2NTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3NywxNCArMzc3LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGFw
cGVuZFdlYWtSZWZlcmVuY2UoSlNDZWxsKiB0YXJnZXQpCiAgICAgICAgIHsKICAgICAgICAgICAg
IGNyZWF0ZURGR0RhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAgICAgICAgbV9kZmdEYXRhLT53ZWFr
UmVmZXJlbmNlcy5hcHBlbmQoV3JpdGVCYXJyaWVyPEpTQ2VsbD4oKmdsb2JhbERhdGEoKSwgb3du
ZXJFeGVjdXRhYmxlKCksIHRhcmdldCkpOworICAgICAgICAgICAgbV9kZmdEYXRhLT53ZWFrUmVm
ZXJlbmNlcy5hcHBlbmQoV3JpdGVCYXJyaWVyPEpTQ2VsbD4oKnZtKCksIG93bmVyRXhlY3V0YWJs
ZSgpLCB0YXJnZXQpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBhcHBlbmRX
ZWFrUmVmZXJlbmNlVHJhbnNpdGlvbihKU0NlbGwqIGNvZGVPcmlnaW4sIEpTQ2VsbCogZnJvbSwg
SlNDZWxsKiB0bykKICAgICAgICAgewogICAgICAgICAgICAgY3JlYXRlREZHRGF0YUlmTmVjZXNz
YXJ5KCk7CiAgICAgICAgICAgICBtX2RmZ0RhdGEtPnRyYW5zaXRpb25zLmFwcGVuZCgKLSAgICAg
ICAgICAgICAgICBXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbigqZ2xvYmFsRGF0YSgpLCBvd25lckV4
ZWN1dGFibGUoKSwgY29kZU9yaWdpbiwgZnJvbSwgdG8pKTsKKyAgICAgICAgICAgICAgICBXZWFr
UmVmZXJlbmNlVHJhbnNpdGlvbigqdm0oKSwgb3duZXJFeGVjdXRhYmxlKCksIGNvZGVPcmlnaW4s
IGZyb20sIHRvKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIERGRzo6TWluaWZpZWRH
cmFwaCYgbWluaWZpZWRERkcoKQpAQCAtNDI4LDcgKzQyOCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
I2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICAgICAgaWYgKG1faml0Q29kZS5qaXRUeXBlKCkg
PT0gSklUQ29kZTo6REZHSklUKSB7CiAgICAgICAgICAgICAgICAgY3JlYXRlREZHRGF0YUlmTmVj
ZXNzYXJ5KCk7Ci0gICAgICAgICAgICAgICAgbV9nbG9iYWxEYXRhLT5oZWFwLm1fZGZnQ29kZUJs
b2Nrcy5tX3NldC5hZGQodGhpcyk7CisgICAgICAgICAgICAgICAgbV92bS0+aGVhcC5tX2RmZ0Nv
ZGVCbG9ja3MubV9zZXQuYWRkKHRoaXMpOwogICAgICAgICAgICAgfQogI2VuZGlmCiAgICAgICAg
IH0KQEAgLTQ4NSw4ICs0ODUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBTY3JpcHRF
eGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBtX293bmVyRXhlY3V0
YWJsZS5nZXQoKTsgfQogCi0gICAgICAgIHZvaWQgc2V0R2xvYmFsRGF0YShKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEpIHsgbV9nbG9iYWxEYXRhID0gZ2xvYmFsRGF0YTsgfQotICAgICAgICBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEoKSB7IHJldHVybiBtX2dsb2JhbERhdGE7IH0KKyAgICAgICAg
dm9pZCBzZXRHbG9iYWxEYXRhKFZNKiB2bSkgeyBtX3ZtID0gdm07IH0KKyAgICAgICAgVk0qIHZt
KCkgeyByZXR1cm4gbV92bTsgfQogCiAgICAgICAgIHZvaWQgc2V0VGhpc1JlZ2lzdGVyKGludCB0
aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlzUmVnaXN0ZXI7IH0KICAgICAgICAg
aW50IHRoaXNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGhpc1JlZ2lzdGVyOyB9CkBAIC02
MTMsNyArNjEzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAgICAgZ2V0VmFsdWVQ
cm9maWxlQnl0ZWNvZGVPZmZzZXQ8VmFsdWVQcm9maWxlPik7CiAgICAgICAgICAgICBBU1NFUlQo
cmVzdWx0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IC0xKTsKICAgICAgICAgICAgIEFTU0VSVChpbnN0
cnVjdGlvbnMoKVtieXRlY29kZU9mZnNldCArIG9wY29kZUxlbmd0aCgKLSAgICAgICAgICAgICAg
ICAgICAgICAgbV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoCisgICAgICAg
ICAgICAgICAgICAgICAgIG1fdm0tPmludGVycHJldGVyLT5nZXRPcGNvZGVJRCgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygpWwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0XS51Lm9wY29kZSkpIC0gMV0udS5wcm9maWxlID09IHJl
c3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtODE2LDcgKzgxNiw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBt
X2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsKICAgICAgICAgICAgIG1fY29uc3RhbnRSZWdpc3Rl
cnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKLSAgICAgICAgICAgIG1fY29uc3Rh
bnRSZWdpc3RlcnMubGFzdCgpLnNldChtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBtX293
bmVyRXhlY3V0YWJsZS5nZXQoKSwgdik7CisgICAgICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJz
Lmxhc3QoKS5zZXQobV9nbG9iYWxPYmplY3QtPnZtKCksIG1fb3duZXJFeGVjdXRhYmxlLmdldCgp
LCB2KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KIApAQCAtMTA5Myw3
ICsxMDkzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzaXplX3QgY291bnQgPSBj
b25zdGFudHMuc2l6ZSgpOwogICAgICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5yZXNpemUo
Y291bnQpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQot
ICAgICAgICAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbaV0uc2V0KCptX2dsb2JhbERhdGEs
IG93bmVyRXhlY3V0YWJsZSgpLCBjb25zdGFudHNbaV0uZ2V0KCkpOworICAgICAgICAgICAgICAg
IG1fY29uc3RhbnRSZWdpc3RlcnNbaV0uc2V0KCptX3ZtLCBvd25lckV4ZWN1dGFibGUoKSwgY29u
c3RhbnRzW2ldLmdldCgpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcEJ5dGVjb2Rl
KFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJlZ2luLCBjb25z
dCBJbnN0cnVjdGlvbiomKTsKQEAgLTExNTksNyArMTE1OSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRDb2RlQmxvY2s+IG1fdW5saW5rZWRDb2RlOwog
ICAgICAgICBpbnQgbV9udW1QYXJhbWV0ZXJzOwogICAgICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0
RXhlY3V0YWJsZT4gbV9vd25lckV4ZWN1dGFibGU7Ci0gICAgICAgIEpTR2xvYmFsRGF0YSogbV9n
bG9iYWxEYXRhOworICAgICAgICBWTSogbV92bTsKIAogICAgICAgICBSZWZDb3VudGVkQXJyYXk8
SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rpb25zOwogICAgICAgICBpbnQgbV90aGlzUmVnaXN0ZXI7
CkBAIC0xMTkyLDEyICsxMTkyLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdHJ1Y3Qg
V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24gewogICAgICAgICAgICAgV2Vha1JlZmVyZW5jZVRyYW5z
aXRpb24oKSB7IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgV2Vha1JlZmVyZW5jZVRyYW5z
aXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBKU0NlbGwqIGNv
ZGVPcmlnaW4sIEpTQ2VsbCogZnJvbSwgSlNDZWxsKiB0bykKLSAgICAgICAgICAgICAgICA6IG1f
ZnJvbShnbG9iYWxEYXRhLCBvd25lciwgZnJvbSkKLSAgICAgICAgICAgICAgICAsIG1fdG8oZ2xv
YmFsRGF0YSwgb3duZXIsIHRvKQorICAgICAgICAgICAgV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24o
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU0NlbGwqIGNvZGVPcmlnaW4sIEpTQ2VsbCogZnJvbSwg
SlNDZWxsKiB0bykKKyAgICAgICAgICAgICAgICA6IG1fZnJvbSh2bSwgb3duZXIsIGZyb20pCisg
ICAgICAgICAgICAgICAgLCBtX3RvKHZtLCBvd25lciwgdG8pCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgaWYgKCEhY29kZU9yaWdpbikKLSAgICAgICAgICAgICAgICAgICAgbV9jb2Rl
T3JpZ2luLnNldChnbG9iYWxEYXRhLCBvd25lciwgY29kZU9yaWdpbik7CisgICAgICAgICAgICAg
ICAgICAgIG1fY29kZU9yaWdpbi5zZXQodm0sIG93bmVyLCBjb2RlT3JpZ2luKTsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9jb2RlT3JpZ2luOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZhbENvZGVDYWNoZS5o
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZh
bENvZGVDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAoIWluU3RyaWN0Q29udGV4dCAmJiBldmFsU291cmNlLmxlbmd0aCgpIDwgbWF4Q2FjaGVh
YmxlU291cmNlTGVuZ3RoICYmIHNjb3BlLT5iZWdpbigpLT5pc1ZhcmlhYmxlT2JqZWN0KCkgJiYg
bV9jYWNoZU1hcC5zaXplKCkgPCBtYXhDYWNoZUVudHJpZXMpCi0gICAgICAgICAgICAgICAgbV9j
YWNoZU1hcC5zZXQoZXZhbFNvdXJjZS5pbXBsKCksIFdyaXRlQmFycmllcjxFdmFsRXhlY3V0YWJs
ZT4oZXhlYy0+Z2xvYmFsRGF0YSgpLCBvd25lciwgZXZhbEV4ZWN1dGFibGUpKTsKKyAgICAgICAg
ICAgICAgICBtX2NhY2hlTWFwLnNldChldmFsU291cmNlLmltcGwoKSwgV3JpdGVCYXJyaWVyPEV2
YWxFeGVjdXRhYmxlPihleGVjLT52bSgpLCBvd25lciwgZXZhbEV4ZWN1dGFibGUpKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIGV2YWxFeGVjdXRhYmxlOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMu
Y3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgR2V0QnlJ
ZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogICAgIHVuc2lnbmVkIGF0dHJpYnV0
ZXNJZ25vcmVkOwogICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCgKLSAgICAgICAgKnByb2ZpbGVkQmxvY2stPmdsb2Jh
bERhdGEoKSwgaWRlbnQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAg
ICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIGlkZW50LCBhdHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lm
aWNWYWx1ZSk7CiAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgIHNw
ZWNpZmljVmFsdWUgPSAwOwogICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQpAQCAtOTMs
NyArOTMsNyBAQCB2b2lkIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JDaGFpbihHZXRCCiAgICAg
SlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwogICAgICAgICAKICAgICByZXN1bHQubV9vZmZzZXQgPSBj
dXJyZW50U3RydWN0dXJlLT5nZXQoCi0gICAgICAgICpwcm9maWxlZEJsb2NrLT5nbG9iYWxEYXRh
KCksIGlkZW50LCBhdHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgICpw
cm9maWxlZEJsb2NrLT52bSgpLCBpZGVudCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFs
dWUpOwogICAgIGlmIChjdXJyZW50U3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKICAgICAgICAg
c3BlY2lmaWNWYWx1ZSA9IDA7CiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KHJlc3VsdC5tX29mZnNl
dCkpCkBAIC0xNjUsNyArMTY1LDcgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yKAogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzSWdub3JlZDsKICAgICAgICAgSlND
ZWxsKiBzcGVjaWZpY1ZhbHVlOwogICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBzdHJ1Y3R1cmUt
PmdldCgKLSAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT5nbG9iYWxEYXRhKCksIGlkZW50LCBh
dHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgICAgICAqcHJvZmlsZWRC
bG9jay0+dm0oKSwgaWRlbnQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKICAg
ICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgICAgICBzcGVjaWZp
Y1ZhbHVlID0gMDsKICAgICAgICAgCkBAIC0xOTAsNyArMTkwLDcgQEAgR2V0QnlJZFN0YXR1cyBH
ZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRl
c0lnbm9yZWQ7CiAgICAgICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7CiAgICAgICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBteU9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KAotICAgICAgICAgICAg
ICAgICpwcm9maWxlZEJsb2NrLT5nbG9iYWxEYXRhKCksIGlkZW50LCBhdHRyaWJ1dGVzSWdub3Jl
ZCwgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCks
IGlkZW50LCBhdHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1ZSk7CiAgICAgICAgICAgICBp
ZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKICAgICAgICAgICAgICAgICBzcGVjaWZpY1Zh
bHVlID0gMDsKICAgICAgICAgICAgIApAQCAtMjU2LDcgKzI1Niw3IEBAIEdldEJ5SWRTdGF0dXMg
R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogfQogCi1H
ZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSWRlbnRpZmllciYgaWRlbnQpCitHZXRCeUlk
U3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgSWRlbnRpZmllciYgaWRlbnQpCiB7CiAgICAgLy8gRm9yIG5vdyB3ZSBvbmx5IGhhbmRs
ZSB0aGUgc3VwZXIgc2ltcGxlIHNlbGYgYWNjZXNzIGNhc2UuIFdlIGNvdWxkIGhhbmRsZSB0aGUK
ICAgICAvLyBwcm90b3R5cGUgY2FzZSBpbiB0aGUgZnV0dXJlLgpAQCAtMjcxLDEwICsyNzEsMTAg
QEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICByZXR1
cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAKICAgICBHZXRCeUlkU3RhdHVz
IHJlc3VsdDsKLSAgICByZXN1bHQubV93YXNTZWVuSW5KSVQgPSBmYWxzZTsgLy8gVG8gbXkga25v
d2xlZGdlIG5vYm9keSB0aGF0IHVzZXMgY29tcHV0ZUZvcihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1
cmUqLCBJZGVudGlmaWVyJikgcmVhZHMgdGhpcyBmaWVsZCwgYnV0IEkgbWlnaHQgYXMgd2VsbCBi
ZSBob25lc3Q6IG5vLCBpdCB3YXNuJ3Qgc2VlbiBpbiB0aGUgSklULCBzaW5jZSBJIGNvbXB1dGVk
IGl0IHN0YXRpY2FsbHkuCisgICAgcmVzdWx0Lm1fd2FzU2VlbkluSklUID0gZmFsc2U7IC8vIFRv
IG15IGtub3dsZWRnZSBub2JvZHkgdGhhdCB1c2VzIGNvbXB1dGVGb3IoVk0mLCBTdHJ1Y3R1cmUq
LCBJZGVudGlmaWVyJikgcmVhZHMgdGhpcyBmaWVsZCwgYnV0IEkgbWlnaHQgYXMgd2VsbCBiZSBo
b25lc3Q6IG5vLCBpdCB3YXNuJ3Qgc2VlbiBpbiB0aGUgSklULCBzaW5jZSBJIGNvbXB1dGVkIGl0
IHN0YXRpY2FsbHkuCiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKICAgICBKU0NlbGwqIHNwZWNp
ZmljVmFsdWU7Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQoZ2xvYmFsRGF0
YSwgaWRlbnQsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgIHJlc3VsdC5tX29mZnNl
dCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBpZGVudCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7
CiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KHJlc3VsdC5tX29mZnNldCkpCiAgICAgICAgIHJldHVy
biBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOyAvLyBJdCdzIHByb2JhYmx5IGEgcHJvdG90
eXBlIGxvb2t1cC4gR2l2ZSB1cCBvbiBsaWZlIGZvciBub3csIGV2ZW4gdGhvdWdoIHdlIGNvdWxk
IHRvdGFsbHkgYmUgd2F5IHNtYXJ0ZXIgYWJvdXQgaXQuCiAgICAgaWYgKGF0dHJpYnV0ZXMgJiBB
Y2Nlc3NvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3Rh
dHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRTdGF0dXMuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBw
dWJsaWM6CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGb3Io
Q29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSWRlbnRpZmllciYpOwotICAgIHN0
YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwg
SWRlbnRpZmllciYpOworICAgIHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoVk0mLCBT
dHJ1Y3R1cmUqLCBJZGVudGlmaWVyJik7CiAgICAgCiAgICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlOyB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5zdHJ1Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDIw
ICs3MCwyMCBAQCBzdHJ1Y3QgSW5zdHJ1Y3Rpb24gewogICAgICAgICB1Lm9wZXJhbmQgPSBvcGVy
YW5kOwogICAgIH0KIAotICAgIEluc3RydWN0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgSW5zdHJ1Y3Rpb24oVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAg
IHUuc3RydWN0dXJlLmNsZWFyKCk7Ci0gICAgICAgIHUuc3RydWN0dXJlLnNldChnbG9iYWxEYXRh
LCBvd25lciwgc3RydWN0dXJlKTsKKyAgICAgICAgdS5zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwg
c3RydWN0dXJlKTsKICAgICB9Ci0gICAgSW5zdHJ1Y3Rpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4pCisgICAg
SW5zdHJ1Y3Rpb24oVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmVDaGFpbiogc3RydWN0
dXJlQ2hhaW4pCiAgICAgewogICAgICAgICB1LnN0cnVjdHVyZUNoYWluLmNsZWFyKCk7Ci0gICAg
ICAgIHUuc3RydWN0dXJlQ2hhaW4uc2V0KGdsb2JhbERhdGEsIG93bmVyLCBzdHJ1Y3R1cmVDaGFp
bik7CisgICAgICAgIHUuc3RydWN0dXJlQ2hhaW4uc2V0KHZtLCBvd25lciwgc3RydWN0dXJlQ2hh
aW4pOwogICAgIH0KLSAgICBJbnN0cnVjdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Q2VsbCogb3duZXIsIEpTQ2VsbCoganNDZWxsKQorICAgIEluc3RydWN0aW9uKFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgSlNDZWxsKiBqc0NlbGwpCiAgICAgewogICAgICAgICB1LmpzQ2VsbC5jbGVh
cigpOwotICAgICAgICB1LmpzQ2VsbC5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIGpzQ2VsbCk7Cisg
ICAgICAgIHUuanNDZWxsLnNldCh2bSwgb3duZXIsIGpzQ2VsbCk7CiAgICAgfQogCiAgICAgSW5z
dHJ1Y3Rpb24oUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0dGVyRnVuYykgeyB1LmdldHRl
ckZ1bmMgPSBnZXR0ZXJGdW5jOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAkocmV2aXNpb24gMTQ4
NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Q
cm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGVfaAogI2RlZmluZSBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZV9oCiAK
LSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIkpT
R2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAi
U2xvdFZpc2l0b3IuaCIKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc051
bGwoKSB7IHJldHVybiAhbV9hbGxvY2F0b3I7IH0KIAotICAgIHZvaWQgaW5pdGlhbGl6ZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBwcm90b3R5cGUs
IHVuc2lnbmVkIGluZmVycmVkSW5saW5lQ2FwYWNpdHkpCisgICAgdm9pZCBpbml0aWFsaXplKFZN
JiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIHByb3RvdHlwZSwgdW5zaWduZWQgaW5mZXJy
ZWRJbmxpbmVDYXBhY2l0eSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9hbGxvY2F0b3IpOwog
ICAgICAgICBBU1NFUlQoIW1fc3RydWN0dXJlKTsKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgog
ICAgICAgICB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9IDA7CiAgICAgICAgIGlmIChpbmZlcnJl
ZElubGluZUNhcGFjaXR5IDwgSlNGaW5hbE9iamVjdDo6ZGVmYXVsdElubGluZUNhcGFjaXR5KCkp
IHsKICAgICAgICAgICAgIC8vIFRyeSB0byBzaHJpbmsgdGhlIG9iamVjdCBiYXNlZCBvbiBzdGF0
aWMgYW5hbHlzaXMuCi0gICAgICAgICAgICBpbmZlcnJlZElubGluZUNhcGFjaXR5ICs9IHBvc3Np
YmxlRGVmYXVsdFByb3BlcnR5Q291bnQoZ2xvYmFsRGF0YSwgcHJvdG90eXBlKTsKKyAgICAgICAg
ICAgIGluZmVycmVkSW5saW5lQ2FwYWNpdHkgKz0gcG9zc2libGVEZWZhdWx0UHJvcGVydHlDb3Vu
dCh2bSwgcHJvdG90eXBlKTsKIAogICAgICAgICAgICAgaWYgKCFpbmZlcnJlZElubGluZUNhcGFj
aXR5KSB7CiAgICAgICAgICAgICAgICAgLy8gRW1wdHkgb2JqZWN0cyBhcmUgcmFyZSwgc28gbW9z
dCBsaWtlbHkgdGhlIHN0YXRpYyBhbmFseXplciBqdXN0IGRpZG4ndApAQCAtODAsNyArODAsNyBA
QCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChpbmxpbmVDYXBhY2l0eSA8PSBKU0ZpbmFsT2JqZWN0
OjptYXhJbmxpbmVDYXBhY2l0eSgpKTsKIAogICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUg
PSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShpbmxpbmVDYXBhY2l0eSk7Ci0gICAgICAg
IE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJmdsb2JhbERhdGEuaGVhcC5hbGxvY2F0b3JG
b3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihhbGxvY2F0aW9uU2l6ZSk7CisgICAgICAgIE1hcmtl
ZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJnZtLmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91
dERlc3RydWN0b3IoYWxsb2NhdGlvblNpemUpOwogICAgICAgICBBU1NFUlQoYWxsb2NhdG9yLT5j
ZWxsU2l6ZSgpKTsKIAogICAgICAgICAvLyBUYWtlIGFkdmFudGFnZSBvZiBleHRyYSBpbmxpbmUg
Y2FwYWNpdHkgYXZhaWxhYmxlIGluIHRoZSBzaXplIGNsYXNzLgpAQCAtOTAsOCArOTAsOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBpbmxpbmVDYXBhY2l0eSA9IEpTRmluYWxPYmplY3Q6Om1heElu
bGluZUNhcGFjaXR5KCk7CiAKICAgICAgICAgbV9hbGxvY2F0b3IgPSBhbGxvY2F0b3I7Ci0gICAg
ICAgIG1fc3RydWN0dXJlLnNldChnbG9iYWxEYXRhLCBvd25lciwKLSAgICAgICAgICAgIGdsb2Jh
bERhdGEucHJvdG90eXBlTWFwLmVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKHByb3Rv
dHlwZSwgaW5saW5lQ2FwYWNpdHkpKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25l
ciwKKyAgICAgICAgICAgIHZtLnByb3RvdHlwZU1hcC5lbXB0eU9iamVjdFN0cnVjdHVyZUZvclBy
b3RvdHlwZShwcm90b3R5cGUsIGlubGluZUNhcGFjaXR5KSk7CiAgICAgfQogCiAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUoKSB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsgfQpAQCAtMTExLDE3
ICsxMTEsMTcgQEAgcHVibGljOgogCiBwcml2YXRlOgogCi0gICAgdW5zaWduZWQgcG9zc2libGVE
ZWZhdWx0UHJvcGVydHlDb3VudChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTT2JqZWN0KiBw
cm90b3R5cGUpCisgICAgdW5zaWduZWQgcG9zc2libGVEZWZhdWx0UHJvcGVydHlDb3VudChWTSYg
dm0sIEpTT2JqZWN0KiBwcm90b3R5cGUpCiAgICAgewogICAgICAgICBpZiAocHJvdG90eXBlID09
IHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKQogICAgICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICAgICAgc2l6ZV90IGNvdW50ID0gMDsKLSAgICAgICAgUHJvcGVy
dHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lQXJyYXkoJmdsb2JhbERhdGEpOwotICAgICAgICBwcm90
b3R5cGUtPnN0cnVjdHVyZSgpLT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShnbG9iYWxE
YXRhLCBwcm9wZXJ0eU5hbWVBcnJheSwgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CisgICAg
ICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZUFycmF5KCZ2bSk7CisgICAgICAgIHBy
b3RvdHlwZS0+c3RydWN0dXJlKCktPmdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKHZtLCBw
cm9wZXJ0eU5hbWVBcnJheSwgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CiAgICAgICAgIFBy
b3BlcnR5TmFtZUFycmF5RGF0YTo6UHJvcGVydHlOYW1lVmVjdG9yJiBwcm9wZXJ0eU5hbWVWZWN0
b3IgPSBwcm9wZXJ0eU5hbWVBcnJheS5kYXRhKCktPnByb3BlcnR5TmFtZVZlY3RvcigpOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3BlcnR5TmFtZVZlY3Rvci5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHByb3RvdHlwZS0+Z2V0RGlyZWN0KGds
b2JhbERhdGEsIHByb3BlcnR5TmFtZVZlY3RvcltpXSk7CisgICAgICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gcHJvdG90eXBlLT5nZXREaXJlY3Qodm0sIHByb3BlcnR5TmFtZVZlY3RvcltpXSk7CiAK
ICAgICAgICAgICAgIC8vIEZ1bmN0aW9ucyBhcmUgY29tbW9uLCBhbmQgYXJlIHVzdWFsbHkgY2xh
c3MtbGV2ZWwgb2JqZWN0cyB0aGF0IGFyZSBub3Qgb3ZlcnJpZGRlbi4KICAgICAgICAgICAgIGlm
IChqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih2YWx1ZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdC5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYwLDI5ICs2MCwyOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICB1LnByb3RvLmNsZWFy
KCk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTQ2VsbCogb3duZXIsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IF9zdHViUm91dGlu
ZSwgU3RydWN0dXJlKiBfYmFzZSwgYm9vbCBpc0RpcmVjdCkKKyAgICAgICAgdm9pZCBzZXQoVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBfc3R1YlJvdXRp
bmUsIFN0cnVjdHVyZSogX2Jhc2UsIGJvb2wgaXNEaXJlY3QpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHN0dWJSb3V0aW5lID0gX3N0dWJSb3V0aW5lOwotICAgICAgICAgICAgYmFzZS5zZXQoZ2xv
YmFsRGF0YSwgb3duZXIsIF9iYXNlKTsKKyAgICAgICAgICAgIGJhc2Uuc2V0KHZtLCBvd25lciwg
X2Jhc2UpOwogICAgICAgICAgICAgdS5wcm90by5jbGVhcigpOwogICAgICAgICAgICAgaXNDaGFp
biA9IGZhbHNlOwogICAgICAgICAgICAgdGhpcy0+aXNEaXJlY3QgPSBpc0RpcmVjdDsKICAgICAg
ICAgfQogICAgICAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gX3N0dWJSb3V0
aW5lLCBTdHJ1Y3R1cmUqIF9iYXNlLCBTdHJ1Y3R1cmUqIF9wcm90bywgYm9vbCBpc0RpcmVjdCkK
KyAgICAgICAgdm9pZCBzZXQoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0
dWJSb3V0aW5lPiBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIFN0cnVjdHVyZSogX3By
b3RvLCBib29sIGlzRGlyZWN0KQogICAgICAgICB7CiAgICAgICAgICAgICBzdHViUm91dGluZSA9
IF9zdHViUm91dGluZTsKLSAgICAgICAgICAgIGJhc2Uuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBf
YmFzZSk7Ci0gICAgICAgICAgICB1LnByb3RvLnNldChnbG9iYWxEYXRhLCBvd25lciwgX3Byb3Rv
KTsKKyAgICAgICAgICAgIGJhc2Uuc2V0KHZtLCBvd25lciwgX2Jhc2UpOworICAgICAgICAgICAg
dS5wcm90by5zZXQodm0sIG93bmVyLCBfcHJvdG8pOwogICAgICAgICAgICAgaXNDaGFpbiA9IGZh
bHNlOwogICAgICAgICAgICAgdGhpcy0+aXNEaXJlY3QgPSBpc0RpcmVjdDsKICAgICAgICAgfQog
ICAgICAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gX3N0dWJSb3V0aW5lLCBT
dHJ1Y3R1cmUqIF9iYXNlLCBTdHJ1Y3R1cmVDaGFpbiogX2NoYWluLCBib29sIGlzRGlyZWN0KQor
ICAgICAgICB2b2lkIHNldChWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFBhc3NSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IF9zdHViUm91dGluZSwgU3RydWN0dXJlKiBfYmFzZSwgU3RydWN0dXJlQ2hhaW4q
IF9jaGFpbiwgYm9vbCBpc0RpcmVjdCkKICAgICAgICAgewogICAgICAgICAgICAgc3R1YlJvdXRp
bmUgPSBfc3R1YlJvdXRpbmU7Ci0gICAgICAgICAgICBiYXNlLnNldChnbG9iYWxEYXRhLCBvd25l
ciwgX2Jhc2UpOwotICAgICAgICAgICAgdS5jaGFpbi5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIF9j
aGFpbik7CisgICAgICAgICAgICBiYXNlLnNldCh2bSwgb3duZXIsIF9iYXNlKTsKKyAgICAgICAg
ICAgIHUuY2hhaW4uc2V0KHZtLCBvd25lciwgX2NoYWluKTsKICAgICAgICAgICAgIGlzQ2hhaW4g
PSB0cnVlOwogICAgICAgICAgICAgdGhpcy0+aXNEaXJlY3QgPSBpc0RpcmVjdDsKICAgICAgICAg
fQpAQCAtOTIsMTkgKzkyLDE5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgICAgICAKLSAg
ICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwg
U3RydWN0dXJlKiBmaXJzdEJhc2UsIGJvb2wgaXNEaXJlY3QpCisgICAgUG9seW1vcnBoaWNBY2Nl
c3NTdHJ1Y3R1cmVMaXN0KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHVi
Um91dGluZT4gc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogZmlyc3RCYXNlLCBib29sIGlzRGlyZWN0
KQogICAgIHsKLSAgICAgICAgbGlzdFswXS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHN0dWJSb3V0
aW5lLCBmaXJzdEJhc2UsIGlzRGlyZWN0KTsKKyAgICAgICAgbGlzdFswXS5zZXQodm0sIG93bmVy
LCBzdHViUm91dGluZSwgZmlyc3RCYXNlLCBpc0RpcmVjdCk7CiAgICAgfQogCi0gICAgUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxs
KiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUsIFN0cnVjdHVy
ZSogZmlyc3RCYXNlLCBTdHJ1Y3R1cmUqIGZpcnN0UHJvdG8sIGJvb2wgaXNEaXJlY3QpCisgICAg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgUGFz
c1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogZmlyc3RCYXNl
LCBTdHJ1Y3R1cmUqIGZpcnN0UHJvdG8sIGJvb2wgaXNEaXJlY3QpCiAgICAgewotICAgICAgICBs
aXN0WzBdLnNldChnbG9iYWxEYXRhLCBvd25lciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgZmly
c3RQcm90bywgaXNEaXJlY3QpOworICAgICAgICBsaXN0WzBdLnNldCh2bSwgb3duZXIsIHN0dWJS
b3V0aW5lLCBmaXJzdEJhc2UsIGZpcnN0UHJvdG8sIGlzRGlyZWN0KTsKICAgICB9CiAKLSAgICBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwgU3Ry
dWN0dXJlKiBmaXJzdEJhc2UsIFN0cnVjdHVyZUNoYWluKiBmaXJzdENoYWluLCBib29sIGlzRGly
ZWN0KQorICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUq
IGZpcnN0QmFzZSwgU3RydWN0dXJlQ2hhaW4qIGZpcnN0Q2hhaW4sIGJvb2wgaXNEaXJlY3QpCiAg
ICAgewotICAgICAgICBsaXN0WzBdLnNldChnbG9iYWxEYXRhLCBvd25lciwgc3R1YlJvdXRpbmUs
IGZpcnN0QmFzZSwgZmlyc3RDaGFpbiwgaXNEaXJlY3QpOworICAgICAgICBsaXN0WzBdLnNldCh2
bSwgb3duZXIsIHN0dWJSb3V0aW5lLCBmaXJzdEJhc2UsIGZpcnN0Q2hhaW4sIGlzRGlyZWN0KTsK
ICAgICB9CiAKICAgICBib29sIHZpc2l0V2VhayhpbnQgY291bnQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAg
cHVibGljOgogICAgIH0KICAgICAKICAgICBzdGF0aWMgUHV0QnlJZEFjY2VzcyB0cmFuc2l0aW9u
KAotICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsCisgICAgICAgIFZNJiB2bSwKICAg
ICAgICAgSlNDZWxsKiBvd25lciwKICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsCiAg
ICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLApAQCAtNjQsMjIgKzY0LDIyIEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICByZXN1bHQu
bV90eXBlID0gVHJhbnNpdGlvbjsKLSAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldChn
bG9iYWxEYXRhLCBvd25lciwgb2xkU3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fbmV3U3Ry
dWN0dXJlLnNldChnbG9iYWxEYXRhLCBvd25lciwgbmV3U3RydWN0dXJlKTsKLSAgICAgICAgcmVz
dWx0Lm1fY2hhaW4uc2V0KGdsb2JhbERhdGEsIG93bmVyLCBjaGFpbik7CisgICAgICAgIHJlc3Vs
dC5tX29sZFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBvbGRTdHJ1Y3R1cmUpOworICAgICAgICBy
ZXN1bHQubV9uZXdTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgbmV3U3RydWN0dXJlKTsKKyAgICAg
ICAgcmVzdWx0Lm1fY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOwogICAgICAgICByZXN1bHQu
bV9zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KICAgICAKICAgICBzdGF0aWMgUHV0QnlJZEFjY2VzcyByZXBsYWNlKAotICAgICAgICBKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsCisgICAgICAgIFZNJiB2bSwKICAgICAgICAgSlNDZWxsKiBv
d25lciwKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCiAgICAgICAgIFBhc3NSZWZQdHI8
SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQogICAgIHsKICAgICAgICAgUHV0QnlJZEFjY2Vz
cyByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBSZXBsYWNlOwotICAgICAgICByZXN1
bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBzdHJ1Y3R1cmUpOworICAg
ICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKICAg
ICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJl
Y2lzZUp1bXBUYXJnZXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRz
KENvZGVCbG9jawogICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jay0+bnVtYmVyT2ZFeGNl
cHRpb25IYW5kbGVycygpOyBpLS07KQogICAgICAgICBvdXQuYXBwZW5kKGNvZGVCbG9jay0+ZXhj
ZXB0aW9uSGFuZGxlcihpKS50YXJnZXQpOwogICAgIAotICAgIEludGVycHJldGVyKiBpbnRlcnBy
ZXRlciA9IGNvZGVCbG9jay0+Z2xvYmFsRGF0YSgpLT5pbnRlcnByZXRlcjsKKyAgICBJbnRlcnBy
ZXRlciogaW50ZXJwcmV0ZXIgPSBjb2RlQmxvY2stPnZtKCktPmludGVycHJldGVyOwogICAgIElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCku
YmVnaW4oKTsKICAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7
IGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25Db3VudDspIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE0
ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgCiAgICAgaWYgKGluc3RydWN0aW9uWzBdLnUub3Bjb2Rl
ID09IExMSW50OjpnZXRPcGNvZGUobGxpbnRfb3BfcHV0X2J5X2lkKQogICAgICAgICB8fCBpbnN0
cnVjdGlvblswXS51Lm9wY29kZSA9PSBMTEludDo6Z2V0T3Bjb2RlKGxsaW50X29wX3B1dF9ieV9p
ZF9vdXRfb2ZfbGluZSkpIHsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0
dXJlLT5nZXQoKnByb2ZpbGVkQmxvY2stPmdsb2JhbERhdGEoKSwgaWRlbnQpOworICAgICAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCgqcHJvZmlsZWRCbG9jay0+dm0o
KSwgaWRlbnQpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24sIDAsIDAsIDAsIGludmFsaWRP
ZmZzZXQpOwogICAgICAgICAKQEAgLTY4LDcgKzY4LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRnJvbQogICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUpOwogICAgIEFTU0VS
VChjaGFpbik7CiAgICAgCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJl
LT5nZXQoKnByb2ZpbGVkQmxvY2stPmdsb2JhbERhdGEoKSwgaWRlbnQpOworICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IG5ld1N0cnVjdHVyZS0+Z2V0KCpwcm9maWxlZEJsb2NrLT52bSgpLCBp
ZGVudCk7CiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24sIDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOwogICAg
IApAQCAtMTA0LDcgKzEwNCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvcigKICAgICAgICAgCiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6IHsKICAg
ICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3R1YkluZm8udS5wdXRCeUlkUmVwbGFjZS5i
YXNlT2JqZWN0U3RydWN0dXJlLT5nZXQoCi0gICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+Z2xv
YmFsRGF0YSgpLCBpZGVudCk7CisgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgaWRl
bnQpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CiAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cygKICAgICAgICAgICAgICAgICBTaW1wbGVSZXBsYWNlLApAQCAt
MTE5LDcgKzExOSw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigK
ICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6IHsKICAgICAgICAg
QVNTRVJUKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUtPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwogICAgICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVy
ZS0+Z2V0KAotICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPmdsb2JhbERhdGEoKSwgaWRlbnQp
OworICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIGlkZW50KTsKICAgICAgICAgaWYg
KGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoCiAgICAgICAgICAgICAgICAgU2ltcGxlVHJhbnNpdGlvbiwKQEAgLTEzOSw3ICsxMzksNyBA
QCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKIH0KIAotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIElkZW50aWZpZXImIGlkZW50LCBib29sIGlzRGlyZWN0KQorUHV0
QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIElkZW50aWZpZXImIGlkZW50
LCBib29sIGlzRGlyZWN0KQogewogICAgIGlmIChQcm9wZXJ0eU5hbWUoaWRlbnQpLmFzSW5kZXgo
KSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCiAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKFRha2VzU2xvd1BhdGgpOwpAQCAtMTUyLDcgKzE1Miw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwog
ICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBz
dHJ1Y3R1cmUtPmdldChnbG9iYWxEYXRhLCBpZGVudCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1
ZSk7CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIGlkZW50
LCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZz
ZXQpKSB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKEFjY2Vzc29yIHwgUmVhZE9ubHkpKQog
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CkBAIC0xNzgs
NyArMTc4LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAg
IAogICAgIGlmICghaXNEaXJlY3QpIHsKICAgICAgICAgLy8gSWYgdGhlIHByb3RvdHlwZSBjaGFp
biBoYXMgc2V0dGVycyBvciByZWFkLW9ubHkgcHJvcGVydGllcywgdGhlbiBnaXZlIHVwLgotICAg
ICAgICBpZiAoc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oZ2xv
YmFsRGF0YSwgaWRlbnQpKQorICAgICAgICBpZiAoc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbk1h
eUludGVyY2VwdFN0b3JlVG8odm0sIGlkZW50KSkKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICAKICAgICAgICAgLy8gSWYgdGhlIHByb3Rv
dHlwZSBjaGFpbiBoYXNuJ3QgYmVlbiBub3JtYWxpemVkIChpLmUuIHRoZXJlIGFyZSBwcm94aWVz
IG9yIGRpY3Rpb25hcmllcykKQEAgLTIxMyw3ICsyMTMsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgCiAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoCiAg
ICAgICAgIFNpbXBsZVRyYW5zaXRpb24sIHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwKLSAgICAgICAg
c3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QpLCBvZmZz
ZXQpOworICAgICAgICBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKHZtLCBnbG9iYWxPYmplY3Qp
LCBvZmZzZXQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMTQ4NjU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJs
b2NrOwogY2xhc3MgSWRlbnRpZmllcjsKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwog
Y2xhc3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBTdHJ1Y3R1cmU7CiBjbGFzcyBTdHJ1Y3R1cmVD
aGFpbjsKQEAgLTkxLDcgKzkxLDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBzdGF0aWMg
UHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgsIElkZW50aWZpZXImKTsKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKEpT
R2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgSWRlbnRpZmllciYsIGJv
b2wgaXNEaXJlY3QpOworICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoVk0mLCBK
U0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIElkZW50aWZpZXImLCBib29sIGlzRGlyZWN0KTsK
ICAgICAKICAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXNvbHZlR2xvYmFsU3RhdHVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVzb2x2
ZUdsb2JhbFN0YXR1cy5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9SZXNvbHZlR2xvYmFsU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzcsNyArMzcsNyBAQCBzdGF0aWMgUmVzb2x2ZUdsb2JhbFN0YXR1cyBjb21wdXRlRm9yU3RyCiB7
CiAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7CiAgICAgSlNDZWxsKiBzcGVjaWZpY1Zh
bHVlOwotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KCpjb2RlQmxv
Y2stPmdsb2JhbERhdGEoKSwgaWRlbnRpZmllciwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmlj
VmFsdWUpOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KCpjb2Rl
QmxvY2stPnZtKCksIGlkZW50aWZpZXIsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVl
KTsKICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKICAgICAgICAgc3BlY2lmaWNW
YWx1ZSA9IDA7CiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAkocmV2aXNpb24g
MTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NywxMyArMjk3LDEzIEBAIHZvaWQgU2FtcGxpbmdUb29s
OjpzYW1wbGUoKQogICAgIHNfc2FtcGxpbmdUb29sLT5kb1J1bigpOwogfQogCi12b2lkIFNhbXBs
aW5nVG9vbDo6bm90aWZ5T2ZTY29wZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFNjcmlwdEV4
ZWN1dGFibGUqIHNjcmlwdCkKK3ZvaWQgU2FtcGxpbmdUb29sOjpub3RpZnlPZlNjb3BlKFZNJiB2
bSwgU2NyaXB0RXhlY3V0YWJsZSogc2NyaXB0KQogewogI2lmIEVOQUJMRShDT0RFQkxPQ0tfU0FN
UExJTkcpCiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc2NyaXB0U2FtcGxlTWFwTXV0ZXgpOwot
ICAgIG1fc2NvcGVTYW1wbGVNYXAtPnNldChzY3JpcHQsIGFkb3B0UHRyKG5ldyBTY3JpcHRTYW1w
bGVSZWNvcmQoZ2xvYmFsRGF0YSwgc2NyaXB0KSkpOworICAgIG1fc2NvcGVTYW1wbGVNYXAtPnNl
dChzY3JpcHQsIGFkb3B0UHRyKG5ldyBTY3JpcHRTYW1wbGVSZWNvcmQodm0sIHNjcmlwdCkpKTsK
ICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbERhdGEpOworICAgIFVOVVNFRF9QQVJBTSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHNjcmlwdCk7CiAjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmgJKHJldmlzaW9uIDE0ODY1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaAkod29y
a2luZyBjb3B5KQpAQCAtMTg1LDggKzE4NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHN0cnVj
dCBJbnN0cnVjdGlvbjsKIAogICAgIHN0cnVjdCBTY3JpcHRTYW1wbGVSZWNvcmQgewotICAgICAg
ICBTY3JpcHRTYW1wbGVSZWNvcmQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTY3JpcHRFeGVj
dXRhYmxlKiBleGVjdXRhYmxlKQotICAgICAgICAgICAgOiBtX2V4ZWN1dGFibGUoZ2xvYmFsRGF0
YSwgZXhlY3V0YWJsZSkKKyAgICAgICAgU2NyaXB0U2FtcGxlUmVjb3JkKFZNJiB2bSwgU2NyaXB0
RXhlY3V0YWJsZSogZXhlY3V0YWJsZSkKKyAgICAgICAgICAgIDogbV9leGVjdXRhYmxlKHZtLCBl
eGVjdXRhYmxlKQogICAgICAgICAgICAgLCBtX2NvZGVCbG9jaygwKQogICAgICAgICAgICAgLCBt
X3NhbXBsZUNvdW50KDApCiAgICAgICAgICAgICAsIG1fb3Bjb2RlU2FtcGxlQ291bnQoMCkKQEAg
LTI4MSw3ICsyODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBzZXR1cCgpOwogICAgICAgICB2b2lkIGR1bXAoRXhlY1N0YXRlKik7CiAKLSAgICAg
ICAgdm9pZCBub3RpZnlPZlNjb3BlKEpTR2xvYmFsRGF0YSYsIFNjcmlwdEV4ZWN1dGFibGUqIHNj
b3BlKTsKKyAgICAgICAgdm9pZCBub3RpZnlPZlNjb3BlKFZNJiwgU2NyaXB0RXhlY3V0YWJsZSog
c2NvcGUpOwogCiAgICAgICAgIHZvaWQgc2FtcGxlKENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0
cnVjdGlvbiogdlBDKQogICAgICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMTQ4NjU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwMSwyOCArMTAxLDI4IEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7
CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgaW5pdEdldEJ5SWRTZWxmKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJl
KQorICAgIHZvaWQgaW5pdEdldEJ5SWRTZWxmKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0
dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlKQogICAgIHsKICAgICAgICAgYWNjZXNzVHlwZSA9IGFj
Y2Vzc19nZXRfYnlfaWRfc2VsZjsKIAotICAgICAgICB1LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RT
dHJ1Y3R1cmUuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKKyAg
ICAgICAgdS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIGJh
c2VPYmplY3RTdHJ1Y3R1cmUpOwogICAgIH0KIAotICAgIHZvaWQgaW5pdEdldEJ5SWRQcm90byhK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9i
amVjdFN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGJvb2wgaXNEaXJl
Y3QpCisgICAgdm9pZCBpbml0R2V0QnlJZFByb3RvKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3Ry
dWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVy
ZSwgYm9vbCBpc0RpcmVjdCkKICAgICB7CiAgICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0
X2J5X2lkX3Byb3RvOwogCi0gICAgICAgIHUuZ2V0QnlJZFByb3RvLmJhc2VPYmplY3RTdHJ1Y3R1
cmUuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICAgICAg
dS5nZXRCeUlkUHJvdG8ucHJvdG90eXBlU3RydWN0dXJlLnNldChnbG9iYWxEYXRhLCBvd25lciwg
cHJvdG90eXBlU3RydWN0dXJlKTsKKyAgICAgICAgdS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0
cnVjdHVyZS5zZXQodm0sIG93bmVyLCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKKyAgICAgICAgdS5n
ZXRCeUlkUHJvdG8ucHJvdG90eXBlU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHByb3RvdHlwZVN0
cnVjdHVyZSk7CiAgICAgICAgIHUuZ2V0QnlJZFByb3RvLmlzRGlyZWN0ID0gaXNEaXJlY3Q7CiAg
ICAgfQogCi0gICAgdm9pZCBpbml0R2V0QnlJZENoYWluKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlLCBTdHJ1Y3R1
cmVDaGFpbiogY2hhaW4sIHVuc2lnbmVkIGNvdW50LCBib29sIGlzRGlyZWN0KQorICAgIHZvaWQg
aW5pdEdldEJ5SWRDaGFpbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9i
amVjdFN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCB1bnNpZ25lZCBjb3VudCwgYm9v
bCBpc0RpcmVjdCkKICAgICB7CiAgICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lk
X2NoYWluOwogCi0gICAgICAgIHUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0
KGdsb2JhbERhdGEsIG93bmVyLCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICAgICAgdS5nZXRC
eUlkQ2hhaW4uY2hhaW4uc2V0KGdsb2JhbERhdGEsIG93bmVyLCBjaGFpbik7CisgICAgICAgIHUu
Z2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgYmFzZU9iamVj
dFN0cnVjdHVyZSk7CisgICAgICAgIHUuZ2V0QnlJZENoYWluLmNoYWluLnNldCh2bSwgb3duZXIs
IGNoYWluKTsKICAgICAgICAgdS5nZXRCeUlkQ2hhaW4uY291bnQgPSBjb3VudDsKICAgICAgICAg
dS5nZXRCeUlkQ2hhaW4uaXNEaXJlY3QgPSBpc0RpcmVjdDsKICAgICB9CkBAIC0xNDUsMjMgKzE0
NSwyMyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogCiAgICAgLy8gUHV0QnlJZCoKIAot
ICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgYm9vbCBpc0RpcmVjdCkKKyAgICB2b2lk
IGluaXRQdXRCeUlkVHJhbnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSog
cHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiog
Y2hhaW4sIGJvb2wgaXNEaXJlY3QpCiAgICAgewogICAgICAgICBpZiAoaXNEaXJlY3QpCiAgICAg
ICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19wdXRfYnlfaWRf
dHJhbnNpdGlvbl9ub3JtYWw7CiAKLSAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91
c1N0cnVjdHVyZS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHByZXZpb3VzU3RydWN0dXJlKTsKLSAg
ICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuc2V0KGdsb2JhbERhdGEsIG93bmVy
LCBzdHJ1Y3R1cmUpOwotICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLnNldChnbG9i
YWxEYXRhLCBvd25lciwgY2hhaW4pOworICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZp
b3VzU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHByZXZpb3VzU3RydWN0dXJlKTsKKyAgICAgICAg
dS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsK
KyAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5zZXQodm0sIG93bmVyLCBjaGFpbik7
CiAgICAgfQogCi0gICAgdm9pZCBpbml0UHV0QnlJZFJlcGxhY2UoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUpCisg
ICAgdm9pZCBpbml0UHV0QnlJZFJlcGxhY2UoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1
cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBhY2Nlc3NUeXBlID0gYWNj
ZXNzX3B1dF9ieV9pZF9yZXBsYWNlOwogICAgIAotICAgICAgICB1LnB1dEJ5SWRSZXBsYWNlLmJh
c2VPYmplY3RTdHJ1Y3R1cmUuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBiYXNlT2JqZWN0U3RydWN0
dXJlKTsKKyAgICAgICAgdS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCh2
bSwgb3duZXIsIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOwogICAgIH0KICAgICAgICAgCiAgICAgdm9p
ZCBpbml0UHV0QnlJZExpc3QoUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOSArNDcsOSBAQCBj
b25zdCBDbGFzc0luZm8gVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrCiBjb25zdCBDbGFzc0luZm8g
VW5saW5rZWRFdmFsQ29kZUJsb2NrOjpzX2luZm8gPSB7ICJVbmxpbmtlZEV2YWxDb2RlQmxvY2si
LCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFVubGlua2VkRXZhbENv
ZGVCbG9jaykgfTsKIGNvbnN0IENsYXNzSW5mbyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpz
X2luZm8gPSB7ICJVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKSB9OwogCi1z
dGF0aWMgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogZ2VuZXJhdGVGdW5jdGlvbkNvZGVCbG9j
ayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTU2NvcGUqIHNjb3BlLCBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2Zp
bGVyTW9kZSBwcm9maWxlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvcikKK3N0YXRpYyBVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrKiBnZW5lcmF0ZUZ1bmN0aW9uQ29kZUJsb2NrKFZNJiB2bSwgSlNT
Y29wZSogc2NvcGUsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBjb25z
dCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgRGVidWdn
ZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwgUGFyc2VyRXJy
b3ImIGVycm9yKQogewotICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBib2R5ID0gcGFyc2U8
RnVuY3Rpb25Cb2R5Tm9kZT4oJmdsb2JhbERhdGEsIHNvdXJjZSwgZXhlY3V0YWJsZS0+cGFyYW1l
dGVycygpLCBleGVjdXRhYmxlLT5uYW1lKCksIGV4ZWN1dGFibGUtPmlzSW5TdHJpY3RDb250ZXh0
KCkgPyBKU1BhcnNlU3RyaWN0IDogSlNQYXJzZU5vcm1hbCwgSlNQYXJzZUZ1bmN0aW9uQ29kZSwg
ZXJyb3IpOworICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBib2R5ID0gcGFyc2U8RnVuY3Rp
b25Cb2R5Tm9kZT4oJnZtLCBzb3VyY2UsIGV4ZWN1dGFibGUtPnBhcmFtZXRlcnMoKSwgZXhlY3V0
YWJsZS0+bmFtZSgpLCBleGVjdXRhYmxlLT5pc0luU3RyaWN0Q29udGV4dCgpID8gSlNQYXJzZVN0
cmljdCA6IEpTUGFyc2VOb3JtYWwsIEpTUGFyc2VGdW5jdGlvbkNvZGUsIGVycm9yKTsKIAogICAg
IGlmICghYm9keSkgewogICAgICAgICBBU1NFUlQoZXJyb3IubV90eXBlICE9IFBhcnNlckVycm9y
OjpFcnJvck5vbmUpOwpAQCAtNjEsOCArNjEsOCBAQCBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9jayogZ2VuZXJhCiAgICAgYm9keS0+ZmluaXNoUGFyc2luZyhleGVjdXRhYmxlLT5wYXJh
bWV0ZXJzKCksIGV4ZWN1dGFibGUtPm5hbWUoKSwgZXhlY3V0YWJsZS0+ZnVuY3Rpb25OYW1lSXNJ
blNjb3BlVG9nZ2xlKCkpOwogICAgIGV4ZWN1dGFibGUtPnJlY29yZFBhcnNlKGJvZHktPmZlYXR1
cmVzKCksIGJvZHktPmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIGJvZHktPmxpbmVObygpLCBib2R5
LT5sYXN0TGluZSgpKTsKICAgICAKLSAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1
bHQgPSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGUoJmdsb2JhbERhdGEsIEZ1bmN0
aW9uQ29kZSwgRXhlY3V0YWJsZUluZm8oYm9keS0+bmVlZHNBY3RpdmF0aW9uKCksIGJvZHktPnVz
ZXNFdmFsKCksIGJvZHktPmlzU3RyaWN0TW9kZSgpLCBraW5kID09IENvZGVGb3JDb25zdHJ1Y3Qp
KTsKLSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcg
Qnl0ZWNvZGVHZW5lcmF0b3IoZ2xvYmFsRGF0YSwgc2NvcGUsIGJvZHkuZ2V0KCksIHJlc3VsdCwg
ZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUpKSk7CisgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9jayogcmVzdWx0ID0gVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlKCZ2bSwgRnVu
Y3Rpb25Db2RlLCBFeGVjdXRhYmxlSW5mbyhib2R5LT5uZWVkc0FjdGl2YXRpb24oKSwgYm9keS0+
dXNlc0V2YWwoKSwgYm9keS0+aXNTdHJpY3RNb2RlKCksIGtpbmQgPT0gQ29kZUZvckNvbnN0cnVj
dCkpOworICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5l
dyBCeXRlY29kZUdlbmVyYXRvcih2bSwgc2NvcGUsIGJvZHkuZ2V0KCksIHJlc3VsdCwgZGVidWdn
ZXJNb2RlLCBwcm9maWxlck1vZGUpKSk7CiAgICAgZXJyb3IgPSBnZW5lcmF0b3ItPmdlbmVyYXRl
KCk7CiAgICAgYm9keS0+ZGVzdHJveURhdGEoKTsKICAgICBpZiAoZXJyb3IubV90eXBlICE9IFBh
cnNlckVycm9yOjpFcnJvck5vbmUpCkBAIC04MCw4ICs4MCw4IEBAIHVuc2lnbmVkIFVubGlua2Vk
Q29kZUJsb2NrOjphZGRPckZpbmRDb24KICAgICByZXR1cm4gYWRkQ29uc3RhbnQodik7CiB9CiAK
LVVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBTb3Vy
Y2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uQm9keU5vZGUqIG5vZGUpCi0gICAgOiBCYXNlKCpnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUpCitVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUoVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvbkJvZHlOb2RlKiBub2RlKQorICAgIDogQmFzZSgqdm0s
IHN0cnVjdHVyZSkKICAgICAsIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXMobm9kZS0+Y2FwdHVyZWRW
YXJpYWJsZUNvdW50KCkpCiAgICAgLCBtX2ZvcmNlVXNlc0FyZ3VtZW50cyhub2RlLT51c2VzQXJn
dW1lbnRzKCkpCiAgICAgLCBtX2lzSW5TdHJpY3RDb250ZXh0KG5vZGUtPmlzU3RyaWN0TW9kZSgp
KQpAQCAtMTE4LDE5ICsxMTgsMTkgQEAgdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
dmlzaXRDaAogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3N5bWJvbFRhYmxlRm9y
Q29uc3RydWN0KTsKIH0KIAotRnVuY3Rpb25FeGVjdXRhYmxlKiBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6bGluayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgc2l6ZV90IGxpbmVPZmZzZXQsIHNpemVfdCBzb3VyY2VPZmZzZXQpCitGdW5jdGlv
bkV4ZWN1dGFibGUqIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpsaW5rKFZNJiB2bSwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBzaXplX3QgbGluZU9mZnNldCwgc2l6ZV90IHNvdXJjZU9m
ZnNldCkKIHsKICAgICB1bnNpZ25lZCBmaXJzdExpbmUgPSBsaW5lT2Zmc2V0ICsgbV9maXJzdExp
bmVPZmZzZXQ7CiAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBzb3VyY2VPZmZzZXQgKyBtX3N0
YXJ0T2Zmc2V0OwogICAgIFNvdXJjZUNvZGUgY29kZShzb3VyY2UucHJvdmlkZXIoKSwgc3RhcnRP
ZmZzZXQsIHN0YXJ0T2Zmc2V0ICsgbV9zb3VyY2VMZW5ndGgsIGZpcnN0TGluZSk7Ci0gICAgcmV0
dXJuIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGNvZGUsIHRoaXMsIGZp
cnN0TGluZSwgZmlyc3RMaW5lICsgbV9saW5lQ291bnQpOworICAgIHJldHVybiBGdW5jdGlvbkV4
ZWN1dGFibGU6OmNyZWF0ZSh2bSwgY29kZSwgdGhpcywgZmlyc3RMaW5lLCBmaXJzdExpbmUgKyBt
X2xpbmVDb3VudCk7CiB9CiAKIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUoY29uc3QgSWRlbnRpZmllciYgbmFtZSwg
RXhlY1N0YXRlKiBleGVjLCBEZWJ1Z2dlciosIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNP
YmplY3QqKiBleGNlcHRpb24pCiB7CiAgICAgUGFyc2VyRXJyb3IgZXJyb3I7Ci0gICAgQ29kZUNh
Y2hlKiBjb2RlQ2FjaGUgPSBleGVjLT5nbG9iYWxEYXRhKCkuY29kZUNhY2hlKCk7Ci0gICAgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBjb2RlQ2FjaGUtPmdldEZ1bmN0
aW9uRXhlY3V0YWJsZUZyb21HbG9iYWxDb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmFtZSwgc291
cmNlLCBlcnJvcik7CisgICAgQ29kZUNhY2hlKiBjb2RlQ2FjaGUgPSBleGVjLT52bSgpLmNvZGVD
YWNoZSgpOworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gY29k
ZUNhY2hlLT5nZXRGdW5jdGlvbkV4ZWN1dGFibGVGcm9tR2xvYmFsQ29kZShleGVjLT52bSgpLCBu
YW1lLCBzb3VyY2UsIGVycm9yKTsKICAgICBpZiAoZXJyb3IubV90eXBlICE9IFBhcnNlckVycm9y
OjpFcnJvck5vbmUpIHsKICAgICAgICAgKmV4Y2VwdGlvbiA9IGVycm9yLnRvRXJyb3JPYmplY3Qo
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzb3VyY2UpOwogICAgICAgICByZXR1cm4gMDsK
QEAgLTEzOSw3ICsxMzksNyBAQCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogVW5saW5rZWRG
dW5jCiAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiB9CiAKLVVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2sqIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjb2RlQmxvY2tGb3IoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU1Njb3BlKiBzY29wZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCwgRGVidWdnZXJNb2RlIGRl
YnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9y
KQorVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6
OmNvZGVCbG9ja0ZvcihWTSYgdm0sIEpTU2NvcGUqIHNjb3BlLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kLCBEZWJ1Z2dl
ck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJv
ciYgZXJyb3IpCiB7CiAgICAgc3dpdGNoIChzcGVjaWFsaXphdGlvbktpbmQpIHsKICAgICBjYXNl
IENvZGVGb3JDYWxsOgpAQCAtMTUyLDE5ICsxNTIsMTkgQEAgVW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9jayogVW5saW5rZWRGdW5jdAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1bHQgPSBnZW5lcmF0ZUZ1bmN0aW9uQ29kZUJsb2NrKGds
b2JhbERhdGEsIHNjb3BlLCB0aGlzLCBzb3VyY2UsIHNwZWNpYWxpemF0aW9uS2luZCwgZGVidWdn
ZXJNb2RlLCBwcm9maWxlck1vZGUsIGVycm9yKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrKiByZXN1bHQgPSBnZW5lcmF0ZUZ1bmN0aW9uQ29kZUJsb2NrKHZtLCBzY29wZSwgdGhpcywg
c291cmNlLCBzcGVjaWFsaXphdGlvbktpbmQsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlLCBl
cnJvcik7CiAgICAgCiAgICAgaWYgKGVycm9yLm1fdHlwZSAhPSBQYXJzZXJFcnJvcjo6RXJyb3JO
b25lKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHN3aXRjaCAoc3BlY2lhbGl6YXRpb25LaW5k
KSB7CiAgICAgY2FzZSBDb2RlRm9yQ2FsbDoKLSAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCByZXN1bHQpOwotICAgICAgICBtX3N5bWJvbFRhYmxlRm9yQ2Fs
bC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgcmVzdWx0LT5zeW1ib2xUYWJsZSgpKTsKKyAgICAgICAg
bV9jb2RlQmxvY2tGb3JDYWxsLnNldCh2bSwgdGhpcywgcmVzdWx0KTsKKyAgICAgICAgbV9zeW1i
b2xUYWJsZUZvckNhbGwuc2V0KHZtLCB0aGlzLCByZXN1bHQtPnN5bWJvbFRhYmxlKCkpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6Ci0gICAgICAgIG1fY29kZUJs
b2NrRm9yQ29uc3RydWN0LnNldChnbG9iYWxEYXRhLCB0aGlzLCByZXN1bHQpOwotICAgICAgICBt
X3N5bWJvbFRhYmxlRm9yQ29uc3RydWN0LnNldChnbG9iYWxEYXRhLCB0aGlzLCByZXN1bHQtPnN5
bWJvbFRhYmxlKCkpOworICAgICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5zZXQodm0sIHRo
aXMsIHJlc3VsdCk7CisgICAgICAgIG1fc3ltYm9sVGFibGVGb3JDb25zdHJ1Y3Quc2V0KHZtLCB0
aGlzLCByZXN1bHQtPnN5bWJvbFRhYmxlKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
cmV0dXJuIHJlc3VsdDsKQEAgLTE4MiwxMiArMTgyLDEyIEBAIFN0cmluZyBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZTo6cGFyYW0KICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQog
Ci1VbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4
ZWN1dGFibGVJbmZvJiBpbmZvKQotICAgIDogQmFzZSgqZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQor
VW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbykK
KyAgICA6IEJhc2UoKnZtLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX251bVZhcnMoMCkKICAgICAsIG1f
bnVtQ2FsbGVlUmVnaXN0ZXJzKDApCiAgICAgLCBtX251bVBhcmFtZXRlcnMoMCkKLSAgICAsIG1f
Z2xvYmFsRGF0YShnbG9iYWxEYXRhKQorICAgICwgbV92bSh2bSkKICAgICAsIG1fYXJndW1lbnRz
UmVnaXN0ZXIoLTEpCiAgICAgLCBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyKC0xKQogICAgICwgbV9u
ZWVkc0Z1bGxTY29wZUNoYWluKGluZm8ubV9uZWVkc0FjdGl2YXRpb24pCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2
aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDEwICs4MSwxMCBAQCBjbGFzcyBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSA6IHB1YmxpCiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNz
IENvZGVDYWNoZTsKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwotICAgIHN0YXRpYyBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvbkJvZHlOb2RlKiBub2RlKQorICAgIHN0YXRp
YyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKFZNKiB2bSwgY29uc3QgU291cmNl
Q29kZSYgc291cmNlLCBGdW5jdGlvbkJvZHlOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KGdsb2JhbERhdGEtPmhlYXApKSBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT51bmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgc291cmNlLCBub2RlKTsKLSAgICAgICAg
aW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCpnbG9iYWxEYXRhKTsKKyAgICAgICAgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLT5oZWFwKSkgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUodm0sIHZtLT51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQo
KSwgc291cmNlLCBub2RlKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSk7
CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKQEAgLTEwNywxMSArMTA3LDExIEBA
IHB1YmxpYzoKIAogICAgIFN0cmluZyBwYXJhbVN0cmluZygpIGNvbnN0OwogCi0gICAgVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrRm9yKEpTR2xvYmFsRGF0YSYsIEpTU2NvcGUq
LCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgRGVidWdnZXJNb2Rl
LCBQcm9maWxlck1vZGUsIFBhcnNlckVycm9yJik7CisgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9jayogY29kZUJsb2NrRm9yKFZNJiwgSlNTY29wZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSwgUGFyc2VyRXJy
b3ImKTsKIAogICAgIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnJvbUdsb2Jh
bENvZGUoY29uc3QgSWRlbnRpZmllciYsIEV4ZWNTdGF0ZSosIERlYnVnZ2VyKiwgY29uc3QgU291
cmNlQ29kZSYsIEpTT2JqZWN0KiogZXhjZXB0aW9uKTsKIAotICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogbGluayhKU0dsb2JhbERhdGEmLCBjb25zdCBTb3VyY2VDb2RlJiwgc2l6ZV90IGxpbmVPZmZz
ZXQsIHNpemVfdCBzb3VyY2VPZmZzZXQpOworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogbGluayhW
TSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBzaXplX3QgbGluZU9mZnNldCwgc2l6ZV90IHNvdXJjZU9m
ZnNldCk7CiAKICAgICB2b2lkIGNsZWFyQ29kZUZvclJlY29tcGlsYXRpb24oKQogICAgIHsKQEAg
LTE0MCw3ICsxNDAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
KTsKIAogcHJpdmF0ZToKLSAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShKU0dsb2JhbERh
dGEqLCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3VyY2VDb2RlJiwgRnVuY3Rpb25Cb2R5Tm9kZSopOwor
ICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNKiwgU3RydWN0dXJlKiwgY29uc3QgU291
cmNlQ29kZSYsIEZ1bmN0aW9uQm9keU5vZGUqKTsKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRG
dW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDYWxsOwogICAgIFdyaXRlQmFycmllcjxV
bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsKIApAQCAt
MTY2LDE4ICsxNjYsMTggQEAgcHJpdmF0ZToKICAgICBGdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dn
bGUgbV9mdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGU7CiAKIHByb3RlY3RlZDoKLSAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGds
b2JhbERhdGEpOwotICAgICAgICBtX25hbWVWYWx1ZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywganNT
dHJpbmcoJmdsb2JhbERhdGEsIG5hbWUoKS5zdHJpbmcoKSkpOworICAgICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CisgICAgICAgIG1fbmFtZVZhbHVlLnNldCh2bSwgdGhpcywganNTdHJp
bmcoJnZtLCBuYW1lKCkuc3RyaW5nKCkpKTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG8pCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGVUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZv
KFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBP
dmVycmlkZXNWaXNpdENoaWxkcmVuIHwgSlNDZWxsOjpTdHJ1Y3R1cmVGbGFnczsKQEAgLTI4Miw3
ICsyODIsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNz
YXJ5KCk7CiAgICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuc2l6
ZSgpOwotICAgICAgICBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuYXBwZW5kKFdyaXRlQmFycmllcjxS
ZWdFeHA+KCptX2dsb2JhbERhdGEsIHRoaXMsIHIpKTsKKyAgICAgICAgbV9yYXJlRGF0YS0+bV9y
ZWdleHBzLmFwcGVuZChXcml0ZUJhcnJpZXI8UmVnRXhwPigqbV92bSwgdGhpcywgcikpOwogICAg
ICAgICByZXR1cm4gc2l6ZTsKICAgICB9CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZSZWdFeHBzKCkg
Y29uc3QKQEAgLTMwNSw3ICszMDUsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICB1bnNpZ25l
ZCByZXN1bHQgPSBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsKICAgICAgICAgbV9jb25zdGFu
dFJlZ2lzdGVycy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVua25vd24+KCkpOwotICAgICAgICBtX2Nv
bnN0YW50UmVnaXN0ZXJzLmxhc3QoKS5zZXQoKm1fZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAg
ICAgIG1fY29uc3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldCgqbV92bSwgdGhpcywgdik7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIHVuc2lnbmVkIGFkZE9yRmluZENvbnN0YW50
KEpTVmFsdWUpOwpAQCAtMzczLDcgKzM3Myw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHVu
c2lnbmVkIHNpemUgPSBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOwogICAgICAgICBtX2Z1bmN0aW9u
RGVjbHMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oKSk7
Ci0gICAgICAgIG1fZnVuY3Rpb25EZWNscy5sYXN0KCkuc2V0KCptX2dsb2JhbERhdGEsIHRoaXMs
IG4pOworICAgICAgICBtX2Z1bmN0aW9uRGVjbHMubGFzdCgpLnNldCgqbV92bSwgdGhpcywgbik7
CiAgICAgICAgIHJldHVybiBzaXplOwogICAgIH0KICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSogZnVuY3Rpb25EZWNsKGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2lu
ZGV4XS5nZXQoKTsgfQpAQCAtMzgyLDcgKzM4Miw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IHVuc2lnbmVkIHNpemUgPSBtX2Z1bmN0aW9uRXhwcnMuc2l6ZSgpOwogICAgICAgICBtX2Z1bmN0
aW9uRXhwcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4o
KSk7Ci0gICAgICAgIG1fZnVuY3Rpb25FeHBycy5sYXN0KCkuc2V0KCptX2dsb2JhbERhdGEsIHRo
aXMsIG4pOworICAgICAgICBtX2Z1bmN0aW9uRXhwcnMubGFzdCgpLnNldCgqbV92bSwgdGhpcywg
bik7CiAgICAgICAgIHJldHVybiBzaXplOwogICAgIH0KICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnVuY3Rpb25FeHByKGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkV4cHJz
W2luZGV4XS5nZXQoKTsgfQpAQCAtMzk1LDcgKzM5NSw3IEBAIHB1YmxpYzoKIAogICAgIFNoYXJl
ZFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ltYm9sVGFibGUu
Z2V0KCk7IH0KIAotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpIGNvbnN0IHsgcmV0dXJu
IG1fZ2xvYmFsRGF0YTsgfQorICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0KIAog
ICAgIHVuc2lnbmVkIGFkZFJlc29sdmUoKSB7IHJldHVybiBtX3Jlc29sdmVPcGVyYXRpb25Db3Vu
dCsrOyB9CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZSZXNvbHZlT3BlcmF0aW9ucygpIGNvbnN0IHsg
cmV0dXJuIG1fcmVzb2x2ZU9wZXJhdGlvbkNvdW50OyB9CkBAIC00NzEsMTUgKzQ3MSwxNSBAQCBw
dWJsaWM6CiAgICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ291
bnQ7IH0KIAogcHJvdGVjdGVkOgotICAgIFVubGlua2VkQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSos
IFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYpOworICAgIFVubGlu
a2VkQ29kZUJsb2NrKFZNKiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJ
bmZvJik7CiAgICAgflVubGlua2VkQ29kZUJsb2NrKCk7CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiB2bSkKICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwor
ICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIGlmIChjb2RlVHlwZSgp
ID09IEdsb2JhbENvZGUpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3ltYm9sVGFi
bGUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIFNoYXJlZFN5bWJvbFRhYmxlOjpjcmVhdGUoZ2xvYmFs
RGF0YSkpOworICAgICAgICBtX3N5bWJvbFRhYmxlLnNldCh2bSwgdGhpcywgU2hhcmVkU3ltYm9s
VGFibGU6OmNyZWF0ZSh2bSkpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTQ5Myw3ICs0OTMsNyBA
QCBwcml2YXRlOgogICAgIFJlZkNvdW50ZWRBcnJheTxVbmxpbmtlZEluc3RydWN0aW9uPiBtX3Vu
bGlua2VkSW5zdHJ1Y3Rpb25zOwogCiAgICAgaW50IG1fbnVtUGFyYW1ldGVyczsKLSAgICBKU0ds
b2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKKyAgICBWTSogbV92bTsKIAogICAgIGludCBtX3RoaXNS
ZWdpc3RlcjsKICAgICBpbnQgbV9hcmd1bWVudHNSZWdpc3RlcjsKQEAgLTU3OCw4ICs1NzgsOCBA
QCBwdWJsaWM6CiAgICAgdHlwZWRlZiBVbmxpbmtlZENvZGVCbG9jayBCYXNlOwogCiBwcm90ZWN0
ZWQ6Ci0gICAgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFi
bGVJbmZvJiBpbmZvKQotICAgICAgICA6IEJhc2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBjb2Rl
VHlwZSwgaW5mbykKKyAgICBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGlu
Zm8pCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjb2RlVHlwZSwgaW5mbykKICAgICB7
CiAgICAgfQogCkBAIC01OTEsMTAgKzU5MSwxMCBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBVbmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2sgOiBwdWJsaWMgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgewogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZUNhY2hlOwotICAgIHN0YXRpYyBVbmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEV4
ZWN1dGFibGVJbmZvJiBpbmZvKQorICAgIHN0YXRpYyBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sq
IGNyZWF0ZShWTSogdm0sIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQogICAgIHsKLSAgICAg
ICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4oZ2xvYmFsRGF0YS0+aGVhcCkpIFVu
bGlua2VkUHJvZ3JhbUNvZGVCbG9jayhnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT51bmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGluZm8pOwotICAgICAgICBpbnN0YW5jZS0+
ZmluaXNoQ3JlYXRpb24oKmdsb2JhbERhdGEpOworICAgICAgICBVbmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrPih2bS0+aGVhcCkpIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0t
PnVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgaW5mbyk7CisgICAgICAg
IGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOwogICAgICAgICByZXR1cm4gaW5zdGFuY2U7
CiAgICAgfQogCkBAIC02MDIsOSArNjAyLDkgQEAgcHVibGljOgogICAgIHR5cGVkZWYgVW5saW5r
ZWRHbG9iYWxDb2RlQmxvY2sgQmFzZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCop
OwogCi0gICAgdm9pZCBhZGRGdW5jdGlvbkRlY2xhcmF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRXhlY3V0YWJsZSkKKyAgICB2b2lkIGFkZEZ1bmN0aW9uRGVjbGFyYXRpb24oVk0m
IHZtLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZnVuY3Rpb25FeGVjdXRhYmxlKQogICAgIHsKLSAgICAgICAgbV9mdW5jdGlvbkRlY2xhcmF0aW9u
cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobmFtZSwgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlPihnbG9iYWxEYXRhLCB0aGlzLCBmdW5jdGlvbkV4ZWN1dGFibGUpKSk7Cisg
ICAgICAgIG1fZnVuY3Rpb25EZWNsYXJhdGlvbnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG5hbWUs
IFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIHRoaXMsIGZ1bmN0
aW9uRXhlY3V0YWJsZSkpKTsKICAgICB9CiAKICAgICB2b2lkIGFkZFZhcmlhYmxlRGVjbGFyYXRp
b24oY29uc3QgSWRlbnRpZmllciYgbmFtZSwgYm9vbCBpc0NvbnN0YW50KQpAQCAtNjIxLDggKzYy
MSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CiAKIHByaXZhdGU6Ci0gICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1
dGFibGVJbmZvJiBpbmZvKQotICAgICAgICA6IEJhc2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBH
bG9iYWxDb2RlLCBpbmZvKQorICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayhWTSogdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbykKKyAgICAgICAg
OiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIEdsb2JhbENvZGUsIGluZm8pCiAgICAgewogICAgIH0KIApA
QCAtNjMwLDkgKzYzMCw5IEBAIHByaXZhdGU6CiAgICAgRnVuY3Rpb25EZWNsYXRpb25zIG1fZnVu
Y3Rpb25EZWNsYXJhdGlvbnM7CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG8pCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwg
Z2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrVHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhVbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2tUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRy
ZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKQEAgLTY0NCwxMCArNjQ0LDEwIEBAIGNsYXNzIFVu
bGlua2VkRXZhbENvZGVCbG9jayA6IHB1YmxpYyBVbmwKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIENvZGVDYWNoZTsKIAotICAgIHN0YXRpYyBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGNyZWF0
ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQor
ICAgIHN0YXRpYyBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIGNvbnN0IEV4
ZWN1dGFibGVJbmZvJiBpbmZvKQogICAgIHsKLSAgICAgICAgVW5saW5rZWRFdmFsQ29kZUJsb2Nr
KiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkRXZhbENvZGVC
bG9jaz4oZ2xvYmFsRGF0YS0+aGVhcCkpIFVubGlua2VkRXZhbENvZGVCbG9jayhnbG9iYWxEYXRh
LCBnbG9iYWxEYXRhLT51bmxpbmtlZEV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGluZm8p
OwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKmdsb2JhbERhdGEpOworICAgICAg
ICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8VW5saW5rZWRFdmFsQ29kZUJsb2NrPih2bS0+aGVhcCkpIFVubGlua2VkRXZhbENvZGVC
bG9jayh2bSwgdm0tPnVubGlua2VkRXZhbENvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgaW5mbyk7
CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOwogICAgICAgICByZXR1cm4g
aW5zdGFuY2U7CiAgICAgfQogCkBAIC02NjQsMTcgKzY2NCwxNyBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcml2YXRlOgotICAgIFVubGlua2VkRXZhbENvZGVCbG9jayhKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbykK
LSAgICAgICAgOiBCYXNlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgRXZhbENvZGUsIGluZm8pCisg
ICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNv
bnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwg
RXZhbENvZGUsIGluZm8pCiAgICAgewogICAgIH0KIAogICAgIFZlY3RvcjxJZGVudGlmaWVyLCAw
LCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV92YXJpYWJsZXM7CiAKIHB1YmxpYzoKLSAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG8pCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oVW5saW5rZWRF
dmFsQ29kZUJsb2NrVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhV
bmxpbmtlZEV2YWxDb2RlQmxvY2tUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAg
IH0KIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRl
c1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKQEAgLTY4NCwxMCArNjg0LDEw
IEBAIHB1YmxpYzoKIAogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayA6IHB1YmxpYyBV
bmxpbmtlZENvZGVCbG9jayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25D
b2RlQmxvY2sqIGNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVUeXBlIGNvZGVU
eXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbykKKyAgICBzdGF0aWMgVW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4
ZWN1dGFibGVJbmZvJiBpbmZvKQogICAgIHsKLSAgICAgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrPihnbG9iYWxEYXRhLT5oZWFwKSkgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
ayhnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT51bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0
dXJlLmdldCgpLCBjb2RlVHlwZSwgaW5mbyk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVh
dGlvbigqZ2xvYmFsRGF0YSk7CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGlu
c3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9jaz4odm0tPmhlYXApKSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKHZtLCB2bS0+dW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgY29kZVR5cGUsIGluZm8pOworICAg
ICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtKTsKICAgICAgICAgcmV0dXJuIGluc3Rh
bmNlOwogICAgIH0KIApAQCAtNjk1LDE1ICs2OTUsMTUgQEAgcHVibGljOgogICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKIHByaXZhdGU6Ci0gICAgVW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9jayhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBD
b2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCi0gICAgICAgIDog
QmFzZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGNvZGVUeXBlLCBpbmZvKQorICAgIFVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUg
Y29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQorICAgICAgICA6IEJhc2Uodm0s
IHN0cnVjdHVyZSwgY29kZVR5cGUsIGluZm8pCiAgICAgewogICAgIH0KICAgICAKIHB1YmxpYzoK
LSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCiAgICAgewotICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8o
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
bywgVHlwZUluZm8oVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTUsMTIgKzE1NSwxMiBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwcmVzZXJ2ZUxh
c3RWYXIoCiAgICAgICAgIG1fbGFzdFZhciA9ICZtX2NhbGxlZVJlZ2lzdGVycy5sYXN0KCk7CiB9
CiAKLUJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTU2NvcGUqLCBQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIFVubGlua2VkUHJv
Z3JhbUNvZGVCbG9jayogY29kZUJsb2NrLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9m
aWxlck1vZGUgcHJvZmlsZXJNb2RlKQorQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJh
dG9yKFZNJiB2bSwgSlNTY29wZSosIFByb2dyYW1Ob2RlKiBwcm9ncmFtTm9kZSwgVW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFBy
b2ZpbGVyTW9kZSBwcm9maWxlck1vZGUpCiAgICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKGRl
YnVnZ2VyTW9kZSA9PSBEZWJ1Z2dlck9uKQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsZUhvb2tz
KHByb2ZpbGVyTW9kZSA9PSBQcm9maWxlck9uKQogICAgICwgbV9zeW1ib2xUYWJsZSgwKQogICAg
ICwgbV9zY29wZU5vZGUocHJvZ3JhbU5vZGUpCi0gICAgLCBtX2NvZGVCbG9jayhnbG9iYWxEYXRh
LCBjb2RlQmxvY2spCisgICAgLCBtX2NvZGVCbG9jayh2bSwgY29kZUJsb2NrKQogICAgICwgbV90
aGlzUmVnaXN0ZXIoQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSkKICAgICAsIG1fZW1w
dHlWYWx1ZVJlZ2lzdGVyKDApCiAgICAgLCBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyKDApCkBAIC0x
NzMsNyArMTczLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEpTRwog
ICAgICwgbV9maXJzdExhenlGdW5jdGlvbigwKQogICAgICwgbV9sYXN0TGF6eUZ1bmN0aW9uKDAp
CiAgICAgLCBtX3N0YXRpY1Byb3BlcnR5QW5hbHl6ZXIoJm1faW5zdHJ1Y3Rpb25zKQotICAgICwg
bV9nbG9iYWxEYXRhKCZnbG9iYWxEYXRhKQorICAgICwgbV92bSgmdm0pCiAgICAgLCBtX2xhc3RP
cGNvZGVJRChvcF9lbmQpCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9sYXN0T3Bjb2RlUG9zaXRp
b24oMCkKQEAgLTE5NSw3ICsxOTUsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5l
cmF0b3IoSlNHCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvblN0YWNrLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uID0gZnVuY3Rpb25T
dGFja1tpXTsKICAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRnVu
Y3Rpb24gPSBtYWtlRnVuY3Rpb24oZnVuY3Rpb24pOwotICAgICAgICBjb2RlQmxvY2stPmFkZEZ1
bmN0aW9uRGVjbGFyYXRpb24oKm1fZ2xvYmFsRGF0YSwgZnVuY3Rpb24tPmlkZW50KCksIHVubGlu
a2VkRnVuY3Rpb24pOworICAgICAgICBjb2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVjbGFyYXRpb24o
Km1fdm0sIGZ1bmN0aW9uLT5pZGVudCgpLCB1bmxpbmtlZEZ1bmN0aW9uKTsKICAgICB9CiAKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhclN0YWNrLnNpemUoKTsgKytpKQpAQCAtMjAzLDEz
ICsyMDMsMTMgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEpTRwogCiB9
CiAKLUJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTU2NvcGUqIHNjb3BlLCBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHks
IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaywgRGVidWdnZXJNb2RlIGRlYnVn
Z2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSkKK0J5dGVjb2RlR2VuZXJhdG9yOjpC
eXRlY29kZUdlbmVyYXRvcihWTSYgdm0sIEpTU2NvcGUqIHNjb3BlLCBGdW5jdGlvbkJvZHlOb2Rl
KiBmdW5jdGlvbkJvZHksIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaywgRGVi
dWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSkKICAgICA6
IG1fc2hvdWxkRW1pdERlYnVnSG9va3MoZGVidWdnZXJNb2RlID09IERlYnVnZ2VyT24pCiAgICAg
LCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3MocHJvZmlsZXJNb2RlID09IFByb2ZpbGVyT24pCiAg
ICAgLCBtX3N5bWJvbFRhYmxlKGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSkKICAgICAsIG1fc2Nv
cGVOb2RlKGZ1bmN0aW9uQm9keSkKLSAgICAsIG1fc2NvcGUoZ2xvYmFsRGF0YSwgc2NvcGUpCi0g
ICAgLCBtX2NvZGVCbG9jayhnbG9iYWxEYXRhLCBjb2RlQmxvY2spCisgICAgLCBtX3Njb3BlKHZt
LCBzY29wZSkKKyAgICAsIG1fY29kZUJsb2NrKHZtLCBjb2RlQmxvY2spCiAgICAgLCBtX2FjdGl2
YXRpb25SZWdpc3RlcigwKQogICAgICwgbV9lbXB0eVZhbHVlUmVnaXN0ZXIoMCkKICAgICAsIG1f
Z2xvYmFsT2JqZWN0UmVnaXN0ZXIoMCkKQEAgLTIyMiw3ICsyMjIsNyBAQCBCeXRlY29kZUdlbmVy
YXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoSlNHCiAgICAgLCBtX2ZpcnN0TGF6eUZ1bmN0aW9uKDAp
CiAgICAgLCBtX2xhc3RMYXp5RnVuY3Rpb24oMCkKICAgICAsIG1fc3RhdGljUHJvcGVydHlBbmFs
eXplcigmbV9pbnN0cnVjdGlvbnMpCi0gICAgLCBtX2dsb2JhbERhdGEoJmdsb2JhbERhdGEpCisg
ICAgLCBtX3ZtKCZ2bSkKICAgICAsIG1fbGFzdE9wY29kZUlEKG9wX2VuZCkKICNpZm5kZWYgTkRF
QlVHCiAgICAgLCBtX2xhc3RPcGNvZGVQb3NpdGlvbigwKQpAQCAtNDAwLDEzICs0MDAsMTMgQEAg
Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEpTRwogICAgIH0KIH0KIAotQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNTY29wZSogc2NvcGUsIEV2YWxOb2RlKiBldmFsTm9kZSwgVW5saW5rZWRFdmFsQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBw
cm9maWxlck1vZGUpCitCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZt
LCBKU1Njb3BlKiBzY29wZSwgRXZhbE5vZGUqIGV2YWxOb2RlLCBVbmxpbmtlZEV2YWxDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHBy
b2ZpbGVyTW9kZSkKICAgICA6IG1fc2hvdWxkRW1pdERlYnVnSG9va3MoZGVidWdnZXJNb2RlID09
IERlYnVnZ2VyT24pCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3MocHJvZmlsZXJNb2Rl
ID09IFByb2ZpbGVyT24pCiAgICAgLCBtX3N5bWJvbFRhYmxlKGNvZGVCbG9jay0+c3ltYm9sVGFi
bGUoKSkKICAgICAsIG1fc2NvcGVOb2RlKGV2YWxOb2RlKQotICAgICwgbV9zY29wZShnbG9iYWxE
YXRhLCBzY29wZSkKLSAgICAsIG1fY29kZUJsb2NrKGdsb2JhbERhdGEsIGNvZGVCbG9jaykKKyAg
ICAsIG1fc2NvcGUodm0sIHNjb3BlKQorICAgICwgbV9jb2RlQmxvY2sodm0sIGNvZGVCbG9jaykK
ICAgICAsIG1fdGhpc1JlZ2lzdGVyKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpCiAg
ICAgLCBtX2VtcHR5VmFsdWVSZWdpc3RlcigwKQogICAgICwgbV9nbG9iYWxPYmplY3RSZWdpc3Rl
cigwKQpAQCAtNDE5LDcgKzQxOSw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVy
YXRvcihKU0cKICAgICAsIG1fZmlyc3RMYXp5RnVuY3Rpb24oMCkKICAgICAsIG1fbGFzdExhenlG
dW5jdGlvbigwKQogICAgICwgbV9zdGF0aWNQcm9wZXJ0eUFuYWx5emVyKCZtX2luc3RydWN0aW9u
cykKLSAgICAsIG1fZ2xvYmFsRGF0YSgmZ2xvYmFsRGF0YSkKKyAgICAsIG1fdm0oJnZtKQogICAg
ICwgbV9sYXN0T3Bjb2RlSUQob3BfZW5kKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fbGFzdE9w
Y29kZVBvc2l0aW9uKDApCkBAIC05NTgsNyArOTU4LDcgQEAgdW5zaWduZWQgQnl0ZWNvZGVHZW5l
cmF0b3I6OmFkZENvbnN0YW50KAogICAgIFN0cmluZ0ltcGwqIHJlcCA9IGlkZW50LmltcGwoKTsK
ICAgICBJZGVudGlmaWVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9pZGVudGlmaWVyTWFwLmFk
ZChyZXAsIG1fY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCkpOwogICAgIGlmIChyZXN1
bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgbV9jb2RlQmxvY2stPmFkZElkZW50aWZpZXIoSWRlbnRp
ZmllcihtX2dsb2JhbERhdGEsIHJlcCkpOworICAgICAgICBtX2NvZGVCbG9jay0+YWRkSWRlbnRp
ZmllcihJZGVudGlmaWVyKG1fdm0sIHJlcCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWU7CiB9CkBAIC0xMTQ3LDcgKzExNDcsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdExvYWQoCiB7CiAgICAgSlNTdHJpbmcqJiBzdHJpbmdJbk1hcCA9IG1fc3Ry
aW5nTWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlm
ICghc3RyaW5nSW5NYXApCi0gICAgICAgIHN0cmluZ0luTWFwID0ganNPd25lZFN0cmluZyhnbG9i
YWxEYXRhKCksIGlkZW50aWZpZXIuc3RyaW5nKCkpOworICAgICAgICBzdHJpbmdJbk1hcCA9IGpz
T3duZWRTdHJpbmcodm0oKSwgaWRlbnRpZmllci5zdHJpbmcoKSk7CiAgICAgcmV0dXJuIGVtaXRM
b2FkKGRzdCwgSlNWYWx1ZShzdHJpbmdJbk1hcCkpOwogfQogCkBAIC0xNDgxLDcgKzE0ODEsNyBA
QCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERpcmVjCiAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKDApOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoCi0gICAgICAgIHByb3BlcnR5ICE9IG1fZ2xvYmFsRGF0YS0+cHJv
cGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvCisgICAgICAgIHByb3BlcnR5ICE9IG1fdm0tPnBy
b3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bwogICAgICAgICAmJiBQcm9wZXJ0eU5hbWUocHJv
cGVydHkpLmFzSW5kZXgoKSA9PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOwogICAgIHJldHVy
biB2YWx1ZTsKIH0KQEAgLTE2MTQsNyArMTYxNCw3IEBAIEpTU3RyaW5nKiBCeXRlY29kZUdlbmVy
YXRvcjo6YWRkU3RyaW5nQ28KIHsKICAgICBKU1N0cmluZyomIHN0cmluZ0luTWFwID0gbV9zdHJp
bmdNYXAuYWRkKGlkZW50aWZpZXIuaW1wbCgpLCAwKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYg
KCFzdHJpbmdJbk1hcCkgewotICAgICAgICBzdHJpbmdJbk1hcCA9IGpzU3RyaW5nKGdsb2JhbERh
dGEoKSwgaWRlbnRpZmllci5zdHJpbmcoKSk7CisgICAgICAgIHN0cmluZ0luTWFwID0ganNTdHJp
bmcodm0oKSwgaWRlbnRpZmllci5zdHJpbmcoKSk7CiAgICAgICAgIGFkZENvbnN0YW50VmFsdWUo
c3RyaW5nSW5NYXApOwogICAgIH0KICAgICByZXR1cm4gc3RyaW5nSW5NYXA7CkBAIC0xNzYwLDkg
KzE3NjAsOSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxFCiAKIEV4
cGVjdGVkRnVuY3Rpb24gQnl0ZWNvZGVHZW5lcmF0b3I6OmV4cGVjdGVkRnVuY3Rpb25Gb3JJZGVu
dGlmaWVyKGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7Ci0gICAgaWYgKGlkZW50aWZp
ZXIgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5PYmplY3QpCisgICAgaWYgKGlkZW50
aWZpZXIgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+T2JqZWN0KQogICAgICAgICByZXR1cm4gRXhw
ZWN0T2JqZWN0Q29uc3RydWN0b3I7Ci0gICAgaWYgKGlkZW50aWZpZXIgPT0gbV9nbG9iYWxEYXRh
LT5wcm9wZXJ0eU5hbWVzLT5BcnJheSkKKyAgICBpZiAoaWRlbnRpZmllciA9PSBtX3ZtLT5wcm9w
ZXJ0eU5hbWVzLT5BcnJheSkKICAgICAgICAgcmV0dXJuIEV4cGVjdEFycmF5Q29uc3RydWN0b3I7
CiAgICAgcmV0dXJuIE5vRXhwZWN0ZWRGdW5jdGlvbjsKIH0KQEAgLTIzNjUsNyArMjM2NSw3IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BUcnlBbmQKIHZvaWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
IHsKICAgICBlbWl0T3Bjb2RlKG9wX3Rocm93X3N0YXRpY19lcnJvcik7Ci0gICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGFkZENvbnN0YW50VmFsdWUoanNTdHJpbmcoZ2xvYmFsRGF0YSgpLCBtZXNz
YWdlKSktPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudFZh
bHVlKGpzU3RyaW5nKHZtKCksIG1lc3NhZ2UpKS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKHRydWUpOwogfQogCkBAIC0yNTIzLDcgKzI1MjMsNyBAQCB2b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0UmVhZE9ubHlFeGNlCiAgICAgaWYgKCFpc1N0cmljdE1vZGUoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGVtaXRPcGNvZGUob3BfdGhyb3dfc3RhdGljX2Vycm9yKTsKLSAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnRWYWx1ZShqc1N0cmluZyhnbG9iYWxE
YXRhKCksIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcikpLT5pbmRleCgpKTsK
KyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnRWYWx1ZShqc1N0cmluZyh2bSgp
LCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKS0+aW5kZXgoKSk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZhbHNlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2
aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQsMTQgKzI0NCwxNCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdHlwZWRlZiBEZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2sg
VmFyU3RhY2s7CiAgICAgICAgIHR5cGVkZWYgRGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3Rh
Y2sgRnVuY3Rpb25TdGFjazsKIAotICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihKU0dsb2JhbERh
dGEmLCBKU1Njb3BlKiwgUHJvZ3JhbU5vZGUqLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqLCBE
ZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSk7Ci0gICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKEpT
R2xvYmFsRGF0YSYsIEpTU2NvcGUqLCBGdW5jdGlvbkJvZHlOb2RlKiwgVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jayosIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlKTsKLSAgICAgICAgQnl0ZWNv
ZGVHZW5lcmF0b3IoSlNHbG9iYWxEYXRhJiwgSlNTY29wZSosIEV2YWxOb2RlKiwgVW5saW5rZWRF
dmFsQ29kZUJsb2NrKiwgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUpOworICAgICAgICBCeXRl
Y29kZUdlbmVyYXRvcihWTSYsIEpTU2NvcGUqLCBQcm9ncmFtTm9kZSosIFVubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jayosIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlKTsKKyAgICAgICAgQnl0ZWNv
ZGVHZW5lcmF0b3IoVk0mLCBKU1Njb3BlKiwgRnVuY3Rpb25Cb2R5Tm9kZSosIFVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2sqLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSk7CisgICAgICAgIEJ5
dGVjb2RlR2VuZXJhdG9yKFZNJiwgSlNTY29wZSosIEV2YWxOb2RlKiwgVW5saW5rZWRFdmFsQ29k
ZUJsb2NrKiwgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUpOwogCiAgICAgICAgIH5CeXRlY29k
ZUdlbmVyYXRvcigpOwogICAgICAgICAKLSAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxEYXRhOyB9Ci0gICAgICAgIGNvbnN0IENvbW1vbklk
ZW50aWZpZXJzJiBwcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gKm1fZ2xvYmFsRGF0YS0+
cHJvcGVydHlOYW1lczsgfQorICAgICAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9
CisgICAgICAgIGNvbnN0IENvbW1vbklkZW50aWZpZXJzJiBwcm9wZXJ0eU5hbWVzKCkgY29uc3Qg
eyByZXR1cm4gKm1fdm0tPnByb3BlcnR5TmFtZXM7IH0KIAogICAgICAgICBib29sIGlzQ29uc3Ry
dWN0b3IoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpOyB9CiAKQEAgLTY0
Myw3ICs2NDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKiBtYWtlRnVuY3Rpb24oRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSkK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
OjpjcmVhdGUobV9nbG9iYWxEYXRhLCBtX3Njb3BlTm9kZS0+c291cmNlKCksIGJvZHkpOworICAg
ICAgICAgICAgcmV0dXJuIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUobV92bSwg
bV9zY29wZU5vZGUtPnNvdXJjZSgpLCBib2R5KTsKICAgICAgICAgfQogCiAgICAgICAgIEpTU3Ry
aW5nKiBhZGRTdHJpbmdDb25zdGFudChjb25zdCBJZGVudGlmaWVyJik7CkBAIC04MTksNyArODE5
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgU3RhdGljUHJvcGVydHlBbmFseXplciBt
X3N0YXRpY1Byb3BlcnR5QW5hbHl6ZXI7CiAKLSAgICAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2Jh
bERhdGE7CisgICAgICAgIFZNKiBtX3ZtOwogCiAgICAgICAgIE9wY29kZUlEIG1fbGFzdE9wY29k
ZUlEOwogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIFJlZ2lzdGVySUQqIFJlZ0V4cE5vZGU6OmVtaXRC
eXRlY29kZShCeXQKIHsKICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkp
CiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5ld1JlZ0V4cChn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBSZWdFeHA6OmNyZWF0ZSgqZ2VuZXJhdG9y
Lmdsb2JhbERhdGEoKSwgbV9wYXR0ZXJuLnN0cmluZygpLCByZWdFeHBGbGFncyhtX2ZsYWdzLnN0
cmluZygpKSkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5ld1JlZ0V4cChnZW5lcmF0b3Iu
ZmluYWxEZXN0aW5hdGlvbihkc3QpLCBSZWdFeHA6OmNyZWF0ZSgqZ2VuZXJhdG9yLnZtKCksIG1f
cGF0dGVybi5zdHJpbmcoKSwgcmVnRXhwRmxhZ3MobV9mbGFncy5zdHJpbmcoKSkpKTsKIH0KIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXNOb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIxMCw3ICsyMTAsNyBAQCBib29sIEFycmF5Tm9k
ZTo6aXNTaW1wbGVBcnJheSgpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUFyZ3VtZW50
TGlzdE5vZGUqIEFycmF5Tm9kZTo6dG9Bcmd1bWVudExpc3QoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBpbnQgbGluZU51bWJlciwgaW50IGNoYXJQb3NpdGlvbikgY29uc3QKK0FyZ3VtZW50TGlz
dE5vZGUqIEFycmF5Tm9kZTo6dG9Bcmd1bWVudExpc3QoVk0qIHZtLCBpbnQgbGluZU51bWJlciwg
aW50IGNoYXJQb3NpdGlvbikgY29uc3QKIHsKICAgICBBU1NFUlQoIW1fZWxpc2lvbiAmJiAhbV9v
cHRpb25hbCk7CiAgICAgRWxlbWVudE5vZGUqIHB0ciA9IG1fZWxlbWVudDsKQEAgLTIxOSwxMiAr
MjE5LDEyIEBAIEFyZ3VtZW50TGlzdE5vZGUqIEFycmF5Tm9kZTo6dG9Bcmd1bWVudEwKICAgICBK
U1Rva2VuTG9jYXRpb24gbG9jYXRpb247CiAgICAgbG9jYXRpb24ubGluZSA9IGxpbmVOdW1iZXI7
CiAgICAgbG9jYXRpb24uY2hhclBvc2l0aW9uID0gY2hhclBvc2l0aW9uOwotICAgIEFyZ3VtZW50
TGlzdE5vZGUqIGhlYWQgPSBuZXcgKGdsb2JhbERhdGEpIEFyZ3VtZW50TGlzdE5vZGUobG9jYXRp
b24sIHB0ci0+dmFsdWUoKSk7CisgICAgQXJndW1lbnRMaXN0Tm9kZSogaGVhZCA9IG5ldyAodm0p
IEFyZ3VtZW50TGlzdE5vZGUobG9jYXRpb24sIHB0ci0+dmFsdWUoKSk7CiAgICAgQXJndW1lbnRM
aXN0Tm9kZSogdGFpbCA9IGhlYWQ7CiAgICAgcHRyID0gcHRyLT5uZXh0KCk7CiAgICAgZm9yICg7
IHB0cjsgcHRyID0gcHRyLT5uZXh0KCkpIHsKICAgICAgICAgQVNTRVJUKCFwdHItPmVsaXNpb24o
KSk7Ci0gICAgICAgIHRhaWwgPSBuZXcgKGdsb2JhbERhdGEpIEFyZ3VtZW50TGlzdE5vZGUobG9j
YXRpb24sIHRhaWwsIHB0ci0+dmFsdWUoKSk7CisgICAgICAgIHRhaWwgPSBuZXcgKHZtKSBBcmd1
bWVudExpc3ROb2RlKGxvY2F0aW9uLCB0YWlsLCBwdHItPnZhbHVlKCkpOwogICAgIH0KICAgICBy
ZXR1cm4gaGVhZDsKIH0KQEAgLTU1Niw3ICs1NTYsNyBAQCBSZWdpc3RlcklEKiBBcHBseUZ1bmN0
aW9uQ2FsbERvdE5vZGU6OmVtCiAgICAgICAgICAgICAgICAgaWYgKG1fYXJncy0+bV9saXN0Tm9k
ZS0+bV9uZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2FyZ3MtPm1fbGlzdE5v
ZGUtPm1fbmV4dC0+bV9leHByLT5pc1NpbXBsZUFycmF5KCkpOwogICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoIW1fYXJncy0+bV9saXN0Tm9kZS0+bV9uZXh0LT5tX25leHQpOwotICAgICAgICAg
ICAgICAgICAgICBtX2FyZ3MtPm1fbGlzdE5vZGUgPSBzdGF0aWNfY2FzdDxBcnJheU5vZGUqPiht
X2FyZ3MtPm1fbGlzdE5vZGUtPm1fbmV4dC0+bV9leHByKS0+dG9Bcmd1bWVudExpc3QoZ2VuZXJh
dG9yLmdsb2JhbERhdGEoKSwgMCwgMCk7CisgICAgICAgICAgICAgICAgICAgIG1fYXJncy0+bV9s
aXN0Tm9kZSA9IHN0YXRpY19jYXN0PEFycmF5Tm9kZSo+KG1fYXJncy0+bV9saXN0Tm9kZS0+bV9u
ZXh0LT5tX2V4cHIpLT50b0FyZ3VtZW50TGlzdChnZW5lcmF0b3Iudm0oKSwgMCwgMCk7CiAgICAg
ICAgICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZWFsRnVuY3Rpb24gPSBnZW5lcmF0
b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpKTsK
ICAgICAgICAgICAgICAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRv
ciwgbV9hcmdzKTsKICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNhbGxB
cmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG9sZExpc3QtPm1fZXhwcik7CkBAIC0xMTMwLDcgKzEx
MzAsNyBAQCBSZWdpc3RlcklEKiBJbnN0YW5jZU9mTm9kZTo6ZW1pdEJ5dGVjb2RlCiAgICAgZ2Vu
ZXJhdG9yLmVtaXRDaGVja0hhc0luc3RhbmNlKGRzdFJlZy5nZXQoKSwgc3JjMS5nZXQoKSwgc3Jj
Mi5nZXQoKSwgdGFyZ2V0LmdldCgpKTsKIAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwotICAgIGdlbmVyYXRvci5l
bWl0R2V0QnlJZChwcm90b3R5cGUuZ2V0KCksIHNyYzIuZ2V0KCksIGdlbmVyYXRvci5nbG9iYWxE
YXRhKCktPnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7CisgICAgZ2VuZXJhdG9yLmVtaXRHZXRC
eUlkKHByb3RvdHlwZS5nZXQoKSwgc3JjMi5nZXQoKSwgZ2VuZXJhdG9yLnZtKCktPnByb3BlcnR5
TmFtZXMtPnByb3RvdHlwZSk7CiAKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRp
dm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKICAgICBSZWdpc3RlcklEKiByZXN1
bHQgPSBnZW5lcmF0b3IuZW1pdEluc3RhbmNlT2YoZHN0UmVnLmdldCgpLCBzcmMxLmdldCgpLCBw
cm90b3R5cGUuZ2V0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGVidWdnZXIvRGVidWdnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsMzQgKzExMSwzNCBA
QCB2b2lkIERlYnVnZ2VyOjpkZXRhY2goSlNHbG9iYWxPYmplY3QqIGdsCiAgICAgZ2xvYmFsT2Jq
ZWN0LT5zZXREZWJ1Z2dlcigwKTsKIH0KIAotdm9pZCBEZWJ1Z2dlcjo6cmVjb21waWxlQWxsSlNG
dW5jdGlvbnMoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQordm9pZCBEZWJ1Z2dlcjo6cmVjb21w
aWxlQWxsSlNGdW5jdGlvbnMoVk0qIHZtKQogewogICAgIC8vIElmIEphdmFTY3JpcHQgaXMgcnVu
bmluZywgaXQncyBub3Qgc2FmZSB0byByZWNvbXBpbGUsIHNpbmNlIHdlJ2xsIGVuZAogICAgIC8v
IHVwIHRocm93aW5nIGF3YXkgY29kZSB0aGF0IGlzIGxpdmUgb24gdGhlIHN0YWNrLgotICAgIEFT
U0VSVCghZ2xvYmFsRGF0YS0+ZHluYW1pY0dsb2JhbE9iamVjdCk7Ci0gICAgaWYgKGdsb2JhbERh
dGEtPmR5bmFtaWNHbG9iYWxPYmplY3QpCisgICAgQVNTRVJUKCF2bS0+ZHluYW1pY0dsb2JhbE9i
amVjdCk7CisgICAgaWYgKHZtLT5keW5hbWljR2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm47
CiAKICAgICBSZWNvbXBpbGVyIHJlY29tcGlsZXIodGhpcyk7Ci0gICAgZ2xvYmFsRGF0YS0+aGVh
cC5vYmplY3RTcGFjZSgpLmZvckVhY2hMaXZlQ2VsbChyZWNvbXBpbGVyKTsKKyAgICB2bS0+aGVh
cC5vYmplY3RTcGFjZSgpLmZvckVhY2hMaXZlQ2VsbChyZWNvbXBpbGVyKTsKIH0KIAogSlNWYWx1
ZSBldmFsdWF0ZUluR2xvYmFsQ2FsbEZyYW1lKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBKU1ZhbHVl
JiBleGNlcHRpb24sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgQ2FsbEZy
YW1lKiBnbG9iYWxDYWxsRnJhbWUgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKTsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAKICAgICBFdmFsRXhlY3V0YWJsZSogZXZh
bCA9IEV2YWxFeGVjdXRhYmxlOjpjcmVhdGUoZ2xvYmFsQ2FsbEZyYW1lLCBtYWtlU291cmNlKHNj
cmlwdCksIGZhbHNlKTsKICAgICBpZiAoIWV2YWwpIHsKLSAgICAgICAgZXhjZXB0aW9uID0gZ2xv
YmFsRGF0YS5leGNlcHRpb247Ci0gICAgICAgIGdsb2JhbERhdGEuZXhjZXB0aW9uID0gSlNWYWx1
ZSgpOworICAgICAgICBleGNlcHRpb24gPSB2bS5leGNlcHRpb247CisgICAgICAgIHZtLmV4Y2Vw
dGlvbiA9IEpTVmFsdWUoKTsKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKICAgICB9CiAKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGdsb2JhbERhdGEuaW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwg
Z2xvYmFsQ2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIGdsb2JhbENhbGxGcmFtZS0+c2NvcGUoKSk7
Ci0gICAgaWYgKGdsb2JhbERhdGEuZXhjZXB0aW9uKSB7Ci0gICAgICAgIGV4Y2VwdGlvbiA9IGds
b2JhbERhdGEuZXhjZXB0aW9uOwotICAgICAgICBnbG9iYWxEYXRhLmV4Y2VwdGlvbiA9IEpTVmFs
dWUoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHZtLmludGVycHJldGVyLT5leGVjdXRlKGV2YWws
IGdsb2JhbENhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxDYWxsRnJhbWUtPnNjb3BlKCkp
OworICAgIGlmICh2bS5leGNlcHRpb24pIHsKKyAgICAgICAgZXhjZXB0aW9uID0gdm0uZXhjZXB0
aW9uOworICAgICAgICB2bS5leGNlcHRpb24gPSBKU1ZhbHVlKCk7CiAgICAgfQogICAgIEFTU0VS
VChyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvRGVidWdnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvRGVidWdnZXIuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBEZWJ1Z2dlckNhbGxGcmFtZTsKICAg
ICBjbGFzcyBFeGVjU3RhdGU7Ci0gICAgY2xhc3MgSlNHbG9iYWxEYXRhOworICAgIGNsYXNzIFZN
OwogICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIGNsYXNzIEpTVmFsdWU7CiAgICAgY2xh
c3MgU291cmNlUHJvdmlkZXI7CkBAIC01Miw3ICs1Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhY2hCcmVha3BvaW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZy
YW1lJiwgaW50cHRyX3QsIGludCwgaW50KSA9IDA7CiAKIAotICAgICAgICB2b2lkIHJlY29tcGls
ZUFsbEpTRnVuY3Rpb25zKEpTR2xvYmFsRGF0YSopOworICAgICAgICB2b2lkIHJlY29tcGlsZUFs
bEpTRnVuY3Rpb25zKFZNKik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBIYXNoU2V0PEpTR2xv
YmFsT2JqZWN0Kj4gbV9nbG9iYWxPYmplY3RzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5jcHAJKHJldmlzaW9uIDE0
ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNyArMzUsMTcgQEAgQVNTRVJUX0hBU19UUklW
SUFMX0RFU1RSVUNUT1IoRGVidWdnZXJBYwogCiBjb25zdCBDbGFzc0luZm8gRGVidWdnZXJBY3Rp
dmF0aW9uOjpzX2luZm8gPSB7ICJEZWJ1Z2dlckFjdGl2YXRpb24iLCAmQmFzZTo6c19pbmZvLCAw
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKERlYnVnZ2VyQWN0aXZhdGlvbikgfTsKIAotRGVidWdn
ZXJBY3RpdmF0aW9uOjpEZWJ1Z2dlckFjdGl2YXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KQotICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLmRlYnVnZ2Vy
QWN0aXZhdGlvblN0cnVjdHVyZS5nZXQoKSkKK0RlYnVnZ2VyQWN0aXZhdGlvbjo6RGVidWdnZXJB
Y3RpdmF0aW9uKFZNJiB2bSkKKyAgICA6IEpTTm9uRmluYWxPYmplY3Qodm0sIHZtLmRlYnVnZ2Vy
QWN0aXZhdGlvblN0cnVjdHVyZS5nZXQoKSkKIHsKIH0KIAotdm9pZCBEZWJ1Z2dlckFjdGl2YXRp
b246OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNPYmplY3QqIGFj
dGl2YXRpb24pCit2b2lkIERlYnVnZ2VyQWN0aXZhdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
LCBKU09iamVjdCogYWN0aXZhdGlvbikKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9i
YWxEYXRhKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGFjdGl2
YXRpb24pOwogICAgIEFTU0VSVChhY3RpdmF0aW9uLT5pc0FjdGl2YXRpb25PYmplY3QoKSk7Ci0g
ICAgbV9hY3RpdmF0aW9uLnNldChnbG9iYWxEYXRhLCB0aGlzLCBqc0Nhc3Q8SlNBY3RpdmF0aW9u
Kj4oYWN0aXZhdGlvbikpOworICAgIG1fYWN0aXZhdGlvbi5zZXQodm0sIHRoaXMsIGpzQ2FzdDxK
U0FjdGl2YXRpb24qPihhY3RpdmF0aW9uKSk7CiB9CiAKIHZvaWQgRGVidWdnZXJBY3RpdmF0aW9u
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZh
dGlvbi5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdn
ZXIvRGVidWdnZXJBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEwICszNCwxMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNOb25GaW5h
bE9iamVjdCBCYXNlOwogCi0gICAgICAgIHN0YXRpYyBEZWJ1Z2dlckFjdGl2YXRpb24qIGNyZWF0
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTT2JqZWN0KiBvYmplY3QpCisgICAgICAgIHN0
YXRpYyBEZWJ1Z2dlckFjdGl2YXRpb24qIGNyZWF0ZShWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3Qp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIERlYnVnZ2VyQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPERlYnVnZ2VyQWN0aXZhdGlvbj4oZ2xvYmFsRGF0
YS5oZWFwKSkgRGVidWdnZXJBY3RpdmF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICAgICAgYWN0
aXZhdGlvbi0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgb2JqZWN0KTsKKyAgICAgICAgICAg
IERlYnVnZ2VyQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPERlYnVnZ2VyQWN0aXZhdGlvbj4odm0uaGVhcCkpIERlYnVnZ2VyQWN0aXZhdGlvbih2bSk7
CisgICAgICAgICAgICBhY3RpdmF0aW9uLT5maW5pc2hDcmVhdGlvbih2bSwgb2JqZWN0KTsKICAg
ICAgICAgICAgIHJldHVybiBhY3RpdmF0aW9uOwogICAgICAgICB9CiAKQEAgLTUzLDE4ICs1Mywx
OCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU19FWFBPUlREQVRBIHN0YXRpYyBjb25z
dCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpIAogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7IAorICAgICAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCiAgICAgICAgIH0KIAogICAgIHBy
b3RlY3RlZDoKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEpT
T2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYsIEpTT2JqZWN0KiBhY3RpdmF0aW9uKTsKKyAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTT2JqZWN0
KiBhY3RpdmF0aW9uKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IERlYnVnZ2VyQWN0aXZhdGlvbihKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgRGVidWdnZXJBY3RpdmF0aW9uKFZNJik7CiAgICAgICAgIFdyaXRlQmFycmllcjxKU0Fj
dGl2YXRpb24+IG1fYWN0aXZhdGlvbjsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHJldmlzaW9u
IDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxG
cmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDE3ICs5MCwxNyBAQCBKU1ZhbHVlIERlYnVn
Z2VyQ2FsbEZyYW1lOjpldmFsdWF0ZShjb25zCiAgICAgaWYgKCFtX2NhbGxGcmFtZS0+Y29kZUJs
b2NrKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgCi0gICAgSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhID0gbV9jYWxsRnJhbWUtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSBt
X2NhbGxGcmFtZS0+dm0oKTsKICAgICBFdmFsRXhlY3V0YWJsZSogZXZhbCA9IEV2YWxFeGVjdXRh
YmxlOjpjcmVhdGUobV9jYWxsRnJhbWUsIG1ha2VTb3VyY2Uoc2NyaXB0KSwgbV9jYWxsRnJhbWUt
PmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7Ci0gICAgaWYgKGdsb2JhbERhdGEuZXhjZXB0
aW9uKSB7Ci0gICAgICAgIGV4Y2VwdGlvbiA9IGdsb2JhbERhdGEuZXhjZXB0aW9uOwotICAgICAg
ICBnbG9iYWxEYXRhLmV4Y2VwdGlvbiA9IEpTVmFsdWUoKTsKKyAgICBpZiAodm0uZXhjZXB0aW9u
KSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IHZtLmV4Y2VwdGlvbjsKKyAgICAgICAgdm0uZXhjZXB0
aW9uID0gSlNWYWx1ZSgpOwogICAgIH0KIAotICAgIEpTVmFsdWUgcmVzdWx0ID0gZ2xvYmFsRGF0
YS5pbnRlcnByZXRlci0+ZXhlY3V0ZShldmFsLCBtX2NhbGxGcmFtZSwgdGhpc09iamVjdCgpLCBt
X2NhbGxGcmFtZS0+c2NvcGUoKSk7Ci0gICAgaWYgKGdsb2JhbERhdGEuZXhjZXB0aW9uKSB7Ci0g
ICAgICAgIGV4Y2VwdGlvbiA9IGdsb2JhbERhdGEuZXhjZXB0aW9uOwotICAgICAgICBnbG9iYWxE
YXRhLmV4Y2VwdGlvbiA9IEpTVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHZtLmludGVy
cHJldGVyLT5leGVjdXRlKGV2YWwsIG1fY2FsbEZyYW1lLCB0aGlzT2JqZWN0KCksIG1fY2FsbEZy
YW1lLT5zY29wZSgpKTsKKyAgICBpZiAodm0uZXhjZXB0aW9uKSB7CisgICAgICAgIGV4Y2VwdGlv
biA9IHZtLmV4Y2VwdGlvbjsKKyAgICAgICAgdm0uZXhjZXB0aW9uID0gSlNWYWx1ZSgpOwogICAg
IH0KICAgICBBU1NFUlQocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAx
NDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NzYsNyArNDc2LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlRWZmZWN0cyh1bnNpZwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBNYWtlUm9wZTog
ewotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLm1fZ2xvYmFsRGF0YS5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLm1fdm0u
c3RyaW5nU3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAg
ICAgCkBAIC03MjMsNDEgKzcyMyw0MSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZl
Y3RzKHVuc2lnCiAgICAgfQogCiAgICAgY2FzZSBUeXBlT2Y6IHsKLSAgICAgICAgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhID0gbV9jb2RlQmxvY2stPmdsb2JhbERhdGEoKTsKKyAgICAgICAgVk0q
IHZtID0gbV9jb2RlQmxvY2stPnZtKCk7CiAgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBBYnN0cmFjdFZhbHVlJiBhYnN0cmFj
dENoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGlmIChjaGlsZCkgewot
ICAgICAgICAgICAgSlNWYWx1ZSB0eXBlU3RyaW5nID0ganNUeXBlU3RyaW5nRm9yVmFsdWUoKmds
b2JhbERhdGEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiks
IGNoaWxkKTsKKyAgICAgICAgICAgIEpTVmFsdWUgdHlwZVN0cmluZyA9IGpzVHlwZVN0cmluZ0Zv
clZhbHVlKCp2bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2lu
KSwgY2hpbGQpOwogICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGUsIHR5cGVTdHJp
bmcpKSB7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1i
ZXJTcGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIGlmICh0
cnlTZXRDb25zdGFudChub2RlLCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MubnVtYmVyU3RyaW5n
KCkpKSB7CisgICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgdm0tPnNtYWxsU3Ry
aW5ncy5udW1iZXJTdHJpbmcoKSkpIHsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0
YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZSBpZiAoaXNTdHJpbmdTcGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1fdHlwZSkp
IHsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCBnbG9iYWxEYXRhLT5zbWFs
bFN0cmluZ3Muc3RyaW5nU3RyaW5nKCkpKSB7CisgICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3Rh
bnQobm9kZSwgdm0tPnNtYWxsU3RyaW5ncy5zdHJpbmdTdHJpbmcoKSkpIHsKICAgICAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7CiAgICAgICAg
ICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXNGaW5hbE9iamVjdFNwZWN1bGF0
aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSB8fCBpc0FycmF5U3BlY3VsYXRpb24oYWJzdHJhY3RD
aGlsZC5tX3R5cGUpIHx8IGlzQXJndW1lbnRzU3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5
cGUpKSB7Ci0gICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+
c21hbGxTdHJpbmdzLm9iamVjdFN0cmluZygpKSkgeworICAgICAgICAgICAgaWYgKHRyeVNldENv
bnN0YW50KG5vZGUsIHZtLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCkpKSB7CiAgICAgICAg
ICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGaW5hbE9iamVjdCB8
IFNwZWNBcnJheSB8IFNwZWNBcmd1bWVudHMpOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25z
dGFudHMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb25TcGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1fdHlw
ZSkpIHsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCBnbG9iYWxEYXRhLT5z
bWFsbFN0cmluZ3MuZnVuY3Rpb25TdHJpbmcoKSkpIHsKKyAgICAgICAgICAgIGlmICh0cnlTZXRD
b25zdGFudChub2RlLCB2bS0+c21hbGxTdHJpbmdzLmZ1bmN0aW9uU3RyaW5nKCkpKSB7CiAgICAg
ICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGdW5jdGlvbik7
CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuU3Bl
Y3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBpZiAodHJ5U2V0
Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKSkp
IHsKKyAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCB2bS0+c21hbGxTdHJpbmdz
LmJvb2xlYW5TdHJpbmcoKSkpIHsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5maWx0ZXIoU3BlY0Jvb2xlYW4pOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFu
dHMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzc1LDcgKzc3NSw3IEBAIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLm1fZ2xvYmFsRGF0YS5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLm1fdm0uc3Ry
aW5nU3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAg
CkBAIC04NjcsNyArODY3LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1
bnNpZwogCiAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgubV9nbG9iYWxEYXRhLnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgu
bV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgIGNhc2UgR2V0QnlWYWw6IHsKQEAgLTg4Niw3ICs4ODYsNyBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLm1fZ2xvYmFsRGF0YS5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFw
aC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtl
VG9wKCk7CkBAIC0xMDUyLDcgKzEwNTIsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVF
ZmZlY3RzKHVuc2lnCiAgICAgICAgIC8vIGlmIChkZXN0aW5hdGlvbi5tX3R5cGUgJiAhKFNwZWNO
dW1iZXIgfCBTcGVjU3RyaW5nIHwgU3BlY0Jvb2xlYW4pKSB7CiAgICAgICAgIC8vICAgICBkZXN0
aW5hdGlvbi5maWx0ZXIoU3BlY051bWJlciB8IFNwZWNTdHJpbmcgfCBTcGVjQm9vbGVhbik7CiAg
ICAgICAgIC8vICAgICBBYnN0cmFjdFZhbHVlIHN0cmluZzsKLSAgICAgICAgLy8gICAgIHN0cmlu
Zy5zZXQoZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlKTsKKyAgICAgICAgLy8gICAgIHN0cmlu
Zy5zZXQodm0tPnN0cmluZ1N0cnVjdHVyZSk7CiAgICAgICAgIC8vICAgICBkZXN0aW5hdGlvbi5t
ZXJnZShzdHJpbmcpOwogICAgICAgICAvLyB9CiAgICAgICAgIC8vCkBAIC0xMDk3LDcgKzEwOTcs
NyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaC5tX2dsb2JhbERhdGEuc3Ry
aW5nU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaC5t
X3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgCkBAIC0xMjcwLDcgKzEyNzAsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZl
Y3RzKHVuc2lnCiAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+
cHJlZGljdGlvbigpKSkgewogICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CiAgICAgICAg
ICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
KAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fZ2xvYmFsRGF0YSwgc3RydWN0dXJlLAor
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fdm0sIHN0cnVjdHVyZSwKICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5tX2NvZGVCbG9jay0+aWRlbnRpZmllcihub2RlLT5pZGVudGlmaWVy
TnVtYmVyKCkpKTsKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gQXNzZXJ0IHRoaW5ncyB0aGF0IHdlIGNhbid0IGhhbmRsZSBh
bmQgdGhhdCB0aGUgY29tcHV0ZUZvcigpIG1ldGhvZApAQCAtMTQ3MCw3ICsxNDcwLDcgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZwogICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KHRydWUpOwogICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgIFB1
dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAg
ICAgICAgICBtX2dyYXBoLm1fZ2xvYmFsRGF0YSwKKyAgICAgICAgICAgICAgICBtX2dyYXBoLm1f
dm0sCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9y
aWdpbiksCiAgICAgICAgICAgICAgICAgc3RydWN0dXJlLAogICAgICAgICAgICAgICAgIG1fZ3Jh
cGgubV9jb2RlQmxvY2stPmlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJs
eUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkRG
R0ZQUkluZm8uaCIKICNpbmNsdWRlICJERkdHUFJJbmZvLmgiCiAjaW5jbHVkZSAiREZHTm9kZS5o
IgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAi
TWFjcm9Bc3NlbWJsZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAt
NDMsOCArNDMsOCBAQCB0eXBlZGVmIHZvaWQgKCpWX0RGR0RlYnVnT3BlcmF0aW9uX0VQUCkoCiAK
IGNsYXNzIEFzc2VtYmx5SGVscGVycyA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlciB7CiBwdWJsaWM6
Ci0gICAgQXNzZW1ibHlIZWxwZXJzKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCi0gICAgICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgQXNz
ZW1ibHlIZWxwZXJzKFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgICAgIDogbV92
bSh2bSkKICAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgICAgICwgbV9iYXNl
bGluZUNvZGVCbG9jayhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpIDog
MCkKICAgICB7CkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jazsgfQotICAgIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSgpIHsgcmV0dXJuIG1fZ2xvYmFsRGF0YTsgfQorICAgIFZNKiB2bSgp
IHsgcmV0dXJuIG1fdm07IH0KICAgICBBc3NlbWJsZXJUeXBlX1QmIGFzc2VtYmxlcigpIHsgcmV0
dXJuIG1fYXNzZW1ibGVyOyB9CiAgICAgCiAjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKFg4NikKQEAg
LTE5MCw3ICsxOTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWJ1Z0NhbGwoVl9ERkdEZWJ1Z09w
ZXJhdGlvbl9FUFAgZnVuY3Rpb24sIHZvaWQqIGFyZ3VtZW50KQogICAgIHsKICAgICAgICAgc2l6
ZV90IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIChHUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVycyArIEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKTsKLSAgICAgICAgU2Ny
YXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1fZ2xvYmFsRGF0YS0+c2NyYXRjaEJ1ZmZlckZv
clNpemUoc2NyYXRjaFNpemUpOworICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVy
ID0gbV92bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOwogICAgICAgICBFbmNv
ZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNo
QnVmZmVyLT5kYXRhQnVmZmVyKCkpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CkBAIC0yOTIsOSArMjkyLDkgQEAg
cHVibGljOgogICAgIEp1bXAgZW1pdEV4Y2VwdGlvbkNoZWNrKEV4Y2VwdGlvbkNoZWNrS2luZCBr
aW5kID0gTm9ybWFsRXhjZXB0aW9uQ2hlY2spCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/
IE5vblplcm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3MoJmdsb2JhbERhdGEoKS0+ZXhjZXB0aW9u
KSk7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25D
aGVjayA/IE5vblplcm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3MoJnZtKCktPmV4Y2VwdGlvbikp
OwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGtpbmQg
PT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb3RFcXVhbCA6IEVxdWFsLCBBYnNvbHV0ZUFkZHJl
c3MocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmdsb2JhbERhdGEoKS0+ZXhjZXB0aW9uKSArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkVtcHR5VmFsdWVUYWcpKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGtpbmQgPT0gTm9y
bWFsRXhjZXB0aW9uQ2hlY2sgPyBOb3RFcXVhbCA6IEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MocmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oJnZtKCktPmV4Y2VwdGlvbikgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVl
VGFnKSk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTM4MSw3ICszODEsNyBAQCBwdWJsaWM6CiAgICAg
VmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwRm9yKENvZGVC
bG9jayopOwogICAgIAogcHJvdGVjdGVkOgotICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRh
OworICAgIFZNKiBtX3ZtOwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgQ29kZUJs
b2NrKiBtX2Jhc2VsaW5lQ29kZUJsb2NrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMiw3ICsxMjIsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBj
bGFzcyBCeXRlQ29kZVBhcnNlciB7CiBwdWJsaWM6CiAgICAgQnl0ZUNvZGVQYXJzZXIoR3JhcGgm
IGdyYXBoKQotICAgICAgICA6IG1fZ2xvYmFsRGF0YSgmZ3JhcGgubV9nbG9iYWxEYXRhKQorICAg
ICAgICA6IG1fdm0oJmdyYXBoLm1fdm0pCiAgICAgICAgICwgbV9jb2RlQmxvY2soZ3JhcGgubV9j
b2RlQmxvY2spCiAgICAgICAgICwgbV9wcm9maWxlZEJsb2NrKGdyYXBoLm1fcHJvZmlsZWRCbG9j
aykKICAgICAgICAgLCBtX2dyYXBoKGdyYXBoKQpAQCAtOTQyLDcgKzk0Miw3IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgdm9pZCBidWlsZE9wZXJhbmRNYXBzSWZOZWNlc3NhcnkoKTsKICAgICAKLSAg
ICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKKyAgICBWTSogbV92bTsKICAgICBDb2RlQmxv
Y2sqIG1fY29kZUJsb2NrOwogICAgIENvZGVCbG9jayogbV9wcm9maWxlZEJsb2NrOwogICAgIEdy
YXBoJiBtX2dyYXBoOwpAQCAtMTYzNSw3ICsxNjM1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlQ29uc3RhbnRJbnRlcgogICAgICAgICBOb2RlKiByZXN1bHQ7CiAgICAgICAgIAogICAg
ICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPD0gMSkKLSAgICAgICAgICAgIHJl
c3VsdCA9IGNlbGxDb25zdGFudChtX2dsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5lbXB0eVN0cmlu
ZygpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGNlbGxDb25zdGFudChtX3ZtLT5zbWFsbFN0cmlu
Z3MuZW1wdHlTdHJpbmcoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IGFk
ZFRvR3JhcGgoVG9TdHJpbmcsIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5k
KDEpKSk7CiAgICAgICAgIApAQCAtMTkyNCw3ICsxOTI0LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogewogICAgIGJvb2wgc2hvdWxkQ29udGludWVQYXJzaW5n
ID0gdHJ1ZTsKIAotICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IG1fZ2xvYmFsRGF0YS0+
aW50ZXJwcmV0ZXI7CisgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV92bS0+aW50ZXJw
cmV0ZXI7CiAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gbV9pbmxpbmVTdGFj
a1RvcC0+bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CiAgICAgdW5zaWduZWQg
YmxvY2tCZWdpbiA9IG1fY3VycmVudEluZGV4OwogICAgIApAQCAtMTk3NCw3ICsxOTc0LDcgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAKICAgICAg
ICAgaWYgKG1fZ3JhcGgubV9jb21waWxhdGlvbiAmJiBvcGNvZGVJRCAhPSBvcF9jYWxsX3B1dF9y
ZXN1bHQpIHsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ291bnRFeGVjdXRpb24sIE9wSW5mbyht
X2dyYXBoLm1fY29tcGlsYXRpb24tPmV4ZWN1dGlvbkNvdW50ZXJGb3IoCi0gICAgICAgICAgICAg
ICAgUHJvZmlsZXI6Ok9yaWdpblN0YWNrKCptX2dsb2JhbERhdGEtPm1fcGVyQnl0ZWNvZGVQcm9m
aWxlciwgbV9jb2RlQmxvY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCkpKSkpOworICAgICAgICAgICAg
ICAgIFByb2ZpbGVyOjpPcmlnaW5TdGFjaygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBt
X2NvZGVCbG9jaywgY3VycmVudENvZGVPcmlnaW4oKSkpKSk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKQEAgLTM0NzksMTAgKzM0NzksMTAgQEAgQnl0
ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgICAgICBBU1NFUlQoY2Fs
bHNpdGVCbG9ja0hlYWQgIT0gTm9CbG9jayk7CiAgICAgICAgIAogICAgICAgICBJbmxpbmVDYWxs
RnJhbWUgaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICBpbmxpbmVDYWxsRnJhbWUuZXhlY3V0YWJs
ZS5zZXQoKmJ5dGVDb2RlUGFyc2VyLT5tX2dsb2JhbERhdGEsIGJ5dGVDb2RlUGFyc2VyLT5tX2Nv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkp
OworICAgICAgICBpbmxpbmVDYWxsRnJhbWUuZXhlY3V0YWJsZS5zZXQoKmJ5dGVDb2RlUGFyc2Vy
LT5tX3ZtLCBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKTsKICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLnN0
YWNrT2Zmc2V0ID0gaW5saW5lQ2FsbEZyYW1lU3RhcnQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFk
ZXJTaXplOwogICAgICAgICBpZiAoY2FsbGVlKQotICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1l
LmNhbGxlZS5zZXQoKmJ5dGVDb2RlUGFyc2VyLT5tX2dsb2JhbERhdGEsIGJ5dGVDb2RlUGFyc2Vy
LT5tX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CisgICAgICAgICAgICBp
bmxpbmVDYWxsRnJhbWUuY2FsbGVlLnNldCgqYnl0ZUNvZGVQYXJzZXItPm1fdm0sIGJ5dGVDb2Rl
UGFyc2VyLT5tX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CiAgICAgICAg
IGlubGluZUNhbGxGcmFtZS5jYWxsZXIgPSBieXRlQ29kZVBhcnNlci0+Y3VycmVudENvZGVPcmln
aW4oKTsKICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLmFyZ3VtZW50cy5yZXNpemUoYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpOyAvLyBTZXQgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgaW5jbHVk
aW5nIHRoaXMsIGJ1dCBkb24ndCBjb25maWd1cmUgdGhlIHZhbHVlIHJlY292ZXJpZXMsIHlldC4K
ICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLmlzQ2FsbCA9IGlzQ2FsbChraW5kKTsKQEAgLTM1MjQs
NyArMzUyNCw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAg
ICAgICAgICAgIFN0cmluZ0ltcGwqIHJlcCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihpKS5pbXBs
KCk7CiAgICAgICAgICAgICBJZGVudGlmaWVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gYnl0ZUNv
ZGVQYXJzZXItPm1faWRlbnRpZmllck1hcC5hZGQocmVwLCBieXRlQ29kZVBhcnNlci0+bV9jb2Rl
QmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKSk7CiAgICAgICAgICAgICBpZiAocmVzdWx0Lmlz
TmV3RW50cnkpCi0gICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5h
ZGRJZGVudGlmaWVyKElkZW50aWZpZXIoYnl0ZUNvZGVQYXJzZXItPm1fZ2xvYmFsRGF0YSwgcmVw
KSk7CisgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5hZGRJZGVu
dGlmaWVyKElkZW50aWZpZXIoYnl0ZUNvZGVQYXJzZXItPm1fdm0sIHJlcCkpOwogICAgICAgICAg
ICAgbV9pZGVudGlmaWVyUmVtYXBbaV0gPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAg
ICB9CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZkNv
bnN0YW50UmVnaXN0ZXJzKCk7ICsraSkgewpAQCAtMzU5NCw3ICszNTk0LDcgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogICAgIAogICAgIGlmIChtX2dyYXBoLm1fY29t
cGlsYXRpb24pIHsKICAgICAgICAgbV9ncmFwaC5tX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5
dGVjb2RlcygKLSAgICAgICAgICAgICptX2dsb2JhbERhdGEtPm1fcGVyQnl0ZWNvZGVQcm9maWxl
ciwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrKTsKKyAgICAgICAgICAgICptX3Zt
LT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9j
ayk7CiAgICAgfQogICAgIAogICAgIGJvb2wgc2hvdWxkRHVtcEJ5dGVjb2RlID0gT3B0aW9uczo6
ZHVtcEJ5dGVjb2RlQXRERkdUaW1lKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDcgKzMzLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBK
U0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIAogbmFtZXNwYWNlIERGRyB7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0NhbGxIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDQ2FsbEhlbHBlcnMuaAkocmV2aXNpb24gMTQ4NjU1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDQ2FsbEhlbHBlcnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsOCArMzcsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAKIGNsYXNzIENDYWxsSGVscGVycyA6IHB1YmxpYyBBc3NlbWJseUhlbHBlcnMgewogcHVibGlj
OgotICAgIENDYWxsSGVscGVycyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayog
Y29kZUJsb2NrID0gMCkKLSAgICAgICAgOiBBc3NlbWJseUhlbHBlcnMoZ2xvYmFsRGF0YSwgY29k
ZUJsb2NrKQorICAgIENDYWxsSGVscGVycyhWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrID0g
MCkKKyAgICAgICAgOiBBc3NlbWJseUhlbHBlcnModm0sIGNvZGVCbG9jaykKICAgICB7CiAgICAg
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMu
Y3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nh
cGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgc3RhdGljIGlu
bGluZSB2b2lkIGRlYnVnRmFpbChDb2RlQmxvY2sqIAogdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJu
VHlwZSwgUmV0dXJuVHlwZSAoKmNhbkhhbmRsZU9wY29kZSkoT3Bjb2RlSUQsIENvZGVCbG9jayos
IEluc3RydWN0aW9uKik+CiBSZXR1cm5UeXBlIGNhbkhhbmRsZU9wY29kZXMoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFJldHVyblR5cGUgaW5pdGlhbFZhbHVlKQogewotICAgIEludGVycHJldGVyKiBp
bnRlcnByZXRlciA9IGNvZGVCbG9jay0+Z2xvYmFsRGF0YSgpLT5pbnRlcnByZXRlcjsKKyAgICBJ
bnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBjb2RlQmxvY2stPnZtKCktPmludGVycHJldGVyOwog
ICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuYmVnaW4oKTsKICAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CiAgICAgUmV0dXJuVHlwZSByZXN1bHQgPSBpbml0aWFs
VmFsdWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1NSw3ICsxNTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJvb2wgbmVlZHND
ZWxsQ2hlY2sgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fdHlwZSAmIH5TcGVjQ2VsbDsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdl
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgIGdsb2JhbERhdGEo
KSwgc3RydWN0dXJlLCBjb2RlQmxvY2soKS0+aWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKSk7
CisgICAgICAgICAgICAgICAgICAgIHZtKCksIHN0cnVjdHVyZSwgY29kZUJsb2NrKCktPmlkZW50
aWZpZXIoaWRlbnRpZmllck51bWJlcikpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGlmICghc3RhdHVzLmlzU2ltcGxlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFdlIGNvdWxkIGhhbmRsZSBwcm90b3R5cGUgY2FzZXMuCkBAIC0yMjAsNyArMjIwLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBib29sIG5lZWRzQ2VsbENoZWNrID0gbV9zdGF0ZS5m
b3JOb2RlKGNoaWxkKS5tX3R5cGUgJiB+U3BlY0NlbGw7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKAotICAgICAgICAgICAgICAgICAgICBnbG9iYWxEYXRhKCksCisgICAgICAgICAgICAgICAg
ICAgIHZtKCksCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNv
ZGVPcmlnaW4pLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsCiAgICAgICAgICAgICAg
ICAgICAgIGNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAkocmV2aXNp
b24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgRGlzYXNzZW1ibGVyOjpy
ZXBvcnRUb1Byb2ZpbGVyKFByb2YKICAgICAgICAgUHJvZmlsZXI6Ok9yaWdpblN0YWNrIHN0YWNr
OwogICAgICAgICAKICAgICAgICAgaWYgKG9wc1tpXS5jb2RlT3JpZ2luLmlzU2V0KCkpCi0gICAg
ICAgICAgICBzdGFjayA9IFByb2ZpbGVyOjpPcmlnaW5TdGFjaygqbV9ncmFwaC5tX2dsb2JhbERh
dGEubV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX2dyYXBoLm1fY29kZUJsb2NrLCBvcHNbaV0uY29k
ZU9yaWdpbik7CisgICAgICAgICAgICBzdGFjayA9IFByb2ZpbGVyOjpPcmlnaW5TdGFjaygqbV9n
cmFwaC5tX3ZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9ncmFwaC5tX2NvZGVCbG9jaywgb3Bz
W2ldLmNvZGVPcmlnaW4pOwogICAgICAgICAKICAgICAgICAgY29tcGlsYXRpb24tPmFkZERlc2Ny
aXB0aW9uKFByb2ZpbGVyOjpDb21waWxlZEJ5dGVjb2RlKHN0YWNrLCBvcHNbaV0udGV4dCkpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlz
aW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIGlubGluZSBib29sIGNvbXBpbGUoQ29t
cGlsZU1vZGUgY29tcGlsZU0KICAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBleGVj
LT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsKICAgICB9CiAgICAgCi0gICAgR3JhcGgg
ZGZnKGV4ZWMtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgs
IG11c3RIYW5kbGVWYWx1ZXMpOworICAgIEdyYXBoIGRmZyhleGVjLT52bSgpLCBjb2RlQmxvY2ss
IG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbXVzdEhhbmRsZVZhbHVlcyk7CiAgICAgaWYgKCFwYXJz
ZShleGVjLCBkZmcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMz
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEpJVENvZGU7
Ci1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjsKIAogbmFtZXNwYWNlIERGRyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3NSw3ICs2
NzUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgc2V0VXNlS2luZEFuZFVuYm94SWZQcm9maXRh
YmxlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGlmICghaXNJbnQzMlNw
ZWN1bGF0aW9uKG5vZGUtPnByZWRpY3Rpb24oKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBpZiAoY29kZUJsb2NrKCktPmlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51
bWJlcigpKSAhPSBnbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQorICAgICAgICAg
ICAgaWYgKGNvZGVCbG9jaygpLT5pZGVudGlmaWVyKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSkg
IT0gdm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IAogICAgICAgICAgICAgICAg
IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmdldEFycmF5
UHJvZmlsZSgKQEAgLTEwNDYsNyArMTA0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVk
IGF0dHJpYnV0ZXNVbnVzZWQ7CiAgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKICAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLT5nZXQo
Ci0gICAgICAgICAgICBnbG9iYWxEYXRhKCksIGlkZW50LCBhdHRyaWJ1dGVzVW51c2VkLCBzcGVj
aWZpY1ZhbHVlKTsKKyAgICAgICAgICAgIHZtKCksIGlkZW50LCBhdHRyaWJ1dGVzVW51c2VkLCBz
cGVjaWZpY1ZhbHVlKTsKICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIApAQCAtMTA4NSw5ICsxMDg1LDkgQEAgcHJp
dmF0ZToKICAgICAgICAgLy8gKHRoYXQgd291bGQgY2FsbCB0b1N0cmluZygpKS4gV2UgZG9uJ3Qg
d2FudCB0aGUgREZHIHRvIGhhdmUgdG8gZGlzdGluZ3Vpc2gKICAgICAgICAgLy8gYmV0d2VlbiB0
aGUgdHdvLCBqdXN0IGJlY2F1c2UgdGhhdCBzZWVtcyBsaWtlIGl0IHdvdWxkIGdldCBjb25mdXNp
bmcuIFNvIHdlCiAgICAgICAgIC8vIGp1c3QgcmVxdWlyZSBib3RoIG1ldGhvZHMgdG8gYmUgc2Fu
ZS4KLSAgICAgICAgaWYgKCFpc1N0cmluZ1Byb3RvdHlwZU1ldGhvZFNhbmUoc3RyaW5nUHJvdG90
eXBlU3RydWN0dXJlLCBnbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+dmFsdWVPZikpCisgICAg
ICAgIGlmICghaXNTdHJpbmdQcm90b3R5cGVNZXRob2RTYW5lKHN0cmluZ1Byb3RvdHlwZVN0cnVj
dHVyZSwgdm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9mKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgaWYgKCFpc1N0cmluZ1Byb3RvdHlwZU1ldGhvZFNhbmUoc3RyaW5nUHJv
dG90eXBlU3RydWN0dXJlLCBnbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcpKQor
ICAgICAgICBpZiAoIWlzU3RyaW5nUHJvdG90eXBlTWV0aG9kU2FuZShzdHJpbmdQcm90b3R5cGVT
dHJ1Y3R1cmUsIHZtKCkucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDEy
ICs0NCwxMiBAQCBzdGF0aWMgY29uc3QgY2hhciogZGZnT3BOYW1lc1tdID0gewogI3VuZGVmIFNU
UklOR0laRV9ERkdfT1BfRU5VTQogfTsKIAotR3JhcGg6OkdyYXBoKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJ
bmRleCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMpCi0gICAgOiBt
X2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKK0dyYXBoOjpHcmFwaChWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNvbnN0IE9wZXJhbmRz
PEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKQorICAgIDogbV92bSh2bSkKICAgICAsIG1fY29k
ZUJsb2NrKGNvZGVCbG9jaykKLSAgICAsIG1fY29tcGlsYXRpb24oZ2xvYmFsRGF0YS5tX3BlckJ5
dGVjb2RlUHJvZmlsZXIgPyBnbG9iYWxEYXRhLm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+bmV3Q29t
cGlsYXRpb24oY29kZUJsb2NrLCBQcm9maWxlcjo6REZHKSA6IDApCisgICAgLCBtX2NvbXBpbGF0
aW9uKHZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlciA/IHZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+
bmV3Q29tcGlsYXRpb24oY29kZUJsb2NrLCBQcm9maWxlcjo6REZHKSA6IDApCiAgICAgLCBtX3By
b2ZpbGVkQmxvY2soY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQotICAgICwgbV9hbGxvY2F0b3Io
Z2xvYmFsRGF0YS5tX2RmZ1N0YXRlLT5tX2FsbG9jYXRvcikKKyAgICAsIG1fYWxsb2NhdG9yKHZt
Lm1fZGZnU3RhdGUtPm1fYWxsb2NhdG9yKQogICAgICwgbV9oYXNBcmd1bWVudHMoZmFsc2UpCiAg
ICAgLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAg
LCBtX211c3RIYW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBAQCBl
bnVtIEFkZFNwZWN1bGF0aW9uTW9kZSB7CiAvLyBOb2RlcyB0aGF0IGFyZSAnZGVhZCcgcmVtYWlu
IGluIHRoZSB2ZWN0b3Igd2l0aCByZWZDb3VudCAwLgogY2xhc3MgR3JhcGggewogcHVibGljOgot
ICAgIEdyYXBoKEpTR2xvYmFsRGF0YSYsIENvZGVCbG9jayosIHVuc2lnbmVkIG9zckVudHJ5Qnl0
ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMpOwor
ICAgIEdyYXBoKFZNJiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4
LCBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcyk7CiAgICAgfkdyYXBo
KCk7CiAgICAgCiAgICAgdm9pZCBjaGFuZ2VDaGlsZChFZGdlJiBlZGdlLCBOb2RlKiBuZXdOb2Rl
KQpAQCAtNjg3LDcgKzY4Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAg
ICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsKKyAgICBWTSYgbV92bTsKICAgICBDb2RlQmxv
Y2sqIG1fY29kZUJsb2NrOwogICAgIFJlZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRpb24+IG1fY29t
cGlsYXRpb247CiAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTQ4NjU1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDE3ICszNiwxNyBAQAogI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklU
LmgiCiAjaW5jbHVkZSAiREZHVGh1bmtzLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMu
aCIKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUg
IkxpbmtCdWZmZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBKSVRD
b21waWxlcjo6SklUQ29tcGlsZXIoR3JhcGgmIGRmZykKLSAgICA6IENDYWxsSGVscGVycygmZGZn
Lm1fZ2xvYmFsRGF0YSwgZGZnLm1fY29kZUJsb2NrKQorICAgIDogQ0NhbGxIZWxwZXJzKCZkZmcu
bV92bSwgZGZnLm1fY29kZUJsb2NrKQogICAgICwgbV9ncmFwaChkZmcpCiAgICAgLCBtX2N1cnJl
bnRDb2RlT3JpZ2luSW5kZXgoMCkKIHsKLSAgICBpZiAoc2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkg
fHwgbV9ncmFwaC5tX2dsb2JhbERhdGEubV9wZXJCeXRlY29kZVByb2ZpbGVyKQorICAgIGlmIChz
aG91bGRTaG93RGlzYXNzZW1ibHkoKSB8fCBtX2dyYXBoLm1fdm0ubV9wZXJCeXRlY29kZVByb2Zp
bGVyKQogICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IGFkb3B0UHRyKG5ldyBEaXNhc3NlbWJsZXIo
ZGZnKSk7CiB9CiAKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4
aXRzKCkKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29kZUJsb2NrKCktPndhdGNocG9pbnQo
ZXhpdC5tX3dhdGNocG9pbnRJbmRleCkuc2V0RGVzdGluYXRpb24obGFiZWwoKSk7CiAgICAgICAg
IGppdEFzc2VydEhhc1ZhbGlkQ2FsbEZyYW1lKCk7Ci0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZElt
bTMyKGkpLCAmZ2xvYmFsRGF0YSgpLT5vc3JFeGl0SW5kZXgpOworICAgICAgICBzdG9yZTMyKFRy
dXN0ZWRJbW0zMihpKSwgJnZtKCktPm9zckV4aXRJbmRleCk7CiAgICAgICAgIGV4aXQuc2V0UGF0
Y2hhYmxlQ29kZU9mZnNldChwYXRjaGFibGVKdW1wKCkpOwogICAgIH0KIH0KQEAgLTIwNiwxNCAr
MjA2LDE0IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAg
ICAgaW5mby5jYWxsVHlwZSA9IG1fanNDYWxsc1tpXS5tX2NhbGxUeXBlOwogICAgICAgICBpbmZv
LmlzREZHID0gdHJ1ZTsKICAgICAgICAgaW5mby5jb2RlT3JpZ2luID0gbV9qc0NhbGxzW2ldLm1f
Y29kZU9yaWdpbjsKLSAgICAgICAgbGlua0J1ZmZlci5saW5rKG1fanNDYWxsc1tpXS5tX3Nsb3dD
YWxsLCBGdW5jdGlvblB0cigobV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKGluZm8uY2FsbFR5cGUg
PT0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3QgPyBsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3Ig
OiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKSkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsK
KyAgICAgICAgbGlua0J1ZmZlci5saW5rKG1fanNDYWxsc1tpXS5tX3Nsb3dDYWxsLCBGdW5jdGlv
blB0cigobV92bS0+Z2V0Q1RJU3R1YihpbmZvLmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q29u
c3RydWN0ID8gbGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yIDogbGlua0NhbGxUaHVua0dlbmVy
YXRvcikpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAgIGluZm8uY2FsbFJl
dHVybkxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9qc0NhbGxzW2ld
Lm1fc2xvd0NhbGwpOwogICAgICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZihtX2pzQ2FsbHNbaV0ubV90YXJnZXRUb0NoZWNrKTsKICAgICAgICAgaW5mby5ob3RQ
YXRoT3RoZXIgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2pzQ2FsbHNbaV0ubV9m
YXN0Q2FsbCk7CiAgICAgICAgIGluZm8uY2FsbGVlR1BSID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KG1fanNDYWxsc1tpXS5tX2NhbGxlZSk7CiAgICAgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBvc3JFeGl0VGh1bmsgPSBnbG9iYWxEYXRhKCktPmdldENUSVN0dWIob3NyRXhpdEdl
bmVyYXRpb25UaHVua0dlbmVyYXRvcik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4
aXRUaHVuayA9IHZtKCktPmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRv
cik7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgdGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWwob3Ny
RXhpdFRodW5rLmNvZGUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvZGVCbG9j
aygpLT5udW1iZXJPZk9TUkV4aXRzKCk7ICsraSkgewogICAgICAgICBPU1JFeGl0JiBleGl0ID0g
Y29kZUJsb2NrKCktPm9zckV4aXQoaSk7CkBAIC0yNjAsNyArMjYwLDcgQEAgYm9vbCBKSVRDb21w
aWxlcjo6Y29tcGlsZShKSVRDb2RlJiBlbnRyeQogICAgIHNwZWN1bGF0aXZlLmNyZWF0ZU9TUkVu
dHJpZXMoKTsKICAgICBzZXRFbmRPZkNvZGUoKTsKIAotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZl
cigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWls
KTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrLCBK
SVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmIChsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9j
YXRlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBsaW5rKGxpbmtCdWZmZXIpOwpAQCAt
MjkyLDcgKzI5Miw3IEBAIGJvb2wgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbihKSVRDb2QK
ICAgICAvLyBQbGFudCBhIGNoZWNrIHRoYXQgc3VmZmljaWVudCBzcGFjZSBpcyBhdmFpbGFibGUg
aW4gdGhlIEpTU3RhY2suCiAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01NjI5MQogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2st
Pm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgSnVtcCBzdGFja0NoZWNrID0gYnJh
bmNoUHRyKEJlbG93LCBBYnNvbHV0ZUFkZHJlc3MobV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+
c3RhY2soKS5hZGRyZXNzT2ZFbmQoKSksIEdQUkluZm86OnJlZ1QxKTsKKyAgICBKdW1wIHN0YWNr
Q2hlY2sgPSBicmFuY2hQdHIoQmVsb3csIEFic29sdXRlQWRkcmVzcyhtX3ZtLT5pbnRlcnByZXRl
ci0+c3RhY2soKS5hZGRyZXNzT2ZFbmQoKSksIEdQUkluZm86OnJlZ1QxKTsKICAgICAvLyBSZXR1
cm4gaGVyZSBhZnRlciBzdGFjayBjaGVjay4KICAgICBMYWJlbCBmcm9tU3RhY2tDaGVjayA9IGxh
YmVsKCk7CiAKQEAgLTM0OSw3ICszNDksNyBAQCBib29sIEpJVENvbXBpbGVyOjpjb21waWxlRnVu
Y3Rpb24oSklUQ29kCiAgICAgc2V0RW5kT2ZDb2RlKCk7CiAKICAgICAvLyA9PT0gTGluayA9PT0K
LSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxv
Y2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpt
X3ZtLCB0aGlzLCBtX2NvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAo
bGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgbGluayhsaW5rQnVmZmVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQWJzdHJhY3RTYW1wbGluZ0NvdW50ZXI7CiBjbGFzcyBD
b2RlQmxvY2s7Ci1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIAogbmFtZXNwYWNlIERG
RyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShy
ZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50
cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgZGF0YUxvZygiT1NSIGluICIsICpjb2RlQmxvY2st
PmFsdGVybmF0aXZlKCksICIgLT4gIiwgKmNvZGVCbG9jaywgIiBmcm9tIGJjIyIsIGJ5dGVjb2Rl
SW5kZXgsICJcbiIpOwogI2VuZGlmCiAgICAgCi0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBP
U1JFbnRyeURhdGEqIGVudHJ5ID0gY29kZUJsb2NrLT5kZmdPU1JFbnRyeURhdGFGb3JCeXRlY29k
ZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIAogICAgIGlmICghZW50cnkpIHsKQEAgLTEzMyw3
ICsxMzMsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAg
Ly8gICAgaXQgc2VlbXMgc2lsbHk6IHlvdSdkIGJlIGRpdmVydGluZyB0aGUgcHJvZ3JhbSB0byBl
cnJvciBoYW5kbGluZyB3aGVuIGl0CiAgICAgLy8gICAgd291bGQgaGF2ZSBvdGhlcndpc2UganVz
dCBrZXB0IHJ1bm5pbmcgYWxiZWl0IGxlc3MgcXVpY2tseS4KICAgICAKLSAgICBpZiAoIWdsb2Jh
bERhdGEtPmludGVycHJldGVyLT5zdGFjaygpLmdyb3coJmV4ZWMtPnJlZ2lzdGVycygpW2NvZGVC
bG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnNdKSkgeworICAgIGlmICghdm0tPmludGVycHJldGVy
LT5zdGFjaygpLmdyb3coJmV4ZWMtPnJlZ2lzdGVycygpW2NvZGVCbG9jay0+bV9udW1DYWxsZWVS
ZWdpc3RlcnNdKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgICAgIGRhdGFM
b2dGKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHN0YWNrIGdyb3d0aCBmYWlsZWQuXG4iKTsKICNl
bmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXIzMl82NC5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjQsNyArMjY0LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0
IAogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBzY3JhdGNoQnVmZmVyTGVuZ3RoQmVmb3JlVUlu
dDMycyA9IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzICsgKChudW1iZXJPZkRpc3Bs
YWNlZFZpcnR1YWxSZWdpc3RlcnMgKiAyKSA8PSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA/
IDAgOiBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpOwotICAgIFNjcmF0Y2hCdWZm
ZXIqIHNjcmF0Y2hCdWZmZXIgPSBtX2ppdC5nbG9iYWxEYXRhKCktPnNjcmF0Y2hCdWZmZXJGb3JT
aXplKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiAoc2NyYXRjaEJ1ZmZlckxlbmd0aEJlZm9yZVVJ
bnQzMnMgKyAoaGF2ZVVJbnQzMnMgPyAyIDogMCkpKTsKKyAgICBTY3JhdGNoQnVmZmVyKiBzY3Jh
dGNoQnVmZmVyID0gbV9qaXQudm0oKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSAqIChzY3JhdGNoQnVmZmVyTGVuZ3RoQmVmb3JlVUludDMycyArIChoYXZlVUlu
dDMycyA/IDIgOiAwKSkpOwogICAgIEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNoRGF0YUJ1ZmZlciA9
IHNjcmF0Y2hCdWZmZXIgPyBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZm
ZXItPmRhdGFCdWZmZXIoKSkgOiAwOwogCiAgICAgLy8gRnJvbSBoZXJlIG9uLCB0aGUgY29kZSBh
c3N1bWVzIHRoYXQgaXQgaXMgcHJvZml0YWJsZSB0byBtYXhpbWl6ZSB0aGUgZGlzdGFuY2UKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
NjQuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlcjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDcgKzI2MCw3IEBA
IHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICBkYXRhTG9nRigi
ICIpOwogI2VuZGlmCiAgICAgCi0gICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1f
aml0Lmdsb2JhbERhdGEoKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSAqIHN0ZDo6bWF4KGhhdmVVSW50MzJzID8gMnUgOiAwdSwgbnVtYmVyT2ZQb2lzb25lZFZp
cnR1YWxSZWdpc3RlcnMgKyAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzIDw9IEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzID8gMCA6IG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJl
Z2lzdGVycykpKTsKKyAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbV9qaXQudm0o
KS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIHN0ZDo6bWF4
KGhhdmVVSW50MzJzID8gMnUgOiAwdSwgbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMg
KyAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzIDw9IEdQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzID8gMCA6IG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycykpKTsKICAg
ICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRjaERhdGFCdWZmZXIgPSBzY3JhdGNoQnVmZmVyID8gc3Rh
dGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDog
MDsKIAogICAgIC8vIEZyb20gaGVyZSBvbiwgdGhlIGNvZGUgYXNzdW1lcyB0aGF0IGl0IGlzIHBy
b2ZpdGFibGUgdG8gbWF4aW1pemUgdGhlIGRpc3RhbmNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNDg2NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDkgKzQ4LDkgQEAgdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgQVNTRVJUKGNvZGVCbG9jayk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+
Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CiAgICAgCi0gICAgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKICAgICAKLSAgICB1aW50MzJfdCBleGl0SW5kZXggPSBnbG9iYWxEYXRhLT5vc3JFeGl0
SW5kZXg7CisgICAgdWludDMyX3QgZXhpdEluZGV4ID0gdm0tPm9zckV4aXRJbmRleDsKICAgICBP
U1JFeGl0JiBleGl0ID0gY29kZUJsb2NrLT5vc3JFeGl0KGV4aXRJbmRleCk7CiAgICAgCiAgICAg
Ly8gTWFrZSBzdXJlIGFsbCBjb2RlIG9uIG91ciBpbmxpbmUgc3RhY2sgaXMgSklUIGNvbXBpbGVk
LiBUaGlzIGlzIG5lY2Vzc2FyeSBzaW5jZQpAQCAtOTAsMTMgKzkwLDEzIEBAIHZvaWQgY29tcGls
ZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVjKQogI2VuZGlmCiAKICAgICB7Ci0gICAgICAgIENDYWxs
SGVscGVycyBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJz
IGppdCh2bSwgY29kZUJsb2NrKTsKICAgICAgICAgT1NSRXhpdENvbXBpbGVyIGV4aXRDb21waWxl
cihqaXQpOwogCiAgICAgICAgIGppdC5qaXRBc3NlcnRIYXNWYWxpZENhbGxGcmFtZSgpOwogICAg
ICAgICAKLSAgICAgICAgaWYgKGdsb2JhbERhdGEtPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBj
b2RlQmxvY2stPmNvbXBpbGF0aW9uKCkpIHsKLSAgICAgICAgICAgIFByb2ZpbGVyOjpEYXRhYmFz
ZSYgZGF0YWJhc2UgPSAqZ2xvYmFsRGF0YS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyOworICAgICAg
ICBpZiAodm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBjb2RlQmxvY2stPmNvbXBpbGF0aW9u
KCkpIHsKKyAgICAgICAgICAgIFByb2ZpbGVyOjpEYXRhYmFzZSYgZGF0YWJhc2UgPSAqdm0tPm1f
cGVyQnl0ZWNvZGVQcm9maWxlcjsKICAgICAgICAgICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiog
Y29tcGlsYXRpb24gPSBjb2RlQmxvY2stPmNvbXBpbGF0aW9uKCk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIFByb2ZpbGVyOjpPU1JFeGl0KiBwcm9maWxlckV4aXQgPSBjb21waWxhdGlvbi0+
YWRkT1NSRXhpdCgKQEAgLTEwOCw3ICsxMDgsNyBAQCB2b2lkIGNvbXBpbGVPU1JFeGl0KEV4ZWNT
dGF0ZSogZXhlYykKICAgICAgICAgCiAgICAgICAgIGV4aXRDb21waWxlci5jb21waWxlRXhpdChl
eGl0LCBvcGVyYW5kcywgcmVjb3ZlcnkpOwogICAgICAgICAKLSAgICAgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgY29kZUJsb2NrKTsKKyAgICAgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIGNvZGVCbG9jayk7CiAgICAgICAgIGV4aXQubV9j
b2RlID0gRklOQUxJWkVfQ09ERV9JRigKICAgICAgICAgICAgIHNob3VsZFNob3dEaXNhc3NlbWJs
eSgpLAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCkBAIC0xMjIsNyArMTIyLDcgQEAgdm9pZCBj
b21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKGV4aXQuY29kZUxvY2F0aW9uRm9yUmVwYXRjaChjb2RlQmxvY2spLCBDb2RlTG9jYXRpb25M
YWJlbChleGl0Lm1fY29kZS5jb2RlKCkpKTsKICAgICB9CiAgICAgCi0gICAgZ2xvYmFsRGF0YS0+
b3NyRXhpdEp1bXBEZXN0aW5hdGlvbiA9IGV4aXQubV9jb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpOworICAgIHZtLT5vc3JFeGl0SnVtcERlc3RpbmF0aW9uID0gZXhpdC5tX2NvZGUuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiB9CiAKIH0gLy8gZXh0ZXJuICJDIgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNDg2
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAi
SklURXhjZXB0aW9ucy5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgotI2luY2x1ZGUgIkpT
R2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiSlNOYW1lU2NvcGUuaCIK
ICNpbmNsdWRlICJOYW1lSW5zdGFuY2UuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5o
IgpAQCAtMjg0LDEzICsyODQsMTMgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
dGVtcGxhdGU8Ym9vbCBzdHJpY3Q+CiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0QnlWYWwoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgdWludDMyX3QgaW5kZXgsIEpTVmFsdWUgdmFs
dWUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOwor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOwogICAgIAogICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgewogICAg
ICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKICAgICAgICAgaWYg
KG9iamVjdC0+Y2FuU2V0SW5kZXhRdWlja2x5KGluZGV4KSkgewotICAgICAgICAgICAgb2JqZWN0
LT5zZXRJbmRleFF1aWNrbHkoZ2xvYmFsRGF0YSwgaW5kZXgsIHZhbHVlKTsKKyAgICAgICAgICAg
IG9iamVjdC0+c2V0SW5kZXhRdWlja2x5KHZtLCBpbmRleCwgdmFsdWUpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKQEAgLTMwNCw4ICszMDQsOCBAQCBzdGF0aWMgaW5saW5lIHZv
aWQgcHV0QnlWYWwoRXhlY1N0YXRlKiBlCiB0ZW1wbGF0ZTxib29sIHN0cmljdD4KIEFMV0FZU19J
TkxJTkUgc3RhdGljIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEludGVybmFs
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNl
KTsKICAgICBKU1ZhbHVlIHByb3BlcnR5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRQcm9wZXJ0
eSk7CkBAIC0zMzMsNyArMzMzLDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBERkdfT1BF
UkFUSU9OIAogCiAgICAgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJv
d3MgYW4gZXhjZXB0aW9uLgogICAgIElkZW50aWZpZXIgaWRlbnQoZXhlYywgcHJvcGVydHkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICBpZiAoIWdsb2JhbERhdGEtPmV4Y2VwdGlv
bikgeworICAgIGlmICghdm0tPmV4Y2VwdGlvbikgewogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdChzdHJpY3QpOwogICAgICAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwg
c2xvdCk7CiAgICAgfQpAQCAtMzQzLDE2ICszNDMsMTYgQEAgZXh0ZXJuICJDIiB7CiAKIEVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29udmVydFRoaXMoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3ApCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wKS50b1RoaXNPYmplY3QoZXhl
YykpOwogfQogCiBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlVGhpcyhFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgaW50MzJfdCBpbmxpbmVDYXBhY2l0
eSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7Cisg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgQ29uc3RydWN0RGF0YSBj
b25zdHJ1Y3REYXRhOwpAQCAtMzY0LDE2ICszNjQsMTYgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkNyZWF0ZVRoaQogCiBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3
T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwog
ICAgIAogICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBzdHJ1Y3R1cmUpOwog
fQogCiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMikKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFs
RGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhl
Yyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZE9wMik7CkBAIC0zODMsOCArMzgzLDggQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25WYQogCiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVl
QWRkTm90TnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNWYWx1ZSBv
cDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CkBAIC0zOTksOCArMzk5LDggQEAgRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25WYQogCiBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1Zh
bHVlIGdldEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCB1aW50MzJfdCBpbmRl
eCkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKGJhc2UtPmlzT2JqZWN0KCkpIHsKICAgICAgICAg
SlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2UpOwpAQCAtNDE2LDggKzQxNiw4IEBAIHN0
YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgZ2V0QnlWYWwoRXgKIAogRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHkpCiB7Ci0g
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwogICAgIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRCYXNlKTsKICAgICBKU1ZhbHVlIHByb3BlcnR5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRQ
cm9wZXJ0eSk7CkBAIC00NDcsOCArNDQ3LDggQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElP
TiBvcGVyYXRpb25HZQogCiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
dEJ5VmFsQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFByb3BlcnR5KQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVj
LT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxE
YXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBKU1ZhbHVlIHByb3BlcnR5ID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRQcm9wZXJ0eSk7CiAKQEAgLTQ3Myw4ICs0NzMsOCBAQCBF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAKIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludChFeGVjU3RhdGUqIGV4ZWMs
IEpTQXJyYXkqIGJhc2UsIGludDMyX3QgaW5kZXgpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIGlmIChp
bmRleCA8IDApIHsKICAgICAgICAgLy8gR28gdGhlIHNsb3dlc3Qgd2F5IHBvc3NpYmxlIGJlY2Fz
ZSBuZWdhdGl2ZSBpbmRpY2VzIGRvbid0IHVzZSBpbmRleGVkIHN0b3JhZ2UuCkBAIC00ODcsOCAr
NDg3LDggQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogCiBFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWQoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogICAgIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2UpOwog
ICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7CkBAIC00OTgsOCArNDk4LDggQEAgRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogSl9GVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QpOwogRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0V2l0aFJl
dHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBJZGVudGlm
aWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKLSAg
ICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CiAgICAgCiAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJs
b2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwogICAgIEFjY2Vzc1R5cGUgYWNjZXNz
VHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwpAQCAt
NTE3LDggKzUxNyw4IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2UK
IEpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShvcGVyYXRpb25HZXRC
eUlkUHJvdG9CdWlsZExpc3QpOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRp
b25HZXRCeUlkUHJvdG9CdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9
ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihn
bG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRk
cmVzcyk7CiAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlw
ZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CkBAIC01MzYsOCArNTM2LDggQEAgRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVU
VVJOX0FERFJFU1NfRUpJKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CiBFbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNz
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgSWRlbnRpZmllciogcHJvcGVy
dHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiB7Ci0gICAgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAog
ICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRT
dHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0
aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKQEAgLTU1OCwxNiArNTU4
LDE2IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2UKIAogRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25DYWxsQ3VzdG9tR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBmdW5jdGlv
biwgSWRlbnRpZmllciogaWRlbnQpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0g
JmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGds
b2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoZnVuY3Rpb24oZXhlYywgYXNPYmplY3QoYmFzZSksICppZGVudCkpOwogfQogCiBF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2VsbCogdmFsdWUpCiB7Ci0gICAgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAg
IEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIodmFsdWUpOwogICAg
IEpTT2JqZWN0KiBnZXR0ZXIgPSBnZXR0ZXJTZXR0ZXItPmdldHRlcigpOwpAQCAtNTgwLDQwICs1
ODAsNDAgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25DYQogCiB2b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIG9wZXJh
dGlvblB1dEJ5VmFsSW50ZXJuYWw8dHJ1ZT4oZXhlYywgZW5jb2RlZEJhc2UsIGVuY29kZWRQcm9w
ZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5VmFsTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJh
c2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxE
YXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVj
KTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBvcGVyYXRpb25QdXRCeVZhbEludGVybmFsPGZh
bHNlPihleGVjLCBlbmNvZGVkQmFzZSwgZW5jb2RlZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOwog
fQogCiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaWN0KEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHks
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgb3BlcmF0
aW9uUHV0QnlWYWxJbnRlcm5hbDx0cnVlPihleGVjLCBKU1ZhbHVlOjplbmNvZGUoY2VsbCksIGVu
Y29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAogdm9pZCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsQ2VsbE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2Vs
bCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERh
dGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMp
OworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIG9wZXJhdGlvblB1dEJ5VmFsSW50ZXJuYWw8ZmFs
c2U+KGV4ZWMsIEpTVmFsdWU6OmVuY29kZShjZWxsKSwgZW5jb2RlZFByb3BlcnR5LCBlbmNvZGVk
VmFsdWUpOwogfQogCiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRB
cnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgaW50MzJf
dCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAg
ICBpZiAoaW5kZXggPj0gMCkgewogICAgICAgICBhcnJheS0+cHV0QnlJbmRleElubGluZShleGVj
LCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHRydWUpOwpAQCAtNjI3LDgg
KzYyNyw4IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW8KIAogdm9p
ZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJp
Y3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEg
PSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
Z2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49
IDApIHsKICAgICAgICAgYXJyYXktPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywgaW5kZXgsIEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBmYWxzZSk7CkBAIC02NDIsOCArNjQyLDggQEAgdm9p
ZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogCiB2b2lkIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgaW50MzJfdCBpbmRleCwgZG91YmxlIHZhbHVlKQog
ewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKICAgICAKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBKU1ZhbHVlKEpTVmFsdWU6OkVu
Y29kZUFzRG91YmxlLCB2YWx1ZSk7CiAgICAgCkBAIC02NTksOCArNjU5LDggQEAgdm9pZCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VgogCiB2b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0RG91YmxlQnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgaW50MzJfdCBpbmRleCwgZG91YmxlIHZhbHVlKQogewot
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKICAgICAKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29k
ZUFzRG91YmxlLCB2YWx1ZSk7CiAgICAgCkBAIC02NzYsOCArNjc2LDggQEAgdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VgogCiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkFycmF5UHVzaChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgSlNBcnJheSogYXJyYXkpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIGFycmF5LT5w
dXNoKGV4ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGFycmF5LT5sZW5ndGgoKSkpOwpAQCAtNjg1LDggKzY4NSw4
IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXIKIAogRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2hEb3VibGUoRXhlY1N0YXRlKiBl
eGVjLCBkb3VibGUgdmFsdWUsIEpTQXJyYXkqIGFycmF5KQogewotICAgIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBh
cnJheS0+cHVzaChleGVjLCBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYXJyYXktPmxlbmd0aCgpKSk7
CkBAIC02OTQsMTYgKzY5NCwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkFyCiAKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3Ao
RXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShhcnJheS0+cG9wKGV4ZWMpKTsKIH0KICAgICAgICAgCiBFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wQW5kUmVjb3Zlckxlbmd0
aChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5KQogewotICAgIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBh
cnJheS0+YnV0dGVyZmx5KCktPnNldFB1YmxpY0xlbmd0aChhcnJheS0+YnV0dGVyZmx5KCktPnB1
YmxpY0xlbmd0aCgpICsgMSk7CiAgICAgCkBAIC03MTIsOCArNzEyLDggQEAgRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcgogICAgICAgICAKIEVuY29kZWRKU1ZhbHVlIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwRXhlYyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
YmFzZSwgSlNDZWxsKiBhcmd1bWVudCkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEg
PSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
Z2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKCFiYXNlLT5p
bmhlcml0cygmUmVnRXhwT2JqZWN0OjpzX2luZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjKTsKQEAgLTcyNSw4ICs3MjUsOCBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblJlCiAgICAgICAgIAogc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUmVnRXhwVGVzdChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgSlNDZWxsKiBhcmd1
bWVudCkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRh
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKCZ2bSwgZXhlYyk7CiAKICAgICBpZiAoIWJhc2UtPmluaGVyaXRzKCZSZWdFeHBPYmplY3Q6
OnNfaW5mbykpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7CkBAIC03NDAsOCArNzQw
LDggQEAgc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdAogICAgICAgICAK
IHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0KEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIq
IHByb3BlcnR5TmFtZSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+
Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0
YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qo
dHJ1ZSk7CiAgICAgYmFzZS0+bWV0aG9kVGFibGUoKS0+cHV0KGJhc2UsIGV4ZWMsICpwcm9wZXJ0
eU5hbWUsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKQEAgLTc0OSw4ICs3
NDksOCBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljCiAKIHZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqIHBy
b3BlcnR5TmFtZSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xv
YmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwg
ZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFs
c2UpOwogICAgIGJhc2UtPm1ldGhvZFRhYmxlKCktPnB1dChiYXNlLCBleGVjLCAqcHJvcGVydHlO
YW1lLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CkBAIC03NTgsMjkgKzc1
OCwyOSBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0CiAKIHZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIq
IHByb3BlcnR5TmFtZSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+
Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0
YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qo
dHJ1ZSk7CiAgICAgQVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkpOwotICAgIGFzT2JqZWN0KGJhc2Up
LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCAqcHJvcGVydHlOYW1lLCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CisgICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVj
dChleGVjLT52bSgpLCAqcHJvcGVydHlOYW1lLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KSwgc2xvdCk7CiB9CiAKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
Tm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBK
U0NlbGwqIGJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSkKIHsKLSAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAg
ICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UpOwogICAgIEFTU0VSVChiYXNlLT5pc09iamVj
dCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
KnByb3BlcnR5TmFtZSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworICAg
IGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgKnByb3BlcnR5TmFtZSwgSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQogCiBWX0ZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6
ZSk7CiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplV2l0
aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4
ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2Jh
bERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNz
KTsKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihz
dHViSW5mby5hY2Nlc3NUeXBlKTsKQEAgLTgwMyw4ICs4MDMsOCBAQCB2b2lkIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlJZFN0cmljCiBWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSk7CiB2b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplV2l0aFJldHVybkFk
ZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2Vs
bCogYmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2Jh
bERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4
ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
byA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBB
Y2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5h
Y2Nlc3NUeXBlKTsKQEAgLTgyNyw4ICs4MjcsOCBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZE5vblN0CiBWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19F
SkNJKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7CiB2b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJl
c3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCog
YmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERh
dGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMp
OworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9
IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBBY2Nl
c3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nl
c3NUeXBlKTsKQEAgLTgzNyw3ICs4MzcsNyBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZERpcmVjCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSk7CiAgICAgCiAgICAg
QVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkpOwotICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3Qo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCAqcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgYXNP
YmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCAqcHJvcGVydHlOYW1lLCB2YWx1ZSwg
c2xvdCk7CiAgICAgCiAgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlw
ZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCiAgICAgICAgIHJldHVybjsKQEAgLTg1MSw4ICs4NTEs
OCBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjCiBWX0ZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RO
b25TdHJpY3RPcHRpbWl6ZSk7CiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdE5vblN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciogcHJv
cGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiB7Ci0gICAgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAg
IAogICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5n
ZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBz
dGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKQEAgLTg2MSw3ICs4
NjEsNyBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjCiAgICAgUHV0
UHJvcGVydHlTbG90IHNsb3QoZmFsc2UpOwogICAgIAogICAgIEFTU0VSVChiYXNlLT5pc09iamVj
dCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
KnByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJl
Y3QoZXhlYy0+dm0oKSwgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogICAgIAogICAgIGlm
IChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5
cGUpKQogICAgICAgICByZXR1cm47CkBAIC04NzUsOCArODc1LDggQEAgdm9pZCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlYwogVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJO
X0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0KTsKIHZvaWQgREZH
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0V2l0aFJldHVybkFkZHJl
c3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCog
YmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERh
dGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMp
OworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9
IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBBY2Nl
c3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nl
c3NUeXBlKTsKQEAgLTg5Niw4ICs4OTYsOCBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZFN0cmljCiBWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJ
KG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpOwogdm9pZCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJ
ZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykK
IHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwot
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAgICAgCiAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+
Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwogICAgIEFjY2Vzc1R5cGUg
YWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUp
OwpAQCAtOTE3LDggKzkxNyw4IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlk
Tm9uU3QKIFZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdCk7CiB2b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElk
ZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQog
ewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKICAgICAKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5j
b2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CiAgICAgQWNjZXNzVHlwZSBh
Y2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7
CkBAIC05MjcsNyArOTI3LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRE
aXJlYwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUpOwogICAgIAogICAgIEFTU0VSVChi
YXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPmds
b2JhbERhdGEoKSwgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIGFzT2JqZWN0KGJh
c2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwog
ICAgIAogICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJ
bmZvLmFjY2Vzc1R5cGUpKQogICAgICAgICByZXR1cm47CkBAIC05MzgsOCArOTM4LDggQEAgdm9p
ZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlYwogVl9GVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0
QnVpbGRMaXN0KTsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0QnVpbGRMaXN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlO
YW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiB7Ci0gICAgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAg
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHVi
SW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNf
Y2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKQEAgLTk0OCw3ICs5NDgsNyBA
QCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjCiAgICAgUHV0UHJvcGVy
dHlTbG90IHNsb3QoZmFsc2UpOwogICAgIAogICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsK
LSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgKnByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhl
Yy0+dm0oKSwgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogICAgIAogICAgIGlmIChhY2Nl
c3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQog
ICAgICAgICByZXR1cm47CkBAIC05NTgsNDAgKzk1OCw0MCBAQCB2b2lkIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZERpcmVjCiAKIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bXBhcmVMZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEg
PSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
Z2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgcmV0dXJuIGpzTGVz
czx0cnVlPihleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkT3AyKSk7CiB9CiAKIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBh
cmVMZXNzRXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9
ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihn
bG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICByZXR1cm4ganNMZXNz
RXE8dHJ1ZT4oZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZE9wMikpOwogfQogCiBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21w
YXJlR3JlYXRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHJldHVybiBqc0xl
c3M8ZmFsc2U+KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSwgSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcDEpKTsKIH0KIAogc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29t
cGFyZUdyZWF0ZXJFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHJldHVybiBq
c0xlc3NFcTxmYWxzZT4oZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpLCBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZE9wMSkpOwogfQogCiBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRp
b25Db21wYXJlRXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZXF1YWxTbG93Q2FzZUlubGluZShleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9w
MSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSk7CiB9CkBAIC0xMDAyLDggKzEwMDIsOCBA
QCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvCiBzaXplX3QgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IGxlZnQsIEpTQ2VsbCogcmlnaHQpCiAjZW5kaWYKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgYm9vbCBy
ZXN1bHQgPSBhc1N0cmluZyhsZWZ0KS0+dmFsdWUoZXhlYykgPT0gYXNTdHJpbmcocmlnaHQpLT52
YWx1ZShleGVjKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTAxNSw4ICsxMDE1LDggQEAgc2l6
ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cgogCiBzaXplX3QgREZHX09QRVJB
VElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKLSAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAgICAgCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAg
ICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CkBAIC0xMDI5LDgg
KzEwMjksOCBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyCiAKIHNp
emVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcShFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIp
CiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBzcmMxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cDEpOwogICAgIEpTVmFsdWUgc3JjMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKQEAg
LTEwNDEsNyArMTA0MSw3IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVT
dHIKIHN0YXRpYyB2b2lkKiBoYW5kbGVIb3N0Q2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEpT
VmFsdWUgY2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgRXhlY1N0
YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwogCiAgICAgZXhlY0NhbGxlZS0+c2V0U2NvcGUoZXhlYy0+c2NvcGUoKSk7CiAgICAgZXhl
Y0NhbGxlZS0+c2V0Q29kZUJsb2NrKDApOwpAQCAtMTA1MywxOCArMTA1MywxOCBAQCBzdGF0aWMg
dm9pZCogaGFuZGxlSG9zdENhbGwoRXhlY1N0YXRlKiBlCiAgICAgICAgIEFTU0VSVChjYWxsVHlw
ZSAhPSBDYWxsVHlwZUpTKTsKICAgICAKICAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBl
SG9zdCkgewotICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxE
YXRhLCBleGVjQ2FsbGVlKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWNDYWxsZWUpOwogICAgICAgICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFz
T2JqZWN0KGNhbGxlZSkpOwotICAgICAgICAgICAgZ2xvYmFsRGF0YS0+aG9zdENhbGxSZXR1cm5W
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxl
ZSkpOwotICAgICAgICAgICAgaWYgKGdsb2JhbERhdGEtPmV4Y2VwdGlvbikKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxs
U2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAg
ICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEubmF0
aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKKyAgICAgICAgICAgIGlmICh2bS0+ZXhjZXB0aW9u
KQorICAgICAgICAgICAgICAgIHJldHVybiB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogCiAg
ICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZ2V0SG9zdENhbGxSZXR1
cm5WYWx1ZSk7CiAgICAgICAgIH0KICAgICAKICAgICAgICAgQVNTRVJUKGNhbGxUeXBlID09IENh
bGxUeXBlTm9uZSk7Ci0gICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBjcmVh
dGVOb3RBRnVuY3Rpb25FcnJvcihleGVjLCBjYWxsZWUpOwotICAgICAgICByZXR1cm4gZ2xvYmFs
RGF0YS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Ip
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICBleGVjLT52bSgpLmV4Y2VwdGlv
biA9IGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGV4ZWMsIGNhbGxlZSk7CisgICAgICAgIHJldHVy
biB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Ip
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0KIAogICAgIEFTU0VSVChraW5kID09
IENvZGVGb3JDb25zdHJ1Y3QpOwpAQCAtMTA3NSwyNSArMTA3NSwyNSBAQCBzdGF0aWMgdm9pZCog
aGFuZGxlSG9zdENhbGwoRXhlY1N0YXRlKiBlCiAgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgIT0g
Q29uc3RydWN0VHlwZUpTKTsKICAgICAKICAgICBpZiAoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1
Y3RUeXBlSG9zdCkgewotICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2Jh
bERhdGEsIGV4ZWNDYWxsZWUpOworICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjQ2FsbGVlKTsKICAgICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0
KGNhbGxlZSkpOwotICAgICAgICBnbG9iYWxEYXRhLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsK
LSAgICAgICAgaWYgKGdsb2JhbERhdGEtPmV4Y2VwdGlvbikKLSAgICAgICAgICAgIHJldHVybiBn
bG9iYWxEYXRhLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVy
YXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIHZtLT5ob3N0Q2FsbFJl
dHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9u
KGV4ZWNDYWxsZWUpKTsKKyAgICAgICAgaWYgKHZtLT5leGNlcHRpb24pCisgICAgICAgICAgICBy
ZXR1cm4gdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJh
dG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIAogICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSk7CiAgICAgfQogICAgIAog
ICAgIEFTU0VSVChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVOb25lKTsKLSAgICBleGVj
LT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZXhl
YywgY2FsbGVlKTsKLSAgICByZXR1cm4gZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2Vw
dGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
OworICAgIGV4ZWMtPnZtKCkuZXhjZXB0aW9uID0gY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3Io
ZXhlYywgY2FsbGVlKTsKKyAgICByZXR1cm4gdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25G
cm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIH0K
IAogaW5saW5lIGNoYXIqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+
Y2FsbGVyRnJhbWUoKTsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xv
YmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwg
ZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0g
ZXhlY0NhbGxlZS0+Y2FsbGVlQXNWYWx1ZSgpOwogICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlv
bkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUpOwpAQCAtMTExMiw4ICsxMTEyLDgg
QEAgaW5saW5lIGNoYXIqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbAogICAgICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5j
dGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3IoZXhlY0NhbGxlZSwgY2FsbGVlLT5zY29wZSgpLCBr
aW5kKTsKICAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBnbG9iYWxEYXRhLT5leGNl
cHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih0aHJvd0V4
Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpKTsKKyAgICAgICAgICAgIHZtLT5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJy
b3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0t
PmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgICAgIH0KICAgICAgICAgY29kZUJsb2NrID0g
JmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3Ioa2luZCk7CiAgICAgICAg
IGlmIChleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nh
c3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpCkBAIC0xMTQyLDggKzExNDIs
OCBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1CiBpbmxpbmUgY2hh
ciogdmlydHVhbEZvcldpdGhGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCwgSlNDZWxsKiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwpCiB7CiAg
ICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAK
ICAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBleGVjQ2FsbGVlLT5jYWxsZWVBc1ZhbHVlKCk7
CiAgICAgY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUp
OwpAQCAtMTE1Nyw4ICsxMTU3LDggQEAgaW5saW5lIGNoYXIqIHZpcnR1YWxGb3JXaXRoRnVuY3Rp
b24oRXhlYwogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9
IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogICAgICAgICBK
U09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3IoZXhlY0NhbGxl
ZSwgZnVuY3Rpb24tPnNjb3BlKCksIGtpbmQpOwogICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAg
ICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBlcnJvcjsKLSAgICAgICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihnbG9iYWxEYXRhLT5nZXRDVElTdHViKHRo
cm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOworICAgICAgICAgICAgZXhlYy0+dm0oKS5leGNlcHRpb24gPSBlcnJvcjsKKyAg
ICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih2bS0+Z2V0Q1RJU3R1Yih0
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtp
bmQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwpAQCAtMTIzMSwzMSArMTIzMSwzMSBAQCB2b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5R2xvYmFsCiAKIEVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZShFeGVjU3RhdGUqIGV4ZWMsIElkZW50aWZpZXIqIHBy
b3BlcnR5TmFtZSwgUmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMpCiB7Ci0gICAgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNTY29wZTo6cmVzb2x2ZShleGVjLCAqcHJvcGVydHlO
YW1lLCBvcGVyYXRpb25zKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUmVzb2x2ZUJhc2UoRXhlY1N0YXRlKiBleGVjLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5h
bWUsIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zLCBQdXRUb0Jhc2VPcGVyYXRpb24qIHB1
dFRvQmFzZU9wZXJhdGlvbnMpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4
ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2Jh
bERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNTY29wZTo6cmVzb2x2ZUJhc2UoZXhlYywgKnByb3BlcnR5TmFtZSwgZmFsc2UsIG9w
ZXJhdGlvbnMsIHB1dFRvQmFzZU9wZXJhdGlvbnMpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlQmFzZVN0cmljdFB1dChFeGVjU3RhdGUqIGV4ZWMs
IElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMs
IFB1dFRvQmFzZU9wZXJhdGlvbiogcHV0VG9CYXNlT3BlcmF0aW9ucykKIHsKLSAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAg
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Njb3BlOjpyZXNvbHZlQmFzZShleGVjLCAq
cHJvcGVydHlOYW1lLCB0cnVlLCBvcGVyYXRpb25zLCBwdXRUb0Jhc2VPcGVyYXRpb25zKSk7CiB9
CiAKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZUdsb2JhbChF
eGVjU3RhdGUqIGV4ZWMsIFJlc29sdmVPcGVyYXRpb24qIHJlc29sdmVPcGVyYXRpb24sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSkKIHsKLSAg
ICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CiAgICAgQVNTRVJUKGdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHJlc29sdmVP
cGVyYXRpb24pOwogICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwpAQCAtMTI2NSw4OCAr
MTI2NSw4OCBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlCiAKIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9QcmltaXRpdmUoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLnRvUHJpbWl0aXZlKGV4ZWMp
KTsKIH0KIAogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheShFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNp
emUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEo
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOwor
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGNvbnN0
cnVjdEFycmF5KGV4ZWMsIGFycmF5U3RydWN0dXJlLCBzdGF0aWNfY2FzdDxKU1ZhbHVlKj4oYnVm
ZmVyKSwgc2l6ZSkpOwogfQogCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0VtcHR5
QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlKQogewotICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKICAgICAKLSAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPihKU0FycmF5OjpjcmVhdGUo
Kmdsb2JhbERhdGEsIGFycmF5U3RydWN0dXJlKSk7CisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxj
aGFyKj4oSlNBcnJheTo6Y3JlYXRlKCp2bSwgYXJyYXlTdHJ1Y3R1cmUpKTsKIH0KIAogY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgaW50MzJfdCBzaXplKQogewotICAgIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAg
IGlmIChVTkxJS0VMWShzaXplIDwgMCkpCiAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hh
cio+KHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwo
IkFycmF5IHNpemUgaXMgbm90IGEgc21hbGwgZW5vdWdoIHBvc2l0aXZlIGludGVnZXIuIikpKSk7
CiAKLSAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPihKU0FycmF5OjpjcmVhdGUoKmdsb2Jh
bERhdGEsIGFycmF5U3RydWN0dXJlLCBzaXplKSk7CisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxj
aGFyKj4oSlNBcnJheTo6Y3JlYXRlKCp2bSwgYXJyYXlTdHJ1Y3R1cmUsIHNpemUpKTsKIH0KIAog
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlcihFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIHNpemVfdCBzdGFydCwgc2l6ZV90IHNpemUp
CiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwot
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOwogICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGNvbnN0cnVjdEFycmF5
KGV4ZWMsIGFycmF5U3RydWN0dXJlLCBleGVjLT5jb2RlQmxvY2soKS0+Y29uc3RhbnRCdWZmZXIo
c3RhcnQpLCBzaXplKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uTmV3UmVnZXhwKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogcmVnZXhwUHRyKQogewotICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
ICAgICBSZWdFeHAqIHJlZ2V4cCA9IHN0YXRpY19jYXN0PFJlZ0V4cCo+KHJlZ2V4cFB0cik7CiAg
ICAgaWYgKCFyZWdleHAtPmlzVmFsaWQoKSkgewogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNy
ZWF0ZVN5bnRheEVycm9yKGV4ZWMsICJJbnZhbGlkIGZsYWdzIHN1cHBsaWVkIHRvIFJlZ0V4cCBj
b25zdHJ1Y3Rvci4iKSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgfQogICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoUmVnRXhwT2Jq
ZWN0OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ2V4
cCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoUmVnRXhwT2JqZWN0OjpjcmVhdGUoZXhl
Yy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdleHApKTsKIH0KIAogSlNDZWxsKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24oRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKLSAgICBKU0Fj
dGl2YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2YXRpb246OmNyZWF0ZShnbG9iYWxEYXRhLCBl
eGVjLCBleGVjLT5jb2RlQmxvY2soKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNBY3RpdmF0aW9u
KiBhY3RpdmF0aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUodm0sIGV4ZWMsIGV4ZWMtPmNvZGVC
bG9jaygpKTsKICAgICBleGVjLT5zZXRTY29wZShhY3RpdmF0aW9uKTsKICAgICByZXR1cm4gYWN0
aXZhdGlvbjsKIH0KIAogSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFyZ3Vt
ZW50cyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0g
ZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmds
b2JhbERhdGEsIGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogICAgIC8vIE5COiBUaGlzIG5lZWRzIHRv
IGJlIGV4Y2VlZGluZ2x5IGNhcmVmdWwgd2l0aCB0b3AgY2FsbCBmcmFtZSB0cmFja2luZywgc2lu
Y2UgaXQKICAgICAvLyBtYXkgYmUgY2FsbGVkIGZyb20gT1NSIGV4aXQsIHdoaWxlIHRoZSBzdGF0
ZSBvZiB0aGUgY2FsbCBzdGFjayBpcyBiaXphcnJlLgotICAgIEFyZ3VtZW50cyogcmVzdWx0ID0g
QXJndW1lbnRzOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZXhlYyk7Ci0gICAgQVNTRVJUKCFnbG9iYWxE
YXRhLmV4Y2VwdGlvbik7CisgICAgQXJndW1lbnRzKiByZXN1bHQgPSBBcmd1bWVudHM6OmNyZWF0
ZSh2bSwgZXhlYyk7CisgICAgQVNTRVJUKCF2bS5leGNlcHRpb24pOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVJbmxpbmVkQXJn
dW1lbnRzKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOwogICAgIC8vIE5COiBUaGlzIG5lZWRzIHRvIGJlIGV4Y2VlZGluZ2x5
IGNhcmVmdWwgd2l0aCB0b3AgY2FsbCBmcmFtZSB0cmFja2luZywgc2luY2UgaXQKICAgICAvLyBt
YXkgYmUgY2FsbGVkIGZyb20gT1NSIGV4aXQsIHdoaWxlIHRoZSBzdGF0ZSBvZiB0aGUgY2FsbCBz
dGFjayBpcyBiaXphcnJlLgotICAgIEFyZ3VtZW50cyogcmVzdWx0ID0gQXJndW1lbnRzOjpjcmVh
dGUoZ2xvYmFsRGF0YSwgZXhlYywgaW5saW5lQ2FsbEZyYW1lKTsKLSAgICBBU1NFUlQoIWdsb2Jh
bERhdGEuZXhjZXB0aW9uKTsKKyAgICBBcmd1bWVudHMqIHJlc3VsdCA9IEFyZ3VtZW50czo6Y3Jl
YXRlKHZtLCBleGVjLCBpbmxpbmVDYWxsRnJhbWUpOworICAgIEFTU0VSVCghdm0uZXhjZXB0aW9u
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMzY5LDExICsxMzY5LDExIEBAIHZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmSW5saW4KIAogRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiBvcGVyYXRpb25HZXRBcmd1bWVudHNMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBp
bnQzMl90IGFyZ3VtZW50c1JlZ2lzdGVyKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKICAgICAvLyBIZXJlIHdlIGNhbiBh
c3N1bWUgdGhhdCB0aGUgYXJndW1lcm50cyB3ZXJlIGNyZWF0ZWQuIEJlY2F1c2Ugb3RoZXJ3aXNl
IHRoZSBKSVQgY29kZSB3b3VsZAogICAgIC8vIGhhdmUgbm90IG1hZGUgdGhpcyBjYWxsLgotICAg
IElkZW50aWZpZXIgaWRlbnQoJmdsb2JhbERhdGEsICJsZW5ndGgiKTsKKyAgICBJZGVudGlmaWVy
IGlkZW50KCZ2bSwgImxlbmd0aCIpOwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gZXhlYy0+dW5j
aGVja2VkUihhcmd1bWVudHNSZWdpc3RlcikuanNWYWx1ZSgpOwogICAgIFByb3BlcnR5U2xvdCBz
bG90KGJhc2VWYWx1ZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0
KGV4ZWMsIGlkZW50LCBzbG90KSk7CkBAIC0xMzgxLDE1ICsxMzgxLDE1IEBAIEVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2UKIAogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25HZXRBcmd1bWVudEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBh
cmd1bWVudHNSZWdpc3RlciwgaW50MzJfdCBpbmRleCkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKICAgICBKU1ZhbHVl
IGFyZ3VtZW50c1ZhbHVlID0gZXhlYy0+dW5jaGVja2VkUihhcmd1bWVudHNSZWdpc3RlcikuanNW
YWx1ZSgpOwogICAgIAogICAgIC8vIElmIHRoZXJlIGFyZSBubyBhcmd1bWVudHMsIGFuZCB3ZSdy
ZSBhY2Nlc3Npbmcgb3V0IG9mIGJvdW5kcywgdGhlbiB3ZSBoYXZlIHRvIGNyZWF0ZSB0aGUKICAg
ICAvLyBhcmd1bWVudHMgaW4gY2FzZSBzb21lb25lIGhhcyBpbnN0YWxsZWQgYSBnZXR0ZXIgb24g
YSBudW1lcmljIHByb3BlcnR5LgogICAgIGlmICghYXJndW1lbnRzVmFsdWUpCi0gICAgICAgIGV4
ZWMtPnVuY2hlY2tlZFIoYXJndW1lbnRzUmVnaXN0ZXIpID0gYXJndW1lbnRzVmFsdWUgPSBBcmd1
bWVudHM6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMpOworICAgICAgICBleGVjLT51
bmNoZWNrZWRSKGFyZ3VtZW50c1JlZ2lzdGVyKSA9IGFyZ3VtZW50c1ZhbHVlID0gQXJndW1lbnRz
OjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYyk7CiAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShhcmd1bWVudHNWYWx1ZS5nZXQoZXhlYywgaW5kZXgpKTsKIH0KQEAgLTEzOTcsOCArMTM5
Nyw4IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2UKIEVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0SW5saW5lZEFyZ3VtZW50QnlWYWwoCiAg
ICAgRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGFyZ3VtZW50c1JlZ2lzdGVyLCBJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSwgaW50MzJfdCBpbmRleCkKIHsKLSAgICBKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKICAgICBK
U1ZhbHVlIGFyZ3VtZW50c1ZhbHVlID0gZXhlYy0+dW5jaGVja2VkUihhcmd1bWVudHNSZWdpc3Rl
cikuanNWYWx1ZSgpOwogICAgIApAQCAtMTQwNiw3ICsxNDA2LDcgQEAgRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIC8vIGFyZ3VtZW50cyBpbiBjYXNlIHNvbWVv
bmUgaGFzIGluc3RhbGxlZCBhIGdldHRlciBvbiBhIG51bWVyaWMgcHJvcGVydHkuCiAgICAgaWYg
KCFhcmd1bWVudHNWYWx1ZSkgewogICAgICAgICBleGVjLT51bmNoZWNrZWRSKGFyZ3VtZW50c1Jl
Z2lzdGVyKSA9IGFyZ3VtZW50c1ZhbHVlID0KLSAgICAgICAgICAgIEFyZ3VtZW50czo6Y3JlYXRl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYywgaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAg
IEFyZ3VtZW50czo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMsIGlubGluZUNhbGxGcmFtZSk7CiAg
ICAgfQogICAgIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJndW1lbnRzVmFsdWUuZ2V0
KGV4ZWMsIGluZGV4KSk7CkBAIC0xNDE1LDggKzE0MTUsOCBAQCBFbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkdlCiBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3
RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGZ1bmN0aW9uRXhlY3V0YWJsZSkKIHsK
ICAgICBBU1NFUlQoZnVuY3Rpb25FeGVjdXRhYmxlLT5pbmhlcml0cygmRnVuY3Rpb25FeGVjdXRh
YmxlOjpzX2luZm8pKTsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9i
YWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwg
ZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVj
LCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihmdW5jdGlvbkV4ZWN1dGFibGUpLCBl
eGVjLT5zY29wZSgpKTsKIH0KIApAQCAtMTQyNCw4ICsxNDI0LDggQEAgSlNDZWxsKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aQogewogICAgIEFTU0VSVChmdW5jdGlvbkV4ZWN1dGFi
bGVBc0NlbGwtPmluaGVyaXRzKCZGdW5jdGlvbkV4ZWN1dGFibGU6OnNfaW5mbykpOwogCi0gICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OwogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPQogICAgICAg
ICBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihmdW5jdGlvbkV4ZWN1dGFibGVBc0Nl
bGwpOwpAQCAtMTQ0OSwxNTUgKzE0NDksMTU1IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVy
YXRpb25UeXBlT2YoRXgKIAogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVT
dG9yYWdlQW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2UsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEVuY29kZWRKU1ZhbHVlIHZh
bHVlKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEo
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKIAogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgPiBiYXNlLT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgQVNTRVJU
KCFnbG9iYWxEYXRhLmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpLmZhc3RQYXRoU2hvdWxkU3VjY2Vl
ZChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAg
ICBiYXNlLT5zZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgYmFzZS0+cHV0RGlyZWN0KGdsb2JhbERhdGEsIG9mZnNl
dCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CisgICAgQVNTRVJUKCF2bS5oZWFwLnN0b3JhZ2VB
bGxvY2F0b3IoKS5mYXN0UGF0aFNob3VsZFN1Y2NlZWQoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgYmFzZS0+c2V0U3RydWN0dXJlQW5kUmVh
bGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSh2bSwgc3RydWN0dXJlKTsKKyAgICBiYXNlLT5wdXRE
aXJlY3Qodm0sIG9mZnNldCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9CiAKIGNoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENh
cGFjaXR5KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEg
PSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
Z2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oCi0gICAgICAgIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChn
bG9iYWxEYXRhLCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHksIGZhbHNlLCAwKSk7CisgICAg
ICAgIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCh2bSwgMCwgaW5pdGlhbE91dE9mTGlu
ZUNhcGFjaXR5LCBmYWxzZSwgMCkpOwogfQogCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgc2l6ZV90IG5ld1NpemUp
CiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwot
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KAotICAgICAg
ICBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZ2xvYmFsRGF0YSwgMCwgbmV3U2l6ZSwg
ZmFsc2UsIDApKTsKKyAgICAgICAgQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKHZtLCAw
LCBuZXdTaXplLCBmYWxzZSwgMCkpOwogfQogCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFj
aXR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKIHsKLSAgICBKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKICAgICBB
U1NFUlQoIW9iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgIEJ1
dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5ncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRh
LCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0g
b2JqZWN0LT5ncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgMCwgaW5pdGlhbE91dE9mTGluZUNhcGFj
aXR5KTsKICAgICBvYmplY3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShy
ZXN1bHQpOwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQog
CiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQ
cm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBzaXplX3Qg
bmV3U2l6ZSkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxE
YXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhl
Yyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CiAKLSAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+Z3Jv
d091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSwgbmV3U2l6ZSk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3Qt
Pmdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBvYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVD
YXBhY2l0eSgpLCBuZXdTaXplKTsKICAgICBvYmplY3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFu
Z2luZ1N0cnVjdHVyZShyZXN1bHQpOwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIq
PihyZXN1bHQpOwogfQogCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUludDMy
KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKICAgICAKICAgICBpZiAo
IWNlbGwtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihhc09iamVjdChjZWxsKS0+ZW5zdXJlSW50MzIoZ2xvYmFs
RGF0YSkuZGF0YSgpKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYXNPYmpl
Y3QoY2VsbCktPmVuc3VyZUludDMyKHZtKS5kYXRhKCkpOwogfQogCiBjaGFyKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkVuc3VyZURvdWJsZShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkK
IHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKCFjZWxsLT5pc09iamVjdCgpKQogICAgICAgICByZXR1
cm4gMDsKICAgICAKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYXNPYmplY3Qo
Y2VsbCktPmVuc3VyZURvdWJsZShnbG9iYWxEYXRhKS5kYXRhKCkpOworICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihhc09iamVjdChjZWxsKS0+ZW5zdXJlRG91YmxlKHZtKS5kYXRh
KCkpOwogfQogCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXMo
RXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogICAgIAogICAgIGlmICgh
Y2VsbC0+aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFzT2JqZWN0KGNlbGwpLT5lbnN1cmVDb250aWd1b3VzKGds
b2JhbERhdGEpLmRhdGEoKSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFz
T2JqZWN0KGNlbGwpLT5lbnN1cmVDb250aWd1b3VzKHZtKS5kYXRhKCkpOwogfQogCiBjaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblJhZ2VFbnN1cmVDb250aWd1b3VzKEV4ZWNTdGF0ZSogZXhl
YywgSlNDZWxsKiBjZWxsKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMt
Pmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxE
YXRhLCBleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKICAgICAKICAgICBpZiAoIWNlbGwtPmlzT2JqZWN0
KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PGNoYXIqPihhc09iamVjdChjZWxsKS0+cmFnZUVuc3VyZUNvbnRpZ3VvdXMoZ2xvYmFsRGF0YSku
ZGF0YSgpKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYXNPYmplY3QoY2Vs
bCktPnJhZ2VFbnN1cmVDb250aWd1b3VzKHZtKS5kYXRhKCkpOwogfQogCiBjaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2Vs
bCogY2VsbCkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxE
YXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhl
Yyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKCFjZWxsLT5pc09iamVjdCgpKQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihhc09i
amVjdChjZWxsKS0+ZW5zdXJlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpKTsKKyAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYXNPYmplY3QoY2VsbCktPmVuc3VyZUFycmF5U3RvcmFn
ZSh2bSkpOwogfQogCiBTdHJpbmdJbXBsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVS
b3BlKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZykKIHsKLSAgICBKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKICAgICBy
ZXR1cm4gc3RyaW5nLT52YWx1ZShleGVjKS5pbXBsKCk7CiB9CiAKIEpTQ2VsbCogREZHX09QRVJB
VElPTiBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyog
c3RyaW5nLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgCiAgICAgcmV0dXJu
IFN0cmluZ09iamVjdDo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgc3RyaW5nKTsKIH0KIAogSlND
ZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nT25DZWxsKEV4ZWNTdGF0ZSogZXhl
YywgSlNDZWxsKiBjZWxsKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMt
Pmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxE
YXRhLCBleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKICAgICAKICAgICByZXR1cm4gSlNWYWx1ZShjZWxs
KS50b1N0cmluZyhleGVjKTsKIH0KIAogSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRv
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwog
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkudG9TdHJpbmcoZXhlYyk7CiB9CiAK
IEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTIoRXhlY1N0YXRlKiBleGVj
LCBKU1N0cmluZyogbGVmdCwgSlNTdHJpbmcqIHJpZ2h0KQogewotICAgIEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKIAotICAgIHJldHVy
biBKU1JvcGVTdHJpbmc6OmNyZWF0ZShnbG9iYWxEYXRhLCBsZWZ0LCByaWdodCk7CisgICAgcmV0
dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlKHZtLCBsZWZ0LCByaWdodCk7CiB9CiAKIEpTQ2VsbCog
REZHX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTMoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmlu
ZyogYSwgSlNTdHJpbmcqIGIsIEpTU3RyaW5nKiBjKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKIAotICAgIHJldHVybiBK
U1JvcGVTdHJpbmc6OmNyZWF0ZShnbG9iYWxEYXRhLCBhLCBiLCBjKTsKKyAgICByZXR1cm4gSlNS
b3BlU3RyaW5nOjpjcmVhdGUodm0sIGEsIGIsIGMpOwogfQogCiBkb3VibGUgREZHX09QRVJBVElP
TiBvcGVyYXRpb25GTW9kT25JbnRzKGludDMyX3QgYSwgaW50MzJfdCBiKQpAQCAtMTYwNywyOSAr
MTYwNywyOSBAQCBkb3VibGUgREZHX09QRVJBVElPTiBvcGVyYXRpb25GTW9kT25JbnRzCiAKIEpT
Q2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRl
KiBleGVjLCBpbnQzMl90IG9wMSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAm
ZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xv
YmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgcmV0dXJuIEpTQzo6c3RyaW5nRnJv
bUNoYXJDb2RlKGV4ZWMsIG9wMSk7CiB9CiAKIERGR0hhbmRsZXJFbmNvZGVkIERGR19PUEVSQVRJ
T04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihFeGVjU3RhdGUqIGV4ZWMsIHVpbnQzMl90IGNhbGxJ
bmRleCkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0
YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7
CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CiAKICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhj
ZXB0aW9uKCk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvblZhbHVlKTsKICAgICAKICAgICB1bnNpZ25l
ZCB2UENJbmRleCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5ieXRlY29kZU9mZnNldEZvckNhbGxBdElu
ZGV4KGNhbGxJbmRleCk7Ci0gICAgRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gZ2VuZXJpY1Ro
cm93KGdsb2JhbERhdGEsIGV4ZWMsIGV4Y2VwdGlvblZhbHVlLCB2UENJbmRleCk7CisgICAgRXhj
ZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gZ2VuZXJpY1Rocm93KHZtLCBleGVjLCBleGNlcHRpb25W
YWx1ZSwgdlBDSW5kZXgpOwogICAgIEFTU0VSVChoYW5kbGVyLmNhdGNoUm91dGluZSk7CiAgICAg
cmV0dXJuIGRmZ0hhbmRsZXJFbmNvZGVkKGhhbmRsZXIuY2FsbEZyYW1lLCBoYW5kbGVyLmNhdGNo
Um91dGluZSk7CiB9CiAKIERGR0hhbmRsZXJFbmNvZGVkIERGR19PUEVSQVRJT04gbG9va3VwRXhj
ZXB0aW9uSGFuZGxlckluU3R1YihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbykKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFs
RGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhl
Yyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+
ZXhjZXB0aW9uKCk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvblZhbHVlKTsKQEAgLTE2MzgsMTUgKzE2
MzgsMTUgQEAgREZHSGFuZGxlckVuY29kZWQgREZHX09QRVJBVElPTiBsb29rdXBFeAogICAgIHdo
aWxlIChjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKICAgICAgICAgY29kZU9yaWdpbiA9IGNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXI7CiAgICAgCi0gICAgRXhjZXB0aW9uSGFu
ZGxlciBoYW5kbGVyID0gZ2VuZXJpY1Rocm93KGdsb2JhbERhdGEsIGV4ZWMsIGV4Y2VwdGlvblZh
bHVlLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFu
ZGxlciA9IGdlbmVyaWNUaHJvdyh2bSwgZXhlYywgZXhjZXB0aW9uVmFsdWUsIGNvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCk7CiAgICAgQVNTRVJUKGhhbmRsZXIuY2F0Y2hSb3V0aW5lKTsKICAgICBy
ZXR1cm4gZGZnSGFuZGxlckVuY29kZWQoaGFuZGxlci5jYWxsRnJhbWUsIGhhbmRsZXIuY2F0Y2hS
b3V0aW5lKTsKIH0KIAogc2l6ZV90IERGR19PUEVSQVRJT04gZGZnQ29udmVydEpTVmFsdWVUb0lu
dDMyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAg
IAogICAgIC8vIHRvSW50MzIvdG9VSW50MzIgcmV0dXJuIHRoZSBzYW1lIHZhbHVlOyB3ZSB3YW50
IHRoZSB2YWx1ZSB6ZXJvIGV4dGVuZGVkIHRvIGZpbGwgdGhlIHJlZ2lzdGVyLgogICAgIHJldHVy
biBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLnRvVUludDMyKGV4ZWMpOwpAQCAtMTY1NCwxNiArMTY1
NCwxNiBAQCBzaXplX3QgREZHX09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvCiAKIHNpemVf
dCBERkdfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcCkudG9Cb29sZWFuKGV4ZWMpOwogfQogCiB2b2lkIERG
R19PUEVSQVRJT04gZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZShFeGVjU3Rh
dGUqIGV4ZWMsIHZvaWQqIGRlYnVnSW5mb1Jhdywgdm9pZCogc2NyYXRjaCkKIHsKLSAgICBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAg
ICAgCiAgICAgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvKiBkZWJ1Z0luZm8gPSBzdGF0aWNf
Y2FzdDxTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qPihkZWJ1Z0luZm9SYXcpOwogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gZGVidWdJbmZvLT5jb2RlQmxvY2s7CkBAIC0xNzk4LDcgKzE3
OTgsNyBAQCBleHRlcm4gIkMiIEVuY29kZWRKU1ZhbHVlIEhPU1RfQ0FMTF9SRVRVCiB7CiAgICAg
aWYgKCFleGVjKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT5nbG9iYWxEYXRhKCkuaG9zdENhbGxSZXR1
cm5WYWx1ZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT52bSgpLmhvc3RDYWxs
UmV0dXJuVmFsdWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BoYXNlLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgLy8gVGhpbmdzIHlvdSBuZWVkIHRvIGhhdmUgYSBERkcgY29tcGlsZXIg
cGhhc2UuCiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAgICAgCi0gICAgSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKCkgeyByZXR1cm4gbV9ncmFwaC5tX2dsb2JhbERhdGE7IH0KKyAgICBWTSYgdm0oKSB7
IHJldHVybiBtX2dyYXBoLm1fdm07IH0KICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0
dXJuIG1fZ3JhcGgubV9jb2RlQmxvY2s7IH0KICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2so
KSB7IHJldHVybiBtX2dyYXBoLm1fcHJvZmlsZWRCbG9jazsgfQogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzIsNyArMTcyLDcgQEAgc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNoKExpbmtCdWZm
ZQogCiBzdGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4s
IHNpemVfdCBjb3VudCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93
Q2FzZUxhYmVsLCBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKIHsKLSAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXIgc3R1YkppdDsKICAgICAgICAg
CkBAIC0yMzEsNyArMjMxLDcgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNz
U3R1YgogICAgIAogICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3Jl
U2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKICAgICAK
LSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1YkppdCwgZXhlYy0+
Y29kZUJsb2NrKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwg
ZXhlYy0+Y29kZUJsb2NrKCkpOwogICAgIAogICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1
ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywg
c3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxhYmVsKTsKICAgICAKQEAgLTI0Nyw3ICsyNDcsNyBAQCBz
dGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgLy8gbGlrZSB0aGUg
aW50ZXJwcmV0ZXIgZG9lcywgdGhlbiBhZGQgYSBjaGVjayBmb3IgcmVjdXJzaW9uLgogCiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwogICAgIAogICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewogICAgICAgICBHUFJSZWcgYmFz
ZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOwpA
QCAtMjkyLDcgKzI5Miw3IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUq
IGUKICAgICAgICAgCiAgICAgICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9S
ZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsK
ICAgICAgICAgCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZz
dHViSml0LCBjb2RlQmxvY2spOworICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwg
JnN0dWJKaXQsIGNvZGVCbG9jayk7CiAgICAgICAgIAogICAgICAgICBsaW5rUmVzdG9yZVNjcmF0
Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdHViSW5mbywgc3VjY2Vzcywg
ZmFpbCwgZmFpbHVyZUNhc2VzKTsKICAgICAgICAgCkBAIC0zMzAsNyArMzMwLDcgQEAgc3RhdGlj
IGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICB9CiAKICAgICAgICAg
ZGZnUmVwYXRjaEJ5SWRTZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwg
c2xvdC5jYWNoZWRPZmZzZXQoKSwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCwgdHJ1ZSk7Ci0g
ICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZigqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKKyAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5
SWRTZWxmKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApAQCAtMzU2LDcgKzM1Niw3IEBAIHN0YXRp
YyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICByZXBsYWNlV2l0aEp1bXAo
cmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8sIHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29k
ZSgpKTsKICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24sIG9wZXJhdGlvbkdldEJ5SWRQcm90b0J1aWxkTGlzdCk7CiAgICAgCi0gICAgc3R1YkluZm8u
aW5pdEdldEJ5SWRDaGFpbigqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHRydWUpOworICAgIHN0dWJJbmZv
LmluaXRHZXRCeUlkQ2hhaW4oKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1
Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgdHJ1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTM4Niw3ICszODYsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4
ZWNTdGF0CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAg
ICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwogICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOwotICAgIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CiAgICAgCiAgICAgQVNTRVJUKHNsb3Quc2xvdEJhc2UoKS5pc09iamVjdCgpKTsKICAgICAKQEAg
LTQwMCw3ICs0MDAsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0
CiAgICAgICAgIGxpc3RJbmRleCA9IDA7CiAgICAgfSBlbHNlIGlmIChzdHViSW5mby5hY2Nlc3NU
eXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZikgewogICAgICAgICBBU1NFUlQoIXN0dWJJbmZv
LnN0dWJSb3V0aW5lKTsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgSklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZShz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpLCBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmpl
Y3RTdHJ1Y3R1cmUuZ2V0KCksIHRydWUpOworICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCp2bSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgSklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGlu
ZShzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpLCBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VP
YmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHRydWUpOwogICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJ
ZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSk7CiAgICAgICAgIGxpc3RJbmRl
eCA9IDE7CiAgICAgfSBlbHNlIHsKQEAgLTQxOCw3ICs0MTgsNyBAQCBzdGF0aWMgYm9vbCB0cnlC
dWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0
aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZUdQUik7CiAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0Y2guZGZnLnVzZWRSZWdp
c3RlcnMpLmdldEZyZWVHUFIoKTsKICAgICAgICAgCi0gICAgICAgIENDYWxsSGVscGVycyBzdHVi
Sml0KGdsb2JhbERhdGEsIGNvZGVCbG9jayk7CisgICAgICAgIENDYWxsSGVscGVycyBzdHViSml0
KHZtLCBjb2RlQmxvY2spOwogICAgICAgICAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
d3JvbmdTdHJ1Y3QgPSBzdHViSml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKICAgICAgICAg
CkBAIC01MDcsNyArNTA3LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVj
U3RhdAogICAgICAgICAgICAgaXNEaXJlY3QgPSB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQsIGNvZGVCbG9jayk7
CisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgY29kZUJsb2Nr
KTsKICAgICAgICAgCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luOwog
ICAgICAgICBpZiAobGlzdEluZGV4KQpAQCAtNTMwLDEyICs1MzAsMTIgQEAgc3RhdGljIGJvb2wg
dHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAgICAgICAgICAgICAgICAoIkRGRyBH
ZXRCeUlkIHBvbHltb3JwaGljIGxpc3QgYWNjZXNzIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwK
ICAgICAgICAgICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRh
dGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSku
ZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAotICAgICAgICAgICAgICAgICpnbG9iYWxEYXRhLAorICAg
ICAgICAgICAgICAgICp2bSwKICAgICAgICAgICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLAogICAgICAgICAgICAgICAgIHNsb3QuY2FjaGVkUHJvcGVydHlUeXBlKCkgPT0gUHJv
cGVydHlTbG90OjpHZXR0ZXIKICAgICAgICAgICAgICAgICB8fCBzbG90LmNhY2hlZFByb3BlcnR5
VHlwZSgpID09IFByb3BlcnR5U2xvdDo6Q3VzdG9tKTsKICAgICAgICAgCi0gICAgICAgIHBvbHlt
b3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqZ2xvYmFsRGF0YSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgaXNEaXJl
Y3QpOworICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5z
ZXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0
dXJlLCBpc0RpcmVjdCk7CiAgICAgICAgIAogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hC
dWZmZXIoY29kZUJsb2NrKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCkBAIC01Nzcs
MTQgKzU3NywxNCBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURQcm90b0xpc3QoRXhlCiAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgp
OwogICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90
eXBlQ2hhaW4oZXhlYyk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxv
Y2soKTsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgp
OworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIAogICAgIFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0OwogICAgIGludCBsaXN0SW5k
ZXggPSAxOwogICAgIAogICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRf
YnlfaWRfY2hhaW4pIHsKICAgICAgICAgQVNTRVJUKCEhc3R1YkluZm8uc3R1YlJvdXRpbmUpOwot
ICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBz
dHViSW5mby5zdHViUm91dGluZSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0
cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0KCksIHRydWUp
OworICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nl
c3NTdHJ1Y3R1cmVMaXN0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1Yklu
Zm8uc3R1YlJvdXRpbmUsIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1
cmUuZ2V0KCksIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpLCB0cnVlKTsKICAg
ICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUuY2xlYXIoKTsKICAgICAgICAgc3R1YkluZm8uaW5p
dEdldEJ5SWRQcm90b0xpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxKTsKICAgICB9IGVs
c2UgewpAQCAtNjAzLDcgKzYwMyw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRFByb3Rv
TGlzdChFeGUKICAgICAgICAgCiAgICAgICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIo
ZXhlYywgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1cmUs
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRmZy5kZWx0YUNhbGxUb0RvbmUpLCBsYXN0UHJvdG9CZWdpbiwgc3R1YlJvdXRpbmUpOwogICAg
ICAgICAKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0u
c2V0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGlu
ZSwgc3RydWN0dXJlLCB0cnVlKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5s
aXN0W2xpc3RJbmRleF0uc2V0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1
YlJvdXRpbmUsIHN0cnVjdHVyZSwgdHJ1ZSk7CiAgICAgICAgIAogICAgICAgICBSZXBhdGNoQnVm
ZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAgICAgcmVwbGFjZVdpdGhKdW1wKHJl
cGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CkBAIC02
NTcsNyArNjU3LDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFJlcGxhY2VTdHViKAogICAgIENvZGVM
b2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJlbCwKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBz
dHViUm91dGluZSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xv
YmFsRGF0YSgpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIEdQUlJlZyBiYXNlR1BS
ID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7CiAjaWYg
VVNFKEpTVkFMVUUzMl82NCkKICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSBzdGF0aWNfY2FzdDxH
UFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZVRhZ0dQUik7CkBAIC03MzMsNyArNzMzLDcg
QEAgc3RhdGljIHZvaWQgZW1pdFB1dFJlcGxhY2VTdHViKAogICAgICAgICBmYWlsdXJlID0gYmFk
U3RydWN0dXJlOwogICAgIH0KICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9i
YWxEYXRhLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOwogICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOwogICAgIHBhdGNoQnVmZmVy
LmxpbmsoZmFpbHVyZSwgZmFpbHVyZUxhYmVsKTsKICAgICAgICAgICAgIApAQCAtNzU3LDcgKzc1
Nyw3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICBDb2RlTG9jYXRp
b25MYWJlbCBmYWlsdXJlTGFiZWwsCiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJv
dXRpbmUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERh
dGEoKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKIAogICAgIEdQUlJlZyBiYXNlR1BSID0g
c3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7CiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKQEAgLTc3Miw3ICs3NzIsNyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJh
bnNpdGlvblN0dWIoCiAjZW5kaWYKICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZUdQUik7CiAgICAg
Ci0gICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQoZ2xvYmFsRGF0YSk7CisgICAgQ0NhbGxIZWxwZXJz
IHN0dWJKaXQodm0pOwogICAgICAgICAgICAgCiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gYWxs
b2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwogICAgIEFTU0VSVChzY3JhdGNoR1BSMSAhPSBi
YXNlR1BSKTsKQEAgLTg0MCw3ICs4NDAsNyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlv
blN0dWIoCiAgICAgCiAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBv
bGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKICAgICAgICAgc2l6ZV90IG5ld1Np
emUgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7Ci0g
ICAgICAgIENvcGllZEFsbG9jYXRvciogY29waWVkQWxsb2NhdG9yID0gJmdsb2JhbERhdGEtPmhl
YXAuc3RvcmFnZUFsbG9jYXRvcigpOworICAgICAgICBDb3BpZWRBbGxvY2F0b3IqIGNvcGllZEFs
bG9jYXRvciA9ICZ2bS0+aGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7CiAgICAgICAgIAogICAgICAg
ICBpZiAoIW9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewogICAgICAgICAgICAg
c3R1YkppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2Ny
YXRjaEdQUjEpOwpAQCAtOTEyLDcgKzkxMiw3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0
aW9uU3R1YigKICAgICAgICAgc2xvd1BhdGgubGluaygmc3R1YkppdCk7CiAgICAgICAgIAogICAg
ICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0KTsK
LSAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IGdsb2JhbERhdGEtPnNjcmF0
Y2hCdWZmZXJGb3JTaXplKGFsbG9jYXRvci5kZXNpcmVkU2NyYXRjaEJ1ZmZlclNpemUoKSk7Cisg
ICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZv
clNpemUoYWxsb2NhdG9yLmRlc2lyZWRTY3JhdGNoQnVmZmVyU2l6ZSgpKTsKICAgICAgICAgYWxs
b2NhdG9yLnByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlcihzdHViSml0LCBzY3Jh
dGNoQnVmZmVyLCBzY3JhdGNoR1BSMSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgc3R1
YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihz
bG90LmNhY2hlZE9mZnNldCgpKSwgdmFsdWVHUFIpOwpAQCAtOTI0LDcgKzkyNCw3IEBAIHN0YXRp
YyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAgc3VjY2Vzc0luU2xvd1BhdGgg
PSBzdHViSml0Lmp1bXAoKTsKICAgICB9CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpKTsKKyAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpKTsKICAgICBw
YXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJl
bEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICBpZiAo
YWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
ZmFpbHVyZSwgZmFpbHVyZUxhYmVsKTsKQEAgLTk0NCw3ICs5NDQsNyBAQCBzdGF0aWMgdm9pZCBl
bWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwg
c3RydWN0dXJlLAogICAgICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9j
aygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAog
ICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9u
ZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAotICAgICAgICAgICAgKmdsb2JhbERhdGEsCisgICAg
ICAgICAgICAqdm0sCiAgICAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRh
YmxlKCksCiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xk
U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAogICAgICAgICAgICAgc3RydWN0dXJlKTsK
QEAgLTk1Myw3ICs5NTMsNyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiBz
dGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xv
dCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwogCiAgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTEwMDIsMTMgKzEwMDIsMTMgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVQdXRCeUlE
KEV4ZWNTdGF0ZSogZQogICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZv
LnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAgICAgICAgICAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxk
aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCpnbG9iYWxEYXRhLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBl
Q2hhaW4sIHB1dEtpbmQgPT0gRGlyZWN0KTsKKyAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRC
eUlkVHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVj
dHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgcHV0S2luZCA9PSBEaXJlY3QpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgICAg
IGRmZ1JlcGF0Y2hCeUlkU2VsZkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUs
IHNsb3QuY2FjaGVkT2Zmc2V0KCksIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0
aW9uKHNsb3QsIHB1dEtpbmQpLCBmYWxzZSk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlk
UmVwbGFjZSgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0
dXJlKTsKKyAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNlKCp2bSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCkBAIC0xMDI1LDcgKzEwMjUsNyBAQCB2b2lkIGRmZ1JlcGF0Y2hQdXRCeUlEKEV4ZWNT
dGF0ZSogZXhlYywgCiBzdGF0aWMgYm9vbCB0cnlCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNv
ZGVCbG9jaygpOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxE
YXRhKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAKICAgICBpZiAoIWJhc2VWYWx1ZS5p
c0NlbGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA3Nyw3ICsxMDc3LDcgQEAgc3Rh
dGljIGJvb2wgdHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdAogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoCiAgICAgICAgICAgICAgICAgUHV0QnlJZEFjY2Vzczo6
dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAgICAgICAgKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1
Y3R1cmUsIHByb3RvdHlwZUNoYWluLAogICAgICAgICAgICAgICAgICAgICBzdHViUm91dGluZSkp
OwogICAgICAgICB9IGVsc2UgewpAQCAtMTA5Miw3ICsxMDkyLDcgQEAgc3RhdGljIGJvb2wgdHJ5
QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdAogICAgICAgICAgICAgCiAgICAgICAgICAgICBsaXN0
LT5hZGRBY2Nlc3MoCiAgICAgICAgICAgICAgICAgUHV0QnlJZEFjY2Vzczo6cmVwbGFjZSgKLSAg
ICAgICAgICAgICAgICAgICAgKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksCisgICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBzdHViUm91dGluZSkpOwogICAgICAg
ICB9CiAgICAgICAgIApAQCAtMTExNSwxNCArMTExNSwxNCBAQCB2b2lkIGRmZ0J1aWxkUHV0QnlJ
ZExpc3QoRXhlY1N0YXRlKiBleGVjCiAgICAgICAgIGRmZ1JlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVC
bG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1
dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGxpbmtTbG93
Rm9yKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCkKK3N0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIs
IFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKIHsKICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewotICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLCBnbG9iYWxE
YXRhLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24s
IHZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7
Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biwgZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3Ip
LmNvZGUoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9y
KS5jb2RlKCkpOwogfQogCiB2b2lkIGRmZ0xpbmtGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpTRnVuY3Rp
b24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQga2luZCkKQEAgLTExMzAsMzUgKzExMzAsMzUgQEAgdm9pZCBkZmdMaW5rRm9yKEV4
ZWNTdGF0ZSogZXhlYywgQ2FsbExpbgogICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIpOwog
ICAgIAogICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUo
KS0+Y29kZUJsb2NrKCk7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gY2FsbGVyQ29k
ZUJsb2NrLT5nbG9iYWxEYXRhKCk7CisgICAgVk0qIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgp
OwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2sp
OwogICAgIAogICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOwotICAgIGNhbGxM
aW5rSW5mby5jYWxsZWUuc2V0KGV4ZWMtPmNhbGxlckZyYW1lKCktPmdsb2JhbERhdGEoKSwgY2Fs
bExpbmtJbmZvLmhvdFBhdGhCZWdpbiwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgY2FsbGVlKTsKLSAgICBjYWxsTGlua0luZm8ubGFzdFNlZW5DYWxsZWUuc2V0KGV4ZWMtPmNh
bGxlckZyYW1lKCktPmdsb2JhbERhdGEoKSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwgY2FsbGVlKTsKKyAgICBjYWxsTGlua0luZm8uY2FsbGVlLnNldChleGVjLT5jYWxsZXJG
cmFtZSgpLT52bSgpLCBjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luLCBjYWxsZXJDb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOworICAgIGNhbGxMaW5rSW5mby5sYXN0U2VlbkNh
bGxlZS5zZXQoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+dm0oKSwgY2FsbGVyQ29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlu
a0luZm8uaG90UGF0aE90aGVyLCBjb2RlUHRyKTsKICAgICAKICAgICBpZiAoY2FsbGVlQ29kZUJs
b2NrKQogICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoJmNhbGxMaW5r
SW5mbyk7CiAgICAgCiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgZ2xvYmFs
RGF0YS0+Z2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsK
KyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgdm0tPmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUo
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKGtpbmQgPT0gQ29k
ZUZvckNvbnN0cnVjdCk7Ci0gICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgZ2xvYmFsRGF0
YSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICBsaW5rU2xvd0ZvcihyZXBh
dGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAogdm9p
ZCBkZmdMaW5rU2xvd0ZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJ
bmZvLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgQ29kZUJsb2NrKiBjYWxs
ZXJDb2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKLSAgICBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEgPSBjYWxsZXJDb2RlQmxvY2stPmdsb2JhbERhdGEoKTsKKyAg
ICBWTSogdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7CiAgICAgCi0gICAgbGlua1Nsb3dGb3Io
cmVwYXRjaEJ1ZmZlciwgZ2xvYmFsRGF0YSwgY2FsbExpbmtJbmZvLCBraW5kKTsKKyAgICBsaW5r
U2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBraW5kKTsKIH0KIAogdm9p
ZCBkZmdMaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQ
dHIpCkBAIC0xMTY2LDExICsxMTY2LDExIEBAIHZvaWQgZGZnTGlua0Nsb3N1cmVDYWxsKEV4ZWNT
dGF0ZSogZXhlYywKICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKTsKICAgICAKICAgICBD
b2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9j
aygpOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IGNhbGxlckNvZGVCbG9jay0+Z2xv
YmFsRGF0YSgpOworICAgIFZNKiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKICAgICAKICAg
ICBHUFJSZWcgY2FsbGVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihjYWxsTGlua0luZm8uY2Fs
bGVlR1BSKTsKICAgICAKLSAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdChnbG9iYWxEYXRhLCBjYWxs
ZXJDb2RlQmxvY2spOworICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtLCBjYWxsZXJDb2RlQmxv
Y2spOwogICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgCkBA
IC0xMjIzLDExICsxMjIzLDExIEBAIHZvaWQgZGZnTGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSog
ZXhlYywKICAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUklu
Zm86Om5vbkFyZ0dQUjIpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3cgPSBzdHViSml0Lmp1
bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1
YkppdCwgY2FsbGVyQ29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwg
JnN0dWJKaXQsIGNhbGxlckNvZGVCbG9jayk7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhj
YWxsLCBGdW5jdGlvblB0cihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICBwYXRj
aEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldCgwKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJl
bChnbG9iYWxEYXRhLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUo
KSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmdl
dENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CiAgICAgCiAgICAg
UmVmUHRyPENsb3N1cmVDYWxsU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0gYWRvcHRSZWYobmV3
IENsb3N1cmVDYWxsU3R1YlJvdXRpbmUoCiAgICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKApAQCAt
MTIzNSwxNCArMTIzNSwxNCBAQCB2b2lkIGRmZ0xpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4
ZWMsCiAgICAgICAgICAgICAoIkRGRyBjbG9zdXJlIGNhbGwgc3R1YiBmb3IgJXMsIHJldHVybiBw
b2ludCAlcCwgdGFyZ2V0ICVwICglcykiLAogICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqY2Fs
bGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldCgwKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIGNvZGVQ
dHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgdG9DU3RyaW5nKHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVC
bG9jaykpLmRhdGEoKSkpLAotICAgICAgICAqZ2xvYmFsRGF0YSwgY2FsbGVyQ29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBleGVjdXRhYmxlLCBjYWxsTGlua0luZm8uY29k
ZU9yaWdpbikpOworICAgICAgICAqdm0sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIHN0cnVjdHVyZSwgZXhlY3V0YWJsZSwgY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4pKTsKICAg
ICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKICAg
ICAKICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVtcCgKICAgICAgICAgUmVwYXRjaEJ1
ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoY2FsbExpbmtJbmZvLmhv
dFBhdGhCZWdpbiksCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKSk7Ci0gICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgZ2xvYmFsRGF0YSwg
Y2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCk7CisgICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZl
ciwgdm0sIGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwpOwogICAgIAogICAgIGNhbGxMaW5rSW5m
by5zdHViID0gc3R1YlJvdXRpbmUucmVsZWFzZSgpOwogICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZp
c2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjg5LDEyICsxMjg5LDEyIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGkKICAgICAgICAgICAgIEpTVmFsdWVT
b3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjT2JqZWN0LCBt
X2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAK
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsK
KyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgp
LT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIERGR19UWVBFX0NIRUNLKAogICAg
ICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS0+Y2hpbGQy
KCksIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3Ry
dWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwogICAgICAgICBHUFJSZWcg
c3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwpAQCAtMTMwNCw3ICsxMzA0LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaQogICAgICAgICAgICAgSlNWYWx1
ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNPYmplY3Qs
IG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IAogICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCi0gICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5v
ZGUtPmNoaWxkMSgpLCAKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAgLTEzMTYsNyArMTMxNiw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGkKICAgICAgICAgICAgIEpTVmFs
dWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigpLCBTcGVjT2JqZWN0
LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCAKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAotICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSkpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBu
b2RlLT5jaGlsZDIoKSwgCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0xMzY2LDE0ICsxMzY2LDE0IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamUKICAgICAgICAgICAgIEpT
VmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgU3BlY09iamVjdCwg
bV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0o
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCiAgICAg
ICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIFNw
ZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6RXF1YWwsCiAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLAotICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5n
U3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFH
UFIpLCBsZWZ0Q2hpbGQsIAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIApAQCAtMTM5NSw3ICsxMzk1LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZQogICAgICAgICAgICAgbV9q
aXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyUGF5bG9hZEdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgp
KSkpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMlBheWxvYWRHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwogICAgICAgICBERkdfVFlQRV9D
SEVDSygKQEAgLTE0MDMsNyArMTQwMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVP
YmplY3RUb09iamUKICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCiAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLAot
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJU
YWdHUFIsIG9wMlBheWxvYWRHUFIpLCByaWdodENoaWxkLCAKICAgICAgICAgICAgIG1faml0LmJy
YW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAg
LTE0NzQsMTQgKzE0NzQsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xl
T2JqZQogICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVm
dENoaWxkLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwogICAgICAgICBE
RkdfVFlQRV9DSEVDSygKICAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9w
MUdQUiksIGxlZnRDaGlsZCwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgc3RydWN0dXJl
R1BSLCAKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNv
dXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLAogICAgICAgICAgICAgbV9qaXQu
YnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIApA
QCAtMTUwMiw3ICsxNTAyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xl
T2JqZQogICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Mob3AyUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KG9wMlBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIp
OwogICAgICAgICBERkdfVFlQRV9DSEVDSygKQEAgLTE1MTAsNyArMTUxMCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICAgICAgICAgIG1faml0LmJyYW5j
aFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZUdQUiwgCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0o
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVSZWdzKG9wMlRhZ0dQUiwgb3AyUGF5bG9hZEdQUiksIHJpZ2h0Q2hpbGQs
CiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgCkBAIC0xNjIxLDcgKzE2MjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAogICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3Ry
dWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKIApAQCAtMTYzMCw3ICsxNjMwLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAgICAgICAgICAgbV9qaXQuYnJhbmNo
UHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKICAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmVHUFIsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Cisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IAogICAgICAgICAgICAgbV9qaXQuYnJhbmNo
VGVzdDgoCkBAIC0xNzUxLDcgKzE3NTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2Jq
ZWN0T3JPdGhlckJyCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAK
LSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKIApAQCAtMTc2MCw3ICsxNzYwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdE9iamVjdE9yT3RoZXJCcgogICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgc2NyYXRj
aEdQUiwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKSk7CiAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gbV9qaXQuYnJhbmNoVGVzdDgoSklUQ29tcGlsZXI6Olplcm8sIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKIApAQCAtMjY4
NiwzMSArMjY4NiwzMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkFyZ3VtZW50cyhub2RlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBj
b21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJy
YXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQ4X3QpLCBTaWduZWRUeXBlZEFycmF5KTsK
KyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5p
bnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQ4X3QpLCBTaWduZWRUeXBlZEFy
cmF5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5
OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0Lmdsb2Jh
bERhdGEoKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDE2X3QpLCBT
aWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRB
cnJheShtX2ppdC52bSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50
MTZfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5
cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2Rl
LCBzaXplb2YoaW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgY29tcGls
ZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9y
KCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgU2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJy
YXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5
KTsKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgp
LT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVk
VHlwZWRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWlu
dDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJy
YXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgbm9k
ZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5
RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0g
ICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0
YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5z
aWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRB
cnJheShtX2ppdC52bSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVp
bnQxNl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9u
SW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigp
LCBub2RlLCBzaXplb2YodWludDMyX3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAg
ICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQzMkFycmF5
RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToK
LSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2Jh
bERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoZmxvYXQpKTsK
KyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCkt
PmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAg
ICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5m
bG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKKyAgICAgICAg
ICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0NjRB
cnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpAQCAtMjg5MiwzOSArMjg5MiwzOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJ
bnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBi
YXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5
cGVkQXJyYXkpOworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheSht
X2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdw
cigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5Ogot
ICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxE
YXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdwcigp
LCBub2RlLCBzaXplb2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAg
Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQxNkFycmF5RGVz
Y3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDE2
X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0
QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJheURlc2Ny
aXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQzMl90
KSwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRU
eXBlZEFycmF5KG1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCks
IHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6
VWludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXko
bV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBw
cm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkp
OworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgp
LT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9k
ZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6
Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2Jh
bERhdGEoKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3Bl
cnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSwgQ2xh
bXBSb3VuZGluZyk7CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5
KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBw
cm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXks
IENsYW1wUm91bmRpbmcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxG
b3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9y
KCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDE2X3QpLCBV
bnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlw
ZWRBcnJheShtX2ppdC52bSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwg
cHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJh
eSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5
OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJy
YXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIo
KSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIFVuc2lnbmVkVHlwZWRB
cnJheSk7CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0
LnZtKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIo
KSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJh
eToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC5n
bG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVy
dHkuZ3ByKCksIG5vZGUsIHNpemVvZihmbG9hdCkpOworICAgICAgICAgICAgY29tcGlsZVB1dEJ5
VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3Io
KSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihmbG9hdCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2
NEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1f
aml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBw
cm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOworICAgICAgICAgICAgY29tcGls
ZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0NjRBcnJheURlc2Ny
aXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihkb3VibGUp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CkBA
IC0zMzE3LDcgKzMzMTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMVBheWxvYWRHUFIsIHJlc3VsdFBheWxvYWRH
UFIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
YWxyZWFkeVByaW1pdGl2ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgb3AxVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxUGF5bG9h
ZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RQcmltaXRpdmUgPSBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFQ
YXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGFscmVhZHlQcmltaXRpdmUubGluaygmbV9qaXQpOwogICAgICAg
ICAgICAgbV9qaXQubW92ZShvcDFUYWdHUFIsIHJlc3VsdFRhZ0dQUik7CkBAIC0zMzUxLDcgKzMz
NTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
ICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGgyID0gbV9qaXQuYnJhbmNoUHRyKAog
ICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCiAgICAgICAgICAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKG9wMVBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CisgICAgICAgICAgICAgICAgICAg
IFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CiAgICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShvcDFQYXlsb2FkR1BSLCByZXN1bHRHUFIpOwogICAgICAg
ICAgICAgICAgIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgICAgICAgICAgc2xvd1BhdGgx
LmxpbmsoJm1faml0KTsKQEAgLTM0NTksNyArMzQ1OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc2l6ZV90
IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG5vZGUtPm51bUNoaWxkcmVu
KCk7Ci0gICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBtX2ppdC5nbG9iYWxE
YXRhKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKKyAgICAgICAgU2NyYXRj
aEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1faml0LnZtKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXpl
KHNjcmF0Y2hTaXplKTsKICAgICAgICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHNjcmF0Y2hC
dWZmZXIgPyBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFC
dWZmZXIoKSkgOiAwOwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSWR4
ID0gMDsgb3BlcmFuZElkeCA8IG5vZGUtPm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZElkeCkgewpA
QCAtMzc0Niw3ICszNzQ2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICAKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBub2RlLT5zdHJ1
Y3R1cmUoKTsKICAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNPYmplY3Q6OmFsbG9j
YXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIE1hcmtlZEFs
bG9jYXRvciogYWxsb2NhdG9yUHRyID0gJm1faml0Lmdsb2JhbERhdGEoKS0+aGVhcC5hbGxvY2F0
b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihhbGxvY2F0aW9uU2l6ZSk7CisgICAgICAgIE1h
cmtlZEFsbG9jYXRvciogYWxsb2NhdG9yUHRyID0gJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9y
Rm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3IoYWxsb2NhdGlvblNpemUpOwogCiAgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3JQdHIpLCBhbGxvY2F0b3JHUFIpOwogICAg
ICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIsIGFsbG9jYXRvckdQUiwgVHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoR1BSLCBzbG93UGF0
aCk7CkBAIC00NDAyLDcgKzQ0MDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RTdHJpbmcgPSBtX2pp
dC5icmFuY2g4KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGVt
cEdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJp
bmdUeXBlKSk7CiAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFN0
cmluZ1VzZSkKICAgICAgICAgICAgICAgICBERkdfVFlQRV9DSEVDSyhKU1ZhbHVlUmVncyh0YWdH
UFIsIHBheWxvYWRHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY1N0cmluZywgbm90U3RyaW5nKTsK
LSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PnNtYWxsU3RyaW5ncy5zdHJpbmdTdHJpbmcoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0
cmluZygpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQu
anVtcCgpKTsKICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgIT0gU3Ry
aW5nVXNlKSB7CiAgICAgICAgICAgICAgICAgbm90U3RyaW5nLmxpbmsoJm1faml0KTsKQEAgLTQ0
MTksMjIgKzQ0MTksMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogCiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHRhZ0dQUiwgdGVt
cEdQUik7CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3ROdW1iZXIgPSBtX2ppdC5i
cmFuY2gzMihKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCB0ZW1wR1BSLCBKSVRDb21waWxlcjo6
VHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZyArIDEpKTsKLSAgICAgICAgICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnNtYWxsU3RyaW5ncy5udW1i
ZXJTdHJpbmcoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJ
bW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJpbmdzLm51bWJlclN0cmluZygpKSwgcmVzdWx0R1BS
KTsKICAgICAgICAgICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAg
ICAgIG5vdE51bWJlci5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIG5vdFVuZGVmaW5lZCA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwg
dGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSk7Ci0gICAgICAgICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zbWFsbFN0cmlu
Z3MudW5kZWZpbmVkU3RyaW5nKCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy51bmRlZmluZWRTdHJpbmco
KSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAo
KSk7CiAgICAgICAgICAgICBub3RVbmRlZmluZWQubGluaygmbV9qaXQpOwogCiAgICAgICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBub3ROdWxsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6
Ok5vdEVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSk7Ci0gICAg
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zbWFs
bFN0cmluZ3Mub2JqZWN0U3RyaW5nKCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy5vYmplY3RTdHJpbmco
KSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAo
KSk7CiAgICAgICAgICAgICBub3ROdWxsLmxpbmsoJm1faml0KTsKIAogICAgICAgICAgICAgLy8g
T25seSBib29sZWFuIGxlZnQKLSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0ciht
X2ppdC5nbG9iYWxEYXRhKCktPnNtYWxsU3RyaW5ncy5ib29sZWFuU3RyaW5nKCkpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNt
YWxsU3RyaW5ncy5ib29sZWFuU3RyaW5nKCkpLCByZXN1bHRHUFIpOwogICAgICAgICB9CiAgICAg
ICAgIGRvbmVKdW1wcy5saW5rKCZtX2ppdCk7CiAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BS
LCBub2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxNSwx
MiArMTMxNSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpCiAg
ICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGls
ZDEoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBE
RkdfVFlQRV9DSEVDSygKICAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9w
MkdQUiksIG5vZGUtPmNoaWxkMigpLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAK
LSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlz
KTsKICAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKQEAgLTEz
MzAsNyArMTMzMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGkK
ICAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNo
aWxkMSgpLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAotICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkp
KTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJv
eGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwKICAgICAgICAgICAgIG1faml0LmJyYW5j
aFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAgLTEz
NDIsNyArMTM0Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGkK
ICAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNo
aWxkMigpLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAotICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkp
KTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJv
eGVkQ2VsbChvcDJHUFIpLCBub2RlLT5jaGlsZDIoKSwKICAgICAgICAgICAgIG1faml0LmJyYW5j
aFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAgLTEz
ODgsMTQgKzEzODgsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2Jq
ZQogICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENo
aWxkLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwogICAgICAgICBERkdf
VFlQRV9DSEVDSygKICAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQ
UiksIGxlZnRDaGlsZCwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIs
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdl
dCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwKICAgICAgICAgICAgIG1faml0LmJyYW5j
aFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAgLTE0
MTUsMTQgKzE0MTUsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2Jq
ZQogICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2Vs
bCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwogICAgICAgICBERkdf
VFlQRV9DSEVDSygKICAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQs
ICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIs
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdl
dCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9w
MkdQUiksIHJpZ2h0Q2hpbGQsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0xNDkyLDE0ICsxNDkyLDE0
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICAgICAgICAg
IEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgU3BlY09iamVj
dCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkp
KSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
dm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCiAg
ICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQs
IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCi0gICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5z
dHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxs
KG9wMUdQUiksIGxlZnRDaGlsZCwgCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0xNTE5LDE0ICsxNTE5
LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICAgICAg
ICAgIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsICh+U3BlY0NlbGwpIHwgU3BlY09i
amVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKICAgICAgICAgREZHX1RZUEVfQ0hFQ0so
CiAgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLCAoflNwZWNDZWxs
KSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCi0gICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwog
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJp
Z2h0Q2hpbGQsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0xNjMxLDcgKzE2MzEsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAgICAgICAgICAgICBKU1ZhbHVlUmVn
cyh2YWx1ZUdQUiksIG5vZGVVc2UsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJh
bmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5n
U3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1faml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCBzdHJ1Y3R1cmVHUFIpOwogCkBAIC0xNjM5LDcgKzE2MzksNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1
ZUdQUiksIG5vZGVVc2UsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRy
KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKICAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmVHUFIsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3Ry
aW5nU3RydWN0dXJlLmdldCgpKSkpOwogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlz
Tm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVz
dDgoCkBAIC0xNzc0LDcgKzE3NzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0
T3JPdGhlckJyCiAgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsICh+
U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAKQEAg
LTE3ODIsNyArMTc4Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVy
QnIKICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgKH5TcGVjQ2Vs
bCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSLAotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKIAog
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBt
X2ppdC5icmFuY2hUZXN0OChKSVRDb21waWxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogCkBAIC0yNTg1LDMxICsyNTg1LDMxIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbE9uQXJndW1lbnRzKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9u
SW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwg
bm9kZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDhBcnJheURlc2NyaXB0
b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBj
b21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQxNkFy
cmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJyYXkp
OworICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCkt
PmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgU2lnbmVkVHlw
ZWRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJB
cnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5n
bG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQzMl90
KSwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5
cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9m
KGludDMyX3QpLCBTaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25J
bnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwg
bm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAg
Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4QXJyYXlEZXNj
cmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToK
LSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxE
YXRhKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhf
dCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbklu
dFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIG5v
ZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBp
bGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5
RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDE2X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkp
OworICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCkt
PnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDE2X3QpLCBVbnNpZ25l
ZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVp
bnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1f
aml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1
aW50MzJfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBjb21waWxlR2V0QnlW
YWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5v
ZGUsIHNpemVvZih1aW50MzJfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDMy
QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihmbG9hdCkpOworICAgICAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5RGVz
Y3JpcHRvcigpLCBub2RlLCBzaXplb2YoZmxvYXQpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlW
YWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURlc2Ny
aXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOworICAgICAgICAgICAgY29tcGlsZUdldEJ5
VmFsT25GbG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigp
LCBub2RlLCBzaXplb2YoZG91YmxlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yODc2
LDM5ICsyODc2LDM5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToK
LSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFs
RGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdwcigp
LCBub2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBj
b21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDhBcnJheURlc2Ny
aXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQ4X3Qp
LCBTaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlW
YWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50MTZBcnJheURlc2NyaXB0
b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwg
U2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBl
ZEFycmF5KG1faml0LnZtKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHBy
b3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6SW50
MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9q
aXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9w
ZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBTaWduZWRUeXBlZEFycmF5KTsKKyAg
ICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50
MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNp
emVvZihpbnQzMl90KSwgU2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAg
Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4
QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXpl
b2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBjb21waWxlUHV0
QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCks
IGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2ln
bmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRC
eVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OENsYW1wZWRBcnJh
eURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1
aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5LCBDbGFtcFJvdW5kaW5nKTsKKyAgICAgICAgICAg
IGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhDbGFtcGVk
QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXpl
b2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJh
eToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xv
YmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHku
Z3ByKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAg
ICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQx
NkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6
ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAg
ICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVp
bnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwg
c2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGNvbXBp
bGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDMyQXJyYXlEZXNjcmlw
dG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDMyX3Qp
LCBVbnNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1
dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5
RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGZs
b2F0KSk7CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9q
aXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5n
cHIoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBjb21w
aWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0
QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXpl
b2YoZG91YmxlKSk7CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJy
YXkobV9qaXQudm0oKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9w
ZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKQEAgLTMyMzUsNyArMzIzNSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIG1faml0Lm1v
dmUob3AxR1BSLCByZXN1bHRHUFIpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGFscmVhZHlQcmltaXRpdmUgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sIG9wMUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdFByaW1pdGl2ZSA9IG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7Cisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RQcmltaXRpdmUgPSBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhv
cDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgYWxyZWFkeVByaW1pdGl2ZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0R1BSKTsKQEAgLTMyNjUsNyArMzI2NSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBzbG93UGF0aDIgPSBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKICAgICAgICAgICAgICAgICAgICAgSklU
Q29tcGlsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAg
ICAgICAgICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSkpOworICAgICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tUHRyKG1f
aml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwogICAgICAgICAgICAgICAgIG1faml0
Lm1vdmUob3AxR1BSLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgICAgIGRvbmUgPSBtX2ppdC5q
dW1wKCk7CiAgICAgICAgICAgICAgICAgc2xvd1BhdGgxLmxpbmsoJm1faml0KTsKQEAgLTMzNzEs
NyArMzM3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgc2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSAqIG5vZGUtPm51bUNoaWxkcmVuKCk7Ci0gICAgICAgIFNjcmF0Y2hCdWZm
ZXIqIHNjcmF0Y2hCdWZmZXIgPSBtX2ppdC5nbG9iYWxEYXRhKCktPnNjcmF0Y2hCdWZmZXJGb3JT
aXplKHNjcmF0Y2hTaXplKTsKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9
IG1faml0LnZtKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKICAgICAgICAg
RW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHNjcmF0Y2hCdWZmZXIgPyBzdGF0aWNfY2FzdDxFbmNv
ZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgOiAwOwogICAgICAgICAK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSWR4ID0gMDsgb3BlcmFuZElkeCA8IG5vZGUt
Pm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZElkeCkgewpAQCAtMzY1Myw3ICszNjUzLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gbm9kZS0+c3RydWN0dXJlKCk7CiAgICAgICAgIHNpemVfdCBhbGxvY2F0
aW9uU2l6ZSA9IEpTT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFj
aXR5KCkpOwotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvclB0ciA9ICZtX2ppdC5n
bG9iYWxEYXRhKCktPmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3IoYWxs
b2NhdGlvblNpemUpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvclB0ciA9ICZt
X2ppdC52bSgpLT5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKGFsbG9j
YXRpb25TaXplKTsKIAogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9y
UHRyKSwgYWxsb2NhdG9yR1BSKTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0
R1BSLCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0
cigwKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwpAQCAtNDI5MCw3ICs0MjkwLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgbm90U3RyaW5nID0gbV9qaXQuYnJhbmNoOChKSVRDb21waWxlcjo6Tm90RXF1YWws
IEpJVENvbXBpbGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpOwogICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpCiAgICAgICAgICAgICAgICAgREZHX1RZ
UEVfQ0hFQ0soSlNWYWx1ZVNvdXJjZSh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjU3Ry
aW5nLCBub3RTdHJpbmcpOwotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFs
bFN0cmluZ3Muc3RyaW5nU3RyaW5nKCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgZG9uZUp1
bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSAhPSBTdHJpbmdVc2UpIHsKICAgICAgICAgICAgICAgICBub3RTdHJpbmcubGlu
aygmbV9qaXQpOwpAQCAtNDMwNSwyMiArNDMwNSwyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkg
PT0gVW50eXBlZFVzZSkgewogICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKICAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdE51bWJlciA9IG1faml0LmJyYW5jaFRlc3Q2
NChKSVRDb21waWxlcjo6WmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3Rlcik7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFs
RGF0YSgpLT5zbWFsbFN0cmluZ3MubnVtYmVyU3RyaW5nKCkpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy5u
dW1iZXJTdHJpbmcoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5k
KG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBub3ROdW1iZXIubGluaygmbV9qaXQpOwogCiAg
ICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RVbmRlZmluZWQgPSBtX2ppdC5icmFuY2g2
NChKSVRDb21waWxlcjo6Tm90RXF1YWwsIHZhbHVlR1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZElt
bTY0KFZhbHVlVW5kZWZpbmVkKSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zbWFsbFN0cmluZ3MudW5kZWZpbmVkU3RyaW5nKCkpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LnZt
KCktPnNtYWxsU3RyaW5ncy51bmRlZmluZWRTdHJpbmcoKSksIHJlc3VsdEdQUik7CiAgICAgICAg
ICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBub3RVbmRl
ZmluZWQubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RO
dWxsID0gbV9qaXQuYnJhbmNoNjQoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCB2YWx1ZUdQUiwgSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKTsKLSAgICAgICAgICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnNtYWxsU3RyaW5ncy5vYmplY3RT
dHJpbmcoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1Q
dHIobV9qaXQudm0oKS0+c21hbGxTdHJpbmdzLm9iamVjdFN0cmluZygpKSwgcmVzdWx0R1BSKTsK
ICAgICAgICAgICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgICAg
IG5vdE51bGwubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICAvLyBPbmx5IGJvb2xlYW4gbGVm
dAotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+c21hbGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJpbmdzLmJvb2xl
YW5TdHJpbmcoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIH0KICAgICAgICAgZG9uZUp1bXBzLmxp
bmsoJm1faml0KTsKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJl
dmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDYsMjMgKzY0NiwyMyBAQCBjb25zdCBUeXBl
ZEFycmF5RGVzY3JpcHRvciogU3BlY3VsYXRpdmVKCiB7CiAgICAgc3dpdGNoIChhcnJheU1vZGUu
dHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICByZXR1cm4gJm1f
aml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpOworICAgICAgICByZXR1cm4g
Jm1faml0LnZtKCktPmludDhBcnJheURlc2NyaXB0b3IoKTsKICAgICBjYXNlIEFycmF5OjpJbnQx
NkFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0Lmdsb2JhbERhdGEoKS0+aW50MTZBcnJheURl
c2NyaXB0b3IoKTsKKyAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT5pbnQxNkFycmF5RGVzY3Jp
cHRvcigpOwogICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9q
aXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpOworICAgICAgICByZXR1cm4g
Jm1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCk7CiAgICAgY2FzZSBBcnJheTo6VWlu
dDhBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlE
ZXNjcmlwdG9yKCk7CisgICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+dWludDhBcnJheURlc2Ny
aXB0b3IoKTsKICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAgICAgICAgcmV0
dXJuICZtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpOwor
ICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigp
OwogICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0Lmds
b2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCk7CisgICAgICAgIHJldHVybiAmbV9q
aXQudm0oKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCk7CiAgICAgY2FzZSBBcnJheTo6VWludDMy
QXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURl
c2NyaXB0b3IoKTsKKyAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT51aW50MzJBcnJheURlc2Ny
aXB0b3IoKTsKICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgIHJldHVybiAm
bV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCk7CisgICAgICAgIHJl
dHVybiAmbV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpOwogICAgIGNhc2UgQXJy
YXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC5nbG9iYWxEYXRhKCktPmZs
b2F0NjRBcnJheURlc2NyaXB0b3IoKTsKKyAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT5mbG9h
dDY0QXJyYXlEZXNjcmlwdG9yKCk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQpAQCAtMTQyMCw3ICsxNDIwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBl
ZXBIb2xlT2JqZQogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkubV90eXBlICYgflNwZWNPYmplY3QpIHsKICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCkBAIC0xNDI4LDcgKzE0MjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUGVlcEhvbGVPYmplCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CkBAIC0xNDQxLDcgKzE0NDEsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgICAgICAgICAgICAgbV9q
aXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAotICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAg
ICAgICB9CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6
dW5ib3hlZENlbGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksCiAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hUZXN0OCgKQEAgLTE0NTYsNyArMTQ1Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQZWVwSG9sZU9iamUKICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZUdQUiwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkp
OworICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIH0KICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIp
LCBub2RlLT5jaGlsZDIoKSwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KApAQCAtMjA4
Miw3ICsyMDgyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdAog
CiAgICAgR1BSVGVtcG9yYXJ5IHNtYWxsU3RyaW5ncyh0aGlzKTsKICAgICBHUFJSZWcgc21hbGxT
dHJpbmdzUmVnID0gc21hbGxTdHJpbmdzLmdwcigpOwotICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zbWFsbFN0cmluZ3Muc2lu
Z2xlQ2hhcmFjdGVyU3RyaW5ncygpKSwgc21hbGxTdHJpbmdzUmVnKTsKKyAgICBtX2ppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy5z
aW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpLCBzbWFsbFN0cmluZ3NSZWcpOwogICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzbWFsbFN0cmluZ3NSZWcsIHNjcmF0Y2hS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgMCksIHNjcmF0Y2hSZWcpOwogICAgIHNwZWN1
bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaFRl
c3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaFJlZykpOwogICAgIGNlbGxSZXN1bHQo
c2NyYXRjaFJlZywgbV9jdXJyZW50Tm9kZSk7CkBAIC0yMDk5LDcgKzIwOTksNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRnJvbUNoYXJDb2RlCiAKICAgICBKSVRDb21waWxlcjo6SnVt
cExpc3Qgc2xvd0Nhc2VzOwogICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIFRydXN0ZWRJbW0zMigweGZm
KSkpOwotICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKSwgc21h
bGxTdHJpbmdzUmVnKTsKKyAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpLCBz
bWFsbFN0cmluZ3NSZWcpOwogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzbWFsbFN0cmluZ3NSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQ
dHIsIDApLCBzY3JhdGNoUmVnKTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNo
VGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoUmVnKSk7CkBAIC0zMTQwLDkgKzMx
NDAsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWFrZVJvcGUoTm9kCiAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBzbG93UGF0aDsKLSAgICBNYXJrZWRBbGxvY2F0b3ImIG1hcmtlZEFsbG9jYXRvciA9
IG1faml0Lmdsb2JhbERhdGEoKS0+aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRoSW1tb3J0YWxT
dHJ1Y3R1cmVEZXN0cnVjdG9yKHNpemVvZihKU1JvcGVTdHJpbmcpKTsKKyAgICBNYXJrZWRBbGxv
Y2F0b3ImIG1hcmtlZEFsbG9jYXRvciA9IG1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9yT2Jq
ZWN0V2l0aEltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3RvcihzaXplb2YoSlNSb3BlU3RyaW5nKSk7
CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKCZtYXJrZWRBbGxvY2F0b3IpLCBhbGxvY2F0
b3JHUFIpOwotICAgIGVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIGFsbG9jYXRvckdQUiwg
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSks
IHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKKyAgICBlbWl0QWxsb2NhdGVKU0NlbGwocmVzdWx0R1BS
LCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogICAgICAgICAKICAgICBtX2ppdC5zdG9y
ZVB0cihUcnVzdGVkSW1tUHRyKDApLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpT
U3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtT3BHUFJzOyArK2kpCkBAIC0zNjg0LDcgKzM2ODQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlU3RyaW5nRXF1YWxpCiAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxs
KGxlZnRHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY1N0cmluZywgbV9qaXQuYnJhbmNoUHRyKAog
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAogICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MobGVmdEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAg
ICAKICAgICAvLyBJdCdzIHNhZmUgdG8gYnJhbmNoIGFyb3VuZCB0aGUgdHlwZSBjaGVjayBiZWxv
dywgc2luY2UgcHJvdmluZyB0aGF0IHRoZSB2YWx1ZXMgYXJlCiAgICAgLy8gZXF1YWwgZG9lcyBp
bmRlZWQgcHJvdmUgdGhhdCB0aGUgcmlnaHQgdmFsdWUgaXMgYSBzdHJpbmcuCkBAIC0zNjk0LDcg
KzM2OTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaW5nRXF1YWxpCiAgICAg
ICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKHJpZ2h0R1BSKSwgbm9kZS0+Y2hpbGQyKCks
IFNwZWNTdHJpbmcsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJpZ2h0R1BS
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgp
KSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0o
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogCiAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGxlZnRHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwgbGVu
Z3RoR1BSKTsKICAgICAKQEAgLTQxMjEsNyArNDEyMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVUb1N0cmluZ09uQ2UKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoSklU
Q29tcGlsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVz
dWx0R1BSKTsKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNTdHJpbmcgPSBtX2ppdC5icmFu
Y2hQdHIoCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6RXF1YWwsIHJlc3VsdEdQUiwgVHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOworICAg
ICAgICAgICAgSklUQ29tcGlsZXI6OkVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIobV9q
aXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CiAgICAgICAgIAogICAgICAgICBzcGVj
dWxhdGVTdHJpbmdPYmplY3RGb3JTdHJ1Y3R1cmUobm9kZS0+Y2hpbGQxKCksIHJlc3VsdEdQUik7
CiAgICAgICAgIApAQCAtNDE1MSw3ICs0MTUxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVRvU3RyaW5nT25DZQogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbmVlZENhbGwg
PSBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFs
LAogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOworICAgICAgICAgICAgICAgIFRy
dXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CiAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGRvbmUgPSBt
X2ppdC5qdW1wKCk7CiAgICAgICAgICAgICBuZWVkQ2FsbC5saW5rKCZtX2ppdCk7CkBAIC00MjY0
LDcgKzQyNjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPYmplY3QoRWRnCiAg
ICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGdwciksIGVkZ2UsIFNwZWNPYmplY3Qs
IG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhncHIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPYmplY3RPck90
aGVyKEVkZ2UgZWRnZSkKQEAgLTQyODMsNyArNDI4Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OnNwZWN1bGF0ZU9iamVjdE9yT3QKICAgICAgICAgSlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgKH5T
cGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
Z3ByLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIG5vdENlbGwubGluaygmbV9qaXQpOwogICAgIGlm
IChuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpIHsKQEAgLTQzMDYs
NyArNDMwNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9iamVjdE9yT3QKICAg
ICAgICAgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgZWRnZSwgKH5TcGVjQ2VsbCkg
fCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6RXF1YWwsIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocGF5bG9hZEdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52
bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
ZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKICAgICBpZiAo
bmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKSB7CkBAIC00MzM0LDcg
KzQzMzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVTdHJpbmcoRWRnCiAgICAg
ICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGdwciksIGVkZ2UsIFNwZWNTdHJpbmcsIG1f
aml0LmJyYW5jaFB0cigKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCiAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhncHIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVTdHJpbmdPYmpl
Y3QoRWRnZSBlZGdlLCBHUFJSZWcgZ3ByKQpAQCAtNDM3Miw3ICs0MzcyLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nT3JTdAogICAgIG1faml0LmxvYWRQdHIoSklUQ29t
cGlsZXI6OkFkZHJlc3MoZ3ByLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJl
R1BSKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBpc1N0cmluZyA9IG1faml0LmJyYW5j
aFB0cigKLSAgICAgICAgSklUQ29tcGlsZXI6OkVxdWFsLCBzdHJ1Y3R1cmVHUFIsIFRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAg
ICAgSklUQ29tcGlsZXI6OkVxdWFsLCBzdHJ1Y3R1cmVHUFIsIFRydXN0ZWRJbW1QdHIobV9qaXQu
dm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CiAgICAgCiAgICAgc3BlY3VsYXRlU3RyaW5n
T2JqZWN0Rm9yU3RydWN0dXJlKGVkZ2UsIHN0cnVjdHVyZUdQUik7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAx
NDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE3NjEsNyArMTc2MSw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8g
YW55d2F5IHNpbmNlIGl0IHdhcyBub3QgYmVpbmcgdXBkYXRlZCBieSBKSVQnZWQgY29kZSBieSBk
ZXNpZ24uCiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZih2b2lkKikg
LyA0OyBpKyspCi0gICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMigweGJhZGJl
ZWYpLCByZWludGVycHJldF9jYXN0PGNoYXIqPigmbV9qaXQuZ2xvYmFsRGF0YSgpLT50b3BDYWxs
RnJhbWUpICsgaSAqIDQpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIo
MHhiYWRiZWVmKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJm1faml0LnZtKCktPnRvcENhbGxG
cmFtZSkgKyBpICogNCk7CiAgICAgfQogI2Vsc2UKICAgICB2b2lkIHByZXBhcmVGb3JFeHRlcm5h
bENhbGwoKSB7IH0KQEAgLTIxNTQsNyArMjE1NCw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBTaXplVHlwZT4KICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBlbWl0QWxsb2NhdGVC
YXNpY1N0b3JhZ2UoU2l6ZVR5cGUgc2l6ZSwgR1BSUmVnIHJlc3VsdEdQUikKICAgICB7Ci0gICAg
ICAgIENvcGllZEFsbG9jYXRvciogY29waWVkQWxsb2NhdG9yID0gJm1faml0Lmdsb2JhbERhdGEo
KS0+aGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7CisgICAgICAgIENvcGllZEFsbG9jYXRvciogY29w
aWVkQWxsb2NhdG9yID0gJm1faml0LnZtKCktPmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOwogICAg
ICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRS
ZW1haW5pbmcsIHJlc3VsdEdQUik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQ
YXRoID0gbV9qaXQuYnJhbmNoU3ViUHRyKEpJVENvbXBpbGVyOjpTaWduZWQsIHNpemUsIHJlc3Vs
dEdQUik7CkBAIC0yMjAxLDExICsyMjAxLDExIEBAIHB1YmxpYzoKICAgICAgICAgTWFya2VkQWxs
b2NhdG9yKiBhbGxvY2F0b3IgPSAwOwogICAgICAgICBzaXplX3Qgc2l6ZSA9IENsYXNzVHlwZTo6
YWxsb2NhdGlvblNpemUoMCk7CiAgICAgICAgIGlmIChDbGFzc1R5cGU6Om5lZWRzRGVzdHJ1Y3Rp
b24gJiYgQ2xhc3NUeXBlOjpoYXNJbW1vcnRhbFN0cnVjdHVyZSkKLSAgICAgICAgICAgIGFsbG9j
YXRvciA9ICZtX2ppdC5nbG9iYWxEYXRhKCktPmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aElt
bW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3RvcihzaXplKTsKKyAgICAgICAgICAgIGFsbG9jYXRvciA9
ICZtX2ppdC52bSgpLT5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhJbW1vcnRhbFN0cnVjdHVy
ZURlc3RydWN0b3Ioc2l6ZSk7CiAgICAgICAgIGVsc2UgaWYgKENsYXNzVHlwZTo6bmVlZHNEZXN0
cnVjdGlvbikKLSAgICAgICAgICAgIGFsbG9jYXRvciA9ICZtX2ppdC5nbG9iYWxEYXRhKCktPmhl
YXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aE5vcm1hbERlc3RydWN0b3Ioc2l6ZSk7CisgICAgICAg
ICAgICBhbGxvY2F0b3IgPSAmbV9qaXQudm0oKS0+aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRo
Tm9ybWFsRGVzdHJ1Y3RvcihzaXplKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYWxsb2Nh
dG9yID0gJm1faml0Lmdsb2JhbERhdGEoKS0+aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0
RGVzdHJ1Y3RvcihzaXplKTsKKyAgICAgICAgICAgIGFsbG9jYXRvciA9ICZtX2ppdC52bSgpLT5o
ZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKHNpemUpOwogICAgICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUjEpOwogICAgICAg
ICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIxLCBzdHJ1Y3R1cmUs
IHN0b3JhZ2UsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwx
MiArMzYsMTIgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25U
aHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXIgaml0OwogICAgIAog
ICAgIHNpemVfdCBzY3JhdGNoU2l6ZSA9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiAoR1BSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyk7Ci0gICAg
U2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IGdsb2JhbERhdGEtPnNjcmF0Y2hCdWZmZXJG
b3JTaXplKHNjcmF0Y2hTaXplKTsKKyAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0g
dm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKICAgICBFbmNvZGVkSlNWYWx1
ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5k
YXRhQnVmZmVyKCkpOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CkBAIC04NCw5ICs4NCw5IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblQKICNlbmRpZgogICAgIH0KICAgICAKLSAgICBq
aXQuanVtcChNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZnbG9iYWxEYXRhLT5vc3JF
eGl0SnVtcERlc3RpbmF0aW9uKSk7CisgICAgaml0Lmp1bXAoTWFjcm9Bc3NlbWJsZXI6OkFic29s
dXRlQWRkcmVzcygmdm0tPm9zckV4aXRKdW1wRGVzdGluYXRpb24pKTsKICAgICAKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwog
ICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoZnVuY3Rpb25DYWxsLCBjb21waWxlT1NSRXhpdCk7
CiAgICAgCkBAIC0xMDgsOSArMTA4LDkgQEAgaW5saW5lIHZvaWQgZW1pdFBvaW50ZXJWYWxpZGF0
aW9uKENDYWxsSAogI2VuZGlmCiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2Vw
dGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVy
YXRvcihWTSogdm0pCiB7Ci0gICAgQ0NhbGxIZWxwZXJzIGppdChnbG9iYWxEYXRhKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0KHZtKTsKICAgICAKICAgICAvLyBXZSB3aWxsIGp1bXAgdG8gaGVyZSBp
ZiB0aGUgSklUIGNvZGUgdGhpbmtzIGl0J3MgbWFraW5nIGEgY2FsbCwgYnV0IHRoZQogICAgIC8v
IGxpbmtpbmcgaGVscGVyIChDKysgY29kZSkgZGVjaWRlZCB0byB0aHJvdyBhbiBleGNlcHRpb24g
aW5zdGVhZC4gV2Ugd2lsbApAQCAtMTM3LDEyICsxMzcsMTIgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHRocm93RXhjZXB0aW9uRnJvbQogICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQ
UkluZm86OnJldHVyblZhbHVlR1BSMik7CiAgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIyKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAm
aml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAm
aml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCAoIkRGRyB0aHJvdyBleGNlcHRpb24gZnJvbSBjYWxsIHNsb3cgcGF0aCB0aHVuayIpKTsK
IH0KIAogc3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoCi0gICAgQ0NhbGxIZWxwZXJzJiBqaXQsIEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUF9ERkdPcGVyYXRpb25fRSBzbG93UGF0aEZ1bmN0aW9u
KQorICAgIENDYWxsSGVscGVycyYgaml0LCBWTSogdm0sIFBfREZHT3BlcmF0aW9uX0Ugc2xvd1Bh
dGhGdW5jdGlvbikKIHsKICAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQ
UkluZm86Om5vbkFyZ0dQUjIpOwogICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUklu
Zm86Om5vbkFyZ0dQUjIpOwpAQCAtMTUxLDcgKzE1MSw3IEBAIHN0YXRpYyB2b2lkIHNsb3dQYXRo
Rm9yKAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCiAgICAgICAgICAgICBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwKICAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpSZXR1cm5QQykpOwotICAgIGppdC5zdG9yZVB0
cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJmdsb2JhbERhdGEtPnRvcENhbGxGcmFtZSk7
CisgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENh
bGxGcmFtZSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBqaXQucG9rZTY0KEdQUkluZm86Om5v
blByZXNlcnZlZE5vblJldHVybkdQUiwgSklUU1RBQ0tGUkFNRV9BUkdTX0lOREVYKTsKICNlbHNl
CkBAIC0xODMsNyArMTgzLDcgQEAgc3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoCiB9CiAKIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0ZvclRodW5rR2VuZXJhdG9yKAotICAgIEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgIFZN
KiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIC8vIFRoZSByZXR1cm4g
YWRkcmVzcyBpcyBvbiB0aGUgc3RhY2sgb3IgaW4gdGhlIGxpbmsgcmVnaXN0ZXIuIFdlIHdpbGwg
aGVuY2UKICAgICAvLyBzYXZlIHRoZSByZXR1cm4gYWRkcmVzcyB0byB0aGUgY2FsbCBmcmFtZSB3
aGlsZSB3ZSBtYWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwKQEAgLTE5Myw0NiArMTkzLDQ2IEBAIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0ZvclRodW4KICAgICAvLyBhbmQgYWxsIG90
aGVyIHJlZ2lzdGVycyB0byBiZSBhdmFpbGFibGUgZm9yIHVzZS4gV2UgdXNlIEpJVFN0YWNrRnJh
bWU6OmFyZ3MKICAgICAvLyB0byBzYXZlIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhY3Jvc3MgY2Fs
bHMuCiAgICAgCi0gICAgQ0NhbGxIZWxwZXJzIGppdChnbG9iYWxEYXRhKTsKKyAgICBDQ2FsbEhl
bHBlcnMgaml0KHZtKTsKICAgICAKLSAgICBzbG93UGF0aEZvcihqaXQsIGdsb2JhbERhdGEsIGtp
bmQgPT0gQ29kZUZvckNhbGwgPyBvcGVyYXRpb25MaW5rQ2FsbCA6IG9wZXJhdGlvbkxpbmtDb25z
dHJ1Y3QpOworICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIGtpbmQgPT0gQ29kZUZvckNhbGwgPyBv
cGVyYXRpb25MaW5rQ2FsbCA6IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QpOwogICAgIAotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIEdMT0JBTF9USFVOS19JRCk7
CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7
CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCiAgICAgICAgIHBhdGNoQnVmZmVyLAogICAgICAg
ICAoIkRGRyBsaW5rICVzIHNsb3cgcGF0aCB0aHVuayIsIGtpbmQgPT0gQ29kZUZvckNhbGwgPyAi
Y2FsbCIgOiAiY29uc3RydWN0IikpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nh
bGxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIGxp
bmtGb3JUaHVua0dlbmVyYXRvcihnbG9iYWxEYXRhLCBDb2RlRm9yQ2FsbCk7CisgICAgcmV0dXJu
IGxpbmtGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNhbGwpOwogfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgbGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0
b3IoVk0qIHZtKQogewotICAgIHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3IoZ2xvYmFsRGF0
YSwgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgcmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRvcih2
bSwgQ29kZUZvckNvbnN0cnVjdCk7CiB9CiAKIC8vIEZvciBjbG9zdXJlIG9wdGltaXphdGlvbnMs
IHdlIG9ubHkgaW5jbHVkZSBjYWxscywgc2luY2UgaWYgeW91J3JlIHVzaW5nIGNsb3N1cmVzIGZv
cgogLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiB0aGVuIHlvdSdyZSBnb2luZyB0byBsb3NlIGJpZyB0
aW1lIGFueXdheS4KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaHVua0dl
bmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
bGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIENDYWxsSGVscGVy
cyBqaXQoZ2xvYmFsRGF0YSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CiAgICAgCi0gICAg
c2xvd1BhdGhGb3Ioaml0LCBnbG9iYWxEYXRhLCBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGwpOwor
ICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbCk7CiAgICAg
Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgR0xPQkFMX1RI
VU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RI
VU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJERkcgbGlu
ayBjbG9zdXJlIGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOwogfQogCiBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcigKLSAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICBWTSogdm0sIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3Mg
aXMgb24gdGhlIHN0YWNrLCBvciBpbiB0aGUgbGluayByZWdpc3Rlci4gV2Ugd2lsbCBoZW5jZQog
ICAgIC8vIGp1bXAgdG8gdGhlIGNhbGxlZSwgb3Igc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8g
dGhlIGNhbGwgZnJhbWUgd2hpbGUgd2UKICAgICAvLyBtYWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwg
dG8gdGhlIGFwcHJvcHJpYXRlIERGRyBvcGVyYXRpb24uCiAKLSAgICBDQ2FsbEhlbHBlcnMgaml0
KGdsb2JhbERhdGEpOworICAgIENDYWxsSGVscGVycyBqaXQodm0pOwogICAgIAogICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2U7CiAKQEAgLTMwNywyMiArMzA3LDIyIEBAIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbEZvclQKICAgICAKICAgICAvLyBIZXJlIHdl
IGRvbid0IGtub3cgYW55dGhpbmcsIHNvIHJldmVydCB0byB0aGUgZnVsbCBzbG93IHBhdGguCiAg
ICAgCi0gICAgc2xvd1BhdGhGb3Ioaml0LCBnbG9iYWxEYXRhLCBraW5kID09IENvZGVGb3JDYWxs
ID8gb3BlcmF0aW9uVmlydHVhbENhbGwgOiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KTsKKyAg
ICBzbG93UGF0aEZvcihqaXQsIHZtLCBraW5kID09IENvZGVGb3JDYWxsID8gb3BlcmF0aW9uVmly
dHVhbENhbGwgOiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KTsKICAgICAKLSAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwKICAgICAgICAgKCJE
RkcgdmlydHVhbCAlcyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxsID8gImNh
bGwiIDogImNvbnN0cnVjdCIpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxD
YWxsVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVy
biB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3IoZ2xvYmFsRGF0YSwgQ29kZUZvckNhbGwpOworICAg
IHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDYWxsKTsKIH0KIAot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENvbnN0
cnVjdFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gdmlydHVhbEZvclRodW5r
R2VuZXJhdG9yKGdsb2JhbERhdGEsIENvZGVGb3JDb25zdHJ1Y3QpOworICAgIHJldHVybiB2aXJ0
dWFsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1Y3QpOwogfQogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Ro
dW5rcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtz
LmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1
bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDIxICszNCwyMSBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBERkcgewog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihK
U0dsb2JhbERhdGEqKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRo
dW5rR2VuZXJhdG9yKFZNKik7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlv
bkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNKik7CiAK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihK
U0dsb2JhbERhdGEqKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NvbnN0cnVjdFRodW5rR2VuZXJh
dG9yKFZNKik7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaHVua0dl
bmVyYXRvcihKU0dsb2JhbERhdGEqKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3Vy
ZUNhbGxUaHVua0dlbmVyYXRvcihWTSopOwogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVh
bENhbGxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiB2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CitNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgdmlydHVhbENhbGxUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSopOwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0Jsb2NrQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQmxvY2tBbGxvY2F0b3IuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQmxvY2tBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAs
NyBAQCBjbGFzcyBCbG9ja0FsbG9jYXRvcjsKIGNsYXNzIENvcGllZEJsb2NrOwogY2xhc3MgQ29w
eVdvcmtMaXN0U2VnbWVudDsKIGNsYXNzIEhhbmRsZUJsb2NrOwotY2xhc3MgSlNHbG9iYWxEYXRh
OworY2xhc3MgVk07CiBjbGFzcyBNYXJrU3RhY2tTZWdtZW50OwogY2xhc3MgTWFya2VkQmxvY2s7
CiBjbGFzcyBXZWFrQmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3Bp
ZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkU3BhY2UuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3BpZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgQ2hl
Y2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRyeUFsbG9jYXRlUwogICAgIGlmIChpc092ZXJzaXpl
KGJ5dGVzKSkKICAgICAgICAgcmV0dXJuIHRyeUFsbG9jYXRlT3ZlcnNpemUoYnl0ZXMsIG91dFB0
cik7CiAgICAgCi0gICAgQVNTRVJUKG1faGVhcC0+Z2xvYmFsRGF0YSgpLT5hcGlMb2NrKCkuY3Vy
cmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CisgICAgQVNTRVJUKG1faGVhcC0+dm0oKS0+YXBp
TG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgIG1faGVhcC0+ZGlkQWxs
b2NhdGUobV9hbGxvY2F0b3IuY3VycmVudENhcGFjaXR5KCkpOwogCiAgICAgYWxsb2NhdGVCbG9j
aygpOwpAQCAtMTAzLDcgKzEwMyw3IEBAIENoZWNrZWRCb29sZWFuIENvcGllZFNwYWNlOjp0cnlS
ZWFsbG9jYXQKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgdm9pZCogb2xkUHRyID0g
KnB0cjsKLSAgICBBU1NFUlQoIW1faGVhcC0+Z2xvYmFsRGF0YSgpLT5pc0luaXRpYWxpemluZ09i
amVjdCgpKTsKKyAgICBBU1NFUlQoIW1faGVhcC0+dm0oKS0+aXNJbml0aWFsaXppbmdPYmplY3Qo
KSk7CiAgICAgCiAgICAgaWYgKENvcGllZFNwYWNlOjpibG9ja0ZvcihvbGRQdHIpLT5pc092ZXJz
aXplKCkgfHwgaXNPdmVyc2l6ZShuZXdTaXplKSkKICAgICAgICAgcmV0dXJuIHRyeVJlYWxsb2Nh
dGVPdmVyc2l6ZShwdHIsIG9sZFNpemUsIG5ld1NpemUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDE0ODY1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKICNp
bmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSGVhcEJsb2NrLmgiCi0jaW5jbHVkZSAiSlNHbG9i
YWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEJvb2xlYW4u
aD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xNTAsNyArMTUwLDcgQEAgaW5saW5lIHZvaWQgQ29w
aWVkU3BhY2U6OmFsbG9jYXRlQmxvY2soKQogCiBpbmxpbmUgQ2hlY2tlZEJvb2xlYW4gQ29waWVk
U3BhY2U6OnRyeUFsbG9jYXRlKHNpemVfdCBieXRlcywgdm9pZCoqIG91dFB0cikKIHsKLSAgICBB
U1NFUlQoIW1faGVhcC0+Z2xvYmFsRGF0YSgpLT5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKKyAg
ICBBU1NFUlQoIW1faGVhcC0+dm0oKS0+aXNJbml0aWFsaXppbmdPYmplY3QoKSk7CiAKICAgICBp
ZiAoIW1fYWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5dGVzLCBvdXRQdHIpKQogICAgICAgICByZXR1
cm4gdHJ5QWxsb2NhdGVTbG93Q2FzZShieXRlcywgb3V0UHRyKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmNwcAkocmV2aXNpb24g
MTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkNvcHlWaXNp
dG9yLmgiCiAjaW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiR0NUaHJl
YWQuaCIKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1
ZGUgIk1hcmtTdGFjay5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiU2xv
dFZpc2l0b3JJbmxpbmVzLmgiCkBAIC01MiwxMSArNTIsMTEgQEAgc2l6ZV90IEdDVGhyZWFkU2hh
cmVkRGF0YTo6Y2hpbGRWaXNpdENvdQogfQogI2VuZGlmCiAKLUdDVGhyZWFkU2hhcmVkRGF0YTo6
R0NUaHJlYWRTaGFyZWREYXRhKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKLSAgICA6IG1fZ2xv
YmFsRGF0YShnbG9iYWxEYXRhKQotICAgICwgbV9jb3BpZWRTcGFjZSgmZ2xvYmFsRGF0YS0+aGVh
cC5tX3N0b3JhZ2VTcGFjZSkKK0dDVGhyZWFkU2hhcmVkRGF0YTo6R0NUaHJlYWRTaGFyZWREYXRh
KFZNKiB2bSkKKyAgICA6IG1fdm0odm0pCisgICAgLCBtX2NvcGllZFNwYWNlKCZ2bS0+aGVhcC5t
X3N0b3JhZ2VTcGFjZSkKICAgICAsIG1fc2hvdWxkSGFzaENvbnMoZmFsc2UpCi0gICAgLCBtX3No
YXJlZE1hcmtTdGFjayhnbG9iYWxEYXRhLT5oZWFwLmJsb2NrQWxsb2NhdG9yKCkpCisgICAgLCBt
X3NoYXJlZE1hcmtTdGFjayh2bS0+aGVhcC5ibG9ja0FsbG9jYXRvcigpKQogICAgICwgbV9udW1i
ZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycygwKQogICAgICwgbV9wYXJhbGxlbE1hcmtlcnNTaG91
bGRFeGl0KGZhbHNlKQogICAgICwgbV9jb3B5SW5kZXgoMCkKQEAgLTExNiw3ICsxMTYsNyBAQCB2
b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6cmVzZXQoKQogICAgIG1fd2Vha1JlZmVyZW5jZUhhcnZl
c3RlcnMucmVtb3ZlQWxsKCk7CiAKICAgICBpZiAobV9zaG91bGRIYXNoQ29ucykgewotICAgICAg
ICBtX2dsb2JhbERhdGEtPnJlc2V0TmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zKCk7CisgICAg
ICAgIG1fdm0tPnJlc2V0TmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zKCk7CiAgICAgICAgIG1f
c2hvdWxkSGFzaENvbnMgPSBmYWxzZTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaAkocmV2aXNpb24gMTQ4NjU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBHQ1Ro
cmVhZDsKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwogY2xhc3MgQ29waWVkU3BhY2U7
CiBjbGFzcyBDb3B5VmlzaXRvcjsKIApAQCAtNTIsNyArNTIsNyBAQCBlbnVtIEdDUGhhc2Ugewog
CiBjbGFzcyBHQ1RocmVhZFNoYXJlZERhdGEgewogcHVibGljOgotICAgIEdDVGhyZWFkU2hhcmVk
RGF0YShKU0dsb2JhbERhdGEqKTsKKyAgICBHQ1RocmVhZFNoYXJlZERhdGEoVk0qKTsKICAgICB+
R0NUaHJlYWRTaGFyZWREYXRhKCk7CiAgICAgCiAgICAgdm9pZCByZXNldCgpOwpAQCAtNzcsNyAr
NzcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RhcnROZXh0UGhhc2UoR0NQaGFzZSk7CiAgICAg
dm9pZCBlbmRDdXJyZW50UGhhc2UoKTsKIAotICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRh
OworICAgIFZNKiBtX3ZtOwogICAgIENvcGllZFNwYWNlKiBtX2NvcGllZFNwYWNlOwogICAgIAog
ICAgIGJvb2wgbV9zaG91bGRIYXNoQ29uczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hhbmRsZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGFuZGxlU2V0LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotSGFuZGxlU2V0OjpIYW5kbGVTZXQoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhKQotICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCitIYW5kbGVTZXQ6Okhh
bmRsZVNldChWTSogdm0pCisgICAgOiBtX3ZtKHZtKQogICAgICwgbV9uZXh0VG9GaW5hbGl6ZSgw
KQogewogICAgIGdyb3coKTsKQEAgLTQ1LDEyICs0NSwxMiBAQCBIYW5kbGVTZXQ6OkhhbmRsZVNl
dChKU0dsb2JhbERhdGEqIGdsb2JhCiBIYW5kbGVTZXQ6On5IYW5kbGVTZXQoKQogewogICAgIHdo
aWxlICghbV9ibG9ja0xpc3QuaXNFbXB0eSgpKQotICAgICAgICBtX2dsb2JhbERhdGEtPmhlYXAu
YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlKEhhbmRsZUJsb2NrOjpkZXN0cm95KG1fYmxvY2tM
aXN0LnJlbW92ZUhlYWQoKSkpOworICAgICAgICBtX3ZtLT5oZWFwLmJsb2NrQWxsb2NhdG9yKCku
ZGVhbGxvY2F0ZShIYW5kbGVCbG9jazo6ZGVzdHJveShtX2Jsb2NrTGlzdC5yZW1vdmVIZWFkKCkp
KTsKIH0KIAogdm9pZCBIYW5kbGVTZXQ6Omdyb3coKQogewotICAgIEhhbmRsZUJsb2NrKiBuZXdC
bG9jayA9IEhhbmRsZUJsb2NrOjpjcmVhdGUobV9nbG9iYWxEYXRhLT5oZWFwLmJsb2NrQWxsb2Nh
dG9yKCkuYWxsb2NhdGU8SGFuZGxlQmxvY2s+KCksIHRoaXMpOworICAgIEhhbmRsZUJsb2NrKiBu
ZXdCbG9jayA9IEhhbmRsZUJsb2NrOjpjcmVhdGUobV92bS0+aGVhcC5ibG9ja0FsbG9jYXRvcigp
LmFsbG9jYXRlPEhhbmRsZUJsb2NrPigpLCB0aGlzKTsKICAgICBtX2Jsb2NrTGlzdC5hcHBlbmQo
bmV3QmxvY2spOwogCiAgICAgZm9yIChpbnQgaSA9IG5ld0Jsb2NrLT5ub2RlQ2FwYWNpdHkoKSAt
IDE7IGkgPj0gMDsgLS1pKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5k
bGVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVT
ZXQuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFu
ZGxlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiBjbGFzcyBIYW5kbGVCbG9jazsKIGNsYXNzIEhhbmRsZVNldDsKIGNsYXNzIEhlYXBSb290Vmlz
aXRvcjsKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwogY2xhc3MgSlNWYWx1ZTsKIGNs
YXNzIFNsb3RWaXNpdG9yOwogCkBAIC02NywxMCArNjcsMTAgQEAgY2xhc3MgSGFuZGxlU2V0IHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgSGFuZGxlU2V0KiBoZWFwRm9yKEhhbmRsZVNsb3QpOwogCi0g
ICAgSGFuZGxlU2V0KEpTR2xvYmFsRGF0YSopOworICAgIEhhbmRsZVNldChWTSopOwogICAgIH5I
YW5kbGVTZXQoKTsKIAotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpOworICAgIFZNKiB2
bSgpOwogCiAgICAgSGFuZGxlU2xvdCBhbGxvY2F0ZSgpOwogICAgIHZvaWQgZGVhbGxvY2F0ZShI
YW5kbGVTbG90KTsKQEAgLTk0LDcgKzk0LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzTGl2ZU5v
ZGUoTm9kZSopOwogI2VuZGlmCiAKLSAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKKyAg
ICBWTSogbV92bTsKICAgICBEb3VibHlMaW5rZWRMaXN0PEhhbmRsZUJsb2NrPiBtX2Jsb2NrTGlz
dDsKIAogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPiBtX3N0cm9uZ0xpc3Q7CkBAIC0xMDgs
OSArMTA4LDkgQEAgaW5saW5lIEhhbmRsZVNldCogSGFuZGxlU2V0OjpoZWFwRm9yKEhhbgogICAg
IHJldHVybiB0b05vZGUoaGFuZGxlKS0+aGFuZGxlU2V0KCk7CiB9CiAKLWlubGluZSBKU0dsb2Jh
bERhdGEqIEhhbmRsZVNldDo6Z2xvYmFsRGF0YSgpCitpbmxpbmUgVk0qIEhhbmRsZVNldDo6dm0o
KQogewotICAgIHJldHVybiBtX2dsb2JhbERhdGE7CisgICAgcmV0dXJuIG1fdm07CiB9CiAKIGlu
bGluZSBIYW5kbGVTbG90IEhhbmRsZVNldDo6dG9IYW5kbGUoSGFuZGxlU2V0OjpOb2RlKiBub2Rl
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE0ODY1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiSGVhcFN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJJ
bmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgotI2luY2x1ZGUg
IkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmpl
Y3QuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU09OT2JqZWN0LmgiCkBAIC0x
NjQsMTcgKzE2NCwxNyBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBwcm9wb3J0aW9uYWxIZWFwU2l6
CiAgICAgcmV0dXJuIDEuMjUgKiBoZWFwU2l6ZTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGlz
VmFsaWRTaGFyZWRJbnN0YW5jZVRocmVhZFN0YXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkK
K3N0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkU2hhcmVkSW5zdGFuY2VUaHJlYWRTdGF0ZShWTSog
dm0pCiB7Ci0gICAgcmV0dXJuIGdsb2JhbERhdGEtPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNI
b2xkaW5nTG9jaygpOworICAgIHJldHVybiB2bS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hv
bGRpbmdMb2NrKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkVGhyZWFkU3RhdGUo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRUaHJl
YWRTdGF0ZShWTSogdm0pCiB7Ci0gICAgaWYgKGdsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZSAh
PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpKQorICAgIGlmICh2bS0+
aWRlbnRpZmllclRhYmxlICE9IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxl
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChnbG9iYWxEYXRhLT5pc1NoYXJl
ZEluc3RhbmNlKCkgJiYgIWlzVmFsaWRTaGFyZWRJbnN0YW5jZVRocmVhZFN0YXRlKGdsb2JhbERh
dGEpKQorICAgIGlmICh2bS0+aXNTaGFyZWRJbnN0YW5jZSgpICYmICFpc1ZhbGlkU2hhcmVkSW5z
dGFuY2VUaHJlYWRTdGF0ZSh2bSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVy
biB0cnVlOwpAQCAtMjQxLDcgKzI0MSw3IEBAIGlubGluZSBQYXNzT3duUHRyPFR5cGVDb3VudFNl
dD4gUmVjb3JkVHkKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLUhlYXA6OkhlYXAoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBIZWFwVHlwZSBoZWFwVHlwZSkKK0hlYXA6OkhlYXAoVk0q
IHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICA6IG1faGVhcFR5cGUoaGVhcFR5cGUpCiAgICAg
LCBtX3JhbVNpemUocmFtU2l6ZSgpKQogICAgICwgbV9taW5CeXRlc1BlckN5Y2xlKG1pbkhlYXBT
aXplKG1faGVhcFR5cGUsIG1fcmFtU2l6ZSkpCkBAIC0yNTQsMTIgKzI1NCwxMiBAQCBIZWFwOjpI
ZWFwKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSGVhCiAgICAgLCBtX29iamVjdFNwYWNlKHRo
aXMpCiAgICAgLCBtX3N0b3JhZ2VTcGFjZSh0aGlzKQogICAgICwgbV9tYWNoaW5lVGhyZWFkcyh0
aGlzKQotICAgICwgbV9zaGFyZWREYXRhKGdsb2JhbERhdGEpCisgICAgLCBtX3NoYXJlZERhdGEo
dm0pCiAgICAgLCBtX3Nsb3RWaXNpdG9yKG1fc2hhcmVkRGF0YSkKICAgICAsIG1fY29weVZpc2l0
b3IobV9zaGFyZWREYXRhKQotICAgICwgbV9oYW5kbGVTZXQoZ2xvYmFsRGF0YSkKKyAgICAsIG1f
aGFuZGxlU2V0KHZtKQogICAgICwgbV9pc1NhZmVUb0NvbGxlY3QoZmFsc2UpCi0gICAgLCBtX2ds
b2JhbERhdGEoZ2xvYmFsRGF0YSkKKyAgICAsIG1fdm0odm0pCiAgICAgLCBtX2xhc3RHQ0xlbmd0
aCgwKQogICAgICwgbV9sYXN0Q29kZURpc2NhcmRUaW1lKFdURjo6Y3VycmVudFRpbWUoKSkKICAg
ICAsIG1fYWN0aXZpdHlDYWxsYmFjayhEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpjcmVhdGUo
dGhpcykpCkBAIC0yNzcsMTEgKzI3NywxMSBAQCBib29sIEhlYXA6OmlzUGFnZWRPdXQoZG91Ymxl
IGRlYWRsaW5lKQogICAgIHJldHVybiBtX29iamVjdFNwYWNlLmlzUGFnZWRPdXQoZGVhZGxpbmUp
IHx8IG1fc3RvcmFnZVNwYWNlLmlzUGFnZWRPdXQoZGVhZGxpbmUpOwogfQogCi0vLyBUaGUgSlNH
bG9iYWxEYXRhIGlzIGJlaW5nIGRlc3Ryb3llZCBhbmQgdGhlIGNvbGxlY3RvciB3aWxsIG5ldmVy
IHJ1biBhZ2Fpbi4KKy8vIFRoZSBWTSBpcyBiZWluZyBkZXN0cm95ZWQgYW5kIHRoZSBjb2xsZWN0
b3Igd2lsbCBuZXZlciBydW4gYWdhaW4uCiAvLyBSdW4gYWxsIHBlbmRpbmcgZmluYWxpemVycyBu
b3cgYmVjYXVzZSB3ZSB3b24ndCBnZXQgYW5vdGhlciBjaGFuY2UuCiB2b2lkIEhlYXA6Omxhc3RD
aGFuY2VUb0ZpbmFsaXplKCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghbV9nbG9iYWxEYXRhLT5k
eW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV92bS0+ZHluYW1pY0ds
b2JhbE9iamVjdCk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9vcGVyYXRpb25JblByb2dyZXNzID09
IE5vT3BlcmF0aW9uKTsKIAogICAgIG1fb2JqZWN0U3BhY2UubGFzdENoYW5jZVRvRmluYWxpemUo
KTsKQEAgLTMzMiw3ICszMzIsNyBAQCB2b2lkIEhlYXA6OmRpZEFiYW5kb24oc2l6ZV90IGJ5dGVz
KQogdm9pZCBIZWFwOjpwcm90ZWN0KEpTVmFsdWUgaykKIHsKICAgICBBU1NFUlQoayk7Ci0gICAg
QVNTRVJUKG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2Nr
KCkpOworICAgIEFTU0VSVChtX3ZtLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xv
Y2soKSk7CiAKICAgICBpZiAoIWsuaXNDZWxsKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTM0Myw3
ICszNDMsNyBAQCB2b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZSBrKQogYm9vbCBIZWFwOjp1bnBy
b3RlY3QoSlNWYWx1ZSBrKQogewogICAgIEFTU0VSVChrKTsKLSAgICBBU1NFUlQobV9nbG9iYWxE
YXRhLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CisgICAgQVNTRVJU
KG1fdm0tPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKIAogICAgIGlm
ICghay5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDAyLDcgKzQwMiw3IEBA
IHZvaWQgSGVhcDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemUKIAogaW5saW5lIEpTU3Rh
Y2smIEhlYXA6OnN0YWNrKCkKIHsKLSAgICByZXR1cm4gbV9nbG9iYWxEYXRhLT5pbnRlcnByZXRl
ci0+c3RhY2soKTsKKyAgICByZXR1cm4gbV92bS0+aW50ZXJwcmV0ZXItPnN0YWNrKCk7CiB9CiAK
IHZvaWQgSGVhcDo6Y2Fub25pY2FsaXplQ2VsbExpdmVuZXNzRGF0YSgpCkBAIC00MTIsNyArNDEy
LDcgQEAgdm9pZCBIZWFwOjpjYW5vbmljYWxpemVDZWxsTGl2ZW5lc3NEYXRhKAogCiB2b2lkIEhl
YXA6OmdldENvbnNlcnZhdGl2ZVJlZ2lzdGVyUm9vdHMoSGFzaFNldDxKU0NlbGwqPiYgcm9vdHMp
CiB7Ci0gICAgQVNTRVJUKGlzVmFsaWRUaHJlYWRTdGF0ZShtX2dsb2JhbERhdGEpKTsKKyAgICBB
U1NFUlQoaXNWYWxpZFRocmVhZFN0YXRlKG1fdm0pKTsKICAgICBDb25zZXJ2YXRpdmVSb290cyBz
dGFja1Jvb3RzKCZtX29iamVjdFNwYWNlLmJsb2NrcygpLCAmbV9zdG9yYWdlU3BhY2UpOwogICAg
IHN0YWNrKCkuZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoc3RhY2tSb290cyk7CiAgICAgc2l6ZV90
IHN0YWNrUm9vdENvdW50ID0gc3RhY2tSb290cy5zaXplKCk7CkBAIC00MjgsNyArNDI4LDcgQEAg
dm9pZCBIZWFwOjptYXJrUm9vdHMoKQogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9u
KCJHYXJiYWdlIENvbGxlY3Rpb246IFRyYWNpbmciKTsKIAogICAgIEdDUEhBU0UoTWFya1Jvb3Rz
KTsKLSAgICBBU1NFUlQoaXNWYWxpZFRocmVhZFN0YXRlKG1fZ2xvYmFsRGF0YSkpOworICAgIEFT
U0VSVChpc1ZhbGlkVGhyZWFkU3RhdGUobV92bSkpOwogCiAjaWYgRU5BQkxFKE9CSkVDVF9NQVJL
X0xPR0dJTkcpCiAgICAgZG91YmxlIGdjU3RhcnRUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpOwpA
QCAtNDU3LDcgKzQ1Nyw3IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKICAgICBDb25zZXJ2YXRp
dmVSb290cyBzY3JhdGNoQnVmZmVyUm9vdHMoJm1fb2JqZWN0U3BhY2UuYmxvY2tzKCksICZtX3N0
b3JhZ2VTcGFjZSk7CiAgICAgewogICAgICAgICBHQ1BIQVNFKEdhdGhlclNjcmF0Y2hCdWZmZXJS
b290cyk7Ci0gICAgICAgIG1fZ2xvYmFsRGF0YS0+Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoc2Ny
YXRjaEJ1ZmZlclJvb3RzKTsKKyAgICAgICAgbV92bS0+Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMo
c2NyYXRjaEJ1ZmZlclJvb3RzKTsKICAgICB9CiAjZW5kaWYKIApAQCAtNDc0LDEzICs0NzQsMTMg
QEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogICAgIHsKICAgICAgICAgUGFyYWxsZWxNb2RlRW5h
YmxlciBlbmFibGVyKHZpc2l0b3IpOwogCi0gICAgICAgIGlmIChtX2dsb2JhbERhdGEtPmNvZGVC
bG9ja3NCZWluZ0NvbXBpbGVkLnNpemUoKSkgeworICAgICAgICBpZiAobV92bS0+Y29kZUJsb2Nr
c0JlaW5nQ29tcGlsZWQuc2l6ZSgpKSB7CiAgICAgICAgICAgICBHQ1BIQVNFKFZpc2l0QWN0aXZl
Q29kZUJsb2NrKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9nbG9iYWxE
YXRhLT5jb2RlQmxvY2tzQmVpbmdDb21waWxlZC5zaXplKCk7IGkrKykKLSAgICAgICAgICAgICAg
ICBtX2dsb2JhbERhdGEtPmNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkW2ldLT52aXNpdEFnZ3JlZ2F0
ZSh2aXNpdG9yKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92bS0+Y29k
ZUJsb2Nrc0JlaW5nQ29tcGlsZWQuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICAgICAgbV92bS0+
Y29kZUJsb2Nrc0JlaW5nQ29tcGlsZWRbaV0tPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAg
ICAgICB9CiAKLSAgICAgICAgbV9nbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdS
ZWZlcmVuY2VzKHZpc2l0b3IpOworICAgICAgICBtX3ZtLT5zbWFsbFN0cmluZ3MudmlzaXRTdHJv
bmdSZWZlcmVuY2VzKHZpc2l0b3IpOwogCiAgICAgICAgIHsKICAgICAgICAgICAgIEdDUEhBU0Uo
VmlzaXRNYWNoaW5lUm9vdHMpOwpAQCAtNTIzLDEwICs1MjMsMTAgQEAgdm9pZCBIZWFwOjptYXJr
Um9vdHMoKQogICAgICAgICAgICAgICAgIHZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAobV9nbG9iYWxEYXRhLT5leGNlcHRpb24p
IHsKKyAgICAgICAgaWYgKG1fdm0tPmV4Y2VwdGlvbikgewogICAgICAgICAgICAgR0NQSEFTRShN
YXJraW5nRXhjZXB0aW9uKTsKICAgICAgICAgICAgIE1BUktfTE9HX1JPT1QodmlzaXRvciwgIkV4
Y2VwdGlvbnMiKTsKLSAgICAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdCgmbV9nbG9iYWxE
YXRhLT5leGNlcHRpb24pOworICAgICAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZtX3Zt
LT5leGNlcHRpb24pOwogICAgICAgICAgICAgdmlzaXRvci5kb25hdGVBbmREcmFpbigpOwogICAg
ICAgICB9CiAgICAgCkBAIC02NTgsNyArNjU4LDcgQEAgdm9pZCBIZWFwOjpkZWxldGVBbGxDb21w
aWxlZENvZGUoKQogewogICAgIC8vIElmIEphdmFTY3JpcHQgaXMgcnVubmluZywgaXQncyBub3Qg
c2FmZSB0byBkZWxldGUgY29kZSwgc2luY2Ugd2UnbGwgZW5kCiAgICAgLy8gdXAgZGVsZXRpbmcg
Y29kZSB0aGF0IGlzIGxpdmUgb24gdGhlIHN0YWNrLgotICAgIGlmIChtX2dsb2JhbERhdGEtPmR5
bmFtaWNHbG9iYWxPYmplY3QpCisgICAgaWYgKG1fdm0tPmR5bmFtaWNHbG9iYWxPYmplY3QpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGZvciAoRXhlY3V0YWJsZUJhc2UqIGN1cnJlbnQgPSBtX2Nv
bXBpbGVkQ29kZS5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0KCkpIHsK
QEAgLTcwNCw4ICs3MDQsOCBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBU
b2dnCiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkdhcmJhZ2UgQ29sbGVjdGlv
biIpOwogICAgIAogICAgIEdDUEhBU0UoQ29sbGVjdCk7Ci0gICAgQVNTRVJUKGdsb2JhbERhdGEo
KS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKGdsb2JhbERhdGEoKS0+aWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5j
dXJyZW50SWRlbnRpZmllclRhYmxlKCkpOworICAgIEFTU0VSVCh2bSgpLT5hcGlMb2NrKCkuY3Vy
cmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CisgICAgUkVMRUFTRV9BU1NFUlQodm0oKS0+aWRl
bnRpZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkp
OwogICAgIEFTU0VSVChtX2lzU2FmZVRvQ29sbGVjdCk7CiAgICAgSkFWQVNDUklQVENPUkVfR0Nf
QkVHSU4oKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9P
cGVyYXRpb24pOwpAQCAtNzQ4LDcgKzc0OCw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRv
Z2dsZSBzd2VlcFRvZ2cKIAogICAgIHsKICAgICAgICAgR0NQSEFTRShmaW5hbGl6ZVNtYWxsU3Ry
aW5ncyk7Ci0gICAgICAgIG1fZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLmZpbmFsaXplU21hbGxT
dHJpbmdzKCk7CisgICAgICAgIG1fdm0tPnNtYWxsU3RyaW5ncy5maW5hbGl6ZVNtYWxsU3RyaW5n
cygpOwogICAgIH0KIAogICAgIHsKQEAgLTc1OCw3ICs3NTgsNyBAQCB2b2lkIEhlYXA6OmNvbGxl
Y3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAKICAgICB7CiAgICAgICAgIEdDUEhBU0UoRGVsZXRl
U291cmNlUHJvdmlkZXJDYWNoZXMpOwotICAgICAgICBtX2dsb2JhbERhdGEtPmNsZWFyU291cmNl
UHJvdmlkZXJDYWNoZXMoKTsKKyAgICAgICAgbV92bS0+Y2xlYXJTb3VyY2VQcm92aWRlckNhY2hl
cygpOwogICAgIH0KIAogICAgIGlmIChzd2VlcFRvZ2dsZSA9PSBEb1N3ZWVwKSB7CkBAIC04NDIs
NyArODQyLDcgQEAgdm9pZCBIZWFwOjpkaWRBbGxvY2F0ZShzaXplX3QgYnl0ZXMpCiAKIGJvb2wg
SGVhcDo6aXNWYWxpZEFsbG9jYXRpb24oc2l6ZV90KQogewotICAgIGlmICghaXNWYWxpZFRocmVh
ZFN0YXRlKG1fZ2xvYmFsRGF0YSkpCisgICAgaWYgKCFpc1ZhbGlkVGhyZWFkU3RhdGUobV92bSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3Mg
IT0gTm9PcGVyYXRpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lv
biAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU1LDcgKzU1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSW5jcmVt
ZW50YWxTd2VlcGVyOwogICAgIGNsYXNzIEpJVFN0dWJSb3V0aW5lOwogICAgIGNsYXNzIEpTQ2Vs
bDsKLSAgICBjbGFzcyBKU0dsb2JhbERhdGE7CisgICAgY2xhc3MgVk07CiAgICAgY2xhc3MgSlNT
dGFjazsKICAgICBjbGFzcyBKU1ZhbHVlOwogICAgIGNsYXNzIExpdmVPYmplY3RJdGVyYXRvcjsK
QEAgLTk2LDExICs5NiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHZvaWQg
d3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTQ2VsbCopOwogICAgICAgICBzdGF0aWMgdWlu
dDhfdCogYWRkcmVzc09mQ2FyZEZvcihKU0NlbGwqKTsKIAotICAgICAgICBIZWFwKEpTR2xvYmFs
RGF0YSosIEhlYXBUeXBlKTsKKyAgICAgICAgSGVhcChWTSosIEhlYXBUeXBlKTsKICAgICAgICAg
fkhlYXAoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBsYXN0Q2hhbmNlVG9GaW5h
bGl6ZSgpOwogCi0gICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fZ2xvYmFsRGF0YTsgfQorICAgICAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3Zt
OyB9CiAgICAgICAgIE1hcmtlZFNwYWNlJiBvYmplY3RTcGFjZSgpIHsgcmV0dXJuIG1fb2JqZWN0
U3BhY2U7IH0KICAgICAgICAgTWFjaGluZVRocmVhZHMmIG1hY2hpbmVUaHJlYWRzKCkgeyByZXR1
cm4gbV9tYWNoaW5lVGhyZWFkczsgfQogCkBAIC0yNTksNyArMjU5LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIAogICAgICAgICBib29sIG1faXNTYWZlVG9Db2xsZWN0OwogCi0gICAgICAg
IEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworICAgICAgICBWTSogbV92bTsKICAgICAgICAg
ZG91YmxlIG1fbGFzdEdDTGVuZ3RoOwogICAgICAgICBkb3VibGUgbV9sYXN0Q29kZURpc2NhcmRU
aW1lOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAJKHJl
dmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEyICs1NywxMiBAQCBzdGF0aWMgdm9pZCByZWxlYXNl
QVBJTG9jayhjb25zdCB2b2lkKiBpCiAgICAgc3RhdGljX2Nhc3Q8SlNMb2NrKj4oY29uc3RfY2Fz
dDx2b2lkKj4oaW5mbykpLT5kZXJlZigpOwogfQogCi1IZWFwVGltZXI6OkhlYXBUaW1lcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIENGUnVuTG9vcFJlZiBydW5Mb29wKQotICAgIDogbV9nbG9i
YWxEYXRhKGdsb2JhbERhdGEpCitIZWFwVGltZXI6OkhlYXBUaW1lcihWTSogdm0sIENGUnVuTG9v
cFJlZiBydW5Mb29wKQorICAgIDogbV92bSh2bSkKICAgICAsIG1fcnVuTG9vcChydW5Mb29wKQog
ewogICAgIG1lbXNldCgmbV9jb250ZXh0LCAwLCBzaXplb2YoQ0ZSdW5Mb29wVGltZXJDb250ZXh0
KSk7Ci0gICAgbV9jb250ZXh0LmluZm8gPSAmZ2xvYmFsRGF0YS0+YXBpTG9jaygpOworICAgIG1f
Y29udGV4dC5pbmZvID0gJnZtLT5hcGlMb2NrKCk7CiAgICAgbV9jb250ZXh0LnJldGFpbiA9IHJl
dGFpbkFQSUxvY2s7CiAgICAgbV9jb250ZXh0LnJlbGVhc2UgPSByZWxlYXNlQVBJTG9jazsKICAg
ICBtX3RpbWVyLmFkb3B0Q0YoQ0ZSdW5Mb29wVGltZXJDcmVhdGUoMCwgc19kZWNhZGUsIHNfZGVj
YWRlLCAwLCAwLCBIZWFwVGltZXI6OnRpbWVyRGlkRmlyZSwgJm1fY29udGV4dCkpOwpAQCAtODks
MjMgKzg5LDIzIEBAIHZvaWQgSGVhcFRpbWVyOjp0aW1lckRpZEZpcmUoQ0ZSdW5Mb29wVGkKICAg
ICBKU0xvY2sqIGFwaUxvY2sgPSBzdGF0aWNfY2FzdDxKU0xvY2sqPihjb250ZXh0KTsKICAgICBh
cGlMb2NrLT5sb2NrKCk7CiAKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBhcGlMb2Nr
LT5nbG9iYWxEYXRhKCk7Ci0gICAgLy8gVGhlIEpTR2xvYmFsRGF0YSBoYXMgYmVlbiBkZXN0cm95
ZWQsIHNvIHdlIHNob3VsZCBqdXN0IGdpdmUgdXAuCi0gICAgaWYgKCFnbG9iYWxEYXRhKSB7Cisg
ICAgVk0qIHZtID0gYXBpTG9jay0+dm0oKTsKKyAgICAvLyBUaGUgVk0gaGFzIGJlZW4gZGVzdHJv
eWVkLCBzbyB3ZSBzaG91bGQganVzdCBnaXZlIHVwLgorICAgIGlmICghdm0pIHsKICAgICAgICAg
YXBpTG9jay0+dW5sb2NrKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBIZWFwVGlt
ZXIqIGhlYXBUaW1lciA9IDA7Ci0gICAgaWYgKGdsb2JhbERhdGEtPmhlYXAuYWN0aXZpdHlDYWxs
YmFjaygpLT5tX3RpbWVyLmdldCgpID09IHRpbWVyKQotICAgICAgICBoZWFwVGltZXIgPSBnbG9i
YWxEYXRhLT5oZWFwLmFjdGl2aXR5Q2FsbGJhY2soKTsKLSAgICBlbHNlIGlmIChnbG9iYWxEYXRh
LT5oZWFwLnN3ZWVwZXIoKS0+bV90aW1lci5nZXQoKSA9PSB0aW1lcikKLSAgICAgICAgaGVhcFRp
bWVyID0gZ2xvYmFsRGF0YS0+aGVhcC5zd2VlcGVyKCk7CisgICAgaWYgKHZtLT5oZWFwLmFjdGl2
aXR5Q2FsbGJhY2soKS0+bV90aW1lci5nZXQoKSA9PSB0aW1lcikKKyAgICAgICAgaGVhcFRpbWVy
ID0gdm0tPmhlYXAuYWN0aXZpdHlDYWxsYmFjaygpOworICAgIGVsc2UgaWYgKHZtLT5oZWFwLnN3
ZWVwZXIoKS0+bV90aW1lci5nZXQoKSA9PSB0aW1lcikKKyAgICAgICAgaGVhcFRpbWVyID0gdm0t
PmhlYXAuc3dlZXBlcigpOwogICAgIGVsc2UKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIAogICAgIHsKLSAgICAgICAgQVBJRW50cnlTaGltIHNoaW0oZ2xvYmFsRGF0YSk7
CisgICAgICAgIEFQSUVudHJ5U2hpbSBzaGltKHZtKTsKICAgICAgICAgaGVhcFRpbWVyLT5kb1dv
cmsoKTsKICAgICB9CiAKQEAgLTExNCw4ICsxMTQsOCBAQCB2b2lkIEhlYXBUaW1lcjo6dGltZXJE
aWRGaXJlKENGUnVuTG9vcFRpCiAKICNlbGlmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCiAKLUhlYXBU
aW1lcjo6SGVhcFRpbWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKLSAgICA6IG1fZ2xvYmFs
RGF0YShnbG9iYWxEYXRhKQorSGVhcFRpbWVyOjpIZWFwVGltZXIoVk0qIHZtKQorICAgIDogbV92
bSh2bSkKICAgICAsIG1fdGltZXIodGhpcywgJkhlYXBUaW1lcjo6dGltZXJEaWRGaXJlKQogewog
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgSGVhcFRpbWVyIGZvciBvdGhlciB0aHJlYWRzLgpAQCAt
MTQyLDggKzE0Miw4IEBAIHZvaWQgSGVhcFRpbWVyOjppbnZhbGlkYXRlKCkKIAogI2VsaWYgUExB
VEZPUk0oUVQpCiAKLUhlYXBUaW1lcjo6SGVhcFRpbWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSkKLSAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorSGVhcFRpbWVyOjpIZWFwVGltZXIo
Vk0qIHZtKQorICAgIDogbV92bSh2bSkKICAgICAsIG1fbmV3VGhyZWFkKDApCiAgICAgLCBtX211
dGV4KFFNdXRleDo6Tm9uUmVjdXJzaXZlKQogewpAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQgSGVh
cFRpbWVyOjp0aW1lckV2ZW50KFFUaW1lckV2ZW50KikKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIEFQSUVudHJ5U2hpbSBzaGltKG1fZ2xvYmFsRGF0YSk7CisgICAgQVBJRW50cnlTaGlt
IHNoaW0obV92bSk7CiAgICAgZG9Xb3JrKCk7CiB9CiAKQEAgLTE5MSw4ICsxOTEsOCBAQCB2b2lk
IEhlYXBUaW1lcjo6c3luY2hyb25pemUoKQogfQogCiAjZWxzZQotSGVhcFRpbWVyOjpIZWFwVGlt
ZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQotICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERh
dGEpCitIZWFwVGltZXI6OkhlYXBUaW1lcihWTSogdm0pCisgICAgOiBtX3ZtKHZtKQogewogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuaAkocmV2aXNpb24gMTQ4
NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDcgKzQyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTR2xv
YmFsRGF0YTsKK2NsYXNzIFZNOwogCiAjaWYgUExBVEZPUk0oUVQpICYmICFVU0UoQ0YpCiBjbGFz
cyBIZWFwVGltZXIgOiBwdWJsaWMgUU9iamVjdCB7CkBAIC01MSwxMCArNTEsMTAgQEAgY2xhc3Mg
SGVhcFRpbWVyIHsKICNlbmRpZgogcHVibGljOgogI2lmIFVTRShDRikKLSAgICBIZWFwVGltZXIo
SlNHbG9iYWxEYXRhKiwgQ0ZSdW5Mb29wUmVmKTsKKyAgICBIZWFwVGltZXIoVk0qLCBDRlJ1bkxv
b3BSZWYpOwogICAgIHN0YXRpYyB2b2lkIHRpbWVyRGlkRmlyZShDRlJ1bkxvb3BUaW1lclJlZiwg
dm9pZCopOwogI2Vsc2UKLSAgICBIZWFwVGltZXIoSlNHbG9iYWxEYXRhKik7CisgICAgSGVhcFRp
bWVyKFZNKik7CiAjZW5kaWYKICAgICAKICAgICB2aXJ0dWFsIH5IZWFwVGltZXIoKTsKQEAgLTYz
LDcgKzYzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkb1dvcmsoKSA9IDA7CiAgICAg
CiBwcm90ZWN0ZWQ6Ci0gICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CisgICAgVk0qIG1f
dm07CiAKICNpZiBVU0UoQ0YpCiAgICAgc3RhdGljIGNvbnN0IENGVGltZUludGVydmFsIHNfZGVj
YWRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRh
bFN3ZWVwZXIuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3
IEBAIHN0YXRpYyBjb25zdCBkb3VibGUgc3dlZXBUaW1lTXVsdGlwbGllciAKICNpZiBVU0UoQ0Yp
CiAgICAgCiBJbmNyZW1lbnRhbFN3ZWVwZXI6OkluY3JlbWVudGFsU3dlZXBlcihIZWFwKiBoZWFw
LCBDRlJ1bkxvb3BSZWYgcnVuTG9vcCkKLSAgICA6IEhlYXBUaW1lcihoZWFwLT5nbG9iYWxEYXRh
KCksIHJ1bkxvb3ApCisgICAgOiBIZWFwVGltZXIoaGVhcC0+dm0oKSwgcnVuTG9vcCkKICAgICAs
IG1fY3VycmVudEJsb2NrVG9Td2VlcEluZGV4KDApCiAgICAgLCBtX2Jsb2Nrc1RvU3dlZXAoaGVh
cC0+bV9ibG9ja1NuYXBzaG90KQogewpAQCAtNzAsNyArNzAsNyBAQCB2b2lkIEluY3JlbWVudGFs
U3dlZXBlcjo6Y2FuY2VsVGltZXIoKQogI2VsaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkgfHwgUExB
VEZPUk0oUVQpCiAgICAKIEluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50YWxTd2VlcGVyKEhl
YXAqIGhlYXApCi0gICAgOiBIZWFwVGltZXIoaGVhcC0+Z2xvYmFsRGF0YSgpKQorICAgIDogSGVh
cFRpbWVyKGhlYXAtPnZtKCkpCiAgICAgLCBtX2N1cnJlbnRCbG9ja1RvU3dlZXBJbmRleCgwKQog
ICAgICwgbV9ibG9ja3NUb1N3ZWVwKGhlYXAtPm1fYmxvY2tTbmFwc2hvdCkKIHsKQEAgLTEyOCw3
ICsxMjgsNyBAQCB2b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6c3dlZXBOZXh0QmxvY2soCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBibG9jay0+c3dlZXAoKTsKLSAgICAgICAgbV9n
bG9iYWxEYXRhLT5oZWFwLm9iamVjdFNwYWNlKCkuZnJlZU9yU2hyaW5rQmxvY2soYmxvY2spOwor
ICAgICAgICBtX3ZtLT5oZWFwLm9iamVjdFNwYWNlKCkuZnJlZU9yU2hyaW5rQmxvY2soYmxvY2sp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogfQpAQCAtMTQ0LDE0ICsxNDQsMTQgQEAgdm9pZCBJ
bmNyZW1lbnRhbFN3ZWVwZXI6OndpbGxGaW5pc2hTd2VlcAogewogICAgIG1fY3VycmVudEJsb2Nr
VG9Td2VlcEluZGV4ID0gMDsKICAgICBtX2Jsb2Nrc1RvU3dlZXAuY2xlYXIoKTsKLSAgICBpZiAo
bV9nbG9iYWxEYXRhKQorICAgIGlmIChtX3ZtKQogICAgICAgICBjYW5jZWxUaW1lcigpOwogfQog
CiAjZWxzZQogCi1JbmNyZW1lbnRhbFN3ZWVwZXI6OkluY3JlbWVudGFsU3dlZXBlcihKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEpCi0gICAgOiBIZWFwVGltZXIoZ2xvYmFsRGF0YSkKK0luY3JlbWVu
dGFsU3dlZXBlcjo6SW5jcmVtZW50YWxTd2VlcGVyKFZNKiB2bSkKKyAgICA6IEhlYXBUaW1lcih2
bSkKIHsKIH0KIApAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpk
b1dvcmsoKQogCiBQYXNzT3duUHRyPEluY3JlbWVudGFsU3dlZXBlcj4gSW5jcmVtZW50YWxTd2Vl
cGVyOjpjcmVhdGUoSGVhcCogaGVhcCkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEluY3Jl
bWVudGFsU3dlZXBlcihoZWFwLT5nbG9iYWxEYXRhKCkpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IEluY3JlbWVudGFsU3dlZXBlcihoZWFwLT52bSgpKSk7CiB9CiAKIHZvaWQgSW5jcmVtZW50
YWxTd2VlcGVyOjpzdGFydFN3ZWVwaW5nKFZlY3RvcjxNYXJrZWRCbG9jayo+JikKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCShyZXZp
c2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3
ZWVwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBwcml2YXRlOgogICAgIFZl
Y3RvcjxNYXJrZWRCbG9jayo+JiBtX2Jsb2Nrc1RvU3dlZXA7CiAjZWxzZQogICAgIAotICAgIElu
Y3JlbWVudGFsU3dlZXBlcihKU0dsb2JhbERhdGEqKTsKKyAgICBJbmNyZW1lbnRhbFN3ZWVwZXIo
Vk0qKTsKICAgICAKICNlbmRpZgogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0xvY2FsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWwu
aAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBMb2NhbF9oCiAKICNp
bmNsdWRlICJIYW5kbGUuaCIKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJW
TS5oIgogCiAvKgogICAgIEEgc3Ryb25nbHkgcmVmZXJlbmNlZCBoYW5kbGUgd2hvc2UgbGlmZXRp
bWUgaXMgdGVtcG9yYXJ5LCBsaW1pdGVkIHRvIGEgZ2l2ZW4KQEAgLTQ0LDggKzQ0LDggQEAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIExvY2FsIDogcHVibAogcHVibGljOgogICAgIHR5cGVk
ZWYgdHlwZW5hbWUgSGFuZGxlPFQ+OjpFeHRlcm5hbFR5cGUgRXh0ZXJuYWxUeXBlOwogCi0gICAg
TG9jYWwoSlNHbG9iYWxEYXRhJiwgRXh0ZXJuYWxUeXBlID0gRXh0ZXJuYWxUeXBlKCkpOwotICAg
IExvY2FsKEpTR2xvYmFsRGF0YSYsIEhhbmRsZTxUPik7CisgICAgTG9jYWwoVk0mLCBFeHRlcm5h
bFR5cGUgPSBFeHRlcm5hbFR5cGUoKSk7CisgICAgTG9jYWwoVk0mLCBIYW5kbGU8VD4pOwogICAg
IExvY2FsKGNvbnN0IExvY2FsPFQ+Jik7IC8vIEFkb3B0aW5nIGNvbnN0cnVjdG9yLiBVc2VkIHRv
IHJldHVybiBhIExvY2FsIHRvIGEgY2FsbGluZyBmdW5jdGlvbi4KIAogICAgIExvY2FsJiBvcGVy
YXRvcj0oRXh0ZXJuYWxUeXBlKTsKQEAgLTU2LDE0ICs1NiwxNCBAQCBwcml2YXRlOgogICAgIHZv
aWQgc2V0KEV4dGVybmFsVHlwZSk7CiB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5l
IExvY2FsPFQ+OjpMb2NhbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEV4dGVybmFsVHlwZSB2
YWx1ZSkKLSAgICA6IEhhbmRsZTxUPihnbG9iYWxEYXRhLmhlYXAuaGFuZGxlU3RhY2soKS0+cHVz
aCgpKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBMb2NhbDxUPjo6TG9jYWwoVk0mIHZt
LCBFeHRlcm5hbFR5cGUgdmFsdWUpCisgICAgOiBIYW5kbGU8VD4odm0uaGVhcC5oYW5kbGVTdGFj
aygpLT5wdXNoKCkpCiB7CiAgICAgc2V0KHZhbHVlKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+IGlubGluZSBMb2NhbDxUPjo6TG9jYWwoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBIYW5k
bGU8VD4gb3RoZXIpCi0gICAgOiBIYW5kbGU8VD4oZ2xvYmFsRGF0YS5oZWFwLmhhbmRsZVN0YWNr
KCktPnB1c2goKSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgTG9jYWw8VD46OkxvY2Fs
KFZNJiB2bSwgSGFuZGxlPFQ+IG90aGVyKQorICAgIDogSGFuZGxlPFQ+KHZtLmhlYXAuaGFuZGxl
U3RhY2soKS0+cHVzaCgpKQogewogICAgIHNldChvdGhlci5nZXQoKSk7CiB9CkBAIC0xMDEsOCAr
MTAxLDggQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIExvY2FsPAogdGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5ID0gMD4gY2xhc3MgTG9jYWxT
dGFjayB7CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBIYW5kbGU8VD46OkV4dGVybmFsVHlwZSBFeHRl
cm5hbFR5cGU7CiBwdWJsaWM6Ci0gICAgTG9jYWxTdGFjayhKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCi0gICAgICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgTG9jYWxTdGFjayhW
TSYgdm0pCisgICAgICAgIDogbV92bSh2bSkKICAgICAgICAgLCBtX2NvdW50KDApCiAgICAgewog
ICAgIH0KQEAgLTEyMiw3ICsxMjIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwdXNoKEV4dGVybmFs
VHlwZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChtX2NvdW50ID09IG1fc3RhY2suc2l6ZSgp
KQotICAgICAgICAgICAgbV9zdGFjay5hcHBlbmQoTG9jYWw8VD4obV9nbG9iYWxEYXRhLCB2YWx1
ZSkpOworICAgICAgICAgICAgbV9zdGFjay5hcHBlbmQoTG9jYWw8VD4obV92bSwgdmFsdWUpKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9zdGFja1ttX2NvdW50XSA9IHZhbHVlOwogICAg
ICAgICBtX2NvdW50Kys7CkBAIC0xMzIsNyArMTMyLDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVk
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvdW50OyB9CiAKIHByaXZhdGU6Ci0gICAgSlNHbG9i
YWxEYXRhJiBtX2dsb2JhbERhdGE7CisgICAgVk0mIG1fdm07CiAgICAgVmVjdG9yPExvY2FsPFQ+
LCBpbmxpbmVDYXBhY2l0eT4gbV9zdGFjazsKICAgICB1bnNpZ25lZCBtX2NvdW50OwogfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsU2NvcGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbFNjb3BlLmgJKHJldmlzaW9uIDE0ODY1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsU2NvcGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzcsMTEgKzM3LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIExvY2FsU2NvcGUg
aXMgc2ltaWxhciBpbiBjb25jZXB0IHRvIE5TQXV0b3JlbGVhc2VQb29sLgogKi8KIAotY2xhc3Mg
SlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiAKIGNsYXNzIExvY2FsU2NvcGUgewogcHVibGljOgot
ICAgIGV4cGxpY2l0IExvY2FsU2NvcGUoSlNHbG9iYWxEYXRhJik7CisgICAgZXhwbGljaXQgTG9j
YWxTY29wZShWTSYpOwogICAgIH5Mb2NhbFNjb3BlKCk7CiAgICAgCiAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IExvY2FsPFQ+IHJlbGVhc2UoTG9jYWw8VD4pOyAvLyBEZXN0cm95cyBhbGwgb3Ro
ZXIgbG9jYWxzIGluIHRoZSBzY29wZS4KQEAgLTUxLDggKzUxLDggQEAgcHJpdmF0ZToKICAgICBI
YW5kbGVTdGFjazo6RnJhbWUgbV9sYXN0RnJhbWU7CiB9OwogCi1pbmxpbmUgTG9jYWxTY29wZTo6
TG9jYWxTY29wZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgOiBtX2hhbmRsZVN0YWNr
KGdsb2JhbERhdGEuaGVhcC5oYW5kbGVTdGFjaygpKQoraW5saW5lIExvY2FsU2NvcGU6OkxvY2Fs
U2NvcGUoVk0mIHZtKQorICAgIDogbV9oYW5kbGVTdGFjayh2bS5oZWFwLmhhbmRsZVN0YWNrKCkp
CiB7CiAgICAgbV9oYW5kbGVTdGFjay0+ZW50ZXJTY29wZShtX2xhc3RGcmFtZSk7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5j
cHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hp
bmVTdGFja01hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNs
dWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJK
U0FycmF5LmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIKICNp
bmNsdWRlIDxzZXRqbXAuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CkBAIC0xODgsNyArMTg4LDcgQEAgdm9pZCBNYWNoaW5lVGhyZWFkczo6bWFr
ZVVzYWJsZUZyb21NdWx0aQogCiB2b2lkIE1hY2hpbmVUaHJlYWRzOjphZGRDdXJyZW50VGhyZWFk
KCkKIHsKLSAgICBBU1NFUlQoIW1faGVhcC0+Z2xvYmFsRGF0YSgpLT5leGNsdXNpdmVUaHJlYWQg
fHwgbV9oZWFwLT5nbG9iYWxEYXRhKCktPmV4Y2x1c2l2ZVRocmVhZCA9PSBjdXJyZW50VGhyZWFk
KCkpOworICAgIEFTU0VSVCghbV9oZWFwLT52bSgpLT5leGNsdXNpdmVUaHJlYWQgfHwgbV9oZWFw
LT52bSgpLT5leGNsdXNpdmVUaHJlYWQgPT0gY3VycmVudFRocmVhZCgpKTsKIAogICAgIGlmICgh
bV90aHJlYWRTcGVjaWZpYyB8fCB0aHJlYWRTcGVjaWZpY0dldChtX3RocmVhZFNwZWNpZmljKSkK
ICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00LDcgKzQs
NyBAQAogI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgogI2luY2x1ZGUgIkhlYXAuaCIK
ICNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEu
aCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTcwLDcgKzcwLDcgQEAgaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRv
cjo6dHJ5QWxsb2NhdAogICAgIAogdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dD
YXNlKHNpemVfdCBieXRlcykKIHsKLSAgICBBU1NFUlQobV9oZWFwLT5nbG9iYWxEYXRhKCktPmFw
aUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKKyAgICBBU1NFUlQobV9oZWFw
LT52bSgpLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAjaWYgQ09M
TEVDVF9PTl9FVkVSWV9BTExPQ0FUSU9OCiAgICAgbV9oZWFwLT5jb2xsZWN0QWxsR2FyYmFnZSgp
OwogICAgIEFTU0VSVChtX2hlYXAtPm1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBOb09wZXJhdGlv
bik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShy
ZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgTWFya2VkQmxvY2s6Ok1hcmtl
ZEJsb2NrKFJlZ2lvbiogcmVnaW9uLAogICAgICwgbV9kZXN0cnVjdG9yVHlwZShkZXN0cnVjdG9y
VHlwZSkKICAgICAsIG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKICAgICAsIG1fc3RhdGUoTmV3KSAv
LyBBbGwgY2VsbHMgc3RhcnQgb3V0IHVubWFya2VkLgotICAgICwgbV93ZWFrU2V0KGFsbG9jYXRv
ci0+aGVhcCgpLT5nbG9iYWxEYXRhKCkpCisgICAgLCBtX3dlYWtTZXQoYWxsb2NhdG9yLT5oZWFw
KCktPnZtKCkpCiB7CiAgICAgQVNTRVJUKGFsbG9jYXRvcik7CiAgICAgSEVBUF9MT0dfQkxPQ0tf
U1RBVEVfVFJBTlNJVElPTih0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQmxvY2suaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKCkgY29u
c3Q7CiAgICAgICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKLSAgICAgICAgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhKCkgY29uc3Q7CisgICAgICAgIFZNKiB2bSgpIGNvbnN0OwogICAgICAgICBXZWFr
U2V0JiB3ZWFrU2V0KCk7CiAgICAgICAgIAogICAgICAgICBlbnVtIFN3ZWVwTW9kZSB7IFN3ZWVw
T25seSwgU3dlZXBUb0ZyZWVMaXN0IH07CkBAIC0yNDAsOSArMjQwLDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHJldHVybiBtX3dlYWtTZXQuaGVhcCgpOwogICAgIH0KIAotICAgIGlubGlu
ZSBKU0dsb2JhbERhdGEqIE1hcmtlZEJsb2NrOjpnbG9iYWxEYXRhKCkgY29uc3QKKyAgICBpbmxp
bmUgVk0qIE1hcmtlZEJsb2NrOjp2bSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV93
ZWFrU2V0Lmdsb2JhbERhdGEoKTsKKyAgICAgICAgcmV0dXJuIG1fd2Vha1NldC52bSgpOwogICAg
IH0KIAogICAgIGlubGluZSBXZWFrU2V0JiBNYXJrZWRCbG9jazo6d2Vha1NldCgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAxNDg2
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgsNyArOCw3IEBACiAjaW5jbHVkZSAiR0NUaHJlYWQuaCIKICNpbmNsdWRl
ICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKLSNpbmNsdWRl
ICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIkpTT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCkBAIC0xNyw3
ICsxNyw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogU2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKEdD
VGhyZWFkU2hhcmVkRGF0YSYgc2hhcmVkKQotICAgIDogbV9zdGFjayhzaGFyZWQubV9nbG9iYWxE
YXRhLT5oZWFwLmJsb2NrQWxsb2NhdG9yKCkpCisgICAgOiBtX3N0YWNrKHNoYXJlZC5tX3ZtLT5o
ZWFwLmJsb2NrQWxsb2NhdG9yKCkpCiAgICAgLCBtX3Zpc2l0Q291bnQoMCkKICAgICAsIG1faXNJ
blBhcmFsbGVsTW9kZShmYWxzZSkKICAgICAsIG1fc2hhcmVkKHNoYXJlZCkKQEAgLTM2LDcgKzM2
LDcgQEAgU2xvdFZpc2l0b3I6On5TbG90VmlzaXRvcigpCiAKIHZvaWQgU2xvdFZpc2l0b3I6OnNl
dHVwKCkKIHsKLSAgICBtX3NoYXJlZC5tX3Nob3VsZEhhc2hDb25zID0gbV9zaGFyZWQubV9nbG9i
YWxEYXRhLT5oYXZlRW5vdWdoTmV3U3RyaW5nc1RvSGFzaENvbnMoKTsKKyAgICBtX3NoYXJlZC5t
X3Nob3VsZEhhc2hDb25zID0gbV9zaGFyZWQubV92bS0+aGF2ZUVub3VnaE5ld1N0cmluZ3NUb0hh
c2hDb25zKCk7CiAgICAgbV9zaG91bGRIYXNoQ29ucyA9IG1fc2hhcmVkLm1fc2hvdWxkSGFzaENv
bnM7CiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3NoYXJlZC5tX2djVGhyZWFkcy5zaXplKCk7ICsraSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1N0cm9uZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1N0cm9uZy5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TdHJvbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiAKIC8vIEEgc3Ry
b25nbHkgcmVmZXJlbmNlZCBoYW5kbGUgdGhhdCBwcmV2ZW50cyB0aGUgb2JqZWN0IGl0IHBvaW50
cyB0byBmcm9tIGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkLgogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IGNsYXNzIFN0cm9uZyA6IHB1YmxpYyBIYW5kbGU8VD4gewpAQCAtNDgsOSArNDgsOSBAQCBwdWJs
aWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICBTdHJvbmcoSlNHbG9iYWxEYXRhJiwgRXh0ZXJu
YWxUeXBlID0gRXh0ZXJuYWxUeXBlKCkpOworICAgIFN0cm9uZyhWTSYsIEV4dGVybmFsVHlwZSA9
IEV4dGVybmFsVHlwZSgpKTsKIAotICAgIFN0cm9uZyhKU0dsb2JhbERhdGEmLCBIYW5kbGU8VD4p
OworICAgIFN0cm9uZyhWTSYsIEhhbmRsZTxUPik7CiAgICAgCiAgICAgU3Ryb25nKGNvbnN0IFN0
cm9uZyYgb3RoZXIpCiAgICAgICAgIDogSGFuZGxlPFQ+KCkKQEAgLTk1LDcgKzk1LDcgQEAgcHVi
bGljOgogCiAgICAgRXh0ZXJuYWxUeXBlIGdldCgpIGNvbnN0IHsgcmV0dXJuIEhhbmRsZVR5cGVz
PFQ+OjpnZXRGcm9tU2xvdCh0aGlzLT5zbG90KCkpOyB9CiAKLSAgICB2b2lkIHNldChKU0dsb2Jh
bERhdGEmLCBFeHRlcm5hbFR5cGUpOworICAgIHZvaWQgc2V0KFZNJiwgRXh0ZXJuYWxUeXBlKTsK
IAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBTdHJvbmcmIG9wZXJhdG9yPShjb25zdCBTdHJv
bmc8VT4mIG90aGVyKQogICAgIHsKQEAgLTEwNCw3ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgIH0KIAotICAgICAgICBzZXQoKkhhbmRsZVNldDo6
aGVhcEZvcihvdGhlci5zbG90KCkpLT5nbG9iYWxEYXRhKCksIG90aGVyLmdldCgpKTsKKyAgICAg
ICAgc2V0KCpIYW5kbGVTZXQ6OmhlYXBGb3Iob3RoZXIuc2xvdCgpKS0+dm0oKSwgb3RoZXIuZ2V0
KCkpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogICAgIApAQCAtMTE1LDcgKzExNSw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgfQogCi0gICAg
ICAgIHNldCgqSGFuZGxlU2V0OjpoZWFwRm9yKG90aGVyLnNsb3QoKSktPmdsb2JhbERhdGEoKSwg
b3RoZXIuZ2V0KCkpOworICAgICAgICBzZXQoKkhhbmRsZVNldDo6aGVhcEZvcihvdGhlci5zbG90
KCkpLT52bSgpLCBvdGhlci5nZXQoKSk7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0cm9uZ0lubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdHJvbmdJbmxpbmVzLmgJKHJldmlz
aW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0cm9uZ0lubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjkgKzI2LDI5IEBACiAjaWZuZGVmIFN0cm9uZ0lubGlu
ZXNfaAogI2RlZmluZSBTdHJvbmdJbmxpbmVzX2gKIAotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5o
IgorI2luY2x1ZGUgIlZNLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KLWlubGluZSBTdHJvbmc8VD46OlN0cm9uZyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEV4dGVybmFsVHlwZSB2YWx1ZSkKLSAgICA6IEhhbmRsZTxUPihnbG9iYWxEYXRhLmhlYXAuaGFu
ZGxlU2V0KCktPmFsbG9jYXRlKCkpCitpbmxpbmUgU3Ryb25nPFQ+OjpTdHJvbmcoVk0mIHZtLCBF
eHRlcm5hbFR5cGUgdmFsdWUpCisgICAgOiBIYW5kbGU8VD4odm0uaGVhcC5oYW5kbGVTZXQoKS0+
YWxsb2NhdGUoKSkKIHsKICAgICBzZXQodmFsdWUpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KLWlubGluZSBTdHJvbmc8VD46OlN0cm9uZyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEhh
bmRsZTxUPiBoYW5kbGUpCi0gICAgOiBIYW5kbGU8VD4oZ2xvYmFsRGF0YS5oZWFwLmhhbmRsZVNl
dCgpLT5hbGxvY2F0ZSgpKQoraW5saW5lIFN0cm9uZzxUPjo6U3Ryb25nKFZNJiB2bSwgSGFuZGxl
PFQ+IGhhbmRsZSkKKyAgICA6IEhhbmRsZTxUPih2bS5oZWFwLmhhbmRsZVNldCgpLT5hbGxvY2F0
ZSgpKQogewogICAgIHNldChoYW5kbGUuZ2V0KCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KLWlubGluZSB2b2lkIFN0cm9uZzxUPjo6c2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
RXh0ZXJuYWxUeXBlIHZhbHVlKQoraW5saW5lIHZvaWQgU3Ryb25nPFQ+OjpzZXQoVk0mIHZtLCBF
eHRlcm5hbFR5cGUgdmFsdWUpCiB7CiAgICAgaWYgKCFzbG90KCkpCi0gICAgICAgIHNldFNsb3Qo
Z2xvYmFsRGF0YS5oZWFwLmhhbmRsZVNldCgpLT5hbGxvY2F0ZSgpKTsKKyAgICAgICAgc2V0U2xv
dCh2bS5oZWFwLmhhbmRsZVNldCgpLT5hbGxvY2F0ZSgpKTsKICAgICBzZXQodmFsdWUpOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdXBlclJlZ2lvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1cGVyUmVnaW9uLmgJKHJldmlzaW9u
IDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1cGVyUmVnaW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNz
IEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwogCiBjbGFzcyBTdXBlclJlZ2lvbiA6IHB1YmxpYyBX
VEY6Ok1ldGFBbGxvY2F0b3IgewogcHVibGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvV2Vha1NldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvV2Vha1NldC5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1dlYWtTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5j
bHVkZSAiV2Vha1NldC5oIgogCiAjaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgIkpTR2xvYmFs
RGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDEyICsz
OCwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFdlYWtJbXBsKiBhbGxvY2F0ZShKU1ZhbHVlLCBX
ZWFrSGFuZGxlT3duZXIqID0gMCwgdm9pZCogY29udGV4dCA9IDApOwogICAgIHN0YXRpYyB2b2lk
IGRlYWxsb2NhdGUoV2Vha0ltcGwqKTsKIAotICAgIFdlYWtTZXQoSlNHbG9iYWxEYXRhKik7Cisg
ICAgV2Vha1NldChWTSopOwogICAgIH5XZWFrU2V0KCk7CiAgICAgdm9pZCBsYXN0Q2hhbmNlVG9G
aW5hbGl6ZSgpOwogCiAgICAgSGVhcCogaGVhcCgpIGNvbnN0OwotICAgIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSgpIGNvbnN0OworICAgIFZNKiB2bSgpIGNvbnN0OwogCiAgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3Q7CiAKQEAgLTYyLDE5ICs2MiwxOSBAQCBwcml2YXRlOgogICAgIFdlYWtCbG9j
azo6RnJlZUNlbGwqIG1fYWxsb2NhdG9yOwogICAgIFdlYWtCbG9jayogbV9uZXh0QWxsb2NhdG9y
OwogICAgIERvdWJseUxpbmtlZExpc3Q8V2Vha0Jsb2NrPiBtX2Jsb2NrczsKLSAgICBKU0dsb2Jh
bERhdGEqIG1fZ2xvYmFsRGF0YTsKKyAgICBWTSogbV92bTsKIH07CiAKLWlubGluZSBXZWFrU2V0
OjpXZWFrU2V0KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK2lubGluZSBXZWFrU2V0OjpXZWFr
U2V0KFZNKiB2bSkKICAgICA6IG1fYWxsb2NhdG9yKDApCiAgICAgLCBtX25leHRBbGxvY2F0b3Io
MCkKLSAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorICAgICwgbV92bSh2bSkKIHsKIH0K
IAotaW5saW5lIEpTR2xvYmFsRGF0YSogV2Vha1NldDo6Z2xvYmFsRGF0YSgpIGNvbnN0Citpbmxp
bmUgVk0qIFdlYWtTZXQ6OnZtKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9nbG9iYWxEYXRhOwor
ICAgIHJldHVybiBtX3ZtOwogfQogCiBpbmxpbmUgYm9vbCBXZWFrU2V0Ojppc0VtcHR5KCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9BYnN0cmFjdFBDLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQWJzdHJh
Y3RQQy5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9BYnN0cmFjdFBDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTkgKzI3LDE5IEBA
CiAjaW5jbHVkZSAiQWJzdHJhY3RQQy5oIgogCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCi0jaW5j
bHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJKU09iamVj
dC5oIgogCiAKIG5hbWVzcGFjZSBKU0MgewogCi1BYnN0cmFjdFBDOjpBYnN0cmFjdFBDKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXhlY1N0YXRlKiBleGVjKQorQWJzdHJhY3RQQzo6QWJzdHJh
Y3RQQyhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFs
RGF0YSk7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAg
ICAgCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoZ2xvYmFsRGF0YS5jYW5Vc2VKSVQoKSkgewor
ICAgIGlmICh2bS5jYW5Vc2VKSVQoKSkgewogICAgICAgICBtX3BvaW50ZXIgPSBleGVjLT5yZXR1
cm5QQygpLnZhbHVlKCk7CiAgICAgICAgIG1fbW9kZSA9IEpJVDsKICAgICAgICAgcmV0dXJuOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Fic3RyYWN0UEMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQWJzdHJhY3RQQy5o
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
QWJzdHJhY3RQQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIGNsYXNzIEV4ZWNTdGF0
ZTsKIHN0cnVjdCBJbnN0cnVjdGlvbjsKIApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgIH0KICAgICAKLSAgICBBYnN0cmFjdFBDKEpTR2xvYmFsRGF0YSYsIEV4ZWNTdGF0ZSop
OworICAgIEFic3RyYWN0UEMoVk0mLCBFeGVjU3RhdGUqKTsKICAgICAKICNpZiBFTkFCTEUoSklU
KQogICAgIEFic3RyYWN0UEMoUmV0dXJuQWRkcmVzc1B0ciBwdHIpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FjaGVkQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWNoZWRDYWxsLmgJKHJldmlzaW9uIDE0ODY1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWNoZWRDYWxsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIENh
Y2hlZENhbGwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBpbnQg
YXJndW1lbnRDb3VudCkKICAgICAgICAgICAgIDogbV92YWxpZChmYWxzZSkKICAgICAgICAgICAg
ICwgbV9pbnRlcnByZXRlcihjYWxsRnJhbWUtPmludGVycHJldGVyKCkpCi0gICAgICAgICAgICAs
IG1fZ2xvYmFsT2JqZWN0U2NvcGUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGZ1bmN0aW9uLT5z
Y29wZSgpLT5nbG9iYWxPYmplY3QoKSkKKyAgICAgICAgICAgICwgbV9nbG9iYWxPYmplY3RTY29w
ZShjYWxsRnJhbWUtPnZtKCksIGZ1bmN0aW9uLT5zY29wZSgpLT5nbG9iYWxPYmplY3QoKSkKICAg
ICAgICAgewogICAgICAgICAgICAgQVNTRVJUKCFmdW5jdGlvbi0+aXNIb3N0RnVuY3Rpb24oKSk7
CiAgICAgICAgICAgICBtX2Nsb3N1cmUgPSBtX2ludGVycHJldGVyLT5wcmVwYXJlRm9yUmVwZWF0
Q2FsbChmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCksIGNhbGxGcmFtZSwgZnVuY3Rpb24sIGFyZ3Vt
ZW50Q291bnQgKyAxLCBmdW5jdGlvbi0+c2NvcGUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDcgKzI0LDcgQEAKICNkZWZpbmUgQ2FsbEZyYW1lX2gKIAogI2luY2x1ZGUgIkFi
c3RyYWN0UEMuaCIKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJWTS5oIgog
I2luY2x1ZGUgIkpTU3RhY2suaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIK
ICNpbmNsdWRlICJSZWdpc3Rlci5oIgpAQCAtNjAsNDYgKzYwLDQ2IEBAIG5hbWVzcGFjZSBKU0Mg
IHsKICAgICAgICAgLy8gdGhlIGFjdHVhbCBET00gd2luZG93LCB3aGljaCBjYW4ndCBiZSAidGhp
cyIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuCiAgICAgICAgIEpTT2JqZWN0KiBnbG9iYWxUaGlzVmFs
dWUoKSBjb25zdDsKIAotICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEoKSBjb25zdDsK
KyAgICAgICAgVk0mIHZtKCkgY29uc3Q7CiAKICAgICAgICAgLy8gQ29udmVuaWVuY2UgZnVuY3Rp
b25zIGZvciBhY2Nlc3MgdG8gZ2xvYmFsIGRhdGEuCiAgICAgICAgIC8vIEl0IHRha2VzIGEgZmV3
IG1lbW9yeSByZWZlcmVuY2VzIHRvIGdldCBmcm9tIGEgY2FsbCBmcmFtZSB0byB0aGUgZ2xvYmFs
IGRhdGEKICAgICAgICAgLy8gcG9pbnRlciwgc28gdGhlc2UgYXJlIGluZWZmaWNpZW50LCBhbmQg
c2hvdWxkIGJlIHVzZWQgc3BhcmluZ2x5IGluIG5ldyBjb2RlLgogICAgICAgICAvLyBCdXQgdGhl
eSdyZSB1c2VkIGluIG1hbnkgcGxhY2VzIGluIGxlZ2FjeSBjb2RlLCBzbyB0aGV5J3JlIG5vdCBn
b2luZyBhd2F5IGFueSB0aW1lIHNvb24uCiAKLSAgICAgICAgdm9pZCBjbGVhckV4Y2VwdGlvbigp
IHsgZ2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IEpTVmFsdWUoKTsgfQorICAgICAgICB2b2lkIGNs
ZWFyRXhjZXB0aW9uKCkgeyB2bSgpLmV4Y2VwdGlvbiA9IEpTVmFsdWUoKTsgfQogICAgICAgICB2
b2lkIGNsZWFyU3VwcGxlbWVudGFyeUV4Y2VwdGlvbkluZm8oKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBnbG9iYWxEYXRhKCkuZXhjZXB0aW9uU3RhY2sgPSBSZWZDb3VudGVkQXJyYXk8U3RhY2tG
cmFtZT4oKTsKKyAgICAgICAgICAgIHZtKCkuZXhjZXB0aW9uU3RhY2sgPSBSZWZDb3VudGVkQXJy
YXk8U3RhY2tGcmFtZT4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9u
KCkgY29uc3QgeyByZXR1cm4gZ2xvYmFsRGF0YSgpLmV4Y2VwdGlvbjsgfQotICAgICAgICBib29s
IGhhZEV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIGdsb2JhbERhdGEoKS5leGNlcHRpb247IH0K
KyAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24oKSBjb25zdCB7IHJldHVybiB2bSgpLmV4Y2VwdGlv
bjsgfQorICAgICAgICBib29sIGhhZEV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIHZtKCkuZXhj
ZXB0aW9uOyB9CiAKLSAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFt
ZXMoKSBjb25zdCB7IHJldHVybiAqZ2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXM7IH0KLSAgICAg
ICAgY29uc3QgTWFya2VkQXJndW1lbnRCdWZmZXImIGVtcHR5TGlzdCgpIGNvbnN0IHsgcmV0dXJu
ICpnbG9iYWxEYXRhKCkuZW1wdHlMaXN0OyB9Ci0gICAgICAgIEludGVycHJldGVyKiBpbnRlcnBy
ZXRlcigpIHsgcmV0dXJuIGdsb2JhbERhdGEoKS5pbnRlcnByZXRlcjsgfQotICAgICAgICBIZWFw
KiBoZWFwKCkgeyByZXR1cm4gJmdsb2JhbERhdGEoKS5oZWFwOyB9CisgICAgICAgIGNvbnN0IENv
bW1vbklkZW50aWZpZXJzJiBwcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gKnZtKCkucHJv
cGVydHlOYW1lczsgfQorICAgICAgICBjb25zdCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYgZW1wdHlM
aXN0KCkgY29uc3QgeyByZXR1cm4gKnZtKCkuZW1wdHlMaXN0OyB9CisgICAgICAgIEludGVycHJl
dGVyKiBpbnRlcnByZXRlcigpIHsgcmV0dXJuIHZtKCkuaW50ZXJwcmV0ZXI7IH0KKyAgICAgICAg
SGVhcCogaGVhcCgpIHsgcmV0dXJuICZ2bSgpLmhlYXA7IH0KICNpZm5kZWYgTkRFQlVHCiAgICAg
ICAgIHZvaWQgZHVtcENhbGxlcigpOwogI2VuZGlmCi0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNo
VGFibGUqIGFycmF5Q29uc3RydWN0b3JUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1
cm4gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuYXJyYXlDb25zdHJ1Y3RvclRhYmxlOyB9Ci0gICAg
ICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGFycmF5UHJvdG90eXBlVGFibGUoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmFycmF5UHJvdG90
eXBlVGFibGU7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogYm9vbGVhblByb3Rv
dHlwZVRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKS5ib29sZWFuUHJvdG90eXBlVGFibGU7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IEhh
c2hUYWJsZSogZGF0ZVRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJh
bWUtPmdsb2JhbERhdGEoKS5kYXRlVGFibGU7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hU
YWJsZSogZGF0ZUNvbnN0cnVjdG9yVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJu
IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmRhdGVDb25zdHJ1Y3RvclRhYmxlOyB9Ci0gICAgICAg
IHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGVycm9yUHJvdG90eXBlVGFibGUoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVycm9yUHJvdG90eXBl
VGFibGU7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZ2xvYmFsT2JqZWN0VGFi
bGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
Lmdsb2JhbE9iamVjdFRhYmxlOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGpz
b25UYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCkuanNvblRhYmxlOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIG1hdGhU
YWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT5nbG9iYWxEYXRh
KCkubWF0aFRhYmxlOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIG51bWJlckNv
bnN0cnVjdG9yVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLm51bWJlckNvbnN0cnVjdG9yVGFibGU7IH0KLSAgICAgICAgc3RhdGljIGNv
bnN0IEhhc2hUYWJsZSogbnVtYmVyUHJvdG90eXBlVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
IHsgcmV0dXJuIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLm51bWJlclByb3RvdHlwZVRhYmxlOyB9
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIG9iamVjdENvbnN0cnVjdG9yVGFibGUo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLm9i
amVjdENvbnN0cnVjdG9yVGFibGU7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSog
cHJpdmF0ZU5hbWVQcm90b3R5cGVUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4g
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkucHJpdmF0ZU5hbWVQcm90b3R5cGVUYWJsZTsgfQotICAg
ICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiByZWdFeHBUYWJsZShDYWxsRnJhbWUqIGNhbGxG
cmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkucmVnRXhwVGFibGU7IH0KLSAg
ICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogcmVnRXhwQ29uc3RydWN0b3JUYWJsZShDYWxs
RnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkucmVnRXhw
Q29uc3RydWN0b3JUYWJsZTsgfQotICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiByZWdF
eHBQcm90b3R5cGVUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCkucmVnRXhwUHJvdG90eXBlVGFibGU7IH0KLSAgICAgICAgc3RhdGljIGNv
bnN0IEhhc2hUYWJsZSogc3RyaW5nQ29uc3RydWN0b3JUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkgeyByZXR1cm4gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuc3RyaW5nQ29uc3RydWN0b3JUYWJs
ZTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBhcnJheUNvbnN0cnVjdG9yVGFi
bGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5hcnJheUNv
bnN0cnVjdG9yVGFibGU7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogYXJyYXlQ
cm90b3R5cGVUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52
bSgpLmFycmF5UHJvdG90eXBlVGFibGU7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJs
ZSogYm9vbGVhblByb3RvdHlwZVRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBj
YWxsRnJhbWUtPnZtKCkuYm9vbGVhblByb3RvdHlwZVRhYmxlOyB9CisgICAgICAgIHN0YXRpYyBj
b25zdCBIYXNoVGFibGUqIGRhdGVUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4g
Y2FsbEZyYW1lLT52bSgpLmRhdGVUYWJsZTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRh
YmxlKiBkYXRlQ29uc3RydWN0b3JUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4g
Y2FsbEZyYW1lLT52bSgpLmRhdGVDb25zdHJ1Y3RvclRhYmxlOyB9CisgICAgICAgIHN0YXRpYyBj
b25zdCBIYXNoVGFibGUqIGVycm9yUHJvdG90eXBlVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
IHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5lcnJvclByb3RvdHlwZVRhYmxlOyB9CisgICAgICAg
IHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGdsb2JhbE9iamVjdFRhYmxlKENhbGxGcmFtZSogY2Fs
bEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuZ2xvYmFsT2JqZWN0VGFibGU7IH0KKyAg
ICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSoganNvblRhYmxlKENhbGxGcmFtZSogY2FsbEZy
YW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuanNvblRhYmxlOyB9CisgICAgICAgIHN0YXRp
YyBjb25zdCBIYXNoVGFibGUqIG1hdGhUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1
cm4gY2FsbEZyYW1lLT52bSgpLm1hdGhUYWJsZTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgSGFz
aFRhYmxlKiBudW1iZXJDb25zdHJ1Y3RvclRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJl
dHVybiBjYWxsRnJhbWUtPnZtKCkubnVtYmVyQ29uc3RydWN0b3JUYWJsZTsgfQorICAgICAgICBz
dGF0aWMgY29uc3QgSGFzaFRhYmxlKiBudW1iZXJQcm90b3R5cGVUYWJsZShDYWxsRnJhbWUqIGNh
bGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLm51bWJlclByb3RvdHlwZVRhYmxlOyB9
CisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIG9iamVjdENvbnN0cnVjdG9yVGFibGUo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5vYmplY3RDb25z
dHJ1Y3RvclRhYmxlOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIHByaXZhdGVO
YW1lUHJvdG90eXBlVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFt
ZS0+dm0oKS5wcml2YXRlTmFtZVByb3RvdHlwZVRhYmxlOyB9CisgICAgICAgIHN0YXRpYyBjb25z
dCBIYXNoVGFibGUqIHJlZ0V4cFRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBj
YWxsRnJhbWUtPnZtKCkucmVnRXhwVGFibGU7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hU
YWJsZSogcmVnRXhwQ29uc3RydWN0b3JUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1
cm4gY2FsbEZyYW1lLT52bSgpLnJlZ0V4cENvbnN0cnVjdG9yVGFibGU7IH0KKyAgICAgICAgc3Rh
dGljIGNvbnN0IEhhc2hUYWJsZSogcmVnRXhwUHJvdG90eXBlVGFibGUoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5yZWdFeHBQcm90b3R5cGVUYWJsZTsgfQor
ICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBzdHJpbmdDb25zdHJ1Y3RvclRhYmxlKENh
bGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuc3RyaW5nQ29uc3Ry
dWN0b3JUYWJsZTsgfQogCiAgICAgICAgIHN0YXRpYyBDYWxsRnJhbWUqIGNyZWF0ZShSZWdpc3Rl
ciogY2FsbEZyYW1lQmFzZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbEZyYW1lKj4oY2FsbEZy
YW1lQmFzZSk7IH0KICAgICAgICAgUmVnaXN0ZXIqIHJlZ2lzdGVycygpIHsgcmV0dXJuIHRoaXM7
IH0KQEAgLTExMiw3ICsxMTIsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIGJvb2wgaGFz
UmV0dXJuUEMoKSBjb25zdCB7IHJldHVybiAhIXRoaXNbSlNTdGFjazo6UmV0dXJuUENdLnZQQygp
OyB9CiAgICAgICAgIHZvaWQgY2xlYXJSZXR1cm5QQygpIHsgcmVnaXN0ZXJzKClbSlNTdGFjazo6
UmV0dXJuUENdID0gc3RhdGljX2Nhc3Q8SW5zdHJ1Y3Rpb24qPigwKTsgfQogI2VuZGlmCi0gICAg
ICAgIEFic3RyYWN0UEMgYWJzdHJhY3RSZXR1cm5QQyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
IHsgcmV0dXJuIEFic3RyYWN0UEMoZ2xvYmFsRGF0YSwgdGhpcyk7IH0KKyAgICAgICAgQWJzdHJh
Y3RQQyBhYnN0cmFjdFJldHVyblBDKFZNJiB2bSkgeyByZXR1cm4gQWJzdHJhY3RQQyh2bSwgdGhp
cyk7IH0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldEZvck5vbkRGR0NvZGUoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRCeXRlY29kZU9mZnNl
dEZvck5vbkRGR0NvZGUodW5zaWduZWQgb2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVDbG9zdXJlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUNsb3N1cmUuaAkocmV2aXNpb24g
MTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUNs
b3N1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBzdHJ1Y3QgQ2FsbEZyYW1l
Q2xvc3VyZSB7CiAgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWU7CiAgICAgSlNGdW5jdGlvbiog
ZnVuY3Rpb247CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGU7Ci0g
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhOworICAgIFZNKiB2bTsKICAgICBKU1Njb3BlKiBz
Y29wZTsKICAgICBpbnQgcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOwogICAgIGludCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTk5LDcgKzE5OSw3IEBAIEludGVycHJldGVyOjpTdGFja1BvbGljeTo6U3RhY2tQ
b2xpY3koSW4KIH0KIAogCi1zdGF0aWMgQ2FsbEZyYW1lKiBnZXRDYWxsZXJJbmZvKEpTR2xvYmFs
RGF0YSosIENhbGxGcmFtZSosIHVuc2lnbmVkJiBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKiYg
Y2FsbGVyT3V0KTsKK3N0YXRpYyBDYWxsRnJhbWUqIGdldENhbGxlckluZm8oVk0qLCBDYWxsRnJh
bWUqLCB1bnNpZ25lZCYgYnl0ZWNvZGVPZmZzZXQsIENvZGVCbG9jayomIGNhbGxlck91dCk7CiAK
IC8vIFJldHVybnMgdGhlIGRlcHRoIG9mIHRoZSBzY29wZSBjaGFpbiB3aXRoaW4gYSBnaXZlbiBj
YWxsIGZyYW1lLgogc3RhdGljIGludCBkZXB0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNTY29w
ZSogc2MpCkBAIC0yMTgsNyArMjE4LDcgQEAgSlNWYWx1ZSBldmFsKENhbGxGcmFtZSogY2FsbEZy
YW1lKQogICAgIGlmICghcHJvZ3JhbS5pc1N0cmluZygpKQogICAgICAgICByZXR1cm4gcHJvZ3Jh
bTsKICAgICAKLSAgICBUb3BDYWxsRnJhbWVTZXR0ZXIgdG9wQ2FsbEZyYW1lKGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUpOworICAgIFRvcENhbGxGcmFtZVNldHRlciB0b3BDYWxs
RnJhbWUoY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUpOwogICAgIFN0cmluZyBwcm9ncmFtU291
cmNlID0gYXNTdHJpbmcocHJvZ3JhbSktPnZhbHVlKGNhbGxGcmFtZSk7CiAgICAgaWYgKGNhbGxG
cmFtZS0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CkBAIC0yNDQs
NyArMjQ0LDcgQEAgSlNWYWx1ZSBldmFsKENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICAvLyBJZiB0aGUgbGl0ZXJhbCBwYXJzZXIgYmFpbGVkLCBpdCBz
aG91bGQgbm90IGhhdmUgdGhyb3duIGV4Y2VwdGlvbnMuCi0gICAgICAgIEFTU0VSVCghY2FsbEZy
YW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uKTsKKyAgICAgICAgQVNTRVJUKCFjYWxsRnJhbWUt
PnZtKCkuZXhjZXB0aW9uKTsKIAogICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlOwogICAg
ICAgICBldmFsID0gY2FsbGVyQ29kZUJsb2NrLT5ldmFsQ29kZUNhY2hlKCkuZ2V0U2xvdyhjYWxs
RnJhbWUsIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlckNvZGVCbG9j
ay0+aXNTdHJpY3RNb2RlKCksIHByb2dyYW1Tb3VyY2UsIGNhbGxlclNjb3BlQ2hhaW4sIGV4Y2Vw
dGlvblZhbHVlKTsKQEAgLTI1Niw3ICsyNTYsNyBAQCBKU1ZhbHVlIGV2YWwoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiAKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxlckZyYW1lLT50aGlzVmFs
dWUoKTsKICAgICBBU1NFUlQoaXNWYWxpZFRoaXNPYmplY3QodGhpc1ZhbHVlLCBjYWxsRnJhbWUp
KTsKLSAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEo
KS5pbnRlcnByZXRlcjsKKyAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBjYWxsRnJhbWUt
PnZtKCkuaW50ZXJwcmV0ZXI7CiAgICAgcmV0dXJuIGludGVycHJldGVyLT5leGVjdXRlKGV2YWws
IGNhbGxGcmFtZSwgdGhpc1ZhbHVlLCBjYWxsZXJTY29wZUNoYWluKTsKIH0KIApAQCAtMjY2LDcg
KzI2Niw3IEBAIENhbGxGcmFtZSogbG9hZFZhcmFyZ3MoQ2FsbEZyYW1lKiBjYWxsRnIKICAgICAg
ICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCk7CiAgICAgICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1l
ID0gQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIGZpcnN0RnJlZVJl
Z2lzdGVyICsgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBKU1N0YWNrOjpDYWxsRnJhbWVI
ZWFkZXJTaXplKTsKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID4gQXJn
dW1lbnRzOjpNYXhBcmd1bWVudHMgKyAxIHx8ICFzdGFjay0+Z3JvdyhuZXdDYWxsRnJhbWUtPnJl
Z2lzdGVycygpKSkgewotICAgICAgICAgICAgY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0
aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CisgICAgICAgICAgICBj
YWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxG
cmFtZSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogCkBAIC0yODAsNyArMjgw
LDcgQEAgQ2FsbEZyYW1lKiBsb2FkVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxGcgogICAgIGlmIChh
cmd1bWVudHMuaXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAgICBDYWxsRnJhbWUqIG5ld0Nh
bGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBmaXJz
dEZyZWVSZWdpc3RlciArIDEgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplKTsKICAgICAg
ICAgaWYgKCFzdGFjay0+Z3JvdyhuZXdDYWxsRnJhbWUtPnJlZ2lzdGVycygpKSkgewotICAgICAg
ICAgICAgY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVy
Zmxvd0Vycm9yKGNhbGxGcmFtZSk7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnZtKCkuZXhjZXB0
aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CiAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICBuZXdDYWxsRnJhbWUtPnNldEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKDEpOwpAQCAtMjg5LDcgKzI4OSw3IEBAIENhbGxGcmFtZSogbG9hZFZh
cmFyZ3MoQ2FsbEZyYW1lKiBjYWxsRnIKICAgICB9CiAKICAgICBpZiAoIWFyZ3VtZW50cy5pc09i
amVjdCgpKSB7Ci0gICAgICAgIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGNy
ZWF0ZUludmFsaWRQYXJhbUVycm9yKGNhbGxGcmFtZSwgIkZ1bmN0aW9uLnByb3RvdHlwZS5hcHBs
eSIsIGFyZ3VtZW50cyk7CisgICAgICAgIGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24gPSBjcmVh
dGVJbnZhbGlkUGFyYW1FcnJvcihjYWxsRnJhbWUsICJGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHki
LCBhcmd1bWVudHMpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTI5OCw3ICsyOTgs
NyBAQCBDYWxsRnJhbWUqIGxvYWRWYXJhcmdzKENhbGxGcmFtZSogY2FsbEZyCiAgICAgICAgIHVu
c2lnbmVkIGFyZ0NvdW50ID0gYXJnc09iamVjdC0+bGVuZ3RoKGNhbGxGcmFtZSk7CiAgICAgICAg
IENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5y
ZWdpc3RlcnMoKSArIGZpcnN0RnJlZVJlZ2lzdGVyICsgQ2FsbEZyYW1lOjpvZmZzZXRGb3IoYXJn
Q291bnQgKyAxKSk7CiAgICAgICAgIGlmIChhcmdDb3VudCA+IEFyZ3VtZW50czo6TWF4QXJndW1l
bnRzIHx8ICFzdGFjay0+Z3JvdyhuZXdDYWxsRnJhbWUtPnJlZ2lzdGVycygpKSkgewotICAgICAg
ICAgICAgY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVy
Zmxvd0Vycm9yKGNhbGxGcmFtZSk7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnZtKCkuZXhjZXB0
aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CiAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICBuZXdDYWxsRnJhbWUtPnNldEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKGFyZ0NvdW50ICsgMSk7CkBAIC0zMTIsNyArMzEyLDcgQEAgQ2FsbEZy
YW1lKiBsb2FkVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxGcgogICAgICAgICB1bnNpZ25lZCBhcmdD
b3VudCA9IGFycmF5LT5sZW5ndGgoKTsKICAgICAgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUg
PSBDYWxsRnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgZmlyc3RGcmVlUmVn
aXN0ZXIgKyBDYWxsRnJhbWU6Om9mZnNldEZvcihhcmdDb3VudCArIDEpKTsKICAgICAgICAgaWYg
KGFyZ0NvdW50ID4gQXJndW1lbnRzOjpNYXhBcmd1bWVudHMgfHwgIXN0YWNrLT5ncm93KG5ld0Nh
bGxGcmFtZS0+cmVnaXN0ZXJzKCkpKSB7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPmdsb2JhbERh
dGEoKS5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKKyAg
ICAgICAgICAgIGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93
RXJyb3IoY2FsbEZyYW1lKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAg
ICAgIG5ld0NhbGxGcmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYXJnQ291bnQg
KyAxKTsKQEAgLTMyNSwyMiArMzI1LDIyIEBAIENhbGxGcmFtZSogbG9hZFZhcmFyZ3MoQ2FsbEZy
YW1lKiBjYWxsRnIKICAgICB1bnNpZ25lZCBhcmdDb3VudCA9IGFyZ09iamVjdC0+Z2V0KGNhbGxG
cmFtZSwgY2FsbEZyYW1lLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihjYWxsRnJh
bWUpOwogICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUoY2Fs
bEZyYW1lLT5yZWdpc3RlcnMoKSArIGZpcnN0RnJlZVJlZ2lzdGVyICsgQ2FsbEZyYW1lOjpvZmZz
ZXRGb3IoYXJnQ291bnQgKyAxKSk7CiAgICAgaWYgKGFyZ0NvdW50ID4gQXJndW1lbnRzOjpNYXhB
cmd1bWVudHMgfHwgIXN0YWNrLT5ncm93KG5ld0NhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpKSB7Ci0g
ICAgICAgIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3Zl
cmZsb3dFcnJvcihjYWxsRnJhbWUpOworICAgICAgICBjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9u
ID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KICAgICBuZXdDYWxsRnJhbWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KGFyZ0NvdW50ICsgMSk7CiAgICAgbmV3Q2FsbEZyYW1lLT5zZXRUaGlzVmFsdWUodGhpc1ZhbHVl
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpIHsKICAgICAgICAg
bmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCBhc09iamVjdChhcmd1bWVudHMpLT5nZXQoY2Fs
bEZyYW1lLCBpKSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmdsb2JhbERhdGEo
KS5leGNlcHRpb24pKQorICAgICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT52bSgpLmV4Y2Vw
dGlvbikpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgcmV0dXJuIG5ld0NhbGxG
cmFtZTsKIH0KIAotSW50ZXJwcmV0ZXI6OkludGVycHJldGVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKK0ludGVycHJldGVyOjpJbnRlcnByZXRlcihWTSYgdm0pCiAgICAgOiBtX3NhbXBsZUVu
dHJ5RGVwdGgoMCkKLSAgICAsIG1fc3RhY2soZ2xvYmFsRGF0YSkKKyAgICAsIG1fc3RhY2sodm0p
CiAgICAgLCBtX2Vycm9ySGFuZGxpbmdNb2RlUmVlbnRyeSgwKQogI2lmICFBU1NFUlRfRElTQUJM
RUQKICAgICAsIG1faW5pdGlhbGl6ZWQoZmFsc2UpCkBAIC00MTYsMTQgKzQxNiwxNCBAQCB2b2lk
IEludGVycHJldGVyOjpkdW1wUmVnaXN0ZXJzKENhbGxGcmFtCiAgICAgZGF0YUxvZ0YoIltTY29w
ZUNoYWluXSAgICAgICAgICAgICAgIHwgJTEwcCB8ICVwIFxuIiwgaXQsIGNhbGxGcmFtZS0+c2Nv
cGUoKSk7CiAgICAgKytpdDsKICNpZiBFTkFCTEUoSklUKQotICAgIEFic3RyYWN0UEMgcGMgPSBj
YWxsRnJhbWUtPmFic3RyYWN0UmV0dXJuUEMoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOworICAg
IEFic3RyYWN0UEMgcGMgPSBjYWxsRnJhbWUtPmFic3RyYWN0UmV0dXJuUEMoY2FsbEZyYW1lLT52
bSgpKTsKICAgICBpZiAocGMuaGFzSklUUmV0dXJuQWRkcmVzcygpKQogICAgICAgICBkYXRhTG9n
RigiW1JldHVybkpJVFBDXSAgICAgICAgICAgICAgfCAlMTBwIHwgJXAgXG4iLCBpdCwgcGMuaml0
UmV0dXJuQWRkcmVzcygpLnZhbHVlKCkpOwogI2VuZGlmCiAgICAgdW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQgPSAwOwogICAgIGludCBsaW5lID0gMDsKICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVC
bG9jayA9IDA7Ci0gICAgZ2V0Q2FsbGVySW5mbygmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNh
bGxGcmFtZSwgYnl0ZWNvZGVPZmZzZXQsIGNhbGxlckNvZGVCbG9jayk7CisgICAgZ2V0Q2FsbGVy
SW5mbygmY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUsIGJ5dGVjb2RlT2Zmc2V0LCBjYWxsZXJD
b2RlQmxvY2spOwogICAgIGxpbmUgPSBjYWxsZXJDb2RlQmxvY2stPmxpbmVOdW1iZXJGb3JCeXRl
Y29kZU9mZnNldChieXRlY29kZU9mZnNldCk7CiAgICAgZGF0YUxvZ0YoIltSZXR1cm5WUENdICAg
ICAgICAgICAgICAgIHwgJTEwcCB8ICVkIChsaW5lICVkKVxuIiwgaXQsIGJ5dGVjb2RlT2Zmc2V0
LCBsaW5lKTsKICAgICArK2l0OwpAQCAtNDkyLDcgKzQ5Miw3IEBAIE5FVkVSX0lOTElORSBib29s
IEludGVycHJldGVyOjp1bndpbmRDYWwKICAgICBpZiAob2xkQ29kZUJsb2NrLT5jb2RlVHlwZSgp
ID09IEZ1bmN0aW9uQ29kZSAmJiBvbGRDb2RlQmxvY2stPm5lZWRzQWN0aXZhdGlvbigpKSB7CiAg
ICAgICAgIGFjdGl2YXRpb24gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob2xkQ29kZUJsb2NrLT5h
Y3RpdmF0aW9uUmVnaXN0ZXIoKSkuanNWYWx1ZSgpOwogICAgICAgICBpZiAoYWN0aXZhdGlvbikK
LSAgICAgICAgICAgIGpzQ2FzdDxKU0FjdGl2YXRpb24qPihhY3RpdmF0aW9uKS0+dGVhck9mZigq
c2NvcGUtPmdsb2JhbERhdGEoKSk7CisgICAgICAgICAgICBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4o
YWN0aXZhdGlvbiktPnRlYXJPZmYoKnNjb3BlLT52bSgpKTsKICAgICB9CiAKICAgICBpZiAob2xk
Q29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBvbGRDb2RlQmxvY2stPnVz
ZXNBcmd1bWVudHMoKSkgewpAQCAtNTA1LDEwICs1MDUsMTAgQEAgTkVWRVJfSU5MSU5FIGJvb2wg
SW50ZXJwcmV0ZXI6OnVud2luZENhbAogICAgIH0KIAogICAgIENhbGxGcmFtZSogY2FsbGVyRnJh
bWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgY2FsbEZyYW1lLT5nbG9iYWxEYXRh
KCkudG9wQ2FsbEZyYW1lID0gY2FsbGVyRnJhbWU7CisgICAgY2FsbEZyYW1lLT52bSgpLnRvcENh
bGxGcmFtZSA9IGNhbGxlckZyYW1lOwogICAgIGlmIChjYWxsZXJGcmFtZS0+aGFzSG9zdENhbGxG
cmFtZUZsYWcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNhbGxGcmFtZSA9IGdldENh
bGxlckluZm8oJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUsIGJ5dGVjb2RlT2Zm
c2V0LCBjb2RlQmxvY2spOworICAgIGNhbGxGcmFtZSA9IGdldENhbGxlckluZm8oJmNhbGxGcmFt
ZS0+dm0oKSwgY2FsbEZyYW1lLCBieXRlY29kZU9mZnNldCwgY29kZUJsb2NrKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtNTMzLDggKzUzMyw4IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFNvdXJj
ZVRvRXJyb3IoQ2FsbEZyYW0KICAgICBpZiAoIWV4cHJlc3Npb25TdG9wIHx8IGV4cHJlc3Npb25T
dGFydCA+IHN0YXRpY19jYXN0PGludD4oc291cmNlU3RyaW5nLmxlbmd0aCgpKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmNhbGxGcmFtZS0+Z2xv
YmFsRGF0YSgpOwotICAgIEpTVmFsdWUganNNZXNzYWdlID0gZXhjZXB0aW9uLT5nZXREaXJlY3Qo
Kmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPm1lc3NhZ2UpOworICAgIFZN
KiB2bSA9ICZjYWxsRnJhbWUtPnZtKCk7CisgICAgSlNWYWx1ZSBqc01lc3NhZ2UgPSBleGNlcHRp
b24tPmdldERpcmVjdCgqdm0sIHZtLT5wcm9wZXJ0eU5hbWVzLT5tZXNzYWdlKTsKICAgICBpZiAo
IWpzTWVzc2FnZSB8fCAhanNNZXNzYWdlLmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybjsKIApA
QCAtNTYxLDcgKzU2MSw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFNvdXJjZVRvRXJyb3IoQ2FsbEZy
YW0KICAgICAgICAgbWVzc2FnZSA9IG1ha2VTdHJpbmcobWVzc2FnZSwgIiAobmVhciAnLi4uIiwg
Y29kZUJsb2NrLT5zb3VyY2UoKS0+Z2V0UmFuZ2Uoc3RhcnQsIHN0b3ApLCAiLi4uJykiKTsKICAg
ICB9CiAKLSAgICBleGNlcHRpb24tPnB1dERpcmVjdCgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+
cHJvcGVydHlOYW1lcy0+bWVzc2FnZSwganNTdHJpbmcoZ2xvYmFsRGF0YSwgbWVzc2FnZSkpOwor
ICAgIGV4Y2VwdGlvbi0+cHV0RGlyZWN0KCp2bSwgdm0tPnByb3BlcnR5TmFtZXMtPm1lc3NhZ2Us
IGpzU3RyaW5nKHZtLCBtZXNzYWdlKSk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBnZXRCeXRlY29k
ZU9mZnNldEZvckNhbGxGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTU4MSw5ICs1ODEs
OSBAQCBzdGF0aWMgdW5zaWduZWQgZ2V0Qnl0ZWNvZGVPZmZzZXRGb3JDYWxsCiAjZW5kaWYKIH0K
IAotc3RhdGljIENhbGxGcmFtZSogZ2V0Q2FsbGVySW5mbyhKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIENhbGxGcmFtZSogY2FsbEZyYW1lLCB1bnNpZ25lZCYgYnl0ZWNvZGVPZmZzZXQsIENvZGVC
bG9jayomIGNhbGxlcikKK3N0YXRpYyBDYWxsRnJhbWUqIGdldENhbGxlckluZm8oVk0qIHZtLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgdW5zaWduZWQmIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sq
JiBjYWxsZXIpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhKTsK
KyAgICBBU1NFUlRfVU5VU0VEKHZtLCB2bSk7CiAgICAgYnl0ZWNvZGVPZmZzZXQgPSAwOwogICAg
IEFTU0VSVCghY2FsbEZyYW1lLT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpKTsKICAgICBDYWxsRnJh
bWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKSA/IGNhbGxGcmFtZS0+dHJ1
ZUNhbGxlckZyYW1lKCkgOiBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPnJlbW92ZUhvc3RDYWxs
RnJhbWVGbGFnKCk7CkBAIC03MTksOSArNzE5LDkgQEAgU3RyaW5nIFN0YWNrRnJhbWU6OnRvU3Ry
aW5nKENhbGxGcmFtZSogYwogICAgIHJldHVybiB0cmFjZUJ1aWxkLnRvU3RyaW5nKCkuaW1wbCgp
OwogfQogCi12b2lkIEludGVycHJldGVyOjpnZXRTdGFja1RyYWNlKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgVmVjdG9yPFN0YWNrRnJhbWU+JiByZXN1bHRzLCBzaXplX3QgbWF4U3RhY2tTaXpl
KQordm9pZCBJbnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFjZShWTSogdm0sIFZlY3RvcjxTdGFja0Zy
YW1lPiYgcmVzdWx0cywgc2l6ZV90IG1heFN0YWNrU2l6ZSkKIHsKLSAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IGdsb2JhbERhdGEtPnRvcENhbGxGcmFtZS0+cmVtb3ZlSG9zdENhbGxGcmFtZUZs
YWcoKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHZtLT50b3BDYWxsRnJhbWUtPnJlbW92
ZUhvc3RDYWxsRnJhbWVGbGFnKCk7CiAgICAgaWYgKCFjYWxsRnJhbWUgfHwgY2FsbEZyYW1lID09
IENhbGxGcmFtZTo6bm9DYWxsZXIoKSkgCiAgICAgICAgIHJldHVybjsKICAgICB1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCA9IGdldEJ5dGVjb2RlT2Zmc2V0Rm9yQ2FsbEZyYW1lKGNhbGxGcmFtZSk7
CkBAIC03MzUsMTAgKzczNSwxMCBAQCB2b2lkIEludGVycHJldGVyOjpnZXRTdGFja1RyYWNlKEpT
R2xvYmFsCiAgICAgICAgIGlmIChjYWxsZXJDb2RlQmxvY2spIHsKICAgICAgICAgICAgIHNvdXJj
ZVVSTCA9IGdldFNvdXJjZVVSTEZyb21DYWxsRnJhbWUoY2FsbEZyYW1lKTsKICAgICAgICAgICAg
IFN0YWNrRnJhbWUgcyA9IHsKLSAgICAgICAgICAgICAgICBTdHJvbmc8SlNPYmplY3Q+KCpnbG9i
YWxEYXRhLCBjYWxsRnJhbWUtPmNhbGxlZSgpKSwKKyAgICAgICAgICAgICAgICBTdHJvbmc8SlNP
YmplY3Q+KCp2bSwgY2FsbEZyYW1lLT5jYWxsZWUoKSksCiAgICAgICAgICAgICAgICAgZ2V0U3Rh
Y2tGcmFtZUNvZGVUeXBlKGNhbGxGcmFtZSksCi0gICAgICAgICAgICAgICAgU3Ryb25nPEV4ZWN1
dGFibGVCYXNlPigqZ2xvYmFsRGF0YSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSksCi0gICAgICAgICAgICAgICAgU3Ryb25nPFVubGlua2VkQ29kZUJsb2NrPigqZ2xvYmFsRGF0
YSwgY2FsbGVyQ29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpKSwKKyAgICAgICAgICAgICAg
ICBTdHJvbmc8RXhlY3V0YWJsZUJhc2U+KCp2bSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSksCisgICAgICAgICAgICAgICAgU3Ryb25nPFVubGlua2VkQ29kZUJsb2NrPigqdm0s
IGNhbGxlckNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSksCiAgICAgICAgICAgICAgICAg
Y2FsbGVyQ29kZUJsb2NrLT5zb3VyY2UoKSwKICAgICAgICAgICAgICAgICBjYWxsZXJDb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLT5saW5lTm8oKSwKICAgICAgICAgICAgICAgICBjYWxsZXJD
b2RlQmxvY2stPnNvdXJjZU9mZnNldCgpLApAQCAtNzQ3LDI4ICs3NDcsMjggQEAgdm9pZCBJbnRl
cnByZXRlcjo6Z2V0U3RhY2tUcmFjZShKU0dsb2JhbAogICAgICAgICAgICAgfTsKICAgICAgICAg
ICAgIHJlc3VsdHMuYXBwZW5kKHMpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3Rh
Y2tGcmFtZSBzID0geyBTdHJvbmc8SlNPYmplY3Q+KCpnbG9iYWxEYXRhLCBjYWxsRnJhbWUtPmNh
bGxlZSgpKSwgU3RhY2tGcmFtZU5hdGl2ZUNvZGUsIFN0cm9uZzxFeGVjdXRhYmxlQmFzZT4oKSwg
U3Ryb25nPFVubGlua2VkQ29kZUJsb2NrPigpLCAwLCAwLCAwLCAwLCBTdHJpbmcoKX07CisgICAg
ICAgICAgICBTdGFja0ZyYW1lIHMgPSB7IFN0cm9uZzxKU09iamVjdD4oKnZtLCBjYWxsRnJhbWUt
PmNhbGxlZSgpKSwgU3RhY2tGcmFtZU5hdGl2ZUNvZGUsIFN0cm9uZzxFeGVjdXRhYmxlQmFzZT4o
KSwgU3Ryb25nPFVubGlua2VkQ29kZUJsb2NrPigpLCAwLCAwLCAwLCAwLCBTdHJpbmcoKX07CiAg
ICAgICAgICAgICByZXN1bHRzLmFwcGVuZChzKTsKICAgICAgICAgfQotICAgICAgICBjYWxsRnJh
bWUgPSBnZXRDYWxsZXJJbmZvKGdsb2JhbERhdGEsIGNhbGxGcmFtZSwgYnl0ZWNvZGVPZmZzZXQs
IGNhbGxlckNvZGVCbG9jayk7CisgICAgICAgIGNhbGxGcmFtZSA9IGdldENhbGxlckluZm8odm0s
IGNhbGxGcmFtZSwgYnl0ZWNvZGVPZmZzZXQsIGNhbGxlckNvZGVCbG9jayk7CiAgICAgfQogfQog
CiB2b2lkIEludGVycHJldGVyOjphZGRTdGFja1RyYWNlSWZOZWNlc3NhcnkoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIEpTVmFsdWUgZXJyb3IpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpOwotICAgIEFTU0VSVChjYWxsRnJhbWUgPT0gZ2xv
YmFsRGF0YS0+dG9wQ2FsbEZyYW1lIHx8IGNhbGxGcmFtZSA9PSBjYWxsRnJhbWUtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpIHx8IGNhbGxGcmFtZSA9PSBjYWxsRnJhbWUtPmR5
bmFtaWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsKKyAgICBWTSogdm0gPSAmY2FsbEZy
YW1lLT52bSgpOworICAgIEFTU0VSVChjYWxsRnJhbWUgPT0gdm0tPnRvcENhbGxGcmFtZSB8fCBj
YWxsRnJhbWUgPT0gY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMo
KSB8fCBjYWxsRnJhbWUgPT0gY2FsbEZyYW1lLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKSk7CiAKICAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsKLSAgICBnZXRT
dGFja1RyYWNlKCZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgc3RhY2tUcmFjZSk7Ci0gICAgZ2xv
YmFsRGF0YS0+ZXhjZXB0aW9uU3RhY2sgPSBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4oc3Rh
Y2tUcmFjZSk7CisgICAgZ2V0U3RhY2tUcmFjZSgmY2FsbEZyYW1lLT52bSgpLCBzdGFja1RyYWNl
KTsKKyAgICB2bS0+ZXhjZXB0aW9uU3RhY2sgPSBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4o
c3RhY2tUcmFjZSk7CiAgICAgaWYgKHN0YWNrVHJhY2UuaXNFbXB0eSgpIHx8ICFlcnJvci5pc09i
amVjdCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBKU09iamVjdCogZXJyb3JPYmplY3QgPSBh
c09iamVjdChlcnJvcik7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IDA7CiAg
ICAgaWYgKGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihlcnJvcikpCi0gICAgICAgIGds
b2JhbE9iamVjdCA9IGdsb2JhbERhdGEtPmR5bmFtaWNHbG9iYWxPYmplY3Q7CisgICAgICAgIGds
b2JhbE9iamVjdCA9IHZtLT5keW5hbWljR2xvYmFsT2JqZWN0OwogICAgIGVsc2UKICAgICAgICAg
Z2xvYmFsT2JqZWN0ID0gZXJyb3JPYmplY3QtPmdsb2JhbE9iamVjdCgpOwogCkBAIC03ODAsOSAr
NzgwLDkgQEAgdm9pZCBJbnRlcnByZXRlcjo6YWRkU3RhY2tUcmFjZUlmTmVjZXNzYQogICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAgICAgfQogCi0gICAgaWYgKGVycm9yT2JqZWN0
LT5oYXNQcm9wZXJ0eShjYWxsRnJhbWUsIGdsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPnN0YWNr
KSkKKyAgICBpZiAoZXJyb3JPYmplY3QtPmhhc1Byb3BlcnR5KGNhbGxGcmFtZSwgdm0tPnByb3Bl
cnR5TmFtZXMtPnN0YWNrKSkKICAgICAgICAgcmV0dXJuOwotICAgIGVycm9yT2JqZWN0LT5wdXRE
aXJlY3QoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPnN0YWNrLCBqc1N0
cmluZyhnbG9iYWxEYXRhLCBidWlsZGVyLnRvU3RyaW5nKCkpLCBSZWFkT25seSB8IERvbnREZWxl
dGUpOworICAgIGVycm9yT2JqZWN0LT5wdXREaXJlY3QoKnZtLCB2bS0+cHJvcGVydHlOYW1lcy0+
c3RhY2ssIGpzU3RyaW5nKHZtLCBidWlsZGVyLnRvU3RyaW5nKCkpLCBSZWFkT25seSB8IERvbnRE
ZWxldGUpOwogfQogCiBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp0aHJv
d0V4Y2VwdGlvbihDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEpTVmFsdWUmIGV4Y2VwdGlvblZhbHVl
LCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKQEAgLTgxMiwxMCArODEyLDEwIEBAIE5FVkVSX0lO
TElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnQKIAogICAgICAgICBpc1Rlcm1pbmF0aW9u
ID0gaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbik7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgaWYgKCFjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb25TdGFjay5z
aXplKCkpIHsKKyAgICAgICAgaWYgKCFjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uU3RhY2suc2l6
ZSgpKSB7CiAgICAgICAgICAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2s7Ci0gICAgICAgICAg
ICBJbnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFjZSgmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHN0
YWNrKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvblN0YWNr
ID0gUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+KHN0YWNrKTsKKyAgICAgICAgICAgIEludGVy
cHJldGVyOjpnZXRTdGFja1RyYWNlKCZjYWxsRnJhbWUtPnZtKCksIHN0YWNrKTsKKyAgICAgICAg
ICAgIGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb25TdGFjayA9IFJlZkNvdW50ZWRBcnJheTxTdGFj
a0ZyYW1lPihzdGFjayk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTgyOSwxMyArODI5LDEzIEBA
IE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnQKICAgICBIYW5kbGVySW5m
byogaGFuZGxlciA9IDA7CiAgICAgd2hpbGUgKGlzVGVybWluYXRpb24gfHwgIShoYW5kbGVyID0g
Y29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpKSkgewog
ICAgICAgICBpZiAoIXVud2luZENhbGxGcmFtZShjYWxsRnJhbWUsIGV4Y2VwdGlvblZhbHVlLCBi
eXRlY29kZU9mZnNldCwgY29kZUJsb2NrKSkgewotICAgICAgICAgICAgaWYgKExlZ2FjeVByb2Zp
bGVyKiBwcm9maWxlciA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJsZWRQcm9maWxlcigp
KQorICAgICAgICAgICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IGNhbGxGcmFtZS0+
dm0oKS5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgICAgICAgICBwcm9maWxlci0+ZXhjZXB0
aW9uVW53aW5kKGNhbGxGcmFtZSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSBjYWxsRnJhbWUtPmds
b2JhbERhdGEoKS5lbmFibGVkUHJvZmlsZXIoKSkKKyAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHBy
b2ZpbGVyID0gY2FsbEZyYW1lLT52bSgpLmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICBwcm9m
aWxlci0+ZXhjZXB0aW9uVW53aW5kKGNhbGxGcmFtZSk7CiAKICAgICAvLyBVbndpbmQgdGhlIHNj
b3BlIGNoYWluIHdpdGhpbiB0aGUgZXhjZXB0aW9uIGhhbmRsZXIncyBjYWxsIGZyYW1lLgpAQCAt
ODg3LDEyICs4ODcsMTIgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShQcm9ncmFtRXhl
YwogICAgIFNhbXBsaW5nU2NvcGUgc2FtcGxpbmdTY29wZSh0aGlzKTsKICAgICAKICAgICBKU1Nj
b3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSAqc2NvcGUtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSAqc2NvcGUtPnZtKCk7
CiAKICAgICBBU1NFUlQoaXNWYWxpZFRoaXNPYmplY3QodGhpc09iaiwgY2FsbEZyYW1lKSk7Ci0g
ICAgQVNTRVJUKCFnbG9iYWxEYXRhLmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFnbG9iYWxEYXRh
LmlzQ29sbGVjdG9yQnVzeSgpKTsKLSAgICBpZiAoZ2xvYmFsRGF0YS5pc0NvbGxlY3RvckJ1c3ko
KSkKKyAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCF2bS5pc0NvbGxlY3Rv
ckJ1c3koKSk7CisgICAgaWYgKHZtLmlzQ29sbGVjdG9yQnVzeSgpKQogICAgICAgICByZXR1cm4g
anNOdWxsKCk7CiAKICAgICBTdGFja1N0YXRzOjpDaGVja1BvaW50IHN0YWNrQ2hlY2tQb2ludDsK
QEAgLTkwNCw3ICs5MDQsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKFByb2dyYW1F
eGVjCiAgICAgLy8gRmlyc3QgY2hlY2sgaWYgdGhlICJwcm9ncmFtIiBpcyBhY3R1YWxseSBqdXN0
IGEgSlNPTiBvYmplY3QuIElmIHNvLAogICAgIC8vIHdlJ2xsIGhhbmRsZSB0aGUgSlNPTiBvYmpl
Y3QgaGVyZS4gRWxzZSwgd2UnbGwgaGFuZGxlIHJlYWwgSlMgY29kZQogICAgIC8vIGJlbG93IGF0
IGZhaWxlZEpTT05QLgotICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RT
Y29wZShnbG9iYWxEYXRhLCBzY29wZS0+Z2xvYmFsT2JqZWN0KCkpOworICAgIER5bmFtaWNHbG9i
YWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZSh2bSwgc2NvcGUtPmdsb2JhbE9iamVjdCgp
KTsKICAgICBWZWN0b3I8SlNPTlBEYXRhPiBKU09OUERhdGE7CiAgICAgYm9vbCBwYXJzZVJlc3Vs
dDsKICAgICBjb25zdCBTdHJpbmcgcHJvZ3JhbVNvdXJjZSA9IHByb2dyYW0tPnNvdXJjZSgpLnRv
U3RyaW5nKCk7CkBAIC0xMDA4LDcgKzEwMDgsNyBAQCBmYWlsZWRKU09OUDoKICAgICAvLyBvYmpl
Y3QuCiAKICAgICAvLyBDb21waWxlIHNvdXJjZSB0byBieXRlY29kZSBpZiBuZWNlc3Nhcnk6Ci0g
ICAgaWYgKEpTT2JqZWN0KiBlcnJvciA9IHByb2dyYW0tPmluaXRpYWxpemVHbG9iYWxQcm9wZXJ0
aWVzKGdsb2JhbERhdGEsIGNhbGxGcmFtZSwgc2NvcGUpKQorICAgIGlmIChKU09iamVjdCogZXJy
b3IgPSBwcm9ncmFtLT5pbml0aWFsaXplR2xvYmFsUHJvcGVydGllcyh2bSwgY2FsbEZyYW1lLCBz
Y29wZSkpCiAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93RXJyb3IoY2FsbEZyYW1l
LCBlcnJvcikpOwogCiAgICAgaWYgKEpTT2JqZWN0KiBlcnJvciA9IHByb2dyYW0tPmNvbXBpbGUo
Y2FsbEZyYW1lLCBzY29wZSkpCkBAIC0xMDI1LDI0ICsxMDI1LDI0IEBAIGZhaWxlZEpTT05QOgog
ICAgIC8vIFNldCB0aGUgYXJndW1lbnRzIGZvciB0aGUgY2FsbGVlOgogICAgIG5ld0NhbGxGcmFt
ZS0+c2V0VGhpc1ZhbHVlKHRoaXNPYmopOwogCi0gICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9m
aWxlciA9IGdsb2JhbERhdGEuZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgaWYgKExlZ2FjeVByb2Zp
bGVyKiBwcm9maWxlciA9IHZtLmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICBwcm9maWxlci0+
d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBwcm9ncmFtLT5zb3VyY2VVUkwoKSwgcHJvZ3JhbS0+bGlu
ZU5vKCkpOwogCiAgICAgLy8gRXhlY3V0ZSB0aGUgY29kZToKICAgICBKU1ZhbHVlIHJlc3VsdDsK
LSAgICBpZiAoTElLRUxZKCFnbG9iYWxEYXRhLndhdGNoZG9nLmRpZEZpcmUobmV3Q2FsbEZyYW1l
KSkpIHsKKyAgICBpZiAoTElLRUxZKCF2bS53YXRjaGRvZy5kaWRGaXJlKG5ld0NhbGxGcmFtZSkp
KSB7CiAgICAgICAgIFNhbXBsaW5nVG9vbDo6Q2FsbFJlY29yZCBjYWxsUmVjb3JkKG1fc2FtcGxl
ci5nZXQoKSk7Ci0gICAgICAgIFdhdGNoZG9nOjpTY29wZSB3YXRjaGRvZ1Njb3BlKGdsb2JhbERh
dGEud2F0Y2hkb2cpOworICAgICAgICBXYXRjaGRvZzo6U2NvcGUgd2F0Y2hkb2dTY29wZSh2bS53
YXRjaGRvZyk7CiAKICNpZiBFTkFCTEUoTExJTlRfQ19MT09QKQogICAgICAgICByZXN1bHQgPSBM
TEludDo6Q0xvb3A6OmV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBsbGludF9wcm9ncmFtX3Byb2xvZ3Vl
KTsKICNlbGlmIEVOQUJMRShKSVQpCi0gICAgICAgIHJlc3VsdCA9IHByb2dyYW0tPmdlbmVyYXRl
ZEpJVENvZGUoKS5leGVjdXRlKCZtX3N0YWNrLCBuZXdDYWxsRnJhbWUsICZnbG9iYWxEYXRhKTsK
KyAgICAgICAgcmVzdWx0ID0gcHJvZ3JhbS0+Z2VuZXJhdGVkSklUQ29kZSgpLmV4ZWN1dGUoJm1f
c3RhY2ssIG5ld0NhbGxGcmFtZSwgJnZtKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogICAgIH0g
ZWxzZQogICAgICAgICByZXN1bHQgPSB0aHJvd1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24o
bmV3Q2FsbEZyYW1lKTsKIAotICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSBnbG9i
YWxEYXRhLmVuYWJsZWRQcm9maWxlcigpKQorICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmls
ZXIgPSB2bS5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJvZmlsZXItPmRpZEV4ZWN1dGUo
Y2FsbEZyYW1lLCBwcm9ncmFtLT5zb3VyY2VVUkwoKSwgcHJvZ3JhbS0+bGluZU5vKCkpOwogCiAg
ICAgbV9zdGFjay5wb3BGcmFtZShuZXdDYWxsRnJhbWUpOwpAQCAtMTA1MiwxMSArMTA1MiwxMSBA
QCBmYWlsZWRKU09OUDoKIAogSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiBmdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNv
bnN0IENhbGxEYXRhJiBjYWxsRGF0YSwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gY2FsbEZyYW1lLT5nbG9i
YWxEYXRhKCk7CisgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwogICAgIEFTU0VSVChpc1Zh
bGlkVGhpc09iamVjdCh0aGlzVmFsdWUsIGNhbGxGcmFtZSkpOwogICAgIEFTU0VSVCghY2FsbEZy
YW1lLT5oYWRFeGNlcHRpb24oKSk7Ci0gICAgQVNTRVJUKCFnbG9iYWxEYXRhLmlzQ29sbGVjdG9y
QnVzeSgpKTsKLSAgICBpZiAoZ2xvYmFsRGF0YS5pc0NvbGxlY3RvckJ1c3koKSkKKyAgICBBU1NF
UlQoIXZtLmlzQ29sbGVjdG9yQnVzeSgpKTsKKyAgICBpZiAodm0uaXNDb2xsZWN0b3JCdXN5KCkp
CiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAogICAgIFN0YWNrU3RhdHM6OkNoZWNrUG9pbnQg
c3RhY2tDaGVja1BvaW50OwpAQCAtMTA3Niw3ICsxMDc2LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRl
cjo6ZXhlY3V0ZUNhbGwoQ2FsbEZyYQogICAgICAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5
cGVIb3N0KTsKICAgICAgICAgc2NvcGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7CiAgICAgfQotICAg
IER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZShnbG9iYWxEYXRhLCBz
Y29wZS0+Z2xvYmFsT2JqZWN0KCkpOworICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9i
YWxPYmplY3RTY29wZSh2bSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpKTsKIAogICAgIGlmIChpc0pT
Q2FsbCkgewogICAgICAgICAvLyBDb21waWxlIHRoZSBjYWxsZWU6CkBAIC0xMDk4LDI3ICsxMDk4
LDI3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKENhbGxGcmEKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpCiAgICAgICAgIG5ld0NhbGxGcmFt
ZS0+c2V0QXJndW1lbnQoaSwgYXJncy5hdChpKSk7CiAKLSAgICBpZiAoTGVnYWN5UHJvZmlsZXIq
IHByb2ZpbGVyID0gZ2xvYmFsRGF0YS5lbmFibGVkUHJvZmlsZXIoKSkKKyAgICBpZiAoTGVnYWN5
UHJvZmlsZXIqIHByb2ZpbGVyID0gdm0uZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAgIHByb2Zp
bGVyLT53aWxsRXhlY3V0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uKTsKIAogICAgIEpTVmFsdWUgcmVz
dWx0OwotICAgIGlmIChMSUtFTFkoIWdsb2JhbERhdGEud2F0Y2hkb2cuZGlkRmlyZShuZXdDYWxs
RnJhbWUpKSkgeworICAgIGlmIChMSUtFTFkoIXZtLndhdGNoZG9nLmRpZEZpcmUobmV3Q2FsbEZy
YW1lKSkpIHsKICAgICAgICAgU2FtcGxpbmdUb29sOjpDYWxsUmVjb3JkIGNhbGxSZWNvcmQobV9z
YW1wbGVyLmdldCgpLCAhaXNKU0NhbGwpOwotICAgICAgICBXYXRjaGRvZzo6U2NvcGUgd2F0Y2hk
b2dTY29wZShnbG9iYWxEYXRhLndhdGNoZG9nKTsKKyAgICAgICAgV2F0Y2hkb2c6OlNjb3BlIHdh
dGNoZG9nU2NvcGUodm0ud2F0Y2hkb2cpOwogCiAgICAgICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGU6
CiAgICAgICAgIGlmIChpc0pTQ2FsbCkgewogI2lmIEVOQUJMRShMTElOVF9DX0xPT1ApCiAgICAg
ICAgICAgICByZXN1bHQgPSBMTEludDo6Q0xvb3A6OmV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBsbGlu
dF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSk7CiAjZWxpZiBFTkFCTEUoSklUKQotICAgICAg
ICAgICAgcmVzdWx0ID0gY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRK
SVRDb2RlRm9yQ2FsbCgpLmV4ZWN1dGUoJm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwgJmdsb2JhbERh
dGEpOworICAgICAgICAgICAgcmVzdWx0ID0gY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxl
LT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLmV4ZWN1dGUoJm1fc3RhY2ssIG5ld0NhbGxGcmFt
ZSwgJnZtKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIHJlc3VsdCA9IEpTVmFsdWU6OmRlY29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24obmV3
Q2FsbEZyYW1lKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJlc3VsdCA9IHRocm93VGVybWluYXRl
ZEV4ZWN1dGlvbkV4Y2VwdGlvbihuZXdDYWxsRnJhbWUpOwogCi0gICAgaWYgKExlZ2FjeVByb2Zp
bGVyKiBwcm9maWxlciA9IGdsb2JhbERhdGEuZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgaWYgKExl
Z2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IHZtLmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICBw
cm9maWxlci0+ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uKTsKIAogICAgIG1fc3RhY2su
cG9wRnJhbWUobmV3Q2FsbEZyYW1lKTsKQEAgLTExMjcsMTIgKzExMjcsMTIgQEAgSlNWYWx1ZSBJ
bnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoQ2FsbEZyYQogCiBKU09iamVjdCogSW50ZXJwcmV0ZXI6
OmV4ZWN1dGVDb25zdHJ1Y3QoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiBjb25zdHJ1
Y3RvciwgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiBj
b25zdHJ1Y3REYXRhLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpOworICAgIFZNJiB2bSA9IGNhbGxG
cmFtZS0+dm0oKTsKICAgICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpOwotICAg
IEFTU0VSVCghZ2xvYmFsRGF0YS5pc0NvbGxlY3RvckJ1c3koKSk7CisgICAgQVNTRVJUKCF2bS5p
c0NvbGxlY3RvckJ1c3koKSk7CiAgICAgLy8gV2UgdGhyb3cgaW4gdGhpcyBjYXNlIGJlY2F1c2Ug
d2UgaGF2ZSB0byByZXR1cm4gc29tZXRoaW5nICJ2YWxpZCIgYnV0IHdlJ3JlCiAgICAgLy8gYWxy
ZWFkeSBpbiBhbiBpbnZhbGlkIHN0YXRlLgotICAgIGlmIChnbG9iYWxEYXRhLmlzQ29sbGVjdG9y
QnVzeSgpKQorICAgIGlmICh2bS5pc0NvbGxlY3RvckJ1c3koKSkKICAgICAgICAgcmV0dXJuIGNo
ZWNrZWRSZXR1cm4odGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKSk7CiAKICAgICBT
dGFja1N0YXRzOjpDaGVja1BvaW50IHN0YWNrQ2hlY2tQb2ludDsKQEAgLTExNTMsNyArMTE1Myw3
IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCgKICAgICAgICAgc2Nv
cGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7CiAgICAgfQogCi0gICAgRHluYW1pY0dsb2JhbE9iamVj
dFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKGdsb2JhbERhdGEsIHNjb3BlLT5nbG9iYWxPYmplY3Qo
KSk7CisgICAgRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKHZtLCBz
Y29wZS0+Z2xvYmFsT2JqZWN0KCkpOwogCiAgICAgaWYgKGlzSlNDb25zdHJ1Y3QpIHsKICAgICAg
ICAgLy8gQ29tcGlsZSB0aGUgY2FsbGVlOgpAQCAtMTE3NSwyNyArMTE3NSwyNyBAQCBKU09iamVj
dCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoCiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBhcmdzLnNpemUoKTsgKytpKQogICAgICAgICBuZXdDYWxsRnJhbWUtPnNldEFyZ3VtZW50
KGksIGFyZ3MuYXQoaSkpOwogCi0gICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IGds
b2JhbERhdGEuZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9m
aWxlciA9IHZtLmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICBwcm9maWxlci0+d2lsbEV4ZWN1
dGUoY2FsbEZyYW1lLCBjb25zdHJ1Y3Rvcik7CiAKICAgICBKU1ZhbHVlIHJlc3VsdDsKLSAgICBp
ZiAoTElLRUxZKCFnbG9iYWxEYXRhLndhdGNoZG9nLmRpZEZpcmUobmV3Q2FsbEZyYW1lKSkpIHsK
KyAgICBpZiAoTElLRUxZKCF2bS53YXRjaGRvZy5kaWRGaXJlKG5ld0NhbGxGcmFtZSkpKSB7CiAg
ICAgICAgIFNhbXBsaW5nVG9vbDo6Q2FsbFJlY29yZCBjYWxsUmVjb3JkKG1fc2FtcGxlci5nZXQo
KSwgIWlzSlNDb25zdHJ1Y3QpOwotICAgICAgICBXYXRjaGRvZzo6U2NvcGUgd2F0Y2hkb2dTY29w
ZShnbG9iYWxEYXRhLndhdGNoZG9nKTsKKyAgICAgICAgV2F0Y2hkb2c6OlNjb3BlIHdhdGNoZG9n
U2NvcGUodm0ud2F0Y2hkb2cpOwogCiAgICAgICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGUuCiAgICAg
ICAgIGlmIChpc0pTQ29uc3RydWN0KSB7CiAjaWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKICAgICAg
ICAgICAgIHJlc3VsdCA9IExMSW50OjpDTG9vcDo6ZXhlY3V0ZShuZXdDYWxsRnJhbWUsIGxsaW50
X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUpOwogI2VsaWYgRU5BQkxFKEpJVCkKLSAg
ICAgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5n
ZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0KCkuZXhlY3V0ZSgmbV9zdGFjaywgbmV3Q2FsbEZy
YW1lLCAmZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3REYXRhLmpz
LmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdCgpLmV4ZWN1
dGUoJm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwgJnZtKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQog
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IEpTVmFsdWU6OmRlY29kZShjb25z
dHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihuZXdDYWxsRnJhbWUpKTsKICAgICB9IGVsc2UKICAg
ICAgICAgcmVzdWx0ID0gdGhyb3dUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKG5ld0NhbGxG
cmFtZSk7CiAKLSAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gZ2xvYmFsRGF0YS5l
bmFibGVkUHJvZmlsZXIoKSkKKyAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gdm0u
ZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAgIHByb2ZpbGVyLT5kaWRFeGVjdXRlKGNhbGxGcmFt
ZSwgY29uc3RydWN0b3IpOwogCiAgICAgbV9zdGFjay5wb3BGcmFtZShuZXdDYWxsRnJhbWUpOwpA
QCAtMTIwOCwxMCArMTIwOCwxMCBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25z
dHJ1Y3QoCiAKIENhbGxGcmFtZUNsb3N1cmUgSW50ZXJwcmV0ZXI6OnByZXBhcmVGb3JSZXBlYXRD
YWxsKEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgSlNGdW5jdGlvbiogZnVuY3Rpb24sIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgSlNTY29wZSogc2NvcGUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0g
KnNjb3BlLT5nbG9iYWxEYXRhKCk7Ci0gICAgQVNTRVJUKCFnbG9iYWxEYXRhLmV4Y2VwdGlvbik7
CisgICAgVk0mIHZtID0gKnNjb3BlLT52bSgpOworICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKTsK
ICAgICAKLSAgICBpZiAoZ2xvYmFsRGF0YS5pc0NvbGxlY3RvckJ1c3koKSkKKyAgICBpZiAodm0u
aXNDb2xsZWN0b3JCdXN5KCkpCiAgICAgICAgIHJldHVybiBDYWxsRnJhbWVDbG9zdXJlKCk7CiAK
ICAgICBTdGFja1N0YXRzOjpDaGVja1BvaW50IHN0YWNrQ2hlY2tQb2ludDsKQEAgLTEyNDQsMTcg
KzEyNDQsMTcgQEAgQ2FsbEZyYW1lQ2xvc3VyZSBJbnRlcnByZXRlcjo6cHJlcGFyZUZvcgogICAg
IH0KIAogICAgIC8vIFJldHVybiB0aGUgc3VjY2Vzc2Z1bCBjbG9zdXJlOgotICAgIENhbGxGcmFt
ZUNsb3N1cmUgcmVzdWx0ID0geyBjYWxsRnJhbWUsIG5ld0NhbGxGcmFtZSwgZnVuY3Rpb24sIGZ1
bmN0aW9uRXhlY3V0YWJsZSwgJmdsb2JhbERhdGEsIHNjb3BlLCBuZXdDb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgfTsKKyAgICBDYWxsRnJhbWVD
bG9zdXJlIHJlc3VsdCA9IHsgY2FsbEZyYW1lLCBuZXdDYWxsRnJhbWUsIGZ1bmN0aW9uLCBmdW5j
dGlvbkV4ZWN1dGFibGUsICZ2bSwgc2NvcGUsIG5ld0NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyB9OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoQ2FsbEZyYW1lQ2xvc3VyZSYgY2xvc3VyZSkg
CiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gKmNsb3N1cmUuZ2xvYmFsRGF0YTsK
KyAgICBWTSYgdm0gPSAqY2xvc3VyZS52bTsKICAgICBTYW1wbGluZ1Njb3BlIHNhbXBsaW5nU2Nv
cGUodGhpcyk7CiAgICAgCi0gICAgQVNTRVJUKCFnbG9iYWxEYXRhLmlzQ29sbGVjdG9yQnVzeSgp
KTsKLSAgICBpZiAoZ2xvYmFsRGF0YS5pc0NvbGxlY3RvckJ1c3koKSkKKyAgICBBU1NFUlQoIXZt
LmlzQ29sbGVjdG9yQnVzeSgpKTsKKyAgICBpZiAodm0uaXNDb2xsZWN0b3JCdXN5KCkpCiAgICAg
ICAgIHJldHVybiBqc051bGwoKTsKIAogICAgIFN0YWNrU3RhdHM6OkNoZWNrUG9pbnQgc3RhY2tD
aGVja1BvaW50OwpAQCAtMTI2Miw3ICsxMjYyLDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhl
Y3V0ZShDYWxsRnJhbWVDbAogICAgIGNsb3N1cmUucmVzZXRDYWxsRnJhbWUoKTsKICAgICBtX3N0
YWNrLnZhbGlkYXRlRmVuY2UoY2xvc3VyZS5uZXdDYWxsRnJhbWUsICJTVEVQIDEiKTsKIAotICAg
IGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSBnbG9iYWxEYXRhLmVuYWJsZWRQcm9maWxl
cigpKQorICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSB2bS5lbmFibGVkUHJvZmls
ZXIoKSkKICAgICAgICAgcHJvZmlsZXItPndpbGxFeGVjdXRlKGNsb3N1cmUub2xkQ2FsbEZyYW1l
LCBjbG9zdXJlLmZ1bmN0aW9uKTsKIAogICAgIC8vIFRoZSBjb2RlIGV4ZWN1dGlvbiBiZWxvdyBt
YXkgcHVzaCBtb3JlIGZyYW1lcyBhbmQgcG9pbnQgdGhlIHRvcENhbGxGcmFtZQpAQCAtMTI3Mywy
MyArMTI3MywyMyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKENhbGxGcmFtZUNsCiAg
ICAgLy8gSGVuY2UsIHdlIG5lZWQgdG8gcHJlc2VydmUgdGhlIHRvcENhbGxGcmFtZSBoZXJlIG91
cnNlbHZlcyBiZWZvcmUKICAgICAvLyByZXBlYXRpbmcgdGhpcyBjYWxsIG9uIGEgc2Vjb25kIGNh
bGxiYWNrIGZ1bmN0aW9uLgogCi0gICAgVG9wQ2FsbEZyYW1lU2V0dGVyIHRvcENhbGxGcmFtZShn
bG9iYWxEYXRhLCBjbG9zdXJlLm5ld0NhbGxGcmFtZSk7CisgICAgVG9wQ2FsbEZyYW1lU2V0dGVy
IHRvcENhbGxGcmFtZSh2bSwgY2xvc3VyZS5uZXdDYWxsRnJhbWUpOwogCiAgICAgLy8gRXhlY3V0
ZSB0aGUgY29kZToKICAgICBKU1ZhbHVlIHJlc3VsdDsKLSAgICBpZiAoTElLRUxZKCFnbG9iYWxE
YXRhLndhdGNoZG9nLmRpZEZpcmUoY2xvc3VyZS5uZXdDYWxsRnJhbWUpKSkgeworICAgIGlmIChM
SUtFTFkoIXZtLndhdGNoZG9nLmRpZEZpcmUoY2xvc3VyZS5uZXdDYWxsRnJhbWUpKSkgewogICAg
ICAgICBTYW1wbGluZ1Rvb2w6OkNhbGxSZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIuZ2V0KCkp
OwotICAgICAgICBXYXRjaGRvZzo6U2NvcGUgd2F0Y2hkb2dTY29wZShnbG9iYWxEYXRhLndhdGNo
ZG9nKTsKKyAgICAgICAgV2F0Y2hkb2c6OlNjb3BlIHdhdGNoZG9nU2NvcGUodm0ud2F0Y2hkb2cp
OwogCiAjaWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKICAgICAgICAgcmVzdWx0ID0gTExJbnQ6OkNM
b29wOjpleGVjdXRlKGNsb3N1cmUubmV3Q2FsbEZyYW1lLCBsbGludF9mdW5jdGlvbl9mb3JfY2Fs
bF9wcm9sb2d1ZSk7CiAjZWxpZiBFTkFCTEUoSklUKQotICAgICAgICByZXN1bHQgPSBjbG9zdXJl
LmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5leGVjdXRlKCZt
X3N0YWNrLCBjbG9zdXJlLm5ld0NhbGxGcmFtZSwgJmdsb2JhbERhdGEpOworICAgICAgICByZXN1
bHQgPSBjbG9zdXJlLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwo
KS5leGVjdXRlKCZtX3N0YWNrLCBjbG9zdXJlLm5ld0NhbGxGcmFtZSwgJnZtKTsKICNlbmRpZiAv
LyBFTkFCTEUoSklUKQogICAgIH0gZWxzZQogICAgICAgICByZXN1bHQgPSB0aHJvd1Rlcm1pbmF0
ZWRFeGVjdXRpb25FeGNlcHRpb24oY2xvc3VyZS5uZXdDYWxsRnJhbWUpOwogCi0gICAgaWYgKExl
Z2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IGdsb2JhbERhdGEuZW5hYmxlZFByb2ZpbGVyKCkpCisg
ICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IHZtLmVuYWJsZWRQcm9maWxlcigpKQog
ICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0ZShjbG9zdXJlLm9sZENhbGxGcmFtZSwgY2xvc3Vy
ZS5mdW5jdGlvbik7CiAKICAgICBtX3N0YWNrLnZhbGlkYXRlRmVuY2UoY2xvc3VyZS5uZXdDYWxs
RnJhbWUsICJBRlRFUiIpOwpAQCAtMTMwMywxNyArMTMwMywxNyBAQCB2b2lkIEludGVycHJldGVy
OjplbmRSZXBlYXRDYWxsKENhbGxGcmFtCiAKIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUo
RXZhbEV4ZWN1dGFibGUqIGV2YWwsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgSlNTY29wZSogc2NvcGUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0g
KnNjb3BlLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0gKnNjb3BlLT52bSgpOwogICAgIFNh
bXBsaW5nU2NvcGUgc2FtcGxpbmdTY29wZSh0aGlzKTsKICAgICAKLSAgICBBU1NFUlQoc2NvcGUt
Pmdsb2JhbERhdGEoKSA9PSAmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOworICAgIEFTU0VSVChz
Y29wZS0+dm0oKSA9PSAmY2FsbEZyYW1lLT52bSgpKTsKICAgICBBU1NFUlQoaXNWYWxpZFRoaXNP
YmplY3QodGhpc1ZhbHVlLCBjYWxsRnJhbWUpKTsKLSAgICBBU1NFUlQoIWdsb2JhbERhdGEuZXhj
ZXB0aW9uKTsKLSAgICBBU1NFUlQoIWdsb2JhbERhdGEuaXNDb2xsZWN0b3JCdXN5KCkpOwotICAg
IGlmIChnbG9iYWxEYXRhLmlzQ29sbGVjdG9yQnVzeSgpKQorICAgIEFTU0VSVCghdm0uZXhjZXB0
aW9uKTsKKyAgICBBU1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeSgpKTsKKyAgICBpZiAodm0uaXND
b2xsZWN0b3JCdXN5KCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIER5bmFtaWNH
bG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZShnbG9iYWxEYXRhLCBzY29wZS0+Z2xv
YmFsT2JqZWN0KCkpOworICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RT
Y29wZSh2bSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpKTsKIAogICAgIFN0YWNrU3RhdHM6OkNoZWNr
UG9pbnQgc3RhY2tDaGVja1BvaW50OwogICAgIGNvbnN0IFN0YWNrQm91bmRzJiBuYXRpdmVTdGFj
ayA9IHd0ZlRocmVhZERhdGEoKS5zdGFjaygpOwpAQCAtMTM0NCw3ICsxMzQ0LDcgQEAgSlNWYWx1
ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YQogICAgICAgICAgICAgdmFyaWFibGVP
YmplY3QgPSBzY29wZTsKICAgICAgICAgfQogICAgICAgICAvLyBTY29wZSBmb3IgQmF0Y2hlZFRy
YW5zaXRpb25PcHRpbWl6ZXIKLSAgICAgICAgQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIgb3B0
aW1pemVyKGdsb2JhbERhdGEsIHZhcmlhYmxlT2JqZWN0KTsKKyAgICAgICAgQmF0Y2hlZFRyYW5z
aXRpb25PcHRpbWl6ZXIgb3B0aW1pemVyKHZtLCB2YXJpYWJsZU9iamVjdCk7CiAKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVZhcmlhYmxlczsgKytpKSB7CiAgICAgICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+dmFyaWFibGUoaSk7CkBAIC0x
MzcwLDI0ICsxMzcwLDI0IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1
dGEKICAgICAvLyBTZXQgdGhlIGFyZ3VtZW50cyBmb3IgdGhlIGNhbGxlZToKICAgICBuZXdDYWxs
RnJhbWUtPnNldFRoaXNWYWx1ZSh0aGlzVmFsdWUpOwogCi0gICAgaWYgKExlZ2FjeVByb2ZpbGVy
KiBwcm9maWxlciA9IGdsb2JhbERhdGEuZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgaWYgKExlZ2Fj
eVByb2ZpbGVyKiBwcm9maWxlciA9IHZtLmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICBwcm9m
aWxlci0+d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBldmFsLT5zb3VyY2VVUkwoKSwgZXZhbC0+bGlu
ZU5vKCkpOwogCiAgICAgLy8gRXhlY3V0ZSB0aGUgY29kZToKICAgICBKU1ZhbHVlIHJlc3VsdDsK
LSAgICBpZiAoTElLRUxZKCFnbG9iYWxEYXRhLndhdGNoZG9nLmRpZEZpcmUobmV3Q2FsbEZyYW1l
KSkpIHsKKyAgICBpZiAoTElLRUxZKCF2bS53YXRjaGRvZy5kaWRGaXJlKG5ld0NhbGxGcmFtZSkp
KSB7CiAgICAgICAgIFNhbXBsaW5nVG9vbDo6Q2FsbFJlY29yZCBjYWxsUmVjb3JkKG1fc2FtcGxl
ci5nZXQoKSk7Ci0gICAgICAgIFdhdGNoZG9nOjpTY29wZSB3YXRjaGRvZ1Njb3BlKGdsb2JhbERh
dGEud2F0Y2hkb2cpOworICAgICAgICBXYXRjaGRvZzo6U2NvcGUgd2F0Y2hkb2dTY29wZSh2bS53
YXRjaGRvZyk7CiAKICNpZiBFTkFCTEUoTExJTlRfQ19MT09QKQogICAgICAgICByZXN1bHQgPSBM
TEludDo6Q0xvb3A6OmV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBsbGludF9ldmFsX3Byb2xvZ3VlKTsK
ICNlbGlmIEVOQUJMRShKSVQpCi0gICAgICAgIHJlc3VsdCA9IGV2YWwtPmdlbmVyYXRlZEpJVENv
ZGUoKS5leGVjdXRlKCZtX3N0YWNrLCBuZXdDYWxsRnJhbWUsICZnbG9iYWxEYXRhKTsKKyAgICAg
ICAgcmVzdWx0ID0gZXZhbC0+Z2VuZXJhdGVkSklUQ29kZSgpLmV4ZWN1dGUoJm1fc3RhY2ssIG5l
d0NhbGxGcmFtZSwgJnZtKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogICAgIH0gZWxzZQogICAg
ICAgICByZXN1bHQgPSB0aHJvd1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24obmV3Q2FsbEZy
YW1lKTsKIAotICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSBnbG9iYWxEYXRhLmVu
YWJsZWRQcm9maWxlcigpKQorICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSB2bS5l
bmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJvZmlsZXItPmRpZEV4ZWN1dGUoY2FsbEZyYW1l
LCBldmFsLT5zb3VyY2VVUkwoKSwgZXZhbC0+bGluZU5vKCkpOwogCiAgICAgbV9zdGFjay5wb3BG
cmFtZShuZXdDYWxsRnJhbWUpOwpAQCAtMTQyOCw3ICsxNDI4LDcgQEAgSlNWYWx1ZSBJbnRlcnBy
ZXRlcjo6cmV0cmlldmVBcmd1bWVudHNGcgogICAgIGlmICghZnVuY3Rpb25DYWxsRnJhbWUpCiAg
ICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0gQXJn
dW1lbnRzOjpjcmVhdGUoZnVuY3Rpb25DYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgZnVuY3Rpb25D
YWxsRnJhbWUpOworICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0gQXJndW1lbnRzOjpjcmVhdGUo
ZnVuY3Rpb25DYWxsRnJhbWUtPnZtKCksIGZ1bmN0aW9uQ2FsbEZyYW1lKTsKICAgICBhcmd1bWVu
dHMtPnRlYXJPZmYoZnVuY3Rpb25DYWxsRnJhbWUpOwogICAgIHJldHVybiBKU1ZhbHVlKGFyZ3Vt
ZW50cyk7CiB9CkBAIC0xNDQyLDcgKzE0NDIsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpyZXRy
aWV2ZUNhbGxlckZyb21WCiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQ7CiAgICAg
Q29kZUJsb2NrKiB1bnVzZWRDYWxsZXJDb2RlQmxvY2sgPSAwOwotICAgIENhbGxGcmFtZSogY2Fs
bGVyRnJhbWUgPSBnZXRDYWxsZXJJbmZvKCZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgZnVuY3Rp
b25DYWxsRnJhbWUsIGJ5dGVjb2RlT2Zmc2V0LCB1bnVzZWRDYWxsZXJDb2RlQmxvY2spOworICAg
IENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBnZXRDYWxsZXJJbmZvKCZjYWxsRnJhbWUtPnZtKCks
IGZ1bmN0aW9uQ2FsbEZyYW1lLCBieXRlY29kZU9mZnNldCwgdW51c2VkQ2FsbGVyQ29kZUJsb2Nr
KTsKICAgICBpZiAoIWNhbGxlckZyYW1lKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAg
SlNWYWx1ZSBjYWxsZXIgPSBjYWxsZXJGcmFtZS0+Y2FsbGVlKCk7CkBAIC0xNDUyLDcgKzE0NTIs
NyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpyZXRyaWV2ZUNhbGxlckZyb21WCiAgICAgLy8gU2tp
cCBvdmVyIGZ1bmN0aW9uIGJpbmRpbmdzLgogICAgIEFTU0VSVChjYWxsZXIuaXNPYmplY3QoKSk7
CiAgICAgd2hpbGUgKGFzT2JqZWN0KGNhbGxlciktPmluaGVyaXRzKCZKU0JvdW5kRnVuY3Rpb246
OnNfaW5mbykpIHsKLSAgICAgICAgY2FsbGVyRnJhbWUgPSBnZXRDYWxsZXJJbmZvKCZjYWxsRnJh
bWUtPmdsb2JhbERhdGEoKSwgY2FsbGVyRnJhbWUsIGJ5dGVjb2RlT2Zmc2V0LCB1bnVzZWRDYWxs
ZXJDb2RlQmxvY2spOworICAgICAgICBjYWxsZXJGcmFtZSA9IGdldENhbGxlckluZm8oJmNhbGxG
cmFtZS0+dm0oKSwgY2FsbGVyRnJhbWUsIGJ5dGVjb2RlT2Zmc2V0LCB1bnVzZWRDYWxsZXJDb2Rl
QmxvY2spOwogICAgICAgICBpZiAoIWNhbGxlckZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOwogICAgICAgICBjYWxsZXIgPSBjYWxsZXJGcmFtZS0+Y2FsbGVlKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkocmV2
aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgY2xhc3MgRXZhbEV4ZWN1dGFibGU7CiAgICAgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CiAg
ICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwotICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKKyAg
ICBjbGFzcyBWTTsKICAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKICAgICBjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7CiAgICAgY2xhc3MgUHJvZ3JhbUV4ZWN1dGFibGU7CkBAIC0xMzIsOCAr
MTMyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBUb3BDYWxsRnJhbWVTZXR0ZXIg
ewogICAgIHB1YmxpYzoKLSAgICAgICAgVG9wQ2FsbEZyYW1lU2V0dGVyKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLSAgICAgICAgICAgIDogZ2xvYmFsRGF0YShn
bG9iYWwpCisgICAgICAgIFRvcENhbGxGcmFtZVNldHRlcihWTSYgZ2xvYmFsLCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKKyAgICAgICAgICAgIDogdm0oZ2xvYmFsKQogICAgICAgICAgICAgLCBvbGRD
YWxsRnJhbWUoZ2xvYmFsLnRvcENhbGxGcmFtZSkgCiAgICAgICAgIHsKICAgICAgICAgICAgIGds
b2JhbC50b3BDYWxsRnJhbWUgPSBjYWxsRnJhbWU7CkBAIC0xNDEsMTYgKzE0MSwxNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIH5Ub3BDYWxsRnJhbWVTZXR0ZXIoKSAKICAg
ICAgICAgewotICAgICAgICAgICAgZ2xvYmFsRGF0YS50b3BDYWxsRnJhbWUgPSBvbGRDYWxsRnJh
bWU7CisgICAgICAgICAgICB2bS50b3BDYWxsRnJhbWUgPSBvbGRDYWxsRnJhbWU7CiAgICAgICAg
IH0KICAgICBwcml2YXRlOgotICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGE7CisgICAg
ICAgIFZNJiB2bTsKICAgICAgICAgQ2FsbEZyYW1lKiBvbGRDYWxsRnJhbWU7CiAgICAgfTsKICAg
ICAKICAgICBjbGFzcyBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgQUxXQVlTX0lOTElORSBOYXRpdmVDYWxsRnJhbWVUcmFjZXIoSlNHbG9iYWxEYXRhKiBnbG9i
YWwsIENhbGxGcmFtZSogY2FsbEZyYW1lKQorICAgICAgICBBTFdBWVNfSU5MSU5FIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlcihWTSogZ2xvYmFsLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICAgICAg
ewogICAgICAgICAgICAgQVNTRVJUKGdsb2JhbCk7CiAgICAgICAgICAgICBBU1NFUlQoY2FsbEZy
YW1lKTsKQEAgLTE3Myw3ICsxNzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIElu
dGVycHJldGVyJiBtX2ludGVycHJldGVyOwogICAgICAgICB9OwogCi0gICAgICAgIEludGVycHJl
dGVyKEpTR2xvYmFsRGF0YSAmKTsKKyAgICAgICAgSW50ZXJwcmV0ZXIoVk0gJik7CiAgICAgICAg
IH5JbnRlcnByZXRlcigpOwogICAgICAgICAKICAgICAgICAgdm9pZCBpbml0aWFsaXplKGJvb2wg
Y2FuVXNlSklUKTsKQEAgLTIxOSw3ICsyMTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
TkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiB0aHJvd0V4Y2VwdGlvbihDYWxsRnJhbWUqJiwgSlNW
YWx1ZSYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKICAgICAgICAgTkVWRVJfSU5MSU5FIHZv
aWQgZGVidWcoQ2FsbEZyYW1lKiwgRGVidWdIb29rSUQsIGludCBmaXJzdExpbmUsIGludCBsYXN0
TGluZSwgaW50IGNvbHVtbik7CiAgICAgICAgIHN0YXRpYyBjb25zdCBTdHJpbmcgZ2V0VHJhY2VM
aW5lKENhbGxGcmFtZSosIFN0YWNrRnJhbWVDb2RlVHlwZSwgY29uc3QgU3RyaW5nJiwgaW50KTsK
LSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0U3RhY2tUcmFjZShKU0ds
b2JhbERhdGEqLCBWZWN0b3I8U3RhY2tGcmFtZT4mIHJlc3VsdHMsIHNpemVfdCBtYXhTdGFja1Np
emUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKTsKKyAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0U3RhY2tUcmFjZShWTSosIFZlY3RvcjxTdGFja0Zy
YW1lPiYgcmVzdWx0cywgc2l6ZV90IG1heFN0YWNrU2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8
c2l6ZV90Pjo6bWF4KCkpOwogICAgICAgICBzdGF0aWMgdm9pZCBhZGRTdGFja1RyYWNlSWZOZWNl
c3NhcnkoQ2FsbEZyYW1lKiwgSlNWYWx1ZSBlcnJvcik7CiAKICAgICAgICAgdm9pZCBkdW1wU2Ft
cGxlRGF0YShFeGVjU3RhdGUqIGV4ZWMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0pTU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9KU1N0YWNrLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Myw5ICs0Myw5IEBAIHN0YXRpYyBNdXRleCYgc3RhY2tTdGF0aXN0aWNzTXV0ZXgoKQogICAgIHJl
dHVybiBzdGF0aWNNdXRleDsKIH0gICAgCiAKLUpTU3RhY2s6OkpTU3RhY2soSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBzaXplX3QgY2FwYWNpdHkpCitKU1N0YWNrOjpKU1N0YWNrKFZNJiB2bSwg
c2l6ZV90IGNhcGFjaXR5KQogICAgIDogbV9lbmQoMCkKLSAgICAsIG1fdG9wQ2FsbEZyYW1lKGds
b2JhbERhdGEudG9wQ2FsbEZyYW1lKQorICAgICwgbV90b3BDYWxsRnJhbWUodm0udG9wQ2FsbEZy
YW1lKQogewogICAgIEFTU0VSVChjYXBhY2l0eSAmJiBpc1BhZ2VBbGlnbmVkKGNhcGFjaXR5KSk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suaAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pT
U3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBjbGFzcyBERkdDb2RlQmxvY2tzOwogICAgIGNsYXNzIEV4ZWNTdGF0ZTsKICAgICBjbGFz
cyBKSVRTdHViUm91dGluZVNldDsKLSAgICBjbGFzcyBKU0dsb2JhbERhdGE7CisgICAgY2xhc3Mg
Vk07CiAgICAgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgY2xhc3MgSlNTdGFj
ayB7CkBAIC02Nyw3ICs2Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBBbGxvdyA4
ayBvZiBleGNlc3MgcmVnaXN0ZXJzIGJlZm9yZSB3ZSBzdGFydCB0cnlpbmcgdG8gcmVhcCB0aGUg
c3RhY2sKICAgICAgICAgc3RhdGljIGNvbnN0IHB0cmRpZmZfdCBtYXhFeGNlc3NDYXBhY2l0eSA9
IDggKiAxMDI0OwogCi0gICAgICAgIEpTU3RhY2soSlNHbG9iYWxEYXRhJiwgc2l6ZV90IGNhcGFj
aXR5ID0gZGVmYXVsdENhcGFjaXR5KTsKKyAgICAgICAgSlNTdGFjayhWTSYsIHNpemVfdCBjYXBh
Y2l0eSA9IGRlZmF1bHRDYXBhY2l0eSk7CiAgICAgICAgIH5KU1N0YWNrKCk7CiAgICAgICAgIAog
ICAgICAgICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2xvc3VyZUNhbGxT
dHViUm91dGluZS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcg
KzMwLDcgQEAKIAogI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKICNpbmNsdWRlICJIZWFwLmgiCi0j
aW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJPcGVy
YXRpb25zLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUu
aCIKQEAgLTM4LDExICszOCwxMSBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIENsb3N1cmVDYWxsU3R1
YlJvdXRpbmU6OkNsb3N1cmVDYWxsU3R1YlJvdXRpbmUoCi0gICAgY29uc3QgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmJiBjb2RlLCBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IEpTQ2VsbCog
b3duZXIsCisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLCBWTSYgdm0sIGNv
bnN0IEpTQ2VsbCogb3duZXIsCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEV4ZWN1dGFibGVC
YXNlKiBleGVjdXRhYmxlLCBjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQotICAgIDogR0NB
d2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIGdsb2JhbERhdGEsIHRydWUpCi0gICAgLCBtX3N0cnVj
dHVyZShnbG9iYWxEYXRhLCBvd25lciwgc3RydWN0dXJlKQotICAgICwgbV9leGVjdXRhYmxlKGds
b2JhbERhdGEsIG93bmVyLCBleGVjdXRhYmxlKQorICAgIDogR0NBd2FyZUpJVFN0dWJSb3V0aW5l
KGNvZGUsIHZtLCB0cnVlKQorICAgICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUp
CisgICAgLCBtX2V4ZWN1dGFibGUodm0sIG93bmVyLCBleGVjdXRhYmxlKQogICAgICwgbV9jb2Rl
T3JpZ2luKGNvZGVPcmlnaW4pCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMTQ4NjU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDbG9zdXJl
Q2FsbFN0dWJSb3V0aW5lIDogcHVibGljIEdDQXdhcmVKSVRTdHViUm91dGluZSB7CiBwdWJsaWM6
CiAgICAgQ2xvc3VyZUNhbGxTdHViUm91dGluZSgKLSAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmJiwgSlNHbG9iYWxEYXRhJiwgY29uc3QgSlNDZWxsKiBvd25lciwKKyAgICAgICAg
Y29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLAog
ICAgICAgICBTdHJ1Y3R1cmUqLCBFeGVjdXRhYmxlQmFzZSosIGNvbnN0IENvZGVPcmlnaW4mKTsK
ICAgICAKICAgICB2aXJ0dWFsIH5DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHJl
dmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFs
bG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw3ICsxNjcsNyBAQCB2b2lkIEV4ZWN1
dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxvCiB9CiAjZW5kaWYKIAotRXhlY3V0YWJsZUFs
bG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcihKU0dsb2JhbERhdGEmKQorRXhlY3V0YWJsZUFs
bG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcihWTSYpCiAjaWYgRU5BQkxFKEFTU0VNQkxFUl9X
WF9FWENMVVNJVkUpCiAgICAgOiBtX2FsbG9jYXRvcihhZG9wdFB0cihuZXcgIERlbWFuZEV4ZWN1
dGFibGVBbGxvY2F0b3IoKSkpCiAjZW5kaWYKQEAgLTIxMiw3ICsyMTIsNyBAQCBkb3VibGUgRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6bWVtb3J5UHJlc3N1CiAKIH0KIAotUGFzc1JlZlB0cjxFeGVjdXRh
YmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZShKU0dsb2JhbERh
dGEmLCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVm
Zm9ydCBlZmZvcnQpCitQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OmFsbG9jYXRlKFZNJiwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25l
clVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIFJlZlB0cjxFeGVjdXRh
YmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3IoKS0+YWxsb2NhdGUoc2l6ZUluQnl0
ZXMsIG93bmVyVUlEKTsKICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQgfHwgZWZmb3J0ICE9IEpJ
VENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC03NCw4ICs3NCw4IEBAIGV4dGVybiAiQyIgX19kZWNsc3BlYyhkbGxpbXBvcnQpIHZvaWQg
Q2EKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTR2xvYmFsRGF0YTsKLXZvaWQgcmVsZWFz
ZUV4ZWN1dGFibGVNZW1vcnkoSlNHbG9iYWxEYXRhJik7CitjbGFzcyBWTTsKK3ZvaWQgcmVsZWFz
ZUV4ZWN1dGFibGVNZW1vcnkoVk0mKTsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGppdEFsbG9j
YXRpb25HcmFudWxlID0gMzI7CiAKQEAgLTExOCw3ICsxMTgsNyBAQCBjbGFzcyBFeGVjdXRhYmxl
QWxsb2NhdG9yIHsKICAgICBlbnVtIFByb3RlY3Rpb25TZXR0aW5nIHsgV3JpdGFibGUsIEV4ZWN1
dGFibGUgfTsKIAogcHVibGljOgotICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IoSlNHbG9iYWxEYXRh
Jik7CisgICAgRXhlY3V0YWJsZUFsbG9jYXRvcihWTSYpOwogICAgIH5FeGVjdXRhYmxlQWxsb2Nh
dG9yKCk7CiAgICAgCiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUFsbG9jYXRvcigpOwpAQCAt
MTM1LDcgKzEzNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkdW1wUHJvZmlsZSgpIHsg
fQogI2VuZGlmCiAKLSAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9j
YXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQsIEpJ
VENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5k
bGU+IGFsbG9jYXRlKFZNJiwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCwgSklU
Q29tcGlsYXRpb25FZmZvcnQpOwogCiAjaWYgRU5BQkxFKEFTU0VNQkxFUl9XWF9FWENMVVNJVkUp
CiAgICAgc3RhdGljIHZvaWQgbWFrZVdyaXRhYmxlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVk
Vk1Qb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1
dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgRXhlY3V0YWJsZUFsbG9jYXRv
cjo6aW5pdGlhbGl6ZUFsbG8KICAgICBDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IoYWxs
b2NhdG9yKTsKIH0KIAotRXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcihK
U0dsb2JhbERhdGEmKQorRXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcihW
TSYpCiB7CiAgICAgQVNTRVJUKGFsbG9jYXRvcik7CiB9CkBAIC0xNTYsMTMgKzE1NiwxMyBAQCBk
b3VibGUgRXhlY3V0YWJsZUFsbG9jYXRvcjo6bWVtb3J5UHJlc3N1CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlQWxs
b2NhdG9yOjphbGxvY2F0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBzaXplSW5C
eXRlcywgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK1Bhc3NS
ZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2Nh
dGUoVk0mIHZtLCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxh
dGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+
IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsKICAg
ICBpZiAoIXJlc3VsdCkgewogICAgICAgICBpZiAoZWZmb3J0ID09IEpJVENvbXBpbGF0aW9uQ2Fu
RmFpbCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIHJlbGVhc2VFeGVjdXRh
YmxlTWVtb3J5KGdsb2JhbERhdGEpOworICAgICAgICByZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSh2
bSk7CiAgICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93
bmVyVUlEKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUu
Y3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdh
cmVKSVRTdHViUm91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNp
ZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0
YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUg
IlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCkBAIC0zNywxMyArMzcsMTMg
QEAKIG5hbWVzcGFjZSBKU0MgewogCiBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6OkdDQXdhcmVKSVRT
dHViUm91dGluZSgKLSAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUsIEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgYm9vbCBpc0Nsb3N1cmVDYWxsKQorICAgIGNvbnN0IE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiYgY29kZSwgVk0mIHZtLCBib29sIGlzQ2xvc3VyZUNhbGwpCiAgICAg
OiBKSVRTdHViUm91dGluZShjb2RlKQogICAgICwgbV9tYXlCZUV4ZWN1dGluZyhmYWxzZSkKICAg
ICAsIG1faXNKZXR0aXNvbmVkKGZhbHNlKQogICAgICwgbV9pc0Nsb3N1cmVDYWxsKGlzQ2xvc3Vy
ZUNhbGwpCiB7Ci0gICAgZ2xvYmFsRGF0YS5oZWFwLm1faml0U3R1YlJvdXRpbmVzLmFkZCh0aGlz
KTsKKyAgICB2bS5oZWFwLm1faml0U3R1YlJvdXRpbmVzLmFkZCh0aGlzKTsKIH0KICAgICAKIEdD
QXdhcmVKSVRTdHViUm91dGluZTo6fkdDQXdhcmVKSVRTdHViUm91dGluZSgpIHsgfQpAQCAtNzks
MTAgKzc5LDEwIEBAIHZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWQKIH0K
IAogTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3Q6Ok1hcmtpbmdHQ0F3
YXJlSklUU3R1YlJvdXRpbmVXaXRoT25lT2JqZWN0KAotICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiYgY29kZSwgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBKU0NlbGwqIG93
bmVyLAorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwgVk0mIHZtLCBjb25z
dCBKU0NlbGwqIG93bmVyLAogICAgIEpTQ2VsbCogb2JqZWN0KQotICAgIDogR0NBd2FyZUpJVFN0
dWJSb3V0aW5lKGNvZGUsIGdsb2JhbERhdGEpCi0gICAgLCBtX29iamVjdChnbG9iYWxEYXRhLCBv
d25lciwgb2JqZWN0KQorICAgIDogR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtKQorICAg
ICwgbV9vYmplY3Qodm0sIG93bmVyLCBvYmplY3QpCiB7CiB9CiAKQEAgLTk3LDcgKzk3LDcgQEAg
dm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aE9uZQogCiBQYXNzUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiBjcmVhdGVKSVRTdHViUm91dGluZSgKICAgICBjb25zdCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYmIGNvZGUsCi0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLAorICAgIFZN
JiB2bSwKICAgICBjb25zdCBKU0NlbGwqLAogICAgIGJvb2wgbWFrZXNDYWxscykKIHsKQEAgLTEw
NSwxMiArMTA1LDEyIEBAIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0dWIK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKSVRTdHViUm91dGluZShjb2RlKSk7CiAKICAg
ICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxKSVRTdHViUm91dGluZT4oCi0gICAgICAgIGFk
b3B0UmVmKG5ldyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29kZSwgZ2xvYmFsRGF0YSkpKTsKKyAg
ICAgICAgYWRvcHRSZWYobmV3IEdDQXdhcmVKSVRTdHViUm91dGluZShjb2RlLCB2bSkpKTsKIH0K
IAogUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gY3JlYXRlSklUU3R1YlJvdXRpbmUoCiAgICAg
Y29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLAotICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwKKyAgICBWTSYgdm0sCiAgICAgY29uc3QgSlNDZWxsKiBvd25lciwKICAgICBib29s
IG1ha2VzQ2FsbHMsCiAgICAgSlNDZWxsKiBvYmplY3QpCkBAIC0xMTksNyArMTE5LDcgQEAgUGFz
c1JlZlB0cjxKSVRTdHViUm91dGluZT4gY3JlYXRlSklUU3R1YgogICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEpJVFN0dWJSb3V0aW5lKGNvZGUpKTsKICAgICAKICAgICByZXR1cm4gc3RhdGlj
X3BvaW50ZXJfY2FzdDxKSVRTdHViUm91dGluZT4oCi0gICAgICAgIGFkb3B0UmVmKG5ldyBNYXJr
aW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aE9uZU9iamVjdChjb2RlLCBnbG9iYWxEYXRhLCBv
d25lciwgb2JqZWN0KSkpOworICAgICAgICBhZG9wdFJlZihuZXcgTWFya2luZ0dDQXdhcmVKSVRT
dHViUm91dGluZVdpdGhPbmVPYmplY3QoY29kZSwgdm0sIG93bmVyLCBvYmplY3QpKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3
YXJlSklUU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01NCw3ICs1NCw3IEBAIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0OwogLy8gbGlzdCB3aGlj
aCBkb2VzIG5vdCBnZXQgcmVjbGFpbWVkIGFsbCBhdCBvbmNlKS4KIGNsYXNzIEdDQXdhcmVKSVRT
dHViUm91dGluZSA6IHB1YmxpYyBKSVRTdHViUm91dGluZSB7CiBwdWJsaWM6Ci0gICAgR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIEpTR2xvYmFsRGF0
YSYsIGJvb2wgaXNDbG9zdXJlQ2FsbCA9IGZhbHNlKTsKKyAgICBHQ0F3YXJlSklUU3R1YlJvdXRp
bmUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgVk0mLCBib29sIGlzQ2xvc3VyZUNhbGwg
PSBmYWxzZSk7CiAgICAgdmlydHVhbCB+R0NBd2FyZUpJVFN0dWJSb3V0aW5lKCk7CiAgICAgCiAg
ICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtODQs
NyArODQsNyBAQCBwcml2YXRlOgogY2xhc3MgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdp
dGhPbmVPYmplY3QgOiBwdWJsaWMgR0NBd2FyZUpJVFN0dWJSb3V0aW5lIHsKIHB1YmxpYzoKICAg
ICBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aE9uZU9iamVjdCgKLSAgICAgICAgY29u
c3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgSlNHbG9iYWxEYXRhJiwgY29uc3QgSlNDZWxsKiBv
d25lciwgSlNDZWxsKik7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIFZN
JiwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNDZWxsKik7CiAgICAgdmlydHVhbCB+TWFya2luZ0dD
QXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3QoKTsKICAgICAKIHByb3RlY3RlZDoKQEAg
LTEwMiw3ICsxMDIsNyBAQCBwcml2YXRlOgogLy8gCiAvLyBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiBjcmVhdGVKSVRTdHViUm91dGluZSgKIC8vICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiYgY29kZSwKLS8vICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwKKy8vICAgIFZNJiB2
bSwKIC8vICAgIGNvbnN0IEpTQ2VsbCogb3duZXIsCiAvLyAgICBib29sIG1ha2VzQ2FsbHMsCiAv
LyAgICAuLi4pOwpAQCAtMTE0LDkgKzExNCw5IEBAIHByaXZhdGU6CiAvLyB3YXkuCiAKIFBhc3NS
ZWZQdHI8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAotICAgIGNvbnN0IE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiYsIEpTR2xvYmFsRGF0YSYsIGNvbnN0IEpTQ2VsbCogb3duZXIs
IGJvb2wgbWFrZXNDYWxscyk7CisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgVk0m
LCBjb25zdCBKU0NlbGwqIG93bmVyLCBib29sIG1ha2VzQ2FsbHMpOwogUGFzc1JlZlB0cjxKSVRT
dHViUm91dGluZT4gY3JlYXRlSklUU3R1YlJvdXRpbmUoCi0gICAgY29uc3QgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmJiwgSlNHbG9iYWxEYXRhJiwgY29uc3QgSlNDZWxsKiBvd25lciwgYm9vbCBtYWtl
c0NhbGxzLAorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIFZNJiwgY29uc3QgSlND
ZWxsKiBvd25lciwgYm9vbCBtYWtlc0NhbGxzLAogICAgIEpTQ2VsbCopOwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE0ODY1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzAsOSArNzAsOSBAQCB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhDb2RlQmxv
CiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3Ms
IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIH0KIAotSklUOjpKSVQoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKLSAgICA6IG1faW50ZXJwcmV0ZXIoZ2xvYmFsRGF0
YS0+aW50ZXJwcmV0ZXIpCi0gICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKK0pJVDo6SklU
KFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgOiBtX2ludGVycHJldGVyKHZtLT5p
bnRlcnByZXRlcikKKyAgICAsIG1fdm0odm0pCiAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2sp
CiAgICAgLCBtX2xhYmVscyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPm51bWJlck9mSW5zdHJ1Y3Rp
b25zKCkgOiAwKQogICAgICwgbV9ieXRlY29kZU9mZnNldCgodW5zaWduZWQpLTEpCkBAIC0xMjAs
MTAgKzEyMCwxMCBAQCB2b2lkIEpJVDo6ZW1pdE9wdGltaXphdGlvbkNoZWNrKE9wdGltaXphCiAK
IHZvaWQgSklUOjplbWl0V2F0Y2hkb2dUaW1lckNoZWNrKCkKIHsKLSAgICBpZiAoIW1fZ2xvYmFs
RGF0YS0+d2F0Y2hkb2cuaXNFbmFibGVkKCkpCisgICAgaWYgKCFtX3ZtLT53YXRjaGRvZy5pc0Vu
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSnVtcCBza2lwQ2hlY2sgPSBicmFuY2hU
ZXN0OChaZXJvLCBBYnNvbHV0ZUFkZHJlc3MobV9nbG9iYWxEYXRhLT53YXRjaGRvZy50aW1lckRp
ZEZpcmVBZGRyZXNzKCkpKTsKKyAgICBKdW1wIHNraXBDaGVjayA9IGJyYW5jaFRlc3Q4KFplcm8s
IEFic29sdXRlQWRkcmVzcyhtX3ZtLT53YXRjaGRvZy50aW1lckRpZEZpcmVBZGRyZXNzKCkpKTsK
ICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfaGFuZGxlX3dhdGNoZG9nX3RpbWVy
KTsKICAgICBzdHViQ2FsbC5jYWxsKCk7CiAgICAgc2tpcENoZWNrLmxpbmsodGhpcyk7CkBAIC02
MTEsMTEgKzYxMSwxMSBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVu
CiAgICAgfQogI2VuZGlmCiAgICAgCi0gICAgaWYgKE9wdGlvbnM6OnNob3dEaXNhc3NlbWJseSgp
IHx8IG1fZ2xvYmFsRGF0YS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKQorICAgIGlmIChPcHRpb25z
OjpzaG93RGlzYXNzZW1ibHkoKSB8fCBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCiAgICAg
ICAgIG1fZGlzYXNzZW1ibGVyID0gYWRvcHRQdHIobmV3IEpJVERpc2Fzc2VtYmxlcihtX2NvZGVC
bG9jaykpOwotICAgIGlmIChtX2dsb2JhbERhdGEtPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikgewot
ICAgICAgICBtX2NvbXBpbGF0aW9uID0gbV9nbG9iYWxEYXRhLT5tX3BlckJ5dGVjb2RlUHJvZmls
ZXItPm5ld0NvbXBpbGF0aW9uKG1fY29kZUJsb2NrLCBQcm9maWxlcjo6QmFzZWxpbmUpOwotICAg
ICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV9nbG9iYWxEYXRhLT5t
X3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fY29kZUJsb2NrKTsKKyAgICBpZiAobV92bS0+bV9wZXJC
eXRlY29kZVByb2ZpbGVyKSB7CisgICAgICAgIG1fY29tcGlsYXRpb24gPSBtX3ZtLT5tX3BlckJ5
dGVjb2RlUHJvZmlsZXItPm5ld0NvbXBpbGF0aW9uKG1fY29kZUJsb2NrLCBQcm9maWxlcjo6QmFz
ZWxpbmUpOworICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92
bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7CiAgICAgfQogICAgIAogICAg
IGlmIChtX2Rpc2Fzc2VtYmxlcikKQEAgLTY2Niw3ICs2NjYsNyBAQCBKSVRDb2RlIEpJVDo6cHJp
dmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiAjZW5kaWYKIAogICAgICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKG1fY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEpOwotICAgICAgICBzdGFja0NoZWNrID0gYnJh
bmNoUHRyKEJlbG93LCBBYnNvbHV0ZUFkZHJlc3MobV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+
c3RhY2soKS5hZGRyZXNzT2ZFbmQoKSksIHJlZ1QxKTsKKyAgICAgICAgc3RhY2tDaGVjayA9IGJy
YW5jaFB0cihCZWxvdywgQWJzb2x1dGVBZGRyZXNzKG1fdm0tPmludGVycHJldGVyLT5zdGFjaygp
LmFkZHJlc3NPZkVuZCgpKSwgcmVnVDEpOwogICAgIH0KIAogICAgIExhYmVsIGZ1bmN0aW9uQm9k
eSA9IGxhYmVsKCk7CkBAIC03MTAsNyArNzEwLDcgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21w
aWxlKENvZGVQdHIqIGZ1bgogICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKICAgICAgICAgbV9kaXNh
c3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2ssIGVmZm9ydCk7CisgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2ssIGVmZm9ydCk7CiAg
ICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCiAgICAgICAgIHJldHVybiBK
SVRDb2RlKCk7CiAKQEAgLTgwOSw3ICs4MDksNyBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBp
bGUoQ29kZVB0ciogZnVuCiAgICAgCiAgICAgQ29kZVJlZiByZXN1bHQgPSBwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkoKTsKICAgICAKLSAgICBtX2dsb2JhbERhdGEt
Pm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC5hZGQoCisgICAg
bV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULmFkZCgK
ICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihyZXN1bHQuc2l6ZSgpKSAvCiAgICAgICAgIHN0
YXRpY19jYXN0PGRvdWJsZT4obV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSkpOwog
ICAgIApAQCAtODIyLDEzICs4MjIsMTMgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENv
ZGVQdHIqIGZ1bgogICAgIHJldHVybiBKSVRDb2RlKHJlc3VsdCwgSklUQ29kZTo6QmFzZWxpbmVK
SVQpOwogfQogCi12b2lkIEpJVDo6bGlua0ZvcihKU0Z1bmN0aW9uKiBjYWxsZWUsIENvZGVCbG9j
ayogY2FsbGVyQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgSklUOjpDb2Rl
UHRyIGNvZGUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3ZvaWQgSklUOjpsaW5rRm9yKEpT
RnVuY3Rpb24qIGNhbGxlZSwgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2ssIENvZGVCbG9jayog
Y2FsbGVlQ29kZUJsb2NrLCBKSVQ6OkNvZGVQdHIgY29kZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8sIFZNKiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwogCiAgICAgQVNTRVJUKCFj
YWxsTGlua0luZm8tPmlzTGlua2VkKCkpOwotICAgIGNhbGxMaW5rSW5mby0+Y2FsbGVlLnNldCgq
Z2xvYmFsRGF0YSwgY2FsbExpbmtJbmZvLT5ob3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7Ci0gICAgY2FsbExpbmtJbmZvLT5sYXN0U2VlbkNh
bGxlZS5zZXQoKmdsb2JhbERhdGEsIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IGNhbGxlZSk7CisgICAgY2FsbExpbmtJbmZvLT5jYWxsZWUuc2V0KCp2bSwgY2FsbExpbmtJbmZv
LT5ob3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxl
ZSk7CisgICAgY2FsbExpbmtJbmZvLT5sYXN0U2VlbkNhbGxlZS5zZXQoKnZtLCBjYWxsZXJDb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwogICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKGNhbGxMaW5rSW5mby0+aG90UGF0aE90aGVyLCBjb2RlKTsKIAogICAgIGlmIChjYWxsZWVD
b2RlQmxvY2spCkBAIC04MzksMjMgKzgzOSwyMyBAQCB2b2lkIEpJVDo6bGlua0ZvcihKU0Z1bmN0
aW9uKiBjYWxsZWUsIENvCiAgICAgICAgIEFTU0VSVChjYWxsTGlua0luZm8tPmNhbGxUeXBlID09
IENhbGxMaW5rSW5mbzo6Q2FsbAogICAgICAgICAgICAgICAgfHwgY2FsbExpbmtJbmZvLT5jYWxs
VHlwZSA9PSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzKTsKICAgICAgICAgaWYgKGNhbGxMaW5r
SW5mby0+Y2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZvOjpDYWxsKSB7Ci0gICAgICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgZ2xvYmFs
RGF0YS0+Z2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAg
ICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgdm0tPmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGdsb2JhbERhdGEtPmdldENU
SVN0dWIodmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1
Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBnbG9iYWxEYXRhLT5n
ZXRDVElTdHViKHZpcnR1YWxDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRD
VElTdHViKHZpcnR1YWxDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSk7CiB9CiAKIHZvaWQgSklU
OjpsaW5rU2xvd0NhbGwoQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2ssIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvKQogewogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJD
b2RlQmxvY2spOwogCi0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxs
UmV0dXJuTG9jYXRpb24sIGNhbGxlckNvZGVCbG9jay0+Z2xvYmFsRGF0YSgpLT5nZXRDVElTdHVi
KHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBjYWxsZXJDb2RlQmxvY2stPnZtKCkt
PmdldENUSVN0dWIodmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNDg2NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MDIsODMgKzMwMiw4MyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwogCiAgICAgcHVibGljOgotICAgICAg
ICBzdGF0aWMgSklUQ29kZSBjb21waWxlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQ29kZVB0ciogZnVu
Y3Rpb25FbnRyeUFyaXR5Q2hlY2sgPSAwKQorICAgICAgICBzdGF0aWMgSklUQ29kZSBjb21waWxl
KFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9y
dCwgQ29kZVB0ciogZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2sgPSAwKQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gSklUKGdsb2JhbERhdGEsIGNvZGVCbG9jaykucHJpdmF0ZUNvbXBpbGUo
ZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2ssIGVmZm9ydCk7CisgICAgICAgICAgICByZXR1cm4gSklU
KHZtLCBjb2RlQmxvY2spLnByaXZhdGVDb21waWxlKGZ1bmN0aW9uRW50cnlBcml0eUNoZWNrLCBl
ZmZvcnQpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxl
Q2xvc3VyZUNhbGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2ssIENvZGVCbG9jayogY2FsbGVlQ29k
ZUJsb2NrLCBTdHJ1Y3R1cmUqIGV4cGVjdGVkU3RydWN0dXJlLCBFeGVjdXRhYmxlQmFzZSogZXhw
ZWN0ZWRFeGVjdXRhYmxlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cikKKyAgICAgICAg
c3RhdGljIHZvaWQgY29tcGlsZUNsb3N1cmVDYWxsKFZNKiB2bSwgQ2FsbExpbmtJbmZvKiBjYWxs
TGlua0luZm8sIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGNhbGxlZUNv
ZGVCbG9jaywgU3RydWN0dXJlKiBleHBlY3RlZFN0cnVjdHVyZSwgRXhlY3V0YWJsZUJhc2UqIGV4
cGVjdGVkRXhlY3V0YWJsZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY2FsbGVyQ29kZUJsb2NrKTsKKyAg
ICAgICAgICAgIEpJVCBqaXQodm0sIGNhbGxlckNvZGVCbG9jayk7CiAgICAgICAgICAgICBqaXQu
bV9ieXRlY29kZU9mZnNldCA9IGNhbGxMaW5rSW5mby0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4
OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlQ2xvc3VyZUNhbGwoY2FsbExpbmtJbmZv
LCBjYWxsZWVDb2RlQmxvY2ssIGV4cGVjdGVkU3RydWN0dXJlLCBleHBlY3RlZEV4ZWN1dGFibGUs
IGNvZGVQdHIpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5
SWRQcm90byhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IGNh
Y2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQorICAgICAgICBzdGF0
aWMgdm9pZCBjb21waWxlR2V0QnlJZFByb3RvKFZNKiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQg
Y2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAg
IEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNl
dCA9IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21w
aWxlR2V0QnlJZFByb3RvKHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSwg
aWRlbnQsIHNsb3QsIGNhY2hlZE9mZnNldCwgcmV0dXJuQWRkcmVzcywgY2FsbEZyYW1lKTsKICAg
ICAgICAgfQogCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3Jw
aGljU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5
T2Zmc2V0IGNhY2hlZE9mZnNldCkKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5SWRT
ZWxmTGlzdChWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1
Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQg
Y2FjaGVkT2Zmc2V0KQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KGdsb2JhbERhdGEs
IGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwogICAgICAg
ICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAg
ICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdChzdHViSW5mbywgcG9s
eW1vcnBoaWNTdHJ1Y3R1cmVzLCBjdXJyZW50SW5kZXgsIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3Qs
IGNhY2hlZE9mZnNldCk7CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdl
dEJ5SWRQcm90b0xpc3QoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCBp
bnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5
cGVTdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCkKKyAgICAgICAgc3RhdGljIHZvaWQg
Y29tcGlsZUdldEJ5SWRQcm90b0xpc3QoVk0qIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBo
aWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCBpbnQgY3VycmVu
dEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1
cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFBy
b3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCkKICAgICAgICAgewotICAgICAgICAgICAgSklUIGpp
dChnbG9iYWxEYXRhLCBjb2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJs
b2NrKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0
KHN0dWJJbmZvLCBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCBjdXJyZW50SW5kZXgsIHN0cnVjdHVy
ZSwgcHJvdG90eXBlU3RydWN0dXJlLCBpZGVudCwgc2xvdCwgY2FjaGVkT2Zmc2V0LCBjYWxsRnJh
bWUpOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeUlkQ2hhaW5M
aXN0KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlTGlzdCwgaW50IGN1cnJlbnRJ
bmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90
IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQpCisgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBp
bGVHZXRCeUlkQ2hhaW5MaXN0KFZNKiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlTGlzdCwgaW50IGN1cnJlbnRJbmRl
eCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNv
dW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQ
cm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBq
aXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVC
bG9jayk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlz
dChzdHViSW5mbywgcHJvdG90eXBlU3RydWN0dXJlTGlzdCwgY3VycmVudEluZGV4LCBzdHJ1Y3R1
cmUsIGNoYWluLCBjb3VudCwgaWRlbnQsIHNsb3QsIGNhY2hlZE9mZnNldCwgY2FsbEZyYW1lKTsK
ICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeUlkQ2hhaW4oSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRP
ZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKKyAgICAgICAgc3RhdGljIHZv
aWQgY29tcGlsZUdldEJ5SWRDaGFpbihWTSogdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0
IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogICAgICAgICB7
Ci0gICAgICAgICAgICBKSVQgaml0KGdsb2JhbERhdGEsIGNvZGVCbG9jayk7CisgICAgICAgICAg
ICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZz
ZXQgPSBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29t
cGlsZUdldEJ5SWRDaGFpbihzdHViSW5mbywgc3RydWN0dXJlLCBjaGFpbiwgY291bnQsIGlkZW50
LCBzbG90LCBjYWNoZWRPZmZzZXQsIHJldHVybkFkZHJlc3MsIGNhbGxGcmFtZSk7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeUlkVHJhbnNpdGlv
bihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBTdHJ1Y3R1cmVDaGFp
biogY2hhaW4sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgYm9vbCBkaXJlY3QpCisg
ICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihWTSogdm0sIENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSog
b2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgY2Fj
aGVkT2Zmc2V0LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcywgYm9vbCBkaXJlY3QpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQoZ2xv
YmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7
CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oc3R1
YkluZm8sIG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjYWNoZWRPZmZzZXQsIGNoYWluLCBy
ZXR1cm5BZGRyZXNzLCBkaXJlY3QpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGF0
aWMgdm9pZCBjb21waWxlR2V0QnlWYWwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKKyAgICAgICAgc3RhdGljIHZvaWQg
Y29tcGlsZUdldEJ5VmFsKFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyog
YnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBh
cnJheU1vZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29k
ZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CiAgICAgICAgICAg
ICBqaXQubV9ieXRlY29kZU9mZnNldCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAg
ICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUdldEJ5VmFsKGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVz
cywgYXJyYXlNb2RlKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQ
dXRCeVZhbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrLCBC
eVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRB
cnJheU1vZGUgYXJyYXlNb2RlKQorICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlWYWwo
Vk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICAg
ICAgewotICAgICAgICAgICAgSklUIGppdChnbG9iYWxEYXRhLCBjb2RlQmxvY2spOworICAgICAg
ICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2Rl
T2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZh
dGVDb21waWxlUHV0QnlWYWwoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwog
ICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIENvZGVSZWYgY29tcGlsZUNUSU5hdGl2ZUNhbGwo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jKQorICAgICAgICBz
dGF0aWMgQ29kZVJlZiBjb21waWxlQ1RJTmF0aXZlQ2FsbChWTSogdm0sIE5hdGl2ZUZ1bmN0aW9u
IGZ1bmMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghZ2xvYmFsRGF0YS0+Y2FuVXNlSklU
KCkpIHsKKyAgICAgICAgICAgIGlmICghdm0tPmNhblVzZUpJVCgpKSB7CiAjaWYgRU5BQkxFKExM
SU5UKQogICAgICAgICAgICAgICAgIHJldHVybiBDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYo
bGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZSk7CiAjZWxzZQogICAgICAgICAgICAgICAgIHJl
dHVybiBDb2RlUmVmKCk7CiAjZW5kaWYKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEpJVCBq
aXQoZ2xvYmFsRGF0YSwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gaml0LnByaXZhdGVDb21waWxl
Q1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBmdW5jKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0s
IDApOworICAgICAgICAgICAgcmV0dXJuIGppdC5wcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwo
dm0sIGZ1bmMpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgcmVzZXRQYXRjaEdl
dEJ5SWQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvKik7CkBAIC0zODYsOSArMzg2
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHBhdGNoR2V0QnlJZFNl
bGYoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9m
ZnNldCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIpOwogICAgICAgICBzdGF0aWMgdm9p
ZCBwYXRjaFB1dEJ5SWRSZXBsYWNlKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgU3Ry
dWN0dXJlKiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyLCBi
b29sIGRpcmVjdCk7CiAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVBhdGNoR2V0QXJyYXlM
ZW5ndGgoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQorICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxl
UGF0Y2hHZXRBcnJheUxlbmd0aChWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQo
Z2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9j
ayk7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgICAgICAvLyBGb3JjZSBwcm9maWxpbmcg
dG8gYmUgZW5hYmxlZCBkdXJpbmcgc3R1YiBnZW5lcmF0aW9uLgogICAgICAgICAgICAgaml0Lm1f
Y2FuQmVPcHRpbWl6ZWQgPSB0cnVlOwpAQCAtMzk4LDExICszOTgsMTEgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICByZXR1cm4gaml0LnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxl
bmd0aChyZXR1cm5BZGRyZXNzKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyB2b2lkIGxp
bmtGb3IoSlNGdW5jdGlvbiogY2FsbGVlLCBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jaywgQ29k
ZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIENvZGVQdHIsIENhbGxMaW5rSW5mbyosIEpTR2xvYmFs
RGF0YSosIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgICAgICBzdGF0aWMgdm9pZCBsaW5r
Rm9yKEpTRnVuY3Rpb24qIGNhbGxlZSwgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2ssIENvZGVC
bG9jayogY2FsbGVlQ29kZUJsb2NrLCBDb2RlUHRyLCBDYWxsTGlua0luZm8qLCBWTSosIENvZGVT
cGVjaWFsaXphdGlvbktpbmQpOwogICAgICAgICBzdGF0aWMgdm9pZCBsaW5rU2xvd0NhbGwoQ29k
ZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2ssIENhbGxMaW5rSW5mbyopOwogCiAgICAgcHJpdmF0ZToK
LSAgICAgICAgSklUKEpTR2xvYmFsRGF0YSosIENvZGVCbG9jayogPSAwKTsKKyAgICAgICAgSklU
KFZNKiwgQ29kZUJsb2NrKiA9IDApOwogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTGlua1Bhc3MoKTsKQEAgLTQyMSw4
ICs0MjEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdl
dEJ5VmFsKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7CiAgICAg
ICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNz
UHRyLCBKSVRBcnJheU1vZGUpOwogCi0gICAgICAgIExhYmVsIHByaXZhdGVDb21waWxlQ1RJTmF0
aXZlQ2FsbChKU0dsb2JhbERhdGEqLCBib29sIGlzQ29uc3RydWN0ID0gZmFsc2UpOwotICAgICAg
ICBDb2RlUmVmIHByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqLCBOYXRp
dmVGdW5jdGlvbik7CisgICAgICAgIExhYmVsIHByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChW
TSosIGJvb2wgaXNDb25zdHJ1Y3QgPSBmYWxzZSk7CisgICAgICAgIENvZGVSZWYgcHJpdmF0ZUNv
bXBpbGVDVElOYXRpdmVDYWxsKFZNKiwgTmF0aXZlRnVuY3Rpb24pOwogICAgICAgICB2b2lkIHBy
aXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGlzRGlyZWN0UHV0QnlJZChTdHJ1Y3R1cmVT
dHViSW5mbyopOwpAQCAtODk2LDcgKzg5Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAK
ICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7Ci0gICAgICAgIEpTR2xvYmFsRGF0
YSogbV9nbG9iYWxEYXRhOworICAgICAgICBWTSogbV92bTsKICAgICAgICAgQ29kZUJsb2NrKiBt
X2NvZGVCbG9jazsKIAogICAgICAgICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9jYWxsczsKQEAgLTkz
NSw3ICs5MzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgT3duUHRyPEpJVERpc2Fzc2Vt
Ymxlcj4gbV9kaXNhc3NlbWJsZXI7CiAgICAgICAgIFJlZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRp
b24+IG1fY29tcGlsYXRpb247CiAgICAgICAgIFdlYWtSYW5kb20gbV9yYW5kb21HZW5lcmF0b3I7
Ci0gICAgICAgIHN0YXRpYyBDb2RlUmVmIHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihKU0ds
b2JhbERhdGEqKTsKKyAgICAgICAgc3RhdGljIENvZGVSZWYgc3RyaW5nR2V0QnlWYWxTdHViR2Vu
ZXJhdG9yKFZNKik7CiAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIGJvb2wg
bV9jYW5CZU9wdGltaXplZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwzMl82NC5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDcgKzE2Miw3IEBAIHZv
aWQgSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoSW5zdHJ1Y3Rpb24KICAgICAgICAgYWRkUHRyKGNh
bGxGcmFtZVJlZ2lzdGVyLCByZWdUMyk7CiAgICAgICAgIC8vIHJlZ1QzOiBuZXdDYWxsRnJhbWUK
IAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoUHRyKEJlbG93LCBBYnNvbHV0ZUFkZHJl
c3MobV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+c3RhY2soKS5hZGRyZXNzT2ZFbmQoKSksIHJl
Z1QzKSk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hQdHIoQmVsb3csIEFic29sdXRl
QWRkcmVzcyhtX3ZtLT5pbnRlcnByZXRlci0+c3RhY2soKS5hZGRyZXNzT2ZFbmQoKSksIHJlZ1Qz
KSk7CiAKICAgICAgICAgLy8gSW5pdGlhbGl6ZSBBcmd1bWVudENvdW50LgogICAgICAgICBzdG9y
ZTMyKHJlZ1QyLCBwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQsIHJlZ1QzKSk7CkBA
IC0yMTUsNyArMjE1LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKFZlY3Rv
cgogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAogICAgIGVtaXRMb2FkKEpTU3RhY2s6OkNhbGxl
ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0TmFrZWRDYWxsKG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJ
U3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICBlbWl0TmFrZWRDYWxsKG1f
dm0tPmdldENUSVN0dWIodmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAKICAgICBzYW1w
bGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOwogfQpAQCAtMzAwLDcgKzMwMCw3IEBAIHZvaWQgSklU
Ojpjb21waWxlT3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgIAotICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVt
aXROYWtlZENhbGwob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gbV9nbG9iYWxEYXRhLT5nZXRD
VElTdHViKGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IG1fZ2xvYmFsRGF0YS0+Z2V0
Q1RJU3R1YihsaW5rQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICBtX2NhbGxTdHJ1Y3R1cmVT
dHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24g
PSBlbWl0TmFrZWRDYWxsKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IG1fdm0tPmdldENUSVN0
dWIobGlua0NvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpIDogbV92bS0+Z2V0Q1RJU3R1YihsaW5r
Q2FsbEdlbmVyYXRvcikuY29kZSgpKTsKIAogICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9j
ayk7CiB9CkBAIC0zMjQsMTEgKzMyNCwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDbG9z
dXJlQ2FsbChDYWxsCiAgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDIp
OwogICAgIEp1bXAgc2xvdyA9IGp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7CiAgICAgCiAgICAgcGF0Y2hCdWZm
ZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsK
ICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby0+aG90UGF0aE90aGVyLmxh
YmVsQXRPZmZzZXQoMCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9u
TGFiZWwobV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2Rl
KCkpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsKG1fdm0t
PmdldENUSVN0dWIodmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgIAogICAgIFJl
ZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGFkb3B0UmVmKG5ldyBD
bG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAogICAgICAgICBGSU5BTElaRV9DT0RFKApAQCAtMzM4LDcg
KzMzOCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKENhbGwKICAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPmhvdFBhdGhPdGhlci5sYWJlbEF0T2Zmc2V0KDApLmV4
ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgICAgICAgICAgY29kZVB0ci5leGVjdXRhYmxlQWRk
cmVzcygpLAogICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhwb2ludGVyRHVtcChjYWxsZWVDb2Rl
QmxvY2spKS5kYXRhKCkpKSwKLSAgICAgICAgKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBleHBlY3RlZFN0cnVjdHVyZSwgZXhwZWN0ZWRFeGVjdXRhYmxlLAor
ICAgICAgICAqbV92bSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleHBlY3RlZFN0
cnVjdHVyZSwgZXhwZWN0ZWRFeGVjdXRhYmxlLAogICAgICAgICBjYWxsTGlua0luZm8tPmNvZGVP
cmlnaW4pKTsKICAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxv
Y2spOwpAQCAtMzQ2LDcgKzM0Niw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVD
YWxsKENhbGwKICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVtcCgKICAgICAgICAgUmVw
YXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoY2FsbExpbmtJ
bmZvLT5ob3RQYXRoQmVnaW4pLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGlu
ZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5m
by0+Y2FsbFJldHVybkxvY2F0aW9uLCBtX2dsb2JhbERhdGEtPmdldENUSVN0dWIodmlydHVhbENh
bGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJ
bmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIG1fdm0tPmdldENUSVN0dWIodmlydHVhbENhbGxHZW5l
cmF0b3IpLmNvZGUoKSk7CiAgICAgCiAgICAgY2FsbExpbmtJbmZvLT5zdHViID0gc3R1YlJvdXRp
bmUucmVsZWFzZSgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgSklUOjpjb21waWxlTG9h
ZFZhcmFyZ3MoSW5zdHJ1Y3Rpb24KICAgICAgICAgYWRkUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBy
ZWdUMSk7CiAgICAgICAgIC8vIHJlZ1QxOiBuZXdDYWxsRnJhbWUKIAotICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoYnJhbmNoUHRyKEJlbG93LCBBYnNvbHV0ZUFkZHJlc3MobV9nbG9iYWxEYXRhLT5p
bnRlcnByZXRlci0+c3RhY2soKS5hZGRyZXNzT2ZFbmQoKSksIHJlZ1QxKSk7CisgICAgICAgIHNs
b3dDYXNlLmFwcGVuZChicmFuY2hQdHIoQmVsb3csIEFic29sdXRlQWRkcmVzcyhtX3ZtLT5pbnRl
cnByZXRlci0+c3RhY2soKS5hZGRyZXNzT2ZFbmQoKSksIHJlZ1QxKSk7CiAKICAgICAgICAgLy8g
SW5pdGlhbGl6ZSBBcmd1bWVudENvdW50LgogICAgICAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNz
KHJlZ1QxLCBKU1N0YWNrOjpBcmd1bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMucGF5bG9hZCkpKTsKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoVmVjdG9yCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCiAgICAgZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXI2NChKU1N0YWNrOjpDYWxsZWUsIHJlZ1QwKTsKLSAgICBlbWl0
TmFrZWRDYWxsKG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvciku
Y29kZSgpKTsKKyAgICBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIodmlydHVhbENhbGxH
ZW5lcmF0b3IpLmNvZGUoKSk7CiAKICAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOwog
fQpAQCAtMjIwLDcgKzIyMCw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoT3Bj
b2RlSUQKIAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICAKLSAgICBtX2NhbGxTdHJ1Y3R1
cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRp
b24gPSBlbWl0TmFrZWRDYWxsKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IG1fZ2xvYmFsRGF0
YS0+Z2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCkgOiBtX2dsb2JhbERh
dGEtPmdldENUSVN0dWIobGlua0NhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgbV9jYWxsU3Ry
dWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxv
Y2F0aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBtX3ZtLT5n
ZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IG1fdm0tPmdldENUSVN0
dWIobGlua0NhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAKICAgICBzYW1wbGVDb2RlQmxvY2sobV9j
b2RlQmxvY2spOwogfQpAQCAtMjQ0LDExICsyNDQsMTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlQ2xvc3VyZUNhbGwoQ2FsbAogICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJu
KHJlZ1QyKTsKICAgICBKdW1wIHNsb3cgPSBqdW1wKCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOwogICAgIAogICAgIHBh
dGNoQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVz
cygpKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8tPmhvdFBhdGhP
dGhlci5sYWJlbEF0T2Zmc2V0KDApKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVM
b2NhdGlvbkxhYmVsKG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRv
cikuY29kZSgpKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJl
bChtX3ZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAK
ICAgICBSZWZQdHI8Q2xvc3VyZUNhbGxTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBhZG9wdFJl
ZihuZXcgQ2xvc3VyZUNhbGxTdHViUm91dGluZSgKICAgICAgICAgRklOQUxJWkVfQ09ERSgKQEAg
LTI1OCw3ICsyNTgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2FsbChDYWxs
CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5ob3RQYXRoT3RoZXIubGFiZWxBdE9mZnNl
dCgwKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIGNvZGVQdHIuZXhlY3V0
YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICB0b0NTdHJpbmcocG9pbnRlckR1bXAoY2Fs
bGVlQ29kZUJsb2NrKSkuZGF0YSgpKSksCi0gICAgICAgICptX2dsb2JhbERhdGEsIG1fY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhwZWN0ZWRTdHJ1Y3R1cmUsIGV4cGVjdGVkRXhlY3V0
YWJsZSwKKyAgICAgICAgKm1fdm0sIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhw
ZWN0ZWRTdHJ1Y3R1cmUsIGV4cGVjdGVkRXhlY3V0YWJsZSwKICAgICAgICAgY2FsbExpbmtJbmZv
LT5jb2RlT3JpZ2luKSk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1f
Y29kZUJsb2NrKTsKQEAgLTI2Niw3ICsyNjYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVD
bG9zdXJlQ2FsbChDYWxsCiAgICAgcmVwYXRjaEJ1ZmZlci5yZXBsYWNlV2l0aEp1bXAoCiAgICAg
ICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGNh
bGxMaW5rSW5mby0+aG90UGF0aEJlZ2luKSwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1
YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxs
TGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgbV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKHZp
cnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNh
bGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBtX3ZtLT5nZXRDVElTdHViKHZpcnR1YWxD
YWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogICAgIAogICAgIGNhbGxMaW5rSW5mby0+c3R1YiA9IHN0
dWJSb3V0aW5lLnJlbGVhc2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29k
ZS5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENv
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAK
ICNpZiBFTkFCTEUoSklUKQotICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKKyAgICBjbGFzcyBWTTsK
ICAgICBjbGFzcyBKU1N0YWNrOwogI2VuZGlmCiAgICAgCkBAIC0xMzAsMTAgKzEzMCwxMCBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIC8vIEV4ZWN1dGUgdGhl
IGNvZGUhCi0gICAgICAgIGlubGluZSBKU1ZhbHVlIGV4ZWN1dGUoSlNTdGFjayogc3RhY2ssIENh
bGxGcmFtZSogY2FsbEZyYW1lLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCisgICAgICAgIGlu
bGluZSBKU1ZhbHVlIGV4ZWN1dGUoSlNTdGFjayogc3RhY2ssIENhbGxGcmFtZSogY2FsbEZyYW1l
LCBWTSogdm0pCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1
ZTo6ZGVjb2RlKGN0aVRyYW1wb2xpbmUobV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCks
IHN0YWNrLCBjYWxsRnJhbWUsIDAsIDAsIGdsb2JhbERhdGEpKTsKLSAgICAgICAgICAgIHJldHVy
biBnbG9iYWxEYXRhLT5leGNlcHRpb24gPyBqc051bGwoKSA6IHJlc3VsdDsKKyAgICAgICAgICAg
IEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKGN0aVRyYW1wb2xpbmUobV9yZWYuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIHN0YWNrLCBjYWxsRnJhbWUsIDAsIDAsIHZtKSk7Cisg
ICAgICAgICAgICByZXR1cm4gdm0tPmV4Y2VwdGlvbiA/IGpzTnVsbCgpIDogcmVzdWx0OwogICAg
ICAgICB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREcml2
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERyaXZlci5o
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERyaXZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMiArNDAsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgogaW5saW5lIGJvb2wgaml0Q29tcGlsZUlm
QXBwcm9wcmlhdGUoRXhlY1N0YXRlKiBleGVjLCBPd25QdHI8Q29kZUJsb2NrVHlwZT4mIGNvZGVC
bG9jaywgSklUQ29kZSYgaml0Q29kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgCiAgICAgaWYgKGppdFR5cGUgPT0gY29kZUJsb2NrLT5nZXRKSVRU
eXBlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAotICAgIGlmICghZ2xvYmFsRGF0YS5j
YW5Vc2VKSVQoKSkKKyAgICBpZiAoIXZtLmNhblVzZUpJVCgpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAKICAgICBjb2RlQmxvY2stPnVubGlua0luY29taW5nQ2FsbHMoKTsKQEAgLTY0LDcg
KzY0LDcgQEAgaW5saW5lIGJvb2wgaml0Q29tcGlsZUlmQXBwcm9wcmlhdGUoRXhlYwogICAgICAg
ICAgICAgaml0Q29kZSA9IG9sZEpJVENvZGU7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KLSAgICAgICAgaml0Q29kZSA9IEpJVDo6Y29tcGlsZSgmZ2xvYmFsRGF0YSwgY29k
ZUJsb2NrLmdldCgpLCBlZmZvcnQpOworICAgICAgICBqaXRDb2RlID0gSklUOjpjb21waWxlKCZ2
bSwgY29kZUJsb2NrLmdldCgpLCBlZmZvcnQpOwogICAgICAgICBpZiAoIWppdENvZGUpIHsKICAg
ICAgICAgICAgIGppdENvZGUgPSBvbGRKSVRDb2RlOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtNzcsMTIgKzc3LDEyIEBAIGlubGluZSBib29sIGppdENvbXBpbGVJZkFwcHJvcHJpYXRl
KEV4ZWMKIAogaW5saW5lIGJvb2wgaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4mIGNvZGVCbG9jaywgSklUQ29k
ZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ss
IEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSklUQ29t
cGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9
IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIAogICAg
IGlmIChqaXRUeXBlID09IGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAKLSAgICBpZiAoIWdsb2JhbERhdGEuY2FuVXNlSklUKCkpCisgICAgaWYgKCF2
bS5jYW5Vc2VKSVQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgY29kZUJsb2Nr
LT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7CkBAIC0xMDMsNyArMTAzLDcgQEAgaW5saW5lIGJvb2wg
aml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaQogICAgICAgICAgICAgaml0Q29kZVdpdGhBcml0
eUNoZWNrID0gb2xkSklUQ29kZVdpdGhBcml0eUNoZWNrOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9Ci0gICAgICAgIGppdENvZGUgPSBKSVQ6OmNvbXBpbGUoJmdsb2JhbERh
dGEsIGNvZGVCbG9jay5nZXQoKSwgZWZmb3J0LCAmaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAg
ICAgICAgaml0Q29kZSA9IEpJVDo6Y29tcGlsZSgmdm0sIGNvZGVCbG9jay5nZXQoKSwgZWZmb3J0
LCAmaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKICAgICAgICAgaWYgKCFqaXRDb2RlKSB7CiAgICAg
ICAgICAgICBqaXRDb2RlID0gb2xkSklUQ29kZTsKICAgICAgICAgICAgIGppdENvZGVXaXRoQXJp
dHlDaGVjayA9IG9sZEpJVENvZGVXaXRoQXJpdHlDaGVjazsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsMjAgKzMwLDIwIEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSW50
ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxE
YXRhLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAKICNpZiBF
TkFCTEUoSklUKSB8fCBFTkFCTEUoTExJTlQpCiAKIG5hbWVzcGFjZSBKU0MgewogCi1FeGNlcHRp
b25IYW5kbGVyIGdlbmVyaWNUaHJvdyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWNTdGF0
ZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCB1bnNpZ25lZCB2UENJbmRleCkK
K0V4Y2VwdGlvbkhhbmRsZXIgZ2VuZXJpY1Rocm93KFZNKiB2bSwgRXhlY1N0YXRlKiBjYWxsRnJh
bWUsIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUsIHVuc2lnbmVkIHZQQ0luZGV4KQogewogICAgIFJF
TEVBU0VfQVNTRVJUKGV4Y2VwdGlvblZhbHVlKTsKICAgICAKLSAgICBnbG9iYWxEYXRhLT5leGNl
cHRpb24gPSBKU1ZhbHVlKCk7Ci0gICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSBnbG9iYWxEYXRh
LT5pbnRlcnByZXRlci0+dGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBleGNlcHRpb25WYWx1ZSwg
dlBDSW5kZXgpOyAvLyBUaGlzIG1heSB1cGRhdGUgY2FsbEZyYW1lICYgZXhjZXB0aW9uVmFsdWUh
Ci0gICAgZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gZXhjZXB0aW9uVmFsdWU7CisgICAgdm0tPmV4
Y2VwdGlvbiA9IEpTVmFsdWUoKTsKKyAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9IHZtLT5pbnRl
cnByZXRlci0+dGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBleGNlcHRpb25WYWx1ZSwgdlBDSW5k
ZXgpOyAvLyBUaGlzIG1heSB1cGRhdGUgY2FsbEZyYW1lICYgZXhjZXB0aW9uVmFsdWUhCisgICAg
dm0tPmV4Y2VwdGlvbiA9IGV4Y2VwdGlvblZhbHVlOwogCiAgICAgdm9pZCogY2F0Y2hSb3V0aW5l
OwogICAgIEluc3RydWN0aW9uKiBjYXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSAwOwpAQCAtNTMsMTgg
KzUzLDE4IEBAIEV4Y2VwdGlvbkhhbmRsZXIgZ2VuZXJpY1Rocm93KEpTR2xvYmFsRGEKICAgICB9
IGVsc2UKICAgICAgICAgY2F0Y2hSb3V0aW5lID0gRnVuY3Rpb25QdHIoTExJbnQ6OmdldENvZGVQ
dHIoY3RpT3BUaHJvd05vdENhdWdodCkpLnZhbHVlKCk7CiAgICAgCi0gICAgZ2xvYmFsRGF0YS0+
Y2FsbEZyYW1lRm9yVGhyb3cgPSBjYWxsRnJhbWU7Ci0gICAgZ2xvYmFsRGF0YS0+dGFyZ2V0TWFj
aGluZVBDRm9yVGhyb3cgPSBjYXRjaFJvdXRpbmU7Ci0gICAgZ2xvYmFsRGF0YS0+dGFyZ2V0SW50
ZXJwcmV0ZXJQQ0ZvclRocm93ID0gY2F0Y2hQQ0ZvckludGVycHJldGVyOworICAgIHZtLT5jYWxs
RnJhbWVGb3JUaHJvdyA9IGNhbGxGcmFtZTsKKyAgICB2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhy
b3cgPSBjYXRjaFJvdXRpbmU7CisgICAgdm0tPnRhcmdldEludGVycHJldGVyUENGb3JUaHJvdyA9
IGNhdGNoUENGb3JJbnRlcnByZXRlcjsKICAgICAKICAgICBSRUxFQVNFX0FTU0VSVChjYXRjaFJv
dXRpbmUpOwogICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlciA9IHsgY2F0Y2hS
b3V0aW5lLCBjYWxsRnJhbWUgfTsKICAgICByZXR1cm4gZXhjZXB0aW9uSGFuZGxlcjsKIH0KIAot
RXhjZXB0aW9uSGFuZGxlciBqaXRUaHJvdyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWNT
dGF0ZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBSZXR1cm5BZGRyZXNzUHRy
IGZhdWx0TG9jYXRpb24pCitFeGNlcHRpb25IYW5kbGVyIGppdFRocm93KFZNKiB2bSwgRXhlY1N0
YXRlKiBjYWxsRnJhbWUsIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUsIFJldHVybkFkZHJlc3NQdHIg
ZmF1bHRMb2NhdGlvbikKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1Rocm93KGdsb2JhbERhdGEsIGNh
bGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmJ5dGVjb2Rl
T2Zmc2V0KGNhbGxGcmFtZSwgZmF1bHRMb2NhdGlvbikpOworICAgIHJldHVybiBnZW5lcmljVGhy
b3codm0sIGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
PmJ5dGVjb2RlT2Zmc2V0KGNhbGxGcmFtZSwgZmF1bHRMb2NhdGlvbikpOwogfQogCiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuaAkocmV2aXNpb24gMTQ4
NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBFeGVj
U3RhdGU7Ci1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIAogLy8gVGhpcyBoZWFkZXIg
Z2l2ZXMgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhY2Nlc3MgdG8gdGhlIEpJVCdzIHByb3Rv
dG9jb2wKIC8vIGZvciB0aGUgdGhyb3dpbmcgYW5kIGhhbmRsaW5nIGV4Y2VwdGlvbnMuCkBAIC00
NCw5ICs0NCw5IEBAIHN0cnVjdCBFeGNlcHRpb25IYW5kbGVyIHsKICAgICBFeGVjU3RhdGUqIGNh
bGxGcmFtZTsKIH07CiAKLUV4Y2VwdGlvbkhhbmRsZXIgZ2VuZXJpY1Rocm93KEpTR2xvYmFsRGF0
YSosIEV4ZWNTdGF0ZSosIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUsIHVuc2lnbmVkIHZQQ0luZGV4
KTsKK0V4Y2VwdGlvbkhhbmRsZXIgZ2VuZXJpY1Rocm93KFZNKiwgRXhlY1N0YXRlKiwgSlNWYWx1
ZSBleGNlcHRpb25WYWx1ZSwgdW5zaWduZWQgdlBDSW5kZXgpOwogCi1FeGNlcHRpb25IYW5kbGVy
IGppdFRocm93KEpTR2xvYmFsRGF0YSosIEV4ZWNTdGF0ZSosIEpTVmFsdWUgZXhjZXB0aW9uVmFs
dWUsIFJldHVybkFkZHJlc3NQdHIgZmF1bHRMb2NhdGlvbik7CitFeGNlcHRpb25IYW5kbGVyIGpp
dFRocm93KFZNKiwgRXhlY1N0YXRlKiwgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgUmV0dXJuQWRk
cmVzc1B0ciBmYXVsdExvY2F0aW9uKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
NzgsNyArNzgsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0RnJvbUNhbGxGCiAK
IEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRzdCwgSnVtcExpc3QmIGZhaWx1cmVzKQogewotICAgIGZhaWx1
cmVzLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc3JjLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkpKTsKKyAgICBmYWlsdXJlcy5hcHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRy
ZXNzKHNyYywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobV92bS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIGZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3JjLCBUaHVua0hlbHBlcnM6OmpzU3Ry
aW5nTGVuZ3RoT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoMSkpKTsKICAgICBsb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNyYywgVGh1bmtIZWxwZXJzOjpqc1N0cmluZ1ZhbHVlT2Zmc2V0
KCkpLCBkc3QpOwogICAgIGZhaWx1cmVzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgZHN0KSk7
CkBAIC0xODYsNyArMTg2LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6dXBkYXRlVG9wQ2Fs
bEZyYQogICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihtX2J5dGVjb2RlT2Zmc2V0ICsgMSks
IGludFRhZ0ZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CiAjZW5kaWYKICAgICB9Ci0gICAg
c3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsICZtX2dsb2JhbERhdGEtPnRvcENhbGxGcmFtZSk7
CisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsICZtX3ZtLT50b3BDYWxsRnJhbWUpOwog
fQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlQXJndW1lbnRSZWZlcmVuY2VGb3JU
cmFtcG9saW5lKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTIgKzQxLDEyIEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1KSVQ6OkNvZGVSZWYgSklUOjpwcml2YXRlQ29tcGlsZUNU
SU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5j
KQorSklUOjpDb2RlUmVmIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKFZNKiB2bSwg
TmF0aXZlRnVuY3Rpb24gZnVuYykKIHsKICAgICBDYWxsIG5hdGl2ZUNhbGw7CiAKICAgICBlbWl0
UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFkZXIoMCwgSlNTdGFjazo6Q29kZUJsb2NrKTsKLSAg
ICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgJm1fZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1l
KTsKKyAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgJm1fdm0tPnRvcENhbGxGcmFtZSk7
CiAKICNpZiBDUFUoWDg2KQogICAgIC8vIExvYWQgY2FsbGVyIGZyYW1lJ3Mgc2NvcGUgY2hhaW4g
aW50byB0aGlzIGNhbGxmcmFtZSBzbyB0aGF0IHdoYXRldmVyIHdlIGNhbGwgY2FuCkBAIC0xNTQs
NyArMTU0LDcgQEAgSklUOjpDb2RlUmVmIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdgogI2Vu
ZGlmIC8vIENQVShYODYpCiAKICAgICAvLyBDaGVjayBmb3IgYW4gZXhjZXB0aW9uCi0gICAgSnVt
cCBzYXdFeGNlcHRpb24gPSBicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZnbG9iYWxEYXRhLT5leGNlcHRpb24pICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlW
YWx1ZVRhZykpOworICAgIEp1bXAgc2F3RXhjZXB0aW9uID0gYnJhbmNoMzIoTm90RXF1YWwsIEFi
c29sdXRlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNoYXIqPigmdm0tPmV4Y2VwdGlvbikgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpFbXB0eVZhbHVlVGFnKSk7CiAKICAgICAvLyBSZXR1cm4uCiAgICAgcmV0KCk7CkBAIC0x
NjUsMTEgKzE2NSwxMSBAQCBKSVQ6OkNvZGVSZWYgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2
CiAgICAgLy8gR3JhYiB0aGUgcmV0dXJuIGFkZHJlc3MuCiAgICAgcHJlc2VydmVSZXR1cm5BZGRy
ZXNzQWZ0ZXJDYWxsKHJlZ1QxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cigmZ2xvYmFsRGF0
YS0+ZXhjZXB0aW9uTG9jYXRpb24pLCByZWdUMik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKCZ2
bS0+ZXhjZXB0aW9uTG9jYXRpb24pLCByZWdUMik7CiAgICAgc3RvcmVQdHIocmVnVDEsIHJlZ1Qy
KTsKICAgICBwb2tlKGNhbGxGcmFtZVJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJ
VFN0YWNrRnJhbWUsIGNhbGxGcmFtZSkgLyBzaXplb2Yodm9pZCopKTsKICAgICAKLSAgICBzdG9y
ZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgJm1fZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsKKyAg
ICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgJm1fdm0tPnRvcENhbGxGcmFtZSk7CiAgICAg
Ly8gU2V0IHRoZSByZXR1cm4gYWRkcmVzcy4KICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoRnVuY3Rp
b25QdHIoY3RpVk1UaHJvd1RyYW1wb2xpbmUpLnZhbHVlKCkpLCByZWdUMSk7CiAgICAgcmVzdG9y
ZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDEpOwpAQCAtMTc3LDcgKzE3Nyw3IEBAIEpJ
VDo6Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXYKICAgICByZXQoKTsKIAogICAg
IC8vIEFsbCB0cmFtcG9saW5lcyBjb25zdHJ1Y3RlZCEgY29weSB0aGUgY29kZSwgbGluayB1cCBj
YWxscywgYW5kIHNldCB0aGUgcG9pbnRlcnMgb24gdGhlIE1hY2hpbmUgb2JqZWN0LgotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgR0xPQkFMX1RIVU5LX0lE
KTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBHTE9CQUxfVEhVTktf
SUQpOwogCiAgICAgcGF0Y2hCdWZmZXIubGluayhuYXRpdmVDYWxsLCBGdW5jdGlvblB0cihmdW5j
KSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiSklUIENUSSBuYXRp
dmUgY2FsbCIpKTsKQEAgLTIxNSw3ICsyMTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2Jq
ZWN0KEluc3RydWN0aW9uCiB7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS0+c3RydWN0dXJlKCk7CiAgICAg
c2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVy
ZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAm
bV9nbG9iYWxEYXRhLT5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKGFs
bG9jYXRpb25TaXplKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZtX3ZtLT5o
ZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKGFsbG9jYXRpb25TaXplKTsK
IAogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxv
Y2F0b3JSZWcgPSByZWdUMTsKQEAgLTQxOSw3ICs0MTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90
b19wcmltaXRpdmUoSW5zdHJ1Y3RpCiAgICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwog
CiAgICAgSnVtcCBpc0ltbSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRy
KG1fZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgIGFkZFNsb3dDYXNl
KGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIFRydXN0ZWRJbW1QdHIobV92bS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAg
IGlzSW1tLmxpbmsodGhpcyk7CiAKICAgICBpZiAoZHN0ICE9IHNyYykKQEAgLTY0Myw4ICs2NDMs
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoSW5zdHJ1Y3Rpb24qIGN1CiAgICAgZ2VuZXJp
Y0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gdGFncyBub3QgZXF1YWwKIAogICAg
IGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdGFncyBlcXVhbCBhbmQgSlNDZWxsCi0gICAgZ2VuZXJp
Y0Nhc2UuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVh
bCwgQWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1Q
dHIobV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgZ2VuZXJpY0Nh
c2UuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobV92bS0+c3RyaW5nU3RydWN0dXJlLmdldCgp
KSkpOworICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Mo
cmVnVDIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1fdm0tPnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKIAogICAgIC8vIFN0cmluZyBjYXNlLgogICAgIEpJVFN0
dWJDYWxsIHN0dWJDYWxsRXFTdHJpbmdzKHRoaXMsIGN0aV9vcF9lcV9zdHJpbmdzKTsKQEAgLTY5
MSw4ICs2OTEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKEluc3RydWN0aW9uKiBjCiAg
ICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gdGFncyBub3QgZXF1
YWwKIAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdGFncyBlcXVhbCBhbmQgSlNDZWxsCi0g
ICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5z
dHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaFB0
cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRy
dXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAg
Z2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobV92bS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSkpOworICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRy
KG1fdm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKIAogICAgIC8vIFN0cmluZyBjYXNlLgog
ICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsRXFTdHJpbmdzKHRoaXMsIGN0aV9vcF9lcV9zdHJpbmdz
KTsKQEAgLTcyOCw4ICs3MjgsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoSW5zdHJ1
Y3Rpb24qCiAKICAgICAvLyBKdW1wIHRvIGEgc2xvdyBjYXNlIGlmIGJvdGggYXJlIHN0cmluZ3Mu
CiAgICAgSnVtcCBub3RDZWxsID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwotICAgIEp1bXAgZmlyc3ROb3RTdHJpbmcgPSBicmFuY2hQ
dHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkpKTsKKyAgICBKdW1wIGZpcnN0Tm90U3RyaW5nID0gYnJhbmNoUHRyKE5vdEVxdWFs
LCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0
cihtX3ZtLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hQ
dHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tUHRyKG1fdm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICBub3RDZWxsLmxp
bmsodGhpcyk7CiAgICAgZmlyc3ROb3RTdHJpbmcubGluayh0aGlzKTsKIApAQCAtMTAyMSwxMSAr
MTAyMSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VyCiAgICAg
bW92ZShyZWdUMCwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogCiAgICAgLy8gTm93IHN0b3JlIHRoZSBl
eGNlcHRpb24gcmV0dXJuZWQgYnkgY3RpX29wX3Rocm93LgotICAgIGxvYWRQdHIoQWRkcmVzcyhz
dGFja1BvaW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1l
LCBnbG9iYWxEYXRhKSksIHJlZ1QzKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgT0JKRUNU
X09GRlNFVE9GKEpTR2xvYmFsRGF0YSwgZXhjZXB0aW9uKSArIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsRGF0YSwgZXhjZXB0aW9uKSArIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOwotICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWUoKS5wYXlsb2FkKCkpLCBBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VU
T0YoSlNHbG9iYWxEYXRhLCBleGNlcHRpb24pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZSgpLnRh
ZygpKSwgQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsRGF0YSwgZXhjZXB0
aW9uKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7CisgICAgbG9h
ZFB0cihBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0
IEpJVFN0YWNrRnJhbWUsIHZtKSksIHJlZ1QzKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywg
T0JKRUNUX09GRlNFVE9GKFZNLCBleGNlcHRpb24pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBP
QkpFQ1RfT0ZGU0VUT0YoVk0sIGV4Y2VwdGlvbikgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMudGFnKSksIHJlZ1QxKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVl
KCkucGF5bG9hZCgpKSwgQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKFZNLCBleGNlcHRp
b24pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7CisgICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZSgpLnRhZygpKSwgQWRkcmVzcyhyZWdUMywgT0JK
RUNUX09GRlNFVE9GKFZNLCBleGNlcHRpb24pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnRhZykpKTsKIAogICAgIHVuc2lnbmVkIGV4Y2VwdGlvbiA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgZW1pdFN0b3JlKGV4Y2VwdGlvbiwgcmVnVDEsIHJlZ1Qw
KTsKQEAgLTEyMDAsNyArMTIwMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NvbnZlcnRfdGhpcyhJ
bnN0cnVjdGkKICAgICAgICAgbW92ZShyZWdUMywgcmVnVDEpOwogICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKCk7CiAgICAgfQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihFcXVhbCwg
QWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIo
bV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgVHJ1c3RlZEltbVB0cihtX3ZtLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9jb252ZXJ0X3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTEyMjMs
NyArMTIyMyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jb252ZXJ0X3RoaXMoSW5zdHIKICAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewog
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDEpOwotICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpLCByZWdUMCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtLT5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpLCByZWdUMCk7CiAgICAgfQogICAgIGlzTm90VW5kZWZpbmVkLmxpbmsodGhp
cyk7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0
Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKIAotSklUOjpDb2Rl
UmVmIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgTmF0aXZlRnVuY3Rpb24pCitKSVQ6OkNvZGVSZWYgSklUOjpwcml2YXRlQ29tcGlsZUNU
SU5hdGl2ZUNhbGwoVk0qIHZtLCBOYXRpdmVGdW5jdGlvbikKIHsKLSAgICByZXR1cm4gZ2xvYmFs
RGF0YS0+Z2V0Q1RJU3R1YihuYXRpdmVDYWxsR2VuZXJhdG9yKTsKKyAgICByZXR1cm4gdm0tPmdl
dENUSVN0dWIobmF0aXZlQ2FsbEdlbmVyYXRvcik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX21v
dihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTcsNyArOTcsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uCiB7CiAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vYmplY3RBbGxvY2F0aW9uUHJvZmls
ZS0+c3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNPYmplY3Q6OmFs
bG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgTWFya2VkQWxs
b2NhdG9yKiBhbGxvY2F0b3IgPSAmbV9nbG9iYWxEYXRhLT5oZWFwLmFsbG9jYXRvckZvck9iamVj
dFdpdGhvdXREZXN0cnVjdG9yKGFsbG9jYXRpb25TaXplKTsKKyAgICBNYXJrZWRBbGxvY2F0b3Iq
IGFsbG9jYXRvciA9ICZtX3ZtLT5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVj
dG9yKGFsbG9jYXRpb25TaXplKTsKIAogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7
CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKQEAgLTM1MCw3ICszNTAsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoSW5zdHJ1Y3RpCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKICAgICAKICAgICBKdW1wIGlzSW1tID0gZW1pdEp1
bXBJZk5vdEpTQ2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFs
LCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0
cihtX2dsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICBhZGRTbG93Q2Fz
ZShicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1fdm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAg
ICBpc0ltbS5saW5rKHRoaXMpOwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCkBAIC03MTMsOSArNzEz
LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cgogewogICAgIGtp
bGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsgLy8gRklYTUU6IEltcGxpY2l0bHkgdHJlYXQgb3BfY2F0
Y2ggYXMgYSBsYWJlbGVkIHN0YXRlbWVudCwgYW5kIHJlbW92ZSB0aGlzIGxpbmUgb2YgY29kZS4K
ICAgICBtb3ZlKHJlZ1QwLCBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgcGVlayhyZWdUMywgT0JK
RUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBnbG9iYWxEYXRhKSAvIHNpemVvZih2
b2lkKikpOwotICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9i
YWxEYXRhLCBleGNlcHRpb24pKSwgcmVnVDApOwotICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9G
KEpTR2xvYmFsRGF0YSwgZXhjZXB0aW9uKSkpOworICAgIHBlZWsocmVnVDMsIE9CSkVDVF9PRkZT
RVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgdm0pIC8gc2l6ZW9mKHZvaWQqKSk7CisgICAgbG9h
ZDY0KEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihWTSwgZXhjZXB0aW9uKSksIHJlZ1Qw
KTsKKyAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSks
IEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihWTSwgZXhjZXB0aW9uKSkpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9
CiAKQEAgLTkxMCw3ICs5MTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jb252ZXJ0X3RoaXMoSW5z
dHJ1Y3RpCiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIHJlZ1QwKTsKICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogICAg
IH0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+c3RyaW5n
U3RydWN0dXJlLmdldCgpKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihFcXVhbCwgQWRk
cmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobV92
bS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
Y2FsbGVlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05ODEsNyArOTgxLDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnZlcnRfdGhpcyhJbnN0cgogCiAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOwogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIG1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShtX2dsb2JhbERhdGEtPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpLCByZWdUMCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShtX3ZtLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSwgcmVnVDApOwogICAgIGlzTm90
VW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogICAg
IEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9jb252ZXJ0X3RoaXMpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MiwxMSArOTIsMTEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKEluc3RydWN0aW9uKgogICAgIHN0dWJDYWxs
LmNhbGwoZHN0KTsKIH0KIAotSklUOjpDb2RlUmVmIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK0pJVDo6Q29kZVJlZiBKSVQ6OnN0cmlu
Z0dldEJ5VmFsU3R1YkdlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgSlNJbnRlcmZhY2VKSVQgaml0
OwogICAgIEp1bXBMaXN0IGZhaWx1cmVzOwotICAgIGZhaWx1cmVzLmFwcGVuZChqaXQuYnJhbmNo
UHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
VHJ1c3RlZEltbVB0cihnbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAg
ZmFpbHVyZXMuYXBwZW5kKGppdC5icmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKHZtLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKSk7CiAgICAgCiAgICAgLy8gTG9hZCBzdHJpbmcgbGVuZ3RoIHRvIHJlZ1QxLCBh
bmQgc3RhcnQgdGhlIHByb2Nlc3Mgb2YgbG9hZGluZyB0aGUgZGF0YSBwb2ludGVyIGludG8gcmVn
VDAKICAgICBqaXQubG9hZDMyKEFkZHJlc3MocmVnVDAsIFRodW5rSGVscGVyczo6anNTdHJpbmdM
ZW5ndGhPZmZzZXQoKSksIHJlZ1QxKTsKQEAgLTEyMSw3ICsxMjEsNyBAQCBKSVQ6OkNvZGVSZWYg
SklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lCiAgICAgY29udDhCaXQubGluaygmaml0KTsKICAg
ICAKICAgICBmYWlsdXJlcy5hcHBlbmQoaml0LmJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMigweDEwMCkpKTsKLSAgICBqaXQubW92ZShUcnVzdGVkSW1tUHRyKGdsb2Jh
bERhdGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpLCByZWdUMSk7Cisg
ICAgaml0Lm1vdmUoVHJ1c3RlZEltbVB0cih2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3Rl
clN0cmluZ3MoKSksIHJlZ1QxKTsKICAgICBqaXQubG9hZFB0cihCYXNlSW5kZXgocmVnVDEsIHJl
Z1QwLCBTY2FsZVB0ciwgMCksIHJlZ1QwKTsKICAgICBqaXQubW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZyksIHJlZ1QxKTsgLy8gV2UgbnVsbCBjaGVjayByZWdUMCBvbiByZXR1cm4g
c28gdGhpcyBpcyBzYWZlCiAgICAgaml0LnJldCgpOwpAQCAtMTMwLDcgKzEzMCw3IEBAIEpJVDo6
Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmUKICAgICBqaXQubW92ZShUcnVzdGVk
SW1tMzIoMCksIHJlZ1QwKTsKICAgICBqaXQucmV0KCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJTdHJpbmcgZ2V0X2J5X3ZhbCBzdHViIikp
OwogfQogCkBAIC0yNDksOCArMjQ5LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92
YWwoSW5zdHJ1YwogCiAgICAgSnVtcCBub25DZWxsID0ganVtcCgpOwogICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsgLy8gYmFzZSBhcnJheSBjaGVjawotICAgIEp1bXAgbm90U3RyaW5nID0gYnJhbmNo
UHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
VHJ1c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwotICAg
IGVtaXROYWtlZENhbGwobV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsU3R1
YkdlbmVyYXRvcikuY29kZSgpKTsKKyAgICBKdW1wIG5vdFN0cmluZyA9IGJyYW5jaFB0cihOb3RF
cXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJ
bW1QdHIobV92bS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CisgICAgZW1pdE5ha2VkQ2FsbCht
X3ZtLT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcikuY29kZSgpKTsKICAg
ICBKdW1wIGZhaWxlZCA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApOwogICAgIGVtaXRTdG9y
ZShkc3QsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENP
REVfTEVOR1RIKG9wX2dldF9ieV92YWwpKTsKQEAgLTQ3Nyw3ICs0NzcsNyBAQCB2b2lkIEpJVDo6
Y29tcGlsZUdldEJ5SWRIb3RQYXRoKElkZW50aWZpCiAgICAgLy8gdG8gYXJyYXktbGVuZ3RoIC8g
cHJvdG90eXBlIGFjY2VzcyB0cmFucG9saW5lcywgYW5kIGZpbmFsbHkgd2UgYWxzbyB0aGUgdGhl
IHByb3BlcnR5LW1hcCBhY2Nlc3Mgb2Zmc2V0IGFzIGEgbGFiZWwKICAgICAvLyB0byBqdW1wIGJh
Y2sgdG8gaWYgb25lIG9mIHRoZXNlIHRyYW1wb2xpZXMgZmluZHMgYSBtYXRjaC4KICAgICAKLSAg
ICBpZiAoKmlkZW50ID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkgeworICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlO
YW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMik7CiAgICAg
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVGb3JCeXRlY29kZUluZGV4KHJlZ1QyLCByZWdUMywg
bV9ieXRlY29kZU9mZnNldCk7CiAgICAgfQpAQCAtNzA0LDcgKzcwNCw3IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVu
Y2VGb3JUcmFtcG9saW5lKCk7CiAgICAgQ2FsbCBmYWlsdXJlQ2FsbCA9IHRhaWxSZWN1cnNpdmVD
YWxsKCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0
aGlzLCBtX2NvZGVCbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhp
cywgbV9jb2RlQmxvY2spOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhbGws
IEZ1bmN0aW9uUHRyKGRpcmVjdCA/IGN0aV9vcF9wdXRfYnlfaWRfZGlyZWN0X2ZhaWwgOiBjdGlf
b3BfcHV0X2J5X2lkX2ZhaWwpKTsKICAgICAKQEAgLTcxOCw3ICs3MTgsNyBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvCiAgICAgICAgICAgICBwYXRjaEJ1ZmZlciwK
ICAgICAgICAgICAgICgiQmFzZWxpbmUgcHV0X2J5X2lkIHRyYW5zaXRpb24gc3R1YiBmb3IgJXMs
IHJldHVybiBwb2ludCAlcCIsCiAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCptX2NvZGVCbG9j
aykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpKSwKLSAgICAgICAgKm1fZ2xvYmFsRGF0
YSwKKyAgICAgICAgKm1fdm0sCiAgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwKICAgICAgICAgd2lsbE5lZWRTdG9yYWdlUmVhbGxvYywKICAgICAgICAgbmV3U3RydWN0dXJl
KTsKQEAgLTc3Niw3ICs3NzYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFy
cmF5TGVuCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7
CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKICAgICAKICAgICAvLyBVc2Ug
dGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0
aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xv
d0Nhc2VCZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgt
c3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmNvbGRQYXRoQmVnaW4pOwpAQCAtODM5LDcg
KzgzOSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIKICAgICAK
ICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOwogICAgIAogICAgIC8vIFVzZSB0
aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRo
ZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93
Q2FzZUJlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1z
dHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuY29sZFBhdGhCZWdpbik7CkBAIC04NjQsNyAr
ODY0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKFN0cgogICAgICAg
ICAgICAgKCJCYXNlbGluZSBnZXRfYnlfaWQgcHJvdG8gc3R1YiBmb3IgJXMsIHJldHVybiBwb2lu
dCAlcCIsCiAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCBz
dHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCiAgICAgICAgICAgICAgICAgICAg
IHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKSwKLSAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAgICAgKm1fdm0sCiAgICAgICAg
IG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgbmVlZHNTdHViTGluayk7
CiAgICAgCkBAIC05MDcsNyArOTA3LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJ
ZFNlbGZMaXN0KAogCiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAgIAotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2spOworICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKICAgICBp
ZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRl
cmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0
ZXIpIHsKICAgICAgICAgICAgIGlmIChpdGVyLT50bykKQEAgLTkzMCwxMSArOTMwLDExIEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKICAgICAgICAgICAgICgiQmFz
ZWxpbmUgZ2V0X2J5X2lkIHNlbGYgbGlzdCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwK
ICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHN0dWJJbmZv
LT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKICAgICAgICAgICAgICAgICAgICAgc3R1Yklu
Zm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkp
LAotICAgICAgICAqbV9nbG9iYWxEYXRhLAorICAgICAgICAqbV92bSwKICAgICAgICAgbV9jb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICBuZWVkc1N0dWJMaW5rKTsKIAotICAg
IHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV9nbG9iYWxE
YXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1
cmUsIGlzRGlyZWN0KTsKKyAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudElu
ZGV4XS5zZXQoKm1fdm0sIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRp
bmUsIHN0cnVjdHVyZSwgaXNEaXJlY3QpOwogICAgIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhl
IGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0
ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBh
dGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVj
dHVyZUNoZWNrKTsKQEAgLTk4MSw3ICs5ODEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkUHJvdG9MaXN0CiAgICAgCiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAgIAot
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxv
Y2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2Nr
KTsKICAgICBpZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVj
b3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVu
ZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgIGlmIChpdGVyLT50bykKQEAgLTEwMDMsMTEgKzEw
MDMsMTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdAogICAgICAg
ICAgICAgKCJCYXNlbGluZSBnZXRfYnlfaWQgcHJvdG8gbGlzdCBzdHViIGZvciAlcywgcmV0dXJu
IHBvaW50ICVwIiwKICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRh
KCksIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKICAgICAgICAgICAgICAg
ICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSkpLAotICAgICAgICAqbV9nbG9iYWxEYXRhLAorICAgICAgICAqbV92bSwKICAg
ICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICBuZWVkc1N0dWJM
aW5rKTsKIAotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQo
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
c3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlLCBpc0RpcmVjdCk7Cisg
ICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUt
PnZtKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVj
dHVyZSwgcHJvdG90eXBlU3RydWN0dXJlLCBpc0RpcmVjdCk7CiAgICAgCiAgICAgLy8gRmluYWxs
eSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVt
cCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUu
dS5nZXQuc3RydWN0dXJlQ2hlY2spOwpAQCAtMTA2MCw3ICsxMDYwLDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdAogCiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgp
OwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywg
bV9jb2RlQmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1f
Y29kZUJsb2NrKTsKICAgICBpZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBmb3IgKFZlY3Rv
cjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBt
X2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgIGlmIChpdGVyLT50bykKQEAgLTEw
ODEsMTIgKzEwODEsMTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlz
dAogICAgICAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlfaWQgY2hhaW4gbGlzdCBzdHViIGZvciAl
cywgcmV0dXJuIHBvaW50ICVwIiwKICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKm1fY29kZUJs
b2NrKS5kYXRhKCksIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKICAgICAg
ICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAotICAgICAgICAqbV9nbG9iYWxEYXRhLAorICAgICAgICAq
bV92bSwKICAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICBu
ZWVkc1N0dWJMaW5rKTsKICAgICAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0
ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgcHJvdG90eXBlU3RydWN0
dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbV9j
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCBjaGFp
biwgaXNEaXJlY3QpOworICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4
XS5zZXQoY2FsbEZyYW1lLT52bSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0
dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGNoYWluLCBpc0RpcmVjdCk7CiAgICAgCiAgICAgLy8gRmlu
YWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8g
anVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBz
dHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxp
bmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwpAQCAtMTEzNSw3ICsxMTM1LDcgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cgogICAgICAgICBjb21waWxlR2V0RGlyZWN0
T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMSwgcmVnVDAsIGNhY2hlZE9mZnNldCk7CiAgICAgSnVt
cCBzdWNjZXNzID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1f
Z2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKICAgICBpZiAobmVlZHNTdHViTGluaykgewog
ICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMu
YmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgIGlm
IChpdGVyLT50bykKQEAgLTExNTUsNyArMTE1NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUdldEJ5SWRDaGFpbihTdHIKICAgICAgICAgICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIGNoYWlu
IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAogICAgICAgICAgICAgICAgIHRvQ1N0cmlu
ZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zm
c2V0KAogICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQu
cHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICptX2dsb2JhbERhdGEs
CisgICAgICAgICptX3ZtLAogICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
CiAgICAgICAgIG5lZWRzU3R1YkxpbmspOwogICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHN0
dWJSb3V0aW5lOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMSArNTMs
MTEgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIG5hbWVzcGFjZSBKU0MgewogI2lmIFVTRShKU1ZB
TFVFNjQpCiAKLUpJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitKSVQ6OkNvZGVSZWYgSklUOjpzdHJpbmdHZXRCeVZh
bFN0dWJHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIEpTSW50ZXJmYWNlSklUIGppdDsKICAgICBK
dW1wTGlzdCBmYWlsdXJlczsKLSAgICBmYWlsdXJlcy5hcHBlbmQoaml0LmJyYW5jaFB0cihOb3RF
cXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJ
bW1QdHIoZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgIGZhaWx1cmVz
LmFwcGVuZChqaXQuYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cih2bS0+c3RyaW5nU3RydWN0dXJlLmdldCgp
KSkpOwogCiAgICAgLy8gTG9hZCBzdHJpbmcgbGVuZ3RoIHRvIHJlZ1QyLCBhbmQgc3RhcnQgdGhl
IHByb2Nlc3Mgb2YgbG9hZGluZyB0aGUgZGF0YSBwb2ludGVyIGludG8gcmVnVDAKICAgICBqaXQu
bG9hZDMyKEFkZHJlc3MocmVnVDAsIFRodW5rSGVscGVyczo6anNTdHJpbmdMZW5ndGhPZmZzZXQo
KSksIHJlZ1QyKTsKQEAgLTgxLDcgKzgxLDcgQEAgSklUOjpDb2RlUmVmIEpJVDo6c3RyaW5nR2V0
QnlWYWxTdHViR2VuZQogICAgIGNvbnQ4Qml0LmxpbmsoJmppdCk7CiAKICAgICBmYWlsdXJlcy5h
cHBlbmQoaml0LmJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMigweDEw
MCkpKTsKLSAgICBqaXQubW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbERhdGEtPnNtYWxsU3RyaW5n
cy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpLCByZWdUMSk7CisgICAgaml0Lm1vdmUoVHJ1c3Rl
ZEltbVB0cih2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSksIHJlZ1Qx
KTsKICAgICBqaXQubG9hZFB0cihCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBTY2FsZVB0ciwgMCks
IHJlZ1QwKTsKICAgICBqaXQucmV0KCk7CiAgICAgCkBAIC04OSw3ICs4OSw3IEBAIEpJVDo6Q29k
ZVJlZiBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmUKICAgICBqaXQubW92ZShUcnVzdGVkSW1t
MzIoMCksIHJlZ1QwKTsKICAgICBqaXQucmV0KCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICByZXR1cm4g
RklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJTdHJpbmcgZ2V0X2J5X3ZhbCBzdHViIikpOwog
fQogCkBAIC0yMTAsOCArMjEwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwo
SW5zdHJ1YwogICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2UpOyAvLyBiYXNl
IGNlbGwgY2hlY2sKICAgICBKdW1wIG5vbkNlbGwgPSBqdW1wKCk7CiAgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOyAvLyBiYXNlIGFycmF5IGNoZWNrCi0gICAgSnVtcCBub3RTdHJpbmcgPSBicmFuY2hQ
dHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7Ci0gICAg
ZW1pdE5ha2VkQ2FsbChDb2RlTG9jYXRpb25MYWJlbChtX2dsb2JhbERhdGEtPmdldENUSVN0dWIo
c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICBKdW1wIG5vdFN0cmlu
ZyA9IGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobV92bS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7Cisg
ICAgZW1pdE5ha2VkQ2FsbChDb2RlTG9jYXRpb25MYWJlbChtX3ZtLT5nZXRDVElTdHViKHN0cmlu
Z0dldEJ5VmFsU3R1YkdlbmVyYXRvcikuY29kZSgpKSk7CiAgICAgSnVtcCBmYWlsZWQgPSBicmFu
Y2hUZXN0NjQoWmVybywgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2dl
dF9ieV92YWwpKTsKQEAgLTUzNSw3ICs1MzUsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRI
b3RQYXRoKGludCBiYXNlCiAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAs
IGJhc2VWUmVnKTsKICAgICAKLSAgICBpZiAoKmlkZW50ID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVy
dHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgeworICAgIGlmICgqaWRl
bnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkgewogICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCByZWdUMSk7CiAgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVGb3JCeXRlY29k
ZUluZGV4KHJlZ1QxLCByZWdUMiwgbV9ieXRlY29kZU9mZnNldCk7CiAgICAgfQpAQCAtNzQ2LDcg
Kzc0Niw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICBy
ZXN0b3JlQXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCk7CiAgICAgQ2FsbCBmYWlsdXJl
Q2FsbCA9IHRhaWxSZWN1cnNpdmVDYWxsKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7CiAKICAgICBwYXRjaEJ1ZmZlci5saW5r
KGZhaWx1cmVDYWxsLCBGdW5jdGlvblB0cihkaXJlY3QgPyBjdGlfb3BfcHV0X2J5X2lkX2RpcmVj
dF9mYWlsIDogY3RpX29wX3B1dF9ieV9pZF9mYWlsKSk7CiAKQEAgLTc2MCw3ICs3NjAsNyBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvCiAgICAgICAgICAgICBwYXRj
aEJ1ZmZlciwKICAgICAgICAgICAgICgiQmFzZWxpbmUgcHV0X2J5X2lkIHRyYW5zaXRpb24gZm9y
ICVzLCByZXR1cm4gcG9pbnQgJXAiLAogICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqbV9jb2Rl
QmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKSksCi0gICAgICAgICptX2dsb2Jh
bERhdGEsCisgICAgICAgICptX3ZtLAogICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksCiAgICAgICAgIHdpbGxOZWVkU3RvcmFnZVJlYWxsb2MsCiAgICAgICAgIG5ld1N0cnVj
dHVyZSk7CkBAIC04MTMsNyArODEzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hH
ZXRBcnJheUxlbgogICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2socmVnVDIsIHJlZ1Qw
KTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7CiAKICAgICAvLyBVc2UgdGhlIHBh
dGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3Jp
Z2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VC
ZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtc3R1Yklu
Zm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmNvbGRQYXRoQmVnaW4pOwpAQCAtODc1LDcgKzg3NSw3
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIKICAgICB9IGVsc2UK
ICAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwgcmVnVDAsIGNhY2hl
ZE9mZnNldCk7CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKIAogICAgIC8vIFVzZSB0
aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRo
ZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93
Q2FzZUJlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1z
dHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuY29sZFBhdGhCZWdpbik7CkBAIC04OTksNyAr
ODk5LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKFN0cgogICAgICAg
ICAgICAgKCJCYXNlbGluZSBKSVQgZ2V0X2J5X2lkIHByb3RvIHN0dWIgZm9yICVzLCByZXR1cm4g
cG9pbnQgJXAiLAogICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEo
KSwgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAogICAgICAgICAgICAgICAg
ICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxl
QWRkcmVzcygpKSksCi0gICAgICAgICptX2dsb2JhbERhdGEsCisgICAgICAgICptX3ZtLAogICAg
ICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgIG5lZWRzU3R1Ykxp
bmspOwogCkBAIC05MzksNyArOTM5LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJ
ZFNlbGZMaXN0KAogICAgIH0KICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7CiAKICAg
ICBpZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6
aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyAr
K2l0ZXIpIHsKQEAgLTk2NCwxMSArOTY0LDExIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5SWRTZWxmTGlzdCgKICAgICAgICAgICAgICgiQmFzZWxpbmUgSklUIGdldF9ieV9pZCBsaXN0
IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAogICAgICAgICAgICAgICAgIHRvQ1N0cmlu
ZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zm
c2V0KAogICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQu
cHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICptX2dsb2JhbERhdGEs
CisgICAgICAgICptX3ZtLAogICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
CiAgICAgICAgIG5lZWRzU3R1YkxpbmspOwogCi0gICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5s
aXN0W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgc3R1YkNvZGUsIHN0cnVjdHVyZSwgaXNEaXJlY3QpOworICAgIHBvbHltb3Jw
aGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV92bSwgbV9jb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBzdHViQ29kZSwgc3RydWN0dXJlLCBpc0RpcmVjdCk7CiAKICAg
ICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3Qg
cGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2Nh
dGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRj
aC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7CkBAIC0xMDE0LDcgKzEwMTQsNyBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0CiAKICAgICBKdW1wIHN1Y2Nl
c3MgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEs
IHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0
aGlzLCBtX2NvZGVCbG9jayk7CiAKICAgICBpZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBm
b3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsg
aXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKQEAgLTEwMzgsMTAgKzEwMzgsMTAgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdAogICAgICAgICAgICAgKCJC
YXNlbGluZSBKSVQgZ2V0X2J5X2lkIHByb3RvIGxpc3Qgc3R1YiBmb3IgJXMsIHJldHVybiBwb2lu
dCAlcCIsCiAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCBz
dHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCiAgICAgICAgICAgICAgICAgICAg
IHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKSwKLSAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAgICAgKm1fdm0sCiAgICAgICAg
IG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgbmVlZHNTdHViTGluayk7
Ci0gICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV9nbG9i
YWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJDb2RlLCBzdHJ1Y3R1
cmUsIHByb3RvdHlwZVN0cnVjdHVyZSwgaXNEaXJlY3QpOworICAgIHByb3RvdHlwZVN0cnVjdHVy
ZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fdm0sIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgc3R1YkNvZGUsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlLCBpc0RpcmVj
dCk7CiAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGlu
IHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1w
IGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJ
bmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7CkBAIC0xMDkyLDcgKzEw
OTIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0CiAgICAgfQog
ICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
Km1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKICAgICAKICAgICBpZiAobmVlZHNTdHVi
TGluaykgewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9
IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKQEAgLTEx
MTUsMTIgKzExMTUsMTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlz
dAogICAgICAgICAgICAgKCJCYXNlbGluZSBKSVQgZ2V0X2J5X2lkIGNoYWluIGxpc3Qgc3R1YiBm
b3IgJXMsIHJldHVybiBwb2ludCAlcCIsCiAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCptX2Nv
ZGVCbG9jaykuZGF0YSgpLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCiAg
ICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1
bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKLSAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAg
ICAgKm1fdm0sCiAgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAg
ICAgbmVlZHNTdHViTGluayk7CiAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0
ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgcHJvdG90eXBlU3RydWN0
dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbV9j
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCBjaGFp
biwgaXNEaXJlY3QpOworICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4
XS5zZXQoY2FsbEZyYW1lLT52bSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0
dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGNoYWluLCBpc0RpcmVjdCk7CiAKICAgICAvLyBGaW5hbGx5
IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1w
IGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJ
bmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51
LmdldC5zdHJ1Y3R1cmVDaGVjayk7CkBAIC0xMTY4LDcgKzExNjgsNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RyCiAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZz
ZXQocHJvdG9PYmplY3QsIHJlZ1QwLCBjYWNoZWRPZmZzZXQpOwogICAgIEp1bXAgc3VjY2VzcyA9
IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhp
cywgbV9jb2RlQmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMs
IG1fY29kZUJsb2NrKTsKIAogICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7CiAgICAgICAgIGZvciAo
VmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVy
ICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewpAQCAtMTE5MCw3ICsxMTkwLDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cgogICAgICAgICAgICAgKCJCYXNlbGlu
ZSBKSVQgZ2V0X2J5X2lkIGNoYWluIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAogICAg
ICAgICAgICAgICAgIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgc3R1YkluZm8tPmhv
dFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAogICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+
cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0g
ICAgICAgICptX2dsb2JhbERhdGEsCisgICAgICAgICptX3ZtLAogICAgICAgICBtX2NvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgIG5lZWRzU3R1YkxpbmspOwogICAgIHN0dWJJ
bmZvLT5zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwpAQCAtMTQxNywzMSArMTQxNywzMSBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluCiAgICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpJVEludDhBcnJheToKLSAgICAgICAgc2xvd0Nh
c2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5
cGUsIG1fZ2xvYmFsRGF0YS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCAxLCBTaWduZWRUeXBlZEFy
cmF5KTsKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDhBcnJheURlc2NyaXB0b3IoKSwgMSwg
U2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUSW50MTZBcnJh
eToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+aW50MTZBcnJheURlc2NyaXB0b3Io
KSwgMiwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBl
ZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQxNkFy
cmF5RGVzY3JpcHRvcigpLCAyLCBTaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBKSVRJbnQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRB
cnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT5p
bnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBTaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgc2xv
d0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJh
ZFR5cGUsIG1fdm0tPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIDQsIFNpZ25lZFR5cGVkQXJyYXkp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpJVFVpbnQ4QXJyYXk6Ci0gICAgICAgIHNsb3dD
YXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRU
eXBlLCBtX2dsb2JhbERhdGEtPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIDEsIFVuc2lnbmVkVHlw
ZWRBcnJheSk7CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwo
Y3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50OEFycmF5RGVzY3JpcHRvcigp
LCAxLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpJVFVp
bnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdl
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT51aW50OENs
YW1wZWRBcnJheURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJhZFR5cGUsIG1fdm0tPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCAxLCBVbnNpZ25l
ZFR5cGVkQXJyYXkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpJVFVpbnQxNkFycmF5Ogot
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwg
MiwgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVk
QXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQxNkFy
cmF5RGVzY3JpcHRvcigpLCAyLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEpJVFVpbnQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlw
ZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRh
LT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJhZFR5cGUsIG1fdm0tPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBVbnNpZ25lZFR5
cGVkQXJyYXkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpJVEZsb2F0MzJBcnJheToKLSAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCks
IDQpOworICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCks
IDQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpJVEZsb2F0NjRBcnJheToKLSAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlv
biwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIDgpOwor
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudElu
c3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIDgpOwog
ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBDUkFTSCgpOwpAQCAtMTQ0OSw3
ICsxNDQ5LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbgogICAg
IAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
Km1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3Jl
YXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRP
ZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwogICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5s
YWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKQEAgLTE0
ODYsMzEgKzE0ODYsMzEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJ
bgogICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoY3VycmVudElu
c3RydWN0aW9uLCBiYWRUeXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRJbnQ4QXJy
YXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX2dsb2JhbERhdGEtPmludDhBcnJheURlc2NyaXB0b3Io
KSwgMSwgU2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7CisgICAgICAgIHNsb3dD
YXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRU
eXBlLCBtX3ZtLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIDEsIFNpZ25lZFR5cGVkQXJyYXksIFRy
dW5jYXRlUm91bmRpbmcpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpJVEludDE2QXJyYXk6
Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudElu
c3RydWN0aW9uLCBiYWRUeXBlLCBtX2dsb2JhbERhdGEtPmludDE2QXJyYXlEZXNjcmlwdG9yKCks
IDIsIFNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOworICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSwgbV92bS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgMiwgU2lnbmVkVHlwZWRBcnJheSwgVHJ1
bmNhdGVSb3VuZGluZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUSW50MzJBcnJheToK
LSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwg
NCwgU2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7CisgICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBl
LCBtX3ZtLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBTaWduZWRUeXBlZEFycmF5LCBUcnVu
Y2F0ZVJvdW5kaW5nKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRVaW50OEFycmF5Ogot
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCAx
LCBVbnNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOworICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSwgbV92bS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFycmF5LCBU
cnVuY2F0ZVJvdW5kaW5nKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRVaW50OENsYW1w
ZWRBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+dWludDhDbGFtcGVkQXJy
YXlEZXNjcmlwdG9yKCksIDEsIFVuc2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7Cisg
ICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3Ry
dWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgMSwg
VW5zaWduZWRUeXBlZEFycmF5LCBDbGFtcFJvdW5kaW5nKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBKSVRVaW50MTZBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJy
YXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+dWlu
dDE2QXJyYXlEZXNjcmlwdG9yKCksIDIsIFVuc2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3Vu
ZGluZyk7CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwg
MiwgVW5zaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBKSVRVaW50MzJBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5
cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0
YS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIDQsIFVuc2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNh
dGVSb3VuZGluZyk7CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlW
YWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50MzJBcnJheURlc2NyaXB0
b3IoKSwgNCwgVW5zaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBKSVRGbG9hdDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1f
Z2xvYmFsRGF0YS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCA0KTsKKyAgICAgICAgc2xvd0Nh
c2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFk
VHlwZSwgbV92bS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCA0KTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBKSVRGbG9hdDY0QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9h
dFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFs
RGF0YS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCA4KTsKKyAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwg
bV92bS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCA4KTsKICAgICAgICAgYnJlYWs7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsKQEAgLTE1MTksNyArMTUxOSw3IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAgICAKICAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMs
IG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBt
X2NvZGVCbG9jayk7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9j
YXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRk
cmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0
dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywg
Q29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0
YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbElu
Zm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw3ICsyMjgsNyBAQCBD
T01QSUxFX0FTU0VSVChvZmZzZXRvZihzdHJ1Y3QgSklUU3RhY2tGCiAKIGV4dGVybiAiQyIgewog
Ci0gICAgX19kZWNsc3BlYyhuYWtlZCkgRW5jb2RlZEpTVmFsdWUgY3RpVHJhbXBvbGluZSh2b2lk
KiBjb2RlLCBKU1N0YWNrKiwgQ2FsbEZyYW1lKiwgdm9pZCogLyp1bnVzZWQxKi8sIHZvaWQqIC8q
dW51c2VkMiovLCBKU0dsb2JhbERhdGEqKQorICAgIF9fZGVjbHNwZWMobmFrZWQpIEVuY29kZWRK
U1ZhbHVlIGN0aVRyYW1wb2xpbmUodm9pZCogY29kZSwgSlNTdGFjayosIENhbGxGcmFtZSosIHZv
aWQqIC8qdW51c2VkMSovLCB2b2lkKiAvKnVudXNlZDIqLywgVk0qKQogICAgIHsKICAgICAgICAg
X19hc20gewogICAgICAgICAgICAgcHVzaCBlYnA7CkBAIC0yOTEsNyArMjkxLDcgQEAgZXh0ZXJu
ICJDIiB7CiAjZGVmaW5lIFNUQUNLX0xFTkdUSCAgICAgICAgICAgICAgIDExMgogI2VsaWYgQ1BV
KFNINCkKICNkZWZpbmUgU1lNQk9MX1NUUklORyhuYW1lKSAjbmFtZQotLyogY29kZSAocjQpLCBK
U1N0YWNrKiAocjUpLCBDYWxsRnJhbWUqIChyNiksIHZvaWQqIHVudXNlZDEgKHI3KSwgdm9pZCog
dW51c2VkMihzcCksIEpTR2xvYmFsRGF0YSAoc3ApKi8KKy8qIGNvZGUgKHI0KSwgSlNTdGFjayog
KHI1KSwgQ2FsbEZyYW1lKiAocjYpLCB2b2lkKiB1bnVzZWQxIChyNyksIHZvaWQqIHVudXNlZDIo
c3ApLCBWTSAoc3ApKi8KIAogYXNtIHZvbGF0aWxlICgKICIudGV4dFxuIgpAQCAtNDc2LDkgKzQ3
Niw5IEBAIFNZTUJPTF9TVFJJTkcoY3RpVHJhbXBvbGluZSkgIjoiICJcbiIKICAgICAibW92ZSAg
JDE2LCQ2ICAgICAgICMgc2V0IGNhbGxGcmFtZVJlZ2lzdGVyIiAiXG4iCiAgICAgIm1vdmUgICQy
NSwkNCAgICAgICAjIG1vdmUgZXhlY3V0YWJsZUFkZHJlc3MgdG8gdDkiICJcbiIKICAgICAic3cg
ICAgJDUsIiBTVFJJTkdJWkVfVkFMVUVfT0YoUkVHSVNURVJfRklMRV9PRkZTRVQpICIoJDI5KSAj
IHN0b3JlIEpTU3RhY2sgdG8gY3VycmVudCBzdGFjayIgIlxuIgotICAgICJsdyAgICAkOSwiIFNU
UklOR0laRV9WQUxVRV9PRihTVEFDS19MRU5HVEggKyAyMCkgIigkMjkpICAgICMgbG9hZCBnbG9i
YWxEYXRhIGZyb20gcHJldmlvdXMgc3RhY2siICJcbiIKKyAgICAibHcgICAgJDksIiBTVFJJTkdJ
WkVfVkFMVUVfT0YoU1RBQ0tfTEVOR1RIICsgMjApICIoJDI5KSAgICAjIGxvYWQgdm0gZnJvbSBw
cmV2aW91cyBzdGFjayIgIlxuIgogICAgICJqYWxyICAkMjUiICJcbiIKLSAgICAic3cgICAgJDks
IiBTVFJJTkdJWkVfVkFMVUVfT0YoR0xPQkFMX0RBVEFfT0ZGU0VUKSAiKCQyOSkgICAjIHN0b3Jl
IGdsb2JhbERhdGEgdG8gY3VycmVudCBzdGFjayIgIlxuIgorICAgICJzdyAgICAkOSwiIFNUUklO
R0laRV9WQUxVRV9PRihHTE9CQUxfREFUQV9PRkZTRVQpICIoJDI5KSAgICMgc3RvcmUgdm0gdG8g
Y3VycmVudCBzdGFjayIgIlxuIgogICAgICJsdyAgICAkMTYsIiBTVFJJTkdJWkVfVkFMVUVfT0Yo
UFJFU0VSVkVEX1MwX09GRlNFVCkgIigkMjkpIiAiXG4iCiAgICAgImx3ICAgICQxNywiIFNUUklO
R0laRV9WQUxVRV9PRihQUkVTRVJWRURfUzFfT0ZGU0VUKSAiKCQyOSkiICJcbiIKICAgICAibHcg
ICAgJDE4LCIgU1RSSU5HSVpFX1ZBTFVFX09GKFBSRVNFUlZFRF9TMl9PRkZTRVQpICIoJDI5KSIg
IlxuIgpAQCAtNjg1LDcgKzY4NSw3IEBAIFNZTUJPTF9TVFJJTkcoY3RpT3BUaHJvd05vdENhdWdo
dCkgIjoiICIKIAogI2VsaWYgQ09NUElMRVIoUlZDVCkgJiYgQ1BVKEFSTV9USFVNQjIpCiAKLV9f
YXNtIEVuY29kZWRKU1ZhbHVlIGN0aVRyYW1wb2xpbmUodm9pZCosIEpTU3RhY2sqLCBDYWxsRnJh
bWUqLCB2b2lkKiAvKnVudXNlZDEqLywgdm9pZCogLyp1bnVzZWQyKi8sIEpTR2xvYmFsRGF0YSop
CitfX2FzbSBFbmNvZGVkSlNWYWx1ZSBjdGlUcmFtcG9saW5lKHZvaWQqLCBKU1N0YWNrKiwgQ2Fs
bEZyYW1lKiwgdm9pZCogLyp1bnVzZWQxKi8sIHZvaWQqIC8qdW51c2VkMiovLCBWTSopCiB7CiAg
ICAgUFJFU0VSVkU4CiAgICAgc3ViIHNwLCBzcCwgIyBGSVJTVF9TVEFDS19BUkdVTUVOVApAQCAt
NzUzLDcgKzc1Myw3IEBAIF9fYXNtIHZvaWQgY3RpT3BUaHJvd05vdENhdWdodCgpCiAKICNlbGlm
IENPTVBJTEVSKFJWQ1QpICYmIENQVShBUk1fVFJBRElUSU9OQUwpCiAKLV9fYXNtIEVuY29kZWRK
U1ZhbHVlIGN0aVRyYW1wb2xpbmUodm9pZCosIEpTU3RhY2sqLCBDYWxsRnJhbWUqLCB2b2lkKiAv
KnVudXNlZDEqLywgdm9pZCogLyp1bnVzZWQyKi8sIEpTR2xvYmFsRGF0YSopCitfX2FzbSBFbmNv
ZGVkSlNWYWx1ZSBjdGlUcmFtcG9saW5lKHZvaWQqLCBKU1N0YWNrKiwgQ2FsbEZyYW1lKiwgdm9p
ZCogLyp1bnVzZWQxKi8sIHZvaWQqIC8qdW51c2VkMiovLCBWTSopCiB7CiAgICAgQVJNCiAgICAg
c3RtZGIgc3AhLCB7cjEtcjN9CkBAIC03OTUsMTQgKzc5NSwxNCBAQCBfX2FzbSB2b2lkIGN0aU9w
VGhyb3dOb3RDYXVnaHQoKQogI2VuZGlmCiAKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQot
ICAgICNkZWZpbmUgQ1RJX1NBTVBMRVIgc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5pbnRlcnByZXRl
ci0+c2FtcGxlcigpCisgICAgI2RlZmluZSBDVElfU0FNUExFUiBzdGFja0ZyYW1lLnZtLT5pbnRl
cnByZXRlci0+c2FtcGxlcigpCiAjZWxzZQogICAgICNkZWZpbmUgQ1RJX1NBTVBMRVIgMAogI2Vu
ZGlmCiAKLXZvaWQgcGVyZm9ybVBsYXRmb3JtU3BlY2lmaWNKSVRBc3NlcnRpb25zKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSkKK3ZvaWQgcGVyZm9ybVBsYXRmb3JtU3BlY2lmaWNKSVRBc3NlcnRp
b25zKFZNKiB2bSkKIHsKLSAgICBpZiAoIWdsb2JhbERhdGEtPmNhblVzZUpJVCgpKQorICAgIGlm
ICghdm0tPmNhblVzZUpJVCgpKQogICAgICAgICByZXR1cm47CiAKICNpZiBDUFUoQVJNX1RIVU1C
MikKQEAgLTgzOSw3ICs4MzksNyBAQCB2b2lkIHBlcmZvcm1QbGF0Zm9ybVNwZWNpZmljSklUQXNz
ZXJ0aW9uCiAgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwg
cHJlc2VydmVkUmV0dXJuQWRkcmVzcykgPT0gUFJFU0VSVkVEX1JFVFVSTl9BRERSRVNTX09GRlNF
VCk7CiAgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgdGh1
bmtSZXR1cm5BZGRyZXNzKSA9PSBUSFVOS19SRVRVUk5fQUREUkVTU19PRkZTRVQpOwogICAgIEFT
U0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHN0YWNrKSA9PSBSRUdJ
U1RFUl9GSUxFX09GRlNFVCk7Ci0gICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklU
U3RhY2tGcmFtZSwgZ2xvYmFsRGF0YSkgPT0gR0xPQkFMX0RBVEFfT0ZGU0VUKTsKKyAgICBBU1NF
UlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCB2bSkgPT0gR0xPQkFMX0RB
VEFfT0ZGU0VUKTsKIAogI2VuZGlmCiB9CkBAIC04ODgsMTIgKzg4OCwxMiBAQCBORVZFUl9JTkxJ
TkUgc3RhdGljIHZvaWQgdHJ5Q2FjaGVQdXRCeUlECiAKICAgICAgICAgU3RydWN0dXJlQ2hhaW4q
IHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihjYWxsRnJhbWUpOwog
ICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5wcmV2aW91c0lEKCktPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwotICAgICAgICBzdHViSW5mby0+aW5pdFB1dEJ5
SWRUcmFuc2l0aW9uKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSwgc3RydWN0dXJlLCBwcm90b3R5cGVD
aGFpbiwgZGlyZWN0KTsKLSAgICAgICAgSklUOjpjb21waWxlUHV0QnlJZFRyYW5zaXRpb24oY2Fs
bEZyYW1lLT5zY29wZSgpLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVj
dHVyZS0+cHJldmlvdXNJRCgpLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3Rv
dHlwZUNoYWluLCByZXR1cm5BZGRyZXNzLCBkaXJlY3QpOworICAgICAgICBzdHViSW5mby0+aW5p
dFB1dEJ5SWRUcmFuc2l0aW9uKGNhbGxGcmFtZS0+dm0oKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgc3RydWN0dXJlLT5wcmV2aW91c0lEKCksIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hh
aW4sIGRpcmVjdCk7CisgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKGNhbGxG
cmFtZS0+c2NvcGUoKS0+dm0oKSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLT5wcmV2
aW91c0lEKCksIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvdG90eXBlQ2hhaW4s
IHJldHVybkFkZHJlc3MsIGRpcmVjdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0g
ICAgc3R1YkluZm8tPmluaXRQdXRCeUlkUmVwbGFjZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKKyAgICBzdHViSW5mby0+
aW5pdFB1dEJ5SWRSZXBsYWNlKGNhbGxGcmFtZS0+dm0oKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgc3RydWN0dXJlKTsKIAogICAgIEpJVDo6cGF0Y2hQdXRCeUlkUmVwbGFjZShjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHJldHVybkFk
ZHJlc3MsIGRpcmVjdCk7CiB9CkBAIC05MDksMTcgKzkwOSwxNyBAQCBORVZFUl9JTkxJTkUgc3Rh
dGljIHZvaWQgdHJ5Q2FjaGVHZXRCeUlECiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0g
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpOwor
ICAgIFZNKiB2bSA9ICZjYWxsRnJhbWUtPnZtKCk7CiAKICAgICBpZiAoaXNKU0FycmF5KGJhc2VW
YWx1ZSkgJiYgcHJvcGVydHlOYW1lID09IGNhbGxGcmFtZS0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCkgewotICAgICAgICBKSVQ6OmNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKGNhbGxGcmFtZS0+
c2NvcGUoKS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2ssIHJldHVybkFkZHJlc3MpOworICAgICAg
ICBKSVQ6OmNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKGNhbGxGcmFtZS0+c2NvcGUoKS0+dm0o
KSwgY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKICAgICBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpICYmIHByb3BlcnR5TmFtZSA9PSBjYWxs
RnJhbWUtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKICAgICAgICAgLy8gVGhlIHRyYWRlb2Zm
IG9mIGNvbXBpbGluZyBhbiBwYXRjaGVkIGlubGluZSBzdHJpbmcgbGVuZ3RoIGFjY2VzcyByb3V0
aW5lIGRvZXMgbm90IHNlZW0KICAgICAgICAgLy8gdG8gcGF5IG9mZiwgc28gd2UgY3VycmVudGx5
IG9ubHkgZG8gdGhpcyBmb3IgYXJyYXlzLgotICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLCBnbG9iYWxEYXRhLT5nZXRDVElTdHViKHN0
cmluZ0xlbmd0aFRyYW1wb2xpbmVHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgICAgIGN0aVBhdGNo
Q2FsbEJ5UmV0dXJuQWRkcmVzcyhjb2RlQmxvY2ssIHJldHVybkFkZHJlc3MsIHZtLT5nZXRDVElT
dHViKHN0cmluZ0xlbmd0aFRyYW1wb2xpbmVHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTk0OCw3ICs5NDgsNyBAQCBORVZFUl9JTkxJTkUgc3RhdGljIHZv
aWQgdHJ5Q2FjaGVHZXRCeUlECiAgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJl
c3MoY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lk
X3NlbGZfZmFpbCkpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIEpJVDo6cGF0Y2hHZXRC
eUlkU2VsZihjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0
KCksIHJldHVybkFkZHJlc3MpOwotICAgICAgICAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlkU2Vs
ZihjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
c3RydWN0dXJlKTsKKyAgICAgICAgICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZFNlbGYoY2FsbEZy
YW1lLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC05NzQsMTUgKzk3NCwxNSBAQCBORVZF
Ul9JTkxJTkUgc3RhdGljIHZvaWQgdHJ5Q2FjaGVHZXRCeUlECiAgICAgICAgIC8vIFNpbmNlIHdl
J3JlIGFjY2Vzc2luZyBhIHByb3RvdHlwZSBpbiBhIGxvb3AsIGl0J3MgYSBnb29kIGJldCB0aGF0
IGl0CiAgICAgICAgIC8vIHNob3VsZCBub3QgYmUgdHJlYXRlZCBhcyBhIGRpY3Rpb25hcnkuCiAg
ICAgICAgIGlmIChzbG90QmFzZU9iamVjdC0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7
Ci0gICAgICAgICAgICBzbG90QmFzZU9iamVjdC0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoY2Fs
bEZyYW1lLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdEJhc2VPYmpl
Y3QtPnN0cnVjdHVyZSgpLT5nZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFt
ZSk7CisgICAgICAgICAgICBzbG90QmFzZU9iamVjdC0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qo
Y2FsbEZyYW1lLT52bSgpKTsKKyAgICAgICAgICAgIG9mZnNldCA9IHNsb3RCYXNlT2JqZWN0LT5z
dHJ1Y3R1cmUoKS0+Z2V0KGNhbGxGcmFtZS0+dm0oKSwgcHJvcGVydHlOYW1lKTsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlkUHJvdG8oY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwg
c2xvdEJhc2VPYmplY3QtPnN0cnVjdHVyZSgpLCBzbG90LmNhY2hlZFByb3BlcnR5VHlwZSgpID09
IFByb3BlcnR5U2xvdDo6VmFsdWUpOworICAgICAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRQcm90
byhjYWxsRnJhbWUtPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVy
ZSwgc2xvdEJhc2VPYmplY3QtPnN0cnVjdHVyZSgpLCBzbG90LmNhY2hlZFByb3BlcnR5VHlwZSgp
ID09IFByb3BlcnR5U2xvdDo6VmFsdWUpOwogCiAgICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5p
c0RpY3Rpb25hcnkoKSk7CiAgICAgICAgIEFTU0VSVCghc2xvdEJhc2VPYmplY3QtPnN0cnVjdHVy
ZSgpLT5pc0RpY3Rpb25hcnkoKSk7Ci0gICAgICAgIEpJVDo6Y29tcGlsZUdldEJ5SWRQcm90byhj
YWxsRnJhbWUtPnNjb3BlKCktPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIHN0
dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKSwgcHJvcGVydHlO
YW1lLCBzbG90LCBvZmZzZXQsIHJldHVybkFkZHJlc3MpOworICAgICAgICBKSVQ6OmNvbXBpbGVH
ZXRCeUlkUHJvdG8oY2FsbEZyYW1lLT5zY29wZSgpLT52bSgpLCBjYWxsRnJhbWUsIGNvZGVCbG9j
aywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdEJhc2VPYmplY3QtPnN0cnVjdHVyZSgpLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QsIG9mZnNldCwgcmV0dXJuQWRkcmVzcyk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTk5NSw4ICs5OTUsOCBAQCBORVZFUl9JTkxJTkUgc3RhdGljIHZvaWQgdHJ5
Q2FjaGVHZXRCeUlECiAgICAgfQogCiAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWlu
ID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihjYWxsRnJhbWUpOwotICAgIHN0dWJJbmZvLT5p
bml0R2V0QnlJZENoYWluKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgc2xvdC5jYWNo
ZWRQcm9wZXJ0eVR5cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OlZhbHVlKTsKLSAgICBKSVQ6OmNvbXBp
bGVHZXRCeUlkQ2hhaW4oY2FsbEZyYW1lLT5zY29wZSgpLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFt
ZSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQs
IHByb3BlcnR5TmFtZSwgc2xvdCwgb2Zmc2V0LCByZXR1cm5BZGRyZXNzKTsKKyAgICBzdHViSW5m
by0+aW5pdEdldEJ5SWRDaGFpbihjYWxsRnJhbWUtPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBzbG90LmNhY2hlZFBy
b3BlcnR5VHlwZSgpID09IFByb3BlcnR5U2xvdDo6VmFsdWUpOworICAgIEpJVDo6Y29tcGlsZUdl
dEJ5SWRDaGFpbihjYWxsRnJhbWUtPnNjb3BlKCktPnZtKCksIGNhbGxGcmFtZSwgY29kZUJsb2Nr
LCBzdHViSW5mbywgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHByb3BlcnR5TmFt
ZSwgc2xvdCwgb2Zmc2V0LCByZXR1cm5BZGRyZXNzKTsKIH0KIAogI2lmICFkZWZpbmVkKE5ERUJV
RykKQEAgLTEwNDYsMTAgKzEwNDYsMTAgQEAgc3RydWN0IFN0YWNrSGFjayB7CiAvLyB0byBnZXQg
dGhlIGFkZHJlc3Mgb2YgdGhlIGN0aVZNVGhyb3dUcmFtcG9saW5lIGZ1bmN0aW9uLiBJdCdzIGFs
c28KIC8vIGdvb2QgdG8ga2VlcCB0aGUgY29kZSBzaXplIGRvd24gYnkgbGVhdmluZyBhcyBtdWNo
IG9mIHRoZSBleGNlcHRpb24KIC8vIGhhbmRsaW5nIGNvZGUgb3V0IG9mIGxpbmUgYXMgcG9zc2li
bGUuCi1zdGF0aWMgTkVWRVJfSU5MSU5FIHZvaWQgcmV0dXJuVG9UaHJvd1RyYW1wb2xpbmUoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBSZXR1cm5BZGRyZXNzUHRyIGV4Y2VwdGlvbkxvY2F0aW9u
LCBSZXR1cm5BZGRyZXNzUHRyJiByZXR1cm5BZGRyZXNzU2xvdCkKK3N0YXRpYyBORVZFUl9JTkxJ
TkUgdm9pZCByZXR1cm5Ub1Rocm93VHJhbXBvbGluZShWTSogdm0sIFJldHVybkFkZHJlc3NQdHIg
ZXhjZXB0aW9uTG9jYXRpb24sIFJldHVybkFkZHJlc3NQdHImIHJldHVybkFkZHJlc3NTbG90KQog
ewotICAgIFJFTEVBU0VfQVNTRVJUKGdsb2JhbERhdGEtPmV4Y2VwdGlvbik7Ci0gICAgZ2xvYmFs
RGF0YS0+ZXhjZXB0aW9uTG9jYXRpb24gPSBleGNlcHRpb25Mb2NhdGlvbjsKKyAgICBSRUxFQVNF
X0FTU0VSVCh2bS0+ZXhjZXB0aW9uKTsKKyAgICB2bS0+ZXhjZXB0aW9uTG9jYXRpb24gPSBleGNl
cHRpb25Mb2NhdGlvbjsKICAgICByZXR1cm5BZGRyZXNzU2xvdCA9IFJldHVybkFkZHJlc3NQdHIo
RnVuY3Rpb25QdHIoY3RpVk1UaHJvd1RyYW1wb2xpbmUpKTsKIH0KIApAQCAtMTA2MCwyMiArMTA2
MCwyMiBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIHZvaWQgcmV0dXJuVG9UaHJvd1RyCiAgICAgfSB3
aGlsZSAoMCkKICNkZWZpbmUgVk1fVEhST1dfRVhDRVBUSU9OX0FUX0VORCgpIFwKICAgICBkbyB7
XAotICAgICAgICByZXR1cm5Ub1Rocm93VHJhbXBvbGluZShzdGFja0ZyYW1lLmdsb2JhbERhdGEs
IFNUVUJfUkVUVVJOX0FERFJFU1MsIFNUVUJfUkVUVVJOX0FERFJFU1MpO1wKKyAgICAgICAgcmV0
dXJuVG9UaHJvd1RyYW1wb2xpbmUoc3RhY2tGcmFtZS52bSwgU1RVQl9SRVRVUk5fQUREUkVTUywg
U1RVQl9SRVRVUk5fQUREUkVTUyk7XAogICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgQ0hFQ0tf
Rk9SX0VYQ0VQVElPTigpIFwKICAgICBkbyB7IFwKLSAgICAgICAgaWYgKFVOTElLRUxZKHN0YWNr
RnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKSkgXAorICAgICAgICBpZiAoVU5MSUtFTFkoc3Rh
Y2tGcmFtZS52bS0+ZXhjZXB0aW9uKSkgXAogICAgICAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9O
KCk7IFwKICAgICB9IHdoaWxlICgwKQogI2RlZmluZSBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VO
RCgpIFwKICAgICBkbyB7IFwKLSAgICAgICAgaWYgKFVOTElLRUxZKHN0YWNrRnJhbWUuZ2xvYmFs
RGF0YS0+ZXhjZXB0aW9uKSkgXAorICAgICAgICBpZiAoVU5MSUtFTFkoc3RhY2tGcmFtZS52bS0+
ZXhjZXB0aW9uKSkgXAogICAgICAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OX0FUX0VORCgpOyBc
CiAgICAgfSB3aGlsZSAoMCkKICNkZWZpbmUgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9WT0lEKCkgXAog
ICAgIGRvIHsgXAotICAgICAgICBpZiAoVU5MSUtFTFkoc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5l
eGNlcHRpb24pKSB7IFwKKyAgICAgICAgaWYgKFVOTElLRUxZKHN0YWNrRnJhbWUudm0tPmV4Y2Vw
dGlvbikpIHsgXAogICAgICAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OX0FUX0VORCgpOyBcCiAg
ICAgICAgICAgICByZXR1cm47IFwKICAgICAgICAgfSBcCkBAIC0xMDg3LDE2ICsxMDg3LDE2IEBA
IHN0YXRpYyBORVZFUl9JTkxJTkUgdm9pZCByZXR1cm5Ub1Rocm93VHIKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0YXRpYyBUIHRocm93RXhjZXB0aW9uRnJvbU9wQ2FsbChKSVRTdGFja0ZyYW1lJiBq
aXRTdGFja0ZyYW1lLCBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSwgUmV0dXJuQWRkcmVzc1B0ciYg
cmV0dXJuQWRkcmVzc1Nsb3QpCiB7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBuZXdDYWxs
RnJhbWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgQVNTRVJUKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
LmV4Y2VwdGlvbik7CisgICAgQVNTRVJUKGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24pOwogICAg
IGppdFN0YWNrRnJhbWUuY2FsbEZyYW1lID0gY2FsbEZyYW1lOwotICAgIGNhbGxGcmFtZS0+Z2xv
YmFsRGF0YSgpLnRvcENhbGxGcmFtZSA9IGNhbGxGcmFtZTsKLSAgICByZXR1cm5Ub1Rocm93VHJh
bXBvbGluZSgmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIFJldHVybkFkZHJlc3NQdHIobmV3Q2Fs
bEZyYW1lLT5yZXR1cm5QQygpKSwgcmV0dXJuQWRkcmVzc1Nsb3QpOworICAgIGNhbGxGcmFtZS0+
dm0oKS50b3BDYWxsRnJhbWUgPSBjYWxsRnJhbWU7CisgICAgcmV0dXJuVG9UaHJvd1RyYW1wb2xp
bmUoJmNhbGxGcmFtZS0+dm0oKSwgUmV0dXJuQWRkcmVzc1B0cihuZXdDYWxsRnJhbWUtPnJldHVy
blBDKCkpLCByZXR1cm5BZGRyZXNzU2xvdCk7CiAgICAgcmV0dXJuIFQoKTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RhdGljIFQgdGhyb3dFeGNlcHRpb25Gcm9tT3BDYWxsKEpJVFN0YWNr
RnJhbWUmIGppdFN0YWNrRnJhbWUsIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lLCBSZXR1cm5BZGRy
ZXNzUHRyJiByZXR1cm5BZGRyZXNzU2xvdCwgSlNWYWx1ZSBleGNlcHRpb24pCiB7Ci0gICAgbmV3
Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gZXhjZXB0
aW9uOworICAgIG5ld0NhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+dm0oKS5leGNlcHRpb24gPSBl
eGNlcHRpb247CiAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uRnJvbU9wQ2FsbDxUPihqaXRTdGFj
a0ZyYW1lLCBuZXdDYWxsRnJhbWUsIHJldHVybkFkZHJlc3NTbG90KTsKIH0KIApAQCAtMTM3OSw5
ICsxMzc5LDkgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgaGFuZGxlX3dhdGNoZAogewog
ICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKICAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSA9IHN0YWNrRnJhbWUuZ2xvYmFsRGF0YTsKLSAgICBpZiAoVU5MSUtFTFkoZ2xvYmFsRGF0
YS0+d2F0Y2hkb2cuZGlkRmlyZShjYWxsRnJhbWUpKSkgewotICAgICAgICBnbG9iYWxEYXRhLT5l
eGNlcHRpb24gPSBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGdsb2JhbERhdGEp
OworICAgIFZNKiB2bSA9IHN0YWNrRnJhbWUudm07CisgICAgaWYgKFVOTElLRUxZKHZtLT53YXRj
aGRvZy5kaWRGaXJlKGNhbGxGcmFtZSkpKSB7CisgICAgICAgIHZtLT5leGNlcHRpb24gPSBjcmVh
dGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHZtKTsKICAgICAgICAgVk1fVEhST1dfRVhD
RVBUSU9OX0FUX0VORCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTQyMSw3ICsxNDIx
LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X2lkXwogICAgIFB1dFBy
b3BlcnR5U2xvdCBzbG90KHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJp
Y3RNb2RlKCkpOwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpz
VmFsdWUoKTsKICAgICBBU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOwotICAgIGFzT2JqZWN0
KGJhc2VWYWx1ZSktPnB1dERpcmVjdChzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
LCBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigpLCBzdGFja0ZyYW1lLmFyZ3NbMl0uanNW
YWx1ZSgpLCBzbG90KTsKKyAgICBhc09iamVjdChiYXNlVmFsdWUpLT5wdXREaXJlY3Qoc3RhY2tG
cmFtZS5jYWxsRnJhbWUtPnZtKCksIHN0YWNrRnJhbWUuYXJnc1sxXS5pZGVudGlmaWVyKCksIHN0
YWNrRnJhbWUuYXJnc1syXS5qc1ZhbHVlKCksIHNsb3QpOwogICAgIENIRUNLX0ZPUl9FWENFUFRJ
T05fQVRfRU5EKCk7CiB9CiAKQEAgLTE0NzUsNyArMTQ3NSw3IEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKHZvaWQsIG9wX3B1dF9ieV9pZF8KICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJh
bWUuYXJnc1swXS5qc1ZhbHVlKCk7CiAgICAgQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsK
ICAgICAKLSAgICBhc09iamVjdChiYXNlVmFsdWUpLT5wdXREaXJlY3QoY2FsbEZyYW1lLT5nbG9i
YWxEYXRhKCksIGlkZW50LCBzdGFja0ZyYW1lLmFyZ3NbMl0uanNWYWx1ZSgpLCBzbG90KTsKKyAg
ICBhc09iamVjdChiYXNlVmFsdWUpLT5wdXREaXJlY3QoY2FsbEZyYW1lLT52bSgpLCBpZGVudCwg
c3RhY2tGcmFtZS5hcmdzWzJdLmpzVmFsdWUoKSwgc2xvdCk7CiAgICAgCiAgICAgaWYgKGFjY2Vz
c1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKSB7
CiAgICAgICAgIHN0dWJJbmZvLT5zZXRTZWVuKCk7CkBAIC0xNTA4LDcgKzE1MDgsNyBAQCBERUZJ
TkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfaWRfCiAgICAgUHV0UHJvcGVydHlTbG90
IHNsb3QoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwogICAgIEpTVmFs
dWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKICAgICBBU1NFUlQo
YmFzZVZhbHVlLmlzT2JqZWN0KCkpOwotICAgIGFzT2JqZWN0KGJhc2VWYWx1ZSktPnB1dERpcmVj
dChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgaWRlbnQsIHN0YWNrRnJhbWUuYXJnc1syXS5qc1Zh
bHVlKCksIHNsb3QpOworICAgIGFzT2JqZWN0KGJhc2VWYWx1ZSktPnB1dERpcmVjdChjYWxsRnJh
bWUtPnZtKCksIGlkZW50LCBzdGFja0ZyYW1lLmFyZ3NbMl0uanNWYWx1ZSgpLCBzbG90KTsKICAg
ICAKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwogfQpAQCAtMTUyNyw5ICsxNTI3
LDkgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3QqLCBvcF9wdXRfYgogCiAgICAgQVNT
RVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKICAgICBKU09iamVjdCogYmFzZSA9IGFzT2JqZWN0
KGJhc2VWYWx1ZSk7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gKnN0YWNrRnJhbWUu
Z2xvYmFsRGF0YTsKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGJhc2UtPmdyb3dPdXRPZkxp
bmVTdG9yYWdlKGdsb2JhbERhdGEsIG9sZFNpemUsIG5ld1NpemUpOwotICAgIGJhc2UtPnNldEJ1
dHRlcmZseShnbG9iYWxEYXRhLCBidXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CisgICAgVk0mIHZt
ID0gKnN0YWNrRnJhbWUudm07CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBiYXNlLT5ncm93
T3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkU2l6ZSwgbmV3U2l6ZSk7CisgICAgYmFzZS0+c2V0QnV0
dGVyZmx5KHZtLCBidXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CiAKICAgICByZXR1cm4gYmFzZTsK
IH0KQEAgLTE1OTEsMTEgKzE1OTEsMTEgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpT
VmFsdWUsIG9wXwogICAgICAgICBpbnQgbGlzdEluZGV4ID0gMTsKIAogICAgICAgICBpZiAoc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KQotICAgICAgICAgICAgc3R1YkluZm8t
PmluaXRHZXRCeUlkU2VsZihjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAg
ICAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRTZWxmKGNhbGxGcmFtZS0+dm0oKSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSk7CiAK
ICAgICAgICAgaWYgKHN0dWJJbmZvLT5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2Vs
ZikgewogICAgICAgICAgICAgQVNTRVJUKCFzdHViSW5mby0+c3R1YlJvdXRpbmUpOwotICAgICAg
ICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgMCwgc3R1YkluZm8tPnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5n
ZXQoKSwgdHJ1ZSk7CisgICAgICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGNhbGxGcmFtZS0+dm0oKSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgMCwgc3R1YkluZm8tPnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVj
dFN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7CiAgICAgICAgICAgICBzdHViSW5mby0+aW5pdEdldEJ5
SWRTZWxmTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gc3R1YkluZm8tPnUuZ2V0
QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxpc3Q7CkBAIC0xNjAzLDcgKzE2MDMsNyBAQCBERUZJTkVf
U1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgICAgIH0KICAgICAgICAgaWYg
KGxpc3RJbmRleCA8IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkgewogICAgICAgICAgICAg
c3R1YkluZm8tPnUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RTaXplKys7Ci0gICAgICAgICAgICBKSVQ6
OmNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoY2FsbEZyYW1lLT5zY29wZSgpLT5nbG9iYWxEYXRhKCks
IGNvZGVCbG9jaywgc3R1YkluZm8sIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgbGlzdEluZGV4
LCBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLCBpZGVudCwgc2xvdCwgc2xvdC5jYWNo
ZWRPZmZzZXQoKSk7CisgICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoY2Fs
bEZyYW1lLT5zY29wZSgpLT52bSgpLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBwb2x5bW9ycGhpY1N0
cnVjdHVyZUxpc3QsIGxpc3RJbmRleCwgYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwg
aWRlbnQsIHNsb3QsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogCiAgICAgICAgICAgICBpZiAobGlz
dEluZGV4ID09IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKSkKICAgICAgICAgICAg
ICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY29kZUJsb2NrLCBTVFVCX1JFVFVSTl9B
RERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX2dlbmVyaWMpKTsKQEAgLTE2MTMs
MTkgKzE2MTMsMTkgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotc3RhdGljIFBvbHltb3Jw
aGljQWNjZXNzU3RydWN0dXJlTGlzdCogZ2V0UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
U2xvdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyLCBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIGludCYgbGlzdEluZGV4KQorc3RhdGljIFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogZ2V0UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0U2xvdChWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyLCBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8sIGludCYgbGlzdEluZGV4KQogewogICAgIFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IDA7CiAgICAgbGlzdEluZGV4ID0g
MTsKIAogICAgIHN3aXRjaCAoc3R1YkluZm8tPmFjY2Vzc1R5cGUpIHsKICAgICBjYXNlIGFjY2Vz
c19nZXRfYnlfaWRfcHJvdG86Ci0gICAgICAgIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QgPSBuZXcg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGdsb2JhbERhdGEsIG93bmVyLCBzdHViSW5m
by0+c3R1YlJvdXRpbmUsIHN0dWJJbmZvLT51LmdldEJ5SWRQcm90by5iYXNlT2JqZWN0U3RydWN0
dXJlLmdldCgpLCBzdHViSW5mby0+dS5nZXRCeUlkUHJvdG8ucHJvdG90eXBlU3RydWN0dXJlLmdl
dCgpLCB0cnVlKTsKKyAgICAgICAgcHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qodm0sIG93bmVyLCBzdHViSW5mby0+c3R1YlJvdXRpbmUs
IHN0dWJJbmZvLT51LmdldEJ5SWRQcm90by5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHVi
SW5mby0+dS5nZXRCeUlkUHJvdG8ucHJvdG90eXBlU3RydWN0dXJlLmdldCgpLCB0cnVlKTsKICAg
ICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lLmNsZWFyKCk7CiAgICAgICAgIHN0dWJJbmZvLT5p
bml0R2V0QnlJZFByb3RvTGlzdChwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCAyKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluOgotICAgICAgICBwcm90b3R5
cGVTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChnbG9i
YWxEYXRhLCBvd25lciwgc3R1YkluZm8tPnN0dWJSb3V0aW5lLCBzdHViSW5mby0+dS5nZXRCeUlk
Q2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8tPnUuZ2V0QnlJZENoYWlu
LmNoYWluLmdldCgpLCB0cnVlKTsKKyAgICAgICAgcHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IG5l
dyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qodm0sIG93bmVyLCBzdHViSW5mby0+c3R1
YlJvdXRpbmUsIHN0dWJJbmZvLT51LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdl
dCgpLCBzdHViSW5mby0+dS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0KCksIHRydWUpOwogICAgICAg
ICBzdHViSW5mby0+c3R1YlJvdXRpbmUuY2xlYXIoKTsKICAgICAgICAgc3R1YkluZm8tPmluaXRH
ZXRCeUlkUHJvdG9MaXN0KHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIDIpOwogICAgICAgICBicmVh
azsKQEAgLTE2NTUsNyArMTY1NSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1Zh
bHVlLCBvcF8KICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldHRlci0+bWV0aG9kVGFibGUoKS0+
Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxs
KGNhbGxGcmFtZSwgZ2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIHN0YWNrRnJhbWUuYXJnc1sx
XS5qc09iamVjdCgpLCBBcmdMaXN0KCkpOwogICAgIGlmIChjYWxsRnJhbWUtPmhhZEV4Y2VwdGlv
bigpKQotICAgICAgICByZXR1cm5Ub1Rocm93VHJhbXBvbGluZSgmY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCksIHN0YWNrRnJhbWUuYXJnc1syXS5yZXR1cm5BZGRyZXNzKCksIFNUVUJfUkVUVVJOX0FE
RFJFU1MpOworICAgICAgICByZXR1cm5Ub1Rocm93VHJhbXBvbGluZSgmY2FsbEZyYW1lLT52bSgp
LCBzdGFja0ZyYW1lLmFyZ3NbMl0ucmV0dXJuQWRkcmVzcygpLCBTVFVCX1JFVFVSTl9BRERSRVNT
KTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAgLTE2NjksNyAr
MTY2OSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHN0YWNrRnJhbWUuYXJnc1syXS5pZGVudGlmaWVyKCk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBnZXR0ZXIoY2FsbEZyYW1lLCBzbG90QmFzZSwgaWRlbnQp
OwogICAgIGlmIChjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm5Ub1Ro
cm93VHJhbXBvbGluZSgmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHN0YWNrRnJhbWUuYXJnc1sz
XS5yZXR1cm5BZGRyZXNzKCksIFNUVUJfUkVUVVJOX0FERFJFU1MpOworICAgICAgICByZXR1cm5U
b1Rocm93VHJhbXBvbGluZSgmY2FsbEZyYW1lLT52bSgpLCBzdGFja0ZyYW1lLmFyZ3NbM10ucmV0
dXJuQWRkcmVzcygpLCBTVFVCX1JFVFVSTl9BRERSRVNTKTsKICAgICAKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC0xNzIwLDE0ICsxNzIwLDE0IEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICAgICAgLy8gU2luY2Ugd2UncmUg
YWNjZXNzaW5nIGEgcHJvdG90eXBlIGluIGEgbG9vcCwgaXQncyBhIGdvb2QgYmV0IHRoYXQgaXQK
ICAgICAgICAgLy8gc2hvdWxkIG5vdCBiZSB0cmVhdGVkIGFzIGEgZGljdGlvbmFyeS4KICAgICAg
ICAgaWYgKHNsb3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpIHsKLSAg
ICAgICAgICAgIHNsb3RCYXNlT2JqZWN0LT5mbGF0dGVuRGljdGlvbmFyeU9iamVjdChjYWxsRnJh
bWUtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgICAgICBvZmZzZXQgPSBzbG90QmFzZU9iamVjdC0+
c3RydWN0dXJlKCktPmdldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsK
KyAgICAgICAgICAgIHNsb3RCYXNlT2JqZWN0LT5mbGF0dGVuRGljdGlvbmFyeU9iamVjdChjYWxs
RnJhbWUtPnZtKCkpOworICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdEJhc2VPYmplY3QtPnN0cnVj
dHVyZSgpLT5nZXQoY2FsbEZyYW1lLT52bSgpLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB9CiAK
ICAgICAgICAgaW50IGxpc3RJbmRleDsKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0ID0gZ2V0UG9seW1vcnBoaWNBY2Nlc3NTdHJ1
Y3R1cmVMaXN0U2xvdChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgc3R1YkluZm8sIGxpc3RJbmRleCk7CisgICAgICAgIFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IGdldFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdFNsb3QoY2FsbEZyYW1lLT52bSgpLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBzdHViSW5mbywgbGlzdEluZGV4KTsKICAgICAgICAgaWYgKGxpc3RJbmRl
eCA8IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkgewotICAgICAgICAgICAgSklUOjpjb21w
aWxlR2V0QnlJZFByb3RvTGlzdChjYWxsRnJhbWUtPnNjb3BlKCktPmdsb2JhbERhdGEoKSwgY2Fs
bEZyYW1lLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCBsaXN0
SW5kZXgsIHN0cnVjdHVyZSwgc2xvdEJhc2VPYmplY3QtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5h
bWUsIHNsb3QsIG9mZnNldCk7CisgICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeUlkUHJvdG9M
aXN0KGNhbGxGcmFtZS0+c2NvcGUoKS0+dm0oKSwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCBsaXN0SW5kZXgsIHN0cnVjdHVyZSwgc2xvdEJh
c2VPYmplY3QtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIG9mZnNldCk7CiAKICAg
ICAgICAgICAgIGlmIChsaXN0SW5kZXggPT0gKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAt
IDEpKQogICAgICAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjb2RlQmxv
Y2ssIFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJv
dG9fbGlzdF9mdWxsKSk7CkBAIC0xNzQxLDExICsxNzQxLDExIEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICAgICAgCiAgICAgICAgIEFTU0VSVCghYmFzZVZh
bHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpOwogICAgICAgICBpbnQg
bGlzdEluZGV4OwotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHByb3Rv
dHlwZVN0cnVjdHVyZUxpc3QgPSBnZXRQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTbG90
KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBz
dHViSW5mbywgbGlzdEluZGV4KTsKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0ID0gZ2V0UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0U2xvdChjYWxsRnJhbWUtPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IHN0dWJJbmZvLCBsaXN0SW5kZXgpOwogICAgICAgICAKICAgICAgICAgaWYgKGxpc3RJbmRleCA8
IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkgewogICAgICAgICAgICAgU3RydWN0dXJlQ2hh
aW4qIHByb3RvQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGNhbGxGcmFtZSk7Ci0g
ICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KGNhbGxGcmFtZS0+c2NvcGUo
KS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgc3R1YkluZm8sIHByb3RvdHlw
ZVN0cnVjdHVyZUxpc3QsIGxpc3RJbmRleCwgc3RydWN0dXJlLCBwcm90b0NoYWluLCBjb3VudCwg
cHJvcGVydHlOYW1lLCBzbG90LCBvZmZzZXQpOworICAgICAgICAgICAgSklUOjpjb21waWxlR2V0
QnlJZENoYWluTGlzdChjYWxsRnJhbWUtPnNjb3BlKCktPnZtKCksIGNhbGxGcmFtZSwgY29kZUJs
b2NrLCBzdHViSW5mbywgcHJvdG90eXBlU3RydWN0dXJlTGlzdCwgbGlzdEluZGV4LCBzdHJ1Y3R1
cmUsIHByb3RvQ2hhaW4sIGNvdW50LCBwcm9wZXJ0eU5hbWUsIHNsb3QsIG9mZnNldCk7CiAKICAg
ICAgICAgICAgIGlmIChsaXN0SW5kZXggPT0gKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAt
IDEpKQogICAgICAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjb2RlQmxv
Y2ssIFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJv
dG9fbGlzdF9mdWxsKSk7CkBAIC0xODIxLDcgKzE4MjEsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElP
TihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdGFja0ZyYW1l
Lmdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKGNhbGxGcmFt
ZSwgImluc3RhbmNlb2YiLCBiYXNlVmFsKTsKKyAgICBzdGFja0ZyYW1lLnZtLT5leGNlcHRpb24g
PSBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihjYWxsRnJhbWUsICJpbnN0YW5jZW9mIiwgYmFzZVZh
bCk7CiAgICAgVk1fVEhST1dfRVhDRVBUSU9OX0FUX0VORCgpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKTsKIH0KQEAgLTE5OTAsNyArMTk5MCw3IEBAIERFRklORV9TVFVC
X0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICBib29sIGNvdWxkRGVsZXRlID0gYmFz
ZU9iai0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoYmFzZU9iaiwgY2FsbEZyYW1lLCBz
dGFja0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
Qm9vbGVhbihjb3VsZERlbGV0ZSk7CiAgICAgaWYgKCFjb3VsZERlbGV0ZSAmJiBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgc3RhY2tGcmFtZS5nbG9iYWxE
YXRhLT5leGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3Ioc3RhY2tGcmFtZS5jYWxsRnJhbWUsICJV
bmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOworICAgICAgICBzdGFja0ZyYW1lLnZtLT5leGNl
cHRpb24gPSBjcmVhdGVUeXBlRXJyb3Ioc3RhY2tGcmFtZS5jYWxsRnJhbWUsICJVbmFibGUgdG8g
ZGVsZXRlIHByb3BlcnR5LiIpOwogCiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkBAIC0yMDQ2LDcgKzIwNDYsNyBA
QCBpbmxpbmUgdm9pZCogaml0Q29tcGlsZUZvcihDYWxsRnJhbWUqIGNhCiAgICAgSlNPYmplY3Qq
IGVycm9yID0gZXhlY3V0YWJsZS0+Y29tcGlsZUZvcihjYWxsRnJhbWUsIGNhbGxEYXRhU2NvcGVD
aGFpbiwga2luZCk7CiAgICAgaWYgKCFlcnJvcikKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uOwot
ICAgIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGVycm9yOworICAgIGNhbGxG
cmFtZS0+dm0oKS5leGNlcHRpb24gPSBlcnJvcjsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMjE0
MSw3ICsyMTQxLDcgQEAgaW5saW5lIHZvaWQqIGxhenlMaW5rRm9yKENhbGxGcmFtZSogY2FsbAog
ICAgIGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJs
ZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogICAgICAg
ICBpZiAoSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21waWxlRm9yKGNh
bGxGcmFtZSwgY2FsbGVlLT5zY29wZSgpLCBraW5kKSkgewotICAgICAgICAgICAgY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gZXJyb3I7CisgICAgICAgICAgICBjYWxsRnJhbWUt
PnZtKCkuZXhjZXB0aW9uID0gZXJyb3I7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
fQogICAgICAgICBjb2RlQmxvY2sgPSAmZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRCeXRl
Y29kZUZvcihraW5kKTsKQEAgLTIxNTUsNyArMjE1NSw3IEBAIGlubGluZSB2b2lkKiBsYXp5TGlu
a0ZvcihDYWxsRnJhbWUqIGNhbGwKICAgICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkK
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7CiAgICAgZWxzZQotICAgICAgICBKSVQ6
OmxpbmtGb3IoY2FsbGVlLCBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLCBj
b2RlQmxvY2ssIGNvZGVQdHIsIGNhbGxMaW5rSW5mbywgJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
LCBraW5kKTsKKyAgICAgICAgSklUOjpsaW5rRm9yKGNhbGxlZSwgY2FsbEZyYW1lLT5jYWxsZXJG
cmFtZSgpLT5jb2RlQmxvY2soKSwgY29kZUJsb2NrLCBjb2RlUHRyLCBjYWxsTGlua0luZm8sICZj
YWxsRnJhbWUtPnZtKCksIGtpbmQpOwogCiAgICAgcmV0dXJuIGNvZGVQdHIuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKIH0KQEAgLTIxNzksNyArMjE3OSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZv
aWQqLCB2bV9sYXp5TGlua0MKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUu
Y2FsbEZyYW1lOwogICAgIAogICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbEZy
YW1lLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSBjYWxsZXJDb2RlQmxvY2stPmdsb2JhbERhdGEoKTsKKyAgICBWTSogdm0gPSBjYWxs
ZXJDb2RlQmxvY2stPnZtKCk7CiAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSAmY2Fs
bGVyQ29kZUJsb2NrLT5nZXRDYWxsTGlua0luZm8oY2FsbEZyYW1lLT5yZXR1cm5QQygpKTsKICAg
ICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+Y2Fs
bGVlKCkpOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gY2FsbGVlLT5leGVjdXRh
YmxlKCk7CkBAIC0yMjE4LDcgKzIyMTgsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkKiwg
dm1fbGF6eUxpbmtDCiAgICAgICAgIEpTU2NvcGUqIHNjb3BlQ2hhaW4gPSBjYWxsZWUtPnNjb3Bl
KCk7CiAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGls
ZUZvcihjYWxsRnJhbWUsIHNjb3BlQ2hhaW4sIENvZGVGb3JDYWxsKTsKICAgICAgICAgaWYgKGVy
cm9yKSB7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBl
cnJvcjsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24gPSBlcnJvcjsKICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjIyNyw3ICsyMjI3
LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIHZtX2xhenlMaW5rQwogICAgIAogICAg
IGlmIChzaG91bGRMaW5rKSB7CiAgICAgICAgIEFTU0VSVChjb2RlUHRyKTsKLSAgICAgICAgSklU
Ojpjb21waWxlQ2xvc3VyZUNhbGwoZ2xvYmFsRGF0YSwgY2FsbExpbmtJbmZvLCBjYWxsZXJDb2Rl
QmxvY2ssIGNhbGxlZUNvZGVCbG9jaywgc3RydWN0dXJlLCBleGVjdXRhYmxlLCBjb2RlUHRyKTsK
KyAgICAgICAgSklUOjpjb21waWxlQ2xvc3VyZUNhbGwodm0sIGNhbGxMaW5rSW5mbywgY2FsbGVy
Q29kZUJsb2NrLCBjYWxsZWVDb2RlQmxvY2ssIHN0cnVjdHVyZSwgZXhlY3V0YWJsZSwgY29kZVB0
cik7CiAgICAgICAgIGNhbGxMaW5rSW5mby0+aGFzU2VlbkNsb3N1cmUgPSB0cnVlOwogICAgIH0g
ZWxzZQogICAgICAgICBKSVQ6OmxpbmtTbG93Q2FsbChjYWxsZXJDb2RlQmxvY2ssIGNhbGxMaW5r
SW5mbyk7CkBAIC0yMjUxLDcgKzIyNTEsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVj
dCosIG9wX3B1c2hfCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwog
Ci0gICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUoc3Rh
Y2tGcmFtZS5jYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0
YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2soKSk7CisgICAgSlNBY3RpdmF0aW9uKiBhY3Rp
dmF0aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnZtKCks
IHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCkp
OwogICAgIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5zZXRTY29wZShhY3RpdmF0aW9uKTsKICAgICBy
ZXR1cm4gYWN0aXZhdGlvbjsKIH0KQEAgLTIyNzksNyArMjI3OSw3IEBAIERFRklORV9TVFVCX0ZV
TkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICAgICAgcmV0dXJuVmFsdWUgPSBjYWxsRGF0
YS5uYXRpdmUuZnVuY3Rpb24oY2FsbEZyYW1lKTsKICAgICB9CiAKLSAgICBpZiAoc3RhY2tGcmFt
ZS5nbG9iYWxEYXRhLT5leGNlcHRpb24pCisgICAgaWYgKHN0YWNrRnJhbWUudm0tPmV4Y2VwdGlv
bikKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uRnJvbU9wQ2FsbDxFbmNvZGVkSlNWYWx1
ZT4oc3RhY2tGcmFtZSwgY2FsbEZyYW1lLCBTVFVCX1JFVFVSTl9BRERSRVNTKTsKIAogICAgIHJl
dHVybiByZXR1cm5WYWx1ZTsKQEAgLTIyODksNyArMjI4OSw3IEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3Rh
Y2tGcmFtZSk7CiAKLSAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRl
KCpzdGFja0ZyYW1lLmdsb2JhbERhdGEsIHN0YWNrRnJhbWUuY2FsbEZyYW1lKTsKKyAgICBBcmd1
bWVudHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKCpzdGFja0ZyYW1lLnZtLCBzdGFj
a0ZyYW1lLmNhbGxGcmFtZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGFy
Z3VtZW50cykpOwogfQogCkBAIC0yMjk4LDcgKzIyOTgsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElP
Tih2b2lkLCBvcF90ZWFyX29mZl9hCiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJh
bWUpOwogCiAgICAgQVNTRVJUKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bmVl
ZHNGdWxsU2NvcGVDaGFpbigpKTsKLSAgICBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4oc3RhY2tGcmFt
ZS5hcmdzWzBdLmpzVmFsdWUoKSktPnRlYXJPZmYoKnN0YWNrRnJhbWUuZ2xvYmFsRGF0YSk7Cisg
ICAganNDYXN0PEpTQWN0aXZhdGlvbio+KHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkpLT50
ZWFyT2ZmKCpzdGFja0ZyYW1lLnZtKTsKIH0KIAogREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwg
b3BfdGVhcl9vZmZfYXJndW1lbnRzKQpAQCAtMjMxOSw3ICsyMzE5LDcgQEAgREVGSU5FX1NUVUJf
RlVOQ1RJT04odm9pZCwgb3BfcHJvZmlsZV93aQogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFN
RShzdGFja0ZyYW1lKTsKIAotICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSBzdGFj
a0ZyYW1lLmdsb2JhbERhdGEtPmVuYWJsZWRQcm9maWxlcigpKQorICAgIGlmIChMZWdhY3lQcm9m
aWxlciogcHJvZmlsZXIgPSBzdGFja0ZyYW1lLnZtLT5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAg
ICAgcHJvZmlsZXItPndpbGxFeGVjdXRlKHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1l
LmFyZ3NbMF0uanNWYWx1ZSgpKTsKIH0KIApAQCAtMjMyNyw3ICsyMzI3LDcgQEAgREVGSU5FX1NU
VUJfRlVOQ1RJT04odm9pZCwgb3BfcHJvZmlsZV9kaQogewogICAgIFNUVUJfSU5JVF9TVEFDS19G
UkFNRShzdGFja0ZyYW1lKTsKIAotICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSBz
dGFja0ZyYW1lLmdsb2JhbERhdGEtPmVuYWJsZWRQcm9maWxlcigpKQorICAgIGlmIChMZWdhY3lQ
cm9maWxlciogcHJvZmlsZXIgPSBzdGFja0ZyYW1lLnZtLT5lbmFibGVkUHJvZmlsZXIoKSkKICAg
ICAgICAgcHJvZmlsZXItPmRpZEV4ZWN1dGUoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJh
bWUuYXJnc1swXS5qc1ZhbHVlKCkpOwogfQogCkBAIC0yNDA1LDcgKzI0MDUsNyBAQCBERUZJTkVf
U1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgICAgIHJldHVyblZhbHVlID0g
Y29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oY2FsbEZyYW1lKTsKICAgICB9CiAKLSAgICBp
ZiAoc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5leGNlcHRpb24pCisgICAgaWYgKHN0YWNrRnJhbWUu
dm0tPmV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uRnJvbU9wQ2FsbDxF
bmNvZGVkSlNWYWx1ZT4oc3RhY2tGcmFtZSwgY2FsbEZyYW1lLCBTVFVCX1JFVFVSTl9BRERSRVNT
KTsKIAogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKQEAgLTI0NTgsNyArMjQ1OCw3IEBAIERFRklO
RV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICAgICAgICAgIC8vIEF0dGVt
cHQgdG8gb3B0aW1pemUuCiAgICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0
QXJyYXlNb2RlRm9yU3RydWN0dXJlKG9iamVjdC0+c3RydWN0dXJlKCkpOwogICAgICAgICAgICAg
aWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKSB7Ci0gICAgICAgICAgICAgICAg
SklUOjpjb21waWxlR2V0QnlWYWwoJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBhcnJheU1vZGUp
OworICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZUdldEJ5VmFsKCZjYWxsRnJhbWUtPnZtKCks
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICZieVZhbEluZm8sIFNUVUJfUkVUVVJOX0FERFJFU1Ms
IGFycmF5TW9kZSk7CiAgICAgICAgICAgICAgICAgZGlkT3B0aW1pemUgPSB0cnVlOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CkBAIC0yNTUxLDcgKzI1NTEsNyBAQCBzdGF0aWMgdm9pZCBwdXRC
eVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtCiAgICAgICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3Qo
KSkgewogICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7
CiAgICAgICAgICAgICBpZiAob2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkoaSkpCi0gICAgICAg
ICAgICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHkoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCks
IGksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBvYmplY3QtPnNldEluZGV4UXVpY2tseShjYWxs
RnJhbWUtPnZtKCksIGksIHZhbHVlKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgob2JqZWN0LCBjYWxsRnJhbWUsIGks
IHZhbHVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CiAgICAgICAg
IH0gZWxzZQpAQCAtMjU2MSw3ICsyNTYxLDcgQEAgc3RhdGljIHZvaWQgcHV0QnlWYWwoQ2FsbEZy
YW1lKiBjYWxsRnJhbQogICAgICAgICBiYXNlVmFsdWUucHV0KGNhbGxGcmFtZSwganNDYXN0PE5h
bWVJbnN0YW5jZSo+KHN1YnNjcmlwdC5hc0NlbGwoKSktPnByaXZhdGVOYW1lKCksIHZhbHVlLCBz
bG90KTsKICAgICB9IGVsc2UgewogICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFt
ZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOwotICAg
ICAgICBpZiAoIWNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbikgeyAvLyBEb24ndCBw
dXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4KKyAgICAgICAg
aWYgKCFjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uKSB7IC8vIERvbid0IHB1dCB0byBhbiBvYmpl
Y3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgogICAgICAgICAgICAgUHV0UHJvcGVy
dHlTbG90IHNsb3QoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwogICAg
ICAgICAgICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7
CiAgICAgICAgIH0KQEAgLTI1OTIsNyArMjU5Miw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZv
aWQsIG9wX3B1dF9ieV92YWwKICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCiAg
ICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0
dXJlKG9iamVjdC0+c3RydWN0dXJlKCkpOwogICAgICAgICAgICAgaWYgKGFycmF5TW9kZSAhPSBi
eVZhbEluZm8uYXJyYXlNb2RlKSB7Ci0gICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlW
YWwoJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAmYnlW
YWxJbmZvLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBhcnJheU1vZGUpOworICAgICAgICAgICAgICAg
IEpJVDo6Y29tcGlsZVB1dEJ5VmFsKCZjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCksICZieVZhbEluZm8sIFNUVUJfUkVUVVJOX0FERFJFU1MsIGFycmF5TW9kZSk7CiAgICAg
ICAgICAgICAgICAgZGlkT3B0aW1pemUgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9
CkBAIC0yNzI3LDcgKzI3MjcsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1
ZSwgb3BfCiAgICAgUHJvcGVydHlTbG90IHNsb3Qob2JqZWN0KTsKICAgICBBU1NFUlQoc3RhY2tG
cmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CiAgICAgaWYgKCFv
YmplY3QtPmdldFByb3BlcnR5U2xvdChzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5h
cmdzWzFdLmlkZW50aWZpZXIoKSwgc2xvdCkpIHsKLSAgICAgICAgc3RhY2tGcmFtZS5nbG9iYWxE
YXRhLT5leGNlcHRpb24gPSBjcmVhdGVFcnJvckZvckludmFsaWRHbG9iYWxBc3NpZ25tZW50KHN0
YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigpLnN0cmlu
ZygpKTsKKyAgICAgICAgc3RhY2tGcmFtZS52bS0+ZXhjZXB0aW9uID0gY3JlYXRlRXJyb3JGb3JJ
bnZhbGlkR2xvYmFsQXNzaWdubWVudChzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5h
cmdzWzFdLmlkZW50aWZpZXIoKS5zdHJpbmcoKSk7CiAgICAgICAgIFZNX1RIUk9XX0VYQ0VQVElP
TigpOwogICAgIH0KIApAQCAtMzEwNCwxMSArMzEwNCwxMSBAQCBERUZJTkVfU1RVQl9GVU5DVElP
TihKU09iamVjdCosIG9wX25ld19yCiAKICAgICBSZWdFeHAqIHJlZ0V4cCA9IHN0YWNrRnJhbWUu
YXJnc1swXS5yZWdFeHAoKTsKICAgICBpZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKSB7Ci0gICAgICAg
IHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlU3ludGF4RXJyb3IoY2Fs
bEZyYW1lLCAiSW52YWxpZCBmbGFncyBzdXBwbGllZCB0byBSZWdFeHAgY29uc3RydWN0b3IuIik7
CisgICAgICAgIHN0YWNrRnJhbWUudm0tPmV4Y2VwdGlvbiA9IGNyZWF0ZVN5bnRheEVycm9yKGNh
bGxGcmFtZSwgIkludmFsaWQgZmxhZ3Mgc3VwcGxpZWQgdG8gUmVnRXhwIGNvbnN0cnVjdG9yLiIp
OwogICAgICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKICAgICB9CiAKLSAgICByZXR1cm4gUmVn
RXhwT2JqZWN0OjpjcmVhdGUoKnN0YWNrRnJhbWUuZ2xvYmFsRGF0YSwgc3RhY2tGcmFtZS5jYWxs
RnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCk7CisgICAgcmV0dXJu
IFJlZ0V4cE9iamVjdDo6Y3JlYXRlKCpzdGFja0ZyYW1lLnZtLCBzdGFja0ZyYW1lLmNhbGxGcmFt
ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKTsKIH0KIAogREVGSU5FX1NU
VUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2JpdG9yKQpAQCAtMzE0Myw3ICszMTQzLDcg
QEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2
YWwoY2FsbEZyYW1lKTsKLSAgICBpZiAoc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5leGNlcHRpb24p
CisgICAgaWYgKHN0YWNrRnJhbWUudm0tPmV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIHRocm93
RXhjZXB0aW9uRnJvbU9wQ2FsbDxFbmNvZGVkSlNWYWx1ZT4oc3RhY2tGcmFtZSwgY2FsbEZyYW1l
LCBTVFVCX1JFVFVSTl9BRERSRVNTKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKQEAgLTMxNTIsNyArMzE1Miw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRK
U1ZhbHVlLCBvcF8KIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCBvcF90aHJvdykKIHsKICAg
ICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0gICAgRXhjZXB0aW9uSGFuZGxl
ciBoYW5kbGVyID0gaml0VGhyb3coc3RhY2tGcmFtZS5nbG9iYWxEYXRhLCBzdGFja0ZyYW1lLmNh
bGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKSwgU1RVQl9SRVRVUk5fQUREUkVT
Uyk7CisgICAgRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gaml0VGhyb3coc3RhY2tGcmFtZS52
bSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCksIFNU
VUJfUkVUVVJOX0FERFJFU1MpOwogICAgIFNUVUJfU0VUX1JFVFVSTl9BRERSRVNTKGhhbmRsZXIu
Y2F0Y2hSb3V0aW5lKTsKICAgICByZXR1cm4gaGFuZGxlci5jYWxsRnJhbWU7CiB9CkBAIC0zMjc4
LDcgKzMyNzgsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAg
ICAgSlNWYWx1ZSBiYXNlVmFsID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKIAogICAg
IGlmICghYmFzZVZhbC5pc09iamVjdCgpKSB7Ci0gICAgICAgIHN0YWNrRnJhbWUuZ2xvYmFsRGF0
YS0+ZXhjZXB0aW9uID0gY3JlYXRlSW52YWxpZFBhcmFtRXJyb3Ioc3RhY2tGcmFtZS5jYWxsRnJh
bWUsICJpbiIsIGJhc2VWYWwpOworICAgICAgICBzdGFja0ZyYW1lLnZtLT5leGNlcHRpb24gPSBj
cmVhdGVJbnZhbGlkUGFyYW1FcnJvcihzdGFja0ZyYW1lLmNhbGxGcmFtZSwgImluIiwgYmFzZVZh
bCk7CiAgICAgICAgIFZNX1RIUk9XX0VYQ0VQVElPTigpOwogICAgIH0KIApAQCAtMzQwMCw3ICsz
NDAwLDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIH0K
IAogICAgIGlmICghcmVzdWx0ICYmIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9k
ZSgpKQotICAgICAgICBzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVR5
cGVFcnJvcihzdGFja0ZyYW1lLmNhbGxGcmFtZSwgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHku
Iik7CisgICAgICAgIHN0YWNrRnJhbWUudm0tPmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihz
dGFja0ZyYW1lLmNhbGxGcmFtZSwgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7CiAKICAg
ICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKHJlc3VsdCkpOwpAQCAtMzQyNCw5ICszNDI0LDkgQEAgREVGSU5FX1NUVUJf
RlVOQ1RJT04odm9pZCwgb3BfcHV0X2dldHRlcgogICAgIEFTU0VSVChnZXR0ZXIuaXNPYmplY3Qo
KSB8fCBzZXR0ZXIuaXNPYmplY3QoKSk7CiAKICAgICBpZiAoIWdldHRlci5pc1VuZGVmaW5lZCgp
KQotICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBh
c09iamVjdChnZXR0ZXIpKTsKKyAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihjYWxsRnJhbWUt
PnZtKCksIGFzT2JqZWN0KGdldHRlcikpOwogICAgIGlmICghc2V0dGVyLmlzVW5kZWZpbmVkKCkp
Ci0gICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGFz
T2JqZWN0KHNldHRlcikpOworICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0dGVyKGNhbGxGcmFtZS0+
dm0oKSwgYXNPYmplY3Qoc2V0dGVyKSk7CiAgICAgYmFzZU9iai0+cHV0RGlyZWN0QWNjZXNzb3Io
Y2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigpLCBhY2Nlc3NvciwgQWNj
ZXNzb3IpOwogfQogCkBAIC0zNDM3LDkgKzM0MzcsOSBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2
b2lkLCBvcF90aHJvd19zdGF0CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1l
LmNhbGxGcmFtZTsKICAgICBTdHJpbmcgbWVzc2FnZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1Zh
bHVlKCkudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKTsKICAgICBpZiAoc3Rh
Y2tGcmFtZS5hcmdzWzFdLmFzSW50MzIpCi0gICAgICAgIHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+
ZXhjZXB0aW9uID0gY3JlYXRlUmVmZXJlbmNlRXJyb3IoY2FsbEZyYW1lLCBtZXNzYWdlKTsKKyAg
ICAgICAgc3RhY2tGcmFtZS52bS0+ZXhjZXB0aW9uID0gY3JlYXRlUmVmZXJlbmNlRXJyb3IoY2Fs
bEZyYW1lLCBtZXNzYWdlKTsKICAgICBlbHNlCi0gICAgICAgIHN0YWNrRnJhbWUuZ2xvYmFsRGF0
YS0+ZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNhbGxGcmFtZSwgbWVzc2FnZSk7CisgICAg
ICAgIHN0YWNrRnJhbWUudm0tPmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjYWxsRnJhbWUs
IG1lc3NhZ2UpOwogICAgIFZNX1RIUk9XX0VYQ0VQVElPTl9BVF9FTkQoKTsKIH0KIApAQCAtMzQ1
NCwxNCArMzQ1NCwxNCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9kZWJ1ZykKICAg
ICBpbnQgbGFzdExpbmUgPSBzdGFja0ZyYW1lLmFyZ3NbMl0uaW50MzIoKTsKICAgICBpbnQgY29s
dW1uID0gc3RhY2tGcmFtZS5hcmdzWzNdLmludDMyKCk7CiAKLSAgICBzdGFja0ZyYW1lLmdsb2Jh
bERhdGEtPmludGVycHJldGVyLT5kZWJ1ZyhjYWxsRnJhbWUsIHN0YXRpY19jYXN0PERlYnVnSG9v
a0lEPihkZWJ1Z0hvb2tJRCksIGZpcnN0TGluZSwgbGFzdExpbmUsIGNvbHVtbik7CisgICAgc3Rh
Y2tGcmFtZS52bS0+aW50ZXJwcmV0ZXItPmRlYnVnKGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8RGVi
dWdIb29rSUQ+KGRlYnVnSG9va0lEKSwgZmlyc3RMaW5lLCBsYXN0TGluZSwgY29sdW1uKTsKIH0K
IAogREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIHZtX3Rocm93KQogewogICAgIFNUVUJfSU5J
VF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEg
PSBzdGFja0ZyYW1lLmdsb2JhbERhdGE7Ci0gICAgRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0g
aml0VGhyb3coZ2xvYmFsRGF0YSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUsIGdsb2JhbERhdGEtPmV4
Y2VwdGlvbiwgZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uTG9jYXRpb24pOworICAgIFZNKiB2bSA9IHN0
YWNrRnJhbWUudm07CisgICAgRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gaml0VGhyb3codm0s
IHN0YWNrRnJhbWUuY2FsbEZyYW1lLCB2bS0+ZXhjZXB0aW9uLCB2bS0+ZXhjZXB0aW9uTG9jYXRp
b24pOwogICAgIFNUVUJfU0VUX1JFVFVSTl9BRERSRVNTKGhhbmRsZXIuY2F0Y2hSb3V0aW5lKTsK
ICAgICByZXR1cm4gaGFuZGxlci5jYWxsRnJhbWU7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3Mg
Q29kZUJsb2NrOwogY2xhc3MgRXhlY3V0YWJsZVBvb2w7CiBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFi
bGU7CiBjbGFzcyBJZGVudGlmaWVyOwotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiBj
bGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNzIEpTT2JqZWN0OwogY2xhc3MgSlNQcm9wZXJ0eU5h
bWVJdGVyYXRvcjsKQEAgLTk4LDcgKzk4LDcgQEAgc3RydWN0IEpJVFN0YWNrRnJhbWUgewogICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lOwogICAgIHZvaWQqIHVudXNlZDE7CiAgICAgdm9pZCogdW51
c2VkMjsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGE7CisgICAgVk0qIHZtOwogCiAgICAg
dm9pZCogc2F2ZWRSQlg7CiAgICAgdm9pZCogc2F2ZWRSMTU7CkBAIC0xMzQsNyArMTM0LDcgQEAg
c3RydWN0IEpJVFN0YWNrRnJhbWUgewogCiAgICAgLy8gUGFzc2VkIG9uIHRoZSBzdGFjawogICAg
IHZvaWQqIHVudXNlZDI7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhOworICAgIFZNKiB2
bTsKIAogICAgIC8vIFdoZW4gSklUIGNvZGUgbWFrZXMgYSBjYWxsLCBpdCBwdXNoZXMgaXRzIHJl
dHVybiBhZGRyZXNzIGp1c3QgYmVsb3cgdGhlIHJlc3Qgb2YgdGhlIHN0YWNrLgogICAgIFJldHVy
bkFkZHJlc3NQdHIqIHJldHVybkFkZHJlc3NTbG90KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxSZXR1cm5BZGRyZXNzUHRyKj4odGhpcykgLSAxOyB9CkBAIC0xNjIsNyArMTYyLDcgQEAgc3Ry
dWN0IEpJVFN0YWNrRnJhbWUgewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lOwogICAgIHZvaWQq
IHVudXNlZDE7CiAgICAgdm9pZCogdW51c2VkMjsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGE7CisgICAgVk0qIHZtOwogICAgICAgICAKICAgICAvLyBXaGVuIEpJVCBjb2RlIG1ha2VzIGEg
Y2FsbCwgaXQgcHVzaGVzIGl0cyByZXR1cm4gYWRkcmVzcyBqdXN0IGJlbG93IHRoZSByZXN0IG9m
IHRoZSBzdGFjay4KICAgICBSZXR1cm5BZGRyZXNzUHRyKiByZXR1cm5BZGRyZXNzU2xvdCgpIHsg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UmV0dXJuQWRkcmVzc1B0cio+KHRoaXMpIC0gMTsgfQpA
QCAtMTkzLDcgKzE5Myw3IEBAIHN0cnVjdCBKSVRTdGFja0ZyYW1lIHsKIAogICAgIC8vIFRoZXNl
IGFyZ3VtZW50cyBwYXNzZWQgb24gdGhlIHN0YWNrLgogICAgIHZvaWQqIHVudXNlZDE7Ci0gICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhOworICAgIFZNKiB2bTsKICAgICAgICAgCiAgICAgUmV0
dXJuQWRkcmVzc1B0ciogcmV0dXJuQWRkcmVzc1Nsb3QoKSB7IHJldHVybiAmdGh1bmtSZXR1cm5B
ZGRyZXNzOyB9CiB9OwpAQCAtMjIzLDcgKzIyMyw3IEBAIHN0cnVjdCBKSVRTdGFja0ZyYW1lIHsK
IAogICAgIC8vIFRoZXNlIGFyZ3VtZW50cyBwYXNzZWQgb24gdGhlIHN0YWNrLgogICAgIHZvaWQq
IHVudXNlZDI7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhOworICAgIFZNKiB2bTsKIAog
ICAgIC8vIFdoZW4gSklUIGNvZGUgbWFrZXMgYSBjYWxsLCBpdCBwdXNoZXMgaXRzIHJldHVybiBh
ZGRyZXNzIGp1c3QgYmVsb3cgdGhlIHJlc3Qgb2YgdGhlIHN0YWNrLgogICAgIFJldHVybkFkZHJl
c3NQdHIqIHJldHVybkFkZHJlc3NTbG90KCkgeyByZXR1cm4gJnRodW5rUmV0dXJuQWRkcmVzczsg
fQpAQCAtMjU3LDcgKzI1Nyw3IEBAIHN0cnVjdCBKSVRTdGFja0ZyYW1lIHsKIAogICAgIC8vIFRo
ZXNlIGFyZ3VtZW50cyBwYXNzZWQgb24gdGhlIHN0YWNrLgogICAgIHZvaWQqIHVudXNlZDI7Ci0g
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhOworICAgIFZNKiB2bTsKIAogICAgIFJldHVybkFk
ZHJlc3NQdHIqIHJldHVybkFkZHJlc3NTbG90KCkgeyByZXR1cm4gJnRodW5rUmV0dXJuQWRkcmVz
czsgfQogfTsKQEAgLTI3OCw3ICsyNzgsNyBAQCBzdHJ1Y3QgSklUU3RhY2tGcmFtZSB7CiAgICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWU7CiAgICAgSlNWYWx1ZSogZXhjZXB0aW9uOwogICAgIHZvaWQq
IHVudXNlZDE7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhOworICAgIFZNKiB2bTsKIAog
ICAgIFJldHVybkFkZHJlc3NQdHIqIHJldHVybkFkZHJlc3NTbG90KCkgeyByZXR1cm4gJnRodW5r
UmV0dXJuQWRkcmVzczsgfQogfTsKQEAgLTMwNyw3ICszMDcsNyBAQCBzdHJ1Y3QgSklUU3RhY2tG
cmFtZSB7CiAKIGV4dGVybiAiQyIgdm9pZCBjdGlWTVRocm93VHJhbXBvbGluZSgpOwogZXh0ZXJu
ICJDIiB2b2lkIGN0aU9wVGhyb3dOb3RDYXVnaHQoKTsKLWV4dGVybiAiQyIgRW5jb2RlZEpTVmFs
dWUgY3RpVHJhbXBvbGluZSh2b2lkKiBjb2RlLCBKU1N0YWNrKiwgQ2FsbEZyYW1lKiwgdm9pZCog
Lyp1bnVzZWQxKi8sIHZvaWQqIC8qdW51c2VkMiovLCBKU0dsb2JhbERhdGEqKTsKK2V4dGVybiAi
QyIgRW5jb2RlZEpTVmFsdWUgY3RpVHJhbXBvbGluZSh2b2lkKiBjb2RlLCBKU1N0YWNrKiwgQ2Fs
bEZyYW1lKiwgdm9pZCogLyp1bnVzZWQxKi8sIHZvaWQqIC8qdW51c2VkMiovLCBWTSopOwogI2lm
IEVOQUJMRShERkdfSklUKQogZXh0ZXJuICJDIiB2b2lkIGN0aVRyYW1wb2xpbmVFbmQoKTsKIApA
QCAtMzE4LDcgKzMxOCw3IEBAIGlubGluZSBib29sIHJldHVybkFkZHJlc3NJc0luQ3RpVHJhbXBv
bGkKIH0KICNlbmRpZgogCi12b2lkIHBlcmZvcm1QbGF0Zm9ybVNwZWNpZmljSklUQXNzZXJ0aW9u
cyhKU0dsb2JhbERhdGEqKTsKK3ZvaWQgcGVyZm9ybVBsYXRmb3JtU3BlY2lmaWNKSVRBc3NlcnRp
b25zKFZNKik7CiAKIGV4dGVybiAiQyIgewogRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29w
X2FkZChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKQEAgLTQ0OCw3ICs0NDgs
NyBAQCB2b2lkKiBKSVRfU1RVQiBjdGlfdm1fdGhyb3coU1RVQl9BUkdTX0RFCiAjZWxpZiBFTkFC
TEUoTExJTlRfQ19MT09QKQogCiBzdHJ1Y3QgSklUU3RhY2tGcmFtZSB7Ci0gICAgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhOworICAgIFZNKiB2bTsKIH07CiAKICNlbmRpZiAvLyBFTkFCTEUoTExJ
TlRfQ19MT09QKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJFeGVjdXRh
YmxlLmgiCiAjaW5jbHVkZSAiSklULmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5j
bHVkZSAiVk0uaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpA
QCAtNDQsNTYgKzQ0LDU2IEBAIEpJVFRodW5rczo6fkpJVFRodW5rcygpCiB7CiB9CiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBKSVRUaHVua3M6OmN0aU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIEpJVFRodW5rczo6Y3RpTmF0aXZlQ2Fs
bChWTSogdm0pCiB7CiAjaWYgRU5BQkxFKExMSU5UKQotICAgIGlmICghZ2xvYmFsRGF0YS0+Y2Fu
VXNlSklUKCkpCisgICAgaWYgKCF2bS0+Y2FuVXNlSklUKCkpCiAgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9uYXRpdmVfY2FsbF90
cmFtcG9saW5lKTsKICNlbmRpZgotICAgIHJldHVybiBjdGlTdHViKGdsb2JhbERhdGEsIG5hdGl2
ZUNhbGxHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICByZXR1cm4gY3RpU3R1Yih2bSwgbmF0aXZlQ2Fs
bEdlbmVyYXRvcikuY29kZSgpOwogfQotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIEpJVFRodW5rczo6
Y3RpTmF0aXZlQ29uc3RydWN0KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK01hY3JvQXNzZW1i
bGVyQ29kZVB0ciBKSVRUaHVua3M6OmN0aU5hdGl2ZUNvbnN0cnVjdChWTSogdm0pCiB7CiAjaWYg
RU5BQkxFKExMSU5UKQotICAgIGlmICghZ2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkpCisgICAgaWYg
KCF2bS0+Y2FuVXNlSklUKCkpCiAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6
OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmUpOwog
I2VuZGlmCi0gICAgcmV0dXJuIGN0aVN0dWIoZ2xvYmFsRGF0YSwgbmF0aXZlQ29uc3RydWN0R2Vu
ZXJhdG9yKS5jb2RlKCk7CisgICAgcmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZUNvbnN0cnVjdEdl
bmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgSklUVGh1bmtzOjpj
dGlTdHViKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9y
KQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIEpJVFRodW5rczo6Y3RpU3R1YihWTSogdm0sIFRodW5r
R2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKICAgICBDVElTdHViTWFwOjpBZGRSZXN1bHQgZW50cnkg
PSBtX2N0aVN0dWJNYXAuYWRkKGdlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCkpOwog
ICAgIGlmIChlbnRyeS5pc05ld0VudHJ5KQotICAgICAgICBlbnRyeS5pdGVyYXRvci0+dmFsdWUg
PSBnZW5lcmF0b3IoZ2xvYmFsRGF0YSk7CisgICAgICAgIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZSA9
IGdlbmVyYXRvcih2bSk7CiAgICAgcmV0dXJuIGVudHJ5Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAot
TmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNv
bnN0cnVjdG9yKQorTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHVi
KFZNKiB2bSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVj
dG9yKQogewogICAgIGlmIChOYXRpdmVFeGVjdXRhYmxlKiBuYXRpdmVFeGVjdXRhYmxlID0gbV9o
b3N0RnVuY3Rpb25TdHViTWFwLT5nZXQoZnVuY3Rpb24pKQogICAgICAgICByZXR1cm4gbmF0aXZl
RXhlY3V0YWJsZTsKIAotICAgIE5hdGl2ZUV4ZWN1dGFibGUqIG5hdGl2ZUV4ZWN1dGFibGUgPSBO
YXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIEpJVDo6Y29tcGlsZUNUSU5hdGl2
ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuY3Rpb24pLCBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KGdsb2JhbERh
dGEpKSwgY29uc3RydWN0b3IsIE5vSW50cmluc2ljKTsKKyAgICBOYXRpdmVFeGVjdXRhYmxlKiBu
YXRpdmVFeGVjdXRhYmxlID0gTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCp2bSwgSklUOjpjb21w
aWxlQ1RJTmF0aXZlQ2FsbCh2bSwgZnVuY3Rpb24pLCBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KHZtKSks
IGNvbnN0cnVjdG9yLCBOb0ludHJpbnNpYyk7CiAgICAgd2Vha0FkZCgqbV9ob3N0RnVuY3Rpb25T
dHViTWFwLCBmdW5jdGlvbiwgUGFzc1dlYWs8TmF0aXZlRXhlY3V0YWJsZT4obmF0aXZlRXhlY3V0
YWJsZSkpOwogICAgIHJldHVybiBuYXRpdmVFeGVjdXRhYmxlOwogfQogCi1OYXRpdmVFeGVjdXRh
YmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yLCBJbnRy
aW5zaWMgaW50cmluc2ljKQorTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rp
b25TdHViKFZNKiB2bSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRodW5rR2VuZXJhdG9yIGdl
bmVyYXRvciwgSW50cmluc2ljIGludHJpbnNpYykKIHsKICAgICBpZiAoTmF0aXZlRXhlY3V0YWJs
ZSogbmF0aXZlRXhlY3V0YWJsZSA9IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcC0+Z2V0KGZ1bmN0aW9u
KSkKICAgICAgICAgcmV0dXJuIG5hdGl2ZUV4ZWN1dGFibGU7CiAKICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgY29kZTsKICAgICBpZiAoZ2VuZXJhdG9yKSB7Ci0gICAgICAgIGlmIChnbG9iYWxE
YXRhLT5jYW5Vc2VKSVQoKSkKLSAgICAgICAgICAgIGNvZGUgPSBnZW5lcmF0b3IoZ2xvYmFsRGF0
YSk7CisgICAgICAgIGlmICh2bS0+Y2FuVXNlSklUKCkpCisgICAgICAgICAgICBjb2RlID0gZ2Vu
ZXJhdG9yKHZtKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29kZSA9IE1hY3JvQXNzZW1i
bGVyQ29kZVJlZigpOwogICAgIH0gZWxzZQotICAgICAgICBjb2RlID0gSklUOjpjb21waWxlQ1RJ
TmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBmdW5jdGlvbik7CisgICAgICAgIGNvZGUgPSBKSVQ6OmNv
bXBpbGVDVElOYXRpdmVDYWxsKHZtLCBmdW5jdGlvbik7CiAKLSAgICBOYXRpdmVFeGVjdXRhYmxl
KiBuYXRpdmVFeGVjdXRhYmxlID0gTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxEYXRh
LCBjb2RlLCBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdl
ZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KGdsb2JhbERhdGEpKSwgY2FsbEhvc3RGdW5jdGlv
bkFzQ29uc3RydWN0b3IsIGludHJpbnNpYyk7CisgICAgTmF0aXZlRXhlY3V0YWJsZSogbmF0aXZl
RXhlY3V0YWJsZSA9IE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqdm0sIGNvZGUsIGZ1bmN0aW9u
LCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRp
dmVDb25zdHJ1Y3Qodm0pKSwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsIGludHJpbnNp
Yyk7CiAgICAgd2Vha0FkZCgqbV9ob3N0RnVuY3Rpb25TdHViTWFwLCBmdW5jdGlvbiwgUGFzc1dl
YWs8TmF0aXZlRXhlY3V0YWJsZT4obmF0aXZlRXhlY3V0YWJsZSkpOwogICAgIHJldHVybiBuYXRp
dmVFeGVjdXRhYmxlOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVu
a3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5o
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5r
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIGNsYXNzIE5hdGl2ZUV4ZWN1dGFibGU7
CiAKIGNsYXNzIEpJVFRodW5rcyB7CkBAIC01MSwxMyArNTEsMTMgQEAgcHVibGljOgogICAgIEpJ
VFRodW5rcygpOwogICAgIH5KSVRUaHVua3MoKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjdGlOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjdGlOYXRpdmVDb25zdHJ1Y3QoSlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGN0aU5hdGl2ZUNhbGwoVk0qKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3Rp
TmF0aXZlQ29uc3RydWN0KFZNKik7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY3RpU3R1
YihKU0dsb2JhbERhdGEqLCBUaHVua0dlbmVyYXRvcik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGN0aVN0dWIoVk0qLCBUaHVua0dlbmVyYXRvcik7CiAKLSAgICBOYXRpdmVFeGVjdXRhYmxl
KiBob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSosIE5hdGl2ZUZ1bmN0aW9uLCBOYXRpdmVG
dW5jdGlvbiBjb25zdHJ1Y3Rvcik7Ci0gICAgTmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9u
U3R1YihKU0dsb2JhbERhdGEqLCBOYXRpdmVGdW5jdGlvbiwgVGh1bmtHZW5lcmF0b3IsIEludHJp
bnNpYyk7CisgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihWTSosIE5hdGl2
ZUZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3Rvcik7CisgICAgTmF0aXZlRXhlY3V0
YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihWTSosIE5hdGl2ZUZ1bmN0aW9uLCBUaHVua0dlbmVyYXRv
ciwgSW50cmluc2ljKTsKIAogICAgIHZvaWQgY2xlYXJIb3N0RnVuY3Rpb25TdHVicygpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFycmllci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV3JpdGVCYXJyaWVyLmgJKHJldmlz
aW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV3JpdGVCYXJyaWVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBj
bGFzcyBKU0NlbGw7Ci1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIAogLy8gTmVlZHMg
dG8gYmUgZXZlbiB0byBhcHBlYXNlIHNvbWUgb2YgdGhlIGJhY2tlbmRzLgogI2RlZmluZSBKSVRX
cml0ZUJhcnJpZXJGbGFnICgodm9pZCopMikKQEAgLTc3LDcgKzc3LDcgQEAgcHJvdGVjdGVkOgog
ICAgIHsKICAgICB9CiAKLSAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmLCBDb2RlTG9jYXRpb25E
YXRhTGFiZWxQdHIgbG9jYXRpb24sIEpTQ2VsbCogb3duZXIsIEpTQ2VsbCogdmFsdWUpCisgICAg
dm9pZCBzZXQoVk0mLCBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgbG9jYXRpb24sIEpTQ2VsbCog
b3duZXIsIEpTQ2VsbCogdmFsdWUpCiAgICAgewogICAgICAgICBIZWFwOjp3cml0ZUJhcnJpZXIo
b3duZXIsIHZhbHVlKTsKICAgICAgICAgbV9sb2NhdGlvbiA9IGxvY2F0aW9uOwpAQCAtMTE2LDE1
ICsxMTYsMTUgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIHNldChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBsb2NhdGlvbiwgSlND
ZWxsKiBvd25lciwgVCogdmFsdWUpCisgICAgdm9pZCBzZXQoVk0mIHZtLCBDb2RlTG9jYXRpb25E
YXRhTGFiZWxQdHIgbG9jYXRpb24sIEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQogICAgIHsKICAg
ICAgICAgdmFsaWRhdGVDZWxsKG93bmVyKTsKICAgICAgICAgdmFsaWRhdGVDZWxsKHZhbHVlKTsK
LSAgICAgICAgSklUV3JpdGVCYXJyaWVyQmFzZTo6c2V0KGdsb2JhbERhdGEsIGxvY2F0aW9uLCBv
d25lciwgdmFsdWUpOworICAgICAgICBKSVRXcml0ZUJhcnJpZXJCYXNlOjpzZXQodm0sIGxvY2F0
aW9uLCBvd25lciwgdmFsdWUpOwogICAgIH0KLSAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQorICAgIHZvaWQgc2V0KFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgVCogdmFsdWUpCiAgICAgewotICAgICAgICBzZXQoZ2xvYmFsRGF0YSwg
bG9jYXRpb24oKSwgb3duZXIsIHZhbHVlKTsKKyAgICAgICAgc2V0KHZtLCBsb2NhdGlvbigpLCBv
d25lciwgdmFsdWUpOwogICAgIH0KICAgICBUKiBnZXQoKSBjb25zdAogICAgIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCShyZXZp
c2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1
bmtKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTAgKzU1LDEwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoZW1pdExvYWRKU0NlbGwoc3JjLCBkc3Qp
KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBsb2FkSlNTdHJpbmdBcmd1bWVu
dChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGludCBhcmd1bWVudCwgUmVnaXN0ZXJJRCBkc3Qp
CisgICAgICAgIHZvaWQgbG9hZEpTU3RyaW5nQXJndW1lbnQoVk0mIHZtLCBpbnQgYXJndW1lbnQs
IFJlZ2lzdGVySUQgZHN0KQogICAgICAgICB7CiAgICAgICAgICAgICBsb2FkQ2VsbEFyZ3VtZW50
KGFyZ3VtZW50LCBkc3QpOwotICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoYnJhbmNoUHRy
KE5vdEVxdWFsLCBBZGRyZXNzKGRzdCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0
ZWRJbW1QdHIoZ2xvYmFsRGF0YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAg
ICBtX2ZhaWx1cmVzLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MoZHN0LCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cih2bS5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgbG9hZEludDMyQXJn
dW1lbnQoaW50IGFyZ3VtZW50LCBSZWdpc3RlcklEIGRzdCwgSnVtcCYgZmFpbFRhcmdldCkKQEAg
LTEzMCw5ICsxMzAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldCgpOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZmluYWxpemUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZmFsbGJhY2ss
IGNvbnN0IGNoYXIqIHRodW5rS2luZCkKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZp
bmFsaXplKFZNJiB2bSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZhbGxiYWNrLCBjb25zdCBjaGFy
KiB0aHVua0tpbmQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoZ2xvYmFsRGF0YSwgdGhpcywgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICAgICAgICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIodm0sIHRoaXMsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKG1fZmFpbHVyZXMsIENvZGVMb2NhdGlvbkxhYmVsKGZhbGxiYWNr
KSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYWxscy5zaXplKCk7
IGkrKykKICAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNbaV0uZmlyc3Qs
IG1fY2FsbHNbaV0uc2Vjb25kKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ro
dW5rR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAgKzMxLDEwIEBA
CiAjaWYgRU5BQkxFKEpJVCkKIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBKU0dsb2JhbERhdGE7
CitjbGFzcyBWTTsKIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKIAotdHlwZWRlZiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgKCpUaHVua0dlbmVyYXRvcikoSlNHbG9iYWxEYXRhKik7Cit0eXBl
ZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiAoKlRodW5rR2VuZXJhdG9yKShWTSopOwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgZ2Vu
ZXJhdGVTbG93Q2FzZUZvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTSW50ZXJmYWNlSklU
JiBqaXQpCitzdGF0aWMgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgZ2VuZXJhdGVTbG93Q2FzZUZvcihW
TSogdm0sIEpTSW50ZXJmYWNlSklUJiBqaXQpCiB7CiAgICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZy
YW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIp
OwogICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpTY29wZUNo
YWluLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIsIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CkBAIC00
OCw3ICs0OCw3IEBAIHN0YXRpYyBKU0ludGVyZmFjZUpJVDo6Q2FsbCBnZW5lcmF0ZVNsb3cKICAg
ICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEpTSW50ZXJmYWNlSklUOjpyZWdUMywgSlNT
dGFjazo6UmV0dXJuUEMpOwogICAgIGppdC5lbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFk
ZXIoMCwgSlNTdGFjazo6Q29kZUJsb2NrKTsKIAotICAgIGppdC5zdG9yZVB0cihKU0ludGVyZmFj
ZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZnbG9iYWxEYXRhLT50b3BDYWxsRnJhbWUpOworICAg
IGppdC5zdG9yZVB0cihKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS0+dG9w
Q2FsbEZyYW1lKTsKICAgICBqaXQucmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CiAgICAgSlNJ
bnRlcmZhY2VKSVQ6OkNhbGwgY2FsbE5vdEpTRnVuY3Rpb24gPSBqaXQuY2FsbCgpOwogICAgIGpp
dC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgSlNJ
bnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAgLTU4LDcgKzU4LDcgQEAgc3RhdGlj
IEpTSW50ZXJmYWNlSklUOjpDYWxsIGdlbmVyYXRlU2xvdwogICAgIHJldHVybiBjYWxsTm90SlNG
dW5jdGlvbjsKIH0KIAotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rRm9yR2VuZXJh
dG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRnVuY3Rpb25QdHIgbGF6eUxpbmssIEZ1bmN0
aW9uUHRyIG5vdEpTRnVuY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUpCitzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGxpbmtGb3JHZW5lcmF0b3IoVk0qIHZtLCBGdW5jdGlvblB0ciBsYXp5TGlu
aywgRnVuY3Rpb25QdHIgbm90SlNGdW5jdGlvbiwgY29uc3QgY2hhciogbmFtZSkKIHsKICAgICBK
U0ludGVyZmFjZUpJVCBqaXQ7CiAgICAgCkBAIC04MCwzOCArODAsMzggQEAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBsaW5rRm9yR2VuZQogICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJl
c3NBZnRlckNhbGwoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzKTsKICAgICBqaXQuZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKEpTSW50ZXJmYWNlSklUOjpyZWdUMywgSlNTdGFjazo6UmV0dXJuUEMpOwog
ICAgIAotICAgIGppdC5zdG9yZVB0cihKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIs
ICZnbG9iYWxEYXRhLT50b3BDYWxsRnJhbWUpOworICAgIGppdC5zdG9yZVB0cihKU0ludGVyZmFj
ZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsKICAgICBqaXQucmVz
dG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CiAgICAgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgY2FsbExh
enlMaW5rID0gaml0LmNhbGwoKTsKICAgICBqaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVS
ZXR1cm4oSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzKTsKICAgICBqaXQuanVtcChKU0ludGVyZmFjZUpJ
VDo6cmVnVDApOwogICAgIAogICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7Ci0gICAgSlNJbnRlcmZh
Y2VKSVQ6OkNhbGwgY2FsbE5vdEpTRnVuY3Rpb24gPSBnZW5lcmF0ZVNsb3dDYXNlRm9yKGdsb2Jh
bERhdGEsIGppdCk7CisgICAgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgY2FsbE5vdEpTRnVuY3Rpb24g
PSBnZW5lcmF0ZVNsb3dDYXNlRm9yKHZtLCBqaXQpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcGF0Y2hC
dWZmZXIubGluayhjYWxsTGF6eUxpbmssIGxhenlMaW5rKTsKICAgICBwYXRjaEJ1ZmZlci5saW5r
KGNhbGxOb3RKU0Z1bmN0aW9uLCBub3RKU0Z1bmN0aW9uKTsKICAgICAKICAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJsaW5rICVzIHRyYW1wb2xpbmUiLCBuYW1lKSk7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbEdlbmVyYXRvcihKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxHZW5lcmF0b3IoVk0q
IHZtKQogewotICAgIHJldHVybiBsaW5rRm9yR2VuZXJhdG9yKGdsb2JhbERhdGEsIEZ1bmN0aW9u
UHRyKGN0aV92bV9sYXp5TGlua0NhbGwpLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9Ob3RKU0Z1
bmN0aW9uKSwgImNhbGwiKTsKKyAgICByZXR1cm4gbGlua0ZvckdlbmVyYXRvcih2bSwgRnVuY3Rp
b25QdHIoY3RpX3ZtX2xhenlMaW5rQ2FsbCksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX05vdEpT
RnVuY3Rpb24pLCAiY2FsbCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NvbnN0
cnVjdEdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbGlua0NvbnN0cnVjdEdlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIGxpbmtG
b3JHZW5lcmF0b3IoZ2xvYmFsRGF0YSwgRnVuY3Rpb25QdHIoY3RpX3ZtX2xhenlMaW5rQ29uc3Ry
dWN0KSwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdCksICJjb25z
dHJ1Y3QiKTsKKyAgICByZXR1cm4gbGlua0ZvckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIoY3Rp
X3ZtX2xhenlMaW5rQ29uc3RydWN0KSwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9Ob3RK
U0NvbnN0cnVjdCksICJjb25zdHJ1Y3QiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxp
bmtDbG9zdXJlQ2FsbEdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICBy
ZXR1cm4gbGlua0ZvckdlbmVyYXRvcihnbG9iYWxEYXRhLCBGdW5jdGlvblB0cihjdGlfdm1fbGF6
eUxpbmtDbG9zdXJlQ2FsbCksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24p
LCAiY2xvc3VyZSBjYWxsIik7CisgICAgcmV0dXJuIGxpbmtGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0
aW9uUHRyKGN0aV92bV9sYXp5TGlua0Nsb3N1cmVDYWxsKSwgRnVuY3Rpb25QdHIoY3RpX29wX2Nh
bGxfTm90SlNGdW5jdGlvbiksICJjbG9zdXJlIGNhbGwiKTsKIH0KIAotc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgRnVuY3Rpb25QdHIgY29tcGlsZSwgRnVuY3Rpb25QdHIgbm90SlNGdW5jdGlvbiwgY29uc3Qg
Y2hhciogbmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yR2VuZXJhdG9yKFZNKiB2bSwgRnVuY3Rpb25QdHIgY29t
cGlsZSwgRnVuY3Rpb25QdHIgbm90SlNGdW5jdGlvbiwgY29uc3QgY2hhciogbmFtZSwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIEpTSW50ZXJmYWNlSklUIGppdDsKICAgICAK
QEAgLTEzMSw3ICsxMzEsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxG
b3JHCiAgICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VK
SVQ6OnJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksIEpTSW50ZXJmYWNl
SklUOjpyZWdUMik7CiAgICAgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgaGFzQ29kZUJsb2NrMSA9IGpp
dC5icmFuY2gzMihKU0ludGVyZmFjZUpJVDo6R3JlYXRlclRoYW5PckVxdWFsLCBKU0ludGVyZmFj
ZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDIsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
b2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzRm9yKGtpbmQpKSwgSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJ
bW0zMigwKSk7CiAgICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChKU0ludGVy
ZmFjZUpJVDo6cmVnVDMpOwotICAgIGppdC5zdG9yZVB0cihKU0ludGVyZmFjZUpJVDo6Y2FsbEZy
YW1lUmVnaXN0ZXIsICZnbG9iYWxEYXRhLT50b3BDYWxsRnJhbWUpOworICAgIGppdC5zdG9yZVB0
cihKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsK
ICAgICBqaXQucmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CiAgICAgSlNJbnRlcmZhY2VKSVQ6
OkNhbGwgY2FsbENvbXBpbGUgPSBqaXQuY2FsbCgpOwogICAgIGppdC5yZXN0b3JlUmV0dXJuQWRk
cmVzc0JlZm9yZVJldHVybihKU0ludGVyZmFjZUpJVDo6cmVnVDMpOwpAQCAtMTQyLDI2ICsxNDIs
MjYgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yRwogICAgIGppdC5q
dW1wKEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7CiAgICAgCiAgICAgc2xvd0Nhc2UubGluaygmaml0
KTsKLSAgICBKU0ludGVyZmFjZUpJVDo6Q2FsbCBjYWxsTm90SlNGdW5jdGlvbiA9IGdlbmVyYXRl
U2xvd0Nhc2VGb3IoZ2xvYmFsRGF0YSwgaml0KTsKKyAgICBKU0ludGVyZmFjZUpJVDo6Q2FsbCBj
YWxsTm90SlNGdW5jdGlvbiA9IGdlbmVyYXRlU2xvd0Nhc2VGb3Iodm0sIGppdCk7CiAgICAgCi0g
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgR0xPQkFMX1RIVU5L
X0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5L
X0lEKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxDb21waWxlLCBjb21waWxlKTsKICAgICBw
YXRjaEJ1ZmZlci5saW5rKGNhbGxOb3RKU0Z1bmN0aW9uLCBub3RKU0Z1bmN0aW9uKTsKICAgICAK
ICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJ2aXJ0dWFsICVzIHRyYW1w
b2xpbmUiLCBuYW1lKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbEdl
bmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
dmlydHVhbENhbGxHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiB2aXJ0dWFsRm9yR2Vu
ZXJhdG9yKGdsb2JhbERhdGEsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX2ppdENvbXBpbGUpLCBG
dW5jdGlvblB0cihjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKSwgImNhbGwiLCBDb2RlRm9yQ2Fs
bCk7CisgICAgcmV0dXJuIHZpcnR1YWxGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV9v
cF9jYWxsX2ppdENvbXBpbGUpLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9u
KSwgImNhbGwiLCBDb2RlRm9yQ2FsbCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0
dWFsQ29uc3RydWN0R2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0R2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICBy
ZXR1cm4gdmlydHVhbEZvckdlbmVyYXRvcihnbG9iYWxEYXRhLCBGdW5jdGlvblB0cihjdGlfb3Bf
Y29uc3RydWN0X2ppdENvbXBpbGUpLCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X05vdEpT
Q29uc3RydWN0KSwgImNvbnN0cnVjdCIsIENvZGVGb3JDb25zdHJ1Y3QpOworICAgIHJldHVybiB2
aXJ0dWFsRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X2ppdENv
bXBpbGUpLCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0KSwgImNv
bnN0cnVjdCIsIENvZGVGb3JDb25zdHJ1Y3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
c3RyaW5nTGVuZ3RoVHJhbXBvbGluZUdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEp
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3RyaW5nTGVuZ3RoVHJhbXBvbGluZUdlbmVyYXRvcihW
TSogdm0pCiB7CiAgICAgSlNJbnRlcmZhY2VKSVQgaml0OwogICAgIApAQCAtMTcxLDcgKzE3MSw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHJpbmdMZW5ndGhUcmFtcG8KICAgICBKU0ludGVy
ZmFjZUpJVDo6SnVtcCBmYWlsdXJlQ2FzZXMyID0gaml0LmJyYW5jaFB0cigKICAgICAgICAgSlNJ
bnRlcmZhY2VKSVQ6Ok5vdEVxdWFsLCBKU0ludGVyZmFjZUpJVDo6QWRkcmVzcygKICAgICAgICAg
ICAgIEpTSW50ZXJmYWNlSklUOjpyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0g
ICAgICAgIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKGdsb2JhbERhdGEtPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpOworICAgICAgICBKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbVB0cih2
bS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CiAKICAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0g
Z2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgVXN0cmluZy4KICAgICBqaXQubG9hZDMyKApAQCAtMTkz
LDcgKzE5Myw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHJpbmdMZW5ndGhUcmFtcG8KICAg
ICBKU0ludGVyZmFjZUpJVDo6SnVtcCBmYWlsdXJlQ2FzZXMyID0gaml0LmJyYW5jaFB0cigKICAg
ICAgICAgSlNJbnRlcmZhY2VKSVQ6Ok5vdEVxdWFsLAogICAgICAgICBKU0ludGVyZmFjZUpJVDo6
QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LAotICAgICAgICBKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbVB0cihnbG9iYWxEYXRhLT5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAgSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1Q
dHIodm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwogCiAgICAgLy8gQ2hlY2tzIG91dCBva2F5
ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIFVzdHJpbmcuCiAgICAgaml0LmxvYWQzMigKQEAg
LTIxMiw3ICsyMTIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3RyaW5nTGVuZ3RoVHJhbXBv
CiAgICAgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgZmFpbHVyZUNhc2VzMkNhbGwgPSBqaXQubWFrZVRh
aWxSZWN1cnNpdmVDYWxsKGZhaWx1cmVDYXNlczIpOwogICAgIEpTSW50ZXJmYWNlSklUOjpDYWxs
IGZhaWx1cmVDYXNlczNDYWxsID0gaml0Lm1ha2VUYWlsUmVjdXJzaXZlQ2FsbChmYWlsdXJlQ2Fz
ZXMzKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0
LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0
LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNh
c2VzMUNhbGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczJDYWxsLCBGdW5jdGlvblB0cihjdGlfb3Bf
Z2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7CkBAIC0yMjEsMTQgKzIyMSwxNCBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgc3RyaW5nTGVuZ3RoVHJhbXBvCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
cGF0Y2hCdWZmZXIsICgic3RyaW5nIGxlbmd0aCB0cmFtcG9saW5lIikpOwogfQogCi1zdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3N0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgbmF0aXZlRm9yR2VuZXJhdG9yKFZNKiB2bSwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCBraW5kKQogewogICAgIGludCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbiA9IE5hdGl2
ZUV4ZWN1dGFibGU6Om9mZnNldE9mTmF0aXZlRnVuY3Rpb25Gb3Ioa2luZCk7CiAgICAgCiAgICAg
SlNJbnRlcmZhY2VKSVQgaml0OwogICAgIAogICAgIGppdC5lbWl0UHV0SW1tZWRpYXRlVG9DYWxs
RnJhbWVIZWFkZXIoMCwgSlNTdGFjazo6Q29kZUJsb2NrKTsKLSAgICBqaXQuc3RvcmVQdHIoSlNJ
bnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCAmZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1l
KTsKKyAgICBqaXQuc3RvcmVQdHIoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCAm
dm0tPnRvcENhbGxGcmFtZSk7CiAKICNpZiBDUFUoWDg2KQogICAgIC8vIExvYWQgY2FsbGVyIGZy
YW1lJ3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNhbGxmcmFtZSBzbyB0aGF0IHdoYXRldmVyIHdl
IGNhbGwgY2FuCkBAIC0zNzMsMTIgKzM3MywxMiBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIG5hdGl2ZUZvckdlCiAKICAgICAvLyBDaGVjayBmb3IgYW4gZXhjZXB0aW9uCiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBqaXQubG9hZDY0KCYoZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKSwgSlNJ
bnRlcmZhY2VKSVQ6OnJlZ1QyKTsKKyAgICBqaXQubG9hZDY0KCYodm0tPmV4Y2VwdGlvbiksIEpT
SW50ZXJmYWNlSklUOjpyZWdUMik7CiAgICAgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgZXhjZXB0aW9u
SGFuZGxlciA9IGppdC5icmFuY2hUZXN0NjQoSlNJbnRlcmZhY2VKSVQ6Ok5vblplcm8sIEpTSW50
ZXJmYWNlSklUOjpyZWdUMik7CiAjZWxzZQogICAgIEpTSW50ZXJmYWNlSklUOjpKdW1wIGV4Y2Vw
dGlvbkhhbmRsZXIgPSBqaXQuYnJhbmNoMzIoCiAgICAgICAgIEpTSW50ZXJmYWNlSklUOjpOb3RF
cXVhbCwKLSAgICAgICAgSlNJbnRlcmZhY2VKSVQ6OkFic29sdXRlQWRkcmVzcyhyZWludGVycHJl
dF9jYXN0PGNoYXIqPigmZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksCisgICAgICAgIEpTSW50ZXJmYWNl
SklUOjpBYnNvbHV0ZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJnZtLT5leGNlcHRp
b24pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcp
KSwKICAgICAgICAgSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZh
bHVlVGFnKSk7CiAjZW5kaWYKIApAQCAtMzkxLDM1ICszOTEsMzUgQEAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogICAgIC8vIEdyYWIgdGhlIHJldHVybiBhZGRyZXNz
LgogICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoSlNJbnRlcmZhY2VKSVQ6
OnJlZ1QxKTsKIAotICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKCZn
bG9iYWxEYXRhLT5leGNlcHRpb25Mb2NhdGlvbiksIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7Cisg
ICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIoJnZtLT5leGNlcHRpb25M
b2NhdGlvbiksIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CiAgICAgaml0LnN0b3JlUHRyKEpTSW50
ZXJmYWNlSklUOjpyZWdUMSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyKTsKICAgICBqaXQucG9rZShK
U0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3Qg
SklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOwogCi0gICAgaml0LnN0
b3JlUHRyKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgJmdsb2JhbERhdGEtPnRv
cENhbGxGcmFtZSk7CisgICAgaml0LnN0b3JlUHRyKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVS
ZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwogICAgIC8vIFNldCB0aGUgcmV0dXJuIGFkZHJl
c3MuCiAgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIoRnVuY3Rpb25Q
dHIoY3RpVk1UaHJvd1RyYW1wb2xpbmUpLnZhbHVlKCkpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEp
OwogICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihKU0ludGVyZmFjZUpJ
VDo6cmVnVDEpOwogCiAgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqZ2xvYmFsRGF0YSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJuYXRpdmUgJXMgdHJhbXBvbGluZSIsIHRvQ1N0cmluZyhr
aW5kKS5kYXRhKCkpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNhbGxHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5h
dGl2ZUNhbGxHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBuYXRpdmVGb3JHZW5lcmF0
b3IoZ2xvYmFsRGF0YSwgQ29kZUZvckNhbGwpOworICAgIHJldHVybiBuYXRpdmVGb3JHZW5lcmF0
b3Iodm0sIENvZGVGb3JDYWxsKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNv
bnN0cnVjdEdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4g
bmF0aXZlRm9yR2VuZXJhdG9yKGdsb2JhbERhdGEsIENvZGVGb3JDb25zdHJ1Y3QpOworICAgIHJl
dHVybiBuYXRpdmVGb3JHZW5lcmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1Y3QpOwogfQogCi1zdGF0
aWMgdm9pZCBzdHJpbmdDaGFyTG9hZChTcGVjaWFsaXplZFRodW5rSklUJiBqaXQsIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSkKK3N0YXRpYyB2b2lkIHN0cmluZ0NoYXJMb2FkKFNwZWNpYWxpemVk
VGh1bmtKSVQmIGppdCwgVk0qIHZtKQogewogICAgIC8vIGxvYWQgc3RyaW5nCi0gICAgaml0Lmxv
YWRKU1N0cmluZ0FyZ3VtZW50KCpnbG9iYWxEYXRhLCBTcGVjaWFsaXplZFRodW5rSklUOjpUaGlz
QXJndW1lbnQsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKKyAgICBqaXQubG9hZEpTU3Ry
aW5nQXJndW1lbnQoKnZtLCBTcGVjaWFsaXplZFRodW5rSklUOjpUaGlzQXJndW1lbnQsIFNwZWNp
YWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKIAogICAgIC8vIExvYWQgc3RyaW5nIGxlbmd0aCB0byBy
ZWdUMiwgYW5kIHN0YXJ0IHRoZSBwcm9jZXNzIG9mIGxvYWRpbmcgdGhlIGRhdGEgcG9pbnRlciBp
bnRvIHJlZ1QwCiAgICAgaml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMCwgVGh1bmtIZWxwZXJzOjpqc1N0cmluZ0xlbmd0aE9mZnNldCgp
KSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDIpOwpAQCAtNDQ2LDUxICs0NDYsNTEgQEAgc3Rh
dGljIHZvaWQgc3RyaW5nQ2hhckxvYWQoU3BlY2lhbGl6ZWRUaAogICAgIGNvbnQ4Qml0Lmxpbmso
JmppdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNoYXJUb1N0cmluZyhTcGVjaWFsaXplZFRodW5rSklU
JiBqaXQsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVy
SUQgc3JjLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBkc3QsIE1hY3JvQXNzZW1ibGVyOjpS
ZWdpc3RlcklEIHNjcmF0Y2gpCitzdGF0aWMgdm9pZCBjaGFyVG9TdHJpbmcoU3BlY2lhbGl6ZWRU
aHVua0pJVCYgaml0LCBWTSogdm0sIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHNyYywgTWFj
cm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgZHN0LCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBz
Y3JhdGNoKQogewogICAgIGppdC5hcHBlbmRGYWlsdXJlKGppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBzcmMsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMHgx
MDApKSk7Ci0gICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZ2xvYmFs
RGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSksIHNjcmF0Y2gpOwor
ICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZtLT5zbWFsbFN0cmlu
Z3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKSwgc2NyYXRjaCk7CiAgICAgaml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoLCBzcmMsIE1hY3JvQXNzZW1ibGVyOjpT
Y2FsZVB0ciwgMCksIGRzdCk7CiAgICAgaml0LmFwcGVuZEZhaWx1cmUoaml0LmJyYW5jaFRlc3RQ
dHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGRzdCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewog
ICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEpOwotICAgIHN0cmluZ0NoYXJMb2FkKGppdCwg
Z2xvYmFsRGF0YSk7CisgICAgc3RyaW5nQ2hhckxvYWQoaml0LCB2bSk7CiAgICAgaml0LnJldHVy
bkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKLSAgICByZXR1cm4gaml0LmZpbmFs
aXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9i
YWxEYXRhKSwgImNoYXJDb2RlQXQiKTsKKyAgICByZXR1cm4gaml0LmZpbmFsaXplKCp2bSwgdm0t
PmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSwgImNoYXJDb2RlQXQiKTsKIH0KIAotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGNoYXJBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQXRUaHVua0dlbmVyYXRvcihWTSogdm0p
CiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSk7Ci0gICAgc3RyaW5nQ2hhckxvYWQo
aml0LCBnbG9iYWxEYXRhKTsKLSAgICBjaGFyVG9TdHJpbmcoaml0LCBnbG9iYWxEYXRhLCBTcGVj
aWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNp
YWxpemVkVGh1bmtKSVQ6OnJlZ1QxKTsKKyAgICBzdHJpbmdDaGFyTG9hZChqaXQsIHZtKTsKKyAg
ICBjaGFyVG9TdHJpbmcoaml0LCB2bSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNp
YWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSk7CiAgICAg
aml0LnJldHVybkpTQ2VsbChTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7Ci0gICAgcmV0dXJu
IGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2
ZUNhbGwoZ2xvYmFsRGF0YSksICJjaGFyQXQiKTsKKyAgICByZXR1cm4gaml0LmZpbmFsaXplKCp2
bSwgdm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSwgImNoYXJBdCIpOwogfQogCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWYgZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZyb21DaGFyQ29kZVRodW5rR2Vu
ZXJhdG9yKFZNKiB2bSkKIHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxKTsKICAgICAv
LyBsb2FkIGNoYXIgY29kZQogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXpl
ZFRodW5rSklUOjpyZWdUMCk7Ci0gICAgY2hhclRvU3RyaW5nKGppdCwgZ2xvYmFsRGF0YSwgU3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVj
aWFsaXplZFRodW5rSklUOjpyZWdUMSk7CisgICAgY2hhclRvU3RyaW5nKGppdCwgdm0sIFNwZWNp
YWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDEpOwogICAgIGppdC5yZXR1cm5KU0NlbGwoU3BlY2lhbGl6ZWRU
aHVua0pJVDo6cmVnVDApOwotICAgIHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGds
b2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKGdsb2JhbERhdGEpLCAiZnJvbUNoYXJD
b2RlIik7CisgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqdm0sIHZtLT5qaXRTdHVicy0+Y3RpTmF0
aXZlQ2FsbCh2bSksICJmcm9tQ2hhckNvZGUiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHNxcnRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgc3FydFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBTcGVjaWFsaXpl
ZFRodW5rSklUIGppdCgxKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0
KCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5h
Z2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRh
KSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5h
Z2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKIAogICAgIGppdC5s
b2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGppdC5zcXJ0RG91YmxlKFNwZWNpYWxpemVkVGh1
bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwogICAgIGppdC5y
ZXR1cm5Eb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7Ci0gICAgcmV0dXJuIGpp
dC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNh
bGwoZ2xvYmFsRGF0YSksICJzcXJ0Iik7CisgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqdm0sIHZt
LT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSksICJzcXJ0Iik7CiB9CiAKIApAQCAtNTYxLDEy
ICs1NjEsMTIgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSBuZWdhdGl2ZUhhbGZDb25zdGFudAogc3Rh
dGljIGNvbnN0IGRvdWJsZSB6ZXJvQ29uc3RhbnQgPSAwLjA7CiBzdGF0aWMgY29uc3QgZG91Ymxl
IGhhbGZDb25zdGFudCA9IDAuNTsKICAgICAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmbG9vclRo
dW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBmbG9vclRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBTcGVjaWFsaXplZFRodW5r
SklUIGppdCgxKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRKdW1wOwogICAgIGlm
ICghVW5hcnlEb3VibGVPcFdyYXBwZXIoZmxvb3IpIHx8ICFqaXQuc3VwcG9ydHNGbG9hdGluZ1Bv
aW50KCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZN
YW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxE
YXRhKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZN
YW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKICAgICBqaXQu
bG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIG5vbkludEp1
bXApOwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAg
ICAgbm9uSW50SnVtcC5saW5rKCZqaXQpOwpAQCAtNTkwLDE0ICs1OTAsMTQgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGZsb29yVGh1bmtHZW5lcmF0bwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVj
aWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgZG91YmxlUmVzdWx0LmxpbmsoJmppdCk7CiAg
ICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKLSAgICBy
ZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3Rp
TmF0aXZlQ2FsbChnbG9iYWxEYXRhKSwgImZsb29yIik7CisgICAgcmV0dXJuIGppdC5maW5hbGl6
ZSgqdm0sIHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSksICJmbG9vciIpOwogfQogCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWYgY2VpbFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBjZWlsVGh1bmtHZW5lcmF0b3IoVk0qIHZt
KQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEpOwogICAgIGlmICghVW5hcnlEb3Vi
bGVPcFdyYXBwZXIoY2VpbCkgfHwgIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAg
ICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVm
KGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKGdsb2JhbERhdGEpKTsKKyAgICAg
ICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVm
KHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIG5vbkludEp1bXA7CiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVk
VGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDApOwpAQCAtNjA5LDE0ICs2MDksMTQgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGNlaWxUaHVua0dlbmVyYXRvcgogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgZG91YmxlUmVzdWx0LmxpbmsoJmppdCk7CiAgICAg
aml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKLSAgICByZXR1
cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0
aXZlQ2FsbChnbG9iYWxEYXRhKSwgImNlaWwiKTsKKyAgICByZXR1cm4gaml0LmZpbmFsaXplKCp2
bSwgdm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSwgImNlaWwiKTsKIH0KIAotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHJvdW5kVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJvdW5kVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQog
ewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEpOwogICAgIGlmICghVW5hcnlEb3VibGVP
cFdyYXBwZXIoanNSb3VuZCkgfHwgIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAg
ICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVm
KGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKGdsb2JhbERhdGEpKTsKKyAgICAg
ICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVm
KHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIG5vbkludEp1bXA7CiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVk
VGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDApOwpAQCAtNjQzLDQwICs2NDMsNDAgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHJvdW5kVGh1bmtHZW5lcmF0bwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgZG91YmxlUmVzdWx0LmxpbmsoJmppdCk7CiAgICAg
aml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKLSAgICByZXR1
cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0
aXZlQ2FsbChnbG9iYWxEYXRhKSwgInJvdW5kIik7CisgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgq
dm0sIHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSksICJyb3VuZCIpOwogfQogCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWYgZXhwVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV4cFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsK
ICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGV4cCkpCi0gICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5q
aXRTdHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRhKSk7CisgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMt
PmN0aU5hdGl2ZUNhbGwodm0pKTsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxKTsKICAg
ICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmpp
dFN0dWJzLT5jdGlOYXRpdmVDYWxsKGdsb2JhbERhdGEpKTsKKyAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCh2bSkpOwogICAgIGppdC5sb2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAg
IGppdC5jYWxsRG91YmxlVG9Eb3VibGUoVW5hcnlEb3VibGVPcFdyYXBwZXIoZXhwKSk7CiAgICAg
aml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKLSAgICByZXR1
cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0
aXZlQ2FsbChnbG9iYWxEYXRhKSwgImV4cCIpOworICAgIHJldHVybiBqaXQuZmluYWxpemUoKnZt
LCB2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pLCAiZXhwIik7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBsb2dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEp
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbG9nVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAg
IGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIobG9nKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0
dWJzLT5jdGlOYXRpdmVDYWxsKGdsb2JhbERhdGEpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3Rp
TmF0aXZlQ2FsbCh2bSkpOwogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEpOwogICAgIGlm
ICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1
YnMtPmN0aU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlO
YXRpdmVDYWxsKHZtKSk7CiAgICAgaml0LmxvYWREb3VibGVBcmd1bWVudCgwLCBTcGVjaWFsaXpl
ZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgaml0
LmNhbGxEb3VibGVUb0RvdWJsZShVbmFyeURvdWJsZU9wV3JhcHBlcihsb2cpKTsKICAgICBqaXQu
cmV0dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwotICAgIHJldHVybiBq
aXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVD
YWxsKGdsb2JhbERhdGEpLCAibG9nIik7CisgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqdm0sIHZt
LT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSksICJsb2ciKTsKIH0KIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGFic1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBhYnNUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgU3Bl
Y2lhbGl6ZWRUaHVua0pJVCBqaXQoMSk7CiAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGluZ1Bv
aW50QWJzKCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNl
bGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9i
YWxEYXRhKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNl
bGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRKdW1wOwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVu
dCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJz
aGlmdDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDMxKSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwpAQCAtNjg5LDE0ICs2ODks
MTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFic1RodW5rR2VuZXJhdG9yKAogICAgIGppdC5s
b2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGppdC5hYnNEb3VibGUoU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMSk7CiAgICAgaml0LnJl
dHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QxKTsKLSAgICByZXR1cm4gaml0
LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2Fs
bChnbG9iYWxEYXRhKSwgImFicyIpOworICAgIHJldHVybiBqaXQuZmluYWxpemUoKnZtLCB2bS0+
aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pLCAiYWJzIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBwb3dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgcG93VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIFNwZWNp
YWxpemVkVGh1bmtKSVQgaml0KDIpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2lu
dCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFu
YWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoZ2xvYmFsRGF0
YSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFu
YWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAKICAgICBqaXQu
bG9hZERvdWJsZSgmb25lQ29uc3RhbnQsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDEpOwog
ICAgIGppdC5sb2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdU
MCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwpAQCAtNzQxLDcgKzc0MSw3IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBwb3dUaHVua0dlbmVyYXRvcigKICAgICB9IGVsc2UKICAgICAgICAg
aml0LmFwcGVuZEZhaWx1cmUobm9uSW50RXhwb25lbnQpOwogCi0gICAgcmV0dXJuIGppdC5maW5h
bGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoZ2xv
YmFsRGF0YSksICJwb3ciKTsKKyAgICByZXR1cm4gaml0LmZpbmFsaXplKCp2bSwgdm0tPmppdFN0
dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSwgInBvdyIpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHJldmlzaW9uIDE0ODY1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDI2ICszMSwyNiBAQAogI2lmIEVOQUJMRShKSVQpCiBuYW1lc3BhY2UgSlNDIHsK
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSop
OwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IoSlNHbG9iYWxE
YXRhKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsR2VuZXJhdG9yKEpT
R2xvYmFsRGF0YSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDYWxsR2VuZXJhdG9y
KEpTR2xvYmFsRGF0YSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RH
ZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3RyaW5nTGVu
Z3RoVHJhbXBvbGluZUdlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBuYXRpdmVDYWxsR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbEdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBs
aW5rQ2xvc3VyZUNhbGxHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0
dWFsQ2FsbEdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25z
dHJ1Y3RHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHJpbmdMZW5ndGhU
cmFtcG9saW5lR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ2Fs
bEdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNvbnN0cnVjdEdl
bmVyYXRvcihWTSopOwogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hhckNvZGVBdFRodW5rR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJBdFRodW5r
R2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZyb21DaGFy
Q29kZVRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGFic1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGNlaWxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBleHBUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBmbG9vclRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGxvZ1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHJvdW5kVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7Ci1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgc3FydFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHBvd1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGNoYXJBdFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnJv
bUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBhYnNU
aHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNlaWxUaHVua0dlbmVy
YXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV4cFRodW5rR2VuZXJhdG9yKFZNKik7
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZmxvb3JUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGxvZ1RodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgcm91bmRUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNx
cnRUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHBvd1RodW5rR2Vu
ZXJhdG9yKFZNKik7CiAKIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Miw5ICs2Miw5IEBAIHZvaWQgaW5pdGlhbGl6ZSgpCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcHVzaAogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1ub3Jl
dHVybiIKICNlbmRpZgotdm9pZCBEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyhKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCit2b2lkIERhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKFZNJiB2bSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0oZ2xvYmFsRGF0YSk7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKICAgICAK
ICAgICAvLyBBc3NlcnRpb25zIHRvIG1hdGNoIExvd0xldmVsSW50ZXJwcmV0ZXIuYXNtLiAgSWYg
eW91IGNoYW5nZSBhbnkgb2YgdGhpcyBjb2RlLCBiZQogICAgIC8vIHByZXBhcmVkIHRvIGNoYW5n
ZSBMb3dMZXZlbEludGVycHJldGVyLmFzbSBhcyB3ZWxsISEKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnREYXRhLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIs
NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07
CiBzdHJ1Y3QgSW5zdHJ1Y3Rpb247CiAKICNpZiBFTkFCTEUoTExJTlRfQ19MT09QKQpAQCAtNDcs
NyArNDcsNyBAQCBuYW1lc3BhY2UgTExJbnQgewogCiBjbGFzcyBEYXRhIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgdm9pZCBwZXJmb3JtQXNzZXJ0aW9ucyhKU0dsb2JhbERhdGEmKTsKKyAgICBzdGF0
aWMgdm9pZCBwZXJmb3JtQXNzZXJ0aW9ucyhWTSYpOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBJ
bnN0cnVjdGlvbiogc19leGNlcHRpb25JbnN0cnVjdGlvbnM7CkBAIC05Niw3ICs5Niw3IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCogZ2V0Q29kZVB0cihPcGNvZGVJRCAKIAogY2xhc3MgRGF0YSB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgcGVyZm9ybUFzc2VydGlvbnMoSlNHbG9iYWxEYXRhJikg
eyB9CisgICAgc3RhdGljIHZvaWQgcGVyZm9ybUFzc2VydGlvbnMoVk0mKSB7IH0KIH07CiAKICNp
ZiBDT01QSUxFUihDTEFORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dEVudHJ5cG9pbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRFbnRyeXBvaW50cy5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludEVudHJ5cG9pbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksNyArMjksNyBAQAogI2lmIEVOQUJMRShMTElOVCkKIAogI2luY2x1ZGUgIkpJVENvZGUuaCIK
LSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIkpT
T2JqZWN0LmgiCiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJMb3dMZXZlbElu
dGVycHJldGVyLmgiCkBAIC0zNyw5ICszNyw5IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgTExJbnQgewogCi12b2lkIGdldEZ1bmN0aW9uRW50cnlwb2ludChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgSklUQ29kZSYgaml0Q29kZSwg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBhcml0eUNoZWNrKQordm9pZCBnZXRGdW5jdGlvbkVudHJ5
cG9pbnQoVk0mIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpJVENvZGUmIGppdENv
ZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgYXJpdHlDaGVjaykKIHsKLSAgICBpZiAoIWdsb2Jh
bERhdGEuY2FuVXNlSklUKCkpIHsKKyAgICBpZiAoIXZtLmNhblVzZUpJVCgpKSB7CiAgICAgICAg
IGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7CiAgICAgICAgICAgICBqaXRDb2RlID0gSklUQ29k
ZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9mdW5jdGlv
bl9mb3JfY2FsbF9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspOwogICAgICAg
ICAgICAgYXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2Rl
UHRyKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrKTsKQEAgLTU0LDM2ICs1NCwz
NiBAQCB2b2lkIGdldEZ1bmN0aW9uRW50cnlwb2ludChKU0dsb2JhbERhdGEmCiAgICAgCiAjaWYg
RU5BQkxFKEpJVCkKICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewotICAgICAgICBqaXRD
b2RlID0gSklUQ29kZShnbG9iYWxEYXRhLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDYWxsRW50cnlU
aHVua0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspOwotICAgICAgICBhcml0
eUNoZWNrID0gZ2xvYmFsRGF0YS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ2FsbEFyaXR5Q2hlY2tU
aHVua0dlbmVyYXRvcikuY29kZSgpOworICAgICAgICBqaXRDb2RlID0gSklUQ29kZSh2bS5nZXRD
VElTdHViKGZ1bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRl
cnByZXRlclRodW5rKTsKKyAgICAgICAgYXJpdHlDaGVjayA9IHZtLmdldENUSVN0dWIoZnVuY3Rp
b25Gb3JDYWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKS5jb2RlKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICBq
aXRDb2RlID0gSklUQ29kZShnbG9iYWxEYXRhLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1
Y3RFbnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuayk7Ci0gICAg
YXJpdHlDaGVjayA9IGdsb2JhbERhdGEuZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNvbnN0cnVjdEFy
aXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpOworICAgIGppdENvZGUgPSBKSVRDb2RlKHZt
LmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9yKSwgSklU
Q29kZTo6SW50ZXJwcmV0ZXJUaHVuayk7CisgICAgYXJpdHlDaGVjayA9IHZtLmdldENUSVN0dWIo
ZnVuY3Rpb25Gb3JDb25zdHJ1Y3RBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQogfQogCi12b2lkIGdldEV2YWxFbnRyeXBvaW50KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSklUQ29kZSYgaml0Q29kZSkKK3ZvaWQgZ2V0RXZhbEVudHJ5cG9p
bnQoVk0mIHZtLCBKSVRDb2RlJiBqaXRDb2RlKQogewotICAgIGlmICghZ2xvYmFsRGF0YS5jYW5V
c2VKSVQoKSkgeworICAgIGlmICghdm0uY2FuVXNlSklUKCkpIHsKICAgICAgICAgaml0Q29kZSA9
IEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRf
ZXZhbF9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2lmIEVOQUJMRShKSVQpICAgIAotICAgIGppdENvZGUgPSBKSVRDb2RlKGds
b2JhbERhdGEuZ2V0Q1RJU3R1YihldmFsRW50cnlUaHVua0dlbmVyYXRvciksIEpJVENvZGU6Oklu
dGVycHJldGVyVGh1bmspOworICAgIGppdENvZGUgPSBKSVRDb2RlKHZtLmdldENUSVN0dWIoZXZh
bEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKTsKICNlbmRp
ZgogfQogCi12b2lkIGdldFByb2dyYW1FbnRyeXBvaW50KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSklUQ29kZSYgaml0Q29kZSkKK3ZvaWQgZ2V0UHJvZ3JhbUVudHJ5cG9pbnQoVk0mIHZtLCBK
SVRDb2RlJiBqaXRDb2RlKQogewotICAgIGlmICghZ2xvYmFsRGF0YS5jYW5Vc2VKSVQoKSkgewor
ICAgIGlmICghdm0uY2FuVXNlSklUKCkpIHsKICAgICAgICAgaml0Q29kZSA9IEpJVENvZGUoTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfcHJvZ3JhbV9wcm9s
b2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspOwogICAgICAgICByZXR1cm47CiAgICAg
fQogI2lmIEVOQUJMRShKSVQpCi0gICAgaml0Q29kZSA9IEpJVENvZGUoZ2xvYmFsRGF0YS5nZXRD
VElTdHViKHByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJU
aHVuayk7CisgICAgaml0Q29kZSA9IEpJVENvZGUodm0uZ2V0Q1RJU3R1Yihwcm9ncmFtRW50cnlU
aHVua0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspOwogI2VuZGlmCiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEVudHJ5cG9pbnRzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludHMu
aAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
RW50cnlwb2ludHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMjUgKzM2LDI1IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiBjbGFzcyBFdmFsQ29kZUJsb2NrOwogY2xhc3MgSklUQ29kZTsKLWNsYXNzIEpT
R2xvYmFsRGF0YTsKK2NsYXNzIFZNOwogY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOwogY2xh
c3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOwogY2xhc3MgUHJvZ3JhbUNvZGVCbG9jazsKIAogbmFt
ZXNwYWNlIExMSW50IHsKIAotdm9pZCBnZXRGdW5jdGlvbkVudHJ5cG9pbnQoSlNHbG9iYWxEYXRh
JiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgSklUQ29kZSYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciYgYXJpdHlDaGVjayk7Ci12b2lkIGdldEV2YWxFbnRyeXBvaW50KEpTR2xvYmFsRGF0YSYsIEpJ
VENvZGUmKTsKLXZvaWQgZ2V0UHJvZ3JhbUVudHJ5cG9pbnQoSlNHbG9iYWxEYXRhJiwgSklUQ29k
ZSYpOwordm9pZCBnZXRGdW5jdGlvbkVudHJ5cG9pbnQoVk0mLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kLCBKSVRDb2RlJiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBhcml0eUNoZWNrKTsKK3ZvaWQg
Z2V0RXZhbEVudHJ5cG9pbnQoVk0mLCBKSVRDb2RlJik7Cit2b2lkIGdldFByb2dyYW1FbnRyeXBv
aW50KFZNJiwgSklUQ29kZSYpOwogCi1pbmxpbmUgdm9pZCBnZXRFbnRyeXBvaW50KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgRXZhbENvZGVCbG9jayosIEpJVENvZGUmIGppdENvZGUpCitpbmxp
bmUgdm9pZCBnZXRFbnRyeXBvaW50KFZNJiB2bSwgRXZhbENvZGVCbG9jayosIEpJVENvZGUmIGpp
dENvZGUpCiB7Ci0gICAgZ2V0RXZhbEVudHJ5cG9pbnQoZ2xvYmFsRGF0YSwgaml0Q29kZSk7Cisg
ICAgZ2V0RXZhbEVudHJ5cG9pbnQodm0sIGppdENvZGUpOwogfQogCi1pbmxpbmUgdm9pZCBnZXRF
bnRyeXBvaW50KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvZ3JhbUNvZGVCbG9jayosIEpJ
VENvZGUmIGppdENvZGUpCitpbmxpbmUgdm9pZCBnZXRFbnRyeXBvaW50KFZNJiB2bSwgUHJvZ3Jh
bUNvZGVCbG9jayosIEpJVENvZGUmIGppdENvZGUpCiB7Ci0gICAgZ2V0UHJvZ3JhbUVudHJ5cG9p
bnQoZ2xvYmFsRGF0YSwgaml0Q29kZSk7CisgICAgZ2V0UHJvZ3JhbUVudHJ5cG9pbnQodm0sIGpp
dENvZGUpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6TExJbnQKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuY3BwCShyZXZpc2lvbiAx
NDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTQgKzQ4LDE0IEBAIHN0YXRpYyB2b2lkIGZpeHVwUENm
b3JFeGNlcHRpb25JZk5lZWRlZCgKIAogdm9pZCBpbnRlcnByZXRlclRocm93SW5DYWxsZXIoRXhl
Y1N0YXRlKiBleGVjLCBSZXR1cm5BZGRyZXNzUHRyIHBjKQogewotICAgIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICNpZiBMTElOVF9T
TE9XX1BBVEhfVFJBQ0lORwotICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2VwdGlvbiAiLCBnbG9i
YWxEYXRhLT5leGNlcHRpb24sICIuXG4iKTsKKyAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRp
b24gIiwgdm0tPmV4Y2VwdGlvbiwgIi5cbiIpOwogI2VuZGlmCiAgICAgZml4dXBQQ2ZvckV4Y2Vw
dGlvbklmTmVlZGVkKGV4ZWMpOwogICAgIGdlbmVyaWNUaHJvdygKLSAgICAgICAgZ2xvYmFsRGF0
YSwgZXhlYywgZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uLAorICAgICAgICB2bSwgZXhlYywgdm0tPmV4
Y2VwdGlvbiwKICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCktPmJ5dGVjb2RlT2Zmc2V0KGV4ZWMs
IHBjKSk7CiB9CiAKQEAgLTY3LDE3ICs2NywxNyBAQCBJbnN0cnVjdGlvbiogcmV0dXJuVG9UaHJv
d0ZvclRocm93bkV4Y2VwCiAKIHN0YXRpYyB2b2lkIGRvVGhyb3coRXhlY1N0YXRlKiBleGVjLCBJ
bnN0cnVjdGlvbiogcGMpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMt
Pmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERh
dGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGZpeHVwUENmb3JFeGNlcHRpb25JZk5lZWRl
ZChleGVjKTsKLSAgICBnZW5lcmljVGhyb3coZ2xvYmFsRGF0YSwgZXhlYywgZ2xvYmFsRGF0YS0+
ZXhjZXB0aW9uLCBwYyAtIGV4ZWMtPmNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigp
KTsKKyAgICBnZW5lcmljVGhyb3codm0sIGV4ZWMsIHZtLT5leGNlcHRpb24sIHBjIC0gZXhlYy0+
Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmJlZ2luKCkpOwogfQogCiBJbnN0cnVjdGlvbiog
cmV0dXJuVG9UaHJvdyhFeGVjU3RhdGUqIGV4ZWMsIEluc3RydWN0aW9uKiBwYykKIHsKICNpZiBM
TElOVF9TTE9XX1BBVEhfVFJBQ0lORwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZl
eGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgZGF0YUxvZygiVGhyb3dpbmcgZXhjZXB0aW9uICIsIGds
b2JhbERhdGEtPmV4Y2VwdGlvbiwgIiAocmV0dXJuVG9UaHJvdykuXG4iKTsKKyAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKKyAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwgdm0tPmV4
Y2VwdGlvbiwgIiAocmV0dXJuVG9UaHJvdykuXG4iKTsKICNlbmRpZgogICAgIGRvVGhyb3coZXhl
YywgcGMpOwogICAgIHJldHVybiBMTEludDo6ZXhjZXB0aW9uSW5zdHJ1Y3Rpb25zKCk7CkBAIC04
Niw4ICs4Niw4IEBAIEluc3RydWN0aW9uKiByZXR1cm5Ub1Rocm93KEV4ZWNTdGF0ZSogZXgKIHZv
aWQqIGNhbGxUb1Rocm93KEV4ZWNTdGF0ZSogZXhlYywgSW5zdHJ1Y3Rpb24qIHBjKQogewogI2lm
IExMSU5UX1NMT1dfUEFUSF9UUkFDSU5HCi0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0g
JmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwg
Z2xvYmFsRGF0YS0+ZXhjZXB0aW9uLCAiIChjYWxsVG9UaHJvdykuXG4iKTsKKyAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKKyAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwgdm0tPmV4
Y2VwdGlvbiwgIiAoY2FsbFRvVGhyb3cpLlxuIik7CiAjZW5kaWYKICAgICBkb1Rocm93KGV4ZWMs
IHBjKTsKICAgICByZXR1cm4gTExJbnQ6OmdldENvZGVQdHIobGxpbnRfdGhyb3dfZHVyaW5nX2Nh
bGxfdHJhbXBvbGluZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRP
ZmZzZXRzRXh0cmFjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVk
ZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkpTR2xvYmFs
RGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNp
bmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCIK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsOCArNTUsOCBAQAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBMTEludCB7CiAKICNkZWZpbmUgTExJTlRfQkVHSU5fTk9fU0VUX1BD
KCkgXAotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsg
ICAgICBcCi0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhl
YykKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOyAgICAgIFwKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYykKIAogI2lmbmRlZiBOREVCVUcKICNkZWZpbmUgTExJTlRf
U0VUX1BDX0ZPUl9TVFVCUygpIGRvIHsgXApAQCAtODMsMTMgKzgzLDEzIEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgTExJbnQgewogI2RlZmluZSBMTElOVF9FTkRfSU1QTCgpIExMSU5UX1JF
VFVSTl9UV08ocGMsIGV4ZWMpCiAKICNkZWZpbmUgTExJTlRfVEhST1coZXhjZXB0aW9uVG9UaHJv
dykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZ2xvYmFsRGF0YS5leGNl
cHRpb24gPSAoZXhjZXB0aW9uVG9UaHJvdyk7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdm0u
ZXhjZXB0aW9uID0gKGV4Y2VwdGlvblRvVGhyb3cpOyAgICAgICAgICAgICAgICBcCiAgICAgICAg
IHBjID0gcmV0dXJuVG9UaHJvdyhleGVjLCBwYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgICAgIExMSU5UX0VORF9JTVBMKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoZmFsc2UpCiAKICNkZWZpbmUgTExJTlRfQ0hF
Q0tfRVhDRVBUSU9OKCkgZG8geyAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoVU5M
SUtFTFkoZ2xvYmFsRGF0YS5leGNlcHRpb24pKSB7ICAgICAgICAgICBcCisgICAgICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24pKSB7ICAgICAgICAgICBcCiAgICAgICAgICAgICBwYyA9IHJl
dHVyblRvVGhyb3coZXhlYywgcGMpOyAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIExMSU5U
X0VORF9JTVBMKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xNDMsMTQgKzE0
MywxNCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsKICNkZWZpbmUgTExJTlRf
Q0FMTF9USFJPVyhleGVjLCBwYywgZXhjZXB0aW9uVG9UaHJvdykgZG8geyAgICAgICAgICAgICAg
IFwKICAgICAgICAgRXhlY1N0YXRlKiBfX2N0X2V4ZWMgPSAoZXhlYyk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgSW5zdHJ1Y3Rpb24qIF9fY3RfcGMgPSAocGMp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZ2xvYmFsRGF0
YS5leGNlcHRpb24gPSAoZXhjZXB0aW9uVG9UaHJvdyk7ICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgdm0uZXhjZXB0aW9uID0gKGV4Y2VwdGlvblRvVGhyb3cpOyAgICAgICAgICAgICAg
ICAgICAgICBcCiAgICAgICAgIExMSU5UX0NBTExfRU5EX0lNUEwoX19jdF9leGVjLCBjYWxsVG9U
aHJvdyhfX2N0X2V4ZWMsIF9fY3RfcGMpKTsgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCiAjZGVm
aW5lIExMSU5UX0NBTExfQ0hFQ0tfRVhDRVBUSU9OKGV4ZWMsIHBjKSBkbyB7ICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgICAgIEV4ZWNTdGF0ZSogX19jY2VfZXhlYyA9IChleGVjKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIEluc3RydWN0aW9uKiBfX2Nj
ZV9wYyA9IChwYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
IGlmIChVTkxJS0VMWShnbG9iYWxEYXRhLmV4Y2VwdGlvbikpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKSkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBMTElOVF9DQUxMX0VORF9JTVBMKF9f
Y2NlX2V4ZWMsIGNhbGxUb1Rocm93KF9fY2NlX2V4ZWMsIF9fY2NlX3BjKSk7IFwKICAgICB9IHdo
aWxlIChmYWxzZSkKIApAQCAtMTY5LDcgKzE2OSw3IEBAIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1
cm5UeXBlIGxsaW50X3RyYWMKICAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLAogICAgICAg
ICAgICAgZXhlYywKICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludHB0cl90PihwYyAtIGV4ZWMt
PmNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpKSwKLSAgICAgICAgICAgIGV4ZWMt
Pmdsb2JhbERhdGEoKS5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocGNbMF0udS5vcGNvZGUpLAor
ICAgICAgICAgICAgZXhlYy0+dm0oKS5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocGNbMF0udS5v
cGNvZGUpLAogICAgICAgICAgICAgZnJvbVdoZXJlLAogICAgICAgICAgICAgb3BlcmFuZCwKICAg
ICAgICAgICAgIHBjW29wZXJhbmRdLnUub3BlcmFuZCk7CkBAIC0xOTIsNyArMTkyLDcgQEAgZXh0
ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdHJhYwogICAgICAgICBleGVjLT5jb2Rl
QmxvY2soKSwKICAgICAgICAgZXhlYywKICAgICAgICAgc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHBj
IC0gZXhlYy0+Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmJlZ2luKCkpLAotICAgICAgICBl
eGVjLT5nbG9iYWxEYXRhKCkuaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHBjWzBdLnUub3Bjb2Rl
KSwKKyAgICAgICAgZXhlYy0+dm0oKS5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocGNbMF0udS5v
cGNvZGUpLAogICAgICAgICBmcm9tV2hlcmUsCiAgICAgICAgIG9wZXJhbmQsCiAgICAgICAgIHBj
W29wZXJhbmRdLnUub3BlcmFuZCwKQEAgLTI0OSw5ICsyNDksOSBAQCBMTElOVF9TTE9XX1BBVEhf
REVDTCh0cmFjZSkKICAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLAogICAgICAgICAgICAg
ZXhlYywKICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludHB0cl90PihwYyAtIGV4ZWMtPmNvZGVC
bG9jaygpLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpKSwKLSAgICAgICAgICAgIG9wY29kZU5hbWVz
W2V4ZWMtPmdsb2JhbERhdGEoKS5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocGNbMF0udS5vcGNv
ZGUpXSwKKyAgICAgICAgICAgIG9wY29kZU5hbWVzW2V4ZWMtPnZtKCkuaW50ZXJwcmV0ZXItPmdl
dE9wY29kZUlEKHBjWzBdLnUub3Bjb2RlKV0sCiAgICAgICAgICAgICBleGVjLT5zY29wZSgpKTsK
LSAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmludGVycHJldGVyLT5nZXRPcGNvZGVJRChwY1sw
XS51Lm9wY29kZSkgPT0gb3BfcmV0KSB7CisgICAgaWYgKGV4ZWMtPnZtKCkuaW50ZXJwcmV0ZXIt
PmdldE9wY29kZUlEKHBjWzBdLnUub3Bjb2RlKSA9PSBvcF9yZXQpIHsKICAgICAgICAgZGF0YUxv
Z0YoIldpbGwgYmUgcmV0dXJuaW5nIHRvICVwXG4iLCBleGVjLT5yZXR1cm5QQygpLnZhbHVlKCkp
OwogICAgICAgICBkYXRhTG9nRigiVGhlIG5ldyBjZnIgd2lsbCBiZSAlcFxuIiwgZXhlYy0+Y2Fs
bGVyRnJhbWUoKSk7CiAgICAgfQpAQCAtMjY0LDcgKzI2NCw3IEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNwZWNpYWxfdHJhY2UpCiAgICAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwKICAgICAg
ICAgICAgIGV4ZWMsCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnRwdHJfdD4ocGMgLSBleGVj
LT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSksCi0gICAgICAgICAgICBleGVj
LT5nbG9iYWxEYXRhKCkuaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHBjWzBdLnUub3Bjb2RlKSwK
KyAgICAgICAgICAgIGV4ZWMtPnZtKCkuaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHBjWzBdLnUu
b3Bjb2RlKSwKICAgICAgICAgICAgIGV4ZWMtPnJldHVyblBDKCkudmFsdWUoKSk7CiAgICAgTExJ
TlRfRU5EX0lNUEwoKTsKIH0KQEAgLTI3Myw3ICsyNzMsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVD
TChzcGVjaWFsX3RyYWNlKQogaW5saW5lIGJvb2wgc2hvdWxkSklUKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICAvLyBZb3UgY2FuIG1vZGlmeSB0aGlzIHRvIHR1cm4gb2ZmIEpJVHRpbmcgd2l0aG91
dCByZWJ1aWxkaW5nIHRoZSB3b3JsZC4KLSAgICByZXR1cm4gZXhlYy0+Z2xvYmFsRGF0YSgpLmNh
blVzZUpJVCgpOworICAgIHJldHVybiBleGVjLT52bSgpLmNhblVzZUpJVCgpOwogfQogCiAvLyBS
ZXR1cm5zIHRydWUgaWYgd2Ugc2hvdWxkIHRyeSB0byBPU1IuCkBAIC00MTQsMTMgKzQxNCwxMyBA
QCBMTElOVF9TTE9XX1BBVEhfREVDTChzdGFja19jaGVjaykKICAgICBkYXRhTG9nRigiQ29kZUJs
b2NrID0gJXAuXG4iLCBleGVjLT5jb2RlQmxvY2soKSk7CiAgICAgZGF0YUxvZ0YoIk51bSBjYWxs
ZWUgcmVnaXN0ZXJzID0gJXUuXG4iLCBleGVjLT5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdp
c3RlcnMpOwogICAgIGRhdGFMb2dGKCJOdW0gdmFycyA9ICV1LlxuIiwgZXhlYy0+Y29kZUJsb2Nr
KCktPm1fbnVtVmFycyk7Ci0gICAgZGF0YUxvZ0YoIkN1cnJlbnQgZW5kIGlzIGF0ICVwLlxuIiwg
ZXhlYy0+Z2xvYmFsRGF0YSgpLmludGVycHJldGVyLT5zdGFjaygpLmVuZCgpKTsKKyAgICBkYXRh
TG9nRigiQ3VycmVudCBlbmQgaXMgYXQgJXAuXG4iLCBleGVjLT52bSgpLmludGVycHJldGVyLT5z
dGFjaygpLmVuZCgpKTsKICNlbmRpZgotICAgIEFTU0VSVCgmZXhlYy0+cmVnaXN0ZXJzKClbZXhl
Yy0+Y29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzXSA+IGV4ZWMtPmdsb2JhbERhdGEo
KS5pbnRlcnByZXRlci0+c3RhY2soKS5lbmQoKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFnbG9iYWxE
YXRhLmludGVycHJldGVyLT5zdGFjaygpLmdyb3coJmV4ZWMtPnJlZ2lzdGVycygpW2V4ZWMtPmNv
ZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVyc10pKSkgeworICAgIEFTU0VSVCgmZXhlYy0+
cmVnaXN0ZXJzKClbZXhlYy0+Y29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzXSA+IGV4
ZWMtPnZtKCkuaW50ZXJwcmV0ZXItPnN0YWNrKCkuZW5kKCkpOworICAgIGlmIChVTkxJS0VMWSgh
dm0uaW50ZXJwcmV0ZXItPnN0YWNrKCkuZ3JvdygmZXhlYy0+cmVnaXN0ZXJzKClbZXhlYy0+Y29k
ZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzXSkpKSB7CiAgICAgICAgIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuUEMgPSBleGVjLT5yZXR1cm5QQygpOwogICAgICAgICBleGVjID0gZXhlYy0+
Y2FsbGVyRnJhbWUoKTsKLSAgICAgICAgZ2xvYmFsRGF0YS5leGNlcHRpb24gPSBjcmVhdGVTdGFj
a092ZXJmbG93RXJyb3IoZXhlYyk7CisgICAgICAgIHZtLmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNr
T3ZlcmZsb3dFcnJvcihleGVjKTsKICAgICAgICAgaW50ZXJwcmV0ZXJUaHJvd0luQ2FsbGVyKGV4
ZWMsIHJldHVyblBDKTsKICAgICAgICAgcGMgPSByZXR1cm5Ub1Rocm93Rm9yVGhyb3duRXhjZXB0
aW9uKGV4ZWMpOwogICAgIH0KQEAgLTQzMCwxMSArNDMwLDExIEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHN0YWNrX2NoZWNrKQogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NhbGxfYXJp
dHlDaGVjaykKIHsKICAgICBMTElOVF9CRUdJTigpOwotICAgIEV4ZWNTdGF0ZSogbmV3RXhlYyA9
IENvbW1vblNsb3dQYXRoczo6YXJpdHlDaGVja0ZvcihleGVjLCAmZ2xvYmFsRGF0YS5pbnRlcnBy
ZXRlci0+c3RhY2soKSwgQ29kZUZvckNhbGwpOworICAgIEV4ZWNTdGF0ZSogbmV3RXhlYyA9IENv
bW1vblNsb3dQYXRoczo6YXJpdHlDaGVja0ZvcihleGVjLCAmdm0uaW50ZXJwcmV0ZXItPnN0YWNr
KCksIENvZGVGb3JDYWxsKTsKICAgICBpZiAoIW5ld0V4ZWMpIHsKICAgICAgICAgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5QQyA9IGV4ZWMtPnJldHVyblBDKCk7CiAgICAgICAgIGV4ZWMgPSBleGVj
LT5jYWxsZXJGcmFtZSgpOwotICAgICAgICBnbG9iYWxEYXRhLmV4Y2VwdGlvbiA9IGNyZWF0ZVN0
YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsKKyAgICAgICAgdm0uZXhjZXB0aW9uID0gY3JlYXRlU3Rh
Y2tPdmVyZmxvd0Vycm9yKGV4ZWMpOwogICAgICAgICBpbnRlcnByZXRlclRocm93SW5DYWxsZXIo
ZXhlYywgcmV0dXJuUEMpOwogICAgICAgICBMTElOVF9SRVRVUk5fVFdPKGJpdHdpc2VfY2FzdDx2
b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSksIGV4ZWMpOwogICAgIH0KQEAgLTQ0NCwx
MSArNDQ0LDExIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jYWxsX2FyaXQKIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3RfYXJpdHlDaGVjaykKIHsKICAg
ICBMTElOVF9CRUdJTigpOwotICAgIEV4ZWNTdGF0ZSogbmV3RXhlYyA9IENvbW1vblNsb3dQYXRo
czo6YXJpdHlDaGVja0ZvcihleGVjLCAmZ2xvYmFsRGF0YS5pbnRlcnByZXRlci0+c3RhY2soKSwg
Q29kZUZvckNvbnN0cnVjdCk7CisgICAgRXhlY1N0YXRlKiBuZXdFeGVjID0gQ29tbW9uU2xvd1Bh
dGhzOjphcml0eUNoZWNrRm9yKGV4ZWMsICZ2bS5pbnRlcnByZXRlci0+c3RhY2soKSwgQ29kZUZv
ckNvbnN0cnVjdCk7CiAgICAgaWYgKCFuZXdFeGVjKSB7CiAgICAgICAgIFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuUEMgPSBleGVjLT5yZXR1cm5QQygpOwogICAgICAgICBleGVjID0gZXhlYy0+Y2Fs
bGVyRnJhbWUoKTsKLSAgICAgICAgZ2xvYmFsRGF0YS5leGNlcHRpb24gPSBjcmVhdGVTdGFja092
ZXJmbG93RXJyb3IoZXhlYyk7CisgICAgICAgIHZtLmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3Zl
cmZsb3dFcnJvcihleGVjKTsKICAgICAgICAgaW50ZXJwcmV0ZXJUaHJvd0luQ2FsbGVyKGV4ZWMs
IHJldHVyblBDKTsKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhiaXR3aXNlX2Nhc3Q8dm9pZCo+
KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkpLCBleGVjKTsKICAgICB9CkBAIC00NjEsNyArNDYx
LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9hYwogI2lmIExMSU5U
X1NMT1dfUEFUSF9UUkFDSU5HCiAgICAgZGF0YUxvZ0YoIkNyZWF0aW5nIGFuIGFjdGl2YXRpb24s
IGV4ZWMgPSAlcCFcbiIsIGV4ZWMpOwogI2VuZGlmCi0gICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0
aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZXhlYywgZXhlYy0+Y29kZUJs
b2NrKCkpOworICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3Jl
YXRlKHZtLCBleGVjLCBleGVjLT5jb2RlQmxvY2soKSk7CiAgICAgZXhlYy0+c2V0U2NvcGUoYWN0
aXZhdGlvbik7CiAgICAgTExJTlRfUkVUVVJOKEpTVmFsdWUoYWN0aXZhdGlvbikpOwogfQpAQCAt
NDY5LDcgKzQ2OSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfYWMK
IExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfYXJndW1lbnRzKQogewogICAg
IExMSU5UX0JFR0lOKCk7Ci0gICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVlKEFyZ3VtZW50
czo6Y3JlYXRlKGdsb2JhbERhdGEsIGV4ZWMpKTsKKyAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpT
VmFsdWUoQXJndW1lbnRzOjpjcmVhdGUodm0sIGV4ZWMpKTsKICAgICBMTElOVF9DSEVDS19FWENF
UFRJT04oKTsKICAgICBleGVjLT51bmNoZWNrZWRSKHBjWzFdLnUub3BlcmFuZCkgPSBhcmd1bWVu
dHM7CiAgICAgZXhlYy0+dW5jaGVja2VkUih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIocGNb
MV0udS5vcGVyYW5kKSkgPSBhcmd1bWVudHM7CkBAIC01MzMsNyArNTMzLDcgQEAgTExJTlRfU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19yZWdleAogICAgIFJlZ0V4cCogcmVnRXhwID0gZXhl
Yy0+Y29kZUJsb2NrKCktPnJlZ2V4cChwY1syXS51Lm9wZXJhbmQpOwogICAgIGlmICghcmVnRXhw
LT5pc1ZhbGlkKCkpCiAgICAgICAgIExMSU5UX1RIUk9XKGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMs
ICJJbnZhbGlkIGZsYWcgc3VwcGxpZWQgdG8gUmVnRXhwIGNvbnN0cnVjdG9yLiIpKTsKLSAgICBM
TElOVF9SRVRVUk4oUmVnRXhwT2JqZWN0OjpjcmVhdGUoZ2xvYmFsRGF0YSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVj
dHVyZSgpLCByZWdFeHApKTsKKyAgICBMTElOVF9SRVRVUk4oUmVnRXhwT2JqZWN0OjpjcmVhdGUo
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9ub3QpCkBAIC04NDQsNyArODQ0LDcgQEAgTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX3Jlc29sdmVfYgogICAgIGlmIChwY1szXS51Lm9wZXJhbmQpIHsKICAgICAg
ICAgcmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZUJhc2UoZXhlYywgaWRlbnQsIHRydWUsIG9wZXJh
dGlvbnMsIHBjWzVdLnUucHV0VG9CYXNlT3BlcmF0aW9uKTsKICAgICAgICAgaWYgKCFyZXN1bHQp
Ci0gICAgICAgICAgICBMTElOVF9USFJPVyhnbG9iYWxEYXRhLmV4Y2VwdGlvbik7CisgICAgICAg
ICAgICBMTElOVF9USFJPVyh2bS5leGNlcHRpb24pOwogICAgIH0gZWxzZQogICAgICAgICByZXN1
bHQgPSBKU1Njb3BlOjpyZXNvbHZlQmFzZShleGVjLCBpZGVudCwgZmFsc2UsIG9wZXJhdGlvbnMs
IHBjWzVdLnUucHV0VG9CYXNlT3BlcmF0aW9uKTsKIApAQCAtOTM5LDcgKzkzOSw3IEBAIExMSU5U
X1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfYnlfaWQKICAgICAgICAgaWYgKCFzdHJ1Y3R1
cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkKICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkpIHsKICAgICAgICAgICAgIHBj
WzRdLnUuc3RydWN0dXJlLnNldCgKLSAgICAgICAgICAgICAgICBnbG9iYWxEYXRhLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIHZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgaWYg
KGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7CiAgICAgICAgICAgICAgICAg
cGNbMF0udS5vcGNvZGUgPSBMTEludDo6Z2V0T3Bjb2RlKGxsaW50X29wX2dldF9ieV9pZCk7CiAg
ICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNs
b3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgSlNPYmplY3Q6Om9mZnNldE9m
SW5saW5lU3RvcmFnZSgpOwpAQCAtOTg2LDcgKzk4Niw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IExMSU5UX09QX0Mo
MSkuanNWYWx1ZSgpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGNvZGVCbG9jay0+aXNTdHJp
Y3RNb2RlKCkpOwogICAgIGlmIChwY1s4XS51Lm9wZXJhbmQpCi0gICAgICAgIGFzT2JqZWN0KGJh
c2VWYWx1ZSktPnB1dERpcmVjdChnbG9iYWxEYXRhLCBpZGVudCwgTExJTlRfT1BfQygzKS5qc1Zh
bHVlKCksIHNsb3QpOworICAgICAgICBhc09iamVjdChiYXNlVmFsdWUpLT5wdXREaXJlY3Qodm0s
IGlkZW50LCBMTElOVF9PUF9DKDMpLmpzVmFsdWUoKSwgc2xvdCk7CiAgICAgZWxzZQogICAgICAg
ICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCBMTElOVF9PUF9DKDMpLmpzVmFsdWUoKSwgc2xv
dCk7CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CkBAIC0xMDEzLDE3ICsxMDEzLDE3IEBA
IExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICAgICAgICAgICAg
ICAgICAgaWYgKG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIGJhc2VDZWxsKSAhPSBJbnZh
bGlkUHJvdG90eXBlQ2hhaW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1
Y3R1cmUtPnByZXZpb3VzSUQoKS0+aXNPYmplY3QoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBwY1s0XS51LnN0cnVjdHVyZS5zZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xv
YmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLT5wcmV2aW91
c0lEKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5JbmxpbmVTdG9y
YWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgSlNPYmplY3Q6Om9m
ZnNldE9mSW5saW5lU3RvcmFnZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldEluQnV0dGVy
Zmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgcGNbNl0udS5zdHJ1Y3R1cmUuc2V0KAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVy
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVD
aGFpbiogY2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGNoYWluKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHBj
WzddLnUuc3RydWN0dXJlQ2hhaW4uc2V0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
b2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNoYWluKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2hh
aW4pOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw
Y1s4XS51Lm9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbmxp
bmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCkBAIC0xMDQwLDcgKzEwNDAsNyBAQCBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkCiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBwY1s0XS51LnN0cnVjdHVyZS5z
ZXQoCi0gICAgICAgICAgICAgICAgICAgIGdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGlmIChpc0lu
bGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewogICAgICAgICAgICAgICAgICAgICBw
Y1swXS51Lm9wY29kZSA9IExMSW50OjpnZXRPcGNvZGUobGxpbnRfb3BfcHV0X2J5X2lkKTsKICAg
ICAgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5JbmxpbmVTdG9yYWdl
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpOwpAQCAtMTEwMCw3ICsxMTAwLDcgQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2dldF9hcmd1bQogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgSlNWYWx1
ZSBhcmd1bWVudHMgPSBMTElOVF9PUCgyKS5qc1ZhbHVlKCk7CiAgICAgaWYgKCFhcmd1bWVudHMp
IHsKLSAgICAgICAgYXJndW1lbnRzID0gQXJndW1lbnRzOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZXhl
Yyk7CisgICAgICAgIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKHZtLCBleGVjKTsKICAg
ICAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgICAgIExMSU5UX09QKDIpID0gYXJn
dW1lbnRzOwogICAgICAgICBleGVjLT51bmNoZWNrZWRSKHVubW9kaWZpZWRBcmd1bWVudHNSZWdp
c3RlcihwY1syXS51Lm9wZXJhbmQpKSA9IGFyZ3VtZW50czsKQEAgLTExMjgsNyArMTEyOCw3IEBA
IExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfdmEKICAgICAgICAgaWYgKGJh
c2VWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNP
YmplY3QoYmFzZVZhbHVlKTsKICAgICAgICAgICAgIGlmIChvYmplY3QtPmNhblNldEluZGV4UXVp
Y2tseShpKSkKLSAgICAgICAgICAgICAgICBvYmplY3QtPnNldEluZGV4UXVpY2tseShnbG9iYWxE
YXRhLCBpLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHko
dm0sIGksIHZhbHVlKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBvYmplY3Qt
Pm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgob2JqZWN0LCBleGVjLCBpLCB2YWx1ZSwgZXhlYy0+
Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICAgICAgICAgIExMSU5UX0VORCgpOwpA
QCAtMTIwMyw5ICsxMjAzLDkgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9n
ZXR0ZQogICAgIEFTU0VSVChnZXR0ZXIuaXNPYmplY3QoKSB8fCBzZXR0ZXIuaXNPYmplY3QoKSk7
CiAgICAgCiAgICAgaWYgKCFnZXR0ZXIuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgYWNjZXNzb3It
PnNldEdldHRlcihnbG9iYWxEYXRhLCBhc09iamVjdChnZXR0ZXIpKTsKKyAgICAgICAgYWNjZXNz
b3ItPnNldEdldHRlcih2bSwgYXNPYmplY3QoZ2V0dGVyKSk7CiAgICAgaWYgKCFzZXR0ZXIuaXNV
bmRlZmluZWQoKSkKLSAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihnbG9iYWxEYXRhLCBhc09i
amVjdChzZXR0ZXIpKTsKKyAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcih2bSwgYXNPYmplY3Qo
c2V0dGVyKSk7CiAgICAgYmFzZU9iai0+cHV0RGlyZWN0QWNjZXNzb3IoCiAgICAgICAgIGV4ZWMs
CiAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHBjWzJdLnUub3BlcmFuZCks
CkBAIC0xMzQzLDcgKzEzNDMsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3
X2Z1bmNfCiBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0
ZSogZXhlY0NhbGxlZSwgSW5zdHJ1Y3Rpb24qIHBjLCBKU1ZhbHVlIGNhbGxlZSwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUt
PmNhbGxlckZyYW1lKCk7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKICAgICBleGVjQ2FsbGVlLT5z
ZXRTY29wZShleGVjLT5zY29wZSgpKTsKICAgICBleGVjQ2FsbGVlLT5zZXRDb2RlQmxvY2soMCk7
CkBAIC0xMzU2LDkgKzEzNTYsOSBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhv
c3RDYWxsCiAgICAgICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZUpTKTsKICAgICAKICAg
ICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSG9zdCkgewotICAgICAgICAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlY0NhbGxlZSk7CisgICAgICAg
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlY0NhbGxlZSk7CiAgICAg
ICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7Ci0gICAgICAg
ICAgICBnbG9iYWxEYXRhLmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY2Fs
bERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKKyAgICAgICAgICAgIHZtLmhvc3RD
YWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9u
KGV4ZWNDYWxsZWUpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRV
Uk4oZXhlY0NhbGxlZSwgcGMsIExMSW50OjpnZXRDb2RlUHRyKGdldEhvc3RDYWxsUmV0dXJuVmFs
dWUpKTsKICAgICAgICAgfQpAQCAtMTM3OSw5ICsxMzc5LDkgQEAgc3RhdGljIFNsb3dQYXRoUmV0
dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAogICAgIEFTU0VSVChjb25zdHJ1Y3RUeXBlICE9IENvbnN0
cnVjdFR5cGVKUyk7CiAgICAgCiAgICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlw
ZUhvc3QpIHsKLSAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0
YSwgZXhlY0NhbGxlZSk7CisgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjQ2FsbGVlKTsKICAgICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNh
bGxlZSkpOwotICAgICAgICBnbG9iYWxEYXRhLmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOworICAg
ICAgICB2bS5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERh
dGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKIAogICAgICAgICBMTElOVF9DQUxMX1JF
VFVSTihleGVjQ2FsbGVlLCBwYywgTExJbnQ6OmdldENvZGVQdHIoZ2V0SG9zdENhbGxSZXR1cm5W
YWx1ZSkpOwogICAgIH0KQEAgLTE0MDYsNyArMTQwNiw3IEBAIGlubGluZSBTbG93UGF0aFJldHVy
blR5cGUgc2V0VXBDYWxsKEV4ZWMKICAgICAKICAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nh
c3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKICAgICBKU1Njb3BlKiBzY29w
ZSA9IGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKTsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEgPSAqc2NvcGUtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSAqc2NvcGUtPnZtKCk7CiAg
ICAgZXhlY0NhbGxlZS0+c2V0U2NvcGUoc2NvcGUpOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVj
dXRhYmxlID0gY2FsbGVlLT5leGVjdXRhYmxlKCk7CiAgICAgCkBAIC0xNDMxLDggKzE0MzEsOCBA
QCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChFeGVjCiAgICAgICAgIGlmIChj
YWxsTGlua0luZm8tPmlzT25MaXN0KCkpCiAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnJlbW92
ZSgpOwogICAgICAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZXIgPSBleGVjQ2FsbGVlLT5jYWxsZXJG
cmFtZSgpOwotICAgICAgICBjYWxsTGlua0luZm8tPmNhbGxlZS5zZXQoZ2xvYmFsRGF0YSwgZXhl
Y0NhbGxlci0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwotICAgICAg
ICBjYWxsTGlua0luZm8tPmxhc3RTZWVuQ2FsbGVlLnNldChnbG9iYWxEYXRhLCBleGVjQ2FsbGVy
LT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CisgICAgICAgIGNhbGxM
aW5rSW5mby0+Y2FsbGVlLnNldCh2bSwgZXhlY0NhbGxlci0+Y29kZUJsb2NrKCktPm93bmVyRXhl
Y3V0YWJsZSgpLCBjYWxsZWUpOworICAgICAgICBjYWxsTGlua0luZm8tPmxhc3RTZWVuQ2FsbGVl
LnNldCh2bSwgZXhlY0NhbGxlci0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxs
ZWUpOwogICAgICAgICBjYWxsTGlua0luZm8tPm1hY2hpbmVDb2RlVGFyZ2V0ID0gY29kZVB0cjsK
ICAgICAgICAgaWYgKGNvZGVCbG9jaykKICAgICAgICAgICAgIGNvZGVCbG9jay0+bGlua0luY29t
aW5nQ2FsbChjYWxsTGlua0luZm8pOwpAQCAtMTQ4NCw3ICsxNDg0LDcgQEAgTExJTlRfU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX2NhbGxfdmFyYQogICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9
IExMSU5UX09QX0MoMSkuanNWYWx1ZSgpOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxl
ZSA9IGxvYWRWYXJhcmdzKAotICAgICAgICBleGVjLCAmZ2xvYmFsRGF0YS5pbnRlcnByZXRlci0+
c3RhY2soKSwKKyAgICAgICAgZXhlYywgJnZtLmludGVycHJldGVyLT5zdGFjaygpLAogICAgICAg
ICBMTElOVF9PUF9DKDIpLmpzVmFsdWUoKSwgTExJTlRfT1BfQygzKS5qc1ZhbHVlKCksIHBjWzRd
LnUub3BlcmFuZCk7CiAgICAgTExJTlRfQ0FMTF9DSEVDS19FWENFUFRJT04oZXhlYywgcGMpOwog
ICAgIApAQCAtMTUxMyw3ICsxNTEzLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X2NhbGxfZXZhbAogICAgIGlmICghaXNIb3N0RnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSwgZ2xvYmFs
RnVuY0V2YWwpKQogICAgICAgICByZXR1cm4gc2V0VXBDYWxsKGV4ZWNDYWxsZWUsIHBjLCBDb2Rl
Rm9yQ2FsbCwgY2FsbGVlQXNWYWx1ZSk7CiAgICAgCi0gICAgZ2xvYmFsRGF0YS5ob3N0Q2FsbFJl
dHVyblZhbHVlID0gZXZhbChleGVjQ2FsbGVlKTsKKyAgICB2bS5ob3N0Q2FsbFJldHVyblZhbHVl
ID0gZXZhbChleGVjQ2FsbGVlKTsKICAgICBMTElOVF9DQUxMX1JFVFVSTihleGVjQ2FsbGVlLCBw
YywgTExJbnQ6OmdldENvZGVQdHIoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkpOwogfQogCkBAIC0x
NTIxLDcgKzE1MjEsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGVhcl9vZmZf
CiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBBU1NFUlQoZXhlYy0+Y29kZUJsb2NrKCktPm5l
ZWRzRnVsbFNjb3BlQ2hhaW4oKSk7Ci0gICAganNDYXN0PEpTQWN0aXZhdGlvbio+KExMSU5UX09Q
KDEpLmpzVmFsdWUoKSktPnRlYXJPZmYoZ2xvYmFsRGF0YSk7CisgICAganNDYXN0PEpTQWN0aXZh
dGlvbio+KExMSU5UX09QKDEpLmpzVmFsdWUoKSktPnRlYXJPZmYodm0pOwogICAgIExMSU5UX0VO
RCgpOwogfQogCkBAIC0xNjMxLDggKzE2MzEsOCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfdGhyb3dfc3RhCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfaGFuZGxlX3dh
dGNoZG9nX3RpbWVyKQogewogICAgIExMSU5UX0JFR0lOX05PX1NFVF9QQygpOwotICAgIGlmIChV
TkxJS0VMWShnbG9iYWxEYXRhLndhdGNoZG9nLmRpZEZpcmUoZXhlYykpKQotICAgICAgICBMTElO
VF9USFJPVyhjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKCZnbG9iYWxEYXRhKSk7
CisgICAgaWYgKFVOTElLRUxZKHZtLndhdGNoZG9nLmRpZEZpcmUoZXhlYykpKQorICAgICAgICBM
TElOVF9USFJPVyhjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKCZ2bSkpOwogICAg
IExMSU5UX1JFVFVSTl9UV08oMCwgZXhlYyk7CiB9CiAKQEAgLTE2NDQsNyArMTY0NCw3IEBAIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9kZWJ1ZykKICAgICBpbnQgbGFzdExpbmUgPSBw
Y1szXS51Lm9wZXJhbmQ7CiAgICAgaW50IGNvbHVtbiA9IHBjWzRdLnUub3BlcmFuZDsKIAotICAg
IGdsb2JhbERhdGEuaW50ZXJwcmV0ZXItPmRlYnVnKGV4ZWMsIHN0YXRpY19jYXN0PERlYnVnSG9v
a0lEPihkZWJ1Z0hvb2tJRCksIGZpcnN0TGluZSwgbGFzdExpbmUsIGNvbHVtbik7CisgICAgdm0u
aW50ZXJwcmV0ZXItPmRlYnVnKGV4ZWMsIHN0YXRpY19jYXN0PERlYnVnSG9va0lEPihkZWJ1Z0hv
b2tJRCksIGZpcnN0TGluZSwgbGFzdExpbmUsIGNvbHVtbik7CiAgICAgCiAgICAgTExJTlRfRU5E
KCk7CiB9CkBAIC0xNjUyLDcgKzE2NTIsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfZGVidWcpCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHJvZmlsZV93aWxsX2Nh
bGwpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKLSAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2Zp
bGVyID0gZ2xvYmFsRGF0YS5lbmFibGVkUHJvZmlsZXIoKSkKKyAgICBpZiAoTGVnYWN5UHJvZmls
ZXIqIHByb2ZpbGVyID0gdm0uZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAgIHByb2ZpbGVyLT53
aWxsRXhlY3V0ZShleGVjLCBMTElOVF9PUCgxKS5qc1ZhbHVlKCkpOwogICAgIExMSU5UX0VORCgp
OwogfQpAQCAtMTY2MCw3ICsxNjYwLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X3Byb2ZpbGVfdwogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Byb2ZpbGVfZGlkX2Nh
bGwpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKLSAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2Zp
bGVyID0gZ2xvYmFsRGF0YS5lbmFibGVkUHJvZmlsZXIoKSkKKyAgICBpZiAoTGVnYWN5UHJvZmls
ZXIqIHByb2ZpbGVyID0gdm0uZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAgIHByb2ZpbGVyLT5k
aWRFeGVjdXRlKGV4ZWMsIExMSU5UX09QKDEpLmpzVmFsdWUoKSk7CiAgICAgTExJTlRfRU5EKCk7
CiB9CkBAIC0xNjY4LDcgKzE2NjgsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
cHJvZmlsZV9kCiBMTElOVF9TTE9XX1BBVEhfREVDTCh0aHJvd19mcm9tX25hdGl2ZV9jYWxsKQog
ewogICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgQVNTRVJUKGdsb2JhbERhdGEuZXhjZXB0aW9uKTsK
KyAgICBBU1NFUlQodm0uZXhjZXB0aW9uKTsKICAgICBMTElOVF9FTkQoKTsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCShyZXZpc2lvbiAx
NDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
TExJbnQgewogCiAjaWYgIUVOQUJMRShMTElOVF9DX0xPT1ApCiAKLXN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8oSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCB2b2lkICgqdGFyZ2V0KSgpLCBjb25zdCBjaGFyICp0aHVua0tpbmQpCitzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKFZNKiB2bSwgdm9pZCAo
KnRhcmdldCkoKSwgY29uc3QgY2hhciAqdGh1bmtLaW5kKQogewogICAgIEpTSW50ZXJmYWNlSklU
IGppdDsKICAgICAKQEAgLTQ2LDM4ICs0NiwzOCBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGdlbmVyYXRlVGh1CiAgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1Q
dHIoYml0d2lzZV9jYXN0PHZvaWQqPih0YXJnZXQpKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsK
ICAgICBqaXQuanVtcChKU0ludGVyZmFjZUpJVDo6cmVnVDApOwogICAgIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiTExJbnQgJXMgcHJvbG9ndWUgdGh1
bmsiLCB0aHVua0tpbmQpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9y
Q2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZt
KQogewotICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyhnbG9iYWxEYXRhLCBsbGlu
dF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSwgImZ1bmN0aW9uIGZvciBjYWxsIik7CisgICAg
cmV0dXJuIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKHZtLCBsbGludF9mdW5jdGlvbl9mb3JfY2Fs
bF9wcm9sb2d1ZSwgImZ1bmN0aW9uIGZvciBjYWxsIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBmdW5jdGlvbkZvckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ29uc3RydWN0
RW50cnlUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIGdlbmVyYXRlVGh1bmtX
aXRoSnVtcFRvKGdsb2JhbERhdGEsIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9n
dWUsICJmdW5jdGlvbiBmb3IgY29uc3RydWN0Iik7CisgICAgcmV0dXJuIGdlbmVyYXRlVGh1bmtX
aXRoSnVtcFRvKHZtLCBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlLCAiZnVu
Y3Rpb24gZm9yIGNvbnN0cnVjdCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rp
b25Gb3JDYWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvckNhbGxBcml0eUNoZWNrVGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyhn
bG9iYWxEYXRhLCBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjaywgImZ1bmN0aW9u
IGZvciBjYWxsIHdpdGggYXJpdHkgY2hlY2siKTsKKyAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dp
dGhKdW1wVG8odm0sIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrLCAiZnVuY3Rp
b24gZm9yIGNhbGwgd2l0aCBhcml0eSBjaGVjayIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgZnVuY3Rpb25Gb3JDb25zdHJ1Y3RBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ29uc3Ry
dWN0QXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gZ2VuZXJh
dGVUaHVua1dpdGhKdW1wVG8oZ2xvYmFsRGF0YSwgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVj
dF9hcml0eV9jaGVjaywgImZ1bmN0aW9uIGZvciBjb25zdHJ1Y3Qgd2l0aCBhcml0eSBjaGVjayIp
OworICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyh2bSwgbGxpbnRfZnVuY3Rpb25f
Zm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjaywgImZ1bmN0aW9uIGZvciBjb25zdHJ1Y3Qgd2l0aCBh
cml0eSBjaGVjayIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXZhbEVudHJ5VGh1bmtH
ZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGV2YWxFbnRyeVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gZ2VuZXJhdGVU
aHVua1dpdGhKdW1wVG8oZ2xvYmFsRGF0YSwgbGxpbnRfZXZhbF9wcm9sb2d1ZSwgImV2YWwiKTsK
KyAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8odm0sIGxsaW50X2V2YWxfcHJvbG9n
dWUsICJldmFsIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBwcm9ncmFtRW50cnlUaHVu
a0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgcHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBnZW5l
cmF0ZVRodW5rV2l0aEp1bXBUbyhnbG9iYWxEYXRhLCBsbGludF9wcm9ncmFtX3Byb2xvZ3VlLCAi
cHJvZ3JhbSIpOworICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyh2bSwgbGxpbnRf
cHJvZ3JhbV9wcm9sb2d1ZSwgInByb2dyYW0iKTsKIH0KIAogI2VuZGlmIC8vICFFTkFCTEUoTExJ
TlRfQ19MT09QKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtz
LmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFRodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxNiArMzQsMTYgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwogCiBuYW1lc3BhY2UgTExJ
bnQgewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JDYWxsRW50cnlUaHVua0dl
bmVyYXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZv
ckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7Ci1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ29uc3RydWN0QXJp
dHlDaGVja1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGV2YWxFbnRyeVRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0q
KTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvckNvbnN0cnVjdEVudHJ5VGh1bmtH
ZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvckNhbGxBcml0
eUNoZWNrVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlv
bkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGV2YWxFbnRyeVRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgcHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qKTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkxMSW50CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAxNDg2NTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFz
bQkod29ya2luZyBjb3B5KQpAQCAtMzEwLDkgKzMxMCw5IEBAIG1hY3JvIGZ1bmN0aW9uQXJpdHlD
aGVjayhkb25lTGFiZWwsIHNsb3cKICAgICBjQ2FsbDIoc2xvd19wYXRoLCBjZnIsIFBDKSAgICMg
VGhpcyBzbG93X3BhdGggaGFzIGEgc2ltcGxlIHByb3RvY29sOiB0MCA9IDAgPT4gbm8gZXJyb3Is
IHQwICE9IDAgPT4gZXJyb3IKICAgICBtb3ZlIHQxLCBjZnIKICAgICBidGl6IHQwLCAuY29udGlu
dWUKLSAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjpnbG9iYWxEYXRhW3NwXSwgdDEKLSAgICBsb2Fk
cCBKU0dsb2JhbERhdGE6OmNhbGxGcmFtZUZvclRocm93W3QxXSwgdDAKLSAgICBqbXAgSlNHbG9i
YWxEYXRhOjp0YXJnZXRNYWNoaW5lUENGb3JUaHJvd1t0MV0KKyAgICBsb2FkcCBKSVRTdGFja0Zy
YW1lOjp2bVtzcF0sIHQxCisgICAgbG9hZHAgVk06OmNhbGxGcmFtZUZvclRocm93W3QxXSwgdDAK
KyAgICBqbXAgVk06OnRhcmdldE1hY2hpbmVQQ0ZvclRocm93W3QxXQogLmNvbnRpbnVlOgogICAg
ICMgUmVsb2FkIENvZGVCbG9jayBhbmQgUEMsIHNpbmNlIHRoZSBzbG93X3BhdGggY2xvYmJlcmVk
IGl0LgogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MQpAQCAtMTc2OSwxNCArMTc2OSwxNCBA
QCBfbGxpbnRfb3BfY2F0Y2g6CiAgICAgIyB0aGUgaW50ZXJwcmV0ZXIncyB0aHJvdyB0cmFtcG9s
aW5lIChzZWUgX2xsaW50X3Rocm93X3RyYW1wb2xpbmUpLgogICAgICMgVGhlIEpJVCB0aHJvd2lu
ZyBwcm90b2NvbCBjYWxscyBmb3IgdGhlIGNmciB0byBiZSBpbiB0MC4gVGhlIHRocm93aW5nCiAg
ICAgIyBjb2RlIG11c3QgaGF2ZSBrbm93biB0aGF0IHdlIHdlcmUgdGhyb3dpbmcgdG8gdGhlIGlu
dGVycHJldGVyLCBhbmQgaGF2ZQotICAgICMgc2V0IEpTR2xvYmFsRGF0YTo6dGFyZ2V0SW50ZXJw
cmV0ZXJQQ0ZvclRocm93LgorICAgICMgc2V0IFZNOjp0YXJnZXRJbnRlcnByZXRlclBDRm9yVGhy
b3cuCiAgICAgbW92ZSB0MCwgY2ZyCi0gICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0
YVtzcF0sIHQzCi0gICAgbG9hZGkgSlNHbG9iYWxEYXRhOjp0YXJnZXRJbnRlcnByZXRlclBDRm9y
VGhyb3dbdDNdLCBQQwotICAgIGxvYWRpIEpTR2xvYmFsRGF0YTo6ZXhjZXB0aW9uICsgUGF5bG9h
ZE9mZnNldFt0M10sIHQwCi0gICAgbG9hZGkgSlNHbG9iYWxEYXRhOjpleGNlcHRpb24gKyBUYWdP
ZmZzZXRbdDNdLCB0MQotICAgIHN0b3JlaSAwLCBKU0dsb2JhbERhdGE6OmV4Y2VwdGlvbiArIFBh
eWxvYWRPZmZzZXRbdDNdCi0gICAgc3RvcmVpIEVtcHR5VmFsdWVUYWcsIEpTR2xvYmFsRGF0YTo6
ZXhjZXB0aW9uICsgVGFnT2Zmc2V0W3QzXSAgICAgICAKKyAgICBsb2FkcCBKSVRTdGFja0ZyYW1l
Ojp2bVtzcF0sIHQzCisgICAgbG9hZGkgVk06OnRhcmdldEludGVycHJldGVyUENGb3JUaHJvd1t0
M10sIFBDCisgICAgbG9hZGkgVk06OmV4Y2VwdGlvbiArIFBheWxvYWRPZmZzZXRbdDNdLCB0MAor
ICAgIGxvYWRpIFZNOjpleGNlcHRpb24gKyBUYWdPZmZzZXRbdDNdLCB0MQorICAgIHN0b3JlaSAw
LCBWTTo6ZXhjZXB0aW9uICsgUGF5bG9hZE9mZnNldFt0M10KKyAgICBzdG9yZWkgRW1wdHlWYWx1
ZVRhZywgVk06OmV4Y2VwdGlvbiArIFRhZ09mZnNldFt0M10gICAgICAgCiAgICAgbG9hZGkgNFtQ
Q10sIHQyCiAgICAgc3RvcmVpIHQwLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDIsIDhdCiAgICAgc3Rv
cmVpIHQxLCBUYWdPZmZzZXRbY2ZyLCB0MiwgOF0KQEAgLTE4NjMsMTYgKzE4NjMsMTYgQEAgX2xs
aW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmU6CiAgICAgIyBXaGVuIHRocm93aW5n
IGZyb20gdGhlIGludGVycHJldGVyIChpLmUuIHRocm93aW5nIGZyb20gTExJbnRTbG93UGF0aHMp
LCBzbwogICAgICMgdGhlIHRocm93IHRhcmdldCBpcyBub3QgbmVjZXNzYXJpbHkgaW50ZXJwcmV0
ZWQgY29kZSwgd2UgY29tZSB0byBoZXJlLgogICAgICMgVGhpcyBlc3NlbnRpYWxseSBlbXVsYXRl
cyB0aGUgSklUJ3MgdGhyb3dpbmcgcHJvdG9jb2wuCi0gICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6
Z2xvYmFsRGF0YVtzcF0sIHQxCi0gICAgbG9hZHAgSlNHbG9iYWxEYXRhOjpjYWxsRnJhbWVGb3JU
aHJvd1t0MV0sIHQwCi0gICAgam1wIEpTR2xvYmFsRGF0YTo6dGFyZ2V0TWFjaGluZVBDRm9yVGhy
b3dbdDFdCisgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6dm1bc3BdLCB0MQorICAgIGxvYWRwIFZN
OjpjYWxsRnJhbWVGb3JUaHJvd1t0MV0sIHQwCisgICAgam1wIFZNOjp0YXJnZXRNYWNoaW5lUENG
b3JUaHJvd1t0MV0KIAogCiBfbGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGluZToKICAg
ICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwodDIpCi0gICAgbG9hZHAgSklUU3RhY2tG
cmFtZTo6Z2xvYmFsRGF0YVtzcF0sIHQxCi0gICAgbG9hZHAgSlNHbG9iYWxEYXRhOjpjYWxsRnJh
bWVGb3JUaHJvd1t0MV0sIHQwCi0gICAgam1wIEpTR2xvYmFsRGF0YTo6dGFyZ2V0TWFjaGluZVBD
Rm9yVGhyb3dbdDFdCisgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6dm1bc3BdLCB0MQorICAgIGxv
YWRwIFZNOjpjYWxsRnJhbWVGb3JUaHJvd1t0MV0sIHQwCisgICAgam1wIFZNOjp0YXJnZXRNYWNo
aW5lUENGb3JUaHJvd1t0MV0KIAogCiBtYWNybyBuYXRpdmVDYWxsVHJhbXBvbGluZShleGVjdXRh
YmxlT2Zmc2V0VG9GdW5jdGlvbikKQEAgLTE4ODIsOCArMTg4Miw4IEBAIG1hY3JvIG5hdGl2ZUNh
bGxUcmFtcG9saW5lKGV4ZWN1dGFibGVPZmYKICAgICBzdG9yZWkgQ2VsbFRhZywgU2NvcGVDaGFp
biArIFRhZ09mZnNldFtjZnJdCiAgICAgc3RvcmVpIHQxLCBTY29wZUNoYWluICsgUGF5bG9hZE9m
ZnNldFtjZnJdCiAgICAgaWYgWDg2Ci0gICAgICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6Omdsb2Jh
bERhdGEgKyA0W3NwXSwgdDMgIyBBZGRpdGlvbmFsIG9mZnNldCBmb3IgcmV0dXJuIGFkZHJlc3MK
LSAgICAgICAgc3RvcmVwIGNmciwgSlNHbG9iYWxEYXRhOjp0b3BDYWxsRnJhbWVbdDNdCisgICAg
ICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6OnZtICsgNFtzcF0sIHQzICMgQWRkaXRpb25hbCBvZmZz
ZXQgZm9yIHJldHVybiBhZGRyZXNzCisgICAgICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BDYWxsRnJh
bWVbdDNdCiAgICAgICAgIHBlZWsgMCwgdDEKICAgICAgICAgc3RvcmVwIHQxLCBSZXR1cm5QQ1tj
ZnJdCiAgICAgICAgIG1vdmUgY2ZyLCB0MiAgIyB0MiA9IGVjeApAQCAtMTg5MywxMCArMTg5Mywx
MCBAQCBtYWNybyBuYXRpdmVDYWxsVHJhbXBvbGluZShleGVjdXRhYmxlT2ZmCiAgICAgICAgIG1v
dmUgdDAsIGNmcgogICAgICAgICBjYWxsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uW3QxXQog
ICAgICAgICBhZGRwIDE2IC0gNCwgc3AKLSAgICAgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xv
YmFsRGF0YSArIDRbc3BdLCB0MworICAgICAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjp2bSArIDRb
c3BdLCB0MwogICAgIGVsc2lmIEFSTSBvciBBUk12NyBvciBBUk12N19UUkFESVRJT05BTAotICAg
ICAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjpnbG9iYWxEYXRhW3NwXSwgdDMKLSAgICAgICAgc3Rv
cmVwIGNmciwgSlNHbG9iYWxEYXRhOjp0b3BDYWxsRnJhbWVbdDNdCisgICAgICAgIGxvYWRwIEpJ
VFN0YWNrRnJhbWU6OnZtW3NwXSwgdDMKKyAgICAgICAgc3RvcmVwIGNmciwgVk06OnRvcENhbGxG
cmFtZVt0M10KICAgICAgICAgbW92ZSB0MCwgdDIKICAgICAgICAgcHJlc2VydmVSZXR1cm5BZGRy
ZXNzQWZ0ZXJDYWxsKHQzKQogICAgICAgICBzdG9yZXAgdDMsIFJldHVyblBDW2Nmcl0KQEAgLTE5
MDYsMTAgKzE5MDYsMTAgQEAgbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhlY3V0YWJsZU9m
ZgogICAgICAgICBtb3ZlIHQyLCBjZnIKICAgICAgICAgY2FsbCBleGVjdXRhYmxlT2Zmc2V0VG9G
dW5jdGlvblt0MV0KICAgICAgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4odDMp
Ci0gICAgICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6Omdsb2JhbERhdGFbc3BdLCB0MworICAgICAg
ICBsb2FkcCBKSVRTdGFja0ZyYW1lOjp2bVtzcF0sIHQzCiAgICAgZWxzaWYgTUlQUwotICAgICAg
ICBsb2FkcCBKSVRTdGFja0ZyYW1lOjpnbG9iYWxEYXRhW3NwXSwgdDMKLSAgICAgICAgc3RvcmVw
IGNmciwgSlNHbG9iYWxEYXRhOjp0b3BDYWxsRnJhbWVbdDNdCisgICAgICAgIGxvYWRwIEpJVFN0
YWNrRnJhbWU6OnZtW3NwXSwgdDMKKyAgICAgICAgc3RvcmVwIGNmciwgVk06OnRvcENhbGxGcmFt
ZVt0M10KICAgICAgICAgbW92ZSB0MCwgdDIKICAgICAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNz
QWZ0ZXJDYWxsKHQzKQogICAgICAgICBzdG9yZXAgdDMsIFJldHVyblBDW2Nmcl0KQEAgLTE5MjAs
MTAgKzE5MjAsMTAgQEAgbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhlY3V0YWJsZU9mZgog
ICAgICAgICBtb3ZlIHQwLCBhMAogICAgICAgICBjYWxsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0
aW9uW3QxXQogICAgICAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybih0MykKLSAg
ICAgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0YVtzcF0sIHQzCisgICAgICAgIGxv
YWRwIEpJVFN0YWNrRnJhbWU6OnZtW3NwXSwgdDMKICAgICBlbHNpZiBTSDQKLSAgICAgICAgbG9h
ZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0YVtzcF0sIHQzCi0gICAgICAgIHN0b3JlcCBjZnIs
IEpTR2xvYmFsRGF0YTo6dG9wQ2FsbEZyYW1lW3QzXQorICAgICAgICBsb2FkcCBKSVRTdGFja0Zy
YW1lOjp2bVtzcF0sIHQzCisgICAgICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BDYWxsRnJhbWVbdDNd
CiAgICAgICAgIG1vdmUgdDAsIHQyCiAgICAgICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVy
Q2FsbCh0MykKICAgICAgICAgc3RvcmVwIHQzLCBSZXR1cm5QQ1tjZnJdCkBAIC0xOTMzLDEwICsx
OTMzLDEwIEBAIG1hY3JvIG5hdGl2ZUNhbGxUcmFtcG9saW5lKGV4ZWN1dGFibGVPZmYKICAgICAg
ICAgbW92ZSB0MiwgY2ZyCiAgICAgICAgIGNhbGwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb25b
dDFdCiAgICAgICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHQzKQotICAgICAg
ICBsb2FkcCBKSVRTdGFja0ZyYW1lOjpnbG9iYWxEYXRhW3NwXSwgdDMKKyAgICAgICAgbG9hZHAg
SklUU3RhY2tGcmFtZTo6dm1bc3BdLCB0MwogICAgIGVsc2lmIENfTE9PUAotICAgICAgICBsb2Fk
cCBKSVRTdGFja0ZyYW1lOjpnbG9iYWxEYXRhW3NwXSwgdDMKLSAgICAgICAgc3RvcmVwIGNmciwg
SlNHbG9iYWxEYXRhOjp0b3BDYWxsRnJhbWVbdDNdCisgICAgICAgIGxvYWRwIEpJVFN0YWNrRnJh
bWU6OnZtW3NwXSwgdDMKKyAgICAgICAgc3RvcmVwIGNmciwgVk06OnRvcENhbGxGcmFtZVt0M10K
ICAgICAgICAgbW92ZSB0MCwgdDIKICAgICAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJD
YWxsKHQzKQogICAgICAgICBzdG9yZXAgdDMsIFJldHVyblBDW2Nmcl0KQEAgLTE5NDYsMTEgKzE5
NDYsMTEgQEAgbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhlY3V0YWJsZU9mZgogICAgICAg
ICBtb3ZlIHQyLCBjZnIKICAgICAgICAgY2xvb3BDYWxsTmF0aXZlIGV4ZWN1dGFibGVPZmZzZXRU
b0Z1bmN0aW9uW3QxXQogICAgICAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybih0
MykKLSAgICAgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0YVtzcF0sIHQzCisgICAg
ICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6OnZtW3NwXSwgdDMKICAgICBlbHNlICAKICAgICAgICAg
ZXJyb3IKICAgICBlbmQKLSAgICBiaW5lcSBKU0dsb2JhbERhdGE6OmV4Y2VwdGlvbiArIFRhZ09m
ZnNldFt0M10sIEVtcHR5VmFsdWVUYWcsIC5leGNlcHRpb24KKyAgICBiaW5lcSBWTTo6ZXhjZXB0
aW9uICsgVGFnT2Zmc2V0W3QzXSwgRW1wdHlWYWx1ZVRhZywgLmV4Y2VwdGlvbgogICAgIHJldAog
LmV4Y2VwdGlvbjoKICAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwodDEpICMgVGhp
cyBpcyByZWFsbHkgb25seSBuZWVkZWQgb24gWDg2CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24g
MTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTE5Niw5ICsxOTYsOSBAQCBtYWNybyBmdW5jdGlv
bkFyaXR5Q2hlY2soZG9uZUxhYmVsLCBzbG93CiAgICAgY0NhbGwyKHNsb3dfcGF0aCwgY2ZyLCBQ
QykgICAjIFRoaXMgc2xvd19wYXRoIGhhcyBhIHNpbXBsZSBwcm90b2NvbDogdDAgPSAwID0+IG5v
IGVycm9yLCB0MCAhPSAwID0+IGVycm9yCiAgICAgbW92ZSB0MSwgY2ZyCiAgICAgYnRpeiB0MCwg
LmNvbnRpbnVlCi0gICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0YVtzcF0sIHQxCi0g
ICAgbG9hZHAgSlNHbG9iYWxEYXRhOjpjYWxsRnJhbWVGb3JUaHJvd1t0MV0sIHQwCi0gICAgam1w
IEpTR2xvYmFsRGF0YTo6dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3dbdDFdCisgICAgbG9hZHAgSklU
U3RhY2tGcmFtZTo6dm1bc3BdLCB0MQorICAgIGxvYWRwIFZNOjpjYWxsRnJhbWVGb3JUaHJvd1t0
MV0sIHQwCisgICAgam1wIFZNOjp0YXJnZXRNYWNoaW5lUENGb3JUaHJvd1t0MV0KIC5jb250aW51
ZToKICAgICAjIFJlbG9hZCBDb2RlQmxvY2sgYW5kIHJlc2V0IFBDLCBzaW5jZSB0aGUgc2xvd19w
YXRoIGNsb2JiZXJlZCB0aGVtLgogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MQpAQCAtMTU5
NywxNiArMTU5NywxNiBAQCBfbGxpbnRfb3BfY2F0Y2g6CiAgICAgIyB0aGUgaW50ZXJwcmV0ZXIn
cyB0aHJvdyB0cmFtcG9saW5lIChzZWUgX2xsaW50X3Rocm93X3RyYW1wb2xpbmUpLgogICAgICMg
VGhlIEpJVCB0aHJvd2luZyBwcm90b2NvbCBjYWxscyBmb3IgdGhlIGNmciB0byBiZSBpbiB0MC4g
VGhlIHRocm93aW5nCiAgICAgIyBjb2RlIG11c3QgaGF2ZSBrbm93biB0aGF0IHdlIHdlcmUgdGhy
b3dpbmcgdG8gdGhlIGludGVycHJldGVyLCBhbmQgaGF2ZQotICAgICMgc2V0IEpTR2xvYmFsRGF0
YTo6dGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93LgorICAgICMgc2V0IFZNOjp0YXJnZXRJbnRl
cnByZXRlclBDRm9yVGhyb3cuCiAgICAgbW92ZSB0MCwgY2ZyCiAgICAgbG9hZHAgQ29kZUJsb2Nr
W2Nmcl0sIFBCCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2luc3RydWN0aW9uc1tQQl0sIFBCCi0g
ICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0YVtzcF0sIHQzCi0gICAgbG9hZHAgSlNH
bG9iYWxEYXRhOjp0YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3dbdDNdLCBQQworICAgIGxvYWRw
IEpJVFN0YWNrRnJhbWU6OnZtW3NwXSwgdDMKKyAgICBsb2FkcCBWTTo6dGFyZ2V0SW50ZXJwcmV0
ZXJQQ0ZvclRocm93W3QzXSwgUEMKICAgICBzdWJwIFBCLCBQQwogICAgIHJzaGlmdHAgMywgUEMK
LSAgICBsb2FkcSBKU0dsb2JhbERhdGE6OmV4Y2VwdGlvblt0M10sIHQwCi0gICAgc3RvcmVxIDAs
IEpTR2xvYmFsRGF0YTo6ZXhjZXB0aW9uW3QzXQorICAgIGxvYWRxIFZNOjpleGNlcHRpb25bdDNd
LCB0MAorICAgIHN0b3JlcSAwLCBWTTo6ZXhjZXB0aW9uW3QzXQogICAgIGxvYWRpc0Zyb21JbnN0
cnVjdGlvbigxLCB0MikKICAgICBzdG9yZXEgdDAsIFtjZnIsIHQyLCA4XQogICAgIHRyYWNlRXhl
Y3V0aW9uKCkKQEAgLTE2MjYsMTYgKzE2MjYsMTYgQEAgX2xsaW50X3Rocm93X2Zyb21fc2xvd19w
YXRoX3RyYW1wb2xpbmU6CiAgICAgIyBXaGVuIHRocm93aW5nIGZyb20gdGhlIGludGVycHJldGVy
IChpLmUuIHRocm93aW5nIGZyb20gTExJbnRTbG93UGF0aHMpLCBzbwogICAgICMgdGhlIHRocm93
IHRhcmdldCBpcyBub3QgbmVjZXNzYXJpbHkgaW50ZXJwcmV0ZWQgY29kZSwgd2UgY29tZSB0byBo
ZXJlLgogICAgICMgVGhpcyBlc3NlbnRpYWxseSBlbXVsYXRlcyB0aGUgSklUJ3MgdGhyb3dpbmcg
cHJvdG9jb2wuCi0gICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0YVtzcF0sIHQxCi0g
ICAgbG9hZHAgSlNHbG9iYWxEYXRhOjpjYWxsRnJhbWVGb3JUaHJvd1t0MV0sIHQwCi0gICAgam1w
IEpTR2xvYmFsRGF0YTo6dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3dbdDFdCisgICAgbG9hZHAgSklU
U3RhY2tGcmFtZTo6dm1bc3BdLCB0MQorICAgIGxvYWRwIFZNOjpjYWxsRnJhbWVGb3JUaHJvd1t0
MV0sIHQwCisgICAgam1wIFZNOjp0YXJnZXRNYWNoaW5lUENGb3JUaHJvd1t0MV0KIAogCiBfbGxp
bnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGluZToKICAgICBwcmVzZXJ2ZVJldHVybkFkZHJl
c3NBZnRlckNhbGwodDIpCi0gICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0YVtzcF0s
IHQxCi0gICAgbG9hZHAgSlNHbG9iYWxEYXRhOjpjYWxsRnJhbWVGb3JUaHJvd1t0MV0sIHQwCi0g
ICAgam1wIEpTR2xvYmFsRGF0YTo6dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3dbdDFdCisgICAgbG9h
ZHAgSklUU3RhY2tGcmFtZTo6dm1bc3BdLCB0MQorICAgIGxvYWRwIFZNOjpjYWxsRnJhbWVGb3JU
aHJvd1t0MV0sIHQwCisgICAgam1wIFZNOjp0YXJnZXRNYWNoaW5lUENGb3JUaHJvd1t0MV0KIAog
IyBHaXZlcyB5b3UgdGhlIHNjb3BlIGluIHQwLCB3aGlsZSBhbGxvd2luZyB5b3UgdG8gb3B0aW9u
YWxseSBwZXJmb3JtIGFkZGl0aW9uYWwgY2hlY2tzIG9uIHRoZQogIyBzY29wZXMgYXMgdGhleSBh
cmUgdHJhdmVyc2VkLiBzY29wZUNoZWNrKCkgaXMgY2FsbGVkIHdpdGggdHdvIGFyZ3VtZW50czog
dGhlIHJlZ2lzdGVyCkBAIC0xNzAyLDggKzE3MDIsOCBAQCBfbGxpbnRfb3BfcHV0X3Njb3BlZF92
YXI6CiBtYWNybyBuYXRpdmVDYWxsVHJhbXBvbGluZShleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlv
bikKICAgICBzdG9yZXAgMCwgQ29kZUJsb2NrW2Nmcl0KICAgICBpZiBYODZfNjQKLSAgICAgICAg
bG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0YSArIDhbc3BdLCB0MAotICAgICAgICBzdG9y
ZXAgY2ZyLCBKU0dsb2JhbERhdGE6OnRvcENhbGxGcmFtZVt0MF0KKyAgICAgICAgbG9hZHAgSklU
U3RhY2tGcmFtZTo6dm0gKyA4W3NwXSwgdDAKKyAgICAgICAgc3RvcmVwIGNmciwgVk06OnRvcENh
bGxGcmFtZVt0MF0KICAgICAgICAgbG9hZHAgQ2FsbGVyRnJhbWVbY2ZyXSwgdDAKICAgICAgICAg
bG9hZHEgU2NvcGVDaGFpblt0MF0sIHQxCiAgICAgICAgIHN0b3JlcSB0MSwgU2NvcGVDaGFpbltj
ZnJdCkBAIC0xNzE2LDE1ICsxNzE2LDE1IEBAIG1hY3JvIG5hdGl2ZUNhbGxUcmFtcG9saW5lKGV4
ZWN1dGFibGVPZmYKICAgICAgICAgbW92ZSB0MCwgY2ZyICMgUmVzdG9yZSBjZnIgdG8gYXZvaWQg
bG9hZGluZyBmcm9tIHN0YWNrCiAgICAgICAgIGNhbGwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rp
b25bdDFdCiAgICAgICAgIGFkZHAgMTYgLSA4LCBzcAotICAgICAgICBsb2FkcCBKSVRTdGFja0Zy
YW1lOjpnbG9iYWxEYXRhICsgOFtzcF0sIHQzCisgICAgICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6
OnZtICsgOFtzcF0sIHQzCiAKICAgICBlbHNpZiBDX0xPT1AKICAgICAgICAgbG9hZHAgQ2FsbGVy
RnJhbWVbY2ZyXSwgdDAKICAgICAgICAgbG9hZHAgU2NvcGVDaGFpblt0MF0sIHQxCiAgICAgICAg
IHN0b3JlcCB0MSwgU2NvcGVDaGFpbltjZnJdCiAKLSAgICAgICAgbG9hZHAgSklUU3RhY2tGcmFt
ZTo6Z2xvYmFsRGF0YVtzcF0sIHQzCi0gICAgICAgIHN0b3JlcCBjZnIsIEpTR2xvYmFsRGF0YTo6
dG9wQ2FsbEZyYW1lW3QzXQorICAgICAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjp2bVtzcF0sIHQz
CisgICAgICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BDYWxsRnJhbWVbdDNdCiAKICAgICAgICAgbW92
ZSB0MCwgdDIKICAgICAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHQzKQpAQCAt
MTczNiwyMCArMTczNiwyMCBAQCBtYWNybyBuYXRpdmVDYWxsVHJhbXBvbGluZShleGVjdXRhYmxl
T2ZmCiAgICAgICAgIGNsb29wQ2FsbE5hdGl2ZSBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvblt0
MV0KIAogICAgICAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybih0MykKLSAgICAg
ICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0YVtzcF0sIHQzCisgICAgICAgIGxvYWRw
IEpJVFN0YWNrRnJhbWU6OnZtW3NwXSwgdDMKICAgICBlbHNlCiAgICAgICAgIGVycm9yCiAgICAg
ZW5kCiAKLSAgICBidHFueiBKU0dsb2JhbERhdGE6OmV4Y2VwdGlvblt0M10sIC5leGNlcHRpb24K
KyAgICBidHFueiBWTTo6ZXhjZXB0aW9uW3QzXSwgLmV4Y2VwdGlvbgogICAgIHJldAogLmV4Y2Vw
dGlvbjoKICAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwodDEpCiAgICAgbG9hZGkg
QXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQwogICAgIGxvYWRwIENvZGVCbG9ja1tj
ZnJdLCBQQgogICAgIGxvYWRwIENvZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNbUEJdLCBQQgotICAg
IGxvYWRwIEpJVFN0YWNrRnJhbWU6Omdsb2JhbERhdGFbc3BdLCB0MAotICAgIHN0b3JlcCBjZnIs
IEpTR2xvYmFsRGF0YTo6dG9wQ2FsbEZyYW1lW3QwXQorICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6
OnZtW3NwXSwgdDAKKyAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wQ2FsbEZyYW1lW3QwXQogICAgIGNh
bGxTbG93UGF0aChfbGxpbnRfdGhyb3dfZnJvbV9uYXRpdmVfY2FsbCkKICAgICBqbXAgX2xsaW50
X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUKIGVuZApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNp
b24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0zNjIsOCArMzYyLDggQEAgbWFjcm8gZnVuY3Rp
b25Jbml0aWFsaXphdGlvbihwcm9maWxlQXJnUwogICAgICAgICAKICAgICAjIENoZWNrIHN0YWNr
IGhlaWdodC4KICAgICBsb2FkaSBDb2RlQmxvY2s6Om1fbnVtQ2FsbGVlUmVnaXN0ZXJzW3QxXSwg
dDAKLSAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsRGF0YVt0MV0sIHQyCi0gICAgbG9hZHAg
SlNHbG9iYWxEYXRhOjppbnRlcnByZXRlclt0Ml0sIHQyICAgIyBGSVhNRTogQ2FuIGdldCB0byB0
aGUgSlNTdGFjayBmcm9tIHRoZSBKSVRTdGFja0ZyYW1lCisgICAgbG9hZHAgQ29kZUJsb2NrOjpt
X3ZtW3QxXSwgdDIKKyAgICBsb2FkcCBWTTo6aW50ZXJwcmV0ZXJbdDJdLCB0MiAgICMgRklYTUU6
IENhbiBnZXQgdG8gdGhlIEpTU3RhY2sgZnJvbSB0aGUgSklUU3RhY2tGcmFtZQogICAgIGxzaGlm
dGkgMywgdDAKICAgICBhZGRwIHQwLCBjZnIsIHQwCiAgICAgYnBhZXEgSW50ZXJwcmV0ZXI6Om1f
c3RhY2sgKyBKU1N0YWNrOjptX2VuZFt0Ml0sIHQwLCAuc3RhY2tIZWlnaHRPSwpAQCAtMTA1Nyw4
ICsxMDU3LDggQEAgX2xsaW50X29wX2puZ3JlYXRlcmVxOgogCiBfbGxpbnRfb3BfbG9vcF9oaW50
OgogICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjpnbG9iYWxE
YXRhW3NwXSwgdDEKLSAgICBsb2FkYiBKU0dsb2JhbERhdGE6OndhdGNoZG9nK1dhdGNoZG9nOjpt
X3RpbWVyRGlkRmlyZVt0MV0sIHQwCisgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6dm1bc3BdLCB0
MQorICAgIGxvYWRiIFZNOjp3YXRjaGRvZytXYXRjaGRvZzo6bV90aW1lckRpZEZpcmVbdDFdLCB0
MAogICAgIGJ0Ym56IHQwLCAuaGFuZGxlV2F0Y2hkb2dUaW1lcgogLmFmdGVyV2F0Y2hkb2dUaW1l
ckNoZWNrOgogICAgIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5jcHAJKHJldmlz
aW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY1LDcgKzI2NSw3IEBAIEpTVmFsdWUgQ0xv
b3A6OmV4ZWN1dGUoQ2FsbEZyYW1lKiBjYWxsRnIKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
ICAgICB9CiAKLSAgICBBU1NFUlQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkudG9wQ2FsbEZyYW1l
ID09IGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKGNhbGxGcmFtZS0+dm0oKS50b3BDYWxsRnJhbWUg
PT0gY2FsbEZyYW1lKTsKIAogICAgIC8vIERlZmluZSB0aGUgcHNldWRvIHJlZ2lzdGVycyB1c2Vk
IGJ5IHRoZSBMTElOVCBDIExvb3AgYmFja2VuZDoKICAgICBBU1NFUlQoc2l6ZW9mKENMb29wUmVn
aXN0ZXIpID09IHNpemVvZihpbnRwdHJfdCkpOwpAQCAtMzE5LDEwICszMTksMTAgQEAgSlNWYWx1
ZSBDTG9vcDo6ZXhlY3V0ZShDYWxsRnJhbWUqIGNhbGxGcgogICAgIC8vIFRoZSBsbGludCBleHBl
Y3RzIHRoZSBuYXRpdmUgc3RhY2sgcG9pbnRlciwgc3AsIHRvIGJlIHBvaW50aW5nIHRvIHRoZQog
ICAgIC8vIGppdFN0YWNrRnJhbWUgKHdoaWNoIGlzIHRoZSBzaW11bGF0aW9uIG9mIHRoZSBuYXRp
dmUgc3RhY2sgZnJhbWUpOgogICAgIEpJVFN0YWNrRnJhbWUqIGNvbnN0IHNwID0gJmppdFN0YWNr
RnJhbWU7Ci0gICAgc3AtPmdsb2JhbERhdGEgPSAmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCk7Cisg
ICAgc3AtPnZtID0gJmNhbGxGcmFtZS0+dm0oKTsKIAotICAgIC8vIFNldCB1cCBhbiBhbGlhcyBm
b3IgdGhlIGdsb2JhbERhdGEgcHRyIGluIHRoZSBKSVRTdGFja0ZyYW1lOgotICAgIEpTR2xvYmFs
RGF0YSogJmdsb2JhbERhdGEgPSBzcC0+Z2xvYmFsRGF0YTsKKyAgICAvLyBTZXQgdXAgYW4gYWxp
YXMgZm9yIHRoZSB2bSBwdHIgaW4gdGhlIEpJVFN0YWNrRnJhbWU6CisgICAgVk0qICZ2bSA9IHNw
LT52bTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2so
KTsKICAgICBJbnN0cnVjdGlvbiogdlBDOwpAQCAtNDIzLDcgKzQyMyw3IEBAIEpTVmFsdWUgQ0xv
b3A6OmV4ZWN1dGUoQ2FsbEZyYW1lKiBjYWxsRnIKICAgICAgICAgICAgIGNhbGxGcmFtZSA9IGNh
bGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKIAogICAgICAgICAgICAgLy8gVGhlIHBhcnQgaW4gZ2V0
SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUoKToKLSAgICAgICAgICAgIEpTVmFsdWUg
cmVzdWx0ID0gZ2xvYmFsRGF0YS0+aG9zdENhbGxSZXR1cm5WYWx1ZTsKKyAgICAgICAgICAgIEpT
VmFsdWUgcmVzdWx0ID0gdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWU7CiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKICAgICAgICAgICAgIHQxLmkgPSByZXN1bHQudGFnKCk7CiAgICAgICAgICAgICB0MC5p
ID0gcmVzdWx0LnBheWxvYWQoKTsKQEAgLTQzNSw3ICs0MzUsNyBAQCBKU1ZhbHVlIENMb29wOjpl
eGVjdXRlKENhbGxGcmFtZSogY2FsbEZyCiAKICAgICAgICAgT0ZGTElORV9BU01fR0xVRV9MQUJF
TChjdGlPcFRocm93Tm90Q2F1Z2h0KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2xv
YmFsRGF0YS0+ZXhjZXB0aW9uOworICAgICAgICAgICAgcmV0dXJuIHZtLT5leGNlcHRpb247CiAg
ICAgICAgIH0KIAogI2lmICFFTkFCTEUoQ09NUFVURURfR09UT19PUENPREVTKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vY2xvb3AucmIKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vY2xvb3AucmIJKHJldmlzaW9uIDE0ODY1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2Nsb29wLnJiCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgY2xhc3MgQWRkcmVzcwogICAgIGRlZiBwb2ludGVyRXhw
cgogICAgICAgICBpZiBiYXNlLmlzX2E/IFJlZ2lzdGVySUQgYW5kIGJhc2UubmFtZSA9PSAic3Ai
IAogICAgICAgICAgICAgb2Zmc2V0VmFsdWUgPSAiI3tvZmZzZXQudmFsdWV9IgotICAgICAgICAg
ICAgIihBU1NFUlQoI3tvZmZzZXRWYWx1ZX0gPT0gb2Zmc2V0b2YoSklUU3RhY2tGcmFtZSwgZ2xv
YmFsRGF0YSkpLCAmc3AtPmdsb2JhbERhdGEpIgorICAgICAgICAgICAgIihBU1NFUlQoI3tvZmZz
ZXRWYWx1ZX0gPT0gb2Zmc2V0b2YoSklUU3RhY2tGcmFtZSwgdm0pKSwgJnNwLT52bSkiCiAgICAg
ICAgIGVsc2lmIG9mZnNldC52YWx1ZSA9PSAwCiAgICAgICAgICAgICAiI3tiYXNlLmNsVmFsdWUo
OmludDhQdHIpfSIKICAgICAgICAgZWxzaWYgb2Zmc2V0LnZhbHVlID4gMApAQCAtMjUwLDcgKzI1
MCw3IEBAIGNsYXNzIEJhc2VJbmRleAogICAgIGRlZiBwb2ludGVyRXhwcgogICAgICAgICBpZiBi
YXNlLmlzX2E/IFJlZ2lzdGVySUQgYW5kIGJhc2UubmFtZSA9PSAic3AiCiAgICAgICAgICAgICBv
ZmZzZXRWYWx1ZSA9ICIoI3tpbmRleC5jbFZhbHVlfSA8PCAje3NjYWxlU2hpZnR9KSArICN7b2Zm
c2V0LmNsVmFsdWV9KSIKLSAgICAgICAgICAgICIoQVNTRVJUKCN7b2Zmc2V0VmFsdWV9ID09IG9m
ZnNldG9mKEpJVFN0YWNrRnJhbWUsIGdsb2JhbERhdGEpKSwgJnNwLT5nbG9iYWxEYXRhKSIKKyAg
ICAgICAgICAgICIoQVNTRVJUKCN7b2Zmc2V0VmFsdWV9ID09IG9mZnNldG9mKEpJVFN0YWNrRnJh
bWUsIHZtKSksICZzcC0+dm0pIgogICAgICAgICBlbHNlCiAgICAgICAgICAgICAiI3tiYXNlLmNs
VmFsdWUoOmludDhQdHIpfSArICgje2luZGV4LmNsVmFsdWV9IDw8ICN7c2NhbGVTaGlmdH0pICsg
I3tvZmZzZXQuY2xWYWx1ZX0iCiAgICAgICAgIGVuZApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03MywxMCAr
NzMsMTAgQEAgY2xhc3MgQVNUQnVpbGRlciB7CiAgICAgICAgIE9wZXJhdG9yIG1fb3A7CiAgICAg
fTsKIHB1YmxpYzoKLSAgICBBU1RCdWlsZGVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU291
cmNlQ29kZSogc291cmNlQ29kZSkKLSAgICAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkK
KyAgICBBU1RCdWlsZGVyKFZNKiB2bSwgU291cmNlQ29kZSogc291cmNlQ29kZSkKKyAgICAgICAg
OiBtX3ZtKHZtKQogICAgICAgICAsIG1fc291cmNlQ29kZShzb3VyY2VDb2RlKQotICAgICAgICAs
IG1fc2NvcGUoZ2xvYmFsRGF0YSkKKyAgICAgICAgLCBtX3Njb3BlKHZtKQogICAgICAgICAsIG1f
ZXZhbENvdW50KDApCiAgICAgewogICAgIH0KQEAgLTExNSw3ICsxMTUsNyBAQCBwdWJsaWM6CiAg
ICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VCaW5hcnlOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IGludCB0b2tlbiwgc3RkOjpwYWlyPEV4cHJlc3Npb25Ob2RlKiwgQmluYXJ5T3BJbmZvPiwgc3Rk
OjpwYWlyPEV4cHJlc3Npb25Ob2RlKiwgQmluYXJ5T3BJbmZvPik7CiAgICAgRXhwcmVzc2lvbk5v
ZGUqIG1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Np
b25Ob2RlKiBmdW5jLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBpbnQgc3RhcnQsIGludCBkaXZvdCwg
aW50IGVuZCk7CiAKLSAgICBKU0M6OlNvdXJjZUVsZW1lbnRzKiBjcmVhdGVTb3VyY2VFbGVtZW50
cygpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBKU0M6OlNvdXJjZUVsZW1lbnRzKCk7IH0K
KyAgICBKU0M6OlNvdXJjZUVsZW1lbnRzKiBjcmVhdGVTb3VyY2VFbGVtZW50cygpIHsgcmV0dXJu
IG5ldyAobV92bSkgSlNDOjpTb3VyY2VFbGVtZW50cygpOyB9CiAKICAgICBQYXJzZXJBcmVuYURh
dGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrPiogdmFyRGVjbGFyYXRpb25zKCkgeyByZXR1
cm4gbV9zY29wZS5tX3ZhckRlY2xhcmF0aW9uczsgfQogICAgIFBhcnNlckFyZW5hRGF0YTxEZWNs
YXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjaz4qIGZ1bmNEZWNsYXJhdGlvbnMoKSB7IHJldHVy
biBtX3Njb3BlLm1fZnVuY0RlY2xhcmF0aW9uczsgfQpAQCAtMTI0LDcgKzEyNCw3IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgYXBwZW5kVG9Db21tYShDb21tYU5vZGUqIGNvbW1hTm9kZSwgRXhwcmVz
c2lvbk5vZGUqIGV4cHIpIHsgY29tbWFOb2RlLT5hcHBlbmQoZXhwcik7IH0KIAotICAgIENvbW1h
Tm9kZSogY3JlYXRlQ29tbWFFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4
cHJlc3Npb25Ob2RlKiBsaHMsIEV4cHJlc3Npb25Ob2RlKiByaHMpIHsgcmV0dXJuIG5ldyAobV9n
bG9iYWxEYXRhKSBDb21tYU5vZGUobG9jYXRpb24sIGxocywgcmhzKTsgfQorICAgIENvbW1hTm9k
ZSogY3JlYXRlQ29tbWFFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJl
c3Npb25Ob2RlKiBsaHMsIEV4cHJlc3Npb25Ob2RlKiByaHMpIHsgcmV0dXJuIG5ldyAobV92bSkg
Q29tbWFOb2RlKGxvY2F0aW9uLCBsaHMsIHJocyk7IH0KIAogICAgIEV4cHJlc3Npb25Ob2RlKiBt
YWtlQXNzaWduTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogbGVm
dCwgT3BlcmF0b3IsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCBsZWZ0SGFzQXNzaWdubWVu
dHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBl
bmQpOwogICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlUHJlZml4Tm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBFeHByZXNzaW9uTm9kZSosIE9wZXJhdG9yLCBpbnQgc3RhcnQsIGludCBkaXZvdCwg
aW50IGVuZCk7CkBAIC0xNTAsNzYgKzE1MCw3NiBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChleHBy
LT5pc051bWJlcigpKQogICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUJvb2xlYW4obG9jYXRpb24s
ICFzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwciktPnZhbHVlKCkpOwogCi0gICAgICAgIHJl
dHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgTG9naWNhbE5vdE5vZGUobG9jYXRpb24sIGV4cHIpOwor
ICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBMb2dpY2FsTm90Tm9kZShsb2NhdGlvbiwgZXhwcik7
CiAgICAgfQotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVVbmFyeVBsdXMoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpIHsgcmV0dXJuIG5ldyAo
bV9nbG9iYWxEYXRhKSBVbmFyeVBsdXNOb2RlKGxvY2F0aW9uLCBleHByKTsgfQorICAgIEV4cHJl
c3Npb25Ob2RlKiBjcmVhdGVVbmFyeVBsdXMoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpIHsgcmV0dXJuIG5ldyAobV92bSkgVW5hcnlQbHVzTm9k
ZShsb2NhdGlvbiwgZXhwcik7IH0KICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlVm9pZChjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcikKICAgICB7
CiAgICAgICAgIGluY0NvbnN0YW50cygpOwotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERh
dGEpIFZvaWROb2RlKGxvY2F0aW9uLCBleHByKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV92bSkg
Vm9pZE5vZGUobG9jYXRpb24sIGV4cHIpOwogICAgIH0KICAgICBFeHByZXNzaW9uTm9kZSogdGhp
c0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikKICAgICB7CiAgICAgICAgIHVz
ZXNUaGlzKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgVGhpc05vZGUobG9j
YXRpb24pOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBUaGlzTm9kZShsb2NhdGlvbik7CiAg
ICAgfQogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVSZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBpbnQgc3RhcnQpCiAgICAg
ewotICAgICAgICBpZiAobV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0g
KmlkZW50KQorICAgICAgICBpZiAobV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICpp
ZGVudCkKICAgICAgICAgICAgIHVzZXNBcmd1bWVudHMoKTsKLSAgICAgICAgcmV0dXJuIG5ldyAo
bV9nbG9iYWxEYXRhKSBSZXNvbHZlTm9kZShsb2NhdGlvbiwgKmlkZW50LCBzdGFydCk7CisgICAg
ICAgIHJldHVybiBuZXcgKG1fdm0pIFJlc29sdmVOb2RlKGxvY2F0aW9uLCAqaWRlbnQsIHN0YXJ0
KTsKICAgICB9Ci0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU9iamVjdExpdGVyYWwoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIE9i
amVjdExpdGVyYWxOb2RlKGxvY2F0aW9uKTsgfQotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVP
YmplY3RMaXRlcmFsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFByb3BlcnR5TGlz
dE5vZGUqIHByb3BlcnRpZXMpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBPYmplY3RMaXRl
cmFsTm9kZShsb2NhdGlvbiwgcHJvcGVydGllcyk7IH0KKyAgICBFeHByZXNzaW9uTm9kZSogY3Jl
YXRlT2JqZWN0TGl0ZXJhbChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uKSB7IHJldHVy
biBuZXcgKG1fdm0pIE9iamVjdExpdGVyYWxOb2RlKGxvY2F0aW9uKTsgfQorICAgIEV4cHJlc3Np
b25Ob2RlKiBjcmVhdGVPYmplY3RMaXRlcmFsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIFByb3BlcnR5TGlzdE5vZGUqIHByb3BlcnRpZXMpIHsgcmV0dXJuIG5ldyAobV92bSkgT2Jq
ZWN0TGl0ZXJhbE5vZGUobG9jYXRpb24sIHByb3BlcnRpZXMpOyB9CiAKICAgICBFeHByZXNzaW9u
Tm9kZSogY3JlYXRlQXJyYXkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgaW50IGVs
aXNpb25zKQogICAgIHsKICAgICAgICAgaWYgKGVsaXNpb25zKQogICAgICAgICAgICAgaW5jQ29u
c3RhbnRzKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQXJyYXlOb2RlKGxv
Y2F0aW9uLCBlbGlzaW9ucyk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEFycmF5Tm9kZShs
b2NhdGlvbiwgZWxpc2lvbnMpOwogICAgIH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVB
cnJheShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFbGVtZW50Tm9kZSogZWxlbXMp
IHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBBcnJheU5vZGUobG9jYXRpb24sIGVsZW1zKTsg
fQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVBcnJheShjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGxvY2F0aW9uLCBFbGVtZW50Tm9kZSogZWxlbXMpIHsgcmV0dXJuIG5ldyAobV92bSkgQXJyYXlO
b2RlKGxvY2F0aW9uLCBlbGVtcyk7IH0KICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlQXJyYXko
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgaW50IGVsaXNpb25zLCBFbGVtZW50Tm9k
ZSogZWxlbXMpCiAgICAgewogICAgICAgICBpZiAoZWxpc2lvbnMpCiAgICAgICAgICAgICBpbmND
b25zdGFudHMoKTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBBcnJheU5vZGUo
bG9jYXRpb24sIGVsaXNpb25zLCBlbGVtcyk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEFy
cmF5Tm9kZShsb2NhdGlvbiwgZWxpc2lvbnMsIGVsZW1zKTsKICAgICB9CiAgICAgRXhwcmVzc2lv
bk5vZGUqIGNyZWF0ZU51bWJlckV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
ZG91YmxlIGQpCiAgICAgewogICAgICAgICBpbmNDb25zdGFudHMoKTsKLSAgICAgICAgcmV0dXJu
IG5ldyAobV9nbG9iYWxEYXRhKSBOdW1iZXJOb2RlKGxvY2F0aW9uLCBkKTsKKyAgICAgICAgcmV0
dXJuIG5ldyAobV92bSkgTnVtYmVyTm9kZShsb2NhdGlvbiwgZCk7CiAgICAgfQogCiAgICAgRXhw
cmVzc2lvbk5vZGUqIGNyZWF0ZVN0cmluZyhjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBjb25zdCBJZGVudGlmaWVyKiBzdHJpbmcpCiAgICAgewogICAgICAgICBpbmNDb25zdGFudHMo
KTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBTdHJpbmdOb2RlKGxvY2F0aW9u
LCAqc3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgU3RyaW5nTm9kZShsb2NhdGlv
biwgKnN0cmluZyk7CiAgICAgfQogCiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUJvb2xlYW4o
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgYm9vbCBiKQogICAgIHsKICAgICAgICAg
aW5jQ29uc3RhbnRzKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQm9vbGVh
bk5vZGUobG9jYXRpb24sIGIpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBCb29sZWFuTm9k
ZShsb2NhdGlvbiwgYik7CiAgICAgfQogCiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU51bGwo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikKICAgICB7CiAgICAgICAgIGluY0NvbnN0
YW50cygpOwotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIE51bGxOb2RlKGxvY2F0
aW9uKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgTnVsbE5vZGUobG9jYXRpb24pOwogICAg
IH0KIAogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVCcmFja2V0QWNjZXNzKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9k
ZSogcHJvcGVydHksIGJvb2wgcHJvcGVydHlIYXNBc3NpZ25tZW50cywgaW50IHN0YXJ0LCBpbnQg
ZGl2b3QsIGludCBlbmQpCiAgICAgewotICAgICAgICBCcmFja2V0QWNjZXNzb3JOb2RlKiBub2Rl
ID0gbmV3IChtX2dsb2JhbERhdGEpIEJyYWNrZXRBY2Nlc3Nvck5vZGUobG9jYXRpb24sIGJhc2Us
IHByb3BlcnR5LCBwcm9wZXJ0eUhhc0Fzc2lnbm1lbnRzKTsKKyAgICAgICAgQnJhY2tldEFjY2Vz
c29yTm9kZSogbm9kZSA9IG5ldyAobV92bSkgQnJhY2tldEFjY2Vzc29yTm9kZShsb2NhdGlvbiwg
YmFzZSwgcHJvcGVydHksIHByb3BlcnR5SGFzQXNzaWdubWVudHMpOwogICAgICAgICBzZXRFeGNl
cHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCk7CiAgICAgICAgIHJldHVybiBu
b2RlOwogICAgIH0KIAogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVEb3RBY2Nlc3MoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElk
ZW50aWZpZXIqIHByb3BlcnR5LCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCkKICAgICB7
Ci0gICAgICAgIERvdEFjY2Vzc29yTm9kZSogbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBEb3RB
Y2Nlc3Nvck5vZGUobG9jYXRpb24sIGJhc2UsICpwcm9wZXJ0eSk7CisgICAgICAgIERvdEFjY2Vz
c29yTm9kZSogbm9kZSA9IG5ldyAobV92bSkgRG90QWNjZXNzb3JOb2RlKGxvY2F0aW9uLCBiYXNl
LCAqcHJvcGVydHkpOwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwg
ZGl2b3QsIGVuZCk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KQEAgLTIyOCw3ICsyMjgs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoWWFycjo6Y2hlY2tTeW50YXgocGF0dGVy
bi5zdHJpbmcoKSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgUmVnRXhwTm9kZSog
bm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBSZWdFeHBOb2RlKGxvY2F0aW9uLCBwYXR0ZXJuLCBm
bGFncyk7CisgICAgICAgIFJlZ0V4cE5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIFJlZ0V4cE5vZGUo
bG9jYXRpb24sIHBhdHRlcm4sIGZsYWdzKTsKICAgICAgICAgaW50IHNpemUgPSBwYXR0ZXJuLmxl
bmd0aCgpICsgMjsgLy8gKyAyIGZvciB0aGUgdHdvIC8ncwogICAgICAgICBzZXRFeGNlcHRpb25M
b2NhdGlvbihub2RlLCBzdGFydCwgc3RhcnQgKyBzaXplLCBzdGFydCArIHNpemUpOwogICAgICAg
ICByZXR1cm4gbm9kZTsKQEAgLTIzNiw0MiArMjM2LDQyIEBAIHB1YmxpYzoKIAogICAgIEV4cHJl
c3Npb25Ob2RlKiBjcmVhdGVOZXdFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IEV4cHJlc3Npb25Ob2RlKiBleHByLCBBcmd1bWVudHNOb2RlKiBhcmd1bWVudHMsIGludCBzdGFy
dCwgaW50IGRpdm90LCBpbnQgZW5kKQogICAgIHsKLSAgICAgICAgTmV3RXhwck5vZGUqIG5vZGUg
PSBuZXcgKG1fZ2xvYmFsRGF0YSkgTmV3RXhwck5vZGUobG9jYXRpb24sIGV4cHIsIGFyZ3VtZW50
cyk7CisgICAgICAgIE5ld0V4cHJOb2RlKiBub2RlID0gbmV3IChtX3ZtKSBOZXdFeHByTm9kZShs
b2NhdGlvbiwgZXhwciwgYXJndW1lbnRzKTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24o
bm9kZSwgc3RhcnQsIGRpdm90LCBlbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAK
ICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlTmV3RXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgaW50IHN0YXJ0LCBpbnQgZW5kKQogICAg
IHsKLSAgICAgICAgTmV3RXhwck5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgTmV3RXhw
ck5vZGUobG9jYXRpb24sIGV4cHIpOworICAgICAgICBOZXdFeHByTm9kZSogbm9kZSA9IG5ldyAo
bV92bSkgTmV3RXhwck5vZGUobG9jYXRpb24sIGV4cHIpOwogICAgICAgICBzZXRFeGNlcHRpb25M
b2NhdGlvbihub2RlLCBzdGFydCwgZW5kLCBlbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAg
ICB9CiAKICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlQ29uZGl0aW9uYWxFeHByKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBjb25kaXRpb24sIEV4cHJl
c3Npb25Ob2RlKiBsaHMsIEV4cHJlc3Npb25Ob2RlKiByaHMpCiAgICAgewotICAgICAgICByZXR1
cm4gbmV3IChtX2dsb2JhbERhdGEpIENvbmRpdGlvbmFsTm9kZShsb2NhdGlvbiwgY29uZGl0aW9u
LCBsaHMsIHJocyk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIENvbmRpdGlvbmFsTm9kZShs
b2NhdGlvbiwgY29uZGl0aW9uLCBsaHMsIHJocyk7CiAgICAgfQogCiAgICAgRXhwcmVzc2lvbk5v
ZGUqIGNyZWF0ZUFzc2lnblJlc29sdmUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiByaHMsIGludCBzdGFydCwg
aW50IGRpdm90LCBpbnQgZW5kKQogICAgIHsKICAgICAgICAgaWYgKHJocy0+aXNGdW5jRXhwck5v
ZGUoKSkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEZ1bmNFeHByTm9kZSo+KHJocyktPmJvZHko
KS0+c2V0SW5mZXJyZWROYW1lKGlkZW50KTsKLSAgICAgICAgQXNzaWduUmVzb2x2ZU5vZGUqIG5v
ZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQXNzaWduUmVzb2x2ZU5vZGUobG9jYXRpb24sIGlkZW50
LCByaHMpOworICAgICAgICBBc3NpZ25SZXNvbHZlTm9kZSogbm9kZSA9IG5ldyAobV92bSkgQXNz
aWduUmVzb2x2ZU5vZGUobG9jYXRpb24sIGlkZW50LCByaHMpOwogICAgICAgICBzZXRFeGNlcHRp
b25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCk7CiAgICAgICAgIHJldHVybiBub2Rl
OwogICAgIH0KIAogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVGdW5jdGlvbkV4cHIoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciogbmFtZSwgRnVuY3Rp
b25Cb2R5Tm9kZSogYm9keSwgUGFyYW1ldGVyTm9kZSogcGFyYW1ldGVycywgaW50IG9wZW5CcmFj
ZVBvcywgaW50IGNsb3NlQnJhY2VQb3MsIGludCBib2R5U3RhcnRMaW5lLCBpbnQgYm9keUVuZExp
bmUpCiAgICAgewotICAgICAgICBGdW5jRXhwck5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxE
YXRhKSBGdW5jRXhwck5vZGUobG9jYXRpb24sICpuYW1lLCBib2R5LCBtX3NvdXJjZUNvZGUtPnN1
YkV4cHJlc3Npb24ob3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5U3RhcnRMaW5lKSwg
cGFyYW1ldGVycyk7CisgICAgICAgIEZ1bmNFeHByTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBG
dW5jRXhwck5vZGUobG9jYXRpb24sICpuYW1lLCBib2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJl
c3Npb24ob3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5U3RhcnRMaW5lKSwgcGFyYW1l
dGVycyk7CiAgICAgICAgIGJvZHktPnNldExvYyhib2R5U3RhcnRMaW5lLCBib2R5RW5kTGluZSwg
bG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAK
ICAgICBGdW5jdGlvbkJvZHlOb2RlKiBjcmVhdGVGdW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9u
LCBib29sIGluU3RyaWN0Q29udGV4dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBGdW5jdGlvbkJv
ZHlOb2RlOjpjcmVhdGUobV9nbG9iYWxEYXRhLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwg
aW5TdHJpY3RDb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0
ZShtX3ZtLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgaW5TdHJpY3RDb250ZXh0KTsKICAg
ICB9CiAKICAgICB2b2lkIHNldEZ1bmN0aW9uU3RhcnQoRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwg
aW50IGZ1bmN0aW9uU3RhcnQpCkBAIC0yODQsNDYgKzI4NCw0NiBAQCBwdWJsaWM6CiAgICAgICAg
IEFTU0VSVChuYW1lKTsKICAgICAgICAgYm9keS0+c2V0TG9jKGJvZHlTdGFydExpbmUsIGJvZHlF
bmRMaW5lLCBsb2NhdGlvbi5jaGFyUG9zaXRpb24pOwogICAgICAgICBib2R5LT5zZXRJbmZlcnJl
ZE5hbWUoKm5hbWUpOwotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFByb3BlcnR5
Tm9kZShtX2dsb2JhbERhdGEsICpuYW1lLCBuZXcgKG1fZ2xvYmFsRGF0YSkgRnVuY0V4cHJOb2Rl
KGxvY2F0aW9uLCBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBi
b2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24ob3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNl
UG9zLCBib2R5U3RhcnRMaW5lKSwgcGFyYW1zKSwgdHlwZSk7CisgICAgICAgIHJldHVybiBuZXcg
KG1fdm0pIFByb3BlcnR5Tm9kZShtX3ZtLCAqbmFtZSwgbmV3IChtX3ZtKSBGdW5jRXhwck5vZGUo
bG9jYXRpb24sIG1fdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBib2R5LCBtX3Nv
dXJjZUNvZGUtPnN1YkV4cHJlc3Npb24ob3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5
U3RhcnRMaW5lKSwgcGFyYW1zKSwgdHlwZSk7CiAgICAgfQogICAgIAotICAgIHRlbXBsYXRlIDxi
b29sPiBQcm9wZXJ0eU5vZGUqIGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoSlNHbG9iYWxE
YXRhKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgUHJvcGVydHlOb2RlOjpUeXBl
IHR5cGUsIGRvdWJsZSBuYW1lLCBQYXJhbWV0ZXJOb2RlKiBwYXJhbXMsIEZ1bmN0aW9uQm9keU5v
ZGUqIGJvZHksIGludCBvcGVuQnJhY2VQb3MsIGludCBjbG9zZUJyYWNlUG9zLCBpbnQgYm9keVN0
YXJ0TGluZSwgaW50IGJvZHlFbmRMaW5lKQorICAgIHRlbXBsYXRlIDxib29sPiBQcm9wZXJ0eU5v
ZGUqIGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgZG91YmxlIG5hbWUsIFBhcmFt
ZXRlck5vZGUqIHBhcmFtcywgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwgaW50IG9wZW5CcmFjZVBv
cywgaW50IGNsb3NlQnJhY2VQb3MsIGludCBib2R5U3RhcnRMaW5lLCBpbnQgYm9keUVuZExpbmUp
CiAgICAgewogICAgICAgICBib2R5LT5zZXRMb2MoYm9keVN0YXJ0TGluZSwgYm9keUVuZExpbmUs
IGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0
YSkgUHJvcGVydHlOb2RlKG1fZ2xvYmFsRGF0YSwgbmFtZSwgbmV3IChtX2dsb2JhbERhdGEpIEZ1
bmNFeHByTm9kZShsb2NhdGlvbiwgbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRl
bnRpZmllciwgYm9keSwgbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKG9wZW5CcmFjZVBvcywg
Y2xvc2VCcmFjZVBvcywgYm9keVN0YXJ0TGluZSksIHBhcmFtcyksIHR5cGUpOworICAgICAgICBy
ZXR1cm4gbmV3IChtX3ZtKSBQcm9wZXJ0eU5vZGUobV92bSwgbmFtZSwgbmV3IChtX3ZtKSBGdW5j
RXhwck5vZGUobG9jYXRpb24sIG1fdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBi
b2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24ob3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNl
UG9zLCBib2R5U3RhcnRMaW5lKSwgcGFyYW1zKSwgdHlwZSk7CiAgICAgfQogCi0gICAgQXJndW1l
bnRzTm9kZSogY3JlYXRlQXJndW1lbnRzKCkgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEFy
Z3VtZW50c05vZGUoKTsgfQotICAgIEFyZ3VtZW50c05vZGUqIGNyZWF0ZUFyZ3VtZW50cyhBcmd1
bWVudExpc3ROb2RlKiBhcmdzKSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQXJndW1lbnRz
Tm9kZShhcmdzKTsgfQotICAgIEFyZ3VtZW50TGlzdE5vZGUqIGNyZWF0ZUFyZ3VtZW50c0xpc3Qo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGFyZykgeyBy
ZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEFyZ3VtZW50TGlzdE5vZGUobG9jYXRpb24sIGFyZyk7
IH0KLSAgICBBcmd1bWVudExpc3ROb2RlKiBjcmVhdGVBcmd1bWVudHNMaXN0KGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEFyZ3VtZW50TGlzdE5vZGUqIGFyZ3MsIEV4cHJlc3Npb25O
b2RlKiBhcmcpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBBcmd1bWVudExpc3ROb2RlKGxv
Y2F0aW9uLCBhcmdzLCBhcmcpOyB9CisgICAgQXJndW1lbnRzTm9kZSogY3JlYXRlQXJndW1lbnRz
KCkgeyByZXR1cm4gbmV3IChtX3ZtKSBBcmd1bWVudHNOb2RlKCk7IH0KKyAgICBBcmd1bWVudHNO
b2RlKiBjcmVhdGVBcmd1bWVudHMoQXJndW1lbnRMaXN0Tm9kZSogYXJncykgeyByZXR1cm4gbmV3
IChtX3ZtKSBBcmd1bWVudHNOb2RlKGFyZ3MpOyB9CisgICAgQXJndW1lbnRMaXN0Tm9kZSogY3Jl
YXRlQXJndW1lbnRzTGlzdChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogYXJnKSB7IHJldHVybiBuZXcgKG1fdm0pIEFyZ3VtZW50TGlzdE5vZGUobG9jYXRp
b24sIGFyZyk7IH0KKyAgICBBcmd1bWVudExpc3ROb2RlKiBjcmVhdGVBcmd1bWVudHNMaXN0KGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEFyZ3VtZW50TGlzdE5vZGUqIGFyZ3MsIEV4
cHJlc3Npb25Ob2RlKiBhcmcpIHsgcmV0dXJuIG5ldyAobV92bSkgQXJndW1lbnRMaXN0Tm9kZShs
b2NhdGlvbiwgYXJncywgYXJnKTsgfQogCiAgICAgdGVtcGxhdGUgPGJvb2w+IFByb3BlcnR5Tm9k
ZSogY3JlYXRlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBFeHByZXNz
aW9uTm9kZSogbm9kZSwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUpCiAgICAgewogICAgICAgICBp
ZiAobm9kZS0+aXNGdW5jRXhwck5vZGUoKSkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEZ1bmNF
eHByTm9kZSo+KG5vZGUpLT5ib2R5KCktPnNldEluZmVycmVkTmFtZSgqcHJvcGVydHlOYW1lKTsK
LSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBQcm9wZXJ0eU5vZGUobV9nbG9iYWxE
YXRhLCAqcHJvcGVydHlOYW1lLCBub2RlLCB0eXBlKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV92
bSkgUHJvcGVydHlOb2RlKG1fdm0sICpwcm9wZXJ0eU5hbWUsIG5vZGUsIHR5cGUpOwogICAgIH0K
LSAgICB0ZW1wbGF0ZSA8Ym9vbD4gUHJvcGVydHlOb2RlKiBjcmVhdGVQcm9wZXJ0eShKU0dsb2Jh
bERhdGEqLCBkb3VibGUgcHJvcGVydHlOYW1lLCBFeHByZXNzaW9uTm9kZSogbm9kZSwgUHJvcGVy
dHlOb2RlOjpUeXBlIHR5cGUpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBQcm9wZXJ0eU5v
ZGUobV9nbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIG5vZGUsIHR5cGUpOyB9Ci0gICAgUHJvcGVy
dHlMaXN0Tm9kZSogY3JlYXRlUHJvcGVydHlMaXN0KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9j
YXRpb24sIFByb3BlcnR5Tm9kZSogcHJvcGVydHkpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRh
KSBQcm9wZXJ0eUxpc3ROb2RlKGxvY2F0aW9uLCBwcm9wZXJ0eSk7IH0KLSAgICBQcm9wZXJ0eUxp
c3ROb2RlKiBjcmVhdGVQcm9wZXJ0eUxpc3QoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgUHJvcGVydHlOb2RlKiBwcm9wZXJ0eSwgUHJvcGVydHlMaXN0Tm9kZSogdGFpbCkgeyByZXR1
cm4gbmV3IChtX2dsb2JhbERhdGEpIFByb3BlcnR5TGlzdE5vZGUobG9jYXRpb24sIHByb3BlcnR5
LCB0YWlsKTsgfQorICAgIHRlbXBsYXRlIDxib29sPiBQcm9wZXJ0eU5vZGUqIGNyZWF0ZVByb3Bl
cnR5KFZNKiwgZG91YmxlIHByb3BlcnR5TmFtZSwgRXhwcmVzc2lvbk5vZGUqIG5vZGUsIFByb3Bl
cnR5Tm9kZTo6VHlwZSB0eXBlKSB7IHJldHVybiBuZXcgKG1fdm0pIFByb3BlcnR5Tm9kZShtX3Zt
LCBwcm9wZXJ0eU5hbWUsIG5vZGUsIHR5cGUpOyB9CisgICAgUHJvcGVydHlMaXN0Tm9kZSogY3Jl
YXRlUHJvcGVydHlMaXN0KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFByb3BlcnR5
Tm9kZSogcHJvcGVydHkpIHsgcmV0dXJuIG5ldyAobV92bSkgUHJvcGVydHlMaXN0Tm9kZShsb2Nh
dGlvbiwgcHJvcGVydHkpOyB9CisgICAgUHJvcGVydHlMaXN0Tm9kZSogY3JlYXRlUHJvcGVydHlM
aXN0KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFByb3BlcnR5Tm9kZSogcHJvcGVy
dHksIFByb3BlcnR5TGlzdE5vZGUqIHRhaWwpIHsgcmV0dXJuIG5ldyAobV92bSkgUHJvcGVydHlM
aXN0Tm9kZShsb2NhdGlvbiwgcHJvcGVydHksIHRhaWwpOyB9CiAKLSAgICBFbGVtZW50Tm9kZSog
Y3JlYXRlRWxlbWVudExpc3QoaW50IGVsaXNpb25zLCBFeHByZXNzaW9uTm9kZSogZXhwcikgeyBy
ZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEVsZW1lbnROb2RlKGVsaXNpb25zLCBleHByKTsgfQot
ICAgIEVsZW1lbnROb2RlKiBjcmVhdGVFbGVtZW50TGlzdChFbGVtZW50Tm9kZSogZWxlbXMsIGlu
dCBlbGlzaW9ucywgRXhwcmVzc2lvbk5vZGUqIGV4cHIpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxE
YXRhKSBFbGVtZW50Tm9kZShlbGVtcywgZWxpc2lvbnMsIGV4cHIpOyB9CisgICAgRWxlbWVudE5v
ZGUqIGNyZWF0ZUVsZW1lbnRMaXN0KGludCBlbGlzaW9ucywgRXhwcmVzc2lvbk5vZGUqIGV4cHIp
IHsgcmV0dXJuIG5ldyAobV92bSkgRWxlbWVudE5vZGUoZWxpc2lvbnMsIGV4cHIpOyB9CisgICAg
RWxlbWVudE5vZGUqIGNyZWF0ZUVsZW1lbnRMaXN0KEVsZW1lbnROb2RlKiBlbGVtcywgaW50IGVs
aXNpb25zLCBFeHByZXNzaW9uTm9kZSogZXhwcikgeyByZXR1cm4gbmV3IChtX3ZtKSBFbGVtZW50
Tm9kZShlbGVtcywgZWxpc2lvbnMsIGV4cHIpOyB9CiAKLSAgICBQYXJhbWV0ZXJOb2RlKiBjcmVh
dGVGb3JtYWxQYXJhbWV0ZXJMaXN0KGNvbnN0IElkZW50aWZpZXImIGlkZW50KSB7IHJldHVybiBu
ZXcgKG1fZ2xvYmFsRGF0YSkgUGFyYW1ldGVyTm9kZShpZGVudCk7IH0KLSAgICBQYXJhbWV0ZXJO
b2RlKiBjcmVhdGVGb3JtYWxQYXJhbWV0ZXJMaXN0KFBhcmFtZXRlck5vZGUqIGxpc3QsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50KSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUGFyYW1ldGVy
Tm9kZShsaXN0LCBpZGVudCk7IH0KKyAgICBQYXJhbWV0ZXJOb2RlKiBjcmVhdGVGb3JtYWxQYXJh
bWV0ZXJMaXN0KGNvbnN0IElkZW50aWZpZXImIGlkZW50KSB7IHJldHVybiBuZXcgKG1fdm0pIFBh
cmFtZXRlck5vZGUoaWRlbnQpOyB9CisgICAgUGFyYW1ldGVyTm9kZSogY3JlYXRlRm9ybWFsUGFy
YW1ldGVyTGlzdChQYXJhbWV0ZXJOb2RlKiBsaXN0LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkg
eyByZXR1cm4gbmV3IChtX3ZtKSBQYXJhbWV0ZXJOb2RlKGxpc3QsIGlkZW50KTsgfQogCi0gICAg
Q2FzZUNsYXVzZU5vZGUqIGNyZWF0ZUNsYXVzZShFeHByZXNzaW9uTm9kZSogZXhwciwgSlNDOjpT
b3VyY2VFbGVtZW50cyogc3RhdGVtZW50cykgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIENh
c2VDbGF1c2VOb2RlKGV4cHIsIHN0YXRlbWVudHMpOyB9Ci0gICAgQ2xhdXNlTGlzdE5vZGUqIGNy
ZWF0ZUNsYXVzZUxpc3QoQ2FzZUNsYXVzZU5vZGUqIGNsYXVzZSkgeyByZXR1cm4gbmV3IChtX2ds
b2JhbERhdGEpIENsYXVzZUxpc3ROb2RlKGNsYXVzZSk7IH0KLSAgICBDbGF1c2VMaXN0Tm9kZSog
Y3JlYXRlQ2xhdXNlTGlzdChDbGF1c2VMaXN0Tm9kZSogdGFpbCwgQ2FzZUNsYXVzZU5vZGUqIGNs
YXVzZSkgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIENsYXVzZUxpc3ROb2RlKHRhaWwsIGNs
YXVzZSk7IH0KKyAgICBDYXNlQ2xhdXNlTm9kZSogY3JlYXRlQ2xhdXNlKEV4cHJlc3Npb25Ob2Rl
KiBleHByLCBKU0M6OlNvdXJjZUVsZW1lbnRzKiBzdGF0ZW1lbnRzKSB7IHJldHVybiBuZXcgKG1f
dm0pIENhc2VDbGF1c2VOb2RlKGV4cHIsIHN0YXRlbWVudHMpOyB9CisgICAgQ2xhdXNlTGlzdE5v
ZGUqIGNyZWF0ZUNsYXVzZUxpc3QoQ2FzZUNsYXVzZU5vZGUqIGNsYXVzZSkgeyByZXR1cm4gbmV3
IChtX3ZtKSBDbGF1c2VMaXN0Tm9kZShjbGF1c2UpOyB9CisgICAgQ2xhdXNlTGlzdE5vZGUqIGNy
ZWF0ZUNsYXVzZUxpc3QoQ2xhdXNlTGlzdE5vZGUqIHRhaWwsIENhc2VDbGF1c2VOb2RlKiBjbGF1
c2UpIHsgcmV0dXJuIG5ldyAobV92bSkgQ2xhdXNlTGlzdE5vZGUodGFpbCwgY2xhdXNlKTsgfQog
CiAgICAgdm9pZCBzZXRVc2VzQXJndW1lbnRzKEZ1bmN0aW9uQm9keU5vZGUqIG5vZGUpIHsgbm9k
ZS0+c2V0VXNlc0FyZ3VtZW50cygpOyB9CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVGdW5j
RGVjbFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVu
dGlmaWVyKiBuYW1lLCBGdW5jdGlvbkJvZHlOb2RlKiBib2R5LCBQYXJhbWV0ZXJOb2RlKiBwYXJh
bWV0ZXJzLCBpbnQgb3BlbkJyYWNlUG9zLCBpbnQgY2xvc2VCcmFjZVBvcywgaW50IGJvZHlTdGFy
dExpbmUsIGludCBib2R5RW5kTGluZSkKICAgICB7Ci0gICAgICAgIEZ1bmNEZWNsTm9kZSogZGVj
bCA9IG5ldyAobV9nbG9iYWxEYXRhKSBGdW5jRGVjbE5vZGUobG9jYXRpb24sICpuYW1lLCBib2R5
LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24ob3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9z
LCBib2R5U3RhcnRMaW5lKSwgcGFyYW1ldGVycyk7Ci0gICAgICAgIGlmICgqbmFtZSA9PSBtX2ds
b2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cykKKyAgICAgICAgRnVuY0RlY2xOb2Rl
KiBkZWNsID0gbmV3IChtX3ZtKSBGdW5jRGVjbE5vZGUobG9jYXRpb24sICpuYW1lLCBib2R5LCBt
X3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24ob3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBi
b2R5U3RhcnRMaW5lKSwgcGFyYW1ldGVycyk7CisgICAgICAgIGlmICgqbmFtZSA9PSBtX3ZtLT5w
cm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMpCiAgICAgICAgICAgICB1c2VzQXJndW1lbnRzKCk7CiAg
ICAgICAgIG1fc2NvcGUubV9mdW5jRGVjbGFyYXRpb25zLT5kYXRhLmFwcGVuZChkZWNsLT5ib2R5
KCkpOwogICAgICAgICBib2R5LT5zZXRMb2MoYm9keVN0YXJ0TGluZSwgYm9keUVuZExpbmUsIGxv
Y2F0aW9uLmNoYXJQb3NpdGlvbik7CkBAIC0zMzIsNDIgKzMzMiw0MiBAQCBwdWJsaWM6CiAKICAg
ICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVCbG9ja1N0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBKU0M6OlNvdXJjZUVsZW1lbnRzKiBlbGVtZW50cywgaW50IHN0YXJ0TGlu
ZSwgaW50IGVuZExpbmUpCiAgICAgewotICAgICAgICBCbG9ja05vZGUqIGJsb2NrID0gbmV3ICht
X2dsb2JhbERhdGEpIEJsb2NrTm9kZShsb2NhdGlvbiwgZWxlbWVudHMpOworICAgICAgICBCbG9j
a05vZGUqIGJsb2NrID0gbmV3IChtX3ZtKSBCbG9ja05vZGUobG9jYXRpb24sIGVsZW1lbnRzKTsK
ICAgICAgICAgYmxvY2stPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNoYXJQ
b3NpdGlvbik7CiAgICAgICAgIHJldHVybiBibG9jazsKICAgICB9CiAKICAgICBTdGF0ZW1lbnRO
b2RlKiBjcmVhdGVFeHByU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IEV4cHJlc3Npb25Ob2RlKiBleHByLCBpbnQgc3RhcnQsIGludCBlbmQpCiAgICAgewotICAgICAg
ICBFeHByU3RhdGVtZW50Tm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIEV4cHJTdGF0
ZW1lbnROb2RlKGxvY2F0aW9uLCBleHByKTsKKyAgICAgICAgRXhwclN0YXRlbWVudE5vZGUqIHJl
c3VsdCA9IG5ldyAobV92bSkgRXhwclN0YXRlbWVudE5vZGUobG9jYXRpb24sIGV4cHIpOwogICAg
ICAgICByZXN1bHQtPnNldExvYyhzdGFydCwgZW5kLCBsb2NhdGlvbi5jaGFyUG9zaXRpb24pOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0
ZUlmU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25O
b2RlKiBjb25kaXRpb24sIFN0YXRlbWVudE5vZGUqIHRydWVCbG9jaywgaW50IHN0YXJ0LCBpbnQg
ZW5kKQogICAgIHsKLSAgICAgICAgSWZOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkg
SWZOb2RlKGxvY2F0aW9uLCBjb25kaXRpb24sIHRydWVCbG9jayk7CisgICAgICAgIElmTm9kZSog
cmVzdWx0ID0gbmV3IChtX3ZtKSBJZk5vZGUobG9jYXRpb24sIGNvbmRpdGlvbiwgdHJ1ZUJsb2Nr
KTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQsIGVuZCwgbG9jYXRpb24uY2hhclBvc2l0
aW9uKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBTdGF0ZW1lbnROb2Rl
KiBjcmVhdGVJZlN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHBy
ZXNzaW9uTm9kZSogY29uZGl0aW9uLCBTdGF0ZW1lbnROb2RlKiB0cnVlQmxvY2ssIFN0YXRlbWVu
dE5vZGUqIGZhbHNlQmxvY2ssIGludCBzdGFydCwgaW50IGVuZCkKICAgICB7Ci0gICAgICAgIElm
Tm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIElmRWxzZU5vZGUobG9jYXRpb24sIGNv
bmRpdGlvbiwgdHJ1ZUJsb2NrLCBmYWxzZUJsb2NrKTsKKyAgICAgICAgSWZOb2RlKiByZXN1bHQg
PSBuZXcgKG1fdm0pIElmRWxzZU5vZGUobG9jYXRpb24sIGNvbmRpdGlvbiwgdHJ1ZUJsb2NrLCBm
YWxzZUJsb2NrKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQsIGVuZCwgbG9jYXRpb24u
Y2hhclBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBTdGF0
ZW1lbnROb2RlKiBjcmVhdGVGb3JMb29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IEV4cHJlc3Npb25Ob2RlKiBpbml0aWFsaXplciwgRXhwcmVzc2lvbk5vZGUqIGNvbmRpdGlvbiwg
RXhwcmVzc2lvbk5vZGUqIGl0ZXIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudHMsIGludCBzdGFy
dCwgaW50IGVuZCkKICAgICB7Ci0gICAgICAgIEZvck5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9i
YWxEYXRhKSBGb3JOb2RlKGxvY2F0aW9uLCBpbml0aWFsaXplciwgY29uZGl0aW9uLCBpdGVyLCBz
dGF0ZW1lbnRzKTsKKyAgICAgICAgRm9yTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBGb3JOb2Rl
KGxvY2F0aW9uLCBpbml0aWFsaXplciwgY29uZGl0aW9uLCBpdGVyLCBzdGF0ZW1lbnRzKTsKICAg
ICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQsIGVuZCwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVh
dGVGb3JJbkxvb3AoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiBpbml0aWFsaXplciwgRXhwcmVzc2lvbk5vZGUq
IGl0ZXIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudHMsIGludCBzdGFydCwgaW50IGRpdm90LCBp
bnQgZW5kLCBpbnQgaW5pdFN0YXJ0LCBpbnQgaW5pdEVuZCwgaW50IHN0YXJ0TGluZSwgaW50IGVu
ZExpbmUpCiAgICAgewotICAgICAgICBGb3JJbk5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxE
YXRhKSBGb3JJbk5vZGUobV9nbG9iYWxEYXRhLCBsb2NhdGlvbiwgKmlkZW50LCBpbml0aWFsaXpl
ciwgaXRlciwgc3RhdGVtZW50cywgaW5pdFN0YXJ0LCBpbml0U3RhcnQgLSBzdGFydCwgaW5pdEVu
ZCAtIGluaXRTdGFydCk7CisgICAgICAgIEZvckluTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBG
b3JJbk5vZGUobV92bSwgbG9jYXRpb24sICppZGVudCwgaW5pdGlhbGl6ZXIsIGl0ZXIsIHN0YXRl
bWVudHMsIGluaXRTdGFydCwgaW5pdFN0YXJ0IC0gc3RhcnQsIGluaXRFbmQgLSBpbml0U3RhcnQp
OwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNo
YXJQb3NpdGlvbik7CiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQs
IGRpdm90ICsgMSwgZW5kKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTM3NSwyOCArMzc1
LDI4IEBAIHB1YmxpYzoKIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUZvckluTG9vcChjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogbGhzLCBFeHByZXNz
aW9uTm9kZSogaXRlciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50cywgaW50IGVTdGFydCwgaW50
IGVEaXZvdCwgaW50IGVFbmQsIGludCBzdGFydCwgaW50IGVuZCkKICAgICB7Ci0gICAgICAgIEZv
ckluTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIEZvckluTm9kZShsb2NhdGlvbiwg
bGhzLCBpdGVyLCBzdGF0ZW1lbnRzKTsKKyAgICAgICAgRm9ySW5Ob2RlKiByZXN1bHQgPSBuZXcg
KG1fdm0pIEZvckluTm9kZShsb2NhdGlvbiwgbGhzLCBpdGVyLCBzdGF0ZW1lbnRzKTsKICAgICAg
ICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQsIGVuZCwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAg
ICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVEaXZvdCwgZUVuZCk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgU3RhdGVtZW50Tm9kZSogY3Jl
YXRlRW1wdHlTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikgeyByZXR1
cm4gbmV3IChtX2dsb2JhbERhdGEpIEVtcHR5U3RhdGVtZW50Tm9kZShsb2NhdGlvbik7IH0KKyAg
ICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVFbXB0eVN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uKSB7IHJldHVybiBuZXcgKG1fdm0pIEVtcHR5U3RhdGVtZW50Tm9kZShsb2Nh
dGlvbik7IH0KIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVZhclN0YXRlbWVudChjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgaW50IHN0YXJ0
LCBpbnQgZW5kKQogICAgIHsKICAgICAgICAgU3RhdGVtZW50Tm9kZSogcmVzdWx0OwogICAgICAg
ICBpZiAoIWV4cHIpCi0gICAgICAgICAgICByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgRW1w
dHlTdGF0ZW1lbnROb2RlKGxvY2F0aW9uKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyAobV92
bSkgRW1wdHlTdGF0ZW1lbnROb2RlKGxvY2F0aW9uKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIFZhclN0YXRlbWVudE5vZGUobG9jYXRpb24s
IGV4cHIpOworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IChtX3ZtKSBWYXJTdGF0ZW1lbnROb2Rl
KGxvY2F0aW9uLCBleHByKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQsIGVuZCwgbG9j
YXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAg
ICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVSZXR1cm5TdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHJlc3Npb24sIGludCBlU3RhcnQsIGlu
dCBlRW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7Ci0gICAgICAgIFJldHVy
bk5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBSZXR1cm5Ob2RlKGxvY2F0aW9uLCBl
eHByZXNzaW9uKTsKKyAgICAgICAgUmV0dXJuTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBSZXR1
cm5Ob2RlKGxvY2F0aW9uLCBleHByZXNzaW9uKTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRp
b24ocmVzdWx0LCBlU3RhcnQsIGVFbmQsIGVFbmQpOwogICAgICAgICByZXN1bHQtPnNldExvYyhz
dGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CkBAIC00MDQsNyArNDA0LDcgQEAgcHVibGljOgogCiAgICAgU3RhdGVtZW50Tm9k
ZSogY3JlYXRlQnJlYWtTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
aW50IGVTdGFydCwgaW50IGVFbmQsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lKQogICAgIHsK
LSAgICAgICAgQnJlYWtOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQnJlYWtOb2Rl
KG1fZ2xvYmFsRGF0YSwgbG9jYXRpb24pOworICAgICAgICBCcmVha05vZGUqIHJlc3VsdCA9IG5l
dyAobV92bSkgQnJlYWtOb2RlKG1fdm0sIGxvY2F0aW9uKTsKICAgICAgICAgc2V0RXhjZXB0aW9u
TG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVFbmQsIGVFbmQpOwogICAgICAgICByZXN1bHQtPnNl
dExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CkBAIC00MTIsNyArNDEyLDcgQEAgcHVibGljOgogCiAgICAgU3RhdGVt
ZW50Tm9kZSogY3JlYXRlQnJlYWtTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgY29uc3QgSWRlbnRpZmllciogaWRlbnQsIGludCBlU3RhcnQsIGludCBlRW5kLCBpbnQg
c3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7Ci0gICAgICAgIEJyZWFrTm9kZSogcmVzdWx0
ID0gbmV3IChtX2dsb2JhbERhdGEpIEJyZWFrTm9kZShsb2NhdGlvbiwgKmlkZW50KTsKKyAgICAg
ICAgQnJlYWtOb2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIEJyZWFrTm9kZShsb2NhdGlvbiwgKmlk
ZW50KTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVFbmQs
IGVFbmQpOwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0
aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC00MjAsNyArNDIw
LDcgQEAgcHVibGljOgogCiAgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlQ29udGludWVTdGF0ZW1l
bnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgaW50IGVTdGFydCwgaW50IGVFbmQs
IGludCBzdGFydExpbmUsIGludCBlbmRMaW5lKQogICAgIHsKLSAgICAgICAgQ29udGludWVOb2Rl
KiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQ29udGludWVOb2RlKG1fZ2xvYmFsRGF0YSwg
bG9jYXRpb24pOworICAgICAgICBDb250aW51ZU5vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgQ29u
dGludWVOb2RlKG1fdm0sIGxvY2F0aW9uKTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24o
cmVzdWx0LCBlU3RhcnQsIGVFbmQsIGVFbmQpOwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFy
dExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CkBAIC00MjgsNyArNDI4LDcgQEAgcHVibGljOgogCiAgICAgU3RhdGVtZW50Tm9kZSog
Y3JlYXRlQ29udGludWVTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQsIGludCBlU3RhcnQsIGludCBlRW5kLCBpbnQgc3RhcnRM
aW5lLCBpbnQgZW5kTGluZSkKICAgICB7Ci0gICAgICAgIENvbnRpbnVlTm9kZSogcmVzdWx0ID0g
bmV3IChtX2dsb2JhbERhdGEpIENvbnRpbnVlTm9kZShsb2NhdGlvbiwgKmlkZW50KTsKKyAgICAg
ICAgQ29udGludWVOb2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIENvbnRpbnVlTm9kZShsb2NhdGlv
biwgKmlkZW50KTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBlU3RhcnQs
IGVFbmQsIGVFbmQpOwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUs
IGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC00MzYs
NyArNDM2LDcgQEAgcHVibGljOgogCiAgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlVHJ5U3RhdGVt
ZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFN0YXRlbWVudE5vZGUqIHRyeUJs
b2NrLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgU3RhdGVtZW50Tm9kZSogY2F0Y2hCbG9jaywg
U3RhdGVtZW50Tm9kZSogZmluYWxseUJsb2NrLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkK
ICAgICB7Ci0gICAgICAgIFRyeU5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBUcnlO
b2RlKGxvY2F0aW9uLCB0cnlCbG9jaywgKmlkZW50LCBjYXRjaEJsb2NrLCBmaW5hbGx5QmxvY2sp
OworICAgICAgICBUcnlOb2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIFRyeU5vZGUobG9jYXRpb24s
IHRyeUJsb2NrLCAqaWRlbnQsIGNhdGNoQmxvY2ssIGZpbmFsbHlCbG9jayk7CiAgICAgICAgIGlm
IChjYXRjaEJsb2NrKQogICAgICAgICAgICAgdXNlc0NhdGNoKCk7CiAgICAgICAgIHJlc3VsdC0+
c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKQEAgLTQ0
NSwyOSArNDQ1LDI5IEBAIHB1YmxpYzoKIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVN3aXRj
aFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9k
ZSogZXhwciwgQ2xhdXNlTGlzdE5vZGUqIGZpcnN0Q2xhdXNlcywgQ2FzZUNsYXVzZU5vZGUqIGRl
ZmF1bHRDbGF1c2UsIENsYXVzZUxpc3ROb2RlKiBzZWNvbmRDbGF1c2VzLCBpbnQgc3RhcnRMaW5l
LCBpbnQgZW5kTGluZSkKICAgICB7Ci0gICAgICAgIENhc2VCbG9ja05vZGUqIGNhc2VzID0gbmV3
IChtX2dsb2JhbERhdGEpIENhc2VCbG9ja05vZGUoZmlyc3RDbGF1c2VzLCBkZWZhdWx0Q2xhdXNl
LCBzZWNvbmRDbGF1c2VzKTsKLSAgICAgICAgU3dpdGNoTm9kZSogcmVzdWx0ID0gbmV3IChtX2ds
b2JhbERhdGEpIFN3aXRjaE5vZGUobG9jYXRpb24sIGV4cHIsIGNhc2VzKTsKKyAgICAgICAgQ2Fz
ZUJsb2NrTm9kZSogY2FzZXMgPSBuZXcgKG1fdm0pIENhc2VCbG9ja05vZGUoZmlyc3RDbGF1c2Vz
LCBkZWZhdWx0Q2xhdXNlLCBzZWNvbmRDbGF1c2VzKTsKKyAgICAgICAgU3dpdGNoTm9kZSogcmVz
dWx0ID0gbmV3IChtX3ZtKSBTd2l0Y2hOb2RlKGxvY2F0aW9uLCBleHByLCBjYXNlcyk7CiAgICAg
ICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uY2hhclBvc2l0
aW9uKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBTdGF0ZW1lbnROb2Rl
KiBjcmVhdGVXaGlsZVN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogZXhwciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCBpbnQgc3RhcnRM
aW5lLCBpbnQgZW5kTGluZSkKICAgICB7Ci0gICAgICAgIFdoaWxlTm9kZSogcmVzdWx0ID0gbmV3
IChtX2dsb2JhbERhdGEpIFdoaWxlTm9kZShsb2NhdGlvbiwgZXhwciwgc3RhdGVtZW50KTsKKyAg
ICAgICAgV2hpbGVOb2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIFdoaWxlTm9kZShsb2NhdGlvbiwg
ZXhwciwgc3RhdGVtZW50KTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRM
aW5lLCBsb2NhdGlvbi5jaGFyUG9zaXRpb24pOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZURvV2hpbGVTdGF0ZW1lbnQoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCBFeHByZXNz
aW9uTm9kZSogZXhwciwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUpCiAgICAgewotICAgICAg
ICBEb1doaWxlTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIERvV2hpbGVOb2RlKGxv
Y2F0aW9uLCBzdGF0ZW1lbnQsIGV4cHIpOworICAgICAgICBEb1doaWxlTm9kZSogcmVzdWx0ID0g
bmV3IChtX3ZtKSBEb1doaWxlTm9kZShsb2NhdGlvbiwgc3RhdGVtZW50LCBleHByKTsKICAgICAg
ICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jaGFyUG9zaXRp
b24pOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIFN0YXRlbWVudE5vZGUq
IGNyZWF0ZUxhYmVsU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50LCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQsIGludCBzdGFy
dCwgaW50IGVuZCkKICAgICB7Ci0gICAgICAgIExhYmVsTm9kZSogcmVzdWx0ID0gbmV3IChtX2ds
b2JhbERhdGEpIExhYmVsTm9kZShsb2NhdGlvbiwgKmlkZW50LCBzdGF0ZW1lbnQpOworICAgICAg
ICBMYWJlbE5vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgTGFiZWxOb2RlKGxvY2F0aW9uLCAqaWRl
bnQsIHN0YXRlbWVudCk7CiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgc3Rh
cnQsIGVuZCwgZW5kKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC00NzUsMTQg
KzQ3NSwxNCBAQCBwdWJsaWM6CiAgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlV2l0aFN0YXRlbWVu
dChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwg
U3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCBpbnQgc3RhcnQsIGludCBlbmQsIGludCBzdGFydExp
bmUsIGludCBlbmRMaW5lKQogICAgIHsKICAgICAgICAgdXNlc1dpdGgoKTsKLSAgICAgICAgV2l0
aE5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBXaXRoTm9kZShsb2NhdGlvbiwgZXhw
ciwgc3RhdGVtZW50LCBlbmQsIGVuZCAtIHN0YXJ0KTsKKyAgICAgICAgV2l0aE5vZGUqIHJlc3Vs
dCA9IG5ldyAobV92bSkgV2l0aE5vZGUobG9jYXRpb24sIGV4cHIsIHN0YXRlbWVudCwgZW5kLCBl
bmQgLSBzdGFydCk7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwg
bG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9ICAg
IAogICAgIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVRocm93U3RhdGVtZW50KGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBpbnQgc3RhcnQs
IGludCBlbmQsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lKQogICAgIHsKLSAgICAgICAgVGhy
b3dOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgVGhyb3dOb2RlKGxvY2F0aW9uLCBl
eHByKTsKKyAgICAgICAgVGhyb3dOb2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIFRocm93Tm9kZShs
b2NhdGlvbiwgZXhwcik7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGlu
ZSwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24o
cmVzdWx0LCBzdGFydCwgZW5kLCBlbmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDkw
LDIxICs0OTAsMjEgQEAgcHVibGljOgogICAgIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZURl
YnVnZ2VyKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGludCBzdGFydExpbmUsIGlu
dCBlbmRMaW5lKQogICAgIHsKLSAgICAgICAgRGVidWdnZXJTdGF0ZW1lbnROb2RlKiByZXN1bHQg
PSBuZXcgKG1fZ2xvYmFsRGF0YSkgRGVidWdnZXJTdGF0ZW1lbnROb2RlKGxvY2F0aW9uKTsKKyAg
ICAgICAgRGVidWdnZXJTdGF0ZW1lbnROb2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIERlYnVnZ2Vy
U3RhdGVtZW50Tm9kZShsb2NhdGlvbik7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGlu
ZSwgZW5kTGluZSwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAgICAgCiAgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlQ29uc3RTdGF0ZW1lbnQo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgQ29uc3REZWNsTm9kZSogZGVjbHMsIGlu
dCBzdGFydExpbmUsIGludCBlbmRMaW5lKQogICAgIHsKLSAgICAgICAgQ29uc3RTdGF0ZW1lbnRO
b2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQ29uc3RTdGF0ZW1lbnROb2RlKGxvY2F0
aW9uLCBkZWNscyk7CisgICAgICAgIENvbnN0U3RhdGVtZW50Tm9kZSogcmVzdWx0ID0gbmV3ICht
X3ZtKSBDb25zdFN0YXRlbWVudE5vZGUobG9jYXRpb24sIGRlY2xzKTsKICAgICAgICAgcmVzdWx0
LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jaGFyUG9zaXRpb24pOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIENvbnN0RGVjbE5vZGUqIGFwcGVuZENv
bnN0RGVjbChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBDb25zdERlY2xOb2RlKiB0
YWlsLCBjb25zdCBJZGVudGlmaWVyKiBuYW1lLCBFeHByZXNzaW9uTm9kZSogaW5pdGlhbGl6ZXIp
CiAgICAgewotICAgICAgICBDb25zdERlY2xOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0
YSkgQ29uc3REZWNsTm9kZShsb2NhdGlvbiwgKm5hbWUsIGluaXRpYWxpemVyKTsKKyAgICAgICAg
Q29uc3REZWNsTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBDb25zdERlY2xOb2RlKGxvY2F0aW9u
LCAqbmFtZSwgaW5pdGlhbGl6ZXIpOwogICAgICAgICBpZiAodGFpbCkKICAgICAgICAgICAgIHRh
aWwtPm1fbmV4dCA9IHJlc3VsdDsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTUxNyw3ICs1
MTcsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZFZhcihjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCwgaW50IGF0dHJzKQogICAgIHsKLSAgICAgICAgaWYgKG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlO
YW1lcy0+YXJndW1lbnRzID09ICppZGVudCkKKyAgICAgICAgaWYgKG1fdm0tPnByb3BlcnR5TmFt
ZXMtPmFyZ3VtZW50cyA9PSAqaWRlbnQpCiAgICAgICAgICAgICB1c2VzQXJndW1lbnRzKCk7CiAg
ICAgICAgIG1fc2NvcGUubV92YXJEZWNsYXJhdGlvbnMtPmRhdGEuYXBwZW5kKHN0ZDo6bWFrZV9w
YWlyKGlkZW50LCBhdHRycykpOwogICAgIH0KQEAgLTUzMCw3ICs1MzAsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxDb21tYU5vZGUqPihsaXN0KS0+YXBwZW5kKGluaXQpOwog
ICAgICAgICAgICAgcmV0dXJuIGxpc3Q7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyAo
bV9nbG9iYWxEYXRhKSBDb21tYU5vZGUobG9jYXRpb24sIGxpc3QsIGluaXQpOworICAgICAgICBy
ZXR1cm4gbmV3IChtX3ZtKSBDb21tYU5vZGUobG9jYXRpb24sIGxpc3QsIGluaXQpOwogICAgIH0K
IAogICAgIGludCBldmFsQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2V2YWxDb3VudDsgfQpAQCAt
NjE4LDkgKzYxOCw5IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgU2NvcGUgewot
ICAgICAgICBTY29wZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCi0gICAgICAgICAgICA6IG1f
dmFyRGVjbGFyYXRpb25zKG5ldyAoZ2xvYmFsRGF0YSkgUGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0
aW9uU3RhY2tzOjpWYXJTdGFjaz4pCi0gICAgICAgICAgICAsIG1fZnVuY0RlY2xhcmF0aW9ucyhu
ZXcgKGdsb2JhbERhdGEpIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rp
b25TdGFjaz4pCisgICAgICAgIFNjb3BlKFZNKiB2bSkKKyAgICAgICAgICAgIDogbV92YXJEZWNs
YXJhdGlvbnMobmV3ICh2bSkgUGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpWYXJT
dGFjaz4pCisgICAgICAgICAgICAsIG1fZnVuY0RlY2xhcmF0aW9ucyhuZXcgKHZtKSBQYXJzZXJB
cmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2s+KQogICAgICAgICAgICAg
LCBtX2ZlYXR1cmVzKDApCiAgICAgICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKDApCiAgICAgICAg
IHsKQEAgLTY0OCwxMCArNjQ4LDEwIEBAIHByaXZhdGU6CiAgICAgfQogICAgIEV4cHJlc3Npb25O
b2RlKiBjcmVhdGVOdW1iZXIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgZG91Ymxl
IGQpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIE51bWJlck5vZGUo
bG9jYXRpb24sIGQpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBOdW1iZXJOb2RlKGxvY2F0
aW9uLCBkKTsKICAgICB9CiAgICAgCi0gICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7Cisg
ICAgVk0qIG1fdm07CiAgICAgU291cmNlQ29kZSogbV9zb3VyY2VDb2RlOwogICAgIFNjb3BlIG1f
c2NvcGU7CiAgICAgVmVjdG9yPEJpbmFyeU9wZXJhbmQsIDEwLCBVbnNhZmVWZWN0b3JPdmVyZmxv
dz4gbV9iaW5hcnlPcGVyYW5kU3RhY2s7CkBAIC02NjUsMjYgKzY2NSwyNiBAQCBFeHByZXNzaW9u
Tm9kZSogQVNUQnVpbGRlcjo6bWFrZVR5cGVPZk5vCiB7CiAgICAgaWYgKGV4cHItPmlzUmVzb2x2
ZU5vZGUoKSkgewogICAgICAgICBSZXNvbHZlTm9kZSogcmVzb2x2ZSA9IHN0YXRpY19jYXN0PFJl
c29sdmVOb2RlKj4oZXhwcik7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgVHlw
ZU9mUmVzb2x2ZU5vZGUobG9jYXRpb24sIHJlc29sdmUtPmlkZW50aWZpZXIoKSk7CisgICAgICAg
IHJldHVybiBuZXcgKG1fdm0pIFR5cGVPZlJlc29sdmVOb2RlKGxvY2F0aW9uLCByZXNvbHZlLT5p
ZGVudGlmaWVyKCkpOwogICAgIH0KLSAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFR5cGVP
ZlZhbHVlTm9kZShsb2NhdGlvbiwgZXhwcik7CisgICAgcmV0dXJuIG5ldyAobV92bSkgVHlwZU9m
VmFsdWVOb2RlKGxvY2F0aW9uLCBleHByKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxk
ZXI6Om1ha2VEZWxldGVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJl
c3Npb25Ob2RlKiBleHByLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCkKIHsKICAgICBp
ZiAoIWV4cHItPmlzTG9jYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRh
KSBEZWxldGVWYWx1ZU5vZGUobG9jYXRpb24sIGV4cHIpOworICAgICAgICByZXR1cm4gbmV3ICht
X3ZtKSBEZWxldGVWYWx1ZU5vZGUobG9jYXRpb24sIGV4cHIpOwogICAgIGlmIChleHByLT5pc1Jl
c29sdmVOb2RlKCkpIHsKICAgICAgICAgUmVzb2x2ZU5vZGUqIHJlc29sdmUgPSBzdGF0aWNfY2Fz
dDxSZXNvbHZlTm9kZSo+KGV4cHIpOwotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEp
IERlbGV0ZVJlc29sdmVOb2RlKGxvY2F0aW9uLCByZXNvbHZlLT5pZGVudGlmaWVyKCksIGRpdm90
LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0p
IERlbGV0ZVJlc29sdmVOb2RlKGxvY2F0aW9uLCByZXNvbHZlLT5pZGVudGlmaWVyKCksIGRpdm90
LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CiAgICAgfQogICAgIGlmIChleHByLT5pc0Jy
YWNrZXRBY2Nlc3Nvck5vZGUoKSkgewogICAgICAgICBCcmFja2V0QWNjZXNzb3JOb2RlKiBicmFj
a2V0ID0gc3RhdGljX2Nhc3Q8QnJhY2tldEFjY2Vzc29yTm9kZSo+KGV4cHIpOwotICAgICAgICBy
ZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIERlbGV0ZUJyYWNrZXROb2RlKGxvY2F0aW9uLCBicmFj
a2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwg
ZW5kIC0gZGl2b3QpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBEZWxldGVCcmFja2V0Tm9k
ZShsb2NhdGlvbiwgYnJhY2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwgZGl2b3Qs
IGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKICAgICB9CiAgICAgQVNTRVJUKGV4cHItPmlz
RG90QWNjZXNzb3JOb2RlKCkpOwogICAgIERvdEFjY2Vzc29yTm9kZSogZG90ID0gc3RhdGljX2Nh
c3Q8RG90QWNjZXNzb3JOb2RlKj4oZXhwcik7Ci0gICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRh
KSBEZWxldGVEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCks
IGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CisgICAgcmV0dXJuIG5ldyAobV92
bSkgRGVsZXRlRG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigp
LCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOwogfQogCiBFeHByZXNzaW9uTm9k
ZSogQVNUQnVpbGRlcjo6bWFrZU5lZ2F0ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgRXhwcmVzc2lvbk5vZGUqIG4pCkBAIC02OTUsMTQgKzY5NSwxNCBAQCBFeHByZXNzaW9u
Tm9kZSogQVNUQnVpbGRlcjo6bWFrZU5lZ2F0ZU5vCiAgICAgICAgIHJldHVybiBudW1iZXJOb2Rl
OwogICAgIH0KIAotICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgTmVnYXRlTm9kZShsb2Nh
dGlvbiwgbik7CisgICAgcmV0dXJuIG5ldyAobV92bSkgTmVnYXRlTm9kZShsb2NhdGlvbiwgbik7
CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQml0d2lzZU5vdE5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpCiB7CiAg
ICAgaWYgKGV4cHItPmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9j
YXRpb24sIH50b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByKS0+dmFsdWUoKSkp
OwotICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQml0d2lzZU5vdE5vZGUobG9jYXRpb24s
IGV4cHIpOworICAgIHJldHVybiBuZXcgKG1fdm0pIEJpdHdpc2VOb3ROb2RlKGxvY2F0aW9uLCBl
eHByKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VNdWx0Tm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJl
c3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQpAQCAtNzE0LDEyICs3
MTQsMTIgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VNdWx0Tm9kZQogICAgICAg
ICByZXR1cm4gY3JlYXRlTnVtYmVyKGxvY2F0aW9uLCBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4o
ZXhwcjEpLT52YWx1ZSgpICogc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUo
KSk7CiAKICAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgc3RhdGljX2Nhc3Q8TnVtYmVyTm9k
ZSo+KGV4cHIxKS0+dmFsdWUoKSA9PSAxKQotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERh
dGEpIFVuYXJ5UGx1c05vZGUobG9jYXRpb24sIGV4cHIyKTsKKyAgICAgICAgcmV0dXJuIG5ldyAo
bV92bSkgVW5hcnlQbHVzTm9kZShsb2NhdGlvbiwgZXhwcjIpOwogCiAgICAgaWYgKGV4cHIyLT5p
c051bWJlcigpICYmIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkgPT0g
MSkKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBVbmFyeVBsdXNOb2RlKGxvY2F0
aW9uLCBleHByMSk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIFVuYXJ5UGx1c05vZGUobG9j
YXRpb24sIGV4cHIxKTsKIAotICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgTXVsdE5vZGUo
bG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgcmV0dXJu
IG5ldyAobV92bSkgTXVsdE5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3Np
Z25tZW50cyk7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlRGl2Tm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4
cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQpAQCAtNzI5LDcg
KzcyOSw3IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlRGl2Tm9kZSgKIAogICAg
IGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkKICAgICAgICAgcmV0
dXJuIGNyZWF0ZU51bWJlcihsb2NhdGlvbiwgc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIx
KS0+dmFsdWUoKSAvIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkpOwot
ICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgRGl2Tm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4
cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICByZXR1cm4gbmV3IChtX3ZtKSBEaXZOb2Rl
KGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCiBFeHBy
ZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZU1vZE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIs
IGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKQEAgLTczOSwxNCArNzM5LDE0IEBAIEV4cHJlc3Np
b25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlTW9kTm9kZSgKICAgICAKICAgICBpZiAoZXhwcjEtPmlz
TnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybiBjcmVhdGVOdW1i
ZXIobG9jYXRpb24sIGZtb2Qoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUo
KSwgc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUoKSkpOwotICAgIHJldHVy
biBuZXcgKG1fZ2xvYmFsRGF0YSkgTW9kTm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdo
dEhhc0Fzc2lnbm1lbnRzKTsKKyAgICByZXR1cm4gbmV3IChtX3ZtKSBNb2ROb2RlKGxvY2F0aW9u
LCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCiBFeHByZXNzaW9uTm9k
ZSogQVNUQnVpbGRlcjo6bWFrZUFkZE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmln
aHRIYXNBc3NpZ25tZW50cykKIHsKICAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjIt
PmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIHN0YXRp
Y19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkgKyBzdGF0aWNfY2FzdDxOdW1iZXJO
b2RlKj4oZXhwcjIpLT52YWx1ZSgpKTsKLSAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEFk
ZE5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAg
cmV0dXJuIG5ldyAobV92bSkgQWRkTm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhh
c0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VTdWJO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHBy
MSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCkBAIC03
NTYsNzkgKzc1Niw3OSBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZVN1Yk5vZGUo
CiAKICAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCiAgICAg
ICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIHN0YXRpY19jYXN0PE51bWJlck5vZGUq
PihleHByMSktPnZhbHVlKCkgLSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1
ZSgpKTsKLSAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFN1Yk5vZGUobG9jYXRpb24sIGV4
cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgcmV0dXJuIG5ldyAobV92bSkg
U3ViTm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0K
IAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VMZWZ0U2hpZnROb2RlKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lv
bk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCiB7CiAgICAgaWYgKGV4cHIx
LT5pc051bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigpKQogICAgICAgICByZXR1cm4gY3JlYXRl
TnVtYmVyKGxvY2F0aW9uLCB0b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSkt
PnZhbHVlKCkpIDw8ICh0b1VJbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52
YWx1ZSgpKSAmIDB4MWYpKTsKLSAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIExlZnRTaGlm
dE5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAg
cmV0dXJuIG5ldyAobV92bSkgTGVmdFNoaWZ0Tm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCBy
aWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1h
a2VSaWdodFNoaWZ0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2ln
bm1lbnRzKQogewogICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIo
KSkKICAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlcihsb2NhdGlvbiwgdG9JbnQzMihzdGF0aWNf
Y2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpKSA+PiAodG9VSW50MzIoc3RhdGljX2Nh
c3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUoKSkgJiAweDFmKSk7Ci0gICAgcmV0dXJuIG5l
dyAobV9nbG9iYWxEYXRhKSBSaWdodFNoaWZ0Tm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCBy
aWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICByZXR1cm4gbmV3IChtX3ZtKSBSaWdodFNoaWZ0Tm9k
ZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhw
cmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VVUmlnaHRTaGlmdE5vZGUoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9k
ZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKIHsKICAgICBpZiAoZXhwcjEtPmlz
TnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybiBjcmVhdGVOdW1i
ZXIobG9jYXRpb24sIHRvVUludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZh
bHVlKCkpID4+ICh0b1VJbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1
ZSgpKSAmIDB4MWYpKTsKLSAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFVuc2lnbmVkUmln
aHRTaGlmdE5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7
CisgICAgcmV0dXJuIG5ldyAobV92bSkgVW5zaWduZWRSaWdodFNoaWZ0Tm9kZShsb2NhdGlvbiwg
ZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUq
IEFTVEJ1aWxkZXI6Om1ha2VCaXRPck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmln
aHRIYXNBc3NpZ25tZW50cykKIHsKICAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjIt
PmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIHRvSW50
MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSkgfCB0b0ludDMyKHN0
YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkpKTsKLSAgICByZXR1cm4gbmV3
IChtX2dsb2JhbERhdGEpIEJpdE9yTm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhh
c0Fzc2lnbm1lbnRzKTsKKyAgICByZXR1cm4gbmV3IChtX3ZtKSBCaXRPck5vZGUobG9jYXRpb24s
IGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiB9CiAKIEV4cHJlc3Npb25Ob2Rl
KiBBU1RCdWlsZGVyOjptYWtlQml0QW5kTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCBy
aWdodEhhc0Fzc2lnbm1lbnRzKQogewogICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBleHBy
Mi0+aXNOdW1iZXIoKSkKICAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlcihsb2NhdGlvbiwgdG9J
bnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpKSAmIHRvSW50MzIo
c3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUoKSkpOwotICAgIHJldHVybiBu
ZXcgKG1fZ2xvYmFsRGF0YSkgQml0QW5kTm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdo
dEhhc0Fzc2lnbm1lbnRzKTsKKyAgICByZXR1cm4gbmV3IChtX3ZtKSBCaXRBbmROb2RlKGxvY2F0
aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCiBFeHByZXNzaW9u
Tm9kZSogQVNUQnVpbGRlcjo6bWFrZUJpdFhPck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJv
b2wgcmlnaHRIYXNBc3NpZ25tZW50cykKIHsKICAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYg
ZXhwcjItPmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24s
IHRvSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSkgXiB0b0lu
dDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkpKTsKLSAgICByZXR1
cm4gbmV3IChtX2dsb2JhbERhdGEpIEJpdFhPck5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwg
cmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgcmV0dXJuIG5ldyAobV92bSkgQml0WE9yTm9kZShs
b2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhwcmVz
c2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBBcmd1bWVudHNOb2RlKiBh
cmdzLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCkKIHsKICAgICBpZiAoIWZ1bmMtPmlz
TG9jYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBGdW5jdGlvbkNh
bGxWYWx1ZU5vZGUobG9jYXRpb24sIGZ1bmMsIGFyZ3MsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBl
bmQgLSBkaXZvdCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEZ1bmN0aW9uQ2FsbFZhbHVl
Tm9kZShsb2NhdGlvbiwgZnVuYywgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRp
dm90KTsKICAgICBpZiAoZnVuYy0+aXNSZXNvbHZlTm9kZSgpKSB7CiAgICAgICAgIFJlc29sdmVO
b2RlKiByZXNvbHZlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihmdW5jKTsKICAgICAgICAg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciA9IHJlc29sdmUtPmlkZW50aWZpZXIoKTsKLSAg
ICAgICAgaWYgKGlkZW50aWZpZXIgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5ldmFs
KSB7CisgICAgICAgIGlmIChpZGVudGlmaWVyID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwp
IHsKICAgICAgICAgICAgIHVzZXNFdmFsKCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IChtX2ds
b2JhbERhdGEpIEV2YWxGdW5jdGlvbkNhbGxOb2RlKGxvY2F0aW9uLCBhcmdzLCBkaXZvdCwgZGl2
b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOworICAgICAgICAgICAgcmV0dXJuIG5ldyAobV92bSkg
RXZhbEZ1bmN0aW9uQ2FsbE5vZGUobG9jYXRpb24sIGFyZ3MsIGRpdm90LCBkaXZvdCAtIHN0YXJ0
LCBlbmQgLSBkaXZvdCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxE
YXRhKSBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZShsb2NhdGlvbiwgaWRlbnRpZmllciwgYXJncywg
ZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKKyAgICAgICAgcmV0dXJuIG5ldyAo
bV92bSkgRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGUobG9jYXRpb24sIGlkZW50aWZpZXIsIGFyZ3Ms
IGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CiAgICAgfQogICAgIGlmIChmdW5j
LT5pc0JyYWNrZXRBY2Nlc3Nvck5vZGUoKSkgewogICAgICAgICBCcmFja2V0QWNjZXNzb3JOb2Rl
KiBicmFja2V0ID0gc3RhdGljX2Nhc3Q8QnJhY2tldEFjY2Vzc29yTm9kZSo+KGZ1bmMpOwotICAg
ICAgICBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZSogbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBG
dW5jdGlvbkNhbGxCcmFja2V0Tm9kZShsb2NhdGlvbiwgYnJhY2tldC0+YmFzZSgpLCBicmFja2V0
LT5zdWJzY3JpcHQoKSwgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsK
KyAgICAgICAgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIEZ1bmN0
aW9uQ2FsbEJyYWNrZXROb2RlKGxvY2F0aW9uLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1
YnNjcmlwdCgpLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOwogICAg
ICAgICBub2RlLT5zZXRTdWJleHByZXNzaW9uSW5mbyhicmFja2V0LT5kaXZvdCgpLCBicmFja2V0
LT5lbmRPZmZzZXQoKSk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KICAgICBBU1NFUlQo
ZnVuYy0+aXNEb3RBY2Nlc3Nvck5vZGUoKSk7CiAgICAgRG90QWNjZXNzb3JOb2RlKiBkb3QgPSBz
dGF0aWNfY2FzdDxEb3RBY2Nlc3Nvck5vZGUqPihmdW5jKTsKICAgICBGdW5jdGlvbkNhbGxEb3RO
b2RlKiBub2RlOwotICAgIGlmIChkb3QtPmlkZW50aWZpZXIoKSA9PSBtX2dsb2JhbERhdGEtPnBy
b3BlcnR5TmFtZXMtPmNhbGwpCi0gICAgICAgIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQ2Fs
bEZ1bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZp
ZXIoKSwgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKLSAgICBlbHNl
IGlmIChkb3QtPmlkZW50aWZpZXIoKSA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmFw
cGx5KQotICAgICAgICBub2RlID0gbmV3IChtX2dsb2JhbERhdGEpIEFwcGx5RnVuY3Rpb25DYWxs
RG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBhcmdzLCBk
aXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOworICAgIGlmIChkb3QtPmlkZW50aWZp
ZXIoKSA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5jYWxsKQorICAgICAgICBub2RlID0gbmV3ICht
X3ZtKSBDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+
aWRlbnRpZmllcigpLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOwor
ICAgIGVsc2UgaWYgKGRvdC0+aWRlbnRpZmllcigpID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmFw
cGx5KQorICAgICAgICBub2RlID0gbmV3IChtX3ZtKSBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUo
bG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgYXJncywgZGl2b3QsIGRp
dm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKICAgICBlbHNlCi0gICAgICAgIG5vZGUgPSBuZXcg
KG1fZ2xvYmFsRGF0YSkgRnVuY3Rpb25DYWxsRG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCks
IGRvdC0+aWRlbnRpZmllcigpLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2
b3QpOworICAgICAgICBub2RlID0gbmV3IChtX3ZtKSBGdW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0
aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGFyZ3MsIGRpdm90LCBkaXZvdCAt
IHN0YXJ0LCBlbmQgLSBkaXZvdCk7CiAgICAgbm9kZS0+c2V0U3ViZXhwcmVzc2lvbkluZm8oZG90
LT5kaXZvdCgpLCBkb3QtPmVuZE9mZnNldCgpKTsKICAgICByZXR1cm4gbm9kZTsKIH0KQEAgLTgz
NywxMCArODM3LDEwIEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQmluYXJ5Tm8K
IHsKICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgY2FzZSBPUjoKLSAgICAgICAgcmV0dXJuIG5l
dyAobV9nbG9iYWxEYXRhKSBMb2dpY2FsT3BOb2RlKGxvY2F0aW9uLCBsaHMuZmlyc3QsIHJocy5m
aXJzdCwgT3BMb2dpY2FsT3IpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBMb2dpY2FsT3BO
b2RlKGxvY2F0aW9uLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgT3BMb2dpY2FsT3IpOwogCiAgICAg
Y2FzZSBBTkQ6Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgTG9naWNhbE9wTm9k
ZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIE9wTG9naWNhbEFuZCk7CisgICAgICAg
IHJldHVybiBuZXcgKG1fdm0pIExvZ2ljYWxPcE5vZGUobG9jYXRpb24sIGxocy5maXJzdCwgcmhz
LmZpcnN0LCBPcExvZ2ljYWxBbmQpOwogCiAgICAgY2FzZSBCSVRPUjoKICAgICAgICAgcmV0dXJu
IG1ha2VCaXRPck5vZGUobG9jYXRpb24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25k
Lmhhc0Fzc2lnbm1lbnQpOwpAQCAtODUyLDM3ICs4NTIsMzcgQEAgRXhwcmVzc2lvbk5vZGUqIEFT
VEJ1aWxkZXI6Om1ha2VCaW5hcnlObwogICAgICAgICByZXR1cm4gbWFrZUJpdEFuZE5vZGUobG9j
YXRpb24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwog
CiAgICAgY2FzZSBFUUVROgotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEVxdWFs
Tm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdu
bWVudCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEVxdWFsTm9kZShsb2NhdGlvbiwgbGhz
LmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CiAKICAgICBjYXNl
IE5FOgotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIE5vdEVxdWFsTm9kZShsb2Nh
dGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7Cisg
ICAgICAgIHJldHVybiBuZXcgKG1fdm0pIE5vdEVxdWFsTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0
LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CiAKICAgICBjYXNlIFNUUkVR
OgotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFN0cmljdEVxdWFsTm9kZShsb2Nh
dGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7Cisg
ICAgICAgIHJldHVybiBuZXcgKG1fdm0pIFN0cmljdEVxdWFsTm9kZShsb2NhdGlvbiwgbGhzLmZp
cnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CiAKICAgICBjYXNlIFNU
Uk5FUToKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBOb3RTdHJpY3RFcXVhbE5v
ZGUobG9jYXRpb24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1l
bnQpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBOb3RTdHJpY3RFcXVhbE5vZGUobG9jYXRp
b24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwogCiAg
ICAgY2FzZSBMVDoKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBMZXNzTm9kZShs
b2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7
CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIExlc3NOb2RlKGxvY2F0aW9uLCBsaHMuZmlyc3Qs
IHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKIAogICAgIGNhc2UgR1Q6Ci0g
ICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgR3JlYXRlck5vZGUobG9jYXRpb24sIGxo
cy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOworICAgICAgICBy
ZXR1cm4gbmV3IChtX3ZtKSBHcmVhdGVyTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmly
c3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CiAKICAgICBjYXNlIExFOgotICAgICAgICBy
ZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIExlc3NFcU5vZGUobG9jYXRpb24sIGxocy5maXJzdCwg
cmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOworICAgICAgICByZXR1cm4gbmV3
IChtX3ZtKSBMZXNzRXFOb2RlKGxvY2F0aW9uLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNl
Y29uZC5oYXNBc3NpZ25tZW50KTsKIAogICAgIGNhc2UgR0U6Ci0gICAgICAgIHJldHVybiBuZXcg
KG1fZ2xvYmFsRGF0YSkgR3JlYXRlckVxTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmly
c3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0p
IEdyZWF0ZXJFcU5vZGUobG9jYXRpb24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25k
Lmhhc0Fzc2lnbm1lbnQpOwogCiAgICAgY2FzZSBJTlNUQU5DRU9GOiB7Ci0gICAgICAgIEluc3Rh
bmNlT2ZOb2RlKiBub2RlID0gbmV3IChtX2dsb2JhbERhdGEpIEluc3RhbmNlT2ZOb2RlKGxvY2F0
aW9uLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKKyAg
ICAgICAgSW5zdGFuY2VPZk5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIEluc3RhbmNlT2ZOb2RlKGxv
Y2F0aW9uLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsK
ICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgbGhzLnNlY29uZC5zdGFydCwgcmhz
LnNlY29uZC5zdGFydCwgcmhzLnNlY29uZC5lbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAg
ICB9CiAKICAgICBjYXNlIElOVE9LRU46IHsKLSAgICAgICAgSW5Ob2RlKiBub2RlID0gbmV3ICht
X2dsb2JhbERhdGEpIEluTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5z
ZWNvbmQuaGFzQXNzaWdubWVudCk7CisgICAgICAgIEluTm9kZSogbm9kZSA9IG5ldyAobV92bSkg
SW5Ob2RlKGxvY2F0aW9uLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3Np
Z25tZW50KTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgbGhzLnNlY29uZC5z
dGFydCwgcmhzLnNlY29uZC5zdGFydCwgcmhzLnNlY29uZC5lbmQpOwogICAgICAgICByZXR1cm4g
bm9kZTsKICAgICB9CkBAIC05MTgsMjQgKzkxOCwyNCBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVp
bGRlcjo6bWFrZUJpbmFyeU5vCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUFzc2ln
bk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGxv
YywgT3BlcmF0b3Igb3AsIEV4cHJlc3Npb25Ob2RlKiBleHByLCBib29sIGxvY0hhc0Fzc2lnbm1l
bnRzLCBib29sIGV4cHJIYXNBc3NpZ25tZW50cywgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBl
bmQpCiB7CiAgICAgaWYgKCFsb2MtPmlzTG9jYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIG5ldyAo
bV9nbG9iYWxEYXRhKSBBc3NpZ25FcnJvck5vZGUobG9jYXRpb24sIGRpdm90LCBkaXZvdCAtIHN0
YXJ0LCBlbmQgLSBkaXZvdCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEFzc2lnbkVycm9y
Tm9kZShsb2NhdGlvbiwgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKIAogICAg
IGlmIChsb2MtPmlzUmVzb2x2ZU5vZGUoKSkgewogICAgICAgICBSZXNvbHZlTm9kZSogcmVzb2x2
ZSA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4obG9jKTsKICAgICAgICAgaWYgKG9wID09IE9w
RXF1YWwpIHsKICAgICAgICAgICAgIGlmIChleHByLT5pc0Z1bmNFeHByTm9kZSgpKQogICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PEZ1bmNFeHByTm9kZSo+KGV4cHIpLT5ib2R5KCktPnNldElu
ZmVycmVkTmFtZShyZXNvbHZlLT5pZGVudGlmaWVyKCkpOwotICAgICAgICAgICAgQXNzaWduUmVz
b2x2ZU5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQXNzaWduUmVzb2x2ZU5vZGUobG9j
YXRpb24sIHJlc29sdmUtPmlkZW50aWZpZXIoKSwgZXhwcik7CisgICAgICAgICAgICBBc3NpZ25S
ZXNvbHZlTm9kZSogbm9kZSA9IG5ldyAobV92bSkgQXNzaWduUmVzb2x2ZU5vZGUobG9jYXRpb24s
IHJlc29sdmUtPmlkZW50aWZpZXIoKSwgZXhwcik7CiAgICAgICAgICAgICBzZXRFeGNlcHRpb25M
b2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCk7CiAgICAgICAgICAgICByZXR1cm4gbm9k
ZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFJlYWRNb2Rp
ZnlSZXNvbHZlTm9kZShsb2NhdGlvbiwgcmVzb2x2ZS0+aWRlbnRpZmllcigpLCBvcCwgZXhwciwg
ZXhwckhhc0Fzc2lnbm1lbnRzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOwor
ICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGUobG9jYXRpb24s
IHJlc29sdmUtPmlkZW50aWZpZXIoKSwgb3AsIGV4cHIsIGV4cHJIYXNBc3NpZ25tZW50cywgZGl2
b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKICAgICB9CiAgICAgaWYgKGxvYy0+aXNC
cmFja2V0QWNjZXNzb3JOb2RlKCkpIHsKICAgICAgICAgQnJhY2tldEFjY2Vzc29yTm9kZSogYnJh
Y2tldCA9IHN0YXRpY19jYXN0PEJyYWNrZXRBY2Nlc3Nvck5vZGUqPihsb2MpOwogICAgICAgICBp
ZiAob3AgPT0gT3BFcXVhbCkKLSAgICAgICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkg
QXNzaWduQnJhY2tldE5vZGUobG9jYXRpb24sIGJyYWNrZXQtPmJhc2UoKSwgYnJhY2tldC0+c3Vi
c2NyaXB0KCksIGV4cHIsIGxvY0hhc0Fzc2lnbm1lbnRzLCBleHBySGFzQXNzaWdubWVudHMsIGJy
YWNrZXQtPmRpdm90KCksIGJyYWNrZXQtPmRpdm90KCkgLSBzdGFydCwgZW5kIC0gYnJhY2tldC0+
ZGl2b3QoKSk7Ci0gICAgICAgIFJlYWRNb2RpZnlCcmFja2V0Tm9kZSogbm9kZSA9IG5ldyAobV9n
bG9iYWxEYXRhKSBSZWFkTW9kaWZ5QnJhY2tldE5vZGUobG9jYXRpb24sIGJyYWNrZXQtPmJhc2Uo
KSwgYnJhY2tldC0+c3Vic2NyaXB0KCksIG9wLCBleHByLCBsb2NIYXNBc3NpZ25tZW50cywgZXhw
ckhhc0Fzc2lnbm1lbnRzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOworICAg
ICAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgQXNzaWduQnJhY2tldE5vZGUobG9jYXRpb24sIGJy
YWNrZXQtPmJhc2UoKSwgYnJhY2tldC0+c3Vic2NyaXB0KCksIGV4cHIsIGxvY0hhc0Fzc2lnbm1l
bnRzLCBleHBySGFzQXNzaWdubWVudHMsIGJyYWNrZXQtPmRpdm90KCksIGJyYWNrZXQtPmRpdm90
KCkgLSBzdGFydCwgZW5kIC0gYnJhY2tldC0+ZGl2b3QoKSk7CisgICAgICAgIFJlYWRNb2RpZnlC
cmFja2V0Tm9kZSogbm9kZSA9IG5ldyAobV92bSkgUmVhZE1vZGlmeUJyYWNrZXROb2RlKGxvY2F0
aW9uLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBvcCwgZXhwciwgbG9j
SGFzQXNzaWdubWVudHMsIGV4cHJIYXNBc3NpZ25tZW50cywgZGl2b3QsIGRpdm90IC0gc3RhcnQs
IGVuZCAtIGRpdm90KTsKICAgICAgICAgbm9kZS0+c2V0U3ViZXhwcmVzc2lvbkluZm8oYnJhY2tl
dC0+ZGl2b3QoKSwgYnJhY2tldC0+ZW5kT2Zmc2V0KCkpOwogICAgICAgICByZXR1cm4gbm9kZTsK
ICAgICB9CkBAIC05NDQsMjIgKzk0NCwyMiBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6
bWFrZUFzc2lnbk5vCiAgICAgaWYgKG9wID09IE9wRXF1YWwpIHsKICAgICAgICAgaWYgKGV4cHIt
PmlzRnVuY0V4cHJOb2RlKCkpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxGdW5jRXhwck5vZGUq
PihleHByKS0+Ym9keSgpLT5zZXRJbmZlcnJlZE5hbWUoZG90LT5pZGVudGlmaWVyKCkpOwotICAg
ICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEFzc2lnbkRvdE5vZGUobG9jYXRpb24sIGRv
dC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgZXhwciwgZXhwckhhc0Fzc2lnbm1lbnRzLCBk
b3QtPmRpdm90KCksIGRvdC0+ZGl2b3QoKSAtIHN0YXJ0LCBlbmQgLSBkb3QtPmRpdm90KCkpOwor
ICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBBc3NpZ25Eb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJh
c2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGV4cHIsIGV4cHJIYXNBc3NpZ25tZW50cywgZG90LT5k
aXZvdCgpLCBkb3QtPmRpdm90KCkgLSBzdGFydCwgZW5kIC0gZG90LT5kaXZvdCgpKTsKICAgICB9
CiAKLSAgICBSZWFkTW9kaWZ5RG90Tm9kZSogbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBSZWFk
TW9kaWZ5RG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBv
cCwgZXhwciwgZXhwckhhc0Fzc2lnbm1lbnRzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0g
ZGl2b3QpOworICAgIFJlYWRNb2RpZnlEb3ROb2RlKiBub2RlID0gbmV3IChtX3ZtKSBSZWFkTW9k
aWZ5RG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBvcCwg
ZXhwciwgZXhwckhhc0Fzc2lnbm1lbnRzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2
b3QpOwogICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25JbmZvKGRvdC0+ZGl2b3QoKSwgZG90LT5l
bmRPZmZzZXQoKSk7CiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RC
dWlsZGVyOjptYWtlUHJlZml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogZXhwciwgT3BlcmF0b3Igb3AsIGludCBzdGFydCwgaW50IGRpdm90LCBp
bnQgZW5kKQogewotICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUHJlZml4Tm9kZShsb2Nh
dGlvbiwgZXhwciwgb3AsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CisgICAg
cmV0dXJuIG5ldyAobV92bSkgUHJlZml4Tm9kZShsb2NhdGlvbiwgZXhwciwgb3AsIGRpdm90LCBk
aXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWls
ZGVyOjptYWtlUG9zdGZpeE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIsIE9wZXJhdG9yIG9wLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50
IGVuZCkKIHsKLSAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFBvc3RmaXhOb2RlKGxvY2F0
aW9uLCBleHByLCBvcCwgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKKyAgICBy
ZXR1cm4gbmV3IChtX3ZtKSBQb3N0Zml4Tm9kZShsb2NhdGlvbiwgZXhwciwgb3AsIGRpdm90LCBk
aXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsOCBA
QCB1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUtleXdvcmRz
OjpLZXl3b3JkcyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCi0gICAgOiBtX2dsb2JhbERhdGEo
Z2xvYmFsRGF0YSkKK0tleXdvcmRzOjpLZXl3b3JkcyhWTSogdm0pCisgICAgOiBtX3ZtKHZtKQog
ICAgICwgbV9rZXl3b3JkVGFibGUoSlNDOjptYWluVGFibGUpCiB7CiB9CkBAIC00ODksOSArNDg5
LDkgQEAgc3RhdGljIGNvbnN0IExDaGFyIHNpbmdsZUNoYXJhY3RlckVzY2FwZQogfTsKIAogdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+Ci1MZXhlcjxUPjo6TGV4ZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKQorTGV4ZXI8VD46OkxleGVyKFZNKiB2bSkKICAgICA6IG1faXNSZXBhcnNpbmcoZmFsc2Up
Ci0gICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKKyAgICAsIG1fdm0odm0pCiB7CiB9CiAK
QEAgLTc4OSw3ICs3ODksNyBAQCB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDcmVhdGVJZGVudGlmaWVy
PiBBCiAgICAgaWYgKFVOTElLRUxZKChyZW1haW5pbmcgPCBtYXhUb2tlbkxlbmd0aCkgJiYgIShs
ZXhlckZsYWdzICYgTGV4ZXJGbGFnc0lnbm9yZVJlc2VydmVkV29yZHMpKSkgewogICAgICAgICBB
U1NFUlQoc2hvdWxkQ3JlYXRlSWRlbnRpZmllcik7CiAgICAgICAgIGlmIChyZW1haW5pbmcgPCBt
YXhUb2tlbkxlbmd0aCkgewotICAgICAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IG1f
Z2xvYmFsRGF0YS0+a2V5d29yZHMtPmdldEtleXdvcmQoKmlkZW50KTsKKyAgICAgICAgICAgIGNv
bnN0IEhhc2hFbnRyeSogZW50cnkgPSBtX3ZtLT5rZXl3b3Jkcy0+Z2V0S2V5d29yZCgqaWRlbnQp
OwogICAgICAgICAgICAgQVNTRVJUKChyZW1haW5pbmcgPCBtYXhUb2tlbkxlbmd0aCkgfHwgIWVu
dHJ5KTsKICAgICAgICAgICAgIGlmICghZW50cnkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIElE
RU5UOwpAQCAtODQ5LDcgKzg0OSw3IEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50
aWZpZXI+IEEKICAgICBpZiAoVU5MSUtFTFkoKHJlbWFpbmluZyA8IG1heFRva2VuTGVuZ3RoKSAm
JiAhKGxleGVyRmxhZ3MgJiBMZXhlckZsYWdzSWdub3JlUmVzZXJ2ZWRXb3JkcykpKSB7CiAgICAg
ICAgIEFTU0VSVChzaG91bGRDcmVhdGVJZGVudGlmaWVyKTsKICAgICAgICAgaWYgKHJlbWFpbmlu
ZyA8IG1heFRva2VuTGVuZ3RoKSB7Ci0gICAgICAgICAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5
ID0gbV9nbG9iYWxEYXRhLT5rZXl3b3Jkcy0+Z2V0S2V5d29yZCgqaWRlbnQpOworICAgICAgICAg
ICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IG1fdm0tPmtleXdvcmRzLT5nZXRLZXl3b3JkKCpp
ZGVudCk7CiAgICAgICAgICAgICBBU1NFUlQoKHJlbWFpbmluZyA8IG1heFRva2VuTGVuZ3RoKSB8
fCAhZW50cnkpOwogICAgICAgICAgICAgaWYgKCFlbnRyeSkKICAgICAgICAgICAgICAgICByZXR1
cm4gSURFTlQ7CkBAIC05MTYsNyArOTE2LDcgQEAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRl
SWRlbnRpZmllcj4gSgogICAgICAgICBBU1NFUlQoc2hvdWxkQ3JlYXRlSWRlbnRpZmllcik7CiAg
ICAgICAgIC8vIEtleXdvcmRzIG11c3Qgbm90IGJlIHJlY29nbml6ZWQgaWYgdGhlcmUgd2FzIGFu
IFx1WFhYWCBpbiB0aGUgaWRlbnRpZmllci4KICAgICAgICAgaWYgKHJlbWFpbmluZyA8IG1heFRv
a2VuTGVuZ3RoKSB7Ci0gICAgICAgICAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gbV9nbG9i
YWxEYXRhLT5rZXl3b3Jkcy0+Z2V0S2V5d29yZCgqaWRlbnQpOworICAgICAgICAgICAgY29uc3Qg
SGFzaEVudHJ5KiBlbnRyeSA9IG1fdm0tPmtleXdvcmRzLT5nZXRLZXl3b3JkKCppZGVudCk7CiAg
ICAgICAgICAgICBBU1NFUlQoKHJlbWFpbmluZyA8IG1heFRva2VuTGVuZ3RoKSB8fCAhZW50cnkp
OwogICAgICAgICAgICAgaWYgKCFlbnRyeSkKICAgICAgICAgICAgICAgICByZXR1cm4gSURFTlQ7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCShyZXZpc2lvbiAxNDg2NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDEyICszOSwxMiBAQCBjbGFzcyBLZXl3b3JkcyB7CiBwdWJsaWM6CiAgICAgYm9vbCBp
c0tleXdvcmQoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gbV9rZXl3b3JkVGFibGUuZW50cnkobV9nbG9iYWxEYXRhLCBpZGVudCk7CisgICAgICAg
IHJldHVybiBtX2tleXdvcmRUYWJsZS5lbnRyeShtX3ZtLCBpZGVudCk7CiAgICAgfQogICAgIAog
ICAgIGNvbnN0IEhhc2hFbnRyeSogZ2V0S2V5d29yZChjb25zdCBJZGVudGlmaWVyJiBpZGVudCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2tleXdvcmRUYWJsZS5lbnRyeShtX2dsb2Jh
bERhdGEsIGlkZW50KTsKKyAgICAgICAgcmV0dXJuIG1fa2V5d29yZFRhYmxlLmVudHJ5KG1fdm0s
IGlkZW50KTsKICAgICB9CiAgICAgCiAgICAgfktleXdvcmRzKCkKQEAgLTUzLDExICs1MywxMSBA
QCBwdWJsaWM6CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgSlNHbG9i
YWxEYXRhOworICAgIGZyaWVuZCBjbGFzcyBWTTsKICAgICAKLSAgICBLZXl3b3JkcyhKU0dsb2Jh
bERhdGEqKTsKKyAgICBLZXl3b3JkcyhWTSopOwogICAgIAotICAgIEpTR2xvYmFsRGF0YSogbV9n
bG9iYWxEYXRhOworICAgIFZNKiBtX3ZtOwogICAgIGNvbnN0IEhhc2hUYWJsZSBtX2tleXdvcmRU
YWJsZTsKIH07CiAKQEAgLTczLDcgKzczLDcgQEAgY2xhc3MgTGV4ZXIgewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogCiBwdWJsaWM6Ci0gICAgTGV4ZXIoSlNHbG9iYWxEYXRhKik7Cisg
ICAgTGV4ZXIoVk0qKTsKICAgICB+TGV4ZXIoKTsKIAogICAgIC8vIENoYXJhY3RlciBtYW5pcHVs
YXRpb24gZnVuY3Rpb25zLgpAQCAtMTkwLDcgKzE5MCw3IEBAIHByaXZhdGU6CiAKICAgICBJZGVu
dGlmaWVyQXJlbmEqIG1fYXJlbmE7CiAKLSAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsK
KyAgICBWTSogbV92bTsKIH07CiAKIHRlbXBsYXRlIDw+CkBAIC0yMzIsMjggKzIzMiwyOCBAQCBp
bmxpbmUgVUNoYXIgTGV4ZXI8VD46OmNvbnZlcnRVbmljb2RlKGluCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciogTGV4ZXI8VD46Om1ha2VJZGVu
dGlmaWVyKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogewotICAgIHJl
dHVybiAmbV9hcmVuYS0+bWFrZUlkZW50aWZpZXIobV9nbG9iYWxEYXRhLCBjaGFyYWN0ZXJzLCBs
ZW5ndGgpOworICAgIHJldHVybiAmbV9hcmVuYS0+bWFrZUlkZW50aWZpZXIobV92bSwgY2hhcmFj
dGVycywgbGVuZ3RoKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBBTFdBWVNfSU5MSU5F
IGNvbnN0IElkZW50aWZpZXIqIExleGVyPFQ+OjptYWtlSWRlbnRpZmllcihjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKIHsKLSAgICByZXR1cm4gJm1fYXJlbmEtPm1ha2VJ
ZGVudGlmaWVyKG1fZ2xvYmFsRGF0YSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICByZXR1cm4g
Jm1fYXJlbmEtPm1ha2VJZGVudGlmaWVyKG1fdm0sIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiB9CiAK
IHRlbXBsYXRlIDw+CiBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXIqIExleGVyPExDaGFy
Pjo6bWFrZVJpZ2h0U2l6ZWRJZGVudGlmaWVyKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoLCBVQ2hhcikKIHsKLSAgICByZXR1cm4gJm1fYXJlbmEtPm1ha2VJZGVudGlmaWVy
TENoYXJGcm9tVUNoYXIobV9nbG9iYWxEYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIHJl
dHVybiAmbV9hcmVuYS0+bWFrZUlkZW50aWZpZXJMQ2hhckZyb21VQ2hhcihtX3ZtLCBjaGFyYWN0
ZXJzLCBsZW5ndGgpOwogfQogCiB0ZW1wbGF0ZSA8PgogQUxXQVlTX0lOTElORSBjb25zdCBJZGVu
dGlmaWVyKiBMZXhlcjxVQ2hhcj46Om1ha2VSaWdodFNpemVkSWRlbnRpZmllcihjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVUNoYXIgb3JBbGxDaGFycykKIHsKICAgICBp
ZiAoIShvckFsbENoYXJzICYgfjB4ZmYpKQotICAgICAgICByZXR1cm4gJm1fYXJlbmEtPm1ha2VJ
ZGVudGlmaWVyTENoYXJGcm9tVUNoYXIobV9nbG9iYWxEYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGgp
OworICAgICAgICByZXR1cm4gJm1fYXJlbmEtPm1ha2VJZGVudGlmaWVyTENoYXJGcm9tVUNoYXIo
bV92bSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKIAotICAgIHJldHVybiAmbV9hcmVuYS0+bWFrZUlk
ZW50aWZpZXIobV9nbG9iYWxEYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIHJldHVybiAm
bV9hcmVuYS0+bWFrZUlkZW50aWZpZXIobV92bSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKIH0KIAog
dGVtcGxhdGUgPD4KQEAgLTI3MywxOSArMjczLDE5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBMZXhl
cjxVQ2hhcj46OnNldENvZGUKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogQUxXQVlTX0lOTElORSBj
b25zdCBJZGVudGlmaWVyKiBMZXhlcjxUPjo6bWFrZUlkZW50aWZpZXJMQ2hhckZyb21VQ2hhcihj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKIHsKLSAgICByZXR1cm4gJm1f
YXJlbmEtPm1ha2VJZGVudGlmaWVyTENoYXJGcm9tVUNoYXIobV9nbG9iYWxEYXRhLCBjaGFyYWN0
ZXJzLCBsZW5ndGgpOworICAgIHJldHVybiAmbV9hcmVuYS0+bWFrZUlkZW50aWZpZXJMQ2hhckZy
b21VQ2hhcihtX3ZtLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciogTGV4ZXI8VD46Om1ha2VMQ2hh
cklkZW50aWZpZXIoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiB7Ci0g
ICAgcmV0dXJuICZtX2FyZW5hLT5tYWtlSWRlbnRpZmllcihtX2dsb2JhbERhdGEsIGNoYXJhY3Rl
cnMsIGxlbmd0aCk7CisgICAgcmV0dXJuICZtX2FyZW5hLT5tYWtlSWRlbnRpZmllcihtX3ZtLCBj
aGFyYWN0ZXJzLCBsZW5ndGgpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIEFMV0FZU19J
TkxJTkUgY29uc3QgSWRlbnRpZmllciogTGV4ZXI8VD46Om1ha2VMQ2hhcklkZW50aWZpZXIoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuICZtX2Fy
ZW5hLT5tYWtlSWRlbnRpZmllckxDaGFyRnJvbVVDaGFyKG1fZ2xvYmFsRGF0YSwgY2hhcmFjdGVy
cywgbGVuZ3RoKTsKKyAgICByZXR1cm4gJm1fYXJlbmEtPm1ha2VJZGVudGlmaWVyTENoYXJGcm9t
VUNoYXIobV92bSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1
Y3RvcnMuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Ob2RlQ29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDE5ICsyNywxOSBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotICAgIGlubGluZSB2b2lkKiBQYXJzZXJBcmVuYUZyZWVhYmxl
OjpvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKKyAg
ICBpbmxpbmUgdm9pZCogUGFyc2VyQXJlbmFGcmVlYWJsZTo6b3BlcmF0b3IgbmV3KHNpemVfdCBz
aXplLCBWTSogdm0pCiAgICAgewotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+cGFyc2VyQXJl
bmEtPmFsbG9jYXRlRnJlZWFibGUoc2l6ZSk7CisgICAgICAgIHJldHVybiB2bS0+cGFyc2VyQXJl
bmEtPmFsbG9jYXRlRnJlZWFibGUoc2l6ZSk7CiAgICAgfQogCi0gICAgaW5saW5lIHZvaWQqIFBh
cnNlckFyZW5hRGVsZXRhYmxlOjpvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgdm9pZCogUGFyc2VyQXJlbmFEZWxldGFibGU6Om9w
ZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSwgVk0qIHZtKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGds
b2JhbERhdGEtPnBhcnNlckFyZW5hLT5hbGxvY2F0ZURlbGV0YWJsZShzaXplKTsKKyAgICAgICAg
cmV0dXJuIHZtLT5wYXJzZXJBcmVuYS0+YWxsb2NhdGVEZWxldGFibGUoc2l6ZSk7CiAgICAgfQog
Ci0gICAgaW5saW5lIFBhcnNlckFyZW5hUmVmQ291bnRlZDo6UGFyc2VyQXJlbmFSZWZDb3VudGVk
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgUGFyc2VyQXJlbmFSZWZDb3Vu
dGVkOjpQYXJzZXJBcmVuYVJlZkNvdW50ZWQoVk0qIHZtKQogICAgIHsKLSAgICAgICAgZ2xvYmFs
RGF0YS0+cGFyc2VyQXJlbmEtPmRlcmVmV2l0aEFyZW5hKGFkb3B0UmVmKHRoaXMpKTsKKyAgICAg
ICAgdm0tPnBhcnNlckFyZW5hLT5kZXJlZldpdGhBcmVuYShhZG9wdFJlZih0aGlzKSk7CiAgICAg
fQogCiAgICAgaW5saW5lIE5vZGU6Ok5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
bikKQEAgLTE0MSwxNSArMTQxLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAK
LSAgICBpbmxpbmUgUHJvcGVydHlOb2RlOjpQcm9wZXJ0eU5vZGUoSlNHbG9iYWxEYXRhKiwgY29u
c3QgSWRlbnRpZmllciYgbmFtZSwgRXhwcmVzc2lvbk5vZGUqIGFzc2lnbiwgVHlwZSB0eXBlKQor
ICAgIGlubGluZSBQcm9wZXJ0eU5vZGU6OlByb3BlcnR5Tm9kZShWTSosIGNvbnN0IElkZW50aWZp
ZXImIG5hbWUsIEV4cHJlc3Npb25Ob2RlKiBhc3NpZ24sIFR5cGUgdHlwZSkKICAgICAgICAgOiBt
X25hbWUobmFtZSkKICAgICAgICAgLCBtX2Fzc2lnbihhc3NpZ24pCiAgICAgICAgICwgbV90eXBl
KHR5cGUpCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBQcm9wZXJ0eU5vZGU6OlByb3BlcnR5
Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGRvdWJsZSBuYW1lLCBFeHByZXNzaW9uTm9k
ZSogYXNzaWduLCBUeXBlIHR5cGUpCi0gICAgICAgIDogbV9uYW1lKGdsb2JhbERhdGEtPnBhcnNl
ckFyZW5hLT5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIoZ2xvYmFsRGF0
YSwgbmFtZSkpCisgICAgaW5saW5lIFByb3BlcnR5Tm9kZTo6UHJvcGVydHlOb2RlKFZNKiB2bSwg
ZG91YmxlIG5hbWUsIEV4cHJlc3Npb25Ob2RlKiBhc3NpZ24sIFR5cGUgdHlwZSkKKyAgICAgICAg
OiBtX25hbWUodm0tPnBhcnNlckFyZW5hLT5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lk
ZW50aWZpZXIodm0sIG5hbWUpKQogICAgICAgICAsIG1fYXNzaWduKGFzc2lnbikKICAgICAgICAg
LCBtX3R5cGUodHlwZSkKICAgICB7CkBAIC02NjgsOSArNjY4LDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIEFTU0VSVChzdGF0ZW1lbnQpOwogICAgIH0KIAotICAgIGlubGluZSBDb250aW51
ZU5vZGU6OkNvbnRpbnVlTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24pCisgICAgaW5saW5lIENvbnRpbnVlTm9kZTo6Q29udGludWVO
b2RlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikKICAgICAgICAgOiBT
dGF0ZW1lbnROb2RlKGxvY2F0aW9uKQotICAgICAgICAsIG1faWRlbnQoZ2xvYmFsRGF0YS0+cHJv
cGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIpCisgICAgICAgICwgbV9pZGVudCh2bS0+cHJvcGVy
dHlOYW1lcy0+bnVsbElkZW50aWZpZXIpCiAgICAgewogICAgIH0KIApAQCAtNjgwLDkgKzY4MCw5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAgICAgCi0gICAgaW5saW5lIEJyZWFr
Tm9kZTo6QnJlYWtOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbikKKyAgICBpbmxpbmUgQnJlYWtOb2RlOjpCcmVha05vZGUoVk0qIHZt
LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uKQogICAgICAgICA6IFN0YXRlbWVudE5v
ZGUobG9jYXRpb24pCi0gICAgICAgICwgbV9pZGVudChnbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVz
LT5udWxsSWRlbnRpZmllcikKKyAgICAgICAgLCBtX2lkZW50KHZtLT5wcm9wZXJ0eU5hbWVzLT5u
dWxsSWRlbnRpZmllcikKICAgICB7CiAgICAgfQogCkBAIC04MTIsMTUgKzgxMiwxNSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEZvckluTm9kZTo6Rm9ySW5O
b2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiBpbiwgRXhwcmVz
c2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgaW50IGRpdm90LCBpbnQg
c3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQpCisgICAgaW5saW5lIEZvckluTm9kZTo6Rm9ySW5O
b2RlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiBpbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0
YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgaW50IGRpdm90LCBpbnQgc3RhcnRPZmZzZXQsIGludCBl
bmRPZmZzZXQpCiAgICAgICAgIDogU3RhdGVtZW50Tm9kZShsb2NhdGlvbikKICAgICAgICAgLCBt
X2luaXQoMCkKLSAgICAgICAgLCBtX2xleHByKG5ldyAoZ2xvYmFsRGF0YSkgUmVzb2x2ZU5vZGUo
bG9jYXRpb24sIGlkZW50LCBkaXZvdCAtIHN0YXJ0T2Zmc2V0KSkKKyAgICAgICAgLCBtX2xleHBy
KG5ldyAodm0pIFJlc29sdmVOb2RlKGxvY2F0aW9uLCBpZGVudCwgZGl2b3QgLSBzdGFydE9mZnNl
dCkpCiAgICAgICAgICwgbV9leHByKGV4cHIpCiAgICAgICAgICwgbV9zdGF0ZW1lbnQoc3RhdGVt
ZW50KQogICAgIHsKICAgICAgICAgaWYgKGluKSB7Ci0gICAgICAgICAgICBBc3NpZ25SZXNvbHZl
Tm9kZSogbm9kZSA9IG5ldyAoZ2xvYmFsRGF0YSkgQXNzaWduUmVzb2x2ZU5vZGUobG9jYXRpb24s
IGlkZW50LCBpbik7CisgICAgICAgICAgICBBc3NpZ25SZXNvbHZlTm9kZSogbm9kZSA9IG5ldyAo
dm0pIEFzc2lnblJlc29sdmVOb2RlKGxvY2F0aW9uLCBpZGVudCwgaW4pOwogICAgICAgICAgICAg
bm9kZS0+c2V0RXhjZXB0aW9uU291cmNlQ29kZShkaXZvdCwgZGl2b3QgLSBzdGFydE9mZnNldCwg
ZW5kT2Zmc2V0IC0gZGl2b3QpOwogICAgICAgICAgICAgbV9pbml0ID0gbm9kZTsKICAgICAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAJKHJldmlzaW9uIDE0
ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03Niw5ICs3Niw5IEBAIFN0YXRlbWVudE5vZGUqIFNvdXJjZUVsZW1lbnRzOjpz
aW5nbGVTdGEKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNjb3BlTm9kZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1TY29wZU5vZGU6OlNjb3BlTm9kZShKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlv
biwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgYm9vbCBpblN0cmljdENvbnRl
eHQpCitTY29wZU5vZGU6OlNjb3BlTm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
c3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgYm9vbCBp
blN0cmljdENvbnRleHQpCiAgICAgOiBTdGF0ZW1lbnROb2RlKGVuZExvY2F0aW9uKQotICAgICwg
UGFyc2VyQXJlbmFSZWZDb3VudGVkKGdsb2JhbERhdGEpCisgICAgLCBQYXJzZXJBcmVuYVJlZkNv
dW50ZWQodm0pCiAgICAgLCBtX3N0YXJ0TGluZU51bWJlcihzdGFydExvY2F0aW9uLmxpbmUpCiAg
ICAgLCBtX3N0YXJ0Q2hhclBvc2l0aW9uKHN0YXJ0TG9jYXRpb24uY2hhclBvc2l0aW9uKQogICAg
ICwgbV9mZWF0dXJlcyhpblN0cmljdENvbnRleHQgPyBTdHJpY3RNb2RlRmVhdHVyZSA6IE5vRmVh
dHVyZXMpCkBAIC04Nyw5ICs4Nyw5IEBAIFNjb3BlTm9kZTo6U2NvcGVOb2RlKEpTR2xvYmFsRGF0
YSogZ2xvYmEKIHsKIH0KIAotU2NvcGVOb2RlOjpTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgU291cmNl
RWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1
bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIENvZGVGZWF0dXJlcyBm
ZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKK1Njb3BlTm9kZTo6U2NvcGVOb2RlKFZNKiB2bSwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGVuZExvY2F0aW9uLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFNvdXJjZUVsZW1lbnRz
KiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ss
IElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMs
IGludCBudW1Db25zdGFudHMpCiAgICAgOiBTdGF0ZW1lbnROb2RlKGVuZExvY2F0aW9uKQotICAg
ICwgUGFyc2VyQXJlbmFSZWZDb3VudGVkKGdsb2JhbERhdGEpCisgICAgLCBQYXJzZXJBcmVuYVJl
ZkNvdW50ZWQodm0pCiAgICAgLCBtX3N0YXJ0TGluZU51bWJlcihzdGFydExvY2F0aW9uLmxpbmUp
CiAgICAgLCBtX3N0YXJ0Q2hhclBvc2l0aW9uKHN0YXJ0TG9jYXRpb24uY2hhclBvc2l0aW9uKQog
ICAgICwgbV9mZWF0dXJlcyhmZWF0dXJlcykKQEAgLTk3LDcgKzk3LDcgQEAgU2NvcGVOb2RlOjpT
Y29wZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYQogICAgICwgbV9udW1Db25zdGFudHMobnVtQ29u
c3RhbnRzKQogICAgICwgbV9zdGF0ZW1lbnRzKGNoaWxkcmVuKQogewotICAgIG1fYXJlbmEuc3dh
cCgqZ2xvYmFsRGF0YS0+cGFyc2VyQXJlbmEpOworICAgIG1fYXJlbmEuc3dhcCgqdm0tPnBhcnNl
ckFyZW5hKTsKICAgICBpZiAodmFyU3RhY2spCiAgICAgICAgIG1fdmFyU3RhY2suc3dhcCgqdmFy
U3RhY2spOwogICAgIGlmIChmdW5jU3RhY2spCkBAIC0xMTIsMTQgKzExMiwxNCBAQCBTdGF0ZW1l
bnROb2RlKiBTY29wZU5vZGU6OnNpbmdsZVN0YXRlbWVuCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBQcm9ncmFtTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
Ci1pbmxpbmUgUHJvZ3JhbU5vZGU6OlByb2dyYW1Ob2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGVuZExvY2F0aW9uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2
YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJl
ZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVy
ZXMsIGludCBudW1Db25zdGFudHMpCi0gICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgc3RhcnRM
b2NhdGlvbiwgZW5kTG9jYXRpb24sIHNvdXJjZSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3Rh
Y2ssIGNhcHR1cmVkVmFyaWFibGVzLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKQoraW5saW5lIFBy
b2dyYW1Ob2RlOjpQcm9ncmFtTm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3Rh
cnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgU291cmNlRWxl
bWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNT
dGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQorICAgIDog
U2NvcGVOb2RlKHZtLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlLCBjaGlsZHJl
biwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIGZlYXR1cmVzLCBudW1D
b25zdGFudHMpCiB7CiB9CiAKLVBhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IFByb2dyYW1Ob2RlOjpj
cmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0
YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIFNvdXJjZUVs
ZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5j
U3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKK1Bhc3NS
ZWZQdHI8UHJvZ3JhbU5vZGU+IFByb2dyYW1Ob2RlOjpjcmVhdGUoVk0qIHZtLCBjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9j
YXRpb24sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5j
dGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNv
bnN0YW50cykKIHsKLSAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IG5vZGUgPSBuZXcgUHJvZ3JhbU5v
ZGUoZ2xvYmFsRGF0YSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGNoaWxkcmVuLCB2YXJT
dGFjaywgZnVuY1N0YWNrLCAgY2FwdHVyZWRWYXJpYWJsZXMsIHNvdXJjZSwgZmVhdHVyZXMsIG51
bUNvbnN0YW50cyk7CisgICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBub2RlID0gbmV3IFByb2dyYW1O
b2RlKHZtLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgY2hpbGRyZW4sIHZhclN0YWNrLCBm
dW5jU3RhY2ssICBjYXB0dXJlZFZhcmlhYmxlcywgc291cmNlLCBmZWF0dXJlcywgbnVtQ29uc3Rh
bnRzKTsKIAogICAgIEFTU0VSVChub2RlLT5tX2FyZW5hLmxhc3QoKSA9PSBub2RlKTsKICAgICBu
b2RlLT5tX2FyZW5hLnJlbW92ZUxhc3QoKTsKQEAgLTEzMCwxNCArMTMwLDE0IEBAIFBhc3NSZWZQ
dHI8UHJvZ3JhbU5vZGU+IFByb2dyYW1Ob2RlOjpjcmUKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIEV2YWxOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWlu
bGluZSBFdmFsTm9kZTo6RXZhbE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBK
U1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5k
TG9jYXRpb24sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBG
dW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVz
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51
bUNvbnN0YW50cykKLSAgICA6IFNjb3BlTm9kZShnbG9iYWxEYXRhLCBzdGFydExvY2F0aW9uLCBl
bmRMb2NhdGlvbiwgc291cmNlLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVy
ZWRWYXJpYWJsZXMsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpCitpbmxpbmUgRXZhbE5vZGU6OkV2
YWxOb2RlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4s
IFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVy
U2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVh
dHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCisgICAgOiBTY29wZU5vZGUodm0sIHN0
YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzb3VyY2UsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVu
Y1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgZmVhdHVyZXMsIG51bUNvbnN0YW50cykKIHsKIH0K
IAotUGFzc1JlZlB0cjxFdmFsTm9kZT4gRXZhbE5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJT
dGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYg
Y2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVz
IGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQorUGFzc1JlZlB0cjxFdmFsTm9kZT4gRXZhbE5v
ZGU6OmNyZWF0ZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgU291cmNlRWxlbWVudHMqIGNoaWxk
cmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRp
ZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29k
ZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQogewotICAgIFJlZlB0cjxFdmFs
Tm9kZT4gbm9kZSA9IG5ldyBFdmFsTm9kZShnbG9iYWxEYXRhLCBzdGFydExvY2F0aW9uLCBlbmRM
b2NhdGlvbiwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVz
LCBzb3VyY2UsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpOworICAgIFJlZlB0cjxFdmFsTm9kZT4g
bm9kZSA9IG5ldyBFdmFsTm9kZSh2bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGNoaWxk
cmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgc291cmNlLCBmZWF0
dXJlcywgbnVtQ29uc3RhbnRzKTsKIAogICAgIEFTU0VSVChub2RlLT5tX2FyZW5hLmxhc3QoKSA9
PSBub2RlKTsKICAgICBub2RlLT5tX2FyZW5hLnJlbW92ZUxhc3QoKTsKQEAgLTE3MywxMyArMTcz
LDEzIEBAIEZ1bmN0aW9uUGFyYW1ldGVyczo6fkZ1bmN0aW9uUGFyYW1ldGVycygKICAgICAgICAg
aWRlbnRpZmllcnMoKVtpXS5+SWRlbnRpZmllcigpOwogfQogCi1pbmxpbmUgRnVuY3Rpb25Cb2R5
Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRM
b2NhdGlvbiwgYm9vbCBpblN0cmljdENvbnRleHQpCi0gICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0
YSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGluU3RyaWN0Q29udGV4dCkKK2lubGluZSBG
dW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9u
LCBib29sIGluU3RyaWN0Q29udGV4dCkKKyAgICA6IFNjb3BlTm9kZSh2bSwgc3RhcnRMb2NhdGlv
biwgZW5kTG9jYXRpb24sIGluU3RyaWN0Q29udGV4dCkKIHsKIH0KIAotaW5saW5lIEZ1bmN0aW9u
Qm9keU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25z
dCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
ZW5kTG9jYXRpb24sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNr
LCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFi
bGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMs
IGludCBudW1Db25zdGFudHMpCi0gICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgc3RhcnRMb2Nh
dGlvbiwgZW5kTG9jYXRpb24sIHNvdXJjZUNvZGUsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0
YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgZmVhdHVyZXMsIG51bUNvbnN0YW50cykKK2lubGluZSBG
dW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9u
LCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25T
dGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3Qg
U291cmNlQ29kZSYgc291cmNlQ29kZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29u
c3RhbnRzKQorICAgIDogU2NvcGVOb2RlKHZtLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwg
c291cmNlQ29kZSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFi
bGVzLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKQogewogfQogCkBAIC0xOTcsMTQgKzE5NywxNCBA
QCB2b2lkIEZ1bmN0aW9uQm9keU5vZGU6OmZpbmlzaFBhcnNpbmcoUGFzCiAgICAgbV9mdW5jdGlv
bk5hbWVJc0luU2NvcGVUb2dnbGUgPSBmdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGU7CiB9CiAK
LUZ1bmN0aW9uQm9keU5vZGUqIEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgYm9vbCBpblN0cmljdENvbnRleHQpCitGdW5j
dGlvbkJvZHlOb2RlKiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUoVk0qIHZtLCBjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9j
YXRpb24sIGJvb2wgaW5TdHJpY3RDb250ZXh0KQogewotICAgIHJldHVybiBuZXcgRnVuY3Rpb25C
b2R5Tm9kZShnbG9iYWxEYXRhLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgaW5TdHJpY3RD
b250ZXh0KTsKKyAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQm9keU5vZGUodm0sIHN0YXJ0TG9jYXRp
b24sIGVuZExvY2F0aW9uLCBpblN0cmljdENvbnRleHQpOwogfQogCi1QYXNzUmVmUHRyPEZ1bmN0
aW9uQm9keU5vZGU+IEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFj
ayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2Fw
dHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIENvZGVGZWF0dXJl
cyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKK1Bhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9k
ZT4gRnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCBTb3Vy
Y2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayog
ZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNl
Q29kZSYgc291cmNlQ29kZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRz
KQogewotICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBub2RlID0gbmV3IEZ1bmN0aW9uQm9k
eU5vZGUoZ2xvYmFsRGF0YSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGNoaWxkcmVuLCB2
YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgc291cmNlQ29kZSwgZmVhdHVy
ZXMsIG51bUNvbnN0YW50cyk7CisgICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IG5vZGUgPSBu
ZXcgRnVuY3Rpb25Cb2R5Tm9kZSh2bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGNoaWxk
cmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgc291cmNlQ29kZSwg
ZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7CiAKICAgICBBU1NFUlQobm9kZS0+bV9hcmVuYS5sYXN0
KCkgPT0gbm9kZSk7CiAgICAgbm9kZS0+bV9hcmVuYS5yZW1vdmVMYXN0KCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICAvLyBQYXJzZXJBcmVu
YUZyZWVhYmxlIG9iamVjdHMgYXJlIGFyZSBmcmVlZCB3aGVuIHRoZSBhcmVuYSBpcyBkZWxldGVk
LgogICAgICAgICAvLyBEZXN0cnVjdG9ycyBhcmUgbm90IGNhbGxlZC4gQ2xpZW50cyBtdXN0IG5v
dCBjYWxsIGRlbGV0ZSBvbiBzdWNoIG9iamVjdHMuCi0gICAgICAgIHZvaWQqIG9wZXJhdG9yIG5l
dyhzaXplX3QsIEpTR2xvYmFsRGF0YSopOworICAgICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6
ZV90LCBWTSopOwogICAgIH07CiAKICAgICBjbGFzcyBQYXJzZXJBcmVuYURlbGV0YWJsZSB7CkBA
IC0xMDMsNyArMTAzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gUGFyc2VyQXJl
bmFEZWxldGFibGUgb2JqZWN0cyBhcmUgZGVsZXRlZCB3aGVuIHRoZSBhcmVuYSBpcyBkZWxldGVk
LgogICAgICAgICAvLyBDbGllbnRzIG11c3Qgbm90IGNhbGwgZGVsZXRlIGRpcmVjdGx5IG9uIHN1
Y2ggb2JqZWN0cy4KLSAgICAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCwgSlNHbG9iYWxE
YXRhKik7CisgICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIFZNKik7CiAgICAgfTsK
IAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgpAQCAtMTEzLDcgKzExMyw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgY2xhc3MgUGFyc2VyQXJlbmFSZWZDb3VudGVkIDogcHVibGljIFJlZkNv
dW50ZWQ8UGFyc2VyQXJlbmFSZWZDb3VudGVkPiB7CiAgICAgcHJvdGVjdGVkOgotICAgICAgICBQ
YXJzZXJBcmVuYVJlZkNvdW50ZWQoSlNHbG9iYWxEYXRhKik7CisgICAgICAgIFBhcnNlckFyZW5h
UmVmQ291bnRlZChWTSopOwogCiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5QYXJzZXJB
cmVuYVJlZkNvdW50ZWQoKQpAQCAtMzk1LDcgKzM5NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBBcnJheU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRWxlbWVudE5vZGUqKTsKICAg
ICAgICAgQXJyYXlOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCBlbGlzaW9uLCBFbGVt
ZW50Tm9kZSopOwogCi0gICAgICAgIEFyZ3VtZW50TGlzdE5vZGUqIHRvQXJndW1lbnRMaXN0KEpT
R2xvYmFsRGF0YSosIGludCwgaW50KSBjb25zdDsKKyAgICAgICAgQXJndW1lbnRMaXN0Tm9kZSog
dG9Bcmd1bWVudExpc3QoVk0qLCBpbnQsIGludCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAg
ICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYs
IFJlZ2lzdGVySUQqID0gMCk7CkBAIC00MTEsOCArNDExLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgcHVibGljOgogICAgICAgICBlbnVtIFR5cGUgeyBDb25zdGFudCA9IDEsIEdldHRlciA9IDIs
IFNldHRlciA9IDQgfTsKIAotICAgICAgICBQcm9wZXJ0eU5vZGUoSlNHbG9iYWxEYXRhKiwgY29u
c3QgSWRlbnRpZmllciYsIEV4cHJlc3Npb25Ob2RlKiwgVHlwZSk7Ci0gICAgICAgIFByb3BlcnR5
Tm9kZShKU0dsb2JhbERhdGEqLCBkb3VibGUsIEV4cHJlc3Npb25Ob2RlKiwgVHlwZSk7CisgICAg
ICAgIFByb3BlcnR5Tm9kZShWTSosIGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uTm9kZSos
IFR5cGUpOworICAgICAgICBQcm9wZXJ0eU5vZGUoVk0qLCBkb3VibGUsIEV4cHJlc3Npb25Ob2Rl
KiwgVHlwZSk7CiAKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbmFtZTsgfQogICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KQEAgLTExODMsNyArMTE4Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEZvcklu
Tm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRh
dGEgewogICAgIHB1YmxpYzoKICAgICAgICAgRm9ySW5Ob2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIEV4cHJlc3Npb25Ob2RlKiwgRXhwcmVzc2lvbk5vZGUqLCBTdGF0ZW1lbnROb2RlKik7Ci0g
ICAgICAgIEZvckluTm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBj
b25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvbk5vZGUqLCBFeHByZXNzaW9uTm9kZSosIFN0YXRl
bWVudE5vZGUqLCBpbnQgZGl2b3QsIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCk7Cisg
ICAgICAgIEZvckluTm9kZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50
aWZpZXImLCBFeHByZXNzaW9uTm9kZSosIEV4cHJlc3Npb25Ob2RlKiwgU3RhdGVtZW50Tm9kZSos
IGludCBkaXZvdCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0KTsKIAogICAgIHByaXZh
dGU6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3Im
LCBSZWdpc3RlcklEKiA9IDApOwpAQCAtMTE5Niw3ICsxMTk2LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBjbGFzcyBDb250aW51ZU5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSwgcHVibGlj
IFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIENvbnRpbnVl
Tm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mKTsKKyAgICAgICAgQ29u
dGludWVOb2RlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJik7CiAgICAgICAgIENvbnRpbnVl
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgICAg
IAogICAgIHByaXZhdGU6CkBAIC0xMjA3LDcgKzEyMDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIGNsYXNzIEJyZWFrTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlLCBwdWJsaWMgVGhyb3dh
YmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgQnJlYWtOb2RlKEpTR2xv
YmFsRGF0YSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYpOworICAgICAgICBCcmVha05vZGUoVk0q
LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mKTsKICAgICAgICAgQnJlYWtOb2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImKTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToK
QEAgLTEyOTUsOCArMTI5NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0eXBlZGVmIERl
Y2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjayBWYXJTdGFjazsKICAgICAgICAgdHlwZWRlZiBEZWNs
YXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjayBGdW5jdGlvblN0YWNrOwogCi0gICAgICAgIFNj
b3BlTm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgYm9vbCBpblN0cmljdENvbnRleHQpOwotICAgICAgICBT
Y29wZU5vZGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIGNvbnN0IFNvdXJjZUNvZGUmLCBTb3VyY2VFbGVtZW50
cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBDb2RlRmVhdHVy
ZXMsIGludCBudW1Db25zdGFudHMpOworICAgICAgICBTY29wZU5vZGUoVk0qLCBjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgYm9vbCBpblN0
cmljdENvbnRleHQpOworICAgICAgICBTY29wZU5vZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgY29uc3QgU291cmNlQ29kZSYs
IFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNl
dCYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgdXNpbmcgUGFy
c2VyQXJlbmFSZWZDb3VudGVkOjpvcGVyYXRvciBuZXc7CiAKQEAgLTEzNjQsMTIgKzEzNjQsMTIg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgUHJvZ3JhbU5vZGUgOiBwdWJsaWMgU2NvcGVO
b2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzRnVuY3Rpb25O
b2RlID0gZmFsc2U7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb2dyYW1Ob2RlPiBjcmVh
dGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBlbmQsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0
YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGlu
dCBudW1Db25zdGFudHMpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQcm9ncmFtTm9kZT4g
Y3JlYXRlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBlbmQsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwg
SWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1D
b25zdGFudHMpOwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNjb3BlSXNGdW5jdGlvbiA9
IGZhbHNlOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgUHJvZ3JhbU5vZGUoSlNHbG9iYWxEYXRh
KiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBl
bmQsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmll
clNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMp
OworICAgICAgICBQcm9ncmFtTm9kZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQs
IGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwg
RnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZl
YXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKICAgICB9OwpAQCAt
MTM3NywxMiArMTM3NywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBFdmFsTm9kZSA6
IHB1YmxpYyBTY29wZU5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNGdW5jdGlvbk5vZGUgPSBmYWxzZTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZh
bE5vZGU+IGNyZWF0ZShKU0dsb2JhbERhdGEqLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0
LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayos
IEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVG
ZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV2
YWxOb2RlPiBjcmVhdGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGVuZCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9u
U3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywg
aW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2NvcGVJc0Z1
bmN0aW9uID0gZmFsc2U7CiAKICAgICBwcml2YXRlOgotICAgICAgICBFdmFsTm9kZShKU0dsb2Jh
bERhdGEqLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGVuZCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVu
dGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0
YW50cyk7CisgICAgICAgIEV2YWxOb2RlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFy
dCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sq
LCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2Rl
RmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBlbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwogICAgIH07CkBA
IC0xNDA5LDggKzE0MDksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBGdW5jdGlvbkJv
ZHlOb2RlIDogcHVibGljIFNjb3BlTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc0Z1bmN0aW9uTm9kZSA9IHRydWU7Ci0gICAgICAgIHN0YXRpYyBGdW5jdGlv
bkJvZHlOb2RlKiBjcmVhdGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBz
dGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIGJvb2wgaXNTdHJpY3RNb2RlKTsKLSAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gY3JlYXRlKEpTR2xvYmFs
RGF0YSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgZW5kLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50
aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3Rh
bnRzKTsKKyAgICAgICAgc3RhdGljIEZ1bmN0aW9uQm9keU5vZGUqIGNyZWF0ZShWTSosIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCBib29s
IGlzU3RyaWN0TW9kZSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5v
ZGU+IGNyZWF0ZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgZW5kLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFj
ayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQg
bnVtQ29uc3RhbnRzKTsKIAogICAgICAgICBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMo
KSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMuZ2V0KCk7IH0KICAgICAgICAgc2l6ZV90IHBh
cmFtZXRlckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLT5zaXplKCk7IH0KQEAg
LTE0MzMsOCArMTQzMyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBzY29wZUlzRnVuY3Rpb24gPSB0cnVlOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgRnVu
Y3Rpb25Cb2R5Tm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0
LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgYm9vbCBpblN0cmljdENvbnRleHQpOwotICAg
ICAgICBGdW5jdGlvbkJvZHlOb2RlKEpTR2xvYmFsRGF0YSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCBTb3VyY2VFbGVtZW50cyosIFZh
clN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2Rl
JiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgRnVuY3Rpb25Cb2R5
Tm9kZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgZW5kLCBib29sIGluU3RyaWN0Q29udGV4dCk7CisgICAgICAgIEZ1bmN0aW9uQm9keU5v
ZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGVuZCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVu
dGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0
YW50cyk7CiAKICAgICAgICAgSWRlbnRpZmllciBtX2lkZW50OwogICAgICAgICBJZGVudGlmaWVy
IG1faW5mZXJyZWROYW1lOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2Vy
LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiQVNU
QnVpbGRlci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgi
Ci0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJM
ZXhlci5oIgogI2luY2x1ZGUgIk5vZGVJbmZvLmgiCiAjaW5jbHVkZSAiU291cmNlUHJvdmlkZXIu
aCIKQEAgLTYyLDggKzYyLDggQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIG5hbWVzcGFjZSBKU0Mg
ewogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgotUGFyc2VyPExleGVyVHlwZT46OlBh
cnNlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwg
RnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBK
U1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywgSlNQYXJzZXJNb2RlIHBhcnNlck1vZGUpCi0g
ICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKK1BhcnNlcjxMZXhlclR5cGU+OjpQYXJzZXIo
Vk0qIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFy
YW1ldGVycywgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmlj
dG5lc3MsIEpTUGFyc2VyTW9kZSBwYXJzZXJNb2RlKQorICAgIDogbV92bSh2bSkKICAgICAsIG1f
c291cmNlKCZzb3VyY2UpCiAgICAgLCBtX3N0YWNrKHd0ZlRocmVhZERhdGEoKS5zdGFjaygpKQog
ICAgICwgbV9oYXNTdGFja092ZXJmbG93KGZhbHNlKQpAQCAtNzgsMTEgKzc4LDExIEBAIFBhcnNl
cjxMZXhlclR5cGU+OjpQYXJzZXIoSlNHbG9iYWxEYXRhKiAKICAgICAsIG1fbGFzdElkZW50aWZp
ZXIoMCkKICAgICAsIG1fc291cmNlRWxlbWVudHMoMCkKIHsKLSAgICBtX2xleGVyID0gYWRvcHRQ
dHIobmV3IExleGVyVHlwZShnbG9iYWxEYXRhKSk7Ci0gICAgbV9hcmVuYSA9IG1fZ2xvYmFsRGF0
YS0+cGFyc2VyQXJlbmEuZ2V0KCk7CisgICAgbV9sZXhlciA9IGFkb3B0UHRyKG5ldyBMZXhlclR5
cGUodm0pKTsKKyAgICBtX2FyZW5hID0gbV92bS0+cGFyc2VyQXJlbmEuZ2V0KCk7CiAgICAgbV9s
ZXhlci0+c2V0Q29kZShzb3VyY2UsIG1fYXJlbmEpOwogCi0gICAgbV9mdW5jdGlvbkNhY2hlID0g
Z2xvYmFsRGF0YS0+YWRkU291cmNlUHJvdmlkZXJDYWNoZShzb3VyY2UucHJvdmlkZXIoKSk7Cisg
ICAgbV9mdW5jdGlvbkNhY2hlID0gdm0tPmFkZFNvdXJjZVByb3ZpZGVyQ2FjaGUoc291cmNlLnBy
b3ZpZGVyKCkpOwogICAgIFNjb3BlUmVmIHNjb3BlID0gcHVzaFNjb3BlKCk7CiAgICAgaWYgKHBh
cnNlck1vZGUgPT0gSlNQYXJzZUZ1bmN0aW9uQ29kZSkKICAgICAgICAgc2NvcGUtPnNldElzRnVu
Y3Rpb24oKTsKQEAgLTEwNyw3ICsxMDcsNyBAQCBTdHJpbmcgUGFyc2VyPExleGVyVHlwZT46OnBh
cnNlSW5uZXIoKQogewogICAgIFN0cmluZyBwYXJzZUVycm9yID0gU3RyaW5nKCk7CiAgICAgCi0g
ICAgQVNUQnVpbGRlciBjb250ZXh0KGNvbnN0X2Nhc3Q8SlNHbG9iYWxEYXRhKj4obV9nbG9iYWxE
YXRhKSwgY29uc3RfY2FzdDxTb3VyY2VDb2RlKj4obV9zb3VyY2UpKTsKKyAgICBBU1RCdWlsZGVy
IGNvbnRleHQoY29uc3RfY2FzdDxWTSo+KG1fdm0pLCBjb25zdF9jYXN0PFNvdXJjZUNvZGUqPiht
X3NvdXJjZSkpOwogICAgIGlmIChtX2xleGVyLT5pc1JlcGFyc2luZygpKQogICAgICAgICBtX3N0
YXRlbWVudERlcHRoLS07CiAgICAgU2NvcGVSZWYgc2NvcGUgPSBjdXJyZW50U2NvcGUoKTsKQEAg
LTE2OCw3ICsxNjgsNyBAQCB0ZW1wbGF0ZSA8U291cmNlRWxlbWVudHNNb2RlIG1vZGUsIGNsYXNz
CiAgICAgICAgIGlmIChtb2RlID09IENoZWNrRm9yU3RyaWN0TW9kZSAmJiAhc2Vlbk5vbkRpcmVj
dGl2ZSkgewogICAgICAgICAgICAgaWYgKGRpcmVjdGl2ZSkgewogICAgICAgICAgICAgICAgIC8v
ICJ1c2Ugc3RyaWN0IiBtdXN0IGJlIHRoZSBleGFjdCBsaXRlcmFsIHdpdGhvdXQgZXNjYXBlIHNl
cXVlbmNlcyBvciBsaW5lIGNvbnRpbnVhdGlvbi4KLSAgICAgICAgICAgICAgICBpZiAoIWhhc1Nl
dFN0cmljdCAmJiBkaXJlY3RpdmVMaXRlcmFsTGVuZ3RoID09IGxlbmd0aE9mVXNlU3RyaWN0TGl0
ZXJhbCAmJiBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPnVzZVN0cmljdElkZW50aWZpZXIg
PT0gKmRpcmVjdGl2ZSkgeworICAgICAgICAgICAgICAgIGlmICghaGFzU2V0U3RyaWN0ICYmIGRp
cmVjdGl2ZUxpdGVyYWxMZW5ndGggPT0gbGVuZ3RoT2ZVc2VTdHJpY3RMaXRlcmFsICYmIG1fdm0t
PnByb3BlcnR5TmFtZXMtPnVzZVN0cmljdElkZW50aWZpZXIgPT0gKmRpcmVjdGl2ZSkgewogICAg
ICAgICAgICAgICAgICAgICBzZXRTdHJpY3RNb2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIGhh
c1NldFN0cmljdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGlzVmFs
aWRTdHJpY3RNb2RlKCkpOwpAQCAtNjMzLDcgKzYzMyw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICBBU1NFUlQobWF0Y2goVFJZKSk7CiAgICAgSlNUb2tl
bkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CiAgICAgVHJlZVN0YXRlbWVudCB0
cnlCbG9jayA9IDA7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmbV9nbG9iYWxEYXRh
LT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKICAgICBUcmVlU3Rh
dGVtZW50IGNhdGNoQmxvY2sgPSAwOwogICAgIFRyZWVTdGF0ZW1lbnQgZmluYWxseUJsb2NrID0g
MDsKICAgICBpbnQgZmlyc3RMaW5lID0gdG9rZW5MaW5lKCk7CkBAIC04MDAsNyArODAwLDcgQEAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRnVuY3RpbwogICAgICAgICByZXR1cm4g
Y29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwgdG9rZW5Mb2NhdGlvbigp
LCBzdHJpY3RNb2RlKCkpOwogICAgIERlcHRoTWFuYWdlciBzdGF0ZW1lbnREZXB0aCgmbV9zdGF0
ZW1lbnREZXB0aCk7CiAgICAgbV9zdGF0ZW1lbnREZXB0aCA9IDA7Ci0gICAgdHlwZW5hbWUgVHJl
ZUJ1aWxkZXI6OkZ1bmN0aW9uQm9keUJ1aWxkZXIgYm9keUJ1aWxkZXIoY29uc3RfY2FzdDxKU0ds
b2JhbERhdGEqPihtX2dsb2JhbERhdGEpLCBtX2xleGVyLmdldCgpKTsKKyAgICB0eXBlbmFtZSBU
cmVlQnVpbGRlcjo6RnVuY3Rpb25Cb2R5QnVpbGRlciBib2R5QnVpbGRlcihjb25zdF9jYXN0PFZN
Kj4obV92bSksIG1fbGV4ZXIuZ2V0KCkpOwogICAgIGZhaWxJZkZhbHNlKHBhcnNlU291cmNlRWxl
bWVudHM8Q2hlY2tGb3JTdHJpY3RNb2RlPihib2R5QnVpbGRlcikpOwogICAgIHJldHVybiBjb250
ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0aW9uLCB0b2tlbkxvY2F0aW9uKCksIHN0
cmljdE1vZGUoKSk7CiB9CkBAIC04NTUsOCArODU1LDggQEAgdGVtcGxhdGUgPEZ1bmN0aW9uUmVx
dWlyZW1lbnRzIHJlcXVpcmVtZQogICAgIGJvZHkgPSBwYXJzZUZ1bmN0aW9uQm9keShjb250ZXh0
KTsKICAgICBmYWlsSWZGYWxzZShib2R5KTsKICAgICBpZiAoZnVuY3Rpb25TY29wZS0+c3RyaWN0
TW9kZSgpICYmIG5hbWUpIHsKLSAgICAgICAgZmFpbElmVHJ1ZVdpdGhOYW1lQW5kTWVzc2FnZSht
X2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqbmFtZSwgIkZ1bmN0aW9u
IG5hbWUiLCBuYW1lLT5pbXBsKCksICJpcyBub3QgdmFsaWQgaW4gc3RyaWN0IG1vZGUiKTsKLSAg
ICAgICAgZmFpbElmVHJ1ZVdpdGhOYW1lQW5kTWVzc2FnZShtX2dsb2JhbERhdGEtPnByb3BlcnR5
TmFtZXMtPmV2YWwgPT0gKm5hbWUsICJGdW5jdGlvbiBuYW1lIiwgbmFtZS0+aW1wbCgpLCAiaXMg
bm90IHZhbGlkIGluIHN0cmljdCBtb2RlIik7CisgICAgICAgIGZhaWxJZlRydWVXaXRoTmFtZUFu
ZE1lc3NhZ2UobV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICpuYW1lLCAiRnVuY3Rp
b24gbmFtZSIsIG5hbWUtPmltcGwoKSwgImlzIG5vdCB2YWxpZCBpbiBzdHJpY3QgbW9kZSIpOwor
ICAgICAgICBmYWlsSWZUcnVlV2l0aE5hbWVBbmRNZXNzYWdlKG1fdm0tPnByb3BlcnR5TmFtZXMt
PmV2YWwgPT0gKm5hbWUsICJGdW5jdGlvbiBuYW1lIiwgbmFtZS0+aW1wbCgpLCAiaXMgbm90IHZh
bGlkIGluIHN0cmljdCBtb2RlIik7CiAgICAgfQogICAgIGNsb3NlQnJhY2VQb3MgPSBtX3Rva2Vu
Lm1fZGF0YS5pbnRWYWx1ZTsKICAgICAKQEAgLTExNDAsOCArMTE0MCw4IEBAIHRlbXBsYXRlIDx0
eXBlbmFtZSBUcmVlQnVpbGRlcj4gVHJlZUV4cHIKICAgICAgICAgbV9hc3NpZ25tZW50Q291bnQr
KzsKICAgICAgICAgbmV4dChUcmVlQnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5ncyk7CiAgICAgICAg
IGlmIChzdHJpY3RNb2RlKCkgJiYgbV9sYXN0SWRlbnRpZmllciAmJiBjb250ZXh0LmlzUmVzb2x2
ZShsaHMpKSB7Ci0gICAgICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3RXaXRoTWVzc2FnZShtX2ds
b2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKm1fbGFzdElkZW50aWZpZXIsICInZXZh
bCcgY2Fubm90IGJlIG1vZGlmaWVkIGluIHN0cmljdCBtb2RlIik7Ci0gICAgICAgICAgICBmYWls
SWZUcnVlSWZTdHJpY3RXaXRoTWVzc2FnZShtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmFy
Z3VtZW50cyA9PSAqbV9sYXN0SWRlbnRpZmllciwgIidhcmd1bWVudHMnIGNhbm5vdCBiZSBtb2Rp
ZmllZCBpbiBzdHJpY3QgbW9kZSIpOworICAgICAgICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0V2l0
aE1lc3NhZ2UobV92bS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqbV9sYXN0SWRlbnRpZmllciwg
IidldmFsJyBjYW5ub3QgYmUgbW9kaWZpZWQgaW4gc3RyaWN0IG1vZGUiKTsKKyAgICAgICAgICAg
IGZhaWxJZlRydWVJZlN0cmljdFdpdGhNZXNzYWdlKG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3Vt
ZW50cyA9PSAqbV9sYXN0SWRlbnRpZmllciwgIidhcmd1bWVudHMnIGNhbm5vdCBiZSBtb2RpZmll
ZCBpbiBzdHJpY3QgbW9kZSIpOwogICAgICAgICAgICAgZGVjbGFyZVdyaXRlKG1fbGFzdElkZW50
aWZpZXIpOwogICAgICAgICAgICAgbV9sYXN0SWRlbnRpZmllciA9IDA7CiAgICAgICAgIH0KQEAg
LTEyNTEsNyArMTI1MSw3IEBAIHRlbXBsYXRlIDxib29sIGNvbXBsZXRlLCBjbGFzcyBUcmVlQnVp
bGQKICAgICAgICAgd2FzSWRlbnQgPSB0cnVlOwogICAgIGNhc2UgU1RSSU5HOiB7CiAgICAgICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7Ci0gICAgICAg
IGlmIChjb21wbGV0ZSB8fCAod2FzSWRlbnQgJiYgKCppZGVudCA9PSBtX2dsb2JhbERhdGEtPnBy
b3BlcnR5TmFtZXMtPmdldCB8fCAqaWRlbnQgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVz
LT5zZXQpKSkKKyAgICAgICAgaWYgKGNvbXBsZXRlIHx8ICh3YXNJZGVudCAmJiAoKmlkZW50ID09
IG1fdm0tPnByb3BlcnR5TmFtZXMtPmdldCB8fCAqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1l
cy0+c2V0KSkpCiAgICAgICAgICAgICBuZXh0RXhwZWN0SWRlbnRpZmllcihMZXhlckZsYWdzSWdu
b3JlUmVzZXJ2ZWRXb3Jkcyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG5leHRFeHBlY3RJ
ZGVudGlmaWVyKExleGVyRmxhZ3NJZ25vcmVSZXNlcnZlZFdvcmRzIHwgVHJlZUJ1aWxkZXI6OkRv
bnRCdWlsZEtleXdvcmRzKTsKQEAgLTEyNzAsOSArMTI3MCw5IEBAIHRlbXBsYXRlIDxib29sIGNv
bXBsZXRlLCBjbGFzcyBUcmVlQnVpbGQKICAgICAgICAgaW50IGNsb3NlQnJhY2VQb3MgPSAwOwog
ICAgICAgICBpbnQgYm9keVN0YXJ0TGluZSA9IDA7CiAgICAgICAgIFByb3BlcnR5Tm9kZTo6VHlw
ZSB0eXBlOwotICAgICAgICBpZiAoKmlkZW50ID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1l
cy0+Z2V0KQorICAgICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmdldCkK
ICAgICAgICAgICAgIHR5cGUgPSBQcm9wZXJ0eU5vZGU6OkdldHRlcjsKLSAgICAgICAgZWxzZSBp
ZiAoKmlkZW50ID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+c2V0KQorICAgICAgICBl
bHNlIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+c2V0KQogICAgICAgICAgICAg
dHlwZSA9IFByb3BlcnR5Tm9kZTo6U2V0dGVyOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBm
YWlsKCk7CkBAIC0xMjg5LDcgKzEyODksNyBAQCB0ZW1wbGF0ZSA8Ym9vbCBjb21wbGV0ZSwgY2xh
c3MgVHJlZUJ1aWxkCiAgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbzxGdW5j
dGlvbk5vUmVxdWlyZW1lbnRzLCBmYWxzZT4oY29udGV4dCwgYWNjZXNzb3JOYW1lLCBwYXJhbWV0
ZXJzLCBib2R5LCBvcGVuQnJhY2VQb3MsIGNsb3NlQnJhY2VQb3MsIGJvZHlTdGFydExpbmUpKSk7
CiAgICAgICAgIGlmIChzdHJpbmdQcm9wZXJ0eU5hbWUpCiAgICAgICAgICAgICByZXR1cm4gY29u
dGV4dC50ZW1wbGF0ZSBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5PGNvbXBsZXRlPihsb2Nh
dGlvbiwgdHlwZSwgc3RyaW5nUHJvcGVydHlOYW1lLCBwYXJhbWV0ZXJzLCBib2R5LCBvcGVuQnJh
Y2VQb3MsIGNsb3NlQnJhY2VQb3MsIGJvZHlTdGFydExpbmUsIG1fbGFzdExpbmUpOwotICAgICAg
ICByZXR1cm4gY29udGV4dC50ZW1wbGF0ZSBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5PGNv
bXBsZXRlPihjb25zdF9jYXN0PEpTR2xvYmFsRGF0YSo+KG1fZ2xvYmFsRGF0YSksIGxvY2F0aW9u
LCB0eXBlLCBudW1lcmljUHJvcGVydHlOYW1lLCBwYXJhbWV0ZXJzLCBib2R5LCBvcGVuQnJhY2VQ
b3MsIGNsb3NlQnJhY2VQb3MsIGJvZHlTdGFydExpbmUsIG1fbGFzdExpbmUpOworICAgICAgICBy
ZXR1cm4gY29udGV4dC50ZW1wbGF0ZSBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5PGNvbXBs
ZXRlPihjb25zdF9jYXN0PFZNKj4obV92bSksIGxvY2F0aW9uLCB0eXBlLCBudW1lcmljUHJvcGVy
dHlOYW1lLCBwYXJhbWV0ZXJzLCBib2R5LCBvcGVuQnJhY2VQb3MsIGNsb3NlQnJhY2VQb3MsIGJv
ZHlTdGFydExpbmUsIG1fbGFzdExpbmUpOwogICAgIH0KICAgICBjYXNlIE5VTUJFUjogewogICAg
ICAgICBkb3VibGUgcHJvcGVydHlOYW1lID0gbV90b2tlbi5tX2RhdGEuZG91YmxlVmFsdWU7CkBA
IC0xMjk3LDcgKzEyOTcsNyBAQCB0ZW1wbGF0ZSA8Ym9vbCBjb21wbGV0ZSwgY2xhc3MgVHJlZUJ1
aWxkCiAgICAgICAgIGNvbnN1bWVPckZhaWwoQ09MT04pOwogICAgICAgICBUcmVlRXhwcmVzc2lv
biBub2RlID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKICAgICAgICAgZmFp
bElmRmFsc2Uobm9kZSk7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LnRlbXBsYXRlIGNyZWF0ZVBy
b3BlcnR5PGNvbXBsZXRlPihjb25zdF9jYXN0PEpTR2xvYmFsRGF0YSo+KG1fZ2xvYmFsRGF0YSks
IHByb3BlcnR5TmFtZSwgbm9kZSwgUHJvcGVydHlOb2RlOjpDb25zdGFudCk7CisgICAgICAgIHJl
dHVybiBjb250ZXh0LnRlbXBsYXRlIGNyZWF0ZVByb3BlcnR5PGNvbXBsZXRlPihjb25zdF9jYXN0
PFZNKj4obV92bSksIHByb3BlcnR5TmFtZSwgbm9kZSwgUHJvcGVydHlOb2RlOjpDb25zdGFudCk7
CiAgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAgIGZhaWxJZkZhbHNlKG1fdG9rZW4ubV90eXBl
ICYgS2V5d29yZFRva2VuRmxhZyk7CkBAIC0xNDkwLDcgKzE0OTAsNyBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CiAgICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2Nh
dGlvbih0b2tlbkxvY2F0aW9uKCkpOwogICAgICAgICBuZXh0KCk7Ci0gICAgICAgIGN1cnJlbnRT
Y29wZSgpLT51c2VWYXJpYWJsZShpZGVudCwgbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5l
dmFsID09ICppZGVudCk7CisgICAgICAgIGN1cnJlbnRTY29wZSgpLT51c2VWYXJpYWJsZShpZGVu
dCwgbV92bS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqaWRlbnQpOwogICAgICAgICBtX2xhc3RJ
ZGVudGlmaWVyID0gaWRlbnQ7CiAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVJlc29sdmUo
bG9jYXRpb24sIGlkZW50LCBzdGFydCk7CiAgICAgfQpAQCAtMTU4NSw3ICsxNTg1LDcgQEAgdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgIH0KICAgICAKICAgICBp
ZiAobWF0Y2goRlVOQ1RJT04pKSB7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXIqIG5hbWUgPSAm
bV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKKyAgICAgICAgY29u
c3QgSWRlbnRpZmllciogbmFtZSA9ICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmll
cjsKICAgICAgICAgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgcGFyYW1ldGVycyA9IDA7CiAgICAg
ICAgIFRyZWVGdW5jdGlvbkJvZHkgYm9keSA9IDA7CiAgICAgICAgIGludCBvcGVuQnJhY2VQb3Mg
PSAwOwpAQCAtMTY5Miw3ICsxNjkyLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlRXhwcmVzcwogICAgIGJvb2wgaXNFdmFsT3JBcmd1bWVudHMgPSBmYWxzZTsKICAgICBpZiAo
c3RyaWN0TW9kZSgpICYmICFtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQpIHsKICAgICAgICAgaWYg
KGNvbnRleHQuaXNSZXNvbHZlKGV4cHIpKQotICAgICAgICAgICAgaXNFdmFsT3JBcmd1bWVudHMg
PSAqbV9sYXN0SWRlbnRpZmllciA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmV2YWwg
fHwgKm1fbGFzdElkZW50aWZpZXIgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5hcmd1
bWVudHM7CisgICAgICAgICAgICBpc0V2YWxPckFyZ3VtZW50cyA9ICptX2xhc3RJZGVudGlmaWVy
ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwgfHwgKm1fbGFzdElkZW50aWZpZXIgPT0gbV92
bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzOwogICAgIH0KICAgICBmYWlsSWZUcnVlSWZTdHJp
Y3RXaXRoTmFtZUFuZE1lc3NhZ2UoaXNFdmFsT3JBcmd1bWVudHMgJiYgbW9kaWZpZXNFeHByLCAi
JyIsIG1fbGFzdElkZW50aWZpZXItPmltcGwoKSwgIicgY2Fubm90IGJlIG1vZGlmaWVkIGluIHN0
cmljdCBtb2RlIik7CiAgICAgc3dpdGNoIChtX3Rva2VuLm1fdHlwZSkgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1
NSw3IEBAIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEZ1bmN0aW9uQm9keU5vZGU7CiBjbGFzcyBG
dW5jdGlvblBhcmFtZXRlcnM7CiBjbGFzcyBJZGVudGlmaWVyOwotY2xhc3MgSlNHbG9iYWxEYXRh
OworY2xhc3MgVk07CiBjbGFzcyBQcm9ncmFtTm9kZTsKIGNsYXNzIFNvdXJjZUNvZGU7CiAKQEAg
LTExMCw4ICsxMTAsOCBAQCBzdHJ1Y3QgU2NvcGVMYWJlbEluZm8gewogfTsKIAogc3RydWN0IFNj
b3BlIHsKLSAgICBTY29wZShjb25zdCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGJvb2wgaXNG
dW5jdGlvbiwgYm9vbCBzdHJpY3RNb2RlKQotICAgICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxE
YXRhKQorICAgIFNjb3BlKGNvbnN0IFZNKiB2bSwgYm9vbCBpc0Z1bmN0aW9uLCBib29sIHN0cmlj
dE1vZGUpCisgICAgICAgIDogbV92bSh2bSkKICAgICAgICAgLCBtX3NoYWRvd3NBcmd1bWVudHMo
ZmFsc2UpCiAgICAgICAgICwgbV91c2VzRXZhbChmYWxzZSkKICAgICAgICAgLCBtX25lZWRzRnVs
bEFjdGl2YXRpb24oZmFsc2UpCkBAIC0xMjYsNyArMTI2LDcgQEAgc3RydWN0IFNjb3BlIHsKICAg
ICB9CiAKICAgICBTY29wZShjb25zdCBTY29wZSYgcmhzKQotICAgICAgICA6IG1fZ2xvYmFsRGF0
YShyaHMubV9nbG9iYWxEYXRhKQorICAgICAgICA6IG1fdm0ocmhzLm1fdm0pCiAgICAgICAgICwg
bV9zaGFkb3dzQXJndW1lbnRzKHJocy5tX3NoYWRvd3NBcmd1bWVudHMpCiAgICAgICAgICwgbV91
c2VzRXZhbChyaHMubV91c2VzRXZhbCkKICAgICAgICAgLCBtX25lZWRzRnVsbEFjdGl2YXRpb24o
cmhzLm1fbmVlZHNGdWxsQWN0aXZhdGlvbikKQEAgLTE5Niw3ICsxOTYsNyBAQCBzdHJ1Y3QgU2Nv
cGUgewogCiAgICAgYm9vbCBkZWNsYXJlVmFyaWFibGUoY29uc3QgSWRlbnRpZmllciogaWRlbnQp
CiAgICAgewotICAgICAgICBib29sIGlzVmFsaWRTdHJpY3RNb2RlID0gbV9nbG9iYWxEYXRhLT5w
cm9wZXJ0eU5hbWVzLT5ldmFsICE9ICppZGVudCAmJiBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFt
ZXMtPmFyZ3VtZW50cyAhPSAqaWRlbnQ7CisgICAgICAgIGJvb2wgaXNWYWxpZFN0cmljdE1vZGUg
PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5ldmFsICE9ICppZGVudCAmJiBtX3ZtLT5wcm9wZXJ0eU5h
bWVzLT5hcmd1bWVudHMgIT0gKmlkZW50OwogICAgICAgICBtX2lzVmFsaWRTdHJpY3RNb2RlID0g
bV9pc1ZhbGlkU3RyaWN0TW9kZSAmJiBpc1ZhbGlkU3RyaWN0TW9kZTsKICAgICAgICAgbV9kZWNs
YXJlZFZhcmlhYmxlcy5hZGQoaWRlbnQtPnN0cmluZygpLmltcGwoKSk7CiAgICAgICAgIHJldHVy
biBpc1ZhbGlkU3RyaWN0TW9kZTsKQEAgLTIxMyw4ICsyMTMsOCBAQCBzdHJ1Y3QgU2NvcGUgewog
CiAgICAgYm9vbCBkZWNsYXJlUGFyYW1ldGVyKGNvbnN0IElkZW50aWZpZXIqIGlkZW50KQogICAg
IHsKLSAgICAgICAgYm9vbCBpc0FyZ3VtZW50cyA9IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1l
cy0+YXJndW1lbnRzID09ICppZGVudDsKLSAgICAgICAgYm9vbCBpc1ZhbGlkU3RyaWN0TW9kZSA9
IG1fZGVjbGFyZWRWYXJpYWJsZXMuYWRkKGlkZW50LT5zdHJpbmcoKS5pbXBsKCkpLmlzTmV3RW50
cnkgJiYgbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5ldmFsICE9ICppZGVudCAmJiAhaXNB
cmd1bWVudHM7CisgICAgICAgIGJvb2wgaXNBcmd1bWVudHMgPSBtX3ZtLT5wcm9wZXJ0eU5hbWVz
LT5hcmd1bWVudHMgPT0gKmlkZW50OworICAgICAgICBib29sIGlzVmFsaWRTdHJpY3RNb2RlID0g
bV9kZWNsYXJlZFZhcmlhYmxlcy5hZGQoaWRlbnQtPnN0cmluZygpLmltcGwoKSkuaXNOZXdFbnRy
eSAmJiBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5ldmFsICE9ICppZGVudCAmJiAhaXNBcmd1bWVudHM7
CiAgICAgICAgIG1faXNWYWxpZFN0cmljdE1vZGUgPSBtX2lzVmFsaWRTdHJpY3RNb2RlICYmIGlz
VmFsaWRTdHJpY3RNb2RlOwogICAgICAgICBpZiAoaXNBcmd1bWVudHMpCiAgICAgICAgICAgICBt
X3NoYWRvd3NBcmd1bWVudHMgPSB0cnVlOwpAQCAtMzEyLDcgKzMxMiw3IEBAIHN0cnVjdCBTY29w
ZSB7CiAgICAgfQogCiBwcml2YXRlOgotICAgIGNvbnN0IEpTR2xvYmFsRGF0YSogbV9nbG9iYWxE
YXRhOworICAgIGNvbnN0IFZNKiBtX3ZtOwogICAgIGJvb2wgbV9zaGFkb3dzQXJndW1lbnRzIDog
MTsKICAgICBib29sIG1fdXNlc0V2YWwgOiAxOwogICAgIGJvb2wgbV9uZWVkc0Z1bGxBY3RpdmF0
aW9uIDogMTsKQEAgLTM2NSw3ICszNjUsNyBAQCBjbGFzcyBQYXJzZXIgewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogCiBwdWJsaWM6Ci0gICAgUGFyc2VyKEpTR2xvYmFsRGF0YSosIGNv
bnN0IFNvdXJjZUNvZGUmLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBjb25zdCBJZGVudGlmaWVyJiwg
SlNQYXJzZXJTdHJpY3RuZXNzLCBKU1BhcnNlck1vZGUpOworICAgIFBhcnNlcihWTSosIGNvbnN0
IFNvdXJjZUNvZGUmLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBjb25zdCBJZGVudGlmaWVyJiwgSlNQ
YXJzZXJTdHJpY3RuZXNzLCBKU1BhcnNlck1vZGUpOwogICAgIH5QYXJzZXIoKTsKIAogICAgIHRl
bXBsYXRlIDxjbGFzcyBQYXJzZWROb2RlPgpAQCAtNDIyLDcgKzQyMiw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBpc1N0cmljdCA9IG1fc2NvcGVTdGFjay5sYXN0KCkuc3RyaWN0TW9kZSgpOwog
ICAgICAgICAgICAgaXNGdW5jdGlvbiA9IG1fc2NvcGVTdGFjay5sYXN0KCkuaXNGdW5jdGlvbigp
OwogICAgICAgICB9Ci0gICAgICAgIG1fc2NvcGVTdGFjay5hcHBlbmQoU2NvcGUobV9nbG9iYWxE
YXRhLCBpc0Z1bmN0aW9uLCBpc1N0cmljdCkpOworICAgICAgICBtX3Njb3BlU3RhY2suYXBwZW5k
KFNjb3BlKG1fdm0sIGlzRnVuY3Rpb24sIGlzU3RyaWN0KSk7CiAgICAgICAgIHJldHVybiBjdXJy
ZW50U2NvcGUoKTsKICAgICB9CiAgICAgCkBAIC04OTQsNyArODk0LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuICFtX2Vycm9yTWVzc2FnZS5pc051bGwoKTsKICAgICB9CiAKLSAgICBKU0ds
b2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKKyAgICBWTSogbV92bTsKICAgICBjb25zdCBTb3VyY2VD
b2RlKiBtX3NvdXJjZTsKICAgICBQYXJzZXJBcmVuYSogbV9hcmVuYTsKICAgICBPd25QdHI8TGV4
ZXJUeXBlPiBtX2xleGVyOwpAQCAtOTc1LDcgKzk3NSw3IEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9k
ZT4gUGFyc2VyPExleGVyVHlwZT4KICAgICAgICAgSlNUb2tlbkxvY2F0aW9uIGVuZExvY2F0aW9u
OwogICAgICAgICBlbmRMb2NhdGlvbi5saW5lID0gbV9sZXhlci0+bGFzdExpbmVOdW1iZXIoKTsK
ICAgICAgICAgZW5kTG9jYXRpb24uY2hhclBvc2l0aW9uID0gbV9sZXhlci0+Y3VycmVudENoYXJQ
b3NpdGlvbigpOwotICAgICAgICByZXN1bHQgPSBQYXJzZWROb2RlOjpjcmVhdGUobV9nbG9iYWxE
YXRhLAorICAgICAgICByZXN1bHQgPSBQYXJzZWROb2RlOjpjcmVhdGUobV92bSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0TG9jYXRpb24sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbmRMb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fc291cmNlRWxlbWVudHMsCkBAIC0xMDA3LDE2ICsxMDA3LDE2IEBA
IFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyVHlwZT4KIH0KIAogdGVtcGxhdGUg
PGNsYXNzIFBhcnNlZE5vZGU+Ci1QYXNzUmVmUHRyPFBhcnNlZE5vZGU+IHBhcnNlKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvblBhcmFt
ZXRlcnMqIHBhcmFtZXRlcnMsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEpTUGFyc2VyU3RyaWN0
bmVzcyBzdHJpY3RuZXNzLCBKU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgUGFyc2VyRXJyb3ImIGVy
cm9yKQorUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBwYXJzZShWTSogdm0sIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBjb25zdCBJZGVudGlm
aWVyJiBuYW1lLCBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywgSlNQYXJzZXJNb2RlIHBh
cnNlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvcikKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1w
bGluZ1JlZ2lvbigiUGFyc2luZyIpOwogCiAgICAgQVNTRVJUKCFzb3VyY2UucHJvdmlkZXIoKS0+
c291cmNlKCkuaXNOdWxsKCkpOwogICAgIGlmIChzb3VyY2UucHJvdmlkZXIoKS0+c291cmNlKCku
aXM4Qml0KCkpIHsKLSAgICAgICAgUGFyc2VyPCBMZXhlcjxMQ2hhcj4gPiBwYXJzZXIoZ2xvYmFs
RGF0YSwgc291cmNlLCBwYXJhbWV0ZXJzLCBuYW1lLCBzdHJpY3RuZXNzLCBwYXJzZXJNb2RlKTsK
KyAgICAgICAgUGFyc2VyPCBMZXhlcjxMQ2hhcj4gPiBwYXJzZXIodm0sIHNvdXJjZSwgcGFyYW1l
dGVycywgbmFtZSwgc3RyaWN0bmVzcywgcGFyc2VyTW9kZSk7CiAgICAgICAgIHJldHVybiBwYXJz
ZXIucGFyc2U8UGFyc2VkTm9kZT4oZXJyb3IpOwogICAgIH0KLSAgICBQYXJzZXI8IExleGVyPFVD
aGFyPiA+IHBhcnNlcihnbG9iYWxEYXRhLCBzb3VyY2UsIHBhcmFtZXRlcnMsIG5hbWUsIHN0cmlj
dG5lc3MsIHBhcnNlck1vZGUpOworICAgIFBhcnNlcjwgTGV4ZXI8VUNoYXI+ID4gcGFyc2VyKHZt
LCBzb3VyY2UsIHBhcmFtZXRlcnMsIG5hbWUsIHN0cmljdG5lc3MsIHBhcnNlck1vZGUpOwogICAg
IHJldHVybiBwYXJzZXIucGFyc2U8UGFyc2VkTm9kZT4oZXJyb3IpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckFyZW5hLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5oCShyZXZpc2lvbiAxNDg2NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckFyZW5hLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDEwICs0MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0
IElkZW50aWZpZXImIG1ha2VJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSosIGNvbnN0IFQqIGNoYXJh
Y3RlcnMsIHNpemVfdCBsZW5ndGgpOwotICAgICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50
aWZpZXImIG1ha2VJZGVudGlmaWVyTENoYXJGcm9tVUNoYXIoSlNHbG9iYWxEYXRhKiwgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpOworICAgICAgICBBTFdBWVNfSU5MSU5F
IGNvbnN0IElkZW50aWZpZXImIG1ha2VJZGVudGlmaWVyKFZNKiwgY29uc3QgVCogY2hhcmFjdGVy
cywgc2l6ZV90IGxlbmd0aCk7CisgICAgICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmll
ciYgbWFrZUlkZW50aWZpZXJMQ2hhckZyb21VQ2hhcihWTSosIGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCBzaXplX3QgbGVuZ3RoKTsKIAotICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBtYWtlTnVt
ZXJpY0lkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiwgZG91YmxlIG51bWJlcik7CisgICAgICAgIGNv
bnN0IElkZW50aWZpZXImIG1ha2VOdW1lcmljSWRlbnRpZmllcihWTSosIGRvdWJsZSBudW1iZXIp
OwogCiAgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcnMu
aXNFbXB0eSgpOyB9CiAKQEAgLTY5LDUxICs2OSw1MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9
OwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgQUxXQVlTX0lOTElORSBjb25zdCBJ
ZGVudGlmaWVyJiBJZGVudGlmaWVyQXJlbmE6Om1ha2VJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgY29uc3QgVCogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKKyAgICBBTFdB
WVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZUlkZW50aWZp
ZXIoVk0qIHZtLCBjb25zdCBUKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogICAgIHsKICAg
ICAgICAgaWYgKGNoYXJhY3RlcnNbMF0gPj0gTWF4aW11bUNhY2hhYmxlQ2hhcmFjdGVyKSB7Ci0g
ICAgICAgICAgICBtX2lkZW50aWZpZXJzLmFwcGVuZChJZGVudGlmaWVyKGdsb2JhbERhdGEsIGNo
YXJhY3RlcnMsIGxlbmd0aCkpOworICAgICAgICAgICAgbV9pZGVudGlmaWVycy5hcHBlbmQoSWRl
bnRpZmllcih2bSwgY2hhcmFjdGVycywgbGVuZ3RoKSk7CiAgICAgICAgICAgICByZXR1cm4gbV9p
ZGVudGlmaWVycy5sYXN0KCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGxlbmd0aCA9PSAxKSB7
CiAgICAgICAgICAgICBpZiAoSWRlbnRpZmllciogaWRlbnQgPSBtX3Nob3J0SWRlbnRpZmllcnNb
Y2hhcmFjdGVyc1swXV0pCiAgICAgICAgICAgICAgICAgcmV0dXJuICppZGVudDsKLSAgICAgICAg
ICAgIG1faWRlbnRpZmllcnMuYXBwZW5kKElkZW50aWZpZXIoZ2xvYmFsRGF0YSwgY2hhcmFjdGVy
cywgbGVuZ3RoKSk7CisgICAgICAgICAgICBtX2lkZW50aWZpZXJzLmFwcGVuZChJZGVudGlmaWVy
KHZtLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKICAgICAgICAgICAgIG1fc2hvcnRJZGVudGlmaWVy
c1tjaGFyYWN0ZXJzWzBdXSA9ICZtX2lkZW50aWZpZXJzLmxhc3QoKTsKICAgICAgICAgICAgIHJl
dHVybiBtX2lkZW50aWZpZXJzLmxhc3QoKTsKICAgICAgICAgfQogICAgICAgICBJZGVudGlmaWVy
KiBpZGVudCA9IG1fcmVjZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV07CiAgICAgICAgIGlm
IChpZGVudCAmJiBJZGVudGlmaWVyOjplcXVhbChpZGVudC0+aW1wbCgpLCBjaGFyYWN0ZXJzLCBs
ZW5ndGgpKQogICAgICAgICAgICAgcmV0dXJuICppZGVudDsKLSAgICAgICAgbV9pZGVudGlmaWVy
cy5hcHBlbmQoSWRlbnRpZmllcihnbG9iYWxEYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKKyAg
ICAgICAgbV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcih2bSwgY2hhcmFjdGVycywgbGVu
Z3RoKSk7CiAgICAgICAgIG1fcmVjZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0gPSAmbV9p
ZGVudGlmaWVycy5sYXN0KCk7CiAgICAgICAgIHJldHVybiBtX2lkZW50aWZpZXJzLmxhc3QoKTsK
ICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIElkZW50aWZpZXJB
cmVuYTo6bWFrZUlkZW50aWZpZXJMQ2hhckZyb21VQ2hhcihKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQorICAgIEFMV0FZU19J
TkxJTkUgY29uc3QgSWRlbnRpZmllciYgSWRlbnRpZmllckFyZW5hOjptYWtlSWRlbnRpZmllckxD
aGFyRnJvbVVDaGFyKFZNKiB2bSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5n
dGgpCiAgICAgewogICAgICAgICBpZiAoY2hhcmFjdGVyc1swXSA+PSBNYXhpbXVtQ2FjaGFibGVD
aGFyYWN0ZXIpIHsKLSAgICAgICAgICAgIG1faWRlbnRpZmllcnMuYXBwZW5kKElkZW50aWZpZXI6
OmNyZWF0ZUxDaGFyRnJvbVVDaGFyKGdsb2JhbERhdGEsIGNoYXJhY3RlcnMsIGxlbmd0aCkpOwor
ICAgICAgICAgICAgbV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcjo6Y3JlYXRlTENoYXJG
cm9tVUNoYXIodm0sIGNoYXJhY3RlcnMsIGxlbmd0aCkpOwogICAgICAgICAgICAgcmV0dXJuIG1f
aWRlbnRpZmllcnMubGFzdCgpOwogICAgICAgICB9CiAgICAgICAgIGlmIChsZW5ndGggPT0gMSkg
ewogICAgICAgICAgICAgaWYgKElkZW50aWZpZXIqIGlkZW50ID0gbV9zaG9ydElkZW50aWZpZXJz
W2NoYXJhY3RlcnNbMF1dKQogICAgICAgICAgICAgICAgIHJldHVybiAqaWRlbnQ7Ci0gICAgICAg
ICAgICBtX2lkZW50aWZpZXJzLmFwcGVuZChJZGVudGlmaWVyKGdsb2JhbERhdGEsIGNoYXJhY3Rl
cnMsIGxlbmd0aCkpOworICAgICAgICAgICAgbV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmll
cih2bSwgY2hhcmFjdGVycywgbGVuZ3RoKSk7CiAgICAgICAgICAgICBtX3Nob3J0SWRlbnRpZmll
cnNbY2hhcmFjdGVyc1swXV0gPSAmbV9pZGVudGlmaWVycy5sYXN0KCk7CiAgICAgICAgICAgICBy
ZXR1cm4gbV9pZGVudGlmaWVycy5sYXN0KCk7CiAgICAgICAgIH0KICAgICAgICAgSWRlbnRpZmll
ciogaWRlbnQgPSBtX3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dOwogICAgICAgICBp
ZiAoaWRlbnQgJiYgSWRlbnRpZmllcjo6ZXF1YWwoaWRlbnQtPmltcGwoKSwgY2hhcmFjdGVycywg
bGVuZ3RoKSkKICAgICAgICAgICAgIHJldHVybiAqaWRlbnQ7Ci0gICAgICAgIG1faWRlbnRpZmll
cnMuYXBwZW5kKElkZW50aWZpZXI6OmNyZWF0ZUxDaGFyRnJvbVVDaGFyKGdsb2JhbERhdGEsIGNo
YXJhY3RlcnMsIGxlbmd0aCkpOworICAgICAgICBtX2lkZW50aWZpZXJzLmFwcGVuZChJZGVudGlm
aWVyOjpjcmVhdGVMQ2hhckZyb21VQ2hhcih2bSwgY2hhcmFjdGVycywgbGVuZ3RoKSk7CiAgICAg
ICAgIG1fcmVjZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0gPSAmbV9pZGVudGlmaWVycy5s
YXN0KCk7CiAgICAgICAgIHJldHVybiBtX2lkZW50aWZpZXJzLmxhc3QoKTsKICAgICB9CiAgICAg
Ci0gICAgaW5saW5lIGNvbnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZU51bWVy
aWNJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgZG91YmxlIG51bWJlcikKKyAg
ICBpbmxpbmUgY29uc3QgSWRlbnRpZmllciYgSWRlbnRpZmllckFyZW5hOjptYWtlTnVtZXJpY0lk
ZW50aWZpZXIoVk0qIHZtLCBkb3VibGUgbnVtYmVyKQogICAgIHsKLSAgICAgICAgbV9pZGVudGlm
aWVycy5hcHBlbmQoSWRlbnRpZmllcihnbG9iYWxEYXRhLCBTdHJpbmc6Om51bWJlclRvU3RyaW5n
RUNNQVNjcmlwdChudW1iZXIpKSk7CisgICAgICAgIG1faWRlbnRpZmllcnMuYXBwZW5kKElkZW50
aWZpZXIodm0sIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KG51bWJlcikpKTsKICAg
ICAgICAgcmV0dXJuIG1faWRlbnRpZmllcnMubGFzdCgpOwogICAgIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgJKHJldmlzaW9uIDE0ODY1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgU3ludGF4Q2hlY2tl
ciogbV9jb250ZXh0OwogICAgIH07CiAgICAgCi0gICAgU3ludGF4Q2hlY2tlcihKU0dsb2JhbERh
dGEqICwgdm9pZCopCisgICAgU3ludGF4Q2hlY2tlcihWTSogLCB2b2lkKikKICAgICB7CiAgICAg
fQogCkBAIC0xNjMsMTEgKzE2MywxMSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChuYW1lKTsK
ICAgICAgICAgcmV0dXJuIFByb3BlcnR5KG5hbWUsIHR5cGUpOwogICAgIH0KLSAgICB0ZW1wbGF0
ZSA8Ym9vbCBjb21wbGV0ZT4gUHJvcGVydHkgY3JlYXRlUHJvcGVydHkoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBkb3VibGUgbmFtZSwgaW50LCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSkKKyAg
ICB0ZW1wbGF0ZSA8Ym9vbCBjb21wbGV0ZT4gUHJvcGVydHkgY3JlYXRlUHJvcGVydHkoVk0qIHZt
LCBkb3VibGUgbmFtZSwgaW50LCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSkKICAgICB7CiAgICAg
ICAgIGlmICghY29tcGxldGUpCiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkodHlwZSk7Ci0g
ICAgICAgIHJldHVybiBQcm9wZXJ0eSgmZ2xvYmFsRGF0YS0+cGFyc2VyQXJlbmEtPmlkZW50aWZp
ZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihnbG9iYWxEYXRhLCBuYW1lKSwgdHlwZSk7
CisgICAgICAgIHJldHVybiBQcm9wZXJ0eSgmdm0tPnBhcnNlckFyZW5hLT5pZGVudGlmaWVyQXJl
bmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIodm0sIG5hbWUpLCB0eXBlKTsKICAgICB9CiAgICAg
aW50IGNyZWF0ZVByb3BlcnR5TGlzdChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBQcm9wZXJ0eSkg
eyByZXR1cm4gMTsgfQogICAgIGludCBjcmVhdGVQcm9wZXJ0eUxpc3QoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgUHJvcGVydHksIGludCkgeyByZXR1cm4gMTsgfQpAQCAtMjExLDExICsyMTEsMTEg
QEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KHR5cGUpOwogICAgICAgICBy
ZXR1cm4gUHJvcGVydHkobmFtZSwgdHlwZSk7CiAgICAgfQotICAgIHRlbXBsYXRlIDxib29sIHN0
cmljdD4gUHJvcGVydHkgY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFByb3BlcnR5Tm9kZTo6VHlwZSB0
eXBlLCBkb3VibGUgbmFtZSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkKKyAgICB0ZW1w
bGF0ZSA8Ym9vbCBzdHJpY3Q+IFByb3BlcnR5IGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHko
Vk0qIHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwg
ZG91YmxlIG5hbWUsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpCiAgICAgewogICAgICAg
ICBpZiAoIXN0cmljdCkKICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eSh0eXBlKTsKLSAgICAg
ICAgcmV0dXJuIFByb3BlcnR5KCZnbG9iYWxEYXRhLT5wYXJzZXJBcmVuYS0+aWRlbnRpZmllckFy
ZW5hKCkubWFrZU51bWVyaWNJZGVudGlmaWVyKGdsb2JhbERhdGEsIG5hbWUpLCB0eXBlKTsKKyAg
ICAgICAgcmV0dXJuIFByb3BlcnR5KCZ2bS0+cGFyc2VyQXJlbmEtPmlkZW50aWZpZXJBcmVuYSgp
Lm1ha2VOdW1lcmljSWRlbnRpZmllcih2bSwgbmFtZSksIHR5cGUpOwogICAgIH0KIAogICAgIHZv
aWQgYXBwZW5kU3RhdGVtZW50KGludCwgaW50KSB7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wcm9maWxlci9MZWdhY3lQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Byb2ZpbGVyL0xlZ2FjeVByb2ZpbGVyLmNwcAkocmV2aXNpb24gMTQ4NjU1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL0xlZ2FjeVByb2ZpbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCB2b2lkIExlZ2FjeVByb2ZpbGVyOjpzdGFy
dFByb2ZpbGluZyhFeGVjCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZXhlYy0+
Z2xvYmFsRGF0YSgpLm1fZW5hYmxlZFByb2ZpbGVyID0gdGhpczsKKyAgICBleGVjLT52bSgpLm1f
ZW5hYmxlZFByb2ZpbGVyID0gdGhpczsKICAgICBSZWZQdHI8UHJvZmlsZUdlbmVyYXRvcj4gcHJv
ZmlsZUdlbmVyYXRvciA9IFByb2ZpbGVHZW5lcmF0b3I6OmNyZWF0ZShleGVjLCB0aXRsZSwgKytQ
cm9maWxlc1VJRCk7CiAgICAgbV9jdXJyZW50UHJvZmlsZXMuYXBwZW5kKHByb2ZpbGVHZW5lcmF0
b3IpOwogfQpAQCAtOTUsNyArOTUsNyBAQCBQYXNzUmVmUHRyPFByb2ZpbGU+IExlZ2FjeVByb2Zp
bGVyOjpzdG9wCiAKICAgICAgICAgICAgIG1fY3VycmVudFByb2ZpbGVzLnJlbW92ZShpKTsKICAg
ICAgICAgICAgIGlmICghbV9jdXJyZW50UHJvZmlsZXMuc2l6ZSgpKQotICAgICAgICAgICAgICAg
IGV4ZWMtPmdsb2JhbERhdGEoKS5tX2VuYWJsZWRQcm9maWxlciA9IDA7CisgICAgICAgICAgICAg
ICAgZXhlYy0+dm0oKS5tX2VuYWJsZWRQcm9maWxlciA9IDA7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHJldHVybiByZXR1cm5Qcm9maWxlOwogICAgICAgICB9CkBAIC0xMTIsNyArMTEyLDcg
QEAgdm9pZCBMZWdhY3lQcm9maWxlcjo6c3RvcFByb2ZpbGluZyhKU0dsbwogICAgICAgICAgICAg
cHJvZmlsZUdlbmVyYXRvci0+c3RvcFByb2ZpbGluZygpOwogICAgICAgICAgICAgbV9jdXJyZW50
UHJvZmlsZXMucmVtb3ZlKGkpOwogICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRQcm9maWxlcy5z
aXplKCkpCi0gICAgICAgICAgICAgICAgb3JpZ2luLT5nbG9iYWxEYXRhKCkubV9lbmFibGVkUHJv
ZmlsZXIgPSAwOworICAgICAgICAgICAgICAgIG9yaWdpbi0+dm0oKS5tX2VuYWJsZWRQcm9maWxl
ciA9IDA7CiAgICAgICAgIH0KICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cHJvZmlsZXIvTGVnYWN5UHJvZmlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvTGVnYWN5UHJvZmlsZXIuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL0xlZ2FjeVByb2ZpbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDcgKzM3LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBFeGVjU3RhdGU7
Ci1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0Owog
Y2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBKU1ZhbHVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlLmNwcAkocmV2aXNpb24gMTQ4
NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgUHJvZmlsZXIgewogSlNWYWx1ZSBCeXRlY29kZTo6dG9KUyhFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0CiB7CiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4
ZWMpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmJ5dGVjb2RlSW5kZXgsIGpzTnVtYmVyKG1fYnl0ZWNvZGVJbmRleCkpOwot
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLm9wY29kZSwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOChvcGNvZGVOYW1l
c1ttX29wY29kZUlEXSkpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRh
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5kZXNjcmlwdGlvbiwganNTdHJpbmcoZXhlYywgU3Ry
aW5nOjpmcm9tVVRGOChtX2Rlc2NyaXB0aW9uKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4
ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29kZUluZGV4LCBqc051bWJlciht
X2J5dGVjb2RlSW5kZXgpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkub3Bjb2RlLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4
KG9wY29kZU5hbWVzW21fb3Bjb2RlSURdKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMt
PnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5kZXNjcmlwdGlvbiwganNTdHJpbmcoZXhlYywg
U3RyaW5nOjpmcm9tVVRGOChtX2Rlc2NyaXB0aW9uKSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2Rl
U2VxdWVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxl
ci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBCeXRlY29kZVNlcXVlbmNlOjpCeXRlY29k
ZVNlcXVlbmNlKENvZGVCCiAgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gMDsgYnl0
ZWNvZGVJbmRleCA8IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOykgewogICAgICAg
ICBvdXQucmVzZXQoKTsKICAgICAgICAgY29kZUJsb2NrLT5kdW1wQnl0ZWNvZGUob3V0LCBieXRl
Y29kZUluZGV4KTsKLSAgICAgICAgbV9zZXF1ZW5jZS5hcHBlbmQoQnl0ZWNvZGUoYnl0ZWNvZGVJ
bmRleCwgY29kZUJsb2NrLT5nbG9iYWxEYXRhKCktPmludGVycHJldGVyLT5nZXRPcGNvZGVJRChj
b2RlQmxvY2stPmluc3RydWN0aW9ucygpW2J5dGVjb2RlSW5kZXhdLnUub3Bjb2RlKSwgb3V0LnRv
Q1N0cmluZygpKSk7CisgICAgICAgIG1fc2VxdWVuY2UuYXBwZW5kKEJ5dGVjb2RlKGJ5dGVjb2Rl
SW5kZXgsIGNvZGVCbG9jay0+dm0oKS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKClbYnl0ZWNvZGVJbmRleF0udS5vcGNvZGUpLCBvdXQudG9DU3RyaW5n
KCkpKTsKICAgICAgICAgYnl0ZWNvZGVJbmRleCArPSBvcGNvZGVMZW5ndGgoCi0gICAgICAgICAg
ICBjb2RlQmxvY2stPmdsb2JhbERhdGEoKS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKAorICAg
ICAgICAgICAgY29kZUJsb2NrLT52bSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoCiAgICAg
ICAgICAgICAgICAgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVtieXRlY29kZUluZGV4XS51Lm9w
Y29kZSkpOwogICAgIH0KIH0KQEAgLTc4LDEyICs3OCwxMiBAQCB2b2lkIEJ5dGVjb2RlU2VxdWVu
Y2U6OmFkZFNlcXVlbmNlUHJvcGVyCiAgICAgSlNBcnJheSogaGVhZGVyID0gY29uc3RydWN0RW1w
dHlBcnJheShleGVjLCAwKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9oZWFkZXIu
c2l6ZSgpOyArK2kpCiAgICAgICAgIGhlYWRlci0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwganNT
dHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOChtX2hlYWRlcltpXSkpKTsKLSAgICByZXN1bHQt
PnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5oZWFk
ZXIsIGhlYWRlcik7CisgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmhlYWRlciwgaGVhZGVyKTsKICAgICAKICAgICBKU0FycmF5KiBzZXF1ZW5j
ZSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fc2VxdWVuY2Uuc2l6ZSgpOyArK2kpCiAgICAgICAgIHNlcXVlbmNlLT5wdXREaXJl
Y3RJbmRleChleGVjLCBpLCBtX3NlcXVlbmNlW2ldLnRvSlMoZXhlYykpOwotICAgIHJlc3VsdC0+
cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVj
b2RlLCBzZXF1ZW5jZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmJ5dGVjb2RlLCBzZXF1ZW5jZSk7CiB9CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpQcm9maWxlcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVyQnl0ZWNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZXMuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NSwxMSArNTUsMTEgQEAgSlNWYWx1ZSBCeXRlY29kZXM6OnRvSlMoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVj
dChleGVjKTsKICAgICAKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCks
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29kZXNJRCwganNOdW1iZXIobV9pZCkpOwotICAg
IHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmluZmVycmVkTmFtZSwganNTdHJpbmcoZXhlYywgbV9pbmZlcnJlZE5hbWUpKTsKLSAgICBy
ZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5zb3VyY2VDb2RlLCBqc1N0cmluZyhleGVjLCBtX3NvdXJjZUNvZGUpKTsKLSAgICByZXN1bHQt
PnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5oYXNo
LCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KHRvQ1N0cmluZyhtX2hhc2gpKSkpOwot
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLmluc3RydWN0aW9uQ291bnQsIGpzTnVtYmVyKG1faW5zdHJ1Y3Rpb25Db3VudCkpOwor
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5i
eXRlY29kZXNJRCwganNOdW1iZXIobV9pZCkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMt
PnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pbmZlcnJlZE5hbWUsIGpzU3RyaW5nKGV4ZWMs
IG1faW5mZXJyZWROYW1lKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLnNvdXJjZUNvZGUsIGpzU3RyaW5nKGV4ZWMsIG1fc291cmNlQ29k
ZSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5oYXNoLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KHRvQ1N0cmluZyhtX2hh
c2gpKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5pbnN0cnVjdGlvbkNvdW50LCBqc051bWJlcihtX2luc3RydWN0aW9uQ291bnQpKTsK
ICAgICBhZGRTZXF1ZW5jZVByb3BlcnRpZXMoZXhlYywgcmVzdWx0KTsKICAgICAKICAgICByZXR1
cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVy
Q29tcGlsYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9m
aWxlci9Qcm9maWxlckNvbXBpbGF0aW9uLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05NCw0MiArOTQsNDIgQEAgSlNWYWx1ZSBDb21waWxhdGlvbjo6dG9KUyhFeGVj
U3RhdGUqIGV4ZQogewogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVj
dChleGVjKTsKICAgICAKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCks
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29kZXNJRCwganNOdW1iZXIobV9ieXRlY29kZXMt
PmlkKCkpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5jb21waWxhdGlvbktpbmQsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6
ZnJvbVVURjgodG9DU3RyaW5nKG1fa2luZCkpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhl
Yy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVjb2Rlc0lELCBqc051bWJlcihtX2J5
dGVjb2Rlcy0+aWQoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5jb21waWxhdGlvbktpbmQsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6
ZnJvbVVURjgodG9DU3RyaW5nKG1fa2luZCkpKSk7CiAgICAgCiAgICAgSlNBcnJheSogcHJvZmls
ZWRCeXRlY29kZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3Byb2ZpbGVkQnl0ZWNvZGVzLnNpemUoKTsgKytpKQogICAgICAg
ICBwcm9maWxlZEJ5dGVjb2Rlcy0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgbV9wcm9maWxlZEJ5
dGVjb2Rlc1tpXS50b0pTKGV4ZWMpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm9maWxlZEJ5dGVjb2RlcywgcHJvZmls
ZWRCeXRlY29kZXMpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5wcm9maWxlZEJ5dGVjb2RlcywgcHJvZmlsZWRCeXRlY29kZXMpOwogICAg
IAogICAgIEpTQXJyYXkqIGRlc2NyaXB0aW9ucyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywg
MCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZGVzY3JpcHRpb25zLnNpemUoKTsg
KytpKQogICAgICAgICBkZXNjcmlwdGlvbnMtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fZGVz
Y3JpcHRpb25zW2ldLnRvSlMoZXhlYykpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmds
b2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmRlc2NyaXB0aW9ucywgZGVzY3JpcHRp
b25zKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuZGVzY3JpcHRpb25zLCBkZXNjcmlwdGlvbnMpOwogICAgIAogICAgIEpTQXJyYXkqIGNv
dW50ZXJzID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKICAgICBIYXNoTWFwPE9yaWdp
blN0YWNrLCBPd25QdHI8RXhlY3V0aW9uQ291bnRlcj4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV9jb3VudGVycy5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8T3JpZ2luU3RhY2ssIE93blB0cjxF
eGVjdXRpb25Db3VudGVyPiA+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9jb3VudGVycy5iZWdp
bigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIEpTT2JqZWN0KiBjb3VudGVyRW50
cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICAgICAgY291bnRlckVudHJ5LT5w
dXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkub3JpZ2lu
LCBpdGVyLT5rZXkudG9KUyhleGVjKSk7Ci0gICAgICAgIGNvdW50ZXJFbnRyeS0+cHV0RGlyZWN0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmV4ZWN1dGlvbkNvdW50
LCBqc051bWJlcihpdGVyLT52YWx1ZS0+Y291bnQoKSkpOworICAgICAgICBjb3VudGVyRW50cnkt
PnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkub3JpZ2luLCBpdGVy
LT5rZXkudG9KUyhleGVjKSk7CisgICAgICAgIGNvdW50ZXJFbnRyeS0+cHV0RGlyZWN0KGV4ZWMt
PnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5leGVjdXRpb25Db3VudCwganNOdW1iZXIoaXRl
ci0+dmFsdWUtPmNvdW50KCkpKTsKICAgICAgICAgY291bnRlcnMtPnB1c2goZXhlYywgY291bnRl
ckVudHJ5KTsKICAgICB9Ci0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY291bnRlcnMsIGNvdW50ZXJzKTsKKyAgICByZXN1bHQt
PnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY291bnRlcnMsIGNv
dW50ZXJzKTsKICAgICAKICAgICBKU0FycmF5KiBleGl0U2l0ZXMgPSBjb25zdHJ1Y3RFbXB0eUFy
cmF5KGV4ZWMsIDApOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX29zckV4aXRTaXRl
cy5zaXplKCk7ICsraSkKICAgICAgICAgZXhpdFNpdGVzLT5wdXREaXJlY3RJbmRleChleGVjLCBp
LCBtX29zckV4aXRTaXRlc1tpXS50b0pTKGV4ZWMpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChl
eGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5vc3JFeGl0U2l0ZXMsIGV4
aXRTaXRlcyk7CisgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLm9zckV4aXRTaXRlcywgZXhpdFNpdGVzKTsKICAgICAKICAgICBKU0FycmF5KiBl
eGl0cyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fb3NyRXhpdHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGV4aXRzLT5wdXREaXJl
Y3RJbmRleChleGVjLCBpLCBtX29zckV4aXRzW2ldLnRvSlMoZXhlYykpOwotICAgIHJlc3VsdC0+
cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm9zckV4
aXRzLCBleGl0cyk7CisgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLm9zckV4aXRzLCBleGl0cyk7CiAgICAgCi0gICAgcmVzdWx0LT5wdXREaXJl
Y3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubnVtSW5saW5lZEdl
dEJ5SWRzLCBqc051bWJlcihtX251bUlubGluZWRHZXRCeUlkcykpOwotICAgIHJlc3VsdC0+cHV0
RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm51bUlubGlu
ZWRQdXRCeUlkcywganNOdW1iZXIobV9udW1JbmxpbmVkUHV0QnlJZHMpKTsKLSAgICByZXN1bHQt
PnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5udW1J
bmxpbmVkQ2FsbHMsIGpzTnVtYmVyKG1fbnVtSW5saW5lZENhbGxzKSk7CisgICAgcmVzdWx0LT5w
dXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm51bUlubGluZWRHZXRC
eUlkcywganNOdW1iZXIobV9udW1JbmxpbmVkR2V0QnlJZHMpKTsKKyAgICByZXN1bHQtPnB1dERp
cmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubnVtSW5saW5lZFB1dEJ5SWRz
LCBqc051bWJlcihtX251bUlubGluZWRQdXRCeUlkcykpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0
KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5udW1JbmxpbmVkQ2FsbHMsIGpzTnVt
YmVyKG1fbnVtSW5saW5lZENhbGxzKSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckNvbXBpbGVkQnl0ZWNv
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9m
aWxlckNvbXBpbGVkQnl0ZWNvZGUuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsOCArNDYsOCBAQCBKU1ZhbHVlIENvbXBpbGVkQnl0ZWNvZGU6OnRvSlMo
RXhlY1N0YXRlCiB7CiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0
KGV4ZWMpOwogICAgIAotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLm9yaWdpbiwgbV9vcmlnaW4udG9KUyhleGVjKSk7Ci0gICAg
cmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuZGVzY3JpcHRpb24sIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgobV9kZXNjcmlw
dGlvbikpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkub3JpZ2luLCBtX29yaWdpbi50b0pTKGV4ZWMpKTsKKyAgICByZXN1bHQtPnB1dERp
cmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZGVzY3JpcHRpb24sIGpzU3Ry
aW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgobV9kZXNjcmlwdGlvbikpKTsKICAgICAKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVyRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
cm9maWxlci9Qcm9maWxlckRhdGFiYXNlLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Miw5ICs0Miw5IEBAIHN0YXRpYyBTcGluTG9jayByZWdpc3RyYXRpb25Mb2NrID0g
U1BJTkwKIHN0YXRpYyBpbnQgZGlkUmVnaXN0ZXJBdEV4aXQ7CiBzdGF0aWMgRGF0YWJhc2UqIGZp
cnN0RGF0YWJhc2U7CiAKLURhdGFiYXNlOjpEYXRhYmFzZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCitEYXRhYmFzZTo6RGF0YWJhc2UoVk0mIHZtKQogICAgIDogbV9kYXRhYmFzZUlEKGF0b21p
Y0luY3JlbWVudCgmZGF0YWJhc2VDb3VudGVyKSkKLSAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxE
YXRhKQorICAgICwgbV92bSh2bSkKICAgICAsIG1fc2hvdWxkU2F2ZUF0RXhpdChmYWxzZSkKICAg
ICAsIG1fbmV4dFJlZ2lzdGVyZWREYXRhYmFzZSgwKQogewpAQCAtOTgsMTIgKzk4LDEyIEBAIEpT
VmFsdWUgRGF0YWJhc2U6OnRvSlMoRXhlY1N0YXRlKiBleGVjKSAKICAgICBKU0FycmF5KiBieXRl
Y29kZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2J5dGVjb2Rlcy5zaXplKCk7ICsraSkKICAgICAgICAgYnl0ZWNvZGVzLT5w
dXREaXJlY3RJbmRleChleGVjLCBpLCBtX2J5dGVjb2Rlc1tpXS50b0pTKGV4ZWMpKTsKLSAgICBy
ZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5ieXRlY29kZXMsIGJ5dGVjb2Rlcyk7CisgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0o
KSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVjb2RlcywgYnl0ZWNvZGVzKTsKICAgICAKICAg
ICBKU0FycmF5KiBjb21waWxhdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvbXBpbGF0aW9ucy5zaXplKCk7ICsraSkK
ICAgICAgICAgY29tcGlsYXRpb25zLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX2NvbXBpbGF0
aW9uc1tpXS0+dG9KUyhleGVjKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29tcGlsYXRpb25zLCBjb21waWxhdGlvbnMp
OworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5jb21waWxhdGlvbnMsIGNvbXBpbGF0aW9ucyk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KQEAgLTExMSw3ICsxMTEsNyBAQCBKU1ZhbHVlIERhdGFiYXNlOjp0b0pTKEV4ZWNTdGF0ZSog
ZXhlYykgCiBTdHJpbmcgRGF0YWJhc2U6OnRvSlNPTigpIGNvbnN0CiB7CiAgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IEpTR2xvYmFsT2JqZWN0OjpjcmVhdGUoCi0gICAgICAgIG1f
Z2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShtX2dsb2JhbERhdGEs
IGpzTnVsbCgpKSk7CisgICAgICAgIG1fdm0sIEpTR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1
cmUobV92bSwganNOdWxsKCkpKTsKICAgICAKICAgICByZXR1cm4gSlNPTlN0cmluZ2lmeShnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgdG9KUyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSks
IDApOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRGF0
YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJv
ZmlsZXJEYXRhYmFzZS5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0
Miw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgUHJvZmlsZXIgewogY2xhc3MgRGF0YWJh
c2UgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOyBXVEZfTUFLRV9OT05DT1BZQUJMRShE
YXRhYmFzZSk7CiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgRGF0YWJhc2UoSlNHbG9i
YWxEYXRhJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgRGF0YWJhc2UoVk0mKTsKICAgICBKU19F
WFBPUlRfUFJJVkFURSB+RGF0YWJhc2UoKTsKICAgICAKICAgICBpbnQgZGF0YWJhc2VJRCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VJRDsgfQpAQCAtNzgsNyArNzgsNyBAQCBwcml2YXRlOgog
ICAgIHN0YXRpYyB2b2lkIGF0RXhpdENhbGxiYWNrKCk7CiAgICAgCiAgICAgaW50IG1fZGF0YWJh
c2VJRDsKLSAgICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsKKyAgICBWTSYgbV92bTsKICAg
ICBTZWdtZW50ZWRWZWN0b3I8Qnl0ZWNvZGVzPiBtX2J5dGVjb2RlczsKICAgICBIYXNoTWFwPENv
ZGVCbG9jayosIEJ5dGVjb2Rlcyo+IG1fYnl0ZWNvZGVzTWFwOwogICAgIFZlY3RvcjxSZWZQdHI8
Q29tcGlsYXRpb24+ID4gbV9jb21waWxhdGlvbnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0LmNwcAkocmV2aXNpb24gMTQ4NjU1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDExICs0OCwxMSBAQCBPU1JFeGl0Ojp+T1NSRXhpdCgpCiBK
U1ZhbHVlIE9TUkV4aXQ6OnRvSlMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIEpTT2Jq
ZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICByZXN1bHQtPnB1
dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pZCwganNO
dW1iZXIobV9pZCkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLm9yaWdpbiwgbV9vcmlnaW4udG9KUyhleGVjKSk7Ci0gICAg
cmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuZXhpdEtpbmQsIGpzU3RyaW5nKGV4ZWMsIGV4aXRLaW5kVG9TdHJpbmcobV9leGl0S2luZCkp
KTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5pc1dhdGNocG9pbnQsIGpzQm9vbGVhbihtX2lzV2F0Y2hwb2ludCkpOwotICAg
IHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmNvdW50LCBqc051bWJlcihtX2NvdW50ZXIpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaWQsIGpzTnVtYmVyKG1faWQpKTsKKyAg
ICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkub3Jp
Z2luLCBtX29yaWdpbi50b0pTKGV4ZWMpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52
bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZXhpdEtpbmQsIGpzU3RyaW5nKGV4ZWMsIGV4aXRL
aW5kVG9TdHJpbmcobV9leGl0S2luZCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52
bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaXNXYXRjaHBvaW50LCBqc0Jvb2xlYW4obV9pc1dh
dGNocG9pbnQpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuY291bnQsIGpzTnVtYmVyKG1fY291bnRlcikpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9y
aWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVyT3JpZ2luLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsOCAr
NDgsOCBAQCB2b2lkIE9yaWdpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zCiBKU1ZhbHVl
IE9yaWdpbjo6dG9KUyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgSlNPYmplY3QqIHJl
c3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVjb2Rlc0lELCBq
c051bWJlcihtX2J5dGVjb2Rlcy0+aWQoKSkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVjb2RlSW5kZXgsIGpzTnVt
YmVyKG1fYnl0ZWNvZGVJbmRleCkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCks
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29kZXNJRCwganNOdW1iZXIobV9ieXRlY29kZXMt
PmlkKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuYnl0ZWNvZGVJbmRleCwganNOdW1iZXIobV9ieXRlY29kZUluZGV4KSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVy
L1Byb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmNwcAkocmV2aXNp
b24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyUHJv
ZmlsZWRCeXRlY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIEpTVmFs
dWUgUHJvZmlsZWRCeXRlY29kZXM6OnRvSlMoRXhlY1N0YXQKIHsKICAgICBKU09iamVjdCogcmVz
dWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAgICAgCi0gICAgcmVzdWx0LT5wdXRE
aXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZWNvZGVz
SUQsIGpzTnVtYmVyKG1fYnl0ZWNvZGVzLT5pZCgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qo
ZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVjb2Rlc0lELCBqc051bWJlciht
X2J5dGVjb2Rlcy0+aWQoKSkpOwogICAgIGFkZFNlcXVlbmNlUHJvcGVydGllcyhleGVjLCByZXN1
bHQpOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcmdMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJnTGlzdC5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcmdMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAg
Y2xhc3MgU2xvdFZpc2l0b3I7CiAKIGNsYXNzIE1hcmtlZEFyZ3VtZW50QnVmZmVyIHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShNYXJrZWRBcmd1bWVudEJ1ZmZlcik7Ci0gICAgZnJpZW5kIGNs
YXNzIEpTR2xvYmFsRGF0YTsKKyAgICBmcmllbmQgY2xhc3MgVk07CiAgICAgZnJpZW5kIGNsYXNz
IEFyZ0xpc3Q7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Bcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OCw3ICsxOTgs
NyBAQCB2b2lkIEFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iCiB2b2lkIEFyZ3Vt
ZW50czo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKICAgICBBcmd1bWVudHMqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8QXJndW1lbnRzKj4oY2VsbCk7Ci0gICAgaWYgKHRoaXNPYmplY3Qt
PnRyeVNldEFyZ3VtZW50KGV4ZWMtPmdsb2JhbERhdGEoKSwgaSwgdmFsdWUpKQorICAgIGlmICh0
aGlzT2JqZWN0LT50cnlTZXRBcmd1bWVudChleGVjLT52bSgpLCBpLCB2YWx1ZSkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNob3VsZFRocm93KTsKQEAgLTIw
OSwxOSArMjA5LDE5IEBAIHZvaWQgQXJndW1lbnRzOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3QK
IHsKICAgICBBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8QXJndW1lbnRzKj4oY2VsbCk7
CiAgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKHRoaXNP
YmplY3QtPnRyeVNldEFyZ3VtZW50KGV4ZWMtPmdsb2JhbERhdGEoKSwgaSwgdmFsdWUpKQorICAg
IGlmICh0aGlzT2JqZWN0LT50cnlTZXRBcmd1bWVudChleGVjLT52bSgpLCBpLCB2YWx1ZSkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmxlbmd0aCAmJiAhdGhpc09iamVjdC0+bV9vdmVycm9kZUxlbmd0aCkgewogICAgICAg
ICB0aGlzT2JqZWN0LT5tX292ZXJyb2RlTGVuZ3RoID0gdHJ1ZTsKLSAgICAgICAgdGhpc09iamVj
dC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgRG9u
dEVudW0pOworICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgRG9udEVudW0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAg
aWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVlICYmICF0aGlz
T2JqZWN0LT5tX292ZXJyb2RlQ2FsbGVlKSB7CiAgICAgICAgIGlmICghdGhpc09iamVjdC0+bV9p
c1N0cmljdE1vZGUpIHsKICAgICAgICAgICAgIHRoaXNPYmplY3QtPm1fb3ZlcnJvZGVDYWxsZWUg
PSB0cnVlOwotICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgRG9udEVudW0pOworICAgICAgICAgICAgdGhpc09i
amVjdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSwgdmFsdWUsIERvbnRFbnVt
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICB0aGlzT2JqZWN0LT5j
cmVhdGVTdHJpY3RNb2RlQ2FsbGVlSWZOZWNlc3NhcnkoZXhlYyk7CkBAIC0yNDcsNyArMjQ3LDcg
QEAgYm9vbCBBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKUwogCiBib29sIEFyZ3Vt
ZW50czo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpIAogewotICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCkuaXNJ
bkRlZmluZU93blByb3BlcnR5KCkpCisgICAgaWYgKGV4ZWMtPnZtKCkuaXNJbkRlZmluZU93blBy
b3BlcnR5KCkpCiAgICAgICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eShjZWxsLCBleGVj
LCBwcm9wZXJ0eU5hbWUpOwogCiAgICAgQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PEFy
Z3VtZW50cyo+KGNlbGwpOwpAQCAtMzA2LDcgKzMwNiw3IEBAIGJvb2wgQXJndW1lbnRzOjpkZWZp
bmVPd25Qcm9wZXJ0eShKU09iamUKICAgICAgICAgICAgICAgICAvLyBpLiBJZiBEZXNjLltbVmFs
dWVdXSBpcyBwcmVzZW50LCB0aGVuCiAgICAgICAgICAgICAgICAgLy8gMS4gQ2FsbCB0aGUgW1tQ
dXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgbWFwIHBhc3NpbmcgUCwgRGVzYy5bW1ZhbHVlXV0sIGFu
ZCBUaHJvdyBhcyB0aGUgYXJndW1lbnRzLgogICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9y
LnZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnRyeVNldEFyZ3VtZW50
KGV4ZWMtPmdsb2JhbERhdGEoKSwgaSwgZGVzY3JpcHRvci52YWx1ZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpc09iamVjdC0+dHJ5U2V0QXJndW1lbnQoZXhlYy0+dm0oKSwgaSwgZGVzY3Jp
cHRvci52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAvLyBpaS4gSWYgRGVzYy5bW1dyaXRhYmxl
XV0gaXMgcHJlc2VudCBhbmQgaXRzIHZhbHVlIGlzIGZhbHNlLCB0aGVuCiAgICAgICAgICAgICAg
ICAgLy8gMS4gQ2FsbCB0aGUgW1tEZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qgb2YgbWFwIHBhc3Np
bmcgUCBhbmQgZmFsc2UgYXMgYXJndW1lbnRzLgogICAgICAgICAgICAgICAgIGlmIChkZXNjcmlw
dG9yLndyaXRhYmxlUHJlc2VudCgpICYmICFkZXNjcmlwdG9yLndyaXRhYmxlKCkpCkBAIC0zMTcs
MTAgKzMxNywxMCBAQCBib29sIEFyZ3VtZW50czo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplCiAg
ICAgfQogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoICYmICF0aGlzT2JqZWN0LT5tX292ZXJyb2RlTGVuZ3RoKSB7Ci0gICAgICAgIHRoaXNPYmpl
Y3QtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwganNOdW1iZXIo
dGhpc09iamVjdC0+bV9udW1Bcmd1bWVudHMpLCBEb250RW51bSk7CisgICAgICAgIHRoaXNPYmpl
Y3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUsIGpzTnVtYmVyKHRoaXNPYmpl
Y3QtPm1fbnVtQXJndW1lbnRzKSwgRG9udEVudW0pOwogICAgICAgICB0aGlzT2JqZWN0LT5tX292
ZXJyb2RlTGVuZ3RoID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVlICYmICF0aGlzT2JqZWN0LT5tX292ZXJyb2RlQ2FsbGVl
KSB7Ci0gICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHBy
b3BlcnR5TmFtZSwgdGhpc09iamVjdC0+bV9jYWxsZWUuZ2V0KCksIERvbnRFbnVtKTsKKyAgICAg
ICAgdGhpc09iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSwgdGhpc09i
amVjdC0+bV9jYWxsZWUuZ2V0KCksIERvbnRFbnVtKTsKICAgICAgICAgdGhpc09iamVjdC0+bV9v
dmVycm9kZUNhbGxlZSA9IHRydWU7CiAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmNhbGxlciAmJiB0aGlzT2JqZWN0LT5tX2lzU3RyaWN0TW9kZSkK
ICAgICAgICAgdGhpc09iamVjdC0+Y3JlYXRlU3RyaWN0TW9kZUNhbGxlcklmTmVjZXNzYXJ5KGV4
ZWMpOwpAQCAtMzU2LDEyICszNTYsMTIgQEAgdm9pZCBBcmd1bWVudHM6OnRlYXJPZmYoQ2FsbEZy
YW1lKiBjYWxsRgogCiAgICAgaWYgKCFjYWxsRnJhbWUtPmlzSW5saW5lQ2FsbEZyYW1lKCkpIHsK
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX251bUFyZ3VtZW50czsgKytpKQotICAg
ICAgICAgICAgdHJ5U2V0QXJndW1lbnQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGksIGNhbGxG
cmFtZS0+YXJndW1lbnRBZnRlckNhcHR1cmUoaSkpOworICAgICAgICAgICAgdHJ5U2V0QXJndW1l
bnQoY2FsbEZyYW1lLT52bSgpLCBpLCBjYWxsRnJhbWUtPmFyZ3VtZW50QWZ0ZXJDYXB0dXJlKGkp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIHRlYXJPZmZGb3JJbmxpbmVDYWxsRnJh
bWUoCi0gICAgICAgIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPnJlZ2lzdGVy
cygpLCBjYWxsRnJhbWUtPmlubGluZUNhbGxGcmFtZSgpKTsKKyAgICAgICAgY2FsbEZyYW1lLT52
bSgpLCBjYWxsRnJhbWUtPnJlZ2lzdGVycygpLCBjYWxsRnJhbWUtPmlubGluZUNhbGxGcmFtZSgp
KTsKIH0KIAogdm9pZCBBcmd1bWVudHM6OmRpZFRlYXJPZmZBY3RpdmF0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uKQpAQCAtMzczLDcgKzM3Myw3IEBAIHZvaWQg
QXJndW1lbnRzOjpkaWRUZWFyT2ZmQWN0aXZhdGlvbihFeGUKICAgICBpZiAoIW1fbnVtQXJndW1l
bnRzKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9hY3RpdmF0aW9uLnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIGFjdGl2YXRpb24pOworICAgIG1fYWN0aXZhdGlvbi5zZXQoZXhl
Yy0+dm0oKSwgdGhpcywgYWN0aXZhdGlvbik7CiAgICAgdGVhck9mZihleGVjKTsKIH0KIApAQCAt
Mzg5LDExICszODksMTEgQEAgdm9pZCBBcmd1bWVudHM6OnRlYXJPZmYoQ2FsbEZyYW1lKiBjYWxs
RgogICAgIG1fcmVnaXN0ZXJzID0gbV9yZWdpc3RlckFycmF5LmdldCgpICsgQ2FsbEZyYW1lOjpv
ZmZzZXRGb3IobV9udW1Bcmd1bWVudHMgKyAxKTsKIAogICAgIHRlYXJPZmZGb3JJbmxpbmVDYWxs
RnJhbWUoCi0gICAgICAgIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPnJlZ2lz
dGVycygpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCwKKyAgICAgICAgY2FsbEZyYW1l
LT52bSgpLCBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCwKICAgICAgICAgaW5saW5lQ2FsbEZyYW1lKTsKIH0KIAotdm9pZCBBcmd1bWVudHM6OnRl
YXJPZmZGb3JJbmxpbmVDYWxsRnJhbWUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBSZWdpc3Rl
ciogcmVnaXN0ZXJzLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKK3ZvaWQgQXJn
dW1lbnRzOjp0ZWFyT2ZmRm9ySW5saW5lQ2FsbEZyYW1lKFZNJiB2bSwgUmVnaXN0ZXIqIHJlZ2lz
dGVycywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiB7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX251bUFyZ3VtZW50czsgKytpKSB7CiAgICAgICAgIFZhbHVlUmVjb3Zl
cnkmIHJlY292ZXJ5ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNbaSArIDFdOwpAQCAtNDMx
LDcgKzQzMSw3IEBAIHZvaWQgQXJndW1lbnRzOjp0ZWFyT2ZmRm9ySW5saW5lQ2FsbEZyYW0KICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotICAgICAgICB0cnlTZXRBcmd1bWVudChnbG9iYWxEYXRhLCBpLCB2YWx1
ZSk7CisgICAgICAgIHRyeVNldEFyZ3VtZW50KHZtLCBpLCB2YWx1ZSk7CiAgICAgfQogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAkocmV2aXNpb24g
MTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDE2ICs0MCwxNiBAQCBjbGFzcyBBcmd1bWVudHMgOiBwdWJsaWMg
SlNEZXN0cnVjdGlibGVPCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVj
dCBCYXNlOwogCi0gICAgc3RhdGljIEFyZ3VtZW50cyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCisgICAgc3RhdGljIEFyZ3VtZW50cyogY3Jl
YXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgewotICAgICAgICBBcmd1bWVu
dHMqIGFyZ3VtZW50cyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4oZ2xv
YmFsRGF0YS5oZWFwKSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CisgICAgICAgIEFyZ3VtZW50cyog
YXJndW1lbnRzID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8QXJndW1lbnRzPih2bS5oZWFw
KSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CiAgICAgICAgIGFyZ3VtZW50cy0+ZmluaXNoQ3JlYXRp
b24oY2FsbEZyYW1lKTsKICAgICAgICAgcmV0dXJuIGFyZ3VtZW50czsKICAgICB9CiAgICAgICAg
IAotICAgIHN0YXRpYyBBcmd1bWVudHMqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkK
KyAgICBzdGF0aWMgQXJndW1lbnRzKiBjcmVhdGUoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiAgICAgewotICAgICAgICBBcmd1
bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4o
Z2xvYmFsRGF0YS5oZWFwKSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CisgICAgICAgIEFyZ3VtZW50
cyogYXJndW1lbnRzID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8QXJndW1lbnRzPih2bS5o
ZWFwKSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CiAgICAgICAgIGFyZ3VtZW50cy0+ZmluaXNoQ3Jl
YXRpb24oY2FsbEZyYW1lLCBpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICByZXR1cm4gYXJndW1l
bnRzOwogICAgIH0KQEAgLTYyLDcgKzYyLDcgQEAgcHJpdmF0ZToKICAgICBBcmd1bWVudHMoQ2Fs
bEZyYW1lKik7CiAgICAgQXJndW1lbnRzKENhbGxGcmFtZSosIE5vUGFyYW1ldGVyc1R5cGUpOwog
ICAgICAgICAKLSAgICB2b2lkIHRlYXJPZmZGb3JJbmxpbmVDYWxsRnJhbWUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBSZWdpc3RlciosIElubGluZUNhbGxGcmFtZSopOworICAgIHZvaWQgdGVh
ck9mZkZvcklubGluZUNhbGxGcmFtZShWTSYgdm0sIFJlZ2lzdGVyKiwgSW5saW5lQ2FsbEZyYW1l
Kik7CiAKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKQEAgLTg0
LDkgKzg0LDkgQEAgcHVibGljOgogICAgIGJvb2wgaXNUb3JuT2ZmKCkgY29uc3QgeyByZXR1cm4g
bV9yZWdpc3RlckFycmF5OyB9CiAgICAgdm9pZCBkaWRUZWFyT2ZmQWN0aXZhdGlvbihFeGVjU3Rh
dGUqLCBKU0FjdGl2YXRpb24qKTsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKSAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
dHlwZSkgCiAgICAgeyAKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOyAKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsgCiAgICAgfQogICAgICAgICAKIHByb3RlY3RlZDoKQEAgLTExMCw3
ICsxMTAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRlU3RyaWN0TW9kZUNhbGxlZUlmTmVj
ZXNzYXJ5KEV4ZWNTdGF0ZSopOwogCiAgICAgYm9vbCBpc0FyZ3VtZW50KHNpemVfdCk7Ci0gICAg
Ym9vbCB0cnlTZXRBcmd1bWVudChKU0dsb2JhbERhdGEmLCBzaXplX3QgYXJndW1lbnQsIEpTVmFs
dWUpOworICAgIGJvb2wgdHJ5U2V0QXJndW1lbnQoVk0mLCBzaXplX3QgYXJndW1lbnQsIEpTVmFs
dWUpOwogICAgIEpTVmFsdWUgdHJ5R2V0QXJndW1lbnQoc2l6ZV90IGFyZ3VtZW50KTsKICAgICBi
b29sIGlzRGVsZXRlZEFyZ3VtZW50KHNpemVfdCk7CiAgICAgYm9vbCB0cnlEZWxldGVBcmd1bWVu
dChzaXplX3QpOwpAQCAtMTQ4LDEyICsxNDgsMTIgQEAgaW5saW5lIEFyZ3VtZW50cyogYXNBcmd1
bWVudHMoSlNWYWx1ZSB2YQogfQogCiBpbmxpbmUgQXJndW1lbnRzOjpBcmd1bWVudHMoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCi0gICAgOiBKU0Rlc3RydWN0aWJsZU9iamVjdChjYWxsRnJhbWUtPmds
b2JhbERhdGEoKSwgY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFyZ3VtZW50c1N0
cnVjdHVyZSgpKQorICAgIDogSlNEZXN0cnVjdGlibGVPYmplY3QoY2FsbEZyYW1lLT52bSgpLCBj
YWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJndW1lbnRzU3RydWN0dXJlKCkpCiB7
CiB9CiAKIGlubGluZSBBcmd1bWVudHM6OkFyZ3VtZW50cyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
Tm9QYXJhbWV0ZXJzVHlwZSkKLSAgICA6IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0KGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJndW1lbnRz
U3RydWN0dXJlKCkpCisgICAgOiBKU0Rlc3RydWN0aWJsZU9iamVjdChjYWxsRnJhbWUtPnZtKCks
IGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcmd1bWVudHNTdHJ1Y3R1cmUoKSkK
IHsKIH0KIApAQCAtMTc3LDExICsxNzcsMTEgQEAgaW5saW5lIGJvb2wgQXJndW1lbnRzOjp0cnlE
ZWxldGVBcmd1bWVudAogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgYm9vbCBBcmd1bWVu
dHM6OnRyeVNldEFyZ3VtZW50KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IGFyZ3Vt
ZW50LCBKU1ZhbHVlIHZhbHVlKQoraW5saW5lIGJvb2wgQXJndW1lbnRzOjp0cnlTZXRBcmd1bWVu
dChWTSYgdm0sIHNpemVfdCBhcmd1bWVudCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAoIWlz
QXJndW1lbnQoYXJndW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdGhpcy0+YXJn
dW1lbnQoYXJndW1lbnQpLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgdGhpcy0+
YXJndW1lbnQoYXJndW1lbnQpLnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIHJldHVybiB0cnVl
OwogfQogCkBAIC0yMjcsMTMgKzIyNywxMyBAQCBpbmxpbmUgV3JpdGVCYXJyaWVyQmFzZTxVbmtu
b3duPiYgQXJndW1lCiAKIGlubGluZSB2b2lkIEFyZ3VtZW50czo6ZmluaXNoQ3JlYXRpb24oQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGNhbGxGcmFtZS0+dm0o
KSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIAogICAgIEpTRnVuY3Rpb24qIGNh
bGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5jYWxsZWUoKSk7CiAgICAgbV9u
dW1Bcmd1bWVudHMgPSBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsKICAgICBtX3JlZ2lzdGVy
cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPio+KGNhbGxGcmFt
ZS0+cmVnaXN0ZXJzKCkpOwotICAgIG1fY2FsbGVlLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEo
KSwgdGhpcywgY2FsbGVlKTsKKyAgICBtX2NhbGxlZS5zZXQoY2FsbEZyYW1lLT52bSgpLCB0aGlz
LCBjYWxsZWUpOwogICAgIG1fb3ZlcnJvZGVMZW5ndGggPSBmYWxzZTsKICAgICBtX292ZXJyb2Rl
Q2FsbGVlID0gZmFsc2U7CiAgICAgbV9vdmVycm9kZUNhbGxlciA9IGZhbHNlOwpAQCAtMjU2LDEz
ICsyNTYsMTMgQEAgaW5saW5lIHZvaWQgQXJndW1lbnRzOjpmaW5pc2hDcmVhdGlvbihDYQogCiBp
bmxpbmUgdm9pZCBBcmd1bWVudHM6OmZpbmlzaENyZWF0aW9uKENhbGxGcmFtZSogY2FsbEZyYW1l
LCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKIHsKLSAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbihjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oY2FsbEZyYW1lLT52bSgpKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogCiAg
ICAgSlNGdW5jdGlvbiogY2FsbGVlID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVGb3JDYWxsRnJh
bWUoY2FsbEZyYW1lKTsKICAgICBtX251bUFyZ3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzLnNpemUoKSAtIDE7CiAgICAgbV9yZWdpc3RlcnMgPSByZWludGVycHJldF9jYXN0PFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4qPihjYWxsRnJhbWUtPnJlZ2lzdGVycygpKSArIGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7Ci0gICAgbV9jYWxsZWUuc2V0KGNhbGxGcmFtZS0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBjYWxsZWUpOworICAgIG1fY2FsbGVlLnNldChjYWxsRnJhbWUtPnZt
KCksIHRoaXMsIGNhbGxlZSk7CiAgICAgbV9vdmVycm9kZUxlbmd0aCA9IGZhbHNlOwogICAgIG1f
b3ZlcnJvZGVDYWxsZWUgPSBmYWxzZTsKICAgICBtX292ZXJyb2RlQ2FsbGVyID0gZmFsc2U7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVj
dG9yLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDkgKzYxLDkgQEAg
QXJyYXlDb25zdHJ1Y3Rvcjo6QXJyYXlDb25zdHJ1Y3RvcihKU0dsbwogCiB2b2lkIEFycmF5Q29u
c3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlQcm90b3R5cGUq
IGFycmF5UHJvdG90eXBlKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgYXJyYXlQcm90b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpOwotICAgIHB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnByb3RvdHlwZSwgYXJyYXlQcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9i
YWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEpLCBSZWFk
T25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
ZXhlYy0+dm0oKSwgYXJyYXlQcm90b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpOworICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUsIGFycmF5UHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBS
ZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSksIFJlYWRPbmx5IHwgRG9udEVu
dW0gfCBEb250RGVsZXRlKTsKIH0KIAogYm9vbCBBcnJheUNvbnN0cnVjdG9yOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCAmc2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE0ODY1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsOSArNDIsOSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgQ2xh
c3NJbmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOwogICAgIH0KIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjQsMTYgKzEyNCwxNiBAQCBBcnJheVByb3RvdHlwZSogQXJyYXlQcm90b3R5
cGU6OmNyZWF0ZShFCiAKIC8vIEVDTUEgMTUuNC40CiBBcnJheVByb3RvdHlwZTo6QXJyYXlQcm90
b3R5cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
Ci0gICAgOiBKU0FycmF5KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIDAp
CisgICAgOiBKU0FycmF5KGdsb2JhbE9iamVjdC0+dm0oKSwgc3RydWN0dXJlLCAwKQogewogfQog
CiB2b2lkIEFycmF5UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGdsb2JhbE9iamVj
dC0+Z2xvYmFsRGF0YSgpOwotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLSAgICBnbG9iYWxEYXRhLnBy
b3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhpcyk7CisgICAgdm0ucHJvdG90eXBlTWFwLmFkZFBy
b3RvdHlwZSh0aGlzKTsKIH0KIAogYm9vbCBBcnJheVByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlT
bG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC03MzksNyArNzM5LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICByZXR1cm4gcGVyZm9ybVNsb3dT
b3J0KGV4ZWMsIHRoaXNPYmosIGxlbmd0aCwgZnVuY3Rpb24sIGNhbGxEYXRhLCBjYWxsVHlwZSkg
PyBKU1ZhbHVlOjplbmNvZGUodGhpc09iaikgOiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTR2xvYmFsT2Jq
ZWN0OjpjcmVhdGUoCi0gICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKSwgSlNHbG9iYWxPYmplY3Q6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIGpzTnVsbCgpKSk7CisgICAgICAg
IGV4ZWMtPnZtKCksIEpTR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwg
anNOdWxsKCkpKTsKICAgICBKU0FycmF5KiBmbGF0QXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5
KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCAwKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBA
IC04MTgsMTcgKzgxOCwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJv
dG9GCiAgICAgICAgICAgICBkZWxldGVDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZWxl
dGVEb3VibGUpOwogICAgIH0KIAotICAgIEpTQXJyYXkqIHJlc09iaiA9IEpTQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihB
cnJheVdpdGhVbmRlY2lkZWQpLCBkZWxldGVDb3VudCk7CisgICAgSlNBcnJheSogcmVzT2JqID0g
SlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChleGVjLT52bSgpLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2Nh
dGlvbihBcnJheVdpdGhVbmRlY2lkZWQpLCBkZWxldGVDb3VudCk7CiAgICAgaWYgKCFyZXNPYmop
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpKTsKIAogICAgIEpTVmFsdWUgcmVzdWx0ID0gcmVzT2JqOwotICAgIEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBkZWxldGVDb3VudDsgaysrKSB7CiAgICAg
ICAgIEpTVmFsdWUgdiA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGsgKyBiZWdpbik7CiAg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgIHJlc09iai0+aW5pdGlhbGl6ZUlu
ZGV4KGdsb2JhbERhdGEsIGssIHYpOworICAgICAgICByZXNPYmotPmluaXRpYWxpemVJbmRleCh2
bSwgaywgdik7CiAgICAgfQogCiAgICAgdW5zaWduZWQgYWRkaXRpb25hbEFyZ3MgPSBzdGQ6Om1h
eDxpbnQ+KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAtIDIsIDApOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCShyZXZpc2lvbiAxNDg2NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCw5ICs0MCw5IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCBD
bGFzc0luZm8gc19pbmZvOwogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
CiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbywgQXJyYXlDbGFzcyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbywgQXJyYXlDbGFzcyk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CYXRjaGVkVHJhbnNpdGlvbk9wdGlt
aXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JhdGNo
ZWRUcmFuc2l0aW9uT3B0aW1pemVyLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0JhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDggKzM0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBCYXRjaGVkVHJh
bnNpdGlvbk9wdGltaXplciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmF0Y2hlZFRyYW5z
aXRpb25PcHRpbWl6ZXIpOwogcHVibGljOgotICAgIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVy
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNPYmplY3QqIG9iamVjdCkKLSAgICAgICAgOiBt
X2dsb2JhbERhdGEoJmdsb2JhbERhdGEpCisgICAgQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIo
Vk0mIHZtLCBKU09iamVjdCogb2JqZWN0KQorICAgICAgICA6IG1fdm0oJnZtKQogICAgICAgICAs
IG1fb2JqZWN0KG9iamVjdCkKICAgICB7CiAgICAgfQpAQCAtNDMsMTEgKzQzLDExIEBAIHB1Ymxp
YzoKICAgICB+QmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIoKQogICAgIHsKICAgICAgICAgaWYg
KG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICBtX29i
amVjdC0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoKm1fZ2xvYmFsRGF0YSk7CisgICAgICAgICAg
ICBtX29iamVjdC0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoKm1fdm0pOwogICAgIH0KIAogcHJp
dmF0ZToKLSAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKKyAgICBWTSogbV92bTsKICAg
ICBKU09iamVjdCogbV9vYmplY3Q7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE0ODY1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDE4ICszOCwxOCBAQCBCb29sZWFuQ29uc3RydWN0b3I6
OkJvb2xlYW5Db25zdHJ1Y3RvcihKCiAKIHZvaWQgQm9vbGVhbkNvbnN0cnVjdG9yOjpmaW5pc2hD
cmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEJvb2xlYW5Qcm90b3R5cGUqIGJvb2xlYW5Qcm90b3R5
cGUpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBib29s
ZWFuUHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKTsKLSAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5w
cm90b3R5cGUsIGJvb2xlYW5Qcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRP
bmx5KTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpLCBib29sZWFuUHJvdG90
eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBib29sZWFu
UHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CiAKICAgICAvLyBu
by4gb2YgYXJndW1lbnRzIGZvciBjb25zdHJ1Y3RvcgotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwg
anNOdW1iZXIoMSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKKyAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwog
fQogCiAvLyBFQ01BIDE1LjYuMgogSlNPYmplY3QqIGNvbnN0cnVjdEJvb2xlYW4oRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9
IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGFzSW50ZXJuYWxGdW5j
dGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT5ib29sZWFuT2JqZWN0U3RydWN0
dXJlKCkpOwotICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIGpz
Qm9vbGVhbihhcmdzLmF0KDApLnRvQm9vbGVhbihleGVjKSkpOworICAgIEJvb2xlYW5PYmplY3Qq
IG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZShleGVjLT52bSgpLCBhc0ludGVybmFsRnVuY3Rp
b24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+Ym9vbGVhbk9iamVjdFN0cnVjdHVy
ZSgpKTsKKyAgICBvYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+dm0oKSwganNCb29sZWFuKGFy
Z3MuYXQoMCkudG9Cb29sZWFuKGV4ZWMpKSk7CiAgICAgcmV0dXJuIG9iajsKIH0KIApAQCAtNzks
OCArNzksOCBAQCBDYWxsVHlwZSBCb29sZWFuQ29uc3RydWN0b3I6OmdldENhbGxEYXRhCiAKIEpT
T2JqZWN0KiBjb25zdHJ1Y3RCb29sZWFuRnJvbUltbWVkaWF0ZUJvb2xlYW4oRXhlY1N0YXRlKiBl
eGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGltbWVkaWF0ZUJvb2xl
YW5WYWx1ZSkKIHsKLSAgICBCb29sZWFuT2JqZWN0KiBvYmogPSBCb29sZWFuT2JqZWN0OjpjcmVh
dGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmJvb2xlYW5PYmplY3RTdHJ1Y3R1
cmUoKSk7Ci0gICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgaW1t
ZWRpYXRlQm9vbGVhblZhbHVlKTsKKyAgICBCb29sZWFuT2JqZWN0KiBvYmogPSBCb29sZWFuT2Jq
ZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5ib29sZWFuT2JqZWN0U3RydWN0
dXJlKCkpOworICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT52bSgpLCBpbW1lZGlhdGVC
b29sZWFuVmFsdWUpOwogICAgIHJldHVybiBvYmo7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAx
NDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsOSArNDAsOSBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvdHlwZSkgCiAgICAgeyAKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGds
b2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCiAgICAgfQogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuT2JqZWN0LmNwcAkocmV2aXNp
b24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbk9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE0ICszMCwxNCBAQCBBU1NFUlRfSEFTX1RSSVZJ
QUxfREVTVFJVQ1RPUihCb29sZWFuT2JqCiAKIGNvbnN0IENsYXNzSW5mbyBCb29sZWFuT2JqZWN0
OjpzX2luZm8gPSB7ICJCb29sZWFuIiwgJkpTV3JhcHBlck9iamVjdDo6c19pbmZvLCAwLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEJvb2xlYW5PYmplY3QpIH07CiAKLUJvb2xlYW5PYmplY3Q6OkJv
b2xlYW5PYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKLSAgICA6IEpTV3JhcHBlck9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCitCb29sZWFu
T2JqZWN0OjpCb29sZWFuT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAg
OiBKU1dyYXBwZXJPYmplY3Qodm0sIHN0cnVjdHVyZSkKIHsKIH0KIAotdm9pZCBCb29sZWFuT2Jq
ZWN0OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEJvb2xl
YW5PYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihnbG9iYWxEYXRhKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNT
RVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQm9vbGVhbk9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Jvb2xlYW5PYmplY3QuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbk9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNywyNCArMjcsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEJvb2xlYW5PYmplY3Qg
OiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKIHByb3RlY3RlZDoKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBCb29sZWFuT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJik7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgQm9vbGVhbk9iamVjdChWTSYsIFN0cnVjdHVyZSopOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIAogcHVibGljOgogICAgIHR5
cGVkZWYgSlNXcmFwcGVyT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMgQm9vbGVhbk9iamVjdCog
Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgc3RhdGljIEJvb2xlYW5PYmplY3QqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQogICAgIHsKLSAgICAgICAgQm9vbGVhbk9iamVjdCogYm9vbGVhbiA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEJvb2xlYW5PYmplY3Q+KGdsb2JhbERhdGEuaGVhcCkpIEJvb2xlYW5P
YmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKLSAgICAgICAgYm9vbGVhbi0+ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEJvb2xlYW5PYmplY3QqIGJvb2xlYW4gPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxCb29sZWFuT2JqZWN0Pih2bS5oZWFwKSkgQm9vbGVhbk9i
amVjdCh2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgYm9vbGVhbi0+ZmluaXNoQ3JlYXRpb24odm0p
OwogICAgICAgICByZXR1cm4gYm9vbGVhbjsKICAgICB9CiAgICAgICAgIAogICAgIHN0YXRpYyBK
U19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAgICAgICAgIAotICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIH07CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUu
Y3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
b29sZWFuUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTQgKzUxLDE0IEBAIGNv
bnN0IENsYXNzSW5mbyBCb29sZWFuUHJvdG90eXBlOjpzX2luZm8KIEFTU0VSVF9IQVNfVFJJVklB
TF9ERVNUUlVDVE9SKEJvb2xlYW5Qcm90b3R5cGUpOwogCiBCb29sZWFuUHJvdG90eXBlOjpCb29s
ZWFuUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAg
OiBCb29sZWFuT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKQorICAgIDogQm9v
bGVhbk9iamVjdChleGVjLT52bSgpLCBzdHJ1Y3R1cmUpCiB7CiB9CiAKIHZvaWQgQm9vbGVhblBy
b3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCop
CiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBz
ZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNCb29sZWFuKGZhbHNlKSk7Cisg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CisgICAgc2V0SW50ZXJuYWxWYWx1
ZShleGVjLT52bSgpLCBqc0Jvb2xlYW4oZmFsc2UpKTsKIAogICAgIEFTU0VSVChpbmhlcml0cygm
c19pbmZvKSk7CiB9CkBAIC03NywyMiArNzcsMjIgQEAgYm9vbCBCb29sZWFuUHJvdG90eXBlOjpn
ZXRPd25Qcm9wZXJ0eURlcwogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xlYW5Q
cm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBp
ZiAodGhpc1ZhbHVlID09IGpzQm9vbGVhbihmYWxzZSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLmZhbHNlU3RyaW5nKCkpOworICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHZtLT5zbWFsbFN0cmluZ3MuZmFsc2VTdHJpbmcoKSk7
CiAKICAgICBpZiAodGhpc1ZhbHVlID09IGpzQm9vbGVhbih0cnVlKSkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MudHJ1ZVN0cmluZygpKTsK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2bS0+c21hbGxTdHJpbmdzLnRydWVTdHJp
bmcoKSk7CiAKICAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmQm9vbGVhbk9iamVjdDo6c19p
bmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAKICAgICBpZiAo
YXNCb29sZWFuT2JqZWN0KHRoaXNWYWx1ZSktPmludGVybmFsVmFsdWUoKSA9PSBqc0Jvb2xlYW4o
ZmFsc2UpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGdsb2JhbERhdGEtPnNtYWxs
U3RyaW5ncy5mYWxzZVN0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2
bS0+c21hbGxTdHJpbmdzLmZhbHNlU3RyaW5nKCkpOwogCiAgICAgQVNTRVJUKGFzQm9vbGVhbk9i
amVjdCh0aGlzVmFsdWUpLT5pbnRlcm5hbFZhbHVlKCkgPT0ganNCb29sZWFuKHRydWUpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy50cnVlU3Ry
aW5nKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodm0tPnNtYWxsU3RyaW5ncy50cnVl
U3RyaW5nKCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xlYW5Qcm90
b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmgJKHJldmlzaW9uIDE0ODY1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsOSArMzgsOSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0
YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2Ns
YXNzIFZNOwogY2xhc3MgQ29weVZpc2l0b3I7CiBzdHJ1Y3QgQXJyYXlTdG9yYWdlOwogCkBAIC0x
MDQsMTAgKzEwNCwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlB1
YmxpY0xlbmd0aCgpIHsgcmV0dXJuIG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5n
SGVhZGVyOjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZlZlY3Rvckxlbmd0aCgpIHsgcmV0dXJuIG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSAr
IEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpOyB9CiAgICAgCi0gICAgc3Rh
dGljIEJ1dHRlcmZseSogY3JlYXRlVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmLCBzaXplX3Qg
cHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVh
ZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIHN0YXRpYyBCdXR0
ZXJmbHkqIGNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVf
dCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogCi0gICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKEpT
R2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHks
IGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IEluZGV4aW5nSGVhZGVyJiwgc2l6ZV90IGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUo
SlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRl
KFZNJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBo
YXNJbmRleGluZ0hlYWRlciwgY29uc3QgSW5kZXhpbmdIZWFkZXImLCBzaXplX3QgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZShWTSYsIFN0
cnVjdHVyZSopOwogICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJp
bmdDb2xsZWN0aW9uKENvcHlWaXNpdG9yJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJv
cGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKICAgICAKICAgICBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFk
ZXIoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQpAQCAtMTQ3LDIwICsx
NDcsMjAgQEAgcHVibGljOgogICAgIHZvaWQqIGJhc2Uoc2l6ZV90IHByZUNhcGFjaXR5LCBzaXpl
X3QgcHJvcGVydHlDYXBhY2l0eSkgeyByZXR1cm4gcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0
eUNhcGFjaXR5IC0gcHJlQ2FwYWNpdHk7IH0KICAgICB2b2lkKiBiYXNlKFN0cnVjdHVyZSopOwog
Ci0gICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlT3JHcm93QXJyYXlSaWdodChCdXR0ZXJmbHkq
LCBKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IHByb3BlcnR5
Q2FwYWNpdHksIGJvb2wgaGFkSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgCisg
ICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlT3JHcm93QXJyYXlSaWdodChCdXR0ZXJmbHkqLCBW
TSYsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9v
bCBoYWRJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOyAKIAogICAgIC8vIFRoZSBi
dXR0ZXJmbHkgcmVhbGxvY2F0aW9uIG1ldGhvZHMgcGVyZm9ybSB0aGUgcmVhbGxvY2F0aW9uIGl0
c2VsZiBidXQgZG8gbm90IGNoYW5nZSBhbnkKICAgICAvLyBvZiB0aGUgbWV0YS1kYXRhIHRvIHJl
ZmxlY3QgdGhhdCB0aGUgcmVhbGxvY2F0aW9uIG9jY3VycmVkLiBOb3RlIHRoYXQgdGhpcyBzZXQg
b2YKICAgICAvLyBtZXRob2RzIGlzIG5vdCBleGhhdXN0aXZlIGFuZCBpcyBub3QgaW50ZW5kZWQg
dG8gZW5jYXBzdWxhdGUgYWxsIHBvc3NpYmxlIGFsbG9jYXRpb24KICAgICAvLyBtb2RlcyBvZiBi
dXR0ZXJmbGllcyAtIHRoZXJlIGFyZSBjb2RlIHBhdGhzIHRoYXQgYWxsb2NhdGUgYnV0dGVyZmxp
ZXMgYnkgY2FsbGluZwogICAgIC8vIGRpcmVjdGx5IGludG8gSGVhcDo6dHJ5QWxsb2NhdGVTdG9y
YWdlLgotICAgIEJ1dHRlcmZseSogZ3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBz
aXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0lu
ZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBu
ZXdQcm9wZXJ0eUNhcGFjaXR5KTsKLSAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBvbGRQcm9wZXJ0
eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7Ci0gICAgQnV0dGVyZmx5KiBn
cm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJl
LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7Ci0gICAgQnV0dGVyZmx5KiBncm93QXJyYXlS
aWdodChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IHByb3Bl
cnR5Q2FwYWNpdHksIGJvb2wgaGFkSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsg
Ly8gQXNzdW1lcyB0aGF0IHByZUNhcGFjaXR5IGlzIHplcm8sIGFuZCBhc3NlcnRzIGFzIG11Y2gu
Ci0gICAgQnV0dGVyZmx5KiBncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUq
LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIEJ1dHRlcmZseSog
cmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wg
b2xkSGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBib29sIG5ld0hhc0luZGV4aW5nSGVhZGVyLCBzaXpl
X3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIEJ1dHRlcmZseSogcmVzaXpl
QXJyYXkoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBz
aXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOyAvLyBBc3N1bWVzIHRoYXQgeW91
J3JlIG5vdCBjaGFuZ2luZyB3aGV0aGVyIG9yIG5vdCB0aGUgb2JqZWN0IGhhcyBhbiBpbmRleGlu
ZyBoZWFkZXIuCisgICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdlKFZNJiwgc2l6ZV90
IHByZUNhcGFjaXR5LCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGlu
Z0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJv
cGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdlKFZNJiwg
U3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXpl
X3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlTdG9y
YWdlKFZNJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFj
aXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dBcnJheVJpZ2h0KFZNJiwgU3RydWN0dXJlKiBvbGRT
dHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhZEluZGV4aW5nSGVhZGVy
LCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyk7IC8vIEFzc3VtZXMgdGhhdCBwcmVDYXBhY2l0eSBpcyB6ZXJv
LCBhbmQgYXNzZXJ0cyBhcyBtdWNoLgorICAgIEJ1dHRlcmZseSogZ3Jvd0FycmF5UmlnaHQoVk0m
LCBTdHJ1Y3R1cmUqLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAg
IEJ1dHRlcmZseSogcmVzaXplQXJyYXkoVk0mLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9v
bCBvbGRIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIGJvb2wgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIHNp
emVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0dGVyZmx5KiByZXNp
emVBcnJheShWTSYsIFN0cnVjdHVyZSosIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5l
d0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgLy8gQXNzdW1lcyB0aGF0IHlvdSdyZSBub3Qg
Y2hhbmdpbmcgd2hldGhlciBvciBub3QgdGhlIG9iamVjdCBoYXMgYW4gaW5kZXhpbmcgaGVhZGVy
LgogICAgIEJ1dHRlcmZseSogdW5zaGlmdChTdHJ1Y3R1cmUqLCBzaXplX3QgbnVtYmVyT2ZTbG90
cyk7CiAgICAgQnV0dGVyZmx5KiBzaGlmdChTdHJ1Y3R1cmUqLCBzaXplX3QgbnVtYmVyT2ZTbG90
cyk7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRl
cmZseUlubGluZXMuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwzMiArMzAs
MzIgQEAKICNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGlu
ZXMuaCIKICNpbmNsdWRlICJDb3B5VmlzaXRvci5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5o
IgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAKIG5hbWVzcGFjZSBK
U0MgewogCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9w
ZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQoVk0mIHZtLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFj
aXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpCiB7CiAgICAgdm9pZCogdGVtcDsKICAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShw
cmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBSRUxFQVNFX0FTU0VSVChnbG9iYWxEYXRhLmhlYXAu
dHJ5QWxsb2NhdGVTdG9yYWdlKHNpemUsICZ0ZW1wKSk7CisgICAgUkVMRUFTRV9BU1NFUlQodm0u
aGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc2l6ZSwgJnRlbXApKTsKICAgICBCdXR0ZXJmbHkqIHJl
c3VsdCA9IGZyb21CYXNlKHRlbXAsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHBy
b3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IEluZGV4aW5nSGVh
ZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQor
aW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoVk0mIHZtLCBzaXplX3QgcHJlQ2Fw
YWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBj
b25zdCBJbmRleGluZ0hlYWRlciYgaW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcykKIHsKICAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlh
bGl6ZWQoCi0gICAgICAgIGdsb2JhbERhdGEsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5
LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgICAg
ICB2bSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAgaWYgKGhhc0luZGV4aW5nSGVhZGVyKQog
ICAgICAgICAqcmVzdWx0LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXI7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2lubGluZSBC
dXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxEYXRhLCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCksIGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
LCBJbmRleGluZ0hlYWRlcigpLCAwKTsKKyAgICByZXR1cm4gY3JlYXRlKHZtLCAwLCBzdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlKCkpLCBJbmRleGluZ0hlYWRlcigpLCAwKTsKIH0KIAogaW5saW5lIEJ1dHRlcmZs
eSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbihDb3B5Vmlz
aXRvciYgdmlzaXRvciwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0
eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKQpAQCAtNzIsMTEgKzcyLDExIEBAIGlubGluZSB2b2lkKiBCdXR0ZXJmbHk6OmJhc2UoU3Ry
dWN0dXJlKiAKICAgICByZXR1cm4gYmFzZShpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShz
dHJ1Y3R1cmUpLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogfQogCi1pbmxpbmUg
QnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5
LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQoraW5saW5lIEJ1dHRlcmZseSogQnV0dGVy
Zmx5Ojpncm93UHJvcGVydHlTdG9yYWdlKFZNJiB2bSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXpl
X3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVChuZXdQcm9wZXJ0eUNhcGFjaXR5ID4gb2xkUHJvcGVydHlDYXBh
Y2l0eSk7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAotICAg
ICAgICBnbG9iYWxEYXRhLCBwcmVDYXBhY2l0eSwgbmV3UHJvcGVydHlDYXBhY2l0eSwgaGFzSW5k
ZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAgICAgdm0sIHBy
ZUNhcGFjaXR5LCBuZXdQcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIG1lbWNweSgKICAgICAgICAgcmVzdWx0LT5wcm9w
ZXJ0eVN0b3JhZ2UoKSAtIG9sZFByb3BlcnR5Q2FwYWNpdHksCiAgICAgICAgIHByb3BlcnR5U3Rv
cmFnZSgpIC0gb2xkUHJvcGVydHlDYXBhY2l0eSwKQEAgLTg0LDUxICs4NCw1MSBAQCBpbmxpbmUg
QnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBvbGRQcm9w
ZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKK2lubGluZSBCdXR0ZXJm
bHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2Fw
YWNpdHkpCiB7CiAgICAgcmV0dXJuIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoCi0gICAgICAgIGdsb2Jh
bERhdGEsIGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSksIG9sZFByb3Bl
cnR5Q2FwYWNpdHksCisgICAgICAgIHZtLCBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShz
dHJ1Y3R1cmUpLCBvbGRQcm9wZXJ0eUNhcGFjaXR5LAogICAgICAgICBoYXNJbmRleGluZ0hlYWRl
cihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwKICAgICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKSwgbmV3UHJvcGVydHlDYXBhY2l0
eSk7CiB9CiAKLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFn
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXpl
X3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jv
d1Byb3BlcnR5U3RvcmFnZShWTSYgdm0sIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3Qg
bmV3UHJvcGVydHlDYXBhY2l0eSkKIHsKICAgICByZXR1cm4gZ3Jvd1Byb3BlcnR5U3RvcmFnZSgK
LSAgICAgICAgZ2xvYmFsRGF0YSwgb2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCksIG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworICAgICAgICB2bSwgb2xkU3RydWN0
dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1Byb3BlcnR5Q2FwYWNp
dHkpOwogfQogCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5
UmlnaHQoQnV0dGVyZmx5KiBvbGRCdXR0ZXJmbHksIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
U3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhh
ZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNp
emVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK2lubGluZSBCdXR0ZXJmbHkqIEJ1
dHRlcmZseTo6Y3JlYXRlT3JHcm93QXJyYXlSaWdodChCdXR0ZXJmbHkqIG9sZEJ1dHRlcmZseSwg
Vk0mIHZtLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHks
IGJvb2wgaGFkSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQogewogICAgIGlmICgh
b2xkQnV0dGVyZmx5KQotICAgICAgICByZXR1cm4gY3JlYXRlKGdsb2JhbERhdGEsIDAsIHByb3Bl
cnR5Q2FwYWNpdHksIHRydWUsIEluZGV4aW5nSGVhZGVyKCksIG5ld0luZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKTsKLSAgICByZXR1cm4gb2xkQnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodChnbG9i
YWxEYXRhLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5Q2FwYWNpdHksIGhhZEluZGV4aW5nSGVhZGVy
LCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpOworICAgICAgICByZXR1cm4gY3JlYXRlKHZtLCAwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0
cnVlLCBJbmRleGluZ0hlYWRlcigpLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cisg
ICAgcmV0dXJuIG9sZEJ1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQodm0sIG9sZFN0cnVjdHVyZSwg
cHJvcGVydHlDYXBhY2l0eSwgaGFkSW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiB9CiAKLWlubGluZSBC
dXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJv
b2wgaGFkSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoraW5saW5lIEJ1dHRlcmZs
eSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChWTSYgdm0sIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYWRJbmRleGluZ0hlYWRlciwgc2l6
ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3SW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChvbGRTdHJ1Y3R1cmUsICFpbmRl
eGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShvbGRTdHJ1Y3R1cmUpKTsKICAgICBBU1NFUlRfVU5V
U0VEKG9sZFN0cnVjdHVyZSwgaGFkSW5kZXhpbmdIZWFkZXIgPT0gaGFzSW5kZXhpbmdIZWFkZXIo
b2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwogICAgIHZvaWQqIHRoZUJhc2UgPSBiYXNl
KDAsIHByb3BlcnR5Q2FwYWNpdHkpOwogICAgIHNpemVfdCBvbGRTaXplID0gdG90YWxTaXplKDAs
IHByb3BlcnR5Q2FwYWNpdHksIGhhZEluZGV4aW5nSGVhZGVyLCBvbGRJbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyk7CiAgICAgc2l6ZV90IG5ld1NpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlD
YXBhY2l0eSwgdHJ1ZSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIGlmICgh
Z2xvYmFsRGF0YS5oZWFwLnRyeVJlYWxsb2NhdGVTdG9yYWdlKCZ0aGVCYXNlLCBvbGRTaXplLCBu
ZXdTaXplKSkKKyAgICBpZiAoIXZtLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoJnRoZUJhc2Us
IG9sZFNpemUsIG5ld1NpemUpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gZnJvbUJh
c2UodGhlQmFzZSwgMCwgcHJvcGVydHlDYXBhY2l0eSk7CiB9CiAKLWlubGluZSBCdXR0ZXJmbHkq
IEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KQoraW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChWTSYgdm0sIFN0
cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpCiB7CiAgICAgcmV0dXJuIGdyb3dBcnJheVJpZ2h0KAotICAgICAgICBnbG9iYWxEYXRhLCBv
bGRTdHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwKKyAgICAgICAg
dm0sIG9sZFN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAogICAg
ICAgICBoYXNJbmRleGluZ0hlYWRlcihvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwKICAg
ICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMob2xkU3Ry
dWN0dXJlKSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogfQogCi1pbmxpbmUgQnV0
dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgb2xkSGFzSW5kZXhpbmdIZWFkZXIsIHNpemVf
dCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBi
b29sIG5ld0hhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KFZNJiB2bSwg
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgb2xkSGFzSW5kZXhpbmdIZWFkZXIsIHNpemVf
dCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBi
b29sIG5ld0hhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpCiB7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAot
ICAgICAgICBnbG9iYWxEYXRhLCBuZXdQcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgbmV3
SGFzSW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAg
ICAgdm0sIG5ld1ByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBuZXdIYXNJbmRleGluZ0hl
YWRlciwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIC8vIEZJWE1FOiBUaGlz
IGNvdWxkIGJlIG1hZGUgbXVjaCBtb3JlIGVmZmljaWVudCBpZiB3ZSB1c2VkIHRoZSBwcm9wZXJ0
eSBzaXplLAogICAgIC8vIG5vdCB0aGUgY2FwYWNpdHkuCiAgICAgdm9pZCogdG8gPSByZXN1bHQt
PnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eTsKQEAgLTE0MCwxMSArMTQwLDEx
IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdQ
cmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoraW5saW5l
IEJ1dHRlcmZseSogQnV0dGVyZmx5OjpyZXNpemVBcnJheShWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcykKIHsKICAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gSlNDOjpoYXNJbmRl
eGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICByZXR1cm4gcmVzaXpl
QXJyYXkoCi0gICAgICAgIGdsb2JhbERhdGEsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSwgaGFzSW5kZXhpbmdIZWFkZXIsCisgICAgICAgIHZtLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCksIGhhc0luZGV4aW5nSGVhZGVyLAogICAgICAgICBpbmRleGluZ0hlYWRlcigpLT5p
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpLCBuZXdQcmVDYXBhY2l0eSwKICAg
ICAgICAgaGFzSW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNh
Y2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCB0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgQ2FjaGVUeXBlczxVbmxpbmtlZEV2CiB9OwogCiB0ZW1wbGF0ZSA8Y2xhc3MgVW5saW5rZWRD
b2RlQmxvY2tUeXBlLCBjbGFzcyBFeGVjdXRhYmxlVHlwZT4KLVVubGlua2VkQ29kZUJsb2NrVHlw
ZSogQ29kZUNhY2hlOjpnZXRDb2RlQmxvY2soSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1Nj
b3BlKiBzY29wZSwgRXhlY3V0YWJsZVR5cGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MsIERlYnVnZ2VyTW9kZSBkZWJ1
Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvcikK
K1VubGlua2VkQ29kZUJsb2NrVHlwZSogQ29kZUNhY2hlOjpnZXRDb2RlQmxvY2soVk0mIHZtLCBK
U1Njb3BlKiBzY29wZSwgRXhlY3V0YWJsZVR5cGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MsIERlYnVnZ2VyTW9kZSBk
ZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUsIFBhcnNlckVycm9yJiBlcnJv
cikKIHsKICAgICBTb3VyY2VDb2RlS2V5IGtleSA9IFNvdXJjZUNvZGVLZXkoc291cmNlLCBTdHJp
bmcoKSwgQ2FjaGVUeXBlczxVbmxpbmtlZENvZGVCbG9ja1R5cGU+Ojpjb2RlVHlwZSwgc3RyaWN0
bmVzcyk7CiAgICAgQ29kZUNhY2hlTWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9zb3VyY2VD
b2RlLmFkZChrZXksIFNvdXJjZUNvZGVWYWx1ZSgpKTsKQEAgLTg4LDE2ICs4OCwxNiBAQCBVbmxp
bmtlZENvZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0Q29kCiAgICAgfQogCiAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBDYWNoZVR5cGVzPFVubGlua2VkQ29kZUJsb2NrVHlwZT46OlJvb3ROb2RlIFJv
b3ROb2RlOwotICAgIFJlZlB0cjxSb290Tm9kZT4gcm9vdE5vZGUgPSBwYXJzZTxSb290Tm9kZT4o
Jmdsb2JhbERhdGEsIHNvdXJjZSwgMCwgSWRlbnRpZmllcigpLCBzdHJpY3RuZXNzLCBKU1BhcnNl
UHJvZ3JhbUNvZGUsIGVycm9yKTsKKyAgICBSZWZQdHI8Um9vdE5vZGU+IHJvb3ROb2RlID0gcGFy
c2U8Um9vdE5vZGU+KCZ2bSwgc291cmNlLCAwLCBJZGVudGlmaWVyKCksIHN0cmljdG5lc3MsIEpT
UGFyc2VQcm9ncmFtQ29kZSwgZXJyb3IpOwogICAgIGlmICghcm9vdE5vZGUpIHsKICAgICAgICAg
bV9zb3VyY2VDb2RlLnJlbW92ZShhZGRSZXN1bHQuaXRlcmF0b3IpOwogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAgICAgZXhlY3V0YWJsZS0+cmVjb3JkUGFyc2Uocm9vdE5vZGUtPmZlYXR1cmVz
KCksIHJvb3ROb2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCByb290Tm9kZS0+bGluZU5vKCks
IHJvb3ROb2RlLT5sYXN0TGluZSgpKTsKIAotICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5s
aW5rZWRDb2RlID0gVW5saW5rZWRDb2RlQmxvY2tUeXBlOjpjcmVhdGUoJmdsb2JhbERhdGEsIGV4
ZWN1dGFibGUtPmV4ZWN1dGFibGVJbmZvKCkpOworICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSog
dW5saW5rZWRDb2RlID0gVW5saW5rZWRDb2RlQmxvY2tUeXBlOjpjcmVhdGUoJnZtLCBleGVjdXRh
YmxlLT5leGVjdXRhYmxlSW5mbygpKTsKICAgICB1bmxpbmtlZENvZGUtPnJlY29yZFBhcnNlKHJv
b3ROb2RlLT5mZWF0dXJlcygpLCByb290Tm9kZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgcm9v
dE5vZGUtPmxpbmVObygpIC0gc291cmNlLmZpcnN0TGluZSgpLCByb290Tm9kZS0+bGFzdExpbmUo
KSAtIHJvb3ROb2RlLT5saW5lTm8oKSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBn
ZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGdsb2JhbERhdGEsIHNjb3Bl
LCByb290Tm9kZS5nZXQoKSwgdW5saW5rZWRDb2RlLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9k
ZSkpKTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihu
ZXcgQnl0ZWNvZGVHZW5lcmF0b3Iodm0sIHNjb3BlLCByb290Tm9kZS5nZXQoKSwgdW5saW5rZWRD
b2RlLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSkpKTsKICAgICBlcnJvciA9IGdlbmVyYXRv
ci0+Z2VuZXJhdGUoKTsKICAgICByb290Tm9kZS0+ZGVzdHJveURhdGEoKTsKICAgICBpZiAoZXJy
b3IubV90eXBlICE9IFBhcnNlckVycm9yOjpFcnJvck5vbmUpIHsKQEAgLTExMCwyOCArMTEwLDI4
IEBAIFVubGlua2VkQ29kZUJsb2NrVHlwZSogQ29kZUNhY2hlOjpnZXRDb2QKICAgICAgICAgcmV0
dXJuIHVubGlua2VkQ29kZTsKICAgICB9CiAKLSAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
ID0gU291cmNlQ29kZVZhbHVlKGdsb2JhbERhdGEsIHVubGlua2VkQ29kZSwgbV9zb3VyY2VDb2Rl
LmFnZSgpKTsKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gU291cmNlQ29kZVZhbHVl
KHZtLCB1bmxpbmtlZENvZGUsIG1fc291cmNlQ29kZS5hZ2UoKSk7CiAgICAgcmV0dXJuIHVubGlu
a2VkQ29kZTsKIH0KIAotVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBDb2RlQ2FjaGU6OmdldFBy
b2dyYW1Db2RlQmxvY2soSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9ncmFtRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1BhcnNlclN0cmljdG5l
c3Mgc3RyaWN0bmVzcywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHBy
b2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yKQorVW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
KiBDb2RlQ2FjaGU6OmdldFByb2dyYW1Db2RlQmxvY2soVk0mIHZtLCBQcm9ncmFtRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1BhcnNlclN0cmljdG5l
c3Mgc3RyaWN0bmVzcywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHBy
b2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yKQogewotICAgIHJldHVybiBnZXRDb2RlQmxv
Y2s8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPihnbG9iYWxEYXRhLCAwLCBleGVjdXRhYmxlLCBz
b3VyY2UsIHN0cmljdG5lc3MsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlLCBlcnJvcik7Cisg
ICAgcmV0dXJuIGdldENvZGVCbG9jazxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+KHZtLCAwLCBl
eGVjdXRhYmxlLCBzb3VyY2UsIHN0cmljdG5lc3MsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2Rl
LCBlcnJvcik7CiB9CiAKLVVubGlua2VkRXZhbENvZGVCbG9jayogQ29kZUNhY2hlOjpnZXRFdmFs
Q29kZUJsb2NrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNTY29wZSogc2NvcGUsIEV2YWxF
eGVjdXRhYmxlKiBleGVjdXRhYmxlLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTUGFyc2Vy
U3RyaWN0bmVzcyBzdHJpY3RuZXNzLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxl
ck1vZGUgcHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJyb3IpCitVbmxpbmtlZEV2YWxDb2Rl
QmxvY2sqIENvZGVDYWNoZTo6Z2V0RXZhbENvZGVCbG9jayhWTSYgdm0sIEpTU2NvcGUqIHNjb3Bl
LCBFdmFsRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBK
U1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwg
UHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yKQogewotICAgIHJl
dHVybiBnZXRDb2RlQmxvY2s8VW5saW5rZWRFdmFsQ29kZUJsb2NrPihnbG9iYWxEYXRhLCBzY29w
ZSwgZXhlY3V0YWJsZSwgc291cmNlLCBzdHJpY3RuZXNzLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVy
TW9kZSwgZXJyb3IpOworICAgIHJldHVybiBnZXRDb2RlQmxvY2s8VW5saW5rZWRFdmFsQ29kZUJs
b2NrPih2bSwgc2NvcGUsIGV4ZWN1dGFibGUsIHNvdXJjZSwgc3RyaWN0bmVzcywgZGVidWdnZXJN
b2RlLCBwcm9maWxlck1vZGUsIGVycm9yKTsKIH0KIAotVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUqIENvZGVDYWNoZTo6Z2V0RnVuY3Rpb25FeGVjdXRhYmxlRnJvbUdsb2JhbENvZGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UsIFBhcnNlckVycm9yJiBlcnJvcikKK1VubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiBDb2RlQ2FjaGU6OmdldEZ1bmN0aW9uRXhlY3V0YWJsZUZyb21HbG9iYWxDb2RlKFZNJiB2
bSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJz
ZXJFcnJvciYgZXJyb3IpCiB7CiAgICAgU291cmNlQ29kZUtleSBrZXkgPSBTb3VyY2VDb2RlS2V5
KHNvdXJjZSwgbmFtZS5zdHJpbmcoKSwgU291cmNlQ29kZUtleTo6RnVuY3Rpb25UeXBlLCBKU1Bh
cnNlTm9ybWFsKTsKICAgICBDb2RlQ2FjaGVNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX3Nv
dXJjZUNvZGUuYWRkKGtleSwgU291cmNlQ29kZVZhbHVlKCkpOwogICAgIGlmICghYWRkUmVzdWx0
LmlzTmV3RW50cnkpCiAgICAgICAgIHJldHVybiBqc0Nhc3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUqPihhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmNlbGwuZ2V0KCkpOwogCi0gICAgUmVm
UHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFtID0gcGFyc2U8UHJvZ3JhbU5vZGU+KCZnbG9iYWxEYXRh
LCBzb3VyY2UsIDAsIElkZW50aWZpZXIoKSwgSlNQYXJzZU5vcm1hbCwgSlNQYXJzZVByb2dyYW1D
b2RlLCBlcnJvcik7CisgICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFtID0gcGFyc2U8UHJv
Z3JhbU5vZGU+KCZ2bSwgc291cmNlLCAwLCBJZGVudGlmaWVyKCksIEpTUGFyc2VOb3JtYWwsIEpT
UGFyc2VQcm9ncmFtQ29kZSwgZXJyb3IpOwogICAgIGlmICghcHJvZ3JhbSkgewogICAgICAgICBB
U1NFUlQoZXJyb3IubV90eXBlICE9IFBhcnNlckVycm9yOjpFcnJvck5vbmUpOwogICAgICAgICBt
X3NvdXJjZUNvZGUucmVtb3ZlKGFkZFJlc3VsdC5pdGVyYXRvcik7CkBAIC0xNDksMTAgKzE0OSwx
MCBAQCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogQ29kZUNhY2hlOjpnCiAgICAgQVNTRVJU
KGJvZHkpOwogICAgIEFTU0VSVChib2R5LT5pZGVudCgpLmlzTnVsbCgpKTsKIAotICAgIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCZnbG9iYWxEYXRhLCBzb3VyY2UsIGJvZHkpOwotICAgIGZ1
bmN0aW9uRXhlY3V0YWJsZS0+bV9uYW1lVmFsdWUuc2V0KGdsb2JhbERhdGEsIGZ1bmN0aW9uRXhl
Y3V0YWJsZSwganNTdHJpbmcoJmdsb2JhbERhdGEsIG5hbWUuc3RyaW5nKCkpKTsKKyAgICBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgmdm0sIHNvdXJjZSwgYm9keSk7CisgICAgZnVuY3Rpb25F
eGVjdXRhYmxlLT5tX25hbWVWYWx1ZS5zZXQodm0sIGZ1bmN0aW9uRXhlY3V0YWJsZSwganNTdHJp
bmcoJnZtLCBuYW1lLnN0cmluZygpKSk7CiAKLSAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
ID0gU291cmNlQ29kZVZhbHVlKGdsb2JhbERhdGEsIGZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9zb3Vy
Y2VDb2RlLmFnZSgpKTsKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gU291cmNlQ29k
ZVZhbHVlKHZtLCBmdW5jdGlvbkV4ZWN1dGFibGUsIG1fc291cmNlQ29kZS5hZ2UoKSk7CiAgICAg
cmV0dXJuIGZ1bmN0aW9uRXhlY3V0YWJsZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1
MCw3IEBAIGNsYXNzIFVubGlua2VkRXZhbENvZGVCbG9jazsKIGNsYXNzIFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKIGNsYXNzIFVu
bGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwog
c3RydWN0IFBhcnNlckVycm9yOwogY2xhc3MgU291cmNlQ29kZTsKIGNsYXNzIFNvdXJjZVByb3Zp
ZGVyOwpAQCAtMTIwLDggKzEyMCw4IEBAIHN0cnVjdCBTb3VyY2VDb2RlVmFsdWUgewogICAgIHsK
ICAgICB9CiAKLSAgICBTb3VyY2VDb2RlVmFsdWUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0NlbGwqIGNlbGwsIGludDY0X3QgYWdlKQotICAgICAgICA6IGNlbGwoZ2xvYmFsRGF0YSwgY2Vs
bCkKKyAgICBTb3VyY2VDb2RlVmFsdWUoVk0mIHZtLCBKU0NlbGwqIGNlbGwsIGludDY0X3QgYWdl
KQorICAgICAgICA6IGNlbGwodm0sIGNlbGwpCiAgICAgICAgICwgYWdlKGFnZSkKICAgICB7CiAg
ICAgfQpAQCAtMjM5LDkgKzIzOSw5IEBAIGNsYXNzIENvZGVDYWNoZSB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NPd25QdHI8Q29kZUNhY2hlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihu
ZXcgQ29kZUNhY2hlKTsgfQogCi0gICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBnZXRQcm9n
cmFtQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSYsIFByb2dyYW1FeGVjdXRhYmxlKiwgY29uc3QgU291
cmNlQ29kZSYsIEpTUGFyc2VyU3RyaWN0bmVzcywgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUs
IFBhcnNlckVycm9yJik7Ci0gICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBnZXRFdmFsQ29kZUJs
b2NrKEpTR2xvYmFsRGF0YSYsIEpTU2NvcGUqLCBFdmFsRXhlY3V0YWJsZSosIGNvbnN0IFNvdXJj
ZUNvZGUmLCBKU1BhcnNlclN0cmljdG5lc3MsIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlLCBQ
YXJzZXJFcnJvciYpOwotICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBnZXRGdW5jdGlv
bkV4ZWN1dGFibGVGcm9tR2xvYmFsQ29kZShKU0dsb2JhbERhdGEmLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgU291cmNlQ29kZSYsIFBhcnNlckVycm9yJik7CisgICAgVW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrKiBnZXRQcm9ncmFtQ29kZUJsb2NrKFZNJiwgUHJvZ3JhbUV4ZWN1dGFibGUqLCBj
b25zdCBTb3VyY2VDb2RlJiwgSlNQYXJzZXJTdHJpY3RuZXNzLCBEZWJ1Z2dlck1vZGUsIFByb2Zp
bGVyTW9kZSwgUGFyc2VyRXJyb3ImKTsKKyAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGdldEV2
YWxDb2RlQmxvY2soVk0mLCBKU1Njb3BlKiwgRXZhbEV4ZWN1dGFibGUqLCBjb25zdCBTb3VyY2VD
b2RlJiwgSlNQYXJzZXJTdHJpY3RuZXNzLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSwgUGFy
c2VyRXJyb3ImKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZ2V0RnVuY3Rpb25F
eGVjdXRhYmxlRnJvbUdsb2JhbENvZGUoVk0mLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgU291
cmNlQ29kZSYsIFBhcnNlckVycm9yJik7CiAgICAgfkNvZGVDYWNoZSgpOwogCiAgICAgdm9pZCBj
bGVhcigpCkBAIC0yNTMsNyArMjUzLDcgQEAgcHJpdmF0ZToKICAgICBDb2RlQ2FjaGUoKTsKIAog
ICAgIHRlbXBsYXRlIDxjbGFzcyBVbmxpbmtlZENvZGVCbG9ja1R5cGUsIGNsYXNzIEV4ZWN1dGFi
bGVUeXBlPiAKLSAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGdldENvZGVCbG9jayhKU0dsb2Jh
bERhdGEmLCBKU1Njb3BlKiwgRXhlY3V0YWJsZVR5cGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNQ
YXJzZXJTdHJpY3RuZXNzLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3Im
KTsKKyAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGdldENvZGVCbG9jayhWTSYsIEpTU2NvcGUq
LCBFeGVjdXRhYmxlVHlwZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1BhcnNlclN0cmljdG5lc3Ms
IERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYpOwogCiAgICAgQ29kZUNh
Y2hlTWFwIG1fc291cmNlQ29kZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25JZGVudGlmaWVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzLDE1ICsyMywxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotI2Rl
ZmluZSBJTklUSUFMSVpFX1BST1BFUlRZX05BTUUobmFtZSkgLCBuYW1lKGdsb2JhbERhdGEsICNu
YW1lKQotI2RlZmluZSBJTklUSUFMSVpFX0tFWVdPUkQobmFtZSkgLCBuYW1lIyNLZXl3b3JkKGds
b2JhbERhdGEsICNuYW1lKQorI2RlZmluZSBJTklUSUFMSVpFX1BST1BFUlRZX05BTUUobmFtZSkg
LCBuYW1lKHZtLCAjbmFtZSkKKyNkZWZpbmUgSU5JVElBTElaRV9LRVlXT1JEKG5hbWUpICwgbmFt
ZSMjS2V5d29yZCh2bSwgI25hbWUpCiAKLUNvbW1vbklkZW50aWZpZXJzOjpDb21tb25JZGVudGlm
aWVycyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitDb21tb25JZGVudGlmaWVyczo6Q29tbW9u
SWRlbnRpZmllcnMoVk0qIHZtKQogICAgIDogbnVsbElkZW50aWZpZXIoKQogICAgICwgZW1wdHlJ
ZGVudGlmaWVyKElkZW50aWZpZXI6OkVtcHR5SWRlbnRpZmllcikKLSAgICAsIHVuZGVyc2NvcmVQ
cm90byhnbG9iYWxEYXRhLCAiX19wcm90b19fIikKLSAgICAsIHRoaXNJZGVudGlmaWVyKGdsb2Jh
bERhdGEsICJ0aGlzIikKLSAgICAsIHVzZVN0cmljdElkZW50aWZpZXIoZ2xvYmFsRGF0YSwgInVz
ZSBzdHJpY3QiKQorICAgICwgdW5kZXJzY29yZVByb3RvKHZtLCAiX19wcm90b19fIikKKyAgICAs
IHRoaXNJZGVudGlmaWVyKHZtLCAidGhpcyIpCisgICAgLCB1c2VTdHJpY3RJZGVudGlmaWVyKHZt
LCAidXNlIHN0cmljdCIpCiAgICAgSlNDX0NPTU1PTl9JREVOVElGSUVSU19FQUNIX0tFWVdPUkQo
SU5JVElBTElaRV9LRVlXT1JEKQogICAgIEpTQ19DT01NT05fSURFTlRJRklFUlNfRUFDSF9QUk9Q
RVJUWV9OQU1FKElOSVRJQUxJWkVfUFJPUEVSVFlfTkFNRSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAkocmV2aXNpb24g
MTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmll
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDggKzE2MSw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIGNsYXNzIENvbW1vbklkZW50aWZpZXJzIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQ29tbW9uSWRlbnRpZmllcnMpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwcml2
YXRlOgotICAgICAgICBDb21tb25JZGVudGlmaWVycyhKU0dsb2JhbERhdGEqKTsKLSAgICAgICAg
ZnJpZW5kIGNsYXNzIEpTR2xvYmFsRGF0YTsKKyAgICAgICAgQ29tbW9uSWRlbnRpZmllcnMoVk0q
KTsKKyAgICAgICAgZnJpZW5kIGNsYXNzIFZNOwogCiAgICAgcHVibGljOgogICAgICAgICBjb25z
dCBJZGVudGlmaWVyIG51bGxJZGVudGlmaWVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3b3JraW5nIGNv
cHkpCkBAIC03OCw3ICs3OCw3IEBAIEFMV0FZU19JTkxJTkUgRXhlY1N0YXRlKiBhcml0eUNoZWNr
Rm9yKEUKIGlubGluZSBib29sIG9wSW4oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHByb3BOYW1l
LCBKU1ZhbHVlIGJhc2VWYWwpCiB7CiAgICAgaWYgKCFiYXNlVmFsLmlzT2JqZWN0KCkpIHsKLSAg
ICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZUludmFsaWRQYXJhbUVy
cm9yKGV4ZWMsICJpbiIsIGJhc2VWYWwpOworICAgICAgICBleGVjLT52bSgpLmV4Y2VwdGlvbiA9
IGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKGV4ZWMsICJpbiIsIGJhc2VWYWwpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC05Miw3ICs5Miw3IEBAIGlubGluZSBib29sIG9wSW4o
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHUKICAgICAgICAgcmV0dXJuIGJhc2VPYmotPmhhc1Byb3Bl
cnR5KGV4ZWMsIGpzQ2FzdDxOYW1lSW5zdGFuY2UqPihwcm9wTmFtZS5hc0NlbGwoKSktPnByaXZh
dGVOYW1lKCkpOwogCiAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShleGVjLCBwcm9wTmFtZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCkuZXhj
ZXB0aW9uKQorICAgIGlmIChleGVjLT52bSgpLmV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIHJldHVybiBiYXNlT2JqLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eSk7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxl
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiBib29sIGNoZWNrU3ludGF4KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291
cmNlLCBKU1ZhbHVlKiByZXR1cm5lZEV4Y2VwdGlvbikKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKLSAgICBSRUxFQVNFX0FTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuaWRlbnRpZmll
clRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOworICAg
IFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuaWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVhZERh
dGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOwogCiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUq
IHByb2dyYW0gPSBQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMsIHNvdXJjZSk7CiAgICAg
SlNPYmplY3QqIGVycm9yID0gcHJvZ3JhbS0+Y2hlY2tTeW50YXgoZXhlYyk7CkBAIC01NSwxNyAr
NTUsMTcgQEAgYm9vbCBjaGVja1N5bnRheChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IAogSlNWYWx1
ZSBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNW
YWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUqIHJldHVybmVkRXhjZXB0aW9uKQogewogICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEo
KS5pZGVudGlmaWVyVGFibGUgPT0gd3RmVGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFi
bGUoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWMtPmdsb2JhbERhdGEoKS5pc0NvbGxlY3Rv
ckJ1c3koKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5pZGVudGlmaWVyVGFibGUg
PT0gd3RmVGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSk7CisgICAgUkVMRUFT
RV9BU1NFUlQoIWV4ZWMtPnZtKCkuaXNDb2xsZWN0b3JCdXN5KCkpOwogCiAgICAgQ29kZVByb2Zp
bGluZyBwcm9maWxlKHNvdXJjZSk7CiAKICAgICBQcm9ncmFtRXhlY3V0YWJsZSogcHJvZ3JhbSA9
IFByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYywgc291cmNlKTsKICAgICBpZiAoIXByb2dy
YW0pIHsKICAgICAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKQotICAgICAgICAgICAgKnJldHVy
bmVkRXhjZXB0aW9uID0gZXhlYy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbjsKKyAgICAgICAgICAg
ICpyZXR1cm5lZEV4Y2VwdGlvbiA9IGV4ZWMtPnZtKCkuZXhjZXB0aW9uOwogCi0gICAgICAgIGV4
ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBKU1ZhbHVlKCk7CisgICAgICAgIGV4ZWMtPnZt
KCkuZXhjZXB0aW9uID0gSlNWYWx1ZSgpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0
ZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsOSAr
ODEsOSBAQCBEYXRlQ29uc3RydWN0b3I6OkRhdGVDb25zdHJ1Y3RvcihKU0dsb2JhCiAKIHZvaWQg
RGF0ZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIERhdGVQcm90
b3R5cGUqIGRhdGVQcm90b3R5cGUpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+
Z2xvYmFsRGF0YSgpLCBkYXRlUHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKTsKLSAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIGRhdGVQcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5n
bG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDcpLCBS
ZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZXhlYy0+dm0oKSwgZGF0ZVByb3RvdHlwZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSk7Cisg
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLnByb3RvdHlwZSwgZGF0ZVByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwg
UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDcpLCBSZWFkT25seSB8IERvbnRF
bnVtIHwgRG9udERlbGV0ZSk7CiB9CiAKIGJvb2wgRGF0ZUNvbnN0cnVjdG9yOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCAmc2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtNDAsOSArNDAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KIAogICAgIHBy
b3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5j
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUlu
c3RhbmNlLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGF0ZUluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMjIgKzM1LDIyIEBA
IG5hbWVzcGFjZSBKU0MgewogY29uc3QgQ2xhc3NJbmZvIERhdGVJbnN0YW5jZTo6c19pbmZvID0g
eyJEYXRlIiwgJkpTV3JhcHBlck9iamVjdDo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKERhdGVJbnN0YW5jZSl9OwogCiBEYXRlSW5zdGFuY2U6OkRhdGVJbnN0YW5jZShFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogSlNXcmFwcGVyT2JqZWN0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKQorICAgIDogSlNXcmFwcGVyT2JqZWN0KGV4ZWMt
PnZtKCksIHN0cnVjdHVyZSkKIHsKIH0KIAotdm9pZCBEYXRlSW5zdGFuY2U6OmZpbmlzaENyZWF0
aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgRGF0ZUluc3RhbmNlOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7
CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cygmc19p
bmZvKSk7Ci0gICAgc2V0SW50ZXJuYWxWYWx1ZShnbG9iYWxEYXRhLCBqc05hTigpKTsKKyAgICBz
ZXRJbnRlcm5hbFZhbHVlKHZtLCBqc05hTigpKTsKIH0KIAotdm9pZCBEYXRlSW5zdGFuY2U6OmZp
bmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgZG91YmxlIHRpbWUpCit2b2lk
IERhdGVJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBkb3VibGUgdGltZSkKIHsKLSAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLSAgICBzZXRJbnRlcm5h
bFZhbHVlKGdsb2JhbERhdGEsIGpzTnVtYmVyKHRpbWVDbGlwKHRpbWUpKSk7CisgICAgc2V0SW50
ZXJuYWxWYWx1ZSh2bSwganNOdW1iZXIodGltZUNsaXAodGltZSkpKTsKIH0KIAogdm9pZCBEYXRl
SW5zdGFuY2U6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQpAQCAtNjUsNyArNjUsNyBAQCBjb25zdCBH
cmVnb3JpYW5EYXRlVGltZSogRGF0ZUluc3RhbmNlOjpjCiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgaWYgKCFtX2RhdGEpCi0gICAgICAgIG1fZGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5kYXRl
SW5zdGFuY2VDYWNoZS5hZGQobWlsbGkpOworICAgICAgICBtX2RhdGEgPSBleGVjLT52bSgpLmRh
dGVJbnN0YW5jZUNhY2hlLmFkZChtaWxsaSk7CiAKICAgICBpZiAobV9kYXRhLT5tX2dyZWdvcmlh
bkRhdGVUaW1lQ2FjaGVkRm9yTVMgIT0gbWlsbGkpIHsKICAgICAgICAgbXNUb0dyZWdvcmlhbkRh
dGVUaW1lKGV4ZWMsIG1pbGxpLCBmYWxzZSwgbV9kYXRhLT5tX2NhY2hlZEdyZWdvcmlhbkRhdGVU
aW1lKTsKQEAgLTgxLDcgKzgxLDcgQEAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIERhdGVJbnN0
YW5jZTo6YwogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICghbV9kYXRhKQotICAgICAgICBt
X2RhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCkuZGF0ZUluc3RhbmNlQ2FjaGUuYWRkKG1pbGxpKTsK
KyAgICAgICAgbV9kYXRhID0gZXhlYy0+dm0oKS5kYXRlSW5zdGFuY2VDYWNoZS5hZGQobWlsbGkp
OwogCiAgICAgaWYgKG1fZGF0YS0+bV9ncmVnb3JpYW5EYXRlVGltZVVUQ0NhY2hlZEZvck1TICE9
IG1pbGxpKSB7CiAgICAgICAgIG1zVG9HcmVnb3JpYW5EYXRlVGltZShleGVjLCBtaWxsaSwgdHJ1
ZSwgbV9kYXRhLT5tX2NhY2hlZEdyZWdvcmlhbkRhdGVUaW1lVVRDKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5oCShyZXZpc2lvbiAxNDg2NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBEYXRl
SW5zdGFuY2UgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKICAgICBwcm90ZWN0ZWQ6CiAgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIERhdGVJbnN0YW5jZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUq
KTsKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmKTsKLSAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmLCBkb3Vi
bGUpOworICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBkb3VibGUpOwogCiAgICAgICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgCkBAIC0zOSwxNCArMzksMTQgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBEYXRlSW5zdGFuY2UqIGNyZWF0ZShFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBkb3VibGUgZGF0ZSkKICAgICAgICAgewogICAg
ICAgICAgICAgRGF0ZUluc3RhbmNlKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPERhdGVJbnN0YW5jZT4oKmV4ZWMtPmhlYXAoKSkpIERhdGVJbnN0YW5jZShleGVjLCBzdHJ1
Y3R1cmUpOwotICAgICAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZGF0ZSk7CisgICAgICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oZXhl
Yy0+dm0oKSwgZGF0ZSk7CiAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgICAgIH0K
IAogICAgICAgICBzdGF0aWMgRGF0ZUluc3RhbmNlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgewogICAgICAgICAgICAgRGF0ZUluc3RhbmNl
KiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPERhdGVJbnN0YW5jZT4oKmV4
ZWMtPmhlYXAoKSkpIERhdGVJbnN0YW5jZShleGVjLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAg
aW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgICAg
ICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAgICAgICAgICAgICByZXR1
cm4gaW5zdGFuY2U7CiAgICAgICAgIH0KIApAQCAtNjgsOSArNjgsOSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIHJldHVybiBjYWxjdWxhdGVHcmVnb3JpYW5EYXRlVGltZVVUQyhleGVj
KTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQorICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
dHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGds
b2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3Bw
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRl
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA5LDcgKzUwOSw3IEBAIERhdGVQcm90
b3R5cGU6OkRhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiAKIAogdm9pZCBEYXRlUHJvdG90eXBlOjpm
aW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KikKIHsKLSAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKGV4ZWMtPnZtKCkpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiAK
ICAgICAvLyBUaGUgY29uc3RydWN0b3Igd2lsbCBiZSBhZGRlZCBsYXRlciwgYWZ0ZXIgRGF0ZUNv
bnN0cnVjdG9yIGhhcyBiZWVuIGJ1aWx0LgpAQCAtODgyLDcgKzg4Miw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIAogICAgIGRvdWJsZSBtaWxsaSA9IHRpbWVD
bGlwKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKTsKICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzTnVtYmVyKG1pbGxpKTsKLSAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShl
eGVjLT5nbG9iYWxEYXRhKCksIHJlc3VsdCk7CisgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFs
VmFsdWUoZXhlYy0+dm0oKSwgcmVzdWx0KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiB9CiAKQEAgLTg5Nyw3ICs4OTcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgc2V0
TmV3VmFsdWVGcm9tVGltCiAgICAgCiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkgfHwg
c3RkOjppc25hbihtaWxsaSkpIHsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc05hTigpOwot
ICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCks
IHJlc3VsdCk7CisgICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPnZt
KCksIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAg
ICB9CiAgICAgIApAQCAtOTE0LDEyICs5MTQsMTIgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHNl
dE5ld1ZhbHVlRnJvbVRpbQogICAgIGdyZWdvcmlhbkRhdGVUaW1lLmNvcHlGcm9tKCpvdGhlcik7
CiAgICAgaWYgKCFmaWxsU3RydWN0dXJlc1VzaW5nVGltZUFyZ3MoZXhlYywgbnVtQXJnc1RvVXNl
LCAmbXMsICZncmVnb3JpYW5EYXRlVGltZSkpIHsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c05hTigpOwotICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9i
YWxEYXRhKCksIHJlc3VsdCk7CisgICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVl
KGV4ZWMtPnZtKCksIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKICAgICB9IAogICAgIAogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZ3JlZ29y
aWFuRGF0ZVRpbWVUb01TKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lLCBtcywgaW5wdXRJc1VUQykp
OwotICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
cmVzdWx0KTsKKyAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT52bSgpLCBy
ZXN1bHQpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApAQCAtOTMy
LDcgKzkzMiw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBzZXROZXdWYWx1ZUZyb21EYXQKICAg
ICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsK
ICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgewogICAgICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzTmFOKCk7Ci0gICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgcmVzdWx0KTsKKyAgICAgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFs
VmFsdWUoZXhlYy0+dm0oKSwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwogICAgIH0gICAgICAKICAgICAKQEAgLTk1NCwxMiArOTU0LDEyIEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBzZXROZXdWYWx1ZUZyb21EYXQKICAgICAKICAgICBpZiAoIWZpbGxT
dHJ1Y3R1cmVzVXNpbmdEYXRlQXJncyhleGVjLCBudW1BcmdzVG9Vc2UsICZtcywgJmdyZWdvcmlh
bkRhdGVUaW1lKSkgewogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTmFOKCk7Ci0gICAgICAg
IHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcmVzdWx0
KTsKKyAgICAgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+dm0oKSwgcmVz
dWx0KTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0gCiAg
ICAgICAgICAgIAogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRp
bWVUb01TKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lLCBtcywgaW5wdXRJc1VUQykpOwotICAgIHRo
aXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcmVzdWx0KTsK
KyAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT52bSgpLCByZXN1bHQpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApAQCAtMTA1Niw3ICsxMDU2
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogICAgIERhdGVJ
bnN0YW5jZSogdGhpc0RhdGVPYmogPSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpOwogICAgIGlm
ICghZXhlYy0+YXJndW1lbnRDb3VudCgpKSB7IAogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TmFOKCk7Ci0gICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgcmVzdWx0KTsKKyAgICAgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUo
ZXhlYy0+dm0oKSwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOwogICAgIH0KIApAQCAtMTA3OCwxMyArMTA3OCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAgICAgZG91YmxlIHllYXIgPSBleGVjLT5hcmd1bWVudCgw
KS50b0ludGVnZXJQcmVzZXJ2ZU5hTihleGVjKTsKICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUoeWVh
cikpIHsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc05hTigpOwotICAgICAgICB0aGlzRGF0
ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIHJlc3VsdCk7CisgICAg
ICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPnZtKCksIHJlc3VsdCk7CiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CiAKICAgICBncmVn
b3JpYW5EYXRlVGltZS5zZXRZZWFyKHRvSW50MzIoKHllYXIgPj0gMCAmJiB5ZWFyIDw9IDk5KSA/
ICh5ZWFyICsgMTkwMCkgOiB5ZWFyKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihn
cmVnb3JpYW5EYXRlVGltZVRvTVMoZXhlYywgZ3JlZ29yaWFuRGF0ZVRpbWUsIG1zLCBmYWxzZSkp
OwotICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
cmVzdWx0KTsKKyAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT52bSgpLCBy
ZXN1bHQpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApAQCAtMTEx
MSw3ICsxMTExLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSk7CiAgICAgCi0gICAgSlNWYWx1ZSB0b0lTT1ZhbHVlID0gb2JqZWN0LT5n
ZXQoZXhlYywgZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPnRvSVNPU3RyaW5nKTsK
KyAgICBKU1ZhbHVlIHRvSVNPVmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBleGVjLT52bSgpLnBy
b3BlcnR5TmFtZXMtPnRvSVNPU3RyaW5nKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5oCShyZXZpc2lvbiAx
NDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgICAgICB9
CiAKICAgICBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
cnJvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJy
b3IuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FcnJvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDM3ICs0NywzNyBAQCBzdGF0aWMgY29u
c3QgY2hhciogc291cmNlVVJMUHJvcGVydHlOYW1lCiBKU09iamVjdCogY3JlYXRlRXJyb3IoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAg
IEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpj
cmVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+ZXJyb3JTdHJ1
Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShnbG9i
YWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdC0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7
CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVFdmFsRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIEFTU0VSVCghbWVzc2FnZS5pc0Vt
cHR5KCkpOwotICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT5n
bG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+ZXZhbEVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JT
dHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShn
bG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdC0+ZXZhbEVycm9yQ29uc3RydWN0b3IoKS0+
ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVSYW5nZUVy
cm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
IHsKICAgICBBU1NFUlQoIW1lc3NhZ2UuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gRXJyb3JJbnN0
YW5jZTo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPnJh
bmdlRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKKyAgICBy
ZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2Jq
ZWN0LT5yYW5nZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7
CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVSZWZlcmVuY2VFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgQVNTRVJUKCFtZXNzYWdl
LmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShnbG9iYWxPYmpl
Y3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5yZWZlcmVuY2VFcnJvckNvbnN0cnVjdG9y
KCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOworICAgIHJldHVybiBFcnJvckluc3RhbmNl
OjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QtPnJlZmVyZW5jZUVycm9y
Q29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CiB9CiAKIEpTT2JqZWN0
KiBjcmVhdGVTeW50YXhFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgQVNTRVJUKCFtZXNzYWdlLmlzRW1wdHkoKSk7Ci0gICAg
cmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwg
Z2xvYmFsT2JqZWN0LT5zeW50YXhFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCks
IG1lc3NhZ2UpOworICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0
LT52bSgpLCBnbG9iYWxPYmplY3QtPnN5bnRheEVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1
Y3R1cmUoKSwgbWVzc2FnZSk7CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVUeXBlRXJyb3IoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIEFT
U0VSVCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVh
dGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+dHlwZUVycm9yQ29u
c3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAgcmV0dXJuIEVycm9y
SW5zdGFuY2U6OmNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdC0+dHlwZUVy
cm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CiB9CiAKIEpTT2Jq
ZWN0KiBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQpAQCAtODgsNyArODgsNyBAQCBKU09iamVjdCogY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoCiBKU09iamVjdCogY3JlYXRlVVJJRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIEFTU0VSVCghbWVzc2FnZS5p
c0VtcHR5KCkpOwotICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0
LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+VVJJRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJv
clN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKKyAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRl
KGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5VUklFcnJvckNvbnN0cnVjdG9yKCkt
PmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOwogfQogCiBKU09iamVjdCogY3JlYXRlRXJyb3Io
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCkBAIC0xMzMsMTUgKzEzMywx
NSBAQCBKU09iamVjdCogY3JlYXRlVVJJRXJyb3IoRXhlY1N0YXRlKiBleGVjCiAKIEpTT2JqZWN0
KiBhZGRFcnJvckluZm8oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiBlcnJvciwgaW50
IGxpbmUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEgPSAmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCk7CisgICAgVk0qIHZtID0gJmNhbGxG
cmFtZS0+dm0oKTsKICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCA9IHNvdXJjZS5wcm92aWRl
cigpLT51cmwoKTsKIAogICAgIGlmIChsaW5lICE9IC0xKQotICAgICAgICBlcnJvci0+cHV0RGly
ZWN0KCpnbG9iYWxEYXRhLCBJZGVudGlmaWVyKGdsb2JhbERhdGEsIGxpbmVQcm9wZXJ0eU5hbWUp
LCBqc051bWJlcihsaW5lKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKKyAgICAgICAgZXJyb3It
PnB1dERpcmVjdCgqdm0sIElkZW50aWZpZXIodm0sIGxpbmVQcm9wZXJ0eU5hbWUpLCBqc051bWJl
cihsaW5lKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKICAgICBpZiAoIXNvdXJjZVVSTC5pc051
bGwoKSkKLSAgICAgICAgZXJyb3ItPnB1dERpcmVjdCgqZ2xvYmFsRGF0YSwgSWRlbnRpZmllcihn
bG9iYWxEYXRhLCBzb3VyY2VVUkxQcm9wZXJ0eU5hbWUpLCBqc1N0cmluZyhnbG9iYWxEYXRhLCBz
b3VyY2VVUkwpLCBSZWFkT25seSB8IERvbnREZWxldGUpOworICAgICAgICBlcnJvci0+cHV0RGly
ZWN0KCp2bSwgSWRlbnRpZmllcih2bSwgc291cmNlVVJMUHJvcGVydHlOYW1lKSwganNTdHJpbmco
dm0sIHNvdXJjZVVSTCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CiAKLSAgICBnbG9iYWxEYXRh
LT5pbnRlcnByZXRlci0+YWRkU3RhY2tUcmFjZUlmTmVjZXNzYXJ5KGNhbGxGcmFtZSwgZXJyb3Ip
OworICAgIHZtLT5pbnRlcnByZXRlci0+YWRkU3RhY2tUcmFjZUlmTmVjZXNzYXJ5KGNhbGxGcmFt
ZSwgZXJyb3IpOwogCiAgICAgcmV0dXJuIGVycm9yOwogfQpAQCAtMTU2LDE0ICsxNTYsMTQgQEAg
Ym9vbCBoYXNFcnJvckluZm8oRXhlY1N0YXRlKiBleGVjLCBKU09iagogSlNWYWx1ZSB0aHJvd0Vy
cm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBlcnJvcikKIHsKICAgICBJbnRlcnByZXRlcjo6
YWRkU3RhY2tUcmFjZUlmTmVjZXNzYXJ5KGV4ZWMsIGVycm9yKTsKLSAgICBleGVjLT5nbG9iYWxE
YXRhKCkuZXhjZXB0aW9uID0gZXJyb3I7CisgICAgZXhlYy0+dm0oKS5leGNlcHRpb24gPSBlcnJv
cjsKICAgICByZXR1cm4gZXJyb3I7CiB9CiAKIEpTT2JqZWN0KiB0aHJvd0Vycm9yKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGVycm9yKQogewogICAgIEludGVycHJldGVyOjphZGRTdGFja1Ry
YWNlSWZOZWNlc3NhcnkoZXhlYywgZXJyb3IpOwotICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5leGNl
cHRpb24gPSBlcnJvcjsKKyAgICBleGVjLT52bSgpLmV4Y2VwdGlvbiA9IGVycm9yOwogICAgIHJl
dHVybiBlcnJvcjsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJy
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5o
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIGNsYXNzIEV4ZWNTdGF0ZTsKLSAgICBjbGFzcyBKU0dsb2JhbERhdGE7CisgICAgY2xhc3Mg
Vk07CiAgICAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiAgICAgY2xhc3MgSlNPYmplY3Q7CiAgICAg
Y2xhc3MgU291cmNlQ29kZTsKQEAgLTg5LDcgKzg5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHN0YXRpYyBTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIFN0cmljdE1v
ZGVUeXBlRXJyb3JGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24+KCpleGVjLT5oZWFwKCkpKSBTdHJpY3RNb2Rl
VHlwZUVycm9yRnVuY3Rpb24oZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIG1lc3NhZ2UpOwotICAg
ICAgICAgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgU3Ry
aW5nKCkpOworICAgICAgICAgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCks
IFN0cmluZygpKTsKICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbjsKICAgICAgICAgfQogICAg
IApAQCAtMTE5LDkgKzExOSw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpIAogICAgICAgICB7IAotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAKKyAgICAgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7IAogICAgICAgICB9CiAKICAg
ICBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25z
dHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSwxMCArMzksMTAgQEAgRXJyb3JDb25zdHJ1Y3Rvcjo6RXJyb3JDb25zdHJ1Y3RvcihKU0dsbwog
CiB2b2lkIEVycm9yQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
RXJyb3JQcm90b3R5cGUqIGVycm9yUHJvdG90eXBlKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXJyb3JQcm90b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFz
c05hbWUpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCksIGVycm9yUHJvdG90
eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKTsKICAgICAvLyBFQ01BIDE1LjExLjMuMSBFcnJv
ci5wcm90b3R5cGUKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxE
YXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIGVycm9yUHJvdG90eXBlLCBE
b250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
LCBqc051bWJlcigxKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5wcm90b3R5cGUsIGVycm9yUHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFk
T25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSksIERvbnREZWxldGUgfCBSZWFkT25s
eSB8IERvbnRFbnVtKTsKIH0KIAogLy8gRUNNQSAxNS45LjMKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE0ODY1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtNDEsOSArNDEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCisgICAgICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAKICAgICAgICAgeyAKLSAgICAgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCisgICAgICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAKICAgICAg
ICAgfQogCiAgICAgcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXJyb3JJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw4ICszMCw4IEBAIEFTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKEVycm9ySW5zdGEK
IAogY29uc3QgQ2xhc3NJbmZvIEVycm9ySW5zdGFuY2U6OnNfaW5mbyA9IHsgIkVycm9yIiwgJkpT
Tm9uRmluYWxPYmplY3Q6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShFcnJvcklu
c3RhbmNlKSB9OwogCi1FcnJvckluc3RhbmNlOjpFcnJvckluc3RhbmNlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBKU05vbkZpbmFsT2JqZWN0
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKK0Vycm9ySW5zdGFuY2U6OkVycm9ySW5zdGFuY2UoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEpTTm9uRmluYWxPYmplY3Qodm0sIHN0
cnVjdHVyZSkKICAgICAsIG1fYXBwZW5kU291cmNlVG9NZXNzYWdlKGZhbHNlKQogewogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAkocmV2
aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0
YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMSArMzEsMjEgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKEVycm9ySW5zdGFuY2VUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oRXJyb3JJbnN0YW5jZVR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgRXJyb3JJbnN0YW5jZSog
Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKKyAgICAgICAgc3RhdGljIEVycm9ySW5zdGFuY2UqIGNyZWF0
ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEVycm9ySW5zdGFuY2UqIGluc3RhbmNlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8RXJyb3JJbnN0YW5jZT4oZ2xvYmFsRGF0YS5oZWFwKSkgRXJyb3JJ
bnN0YW5jZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaW5zdGFuY2UtPmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIG1lc3NhZ2UpOworICAgICAgICAgICAgRXJyb3JJbnN0
YW5jZSogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxFcnJvckluc3RhbmNl
Pih2bS5oZWFwKSkgRXJyb3JJbnN0YW5jZSh2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIGlu
c3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwgbWVzc2FnZSk7CiAgICAgICAgICAgICByZXR1cm4g
aW5zdGFuY2U7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgRXJyb3JJbnN0YW5jZSogY3Jl
YXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTVmFsdWUgbWVzc2Fn
ZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZShleGVjLT5nbG9iYWxEYXRh
KCksIHN0cnVjdHVyZSwgbWVzc2FnZS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBtZXNzYWdl
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRl
KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgbWVzc2FnZS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkg
OiBtZXNzYWdlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBib29sIGFwcGVuZFNvdXJjZVRvTWVzc2FnZSgpIHsgcmV0dXJuIG1fYXBwZW5kU291cmNl
VG9NZXNzYWdlOyB9CkBAIC01MywxNCArNTMsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgY2xlYXJBcHBlbmRTb3VyY2VUb01lc3NhZ2UoKSB7IG1fYXBwZW5kU291cmNlVG9NZXNz
YWdlID0gZmFsc2U7IH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgZXhwbGljaXQgRXJyb3JJ
bnN0YW5jZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgZXhwbGljaXQgRXJy
b3JJbnN0YW5jZShWTSYsIFN0cnVjdHVyZSopOwogCi0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCisgICAg
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwor
ICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICAgICAgQVNTRVJU
KGluaGVyaXRzKCZzX2luZm8pKTsKICAgICAgICAgICAgIGlmICghbWVzc2FnZS5pc051bGwoKSkK
LSAgICAgICAgICAgICAgICBwdXREaXJlY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5wcm9wZXJ0
eU5hbWVzLT5tZXNzYWdlLCBqc1N0cmluZygmZ2xvYmFsRGF0YSwgbWVzc2FnZSksIERvbnRFbnVt
KTsKKyAgICAgICAgICAgICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm1lc3Nh
Z2UsIGpzU3RyaW5nKCZ2bSwgbWVzc2FnZSksIERvbnRFbnVtKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGJvb2wgbV9hcHBlbmRTb3VyY2VUb01lc3NhZ2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxNDg2NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDE1ICs1MCwxNSBAQCBjb25zdCBDbGFzc0luZm8gRXJyb3JQcm90
b3R5cGU6OnNfaW5mbyA9CiAqLwogCiBFcnJvclByb3RvdHlwZTo6RXJyb3JQcm90b3R5cGUoRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IEVycm9ySW5zdGFuY2Uo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpCisgICAgOiBFcnJvckluc3RhbmNlKGV4ZWMt
PnZtKCksIHN0cnVjdHVyZSkKIHsKIH0KIAogdm9pZCBFcnJvclByb3RvdHlwZTo6ZmluaXNoQ3Jl
YXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCopCiB7Ci0gICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCAiIik7CisgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZXhlYy0+dm0oKSwgIiIpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0g
ICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm5h
bWUsIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJFcnJvciIp
KSksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBTdHJpbmcoQVNDSUlMaXRlcmFs
KCJFcnJvciIpKSksIERvbnRFbnVtKTsKIH0KIAogYm9vbCBFcnJvclByb3RvdHlwZTo6Z2V0T3du
UHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QgJnNsb3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDE0ODY1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDkgKzQwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAg
ICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oRXJyb3JJbnN0YW5jZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAg
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhFcnJvckluc3RhbmNlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAJKHJldmlzaW9uIDE0ODY1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIEpTVmFsdWUgVGVybWluYXRlZEV4ZWN1
dGlvbkVycm9yOjpkZWZhdWwKICAgICByZXR1cm4gSlNWYWx1ZShRTmFOKTsKIH0KIAotSlNPYmpl
Y3QqIGNyZWF0ZVRlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhKQorSlNPYmplY3QqIGNyZWF0ZVRlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oVk0q
IHZtKQogewotICAgIHJldHVybiBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZSgqZ2xv
YmFsRGF0YSk7CisgICAgcmV0dXJuIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlKCp2
bSk7CiB9CiAKIGJvb2wgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTT2JqZWN0KiBv
YmplY3QpCkBAIC0xNDQsNyArMTQ0LDcgQEAgSlNPYmplY3QqIHRocm93U3RhY2tPdmVyZmxvd0Vy
cm9yKEV4ZWNTdAogSlNPYmplY3QqIHRocm93VGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSW50ZXJwcmV0ZXI6OkVycm9ySGFuZGxpbmdNb2RlIG1v
ZGUoZXhlYyk7Ci0gICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVGVybWluYXRlZEV4
ZWN1dGlvbkV4Y2VwdGlvbigmZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgY3JlYXRlVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbigmZXhlYy0+dm0o
KSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgJKHJldmlzaW9uIDE0ODY1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotSlNPYmplY3Qq
IGNyZWF0ZVRlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNHbG9iYWxEYXRhKik7CitKU09i
amVjdCogY3JlYXRlVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihWTSopOwogYm9vbCBpc1Rl
cm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNPYmplY3QqKTsKIEpTX0VYUE9SVF9QUklWQVRF
IGJvb2wgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTVmFsdWUpOwogCkBAIC01NCw4
ICs1NCw4IEBAIEpTT2JqZWN0KiB0aHJvd1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHQKIAogY2xh
c3MgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qgewog
cHJpdmF0ZToKLSAgICBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3IoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQotICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0
YS50ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgVGVybWluYXRl
ZEV4ZWN1dGlvbkVycm9yKFZNJiB2bSkKKyAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KHZtLCB2
bS50ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgewogICAgIH0K
IApAQCAtNjQsMTYgKzY0LDE2IEBAIHByaXZhdGU6CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05v
bkZpbmFsT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9y
KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIHN0YXRpYyBUZXJtaW5hdGVk
RXhlY3V0aW9uRXJyb3IqIGNyZWF0ZShWTSYgdm0pCiAgICAgewotICAgICAgICBUZXJtaW5hdGVk
RXhlY3V0aW9uRXJyb3IqIGVycm9yID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VGVybWlu
YXRlZEV4ZWN1dGlvbkVycm9yPihnbG9iYWxEYXRhLmhlYXApKSBUZXJtaW5hdGVkRXhlY3V0aW9u
RXJyb3IoZ2xvYmFsRGF0YSk7Ci0gICAgICAgIGVycm9yLT5maW5pc2hDcmVhdGlvbihnbG9iYWxE
YXRhKTsKKyAgICAgICAgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yKiBlcnJvciA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcj4odm0uaGVhcCkpIFRl
cm1pbmF0ZWRFeGVjdXRpb25FcnJvcih2bSk7CisgICAgICAgIGVycm9yLT5maW5pc2hDcmVhdGlv
bih2bSk7CiAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICB9CiAKLSAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgSlNfRVhQ
T1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05NCwxNCArOTQsMTQgQEAgSW50cmluc2ljIE5hdGl2ZUV4ZWN1dGFibGU6OmludHJpbnNpYygp
IAogI2lmIEVOQUJMRShKSVQpCiAvLyBVdGlsaXR5IG1ldGhvZCB1c2VkIGZvciBqZXR0aXNvbmlu
ZyBjb2RlIGJsb2Nrcy4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgdm9pZCBqZXR0aXNv
bkNvZGVCbG9jayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE93blB0cjxUPiYgY29kZUJsb2Nr
KQorc3RhdGljIHZvaWQgamV0dGlzb25Db2RlQmxvY2soVk0mIHZtLCBPd25QdHI8VD4mIGNvZGVC
bG9jaykKIHsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+
Z2V0SklUVHlwZSgpKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAg
ICAgT3duUHRyPFQ+IGNvZGVCbG9ja1RvSmV0dGlzb24gPSBjb2RlQmxvY2sucmVsZWFzZSgpOwog
ICAgIGNvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8VD4oY29kZUJsb2NrVG9KZXR0aXNv
bi0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwogICAgIGNvZGVCbG9ja1RvSmV0dGlzb24tPnVubGlu
a0luY29taW5nQ2FsbHMoKTsKLSAgICBnbG9iYWxEYXRhLmhlYXAuamV0dGlzb25ERkdDb2RlQmxv
Y2soc3RhdGljX3BvaW50ZXJfY2FzdDxDb2RlQmxvY2s+KGNvZGVCbG9ja1RvSmV0dGlzb24ucmVs
ZWFzZSgpKSk7CisgICAgdm0uaGVhcC5qZXR0aXNvbkRGR0NvZGVCbG9jayhzdGF0aWNfcG9pbnRl
cl9jYXN0PENvZGVCbG9jaz4oY29kZUJsb2NrVG9KZXR0aXNvbi5yZWxlYXNlKCkpKTsKIH0KICNl
bmRpZgogCkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpkZXN0cm95
KEpTQ2VsbCogYwogY29uc3QgQ2xhc3NJbmZvIEV2YWxFeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJF
dmFsRXhlY3V0YWJsZSIsICZTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8sIDAsIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoRXZhbEV4ZWN1dGFibGUpIH07CiAKIEV2YWxFeGVjdXRhYmxlOjpFdmFsRXhl
Y3V0YWJsZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBp
blN0cmljdENvbnRleHQpCi0gICAgOiBTY3JpcHRFeGVjdXRhYmxlKGV4ZWMtPmdsb2JhbERhdGEo
KS5ldmFsRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgZXhlYywgc291cmNlLCBpblN0cmljdENv
bnRleHQpCisgICAgOiBTY3JpcHRFeGVjdXRhYmxlKGV4ZWMtPnZtKCkuZXZhbEV4ZWN1dGFibGVT
dHJ1Y3R1cmUuZ2V0KCksIGV4ZWMsIHNvdXJjZSwgaW5TdHJpY3RDb250ZXh0KQogewogfQogCkBA
IC0xMjksNyArMTI5LDcgQEAgdm9pZCBFdmFsRXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNl
bAogY29uc3QgQ2xhc3NJbmZvIFByb2dyYW1FeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJQcm9ncmFt
RXhlY3V0YWJsZSIsICZTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoUHJvZ3JhbUV4ZWN1dGFibGUpIH07CiAKIFByb2dyYW1FeGVjdXRhYmxlOjpQcm9n
cmFtRXhlY3V0YWJsZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkK
LSAgICA6IFNjcmlwdEV4ZWN1dGFibGUoZXhlYy0+Z2xvYmFsRGF0YSgpLnByb2dyYW1FeGVjdXRh
YmxlU3RydWN0dXJlLmdldCgpLCBleGVjLCBzb3VyY2UsIGZhbHNlKQorICAgIDogU2NyaXB0RXhl
Y3V0YWJsZShleGVjLT52bSgpLnByb2dyYW1FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBleGVj
LCBzb3VyY2UsIGZhbHNlKQogewogfQogCkBAIC0xNDAsOSArMTQwLDkgQEAgdm9pZCBQcm9ncmFt
RXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIAogCiBjb25zdCBDbGFzc0luZm8gRnVuY3Rpb25F
eGVjdXRhYmxlOjpzX2luZm8gPSB7ICJGdW5jdGlvbkV4ZWN1dGFibGUiLCAmU2NyaXB0RXhlY3V0
YWJsZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEZ1bmN0aW9uRXhlY3V0YWJs
ZSkgfTsKIAotRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUsIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5z
aWduZWQgbGFzdExpbmUpCi0gICAgOiBTY3JpcHRFeGVjdXRhYmxlKGdsb2JhbERhdGEuZnVuY3Rp
b25FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBnbG9iYWxEYXRhLCBzb3VyY2UsIHVubGlua2Vk
RXhlY3V0YWJsZS0+aXNJblN0cmljdENvbnRleHQoKSkKLSAgICAsIG1fdW5saW5rZWRFeGVjdXRh
YmxlKGdsb2JhbERhdGEsIHRoaXMsIHVubGlua2VkRXhlY3V0YWJsZSkKK0Z1bmN0aW9uRXhlY3V0
YWJsZTo6RnVuY3Rpb25FeGVjdXRhYmxlKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNl
LCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlLCB1bnNpZ25l
ZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxhc3RMaW5lKQorICAgIDogU2NyaXB0RXhlY3V0YWJsZSh2
bS5mdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIHZtLCBzb3VyY2UsIHVubGlua2Vk
RXhlY3V0YWJsZS0+aXNJblN0cmljdENvbnRleHQoKSkKKyAgICAsIG1fdW5saW5rZWRFeGVjdXRh
YmxlKHZtLCB0aGlzLCB1bmxpbmtlZEV4ZWN1dGFibGUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQo
IXNvdXJjZS5pc051bGwoKSk7CiAgICAgQVNTRVJUKHNvdXJjZS5sZW5ndGgoKSk7CkBAIC0xNTcs
NyArMTU3LDcgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKgogCiBK
U09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVj
LCBKU1Njb3BlKiBzY29wZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBBU1NFUlQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOworICAgIEFTU0VSVChleGVj
LT52bSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwogICAgIEFTU0VSVCghIW1fZXZhbENvZGVCbG9j
ayk7CiAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAgICBpZiAobV9ldmFsQ29kZUJsb2NrLT5n
ZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6dG9wVGllckpJVCgpKQpAQCAtMTk2LDcgKzE5Niw3IEBA
IEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmEKICAgICBVTlVTRURfUEFS
QU0oaml0VHlwZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwogI2VuZGlmCi0g
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICAKICAgICBpZiAoISFtX2V2
YWxDb2RlQmxvY2spIHsKQEAgLTIwNSw3ICsyMDUsNyBAQCBKU09iamVjdCogRXZhbEV4ZWN1dGFi
bGU6OmNvbXBpbGVJbnRlcm5hCiAgICAgICAgIG1fZXZhbENvZGVCbG9jayA9IG5ld0NvZGVCbG9j
ay5yZWxlYXNlKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgVU5VU0VEX1BBUkFNKHNjb3BlKTsK
LSAgICAgICAgVU5VU0VEX1BBUkFNKGdsb2JhbERhdGEpOworICAgICAgICBVTlVTRURfUEFSQU0o
dm0pOwogICAgICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgICAg
IGlmICghbGV4aWNhbEdsb2JhbE9iamVjdC0+ZXZhbEVuYWJsZWQoKSkKICAgICAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUV2YWxFcnJvcihleGVjLCBsZXhpY2FsR2xvYmFs
T2JqZWN0LT5ldmFsRGlzYWJsZWRFcnJvck1lc3NhZ2UoKSkpOwpAQCAtMjE3LDcgKzIxNyw3IEBA
IEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmEKIAogICAgICAgICBPd25Q
dHI8Q29kZUJsb2NrPiBwcmV2aW91c0NvZGVCbG9jayA9IG1fZXZhbENvZGVCbG9jay5yZWxlYXNl
KCk7CiAgICAgICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkp
ID09ICFwcmV2aW91c0NvZGVCbG9jayk7Ci0gICAgICAgIG1fdW5saW5rZWRFdmFsQ29kZUJsb2Nr
LnNldCgqZ2xvYmFsRGF0YSwgdGhpcywgdW5saW5rZWRFdmFsQ29kZSk7CisgICAgICAgIG1fdW5s
aW5rZWRFdmFsQ29kZUJsb2NrLnNldCgqdm0sIHRoaXMsIHVubGlua2VkRXZhbENvZGUpOwogICAg
ICAgICBtX2V2YWxDb2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgRXZhbENvZGVCbG9jayh0aGlzLCB1
bmxpbmtlZEV2YWxDb2RlLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigp
LCBzY29wZS0+bG9jYWxEZXB0aCgpLCBwcmV2aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKICAg
ICAgICAgbV9ldmFsQ29kZUJsb2NrLT5jb3B5UG9zdFBhcnNlRGF0YUZyb21BbHRlcm5hdGl2ZSgp
OwogICAgIH0KQEAgLTIzNyw5ICsyMzcsOSBAQCBKU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNv
bXBpbGVJbnRlcm5hCiB9CiAKICNpZiBFTkFCTEUoSklUKQotdm9pZCBFdmFsRXhlY3V0YWJsZTo6
amV0dGlzb25PcHRpbWl6ZWRDb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgRXZh
bEV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZShWTSYgdm0pCiB7Ci0gICAgamV0dGlz
b25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgbV9ldmFsQ29kZUJsb2NrKTsKKyAgICBqZXR0aXNvbkNv
ZGVCbG9jayh2bSwgbV9ldmFsQ29kZUJsb2NrKTsKICAgICBtX2ppdENvZGVGb3JDYWxsID0gbV9l
dmFsQ29kZUJsb2NrLT5nZXRKSVRDb2RlKCk7CiAgICAgQVNTRVJUKCFtX2ppdENvZGVGb3JDYWxs
V2l0aEFyaXR5Q2hlY2spOwogfQpAQCAtMjc3LDkgKzI3Nyw5IEBAIHZvaWQgRXZhbEV4ZWN1dGFi
bGU6OmNsZWFyQ29kZSgpCiBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNoZWNrU3ludGF4
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBQYXJzZXJFcnJvciBlcnJvcjsKLSAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3Jh
bU5vZGUgPSBwYXJzZTxQcm9ncmFtTm9kZT4oZ2xvYmFsRGF0YSwgbV9zb3VyY2UsIDAsIElkZW50
aWZpZXIoKSwgSlNQYXJzZU5vcm1hbCwgUHJvZ3JhbU5vZGU6OmlzRnVuY3Rpb25Ob2RlID8gSlNQ
YXJzZUZ1bmN0aW9uQ29kZSA6IEpTUGFyc2VQcm9ncmFtQ29kZSwgZXJyb3IpOworICAgIFJlZlB0
cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbU5vZGUgPSBwYXJzZTxQcm9ncmFtTm9kZT4odm0sIG1fc291
cmNlLCAwLCBJZGVudGlmaWVyKCksIEpTUGFyc2VOb3JtYWwsIFByb2dyYW1Ob2RlOjppc0Z1bmN0
aW9uTm9kZSA/IEpTUGFyc2VGdW5jdGlvbkNvZGUgOiBKU1BhcnNlUHJvZ3JhbUNvZGUsIGVycm9y
KTsKICAgICBpZiAocHJvZ3JhbU5vZGUpCiAgICAgICAgIHJldHVybiAwOwogICAgIEFTU0VSVChl
cnJvci5tX3R5cGUgIT0gUGFyc2VyRXJyb3I6OkVycm9yTm9uZSk7CkBAIC0yODgsNyArMjg4LDcg
QEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjaGVja1N5bnRheAogCiBKU09iamVjdCog
UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBKU1Nj
b3BlKiBzY29wZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBSRUxFQVNFX0FTU0VS
VChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CisgICAgUkVMRUFTRV9B
U1NFUlQoZXhlYy0+dm0oKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKICAgICBBU1NFUlQoISFtX3By
b2dyYW1Db2RlQmxvY2spOwogICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAgICAgaWYgKG1fcHJv
Z3JhbUNvZGVCbG9jay0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkKQEAg
LTMzOCw5ICszMzgsOSBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRl
CiB9CiAKICNpZiBFTkFCTEUoSklUKQotdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6amV0dGlzb25P
cHRpbWl6ZWRDb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgUHJvZ3JhbUV4ZWN1
dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZShWTSYgdm0pCiB7Ci0gICAgamV0dGlzb25Db2Rl
QmxvY2soZ2xvYmFsRGF0YSwgbV9wcm9ncmFtQ29kZUJsb2NrKTsKKyAgICBqZXR0aXNvbkNvZGVC
bG9jayh2bSwgbV9wcm9ncmFtQ29kZUJsb2NrKTsKICAgICBtX2ppdENvZGVGb3JDYWxsID0gbV9w
cm9ncmFtQ29kZUJsb2NrLT5nZXRKSVRDb2RlKCk7CiAgICAgQVNTRVJUKCFtX2ppdENvZGVGb3JD
YWxsV2l0aEFyaXR5Q2hlY2spOwogfQpAQCAtMzczLDIxICszNzMsMjEgQEAgaW50IFByb2dyYW1F
eGVjdXRhYmxlOjphZGRHbG9iYWxWYXIoSlNHbAogICAgIHJldHVybiBpbmRleDsKIH0KIAotSlNP
YmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjppbml0aWFsaXplR2xvYmFsUHJvcGVydGllcyhKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1Njb3BlKiBzY29w
ZSkKK0pTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6aW5pdGlhbGl6ZUdsb2JhbFByb3BlcnRp
ZXMoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNTY29wZSogc2NvcGUpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoc2NvcGUpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBzY29wZS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoZ2xvYmFsT2JqZWN0
KTsKLSAgICBBU1NFUlQoJmdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpID09ICZnbG9iYWxEYXRh
KTsKKyAgICBBU1NFUlQoJmdsb2JhbE9iamVjdC0+dm0oKSA9PSAmdm0pOwogCiAgICAgSlNPYmpl
Y3QqIGV4Y2VwdGlvbiA9IDA7CiAgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtl
ZENvZGUgPSBnbG9iYWxPYmplY3QtPmNyZWF0ZVByb2dyYW1Db2RlQmxvY2soY2FsbEZyYW1lLCB0
aGlzLCAmZXhjZXB0aW9uKTsKICAgICBpZiAoZXhjZXB0aW9uKQogICAgICAgICByZXR1cm4gZXhj
ZXB0aW9uOwogCi0gICAgbV91bmxpbmtlZFByb2dyYW1Db2RlQmxvY2suc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHVubGlua2VkQ29kZSk7CisgICAgbV91bmxpbmtlZFByb2dyYW1Db2RlQmxvY2suc2V0
KHZtLCB0aGlzLCB1bmxpbmtlZENvZGUpOwogCi0gICAgQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6
ZXIgb3B0aW1pemVyKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCk7CisgICAgQmF0Y2hlZFRyYW5z
aXRpb25PcHRpbWl6ZXIgb3B0aW1pemVyKHZtLCBnbG9iYWxPYmplY3QpOwogCiAgICAgY29uc3Qg
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjpWYXJpYWJsZURlY2xhdGlvbnMmIHZhcmlhYmxlRGVj
bGFyYXRpb25zID0gdW5saW5rZWRDb2RlLT52YXJpYWJsZURlY2xhcmF0aW9ucygpOwogICAgIGNv
bnN0IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6RnVuY3Rpb25EZWNsYXRpb25zJiBmdW5jdGlv
bkRlY2xhcmF0aW9ucyA9IHVubGlua2VkQ29kZS0+ZnVuY3Rpb25EZWNsYXJhdGlvbnMoKTsKQEAg
LTM5OSwxMiArMzk5LDEyIEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6aW5pdGlhbGl6
ZUcKICAgICBDYWxsRnJhbWUqIGdsb2JhbEV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25EZWNsYXJhdGlvbnMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgYm9vbCBwcm9wZXJ0eURpZEV4aXN0ID0gZ2xvYmFsT2JqZWN0
LT5yZW1vdmVEaXJlY3QoZ2xvYmFsRGF0YSwgZnVuY3Rpb25EZWNsYXJhdGlvbnNbaV0uZmlyc3Qp
OyAvLyBOZXdseSBkZWNsYXJlZCBmdW5jdGlvbnMgb3ZlcndyaXRlIGV4aXN0aW5nIHByb3BlcnRp
ZXMuCisgICAgICAgIGJvb2wgcHJvcGVydHlEaWRFeGlzdCA9IGdsb2JhbE9iamVjdC0+cmVtb3Zl
RGlyZWN0KHZtLCBmdW5jdGlvbkRlY2xhcmF0aW9uc1tpXS5maXJzdCk7IC8vIE5ld2x5IGRlY2xh
cmVkIGZ1bmN0aW9ucyBvdmVyd3JpdGUgZXhpc3RpbmcgcHJvcGVydGllcy4KICAgICAgICAgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlID0gZnVu
Y3Rpb25EZWNsYXJhdGlvbnNbaV0uc2Vjb25kLmdldCgpOwotICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMsIHVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlLT5saW5rKGdsb2JhbERhdGEsIG1fc291cmNlLCBsaW5lTm8oKSwgMCksIHNjb3BlKTsKKyAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjLCB1bmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS0+bGluayh2bSwgbV9zb3VyY2UsIGxpbmVObygpLCAwKSwg
c2NvcGUpOwogICAgICAgICBpbnQgaW5kZXggPSBhZGRHbG9iYWxWYXIoZ2xvYmFsT2JqZWN0LCBm
dW5jdGlvbkRlY2xhcmF0aW9uc1tpXS5maXJzdCwgSXNWYXJpYWJsZSwKICAgICAgICAgICAgICFw
cm9wZXJ0eURpZEV4aXN0ID8gSXNGdW5jdGlvblRvU3BlY2lhbGl6ZSA6IE5vdEZ1bmN0aW9uT3JO
b3RTcGVjaWFsaXphYmxlKTsKLSAgICAgICAgZ2xvYmFsT2JqZWN0LT5yZWdpc3RlckF0KGluZGV4
KS5zZXQoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgICAgIGdsb2JhbE9i
amVjdC0+cmVnaXN0ZXJBdChpbmRleCkuc2V0KHZtLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKICAg
ICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhcmlhYmxlRGVjbGFyYXRpb25zLnNp
emUoKTsgKytpKSB7CkBAIC00NTYsNyArNDU2LDcgQEAgRnVuY3Rpb25Db2RlQmxvY2sqIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6YgogCiBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxl
T3B0aW1pemVkRm9yQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4KQogewotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEo
KS5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmR5
bmFtaWNHbG9iYWxPYmplY3QpOwogICAgIEFTU0VSVCghIW1fY29kZUJsb2NrRm9yQ2FsbCk7CiAg
ICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAgICBpZiAobV9jb2RlQmxvY2tGb3JDYWxsLT5nZXRK
SVRUeXBlKCkgIT0gSklUQ29kZTo6dG9wVGllckpJVCgpKQpAQCAtNDY3LDcgKzQ2Nyw3IEBAIEpT
T2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHQKIAogSlNPYmplY3QqIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChFeGVjU3RhdGUqIGV4
ZWMsIEpTU2NvcGUqIHNjb3BlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewotICAgIFJFTEVB
U0VfQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICBS
RUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwogICAgIEFTU0VS
VCghIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKICAgICBKU09iamVjdCogZXJyb3IgPSAwOwog
ICAgIGlmIChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6
OnRvcFRpZXJKSVQoKSkKQEAgLTQ5MywxMiArNDkzLDEyIEBAIFBhc3NPd25QdHI8RnVuY3Rpb25D
b2RlQmxvY2s+IEZ1bmN0aW9uRXgKICAgICBpZiAoISFjb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRp
b25LaW5kKSkKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBGdW5jdGlvbkNvZGVCbG9jayhD
b2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktp
bmQpKSk7CiAKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzY29wZS0+Z2xvYmFsRGF0
YSgpOworICAgIFZNKiB2bSA9IHNjb3BlLT52bSgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBzY29wZS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgUGFyc2VyRXJyb3IgZXJyb3I7
CiAgICAgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSA9IGdsb2JhbE9iamVjdC0+aGFzRGVidWdn
ZXIoKSA/IERlYnVnZ2VyT24gOiBEZWJ1Z2dlck9mZjsKICAgICBQcm9maWxlck1vZGUgcHJvZmls
ZXJNb2RlID0gZ2xvYmFsT2JqZWN0LT5oYXNQcm9maWxlcigpID8gUHJvZmlsZXJPbiA6IFByb2Zp
bGVyT2ZmOwotICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2Nr
ID0gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcigqZ2xvYmFsRGF0YSwgc2NvcGUs
IG1fc291cmNlLCBzcGVjaWFsaXphdGlvbktpbmQsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2Rl
LCBlcnJvcik7CisgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxv
Y2sgPSBtX3VubGlua2VkRXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKCp2bSwgc2NvcGUsIG1fc291
cmNlLCBzcGVjaWFsaXphdGlvbktpbmQsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlLCBlcnJv
cik7CiAgICAgcmVjb3JkUGFyc2UobV91bmxpbmtlZEV4ZWN1dGFibGUtPmZlYXR1cmVzKCksIG1f
dW5saW5rZWRFeGVjdXRhYmxlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCBsaW5lTm8oKSwgbGFz
dExpbmUoKSk7CiAKICAgICBpZiAoIXVubGlua2VkQ29kZUJsb2NrKSB7CkBAIC01ODUsMTYgKzU4
NSwxNiBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiB9CiAKICNp
ZiBFTkFCTEUoSklUKQotdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVk
Q29kZUZvckNhbGwoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBGdW5jdGlvbkV4ZWN1
dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNhbGwoVk0mIHZtKQogewotICAgIGpldHRp
c29uQ29kZUJsb2NrKGdsb2JhbERhdGEsIG1fY29kZUJsb2NrRm9yQ2FsbCk7CisgICAgamV0dGlz
b25Db2RlQmxvY2sodm0sIG1fY29kZUJsb2NrRm9yQ2FsbCk7CiAgICAgbV9qaXRDb2RlRm9yQ2Fs
bCA9IG1fY29kZUJsb2NrRm9yQ2FsbC0+Z2V0SklUQ29kZSgpOwogICAgIG1faml0Q29kZUZvckNh
bGxXaXRoQXJpdHlDaGVjayA9IG1fY29kZUJsb2NrRm9yQ2FsbC0+Z2V0SklUQ29kZVdpdGhBcml0
eUNoZWNrKCk7CiB9CiAKLXZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXpl
ZENvZGVGb3JDb25zdHJ1Y3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBGdW5jdGlv
bkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdChWTSYgdm0pCiB7
Ci0gICAgamV0dGlzb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1
Y3QpOworICAgIGpldHRpc29uQ29kZUJsb2NrKHZtLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7
CiAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmdl
dEpJVENvZGUoKTsKICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IG1f
Y29kZUJsb2NrRm9yQ29uc3RydWN0LT5nZXRKSVRDb2RlV2l0aEFyaXR5Q2hlY2soKTsKIH0KQEAg
LTY1OCw3ICs2NTgsNyBAQCBGdW5jdGlvbkV4ZWN1dGFibGUqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
CiAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBzb3VyY2Uuc3RhcnRPZmZzZXQoKSArIHVubGlu
a2VkRnVuY3Rpb24tPnN0YXJ0T2Zmc2V0KCk7CiAgICAgdW5zaWduZWQgc291cmNlTGVuZ3RoID0g
dW5saW5rZWRGdW5jdGlvbi0+c291cmNlTGVuZ3RoKCk7CiAgICAgU291cmNlQ29kZSBmdW5jdGlv
blNvdXJjZShzb3VyY2UucHJvdmlkZXIoKSwgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0ICsgc291
cmNlTGVuZ3RoLCBmaXJzdExpbmUpOwotICAgIHJldHVybiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNy
ZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGZ1bmN0aW9uU291cmNlLCB1bmxpbmtlZEZ1bmN0aW9u
LCBmaXJzdExpbmUsIHVubGlua2VkRnVuY3Rpb24tPmxpbmVDb3VudCgpKTsKKyAgICByZXR1cm4g
RnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZnVuY3Rpb25Tb3VyY2UsIHVu
bGlua2VkRnVuY3Rpb24sIGZpcnN0TGluZSwgdW5saW5rZWRGdW5jdGlvbi0+bGluZUNvdW50KCkp
OwogfQogCiBTdHJpbmcgRnVuY3Rpb25FeGVjdXRhYmxlOjpwYXJhbVN0cmluZygpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lv
biAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY4LDE2ICs2OCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBOVU1fUEFSQU1FVEVSU19JU19IT1NUID0gMDsKICAgICAgICAg
c3RhdGljIGNvbnN0IGludCBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQgPSAtMTsKIAotICAg
ICAgICBFeGVjdXRhYmxlQmFzZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBpbnQgbnVtUGFyYW1ldGVycykKLSAgICAgICAgICAgIDogSlNDZWxsKGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSkKKyAgICAgICAgRXhlY3V0YWJsZUJhc2UoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgaW50IG51bVBhcmFtZXRlcnMpCisgICAgICAgICAgICA6IEpTQ2VsbCh2
bSwgc3RydWN0dXJlKQogICAgICAgICAgICAgLCBtX251bVBhcmFtZXRlcnNGb3JDYWxsKG51bVBh
cmFtZXRlcnMpCiAgICAgICAgICAgICAsIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdChudW1Q
YXJhbWV0ZXJzKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYgdm0pCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGdsb2JhbERhdGEpOworICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAg
ICAgICB9CiAKICAgICBwdWJsaWM6CkBAIC0xMDIsNyArMTAyLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICByZXR1cm4gbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCA9PSBOVU1fUEFSQU1F
VEVSU19JU19IT1NUOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykgeyByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oQ29tcG91bmRUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksICZzX2luZm8pOyB9CisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
LCBUeXBlSW5mbyhDb21wb3VuZFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7IH0KICAg
ICAgICAgCiAgICAgICAgIHZvaWQgY2xlYXJDb2RlKCk7CiAKQEAgLTI3MSwyNiArMjcxLDI2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0eXBlZGVmIEV4ZWN1dGFibGVCYXNlIEJhc2U7CiAK
ICNpZiBFTkFCTEUoSklUKQotICAgICAgICBzdGF0aWMgTmF0aXZlRXhlY3V0YWJsZSogY3JlYXRl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNhbGxUaHVu
aywgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb25zdHJ1
Y3RUaHVuaywgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIEludHJpbnNpYyBpbnRyaW5zaWMp
CisgICAgICAgIHN0YXRpYyBOYXRpdmVFeGVjdXRhYmxlKiBjcmVhdGUoVk0mIHZtLCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgY2FsbFRodW5rLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGNvbnN0cnVjdFRodW5rLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3Rv
ciwgSW50cmluc2ljIGludHJpbnNpYykKICAgICAgICAgewogICAgICAgICAgICAgTmF0aXZlRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZTsKICAgICAgICAgICAgIGlmICghY2FsbFRodW5rKSB7Ci0gICAg
ICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE5hdGl2
ZUV4ZWN1dGFibGU+KGdsb2JhbERhdGEuaGVhcCkpIE5hdGl2ZUV4ZWN1dGFibGUoZ2xvYmFsRGF0
YSwgZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKLSAgICAgICAgICAgICAgICBleGVjdXRhYmxlLT5m
aW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBKSVRDb2RlKCksIEpJVENvZGUoKSwgaW50cmluc2lj
KTsKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8TmF0aXZlRXhlY3V0YWJsZT4odm0uaGVhcCkpIE5hdGl2ZUV4ZWN1dGFibGUodm0sIGZ1bmN0
aW9uLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3Jl
YXRpb24odm0sIEpJVENvZGUoKSwgSklUQ29kZSgpLCBpbnRyaW5zaWMpOwogICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8TmF0aXZlRXhlY3V0YWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgTmF0aXZlRXhlY3V0
YWJsZShnbG9iYWxEYXRhLCBmdW5jdGlvbiwgY29uc3RydWN0b3IpOwotICAgICAgICAgICAgICAg
IGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIEpJVENvZGU6Okhvc3RGdW5j
dGlvbihjYWxsVGh1bmspLCBKSVRDb2RlOjpIb3N0RnVuY3Rpb24oY29uc3RydWN0VGh1bmspLCBp
bnRyaW5zaWMpOworICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxOYXRpdmVFeGVjdXRhYmxlPih2bS5oZWFwKSkgTmF0aXZlRXhlY3V0YWJsZSh2
bSwgZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlLT5m
aW5pc2hDcmVhdGlvbih2bSwgSklUQ29kZTo6SG9zdEZ1bmN0aW9uKGNhbGxUaHVuayksIEpJVENv
ZGU6Okhvc3RGdW5jdGlvbihjb25zdHJ1Y3RUaHVuayksIGludHJpbnNpYyk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTsKICAgICAgICAgfQogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoTExJTlRfQ19MT09QKQotICAgICAgICBzdGF0aWMgTmF0aXZlRXhlY3V0YWJs
ZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rp
b24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQorICAgICAgICBzdGF0aWMgTmF0aXZlRXhl
Y3V0YWJsZSogY3JlYXRlKFZNJiB2bSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE5hdGl2ZUZ1
bmN0aW9uIGNvbnN0cnVjdG9yKQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWdsb2Jh
bERhdGEuY2FuVXNlSklUKCkpOwotICAgICAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE5hdGl2ZUV4ZWN1dGFibGU+KGdsb2Jh
bERhdGEuaGVhcCkpIE5hdGl2ZUV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgZnVuY3Rpb24sIGNvbnN0
cnVjdG9yKTsKLSAgICAgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOworICAgICAgICAgICAgQVNTRVJUKCF2bS5jYW5Vc2VKSVQoKSk7CisgICAgICAgICAgICBO
YXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
TmF0aXZlRXhlY3V0YWJsZT4odm0uaGVhcCkpIE5hdGl2ZUV4ZWN1dGFibGUodm0sIGZ1bmN0aW9u
LCBjb25zdHJ1Y3Rvcik7CisgICAgICAgICAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTsKICAgICAgICAgfQogI2VuZGlmCkBA
IC0zMjAsNyArMzIwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKE5hdGl2ZUV4ZWN1dGFibGUsIG1fY29uc3RydWN0b3IpOwogICAgICAgICB9
CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
bykgeyByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBw
cm90bywgVHlwZUluZm8oTGVhZlR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7IH0KKyAg
ICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykgeyByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKExlYWZUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOyB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xh
c3NJbmZvIHNfaW5mbzsKIApAQCAtMzI4LDkgKzMyOCw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgcHJvdGVjdGVkOgogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKSVRDb2RlIGNhbGxUaHVuaywgSklUQ29kZSBj
b25zdHJ1Y3RUaHVuaywgSW50cmluc2ljIGludHJpbnNpYykKKyAgICAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIEpJVENvZGUgY2FsbFRodW5rLCBKSVRDb2RlIGNvbnN0cnVjdFRodW5r
LCBJbnRyaW5zaWMgaW50cmluc2ljKQogICAgICAgICB7Ci0gICAgICAgICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKICAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGwgPSBjYWxsVGh1bms7CiAgICAgICAg
ICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBjb25zdHJ1Y3RUaHVuazsKICAgICAgICAgICAg
IG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9IGNhbGxUaHVuay5hZGRyZXNzRm9yQ2Fs
bCgpOwpAQCAtMzQwLDggKzM0MCw4IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAKICAgICBw
cml2YXRlOgotICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQot
ICAgICAgICAgICAgOiBFeGVjdXRhYmxlQmFzZShnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLm5hdGl2
ZUV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIE5VTV9QQVJBTUVURVJTX0lTX0hPU1QpCisgICAg
ICAgIE5hdGl2ZUV4ZWN1dGFibGUoVk0mIHZtLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0
aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpCisgICAgICAgICAgICA6IEV4ZWN1dGFibGVCYXNlKHZt
LCB2bS5uYXRpdmVFeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBOVU1fUEFSQU1FVEVSU19JU19I
T1NUKQogICAgICAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQogICAgICAgICAgICAgLCBt
X2NvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKQogICAgICAgICB7CkBAIC0zNTcsMTUgKzM1NywxNSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgRXhlY3V0YWJs
ZUJhc2UgQmFzZTsKIAotICAgICAgICBTY3JpcHRFeGVjdXRhYmxlKFN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwg
Ym9vbCBpc0luU3RyaWN0Q29udGV4dCkKLSAgICAgICAgICAgIDogRXhlY3V0YWJsZUJhc2UoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlLCBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQpCisgICAgICAg
IFNjcmlwdEV4ZWN1dGFibGUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFZNJiB2bSwgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBib29sIGlzSW5TdHJpY3RDb250ZXh0KQorICAgICAgICAgICAgOiBF
eGVjdXRhYmxlQmFzZSh2bSwgc3RydWN0dXJlLCBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQp
CiAgICAgICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAgICAgICAgICwgbV9mZWF0dXJl
cyhpc0luU3RyaWN0Q29udGV4dCA/IFN0cmljdE1vZGVGZWF0dXJlIDogMCkKICAgICAgICAgewog
ICAgICAgICB9CiAKICAgICAgICAgU2NyaXB0RXhlY3V0YWJsZShTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGJvb2wgaXNJblN0
cmljdENvbnRleHQpCi0gICAgICAgICAgICA6IEV4ZWN1dGFibGVCYXNlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgc3RydWN0dXJlLCBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQpCisgICAgICAgICAg
ICA6IEV4ZWN1dGFibGVCYXNlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgTlVNX1BBUkFNRVRFUlNf
Tk9UX0NPTVBJTEVEKQogICAgICAgICAgICAgLCBtX3NvdXJjZShzb3VyY2UpCiAgICAgICAgICAg
ICAsIG1fZmVhdHVyZXMoaXNJblN0cmljdENvbnRleHQgPyBTdHJpY3RNb2RlRmVhdHVyZSA6IDAp
CiAgICAgICAgIHsKQEAgLTQwMywxNCArNDAzLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
ICAgICAgICAgewotICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7
Ci0gICAgICAgICAgICBnbG9iYWxEYXRhLmhlYXAuYWRkQ29tcGlsZWRDb2RlKHRoaXMpOyAvLyBC
YWxhbmNlZCBieSBIZWFwOjpkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpLgorICAgICAgICAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICAgICAgdm0uaGVhcC5hZGRDb21w
aWxlZENvZGUodGhpcyk7IC8vIEJhbGFuY2VkIGJ5IEhlYXA6OmRlbGV0ZVVubWFya2VkQ29tcGls
ZWRDb2RlKCkuCiAKICNpZiBFTkFCTEUoQ09ERUJMT0NLX1NBTVBMSU5HKQotICAgICAgICAgICAg
aWYgKFNhbXBsaW5nVG9vbCogc2FtcGxlciA9IGdsb2JhbERhdGEuaW50ZXJwcmV0ZXItPnNhbXBs
ZXIoKSkKLSAgICAgICAgICAgICAgICBzYW1wbGVyLT5ub3RpZnlPZlNjb3BlKGdsb2JhbERhdGEs
IHRoaXMpOworICAgICAgICAgICAgaWYgKFNhbXBsaW5nVG9vbCogc2FtcGxlciA9IHZtLmludGVy
cHJldGVyLT5zYW1wbGVyKCkpCisgICAgICAgICAgICAgICAgc2FtcGxlci0+bm90aWZ5T2ZTY29w
ZSh2bSwgdGhpcyk7CiAjZW5kaWYKICAgICAgICAgfQogCkBAIC00MzAsNyArNDMwLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGUoRXhlY1N0YXRlKiBleGVj
LCBKU1Njb3BlKiBzY29wZSkKICAgICAgICAgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAg
IEpTT2JqZWN0KiBlcnJvciA9IDA7CiAgICAgICAgICAgICBpZiAoIW1fZXZhbENvZGVCbG9jaykK
ICAgICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5hbChleGVjLCBzY29wZSwgSklU
Q29kZTo6Ym90dG9tVGllckpJVCgpKTsKQEAgLTQ0MSw3ICs0NDEsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgSlNTY29w
ZSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAKICNpZiBFTkFCTEUoSklUKQot
ICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZShKU0dsb2JhbERhdGEmKTsKKyAgICAg
ICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGUoVk0mKTsKICAgICAgICAgYm9vbCBqaXRDb21w
aWxlKEV4ZWNTdGF0ZSopOwogI2VuZGlmCiAKQEAgLTQ1NCw3ICs0NTQsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgc3RhdGljIEV2YWxFeGVjdXRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGJvb2wgaXNJblN0cmljdENvbnRleHQpIAog
ICAgICAgICB7CiAgICAgICAgICAgICBFdmFsRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEV2YWxFeGVjdXRhYmxlPigqZXhlYy0+aGVhcCgpKSkgRXZh
bEV4ZWN1dGFibGUoZXhlYywgc291cmNlLCBpc0luU3RyaWN0Q29udGV4dCk7Ci0gICAgICAgICAg
ICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAg
ICAgICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAgICAgICAgICAg
ICByZXR1cm4gZXhlY3V0YWJsZTsKICAgICAgICAgfQogCkBAIC00NjQsOSArNDY0LDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVkSklUQ29kZUZvckNhbGwo
KTsKICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG8pCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG8pCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9i
YWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhFdmFsRXhlY3V0YWJsZVR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKEV2YWxFeGVjdXRhYmxl
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CkBAIC00OTYsMTggKzQ5NiwxOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIFByb2dyYW1FeGVjdXRhYmxlKiBjcmVh
dGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIFByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8UHJvZ3JhbUV4ZWN1dGFibGU+KCpleGVjLT5oZWFwKCkpKSBQcm9ncmFt
RXhlY3V0YWJsZShleGVjLCBzb3VyY2UpOwotICAgICAgICAgICAgZXhlY3V0YWJsZS0+ZmluaXNo
Q3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgIGV4ZWN1dGFibGUtPmZp
bmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwogICAgICAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGU7
CiAgICAgICAgIH0KIAogCi0gICAgICAgIEpTT2JqZWN0KiBpbml0aWFsaXplR2xvYmFsUHJvcGVy
dGllcyhKU0dsb2JhbERhdGEmLCBDYWxsRnJhbWUqLCBKU1Njb3BlKik7CisgICAgICAgIEpTT2Jq
ZWN0KiBpbml0aWFsaXplR2xvYmFsUHJvcGVydGllcyhWTSYsIENhbGxGcmFtZSosIEpTU2NvcGUq
KTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgICAgIEpT
T2JqZWN0KiBjb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWlj
R2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuZHlu
YW1pY0dsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICBKU09iamVjdCogZXJyb3IgPSAwOwogICAg
ICAgICAgICAgaWYgKCFtX3Byb2dyYW1Db2RlQmxvY2spCiAgICAgICAgICAgICAgICAgZXJyb3Ig
PSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGUsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7
CkBAIC01MTgsNyArNTE4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTT2JqZWN0KiBj
b21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KTsKICAgICAgICAgCiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgdm9pZCBqZXR0aXNvbk9w
dGltaXplZENvZGUoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIHZvaWQgamV0dGlzb25PcHRpbWl6
ZWRDb2RlKFZNJik7CiAgICAgICAgIGJvb2wgaml0Q29tcGlsZShFeGVjU3RhdGUqKTsKICNlbmRp
ZgogCkBAIC01MzcsOSArNTM3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICNlbmRp
ZgogICAgICAgICAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90bykKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGds
b2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFByb2dyYW1FeGVjdXRhYmxlVHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oUHJvZ3JhbUV4ZWN1dGFibGVUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKQEAgLTU3MiwxMCArNTcyLDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBTY3JpcHRFeGVjdXRh
YmxlIEJhc2U7CiAKLSAgICAgICAgc3RhdGljIEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlLCB1bnNpZ25lZCBmaXJzdExp
bmUsIHVuc2lnbmVkIGxhc3RMaW5lKQorICAgICAgICBzdGF0aWMgRnVuY3Rpb25FeGVjdXRhYmxl
KiBjcmVhdGUoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUsIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5z
aWduZWQgbGFzdExpbmUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uRXhlY3V0
YWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgRnVuY3Rpb25FeGVjdXRhYmxlKGdsb2JhbERhdGEsIHNv
dXJjZSwgdW5saW5rZWRFeGVjdXRhYmxlLCBmaXJzdExpbmUsIGxhc3RMaW5lKTsKLSAgICAgICAg
ICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICAgICAg
RnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8RnVuY3Rpb25FeGVjdXRhYmxlPih2bS5oZWFwKSkgRnVuY3Rpb25FeGVjdXRhYmxlKHZtLCBz
b3VyY2UsIHVubGlua2VkRXhlY3V0YWJsZSwgZmlyc3RMaW5lLCBsYXN0TGluZSk7CisgICAgICAg
ICAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgICAgICByZXR1cm4g
ZXhlY3V0YWJsZTsKICAgICAgICAgfQogICAgICAgICBzdGF0aWMgRnVuY3Rpb25FeGVjdXRhYmxl
KiBmcm9tR2xvYmFsQ29kZShjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBFeGVjU3RhdGUqLCBEZWJ1
Z2dlciosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU09iamVjdCoqIGV4Y2VwdGlvbik7CkBAIC02MDIs
NyArNjAyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVG
b3JDYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2Jq
ZWN0KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuZHluYW1pY0dsb2Jh
bE9iamVjdCk7CiAgICAgICAgICAgICBKU09iamVjdCogZXJyb3IgPSAwOwogICAgICAgICAgICAg
aWYgKCFtX2NvZGVCbG9ja0ZvckNhbGwpCiAgICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxl
Rm9yQ2FsbEludGVybmFsKGV4ZWMsIHNjb3BlLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpOwpA
QCAtNjEzLDcgKzYxMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU09iamVjdCogY29t
cGlsZU9wdGltaXplZEZvckNhbGwoRXhlY1N0YXRlKiwgSlNTY29wZSosIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgpOwogICAgICAgICAKICNpZiBFTkFCTEUoSklUKQotICAgICAgICB2b2lkIGpldHRp
c29uT3B0aW1pemVkQ29kZUZvckNhbGwoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIHZvaWQgamV0
dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChWTSYpOwogICAgICAgICBib29sIGppdENvbXBpbGVG
b3JDYWxsKEV4ZWNTdGF0ZSopOwogI2VuZGlmCiAKQEAgLTYzMCw3ICs2MzAsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNvbnN0cnVjdChFeGVjU3Rh
dGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlKQogICAgICAgICB7Ci0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwogICAg
ICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAgICAgICAgICAgIGlmICghbV9jb2RlQmxv
Y2tGb3JDb25zdHJ1Y3QpCiAgICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ29uc3Ry
dWN0SW50ZXJuYWwoZXhlYywgc2NvcGUsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7CkBAIC02
NDEsNyArNjQxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxl
T3B0aW1pemVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCB1bnNpZ25lZCBieXRl
Y29kZUluZGV4KTsKICAgICAgICAgCiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgdm9pZCBqZXR0
aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIHZv
aWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KFZNJik7CiAgICAgICAgIGJvb2wg
aml0Q29tcGlsZUZvckNvbnN0cnVjdChFeGVjU3RhdGUqKTsKICNlbmRpZgogCkBAIC02ODEsMTMg
KzY4MSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAKICNpZiBFTkFC
TEUoSklUKQotICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZUZvcihKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICAgICAgdm9p
ZCBqZXR0aXNvbk9wdGltaXplZENvZGVGb3IoVk0mIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSAK
LSAgICAgICAgICAgICAgICBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDYWxsKGdsb2JhbERhdGEp
OworICAgICAgICAgICAgICAgIGpldHRpc29uT3B0aW1pemVkQ29kZUZvckNhbGwodm0pOwogICAg
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNv
bnN0cnVjdCk7Ci0gICAgICAgICAgICAgICAgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3Ry
dWN0KGdsb2JhbERhdGEpOworICAgICAgICAgICAgICAgIGpldHRpc29uT3B0aW1pemVkQ29kZUZv
ckNvbnN0cnVjdCh2bSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCkBAIC03
MzMsOSArNzMzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgY2xlYXJDb2RlSWZO
b3RDb21waWxpbmcoKTsKICAgICAgICAgdm9pZCBjbGVhclVubGlua2VkQ29kZUZvclJlY29tcGls
YXRpb25JZk5vdENvbXBpbGluZygpOwogICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG8pCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShn
bG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhGdW5jdGlvbkV4ZWN1dGFi
bGVUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhGdW5jdGlv
bkV4ZWN1dGFibGVUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKQEAgLTc0NSw3
ICs3NDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBjbGVhckNvZGUoKTsKIAog
ICAgIHByaXZhdGU6Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShKU0dsb2JhbERhdGEmLCBj
b25zdCBTb3VyY2VDb2RlJiwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqLCB1bnNpZ25lZCBm
aXJzdExpbmUsIHVuc2lnbmVkIGxhc3RMaW5lKTsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KFZNJiwgY29uc3QgU291cmNlQ29kZSYsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiwgdW5z
aWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsYXN0TGluZSk7CiAKICAgICAgICAgSlNPYmplY3Qq
IGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiwgSlNTY29wZSosIEpJVENvZGU6OkpJ
VFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBVSU5UX01BWCk7CiAgICAgICAgIEpTT2Jq
ZWN0KiBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiwgSlNTY29wZSosIEpJ
VENvZGU6OkpJVFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBVSU5UX01BWCk7CkBAIC03
NzUsMTAgKzc3NSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgT3duUHRyPEZ1bmN0aW9u
Q29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsKICAgICB9OwogCi0gICAgaW5saW5l
IEpTRnVuY3Rpb246OkpTRnVuY3Rpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBGdW5jdGlv
bkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3BlKQotICAgICAgICA6IEJhc2Uo
Z2xvYmFsRGF0YSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpKQot
ICAgICAgICAsIG1fZXhlY3V0YWJsZShnbG9iYWxEYXRhLCB0aGlzLCBleGVjdXRhYmxlKQotICAg
ICAgICAsIG1fc2NvcGUoZ2xvYmFsRGF0YSwgdGhpcywgc2NvcGUpCisgICAgaW5saW5lIEpTRnVu
Y3Rpb246OkpTRnVuY3Rpb24oVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUs
IEpTU2NvcGUqIHNjb3BlKQorICAgICAgICA6IEJhc2Uodm0sIHNjb3BlLT5nbG9iYWxPYmplY3Qo
KS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSkKKyAgICAgICAgLCBtX2V4ZWN1dGFibGUodm0sIHRoaXMs
IGV4ZWN1dGFibGUpCisgICAgICAgICwgbV9zY29wZSh2bSwgdGhpcywgc2NvcGUpCiAgICAgICAg
ICwgbV9hbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQoSW5pdGlhbGl6ZWRCbGluZCkgLy8gU2Vl
IGNvbW1lbnQgaW4gSlNGdW5jdGlvbi5jcHAgY29uY2VybmluZyB0aGUgcmVhc29uIGZvciB1c2lu
ZyBJbml0aWFsaXplZEJsaW5kIGFzIG9wcG9zZWQgdG8gSW5pdGlhbGl6ZWRXYXRjaGluZy4KICAg
ICB7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0aW9u
SGFybmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGlvbkhhcm5lc3MuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMCAr
NDEsMTAgQEAgaW5saW5lIGJvb2wgcHJlcGFyZUZvckV4ZWN1dGlvbihFeGVjU3RhdAogI2lmIEVO
QUJMRShMTElOVCkKICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpIHsK
ICAgICAgICAgLy8gU3RhcnQgb2ZmIGluIHRoZSBsb3cgbGV2ZWwgaW50ZXJwcmV0ZXIuCi0gICAg
ICAgIExMSW50OjpnZXRFbnRyeXBvaW50KGV4ZWMtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLmdl
dCgpLCBqaXRDb2RlKTsKKyAgICAgICAgTExJbnQ6OmdldEVudHJ5cG9pbnQoZXhlYy0+dm0oKSwg
Y29kZUJsb2NrLmdldCgpLCBqaXRDb2RlKTsKICAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2Rl
KGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKLSAgICAgICAgaWYgKGV4ZWMtPmds
b2JhbERhdGEoKS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCi0gICAgICAgICAgICBleGVjLT5nbG9i
YWxEYXRhKCkubV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IoY29kZUJs
b2NrLmdldCgpKTsKKyAgICAgICAgaWYgKGV4ZWMtPnZtKCkubV9wZXJCeXRlY29kZVByb2ZpbGVy
KQorICAgICAgICAgICAgZXhlYy0+dm0oKS5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5
dGVjb2Rlc0Zvcihjb2RlQmxvY2suZ2V0KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAjZW5kaWYgLy8gRU5BQkxFKExMSU5UKQpAQCAtNTYsMTAgKzU2LDEwIEBAIGlubGluZSBib29s
IHByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbigKICNpZiBFTkFCTEUoTExJTlQpCiAgICAgaWYg
KEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpKSB7CiAgICAgICAgIC8vIFN0YXJ0IG9m
ZiBpbiB0aGUgbG93IGxldmVsIGludGVycHJldGVyLgotICAgICAgICBMTEludDo6Z2V0RnVuY3Rp
b25FbnRyeXBvaW50KGV4ZWMtPmdsb2JhbERhdGEoKSwga2luZCwgaml0Q29kZSwgaml0Q29kZVdp
dGhBcml0eUNoZWNrKTsKKyAgICAgICAgTExJbnQ6OmdldEZ1bmN0aW9uRW50cnlwb2ludChleGVj
LT52bSgpLCBraW5kLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwogICAgICAgICBj
b2RlQmxvY2stPnNldEpJVENvZGUoaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKLSAg
ICAgICAgaWYgKGV4ZWMtPmdsb2JhbERhdGEoKS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCi0gICAg
ICAgICAgICBleGVjLT5nbG9iYWxEYXRhKCkubV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVC
eXRlY29kZXNGb3IoY29kZUJsb2NrLmdldCgpKTsKKyAgICAgICAgaWYgKGV4ZWMtPnZtKCkubV9w
ZXJCeXRlY29kZVByb2ZpbGVyKQorICAgICAgICAgICAgZXhlYy0+dm0oKS5tX3BlckJ5dGVjb2Rl
UHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zvcihjb2RlQmxvY2suZ2V0KCkpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAjZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE0ODY1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMSArNDYsMTEgQEAgRnVuY3Rpb25Db25zdHJ1Y3Rv
cjo6RnVuY3Rpb25Db25zdHJ1Y3RvcgogCiB2b2lkIEZ1bmN0aW9uQ29uc3RydWN0b3I6OmZpbmlz
aENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRnVuY3Rpb25Qcm90b3R5cGUqIGZ1bmN0aW9uUHJv
dG90eXBlKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwg
ZnVuY3Rpb25Qcm90b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpOwotICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLnByb3RvdHlwZSwgZnVuY3Rpb25Qcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5KTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpLCBmdW5jdGlv
blByb3RvdHlwZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSk7CisgICAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwg
ZnVuY3Rpb25Qcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKIAog
ICAgIC8vIE51bWJlciBvZiBhcmd1bWVudHMgZm9yIGNvbnN0cnVjdG9yCi0gICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkubGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0p
OworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBE
b250RW51bSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0
cnVjdFdpdGhGdW5jdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmgJ
KHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0
aW9uQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAg
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkg
CisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAKICAgICAgICAgeyAK
LSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAm
c19pbmZvKTsgCisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8pOyAKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJv
dG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksMjMgKzQ5LDIzIEBAIEZ1bmN0aW9uUHJv
dG90eXBlOjpGdW5jdGlvblByb3RvdHlwZShKU0cKIAogdm9pZCBGdW5jdGlvblByb3RvdHlwZTo6
ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0g
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBuYW1lKTsKLSAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDApLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBE
b250RW51bSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwgbmFtZSk7Cisg
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLmxlbmd0aCwganNOdW1iZXIoMCksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRF
bnVtKTsKIH0KIAogdm9pZCBGdW5jdGlvblByb3RvdHlwZTo6YWRkRnVuY3Rpb25Qcm9wZXJ0aWVz
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNGdW5jdGlv
bioqIGNhbGxGdW5jdGlvbiwgSlNGdW5jdGlvbioqIGFwcGx5RnVuY3Rpb24pCiB7CiAgICAgSlNG
dW5jdGlvbiogdG9TdHJpbmdGdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBnbG9i
YWxPYmplY3QsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZy5zdHJpbmcoKSwgZnVu
Y3Rpb25Qcm90b0Z1bmNUb1N0cmluZyk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcsIHRvU3Ry
aW5nRnVuY3Rpb24sIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcsIHRvU3RyaW5nRnVuY3Rp
b24sIERvbnRFbnVtKTsKIAogICAgICphcHBseUZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRl
KGV4ZWMsIGdsb2JhbE9iamVjdCwgMiwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmFwcGx5LnN0cmlu
ZygpLCBmdW5jdGlvblByb3RvRnVuY0FwcGx5KTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcHBseSwgKmFw
cGx5RnVuY3Rpb24sIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXBwbHksICphcHBseUZ1bmN0aW9uLCBE
b250RW51bSk7CiAKICAgICAqY2FsbEZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMs
IGdsb2JhbE9iamVjdCwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGwuc3RyaW5nKCksIGZ1
bmN0aW9uUHJvdG9GdW5jQ2FsbCk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbCwgKmNhbGxGdW5jdGlv
biwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCks
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsLCAqY2FsbEZ1bmN0aW9uLCBEb250RW51bSk7CiAK
ICAgICBKU0Z1bmN0aW9uKiBiaW5kRnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywg
Z2xvYmFsT2JqZWN0LCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYmluZC5zdHJpbmcoKSwgZnVu
Y3Rpb25Qcm90b0Z1bmNCaW5kKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVj
LT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5iaW5kLCBiaW5kRnVuY3Rpb24s
IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuYmluZCwgYmluZEZ1bmN0aW9uLCBEb250RW51bSk7CiB9CiAK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxGdW5jdGlvblByb3RvdHlw
ZShFeGVjU3RhdGUqKQpAQCAtMTg3LDEyICsxODcsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvblBybwogCiAgICAgLy8gTGV0IEEgYmUgYSBuZXcgKHBvc3NpYmx5IGVt
cHR5KSBpbnRlcm5hbCBsaXN0IG9mIGFsbCBvZiB0aGUgYXJndW1lbnQgdmFsdWVzIHByb3ZpZGVk
IGFmdGVyIHRoaXNBcmcgKGFyZzEsIGFyZzIgZXRjKSwgaW4gb3JkZXIuCiAgICAgc2l6ZV90IG51
bUJvdW5kQXJncyA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDEgPyBleGVjLT5hcmd1bWVudENv
dW50KCkgLSAxIDogMDsKLSAgICBKU0FycmF5KiBib3VuZEFyZ3MgPSBKU0FycmF5Ojp0cnlDcmVh
dGVVbmluaXRpYWxpemVkKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0
cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoVW5kZWNpZGVk
KSwgbnVtQm91bmRBcmdzKTsKKyAgICBKU0FycmF5KiBib3VuZEFyZ3MgPSBKU0FycmF5Ojp0cnlD
cmVhdGVVbmluaXRpYWxpemVkKGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1
cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aFVuZGVjaWRlZCksIG51
bUJvdW5kQXJncyk7CiAgICAgaWYgKCFib3VuZEFyZ3MpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtQm91bmRBcmdzOyArK2kpCi0gICAgICAgIGJvdW5kQXJncy0+aW5pdGlh
bGl6ZUluZGV4KGV4ZWMtPmdsb2JhbERhdGEoKSwgaSwgZXhlYy0+YXJndW1lbnQoaSArIDEpKTsK
KyAgICAgICAgYm91bmRBcmdzLT5pbml0aWFsaXplSW5kZXgoZXhlYy0+dm0oKSwgaSwgZXhlYy0+
YXJndW1lbnQoaSArIDEpKTsKIAogICAgIC8vIElmIHRoZSBbW0NsYXNzXV0gaW50ZXJuYWwgcHJv
cGVydHkgb2YgVGFyZ2V0IGlzICJGdW5jdGlvbiIsIHRoZW4gLi4uCiAgICAgLy8gRWxzZSBzZXQg
dGhlIGxlbmd0aCBvd24gcHJvcGVydHkgb2YgRiB0byAwLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oCShyZXZpc2lvbiAxNDg2
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5ICszOCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAKICAgICAgICAgdm9pZCBhZGRGdW5jdGlvblByb3BlcnRpZXMoRXhlY1N0YXRlKiwgSlNHbG9i
YWxPYmplY3QqLCBKU0Z1bmN0aW9uKiogY2FsbEZ1bmN0aW9uLCBKU0Z1bmN0aW9uKiogYXBwbHlG
dW5jdGlvbik7CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvKQorICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFs
RGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0
eUNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJBUElTaGltcy5oIgogI2luY2x1ZGUgIkhl
YXAuaCIKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1
ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKQEAgLTUwLDE5ICs1MCwxOSBA
QCBjb25zdCBkb3VibGUgaG91ciA9IDYwICogNjA7CiAKICNpZiBVU0UoQ0YpCiBEZWZhdWx0R0NB
Y3Rpdml0eUNhbGxiYWNrOjpEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKEhlYXAqIGhlYXApCi0g
ICAgOiBHQ0FjdGl2aXR5Q2FsbGJhY2soaGVhcC0+Z2xvYmFsRGF0YSgpLCBDRlJ1bkxvb3BHZXRD
dXJyZW50KCkpCisgICAgOiBHQ0FjdGl2aXR5Q2FsbGJhY2soaGVhcC0+dm0oKSwgQ0ZSdW5Mb29w
R2V0Q3VycmVudCgpKQogICAgICwgbV9kZWxheShzX2RlY2FkZSkKIHsKIH0KIAogRGVmYXVsdEdD
QWN0aXZpdHlDYWxsYmFjazo6RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayhIZWFwKiBoZWFwLCBD
RlJ1bkxvb3BSZWYgcnVuTG9vcCkKLSAgICA6IEdDQWN0aXZpdHlDYWxsYmFjayhoZWFwLT5nbG9i
YWxEYXRhKCksIHJ1bkxvb3ApCisgICAgOiBHQ0FjdGl2aXR5Q2FsbGJhY2soaGVhcC0+dm0oKSwg
cnVuTG9vcCkKICAgICAsIG1fZGVsYXkoc19kZWNhZGUpCiB7CiB9CiAjZWxpZiBQTEFURk9STShR
VCkKIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OkRlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2so
SGVhcCogaGVhcCkKLSAgICA6IEdDQWN0aXZpdHlDYWxsYmFjayhoZWFwLT5nbG9iYWxEYXRhKCkp
CisgICAgOiBHQ0FjdGl2aXR5Q2FsbGJhY2soaGVhcC0+dm0oKSkKICAgICAsIG1fZGVsYXkoaG91
cikKIHsKIH0KQEAgLTcwLDExICs3MCwxMSBAQCBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpE
ZWZhdWx0R0NBY3RpCiAKIHZvaWQgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6ZG9Xb3JrKCkK
IHsKLSAgICBIZWFwKiBoZWFwID0gJm1fZ2xvYmFsRGF0YS0+aGVhcDsKKyAgICBIZWFwKiBoZWFw
ID0gJm1fdm0tPmhlYXA7CiAgICAgaWYgKCFpc0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIEFQSUVudHJ5U2hpbSBzaGltKG1fZ2xvYmFsRGF0YSk7CisgICAgQVBJRW50cnlT
aGltIHNoaW0obV92bSk7CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICBkb3VibGUgc3RhcnRUaW1l
ID0gV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKICAgICBpZiAoaGVhcC0+aXNQ
YWdlZE91dChzdGFydFRpbWUgKyBwYWdpbmdUaW1lT3V0KSkgewpAQCAtMTI0LDcgKzEyNCw3IEBA
IHZvaWQgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6ZGlkQWxsb2MKICAgICAvLyBXZSBwcmV0
ZW5kIGl0J3Mgb25lIGJ5dGUgc28gdGhhdCB3ZSBkb24ndCBpZ25vcmUgdGhpcyBhbGxvY2F0aW9u
IGVudGlyZWx5LgogICAgIGlmICghYnl0ZXMpCiAgICAgICAgIGJ5dGVzID0gMTsKLSAgICBIZWFw
KiBoZWFwID0gc3RhdGljX2Nhc3Q8SGVhcCo+KCZtX2dsb2JhbERhdGEtPmhlYXApOworICAgIEhl
YXAqIGhlYXAgPSBzdGF0aWNfY2FzdDxIZWFwKj4oJm1fdm0tPmhlYXApOwogICAgIGRvdWJsZSBn
Y1RpbWVTbGljZSA9IHN0ZDo6bWluKChzdGF0aWNfY2FzdDxkb3VibGU+KGJ5dGVzKSAvIE1CKSAq
IGdjVGltZVNsaWNlUGVyTUIsIG1heEdDVGltZVNsaWNlKTsKICAgICBkb3VibGUgbmV3RGVsYXkg
PSBoZWFwLT5sYXN0R0NMZW5ndGgoKSAvIGdjVGltZVNsaWNlOwogICAgIHNjaGVkdWxlVGltZXIo
bmV3RGVsYXkpOwpAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgRGVmYXVsdEdDQWN0aXZpdHlDYWxs
YmFjazo6Y2FuY2VsKCkKICNlbHNlCiAKIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OkRlZmF1
bHRHQ0FjdGl2aXR5Q2FsbGJhY2soSGVhcCogaGVhcCkKLSAgICA6IEdDQWN0aXZpdHlDYWxsYmFj
ayhoZWFwLT5nbG9iYWxEYXRhKCkpCisgICAgOiBHQ0FjdGl2aXR5Q2FsbGJhY2soaGVhcC0+dm0o
KSkKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0
eUNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R0NBY3Rpdml0eUNhbGxiYWNrLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MiwxNCArNTIsMTQgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAjaWYgVVNFKENGKQotICAgIEdD
QWN0aXZpdHlDYWxsYmFjayhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENGUnVuTG9vcFJlZiBy
dW5Mb29wKQotICAgICAgICA6IEhlYXBUaW1lcihnbG9iYWxEYXRhLCBydW5Mb29wKQorICAgIEdD
QWN0aXZpdHlDYWxsYmFjayhWTSogdm0sIENGUnVuTG9vcFJlZiBydW5Mb29wKQorICAgICAgICA6
IEhlYXBUaW1lcih2bSwgcnVuTG9vcCkKICAgICAgICAgLCBtX2VuYWJsZWQodHJ1ZSkKICAgICB7
CiAgICAgfQogI2Vsc2UKLSAgICBHQ0FjdGl2aXR5Q2FsbGJhY2soSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhKQotICAgICAgICA6IEhlYXBUaW1lcihnbG9iYWxEYXRhKQorICAgIEdDQWN0aXZpdHlD
YWxsYmFjayhWTSogdm0pCisgICAgICAgIDogSGVhcFRpbWVyKHZtKQogICAgICAgICAsIG1fZW5h
YmxlZCh0cnVlKQogICAgIHsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2tCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2tCbGFja0JlcnJ5LmNw
cAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NB
Y3Rpdml0eUNhbGxiYWNrQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDIwICsy
MCwyMCBAQAogI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgogCiAjaW5jbHVkZSAiSGVh
cC5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVk
ZSA8QmxhY2tCZXJyeVBsYXRmb3JtTWVtb3J5Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBEZWZh
dWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKEhlYXAqIGhl
YXApCi0gICAgOiBHQ0FjdGl2aXR5Q2FsbGJhY2soaGVhcC0+Z2xvYmFsRGF0YSgpKQorICAgIDog
R0NBY3Rpdml0eUNhbGxiYWNrKGhlYXAtPnZtKCkpCiB7CiB9CiAKIHZvaWQgRGVmYXVsdEdDQWN0
aXZpdHlDYWxsYmFjazo6ZG9Xb3JrKCkKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2dsb2Jh
bERhdGEpOwotICAgIG1fZ2xvYmFsRGF0YS0+aGVhcC5jb2xsZWN0KEhlYXA6OkRvTm90U3dlZXAp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fdm0pOworICAgIG1fdm0tPmhlYXAuY29sbGVjdChI
ZWFwOjpEb05vdFN3ZWVwKTsKIH0KIAogdm9pZCBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpk
aWRBbGxvY2F0ZShzaXplX3QgYnl0ZXNBbGxvY2F0ZWQpCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQg
RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6ZGlkQWxsb2MKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gVHJ5IHVzaW5nIH41JSBDUFUgdGltZS4KLSAgICBtX3RpbWVyLnN0YXJ0KG1fZ2xvYmFs
RGF0YS0+aGVhcC5sYXN0R0NMZW5ndGgoKSAqIDIwKTsKKyAgICBtX3RpbWVyLnN0YXJ0KG1fdm0t
PmhlYXAubGFzdEdDTGVuZ3RoKCkgKiAyMCk7CiB9CiAKIHZvaWQgRGVmYXVsdEdDQWN0aXZpdHlD
YWxsYmFjazo6d2lsbENvbGxlY3QoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICsz
OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHJpdmF0ZTogICAgICAgIAogICAgICAgICBH
ZXR0ZXJTZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQotICAgICAgICAgICAgOiBKU0NlbGwoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRhKCkuZ2V0dGVyU2V0dGVyU3RydWN0dXJlLmdl
dCgpKQorICAgICAgICAgICAgOiBKU0NlbGwoZXhlYy0+dm0oKSwgZXhlYy0+dm0oKS5nZXR0ZXJT
ZXR0ZXJTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC00OSwxOSAr
NDksMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBHZXR0ZXJTZXR0ZXIqIGNy
ZWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHsKICAgICAgICAgICAgIEdldHRlclNldHRl
ciogZ2V0dGVyU2V0dGVyID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8R2V0dGVyU2V0dGVy
PigqZXhlYy0+aGVhcCgpKSkgR2V0dGVyU2V0dGVyKGV4ZWMpOwotICAgICAgICAgICAgZ2V0dGVy
U2V0dGVyLT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICAgICAg
Z2V0dGVyU2V0dGVyLT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKICAgICAgICAgICAgIHJl
dHVybiBnZXR0ZXJTZXR0ZXI7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgSlNPYmplY3QqIGdl
dHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZ2V0dGVyLmdldCgpOyB9Ci0gICAgICAgIHZvaWQgc2V0
R2V0dGVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNPYmplY3QqIGdldHRlcikgeyBtX2dl
dHRlci5zZXRNYXlCZU51bGwoZ2xvYmFsRGF0YSwgdGhpcywgZ2V0dGVyKTsgfQorICAgICAgICB2
b2lkIHNldEdldHRlcihWTSYgdm0sIEpTT2JqZWN0KiBnZXR0ZXIpIHsgbV9nZXR0ZXIuc2V0TWF5
QmVOdWxsKHZtLCB0aGlzLCBnZXR0ZXIpOyB9CiAgICAgICAgIEpTT2JqZWN0KiBzZXR0ZXIoKSBj
b25zdCB7IHJldHVybiBtX3NldHRlci5nZXQoKTsgfQotICAgICAgICB2b2lkIHNldFNldHRlcihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTT2JqZWN0KiBzZXR0ZXIpIHsgbV9zZXR0ZXIuc2V0
TWF5QmVOdWxsKGdsb2JhbERhdGEsIHRoaXMsIHNldHRlcik7IH0KLSAgICAgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgICAgIHZvaWQg
c2V0U2V0dGVyKFZNJiB2bSwgSlNPYmplY3QqIHNldHRlcikgeyBtX3NldHRlci5zZXRNYXlCZU51
bGwodm0sIHRoaXMsIHNldHRlcik7IH0KKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oR2V0dGVyU2V0
dGVyVHlwZSwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiksICZzX2luZm8pOworICAgICAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oR2V0dGVyU2V0dGVyVHlwZSwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiksICZzX2luZm8p
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNf
aW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIu
Y3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
ZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTQgKzg4LDE0IEBAIHN0cnVjdCBJ
ZGVudGlmaWVyTENoYXJGcm9tVUNoYXJUcmFuc2xhdG8KICAgICB9CiB9OwogCi1QYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNv
bnN0IGNoYXIqIGMpCitQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZChWTSog
dm0sIGNvbnN0IGNoYXIqIGMpCiB7CiAgICAgQVNTRVJUKGMpOwogICAgIEFTU0VSVChjWzBdKTsK
ICAgICBpZiAoIWNbMV0pCi0gICAgICAgIHJldHVybiBhZGQoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0
YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChjWzBdKSk7CisgICAgICAg
IHJldHVybiBhZGQodm0sIHZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVw
KGNbMF0pKTsKIAotICAgIElkZW50aWZpZXJUYWJsZSYgaWRlbnRpZmllclRhYmxlID0gKmdsb2Jh
bERhdGEtPmlkZW50aWZpZXJUYWJsZTsKKyAgICBJZGVudGlmaWVyVGFibGUmIGlkZW50aWZpZXJU
YWJsZSA9ICp2bS0+aWRlbnRpZmllclRhYmxlOwogICAgIExpdGVyYWxJZGVudGlmaWVyVGFibGUm
IGxpdGVyYWxJZGVudGlmaWVyVGFibGUgPSBpZGVudGlmaWVyVGFibGUubGl0ZXJhbFRhYmxlKCk7
CiAKICAgICBjb25zdCBMaXRlcmFsSWRlbnRpZmllclRhYmxlOjppdGVyYXRvciYgaXRlciA9IGxp
dGVyYWxJZGVudGlmaWVyVGFibGUuZmluZChjKTsKQEAgLTExNSwyOSArMTE1LDI5IEBAIFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEoKIAogUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBJZGVudGlmaWVyOjphZGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyKiBjKQogewot
ICAgIHJldHVybiBhZGQoJmV4ZWMtPmdsb2JhbERhdGEoKSwgYyk7CisgICAgcmV0dXJuIGFkZCgm
ZXhlYy0+dm0oKSwgYyk7CiB9CiAKLVBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6
YWRkOChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVuZ3Ro
KQorUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQ4KFZNKiB2bSwgY29uc3Qg
VUNoYXIqIHMsIGludCBsZW5ndGgpCiB7CiAgICAgaWYgKGxlbmd0aCA9PSAxKSB7CiAgICAgICAg
IFVDaGFyIGMgPSBzWzBdOwogICAgICAgICBBU1NFUlQoYyA8PSAweGZmKTsKICAgICAgICAgaWYg
KGNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhjKSkKLSAgICAgICAgICAgIHJldHVybiBhZGQo
Z2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmlu
Z1JlcChjKSk7CisgICAgICAgICAgICByZXR1cm4gYWRkKHZtLCB2bS0+c21hbGxTdHJpbmdzLnNp
bmdsZUNoYXJhY3RlclN0cmluZ1JlcChjKSk7CiAgICAgfQogICAgIAogICAgIGlmICghbGVuZ3Ro
KQogICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKICAgICBDaGFyQnVmZmVyPFVD
aGFyPiBidWYgPSB7IHMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGgpIH07Ci0gICAgSGFz
aFNldDxTdHJpbmdJbXBsKj46OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBnbG9iYWxEYXRhLT5pZGVu
dGlmaWVyVGFibGUtPmFkZDxDaGFyQnVmZmVyPFVDaGFyPiwgSWRlbnRpZmllckxDaGFyRnJvbVVD
aGFyVHJhbnNsYXRvciA+KGJ1Zik7CisgICAgSGFzaFNldDxTdHJpbmdJbXBsKj46OkFkZFJlc3Vs
dCBhZGRSZXN1bHQgPSB2bS0+aWRlbnRpZmllclRhYmxlLT5hZGQ8Q2hhckJ1ZmZlcjxVQ2hhcj4s
IElkZW50aWZpZXJMQ2hhckZyb21VQ2hhclRyYW5zbGF0b3IgPihidWYpOwogICAgIAogICAgIC8v
IElmIHRoZSBzdHJpbmcgaXMgbmV3bHktdHJhbnNsYXRlZCwgdGhlbiB3ZSBuZWVkIHRvIGFkb3B0
IGl0LgogICAgIC8vIFRoZSBib29sZWFuIGluIHRoZSBwYWlyIHRlbGxzIHVzIGlmIHRoYXQgaXMg
c28uCiAgICAgcmV0dXJuIGFkZFJlc3VsdC5pc05ld0VudHJ5ID8gYWRvcHRSZWYoKmFkZFJlc3Vs
dC5pdGVyYXRvcikgOiAqYWRkUmVzdWx0Lml0ZXJhdG9yOwogfQogCi1QYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IElkZW50aWZpZXI6OmFkZFNsb3dDYXNlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
U3RyaW5nSW1wbCogcikKK1Bhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkU2xv
d0Nhc2UoVk0qIHZtLCBTdHJpbmdJbXBsKiByKQogewogICAgIEFTU0VSVCghci0+aXNJZGVudGlm
aWVyKCkpOwogICAgIC8vIFRoZSBlbXB0eSAmIG51bGwgc3RyaW5ncyBhcmUgc3RhdGljIHNpbmds
ZXRvbnMsIGFuZCBzdGF0aWMgc3RyaW5ncyBhcmUgaGFuZGxlZApAQCAtMTQ3LDY4ICsxNDcsNjgg
QEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGRTbAogICAgIGlmIChyLT5s
ZW5ndGgoKSA9PSAxKSB7CiAgICAgICAgIFVDaGFyIGMgPSAoKnIpWzBdOwogICAgICAgICBpZiAo
YyA8PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpCi0gICAgICAgICAgICByID0gZ2xvYmFsRGF0
YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChjKTsKKyAgICAgICAgICAg
IHIgPSB2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChjKTsKICAgICAg
ICAgICAgIGlmIChyLT5pc0lkZW50aWZpZXIoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcjsK
ICAgICB9CiAKLSAgICByZXR1cm4gKmdsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZS0+YWRkKHIp
Lml0ZXJhdG9yOworICAgIHJldHVybiAqdm0tPmlkZW50aWZpZXJUYWJsZS0+YWRkKHIpLml0ZXJh
dG9yOwogfQogCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZFNsb3dDYXNl
KEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nSW1wbCogcikKIHsKLSAgICByZXR1cm4gYWRkU2xvd0Nh
c2UoJmV4ZWMtPmdsb2JhbERhdGEoKSwgcik7CisgICAgcmV0dXJuIGFkZFNsb3dDYXNlKCZleGVj
LT52bSgpLCByKTsKIH0KIAogSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tKEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIElkZW50aWZpZXIoZXhlYywgZXhl
Yy0+Z2xvYmFsRGF0YSgpLm51bWVyaWNTdHJpbmdzLmFkZCh2YWx1ZSkpOworICAgIHJldHVybiBJ
ZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPnZtKCkubnVtZXJpY1N0cmluZ3MuYWRkKHZhbHVlKSk7CiB9
CiAKIElkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbShFeGVjU3RhdGUqIGV4ZWMsIGludCB2YWx1
ZSkKIHsKLSAgICByZXR1cm4gSWRlbnRpZmllcihleGVjLCBleGVjLT5nbG9iYWxEYXRhKCkubnVt
ZXJpY1N0cmluZ3MuYWRkKHZhbHVlKSk7CisgICAgcmV0dXJuIElkZW50aWZpZXIoZXhlYywgZXhl
Yy0+dm0oKS5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUpKTsKIH0KIAogSWRlbnRpZmllciBJZGVu
dGlmaWVyOjpmcm9tKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIHZhbHVlKQogewotICAgIHJldHVy
biBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmdsb2JhbERhdGEoKS5udW1lcmljU3RyaW5ncy5hZGQo
dmFsdWUpKTsKKyAgICByZXR1cm4gSWRlbnRpZmllcihleGVjLCBleGVjLT52bSgpLm51bWVyaWNT
dHJpbmdzLmFkZCh2YWx1ZSkpOwogfQogCi1JZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb20oSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25lZCB2YWx1ZSkKK0lkZW50aWZpZXIgSWRlbnRp
Zmllcjo6ZnJvbShWTSogdm0sIHVuc2lnbmVkIHZhbHVlKQogewotICAgIHJldHVybiBJZGVudGlm
aWVyKGdsb2JhbERhdGEsIGdsb2JhbERhdGEtPm51bWVyaWNTdHJpbmdzLmFkZCh2YWx1ZSkpOwor
ICAgIHJldHVybiBJZGVudGlmaWVyKHZtLCB2bS0+bnVtZXJpY1N0cmluZ3MuYWRkKHZhbHVlKSk7
CiB9CiAKLUlkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbShKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIGludCB2YWx1ZSkKK0lkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbShWTSogdm0sIGludCB2
YWx1ZSkKIHsKLSAgICByZXR1cm4gSWRlbnRpZmllcihnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5u
dW1lcmljU3RyaW5ncy5hZGQodmFsdWUpKTsKKyAgICByZXR1cm4gSWRlbnRpZmllcih2bSwgdm0t
Pm51bWVyaWNTdHJpbmdzLmFkZCh2YWx1ZSkpOwogfQogCi1JZGVudGlmaWVyIElkZW50aWZpZXI6
OmZyb20oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBkb3VibGUgdmFsdWUpCitJZGVudGlmaWVy
IElkZW50aWZpZXI6OmZyb20oVk0qIHZtLCBkb3VibGUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIElk
ZW50aWZpZXIoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+bnVtZXJpY1N0cmluZ3MuYWRkKHZhbHVl
KSk7CisgICAgcmV0dXJuIElkZW50aWZpZXIodm0sIHZtLT5udW1lcmljU3RyaW5ncy5hZGQodmFs
dWUpKTsKIH0KIAogI2lmbmRlZiBOREVCVUcKIAotdm9pZCBJZGVudGlmaWVyOjpjaGVja0N1cnJl
bnRJZGVudGlmaWVyVGFibGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQordm9pZCBJZGVudGlm
aWVyOjpjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUoVk0qIHZtKQogewogICAgIC8vIENoZWNr
IHRoZSBpZGVudGlmaWVyIHRhYmxlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgdGhyZWFkc3BlY2lm
aWMgbWF0Y2hlcyB0aGUKLSAgICAvLyBnbG9iYWxEYXRhJ3MgaWRlbnRpZmllciB0YWJsZS4KLSAg
ICBBU1NFUlRfVU5VU0VEKGdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZSA9
PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpKTsKKyAgICAvLyB2bSdz
IGlkZW50aWZpZXIgdGFibGUuCisgICAgQVNTRVJUX1VOVVNFRCh2bSwgdm0tPmlkZW50aWZpZXJU
YWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpKTsKIH0KIAog
dm9pZCBJZGVudGlmaWVyOjpjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUoRXhlY1N0YXRlKiBl
eGVjKQogewotICAgIGNoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZSgmZXhlYy0+Z2xvYmFsRGF0
YSgpKTsKKyAgICBjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUoJmV4ZWMtPnZtKCkpOwogfQog
CiAjZWxzZQogCiAvLyBUaGVzZSBvbmx5IGV4aXN0cyBzbyB0aGF0IG91ciBleHBvcnRzIGFyZSB0
aGUgc2FtZSBmb3IgZGVidWcgYW5kIHJlbGVhc2UgYnVpbGRzLgogLy8gVGhpcyB3b3VsZCBiZSBh
biBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpLCBidXQgd2UncmUgaW4gTkRFQlVHIG9ubHkg
Y29kZSBoZXJlIQotTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIElkZW50aWZpZXI6OmNoZWNr
Q3VycmVudElkZW50aWZpZXJUYWJsZShKU0dsb2JhbERhdGEqKSB7IENSQVNIKCk7IH0KK05PX1JF
VFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBJZGVudGlmaWVyOjpjaGVja0N1cnJlbnRJZGVudGlmaWVy
VGFibGUoVk0qKSB7IENSQVNIKCk7IH0KIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBJZGVu
dGlmaWVyOjpjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUoRXhlY1N0YXRlKikgeyBDUkFTSCgp
OyB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRp
Zmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50
aWZpZXIuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAjaWZuZGVm
IElkZW50aWZpZXJfaAogI2RlZmluZSBJZGVudGlmaWVyX2gKIAotI2luY2x1ZGUgIkpTR2xvYmFs
RGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+
CiAjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CkBAIC00MiwxNSArNDIsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBs
YXRlPHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KICAgICAgICAgSWRlbnRpZmllcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJzQ291bnRdKSA6IG1f
c3RyaW5nKGFkZChleGVjLCBjaGFyYWN0ZXJzKSkgeyB9CiAgICAgICAgIHRlbXBsYXRlPHVuc2ln
bmVkIGNoYXJhY3RlcnNDb3VudD4KLSAgICAgICAgSWRlbnRpZmllcihKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJzQ291bnRdKSA6IG1f
c3RyaW5nKGFkZChnbG9iYWxEYXRhLCBjaGFyYWN0ZXJzKSkgeyB9CisgICAgICAgIElkZW50aWZp
ZXIoVk0qIHZtLCBjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFjdGVyc0NvdW50XSkgOiBt
X3N0cmluZyhhZGQodm0sIGNoYXJhY3RlcnMpKSB7IH0KIAogICAgICAgICBJZGVudGlmaWVyKEV4
ZWNTdGF0ZSogZXhlYywgU3RyaW5nSW1wbCogcmVwKSA6IG1fc3RyaW5nKGFkZChleGVjLCByZXAp
KSB7IH0KICAgICAgICAgSWRlbnRpZmllcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYg
cykgOiBtX3N0cmluZyhhZGQoZXhlYywgcy5pbXBsKCkpKSB7IH0KIAotICAgICAgICBJZGVudGlm
aWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgTENoYXIqIHMsIGludCBsZW5ndGgp
IDogbV9zdHJpbmcoYWRkKGdsb2JhbERhdGEsIHMsIGxlbmd0aCkpIHsgfQotICAgICAgICBJZGVu
dGlmaWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVUNoYXIqIHMsIGludCBsZW5n
dGgpIDogbV9zdHJpbmcoYWRkKGdsb2JhbERhdGEsIHMsIGxlbmd0aCkpIHsgfQotICAgICAgICBJ
ZGVudGlmaWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU3RyaW5nSW1wbCogcmVwKSA6IG1f
c3RyaW5nKGFkZChnbG9iYWxEYXRhLCByZXApKSB7IH0gCi0gICAgICAgIElkZW50aWZpZXIoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBTdHJpbmcmIHMpIDogbV9zdHJpbmcoYWRkKGds
b2JhbERhdGEsIHMuaW1wbCgpKSkgeyB9CisgICAgICAgIElkZW50aWZpZXIoVk0qIHZtLCBjb25z
dCBMQ2hhciogcywgaW50IGxlbmd0aCkgOiBtX3N0cmluZyhhZGQodm0sIHMsIGxlbmd0aCkpIHsg
fQorICAgICAgICBJZGVudGlmaWVyKFZNKiB2bSwgY29uc3QgVUNoYXIqIHMsIGludCBsZW5ndGgp
IDogbV9zdHJpbmcoYWRkKHZtLCBzLCBsZW5ndGgpKSB7IH0KKyAgICAgICAgSWRlbnRpZmllcihW
TSogdm0sIFN0cmluZ0ltcGwqIHJlcCkgOiBtX3N0cmluZyhhZGQodm0sIHJlcCkpIHsgfSAKKyAg
ICAgICAgSWRlbnRpZmllcihWTSogdm0sIGNvbnN0IFN0cmluZyYgcykgOiBtX3N0cmluZyhhZGQo
dm0sIHMuaW1wbCgpKSkgeyB9CiAKICAgICAgICAgY29uc3QgU3RyaW5nJiBzdHJpbmcoKSBjb25z
dCB7IHJldHVybiBtX3N0cmluZzsgfQogICAgICAgICBTdHJpbmdJbXBsKiBpbXBsKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJpbmcuaW1wbCgpOyB9CkBAIC02MCwxNCArNjAsMTQgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIAogICAgICAgICBDU3RyaW5nIGFzY2lpKCkgY29uc3QgeyByZXR1cm4g
bV9zdHJpbmcuYXNjaWkoKTsgfQogCi0gICAgICAgIHN0YXRpYyBJZGVudGlmaWVyIGNyZWF0ZUxD
aGFyRnJvbVVDaGFyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVUNoYXIqIHMsIGlu
dCBsZW5ndGgpIHsgcmV0dXJuIElkZW50aWZpZXIoZ2xvYmFsRGF0YSwgYWRkOChnbG9iYWxEYXRh
LCBzLCBsZW5ndGgpKTsgfQorICAgICAgICBzdGF0aWMgSWRlbnRpZmllciBjcmVhdGVMQ2hhckZy
b21VQ2hhcihWTSogdm0sIGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVuZ3RoKSB7IHJldHVybiBJZGVu
dGlmaWVyKHZtLCBhZGQ4KHZtLCBzLCBsZW5ndGgpKTsgfQogCiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBJZGVudGlmaWVyIGZyb20oRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCB5
KTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIElkZW50aWZpZXIgZnJvbShFeGVj
U3RhdGUqIGV4ZWMsIGludCB5KTsKICAgICAgICAgc3RhdGljIElkZW50aWZpZXIgZnJvbShFeGVj
U3RhdGUqIGV4ZWMsIGRvdWJsZSB5KTsKLSAgICAgICAgc3RhdGljIElkZW50aWZpZXIgZnJvbShK
U0dsb2JhbERhdGEqLCB1bnNpZ25lZCB5KTsKLSAgICAgICAgc3RhdGljIElkZW50aWZpZXIgZnJv
bShKU0dsb2JhbERhdGEqLCBpbnQgeSk7Ci0gICAgICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb20o
SlNHbG9iYWxEYXRhKiwgZG91YmxlIHkpOworICAgICAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9t
KFZNKiwgdW5zaWduZWQgeSk7CisgICAgICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb20oVk0qLCBp
bnQgeSk7CisgICAgICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb20oVk0qLCBkb3VibGUgeSk7CiAK
ICAgICAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5pc051bGwoKTsg
fQogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5pc0VtcHR5
KCk7IH0KQEAgLTg3LDcgKzg3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0IFN0cmluZ0ltcGwqIGIpIHsgcmV0
dXJuIDo6ZXF1YWwoYSwgYik7IH0KIAogICAgICAgICAvLyBPbmx5IHRvIGJlIHVzZWQgd2l0aCBz
dHJpbmcgbGl0ZXJhbHMuCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFk
ZChKU0dsb2JhbERhdGEqLCBjb25zdCBjaGFyKik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IGFkZChWTSosIGNvbnN0IGNoYXIqKTsKICAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKEV4ZWNTdGF0ZSosIGNvbnN0
IGNoYXIqKTsKIAogICAgIHByaXZhdGU6CkBAIC05OSw4ICs5OSw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBJZGVudGlmaWVyJiBhLCBjb25zdCBJ
ZGVudGlmaWVyJiBiKSB7IHJldHVybiBhLm1fc3RyaW5nLmltcGwoKSA9PSBiLm1fc3RyaW5nLmlt
cGwoKTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBJZGVudGlmaWVyJiBhLCBj
b25zdCBMQ2hhciogYikgeyByZXR1cm4gZXF1YWwoYS5tX3N0cmluZy5pbXBsKCksIGIpOyB9CiAK
LSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IGFkZChKU0dsb2JhbERhdGEqLCBjb25zdCBUKiwgaW50IGxlbmd0aCk7Ci0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZDgoSlNHbG9iYWxEYXRhKiwgY29uc3QgVUNo
YXIqLCBpbnQgbGVuZ3RoKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChWTSosIGNvbnN0IFQqLCBpbnQgbGVuZ3RoKTsKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkOChWTSosIGNvbnN0IFVDaGFy
KiwgaW50IGxlbmd0aCk7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBBTFdBWVNfSU5M
SU5FIHN0YXRpYyBib29sIGNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhUKTsKIAogICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoRXhlY1N0YXRlKiBleGVjLCBTdHJp
bmdJbXBsKiByKQpAQCAtMTEyLDIxICsxMTIsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHI7CiAgICAgICAgICAgICByZXR1cm4gYWRkU2xvd0Nhc2UoZXhlYywg
cik7CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRk
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU3RyaW5nSW1wbCogcikKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKFZNKiB2bSwgU3RyaW5nSW1wbCogcikKICAgICAg
ICAgewogI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgIGNoZWNrQ3VycmVudElkZW50aWZpZXJU
YWJsZShnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIGNoZWNrQ3VycmVudElkZW50aWZpZXJUYWJs
ZSh2bSk7CiAjZW5kaWYKICAgICAgICAgICAgIGlmIChyLT5pc0lkZW50aWZpZXIoKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gcjsKLSAgICAgICAgICAgIHJldHVybiBhZGRTbG93Q2FzZShnbG9i
YWxEYXRhLCByKTsKKyAgICAgICAgICAgIHJldHVybiBhZGRTbG93Q2FzZSh2bSwgcik7CiAgICAg
ICAgIH0KIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBhZGRTbG93Q2FzZShFeGVjU3RhdGUqLCBTdHJpbmdJbXBsKiByKTsKLSAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkU2xvd0Nh
c2UoSlNHbG9iYWxEYXRhKiwgU3RyaW5nSW1wbCogcik7CisgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZFNsb3dDYXNlKFZNKiwgU3RyaW5n
SW1wbCogcik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY2hlY2tD
dXJyZW50SWRlbnRpZmllclRhYmxlKEV4ZWNTdGF0ZSopOwotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUoSlNHbG9iYWxEYXRh
Kik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGNoZWNrQ3VycmVudElk
ZW50aWZpZXJUYWJsZShWTSopOwogICAgIH07CiAKICAgICB0ZW1wbGF0ZSA8PiBBTFdBWVNfSU5M
SU5FIGJvb2wgSWRlbnRpZmllcjo6Y2FuVXNlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKExDaGFyKQpA
QCAtMTcwLDE4ICsxNzAsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPgotICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6
YWRkKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVCogcywgaW50IGxlbmd0aCkKKyAg
ICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZChWTSogdm0sIGNvbnN0IFQq
IHMsIGludCBsZW5ndGgpCiAgICAgewogICAgICAgICBpZiAobGVuZ3RoID09IDEpIHsKICAgICAg
ICAgICAgIFQgYyA9IHNbMF07CiAgICAgICAgICAgICBpZiAoY2FuVXNlU2luZ2xlQ2hhcmFjdGVy
U3RyaW5nKGMpKQotICAgICAgICAgICAgICAgIHJldHVybiBhZGQoZ2xvYmFsRGF0YSwgZ2xvYmFs
RGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChjKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGFkZCh2bSwgdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJT
dHJpbmdSZXAoYykpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIWxlbmd0aCkK
ICAgICAgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgpOwogICAgICAgICBDaGFyQnVm
ZmVyPFQ+IGJ1ZiA9IHsgcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCkgfTsKLSAgICAg
ICAgSGFzaFNldDxTdHJpbmdJbXBsKj46OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBnbG9iYWxEYXRh
LT5pZGVudGlmaWVyVGFibGUtPmFkZDxDaGFyQnVmZmVyPFQ+LCBJZGVudGlmaWVyQ2hhckJ1ZmZl
clRyYW5zbGF0b3I8VD4gPihidWYpOworICAgICAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPjo6QWRk
UmVzdWx0IGFkZFJlc3VsdCA9IHZtLT5pZGVudGlmaWVyVGFibGUtPmFkZDxDaGFyQnVmZmVyPFQ+
LCBJZGVudGlmaWVyQ2hhckJ1ZmZlclRyYW5zbGF0b3I8VD4gPihidWYpOwogICAgICAgICAKICAg
ICAgICAgLy8gSWYgdGhlIHN0cmluZyBpcyBuZXdseS10cmFuc2xhdGVkLCB0aGVuIHdlIG5lZWQg
dG8gYWRvcHQgaXQuCiAgICAgICAgIC8vIFRoZSBib29sZWFuIGluIHRoZSBwYWlyIHRlbGxzIHVz
IGlmIHRoYXQgaXMgc28uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRl
cm5hbEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDI2ICszNSwyNiBAQCBBU1NFUlRfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUihJbnRlcm5h
bEZ1CiBjb25zdCBDbGFzc0luZm8gSW50ZXJuYWxGdW5jdGlvbjo6c19pbmZvID0geyAiRnVuY3Rp
b24iLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEludGVybmFsRnVu
Y3Rpb24pIH07CiAKIEludGVybmFsRnVuY3Rpb246OkludGVybmFsRnVuY3Rpb24oSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBKU0Rlc3Ry
dWN0aWJsZU9iamVjdChnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKQorICAg
IDogSlNEZXN0cnVjdGlibGVPYmplY3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBzdHJ1Y3R1cmUpCiB7
CiB9CiAKLXZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIEludGVybmFsRnVuY3Rpb246
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogICAgIEFTU0VSVChtZXRob2RUYWJs
ZSgpLT5nZXRDYWxsRGF0YSAhPSBJbnRlcm5hbEZ1bmN0aW9uOjpzX2luZm8ubWV0aG9kVGFibGUu
Z2V0Q2FsbERhdGEpOwotICAgIHB1dERpcmVjdChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnByb3Bl
cnR5TmFtZXMtPm5hbWUsIGpzU3RyaW5nKCZnbG9iYWxEYXRhLCBuYW1lKSwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+bmFtZSwganNTdHJpbmcoJnZtLCBuYW1lKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9u
dEVudW0pOwogfQogCiBjb25zdCBTdHJpbmcmIEludGVybmFsRnVuY3Rpb246Om5hbWUoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIHJldHVybiBhc1N0cmluZyhnZXREaXJlY3QoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBleGVjLT5nbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+bmFtZSkpLT50cnlHZXRW
YWx1ZSgpOworICAgIHJldHVybiBhc1N0cmluZyhnZXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+
dm0oKS5wcm9wZXJ0eU5hbWVzLT5uYW1lKSktPnRyeUdldFZhbHVlKCk7CiB9CiAKIGNvbnN0IFN0
cmluZyBJbnRlcm5hbEZ1bmN0aW9uOjpkaXNwbGF5TmFtZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgSlNWYWx1ZSBkaXNwbGF5TmFtZSA9IGdldERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4
ZWMtPmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5kaXNwbGF5TmFtZSk7CisgICAgSlNWYWx1
ZSBkaXNwbGF5TmFtZSA9IGdldERpcmVjdChleGVjLT52bSgpLCBleGVjLT52bSgpLnByb3BlcnR5
TmFtZXMtPmRpc3BsYXlOYW1lKTsKICAgICAKICAgICBpZiAoZGlzcGxheU5hbWUgJiYgaXNKU1N0
cmluZyhkaXNwbGF5TmFtZSkpCiAgICAgICAgIHJldHVybiBhc1N0cmluZyhkaXNwbGF5TmFtZSkt
PnRyeUdldFZhbHVlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRl
cm5hbEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50ZXJuYWxGdW5jdGlvbi5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDkgKzQxLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGNvbnN0IFN0cmluZyBkaXNwbGF5
TmFtZShFeGVjU3RhdGUqKTsKICAgICAgICAgY29uc3QgU3RyaW5nIGNhbGN1bGF0ZWREaXNwbGF5
TmFtZShFeGVjU3RhdGUqKTsKIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvKSAKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
bykgCiAgICAgICAgIHsgCi0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsgCisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7IAogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC01MSw3
ICs1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIElu
dGVybmFsRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAotICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYsIGNvbnN0
IFN0cmluZyYgbmFtZSk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAgICAgICAgIHN0YXRpYyBDYWxsVHlw
ZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOwogICAgIH07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FQSVZhbHVlV3JhcHBlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmgJKHJldmlz
aW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQVBJVmFsdWVX
cmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDkgKzM3LDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7
IH0KIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQVBJVmFsdWVXcmFwcGVyVHlwZSwgT3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMpLCAmc19pbmZv
KTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKEFQSVZhbHVlV3JhcHBlclR5cGUsIE92ZXJyaWRlc1Zpc2l0
Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzKSwgJnNfaW5mbyk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5m
byBzX2luZm87CkBAIC01NCwxNCArNTQsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJvdGVj
dGVkOgogICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB2YWx1ZSkKICAgICAgICAgewotICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhl
Yy0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgICAgIG1fdmFsdWUuc2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhl
Yy0+dm0oKSk7CisgICAgICAgICAgICBtX3ZhbHVlLnNldChleGVjLT52bSgpLCB0aGlzLCB2YWx1
ZSk7CiAgICAgICAgICAgICBBU1NFUlQoIXZhbHVlLmlzQ2VsbCgpKTsKICAgICAgICAgfQogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgSlNBUElWYWx1ZVdyYXBwZXIoRXhlY1N0YXRlKiBleGVjKQot
ICAgICAgICAgICAgOiBKU0NlbGwoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRh
KCkuYXBpV3JhcHBlclN0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgICAgIDogSlNDZWxsKGV4ZWMt
PnZtKCksIGV4ZWMtPnZtKCkuYXBpV3JhcHBlclN0cnVjdHVyZS5nZXQoKSkKICAgICAgICAgewog
ICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZh
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
Y3RpdmF0aW9uLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBA
QCBpbmxpbmUgYm9vbCBKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxlR2V0CiAKIGlubGluZSBib29s
IEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXQoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogewotICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6
aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzKSk7CiAgICAgCiAgICAgU3ltYm9sVGFibGVF
bnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCktPmlubGluZUdldChwcm9wZXJ0eU5hbWUucHVibGlj
TmFtZSgpKTsKQEAgLTEwMiw3ICsxMDIsNyBAQCBpbmxpbmUgYm9vbCBKU0FjdGl2YXRpb246OnN5
bWJvbFRhYmxlUHV0CiAgICAgaWYgKGlzVG9ybk9mZigpICYmICFpc1ZhbGlkKGVudHJ5KSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5z
ZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgIHJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5k
ZXgoKSkuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEy
NSw3ICsxMjUsNyBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0CiAg
ICAgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAotaW5saW5lIGJvb2wgSlNBY3RpdmF0aW9uOjpz
eW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRl
cykKK2lubGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRl
cyhWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFw
OjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKICAgICAKQEAgLTEzOCw3ICsxMzgs
NyBAQCBpbmxpbmUgYm9vbCBKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxlUHV0CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7Ci0gICAg
cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUp
OworICAgIHJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE1Nyw3ICsxNTcsNyBAQCBib29sIEpTQWN0aXZh
dGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEpTCiAgICAgaWYgKHRoaXNPYmplY3QtPnN5bWJvbFRh
YmxlR2V0KHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
aWYgKEpTVmFsdWUgdmFsdWUgPSB0aGlzT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBwcm9wZXJ0eU5hbWUpKSB7CisgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSB0aGlzT2JqZWN0
LT5nZXREaXJlY3QoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKSkgewogICAgICAgICBzbG90LnNl
dFZhbHVlKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMjAxLDcgKzIw
MSw3IEBAIHZvaWQgSlNBY3RpdmF0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGUKICAgICAvLyBw
cm9wZXJ0aWVzIGFyZSBub24tc3RhbmRhcmQgZXh0ZW5zaW9ucyB0aGF0IG90aGVyIGltcGxlbWVu
dGF0aW9ucyBkbyBub3QKICAgICAvLyBleHBvc2UgaW4gdGhlIGFjdGl2YXRpb24gb2JqZWN0Lgog
ICAgIEFTU0VSVCghdGhpc09iamVjdC0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpKTsKLSAg
ICB0aGlzT2JqZWN0LT5wdXRPd25EYXRhUHJvcGVydHkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICB0aGlzT2JqZWN0LT5wdXRPd25EYXRhUHJvcGVy
dHkoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKIC8vIEZJWE1F
OiBNYWtlIHRoaXMgZnVuY3Rpb24gaG9ub3IgUmVhZE9ubHkgKGNvbnN0KSBhbmQgRG9udEVudW0K
QEAgLTIxMCw3ICsyMTAsNyBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6cHV0RGlyZWN0VmlydHVhbChK
U09iCiAgICAgSlNBY3RpdmF0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQWN0aXZhdGlvbio+
KG9iamVjdCk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZh
bHVlKSA9PSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpKTsKIAotICAgIGlmICh0aGlzT2JqZWN0LT5z
eW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgYXR0cmlidXRlcykpCisgICAgaWYgKHRoaXNPYmplY3QtPnN5bWJvbFRhYmxl
UHV0V2l0aEF0dHJpYnV0ZXMoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmli
dXRlcykpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlIGRvbid0IGNhbGwgdGhyb3VnaCB0
byBKU09iamVjdCBiZWNhdXNlIF9fcHJvdG9fXyBhbmQgZ2V0dGVyL3NldHRlciAKQEAgLTI0NSw3
ICsyNDUsNyBAQCBKU1ZhbHVlIEpTQWN0aXZhdGlvbjo6YXJndW1lbnRzR2V0dGVyKEV4CiAgICAg
ICAgIHJldHVybiBhcmd1bWVudHM7CiAgICAgaW50IHJlYWxBcmd1bWVudHNSZWdpc3RlciA9IHVu
bW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rlcik7CiAKLSAgICBKU1Zh
bHVlIGFyZ3VtZW50cyA9IEpTVmFsdWUoQXJndW1lbnRzOjpjcmVhdGUoY2FsbEZyYW1lLT5nbG9i
YWxEYXRhKCksIGNhbGxGcmFtZSkpOworICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZShB
cmd1bWVudHM6OmNyZWF0ZShjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZSkpOwogICAgIGNhbGxG
cmFtZS0+dW5jaGVja2VkUihhcmd1bWVudHNSZWdpc3RlcikgPSBhcmd1bWVudHM7CiAgICAgY2Fs
bEZyYW1lLT51bmNoZWNrZWRSKHJlYWxBcmd1bWVudHNSZWdpc3RlcikgPSBhcmd1bWVudHM7CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24u
aAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
Y3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDIyICs0MSwyMiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAKICAgICBjbGFzcyBKU0FjdGl2YXRpb24gOiBwdWJsaWMgSlNWYXJpYWJsZU9i
amVjdCB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgSlNBY3RpdmF0aW9uKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgQ2FsbEZyYW1lKiwgU2hhcmVkU3ltYm9sVGFibGUqKTsKKyAgICAgICAgSlNB
Y3RpdmF0aW9uKFZNJiB2bSwgQ2FsbEZyYW1lKiwgU2hhcmVkU3ltYm9sVGFibGUqKTsKICAgICAK
ICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNWYXJpYWJsZU9iamVjdCBCYXNlOwogCi0g
ICAgICAgIHN0YXRpYyBKU0FjdGl2YXRpb24qIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICAgICAg
c3RhdGljIEpTQWN0aXZhdGlvbiogY3JlYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IENvZGVCbG9jayogY29kZUJsb2NrKQogICAgICAgICB7CiAgICAgICAgICAgICBTaGFyZWRTeW1i
b2xUYWJsZSogc3ltYm9sVGFibGUgPSBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCk7CiAgICAgICAg
ICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBuZXcgKAogICAgICAgICAgICAgICAgIE5v
dE51bGwsCiAgICAgICAgICAgICAgICAgYWxsb2NhdGVDZWxsPEpTQWN0aXZhdGlvbj4oCi0gICAg
ICAgICAgICAgICAgICAgIGdsb2JhbERhdGEuaGVhcCwKKyAgICAgICAgICAgICAgICAgICAgdm0u
aGVhcCwKICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvblNpemUoc3ltYm9sVGFibGUpCiAg
ICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgKSBKU0FjdGl2YXRpb24oZ2xvYmFsRGF0YSwg
Y2FsbEZyYW1lLCBzeW1ib2xUYWJsZSk7Ci0gICAgICAgICAgICBhY3RpdmF0aW9uLT5maW5pc2hD
cmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgICkgSlNBY3RpdmF0aW9uKHZtLCBjYWxs
RnJhbWUsIHN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgIGFjdGl2YXRpb24tPmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICAgICAgICAgIHJldHVybiBhY3RpdmF0aW9uOwogICAgICAgICB9CiAKQEAg
LTc1LDExICs3NSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgSlNPYmpl
Y3QqIHRvVGhpc09iamVjdChKU0NlbGwqLCBFeGVjU3RhdGUqKTsKIAotICAgICAgICB2b2lkIHRl
YXJPZmYoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIHZvaWQgdGVhck9mZihWTSYpOwogICAgICAg
ICAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykgeyByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8o
QWN0aXZhdGlvbk9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7IH0KKyAgICAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykgeyByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKEFjdGl2YXRpb25PYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyB9CiAKICAgICAgICAgV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPiYgcmVnaXN0ZXJBdChpbnQpIGNvbnN0OwogICAgICAgICBib29sIGlzVmFsaWRJ
bmRleChpbnQpIGNvbnN0OwpAQCAtOTYsNyArOTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgYm9vbCBzeW1ib2xUYWJsZUdldChQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYp
OwogICAgICAgICBib29sIHN5bWJvbFRhYmxlR2V0KFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiwgYm9vbCYgc2xvdElzV3JpdGVhYmxlKTsKICAgICAgICAgYm9vbCBzeW1ib2xUYWJsZVB1dChF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAg
ICAgICBib29sIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoSlNHbG9iYWxEYXRhJiwgUHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgYm9vbCBz
eW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKTsKIAogICAgICAgICBzdGF0aWMgSlNWYWx1ZSBhcmd1bWVudHNH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKICAgICAgICAgTkVWRVJf
SU5MSU5FIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldEFyZ3VtZW50c0dldHRlcigpOwpA
QCAtMTEwLDkgKzExMCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGV4dGVybiBpbnQgYWN0aXZh
dGlvbkNvdW50OwogICAgIGV4dGVybiBpbnQgYWxsVGhlVGhpbmdzQ291bnQ7CiAKLSAgICBpbmxp
bmUgSlNBY3RpdmF0aW9uOjpKU0FjdGl2YXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQorICAg
IGlubGluZSBKU0FjdGl2YXRpb246OkpTQWN0aXZhdGlvbihWTSYgdm0sIENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCiAgICAgICAgIDogQmFzZSgK
LSAgICAgICAgICAgIGdsb2JhbERhdGEsCisgICAgICAgICAgICB2bSwKICAgICAgICAgICAgIGNh
bGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCksCiAg
ICAgICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpLAogICAgICAgICAgICAgY2FsbEZyYW1l
LT5zY29wZSgpLApAQCAtMTQ5LDcgKzE0OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBy
ZXR1cm4gc3RvcmFnZU9mZnNldCgpIC0gKHN5bWJvbFRhYmxlLT5jYXB0dXJlU3RhcnQoKSAqIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKTsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBK
U0FjdGl2YXRpb246OnRlYXJPZmYoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIGlubGlu
ZSB2b2lkIEpTQWN0aXZhdGlvbjo6dGVhck9mZihWTSYgdm0pCiAgICAgewogICAgICAgICBBU1NF
UlQoIWlzVG9ybk9mZigpKTsKIApAQCAtMTU5LDcgKzE1OSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIGludCBjYXB0dXJlRW5kID0gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUVuZCgpOwog
ICAgICAgICBmb3IgKGludCBpID0gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCk7IGkgPCBj
YXB0dXJlRW5kOyArK2kpCi0gICAgICAgICAgICBkc3RbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHNyY1tpXS5nZXQoKSk7CisgICAgICAgICAgICBkc3RbaV0uc2V0KHZtLCB0aGlzLCBzcmNbaV0u
Z2V0KCkpOwogCiAgICAgICAgIG1fcmVnaXN0ZXJzID0gZHN0OwogICAgICAgICBBU1NFUlQoaXNU
b3JuT2ZmKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMCArNDgsMTAgQEAgQVNTRVJUX0hBU19U
UklWSUFMX0RFU1RSVUNUT1IoSlNBcnJheSk7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0FycmF5Ojpz
X2luZm8gPSB7IkFycmF5IiwgJkpTTm9uRmluYWxPYmplY3Q6OnNfaW5mbywgMCwgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU0FycmF5KX07CiAKLUJ1dHRlcmZseSogY3JlYXRlQXJyYXlCdXR0ZXJm
bHlJbkRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNp
Z25lZCBpbml0aWFsTGVuZ3RoKQorQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseUluRGlj
dGlvbmFyeUluZGV4aW5nTW9kZShWTSYgdm0sIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiB7CiAg
ICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZSgKLSAgICAgICAgZ2xv
YmFsRGF0YSwgMCwgMCwgdHJ1ZSwgSW5kZXhpbmdIZWFkZXIoKSwgQXJyYXlTdG9yYWdlOjpzaXpl
Rm9yKDApKTsKKyAgICAgICAgdm0sIDAsIDAsIHRydWUsIEluZGV4aW5nSGVhZGVyKCksIEFycmF5
U3RvcmFnZTo6c2l6ZUZvcigwKSk7CiAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaW5pdGlhbExlbmd0
aCk7CiAgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKDApOwpAQCAtNjcsNyArNjcsNyBAQCB2
b2lkIEpTQXJyYXk6OnNldExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0CiAgICAgaWYgKCFpc0xlbmd0
aFdyaXRhYmxlKCkgfHwgd3JpdGFibGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIGVudGVyRGljdGlv
bmFyeUluZGV4aW5nTW9kZShleGVjLT52bSgpKTsKIAogICAgIFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1hcCA9IGFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKTsKICAgICBBU1NFUlQobWFw
KTsKQEAgLTI0NCw5ICsyNDQsOSBAQCB2b2lkIEpTQXJyYXk6OmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lCiB9CiAKIC8vIFRoaXMgbWV0aG9kIG1ha2VzIHJvb20gaW4gdGhlIHZlY3RvciwgYnV0
IGxlYXZlcyB0aGUgbmV3IHNwYWNlIGZvciBjb3VudCBzbG90cyB1bmNsZWFyZWQuCi1ib29sIEpT
QXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgYm9v
bCBhZGRUb0Zyb250LCB1bnNpZ25lZCBjb3VudCkKK2Jvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50
U2xvd0Nhc2UoVk0mIHZtLCBib29sIGFkZFRvRnJvbnQsIHVuc2lnbmVkIGNvdW50KQogewotICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsK
KyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3JhZ2Uodm0pOwogICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCk7CiAgICAgdW5zaWdu
ZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwog
ICAgIHVuc2lnbmVkIHByb3BlcnR5U2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplKCk7
CkBAIC0yODYsNyArMjg2LDcgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShK
U0dsbwogICAgICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBjdXJyZW50Q2FwYWNpdHk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgw
LCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IoZGVzaXJlZENh
cGFjaXR5KSk7Ci0gICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFn
ZShuZXdTaXplLCAmbmV3QWxsb2NCYXNlKSkKKyAgICAgICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9j
YXRlU3RvcmFnZShuZXdTaXplLCAmbmV3QWxsb2NCYXNlKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gZGVzaXJlZENhcGFjaXR5OwogICAg
IH0KQEAgLTQwOCw5ICs0MDgsOSBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUq
IGV4ZWMsCiAgICAgICAgIGlmIChuZXdMZW5ndGggPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkg
ewogICAgICAgICAgICAgcmV0dXJuIHNldExlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCiAgICAgICAg
ICAgICAgICAgZXhlYywgbmV3TGVuZ3RoLCB0aHJvd0V4Y2VwdGlvbiwKLSAgICAgICAgICAgICAg
ICBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkpOwor
ICAgICAgICAgICAgICAgIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZXhlYy0+dm0o
KSkpOwogICAgICAgICB9Ci0gICAgICAgIGNyZWF0ZUluaXRpYWxVbmRlY2lkZWQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBuZXdMZW5ndGgpOworICAgICAgICBjcmVhdGVJbml0aWFsVW5kZWNpZGVkKGV4
ZWMtPnZtKCksIG5ld0xlbmd0aCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKICAg
ICBjYXNlIEFycmF5V2l0aFVuZGVjaWRlZDoKQEAgLTQyNCwxMCArNDI0LDEwIEBAIGJvb2wgSlNB
cnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgICAgICAgICAmJiAhaXNE
ZW5zZUVub3VnaEZvclZlY3RvcihuZXdMZW5ndGgsIGNvdW50RWxlbWVudHMoKSkpKSB7CiAgICAg
ICAgICAgICByZXR1cm4gc2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKICAgICAgICAgICAgICAg
ICBleGVjLCBuZXdMZW5ndGgsIHRocm93RXhjZXB0aW9uLAotICAgICAgICAgICAgICAgIGVuc3Vy
ZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgICAgICAgICBlbnN1
cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChuZXdM
ZW5ndGggPiBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIGVuc3Vy
ZUxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIG5ld0xlbmd0aCk7CisgICAgICAgICAgICBlbnN1
cmVMZW5ndGgoZXhlYy0+dm0oKSwgbmV3TGVuZ3RoKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkgPT0g
QXJyYXlXaXRoRG91YmxlKSB7CkBAIC01NDksMTkgKzU0OSwxOSBAQCB2b2lkIEpTQXJyYXk6OnB1
c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiB7CiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6IHsKLSAgICAgICAgY3JlYXRlSW5p
dGlhbFVuZGVjaWRlZChleGVjLT5nbG9iYWxEYXRhKCksIDApOworICAgICAgICBjcmVhdGVJbml0
aWFsVW5kZWNpZGVkKGV4ZWMtPnZtKCksIDApOwogICAgICAgICAvLyBGYWxsIHRocm91Z2guCiAg
ICAgfQogICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0aFVuZGVjaWRlZDogewotICAgICAgICBj
b252ZXJ0VW5kZWNpZGVkRm9yVmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB2YWx1ZSk7CisgICAg
ICAgIGNvbnZlcnRVbmRlY2lkZWRGb3JWYWx1ZShleGVjLT52bSgpLCB2YWx1ZSk7CiAgICAgICAg
IHB1c2goZXhlYywgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKICAg
ICBjYXNlIEFycmF5V2l0aEludDMyOiB7CiAgICAgICAgIGlmICghdmFsdWUuaXNJbnQzMigpKSB7
Ci0gICAgICAgICAgICBjb252ZXJ0SW50MzJGb3JWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIHZh
bHVlKTsKKyAgICAgICAgICAgIGNvbnZlcnRJbnQzMkZvclZhbHVlKGV4ZWMtPnZtKCksIHZhbHVl
KTsKICAgICAgICAgICAgIHB1c2goZXhlYywgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CkBAIC01ODksNyArNTg5LDcgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYQogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2J1dHRlcmZseS0+cHVi
bGljTGVuZ3RoKCk7CiAgICAgICAgIEFTU0VSVChsZW5ndGggPD0gbV9idXR0ZXJmbHktPnZlY3Rv
ckxlbmd0aCgpKTsKICAgICAgICAgaWYgKGxlbmd0aCA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5n
dGgoKSkgewotICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtsZW5ndGhdLnNl
dChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fYnV0dGVy
Zmx5LT5jb250aWd1b3VzKClbbGVuZ3RoXS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgdmFsdWUpOwog
ICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGggKyAxKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNjA3LDEzICs2MDcsMTMgQEAgdm9pZCBK
U0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgICAgICAKICAgICBjYXNlIEFy
cmF5V2l0aERvdWJsZTogewogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpIHsKLSAgICAg
ICAgICAgIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAg
ICAgICAgICAgIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoZXhlYy0+dm0oKSk7CiAgICAgICAg
ICAgICBwdXNoKGV4ZWMsIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICBkb3VibGUgdmFsdWVBc0RvdWJsZSA9IHZhbHVlLmFzTnVtYmVyKCk7CiAgICAgICAg
IGlmICh2YWx1ZUFzRG91YmxlICE9IHZhbHVlQXNEb3VibGUpIHsKLSAgICAgICAgICAgIGNvbnZl
cnREb3VibGVUb0NvbnRpZ3VvdXMoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgIGNv
bnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoZXhlYy0+dm0oKSk7CiAgICAgICAgICAgICBwdXNoKGV4
ZWMsIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNjUzLDcgKzY1
Myw3IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAg
Ly8gRmFzdCBjYXNlIC0gcHVzaCB3aXRoaW4gdmVjdG9yLCBhbHdheXMgdXBkYXRlIG1fbGVuZ3Ro
ICYgbV9udW1WYWx1ZXNJblZlY3Rvci4KICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFn
ZS0+bGVuZ3RoKCk7CiAgICAgICAgIGlmIChsZW5ndGggPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgo
KSkgewotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbGVuZ3RoXS5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rvclts
ZW5ndGhdLnNldChleGVjLT52bSgpLCB0aGlzLCB2YWx1ZSk7CiAgICAgICAgICAgICBzdG9yYWdl
LT5zZXRMZW5ndGgobGVuZ3RoICsgMSk7CiAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3I7CiAgICAgICAgICAgICByZXR1cm47CkBAIC03NTQsNyArNzU0LDcgQEAgYm9v
bCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFueUluZGV4aW5nVAogICAgICAgICAvLyBXZSBtYXkg
aGF2ZSB0byB3YWxrIHRoZSBlbnRpcmUgYXJyYXkgdG8gZG8gdGhlIHNoaWZ0LiBXZSdyZSB3aWxs
aW5nIHRvIGRvCiAgICAgICAgIC8vIHNvIG9ubHkgaWYgaXQncyBub3QgaG9ycmlibHkgc2xvdy4K
ICAgICAgICAgaWYgKG9sZExlbmd0aCAtIChzdGFydEluZGV4ICsgY291bnQpID49IE1JTl9TUEFS
U0VfQVJSQVlfSU5ERVgpCi0gICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0
b3JhZ2Uoc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxE
YXRhKCkpKTsKKyAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShz
dGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsKICAgICAg
ICAgCiAgICAgICAgIHVuc2lnbmVkIGVuZCA9IG9sZExlbmd0aCAtIGNvdW50OwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpIDwgZW5kOyArK2kpIHsKQEAgLTc2OCw3ICs3
NjgsNyBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUCiAgICAgICAg
ICAgICAgICAgLy8gYWJvdXQgaG9sZXMgKGF0IGxlYXN0IGZvciBub3cpLCBidXQgaXQgY2FuIGRl
dGVjdCB0aGVtIHF1aWNrbHkuIFNvCiAgICAgICAgICAgICAgICAgLy8gd2UgY29udmVydCB0byBh
cnJheSBzdG9yYWdlIGFuZCB0aGVuIGFsbG93IHRoZSBhcnJheSBzdG9yYWdlIHBhdGggdG8KICAg
ICAgICAgICAgICAgICAvLyBmaWd1cmUgaXQgb3V0LgotICAgICAgICAgICAgICAgIHJldHVybiBz
aGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlT
dG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBzaGlm
dENvdW50V2l0aEFycmF5U3RvcmFnZShzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9y
YWdlKGV4ZWMtPnZtKCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIE5vIG5lZWQg
Zm9yIGEgYmFycmllciBzaW5jZSB3ZSdyZSBqdXN0IG1vdmluZyBkYXRhIGFyb3VuZCBpbiB0aGUg
c2FtZSB2ZWN0b3IuCiAgICAgICAgICAgICAvLyBUaGlzIGlzIGluIGxpbmUgd2l0aCBvdXIgc3Rh
bmRpbmcgYXNzdW1wdGlvbiB0aGF0IHdlIHdvbid0IGhhdmUgYSBkZWxldGlvbgpAQCAtNzg5LDcg
Kzc4OSw3IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1QKICAgICAg
ICAgLy8gV2UgbWF5IGhhdmUgdG8gd2FsayB0aGUgZW50aXJlIGFycmF5IHRvIGRvIHRoZSBzaGlm
dC4gV2UncmUgd2lsbGluZyB0byBkbwogICAgICAgICAvLyBzbyBvbmx5IGlmIGl0J3Mgbm90IGhv
cnJpYmx5IHNsb3cuCiAgICAgICAgIGlmIChvbGRMZW5ndGggLSAoc3RhcnRJbmRleCArIGNvdW50
KSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKQotICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291
bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2Uo
ZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhB
cnJheVN0b3JhZ2Uoc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT52
bSgpKSk7CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBlbmQgPSBvbGRMZW5ndGggLSBjb3Vu
dDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsgaSA8IGVuZDsgKytpKSB7
CkBAIC04MDMsNyArODAzLDcgQEAgYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFueUluZGV4
aW5nVAogICAgICAgICAgICAgICAgIC8vIGFib3V0IGhvbGVzIChhdCBsZWFzdCBmb3Igbm93KSwg
YnV0IGl0IGNhbiBkZXRlY3QgdGhlbSBxdWlja2x5LiBTbwogICAgICAgICAgICAgICAgIC8vIHdl
IGNvbnZlcnQgdG8gYXJyYXkgc3RvcmFnZSBhbmQgdGhlbiBhbGxvdyB0aGUgYXJyYXkgc3RvcmFn
ZSBwYXRoIHRvCiAgICAgICAgICAgICAgICAgLy8gZmlndXJlIGl0IG91dC4KLSAgICAgICAgICAg
ICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRleCwgY291bnQs
IGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRleCwgY291bnQsIGVu
c3VyZUFycmF5U3RvcmFnZShleGVjLT52bSgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAvLyBObyBuZWVkIGZvciBhIGJhcnJpZXIgc2luY2Ugd2UncmUganVzdCBtb3ZpbmcgZGF0YSBh
cm91bmQgaW4gdGhlIHNhbWUgdmVjdG9yLgogICAgICAgICAgICAgLy8gVGhpcyBpcyBpbiBsaW5l
IHdpdGggb3VyIHN0YW5kaW5nIGFzc3VtcHRpb24gdGhhdCB3ZSB3b24ndCBoYXZlIGEgZGVsZXRp
b24KQEAgLTg1MCw3ICs4NTAsNyBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBcnJh
eVN0b3JhCiAgICAgICAgIHN0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGggKyBj
b3VudCk7CiAgICAgfSBlbHNlIGlmICghbW92ZUZyb250ICYmIHZlY3Rvckxlbmd0aCAtIGxlbmd0
aCA+PSBjb3VudCkKICAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5hcnJh
eVN0b3JhZ2UoKTsKLSAgICBlbHNlIGlmICh1bnNoaWZ0Q291bnRTbG93Q2FzZShleGVjLT5nbG9i
YWxEYXRhKCksIG1vdmVGcm9udCwgY291bnQpKQorICAgIGVsc2UgaWYgKHVuc2hpZnRDb3VudFNs
b3dDYXNlKGV4ZWMtPnZtKCksIG1vdmVGcm9udCwgY291bnQpKQogICAgICAgICBzdG9yYWdlID0g
YXJyYXlTdG9yYWdlKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJv
cihleGVjKTsKQEAgLTg4NiwxNCArODg2LDE0IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50
V2l0aEFueUluZGV4aW4KICAgICAgICAgLy8gV2UgbWF5IGhhdmUgdG8gd2FsayB0aGUgZW50aXJl
IGFycmF5IHRvIGRvIHRoZSB1bnNoaWZ0LiBXZSdyZSB3aWxsaW5nIHRvIGRvIHNvCiAgICAgICAg
IC8vIG9ubHkgaWYgaXQncyBub3QgaG9ycmlibHkgc2xvdy4KICAgICAgICAgaWYgKG9sZExlbmd0
aCAtIHN0YXJ0SW5kZXggPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkKLSAgICAgICAgICAgIHJl
dHVybiB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50
LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgICAgICBy
ZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBzdGFydEluZGV4LCBjb3Vu
dCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsKICAgICAgICAgCi0gICAgICAgIGVu
c3VyZUxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIG9sZExlbmd0aCArIGNvdW50KTsKKyAgICAg
ICAgZW5zdXJlTGVuZ3RoKGV4ZWMtPnZtKCksIG9sZExlbmd0aCArIGNvdW50KTsKICAgICAgICAg
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZExlbmd0aDsgaS0tID4gc3RhcnRJbmRleDsp
IHsKICAgICAgICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0u
Z2V0KCk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXYpKQotICAgICAgICAgICAgICAgIHJl
dHVybiB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50
LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgc3RhcnRJbmRleCwg
Y291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT52bSgpKSk7CiAgICAgICAgICAgICBtX2J1
dHRlcmZseS0+Y29udGlndW91cygpW2kgKyBjb3VudF0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2
KTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTkxMSwxNCArOTExLDE0IEBAIGJvb2wgSlNBcnJh
eTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW4KICAgICAgICAgLy8gV2UgbWF5IGhhdmUgdG8g
d2FsayB0aGUgZW50aXJlIGFycmF5IHRvIGRvIHRoZSB1bnNoaWZ0LiBXZSdyZSB3aWxsaW5nIHRv
IGRvIHNvCiAgICAgICAgIC8vIG9ubHkgaWYgaXQncyBub3QgaG9ycmlibHkgc2xvdy4KICAgICAg
ICAgaWYgKG9sZExlbmd0aCAtIHN0YXJ0SW5kZXggPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkK
LSAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0
YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7
CisgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBz
dGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsKICAgICAg
ICAgCi0gICAgICAgIGVuc3VyZUxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIG9sZExlbmd0aCAr
IGNvdW50KTsKKyAgICAgICAgZW5zdXJlTGVuZ3RoKGV4ZWMtPnZtKCksIG9sZExlbmd0aCArIGNv
dW50KTsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZExlbmd0aDsgaS0t
ID4gc3RhcnRJbmRleDspIHsKICAgICAgICAgICAgIGRvdWJsZSB2ID0gbV9idXR0ZXJmbHktPmNv
bnRpZ3VvdXNEb3VibGUoKVtpXTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2ICE9IHYpKQot
ICAgICAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMs
IHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgp
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uo
ZXhlYywgc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT52bSgpKSk7
CiAgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2kgKyBjb3VudF0g
PSB2OwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTA2NCw5ICsxMDY0LDkgQEAgdm9pZCBKU0Fy
cmF5Ojpzb3J0TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZQogdGVtcGxhdGUgPEluZGV4aW5nVHlwZT4g
c3RydWN0IENvbnRpZ3VvdXNUeXBlQWNjZXNzb3IgewogICAgIHR5cGVkZWYgV3JpdGVCYXJyaWVy
PFVua25vd24+IFR5cGU7CiAgICAgc3RhdGljIEpTVmFsdWUgZ2V0QXNWYWx1ZShDb250aWd1b3Vz
RGF0YTxUeXBlPiBkYXRhLCBzaXplX3QgaSkgeyByZXR1cm4gZGF0YVtpXS5nZXQoKTsgfQotICAg
IHN0YXRpYyB2b2lkIHNldFdpdGhWYWx1ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQXJy
YXkqIHRoaXNWYWx1ZSwgQ29udGlndW91c0RhdGE8VHlwZT4gZGF0YSwgc2l6ZV90IGksIEpTVmFs
dWUgdmFsdWUpCisgICAgc3RhdGljIHZvaWQgc2V0V2l0aFZhbHVlKFZNJiB2bSwgSlNBcnJheSog
dGhpc1ZhbHVlLCBDb250aWd1b3VzRGF0YTxUeXBlPiBkYXRhLCBzaXplX3QgaSwgSlNWYWx1ZSB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIGRhdGFbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXNWYWx1ZSwg
dmFsdWUpOworICAgICAgICBkYXRhW2ldLnNldCh2bSwgdGhpc1ZhbHVlLCB2YWx1ZSk7CiAgICAg
fQogICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VEYXRhUmVmZXJlbmNlKENvbnRpZ3VvdXNEYXRhPFR5
cGU+KiBvdXREYXRhLCBDb250aWd1b3VzSlNWYWx1ZXMgaW5EYXRhKQogICAgIHsKQEAgLTEwNzcs
NyArMTA3Nyw3IEBAIHRlbXBsYXRlIDxJbmRleGluZ1R5cGU+IHN0cnVjdCBDb250aWd1b3UKIHRl
bXBsYXRlIDw+IHN0cnVjdCBDb250aWd1b3VzVHlwZUFjY2Vzc29yPEFycmF5V2l0aERvdWJsZT4g
ewogICAgIHR5cGVkZWYgZG91YmxlIFR5cGU7CiAgICAgc3RhdGljIEpTVmFsdWUgZ2V0QXNWYWx1
ZShDb250aWd1b3VzRGF0YTxUeXBlPiBkYXRhLCBzaXplX3QgaSkgeyBBU1NFUlQoZGF0YVtpXSA9
PSBkYXRhW2ldKTsgcmV0dXJuIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIGRhdGFb
aV0pOyB9Ci0gICAgc3RhdGljIHZvaWQgc2V0V2l0aFZhbHVlKEpTR2xvYmFsRGF0YSYsIEpTQXJy
YXkqLCBDb250aWd1b3VzRGF0YTxUeXBlPiBkYXRhLCBzaXplX3QgaSwgSlNWYWx1ZSB2YWx1ZSkK
KyAgICBzdGF0aWMgdm9pZCBzZXRXaXRoVmFsdWUoVk0mLCBKU0FycmF5KiwgQ29udGlndW91c0Rh
dGE8VHlwZT4gZGF0YSwgc2l6ZV90IGksIEpTVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICBk
YXRhW2ldID0gdmFsdWUuYXNOdW1iZXIoKTsKICAgICB9CkBAIC0xMDk0LDcgKzEwOTQsNyBAQCB2
b2lkIEpTQXJyYXk6OnNvcnRDb21wYWN0ZWRWZWN0b3IoRXhlY1N0CiAgICAgaWYgKCFyZWxldmFu
dExlbmd0aCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogCiAg
ICAgLy8gQ29udmVydGluZyBKYXZhU2NyaXB0IHZhbHVlcyB0byBzdHJpbmdzIGNhbiBiZSBleHBl
bnNpdmUsIHNvIHdlIGRvIGl0IG9uY2UgdXAgZnJvbnQgYW5kIHNvcnQgYmFzZWQgb24gdGhhdC4K
ICAgICAvLyBUaGlzIGlzIGEgY29uc2lkZXJhYmxlIGltcHJvdmVtZW50IG92ZXIgZG9pbmcgaXQg
dHdpY2UgcGVyIGNvbXBhcmlzb24sIHRob3VnaCBpdCByZXF1aXJlcyBhIGxhcmdlIHRlbXBvcmFy
eQpAQCAtMTE1MSwxMiArMTE1MSwxMiBAQCB2b2lkIEpTQXJyYXk6OnNvcnRDb21wYWN0ZWRWZWN0
b3IoRXhlY1N0CiAgICAgY2FzZSBBcnJheVdpdGhJbnQzMjoKICAgICBjYXNlIEFycmF5V2l0aERv
dWJsZToKICAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6Ci0gICAgICAgIGVuc3VyZUxlbmd0
aChnbG9iYWxEYXRhLCByZWxldmFudExlbmd0aCk7CisgICAgICAgIGVuc3VyZUxlbmd0aCh2bSwg
cmVsZXZhbnRMZW5ndGgpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgICAgIGlmIChhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVu
Z3RoKCkgPCByZWxldmFudExlbmd0aCkgewotICAgICAgICAgICAgaW5jcmVhc2VWZWN0b3JMZW5n
dGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWxldmFudExlbmd0aCk7CisgICAgICAgICAgICBpbmNy
ZWFzZVZlY3Rvckxlbmd0aChleGVjLT52bSgpLCByZWxldmFudExlbmd0aCk7CiAgICAgICAgICAg
ICBDb250aWd1b3VzVHlwZUFjY2Vzc29yPGluZGV4aW5nVHlwZT46OnJlcGxhY2VEYXRhUmVmZXJl
bmNlKCZkYXRhLCBhcnJheVN0b3JhZ2UoKS0+dmVjdG9yKCkpOwogICAgICAgICB9CiAgICAgICAg
IGlmIChhcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCkgPCByZWxldmFudExlbmd0aCkKQEAgLTExNjgs
NyArMTE2OCw3IEBAIHZvaWQgSlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3RvcihFeGVjU3QKICAg
ICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbGV2YW50TGVuZ3RoOyBpKyspCi0g
ICAgICAgIENvbnRpZ3VvdXNUeXBlQWNjZXNzb3I8aW5kZXhpbmdUeXBlPjo6c2V0V2l0aFZhbHVl
KGdsb2JhbERhdGEsIHRoaXMsIGRhdGEsIGksIHZhbHVlc1tpXS5maXJzdCk7CisgICAgICAgIENv
bnRpZ3VvdXNUeXBlQWNjZXNzb3I8aW5kZXhpbmdUeXBlPjo6c2V0V2l0aFZhbHVlKHZtLCB0aGlz
LCBkYXRhLCBpLCB2YWx1ZXNbaV0uZmlyc3QpOwogICAgIAogICAgIEhlYXA6OmhlYXAodGhpcykt
PnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwogfQpAQCAtMTM4NywxMyArMTM4NywxMyBAQCB2
b2lkIEpTQXJyYXk6OnNvcnRWZWN0b3IoRXhlY1N0YXRlKiBleGVjCiAgICAgLy8gQ29weSB0aGUg
dmFsdWVzIGJhY2sgaW50byBtX3N0b3JhZ2UuCiAgICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3Rv
ckZvckFycmF5Q29tcGFyZSwgNDQ+OjpJdGVyYXRvciBpdGVyOwogICAgIGl0ZXIuc3RhcnRfaXRl
cl9sZWFzdCh0cmVlKTsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9i
YWxEYXRhKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZWxlbWVudHNUb0V4dHJhY3RUaHJlc2hvbGQ7ICsraSkgewogICAgICAgICBBU1NF
UlQoaSA8IGJ1dHRlcmZseSgpLT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgIGlmIChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoRG91YmxlKQogICAgICAgICAgICAgYnV0
dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IHRyZWUuYWJzdHJhY3RvcigpLm1fbm9k
ZXNbKml0ZXJdLnZhbHVlLmFzTnVtYmVyKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN1
cnJlbnRJbmRleGluZ0RhdGEoKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJlZS5hYnN0cmFj
dG9yKCkubV9ub2Rlc1sqaXRlcl0udmFsdWUpOworICAgICAgICAgICAgY3VycmVudEluZGV4aW5n
RGF0YSgpW2ldLnNldCh2bSwgdGhpcywgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1sqaXRlcl0u
dmFsdWUpOwogICAgICAgICArK2l0ZXI7CiAgICAgfQogICAgIC8vIFB1dCB1bmRlZmluZWQgdmFs
dWVzIGJhY2sgaW4uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5o
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE5ICszOSwxOSBAQCBwdWJsaWM6CiAgICAgdHlw
ZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKIHByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBK
U0FycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1
dHRlcmZseSogYnV0dGVyZmx5KQotICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0
YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCisgICAgZXhwbGljaXQgSlNBcnJheShWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKKyAgICAgICAgOiBKU05v
bkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICB7CiAgICAgfQogCiBw
dWJsaWM6Ci0gICAgc3RhdGljIEpTQXJyYXkqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1
cmUqLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gMCk7CisgICAgc3RhdGljIEpTQXJyYXkqIGNy
ZWF0ZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSAwKTsKIAogICAg
IC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgaXMgdXNlZCBmb3IgZmFzdCBjb25zdHJ1Y3Rpb24g
b2YgYXJyYXlzIHdob3NlIHNpemUgYW5kCiAgICAgLy8gY29udGVudHMgYXJlIGtub3duIGF0IHRp
bWUgb2YgY3JlYXRpb24uIENsaWVudHMgb2YgdGhpcyBpbnRlcmZhY2UgbXVzdDoKICAgICAvLyAg
IC0gbnVsbC1jaGVjayB0aGUgcmVzdWx0IChpbmRpY2F0aW5nIG91dCBvZiBtZW1vcnksIG9yIG90
aGVyd2lzZSB1bmFibGUgdG8gYWxsb2NhdGUgdmVjdG9yKS4KICAgICAvLyAgIC0gY2FsbCAnaW5p
dGlhbGl6ZUluZGV4JyBmb3IgYWxsIHByb3BlcnRpZXMgaW4gc2VxdWVuY2UsIGZvciAwIDw9IGkg
PCBpbml0aWFsTGVuZ3RoLgotICAgIHN0YXRpYyBKU0FycmF5KiB0cnlDcmVhdGVVbmluaXRpYWxp
emVkKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpOwor
ICAgIHN0YXRpYyBKU0FycmF5KiB0cnlDcmVhdGVVbmluaXRpYWxpemVkKFZNJiwgU3RydWN0dXJl
KiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CiAKQEAgLTg0
LDcgKzg0LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBzaGlmdENvdW50Rm9yU2hpZnQoRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShzdGFydEluZGV4LCBjb3Vu
dCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAgICByZXR1
cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFy
cmF5U3RvcmFnZShleGVjLT52bSgpKSk7CiAgICAgfQogICAgIGJvb2wgc2hpZnRDb3VudEZvclNw
bGljZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50
KQogICAgIHsKQEAgLTEwNiw3ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIGJvb2wg
dW5zaGlmdENvdW50Rm9yU2hpZnQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4
LCB1bnNpZ25lZCBjb3VudCkKICAgICB7Ci0gICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRo
QXJyYXlTdG9yYWdlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2Uo
ZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQXJy
YXlTdG9yYWdlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhl
Yy0+dm0oKSkpOwogICAgIH0KICAgICBib29sIHVuc2hpZnRDb3VudEZvclNwbGljZShFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQogICAgIHsKQEAg
LTEyOSw5ICsxMjksOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaWxsQXJnTGlzdChFeGVjU3RhdGUq
LCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYpOwogICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEV4ZWNT
dGF0ZSosIENhbGxGcmFtZSosIHVpbnQzMl90IGxlbmd0aCk7CiAKLSAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgSW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZSkKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgSW5kZXhpbmdU
eXBlIGluZGV4aW5nVHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBpbmRleGluZ1R5cGUpOworICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIGluZGV4aW5nVHlwZSk7CiAg
ICAgfQogICAgICAgICAKIHByb3RlY3RlZDoKQEAgLTE1Niw3ICsxNTYsNyBAQCBwcml2YXRlOgog
CiAgICAgYm9vbCB1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KTsKICAgICBib29sIHVuc2hpZnRDb3Vu
dFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWdu
ZWQgY291bnQsIEFycmF5U3RvcmFnZSopOwotICAgIGJvb2wgdW5zaGlmdENvdW50U2xvd0Nhc2Uo
SlNHbG9iYWxEYXRhJiwgYm9vbCwgdW5zaWduZWQpOworICAgIGJvb2wgdW5zaGlmdENvdW50U2xv
d0Nhc2UoVk0mLCBib29sLCB1bnNpZ25lZCk7CiAKICAgICB0ZW1wbGF0ZTxJbmRleGluZ1R5cGUg
aW5kZXhpbmdUeXBlPgogICAgIHZvaWQgc29ydE51bWVyaWNWZWN0b3IoRXhlY1N0YXRlKiwgSlNW
YWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYpOwpAQCAtMTc0
LDIxICsxNzQsMjEgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBhY3RGb3JTb3J0aW5nKHVuc2ln
bmVkJiBudW1EZWZpbmVkLCB1bnNpZ25lZCYgbmV3UmVsZXZhbnRMZW5ndGgpOwogfTsKIAotaW5s
aW5lIEJ1dHRlcmZseSogY3JlYXRlQ29udGlndW91c0FycmF5QnV0dGVyZmx5KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCYgdmVjdG9yTGVuZ3RoKQor
aW5saW5lIEJ1dHRlcmZseSogY3JlYXRlQ29udGlndW91c0FycmF5QnV0dGVyZmx5KFZNJiB2bSwg
dW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCYgdmVjdG9yTGVuZ3RoKQogewogICAgIEluZGV4aW5n
SGVhZGVyIGhlYWRlcjsKICAgICB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChsZW5ndGgsIEJBU0Vf
VkVDVE9SX0xFTik7CiAgICAgaGVhZGVyLnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwog
ICAgIGhlYWRlci5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkqIHJlc3Vs
dCA9IEJ1dHRlcmZseTo6Y3JlYXRlKAotICAgICAgICBnbG9iYWxEYXRhLCAwLCAwLCB0cnVlLCBo
ZWFkZXIsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgICAgICB2
bSwgMCwgMCwgdHJ1ZSwgaGVhZGVyLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1pbmxpbmUgQnV0dGVyZmx5KiBjcmVhdGVB
cnJheUJ1dHRlcmZseShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGluaXRpYWxM
ZW5ndGgpCitpbmxpbmUgQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseShWTSYgdm0sIHVu
c2lnbmVkIGluaXRpYWxMZW5ndGgpCiB7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0
ZXJmbHk6OmNyZWF0ZSgKLSAgICAgICAgZ2xvYmFsRGF0YSwgMCwgMCwgdHJ1ZSwgYmFzZUluZGV4
aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihC
QVNFX1ZFQ1RPUl9MRU4pKTsKKyAgICAgICAgdm0sIDAsIDAsIHRydWUsIGJhc2VJbmRleGluZ0hl
YWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IoQkFTRV9W
RUNUT1JfTEVOKSk7CiAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKTsKICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyA9IDA7CiAgICAgc3RvcmFnZS0+
bV9zcGFyc2VNYXAuY2xlYXIoKTsKQEAgLTE5Niw5ICsxOTYsOSBAQCBpbmxpbmUgQnV0dGVyZmx5
KiBjcmVhdGVBcnJheUJ1dHRlcmZseShKCiAgICAgcmV0dXJuIGJ1dHRlcmZseTsKIH0KIAotQnV0
dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseUluRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0ds
b2JhbERhdGEmLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKTsKK0J1dHRlcmZseSogY3JlYXRlQXJy
YXlCdXR0ZXJmbHlJbkRpY3Rpb25hcnlJbmRleGluZ01vZGUoVk0mLCB1bnNpZ25lZCBpbml0aWFs
TGVuZ3RoKTsKIAotaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNyZWF0ZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3Ro
KQoraW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogewogICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5OwogICAgIGlmIChMSUtFTFkoIWhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpKSkpIHsKQEAgLTIwOCw3ICsyMDgsNyBAQCBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6
Y3JlYXRlKEpTR2xvYmFsCiAgICAgICAgICAgICB8fCBoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKSkKICAgICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKSkpOwogICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGg7Ci0gICAgICAgIGJ1
dHRlcmZseSA9IGNyZWF0ZUNvbnRpZ3VvdXNBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0
aWFsTGVuZ3RoLCB2ZWN0b3JMZW5ndGgpOworICAgICAgICBidXR0ZXJmbHkgPSBjcmVhdGVDb250
aWd1b3VzQXJyYXlCdXR0ZXJmbHkodm0sIGluaXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7CiAg
ICAgICAgIEFTU0VSVChpbml0aWFsTGVuZ3RoIDwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCk7CiAg
ICAgICAgIGlmIChoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKQEAgLTIx
OCwxNCArMjE4LDE0IEBAIGlubGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGUoSlNHbG9iYWwK
ICAgICAgICAgQVNTRVJUKAogICAgICAgICAgICAgc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9
PSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlCiAgICAgICAgICAgICB8fCBzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aEFycmF5U3RvcmFnZSk7Ci0gICAgICAgIGJ1dHRl
cmZseSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5KGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOwor
ICAgICAgICBidXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseSh2bSwgaW5pdGlhbExlbmd0
aCk7CiAgICAgfQotICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUsIGJ1dHRlcmZseSk7Ci0gICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwor
ICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4o
dm0uaGVhcCkpIEpTQXJyYXkodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAgICBhcnJheS0+
ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiBhcnJheTsKIH0KIAotaW5saW5lIEpTQXJy
YXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKK2lubGlu
ZSBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiB7CiAgICAgdW5zaWduZWQg
dmVjdG9yTGVuZ3RoID0gc3RkOjptYXgoQkFTRV9WRUNUT1JfTEVOLCBpbml0aWFsTGVuZ3RoKTsK
ICAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKQEAgLTI0
MCw3ICsyNDAsNyBAQCBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0CiAg
ICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsK
IAogICAgICAgICB2b2lkKiB0ZW1wOwotICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlB
bGxvY2F0ZVN0b3JhZ2UoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgdmVjdG9yTGVu
Z3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksICZ0ZW1wKSkKKyAgICAgICAgaWYgKCF2bS5o
ZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCB2
ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgJnRlbXApKQogICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVt
cCwgMCwgMCk7CiAgICAgICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0
aCk7CkBAIC0yNTEsNyArMjUxLDcgQEAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0
ZVVuaW5pdAogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgdm9pZCogdGVtcDsKLSAg
ICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRlcmZseTo6
dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgp
KSwgJnRlbXApKQorICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRl
cmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JM
ZW5ndGgpKSwgJnRlbXApKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGJ1dHRlcmZs
eSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgMCk7CiAgICAgICAgICpidXR0ZXJmbHkt
PmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgs
IHZlY3Rvckxlbmd0aCk7CkBAIC0yNjEsOCArMjYxLDggQEAgaW5saW5lIEpTQXJyYXkqIEpTQXJy
YXk6OnRyeUNyZWF0ZVVuaW5pdAogICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
ID0gaW5pdGlhbExlbmd0aDsKICAgICB9CiAgICAgICAgIAotICAgIEpTQXJyYXkqIGFycmF5ID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNB
cnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7Ci0gICAgYXJyYXktPmZpbmlz
aENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4odm0uaGVhcCkpIEpTQXJyYXkodm0sIHN0cnVjdHVyZSwg
YnV0dGVyZmx5KTsKKyAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiBh
cnJheTsKIH0KIApAQCAtMjg0LDkgKzI4NCw5IEBAIGlubGluZSBib29sIGlzSlNBcnJheShKU1Zh
bHVlIHYpIHsgcmV0dXIKIAogaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0
ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgY29uc3QgQXJnTGlzdCYgdmFsdWVz
KQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHZhbHVlcy5z
aXplKCk7Ci0gICAgSlNBcnJheSogYXJyYXkgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxp
emVkKGdsb2JhbERhdGEsIGFycmF5U3RydWN0dXJlLCBsZW5ndGgpOworICAgIEpTQXJyYXkqIGFy
cmF5ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgYXJyYXlTdHJ1Y3R1cmUs
IGxlbmd0aCk7CiAKICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIHByb2JhYmx5IHRocm93IGFuIG91
dCBvZiBtZW1vcnkgZXJyb3IgaGVyZSwgYnV0CiAgICAgLy8gd2hlbiBtYWtpbmcgdGhpcyBjaGFu
Z2Ugd2Ugc2hvdWxkIGNoZWNrIHRoYXQgYWxsIGNsaWVudHMgb2YgdGhpcwpAQCAtMjk0LDE0ICsy
OTQsMTQgQEAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZQogICAgIFJF
TEVBU0VfQVNTRVJUKGFycmF5KTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkKLSAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleChnbG9iYWxEYXRhLCBpLCB2
YWx1ZXMuYXQoaSkpOworICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCB2YWx1
ZXMuYXQoaSkpOwogICAgIHJldHVybiBhcnJheTsKIH0KICAgICAKIGlubGluZSBKU0FycmF5KiBj
b25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUs
IGNvbnN0IEpTVmFsdWUqIHZhbHVlcywgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBKU0FycmF5KiBhcnJh
eSA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoZ2xvYmFsRGF0YSwgYXJyYXlTdHJ1
Y3R1cmUsIGxlbmd0aCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0FycmF5KiBh
cnJheSA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIGFycmF5U3RydWN0dXJl
LCBsZW5ndGgpOwogCiAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBwcm9iYWJseSB0aHJvdyBhbiBv
dXQgb2YgbWVtb3J5IGVycm9yIGhlcmUsIGJ1dAogICAgIC8vIHdoZW4gbWFraW5nIHRoaXMgY2hh
bmdlIHdlIHNob3VsZCBjaGVjayB0aGF0IGFsbCBjbGllbnRzIG9mIHRoaXMKQEAgLTMwOSw3ICsz
MDksNyBAQCBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXkoRXhlY1N0YXRlCiAgICAgUkVM
RUFTRV9BU1NFUlQoYXJyYXkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKQotICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KGdsb2JhbERhdGEsIGksIHZh
bHVlc1tpXSk7CisgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGksIHZhbHVlc1tp
XSk7CiAgICAgcmV0dXJuIGFycmF5OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgSlNCb3VuZEZ1bmN0aW9uKiBKU0JvdW5kRnVuY3Rp
b246OmNyZWF0ZQogICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IEpTQzo6Z2V0Q29u
c3RydWN0RGF0YSh0YXJnZXRGdW5jdGlvbiwgY29uc3RydWN0RGF0YSk7CiAgICAgYm9vbCBjYW5D
b25zdHJ1Y3QgPSBjb25zdHJ1Y3RUeXBlICE9IENvbnN0cnVjdFR5cGVOb25lOwogCi0gICAgTmF0
aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5nZXRIb3N0RnVu
Y3Rpb24oYm91bmRGdW5jdGlvbkNhbGwsIGNhbkNvbnN0cnVjdCA/IGJvdW5kRnVuY3Rpb25Db25z
dHJ1Y3QgOiBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rvcik7CisgICAgTmF0aXZlRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IGV4ZWMtPnZtKCkuZ2V0SG9zdEZ1bmN0aW9uKGJvdW5kRnVuY3Rp
b25DYWxsLCBjYW5Db25zdHJ1Y3QgPyBib3VuZEZ1bmN0aW9uQ29uc3RydWN0IDogY2FsbEhvc3RG
dW5jdGlvbkFzQ29uc3RydWN0b3IpOwogICAgIEpTQm91bmRGdW5jdGlvbiogZnVuY3Rpb24gPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0JvdW5kRnVuY3Rpb24+KCpleGVjLT5oZWFwKCkp
KSBKU0JvdW5kRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmJvdW5k
RnVuY3Rpb25TdHJ1Y3R1cmUoKSwgdGFyZ2V0RnVuY3Rpb24sIGJvdW5kVGhpcywgYm91bmRBcmdz
KTsKIAogICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbihleGVjLCBleGVjdXRhYmxlLCBsZW5n
dGgsIG5hbWUpOwpAQCAtOTksOSArOTksOSBAQCBib29sIEpTQm91bmRGdW5jdGlvbjo6Y3VzdG9t
SGFzSW5zdGFuY2UoCiAKIEpTQm91bmRGdW5jdGlvbjo6SlNCb3VuZEZ1bmN0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbiwgSlNWYWx1ZSBib3VuZFRoaXMsIEpTVmFsdWUg
Ym91bmRBcmdzKQogICAgIDogQmFzZShleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKLSAg
ICAsIG1fdGFyZ2V0RnVuY3Rpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB0YXJnZXRGdW5j
dGlvbikKLSAgICAsIG1fYm91bmRUaGlzKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYm91bmRU
aGlzKQotICAgICwgbV9ib3VuZEFyZ3MoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBib3VuZEFy
Z3MpCisgICAgLCBtX3RhcmdldEZ1bmN0aW9uKGV4ZWMtPnZtKCksIHRoaXMsIHRhcmdldEZ1bmN0
aW9uKQorICAgICwgbV9ib3VuZFRoaXMoZXhlYy0+dm0oKSwgdGhpcywgYm91bmRUaGlzKQorICAg
ICwgbV9ib3VuZEFyZ3MoZXhlYy0+dm0oKSwgdGhpcywgYm91bmRBcmdzKQogewogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3Vu
ZEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0NywxMCBAQCBwdWJsaWM6CiAg
ICAgSlNWYWx1ZSBib3VuZFRoaXMoKSB7IHJldHVybiBtX2JvdW5kVGhpcy5nZXQoKTsgfQogICAg
IEpTVmFsdWUgYm91bmRBcmdzKCkgeyByZXR1cm4gbV9ib3VuZEFyZ3MuZ2V0KCk7IH0KIAotICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAKKyAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCiAgICAgewogICAgICAgICBBU1NF
UlQoZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0Z1bmN0aW9uVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3Qg
Q2xhc3NJbmZvIHNfaW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q0pTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ0pTVmFsdWUuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDcgKzExMiw3
IEBAIEpTT2JqZWN0KiBKU1ZhbHVlOjpzeW50aGVzaXplUHJvdG90eXBlKEUKIC8vIEVDTUEgOC43
LjIKIHZvaWQgSlNWYWx1ZTo6cHV0VG9QcmltaXRpdmUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKICAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5
TmFtZS5hc0luZGV4KCk7CiAgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCkgewpAQCAtMTM3LDcgKzEzNyw3IEBAIHZvaWQgSlNWYWx1ZTo6cHV0VG9QcmltaXRpdmUoRXhl
Y1N0YXRlKiAKICAgICBmb3IgKDsgOyBvYmogPSBhc09iamVjdChwcm90b3R5cGUpKSB7CiAgICAg
ICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CiAgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsK
LSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gb2JqLT5zdHJ1Y3R1cmUoKS0+Z2V0KGds
b2JhbERhdGEsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG9iai0+c3RydWN0dXJlKCktPmdldCh2bSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKICAgICAgICAgaWYgKG9mZnNl
dCAhPSBpbnZhbGlkT2Zmc2V0KSB7CiAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRP
bmx5KSB7CiAgICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCkBAIC0yOTUs
MjAgKzI5NSwyMCBAQCBib29sIEpTVmFsdWU6OmlzVmFsaWRDYWxsZWUoKQogCiBKU1N0cmluZyog
SlNWYWx1ZTo6dG9TdHJpbmdTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgQVNTRVJUKCFpc1N0cmluZygpKTsKICAgICBpZiAoaXNJbnQz
MigpKQotICAgICAgICByZXR1cm4ganNTdHJpbmcoJmdsb2JhbERhdGEsIGdsb2JhbERhdGEubnVt
ZXJpY1N0cmluZ3MuYWRkKGFzSW50MzIoKSkpOworICAgICAgICByZXR1cm4ganNTdHJpbmcoJnZt
LCB2bS5udW1lcmljU3RyaW5ncy5hZGQoYXNJbnQzMigpKSk7CiAgICAgaWYgKGlzRG91YmxlKCkp
Ci0gICAgICAgIHJldHVybiBqc1N0cmluZygmZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5udW1lcmlj
U3RyaW5ncy5hZGQoYXNEb3VibGUoKSkpOworICAgICAgICByZXR1cm4ganNTdHJpbmcoJnZtLCB2
bS5udW1lcmljU3RyaW5ncy5hZGQoYXNEb3VibGUoKSkpOwogICAgIGlmIChpc1RydWUoKSkKLSAg
ICAgICAgcmV0dXJuIGdsb2JhbERhdGEuc21hbGxTdHJpbmdzLnRydWVTdHJpbmcoKTsKKyAgICAg
ICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy50cnVlU3RyaW5nKCk7CiAgICAgaWYgKGlzRmFsc2Uo
KSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEuc21hbGxTdHJpbmdzLmZhbHNlU3RyaW5nKCk7
CisgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3MuZmFsc2VTdHJpbmcoKTsKICAgICBpZiAo
aXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLnNtYWxsU3RyaW5ncy5udWxsU3Ry
aW5nKCk7CisgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3MubnVsbFN0cmluZygpOwogICAg
IGlmIChpc1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS5zbWFsbFN0cmlu
Z3MudW5kZWZpbmVkU3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3MudW5k
ZWZpbmVkU3RyaW5nKCk7CiAKICAgICBBU1NFUlQoaXNDZWxsKCkpOwogICAgIEpTVmFsdWUgdmFs
dWUgPSBhc0NlbGwoKS0+dG9QcmltaXRpdmUoZXhlYywgUHJlZmVyU3RyaW5nKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJKHJldmlzaW9uIDE0ODY1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRXhlY1N0
YXRlOwogY2xhc3MgSlNDZWxsOwotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiBjbGFz
cyBKU0dsb2JhbE9iamVjdDsKIGNsYXNzIEpTT2JqZWN0OwogY2xhc3MgSlNTdHJpbmc7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTQ4NjU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIEpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2VsbFRh
Zyk7CiAKIHByb3RlY3RlZDoKLSAgICBKU0NlbGwoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7
CisgICAgSlNDZWxsKFZNJiwgU3RydWN0dXJlKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogcHVibGljOgpAQCAtNzgsNyArNzgsNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCBpc0FQSVZhbHVlV3JhcHBlcigpIGNvbnN0OwogCiAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdDsKLSAgICB2b2lkIHNldFN0cnVjdHVyZShKU0dsb2JhbERh
dGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIHNldFN0cnVjdHVyZShWTSYsIFN0cnVjdHVyZSop
OwogICAgIHZvaWQgY2xlYXJTdHJ1Y3R1cmUoKSB7IG1fc3RydWN0dXJlLmNsZWFyKCk7IH0KIAog
ICAgIGNvbnN0IGNoYXIqIGNsYXNzTmFtZSgpOwpAQCAtMTQxLDggKzE0MSw4IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0g
VHlwZWRBcnJheU5vbmU7CiBwcm90ZWN0ZWQ6CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
R2xvYmFsRGF0YSYpOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKiwgQ3JlYXRpbmdFYXJseUNlbGxUYWcpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgU3RydWN0dXJlKiwgQ3JlYXRpbmdF
YXJseUNlbGxUYWcpOwogCiAgICAgLy8gQmFzZSBpbXBsZW1lbnRhdGlvbjsgZm9yIG5vbi1vYmpl
Y3QgY2xhc3NlcyBpbXBsZW1lbnRzIGdldFByb3BlcnR5U2xvdC4KICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGxJbmxpbmVzLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMzIgKzM5LDMyIEBA
IGlubGluZSBKU0NlbGw6OkpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2VsbFQKIHsKIH0KIAotaW5saW5l
IEpTQ2VsbDo6SlNDZWxsKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCi0gICAgOiBtX3N0cnVjdHVyZShnbG9iYWxEYXRhLCB0aGlzLCBzdHJ1Y3R1cmUpCitp
bmxpbmUgSlNDZWxsOjpKU0NlbGwoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6
IG1fc3RydWN0dXJlKHZtLCB0aGlzLCBzdHJ1Y3R1cmUpCiB7CiB9CiAKLWlubGluZSB2b2lkIEpT
Q2VsbDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoraW5saW5lIHZv
aWQgSlNDZWxsOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAjaWYgRU5BQkxFKEdDX1ZBTElE
QVRJT04pCi0gICAgQVNTRVJUKGdsb2JhbERhdGEuaXNJbml0aWFsaXppbmdPYmplY3QoKSk7Ci0g
ICAgZ2xvYmFsRGF0YS5zZXRJbml0aWFsaXppbmdPYmplY3RDbGFzcygwKTsKKyAgICBBU1NFUlQo
dm0uaXNJbml0aWFsaXppbmdPYmplY3QoKSk7CisgICAgdm0uc2V0SW5pdGlhbGl6aW5nT2JqZWN0
Q2xhc3MoMCk7CiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxEYXRhKTsKKyAgICBVTlVT
RURfUEFSQU0odm0pOwogI2VuZGlmCiAgICAgQVNTRVJUKG1fc3RydWN0dXJlKTsKIH0KIAotaW5s
aW5lIHZvaWQgSlNDZWxsOjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBDcmVhdGluZ0Vhcmx5Q2VsbFRhZykKK2lubGluZSB2b2lk
IEpTQ2VsbDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ3Jl
YXRpbmdFYXJseUNlbGxUYWcpCiB7CiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCi0gICAgQVNT
RVJUKGdsb2JhbERhdGEuaXNJbml0aWFsaXppbmdPYmplY3QoKSk7Ci0gICAgZ2xvYmFsRGF0YS5z
ZXRJbml0aWFsaXppbmdPYmplY3RDbGFzcygwKTsKKyAgICBBU1NFUlQodm0uaXNJbml0aWFsaXpp
bmdPYmplY3QoKSk7CisgICAgdm0uc2V0SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoMCk7CiAgICAg
aWYgKHN0cnVjdHVyZSkKICNlbmRpZgotICAgICAgICBtX3N0cnVjdHVyZS5zZXRFYXJseVZhbHVl
KGdsb2JhbERhdGEsIHRoaXMsIHN0cnVjdHVyZSk7CisgICAgICAgIG1fc3RydWN0dXJlLnNldEVh
cmx5VmFsdWUodm0sIHRoaXMsIHN0cnVjdHVyZSk7CiAgICAgLy8gVmVyeSBmaXJzdCBzZXQgb2Yg
YWxsb2NhdGlvbnMgd29uJ3QgaGF2ZSBhIHJlYWwgc3RydWN0dXJlLgotICAgIEFTU0VSVChtX3N0
cnVjdHVyZSB8fCAhZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUpOworICAgIEFTU0VSVCht
X3N0cnVjdHVyZSB8fCAhdm0uc3RydWN0dXJlU3RydWN0dXJlKTsKIH0KIAogaW5saW5lIFN0cnVj
dHVyZSogSlNDZWxsOjpzdHJ1Y3R1cmUoKSBjb25zdApAQCAtODQsOCArODQsOCBAQCB2b2lkKiBh
bGxvY2F0ZUNlbGwoSGVhcCYgaGVhcCwgc2l6ZV90IHNpCiB7CiAgICAgQVNTRVJUKHNpemUgPj0g
c2l6ZW9mKFQpKTsKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKLSAgICBBU1NFUlQoIWhlYXAu
Z2xvYmFsRGF0YSgpLT5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKLSAgICBoZWFwLmdsb2JhbERh
dGEoKS0+c2V0SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoJlQ6OnNfaW5mbyk7CisgICAgQVNTRVJU
KCFoZWFwLnZtKCktPmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkpOworICAgIGhlYXAudm0oKS0+c2V0
SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoJlQ6OnNfaW5mbyk7CiAjZW5kaWYKICAgICBKU0NlbGwq
IHJlc3VsdCA9IDA7CiAgICAgaWYgKFQ6Om5lZWRzRGVzdHJ1Y3Rpb24gJiYgVDo6aGFzSW1tb3J0
YWxTdHJ1Y3R1cmUpCkBAIC0xMzQsMTQgKzEzNCwxNCBAQCBpbmxpbmUgYm9vbCBKU0NlbGw6Omlz
QVBJVmFsdWVXcmFwcGVyKCkgCiAgICAgcmV0dXJuIG1fc3RydWN0dXJlLT50eXBlSW5mbygpLnR5
cGUoKSA9PSBBUElWYWx1ZVdyYXBwZXJUeXBlOwogfQogCi1pbmxpbmUgdm9pZCBKU0NlbGw6OnNl
dFN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQoraW5saW5lIHZvaWQgSlNDZWxsOjpzZXRTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKIHsKICAgICBBU1NFUlQoc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zp
c2l0Q2hpbGRyZW4oKSA9PSB0aGlzLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNW
aXNpdENoaWxkcmVuKCkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpID09IG1f
c3RydWN0dXJlLT5jbGFzc0luZm8oKSk7CiAgICAgQVNTRVJUKCFtX3N0cnVjdHVyZQogICAgICAg
ICB8fCBtX3N0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0
ZWQoKQogICAgICAgICB8fCBtX3N0cnVjdHVyZS5nZXQoKSA9PSBzdHJ1Y3R1cmUpOwotICAgIG1f
c3RydWN0dXJlLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzdHJ1Y3R1cmUpOworICAgIG1fc3RydWN0
dXJlLnNldCh2bSwgdGhpcywgc3RydWN0dXJlKTsKIH0KIAogaW5saW5lIGNvbnN0IE1ldGhvZFRh
YmxlKiBKU0NlbGw6Om1ldGhvZFRhYmxlRm9yRGVzdHJ1Y3Rpb24oKSBjb25zdApAQCAtMTc3LDgg
KzE3Nyw4IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKU0NlbGw6OmZhc3RHZXRPd24KIHsKICAg
ICBpZiAoIXN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCgpICYmICFzdHJ1Y3R1cmUoKS0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpKSB7CiAgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5hbWUuaW1wbCgpLT5oYXNIYXNoKCkKLSAgICAg
ICAgICAgID8gc3RydWN0dXJlKCktPmdldChleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIo
ZXhlYywgbmFtZSkpCi0gICAgICAgICAgICA6IHN0cnVjdHVyZSgpLT5nZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBuYW1lKTsKKyAgICAgICAgICAgID8gc3RydWN0dXJlKCktPmdldChleGVjLT52bSgp
LCBJZGVudGlmaWVyKGV4ZWMsIG5hbWUpKQorICAgICAgICAgICAgOiBzdHJ1Y3R1cmUoKS0+Z2V0
KGV4ZWMtPnZtKCksIG5hbWUpOwogICAgICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQp
CiAgICAgICAgICAgICByZXR1cm4gYXNPYmplY3QodGhpcyktPmxvY2F0aW9uRm9yT2Zmc2V0KG9m
ZnNldCktPmdldCgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRGF0ZU1hdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRGF0ZU1hdGguY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0RhdGVNYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEz
NCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1zVG9XZWVrRGF5KGRvdWJsZSBtcykKIC8vIElmIHRo
aXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggTmFOIGl0IHJldHVybnMgTmFOLgogc3RhdGljIGRv
dWJsZSBnZXREU1RPZmZzZXQoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgbXMsIGRvdWJsZSB1dGNP
ZmZzZXQpCiB7Ci0gICAgRFNUT2Zmc2V0Q2FjaGUmIGNhY2hlID0gZXhlYy0+Z2xvYmFsRGF0YSgp
LmRzdE9mZnNldENhY2hlOworICAgIERTVE9mZnNldENhY2hlJiBjYWNoZSA9IGV4ZWMtPnZtKCku
ZHN0T2Zmc2V0Q2FjaGU7CiAgICAgZG91YmxlIHN0YXJ0ID0gY2FjaGUuc3RhcnQ7CiAgICAgZG91
YmxlIGVuZCA9IGNhY2hlLmVuZDsKIApAQCAtMTk1LDExICsxOTUsMTEgQEAgc3RhdGljIGRvdWJs
ZSBnZXREU1RPZmZzZXQoRXhlY1N0YXRlKiBleAogICovCiBkb3VibGUgZ2V0VVRDT2Zmc2V0KEV4
ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBkb3VibGUgdXRjT2Zmc2V0ID0gZXhlYy0+Z2xvYmFsRGF0
YSgpLmNhY2hlZFVUQ09mZnNldDsKKyAgICBkb3VibGUgdXRjT2Zmc2V0ID0gZXhlYy0+dm0oKS5j
YWNoZWRVVENPZmZzZXQ7CiAgICAgaWYgKCFzdGQ6OmlzbmFuKHV0Y09mZnNldCkpCiAgICAgICAg
IHJldHVybiB1dGNPZmZzZXQ7Ci0gICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmNhY2hlZFVUQ09mZnNl
dCA9IGNhbGN1bGF0ZVVUQ09mZnNldCgpOwotICAgIHJldHVybiBleGVjLT5nbG9iYWxEYXRhKCku
Y2FjaGVkVVRDT2Zmc2V0OworICAgIGV4ZWMtPnZtKCkuY2FjaGVkVVRDT2Zmc2V0ID0gY2FsY3Vs
YXRlVVRDT2Zmc2V0KCk7CisgICAgcmV0dXJuIGV4ZWMtPnZtKCkuY2FjaGVkVVRDT2Zmc2V0Owog
fQogCiBkb3VibGUgZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
R3JlZ29yaWFuRGF0ZVRpbWUmIHQsIGRvdWJsZSBtaWxsaVNlY29uZHMsIGJvb2wgaW5wdXRJc1VU
QykKQEAgLTI2MSwxMyArMjYxLDEzIEBAIGRvdWJsZSBwYXJzZURhdGVGcm9tTnVsbFRlcm1pbmF0
ZWRDaGFyYWMKIAogZG91YmxlIHBhcnNlRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmlu
ZyYgZGF0ZSkKIHsKLSAgICBpZiAoZGF0ZSA9PSBleGVjLT5nbG9iYWxEYXRhKCkuY2FjaGVkRGF0
ZVN0cmluZykKLSAgICAgICAgcmV0dXJuIGV4ZWMtPmdsb2JhbERhdGEoKS5jYWNoZWREYXRlU3Ry
aW5nVmFsdWU7CisgICAgaWYgKGRhdGUgPT0gZXhlYy0+dm0oKS5jYWNoZWREYXRlU3RyaW5nKQor
ICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS5jYWNoZWREYXRlU3RyaW5nVmFsdWU7CiAgICAgZG91
YmxlIHZhbHVlID0gcGFyc2VFUzVEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVycyhkYXRl
LnV0ZjgoKS5kYXRhKCkpOwogICAgIGlmIChzdGQ6OmlzbmFuKHZhbHVlKSkKICAgICAgICAgdmFs
dWUgPSBwYXJzZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKGV4ZWMsIGRhdGUudXRm
OCgpLmRhdGEoKSk7Ci0gICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmNhY2hlZERhdGVTdHJpbmcgPSBk
YXRlOwotICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5jYWNoZWREYXRlU3RyaW5nVmFsdWUgPSB2YWx1
ZTsKKyAgICBleGVjLT52bSgpLmNhY2hlZERhdGVTdHJpbmcgPSBkYXRlOworICAgIGV4ZWMtPnZt
KCkuY2FjaGVkRGF0ZVN0cmluZ1ZhbHVlID0gdmFsdWU7CiAgICAgcmV0dXJuIHZhbHVlOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1
Y3RpYmxlT2JqZWN0LmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4LDgg
KzE4LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3QgY2xhc3NJbmZvT2Zmc2V0KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBtX2NsYXNzSW5m
byk7IH0KIAogcHJvdGVjdGVkOgotICAgIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gMCkKLSAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwg
YnV0dGVyZmx5KQorICAgIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gMCkKKyAgICAgICAgOiBKU05vbkZpbmFs
T2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICAgICAgLCBtX2NsYXNzSW5mbyhz
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fY2xhc3NJbmZv
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3Bw
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1
bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsMTIgKzYzLDEyIEBAIEpTRnVuY3Rpb24q
IEpTRnVuY3Rpb246OmNyZWF0ZShFeGVjU3RhdGUKICNpZiAhRU5BQkxFKEpJVCkKICAgICBVTlVT
RURfUEFSQU0oaW50cmluc2ljKTsKICNlbHNlCi0gICAgaWYgKGludHJpbnNpYyAhPSBOb0ludHJp
bnNpYyAmJiBleGVjLT5nbG9iYWxEYXRhKCkuY2FuVXNlSklUKCkpIHsKKyAgICBpZiAoaW50cmlu
c2ljICE9IE5vSW50cmluc2ljICYmIGV4ZWMtPnZtKCkuY2FuVXNlSklUKCkpIHsKICAgICAgICAg
QVNTRVJUKG5hdGl2ZUNvbnN0cnVjdG9yID09IGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9y
KTsKLSAgICAgICAgZXhlY3V0YWJsZSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5nZXRIb3N0RnVuY3Rp
b24obmF0aXZlRnVuY3Rpb24sIGludHJpbnNpYyk7CisgICAgICAgIGV4ZWN1dGFibGUgPSBleGVj
LT52bSgpLmdldEhvc3RGdW5jdGlvbihuYXRpdmVGdW5jdGlvbiwgaW50cmluc2ljKTsKICAgICB9
IGVsc2UKICNlbmRpZgotICAgICAgICBleGVjdXRhYmxlID0gZXhlYy0+Z2xvYmFsRGF0YSgpLmdl
dEhvc3RGdW5jdGlvbihuYXRpdmVGdW5jdGlvbiwgbmF0aXZlQ29uc3RydWN0b3IpOworICAgICAg
ICBleGVjdXRhYmxlID0gZXhlYy0+dm0oKS5nZXRIb3N0RnVuY3Rpb24obmF0aXZlRnVuY3Rpb24s
IG5hdGl2ZUNvbnN0cnVjdG9yKTsKIAogICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNGdW5jdGlvbj4oKmV4ZWMtPmhlYXAoKSkpIEpTRnVuY3Rp
b24oZXhlYywgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmZ1bmN0aW9uU3RydWN0dXJlKCkp
OwogICAgIC8vIENhbid0IGRvIHRoaXMgZHVyaW5nIGluaXRpYWxpemF0aW9uIGJlY2F1c2UgZ2V0
SG9zdEZ1bmN0aW9uIG1pZ2h0IGRvIGEgR0MgYWxsb2NhdGlvbi4KQEAgLTgyLDkgKzgyLDkgQEAg
dm9pZCBKU0Z1bmN0aW9uOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIH0KIAogSlNGdW5jdGlvbjo6
SlNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogQmFzZShleGVjLT5nbG9iYWxEYXRhKCksIHN0
cnVjdHVyZSkKKyAgICA6IEJhc2UoZXhlYy0+dm0oKSwgc3RydWN0dXJlKQogICAgICwgbV9leGVj
dXRhYmxlKCkKLSAgICAsIG1fc2NvcGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBnbG9iYWxP
YmplY3QpCisgICAgLCBtX3Njb3BlKGV4ZWMtPnZtKCksIHRoaXMsIGdsb2JhbE9iamVjdCkKICAg
ICAvLyBXZSBpbml0aWFsaXplIGJsaW5kIHNvIHRoYXQgY2hhbmdlcyB0byB0aGUgcHJvdG90eXBl
IGFmdGVyIGZ1bmN0aW9uIGNyZWF0aW9uIGJ1dCBiZWZvcmUKICAgICAvLyB0aGUgb3B0aW1pemVy
IGtpY2tzIGluIGRvbid0IGRpc2FibGUgb3B0aW1pemF0aW9ucy4gT25jZSB0aGUgb3B0aW1pemVy
IGtpY2tzIGluLCB0aGUKICAgICAvLyB3YXRjaHBvaW50IHdpbGwgc3RhcnQgd2F0Y2hpbmcgYW5k
IGFueSBjaGFuZ2VzIHdpbGwgYm90aCBmb3JjZSBkZW9wdGltaXphdGlvbiBhbmQgZGlzYWJsZQpA
QCAtMTAwLDMxICsxMDAsMzEgQEAgSlNGdW5jdGlvbjo6SlNGdW5jdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIAogCiB2b2lkIEpTRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
TmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgaW50IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBu
YW1lKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7Cisg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAgICAgQVNTRVJUKGluaGVyaXRz
KCZzX2luZm8pKTsKLSAgICBtX2V4ZWN1dGFibGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgZXhlY3V0YWJsZSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+
Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzU3RyaW5nKGV4ZWMsIG5hbWUpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmds
b2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIobGVuZ3Ro
KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIG1fZXhlY3V0YWJsZS5z
ZXQoZXhlYy0+dm0oKSwgdGhpcywgZXhlY3V0YWJsZSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZt
KCksIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bmFtZSwganNTdHJpbmcoZXhlYywgbmFtZSks
IERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+
dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIobGVuZ3RoKSwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwogfQogCiBPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZSogSlNGdW5jdGlvbjo6Y3JlYXRlQWxsb2NhdGlvblByb2ZpbGUoRXhlY1N0YXRlKiBleGVj
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHkpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
ID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBqc0R5bmFt
aWNDYXN0PEpTT2JqZWN0Kj4oZ2V0KGV4ZWMsIGdsb2JhbERhdGEucHJvcGVydHlOYW1lcy0+cHJv
dG90eXBlKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU09iamVjdCogcHJvdG90
eXBlID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KGdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVz
LT5wcm90b3R5cGUpKTsKICAgICBpZiAoIXByb3RvdHlwZSkKICAgICAgICAgcHJvdG90eXBlID0g
Z2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpOwotICAgIG1fYWxsb2NhdGlvblByb2Zp
bGUuaW5pdGlhbGl6ZShnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBwcm90b3R5
cGUsIGlubGluZUNhcGFjaXR5KTsKKyAgICBtX2FsbG9jYXRpb25Qcm9maWxlLmluaXRpYWxpemUo
Z2xvYmFsT2JqZWN0KCktPnZtKCksIHRoaXMsIHByb3RvdHlwZSwgaW5saW5lQ2FwYWNpdHkpOwog
ICAgIHJldHVybiAmbV9hbGxvY2F0aW9uUHJvZmlsZTsKIH0KIAogU3RyaW5nIEpTRnVuY3Rpb246
Om5hbWUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBnZXQoZXhlYywgZXhlYy0+Z2xv
YmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPm5hbWUpLnRvV1RGU3RyaW5nKGV4ZWMpOworICAgIHJl
dHVybiBnZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5uYW1lKS50b1dURlN0cmlu
ZyhleGVjKTsKIH0KIAogU3RyaW5nIEpTRnVuY3Rpb246OmRpc3BsYXlOYW1lKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICBKU1ZhbHVlIGRpc3BsYXlOYW1lID0gZ2V0RGlyZWN0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPmRpc3BsYXlOYW1lKTsK
KyAgICBKU1ZhbHVlIGRpc3BsYXlOYW1lID0gZ2V0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnZt
KCkucHJvcGVydHlOYW1lcy0+ZGlzcGxheU5hbWUpOwogICAgIAogICAgIGlmIChkaXNwbGF5TmFt
ZSAmJiBpc0pTU3RyaW5nKGRpc3BsYXlOYW1lKSkKICAgICAgICAgcmV0dXJuIGFzU3RyaW5nKGRp
c3BsYXlOYW1lKS0+dHJ5R2V0VmFsdWUoKTsKQEAgLTIyMSwxMyArMjIxLDEzIEBAIGJvb2wgSlNG
dW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UKICAgICAgICAgcmV0dXJuIEJhc2U6Omdl
dE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
CiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBl
KSB7Ci0gICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEo
KTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gdGhpc09iamVjdC0+Z2V0RGlyZWN0
T2Zmc2V0KGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHRoaXNPYmplY3QtPmdldERp
cmVjdE9mZnNldCh2bSwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0
KG9mZnNldCkpIHsKICAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBjb25zdHJ1Y3RF
bXB0eU9iamVjdChleGVjKTsKLSAgICAgICAgICAgIHByb3RvdHlwZS0+cHV0RGlyZWN0KGdsb2Jh
bERhdGEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdGhpc09iamVjdCwgRG9u
dEVudW0pOwotICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0KGdsb2JhbERhdGEsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIHByb3RvdHlwZSwgRG9udERlbGV0ZSB8IERv
bnRFbnVtKTsKLSAgICAgICAgICAgIG9mZnNldCA9IHRoaXNPYmplY3QtPmdldERpcmVjdE9mZnNl
dChnbG9iYWxEYXRhLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlKTsKKyAgICAgICAg
ICAgIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3Ry
dWN0b3IsIHRoaXNPYmplY3QsIERvbnRFbnVtKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1
dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgcHJvdG90eXBlLCBE
b250RGVsZXRlIHwgRG9udEVudW0pOworICAgICAgICAgICAgb2Zmc2V0ID0gdGhpc09iamVjdC0+
Z2V0RGlyZWN0T2Zmc2V0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlKTsKICAg
ICAgICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwogICAgICAgICB9CiAKQEAg
LTM4Miw3ICszODIsNyBAQCBib29sIEpTRnVuY3Rpb246OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCog
CiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2Vs
bCk7CiAgICAgLy8gRm9yIG5vbi1ob3N0IGZ1bmN0aW9ucywgZG9uJ3QgbGV0IHRoZXNlIHByb3Bl
cnRpZXMgYnkgZGVsZXRlZCAtIGV4Y2VwdCBieSBEZWZpbmVPd25Qcm9wZXJ0eS4KLSAgICBpZiAo
IXRoaXNPYmplY3QtPmlzSG9zdEZ1bmN0aW9uKCkgJiYgIWV4ZWMtPmdsb2JhbERhdGEoKS5pc0lu
RGVmaW5lT3duUHJvcGVydHkoKQorICAgIGlmICghdGhpc09iamVjdC0+aXNIb3N0RnVuY3Rpb24o
KSAmJiAhZXhlYy0+dm0oKS5pc0luRGVmaW5lT3duUHJvcGVydHkoKQogICAgICAgICAmJiAocHJv
cGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMKICAgICAgICAgICAg
IHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoCiAgICAgICAg
ICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLm5hbWUKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDE0
ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZnJp
ZW5kIGNsYXNzIEpJVDsKICAgICAgICAgZnJpZW5kIGNsYXNzIERGRzo6U3BlY3VsYXRpdmVKSVQ7
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBERkc6OkpJVENvbXBpbGVyOwotICAgICAgICBmcmllbmQg
Y2xhc3MgSlNHbG9iYWxEYXRhOworICAgICAgICBmcmllbmQgY2xhc3MgVk07CiAKICAgICBwdWJs
aWM6CiAgICAgICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKQEAgLTYyLDEw
ICs2MiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgSlNGdW5jdGlvbiog
Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBK
U1Njb3BlKiBzY29wZSkKICAgICAgICAgewotICAgICAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVu
Y3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0Z1bmN0aW9uPihnbG9iYWxEYXRh
LmhlYXApKSBKU0Z1bmN0aW9uKGdsb2JhbERhdGEsIGV4ZWN1dGFibGUsIHNjb3BlKTsKKyAgICAg
ICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgICAgICBKU0Z1bmN0aW9uKiBmdW5j
dGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+KHZtLmhlYXApKSBK
U0Z1bmN0aW9uKHZtLCBleGVjdXRhYmxlLCBzY29wZSk7CiAgICAgICAgICAgICBBU1NFUlQoZnVu
Y3Rpb24tPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKSk7Ci0gICAgICAgICAgICBmdW5jdGlv
bi0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBmdW5jdGlvbi0+Zmlu
aXNoQ3JlYXRpb24odm0pOwogICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uOwogICAgICAgICB9
CiAgICAgICAgIApAQCAtODksMTAgKzg5LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7
CiAgICAgICAgICAgICByZXR1cm4gbV9zY29wZS5nZXQoKTsKICAgICAgICAgfQotICAgICAgICB2
b2lkIHNldFNjb3BlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNTY29wZSogc2NvcGUpCisg
ICAgICAgIHZvaWQgc2V0U2NvcGUoVk0mIHZtLCBKU1Njb3BlKiBzY29wZSkKICAgICAgICAgewog
ICAgICAgICAgICAgQVNTRVJUKCFpc0hvc3RGdW5jdGlvbk5vbklubGluZSgpKTsKLSAgICAgICAg
ICAgIG1fc2NvcGUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgIG1f
c2NvcGUuc2V0KHZtLCB0aGlzLCBzY29wZSk7CiAgICAgICAgIH0KIAogICAgICAgICBFeGVjdXRh
YmxlQmFzZSogZXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0YWJsZS5nZXQoKTsg
fQpAQCAtMTA1LDEwICsxMDUsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGlj
IEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCisgICAgICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAKICAgICAgICAgewogICAgICAgICAgICAg
QVNTRVJUKGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rp
b25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAKKyAgICAgICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpT
RnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAKICAgICAgICAgfQogCiAg
ICAgICAgIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uKCk7CkBAIC0xNTgsNyArMTU4LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEltcGxlbWVudHNIYXNJbnN0
YW5jZSB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVz
IHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IEpTRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKLSAg
ICAgICAgSlNGdW5jdGlvbihKU0dsb2JhbERhdGEmLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU1Nj
b3BlKik7CisgICAgICAgIEpTRnVuY3Rpb24oVk0mLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU1Nj
b3BlKik7CiAgICAgICAgIAogICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSos
IE5hdGl2ZUV4ZWN1dGFibGUqLCBpbnQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogICAg
ICAgICB1c2luZyBCYXNlOjpmaW5pc2hDcmVhdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1NjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMSwg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAK
LSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotCi0jaW5jbHVkZSAiQXJnTGlzdC5oIgotI2lu
Y2x1ZGUgIkNvZGVDYWNoZS5oIgotI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCi0jaW5j
bHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKLSNpbmNsdWRlICJEZWJ1Z2dlckFjdGl2YXRpb24u
aCIKLSNpbmNsdWRlICJGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAiR0NBY3Rpdml0
eUNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCi0jaW5jbHVkZSAiSGVhcC5o
IgotI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFsdWUuaCIKLSNpbmNsdWRlICJJbmNyZW1lbnRh
bFN3ZWVwZXIuaCIKLSNpbmNsdWRlICJJbnRlcnByZXRlci5oIgotI2luY2x1ZGUgIkpTQWN0aXZh
dGlvbi5oIgotI2luY2x1ZGUgIkpTQVBJVmFsdWVXcmFwcGVyLmgiCi0jaW5jbHVkZSAiSlNBcnJh
eS5oIgotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJKU0xvY2suaCIKLSNpbmNs
dWRlICJKU05hbWVTY29wZS5oIgotI2luY2x1ZGUgIkpTTm90QW5PYmplY3QuaCIKLSNpbmNsdWRl
ICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKLSNp
bmNsdWRlICJMZXhlci5oIgotI2luY2x1ZGUgIkxvb2t1cC5oIgotI2luY2x1ZGUgIk5vZGVzLmgi
Ci0jaW5jbHVkZSAiUGFyc2VyQXJlbmEuaCIKLSNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgotI2lu
Y2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgotI2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyQ2FjaGUuaCIK
LSNpbmNsdWRlICJTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIgotI2luY2x1ZGUgIlN0cm9uZ0lubGlu
ZXMuaCIKLSNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgotI2luY2x1ZGUgPHd0Zi9Qcm9j
ZXNzSUQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmlu
Z1ByaW50U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2luY2x1ZGUgPHd0
Zi9XVEZUaHJlYWREYXRhLmg+Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSNpbmNsdWRlICJDb25z
ZXJ2YXRpdmVSb290cy5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCi0j
aW5jbHVkZSAiUmVnRXhwLmgiCi0jZW5kaWYKLQotI2lmIFVTRShDRikKLSNpbmNsdWRlIDxDb3Jl
Rm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgotI2VuZGlmCi0KLXVzaW5nIG5hbWVzcGFjZSBX
VEY7Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1leHRlcm4gY29uc3QgSGFzaFRhYmxlIGFycmF5Q29u
c3RydWN0b3JUYWJsZTsKLWV4dGVybiBjb25zdCBIYXNoVGFibGUgYXJyYXlQcm90b3R5cGVUYWJs
ZTsKLWV4dGVybiBjb25zdCBIYXNoVGFibGUgYm9vbGVhblByb3RvdHlwZVRhYmxlOwotZXh0ZXJu
IGNvbnN0IEhhc2hUYWJsZSBqc29uVGFibGU7Ci1leHRlcm4gY29uc3QgSGFzaFRhYmxlIGRhdGVU
YWJsZTsKLWV4dGVybiBjb25zdCBIYXNoVGFibGUgZGF0ZUNvbnN0cnVjdG9yVGFibGU7Ci1leHRl
cm4gY29uc3QgSGFzaFRhYmxlIGVycm9yUHJvdG90eXBlVGFibGU7Ci1leHRlcm4gY29uc3QgSGFz
aFRhYmxlIGdsb2JhbE9iamVjdFRhYmxlOwotZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBtYXRoVGFi
bGU7Ci1leHRlcm4gY29uc3QgSGFzaFRhYmxlIG51bWJlckNvbnN0cnVjdG9yVGFibGU7Ci1leHRl
cm4gY29uc3QgSGFzaFRhYmxlIG51bWJlclByb3RvdHlwZVRhYmxlOwotSlNfRVhQT1JUREFUQSBl
eHRlcm4gY29uc3QgSGFzaFRhYmxlIG9iamVjdENvbnN0cnVjdG9yVGFibGU7Ci1leHRlcm4gY29u
c3QgSGFzaFRhYmxlIHByaXZhdGVOYW1lUHJvdG90eXBlVGFibGU7Ci1leHRlcm4gY29uc3QgSGFz
aFRhYmxlIHJlZ0V4cFRhYmxlOwotZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSByZWdFeHBDb25zdHJ1
Y3RvclRhYmxlOwotZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSByZWdFeHBQcm90b3R5cGVUYWJsZTsK
LWV4dGVybiBjb25zdCBIYXNoVGFibGUgc3RyaW5nQ29uc3RydWN0b3JUYWJsZTsKLQotLy8gTm90
ZTogUGxhdGZvcm0uaCB3aWxsIGVuZm9yY2UgdGhhdCBFTkFCTEUoQVNTRU1CTEVSKSBpcyB0cnVl
IGlmIGVpdGhlcgotLy8gRU5BQkxFKEpJVCkgb3IgRU5BQkxFKFlBUlJfSklUKSBvciBib3RoIGFy
ZSBlbmFibGVkLiBUaGUgY29kZSBiZWxvdwotLy8ganVzdCBjaGVja3MgZm9yIEVOQUJMRShKSVQp
IG9yIEVOQUJMRShZQVJSX0pJVCkgd2l0aCB0aGlzIHByZW1pc2UgaW4gbWluZC4KLQotI2lmIEVO
QUJMRShBU1NFTUJMRVIpCi1zdGF0aWMgYm9vbCBlbmFibGVBc3NlbWJsZXIoRXhlY3V0YWJsZUFs
bG9jYXRvciYgZXhlY3V0YWJsZUFsbG9jYXRvcikKLXsKLSAgICBpZiAoIWV4ZWN1dGFibGVBbGxv
Y2F0b3IuaXNWYWxpZCgpIHx8ICghT3B0aW9uczo6dXNlSklUKCkgJiYgIU9wdGlvbnM6OnVzZVJl
Z0V4cEpJVCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYgVVNFKENGKQotI2lmIENP
TVBJTEVSKEdDQykgJiYgIUNPTVBJTEVSKENMQU5HKQotICAgIC8vIEZJWE1FOiByZW1vdmUgdGhp
cyBvbmNlIHRoZSBFV1MgaGF2ZSBiZWVuIHVwZ3JhZGVkIHRvIExMVk0uCi0gICAgLy8gV29yayBh
cm91bmQgYSBidWcgb2YgR0NDIHdpdGggc3RyaWN0LWFsaWFzaW5nLgotICAgIFJldGFpblB0cjxD
RlN0cmluZ1JlZj4gY2FuVXNlSklUS2V5UmV0YWluKEFkb3B0Q0YsIENGU3RyaW5nQ3JlYXRlV2l0
aENTdHJpbmcoMCAsICJKYXZhU2NyaXB0Q29yZVVzZUpJVCIsIGtDRlN0cmluZ0VuY29kaW5nTWFj
Um9tYW4pKTsKLSAgICBDRlN0cmluZ1JlZiBjYW5Vc2VKSVRLZXkgPSBjYW5Vc2VKSVRLZXlSZXRh
aW4uZ2V0KCk7Ci0jZWxzZQotICAgIENGU3RyaW5nUmVmIGNhblVzZUpJVEtleSA9IENGU1RSKCJK
YXZhU2NyaXB0Q29yZVVzZUpJVCIpOwotI2VuZGlmIC8vIENPTVBJTEVSKEdDQykgJiYgIUNPTVBJ
TEVSKENMQU5HKQotICAgIFJldGFpblB0cjxDRkJvb2xlYW5SZWY+IGNhblVzZUpJVChBZG9wdENG
LCAoQ0ZCb29sZWFuUmVmKUNGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUoY2FuVXNlSklUS2V5LCBr
Q0ZQcmVmZXJlbmNlc0N1cnJlbnRBcHBsaWNhdGlvbikpOwotICAgIGlmIChjYW5Vc2VKSVQpCi0g
ICAgICAgIHJldHVybiBrQ0ZCb29sZWFuVHJ1ZSA9PSBjYW5Vc2VKSVQuZ2V0KCk7Ci0jZW5kaWYK
LQotI2lmIFVTRShDRikgfHwgT1MoVU5JWCkKLSAgICBjaGFyKiBjYW5Vc2VKSVRTdHJpbmcgPSBn
ZXRlbnYoIkphdmFTY3JpcHRDb3JlVXNlSklUIik7Ci0gICAgcmV0dXJuICFjYW5Vc2VKSVRTdHJp
bmcgfHwgYXRvaShjYW5Vc2VKSVRTdHJpbmcpOwotI2Vsc2UKLSAgICByZXR1cm4gdHJ1ZTsKLSNl
bmRpZgotfQotI2VuZGlmIC8vIEVOQUJMRSghQVNTRU1CTEVSKQotCi1KU0dsb2JhbERhdGE6OkpT
R2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwZSBnbG9iYWxEYXRhVHlwZSwgSGVhcFR5cGUgaGVhcFR5
cGUpCi0gICAgOiBtX2FwaUxvY2soYWRvcHRSZWYobmV3IEpTTG9jayh0aGlzKSkpCi0jaWYgRU5B
QkxFKEFTU0VNQkxFUikKLSAgICAsIGV4ZWN1dGFibGVBbGxvY2F0b3IoKnRoaXMpCi0jZW5kaWYK
LSAgICAsIGhlYXAodGhpcywgaGVhcFR5cGUpCi0gICAgLCBnbG9iYWxEYXRhVHlwZShnbG9iYWxE
YXRhVHlwZSkKLSAgICAsIGNsaWVudERhdGEoMCkKLSAgICAsIHRvcENhbGxGcmFtZShDYWxsRnJh
bWU6Om5vQ2FsbGVyKCkpCi0gICAgLCBhcnJheUNvbnN0cnVjdG9yVGFibGUoZmFzdE5ldzxIYXNo
VGFibGU+KEpTQzo6YXJyYXlDb25zdHJ1Y3RvclRhYmxlKSkKLSAgICAsIGFycmF5UHJvdG90eXBl
VGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6YXJyYXlQcm90b3R5cGVUYWJsZSkpCi0gICAg
LCBib29sZWFuUHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6Ym9vbGVhblBy
b3RvdHlwZVRhYmxlKSkKLSAgICAsIGRhdGVUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpk
YXRlVGFibGUpKQotICAgICwgZGF0ZUNvbnN0cnVjdG9yVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+
KEpTQzo6ZGF0ZUNvbnN0cnVjdG9yVGFibGUpKQotICAgICwgZXJyb3JQcm90b3R5cGVUYWJsZShm
YXN0TmV3PEhhc2hUYWJsZT4oSlNDOjplcnJvclByb3RvdHlwZVRhYmxlKSkKLSAgICAsIGdsb2Jh
bE9iamVjdFRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6Omdsb2JhbE9iamVjdFRhYmxlKSkK
LSAgICAsIGpzb25UYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpqc29uVGFibGUpKQotICAg
ICwgbWF0aFRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6Om1hdGhUYWJsZSkpCi0gICAgLCBu
dW1iZXJDb25zdHJ1Y3RvclRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6Om51bWJlckNvbnN0
cnVjdG9yVGFibGUpKQotICAgICwgbnVtYmVyUHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFi
bGU+KEpTQzo6bnVtYmVyUHJvdG90eXBlVGFibGUpKQotICAgICwgb2JqZWN0Q29uc3RydWN0b3JU
YWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpvYmplY3RDb25zdHJ1Y3RvclRhYmxlKSkKLSAg
ICAsIHByaXZhdGVOYW1lUHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6cHJp
dmF0ZU5hbWVQcm90b3R5cGVUYWJsZSkpCi0gICAgLCByZWdFeHBUYWJsZShmYXN0TmV3PEhhc2hU
YWJsZT4oSlNDOjpyZWdFeHBUYWJsZSkpCi0gICAgLCByZWdFeHBDb25zdHJ1Y3RvclRhYmxlKGZh
c3ROZXc8SGFzaFRhYmxlPihKU0M6OnJlZ0V4cENvbnN0cnVjdG9yVGFibGUpKQotICAgICwgcmVn
RXhwUHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6cmVnRXhwUHJvdG90eXBl
VGFibGUpKQotICAgICwgc3RyaW5nQ29uc3RydWN0b3JUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4o
SlNDOjpzdHJpbmdDb25zdHJ1Y3RvclRhYmxlKSkKLSAgICAsIGlkZW50aWZpZXJUYWJsZShnbG9i
YWxEYXRhVHlwZSA9PSBEZWZhdWx0ID8gd3RmVGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVy
VGFibGUoKSA6IGNyZWF0ZUlkZW50aWZpZXJUYWJsZSgpKQotICAgICwgcHJvcGVydHlOYW1lcyhu
ZXcgQ29tbW9uSWRlbnRpZmllcnModGhpcykpCi0gICAgLCBlbXB0eUxpc3QobmV3IE1hcmtlZEFy
Z3VtZW50QnVmZmVyKQotICAgICwgcGFyc2VyQXJlbmEoYWRvcHRQdHIobmV3IFBhcnNlckFyZW5h
KSkKLSAgICAsIGtleXdvcmRzKGFkb3B0UHRyKG5ldyBLZXl3b3Jkcyh0aGlzKSkpCi0gICAgLCBp
bnRlcnByZXRlcigwKQotICAgICwganNBcnJheUNsYXNzSW5mbygmSlNBcnJheTo6c19pbmZvKQot
ICAgICwganNGaW5hbE9iamVjdENsYXNzSW5mbygmSlNGaW5hbE9iamVjdDo6c19pbmZvKQotI2lm
IEVOQUJMRShERkdfSklUKQotICAgICwgc2l6ZU9mTGFzdFNjcmF0Y2hCdWZmZXIoMCkKLSNlbmRp
ZgotICAgICwgZHluYW1pY0dsb2JhbE9iamVjdCgwKQotICAgICwgY2FjaGVkVVRDT2Zmc2V0KFFO
YU4pCi0gICAgLCBtX2VuYWJsZWRQcm9maWxlcigwKQotICAgICwgbV9yZWdFeHBDYWNoZShuZXcg
UmVnRXhwQ2FjaGUodGhpcykpCi0jaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQotICAgICwgbV9y
dFRyYWNlTGlzdChuZXcgUlRUcmFjZUxpc3QoKSkKLSNlbmRpZgotI2lmbmRlZiBOREVCVUcKLSAg
ICAsIGV4Y2x1c2l2ZVRocmVhZCgwKQotI2VuZGlmCi0gICAgLCBtX25ld1N0cmluZ3NTaW5jZUxh
c3RIYXNoQ29ucygwKQotI2lmIEVOQUJMRShBU1NFTUJMRVIpCi0gICAgLCBtX2NhblVzZUFzc2Vt
YmxlcihlbmFibGVBc3NlbWJsZXIoZXhlY3V0YWJsZUFsbG9jYXRvcikpCi0jZW5kaWYKLSNpZiBF
TkFCTEUoSklUKQotICAgICwgbV9jYW5Vc2VKSVQobV9jYW5Vc2VBc3NlbWJsZXIgJiYgT3B0aW9u
czo6dXNlSklUKCkpCi0jZW5kaWYKLSNpZiBFTkFCTEUoWUFSUl9KSVQpCi0gICAgLCBtX2NhblVz
ZVJlZ0V4cEpJVChtX2NhblVzZUFzc2VtYmxlciAmJiBPcHRpb25zOjp1c2VSZWdFeHBKSVQoKSkK
LSNlbmRpZgotI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQotICAgICwgbV9pbml0aWFsaXppbmdP
YmplY3RDbGFzcygwKQotI2VuZGlmCi0gICAgLCBtX2luRGVmaW5lT3duUHJvcGVydHkoZmFsc2Up
Ci0gICAgLCBtX2NvZGVDYWNoZShDb2RlQ2FjaGU6OmNyZWF0ZSgpKQotewotICAgIGludGVycHJl
dGVyID0gbmV3IEludGVycHJldGVyKCp0aGlzKTsKLQotICAgIC8vIE5lZWQgdG8gYmUgY2FyZWZ1
bCB0byBrZWVwIGV2ZXJ5dGhpbmcgY29uc2lzdGVudCBoZXJlCi0gICAgSlNMb2NrSG9sZGVyIGxv
Y2sodGhpcyk7Ci0gICAgSWRlbnRpZmllclRhYmxlKiBleGlzdGluZ0VudHJ5SWRlbnRpZmllclRh
YmxlID0gd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoaWRlbnRpZmll
clRhYmxlKTsKLSAgICBzdHJ1Y3R1cmVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTdHJ1Y3R1cmU6OmNy
ZWF0ZVN0cnVjdHVyZSgqdGhpcykpOwotICAgIHN0cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlLnNl
dCgqdGhpcywgU3RydWN0dXJlUmFyZURhdGE6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKLSAgICBkZWJ1Z2dlckFjdGl2YXRpb25TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBEZWJ1
Z2dlckFjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAg
ICB0ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBUZXJtaW5hdGVk
RXhlY3V0aW9uRXJyb3I6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAg
ICBzdHJpbmdTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1N0cmluZzo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOwotICAgIG5vdEFuT2JqZWN0U3RydWN0dXJlLnNldCgqdGhpcywg
SlNOb3RBbk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAg
IHByb3BlcnR5TmFtZUl0ZXJhdG9yU3RydWN0dXJlLnNldCgqdGhpcywgSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvcjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAgIGdldHRl
clNldHRlclN0cnVjdHVyZS5zZXQoKnRoaXMsIEdldHRlclNldHRlcjo6Y3JlYXRlU3RydWN0dXJl
KCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAgIGFwaVdyYXBwZXJTdHJ1Y3R1cmUuc2V0KCp0aGlz
LCBKU0FQSVZhbHVlV3JhcHBlcjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkp
OwotICAgIEpTU2NvcGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Njb3BlOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgZXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRo
aXMsIEV4ZWN1dGFibGVCYXNlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7
Ci0gICAgbmF0aXZlRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIE5hdGl2ZUV4ZWN1dGFi
bGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICBldmFsRXhlY3V0
YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEV2YWxFeGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgcHJvZ3JhbUV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOwotICAgIGZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAg
IHJlZ0V4cFN0cnVjdHVyZS5zZXQoKnRoaXMsIFJlZ0V4cDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlz
LCAwLCBqc051bGwoKSkpOwotICAgIHNoYXJlZFN5bWJvbFRhYmxlU3RydWN0dXJlLnNldCgqdGhp
cywgU2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkp
KTsKLSAgICBzdHJ1Y3R1cmVDaGFpblN0cnVjdHVyZS5zZXQoKnRoaXMsIFN0cnVjdHVyZUNoYWlu
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgc3BhcnNlQXJyYXlW
YWx1ZU1hcFN0cnVjdHVyZS5zZXQoKnRoaXMsIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICB3aXRoU2NvcGVTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBKU1dpdGhTY29wZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkp
OwotICAgIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxs
KCkpKTsKLSAgICB1bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBV
bmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxs
KCkpKTsKLSAgICB1bmxpbmtlZEV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxp
bmtlZEV2YWxDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
LSAgICB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkp
OwotICAgIHByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9wZXJ0eVRhYmxlOjpj
cmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgc21hbGxTdHJpbmdzLmlu
aXRpYWxpemVDb21tb25TdHJpbmdzKCp0aGlzKTsKLQotICAgIHd0ZlRocmVhZERhdGEoKS5zZXRD
dXJyZW50SWRlbnRpZmllclRhYmxlKGV4aXN0aW5nRW50cnlJZGVudGlmaWVyVGFibGUpOwotCi0j
aWYgRU5BQkxFKEpJVCkKLSAgICBqaXRTdHVicyA9IGFkb3B0UHRyKG5ldyBKSVRUaHVua3MoKSk7
Ci0gICAgcGVyZm9ybVBsYXRmb3JtU3BlY2lmaWNKSVRBc3NlcnRpb25zKHRoaXMpOwotI2VuZGlm
Ci0gICAgCi0gICAgaW50ZXJwcmV0ZXItPmluaXRpYWxpemUodGhpcy0+Y2FuVXNlSklUKCkpOwot
ICAgIAotI2lmIEVOQUJMRShKSVQpCi0gICAgaW5pdGlhbGl6ZUhvc3RDYWxsUmV0dXJuVmFsdWUo
KTsgLy8gVGhpcyBpcyBuZWVkZWQgdG8gY29udmluY2UgdGhlIGxpbmtlciBub3QgdG8gZHJvcCBo
b3N0IGNhbGwgcmV0dXJuIHN1cHBvcnQuCi0jZW5kaWYKLQotICAgIGhlYXAubm90aWZ5SXNTYWZl
VG9Db2xsZWN0KCk7Ci0KLSAgICBMTEludDo6RGF0YTo6cGVyZm9ybUFzc2VydGlvbnMoKnRoaXMp
OwotICAgIAotICAgIGlmIChPcHRpb25zOjplbmFibGVQcm9maWxlcigpKSB7Ci0gICAgICAgIG1f
cGVyQnl0ZWNvZGVQcm9maWxlciA9IGFkb3B0UHRyKG5ldyBQcm9maWxlcjo6RGF0YWJhc2UoKnRo
aXMpKTsKLQotICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBwYXRoT3V0OwotI2lmICFPUyhXSU5D
RSkKLSAgICAgICAgY29uc3QgY2hhciogcHJvZmlsZXJQYXRoID0gZ2V0ZW52KCJKU0NfUFJPRklM
RVJfUEFUSCIpOwotICAgICAgICBpZiAocHJvZmlsZXJQYXRoKQotICAgICAgICAgICAgcGF0aE91
dC5wcmludChwcm9maWxlclBhdGgsICIvIik7Ci0jZW5kaWYKLSAgICAgICAgcGF0aE91dC5wcmlu
dCgiSlNDUHJvZmlsZS0iLCBnZXRDdXJyZW50UHJvY2Vzc0lEKCksICItIiwgbV9wZXJCeXRlY29k
ZVByb2ZpbGVyLT5kYXRhYmFzZUlEKCksICIuanNvbiIpOwotICAgICAgICBtX3BlckJ5dGVjb2Rl
UHJvZmlsZXItPnJlZ2lzdGVyVG9TYXZlQXRFeGl0KHBhdGhPdXQudG9DU3RyaW5nKCkuZGF0YSgp
KTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoY2FuVXNlSklUKCkpCi0g
ICAgICAgIG1fZGZnU3RhdGUgPSBhZG9wdFB0cihuZXcgREZHOjpMb25nTGl2ZWRTdGF0ZSgpKTsK
LSNlbmRpZgotfQotCi1KU0dsb2JhbERhdGE6On5KU0dsb2JhbERhdGEoKQotewotICAgIC8vIENs
ZWFyIHRoaXMgZmlyc3QgdG8gZW5zdXJlIHRoYXQgbm9ib2R5IHRyaWVzIHRvIHJlbW92ZSB0aGVt
c2VsdmVzIGZyb20gaXQuCi0gICAgbV9wZXJCeXRlY29kZVByb2ZpbGVyLmNsZWFyKCk7Ci0gICAg
Ci0gICAgQVNTRVJUKG1fYXBpTG9jay0+Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7Ci0g
ICAgbV9hcGlMb2NrLT53aWxsRGVzdHJveUdsb2JhbERhdGEodGhpcyk7Ci0gICAgaGVhcC5sYXN0
Q2hhbmNlVG9GaW5hbGl6ZSgpOwotCi0gICAgZGVsZXRlIGludGVycHJldGVyOwotI2lmbmRlZiBO
REVCVUcKLSAgICBpbnRlcnByZXRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SW50ZXJwcmV0ZXIqPigw
eGJiYWRiZWVmKTsKLSNlbmRpZgotCi0gICAgYXJyYXlQcm90b3R5cGVUYWJsZS0+ZGVsZXRlVGFi
bGUoKTsKLSAgICBhcnJheUNvbnN0cnVjdG9yVGFibGUtPmRlbGV0ZVRhYmxlKCk7Ci0gICAgYm9v
bGVhblByb3RvdHlwZVRhYmxlLT5kZWxldGVUYWJsZSgpOwotICAgIGRhdGVUYWJsZS0+ZGVsZXRl
VGFibGUoKTsKLSAgICBkYXRlQ29uc3RydWN0b3JUYWJsZS0+ZGVsZXRlVGFibGUoKTsKLSAgICBl
cnJvclByb3RvdHlwZVRhYmxlLT5kZWxldGVUYWJsZSgpOwotICAgIGdsb2JhbE9iamVjdFRhYmxl
LT5kZWxldGVUYWJsZSgpOwotICAgIGpzb25UYWJsZS0+ZGVsZXRlVGFibGUoKTsKLSAgICBtYXRo
VGFibGUtPmRlbGV0ZVRhYmxlKCk7Ci0gICAgbnVtYmVyQ29uc3RydWN0b3JUYWJsZS0+ZGVsZXRl
VGFibGUoKTsKLSAgICBudW1iZXJQcm90b3R5cGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKLSAgICBv
YmplY3RDb25zdHJ1Y3RvclRhYmxlLT5kZWxldGVUYWJsZSgpOwotICAgIHByaXZhdGVOYW1lUHJv
dG90eXBlVGFibGUtPmRlbGV0ZVRhYmxlKCk7Ci0gICAgcmVnRXhwVGFibGUtPmRlbGV0ZVRhYmxl
KCk7Ci0gICAgcmVnRXhwQ29uc3RydWN0b3JUYWJsZS0+ZGVsZXRlVGFibGUoKTsKLSAgICByZWdF
eHBQcm90b3R5cGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKLSAgICBzdHJpbmdDb25zdHJ1Y3RvclRh
YmxlLT5kZWxldGVUYWJsZSgpOwotCi0gICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJs
ZSo+KGFycmF5Q29uc3RydWN0b3JUYWJsZSkpOwotICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxI
YXNoVGFibGUqPihhcnJheVByb3RvdHlwZVRhYmxlKSk7Ci0gICAgZmFzdERlbGV0ZShjb25zdF9j
YXN0PEhhc2hUYWJsZSo+KGJvb2xlYW5Qcm90b3R5cGVUYWJsZSkpOwotICAgIGZhc3REZWxldGUo
Y29uc3RfY2FzdDxIYXNoVGFibGUqPihkYXRlVGFibGUpKTsKLSAgICBmYXN0RGVsZXRlKGNvbnN0
X2Nhc3Q8SGFzaFRhYmxlKj4oZGF0ZUNvbnN0cnVjdG9yVGFibGUpKTsKLSAgICBmYXN0RGVsZXRl
KGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oZXJyb3JQcm90b3R5cGVUYWJsZSkpOwotICAgIGZhc3RE
ZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihnbG9iYWxPYmplY3RUYWJsZSkpOwotICAgIGZh
c3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihqc29uVGFibGUpKTsKLSAgICBmYXN0RGVs
ZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4obWF0aFRhYmxlKSk7Ci0gICAgZmFzdERlbGV0ZShj
b25zdF9jYXN0PEhhc2hUYWJsZSo+KG51bWJlckNvbnN0cnVjdG9yVGFibGUpKTsKLSAgICBmYXN0
RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4obnVtYmVyUHJvdG90eXBlVGFibGUpKTsKLSAg
ICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4ob2JqZWN0Q29uc3RydWN0b3JUYWJs
ZSkpOwotICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihwcml2YXRlTmFtZVBy
b3RvdHlwZVRhYmxlKSk7Ci0gICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KHJl
Z0V4cFRhYmxlKSk7Ci0gICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KHJlZ0V4
cENvbnN0cnVjdG9yVGFibGUpKTsKLSAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxl
Kj4ocmVnRXhwUHJvdG90eXBlVGFibGUpKTsKLSAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFz
aFRhYmxlKj4oc3RyaW5nQ29uc3RydWN0b3JUYWJsZSkpOwotCi0gICAgZGVsZXRlIGVtcHR5TGlz
dDsKLQotICAgIGRlbGV0ZSBwcm9wZXJ0eU5hbWVzOwotICAgIGlmIChnbG9iYWxEYXRhVHlwZSAh
PSBEZWZhdWx0KQotICAgICAgICBkZWxldGVJZGVudGlmaWVyVGFibGUoaWRlbnRpZmllclRhYmxl
KTsKLQotICAgIGRlbGV0ZSBjbGllbnREYXRhOwotICAgIGRlbGV0ZSBtX3JlZ0V4cENhY2hlOwot
I2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKLSAgICBkZWxldGUgbV9ydFRyYWNlTGlzdDsKLSNl
bmRpZgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNjcmF0Y2hCdWZmZXJzLnNpemUoKTsgKytpKQotICAgICAgICBmYXN0RnJlZShzY3JhdGNoQnVm
ZmVyc1tpXSk7Ci0jZW5kaWYKLX0KLQotUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IEpTR2xvYmFs
RGF0YTo6Y3JlYXRlQ29udGV4dEdyb3VwKEhlYXBUeXBlIGhlYXBUeXBlKQotewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRhKEFQSUNvbnRleHRHcm91cCwgaGVhcFR5cGUpKTsK
LX0KLQotUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IEpTR2xvYmFsRGF0YTo6Y3JlYXRlKEhlYXBU
eXBlIGhlYXBUeXBlKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRhKERl
ZmF1bHQsIGhlYXBUeXBlKSk7Ci19Ci0KLVBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBKU0dsb2Jh
bERhdGE6OmNyZWF0ZUxlYWtlZChIZWFwVHlwZSBoZWFwVHlwZSkKLXsKLSAgICByZXR1cm4gY3Jl
YXRlKGhlYXBUeXBlKTsKLX0KLQotYm9vbCBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNlRXhp
c3RzKCkKLXsKLSAgICByZXR1cm4gc2hhcmVkSW5zdGFuY2VJbnRlcm5hbCgpOwotfQotCi1KU0ds
b2JhbERhdGEmIEpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuY2UoKQotewotICAgIEdsb2JhbEpT
TG9jayBnbG9iYWxMb2NrOwotICAgIEpTR2xvYmFsRGF0YSomIGluc3RhbmNlID0gc2hhcmVkSW5z
dGFuY2VJbnRlcm5hbCgpOwotICAgIGlmICghaW5zdGFuY2UpIHsKLSAgICAgICAgaW5zdGFuY2Ug
PSBhZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRhKEFQSVNoYXJlZCwgU21hbGxIZWFwKSkubGVha1Jl
ZigpOwotICAgICAgICBpbnN0YW5jZS0+bWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKTsK
LSAgICB9Ci0gICAgcmV0dXJuICppbnN0YW5jZTsKLX0KLQotSlNHbG9iYWxEYXRhKiYgSlNHbG9i
YWxEYXRhOjpzaGFyZWRJbnN0YW5jZUludGVybmFsKCkKLXsKLSAgICBzdGF0aWMgSlNHbG9iYWxE
YXRhKiBzaGFyZWRJbnN0YW5jZTsKLSAgICByZXR1cm4gc2hhcmVkSW5zdGFuY2U7Ci19Ci0KLSNp
ZiBFTkFCTEUoSklUKQotc3RhdGljIFRodW5rR2VuZXJhdG9yIHRodW5rR2VuZXJhdG9yRm9ySW50
cmluc2ljKEludHJpbnNpYyBpbnRyaW5zaWMpCi17Ci0gICAgc3dpdGNoIChpbnRyaW5zaWMpIHsK
LSAgICBjYXNlIENoYXJDb2RlQXRJbnRyaW5zaWM6Ci0gICAgICAgIHJldHVybiBjaGFyQ29kZUF0
VGh1bmtHZW5lcmF0b3I7Ci0gICAgY2FzZSBDaGFyQXRJbnRyaW5zaWM6Ci0gICAgICAgIHJldHVy
biBjaGFyQXRUaHVua0dlbmVyYXRvcjsKLSAgICBjYXNlIEZyb21DaGFyQ29kZUludHJpbnNpYzoK
LSAgICAgICAgcmV0dXJuIGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yOwotICAgIGNhc2UgU3Fy
dEludHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIHNxcnRUaHVua0dlbmVyYXRvcjsKLSAgICBjYXNl
IFBvd0ludHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIHBvd1RodW5rR2VuZXJhdG9yOwotICAgIGNh
c2UgQWJzSW50cmluc2ljOgotICAgICAgICByZXR1cm4gYWJzVGh1bmtHZW5lcmF0b3I7Ci0gICAg
Y2FzZSBGbG9vckludHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIGZsb29yVGh1bmtHZW5lcmF0b3I7
Ci0gICAgY2FzZSBDZWlsSW50cmluc2ljOgotICAgICAgICByZXR1cm4gY2VpbFRodW5rR2VuZXJh
dG9yOwotICAgIGNhc2UgUm91bmRJbnRyaW5zaWM6Ci0gICAgICAgIHJldHVybiByb3VuZFRodW5r
R2VuZXJhdG9yOwotICAgIGNhc2UgRXhwSW50cmluc2ljOgotICAgICAgICByZXR1cm4gZXhwVGh1
bmtHZW5lcmF0b3I7Ci0gICAgY2FzZSBMb2dJbnRyaW5zaWM6Ci0gICAgICAgIHJldHVybiBsb2dU
aHVua0dlbmVyYXRvcjsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19
Ci0KLU5hdGl2ZUV4ZWN1dGFibGUqIEpTR2xvYmFsRGF0YTo6Z2V0SG9zdEZ1bmN0aW9uKE5hdGl2
ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKLXsKLSAgICBy
ZXR1cm4gaml0U3R1YnMtPmhvc3RGdW5jdGlvblN0dWIodGhpcywgZnVuY3Rpb24sIGNvbnN0cnVj
dG9yKTsKLX0KLU5hdGl2ZUV4ZWN1dGFibGUqIEpTR2xvYmFsRGF0YTo6Z2V0SG9zdEZ1bmN0aW9u
KE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBJbnRyaW5zaWMgaW50cmluc2ljKQotewotICAgIEFT
U0VSVChjYW5Vc2VKSVQoKSk7Ci0gICAgcmV0dXJuIGppdFN0dWJzLT5ob3N0RnVuY3Rpb25TdHVi
KHRoaXMsIGZ1bmN0aW9uLCBpbnRyaW5zaWMgIT0gTm9JbnRyaW5zaWMgPyB0aHVua0dlbmVyYXRv
ckZvckludHJpbnNpYyhpbnRyaW5zaWMpIDogMCwgaW50cmluc2ljKTsKLX0KLQotI2Vsc2UgLy8g
IUVOQUJMRShKSVQpCi1OYXRpdmVFeGVjdXRhYmxlKiBKU0dsb2JhbERhdGE6OmdldEhvc3RGdW5j
dGlvbihOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3Ip
Ci17Ci0gICAgcmV0dXJuIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqdGhpcywgZnVuY3Rpb24s
IGNvbnN0cnVjdG9yKTsKLX0KLSNlbmRpZiAvLyAhRU5BQkxFKEpJVCkKLQotSlNHbG9iYWxEYXRh
OjpDbGllbnREYXRhOjp+Q2xpZW50RGF0YSgpCi17Ci19Ci0KLXZvaWQgSlNHbG9iYWxEYXRhOjpy
ZXNldERhdGVDYWNoZSgpCi17Ci0gICAgY2FjaGVkVVRDT2Zmc2V0ID0gUU5hTjsKLSAgICBkc3RP
ZmZzZXRDYWNoZS5yZXNldCgpOwotICAgIGNhY2hlZERhdGVTdHJpbmcgPSBTdHJpbmcoKTsKLSAg
ICBjYWNoZWREYXRlU3RyaW5nVmFsdWUgPSBRTmFOOwotICAgIGRhdGVJbnN0YW5jZUNhY2hlLnJl
c2V0KCk7Ci19Ci0KLXZvaWQgSlNHbG9iYWxEYXRhOjpzdGFydFNhbXBsaW5nKCkKLXsKLSAgICBp
bnRlcnByZXRlci0+c3RhcnRTYW1wbGluZygpOwotfQotCi12b2lkIEpTR2xvYmFsRGF0YTo6c3Rv
cFNhbXBsaW5nKCkKLXsKLSAgICBpbnRlcnByZXRlci0+c3RvcFNhbXBsaW5nKCk7Ci19Ci0KLXZv
aWQgSlNHbG9iYWxEYXRhOjpkaXNjYXJkQWxsQ29kZSgpCi17Ci0gICAgbV9jb2RlQ2FjaGUtPmNs
ZWFyKCk7Ci0gICAgaGVhcC5kZWxldGVBbGxDb21waWxlZENvZGUoKTsKLSAgICBoZWFwLnJlcG9y
dEFiYW5kb25lZE9iamVjdEdyYXBoKCk7Ci19Ci0KLXZvaWQgSlNHbG9iYWxEYXRhOjpkdW1wU2Ft
cGxlRGF0YShFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaW50ZXJwcmV0ZXItPmR1bXBTYW1wbGVE
YXRhKGV4ZWMpOwotI2lmIEVOQUJMRShBU1NFTUJMRVIpCi0gICAgRXhlY3V0YWJsZUFsbG9jYXRv
cjo6ZHVtcFByb2ZpbGUoKTsKLSNlbmRpZgotfQotCi1Tb3VyY2VQcm92aWRlckNhY2hlKiBKU0ds
b2JhbERhdGE6OmFkZFNvdXJjZVByb3ZpZGVyQ2FjaGUoU291cmNlUHJvdmlkZXIqIHNvdXJjZVBy
b3ZpZGVyKQotewotICAgIFNvdXJjZVByb3ZpZGVyQ2FjaGVNYXA6OkFkZFJlc3VsdCBhZGRSZXN1
bHQgPSBzb3VyY2VQcm92aWRlckNhY2hlTWFwLmFkZChzb3VyY2VQcm92aWRlciwgMCk7Ci0gICAg
aWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID0gYWRvcHRSZWYobmV3IFNvdXJjZVByb3ZpZGVyQ2FjaGUpOwotICAgIHJldHVybiBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwotfQotCi12b2lkIEpTR2xvYmFsRGF0YTo6Y2xl
YXJTb3VyY2VQcm92aWRlckNhY2hlcygpCi17Ci0gICAgc291cmNlUHJvdmlkZXJDYWNoZU1hcC5j
bGVhcigpOwotfQotCi1zdHJ1Y3QgU3RhY2tQcmVzZXJ2aW5nUmVjb21waWxlciA6IHB1YmxpYyBN
YXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewotICAgIEhhc2hTZXQ8RnVuY3Rpb25FeGVjdXRhYmxl
Kj4gY3VycmVudGx5RXhlY3V0aW5nRnVuY3Rpb25zOwotICAgIHZvaWQgb3BlcmF0b3IoKShKU0Nl
bGwqIGNlbGwpCi0gICAgewotICAgICAgICBpZiAoIWNlbGwtPmluaGVyaXRzKCZGdW5jdGlvbkV4
ZWN1dGFibGU6OnNfaW5mbykpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxs
KTsKLSAgICAgICAgaWYgKGN1cnJlbnRseUV4ZWN1dGluZ0Z1bmN0aW9ucy5jb250YWlucyhleGVj
dXRhYmxlKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZXhlY3V0YWJsZS0+Y2xlYXJD
b2RlSWZOb3RDb21waWxpbmcoKTsKLSAgICB9Ci19OwotCi12b2lkIEpTR2xvYmFsRGF0YTo6cmVs
ZWFzZUV4ZWN1dGFibGVNZW1vcnkoKQotewotICAgIGlmIChkeW5hbWljR2xvYmFsT2JqZWN0KSB7
Ci0gICAgICAgIFN0YWNrUHJlc2VydmluZ1JlY29tcGlsZXIgcmVjb21waWxlcjsKLSAgICAgICAg
SGFzaFNldDxKU0NlbGwqPiByb290czsKLSAgICAgICAgaGVhcC5jYW5vbmljYWxpemVDZWxsTGl2
ZW5lc3NEYXRhKCk7Ci0gICAgICAgIGhlYXAuZ2V0Q29uc2VydmF0aXZlUmVnaXN0ZXJSb290cyhy
b290cyk7Ci0gICAgICAgIEhhc2hTZXQ8SlNDZWxsKj46Oml0ZXJhdG9yIGVuZCA9IHJvb3RzLmVu
ZCgpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8SlNDZWxsKj46Oml0ZXJhdG9yIHB0ciA9IHJvb3Rz
LmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKSB7Ci0gICAgICAgICAgICBTY3JpcHRFeGVjdXRh
YmxlKiBleGVjdXRhYmxlID0gMDsKLSAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9ICpwdHI7Ci0g
ICAgICAgICAgICBpZiAoY2VsbC0+aW5oZXJpdHMoJlNjcmlwdEV4ZWN1dGFibGU6OnNfaW5mbykp
Ci0gICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PFNjcmlwdEV4ZWN1dGFi
bGUqPigqcHRyKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNlbGwtPmluaGVyaXRzKCZKU0Z1bmN0
aW9uOjpzX2luZm8pKSB7Ci0gICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBq
c0Nhc3Q8SlNGdW5jdGlvbio+KCpwdHIpOwotICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+
aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5qc0V4ZWN1dGFibGUoKTsKLSAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgQVNTRVJU
KGV4ZWN1dGFibGUtPmluaGVyaXRzKCZTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8pKTsKLSAgICAg
ICAgICAgIGV4ZWN1dGFibGUtPnVubGlua0NhbGxzKCk7Ci0gICAgICAgICAgICBpZiAoZXhlY3V0
YWJsZS0+aW5oZXJpdHMoJkZ1bmN0aW9uRXhlY3V0YWJsZTo6c19pbmZvKSkKLSAgICAgICAgICAg
ICAgICByZWNvbXBpbGVyLmN1cnJlbnRseUV4ZWN1dGluZ0Z1bmN0aW9ucy5hZGQoc3RhdGljX2Nh
c3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSkpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICB9Ci0gICAgICAgIGhlYXAub2JqZWN0U3BhY2UoKS5mb3JFYWNoTGl2ZUNlbGw8U3Rh
Y2tQcmVzZXJ2aW5nUmVjb21waWxlcj4ocmVjb21waWxlcik7Ci0gICAgfQotICAgIG1fcmVnRXhw
Q2FjaGUtPmludmFsaWRhdGVDb2RlKCk7Ci0gICAgaGVhcC5jb2xsZWN0QWxsR2FyYmFnZSgpOwot
fQotICAgIAotdm9pZCByZWxlYXNlRXhlY3V0YWJsZU1lbW9yeShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCi17Ci0gICAgZ2xvYmFsRGF0YS5yZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSgpOwotfQot
Ci0jaWYgRU5BQkxFKERGR19KSVQpCi12b2lkIEpTR2xvYmFsRGF0YTo6Z2F0aGVyQ29uc2VydmF0
aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQotewotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2NyYXRjaEJ1ZmZlcnMuc2l6ZSgpOyBpKyspIHsKLSAgICAg
ICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHNjcmF0Y2hCdWZmZXJzW2ldOwotICAg
ICAgICBpZiAoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIHZv
aWQqIGJ1ZmZlclN0YXJ0ID0gc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpOwotICAgICAgICAg
ICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJ1ZmZlclN0YXJ0LCBzdGF0aWNfY2FzdDx2b2lkKj4o
c3RhdGljX2Nhc3Q8Y2hhcio+KGJ1ZmZlclN0YXJ0KSArIHNjcmF0Y2hCdWZmZXItPmFjdGl2ZUxl
bmd0aCgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShSRUdF
WFBfVFJBQ0lORykKLXZvaWQgSlNHbG9iYWxEYXRhOjphZGRSZWdFeHBUb1RyYWNlKFJlZ0V4cCog
cmVnRXhwKQotewotICAgIG1fcnRUcmFjZUxpc3QtPmFkZChyZWdFeHApOwotfQotCi12b2lkIEpT
R2xvYmFsRGF0YTo6ZHVtcFJlZ0V4cFRyYWNlKCkKLXsKLSAgICAvLyBUaGUgZmlyc3QgUmVnRXhw
IG9iamVjdCBpcyBpZ25vcmVkLiAgSXQgaXMgY3JlYXRlIGJ5IHRoZSBSZWdFeHBQcm90b3R5cGUg
Y3RvciBhbmQgbm90IHVzZWQuCi0gICAgUlRUcmFjZUxpc3Q6Oml0ZXJhdG9yIGl0ZXIgPSArK21f
cnRUcmFjZUxpc3QtPmJlZ2luKCk7Ci0gICAgCi0gICAgaWYgKGl0ZXIgIT0gbV9ydFRyYWNlTGlz
dC0+ZW5kKCkpIHsKLSAgICAgICAgZGF0YUxvZ0YoIlxuUmVnRXhwIFRyYWNpbmdcbiIpOwotICAg
ICAgICBkYXRhTG9nRigiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWF0Y2goKSAgICBtYXRjaGVzXG4iKTsKLSAgICAgICAgZGF0YUxv
Z0YoIlJlZ3VsYXIgRXhwcmVzc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgSklUIEFkZHJl
c3MgICAgICBjYWxscyAgICAgIGZvdW5kXG4iKTsKLSAgICAgICAgZGF0YUxvZ0YoIi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t
LS0tKy0tLS0tLS0tLS1cbiIpOwotICAgIAotICAgICAgICB1bnNpZ25lZCByZUNvdW50ID0gMDsK
LSAgICAKLSAgICAgICAgZm9yICg7IGl0ZXIgIT0gbV9ydFRyYWNlTGlzdC0+ZW5kKCk7ICsraXRl
ciwgKytyZUNvdW50KQotICAgICAgICAgICAgKCppdGVyKS0+cHJpbnRUcmFjZURhdGEoKTsKLQot
ICAgICAgICBkYXRhTG9nRigiJWQgUmVndWxhciBFeHByZXNzaW9uc1xuIiwgcmVDb3VudCk7Ci0g
ICAgfQotICAgIAotICAgIG1fcnRUcmFjZUxpc3QtPmNsZWFyKCk7Ci19Ci0jZWxzZQotdm9pZCBK
U0dsb2JhbERhdGE6OmR1bXBSZWdFeHBUcmFjZSgpCi17Ci19Ci0jZW5kaWYKLQotfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERh
dGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bERhdGEuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTI1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgSlNHbG9iYWxEYXRhX2gKLSNkZWZpbmUgSlNHbG9iYWxEYXRhX2gK
LQotI2luY2x1ZGUgIkNhY2hlZFRyYW5zY2VuZGVudGFsRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJE
YXRlSW5zdGFuY2VDYWNoZS5oIgotI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKLSNp
bmNsdWRlICJIZWFwLmgiCi0jaW5jbHVkZSAiSW50cmluc2ljLmgiCi0jaW5jbHVkZSAiSklUVGh1
bmtzLmgiCi0jaW5jbHVkZSAiSklUVGh1bmtzLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgot
I2luY2x1ZGUgIkpTTG9jay5oIgotI2luY2x1ZGUgIkxMSW50RGF0YS5oIgotI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyQ29kZVJlZi5oIgotI2luY2x1ZGUgIk51bWVyaWNTdHJpbmdzLmgiCi0jaW5j
bHVkZSAiUHJvZmlsZXJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIlByaXZhdGVOYW1lLmgiCi0jaW5j
bHVkZSAiUHJvdG90eXBlTWFwLmgiCi0jaW5jbHVkZSAiU21hbGxTdHJpbmdzLmgiCi0jaW5jbHVk
ZSAiU3Ryb25nLmgiCi0jaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCi0jaW5jbHVkZSAiVHlw
ZWRBcnJheURlc2NyaXB0b3IuaCIKLSNpbmNsdWRlICJXYXRjaGRvZy5oIgotI2luY2x1ZGUgIldl
YWtSYW5kb20uaCIKLSNpbmNsdWRlIDx3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3IuaD4KLSNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9TaW1wbGVTdGF0cy5oPgotI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRT
cGVjaWZpYy5oPgotI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+Ci0jaWYgRU5BQkxFKFJF
R0VYUF9UUkFDSU5HKQotI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgotI2VuZGlmCi0KLW5h
bWVzcGFjZSBKU0MgewotCi0gICAgY2xhc3MgQ29kZUJsb2NrOwotICAgIGNsYXNzIENvZGVDYWNo
ZTsKLSAgICBjbGFzcyBDb21tb25JZGVudGlmaWVyczsKLSAgICBjbGFzcyBFeGVjU3RhdGU7Ci0g
ICAgY2xhc3MgSGFuZGxlU3RhY2s7Ci0gICAgY2xhc3MgSWRlbnRpZmllclRhYmxlOwotICAgIGNs
YXNzIEludGVycHJldGVyOwotICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwotICAgIGNsYXNzIEpT
T2JqZWN0OwotICAgIGNsYXNzIEtleXdvcmRzOwotICAgIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKLSAgICBjbGFzcyBMZWdhY3lQcm9maWxlcjsKLSAgICBjbGFzcyBOYXRpdmVFeGVjdXRh
YmxlOwotICAgIGNsYXNzIFBhcnNlckFyZW5hOwotICAgIGNsYXNzIFJlZ0V4cENhY2hlOwotICAg
IGNsYXNzIFNvdXJjZVByb3ZpZGVyOwotICAgIGNsYXNzIFNvdXJjZVByb3ZpZGVyQ2FjaGU7Ci0g
ICAgc3RydWN0IFN0YWNrRnJhbWU7Ci0gICAgY2xhc3MgU3RyaW5naWZpZXI7Ci0gICAgY2xhc3Mg
U3RydWN0dXJlOwotI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKLSAgICBjbGFzcyBSZWdFeHA7
Ci0jZW5kaWYKLSAgICBjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKLSAgICBjbGFzcyBVbmxpbmtl
ZEV2YWxDb2RlQmxvY2s7Ci0gICAgY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7Ci0g
ICAgY2xhc3MgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOwotCi0jaWYgRU5BQkxFKERGR19KSVQp
Ci0gICAgbmFtZXNwYWNlIERGRyB7Ci0gICAgY2xhc3MgTG9uZ0xpdmVkU3RhdGU7Ci0gICAgfQot
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0gICAgc3RydWN0IEhhc2hUYWJsZTsKLSAgICBz
dHJ1Y3QgSW5zdHJ1Y3Rpb247Ci0KLSAgICBzdHJ1Y3QgRFNUT2Zmc2V0Q2FjaGUgewotICAgICAg
ICBEU1RPZmZzZXRDYWNoZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc2V0KCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgcmVzZXQoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBvZmZzZXQgPSAwLjA7Ci0gICAgICAgICAgICBzdGFydCA9IDAuMDsKLSAgICAgICAgICAg
IGVuZCA9IC0xLjA7Ci0gICAgICAgICAgICBpbmNyZW1lbnQgPSAwLjA7Ci0gICAgICAgIH0KLQot
ICAgICAgICBkb3VibGUgb2Zmc2V0OwotICAgICAgICBkb3VibGUgc3RhcnQ7Ci0gICAgICAgIGRv
dWJsZSBlbmQ7Ci0gICAgICAgIGRvdWJsZSBpbmNyZW1lbnQ7Ci0gICAgfTsKLQotI2lmIEVOQUJM
RShERkdfSklUKQotICAgIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOwotCi0jaWYgQ09NUElMRVIo
TVNWQykKLSNwcmFnbWEgd2FybmluZyhwdXNoKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQy
MDApIC8vIERpc2FibGUgInplcm8tc2l6ZWQgYXJyYXkgaW4gc3RydWN0L3VuaW9uIiB3YXJuaW5n
Ci0jZW5kaWYKLSAgICBzdHJ1Y3QgU2NyYXRjaEJ1ZmZlciB7Ci0gICAgICAgIFNjcmF0Y2hCdWZm
ZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICB1Lm1fYWN0aXZlTGVuZ3RoID0gMDsKLSAgICAg
ICAgfQotCi0gICAgICAgIHN0YXRpYyBTY3JhdGNoQnVmZmVyKiBjcmVhdGUoc2l6ZV90IHNpemUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFNjcmF0Y2hCdWZmZXIqIHJlc3VsdCA9IG5ldyAoZmFz
dE1hbGxvYyhTY3JhdGNoQnVmZmVyOjphbGxvY2F0aW9uU2l6ZShzaXplKSkpIFNjcmF0Y2hCdWZm
ZXI7Ci0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBz
dGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKHNpemVfdCBidWZmZXJTaXplKSB7IHJldHVybiBz
aXplb2YoU2NyYXRjaEJ1ZmZlcikgKyBidWZmZXJTaXplOyB9Ci0gICAgICAgIHZvaWQgc2V0QWN0
aXZlTGVuZ3RoKHNpemVfdCBhY3RpdmVMZW5ndGgpIHsgdS5tX2FjdGl2ZUxlbmd0aCA9IGFjdGl2
ZUxlbmd0aDsgfQotICAgICAgICBzaXplX3QgYWN0aXZlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
dS5tX2FjdGl2ZUxlbmd0aDsgfTsKLSAgICAgICAgc2l6ZV90KiBhY3RpdmVMZW5ndGhQdHIoKSB7
IHJldHVybiAmdS5tX2FjdGl2ZUxlbmd0aDsgfTsKLSAgICAgICAgdm9pZCogZGF0YUJ1ZmZlcigp
IHsgcmV0dXJuIG1fYnVmZmVyOyB9Ci0KLSAgICAgICAgdW5pb24gewotICAgICAgICAgICAgc2l6
ZV90IG1fYWN0aXZlTGVuZ3RoOwotICAgICAgICAgICAgZG91YmxlIHBhZDsgLy8gTWFrZSBzdXJl
IG1fYnVmZmVyIGlzIGRvdWJsZSBhbGlnbmVkLgotICAgICAgICB9IHU7Ci0jaWYgQ1BVKE1JUFMp
ICYmIChkZWZpbmVkIFdURl9NSVBTX0FSQ0hfUkVWICYmIFdURl9NSVBTX0FSQ0hfUkVWID09IDIp
Ci0gICAgICAgIHZvaWQqIG1fYnVmZmVyWzBdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsK
LSNlbHNlCi0gICAgICAgIHZvaWQqIG1fYnVmZmVyWzBdOwotI2VuZGlmCi0gICAgfTsKLSNpZiBD
T01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkKLSNlbmRpZgotI2VuZGlmCi0KLSAg
ICBjbGFzcyBKU0dsb2JhbERhdGEgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SlNHbG9i
YWxEYXRhPiB7Ci0gICAgcHVibGljOgotICAgICAgICAvLyBXZWJDb3JlIGhhcyBhIG9uZS10by1v
bmUgbWFwcGluZyBvZiB0aHJlYWRzIHRvIEpTR2xvYmFsRGF0YXM7Ci0gICAgICAgIC8vIGVpdGhl
ciBjcmVhdGUoKSBvciBjcmVhdGVMZWFrZWQoKSBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZQot
ICAgICAgICAvLyBvbiBhIHRocmVhZCwgdGhpcyBpcyB0aGUgJ2RlZmF1bHQnIEpTR2xvYmFsRGF0
YSAoaXQgdXNlcyB0aGUKLSAgICAgICAgLy8gdGhyZWFkJ3MgZGVmYXVsdCBzdHJpbmcgdW5pcXVp
bmcgdGFibGUgZnJvbSB3dGZUaHJlYWREYXRhKS4KLSAgICAgICAgLy8gQVBJIGNvbnRleHRzIGNy
ZWF0ZWQgdXNpbmcgdGhlIG5ldyBjb250ZXh0IGdyb3VwIGF3YXJlIGludGVyZmFjZQotICAgICAg
ICAvLyBjcmVhdGUgQVBJQ29udGV4dEdyb3VwIG9iamVjdHMgd2hpY2ggcmVxdWlyZSBsZXNzIGxv
Y2tpbmcgb2YgSlNDCi0gICAgICAgIC8vIHRoYW4gdGhlIG9sZCBzaW5nbGV0b24gQVBJU2hhcmVk
IEpTR2xvYmFsRGF0YSBjcmVhdGVkIGZvciB1c2UgYnkKLSAgICAgICAgLy8gdGhlIG9yaWdpbmFs
IEFQSS4KLSAgICAgICAgZW51bSBHbG9iYWxEYXRhVHlwZSB7IERlZmF1bHQsIEFQSUNvbnRleHRH
cm91cCwgQVBJU2hhcmVkIH07Ci0gICAgICAgIAotICAgICAgICBzdHJ1Y3QgQ2xpZW50RGF0YSB7
Ci0gICAgICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5DbGllbnREYXRhKCkgPSAw
OwotICAgICAgICB9OwotCi0gICAgICAgIGJvb2wgaXNTaGFyZWRJbnN0YW5jZSgpIHsgcmV0dXJu
IGdsb2JhbERhdGFUeXBlID09IEFQSVNoYXJlZDsgfQotICAgICAgICBib29sIHVzaW5nQVBJKCkg
eyByZXR1cm4gZ2xvYmFsRGF0YVR5cGUgIT0gRGVmYXVsdDsgfQotICAgICAgICBzdGF0aWMgYm9v
bCBzaGFyZWRJbnN0YW5jZUV4aXN0cygpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgSlNHbG9iYWxEYXRhJiBzaGFyZWRJbnN0YW5jZSgpOwotCi0gICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4gY3JlYXRlKEhlYXBUeXBlID0g
U21hbGxIZWFwKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFBhc3NSZWZQdHI8
SlNHbG9iYWxEYXRhPiBjcmVhdGVMZWFrZWQoSGVhcFR5cGUgPSBTbWFsbEhlYXApOwotICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IGNyZWF0ZUNvbnRleHRHcm91cChIZWFw
VHlwZSA9IFNtYWxsSGVhcCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIH5KU0dsb2JhbERh
dGEoKTsKLQotICAgICAgICB2b2lkIG1ha2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCkgeyBo
ZWFwLm1hY2hpbmVUaHJlYWRzKCkubWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKTsgfQot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTTG9jaz4gbV9hcGlMb2NrOwotCi0gICAg
cHVibGljOgotI2lmIEVOQUJMRShBU1NFTUJMRVIpCi0gICAgICAgIC8vIGV4ZWN1dGFibGVBbGxv
Y2F0b3Igc2hvdWxkIGJlIGRlc3RydWN0ZWQgYWZ0ZXIgdGhlIGhlYXAsIGFzIHRoZSBoZWFwIGNh
biBjYWxsIGV4ZWN1dGFibGVBbGxvY2F0b3IKLSAgICAgICAgLy8gaW4gaXRzIGRlc3RydWN0b3Iu
Ci0gICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IgZXhlY3V0YWJsZUFsbG9jYXRvcjsKLSNlbmRp
ZgotCi0gICAgICAgIC8vIFRoZSBoZWFwIHNob3VsZCBiZSBqdXN0IGFmdGVyIGV4ZWN1dGFibGVB
bGxvY2F0b3IgYW5kIGJlZm9yZSBvdGhlciBtZW1iZXJzIHRvIGVuc3VyZSB0aGF0IGl0J3MKLSAg
ICAgICAgLy8gZGVzdHJ1Y3RlZCBhZnRlciBhbGwgdGhlIG9iamVjdHMgdGhhdCByZWZlcmVuY2Ug
aXQuCi0gICAgICAgIEhlYXAgaGVhcDsKLSAgICAgICAgCi0jaWYgRU5BQkxFKERGR19KSVQpCi0g
ICAgICAgIE93blB0cjxERkc6OkxvbmdMaXZlZFN0YXRlPiBtX2RmZ1N0YXRlOwotI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQotCi0gICAgICAgIEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFUeXBl
OwotICAgICAgICBDbGllbnREYXRhKiBjbGllbnREYXRhOwotICAgICAgICBFeGVjU3RhdGUqIHRv
cENhbGxGcmFtZTsKLSAgICAgICAgV2F0Y2hkb2cgd2F0Y2hkb2c7Ci0KLSAgICAgICAgY29uc3Qg
SGFzaFRhYmxlKiBhcnJheUNvbnN0cnVjdG9yVGFibGU7Ci0gICAgICAgIGNvbnN0IEhhc2hUYWJs
ZSogYXJyYXlQcm90b3R5cGVUYWJsZTsKLSAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBib29sZWFu
UHJvdG90eXBlVGFibGU7Ci0gICAgICAgIGNvbnN0IEhhc2hUYWJsZSogZGF0ZVRhYmxlOwotICAg
ICAgICBjb25zdCBIYXNoVGFibGUqIGRhdGVDb25zdHJ1Y3RvclRhYmxlOwotICAgICAgICBjb25z
dCBIYXNoVGFibGUqIGVycm9yUHJvdG90eXBlVGFibGU7Ci0gICAgICAgIGNvbnN0IEhhc2hUYWJs
ZSogZ2xvYmFsT2JqZWN0VGFibGU7Ci0gICAgICAgIGNvbnN0IEhhc2hUYWJsZSoganNvblRhYmxl
OwotICAgICAgICBjb25zdCBIYXNoVGFibGUqIG1hdGhUYWJsZTsKLSAgICAgICAgY29uc3QgSGFz
aFRhYmxlKiBudW1iZXJDb25zdHJ1Y3RvclRhYmxlOwotICAgICAgICBjb25zdCBIYXNoVGFibGUq
IG51bWJlclByb3RvdHlwZVRhYmxlOwotICAgICAgICBjb25zdCBIYXNoVGFibGUqIG9iamVjdENv
bnN0cnVjdG9yVGFibGU7Ci0gICAgICAgIGNvbnN0IEhhc2hUYWJsZSogcHJpdmF0ZU5hbWVQcm90
b3R5cGVUYWJsZTsKLSAgICAgICAgY29uc3QgSGFzaFRhYmxlKiByZWdFeHBUYWJsZTsKLSAgICAg
ICAgY29uc3QgSGFzaFRhYmxlKiByZWdFeHBDb25zdHJ1Y3RvclRhYmxlOwotICAgICAgICBjb25z
dCBIYXNoVGFibGUqIHJlZ0V4cFByb3RvdHlwZVRhYmxlOwotICAgICAgICBjb25zdCBIYXNoVGFi
bGUqIHN0cmluZ0NvbnN0cnVjdG9yVGFibGU7Ci0gICAgICAgIAotICAgICAgICBTdHJvbmc8U3Ry
dWN0dXJlPiBzdHJ1Y3R1cmVTdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0
cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBkZWJ1
Z2dlckFjdGl2YXRpb25TdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHRlcm1p
bmF0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4g
c3RyaW5nU3RydWN0dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBub3RBbk9iamVjdFN0
cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvcGVydHlOYW1lSXRlcmF0b3JT
dHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGdldHRlclNldHRlclN0cnVjdHVy
ZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gYXBpV3JhcHBlclN0cnVjdHVyZTsKLSAgICAg
ICAgU3Ryb25nPFN0cnVjdHVyZT4gSlNTY29wZVN0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0
cnVjdHVyZT4gZXhlY3V0YWJsZVN0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4g
bmF0aXZlRXhlY3V0YWJsZVN0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZXZh
bEV4ZWN1dGFibGVTdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb2dyYW1F
eGVjdXRhYmxlU3RydWN0dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBmdW5jdGlvbkV4
ZWN1dGFibGVTdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHJlZ0V4cFN0cnVj
dHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc2hhcmVkU3ltYm9sVGFibGVTdHJ1Y3R1
cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVyZUNoYWluU3RydWN0dXJlOwot
ICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzcGFyc2VBcnJheVZhbHVlTWFwU3RydWN0dXJlOwot
ICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB3aXRoU2NvcGVTdHJ1Y3R1cmU7Ci0gICAgICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlOwotICAg
ICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmU7
Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRXZhbENvZGVCbG9ja1N0cnVjdHVy
ZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0
cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvcGVydHlUYWJsZVN0cnVjdHVy
ZTsKLQotICAgICAgICBJZGVudGlmaWVyVGFibGUqIGlkZW50aWZpZXJUYWJsZTsKLSAgICAgICAg
Q29tbW9uSWRlbnRpZmllcnMqIHByb3BlcnR5TmFtZXM7Ci0gICAgICAgIGNvbnN0IE1hcmtlZEFy
Z3VtZW50QnVmZmVyKiBlbXB0eUxpc3Q7IC8vIExpc3RzIGFyZSBzdXBwb3NlZCB0byBiZSBhbGxv
Y2F0ZWQgb24gdGhlIHN0YWNrIHRvIGhhdmUgdGhlaXIgZWxlbWVudHMgcHJvcGVybHkgbWFya2Vk
LCB3aGljaCBpcyBub3QgdGhlIGNhc2UgaGVyZSAtIGJ1dCB0aGlzIGxpc3QgaGFzIG5vdGhpbmcg
dG8gbWFyay4KLSAgICAgICAgU21hbGxTdHJpbmdzIHNtYWxsU3RyaW5nczsKLSAgICAgICAgTnVt
ZXJpY1N0cmluZ3MgbnVtZXJpY1N0cmluZ3M7Ci0gICAgICAgIERhdGVJbnN0YW5jZUNhY2hlIGRh
dGVJbnN0YW5jZUNhY2hlOwotICAgICAgICBXVEY6OlNpbXBsZVN0YXRzIG1hY2hpbmVDb2RlQnl0
ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVDsKLSAgICAgICAgVmVjdG9yPENvZGVCbG9j
ayo+IGNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkOwotICAgICAgICB2b2lkIHN0YXJ0ZWRDb21waWxp
bmcoQ29kZUJsb2NrKiBjb2RlQmxvY2spCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvZGVCbG9j
a3NCZWluZ0NvbXBpbGVkLmFwcGVuZChjb2RlQmxvY2spOwotICAgICAgICB9Ci0KLSAgICAgICAg
dm9pZCBmaW5pc2hlZENvbXBpbGluZyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKLSAgICAgICAgewot
ICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGNvZGVCbG9jayA9PSBjb2RlQmxv
Y2tzQmVpbmdDb21waWxlZC5sYXN0KCkpOwotICAgICAgICAgICAgY29kZUJsb2Nrc0JlaW5nQ29t
cGlsZWQucmVtb3ZlTGFzdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRJbkRlZmlu
ZU93blByb3BlcnR5KGJvb2wgaW5EZWZpbmVPd25Qcm9wZXJ0eSkKLSAgICAgICAgewotICAgICAg
ICAgICAgbV9pbkRlZmluZU93blByb3BlcnR5ID0gaW5EZWZpbmVPd25Qcm9wZXJ0eTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGJvb2wgaXNJbkRlZmluZU93blByb3BlcnR5KCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIG1faW5EZWZpbmVPd25Qcm9wZXJ0eTsKLSAgICAgICAgfQotCi0g
ICAgICAgIExlZ2FjeVByb2ZpbGVyKiBlbmFibGVkUHJvZmlsZXIoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbV9lbmFibGVkUHJvZmlsZXI7Ci0gICAgICAgIH0KLQotI2lmIEVOQUJM
RShKSVQpICYmIEVOQUJMRShMTElOVCkKLSAgICAgICAgYm9vbCBjYW5Vc2VKSVQoKSB7IHJldHVy
biBtX2NhblVzZUpJVDsgfQotI2VsaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgYm9vbCBjYW5Vc2VK
SVQoKSB7IHJldHVybiB0cnVlOyB9IC8vIGppdCBvbmx5Ci0jZWxzZQotICAgICAgICBib29sIGNh
blVzZUpJVCgpIHsgcmV0dXJuIGZhbHNlOyB9IC8vIGludGVycHJldGVyIG9ubHkKLSNlbmRpZgot
Ci0jaWYgRU5BQkxFKFlBUlJfSklUKQotICAgICAgICBib29sIGNhblVzZVJlZ0V4cEpJVCgpIHsg
cmV0dXJuIG1fY2FuVXNlUmVnRXhwSklUOyB9Ci0jZWxzZQotICAgICAgICBib29sIGNhblVzZVJl
Z0V4cEpJVCgpIHsgcmV0dXJuIGZhbHNlOyB9IC8vIGludGVycHJldGVyIG9ubHkKLSNlbmRpZgot
Ci0gICAgICAgIFNvdXJjZVByb3ZpZGVyQ2FjaGUqIGFkZFNvdXJjZVByb3ZpZGVyQ2FjaGUoU291
cmNlUHJvdmlkZXIqKTsKLSAgICAgICAgdm9pZCBjbGVhclNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7
Ci0KLSAgICAgICAgUHJvdG90eXBlTWFwIHByb3RvdHlwZU1hcDsKLQotICAgICAgICBPd25QdHI8
UGFyc2VyQXJlbmE+IHBhcnNlckFyZW5hOwotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRy
PFNvdXJjZVByb3ZpZGVyPiwgUmVmUHRyPFNvdXJjZVByb3ZpZGVyQ2FjaGU+ID4gU291cmNlUHJv
dmlkZXJDYWNoZU1hcDsKLSAgICAgICAgU291cmNlUHJvdmlkZXJDYWNoZU1hcCBzb3VyY2VQcm92
aWRlckNhY2hlTWFwOwotICAgICAgICBPd25QdHI8S2V5d29yZHM+IGtleXdvcmRzOwotICAgICAg
ICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXI7Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgT3du
UHRyPEpJVFRodW5rcz4gaml0U3R1YnM7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBn
ZXRDVElTdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGppdFN0dWJzLT5jdGlTdHViKHRoaXMsIGdlbmVyYXRvcik7Ci0gICAgICAgIH0K
LSAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9u
LCBJbnRyaW5zaWMpOwotI2VuZGlmCi0gICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdldEhvc3RG
dW5jdGlvbihOYXRpdmVGdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpOwotCi0g
ICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uOwotICAgICAgICBSZWZDb3VudGVkQXJyYXk8U3RhY2tG
cmFtZT4gZXhjZXB0aW9uU3RhY2s7Ci0KLSAgICAgICAgY29uc3QgQ2xhc3NJbmZvKiBjb25zdCBq
c0FycmF5Q2xhc3NJbmZvOwotICAgICAgICBjb25zdCBDbGFzc0luZm8qIGNvbnN0IGpzRmluYWxP
YmplY3RDbGFzc0luZm87Ci0KLSAgICAgICAgUmV0dXJuQWRkcmVzc1B0ciBleGNlcHRpb25Mb2Nh
dGlvbjsKLSAgICAgICAgSlNWYWx1ZSBob3N0Q2FsbFJldHVyblZhbHVlOwotICAgICAgICBFeGVj
U3RhdGUqIGNhbGxGcmFtZUZvclRocm93OwotICAgICAgICB2b2lkKiB0YXJnZXRNYWNoaW5lUENG
b3JUaHJvdzsKLSAgICAgICAgSW5zdHJ1Y3Rpb24qIHRhcmdldEludGVycHJldGVyUENGb3JUaHJv
dzsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgdWludDMyX3Qgb3NyRXhpdEluZGV4Owot
ICAgICAgICB2b2lkKiBvc3JFeGl0SnVtcERlc3RpbmF0aW9uOwotICAgICAgICBWZWN0b3I8U2Ny
YXRjaEJ1ZmZlcio+IHNjcmF0Y2hCdWZmZXJzOwotICAgICAgICBzaXplX3Qgc2l6ZU9mTGFzdFNj
cmF0Y2hCdWZmZXI7Ci0gICAgICAgIAotICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVm
ZmVyRm9yU2l6ZShzaXplX3Qgc2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFzaXpl
KQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoc2l6ZSA+IHNpemVPZkxhc3RTY3JhdGNoQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgLy8g
UHJvdGVjdCBhZ2FpbnN0IGEgTl4yIG1lbW9yeSB1c2FnZSBwYXRob2xvZ3kgYnkgZW5zdXJpbmcK
LSAgICAgICAgICAgICAgICAvLyB0aGF0IGF0IHdvcnN0LCB3ZSBnZXQgYSBnZW9tZXRyaWMgc2Vy
aWVzLCBtZWFuaW5nIHRoYXQgdGhlCi0gICAgICAgICAgICAgICAgLy8gdG90YWwgbWVtb3J5IHVz
YWdlIGlzIHNvbWV3aGVyZSBhcm91bmQKLSAgICAgICAgICAgICAgICAvLyBtYXgoc2NyYXRjaCBi
dWZmZXIgc2l6ZSkgKiA0LgotICAgICAgICAgICAgICAgIHNpemVPZkxhc3RTY3JhdGNoQnVmZmVy
ID0gc2l6ZSAqIDI7Ci0KLSAgICAgICAgICAgICAgICBzY3JhdGNoQnVmZmVycy5hcHBlbmQoU2Ny
YXRjaEJ1ZmZlcjo6Y3JlYXRlKHNpemVPZkxhc3RTY3JhdGNoQnVmZmVyKSk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIFNjcmF0Y2hCdWZmZXIqIHJlc3VsdCA9IHNjcmF0Y2hCdWZmZXJz
Lmxhc3QoKTsKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0QWN0aXZlTGVuZ3RoKDApOwotICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZ2F0aGVyQ29u
c2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKLSNlbmRpZgotCi0gICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBkeW5hbWljR2xvYmFsT2JqZWN0OwotCi0gICAgICAgIEhhc2hTZXQ8SlNP
YmplY3QqPiBzdHJpbmdSZWN1cnNpb25DaGVja1Zpc2l0ZWRPYmplY3RzOwotCi0gICAgICAgIGRv
dWJsZSBjYWNoZWRVVENPZmZzZXQ7Ci0gICAgICAgIERTVE9mZnNldENhY2hlIGRzdE9mZnNldENh
Y2hlOwotICAgICAgICAKLSAgICAgICAgU3RyaW5nIGNhY2hlZERhdGVTdHJpbmc7Ci0gICAgICAg
IGRvdWJsZSBjYWNoZWREYXRlU3RyaW5nVmFsdWU7Ci0KLSAgICAgICAgTGVnYWN5UHJvZmlsZXIq
IG1fZW5hYmxlZFByb2ZpbGVyOwotICAgICAgICBPd25QdHI8UHJvZmlsZXI6OkRhdGFiYXNlPiBt
X3BlckJ5dGVjb2RlUHJvZmlsZXI7Ci0gICAgICAgIFJlZ0V4cENhY2hlKiBtX3JlZ0V4cENhY2hl
OwotICAgICAgICBCdW1wUG9pbnRlckFsbG9jYXRvciBtX3JlZ0V4cEFsbG9jYXRvcjsKLQotI2lm
IEVOQUJMRShSRUdFWFBfVFJBQ0lORykKLSAgICAgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxSZWZQ
dHI8UmVnRXhwPiA+IFJUVHJhY2VMaXN0OwotICAgICAgICBSVFRyYWNlTGlzdCogbV9ydFRyYWNl
TGlzdDsKLSNlbmRpZgotCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICBUaHJlYWRJZGVudGlmaWVy
IGV4Y2x1c2l2ZVRocmVhZDsKLSNlbmRpZgotCi0gICAgICAgIENhY2hlZFRyYW5zY2VuZGVudGFs
RnVuY3Rpb248c3RkOjpzaW4+IGNhY2hlZFNpbjsKLQotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHJlc2V0RGF0ZUNhY2hlKCk7Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBzdGFydFNhbXBsaW5nKCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc3RvcFNh
bXBsaW5nKCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcFNhbXBsZURhdGEo
RXhlY1N0YXRlKiBleGVjKTsKLSAgICAgICAgUmVnRXhwQ2FjaGUqIHJlZ0V4cENhY2hlKCkgeyBy
ZXR1cm4gbV9yZWdFeHBDYWNoZTsgfQotI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKLSAgICAg
ICAgdm9pZCBhZGRSZWdFeHBUb1RyYWNlKFBhc3NSZWZQdHI8UmVnRXhwPiByZWdFeHApOwotI2Vu
ZGlmCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcFJlZ0V4cFRyYWNlKCk7Ci0K
LSAgICAgICAgYm9vbCBpc0NvbGxlY3RvckJ1c3koKSB7IHJldHVybiBoZWFwLmlzQnVzeSgpOyB9
Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnko
KTsKLQotI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQotICAgICAgICBib29sIGlzSW5pdGlhbGl6
aW5nT2JqZWN0KCkgY29uc3Q7IAotICAgICAgICB2b2lkIHNldEluaXRpYWxpemluZ09iamVjdENs
YXNzKGNvbnN0IENsYXNzSW5mbyopOwotI2VuZGlmCi0KLSAgICAgICAgdW5zaWduZWQgbV9uZXdT
dHJpbmdzU2luY2VMYXN0SGFzaENvbnM7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IHNfbWluTnVtYmVyT2ZOZXdTdHJpbmdzVG9IYXNoQ29ucyA9IDEwMDsKLQotICAgICAgICBib29s
IGhhdmVFbm91Z2hOZXdTdHJpbmdzVG9IYXNoQ29ucygpIHsgcmV0dXJuIG1fbmV3U3RyaW5nc1Np
bmNlTGFzdEhhc2hDb25zID4gc19taW5OdW1iZXJPZk5ld1N0cmluZ3NUb0hhc2hDb25zOyB9Ci0g
ICAgICAgIHZvaWQgcmVzZXROZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMoKSB7IG1fbmV3U3Ry
aW5nc1NpbmNlTGFzdEhhc2hDb25zID0gMDsgfQotCi0jZGVmaW5lIHJlZ2lzdGVyVHlwZWRBcnJh
eUZ1bmN0aW9uKHR5cGUsIGNhcGl0YWxpemVkVHlwZSkgXAotICAgICAgICB2b2lkIHJlZ2lzdGVy
VHlwZWRBcnJheURlc2NyaXB0b3IoY29uc3QgY2FwaXRhbGl6ZWRUeXBlIyNBcnJheSosIGNvbnN0
IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKSBcCi0gICAgICAgIHsgXAotICAgICAg
ICAgICAgQVNTRVJUKCFtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yLm1fY2xhc3NJbmZvIHx8IG1f
IyN0eXBlIyNBcnJheURlc2NyaXB0b3IubV9jbGFzc0luZm8gPT0gZGVzY3JpcHRvci5tX2NsYXNz
SW5mbyk7IFwKLSAgICAgICAgICAgIG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IgPSBkZXNjcmlw
dG9yOyBcCi0gICAgICAgICAgICBBU1NFUlQobV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvci5tX2Ns
YXNzSW5mbyk7IFwKLSAgICAgICAgfSBcCi0gICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlw
dG9yJiB0eXBlIyNBcnJheURlc2NyaXB0b3IoKSBjb25zdCB7IEFTU0VSVChtXyMjdHlwZSMjQXJy
YXlEZXNjcmlwdG9yLm1fY2xhc3NJbmZvKTsgcmV0dXJuIG1fIyN0eXBlIyNBcnJheURlc2NyaXB0
b3I7IH0KLQotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihpbnQ4LCBJbnQ4KTsK
LSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oaW50MTYsIEludDE2KTsKLSAgICAg
ICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oaW50MzIsIEludDMyKTsKLSAgICAgICAgcmVn
aXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odWludDgsIFVpbnQ4KTsKLSAgICAgICAgcmVnaXN0ZXJU
eXBlZEFycmF5RnVuY3Rpb24odWludDhDbGFtcGVkLCBVaW50OENsYW1wZWQpOwotICAgICAgICBy
ZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih1aW50MTYsIFVpbnQxNik7Ci0gICAgICAgIHJlZ2lz
dGVyVHlwZWRBcnJheUZ1bmN0aW9uKHVpbnQzMiwgVWludDMyKTsKLSAgICAgICAgcmVnaXN0ZXJU
eXBlZEFycmF5RnVuY3Rpb24oZmxvYXQzMiwgRmxvYXQzMik7Ci0gICAgICAgIHJlZ2lzdGVyVHlw
ZWRBcnJheUZ1bmN0aW9uKGZsb2F0NjQsIEZsb2F0NjQpOwotI3VuZGVmIHJlZ2lzdGVyVHlwZWRB
cnJheUZ1bmN0aW9uCi0gICAgICAgIAotICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRv
ciogdHlwZWRBcnJheURlc2NyaXB0b3IoVHlwZWRBcnJheVR5cGUgdHlwZSkgY29uc3QKLSAgICAg
ICAgewotICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFR5cGVk
QXJyYXlOb25lOgotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgY2FzZSBU
eXBlZEFycmF5SW50ODoKLSAgICAgICAgICAgICAgICByZXR1cm4gJmludDhBcnJheURlc2NyaXB0
b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUludDE2OgotICAgICAgICAgICAgICAg
IHJldHVybiAmaW50MTZBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRB
cnJheUludDMyOgotICAgICAgICAgICAgICAgIHJldHVybiAmaW50MzJBcnJheURlc2NyaXB0b3Io
KTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4OgotICAgICAgICAgICAgICAgIHJl
dHVybiAmdWludDhBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJh
eVVpbnQ4Q2xhbXBlZDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJnVpbnQ4Q2xhbXBlZEFycmF5
RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDE2OgotICAgICAg
ICAgICAgICAgIHJldHVybiAmdWludDE2QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBj
YXNlIFR5cGVkQXJyYXlVaW50MzI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50MzJBcnJh
eURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUZsb2F0MzI6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICZmbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAg
ICBjYXNlIFR5cGVkQXJyYXlGbG9hdDY0OgotICAgICAgICAgICAgICAgIHJldHVybiAmZmxvYXQ2
NEFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBDUkFTSCgpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgSlNMb2NrJiBhcGlMb2NrKCkgeyByZXR1cm4gKm1fYXBpTG9jazsg
fQotICAgICAgICBDb2RlQ2FjaGUqIGNvZGVDYWNoZSgpIHsgcmV0dXJuIG1fY29kZUNhY2hlLmdl
dCgpOyB9Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkaXNjYXJkQWxsQ29kZSgp
OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKLSAgICAgICAgCi0gICAgICAgIEpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwZSwgSGVh
cFR5cGUpOwotICAgICAgICBzdGF0aWMgSlNHbG9iYWxEYXRhKiYgc2hhcmVkSW5zdGFuY2VJbnRl
cm5hbCgpOwotICAgICAgICB2b2lkIGNyZWF0ZU5hdGl2ZVRodW5rKCk7Ci0jaWYgRU5BQkxFKEFT
U0VNQkxFUikKLSAgICAgICAgYm9vbCBtX2NhblVzZUFzc2VtYmxlcjsKLSNlbmRpZgotI2lmIEVO
QUJMRShKSVQpCi0gICAgICAgIGJvb2wgbV9jYW5Vc2VKSVQ7Ci0jZW5kaWYKLSNpZiBFTkFCTEUo
WUFSUl9KSVQpCi0gICAgICAgIGJvb2wgbV9jYW5Vc2VSZWdFeHBKSVQ7Ci0jZW5kaWYKLSNpZiBF
TkFCTEUoR0NfVkFMSURBVElPTikKLSAgICAgICAgY29uc3QgQ2xhc3NJbmZvKiBtX2luaXRpYWxp
emluZ09iamVjdENsYXNzOwotI2VuZGlmCi0gICAgICAgIGJvb2wgbV9pbkRlZmluZU93blByb3Bl
cnR5OwotICAgICAgICBPd25QdHI8Q29kZUNhY2hlPiBtX2NvZGVDYWNoZTsKLQotICAgICAgICBU
eXBlZEFycmF5RGVzY3JpcHRvciBtX2ludDhBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVk
QXJyYXlEZXNjcmlwdG9yIG1faW50MTZBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJy
YXlEZXNjcmlwdG9yIG1faW50MzJBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlE
ZXNjcmlwdG9yIG1fdWludDhBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNj
cmlwdG9yIG1fdWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5
RGVzY3JpcHRvciBtX3VpbnQxNkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURl
c2NyaXB0b3IgbV91aW50MzJBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNj
cmlwdG9yIG1fZmxvYXQzMkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2Ny
aXB0b3IgbV9mbG9hdDY0QXJyYXlEZXNjcmlwdG9yOwotICAgIH07Ci0KLSNpZiBFTkFCTEUoR0Nf
VkFMSURBVElPTikKLSAgICBpbmxpbmUgYm9vbCBKU0dsb2JhbERhdGE6OmlzSW5pdGlhbGl6aW5n
T2JqZWN0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhIW1faW5pdGlhbGl6aW5nT2Jq
ZWN0Q2xhc3M7Ci0gICAgfQotCi0gICAgaW5saW5lIHZvaWQgSlNHbG9iYWxEYXRhOjpzZXRJbml0
aWFsaXppbmdPYmplY3RDbGFzcyhjb25zdCBDbGFzc0luZm8qIGluaXRpYWxpemluZ09iamVjdENs
YXNzKQotICAgIHsKLSAgICAgICAgbV9pbml0aWFsaXppbmdPYmplY3RDbGFzcyA9IGluaXRpYWxp
emluZ09iamVjdENsYXNzOwotICAgIH0KLSNlbmRpZgotCi0gICAgaW5saW5lIEhlYXAqIFdlYWtT
ZXQ6OmhlYXAoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICZtX2dsb2JhbERhdGEtPmhl
YXA7Ci0gICAgfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEpTR2xvYmFsRGF0
YV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw4ICsxMDUsOCBA
QCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSBKU0dsb2JhbE9iCiBAZW5kCiAqLwogCi1K
U0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqIGdsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlKQotICAgIDogQmFzZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIDAp
CitKU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqIGdsb2JhbE9iamVjdE1ldGhvZFRh
YmxlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCAwKQogICAgICwgbV9tYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkV2F0Y2hwb2ludChhZG9wdFJlZihuZXcgV2F0Y2hwb2ludFNldChJbml0aWFsaXpl
ZFdhdGNoaW5nKSkpCiAgICAgLCBtX2hhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludChhZG9wdFJlZihu
ZXcgV2F0Y2hwb2ludFNldChJbml0aWFsaXplZFdhdGNoaW5nKSkpCiAgICAgLCBtX3dlYWtSYW5k
b20oT3B0aW9uczo6Zm9yY2VXZWFrUmFuZG9tU2VlZCgpID8gT3B0aW9uczo6Zm9yY2VkV2Vha1Jh
bmRvbVNlZWQoKSA6IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5kb21OdW1iZXIoKSAqIChzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgKyAxLjApKSkKQEAgLTEyMCw3ICsxMjAs
NyBAQCBKU0dsb2JhbE9iamVjdDo6fkpTR2xvYmFsT2JqZWN0KCkKICAgICBpZiAobV9kZWJ1Z2dl
cikKICAgICAgICAgbV9kZWJ1Z2dlci0+ZGV0YWNoKHRoaXMpOwogCi0gICAgaWYgKExlZ2FjeVBy
b2ZpbGVyKiBwcm9maWxlciA9IGdsb2JhbERhdGEoKS5lbmFibGVkUHJvZmlsZXIoKSkKKyAgICBp
ZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gdm0oKS5lbmFibGVkUHJvZmlsZXIoKSkKICAg
ICAgICAgcHJvZmlsZXItPnN0b3BQcm9maWxpbmcodGhpcyk7CiB9CiAKQEAgLTEyOSwxNiArMTI5
LDE2IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmRlc3Ryb3koSlNDZWxsKiBjZWwKICAgICBzdGF0
aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KGNlbGwpLT5KU0dsb2JhbE9iamVjdDo6fkpTR2xvYmFs
T2JqZWN0KCk7CiB9CiAKLXZvaWQgSlNHbG9iYWxPYmplY3Q6OnNldEdsb2JhbFRoaXMoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU09iamVjdCogZ2xvYmFsVGhpcykKK3ZvaWQgSlNHbG9iYWxP
YmplY3Q6OnNldEdsb2JhbFRoaXMoVk0mIHZtLCBKU09iamVjdCogZ2xvYmFsVGhpcykKIHsgCi0g
ICAgbV9nbG9iYWxUaGlzLnNldChnbG9iYWxEYXRhLCB0aGlzLCBnbG9iYWxUaGlzKTsKKyAgICBt
X2dsb2JhbFRoaXMuc2V0KHZtLCB0aGlzLCBnbG9iYWxUaGlzKTsKIH0KIAogdm9pZCBKU0dsb2Jh
bE9iamVjdDo6aW5pdChKU09iamVjdCogdGhpc1ZhbHVlKQogewotICAgIEFTU0VSVChnbG9iYWxE
YXRhKCkuYXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOworICAgIEFTU0VS
VCh2bSgpLmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKIAotICAgIHNl
dEdsb2JhbFRoaXMoZ2xvYmFsRGF0YSgpLCB0aGlzVmFsdWUpOworICAgIHNldEdsb2JhbFRoaXMo
dm0oKSwgdGhpc1ZhbHVlKTsKICAgICBKU0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhlYygpLT5pbml0
KDAsIDAsIHRoaXMsIENhbGxGcmFtZTo6bm9DYWxsZXIoKSwgMCwgMCk7CiAKICAgICBtX2RlYnVn
Z2VyID0gMDsKQEAgLTE2MSwxNCArMTYxLDE0IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnB1dERp
cmVjdFZpcnR1YWwoSlMKICAgICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0dsb2JhbE9iamVjdCo+KG9iamVjdCk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8
fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpKTsKIAotICAgIGlm
IChzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKHRoaXNPYmplY3QsIGV4ZWMtPmdsb2JhbERh
dGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcykpCisgICAgaWYgKHN5bWJvbFRh
YmxlUHV0V2l0aEF0dHJpYnV0ZXModGhpc09iamVjdCwgZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgYXR0cmlidXRlcykpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTVmFsdWUgdmFs
dWVCZWZvcmUgPSB0aGlzT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9w
ZXJ0eU5hbWUpOworICAgIEpTVmFsdWUgdmFsdWVCZWZvcmUgPSB0aGlzT2JqZWN0LT5nZXREaXJl
Y3QoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsK
ICAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dCk7CiAgICAgaWYgKCF2YWx1ZUJlZm9yZSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlQWZ0ZXIg
PSB0aGlzT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUp
OworICAgICAgICBKU1ZhbHVlIHZhbHVlQWZ0ZXIgPSB0aGlzT2JqZWN0LT5nZXREaXJlY3QoZXhl
Yy0+dm0oKSwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgaWYgKHZhbHVlQWZ0ZXIpCiAgICAgICAg
ICAgICBKU09iamVjdDo6cHV0RGlyZWN0VmlydHVhbCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlQWZ0ZXIsIGF0dHJpYnV0ZXMpOwogICAgIH0KQEAgLTE5NywxMjYgKzE5Nywx
MjYgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogewogICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IEpTR2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVjKCk7CiAKLSAgICBtX2Z1
bmN0aW9uUHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEZ1bmN0aW9uUHJv
dG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgRnVuY3Rpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGpzTnVsbCgpKSkpOyAvLyBUaGUgcmVhbCBw
cm90b3R5cGUgd2lsbCBiZSBzZXQgb25jZSBPYmplY3RQcm90b3R5cGUgaXMgY3JlYXRlZC4KLSAg
ICBtX2Z1bmN0aW9uU3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTRnVu
Y3Rpb246OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fZnVuY3Rp
b25Qcm90b3R5cGUuZ2V0KCkpKTsKLSAgICBtX2JvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7Ci0g
ICAgbV9uYW1lZEZ1bmN0aW9uU3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9m
dW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMt
Pm5hbWUsIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtLCAwLCBtX2Z1bmN0aW9uTmFt
ZU9mZnNldCkpOwotICAgIG1faW50ZXJuYWxGdW5jdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CisgICAgbV9m
dW5jdGlvblByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgRnVuY3Rpb25Qcm90b3R5cGU6
OmNyZWF0ZShleGVjLCB0aGlzLCBGdW5jdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIHRoaXMsIGpzTnVsbCgpKSkpOyAvLyBUaGUgcmVhbCBwcm90b3R5cGUgd2lsbCBi
ZSBzZXQgb25jZSBPYmplY3RQcm90b3R5cGUgaXMgY3JlYXRlZC4KKyAgICBtX2Z1bmN0aW9uU3Ry
dWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0Z1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fYm91
bmRGdW5jdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNCb3VuZEZ1bmN0aW9u
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5n
ZXQoKSkpOworICAgIG1fbmFtZWRGdW5jdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhp
cywgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24oZXhlYy0+dm0oKSwgbV9mdW5jdGlv
blN0cnVjdHVyZS5nZXQoKSwgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSwgMCwgbV9mdW5jdGlvbk5hbWVPZmZzZXQpKTsKKyAg
ICBtX2ludGVybmFsRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEludGVy
bmFsRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9u
UHJvdG90eXBlLmdldCgpKSk7CiAgICAgSlNGdW5jdGlvbiogY2FsbEZ1bmN0aW9uID0gMDsKICAg
ICBKU0Z1bmN0aW9uKiBhcHBseUZ1bmN0aW9uID0gMDsKICAgICBtX2Z1bmN0aW9uUHJvdG90eXBl
LT5hZGRGdW5jdGlvblByb3BlcnRpZXMoZXhlYywgdGhpcywgJmNhbGxGdW5jdGlvbiwgJmFwcGx5
RnVuY3Rpb24pOwotICAgIG1fY2FsbEZ1bmN0aW9uLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRo
aXMsIGNhbGxGdW5jdGlvbik7Ci0gICAgbV9hcHBseUZ1bmN0aW9uLnNldChleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMsIGFwcGx5RnVuY3Rpb24pOwotICAgIG1fb2JqZWN0UHJvdG90eXBlLnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE9iamVjdFByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRo
aXMsIE9iamVjdFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywganNOdWxsKCkpKSk7CisgICAgbV9jYWxsRnVuY3Rpb24uc2V0KGV4ZWMtPnZtKCksIHRo
aXMsIGNhbGxGdW5jdGlvbik7CisgICAgbV9hcHBseUZ1bmN0aW9uLnNldChleGVjLT52bSgpLCB0
aGlzLCBhcHBseUZ1bmN0aW9uKTsKKyAgICBtX29iamVjdFByb3RvdHlwZS5zZXQoZXhlYy0+dm0o
KSwgdGhpcywgT2JqZWN0UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgT2JqZWN0UHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywganNOdWxsKCkpKSk7CiAgICAg
R2V0dGVyU2V0dGVyKiBwcm90b0FjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7
Ci0gICAgcHJvdG9BY2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgSlNGdW5j
dGlvbjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIDAsIFN0cmluZygpLCBnbG9iYWxGdW5jUHJvdG9HZXR0
ZXIpKTsKLSAgICBwcm90b0FjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBK
U0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhpcywgMCwgU3RyaW5nKCksIGdsb2JhbEZ1bmNQcm90
b1NldHRlcikpOworICAgIHByb3RvQWNjZXNzb3ItPnNldEdldHRlcihleGVjLT52bSgpLCBKU0Z1
bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhpcywgMCwgU3RyaW5nKCksIGdsb2JhbEZ1bmNQcm90b0dl
dHRlcikpOworICAgIHByb3RvQWNjZXNzb3ItPnNldFNldHRlcihleGVjLT52bSgpLCBKU0Z1bmN0
aW9uOjpjcmVhdGUoZXhlYywgdGhpcywgMCwgU3RyaW5nKCksIGdsb2JhbEZ1bmNQcm90b1NldHRl
cikpOwogICAgIG1fb2JqZWN0UHJvdG90eXBlLT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvLCBwcm90b0FjY2Vzc29yLCBBY2Nlc3Nv
ciB8IERvbnRFbnVtKTsKLSAgICBtX2Z1bmN0aW9uUHJvdG90eXBlLT5zdHJ1Y3R1cmUoKS0+c2V0
UHJvdG90eXBlV2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFBy
b3RvdHlwZS5nZXQoKSk7CisgICAgbV9mdW5jdGlvblByb3RvdHlwZS0+c3RydWN0dXJlKCktPnNl
dFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIG1fb2JqZWN0UHJvdG90eXBl
LmdldCgpKTsKIAotICAgIG1fbmFtZVNjb3BlU3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIEpTTmFtZVNjb3BlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBqc051bGwoKSkpOwotICAgIG1fYWN0aXZhdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIGpzTnVsbCgpKSk7Ci0gICAgbV9zdHJpY3RFdmFsQWN0aXZhdGlv
blN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBTdHJpY3RFdmFsQWN0aXZh
dGlvbjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywganNOdWxsKCkp
KTsKLSAgICBtX3dpdGhTY29wZVN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBKU1dpdGhTY29wZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
anNOdWxsKCkpKTsKLQotICAgIG1fbnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZS5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0ZpbmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZ2xv
YmFsRGF0YSgpLCB0aGlzLCBqc051bGwoKSwgSlNGaW5hbE9iamVjdDo6ZGVmYXVsdElubGluZUNh
cGFjaXR5KCkpKTsKLQotICAgIG1fY2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKLSAg
ICBtX2FyZ3VtZW50c1N0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBBcmd1
bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0
UHJvdG90eXBlLmdldCgpKSk7Ci0gICAgbV9jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlLnNl
dChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0
KCkpKTsKLSAgICBtX2NhbGxiYWNrT2JqZWN0U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIEpTQ2FsbGJhY2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+OjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQo
KSkpOworICAgIG1fbmFtZVNjb3BlU3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU05h
bWVTY29wZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIGpzTnVsbCgpKSk7Cisg
ICAgbV9hY3RpdmF0aW9uU3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0FjdGl2YXRp
b246OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBqc051bGwoKSkpOworICAgIG1f
c3RyaWN0RXZhbEFjdGl2YXRpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIFN0cmlj
dEV2YWxBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywganNOdWxs
KCkpKTsKKyAgICBtX3dpdGhTY29wZVN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNX
aXRoU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBqc051bGwoKSkpOwor
CisgICAgbV9udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlz
LCBKU0ZpbmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0oKSwgdGhpcywganNOdWxsKCksIEpT
RmluYWxPYmplY3Q6OmRlZmF1bHRJbmxpbmVDYXBhY2l0eSgpKSk7CisKKyAgICBtX2NhbGxiYWNr
RnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQ2FsbGJhY2tGdW5jdGlv
bjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUu
Z2V0KCkpKTsKKyAgICBtX2FyZ3VtZW50c1N0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywg
QXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90
b3R5cGUuZ2V0KCkpKTsKKyAgICBtX2NhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUuc2V0KGV4
ZWMtPnZtKCksIHRoaXMsIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CisgICAgbV9jYWxsYmFj
a09iamVjdFN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNDYWxsYmFja09iamVjdDxK
U0Rlc3RydWN0aWJsZU9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBt
X29iamVjdFByb3RvdHlwZS5nZXQoKSkpOwogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECi0gICAg
bV9vYmpjQ2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzLCBPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOwotICAgIG1fb2JqY1dyYXBw
ZXJPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNDYWxsYmFj
a09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fb2JqY0NhbGxi
YWNrRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIE9iakNDYWxsYmFja0Z1
bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3Rv
dHlwZS5nZXQoKSkpOworICAgIG1fb2JqY1dyYXBwZXJPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMt
PnZtKCksIHRoaXMsIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CiAj
ZW5kaWYKIAotICAgIG1fYXJyYXlQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUu
Z2V0KCkpKSk7CisgICAgbV9hcnJheVByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgQXJy
YXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwogICAg
IAotICAgIG1fb3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5nU2hhcGVbVW5kZWNpZGVk
U2hhcGUgPj4gSW5kZXhpbmdTaGFwZVNoaWZ0XS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Fy
cmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdpdGhVbmRlY2lkZWQpKTsKLSAgICBtX29yaWdpbmFs
QXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1NoYXBlW0ludDMyU2hhcGUgPj4gSW5kZXhpbmdTaGFw
ZVNoaWZ0XS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBB
cnJheVdpdGhJbnQzMikpOwotICAgIG1fb3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5n
U2hhcGVbRG91YmxlU2hhcGUgPj4gSW5kZXhpbmdTaGFwZVNoaWZ0XS5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdpdGhEb3VibGUpKTsKLSAgICBt
X29yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1NoYXBlW0NvbnRpZ3VvdXNTaGFwZSA+
PiBJbmRleGluZ1NoYXBlU2hpZnRdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJy
YXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90
b3R5cGUuZ2V0KCksIEFycmF5V2l0aENvbnRpZ3VvdXMpKTsKLSAgICBtX29yaWdpbmFsQXJyYXlT
dHJ1Y3R1cmVGb3JJbmRleGluZ1NoYXBlW0FycmF5U3RvcmFnZVNoYXBlID4+IEluZGV4aW5nU2hh
cGVTaGlmdF0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwg
QXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7Ci0gICAgbV9vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9y
SW5kZXhpbmdTaGFwZVtTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgPj4gSW5kZXhpbmdTaGFwZVNo
aWZ0XS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJh
eVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSk7CisgICAgbV9vcmlnaW5hbEFycmF5U3RydWN0dXJl
Rm9ySW5kZXhpbmdTaGFwZVtVbmRlY2lkZWRTaGFwZSA+PiBJbmRleGluZ1NoYXBlU2hpZnRdLnNl
dChleGVjLT52bSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwg
dGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwgQXJyYXlXaXRoVW5kZWNpZGVkKSk7CisgICAg
bV9vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdTaGFwZVtJbnQzMlNoYXBlID4+IElu
ZGV4aW5nU2hhcGVTaGlmdF0uc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdp
dGhJbnQzMikpOworICAgIG1fb3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5nU2hhcGVb
RG91YmxlU2hhcGUgPj4gSW5kZXhpbmdTaGFwZVNoaWZ0XS5zZXQoZXhlYy0+dm0oKSwgdGhpcywg
SlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5
cGUuZ2V0KCksIEFycmF5V2l0aERvdWJsZSkpOworICAgIG1fb3JpZ2luYWxBcnJheVN0cnVjdHVy
ZUZvckluZGV4aW5nU2hhcGVbQ29udGlndW91c1NoYXBlID4+IEluZGV4aW5nU2hhcGVTaGlmdF0u
c2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgp
LCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdpdGhDb250aWd1b3VzKSk7Cisg
ICAgbV9vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdTaGFwZVtBcnJheVN0b3JhZ2VT
aGFwZSA+PiBJbmRleGluZ1NoYXBlU2hpZnRdLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0FycmF5
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQo
KSwgQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7CisgICAgbV9vcmlnaW5hbEFycmF5U3RydWN0dXJl
Rm9ySW5kZXhpbmdTaGFwZVtTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgPj4gSW5kZXhpbmdTaGFw
ZVNoaWZ0XS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2UpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTnVtYmVyT2ZJbmRl
eGluZ1NoYXBlczsgKytpKQogICAgICAgICBtX2FycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdTaGFw
ZUR1cmluZ0FsbG9jYXRpb25baV0gPSBtX29yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGlu
Z1NoYXBlW2ldOwogICAgIAotICAgIG1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIFJlZ0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSkpOwor
ICAgIG1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBS
ZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Fy
cmF5UHJvdG90eXBlLmdldCgpKSk7CiAKLSAgICBtX3N0cmluZ1Byb3RvdHlwZS5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBTdHJpbmdQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBT
dHJpbmdQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwotICAgIG1fc3RyaW5nT2JqZWN0U3RydWN0dXJl
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIFN0cmluZ09iamVjdDo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9zdHJpbmdQcm90b3R5cGUuZ2V0KCkpKTsK
KyAgICBtX3N0cmluZ1Byb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgU3RyaW5nUHJvdG90
eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgU3RyaW5nUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV9zdHJp
bmdPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIFN0cmluZ09iamVjdDo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fc3RyaW5nUHJvdG90eXBlLmdldCgpKSk7
CiAKLSAgICBtX2Jvb2xlYW5Qcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
Qm9vbGVhblByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEJvb2xlYW5Qcm90b3R5cGU6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBl
LmdldCgpKSkpOwotICAgIG1fYm9vbGVhbk9iamVjdFN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCBCb29sZWFuT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCBtX2Jvb2xlYW5Qcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX2Jvb2xlYW5Q
cm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEJvb2xlYW5Qcm90b3R5cGU6OmNyZWF0ZShl
eGVjLCB0aGlzLCBCb29sZWFuUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwg
dGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV9ib29sZWFuT2JqZWN0U3Ry
dWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBCb29sZWFuT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9ib29sZWFuUHJvdG90eXBlLmdldCgpKSk7CiAKLSAgICBt
X251bWJlclByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOdW1iZXJQcm90
b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBOdW1iZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwot
ICAgIG1fbnVtYmVyT2JqZWN0U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IE51bWJlck9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
bV9udW1iZXJQcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX251bWJlclByb3RvdHlwZS5zZXQoZXhl
Yy0+dm0oKSwgdGhpcywgTnVtYmVyUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgTnVtYmVy
UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90
b3R5cGUuZ2V0KCkpKSk7CisgICAgbV9udW1iZXJPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZt
KCksIHRoaXMsIE51bWJlck9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMs
IG1fbnVtYmVyUHJvdG90eXBlLmdldCgpKSk7CiAKLSAgICBtX2RhdGVQcm90b3R5cGUuc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgRGF0ZVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMs
IERhdGVQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwotICAgIG1fZGF0ZVN0cnVjdHVyZS5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBEYXRlSW5zdGFuY2U6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fZGF0ZVByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fZGF0
ZVByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgRGF0ZVByb3RvdHlwZTo6Y3JlYXRlKGV4
ZWMsIHRoaXMsIERhdGVQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlz
LCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX2RhdGVTdHJ1Y3R1cmUuc2V0KGV4
ZWMtPnZtKCksIHRoaXMsIERhdGVJbnN0YW5jZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCks
IHRoaXMsIG1fZGF0ZVByb3RvdHlwZS5nZXQoKSkpOwogCi0gICAgUmVnRXhwKiBlbXB0eVJlZ2V4
ID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCAiIiwgTm9GbGFncyk7CisgICAg
UmVnRXhwKiBlbXB0eVJlZ2V4ID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+dm0oKSwgIiIsIE5vRmxh
Z3MpOwogICAgIAotICAgIG1fcmVnRXhwUHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCks
IHRoaXMsIFJlZ0V4cFByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIFJlZ0V4cFByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90
b3R5cGUuZ2V0KCkpLCBlbXB0eVJlZ2V4KSk7Ci0gICAgbV9yZWdFeHBTdHJ1Y3R1cmUuc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgUmVnRXhwT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX3JlZ0V4cFByb3RvdHlwZS5nZXQoKSkpOworICAgIG1f
cmVnRXhwUHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBSZWdFeHBQcm90b3R5cGU6OmNy
ZWF0ZShleGVjLCB0aGlzLCBSZWdFeHBQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52
bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSksIGVtcHR5UmVnZXgpKTsKKyAgICBt
X3JlZ0V4cFN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgUmVnRXhwT2JqZWN0OjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9yZWdFeHBQcm90b3R5cGUuZ2V0KCkpKTsK
IAotICAgIG1fZXJyb3JQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgRXJy
b3JQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBFcnJvclByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkp
KSk7Ci0gICAgbV9lcnJvclN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBF
cnJvckluc3RhbmNlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBt
X2Vycm9yUHJvdG90eXBlLmdldCgpKSk7CisgICAgbV9lcnJvclByb3RvdHlwZS5zZXQoZXhlYy0+
dm0oKSwgdGhpcywgRXJyb3JQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBFcnJvclByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBl
LmdldCgpKSkpOworICAgIG1fZXJyb3JTdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEVy
cm9ySW5zdGFuY2U6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Vycm9yUHJv
dG90eXBlLmdldCgpKSk7CiAKICAgICAvLyBDb25zdHJ1Y3RvcnMKIAotICAgIEpTQ2VsbCogb2Jq
ZWN0Q29uc3RydWN0b3IgPSBPYmplY3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIE9i
amVjdENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpOwot
ICAgIEpTQ2VsbCogZnVuY3Rpb25Db25zdHJ1Y3RvciA9IEZ1bmN0aW9uQ29uc3RydWN0b3I6OmNy
ZWF0ZShleGVjLCB0aGlzLCBGdW5jdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9mdW5j
dGlvblByb3RvdHlwZS5nZXQoKSk7Ci0gICAgSlNDZWxsKiBhcnJheUNvbnN0cnVjdG9yID0gQXJy
YXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEFycmF5Q29uc3RydWN0b3I6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUu
Z2V0KCkpLCBtX2FycmF5UHJvdG90eXBlLmdldCgpKTsKLSAgICBKU0NlbGwqIHN0cmluZ0NvbnN0
cnVjdG9yID0gU3RyaW5nQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBTdHJpbmdDb25z
dHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9mdW5j
dGlvblByb3RvdHlwZS5nZXQoKSksIG1fc3RyaW5nUHJvdG90eXBlLmdldCgpKTsKLSAgICBKU0Nl
bGwqIGJvb2xlYW5Db25zdHJ1Y3RvciA9IEJvb2xlYW5Db25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMs
IHRoaXMsIEJvb2xlYW5Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fYm9vbGVhblByb3RvdHlw
ZS5nZXQoKSk7Ci0gICAgSlNDZWxsKiBudW1iZXJDb25zdHJ1Y3RvciA9IE51bWJlckNvbnN0cnVj
dG9yOjpjcmVhdGUoZXhlYywgdGhpcywgTnVtYmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBt
X251bWJlclByb3RvdHlwZS5nZXQoKSk7Ci0gICAgSlNDZWxsKiBkYXRlQ29uc3RydWN0b3IgPSBE
YXRlQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBEYXRlQ29uc3RydWN0b3I6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUu
Z2V0KCkpLCBtX2RhdGVQcm90b3R5cGUuZ2V0KCkpOwotCi0gICAgbV9yZWdFeHBDb25zdHJ1Y3Rv
ci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBSZWdFeHBDb25zdHJ1Y3Rvcjo6Y3JlYXRl
KGV4ZWMsIHRoaXMsIFJlZ0V4cENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9yZWdFeHBQcm90
b3R5cGUuZ2V0KCkpKTsKLQotICAgIG1fZXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCBFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgRXJyb3JD
b25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9m
dW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fZXJyb3JQcm90b3R5cGUuZ2V0KCkpKTsKLQotICAg
IFN0cnVjdHVyZSogbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUgPSBOYXRpdmVFcnJvclBy
b3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9lcnJv
clByb3RvdHlwZS5nZXQoKSk7Ci0gICAgU3RydWN0dXJlKiBuYXRpdmVFcnJvclN0cnVjdHVyZSA9
IE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpOwotICAgIG1fZXZhbEVycm9yQ29u
c3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgTmF0aXZlRXJyb3JDb25zdHJ1
Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBuYXRpdmVFcnJv
clByb3RvdHlwZVN0cnVjdHVyZSwgQVNDSUlMaXRlcmFsKCJFdmFsRXJyb3IiKSkpOwotICAgIG1f
cmFuZ2VFcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE5hdGl2
ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVy
ZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsIEFTQ0lJTGl0ZXJhbCgiUmFuZ2VFcnJv
ciIpKSk7Ci0gICAgbV9yZWZlcmVuY2VFcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMsIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBu
YXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsIEFTQ0lJ
TGl0ZXJhbCgiUmVmZXJlbmNlRXJyb3IiKSkpOwotICAgIG1fc3ludGF4RXJyb3JDb25zdHJ1Y3Rv
ci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpj
cmVhdGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90
eXBlU3RydWN0dXJlLCBBU0NJSUxpdGVyYWwoIlN5bnRheEVycm9yIikpKTsKLSAgICBtX3R5cGVF
cnJvckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE5hdGl2ZUVycm9y
Q29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0
aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsIEFTQ0lJTGl0ZXJhbCgiVHlwZUVycm9yIikpKTsK
LSAgICBtX1VSSUVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3Ry
dWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgQVNDSUlMaXRlcmFsKCJVUklF
cnJvciIpKSk7Ci0KLSAgICBtX29iamVjdFByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0
b3IsIG9iamVjdENvbnN0cnVjdG9yLCBEb250RW51bSk7Ci0gICAgbV9mdW5jdGlvblByb3RvdHlw
ZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGZ1bmN0aW9uQ29uc3RydWN0b3IsIERvbnRFbnVt
KTsKLSAgICBtX2FycmF5UHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVj
LT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgYXJyYXlD
b25zdHJ1Y3RvciwgRG9udEVudW0pOwotICAgIG1fYm9vbGVhblByb3RvdHlwZS0+cHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuY29uc3RydWN0b3IsIGJvb2xlYW5Db25zdHJ1Y3RvciwgRG9udEVudW0pOwotICAgIG1fc3Ry
aW5nUHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRh
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvciwgc3RyaW5nQ29uc3RydWN0b3Is
IERvbnRFbnVtKTsKLSAgICBtX251bWJlclByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0
b3IsIG51bWJlckNvbnN0cnVjdG9yLCBEb250RW51bSk7Ci0gICAgbV9kYXRlUHJvdG90eXBlLT5w
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgZGF0ZUNvbnN0cnVjdG9yLCBEb250RW51bSk7Ci0gICAg
bV9yZWdFeHBQcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBtX3JlZ0V4cENvbnN0
cnVjdG9yLmdldCgpLCBEb250RW51bSk7Ci0gICAgbV9lcnJvclByb3RvdHlwZS0+cHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuY29uc3RydWN0b3IsIG1fZXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOwotCi0g
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuT2JqZWN0LCBvYmplY3RDb25zdHJ1Y3RvciwgRG9udEVudW0pOwotICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmll
cihleGVjLCAiRnVuY3Rpb24iKSwgZnVuY3Rpb25Db25zdHJ1Y3RvciwgRG9udEVudW0pOwotICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLkFycmF5LCBhcnJheUNvbnN0cnVjdG9yLCBEb250RW51bSk7Ci0gICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4
ZWMsICJCb29sZWFuIiksIGJvb2xlYW5Db25zdHJ1Y3RvciwgRG9udEVudW0pOwotICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVj
LCAiU3RyaW5nIiksIHN0cmluZ0NvbnN0cnVjdG9yLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJO
dW1iZXIiKSwgbnVtYmVyQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgIkRhdGUi
KSwgZGF0ZUNvbnN0cnVjdG9yLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJSZWdFeHAiKSwgbV9y
ZWdFeHBDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiRXJyb3IiKSwg
bV9lcnJvckNvbnN0cnVjdG9yLmdldCgpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJFdmFsRXJy
b3IiKSwgbV9ldmFsRXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOwotICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVj
LCAiUmFuZ2VFcnJvciIpLCBtX3JhbmdlRXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0p
OwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRl
bnRpZmllcihleGVjLCAiUmVmZXJlbmNlRXJyb3IiKSwgbV9yZWZlcmVuY2VFcnJvckNvbnN0cnVj
dG9yLmdldCgpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJTeW50YXhFcnJvciIpLCBtX3N5bnRh
eEVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgIlR5cGVFcnJv
ciIpLCBtX3R5cGVFcnJvckNvbnN0cnVjdG9yLmdldCgpLCBEb250RW51bSk7Ci0gICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMs
ICJVUklFcnJvciIpLCBtX1VSSUVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsKKyAg
ICBKU0NlbGwqIG9iamVjdENvbnN0cnVjdG9yID0gT2JqZWN0Q29uc3RydWN0b3I6OmNyZWF0ZShl
eGVjLCB0aGlzLCBPYmplY3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCks
IHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX29iamVjdFByb3RvdHlwZS5nZXQo
KSk7CisgICAgSlNDZWxsKiBmdW5jdGlvbkNvbnN0cnVjdG9yID0gRnVuY3Rpb25Db25zdHJ1Y3Rv
cjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEZ1bmN0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9mdW5jdGlv
blByb3RvdHlwZS5nZXQoKSk7CisgICAgSlNDZWxsKiBhcnJheUNvbnN0cnVjdG9yID0gQXJyYXlD
b25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9h
cnJheVByb3RvdHlwZS5nZXQoKSk7CisgICAgSlNDZWxsKiBzdHJpbmdDb25zdHJ1Y3RvciA9IFN0
cmluZ0NvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgU3RyaW5nQ29uc3RydWN0b3I6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgp
KSwgbV9zdHJpbmdQcm90b3R5cGUuZ2V0KCkpOworICAgIEpTQ2VsbCogYm9vbGVhbkNvbnN0cnVj
dG9yID0gQm9vbGVhbkNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgQm9vbGVhbkNvbnN0
cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3Rv
dHlwZS5nZXQoKSksIG1fYm9vbGVhblByb3RvdHlwZS5nZXQoKSk7CisgICAgSlNDZWxsKiBudW1i
ZXJDb25zdHJ1Y3RvciA9IE51bWJlckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgTnVt
YmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0
aW9uUHJvdG90eXBlLmdldCgpKSwgbV9udW1iZXJQcm90b3R5cGUuZ2V0KCkpOworICAgIEpTQ2Vs
bCogZGF0ZUNvbnN0cnVjdG9yID0gRGF0ZUNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywg
RGF0ZUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5j
dGlvblByb3RvdHlwZS5nZXQoKSksIG1fZGF0ZVByb3RvdHlwZS5nZXQoKSk7CisKKyAgICBtX3Jl
Z0V4cENvbnN0cnVjdG9yLnNldChleGVjLT52bSgpLCB0aGlzLCBSZWdFeHBDb25zdHJ1Y3Rvcjo6
Y3JlYXRlKGV4ZWMsIHRoaXMsIFJlZ0V4cENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fcmVnRXhwUHJvdG90
eXBlLmdldCgpKSk7CisKKyAgICBtX2Vycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPnZtKCksIHRo
aXMsIEVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBFcnJvckNvbnN0cnVjdG9y
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5n
ZXQoKSksIG1fZXJyb3JQcm90b3R5cGUuZ2V0KCkpKTsKKworICAgIFN0cnVjdHVyZSogbmF0aXZl
RXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUgPSBOYXRpdmVFcnJvclByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZXJyb3JQcm90b3R5cGUuZ2V0KCkpOworICAgIFN0
cnVjdHVyZSogbmF0aXZlRXJyb3JTdHJ1Y3R1cmUgPSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQo
KSk7CisgICAgbV9ldmFsRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+dm0oKSwgdGhpcywgTmF0
aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0
dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgQVNDSUlMaXRlcmFsKCJFdmFsRXJy
b3IiKSkpOworICAgIG1fcmFuZ2VFcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT52bSgpLCB0aGlz
LCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JT
dHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCBBU0NJSUxpdGVyYWwoIlJh
bmdlRXJyb3IiKSkpOworICAgIG1fcmVmZXJlbmNlRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+
dm0oKSwgdGhpcywgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5h
dGl2ZUVycm9yU3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgQVNDSUlM
aXRlcmFsKCJSZWZlcmVuY2VFcnJvciIpKSk7CisgICAgbV9zeW50YXhFcnJvckNvbnN0cnVjdG9y
LnNldChleGVjLT52bSgpLCB0aGlzLCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhl
YywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0
dXJlLCBBU0NJSUxpdGVyYWwoIlN5bnRheEVycm9yIikpKTsKKyAgICBtX3R5cGVFcnJvckNvbnN0
cnVjdG9yLnNldChleGVjLT52bSgpLCB0aGlzLCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVh
dGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBl
U3RydWN0dXJlLCBBU0NJSUxpdGVyYWwoIlR5cGVFcnJvciIpKSk7CisgICAgbV9VUklFcnJvckNv
bnN0cnVjdG9yLnNldChleGVjLT52bSgpLCB0aGlzLCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpj
cmVhdGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90
eXBlU3RydWN0dXJlLCBBU0NJSUxpdGVyYWwoIlVSSUVycm9yIikpKTsKKworICAgIG1fb2JqZWN0
UHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIG9iamVjdENvbnN0cnVjdG9yLCBEb250RW51bSk7
CisgICAgbV9mdW5jdGlvblByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhl
Yy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBmdW5jdGlvbkNvbnN0
cnVjdG9yLCBEb250RW51bSk7CisgICAgbV9hcnJheVByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9y
LCBhcnJheUNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgbV9ib29sZWFuUHJvdG90eXBlLT5w
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuY29uc3RydWN0b3IsIGJvb2xlYW5Db25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIG1fc3Ry
aW5nUHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHN0cmluZ0NvbnN0cnVjdG9yLCBEb250RW51
bSk7CisgICAgbV9udW1iZXJQcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4
ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgbnVtYmVyQ29uc3Ry
dWN0b3IsIERvbnRFbnVtKTsKKyAgICBtX2RhdGVQcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvciwg
ZGF0ZUNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgbV9yZWdFeHBQcm90b3R5cGUtPnB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5j
b25zdHJ1Y3RvciwgbV9yZWdFeHBDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOworICAgIG1f
ZXJyb3JQcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgbV9lcnJvckNvbnN0cnVjdG9yLmdldCgp
LCBEb250RW51bSk7CisKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgp
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuT2JqZWN0LCBvYmplY3RDb25zdHJ1Y3RvciwgRG9udEVu
dW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZp
ZXIoZXhlYywgIkZ1bmN0aW9uIiksIGZ1bmN0aW9uQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuQXJyYXksIGFycmF5Q29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJCb29sZWFuIiks
IGJvb2xlYW5Db25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgIlN0cmluZyIpLCBzdHJpbmdDb25z
dHJ1Y3RvciwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMt
PnZtKCksIElkZW50aWZpZXIoZXhlYywgIk51bWJlciIpLCBudW1iZXJDb25zdHJ1Y3RvciwgRG9u
dEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElkZW50
aWZpZXIoZXhlYywgIkRhdGUiKSwgZGF0ZUNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiUmVn
RXhwIiksIG1fcmVnRXhwQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsKKyAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJFcnJvciIp
LCBtX2Vycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJFdmFsRXJyb3IiKSwg
bV9ldmFsRXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgIlJhbmdlRXJyb3Ii
KSwgbV9yYW5nZUVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsKKyAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJSZWZlcmVu
Y2VFcnJvciIpLCBtX3JlZmVyZW5jZUVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsK
KyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4
ZWMsICJTeW50YXhFcnJvciIpLCBtX3N5bnRheEVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRF
bnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlm
aWVyKGV4ZWMsICJUeXBlRXJyb3IiKSwgbV90eXBlRXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9u
dEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElkZW50
aWZpZXIoZXhlYywgIlVSSUVycm9yIiksIG1fVVJJRXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9u
dEVudW0pOwogCi0gICAgbV9ldmFsRnVuY3Rpb24uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5ldmFsLnN0cmluZygpLCBnbG9iYWxGdW5jRXZhbCkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmV2YWws
IG1fZXZhbEZ1bmN0aW9uLmdldCgpLCBEb250RW51bSk7CisgICAgbV9ldmFsRnVuY3Rpb24uc2V0
KGV4ZWMtPnZtKCksIHRoaXMsIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCB0aGlzLCAxLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuZXZhbC5zdHJpbmcoKSwgZ2xvYmFsRnVuY0V2YWwpKTsKKyAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuZXZhbCwgbV9ldmFsRnVuY3Rpb24uZ2V0KCksIERvbnRFbnVtKTsKIAotICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAi
SlNPTiIpLCBKU09OT2JqZWN0OjpjcmVhdGUoZXhlYywgdGhpcywgSlNPTk9iamVjdDo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0
KCkpKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmds
b2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiTWF0aCIpLCBNYXRoT2JqZWN0OjpjcmVhdGUo
ZXhlYywgdGhpcywgTWF0aE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0pOworICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgIkpTT04i
KSwgSlNPTk9iamVjdDo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTT05PYmplY3Q6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpLCBEb250RW51
bSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmll
cihleGVjLCAiTWF0aCIpLCBNYXRoT2JqZWN0OjpjcmVhdGUoZXhlYywgdGhpcywgTWF0aE9iamVj
dDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdl
dCgpKSksIERvbnRFbnVtKTsKIAogICAgIEdsb2JhbFByb3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxz
W10gPSB7CiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhJZGVudGlmaWVyKGV4ZWMsICJOYU4i
KSwganNOYU4oKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLApAQCAtMzMxLDE1
ICszMzEsMTUgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAg
IG1fc3BlY2lhbFBvaW50ZXJzW1NwZWNpYWw6OkFycmF5Q29uc3RydWN0b3JdID0gYXJyYXlDb25z
dHJ1Y3RvcjsKIAogICAgIGlmIChtX2V4cGVyaW1lbnRzRW5hYmxlZCkgewotICAgICAgICBOYW1l
UHJvdG90eXBlKiBwcml2YXRlTmFtZVByb3RvdHlwZSA9IE5hbWVQcm90b3R5cGU6OmNyZWF0ZShl
eGVjLCBOYW1lUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOwotICAgICAgICBtX3ByaXZhdGVOYW1lU3Ry
dWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE5hbWVJbnN0YW5jZTo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgcHJpdmF0ZU5hbWVQcm90b3R5cGUp
KTsKKyAgICAgICAgTmFtZVByb3RvdHlwZSogcHJpdmF0ZU5hbWVQcm90b3R5cGUgPSBOYW1lUHJv
dG90eXBlOjpjcmVhdGUoZXhlYywgTmFtZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
PnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CisgICAgICAgIG1fcHJpdmF0
ZU5hbWVTdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIE5hbWVJbnN0YW5jZTo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIHByaXZhdGVOYW1lUHJvdG90eXBlKSk7CiAKLSAg
ICAgICAgSlNDZWxsKiBwcml2YXRlTmFtZUNvbnN0cnVjdG9yID0gTmFtZUNvbnN0cnVjdG9yOjpj
cmVhdGUoZXhlYywgdGhpcywgTmFtZUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgcHJpdmF0ZU5h
bWVQcm90b3R5cGUpOwotICAgICAgICBwcml2YXRlTmFtZVByb3RvdHlwZS0+cHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
Y29uc3RydWN0b3IsIHByaXZhdGVOYW1lQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKLSAgICAgICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVy
KGV4ZWMsICJOYW1lIiksIHByaXZhdGVOYW1lQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICAg
ICAgSlNDZWxsKiBwcml2YXRlTmFtZUNvbnN0cnVjdG9yID0gTmFtZUNvbnN0cnVjdG9yOjpjcmVh
dGUoZXhlYywgdGhpcywgTmFtZUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0o
KSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIHByaXZhdGVOYW1lUHJvdG90eXBl
KTsKKyAgICAgICAgcHJpdmF0ZU5hbWVQcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgcHJpdmF0
ZU5hbWVDb25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgICAgICBwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJOYW1lIiksIHByaXZhdGVOYW1l
Q29uc3RydWN0b3IsIERvbnRFbnVtKTsKICAgICB9CiAKLSAgICByZXNldFByb3RvdHlwZShleGVj
LT5nbG9iYWxEYXRhKCksIHByb3RvdHlwZSk7CisgICAgcmVzZXRQcm90b3R5cGUoZXhlYy0+dm0o
KSwgcHJvdG90eXBlKTsKIH0KIAogLy8gUHJpdmF0ZSBuYW1lc3BhY2UgZm9yIGhlbHBlcnMgZm9y
IEpTR2xvYmFsT2JqZWN0OjpoYXZlQUJhZFRpbWUoKQpAQCAtNDA1LDkgKzQwNSw5IEBAIHZvaWQg
T2JqZWN0c1dpdGhCcm9rZW5JbmRleGluZ0ZpbmRlcjo6b3AKIAogfSAvLyBlbmQgcHJpdmF0ZSBu
YW1lc3BhY2UgZm9yIGhlbHBlcnMgZm9yIEpTR2xvYmFsT2JqZWN0OjpoYXZlQUJhZFRpbWUoKQog
Ci12b2lkIEpTR2xvYmFsT2JqZWN0OjpoYXZlQUJhZFRpbWUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQordm9pZCBKU0dsb2JhbE9iamVjdDo6aGF2ZUFCYWRUaW1lKFZNJiB2bSkKIHsKLSAgICBB
U1NFUlQoJmdsb2JhbERhdGEgPT0gJnRoaXMtPmdsb2JhbERhdGEoKSk7CisgICAgQVNTRVJUKCZ2
bSA9PSAmdGhpcy0+dm0oKSk7CiAgICAgCiAgICAgaWYgKGlzSGF2aW5nQUJhZFRpbWUoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNDIxLDE4ICs0MjEsMTggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6
aGF2ZUFCYWRUaW1lKEpTR2xvYgogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFsbCBKU0FycmF5IGFs
bG9jYXRpb25zIHRoYXQgbG9hZCB0aGUgYXBwcm9wcmlhdGUgc3RydWN0dXJlIGZyb20KICAgICAv
LyB0aGlzIG9iamVjdCBub3cgbG9hZCBhIHN0cnVjdHVyZSB0aGF0IHVzZXMgU2xvd1B1dC4KICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTnVtYmVyT2ZJbmRleGluZ1NoYXBlczsgKytpKQot
ICAgICAgICBtX2FycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdTaGFwZUR1cmluZ0FsbG9jYXRpb25b
aV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIG9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGlu
Z1R5cGUoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkpOworICAgICAgICBtX2FycmF5U3Ry
dWN0dXJlRm9ySW5kZXhpbmdTaGFwZUR1cmluZ0FsbG9jYXRpb25baV0uc2V0KHZtLCB0aGlzLCBv
cmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlKEFycmF5V2l0aFNsb3dQdXRBcnJh
eVN0b3JhZ2UpKTsKICAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbGwgb2JqZWN0cyB0aGF0
IGhhdmUgaW5kZXhlZCBzdG9yYWdlIHN3aXRjaCB0byB0aGUgc2xvdyBraW5kIG9mCiAgICAgLy8g
aW5kZXhlZCBzdG9yYWdlLgogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGZvdW5kT2JqZWN0czsg
Ly8gVXNlIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGJlY2F1c2Ugc3dpdGNoVG9TbG93UHV0QXJyYXlT
dG9yYWdlKCkgbWF5IEdDLgogICAgIE9iamVjdHNXaXRoQnJva2VuSW5kZXhpbmdGaW5kZXIgZmlu
ZGVyKGZvdW5kT2JqZWN0cywgdGhpcyk7Ci0gICAgZ2xvYmFsRGF0YS5oZWFwLm9iamVjdFNwYWNl
KCkuZm9yRWFjaExpdmVDZWxsKGZpbmRlcik7CisgICAgdm0uaGVhcC5vYmplY3RTcGFjZSgpLmZv
ckVhY2hMaXZlQ2VsbChmaW5kZXIpOwogICAgIHdoaWxlICghZm91bmRPYmplY3RzLmlzRW1wdHko
KSkgewogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoZm91bmRPYmplY3RzLmxh
c3QoKSk7CiAgICAgICAgIGZvdW5kT2JqZWN0cy5yZW1vdmVMYXN0KCk7CiAgICAgICAgIEFTU0VS
VChoYXNCcm9rZW5JbmRleGluZyhvYmplY3QpKTsKLSAgICAgICAgb2JqZWN0LT5zd2l0Y2hUb1Ns
b3dQdXRBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAgICAgIG9iamVjdC0+c3dpdGNoVG9T
bG93UHV0QXJyYXlTdG9yYWdlKHZtKTsKICAgICB9CiB9CiAKQEAgLTQ0OCwyMCArNDQ4LDIwIEBA
IHZvaWQgSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZVRocm93VHlwZUVycm8KIHsKICAgICBKU0Z1bmN0
aW9uKiB0aHJvd2VyID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIDAsIFN0cmluZygp
LCBnbG9iYWxGdW5jVGhyb3dUeXBlRXJyb3IpOwogICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0
dGVyID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7Ci0gICAgZ2V0dGVyU2V0dGVyLT5zZXRH
ZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aHJvd2VyKTsKLSAgICBnZXR0ZXJTZXR0ZXItPnNl
dFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIHRocm93ZXIpOwotICAgIG1fdGhyb3dUeXBlRXJy
b3JHZXR0ZXJTZXR0ZXIuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZ2V0dGVyU2V0dGVy
KTsKKyAgICBnZXR0ZXJTZXR0ZXItPnNldEdldHRlcihleGVjLT52bSgpLCB0aHJvd2VyKTsKKyAg
ICBnZXR0ZXJTZXR0ZXItPnNldFNldHRlcihleGVjLT52bSgpLCB0aHJvd2VyKTsKKyAgICBtX3Ro
cm93VHlwZUVycm9yR2V0dGVyU2V0dGVyLnNldChleGVjLT52bSgpLCB0aGlzLCBnZXR0ZXJTZXR0
ZXIpOwogfQogCiAvLyBTZXQgcHJvdG90eXBlLCBhbmQgYWxzbyBpbnNlcnQgdGhlIG9iamVjdCBw
cm90b3R5cGUgYXQgdGhlIGVuZCBvZiB0aGUgY2hhaW4uCi12b2lkIEpTR2xvYmFsT2JqZWN0Ojpy
ZXNldFByb3RvdHlwZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBl
KQordm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXRQcm90b3R5cGUoVk0mIHZtLCBKU1ZhbHVlIHBy
b3RvdHlwZSkKIHsKLSAgICBzZXRQcm90b3R5cGUoZ2xvYmFsRGF0YSwgcHJvdG90eXBlKTsKKyAg
ICBzZXRQcm90b3R5cGUodm0sIHByb3RvdHlwZSk7CiAKICAgICBKU09iamVjdCogb2xkTGFzdElu
UHJvdG90eXBlQ2hhaW4gPSBsYXN0SW5Qcm90b3R5cGVDaGFpbih0aGlzKTsKICAgICBKU09iamVj
dCogb2JqZWN0UHJvdG90eXBlID0gbV9vYmplY3RQcm90b3R5cGUuZ2V0KCk7CiAgICAgaWYgKG9s
ZExhc3RJblByb3RvdHlwZUNoYWluICE9IG9iamVjdFByb3RvdHlwZSkKLSAgICAgICAgb2xkTGFz
dEluUHJvdG90eXBlQ2hhaW4tPnNldFByb3RvdHlwZShnbG9iYWxEYXRhLCBvYmplY3RQcm90b3R5
cGUpOworICAgICAgICBvbGRMYXN0SW5Qcm90b3R5cGVDaGFpbi0+c2V0UHJvdG90eXBlKHZtLCBv
YmplY3RQcm90b3R5cGUpOwogfQogCiB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC01NTAsNyArNTUwLDcgQEAg
dm9pZCBKU0dsb2JhbE9iamVjdDo6YWRkU3RhdGljR2xvYmFscyhHbAogICAgICAgICBpbnQgaW5k
ZXggPSBzeW1ib2xUYWJsZSgpLT5zaXplKCk7CiAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgbmV3
RW50cnkoaW5kZXgsIGdsb2JhbC5hdHRyaWJ1dGVzKTsKICAgICAgICAgc3ltYm9sVGFibGUoKS0+
YWRkKGdsb2JhbC5pZGVudGlmaWVyLmltcGwoKSwgbmV3RW50cnkpOwotICAgICAgICByZWdpc3Rl
ckF0KGluZGV4KS5zZXQoZ2xvYmFsRGF0YSgpLCB0aGlzLCBnbG9iYWwudmFsdWUpOworICAgICAg
ICByZWdpc3RlckF0KGluZGV4KS5zZXQodm0oKSwgdGhpcywgZ2xvYmFsLnZhbHVlKTsKICAgICB9
CiB9CiAKQEAgLTU3NSwyNCArNTc1LDI0IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmNsZWFyUmFy
ZURhdGEoSlNDZWwKICAgICBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihjZWxsKS0+bV9yYXJlRGF0
YS5jbGVhcigpOwogfQogCi1EeW5hbWljR2xvYmFsT2JqZWN0U2NvcGU6OkR5bmFtaWNHbG9iYWxP
YmplY3RTY29wZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBkeW5h
bWljR2xvYmFsT2JqZWN0KQotICAgIDogbV9keW5hbWljR2xvYmFsT2JqZWN0U2xvdChnbG9iYWxE
YXRhLmR5bmFtaWNHbG9iYWxPYmplY3QpCitEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGU6OkR5bmFt
aWNHbG9iYWxPYmplY3RTY29wZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBkeW5hbWljR2xvYmFs
T2JqZWN0KQorICAgIDogbV9keW5hbWljR2xvYmFsT2JqZWN0U2xvdCh2bS5keW5hbWljR2xvYmFs
T2JqZWN0KQogICAgICwgbV9zYXZlZER5bmFtaWNHbG9iYWxPYmplY3QobV9keW5hbWljR2xvYmFs
T2JqZWN0U2xvdCkKIHsKICAgICBpZiAoIW1fZHluYW1pY0dsb2JhbE9iamVjdFNsb3QpIHsKICNp
ZiBFTkFCTEUoQVNTRU1CTEVSKQogICAgICAgICBpZiAoRXhlY3V0YWJsZUFsbG9jYXRvcjo6dW5k
ZXJNZW1vcnlQcmVzc3VyZSgpKQotICAgICAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLmRlbGV0ZUFs
bENvbXBpbGVkQ29kZSgpOworICAgICAgICAgICAgdm0uaGVhcC5kZWxldGVBbGxDb21waWxlZENv
ZGUoKTsKICNlbmRpZgogCiAgICAgICAgIG1fZHluYW1pY0dsb2JhbE9iamVjdFNsb3QgPSBkeW5h
bWljR2xvYmFsT2JqZWN0OwogCiAgICAgICAgIC8vIFJlc2V0IHRoZSBkYXRlIGNhY2hlIGJldHdl
ZW4gSlMgaW52b2NhdGlvbnMgdG8gZm9yY2UgdGhlIFZNCiAgICAgICAgIC8vIHRvIG9ic2VydmUg
dGltZSB6b25lIGNoYW5nZXMuCi0gICAgICAgIGdsb2JhbERhdGEucmVzZXREYXRlQ2FjaGUoKTsK
KyAgICAgICAgdm0ucmVzZXREYXRlQ2FjaGUoKTsKICAgICB9CiAgICAgLy8gQ2xlYXIgdGhlIGV4
Y2VwdGlvbiBzdGFjayBiZXR3ZWVuIGVudHJpZXMKLSAgICBnbG9iYWxEYXRhLmV4Y2VwdGlvblN0
YWNrID0gUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+KCk7CisgICAgdm0uZXhjZXB0aW9uU3Rh
Y2sgPSBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4oKTsKIH0KIAogdm9pZCBzbG93VmFsaWRh
dGVDZWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBAIC02MDcsNyArNjA3LDcgQEAg
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBKU0dsb2JhbE9iamVjdAogICAgIEpTUGFyc2VyU3Ry
aWN0bmVzcyBzdHJpY3RuZXNzID0gZXhlY3V0YWJsZS0+aXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNl
U3RyaWN0IDogSlNQYXJzZU5vcm1hbDsKICAgICBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlID0g
aGFzRGVidWdnZXIoKSA/IERlYnVnZ2VyT24gOiBEZWJ1Z2dlck9mZjsKICAgICBQcm9maWxlck1v
ZGUgcHJvZmlsZXJNb2RlID0gaGFzUHJvZmlsZXIoKSA/IFByb2ZpbGVyT24gOiBQcm9maWxlck9m
ZjsKLSAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZSA9IGdsb2JhbERh
dGEoKS5jb2RlQ2FjaGUoKS0+Z2V0UHJvZ3JhbUNvZGVCbG9jayhnbG9iYWxEYXRhKCksIGV4ZWN1
dGFibGUsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLCBzdHJpY3RuZXNzLCBkZWJ1Z2dlck1vZGUsIHBy
b2ZpbGVyTW9kZSwgZXJyb3IpOworICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogdW5saW5r
ZWRDb2RlID0gdm0oKS5jb2RlQ2FjaGUoKS0+Z2V0UHJvZ3JhbUNvZGVCbG9jayh2bSgpLCBleGVj
dXRhYmxlLCBleGVjdXRhYmxlLT5zb3VyY2UoKSwgc3RyaWN0bmVzcywgZGVidWdnZXJNb2RlLCBw
cm9maWxlck1vZGUsIGVycm9yKTsKIAogICAgIGlmIChoYXNEZWJ1Z2dlcigpKQogICAgICAgICBk
ZWJ1Z2dlcigpLT5zb3VyY2VQYXJzZWQoY2FsbEZyYW1lLCBleGVjdXRhYmxlLT5zb3VyY2UoKS5w
cm92aWRlcigpLCBlcnJvci5tX2xpbmUsIGVycm9yLm1fbWVzc2FnZSk7CkBAIC02MjYsNyArNjI2
LDcgQEAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBKU0dsb2JhbE9iamVjdDo6YwogICAgIEpTUGFy
c2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzID0gZXhlY3V0YWJsZS0+aXNTdHJpY3RNb2RlKCkgPyBK
U1BhcnNlU3RyaWN0IDogSlNQYXJzZU5vcm1hbDsKICAgICBEZWJ1Z2dlck1vZGUgZGVidWdnZXJN
b2RlID0gaGFzRGVidWdnZXIoKSA/IERlYnVnZ2VyT24gOiBEZWJ1Z2dlck9mZjsKICAgICBQcm9m
aWxlck1vZGUgcHJvZmlsZXJNb2RlID0gaGFzUHJvZmlsZXIoKSA/IFByb2ZpbGVyT24gOiBQcm9m
aWxlck9mZjsKLSAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkQ29kZSA9IGdsb2Jh
bERhdGEoKS5jb2RlQ2FjaGUoKS0+Z2V0RXZhbENvZGVCbG9jayhnbG9iYWxEYXRhKCksIHNjb3Bl
LCBleGVjdXRhYmxlLCBleGVjdXRhYmxlLT5zb3VyY2UoKSwgc3RyaWN0bmVzcywgZGVidWdnZXJN
b2RlLCBwcm9maWxlck1vZGUsIGVycm9yKTsKKyAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVu
bGlua2VkQ29kZSA9IHZtKCkuY29kZUNhY2hlKCktPmdldEV2YWxDb2RlQmxvY2sodm0oKSwgc2Nv
cGUsIGV4ZWN1dGFibGUsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLCBzdHJpY3RuZXNzLCBkZWJ1Z2dl
ck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3IpOwogCiAgICAgaWYgKGhhc0RlYnVnZ2VyKCkpCiAg
ICAgICAgIGRlYnVnZ2VyKCktPnNvdXJjZVBhcnNlZChjYWxsRnJhbWUsIGV4ZWN1dGFibGUtPnNv
dXJjZSgpLnByb3ZpZGVyKCksIGVycm9yLm1fbGluZSwgZXJyb3IubV9tZXNzYWdlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2
aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIkFycmF5
QWxsb2NhdGlvblByb2ZpbGUuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlND
bGFzc1JlZi5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAj
aW5jbHVkZSAiSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTV2Vha09i
amVjdE1hcFJlZkludGVybmFsLmgiCiAjaW5jbHVkZSAiTnVtYmVyUHJvdG90eXBlLmgiCkBAIC0x
OTUsMTEgKzE5NSwxMSBAQCBwcm90ZWN0ZWQ6CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMgSlNHbG9iYWxPYmplY3QqIGNy
ZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
IHN0YXRpYyBKU0dsb2JhbE9iamVjdCogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiAgICAgewotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHbG9iYWxPYmplY3Q+KGdsb2JhbERhdGEuaGVhcCkpIEpT
R2xvYmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgICAgIGdsb2JhbE9iamVj
dC0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgICAgIGdsb2JhbERhdGEuaGVhcC5h
ZGRGaW5hbGl6ZXIoZ2xvYmFsT2JqZWN0LCBkZXN0cm95KTsKKyAgICAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2xvYmFsT2Jq
ZWN0Pih2bS5oZWFwKSkgSlNHbG9iYWxPYmplY3Qodm0sIHN0cnVjdHVyZSk7CisgICAgICAgIGds
b2JhbE9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICB2bS5oZWFwLmFkZEZpbmFs
aXplcihnbG9iYWxPYmplY3QsIGRlc3Ryb3kpOwogICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0
OwogICAgIH0KIApAQCAtMjA5LDIwICsyMDksMjAgQEAgcHVibGljOgogICAgIGJvb2wgaGFzUHJv
ZmlsZXIoKSBjb25zdCB7IHJldHVybiBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5zdXBwb3J0
c1Byb2ZpbGluZyh0aGlzKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
ZXhwbGljaXQgSlNHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgY29uc3Qg
R2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqID0gMCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgZXhw
bGljaXQgSlNHbG9iYWxPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBHbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSogPSAwKTsKIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIHsKLSAg
ICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgICAgIHN0cnVjdHVy
ZSgpLT5zZXRHbG9iYWxPYmplY3QoZ2xvYmFsRGF0YSwgdGhpcyk7CisgICAgICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgc3RydWN0dXJlKCktPnNldEdsb2JhbE9iamVjdCh2
bSwgdGhpcyk7CiAgICAgICAgIG1fZXhwZXJpbWVudHNFbmFibGVkID0gbV9nbG9iYWxPYmplY3RN
ZXRob2RUYWJsZS0+amF2YVNjcmlwdEV4cGVyaW1lbnRzRW5hYmxlZCh0aGlzKTsKICAgICAgICAg
aW5pdCh0aGlzKTsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNPYmplY3QqIHRoaXNWYWx1ZSkKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgSlNPYmplY3QqIHRoaXNWYWx1ZSkKICAgICB7Ci0gICAgICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICBzdHJ1Y3R1cmUoKS0+c2V0R2xvYmFs
T2JqZWN0KGdsb2JhbERhdGEsIHRoaXMpOworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CisgICAgICAgIHN0cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3Qodm0sIHRoaXMpOwogICAg
ICAgICBtX2V4cGVyaW1lbnRzRW5hYmxlZCA9IG1fZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUtPmph
dmFTY3JpcHRFeHBlcmltZW50c0VuYWJsZWQodGhpcyk7CiAgICAgICAgIGluaXQodGhpc1ZhbHVl
KTsKICAgICB9CkBAIC0zNDQsNyArMzQ0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9o
YXZpbmdBQmFkVGltZVdhdGNocG9pbnQtPmhhc0JlZW5JbnZhbGlkYXRlZCgpOwogICAgIH0KICAg
ICAgICAgCi0gICAgdm9pZCBoYXZlQUJhZFRpbWUoSlNHbG9iYWxEYXRhJik7CisgICAgdm9pZCBo
YXZlQUJhZFRpbWUoVk0mKTsKICAgICAgICAgCiAgICAgYm9vbCBhcnJheVByb3RvdHlwZUNoYWlu
SXNTYW5lKCk7CiAKQEAgLTM4MCwxNCArMzgwLDE0IEBAIHB1YmxpYzoKICAgICAgICAgbV9ldmFs
RGlzYWJsZWRFcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7CiAgICAgfQogCi0gICAgdm9pZCBy
ZXNldFByb3RvdHlwZShKU0dsb2JhbERhdGEmLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisgICAgdm9p
ZCByZXNldFByb3RvdHlwZShWTSYsIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAgIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSgpIGNvbnN0IHsgcmV0dXJuICpIZWFwOjpoZWFwKHRoaXMpLT5nbG9i
YWxEYXRhKCk7IH0KKyAgICBWTSYgdm0oKSBjb25zdCB7IHJldHVybiAqSGVhcDo6aGVhcCh0aGlz
KS0+dm0oKTsgfQogICAgIEpTT2JqZWN0KiBnbG9iYWxUaGlzKCkgY29uc3Q7CiAKLSAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCAwLCBwcm90b3R5cGUsIFR5cGVJbmZvKEdsb2JhbE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgMCwgcHJvdG90eXBlLCBUeXBlSW5mbyhHbG9iYWxPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogICAgIHZvaWQgcmVnaXN0ZXJXZWFr
TWFwKE9wYXF1ZUpTV2Vha09iamVjdE1hcCogbWFwKQpAQCAtNDM0LDcgKzQzNCw3IEBAIHByb3Rl
Y3RlZDoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiB0b1Ro
aXNPYmplY3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSopOwogCi0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBzZXRHbG9iYWxUaGlzKEpTR2xvYmFsRGF0YSYsIEpTT2JqZWN0KiBnbG9i
YWxUaGlzKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldEdsb2JhbFRoaXMoVk0mLCBK
U09iamVjdCogZ2xvYmFsVGhpcyk7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTQ3OCwxMyArNDc4LDEzIEBAIGlubGluZSBKU0dsb2JhbE9i
amVjdCogRXhlY1N0YXRlOjpkeW5hbWkKIAogICAgIC8vIEZvciBhbnkgRXhlY1N0YXRlIHRoYXQn
cyBub3QgYSBnbG9iYWxFeGVjLCB0aGUgCiAgICAgLy8gZHluYW1pYyBnbG9iYWwgb2JqZWN0IG11
c3QgYmUgc2V0IHNpbmNlIGNvZGUgaXMgcnVubmluZwotICAgIEFTU0VSVChnbG9iYWxEYXRhKCku
ZHluYW1pY0dsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIGdsb2JhbERhdGEoKS5keW5hbWljR2xv
YmFsT2JqZWN0OworICAgIEFTU0VSVCh2bSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOworICAgIHJl
dHVybiB2bSgpLmR5bmFtaWNHbG9iYWxPYmplY3Q7CiB9CiAKIGlubGluZSBKU0FycmF5KiBjb25z
dHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSog
cHJvZmlsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5pdGlhbExl
bmd0aCA9IDApCiB7Ci0gICAgcmV0dXJuIEFycmF5QWxsb2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxh
c3RBbGxvY2F0aW9uRm9yKHByb2ZpbGUsIEpTQXJyYXk6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRh
KCksIGluaXRpYWxMZW5ndGggPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCA/IGdsb2JhbE9iamVj
dC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0
aEFycmF5U3RvcmFnZSkgOiBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1
cmluZ0FsbG9jYXRpb24ocHJvZmlsZSksIGluaXRpYWxMZW5ndGgpKTsKKyAgICByZXR1cm4gQXJy
YXlBbGxvY2F0aW9uUHJvZmlsZTo6dXBkYXRlTGFzdEFsbG9jYXRpb25Gb3IocHJvZmlsZSwgSlNB
cnJheTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGluaXRpYWxMZW5ndGggPj0gTUlOX1NQQVJTRV9BUlJB
WV9JTkRFWCA/IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJp
bmdBbGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3RvcmFnZSkgOiBnbG9iYWxPYmplY3QtPmFycmF5
U3RydWN0dXJlRm9yUHJvZmlsZUR1cmluZ0FsbG9jYXRpb24ocHJvZmlsZSksIGluaXRpYWxMZW5n
dGgpKTsKIH0KIAogaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlY1N0YXRl
KiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCB1bnNpZ25lZCBpbml0aWFs
TGVuZ3RoID0gMCkKQEAgLTUxNSw3ICs1MTUsNyBAQCBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0
QXJyYXkoRXhlY1N0YXRlCiBjbGFzcyBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSk7CiBwdWJsaWM6Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlKEpTR2xvYmFsRGF0
YSYsIEpTR2xvYmFsT2JqZWN0Kik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgRHluYW1pY0dsb2Jh
bE9iamVjdFNjb3BlKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKIAogICAgIH5EeW5hbWljR2xvYmFs
T2JqZWN0U2NvcGUoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDE0
ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVu
Y3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzM2LDcgKzczNiw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1AKICAgICBpZiAoIXRoaXNPYmplY3QtPmlzRXh0
ZW5zaWJsZSgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKTsKIAotICAg
IGlmICghdGhpc09iamVjdC0+c2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlY2soZXhlYy0+Z2xvYmFs
RGF0YSgpLCB2YWx1ZSkpCisgICAgaWYgKCF0aGlzT2JqZWN0LT5zZXRQcm90b3R5cGVXaXRoQ3lj
bGVDaGVjayhleGVjLT52bSgpLCB2YWx1ZSkpCiAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3Jl
YXRlRXJyb3IoZXhlYywgImN5Y2xpYyBfX3Byb3RvX18gdmFsdWUiKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNMb2NrLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNDAgKzUx
LDQwIEBAIHZvaWQgR2xvYmFsSlNMb2NrOjppbml0aWFsaXplKCkKIH0KIAogSlNMb2NrSG9sZGVy
OjpKU0xvY2tIb2xkZXIoRXhlY1N0YXRlKiBleGVjKQotICAgIDogbV9nbG9iYWxEYXRhKCZleGVj
LT5nbG9iYWxEYXRhKCkpCisgICAgOiBtX3ZtKCZleGVjLT52bSgpKQogewogICAgIGluaXQoKTsK
IH0KIAotSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
KQotICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCitKU0xvY2tIb2xkZXI6OkpTTG9ja0hv
bGRlcihWTSogdm0pCisgICAgOiBtX3ZtKHZtKQogewogICAgIGluaXQoKTsKIH0KIAotSlNMb2Nr
SG9sZGVyOjpKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAgIDogbV9n
bG9iYWxEYXRhKCZnbG9iYWxEYXRhKQorSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoVk0mIHZt
KQorICAgIDogbV92bSgmdm0pCiB7CiAgICAgaW5pdCgpOwogfQogCiB2b2lkIEpTTG9ja0hvbGRl
cjo6aW5pdCgpCiB7Ci0gICAgbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkubG9jaygpOworICAgIG1f
dm0tPmFwaUxvY2soKS5sb2NrKCk7CiB9CiAKIEpTTG9ja0hvbGRlcjo6fkpTTG9ja0hvbGRlcigp
CiB7Ci0gICAgUmVmUHRyPEpTTG9jaz4gYXBpTG9jaygmbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkp
OwotICAgIG1fZ2xvYmFsRGF0YS5jbGVhcigpOworICAgIFJlZlB0cjxKU0xvY2s+IGFwaUxvY2so
Jm1fdm0tPmFwaUxvY2soKSk7CisgICAgbV92bS5jbGVhcigpOwogICAgIGFwaUxvY2stPnVubG9j
aygpOwogfQogCi1KU0xvY2s6OkpTTG9jayhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitKU0xv
Y2s6OkpTTG9jayhWTSogdm0pCiAgICAgOiBtX293bmVyVGhyZWFkKDApCiAgICAgLCBtX2xvY2tD
b3VudCgwKQogICAgICwgbV9sb2NrRHJvcERlcHRoKDApCi0gICAgLCBtX2dsb2JhbERhdGEoZ2xv
YmFsRGF0YSkKKyAgICAsIG1fdm0odm0pCiB7CiAgICAgbV9zcGluTG9jay5Jbml0KCk7CiB9CkBA
IC05MywxMCArOTMsMTAgQEAgSlNMb2NrOjp+SlNMb2NrKCkKIHsKIH0KIAotdm9pZCBKU0xvY2s6
OndpbGxEZXN0cm95R2xvYmFsRGF0YShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCit2b2lkIEpT
TG9jazo6d2lsbERlc3Ryb3lHbG9iYWxEYXRhKFZNKiB2bSkKIHsKLSAgICBBU1NFUlRfVU5VU0VE
KGdsb2JhbERhdGEsIG1fZ2xvYmFsRGF0YSA9PSBnbG9iYWxEYXRhKTsKLSAgICBtX2dsb2JhbERh
dGEgPSAwOworICAgIEFTU0VSVF9VTlVTRUQodm0sIG1fdm0gPT0gdm0pOworICAgIG1fdm0gPSAw
OwogfQogCiB2b2lkIEpTTG9jazo6bG9jaygpCkBAIC0xMzMsMTIgKzEzMywxMiBAQCB2b2lkIEpT
TG9jazo6dW5sb2NrKCkKIAogdm9pZCBKU0xvY2s6OmxvY2soRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5hcGlMb2NrKCkubG9jaygpOworICAgIGV4ZWMtPnZtKCku
YXBpTG9jaygpLmxvY2soKTsKIH0KIAogdm9pZCBKU0xvY2s6OnVubG9jayhFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmFwaUxvY2soKS51bmxvY2soKTsKKyAgICBl
eGVjLT52bSgpLmFwaUxvY2soKS51bmxvY2soKTsKIH0KIAogYm9vbCBKU0xvY2s6OmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdMb2NrKCkKQEAgLTIxNSwyMSArMjE1LDIxIEBAIHZvaWQgSlNMb2NrOjpn
cmFiQWxsTG9ja3ModW5zaWduZWQgbG9ja0MKIAogSlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BB
bGxMb2NrcyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgOiBtX2xvY2tDb3VudCgwKQotICAgICwgbV9n
bG9iYWxEYXRhKCZleGVjLT5nbG9iYWxEYXRhKCkpCisgICAgLCBtX3ZtKCZleGVjLT52bSgpKQog
ewotICAgIG1fbG9ja0NvdW50ID0gbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuZHJvcEFsbExvY2tz
KCk7CisgICAgbV9sb2NrQ291bnQgPSBtX3ZtLT5hcGlMb2NrKCkuZHJvcEFsbExvY2tzKCk7CiB9
CiAKLUpTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhKQorSlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcyhWTSogdm0pCiAgICAg
OiBtX2xvY2tDb3VudCgwKQotICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgLCBt
X3ZtKHZtKQogewotICAgIG1fbG9ja0NvdW50ID0gbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuZHJv
cEFsbExvY2tzKCk7CisgICAgbV9sb2NrQ291bnQgPSBtX3ZtLT5hcGlMb2NrKCkuZHJvcEFsbExv
Y2tzKCk7CiB9CiAKIEpTTG9jazo6RHJvcEFsbExvY2tzOjp+RHJvcEFsbExvY2tzKCkKIHsKLSAg
ICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5ncmFiQWxsTG9ja3MobV9sb2NrQ291bnQpOworICAg
IG1fdm0tPmFwaUxvY2soKS5ncmFiQWxsTG9ja3MobV9sb2NrQ291bnQpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCShy
ZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtNDksMTAgKzQ5LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IC8vIHRocmVhZCBhY3F1aXJlZCBpdCB0byBiZWdpbiB3aXRoLgogCiAgICAgY2xhc3MgRXhlY1N0
YXRlOwotICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKKyAgICBjbGFzcyBWTTsKIAogICAgIC8vIFRo
aXMgY2xhc3MgaXMgdXNlZCB0byBwcm90ZWN0IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgbGVn
YWN5IHNpbmdsZSAKLSAgICAvLyBzaGFyZWQgSlNHbG9iYWxEYXRhLgorICAgIC8vIHNoYXJlZCBW
TS4KICAgICBjbGFzcyBHbG9iYWxKU0xvY2sgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShHbG9iYWxKU0xvY2spOwogICAgIHB1YmxpYzoKQEAgLTY2LDIxICs2NiwyMSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgIGNsYXNzIEpTTG9ja0hvbGRlciB7CiAgICAgcHVibGljOgotICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhKik7Ci0gICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIEpTTG9ja0hvbGRlcihKU0dsb2JhbERhdGEmKTsKKyAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgSlNMb2NrSG9sZGVyKFZNKik7CisgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIEpTTG9ja0hvbGRlcihWTSYpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0xv
Y2tIb2xkZXIoRXhlY1N0YXRlKik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTTG9j
a0hvbGRlcigpOwogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgaW5pdCgpOwogCi0gICAgICAg
IFJlZlB0cjxKU0dsb2JhbERhdGE+IG1fZ2xvYmFsRGF0YTsKKyAgICAgICAgUmVmUHRyPFZNPiBt
X3ZtOwogICAgIH07CiAKICAgICBjbGFzcyBKU0xvY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8SlNMb2NrPiB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEpTTG9jayk7CiAg
ICAgcHVibGljOgotICAgICAgICBKU0xvY2soSlNHbG9iYWxEYXRhKik7CisgICAgICAgIEpTTG9j
ayhWTSopOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB+SlNMb2NrKCk7CiAKICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBsb2NrKCk7CkBAIC04OCwxMCArODgsMTAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIHZvaWQgbG9jayhFeGVjU3RhdGUqKTsKICAgICAg
ICAgc3RhdGljIHZvaWQgdW5sb2NrKEV4ZWNTdGF0ZSopOwotICAgICAgICBzdGF0aWMgdm9pZCBs
b2NrKEpTR2xvYmFsRGF0YSYpOwotICAgICAgICBzdGF0aWMgdm9pZCB1bmxvY2soSlNHbG9iYWxE
YXRhJik7CisgICAgICAgIHN0YXRpYyB2b2lkIGxvY2soVk0mKTsKKyAgICAgICAgc3RhdGljIHZv
aWQgdW5sb2NrKFZNJik7CiAKLSAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKCkgeyBy
ZXR1cm4gbV9nbG9iYWxEYXRhOyB9CisgICAgICAgIFZNKiB2bSgpIHsgcmV0dXJuIG1fdm07IH0K
IAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdM
b2NrKCk7CiAKQEAgLTk5LDE4ICs5OSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5z
aWduZWQgZHJvcEFsbExvY2tzVW5jb25kaXRpb25hbGx5KCk7CiAgICAgICAgIHZvaWQgZ3JhYkFs
bExvY2tzKHVuc2lnbmVkIGxvY2tDb3VudCk7CiAKLSAgICAgICAgdm9pZCB3aWxsRGVzdHJveUds
b2JhbERhdGEoSlNHbG9iYWxEYXRhKik7CisgICAgICAgIHZvaWQgd2lsbERlc3Ryb3lHbG9iYWxE
YXRhKFZNKik7CiAKICAgICAgICAgY2xhc3MgRHJvcEFsbExvY2tzIHsKICAgICAgICAgICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKERyb3BBbGxMb2Nrcyk7CiAgICAgICAgIHB1YmxpYzoKICAgICAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIERyb3BBbGxMb2NrcyhFeGVjU3RhdGUqIGV4ZWMpOwot
ICAgICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgRHJvcEFsbExvY2tzKEpTR2xvYmFsRGF0YSop
OworICAgICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgRHJvcEFsbExvY2tzKFZNKik7CiAgICAg
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB+RHJvcEFsbExvY2tzKCk7CiAgICAgICAgICAgICAK
ICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIGludHB0cl90IG1fbG9ja0NvdW50OwotICAg
ICAgICAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gbV9nbG9iYWxEYXRhOworICAgICAgICAgICAg
UmVmUHRyPFZNPiBtX3ZtOwogICAgICAgICB9OwogCiAgICAgcHJpdmF0ZToKQEAgLTExOSw3ICsx
MTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX293bmVy
VGhyZWFkOwogICAgICAgICBpbnRwdHJfdCBtX2xvY2tDb3VudDsKICAgICAgICAgdW5zaWduZWQg
bV9sb2NrRHJvcERlcHRoOwotICAgICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKKyAg
ICAgICAgVk0qIG1fdm07CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaAkocmV2aXNpb24gMTQ4NjU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNTYsMTUgKzU2LDE1IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKE5hbWVTY29wZU9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7IH0KKyAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvKSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90bywgVHlwZUluZm8oTmFtZVNjb3BlT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAm
c19pbmZvKTsgfQogCiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKIHByb3Rl
Y3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgaWRlbnRpZmllciwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykK
ICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7
Ci0gICAgICAgIG1fcmVnaXN0ZXJTdG9yZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2
YWx1ZSk7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOworICAgICAg
ICBtX3JlZ2lzdGVyU3RvcmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIHZhbHVlKTsKICAgICAgICAg
c3ltYm9sVGFibGUoKS0+YWRkKGlkZW50aWZpZXIuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KC0x
LCBhdHRyaWJ1dGVzKSk7CiAgICAgfQogCkBAIC03Myw3ICs3Myw3IEBAIHByb3RlY3RlZDoKIHBy
aXZhdGU6CiAgICAgSlNOYW1lU2NvcGUoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBuZXh0KQog
ICAgICAgICA6IEJhc2UoCi0gICAgICAgICAgICBleGVjLT5nbG9iYWxEYXRhKCksCisgICAgICAg
ICAgICBleGVjLT52bSgpLAogICAgICAgICAgICAgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5uYW1lU2NvcGVTdHJ1Y3R1cmUoKSwKICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8UmVn
aXN0ZXIqPigmbV9yZWdpc3RlclN0b3JlICsgMSksCiAgICAgICAgICAgICBuZXh0CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5oCShyZXZpc2lv
biAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
Y2xhc3MgSlNOb3RBbk9iamVjdCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICBwcml2
YXRlOgogICAgICAgICBKU05vdEFuT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKLSAgICAgICAgICAg
IDogSlNOb25GaW5hbE9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmdsb2JhbERhdGEo
KS5ub3RBbk9iamVjdFN0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgICAgIDogSlNOb25GaW5hbE9i
amVjdChleGVjLT52bSgpLCBleGVjLT52bSgpLm5vdEFuT2JqZWN0U3RydWN0dXJlLmdldCgpKQog
ICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC00OSwxMyArNDksMTMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBKU05vdEFuT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRl
KiBleGVjKQogICAgICAgICB7CiAgICAgICAgICAgICBKU05vdEFuT2JqZWN0KiBvYmplY3QgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU05vdEFuT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkg
SlNOb3RBbk9iamVjdChleGVjKTsKLSAgICAgICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24o
ZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24o
ZXhlYy0+dm0oKSk7CiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICAgICB9CiAKLSAg
ICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2lu
Zm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNw
cAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
Tk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEzICs1NSwxMyBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09OCiBuYW1lc3BhY2UgSlNDIHsKIAogSlNPTk9i
amVjdDo6SlNPTk9iamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKLSAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT5nbG9iYWxE
YXRhKCksIHN0cnVjdHVyZSkKKyAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT52
bSgpLCBzdHJ1Y3R1cmUpCiB7CiB9CiAKIHZvaWQgSlNPTk9iamVjdDo6ZmluaXNoQ3JlYXRpb24o
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogfQog
CkBAIC05MCw3ICs5MCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgY2xhc3MgSG9sZGVyIHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIEhvbGRlcihKU0dsb2JhbERhdGEmLCBKU09iamVjdCopOwor
ICAgICAgICBIb2xkZXIoVk0mLCBKU09iamVjdCopOwogCiAgICAgICAgIEpTT2JqZWN0KiBvYmpl
Y3QoKSBjb25zdCB7IHJldHVybiBtX29iamVjdC5nZXQoKTsgfQogCkBAIC0yMTcsNyArMjE3LDcg
QEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmaWVyKEV4ZWNTdGF0ZSogZXhlYwogICAgIGlmIChtX3Jl
cGxhY2VyLmFzT2JqZWN0KCktPmluaGVyaXRzKCZKU0FycmF5OjpzX2luZm8pKSB7CiAgICAgICAg
IG1fdXNpbmdBcnJheVJlcGxhY2VyID0gdHJ1ZTsKICAgICAgICAgSGFuZGxlPEpTT2JqZWN0PiBh
cnJheSA9IG1fcmVwbGFjZXIuYXNPYmplY3QoKTsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
YXJyYXktPmdldChleGVjLCBleGVjLT5nbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
KS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmdldChl
eGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICAg
ICAgSlNWYWx1ZSBuYW1lID0gYXJyYXktPmdldChleGVjLCBpKTsKICAgICAgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKQEAgLTI0MCwxOCArMjQwLDE4IEBAIExvY2FsPFVua25vd24+
IFN0cmluZ2lmaWVyOjpzdHJpbmdpZnkoSGEKIHsKICAgICBKU09iamVjdCogb2JqZWN0ID0gY29u
c3RydWN0RW1wdHlPYmplY3QobV9leGVjKTsKICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24o
KSkKLSAgICAgICAgcmV0dXJuIExvY2FsPFVua25vd24+KG1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBq
c051bGwoKSk7CisgICAgICAgIHJldHVybiBMb2NhbDxVbmtub3duPihtX2V4ZWMtPnZtKCksIGpz
TnVsbCgpKTsKIAotICAgIFByb3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbCBlbXB0eVByb3BlcnR5
TmFtZShtX2V4ZWMtPmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXIp
OwotICAgIG9iamVjdC0+cHV0RGlyZWN0KG1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2V4ZWMtPmds
b2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXIsIHZhbHVlLmdldCgpKTsK
KyAgICBQcm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGwgZW1wdHlQcm9wZXJ0eU5hbWUobV9leGVj
LT52bSgpLnByb3BlcnR5TmFtZXMtPmVtcHR5SWRlbnRpZmllcik7CisgICAgb2JqZWN0LT5wdXRE
aXJlY3QobV9leGVjLT52bSgpLCBtX2V4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVu
dGlmaWVyLCB2YWx1ZS5nZXQoKSk7CiAKICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICBp
ZiAoYXBwZW5kU3RyaW5naWZpZWRWYWx1ZShyZXN1bHQsIHZhbHVlLmdldCgpLCBvYmplY3QsIGVt
cHR5UHJvcGVydHlOYW1lKSAhPSBTdHJpbmdpZnlTdWNjZWVkZWQpCi0gICAgICAgIHJldHVybiBM
b2NhbDxVbmtub3duPihtX2V4ZWMtPmdsb2JhbERhdGEoKSwganNVbmRlZmluZWQoKSk7CisgICAg
ICAgIHJldHVybiBMb2NhbDxVbmtub3duPihtX2V4ZWMtPnZtKCksIGpzVW5kZWZpbmVkKCkpOwog
ICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gTG9jYWw8VW5r
bm93bj4obV9leGVjLT5nbG9iYWxEYXRhKCksIGpzTnVsbCgpKTsKKyAgICAgICAgcmV0dXJuIExv
Y2FsPFVua25vd24+KG1fZXhlYy0+dm0oKSwganNOdWxsKCkpOwogCi0gICAgcmV0dXJuIExvY2Fs
PFVua25vd24+KG1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc1N0cmluZyhtX2V4ZWMsIHJlc3VsdC50
b1N0cmluZygpKSk7CisgICAgcmV0dXJuIExvY2FsPFVua25vd24+KG1fZXhlYy0+dm0oKSwganNT
dHJpbmcobV9leGVjLCByZXN1bHQudG9TdHJpbmcoKSkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhclR5cGU+CkBAIC0zMjAsMTAgKzMyMCwxMCBAQCB2b2lkIFN0cmluZ2lmaWVyOjphcHBl
bmRRdW90ZWRTdHJpbmcoU3RyCiBpbmxpbmUgSlNWYWx1ZSBTdHJpbmdpZmllcjo6dG9KU09OKEpT
VmFsdWUgdmFsdWUsIGNvbnN0IFByb3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbCYgcHJvcGVydHlO
YW1lKQogewogICAgIEFTU0VSVCghbV9leGVjLT5oYWRFeGNlcHRpb24oKSk7Ci0gICAgaWYgKCF2
YWx1ZS5pc09iamVjdCgpIHx8ICFhc09iamVjdCh2YWx1ZSktPmhhc1Byb3BlcnR5KG1fZXhlYywg
bV9leGVjLT5nbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+dG9KU09OKSkKKyAgICBpZiAoIXZh
bHVlLmlzT2JqZWN0KCkgfHwgIWFzT2JqZWN0KHZhbHVlKS0+aGFzUHJvcGVydHkobV9leGVjLCBt
X2V4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+dG9KU09OKSkKICAgICAgICAgcmV0dXJuIHZhbHVl
OwogCi0gICAgSlNWYWx1ZSB0b0pTT05GdW5jdGlvbiA9IGFzT2JqZWN0KHZhbHVlKS0+Z2V0KG1f
ZXhlYywgbV9leGVjLT5nbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+dG9KU09OKTsKKyAgICBK
U1ZhbHVlIHRvSlNPTkZ1bmN0aW9uID0gYXNPYmplY3QodmFsdWUpLT5nZXQobV9leGVjLCBtX2V4
ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+dG9KU09OKTsKICAgICBpZiAobV9leGVjLT5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCkBAIC00MTYsNyArNDE2LDcgQEAg
U3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBTdHJpbmdpZmllcgogICAgICAgICB9CiAgICAg
fQogICAgIGJvb2wgaG9sZGVyU3RhY2tXYXNFbXB0eSA9IG1faG9sZGVyU3RhY2suaXNFbXB0eSgp
OwotICAgIG1faG9sZGVyU3RhY2suYXBwZW5kKEhvbGRlcihtX2V4ZWMtPmdsb2JhbERhdGEoKSwg
b2JqZWN0KSk7CisgICAgbV9ob2xkZXJTdGFjay5hcHBlbmQoSG9sZGVyKG1fZXhlYy0+dm0oKSwg
b2JqZWN0KSk7CiAgICAgaWYgKCFob2xkZXJTdGFja1dhc0VtcHR5KQogICAgICAgICByZXR1cm4g
U3RyaW5naWZ5U3VjY2VlZGVkOwogCkBAIC00NTksOCArNDU5LDggQEAgaW5saW5lIHZvaWQgU3Ry
aW5naWZpZXI6OnN0YXJ0TmV3TGluZShTdAogICAgIGJ1aWxkZXIuYXBwZW5kKG1faW5kZW50KTsK
IH0KIAotaW5saW5lIFN0cmluZ2lmaWVyOjpIb2xkZXI6OkhvbGRlcihKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTT2JqZWN0KiBvYmplY3QpCi0gICAgOiBtX29iamVjdChnbG9iYWxEYXRhLCBv
YmplY3QpCitpbmxpbmUgU3RyaW5naWZpZXI6OkhvbGRlcjo6SG9sZGVyKFZNJiB2bSwgSlNPYmpl
Y3QqIG9iamVjdCkKKyAgICA6IG1fb2JqZWN0KHZtLCBvYmplY3QpCiAgICAgLCBtX2lzQXJyYXko
b2JqZWN0LT5pbmhlcml0cygmSlNBcnJheTo6c19pbmZvKSkKICAgICAsIG1faW5kZXgoMCkKICNp
Zm5kZWYgTkRFQlVHCkBAIC00NzksNyArNDc5LDcgQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVy
OjphcHBlbmROZXh0UHJvcAogICAgIGlmICghbV9pbmRleCkgewogICAgICAgICBpZiAobV9pc0Fy
cmF5KSB7CiAgICAgICAgICAgICBtX2lzSlNBcnJheSA9IGlzSlNBcnJheShtX29iamVjdC5nZXQo
KSk7Ci0gICAgICAgICAgICBtX3NpemUgPSBtX29iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPmdsb2Jh
bERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAgICAgICAg
ICAgbV9zaXplID0gbV9vYmplY3QtPmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnWycp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHN0cmluZ2lmaWVyLm1fdXNpbmdB
cnJheVJlcGxhY2VyKQpAQCAtNjA0LDcgKzYwNCw3IEBAIGNsYXNzIFdhbGtlciB7CiBwdWJsaWM6
CiAgICAgV2Fsa2VyKEV4ZWNTdGF0ZSogZXhlYywgSGFuZGxlPEpTT2JqZWN0PiBmdW5jdGlvbiwg
Q2FsbFR5cGUgY2FsbFR5cGUsIENhbGxEYXRhIGNhbGxEYXRhKQogICAgICAgICA6IG1fZXhlYyhl
eGVjKQotICAgICAgICAsIG1fZnVuY3Rpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvbikK
KyAgICAgICAgLCBtX2Z1bmN0aW9uKGV4ZWMtPnZtKCksIGZ1bmN0aW9uKQogICAgICAgICAsIG1f
Y2FsbFR5cGUoY2FsbFR5cGUpCiAgICAgICAgICwgbV9jYWxsRGF0YShjYWxsRGF0YSkKICAgICB7
CkBAIC02MzUsOCArNjM1LDggQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpT
VmFsdQogewogICAgIFZlY3RvcjxQcm9wZXJ0eU5hbWVBcnJheSwgMTYsIFVuc2FmZVZlY3Rvck92
ZXJmbG93PiBwcm9wZXJ0eVN0YWNrOwogICAgIFZlY3Rvcjx1aW50MzJfdCwgMTYsIFVuc2FmZVZl
Y3Rvck92ZXJmbG93PiBpbmRleFN0YWNrOwotICAgIExvY2FsU3RhY2s8SlNPYmplY3QsIDE2PiBv
YmplY3RTdGFjayhtX2V4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgTG9jYWxTdGFjazxKU0FycmF5
LCAxNj4gYXJyYXlTdGFjayhtX2V4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgTG9jYWxTdGFjazxK
U09iamVjdCwgMTY+IG9iamVjdFN0YWNrKG1fZXhlYy0+dm0oKSk7CisgICAgTG9jYWxTdGFjazxK
U0FycmF5LCAxNj4gYXJyYXlTdGFjayhtX2V4ZWMtPnZtKCkpOwogICAgIAogICAgIFZlY3RvcjxX
YWxrZXJTdGF0ZSwgMTYsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBzdGF0ZVN0YWNrOwogICAgIFdh
bGtlclN0YXRlIHN0YXRlID0gU3RhdGVVbmtub3duOwpAQCAtNzcyLDcgKzc3Miw3IEBAIE5FVkVS
X0lOTElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAgICB9CiAgICAgSlNPYmplY3Qq
IGZpbmFsSG9sZGVyID0gY29uc3RydWN0RW1wdHlPYmplY3QobV9leGVjKTsKICAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdDsKLSAgICBmaW5hbEhvbGRlci0+bWV0aG9kVGFibGUoKS0+cHV0KGZpbmFs
SG9sZGVyLCBtX2V4ZWMsIG1fZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPmVtcHR5
SWRlbnRpZmllciwgb3V0VmFsdWUsIHNsb3QpOworICAgIGZpbmFsSG9sZGVyLT5tZXRob2RUYWJs
ZSgpLT5wdXQoZmluYWxIb2xkZXIsIG1fZXhlYywgbV9leGVjLT52bSgpLnByb3BlcnR5TmFtZXMt
PmVtcHR5SWRlbnRpZmllciwgb3V0VmFsdWUsIHNsb3QpOwogICAgIHJldHVybiBjYWxsUmV2aXZl
cihmaW5hbEhvbGRlciwganNFbXB0eVN0cmluZyhtX2V4ZWMpLCBvdXRWYWx1ZSk7CiB9CiAKQEAg
LTc4Niw3ICs3ODYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTT05Qcm90b0Z1
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogCiAgICAgSlNWYWx1
ZSB1bmZpbHRlcmVkOwotICAgIExvY2FsU2NvcGUgc2NvcGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsK
KyAgICBMb2NhbFNjb3BlIHNjb3BlKGV4ZWMtPnZtKCkpOwogICAgIGlmIChzb3VyY2UuaXM4Qml0
KCkpIHsKICAgICAgICAgTGl0ZXJhbFBhcnNlcjxMQ2hhcj4ganNvblBhcnNlcihleGVjLCBzb3Vy
Y2UuY2hhcmFjdGVyczgoKSwgc291cmNlLmxlbmd0aCgpLCBTdHJpY3RKU09OKTsKICAgICAgICAg
dW5maWx0ZXJlZCA9IGpzb25QYXJzZXIudHJ5TGl0ZXJhbFBhcnNlKCk7CkBAIC04MDcsNyArODA3
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09OUHJvdG9GdQogICAgIENhbGxU
eXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBpZiAo
Y2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHVuZmlsdGVyZWQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoV2Fsa2VyKGV4ZWMsIExv
Y2FsPEpTT2JqZWN0PihleGVjLT5nbG9iYWxEYXRhKCksIGFzT2JqZWN0KGZ1bmN0aW9uKSksIGNh
bGxUeXBlLCBjYWxsRGF0YSkud2Fsayh1bmZpbHRlcmVkKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShXYWxrZXIoZXhlYywgTG9jYWw8SlNPYmplY3Q+KGV4ZWMtPnZtKCksIGFzT2JqZWN0
KGZ1bmN0aW9uKSksIGNhbGxUeXBlLCBjYWxsRGF0YSkud2Fsayh1bmZpbHRlcmVkKSk7CiB9CiAK
IC8vIEVDTUEtMjYyIHY1IDE1LjEyLjMKQEAgLTgxNSwxNyArODE1LDE3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgSlNPTlByb3RvRnUKIHsKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50
Q291bnQoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoIk5vIGlucHV0IHRvIHN0cmluZ2lmeSIpKSk7Ci0gICAgTG9jYWxT
Y29wZSBzY29wZShleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgIExvY2FsPFVua25vd24+IHZhbHVl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIExvY2FsPFVua25v
d24+IHJlcGxhY2VyKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+YXJndW1lbnQoMSkpOwotICAg
IExvY2FsPFVua25vd24+IHNwYWNlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+YXJndW1lbnQo
MikpOworICAgIExvY2FsU2NvcGUgc2NvcGUoZXhlYy0+dm0oKSk7CisgICAgTG9jYWw8VW5rbm93
bj4gdmFsdWUoZXhlYy0+dm0oKSwgZXhlYy0+YXJndW1lbnQoMCkpOworICAgIExvY2FsPFVua25v
d24+IHJlcGxhY2VyKGV4ZWMtPnZtKCksIGV4ZWMtPmFyZ3VtZW50KDEpKTsKKyAgICBMb2NhbDxV
bmtub3duPiBzcGFjZShleGVjLT52bSgpLCBleGVjLT5hcmd1bWVudCgyKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShTdHJpbmdpZmllcihleGVjLCByZXBsYWNlciwgc3BhY2UpLnN0cmlu
Z2lmeSh2YWx1ZSkuZ2V0KCkpOwogfQogCiBTdHJpbmcgSlNPTlN0cmluZ2lmeShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGluZGVudCkKIHsKLSAgICBMb2NhbFNjb3Bl
IHNjb3BlKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgTG9jYWw8VW5rbm93bj4gcmVzdWx0ID0g
U3RyaW5naWZpZXIoZXhlYywgTG9jYWw8VW5rbm93bj4oZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc051
bGwoKSksIExvY2FsPFVua25vd24+KGV4ZWMtPmdsb2JhbERhdGEoKSwganNOdW1iZXIoaW5kZW50
KSkpLnN0cmluZ2lmeShMb2NhbDxVbmtub3duPihleGVjLT5nbG9iYWxEYXRhKCksIHZhbHVlKSk7
CisgICAgTG9jYWxTY29wZSBzY29wZShleGVjLT52bSgpKTsKKyAgICBMb2NhbDxVbmtub3duPiBy
ZXN1bHQgPSBTdHJpbmdpZmllcihleGVjLCBMb2NhbDxVbmtub3duPihleGVjLT52bSgpLCBqc051
bGwoKSksIExvY2FsPFVua25vd24+KGV4ZWMtPnZtKCksIGpzTnVtYmVyKGluZGVudCkpKS5zdHJp
bmdpZnkoTG9jYWw8VW5rbm93bj4oZXhlYy0+dm0oKSwgdmFsdWUpKTsKICAgICBpZiAocmVzdWx0
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICByZXR1
cm4gcmVzdWx0LmdldFN0cmluZyhleGVjKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT05PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09OT2JqZWN0LmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMs
OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQorICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3Rh
dGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Miw3ICsz
NDIsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAgICAgSlNP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlQo
dmFsdWUpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1
ZSkgPT0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KSk7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
CiAgICAgLy8gVHJ5IGluZGV4ZWQgcHV0IGZpcnN0LiBUaGlzIGlzIHJlcXVpcmVkIGZvciBjb3Jy
ZWN0bmVzcywgc2luY2UgbG9hZHMgb24gcHJvcGVydHkgbmFtZXMgdGhhdCBhcHBlYXIgbGlrZQog
ICAgIC8vIHZhbGlkIGluZGljZXMgd2lsbCBuZXZlciBsb29rIGluIHRoZSBuYW1lZCBwcm9wZXJ0
eSBzdG9yYWdlLgpAQCAtMzU4LDggKzM1OCw4IEBAIHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGEKICAgICAgICAgZm9yIChKU09iamVjdCogb2JqID0gdGhpc09iamVjdDsg
IW9iai0+c3RydWN0dXJlKCktPmhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhj
bHVkaW5nUHJvdG8oKTsgb2JqID0gYXNPYmplY3QocHJvdG90eXBlKSkgewogICAgICAgICAgICAg
cHJvdG90eXBlID0gb2JqLT5wcm90b3R5cGUoKTsKICAgICAgICAgICAgIGlmIChwcm90b3R5cGUu
aXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXRoaXNPYmplY3QtPnN0cnVjdHVy
ZSgpLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oZXhlYy0+Z2xvYmFsRGF0YSgp
LCBwcm9wZXJ0eU5hbWUpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXRoaXNPYmplY3QtPnB1dERp
cmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IDAsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSkKKyAgICAgICAgICAgICAgICBBU1NF
UlQoIXRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0
b3JlVG8oZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgICAgICAgICAgaWYgKCF0
aGlzT2JqZWN0LT5wdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgMCwgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKQogICAgICAgICAgICAg
ICAgICAgICAmJiBzbG90LmlzU3RyaWN0TW9kZSgpKQogICAgICAgICAgICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlX
cml0ZUVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzcxLDEwICszNzEsMTAg
QEAgdm9pZCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YQogICAgIGZvciAob2Jq
ID0gdGhpc09iamVjdDsgOyBvYmogPSBhc09iamVjdChwcm90b3R5cGUpKSB7CiAgICAgICAgIHVu
c2lnbmVkIGF0dHJpYnV0ZXM7CiAgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gb2JqLT5zdHJ1Y3R1cmUoKS0+Z2V0KGdsb2JhbERh
dGEsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IG9iai0+c3RydWN0dXJlKCktPmdldCh2bSwgcHJvcGVydHlO
YW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSkgewogICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkgewot
ICAgICAgICAgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBl
Q2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1l
KSB8fCBvYmogPT0gdGhpc09iamVjdCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHRoaXNPYmpl
Y3QtPnN0cnVjdHVyZSgpLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oZXhlYy0+
dm0oKSwgcHJvcGVydHlOYW1lKSB8fCBvYmogPT0gdGhpc09iamVjdCk7CiAgICAgICAgICAgICAg
ICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCiAgICAgICAgICAgICAgICAgICAgIHRocm93RXJy
b3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVh
ZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAt
MzgzLDcgKzM4Myw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGEK
ICAgICAgICAgICAgIEpTVmFsdWUgZ3MgPSBvYmotPmdldERpcmVjdChvZmZzZXQpOwogICAgICAg
ICAgICAgaWYgKGdzLmlzR2V0dGVyU2V0dGVyKCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQo
YXR0cmlidXRlcyAmIEFjY2Vzc29yKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQodGhpc09iamVj
dC0+c3RydWN0dXJlKCktPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhleGVjLT5n
bG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSkgfHwgb2JqID09IHRoaXNPYmplY3QpOworICAgICAg
ICAgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBlQ2hhaW5N
YXlJbnRlcmNlcHRTdG9yZVRvKGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSkgfHwgb2JqID09IHRo
aXNPYmplY3QpOwogICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBzZXR0ZXJGdW5jID0gYXNHZXR0
ZXJTZXR0ZXIoZ3MpLT5zZXR0ZXIoKTsgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICghc2V0
dGVyRnVuYykgewogICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkK
QEAgLTQxMiw4ICs0MTIsOCBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgCi0gICAgQVNTRVJUKCF0aGlzT2Jq
ZWN0LT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKSB8fCBvYmogPT0gdGhpc09iamVjdCk7Ci0gICAg
aWYgKCF0aGlzT2JqZWN0LT5wdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0PihnbG9iYWxEYXRh
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkp
ICYmIHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKGV4ZWMtPnZtKCksIHByb3Bl
cnR5TmFtZSkgfHwgb2JqID09IHRoaXNPYmplY3QpOworICAgIGlmICghdGhpc09iamVjdC0+cHV0
RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNs
b3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSkgJiYgc2xvdC5pc1N0cmljdE1vZGUoKSkKICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKFN0cmljdE1vZGVSZWFkb25s
eVByb3BlcnR5V3JpdGVFcnJvcikpOwogICAgIHJldHVybjsKIH0KQEAgLTQzMyw3ICs0MzMsNyBA
QCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAgICAgIGJyZWFr
OwogICAgICAgICAKICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6IHsKLSAg
ICAgICAgdGhpc09iamVjdC0+Y29udmVydFVuZGVjaWRlZEZvclZhbHVlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgdmFsdWUpOworICAgICAgICB0aGlzT2JqZWN0LT5jb252ZXJ0VW5kZWNpZGVkRm9yVmFs
dWUoZXhlYy0+dm0oKSwgdmFsdWUpOwogICAgICAgICAvLyBSZWxvb3AuCiAgICAgICAgIHB1dEJ5
SW5kZXgoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwogICAg
ICAgICByZXR1cm47CkBAIC00NDEsNyArNDQxLDcgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRl
eChKU0NlbGwqIGNlbGwsIAogICAgICAgICAKICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19U
WVBFUzogewogICAgICAgICBpZiAoIXZhbHVlLmlzSW50MzIoKSkgewotICAgICAgICAgICAgdGhp
c09iamVjdC0+Y29udmVydEludDMyRm9yVmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB2YWx1ZSk7
CisgICAgICAgICAgICB0aGlzT2JqZWN0LT5jb252ZXJ0SW50MzJGb3JWYWx1ZShleGVjLT52bSgp
LCB2YWx1ZSk7CiAgICAgICAgICAgICBwdXRCeUluZGV4KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNob3VsZFRocm93KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpA
QCAtNDUyLDcgKzQ1Miw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxs
LCAKICAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZs
eTsKICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA+PSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgp
KQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW3By
b3BlcnR5TmFtZV0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOwor
ICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtwcm9wZXJ0eU5hbWVdLnNldChleGVjLT52
bSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPj0gYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKICAgICAgICAgICAgIGJ1dHRlcmZseS0+c2V0UHVibGlj
TGVuZ3RoKHByb3BlcnR5TmFtZSArIDEpOwogICAgICAgICByZXR1cm47CkBAIC00NjAsMTQgKzQ2
MCwxNCBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAgICAg
IAogICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBpZiAoIXZh
bHVlLmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPmNvbnZlcnREb3VibGVU
b0NvbnRpZ3VvdXMoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3Qt
PmNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoZXhlYy0+dm0oKSk7CiAgICAgICAgICAgICAvLyBS
ZWxvb3AuCiAgICAgICAgICAgICBwdXRCeUluZGV4KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNob3VsZFRocm93KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICBkb3VibGUgdmFsdWVBc0RvdWJsZSA9IHZhbHVlLmFzTnVtYmVyKCk7CiAgICAgICAgIGlm
ICh2YWx1ZUFzRG91YmxlICE9IHZhbHVlQXNEb3VibGUpIHsKLSAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPmNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAg
ICAgICAgIHRoaXNPYmplY3QtPmNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoZXhlYy0+dm0oKSk7
CiAgICAgICAgICAgICAvLyBSZWxvb3AuCiAgICAgICAgICAgICBwdXRCeUluZGV4KGNlbGwsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTQ5OSw3ICs0OTksNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCog
Y2VsbCwgCiAgICAgICAgIH0gZWxzZSBpZiAoIXZhbHVlU2xvdCkKICAgICAgICAgICAgICsrc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKICAgICAgICAgCi0gICAgICAgIHZhbHVlU2xvdC5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAgICAgIHZhbHVl
U2xvdC5zZXQoZXhlYy0+dm0oKSwgdGhpc09iamVjdCwgdmFsdWUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgICAgICAKQEAgLTUyNiw3ICs1MjYsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXRC
eUluZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3I7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZhbHVlU2xvdC5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAgICAgIHZhbHVlU2xvdC5z
ZXQoZXhlYy0+dm0oKSwgdGhpc09iamVjdCwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgICAgICAKQEAgLTUzNywxMiArNTM3LDEyIEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5k
ZXgoSlNDZWxsKiBjZWxsLCAKICAgICB0aGlzT2JqZWN0LT5wdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKIH0KIAotQXJy
YXlTdG9yYWdlKiBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5
U3RvcmFnZUFscmVhZHlFeGlzdHMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UpCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRl
eGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhWTSYgdm0sIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSkKIHsKICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5t
X3NwYXJzZU1hcC5nZXQoKTsKIAogICAgIGlmICghbWFwKQotICAgICAgICBtYXAgPSBhbGxvY2F0
ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworICAgICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJz
ZUluZGV4TWFwKHZtKTsKIAogICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSkKICAgICAgICAgcmV0
dXJuIHN0b3JhZ2U7CkBAIC01NTUsMjEgKzU1NSwyMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0
OjplbnRlckRpY3Rpb25hcnlJCiAgICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMgYmUgYSBuZXcg
ZW50cnkgaW4gdGhlIG1hcCwgc28gbm8gbmVlZCB0byBjaGVjayB3ZSBjYW4gd3JpdGUsCiAgICAg
ICAgIC8vIGFuZCBhdHRyaWJ1dGVzIGFyZSBkZWZhdWx0IHNvIG5vIG5lZWQgdG8gc2V0IHRoZW0u
CiAgICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIG1hcC0+YWRkKHRoaXMsIGkpLml0ZXJh
dG9yLT52YWx1ZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgbWFw
LT5hZGQodGhpcywgaSkuaXRlcmF0b3ItPnZhbHVlLnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAg
IH0KIAotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCkt
PnJlc2l6ZUFycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCAwLCBBcnJheVN0b3JhZ2U6OnNp
emVGb3IoMCkpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVy
Zmx5KCktPnJlc2l6ZUFycmF5KHZtLCBzdHJ1Y3R1cmUoKSwgMCwgQXJyYXlTdG9yYWdlOjpzaXpl
Rm9yKDApKTsKICAgICBSRUxFQVNFX0FTU0VSVChuZXdCdXR0ZXJmbHkpOwogICAgIAogICAgIG1f
YnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPm1faW5kZXhCaWFzID0gMDsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5z
ZXRWZWN0b3JMZW5ndGgoMCk7Ci0gICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9z
cGFyc2VNYXAuc2V0KGdsb2JhbERhdGEsIHRoaXMsIG1hcCk7CisgICAgbmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuc2V0KHZtLCB0aGlzLCBtYXApOwogICAgIAogICAg
IHJldHVybiBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogfQogCi12b2lkIEpTT2JqZWN0
OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQor
dm9pZCBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKFZNJiB2bSkKIHsKICAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQUxMX0JM
QU5LX0lOREVYSU5HX1RZUEVTOgpAQCAtNTc5LDEwICs1NzksMTAgQEAgdm9pZCBKU09iamVjdDo6
ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNbwogICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6CiAgICAgICAgIC8vIE5PVEU6IHRoaXMgaXMgaG9ycmlibHkgaW5lZmZpY2llbnQs
IGFzIGl0IHdpbGwgcGVyZm9ybSB0d28gY29udmVyc2lvbnMuIFdlIGNvdWxkIG9wdGltaXplCiAg
ICAgICAgIC8vIHRoaXMgY2FzZSBpZiB3ZSBldmVyIGNhcmVkLgotICAgICAgICBlbnRlckRpY3Rp
b25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRh
LCBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KGdsb2JhbERhdGEpKTsKKyAgICAgICAgZW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIGVuc3Vy
ZUFycmF5U3RvcmFnZVNsb3codm0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBTExfQVJS
QVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
V2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0OgpAQCAtNTkwLDIw
ICs1OTAsMjAgQEAgdm9pZCBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNbwogICAg
IH0KIH0KIAotdm9pZCBKU09iamVjdDo6bm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRBY2Nlc3NvcnMo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBKU09iamVjdDo6bm90aWZ5UHJlc2VuY2VP
ZkluZGV4ZWRBY2Nlc3NvcnMoVk0mIHZtKQogewogICAgIGlmIChtYXlJbnRlcmNlcHRJbmRleGVk
QWNjZXNzZXMoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIHNldFN0cnVjdHVyZShnbG9i
YWxEYXRhLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUoKSwgQWRkSW5kZXhlZEFjY2Vzc29ycykpOworICAgIHNldFN0cnVjdHVyZSh2bSwgU3Ry
dWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCBBZGRJbmRleGVk
QWNjZXNzb3JzKSk7CiAgICAgCi0gICAgaWYgKCFnbG9iYWxEYXRhLnByb3RvdHlwZU1hcC5pc1By
b3RvdHlwZSh0aGlzKSkKKyAgICBpZiAoIXZtLnByb3RvdHlwZU1hcC5pc1Byb3RvdHlwZSh0aGlz
KSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGdsb2JhbE9iamVjdCgpLT5oYXZlQUJhZFRp
bWUoZ2xvYmFsRGF0YSk7CisgICAgZ2xvYmFsT2JqZWN0KCktPmhhdmVBQmFkVGltZSh2bSk7CiB9
CiAKLUJ1dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCwgc2l6ZV90IGVsZW1lbnRTaXpl
KQorQnV0dGVyZmx5KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKFZNJiB2
bSwgdW5zaWduZWQgbGVuZ3RoLCBzaXplX3QgZWxlbWVudFNpemUpCiB7CiAgICAgQVNTRVJUKGxl
bmd0aCA8IE1BWF9BUlJBWV9JTkRFWCk7CiAgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCk7CkBAIC02MTIsNTMgKzYxMiw1MyBAQCBCdXR0ZXJmbHkq
IEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsSW5kZXhlCiAgICAgQVNTRVJUKCFpbmRleGluZ1Nob3Vs
ZEJlU3BhcnNlKCkpOwogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0
aCwgQkFTRV9WRUNUT1JfTEVOKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRl
cmZseTo6Y3JlYXRlT3JHcm93QXJyYXlSaWdodChtX2J1dHRlcmZseSwgCi0gICAgICAgIGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFs
c2UsIDAsCisgICAgICAgIHZtLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNh
cGFjaXR5KCksIGZhbHNlLCAwLAogICAgICAgICBlbGVtZW50U2l6ZSAqIHZlY3Rvckxlbmd0aCk7
CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKICAgICBuZXdCdXR0
ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwogICAgIHJldHVybiBuZXdCdXR0
ZXJmbHk7CiB9CiAKLUJ1dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxVbmRlY2lkZWQo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgpCitCdXR0ZXJmbHkqIEpT
T2JqZWN0OjpjcmVhdGVJbml0aWFsVW5kZWNpZGVkKFZNJiB2bSwgdW5zaWduZWQgbGVuZ3RoKQog
ewotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9y
YWdlKGdsb2JhbERhdGEsIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihn
bG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVVbmRlY2lkZWQpOwotICAgIHNldEJ1dHRl
cmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CisgICAgQnV0dGVy
Zmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uodm0sIGxlbmd0
aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUg
PSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKCksIEFsbG9j
YXRlVW5kZWNpZGVkKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSwgbmV3U3Ry
dWN0dXJlKTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5OwogfQogCi1Db250aWd1b3VzSlNWYWx1
ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbnQzMihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IHVuc2lnbmVkIGxlbmd0aCkKK0NvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRlSW5p
dGlhbEludDMyKFZNJiB2bSwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIEJ1dHRlcmZseSogbmV3
QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKGdsb2JhbERhdGEsIGxlbmd0
aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUg
PSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUo
KSwgQWxsb2NhdGVJbnQzMik7Ci0gICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRl
cmZseSwgbmV3U3RydWN0dXJlKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0
ZUluaXRpYWxJbmRleGVkU3RvcmFnZSh2bSwgbGVuZ3RoLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KTsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlU
cmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVJbnQzMik7CisgICAgc2V0QnV0dGVy
Zmx5KHZtLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld0J1dHRl
cmZseS0+Y29udGlndW91c0ludDMyKCk7CiB9CiAKLUNvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0
OjpjcmVhdGVJbml0aWFsRG91YmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQg
bGVuZ3RoKQorQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxEb3VibGUo
Vk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkg
PSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2UoZ2xvYmFsRGF0YSwgbGVuZ3RoLCBzaXplb2Yo
ZG91YmxlKSk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5k
ZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCwgc2l6ZW9mKGRvdWJsZSkpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCiAgICAgICAgIG5ld0J1
dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUU5hTjsKLSAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEs
IHN0cnVjdHVyZSgpLCBBbGxvY2F0ZURvdWJsZSk7Ci0gICAgc2V0QnV0dGVyZmx5KGdsb2JhbERh
dGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwg
QWxsb2NhdGVEb3VibGUpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5LCBuZXdT
dHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKTsK
IH0KIAotQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQ29udGlndW91
cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK0NvbnRpZ3VvdXNK
U1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoVk0mIHZtLCB1bnNpZ25l
ZCBsZW5ndGgpCiB7Ci0gICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFs
SW5kZXhlZFN0b3JhZ2UoZ2xvYmFsRGF0YSwgbGVuZ3RoLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KTsKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlU
cmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZUNvbnRpZ3VvdXMpOwot
ICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7
CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3Jh
Z2Uodm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0
dXJlKCksIEFsbG9jYXRlQ29udGlndW91cyk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0
ZXJmbHksIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91
cygpOwogfQogCi1BcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxl
bmd0aCkKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZShWTSYgdm0s
IHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQogewogICAgIEluZGV4aW5n
VHlwZSBvbGRUeXBlID0gc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpOwogICAgIEFTU0VSVF9V
TlVTRUQob2xkVHlwZSwgIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKG9sZFR5cGUpKTsKICAgICBCdXR0
ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93QXJyYXlSaWdodCht
X2J1dHRlcmZseSwgCi0gICAgICAgIGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCisgICAgICAgIHZtLCBzdHJ1Y3R1cmUo
KSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAwLAogICAgICAgICBB
cnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQo
bmV3QnV0dGVyZmx5KTsKIApAQCAtNjY4LDQ5ICs2NjgsNDkgQEAgQXJyYXlTdG9yYWdlKiBKU09i
amVjdDo6Y3JlYXRlQXJyYXlTdG9yYQogICAgIHJlc3VsdC0+bV9zcGFyc2VNYXAuY2xlYXIoKTsK
ICAgICByZXN1bHQtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOwogICAgIHJlc3VsdC0+bV9pbmRl
eEJpYXMgPSAwOwotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Q
cm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5z
dWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOwotICAgIHNldEJ1dHRlcmZseShnbG9i
YWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CisgICAgU3RydWN0dXJlKiBuZXdT
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJl
KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOworICAg
IHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLUFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxBcnJh
eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCBCQVNFX1ZFQ1RPUl9MRU4pOworICAgIHJldHVy
biBjcmVhdGVBcnJheVN0b3JhZ2Uodm0sIDAsIEJBU0VfVkVDVE9SX0xFTik7CiB9CiAKLUNvbnRp
Z3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvSW50MzIoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQorQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5k
ZWNpZGVkVG9JbnQzMihWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKLSAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgU3Ry
dWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIEFs
bG9jYXRlSW50MzIpKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVy
dHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVJbnQzMikpOwogICAgIHJldHVy
biBtX2J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKCk7CiB9CiAKLUNvbnRpZ3VvdXNEb3VibGVz
IEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9Eb3VibGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQorQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0RvdWJs
ZShWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUoKS0+aW5kZXhp
bmdUeXBlKCkpKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2J1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCk7IGktLTspCiAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91Ymxl
KClbaV0gPSBRTmFOOwogICAgIAotICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBTdHJ1Y3R1
cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgQWxsb2Nh
dGVEb3VibGUpKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlU
cmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVEb3VibGUpKTsKICAgICByZXR1cm4g
bV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKTsKIH0KIAotQ29udGlndW91c0pTVmFsdWVz
IEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9Db250aWd1b3VzKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSkKK0NvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRv
Q29udGlndW91cyhWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpKTsKLSAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgU3RydWN0
dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIEFsbG9j
YXRlQ29udGlndW91cykpOworICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9w
ZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZUNvbnRpZ3VvdXMpKTsKICAg
ICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKIH0KIAotQXJyYXlTdG9yYWdlKiBK
U09iamVjdDo6Y29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVt
ZW50cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIG5lZWRlZExlbmd0aCkKK0Fy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhv
dXRDb3B5aW5nRWxlbWVudHMoVk0mIHZtLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpCiB7CiAgICAg
dW5zaWduZWQgcHVibGljTGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwogICAg
IHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKTsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eVNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
U2l6ZSgpOwogICAgIAogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpj
cmVhdGVVbmluaXRpYWxpemVkKAotICAgICAgICBnbG9iYWxEYXRhLCAwLCBwcm9wZXJ0eUNhcGFj
aXR5LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmVlZGVkTGVuZ3RoKSk7CisgICAgICAg
IHZtLCAwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmVl
ZGVkTGVuZ3RoKSk7CiAgICAgCiAgICAgbWVtY3B5KAogICAgICAgICBuZXdCdXR0ZXJmbHktPnBy
b3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLApAQCAtNzI3LDI5ICs3MjcsMjkgQEAgQXJy
YXlTdG9yYWdlKiBKU09iamVjdDo6Y29uc3RydWN0Q29udmVydAogICAgIHJldHVybiBuZXdTdG9y
YWdlOwogfQogCi1BcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9BcnJh
eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24g
dHJhbnNpdGlvbiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKQorQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6Y29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdlKFZNJiB2bSwgTm9uUHJvcGVydHlUcmFu
c2l0aW9uIHRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCkKIHsKICAgICBBU1NFUlQo
aGFzVW5kZWNpZGVkKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOwogICAgIAotICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhv
dXRDb3B5aW5nRWxlbWVudHMoZ2xvYmFsRGF0YSwgbmVlZGVkTGVuZ3RoKTsKKyAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29w
eWluZ0VsZW1lbnRzKHZtLCBuZWVkZWRMZW5ndGgpOwogICAgIC8vIE5vIG5lZWQgdG8gY29weSBl
bGVtZW50cy4KICAgICAKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6
bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9u
KTsKLSAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgc3RvcmFnZS0+YnV0dGVyZmx5KCksIG5l
d1N0cnVjdHVyZSk7CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKCksIHRyYW5zaXRpb24pOworICAgIHNl
dEJ1dHRlcmZseSh2bSwgc3RvcmFnZS0+YnV0dGVyZmx5KCksIG5ld1N0cnVjdHVyZSk7CiAgICAg
cmV0dXJuIHN0b3JhZ2U7CiB9CiAKLUFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRVbmRl
Y2lkZWRUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE5vblByb3BlcnR5
VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQorQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydFVu
ZGVjaWRlZFRvQXJyYXlTdG9yYWdlKFZNJiB2bSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5z
aXRpb24pCiB7Ci0gICAgcmV0dXJuIGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZShnbG9i
YWxEYXRhLCB0cmFuc2l0aW9uLCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIHJl
dHVybiBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2Uodm0sIHRyYW5zaXRpb24sIG1fYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CiB9CiAKLUFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNv
bnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitB
cnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UoVk0m
IHZtKQogewotICAgIHJldHVybiBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7Cisg
ICAgcmV0dXJuIGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZSh2bSwgc3RydWN0dXJlKCkt
PnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7CiB9CiAKLUNvbnRpZ3VvdXNEb3Vi
bGVzIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0RvdWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCitDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y29udmVydEludDMyVG9Eb3VibGUoVk0m
IHZtKQogewogICAgIEFTU0VSVChoYXNJbnQzMihzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
KTsKICAgICAKQEAgLTc2NSwyMyArNzY1LDIzIEBAIENvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0
Ojpjb252ZXJ0SW50MzIKICAgICAgICAgKmN1cnJlbnRBc0RvdWJsZSA9IHYuYXNJbnQzMigpOwog
ICAgIH0KICAgICAKLSAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgU3RydWN0dXJlOjpub25Q
cm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIEFsbG9jYXRlRG91Ymxl
KSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlv
bih2bSwgc3RydWN0dXJlKCksIEFsbG9jYXRlRG91YmxlKSk7CiAgICAgcmV0dXJuIG1fYnV0dGVy
Zmx5LT5jb250aWd1b3VzRG91YmxlKCk7CiB9CiAKLUNvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVj
dDo6Y29udmVydEludDMyVG9Db250aWd1b3VzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK0Nv
bnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydEludDMyVG9Db250aWd1b3VzKFZNJiB2
bSkKIHsKICAgICBBU1NFUlQoaGFzSW50MzIoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7
CiAgICAgCi0gICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0cnVjdHVyZTo6bm9uUHJvcGVy
dHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZUNvbnRpZ3VvdXMp
KTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KHZtLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVDb250aWd1b3VzKSk7CiAgICAgcmV0dXJuIG1fYnV0
dGVyZmx5LT5jb250aWd1b3VzKCk7CiB9CiAKLUFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZl
cnRJbnQzMlRvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTm9uUHJvcGVy
dHlUcmFuc2l0aW9uIHRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCkKK0FycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKFZNJiB2bSwgTm9uUHJv
cGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCkKIHsKICAg
ICBBU1NFUlQoaGFzSW50MzIoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgCi0g
ICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9y
YWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyhnbG9iYWxEYXRhLCBuZWVkZWRMZW5ndGgpOworICAg
IEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFn
ZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIG5lZWRlZExlbmd0aCk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpLS07KSB7CiAgICAgICAgIEpT
VmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAgICAgIGlm
ICghdikKQEAgLTc5MCwyMyArNzkwLDIzIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZl
cnRJbnQzMlRvQXIKICAgICAgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOwog
ICAgIH0KICAgICAKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9u
UHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsK
LSAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCksIG5l
d1N0cnVjdHVyZSk7CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKCksIHRyYW5zaXRpb24pOworICAgIHNl
dEJ1dHRlcmZseSh2bSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCksIG5ld1N0cnVjdHVyZSk7CiAg
ICAgcmV0dXJuIG5ld1N0b3JhZ2U7CiB9CiAKLUFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZl
cnRJbnQzMlRvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTm9uUHJvcGVy
dHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0
SW50MzJUb0FycmF5U3RvcmFnZShWTSYgdm0sIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0
aW9uKQogewotICAgIHJldHVybiBjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRh
LCB0cmFuc2l0aW9uLCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIHJldHVybiBj
b252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZSh2bSwgdHJhbnNpdGlvbiwgbV9idXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpKTsKIH0KIAotQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydEludDMy
VG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorQXJyYXlTdG9yYWdlKiBK
U09iamVjdDo6Y29udmVydEludDMyVG9BcnJheVN0b3JhZ2UoVk0mIHZtKQogewotICAgIHJldHVy
biBjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+c3Vn
Z2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKKyAgICByZXR1cm4gY29udmVydEludDMy
VG9BcnJheVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFu
c2l0aW9uKCkpOwogfQogCiB0ZW1wbGF0ZTxKU09iamVjdDo6RG91YmxlVG9Db250aWd1b3VzTW9k
ZSBtb2RlPgotQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpnZW5lcmljQ29udmVydERvdWJs
ZVRvQ29udGlndW91cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitDb250aWd1b3VzSlNWYWx1
ZXMgSlNPYmplY3Q6OmdlbmVyaWNDb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKFZNJiB2bSkKIHsK
ICAgICBBU1NFUlQoaGFzRG91YmxlKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOwogICAg
IApAQCAtODMxLDI1ICs4MzEsMjUgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpnZW5l
cmljQ29udgogICAgICAgICBjdXJyZW50QXNWYWx1ZS0+c2V0V2l0aG91dFdyaXRlQmFycmllcih2
KTsKICAgICB9CiAgICAgCi0gICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0cnVjdHVyZTo6
bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZUNv
bnRpZ3VvdXMpKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlU
cmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVDb250aWd1b3VzKSk7CiAgICAgcmV0
dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CiB9CiAKLUNvbnRpZ3VvdXNKU1ZhbHVlcyBK
U09iamVjdDo6Y29udmVydERvdWJsZVRvQ29udGlndW91cyhKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCitDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0NvbnRpZ3Vv
dXMoVk0mIHZtKQogewotICAgIHJldHVybiBnZW5lcmljQ29udmVydERvdWJsZVRvQ29udGlndW91
czxFbmNvZGVWYWx1ZUFzRG91YmxlPihnbG9iYWxEYXRhKTsKKyAgICByZXR1cm4gZ2VuZXJpY0Nv
bnZlcnREb3VibGVUb0NvbnRpZ3VvdXM8RW5jb2RlVmFsdWVBc0RvdWJsZT4odm0pOwogfQogCi1D
b250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OnJhZ2VDb252ZXJ0RG91YmxlVG9Db250aWd1b3Vz
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK0NvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6
cmFnZUNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoVk0mIHZtKQogewotICAgIHJldHVybiBnZW5l
cmljQ29udmVydERvdWJsZVRvQ29udGlndW91czxSYWdlQ29udmVydERvdWJsZVRvVmFsdWU+KGds
b2JhbERhdGEpOworICAgIHJldHVybiBnZW5lcmljQ29udmVydERvdWJsZVRvQ29udGlndW91czxS
YWdlQ29udmVydERvdWJsZVRvVmFsdWU+KHZtKTsKIH0KIAotQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6Y29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
Tm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCkK
K0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZShWTSYg
dm0sIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVkZWRMZW5n
dGgpCiB7CiAgICAgQVNTRVJUKGhhc0RvdWJsZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
KTsKICAgICAKLSAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0
ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKGdsb2JhbERhdGEsIG5lZWRlZExl
bmd0aCk7CisgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVk
QXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgbmVlZGVkTGVuZ3RoKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGktLTspIHsK
ICAgICAgICAgZG91YmxlIHZhbHVlID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtp
XTsKICAgICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKQpAQCAtODU4LDI2ICs4NTgsMjYgQEAgQXJy
YXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQQogICAgICAgICBuZXdTdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yKys7CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwg
c3RydWN0dXJlKCksIHRyYW5zaXRpb24pOwotICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBu
ZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSwgbmV3U3RydWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1
cmUoKSwgdHJhbnNpdGlvbik7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdTdG9yYWdlLT5idXR0
ZXJmbHkoKSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3U3RvcmFnZTsKIH0KIAotQXJy
YXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCitBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2UoVk0mIHZtLCBO
b25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKIHsKLSAgICByZXR1cm4gY29udmVydERv
dWJsZVRvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIG1fYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKSk7CisgICAgcmV0dXJuIGNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSh2
bSwgdHJhbnNpdGlvbiwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKIH0KIAotQXJyYXlT
dG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0Fy
cmF5U3RvcmFnZShWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIGNvbnZlcnREb3VibGVUb0FycmF5U3Rv
cmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNp
dGlvbigpKTsKKyAgICByZXR1cm4gY29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKHZtLCBzdHJ1
Y3R1cmUoKS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKIH0KIAotQXJyYXlT
dG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uLCB1bnNp
Z25lZCBuZWVkZWRMZW5ndGgpCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGln
dW91c1RvQXJyYXlTdG9yYWdlKFZNJiB2bSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRp
b24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCkKIHsKICAgICBBU1NFUlQoaGFzQ29udGlndW91cyhz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICAKLSAgICBBcnJheVN0b3JhZ2UqIG5l
d1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0Vs
ZW1lbnRzKGdsb2JhbERhdGEsIG5lZWRlZExlbmd0aCk7CisgICAgQXJyYXlTdG9yYWdlKiBuZXdT
dG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVt
ZW50cyh2bSwgbmVlZGVkTGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2J1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCk7IGktLTspIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gbV9idXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKICAgICAgICAgaWYgKCF2KQpAQCAtODg2LDcxICs4
ODYsNzEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdQogICAgICAg
ICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7CiAgICAgfQogICAgIAotICAgIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24o
Z2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHRyYW5zaXRpb24pOwotICAgIHNldEJ1dHRlcmZseShn
bG9iYWxEYXRhLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSwgbmV3U3RydWN0dXJlKTsKKyAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KHZtLCBzdHJ1Y3R1cmUoKSwgdHJhbnNpdGlvbik7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdT
dG9yYWdlLT5idXR0ZXJmbHkoKSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3U3RvcmFn
ZTsKIH0KIAotQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5
U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0
cmFuc2l0aW9uKQorQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0Fy
cmF5U3RvcmFnZShWTSYgdm0sIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQogewot
ICAgIHJldHVybiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIHRy
YW5zaXRpb24sIG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgcmV0dXJuIGNvbnZl
cnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uodm0sIHRyYW5zaXRpb24sIG1fYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKSk7CiB9CiAKLUFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250
aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShWTSYgdm0pCiB7
Ci0gICAgcmV0dXJuIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlKCktPnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7CisgICAgcmV0
dXJuIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5zdWdn
ZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOwogfQogCi12b2lkIEpTT2JqZWN0Ojpjb252
ZXJ0VW5kZWNpZGVkRm9yVmFsdWUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHZh
bHVlKQordm9pZCBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZEZvclZhbHVlKFZNJiB2bSwgSlNW
YWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUuaXNJbnQzMigpKSB7Ci0gICAgICAgIGNvbnZl
cnRVbmRlY2lkZWRUb0ludDMyKGdsb2JhbERhdGEpOworICAgICAgICBjb252ZXJ0VW5kZWNpZGVk
VG9JbnQzMih2bSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgaWYgKHZhbHVl
LmlzRG91YmxlKCkpIHsKLSAgICAgICAgY29udmVydFVuZGVjaWRlZFRvRG91YmxlKGdsb2JhbERh
dGEpOworICAgICAgICBjb252ZXJ0VW5kZWNpZGVkVG9Eb3VibGUodm0pOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIAotICAgIGNvbnZlcnRVbmRlY2lkZWRUb0NvbnRpZ3VvdXMoZ2xvYmFs
RGF0YSk7CisgICAgY29udmVydFVuZGVjaWRlZFRvQ29udGlndW91cyh2bSk7CiB9CiAKLXZvaWQg
SlNPYmplY3Q6OmNvbnZlcnRJbnQzMkZvclZhbHVlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMkZvclZhbHVlKFZNJiB2
bSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBBU1NFUlQoIXZhbHVlLmlzSW50MzIoKSk7CiAgICAg
CiAgICAgaWYgKHZhbHVlLmlzRG91YmxlKCkpIHsKLSAgICAgICAgY29udmVydEludDMyVG9Eb3Vi
bGUoZ2xvYmFsRGF0YSk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHZtKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBjb252ZXJ0SW50MzJUb0NvbnRpZ3VvdXMoZ2xv
YmFsRGF0YSk7CisgICAgY29udmVydEludDMyVG9Db250aWd1b3VzKHZtKTsKIH0KIAotdm9pZCBK
U09iamVjdDo6c2V0SW5kZXhRdWlja2x5VG9VbmRlY2lkZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNPYmplY3Q6OnNldElu
ZGV4UXVpY2tseVRvVW5kZWNpZGVkKFZNJiB2bSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFs
dWUpCiB7CiAgICAgQVNTRVJUKGluZGV4IDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsK
ICAgICBBU1NFUlQoaW5kZXggPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgIGNv
bnZlcnRVbmRlY2lkZWRGb3JWYWx1ZShnbG9iYWxEYXRhLCB2YWx1ZSk7Ci0gICAgc2V0SW5kZXhR
dWlja2x5KGdsb2JhbERhdGEsIGluZGV4LCB2YWx1ZSk7CisgICAgY29udmVydFVuZGVjaWRlZEZv
clZhbHVlKHZtLCB2YWx1ZSk7CisgICAgc2V0SW5kZXhRdWlja2x5KHZtLCBpbmRleCwgdmFsdWUp
OwogfQogCi12b2lkIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0RvdWJsZU9yQ29udGlndW91c1do
aWxlUGVyZm9ybWluZ1NldEluZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQg
aW5kZXgsIEpTVmFsdWUgdmFsdWUpCit2b2lkIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0RvdWJs
ZU9yQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KFZNJiB2bSwgdW5zaWduZWQgaW5k
ZXgsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc0ludDMyKCkpOwotICAg
IGNvbnZlcnRJbnQzMkZvclZhbHVlKGdsb2JhbERhdGEsIHZhbHVlKTsKLSAgICBzZXRJbmRleFF1
aWNrbHkoZ2xvYmFsRGF0YSwgaW5kZXgsIHZhbHVlKTsKKyAgICBjb252ZXJ0SW50MzJGb3JWYWx1
ZSh2bSwgdmFsdWUpOworICAgIHNldEluZGV4UXVpY2tseSh2bSwgaW5kZXgsIHZhbHVlKTsKIH0K
IAotdm9pZCBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQ29udGlndW91c1doaWxlUGVyZm9ybWlu
Z1NldEluZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5kZXgsIEpTVmFs
dWUgdmFsdWUpCit2b2lkIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzV2hpbGVQ
ZXJmb3JtaW5nU2V0SW5kZXgoVk0mIHZtLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSkK
IHsKICAgICBBU1NFUlQoIXZhbHVlLmlzTnVtYmVyKCkgfHwgdmFsdWUuYXNOdW1iZXIoKSAhPSB2
YWx1ZS5hc051bWJlcigpKTsKLSAgICBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKGdsb2JhbERh
dGEpOwotICAgIHNldEluZGV4UXVpY2tseShnbG9iYWxEYXRhLCBpbmRleCwgdmFsdWUpOworICAg
IGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXModm0pOworICAgIHNldEluZGV4UXVpY2tseSh2bSwg
aW5kZXgsIHZhbHVlKTsKIH0KIAotQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjplbnN1cmVJ
bnQzMlNsb3coSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorQ29udGlndW91c0pTVmFsdWVzIEpT
T2JqZWN0OjplbnN1cmVJbnQzMlNsb3coVk0mIHZtKQogewogICAgIEFTU0VSVChpbmhlcml0cygm
c19pbmZvKSk7CiAgICAgCkBAIC05NTgsMTAgKzk1OCwxMCBAQCBDb250aWd1b3VzSlNWYWx1ZXMg
SlNPYmplY3Q6OmVuc3VyZUludDMyCiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6
CiAgICAgICAgIGlmIChVTkxJS0VMWShpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkgfHwgc3RydWN0
dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpKQogICAgICAgICAgICAgcmV0dXJuIENvbnRp
Z3VvdXNKU1ZhbHVlcygpOwotICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlhbEludDMyKGdsb2Jh
bERhdGEsIDApOworICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlhbEludDMyKHZtLCAwKTsKICAg
ICAgICAgCiAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgotICAgICAgICBy
ZXR1cm4gY29udmVydFVuZGVjaWRlZFRvSW50MzIoZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVy
biBjb252ZXJ0VW5kZWNpZGVkVG9JbnQzMih2bSk7CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0RP
VUJMRV9JTkRFWElOR19UWVBFUzoKICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZ
UEVTOgpAQCAtOTc0LDcgKzk3NCw3IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6ZW5z
dXJlSW50MzIKICAgICB9CiB9CiAKLUNvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0OjplbnN1cmVE
b3VibGVTbG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK0NvbnRpZ3VvdXNEb3VibGVzIEpT
T2JqZWN0OjplbnN1cmVEb3VibGVTbG93KFZNJiB2bSkKIHsKICAgICBBU1NFUlQoaW5oZXJpdHMo
JnNfaW5mbykpOwogICAgIApAQCAtOTgyLDEzICs5ODIsMTMgQEAgQ29udGlndW91c0RvdWJsZXMg
SlNPYmplY3Q6OmVuc3VyZURvdWJsZQogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVT
OgogICAgICAgICBpZiAoVU5MSUtFTFkoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpIHx8IHN0cnVj
dHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKSkKICAgICAgICAgICAgIHJldHVybiBDb250
aWd1b3VzRG91YmxlcygpOwotICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlhbERvdWJsZShnbG9i
YWxEYXRhLCAwKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxEb3VibGUodm0sIDApOwog
ICAgICAgICAKICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAg
IHJldHVybiBjb252ZXJ0VW5kZWNpZGVkVG9Eb3VibGUoZ2xvYmFsRGF0YSk7CisgICAgICAgIHJl
dHVybiBjb252ZXJ0VW5kZWNpZGVkVG9Eb3VibGUodm0pOwogICAgICAgICAKICAgICBjYXNlIEFM
TF9JTlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRJbnQzMlRvRG91
YmxlKGdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4gY29udmVydEludDMyVG9Eb3VibGUodm0p
OwogICAgICAgICAKICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAg
IGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CkBAIC0xMDAwLDcgKzEwMDAs
NyBAQCBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6ZW5zdXJlRG91YmxlCiAgICAgfQogfQog
Ci1Db250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNTbG93KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgRG91YmxlVG9Db250aWd1b3VzTW9kZSBtb2RlKQorQ29udGln
dW91c0pTVmFsdWVzIEpTT2JqZWN0OjplbnN1cmVDb250aWd1b3VzU2xvdyhWTSYgdm0sIERvdWJs
ZVRvQ29udGlndW91c01vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykp
OwogICAgIApAQCAtMTAwOCwxOCArMTAwOCwxOCBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmpl
Y3Q6OmVuc3VyZUNvbnRpCiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAg
ICAgIGlmIChVTkxJS0VMWShpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkgfHwgc3RydWN0dXJlKCkt
Pm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpKQogICAgICAgICAgICAgcmV0dXJuIENvbnRpZ3VvdXNK
U1ZhbHVlcygpOwotICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoZ2xvYmFs
RGF0YSwgMCk7CisgICAgICAgIHJldHVybiBjcmVhdGVJbml0aWFsQ29udGlndW91cyh2bSwgMCk7
CiAgICAgICAgIAogICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKLSAgICAg
ICAgcmV0dXJuIGNvbnZlcnRVbmRlY2lkZWRUb0NvbnRpZ3VvdXMoZ2xvYmFsRGF0YSk7CisgICAg
ICAgIHJldHVybiBjb252ZXJ0VW5kZWNpZGVkVG9Db250aWd1b3VzKHZtKTsKICAgICAgICAgCiAg
ICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIHJldHVybiBjb252ZXJ0
SW50MzJUb0NvbnRpZ3VvdXMoZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBjb252ZXJ0SW50
MzJUb0NvbnRpZ3VvdXModm0pOwogICAgICAgICAKICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJ
TkdfVFlQRVM6CiAgICAgICAgIGlmIChtb2RlID09IFJhZ2VDb252ZXJ0RG91YmxlVG9WYWx1ZSkK
LSAgICAgICAgICAgIHJldHVybiByYWdlQ29udmVydERvdWJsZVRvQ29udGlndW91cyhnbG9iYWxE
YXRhKTsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoZ2xvYmFsRGF0
YSk7CisgICAgICAgICAgICByZXR1cm4gcmFnZUNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXModm0p
OworICAgICAgICByZXR1cm4gY29udmVydERvdWJsZVRvQ29udGlndW91cyh2bSk7CiAgICAgICAg
IAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIHJl
dHVybiBDb250aWd1b3VzSlNWYWx1ZXMoKTsKQEAgLTEwMzAsNDUgKzEwMzAsNDUgQEAgQ29udGln
dW91c0pTVmFsdWVzIEpTT2JqZWN0OjplbnN1cmVDb250aQogICAgIH0KIH0KIAotQ29udGlndW91
c0pTVmFsdWVzIEpTT2JqZWN0OjplbnN1cmVDb250aWd1b3VzU2xvdyhKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCitDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNT
bG93KFZNJiB2bSkKIHsKLSAgICByZXR1cm4gZW5zdXJlQ29udGlndW91c1Nsb3coZ2xvYmFsRGF0
YSwgRW5jb2RlVmFsdWVBc0RvdWJsZSk7CisgICAgcmV0dXJuIGVuc3VyZUNvbnRpZ3VvdXNTbG93
KHZtLCBFbmNvZGVWYWx1ZUFzRG91YmxlKTsKIH0KIAotQ29udGlndW91c0pTVmFsdWVzIEpTT2Jq
ZWN0OjpyYWdlRW5zdXJlQ29udGlndW91c1Nsb3coSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQor
Q29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpyYWdlRW5zdXJlQ29udGlndW91c1Nsb3coVk0m
IHZtKQogewotICAgIHJldHVybiBlbnN1cmVDb250aWd1b3VzU2xvdyhnbG9iYWxEYXRhLCBSYWdl
Q29udmVydERvdWJsZVRvVmFsdWUpOworICAgIHJldHVybiBlbnN1cmVDb250aWd1b3VzU2xvdyh2
bSwgUmFnZUNvbnZlcnREb3VibGVUb1ZhbHVlKTsKIH0KIAotQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6ZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VTbG93KFZNJiB2bSkKIHsKICAg
ICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogICAgIAogICAgIHN3aXRjaCAoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6
CiAgICAgICAgIGlmIChVTkxJS0VMWShpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpKQotICAgICAg
ICAgICAgcmV0dXJuIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUlu
ZGV4aW5nTW9kZShnbG9iYWxEYXRhKTsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxBcnJh
eVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICByZXR1cm4gZW5zdXJlQXJyYXlTdG9y
YWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKHZtKTsKKyAgICAgICAgcmV0
dXJuIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2Uodm0pOwogICAgICAgICAKICAgICBjYXNlIEFM
TF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIEFTU0VSVCghaW5kZXhpbmdTaG91
bGRCZVNwYXJzZSgpKTsKICAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0
SW5kZXhpbmcoKSk7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3Jh
Z2UoZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0
b3JhZ2Uodm0pOwogICAgICAgICAKICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoK
ICAgICAgICAgQVNTRVJUKCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpOwogICAgICAgICBBU1NF
UlQoIXN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKTsKLSAgICAgICAgcmV0dXJu
IGNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4g
Y29udmVydEludDMyVG9BcnJheVN0b3JhZ2Uodm0pOwogICAgICAgICAKICAgICBjYXNlIEFMTF9E
T1VCTEVfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIEFTU0VSVCghaW5kZXhpbmdTaG91bGRCZVNw
YXJzZSgpKTsKICAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhp
bmcoKSk7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2UoZ2xvYmFs
RGF0YSk7CisgICAgICAgIHJldHVybiBjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2Uodm0pOwog
ICAgICAgICAKICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAg
ICBBU1NFUlQoIWluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSk7CiAgICAgICAgIEFTU0VSVCghc3Ry
dWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpOwotICAgICAgICByZXR1cm4gY29udmVy
dENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIGNv
bnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uodm0pOwogICAgICAgICAKICAgICBkZWZhdWx0
OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTA3NiwzMCArMTA3
NiwzMCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhCiAgICAgfQog
fQogCi1BcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRF
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorQXJy
YXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlKFZNJiB2bSkKIHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOiB7Ci0g
ICAgICAgIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKTsKLSAgICAgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChnbG9iYWxEYXRh
KTsKKyAgICAgICAgY3JlYXRlQXJyYXlTdG9yYWdlKHZtLCAwLCAwKTsKKyAgICAgICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcCogbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcCh2bSk7CiAgICAgICAg
IG1hcC0+c2V0U3BhcnNlTW9kZSgpOwogICAgICAgICByZXR1cm4gYXJyYXlTdG9yYWdlKCk7CiAg
ICAgfQogICAgICAgICAKICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6Ci0g
ICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdl
QWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2Uo
Z2xvYmFsRGF0YSkpOworICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
V2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5
U3RvcmFnZSh2bSkpOwogICAgICAgICAKICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBF
UzoKLSAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0
b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIGNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdl
KGdsb2JhbERhdGEpKTsKKyAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBjb252ZXJ0SW50MzJUb0FycmF5U3Rv
cmFnZSh2bSkpOwogICAgICAgICAKICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6
Ci0gICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9y
YWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2Uo
Z2xvYmFsRGF0YSkpOworICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
V2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIGNvbnZlcnREb3VibGVUb0FycmF5U3Rv
cmFnZSh2bSkpOwogICAgICAgICAKICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZ
UEVTOgotICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5
U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5
U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRl
eGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgY29udmVydENvbnRpZ3Vv
dXNUb0FycmF5U3RvcmFnZSh2bSkpOwogICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9S
QUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4
aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCkpOwogICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBDUkFTSCgpOwpA
QCAtMTEwNywyOSArMTEwNywyOSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJh
eVN0b3JhCiAgICAgfQogfQogCi12b2lkIEpTT2JqZWN0Ojpzd2l0Y2hUb1Nsb3dQdXRBcnJheVN0
b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBKU09iamVjdDo6c3dpdGNoVG9T
bG93UHV0QXJyYXlTdG9yYWdlKFZNJiB2bSkKIHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoK
LSAgICAgICAgY29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIEFsbG9j
YXRlU2xvd1B1dEFycmF5U3RvcmFnZSk7CisgICAgICAgIGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5
U3RvcmFnZSh2bSwgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgotICAgICAgICBj
b252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBBbGxvY2F0ZVNsb3dQdXRBcnJh
eVN0b3JhZ2UpOworICAgICAgICBjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZSh2bSwgQWxsb2Nh
dGVTbG93UHV0QXJyYXlTdG9yYWdlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNh
c2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgY29udmVydERvdWJsZVRvQXJy
YXlTdG9yYWdlKGdsb2JhbERhdGEsIEFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZSk7CisgICAg
ICAgIGNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSh2bSwgQWxsb2NhdGVTbG93UHV0QXJyYXlT
dG9yYWdlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0NPTlRJR1VP
VVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3Jh
Z2UoZ2xvYmFsRGF0YSwgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlKTsKKyAgICAgICAgY29u
dmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZSh2bSwgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9y
YWdlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24o
Z2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSk7Ci0g
ICAgICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBuZXdTdHJ1Y3R1cmUpOworICAgICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KHZtLCBzdHJ1Y3R1cmUoKSwgU3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKTsKKyAgICAgICAg
c2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIApAQCAtMTE0MywyMyArMTE0MywyMyBAQCB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RW
aXJ0dWFsKEpTT2JqZWN0CiB7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc0dldHRlclNldHRlcigpICYm
ICEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7Ci0g
ICAgb2JqZWN0LT5wdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KGV4
ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcywgc2xvdCwg
Z2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdEludGVybmFs
PFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4oZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgYXR0cmlidXRlcywgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKIH0KIAotdm9p
ZCBKU09iamVjdDo6c2V0UHJvdG90eXBlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1
ZSBwcm90b3R5cGUpCit2b2lkIEpTT2JqZWN0OjpzZXRQcm90b3R5cGUoVk0mIHZtLCBKU1ZhbHVl
IHByb3RvdHlwZSkKIHsKICAgICBBU1NFUlQocHJvdG90eXBlKTsKICAgICBpZiAocHJvdG90eXBl
LmlzT2JqZWN0KCkpCi0gICAgICAgIGdsb2JhbERhdGEucHJvdG90eXBlTWFwLmFkZFByb3RvdHlw
ZShhc09iamVjdChwcm90b3R5cGUpKTsKKyAgICAgICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3Rv
dHlwZShhc09iamVjdChwcm90b3R5cGUpKTsKICAgICAKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSA9IFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUoKSwgcHJvdG90eXBlKTsKLSAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgbmV3
U3RydWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6Y2hh
bmdlUHJvdG90eXBlVHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKCksIHByb3RvdHlwZSk7CisgICAg
c2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIAogICAgIGlmICghbmV3U3RydWN0
dXJlLT5hbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoZ2xvYmFsRGF0YS5wcm90b3R5cGVNYXAuaXNQcm90
b3R5cGUodGhpcykpIHsKLSAgICAgICAgbmV3U3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKS0+aGF2
ZUFCYWRUaW1lKGdsb2JhbERhdGEpOworICAgIGlmICh2bS5wcm90b3R5cGVNYXAuaXNQcm90b3R5
cGUodGhpcykpIHsKKyAgICAgICAgbmV3U3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKS0+aGF2ZUFC
YWRUaW1lKHZtKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTExNjksMTAgKzEx
NjksMTAgQEAgdm9pZCBKU09iamVjdDo6c2V0UHJvdG90eXBlKEpTR2xvYmFsRGF0YQogICAgIGlm
IChzaG91bGRVc2VTbG93UHV0KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpCiAgICAgICAg
IHJldHVybjsKICAgICAKLSAgICBzd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0
YSk7CisgICAgc3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKHZtKTsKIH0KIAotYm9vbCBKU09i
amVjdDo6c2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlY2soSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU1ZhbHVlIHByb3RvdHlwZSkKK2Jvb2wgSlNPYmplY3Q6OnNldFByb3RvdHlwZVdpdGhDeWNs
ZUNoZWNrKFZNJiB2bSwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CiAgICAgSlNWYWx1ZSBjaGVja0Zv
ciA9IHRoaXM7CiAgICAgaWYgKHRoaXMtPmlzR2xvYmFsT2JqZWN0KCkpCkBAIC0xMTg0LDcgKzEx
ODQsNyBAQCBib29sIEpTT2JqZWN0OjpzZXRQcm90b3R5cGVXaXRoQ3ljbGVDaGVjCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG5leHRQcm90b3R5cGUgPSBhc09iamVjdChuZXh0
UHJvdG90eXBlKS0+cHJvdG90eXBlKCk7CiAgICAgfQotICAgIHNldFByb3RvdHlwZShnbG9iYWxE
YXRhLCBwcm90b3R5cGUpOworICAgIHNldFByb3RvdHlwZSh2bSwgcHJvdG90eXBlKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTIwNCwyMSArMTIwNCwyMSBAQCB2b2lkIEpTT2JqZWN0Ojpw
dXREaXJlY3RBY2Nlc3NvcihFeGVjU3RhCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwotICAgIHB1dERpcmVj
dEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4oZ2xvYmFsRGF0YSwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgYXR0cmlidXRlcywgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsK
KyAgICBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZtLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1
ZSkpOwogCiAgICAgLy8gcHV0RGlyZWN0IHdpbGwgY2hhbmdlIG91ciBTdHJ1Y3R1cmUgaWYgd2Ug
YWRkIGEgbmV3IHByb3BlcnR5LiBGb3IKICAgICAvLyBnZXR0ZXJzIGFuZCBzZXR0ZXJzLCB0aG91
Z2gsIHdlIGFsc28gbmVlZCB0byBjaGFuZ2Ugb3VyIFN0cnVjdHVyZQogICAgIC8vIGlmIHdlIG92
ZXJyaWRlIGFuIGV4aXN0aW5nIG5vbi1nZXR0ZXIgb3Igbm9uLXNldHRlci4KICAgICBpZiAoc2xv
dC50eXBlKCkgIT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkKLSAgICAgICAgc2V0U3Ry
dWN0dXJlKGdsb2JhbERhdGEsIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihn
bG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKSk7CisgICAg
ICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9u
KHZtLCBzdHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKSk7CiAKICAgICBpZiAo
YXR0cmlidXRlcyAmIFJlYWRPbmx5KQogICAgICAgICBzdHJ1Y3R1cmUoKS0+c2V0Q29udGFpbnNS
ZWFkT25seVByb3BlcnRpZXMoKTsKIAotICAgIHN0cnVjdHVyZSgpLT5zZXRIYXNHZXR0ZXJTZXR0
ZXJQcm9wZXJ0aWVzKHByb3BlcnR5TmFtZSA9PSBnbG9iYWxEYXRhLnByb3BlcnR5TmFtZXMtPnVu
ZGVyc2NvcmVQcm90byk7CisgICAgc3RydWN0dXJlKCktPnNldEhhc0dldHRlclNldHRlclByb3Bl
cnRpZXMocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90byk7
CiB9CiAKIGJvb2wgSlNPYmplY3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKQEAgLTEyNDcsMTYgKzEyNDcsMTYgQEAgYm9vbCBK
U09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZQogCiAgICAgdW5zaWduZWQgYXR0cmli
dXRlczsKICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7Ci0gICAgaWYgKGlzVmFsaWRPZmZzZXQo
dGhpc09iamVjdC0+c3RydWN0dXJlKCktPmdldChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5
TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSkpKSB7Ci0gICAgICAgIGlmIChhdHRyaWJ1
dGVzICYgRG9udERlbGV0ZSAmJiAhZXhlYy0+Z2xvYmFsRGF0YSgpLmlzSW5EZWZpbmVPd25Qcm9w
ZXJ0eSgpKQorICAgIGlmIChpc1ZhbGlkT2Zmc2V0KHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5n
ZXQoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKSkp
IHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBEb250RGVsZXRlICYmICFleGVjLT52bSgpLmlz
SW5EZWZpbmVPd25Qcm9wZXJ0eSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB0aGlzT2JqZWN0LT5yZW1vdmVEaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5h
bWUpOworICAgICAgICB0aGlzT2JqZWN0LT5yZW1vdmVEaXJlY3QoZXhlYy0+dm0oKSwgcHJvcGVy
dHlOYW1lKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgLy8gTG9vayBpbiB0
aGUgc3RhdGljIGhhc2h0YWJsZSBvZiBwcm9wZXJ0aWVzCiAgICAgY29uc3QgSGFzaEVudHJ5KiBl
bnRyeSA9IHRoaXNPYmplY3QtPmZpbmRQcm9wZXJ0eUhhc2hFbnRyeShleGVjLCBwcm9wZXJ0eU5h
bWUpOwotICAgIGlmIChlbnRyeSAmJiBlbnRyeS0+YXR0cmlidXRlcygpICYgRG9udERlbGV0ZSAm
JiAhZXhlYy0+Z2xvYmFsRGF0YSgpLmlzSW5EZWZpbmVPd25Qcm9wZXJ0eSgpKQorICAgIGlmIChl
bnRyeSAmJiBlbnRyeS0+YXR0cmlidXRlcygpICYgRG9udERlbGV0ZSAmJiAhZXhlYy0+dm0oKS5p
c0luRGVmaW5lT3duUHJvcGVydHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyB0aGlzIGJ1
aWx0aW4gcHJvcGVydHkgY2FuJ3QgYmUgZGVsZXRlZAogCiAgICAgLy8gRklYTUU6IFNob3VsZCB0
aGUgY29kZSBoZXJlIGFjdHVhbGx5IGRvIHNvbWUgZGVsZXRpb24/CkBAIC0xNDMwLDcgKzE0MzAs
NyBAQCBib29sIEpTT2JqZWN0Ojpwcm9wZXJ0eUlzRW51bWVyYWJsZShFeGVjCiBib29sIEpTT2Jq
ZWN0OjpnZXRQcm9wZXJ0eVNwZWNpZmljVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU0NlbGwqJiBzcGVjaWZpY1ZhbHVlKSBjb25zdAogewogICAgIHVu
c2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgaWYgKGlzVmFsaWRPZmZzZXQoc3RydWN0dXJlKCktPmdl
dChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNW
YWx1ZSkpKQorICAgIGlmIChpc1ZhbGlkT2Zmc2V0KHN0cnVjdHVyZSgpLT5nZXQoZXhlYy0+dm0o
KSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKSkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgLy8gVGhpcyBjb3VsZCBiZSBhIGZ1bmN0aW9uIHdpdGhpbiB0aGUg
c3RhdGljIHRhYmxlPyAtIHNob3VsZCBwcm9iYWJseQpAQCAtMTUzNSw3ICsxNTM1LDcgQEAgdm9p
ZCBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbQogICAgIGdldENsYXNzUHJvcGVy
dHlOYW1lcyhleGVjLCBvYmplY3QtPmNsYXNzSW5mbygpLCBwcm9wZXJ0eU5hbWVzLCBtb2RlLCBv
YmplY3QtPnN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSk7CiAKICAgICBib29sIGNhbkNhY2hlUHJv
cGVydGllc0Zyb21TdHJ1Y3R1cmUgPSAhcHJvcGVydHlOYW1lcy5zaXplKCk7Ci0gICAgb2JqZWN0
LT5zdHJ1Y3R1cmUoKS0+Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBvYmplY3QtPnN0cnVjdHVyZSgpLT5n
ZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKIAogICAgIGlmIChjYW5DYWNoZVByb3BlcnRpZXNGcm9tU3RydWN0dXJlKQogICAgICAg
ICBwcm9wZXJ0eU5hbWVzLnNldE51bUNhY2hlYWJsZVNsb3RzRm9yT2JqZWN0KG9iamVjdCwgcHJv
cGVydHlOYW1lcy5zaXplKCkpOwpAQCAtMTU2MiwyNyArMTU2MiwyNyBAQCBKU09iamVjdCogSlNP
YmplY3Q6OnRvVGhpc09iamVjdChKU0NlbGwqCiAgICAgcmV0dXJuIGpzQ2FzdDxKU09iamVjdCo+
KGNlbGwpOwogfQogCi12b2lkIEpTT2JqZWN0OjpzZWFsKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKK3ZvaWQgSlNPYmplY3Q6OnNlYWwoVk0mIHZtKQogewotICAgIGlmIChpc1NlYWxlZChnbG9i
YWxEYXRhKSkKKyAgICBpZiAoaXNTZWFsZWQodm0pKQogICAgICAgICByZXR1cm47Ci0gICAgcHJl
dmVudEV4dGVuc2lvbnMoZ2xvYmFsRGF0YSk7Ci0gICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEs
IFN0cnVjdHVyZTo6c2VhbFRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCkpKTsKKyAg
ICBwcmV2ZW50RXh0ZW5zaW9ucyh2bSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6
OnNlYWxUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSkpOwogfQogCi12b2lkIEpTT2JqZWN0Ojpm
cmVlemUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBKU09iamVjdDo6ZnJlZXplKFZN
JiB2bSkKIHsKLSAgICBpZiAoaXNGcm96ZW4oZ2xvYmFsRGF0YSkpCisgICAgaWYgKGlzRnJvemVu
KHZtKSkKICAgICAgICAgcmV0dXJuOwotICAgIHByZXZlbnRFeHRlbnNpb25zKGdsb2JhbERhdGEp
OwotICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBTdHJ1Y3R1cmU6OmZyZWV6ZVRyYW5zaXRp
b24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCkpKTsKKyAgICBwcmV2ZW50RXh0ZW5zaW9ucyh2bSk7
CisgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6OmZyZWV6ZVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSgpKSk7CiB9CiAKLXZvaWQgSlNPYmplY3Q6OnByZXZlbnRFeHRlbnNpb25zKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgSlNPYmplY3Q6OnByZXZlbnRFeHRlbnNpb25zKFZN
JiB2bSkKIHsKLSAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSk7Cisg
ICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKHZtKTsKICAgICBpZiAoaXNFeHRlbnNpYmxl
KCkpCi0gICAgICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBTdHJ1Y3R1cmU6OnByZXZlbnRF
eHRlbnNpb25zVHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSkpOworICAgICAgICBz
ZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKHZt
LCBzdHJ1Y3R1cmUoKSkpOwogfQogCiAvLyBUaGlzIHByZXNlbnRseSB3aWxsIGZsYXR0ZW4gdG8g
YW4gdW5jYWNoYWJsZSBkaWN0aW9uYXJ5OyB0aGlzIGlzIHN1aXRhYmxlCkBAIC0xNTkwLDcgKzE1
OTAsNyBAQCB2b2lkIEpTT2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyhKU0dsb2JhCiB2b2lkIEpT
T2JqZWN0OjpyZWlmeVN0YXRpY0Z1bmN0aW9uc0ZvckRlbGV0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgQVNTRVJUKCFzdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCkpOwotICAgIEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogCiAgICAgLy8gSWYgdGhpcyBvYmplY3QncyBDbGFzc0luZm8gaGFzIG5vIHN0YXRpYyBw
cm9wZXJ0aWVzLCB0aGVuIG5vdGhpbmcgdG8gcmVpZnkhCiAgICAgLy8gV2UgY2FuIHNhZmVseSBz
ZXQgdGhlIGZsYWcgdG8gYXZvaWQgdGhlIGV4cGVuc2l2ZSBjaGVjayBhZ2FpbiBpbiB0aGUgZnV0
dXJlLgpAQCAtMTYwMCwzNyArMTYwMCwzNyBAQCB2b2lkIEpTT2JqZWN0OjpyZWlmeVN0YXRpY0Z1
bmN0aW9uc0ZvckRlCiAgICAgfQogCiAgICAgaWYgKCFzdHJ1Y3R1cmUoKS0+aXNVbmNhY2hlYWJs
ZURpY3Rpb25hcnkoKSkKLSAgICAgICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0cnVjdHVy
ZTo6dG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSgpKSk7CisgICAgICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjp0b1VuY2FjaGVhYmxl
RGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpKSk7CiAKICAgICBmb3IgKGNvbnN0
IENsYXNzSW5mbyogaW5mbyA9IGNsYXNzSW5mbygpOyBpbmZvOyBpbmZvID0gaW5mby0+cGFyZW50
Q2xhc3MpIHsKICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBoYXNoVGFibGUgPSBpbmZvLT5wcm9w
SGFzaFRhYmxlKGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpOwogICAgICAgICBpZiAoIWhh
c2hUYWJsZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xv
dDsKLSAgICAgICAgZm9yIChIYXNoVGFibGU6OkNvbnN0SXRlcmF0b3IgaXRlciA9IGhhc2hUYWJs
ZS0+YmVnaW4oZ2xvYmFsRGF0YSk7IGl0ZXIgIT0gaGFzaFRhYmxlLT5lbmQoZ2xvYmFsRGF0YSk7
ICsraXRlcikgeworICAgICAgICBmb3IgKEhhc2hUYWJsZTo6Q29uc3RJdGVyYXRvciBpdGVyID0g
aGFzaFRhYmxlLT5iZWdpbih2bSk7IGl0ZXIgIT0gaGFzaFRhYmxlLT5lbmQodm0pOyArK2l0ZXIp
IHsKICAgICAgICAgICAgIGlmIChpdGVyLT5hdHRyaWJ1dGVzKCkgJiBGdW5jdGlvbikKLSAgICAg
ICAgICAgICAgICBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChnbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpLCAqaXRlciwgdGhpcywgSWRlbnRpZmllcigmZ2xvYmFsRGF0YSwgaXRlci0+a2V5KCkp
LCBzbG90KTsKKyAgICAgICAgICAgICAgICBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChnbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpLCAqaXRlciwgdGhpcywgSWRlbnRpZmllcigmdm0sIGl0ZXIt
PmtleSgpKSwgc2xvdCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBzdHJ1Y3R1cmUoKS0+c2V0
U3RhdGljRnVuY3Rpb25zUmVpZmllZCgpOwogfQogCi1ib29sIEpTT2JqZWN0OjpyZW1vdmVEaXJl
Y3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQor
Ym9vbCBKU09iamVjdDo6cmVtb3ZlRGlyZWN0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkKIHsKLSAgICBpZiAoIWlzVmFsaWRPZmZzZXQoc3RydWN0dXJlKCktPmdldChnbG9iYWxE
YXRhLCBwcm9wZXJ0eU5hbWUpKSkKKyAgICBpZiAoIWlzVmFsaWRPZmZzZXQoc3RydWN0dXJlKCkt
PmdldCh2bSwgcHJvcGVydHlOYW1lKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICBpZiAoc3RydWN0dXJlKCktPmlzVW5jYWNoZWFibGVE
aWN0aW9uYXJ5KCkpIHsKLSAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlKCktPnJlbW92ZVByb3Bl
cnR5V2l0aG91dFRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAg
b2Zmc2V0ID0gc3RydWN0dXJlKCktPnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0s
IHByb3BlcnR5TmFtZSk7CiAgICAgICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcHV0RGlyZWN0VW5kZWZpbmVkKG9mZnNl
dCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHNldFN0cnVjdHVyZShnbG9i
YWxEYXRhLCBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBvZmZzZXQpKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0s
IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwgcHJv
cGVydHlOYW1lLCBvZmZzZXQpKTsKICAgICBpZiAob2Zmc2V0ID09IGludmFsaWRPZmZzZXQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBwdXREaXJlY3RVbmRlZmluZWQob2Zmc2V0KTsKQEAg
LTE2NTIsOSArMTY1Miw5IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEluZGV4ZWREZXNjcmlwdG9yKEV4
ZWMKIHsKICAgICBpZiAoZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKICAgICAgICAg
aWYgKGRlc2NyaXB0b3IudmFsdWUoKSkKLSAgICAgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIGRlc2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAgICAgICBl
bnRyeUluTWFwLT5zZXQoZXhlYy0+dm0oKSwgdGhpcywgZGVzY3JpcHRvci52YWx1ZSgpKTsKICAg
ICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQotICAg
ICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywganNVbmRl
ZmluZWQoKSk7CisgICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+dm0oKSwgdGhpcywg
anNVbmRlZmluZWQoKSk7CiAgICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlw
dG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5BY2Nlc3Nv
cjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE2NzMsMTEgKzE2NzMsMTEgQEAgdm9pZCBK
U09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0b3IoRXhlYwogCiAgICAgICAgIEdldHRlclNldHRl
ciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKICAgICAgICAgaWYgKGdl
dHRlcikKLSAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBnZXR0ZXIpOworICAgICAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihleGVjLT52bSgpLCBn
ZXR0ZXIpOwogICAgICAgICBpZiAoc2V0dGVyKQotICAgICAgICAgICAgYWNjZXNzb3ItPnNldFNl
dHRlcihleGVjLT5nbG9iYWxEYXRhKCksIHNldHRlcik7CisgICAgICAgICAgICBhY2Nlc3Nvci0+
c2V0U2V0dGVyKGV4ZWMtPnZtKCksIHNldHRlcik7CiAKLSAgICAgICAgZW50cnlJbk1hcC0+c2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYWNjZXNzb3IpOworICAgICAgICBlbnRyeUluTWFw
LT5zZXQoZXhlYy0+dm0oKSwgdGhpcywgYWNjZXNzb3IpOwogICAgICAgICBlbnRyeUluTWFwLT5h
dHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVz
Y3JpcHRvcikgJiB+UmVhZE9ubHk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNzAxLDEx
ICsxNzAxLDExIEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSgKICAg
ICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwgZGVzY3JpcHRvci52
YWx1ZSgpLCAwLCB0aHJvd0V4Y2VwdGlvbiA/IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgOiBQ
dXREaXJlY3RJbmRleFNob3VsZE5vdFRocm93KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
KGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0Fu
ZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShleGVjLT52bSgpKTsKICAgICB9CiAKICAgICBp
ZiAoZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpCi0gICAg
ICAgIG5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNjZXNzb3JzKGV4ZWMtPmdsb2JhbERhdGEoKSk7
CisgICAgICAgIG5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNjZXNzb3JzKGV4ZWMtPnZtKCkpOwog
CiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5tX3NwYXJzZU1hcC5nZXQoKTsKICAgICBSRUxFQVNFX0FTU0VSVChtYXApOwpAQCAtMTgw
OCwxMCArMTgwOCwxMCBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHko
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVNwYXJzZUFycmF5VmFsdWVNYXAqIEpTT2JqZWN0Ojph
bGxvY2F0ZVNwYXJzZUluZGV4TWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK1NwYXJzZUFy
cmF5VmFsdWVNYXAqIEpTT2JqZWN0OjphbGxvY2F0ZVNwYXJzZUluZGV4TWFwKFZNJiB2bSkKIHsK
LSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiByZXN1bHQgPSBTcGFyc2VBcnJheVZhbHVlTWFwOjpj
cmVhdGUoZ2xvYmFsRGF0YSk7Ci0gICAgYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLnNldChn
bG9iYWxEYXRhLCB0aGlzLCByZXN1bHQpOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIHJlc3Vs
dCA9IFNwYXJzZUFycmF5VmFsdWVNYXA6OmNyZWF0ZSh2bSk7CisgICAgYXJyYXlTdG9yYWdlKCkt
Pm1fc3BhcnNlTWFwLnNldCh2bSwgdGhpcywgcmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCkBAIC0xODY1LDIxICsxODY1LDIxIEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlv
bmRWZWN0b3JMZW4KICAgICAvLyBvciBlcXVhbCB0byB0aGUgdmVjdG9yIGxlbmd0aC4KICAgICBB
U1NFUlQoaSA+PSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgIAotICAgIEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIAogICAgIGlmIChpID49IE1BWF9BUlJBWV9JTkRFWCAtIDEKICAgICAg
ICAgfHwgKGkgPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWAogICAgICAgICAgICAgJiYgIWlzRGVu
c2VFbm91Z2hGb3JWZWN0b3IoaSwgY291bnRFbGVtZW50czxpbmRleGluZ1NoYXBlPihtX2J1dHRl
cmZseSkpKSkgewogICAgICAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOwotICAgICAg
ICBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KGdsb2JhbERhdGEpOwotICAgICAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworICAg
ICAgICBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KHZtKTsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1
ZU1hcCogbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcCh2bSk7CiAgICAgICAgIG1hcC0+cHV0
RW50cnkoZXhlYywgdGhpcywgaSwgdmFsdWUsIGZhbHNlKTsKICAgICAgICAgQVNTRVJUKGkgPj0g
YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpKTsKICAgICAgICAgYXJyYXlTdG9yYWdlKCktPnNldExl
bmd0aChpICsgMSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBlbnN1cmVMZW5ndGgo
Z2xvYmFsRGF0YSwgaSArIDEpOworICAgIGVuc3VyZUxlbmd0aCh2bSwgaSArIDEpOwogCiAgICAg
UkVMRUFTRV9BU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgc3dp
dGNoIChpbmRleGluZ1NoYXBlKSB7CkBAIC0xODk3LDcgKzE4OTcsNyBAQCB2b2lkIEpTT2JqZWN0
OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENv
bnRpZ3VvdXNTaGFwZToKLSAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91
cygpW2ldLnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAg
ICAgZGVmYXVsdDoKQEAgLTE5MDcsNyArMTkwNyw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5k
ZXhCZXlvbmRWZWN0b3JMZW4KIAogdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7Ci0g
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAKICAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGlu
ZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCiAgICAgQVNTRVJUKGkg
PD0gTUFYX0FSUkFZX0lOREVYKTsKQEAgLTE5MjUsMTUgKzE5MjUsMTUgQEAgdm9pZCBKU09iamVj
dDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVu
Z3RoKGkgKyAxKTsKIAogICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRvIHN0
aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9yLgot
ICAgICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBp
ICsgMSkpKSB7CisgICAgICAgIGlmIChMSUtFTFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwg
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKHZt
LCBpICsgMSkpKSB7CiAgICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ug
c2luY2UgaXQgaGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZl
Y3Rvci4KICAgICAgICAgICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgICAg
IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAg
ICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICAg
ICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2Ug
YSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYg
YWRkIHRoZSB2YWx1ZS4KLSAgICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChleGVj
LT5nbG9iYWxEYXRhKCkpOworICAgICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGV4
ZWMtPnZtKCkpOwogICAgICAgICBtYXAtPnB1dEVudHJ5KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBz
aG91bGRUaHJvdyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xOTU0LDcgKzE5NTQsNyBA
QCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgLy8gV2UgYXJl
IGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBi
ZSBkb2luZyBzby4KICAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFw
IGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBp
ZiBhbGxvY2F0aW9uIGZhaWxzLgogICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7Ci0gICAgaWYgKG1hcC0+c3Bh
cnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5B
cnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3Ro
KSkgeworICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3Rv
cihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVj
LT52bSgpLCBsZW5ndGgpKSB7CiAgICAgICAgIG1hcC0+cHV0RW50cnkoZXhlYywgdGhpcywgaSwg
dmFsdWUsIHNob3VsZFRocm93KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE5NjcsMTkg
KzE5NjcsMTkgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAg
ICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+a2V5XS5zZXQoZ2xvYmFs
RGF0YSwgdGhpcywgaXQtPnZhbHVlLmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgICAgIHZlY3Rv
cltpdC0+a2V5XS5zZXQodm0sIHRoaXMsIGl0LT52YWx1ZS5nZXROb25TcGFyc2VNb2RlKCkpOwog
ICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOwogCiAgICAgLy8gU3RvcmUgdGhlIG5ldyBw
cm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1
ZVNsb3QgPSB2ZWN0b3JbaV07CiAgICAgaWYgKCF2YWx1ZVNsb3QpCiAgICAgICAgICsrc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHZhbHVlKTsKKyAgICB2YWx1ZVNsb3Quc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiB9CiAKIHZv
aWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogewotICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogCiAgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0
aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgogICAgIEFTU0VSVChpIDw9IE1B
WF9BUlJBWV9JTkRFWCk7CkBAIC0xOTg5LDIyICsxOTg5LDIyIEBAIHZvaWQgSlNPYmplY3Q6OnB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4KICAgICAgICAgaWYgKGluZGV4aW5nU2hvdWxkQmVTcGFy
c2UoKSkgewogICAgICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJh
eVN0b3JhZ2UoCiAgICAgICAgICAgICAgICAgZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LAot
ICAgICAgICAgICAgICAgIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFy
eUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7CisgICAgICAgICAgICAgICAgZW5zdXJlQXJyYXlT
dG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKHZtKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAoaSA+PSBNSU5fU1BBUlNFX0FSUkFZ
X0lOREVYKSB7CiAgICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFy
cmF5U3RvcmFnZSgKLSAgICAgICAgICAgICAgICBleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cs
IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKSk7CisgICAgICAgICAgICAgICAg
ZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBjcmVhdGVBcnJheVN0b3JhZ2Uodm0sIDAsIDAp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUo
KS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSkgewotICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIGkgKyAxLCBnZXROZXdWZWN0
b3JMZW5ndGgoMCwgMCwgaSArIDEpKTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ld
LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2Uodm0sIGkgKyAxLCBnZXROZXdWZWN0b3JMZW5n
dGgoMCwgMCwgaSArIDEpKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldCh2
bSwgdGhpcywgdmFsdWUpOwogICAgICAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
cisrOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICBjcmVhdGVJbml0aWFsQ29udGlndW91cyhnbG9iYWxEYXRhLCBpICsgMSlbaV0uc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXModm0s
IGkgKyAxKVtpXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgICAgICAKQEAgLTIwNDksNyArMjA0OSw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW4KIAogYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNW
YWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlIG1vZGUs
IEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEg
PSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAKICAg
ICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0
aGUgY3VycmVudCB2ZWN0b3IuCiAgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpKTsKQEAgLTIwNzIsMTUgKzIwNzIsMTUgQEAgYm9vbCBKU09iamVj
dDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0bwogICAgICAgICBpZiAoTElLRUxZKAogICAgICAg
ICAgICAgICAgICFhdHRyaWJ1dGVzCiAgICAgICAgICAgICAgICAgJiYgKGlzRGVuc2VFbm91Z2hG
b3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpCi0gICAgICAgICAgICAg
ICAgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgeworICAgICAg
ICAgICAgICAgICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKHZtLCBpICsgMSkpKSB7CiAgICAgICAg
ICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ugc2luY2UgaXQgaGFzIGxpa2VseSBi
ZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZlY3Rvci4KICAgICAgICAgICAgIHN0
b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ld
LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3Zl
Y3RvcltpXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICAgICAgICAgICsrc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcjsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAg
ICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xk
IHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgot
ICAgICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7
CisgICAgICAgIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZXhlYy0+dm0oKSk7CiAgICAg
ICAgIHJldHVybiBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgYXR0cmlidXRl
cywgbW9kZSk7CiAgICAgfQogCkBAIC0yMTAxLDcgKzIxMDEsNyBAQCBib29sIEpTT2JqZWN0Ojpw
dXREaXJlY3RJbmRleEJleW9uZFZlY3RvCiAgICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBh
IG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2luZyBzby4KICAgICAv
LyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMg
c2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxz
LgogICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yICsgbWFwLT5zaXplKCk7Ci0gICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8IGF0dHJp
YnV0ZXMgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5
KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKQor
ICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCBhdHRyaWJ1dGVzIHx8ICFpc0RlbnNlRW5vdWdo
Rm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVu
Z3RoKGV4ZWMtPnZtKCksIGxlbmd0aCkpCiAgICAgICAgIHJldHVybiBtYXAtPnB1dERpcmVjdChl
eGVjLCB0aGlzLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSk7CiAKICAgICAvLyBSZXJlYWQg
bV9zdG9yYWdlIGFmdGVyIGluY3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJ
blZlY3Rvci4KQEAgLTIxMTIsNTEgKzIxMTIsNTEgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0
SW5kZXhCZXlvbmRWZWN0bwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3Rv
cmFnZS0+bV92ZWN0b3I7CiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbWFwLT5lbmQoKTsKICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3Rv
cltpdC0+a2V5XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnZhbHVlLmdldE5vblNwYXJzZU1v
ZGUoKSk7CisgICAgICAgIHZlY3RvcltpdC0+a2V5XS5zZXQodm0sIHRoaXMsIGl0LT52YWx1ZS5n
ZXROb25TcGFyc2VNb2RlKCkpOwogICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOwogCiAg
ICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCiAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07CiAgICAgaWYgKCF2YWx1ZVNs
b3QpCiAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICB2YWx1ZVNs
b3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICB2YWx1ZVNsb3Quc2V0KHZtLCB0
aGlzLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgSlNPYmplY3Q6OnB1dERp
cmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwg
SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlIG1v
ZGUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKICAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlk
IGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCiAgICAg
QVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKICAgICAKICAgICBpZiAoYXR0cmlidXRlcyAm
IChSZWFkT25seSB8IEFjY2Vzc29yKSkKLSAgICAgICAgbm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRB
Y2Nlc3NvcnMoZ2xvYmFsRGF0YSk7CisgICAgICAgIG5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNj
ZXNzb3JzKHZtKTsKICAgICAKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgewogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGlmIChp
bmRleGluZ1Nob3VsZEJlU3BhcnNlKCkgfHwgYXR0cmlidXRlcykgewogICAgICAgICAgICAgcmV0
dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKICAg
ICAgICAgICAgICAgICBleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwKLSAgICAgICAg
ICAgICAgICBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGlu
Z01vZGUoZ2xvYmFsRGF0YSkpOworICAgICAgICAgICAgICAgIGVuc3VyZUFycmF5U3RvcmFnZUV4
aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSh2bSkpOwogICAgICAgICB9CiAgICAg
ICAgIGlmIChpID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpIHsKICAgICAgICAgICAgIHJldHVy
biBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCi0gICAg
ICAgICAgICAgICAgZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNyZWF0ZUFycmF5
U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKSk7CisgICAgICAgICAgICAgICAgZXhlYywgaSwgdmFs
dWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNyZWF0ZUFycmF5U3RvcmFnZSh2bSwgMCwgMCkpOwogICAg
ICAgICB9CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSkg
ewotICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdl
KGdsb2JhbERhdGEsIGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoMCwgMCwgaSArIDEpKTsKLSAg
ICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1
ZSk7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3Jh
Z2Uodm0sIGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoMCwgMCwgaSArIDEpKTsKKyAgICAgICAg
ICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgICAgICAg
ICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGNyZWF0ZUluaXRpYWxDb250aWd1b3Vz
KGdsb2JhbERhdGEsIGkgKyAxKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAg
ICAgICBjcmVhdGVJbml0aWFsQ29udGlndW91cyh2bSwgaSArIDEpW2ldLnNldCh2bSwgdGhpcywg
dmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
QUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzogewotICAgICAgICBjb252ZXJ0VW5kZWNpZGVk
Rm9yVmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB2YWx1ZSk7CisgICAgICAgIGNvbnZlcnRVbmRl
Y2lkZWRGb3JWYWx1ZShleGVjLT52bSgpLCB2YWx1ZSk7CiAgICAgICAgIC8vIFJlbG9vcC4KICAg
ICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBt
b2RlKTsKICAgICB9CkBAIC0yMTY0LDEwICsyMTY0LDEwIEBAIGJvb2wgSlNPYmplY3Q6OnB1dERp
cmVjdEluZGV4QmV5b25kVmVjdG8KICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzog
ewogICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChSZWFkT25seSB8IEFjY2Vzc29yKSkgewogICAg
ICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5
U3RvcmFnZSgKLSAgICAgICAgICAgICAgICBleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9k
ZSwgY29udmVydEludDMyVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAgICAgICAgICAg
ICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjb252ZXJ0SW50MzJUb0FycmF5
U3RvcmFnZSh2bSkpOwogICAgICAgICB9CiAgICAgICAgIGlmICghdmFsdWUuaXNJbnQzMigpKSB7
Ci0gICAgICAgICAgICBjb252ZXJ0SW50MzJGb3JWYWx1ZShnbG9iYWxEYXRhLCB2YWx1ZSk7Cisg
ICAgICAgICAgICBjb252ZXJ0SW50MzJGb3JWYWx1ZSh2bSwgdmFsdWUpOwogICAgICAgICAgICAg
cmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIGksIHZhbHVlLCBh
dHRyaWJ1dGVzLCBtb2RlKTsKICAgICAgICAgfQogICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVj
dG9yTGVuZ3RoV2l0aG91dEF0dHJpYnV0ZXM8SW50MzJTaGFwZT4oZXhlYywgaSwgdmFsdWUpOwpA
QCAtMjE3NywxNSArMjE3NywxNSBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9u
ZFZlY3RvCiAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGlm
IChhdHRyaWJ1dGVzICYgKFJlYWRPbmx5IHwgQWNjZXNzb3IpKSB7CiAgICAgICAgICAgICByZXR1
cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAotICAg
ICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjb252ZXJ0RG91
YmxlVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAgICAgICAgICAgICAgIGV4ZWMsIGks
IHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2Uodm0p
KTsKICAgICAgICAgfQogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpIHsKLSAgICAgICAg
ICAgIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBj
b252ZXJ0RG91YmxlVG9Db250aWd1b3VzKHZtKTsKICAgICAgICAgICAgIHJldHVybiBwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9k
ZSk7CiAgICAgICAgIH0KICAgICAgICAgZG91YmxlIHZhbHVlQXNEb3VibGUgPSB2YWx1ZS5hc051
bWJlcigpOwogICAgICAgICBpZiAodmFsdWVBc0RvdWJsZSAhPSB2YWx1ZUFzRG91YmxlKSB7Ci0g
ICAgICAgICAgICBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKGdsb2JhbERhdGEpOworICAgICAg
ICAgICAgY29udmVydERvdWJsZVRvQ29udGlndW91cyh2bSk7CiAgICAgICAgICAgICByZXR1cm4g
cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0
ZXMsIG1vZGUpOwogICAgICAgICB9CiAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGhXaXRob3V0QXR0cmlidXRlczxEb3VibGVTaGFwZT4oZXhlYywgaSwgdmFsdWUpOwpAQCAtMjE5
NSw3ICsyMTk1LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0bwog
ICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgaWYgKGF0
dHJpYnV0ZXMgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpIHsKICAgICAgICAgICAgIHJldHVybiBw
dXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCi0gICAgICAg
ICAgICAgICAgZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNvbnZlcnRDb250aWd1
b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAgICAgICAgICAgICAgIGV4ZWMsIGks
IHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdl
KHZtKSk7CiAgICAgICAgIH0KICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdp
dGhvdXRBdHRyaWJ1dGVzPENvbnRpZ3VvdXNTaGFwZT4oZXhlYywgaSwgdmFsdWUpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTIyMTcsNyArMjIxNyw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dERp
cmVjdE5hdGl2ZUZ1bmN0aW9uKEUKICAgICAKICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9CiAg
ICAgICAgIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9uTGVu
Z3RoLCBuYW1lLCBuYXRpdmVGdW5jdGlvbiwgaW50cmluc2ljKTsKLSAgICBwdXREaXJlY3QoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGZ1bmN0aW9uLCBhdHRyaWJ1dGVzKTsKKyAg
ICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCBmdW5jdGlvbiwgYXR0cmlidXRl
cyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxl
bmd0aCh1bnNpZ25lZCBjdXJyZW50VmVjdG9yTGVuZ3RoLCB1bnNpZ25lZCBjdXJyZW50TGVuZ3Ro
LCB1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKQpAQCAtMjMwNiw3ICsyMzA2LDcgQEAgdW5zaWduZWQg
SlNPYmplY3Q6OmNvdW50RWxlbWVudHMoKQogICAgIH0KIH0KIAotYm9vbCBKU09iamVjdDo6aW5j
cmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdM
ZW5ndGgpCitib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgdm0sIHVuc2ln
bmVkIG5ld0xlbmd0aCkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgYXJyYXkg
aW4gYW4gaW50ZXJuYWxseSBpbmNvbnNpc3RlbnQgc3RhdGUsIGJlY2F1c2UgaXQgZG9lcyBub3Qg
bW92ZSBhbnkgdmFsdWVzIGZyb20gc3BhcnNlIHZhbHVlIG1hcAogICAgIC8vIHRvIHRoZSB2ZWN0
b3IuIENhbGxlcnMgaGF2ZSB0byBhY2NvdW50IGZvciB0aGF0LCBiZWNhdXNlIHRoZXkgY2FuIGRv
IGl0IG1vcmUgZWZmaWNpZW50bHkuCkBAIC0yMzI2LDcgKzIzMjYsNyBAQCBib29sIEpTT2JqZWN0
OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsCiAKICAgICAvLyBGYXN0IGNhc2UgLSB0aGVyZSBp
cyBubyBwcmVjYXBhY2l0eS4gSW4gdGhlc2UgY2FzZXMgYSByZWFsbG9jIG1ha2VzIHNlbnNlLgog
ICAgIGlmIChMSUtFTFkoIWluZGV4QmlhcykpIHsKLSAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0
ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+Z3Jvd0FycmF5UmlnaHQoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5l
d1ZlY3Rvckxlbmd0aCkpOworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3Jh
Z2UtPmJ1dHRlcmZseSgpLT5ncm93QXJyYXlSaWdodCh2bSwgc3RydWN0dXJlKCksIHN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVj
dG9yTGVuZ3RoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkpOwogICAg
ICAgICBpZiAoIW5ld0J1dHRlcmZseSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CkBAIC0yMzM3LDcgKzIzMzcsNyBAQCBib29s
IEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsCiAgICAgLy8gUmVtb3ZlIHNvbWUs
IGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0eS4gQXRvbWljIGRlY2F5LCAmIGNhcHBlZCB0
byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgogICAgIHVuc2lnbmVkIG5ld0luZGV4QmlhcyA9
IHN0ZDo6bWluKGluZGV4QmlhcyA+PiAxLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbmV3
VmVjdG9yTGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1
dHRlcmZseSgpLT5yZXNpemVBcnJheSgKLSAgICAgICAgZ2xvYmFsRGF0YSwKKyAgICAgICAgdm0s
CiAgICAgICAgIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCBBcnJheVN0
b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSwKICAgICAgICAgbmV3SW5kZXhCaWFzLCB0cnVl
LCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7CiAgICAgaWYgKCFuZXdC
dXR0ZXJmbHkpCkBAIC0yMzQ5LDcgKzIzNDksNyBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZl
Y3Rvckxlbmd0aChKU0dsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSlNPYmplY3Q6OmVu
c3VyZUxlbmd0aFNsb3coSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgp
Cit2b2lkIEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgdW5zaWduZWQgbGVuZ3Ro
KQogewogICAgIEFTU0VSVChsZW5ndGggPCBNQVhfQVJSQVlfSU5ERVgpOwogICAgIEFTU0VSVCho
YXNDb250aWd1b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgfHwgaGFzSW50MzIoc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB8fCBoYXNEb3VibGUoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSB8fCBoYXNVbmRlY2lkZWQoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7
CkBAIC0yMzYwLDcgKzIzNjAsNyBAQCB2b2lkIEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KEpT
R2xvYmFsCiAgICAgICAgIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwogICAgIHVuc2lnbmVk
IG9sZFZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKICAgICBtX2J1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodCgKLSAgICAgICAgZ2xvYmFsRGF0
YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLAor
ICAgICAgICB2bSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
LCB0cnVlLAogICAgICAgICBvbGRWZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
LAogICAgICAgICBuZXdWZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKICAg
ICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpIHsKQEAgLTIzNzAs
MjEgKzIzNzAsMjEgQEAgdm9pZCBKU09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyhKU0dsb2JhbAog
ICAgIG1fYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKIH0KIAot
QnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCitCdXR0ZXJmbHkqIEpT
T2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShWTSYgdm0sIHNpemVfdCBvbGRTaXplLCBzaXpl
X3QgbmV3U2l6ZSkKIHsKICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogCiAgICAgLy8g
SXQncyBpbXBvcnRhbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVyZSgp
LCBmb3IgdGhlIHByb3BlcnR5CiAgICAgLy8gY2FwYWNpdHksIHNpbmNlIHdlIG1pZ2h0IGhhdmUg
YWxyZWFkeSBtdXRhdGVkIHRoZSBzdHJ1Y3R1cmUgaW4tcGxhY2UuCiAgICAgCi0gICAgcmV0dXJu
IG1fYnV0dGVyZmx5LT5ncm93UHJvcGVydHlTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgp
LCBvbGRTaXplLCBuZXdTaXplKTsKKyAgICByZXR1cm4gbV9idXR0ZXJmbHktPmdyb3dQcm9wZXJ0
eVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLCBvbGRTaXplLCBuZXdTaXplKTsKIH0KIAogYm9vbCBK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yKQogewogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSAwOwogICAgIEpTQ2Vs
bCogY2VsbCA9IDA7Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gb2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+Z2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBj
ZWxsKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmplY3QtPnN0cnVjdHVyZSgpLT5n
ZXQoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBjZWxsKTsKICAgICBpZiAo
aXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CiAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRv
cihvYmplY3QtPmdldERpcmVjdChvZmZzZXQpLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC0yNDY4LDkgKzI0NjgsOSBAQCBzdGF0aWMgYm9vbCBwdXREZXNjcmlwdG9yKEV4
ZWNTdGF0ZSogZXhlCiAgICAgICAgIGlmIChkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3Io
KSAmJiBvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKICAgICAgICAgICAg
IEdldHRlclNldHRlciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKICAg
ICAgICAgICAgIGlmIChvbGREZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSkKLSAgICAgICAgICAg
ICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgb2xkRGVzY3JpcHRv
ci5nZXR0ZXJPYmplY3QoKSk7CisgICAgICAgICAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihl
eGVjLT52bSgpLCBvbGREZXNjcmlwdG9yLmdldHRlck9iamVjdCgpKTsKICAgICAgICAgICAgIGlm
IChvbGREZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSkKLSAgICAgICAgICAgICAgICBhY2Nlc3Nv
ci0+c2V0U2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmpl
Y3QoKSk7CisgICAgICAgICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVjLT52bSgpLCBv
bGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgpKTsKICAgICAgICAgICAgIHRhcmdldC0+cHV0RGly
ZWN0QWNjZXNzb3IoZXhlYywgcHJvcGVydHlOYW1lLCBhY2Nlc3NvciwgYXR0cmlidXRlcyB8IEFj
Y2Vzc29yKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0yNDc5LDcg
KzI0NzksNyBAQCBzdGF0aWMgYm9vbCBwdXREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlCiAgICAg
ICAgICAgICBuZXdWYWx1ZSA9IGRlc2NyaXB0b3IudmFsdWUoKTsKICAgICAgICAgZWxzZSBpZiAo
b2xkRGVzY3JpcHRvci52YWx1ZSgpKQogICAgICAgICAgICAgbmV3VmFsdWUgPSBvbGREZXNjcmlw
dG9yLnZhbHVlKCk7Ci0gICAgICAgIHRhcmdldC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgcHJvcGVydHlOYW1lLCBuZXdWYWx1ZSwgYXR0cmlidXRlcyAmIH5BY2Nlc3Nvcik7CisgICAg
ICAgIHRhcmdldC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSwgbmV3VmFsdWUs
IGF0dHJpYnV0ZXMgJiB+QWNjZXNzb3IpOwogICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRP
bmx5KQogICAgICAgICAgICAgdGFyZ2V0LT5zdHJ1Y3R1cmUoKS0+c2V0Q29udGFpbnNSZWFkT25s
eVByb3BlcnRpZXMoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNDg4LDEzICsyNDg4LDEz
IEBAIHN0YXRpYyBib29sIHB1dERlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGUKICAgICBHZXR0ZXJT
ZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7CiAKICAgICBpZiAo
ZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkpCi0gICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBkZXNjcmlwdG9yLmdldHRlck9iamVjdCgpKTsKKyAgICAgICAg
YWNjZXNzb3ItPnNldEdldHRlcihleGVjLT52bSgpLCBkZXNjcmlwdG9yLmdldHRlck9iamVjdCgp
KTsKICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSkKLSAgICAgICAg
YWNjZXNzb3ItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIG9sZERlc2NyaXB0b3IuZ2V0
dGVyT2JqZWN0KCkpOworICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPnZtKCksIG9s
ZERlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCkpOwogICAgIGlmIChkZXNjcmlwdG9yLnNldHRlclBy
ZXNlbnQoKSkKLSAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCks
IGRlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCkpOworICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0dGVy
KGV4ZWMtPnZtKCksIGRlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCkpOwogICAgIGVsc2UgaWYgKG9s
ZERlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpKQotICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0dGVy
KGV4ZWMtPmdsb2JhbERhdGEoKSwgb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKSk7CisgICAg
ICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+dm0oKSwgb2xkRGVzY3JpcHRvci5zZXR0ZXJP
YmplY3QoKSk7CiAKICAgICB0YXJnZXQtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5
TmFtZSwgYWNjZXNzb3IsIGF0dHJpYnV0ZXMgfCBBY2Nlc3Nvcik7CiAgICAgcmV0dXJuIHRydWU7
CkBAIC0yNTA0LDcgKzI1MDQsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RNYXlCZUluZGV4
KEV4ZWNTCiB7CiAgICAgdW5zaWduZWQgYXNJbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7
CiAgICAgaWYgKGFzSW5kZXggPT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAgICAgICBw
dXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAg
ICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOwogICAgIGVsc2UK
ICAgICAgICAgcHV0RGlyZWN0SW5kZXgoZXhlYywgYXNJbmRleCwgdmFsdWUpOwogfQpAQCAtMjUx
MiwxOCArMjUxMiwxOCBAQCB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RNYXlCZUluZGV4KEV4ZWNT
CiBjbGFzcyBEZWZpbmVPd25Qcm9wZXJ0eVNjb3BlIHsKIHB1YmxpYzoKICAgICBEZWZpbmVPd25Q
cm9wZXJ0eVNjb3BlKEV4ZWNTdGF0ZSogZXhlYykKLSAgICAgICAgOiBtX2dsb2JhbERhdGEoZXhl
Yy0+Z2xvYmFsRGF0YSgpKQorICAgICAgICA6IG1fdm0oZXhlYy0+dm0oKSkKICAgICB7Ci0gICAg
ICAgIG1fZ2xvYmFsRGF0YS5zZXRJbkRlZmluZU93blByb3BlcnR5KHRydWUpOworICAgICAgICBt
X3ZtLnNldEluRGVmaW5lT3duUHJvcGVydHkodHJ1ZSk7CiAgICAgfQogCiAgICAgfkRlZmluZU93
blByb3BlcnR5U2NvcGUoKQogICAgIHsKLSAgICAgICAgbV9nbG9iYWxEYXRhLnNldEluRGVmaW5l
T3duUHJvcGVydHkoZmFsc2UpOworICAgICAgICBtX3ZtLnNldEluRGVmaW5lT3duUHJvcGVydHko
ZmFsc2UpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0
YTsKKyAgICBWTSYgbV92bTsKIH07CiAKIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4
UHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCkBAIC0yNjI0
LDE0ICsyNjI0LDE0IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KLSAgICBKU1ZhbHVl
IGFjY2Vzc29yID0gZ2V0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsK
KyAgICBKU1ZhbHVlIGFjY2Vzc29yID0gZ2V0RGlyZWN0KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFt
ZSk7CiAgICAgaWYgKCFhY2Nlc3NvcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEdldHRl
clNldHRlciogZ2V0dGVyU2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNzb3IpOwogICAgIGlm
IChkZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSkKLSAgICAgICAgZ2V0dGVyU2V0dGVyLT5zZXRT
ZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBkZXNjcmlwdG9yLnNldHRlck9iamVjdCgpKTsKKyAg
ICAgICAgZ2V0dGVyU2V0dGVyLT5zZXRTZXR0ZXIoZXhlYy0+dm0oKSwgZGVzY3JpcHRvci5zZXR0
ZXJPYmplY3QoKSk7CiAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpKQotICAgICAg
ICBnZXR0ZXJTZXR0ZXItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIGRlc2NyaXB0b3Iu
Z2V0dGVyT2JqZWN0KCkpOworICAgICAgICBnZXR0ZXJTZXR0ZXItPnNldEdldHRlcihleGVjLT52
bSgpLCBkZXNjcmlwdG9yLmdldHRlck9iamVjdCgpKTsKICAgICBpZiAoY3VycmVudC5hdHRyaWJ1
dGVzRXF1YWwoZGVzY3JpcHRvcikpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIG1ldGhvZFRh
YmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDE0ODY1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJQdXRQcm9wZXJ0eVNsb3QuaCIKIAogI2lu
Y2x1ZGUgIlN0cnVjdHVyZS5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUg
IlZNLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGlu
ZXMuaCIKICNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCkBAIC0xMjEsOCArMTIxLDgg
QEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1l
KGNvbnN0IEpTT2JqZWN0Kik7CiAKICAgICBKU1ZhbHVlIHByb3RvdHlwZSgpIGNvbnN0OwotICAg
IHZvaWQgc2V0UHJvdG90eXBlKEpTR2xvYmFsRGF0YSYsIEpTVmFsdWUgcHJvdG90eXBlKTsKLSAg
ICBib29sIHNldFByb3RvdHlwZVdpdGhDeWNsZUNoZWNrKEpTR2xvYmFsRGF0YSYsIEpTVmFsdWUg
cHJvdG90eXBlKTsKKyAgICB2b2lkIHNldFByb3RvdHlwZShWTSYsIEpTVmFsdWUgcHJvdG90eXBl
KTsKKyAgICBib29sIHNldFByb3RvdHlwZVdpdGhDeWNsZUNoZWNrKFZNJiwgSlNWYWx1ZSBwcm90
b3R5cGUpOwogICAgICAgICAKICAgICBib29sIG1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3Nlcygp
CiAgICAgewpAQCAtMTYyLDcgKzE2Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHB1dEJ5SW5kZXhJ
bmxpbmUoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cpCiAgICAgewogICAgICAgICBpZiAoY2FuU2V0SW5kZXhRdWlj
a2x5KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgIHNldEluZGV4UXVpY2tseShleGVjLT5n
bG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgICAgICAgICAgc2V0SW5kZXhR
dWlja2x5KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIG1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgodGhpcywg
ZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwpAQCAtMTc2LDcgKzE3Niw3
IEBAIHB1YmxpYzoKICAgICBib29sIHB1dERpcmVjdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQ
dXREaXJlY3RJbmRleE1vZGUgbW9kZSkKICAgICB7CiAgICAgICAgIGlmICghYXR0cmlidXRlcyAm
JiBjYW5TZXRJbmRleFF1aWNrbHlGb3JQdXREaXJlY3QocHJvcGVydHlOYW1lKSkgewotICAgICAg
ICAgICAgc2V0SW5kZXhRdWlja2x5KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2
YWx1ZSk7CisgICAgICAgICAgICBzZXRJbmRleFF1aWNrbHkoZXhlYy0+dm0oKSwgcHJvcGVydHlO
YW1lLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSk7CkBAIC0zMTYsMjAgKzMxNiwyMCBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgICAgIAotICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQorICAgIHZv
aWQgc2V0SW5kZXhRdWlja2x5KFZNJiB2bSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQogICAgIHsK
ICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAg
Y2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgIEFTU0VSVChpIDwg
bV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAgIGlmICghdi5pc0ludDMy
KCkpIHsKLSAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZU9yQ29udGlndW91c1do
aWxlUGVyZm9ybWluZ1NldEluZGV4KGdsb2JhbERhdGEsIGksIHYpOworICAgICAgICAgICAgICAg
IGNvbnZlcnRJbnQzMlRvRG91YmxlT3JDb250aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXgo
dm0sIGksIHYpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBjb250aWd1b3VzIGNhc2UuCiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogewogICAgICAgICAgICAg
QVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICAgICAgbV9i
dXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAg
ICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldCh2bSwgdGhpcywgdik7CiAg
ICAgICAgICAgICBpZiAoaSA+PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCiAgICAgICAg
ICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpICsgMSk7CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTMzNywxMiArMzM3LDEyIEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBTExf
RE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgICAgICBpZiAoIXYuaXNOdW1iZXIoKSkgewot
ICAgICAgICAgICAgICAgIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdT
ZXRJbmRleChnbG9iYWxEYXRhLCBpLCB2KTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0RG91Ymxl
VG9Db250aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXgodm0sIGksIHYpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRvdWJsZSB2YWx1ZSA9
IHYuYXNOdW1iZXIoKTsKICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgewotICAgICAg
ICAgICAgICAgIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRl
eChnbG9iYWxEYXRhLCBpLCB2KTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0RG91YmxlVG9Db250
aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXgodm0sIGksIHYpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1
b3VzRG91YmxlKClbaV0gPSB2YWx1ZTsKQEAgLTM1NCw3ICszNTQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHggPSBzdG9yYWdlLT5tX3Zl
Y3RvcltpXTsKICAgICAgICAgICAgIEpTVmFsdWUgb2xkID0geC5nZXQoKTsKLSAgICAgICAgICAg
IHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgeC5zZXQodm0sIHRoaXMs
IHYpOwogICAgICAgICAgICAgaWYgKCFvbGQpIHsKICAgICAgICAgICAgICAgICArK3N0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3I7CiAgICAgICAgICAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+
bGVuZ3RoKCkpCkBAIC0zNjcsMTggKzM2NywxOCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9
CiAgICAgICAgIAotICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQorICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4KFZN
JiB2bSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQogICAgIHsKICAgICAgICAgc3dpdGNoIChzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lO
REVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICBzZXRJbmRleFF1aWNrbHlUb1VuZGVjaWRlZChn
bG9iYWxEYXRhLCBpLCB2KTsKKyAgICAgICAgICAgIHNldEluZGV4UXVpY2tseVRvVW5kZWNpZGVk
KHZtLCBpLCB2KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
QUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CiAgICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgICAgICBpZiAoIXYuaXNJbnQzMigpKSB7Ci0g
ICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGVPckNvbnRpZ3VvdXNXaGlsZVBlcmZv
cm1pbmdTZXRJbmRleChnbG9iYWxEYXRhLCBpLCB2KTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0
SW50MzJUb0RvdWJsZU9yQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KHZtLCBpLCB2
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8v
IEZhbGwgdGhyb3VnaC4KQEAgLTM4NiwxOSArMzg2LDE5IEBAIHB1YmxpYzoKICAgICAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogewogICAgICAgICAgICAgQVNTRVJUKGkg
PCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwogICAgICAgICAgICAgQVNTRVJUKGkgPCBt
X2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNv
bnRpZ3VvdXMoKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAgICBtX2J1
dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldCh2bSwgdGhpcywgdik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6
IHsKICAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsK
ICAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAg
ICAgICAgICAgIGlmICghdi5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICAgICAgY29udmVydERv
dWJsZVRvQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KGdsb2JhbERhdGEsIGksIHYp
OworICAgICAgICAgICAgICAgIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1p
bmdTZXRJbmRleCh2bSwgaSwgdik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgZG91YmxlIHZhbHVlID0gdi5hc051bWJlcigpOwogICAgICAgICAg
ICAgaWYgKHZhbHVlICE9IHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgY29udmVydERvdWJsZVRv
Q29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KGdsb2JhbERhdGEsIGksIHYpOworICAg
ICAgICAgICAgICAgIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJ
bmRleCh2bSwgaSwgdik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IHZhbHVlOwpA
QCAtNDA4LDcgKzQwOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgICAgIEFTU0VSVChp
IDwgc3RvcmFnZS0+bGVuZ3RoKCkpOwogICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ld
LnNldCh2bSwgdGhpcywgdik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBkZWZhdWx0OgpAQCAtNDUwLDcgKzQ1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0K
ICAgICAgICAgCi0gICAgdm9pZCBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxE
YXRhJik7CisgICAgdm9pZCBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoVk0mKTsKIAogICAg
IC8vIHB1dERpcmVjdCBpcyBlZmZlY3RpdmVseSBhbiB1bmNoZWNrZWQgdmVzaW9uIG9mICdkZWZp
bmVPd25Qcm9wZXJ0eSc6CiAgICAgLy8gIC0gdGhlIHByb3RvdHlwZSBjaGFpbiBpcyBub3QgY29u
c3VsdGVkCkBAIC00NTgsOSArNDU4LDkgQEAgcHVibGljOgogICAgIC8vICAtIGF0dHJpYnV0ZXMg
d2lsbCBiZSByZXNwZWN0ZWQgKGFmdGVyIHRoZSBjYWxsIHRoZSBwcm9wZXJ0eSB3aWxsIGV4aXN0
IHdpdGggdGhlIGdpdmVuIGF0dHJpYnV0ZXMpCiAgICAgLy8gIC0gdGhlIHByb3BlcnR5IG5hbWUg
aXMgYXNzdW1lZCB0byBub3QgYmUgYW4gaW5kZXguCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgcHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7Ci0gICAgdm9pZCBwdXREaXJlY3Qo
SlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
ID0gMCk7Ci0gICAgdm9pZCBwdXREaXJlY3QoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICB2b2lkIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0
cmlidXRlcyA9IDApOworICAgIHZvaWQgcHV0RGlyZWN0KFZNJiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gMCk7CisgICAgdm9pZCBwdXREaXJlY3QoVk0mLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHZvaWQgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMgPSAwKTsKICAgICB2b2lkIHB1dERpcmVjdEFjY2Vzc29yKEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAKICAgICBib29s
IHByb3BlcnR5SXNFbnVtZXJhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSkgY29uc3Q7CkBAIC00OTMsMTYgKzQ5MywxNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBn
ZXRQcm9wZXJ0eVNwZWNpZmljVmFsdWUoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU0NlbGwq
JiBzcGVjaWZpY0Z1bmN0aW9uKSBjb25zdDsKIAogICAgIC8vIFRoaXMgZ2V0IGZ1bmN0aW9uIG9u
bHkgbG9va3MgYXQgdGhlIHByb3BlcnR5IG1hcC4KLSAgICBKU1ZhbHVlIGdldERpcmVjdChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0Cisg
ICAgSlNWYWx1ZSBnZXREaXJlY3QoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBj
b25zdAogICAgIHsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCkt
PmdldChnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBjaGVj
a09mZnNldChvZmZzZXQsIHN0cnVjdHVyZSgpLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAg
cmV0dXJuIG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0ID8gZ2V0RGlyZWN0KG9mZnNldCkgOiBKU1Zh
bHVlKCk7CiAgICAgfQogCi0gICAgUHJvcGVydHlPZmZzZXQgZ2V0RGlyZWN0T2Zmc2V0KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKKyAgICBQcm9w
ZXJ0eU9mZnNldCBnZXREaXJlY3RPZmZzZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKQogICAgIHsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCkt
PmdldChnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBjaGVj
a09mZnNldChvZmZzZXQsIHN0cnVjdHVyZSgpLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAg
cmV0dXJuIG9mZnNldDsKICAgICB9CkBAIC01NDcsOSArNTQ3LDkgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gJm91dE9mTGluZVN0b3JhZ2UoKVtvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zm
c2V0KV07CiAgICAgfQogCi0gICAgdm9pZCB0cmFuc2l0aW9uVG8oSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKik7CisgICAgdm9pZCB0cmFuc2l0aW9uVG8oVk0mLCBTdHJ1Y3R1cmUqKTsKIAotICAg
IGJvb2wgcmVtb3ZlRGlyZWN0KEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSk7IC8vIFJldHVy
biB0cnVlIGlmIGFueXRoaW5nIGlzIHJlbW92ZWQuCisgICAgYm9vbCByZW1vdmVEaXJlY3QoVk0m
LCBQcm9wZXJ0eU5hbWUpOyAvLyBSZXR1cm4gdHJ1ZSBpZiBhbnl0aGluZyBpcyByZW1vdmVkLgog
ICAgIGJvb2wgaGFzQ3VzdG9tUHJvcGVydGllcygpIHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5kaWRU
cmFuc2l0aW9uKCk7IH0KICAgICBib29sIGhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSB7IHJl
dHVybiBzdHJ1Y3R1cmUoKS0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpOyB9CiAKQEAgLTU1
OCwxMSArNTU4LDExIEBAIHB1YmxpYzoKICAgICAvLyAgLSBwcm92aWRlcyBubyBzcGVjaWFsIGhh
bmRsaW5nIGZvciBfX3Byb3RvX18KICAgICAvLyAgLSBkb2VzIG5vdCB3YWxrIHRoZSBwcm90b3R5
cGUgY2hhaW4gKHRvIGNoZWNrIGZvciBhY2Nlc3NvcnMgb3Igbm9uLXdyaXRhYmxlIHByb3BlcnRp
ZXMpLgogICAgIC8vIFRoaXMgaXMgdXNlZCBieSBKU0FjdGl2YXRpb24uCi0gICAgYm9vbCBwdXRP
d25EYXRhUHJvcGVydHkoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmKTsKKyAgICBib29sIHB1dE93bkRhdGFQcm9wZXJ0eShWTSYsIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKICAgICAvLyBGYXN0IGFjY2VzcyB0
byBrbm93biBwcm9wZXJ0eSBvZmZzZXRzLgogICAgIEpTVmFsdWUgZ2V0RGlyZWN0KFByb3BlcnR5
T2Zmc2V0IG9mZnNldCkgY29uc3QgeyByZXR1cm4gbG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KS0+
Z2V0KCk7IH0KLSAgICB2b2lkIHB1dERpcmVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwgSlNWYWx1ZSB2YWx1ZSkgeyBsb2NhdGlvbkZvck9mZnNldChv
ZmZzZXQpLT5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOyB9CisgICAgdm9pZCBwdXREaXJl
Y3QoVk0mIHZtLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEpTVmFsdWUgdmFsdWUpIHsgbG9jYXRp
b25Gb3JPZmZzZXQob2Zmc2V0KS0+c2V0KHZtLCB0aGlzLCB2YWx1ZSk7IH0KICAgICB2b2lkIHB1
dERpcmVjdFVuZGVmaW5lZChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpIHsgbG9jYXRpb25Gb3JPZmZz
ZXQob2Zmc2V0KS0+c2V0VW5kZWZpbmVkKCk7IH0KIAogICAgIHZvaWQgcHV0RGlyZWN0TmF0aXZl
RnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBQcm9wZXJ0eU5hbWUm
LCB1bnNpZ25lZCBmdW5jdGlvbkxlbmd0aCwgTmF0aXZlRnVuY3Rpb24sIEludHJpbnNpYywgdW5z
aWduZWQgYXR0cmlidXRlcyk7CkBAIC01NzUsMTEgKzU3NSwxMSBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpc0FjdGl2YXRpb25PYmplY3QoKSBjb25zdDsKICAgICBib29sIGlzRXJyb3JJbnN0YW5jZSgp
IGNvbnN0OwogCi0gICAgdm9pZCBzZWFsKEpTR2xvYmFsRGF0YSYpOwotICAgIHZvaWQgZnJlZXpl
KEpTR2xvYmFsRGF0YSYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJldmVudEV4dGVu
c2lvbnMoSlNHbG9iYWxEYXRhJik7Ci0gICAgYm9vbCBpc1NlYWxlZChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpIHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5pc1NlYWxlZChnbG9iYWxEYXRhKTsgfQot
ICAgIGJvb2wgaXNGcm96ZW4oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKSB7IHJldHVybiBzdHJ1
Y3R1cmUoKS0+aXNGcm96ZW4oZ2xvYmFsRGF0YSk7IH0KKyAgICB2b2lkIHNlYWwoVk0mKTsKKyAg
ICB2b2lkIGZyZWV6ZShWTSYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJldmVudEV4
dGVuc2lvbnMoVk0mKTsKKyAgICBib29sIGlzU2VhbGVkKFZNJiB2bSkgeyByZXR1cm4gc3RydWN0
dXJlKCktPmlzU2VhbGVkKHZtKTsgfQorICAgIGJvb2wgaXNGcm96ZW4oVk0mIHZtKSB7IHJldHVy
biBzdHJ1Y3R1cmUoKS0+aXNGcm96ZW4odm0pOyB9CiAgICAgYm9vbCBpc0V4dGVuc2libGUoKSB7
IHJldHVybiBzdHJ1Y3R1cmUoKS0+aXNFeHRlbnNpYmxlKCk7IH0KICAgICBib29sIGluZGV4aW5n
U2hvdWxkQmVTcGFyc2UoKQogICAgIHsKQEAgLTU5MCwxNiArNTkwLDE2IEBAIHB1YmxpYzoKICAg
ICBib29sIHN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+c3Rh
dGljRnVuY3Rpb25zUmVpZmllZCgpOyB9CiAgICAgdm9pZCByZWlmeVN0YXRpY0Z1bmN0aW9uc0Zv
ckRlbGV0ZShFeGVjU3RhdGUqIGV4ZWMpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgQnV0dGVy
Zmx5KiBncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xkU2l6ZSwg
c2l6ZV90IG5ld1NpemUpOwotICAgIHZvaWQgc2V0QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYsIEJ1
dHRlcmZseSosIFN0cnVjdHVyZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSog
Z3Jvd091dE9mTGluZVN0b3JhZ2UoVk0mLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUp
OworICAgIHZvaWQgc2V0QnV0dGVyZmx5KFZNJiwgQnV0dGVyZmx5KiwgU3RydWN0dXJlKik7CiAg
ICAgdm9pZCBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUoQnV0dGVyZmx5Kik7
IC8vIFlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGNhbGwgdGhpcy4KICAgICAgICAgCi0gICAg
dm9pZCBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFs
RGF0YSYsIHVuc2lnbmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1cmUqKTsKLSAgICB2b2lkIHNldFN0
cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKik7CisgICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVj
ZXNzYXJ5KFZNJiwgdW5zaWduZWQgb2xkQ2FwYWNpdHksIFN0cnVjdHVyZSopOworICAgIHZvaWQg
c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShWTSYsIFN0cnVjdHVy
ZSopOwogCi0gICAgdm9pZCBmbGF0dGVuRGljdGlvbmFyeU9iamVjdChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCisgICAgdm9pZCBmbGF0dGVuRGljdGlvbmFyeU9iamVjdChWTSYgdm0pCiAgICAg
ewotICAgICAgICBzdHJ1Y3R1cmUoKS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUoZ2xvYmFs
RGF0YSwgdGhpcyk7CisgICAgICAgIHN0cnVjdHVyZSgpLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVj
dHVyZSh2bSwgdGhpcyk7CiAgICAgfQogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCgpIGNvbnN0CkBAIC02MDksNyArNjA5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3Ry
dWN0dXJlKCktPmdsb2JhbE9iamVjdCgpOwogICAgIH0KICAgICAgICAgCi0gICAgdm9pZCBzd2l0
Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJik7CisgICAgdm9pZCBzd2l0Y2hU
b1Nsb3dQdXRBcnJheVN0b3JhZ2UoVk0mKTsKICAgICAgICAgCiAgICAgLy8gVGhlIHJlY2VpdmVy
IGlzIHRoZSBwcm90b3R5cGUgaW4gdGhpcyBjYXNlLiBUaGUgZm9sbG93aW5nOgogICAgIC8vCkBA
IC02MjQsNTcgKzYyNCw1NyBAQCBwdWJsaWM6CiAgICAgLy8gaW5kZXhpbmcgc2hvdWxkIGJlIHNw
YXJzZSwgd2UncmUgaGF2aW5nIGEgYmFkIHRpbWUsIG9yIGJlY2F1c2UKICAgICAvLyB3ZSBhbHJl
YWR5IGhhdmUgYSBtb3JlIGdlbmVyYWwgZm9ybSBvZiBzdG9yYWdlIChkb3VibGUsCiAgICAgLy8g
Y29udGlndW91cywgYXJyYXkgc3RvcmFnZSkuCi0gICAgQ29udGlndW91c0pTVmFsdWVzIGVuc3Vy
ZUludDMyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICBDb250aWd1b3VzSlNWYWx1ZXMg
ZW5zdXJlSW50MzIoVk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgKExJS0VMWShoYXNJbnQzMihz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSkKICAgICAgICAgICAgIHJldHVybiBtX2J1dHRl
cmZseS0+Y29udGlndW91c0ludDMyKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgcmV0dXJuIGVu
c3VyZUludDMyU2xvdyhnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIGVuc3VyZUludDMyU2xv
dyh2bSk7CiAgICAgfQogICAgICAgICAKICAgICAvLyBSZXR1cm5zIDAgaWYgZG91YmxlIHN0b3Jh
Z2UgY2Fubm90IGJlIGNyZWF0ZWQgLSBlaXRoZXIgYmVjYXVzZQogICAgIC8vIGluZGV4aW5nIHNo
b3VsZCBiZSBzcGFyc2UsIHdlJ3JlIGhhdmluZyBhIGJhZCB0aW1lLCBvciBiZWNhdXNlCiAgICAg
Ly8gd2UgYWxyZWFkeSBoYXZlIGEgbW9yZSBnZW5lcmFsIGZvcm0gb2Ygc3RvcmFnZSAoY29udGln
dW91cywKICAgICAvLyBvciBhcnJheSBzdG9yYWdlKS4KLSAgICBDb250aWd1b3VzRG91YmxlcyBl
bnN1cmVEb3VibGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIENvbnRpZ3VvdXNEb3Vi
bGVzIGVuc3VyZURvdWJsZShWTSYgdm0pCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKGhhc0Rv
dWJsZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSkKICAgICAgICAgICAgIHJldHVybiBt
X2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpOwogICAgICAgICAgICAgCi0gICAgICAgIHJl
dHVybiBlbnN1cmVEb3VibGVTbG93KGdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4gZW5zdXJl
RG91YmxlU2xvdyh2bSk7CiAgICAgfQogICAgICAgICAKICAgICAvLyBSZXR1cm5zIDAgaWYgY29u
dGlndW91cyBzdG9yYWdlIGNhbm5vdCBiZSBjcmVhdGVkIC0gZWl0aGVyIGJlY2F1c2UKICAgICAv
LyBpbmRleGluZyBzaG91bGQgYmUgc3BhcnNlIG9yIGJlY2F1c2Ugd2UncmUgaGF2aW5nIGEgYmFk
IHRpbWUuCi0gICAgQ29udGlndW91c0pTVmFsdWVzIGVuc3VyZUNvbnRpZ3VvdXMoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQorICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBlbnN1cmVDb250aWd1b3Vz
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkoaGFzQ29udGlndW91cyhzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSkKICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+
Y29udGlndW91cygpOwogICAgICAgICAgICAgCi0gICAgICAgIHJldHVybiBlbnN1cmVDb250aWd1
b3VzU2xvdyhnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIGVuc3VyZUNvbnRpZ3VvdXNTbG93
KHZtKTsKICAgICB9CiAgICAgICAgIAogICAgIC8vIFNhbWUgYXMgZW5zdXJlQ29udGlndW91cygp
LCBleGNlcHQgdGhhdCBpZiB0aGUgaW5kZXhlZCBzdG9yYWdlIGlzIGluCiAgICAgLy8gZG91Ymxl
IG1vZGUsIHRoZW4gaXQgZG9lcyBhIHJhZ2UgY29udmVyc2lvbiB0byBjb250aWd1b3VzOiBpdAog
ICAgIC8vIGF0dGVtcHRzIHRvIGNvbnZlcnQgZWFjaCBkb3VibGUgdG8gYW4gaW50MzIuCi0gICAg
Q29udGlndW91c0pTVmFsdWVzIHJhZ2VFbnN1cmVDb250aWd1b3VzKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSkKKyAgICBDb250aWd1b3VzSlNWYWx1ZXMgcmFnZUVuc3VyZUNvbnRpZ3VvdXMoVk0m
IHZtKQogICAgIHsKICAgICAgICAgaWYgKExJS0VMWShoYXNDb250aWd1b3VzKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkpKQogICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgcmV0dXJuIHJhZ2VFbnN1cmVDb250aWd1
b3VzU2xvdyhnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIHJhZ2VFbnN1cmVDb250aWd1b3Vz
U2xvdyh2bSk7CiAgICAgfQogICAgICAgICAKICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgb2JqZWN0
IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkgc3RvcmFnZS4gVXNlCiAgICAgLy8gdGhp
cyBpZiB5b3UncmUgYWJvdXQgdG8gcGVyZm9ybSBhY3Rpb25zIHRoYXQgd291bGQgaGF2ZSByZXF1
aXJlZCB0aGUKICAgICAvLyBvYmplY3QgdG8gYmUgY29udmVydGVkIHRvIGhhdmUgYXJyYXkgc3Rv
cmFnZSwgaWYgaXQgZGlkbid0IGhhdmUgaXQKICAgICAvLyBhbHJlYWR5LgotICAgIEFycmF5U3Rv
cmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICBB
cnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZShWTSYgdm0pCiAgICAgewogICAgICAgICBp
ZiAoTElLRUxZKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSkK
ICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgcmV0dXJuIGVuc3VyZUFycmF5U3RvcmFnZVNsb3coZ2xvYmFsRGF0YSk7
CisgICAgICAgIHJldHVybiBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KHZtKTsKICAgICB9CiAgICAg
ICAgIAogICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7CkBAIC02OTIs
OSArNjkyLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAg
ICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZv
KSk7CiAgICAgICAgIEFTU0VSVCghc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwog
ICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmlzRW1wdHkoKSk7CkBAIC03MDMsMTQgKzcwMywx
NCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVChjbGFzc0luZm8oKSk7CiAgICAgfQogCi0g
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAg
ICAgLy8gVG8gaW5zdGFudGlhdGUgb2JqZWN0cyB5b3UgbGlrZWx5IHdhbnQgSlNGaW5hbE9iamVj
dCwgYmVsb3cuCiAgICAgLy8gVG8gY3JlYXRlIGRlcml2ZWQgdHlwZXMgeW91IGxpa2VseSB3YW50
IEpTTm9uRmluYWxPYmplY3QsIGJlbG93LgotICAgIEpTT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0
cnVjdHVyZSosIEJ1dHRlcmZseSogPSAwKTsKKyAgICBKU09iamVjdChWTSYsIFN0cnVjdHVyZSos
IEJ1dHRlcmZseSogPSAwKTsKICAgICAgICAgCiAgICAgdm9pZCB2aXNpdEJ1dHRlcmZseShTbG90
VmlzaXRvciYsIEJ1dHRlcmZseSosIHNpemVfdCBzdG9yYWdlU2l6ZSk7CiAgICAgdm9pZCBjb3B5
QnV0dGVyZmx5KENvcHlWaXNpdG9yJiwgQnV0dGVyZmx5Kiwgc2l6ZV90IHN0b3JhZ2VTaXplKTsK
QEAgLTczNiw0MiArNzM2LDQyIEBAIHByb3RlY3RlZDoKICAgICAgICAgfQogICAgIH0KICAgICAg
ICAgCi0gICAgQnV0dGVyZmx5KiBjcmVhdGVJbml0aWFsVW5kZWNpZGVkKEpTR2xvYmFsRGF0YSYs
IHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgQ29udGlndW91c0pTVmFsdWVzIGNyZWF0ZUluaXRpYWxJ
bnQzMihKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIENvbnRpZ3VvdXNEb3Vi
bGVzIGNyZWF0ZUluaXRpYWxEb3VibGUoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbGVuZ3RoKTsK
LSAgICBDb250aWd1b3VzSlNWYWx1ZXMgY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoSlNHbG9iYWxE
YXRhJiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAgICAgCi0gICAgdm9pZCBjb252ZXJ0VW5kZWNp
ZGVkRm9yVmFsdWUoSlNHbG9iYWxEYXRhJiwgSlNWYWx1ZSk7Ci0gICAgdm9pZCBjb252ZXJ0SW50
MzJGb3JWYWx1ZShKU0dsb2JhbERhdGEmLCBKU1ZhbHVlKTsKLSAgICAgICAgCi0gICAgQXJyYXlT
dG9yYWdlKiBjcmVhdGVBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbGVuZ3Ro
LCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpOwotICAgIEFycmF5U3RvcmFnZSogY3JlYXRlSW5pdGlh
bEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKLSAgICAgICAgCi0gICAgQ29udGlndW91c0pT
VmFsdWVzIGNvbnZlcnRVbmRlY2lkZWRUb0ludDMyKEpTR2xvYmFsRGF0YSYpOwotICAgIENvbnRp
Z3VvdXNEb3VibGVzIGNvbnZlcnRVbmRlY2lkZWRUb0RvdWJsZShKU0dsb2JhbERhdGEmKTsKLSAg
ICBDb250aWd1b3VzSlNWYWx1ZXMgY29udmVydFVuZGVjaWRlZFRvQ29udGlndW91cyhKU0dsb2Jh
bERhdGEmKTsKLSAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFn
ZShKU0dsb2JhbERhdGEmLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExl
bmd0aCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsKLSAgICBBcnJheVN0b3JhZ2Uq
IGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKLSAgICAgICAg
Ci0gICAgQ29udGlndW91c0RvdWJsZXMgY29udmVydEludDMyVG9Eb3VibGUoSlNHbG9iYWxEYXRh
Jik7Ci0gICAgQ29udGlndW91c0pTVmFsdWVzIGNvbnZlcnRJbnQzMlRvQ29udGlndW91cyhKU0ds
b2JhbERhdGEmKTsKLSAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdl
KEpTR2xvYmFsRGF0YSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbiwgdW5zaWduZWQgbmVlZGVkTGVu
Z3RoKTsKLSAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKEpTR2xv
YmFsRGF0YSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbik7Ci0gICAgQXJyYXlTdG9yYWdlKiBjb252
ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKKyAgICBCdXR0ZXJmbHkqIGNy
ZWF0ZUluaXRpYWxVbmRlY2lkZWQoVk0mLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIENvbnRpZ3Vv
dXNKU1ZhbHVlcyBjcmVhdGVJbml0aWFsSW50MzIoVk0mLCB1bnNpZ25lZCBsZW5ndGgpOworICAg
IENvbnRpZ3VvdXNEb3VibGVzIGNyZWF0ZUluaXRpYWxEb3VibGUoVk0mLCB1bnNpZ25lZCBsZW5n
dGgpOworICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBjcmVhdGVJbml0aWFsQ29udGlndW91cyhWTSYs
IHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIAorICAgIHZvaWQgY29udmVydFVuZGVjaWRlZEZv
clZhbHVlKFZNJiwgSlNWYWx1ZSk7CisgICAgdm9pZCBjb252ZXJ0SW50MzJGb3JWYWx1ZShWTSYs
IEpTVmFsdWUpOworICAgICAgICAKKyAgICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUFycmF5U3RvcmFn
ZShWTSYsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKTsKKyAgICBBcnJh
eVN0b3JhZ2UqIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoVk0mKTsKKyAgICAgICAgCisgICAg
Q29udGlndW91c0pTVmFsdWVzIGNvbnZlcnRVbmRlY2lkZWRUb0ludDMyKFZNJik7CisgICAgQ29u
dGlndW91c0RvdWJsZXMgY29udmVydFVuZGVjaWRlZFRvRG91YmxlKFZNJik7CisgICAgQ29udGln
dW91c0pTVmFsdWVzIGNvbnZlcnRVbmRlY2lkZWRUb0NvbnRpZ3VvdXMoVk0mKTsKKyAgICBBcnJh
eVN0b3JhZ2UqIGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZShWTSYsIE5vblByb3BlcnR5
VHJhbnNpdGlvbiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKTsKKyAgICBBcnJheVN0b3JhZ2UqIGNv
bnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZShWTSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbik7
CisgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UoVk0mKTsK
KyAgICAgICAgCisgICAgQ29udGlndW91c0RvdWJsZXMgY29udmVydEludDMyVG9Eb3VibGUoVk0m
KTsKKyAgICBDb250aWd1b3VzSlNWYWx1ZXMgY29udmVydEludDMyVG9Db250aWd1b3VzKFZNJik7
CisgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShWTSYsIE5vblBy
b3BlcnR5VHJhbnNpdGlvbiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKTsKKyAgICBBcnJheVN0b3Jh
Z2UqIGNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKFZNJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9u
KTsKKyAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKFZNJik7CiAg
ICAgCi0gICAgQ29udGlndW91c0pTVmFsdWVzIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoSlNH
bG9iYWxEYXRhJik7Ci0gICAgQ29udGlndW91c0pTVmFsdWVzIHJhZ2VDb252ZXJ0RG91YmxlVG9D
b250aWd1b3VzKEpTR2xvYmFsRGF0YSYpOwotICAgIEFycmF5U3RvcmFnZSogY29udmVydERvdWJs
ZVRvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbiwgdW5z
aWduZWQgbmVlZGVkTGVuZ3RoKTsKLSAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnREb3VibGVUb0Fy
cmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24pOwotICAgIEFy
cmF5U3RvcmFnZSogY29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYpOwot
ICAgICAgICAKLSAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3Jh
Z2UoSlNHbG9iYWxEYXRhJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVkZWRM
ZW5ndGgpOwotICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFn
ZShKU0dsb2JhbERhdGEmLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24pOwotICAgIEFycmF5U3RvcmFn
ZSogY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKKyAgICBD
b250aWd1b3VzSlNWYWx1ZXMgY29udmVydERvdWJsZVRvQ29udGlndW91cyhWTSYpOworICAgIENv
bnRpZ3VvdXNKU1ZhbHVlcyByYWdlQ29udmVydERvdWJsZVRvQ29udGlndW91cyhWTSYpOworICAg
IEFycmF5U3RvcmFnZSogY29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKFZNJiwgTm9uUHJvcGVy
dHlUcmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpOworICAgIEFycmF5U3RvcmFnZSog
Y29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKFZNJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsK
KyAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZShWTSYpOworICAg
ICAgICAKKyAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uo
Vk0mLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCk7CisgICAg
QXJyYXlTdG9yYWdlKiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKFZNJiwgTm9uUHJv
cGVydHlUcmFuc2l0aW9uKTsKKyAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRDb250aWd1b3VzVG9B
cnJheVN0b3JhZ2UoVk0mKTsKIAogICAgICAgICAKLSAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFy
cmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERh
dGEmKTsKKyAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVy
RGljdGlvbmFyeUluZGV4aW5nTW9kZShWTSYpOwogICAgICAgICAKICAgICBib29sIGRlZmluZU93
bk5vbkluZGV4UHJvcGVydHkoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsKIApAQCAtNzc5LDI0ICs3NzksMjQgQEAgcHJv
dGVjdGVkOgogICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhvdXRBdHRy
aWJ1dGVzKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSk7CiAgICAg
dm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFy
cmF5U3RvcmFnZSopOwogCi0gICAgYm9vbCBpbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERh
dGEmLCB1bnNpZ25lZCBuZXdMZW5ndGgpOworICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgo
Vk0mLCB1bnNpZ25lZCBuZXdMZW5ndGgpOwogICAgIHZvaWQgZGVhbGxvY2F0ZVNwYXJzZUluZGV4
TWFwKCk7CiAgICAgYm9vbCBkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiwgdW5z
aWduZWQsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwotICAgIFNw
YXJzZUFycmF5VmFsdWVNYXAqIGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoSlNHbG9iYWxEYXRhJik7
CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogYWxsb2NhdGVTcGFyc2VJbmRleE1hcChWTSYpOwog
ICAgICAgICAKLSAgICB2b2lkIG5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNjZXNzb3JzKEpTR2xv
YmFsRGF0YSYpOworICAgIHZvaWQgbm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRBY2Nlc3NvcnMoVk0m
KTsKICAgICAgICAgCiAgICAgYm9vbCBhdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xl
KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsK
ICAgICAgICAgCiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSB3YW50IHNldEluZGV4UXVpY2tseSB0
byBzdWNjZWVkIGFuZCB5b3UncmUgc3VyZSB0aGF0CiAgICAgLy8gdGhlIGFycmF5IGlzIGNvbnRp
Z3VvdXMuCi0gICAgdm9pZCBlbnN1cmVMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1
bnNpZ25lZCBsZW5ndGgpCisgICAgdm9pZCBlbnN1cmVMZW5ndGgoVk0mIHZtLCB1bnNpZ25lZCBs
ZW5ndGgpCiAgICAgewogICAgICAgICBBU1NFUlQobGVuZ3RoIDwgTUFYX0FSUkFZX0lOREVYKTsK
ICAgICAgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB8fCBoYXNJbnQzMihzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHx8IGhhc0RvdWJsZShz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHx8IGhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUoKS0+
aW5kZXhpbmdUeXBlKCkpKTsKICAgICAgICAgICAgIAogICAgICAgICBpZiAobV9idXR0ZXJmbHkt
PnZlY3Rvckxlbmd0aCgpIDwgbGVuZ3RoKQotICAgICAgICAgICAgZW5zdXJlTGVuZ3RoU2xvdyhn
bG9iYWxEYXRhLCBsZW5ndGgpOworICAgICAgICAgICAgZW5zdXJlTGVuZ3RoU2xvdyh2bSwgbGVu
Z3RoKTsKICAgICAgICAgICAgIAogICAgICAgICBpZiAobV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpIDwgbGVuZ3RoKQogICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChs
ZW5ndGgpOwpAQCAtOTE2LDEyICs5MTYsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGlzT2JqZWN0
KCk7CiAgICAgdm9pZCBpc1N0cmluZygpOwogICAgICAgICAKLSAgICBCdXR0ZXJmbHkqIGNyZWF0
ZUluaXRpYWxJbmRleGVkU3RvcmFnZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBsZW5ndGgsIHNp
emVfdCBlbGVtZW50U2l6ZSk7CisgICAgQnV0dGVyZmx5KiBjcmVhdGVJbml0aWFsSW5kZXhlZFN0
b3JhZ2UoVk0mLCB1bnNpZ25lZCBsZW5ndGgsIHNpemVfdCBlbGVtZW50U2l6ZSk7CiAgICAgICAg
IAotICAgIEFycmF5U3RvcmFnZSogZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5
U3RvcmFnZUFscmVhZHlFeGlzdHMoSlNHbG9iYWxEYXRhJiwgQXJyYXlTdG9yYWdlKik7CisgICAg
QXJyYXlTdG9yYWdlKiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdl
QWxyZWFkeUV4aXN0cyhWTSYsIEFycmF5U3RvcmFnZSopOwogICAgICAgICAKICAgICB0ZW1wbGF0
ZTxQdXRNb2RlPgotICAgIGJvb2wgcHV0RGlyZWN0SW50ZXJuYWwoSlNHbG9iYWxEYXRhJiwgUHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyLCBQdXRQcm9wZXJ0eVNsb3QmLCBKU0Nl
bGwqKTsKKyAgICBib29sIHB1dERpcmVjdEludGVybmFsKFZNJiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCB1bnNpZ25lZCBhdHRyLCBQdXRQcm9wZXJ0eVNsb3QmLCBKU0NlbGwqKTsKIAogICAgIGJv
b2wgaW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaWxsR2V0dGVyUHJvcGVy
dHlTbG90KFByb3BlcnR5U2xvdCYsIFByb3BlcnR5T2Zmc2V0KTsKQEAgLTkzOSwyNCArOTM5LDI0
IEBAIHByaXZhdGU6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGdldE93blByb3BlcnR5
U2xvdFNsb3coRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAg
ICAgCi0gICAgQXJyYXlTdG9yYWdlKiBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRo
b3V0Q29weWluZ0VsZW1lbnRzKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG5lZWRlZExlbmd0aCk7
CisgICAgQXJyYXlTdG9yYWdlKiBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0
Q29weWluZ0VsZW1lbnRzKFZNJiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKTsKICAgICAgICAgCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRJbmRleFF1aWNrbHlUb1VuZGVjaWRlZChKU0ds
b2JhbERhdGEmLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBjb252ZXJ0SW50MzJUb0RvdWJsZU9yQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1Nl
dEluZGV4KEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlKTsKLSAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1p
bmdTZXRJbmRleChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSk7Ci0gICAg
ICAgIAotICAgIHZvaWQgZW5zdXJlTGVuZ3RoU2xvdyhKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBs
ZW5ndGgpOwotICAgICAgICAKLSAgICBDb250aWd1b3VzSlNWYWx1ZXMgZW5zdXJlSW50MzJTbG93
KEpTR2xvYmFsRGF0YSYpOwotICAgIENvbnRpZ3VvdXNEb3VibGVzIGVuc3VyZURvdWJsZVNsb3co
SlNHbG9iYWxEYXRhJik7Ci0gICAgQ29udGlndW91c0pTVmFsdWVzIGVuc3VyZUNvbnRpZ3VvdXNT
bG93KEpTR2xvYmFsRGF0YSYpOwotICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyByYWdlRW5zdXJlQ29u
dGlndW91c1Nsb3coSlNHbG9iYWxEYXRhJik7Ci0gICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJh
eVN0b3JhZ2VTbG93KEpTR2xvYmFsRGF0YSYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
c2V0SW5kZXhRdWlja2x5VG9VbmRlY2lkZWQoVk0mLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSk7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb252ZXJ0SW50MzJUb0RvdWJsZU9yQ29udGln
dW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KFZNJiwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29udmVydERvdWJsZVRvQ29udGlndW91c1do
aWxlUGVyZm9ybWluZ1NldEluZGV4KFZNJiwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUpOworICAg
ICAgICAKKyAgICB2b2lkIGVuc3VyZUxlbmd0aFNsb3coVk0mLCB1bnNpZ25lZCBsZW5ndGgpOwor
ICAgICAgICAKKyAgICBDb250aWd1b3VzSlNWYWx1ZXMgZW5zdXJlSW50MzJTbG93KFZNJik7Cisg
ICAgQ29udGlndW91c0RvdWJsZXMgZW5zdXJlRG91YmxlU2xvdyhWTSYpOworICAgIENvbnRpZ3Vv
dXNKU1ZhbHVlcyBlbnN1cmVDb250aWd1b3VzU2xvdyhWTSYpOworICAgIENvbnRpZ3VvdXNKU1Zh
bHVlcyByYWdlRW5zdXJlQ29udGlndW91c1Nsb3coVk0mKTsKKyAgICBBcnJheVN0b3JhZ2UqIGVu
c3VyZUFycmF5U3RvcmFnZVNsb3coVk0mKTsKICAgICAKICAgICBlbnVtIERvdWJsZVRvQ29udGln
dW91c01vZGUgeyBFbmNvZGVWYWx1ZUFzRG91YmxlLCBSYWdlQ29udmVydERvdWJsZVRvVmFsdWUg
fTsKICAgICB0ZW1wbGF0ZTxEb3VibGVUb0NvbnRpZ3VvdXNNb2RlIG1vZGU+Ci0gICAgQ29udGln
dW91c0pTVmFsdWVzIGdlbmVyaWNDb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKEpTR2xvYmFsRGF0
YSYpOwotICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBlbnN1cmVDb250aWd1b3VzU2xvdyhKU0dsb2Jh
bERhdGEmLCBEb3VibGVUb0NvbnRpZ3VvdXNNb2RlKTsKKyAgICBDb250aWd1b3VzSlNWYWx1ZXMg
Z2VuZXJpY0NvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoVk0mKTsKKyAgICBDb250aWd1b3VzSlNW
YWx1ZXMgZW5zdXJlQ29udGlndW91c1Nsb3coVk0mLCBEb3VibGVUb0NvbnRpZ3VvdXNNb2RlKTsK
ICAgICAKIHByb3RlY3RlZDoKICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OwpAQCAtOTcxLDIw
ICs5NzEsMjAgQEAgY2xhc3MgSlNOb25GaW5hbE9iamVjdCA6IHB1YmxpYyBKU09iamVjdAogcHVi
bGljOgogICAgIHR5cGVkZWYgSlNPYmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogcHJvdGVjdGVkOgotICAgIGV4cGxp
Y2l0IEpTTm9uRmluYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSAwKQotICAgICAgICA6IEpTT2JqZWN0
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KQorICAgIGV4cGxpY2l0IEpTTm9uRmlu
YWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSAwKQorICAgICAgICA6IEpTT2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAg
ICB7CiAgICAgfQogCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgewotICAgICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOwogICAgICAgICBBU1NFUlQoIXRoaXMtPnN0cnVjdHVyZSgpLT50b3RhbFN0b3Jh
Z2VDYXBhY2l0eSgpKTsKICAgICAgICAgQVNTRVJUKGNsYXNzSW5mbygpKTsKICAgICB9CkBAIC0x
MDEzLDkgKzEwMTMsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTRmluYWxPYmpl
Y3QqIGNyZWF0ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKLSAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNp
dHkpCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIHVuc2lnbmVkIGlubGlu
ZUNhcGFjaXR5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhGaW5hbE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywgTm9uQXJyYXksIGlubGluZUNhcGFjaXR5KTsKKyAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oRmluYWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIE5v
bkFycmF5LCBpbmxpbmVDYXBhY2l0eSk7CiAgICAgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpAQCAtMTAy
NSw5ICsxMDI1LDkgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZvaWQgdmlzaXRDaGlsZHJl
bkNvbW1vbihTbG90VmlzaXRvciYpOwogICAgICAgICAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAg
ICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUo
KS0+dG90YWxTdG9yYWdlQ2FwYWNpdHkoKSA9PSBzdHJ1Y3R1cmUoKS0+aW5saW5lQ2FwYWNpdHko
KSk7CiAgICAgICAgIEFTU0VSVChjbGFzc0luZm8oKSk7CiAgICAgfQpAQCAtMTAzNSw4ICsxMDM1
LDggQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOwogCi0gICAgZXhwbGljaXQgSlNGaW5hbE9iamVjdChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICA6IEpTT2JqZWN0KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSkKKyAgICBleHBsaWNpdCBKU0ZpbmFsT2JqZWN0KFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNPYmplY3Qodm0sIHN0cnVjdHVyZSkKICAg
ICB7CiAgICAgfQogCkBAIC0xMDUxLDggKzEwNTEsOCBAQCBpbmxpbmUgSlNGaW5hbE9iamVjdCog
SlNGaW5hbE9iamVjdDo6Y3JlCiAgICAgICAgICAgICAqZXhlYy0+aGVhcCgpLAogICAgICAgICAg
ICAgYWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKQogICAgICAgICAp
Ci0gICAgKSBKU0ZpbmFsT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKTsKLSAg
ICBmaW5hbE9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAp
IEpTRmluYWxPYmplY3QoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsKKyAgICBmaW5hbE9iamVjdC0+
ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAgICAgcmV0dXJuIGZpbmFsT2JqZWN0OwogfQog
CkBAIC0xMDk2LDExICsxMDk2LDExIEBAIGlubGluZSBib29sIEpTT2JqZWN0Ojppc0Vycm9ySW5z
dGFuY2UoKSAKICAgICByZXR1cm4gc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID09IEVy
cm9ySW5zdGFuY2VUeXBlOwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0QnV0dGVyZmx5
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQoraW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldEJ1dHRlcmZseShWTSYgdm0s
IEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBBU1NF
UlQoc3RydWN0dXJlKTsKICAgICBBU1NFUlQoIWJ1dHRlcmZseSA9PSAoIXN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSAmJiAhaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGlu
Z1R5cGUoKSkpKTsKLSAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKKyAg
ICBzZXRTdHJ1Y3R1cmUodm0sIHN0cnVjdHVyZSk7CiAgICAgbV9idXR0ZXJmbHkgPSBidXR0ZXJm
bHk7CiB9CiAKQEAgLTExMzQsOCArMTEzNCw4IEBAIGlubGluZSBKU09iamVjdCogYXNPYmplY3Qo
SlNWYWx1ZSB2YWx1ZSkKICAgICByZXR1cm4gYXNPYmplY3QodmFsdWUuYXNDZWxsKCkpOwogfQog
Ci1pbmxpbmUgSlNPYmplY3Q6OkpTT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQotICAgIDogSlNDZWxsKGds
b2JhbERhdGEsIHN0cnVjdHVyZSkKK2lubGluZSBKU09iamVjdDo6SlNPYmplY3QoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgOiBKU0NlbGwo
dm0sIHN0cnVjdHVyZSkKICAgICAsIG1fYnV0dGVyZmx5KGJ1dHRlcmZseSkKIHsKIH0KQEAgLTEx
NDcsNyArMTE0Nyw3IEBAIGlubGluZSBKU1ZhbHVlIEpTT2JqZWN0Ojpwcm90b3R5cGUoKSBjb24K
IAogQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmdldChl
eGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CisgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gc3RydWN0dXJlKCktPmdldChleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUpOwogICAgIGlm
IChMSUtFTFkoaXNWYWxpZE9mZnNldChvZmZzZXQpKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gZ2V0RGlyZWN0KG9mZnNldCk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+aGFzR2V0dGVy
U2V0dGVyUHJvcGVydGllcygpICYmIHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpCkBAIC0xMjE1LDcg
KzEyMTUsNyBAQCBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6Z2V0KEV4ZWNTdGF0ZSogCiB9CiAK
IHRlbXBsYXRlPEpTT2JqZWN0OjpQdXRNb2RlIG1vZGU+Ci1pbmxpbmUgYm9vbCBKU09iamVjdDo6
cHV0RGlyZWN0SW50ZXJuYWwoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QsIEpTQ2VsbCogc3BlY2lmaWNGdW5jdGlvbikKK2lubGluZSBib29sIEpT
T2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCwgSlNDZWxsKiBzcGVjaWZpY0Z1bmN0aW9uKQogewogICAgIEFTU0VSVCh2YWx1ZSk7CiAg
ICAgQVNTRVJUKHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgPT0gISEoYXR0cmlidXRlcyAmIEFjY2Vz
c29yKSk7CkBAIC0xMjI1LDE2ICsxMjI1LDE2IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXRE
aXJlY3RJbnRlcm5hbCgKICAgICBpZiAoc3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7CiAg
ICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwogICAgICAgICBKU0NlbGwqIGN1cnJl
bnRTcGVjaWZpY0Z1bmN0aW9uOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1
Y3R1cmUoKS0+Z2V0KGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMs
IGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gc3RydWN0dXJlKCktPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcywg
Y3VycmVudFNwZWNpZmljRnVuY3Rpb24pOwogICAgICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRP
ZmZzZXQpIHsKICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGN1cnJlbnRseSBhIHNwZWNpZmlj
IGZ1bmN0aW9uLCBhbmQgdGhlcmUgbm93IGVpdGhlciBpc24ndCwKICAgICAgICAgICAgIC8vIG9y
IHRoZSBuZXcgdmFsdWUgaXMgZGlmZmVyZW50LCB0aGVuIGRlc3BlY2lmeS4KICAgICAgICAgICAg
IGlmIChjdXJyZW50U3BlY2lmaWNGdW5jdGlvbiAmJiAoc3BlY2lmaWNGdW5jdGlvbiAhPSBjdXJy
ZW50U3BlY2lmaWNGdW5jdGlvbikpCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlKCktPmRlc3Bl
Y2lmeURpY3Rpb25hcnlGdW5jdGlvbihnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUpOworICAgICAg
ICAgICAgICAgIHN0cnVjdHVyZSgpLT5kZXNwZWNpZnlEaWN0aW9uYXJ5RnVuY3Rpb24odm0sIHBy
b3BlcnR5TmFtZSk7CiAgICAgICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgY3Vy
cmVudEF0dHJpYnV0ZXMgJiBSZWFkT25seSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICAgICAgICAgIHB1dERpcmVjdChnbG9iYWxEYXRhLCBvZmZzZXQsIHZhbHVlKTsKKyAg
ICAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAgICAgICAgICAgICAvLyBB
dCB0aGlzIHBvaW50LCB0aGUgb2JqZWN0cyBzdHJ1Y3R1cmUgb25seSBoYXMgYSBzcGVjaWZpYyB2
YWx1ZSBzZXQgaWYgcHJldmlvdXNseSB0aGVyZQogICAgICAgICAgICAgLy8gaGFkIGJlZW4gb25l
IHNldCwgYW5kIGlmIHRoZSBuZXcgdmFsdWUgYmVpbmcgc3BlY2lmaWVkIGlzIHRoZSBzYW1lIChv
dGhlcndpc2Ugd2Ugd291bGQKICAgICAgICAgICAgIC8vIGhhdmUgZGVzcGVjaWZpZWQsIGFib3Zl
KS4gIFNvLCBpZiBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbiBpcyBub3Qgc2V0LCBvciBpZiB0aGUg
bmV3CkBAIC0xMjUxLDEzICsxMjUxLDEzIEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJl
Y3RJbnRlcm5hbCgKIAogICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVy
Zmx5OwogICAgICAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFn
ZSgpKQotICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5z
dWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG9mZnNldCA9
IHN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHBy
b3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNGdW5jdGlvbik7Ci0gICAgICAgIHNldEJ1
dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIHN0cnVjdHVyZSgpKTsKKyAgICAgICAg
ICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBzdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0
b3JhZ2VDYXBhY2l0eSgpKTsKKyAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmFkZFByb3Bl
cnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lm
aWNGdW5jdGlvbik7CisgICAgICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5LCBzdHJ1
Y3R1cmUoKSk7CiAKICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICAgICAgQVNT
RVJUKHN0cnVjdHVyZSgpLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgICAgICBwdXREaXJl
Y3QoZ2xvYmFsRGF0YSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zm
c2V0LCB2YWx1ZSk7CiAgICAgICAgIC8vIFNlZSBjb21tZW50IG9uIHNldE5ld1Byb3BlcnR5IGNh
bGwgYmVsb3cuCiAgICAgICAgIGlmICghc3BlY2lmaWNGdW5jdGlvbikKICAgICAgICAgICAgIHNs
b3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKQEAgLTEyNzEsMTIgKzEyNzEsMTIgQEAg
aW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgIGlmIChTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGlu
Z1N0cnVjdHVyZSh0aGlzLT5zdHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBz
cGVjaWZpY0Z1bmN0aW9uLCBvZmZzZXQpKSB7CiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVy
Zmx5ID0gbV9idXR0ZXJmbHk7CiAgICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gc3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQotICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jv
d091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgY3VycmVudENhcGFjaXR5LCBzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091
dE9mTGluZVN0b3JhZ2Uodm0sIGN1cnJlbnRDYXBhY2l0eSwgc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpKTsKIAogICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgICAgICBB
U1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgICAgICBzZXRCdXR0
ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdXRE
aXJlY3QoZ2xvYmFsRGF0YSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAgICAgIHNldEJ1dHRlcmZseSh2
bSwgbmV3QnV0dGVyZmx5LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNl
dCwgdmFsdWUpOwogICAgICAgICAvLyBUaGlzIGlzIGEgbmV3IHByb3BlcnR5OyB0cmFuc2l0aW9u
cyB3aXRoIHNwZWNpZmljIHZhbHVlcyBhcmUgbm90IGN1cnJlbnRseSBjYWNoYWJsZSwKICAgICAg
ICAgLy8gc28gbGVhdmUgdGhlIHNsb3QgaW4gYW4gdW5jYWNoYWJsZSBzdGF0ZS4KICAgICAgICAg
aWYgKCFzcGVjaWZpY0Z1bmN0aW9uKQpAQCAtMTI4Niw3ICsxMjg2LDcgQEAgaW5saW5lIGJvb2wg
SlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogCiAgICAgdW5zaWduZWQgY3VycmVudEF0dHJp
YnV0ZXM7CiAgICAgSlNDZWxsKiBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbjsKLSAgICBvZmZzZXQg
PSBzdHJ1Y3R1cmUoKS0+Z2V0KGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJp
YnV0ZXMsIGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uKTsKKyAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUo
KS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzLCBjdXJyZW50U3BlY2lm
aWNGdW5jdGlvbik7CiAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CiAgICAgICAg
IGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFJlYWRPbmx5
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTMwMywyOSArMTMwMywyOSBAQCBpbmxp
bmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgICAgIGlmIChjdXJyZW50
U3BlY2lmaWNGdW5jdGlvbikgewogICAgICAgICAgICAgLy8gY2FzZSAoMSkgRG8gdGhlIHB1dCwg
dGhlbiByZXR1cm4gbGVhdmluZyB0aGUgc2xvdCB1bmNhY2hhYmxlLgogICAgICAgICAgICAgaWYg
KHNwZWNpZmljRnVuY3Rpb24gPT0gY3VycmVudFNwZWNpZmljRnVuY3Rpb24pIHsKLSAgICAgICAg
ICAgICAgICBwdXREaXJlY3QoZ2xvYmFsRGF0YSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIGNhc2UgKDIpIERlc3BlY2lm
eSwgZmFsbCB0aHJvdWdoIHRvICgzKS4KLSAgICAgICAgICAgIHNldFN0cnVjdHVyZShnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uVHJhbnNpdGlvbihnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgICAgICBzZXRTdHJ1Y3R1cmUodm0s
IFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwg
cHJvcGVydHlOYW1lKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBjYXNlICgzKSBzZXQgdGhl
IHNsb3QsIGRvIHRoZSBwdXQsIHJldHVybi4KICAgICAgICAgc2xvdC5zZXRFeGlzdGluZ1Byb3Bl
cnR5KHRoaXMsIG9mZnNldCk7Ci0gICAgICAgIHB1dERpcmVjdChnbG9iYWxEYXRhLCBvZmZzZXQs
IHZhbHVlKTsKKyAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmICFp
c0V4dGVuc2libGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCB0
aGlzLT5zdHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0
aW9uLCBvZmZzZXQpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQ
cm9wZXJ0eVRyYW5zaXRpb24odm0sIHRoaXMtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24sIG9mZnNldCk7CiAgICAgCiAgICAgdmFsaWRhdGVP
ZmZzZXQob2Zmc2V0KTsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNl
dCkpOwotICAgIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFn
ZUlmTmVjZXNzYXJ5KHZtLCBzdHJ1Y3R1cmUpOwogCi0gICAgcHV0RGlyZWN0KGdsb2JhbERhdGEs
IG9mZnNldCwgdmFsdWUpOworICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAgICAg
Ly8gVGhpcyBpcyBhIG5ldyBwcm9wZXJ0eTsgdHJhbnNpdGlvbnMgd2l0aCBzcGVjaWZpYyB2YWx1
ZXMgYXJlIG5vdCBjdXJyZW50bHkgY2FjaGFibGUsCiAgICAgLy8gc28gbGVhdmUgdGhlIHNsb3Qg
aW4gYW4gdW5jYWNoYWJsZSBzdGF0ZS4KICAgICBpZiAoIXNwZWNpZmljRnVuY3Rpb24pCkBAIC0x
MzM1LDU3ICsxMzM1LDU3IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5h
bCgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVj
dHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBvbGRDYXBhY2l0eSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUpCitpbmxp
bmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vz
c2FyeShWTSYgdm0sIHVuc2lnbmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSkKIHsKICAgICBBU1NFUlQob2xkQ2FwYWNpdHkgPD0gbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpKTsKICAgICAKICAgICBpZiAob2xkQ2FwYWNpdHkgPT0gbmV3U3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBu
ZXdTdHJ1Y3R1cmUpOworICAgICAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkg
PSBncm93T3V0T2ZMaW5lU3RvcmFnZSgKLSAgICAgICAgZ2xvYmFsRGF0YSwgb2xkQ2FwYWNpdHks
IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgc2V0QnV0dGVyZmx5KGds
b2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKKyAgICAgICAgdm0sIG9sZENh
cGFjaXR5LCBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgIHNldEJ1dHRl
cmZseSh2bSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOwogfQogCi1pbmxpbmUgdm9pZCBK
U09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKQoraW5saW5lIHZv
aWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3Nhcnko
Vk0mIHZtLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSkKIHsKICAgICBzZXRTdHJ1Y3R1cmVBbmRS
ZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KAotICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3U3RydWN0dXJlKTsKKyAgICAgICAgdm0sIHN0
cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdTdHJ1Y3R1cmUpOwogfQogCi1pbmxp
bmUgYm9vbCBKU09iamVjdDo6cHV0T3duRGF0YVByb3BlcnR5KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVy
dHlTbG90JiBzbG90KQoraW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dE93bkRhdGFQcm9wZXJ0eShW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NFUlQodmFsdWUpOwogICAgIEFTU0VSVCghSGVhcDo6
aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzKSk7CiAg
ICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpKTsKIAot
ICAgIHJldHVybiBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0PihnbG9iYWxEYXRhLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOworICAg
IHJldHVybiBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgMCwgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKIH0KIAotaW5saW5lIHZv
aWQgSlNPYmplY3Q6OnB1dERpcmVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCitp
bmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBBU1NF
UlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgJiYgIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsK
ICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2Rl
RGVmaW5lT3duUHJvcGVydHk+KGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJp
YnV0ZXMsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7CisgICAgcHV0RGlyZWN0SW50
ZXJuYWw8UHV0TW9kZURlZmluZU93blByb3BlcnR5Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
YXR0cmlidXRlcywgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKIH0KIAotaW5saW5l
IHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3QoVk0mIHZtLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAg
ICAgQVNTRVJUKCF2YWx1ZS5pc0dldHRlclNldHRlcigpKTsKLSAgICBwdXREaXJlY3RJbnRlcm5h
bDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIDAsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7CisgICAgcHV0RGlyZWN0SW50
ZXJuYWw8UHV0TW9kZURlZmluZU93blByb3BlcnR5Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
MCwgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKIH0KIAotaW5saW5lIHZvaWQgSlNP
YmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0
cmlidXRlcykKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc0dldHRlclNldHRlcigpICYm
ICEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkg
PSBtX2J1dHRlcmZseTsKICAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5l
U3RvcmFnZSgpKQotICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShn
bG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCkt
PnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKLSAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihn
bG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGdldENhbGxhYmxlT2JqZWN0KHZh
bHVlKSk7Ci0gICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgc3RydWN0
dXJlKCkpOwotICAgIHB1dERpcmVjdChnbG9iYWxEYXRhLCBvZmZzZXQsIHZhbHVlKTsKKyAgICAg
ICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3Rv
cmFnZUNhcGFjaXR5KCkpOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgp
LT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0
ZXMsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdC
dXR0ZXJmbHksIHN0cnVjdHVyZSgpKTsKKyAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUp
OwogfQogCiBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiBl
eGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIHByZWZlcnJlZFR5cGUpIGNvbnN0CkBAIC0xNDUz
LDcgKzE0NTMsNyBAQCBDT01QSUxFX0FTU0VSVCghKHNpemVvZihKU09iamVjdCkgJSBzaXplCiAK
IC8vIEhlbHBlciBmb3IgZGVmaW5pbmcgbmF0aXZlIGZ1bmN0aW9ucywgaWYgeW91J3JlIG5vdCB1
c2luZyBhIHN0YXRpYyBoYXNoIHRhYmxlLgogLy8gVXNlIHRoaXMgbWFjcm8gZnJvbSB3aXRoaW4g
ZmluaXNoQ3JlYXRpb24oKSBtZXRob2RzIGluIHByb3RvdHlwZXMuIFRoaXMgYXNzdW1lcwotLy8g
eW91J3ZlIGRlZmluZWQgdmFyaWFibGVzIGNhbGxlZCBleGVjLCBnbG9iYWxPYmplY3QsIGFuZCBn
bG9iYWxEYXRhLCBhbmQgdGhleQorLy8geW91J3ZlIGRlZmluZWQgdmFyaWFibGVzIGNhbGxlZCBl
eGVjLCBnbG9iYWxPYmplY3QsIGFuZCB2bSwgYW5kIHRoZXkKIC8vIGhhdmUgdGhlIGV4cGVjdGVk
IG1lYW5pbmdzLgogI2RlZmluZSBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTihqc05hbWUs
IGNwcE5hbWUsIGF0dHJpYnV0ZXMsIGxlbmd0aCwgaW50cmluc2ljKSBcCiAgICAgcHV0RGlyZWN0
TmF0aXZlRnVuY3Rpb24oXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDE0ODY1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogY29u
c3QgQ2xhc3NJbmZvIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OnNfaW5mbyA9IHsgIkpTUHJvcGVy
dHlOYW1lSXRlcmF0b3IiLCAwLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTUHJvcGVydHlO
YW1lSXRlcmF0b3IpIH07CiAKIGlubGluZSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpKU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXlEYXRhKiBw
cm9wZXJ0eU5hbWVBcnJheURhdGEsIHNpemVfdCBudW1DYWNoZWFibGVTbG90cykKLSAgICA6IEpT
Q2VsbChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVJ
dGVyYXRvclN0cnVjdHVyZS5nZXQoKSkKKyAgICA6IEpTQ2VsbChleGVjLT52bSgpLCBleGVjLT52
bSgpLnByb3BlcnR5TmFtZUl0ZXJhdG9yU3RydWN0dXJlLmdldCgpKQogICAgICwgbV9udW1DYWNo
ZWFibGVTbG90cyhudW1DYWNoZWFibGVTbG90cykKICAgICAsIG1fanNTdHJpbmdzU2l6ZShwcm9w
ZXJ0eU5hbWVBcnJheURhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpLnNpemUoKSkKICAgICAsIG1f
anNTdHJpbmdzKGFkb3B0QXJyYXlQdHIobmV3IFdyaXRlQmFycmllcjxVbmtub3duPlttX2pzU3Ry
aW5nc1NpemVdKSkKQEAgLTc2LDkgKzc2LDkgQEAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogSlNQ
cm9wZXJ0eU5hbWVJdAogICAgICAgICAgICAgcmV0dXJuIGpzUHJvcGVydHlOYW1lSXRlcmF0b3I7
CiAgICAgfQogCi0gICAganNQcm9wZXJ0eU5hbWVJdGVyYXRvci0+c2V0Q2FjaGVkUHJvdG90eXBl
Q2hhaW4oZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmVDaGFpbik7Ci0gICAganNQcm9wZXJ0
eU5hbWVJdGVyYXRvci0+c2V0Q2FjaGVkU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgby0+
c3RydWN0dXJlKCkpOwotICAgIG8tPnN0cnVjdHVyZSgpLT5zZXRFbnVtZXJhdGlvbkNhY2hlKGV4
ZWMtPmdsb2JhbERhdGEoKSwganNQcm9wZXJ0eU5hbWVJdGVyYXRvcik7CisgICAganNQcm9wZXJ0
eU5hbWVJdGVyYXRvci0+c2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4oZXhlYy0+dm0oKSwgc3RydWN0
dXJlQ2hhaW4pOworICAgIGpzUHJvcGVydHlOYW1lSXRlcmF0b3ItPnNldENhY2hlZFN0cnVjdHVy
ZShleGVjLT52bSgpLCBvLT5zdHJ1Y3R1cmUoKSk7CisgICAgby0+c3RydWN0dXJlKCktPnNldEVu
dW1lcmF0aW9uQ2FjaGUoZXhlYy0+dm0oKSwganNQcm9wZXJ0eU5hbWVJdGVyYXRvcik7CiAgICAg
cmV0dXJuIGpzUHJvcGVydHlOYW1lSXRlcmF0b3I7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgJKHJl
dmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVy
dHlOYW1lSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSW1tb3J0YWxTdHJ1Y3R1cmUg
PSB0cnVlOwogICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgICAgIAot
ICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ29tcG91bmRUeXBlLCBPdmVycmlkZXNWaXNpdENo
aWxkcmVuKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDb21wb3VuZFR5cGUsIE92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW4pLCAmc19pbmZvKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKQEAgLTYyLDE1ICs2
MiwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBzaXplX3QgaSk7CiAgICAgICAgIHNpemVfdCBzaXplKCkgeyByZXR1cm4gbV9q
c1N0cmluZ3NTaXplOyB9CiAKLSAgICAgICAgdm9pZCBzZXRDYWNoZWRTdHJ1Y3R1cmUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgdm9pZCBz
ZXRDYWNoZWRTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAg
ewogICAgICAgICAgICAgQVNTRVJUKCFtX2NhY2hlZFN0cnVjdHVyZSk7CiAgICAgICAgICAgICBB
U1NFUlQoc3RydWN0dXJlKTsKLSAgICAgICAgICAgIG1fY2FjaGVkU3RydWN0dXJlLnNldChnbG9i
YWxEYXRhLCB0aGlzLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgbV9jYWNoZWRTdHJ1Y3R1cmUu
c2V0KHZtLCB0aGlzLCBzdHJ1Y3R1cmUpOwogICAgICAgICB9CiAgICAgICAgIFN0cnVjdHVyZSog
Y2FjaGVkU3RydWN0dXJlKCkgeyByZXR1cm4gbV9jYWNoZWRTdHJ1Y3R1cmUuZ2V0KCk7IH0KIAot
ICAgICAgICB2b2lkIHNldENhY2hlZFByb3RvdHlwZUNoYWluKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlQ2hhaW4qIGNhY2hlZFByb3RvdHlwZUNoYWluKSB7IG1fY2FjaGVkUHJv
dG90eXBlQ2hhaW4uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGNhY2hlZFByb3RvdHlwZUNoYWluKTsg
fQorICAgICAgICB2b2lkIHNldENhY2hlZFByb3RvdHlwZUNoYWluKFZNJiB2bSwgU3RydWN0dXJl
Q2hhaW4qIGNhY2hlZFByb3RvdHlwZUNoYWluKSB7IG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uc2V0
KHZtLCB0aGlzLCBjYWNoZWRQcm90b3R5cGVDaGFpbik7IH0KICAgICAgICAgU3RydWN0dXJlQ2hh
aW4qIGNhY2hlZFByb3RvdHlwZUNoYWluKCkgeyByZXR1cm4gbV9jYWNoZWRQcm90b3R5cGVDaGFp
bi5nZXQoKTsgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3Qg
Q2xhc3NJbmZvIHNfaW5mbzsKQEAgLTc4LDEwICs3OCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWVBcnJheURhdGEqIHByb3BlcnR5TmFtZUFycmF5RGF0YSwgSlNPYmplY3Qq
IG9iamVjdCkKICAgICAgICAgewotICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhl
Yy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMt
PnZtKCkpOwogICAgICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXlEYXRhOjpQcm9wZXJ0eU5hbWVW
ZWN0b3ImIHByb3BlcnR5TmFtZVZlY3RvciA9IHByb3BlcnR5TmFtZUFycmF5RGF0YS0+cHJvcGVy
dHlOYW1lVmVjdG9yKCk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fanNT
dHJpbmdzU2l6ZTsgKytpKQotICAgICAgICAgICAgICAgIG1fanNTdHJpbmdzW2ldLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIGpzT3duZWRTdHJpbmcoZXhlYywgcHJvcGVydHlOYW1lVmVj
dG9yW2ldLnN0cmluZygpKSk7CisgICAgICAgICAgICAgICAgbV9qc1N0cmluZ3NbaV0uc2V0KGV4
ZWMtPnZtKCksIHRoaXMsIGpzT3duZWRTdHJpbmcoZXhlYywgcHJvcGVydHlOYW1lVmVjdG9yW2ld
LnN0cmluZygpKSk7CiAgICAgICAgICAgICBtX2NhY2hlZFN0cnVjdHVyZUlubGluZUNhcGFjaXR5
ID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5saW5lQ2FwYWNpdHkoKTsKICAgICAgICAgfQogCkBA
IC0xMDgsOSArMTA4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBtX2VudW1l
cmF0aW9uQ2FjaGUuZ2V0KCk7CiAgICAgfQogICAgIAotICAgIGlubGluZSB2b2lkIFN0cnVjdHVy
ZVJhcmVEYXRhOjpzZXRFbnVtZXJhdGlvbkNhY2hlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
Y29uc3QgU3RydWN0dXJlKiBvd25lciwgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogdmFsdWUpCisg
ICAgaW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNldEVudW1lcmF0aW9uQ2FjaGUoVk0m
IHZtLCBjb25zdCBTdHJ1Y3R1cmUqIG93bmVyLCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiB2YWx1
ZSkKICAgICB7Ci0gICAgICAgIG1fZW51bWVyYXRpb25DYWNoZS5zZXQoZ2xvYmFsRGF0YSwgb3du
ZXIsIHZhbHVlKTsKKyAgICAgICAgbV9lbnVtZXJhdGlvbkNhY2hlLnNldCh2bSwgb3duZXIsIHZh
bHVlKTsKICAgICB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nywx
MyArNDcsMTMgQEAgdm9pZCBKU1Byb3h5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbAogICAg
IHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3RhcmdldCk7CiB9CiAKLXZvaWQgSlNQcm94
eTo6c2V0VGFyZ2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKK3ZvaWQgSlNQcm94eTo6c2V0VGFyZ2V0KFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBBU1NFUlRfQVJHKGdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0KTsKLSAgICBtX3RhcmdldC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgZ2xvYmFsT2JqZWN0
KTsKLSAgICBzZXRQcm90b3R5cGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LT5wcm90b3R5cGUo
KSk7CisgICAgbV90YXJnZXQuc2V0KHZtLCB0aGlzLCBnbG9iYWxPYmplY3QpOworICAgIHNldFBy
b3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LT5wcm90b3R5cGUoKSk7CiAKLSAgICBQcm90b3R5cGVN
YXAmIHByb3RvdHlwZU1hcCA9IGdsb2JhbERhdGEucHJvdG90eXBlTWFwOworICAgIFByb3RvdHlw
ZU1hcCYgcHJvdG90eXBlTWFwID0gdm0ucHJvdG90eXBlTWFwOwogICAgIGlmICghcHJvdG90eXBl
TWFwLmlzUHJvdG90eXBlKHRoaXMpKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzQs
MTYgKzM0LDE2IEBAIGNsYXNzIEpTUHJveHkgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmoKIHB1
YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0
aWMgSlNQcm94eSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTT2JqZWN0KiB0YXJnZXQpCisgICAgc3RhdGljIEpTUHJveHkqIGNyZWF0ZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogdGFyZ2V0KQogICAgIHsKLSAg
ICAgICAgSlNQcm94eSogcHJveHkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1Byb3h5
PihnbG9iYWxEYXRhLmhlYXApKSBKU1Byb3h5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAg
ICAgIHByb3h5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCB0YXJnZXQpOworICAgICAgICBK
U1Byb3h5KiBwcm94eSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTUHJveHk+KHZtLmhl
YXApKSBKU1Byb3h5KHZtLCBzdHJ1Y3R1cmUpOworICAgICAgICBwcm94eS0+ZmluaXNoQ3JlYXRp
b24odm0sIHRhcmdldCk7CiAgICAgICAgIHJldHVybiBwcm94eTsKICAgICB9CiAKLSAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oUHJveHlUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhQ
cm94eVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGlj
IEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKQEAgLTUxLDI3ICs1MSwyNyBA
QCBwdWJsaWM6CiAgICAgSlNPYmplY3QqIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0
LmdldCgpOyB9CiAKIHByb3RlY3RlZDoKLSAgICBKU1Byb3h5KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgIDogSlNEZXN0cnVjdGlibGVPYmpl
Y3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQorICAgIEpTUHJveHkoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0Rlc3RydWN0aWJsZU9iamVjdCh2bSwgc3RydWN0dXJl
KQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICB7Ci0gICAg
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CiAgICAgfQogCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTT2JqZWN0KiB0YXJnZXQpCisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIEpTT2JqZWN0KiB0YXJnZXQpCiAgICAgewotICAgICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICAgICAgbV90YXJnZXQuc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHRhcmdldCk7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAg
ICAgbV90YXJnZXQuc2V0KHZtLCB0aGlzLCB0YXJnZXQpOwogICAgIH0KIAogICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwg
SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVy
byB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBzZXRUYXJnZXQoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmplY3Qq
KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldFRhcmdldChWTSYsIEpTR2xvYmFsT2Jq
ZWN0Kik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShj
b25zdCBKU09iamVjdCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJ
KHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2Nv
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNyArMTg3LDcgQEAgc3RhdGljIGJvb2wgZXhl
Y3V0ZVJlc29sdmVPcGVyYXRpb25zKENhbAogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBwYy0+bV9zdHJ1Y3R1cmUuc2V0KGNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUo
KSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIHBjLT5tX3N0cnVjdHVyZS5zZXQoY2FsbEZyYW1l
LT52bSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0
dXJlKTsKICAgICAgICAgICAgIHBjLT5tX29mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CiAg
ICAgICAgICAgICByZXN1bHQuc2V0VmFsdWUodmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC0zMDMsNyArMzAzLDcgQEAgdGVtcGxhdGUgPEpTU2NvcGU6Okxvb2t1cE1vZGUgbW9k
ZSwgSlNTYwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB1dFRvQmFzZU9wZXJhdGlvbikg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFRvQmFzZU9wZXJhdGlvbi0+bV9pc0R5
bmFtaWMgPSByZXF1aXJlc0R5bmFtaWNDaGVja3M7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHV0VG9CYXNlT3BlcmF0aW9uLT5tX2tpbmQgPSBQdXRUb0Jhc2VPcGVyYXRpb246Okdsb2Jh
bFByb3BlcnR5UHV0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFRvQmFzZU9wZXJh
dGlvbi0+bV9zdHJ1Y3R1cmUuc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwgZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0VG9CYXNlT3BlcmF0aW9uLT5tX3N0
cnVjdHVyZS5zZXQoY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25l
ckV4ZWN1dGFibGUoKSwgZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0UHV0UHJvcGVydHlBY2Nlc3NPZmZzZXQocHV0VG9CYXNlT3BlcmF0
aW9uLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmV0dXJuVmFsdWVzKSB7CkBAIC0zNDYsNyAr
MzQ2LDcgQEAgdGVtcGxhdGUgPEpTU2NvcGU6Okxvb2t1cE1vZGUgbW9kZSwgSlNTYwogCiAgICAg
ICAgICAgICAgICAgICAgIGlmIChwdXRUb0Jhc2VPcGVyYXRpb24pIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1dFRvQmFzZU9wZXJhdGlvbi0+bV9raW5kID0gZW50cnkuaXNSZWFkT25seSgp
ID8gUHV0VG9CYXNlT3BlcmF0aW9uOjpSZWFkb25seSA6IFB1dFRvQmFzZU9wZXJhdGlvbjo6VmFy
aWFibGVQdXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXRUb0Jhc2VPcGVyYXRpb24tPm1f
c3RydWN0dXJlLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcHV0VG9C
YXNlT3BlcmF0aW9uLT5tX3N0cnVjdHVyZS5zZXQoY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBwdXRUb0Jhc2VPcGVyYXRpb24tPm1fb2Zmc2V0ID0gZW50cnkuZ2V0SW5kZXgoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1dFRvQmFzZU9wZXJhdGlvbi0+bV9zY29wZURlcHRoID0gKHNr
aXBUb3BTY29wZU5vZGUgPyAxIDogMCkgKyBzY29wZUNvdW50OwogICAgICAgICAgICAgICAgICAg
ICB9CkBAIC00OTksNyArNDk5LDcgQEAgSlNWYWx1ZSBKU1Njb3BlOjpyZXNvbHZlV2l0aEJhc2Uo
Q2FsbEZyYQogICAgIGlmIChKU09iamVjdCogcHJvcGVydHlCYXNlID0gSlNTY29wZTo6cmVzb2x2
ZUNvbnRhaW5pbmdTY29wZTxSZXR1cm5CYXNlQW5kVmFsdWU+KGNhbGxGcmFtZSwgaWRlbnRpZmll
ciwgc2xvdCwgb3BlcmF0aW9ucywgcHV0VG9CYXNlT3BlcmF0aW9ucywgZmFsc2UpKSB7CiAgICAg
ICAgIEFTU0VSVChvcGVyYXRpb25zLT5zaXplKCkpOwogICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
c2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50aWZpZXIpOwotICAgICAgICBpZiAoY2FsbEZy
YW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uKQorICAgICAgICBpZiAoY2FsbEZyYW1lLT52bSgp
LmV4Y2VwdGlvbikKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAgICAgICAgKmJh
c2UgPSBwcm9wZXJ0eUJhc2U7CkBAIC01MjksNyArNTI5LDcgQEAgSlNWYWx1ZSBKU1Njb3BlOjpy
ZXNvbHZlV2l0aFRoaXMoQ2FsbEZyYQogICAgIGlmIChKU09iamVjdCogcHJvcGVydHlCYXNlID0g
SlNTY29wZTo6cmVzb2x2ZUNvbnRhaW5pbmdTY29wZTxSZXR1cm5UaGlzQW5kVmFsdWU+KGNhbGxG
cmFtZSwgaWRlbnRpZmllciwgc2xvdCwgb3BlcmF0aW9ucywgMCwgZmFsc2UpKSB7CiAgICAgICAg
IEFTU0VSVChvcGVyYXRpb25zLT5zaXplKCkpOwogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc2xv
dC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50aWZpZXIpOwotICAgICAgICBpZiAoY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uKQorICAgICAgICBpZiAoY2FsbEZyYW1lLT52bSgpLmV4
Y2VwdGlvbikKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIEFTU0VSVCh2
YWx1ZSk7CiAgICAgICAgICpiYXNlID0gcHJvcGVydHlCYXNlLT5zdHJ1Y3R1cmUoKS0+dHlwZUlu
Zm8oKS5pc0Vudmlyb25tZW50UmVjb3JkKCkgPyBqc1VuZGVmaW5lZCgpIDogSlNWYWx1ZShwcm9w
ZXJ0eUJhc2UpOwpAQCAtNTY0LDcgKzU2NCw3IEBAIHZvaWQgSlNTY29wZTo6cmVzb2x2ZVB1dChD
YWxsRnJhbWUqIGNhbGwKICAgICAgICAgICAgICAgICBnb3RvIGdlbmVyaWNIYW5kbGVyOwogICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIG9wZXJhdGlvbi0+bV9yZWdpc3RlckFkZHJl
c3MtPnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgYmFzZS5hc0NlbGwoKSwgdmFsdWUpOwor
ICAgICAgICBvcGVyYXRpb24tPm1fcmVnaXN0ZXJBZGRyZXNzLT5zZXQoY2FsbEZyYW1lLT52bSgp
LCBiYXNlLmFzQ2VsbCgpLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgUHV0
VG9CYXNlT3BlcmF0aW9uOjpWYXJpYWJsZVB1dDogewpAQCAtNTc0LDcgKzU3NCw3IEBAIHZvaWQg
SlNTY29wZTo6cmVzb2x2ZVB1dChDYWxsRnJhbWUqIGNhbGwKICAgICAgICAgICAgICAgICBnb3Rv
IGdlbmVyaWNIYW5kbGVyOwogICAgICAgICB9CiAgICAgICAgIEpTVmFyaWFibGVPYmplY3QqIHZh
cmlhYmxlT2JqZWN0ID0ganNDYXN0PEpTVmFyaWFibGVPYmplY3QqPihiYXNlKTsKLSAgICAgICAg
dmFyaWFibGVPYmplY3QtPnJlZ2lzdGVyQXQob3BlcmF0aW9uLT5tX29mZnNldCkuc2V0KGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLCB2YXJpYWJsZU9iamVjdCwgdmFsdWUpOworICAgICAgICB2YXJp
YWJsZU9iamVjdC0+cmVnaXN0ZXJBdChvcGVyYXRpb24tPm1fb2Zmc2V0KS5zZXQoY2FsbEZyYW1l
LT52bSgpLCB2YXJpYWJsZU9iamVjdCwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC01ODIsNyArNTgyLDcgQEAgdm9pZCBKU1Njb3BlOjpyZXNvbHZlUHV0KENhbGxGcmFtZSog
Y2FsbAogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oYmFzZSk7
CiAgICAgICAgIGlmIChvcGVyYXRpb24tPm1fc3RydWN0dXJlLmdldCgpICE9IG9iamVjdC0+c3Ry
dWN0dXJlKCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgb2JqZWN0LT5wdXREaXJlY3Qo
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG9wZXJhdGlvbi0+bV9vZmZzZXQsIHZhbHVlKTsKKyAg
ICAgICAgb2JqZWN0LT5wdXREaXJlY3QoY2FsbEZyYW1lLT52bSgpLCBvcGVyYXRpb24tPm1fb2Zm
c2V0LCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTYwNyw3ICs2MDcsNyBA
QCB2b2lkIEpTU2NvcGU6OnJlc29sdmVQdXQoQ2FsbEZyYW1lKiBjYWxsCiAgICAgaWYgKHNsb3Qu
YmFzZSgpICE9IGJhc2VPYmplY3QpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIWJhc2VP
YmplY3QtPmhhc0lubGluZVN0b3JhZ2UoKSk7Ci0gICAgb3BlcmF0aW9uLT5tX3N0cnVjdHVyZS5z
ZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVy
RXhlY3V0YWJsZSgpLCBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKSk7CisgICAgb3BlcmF0aW9uLT5t
X3N0cnVjdHVyZS5zZXQoY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5v
d25lckV4ZWN1dGFibGUoKSwgYmFzZU9iamVjdC0+c3RydWN0dXJlKCkpOwogICAgIHNldFB1dFBy
b3BlcnR5QWNjZXNzT2Zmc2V0KG9wZXJhdGlvbiwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAg
cmV0dXJuOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29w
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMSArNTksMTEgQEAgcHVibGljOgogICAgIGludCBs
b2NhbERlcHRoKCk7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCk7Ci0gICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKCk7CisgICAgVk0qIHZtKCk7CiAgICAgSlNPYmplY3Qq
IGdsb2JhbFRoaXMoKTsKIAogcHJvdGVjdGVkOgotICAgIEpTU2NvcGUoSlNHbG9iYWxEYXRhJiwg
U3RydWN0dXJlKiwgSlNTY29wZSogbmV4dCk7CisgICAgSlNTY29wZShWTSYsIFN0cnVjdHVyZSos
IEpTU2NvcGUqIG5leHQpOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogcHJp
dmF0ZToKQEAgLTgwLDkgKzgwLDkgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8UmV0dXJuVmFs
dWVzPiBzdGF0aWMgSlNPYmplY3QqIHJlc29sdmVDb250YWluaW5nU2NvcGUoQ2FsbEZyYW1lKiwg
Y29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYsIFJlc29sdmVPcGVyYXRpb25zKiwgUHV0
VG9CYXNlT3BlcmF0aW9uKiwgYm9vbCBpc1N0cmljdCk7CiB9OwogCi1pbmxpbmUgSlNTY29wZTo6
SlNTY29wZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U1Njb3BlKiBuZXh0KQotICAgIDogQmFzZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCi0gICAgLCBt
X25leHQoZ2xvYmFsRGF0YSwgdGhpcywgbmV4dCwgV3JpdGVCYXJyaWVyPEpTU2NvcGU+OjpNYXlC
ZU51bGwpCitpbmxpbmUgSlNTY29wZTo6SlNTY29wZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU1Njb3BlKiBuZXh0KQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICwgbV9u
ZXh0KHZtLCB0aGlzLCBuZXh0LCBXcml0ZUJhcnJpZXI8SlNTY29wZT46Ok1heUJlTnVsbCkKIHsK
IH0KIApAQCAtMTI3LDkgKzEyNyw5IEBAIGlubGluZSBKU0dsb2JhbE9iamVjdCogSlNTY29wZTo6
Z2xvYmFsT2IKICAgICByZXR1cm4gc3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpOwogfQogCi1p
bmxpbmUgSlNHbG9iYWxEYXRhKiBKU1Njb3BlOjpnbG9iYWxEYXRhKCkKK2lubGluZSBWTSogSlNT
Y29wZTo6dm0oKQogeyAKLSAgICByZXR1cm4gSGVhcDo6aGVhcCh0aGlzKS0+Z2xvYmFsRGF0YSgp
OworICAgIHJldHVybiBIZWFwOjpoZWFwKHRoaXMpLT52bSgpOwogfQogCiBpbmxpbmUgUmVnaXN0
ZXImIFJlZ2lzdGVyOjpvcGVyYXRvcj0oSlNTY29wZSogc2NvcGUpCkBAIC0xNDMsMTAgKzE0Mywx
MCBAQCBpbmxpbmUgSlNTY29wZSogUmVnaXN0ZXI6OnNjb3BlKCkgY29uc3QKICAgICByZXR1cm4g
anNDYXN0PEpTU2NvcGUqPihqc1ZhbHVlKCkpOwogfQogCi1pbmxpbmUgSlNHbG9iYWxEYXRhJiBF
eGVjU3RhdGU6Omdsb2JhbERhdGEoKSBjb25zdAoraW5saW5lIFZNJiBFeGVjU3RhdGU6OnZtKCkg
Y29uc3QKIHsKLSAgICBBU1NFUlQoc2NvcGUoKS0+Z2xvYmFsRGF0YSgpKTsKLSAgICByZXR1cm4g
KnNjb3BlKCktPmdsb2JhbERhdGEoKTsKKyAgICBBU1NFUlQoc2NvcGUoKS0+dm0oKSk7CisgICAg
cmV0dXJuICpzY29wZSgpLT52bSgpOwogfQogCiBpbmxpbmUgSlNHbG9iYWxPYmplY3QqIEV4ZWNT
dGF0ZTo6bGV4aWNhbEdsb2JhbE9iamVjdCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5o
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDE0ICs4MiwxNCBA
QCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEpTU3ltYm9sVGFibGVPYmplY3Q6OlN0
cnVjdHVyZUZsYWdzOwogCi0gICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1Njb3BlKiBzY29wZSkKLSAg
ICAgICAgOiBKU1N5bWJvbFRhYmxlT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgc2NvcGUp
CisgICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU1Njb3BlKiBzY29wZSkKKyAgICAgICAgOiBKU1N5bWJvbFRhYmxlT2JqZWN0KHZtLCBz
dHJ1Y3R1cmUsIHNjb3BlKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAg
ICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgfQogCiAgICAgU2VnbWVudGVkVmVj
dG9yPFdyaXRlQmFycmllcjxVbmtub3duPiwgMTY+IG1fcmVnaXN0ZXJzOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gMTQ4NjU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw3ICs0MCw3IEBAIHZvaWQgSlNSb3BlU3RyaW5nOjpSb3BlQnVpbGRlcjo6ZXhw
YW5kKCkKIHsKICAgICBBU1NFUlQobV9pbmRleCA9PSBKU1JvcGVTdHJpbmc6OnNfbWF4SW50ZXJu
YWxSb3BlTGVuZ3RoKTsKICAgICBKU1N0cmluZyoganNTdHJpbmcgPSBtX2pzU3RyaW5nOwotICAg
IG1fanNTdHJpbmcgPSBqc1N0cmluZ0J1aWxkZXIoJm1fZ2xvYmFsRGF0YSk7CisgICAgbV9qc1N0
cmluZyA9IGpzU3RyaW5nQnVpbGRlcigmbV92bSk7CiAgICAgbV9pbmRleCA9IDA7CiAgICAgYXBw
ZW5kKGpzU3RyaW5nKTsKIH0KQEAgLTI2MSw4ICsyNjEsOCBAQCBkb3VibGUgSlNTdHJpbmc6OnRv
TnVtYmVyKEV4ZWNTdGF0ZSogZXhlCiAKIGlubGluZSBTdHJpbmdPYmplY3QqIFN0cmluZ09iamVj
dDo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNTdHJpbmcqIHN0cmluZykKIHsKLSAgICBTdHJpbmdPYmplY3QqIG9iamVjdCA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPFN0cmluZ09iamVjdD4oKmV4ZWMtPmhlYXAoKSkpIFN0cmluZ09i
amVjdChleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+c3RyaW5nT2JqZWN0U3RydWN0
dXJlKCkpOwotICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBz
dHJpbmcpOworICAgIFN0cmluZ09iamVjdCogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8U3RyaW5nT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgU3RyaW5nT2JqZWN0KGV4ZWMtPnZt
KCksIGdsb2JhbE9iamVjdC0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCkpOworICAgIG9iamVjdC0+
ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwgc3RyaW5nKTsKICAgICByZXR1cm4gb2JqZWN0Owog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlz
aW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDM0ICszNSwzNCBAQCBjbGFzcyBKU1N0cmluZzsKIGNsYXNz
IEpTUm9wZVN0cmluZzsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotSlNTdHJpbmcq
IGpzRW1wdHlTdHJpbmcoSlNHbG9iYWxEYXRhKik7CitKU1N0cmluZyoganNFbXB0eVN0cmluZyhW
TSopOwogSlNTdHJpbmcqIGpzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKik7Ci1KU1N0cmluZyoganNT
dHJpbmcoSlNHbG9iYWxEYXRhKiwgY29uc3QgU3RyaW5nJik7IC8vIHJldHVybnMgZW1wdHkgc3Ry
aW5nIGlmIHBhc3NlZCBudWxsIHN0cmluZworSlNTdHJpbmcqIGpzU3RyaW5nKFZNKiwgY29uc3Qg
U3RyaW5nJik7IC8vIHJldHVybnMgZW1wdHkgc3RyaW5nIGlmIHBhc3NlZCBudWxsIHN0cmluZwog
SlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOyAvLyByZXR1cm5z
IGVtcHR5IHN0cmluZyBpZiBwYXNzZWQgbnVsbCBzdHJpbmcKIAotSlNTdHJpbmcqIGpzU2luZ2xl
Q2hhcmFjdGVyU3RyaW5nKEpTR2xvYmFsRGF0YSosIFVDaGFyKTsKK0pTU3RyaW5nKiBqc1Npbmds
ZUNoYXJhY3RlclN0cmluZyhWTSosIFVDaGFyKTsKIEpTU3RyaW5nKiBqc1NpbmdsZUNoYXJhY3Rl
clN0cmluZyhFeGVjU3RhdGUqLCBVQ2hhcik7CiBKU1N0cmluZyoganNTaW5nbGVDaGFyYWN0ZXJT
dWJzdHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgb2Zmc2V0KTsKLUpT
U3RyaW5nKiBqc1N1YnN0cmluZyhKU0dsb2JhbERhdGEqLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CitKU1N0cmluZyoganNTdWJzdHJpbmcoVk0qLCBj
b25zdCBTdHJpbmcmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiBKU1N0cmlu
ZyoganNTdWJzdHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAvLyBOb24tdHJpdmlhbCBzdHJpbmdzIGFyZSB0d28gb3Ig
bW9yZSBjaGFyYWN0ZXJzIGxvbmcuCiAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIGZhc3RlciB0aGFu
IGp1c3QgY2FsbGluZyBqc1N0cmluZy4KLUpTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoSlNH
bG9iYWxEYXRhKiwgY29uc3QgU3RyaW5nJik7CitKU1N0cmluZyoganNOb250cml2aWFsU3RyaW5n
KFZNKiwgY29uc3QgU3RyaW5nJik7CiBKU1N0cmluZyoganNOb250cml2aWFsU3RyaW5nKEV4ZWNT
dGF0ZSosIGNvbnN0IFN0cmluZyYpOwogCiAvLyBTaG91bGQgYmUgdXNlZCBmb3Igc3RyaW5ncyB0
aGF0IGFyZSBvd25lZCBieSBhbiBvYmplY3QgdGhhdCB3aWxsCiAvLyBsaWtlbHkgb3V0bGl2ZSB0
aGUgSlNWYWx1ZSB0aGlzIG1ha2VzLCBzdWNoIGFzIHRoZSBwYXJzZSB0cmVlIG9yIGEKIC8vIERP
TSBvYmplY3QgdGhhdCBjb250YWlucyBhIFN0cmluZwotSlNTdHJpbmcqIGpzT3duZWRTdHJpbmco
SlNHbG9iYWxEYXRhKiwgY29uc3QgU3RyaW5nJik7CitKU1N0cmluZyoganNPd25lZFN0cmluZyhW
TSosIGNvbnN0IFN0cmluZyYpOwogSlNTdHJpbmcqIGpzT3duZWRTdHJpbmcoRXhlY1N0YXRlKiwg
Y29uc3QgU3RyaW5nJik7CiAKLUpTUm9wZVN0cmluZyoganNTdHJpbmdCdWlsZGVyKEpTR2xvYmFs
RGF0YSopOworSlNSb3BlU3RyaW5nKiBqc1N0cmluZ0J1aWxkZXIoVk0qKTsKIAogY2xhc3MgSlNT
dHJpbmcgOiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgSklUOwot
ICAgIGZyaWVuZCBjbGFzcyBKU0dsb2JhbERhdGE7CisgICAgZnJpZW5kIGNsYXNzIFZNOwogICAg
IGZyaWVuZCBjbGFzcyBTcGVjaWFsaXplZFRodW5rSklUOwogICAgIGZyaWVuZCBjbGFzcyBKU1Jv
cGVTdHJpbmc7CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtTdGFjazsKQEAgLTc2LDYzICs3Niw2MyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogcHJpdmF0ZToK
LSAgICBKU1N0cmluZyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gdmFsdWUpCi0gICAgICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3Ry
aW5nU3RydWN0dXJlLmdldCgpKQorICAgIEpTU3RyaW5nKFZNJiB2bSwgUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiB2YWx1ZSkKKyAgICAgICAgOiBKU0NlbGwodm0sIHZtLnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSkKICAgICAgICAgLCBtX2ZsYWdzKDApCiAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKICAg
ICB7CiAgICAgfQogCi0gICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAg
ICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkKKyAgICBKU1N0cmluZyhWTSYgdm0pCisgICAgICAgIDogSlNDZWxsKHZtLCB2bS5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgICwgbV9mbGFncygwKQogICAgIHsKICAgICB9CiAKLSAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IGxl
bmd0aCkKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSwgc2l6ZV90IGxlbmd0aCkKICAg
ICB7CiAgICAgICAgIEFTU0VSVCghbV92YWx1ZS5pc051bGwoKSk7Ci0gICAgICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgICAgIG1fbGVuZ3RoID0gbGVuZ3RoOwogICAgICAgICBzZXRJczhCaXQobV92YWx1
ZS5pbXBsKCktPmlzOEJpdCgpKTsKLSAgICAgICAgZ2xvYmFsRGF0YS5tX25ld1N0cmluZ3NTaW5j
ZUxhc3RIYXNoQ29ucysrOworICAgICAgICB2bS5tX25ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29u
cysrOwogICAgIH0KIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgY29zdCkKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgc2l6ZV90IGxlbmd0aCwgc2l6ZV90IGNvc3QpCiAgICAgewogICAgICAgICBB
U1NFUlQoIW1fdmFsdWUuaXNOdWxsKCkpOwotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihn
bG9iYWxEYXRhKTsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICBt
X2xlbmd0aCA9IGxlbmd0aDsKICAgICAgICAgc2V0SXM4Qml0KG1fdmFsdWUuaW1wbCgpLT5pczhC
aXQoKSk7CiAgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChj
b3N0KTsKLSAgICAgICAgZ2xvYmFsRGF0YS5tX25ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29ucysr
OworICAgICAgICB2bS5tX25ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29ucysrOwogICAgIH0KIAog
cHJvdGVjdGVkOgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIHsKLSAgICAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICAgICAgbV9sZW5ndGggPSAwOwogICAgICAgICBzZXRJczhCaXQodHJ1ZSk7
Ci0gICAgICAgIGdsb2JhbERhdGEubV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMrKzsKKyAg
ICAgICAgdm0ubV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMrKzsKICAgICB9CiAgICAgICAg
IAogcHVibGljOgotICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB2YWx1ZSkKKyAgICBzdGF0aWMgSlNTdHJp
bmcqIGNyZWF0ZShWTSYgdm0sIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdmFsdWUpCiAgICAgewog
ICAgICAgICBBU1NFUlQodmFsdWUpOwogICAgICAgICBzaXplX3QgbGVuZ3RoID0gdmFsdWUtPmxl
bmd0aCgpOwogICAgICAgICBzaXplX3QgY29zdCA9IHZhbHVlLT5jb3N0KCk7Ci0gICAgICAgIEpT
U3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0cmluZz4o
Z2xvYmFsRGF0YS5oZWFwKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgdmFsdWUpOwotICAgICAgICBu
ZXdTdHJpbmctPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIGxlbmd0aCwgY29zdCk7CisgICAg
ICAgIEpTU3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0
cmluZz4odm0uaGVhcCkpIEpTU3RyaW5nKHZtLCB2YWx1ZSk7CisgICAgICAgIG5ld1N0cmluZy0+
ZmluaXNoQ3JlYXRpb24odm0sIGxlbmd0aCwgY29zdCk7CiAgICAgICAgIHJldHVybiBuZXdTdHJp
bmc7CiAgICAgfQotICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlSGFzT3RoZXJPd25lcihKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdmFsdWUpCisgICAg
c3RhdGljIEpTU3RyaW5nKiBjcmVhdGVIYXNPdGhlck93bmVyKFZNJiB2bSwgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgICAg
IHNpemVfdCBsZW5ndGggPSB2YWx1ZS0+bGVuZ3RoKCk7Ci0gICAgICAgIEpTU3RyaW5nKiBuZXdT
dHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0cmluZz4oZ2xvYmFsRGF0YS5o
ZWFwKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgdmFsdWUpOwotICAgICAgICBuZXdTdHJpbmctPmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIGxlbmd0aCk7CisgICAgICAgIEpTU3RyaW5nKiBuZXdT
dHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1N0cmluZz4odm0uaGVhcCkpIEpT
U3RyaW5nKHZtLCB2YWx1ZSk7CisgICAgICAgIG5ld1N0cmluZy0+ZmluaXNoQ3JlYXRpb24odm0s
IGxlbmd0aCk7CiAgICAgICAgIHJldHVybiBuZXdTdHJpbmc7CiAgICAgfQogCkBAIC0xNTMsOSAr
MTUzLDkgQEAgcHVibGljOgogICAgIGJvb2wgY2FuR2V0SW5kZXgodW5zaWduZWQgaSkgeyByZXR1
cm4gaSA8IG1fbGVuZ3RoOyB9CiAgICAgSlNTdHJpbmcqIGdldEluZGV4KEV4ZWNTdGF0ZSosIHVu
c2lnbmVkKTsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG8pCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKICAgICB7Ci0gICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3Rv
LCBUeXBlSW5mbyhTdHJpbmdUeXBlLCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRl
cmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKSwg
JnNfaW5mbyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90bywgVHlwZUluZm8oU3RyaW5nVHlwZSwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElz
Tm90WmVybyksICZzX2luZm8pOwogICAgIH0KIAogICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZM
ZW5ndGgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNTdHJpbmcsIG1fbGVuZ3RoKTsgfQpA
QCAtMjE1LDEzICsyMTUsMTMgQEAgcHJpdmF0ZToKIGNsYXNzIEpTUm9wZVN0cmluZyA6IHB1Ymxp
YyBKU1N0cmluZyB7CiAgICAgZnJpZW5kIGNsYXNzIEpTU3RyaW5nOwogCi0gICAgZnJpZW5kIEpT
Um9wZVN0cmluZyoganNTdHJpbmdCdWlsZGVyKEpTR2xvYmFsRGF0YSopOworICAgIGZyaWVuZCBK
U1JvcGVTdHJpbmcqIGpzU3RyaW5nQnVpbGRlcihWTSopOwogCiAgICAgY2xhc3MgUm9wZUJ1aWxk
ZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgUm9wZUJ1aWxkZXIoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQotICAgICAgICAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKLSAgICAgICAg
ICAgICwgbV9qc1N0cmluZyhqc1N0cmluZ0J1aWxkZXIoJmdsb2JhbERhdGEpKQorICAgICAgICBS
b3BlQnVpbGRlcihWTSYgdm0pCisgICAgICAgICAgICA6IG1fdm0odm0pCisgICAgICAgICAgICAs
IG1fanNTdHJpbmcoanNTdHJpbmdCdWlsZGVyKCZ2bSkpCiAgICAgICAgICAgICAsIG1faW5kZXgo
MCkKICAgICAgICAgewogICAgICAgICB9CkBAIC0yMzAsNyArMjMwLDcgQEAgY2xhc3MgSlNSb3Bl
U3RyaW5nIDogcHVibGljIEpTU3RyaW5nIHsKICAgICAgICAgewogICAgICAgICAgICAgaWYgKG1f
aW5kZXggPT0gSlNSb3BlU3RyaW5nOjpzX21heEludGVybmFsUm9wZUxlbmd0aCkKICAgICAgICAg
ICAgICAgICBleHBhbmQoKTsKLSAgICAgICAgICAgIG1fanNTdHJpbmctPmFwcGVuZChtX2dsb2Jh
bERhdGEsIG1faW5kZXgrKywganNTdHJpbmcpOworICAgICAgICAgICAgbV9qc1N0cmluZy0+YXBw
ZW5kKG1fdm0sIG1faW5kZXgrKywganNTdHJpbmcpOwogICAgICAgICB9CiAKICAgICAgICAgSlNS
b3BlU3RyaW5nKiByZWxlYXNlKCkKQEAgLTI0NSw2NiArMjQ1LDY2IEBAIGNsYXNzIEpTUm9wZVN0
cmluZyA6IHB1YmxpYyBKU1N0cmluZyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBleHBh
bmQoKTsKICAgICAgICAgICAgIAotICAgICAgICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsK
KyAgICAgICAgVk0mIG1fdm07CiAgICAgICAgIEpTUm9wZVN0cmluZyogbV9qc1N0cmluZzsKICAg
ICAgICAgc2l6ZV90IG1faW5kZXg7CiAgICAgfTsKICAgICAgICAgCiBwcml2YXRlOgotICAgIEpT
Um9wZVN0cmluZyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgICAgIDogSlNTdHJpbmco
Z2xvYmFsRGF0YSkKKyAgICBKU1JvcGVTdHJpbmcoVk0mIHZtKQorICAgICAgICA6IEpTU3RyaW5n
KHZtKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIpCisgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIEpTU3RyaW5nKiBzMSwgSlNTdHJpbmcqIHMyKQogICAgIHsKLSAg
ICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgbV9sZW5ndGggPSBzMS0+bGVuZ3RoKCkgKyBzMi0+
bGVuZ3RoKCk7CiAgICAgICAgIHNldElzOEJpdChzMS0+aXM4Qml0KCkgJiYgczItPmlzOEJpdCgp
KTsKLSAgICAgICAgbV9maWJlcnNbMF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMxKTsKLSAgICAg
ICAgbV9maWJlcnNbMV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMyKTsKKyAgICAgICAgbV9maWJl
cnNbMF0uc2V0KHZtLCB0aGlzLCBzMSk7CisgICAgICAgIG1fZmliZXJzWzFdLnNldCh2bSwgdGhp
cywgczIpOwogICAgIH0KICAgICAgICAgCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTU3RyaW5nKiBzMSwgSlNTdHJpbmcqIHMyLCBKU1N0cmluZyog
czMpCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTU3RyaW5nKiBzMSwgSlNTdHJp
bmcqIHMyLCBKU1N0cmluZyogczMpCiAgICAgewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bihnbG9iYWxEYXRhKTsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAg
ICBtX2xlbmd0aCA9IHMxLT5sZW5ndGgoKSArIHMyLT5sZW5ndGgoKSArIHMzLT5sZW5ndGgoKTsK
ICAgICAgICAgc2V0SXM4Qml0KHMxLT5pczhCaXQoKSAmJiBzMi0+aXM4Qml0KCkgJiYgIHMzLT5p
czhCaXQoKSk7Ci0gICAgICAgIG1fZmliZXJzWzBdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMSk7
Ci0gICAgICAgIG1fZmliZXJzWzFdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMik7Ci0gICAgICAg
IG1fZmliZXJzWzJdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMyk7CisgICAgICAgIG1fZmliZXJz
WzBdLnNldCh2bSwgdGhpcywgczEpOworICAgICAgICBtX2ZpYmVyc1sxXS5zZXQodm0sIHRoaXMs
IHMyKTsKKyAgICAgICAgbV9maWJlcnNbMl0uc2V0KHZtLCB0aGlzLCBzMyk7CiAgICAgfQogCi0g
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgewotICAgICAgICBKU1N0cmluZzo6ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEpTU3RyaW5nOjpmaW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBlbmQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBz
aXplX3QgaW5kZXgsIEpTU3RyaW5nKiBqc1N0cmluZykKKyAgICB2b2lkIGFwcGVuZChWTSYgdm0s
IHNpemVfdCBpbmRleCwgSlNTdHJpbmcqIGpzU3RyaW5nKQogICAgIHsKLSAgICAgICAgbV9maWJl
cnNbaW5kZXhdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBqc1N0cmluZyk7CisgICAgICAgIG1fZmli
ZXJzW2luZGV4XS5zZXQodm0sIHRoaXMsIGpzU3RyaW5nKTsKICAgICAgICAgbV9sZW5ndGggKz0g
anNTdHJpbmctPm1fbGVuZ3RoOwogICAgICAgICBzZXRJczhCaXQoaXM4Qml0KCkgJiYganNTdHJp
bmctPmlzOEJpdCgpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNSb3BlU3RyaW5nKiBjcmVhdGVO
dWxsKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICBzdGF0aWMgSlNSb3BlU3RyaW5nKiBj
cmVhdGVOdWxsKFZNJiB2bSkKICAgICB7Ci0gICAgICAgIEpTUm9wZVN0cmluZyogbmV3U3RyaW5n
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNSb3BlU3RyaW5nPihnbG9iYWxEYXRhLmhl
YXApKSBKU1JvcGVTdHJpbmcoZ2xvYmFsRGF0YSk7Ci0gICAgICAgIG5ld1N0cmluZy0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEpTUm9wZVN0cmluZyogbmV3U3RyaW5nID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNSb3BlU3RyaW5nPih2bS5oZWFwKSkgSlNSb3Bl
U3RyaW5nKHZtKTsKKyAgICAgICAgbmV3U3RyaW5nLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAg
ICAgIHJldHVybiBuZXdTdHJpbmc7CiAgICAgfQogCiBwdWJsaWM6Ci0gICAgc3RhdGljIEpTU3Ry
aW5nKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1N0cmluZyogczEsIEpTU3Ry
aW5nKiBzMikKKyAgICBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZShWTSYgdm0sIEpTU3RyaW5nKiBz
MSwgSlNTdHJpbmcqIHMyKQogICAgIHsKLSAgICAgICAgSlNSb3BlU3RyaW5nKiBuZXdTdHJpbmcg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1JvcGVTdHJpbmc+KGdsb2JhbERhdGEuaGVh
cCkpIEpTUm9wZVN0cmluZyhnbG9iYWxEYXRhKTsKLSAgICAgICAgbmV3U3RyaW5nLT5maW5pc2hD
cmVhdGlvbihnbG9iYWxEYXRhLCBzMSwgczIpOworICAgICAgICBKU1JvcGVTdHJpbmcqIG5ld1N0
cmluZyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTUm9wZVN0cmluZz4odm0uaGVhcCkp
IEpTUm9wZVN0cmluZyh2bSk7CisgICAgICAgIG5ld1N0cmluZy0+ZmluaXNoQ3JlYXRpb24odm0s
IHMxLCBzMik7CiAgICAgICAgIHJldHVybiBuZXdTdHJpbmc7CiAgICAgfQotICAgIHN0YXRpYyBK
U1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNTdHJpbmcqIHMxLCBK
U1N0cmluZyogczIsIEpTU3RyaW5nKiBzMykKKyAgICBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZShW
TSYgdm0sIEpTU3RyaW5nKiBzMSwgSlNTdHJpbmcqIHMyLCBKU1N0cmluZyogczMpCiAgICAgewot
ICAgICAgICBKU1JvcGVTdHJpbmcqIG5ld1N0cmluZyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEpTUm9wZVN0cmluZz4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNSb3BlU3RyaW5nKGdsb2JhbERh
dGEpOwotICAgICAgICBuZXdTdHJpbmctPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIHMxLCBz
MiwgczMpOworICAgICAgICBKU1JvcGVTdHJpbmcqIG5ld1N0cmluZyA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEpTUm9wZVN0cmluZz4odm0uaGVhcCkpIEpTUm9wZVN0cmluZyh2bSk7Cisg
ICAgICAgIG5ld1N0cmluZy0+ZmluaXNoQ3JlYXRpb24odm0sIHMxLCBzMiwgczMpOwogICAgICAg
ICByZXR1cm4gbmV3U3RyaW5nOwogICAgIH0KIApAQCAtMzM2LDMyICszMzYsMzIgQEAgaW5saW5l
IEpTU3RyaW5nKiBhc1N0cmluZyhKU1ZhbHVlIHZhbHVlKQogICAgIHJldHVybiBqc0Nhc3Q8SlNT
dHJpbmcqPih2YWx1ZS5hc0NlbGwoKSk7CiB9CiAKLWlubGluZSBKU1N0cmluZyoganNFbXB0eVN0
cmluZyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitpbmxpbmUgSlNTdHJpbmcqIGpzRW1wdHlT
dHJpbmcoVk0qIHZtKQogewotICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuZW1w
dHlTdHJpbmcoKTsKKyAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy5lbXB0eVN0cmluZygpOwog
fQogCi1BTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1NpbmdsZUNoYXJhY3RlclN0cmluZyhKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIFVDaGFyIGMpCitBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBq
c1NpbmdsZUNoYXJhY3RlclN0cmluZyhWTSogdm0sIFVDaGFyIGMpCiB7CiAgICAgaWYgKGMgPD0g
bWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+c21h
bGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhnbG9iYWxEYXRhLCBjKTsKLSAgICByZXR1
cm4gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgU3RyaW5nKCZjLCAxKS5pbXBsKCkpOwor
ICAgICAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcodm0s
IGMpOworICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKCp2bSwgU3RyaW5nKCZjLCAxKS5pbXBs
KCkpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1NpbmdsZUNoYXJhY3RlclN1YnN0
cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcywgdW5zaWduZWQgb2Zmc2V0KQog
ewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Cisg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgQVNTRVJUKG9mZnNldCA8IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzLmxlbmd0aCgpKSk7CiAgICAgVUNoYXIgYyA9IHMuY2hhcmFjdGVyQXQob2Zm
c2V0KTsKICAgICBpZiAoYyA8PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpCi0gICAgICAgIHJl
dHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGdsb2Jh
bERhdGEsIGMpOwotICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBTdHJp
bmdJbXBsOjpjcmVhdGUocy5pbXBsKCksIG9mZnNldCwgMSkpOworICAgICAgICByZXR1cm4gdm0t
PnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcodm0sIGMpOworICAgIHJldHVybiBK
U1N0cmluZzo6Y3JlYXRlKCp2bSwgU3RyaW5nSW1wbDo6Y3JlYXRlKHMuaW1wbCgpLCBvZmZzZXQs
IDEpKTsKIH0KIAotaW5saW5lIEpTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBjb25zdCBTdHJpbmcmIHMpCitpbmxpbmUgSlNTdHJpbmcqIGpzTm9u
dHJpdmlhbFN0cmluZyhWTSogdm0sIGNvbnN0IFN0cmluZyYgcykKIHsKICAgICBBU1NFUlQocy5s
ZW5ndGgoKSA+IDEpOwotICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBz
LmltcGwoKSk7CisgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKnZtLCBzLmltcGwoKSk7CiB9
CiAKIGlubGluZSBjb25zdCBTdHJpbmcmIEpTU3RyaW5nOjp2YWx1ZShFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0CkBAIC0zODcsMTcgKzM4NywxNyBAQCBpbmxpbmUgSlNTdHJpbmcqIEpTU3RyaW5nOjpn
ZXRJbmRleChFeGVjCiAgICAgcmV0dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nKGV4ZWMs
IG1fdmFsdWUsIGkpOwogfQogCi1pbmxpbmUgSlNTdHJpbmcqIGpzU3RyaW5nKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgY29uc3QgU3RyaW5nJiBzKQoraW5saW5lIEpTU3RyaW5nKiBqc1N0cmlu
ZyhWTSogdm0sIGNvbnN0IFN0cmluZyYgcykKIHsKICAgICBpbnQgc2l6ZSA9IHMubGVuZ3RoKCk7
CiAgICAgaWYgKCFzaXplKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdz
LmVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLmVtcHR5U3Ry
aW5nKCk7CiAgICAgaWYgKHNpemUgPT0gMSkgewogICAgICAgICBVQ2hhciBjID0gcy5jaGFyYWN0
ZXJBdCgwKTsKICAgICAgICAgaWYgKGMgPD0gbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKQotICAg
ICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJT
dHJpbmcoZ2xvYmFsRGF0YSwgYyk7CisgICAgICAgICAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5n
cy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcodm0sIGMpOwogICAgIH0KLSAgICByZXR1cm4gSlNTdHJp
bmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgcy5pbXBsKCkpOworICAgIHJldHVybiBKU1N0cmluZzo6
Y3JlYXRlKCp2bSwgcy5pbXBsKCkpOwogfQogCiBpbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHMsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKQpAQCAtNDA1LDY3ICs0MDUsNjcgQEAgaW5saW5lIEpTU3RyaW5nKiBqc1N1YnN0cmlu
ZyhFeGVjU3RhdGUqIAogICAgIEFTU0VSVChvZmZzZXQgPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHMtPmxlbmd0aCgpKSk7CiAgICAgQVNTRVJUKGxlbmd0aCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4ocy0+bGVuZ3RoKCkpKTsKICAgICBBU1NFUlQob2Zmc2V0ICsgbGVuZ3RoIDw9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzLT5sZW5ndGgoKSkpOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAg
aWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuZW1w
dHlTdHJpbmcoKTsKLSAgICByZXR1cm4ganNTdWJzdHJpbmcoZ2xvYmFsRGF0YSwgcy0+dmFsdWUo
ZXhlYyksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3Mu
ZW1wdHlTdHJpbmcoKTsKKyAgICByZXR1cm4ganNTdWJzdHJpbmcodm0sIHMtPnZhbHVlKGV4ZWMp
LCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKLWlubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmc4KEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKK2lubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmc4KFZNKiB2bSwg
Y29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAg
ICBBU1NFUlQob2Zmc2V0IDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzLmxlbmd0aCgpKSk7CiAg
ICAgQVNTRVJUKGxlbmd0aCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocy5sZW5ndGgoKSkpOwog
ICAgIEFTU0VSVChvZmZzZXQgKyBsZW5ndGggPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHMubGVu
Z3RoKCkpKTsKICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPnNt
YWxsU3RyaW5ncy5lbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5n
cy5lbXB0eVN0cmluZygpOwogICAgIGlmIChsZW5ndGggPT0gMSkgewogICAgICAgICBVQ2hhciBj
ID0gcy5jaGFyYWN0ZXJBdChvZmZzZXQpOwogICAgICAgICBpZiAoYyA8PSBtYXhTaW5nbGVDaGFy
YWN0ZXJTdHJpbmcpCi0gICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdz
LnNpbmdsZUNoYXJhY3RlclN0cmluZyhnbG9iYWxEYXRhLCBjKTsKKyAgICAgICAgICAgIHJldHVy
biB2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyh2bSwgYyk7CiAgICAgfQot
ICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlSGFzT3RoZXJPd25lcigqZ2xvYmFsRGF0YSwgU3Ry
aW5nSW1wbDo6Y3JlYXRlOChzLmltcGwoKSwgb2Zmc2V0LCBsZW5ndGgpKTsKKyAgICByZXR1cm4g
SlNTdHJpbmc6OmNyZWF0ZUhhc090aGVyT3duZXIoKnZtLCBTdHJpbmdJbXBsOjpjcmVhdGU4KHMu
aW1wbCgpLCBvZmZzZXQsIGxlbmd0aCkpOwogfQogCi1pbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3Ry
aW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK2lubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmcoVk0q
IHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQog
ewogICAgIEFTU0VSVChvZmZzZXQgPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHMubGVuZ3RoKCkp
KTsKICAgICBBU1NFUlQobGVuZ3RoIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzLmxlbmd0aCgp
KSk7CiAgICAgQVNTRVJUKG9mZnNldCArIGxlbmd0aCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
cy5sZW5ndGgoKSkpOwogICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0
YS0+c21hbGxTdHJpbmdzLmVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2bS0+c21hbGxT
dHJpbmdzLmVtcHR5U3RyaW5nKCk7CiAgICAgaWYgKGxlbmd0aCA9PSAxKSB7CiAgICAgICAgIFVD
aGFyIGMgPSBzLmNoYXJhY3RlckF0KG9mZnNldCk7CiAgICAgICAgIGlmIChjIDw9IG1heFNpbmds
ZUNoYXJhY3RlclN0cmluZykKLSAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0
cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMpOworICAgICAgICAgICAg
cmV0dXJuIHZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHZtLCBjKTsKICAg
ICB9Ci0gICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGVIYXNPdGhlck93bmVyKCpnbG9iYWxEYXRh
LCBTdHJpbmdJbXBsOjpjcmVhdGUocy5pbXBsKCksIG9mZnNldCwgbGVuZ3RoKSk7CisgICAgcmV0
dXJuIEpTU3RyaW5nOjpjcmVhdGVIYXNPdGhlck93bmVyKCp2bSwgU3RyaW5nSW1wbDo6Y3JlYXRl
KHMuaW1wbCgpLCBvZmZzZXQsIGxlbmd0aCkpOwogfQogCi1pbmxpbmUgSlNTdHJpbmcqIGpzT3du
ZWRTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBTdHJpbmcmIHMpCitpbmxp
bmUgSlNTdHJpbmcqIGpzT3duZWRTdHJpbmcoVk0qIHZtLCBjb25zdCBTdHJpbmcmIHMpCiB7CiAg
ICAgaW50IHNpemUgPSBzLmxlbmd0aCgpOwogICAgIGlmICghc2l6ZSkKLSAgICAgICAgcmV0dXJu
IGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5lbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4g
dm0tPnNtYWxsU3RyaW5ncy5lbXB0eVN0cmluZygpOwogICAgIGlmIChzaXplID09IDEpIHsKICAg
ICAgICAgVUNoYXIgYyA9IHMuY2hhcmFjdGVyQXQoMCk7CiAgICAgICAgIGlmIChjIDw9IG1heFNp
bmdsZUNoYXJhY3RlclN0cmluZykKLSAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFs
bFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMpOworICAgICAgICAg
ICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHZtLCBjKTsK
ICAgICB9Ci0gICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGVIYXNPdGhlck93bmVyKCpnbG9iYWxE
YXRhLCBzLmltcGwoKSk7CisgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGVIYXNPdGhlck93bmVy
KCp2bSwgcy5pbXBsKCkpOwogfQogCi1pbmxpbmUgSlNSb3BlU3RyaW5nKiBqc1N0cmluZ0J1aWxk
ZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQoraW5saW5lIEpTUm9wZVN0cmluZyoganNTdHJp
bmdCdWlsZGVyKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGVOdWxs
KCpnbG9iYWxEYXRhKTsKKyAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGVOdWxsKCp2bSk7
CiB9CiAKLWlubGluZSBKU1N0cmluZyoganNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIHsg
cmV0dXJuIGpzRW1wdHlTdHJpbmcoJmV4ZWMtPmdsb2JhbERhdGEoKSk7IH0KLWlubGluZSBKU1N0
cmluZyoganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpIHsgcmV0dXJu
IGpzU3RyaW5nKCZleGVjLT5nbG9iYWxEYXRhKCksIHMpOyB9Ci1pbmxpbmUgSlNTdHJpbmcqIGpz
U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgVUNoYXIgYykgeyByZXR1cm4g
anNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoJmV4ZWMtPmdsb2JhbERhdGEoKSwgYyk7IH0KLWlubGlu
ZSBKU1N0cmluZyoganNTdWJzdHJpbmc4KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBz
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkgeyByZXR1cm4ganNTdWJzdHJpbmc4
KCZleGVjLT5nbG9iYWxEYXRhKCksIHMsIG9mZnNldCwgbGVuZ3RoKTsgfQotaW5saW5lIEpTU3Ry
aW5nKiBqc1N1YnN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcywgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpIHsgcmV0dXJuIGpzU3Vic3RyaW5nKCZleGVjLT5n
bG9iYWxEYXRhKCksIHMsIG9mZnNldCwgbGVuZ3RoKTsgfQotaW5saW5lIEpTU3RyaW5nKiBqc05v
bnRyaXZpYWxTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpIHsgcmV0dXJu
IGpzTm9udHJpdmlhbFN0cmluZygmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzKTsgfQotaW5saW5lIEpT
U3RyaW5nKiBqc093bmVkU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKSB7
IHJldHVybiBqc093bmVkU3RyaW5nKCZleGVjLT5nbG9iYWxEYXRhKCksIHMpOyB9CitpbmxpbmUg
SlNTdHJpbmcqIGpzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBleGVjKSB7IHJldHVybiBqc0VtcHR5
U3RyaW5nKCZleGVjLT52bSgpKTsgfQoraW5saW5lIEpTU3RyaW5nKiBqc1N0cmluZyhFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykgeyByZXR1cm4ganNTdHJpbmcoJmV4ZWMtPnZtKCks
IHMpOyB9CitpbmxpbmUgSlNTdHJpbmcqIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYywgVUNoYXIgYykgeyByZXR1cm4ganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoJmV4ZWMt
PnZtKCksIGMpOyB9CitpbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5nOChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFN0cmluZyYgcywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpIHsg
cmV0dXJuIGpzU3Vic3RyaW5nOCgmZXhlYy0+dm0oKSwgcywgb2Zmc2V0LCBsZW5ndGgpOyB9Citp
bmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5n
JiBzLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkgeyByZXR1cm4ganNTdWJzdHJp
bmcoJmV4ZWMtPnZtKCksIHMsIG9mZnNldCwgbGVuZ3RoKTsgfQoraW5saW5lIEpTU3RyaW5nKiBq
c05vbnRyaXZpYWxTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpIHsgcmV0
dXJuIGpzTm9udHJpdmlhbFN0cmluZygmZXhlYy0+dm0oKSwgcyk7IH0KK2lubGluZSBKU1N0cmlu
ZyoganNPd25lZFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykgeyByZXR1
cm4ganNPd25lZFN0cmluZygmZXhlYy0+dm0oKSwgcyk7IH0KIAogQUxXQVlTX0lOTElORSBib29s
IEpTU3RyaW5nOjpnZXRTdHJpbmdQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CkBAIC01MjUsMTkgKzUy
NSwxOSBAQCBpbmxpbmUgU3RyaW5nIEpTVmFsdWU6OnRvV1RGU3RyaW5nKEV4ZWNTCiAKIEFMV0FZ
U19JTkxJTkUgU3RyaW5nIGlubGluZUpTVmFsdWVOb3RTdHJpbmd0b1N0cmluZyhjb25zdCBKU1Zh
bHVlJiB2YWx1ZSwgRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLm51bWVyaWNT
dHJpbmdzLmFkZCh2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gdm0ubnVtZXJpY1N0
cmluZ3MuYWRkKHZhbHVlLmFzSW50MzIoKSk7CiAgICAgaWYgKHZhbHVlLmlzRG91YmxlKCkpCi0g
ICAgICAgIHJldHVybiBnbG9iYWxEYXRhLm51bWVyaWNTdHJpbmdzLmFkZCh2YWx1ZS5hc0RvdWJs
ZSgpKTsKKyAgICAgICAgcmV0dXJuIHZtLm51bWVyaWNTdHJpbmdzLmFkZCh2YWx1ZS5hc0RvdWJs
ZSgpKTsKICAgICBpZiAodmFsdWUuaXNUcnVlKCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRh
LnByb3BlcnR5TmFtZXMtPnRydWVLZXl3b3JkLnN0cmluZygpOworICAgICAgICByZXR1cm4gdm0u
cHJvcGVydHlOYW1lcy0+dHJ1ZUtleXdvcmQuc3RyaW5nKCk7CiAgICAgaWYgKHZhbHVlLmlzRmFs
c2UoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEucHJvcGVydHlOYW1lcy0+ZmFsc2VLZXl3
b3JkLnN0cmluZygpOworICAgICAgICByZXR1cm4gdm0ucHJvcGVydHlOYW1lcy0+ZmFsc2VLZXl3
b3JkLnN0cmluZygpOwogICAgIGlmICh2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGds
b2JhbERhdGEucHJvcGVydHlOYW1lcy0+bnVsbEtleXdvcmQuc3RyaW5nKCk7CisgICAgICAgIHJl
dHVybiB2bS5wcm9wZXJ0eU5hbWVzLT5udWxsS2V5d29yZC5zdHJpbmcoKTsKICAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEucHJvcGVydHlOYW1l
cy0+dW5kZWZpbmVkS2V5d29yZC5zdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZtLnByb3BlcnR5
TmFtZXMtPnVuZGVmaW5lZEtleXdvcmQuc3RyaW5nKCk7CiAgICAgcmV0dXJuIHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjQsNyArMTI0LDcgQEAgSlNWYWx1ZSBKU1N0cmluZ0pvaW5lcjo6YnVpbGQo
RXhlY1N0YXRlKgogICAgIGlmICghb3V0cHV0U3RyaW5nSW1wbCkKICAgICAgICAgcmV0dXJuIHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKIAotICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgb3V0cHV0U3RyaW5nSW1wbC5yZWxlYXNlKCkpOworICAgIHJl
dHVybiBKU1N0cmluZzo6Y3JlYXRlKGV4ZWMtPnZtKCksIG91dHB1dFN0cmluZ0ltcGwucmVsZWFz
ZSgpKTsKIH0KIAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1i
b2xUYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OSwxOCArNDksMTggQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IElzRW52aXJvbm1lbnRSZWNvcmQgfCBPdmVycmlk
ZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVj
dHVyZUZsYWdzOwogICAgIAotICAgIEpTU3ltYm9sVGFibGVPYmplY3QoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTY29wZSogc2NvcGUsIFNoYXJlZFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IDApCi0gICAgICAgIDogQmFzZShnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUsIHNjb3BlKQorICAgIEpTU3ltYm9sVGFibGVPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNTY29wZSogc2NvcGUsIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xU
YWJsZSA9IDApCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBzY29wZSkKICAgICB7CiAg
ICAgICAgIGlmIChzeW1ib2xUYWJsZSkKLSAgICAgICAgICAgIG1fc3ltYm9sVGFibGUuc2V0KGds
b2JhbERhdGEsIHRoaXMsIHN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgIG1fc3ltYm9sVGFibGUu
c2V0KHZtLCB0aGlzLCBzeW1ib2xUYWJsZSk7CiAgICAgfQogCi0gICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCiAgICAgewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsK
KyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICBpZiAoIW1fc3ltYm9s
VGFibGUpCi0gICAgICAgICAgICBtX3N5bWJvbFRhYmxlLnNldChnbG9iYWxEYXRhLCB0aGlzLCBT
aGFyZWRTeW1ib2xUYWJsZTo6Y3JlYXRlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgIG1fc3lt
Ym9sVGFibGUuc2V0KHZtLCB0aGlzLCBTaGFyZWRTeW1ib2xUYWJsZTo6Y3JlYXRlKHZtKSk7CiAg
ICAgfQogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOwpAQCAtMTE4LDcgKzExOCw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0KAogICAg
IFN5bWJvbFRhYmxlT2JqZWN0VHlwZSogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsCiAgICAgYm9vbCBzaG91bGRUaHJvdykK
IHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8
IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAob2JqZWN0KSk7CiAgICAgCiAgICAgU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlID0gKm9iamVjdC0+c3ltYm9sVGFibGUoKTsKQEAgLTEzNSwx
MyArMTM1LDEzIEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0KAogICAgIH0KICAgICBpZiAo
VU5MSUtFTFkod2FzRmF0KSkKICAgICAgICAgaXRlci0+dmFsdWUubm90aWZ5V3JpdGUoKTsKLSAg
ICBvYmplY3QtPnJlZ2lzdGVyQXQoZmFzdEVudHJ5LmdldEluZGV4KCkpLnNldChnbG9iYWxEYXRh
LCBvYmplY3QsIHZhbHVlKTsKKyAgICBvYmplY3QtPnJlZ2lzdGVyQXQoZmFzdEVudHJ5LmdldElu
ZGV4KCkpLnNldCh2bSwgb2JqZWN0LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFN5bWJvbFRhYmxlT2JqZWN0VHlwZT4KIGlubGluZSBib29sIHN5bWJv
bFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoCi0gICAgU3ltYm9sVGFibGVPYmplY3RUeXBlKiBvYmpl
Y3QsIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwK
KyAgICBTeW1ib2xUYWJsZU9iamVjdFR5cGUqIG9iamVjdCwgVk0mIHZtLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLAogICAgIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7
CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBI
ZWFwOjpoZWFwKG9iamVjdCkpOwpAQCAtMTUzLDcgKzE1Myw3IEBAIGlubGluZSBib29sIHN5bWJv
bFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMKICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKICAg
ICBlbnRyeS5ub3RpZnlXcml0ZSgpOwogICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0cmlidXRl
cyk7Ci0gICAgb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLnNldChnbG9iYWxE
YXRhLCBvYmplY3QsIHZhbHVlKTsKKyAgICBvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5k
ZXgoKSkuc2V0KHZtLCBvYmplY3QsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3Qu
aAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNW
YXJpYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMyArNTksMTMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgICAgIEpTVmFyaWFibGVPYmplY3QoCi0gICAg
ICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsCisgICAgICAgICAgICBWTSYgdm0sCiAg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKICAgICAgICAgICAgIFJlZ2lzdGVyKiBy
ZWdpc3RlcnMsCiAgICAgICAgICAgICBKU1Njb3BlKiBzY29wZSwKICAgICAgICAgICAgIFNoYXJl
ZFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IDAKICAgICAgICAgKQotICAgICAgICAgICAgOiBC
YXNlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgc2NvcGUsIHN5bWJvbFRhYmxlKQorICAgICAgICAg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIHNjb3BlLCBzeW1ib2xUYWJsZSkKICAgICAgICAgICAg
ICwgbV9yZWdpc3RlcnMocmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+
Kj4ocmVnaXN0ZXJzKSkKICAgICAgICAgewogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDE0ICszNywxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTV2l0aFNjb3BlKiBjcmVh
dGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0KQogICAgIHsKICAgICAgICAgSlNX
aXRoU2NvcGUqIHdpdGhTY29wZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2l0aFNj
b3BlPigqZXhlYy0+aGVhcCgpKSkgSlNXaXRoU2NvcGUoZXhlYywgb2JqZWN0KTsKLSAgICAgICAg
d2l0aFNjb3BlLT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICB3
aXRoU2NvcGUtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwogICAgICAgICByZXR1cm4gd2l0
aFNjb3BlOwogICAgIH0KIAogICAgIHN0YXRpYyBKU1dpdGhTY29wZSogY3JlYXRlKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgSlNTY29wZSogbmV4dCkKICAgICB7CiAgICAgICAg
IEpTV2l0aFNjb3BlKiB3aXRoU2NvcGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dp
dGhTY29wZT4oKmV4ZWMtPmhlYXAoKSkpIEpTV2l0aFNjb3BlKGV4ZWMsIG9iamVjdCwgbmV4dCk7
Ci0gICAgICAgIHdpdGhTY29wZS0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsK
KyAgICAgICAgd2l0aFNjb3BlLT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKICAgICAgICAg
cmV0dXJuIHdpdGhTY29wZTsKICAgICB9CiAKQEAgLTUyLDkgKzUyLDkgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0g
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKKyAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFdp
dGhTY29wZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oV2l0aFNj
b3BlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMg
SlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpAQCAtNjUsMjEgKzY1LDIxIEBA
IHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgSlNXaXRoU2NvcGUoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogb2JqZWN0KQogICAgICAgICA6IEJhc2UoCi0gICAgICAgICAgICBleGVjLT5nbG9i
YWxEYXRhKCksCisgICAgICAgICAgICBleGVjLT52bSgpLAogICAgICAgICAgICAgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT53aXRoU2NvcGVTdHJ1Y3R1cmUoKSwKICAgICAgICAgICAgIGV4
ZWMtPnNjb3BlKCkKICAgICAgICAgKQotICAgICAgICAsIG1fb2JqZWN0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgb2JqZWN0KQorICAgICAgICAsIG1fb2JqZWN0KGV4ZWMtPnZtKCksIHRoaXMs
IG9iamVjdCkKICAgICB7CiAgICAgfQogCiAgICAgSlNXaXRoU2NvcGUoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogb2JqZWN0LCBKU1Njb3BlKiBuZXh0KQogICAgICAgICA6IEJhc2UoCi0gICAg
ICAgICAgICBleGVjLT5nbG9iYWxEYXRhKCksCisgICAgICAgICAgICBleGVjLT52bSgpLAogICAg
ICAgICAgICAgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT53aXRoU2NvcGVTdHJ1Y3R1cmUo
KSwKICAgICAgICAgICAgIG5leHQKICAgICAgICAgKQotICAgICAgICAsIG1fb2JqZWN0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywgb2JqZWN0KQorICAgICAgICAsIG1fb2JqZWN0KGV4ZWMtPnZt
KCksIHRoaXMsIG9iamVjdCkKICAgICB7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAkocmV2aXNpb24gMTQ4NjU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDExICszOSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQog
CiAgICAgICAgIEpTVmFsdWUgaW50ZXJuYWxWYWx1ZSgpIGNvbnN0OwotICAgICAgICB2b2lkIHNl
dEludGVybmFsVmFsdWUoSlNHbG9iYWxEYXRhJiwgSlNWYWx1ZSk7CisgICAgICAgIHZvaWQgc2V0
SW50ZXJuYWxWYWx1ZShWTSYsIEpTVmFsdWUpOwogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAKKyAgICAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpIAogICAgICAgICB7IAotICAgICAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBpbnRlcm5hbFZhbHVlT2Zmc2V0KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV3JhcHBlck9iamVjdCwgbV9pbnRlcm5hbFZhbHVl
KTsgfQpAQCAtNTcsNyArNTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAg
cHJvdGVjdGVkOgotICAgICAgICBleHBsaWNpdCBKU1dyYXBwZXJPYmplY3QoSlNHbG9iYWxEYXRh
JiwgU3RydWN0dXJlKik7CisgICAgICAgIGV4cGxpY2l0IEpTV3JhcHBlck9iamVjdChWTSYsIFN0
cnVjdHVyZSopOwogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICAg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpAQCAt
NjYsOCArNjYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+IG1faW50ZXJuYWxWYWx1ZTsKICAgICB9OwogCi0gICAgaW5saW5lIEpTV3JhcHBlck9iamVj
dDo6SlNXcmFwcGVyT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCi0gICAgICAgIDogSlNEZXN0cnVjdGlibGVPYmplY3QoZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlKQorICAgIGlubGluZSBKU1dyYXBwZXJPYmplY3Q6OkpTV3JhcHBlck9iamVjdChWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
KHZtLCBzdHJ1Y3R1cmUpCiAgICAgewogICAgIH0KIApAQCAtNzYsMTEgKzc2LDExIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICByZXR1cm4gbV9pbnRlcm5hbFZhbHVlLmdldCgpOwogICAgIH0K
IAotICAgIGlubGluZSB2b2lkIEpTV3JhcHBlck9iamVjdDo6c2V0SW50ZXJuYWxWYWx1ZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgdmFsdWUpCisgICAgaW5saW5lIHZvaWQgSlNX
cmFwcGVyT2JqZWN0OjpzZXRJbnRlcm5hbFZhbHVlKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgICAgIEFTU0VSVCghdmFsdWUuaXNPYmpl
Y3QoKSk7Ci0gICAgICAgIG1faW50ZXJuYWxWYWx1ZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFs
dWUpOworICAgICAgICBtX2ludGVybmFsVmFsdWUuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAg
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0xpdGVyYWxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTcsMjAgKzU3LDIwIEBAIGJvb2wgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OnRyeUpTT05Q
UGEKICAgICBkbyB7CiAgICAgICAgIFZlY3RvcjxKU09OUFBhdGhFbnRyeT4gcGF0aDsKICAgICAg
ICAgLy8gVW5ndWFyZGVkIG5leHQgdG8gc3RhcnQgb2ZmIHRoZSBsZXhlcgotICAgICAgICBJZGVu
dGlmaWVyIG5hbWUgPSBJZGVudGlmaWVyKCZtX2V4ZWMtPmdsb2JhbERhdGEoKSwgbV9sZXhlci5j
dXJyZW50VG9rZW4oKS5zdGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5lbmQgLSBtX2xleGVy
LmN1cnJlbnRUb2tlbigpLnN0YXJ0KTsKKyAgICAgICAgSWRlbnRpZmllciBuYW1lID0gSWRlbnRp
ZmllcigmbV9leGVjLT52bSgpLCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0LCBtX2xleGVy
LmN1cnJlbnRUb2tlbigpLmVuZCAtIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3RhcnQpOwogICAg
ICAgICBKU09OUFBhdGhFbnRyeSBlbnRyeTsKLSAgICAgICAgaWYgKG5hbWUgPT0gbV9leGVjLT5n
bG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+dmFyS2V5d29yZCkgeworICAgICAgICBpZiAobmFt
ZSA9PSBtX2V4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+dmFyS2V5d29yZCkgewogICAgICAgICAg
ICAgaWYgKG1fbGV4ZXIubmV4dCgpICE9IFRva0lkZW50aWZpZXIpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgZW50cnkubV90eXBlID0gSlNPTlBQYXRoRW50cnlU
eXBlRGVjbGFyZTsKLSAgICAgICAgICAgIGVudHJ5Lm1fcGF0aEVudHJ5TmFtZSA9IElkZW50aWZp
ZXIoJm1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0LCBt
X2xleGVyLmN1cnJlbnRUb2tlbigpLmVuZCAtIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3RhcnQp
OworICAgICAgICAgICAgZW50cnkubV9wYXRoRW50cnlOYW1lID0gSWRlbnRpZmllcigmbV9leGVj
LT52bSgpLCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0LCBtX2xleGVyLmN1cnJlbnRUb2tl
bigpLmVuZCAtIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3RhcnQpOwogICAgICAgICAgICAgcGF0
aC5hcHBlbmQoZW50cnkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZW50cnkubV90
eXBlID0gSlNPTlBQYXRoRW50cnlUeXBlRG90OwotICAgICAgICAgICAgZW50cnkubV9wYXRoRW50
cnlOYW1lID0gSWRlbnRpZmllcigmbV9leGVjLT5nbG9iYWxEYXRhKCksIG1fbGV4ZXIuY3VycmVu
dFRva2VuKCkuc3RhcnQsIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuZW5kIC0gbV9sZXhlci5jdXJy
ZW50VG9rZW4oKS5zdGFydCk7CisgICAgICAgICAgICBlbnRyeS5tX3BhdGhFbnRyeU5hbWUgPSBJ
ZGVudGlmaWVyKCZtX2V4ZWMtPnZtKCksIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3RhcnQsIG1f
bGV4ZXIuY3VycmVudFRva2VuKCkuZW5kIC0gbV9sZXhlci5jdXJyZW50VG9rZW4oKS5zdGFydCk7
CiAgICAgICAgICAgICBwYXRoLmFwcGVuZChlbnRyeSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KG1fZXhlYy0+Z2xvYmFsRGF0YSgpLmtleXdvcmRzLT5pc0tleXdvcmQoZW50cnkubV9wYXRoRW50
cnlOYW1lKSkKKyAgICAgICAgaWYgKG1fZXhlYy0+dm0oKS5rZXl3b3Jkcy0+aXNLZXl3b3JkKGVu
dHJ5Lm1fcGF0aEVudHJ5TmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IFRva2VuVHlwZSB0b2tlblR5cGUgPSBtX2xleGVyLm5leHQoKTsKICAgICAgICAgaWYgKGVudHJ5
Lm1fdHlwZSA9PSBKU09OUFBhdGhFbnRyeVR5cGVEZWNsYXJlICYmIHRva2VuVHlwZSAhPSBUb2tB
c3NpZ24pCkBAIC05NCw3ICs5NCw3IEBAIGJvb2wgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OnRy
eUpTT05QUGEKICAgICAgICAgICAgICAgICBlbnRyeS5tX3R5cGUgPSBKU09OUFBhdGhFbnRyeVR5
cGVEb3Q7CiAgICAgICAgICAgICAgICAgaWYgKG1fbGV4ZXIubmV4dCgpICE9IFRva0lkZW50aWZp
ZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBl
bnRyeS5tX3BhdGhFbnRyeU5hbWUgPSBJZGVudGlmaWVyKCZtX2V4ZWMtPmdsb2JhbERhdGEoKSwg
bV9sZXhlci5jdXJyZW50VG9rZW4oKS5zdGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5lbmQg
LSBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0KTsKKyAgICAgICAgICAgICAgICBlbnRyeS5t
X3BhdGhFbnRyeU5hbWUgPSBJZGVudGlmaWVyKCZtX2V4ZWMtPnZtKCksIG1fbGV4ZXIuY3VycmVu
dFRva2VuKCkuc3RhcnQsIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuZW5kIC0gbV9sZXhlci5jdXJy
ZW50VG9rZW4oKS5zdGFydCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBjYXNlIFRva0xQYXJlbjogewpAQCAtMTEzLDcgKzExMyw3IEBAIGJvb2wg
TGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OnRyeUpTT05QUGEKICAgICBzdGFydEpTT046CiAgICAg
ICAgIG1fbGV4ZXIubmV4dCgpOwogICAgICAgICByZXN1bHRzLmFwcGVuZChKU09OUERhdGEoKSk7
Ci0gICAgICAgIHJlc3VsdHMubGFzdCgpLm1fdmFsdWUuc2V0KG1fZXhlYy0+Z2xvYmFsRGF0YSgp
LCBwYXJzZShTdGFydFBhcnNlRXhwcmVzc2lvbikpOworICAgICAgICByZXN1bHRzLmxhc3QoKS5t
X3ZhbHVlLnNldChtX2V4ZWMtPnZtKCksIHBhcnNlKFN0YXJ0UGFyc2VFeHByZXNzaW9uKSk7CiAg
ICAgICAgIGlmICghcmVzdWx0cy5sYXN0KCkubV92YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgcmVzdWx0cy5sYXN0KCkubV9wYXRoLnN3YXAocGF0aCk7CkBAIC0xMzMs
MTkgKzEzMywxOSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+CiBBTFdBWVNfSU5MSU5F
IGNvbnN0IElkZW50aWZpZXIgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46Om1ha2VJZGVudGlmaWVy
KGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogewogICAgIGlmICghbGVu
Z3RoKQotICAgICAgICByZXR1cm4gbV9leGVjLT5nbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+
ZW1wdHlJZGVudGlmaWVyOworICAgICAgICByZXR1cm4gbV9leGVjLT52bSgpLnByb3BlcnR5TmFt
ZXMtPmVtcHR5SWRlbnRpZmllcjsKICAgICBpZiAoY2hhcmFjdGVyc1swXSA+PSBNYXhpbXVtQ2Fj
aGFibGVDaGFyYWN0ZXIpCi0gICAgICAgIHJldHVybiBJZGVudGlmaWVyKCZtX2V4ZWMtPmdsb2Jh
bERhdGEoKSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIElkZW50aWZpZXIo
Jm1fZXhlYy0+dm0oKSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKIAogICAgIGlmIChsZW5ndGggPT0g
MSkgewogICAgICAgICBpZiAoIW1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXS5pc051
bGwoKSkKICAgICAgICAgICAgIHJldHVybiBtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1sw
XV07Ci0gICAgICAgIG1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXSA9IElkZW50aWZp
ZXIoJm1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgICAgICBt
X3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0gPSBJZGVudGlmaWVyKCZtX2V4ZWMtPnZt
KCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybiBtX3Nob3J0SWRlbnRpZmll
cnNbY2hhcmFjdGVyc1swXV07CiAgICAgfQogICAgIGlmICghbV9yZWNlbnRJZGVudGlmaWVyc1tj
aGFyYWN0ZXJzWzBdXS5pc051bGwoKSAmJiBJZGVudGlmaWVyOjplcXVhbChtX3JlY2VudElkZW50
aWZpZXJzW2NoYXJhY3RlcnNbMF1dLmltcGwoKSwgY2hhcmFjdGVycywgbGVuZ3RoKSkKICAgICAg
ICAgcmV0dXJuIG1fcmVjZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV07Ci0gICAgbV9yZWNl
bnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXSA9IElkZW50aWZpZXIoJm1fZXhlYy0+Z2xvYmFs
RGF0YSgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIG1fcmVjZW50SWRlbnRpZmllcnNbY2hh
cmFjdGVyc1swXV0gPSBJZGVudGlmaWVyKCZtX2V4ZWMtPnZtKCksIGNoYXJhY3RlcnMsIGxlbmd0
aCk7CiAgICAgcmV0dXJuIG1fcmVjZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV07CiB9CiAK
QEAgLTE1MywxOSArMTUzLDE5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KIEFMV0FZ
U19JTkxJTkUgY29uc3QgSWRlbnRpZmllciBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6bWFrZUlk
ZW50aWZpZXIoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiB7CiAgICAg
aWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBtX2V4ZWMtPmdsb2JhbERhdGEoKS5wcm9wZXJ0
eU5hbWVzLT5lbXB0eUlkZW50aWZpZXI7CisgICAgICAgIHJldHVybiBtX2V4ZWMtPnZtKCkucHJv
cGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyOwogICAgIGlmIChjaGFyYWN0ZXJzWzBdID49IE1h
eGltdW1DYWNoYWJsZUNoYXJhY3RlcikKLSAgICAgICAgcmV0dXJuIElkZW50aWZpZXIoJm1fZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgICAgICByZXR1cm4gSWRl
bnRpZmllcigmbV9leGVjLT52bSgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwogCiAgICAgaWYgKGxl
bmd0aCA9PSAxKSB7CiAgICAgICAgIGlmICghbV9zaG9ydElkZW50aWZpZXJzW2NoYXJhY3RlcnNb
MF1dLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIG1fc2hvcnRJZGVudGlmaWVyc1tjaGFy
YWN0ZXJzWzBdXTsKLSAgICAgICAgbV9zaG9ydElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dID0g
SWRlbnRpZmllcigmbV9leGVjLT5nbG9iYWxEYXRhKCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7Cisg
ICAgICAgIG1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXSA9IElkZW50aWZpZXIoJm1f
ZXhlYy0+dm0oKSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIG1fc2hvcnRJ
ZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXTsKICAgICB9CiAgICAgaWYgKCFtX3JlY2VudElkZW50
aWZpZXJzW2NoYXJhY3RlcnNbMF1dLmlzTnVsbCgpICYmIElkZW50aWZpZXI6OmVxdWFsKG1fcmVj
ZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0uaW1wbCgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgp
KQogICAgICAgICByZXR1cm4gbV9yZWNlbnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXTsKLSAg
ICBtX3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dID0gSWRlbnRpZmllcigmbV9leGVj
LT5nbG9iYWxEYXRhKCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgbV9yZWNlbnRJZGVudGlm
aWVyc1tjaGFyYWN0ZXJzWzBdXSA9IElkZW50aWZpZXIoJm1fZXhlYy0+dm0oKSwgY2hhcmFjdGVy
cywgbGVuZ3RoKTsKICAgICByZXR1cm4gbV9yZWNlbnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBd
XTsKIH0KIApAQCAtNjUzLDcgKzY1Myw3IEBAIEpTVmFsdWUgTGl0ZXJhbFBhcnNlcjxDaGFyVHlw
ZT46OnBhcnNlKFAKICAgICAgICAgICAgICAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFu
SW5kZXgpCiAgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0SW5kZXgobV9leGVj
LCBpLCBsYXN0VmFsdWUpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgb2JqZWN0LT5wdXREaXJlY3QobV9leGVjLT5nbG9iYWxEYXRhKCksIGlkZW50LCBsYXN0VmFs
dWUpOworICAgICAgICAgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdChtX2V4ZWMtPnZtKCks
IGlkZW50LCBsYXN0VmFsdWUpOwogICAgICAgICAgICAgICAgIGlkZW50aWZpZXJTdGFjay5yZW1v
dmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fbGV4ZXIuY3VycmVudFRva2VuKCkudHlw
ZSA9PSBUb2tDb21tYSkKICAgICAgICAgICAgICAgICAgICAgZ290byBkb1BhcnNlT2JqZWN0U3Rh
cnRFeHByZXNzaW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3Vw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAu
Y3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9M
b29rdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi12b2lkIEhhc2hUYWJsZTo6Y3JlYXRlVGFibGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKSBjb25zdAordm9pZCBIYXNoVGFibGU6OmNyZWF0ZVRhYmxlKFZNKiB2bSkgY29uc3QKIHsK
ICAgICBBU1NFUlQoIXRhYmxlKTsKICAgICBpbnQgbGlua0luZGV4ID0gY29tcGFjdEhhc2hTaXpl
TWFzayArIDE7CkBAIC0zNCw3ICszNCw3IEBAIHZvaWQgSGFzaFRhYmxlOjpjcmVhdGVUYWJsZShK
U0dsb2JhbERhdGEKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbXBhY3RTaXplOyArK2kpCiAg
ICAgICAgIGVudHJpZXNbaV0uc2V0S2V5KDApOwogICAgIGZvciAoaW50IGkgPSAwOyB2YWx1ZXNb
aV0ua2V5OyArK2kpIHsKLSAgICAgICAgU3RyaW5nSW1wbCogaWRlbnRpZmllciA9IElkZW50aWZp
ZXI6OmFkZChnbG9iYWxEYXRhLCB2YWx1ZXNbaV0ua2V5KS5sZWFrUmVmKCk7CisgICAgICAgIFN0
cmluZ0ltcGwqIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjphZGQodm0sIHZhbHVlc1tpXS5rZXkp
LmxlYWtSZWYoKTsKICAgICAgICAgaW50IGhhc2hJbmRleCA9IGlkZW50aWZpZXItPmV4aXN0aW5n
SGFzaCgpICYgY29tcGFjdEhhc2hTaXplTWFzazsKICAgICAgICAgSGFzaEVudHJ5KiBlbnRyeSA9
ICZlbnRyaWVzW2hhc2hJbmRleF07CiAKQEAgLTY5LDcgKzY5LDcgQEAgYm9vbCBzZXRVcFN0YXRp
Y0Z1bmN0aW9uU2xvdChFeGVjU3RhdGUqIAogewogICAgIEFTU0VSVCh0aGlzT2JqLT5nbG9iYWxP
YmplY3QoKSk7CiAgICAgQVNTRVJUKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBGdW5jdGlvbik7Ci0g
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gdGhpc09iai0+Z2V0RGlyZWN0T2Zmc2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSB0aGlzT2JqLT5nZXREaXJlY3RPZmZzZXQoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKTsKIAog
ICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CiAgICAgICAgIC8vIElmIGEgcHJvcGVy
dHkgaXMgZXZlciBkZWxldGVkIGZyb20gYW4gb2JqZWN0IHdpdGggYSBzdGF0aWMgdGFibGUsIHRo
ZW4gd2UgcmVpZnkKQEAgLTgwLDcgKzgwLDcgQEAgYm9vbCBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xv
dChFeGVjU3RhdGUqIAogICAgICAgICB0aGlzT2JqLT5wdXREaXJlY3ROYXRpdmVGdW5jdGlvbigK
ICAgICAgICAgICAgIGV4ZWMsIHRoaXNPYmotPmdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUs
IGVudHJ5LT5mdW5jdGlvbkxlbmd0aCgpLAogICAgICAgICAgICAgZW50cnktPmZ1bmN0aW9uKCks
IGVudHJ5LT5pbnRyaW5zaWMoKSwgZW50cnktPmF0dHJpYnV0ZXMoKSk7Ci0gICAgICAgIG9mZnNl
dCA9IHRoaXNPYmotPmdldERpcmVjdE9mZnNldChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5
TmFtZSk7CisgICAgICAgIG9mZnNldCA9IHRoaXNPYmotPmdldERpcmVjdE9mZnNldChleGVjLT52
bSgpLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQp
KTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCShy
ZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAu
aAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDI0ICsxMjEsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAKLSAgICAgICAgQUxXQVlTX0lO
TElORSB2b2lkIGluaXRpYWxpemVJZk5lZWRlZChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpIGNv
bnN0CisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBpbml0aWFsaXplSWZOZWVkZWQoVk0qIHZt
KSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIXRhYmxlKQotICAgICAgICAgICAg
ICAgIGNyZWF0ZVRhYmxlKGdsb2JhbERhdGEpOworICAgICAgICAgICAgICAgIGNyZWF0ZVRhYmxl
KHZtKTsKICAgICAgICAgfQogCiAgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBpbml0aWFsaXpl
SWZOZWVkZWQoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAoIXRhYmxlKQotICAgICAgICAgICAgICAgIGNyZWF0ZVRhYmxlKCZleGVjLT5nbG9iYWxEYXRh
KCkpOworICAgICAgICAgICAgICAgIGNyZWF0ZVRhYmxlKCZleGVjLT52bSgpKTsKICAgICAgICAg
fQogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVsZXRlVGFibGUoKSBjb25zdDsK
IAogICAgICAgICAvLyBGaW5kIGFuIGVudHJ5IGluIHRoZSB0YWJsZSwgYW5kIHJldHVybiB0aGUg
ZW50cnkuCi0gICAgICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSGFzaEVudHJ5KiBlbnRyeShKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBpZGVudGlmaWVyKSBjb25zdAorICAg
ICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IEhhc2hFbnRyeSogZW50cnkoVk0qIHZtLCBQcm9wZXJ0
eU5hbWUgaWRlbnRpZmllcikgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgaW5pdGlhbGl6
ZUlmTmVlZGVkKGdsb2JhbERhdGEpOworICAgICAgICAgICAgaW5pdGlhbGl6ZUlmTmVlZGVkKHZt
KTsKICAgICAgICAgICAgIHJldHVybiBlbnRyeShpZGVudGlmaWVyKTsKICAgICAgICAgfQogCkBA
IC0xOTQsMTQgKzE5NCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGludCBtX3Bv
c2l0aW9uOwogICAgICAgICB9OwogCi0gICAgICAgIENvbnN0SXRlcmF0b3IgYmVnaW4oSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKSBjb25zdAorICAgICAgICBDb25zdEl0ZXJhdG9yIGJlZ2luKFZN
JiB2bSkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgaW5pdGlhbGl6ZUlmTmVlZGVkKCZn
bG9iYWxEYXRhKTsKKyAgICAgICAgICAgIGluaXRpYWxpemVJZk5lZWRlZCgmdm0pOwogICAgICAg
ICAgICAgcmV0dXJuIENvbnN0SXRlcmF0b3IodGhpcywgMCk7CiAgICAgICAgIH0KLSAgICAgICAg
Q29uc3RJdGVyYXRvciBlbmQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKSBjb25zdAorICAgICAg
ICBDb25zdEl0ZXJhdG9yIGVuZChWTSYgdm0pIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAg
IGluaXRpYWxpemVJZk5lZWRlZCgmZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBpbml0aWFsaXpl
SWZOZWVkZWQoJnZtKTsKICAgICAgICAgICAgIHJldHVybiBDb25zdEl0ZXJhdG9yKHRoaXMsIGNv
bXBhY3RTaXplKTsKICAgICAgICAgfQogCkBAIC0yMjksNyArMjI5LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBDb252ZXJ0IHRoZSBoYXNoIHRhYmxlIGtleXMg
dG8gaWRlbnRpZmllcnMuCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY3JlYXRlVGFi
bGUoSlNHbG9iYWxEYXRhKikgY29uc3Q7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
Y3JlYXRlVGFibGUoVk0qKSBjb25zdDsKICAgICB9OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChFeGVjU3RhdGUqLCBjb25zdCBIYXNoRW50cnkq
LCBKU09iamVjdCogdGhpc09iamVjdCwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKQEAg
LTM2OCw3ICszNjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBJZiB0aGlzIGlz
IGEgZnVuY3Rpb24gcHV0IGl0IGFzIGFuIG92ZXJyaWRlIHByb3BlcnR5LgogICAgICAgICBpZiAo
ZW50cnktPmF0dHJpYnV0ZXMoKSAmIEZ1bmN0aW9uKQotICAgICAgICAgICAgdGhpc09iai0+cHV0
RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgICAg
ICAgICB0aGlzT2JqLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7
CiAgICAgICAgIGVsc2UgaWYgKCEoZW50cnktPmF0dHJpYnV0ZXMoKSAmIFJlYWRPbmx5KSkKICAg
ICAgICAgICAgIGVudHJ5LT5wcm9wZXJ0eVB1dHRlcigpKGV4ZWMsIHRoaXNPYmosIHZhbHVlKTsK
ICAgICAgICAgZWxzZSBpZiAoc2hvdWxkVGhyb3cpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9NYXRoT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg1LDIzICs4NSwyMyBAQCBjb25zdCBDbGFzc0luZm8gTWF0aE9iamVjdDo6c19pbmZvID0geyAi
CiAqLwogCiBNYXRoT2JqZWN0OjpNYXRoT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxP
YmplY3QtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKQorICAgIDogSlNOb25GaW5hbE9iamVjdChn
bG9iYWxPYmplY3QtPnZtKCksIHN0cnVjdHVyZSkKIHsKIH0KIAogdm9pZCBNYXRoT2JqZWN0Ojpm
aW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRh
KCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CiAgICAg
QVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIAotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiRSIpLCBqc051bWJlcihl
eHAoMS4wKSksIERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywg
IkxOMiIpLCBqc051bWJlcihsb2coMi4wKSksIERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRP
bmx5KTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCks
IElkZW50aWZpZXIoZXhlYywgIkxOMTAiKSwganNOdW1iZXIobG9nKDEwLjApKSwgRG9udERlbGV0
ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiTE9HMkUiKSwganNOdW1iZXIo
MS4wIC8gbG9nKDIuMCkpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seSk7Ci0gICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVy
KGV4ZWMsICJMT0cxMEUiKSwganNOdW1iZXIoMC40MzQyOTQ0ODE5MDMyNTE4KSwgRG9udERlbGV0
ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkpOyAvLyBTZWUgRUNNQS0yNjIgMTUuOC4xLjUKLSAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIo
ZXhlYywgIlBJIiksIGpzTnVtYmVyKHBpRG91YmxlKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwg
UmVhZE9ubHkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERh
dGEoKSwgSWRlbnRpZmllcihleGVjLCAiU1FSVDFfMiIpLCBqc051bWJlcihzcXJ0KDAuNSkpLCBE
b250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJTUVJUMiIpLCBq
c051bWJlcihzcXJ0KDIuMCkpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seSk7Cisg
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVj
LCAiRSIpLCBqc051bWJlcihleHAoMS4wKSksIERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRP
bmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlm
aWVyKGV4ZWMsICJMTjIiKSwganNOdW1iZXIobG9nKDIuMCkpLCBEb250RGVsZXRlIHwgRG9udEVu
dW0gfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0o
KSwgSWRlbnRpZmllcihleGVjLCAiTE4xMCIpLCBqc051bWJlcihsb2coMTAuMCkpLCBEb250RGVs
ZXRlIHwgRG9udEVudW0gfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRp
b24oZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiTE9HMkUiKSwganNOdW1iZXIoMS4wIC8g
bG9nKDIuMCkpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seSk7CisgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiTE9HMTBF
IiksIGpzTnVtYmVyKDAuNDM0Mjk0NDgxOTAzMjUxOCksIERvbnREZWxldGUgfCBEb250RW51bSB8
IFJlYWRPbmx5KTsgLy8gU2VlIEVDTUEtMjYyIDE1LjguMS41CisgICAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiUEkiKSwganNOdW1iZXIo
cGlEb3VibGUpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seSk7CisgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiU1FSVDFf
MiIpLCBqc051bWJlcihzcXJ0KDAuNSkpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25s
eSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmll
cihleGVjLCAiU1FSVDIiKSwganNOdW1iZXIoc3FydCgyLjApKSwgRG9udERlbGV0ZSB8IERvbnRF
bnVtIHwgUmVhZE9ubHkpOwogfQogCiBib29sIE1hdGhPYmplY3Q6OmdldE93blByb3BlcnR5U2xv
dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90ICZzbG90KQpAQCAtMjY1LDcgKzI2NSw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnUKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBtYXRoUHJvdG9GdW5jU2luKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGV4ZWMtPmdsb2JhbERhdGEoKS5jYWNoZWRTaW4oZXhlYy0+YXJndW1lbnQoMCku
dG9OdW1iZXIoZXhlYykpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPnZtKCku
Y2FjaGVkU2luKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1NxcnQoRXhlY1N0YXRlKiBleGVj
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuaAkocmV2
aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAg
ICAgfQogCiAgICAgcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTWVtb3J5U3RhdGlzdGljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWVtb3J5U3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01lbW9yeVN0YXRpc3RpY3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiTWVtb3J5U3RhdGlzdGljcy5oIgog
CiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0
YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiSlNTdGFjay5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01lbW9yeVN0YXRpc3Rp
Y3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NZW1vcnlT
dGF0aXN0aWNzLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01lbW9yeVN0YXRpc3RpY3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBA
QAogCiAjaW5jbHVkZSAiSGVhcC5oIgogCi1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsK
IAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L05hbWVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTmFtZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFtZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDMsMTUgKzQzLDE1IEBAIE5hbWVDb25zdHJ1Y3Rvcjo6TmFtZUNvbnN0cnVjdG9yKEpT
R2xvYmEKIAogdm9pZCBOYW1lQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgTmFtZVByb3RvdHlwZSogcHJvdG90eXBlKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1l
KTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIHByb3RvdHlwZSwgRG9udEVudW0gfCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSks
IERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihleGVjLT52bSgpLCBwcm90b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpOworICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUsIHByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9u
bHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkg
fCBEb250RW51bSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnN0cnVjdFByaXZhdGVOYW1lKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHB1Ymxp
Y05hbWUgPSBleGVjLT5hcmd1bWVudENvdW50KCkgPyBleGVjLT5hcmd1bWVudCgwKSA6IGpzVW5k
ZWZpbmVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShOYW1lSW5zdGFuY2U6OmNyZWF0
ZShleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHJpdmF0
ZU5hbWVTdHJ1Y3R1cmUoKSwgcHVibGljTmFtZS50b1N0cmluZyhleGVjKSkpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoTmFtZUluc3RhbmNlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcml2YXRlTmFtZVN0cnVjdHVyZSgpLCBwdWJsaWNOYW1l
LnRvU3RyaW5nKGV4ZWMpKSk7CiB9CiAKIENvbnN0cnVjdFR5cGUgTmFtZUNvbnN0cnVjdG9yOjpn
ZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lQ29uc3RydWN0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lQ29uc3RydWN0b3Iu
aAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFt
ZUNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2LDkgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCisgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpIAogICAgIHsgCi0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCisgICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7IAogICAgIH0KIAogcHJvdGVjdGVkOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFtZUluc3RhbmNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lSW5zdGFuY2UuY3Bw
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1l
SW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMCArMzMsMTAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBOYW1lSW5zdGFuY2U6OnNfaW5mbyA9IHsgIk5hbWUi
LCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKE5hbWVJbnN0YW5jZSkg
fTsKIAotTmFtZUluc3RhbmNlOjpOYW1lSW5zdGFuY2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTdHJpbmcqIG5hbWVTdHJpbmcpCi0gICAgOiBCYXNl
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKK05hbWVJbnN0YW5jZTo6TmFtZUluc3RhbmNlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU3RyaW5nKiBuYW1lU3RyaW5nKQorICAgIDogQmFz
ZSh2bSwgc3RydWN0dXJlKQogewotICAgIG1fbmFtZVN0cmluZy5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgbmFtZVN0cmluZyk7CisgICAgbV9uYW1lU3RyaW5nLnNldCh2bSwgdGhpcywgbmFtZVN0cmlu
Zyk7CiB9CiAKIHZvaWQgTmFtZUluc3RhbmNlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hbWVJbnN0YW5jZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hbWVJbnN0YW5jZS5oCShyZXZpc2lv
biAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lSW5zdGFuY2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTUgKzM3LDE1IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFs
RGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE5hbWVJbnN0YW5jZVR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE5hbWVJbnN0YW5jZVR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCi0gICAgc3RhdGljIE5hbWVJ
bnN0YW5jZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTU3RyaW5nKiBuYW1lU3RyaW5nKQorICAgIHN0YXRpYyBOYW1lSW5zdGFuY2UqIGNy
ZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1N0cmluZyogbmFtZVN0cmluZykK
ICAgICB7Ci0gICAgICAgIE5hbWVJbnN0YW5jZSogbmFtZSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPE5hbWVJbnN0YW5jZT4oZ2xvYmFsRGF0YS5oZWFwKSkgTmFtZUluc3RhbmNlKGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSwgbmFtZVN0cmluZyk7Ci0gICAgICAgIG5hbWUtPmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpOworICAgICAgICBOYW1lSW5zdGFuY2UqIG5hbWUgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxOYW1lSW5zdGFuY2U+KHZtLmhlYXApKSBOYW1lSW5zdGFuY2Uodm0s
IHN0cnVjdHVyZSwgbmFtZVN0cmluZyk7CisgICAgICAgIG5hbWUtPmZpbmlzaENyZWF0aW9uKHZt
KTsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQogCkBAIC01NSwxMSArNTUsMTEgQEAgcHVi
bGljOgogcHJvdGVjdGVkOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAg
ICBOYW1lSW5zdGFuY2UoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgSlNTdHJpbmcqKTsKKyAg
ICBOYW1lSW5zdGFuY2UoVk0mLCBTdHJ1Y3R1cmUqLCBKU1N0cmluZyopOwogCi0gICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCiAgICAgewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9i
YWxEYXRhKTsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICBBU1NF
UlQoaW5oZXJpdHMoJnNfaW5mbykpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTmFtZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTmFtZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hbWVQcm90b3R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OCwxMyArNDgsMTMgQEAgY29uc3QgQ2xhc3NJbmZvIE5hbWVQcm90b3R5cGU6
OnNfaW5mbyA9IAogKi8KIAogTmFtZVByb3RvdHlwZTo6TmFtZVByb3RvdHlwZShFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogQmFzZShleGVjLT5nbG9iYWxEYXRh
KCksIHN0cnVjdHVyZSwganNFbXB0eVN0cmluZyhleGVjKSkKKyAgICA6IEJhc2UoZXhlYy0+dm0o
KSwgc3RydWN0dXJlLCBqc0VtcHR5U3RyaW5nKGV4ZWMpKQogewogfQogCiB2b2lkIE5hbWVQcm90
b3R5cGU6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGV4ZWMtPnZtKCkpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hbWVQcm90b3R5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lUHJvdG90eXBlLmgJKHJldmlz
aW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hbWVQcm90b3R5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShn
bG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oTmFtZUluc3RhbmNl
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oTmFtZUluc3Rh
bmNlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKIHByb3RlY3RlZDoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVF
cnJvckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMsOSArNDMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogCiAgICAgICAg
IFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1cmUoKSB7IHJldHVybiBtX2Vycm9yU3RydWN0dXJlLmdl
dCgpOyB9CkBAIC01MywxNCArNTMsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJvdGVjdGVk
OgogICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0
IFN0cmluZyYgbmFtZSkKICAgICAgICAgewotICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBuYW1lKTsKKyAgICAgICAgICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKGV4ZWMtPnZtKCksIG5hbWUpOwogICAgICAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZz
X2luZm8pKTsKIAogICAgICAgICAgICAgTmF0aXZlRXJyb3JQcm90b3R5cGUqIHByb3RvdHlwZSA9
IE5hdGl2ZUVycm9yUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGVTdHJ1Y3R1cmUsIG5hbWUsIHRoaXMpOwogCi0gICAgICAgICAgICBwdXREaXJlY3QoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigxKSwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOyAvLyBFQ01BIDE1LjExLjcuNQotICAg
ICAgICAgICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLnByb3RvdHlwZSwgcHJvdG90eXBlLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51
bSk7Ci0gICAgICAgICAgICBtX2Vycm9yU3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCks
IHRoaXMsIEVycm9ySW5zdGFuY2U6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCks
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlKSk7CisgICAgICAgICAgICBwdXREaXJlY3QoZXhlYy0+
dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSksIERvbnREZWxl
dGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsgLy8gRUNNQSAxNS4xMS43LjUKKyAgICAgICAgICAg
IHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBw
cm90b3R5cGUsIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICAgICAgICAg
IG1fZXJyb3JTdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEVycm9ySW5zdGFuY2U6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSkpOwogICAg
ICAgICAgICAgQVNTRVJUKG1fZXJyb3JTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgQVNTRVJUKG1f
ZXJyb3JTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JQcm90b3R5cGUuY3Bw
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRp
dmVFcnJvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDkgQEAgTmF0
aXZlRXJyb3JQcm90b3R5cGU6Ok5hdGl2ZUVycm9yUHJvdG90eQogdm9pZCBOYXRpdmVFcnJvclBy
b3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZUFuZE1lc3NhZ2UsIE5hdGl2ZUVy
cm9yQ29uc3RydWN0b3IqIGNvbnN0cnVjdG9yKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGV4ZWMsIGdsb2JhbE9iamVjdCk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLm5hbWUsIGpzU3RyaW5nKGV4ZWMsIG5hbWVBbmRNZXNzYWdl
KSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5tZXNzYWdlLCBqc0VtcHR5U3RyaW5nKGV4ZWMpLCBEb250RW51bSk7Ci0g
ICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNv
bnN0cnVjdG9yLCBjb25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIHB1dERpcmVjdChleGVjLT52
bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSwganNTdHJpbmcoZXhlYywgbmFtZUFuZE1l
c3NhZ2UpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5tZXNzYWdlLCBqc0VtcHR5U3RyaW5nKGV4ZWMpLCBEb250RW51bSk7CisgICAg
cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvciwg
Y29uc3RydWN0b3IsIERvbnRFbnVtKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
dW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDE0ICs2MiwxNCBAQCBO
dW1iZXJDb25zdHJ1Y3Rvcjo6TnVtYmVyQ29uc3RydWN0b3IoSlNHCiAKIHZvaWQgTnVtYmVyQ29u
c3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgTnVtYmVyUHJvdG90eXBl
KiBudW1iZXJQcm90b3R5cGUpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xv
YmFsRGF0YSgpLCBudW1iZXJQcm90b3R5cGUtPnNfaW5mby5jbGFzc05hbWUpOworICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCksIG51bWJlclByb3RvdHlwZS0+c19pbmZvLmNsYXNz
TmFtZSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIAogICAgIC8vIE51bWJlci5Q
cm90b3R5cGUKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRh
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIG51bWJlclByb3RvdHlwZSwgRG9u
dEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIG51bWJl
clByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogCiAgICAgLy8g
bm8uIG9mIGFyZ3VtZW50cyBmb3IgY29uc3RydWN0b3IKLSAgICBwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgs
IGpzTnVtYmVyKDEpLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CisgICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
Lmxlbmd0aCwganNOdW1iZXIoMSksIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsK
IH0KIAogYm9vbCBOdW1iZXJDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCkBAIC0xMTUsOSArMTE1LDkgQEAgc3RhdGljIEpTVmFsdWUgbnVtYmVyQ29u
c3RydWN0b3JNaW5WYWx1ZQogLy8gRUNNQSAxNS43LjEKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhOdW1iZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgTnVtYmVyT2JqZWN0KiBvYmplY3QgPSBOdW1iZXJPYmplY3Q6OmNyZWF0ZShl
eGVjLT5nbG9iYWxEYXRhKCksIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmds
b2JhbE9iamVjdCgpLT5udW1iZXJPYmplY3RTdHJ1Y3R1cmUoKSk7CisgICAgTnVtYmVyT2JqZWN0
KiBvYmplY3QgPSBOdW1iZXJPYmplY3Q6OmNyZWF0ZShleGVjLT52bSgpLCBhc0ludGVybmFsRnVu
Y3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+bnVtYmVyT2JqZWN0U3RydWN0
dXJlKCkpOwogICAgIGRvdWJsZSBuID0gZXhlYy0+YXJndW1lbnRDb3VudCgpID8gZXhlYy0+YXJn
dW1lbnQoMCkudG9OdW1iZXIoZXhlYykgOiAwOwotICAgIG9iamVjdC0+c2V0SW50ZXJuYWxWYWx1
ZShleGVjLT5nbG9iYWxEYXRhKCksIGpzTnVtYmVyKG4pKTsKKyAgICBvYmplY3QtPnNldEludGVy
bmFsVmFsdWUoZXhlYy0+dm0oKSwganNOdW1iZXIobikpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUob2JqZWN0KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TnVtYmVyQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw5ICs0Niw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBjb25z
dCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG8pIAorICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvKSAKICAgICAgICAgeyAKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShn
bG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksICZzX2luZm8pOyAKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsgCiAgICAgICAgIH0KIAogICAgICAgICBlbnVtIHsgTmFOVmFs
dWUsIE5lZ0luZmluaXR5LCBQb3NJbmZpbml0eSwgTWF4VmFsdWUsIE1pblZhbHVlIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5jcHAJKHJl
dmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDIxICszMiwyMSBAQCBBU1NFUlRfSEFTX1RS
SVZJQUxfREVTVFJVQ1RPUihOdW1iZXJPYmplCiAKIGNvbnN0IENsYXNzSW5mbyBOdW1iZXJPYmpl
Y3Q6OnNfaW5mbyA9IHsgIk51bWJlciIsICZKU1dyYXBwZXJPYmplY3Q6OnNfaW5mbywgMCwgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShOdW1iZXJPYmplY3QpIH07CiAKLU51bWJlck9iamVjdDo6TnVt
YmVyT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
Ci0gICAgOiBKU1dyYXBwZXJPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQorTnVtYmVyT2Jq
ZWN0OjpOdW1iZXJPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEpT
V3JhcHBlck9iamVjdCh2bSwgc3RydWN0dXJlKQogewogfQogCi12b2lkIE51bWJlck9iamVjdDo6
ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBOdW1iZXJPYmpl
Y3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihn
bG9iYWxEYXRhKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGlu
aGVyaXRzKCZzX2luZm8pKTsKIH0KIAogTnVtYmVyT2JqZWN0KiBjb25zdHJ1Y3ROdW1iZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG51bWJl
cikKIHsKLSAgICBOdW1iZXJPYmplY3QqIG9iamVjdCA9IE51bWJlck9iamVjdDo6Y3JlYXRlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5udW1iZXJPYmplY3RTdHJ1Y3R1cmUoKSk7
Ci0gICAgb2JqZWN0LT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbnVtYmVy
KTsKKyAgICBOdW1iZXJPYmplY3QqIG9iamVjdCA9IE51bWJlck9iamVjdDo6Y3JlYXRlKGV4ZWMt
PnZtKCksIGdsb2JhbE9iamVjdC0+bnVtYmVyT2JqZWN0U3RydWN0dXJlKCkpOworICAgIG9iamVj
dC0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT52bSgpLCBudW1iZXIpOwogICAgIHJldHVybiBvYmpl
Y3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9i
amVjdC5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9OdW1iZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMjQgKzI3LDI0IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgY2xhc3MgTnVtYmVyT2JqZWN0IDogcHVibGljIEpTV3JhcHBlck9i
amVjdCB7CiAgICAgcHJvdGVjdGVkOgotICAgICAgICBOdW1iZXJPYmplY3QoSlNHbG9iYWxEYXRh
JiwgU3RydWN0dXJlKik7Ci0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRh
Jik7CisgICAgICAgIE51bWJlck9iamVjdChWTSYsIFN0cnVjdHVyZSopOworICAgICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJik7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNX
cmFwcGVyT2JqZWN0IEJhc2U7CiAKLSAgICAgICAgc3RhdGljIE51bWJlck9iamVjdCogY3JlYXRl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAg
IHN0YXRpYyBOdW1iZXJPYmplY3QqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
KQogICAgICAgICB7Ci0gICAgICAgICAgICBOdW1iZXJPYmplY3QqIG51bWJlciA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPE51bWJlck9iamVjdD4oZ2xvYmFsRGF0YS5oZWFwKSkgTnVtYmVy
T2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBudW1iZXItPmZpbmlz
aENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICAgICAgTnVtYmVyT2JqZWN0KiBudW1iZXIg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxOdW1iZXJPYmplY3Q+KHZtLmhlYXApKSBOdW1i
ZXJPYmplY3Qodm0sIHN0cnVjdHVyZSk7CisgICAgICAgICAgICBudW1iZXItPmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICAgICAgICAgIHJldHVybiBudW1iZXI7CiAgICAgICAgIH0KIAogICAgICAg
ICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAg
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhOdW1iZXJPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oTnVtYmVyT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTQ4
NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzEsMTQgKzcxLDE0IEBAIGNvbnN0IENsYXNzSW5mbyBOdW1i
ZXJQcm90b3R5cGU6OnNfaW5mbyAKIEFTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKE51bWJl
clByb3RvdHlwZSk7CiAKIE51bWJlclByb3RvdHlwZTo6TnVtYmVyUHJvdG90eXBlKEV4ZWNTdGF0
ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBOdW1iZXJPYmplY3QoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpCisgICAgOiBOdW1iZXJPYmplY3QoZXhlYy0+dm0oKSwg
c3RydWN0dXJlKQogewogfQogCiB2b2lkIE51bWJlclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24o
RXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCopCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBzZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmds
b2JhbERhdGEoKSwganNOdW1iZXIoMCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMt
PnZtKCkpOworICAgIHNldEludGVybmFsVmFsdWUoZXhlYy0+dm0oKSwganNOdW1iZXIoMCkpOwog
CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIH0KQEAgLTQ3NSwxMyArNDc1LDEzIEBA
IHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgaW50ZWdlclZhbHUKICAgICBpZiAoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHZhbHVlKSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYWRpeCkpIHsK
ICAgICAgICAgQVNTRVJUKHZhbHVlIDw9IDM2KTsKICAgICAgICAgQVNTRVJUKHZhbHVlID49IDAp
OwotICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgp
OwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGdsb2JhbERhdGEtPnNtYWxsU3RyaW5n
cy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZ2xvYmFsRGF0YSwgcmFkaXhEaWdpdHNbdmFsdWVdKSk7
CisgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHZtLCByYWRpeERp
Z2l0c1t2YWx1ZV0pKTsKICAgICB9CiAKICAgICBpZiAocmFkaXggPT0gMTApIHsKLSAgICAgICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5u
dW1lcmljU3RyaW5ncy5hZGQodmFsdWUpKSk7CisgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCB2bS0+bnVtZXJp
Y1N0cmluZ3MuYWRkKHZhbHVlKSkpOwogICAgIH0KIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNTdHJpbmcoZXhlYywgdG9TdHJpbmdXaXRoUmFkaXgodmFsdWUsIHJhZGl4KSkpOwpAQCAt
NTAzLDggKzUwMyw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG8K
ICAgICAgICAgcmV0dXJuIGludGVnZXJWYWx1ZVRvU3RyaW5nKGV4ZWMsIHJhZGl4LCBpbnRlZ2Vy
VmFsdWUpOwogCiAgICAgaWYgKHJhZGl4ID09IDEwKSB7Ci0gICAgICAgIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNTdHJpbmcoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+bnVtZXJpY1N0cmluZ3Mu
YWRkKGRvdWJsZVZhbHVlKSkpOworICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgdm0tPm51bWVyaWNTdHJpbmdz
LmFkZChkb3VibGVWYWx1ZSkpKTsKICAgICB9CiAKICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUoZG91
YmxlVmFsdWUpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJv
dG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVt
YmVyUHJvdG90eXBlLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5ICszOCw5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE51bWJlck9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhOdW1iZXJP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgICAgICB9CiAKICAgICBw
cm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25z
dHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg1LDExICs4NSwxMSBAQCBPYmplY3RDb25zdHJ1Y3Rvcjo6T2JqZWN0Q29uc3RydWN0b3IoSlNH
CiAKIHZvaWQgT2JqZWN0Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgT2JqZWN0UHJvdG90eXBlKiBvYmplY3RQcm90b3R5cGUpCiB7Ci0gICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJPYmplY3QiKS5z
dHJpbmcoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmll
cihleGVjLCAiT2JqZWN0Iikuc3RyaW5nKCkpOwogICAgIC8vIEVDTUEgMTUuMi4zLjEKLSAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5wcm90b3R5cGUsIG9iamVjdFByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZt
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIG9iamVjdFByb3RvdHlwZSwgRG9u
dEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIC8vIG5vLiBvZiBhcmd1bWVudHMg
Zm9yIGNvbnN0cnVjdG9yCi0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xv
YmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigxKSwgUmVh
ZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVy
KDEpLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiB9CiAKIGJvb2wgT2JqZWN0
Q29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90ICZzbG90KQpAQCAt
MTYwLDE3ICsxNjAsMTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25z
dAogCiAgICAgSlNPYmplY3QqIGRlc2NyaXB0aW9uID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhl
Yyk7CiAgICAgaWYgKCFkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKLSAgICAg
ICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS52YWx1ZSwgZGVzY3JpcHRvci52YWx1ZSgpID8gZGVzY3JpcHRvci52YWx1ZSgp
IDoganNVbmRlZmluZWQoKSwgMCk7Ci0gICAgICAgIGRlc2NyaXB0aW9uLT5wdXREaXJlY3QoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkud3JpdGFibGUsIGpzQm9vbGVh
bihkZXNjcmlwdG9yLndyaXRhYmxlKCkpLCAwKTsKKyAgICAgICAgZGVzY3JpcHRpb24tPnB1dERp
cmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWUsIGRlc2NyaXB0b3Iu
dmFsdWUoKSA/IGRlc2NyaXB0b3IudmFsdWUoKSA6IGpzVW5kZWZpbmVkKCksIDApOworICAgICAg
ICBkZXNjcmlwdGlvbi0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS53cml0YWJsZSwganNCb29sZWFuKGRlc2NyaXB0b3Iud3JpdGFibGUoKSksIDApOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIEFTU0VSVChkZXNjcmlwdG9yLmdldHRlcigpKTsKICAgICAgICAgQVNT
RVJUKGRlc2NyaXB0b3Iuc2V0dGVyKCkpOwotICAgICAgICBkZXNjcmlwdGlvbi0+cHV0RGlyZWN0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmdldCwgZGVzY3JpcHRv
ci5nZXR0ZXIoKSwgMCk7Ci0gICAgICAgIGRlc2NyaXB0aW9uLT5wdXREaXJlY3QoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc2V0LCBkZXNjcmlwdG9yLnNldHRlcigp
LCAwKTsKKyAgICAgICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuZ2V0LCBkZXNjcmlwdG9yLmdldHRlcigpLCAwKTsKKyAgICAgICAgZGVz
Y3JpcHRpb24tPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc2V0
LCBkZXNjcmlwdG9yLnNldHRlcigpLCAwKTsKICAgICB9CiAgICAgCi0gICAgZGVzY3JpcHRpb24t
PnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5lbnVt
ZXJhYmxlLCBqc0Jvb2xlYW4oZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpLCAwKTsKLSAgICBkZXNj
cmlwdGlvbi0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmNvbmZpZ3VyYWJsZSwganNCb29sZWFuKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCkpLCAw
KTsKKyAgICBkZXNjcmlwdGlvbi0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5lbnVtZXJhYmxlLCBqc0Jvb2xlYW4oZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpLCAw
KTsKKyAgICBkZXNjcmlwdGlvbi0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5jb25maWd1cmFibGUsIGpzQm9vbGVhbihkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgp
KSwgMCk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGRlc2NyaXB0aW9uKTsKIH0KQEAg
LTM2OCw3ICszNjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0
CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KG9iaik7CiAKICAgICBpZiAoaXNKU0Zp
bmFsT2JqZWN0KG9iamVjdCkpIHsKLSAgICAgICAgb2JqZWN0LT5zZWFsKGV4ZWMtPmdsb2JhbERh
dGEoKSk7CisgICAgICAgIG9iamVjdC0+c2VhbChleGVjLT52bSgpKTsKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShvYmopOwogICAgIH0KIApAQCAtMzkwLDcgKzM5MCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICB9CiAKICAgICAvLyAzLiBT
ZXQgdGhlIFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8gdG8gZmFsc2UuCi0g
ICAgb2JqZWN0LT5wcmV2ZW50RXh0ZW5zaW9ucyhleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIG9i
amVjdC0+cHJldmVudEV4dGVuc2lvbnMoZXhlYy0+dm0oKSk7CiAKICAgICAvLyA0LiBSZXR1cm4g
Ty4KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iaik7CkBAIC00MDUsNyArNDA1LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIEpTT2JqZWN0KiBv
YmplY3QgPSBhc09iamVjdChvYmopOwogCiAgICAgaWYgKGlzSlNGaW5hbE9iamVjdChvYmplY3Qp
ICYmICFoYXNJbmRleGVkUHJvcGVydGllcyhvYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkpIHsKLSAgICAgICAgb2JqZWN0LT5mcmVlemUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAg
ICAgICAgb2JqZWN0LT5mcmVlemUoZXhlYy0+dm0oKSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUob2JqKTsKICAgICB9CiAKQEAgLTQzMSw3ICs0MzEsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgfQogCiAgICAgLy8gMy4gU2V0IHRoZSBb
W0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPIHRvIGZhbHNlLgotICAgIG9iamVj
dC0+cHJldmVudEV4dGVuc2lvbnMoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBvYmplY3QtPnBy
ZXZlbnRFeHRlbnNpb25zKGV4ZWMtPnZtKCkpOwogCiAgICAgLy8gNC4gUmV0dXJuIE8uCiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmopOwpAQCAtNDQyLDcgKzQ0Miw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICBKU1ZhbHVlIG9iaiA9IGV4ZWMt
PmFyZ3VtZW50KDApOwogICAgIGlmICghb2JqLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiT2Jq
ZWN0LnByZXZlbnRFeHRlbnNpb25zIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiBPYmplY3RzLiIpKSk7
Ci0gICAgYXNPYmplY3Qob2JqKS0+cHJldmVudEV4dGVuc2lvbnMoZXhlYy0+Z2xvYmFsRGF0YSgp
KTsKKyAgICBhc09iamVjdChvYmopLT5wcmV2ZW50RXh0ZW5zaW9ucyhleGVjLT52bSgpKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iaik7CiB9CiAKQEAgLTQ1NSw3ICs0NTUsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgSlNPYmplY3QqIG9i
amVjdCA9IGFzT2JqZWN0KG9iaik7CiAKICAgICBpZiAoaXNKU0ZpbmFsT2JqZWN0KG9iamVjdCkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG9iamVjdC0+aXNTZWFs
ZWQoZXhlYy0+Z2xvYmFsRGF0YSgpKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbihvYmplY3QtPmlzU2VhbGVkKGV4ZWMtPnZtKCkpKSk7CiAKICAgICAvLyAyLiBG
b3IgZWFjaCBuYW1lZCBvd24gcHJvcGVydHkgbmFtZSBQIG9mIE8sCiAgICAgUHJvcGVydHlOYW1l
QXJyYXkgcHJvcGVydGllcyhleGVjKTsKQEAgLTQ4NSw3ICs0ODUsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2Jq
ZWN0KG9iaik7CiAKICAgICBpZiAoaXNKU0ZpbmFsT2JqZWN0KG9iamVjdCkpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG9iamVjdC0+aXNGcm96ZW4oZXhlYy0+Z2xv
YmFsRGF0YSgpKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihv
YmplY3QtPmlzRnJvemVuKGV4ZWMtPnZtKCkpKSk7CiAKICAgICAvLyAyLiBGb3IgZWFjaCBuYW1l
ZCBvd24gcHJvcGVydHkgbmFtZSBQIG9mIE8sCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVy
dGllcyhleGVjKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENv
bnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T2JqZWN0Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDUs
OSArNDUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJ
bmZvIHNfaW5mbzsKIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9i
YWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKQEAg
LTY4LDcgKzY4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgaW5saW5lIEpTT2JqZWN0KiBjb25z
dHJ1Y3RFbXB0eU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBwcm90b3R5cGUsIHVu
c2lnbmVkIGlubGluZUNhcGFjaXR5KQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKLSAgICAgICAgUHJvdG90
eXBlTWFwJiBwcm90b3R5cGVNYXAgPSBnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5wcm90b3R5
cGVNYXA7CisgICAgICAgIFByb3RvdHlwZU1hcCYgcHJvdG90eXBlTWFwID0gZ2xvYmFsT2JqZWN0
LT52bSgpLnByb3RvdHlwZU1hcDsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBwcm90
b3R5cGVNYXAuZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUoCiAgICAgICAgICAgICBw
cm90b3R5cGUsIGlubGluZUNhcGFjaXR5KTsKICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5
T2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PYmplY3RQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1LDE3ICs0NSwxNyBAQCBBU1NFUlRfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUihP
YmplY3RQcm90CiBjb25zdCBDbGFzc0luZm8gT2JqZWN0UHJvdG90eXBlOjpzX2luZm8gPSB7ICJP
YmplY3QiLCAmSlNOb25GaW5hbE9iamVjdDo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKE9iamVjdFByb3RvdHlwZSkgfTsKIAogT2JqZWN0UHJvdG90eXBlOjpPYmplY3RQcm90b3R5
cGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0dWN0dXJlKQotICAgIDogSlNOb25GaW5h
bE9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIHN0dWN0dXJlKQorICAgIDogSlNOb25GaW5hbE9i
amVjdChleGVjLT52bSgpLCBzdHVjdHVyZSkKIHsKIH0KIAogdm9pZCBPYmplY3RQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRh
KCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAKLSAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihnbG9iYWxEYXRhKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNT
RVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLSAgICBnbG9iYWxEYXRhLnByb3RvdHlwZU1hcC5hZGRQ
cm90b3R5cGUodGhpcyk7CisgICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3RvdHlwZSh0aGlzKTsK
ICAgICAKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKCJ0b1N0cmluZyIsIG9iamVjdFByb3RvRnVu
Y1RvU3RyaW5nLCBEb250RW51bSwgMCk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTigidG9Mb2Nh
bGVTdHJpbmciLCBvYmplY3RQcm90b0Z1bmNUb0xvY2FsZVN0cmluZywgRG9udEVudW0sIDApOwpA
QCAtMjE4LDcgKzIxOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJv
dG8KICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dPdXRPZk1lbW9yeUVy
cm9yKGV4ZWMpKTsKIAogICAgICAgICByZXN1bHQgPSBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywg
bmV3U3RyaW5nLnJlbGVhc2UoKSk7Ci0gICAgICAgIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5z
ZXRPYmplY3RUb1N0cmluZ1ZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgcmVz
dWx0KTsKKyAgICAgICAgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPnNldE9iamVjdFRvU3RyaW5n
VmFsdWUoZXhlYy0+dm0oKSwgdGhpc09iamVjdCwgcmVzdWx0KTsKICAgICB9CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw5ICszMyw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogCiAgICAgcHJv
dGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9u
cy5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NiwzMiArNTYsMzIgQEAgTkVWRVJf
SU5MSU5FIEpTVmFsdWUganNBZGRTbG93Q2FzZShDYWxsRgogICAgIHJldHVybiBqc051bWJlcihw
MS50b051bWJlcihjYWxsRnJhbWUpICsgcDIudG9OdW1iZXIoY2FsbEZyYW1lKSk7CiB9CiAKLUpT
VmFsdWUganNUeXBlU3RyaW5nRm9yVmFsdWUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHYpCitKU1ZhbHVlIGpzVHlwZVN0cmlu
Z0ZvclZhbHVlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2
KQogewogICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRh
LnNtYWxsU3RyaW5ncy51bmRlZmluZWRTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZtLnNtYWxs
U3RyaW5ncy51bmRlZmluZWRTdHJpbmcoKTsKICAgICBpZiAodi5pc0Jvb2xlYW4oKSkKLSAgICAg
ICAgcmV0dXJuIGdsb2JhbERhdGEuc21hbGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKTsKKyAgICAg
ICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy5ib29sZWFuU3RyaW5nKCk7CiAgICAgaWYgKHYuaXNO
dW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEuc21hbGxTdHJpbmdzLm51bWJlclN0
cmluZygpOworICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdzLm51bWJlclN0cmluZygpOwog
ICAgIGlmICh2LmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLnNtYWxsU3Ry
aW5ncy5zdHJpbmdTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy5zdHJp
bmdTdHJpbmcoKTsKICAgICBpZiAodi5pc09iamVjdCgpKSB7CiAgICAgICAgIC8vIFJldHVybiAi
dW5kZWZpbmVkIiBmb3Igb2JqZWN0cyB0aGF0IHNob3VsZCBiZSB0cmVhdGVkCiAgICAgICAgIC8v
IGFzIG51bGwgd2hlbiBkb2luZyBjb21wYXJpc29ucy4KICAgICAgICAgaWYgKGFzT2JqZWN0KHYp
LT5zdHJ1Y3R1cmUoKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChnbG9iYWxPYmplY3QpKQotICAg
ICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEuc21hbGxTdHJpbmdzLnVuZGVmaW5lZFN0cmluZygp
OworICAgICAgICAgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy51bmRlZmluZWRTdHJpbmcoKTsK
ICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBh
c09iamVjdCh2KTsKICAgICAgICAgaWYgKG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERh
dGEob2JqZWN0LCBjYWxsRGF0YSkgIT0gQ2FsbFR5cGVOb25lKQotICAgICAgICAgICAgcmV0dXJu
IGdsb2JhbERhdGEuc21hbGxTdHJpbmdzLmZ1bmN0aW9uU3RyaW5nKCk7CisgICAgICAgICAgICBy
ZXR1cm4gdm0uc21hbGxTdHJpbmdzLmZ1bmN0aW9uU3RyaW5nKCk7CiAgICAgfQotICAgIHJldHVy
biBnbG9iYWxEYXRhLnNtYWxsU3RyaW5ncy5vYmplY3RTdHJpbmcoKTsKKyAgICByZXR1cm4gdm0u
c21hbGxTdHJpbmdzLm9iamVjdFN0cmluZygpOwogfQogCiBKU1ZhbHVlIGpzVHlwZVN0cmluZ0Zv
clZhbHVlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHYpCiB7Ci0gICAgcmV0dXJuIGpz
VHlwZVN0cmluZ0ZvclZhbHVlKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSwgdik7CisgICAgcmV0dXJuIGpzVHlwZVN0cmluZ0ZvclZhbHVl
KGNhbGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHYpOwog
fQogCiBib29sIGpzSXNPYmplY3RUeXBlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHYp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCShyZXZp
c2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEzICszMywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
TkVWRVJfSU5MSU5FIEpTVmFsdWUganNBZGRTbG93Q2FzZShDYWxsRnJhbWUqLCBKU1ZhbHVlLCBK
U1ZhbHVlKTsKIEpTVmFsdWUganNUeXBlU3RyaW5nRm9yVmFsdWUoQ2FsbEZyYW1lKiwgSlNWYWx1
ZSk7Ci1KU1ZhbHVlIGpzVHlwZVN0cmluZ0ZvclZhbHVlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSk7CitKU1ZhbHVlIGpzVHlwZVN0cmluZ0ZvclZhbHVlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIGJvb2wganNJc09iamVjdFR5cGUoQ2FsbEZyYW1lKiwg
SlNWYWx1ZSk7CiBib29sIGpzSXNGdW5jdGlvblR5cGUoSlNWYWx1ZSk7CiAKIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzMSwgSlNTdHJp
bmcqIHMyKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERh
dGEoKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoMSA9
IHMxLT5sZW5ndGgoKTsKICAgICBpZiAoIWxlbmd0aDEpCkBAIC01MCwzNSArNTAsMzUgQEAgQUxX
QVlTX0lOTElORSBKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZQogICAgIGlmICgobGVuZ3RoMSAr
IGxlbmd0aDIpIDwgbGVuZ3RoMSkKICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJv
cihleGVjKTsKIAotICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZShnbG9iYWxEYXRhLCBz
MSwgczIpOworICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZSh2bSwgczEsIHMyKTsKIH0K
IAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
U3RyaW5nJiB1MSwgY29uc3QgU3RyaW5nJiB1MiwgY29uc3QgU3RyaW5nJiB1MykKIHsKLSAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoMSA9IHUxLmxlbmd0aCgpOwog
ICAgIHVuc2lnbmVkIGxlbmd0aDIgPSB1Mi5sZW5ndGgoKTsKICAgICB1bnNpZ25lZCBsZW5ndGgz
ID0gdTMubGVuZ3RoKCk7CiAgICAgaWYgKCFsZW5ndGgxKQotICAgICAgICByZXR1cm4ganNTdHJp
bmcoZXhlYywganNTdHJpbmcoZ2xvYmFsRGF0YSwgdTIpLCBqc1N0cmluZyhnbG9iYWxEYXRhLCB1
MykpOworICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywganNTdHJpbmcodm0sIHUyKSwganNT
dHJpbmcodm0sIHUzKSk7CiAgICAgaWYgKCFsZW5ndGgyKQotICAgICAgICByZXR1cm4ganNTdHJp
bmcoZXhlYywganNTdHJpbmcoZ2xvYmFsRGF0YSwgdTEpLCBqc1N0cmluZyhnbG9iYWxEYXRhLCB1
MykpOworICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywganNTdHJpbmcodm0sIHUxKSwganNT
dHJpbmcodm0sIHUzKSk7CiAgICAgaWYgKCFsZW5ndGgzKQotICAgICAgICByZXR1cm4ganNTdHJp
bmcoZXhlYywganNTdHJpbmcoZ2xvYmFsRGF0YSwgdTEpLCBqc1N0cmluZyhnbG9iYWxEYXRhLCB1
MikpOworICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywganNTdHJpbmcodm0sIHUxKSwganNT
dHJpbmcodm0sIHUyKSk7CiAKICAgICBpZiAoKGxlbmd0aDEgKyBsZW5ndGgyKSA8IGxlbmd0aDEp
CiAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAgICAgaWYgKChs
ZW5ndGgxICsgbGVuZ3RoMiArIGxlbmd0aDMpIDwgbGVuZ3RoMykKICAgICAgICAgcmV0dXJuIHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKIAotICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNy
ZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGpzU3RyaW5nKGdsb2JhbERhdGEsIHUxKSwganNTdHJp
bmcoZ2xvYmFsRGF0YSwgdTIpLCBqc1N0cmluZyhnbG9iYWxEYXRhLCB1MykpOworICAgIHJldHVy
biBKU1JvcGVTdHJpbmc6OmNyZWF0ZShleGVjLT52bSgpLCBqc1N0cmluZyh2bSwgdTEpLCBqc1N0
cmluZyh2bSwgdTIpLCBqc1N0cmluZyh2bSwgdTMpKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1Zh
bHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgUmVnaXN0ZXIqIHN0cmluZ3MsIHVuc2lnbmVk
IGNvdW50KQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxE
YXRhKCk7Ci0gICAgSlNSb3BlU3RyaW5nOjpSb3BlQnVpbGRlciByb3BlQnVpbGRlcigqZ2xvYmFs
RGF0YSk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgSlNSb3BlU3RyaW5nOjpSb3Bl
QnVpbGRlciByb3BlQnVpbGRlcigqdm0pOwogCiAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gMDsK
IApAQCAtOTYsOCArOTYsOCBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTdHJpbmcoRXhlY1N0
YXRlCiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZ0Zyb21Bcmd1bWVudHMoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIEpTUm9wZVN0cmluZzo6Um9wZUJ1aWxk
ZXIgcm9wZUJ1aWxkZXIoKmdsb2JhbERhdGEpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwor
ICAgIEpTUm9wZVN0cmluZzo6Um9wZUJ1aWxkZXIgcm9wZUJ1aWxkZXIoKnZtKTsKICAgICByb3Bl
QnVpbGRlci5hcHBlbmQodGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsKIAogICAgIHVuc2lnbmVk
IG9sZExlbmd0aCA9IDA7CkBAIC0yMzAsOSArMjMwLDkgQEAgaW5saW5lIHNpemVfdCBub3JtYWxp
emVQcm90b3R5cGVDaGFpbkZvcgogICAgICAgICAvLyBTaW5jZSB3ZSdyZSBhY2Nlc3NpbmcgYSBw
cm90b3R5cGUgaW4gYSBsb29wLCBpdCdzIGEgZ29vZCBiZXQgdGhhdCBpdAogICAgICAgICAvLyBz
aG91bGQgbm90IGJlIHRyZWF0ZWQgYXMgYSBkaWN0aW9uYXJ5LgogICAgICAgICBpZiAoY2VsbC0+
c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7Ci0gICAgICAgICAgICBhc09iamVjdChjZWxs
KS0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOworICAg
ICAgICAgICAgYXNPYmplY3QoY2VsbCktPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KGNhbGxGcmFt
ZS0+dm0oKSk7CiAgICAgICAgICAgICBpZiAoc2xvdEJhc2UgPT0gY2VsbCkKLSAgICAgICAgICAg
ICAgICBzbG90T2Zmc2V0ID0gY2VsbC0+c3RydWN0dXJlKCktPmdldChjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKSwgcHJvcGVydHlOYW1lKTsgCisgICAgICAgICAgICAgICAgc2xvdE9mZnNldCA9IGNl
bGwtPnN0cnVjdHVyZSgpLT5nZXQoY2FsbEZyYW1lLT52bSgpLCBwcm9wZXJ0eU5hbWUpOyAKICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICsrY291bnQ7CkBAIC0yNTgsNyArMjU4LDcg
QEAgaW5saW5lIHNpemVfdCBub3JtYWxpemVQcm90b3R5cGVDaGFpbihDYQogICAgICAgICAvLyBT
aW5jZSB3ZSdyZSBhY2Nlc3NpbmcgYSBwcm90b3R5cGUgaW4gYSBsb29wLCBpdCdzIGEgZ29vZCBi
ZXQgdGhhdCBpdAogICAgICAgICAvLyBzaG91bGQgbm90IGJlIHRyZWF0ZWQgYXMgYSBkaWN0aW9u
YXJ5LgogICAgICAgICBpZiAoYmFzZS0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKQotICAg
ICAgICAgICAgYXNPYmplY3QoYmFzZSktPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KGNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgIGFzT2JqZWN0KGJhc2UpLT5mbGF0dGVuRGlj
dGlvbmFyeU9iamVjdChjYWxsRnJhbWUtPnZtKCkpOwogCiAgICAgICAgICsrY291bnQ7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eU1hcEhhc2hUYWJsZS5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nywx
MSArNzcsMTEgQEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgIHVuc2lnbmVkIGF0dHJp
YnV0ZXM7CiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gc3BlY2lmaWNWYWx1ZTsKIAotICAgIFBy
b3BlcnR5TWFwRW50cnkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBT
dHJpbmdJbXBsKiBrZXksIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgdW5zaWduZWQgYXR0cmlidXRl
cywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKQorICAgIFByb3BlcnR5TWFwRW50cnkoVk0mIHZtLCBK
U0NlbGwqIG93bmVyLCBTdHJpbmdJbXBsKiBrZXksIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgdW5z
aWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKQogICAgICAgICA6IGtleShr
ZXkpCiAgICAgICAgICwgb2Zmc2V0KG9mZnNldCkKICAgICAgICAgLCBhdHRyaWJ1dGVzKGF0dHJp
YnV0ZXMpCi0gICAgICAgICwgc3BlY2lmaWNWYWx1ZShnbG9iYWxEYXRhLCBvd25lciwgc3BlY2lm
aWNWYWx1ZSwgV3JpdGVCYXJyaWVyPEpTQ2VsbD46Ok1heUJlTnVsbCkKKyAgICAgICAgLCBzcGVj
aWZpY1ZhbHVlKHZtLCBvd25lciwgc3BlY2lmaWNWYWx1ZSwgV3JpdGVCYXJyaWVyPEpTQ2VsbD46
Ok1heUJlTnVsbCkKICAgICB7CiAgICAgfQogfTsKQEAgLTEzNSw5ICsxMzUsOSBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0g
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKENvbXBvdW5kVHlwZSwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiksICZzX2luZm8p
OworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhDb21wb3VuZFR5cGUsIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4pLCAm
c19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CkBAIC0xNTUsOSArMTU1LDkgQEAgcHVibGljOgogICAgIHR5cGVkZWYg
c3RkOjpwYWlyPFZhbHVlVHlwZSosIHVuc2lnbmVkPiBmaW5kX2l0ZXJhdG9yOwogCiAgICAgLy8g
Q29uc3RydWN0b3IgaXMgcGFzc2VkIGFuIGluaXRpYWwgY2FwYWNpdHksIGEgUHJvcGVydHlUYWJs
ZSB0byBjb3B5LCBvciBib3RoLgotICAgIHN0YXRpYyBQcm9wZXJ0eVRhYmxlKiBjcmVhdGUoSlNH
bG9iYWxEYXRhJiwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5KTsKLSAgICBzdGF0aWMgUHJvcGVy
dHlUYWJsZSogY2xvbmUoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiBvd25lciwgY29uc3QgUHJvcGVy
dHlUYWJsZSYpOwotICAgIHN0YXRpYyBQcm9wZXJ0eVRhYmxlKiBjbG9uZShKU0dsb2JhbERhdGEm
LCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5
VGFibGUmKTsKKyAgICBzdGF0aWMgUHJvcGVydHlUYWJsZSogY3JlYXRlKFZNJiwgdW5zaWduZWQg
aW5pdGlhbENhcGFjaXR5KTsKKyAgICBzdGF0aWMgUHJvcGVydHlUYWJsZSogY2xvbmUoVk0mLCBK
U0NlbGwqIG93bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CisgICAgc3RhdGljIFByb3BlcnR5
VGFibGUqIGNsb25lKFZNJiwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5
LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CiAgICAgflByb3BlcnR5VGFibGUoKTsKIAogICAgIC8v
IE9yZGVyZWQgaXRlcmF0aW9uIG1ldGhvZHMuCkBAIC0xOTQsNyArMTk0LDcgQEAgcHVibGljOgog
ICAgIFByb3BlcnR5T2Zmc2V0IG5leHRPZmZzZXQoUHJvcGVydHlPZmZzZXQgaW5saW5lQ2FwYWNp
dHkpOwogCiAgICAgLy8gQ29weSB0aGlzIFByb3BlcnR5VGFibGUsIGVuc3VyaW5nIHRoZSBjb3B5
IGhhcyBhdCBsZWFzdCB0aGUgY2FwYWNpdHkgcHJvdmlkZWQuCi0gICAgUHJvcGVydHlUYWJsZSog
Y29weShKU0dsb2JhbERhdGEmLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBuZXdDYXBhY2l0eSk7
CisgICAgUHJvcGVydHlUYWJsZSogY29weShWTSYsIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIG5l
d0NhcGFjaXR5KTsKIAogI2lmbmRlZiBOREVCVUcKICAgICBzaXplX3Qgc2l6ZUluTWVtb3J5KCk7
CkBAIC0yMDIsOSArMjAyLDkgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgUHJv
cGVydHlUYWJsZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkpOwotICAg
IFByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiwgY29uc3QgUHJvcGVydHlUYWJs
ZSYpOwotICAgIFByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiwgdW5zaWduZWQg
aW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CisgICAgUHJvcGVydHlUYWJs
ZShWTSYsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSk7CisgICAgUHJvcGVydHlUYWJsZShWTSYs
IEpTQ2VsbCosIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAgICBQcm9wZXJ0eVRhYmxlKFZNJiwg
SlNDZWxsKiwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7
CiAKICAgICBQcm9wZXJ0eVRhYmxlKGNvbnN0IFByb3BlcnR5VGFibGUmKTsKICAgICAvLyBVc2Vk
IHRvIGluc2VydCBhIHZhbHVlIGtub3duIG5vdCB0byBiZSBpbiB0aGUgdGFibGUsIGFuZCB3aGVy
ZSB3ZSBrbm93IGNhcGFjaXR5IHRvIGJlIGF2YWlsYWJsZS4KQEAgLTQ1MywxNSArNDUzLDE1IEBA
IGlubGluZSBQcm9wZXJ0eU9mZnNldCBQcm9wZXJ0eVRhYmxlOjpuZXgKICAgICByZXR1cm4gb2Zm
c2V0Rm9yUHJvcGVydHlOdW1iZXIoc2l6ZSgpLCBpbmxpbmVDYXBhY2l0eSk7CiB9CiAKLWlubGlu
ZSBQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxlOjpjb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgbmV3Q2FwYWNpdHkpCitpbmxpbmUgUHJvcGVy
dHlUYWJsZSogUHJvcGVydHlUYWJsZTo6Y29weShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIHVuc2ln
bmVkIG5ld0NhcGFjaXR5KQogewogICAgIEFTU0VSVChuZXdDYXBhY2l0eSA+PSBtX2tleUNvdW50
KTsKIAogICAgIC8vIEZhc3QgY2FzZTsgaWYgdGhlIG5ldyB0YWJsZSB3aWxsIGJlIHRoZSBzYW1l
IG1faW5kZXhTaXplIGFzIHRoaXMgb25lLCB3ZSBjYW4gbWVtY3B5IGl0LAogICAgIC8vIHNhdmUg
cmVoYXNoaW5nIGFsbCBrZXlzLgogICAgIGlmIChzaXplRm9yQ2FwYWNpdHkobmV3Q2FwYWNpdHkp
ID09IG1faW5kZXhTaXplKQotICAgICAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUoZ2xv
YmFsRGF0YSwgb3duZXIsICp0aGlzKTsKLSAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUo
Z2xvYmFsRGF0YSwgb3duZXIsIG5ld0NhcGFjaXR5LCAqdGhpcyk7CisgICAgICAgIHJldHVybiBQ
cm9wZXJ0eVRhYmxlOjpjbG9uZSh2bSwgb3duZXIsICp0aGlzKTsKKyAgICByZXR1cm4gUHJvcGVy
dHlUYWJsZTo6Y2xvbmUodm0sIG93bmVyLCBuZXdDYXBhY2l0eSwgKnRoaXMpOwogfQogCiAjaWZu
ZGVmIE5ERUJVRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlO
YW1lQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eU5hbWVBcnJheS5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5
ICs1Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIC8vIEZJWE1FOiBSZW5hbWUgdG8gUHJvcGVy
dHlOYW1lQXJyYXlCdWlsZGVyLgogICAgIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5IHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIFByb3BlcnR5TmFtZUFycmF5KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSkKKyAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkoVk0qIHZtKQogICAgICAgICAgICAgOiBtX2Rh
dGEoUHJvcGVydHlOYW1lQXJyYXlEYXRhOjpjcmVhdGUoKSkKLSAgICAgICAgICAgICwgbV9nbG9i
YWxEYXRhKGdsb2JhbERhdGEpCisgICAgICAgICAgICAsIG1fdm0odm0pCiAgICAgICAgICAgICAs
IG1fbnVtQ2FjaGVhYmxlU2xvdHMoMCkKICAgICAgICAgICAgICwgbV9iYXNlT2JqZWN0KDApCiAg
ICAgICAgIHsKQEAgLTYyLDE3ICs2MiwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBQ
cm9wZXJ0eU5hbWVBcnJheShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICA6IG1fZGF0YShQ
cm9wZXJ0eU5hbWVBcnJheURhdGE6OmNyZWF0ZSgpKQotICAgICAgICAgICAgLCBtX2dsb2JhbERh
dGEoJmV4ZWMtPmdsb2JhbERhdGEoKSkKKyAgICAgICAgICAgICwgbV92bSgmZXhlYy0+dm0oKSkK
ICAgICAgICAgICAgICwgbV9udW1DYWNoZWFibGVTbG90cygwKQogICAgICAgICAgICAgLCBtX2Jh
c2VPYmplY3QoMCkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhKCkgeyByZXR1cm4gbV9nbG9iYWxEYXRhOyB9CisgICAgICAgIFZNKiB2bSgp
IHsgcmV0dXJuIG1fdm07IH0KIAogICAgICAgICB2b2lkIGFkZChjb25zdCBJZGVudGlmaWVyJiBp
ZGVudGlmaWVyKSB7IGFkZChpZGVudGlmaWVyLmltcGwoKSk7IH0KICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBhZGQoU3RyaW5nSW1wbCopOwotICAgICAgICB2b2lkIGFkZEtub3duVW5p
cXVlKFN0cmluZ0ltcGwqIGlkZW50aWZpZXIpIHsgbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3Io
KS5hcHBlbmQoSWRlbnRpZmllcihtX2dsb2JhbERhdGEsIGlkZW50aWZpZXIpKTsgfQorICAgICAg
ICB2b2lkIGFkZEtub3duVW5pcXVlKFN0cmluZ0ltcGwqIGlkZW50aWZpZXIpIHsgbV9kYXRhLT5w
cm9wZXJ0eU5hbWVWZWN0b3IoKS5hcHBlbmQoSWRlbnRpZmllcihtX3ZtLCBpZGVudGlmaWVyKSk7
IH0KIAogICAgICAgICBJZGVudGlmaWVyJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIHsgcmV0dXJu
IG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKClbaV07IH0KICAgICAgICAgY29uc3QgSWRlbnRp
ZmllciYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2RhdGEtPnByb3Bl
cnR5TmFtZVZlY3RvcigpW2ldOyB9CkBAIC0xMDYsNyArMTA2LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgUmVmUHRyPFByb3BlcnR5TmFtZUFycmF5RGF0YT4gbV9kYXRhOwogICAgICAg
ICBJZGVudGlmaWVyU2V0IG1fc2V0OwotICAgICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0
YTsKKyAgICAgICAgVk0qIG1fdm07CiAgICAgICAgIHNpemVfdCBtX251bUNhY2hlYWJsZVNsb3Rz
OwogICAgICAgICBKU09iamVjdCogbV9iYXNlT2JqZWN0OwogICAgIH07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAkocmV2aXNpb24g
MTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDI5ICszNSwyOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
Y29uc3QgQ2xhc3NJbmZvIFByb3BlcnR5VGFibGU6OnNfaW5mbyA9IHsgIlByb3BlcnR5VGFibGUi
LCAwLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFByb3BlcnR5VGFibGUpIH07CiAKLVByb3Bl
cnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSkKK1Byb3BlcnR5VGFibGUqIFByb3BlcnR5VGFibGU6
OmNyZWF0ZShWTSYgdm0sIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSkKIHsKLSAgICBQcm9wZXJ0
eVRhYmxlKiB0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb3BlcnR5VGFibGU+
KGdsb2JhbERhdGEuaGVhcCkpIFByb3BlcnR5VGFibGUoZ2xvYmFsRGF0YSwgaW5pdGlhbENhcGFj
aXR5KTsKLSAgICB0YWJsZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgUHJvcGVy
dHlUYWJsZSogdGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9wZXJ0eVRhYmxl
Pih2bS5oZWFwKSkgUHJvcGVydHlUYWJsZSh2bSwgaW5pdGlhbENhcGFjaXR5KTsKKyAgICB0YWJs
ZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiB0YWJsZTsKIH0KIAotUHJvcGVydHlU
YWJsZSogUHJvcGVydHlUYWJsZTo6Y2xvbmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0Nl
bGwqIG93bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKK1Byb3BlcnR5VGFibGUqIFBy
b3BlcnR5VGFibGU6OmNsb25lKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgY29uc3QgUHJvcGVydHlU
YWJsZSYgb3RoZXIpCiB7Ci0gICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxQcm9wZXJ0eVRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBQcm9wZXJ0eVRh
YmxlKGdsb2JhbERhdGEsIG93bmVyLCBvdGhlcik7Ci0gICAgdGFibGUtPmZpbmlzaENyZWF0aW9u
KGdsb2JhbERhdGEpOworICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8UHJvcGVydHlUYWJsZT4odm0uaGVhcCkpIFByb3BlcnR5VGFibGUodm0sIG93
bmVyLCBvdGhlcik7CisgICAgdGFibGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4g
dGFibGU7CiB9CiAKLVByb3BlcnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNsb25lKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5
LCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKK1Byb3BlcnR5VGFibGUqIFByb3BlcnR5VGFi
bGU6OmNsb25lKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5
LCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKIHsKLSAgICBQcm9wZXJ0eVRhYmxlKiB0YWJs
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb3BlcnR5VGFibGU+KGdsb2JhbERhdGEu
aGVhcCkpIFByb3BlcnR5VGFibGUoZ2xvYmFsRGF0YSwgb3duZXIsIGluaXRpYWxDYXBhY2l0eSwg
b3RoZXIpOwotICAgIHRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBQcm9w
ZXJ0eVRhYmxlKiB0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb3BlcnR5VGFi
bGU+KHZtLmhlYXApKSBQcm9wZXJ0eVRhYmxlKHZtLCBvd25lciwgaW5pdGlhbENhcGFjaXR5LCBv
dGhlcik7CisgICAgdGFibGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gdGFibGU7
CiB9CiAKLVByb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkpCi0gICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwg
Z2xvYmFsRGF0YS5wcm9wZXJ0eVRhYmxlU3RydWN0dXJlLmdldCgpKQorUHJvcGVydHlUYWJsZTo6
UHJvcGVydHlUYWJsZShWTSYgdm0sIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSkKKyAgICA6IEpT
Q2VsbCh2bSwgdm0ucHJvcGVydHlUYWJsZVN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1faW5kZXhT
aXplKHNpemVGb3JDYXBhY2l0eShpbml0aWFsQ2FwYWNpdHkpKQogICAgICwgbV9pbmRleE1hc2so
bV9pbmRleFNpemUgLSAxKQogICAgICwgbV9pbmRleChzdGF0aWNfY2FzdDx1bnNpZ25lZCo+KGZh
c3RaZXJvZWRNYWxsb2MoZGF0YVNpemUoKSkpKQpAQCAtNjcsOCArNjcsOCBAQCBQcm9wZXJ0eVRh
YmxlOjpQcm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0CiAgICAgQVNTRVJUKGlzUG93ZXJPZjIobV9p
bmRleFNpemUpKTsKIH0KIAotUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVy
KQotICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEucHJvcGVydHlUYWJsZVN0cnVj
dHVyZS5nZXQoKSkKK1Byb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKKyAgICA6IEpTQ2VsbCh2bSwgdm0u
cHJvcGVydHlUYWJsZVN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1faW5kZXhTaXplKG90aGVyLm1f
aW5kZXhTaXplKQogICAgICwgbV9pbmRleE1hc2sob3RoZXIubV9pbmRleE1hc2spCiAgICAgLCBt
X2luZGV4KHN0YXRpY19jYXN0PHVuc2lnbmVkKj4oZmFzdE1hbGxvYyhkYXRhU2l6ZSgpKSkpCkBA
IC05MSw4ICs5MSw4IEBAIFByb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXQK
ICAgICAgICAgbV9kZWxldGVkT2Zmc2V0cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UHJvcGVydHlP
ZmZzZXQ+KCpvdGhlckRlbGV0ZWRPZmZzZXRzKSk7CiB9CiAKLVByb3BlcnR5VGFibGU6OlByb3Bl
cnR5VGFibGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25l
ZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQotICAgIDogSlND
ZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEucHJvcGVydHlUYWJsZVN0cnVjdHVyZS5nZXQoKSkK
K1Byb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCB1bnNp
Z25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQorICAgIDog
SlNDZWxsKHZtLCB2bS5wcm9wZXJ0eVRhYmxlU3RydWN0dXJlLmdldCgpKQogICAgICwgbV9pbmRl
eFNpemUoc2l6ZUZvckNhcGFjaXR5KGluaXRpYWxDYXBhY2l0eSkpCiAgICAgLCBtX2luZGV4TWFz
ayhtX2luZGV4U2l6ZSAtIDEpCiAgICAgLCBtX2luZGV4KHN0YXRpY19jYXN0PHVuc2lnbmVkKj4o
ZmFzdFplcm9lZE1hbGxvYyhkYXRhU2l6ZSgpKSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm90b3R5cGVNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZU1hcC5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZU1hcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYyLDcgKzYyLDcgQEAgU3RydWN0dXJlKiBQcm90b3R5cGVNYXA6OmVtcHR5T2JqZWN0
U3RydQogCiAgICAgYWRkUHJvdG90eXBlKHByb3RvdHlwZSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBKU0ZpbmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoCi0gICAgICAgIHByb3RvdHlw
ZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3Qo
KSwgcHJvdG90eXBlLCBpbmxpbmVDYXBhY2l0eSk7CisgICAgICAgIHByb3RvdHlwZS0+Z2xvYmFs
T2JqZWN0KCktPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCksIHByb3RvdHlwZSwgaW5s
aW5lQ2FwYWNpdHkpOwogICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBzdHJ1Y3R1cmU7
CiAgICAgcmV0dXJuIHN0cnVjdHVyZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDggKzIxNyw4IEBA
IHZvaWQgUmVnRXhwRnVuY3Rpb25hbFRlc3RDb2xsZWN0b3I6Om91dHAKIH0KICNlbmRpZgogCi1S
ZWdFeHA6OlJlZ0V4cChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFN0cmluZyYgcGF0
dGVyblN0cmluZywgUmVnRXhwRmxhZ3MgZmxhZ3MpCi0gICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwg
Z2xvYmFsRGF0YS5yZWdFeHBTdHJ1Y3R1cmUuZ2V0KCkpCitSZWdFeHA6OlJlZ0V4cChWTSYgdm0s
IGNvbnN0IFN0cmluZyYgcGF0dGVyblN0cmluZywgUmVnRXhwRmxhZ3MgZmxhZ3MpCisgICAgOiBK
U0NlbGwodm0sIHZtLnJlZ0V4cFN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1fc3RhdGUoTm90Q29t
cGlsZWQpCiAgICAgLCBtX3BhdHRlcm5TdHJpbmcocGF0dGVyblN0cmluZykKICAgICAsIG1fZmxh
Z3MoZmxhZ3MpCkBAIC0yMzEsOSArMjMxLDkgQEAgUmVnRXhwOjpSZWdFeHAoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLAogewogfQogCi12b2lkIFJlZ0V4cDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBSZWdFeHA6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
IHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CiAgICAgWWFycjo6WWFyclBhdHRlcm4gcGF0dGVybihtX3BhdHRlcm5T
dHJpbmcsIGlnbm9yZUNhc2UoKSwgbXVsdGlsaW5lKCksICZtX2NvbnN0cnVjdGlvbkVycm9yKTsK
ICAgICBpZiAobV9jb25zdHJ1Y3Rpb25FcnJvcikKICAgICAgICAgbV9zdGF0ZSA9IFBhcnNlRXJy
b3I7CkBAIC0yNTAsMTkgKzI1MCwxOSBAQCB2b2lkIFJlZ0V4cDo6ZGVzdHJveShKU0NlbGwqIGNl
bGwpCiAgICAgdGhpc09iamVjdC0+UmVnRXhwOjp+UmVnRXhwKCk7CiB9CiAKLVJlZ0V4cCogUmVn
RXhwOjpjcmVhdGVXaXRob3V0Q2FjaGluZyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0
IFN0cmluZyYgcGF0dGVyblN0cmluZywgUmVnRXhwRmxhZ3MgZmxhZ3MpCitSZWdFeHAqIFJlZ0V4
cDo6Y3JlYXRlV2l0aG91dENhY2hpbmcoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHBhdHRlcm5TdHJp
bmcsIFJlZ0V4cEZsYWdzIGZsYWdzKQogewotICAgIFJlZ0V4cCogcmVnRXhwID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8UmVnRXhwPihnbG9iYWxEYXRhLmhlYXApKSBSZWdFeHAoZ2xvYmFs
RGF0YSwgcGF0dGVyblN0cmluZywgZmxhZ3MpOwotICAgIHJlZ0V4cC0+ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsRGF0YSk7CisgICAgUmVnRXhwKiByZWdFeHAgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxSZWdFeHA+KHZtLmhlYXApKSBSZWdFeHAodm0sIHBhdHRlcm5TdHJpbmcsIGZsYWdzKTsK
KyAgICByZWdFeHAtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gcmVnRXhwOwogfQog
Ci1SZWdFeHAqIFJlZ0V4cDo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3Qg
U3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBSZWdFeHBGbGFncyBmbGFncykKK1JlZ0V4cCogUmVnRXhw
OjpjcmVhdGUoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIFJlZ0V4cEZsYWdz
IGZsYWdzKQogewotICAgIHJldHVybiBnbG9iYWxEYXRhLnJlZ0V4cENhY2hlKCktPmxvb2t1cE9y
Q3JlYXRlKHBhdHRlcm5TdHJpbmcsIGZsYWdzKTsKKyAgICByZXR1cm4gdm0ucmVnRXhwQ2FjaGUo
KS0+bG9va3VwT3JDcmVhdGUocGF0dGVyblN0cmluZywgZmxhZ3MpOwogfQogCi12b2lkIFJlZ0V4
cDo6Y29tcGlsZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFlhcnI6OllhcnJDaGFyU2l6ZSBj
aGFyU2l6ZSkKK3ZvaWQgUmVnRXhwOjpjb21waWxlKFZNKiB2bSwgWWFycjo6WWFyckNoYXJTaXpl
IGNoYXJTaXplKQogewogICAgIFlhcnI6OllhcnJQYXR0ZXJuIHBhdHRlcm4obV9wYXR0ZXJuU3Ry
aW5nLCBpZ25vcmVDYXNlKCksIG11bHRpbGluZSgpLCAmbV9jb25zdHJ1Y3Rpb25FcnJvcik7CiAg
ICAgaWYgKG1fY29uc3RydWN0aW9uRXJyb3IpIHsKQEAgLTI3NCwxMyArMjc0LDEzIEBAIHZvaWQg
UmVnRXhwOjpjb21waWxlKEpTR2xvYmFsRGF0YSogZ2xvYmEKIAogICAgIGlmICghaGFzQ29kZSgp
KSB7CiAgICAgICAgIEFTU0VSVChtX3N0YXRlID09IE5vdENvbXBpbGVkKTsKLSAgICAgICAgZ2xv
YmFsRGF0YS0+cmVnRXhwQ2FjaGUoKS0+YWRkVG9TdHJvbmdDYWNoZSh0aGlzKTsKKyAgICAgICAg
dm0tPnJlZ0V4cENhY2hlKCktPmFkZFRvU3Ryb25nQ2FjaGUodGhpcyk7CiAgICAgICAgIG1fc3Rh
dGUgPSBCeXRlQ29kZTsKICAgICB9CiAKICNpZiBFTkFCTEUoWUFSUl9KSVQpCi0gICAgaWYgKCFw
YXR0ZXJuLm1fY29udGFpbnNCYWNrcmVmZXJlbmNlcyAmJiBnbG9iYWxEYXRhLT5jYW5Vc2VSZWdF
eHBKSVQoKSkgewotICAgICAgICBZYXJyOjpqaXRDb21waWxlKHBhdHRlcm4sIGNoYXJTaXplLCBn
bG9iYWxEYXRhLCBtX3JlZ0V4cEpJVENvZGUpOworICAgIGlmICghcGF0dGVybi5tX2NvbnRhaW5z
QmFja3JlZmVyZW5jZXMgJiYgdm0tPmNhblVzZVJlZ0V4cEpJVCgpKSB7CisgICAgICAgIFlhcnI6
OmppdENvbXBpbGUocGF0dGVybiwgY2hhclNpemUsIHZtLCBtX3JlZ0V4cEpJVENvZGUpOwogI2lm
IEVOQUJMRShZQVJSX0pJVF9ERUJVRykKICAgICAgICAgaWYgKCFtX3JlZ0V4cEpJVENvZGUuaXNG
YWxsQmFjaygpKQogICAgICAgICAgICAgbV9zdGF0ZSA9IEpJVENvZGU7CkBAIC0yOTcsMTAgKzI5
NywxMCBAQCB2b2lkIFJlZ0V4cDo6Y29tcGlsZShKU0dsb2JhbERhdGEqIGdsb2JhCiAgICAgVU5V
U0VEX1BBUkFNKGNoYXJTaXplKTsKICNlbmRpZgogCi0gICAgbV9yZWdFeHBCeXRlY29kZSA9IFlh
cnI6OmJ5dGVDb21waWxlKHBhdHRlcm4sICZnbG9iYWxEYXRhLT5tX3JlZ0V4cEFsbG9jYXRvcik7
CisgICAgbV9yZWdFeHBCeXRlY29kZSA9IFlhcnI6OmJ5dGVDb21waWxlKHBhdHRlcm4sICZ2bS0+
bV9yZWdFeHBBbGxvY2F0b3IpOwogfQogCi12b2lkIFJlZ0V4cDo6Y29tcGlsZUlmTmVjZXNzYXJ5
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgWWFycjo6WWFyckNoYXJTaXplIGNoYXJTaXplKQor
dm9pZCBSZWdFeHA6OmNvbXBpbGVJZk5lY2Vzc2FyeShWTSYgdm0sIFlhcnI6OllhcnJDaGFyU2l6
ZSBjaGFyU2l6ZSkKIHsKICAgICBpZiAoaGFzQ29kZSgpKSB7CiAjaWYgRU5BQkxFKFlBUlJfSklU
KQpAQCAtMzE1LDE3ICszMTUsMTcgQEAgdm9pZCBSZWdFeHA6OmNvbXBpbGVJZk5lY2Vzc2FyeShK
U0dsb2JhbAogI2VuZGlmCiAgICAgfQogCi0gICAgY29tcGlsZSgmZ2xvYmFsRGF0YSwgY2hhclNp
emUpOworICAgIGNvbXBpbGUoJnZtLCBjaGFyU2l6ZSk7CiB9CiAKLWludCBSZWdFeHA6Om1hdGNo
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBzdGFy
dE9mZnNldCwgVmVjdG9yPGludCwgMzI+JiBvdmVjdG9yKQoraW50IFJlZ0V4cDo6bWF0Y2goVk0m
IHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBWZWN0b3I8aW50LCAz
Mj4mIG92ZWN0b3IpCiB7CiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQogICAgIG1fcnRNYXRj
aENhbGxDb3VudCsrOwogI2VuZGlmCiAKICAgICBBU1NFUlQobV9zdGF0ZSAhPSBQYXJzZUVycm9y
KTsKLSAgICBjb21waWxlSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSwgcy5pczhCaXQoKSA/IFlhcnI6
OkNoYXI4IDogWWFycjo6Q2hhcjE2KTsKKyAgICBjb21waWxlSWZOZWNlc3Nhcnkodm0sIHMuaXM4
Qml0KCkgPyBZYXJyOjpDaGFyOCA6IFlhcnI6OkNoYXIxNik7CiAKICAgICBpbnQgb2Zmc2V0VmVj
dG9yU2l6ZSA9IChtX251bVN1YnBhdHRlcm5zICsgMSkgKiAyOwogICAgIG92ZWN0b3IucmVzaXpl
KG9mZnNldFZlY3RvclNpemUpOwpAQCAtMzg0LDcgKzM4NCw3IEBAIGludCBSZWdFeHA6Om1hdGNo
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGEKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFJl
Z0V4cDo6Y29tcGlsZU1hdGNoT25seShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFlhcnI6Ollh
cnJDaGFyU2l6ZSBjaGFyU2l6ZSkKK3ZvaWQgUmVnRXhwOjpjb21waWxlTWF0Y2hPbmx5KFZNKiB2
bSwgWWFycjo6WWFyckNoYXJTaXplIGNoYXJTaXplKQogewogICAgIFlhcnI6OllhcnJQYXR0ZXJu
IHBhdHRlcm4obV9wYXR0ZXJuU3RyaW5nLCBpZ25vcmVDYXNlKCksIG11bHRpbGluZSgpLCAmbV9j
b25zdHJ1Y3Rpb25FcnJvcik7CiAgICAgaWYgKG1fY29uc3RydWN0aW9uRXJyb3IpIHsKQEAgLTM5
NiwxMyArMzk2LDEzIEBAIHZvaWQgUmVnRXhwOjpjb21waWxlTWF0Y2hPbmx5KEpTR2xvYmFsRGEK
IAogICAgIGlmICghaGFzQ29kZSgpKSB7CiAgICAgICAgIEFTU0VSVChtX3N0YXRlID09IE5vdENv
bXBpbGVkKTsKLSAgICAgICAgZ2xvYmFsRGF0YS0+cmVnRXhwQ2FjaGUoKS0+YWRkVG9TdHJvbmdD
YWNoZSh0aGlzKTsKKyAgICAgICAgdm0tPnJlZ0V4cENhY2hlKCktPmFkZFRvU3Ryb25nQ2FjaGUo
dGhpcyk7CiAgICAgICAgIG1fc3RhdGUgPSBCeXRlQ29kZTsKICAgICB9CiAKICNpZiBFTkFCTEUo
WUFSUl9KSVQpCi0gICAgaWYgKCFwYXR0ZXJuLm1fY29udGFpbnNCYWNrcmVmZXJlbmNlcyAmJiBn
bG9iYWxEYXRhLT5jYW5Vc2VSZWdFeHBKSVQoKSkgewotICAgICAgICBZYXJyOjpqaXRDb21waWxl
KHBhdHRlcm4sIGNoYXJTaXplLCBnbG9iYWxEYXRhLCBtX3JlZ0V4cEpJVENvZGUsIFlhcnI6Ok1h
dGNoT25seSk7CisgICAgaWYgKCFwYXR0ZXJuLm1fY29udGFpbnNCYWNrcmVmZXJlbmNlcyAmJiB2
bS0+Y2FuVXNlUmVnRXhwSklUKCkpIHsKKyAgICAgICAgWWFycjo6aml0Q29tcGlsZShwYXR0ZXJu
LCBjaGFyU2l6ZSwgdm0sIG1fcmVnRXhwSklUQ29kZSwgWWFycjo6TWF0Y2hPbmx5KTsKICNpZiBF
TkFCTEUoWUFSUl9KSVRfREVCVUcpCiAgICAgICAgIGlmICghbV9yZWdFeHBKSVRDb2RlLmlzRmFs
bEJhY2soKSkKICAgICAgICAgICAgIG1fc3RhdGUgPSBKSVRDb2RlOwpAQCAtNDE5LDEwICs0MTks
MTAgQEAgdm9pZCBSZWdFeHA6OmNvbXBpbGVNYXRjaE9ubHkoSlNHbG9iYWxEYQogICAgIFVOVVNF
RF9QQVJBTShjaGFyU2l6ZSk7CiAjZW5kaWYKIAotICAgIG1fcmVnRXhwQnl0ZWNvZGUgPSBZYXJy
OjpieXRlQ29tcGlsZShwYXR0ZXJuLCAmZ2xvYmFsRGF0YS0+bV9yZWdFeHBBbGxvY2F0b3IpOwor
ICAgIG1fcmVnRXhwQnl0ZWNvZGUgPSBZYXJyOjpieXRlQ29tcGlsZShwYXR0ZXJuLCAmdm0tPm1f
cmVnRXhwQWxsb2NhdG9yKTsKIH0KIAotdm9pZCBSZWdFeHA6OmNvbXBpbGVJZk5lY2Vzc2FyeU1h
dGNoT25seShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFlhcnI6OllhcnJDaGFyU2l6ZSBjaGFy
U2l6ZSkKK3ZvaWQgUmVnRXhwOjpjb21waWxlSWZOZWNlc3NhcnlNYXRjaE9ubHkoVk0mIHZtLCBZ
YXJyOjpZYXJyQ2hhclNpemUgY2hhclNpemUpCiB7CiAgICAgaWYgKGhhc0NvZGUoKSkgewogI2lm
IEVOQUJMRShZQVJSX0pJVCkKQEAgLTQzNywxNyArNDM3LDE3IEBAIHZvaWQgUmVnRXhwOjpjb21w
aWxlSWZOZWNlc3NhcnlNYXRjaE9ubHkKICNlbmRpZgogICAgIH0KIAotICAgIGNvbXBpbGVNYXRj
aE9ubHkoJmdsb2JhbERhdGEsIGNoYXJTaXplKTsKKyAgICBjb21waWxlTWF0Y2hPbmx5KCZ2bSwg
Y2hhclNpemUpOwogfQogCi1NYXRjaFJlc3VsdCBSZWdFeHA6Om1hdGNoKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgY29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBzdGFydE9mZnNldCkKK01hdGNo
UmVzdWx0IFJlZ0V4cDo6bWF0Y2goVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0KQogewogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKICAgICBtX3J0TWF0Y2hD
YWxsQ291bnQrKzsKICNlbmRpZgogCiAgICAgQVNTRVJUKG1fc3RhdGUgIT0gUGFyc2VFcnJvcik7
Ci0gICAgY29tcGlsZUlmTmVjZXNzYXJ5TWF0Y2hPbmx5KGdsb2JhbERhdGEsIHMuaXM4Qml0KCkg
PyBZYXJyOjpDaGFyOCA6IFlhcnI6OkNoYXIxNik7CisgICAgY29tcGlsZUlmTmVjZXNzYXJ5TWF0
Y2hPbmx5KHZtLCBzLmlzOEJpdCgpID8gWWFycjo6Q2hhcjggOiBZYXJyOjpDaGFyMTYpOwogCiAj
aWYgRU5BQkxFKFlBUlJfSklUKQogICAgIGlmIChtX3N0YXRlID09IEpJVENvZGUpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCShyZXZpc2lvbiAxNDg2NTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNyArMzgsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBzdHJ1Y3QgUmVnRXhwUmVw
cmVzZW50YXRpb247Ci0gICAgY2xhc3MgSlNHbG9iYWxEYXRhOworICAgIGNsYXNzIFZNOwogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgUmVnRXhwRmxhZ3MgcmVnRXhwRmxhZ3MoY29uc3QgU3RyaW5n
Jik7CiAKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAg
ICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBSZWdFeHAqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBjb25zdCBTdHJpbmcmIHBhdHRlcm4s
IFJlZ0V4cEZsYWdzKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZ0V4cCog
Y3JlYXRlKFZNJiwgY29uc3QgU3RyaW5nJiBwYXR0ZXJuLCBSZWdFeHBGbGFncyk7CiAgICAgICAg
IHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CiAgICAgICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CkBAIC02MCw4ICs2MCw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAhbV9jb25zdHJ1Y3Rpb25F
cnJvciAmJiBtX2ZsYWdzICE9IEludmFsaWRGbGFnczsgfQogICAgICAgICBjb25zdCBjaGFyKiBl
cnJvck1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0cnVjdGlvbkVycm9yOyB9CiAKLSAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgaW50IG1hdGNoKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFN0
cmluZyYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBWZWN0b3I8aW50LCAzMj4mIG92ZWN0b3IpOwot
ICAgICAgICBNYXRjaFJlc3VsdCBtYXRjaChKU0dsb2JhbERhdGEmLCBjb25zdCBTdHJpbmcmLCB1
bnNpZ25lZCBzdGFydE9mZnNldCk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGludCBtYXRj
aChWTSYsIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBWZWN0b3I8aW50LCAz
Mj4mIG92ZWN0b3IpOworICAgICAgICBNYXRjaFJlc3VsdCBtYXRjaChWTSYsIGNvbnN0IFN0cmlu
ZyYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KTsKICAgICAgICAgdW5zaWduZWQgbnVtU3VicGF0dGVy
bnMoKSBjb25zdCB7IHJldHVybiBtX251bVN1YnBhdHRlcm5zOyB9CiAKICAgICAgICAgYm9vbCBo
YXNDb2RlKCkKQEAgLTc1LDkgKzc1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
cHJpbnRUcmFjZURhdGEoKTsKICNlbmRpZgogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgICAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhM
ZWFmVHlwZSwgMCksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oTGVhZlR5cGUsIDApLCAm
c19pbmZvKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CkBAIC04NSwxMyArODUsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IFJlZ0V4cEtleSBrZXkoKSB7IHJldHVybiBSZWdFeHBLZXkobV9mbGFncywgbV9wYXR0ZXJuU3Ry
aW5nKTsgfQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
R2xvYmFsRGF0YSYpOworICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAKICAgICBw
cml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgUmVnRXhwQ2FjaGU7Ci0gICAgICAgIFJlZ0V4
cChKU0dsb2JhbERhdGEmLCBjb25zdCBTdHJpbmcmLCBSZWdFeHBGbGFncyk7CisgICAgICAgIFJl
Z0V4cChWTSYsIGNvbnN0IFN0cmluZyYsIFJlZ0V4cEZsYWdzKTsKIAotICAgICAgICBzdGF0aWMg
UmVnRXhwKiBjcmVhdGVXaXRob3V0Q2FjaGluZyhKU0dsb2JhbERhdGEmLCBjb25zdCBTdHJpbmcm
LCBSZWdFeHBGbGFncyk7CisgICAgICAgIHN0YXRpYyBSZWdFeHAqIGNyZWF0ZVdpdGhvdXRDYWNo
aW5nKFZNJiwgY29uc3QgU3RyaW5nJiwgUmVnRXhwRmxhZ3MpOwogCiAgICAgICAgIGVudW0gUmVn
RXhwU3RhdGUgewogICAgICAgICAgICAgUGFyc2VFcnJvciwKQEAgLTEwMCwxMSArMTAwLDExIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgTm90Q29tcGlsZWQKICAgICAgICAgfSBtX3N0
YXRlOwogCi0gICAgICAgIHZvaWQgY29tcGlsZShKU0dsb2JhbERhdGEqLCBZYXJyOjpZYXJyQ2hh
clNpemUpOwotICAgICAgICB2b2lkIGNvbXBpbGVJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmLCBZ
YXJyOjpZYXJyQ2hhclNpemUpOworICAgICAgICB2b2lkIGNvbXBpbGUoVk0qLCBZYXJyOjpZYXJy
Q2hhclNpemUpOworICAgICAgICB2b2lkIGNvbXBpbGVJZk5lY2Vzc2FyeShWTSYsIFlhcnI6Ollh
cnJDaGFyU2l6ZSk7CiAKLSAgICAgICAgdm9pZCBjb21waWxlTWF0Y2hPbmx5KEpTR2xvYmFsRGF0
YSosIFlhcnI6OllhcnJDaGFyU2l6ZSk7Ci0gICAgICAgIHZvaWQgY29tcGlsZUlmTmVjZXNzYXJ5
TWF0Y2hPbmx5KEpTR2xvYmFsRGF0YSYsIFlhcnI6OllhcnJDaGFyU2l6ZSk7CisgICAgICAgIHZv
aWQgY29tcGlsZU1hdGNoT25seShWTSosIFlhcnI6OllhcnJDaGFyU2l6ZSk7CisgICAgICAgIHZv
aWQgY29tcGlsZUlmTmVjZXNzYXJ5TWF0Y2hPbmx5KFZNJiwgWWFycjo6WWFyckNoYXJTaXplKTsK
IAogI2lmIEVOQUJMRShZQVJSX0pJVF9ERUJVRykKICAgICAgICAgdm9pZCBtYXRjaENvbXBhcmVX
aXRoSW50ZXJwcmV0ZXIoY29uc3QgU3RyaW5nJiwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQqIG9mZnNl
dFZlY3RvciwgaW50IGppdFJlc3VsdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDE4ICs0MSwxOCBAQCBSZWdFeHAqIFJlZ0V4cENhY2hlOjpsb29rdXBPckNyZWF0ZShjb25zCiAg
ICAgaWYgKFJlZ0V4cCogcmVnRXhwID0gbV93ZWFrQ2FjaGUuZ2V0KGtleSkpCiAgICAgICAgIHJl
dHVybiByZWdFeHA7CiAKLSAgICBSZWdFeHAqIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlV2l0aG91
dENhY2hpbmcoKm1fZ2xvYmFsRGF0YSwgcGF0dGVyblN0cmluZywgZmxhZ3MpOworICAgIFJlZ0V4
cCogcmVnRXhwID0gUmVnRXhwOjpjcmVhdGVXaXRob3V0Q2FjaGluZygqbV92bSwgcGF0dGVyblN0
cmluZywgZmxhZ3MpOwogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKLSAgICBtX2dsb2JhbERh
dGEtPmFkZFJlZ0V4cFRvVHJhY2UocmVnRXhwKTsKKyAgICBtX3ZtLT5hZGRSZWdFeHBUb1RyYWNl
KHJlZ0V4cCk7CiAjZW5kaWYKIAogICAgIHdlYWtBZGQobV93ZWFrQ2FjaGUsIGtleSwgUGFzc1dl
YWs8UmVnRXhwPihyZWdFeHAsIHRoaXMpKTsKICAgICByZXR1cm4gcmVnRXhwOwogfQogCi1SZWdF
eHBDYWNoZTo6UmVnRXhwQ2FjaGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorUmVnRXhwQ2Fj
aGU6OlJlZ0V4cENhY2hlKFZNKiB2bSkKICAgICA6IG1fbmV4dEVudHJ5SW5TdHJvbmdDYWNoZSgw
KQotICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgLCBtX3ZtKHZtKQogewogfQog
CkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgUmVnRXhwQ2FjaGU6OmFkZFRvU3Ryb25nQ2FjaGUoUmVn
RXgKICAgICBTdHJpbmcgcGF0dGVybiA9IHJlZ0V4cC0+cGF0dGVybigpOwogICAgIGlmIChwYXR0
ZXJuLmxlbmd0aCgpID4gbWF4U3Ryb25nQ2FjaGVhYmxlUGF0dGVybkxlbmd0aCkKICAgICAgICAg
cmV0dXJuOwotICAgIG1fc3Ryb25nQ2FjaGVbbV9uZXh0RW50cnlJblN0cm9uZ0NhY2hlXS5zZXQo
Km1fZ2xvYmFsRGF0YSwgcmVnRXhwKTsKKyAgICBtX3N0cm9uZ0NhY2hlW21fbmV4dEVudHJ5SW5T
dHJvbmdDYWNoZV0uc2V0KCptX3ZtLCByZWdFeHApOwogICAgIG1fbmV4dEVudHJ5SW5TdHJvbmdD
YWNoZSsrOwogICAgIGlmIChtX25leHRFbnRyeUluU3Ryb25nQ2FjaGUgPT0gbWF4U3Ryb25nQ2Fj
aGVhYmxlRW50cmllcykKICAgICAgICAgbV9uZXh0RW50cnlJblN0cm9uZ0NhY2hlID0gMDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuaAkocmV2aXNp
b24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBmcmllbmQgY2xhc3MgUmVnRXhwOwog
dHlwZWRlZiBIYXNoTWFwPFJlZ0V4cEtleSwgV2VhazxSZWdFeHA+ID4gUmVnRXhwQ2FjaGVNYXA7
CiAKIHB1YmxpYzoKLSAgICBSZWdFeHBDYWNoZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpOwor
ICAgIFJlZ0V4cENhY2hlKFZNKiB2bSk7CiAgICAgdm9pZCBpbnZhbGlkYXRlQ29kZSgpOwogCiBw
cml2YXRlOgpAQCAtNTksNyArNTksNyBAQCBwcml2YXRlOgogICAgIFJlZ0V4cENhY2hlTWFwIG1f
d2Vha0NhY2hlOyAvLyBIb2xkcyBhbGwgcmVndWxhciBleHByZXNzaW9ucyBjdXJyZW50bHkgbGl2
ZS4KICAgICBpbnQgbV9uZXh0RW50cnlJblN0cm9uZ0NhY2hlOwogICAgIFdURjo6Rml4ZWRBcnJh
eTxTdHJvbmc8UmVnRXhwPiwgbWF4U3Ryb25nQ2FjaGVhYmxlRW50cmllcz4gbV9zdHJvbmdDYWNo
ZTsgLy8gSG9sZHMgYSBzZWxlY3QgZmV3IHJlZ3VsYXIgZXhwcmVzc2lvbnMgdGhhdCBoYXZlIGNv
bXBpbGVkIGFuZCBleGVjdXRlZAotICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworICAg
IFZNKiBtX3ZtOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAJKHJldmlz
aW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hl
ZFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDggQEAgdm9pZCBSZWdFeHBD
YWNoZWRSZXN1bHQ6OnZpc2l0Q2hpbGRyZW4oUwogUmVnRXhwTWF0Y2hlc0FycmF5KiBSZWdFeHBD
YWNoZWRSZXN1bHQ6Omxhc3RSZXN1bHQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3duZXIp
CiB7CiAgICAgaWYgKG1fcmVzdWx0KSB7Ci0gICAgICAgIG1fcmVpZmllZElucHV0LnNldChleGVj
LT5nbG9iYWxEYXRhKCksIG93bmVyLCBtX2xhc3RJbnB1dC5nZXQoKSk7Ci0gICAgICAgIG1fcmVp
ZmllZFJlc3VsdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBvd25lciwgUmVnRXhwTWF0Y2hlc0Fy
cmF5OjpjcmVhdGUoZXhlYywgbV9sYXN0SW5wdXQuZ2V0KCksIG1fbGFzdFJlZ0V4cC5nZXQoKSwg
bV9yZXN1bHQpKTsKKyAgICAgICAgbV9yZWlmaWVkSW5wdXQuc2V0KGV4ZWMtPnZtKCksIG93bmVy
LCBtX2xhc3RJbnB1dC5nZXQoKSk7CisgICAgICAgIG1fcmVpZmllZFJlc3VsdC5zZXQoZXhlYy0+
dm0oKSwgb3duZXIsIFJlZ0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRlKGV4ZWMsIG1fbGFzdElucHV0
LmdldCgpLCBtX2xhc3RSZWdFeHAuZ2V0KCksIG1fcmVzdWx0KSk7CiAgICAgICAgIG1fcmVzdWx0
ID0gTWF0Y2hSZXN1bHQ6OmZhaWxlZCgpOwogICAgIH0KICAgICByZXR1cm4gbV9yZWlmaWVkUmVz
dWx0LmdldCgpOwpAQCAtNTQsNyArNTQsNyBAQCB2b2lkIFJlZ0V4cENhY2hlZFJlc3VsdDo6c2V0
SW5wdXQoRXhlY1N0CiAgICAgLy8gTWFrZSBzdXJlIHdlJ3JlIHJlaWZpZWQsIG90aGVyd2lzZSBt
X3JlaWZpZWRJbnB1dCB3aWxsIGJlIGlnbm9yZWQuCiAgICAgbGFzdFJlc3VsdChleGVjLCBvd25l
cik7CiAgICAgQVNTRVJUKCFtX3Jlc3VsdCk7Ci0gICAgbV9yZWlmaWVkSW5wdXQuc2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgb3duZXIsIGlucHV0KTsKKyAgICBtX3JlaWZpZWRJbnB1dC5zZXQoZXhl
Yy0+dm0oKSwgb3duZXIsIGlucHV0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQu
aAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwQ2FjaGVkUmVzdWx0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE3ICs0NCwxNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAvLyBtX3JlaWZpZWRSZXN1bHQgYW5kIG1fcmVpZmllZElucHV0IGhv
bGQgdGhlIGNhY2hlZCByZXN1bHRzLgogICAgIGNsYXNzIFJlZ0V4cENhY2hlZFJlc3VsdCB7CiAg
ICAgcHVibGljOgotICAgICAgICBSZWdFeHBDYWNoZWRSZXN1bHQoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU09iamVjdCogb3duZXIsIFJlZ0V4cCogZW1wdHlSZWdFeHApCisgICAgICAgIFJl
Z0V4cENhY2hlZFJlc3VsdChWTSYgdm0sIEpTT2JqZWN0KiBvd25lciwgUmVnRXhwKiBlbXB0eVJl
Z0V4cCkKICAgICAgICAgICAgIDogbV9yZXN1bHQoMCwgMCkKICAgICAgICAgewotICAgICAgICAg
ICAgbV9sYXN0SW5wdXQuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBqc0VtcHR5U3RyaW5nKCZnbG9i
YWxEYXRhKSk7Ci0gICAgICAgICAgICBtX2xhc3RSZWdFeHAuc2V0KGdsb2JhbERhdGEsIG93bmVy
LCBlbXB0eVJlZ0V4cCk7CisgICAgICAgICAgICBtX2xhc3RJbnB1dC5zZXQodm0sIG93bmVyLCBq
c0VtcHR5U3RyaW5nKCZ2bSkpOworICAgICAgICAgICAgbV9sYXN0UmVnRXhwLnNldCh2bSwgb3du
ZXIsIGVtcHR5UmVnRXhwKTsKICAgICAgICAgfQogCi0gICAgICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCByZWNvcmQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU09iamVjdCogb3duZXIsIFJlZ0V4
cCogcmVnRXhwLCBKU1N0cmluZyogaW5wdXQsIE1hdGNoUmVzdWx0IHJlc3VsdCkKKyAgICAgICAg
QUxXQVlTX0lOTElORSB2b2lkIHJlY29yZChWTSYgdm0sIEpTT2JqZWN0KiBvd25lciwgUmVnRXhw
KiByZWdFeHAsIEpTU3RyaW5nKiBpbnB1dCwgTWF0Y2hSZXN1bHQgcmVzdWx0KQogICAgICAgICB7
Ci0gICAgICAgICAgICBtX2xhc3RSZWdFeHAuc2V0KGdsb2JhbERhdGEsIG93bmVyLCByZWdFeHAp
OwotICAgICAgICAgICAgbV9sYXN0SW5wdXQuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBpbnB1dCk7
CisgICAgICAgICAgICBtX2xhc3RSZWdFeHAuc2V0KHZtLCBvd25lciwgcmVnRXhwKTsKKyAgICAg
ICAgICAgIG1fbGFzdElucHV0LnNldCh2bSwgb3duZXIsIGlucHV0KTsKICAgICAgICAgICAgIG1f
cmVzdWx0ID0gcmVzdWx0OwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE0ODY1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODQsMjEgKzg0LDIxIEBAIGNvbnN0IENsYXNzSW5mbyBSZWdF
eHBDb25zdHJ1Y3Rvcjo6c19pbmYKIAogUmVnRXhwQ29uc3RydWN0b3I6OlJlZ0V4cENvbnN0cnVj
dG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBS
ZWdFeHBQcm90b3R5cGUqIHJlZ0V4cFByb3RvdHlwZSkKICAgICA6IEludGVybmFsRnVuY3Rpb24o
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCi0gICAgLCBtX2NhY2hlZFJlc3VsdChnbG9iYWxPYmpl
Y3QtPmdsb2JhbERhdGEoKSwgdGhpcywgcmVnRXhwUHJvdG90eXBlLT5yZWdFeHAoKSkKKyAgICAs
IG1fY2FjaGVkUmVzdWx0KGdsb2JhbE9iamVjdC0+dm0oKSwgdGhpcywgcmVnRXhwUHJvdG90eXBl
LT5yZWdFeHAoKSkKICAgICAsIG1fbXVsdGlsaW5lKGZhbHNlKQogewogfQogCiB2b2lkIFJlZ0V4
cENvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFJlZ0V4cFByb3Rv
dHlwZSogcmVnRXhwUHJvdG90eXBlKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiUmVnRXhwIikuc3RyaW5nKCkpOworICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgIlJlZ0V4
cCIpLnN0cmluZygpKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogCiAgICAgLy8g
RUNNQSAxNS4xMC41LjEgUmVnRXhwLnByb3RvdHlwZQotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlw
ZSwgcmVnRXhwUHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7Cisg
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLnByb3RvdHlwZSwgcmVnRXhwUHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUg
fCBSZWFkT25seSk7CiAKICAgICAvLyBuby4gb2YgYXJndW1lbnRzIGZvciBjb25zdHJ1Y3Rvcgot
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMiksIFJlYWRPbmx5IHwgRG9udERlbGV0
ZSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgp
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigyKSwgUmVhZE9ubHkgfCBE
b250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCiB2b2lkIFJlZ0V4cENvbnN0cnVjdG9yOjpkZXN0
cm95KEpTQ2VsbCogY2VsbCkKQEAgLTI4Myw3ICsyODMsNyBAQCBKU09iamVjdCogY29uc3RydWN0
UmVnRXhwKEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkludmFsaWQgZmxhZ3Mgc3Vw
cGxpZWQgdG8gUmVnRXhwIGNvbnN0cnVjdG9yLiIpKSk7CiAgICAgfQogCi0gICAgUmVnRXhwKiBy
ZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4sIGZsYWdz
KTsKKyAgICBSZWdFeHAqIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMtPnZtKCksIHBhdHRl
cm4sIGZsYWdzKTsKICAgICBpZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCByZWdFeHAtPmVycm9yTWVz
c2FnZSgpKSk7CiAgICAgcmV0dXJuIFJlZ0V4cE9iamVjdDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVn
RXhwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVj
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMs
OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKICAg
ICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQorICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1
dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOwpAQCAtNTUsOCArNTUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0
aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgICAgICBNYXRjaFJlc3VsdCBwZXJmb3Jt
TWF0Y2goSlNHbG9iYWxEYXRhJiwgUmVnRXhwKiwgSlNTdHJpbmcqLCBjb25zdCBTdHJpbmcmLCBp
bnQgc3RhcnRPZmZzZXQsIGludCoqIG92ZWN0b3IpOwotICAgICAgICBNYXRjaFJlc3VsdCBwZXJm
b3JtTWF0Y2goSlNHbG9iYWxEYXRhJiwgUmVnRXhwKiwgSlNTdHJpbmcqLCBjb25zdCBTdHJpbmcm
LCBpbnQgc3RhcnRPZmZzZXQpOworICAgICAgICBNYXRjaFJlc3VsdCBwZXJmb3JtTWF0Y2goVk0m
LCBSZWdFeHAqLCBKU1N0cmluZyosIGNvbnN0IFN0cmluZyYsIGludCBzdGFydE9mZnNldCwgaW50
Kiogb3ZlY3Rvcik7CisgICAgICAgIE1hdGNoUmVzdWx0IHBlcmZvcm1NYXRjaChWTSYsIFJlZ0V4
cCosIEpTU3RyaW5nKiwgY29uc3QgU3RyaW5nJiwgaW50IHN0YXJ0T2Zmc2V0KTsKIAogICAgICAg
ICB2b2lkIHNldE11bHRpbGluZShib29sIG11bHRpbGluZSkgeyBtX211bHRpbGluZSA9IG11bHRp
bGluZTsgfQogICAgICAgICBib29sIG11bHRpbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fbXVsdGls
aW5lOyB9CkBAIC0xMDEsOSArMTAxLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICBleHByZXNz
aW9uIG1hdGNoaW5nIHRocm91Z2ggdGhlIHBlcmZvcm1NYXRjaCBmdW5jdGlvbi4gV2UgdXNlIGNh
Y2hlZCByZXN1bHRzIHRvIGNhbGN1bGF0ZSwgCiAgICAgICBlLmcuLCBSZWdFeHAubGFzdE1hdGNo
IGFuZCBSZWdFeHAubGVmdFBhcmVuLgogICAgICovCi0gICAgQUxXQVlTX0lOTElORSBNYXRjaFJl
c3VsdCBSZWdFeHBDb25zdHJ1Y3Rvcjo6cGVyZm9ybU1hdGNoKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgUmVnRXhwKiByZWdFeHAsIEpTU3RyaW5nKiBzdHJpbmcsIGNvbnN0IFN0cmluZyYgaW5w
dXQsIGludCBzdGFydE9mZnNldCwgaW50Kiogb3ZlY3RvcikKKyAgICBBTFdBWVNfSU5MSU5FIE1h
dGNoUmVzdWx0IFJlZ0V4cENvbnN0cnVjdG9yOjpwZXJmb3JtTWF0Y2goVk0mIHZtLCBSZWdFeHAq
IHJlZ0V4cCwgSlNTdHJpbmcqIHN0cmluZywgY29uc3QgU3RyaW5nJiBpbnB1dCwgaW50IHN0YXJ0
T2Zmc2V0LCBpbnQqKiBvdmVjdG9yKQogICAgIHsKLSAgICAgICAgaW50IHBvc2l0aW9uID0gcmVn
RXhwLT5tYXRjaChnbG9iYWxEYXRhLCBpbnB1dCwgc3RhcnRPZmZzZXQsIG1fb3ZlY3Rvcik7Cisg
ICAgICAgIGludCBwb3NpdGlvbiA9IHJlZ0V4cC0+bWF0Y2godm0sIGlucHV0LCBzdGFydE9mZnNl
dCwgbV9vdmVjdG9yKTsKIAogICAgICAgICBpZiAob3ZlY3RvcikKICAgICAgICAgICAgICpvdmVj
dG9yID0gbV9vdmVjdG9yLmRhdGEoKTsKQEAgLTExNiwxNSArMTE2LDE1IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBBU1NFUlQobV9vdmVjdG9yWzFdID49IHBvc2l0aW9uKTsKICAgICAgICAg
c2l6ZV90IGVuZCA9IG1fb3ZlY3RvclsxXTsKIAotICAgICAgICBtX2NhY2hlZFJlc3VsdC5yZWNv
cmQoZ2xvYmFsRGF0YSwgdGhpcywgcmVnRXhwLCBzdHJpbmcsIE1hdGNoUmVzdWx0KHBvc2l0aW9u
LCBlbmQpKTsKKyAgICAgICAgbV9jYWNoZWRSZXN1bHQucmVjb3JkKHZtLCB0aGlzLCByZWdFeHAs
IHN0cmluZywgTWF0Y2hSZXN1bHQocG9zaXRpb24sIGVuZCkpOwogCiAgICAgICAgIHJldHVybiBN
YXRjaFJlc3VsdChwb3NpdGlvbiwgZW5kKTsKICAgICB9Ci0gICAgQUxXQVlTX0lOTElORSBNYXRj
aFJlc3VsdCBSZWdFeHBDb25zdHJ1Y3Rvcjo6cGVyZm9ybU1hdGNoKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgUmVnRXhwKiByZWdFeHAsIEpTU3RyaW5nKiBzdHJpbmcsIGNvbnN0IFN0cmluZyYg
aW5wdXQsIGludCBzdGFydE9mZnNldCkKKyAgICBBTFdBWVNfSU5MSU5FIE1hdGNoUmVzdWx0IFJl
Z0V4cENvbnN0cnVjdG9yOjpwZXJmb3JtTWF0Y2goVk0mIHZtLCBSZWdFeHAqIHJlZ0V4cCwgSlNT
dHJpbmcqIHN0cmluZywgY29uc3QgU3RyaW5nJiBpbnB1dCwgaW50IHN0YXJ0T2Zmc2V0KQogICAg
IHsKLSAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gcmVnRXhwLT5tYXRjaChnbG9iYWxEYXRh
LCBpbnB1dCwgc3RhcnRPZmZzZXQpOworICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSByZWdF
eHAtPm1hdGNoKHZtLCBpbnB1dCwgc3RhcnRPZmZzZXQpOwogICAgICAgICBpZiAocmVzdWx0KQot
ICAgICAgICAgICAgbV9jYWNoZWRSZXN1bHQucmVjb3JkKGdsb2JhbERhdGEsIHRoaXMsIHJlZ0V4
cCwgc3RyaW5nLCByZXN1bHQpOworICAgICAgICAgICAgbV9jYWNoZWRSZXN1bHQucmVjb3JkKHZt
LCB0aGlzLCByZWdFeHAsIHN0cmluZywgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNo
ZXNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwTWF0Y2hlc0FycmF5LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsMjggKzMzLDI4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gUmVn
RXhwTWF0Y2hlc0FycmF5OjpzX2luZm8gPSB7IkFycmF5IiwgJkpTQXJyYXk6OnNfaW5mbywgMCwg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShSZWdFeHBNYXRjaGVzQXJyYXkpfTsKIAotUmVnRXhwTWF0
Y2hlc0FycmF5OjpSZWdFeHBNYXRjaGVzQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJp
bmcqIGlucHV0LCBSZWdFeHAqIHJlZ0V4cCwgTWF0Y2hSZXN1bHQgcmVzdWx0KQotICAgIDogSlNB
cnJheShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVy
ZSgpLCBidXR0ZXJmbHkpCitSZWdFeHBNYXRjaGVzQXJyYXk6OlJlZ0V4cE1hdGNoZXNBcnJheShW
TSYgdm0sIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1N0cmluZyogaW5wdXQsIFJlZ0V4cCogcmVnRXhwLCBNYXRjaFJlc3VsdCByZXN1bHQpCisg
ICAgOiBKU0FycmF5KHZtLCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVy
ZSgpLCBidXR0ZXJmbHkpCiAgICAgLCBtX3Jlc3VsdChyZXN1bHQpCiAgICAgLCBtX3N0YXRlKFJl
aWZpZWROb25lKQogewotICAgIG1faW5wdXQuc2V0KGdsb2JhbERhdGEsIHRoaXMsIGlucHV0KTsK
LSAgICBtX3JlZ0V4cC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgcmVnRXhwKTsKKyAgICBtX2lucHV0
LnNldCh2bSwgdGhpcywgaW5wdXQpOworICAgIG1fcmVnRXhwLnNldCh2bSwgdGhpcywgcmVnRXhw
KTsKIH0KIAogUmVnRXhwTWF0Y2hlc0FycmF5KiBSZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBpbnB1dCwgUmVnRXhwKiByZWdFeHAsIE1hdGNoUmVz
dWx0IHJlc3VsdCkKIHsKICAgICBBU1NFUlQocmVzdWx0KTsKLSAgICBKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCByZWdFeHAtPm51bVN1YnBhdHRlcm5z
KCkgKyAxKTsKLSAgICBSZWdFeHBNYXRjaGVzQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8UmVnRXhwTWF0Y2hlc0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBSZWdFeHBN
YXRjaGVzQXJyYXkoZ2xvYmFsRGF0YSwgYnV0dGVyZmx5LCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIGlucHV0LCByZWdFeHAsIHJlc3VsdCk7Ci0gICAgYXJyYXktPmZpbmlzaENyZWF0aW9u
KGdsb2JhbERhdGEpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseSh2bSwgcmVnRXhwLT5udW1TdWJwYXR0ZXJu
cygpICsgMSk7CisgICAgUmVnRXhwTWF0Y2hlc0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPFJlZ0V4cE1hdGNoZXNBcnJheT4odm0uaGVhcCkpIFJlZ0V4cE1hdGNoZXNB
cnJheSh2bSwgYnV0dGVyZmx5LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGlucHV0LCBy
ZWdFeHAsIHJlc3VsdCk7CisgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1
cm4gYXJyYXk7CiB9CiAKLXZvaWQgUmVnRXhwTWF0Y2hlc0FycmF5OjpmaW5pc2hDcmVhdGlvbihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIFJlZ0V4cE1hdGNoZXNBcnJheTo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEp
OworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAogdm9pZCBSZWdFeHBNYXRjaGVz
QXJyYXk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
QEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBSZWdFeHBNYXRjaGVzQXJyYXk6OnJlaWZ5QWxsUHJvcGVy
dAogCiAgICAgaWYgKHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zID0gbV9yZWdFeHAtPm51bVN1YnBh
dHRlcm5zKCkpIHsKICAgICAgICAgVmVjdG9yPGludCwgMzI+IHN1YnBhdHRlcm5SZXN1bHRzOwot
ICAgICAgICBpbnQgcG9zaXRpb24gPSBtX3JlZ0V4cC0+bWF0Y2goZXhlYy0+Z2xvYmFsRGF0YSgp
LCBtX2lucHV0LT52YWx1ZShleGVjKSwgbV9yZXN1bHQuc3RhcnQsIHN1YnBhdHRlcm5SZXN1bHRz
KTsKKyAgICAgICAgaW50IHBvc2l0aW9uID0gbV9yZWdFeHAtPm1hdGNoKGV4ZWMtPnZtKCksIG1f
aW5wdXQtPnZhbHVlKGV4ZWMpLCBtX3Jlc3VsdC5zdGFydCwgc3VicGF0dGVyblJlc3VsdHMpOwog
ICAgICAgICBBU1NFUlRfVU5VU0VEKHBvc2l0aW9uLCBwb3NpdGlvbiA+PSAwICYmIHN0YXRpY19j
YXN0PHNpemVfdD4ocG9zaXRpb24pID09IG1fcmVzdWx0LnN0YXJ0KTsKICAgICAgICAgQVNTRVJU
KG1fcmVzdWx0LnN0YXJ0ID09IHN0YXRpY19jYXN0PHNpemVfdD4oc3VicGF0dGVyblJlc3VsdHNb
MF0pKTsKICAgICAgICAgQVNTRVJUKG1fcmVzdWx0LmVuZCA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+
KHN1YnBhdHRlcm5SZXN1bHRzWzFdKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkocmV2aXNpb24gMTQ4NjU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBS
ZWdFeHBNYXRjaGVzQXJyYXkgOiBwdWJsaWMgSlNBcnJheSB7CiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgUmVnRXhwTWF0Y2hlc0FycmF5KEpTR2xvYmFsRGF0YSYsIEJ1dHRlcmZseSosIEpTR2xvYmFs
T2JqZWN0KiwgSlNTdHJpbmcqLCBSZWdFeHAqLCBNYXRjaFJlc3VsdCk7CisgICAgICAgIFJlZ0V4
cE1hdGNoZXNBcnJheShWTSYsIEJ1dHRlcmZseSosIEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcq
LCBSZWdFeHAqLCBNYXRjaFJlc3VsdCk7CiAKICAgICAgICAgZW51bSBSZWlmaWVkU3RhdGUgeyBS
ZWlmaWVkTm9uZSwgUmVpZmllZE1hdGNoLCBSZWlmaWVkQWxsIH07CiAKQEAgLTQyLDE1ICs0Miwx
NSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNf
aW5mbzsKIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRh
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UpOworICAgICAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBBcnJheVdpdGhBcnJheVN0
b3JhZ2UpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYpOworICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJik7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92
ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZp
c2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw4ICs2NCw4IEBAIGNvbnN0IENsYXNzSW5mbyBS
ZWdFeHBPYmplY3Q6OnNfaW5mbyA9IHsKICovCiAKIFJlZ0V4cE9iamVjdDo6UmVnRXhwT2JqZWN0
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWdF
eHAqIHJlZ0V4cCkKLSAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT5nbG9iYWxE
YXRhKCksIHN0cnVjdHVyZSkKLSAgICAsIG1fcmVnRXhwKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCByZWdFeHApCisgICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+
dm0oKSwgc3RydWN0dXJlKQorICAgICwgbV9yZWdFeHAoZ2xvYmFsT2JqZWN0LT52bSgpLCB0aGlz
LCByZWdFeHApCiAgICAgLCBtX2xhc3RJbmRleElzV3JpdGFibGUodHJ1ZSkKIHsKICAgICBtX2xh
c3RJbmRleC5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzTnVtYmVyKDApKTsKQEAgLTczLDcgKzcz
LDcgQEAgUmVnRXhwT2JqZWN0OjpSZWdFeHBPYmplY3QoSlNHbG9iYWxPYmplYwogCiB2b2lkIFJl
Z0V4cE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
IHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7
CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICBBU1NF
UlQoaW5oZXJpdHMoJnNfaW5mbykpOwogfQogCkBAIC0zMTUsOSArMzE1LDkgQEAgTWF0Y2hSZXN1
bHQgUmVnRXhwT2JqZWN0OjptYXRjaChFeGVjU3RhdAogICAgIFJlZ0V4cCogcmVnRXhwID0gdGhp
cy0+cmVnRXhwKCk7CiAgICAgUmVnRXhwQ29uc3RydWN0b3IqIHJlZ0V4cENvbnN0cnVjdG9yID0g
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBDb25zdHJ1Y3RvcigpOwogICAgIFN0
cmluZyBpbnB1dCA9IHN0cmluZy0+dmFsdWUoZXhlYyk7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgaWYgKCFyZWdFeHAtPmdsb2JhbCgpKQotICAgICAgICByZXR1cm4gcmVnRXhwQ29uc3RydWN0
b3ItPnBlcmZvcm1NYXRjaChnbG9iYWxEYXRhLCByZWdFeHAsIHN0cmluZywgaW5wdXQsIDApOwor
ICAgICAgICByZXR1cm4gcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRjaCh2bSwgcmVnRXhw
LCBzdHJpbmcsIGlucHV0LCAwKTsKIAogICAgIEpTVmFsdWUganNMYXN0SW5kZXggPSBnZXRMYXN0
SW5kZXgoKTsKICAgICB1bnNpZ25lZCBsYXN0SW5kZXg7CkBAIC0zMzYsNyArMzM2LDcgQEAgTWF0
Y2hSZXN1bHQgUmVnRXhwT2JqZWN0OjptYXRjaChFeGVjU3RhdAogICAgICAgICBsYXN0SW5kZXgg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZG91YmxlTGFzdEluZGV4KTsKICAgICB9CiAKLSAgICBN
YXRjaFJlc3VsdCByZXN1bHQgPSByZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9ybU1hdGNoKGdsb2Jh
bERhdGEsIHJlZ0V4cCwgc3RyaW5nLCBpbnB1dCwgbGFzdEluZGV4KTsKKyAgICBNYXRjaFJlc3Vs
dCByZXN1bHQgPSByZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9ybU1hdGNoKHZtLCByZWdFeHAsIHN0
cmluZywgaW5wdXQsIGxhc3RJbmRleCk7CiAgICAgc2V0TGFzdEluZGV4KGV4ZWMsIHJlc3VsdC5l
bmQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDE0ICszNywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyBSZWdFeHBPYmplY3QqIGNyZWF0
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWdFeHAqIHJlZ0V4cCkKKyAgICAgICAgc3RhdGljIFJl
Z0V4cE9iamVjdCogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZ0V4cCogcmVnRXhwKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBSZWdFeHBPYmplY3QqIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFJl
Z0V4cE9iamVjdD4oZ2xvYmFsRGF0YS5oZWFwKSkgUmVnRXhwT2JqZWN0KGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlLCByZWdFeHApOworICAgICAgICAgICAgUmVnRXhwT2JqZWN0KiBvYmplY3QgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxSZWdFeHBPYmplY3Q+KHZtLmhlYXApKSBSZWdFeHBP
YmplY3QoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHJlZ0V4cCk7CiAgICAgICAgICAgICBvYmpl
Y3QtPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICByZXR1cm4gb2Jq
ZWN0OwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBzZXRSZWdFeHAoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBSZWdFeHAqIHIpIHsgbV9yZWdFeHAuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHIp
OyB9CisgICAgICAgIHZvaWQgc2V0UmVnRXhwKFZNJiB2bSwgUmVnRXhwKiByKSB7IG1fcmVnRXhw
LnNldCh2bSwgdGhpcywgcik7IH0KICAgICAgICAgUmVnRXhwKiByZWdFeHAoKSBjb25zdCB7IHJl
dHVybiBtX3JlZ0V4cC5nZXQoKTsgfQogCiAgICAgICAgIHZvaWQgc2V0TGFzdEluZGV4KEV4ZWNT
dGF0ZSogZXhlYywgc2l6ZV90IGxhc3RJbmRleCkKQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgc2V0TGFzdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBsYXN0SW5kZXgsIGJvb2wgc2hvdWxkVGhyb3cpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlm
IChMSUtFTFkobV9sYXN0SW5kZXhJc1dyaXRhYmxlKSkKLSAgICAgICAgICAgICAgICBtX2xhc3RJ
bmRleC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBsYXN0SW5kZXgpOworICAgICAgICAg
ICAgICAgIG1fbGFzdEluZGV4LnNldChleGVjLT52bSgpLCB0aGlzLCBsYXN0SW5kZXgpOwogICAg
ICAgICAgICAgZWxzZSBpZiAoc2hvdWxkVGhyb3cpCiAgICAgICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKICAgICAg
ICAgfQpAQCAtNzYsOSArNzYsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMg
SlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAg
ICAgfQogCiAgICAgcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjAsMTMgKzEyMCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJl
Z0V4cFByb3RvCiAgICAgICAgICAgICBpZiAoZmxhZ3MgPT0gSW52YWxpZEZsYWdzKQogICAgICAg
ICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhl
YywgQVNDSUlMaXRlcmFsKCJJbnZhbGlkIGZsYWdzIHN1cHBsaWVkIHRvIFJlZ0V4cCBjb25zdHJ1
Y3Rvci4iKSkpOwogICAgICAgICB9Ci0gICAgICAgIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgcGF0dGVybiwgZmxhZ3MpOworICAgICAgICByZWdFeHAgPSBSZWdF
eHA6OmNyZWF0ZShleGVjLT52bSgpLCBwYXR0ZXJuLCBmbGFncyk7CiAgICAgfQogCiAgICAgaWYg
KCFyZWdFeHAtPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVTeW50YXhFcnJvcihleGVjLCByZWdFeHAtPmVycm9yTWVzc2FnZSgpKSk7CiAKLSAgICBh
c1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5zZXRSZWdFeHAoZXhlYy0+Z2xvYmFsRGF0YSgpLCBy
ZWdFeHApOworICAgIGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPnNldFJlZ0V4cChleGVjLT52
bSgpLCByZWdFeHApOwogICAgIGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPnNldExhc3RJbmRl
eChleGVjLCAwKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90
eXBlLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw5ICszOSw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2lu
Zm87CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8pOwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAJKHJldmlzaW9u
IDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDEwICs4MSwxMCBAQCBTbWFsbFN0cmluZ3M6OlNtYWxs
U3RyaW5ncygpCiAgICAgICAgIG1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tpXSA9IDA7CiB9CiAK
LXZvaWQgU21hbGxTdHJpbmdzOjppbml0aWFsaXplQ29tbW9uU3RyaW5ncyhKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCit2b2lkIFNtYWxsU3RyaW5nczo6aW5pdGlhbGl6ZUNvbW1vblN0cmluZ3Mo
Vk0mIHZtKQogewotICAgIGNyZWF0ZUVtcHR5U3RyaW5nKCZnbG9iYWxEYXRhKTsKLSNkZWZpbmUg
SlNDX0NPTU1PTl9TVFJJTkdTX0FUVFJJQlVURV9JTklUSUFMSVpFKG5hbWUpIGluaXRpYWxpemUo
Jmdsb2JhbERhdGEsIG1fIyNuYW1lLCAjbmFtZSk7CisgICAgY3JlYXRlRW1wdHlTdHJpbmcoJnZt
KTsKKyNkZWZpbmUgSlNDX0NPTU1PTl9TVFJJTkdTX0FUVFJJQlVURV9JTklUSUFMSVpFKG5hbWUp
IGluaXRpYWxpemUoJnZtLCBtXyMjbmFtZSwgI25hbWUpOwogICAgIEpTQ19DT01NT05fU1RSSU5H
U19FQUNIX05BTUUoSlNDX0NPTU1PTl9TVFJJTkdTX0FUVFJJQlVURV9JTklUSUFMSVpFKQogI3Vu
ZGVmIEpTQ19DT01NT05fU1RSSU5HU19BVFRSSUJVVEVfSU5JVElBTElaRQogfQpAQCAtMTA4LDE4
ICsxMDgsMTggQEAgdm9pZCBTbWFsbFN0cmluZ3M6OmZpbmFsaXplU21hbGxTdHJpbmdzKAogICAg
ICAgICBmaW5hbGl6ZShtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbaV0pOwogfQogCi12b2lkIFNt
YWxsU3RyaW5nczo6Y3JlYXRlRW1wdHlTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQor
dm9pZCBTbWFsbFN0cmluZ3M6OmNyZWF0ZUVtcHR5U3RyaW5nKFZNKiB2bSkKIHsKICAgICBBU1NF
UlQoIW1fZW1wdHlTdHJpbmcpOwotICAgIG1fZW1wdHlTdHJpbmcgPSBKU1N0cmluZzo6Y3JlYXRl
SGFzT3RoZXJPd25lcigqZ2xvYmFsRGF0YSwgU3RyaW5nSW1wbDo6ZW1wdHkoKSk7CisgICAgbV9l
bXB0eVN0cmluZyA9IEpTU3RyaW5nOjpjcmVhdGVIYXNPdGhlck93bmVyKCp2bSwgU3RyaW5nSW1w
bDo6ZW1wdHkoKSk7CiB9CiAKLXZvaWQgU21hbGxTdHJpbmdzOjpjcmVhdGVTaW5nbGVDaGFyYWN0
ZXJTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBjaGFyIGNoYXJhY3Rl
cikKK3ZvaWQgU21hbGxTdHJpbmdzOjpjcmVhdGVTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVk0qIHZt
LCB1bnNpZ25lZCBjaGFyIGNoYXJhY3RlcikKIHsKICAgICBpZiAoIW1fc3RvcmFnZSkKICAgICAg
ICAgbV9zdG9yYWdlID0gYWRvcHRQdHIobmV3IFNtYWxsU3RyaW5nc1N0b3JhZ2UpOwogICAgIEFT
U0VSVCghbV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzW2NoYXJhY3Rlcl0pOwotICAgIG1fc2luZ2xl
Q2hhcmFjdGVyU3RyaW5nc1tjaGFyYWN0ZXJdID0gSlNTdHJpbmc6OmNyZWF0ZUhhc090aGVyT3du
ZXIoKmdsb2JhbERhdGEsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4obV9zdG9yYWdlLT5yZXAoY2hh
cmFjdGVyKSkpOworICAgIG1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tjaGFyYWN0ZXJdID0gSlNT
dHJpbmc6OmNyZWF0ZUhhc090aGVyT3duZXIoKnZtLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+KG1f
c3RvcmFnZS0+cmVwKGNoYXJhY3RlcikpKTsKIH0KIAogU3RyaW5nSW1wbCogU21hbGxTdHJpbmdz
OjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAodW5zaWduZWQgY2hhciBjaGFyYWN0ZXIpCkBAIC0x
MjksOSArMTI5LDkgQEAgU3RyaW5nSW1wbCogU21hbGxTdHJpbmdzOjpzaW5nbGVDaGFyYWN0ZQog
ICAgIHJldHVybiBtX3N0b3JhZ2UtPnJlcChjaGFyYWN0ZXIpOwogfQogCi12b2lkIFNtYWxsU3Ry
aW5nczo6aW5pdGlhbGl6ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTU3RyaW5nKiYgc3Ry
aW5nLCBjb25zdCBjaGFyKiB2YWx1ZSkgY29uc3QKK3ZvaWQgU21hbGxTdHJpbmdzOjppbml0aWFs
aXplKFZNKiB2bSwgSlNTdHJpbmcqJiBzdHJpbmcsIGNvbnN0IGNoYXIqIHZhbHVlKSBjb25zdAog
ewotICAgIHN0cmluZyA9IEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIFN0cmluZ0ltcGw6
OmNyZWF0ZSh2YWx1ZSkpOworICAgIHN0cmluZyA9IEpTU3RyaW5nOjpjcmVhdGUoKnZtLCBTdHJp
bmdJbXBsOjpjcmVhdGUodmFsdWUpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAkocmV2aXNpb24g
MTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgY2xhc3MgU3RyaW5nSW1wbDsKIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgY2xhc3MgSGVhcFJvb3RWaXNpdG9yOwotICAgIGNsYXNzIEpTR2xv
YmFsRGF0YTsKKyAgICBjbGFzcyBWTTsKICAgICBjbGFzcyBKU1N0cmluZzsKICAgICBjbGFzcyBT
bWFsbFN0cmluZ3NTdG9yYWdlOwogICAgIGNsYXNzIFNsb3RWaXNpdG9yOwpAQCAtNjgsMTAgKzY4
LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIG1fZW1wdHlTdHJpbmc7
CiAgICAgICAgIH0KIAotICAgICAgICBKU1N0cmluZyogc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgdW5zaWduZWQgY2hhciBjaGFyYWN0ZXIpCisgICAgICAg
IEpTU3RyaW5nKiBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVk0qIHZtLCB1bnNpZ25lZCBjaGFyIGNo
YXJhY3RlcikKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX3NpbmdsZUNoYXJhY3RlclN0
cmluZ3NbY2hhcmFjdGVyXSkKLSAgICAgICAgICAgICAgICBjcmVhdGVTaW5nbGVDaGFyYWN0ZXJT
dHJpbmcoZ2xvYmFsRGF0YSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICBjcmVhdGVTaW5n
bGVDaGFyYWN0ZXJTdHJpbmcodm0sIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICByZXR1cm4gbV9z
aW5nbGVDaGFyYWN0ZXJTdHJpbmdzW2NoYXJhY3Rlcl07CiAgICAgICAgIH0KIApAQCAtODEsNyAr
ODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU1N0cmluZyoqIHNpbmdsZUNoYXJh
Y3RlclN0cmluZ3MoKSB7IHJldHVybiAmbV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzWzBdOyB9CiAK
LSAgICAgICAgdm9pZCBpbml0aWFsaXplQ29tbW9uU3RyaW5ncyhKU0dsb2JhbERhdGEmKTsKKyAg
ICAgICAgdm9pZCBpbml0aWFsaXplQ29tbW9uU3RyaW5ncyhWTSYpOwogICAgICAgICB2b2lkIHZp
c2l0U3Ryb25nUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOwogCiAjZGVmaW5lIEpTQ19DT01NT05f
U1RSSU5HU19BQ0NFU1NPUl9ERUZJTklUSU9OKG5hbWUpIFwKQEAgLTk1LDEwICs5NSwxMCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgc2luZ2xlQ2hhcmFjdGVyU3RyaW5nQ291bnQgPSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcg
KyAxOwogCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY3JlYXRlRW1wdHlTdHJpbmco
SlNHbG9iYWxEYXRhKik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY3JlYXRlU2lu
Z2xlQ2hhcmFjdGVyU3RyaW5nKEpTR2xvYmFsRGF0YSosIHVuc2lnbmVkIGNoYXIpOworICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNyZWF0ZUVtcHR5U3RyaW5nKFZNKik7CisgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY3JlYXRlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKFZNKiwg
dW5zaWduZWQgY2hhcik7CiAKLSAgICAgICAgdm9pZCBpbml0aWFsaXplKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgSlNTdHJpbmcqJiBzdHJpbmcsIGNvbnN0IGNoYXIqIHZhbHVlKSBjb25zdDsK
KyAgICAgICAgdm9pZCBpbml0aWFsaXplKFZNKiB2bSwgSlNTdHJpbmcqJiBzdHJpbmcsIGNvbnN0
IGNoYXIqIHZhbHVlKSBjb25zdDsKIAogICAgICAgICBKU1N0cmluZyogbV9lbXB0eVN0cmluZzsK
ICNkZWZpbmUgSlNDX0NPTU1PTl9TVFJJTkdTX0FUVFJJQlVURV9ERUNMQVJBVElPTihuYW1lKSBK
U1N0cmluZyogbV8jI25hbWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
cGFyc2VBcnJheVZhbHVlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENs
YXNzSW5mbyBTcGFyc2VBcnJheVZhbHVlTWFwOjpzX2luZm8gPSB7ICJTcGFyc2VBcnJheVZhbHVl
TWFwIiwgMCwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShTcGFyc2VBcnJheVZhbHVlTWFwKSB9
OwogCi1TcGFyc2VBcnJheVZhbHVlTWFwOjpTcGFyc2VBcnJheVZhbHVlTWFwKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKLSAgICA6IEJhc2UoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zcGFyc2VB
cnJheVZhbHVlTWFwU3RydWN0dXJlLmdldCgpKQorU3BhcnNlQXJyYXlWYWx1ZU1hcDo6U3BhcnNl
QXJyYXlWYWx1ZU1hcChWTSYgdm0pCisgICAgOiBCYXNlKHZtLCB2bS5zcGFyc2VBcnJheVZhbHVl
TWFwU3RydWN0dXJlLmdldCgpKQogICAgICwgbV9mbGFncyhOb3JtYWwpCiAgICAgLCBtX3JlcG9y
dGVkQ2FwYWNpdHkoMCkKIHsKQEAgLTUwLDE1ICs1MCwxNSBAQCBTcGFyc2VBcnJheVZhbHVlTWFw
Ojp+U3BhcnNlQXJyYXlWYWx1ZU1hCiB7CiB9CiAKLXZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBTcGFyc2VBcnJh
eVZhbHVlTWFwOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogfQogCi1T
cGFyc2VBcnJheVZhbHVlTWFwKiBTcGFyc2VBcnJheVZhbHVlTWFwOjpjcmVhdGUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQorU3BhcnNlQXJyYXlWYWx1ZU1hcCogU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6Y3JlYXRlKFZNJiB2bSkKIHsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiByZXN1bHQgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTcGFyc2VBcnJheVZhbHVlTWFwPihnbG9iYWxEYXRh
LmhlYXApKSBTcGFyc2VBcnJheVZhbHVlTWFwKGdsb2JhbERhdGEpOwotICAgIHJlc3VsdC0+Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogcmVzdWx0
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3BhcnNlQXJyYXlWYWx1ZU1hcD4odm0uaGVh
cCkpIFNwYXJzZUFycmF5VmFsdWVNYXAodm0pOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24o
dm0pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTY3LDkgKzY3LDkgQEAgdm9pZCBTcGFy
c2VBcnJheVZhbHVlTWFwOjpkZXN0cm95KEpTQ2VsbAogICAgIHN0YXRpY19jYXN0PFNwYXJzZUFy
cmF5VmFsdWVNYXAqPihjZWxsKS0+U3BhcnNlQXJyYXlWYWx1ZU1hcDo6flNwYXJzZUFycmF5VmFs
dWVNYXAoKTsKIH0KIAotU3RydWN0dXJlKiBTcGFyc2VBcnJheVZhbHVlTWFwOjpjcmVhdGVTdHJ1
Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK1N0cnVjdHVyZSogU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCiB7Ci0gICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDb21wb3VuZFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ29tcG91bmRUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8pOwogfQogCiBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTT2JqZWN0KiBhcnJheSwgdW5zaWduZWQgaSkKQEAgLTEx
OCw3ICsxMTgsNyBAQCBib29sIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdChFeGVjCiAg
ICAgfQogCiAgICAgZW50cnkuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7Ci0gICAgZW50cnkuc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOworICAgIGVudHJ5LnNldChleGVjLT52
bSgpLCB0aGlzLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE3Miw3ICsxNzIs
NyBAQCB2b2lkIFNwYXJzZUFycmF5RW50cnk6OnB1dChFeGVjU3RhdGUqIGV4CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBzZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBt
YXAsIHZhbHVlKTsKKyAgICAgICAgc2V0KGV4ZWMtPnZtKCksIG1hcCwgdmFsdWUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
cGFyc2VBcnJheVZhbHVlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY1LDEwICs2NSwxMCBAQCBwcml2YXRlOgogICAgICAgICBMZW5ndGhJc1JlYWRP
bmx5ID0gMiwKICAgICB9OwogCi0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcChKU0dsb2JhbERhdGEm
KTsKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKFZNJik7CiAgICAgflNwYXJzZUFycmF5VmFsdWVN
YXAoKTsKICAgICAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYpOworICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBKU0NlbGw6OlN0cnVjdHVy
ZUZsYWdzOwogCkBAIC03OSwxMyArNzksMTMgQEAgcHVibGljOgogICAgIHR5cGVkZWYgTWFwOjpj
b25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICAgICB0eXBlZGVmIE1hcDo6QWRkUmVzdWx0
IEFkZFJlc3VsdDsKIAotICAgIHN0YXRpYyBTcGFyc2VBcnJheVZhbHVlTWFwKiBjcmVhdGUoSlNH
bG9iYWxEYXRhJik7CisgICAgc3RhdGljIFNwYXJzZUFycmF5VmFsdWVNYXAqIGNyZWF0ZShWTSYp
OwogICAgIAogICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwog
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
cHJvdG90eXBlKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKIAogICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmljdEV2YWxBY3RpdmF0aW9uLmNwcAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaWN0
RXZhbEFjdGl2YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIGNvbnN0
IENsYXNzSW5mbyBTdHJpY3RFdmFsQWN0aXZhdGlvbjo6c18KIAogU3RyaWN0RXZhbEFjdGl2YXRp
b246OlN0cmljdEV2YWxBY3RpdmF0aW9uKEV4ZWNTdGF0ZSogZXhlYykKICAgICA6IEJhc2UoCi0g
ICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKSwKKyAgICAgICAgZXhlYy0+dm0oKSwKICAgICAgICAg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5zdHJpY3RFdmFsQWN0aXZhdGlvblN0cnVjdHVy
ZSgpLAogICAgICAgICBleGVjLT5zY29wZSgpCiAgICAgKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaWN0RXZhbEFjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5oCShyZXZpc2lv
biAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpY3RFdmFsQWN0
aXZhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNiArMzcsMTYgQEAgcHVibGljOgogICAg
IHN0YXRpYyBTdHJpY3RFdmFsQWN0aXZhdGlvbiogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYykKICAg
ICB7CiAgICAgICAgIFN0cmljdEV2YWxBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8U3RyaWN0RXZhbEFjdGl2YXRpb24+KCpleGVjLT5oZWFwKCkpKSBT
dHJpY3RFdmFsQWN0aXZhdGlvbihleGVjKTsKLSAgICAgICAgYWN0aXZhdGlvbi0+ZmluaXNoQ3Jl
YXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgYWN0aXZhdGlvbi0+ZmluaXNoQ3Jl
YXRpb24oZXhlYy0+dm0oKSk7CiAgICAgICAgIHJldHVybiBhY3RpdmF0aW9uOwogICAgIH0KIAog
ICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSk7CiAgICAgc3RhdGljIEpTT2JqZWN0KiB0b1RoaXNPYmplY3QoSlNDZWxsKiwgRXhl
Y1N0YXRlKik7CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvdHlwZSkKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0
b3IuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDkgKzU1LDkgQEAg
U3RyaW5nQ29uc3RydWN0b3I6OlN0cmluZ0NvbnN0cnVjdG9yKEpTRwogCiB2b2lkIFN0cmluZ0Nv
bnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFN0cmluZ1Byb3RvdHlw
ZSogc3RyaW5nUHJvdG90eXBlKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmds
b2JhbERhdGEoKSwgc3RyaW5nUHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKTsKLSAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIHN0cmluZ1Byb3RvdHlwZSwgUmVhZE9ubHkgfCBEb250
RW51bSB8IERvbnREZWxldGUpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSks
IFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihleGVjLT52bSgpLCBzdHJpbmdQcm90b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUp
OworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5wcm90b3R5cGUsIHN0cmluZ1Byb3RvdHlwZSwgUmVhZE9ubHkgfCBEb250RW51
bSB8IERvbnREZWxldGUpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZt
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEpLCBSZWFkT25seSB8
IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiB9CiAKIGJvb2wgU3RyaW5nQ29uc3RydWN0b3I6Omdl
dE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90ICZzbG90KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAx
NDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0MCw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAg
ICAgfQogCiAgICAgcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RyaW5nT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdPYmplY3QuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MiwxNiArMzIsMTYgQEAgQVNTRVJUX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoU3RyaW5nT2JqZQog
CiBjb25zdCBDbGFzc0luZm8gU3RyaW5nT2JqZWN0OjpzX2luZm8gPSB7ICJTdHJpbmciLCAmSlNX
cmFwcGVyT2JqZWN0OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoU3RyaW5nT2Jq
ZWN0KSB9OwogCi1TdHJpbmdPYmplY3Q6OlN0cmluZ09iamVjdChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogSlNXcmFwcGVyT2JqZWN0KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSkKK1N0cmluZ09iamVjdDo6U3RyaW5nT2JqZWN0KFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBKU1dyYXBwZXJPYmplY3Qodm0sIHN0cnVjdHVyZSkK
IHsKIH0KIAotdm9pZCBTdHJpbmdPYmplY3Q6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNTdHJpbmcqIHN0cmluZykKK3ZvaWQgU3RyaW5nT2JqZWN0OjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIEpTU3RyaW5nKiBzdHJpbmcpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFT
U0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgc2V0SW50ZXJuYWxWYWx1ZShnbG9iYWxEYXRh
LCBzdHJpbmcpOworICAgIHNldEludGVybmFsVmFsdWUodm0sIHN0cmluZyk7CiB9CiAKIGJvb2wg
U3RyaW5nT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAg
LTE2Niw3ICsxNjYsNyBAQCB2b2lkIFN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
CiBTdHJpbmdPYmplY3QqIGNvbnN0cnVjdFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgc3RyaW5nKQogewogICAgIFN0cmluZ09iamVj
dCogb2JqZWN0ID0gU3RyaW5nT2JqZWN0OjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT5zdHJp
bmdPYmplY3RTdHJ1Y3R1cmUoKSk7Ci0gICAgb2JqZWN0LT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgc3RyaW5nKTsKKyAgICBvYmplY3QtPnNldEludGVybmFsVmFsdWUoZXhl
Yy0+dm0oKSwgc3RyaW5nKTsKICAgICByZXR1cm4gb2JqZWN0OwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkocmV2aXNpb24gMTQ4NjU1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDE0ICszMywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3Rh
dGljIFN0cmluZ09iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBqc0VtcHR5
U3RyaW5nKGV4ZWMpOwotICAgICAgICAgICAgU3RyaW5nT2JqZWN0KiBvYmplY3QgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJpbmdPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBTdHJpbmdP
YmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpOyAgCi0gICAgICAgICAgICBvYmpl
Y3QtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RyaW5nKTsKKyAgICAgICAg
ICAgIFN0cmluZ09iamVjdCogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3Ry
aW5nT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgU3RyaW5nT2JqZWN0KGV4ZWMtPnZtKCksIHN0cnVj
dHVyZSk7ICAKKyAgICAgICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwg
c3RyaW5nKTsKICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgIH0KICAgICAgICAg
c3RhdGljIFN0cmluZ09iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTU3RyaW5nKiBzdHJpbmcpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmlu
Z09iamVjdCogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RyaW5nT2JqZWN0
PigqZXhlYy0+aGVhcCgpKSkgU3RyaW5nT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0
dXJlKTsKLSAgICAgICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0
YSgpLCBzdHJpbmcpOworICAgICAgICAgICAgU3RyaW5nT2JqZWN0KiBvYmplY3QgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJpbmdPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBTdHJpbmdP
YmplY3QoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIG9iamVjdC0+ZmluaXNo
Q3JlYXRpb24oZXhlYy0+dm0oKSwgc3RyaW5nKTsKICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7
CiAgICAgICAgIH0KICAgICAgICAgc3RhdGljIFN0cmluZ09iamVjdCogY3JlYXRlKEV4ZWNTdGF0
ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKQEAgLTYxLDE1ICs2MSwxNSBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBKU1N0cmluZyogaW50ZXJuYWxWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIGFzU3RyaW5nKEpTV3JhcHBlck9iamVjdDo6aW50ZXJuYWxWYWx1ZSgpKTt9CiAKLSAg
ICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiwgSlNTdHJpbmcqKTsKKyAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTU3RyaW5n
Kik7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwg
SlNXcmFwcGVyT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgU3RyaW5nT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOworICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBTdHJpbmdPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB9OwogCiAg
ICAgU3RyaW5nT2JqZWN0KiBhc1N0cmluZ09iamVjdChKU1ZhbHVlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNp
b24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsMTUgKzg2LDE1IEBAIGNvbnN0IENsYXNzSW5m
byBTdHJpbmdQcm90b3R5cGU6OnNfaW5mbyAKIAogLy8gRUNNQSAxNS41LjQKIFN0cmluZ1Byb3Rv
dHlwZTo6U3RyaW5nUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCi0gICAgOiBTdHJpbmdPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpCisg
ICAgOiBTdHJpbmdPYmplY3QoZXhlYy0+dm0oKSwgc3RydWN0dXJlKQogewogfQogCiB2b2lkIFN0
cmluZ1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogbmFtZUFuZE1lc3NhZ2UpCiB7Ci0gICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgCi0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwg
bmFtZUFuZE1lc3NhZ2UpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBuYW1lQW5kTWVz
c2FnZSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIAogICAgIEpTQ19OQVRJVkVf
SU5UUklOU0lDX0ZVTkNUSU9OKCJ0b1N0cmluZyIsIHN0cmluZ1Byb3RvRnVuY1RvU3RyaW5nLCBE
b250RW51bSwgMCwgU3RyaW5nUHJvdG90eXBlVmFsdWVPZkludHJpbnNpYyk7CkBAIC0xMzQsNyAr
MTM0LDcgQEAgdm9pZCBTdHJpbmdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKEV4ZQogICAgIEpT
Q19OQVRJVkVfRlVOQ1RJT04oInRyaW1SaWdodCIsIHN0cmluZ1Byb3RvRnVuY1RyaW1SaWdodCwg
RG9udEVudW0sIDApOwogCiAgICAgLy8gVGhlIGNvbnN0cnVjdG9yIHdpbGwgYmUgYWRkZWQgbGF0
ZXIsIGFmdGVyIFN0cmluZ0NvbnN0cnVjdG9yIGhhcyBiZWVuIGJ1aWx0Ci0gICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkubGVuZ3RoLCBqc051bWJlcigwKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0p
OworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDApLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBE
b250RW51bSk7CiB9CiAKIFN0cmluZ1Byb3RvdHlwZSogU3RyaW5nUHJvdG90eXBlOjpjcmVhdGUo
RXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKQEAgLTQwNSwxMiArNDA1LDEyIEBAIHN0YXRpYyBORVZFUl9JTkxJTkUgRW5j
b2RlZEpTVmFsdWUgcmVtb3YKICAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uID0gMDsKIAogICAg
IFZlY3RvcjxTdHJpbmdSYW5nZSwgMTY+IHNvdXJjZVJhbmdlczsKLSAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwogICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9IGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0b3IoKTsKICAgICB1bnNpZ25lZCBz
b3VyY2VMZW4gPSBzb3VyY2UubGVuZ3RoKCk7CiAKICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAg
ICBNYXRjaFJlc3VsdCByZXN1bHQgPSByZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9ybU1hdGNoKCpn
bG9iYWxEYXRhLCByZWdFeHAsIHN0cmluZywgc291cmNlLCBzdGFydFBvc2l0aW9uKTsKKyAgICAg
ICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRjaCgq
dm0sIHJlZ0V4cCwgc3RyaW5nLCBzb3VyY2UsIHN0YXJ0UG9zaXRpb24pOwogICAgICAgICBpZiAo
IXJlc3VsdCkKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC00ODAsMTEgKzQ4MCwxMSBAQCBzdGF0
aWMgTkVWRVJfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhCiAgICAgICAgIENhY2hlZENhbGwg
Y2FjaGVkQ2FsbChleGVjLCBmdW5jLCBhcmdDb3VudCk7CiAgICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkp
OwotICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgp
OworICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICAgICAgaWYgKHNvdXJjZS5pczhC
aXQoKSkgewogICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICBpbnQq
IG92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gcmVnRXhwQ29u
c3RydWN0b3ItPnBlcmZvcm1NYXRjaCgqZ2xvYmFsRGF0YSwgcmVnRXhwLCBzdHJpbmcsIHNvdXJj
ZSwgc3RhcnRQb3NpdGlvbiwgJm92ZWN0b3IpOworICAgICAgICAgICAgICAgIE1hdGNoUmVzdWx0
IHJlc3VsdCA9IHJlZ0V4cENvbnN0cnVjdG9yLT5wZXJmb3JtTWF0Y2goKnZtLCByZWdFeHAsIHN0
cmluZywgc291cmNlLCBzdGFydFBvc2l0aW9uLCAmb3ZlY3Rvcik7CiAgICAgICAgICAgICAgICAg
aWYgKCFyZXN1bHQpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCkBAIC00OTgsNyArNDk4
LDcgQEAgc3RhdGljIE5FVkVSX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYQogICAgICAgICAg
ICAgICAgICAgICBpZiAobWF0Y2hTdGFydCA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICBj
YWNoZWRDYWxsLnNldEFyZ3VtZW50KGksIGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50
KGksIGpzU3Vic3RyaW5nOChnbG9iYWxEYXRhLCBzb3VyY2UsIG1hdGNoU3RhcnQsIG1hdGNoTGVu
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KGksIGpz
U3Vic3RyaW5nOCh2bSwgc291cmNlLCBtYXRjaFN0YXJ0LCBtYXRjaExlbikpOwogICAgICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoaSsrLCBq
c051bWJlcihyZXN1bHQuc3RhcnQpKTsKQEAgLTUyMyw3ICs1MjMsNyBAQCBzdGF0aWMgTkVWRVJf
SU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgIGludCogb3ZlY3RvcjsKLSAgICAgICAg
ICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSByZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9ybU1h
dGNoKCpnbG9iYWxEYXRhLCByZWdFeHAsIHN0cmluZywgc291cmNlLCBzdGFydFBvc2l0aW9uLCAm
b3ZlY3Rvcik7CisgICAgICAgICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gcmVnRXhwQ29u
c3RydWN0b3ItPnBlcmZvcm1NYXRjaCgqdm0sIHJlZ0V4cCwgc3RyaW5nLCBzb3VyY2UsIHN0YXJ0
UG9zaXRpb24sICZvdmVjdG9yKTsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTUzNyw3ICs1MzcsNyBAQCBzdGF0aWMgTkVWRVJf
SU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhCiAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRj
aFN0YXJ0IDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1l
bnQoaSwganNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoaSwganNTdWJzdHJpbmcoZ2xv
YmFsRGF0YSwgc291cmNlLCBtYXRjaFN0YXJ0LCBtYXRjaExlbikpOworICAgICAgICAgICAgICAg
ICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudChpLCBqc1N1YnN0cmluZyh2bSwgc291cmNl
LCBtYXRjaFN0YXJ0LCBtYXRjaExlbikpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoaSsrLCBqc051bWJlcihyZXN1bHQuc3RhcnQp
KTsKQEAgLTU2MSwxMCArNTYxLDEwIEBAIHN0YXRpYyBORVZFUl9JTkxJTkUgRW5jb2RlZEpTVmFs
dWUgcmVwbGEKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgICAgICBkbyB7CiAgICAgICAgICAgICBpbnQqIG92
ZWN0b3I7Ci0gICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSByZWdFeHBDb25zdHJ1Y3Rv
ci0+cGVyZm9ybU1hdGNoKCpnbG9iYWxEYXRhLCByZWdFeHAsIHN0cmluZywgc291cmNlLCBzdGFy
dFBvc2l0aW9uLCAmb3ZlY3Rvcik7CisgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBy
ZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9ybU1hdGNoKCp2bSwgcmVnRXhwLCBzdHJpbmcsIHNvdXJj
ZSwgc3RhcnRQb3NpdGlvbiwgJm92ZWN0b3IpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQpCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTgxMCw3ICs4MTAsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMpOwogICAgIEpTU3RyaW5nKiBzdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhl
Yyk7CiAgICAgU3RyaW5nIHMgPSBzdHJpbmctPnZhbHVlKGV4ZWMpOwotICAgIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAKQEAgLTgzMiwx
MiArODMyLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAg
ICAgICAgICogIHJlcGxhY2VkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbiBuZXcg
UmVnRXhwKHJlZ2V4cCkuCiAgICAgICAgICAqICBQZXIgRUNNQSAxNS4xMC40LjEsIGlmIGEwIGlz
IHVuZGVmaW5lZCBzdWJzdGl0dXRlIHRoZSBlbXB0eSBzdHJpbmcuCiAgICAgICAgICAqLwotICAg
ICAgICByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGEwLmlzVW5k
ZWZpbmVkKCkgPyBTdHJpbmcoIiIpIDogYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCBO
b0ZsYWdzKTsKKyAgICAgICAgcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+dm0oKSwgYTAu
aXNVbmRlZmluZWQoKSA/IFN0cmluZygiIikgOiBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YyksIE5vRmxhZ3MpOwogICAgICAgICBpZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKQogICAgICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCByZWdF
eHAtPmVycm9yTWVzc2FnZSgpKSk7CiAgICAgfQogICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdF
eHBDb25zdHJ1Y3RvciA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3Ry
dWN0b3IoKTsKLSAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSByZWdFeHBDb25zdHJ1Y3Rvci0+cGVy
Zm9ybU1hdGNoKCpnbG9iYWxEYXRhLCByZWdFeHAsIHN0cmluZywgcywgMCk7CisgICAgTWF0Y2hS
ZXN1bHQgcmVzdWx0ID0gcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRjaCgqdm0sIHJlZ0V4
cCwgc3RyaW5nLCBzLCAwKTsKICAgICAvLyBjYXNlIHdpdGhvdXQgJ2cnIGZsYWcgaXMgaGFuZGxl
ZCBsaWtlIFJlZ0V4cC5wcm90b3R5cGUuZXhlYwogICAgIGlmICghZ2xvYmFsKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCA/IFJlZ0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRl
KGV4ZWMsIHN0cmluZywgcmVnRXhwLCByZXN1bHQpIDoganNOdWxsKCkpOwpAQCAtODUwLDcgKzg1
MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAg
bGlzdC5hcHBlbmQoanNTdWJzdHJpbmcoZXhlYywgcywgcmVzdWx0LnN0YXJ0LCBsZW5ndGgpKTsK
ICAgICAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgICAgICArK2VuZDsKLSAgICAgICAgcmVzdWx0
ID0gcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRjaCgqZ2xvYmFsRGF0YSwgcmVnRXhwLCBz
dHJpbmcsIHMsIGVuZCk7CisgICAgICAgIHJlc3VsdCA9IHJlZ0V4cENvbnN0cnVjdG9yLT5wZXJm
b3JtTWF0Y2goKnZtLCByZWdFeHAsIHN0cmluZywgcywgZW5kKTsKICAgICB9CiAgICAgaWYgKGxp
c3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIGlmIHRoZXJlIGFyZSBubyBtYXRjaGVzIGF0IGFs
bCwgaXQncyBpbXBvcnRhbnQgdG8gcmV0dXJuCkBAIC04NjksNyArODY5LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjKTsKICAgICBKU1N0cmluZyogc3RyaW5nID0gdGhpc1ZhbHVlLnRvU3RyaW5n
KGV4ZWMpOwogICAgIFN0cmluZyBzID0gc3RyaW5nLT52YWx1ZShleGVjKTsKLSAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogCkBAIC04
ODMsMTIgKzg4MywxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
CiAgICAgICAgICAqICByZXBsYWNlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24g
bmV3IFJlZ0V4cChyZWdleHApLgogICAgICAgICAgKiAgUGVyIEVDTUEgMTUuMTAuNC4xLCBpZiBh
MCBpcyB1bmRlZmluZWQgc3Vic3RpdHV0ZSB0aGUgZW1wdHkgc3RyaW5nLgogICAgICAgICAgKi8K
LSAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhMC5pc1Vu
ZGVmaW5lZCgpID8gU3RyaW5nKCIiKSA6IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwg
Tm9GbGFncyk7CisgICAgICAgIHJlZyA9IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMtPnZtKCksIGEwLmlz
VW5kZWZpbmVkKCkgPyBTdHJpbmcoIiIpIDogYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
LCBOb0ZsYWdzKTsKICAgICAgICAgaWYgKCFyZWctPmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgcmVnLT5lcnJv
ck1lc3NhZ2UoKSkpOwogICAgIH0KICAgICBSZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhwQ29uc3Ry
dWN0b3IgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cENvbnN0cnVjdG9yKCk7
Ci0gICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRj
aCgqZ2xvYmFsRGF0YSwgcmVnLCBzdHJpbmcsIHMsIDApOworICAgIE1hdGNoUmVzdWx0IHJlc3Vs
dCA9IHJlZ0V4cENvbnN0cnVjdG9yLT5wZXJmb3JtTWF0Y2goKnZtLCByZWcsIHN0cmluZywgcywg
MCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQgPyBqc051bWJlcihyZXN1bHQu
c3RhcnQpIDoganNOdW1iZXIoLTEpKTsKIH0KIApAQCAtOTc4LDcgKzk3OCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAvLyAgICBvdGhlcndpc2UgbGV0
IFIgPSBUb1N0cmluZyhzZXBhcmF0b3IpLgogICAgIEpTVmFsdWUgc2VwYXJhdG9yVmFsdWUgPSBl
eGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoc2VwYXJhdG9yVmFsdWUuaW5oZXJpdHMoJlJlZ0V4
cE9iamVjdDo6c19pbmZvKSkgewotICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAm
ZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICAg
ICAgUmVnRXhwKiByZWcgPSBhc1JlZ0V4cE9iamVjdChzZXBhcmF0b3JWYWx1ZSktPnJlZ0V4cCgp
OwogCiAgICAgICAgIC8vIDkuIElmIGxpbSA9PSAwLCByZXR1cm4gQS4KQEAgLTEwMDEsNyArMTAw
MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAg
ICAgIC8vIGMuIENhbGwgdGhlIFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qg
b2YgQSB3aXRoIGFyZ3VtZW50cyAiMCIsCiAgICAgICAgICAgICAvLyAgICBQcm9wZXJ0eSBEZXNj
cmlwdG9yIHtbW1ZhbHVlXV06IFMsIFtbV3JpdGFibGVdXTogdHJ1ZSwgW1tFbnVtZXJhYmxlXV06
IHRydWUsIFtbQ29uZmlndXJhYmxlXV06IHRydWV9LCBhbmQgZmFsc2UuCiAgICAgICAgICAgICAv
LyBkLiBSZXR1cm4gQS4KLSAgICAgICAgICAgIGlmICghcmVnLT5tYXRjaCgqZ2xvYmFsRGF0YSwg
aW5wdXQsIDApKQorICAgICAgICAgICAgaWYgKCFyZWctPm1hdGNoKCp2bSwgaW5wdXQsIDApKQog
ICAgICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgMCwganNTdHJpbmdX
aXRoUmV1c2UoZXhlYywgdGhpc1ZhbHVlLCBpbnB1dCkpOwogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgICAgICB9CkBAIC0xMDEyLDcgKzEwMTIsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIHdoaWxlICht
YXRjaFBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkpIHsKICAgICAgICAgICAgIC8vIGEuIENhbGwg
U3BsaXRNYXRjaChTLCBxLCBSKSBhbmQgbGV0IHogYmUgaXRzIE1hdGNoUmVzdWx0IHJlc3VsdC4K
ICAgICAgICAgICAgIFZlY3RvcjxpbnQsIDMyPiBvdmVjdG9yOwotICAgICAgICAgICAgaW50IG1w
b3MgPSByZWctPm1hdGNoKCpnbG9iYWxEYXRhLCBpbnB1dCwgbWF0Y2hQb3NpdGlvbiwgb3ZlY3Rv
cik7CisgICAgICAgICAgICBpbnQgbXBvcyA9IHJlZy0+bWF0Y2goKnZtLCBpbnB1dCwgbWF0Y2hQ
b3NpdGlvbiwgb3ZlY3Rvcik7CiAgICAgICAgICAgICAvLyBiLiBJZiB6IGlzIGZhaWx1cmUsIHRo
ZW4gbGV0IHEgPSBxICsgMS4KICAgICAgICAgICAgIGlmIChtcG9zIDwgMCkKICAgICAgICAgICAg
ICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1By
b3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cmluZ1Byb3RvdHlwZS5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOSArMzYs
OSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgU3RyaW5nUHJvdG90eXBlKiBj
cmVhdGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAotICAgICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAg
ICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1JlY3Vyc2lvbkNoZWNr
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdS
ZWN1cnNpb25DaGVja2VyLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cmluZ1JlY3Vyc2lvbkNoZWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NTIsNyArNTIsNyBAQCBpbmxpbmUgSlNWYWx1ZSBTdHJpbmdSZWN1cnNpb25DaGVja2VyOjpwCiAg
ICAgY29uc3QgU3RhY2tCb3VuZHMmIG5hdGl2ZVN0YWNrID0gd3RmVGhyZWFkRGF0YSgpLnN0YWNr
KCk7CiAgICAgaWYgKCFuYXRpdmVTdGFjay5pc1NhZmVUb1JlY3Vyc2UoKSkKICAgICAgICAgcmV0
dXJuIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKCk7Ci0gICAgYm9vbCBhbHJlYWR5VmlzaXRlZCA9
ICFtX2V4ZWMtPmdsb2JhbERhdGEoKS5zdHJpbmdSZWN1cnNpb25DaGVja1Zpc2l0ZWRPYmplY3Rz
LmFkZChtX3RoaXNPYmplY3QpLmlzTmV3RW50cnk7CisgICAgYm9vbCBhbHJlYWR5VmlzaXRlZCA9
ICFtX2V4ZWMtPnZtKCkuc3RyaW5nUmVjdXJzaW9uQ2hlY2tWaXNpdGVkT2JqZWN0cy5hZGQobV90
aGlzT2JqZWN0KS5pc05ld0VudHJ5OwogICAgIGlmIChhbHJlYWR5VmlzaXRlZCkKICAgICAgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7IC8vIFJldHVybiBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgaW5m
aW5pdGUgcmVjdXJzaW9uLgogICAgIHJldHVybiBKU1ZhbHVlKCk7IC8vIEluZGljYXRlIHN1Y2Nl
c3MuCkBAIC03NCw4ICs3NCw4IEBAIGlubGluZSBTdHJpbmdSZWN1cnNpb25DaGVja2VyOjp+U3Ry
aW5nUmUKIHsKICAgICBpZiAobV9lYXJseVJldHVyblZhbHVlKQogICAgICAgICByZXR1cm47Ci0g
ICAgQVNTRVJUKG1fZXhlYy0+Z2xvYmFsRGF0YSgpLnN0cmluZ1JlY3Vyc2lvbkNoZWNrVmlzaXRl
ZE9iamVjdHMuY29udGFpbnMobV90aGlzT2JqZWN0KSk7Ci0gICAgbV9leGVjLT5nbG9iYWxEYXRh
KCkuc3RyaW5nUmVjdXJzaW9uQ2hlY2tWaXNpdGVkT2JqZWN0cy5yZW1vdmUobV90aGlzT2JqZWN0
KTsKKyAgICBBU1NFUlQobV9leGVjLT52bSgpLnN0cmluZ1JlY3Vyc2lvbkNoZWNrVmlzaXRlZE9i
amVjdHMuY29udGFpbnMobV90aGlzT2JqZWN0KSk7CisgICAgbV9leGVjLT52bSgpLnN0cmluZ1Jl
Y3Vyc2lvbkNoZWNrVmlzaXRlZE9iamVjdHMucmVtb3ZlKG1fdGhpc09iamVjdCk7CiB9CiAKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2
aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsMjEgKzgxLDIxIEBAIGlubGluZSBTdHJ1Y3R1cmUq
IFN0cnVjdHVyZVRyYW5zaXRpb25UYWIKICAgICByZXR1cm4gbWFwKCktPmdldChtYWtlX3BhaXIo
cmVwLCBhdHRyaWJ1dGVzKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0cnVjdHVyZVRyYW5zaXRpb25U
YWJsZTo6YWRkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmFkZChWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogewogICAgIGlmIChpc1VzaW5nU2luZ2xlU2xvdCgpKSB7CiAgICAg
ICAgIFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uID0gc2luZ2xlVHJhbnNpdGlvbigpOwog
CiAgICAgICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgZmlyc3QgdHJhbnNpdGlvbiBiZWluZyBhZGRl
ZC4KICAgICAgICAgaWYgKCFleGlzdGluZ1RyYW5zaXRpb24pIHsKLSAgICAgICAgICAgIHNldFNp
bmdsZVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIHNldFNp
bmdsZVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAogICAgICAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIHNlY29uZCB0cmFuc2l0aW9uIGJl
aW5nIGFkZGVkCiAgICAgICAgIC8vIChvciB0aGUgZmlyc3QgdHJhbnNpdGlvbiBiZWluZyBkZXNw
ZWNpZmllZCEpCiAgICAgICAgIHNldE1hcChuZXcgVHJhbnNpdGlvbk1hcCgpKTsKLSAgICAgICAg
YWRkKGdsb2JhbERhdGEsIGV4aXN0aW5nVHJhbnNpdGlvbik7CisgICAgICAgIGFkZCh2bSwgZXhp
c3RpbmdUcmFuc2l0aW9uKTsKICAgICB9CiAKICAgICAvLyBBZGQgdGhlIHN0cnVjdHVyZSB0byB0
aGUgbWFwLgpAQCAtMTUxLDEwICsxNTEsMTAgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0
aWNzKCkKICNlbmRpZgogfQogCi1TdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
LCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBJ
bmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSkKLSAgICA6
IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkK
LSAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCwgV3Jp
dGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0Pjo6TWF5QmVOdWxsKQotICAgICwgbV9wcm90b3R5cGUo
Z2xvYmFsRGF0YSwgdGhpcywgcHJvdG90eXBlKQorU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3Qg
VHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgSW5kZXhpbmdU
eXBlIGluZGV4aW5nVHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpCisgICAgOiBKU0NlbGwo
dm0sIHZtLnN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1fZ2xvYmFsT2JqZWN0KHZt
LCB0aGlzLCBnbG9iYWxPYmplY3QsIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD46Ok1heUJl
TnVsbCkKKyAgICAsIG1fcHJvdG90eXBlKHZtLCB0aGlzLCBwcm90b3R5cGUpCiAgICAgLCBtX2Ns
YXNzSW5mbyhjbGFzc0luZm8pCiAgICAgLCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0KEluaXRp
YWxpemVkV2F0Y2hpbmcpCiAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQpAQCAtMTc5LDkg
KzE3OSw5IEBAIFN0cnVjdHVyZTo6U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmEKIAogY29u
c3QgQ2xhc3NJbmZvIFN0cnVjdHVyZTo6c19pbmZvID0geyAiU3RydWN0dXJlIiwgMCwgMCwgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShTdHJ1Y3R1cmUpIH07CiAKLVN0cnVjdHVyZTo6U3RydWN0dXJl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK1N0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSkK
ICAgICA6IEpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2VsbCkKLSAgICAsIG1fcHJvdG90eXBlKGdsb2Jh
bERhdGEsIHRoaXMsIGpzTnVsbCgpKQorICAgICwgbV9wcm90b3R5cGUodm0sIHRoaXMsIGpzTnVs
bCgpKQogICAgICwgbV9jbGFzc0luZm8oJnNfaW5mbykKICAgICAsIG1fdHJhbnNpdGlvbldhdGNo
cG9pbnRTZXQoSW5pdGlhbGl6ZWRXYXRjaGluZykKICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZz
ZXQpCkBAIC0yMDEsOSArMjAxLDkgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRh
JiBnbG9iYQogewogfQogCi1TdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIGNvbnN0IFN0cnVjdHVyZSogcHJldmlvdXMpCi0gICAgOiBKU0NlbGwoZ2xvYmFsRGF0
YSwgZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgLCBtX3Byb3RvdHlw
ZShnbG9iYWxEYXRhLCB0aGlzLCBwcmV2aW91cy0+c3RvcmVkUHJvdG90eXBlKCkpCitTdHJ1Y3R1
cmU6OlN0cnVjdHVyZShWTSYgdm0sIGNvbnN0IFN0cnVjdHVyZSogcHJldmlvdXMpCisgICAgOiBK
U0NlbGwodm0sIHZtLnN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1fcHJvdG90eXBl
KHZtLCB0aGlzLCBwcmV2aW91cy0+c3RvcmVkUHJvdG90eXBlKCkpCiAgICAgLCBtX2NsYXNzSW5m
byhwcmV2aW91cy0+bV9jbGFzc0luZm8pCiAgICAgLCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0
KEluaXRpYWxpemVkV2F0Y2hpbmcpCiAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQpAQCAt
MjIyLDEzICsyMjIsMTMgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9i
YQogICAgICwgbV9zdGF0aWNGdW5jdGlvblJlaWZpZWQocHJldmlvdXMtPm1fc3RhdGljRnVuY3Rp
b25SZWlmaWVkKQogewogICAgIGlmIChwcmV2aW91cy0+dHlwZUluZm8oKS5zdHJ1Y3R1cmVIYXNS
YXJlRGF0YSgpICYmIHByZXZpb3VzLT5yYXJlRGF0YSgpLT5uZWVkc0Nsb25pbmcoKSkKLSAgICAg
ICAgY2xvbmVSYXJlRGF0YUZyb20oZ2xvYmFsRGF0YSwgcHJldmlvdXMpOworICAgICAgICBjbG9u
ZVJhcmVEYXRhRnJvbSh2bSwgcHJldmlvdXMpOwogICAgIGVsc2UgaWYgKHByZXZpb3VzLT5wcmV2
aW91c0lEKCkpCi0gICAgICAgIG1fcHJldmlvdXNPclJhcmVEYXRhLnNldChnbG9iYWxEYXRhLCB0
aGlzLCBwcmV2aW91cy0+cHJldmlvdXNJRCgpKTsKKyAgICAgICAgbV9wcmV2aW91c09yUmFyZURh
dGEuc2V0KHZtLCB0aGlzLCBwcmV2aW91cy0+cHJldmlvdXNJRCgpKTsKIAogICAgIHByZXZpb3Vz
LT5ub3RpZnlUcmFuc2l0aW9uRnJvbVRoaXNTdHJ1Y3R1cmUoKTsKICAgICBpZiAocHJldmlvdXMt
Pm1fZ2xvYmFsT2JqZWN0KQotICAgICAgICBtX2dsb2JhbE9iamVjdC5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgcHJldmlvdXMtPm1fZ2xvYmFsT2JqZWN0LmdldCgpKTsKKyAgICAgICAgbV9nbG9iYWxP
YmplY3Quc2V0KHZtLCB0aGlzLCBwcmV2aW91cy0+bV9nbG9iYWxPYmplY3QuZ2V0KCkpOwogfQog
CiB2b2lkIFN0cnVjdHVyZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC0yMzYsNyArMjM2LDcg
QEAgdm9pZCBTdHJ1Y3R1cmU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogICAgIHN0YXRpY19jYXN0
PFN0cnVjdHVyZSo+KGNlbGwpLT5TdHJ1Y3R1cmU6On5TdHJ1Y3R1cmUoKTsKIH0KIAotdm9pZCBT
dHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KQordm9pZCBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXAoVk0mIHZtKQogewogICAg
IEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7CiAgICAgQVNTRVJU
KCFwcm9wZXJ0eVRhYmxlKCkpOwpAQCAtMjUyLDcgKzI1Miw3IEBAIHZvaWQgU3RydWN0dXJlOjpt
YXRlcmlhbGl6ZVByb3BlcnR5TWFwKEoKICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnBy
b3BlcnR5VGFibGUoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+cHJldmlvdXNJ
RCgpKTsKIAotICAgICAgICAgICAgcHJvcGVydHlUYWJsZSgpLnNldChnbG9iYWxEYXRhLCB0aGlz
LCBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGUoKS0+Y29weShnbG9iYWxEYXRhLCAwLCBudW1iZXJP
ZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpKTsKKyAgICAg
ICAgICAgIHByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRoaXMsIHN0cnVjdHVyZS0+cHJvcGVydHlU
YWJsZSgpLT5jb3B5KHZtLCAwLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwg
bV9pbmxpbmVDYXBhY2l0eSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAg
LTI2MCwxMyArMjYwLDEzIEBAIHZvaWQgU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFw
KEoKICAgICB9CiAKICAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgY3JlYXRlUHJv
cGVydHlNYXAoZ2xvYmFsRGF0YSwgbnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQs
IG1faW5saW5lQ2FwYWNpdHkpKTsKKyAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAodm0sIG51bWJl
ck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CiAKICAg
ICBmb3IgKHB0cmRpZmZfdCBpID0gc3RydWN0dXJlcy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkg
ewogICAgICAgICBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVzW2ldOwogICAgICAgICBpZiAoIXN0cnVj
dHVyZS0+bV9uYW1lSW5QcmV2aW91cykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBQ
cm9wZXJ0eU1hcEVudHJ5IGVudHJ5KGdsb2JhbERhdGEsIHRoaXMsIHN0cnVjdHVyZS0+bV9uYW1l
SW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5tX29mZnNldCwgc3RydWN0dXJlLT5tX2F0dHJp
YnV0ZXNJblByZXZpb3VzLCBzdHJ1Y3R1cmUtPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMuZ2V0
KCkpOworICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5KHZtLCB0aGlzLCBzdHJ1Y3R1cmUt
Pm1fbmFtZUluUHJldmlvdXMuZ2V0KCksIHN0cnVjdHVyZS0+bV9vZmZzZXQsIHN0cnVjdHVyZS0+
bV9hdHRyaWJ1dGVzSW5QcmV2aW91cywgc3RydWN0dXJlLT5tX3NwZWNpZmljVmFsdWVJblByZXZp
b3VzLmdldCgpKTsKICAgICAgICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoZW50cnksIG1fb2Zmc2V0
LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE11c3ROb3RDaGFuZ2UpOwogICAgIH0KICAg
ICAKQEAgLTI4NSwxMSArMjg1LDExIEBAIHNpemVfdCBTdHJ1Y3R1cmU6OnN1Z2dlc3RlZE5ld091
dE9mTGluZVMKICAgICByZXR1cm4gbmV4dE91dE9mTGluZVN0b3JhZ2VDYXBhY2l0eShvdXRPZkxp
bmVDYXBhY2l0eSgpKTsKIH0KICAKLXZvaWQgU3RydWN0dXJlOjpkZXNwZWNpZnlEaWN0aW9uYXJ5
RnVuY3Rpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKQordm9pZCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeURpY3Rpb25hcnlGdW5jdGlvbihWTSYgdm0s
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgU3RyaW5nSW1wbCogcmVwID0gcHJv
cGVydHlOYW1lLnVpZCgpOwogCi0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5
KGdsb2JhbERhdGEpOworICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSk7
CiAKICAgICBBU1NFUlQoaXNEaWN0aW9uYXJ5KCkpOwogICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxl
KCkpOwpAQCAtMzQ0LDcgKzM0NCw3IEBAIE5vblByb3BlcnR5VHJhbnNpdGlvbiBTdHJ1Y3R1cmU6
OnN1Z2dlc3QKICAgICByZXR1cm4gQWxsb2NhdGVBcnJheVN0b3JhZ2U7CiB9CiAKLVN0cnVjdHVy
ZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5z
aWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYg
b2Zmc2V0KQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbihWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3BlcnR5T2Zmc2V0JiBv
ZmZzZXQpCiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBhIHNwZWNpZmljIGZ1bmN0aW9uLCB3ZSBtYXkg
aGF2ZSBnb3QgdG8gdGhpcyBwb2ludCBpZiB0aGVyZSBpcwogICAgIC8vIGFscmVhZHkgYSB0cmFu
c2l0aW9uIHdpdGggdGhlIGNvcnJlY3QgcHJvcGVydHkgbmFtZSBhbmQgYXR0cmlidXRlcywgYnV0
CkBAIC0zNjQsMzYgKzM2NCwzNiBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlU
cmFuc2l0CiAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwogCiAgICAgaWYgKHN0cnVjdHVyZS0+
dHJhbnNpdGlvbkNvdW50KCkgPiBzX21heFRyYW5zaXRpb25MZW5ndGgpIHsKLSAgICAgICAgU3Ry
dWN0dXJlKiB0cmFuc2l0aW9uID0gdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUpOworICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSB0b0Nh
Y2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUpOwogICAgICAgICBBU1NF
UlQoc3RydWN0dXJlICE9IHRyYW5zaXRpb24pOwotICAgICAgICBvZmZzZXQgPSB0cmFuc2l0aW9u
LT5wdXRTcGVjaWZpY1ZhbHVlKGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywg
c3BlY2lmaWNWYWx1ZSk7CisgICAgICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPnB1dFNwZWNpZmlj
VmFsdWUodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CiAgICAg
ICAgIHJldHVybiB0cmFuc2l0aW9uOwogICAgIH0KICAgICAKLSAgICBTdHJ1Y3R1cmUqIHRyYW5z
aXRpb24gPSBjcmVhdGUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIHRy
YW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAKLSAgICB0cmFuc2l0aW9uLT5tX2Nh
Y2hlZFByb3RvdHlwZUNoYWluLnNldE1heUJlTnVsbChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBz
dHJ1Y3R1cmUtPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uZ2V0KCkpOwotICAgIHRyYW5zaXRpb24t
PnNldFByZXZpb3VzSUQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlKTsKKyAgICB0
cmFuc2l0aW9uLT5tX2NhY2hlZFByb3RvdHlwZUNoYWluLnNldE1heUJlTnVsbCh2bSwgdHJhbnNp
dGlvbiwgc3RydWN0dXJlLT5tX2NhY2hlZFByb3RvdHlwZUNoYWluLmdldCgpKTsKKyAgICB0cmFu
c2l0aW9uLT5zZXRQcmV2aW91c0lEKHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUpOwogICAgIHRy
YW5zaXRpb24tPm1fbmFtZUluUHJldmlvdXMgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CiAgICAgdHJh
bnNpdGlvbi0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA9IGF0dHJpYnV0ZXM7Ci0gICAgdHJhbnNp
dGlvbi0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cy5zZXRNYXlCZU51bGwoZ2xvYmFsRGF0YSwg
dHJhbnNpdGlvbiwgc3BlY2lmaWNWYWx1ZSk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJs
ZSgpLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRh
YmxlT3JDbG9uZUlmUGlubmVkKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pKTsKKyAgICB0cmFuc2l0
aW9uLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzLnNldE1heUJlTnVsbCh2bSwgdHJhbnNpdGlv
biwgc3BlY2lmaWNWYWx1ZSk7CisgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2
bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5l
ZCh2bSwgdHJhbnNpdGlvbikpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJl
LT5tX29mZnNldDsKIAotICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPnB1dFNwZWNpZmljVmFsdWUo
Z2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAg
ICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5wdXRTcGVjaWZpY1ZhbHVlKHZtLCBwcm9wZXJ0eU5hbWUs
IGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOwogCiAgICAgY2hlY2tPZmZzZXQodHJhbnNpdGlv
bi0+bV9vZmZzZXQsIHRyYW5zaXRpb24tPmlubGluZUNhcGFjaXR5KCkpOwotICAgIHN0cnVjdHVy
ZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pOworICAgIHN0
cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKHZtLCB0cmFuc2l0aW9uKTsKICAgICB0cmFu
c2l0aW9uLT5jaGVja09mZnNldENvbnNpc3RlbmN5KCk7CiAgICAgc3RydWN0dXJlLT5jaGVja09m
ZnNldENvbnNpc3RlbmN5KCk7CiAgICAgcmV0dXJuIHRyYW5zaXRpb247CiB9CiAKLVN0cnVjdHVy
ZSogU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlPZmZzZXQmIG9mZnNldCkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjpyZW1vdmVQcm9w
ZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKIHsKICAgICBBU1NFUlQoIXN0
cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CiAKLSAgICBTdHJ1Y3R1cmUqIHRy
YW5zaXRpb24gPSB0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwg
c3RydWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSB0b1VuY2FjaGVhYmxlRGlj
dGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSk7CiAKICAgICBvZmZzZXQgPSB0cmFuc2l0
aW9uLT5yZW1vdmUocHJvcGVydHlOYW1lKTsKIApAQCAtNDAxLDE0ICs0MDEsMTQgQEAgU3RydWN0
dXJlKiBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbgogICAgIHJldHVybiB0cmFuc2l0aW9u
OwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1ZhbHVlIHBy
b3RvdHlwZSkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9u
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTVmFsdWUgcHJvdG90eXBlKQogewotICAg
IFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwor
ICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKIAotICAg
IHRyYW5zaXRpb24tPm1fcHJvdG90eXBlLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBwcm90
b3R5cGUpOworICAgIHRyYW5zaXRpb24tPm1fcHJvdG90eXBlLnNldCh2bSwgdHJhbnNpdGlvbiwg
cHJvdG90eXBlKTsKIAotICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVj
ZXNzYXJ5KGdsb2JhbERhdGEpOwotICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQo
Z2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBp
bm5pbmcoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbikpOworICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxp
emVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtKTsKKyAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRh
YmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9y
UGlubmluZyh2bSwgdHJhbnNpdGlvbikpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5tX29mZnNldDsKICAgICB0cmFuc2l0aW9uLT5waW4oKTsKIApAQCAtNDE2LDIyICs0
MTYsMjIgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYQogICAgIHJl
dHVybiB0cmFuc2l0aW9uOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVu
Y3Rpb25UcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFByb3BlcnR5TmFtZSByZXBsYWNlRnVuY3Rpb24pCitTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFByb3BlcnR5TmFtZSByZXBsYWNlRnVuY3Rpb24pCiB7CiAgICAgQVNTRVJUKHN0cnVjdHVy
ZS0+bV9zcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQgPCBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhy
YXNoQ291bnQpOwotICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZShnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUpOworICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3Ry
dWN0dXJlKTsKIAogICAgICsrdHJhbnNpdGlvbi0+bV9zcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291
bnQ7CiAKLSAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShn
bG9iYWxEYXRhKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KGdsb2JhbERh
dGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKGds
b2JhbERhdGEsIHRyYW5zaXRpb24pKTsKKyAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVy
dHlNYXBJZk5lY2Vzc2FyeSh2bSk7CisgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNl
dCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmco
dm0sIHRyYW5zaXRpb24pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+
bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+cGluKCk7CiAKICAgICBpZiAodHJhbnNpdGlvbi0+
bV9zcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQgPT0gbWF4U3BlY2lmaWNGdW5jdGlvblRocmFz
aENvdW50KQotICAgICAgICB0cmFuc2l0aW9uLT5kZXNwZWNpZnlBbGxGdW5jdGlvbnMoZ2xvYmFs
RGF0YSk7CisgICAgICAgIHRyYW5zaXRpb24tPmRlc3BlY2lmeUFsbEZ1bmN0aW9ucyh2bSk7CiAg
ICAgZWxzZSB7Ci0gICAgICAgIGJvb2wgcmVtb3ZlZCA9IHRyYW5zaXRpb24tPmRlc3BlY2lmeUZ1
bmN0aW9uKGdsb2JhbERhdGEsIHJlcGxhY2VGdW5jdGlvbik7CisgICAgICAgIGJvb2wgcmVtb3Zl
ZCA9IHRyYW5zaXRpb24tPmRlc3BlY2lmeUZ1bmN0aW9uKHZtLCByZXBsYWNlRnVuY3Rpb24pOwog
ICAgICAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwogICAgIH0KIApAQCAtNDM5
LDEzICs0MzksMTMgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uVAog
ICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YXR0cmli
dXRlQ2hhbmdlVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
KQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24oVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWdu
ZWQgYXR0cmlidXRlcykKIHsKICAgICBpZiAoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rp
b25hcnkoKSkgewotICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKTsKKyAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRl
KHZtLCBzdHJ1Y3R1cmUpOwogCi0gICAgICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0
eU1hcElmTmVjZXNzYXJ5KGdsb2JhbERhdGEpOwotICAgICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0
eVRhYmxlKCkuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3Bl
cnR5VGFibGVGb3JQaW5uaW5nKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pKTsKKyAgICAgICAgc3Ry
dWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0pOworICAgICAgICB0
cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUt
PmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSwgdHJhbnNpdGlvbikpOwogICAgICAgICB0
cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgICAgIHRyYW5z
aXRpb24tPnBpbigpOwogICAgICAgICAKQEAgLTQ2MSwxNCArNDYxLDE0IEBAIFN0cnVjdHVyZSog
U3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmEKICAgICByZXR1cm4gc3RydWN0dXJlOwogfQog
Ci1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBEaWN0aW9uYXJ5S2luZCBraW5k
KQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGljdGlvbmFyeUtpbmQga2luZCkKIHsKICAgICBBU1NFUlQo
IXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CiAgICAgCi0gICAgU3RydWN0
dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CisgICAgU3Ry
dWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogCi0gICAgc3RydWN0
dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAg
dHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBz
dHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0
aW9uKSk7CisgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnko
dm0pOworICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24s
IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtLCB0cmFuc2l0aW9uKSk7
CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRy
YW5zaXRpb24tPm1fZGljdGlvbmFyeUtpbmQgPSBraW5kOwogICAgIHRyYW5zaXRpb24tPnBpbigp
OwpAQCAtNDc3LDIwICs0NzcsMjAgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFy
eVRyYW5zaQogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvQ2FjaGVh
YmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsK
LSAgICByZXR1cm4gdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUs
IENhY2hlZERpY3Rpb25hcnlLaW5kKTsKKyAgICByZXR1cm4gdG9EaWN0aW9uYXJ5VHJhbnNpdGlv
bih2bSwgc3RydWN0dXJlLCBDYWNoZWREaWN0aW9uYXJ5S2luZCk7CiB9CiAKLVN0cnVjdHVyZSog
U3RydWN0dXJlOjp0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK1N0cnVjdHVyZSogU3RydWN0dXJl
Ojp0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKIHsKLSAgICByZXR1cm4gdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUsIFVuY2FjaGVkRGljdGlvbmFyeUtpbmQpOworICAgIHJldHVybiB0b0RpY3Rp
b25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIFVuY2FjaGVkRGljdGlvbmFyeUtpbmQpOwog
fQogCiAvLyBJbiBmdXR1cmUgd2UgbWF5IHdhbnQgdG8gY2FjaGUgdGhpcyB0cmFuc2l0aW9uLgot
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnNlYWxUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6c2VhbFRy
YW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBTdHJ1Y3R1cmUq
IHRyYW5zaXRpb24gPSBwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBwcmV2ZW50RXh0ZW5zaW9uc1Ry
YW5zaXRpb24odm0sIHN0cnVjdHVyZSk7CiAKICAgICBpZiAodHJhbnNpdGlvbi0+cHJvcGVydHlU
YWJsZSgpKSB7CiAgICAgICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRyYW5zaXRp
b24tPnByb3BlcnR5VGFibGUoKS0+ZW5kKCk7CkBAIC01MDMsOSArNTAzLDkgQEAgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OnNlYWxUcmFuc2l0aW9uKEpTRwogfQogCiAvLyBJbiBmdXR1cmUgd2UgbWF5
IHdhbnQgdG8gY2FjaGUgdGhpcyB0cmFuc2l0aW9uLgotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZy
ZWV6ZVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjpmcmVlemVUcmFuc2l0aW9uKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gcHJldmVu
dEV4dGVuc2lvbnNUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CisgICAgU3RydWN0
dXJlKiB0cmFuc2l0aW9uID0gcHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1
cmUpOwogCiAgICAgaWYgKHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKSkgewogICAgICAgICBQ
cm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgp
LT5iZWdpbigpOwpAQCAtNTIxLDE0ICs1MjEsMTQgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZy
ZWV6ZVRyYW5zaXRpb24oSgogfQogCiAvLyBJbiBmdXR1cmUgd2UgbWF5IHdhbnQgdG8gY2FjaGUg
dGhpcyB0cmFuc2l0aW9uLgotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25z
VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbihWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9
IGNyZWF0ZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOworICAgIFN0cnVjdHVyZSogdHJhbnNpdGlv
biA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKIAogICAgIC8vIERvbid0IHNldCBtX29mZnNldCwg
YXMgb25lIGNhbiBub3QgdHJhbnNpdGlvbiB0byB0aGlzLgogCi0gICAgc3RydWN0dXJlLT5tYXRl
cmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgdHJhbnNpdGlv
bi0+cHJvcGVydHlUYWJsZSgpLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUt
PmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKSk7Cisg
ICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0pOworICAg
IHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVy
ZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtLCB0cmFuc2l0aW9uKSk7CiAgICAgdHJh
bnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24t
Pm1fcHJldmVudEV4dGVuc2lvbnMgPSB0cnVlOwogICAgIHRyYW5zaXRpb24tPnBpbigpOwpAQCAt
NTM3LDE3ICs1MzcsMTcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25z
VAogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCi1Qcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6
OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBvd25lcikKK1Byb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6dGFrZVByb3Bl
cnR5VGFibGVPckNsb25lSWZQaW5uZWQoVk0mIHZtLCBTdHJ1Y3R1cmUqIG93bmVyKQogewotICAg
IG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcoZ2xvYmFsRGF0YSk7
CisgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmluZyh2bSk7CiAg
ICAgaWYgKG1faXNQaW5uZWRQcm9wZXJ0eVRhYmxlKQotICAgICAgICByZXR1cm4gcHJvcGVydHlU
YWJsZSgpLT5jb3B5KGdsb2JhbERhdGEsIG93bmVyLCBwcm9wZXJ0eVRhYmxlKCktPnNpemUoKSAr
IDEpOworICAgICAgICByZXR1cm4gcHJvcGVydHlUYWJsZSgpLT5jb3B5KHZtLCBvd25lciwgcHJv
cGVydHlUYWJsZSgpLT5zaXplKCkgKyAxKTsKICAgICBQcm9wZXJ0eVRhYmxlKiB0YWtlblByb3Bl
cnR5VGFibGUgPSBwcm9wZXJ0eVRhYmxlKCkuZ2V0KCk7CiAgICAgcHJvcGVydHlUYWJsZSgpLmNs
ZWFyKCk7CiAgICAgcmV0dXJuIHRha2VuUHJvcGVydHlUYWJsZTsKIH0KIAotU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbktp
bmQpCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uS2lu
ZCkKIHsKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gdG9BdHRyaWJ1dGVzKHRyYW5zaXRpb25L
aW5kKTsKICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gbmV3SW5kZXhpbmdUeXBlKHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpLCB0cmFuc2l0aW9uS2luZCk7
CkBAIC01NjgsMjYgKzU2OCwyNiBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlU
cmFuc2l0CiAgICAgICAgIHJldHVybiBleGlzdGluZ1RyYW5zaXRpb247CiAgICAgfQogICAgIAot
ICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUp
OwotICAgIHRyYW5zaXRpb24tPnNldFByZXZpb3VzSUQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwg
c3RydWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVj
dHVyZSk7CisgICAgdHJhbnNpdGlvbi0+c2V0UHJldmlvdXNJRCh2bSwgdHJhbnNpdGlvbiwgc3Ry
dWN0dXJlKTsKICAgICB0cmFuc2l0aW9uLT5tX2F0dHJpYnV0ZXNJblByZXZpb3VzID0gYXR0cmli
dXRlczsKICAgICB0cmFuc2l0aW9uLT5tX2luZGV4aW5nVHlwZSA9IGluZGV4aW5nVHlwZTsKLSAg
ICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24s
IHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQoZ2xvYmFsRGF0YSwg
dHJhbnNpdGlvbikpOworICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRy
YW5zaXRpb24sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0s
IHRyYW5zaXRpb24pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9v
ZmZzZXQ7CiAgICAgY2hlY2tPZmZzZXQodHJhbnNpdGlvbi0+bV9vZmZzZXQsIHRyYW5zaXRpb24t
PmlubGluZUNhcGFjaXR5KCkpOwogICAgIAotICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFi
bGUuYWRkKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pOworICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0
aW9uVGFibGUuYWRkKHZtLCB0cmFuc2l0aW9uKTsKICAgICB0cmFuc2l0aW9uLT5jaGVja09mZnNl
dENvbnNpc3RlbmN5KCk7CiAgICAgcmV0dXJuIHRyYW5zaXRpb247CiB9CiAKIC8vIEluIGZ1dHVy
ZSB3ZSBtYXkgd2FudCB0byBjYWNoZSB0aGlzIHByb3BlcnR5LgotYm9vbCBTdHJ1Y3R1cmU6Omlz
U2VhbGVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK2Jvb2wgU3RydWN0dXJlOjppc1NlYWxl
ZChWTSYgdm0pCiB7CiAgICAgaWYgKGlzRXh0ZW5zaWJsZSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7
CisgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtKTsKICAgICBpZiAoIXBy
b3BlcnR5VGFibGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTYwMCwxMiArNjAwLDEy
IEBAIGJvb2wgU3RydWN0dXJlOjppc1NlYWxlZChKU0dsb2JhbERhdGEmIGcKIH0KIAogLy8gSW4g
ZnV0dXJlIHdlIG1heSB3YW50IHRvIGNhY2hlIHRoaXMgcHJvcGVydHkuCi1ib29sIFN0cnVjdHVy
ZTo6aXNGcm96ZW4oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorYm9vbCBTdHJ1Y3R1cmU6Omlz
RnJvemVuKFZNJiB2bSkKIHsKICAgICBpZiAoaXNFeHRlbnNpYmxlKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxE
YXRhKTsKKyAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0pOwogICAgIGlm
ICghcHJvcGVydHlUYWJsZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtNjE5LDcgKzYx
OSw3IEBAIGJvb2wgU3RydWN0dXJlOjppc0Zyb3plbihKU0dsb2JhbERhdGEmIGcKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5U3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNPYmplY3QqIG9iamVjdCkKK1N0cnVj
dHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShWTSYgdm0sIEpTT2Jq
ZWN0KiBvYmplY3QpCiB7CiAgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwogICAgIEFTU0VS
VChpc0RpY3Rpb25hcnkoKSk7CkBAIC02NDIsNyArNjQyLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5UwogICAgICAgICAKICAgICAgICAgLy8gQ29waWVzIGluIG91
ciB2YWx1ZXMgdG8gdGhlaXIgY29tcGFjdGVkIGxvY2F0aW9ucy4KICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7IGkrKykKLSAgICAgICAgICAgIG9iamVjdC0+
cHV0RGlyZWN0KGdsb2JhbERhdGEsIG9mZnNldEZvclByb3BlcnR5TnVtYmVyKGksIG1faW5saW5l
Q2FwYWNpdHkpLCB2YWx1ZXNbaV0pOworICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0s
IG9mZnNldEZvclByb3BlcnR5TnVtYmVyKGksIG1faW5saW5lQ2FwYWNpdHkpLCB2YWx1ZXNbaV0p
OwogCiAgICAgICAgIHByb3BlcnR5VGFibGUoKS0+Y2xlYXJEZWxldGVkT2Zmc2V0cygpOwogICAg
ICAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7CkBAIC02NTIsMjYgKzY1MiwyNiBAQCBTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTCiAgICAgcmV0dXJuIHRoaXM7CiB9
CiAKLVByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlv
bihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSkKK1Byb3BlcnR5T2Zmc2V0
IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNW
YWx1ZSkKIHsKICAgICBBU1NFUlQoIWVudW1lcmF0aW9uQ2FjaGUoKSk7CiAKICAgICBpZiAobV9z
cGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQgPT0gbWF4U3BlY2lmaWNGdW5jdGlvblRocmFzaENv
dW50KQogICAgICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKIAotICAgIG1hdGVyaWFsaXplUHJvcGVy
dHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcoZ2xvYmFsRGF0YSk7CisgICAgbWF0ZXJpYWxpemVQ
cm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmluZyh2bSk7CiAgICAgCiAgICAgcGluKCk7CiAK
LSAgICByZXR1cm4gcHV0U3BlY2lmaWNWYWx1ZShnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgIHJldHVybiBwdXRTcGVjaWZpY1ZhbHVlKHZt
LCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOwogfQogCi1Qcm9wZXJ0
eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorUHJvcGVydHlP
ZmZzZXQgU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBBU1NFUlQoaXNVbmNhY2hlYWJsZURp
Y3Rpb25hcnkoKSk7CiAgICAgQVNTRVJUKCFlbnVtZXJhdGlvbkNhY2hlKCkpOwogCi0gICAgbWF0
ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmluZyhnbG9iYWxEYXRhKTsKKyAg
ICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5nKHZtKTsKIAogICAg
IHBpbigpOwogICAgIHJldHVybiByZW1vdmUocHJvcGVydHlOYW1lKTsKQEAgLTY4NSwyMCArNjg1
LDIwIEBAIHZvaWQgU3RydWN0dXJlOjpwaW4oKQogICAgIG1fbmFtZUluUHJldmlvdXMuY2xlYXIo
KTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6OmFsbG9jYXRlUmFyZURhdGEoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQordm9pZCBTdHJ1Y3R1cmU6OmFsbG9jYXRlUmFyZURhdGEoVk0mIHZtKQogewog
ICAgIEFTU0VSVCghdHlwZUluZm8oKS5zdHJ1Y3R1cmVIYXNSYXJlRGF0YSgpKTsKLSAgICBTdHJ1
Y3R1cmVSYXJlRGF0YSogcmFyZURhdGEgPSBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIHByZXZpb3VzKCkpOworICAgIFN0cnVjdHVyZVJhcmVEYXRhKiByYXJlRGF0YSA9IFN0
cnVjdHVyZVJhcmVEYXRhOjpjcmVhdGUodm0sIHByZXZpb3VzKCkpOwogICAgIG1fdHlwZUluZm8g
PSBUeXBlSW5mbyh0eXBlSW5mbygpLnR5cGUoKSwgdHlwZUluZm8oKS5mbGFncygpIHwgU3RydWN0
dXJlSGFzUmFyZURhdGEpOwotICAgIG1fcHJldmlvdXNPclJhcmVEYXRhLnNldChnbG9iYWxEYXRh
LCB0aGlzLCByYXJlRGF0YSk7CisgICAgbV9wcmV2aW91c09yUmFyZURhdGEuc2V0KHZtLCB0aGlz
LCByYXJlRGF0YSk7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjpjbG9uZVJhcmVEYXRhRnJvbShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFN0cnVjdHVyZSogb3RoZXIpCit2b2lkIFN0cnVj
dHVyZTo6Y2xvbmVSYXJlRGF0YUZyb20oVk0mIHZtLCBjb25zdCBTdHJ1Y3R1cmUqIG90aGVyKQog
ewogICAgIEFTU0VSVChvdGhlci0+dHlwZUluZm8oKS5zdHJ1Y3R1cmVIYXNSYXJlRGF0YSgpKTsK
LSAgICBTdHJ1Y3R1cmVSYXJlRGF0YSogbmV3UmFyZURhdGEgPSBTdHJ1Y3R1cmVSYXJlRGF0YTo6
Y2xvbmUoZ2xvYmFsRGF0YSwgb3RoZXItPnJhcmVEYXRhKCkpOworICAgIFN0cnVjdHVyZVJhcmVE
YXRhKiBuZXdSYXJlRGF0YSA9IFN0cnVjdHVyZVJhcmVEYXRhOjpjbG9uZSh2bSwgb3RoZXItPnJh
cmVEYXRhKCkpOwogICAgIG1fdHlwZUluZm8gPSBUeXBlSW5mbyh0eXBlSW5mbygpLnR5cGUoKSwg
dHlwZUluZm8oKS5mbGFncygpIHwgU3RydWN0dXJlSGFzUmFyZURhdGEpOwotICAgIG1fcHJldmlv
dXNPclJhcmVEYXRhLnNldChnbG9iYWxEYXRhLCB0aGlzLCBuZXdSYXJlRGF0YSk7CisgICAgbV9w
cmV2aW91c09yUmFyZURhdGEuc2V0KHZtLCB0aGlzLCBuZXdSYXJlRGF0YSk7CiB9CiAKICNpZiBE
VU1QX1BST1BFUlRZTUFQX1NUQVRTCkBAIC03MjksMjUgKzcyOSwyNSBAQCBpbmxpbmUgdm9pZCBT
dHJ1Y3R1cmU6OmNoZWNrQ29uc2lzdGVuY3koCiAKICNlbmRpZgogCi1Qcm9wZXJ0eVRhYmxlKiBT
dHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3Ry
dWN0dXJlKiBvd25lcikKK1Byb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFi
bGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIG93bmVyKQogewogICAgIGlmICghcHJvcGVydHlUYWJsZSgp
KQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUoZ2xv
YmFsRGF0YSwgb3duZXIsICpwcm9wZXJ0eVRhYmxlKCkuZ2V0KCkpOworICAgIHJldHVybiBQcm9w
ZXJ0eVRhYmxlOjpjbG9uZSh2bSwgb3duZXIsICpwcm9wZXJ0eVRhYmxlKCkuZ2V0KCkpOwogfQog
Ci1Qcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogb3duZXIpCitQcm9wZXJ0eVRhYmxl
KiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhWTSYgdm0sIFN0cnVjdHVy
ZSogb3duZXIpCiB7CiAgICAgaWYgKHByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJuIFBy
b3BlcnR5VGFibGU6OmNsb25lKGdsb2JhbERhdGEsIG93bmVyLCAqcHJvcGVydHlUYWJsZSgpLmdl
dCgpKTsKLSAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y3JlYXRlKGdsb2JhbERhdGEsIG51bWJl
ck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CisgICAg
ICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9uZSh2bSwgb3duZXIsICpwcm9wZXJ0eVRhYmxl
KCkuZ2V0KCkpOworICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUodm0sIG51bWJlck9m
U2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CiB9CiAKLVBy
b3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIEpTQ2VsbComIHNw
ZWNpZmljVmFsdWUpCitQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBKU0NlbGwqJiBzcGVj
aWZpY1ZhbHVlKQogewogICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNf
aW5mbyk7CiAKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0
YSk7CisgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtKTsKICAgICBpZiAo
IXByb3BlcnR5VGFibGUoKSkKICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiAKQEAgLTc2
MCw5ICs3NjAsOSBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChKU0dsb2JhbERhCiAg
ICAgcmV0dXJuIGVudHJ5LT5vZmZzZXQ7CiB9CiAKLWJvb2wgU3RydWN0dXJlOjpkZXNwZWNpZnlG
dW5jdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpCitib29sIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVuY3Rpb24oVk0mIHZtLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lKQogewotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2Fy
eShnbG9iYWxEYXRhKTsKKyAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0p
OwogICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAg
LTc3NSw5ICs3NzUsOSBAQCBib29sIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVuY3Rpb24oSlNHbG9i
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjpkZXNwZWNpZnlBbGxGdW5j
dGlvbnMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBTdHJ1Y3R1cmU6OmRlc3BlY2lm
eUFsbEZ1bmN0aW9ucyhWTSYgdm0pCiB7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVj
ZXNzYXJ5KGdsb2JhbERhdGEpOworICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2Fy
eSh2bSk7CiAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAt
Nzg2LDkgKzc4Niw5IEBAIHZvaWQgU3RydWN0dXJlOjpkZXNwZWNpZnlBbGxGdW5jdGlvbnMoSlMK
ICAgICAgICAgaXRlci0+c3BlY2lmaWNWYWx1ZS5jbGVhcigpOwogfQogCi1Qcm9wZXJ0eU9mZnNl
dCBTdHJ1Y3R1cmU6OnB1dFNwZWNpZmljVmFsdWUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNw
ZWNpZmljVmFsdWUpCitQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnB1dFNwZWNpZmljVmFsdWUo
Vk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBK
U0NlbGwqIHNwZWNpZmljVmFsdWUpCiB7Ci0gICAgQVNTRVJUKCFKU0M6OmlzVmFsaWRPZmZzZXQo
Z2V0KGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSkpKTsKKyAgICBBU1NFUlQoIUpTQzo6aXNWYWxp
ZE9mZnNldChnZXQodm0sIHByb3BlcnR5TmFtZSkpKTsKIAogICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKICAgICBpZiAoYXR0cmlidXRlcyAmIERvbnRFbnVtKQpAQCAtNzk3LDExICs3OTcsMTEgQEAg
UHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpwdXRTcGVjaWZpY1ZhbAogICAgIFN0cmluZ0ltcGwq
IHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsKIAogICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQot
ICAgICAgICBjcmVhdGVQcm9wZXJ0eU1hcChnbG9iYWxEYXRhKTsKKyAgICAgICAgY3JlYXRlUHJv
cGVydHlNYXAodm0pOwogCiAgICAgUHJvcGVydHlPZmZzZXQgbmV3T2Zmc2V0ID0gcHJvcGVydHlU
YWJsZSgpLT5uZXh0T2Zmc2V0KG1faW5saW5lQ2FwYWNpdHkpOwogCi0gICAgcHJvcGVydHlUYWJs
ZSgpLT5hZGQoUHJvcGVydHlNYXBFbnRyeShnbG9iYWxEYXRhLCB0aGlzLCByZXAsIG5ld09mZnNl
dCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQ
cm9wZXJ0eU9mZnNldE1heUNoYW5nZSk7CisgICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoUHJvcGVy
dHlNYXBFbnRyeSh2bSwgdGhpcywgcmVwLCBuZXdPZmZzZXQsIGF0dHJpYnV0ZXMsIHNwZWNpZmlj
VmFsdWUpLCBtX29mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNYXlDaGFuZ2Up
OwogICAgIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICByZXR1cm4gbmV3T2Zmc2V0OwpA
QCAtODI5LDE3ICs4MjksMTcgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoUHJv
cGVydAogICAgIHJldHVybiBvZmZzZXQ7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjpjcmVhdGVQcm9w
ZXJ0eU1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGNhcGFjaXR5KQordm9p
ZCBTdHJ1Y3R1cmU6OmNyZWF0ZVByb3BlcnR5TWFwKFZNJiB2bSwgdW5zaWduZWQgY2FwYWNpdHkp
CiB7CiAgICAgQVNTRVJUKCFwcm9wZXJ0eVRhYmxlKCkpOwogCiAgICAgY2hlY2tDb25zaXN0ZW5j
eSgpOwotICAgIHByb3BlcnR5VGFibGUoKS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgUHJvcGVydHlU
YWJsZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGNhcGFjaXR5KSk7CisgICAgcHJvcGVydHlUYWJsZSgp
LnNldCh2bSwgdGhpcywgUHJvcGVydHlUYWJsZTo6Y3JlYXRlKHZtLCBjYXBhY2l0eSkpOwogfQog
Ci12b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCit2b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1
Y3R1cmUoVk0mIHZtLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRp
b25Nb2RlIG1vZGUpCiB7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KGds
b2JhbERhdGEpOworICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSk7CiAg
ICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtODg2LDcgKzg4
Niw3IEBAIHZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAgICAg
dGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CiB9CiAKLWJvb2wgU3Ry
dWN0dXJlOjpwcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorYm9vbCBTdHJ1Y3R1cmU6OnBy
b3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCiB7CiAgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CiAg
ICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQpAQCAtOTAxLDcgKzkwMSw3IEBA
IGJvb2wgU3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbk1heUludGVyY2UKICAgICAgICAgCiAgICAg
ICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CiAgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsK
LSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gY3VycmVudC0+Z2V0KGdsb2JhbERhdGEs
IHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IGN1cnJlbnQtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1
dGVzLCBzcGVjaWZpY1ZhbHVlKTsKICAgICAgICAgaWYgKCFKU0M6OmlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAt
NjksNTcgKzY5LDU3IEBAIHB1YmxpYzoKIAogICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CiAKLSAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8qLCBJ
bmRleGluZ1R5cGUgPSBOb25BcnJheSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkgPSAwKTsKKyAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
cHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENsYXNzSW5mbyosIEluZGV4aW5nVHlw
ZSA9IE5vbkFycmF5LCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9IDApOwogCiBwcm90ZWN0ZWQ6
Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgewotICAgICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwog
ICAgICAgICBBU1NFUlQobV9wcm90b3R5cGUpOwogICAgICAgICBBU1NFUlQobV9wcm90b3R5cGUu
aXNPYmplY3QoKSB8fCBtX3Byb3RvdHlwZS5pc051bGwoKSk7CiAgICAgfQogCi0gICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIENyZWF0aW5nRWFybHlDZWxs
VGFnKQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBDcmVhdGluZ0Vhcmx5Q2VsbFRh
ZykKICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIHRoaXMs
IENyZWF0aW5nRWFybHlDZWxsKTsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIHRo
aXMsIENyZWF0aW5nRWFybHlDZWxsKTsKICAgICAgICAgQVNTRVJUKG1fcHJvdG90eXBlKTsKICAg
ICAgICAgQVNTRVJUKG1fcHJvdG90eXBlLmlzTnVsbCgpKTsKLSAgICAgICAgQVNTRVJUKCFnbG9i
YWxEYXRhLnN0cnVjdHVyZVN0cnVjdHVyZSk7CisgICAgICAgIEFTU0VSVCghdm0uc3RydWN0dXJl
U3RydWN0dXJlKTsKICAgICB9CiAKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkdW1wU3RhdGlz
dGljcygpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJv
cGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwg
dW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNl
dCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3BlcnR5
VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmli
dXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYpOwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhp
c3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3BlcnR5T2Zmc2V0Jik7Ci0gICAgc3RhdGlj
IFN0cnVjdHVyZSogcmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVj
dHVyZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmKTsKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgU3RydWN0dXJlKiBjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKEpTR2xvYmFs
RGF0YSYsIFN0cnVjdHVyZSosIEpTVmFsdWUgcHJvdG90eXBlKTsKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgU3RydWN0dXJlKiBkZXNwZWNpZnlGdW5jdGlvblRyYW5zaXRpb24oSlNHbG9i
YWxEYXRhJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lKTsKLSAgICBzdGF0aWMgU3RydWN0dXJl
KiBhdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIFBy
b3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7Ci0gICAgc3RhdGljIFN0cnVjdHVyZSog
dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUq
KTsKLSAgICBzdGF0aWMgU3RydWN0dXJlKiB0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRp
b24oSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7Ci0gICAgc3RhdGljIFN0cnVjdHVyZSogc2Vh
bFRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7Ci0gICAgc3RhdGljIFN0cnVj
dHVyZSogZnJlZXplVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKLSAgICBz
dGF0aWMgU3RydWN0dXJlKiBwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24oSlNHbG9iYWxEYXRh
JiwgU3RydWN0dXJlKik7Ci0gICAgc3RhdGljIFN0cnVjdHVyZSogbm9uUHJvcGVydHlUcmFuc2l0
aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIE5vblByb3BlcnR5VHJhbnNpdGlvbik7Cisg
ICAgc3RhdGljIFN0cnVjdHVyZSogcmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKFZNJiwgU3RydWN0
dXJlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24oVk0mLCBTdHJ1
Y3R1cmUqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IFN0cnVjdHVyZSogZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwg
UHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBhdHRyaWJ1dGVDaGFuZ2VUcmFu
c2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
KTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiB0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9u
KFZNJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogdG9VbmNhY2hlYWJsZURp
Y3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIFN0cnVjdHVy
ZSogc2VhbFRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgU3RydWN0dXJl
KiBmcmVlemVUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIFN0cnVjdHVy
ZSogcHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKik7CisgICAgc3Rh
dGljIFN0cnVjdHVyZSogbm9uUHJvcGVydHlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgTm9u
UHJvcGVydHlUcmFuc2l0aW9uKTsKIAotICAgIGJvb2wgaXNTZWFsZWQoSlNHbG9iYWxEYXRhJik7
Ci0gICAgYm9vbCBpc0Zyb3plbihKU0dsb2JhbERhdGEmKTsKKyAgICBib29sIGlzU2VhbGVkKFZN
Jik7CisgICAgYm9vbCBpc0Zyb3plbihWTSYpOwogICAgIGJvb2wgaXNFeHRlbnNpYmxlKCkgY29u
c3QgeyByZXR1cm4gIW1fcHJldmVudEV4dGVuc2lvbnM7IH0KICAgICBib29sIGRpZFRyYW5zaXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2RpZFRyYW5zaXRpb247IH0KICAgICBib29sIHB1dFdpbGxH
cm93T3V0T2ZMaW5lU3RvcmFnZSgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBzdWdn
ZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKTsgCiAKLSAgICBTdHJ1Y3R1cmUqIGZs
YXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIEpTT2JqZWN0Kik7CisgICAg
U3RydWN0dXJlKiBmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShWTSYsIEpTT2JqZWN0Kik7CiAK
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAgIC8vIFRoZXNlIHNob3VsZCBiZSB1c2VkIHdpdGgg
Y2F1dGlvbi4gIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb3BlcnR5T2Zmc2V0IGFkZFByb3Bl
cnR5V2l0aG91dFRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUpOwotICAgIFByb3BlcnR5T2Zmc2V0
IHJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlO
YW1lKTsKLSAgICB2b2lkIHNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpIHsgbV9wcm90b3R5cGUuc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHByb3RvdHlwZSk7IH0KKyAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0
eU9mZnNldCBhZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUpOworICAgIFByb3BlcnR5
T2Zmc2V0IHJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUp
OworICAgIHZvaWQgc2V0UHJvdG90eXBlV2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBKU1ZhbHVl
IHByb3RvdHlwZSkgeyBtX3Byb3RvdHlwZS5zZXQodm0sIHRoaXMsIHByb3RvdHlwZSk7IH0KICAg
ICAgICAgCiAgICAgYm9vbCBpc0RpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBtX2RpY3Rpb25h
cnlLaW5kICE9IE5vbmVEaWN0aW9uYXJ5S2luZDsgfQogICAgIGJvb2wgaXNVbmNhY2hlYWJsZURp
Y3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBtX2RpY3Rpb25hcnlLaW5kID09IFVuY2FjaGVkRGlj
dGlvbmFyeUtpbmQ7IH0KQEAgLTE0NCwxOCArMTQ0LDE4IEBAIHB1YmxpYzoKICAgICBOb25Qcm9w
ZXJ0eVRyYW5zaXRpb24gc3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpIGNvbnN0Owog
ICAgICAgICAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9nbG9iYWxPYmplY3QuZ2V0KCk7IH0KLSAgICB2b2lkIHNldEdsb2JhbE9iamVjdChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIHsgbV9n
bG9iYWxPYmplY3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCk7IH0KKyAgICB2
b2lkIHNldEdsb2JhbE9iamVjdChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
IHsgbV9nbG9iYWxPYmplY3Quc2V0KHZtLCB0aGlzLCBnbG9iYWxPYmplY3QpOyB9CiAgICAgICAg
IAogICAgIEpTVmFsdWUgc3RvcmVkUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gbV9wcm90b3R5
cGUuZ2V0KCk7IH0KICAgICBKU1ZhbHVlIHByb3RvdHlwZUZvckxvb2t1cChFeGVjU3RhdGUqKSBj
b25zdDsKICAgICBKU1ZhbHVlIHByb3RvdHlwZUZvckxvb2t1cChKU0dsb2JhbE9iamVjdCopIGNv
bnN0OwogICAgIEpTVmFsdWUgcHJvdG90eXBlRm9yTG9va3VwKENvZGVCbG9jayopIGNvbnN0Owot
ICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbihKU0dsb2JhbERhdGEmLCBKU0dsb2Jh
bE9iamVjdCopIGNvbnN0OworICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbihWTSYs
IEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNo
YWluKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICAgICAgCiAgICAgLy8gV2lsbCBqdXN0IHRoZSBwcm90
b3R5cGUgY2hhaW4gaW50ZXJjZXB0IHRoaXMgcHJvcGVydHkgYWNjZXNzPwotICAgIGJvb2wgcHJv
dG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFt
ZSk7CisgICAgYm9vbCBwcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oVk0mLCBQcm9w
ZXJ0eU5hbWUpOwogICAgICAgICAKICAgICBib29sIHRyYW5zaXRpb25EaWRJbnZvbHZlU3BlY2lm
aWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICEhbV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91czsgfQog
ICAgICAgICAKQEAgLTIzMSw5ICsyMzEsOSBAQCBwdWJsaWM6CiAKICAgICBib29sIG1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QpOwogCi0g
ICAgUHJvcGVydHlPZmZzZXQgZ2V0KEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSk7Ci0gICAg
UHJvcGVydHlPZmZzZXQgZ2V0KEpTR2xvYmFsRGF0YSYsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1l
KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eU9mZnNldCBnZXQoSlNHbG9iYWxEYXRh
JiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgSlNDZWxsKiYgc3BlY2lmaWNW
YWx1ZSk7CisgICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lKTsKKyAgICBQ
cm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSk7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lLCB1bnNp
Z25lZCYgYXR0cmlidXRlcywgSlNDZWxsKiYgc3BlY2lmaWNWYWx1ZSk7CiAKICAgICBib29sIGhh
c0dldHRlclNldHRlclByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX2hhc0dldHRlclNldHRl
clByb3BlcnRpZXM7IH0KICAgICBib29sIGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0
aWVzRXhjbHVkaW5nUHJvdG8oKSBjb25zdCB7IHJldHVybiBtX2hhc1JlYWRPbmx5T3JHZXR0ZXJT
ZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG87IH0KQEAgLTI1NiwxMiArMjU2LDEyIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuICFKU0M6OmlzVmFsaWRPZmZzZXQobV9vZmZzZXQpOwogICAg
IH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0
aW9uKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBkZXNwZWNpZnlEaWN0aW9uYXJ5RnVuY3Rpb24oVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAg
IHZvaWQgZGlzYWJsZVNwZWNpZmljRnVuY3Rpb25UcmFja2luZygpIHsgbV9zcGVjaWZpY0Z1bmN0
aW9uVGhyYXNoQ291bnQgPSBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQ7IH0KIAotICAg
IHZvaWQgc2V0RW51bWVyYXRpb25DYWNoZShKU0dsb2JhbERhdGEmLCBKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yKiBlbnVtZXJhdGlvbkNhY2hlKTsgLy8gRGVmaW5lZCBpbiBKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yLmguCisgICAgdm9pZCBzZXRFbnVtZXJhdGlvbkNhY2hlKFZNJiwgSlNQcm9wZXJ0eU5h
bWVJdGVyYXRvciogZW51bWVyYXRpb25DYWNoZSk7IC8vIERlZmluZWQgaW4gSlNQcm9wZXJ0eU5h
bWVJdGVyYXRvci5oLgogICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGVudW1lcmF0aW9uQ2Fj
aGUoKTsgLy8gRGVmaW5lZCBpbiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmguCi0gICAgdm9pZCBn
ZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0
cnVjdHVyZShWTSYsIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAg
IEpTU3RyaW5nKiBvYmplY3RUb1N0cmluZ1ZhbHVlKCkKICAgICB7CkBAIC0yNzAsMTEgKzI3MCwx
MSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByYXJlRGF0YSgpLT5vYmplY3RUb1N0cmluZ1Zh
bHVlKCk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRPYmplY3RUb1N0cmluZ1ZhbHVlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNTdHJpbmcqIHZhbHVlKQor
ICAgIHZvaWQgc2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3du
ZXIsIEpTU3RyaW5nKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdHlwZUluZm8oKS5zdHJ1
Y3R1cmVIYXNSYXJlRGF0YSgpKQotICAgICAgICAgICAgYWxsb2NhdGVSYXJlRGF0YShnbG9iYWxE
YXRhKTsKLSAgICAgICAgcmFyZURhdGEoKS0+c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShnbG9iYWxE
YXRhLCBvd25lciwgdmFsdWUpOworICAgICAgICAgICAgYWxsb2NhdGVSYXJlRGF0YSh2bSk7Cisg
ICAgICAgIHJhcmVEYXRhKCktPnNldE9iamVjdFRvU3RyaW5nVmFsdWUodm0sIG93bmVyLCB2YWx1
ZSk7CiAgICAgfQogCiAgICAgYm9vbCBzdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCkKQEAgLTMxOSw3
ICszMTksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0
dXJlLCBtX2luZGV4aW5nVHlwZSk7CiAgICAgfQogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYpOwogICAgICAgICAKICAgICBib29sIHRyYW5zaXRpb25XYXRjaHBvaW50
U2V0SGFzQmVlbkludmFsaWRhdGVkKCkgY29uc3QKICAgICB7CkBAIC0zNDcsNTQgKzM0Nyw1NCBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBD
bGFzc0luZm8qLCBJbmRleGluZ1R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5KTsKLSAgICBT
dHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJik7Ci0gICAgU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIGNv
bnN0IFN0cnVjdHVyZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cnVjdHVyZShWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3Qg
Q2xhc3NJbmZvKiwgSW5kZXhpbmdUeXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSk7CisgICAg
U3RydWN0dXJlKFZNJik7CisgICAgU3RydWN0dXJlKFZNJiwgY29uc3QgU3RydWN0dXJlKik7CiAK
LSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgY29uc3QgU3RydWN0
dXJlKik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlKFZNJiwgY29uc3QgU3RydWN0dXJl
Kik7CiAgICAgICAgIAogICAgIHR5cGVkZWYgZW51bSB7IAogICAgICAgICBOb25lRGljdGlvbmFy
eUtpbmQgPSAwLAogICAgICAgICBDYWNoZWREaWN0aW9uYXJ5S2luZCA9IDEsCiAgICAgICAgIFVu
Y2FjaGVkRGljdGlvbmFyeUtpbmQgPSAyCiAgICAgfSBEaWN0aW9uYXJ5S2luZDsKLSAgICBzdGF0
aWMgU3RydWN0dXJlKiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVj
dHVyZSosIERpY3Rpb25hcnlLaW5kKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiB0b0RpY3Rpb25h
cnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgRGljdGlvbmFyeUtpbmQpOwogCi0gICAgUHJv
cGVydHlPZmZzZXQgcHV0U3BlY2lmaWNWYWx1ZShKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSk7CisgICAgUHJvcGVy
dHlPZmZzZXQgcHV0U3BlY2lmaWNWYWx1ZShWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0
cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKTsKICAgICBQcm9wZXJ0eU9mZnNldCByZW1v
dmUoUHJvcGVydHlOYW1lKTsKIAotICAgIHZvaWQgY3JlYXRlUHJvcGVydHlNYXAoSlNHbG9iYWxE
YXRhJiwgdW5zaWduZWQga2V5Q291bnQgPSAwKTsKKyAgICB2b2lkIGNyZWF0ZVByb3BlcnR5TWFw
KFZNJiwgdW5zaWduZWQga2V5Q291bnQgPSAwKTsKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3ko
KTsKIAotICAgIGJvb2wgZGVzcGVjaWZ5RnVuY3Rpb24oSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlO
YW1lKTsKLSAgICB2b2lkIGRlc3BlY2lmeUFsbEZ1bmN0aW9ucyhKU0dsb2JhbERhdGEmKTsKKyAg
ICBib29sIGRlc3BlY2lmeUZ1bmN0aW9uKFZNJiwgUHJvcGVydHlOYW1lKTsKKyAgICB2b2lkIGRl
c3BlY2lmeUFsbEZ1bmN0aW9ucyhWTSYpOwogCiAgICAgV3JpdGVCYXJyaWVyPFByb3BlcnR5VGFi
bGU+JiBwcm9wZXJ0eVRhYmxlKCk7Ci0gICAgUHJvcGVydHlUYWJsZSogdGFrZVByb3BlcnR5VGFi
bGVPckNsb25lSWZQaW5uZWQoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvd25lcik7Ci0gICAg
UHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJl
KiBvd25lcik7Ci0gICAgUHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5n
KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogb3duZXIpOwotICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChKU0dsb2JhbERhdGEmKTsKLSAgICB2b2lkIG1h
dGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
CisgICAgUHJvcGVydHlUYWJsZSogdGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQoVk0m
LCBTdHJ1Y3R1cmUqIG93bmVyKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlUYWJs
ZShWTSYsIFN0cnVjdHVyZSogb3duZXIpOworICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0
eVRhYmxlRm9yUGlubmluZyhWTSYsIFN0cnVjdHVyZSogb3duZXIpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChWTSYpOworICAgIHZvaWQgbWF0ZXJp
YWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KFZNJiB2bSkKICAgICB7CiAgICAgICAgIEFTU0VS
VChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7CiAgICAgICAgIEFTU0VSVChj
aGVja09mZnNldENvbnNpc3RlbmN5KCkpOwogICAgICAgICBpZiAoIXByb3BlcnR5VGFibGUoKSAm
JiBwcmV2aW91c0lEKCkpCi0gICAgICAgICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwKGdsb2Jh
bERhdGEpOworICAgICAgICAgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCh2bSk7CiAgICAgfQot
ICAgIHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmluZyhKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgdm9pZCBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZO
ZWNlc3NhcnlGb3JQaW5uaW5nKFZNJiB2bSkKICAgICB7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1
cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7CiAgICAgICAgIGNoZWNrT2Zmc2V0Q29uc2lz
dGVuY3koKTsKICAgICAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgICAgICBtYXRl
cmlhbGl6ZVByb3BlcnR5TWFwKGdsb2JhbERhdGEpOworICAgICAgICAgICAgbWF0ZXJpYWxpemVQ
cm9wZXJ0eU1hcCh2bSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRQcmV2aW91c0lEKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiB0cmFuc2l0aW9uLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICB2b2lkIHNldFByZXZpb3VzSUQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHRyYW5zaXRp
b24sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgaWYgKHR5cGVJbmZvKCku
c3RydWN0dXJlSGFzUmFyZURhdGEoKSkKLSAgICAgICAgICAgIHJhcmVEYXRhKCktPnNldFByZXZp
b3VzSUQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIHJh
cmVEYXRhKCktPnNldFByZXZpb3VzSUQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1fcHJldmlvdXNPclJhcmVEYXRhLnNldChnbG9iYWxEYXRh
LCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgbV9wcmV2aW91c09yUmFyZURh
dGEuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUpOwogICAgIH0KIAogICAgIHZvaWQgY2xl
YXJQcmV2aW91c0lEKCkKQEAgLTQzMCw4ICs0MzAsOCBAQCBwcml2YXRlOgogICAgICAgICAKICAg
ICBib29sIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKSBjb25zdDsKIAotICAgIHZvaWQgYWxsb2Nh
dGVSYXJlRGF0YShKU0dsb2JhbERhdGEmKTsKLSAgICB2b2lkIGNsb25lUmFyZURhdGFGcm9tKEpT
R2xvYmFsRGF0YSYsIGNvbnN0IFN0cnVjdHVyZSopOworICAgIHZvaWQgYWxsb2NhdGVSYXJlRGF0
YShWTSYpOworICAgIHZvaWQgY2xvbmVSYXJlRGF0YUZyb20oVk0mLCBjb25zdCBTdHJ1Y3R1cmUq
KTsKIAogICAgIHN0YXRpYyBjb25zdCBpbnQgc19tYXhUcmFuc2l0aW9uTGVuZ3RoID0gNjQ7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFp
bi5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUNoYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAKIENsYXNzSW5mbyBTdHJ1Y3R1cmVDaGFpbjo6c19pbmZvID0geyAi
U3RydWN0dXJlQ2hhaW4iLCAwLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFN0cnVjdHVyZUNo
YWluKSB9OwogCi1TdHJ1Y3R1cmVDaGFpbjo6U3RydWN0dXJlQ2hhaW4oSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IEpTQ2VsbChnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUpCitTdHJ1Y3R1cmVDaGFpbjo6U3RydWN0dXJlQ2hhaW4oVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEpTQ2VsbCh2bSwgc3RydWN0dXJlKQogewogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJ
KHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZUNoYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE2ICs0NiwxNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CiAKLSAgICAg
ICAgc3RhdGljIFN0cnVjdHVyZUNoYWluKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBTdHJ1Y3R1cmUqIGhlYWQpCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmVDaGFpbiogY3JlYXRl
KFZNJiB2bSwgU3RydWN0dXJlKiBoZWFkKQogICAgICAgICB7IAotICAgICAgICAgICAgU3RydWN0
dXJlQ2hhaW4qIGNoYWluID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJlQ2hh
aW4+KGdsb2JhbERhdGEuaGVhcCkpIFN0cnVjdHVyZUNoYWluKGdsb2JhbERhdGEsIGdsb2JhbERh
dGEuc3RydWN0dXJlQ2hhaW5TdHJ1Y3R1cmUuZ2V0KCkpOwotICAgICAgICAgICAgY2hhaW4tPmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIGhlYWQpOworICAgICAgICAgICAgU3RydWN0dXJlQ2hh
aW4qIGNoYWluID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJlQ2hhaW4+KHZt
LmhlYXApKSBTdHJ1Y3R1cmVDaGFpbih2bSwgdm0uc3RydWN0dXJlQ2hhaW5TdHJ1Y3R1cmUuZ2V0
KCkpOworICAgICAgICAgICAgY2hhaW4tPmZpbmlzaENyZWF0aW9uKHZtLCBoZWFkKTsKICAgICAg
ICAgICAgIHJldHVybiBjaGFpbjsKICAgICAgICAgfQogICAgICAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiogaGVhZCgpIHsgcmV0dXJuIG1fdmVjdG9yLmdldCgpOyB9CiAgICAgICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgeyByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKENvbXBvdW5kVHlwZSwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiksICZzX2luZm8p
OyB9CisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSB7IHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENv
bXBvdW5kVHlwZSwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiksICZzX2luZm8pOyB9CiAgICAgICAg
IAogICAgICAgICBzdGF0aWMgQ2xhc3NJbmZvIHNfaW5mbzsKIApAQCAtNjQsOSArNjQsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAog
ICAgIHByb3RlY3RlZDoKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFN0cnVjdHVyZSogaGVhZCkKKyAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYgdm0sIFN0cnVjdHVyZSogaGVhZCkKICAgICAgICAgewotICAgICAgICAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CiAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IDA7CiAgICAgICAgICAgICBmb3Ig
KFN0cnVjdHVyZSogY3VycmVudCA9IGhlYWQ7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5z
dG9yZWRQcm90b3R5cGUoKS5pc051bGwoKSA/IDAgOiBhc09iamVjdChjdXJyZW50LT5zdG9yZWRQ
cm90b3R5cGUoKSktPnN0cnVjdHVyZSgpKQogICAgICAgICAgICAgICAgICsrc2l6ZTsKQEAgLTc1
LDEzICs3NSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAgICAgc2l6ZV90IGkgPSAw
OwogICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSBoZWFkOyBjdXJyZW50OyBj
dXJyZW50ID0gY3VycmVudC0+c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxsKCkgPyAwIDogYXNPYmpl
Y3QoY3VycmVudC0+c3RvcmVkUHJvdG90eXBlKCkpLT5zdHJ1Y3R1cmUoKSkKLSAgICAgICAgICAg
ICAgICBtX3ZlY3RvcltpKytdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBjdXJyZW50KTsKKyAgICAg
ICAgICAgICAgICBtX3ZlY3RvcltpKytdLnNldCh2bSwgdGhpcywgY3VycmVudCk7CiAgICAgICAg
IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CiAgICAgICAgIAotICAgICAgICBTdHJ1Y3R1cmVDaGFpbihKU0dsb2JhbERhdGEmLCBT
dHJ1Y3R1cmUqKTsKKyAgICAgICAgU3RydWN0dXJlQ2hhaW4oVk0mLCBTdHJ1Y3R1cmUqKTsKICAg
ICAgICAgT3duQXJyYXlQdHI8V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gPiBtX3ZlY3RvcjsKICAg
ICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDM1ICszMSwz
NSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlOjpj
cmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBD
bGFzc0luZm8qIGNsYXNzSW5mbywgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwgdW5zaWduZWQg
aW5saW5lQ2FwYWNpdHkpCitpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNyZWF0ZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjb25z
dCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSkKIHsKLSAgICBBU1NF
UlQoZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUpOworICAgIEFTU0VSVCh2bS5zdHJ1Y3R1
cmVTdHJ1Y3R1cmUpOwogICAgIEFTU0VSVChjbGFzc0luZm8pOwotICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJlPihnbG9iYWxEYXRh
LmhlYXApKSBTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5
cGVJbmZvLCBjbGFzc0luZm8sIGluZGV4aW5nVHlwZSwgaW5saW5lQ2FwYWNpdHkpOwotICAgIHN0
cnVjdHVyZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmU+KHZtLmhlYXApKSBT
dHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCB0eXBlSW5mbywgY2xhc3NJbmZv
LCBpbmRleGluZ1R5cGUsIGlubGluZUNhcGFjaXR5KTsKKyAgICBzdHJ1Y3R1cmUtPmZpbmlzaENy
ZWF0aW9uKHZtKTsKICAgICByZXR1cm4gc3RydWN0dXJlOwogfQogCi1pbmxpbmUgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OmNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitp
bmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0pCiB7Ci0g
ICAgQVNTRVJUKCFnbG9iYWxEYXRhLnN0cnVjdHVyZVN0cnVjdHVyZSk7Ci0gICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmU+KGdsb2Jh
bERhdGEuaGVhcCkpIFN0cnVjdHVyZShnbG9iYWxEYXRhKTsKLSAgICBzdHJ1Y3R1cmUtPmZpbmlz
aENyZWF0aW9uKGdsb2JhbERhdGEsIENyZWF0aW5nRWFybHlDZWxsKTsKKyAgICBBU1NFUlQoIXZt
LnN0cnVjdHVyZVN0cnVjdHVyZSk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmU+KHZtLmhlYXApKSBTdHJ1Y3R1cmUodm0pOwor
ICAgIHN0cnVjdHVyZS0+ZmluaXNoQ3JlYXRpb24odm0sIENyZWF0aW5nRWFybHlDZWxsKTsKICAg
ICByZXR1cm4gc3RydWN0dXJlOwogfQogCi1pbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNy
ZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFN0cnVjdHVyZSogc3RydWN0dXJl
KQoraW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjcmVhdGUoVk0mIHZtLCBjb25zdCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBBU1NFUlQoZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1
Y3R1cmUpOwotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8U3RydWN0dXJlPihnbG9iYWxEYXRhLmhlYXApKSBTdHJ1Y3R1cmUoZ2xvYmFsRGF0
YSwgc3RydWN0dXJlKTsKLSAgICBuZXdTdHJ1Y3R1cmUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOworICAgIEFTU0VSVCh2bS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUpOworICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJlPih2bS5o
ZWFwKSkgU3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpOworICAgIG5ld1N0cnVjdHVyZS0+ZmluaXNo
Q3JlYXRpb24odm0pOwogICAgIHJldHVybiBuZXdTdHJ1Y3R1cmU7CiB9CiAKLWlubGluZSBQcm9w
ZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpn
ZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEFTU0VSVChzdHJ1
Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0
eU1hcElmTmVjZXNzYXJ5KGdsb2JhbERhdGEpOworICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJ
Zk5lY2Vzc2FyeSh2bSk7CiAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVy
biBpbnZhbGlkT2Zmc2V0OwogCkBAIC02NywxMCArNjcsMTAgQEAgaW5saW5lIFByb3BlcnR5T2Zm
c2V0IFN0cnVjdHVyZTo6Z2V0KEpTRwogICAgIHJldHVybiBlbnRyeSA/IGVudHJ5LT5vZmZzZXQg
OiBpbnZhbGlkT2Zmc2V0OwogfQogCi1pbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpn
ZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSkKK2lu
bGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIGNvbnN0IFdURjo6U3Ry
aW5nJiBuYW1lKQogewogICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNf
aW5mbyk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KGdsb2JhbERhdGEp
OworICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSk7CiAgICAgaWYgKCFw
cm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwogCkBAIC0xMTMs
MTIgKzExMywxMiBAQCBpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6OnRyYW5zaXRpdmVseVRyYW5zCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1pbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OnNldEVudW1lcmF0
aW9uQ2FjaGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
KiBlbnVtZXJhdGlvbkNhY2hlKQoraW5saW5lIHZvaWQgU3RydWN0dXJlOjpzZXRFbnVtZXJhdGlv
bkNhY2hlKFZNJiB2bSwgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogZW51bWVyYXRpb25DYWNoZSkK
IHsKICAgICBBU1NFUlQoIWlzRGljdGlvbmFyeSgpKTsKICAgICBpZiAoIXR5cGVJbmZvKCkuc3Ry
dWN0dXJlSGFzUmFyZURhdGEoKSkKLSAgICAgICAgYWxsb2NhdGVSYXJlRGF0YShnbG9iYWxEYXRh
KTsKLSAgICByYXJlRGF0YSgpLT5zZXRFbnVtZXJhdGlvbkNhY2hlKGdsb2JhbERhdGEsIHRoaXMs
IGVudW1lcmF0aW9uQ2FjaGUpOworICAgICAgICBhbGxvY2F0ZVJhcmVEYXRhKHZtKTsKKyAgICBy
YXJlRGF0YSgpLT5zZXRFbnVtZXJhdGlvbkNhY2hlKHZtLCB0aGlzLCBlbnVtZXJhdGlvbkNhY2hl
KTsKIH0KIAogaW5saW5lIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIFN0cnVjdHVyZTo6ZW51bWVy
YXRpb25DYWNoZSgpCkBAIC0xNDIsMTkgKzE0MiwxOSBAQCBpbmxpbmUgSlNWYWx1ZSBTdHJ1Y3R1
cmU6OnByb3RvdHlwZUZvckxvCiAgICAgcmV0dXJuIHByb3RvdHlwZUZvckxvb2t1cChleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogfQogCi1pbmxpbmUgU3RydWN0dXJlQ2hhaW4qIFN0cnVj
dHVyZTo6cHJvdG90eXBlQ2hhaW4oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAoraW5saW5lIFN0cnVjdHVyZUNoYWluKiBTdHJ1Y3R1
cmU6OnByb3RvdHlwZUNoYWluKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkg
Y29uc3QKIHsKICAgICAvLyBXZSBjYWNoZSBvdXIgcHJvdG90eXBlIGNoYWluIHNvIG91ciBjbGll
bnRzIGNhbiBzaGFyZSBpdC4KICAgICBpZiAoIWlzVmFsaWQoZ2xvYmFsT2JqZWN0LCBtX2NhY2hl
ZFByb3RvdHlwZUNoYWluLmdldCgpKSkgewogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHBy
b3RvdHlwZUZvckxvb2t1cChnbG9iYWxPYmplY3QpOwotICAgICAgICBtX2NhY2hlZFByb3RvdHlw
ZUNoYWluLnNldChnbG9iYWxEYXRhLCB0aGlzLCBTdHJ1Y3R1cmVDaGFpbjo6Y3JlYXRlKGdsb2Jh
bERhdGEsIHByb3RvdHlwZS5pc051bGwoKSA/IDAgOiBhc09iamVjdChwcm90b3R5cGUpLT5zdHJ1
Y3R1cmUoKSkpOworICAgICAgICBtX2NhY2hlZFByb3RvdHlwZUNoYWluLnNldCh2bSwgdGhpcywg
U3RydWN0dXJlQ2hhaW46OmNyZWF0ZSh2bSwgcHJvdG90eXBlLmlzTnVsbCgpID8gMCA6IGFzT2Jq
ZWN0KHByb3RvdHlwZSktPnN0cnVjdHVyZSgpKSk7CiAgICAgfQogICAgIHJldHVybiBtX2NhY2hl
ZFByb3RvdHlwZUNoYWluLmdldCgpOwogfQogCiBpbmxpbmUgU3RydWN0dXJlQ2hhaW4qIFN0cnVj
dHVyZTo6cHJvdG90eXBlQ2hhaW4oRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAgIHJldHVy
biBwcm90b3R5cGVDaGFpbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSk7CisgICAgcmV0dXJuIHByb3RvdHlwZUNoYWluKGV4ZWMtPnZtKCksIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSk7CiB9CiAKIGlubGluZSBib29sIFN0cnVjdHVyZTo6aXNWYWxp
ZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVDaGFpbiogY2FjaGVkUHJv
dG90eXBlQ2hhaW4pIGNvbnN0CkBAIC0yMDAsNyArMjAwLDcgQEAgaW5saW5lIGJvb2wgU3RydWN0
dXJlOjpwdXRXaWxsR3Jvd091dE9mTAogCiBBTFdBWVNfSU5MSU5FIFdyaXRlQmFycmllcjxQcm9w
ZXJ0eVRhYmxlPiYgU3RydWN0dXJlOjpwcm9wZXJ0eVRhYmxlKCkKIHsKLSAgICBBU1NFUlQoIWds
b2JhbE9iamVjdCgpIHx8ICFnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLmhlYXAuaXNCdXN5
KCkpOworICAgIEFTU0VSVCghZ2xvYmFsT2JqZWN0KCkgfHwgIWdsb2JhbE9iamVjdCgpLT52bSgp
LmhlYXAuaXNCdXN5KCkpOwogICAgIHJldHVybiBtX3Byb3BlcnR5VGFibGVVbnNhZmU7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVS
YXJlRGF0YS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMzkgKzMz
LDM5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gU3RydWN0dXJlUmFyZURh
dGE6OnNfaW5mbyA9IHsgIlN0cnVjdHVyZVJhcmVEYXRhIiwgMCwgMCwgMCwgQ1JFQVRFX01FVEhP
RF9UQUJMRShTdHJ1Y3R1cmVSYXJlRGF0YSkgfTsKIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmVSYXJl
RGF0YTo6Y3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCitTdHJ1Y3R1cmUqIFN0cnVj
dHVyZVJhcmVEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsKLSAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENvbXBv
dW5kVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDb21wb3VuZFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiB9CiAKLVN0cnVjdHVyZVJhcmVEYXRhKiBT
dHJ1Y3R1cmVSYXJlRGF0YTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0
dXJlKiBwcmV2aW91cykKK1N0cnVjdHVyZVJhcmVEYXRhKiBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y3Jl
YXRlKFZNJiB2bSwgU3RydWN0dXJlKiBwcmV2aW91cykKIHsKLSAgICBTdHJ1Y3R1cmVSYXJlRGF0
YSogcmFyZURhdGEgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmVSYXJlRGF0
YT4oZ2xvYmFsRGF0YS5oZWFwKSkgU3RydWN0dXJlUmFyZURhdGEoZ2xvYmFsRGF0YSwgcHJldmlv
dXMpOwotICAgIHJhcmVEYXRhLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBTdHJ1
Y3R1cmVSYXJlRGF0YSogcmFyZURhdGEgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1
Y3R1cmVSYXJlRGF0YT4odm0uaGVhcCkpIFN0cnVjdHVyZVJhcmVEYXRhKHZtLCBwcmV2aW91cyk7
CisgICAgcmFyZURhdGEtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gcmFyZURhdGE7
CiB9CiAKLVN0cnVjdHVyZVJhcmVEYXRhKiBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2xvbmUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTdHJ1Y3R1cmVSYXJlRGF0YSogb3RoZXIpCitTdHJ1
Y3R1cmVSYXJlRGF0YSogU3RydWN0dXJlUmFyZURhdGE6OmNsb25lKFZNJiB2bSwgY29uc3QgU3Ry
dWN0dXJlUmFyZURhdGEqIG90aGVyKQogewotICAgIFN0cnVjdHVyZVJhcmVEYXRhKiBuZXdSYXJl
RGF0YSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cnVjdHVyZVJhcmVEYXRhPihnbG9i
YWxEYXRhLmhlYXApKSBTdHJ1Y3R1cmVSYXJlRGF0YShnbG9iYWxEYXRhLCBvdGhlcik7Ci0gICAg
bmV3UmFyZURhdGEtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIFN0cnVjdHVyZVJh
cmVEYXRhKiBuZXdSYXJlRGF0YSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cnVjdHVy
ZVJhcmVEYXRhPih2bS5oZWFwKSkgU3RydWN0dXJlUmFyZURhdGEodm0sIG90aGVyKTsKKyAgICBu
ZXdSYXJlRGF0YS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiBuZXdSYXJlRGF0YTsK
IH0KIAotU3RydWN0dXJlUmFyZURhdGE6OlN0cnVjdHVyZVJhcmVEYXRhKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgU3RydWN0dXJlKiBwcmV2aW91cykKLSAgICA6IEpTQ2VsbChnbG9iYWxEYXRh
LCBnbG9iYWxEYXRhLnN0cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlLmdldCgpKQorU3RydWN0dXJl
UmFyZURhdGE6OlN0cnVjdHVyZVJhcmVEYXRhKFZNJiB2bSwgU3RydWN0dXJlKiBwcmV2aW91cykK
KyAgICA6IEpTQ2VsbCh2bSwgdm0uc3RydWN0dXJlUmFyZURhdGFTdHJ1Y3R1cmUuZ2V0KCkpCiB7
CiAgICAgaWYgKHByZXZpb3VzKQotICAgICAgICBtX3ByZXZpb3VzLnNldChnbG9iYWxEYXRhLCB0
aGlzLCBwcmV2aW91cyk7CisgICAgICAgIG1fcHJldmlvdXMuc2V0KHZtLCB0aGlzLCBwcmV2aW91
cyk7CiB9CiAKLVN0cnVjdHVyZVJhcmVEYXRhOjpTdHJ1Y3R1cmVSYXJlRGF0YShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIGNvbnN0IFN0cnVjdHVyZVJhcmVEYXRhKiBvdGhlcikKLSAgICA6IEpT
Q2VsbChnbG9iYWxEYXRhLCBvdGhlci0+c3RydWN0dXJlKCkpCitTdHJ1Y3R1cmVSYXJlRGF0YTo6
U3RydWN0dXJlUmFyZURhdGEoVk0mIHZtLCBjb25zdCBTdHJ1Y3R1cmVSYXJlRGF0YSogb3RoZXIp
CisgICAgOiBKU0NlbGwodm0sIG90aGVyLT5zdHJ1Y3R1cmUoKSkKIHsKICAgICBpZiAob3RoZXIt
PnByZXZpb3VzSUQoKSkKLSAgICAgICAgbV9wcmV2aW91cy5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
b3RoZXItPnByZXZpb3VzSUQoKSk7CisgICAgICAgIG1fcHJldmlvdXMuc2V0KHZtLCB0aGlzLCBv
dGhlci0+cHJldmlvdXNJRCgpKTsKICAgICBpZiAob3RoZXItPm9iamVjdFRvU3RyaW5nVmFsdWUo
KSkKLSAgICAgICAgbV9vYmplY3RUb1N0cmluZ1ZhbHVlLnNldChnbG9iYWxEYXRhLCB0aGlzLCBv
dGhlci0+b2JqZWN0VG9TdHJpbmdWYWx1ZSgpKTsKKyAgICAgICAgbV9vYmplY3RUb1N0cmluZ1Zh
bHVlLnNldCh2bSwgdGhpcywgb3RoZXItPm9iamVjdFRvU3RyaW5nVmFsdWUoKSk7CiB9CiAKIHZv
aWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZVJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlUmFyZURhdGEuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
MzgsMzEgKzM4LDMxIEBAIGNsYXNzIFN0cnVjdHVyZTsKIGNsYXNzIFN0cnVjdHVyZVJhcmVEYXRh
IDogcHVibGljIEpTQ2VsbCB7CiAgICAgZnJpZW5kIGNsYXNzIFN0cnVjdHVyZTsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgU3RydWN0dXJlUmFyZURhdGEqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBTdHJ1
Y3R1cmUqKTsKLSAgICBzdGF0aWMgU3RydWN0dXJlUmFyZURhdGEqIGNsb25lKEpTR2xvYmFsRGF0
YSYsIGNvbnN0IFN0cnVjdHVyZVJhcmVEYXRhKiBvdGhlcik7CisgICAgc3RhdGljIFN0cnVjdHVy
ZVJhcmVEYXRhKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgU3RydWN0dXJl
UmFyZURhdGEqIGNsb25lKFZNJiwgY29uc3QgU3RydWN0dXJlUmFyZURhdGEqIG90aGVyKTsKIAog
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAot
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmLCBKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsK
IAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIFN0cnVjdHVyZVJhcmVEYXRhIHNob3VsZCBh
bHNvIGJlIGNsb25lZCB3aGVuIGNsb25pbmcgdGhlIG93bmVyIFN0cnVjdHVyZS4KICAgICBib29s
IG5lZWRzQ2xvbmluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBTdHJ1Y3R1cmUq
IHByZXZpb3VzSUQoKSBjb25zdDsKLSAgICB2b2lkIHNldFByZXZpb3VzSUQoSlNHbG9iYWxEYXRh
JiwgU3RydWN0dXJlKiB0cmFuc2l0aW9uLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIHNldFByZXZp
b3VzSUQoVk0mLCBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24sIFN0cnVjdHVyZSopOwogICAgIHZvaWQg
Y2xlYXJQcmV2aW91c0lEKCk7CiAKICAgICBKU1N0cmluZyogb2JqZWN0VG9TdHJpbmdWYWx1ZSgp
IGNvbnN0OwotICAgIHZvaWQgc2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShKU0dsb2JhbERhdGEmLCBj
b25zdCBKU0NlbGwqIG93bmVyLCBKU1N0cmluZyogdmFsdWUpOworICAgIHZvaWQgc2V0T2JqZWN0
VG9TdHJpbmdWYWx1ZShWTSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTU3RyaW5nKiB2YWx1ZSk7
CiAKICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBlbnVtZXJhdGlvbkNhY2hlKCk7Ci0gICAg
dm9pZCBzZXRFbnVtZXJhdGlvbkNhY2hlKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFN0cnVjdHVyZSog
b3duZXIsIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIHZhbHVlKTsKKyAgICB2b2lkIHNldEVudW1l
cmF0aW9uQ2FjaGUoVk0mLCBjb25zdCBTdHJ1Y3R1cmUqIG93bmVyLCBKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yKiB2YWx1ZSk7CiAKICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOwogCiBwcml2YXRlOgotICAgIFN0cnVjdHVyZVJhcmVEYXRhKEpTR2xvYmFsRGF0
YSYsIFN0cnVjdHVyZSopOwotICAgIFN0cnVjdHVyZVJhcmVEYXRhKEpTR2xvYmFsRGF0YSYsIGNv
bnN0IFN0cnVjdHVyZVJhcmVEYXRhKik7CisgICAgU3RydWN0dXJlUmFyZURhdGEoVk0mLCBTdHJ1
Y3R1cmUqKTsKKyAgICBTdHJ1Y3R1cmVSYXJlRGF0YShWTSYsIGNvbnN0IFN0cnVjdHVyZVJhcmVE
YXRhKik7CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVy
cmlkZXNWaXNpdENoaWxkcmVuIHwgSlNDZWxsOjpTdHJ1Y3R1cmVGbGFnczsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURh
dGFJbmxpbmVzLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5
ICszNSw5IEBAIGlubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZVJhcmVEYXRhOjpwcmUKICAgICBy
ZXR1cm4gbV9wcmV2aW91cy5nZXQoKTsKIH0KIAotaW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURh
dGE6OnNldFByZXZpb3VzSUQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHRy
YW5zaXRpb24sIFN0cnVjdHVyZSogc3RydWN0dXJlKQoraW5saW5lIHZvaWQgU3RydWN0dXJlUmFy
ZURhdGE6OnNldFByZXZpb3VzSUQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogewotICAgIG1fcHJldmlvdXMuc2V0KGdsb2JhbERhdGEsIHRyYW5z
aXRpb24sIHN0cnVjdHVyZSk7CisgICAgbV9wcmV2aW91cy5zZXQodm0sIHRyYW5zaXRpb24sIHN0
cnVjdHVyZSk7CiB9CiAKIGlubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpjbGVhclByZXZp
b3VzSUQoKQpAQCAtNTAsOSArNTAsOSBAQCBpbmxpbmUgSlNTdHJpbmcqIFN0cnVjdHVyZVJhcmVE
YXRhOjpvYmplCiAgICAgcmV0dXJuIG1fb2JqZWN0VG9TdHJpbmdWYWx1ZS5nZXQoKTsKIH0KIAot
aW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNldE9iamVjdFRvU3RyaW5nVmFsdWUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBKU0NlbGwqIG93bmVyLCBKU1N0cmluZyogdmFs
dWUpCitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0T2JqZWN0VG9TdHJpbmdWYWx1
ZShWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTU3RyaW5nKiB2YWx1ZSkKIHsKLSAgICBt
X29iamVjdFRvU3RyaW5nVmFsdWUuc2V0KGdsb2JhbERhdGEsIG93bmVyLCB2YWx1ZSk7CisgICAg
bV9vYmplY3RUb1N0cmluZ1ZhbHVlLnNldCh2bSwgb3duZXIsIHZhbHVlKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVUcmFuc2l0aW9uVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkocmV2aXNpb24gMTQ4NjU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBAQCBwdWJsaWM6CiAgICAgICAgIFdlYWtT
ZXQ6OmRlYWxsb2NhdGUoaW1wbCk7CiAgICAgfQogCi0gICAgaW5saW5lIHZvaWQgYWRkKEpTR2xv
YmFsRGF0YSYsIFN0cnVjdHVyZSopOworICAgIGlubGluZSB2b2lkIGFkZChWTSYsIFN0cnVjdHVy
ZSopOwogICAgIGlubGluZSBib29sIGNvbnRhaW5zKFN0cmluZ0ltcGwqIHJlcCwgdW5zaWduZWQg
YXR0cmlidXRlcykgY29uc3Q7CiAgICAgaW5saW5lIFN0cnVjdHVyZSogZ2V0KFN0cmluZ0ltcGwq
IHJlcCwgdW5zaWduZWQgYXR0cmlidXRlcykgY29uc3Q7CiAKQEAgLTE3Nyw3ICsxNzcsNyBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRTaW5n
bGVUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHZv
aWQgc2V0U2luZ2xlVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKGlzVXNpbmdTaW5nbGVTbG90KCkpOwogICAgICAgICBpZiAoV2Vha0lt
cGwqIGltcGwgPSB0aGlzLT53ZWFrSW1wbCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYs
MTkgKzM0NiwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVk
ZWYgSlNDZWxsIEJhc2U7CiAKLSAgICAgICAgc3RhdGljIFNoYXJlZFN5bWJvbFRhYmxlKiBjcmVh
dGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICBzdGF0aWMgU2hhcmVkU3ltYm9s
VGFibGUqIGNyZWF0ZShWTSYgdm0pCiAgICAgICAgIHsKLSAgICAgICAgICAgIFNoYXJlZFN5bWJv
bFRhYmxlKiBzaGFyZWRTeW1ib2xUYWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFNo
YXJlZFN5bWJvbFRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBTaGFyZWRTeW1ib2xUYWJsZShnbG9i
YWxEYXRhKTsKLSAgICAgICAgICAgIHNoYXJlZFN5bWJvbFRhYmxlLT5maW5pc2hDcmVhdGlvbihn
bG9iYWxEYXRhKTsKKyAgICAgICAgICAgIFNoYXJlZFN5bWJvbFRhYmxlKiBzaGFyZWRTeW1ib2xU
YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFNoYXJlZFN5bWJvbFRhYmxlPih2bS5o
ZWFwKSkgU2hhcmVkU3ltYm9sVGFibGUodm0pOworICAgICAgICAgICAgc2hhcmVkU3ltYm9sVGFi
bGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgICAgIHJldHVybiBzaGFyZWRTeW1ib2xU
YWJsZTsKICAgICAgICAgfQogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0
aW9uID0gdHJ1ZTsKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSW1tb3J0YWxTdHJ1Y3R1
cmUgPSB0cnVlOwogICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAg
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQor
ICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhMZWFmVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKExlYWZUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8p
OwogICAgICAgICB9CiAKICAgICAgICAgYm9vbCB1c2VzTm9uU3RyaWN0RXZhbCgpIHsgcmV0dXJu
IG1fdXNlc05vblN0cmljdEV2YWw7IH0KQEAgLTM4Myw4ICszODMsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsK
IAogICAgIHByaXZhdGU6Ci0gICAgICAgIFNoYXJlZFN5bWJvbFRhYmxlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKLSAgICAgICAgICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEu
c2hhcmVkU3ltYm9sVGFibGVTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgIFNoYXJlZFN5bWJvbFRh
YmxlKFZNJiB2bSkKKyAgICAgICAgICAgIDogSlNDZWxsKHZtLCB2bS5zaGFyZWRTeW1ib2xUYWJs
ZVN0cnVjdHVyZS5nZXQoKSkKICAgICAgICAgICAgICwgbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGlu
Z1RoaXMoMCkKICAgICAgICAgICAgICwgbV91c2VzTm9uU3RyaWN0RXZhbChmYWxzZSkKICAgICAg
ICAgICAgICwgbV9jYXB0dXJlU3RhcnQoMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAJKHJldmlzaW9uIDE0ODY1NCkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoxNDg2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NjcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKwor
I2luY2x1ZGUgIkFyZ0xpc3QuaCIKKyNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKKyNpbmNsdWRlICJD
b21tb25JZGVudGlmaWVycy5oIgorI2luY2x1ZGUgIkRGR0xvbmdMaXZlZFN0YXRlLmgiCisjaW5j
bHVkZSAiRGVidWdnZXJBY3RpdmF0aW9uLmgiCisjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rv
ci5oIgorI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgorI2luY2x1ZGUgIkdldHRlclNl
dHRlci5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJIb3N0Q2FsbFJldHVyblZhbHVl
LmgiCisjaW5jbHVkZSAiSW5jcmVtZW50YWxTd2VlcGVyLmgiCisjaW5jbHVkZSAiSW50ZXJwcmV0
ZXIuaCIKKyNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKKyNpbmNsdWRlICJKU0FQSVZhbHVlV3Jh
cHBlci5oIgorI2luY2x1ZGUgIkpTQXJyYXkuaCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisj
aW5jbHVkZSAiSlNMb2NrLmgiCisjaW5jbHVkZSAiSlNOYW1lU2NvcGUuaCIKKyNpbmNsdWRlICJK
U05vdEFuT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgorI2lu
Y2x1ZGUgIkpTV2l0aFNjb3BlLmgiCisjaW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNsdWRlICJMb29r
dXAuaCIKKyNpbmNsdWRlICJOb2Rlcy5oIgorI2luY2x1ZGUgIlBhcnNlckFyZW5hLmgiCisjaW5j
bHVkZSAiUmVnRXhwQ2FjaGUuaCIKKyNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKKyNpbmNsdWRl
ICJTb3VyY2VQcm92aWRlckNhY2hlLmgiCisjaW5jbHVkZSAiU3RyaWN0RXZhbEFjdGl2YXRpb24u
aCIKKyNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCisjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxv
Y2suaCIKKyNpbmNsdWRlIDx3dGYvUHJvY2Vzc0lELmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisjaW5jbHVkZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKKyNlbmRpZgorCisjaWYg
RU5BQkxFKFJFR0VYUF9UUkFDSU5HKQorI2luY2x1ZGUgIlJlZ0V4cC5oIgorI2VuZGlmCisKKyNp
ZiBVU0UoQ0YpCisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyNl
bmRpZgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgSlNDIHsKKworZXh0ZXJu
IGNvbnN0IEhhc2hUYWJsZSBhcnJheUNvbnN0cnVjdG9yVGFibGU7CitleHRlcm4gY29uc3QgSGFz
aFRhYmxlIGFycmF5UHJvdG90eXBlVGFibGU7CitleHRlcm4gY29uc3QgSGFzaFRhYmxlIGJvb2xl
YW5Qcm90b3R5cGVUYWJsZTsKK2V4dGVybiBjb25zdCBIYXNoVGFibGUganNvblRhYmxlOworZXh0
ZXJuIGNvbnN0IEhhc2hUYWJsZSBkYXRlVGFibGU7CitleHRlcm4gY29uc3QgSGFzaFRhYmxlIGRh
dGVDb25zdHJ1Y3RvclRhYmxlOworZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBlcnJvclByb3RvdHlw
ZVRhYmxlOworZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBnbG9iYWxPYmplY3RUYWJsZTsKK2V4dGVy
biBjb25zdCBIYXNoVGFibGUgbWF0aFRhYmxlOworZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBudW1i
ZXJDb25zdHJ1Y3RvclRhYmxlOworZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBudW1iZXJQcm90b3R5
cGVUYWJsZTsKK0pTX0VYUE9SVERBVEEgZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBvYmplY3RDb25z
dHJ1Y3RvclRhYmxlOworZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBwcml2YXRlTmFtZVByb3RvdHlw
ZVRhYmxlOworZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSByZWdFeHBUYWJsZTsKK2V4dGVybiBjb25z
dCBIYXNoVGFibGUgcmVnRXhwQ29uc3RydWN0b3JUYWJsZTsKK2V4dGVybiBjb25zdCBIYXNoVGFi
bGUgcmVnRXhwUHJvdG90eXBlVGFibGU7CitleHRlcm4gY29uc3QgSGFzaFRhYmxlIHN0cmluZ0Nv
bnN0cnVjdG9yVGFibGU7CisKKy8vIE5vdGU6IFBsYXRmb3JtLmggd2lsbCBlbmZvcmNlIHRoYXQg
RU5BQkxFKEFTU0VNQkxFUikgaXMgdHJ1ZSBpZiBlaXRoZXIKKy8vIEVOQUJMRShKSVQpIG9yIEVO
QUJMRShZQVJSX0pJVCkgb3IgYm90aCBhcmUgZW5hYmxlZC4gVGhlIGNvZGUgYmVsb3cKKy8vIGp1
c3QgY2hlY2tzIGZvciBFTkFCTEUoSklUKSBvciBFTkFCTEUoWUFSUl9KSVQpIHdpdGggdGhpcyBw
cmVtaXNlIGluIG1pbmQuCisKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKQorc3RhdGljIGJvb2wgZW5h
YmxlQXNzZW1ibGVyKEV4ZWN1dGFibGVBbGxvY2F0b3ImIGV4ZWN1dGFibGVBbGxvY2F0b3IpCit7
CisgICAgaWYgKCFleGVjdXRhYmxlQWxsb2NhdG9yLmlzVmFsaWQoKSB8fCAoIU9wdGlvbnM6OnVz
ZUpJVCgpICYmICFPcHRpb25zOjp1c2VSZWdFeHBKSVQoKSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworI2lmIFVTRShDRikKKyNpZiBDT01QSUxFUihHQ0MpICYmICFDT01QSUxFUihDTEFORykK
KyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgb25jZSB0aGUgRVdTIGhhdmUgYmVlbiB1cGdyYWRl
ZCB0byBMTFZNLgorICAgIC8vIFdvcmsgYXJvdW5kIGEgYnVnIG9mIEdDQyB3aXRoIHN0cmljdC1h
bGlhc2luZy4KKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNhblVzZUpJVEtleVJldGFpbihB
ZG9wdENGLCBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nKDAgLCAiSmF2YVNjcmlwdENvcmVVc2VK
SVQiLCBrQ0ZTdHJpbmdFbmNvZGluZ01hY1JvbWFuKSk7CisgICAgQ0ZTdHJpbmdSZWYgY2FuVXNl
SklUS2V5ID0gY2FuVXNlSklUS2V5UmV0YWluLmdldCgpOworI2Vsc2UKKyAgICBDRlN0cmluZ1Jl
ZiBjYW5Vc2VKSVRLZXkgPSBDRlNUUigiSmF2YVNjcmlwdENvcmVVc2VKSVQiKTsKKyNlbmRpZiAv
LyBDT01QSUxFUihHQ0MpICYmICFDT01QSUxFUihDTEFORykKKyAgICBSZXRhaW5QdHI8Q0ZCb29s
ZWFuUmVmPiBjYW5Vc2VKSVQoQWRvcHRDRiwgKENGQm9vbGVhblJlZilDRlByZWZlcmVuY2VzQ29w
eUFwcFZhbHVlKGNhblVzZUpJVEtleSwga0NGUHJlZmVyZW5jZXNDdXJyZW50QXBwbGljYXRpb24p
KTsKKyAgICBpZiAoY2FuVXNlSklUKQorICAgICAgICByZXR1cm4ga0NGQm9vbGVhblRydWUgPT0g
Y2FuVXNlSklULmdldCgpOworI2VuZGlmCisKKyNpZiBVU0UoQ0YpIHx8IE9TKFVOSVgpCisgICAg
Y2hhciogY2FuVXNlSklUU3RyaW5nID0gZ2V0ZW52KCJKYXZhU2NyaXB0Q29yZVVzZUpJVCIpOwor
ICAgIHJldHVybiAhY2FuVXNlSklUU3RyaW5nIHx8IGF0b2koY2FuVXNlSklUU3RyaW5nKTsKKyNl
bHNlCisgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKK30KKyNlbmRpZiAvLyBFTkFCTEUoIUFTU0VN
QkxFUikKKworSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cGUgZ2xvYmFs
RGF0YVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQorICAgIDogbV9hcGlMb2NrKGFkb3B0UmVmKG5l
dyBKU0xvY2sodGhpcykpKQorI2lmIEVOQUJMRShBU1NFTUJMRVIpCisgICAgLCBleGVjdXRhYmxl
QWxsb2NhdG9yKCp0aGlzKQorI2VuZGlmCisgICAgLCBoZWFwKHRoaXMsIGhlYXBUeXBlKQorICAg
ICwgZ2xvYmFsRGF0YVR5cGUoZ2xvYmFsRGF0YVR5cGUpCisgICAgLCBjbGllbnREYXRhKDApCisg
ICAgLCB0b3BDYWxsRnJhbWUoQ2FsbEZyYW1lOjpub0NhbGxlcigpKQorICAgICwgYXJyYXlDb25z
dHJ1Y3RvclRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmFycmF5Q29uc3RydWN0b3JUYWJs
ZSkpCisgICAgLCBhcnJheVByb3RvdHlwZVRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmFy
cmF5UHJvdG90eXBlVGFibGUpKQorICAgICwgYm9vbGVhblByb3RvdHlwZVRhYmxlKGZhc3ROZXc8
SGFzaFRhYmxlPihKU0M6OmJvb2xlYW5Qcm90b3R5cGVUYWJsZSkpCisgICAgLCBkYXRlVGFibGUo
ZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6ZGF0ZVRhYmxlKSkKKyAgICAsIGRhdGVDb25zdHJ1Y3Rv
clRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmRhdGVDb25zdHJ1Y3RvclRhYmxlKSkKKyAg
ICAsIGVycm9yUHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6ZXJyb3JQcm90
b3R5cGVUYWJsZSkpCisgICAgLCBnbG9iYWxPYmplY3RUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4o
SlNDOjpnbG9iYWxPYmplY3RUYWJsZSkpCisgICAgLCBqc29uVGFibGUoZmFzdE5ldzxIYXNoVGFi
bGU+KEpTQzo6anNvblRhYmxlKSkKKyAgICAsIG1hdGhUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4o
SlNDOjptYXRoVGFibGUpKQorICAgICwgbnVtYmVyQ29uc3RydWN0b3JUYWJsZShmYXN0TmV3PEhh
c2hUYWJsZT4oSlNDOjpudW1iZXJDb25zdHJ1Y3RvclRhYmxlKSkKKyAgICAsIG51bWJlclByb3Rv
dHlwZVRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6Om51bWJlclByb3RvdHlwZVRhYmxlKSkK
KyAgICAsIG9iamVjdENvbnN0cnVjdG9yVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6b2Jq
ZWN0Q29uc3RydWN0b3JUYWJsZSkpCisgICAgLCBwcml2YXRlTmFtZVByb3RvdHlwZVRhYmxlKGZh
c3ROZXc8SGFzaFRhYmxlPihKU0M6OnByaXZhdGVOYW1lUHJvdG90eXBlVGFibGUpKQorICAgICwg
cmVnRXhwVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6cmVnRXhwVGFibGUpKQorICAgICwg
cmVnRXhwQ29uc3RydWN0b3JUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpyZWdFeHBDb25z
dHJ1Y3RvclRhYmxlKSkKKyAgICAsIHJlZ0V4cFByb3RvdHlwZVRhYmxlKGZhc3ROZXc8SGFzaFRh
YmxlPihKU0M6OnJlZ0V4cFByb3RvdHlwZVRhYmxlKSkKKyAgICAsIHN0cmluZ0NvbnN0cnVjdG9y
VGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6c3RyaW5nQ29uc3RydWN0b3JUYWJsZSkpCisg
ICAgLCBpZGVudGlmaWVyVGFibGUoZ2xvYmFsRGF0YVR5cGUgPT0gRGVmYXVsdCA/IHd0ZlRocmVh
ZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkgOiBjcmVhdGVJZGVudGlmaWVyVGFibGUo
KSkKKyAgICAsIHByb3BlcnR5TmFtZXMobmV3IENvbW1vbklkZW50aWZpZXJzKHRoaXMpKQorICAg
ICwgZW1wdHlMaXN0KG5ldyBNYXJrZWRBcmd1bWVudEJ1ZmZlcikKKyAgICAsIHBhcnNlckFyZW5h
KGFkb3B0UHRyKG5ldyBQYXJzZXJBcmVuYSkpCisgICAgLCBrZXl3b3JkcyhhZG9wdFB0cihuZXcg
S2V5d29yZHModGhpcykpKQorICAgICwgaW50ZXJwcmV0ZXIoMCkKKyAgICAsIGpzQXJyYXlDbGFz
c0luZm8oJkpTQXJyYXk6OnNfaW5mbykKKyAgICAsIGpzRmluYWxPYmplY3RDbGFzc0luZm8oJkpT
RmluYWxPYmplY3Q6OnNfaW5mbykKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAsIHNpemVPZkxh
c3RTY3JhdGNoQnVmZmVyKDApCisjZW5kaWYKKyAgICAsIGR5bmFtaWNHbG9iYWxPYmplY3QoMCkK
KyAgICAsIGNhY2hlZFVUQ09mZnNldChRTmFOKQorICAgICwgbV9lbmFibGVkUHJvZmlsZXIoMCkK
KyAgICAsIG1fcmVnRXhwQ2FjaGUobmV3IFJlZ0V4cENhY2hlKHRoaXMpKQorI2lmIEVOQUJMRShS
RUdFWFBfVFJBQ0lORykKKyAgICAsIG1fcnRUcmFjZUxpc3QobmV3IFJUVHJhY2VMaXN0KCkpCisj
ZW5kaWYKKyNpZm5kZWYgTkRFQlVHCisgICAgLCBleGNsdXNpdmVUaHJlYWQoMCkKKyNlbmRpZgor
ICAgICwgbV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMoMCkKKyNpZiBFTkFCTEUoQVNTRU1C
TEVSKQorICAgICwgbV9jYW5Vc2VBc3NlbWJsZXIoZW5hYmxlQXNzZW1ibGVyKGV4ZWN1dGFibGVB
bGxvY2F0b3IpKQorI2VuZGlmCisjaWYgRU5BQkxFKEpJVCkKKyAgICAsIG1fY2FuVXNlSklUKG1f
Y2FuVXNlQXNzZW1ibGVyICYmIE9wdGlvbnM6OnVzZUpJVCgpKQorI2VuZGlmCisjaWYgRU5BQkxF
KFlBUlJfSklUKQorICAgICwgbV9jYW5Vc2VSZWdFeHBKSVQobV9jYW5Vc2VBc3NlbWJsZXIgJiYg
T3B0aW9uczo6dXNlUmVnRXhwSklUKCkpCisjZW5kaWYKKyNpZiBFTkFCTEUoR0NfVkFMSURBVElP
TikKKyAgICAsIG1faW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoMCkKKyNlbmRpZgorICAgICwgbV9p
bkRlZmluZU93blByb3BlcnR5KGZhbHNlKQorICAgICwgbV9jb2RlQ2FjaGUoQ29kZUNhY2hlOjpj
cmVhdGUoKSkKK3sKKyAgICBpbnRlcnByZXRlciA9IG5ldyBJbnRlcnByZXRlcigqdGhpcyk7CisK
KyAgICAvLyBOZWVkIHRvIGJlIGNhcmVmdWwgdG8ga2VlcCBldmVyeXRoaW5nIGNvbnNpc3RlbnQg
aGVyZQorICAgIEpTTG9ja0hvbGRlciBsb2NrKHRoaXMpOworICAgIElkZW50aWZpZXJUYWJsZSog
ZXhpc3RpbmdFbnRyeUlkZW50aWZpZXJUYWJsZSA9IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50
SWRlbnRpZmllclRhYmxlKGlkZW50aWZpZXJUYWJsZSk7CisgICAgc3RydWN0dXJlU3RydWN0dXJl
LnNldCgqdGhpcywgU3RydWN0dXJlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMpKTsKKyAgICBzdHJ1
Y3R1cmVSYXJlRGF0YVN0cnVjdHVyZS5zZXQoKnRoaXMsIFN0cnVjdHVyZVJhcmVEYXRhOjpjcmVh
dGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgZGVidWdnZXJBY3RpdmF0aW9u
U3RydWN0dXJlLnNldCgqdGhpcywgRGVidWdnZXJBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgdGVybWluYXRlZEV4ZWN1dGlvbkVycm9yU3RydWN0
dXJlLnNldCgqdGhpcywgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgc3RyaW5nU3RydWN0dXJlLnNldCgqdGhpcywgSlNT
dHJpbmc6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBub3RBbk9i
amVjdFN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTTm90QW5PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBwcm9wZXJ0eU5hbWVJdGVyYXRvclN0cnVjdHVyZS5z
ZXQoKnRoaXMsIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKKyAgICBnZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBHZXR0
ZXJTZXR0ZXI6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBhcGlX
cmFwcGVyU3RydWN0dXJlLnNldCgqdGhpcywgSlNBUElWYWx1ZVdyYXBwZXI6OmNyZWF0ZVN0cnVj
dHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBKU1Njb3BlU3RydWN0dXJlLnNldCgqdGhp
cywgSlNTY29wZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIGV4
ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBFeGVjdXRhYmxlQmFzZTo6Y3JlYXRlU3RydWN0
dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIG5hdGl2ZUV4ZWN1dGFibGVTdHJ1Y3R1cmUu
c2V0KCp0aGlzLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CisgICAgZXZhbEV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBFdmFsRXhl
Y3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHByb2dy
YW1FeGVjdXRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBmdW5jdGlvbkV4ZWN1dGFibGVT
dHJ1Y3R1cmUuc2V0KCp0aGlzLCBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKKyAgICByZWdFeHBTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBSZWdF
eHA6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBzaGFyZWRTeW1i
b2xUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFNoYXJlZFN5bWJvbFRhYmxlOjpjcmVhdGVTdHJ1
Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgc3RydWN0dXJlQ2hhaW5TdHJ1Y3R1cmUu
c2V0KCp0aGlzLCBTdHJ1Y3R1cmVDaGFpbjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOworICAgIHNwYXJzZUFycmF5VmFsdWVNYXBTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTcGFy
c2VBcnJheVZhbHVlTWFwOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Cisg
ICAgd2l0aFNjb3BlU3RydWN0dXJlLnNldCgqdGhpcywgSlNXaXRoU2NvcGU6OmNyZWF0ZVN0cnVj
dHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgdW5saW5rZWRQcm9ncmFtQ29kZUJs
b2NrU3RydWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgdW5saW5rZWRFdmFsQ29kZUJsb2Nr
U3RydWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRFdmFsQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0
cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZVN0cnVj
dHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlLnNl
dCgqdGhpcywgUHJvcGVydHlUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOworICAgIHNtYWxsU3RyaW5ncy5pbml0aWFsaXplQ29tbW9uU3RyaW5ncygqdGhpcyk7CisK
KyAgICB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElkZW50aWZpZXJUYWJsZShleGlzdGluZ0Vu
dHJ5SWRlbnRpZmllclRhYmxlKTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgaml0U3R1YnMgPSBh
ZG9wdFB0cihuZXcgSklUVGh1bmtzKCkpOworICAgIHBlcmZvcm1QbGF0Zm9ybVNwZWNpZmljSklU
QXNzZXJ0aW9ucyh0aGlzKTsKKyNlbmRpZgorICAgIAorICAgIGludGVycHJldGVyLT5pbml0aWFs
aXplKHRoaXMtPmNhblVzZUpJVCgpKTsKKyAgICAKKyNpZiBFTkFCTEUoSklUKQorICAgIGluaXRp
YWxpemVIb3N0Q2FsbFJldHVyblZhbHVlKCk7IC8vIFRoaXMgaXMgbmVlZGVkIHRvIGNvbnZpbmNl
IHRoZSBsaW5rZXIgbm90IHRvIGRyb3AgaG9zdCBjYWxsIHJldHVybiBzdXBwb3J0LgorI2VuZGlm
CisKKyAgICBoZWFwLm5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpOworCisgICAgTExJbnQ6OkRhdGE6
OnBlcmZvcm1Bc3NlcnRpb25zKCp0aGlzKTsKKyAgICAKKyAgICBpZiAoT3B0aW9uczo6ZW5hYmxl
UHJvZmlsZXIoKSkgeworICAgICAgICBtX3BlckJ5dGVjb2RlUHJvZmlsZXIgPSBhZG9wdFB0cihu
ZXcgUHJvZmlsZXI6OkRhdGFiYXNlKCp0aGlzKSk7CisKKyAgICAgICAgU3RyaW5nUHJpbnRTdHJl
YW0gcGF0aE91dDsKKyNpZiAhT1MoV0lOQ0UpCisgICAgICAgIGNvbnN0IGNoYXIqIHByb2ZpbGVy
UGF0aCA9IGdldGVudigiSlNDX1BST0ZJTEVSX1BBVEgiKTsKKyAgICAgICAgaWYgKHByb2ZpbGVy
UGF0aCkKKyAgICAgICAgICAgIHBhdGhPdXQucHJpbnQocHJvZmlsZXJQYXRoLCAiLyIpOworI2Vu
ZGlmCisgICAgICAgIHBhdGhPdXQucHJpbnQoIkpTQ1Byb2ZpbGUtIiwgZ2V0Q3VycmVudFByb2Nl
c3NJRCgpLCAiLSIsIG1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZGF0YWJhc2VJRCgpLCAiLmpzb24i
KTsKKyAgICAgICAgbV9wZXJCeXRlY29kZVByb2ZpbGVyLT5yZWdpc3RlclRvU2F2ZUF0RXhpdChw
YXRoT3V0LnRvQ1N0cmluZygpLmRhdGEoKSk7CisgICAgfQorCisjaWYgRU5BQkxFKERGR19KSVQp
CisgICAgaWYgKGNhblVzZUpJVCgpKQorICAgICAgICBtX2RmZ1N0YXRlID0gYWRvcHRQdHIobmV3
IERGRzo6TG9uZ0xpdmVkU3RhdGUoKSk7CisjZW5kaWYKK30KKworSlNHbG9iYWxEYXRhOjp+SlNH
bG9iYWxEYXRhKCkKK3sKKyAgICAvLyBDbGVhciB0aGlzIGZpcnN0IHRvIGVuc3VyZSB0aGF0IG5v
Ym9keSB0cmllcyB0byByZW1vdmUgdGhlbXNlbHZlcyBmcm9tIGl0LgorICAgIG1fcGVyQnl0ZWNv
ZGVQcm9maWxlci5jbGVhcigpOworICAgIAorICAgIEFTU0VSVChtX2FwaUxvY2stPmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdMb2NrKCkpOworICAgIG1fYXBpTG9jay0+d2lsbERlc3Ryb3lHbG9iYWxE
YXRhKHRoaXMpOworICAgIGhlYXAubGFzdENoYW5jZVRvRmluYWxpemUoKTsKKworICAgIGRlbGV0
ZSBpbnRlcnByZXRlcjsKKyNpZm5kZWYgTkRFQlVHCisgICAgaW50ZXJwcmV0ZXIgPSByZWludGVy
cHJldF9jYXN0PEludGVycHJldGVyKj4oMHhiYmFkYmVlZik7CisjZW5kaWYKKworICAgIGFycmF5
UHJvdG90eXBlVGFibGUtPmRlbGV0ZVRhYmxlKCk7CisgICAgYXJyYXlDb25zdHJ1Y3RvclRhYmxl
LT5kZWxldGVUYWJsZSgpOworICAgIGJvb2xlYW5Qcm90b3R5cGVUYWJsZS0+ZGVsZXRlVGFibGUo
KTsKKyAgICBkYXRlVGFibGUtPmRlbGV0ZVRhYmxlKCk7CisgICAgZGF0ZUNvbnN0cnVjdG9yVGFi
bGUtPmRlbGV0ZVRhYmxlKCk7CisgICAgZXJyb3JQcm90b3R5cGVUYWJsZS0+ZGVsZXRlVGFibGUo
KTsKKyAgICBnbG9iYWxPYmplY3RUYWJsZS0+ZGVsZXRlVGFibGUoKTsKKyAgICBqc29uVGFibGUt
PmRlbGV0ZVRhYmxlKCk7CisgICAgbWF0aFRhYmxlLT5kZWxldGVUYWJsZSgpOworICAgIG51bWJl
ckNvbnN0cnVjdG9yVGFibGUtPmRlbGV0ZVRhYmxlKCk7CisgICAgbnVtYmVyUHJvdG90eXBlVGFi
bGUtPmRlbGV0ZVRhYmxlKCk7CisgICAgb2JqZWN0Q29uc3RydWN0b3JUYWJsZS0+ZGVsZXRlVGFi
bGUoKTsKKyAgICBwcml2YXRlTmFtZVByb3RvdHlwZVRhYmxlLT5kZWxldGVUYWJsZSgpOworICAg
IHJlZ0V4cFRhYmxlLT5kZWxldGVUYWJsZSgpOworICAgIHJlZ0V4cENvbnN0cnVjdG9yVGFibGUt
PmRlbGV0ZVRhYmxlKCk7CisgICAgcmVnRXhwUHJvdG90eXBlVGFibGUtPmRlbGV0ZVRhYmxlKCk7
CisgICAgc3RyaW5nQ29uc3RydWN0b3JUYWJsZS0+ZGVsZXRlVGFibGUoKTsKKworICAgIGZhc3RE
ZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihhcnJheUNvbnN0cnVjdG9yVGFibGUpKTsKKyAg
ICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oYXJyYXlQcm90b3R5cGVUYWJsZSkp
OworICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihib29sZWFuUHJvdG90eXBl
VGFibGUpKTsKKyAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oZGF0ZVRhYmxl
KSk7CisgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGRhdGVDb25zdHJ1Y3Rv
clRhYmxlKSk7CisgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGVycm9yUHJv
dG90eXBlVGFibGUpKTsKKyAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oZ2xv
YmFsT2JqZWN0VGFibGUpKTsKKyAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4o
anNvblRhYmxlKSk7CisgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KG1hdGhU
YWJsZSkpOworICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihudW1iZXJDb25z
dHJ1Y3RvclRhYmxlKSk7CisgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KG51
bWJlclByb3RvdHlwZVRhYmxlKSk7CisgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJs
ZSo+KG9iamVjdENvbnN0cnVjdG9yVGFibGUpKTsKKyAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8
SGFzaFRhYmxlKj4ocHJpdmF0ZU5hbWVQcm90b3R5cGVUYWJsZSkpOworICAgIGZhc3REZWxldGUo
Y29uc3RfY2FzdDxIYXNoVGFibGUqPihyZWdFeHBUYWJsZSkpOworICAgIGZhc3REZWxldGUoY29u
c3RfY2FzdDxIYXNoVGFibGUqPihyZWdFeHBDb25zdHJ1Y3RvclRhYmxlKSk7CisgICAgZmFzdERl
bGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KHJlZ0V4cFByb3RvdHlwZVRhYmxlKSk7CisgICAg
ZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KHN0cmluZ0NvbnN0cnVjdG9yVGFibGUp
KTsKKworICAgIGRlbGV0ZSBlbXB0eUxpc3Q7CisKKyAgICBkZWxldGUgcHJvcGVydHlOYW1lczsK
KyAgICBpZiAoZ2xvYmFsRGF0YVR5cGUgIT0gRGVmYXVsdCkKKyAgICAgICAgZGVsZXRlSWRlbnRp
ZmllclRhYmxlKGlkZW50aWZpZXJUYWJsZSk7CisKKyAgICBkZWxldGUgY2xpZW50RGF0YTsKKyAg
ICBkZWxldGUgbV9yZWdFeHBDYWNoZTsKKyNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCisgICAg
ZGVsZXRlIG1fcnRUcmFjZUxpc3Q7CisjZW5kaWYKKworI2lmIEVOQUJMRShERkdfSklUKQorICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzY3JhdGNoQnVmZmVycy5zaXplKCk7ICsraSkKKyAg
ICAgICAgZmFzdEZyZWUoc2NyYXRjaEJ1ZmZlcnNbaV0pOworI2VuZGlmCit9CisKK1Bhc3NSZWZQ
dHI8SlNHbG9iYWxEYXRhPiBKU0dsb2JhbERhdGE6OmNyZWF0ZUNvbnRleHRHcm91cChIZWFwVHlw
ZSBoZWFwVHlwZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpTR2xvYmFsRGF0YShBUElD
b250ZXh0R3JvdXAsIGhlYXBUeXBlKSk7Cit9CisKK1Bhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBK
U0dsb2JhbERhdGE6OmNyZWF0ZShIZWFwVHlwZSBoZWFwVHlwZSkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEpTR2xvYmFsRGF0YShEZWZhdWx0LCBoZWFwVHlwZSkpOworfQorCitQYXNzUmVm
UHRyPEpTR2xvYmFsRGF0YT4gSlNHbG9iYWxEYXRhOjpjcmVhdGVMZWFrZWQoSGVhcFR5cGUgaGVh
cFR5cGUpCit7CisgICAgcmV0dXJuIGNyZWF0ZShoZWFwVHlwZSk7Cit9CisKK2Jvb2wgSlNHbG9i
YWxEYXRhOjpzaGFyZWRJbnN0YW5jZUV4aXN0cygpCit7CisgICAgcmV0dXJuIHNoYXJlZEluc3Rh
bmNlSW50ZXJuYWwoKTsKK30KKworSlNHbG9iYWxEYXRhJiBKU0dsb2JhbERhdGE6OnNoYXJlZElu
c3RhbmNlKCkKK3sKKyAgICBHbG9iYWxKU0xvY2sgZ2xvYmFsTG9jazsKKyAgICBKU0dsb2JhbERh
dGEqJiBpbnN0YW5jZSA9IHNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKTsKKyAgICBpZiAoIWluc3Rh
bmNlKSB7CisgICAgICAgIGluc3RhbmNlID0gYWRvcHRSZWYobmV3IEpTR2xvYmFsRGF0YShBUElT
aGFyZWQsIFNtYWxsSGVhcCkpLmxlYWtSZWYoKTsKKyAgICAgICAgaW5zdGFuY2UtPm1ha2VVc2Fi
bGVGcm9tTXVsdGlwbGVUaHJlYWRzKCk7CisgICAgfQorICAgIHJldHVybiAqaW5zdGFuY2U7Cit9
CisKK0pTR2xvYmFsRGF0YSomIEpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuY2VJbnRlcm5hbCgp
Cit7CisgICAgc3RhdGljIEpTR2xvYmFsRGF0YSogc2hhcmVkSW5zdGFuY2U7CisgICAgcmV0dXJu
IHNoYXJlZEluc3RhbmNlOworfQorCisjaWYgRU5BQkxFKEpJVCkKK3N0YXRpYyBUaHVua0dlbmVy
YXRvciB0aHVua0dlbmVyYXRvckZvckludHJpbnNpYyhJbnRyaW5zaWMgaW50cmluc2ljKQorewor
ICAgIHN3aXRjaCAoaW50cmluc2ljKSB7CisgICAgY2FzZSBDaGFyQ29kZUF0SW50cmluc2ljOgor
ICAgICAgICByZXR1cm4gY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yOworICAgIGNhc2UgQ2hhckF0
SW50cmluc2ljOgorICAgICAgICByZXR1cm4gY2hhckF0VGh1bmtHZW5lcmF0b3I7CisgICAgY2Fz
ZSBGcm9tQ2hhckNvZGVJbnRyaW5zaWM6CisgICAgICAgIHJldHVybiBmcm9tQ2hhckNvZGVUaHVu
a0dlbmVyYXRvcjsKKyAgICBjYXNlIFNxcnRJbnRyaW5zaWM6CisgICAgICAgIHJldHVybiBzcXJ0
VGh1bmtHZW5lcmF0b3I7CisgICAgY2FzZSBQb3dJbnRyaW5zaWM6CisgICAgICAgIHJldHVybiBw
b3dUaHVua0dlbmVyYXRvcjsKKyAgICBjYXNlIEFic0ludHJpbnNpYzoKKyAgICAgICAgcmV0dXJu
IGFic1RodW5rR2VuZXJhdG9yOworICAgIGNhc2UgRmxvb3JJbnRyaW5zaWM6CisgICAgICAgIHJl
dHVybiBmbG9vclRodW5rR2VuZXJhdG9yOworICAgIGNhc2UgQ2VpbEludHJpbnNpYzoKKyAgICAg
ICAgcmV0dXJuIGNlaWxUaHVua0dlbmVyYXRvcjsKKyAgICBjYXNlIFJvdW5kSW50cmluc2ljOgor
ICAgICAgICByZXR1cm4gcm91bmRUaHVua0dlbmVyYXRvcjsKKyAgICBjYXNlIEV4cEludHJpbnNp
YzoKKyAgICAgICAgcmV0dXJuIGV4cFRodW5rR2VuZXJhdG9yOworICAgIGNhc2UgTG9nSW50cmlu
c2ljOgorICAgICAgICByZXR1cm4gbG9nVGh1bmtHZW5lcmF0b3I7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitOYXRpdmVFeGVjdXRhYmxlKiBKU0dsb2JhbERh
dGE6OmdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rp
b24gY29uc3RydWN0b3IpCit7CisgICAgcmV0dXJuIGppdFN0dWJzLT5ob3N0RnVuY3Rpb25TdHVi
KHRoaXMsIGZ1bmN0aW9uLCBjb25zdHJ1Y3Rvcik7Cit9CitOYXRpdmVFeGVjdXRhYmxlKiBKU0ds
b2JhbERhdGE6OmdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgSW50cmlu
c2ljIGludHJpbnNpYykKK3sKKyAgICBBU1NFUlQoY2FuVXNlSklUKCkpOworICAgIHJldHVybiBq
aXRTdHVicy0+aG9zdEZ1bmN0aW9uU3R1Yih0aGlzLCBmdW5jdGlvbiwgaW50cmluc2ljICE9IE5v
SW50cmluc2ljID8gdGh1bmtHZW5lcmF0b3JGb3JJbnRyaW5zaWMoaW50cmluc2ljKSA6IDAsIGlu
dHJpbnNpYyk7Cit9CisKKyNlbHNlIC8vICFFTkFCTEUoSklUKQorTmF0aXZlRXhlY3V0YWJsZSog
SlNHbG9iYWxEYXRhOjpnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE5h
dGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQoreworICAgIHJldHVybiBOYXRpdmVFeGVjdXRhYmxl
OjpjcmVhdGUoKnRoaXMsIGZ1bmN0aW9uLCBjb25zdHJ1Y3Rvcik7Cit9CisjZW5kaWYgLy8gIUVO
QUJMRShKSVQpCisKK0pTR2xvYmFsRGF0YTo6Q2xpZW50RGF0YTo6fkNsaWVudERhdGEoKQorewor
fQorCit2b2lkIEpTR2xvYmFsRGF0YTo6cmVzZXREYXRlQ2FjaGUoKQoreworICAgIGNhY2hlZFVU
Q09mZnNldCA9IFFOYU47CisgICAgZHN0T2Zmc2V0Q2FjaGUucmVzZXQoKTsKKyAgICBjYWNoZWRE
YXRlU3RyaW5nID0gU3RyaW5nKCk7CisgICAgY2FjaGVkRGF0ZVN0cmluZ1ZhbHVlID0gUU5hTjsK
KyAgICBkYXRlSW5zdGFuY2VDYWNoZS5yZXNldCgpOworfQorCit2b2lkIEpTR2xvYmFsRGF0YTo6
c3RhcnRTYW1wbGluZygpCit7CisgICAgaW50ZXJwcmV0ZXItPnN0YXJ0U2FtcGxpbmcoKTsKK30K
Kwordm9pZCBKU0dsb2JhbERhdGE6OnN0b3BTYW1wbGluZygpCit7CisgICAgaW50ZXJwcmV0ZXIt
PnN0b3BTYW1wbGluZygpOworfQorCit2b2lkIEpTR2xvYmFsRGF0YTo6ZGlzY2FyZEFsbENvZGUo
KQoreworICAgIG1fY29kZUNhY2hlLT5jbGVhcigpOworICAgIGhlYXAuZGVsZXRlQWxsQ29tcGls
ZWRDb2RlKCk7CisgICAgaGVhcC5yZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpOworfQorCit2
b2lkIEpTR2xvYmFsRGF0YTo6ZHVtcFNhbXBsZURhdGEoRXhlY1N0YXRlKiBleGVjKQoreworICAg
IGludGVycHJldGVyLT5kdW1wU2FtcGxlRGF0YShleGVjKTsKKyNpZiBFTkFCTEUoQVNTRU1CTEVS
KQorICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmR1bXBQcm9maWxlKCk7CisjZW5kaWYKK30KKwor
U291cmNlUHJvdmlkZXJDYWNoZSogSlNHbG9iYWxEYXRhOjphZGRTb3VyY2VQcm92aWRlckNhY2hl
KFNvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlcikKK3sKKyAgICBTb3VyY2VQcm92aWRlckNh
Y2hlTWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gc291cmNlUHJvdmlkZXJDYWNoZU1hcC5hZGQo
c291cmNlUHJvdmlkZXIsIDApOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAg
ICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFkb3B0UmVmKG5ldyBTb3VyY2VQcm92aWRl
ckNhY2hlKTsKKyAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKK30K
Kwordm9pZCBKU0dsb2JhbERhdGE6OmNsZWFyU291cmNlUHJvdmlkZXJDYWNoZXMoKQoreworICAg
IHNvdXJjZVByb3ZpZGVyQ2FjaGVNYXAuY2xlYXIoKTsKK30KKworc3RydWN0IFN0YWNrUHJlc2Vy
dmluZ1JlY29tcGlsZXIgOiBwdWJsaWMgTWFya2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKKyAgICBI
YXNoU2V0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+IGN1cnJlbnRseUV4ZWN1dGluZ0Z1bmN0aW9uczsK
KyAgICB2b2lkIG9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgaWYgKCFj
ZWxsLT5pbmhlcml0cygmRnVuY3Rpb25FeGVjdXRhYmxlOjpzX2luZm8pKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CisgICAgICAgIGlmIChjdXJyZW50bHlFeGVjdXRp
bmdGdW5jdGlvbnMuY29udGFpbnMoZXhlY3V0YWJsZSkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGV4ZWN1dGFibGUtPmNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCk7CisgICAgfQorfTsK
Kwordm9pZCBKU0dsb2JhbERhdGE6OnJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KCkKK3sKKyAgICBp
ZiAoZHluYW1pY0dsb2JhbE9iamVjdCkgeworICAgICAgICBTdGFja1ByZXNlcnZpbmdSZWNvbXBp
bGVyIHJlY29tcGlsZXI7CisgICAgICAgIEhhc2hTZXQ8SlNDZWxsKj4gcm9vdHM7CisgICAgICAg
IGhlYXAuY2Fub25pY2FsaXplQ2VsbExpdmVuZXNzRGF0YSgpOworICAgICAgICBoZWFwLmdldENv
bnNlcnZhdGl2ZVJlZ2lzdGVyUm9vdHMocm9vdHMpOworICAgICAgICBIYXNoU2V0PEpTQ2VsbCo+
OjppdGVyYXRvciBlbmQgPSByb290cy5lbmQoKTsKKyAgICAgICAgZm9yIChIYXNoU2V0PEpTQ2Vs
bCo+OjppdGVyYXRvciBwdHIgPSByb290cy5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikgewor
ICAgICAgICAgICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IDA7CisgICAgICAgICAg
ICBKU0NlbGwqIGNlbGwgPSAqcHRyOworICAgICAgICAgICAgaWYgKGNlbGwtPmluaGVyaXRzKCZT
Y3JpcHRFeGVjdXRhYmxlOjpzX2luZm8pKQorICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBz
dGF0aWNfY2FzdDxTY3JpcHRFeGVjdXRhYmxlKj4oKnB0cik7CisgICAgICAgICAgICBlbHNlIGlm
IChjZWxsLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6c19pbmZvKSkgeworICAgICAgICAgICAgICAg
IEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPigqcHRyKTsKKyAgICAg
ICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+
anNFeGVjdXRhYmxlKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIEFTU0VSVChleGVjdXRhYmxlLT5pbmhlcml0cygmU2NyaXB0RXhl
Y3V0YWJsZTo6c19pbmZvKSk7CisgICAgICAgICAgICBleGVjdXRhYmxlLT51bmxpbmtDYWxscygp
OworICAgICAgICAgICAgaWYgKGV4ZWN1dGFibGUtPmluaGVyaXRzKCZGdW5jdGlvbkV4ZWN1dGFi
bGU6OnNfaW5mbykpCisgICAgICAgICAgICAgICAgcmVjb21waWxlci5jdXJyZW50bHlFeGVjdXRp
bmdGdW5jdGlvbnMuYWRkKHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFi
bGUpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgfQorICAgICAgICBoZWFwLm9iamVjdFNw
YWNlKCkuZm9yRWFjaExpdmVDZWxsPFN0YWNrUHJlc2VydmluZ1JlY29tcGlsZXI+KHJlY29tcGls
ZXIpOworICAgIH0KKyAgICBtX3JlZ0V4cENhY2hlLT5pbnZhbGlkYXRlQ29kZSgpOworICAgIGhl
YXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKK30KKyAgICAKK3ZvaWQgcmVsZWFzZUV4ZWN1dGFibGVN
ZW1vcnkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIGdsb2JhbERhdGEucmVsZWFz
ZUV4ZWN1dGFibGVNZW1vcnkoKTsKK30KKworI2lmIEVOQUJMRShERkdfSklUKQordm9pZCBKU0ds
b2JhbERhdGE6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25z
ZXJ2YXRpdmVSb290cykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNjcmF0Y2hCdWZm
ZXJzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIg
PSBzY3JhdGNoQnVmZmVyc1tpXTsKKyAgICAgICAgaWYgKHNjcmF0Y2hCdWZmZXItPmFjdGl2ZUxl
bmd0aCgpKSB7CisgICAgICAgICAgICB2b2lkKiBidWZmZXJTdGFydCA9IHNjcmF0Y2hCdWZmZXIt
PmRhdGFCdWZmZXIoKTsKKyAgICAgICAgICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChidWZmZXJT
dGFydCwgc3RhdGljX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGNoYXIqPihidWZmZXJTdGFydCkg
KyBzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5ndGgoKSkpOworICAgICAgICB9CisgICAgfQorfQor
I2VuZGlmCisKKyNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCit2b2lkIEpTR2xvYmFsRGF0YTo6
YWRkUmVnRXhwVG9UcmFjZShSZWdFeHAqIHJlZ0V4cCkKK3sKKyAgICBtX3J0VHJhY2VMaXN0LT5h
ZGQocmVnRXhwKTsKK30KKwordm9pZCBKU0dsb2JhbERhdGE6OmR1bXBSZWdFeHBUcmFjZSgpCit7
CisgICAgLy8gVGhlIGZpcnN0IFJlZ0V4cCBvYmplY3QgaXMgaWdub3JlZC4gIEl0IGlzIGNyZWF0
ZSBieSB0aGUgUmVnRXhwUHJvdG90eXBlIGN0b3IgYW5kIG5vdCB1c2VkLgorICAgIFJUVHJhY2VM
aXN0OjppdGVyYXRvciBpdGVyID0gKyttX3J0VHJhY2VMaXN0LT5iZWdpbigpOworICAgIAorICAg
IGlmIChpdGVyICE9IG1fcnRUcmFjZUxpc3QtPmVuZCgpKSB7CisgICAgICAgIGRhdGFMb2dGKCJc
blJlZ0V4cCBUcmFjaW5nXG4iKTsKKyAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoKCkgICAgbWF0
Y2hlc1xuIik7CisgICAgICAgIGRhdGFMb2dGKCJSZWd1bGFyIEV4cHJlc3Npb24gICAgICAgICAg
ICAgICAgICAgICAgICAgIEpJVCBBZGRyZXNzICAgICAgY2FsbHMgICAgICBmb3VuZFxuIik7Cisg
ICAgICAgIGRhdGFMb2dGKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ky0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tXG4iKTsKKyAgICAKKyAgICAg
ICAgdW5zaWduZWQgcmVDb3VudCA9IDA7CisgICAgCisgICAgICAgIGZvciAoOyBpdGVyICE9IG1f
cnRUcmFjZUxpc3QtPmVuZCgpOyArK2l0ZXIsICsrcmVDb3VudCkKKyAgICAgICAgICAgICgqaXRl
ciktPnByaW50VHJhY2VEYXRhKCk7CisKKyAgICAgICAgZGF0YUxvZ0YoIiVkIFJlZ3VsYXIgRXhw
cmVzc2lvbnNcbiIsIHJlQ291bnQpOworICAgIH0KKyAgICAKKyAgICBtX3J0VHJhY2VMaXN0LT5j
bGVhcigpOworfQorI2Vsc2UKK3ZvaWQgSlNHbG9iYWxEYXRhOjpkdW1wUmVnRXhwVHJhY2UoKQor
eworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAgKi8KIAog
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUg
IlZNLmgiCiAKICNpbmNsdWRlICJBcmdMaXN0LmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCkBA
IC0xMzMsMTMgKzEzMywxMyBAQCBzdGF0aWMgYm9vbCBlbmFibGVBc3NlbWJsZXIoRXhlY3V0YWJs
ZUFsCiB9CiAjZW5kaWYgLy8gRU5BQkxFKCFBU1NFTUJMRVIpCiAKLUpTR2xvYmFsRGF0YTo6SlNH
bG9iYWxEYXRhKEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFUeXBlLCBIZWFwVHlwZSBoZWFwVHlw
ZSkKK1ZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICA6IG1fYXBp
TG9jayhhZG9wdFJlZihuZXcgSlNMb2NrKHRoaXMpKSkKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQog
ICAgICwgZXhlY3V0YWJsZUFsbG9jYXRvcigqdGhpcykKICNlbmRpZgogICAgICwgaGVhcCh0aGlz
LCBoZWFwVHlwZSkKLSAgICAsIGdsb2JhbERhdGFUeXBlKGdsb2JhbERhdGFUeXBlKQorICAgICwg
dm1UeXBlKHZtVHlwZSkKICAgICAsIGNsaWVudERhdGEoMCkKICAgICAsIHRvcENhbGxGcmFtZShD
YWxsRnJhbWU6Om5vQ2FsbGVyKCkpCiAgICAgLCBhcnJheUNvbnN0cnVjdG9yVGFibGUoZmFzdE5l
dzxIYXNoVGFibGU+KEpTQzo6YXJyYXlDb25zdHJ1Y3RvclRhYmxlKSkKQEAgLTE1OSw3ICsxNTks
NyBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAgICAgLCByZWdF
eHBDb25zdHJ1Y3RvclRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OnJlZ0V4cENvbnN0cnVj
dG9yVGFibGUpKQogICAgICwgcmVnRXhwUHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+
KEpTQzo6cmVnRXhwUHJvdG90eXBlVGFibGUpKQogICAgICwgc3RyaW5nQ29uc3RydWN0b3JUYWJs
ZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpzdHJpbmdDb25zdHJ1Y3RvclRhYmxlKSkKLSAgICAs
IGlkZW50aWZpZXJUYWJsZShnbG9iYWxEYXRhVHlwZSA9PSBEZWZhdWx0ID8gd3RmVGhyZWFkRGF0
YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSA6IGNyZWF0ZUlkZW50aWZpZXJUYWJsZSgpKQor
ICAgICwgaWRlbnRpZmllclRhYmxlKHZtVHlwZSA9PSBEZWZhdWx0ID8gd3RmVGhyZWFkRGF0YSgp
LmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSA6IGNyZWF0ZUlkZW50aWZpZXJUYWJsZSgpKQogICAg
ICwgcHJvcGVydHlOYW1lcyhuZXcgQ29tbW9uSWRlbnRpZmllcnModGhpcykpCiAgICAgLCBlbXB0
eUxpc3QobmV3IE1hcmtlZEFyZ3VtZW50QnVmZmVyKQogICAgICwgcGFyc2VyQXJlbmEoYWRvcHRQ
dHIobmV3IFBhcnNlckFyZW5hKSkKQEAgLTI2NCw3ICsyNjQsNyBAQCBKU0dsb2JhbERhdGE6OkpT
R2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAjZW5kaWYKIH0KIAotSlNHbG9iYWxEYXRhOjp+SlNH
bG9iYWxEYXRhKCkKK1ZNOjp+Vk0oKQogewogICAgIC8vIENsZWFyIHRoaXMgZmlyc3QgdG8gZW5z
dXJlIHRoYXQgbm9ib2R5IHRyaWVzIHRvIHJlbW92ZSB0aGVtc2VsdmVzIGZyb20gaXQuCiAgICAg
bV9wZXJCeXRlY29kZVByb2ZpbGVyLmNsZWFyKCk7CkBAIC0zMTcsNyArMzE3LDcgQEAgSlNHbG9i
YWxEYXRhOjp+SlNHbG9iYWxEYXRhKCkKICAgICBkZWxldGUgZW1wdHlMaXN0OwogCiAgICAgZGVs
ZXRlIHByb3BlcnR5TmFtZXM7Ci0gICAgaWYgKGdsb2JhbERhdGFUeXBlICE9IERlZmF1bHQpCisg
ICAgaWYgKHZtVHlwZSAhPSBEZWZhdWx0KQogICAgICAgICBkZWxldGVJZGVudGlmaWVyVGFibGUo
aWRlbnRpZmllclRhYmxlKTsKIAogICAgIGRlbGV0ZSBjbGllbnREYXRhOwpAQCAtMzMyLDQwICsz
MzIsNDAgQEAgSlNHbG9iYWxEYXRhOjp+SlNHbG9iYWxEYXRhKCkKICNlbmRpZgogfQogCi1QYXNz
UmVmUHRyPEpTR2xvYmFsRGF0YT4gSlNHbG9iYWxEYXRhOjpjcmVhdGVDb250ZXh0R3JvdXAoSGVh
cFR5cGUgaGVhcFR5cGUpCitQYXNzUmVmUHRyPFZNPiBWTTo6Y3JlYXRlQ29udGV4dEdyb3VwKEhl
YXBUeXBlIGhlYXBUeXBlKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRh
KEFQSUNvbnRleHRHcm91cCwgaGVhcFR5cGUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFZN
KEFQSUNvbnRleHRHcm91cCwgaGVhcFR5cGUpKTsKIH0KIAotUGFzc1JlZlB0cjxKU0dsb2JhbERh
dGE+IEpTR2xvYmFsRGF0YTo6Y3JlYXRlKEhlYXBUeXBlIGhlYXBUeXBlKQorUGFzc1JlZlB0cjxW
TT4gVk06OmNyZWF0ZShIZWFwVHlwZSBoZWFwVHlwZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEpTR2xvYmFsRGF0YShEZWZhdWx0LCBoZWFwVHlwZSkpOworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgVk0oRGVmYXVsdCwgaGVhcFR5cGUpKTsKIH0KIAotUGFzc1JlZlB0cjxKU0dsb2JhbERh
dGE+IEpTR2xvYmFsRGF0YTo6Y3JlYXRlTGVha2VkKEhlYXBUeXBlIGhlYXBUeXBlKQorUGFzc1Jl
ZlB0cjxWTT4gVk06OmNyZWF0ZUxlYWtlZChIZWFwVHlwZSBoZWFwVHlwZSkKIHsKICAgICByZXR1
cm4gY3JlYXRlKGhlYXBUeXBlKTsKIH0KIAotYm9vbCBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3Rh
bmNlRXhpc3RzKCkKK2Jvb2wgVk06OnNoYXJlZEluc3RhbmNlRXhpc3RzKCkKIHsKICAgICByZXR1
cm4gc2hhcmVkSW5zdGFuY2VJbnRlcm5hbCgpOwogfQogCi1KU0dsb2JhbERhdGEmIEpTR2xvYmFs
RGF0YTo6c2hhcmVkSW5zdGFuY2UoKQorVk0mIFZNOjpzaGFyZWRJbnN0YW5jZSgpCiB7CiAgICAg
R2xvYmFsSlNMb2NrIGdsb2JhbExvY2s7Ci0gICAgSlNHbG9iYWxEYXRhKiYgaW5zdGFuY2UgPSBz
aGFyZWRJbnN0YW5jZUludGVybmFsKCk7CisgICAgVk0qJiBpbnN0YW5jZSA9IHNoYXJlZEluc3Rh
bmNlSW50ZXJuYWwoKTsKICAgICBpZiAoIWluc3RhbmNlKSB7Ci0gICAgICAgIGluc3RhbmNlID0g
YWRvcHRSZWYobmV3IEpTR2xvYmFsRGF0YShBUElTaGFyZWQsIFNtYWxsSGVhcCkpLmxlYWtSZWYo
KTsKKyAgICAgICAgaW5zdGFuY2UgPSBhZG9wdFJlZihuZXcgVk0oQVBJU2hhcmVkLCBTbWFsbEhl
YXApKS5sZWFrUmVmKCk7CiAgICAgICAgIGluc3RhbmNlLT5tYWtlVXNhYmxlRnJvbU11bHRpcGxl
VGhyZWFkcygpOwogICAgIH0KICAgICByZXR1cm4gKmluc3RhbmNlOwogfQogCi1KU0dsb2JhbERh
dGEqJiBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKQorVk0qJiBWTTo6c2hh
cmVkSW5zdGFuY2VJbnRlcm5hbCgpCiB7Ci0gICAgc3RhdGljIEpTR2xvYmFsRGF0YSogc2hhcmVk
SW5zdGFuY2U7CisgICAgc3RhdGljIFZNKiBzaGFyZWRJbnN0YW5jZTsKICAgICByZXR1cm4gc2hh
cmVkSW5zdGFuY2U7CiB9CiAKQEAgLTQwMCwyOCArNDAwLDI4IEBAIHN0YXRpYyBUaHVua0dlbmVy
YXRvciB0aHVua0dlbmVyYXRvckZvckkKICAgICB9CiB9CiAKLU5hdGl2ZUV4ZWN1dGFibGUqIEpT
R2xvYmFsRGF0YTo6Z2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRp
dmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKK05hdGl2ZUV4ZWN1dGFibGUqIFZNOjpnZXRIb3N0RnVu
Y3Rpb24oTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9y
KQogewogICAgIHJldHVybiBqaXRTdHVicy0+aG9zdEZ1bmN0aW9uU3R1Yih0aGlzLCBmdW5jdGlv
biwgY29uc3RydWN0b3IpOwogfQotTmF0aXZlRXhlY3V0YWJsZSogSlNHbG9iYWxEYXRhOjpnZXRI
b3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIEludHJpbnNpYyBpbnRyaW5zaWMp
CitOYXRpdmVFeGVjdXRhYmxlKiBWTTo6Z2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1
bmN0aW9uLCBJbnRyaW5zaWMgaW50cmluc2ljKQogewogICAgIEFTU0VSVChjYW5Vc2VKSVQoKSk7
CiAgICAgcmV0dXJuIGppdFN0dWJzLT5ob3N0RnVuY3Rpb25TdHViKHRoaXMsIGZ1bmN0aW9uLCBp
bnRyaW5zaWMgIT0gTm9JbnRyaW5zaWMgPyB0aHVua0dlbmVyYXRvckZvckludHJpbnNpYyhpbnRy
aW5zaWMpIDogMCwgaW50cmluc2ljKTsKIH0KIAogI2Vsc2UgLy8gIUVOQUJMRShKSVQpCi1OYXRp
dmVFeGVjdXRhYmxlKiBKU0dsb2JhbERhdGE6OmdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlv
biBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpCitOYXRpdmVFeGVjdXRhYmxl
KiBWTTo6Z2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5j
dGlvbiBjb25zdHJ1Y3RvcikKIHsKICAgICByZXR1cm4gTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRl
KCp0aGlzLCBmdW5jdGlvbiwgY29uc3RydWN0b3IpOwogfQogI2VuZGlmIC8vICFFTkFCTEUoSklU
KQogCi1KU0dsb2JhbERhdGE6OkNsaWVudERhdGE6On5DbGllbnREYXRhKCkKK1ZNOjpDbGllbnRE
YXRhOjp+Q2xpZW50RGF0YSgpCiB7CiB9CiAKLXZvaWQgSlNHbG9iYWxEYXRhOjpyZXNldERhdGVD
YWNoZSgpCit2b2lkIFZNOjpyZXNldERhdGVDYWNoZSgpCiB7CiAgICAgY2FjaGVkVVRDT2Zmc2V0
ID0gUU5hTjsKICAgICBkc3RPZmZzZXRDYWNoZS5yZXNldCgpOwpAQCAtNDMwLDI0ICs0MzAsMjQg
QEAgdm9pZCBKU0dsb2JhbERhdGE6OnJlc2V0RGF0ZUNhY2hlKCkKICAgICBkYXRlSW5zdGFuY2VD
YWNoZS5yZXNldCgpOwogfQogCi12b2lkIEpTR2xvYmFsRGF0YTo6c3RhcnRTYW1wbGluZygpCit2
b2lkIFZNOjpzdGFydFNhbXBsaW5nKCkKIHsKICAgICBpbnRlcnByZXRlci0+c3RhcnRTYW1wbGlu
ZygpOwogfQogCi12b2lkIEpTR2xvYmFsRGF0YTo6c3RvcFNhbXBsaW5nKCkKK3ZvaWQgVk06OnN0
b3BTYW1wbGluZygpCiB7CiAgICAgaW50ZXJwcmV0ZXItPnN0b3BTYW1wbGluZygpOwogfQogCi12
b2lkIEpTR2xvYmFsRGF0YTo6ZGlzY2FyZEFsbENvZGUoKQordm9pZCBWTTo6ZGlzY2FyZEFsbENv
ZGUoKQogewogICAgIG1fY29kZUNhY2hlLT5jbGVhcigpOwogICAgIGhlYXAuZGVsZXRlQWxsQ29t
cGlsZWRDb2RlKCk7CiAgICAgaGVhcC5yZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpOwogfQog
Ci12b2lkIEpTR2xvYmFsRGF0YTo6ZHVtcFNhbXBsZURhdGEoRXhlY1N0YXRlKiBleGVjKQordm9p
ZCBWTTo6ZHVtcFNhbXBsZURhdGEoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGludGVycHJldGVy
LT5kdW1wU2FtcGxlRGF0YShleGVjKTsKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQpAQCAtNDU1LDcg
KzQ1NSw3IEBAIHZvaWQgSlNHbG9iYWxEYXRhOjpkdW1wU2FtcGxlRGF0YShFeGVjU3QKICNlbmRp
ZgogfQogCi1Tb3VyY2VQcm92aWRlckNhY2hlKiBKU0dsb2JhbERhdGE6OmFkZFNvdXJjZVByb3Zp
ZGVyQ2FjaGUoU291cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVyKQorU291cmNlUHJvdmlkZXJD
YWNoZSogVk06OmFkZFNvdXJjZVByb3ZpZGVyQ2FjaGUoU291cmNlUHJvdmlkZXIqIHNvdXJjZVBy
b3ZpZGVyKQogewogICAgIFNvdXJjZVByb3ZpZGVyQ2FjaGVNYXA6OkFkZFJlc3VsdCBhZGRSZXN1
bHQgPSBzb3VyY2VQcm92aWRlckNhY2hlTWFwLmFkZChzb3VyY2VQcm92aWRlciwgMCk7CiAgICAg
aWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQpAQCAtNDYzLDcgKzQ2Myw3IEBAIFNvdXJjZVByb3Zp
ZGVyQ2FjaGUqIEpTR2xvYmFsRGF0YTo6YWRkU28KICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZS5nZXQoKTsKIH0KIAotdm9pZCBKU0dsb2JhbERhdGE6OmNsZWFyU291cmNlUHJv
dmlkZXJDYWNoZXMoKQordm9pZCBWTTo6Y2xlYXJTb3VyY2VQcm92aWRlckNhY2hlcygpCiB7CiAg
ICAgc291cmNlUHJvdmlkZXJDYWNoZU1hcC5jbGVhcigpOwogfQpAQCAtNDgxLDcgKzQ4MSw3IEBA
IHN0cnVjdCBTdGFja1ByZXNlcnZpbmdSZWNvbXBpbGVyIDogcHVibGkKICAgICB9CiB9OwogCi12
b2lkIEpTR2xvYmFsRGF0YTo6cmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoKQordm9pZCBWTTo6cmVs
ZWFzZUV4ZWN1dGFibGVNZW1vcnkoKQogewogICAgIGlmIChkeW5hbWljR2xvYmFsT2JqZWN0KSB7
CiAgICAgICAgIFN0YWNrUHJlc2VydmluZ1JlY29tcGlsZXIgcmVjb21waWxlcjsKQEAgLTUxMywx
MyArNTEzLDEzIEBAIHZvaWQgSlNHbG9iYWxEYXRhOjpyZWxlYXNlRXhlY3V0YWJsZU1lbW8KICAg
ICBoZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7CiB9CiAgICAgCi12b2lkIHJlbGVhc2VFeGVjdXRh
YmxlTWVtb3J5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgcmVsZWFzZUV4ZWN1dGFi
bGVNZW1vcnkoVk0mIHZtKQogewotICAgIGdsb2JhbERhdGEucmVsZWFzZUV4ZWN1dGFibGVNZW1v
cnkoKTsKKyAgICB2bS5yZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSgpOwogfQogCiAjaWYgRU5BQkxF
KERGR19KSVQpCi12b2lkIEpTR2xvYmFsRGF0YTo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29u
c2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQordm9pZCBWTTo6Z2F0aGVyQ29uc2Vy
dmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQogewogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2NyYXRjaEJ1ZmZlcnMuc2l6ZSgpOyBpKyspIHsKICAg
ICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHNjcmF0Y2hCdWZmZXJzW2ldOwpA
QCAtNTMyLDEyICs1MzIsMTIgQEAgdm9pZCBKU0dsb2JhbERhdGE6OmdhdGhlckNvbnNlcnZhdGl2
ZVJvbwogI2VuZGlmCiAKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCi12b2lkIEpTR2xvYmFs
RGF0YTo6YWRkUmVnRXhwVG9UcmFjZShSZWdFeHAqIHJlZ0V4cCkKK3ZvaWQgVk06OmFkZFJlZ0V4
cFRvVHJhY2UoUmVnRXhwKiByZWdFeHApCiB7CiAgICAgbV9ydFRyYWNlTGlzdC0+YWRkKHJlZ0V4
cCk7CiB9CiAKLXZvaWQgSlNHbG9iYWxEYXRhOjpkdW1wUmVnRXhwVHJhY2UoKQordm9pZCBWTTo6
ZHVtcFJlZ0V4cFRyYWNlKCkKIHsKICAgICAvLyBUaGUgZmlyc3QgUmVnRXhwIG9iamVjdCBpcyBp
Z25vcmVkLiAgSXQgaXMgY3JlYXRlIGJ5IHRoZSBSZWdFeHBQcm90b3R5cGUgY3RvciBhbmQgbm90
IHVzZWQuCiAgICAgUlRUcmFjZUxpc3Q6Oml0ZXJhdG9yIGl0ZXIgPSArK21fcnRUcmFjZUxpc3Qt
PmJlZ2luKCk7CkBAIC01NTksNyArNTU5LDcgQEAgdm9pZCBKU0dsb2JhbERhdGE6OmR1bXBSZWdF
eHBUcmFjZSgpCiAgICAgbV9ydFRyYWNlTGlzdC0+Y2xlYXIoKTsKIH0KICNlbHNlCi12b2lkIEpT
R2xvYmFsRGF0YTo6ZHVtcFJlZ0V4cFRyYWNlKCkKK3ZvaWQgVk06OmR1bXBSZWdFeHBUcmFjZSgp
CiB7CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNp
b24gMTQ4NjU0KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERh
dGEuaDoxNDg2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAK
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEpTR2xv
YmFsRGF0YV9oCisjZGVmaW5lIEpTR2xvYmFsRGF0YV9oCisKKyNpbmNsdWRlICJDYWNoZWRUcmFu
c2NlbmRlbnRhbEZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiRGF0ZUluc3RhbmNlQ2FjaGUuaCIKKyNp
bmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1
ZGUgIkludHJpbnNpYy5oIgorI2luY2x1ZGUgIkpJVFRodW5rcy5oIgorI2luY2x1ZGUgIkpJVFRo
dW5rcy5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJKU0xvY2suaCIKKyNp
bmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIK
KyNpbmNsdWRlICJOdW1lcmljU3RyaW5ncy5oIgorI2luY2x1ZGUgIlByb2ZpbGVyRGF0YWJhc2Uu
aCIKKyNpbmNsdWRlICJQcml2YXRlTmFtZS5oIgorI2luY2x1ZGUgIlByb3RvdHlwZU1hcC5oIgor
I2luY2x1ZGUgIlNtYWxsU3RyaW5ncy5oIgorI2luY2x1ZGUgIlN0cm9uZy5oIgorI2luY2x1ZGUg
IlRodW5rR2VuZXJhdG9ycy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlEZXNjcmlwdG9yLmgiCisj
aW5jbHVkZSAiV2F0Y2hkb2cuaCIKKyNpbmNsdWRlICJXZWFrUmFuZG9tLmgiCisjaW5jbHVkZSA8
d3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkQXJyYXkuaD4K
KyNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KKyNpbmNsdWRlIDx3
dGYvV1RGVGhyZWFkRGF0YS5oPgorI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKKyNpbmNsdWRl
IDx3dGYvTGlzdEhhc2hTZXQuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgSlNDIHsKKworICAgIGNs
YXNzIENvZGVCbG9jazsKKyAgICBjbGFzcyBDb2RlQ2FjaGU7CisgICAgY2xhc3MgQ29tbW9uSWRl
bnRpZmllcnM7CisgICAgY2xhc3MgRXhlY1N0YXRlOworICAgIGNsYXNzIEhhbmRsZVN0YWNrOwor
ICAgIGNsYXNzIElkZW50aWZpZXJUYWJsZTsKKyAgICBjbGFzcyBJbnRlcnByZXRlcjsKKyAgICBj
bGFzcyBKU0dsb2JhbE9iamVjdDsKKyAgICBjbGFzcyBKU09iamVjdDsKKyAgICBjbGFzcyBLZXl3
b3JkczsKKyAgICBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisgICAgY2xhc3MgTGVnYWN5
UHJvZmlsZXI7CisgICAgY2xhc3MgTmF0aXZlRXhlY3V0YWJsZTsKKyAgICBjbGFzcyBQYXJzZXJB
cmVuYTsKKyAgICBjbGFzcyBSZWdFeHBDYWNoZTsKKyAgICBjbGFzcyBTb3VyY2VQcm92aWRlcjsK
KyAgICBjbGFzcyBTb3VyY2VQcm92aWRlckNhY2hlOworICAgIHN0cnVjdCBTdGFja0ZyYW1lOwor
ICAgIGNsYXNzIFN0cmluZ2lmaWVyOworICAgIGNsYXNzIFN0cnVjdHVyZTsKKyNpZiBFTkFCTEUo
UkVHRVhQX1RSQUNJTkcpCisgICAgY2xhc3MgUmVnRXhwOworI2VuZGlmCisgICAgY2xhc3MgVW5s
aW5rZWRDb2RlQmxvY2s7CisgICAgY2xhc3MgVW5saW5rZWRFdmFsQ29kZUJsb2NrOworICAgIGNs
YXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOworICAgIGNsYXNzIFVubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jazsKKworI2lmIEVOQUJMRShERkdfSklUKQorICAgIG5hbWVzcGFjZSBERkcgewor
ICAgIGNsYXNzIExvbmdMaXZlZFN0YXRlOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworICAgIHN0cnVjdCBIYXNoVGFibGU7CisgICAgc3RydWN0IEluc3RydWN0aW9uOworCisg
ICAgc3RydWN0IERTVE9mZnNldENhY2hlIHsKKyAgICAgICAgRFNUT2Zmc2V0Q2FjaGUoKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXNldCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICB2b2lkIHJlc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgb2Zmc2V0ID0gMC4wOworICAg
ICAgICAgICAgc3RhcnQgPSAwLjA7CisgICAgICAgICAgICBlbmQgPSAtMS4wOworICAgICAgICAg
ICAgaW5jcmVtZW50ID0gMC4wOworICAgICAgICB9CisKKyAgICAgICAgZG91YmxlIG9mZnNldDsK
KyAgICAgICAgZG91YmxlIHN0YXJ0OworICAgICAgICBkb3VibGUgZW5kOworICAgICAgICBkb3Vi
bGUgaW5jcmVtZW50OworICAgIH07CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBjbGFzcyBD
b25zZXJ2YXRpdmVSb290czsKKworI2lmIENPTVBJTEVSKE1TVkMpCisjcHJhZ21hIHdhcm5pbmco
cHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MjAwKSAvLyBEaXNhYmxlICJ6ZXJvLXNp
emVkIGFycmF5IGluIHN0cnVjdC91bmlvbiIgd2FybmluZworI2VuZGlmCisgICAgc3RydWN0IFNj
cmF0Y2hCdWZmZXIgeworICAgICAgICBTY3JhdGNoQnVmZmVyKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgdS5tX2FjdGl2ZUxlbmd0aCA9IDA7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMg
U2NyYXRjaEJ1ZmZlciogY3JlYXRlKHNpemVfdCBzaXplKQorICAgICAgICB7CisgICAgICAgICAg
ICBTY3JhdGNoQnVmZmVyKiByZXN1bHQgPSBuZXcgKGZhc3RNYWxsb2MoU2NyYXRjaEJ1ZmZlcjo6
YWxsb2NhdGlvblNpemUoc2l6ZSkpKSBTY3JhdGNoQnVmZmVyOworCisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9u
U2l6ZShzaXplX3QgYnVmZmVyU2l6ZSkgeyByZXR1cm4gc2l6ZW9mKFNjcmF0Y2hCdWZmZXIpICsg
YnVmZmVyU2l6ZTsgfQorICAgICAgICB2b2lkIHNldEFjdGl2ZUxlbmd0aChzaXplX3QgYWN0aXZl
TGVuZ3RoKSB7IHUubV9hY3RpdmVMZW5ndGggPSBhY3RpdmVMZW5ndGg7IH0KKyAgICAgICAgc2l6
ZV90IGFjdGl2ZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHUubV9hY3RpdmVMZW5ndGg7IH07Cisg
ICAgICAgIHNpemVfdCogYWN0aXZlTGVuZ3RoUHRyKCkgeyByZXR1cm4gJnUubV9hY3RpdmVMZW5n
dGg7IH07CisgICAgICAgIHZvaWQqIGRhdGFCdWZmZXIoKSB7IHJldHVybiBtX2J1ZmZlcjsgfQor
CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIHNpemVfdCBtX2FjdGl2ZUxlbmd0aDsKKyAg
ICAgICAgICAgIGRvdWJsZSBwYWQ7IC8vIE1ha2Ugc3VyZSBtX2J1ZmZlciBpcyBkb3VibGUgYWxp
Z25lZC4KKyAgICAgICAgfSB1OworI2lmIENQVShNSVBTKSAmJiAoZGVmaW5lZCBXVEZfTUlQU19B
UkNIX1JFViAmJiBXVEZfTUlQU19BUkNIX1JFViA9PSAyKQorICAgICAgICB2b2lkKiBtX2J1ZmZl
clswXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CisjZWxzZQorICAgICAgICB2b2lkKiBt
X2J1ZmZlclswXTsKKyNlbmRpZgorICAgIH07CisjaWYgQ09NUElMRVIoTVNWQykKKyNwcmFnbWEg
d2FybmluZyhwb3ApCisjZW5kaWYKKyNlbmRpZgorCisgICAgY2xhc3MgSlNHbG9iYWxEYXRhIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpTR2xvYmFsRGF0YT4geworICAgIHB1YmxpYzoK
KyAgICAgICAgLy8gV2ViQ29yZSBoYXMgYSBvbmUtdG8tb25lIG1hcHBpbmcgb2YgdGhyZWFkcyB0
byBKU0dsb2JhbERhdGFzOworICAgICAgICAvLyBlaXRoZXIgY3JlYXRlKCkgb3IgY3JlYXRlTGVh
a2VkKCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UKKyAgICAgICAgLy8gb24gYSB0aHJlYWQs
IHRoaXMgaXMgdGhlICdkZWZhdWx0JyBKU0dsb2JhbERhdGEgKGl0IHVzZXMgdGhlCisgICAgICAg
IC8vIHRocmVhZCdzIGRlZmF1bHQgc3RyaW5nIHVuaXF1aW5nIHRhYmxlIGZyb20gd3RmVGhyZWFk
RGF0YSkuCisgICAgICAgIC8vIEFQSSBjb250ZXh0cyBjcmVhdGVkIHVzaW5nIHRoZSBuZXcgY29u
dGV4dCBncm91cCBhd2FyZSBpbnRlcmZhY2UKKyAgICAgICAgLy8gY3JlYXRlIEFQSUNvbnRleHRH
cm91cCBvYmplY3RzIHdoaWNoIHJlcXVpcmUgbGVzcyBsb2NraW5nIG9mIEpTQworICAgICAgICAv
LyB0aGFuIHRoZSBvbGQgc2luZ2xldG9uIEFQSVNoYXJlZCBKU0dsb2JhbERhdGEgY3JlYXRlZCBm
b3IgdXNlIGJ5CisgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBBUEkuCisgICAgICAgIGVudW0gR2xv
YmFsRGF0YVR5cGUgeyBEZWZhdWx0LCBBUElDb250ZXh0R3JvdXAsIEFQSVNoYXJlZCB9OworICAg
ICAgICAKKyAgICAgICAgc3RydWN0IENsaWVudERhdGEgeworICAgICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdmlydHVhbCB+Q2xpZW50RGF0YSgpID0gMDsKKyAgICAgICAgfTsKKworICAgICAg
ICBib29sIGlzU2hhcmVkSW5zdGFuY2UoKSB7IHJldHVybiBnbG9iYWxEYXRhVHlwZSA9PSBBUElT
aGFyZWQ7IH0KKyAgICAgICAgYm9vbCB1c2luZ0FQSSgpIHsgcmV0dXJuIGdsb2JhbERhdGFUeXBl
ICE9IERlZmF1bHQ7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgc2hhcmVkSW5zdGFuY2VFeGlzdHMo
KTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTR2xvYmFsRGF0YSYgc2hhcmVk
SW5zdGFuY2UoKTsKKworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUGFzc1JlZlB0
cjxKU0dsb2JhbERhdGE+IGNyZWF0ZShIZWFwVHlwZSA9IFNtYWxsSGVhcCk7CisgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4gY3JlYXRlTGVh
a2VkKEhlYXBUeXBlID0gU21hbGxIZWFwKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNH
bG9iYWxEYXRhPiBjcmVhdGVDb250ZXh0R3JvdXAoSGVhcFR5cGUgPSBTbWFsbEhlYXApOworICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSB+SlNHbG9iYWxEYXRhKCk7CisKKyAgICAgICAgdm9pZCBt
YWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpIHsgaGVhcC5tYWNoaW5lVGhyZWFkcygpLm1h
a2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAg
IFJlZlB0cjxKU0xvY2s+IG1fYXBpTG9jazsKKworICAgIHB1YmxpYzoKKyNpZiBFTkFCTEUoQVNT
RU1CTEVSKQorICAgICAgICAvLyBleGVjdXRhYmxlQWxsb2NhdG9yIHNob3VsZCBiZSBkZXN0cnVj
dGVkIGFmdGVyIHRoZSBoZWFwLCBhcyB0aGUgaGVhcCBjYW4gY2FsbCBleGVjdXRhYmxlQWxsb2Nh
dG9yCisgICAgICAgIC8vIGluIGl0cyBkZXN0cnVjdG9yLgorICAgICAgICBFeGVjdXRhYmxlQWxs
b2NhdG9yIGV4ZWN1dGFibGVBbGxvY2F0b3I7CisjZW5kaWYKKworICAgICAgICAvLyBUaGUgaGVh
cCBzaG91bGQgYmUganVzdCBhZnRlciBleGVjdXRhYmxlQWxsb2NhdG9yIGFuZCBiZWZvcmUgb3Ro
ZXIgbWVtYmVycyB0byBlbnN1cmUgdGhhdCBpdCdzCisgICAgICAgIC8vIGRlc3RydWN0ZWQgYWZ0
ZXIgYWxsIHRoZSBvYmplY3RzIHRoYXQgcmVmZXJlbmNlIGl0LgorICAgICAgICBIZWFwIGhlYXA7
CisgICAgICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICBPd25QdHI8REZHOjpMb25n
TGl2ZWRTdGF0ZT4gbV9kZmdTdGF0ZTsKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworICAg
ICAgICBHbG9iYWxEYXRhVHlwZSBnbG9iYWxEYXRhVHlwZTsKKyAgICAgICAgQ2xpZW50RGF0YSog
Y2xpZW50RGF0YTsKKyAgICAgICAgRXhlY1N0YXRlKiB0b3BDYWxsRnJhbWU7CisgICAgICAgIFdh
dGNoZG9nIHdhdGNoZG9nOworCisgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogYXJyYXlDb25zdHJ1
Y3RvclRhYmxlOworICAgICAgICBjb25zdCBIYXNoVGFibGUqIGFycmF5UHJvdG90eXBlVGFibGU7
CisgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogYm9vbGVhblByb3RvdHlwZVRhYmxlOworICAgICAg
ICBjb25zdCBIYXNoVGFibGUqIGRhdGVUYWJsZTsKKyAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBk
YXRlQ29uc3RydWN0b3JUYWJsZTsKKyAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBlcnJvclByb3Rv
dHlwZVRhYmxlOworICAgICAgICBjb25zdCBIYXNoVGFibGUqIGdsb2JhbE9iamVjdFRhYmxlOwor
ICAgICAgICBjb25zdCBIYXNoVGFibGUqIGpzb25UYWJsZTsKKyAgICAgICAgY29uc3QgSGFzaFRh
YmxlKiBtYXRoVGFibGU7CisgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogbnVtYmVyQ29uc3RydWN0
b3JUYWJsZTsKKyAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBudW1iZXJQcm90b3R5cGVUYWJsZTsK
KyAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBvYmplY3RDb25zdHJ1Y3RvclRhYmxlOworICAgICAg
ICBjb25zdCBIYXNoVGFibGUqIHByaXZhdGVOYW1lUHJvdG90eXBlVGFibGU7CisgICAgICAgIGNv
bnN0IEhhc2hUYWJsZSogcmVnRXhwVGFibGU7CisgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogcmVn
RXhwQ29uc3RydWN0b3JUYWJsZTsKKyAgICAgICAgY29uc3QgSGFzaFRhYmxlKiByZWdFeHBQcm90
b3R5cGVUYWJsZTsKKyAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBzdHJpbmdDb25zdHJ1Y3RvclRh
YmxlOworICAgICAgICAKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3RydWN0dXJlU3RydWN0
dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1cmVSYXJlRGF0YVN0cnVjdHVy
ZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZGVidWdnZXJBY3RpdmF0aW9uU3RydWN0dXJl
OworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB0ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1
Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cmluZ1N0cnVjdHVyZTsKKyAgICAg
ICAgU3Ryb25nPFN0cnVjdHVyZT4gbm90QW5PYmplY3RTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9u
ZzxTdHJ1Y3R1cmU+IHByb3BlcnR5TmFtZUl0ZXJhdG9yU3RydWN0dXJlOworICAgICAgICBTdHJv
bmc8U3RydWN0dXJlPiBnZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1
Y3R1cmU+IGFwaVdyYXBwZXJTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IEpT
U2NvcGVTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGV4ZWN1dGFibGVTdHJ1
Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IG5hdGl2ZUV4ZWN1dGFibGVTdHJ1Y3R1
cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGV2YWxFeGVjdXRhYmxlU3RydWN0dXJlOwor
ICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9ncmFtRXhlY3V0YWJsZVN0cnVjdHVyZTsKKyAg
ICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlOworICAg
ICAgICBTdHJvbmc8U3RydWN0dXJlPiByZWdFeHBTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9uZzxT
dHJ1Y3R1cmU+IHNoYXJlZFN5bWJvbFRhYmxlU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3Ry
dWN0dXJlPiBzdHJ1Y3R1cmVDaGFpblN0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVy
ZT4gc3BhcnNlQXJyYXlWYWx1ZU1hcFN0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVy
ZT4gd2l0aFNjb3BlU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4g
dW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0
dXJlPiB1bmxpbmtlZEV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1
Y3R1cmU+IHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9u
ZzxTdHJ1Y3R1cmU+IHByb3BlcnR5VGFibGVTdHJ1Y3R1cmU7CisKKyAgICAgICAgSWRlbnRpZmll
clRhYmxlKiBpZGVudGlmaWVyVGFibGU7CisgICAgICAgIENvbW1vbklkZW50aWZpZXJzKiBwcm9w
ZXJ0eU5hbWVzOworICAgICAgICBjb25zdCBNYXJrZWRBcmd1bWVudEJ1ZmZlciogZW1wdHlMaXN0
OyAvLyBMaXN0cyBhcmUgc3VwcG9zZWQgdG8gYmUgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayB0byBo
YXZlIHRoZWlyIGVsZW1lbnRzIHByb3Blcmx5IG1hcmtlZCwgd2hpY2ggaXMgbm90IHRoZSBjYXNl
IGhlcmUgLSBidXQgdGhpcyBsaXN0IGhhcyBub3RoaW5nIHRvIG1hcmsuCisgICAgICAgIFNtYWxs
U3RyaW5ncyBzbWFsbFN0cmluZ3M7CisgICAgICAgIE51bWVyaWNTdHJpbmdzIG51bWVyaWNTdHJp
bmdzOworICAgICAgICBEYXRlSW5zdGFuY2VDYWNoZSBkYXRlSW5zdGFuY2VDYWNoZTsKKyAgICAg
ICAgV1RGOjpTaW1wbGVTdGF0cyBtYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFz
ZWxpbmVKSVQ7CisgICAgICAgIFZlY3RvcjxDb2RlQmxvY2sqPiBjb2RlQmxvY2tzQmVpbmdDb21w
aWxlZDsKKyAgICAgICAgdm9pZCBzdGFydGVkQ29tcGlsaW5nKENvZGVCbG9jayogY29kZUJsb2Nr
KQorICAgICAgICB7CisgICAgICAgICAgICBjb2RlQmxvY2tzQmVpbmdDb21waWxlZC5hcHBlbmQo
Y29kZUJsb2NrKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZmluaXNoZWRDb21waWxpbmco
Q29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVT
RUQoY29kZUJsb2NrLCBjb2RlQmxvY2sgPT0gY29kZUJsb2Nrc0JlaW5nQ29tcGlsZWQubGFzdCgp
KTsKKyAgICAgICAgICAgIGNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkLnJlbW92ZUxhc3QoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0SW5EZWZpbmVPd25Qcm9wZXJ0eShib29sIGluRGVm
aW5lT3duUHJvcGVydHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5EZWZpbmVPd25Qcm9w
ZXJ0eSA9IGluRGVmaW5lT3duUHJvcGVydHk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlz
SW5EZWZpbmVPd25Qcm9wZXJ0eSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2lu
RGVmaW5lT3duUHJvcGVydHk7CisgICAgICAgIH0KKworICAgICAgICBMZWdhY3lQcm9maWxlciog
ZW5hYmxlZFByb2ZpbGVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fZW5hYmxl
ZFByb2ZpbGVyOworICAgICAgICB9CisKKyNpZiBFTkFCTEUoSklUKSAmJiBFTkFCTEUoTExJTlQp
CisgICAgICAgIGJvb2wgY2FuVXNlSklUKCkgeyByZXR1cm4gbV9jYW5Vc2VKSVQ7IH0KKyNlbGlm
IEVOQUJMRShKSVQpCisgICAgICAgIGJvb2wgY2FuVXNlSklUKCkgeyByZXR1cm4gdHJ1ZTsgfSAv
LyBqaXQgb25seQorI2Vsc2UKKyAgICAgICAgYm9vbCBjYW5Vc2VKSVQoKSB7IHJldHVybiBmYWxz
ZTsgfSAvLyBpbnRlcnByZXRlciBvbmx5CisjZW5kaWYKKworI2lmIEVOQUJMRShZQVJSX0pJVCkK
KyAgICAgICAgYm9vbCBjYW5Vc2VSZWdFeHBKSVQoKSB7IHJldHVybiBtX2NhblVzZVJlZ0V4cEpJ
VDsgfQorI2Vsc2UKKyAgICAgICAgYm9vbCBjYW5Vc2VSZWdFeHBKSVQoKSB7IHJldHVybiBmYWxz
ZTsgfSAvLyBpbnRlcnByZXRlciBvbmx5CisjZW5kaWYKKworICAgICAgICBTb3VyY2VQcm92aWRl
ckNhY2hlKiBhZGRTb3VyY2VQcm92aWRlckNhY2hlKFNvdXJjZVByb3ZpZGVyKik7CisgICAgICAg
IHZvaWQgY2xlYXJTb3VyY2VQcm92aWRlckNhY2hlcygpOworCisgICAgICAgIFByb3RvdHlwZU1h
cCBwcm90b3R5cGVNYXA7CisKKyAgICAgICAgT3duUHRyPFBhcnNlckFyZW5hPiBwYXJzZXJBcmVu
YTsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTb3VyY2VQcm92aWRlcj4sIFJlZlB0
cjxTb3VyY2VQcm92aWRlckNhY2hlPiA+IFNvdXJjZVByb3ZpZGVyQ2FjaGVNYXA7CisgICAgICAg
IFNvdXJjZVByb3ZpZGVyQ2FjaGVNYXAgc291cmNlUHJvdmlkZXJDYWNoZU1hcDsKKyAgICAgICAg
T3duUHRyPEtleXdvcmRzPiBrZXl3b3JkczsKKyAgICAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJl
dGVyOworI2lmIEVOQUJMRShKSVQpCisgICAgICAgIE93blB0cjxKSVRUaHVua3M+IGppdFN0dWJz
OworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2V0Q1RJU3R1YihUaHVua0dlbmVyYXRv
ciBnZW5lcmF0b3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBqaXRTdHVicy0+Y3Rp
U3R1Yih0aGlzLCBnZW5lcmF0b3IpOworICAgICAgICB9CisgICAgICAgIE5hdGl2ZUV4ZWN1dGFi
bGUqIGdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiwgSW50cmluc2ljKTsKKyNlbmRpZgor
ICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24s
IE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKTsKKworICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlv
bjsKKyAgICAgICAgUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+IGV4Y2VwdGlvblN0YWNrOwor
CisgICAgICAgIGNvbnN0IENsYXNzSW5mbyogY29uc3QganNBcnJheUNsYXNzSW5mbzsKKyAgICAg
ICAgY29uc3QgQ2xhc3NJbmZvKiBjb25zdCBqc0ZpbmFsT2JqZWN0Q2xhc3NJbmZvOworCisgICAg
ICAgIFJldHVybkFkZHJlc3NQdHIgZXhjZXB0aW9uTG9jYXRpb247CisgICAgICAgIEpTVmFsdWUg
aG9zdENhbGxSZXR1cm5WYWx1ZTsKKyAgICAgICAgRXhlY1N0YXRlKiBjYWxsRnJhbWVGb3JUaHJv
dzsKKyAgICAgICAgdm9pZCogdGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7CisgICAgICAgIEluc3Ry
dWN0aW9uKiB0YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3c7CisjaWYgRU5BQkxFKERGR19KSVQp
CisgICAgICAgIHVpbnQzMl90IG9zckV4aXRJbmRleDsKKyAgICAgICAgdm9pZCogb3NyRXhpdEp1
bXBEZXN0aW5hdGlvbjsKKyAgICAgICAgVmVjdG9yPFNjcmF0Y2hCdWZmZXIqPiBzY3JhdGNoQnVm
ZmVyczsKKyAgICAgICAgc2l6ZV90IHNpemVPZkxhc3RTY3JhdGNoQnVmZmVyOworICAgICAgICAK
KyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZV90IHNpemUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghc2l6ZSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHNpemUgPiBzaXplT2ZMYXN0U2Ny
YXRjaEJ1ZmZlcikgeworICAgICAgICAgICAgICAgIC8vIFByb3RlY3QgYWdhaW5zdCBhIE5eMiBt
ZW1vcnkgdXNhZ2UgcGF0aG9sb2d5IGJ5IGVuc3VyaW5nCisgICAgICAgICAgICAgICAgLy8gdGhh
dCBhdCB3b3JzdCwgd2UgZ2V0IGEgZ2VvbWV0cmljIHNlcmllcywgbWVhbmluZyB0aGF0IHRoZQor
ICAgICAgICAgICAgICAgIC8vIHRvdGFsIG1lbW9yeSB1c2FnZSBpcyBzb21ld2hlcmUgYXJvdW5k
CisgICAgICAgICAgICAgICAgLy8gbWF4KHNjcmF0Y2ggYnVmZmVyIHNpemUpICogNC4KKyAgICAg
ICAgICAgICAgICBzaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlciA9IHNpemUgKiAyOworCisgICAgICAg
ICAgICAgICAgc2NyYXRjaEJ1ZmZlcnMuYXBwZW5kKFNjcmF0Y2hCdWZmZXI6OmNyZWF0ZShzaXpl
T2ZMYXN0U2NyYXRjaEJ1ZmZlcikpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTY3Jh
dGNoQnVmZmVyKiByZXN1bHQgPSBzY3JhdGNoQnVmZmVycy5sYXN0KCk7CisgICAgICAgICAgICBy
ZXN1bHQtPnNldEFjdGl2ZUxlbmd0aCgwKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZh
dGl2ZVJvb3RzJik7CisjZW5kaWYKKworICAgICAgICBKU0dsb2JhbE9iamVjdCogZHluYW1pY0ds
b2JhbE9iamVjdDsKKworICAgICAgICBIYXNoU2V0PEpTT2JqZWN0Kj4gc3RyaW5nUmVjdXJzaW9u
Q2hlY2tWaXNpdGVkT2JqZWN0czsKKworICAgICAgICBkb3VibGUgY2FjaGVkVVRDT2Zmc2V0Owor
ICAgICAgICBEU1RPZmZzZXRDYWNoZSBkc3RPZmZzZXRDYWNoZTsKKyAgICAgICAgCisgICAgICAg
IFN0cmluZyBjYWNoZWREYXRlU3RyaW5nOworICAgICAgICBkb3VibGUgY2FjaGVkRGF0ZVN0cmlu
Z1ZhbHVlOworCisgICAgICAgIExlZ2FjeVByb2ZpbGVyKiBtX2VuYWJsZWRQcm9maWxlcjsKKyAg
ICAgICAgT3duUHRyPFByb2ZpbGVyOjpEYXRhYmFzZT4gbV9wZXJCeXRlY29kZVByb2ZpbGVyOwor
ICAgICAgICBSZWdFeHBDYWNoZSogbV9yZWdFeHBDYWNoZTsKKyAgICAgICAgQnVtcFBvaW50ZXJB
bGxvY2F0b3IgbV9yZWdFeHBBbGxvY2F0b3I7CisKKyNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcp
CisgICAgICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8UmVmUHRyPFJlZ0V4cD4gPiBSVFRyYWNlTGlz
dDsKKyAgICAgICAgUlRUcmFjZUxpc3QqIG1fcnRUcmFjZUxpc3Q7CisjZW5kaWYKKworI2lmbmRl
ZiBOREVCVUcKKyAgICAgICAgVGhyZWFkSWRlbnRpZmllciBleGNsdXNpdmVUaHJlYWQ7CisjZW5k
aWYKKworICAgICAgICBDYWNoZWRUcmFuc2NlbmRlbnRhbEZ1bmN0aW9uPHN0ZDo6c2luPiBjYWNo
ZWRTaW47CisKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXNldERhdGVDYWNoZSgp
OworCisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc3RhcnRTYW1wbGluZygpOworICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHN0b3BTYW1wbGluZygpOworICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGR1bXBTYW1wbGVEYXRhKEV4ZWNTdGF0ZSogZXhlYyk7CisgICAg
ICAgIFJlZ0V4cENhY2hlKiByZWdFeHBDYWNoZSgpIHsgcmV0dXJuIG1fcmVnRXhwQ2FjaGU7IH0K
KyNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCisgICAgICAgIHZvaWQgYWRkUmVnRXhwVG9UcmFj
ZShQYXNzUmVmUHRyPFJlZ0V4cD4gcmVnRXhwKTsKKyNlbmRpZgorICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGR1bXBSZWdFeHBUcmFjZSgpOworCisgICAgICAgIGJvb2wgaXNDb2xsZWN0
b3JCdXN5KCkgeyByZXR1cm4gaGVhcC5pc0J1c3koKTsgfQorICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KCk7CisKKyNpZiBFTkFCTEUoR0NfVkFM
SURBVElPTikKKyAgICAgICAgYm9vbCBpc0luaXRpYWxpemluZ09iamVjdCgpIGNvbnN0OyAKKyAg
ICAgICAgdm9pZCBzZXRJbml0aWFsaXppbmdPYmplY3RDbGFzcyhjb25zdCBDbGFzc0luZm8qKTsK
KyNlbmRpZgorCisgICAgICAgIHVuc2lnbmVkIG1fbmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25z
OworCisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX21pbk51bWJlck9mTmV3U3RyaW5n
c1RvSGFzaENvbnMgPSAxMDA7CisKKyAgICAgICAgYm9vbCBoYXZlRW5vdWdoTmV3U3RyaW5nc1Rv
SGFzaENvbnMoKSB7IHJldHVybiBtX25ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29ucyA+IHNfbWlu
TnVtYmVyT2ZOZXdTdHJpbmdzVG9IYXNoQ29uczsgfQorICAgICAgICB2b2lkIHJlc2V0TmV3U3Ry
aW5nc1NpbmNlTGFzdEhhc2hDb25zKCkgeyBtX25ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29ucyA9
IDA7IH0KKworI2RlZmluZSByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih0eXBlLCBjYXBpdGFs
aXplZFR5cGUpIFwKKyAgICAgICAgdm9pZCByZWdpc3RlclR5cGVkQXJyYXlEZXNjcmlwdG9yKGNv
bnN0IGNhcGl0YWxpemVkVHlwZSMjQXJyYXkqLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikgXAorICAgICAgICB7IFwKKyAgICAgICAgICAgIEFTU0VSVCghbV8jI3R5cGUj
I0FycmF5RGVzY3JpcHRvci5tX2NsYXNzSW5mbyB8fCBtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9y
Lm1fY2xhc3NJbmZvID09IGRlc2NyaXB0b3IubV9jbGFzc0luZm8pOyBcCisgICAgICAgICAgICBt
XyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yID0gZGVzY3JpcHRvcjsgXAorICAgICAgICAgICAgQVNT
RVJUKG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IubV9jbGFzc0luZm8pOyBcCisgICAgICAgIH0g
XAorICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgdHlwZSMjQXJyYXlEZXNjcmlw
dG9yKCkgY29uc3QgeyBBU1NFUlQobV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvci5tX2NsYXNzSW5m
byk7IHJldHVybiBtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yOyB9CisKKyAgICAgICAgcmVnaXN0
ZXJUeXBlZEFycmF5RnVuY3Rpb24oaW50OCwgSW50OCk7CisgICAgICAgIHJlZ2lzdGVyVHlwZWRB
cnJheUZ1bmN0aW9uKGludDE2LCBJbnQxNik7CisgICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1
bmN0aW9uKGludDMyLCBJbnQzMik7CisgICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9u
KHVpbnQ4LCBVaW50OCk7CisgICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKHVpbnQ4
Q2xhbXBlZCwgVWludDhDbGFtcGVkKTsKKyAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rp
b24odWludDE2LCBVaW50MTYpOworICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih1
aW50MzIsIFVpbnQzMik7CisgICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKGZsb2F0
MzIsIEZsb2F0MzIpOworICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihmbG9hdDY0
LCBGbG9hdDY0KTsKKyN1bmRlZiByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbgorICAgICAgICAK
KyAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHR5cGVkQXJyYXlEZXNjcmlwdG9y
KFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRj
aCAodHlwZSkgeworICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5Tm9uZToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUludDg6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICZpbnQ4QXJyYXlEZXNjcmlwdG9yKCk7CisgICAgICAgICAgICBjYXNl
IFR5cGVkQXJyYXlJbnQxNjoKKyAgICAgICAgICAgICAgICByZXR1cm4gJmludDE2QXJyYXlEZXNj
cmlwdG9yKCk7CisgICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlJbnQzMjoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJmludDMyQXJyYXlEZXNjcmlwdG9yKCk7CisgICAgICAgICAgICBjYXNlIFR5
cGVkQXJyYXlVaW50ODoKKyAgICAgICAgICAgICAgICByZXR1cm4gJnVpbnQ4QXJyYXlEZXNjcmlw
dG9yKCk7CisgICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50OENsYW1wZWQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICZ1aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKTsKKyAgICAgICAg
ICAgIGNhc2UgVHlwZWRBcnJheVVpbnQxNjoKKyAgICAgICAgICAgICAgICByZXR1cm4gJnVpbnQx
NkFycmF5RGVzY3JpcHRvcigpOworICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDMyOgor
ICAgICAgICAgICAgICAgIHJldHVybiAmdWludDMyQXJyYXlEZXNjcmlwdG9yKCk7CisgICAgICAg
ICAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgorICAgICAgICAgICAgICAgIHJldHVybiAmZmxv
YXQzMkFycmF5RGVzY3JpcHRvcigpOworICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5RmxvYXQ2
NDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKTsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEpTTG9j
ayYgYXBpTG9jaygpIHsgcmV0dXJuICptX2FwaUxvY2s7IH0KKyAgICAgICAgQ29kZUNhY2hlKiBj
b2RlQ2FjaGUoKSB7IHJldHVybiBtX2NvZGVDYWNoZS5nZXQoKTsgfQorCisgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZGlzY2FyZEFsbENvZGUoKTsKKworICAgIHByaXZhdGU6CisgICAg
ICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisgICAgICAgIAorICAgICAg
ICBKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cGUsIEhlYXBUeXBlKTsKKyAgICAgICAgc3RhdGlj
IEpTR2xvYmFsRGF0YSomIHNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKTsKKyAgICAgICAgdm9pZCBj
cmVhdGVOYXRpdmVUaHVuaygpOworI2lmIEVOQUJMRShBU1NFTUJMRVIpCisgICAgICAgIGJvb2wg
bV9jYW5Vc2VBc3NlbWJsZXI7CisjZW5kaWYKKyNpZiBFTkFCTEUoSklUKQorICAgICAgICBib29s
IG1fY2FuVXNlSklUOworI2VuZGlmCisjaWYgRU5BQkxFKFlBUlJfSklUKQorICAgICAgICBib29s
IG1fY2FuVXNlUmVnRXhwSklUOworI2VuZGlmCisjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCisg
ICAgICAgIGNvbnN0IENsYXNzSW5mbyogbV9pbml0aWFsaXppbmdPYmplY3RDbGFzczsKKyNlbmRp
ZgorICAgICAgICBib29sIG1faW5EZWZpbmVPd25Qcm9wZXJ0eTsKKyAgICAgICAgT3duUHRyPENv
ZGVDYWNoZT4gbV9jb2RlQ2FjaGU7CisKKyAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV9p
bnQ4QXJyYXlEZXNjcmlwdG9yOworICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX2ludDE2
QXJyYXlEZXNjcmlwdG9yOworICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX2ludDMyQXJy
YXlEZXNjcmlwdG9yOworICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX3VpbnQ4QXJyYXlE
ZXNjcmlwdG9yOworICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX3VpbnQ4Q2xhbXBlZEFy
cmF5RGVzY3JpcHRvcjsKKyAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV91aW50MTZBcnJh
eURlc2NyaXB0b3I7CisgICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fdWludDMyQXJyYXlE
ZXNjcmlwdG9yOworICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX2Zsb2F0MzJBcnJheURl
c2NyaXB0b3I7CisgICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fZmxvYXQ2NEFycmF5RGVz
Y3JpcHRvcjsKKyAgICB9OworCisjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCisgICAgaW5saW5l
IGJvb2wgSlNHbG9iYWxEYXRhOjppc0luaXRpYWxpemluZ09iamVjdCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gISFtX2luaXRpYWxpemluZ09iamVjdENsYXNzOworICAgIH0KKworICAg
IGlubGluZSB2b2lkIEpTR2xvYmFsRGF0YTo6c2V0SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoY29u
c3QgQ2xhc3NJbmZvKiBpbml0aWFsaXppbmdPYmplY3RDbGFzcykKKyAgICB7CisgICAgICAgIG1f
aW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MgPSBpbml0aWFsaXppbmdPYmplY3RDbGFzczsKKyAgICB9
CisjZW5kaWYKKworICAgIGlubGluZSBIZWFwKiBXZWFrU2V0OjpoZWFwKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiAmbV9nbG9iYWxEYXRhLT5oZWFwOworICAgIH0KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dsb2JhbERhdGFfaApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKLSNpZm5kZWYgSlNHbG9iYWxEYXRhX2gKLSNkZWZpbmUgSlNHbG9iYWxEYXRhX2gK
KyNpZm5kZWYgVk1faAorI2RlZmluZSBWTV9oCiAKICNpbmNsdWRlICJDYWNoZWRUcmFuc2NlbmRl
bnRhbEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiRGF0ZUluc3RhbmNlQ2FjaGUuaCIKQEAgLTE2Miwz
MSArMTYyLDMxIEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAjZW5kaWYKIAotICAgIGNsYXNz
IEpTR2xvYmFsRGF0YSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxKU0dsb2JhbERhdGE+
IHsKKyAgICBjbGFzcyBWTSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxWTT4gewogICAg
IHB1YmxpYzoKLSAgICAgICAgLy8gV2ViQ29yZSBoYXMgYSBvbmUtdG8tb25lIG1hcHBpbmcgb2Yg
dGhyZWFkcyB0byBKU0dsb2JhbERhdGFzOworICAgICAgICAvLyBXZWJDb3JlIGhhcyBhIG9uZS10
by1vbmUgbWFwcGluZyBvZiB0aHJlYWRzIHRvIFZNczsKICAgICAgICAgLy8gZWl0aGVyIGNyZWF0
ZSgpIG9yIGNyZWF0ZUxlYWtlZCgpIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlCi0gICAgICAg
IC8vIG9uIGEgdGhyZWFkLCB0aGlzIGlzIHRoZSAnZGVmYXVsdCcgSlNHbG9iYWxEYXRhIChpdCB1
c2VzIHRoZQorICAgICAgICAvLyBvbiBhIHRocmVhZCwgdGhpcyBpcyB0aGUgJ2RlZmF1bHQnIFZN
IChpdCB1c2VzIHRoZQogICAgICAgICAvLyB0aHJlYWQncyBkZWZhdWx0IHN0cmluZyB1bmlxdWlu
ZyB0YWJsZSBmcm9tIHd0ZlRocmVhZERhdGEpLgogICAgICAgICAvLyBBUEkgY29udGV4dHMgY3Jl
YXRlZCB1c2luZyB0aGUgbmV3IGNvbnRleHQgZ3JvdXAgYXdhcmUgaW50ZXJmYWNlCiAgICAgICAg
IC8vIGNyZWF0ZSBBUElDb250ZXh0R3JvdXAgb2JqZWN0cyB3aGljaCByZXF1aXJlIGxlc3MgbG9j
a2luZyBvZiBKU0MKLSAgICAgICAgLy8gdGhhbiB0aGUgb2xkIHNpbmdsZXRvbiBBUElTaGFyZWQg
SlNHbG9iYWxEYXRhIGNyZWF0ZWQgZm9yIHVzZSBieQorICAgICAgICAvLyB0aGFuIHRoZSBvbGQg
c2luZ2xldG9uIEFQSVNoYXJlZCBWTSBjcmVhdGVkIGZvciB1c2UgYnkKICAgICAgICAgLy8gdGhl
IG9yaWdpbmFsIEFQSS4KLSAgICAgICAgZW51bSBHbG9iYWxEYXRhVHlwZSB7IERlZmF1bHQsIEFQ
SUNvbnRleHRHcm91cCwgQVBJU2hhcmVkIH07CisgICAgICAgIGVudW0gVk1UeXBlIHsgRGVmYXVs
dCwgQVBJQ29udGV4dEdyb3VwLCBBUElTaGFyZWQgfTsKICAgICAgICAgCiAgICAgICAgIHN0cnVj
dCBDbGllbnREYXRhIHsKICAgICAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkNs
aWVudERhdGEoKSA9IDA7CiAgICAgICAgIH07CiAKLSAgICAgICAgYm9vbCBpc1NoYXJlZEluc3Rh
bmNlKCkgeyByZXR1cm4gZ2xvYmFsRGF0YVR5cGUgPT0gQVBJU2hhcmVkOyB9Ci0gICAgICAgIGJv
b2wgdXNpbmdBUEkoKSB7IHJldHVybiBnbG9iYWxEYXRhVHlwZSAhPSBEZWZhdWx0OyB9CisgICAg
ICAgIGJvb2wgaXNTaGFyZWRJbnN0YW5jZSgpIHsgcmV0dXJuIHZtVHlwZSA9PSBBUElTaGFyZWQ7
IH0KKyAgICAgICAgYm9vbCB1c2luZ0FQSSgpIHsgcmV0dXJuIHZtVHlwZSAhPSBEZWZhdWx0OyB9
CiAgICAgICAgIHN0YXRpYyBib29sIHNoYXJlZEluc3RhbmNlRXhpc3RzKCk7Ci0gICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0dsb2JhbERhdGEmIHNoYXJlZEluc3RhbmNlKCk7Cisg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBWTSYgc2hhcmVkSW5zdGFuY2UoKTsKIAot
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+
IGNyZWF0ZShIZWFwVHlwZSA9IFNtYWxsSGVhcCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBQYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4gY3JlYXRlTGVha2VkKEhlYXBUeXBlID0g
U21hbGxIZWFwKTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBjcmVh
dGVDb250ZXh0R3JvdXAoSGVhcFR5cGUgPSBTbWFsbEhlYXApOwotICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSB+SlNHbG9iYWxEYXRhKCk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBQYXNzUmVmUHRyPFZNPiBjcmVhdGUoSGVhcFR5cGUgPSBTbWFsbEhlYXApOworICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUGFzc1JlZlB0cjxWTT4gY3JlYXRlTGVha2VkKEhlYXBU
eXBlID0gU21hbGxIZWFwKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Vk0+IGNyZWF0ZUNv
bnRleHRHcm91cChIZWFwVHlwZSA9IFNtYWxsSGVhcCk7CisgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIH5WTSgpOwogCiAgICAgICAgIHZvaWQgbWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMo
KSB7IGhlYXAubWFjaGluZVRocmVhZHMoKS5tYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygp
OyB9CiAKQEAgLTIwOCw3ICsyMDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgT3duUHRy
PERGRzo6TG9uZ0xpdmVkU3RhdGU+IG1fZGZnU3RhdGU7CiAjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCiAKLSAgICAgICAgR2xvYmFsRGF0YVR5cGUgZ2xvYmFsRGF0YVR5cGU7CisgICAgICAgIFZN
VHlwZSB2bVR5cGU7CiAgICAgICAgIENsaWVudERhdGEqIGNsaWVudERhdGE7CiAgICAgICAgIEV4
ZWNTdGF0ZSogdG9wQ2FsbEZyYW1lOwogICAgICAgICBXYXRjaGRvZyB3YXRjaGRvZzsKQEAgLTQ3
NCw4ICs0NzQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcml2YXRlOgogICAgICAgICBmcmll
bmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICAKLSAgICAgICAgSlNHbG9i
YWxEYXRhKEdsb2JhbERhdGFUeXBlLCBIZWFwVHlwZSk7Ci0gICAgICAgIHN0YXRpYyBKU0dsb2Jh
bERhdGEqJiBzaGFyZWRJbnN0YW5jZUludGVybmFsKCk7CisgICAgICAgIFZNKFZNVHlwZSwgSGVh
cFR5cGUpOworICAgICAgICBzdGF0aWMgVk0qJiBzaGFyZWRJbnN0YW5jZUludGVybmFsKCk7CiAg
ICAgICAgIHZvaWQgY3JlYXRlTmF0aXZlVGh1bmsoKTsKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQog
ICAgICAgICBib29sIG1fY2FuVXNlQXNzZW1ibGVyOwpAQCAtNTA0LDEyICs1MDQsMTIgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQotICAgIGlu
bGluZSBib29sIEpTR2xvYmFsRGF0YTo6aXNJbml0aWFsaXppbmdPYmplY3QoKSBjb25zdAorICAg
IGlubGluZSBib29sIFZNOjppc0luaXRpYWxpemluZ09iamVjdCgpIGNvbnN0CiAgICAgewogICAg
ICAgICByZXR1cm4gISFtX2luaXRpYWxpemluZ09iamVjdENsYXNzOwogICAgIH0KIAotICAgIGlu
bGluZSB2b2lkIEpTR2xvYmFsRGF0YTo6c2V0SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoY29uc3Qg
Q2xhc3NJbmZvKiBpbml0aWFsaXppbmdPYmplY3RDbGFzcykKKyAgICBpbmxpbmUgdm9pZCBWTTo6
c2V0SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoY29uc3QgQ2xhc3NJbmZvKiBpbml0aWFsaXppbmdP
YmplY3RDbGFzcykKICAgICB7CiAgICAgICAgIG1faW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MgPSBp
bml0aWFsaXppbmdPYmplY3RDbGFzczsKICAgICB9CkBAIC01MTcsOSArNTE3LDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICBpbmxpbmUgSGVhcCogV2Vha1NldDo6aGVhcCgpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gJm1fZ2xvYmFsRGF0YS0+aGVhcDsKKyAgICAgICAgcmV0dXJuICZt
X3ZtLT5oZWFwOwogICAgIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKLSNlbmRpZiAvLyBKU0ds
b2JhbERhdGFfaAorI2VuZGlmIC8vIFZNX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1dhdGNoZG9nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9XYXRjaGRvZy5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1dhdGNoZG9nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYs
NyBAQCBXYXRjaGRvZzo6fldhdGNoZG9nKCkKICAgICBkZXN0cm95VGltZXIoKTsKIH0KIAotdm9p
ZCBXYXRjaGRvZzo6c2V0VGltZUxpbWl0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgZG91Ymxl
IGxpbWl0LAordm9pZCBXYXRjaGRvZzo6c2V0VGltZUxpbWl0KFZNJiB2bSwgZG91YmxlIGxpbWl0
LAogICAgIFNob3VsZFRlcm1pbmF0ZUNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkKiBkYXRhMSwgdm9p
ZCogZGF0YTIpCiB7CiAgICAgYm9vbCB3YXNFbmFibGVkID0gaXNFbmFibGVkKCk7CkBAIC04NCw3
ICs4NCw3IEBAIHZvaWQgV2F0Y2hkb2c6OnNldFRpbWVMaW1pdChKU0dsb2JhbERhdGEKIAogICAg
ICAgICAvLyBBbmQgaWYgd2UndmUgcHJldmlvdXNseSBjb21waWxlZCBhbnkgZnVuY3Rpb25zLCB3
ZSBuZWVkIHRvIGRlb3B0CiAgICAgICAgIC8vIHRoZW0gYmVjYXVzZSB0aGV5IGRvbid0IGhhYmUg
dGhlIG5lZWRlZCBwb2xsaW5nIGNoZWNrcyB5ZXQuCi0gICAgICAgIGdsb2JhbERhdGEucmVsZWFz
ZUV4ZWN1dGFibGVNZW1vcnkoKTsKKyAgICAgICAgdm0ucmVsZWFzZUV4ZWN1dGFibGVNZW1vcnko
KTsKICAgICB9CiAKICAgICBzdGFydENvdW50ZG93bklmTmVlZGVkKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9XYXRjaGRvZy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1dhdGNoZG9nLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dhdGNoZG9nLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDcgKzMzLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBFeGVjU3RhdGU7Ci1jbGFz
cyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIAogY2xhc3MgV2F0Y2hkb2cgewogcHVibGljOgpA
QCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgfldhdGNoZG9nKCk7CiAKICAgICB0eXBlZGVm
IGJvb2wgKCpTaG91bGRUZXJtaW5hdGVDYWxsYmFjaykoRXhlY1N0YXRlKiwgdm9pZCogZGF0YTEs
IHZvaWQqIGRhdGEyKTsKLSAgICB2b2lkIHNldFRpbWVMaW1pdChKU0dsb2JhbERhdGEmLCBkb3Vi
bGUgc2Vjb25kcywgU2hvdWxkVGVybWluYXRlQ2FsbGJhY2sgPSAwLCB2b2lkKiBkYXRhMSA9IDAs
IHZvaWQqIGRhdGEyID0gMCk7CisgICAgdm9pZCBzZXRUaW1lTGltaXQoVk0mLCBkb3VibGUgc2Vj
b25kcywgU2hvdWxkVGVybWluYXRlQ2FsbGJhY2sgPSAwLCB2b2lkKiBkYXRhMSA9IDAsIHZvaWQq
IGRhdGEyID0gMCk7CiAKICAgICAvLyBUaGlzIHZlcnNpb24gb2YgZGlkRmlyZSgpIHdpbGwgY2hl
Y2sgdGhlIGVsYXBzZWQgQ1BVIHRpbWUgYW5kIGNhbGwgdGhlCiAgICAgLy8gY2FsbGJhY2sgKGlm
IG5lZWRlZCkgdG8gZGV0ZXJtaW5lIGlmIHRoZSB3YXRjaGRvZyBzaG91bGQgZmlyZS4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dyaXRlQmFycmllci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dyaXRlQmFycmllci5oCShyZXZpc2lv
biAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Xcml0ZUJhcnJpZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIEpTQ2VsbDsKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwogY2xhc3MgSlNHbG9i
YWxPYmplY3Q7CiAKIHRlbXBsYXRlPGNsYXNzIFQ+IGNsYXNzIFdyaXRlQmFycmllckJhc2U7CkBA
IC02OCwxMSArNjgsMTEgQEAgdGVtcGxhdGU8Y2xhc3MgVD4gaW5saW5lIHZvaWQgdmFsaWRhdGVD
ZQogLy8gV2UgaGF2ZSBhIHNlcGFyYXRlIGJhc2UgY2xhc3Mgd2l0aCBubyBjb25zdHJ1Y3RvcnMg
Zm9yIHVzZSBpbiBVbmlvbnMuCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV3JpdGVCYXJy
aWVyQmFzZSB7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBjb25zdCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkKKyAgICB2b2lkIHNldChWTSYgdm0sIGNv
bnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKHZhbHVl
KTsKICAgICAgICAgdmFsaWRhdGVDZWxsKHZhbHVlKTsKLSAgICAgICAgc2V0RWFybHlWYWx1ZShn
bG9iYWxEYXRhLCBvd25lciwgdmFsdWUpOworICAgICAgICBzZXRFYXJseVZhbHVlKHZtLCBvd25l
ciwgdmFsdWUpOwogICAgIH0KICAgICAKICAgICAvLyBUaGlzIGlzIG1lYW50IHRvIGJlIHVzZWQg
bGlrZSBvcGVyYXRvcj0sIGJ1dCBpcyBjYWxsZWQgY29weUZyb20gaW5zdGVhZCwgaW4KQEAgLTgy
LDE2ICs4MiwxNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2VsbCA9IG90aGVyLm1fY2VsbDsKICAg
ICB9CiAKLSAgICB2b2lkIHNldE1heUJlTnVsbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNv
bnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQorICAgIHZvaWQgc2V0TWF5QmVOdWxsKFZNJiB2
bSwgY29uc3QgSlNDZWxsKiBvd25lciwgVCogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFs
dWUpCiAgICAgICAgICAgICB2YWxpZGF0ZUNlbGwodmFsdWUpOwotICAgICAgICBzZXRFYXJseVZh
bHVlKGdsb2JhbERhdGEsIG93bmVyLCB2YWx1ZSk7CisgICAgICAgIHNldEVhcmx5VmFsdWUodm0s
IG93bmVyLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCBieSBK
U0NlbGwgZHVyaW5nIGVhcmx5IGluaXRpYWxpc2F0aW9uCiAgICAgLy8gd2hlbiBzb21lIGJhc2lj
IHR5cGVzIGFyZW4ndCB5ZXQgY29tcGxldGVseSBpbnN0YW50aWF0ZWQKLSAgICB2b2lkIHNldEVh
cmx5VmFsdWUoSlNHbG9iYWxEYXRhJiwgY29uc3QgSlNDZWxsKiBvd25lciwgVCogdmFsdWUpCisg
ICAgdm9pZCBzZXRFYXJseVZhbHVlKFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwgVCogdmFsdWUp
CiAgICAgewogICAgICAgICB0aGlzLT5tX2NlbGwgPSByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+
KHZhbHVlKTsKICAgICAgICAgSGVhcDo6d3JpdGVCYXJyaWVyKG93bmVyLCB0aGlzLT5tX2NlbGwp
OwpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHByaXZhdGU6CiAKIHRlbXBsYXRlIDw+IGNsYXNzIFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4gewogcHVibGljOgotICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0
YSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTVmFsdWUgdmFsdWUpCisgICAgdm9pZCBzZXQoVk0m
LCBjb25zdCBKU0NlbGwqIG93bmVyLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgbV92
YWx1ZSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7CiAgICAgICAgIEhlYXA6OndyaXRlQmFycmll
cihvd25lciwgdmFsdWUpOwpAQCAtMTk3LDE1ICsxOTcsMTUgQEAgcHVibGljOgogICAgICAgICB0
aGlzLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKDApOwogICAgIH0KIAotICAgIFdyaXRlQmFycmll
cihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVl
KQorICAgIFdyaXRlQmFycmllcihWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVl
KQogICAgIHsKLSAgICAgICAgdGhpcy0+c2V0KGdsb2JhbERhdGEsIG93bmVyLCB2YWx1ZSk7Cisg
ICAgICAgIHRoaXMtPnNldCh2bSwgb3duZXIsIHZhbHVlKTsKICAgICB9CiAKICAgICBlbnVtIE1h
eUJlTnVsbFRhZyB7IE1heUJlTnVsbCB9OwotICAgIFdyaXRlQmFycmllcihKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlLCBNYXlCZU51bGxUYWcp
CisgICAgV3JpdGVCYXJyaWVyKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgVCogdmFsdWUs
IE1heUJlTnVsbFRhZykKICAgICB7Ci0gICAgICAgIHRoaXMtPnNldE1heUJlTnVsbChnbG9iYWxE
YXRhLCBvd25lciwgdmFsdWUpOworICAgICAgICB0aGlzLT5zZXRNYXlCZU51bGwodm0sIG93bmVy
LCB2YWx1ZSk7CiAgICAgfQogfTsKIApAQCAtMjE2LDkgKzIxNiw5IEBAIHB1YmxpYzoKICAgICAg
ICAgdGhpcy0+c2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIH0KIAotICAg
IFdyaXRlQmFycmllcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IEpTQ2VsbCogb3du
ZXIsIEpTVmFsdWUgdmFsdWUpCisgICAgV3JpdGVCYXJyaWVyKFZNJiB2bSwgY29uc3QgSlNDZWxs
KiBvd25lciwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHRoaXMtPnNldChnbG9iYWxE
YXRhLCBvd25lciwgdmFsdWUpOworICAgICAgICB0aGlzLT5zZXQodm0sIG93bmVyLCB2YWx1ZSk7
CiAgICAgfQogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVy
cHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFycklu
dGVycHJldGVyLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95
YXJyL1lhcnJJbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTksNyArMzU5LDcgQEAg
cHVibGljOgogICAgIGJvb2wgbV9pZ25vcmVDYXNlOwogICAgIGJvb2wgbV9tdWx0aWxpbmU7CiAg
ICAgLy8gRWFjaCBCeXRlY29kZVBhdHRlcm4gaXMgYXNzb2NpYXRlZCB3aXRoIGEgUmVnRXhwLCBl
YWNoIFJlZ0V4cCBpcyBhc3NvY2lhdGVkCi0gICAgLy8gd2l0aCBhIEpTR2xvYmFsRGF0YS4gIENh
Y2hlIGEgcG9pbnRlciB0byBvdXQgSlNHbG9iYWxEYXRhJ3MgbV9yZWdFeHBBbGxvY2F0b3IuCisg
ICAgLy8gd2l0aCBhIFZNLiAgQ2FjaGUgYSBwb2ludGVyIHRvIG91dCBWTSdzIG1fcmVnRXhwQWxs
b2NhdG9yLgogICAgIEJ1bXBQb2ludGVyQWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsKIAogICAgIENo
YXJhY3RlckNsYXNzKiBuZXdsaW5lQ2hhcmFjdGVyQ2xhc3M7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUveWFyci9ZYXJySklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUveWFyci9ZYXJySklULmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBZYXJyIHsKIAogdGVtcGxhdGU8WWFyckpJVENv
bXBpbGVNb2RlIGNvbXBpbGVNb2RlPgogY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFj
cm9Bc3NlbWJsZXIgewotICAgIGZyaWVuZCB2b2lkIGppdENvbXBpbGUoSlNHbG9iYWxEYXRhKiwg
WWFyckNvZGVCbG9jayYgaml0T2JqZWN0LCBjb25zdCBTdHJpbmcmIHBhdHRlcm4sIHVuc2lnbmVk
JiBudW1TdWJwYXR0ZXJucywgY29uc3QgY2hhciomIGVycm9yLCBib29sIGlnbm9yZUNhc2UsIGJv
b2wgbXVsdGlsaW5lKTsKKyAgICBmcmllbmQgdm9pZCBqaXRDb21waWxlKFZNKiwgWWFyckNvZGVC
bG9jayYgaml0T2JqZWN0LCBjb25zdCBTdHJpbmcmIHBhdHRlcm4sIHVuc2lnbmVkJiBudW1TdWJw
YXR0ZXJucywgY29uc3QgY2hhciomIGVycm9yLCBib29sIGlnbm9yZUNhc2UsIGJvb2wgbXVsdGls
aW5lKTsKIAogI2lmIENQVShBUk0pCiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5wdXQg
PSBBUk1SZWdpc3RlcnM6OnIwOwpAQCAtMjYwOCw3ICsyNjA4LDcgQEAgcHVibGljOgogICAgIHsK
ICAgICB9CiAKLSAgICB2b2lkIGNvbXBpbGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBZYXJy
Q29kZUJsb2NrJiBqaXRPYmplY3QpCisgICAgdm9pZCBjb21waWxlKFZNKiB2bSwgWWFyckNvZGVC
bG9jayYgaml0T2JqZWN0KQogICAgIHsKICAgICAgICAgZ2VuZXJhdGVFbnRlcigpOwogCkBAIC0y
NjQyLDcgKzI2NDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIGJhY2t0cmFjaygpOwogCiAgICAgICAg
IC8vIExpbmsgJiBmaW5hbGl6ZSB0aGUgY29kZS4KLSAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVm
ZmVyKCpnbG9iYWxEYXRhLCB0aGlzLCBSRUdFWFBfQ09ERV9JRCk7CisgICAgICAgIExpbmtCdWZm
ZXIgbGlua0J1ZmZlcigqdm0sIHRoaXMsIFJFR0VYUF9DT0RFX0lEKTsKICAgICAgICAgbV9iYWNr
dHJhY2tpbmdTdGF0ZS5saW5rRGF0YUxhYmVscyhsaW5rQnVmZmVyKTsKIAogICAgICAgICBpZiAo
Y29tcGlsZU1vZGUgPT0gTWF0Y2hPbmx5KSB7CkBAIC0yNjg5LDEyICsyNjg5LDEyIEBAIHByaXZh
dGU6CiAgICAgQmFja3RyYWNraW5nU3RhdGUgbV9iYWNrdHJhY2tpbmdTdGF0ZTsKIH07CiAKLXZv
aWQgaml0Q29tcGlsZShZYXJyUGF0dGVybiYgcGF0dGVybiwgWWFyckNoYXJTaXplIGNoYXJTaXpl
LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFlhcnJDb2RlQmxvY2smIGppdE9iamVjdCwgWWFy
ckpJVENvbXBpbGVNb2RlIG1vZGUpCit2b2lkIGppdENvbXBpbGUoWWFyclBhdHRlcm4mIHBhdHRl
cm4sIFlhcnJDaGFyU2l6ZSBjaGFyU2l6ZSwgVk0qIHZtLCBZYXJyQ29kZUJsb2NrJiBqaXRPYmpl
Y3QsIFlhcnJKSVRDb21waWxlTW9kZSBtb2RlKQogewogICAgIGlmIChtb2RlID09IE1hdGNoT25s
eSkKLSAgICAgICAgWWFyckdlbmVyYXRvcjxNYXRjaE9ubHk+KHBhdHRlcm4sIGNoYXJTaXplKS5j
b21waWxlKGdsb2JhbERhdGEsIGppdE9iamVjdCk7CisgICAgICAgIFlhcnJHZW5lcmF0b3I8TWF0
Y2hPbmx5PihwYXR0ZXJuLCBjaGFyU2l6ZSkuY29tcGlsZSh2bSwgaml0T2JqZWN0KTsKICAgICBl
bHNlCi0gICAgICAgIFlhcnJHZW5lcmF0b3I8SW5jbHVkZVN1YnBhdHRlcm5zPihwYXR0ZXJuLCBj
aGFyU2l6ZSkuY29tcGlsZShnbG9iYWxEYXRhLCBqaXRPYmplY3QpOworICAgICAgICBZYXJyR2Vu
ZXJhdG9yPEluY2x1ZGVTdWJwYXR0ZXJucz4ocGF0dGVybiwgY2hhclNpemUpLmNvbXBpbGUodm0s
IGppdE9iamVjdCk7CiB9CiAKIH19CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9Z
YXJySklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJ
VC5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJy
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShZQVJS
X0pJVCkKIAotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5j
bHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiTWF0Y2hSZXN1bHQuaCIK
ICNpbmNsdWRlICJZYXJyLmgiCkBAIC00Miw3ICs0Miw3IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIGNsYXNzIEV4ZWN1dGFibGVQb29sOwog
CiBuYW1lc3BhY2UgWWFyciB7CkBAIC0xMzIsNyArMTMyLDcgQEAgZW51bSBZYXJySklUQ29tcGls
ZU1vZGUgewogICAgIE1hdGNoT25seSwKICAgICBJbmNsdWRlU3VicGF0dGVybnMKIH07Ci12b2lk
IGppdENvbXBpbGUoWWFyclBhdHRlcm4mLCBZYXJyQ2hhclNpemUsIEpTR2xvYmFsRGF0YSosIFlh
cnJDb2RlQmxvY2smIGppdE9iamVjdCwgWWFyckpJVENvbXBpbGVNb2RlID0gSW5jbHVkZVN1YnBh
dHRlcm5zKTsKK3ZvaWQgaml0Q29tcGlsZShZYXJyUGF0dGVybiYsIFlhcnJDaGFyU2l6ZSwgVk0q
LCBZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3QsIFlhcnJKSVRDb21waWxlTW9kZSA9IEluY2x1ZGVT
dWJwYXR0ZXJucyk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpZYXJyCiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDUzMiBAQAorMjAxMy0wNC0xNyAgR2VvZmZyZXkgR2FyZW4gIDxn
Z2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZWQgSlNHbG9iYWxEYXRhIHRvIFZNCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ3NzcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVz
dHMgKE9PUFMhKS4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNHbG9i
YWxEYXRhLmg6IFJlbW92ZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9W
TS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1l
L0pTR2xvYmFsRGF0YS5oLgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdl
YkNvcmUub3JkZXI6CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoK
KyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAg
ICAgICogYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRPTU9iamVjdEhhc2hUYWJsZU1hcDo6bWFwRm9yKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9ET01PYmplY3RIYXNoVGFibGVNYXAuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChE
T01PYmplY3RIYXNoVGFibGVNYXApOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTVdyYXBwZXJX
b3JsZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XcmFwcGVyV29ybGQ6OkRPTVdyYXBwZXJX
b3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpET01XcmFwcGVyV29ybGQ6On5ET01XcmFwcGVyV29y
bGQpOgorICAgICAgICAoV2ViQ29yZTo6bm9ybWFsV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6
bWFpblRocmVhZE5vcm1hbFdvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01XcmFwcGVy
V29ybGQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRPTVdyYXBwZXJXb3JsZDo6dm0pOgorICAgICAgICAoRE9NV3JhcHBl
cldvcmxkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0dDQ29u
dHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RTb29uKToKKyAgICAgICAgKFdlYkNvcmU6
OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3ROb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0ND
b250cm9sbGVyOjpzZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHQ0NvbnRyb2xsZXI6OmRpc2NhcmRBbGxDb21waWxlZENvZGUpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OnNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpkZXNlcmlhbGl6ZUlEQlZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2VyaWFsaXplSURC
VmFsdWVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6aWRiS2V5VG9TY3JpcHRWYWx1ZSk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTQ2FsbGJhY2tEYXRhOjpKU0NhbGxiYWNrRGF0YSk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6bG9va3VwTmFtZXNwYWNlVVJJ
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Z2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpyZXBv
cnRFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y2FjaGVET01TdHJ1Y3R1cmUpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6RE9N
Q29uc3RydWN0b3JPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpE
T01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Z2V0RE9NU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldElubGluZUNhY2hl
ZFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1N0cmlu
Z1dpdGhDYWNoZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OkpTRE9NR2xvYmFsT2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpT
RE9NR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0Ojpj
cmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RE9NQ29uc3RydWN0b3IpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU0RPTVdpbmRvd0Jhc2U6OkpTRE9NV2luZG93QmFzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0RPTVdpbmRvd0Jhc2U6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
RE9NV2luZG93QmFzZTo6dXBkYXRlRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01X
aW5kb3dCYXNlOjpjb21tb25WTSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dC
YXNlLmg6CisgICAgICAgIChKU0RPTVdpbmRvd0Jhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNE
T01XaW5kb3dCYXNlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
RE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpzZXRM
b2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEaWFsb2dIYW5kbGVyOjpkaWFsb2dDcmVhdGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpYWxvZ0hhbmRsZXI6OnJldHVyblZhbHVlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTRE9NV2luZG93U2hlbGw6OkpTRE9NV2luZG93U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01XaW5kb3dTaGVsbDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNE
T01XaW5kb3dTaGVsbDo6c2V0V2luZG93KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd1NoZWxsLmg6CisgICAgICAgIChKU0RPTVdpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRE9NV2luZG93U2hlbGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdp
bmRvd1NoZWxsOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
V3JhcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XcmFwcGVyOjpKU0RPTVdyYXBwZXIp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZlbnRDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQWNjZWxlcmF0aW9uT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZVJvdGF0aW9uUmF0ZU9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNEaWN0aW9uYXJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRGljdGlvbmFyeTo6Y29udmVy
dFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTRGljdGlvbmFyeTo6SlNEaWN0aW9uYXJ5KToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0Vycm9ySGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0Vycm9ySGFuZGxl
cjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTRXZlbnRMaXN0ZW5lcjo6c2V0V3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50
TGlzdGVuZXI6OmpzRnVuY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTERvY3Vt
ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50OjphbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6OnNldEFsbCk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTSFRNTFRlbXBsYXRlRWxlbWVudDo6Y29udGVudCk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNIaXN0b3J5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSGlzdG9yeTo6c3Rh
dGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU0ltYWdlQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTSW1hZ2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6Om5vZGVBc1NjcmlwdFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpmdW5jdGlvbkRldGFpbHMpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0SlNMaXN0ZW5lckZ1bmN0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0RXZlbnRMaXN0ZW5lcnMpOgorICAgICAgICAo
V2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6Omluc3BlY3QpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNMYXp5
RXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6ZUpTRnVuY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2Fn
ZUV2ZW50OjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZUluaXRNZXNzYWdlRXZlbnQp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTXV0YXRpb25DYWxsYmFjay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU011dGF0aW9uQ2FsbGJhY2s6OmNhbGwpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU011
dGF0aW9uT2JzZXJ2ZXJDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNNdXRhdGlvbk9ic2VydmVyKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyQ29uZGl0aW9uOjpKU05vZGVGaWx0ZXJDb25kaXRpb24p
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5oOgorICAgICAg
ICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyQ29uZGl0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNO
b2RlRmlsdGVyQ29uZGl0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9Ob2RlRmlsdGVyKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y2FjaGVTdGF0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNSZXF1ZXN0QW5pbWF0aW9uRnJh
bWVDYWxsYmFja0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1JlcXVlc3RBbmltYXRp
b25GcmFtZUNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNT
UUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1FMUmVz
dWx0U2V0Um93TGlzdDo6aXRlbSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDb250
ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckNvbnRleHRCYXNlOjpKU1dv
cmtlckNvbnRleHRCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyQ29udGV4dEJhc2U6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRC
YXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckNvbnRleHRCYXNlOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNXb3JrZXJDb250ZXh0QmFzZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VT
Y3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVs
ZWRBY3Rpb246OlNjaGVkdWxlZEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWRB
Y3Rpb246OmV4ZWN1dGVGdW5jdGlvbkluQ29udGV4dCk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2NoZWR1bGVkQWN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb246OlNj
aGVkdWxlZEFjdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVE
YXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0
Q2FjaGVkRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0
YTo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OmNs
ZWFyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNjcmlwdENhbGxTdGFjayk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVTY3JpcHRBcmd1bWVudHMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Njcmlw
dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y3Jl
YXRlV2luZG93U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZh
bHVhdGVJbldvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNyZWF0
ZVdvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmdldEFsbFdvcmxk
cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxs
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmluaXRTY3JpcHQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6YmluZGluZ1Jvb3RPYmplY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3Rz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OnNob3VsZEJ5cGFzc01haW5X
b3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0
Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6Ondp
bmRvd1NjcmlwdE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlk
UGF1c2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZXZlbnRMaXN0ZW5lckhhbmRsZXJCb2R5KToKKyAgICAgICAgKFdl
YkNvcmU6OmV2ZW50TGlzdGVuZXJIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmV2ZW50TGlz
dGVuZXJIYW5kbGVyTG9jYXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0
aW9uQ2FsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbGJhY2s6OmNhbGwpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL1NjcmlwdEdDRXZlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0R0NF
dmVudDo6Z2V0SGVhcFNpemUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRPYmplY3Q6OlNjcmlwdE9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRHbG9iYWxPYmplY3Q6OnNldCk6CisgICAgICAgICogYmluZGlu
Z3MvanMvU2NyaXB0U3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL1NjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpk
ZXNlcmlhbGl6ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpTY3JpcHRWYWx1ZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvU2NyaXB0V3JhcHBhYmxlLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoU2NyaXB0
V3JhcHBhYmxlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRXcmFwcGFibGVJbmxpbmVz
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRXcmFwcGFibGU6OnNldFdyYXBwZXIpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZFRlcm1pbmFsKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemVGb3JJbnNwZWN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjptYXliZVRocm93RXhjZXB0aW9u
SWZTZXJpYWxpemF0aW9uRmFpbGVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlND
bGllbnREYXRhLmg6CisgICAgICAgIChXZWJDb3JlSlNDbGllbnREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OmluaXROb3JtYWxXb3JsZENsaWVudERhdGEpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2Ny
aXB0Q29udHJvbGxlcjo6V29ya2VyU2NyaXB0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjp+V29ya2VyU2NyaXB0Q29udHJvbGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjppbml0U2NyaXB0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OnNjaGVkdWxlRXhlY3V0aW9uVGVybWlu
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6aXNFeGVj
dXRpb25UZXJtaW5hdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9s
bGVyOjpkaXNhYmxlRXZhbCk6CisgICAgICAgICogYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29u
dHJvbGxlci5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlw
dENvbnRyb2xsZXI6OnZtKToKKyAgICAgICAgKFdvcmtlclNjcmlwdENvbnRyb2xsZXIpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlclNjcmlwdERlYnVnU2VydmVyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9u
cyk6CisgICAgICAgICogYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW06CisgICAgICAg
ICgrW1dlYlNjcmlwdE9iamVjdCBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6SlNDOjpvcmlnaW5S
b290T2JqZWN0OnJvb3RPYmplY3Q6XSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgIChHZW5l
cmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRh
dGlvbik6CisgICAgICAgIChKU1ZhbHVlVG9OYXRpdmUpOgorICAgICAgICAoR2VuZXJhdGVDb25z
dHJ1Y3RvckRlY2xhcmF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JIZWxwZXJN
ZXRob2RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNGbG9hdDY0QXJy
YXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3RvclRh
YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRmxvYXQ2NEFycmF5Q29uc3RydWN0b3I6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEpTRmxvYXQ2NEFycmF5UHJvdG90eXBl
VGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SlNGbG9hdDY0QXJyYXlUYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0Zsb2F0NjRBcnJheTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SlNGbG9hdDY0QXJyYXk6OmNyZWF0ZVByb3RvdHlwZSk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRmxvYXQ2NEFycmF5Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpKU0Zsb2F0NjRBcnJheTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRmxvYXQ2NEFy
cmF5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNGbG9hdDY0QXJyYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNGbG9hdDY0QXJyYXlQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpKU0Zsb2F0NjRBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRmxvYXQ2NEFycmF5UHJvdG90eXBlOjpKU0Zsb2F0NjRBcnJheVByb3Rv
dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yOjpjcmVh
dGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RB
Y3RpdmVET01PYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0QWN0aXZlRE9NT2Jq
ZWN0Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dEFjdGl2ZURPTU9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0QWN0aXZlRE9NT2JqZWN0OjpjcmVhdGVQcm90b3R5cGUpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdEFjdGl2ZURPTU9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdEFjdGl2ZURPTU9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTVGVzdEFj
dGl2ZURPTU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RBY3RpdmVET01PYmplY3RQ
cm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RBY3RpdmVET01PYmpl
Y3RQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RB
Y3RpdmVET01PYmplY3RQcm90b3R5cGU6OkpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNr
V2l0aE5vUGFyYW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNr
V2l0aENsYXNzMVBhcmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxs
YmFja1dpdGhDbGFzczJQYXJhbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6
Y2FsbGJhY2tXaXRoU3RyaW5nTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFj
azo6Y2FsbGJhY2tXaXRoQm9vbGVhbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFj
azo6Y2FsbGJhY2tSZXF1aXJlc1RoaXNUb1Bhc3MpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OmNyZWF0ZVByb3Rv
dHlwZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5h
bWVkR2V0dGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpjcmVh
dGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZTo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJv
dG90eXBlOjpKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1
Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25z
dHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvcjo6Y3JlYXRlUHJvdG90eXBlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2
ZW50Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU1Rlc3RFdmVudENv
bnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90
b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9y
UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZl
bnRDb25zdHJ1Y3RvclByb3RvdHlwZTo6SlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFyZ2V0Q29u
c3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50
VGFyZ2V0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudFRh
cmdldDo6Y3JlYXRlUHJvdG90eXBlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RXZlbnRUYXJnZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFy
Z2V0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRUYXJnZXQ6OmNyZWF0
ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU1Rlc3RFdmVudFRhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU6OkpTVGVzdEV2ZW50VGFyZ2V0
UHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0
b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV4Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFeGNlcHRpb25D
b25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXhj
ZXB0aW9uOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFeGNlcHRp
b246OmNyZWF0ZVByb3RvdHlwZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV4Y2VwdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXhjZXB0aW9uOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXhjZXB0aW9uOjpjcmVhdGVTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNUZXN0RXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dEV4Y2VwdGlvblByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV4
Y2VwdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdEV4Y2VwdGlvblByb3RvdHlwZTo6SlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZTo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlOjpjcmVhdGVQcm90b3R5cGUp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdEludGVyZmFjZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTVGVz
dEludGVyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VQcm90b3R5
cGU6OkpTVGVzdEludGVyZmFjZVByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3I6OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXI6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXI6OmNyZWF0ZVByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlRnVuY3Rpb25NZXRob2QpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQ
cm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlOjpKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
UHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9y
OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVj
dG9yOjpjcmVhdGVQcm90b3R5cGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25z
dHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTVGVzdE5hbWVkQ29uc3RydWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0
cnVjdG9yUHJvdG90eXBlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5vZGVDb25z
dHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Tm9kZTo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Tm9kZTo6Y3JlYXRlUHJv
dG90eXBlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5o
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Tm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdE5vZGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU1Rlc3ROb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5vZGVQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3ROb2RlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0Tm9kZVByb3RvdHlwZTo6SlNUZXN0Tm9kZVByb3RvdHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROb2RlQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RPYmo6OmNyZWF0ZVByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpDYWNoZWRBdHRyaWJ1dGUxKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNhY2hl
ZEF0dHJpYnV0ZTIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxB
dHRyNENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNvbmRpdGlv
bmFsQXR0cjVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25k
aXRpb25hbEF0dHI2Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2Jq
QW55QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlcGxhY2VhYmxl
QXR0cmlidXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
Lmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmo6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RPYmo6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU1Rlc3RPYmopOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0T2JqUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0T2JqUHJvdG90eXBlOjpKU1Rlc3RPYmpQcm90b3R5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0T2JqQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0Nv
bnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGVQcm90b3R5cGUpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmg6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZTo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90
b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlOjpKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJv
dG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnND
b25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVj
dG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2U6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Y3JlYXRlUHJvdG90eXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNh
Y2hlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZUNhY2hlZFJlYWRvbmx5VmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQ
cm90b3R5cGU6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VD
b25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0VHlw
ZWRlZnNDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0VHlwZWRlZnM6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFR5
cGVkZWZzOjpjcmVhdGVQcm90b3R5cGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RUeXBlZGVmcy5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0VHlwZWRlZnM6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RUeXBlZGVmczo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKEpTVGVzdFR5cGVkZWZzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dFR5cGVkZWZzUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0VHlw
ZWRlZnNQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZTo6SlNUZXN0VHlwZWRlZnNQcm90b3R5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKiBicmlkZ2UvYy9DUnVudGltZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpCaW5kaW5n
czo6Q1J1bnRpbWVPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYnJpZGdlL2Mv
Y19pbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDUnVudGltZU1ldGhvZDo6
Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNSdW50aW1lTWV0aG9kOjpjcmVhdGVT
dHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q1J1bnRpbWVNZXRob2Q6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKiBicmlkZ2UvanNjL0JyaWRnZUpTQy5jcHA6CisgICAgICAg
IChKU0M6OkJpbmRpbmdzOjpJbnN0YW5jZTo6Y3JlYXRlUnVudGltZU9iamVjdCk6CisgICAgICAg
ICogYnJpZGdlL29iamMvT2JqQ1J1bnRpbWVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6QmluZGlu
Z3M6Ok9iakNSdW50aW1lT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJyaWRn
ZS9vYmpjL29iamNfaW5zdGFuY2UubW06CisgICAgICAgIChPYmpDUnVudGltZU1ldGhvZDo6Y3Jl
YXRlKToKKyAgICAgICAgKE9iakNSdW50aW1lTWV0aG9kOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAg
ICAgICAoT2JqQ1J1bnRpbWVNZXRob2Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBicmlk
Z2Uvb2JqYy9vYmpjX3J1bnRpbWUuaDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNGYWxs
YmFja09iamVjdEltcDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9v
YmpjX3J1bnRpbWUubW06CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpPYmpjRmFsbGJhY2tPYmpl
Y3RJbXA6Ok9iamNGYWxsYmFja09iamVjdEltcCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpP
YmpjRmFsbGJhY2tPYmplY3RJbXA6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBicmlkZ2Uv
cXQvcXRfaW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lT2Jq
ZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRJbnN0YW5j
ZTo6flF0SW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6Z2V0
UXRJbnN0YW5jZSk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwOgorICAgICAg
ICAoSlNDOjpSdW50aW1lQXJyYXk6OlJ1bnRpbWVBcnJheSk6CisgICAgICAgIChKU0M6OlJ1bnRp
bWVBcnJheTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX2FycmF5
Lmg6CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6
UnVudGltZUFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoUnVudGltZUFycmF5KToK
KyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9tZXRob2QuY3BwOgorICAgICAgICAoSlNDOjpSdW50
aW1lTWV0aG9kOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfbWV0
aG9kLmg6CisgICAgICAgIChKU0M6OlJ1bnRpbWVNZXRob2Q6OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6OlJ1bnRpbWVNZXRob2Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChSdW50aW1lTWV0
aG9kKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpCaW5kaW5nczo6UnVudGltZU9iamVjdDo6UnVudGltZU9iamVjdCk6CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpSdW50aW1lT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogYnJp
ZGdlL3J1bnRpbWVfb2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpSdW50aW1lT2Jq
ZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX3Jvb3QuY3Bw
OgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdDo6Um9vdE9iamVjdCk6CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0OjpnY1Byb3RlY3QpOgorICAgICAgICAoSlND
OjpCaW5kaW5nczo6Um9vdE9iamVjdDo6Z2NVbnByb3RlY3QpOgorICAgICAgICAoSlNDOjpCaW5k
aW5nczo6Um9vdE9iamVjdDo6dXBkYXRlR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6OlJvb3RPYmplY3Q6OmFkZFJ1bnRpbWVPYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9y
dW50aW1lX3Jvb3QuaDoKKyAgICAgICAgKFJvb3RPYmplY3QpOgorICAgICAgICAqIGRvbS9Ob2Rl
LmNwcDoKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBk
b20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRF
eGVjdXRpb25Db250ZXh0Ojp2bSk6CisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChTY3JpcHRFeGVjdXRpb25Db250ZXh0KToK
KyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogaHRtbC9I
VE1MSW1hZ2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlTG9hZGVyOjpu
b3RpZnlGaW5pc2hlZCk6CisgICAgICAgICogaW5zcGVjdG9yL1NjcmlwdEFyZ3VtZW50cy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRBcmd1bWVudHM6OlNjcmlwdEFyZ3VtZW50cyk6Cisg
ICAgICAgICogbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFzZS5jcHA6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6Omljb25EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRHbG9iYWxJY29uRGF0YWJhc2UpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L01lbW9yeVVz
YWdlU3VwcG9ydFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1lbW9yeVVzYWdlS0IpOgorICAg
ICAgICAoV2ViQ29yZTo6YWN0dWFsTWVtb3J5VXNhZ2VLQik6CisgICAgICAgICogcGxhdGZvcm0v
d2luL0NsaXBib2FyZFV0aWxpdGllc1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVH
bG9iYWxEYXRhKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwZXJmb3JtUmVxdWVzdCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpucE9iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3Ojpwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQpOgorICAgICAgICAq
IHBsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5WaWV3QmxhY2tCZXJyeS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6Omdl
dFdpbmRvd0luZm8pOgorICAgICAgICAqIHBsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAgICAg
KiBwbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpo
YW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRs
ZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToK
KyAgICAgICAgKiBwbHVnaW5zL21hYy9QbHVnaW5WaWV3TWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCk6CisgICAgICAgICogcGx1Z2lucy9xdC9QbHVn
aW5WaWV3UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQp
OgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpz
ZXROUFdpbmRvd1JlY3QpOgorICAgICAgICAqIHRlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmVUZXN0U3VwcG9ydDo6aW5qZWN0SW50ZXJuYWxzT2JqZWN0
KToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
WE1MSHR0cFJlcXVlc3Q6OmRyb3BQcm90ZWN0aW9uKToKKwogMjAxMy0wNC0xNyAgSmFtZXMgQ3Jh
aWcgIDxqYW1lc0Bjb29raWVjcm9vay5jb20+CiAKICAgICAgICAgQVg6IGFyaWEtbGV2ZWwgZG9l
cyBub3Qgb3ZlcnJpZGUgaW1wbGljaXQgbGV2ZWwgb24gaDEsIGgyLCBldGMKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtNDY0LDcgKzQ2NCw3IEBAIF9fWk43V2ViQ29yZTE1
R3JhcGhpY3NDb250ZXh0OWRyYXdJbWFnZUUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0
OXNldFNoYWRvd0VSS05TXzlGbG9hdFNpemVFZlJLTlNfNUNvbG9yRU5TXzEwQ29sb3JTcGFjZUUK
IF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0OXRyYW5zbGF0ZUVmZgogX19aTjdXZWJDb3Jl
MTVHcmFwaGljc0NvbnRleHREMUV2Ci1fX1pON1dlYkNvcmUxNUpTRE9NV2luZG93QmFzZTE4Y29t
bW9uSlNHbG9iYWxEYXRhRXYKK19fWk43V2ViQ29yZTE1SlNET01XaW5kb3dCYXNlOGNvbW1vblZN
RXYKIF9fWk43V2ViQ29yZTE1UGxhdGZvcm1DQUxheWVyMThzZXRHZW9tZXRyeUZsaXBwZWRFYgog
X19aTjdXZWJDb3JlMTVQcm90ZWN0aW9uU3BhY2VDMUVSS04zV1RGNlN0cmluZ0VpTlNfMjVQcm90
ZWN0aW9uU3BhY2VTZXJ2ZXJUeXBlRVM0X05TXzM1UHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRp
b25TY2hlbWVFCiBfX1pON1dlYkNvcmUxNVByb3RlY3Rpb25TcGFjZUMxRXYKQEAgLTI1OTYsNyAr
MjU5Niw3IEBAIF9fWk43V2ViQ29yZTRQYWdlMThzZXRWaXNpYmlsaXR5U3RhdGVFTlMKIAogI2lm
IFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKQogX19aTjNKU0MxM1J1bnRpbWVNZXRob2QxMWdldENh
bGxEYXRhRVBOU182SlNDZWxsRVJOU184Q2FsbERhdGFFCi1fX1pOM0pTQzEzUnVudGltZU1ldGhv
ZDE0ZmluaXNoQ3JlYXRpb25FUk5TXzEySlNHbG9iYWxEYXRhRVJLTjNXVEY2U3RyaW5nRQorX19a
TjNKU0MxM1J1bnRpbWVNZXRob2QxNGZpbmlzaENyZWF0aW9uRVJOU18yVk1FUktOM1dURjZTdHJp
bmdFCiBfX1pOM0pTQzEzUnVudGltZU1ldGhvZDE4Z2V0T3duUHJvcGVydHlTbG90RVBOU182SlND
ZWxsRVBOU185RXhlY1N0YXRlRU5TXzEyUHJvcGVydHlOYW1lRVJOU18xMlByb3BlcnR5U2xvdEUK
IF9fWk4zSlNDMTNSdW50aW1lTWV0aG9kMjRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JFUE5TXzhK
U09iamVjdEVQTlNfOUV4ZWNTdGF0ZUVOU18xMlByb3BlcnR5TmFtZUVSTlNfMThQcm9wZXJ0eURl
c2NyaXB0b3JFCiBfX1pOM0pTQzEzUnVudGltZU1ldGhvZDZzX2luZm9FCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLm9yZGVyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUub3JkZXIJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUub3Jk
ZXIJKHdvcmtpbmcgY29weSkKQEAgLTE5NTYsOCArMTk1Niw4IEBAIF9fWk43V2ViQ29yZTE2U2Ny
aXB0Q29udHJvbGxlcjEzZXhlY3V0ZVMKIF9fWk43V2ViQ29yZTE2U2NyaXB0Q29udHJvbGxlcjE3
Y2FuRXhlY3V0ZVNjcmlwdHNFTlNfMzNSZWFzb25Gb3JDYWxsaW5nQ2FuRXhlY3V0ZVNjcmlwdHNF
CiBfX1pON1dlYkNvcmUxNlNjcmlwdENvbnRyb2xsZXI4ZXZhbHVhdGVFUktOU18xNlNjcmlwdFNv
dXJjZUNvZGVFCiBfX1pON1dlYkNvcmUyMW1haW5UaHJlYWROb3JtYWxXb3JsZEV2Ci1fX1pON1dl
YkNvcmUxNUpTRE9NV2luZG93QmFzZTE4Y29tbW9uSlNHbG9iYWxEYXRhRXYKLV9fWk43V2ViQ29y
ZTE1RE9NV3JhcHBlcldvcmxkQzFFUE4zSlNDMTJKU0dsb2JhbERhdGFFYgorX19aTjdXZWJDb3Jl
MTVKU0RPTVdpbmRvd0Jhc2UxOGNvbW1vblZNRXYKK19fWk43V2ViQ29yZTE1RE9NV3JhcHBlcldv
cmxkQzFFUE4zSlNDMTJWTUViCiBfX1pOM1dURjlIYXNoVGFibGVJUE43V2ViQ29yZTE1RE9NV3Jh
cHBlcldvcmxkRVMzX05TXzE3SWRlbnRpdHlFeHRyYWN0b3JJUzNfRUVOU183UHRySGFzaElTM19F
RU5TXzEwSGFzaFRyYWl0c0lTM19FRVM5X0UzYWRkSVMzX1MzX05TXzIySWRlbnRpdHlIYXNoVHJh
bnNsYXRvcklTM19TM19TN19FRUVFU3Q0cGFpcklOU18xN0hhc2hUYWJsZUl0ZXJhdG9ySVMzX1Mz
X1M1X1M3X1M5X1M5X0VFYkVSS1RfUktUMF8KIF9fWk4zV1RGOUhhc2hUYWJsZUlQTjdXZWJDb3Jl
MTVET01XcmFwcGVyV29ybGRFUzNfTlNfMTdJZGVudGl0eUV4dHJhY3RvcklTM19FRU5TXzdQdHJI
YXNoSVMzX0VFTlNfMTBIYXNoVHJhaXRzSVMzX0VFUzlfRTZleHBhbmRFdgogX19aTjdXZWJDb3Jl
MTZTY3JpcHRDb250cm9sbGVyMTVldmFsdWF0ZUluV29ybGRFUktOU18xNlNjcmlwdFNvdXJjZUNv
ZGVFUE5TXzE1RE9NV3JhcHBlcldvcmxkRQpAQCAtMTk2OCwxMCArMTk2OCwxMCBAQCBfX1pON1dl
YkNvcmUxNkpTRE9NV2luZG93U2hlbGxDMUVOM1dURjEwCiBfX1pON1dlYkNvcmUxNkpTRE9NV2lu
ZG93U2hlbGxDMkVOM1dURjEwUGFzc1JlZlB0cklOU185RE9NV2luZG93RUVFUE5TXzE1RE9NV3Jh
cHBlcldvcmxkRQogX19aTjdXZWJDb3JlMTZKU0RPTVdpbmRvd1NoZWxsOXNldFdpbmRvd0VOM1dU
RjEwUGFzc1JlZlB0cklOU185RE9NV2luZG93RUVFCiBfX1pON1dlYkNvcmUyMEpTRE9NV2luZG93
UHJvdG90eXBlbndFbQotX19aTjdXZWJDb3JlMTFKU0RPTVdpbmRvd0MxRVJOM0pTQzEySlNHbG9i
YWxEYXRhRVBOUzFfOVN0cnVjdHVyZUVOM1dURjEwUGFzc1JlZlB0cklOU185RE9NV2luZG93RUVF
UE5TXzE2SlNET01XaW5kb3dTaGVsbEUKLV9fWk43V2ViQ29yZTE1SlNET01XaW5kb3dCYXNlQzJF
Uk4zSlNDMTJKU0dsb2JhbERhdGFFUE5TMV85U3RydWN0dXJlRU4zV1RGMTBQYXNzUmVmUHRySU5T
XzlET01XaW5kb3dFRUVQTlNfMTZKU0RPTVdpbmRvd1NoZWxsRQotX19aTjdXZWJDb3JlMTdKU0RP
TUdsb2JhbE9iamVjdEMyRVJOM0pTQzEySlNHbG9iYWxEYXRhRVBOUzFfOVN0cnVjdHVyZUVOM1dU
RjEwUGFzc1JlZlB0cklOU18xNURPTVdyYXBwZXJXb3JsZEVFRVBOUzFfOEpTT2JqZWN0RQotX19a
TjNKU0MxNEpTR2xvYmFsT2JqZWN0QzJFUk5TXzEySlNHbG9iYWxEYXRhRVBOU185U3RydWN0dXJl
RVBOU184SlNPYmplY3RFCitfX1pON1dlYkNvcmUxMUpTRE9NV2luZG93QzFFUk4zSlNDMTJWTUVQ
TlMxXzlTdHJ1Y3R1cmVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfOURPTVdpbmRvd0VFRVBOU18xNkpT
RE9NV2luZG93U2hlbGxFCitfX1pON1dlYkNvcmUxNUpTRE9NV2luZG93QmFzZUMyRVJOM0pTQzEy
Vk1FUE5TMV85U3RydWN0dXJlRU4zV1RGMTBQYXNzUmVmUHRySU5TXzlET01XaW5kb3dFRUVQTlNf
MTZKU0RPTVdpbmRvd1NoZWxsRQorX19aTjdXZWJDb3JlMTdKU0RPTUdsb2JhbE9iamVjdEMyRVJO
M0pTQzEyVk1FUE5TMV85U3RydWN0dXJlRU4zV1RGMTBQYXNzUmVmUHRySU5TXzE1RE9NV3JhcHBl
cldvcmxkRUVFUE5TMV84SlNPYmplY3RFCitfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3RDMkVSTlNf
MTJWTUVQTlNfOVN0cnVjdHVyZUVQTlNfOEpTT2JqZWN0RQogX19aTjdXZWJDb3JlNUZyYW1lOWtl
ZXBBbGl2ZUV2CiBfX1pOM0pTQzZTdHJvbmdJTjdXZWJDb3JlMTZKU0RPTVdpbmRvd1NoZWxsRUVD
MkVSS1MzXwogX19aTjNXVEY5SGFzaFRhYmxlSU5TXzZSZWZQdHJJTjdXZWJDb3JlMTVET01XcmFw
cGVyV29ybGRFRUVTdDRwYWlySVM0X04zSlNDNlN0cm9uZ0lOUzJfMTZKU0RPTVdpbmRvd1NoZWxs
RUVFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVNBX0VFTlNfN1B0ckhhc2hJUzRfRUVOU18xNFBh
aXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTNF9FRU5TR19JUzlfRUVFRVNIX0UxNWRlYWxs
b2NhdGVUYWJsZUVQU0FfaQpAQCAtMjAwNiw3ICsyMDA2LDcgQEAgX19aTjdXZWJDb3JlMTRKU0hU
TUxEb2N1bWVudEMxRVBOM0pTQzlTdAogX19aTjdXZWJDb3JlMTBKU0RvY3VtZW50QzJFUE4zSlND
OVN0cnVjdHVyZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVOM1dURjEwUGFzc1JlZlB0cklOU184
RG9jdW1lbnRFRUUKIF9fWk43V2ViQ29yZTZKU05vZGVDMkVQTjNKU0M5U3RydWN0dXJlRVBOU18x
N0pTRE9NR2xvYmFsT2JqZWN0RU4zV1RGMTBQYXNzUmVmUHRySU5TXzROb2RlRUVFCiBfX1pON1dl
YkNvcmUxMmNhY2hlV3JhcHBlcklOU18xMkhUTUxEb2N1bWVudEVFRXZQTlNfMTVET01XcmFwcGVy
V29ybGRFUFRfUE5TXzEySlNET01XcmFwcGVyRQotX19aTjNKU0M0V2Vha0lON1dlYkNvcmUxMkpT
RE9NV3JhcHBlckVFM3NldEVSTlNfMTJKU0dsb2JhbERhdGFFUFMyX1BOU18xNVdlYWtIYW5kbGVP
d25lckVQdgorX19aTjNKU0M0V2Vha0lON1dlYkNvcmUxMkpTRE9NV3JhcHBlckVFM3NldEVSTlNf
MTJWTUVQUzJfUE5TXzE1V2Vha0hhbmRsZU93bmVyRVB2CiBfX1pOM1dURjlIYXNoVGFibGVJTlNf
NlJlZlB0cklOU18xMFN0cmluZ0ltcGxFRUVTdDRwYWlySVMzX04zSlNDMTZTeW1ib2xUYWJsZUVu
dHJ5RUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTN19FRU5TNV8xN0lkZW50aWZpZXJSZXBIYXNo
RU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMzX0VFTlM1XzI2U3ltYm9sVGFi
bGVJbmRleEhhc2hUcmFpdHNFRUVTRF9FNGZpbmRJUFMyX05TXzI5UmVmUHRySGFzaE1hcFJhd0tl
eVRyYW5zbGF0b3JJU0lfUzdfU0ZfU0FfRUVFRU5TXzE3SGFzaFRhYmxlSXRlcmF0b3JJUzNfUzdf
UzlfU0FfU0ZfU0RfRUVSS1RfCiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMzVkaXNwYXRjaERp
ZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZEVQTlNfMTVET01XcmFwcGVyV29ybGRFCiBfX1pOSzNX
VEY5SGFzaFRhYmxlSU5TXzZSZWZQdHJJTjdXZWJDb3JlMTVET01XcmFwcGVyV29ybGRFRUVTdDRw
YWlySVM0X04zSlNDNlN0cm9uZ0lOUzJfMTZKU0RPTVdpbmRvd1NoZWxsRUVFRU5TXzE4UGFpckZp
cnN0RXh0cmFjdG9ySVNBX0VFTlNfN1B0ckhhc2hJUzRfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5T
XzEwSGFzaFRyYWl0c0lTNF9FRU5TR19JUzlfRUVFRVNIX0U0ZmluZElQUzNfTlNfMjlSZWZQdHJI
YXNoTWFwUmF3S2V5VHJhbnNsYXRvcklTTV9TQV9TSl9TRV9FRUVFTlNfMjJIYXNoVGFibGVDb25z
dEl0ZXJhdG9ySVM0X1NBX1NDX1NFX1NKX1NIX0VFUktUXwpAQCAtMjAyNyw3ICsyMDI3LDcgQEAg
X19aTks3V2ViQ29yZTE1SlNET01XaW5kb3dCYXNlMTZhbGxvd3NBYwogX19aTks3V2ViQ29yZTlG
cmFtZVRyZWU1Y2hpbGRFUktOM1dURjEyQXRvbWljU3RyaW5nRQogX19aTjdXZWJDb3JlMjBKU0RP
TVdpbmRvd1Byb3RvdHlwZTE4Z2V0T3duUHJvcGVydHlTbG90RVBOM0pTQzlFeGVjU3RhdGVFUktO
UzFfMTBJZGVudGlmaWVyRVJOUzFfMTJQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzIxZ2V0U3RhdGlj
RnVuY3Rpb25TbG90SU5TXzhKU09iamVjdEVFRWJQTlNfOUV4ZWNTdGF0ZUVQS05TXzlIYXNoVGFi
bGVFUFMxX1JLTlNfMTBJZGVudGlmaWVyRVJOU18xMlByb3BlcnR5U2xvdEUKLV9fWk4zSlNDOEpT
T2JqZWN0MTdnZXREaXJlY3RMb2NhdGlvbkVSTlNfMTJKU0dsb2JhbERhdGFFUktOU18xMElkZW50
aWZpZXJFCitfX1pOM0pTQzhKU09iamVjdDE3Z2V0RGlyZWN0TG9jYXRpb25FUk5TXzEyVk1FUktO
U18xMElkZW50aWZpZXJFCiBfX1pON1dlYkNvcmUxNmZpbmRBdG9taWNTdHJpbmdFUktOM0pTQzEw
SWRlbnRpZmllckUKIF9fWk5LM1dURjlIYXNoVGFibGVJUE5TXzE2QXRvbWljU3RyaW5nSW1wbEVT
dDRwYWlySVMyX2pFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzRfRUVOU183UHRySGFzaElTMl9F
RU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMyX0VFTlNBX0lqRUVFRVNCX0U4
Y29udGFpbnNJUzJfTlNfMjJJZGVudGl0eUhhc2hUcmFuc2xhdG9ySVMyX1M0X1M4X0VFRUViUktU
XwogX19aTkszV1RGOUhhc2hUYWJsZUlQTlNfMTZBdG9taWNTdHJpbmdJbXBsRVN0NHBhaXJJUzJf
UE43V2ViQ29yZTdFbGVtZW50RUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTN19FRU5TXzdQdHJI
YXNoSVMyX0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzJfRUVOU0RfSVM2
X0VFRUVTRV9FOGNvbnRhaW5zSVMyX05TXzIySWRlbnRpdHlIYXNoVHJhbnNsYXRvcklTMl9TN19T
Ql9FRUVFYlJLVF8KQEAgLTI4MzUsMTQgKzI4MzUsMTQgQEAgX19aTjNKU0M4QmluZGluZ3MyMHdl
YlNjcmlwdE9iamVjdENsYXNzRQogX19aTjNKU0M4QmluZGluZ3MxMk9iamNJbnN0YW5jZTZjcmVh
dGVFUDExb2JqY19vYmplY3ROM1dURjEwUGFzc1JlZlB0cklOUzBfMTBSb290T2JqZWN0RUVFCiBf
X1pOM0pTQzhCaW5kaW5nczEyT2JqY0luc3RhbmNlQzJFUDExb2JqY19vYmplY3ROM1dURjEwUGFz
c1JlZlB0cklOUzBfMTBSb290T2JqZWN0RUVFCiBfX1pOM0pTQzhCaW5kaW5nczhJbnN0YW5jZUMy
RU4zV1RGMTBQYXNzUmVmUHRySU5TMF8xMFJvb3RPYmplY3RFRUUKLV9fWk4zSlNDNFdlYWtJTlNf
OEJpbmRpbmdzMTNSdW50aW1lT2JqZWN0RUVDMkVSTlNfMTJKU0dsb2JhbERhdGFFUFMyX1BOU18x
NVdlYWtIYW5kbGVPd25lckVQdgorX19aTjNKU0M0V2Vha0lOU184QmluZGluZ3MxM1J1bnRpbWVP
YmplY3RFRUMyRVJOU18xMlZNRVBTMl9QTlNfMTVXZWFrSGFuZGxlT3duZXJFUHYKIF9fWk4zSlND
OEJpbmRpbmdzOEluc3RhbmNlMTljcmVhdGVSdW50aW1lT2JqZWN0RVBOU185RXhlY1N0YXRlRQog
X19aTjNKU0M4QmluZGluZ3MxMk9iamNJbnN0YW5jZTE2bmV3UnVudGltZU9iamVjdEVQTlNfOUV4
ZWNTdGF0ZUUKIF9fWk4zSlNDOEJpbmRpbmdzMTdPYmpDUnVudGltZU9iamVjdEMxRVBOU185RXhl
Y1N0YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0RU4zV1RGMTBQYXNzUmVmUHRySU5TMF8xMk9iamNJ
bnN0YW5jZUVFRQogX19aTjNKU0M4QmluZGluZ3MxN09iakNSdW50aW1lT2JqZWN0QzJFUE5TXzlF
eGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxPYmplY3RFTjNXVEYxMFBhc3NSZWZQdHJJTlMwXzEyT2Jq
Y0luc3RhbmNlRUVFCiBfX1pOM0pTQzhCaW5kaW5nczEzUnVudGltZU9iamVjdEMyRVBOU185RXhl
Y1N0YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBOU185U3RydWN0dXJlRU4zV1RGMTBQYXNzUmVm
UHRySU5TMF84SW5zdGFuY2VFRUUKLV9fWk4zSlNDNFdlYWtJTlNfOEJpbmRpbmdzMTNSdW50aW1l
T2JqZWN0RUUzc2V0RVJOU18xMkpTR2xvYmFsRGF0YUVQUzJfUE5TXzE1V2Vha0hhbmRsZU93bmVy
RVB2Ci1fX1pOM0pTQzhCaW5kaW5nczEwUm9vdE9iamVjdDE2YWRkUnVudGltZU9iamVjdEVSTlNf
MTJKU0dsb2JhbERhdGFFUE5TMF8xM1J1bnRpbWVPYmplY3RFCitfX1pOM0pTQzRXZWFrSU5TXzhC
aW5kaW5nczEzUnVudGltZU9iamVjdEVFM3NldEVSTlNfMTJWTUVQUzJfUE5TXzE1V2Vha0hhbmRs
ZU93bmVyRVB2CitfX1pOM0pTQzhCaW5kaW5nczEwUm9vdE9iamVjdDE2YWRkUnVudGltZU9iamVj
dEVSTlNfMTJWTUVQTlMwXzEzUnVudGltZU9iamVjdEUKIF9fWk4zSlNDNFdlYWtJTlNfOEJpbmRp
bmdzMTNSdW50aW1lT2JqZWN0RUVhU0VSS1MzXwogX19aTjdXZWJDb3JlMTZKU0RPTVdpbmRvd1No
ZWxsM3B1dEVQTjNKU0M5RXhlY1N0YXRlRVJLTlMxXzEwSWRlbnRpZmllckVOUzFfN0pTVmFsdWVF
Uk5TMV8xNVB1dFByb3BlcnR5U2xvdEUKIF9fWk43V2ViQ29yZTExSlNET01XaW5kb3czcHV0RVBO
M0pTQzlFeGVjU3RhdGVFUktOUzFfMTBJZGVudGlmaWVyRU5TMV83SlNWYWx1ZUVSTlMxXzE1UHV0
UHJvcGVydHlTbG90RQpAQCAtMzA3Niw3ICszMDc2LDcgQEAgX19aTjdXZWJDb3JlMTN0b0pTRE9N
V2luZG93RVBOU181RnJhbWVFUAogX19aTjdXZWJDb3JlTDE4ZXZlbnRQYXJhbWV0ZXJOYW1lRWIK
IF9fWk43V2ViQ29yZTE5SlNMYXp5RXZlbnRMaXN0ZW5lckMxRVJLTjNXVEY2U3RyaW5nRVM0X1M0
X1BOU180Tm9kZUVTNF9pUE4zSlNDOEpTT2JqZWN0RVBOU18xNURPTVdyYXBwZXJXb3JsZEUKIF9f
Wk43V2ViQ29yZTE1SlNFdmVudExpc3RlbmVyQzJFUE4zSlNDOEpTT2JqZWN0RVMzX2JQTlNfMTVE
T01XcmFwcGVyV29ybGRFCi1fX1pOM0pTQzRXZWFrSU5TXzhKU09iamVjdEVFQzJFUk5TXzEySlNH
bG9iYWxEYXRhRVBTMV9QTlNfMTVXZWFrSGFuZGxlT3duZXJFUHYKK19fWk4zSlNDNFdlYWtJTlNf
OEpTT2JqZWN0RUVDMkVSTlNfMTJWTUVQUzFfUE5TXzE1V2Vha0hhbmRsZU93bmVyRVB2CiBfX1pO
N1dlYkNvcmU4RG9jdW1lbnQzMXNldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXJFUktOM1dU
RjEyQXRvbWljU3RyaW5nRU5TMV8xMFBhc3NSZWZQdHJJTlNfMTNFdmVudExpc3RlbmVyRUVFCiBf
X1pON1dlYkNvcmUxMUV2ZW50VGFyZ2V0MjVzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyRVJLTjNX
VEYxMkF0b21pY1N0cmluZ0VOUzFfMTBQYXNzUmVmUHRySU5TXzEzRXZlbnRMaXN0ZW5lckVFRQog
X19aTjdXZWJDb3JlMTFFdmVudFRhcmdldDI1Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lckVSS04z
V1RGMTJBdG9taWNTdHJpbmdFCkBAIC0zMzM5LDEzICszMzM5LDEzIEBAIF9fWk5LN1dlYkNvcmUx
OUpTTGF6eUV2ZW50TGlzdGVuZXIyMGluaXQKIF9fWk5LN1dlYkNvcmUyMUNvbnRlbnRTZWN1cml0
eVBvbGljeTI0YWxsb3dJbmxpbmVFdmVudEhhbmRsZXJzRXYKIF9fWk43V2ViQ29yZTE5dG9KU0RP
TUdsb2JhbE9iamVjdEVQTlNfMjJTY3JpcHRFeGVjdXRpb25Db250ZXh0RVBOU18xNURPTVdyYXBw
ZXJXb3JsZEUKIF9fWlRobjIwOF9OSzdXZWJDb3JlOERvY3VtZW50MTBpc0RvY3VtZW50RXYKLV9f
Wk4zSlNDMThqc05vbnRyaXZpYWxTdHJpbmdFUE5TXzEySlNHbG9iYWxEYXRhRVJLTlNfN1VTdHJp
bmdFCitfX1pOM0pTQzE4anNOb250cml2aWFsU3RyaW5nRVBOU18xMlZNRVJLTlNfN1VTdHJpbmdF
CiBfX1pON1dlYkNvcmU4anNTdHJpbmdFUE4zSlNDOUV4ZWNTdGF0ZUVSS04zV1RGNlN0cmluZ0UK
IF9fWk43V2ViQ29yZTE2anNTdHJpbmdTbG93Q2FzZUVQTjNKU0M5RXhlY1N0YXRlRVJOM1dURjdI
YXNoTWFwSVBOUzNfMTBTdHJpbmdJbXBsRU5TMF80V2Vha0lOUzBfOEpTU3RyaW5nRUVFTlMzXzEw
U3RyaW5nSGFzaEVOUzNfMTBIYXNoVHJhaXRzSVM2X0VFTlNCX0lTOV9FRUVFUzZfCi1fX1pOM0pT
Qzhqc1N0cmluZ0VQTlNfMTJKU0dsb2JhbERhdGFFUktOU183VVN0cmluZ0UKLV9fWk4zSlNDNFdl
YWtJTlNfOEpTU3RyaW5nRUVDMkVSTlNfMTJKU0dsb2JhbERhdGFFUFMxX1BOU18xNVdlYWtIYW5k
bGVPd25lckVQdgorX19aTjNKU0M4anNTdHJpbmdFUE5TXzEyVk1FUktOU183VVN0cmluZ0UKK19f
Wk4zSlNDNFdlYWtJTlNfOEpTU3RyaW5nRUVDMkVSTlNfMTJWTUVQUzFfUE5TXzE1V2Vha0hhbmRs
ZU93bmVyRVB2CiBfX1pOM0pTQzRXZWFrSU5TXzhKU1N0cmluZ0VFYVNFUktTMl8KLV9fWk43V2Vi
Q29yZTIyU2NyaXB0RXhlY3V0aW9uQ29udGV4dDEwZ2xvYmFsRGF0YUV2CitfX1pON1dlYkNvcmUy
MlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQxMHZtRXYKIF9fWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlF
eGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5TXzVFdmVudEUKIF9fWk5LN1dlYkNv
cmU1RXZlbnQ5aXNVSUV2ZW50RXYKIF9fWk5LN1dlYkNvcmU1RXZlbnQxNWlzTXV0YXRpb25FdmVu
dEV2CkBAIC0zMzY2LDcgKzMzNjYsNyBAQCBfX1pON1dlYkNvcmUxM2NyZWF0ZVdyYXBwZXJJTlNf
N0pTRXZlbnRFCiBfX1pON1dlYkNvcmUxNWdldERPTVN0cnVjdHVyZUlOU183SlNFdmVudEVFRVBO
M0pTQzlTdHJ1Y3R1cmVFUE5TMl85RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RQog
X19aTjdXZWJDb3JlN0pTRXZlbnQxNWNyZWF0ZVByb3RvdHlwZUVQTjNKU0M5RXhlY1N0YXRlRVBO
UzFfMTRKU0dsb2JhbE9iamVjdEUKIF9fWk43V2ViQ29yZTdKU0V2ZW50QzFFUE4zSlNDOVN0cnVj
dHVyZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVOM1dURjEwUGFzc1JlZlB0cklOU181RXZlbnRF
RUUKLV9fWk4zSlNDNFdlYWtJTjdXZWJDb3JlMTJKU0RPTVdyYXBwZXJFRUMyRVJOU18xMkpTR2xv
YmFsRGF0YUVQUzJfUE5TXzE1V2Vha0hhbmRsZU93bmVyRVB2CitfX1pOM0pTQzRXZWFrSU43V2Vi
Q29yZTEySlNET01XcmFwcGVyRUVDMkVSTlNfMTJWTUVQUzJfUE5TXzE1V2Vha0hhbmRsZU93bmVy
RVB2CiBfX1pOM0pTQzRXZWFrSU43V2ViQ29yZTEySlNET01XcmFwcGVyRUVhU0VSS1MzXwogX19a
Tks3V2ViQ29yZTE3SlNET01HbG9iYWxPYmplY3QxMmN1cnJlbnRFdmVudEV2CiBfX1pON1dlYkNv
cmU0dG9KU0VQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOU18xMUV2
ZW50VGFyZ2V0RQpAQCAtMzY3NSw3ICszNjc1LDcgQEAgX19aTjdXZWJDb3JlMTdNb3VzZVJlbGF0
ZWRFdmVudDE0cmVjZWl2ZQogX19aTks3V2ViQ29yZTEwTW91c2VFdmVudDEyaXNNb3VzZUV2ZW50
RXYKIF9fWk43V2ViQ29yZTlJbnB1dFR5cGUxN3dpbGxEaXNwYXRjaENsaWNrRXYKIF9fWk5LN1dl
YkNvcmU0Tm9kZTIyc2NyaXB0RXhlY3V0aW9uQ29udGV4dEV2Ci1fX1pOM0pTQzRXZWFrSU5TXzhK
U09iamVjdEVFM3NldEVSTlNfMTJKU0dsb2JhbERhdGFFUFMxX1BOU18xNVdlYWtIYW5kbGVPd25l
ckVQdgorX19aTjNKU0M0V2Vha0lOU184SlNPYmplY3RFRTNzZXRFUk5TXzEyVk1FUFMxX1BOU18x
NVdlYWtIYW5kbGVPd25lckVQdgogX19aTks3V2ViQ29yZTEzSlNIVE1MRWxlbWVudDIxcHVzaEV2
ZW50SGFuZGxlclNjb3BlRVBOM0pTQzlFeGVjU3RhdGVFUE5TMV8xNFNjb3BlQ2hhaW5Ob2RlRQog
X19aTks3V2ViQ29yZTROb2RlMTNvd25lckRvY3VtZW50RXYKIF9fWk5LN1dlYkNvcmUyMkhUTUxG
b3JtQ29udHJvbEVsZW1lbnQxMXZpcnR1YWxGb3JtRXYKQEAgLTQ4NTIsNyArNDg1Miw3IEBAIF9f
Wk43V2ViQ29yZTIwSFRNTENvbnN0cnVjdGlvblNpdGUyOGluc2UKIF9fWk5LN1dlYkNvcmUxNkhU
TUxFbGVtZW50U3RhY2sxMWh0bWxFbGVtZW50RXYKIF9fWk43V2ViQ29yZTIwSFRNTENvbnN0cnVj
dGlvblNpdGUzNW1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50RVJOU18xNUF0b21p
Y0hUTUxUb2tlbkVQTlNfN0VsZW1lbnRFCiBfX1pON1dlYkNvcmUyMHNldEpTRE9NV2luZG93UGFy
ZW50RVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84SlNPYmplY3RFTlMwXzdKU1ZhbHVlRQotX19aTjNK
U0M4SlNPYmplY3QxN3B1dERpcmVjdEludGVybmFsRVJOU18xMkpTR2xvYmFsRGF0YUVSS05TXzEw
SWRlbnRpZmllckVOU183SlNWYWx1ZUVqYlJOU18xNVB1dFByb3BlcnR5U2xvdEVQTlNfNkpTQ2Vs
bEUKK19fWk4zSlNDOEpTT2JqZWN0MTdwdXREaXJlY3RJbnRlcm5hbEVSTlNfMTJWTUVSS05TXzEw
SWRlbnRpZmllckVOU183SlNWYWx1ZUVqYlJOU18xNVB1dFByb3BlcnR5U2xvdEVQTlNfNkpTQ2Vs
bEUKIF9fWk43V2ViQ29yZUwxNnRhYmxlQ29uc3RydWN0b3JFUktOU18xM1F1YWxpZmllZE5hbWVF
UE5TXzhEb2N1bWVudEVQTlNfMTVIVE1MRm9ybUVsZW1lbnRFYgogX19aTjdXZWJDb3JlMTZIVE1M
VGFibGVFbGVtZW50NmNyZWF0ZUVSS05TXzEzUXVhbGlmaWVkTmFtZUVQTlNfOERvY3VtZW50RQog
X19aTks3V2ViQ29yZTE2SFRNTFRhYmxlRWxlbWVudDEwbWFwVG9FbnRyeUVSS05TXzEzUXVhbGlm
aWVkTmFtZUVSTlNfMjBNYXBwZWRBdHRyaWJ1dGVFbnRyeUUKQEAgLTczMzYsOCArNzMzNiw4IEBA
IF9fWk43V2ViQ29yZTE2anNET01XaW5kb3dFdmVudEVQTjNKU0M5RXgKIF9fWk5LN1dlYkNvcmUx
MUpTRE9NV2luZG93NWV2ZW50RVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pOM0pTQzRXZWFrSU43V2Vi
Q29yZTEySlNET01XcmFwcGVyRUVDMkVSS1MzXwogX19aTjdXZWJDb3JlN0pTRXZlbnQxOGdldE93
blByb3BlcnR5U2xvdEVQTjNKU0M5RXhlY1N0YXRlRVJLTlMxXzEwSWRlbnRpZmllckVSTlMxXzEy
UHJvcGVydHlTbG90RQotX19aTjdXZWJDb3JlMjVnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhRVJO
M0pTQzEySlNHbG9iYWxEYXRhRVBLTlMwXzlIYXNoVGFibGVFCi1fX1pON1dlYkNvcmUyMURPTU9i
amVjdEhhc2hUYWJsZU1hcDZtYXBGb3JFUk4zSlNDMTJKU0dsb2JhbERhdGFFCitfX1pON1dlYkNv
cmUyNWdldEhhc2hUYWJsZUZvckdsb2JhbERhdGFFUk4zSlNDMTJWTUVQS05TMF85SGFzaFRhYmxl
RQorX19aTjdXZWJDb3JlMjFET01PYmplY3RIYXNoVGFibGVNYXA2bWFwRm9yRVJOM0pTQzEyVk1F
CiBfX1pON1dlYkNvcmUyMURPTU9iamVjdEhhc2hUYWJsZU1hcDNnZXRFUEtOM0pTQzlIYXNoVGFi
bGVFCiBfX1pOM0pTQzE4Z2V0U3RhdGljVmFsdWVTbG90SU43V2ViQ29yZTdKU0V2ZW50RU5TMV8x
MkpTRE9NV3JhcHBlckVFRWJQTlNfOUV4ZWNTdGF0ZUVQS05TXzlIYXNoVGFibGVFUFRfUktOU18x
MElkZW50aWZpZXJFUk5TXzEyUHJvcGVydHlTbG90RQogX19aTjdXZWJDb3JlMTFqc0V2ZW50VHlw
ZUVQTjNKU0M5RXhlY1N0YXRlRU5TMF83SlNWYWx1ZUVSS05TMF8xMElkZW50aWZpZXJFCkBAIC0x
NDM0NCw3ICsxNDM0NCw3IEBAIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MjNzZXRVcGRh
dGkKIF9fWk5LN1dlYkNvcmUxNFJlbmRlclRoZW1lTWFjMjBjb250cm9sU3VwcG9ydHNUaW50c0VQ
S05TXzEyUmVuZGVyT2JqZWN0RQogX19aTjdXZWJDb3JlMjFTZXJpYWxpemVkU2NyaXB0VmFsdWVD
MUVSTjNXVEY2VmVjdG9ySWhMbTBFRUUKIF9fWk43V2ViQ29yZTIxU2VyaWFsaXplZFNjcmlwdFZh
bHVlNmNyZWF0ZUVQSzE1T3BhcXVlSlNDb250ZXh0UEsxM09wYXF1ZUpTVmFsdWVQUzZfCi1fX1pO
M0pTQzIzQVBJRW50cnlTaGltV2l0aG91dExvY2tDMkVQTlNfMTJKU0dsb2JhbERhdGFFYgorX19a
TjNKU0MyM0FQSUVudHJ5U2hpbVdpdGhvdXRMb2NrQzJFUE5TXzEyVk1FYgogX19aTjdXZWJDb3Jl
MjFTZXJpYWxpemVkU2NyaXB0VmFsdWU2Y3JlYXRlRVBOM0pTQzlFeGVjU3RhdGVFTlMxXzdKU1Zh
bHVlRU5TXzIyU2VyaWFsaXphdGlvbkVycm9yTW9kZUUKIF9fWk43V2ViQ29yZTE1Q2xvbmVTZXJp
YWxpemVyQzJFUE4zSlNDOUV4ZWNTdGF0ZUVSTjNXVEY2VmVjdG9ySWhMbTBFRUUKIF9fWk43V2Vi
Q29yZUwxN3dyaXRlTGl0dGxlRW5kaWFuSWpFRXZSTjNXVEY2VmVjdG9ySWhMbTBFRUVUXwpAQCAt
MTczNDcsNyArMTczNDcsNyBAQCBfX1pON1dlYkNvcmUyOGpzWE1MSHR0cFJlcXVlc3RSZXNwb25z
ZVRlCiBfX1pOSzdXZWJDb3JlMTZKU1hNTEh0dHBSZXF1ZXN0MTJyZXNwb25zZVRleHRFUE4zSlND
OUV4ZWNTdGF0ZUUKIF9fWk43V2ViQ29yZTE0WE1MSHR0cFJlcXVlc3QxMnJlc3BvbnNlVGV4dEVS
aQogX19aTjdXZWJDb3JlMTlqc093bmVkU3RyaW5nT3JOdWxsRVBOM0pTQzlFeGVjU3RhdGVFUktO
M1dURjZTdHJpbmdFCi1fX1pOM0pTQzEzanNPd25lZFN0cmluZ0VQTlNfMTJKU0dsb2JhbERhdGFF
UktOU183VVN0cmluZ0UKK19fWk4zSlNDMTNqc093bmVkU3RyaW5nRVBOU18xMlZNRVJLTlNfN1VT
dHJpbmdFCiBfX1pON1dlYkNvcmU0OGpzV2ViR0xSZW5kZXJpbmdDb250ZXh0UHJvdG90eXBlRnVu
Y3Rpb25HZXRFcnJvckVQTjNKU0M5RXhlY1N0YXRlRQogX19aTjdXZWJDb3JlMjFXZWJHTFJlbmRl
cmluZ0NvbnRleHQ4Z2V0RXJyb3JFdgogX19aTjdXZWJDb3JlMTdHcmFwaGljc0NvbnRleHQzRDhn
ZXRFcnJvckV2CkBAIC0xODYwMSwxNCArMTg2MDEsMTQgQEAgX19aTjdXZWJDb3JlMjNXb3JrZXJT
Y3JpcHREZWJ1Z1NlcnZlckMxRQogX19aTjdXZWJDb3JlMjJXb3JrZXJTY3JpcHRDb250cm9sbGVy
OGV2YWx1YXRlRVJLTlNfMTZTY3JpcHRTb3VyY2VDb2RlRQogX19aTjdXZWJDb3JlMjJXb3JrZXJT
Y3JpcHRDb250cm9sbGVyOGV2YWx1YXRlRVJLTlNfMTZTY3JpcHRTb3VyY2VDb2RlRVBOU18xMVNj
cmlwdFZhbHVlRQogX19aTjdXZWJDb3JlMjJXb3JrZXJTY3JpcHRDb250cm9sbGVyMTBpbml0U2Ny
aXB0RXYKLV9fWk43V2ViQ29yZTI0SlNXb3JrZXJDb250ZXh0UHJvdG90eXBlbndFbVBOM0pTQzEy
SlNHbG9iYWxEYXRhRQorX19aTjdXZWJDb3JlMjRKU1dvcmtlckNvbnRleHRQcm90b3R5cGVud0Vt
UE4zSlNDMTJWTUUKIF9fWk5LN1dlYkNvcmUyMkRlZGljYXRlZFdvcmtlckNvbnRleHQyNGlzRGVk
aWNhdGVkV29ya2VyQ29udGV4dEV2Ci1fX1pON1dlYkNvcmUzM0pTRGVkaWNhdGVkV29ya2VyQ29u
dGV4dFByb3RvdHlwZW53RW1QTjNKU0MxMkpTR2xvYmFsRGF0YUUKK19fWk43V2ViQ29yZTMzSlNE
ZWRpY2F0ZWRXb3JrZXJDb250ZXh0UHJvdG90eXBlbndFbVBOM0pTQzEyVk1FCiBfX1pUaG4xMjhf
TjdXZWJDb3JlMjJEZWRpY2F0ZWRXb3JrZXJDb250ZXh0MjR0b0RlZGljYXRlZFdvcmtlckNvbnRl
eHRFdgotX19aTjdXZWJDb3JlMjRKU0RlZGljYXRlZFdvcmtlckNvbnRleHRDMUVSTjNKU0MxMkpT
R2xvYmFsRGF0YUVQTlMxXzlTdHJ1Y3R1cmVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMjJEZWRpY2F0
ZWRXb3JrZXJDb250ZXh0RUVFCi1fX1pON1dlYkNvcmUxNUpTV29ya2VyQ29udGV4dEMyRVJOM0pT
QzEySlNHbG9iYWxEYXRhRVBOUzFfOVN0cnVjdHVyZUVOM1dURjEwUGFzc1JlZlB0cklOU18xM1dv
cmtlckNvbnRleHRFRUUKLV9fWk43V2ViQ29yZTE5SlNXb3JrZXJDb250ZXh0QmFzZUMyRVJOM0pT
QzEySlNHbG9iYWxEYXRhRVBOUzFfOVN0cnVjdHVyZUVOM1dURjEwUGFzc1JlZlB0cklOU18xM1dv
cmtlckNvbnRleHRFRUUKLV9fWk43V2ViQ29yZTExbm9ybWFsV29ybGRFUk4zSlNDMTJKU0dsb2Jh
bERhdGFFCitfX1pON1dlYkNvcmUyNEpTRGVkaWNhdGVkV29ya2VyQ29udGV4dEMxRVJOM0pTQzEy
Vk1FUE5TMV85U3RydWN0dXJlRU4zV1RGMTBQYXNzUmVmUHRySU5TXzIyRGVkaWNhdGVkV29ya2Vy
Q29udGV4dEVFRQorX19aTjdXZWJDb3JlMTVKU1dvcmtlckNvbnRleHRDMkVSTjNKU0MxMlZNRVBO
UzFfOVN0cnVjdHVyZUVOM1dURjEwUGFzc1JlZlB0cklOU18xM1dvcmtlckNvbnRleHRFRUUKK19f
Wk43V2ViQ29yZTE5SlNXb3JrZXJDb250ZXh0QmFzZUMyRVJOM0pTQzEyVk1FUE5TMV85U3RydWN0
dXJlRU4zV1RGMTBQYXNzUmVmUHRySU5TXzEzV29ya2VyQ29udGV4dEVFRQorX19aTjdXZWJDb3Jl
MTFub3JtYWxXb3JsZEVSTjNKU0MxMlZNRQogX19aTkszSlNDMTRKU0dsb2JhbE9iamVjdDE3c3Vw
cG9ydHNQcm9maWxpbmdFdgogX19aTkszSlNDMTRKU0dsb2JhbE9iamVjdDIyc3VwcG9ydHNSaWNo
U291cmNlSW5mb0V2CiBfX1pON1dlYkNvcmUyNEpTRGVkaWNhdGVkV29ya2VyQ29udGV4dDNwdXRF
UE4zSlNDOUV4ZWNTdGF0ZUVSS05TMV8xMElkZW50aWZpZXJFTlMxXzdKU1ZhbHVlRVJOUzFfMTVQ
dXRQcm9wZXJ0eVNsb3RFCkBAIC0xOTY5OCw3ICsxOTY5OCw3IEBAIF9fWk43V2ViQ29yZTIyanNI
VE1MTWVkaWFFbGVtZW50TG9vcEVQTjMKIF9fWk43V2ViQ29yZTI1c2V0SlNIVE1MTWVkaWFFbGVt
ZW50TG9vcEVQTjNKU0M5RXhlY1N0YXRlRVBOUzBfOEpTT2JqZWN0RU5TMF83SlNWYWx1ZUUKIF9f
Wk43V2ViQ29yZTE3anNIVE1MRG9jdW1lbnRBbGxFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFs
dWVFUktOUzBfMTBJZGVudGlmaWVyRQogX19aTks3V2ViQ29yZTE0SlNIVE1MRG9jdW1lbnQzYWxs
RVBOM0pTQzlFeGVjU3RhdGVFCi1fX1pOSzNKU0M4SlNPYmplY3Q5Z2V0RGlyZWN0RVJOU18xMkpT
R2xvYmFsRGF0YUVSS05TXzEwSWRlbnRpZmllckUKK19fWk5LM0pTQzhKU09iamVjdDlnZXREaXJl
Y3RFUk5TXzEyVk1FUktOU18xMElkZW50aWZpZXJFCiBfX1pON1dlYkNvcmU4RG9jdW1lbnQzYWxs
RXYKIF9fWk43V2ViQ29yZTE3SFRNTEFsbENvbGxlY3Rpb242Y3JlYXRlRU4zV1RGMTBQYXNzUmVm
UHRySU5TXzROb2RlRUVFCiBfX1pON1dlYkNvcmUxNEhUTUxDb2xsZWN0aW9uQzJFTjNXVEYxMFBh
c3NSZWZQdHJJTlNfNE5vZGVFRUVOU18xNENvbGxlY3Rpb25UeXBlRQpAQCAtMTk3NTEsOSArMTk3
NTEsOSBAQCBfX1pON1dlYkNvcmUyM0pTTm9kZUZpbHRlckNvbnN0cnVjdG9yMThnCiBfX1pOM0pT
QzE4Z2V0U3RhdGljVmFsdWVTbG90SU43V2ViQ29yZTIzSlNOb2RlRmlsdGVyQ29uc3RydWN0b3JF
TlMxXzEySlNET01XcmFwcGVyRUVFYlBOU185RXhlY1N0YXRlRVBLTlNfOUhhc2hUYWJsZUVQVF9S
S05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCiBfX1pON1dlYkNvcmUyNGpzTm9k
ZUZpbHRlclNIT1dfRUxFTUVOVEVQTjNKU0M5RXhlY1N0YXRlRU5TMF83SlNWYWx1ZUVSS05TMF8x
MElkZW50aWZpZXJFCiBfX1pON1dlYkNvcmU0NWpzRG9jdW1lbnRQcm90b3R5cGVGdW5jdGlvbkNy
ZWF0ZU5vZGVJdGVyYXRvckVQTjNKU0M5RXhlY1N0YXRlRQotX19aTjdXZWJDb3JlMTJ0b05vZGVG
aWx0ZXJFUk4zSlNDMTJKU0dsb2JhbERhdGFFTlMwXzdKU1ZhbHVlRQotX19aTjdXZWJDb3JlMjFK
U05vZGVGaWx0ZXJDb25kaXRpb25DMUVSTjNKU0MxMkpTR2xvYmFsRGF0YUVQTlNfMTBOb2RlRmls
dGVyRU5TMV83SlNWYWx1ZUUKLV9fWk4zSlNDNFdlYWtJTlNfN1Vua25vd25FRUMyRVJOU18xMkpT
R2xvYmFsRGF0YUVOU183SlNWYWx1ZUVQTlNfMTVXZWFrSGFuZGxlT3duZXJFUHYKK19fWk43V2Vi
Q29yZTEydG9Ob2RlRmlsdGVyRVJOM0pTQzEyVk1FTlMwXzdKU1ZhbHVlRQorX19aTjdXZWJDb3Jl
MjFKU05vZGVGaWx0ZXJDb25kaXRpb25DMUVSTjNKU0MxMlZNRVBOU18xME5vZGVGaWx0ZXJFTlMx
XzdKU1ZhbHVlRQorX19aTjNKU0M0V2Vha0lOU183VW5rbm93bkVFQzJFUk5TXzEyVk1FTlNfN0pT
VmFsdWVFUE5TXzE1V2Vha0hhbmRsZU93bmVyRVB2CiBfX1pON1dlYkNvcmU0dG9KU0VQTjNKU0M5
RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOU18xMk5vZGVJdGVyYXRvckUKIF9f
Wk43V2ViQ29yZTEzY3JlYXRlV3JhcHBlcklOU18xNEpTTm9kZUl0ZXJhdG9yRU5TXzEyTm9kZUl0
ZXJhdG9yRUVFUE5TXzEySlNET01XcmFwcGVyRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01H
bG9iYWxPYmplY3RFUFQwXwogX19aTjdXZWJDb3JlMTVnZXRET01TdHJ1Y3R1cmVJTlNfMTRKU05v
ZGVJdGVyYXRvckVFRVBOM0pTQzlTdHJ1Y3R1cmVFUE5TMl85RXhlY1N0YXRlRVBOU18xN0pTRE9N
R2xvYmFsT2JqZWN0RQpAQCAtMjYzMjYsOSArMjYzMjYsOSBAQCBfX1pON1dlYkNvcmUyNFNoYXJl
ZFdvcmtlclNjcmlwdExvYWRlckQwCiBfX1pON1dlYkNvcmUxOFNoYXJlZFdvcmtlclRocmVhZDE5
Y3JlYXRlV29ya2VyQ29udGV4dEVSS05TXzRLVVJMRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJD
b3JlMTlTaGFyZWRXb3JrZXJDb250ZXh0QzFFUktOM1dURjZTdHJpbmdFUktOU180S1VSTEVTNF9Q
TlNfMThTaGFyZWRXb3JrZXJUaHJlYWRFCiBfX1pOSzdXZWJDb3JlMTNXb3JrZXJDb250ZXh0MjRp
c0RlZGljYXRlZFdvcmtlckNvbnRleHRFdgotX19aTjdXZWJDb3JlMzBKU1NoYXJlZFdvcmtlckNv
bnRleHRQcm90b3R5cGVud0VtUE4zSlNDMTJKU0dsb2JhbERhdGFFCitfX1pON1dlYkNvcmUzMEpT
U2hhcmVkV29ya2VyQ29udGV4dFByb3RvdHlwZW53RW1QTjNKU0MxMlZNRQogX19aVGhuMTI4X043
V2ViQ29yZTE5U2hhcmVkV29ya2VyQ29udGV4dDIxdG9TaGFyZWRXb3JrZXJDb250ZXh0RXYKLV9f
Wk43V2ViQ29yZTIxSlNTaGFyZWRXb3JrZXJDb250ZXh0QzFFUk4zSlNDMTJKU0dsb2JhbERhdGFF
UE5TMV85U3RydWN0dXJlRU4zV1RGMTBQYXNzUmVmUHRySU5TXzE5U2hhcmVkV29ya2VyQ29udGV4
dEVFRQorX19aTjdXZWJDb3JlMjFKU1NoYXJlZFdvcmtlckNvbnRleHRDMUVSTjNKU0MxMlZNRVBO
UzFfOVN0cnVjdHVyZUVOM1dURjEwUGFzc1JlZlB0cklOU18xOVNoYXJlZFdvcmtlckNvbnRleHRF
RUUKIF9fWk43V2ViQ29yZTIxSlNTaGFyZWRXb3JrZXJDb250ZXh0M3B1dEVQTjNKU0M5RXhlY1N0
YXRlRVJLTlMxXzEwSWRlbnRpZmllckVOUzFfN0pTVmFsdWVFUk5TMV8xNVB1dFByb3BlcnR5U2xv
dEUKIF9fWk4zSlNDOWxvb2t1cFB1dElON1dlYkNvcmUyMUpTU2hhcmVkV29ya2VyQ29udGV4dEVF
RWJQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVOU183SlNWYWx1ZUVQS05TXzlIYXNo
VGFibGVFUFRfCiBfX1pON1dlYkNvcmUzM3NldEpTU2hhcmVkV29ya2VyQ29udGV4dE9uY29ubmVj
dEVQTjNKU0M5RXhlY1N0YXRlRVBOUzBfOEpTT2JqZWN0RU5TMF83SlNWYWx1ZUUKQEAgLTQxMjA1
LDcgKzQxMjA1LDcgQEAgX19aWk43V2ViQ29yZTI0cGFyc2VYU1NQcm90ZWN0aW9uSGVhZGVyRQog
X19aR1ZaTjdXZWJDb3JlMjRwYXJzZVhTU1Byb3RlY3Rpb25IZWFkZXJFUktOM1dURjZTdHJpbmdF
UlMxX1JqUzRfRTI4ZmFpbHVyZVJlYXNvbkR1cGxpY2F0ZVJlcG9ydC5iCiBfX1paTjdXZWJDb3Jl
MjRwYXJzZVhTU1Byb3RlY3Rpb25IZWFkZXJFUktOM1dURjZTdHJpbmdFUlMxX1JqUzRfRTI5ZmFp
bHVyZVJlYXNvbkludmFsaWREaXJlY3RpdmUKIF9fWkdWWk43V2ViQ29yZTI0cGFyc2VYU1NQcm90
ZWN0aW9uSGVhZGVyRVJLTjNXVEY2U3RyaW5nRVJTMV9SalM0X0UyOWZhaWx1cmVSZWFzb25JbnZh
bGlkRGlyZWN0aXZlLmIKLV9fWk43V2ViQ29yZUwxNGdsb2JhbERhdGFiYXNlRQorX19aTjdXZWJD
b3JlTDE0dm1iYXNlRQogX19aWk43V2ViQ29yZTVJbWFnZTludWxsSW1hZ2VFdkU5bnVsbEltYWdl
CiBfX1pHVlpON1dlYkNvcmU1SW1hZ2U5bnVsbEltYWdlRXZFOW51bGxJbWFnZS5iCiBfX1paTjdX
ZWJDb3JlTDE2ZXJyb3JFdmVudFNlbmRlckV2RTZzZW5kZXIKQEAgLTQxMjUyLDcgKzQxMjUyLDcg
QEAgX19aR1ZaTjdXZWJDb3JlMTRJbnB1dFR5cGVOYW1lczN1cmxFdkU0bgogX19aTjdXZWJDb3Jl
MTJfR0xPQkFMX19OXzFMMjJpbnN0cnVtZW50aW5nQWdlbnRzU2V0RQogX19aWk43V2ViQ29yZUwz
M2Nzc1Byb3BlcnR5SURGb3JKU0NTU1Byb3BlcnR5TmFtZUVOM0pTQzEyUHJvcGVydHlOYW1lRUUx
N3Byb3BlcnR5SW5mb0NhY2hlCiBfX1pHVlpON1dlYkNvcmVMMzNjc3NQcm9wZXJ0eUlERm9ySlND
U1NQcm9wZXJ0eU5hbWVFTjNKU0MxMlByb3BlcnR5TmFtZUVFMTdwcm9wZXJ0eUluZm9DYWNoZS5i
Ci1fX1paTjdXZWJDb3JlMTVKU0RPTVdpbmRvd0Jhc2UxOGNvbW1vbkpTR2xvYmFsRGF0YUV2RTEw
Z2xvYmFsRGF0YQorX19aWk43V2ViQ29yZTE1SlNET01XaW5kb3dCYXNlMThjb21tb25WTUV2RTEw
dm0KIF9fWlpON1dlYkNvcmUxOWNyZWF0ZUpTSFRNTFdyYXBwZXJFUE4zSlNDOUV4ZWNTdGF0ZUVQ
TlNfMTdKU0RPTUdsb2JhbE9iamVjdEVOM1dURjEwUGFzc1JlZlB0cklOU18xMUhUTUxFbGVtZW50
RUVFRTNtYXAKIF9fWkdWWk43V2ViQ29yZTE5Y3JlYXRlSlNIVE1MV3JhcHBlckVQTjNKU0M5RXhl
Y1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RU4zV1RGMTBQYXNzUmVmUHRySU5TXzExSFRN
TEVsZW1lbnRFRUVFM21hcC5iCiBfX1paTjdXZWJDb3JlOGJsYW5rVVJMRXZFMTRzdGF0aWNCbGFu
a1VSTApJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0ds
b2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDQgKzAsMCBAQAotI2lmbmRlZiBXZWJDb3JlX0ZXRF9KU0dsb2JhbERhdGFfaAot
I2RlZmluZSBXZWJDb3JlX0ZXRF9KU0dsb2JhbERhdGFfaAotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTR2xvYmFsRGF0YS5oPgotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxNDg2MzgpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmg6MTQ4NjM4
KQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9WTS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9KU0dsb2JhbERh
dGFfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9KU0dsb2JhbERhdGFfaAorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTR2xvYmFsRGF0YS5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNCArMSw0IEBACi0jaWZuZGVmIFdlYkNvcmVfRldEX0pTR2xvYmFsRGF0YV9oCi0jZGVm
aW5lIFdlYkNvcmVfRldEX0pTR2xvYmFsRGF0YV9oCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNHbG9iYWxEYXRhLmg+CisjaWZuZGVmIFdlYkNvcmVfRldEX1ZNX2gKKyNkZWZpbmUgV2ViQ29y
ZV9GV0RfVk1faAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1ZNLmg+CiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkocmV2
aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUu
dmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTExNjMsNyArMTExNjMsNyBAQAogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cRm9yd2FyZGluZ0hlYWRlcnNccnVudGltZVxKU0Rlc3RydWN0aWJs
ZU9iamVjdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cRm9yd2FyZGluZ0hlYWRl
cnNccnVudGltZVxKU0V4cG9ydE1hY3Jvcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cRm9yd2FyZGluZ0hlYWRlcnNccnVudGltZVxKU0Z1bmN0aW9uLmgiIC8+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxGb3J3YXJkaW5nSGVhZGVyc1xydW50aW1lXEpTR2xvYmFsRGF0YS5o
IiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cRm9yd2FyZGluZ0hlYWRlcnNccnVudGlt
ZVxWTS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cRm9yd2FyZGluZ0hlYWRlcnNc
cnVudGltZVxKU0dsb2JhbE9iamVjdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Rm9yd2FyZGluZ0hlYWRlcnNccnVudGltZVxKU1Byb3h5LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxGb3J3YXJkaW5nSGVhZGVyc1xydW50aW1lXEpTV2l0aFNjb3BlLmgiIC8+Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRl
cnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUu
dmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTE0
MDM1LDcgKzE0MDM1LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEZvcndhcmRpbmdI
ZWFkZXJzXHJ1bnRpbWVcSlNGdW5jdGlvbi5oIj4KICAgICAgIDxGaWx0ZXI+Rm9yd2FyZGluZ0hl
YWRlcnNccnVudGltZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cRm9yd2FyZGluZ0hlYWRlcnNccnVudGltZVxKU0dsb2JhbERhdGEuaCI+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxGb3J3YXJkaW5nSGVhZGVyc1xydW50aW1lXFZNLmgi
PgogICAgICAgPEZpbHRlcj5Gb3J3YXJkaW5nSGVhZGVyc1xydW50aW1lPC9GaWx0ZXI+CiAgICAg
PC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxGb3J3YXJkaW5nSGVhZGVy
c1xydW50aW1lXEpTR2xvYmFsT2JqZWN0LmgiPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9ET01PYmplY3RIYXNoVGFibGVNYXAuY3BwCShyZXZpc2lvbiAxNDg2
NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01PYmplY3RIYXNoVGFibGVNYXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNyw5IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlewogCi1ET01PYmplY3RIYXNoVGFibGVNYXAmIERPTU9iamVj
dEhhc2hUYWJsZU1hcDo6bWFwRm9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK0RPTU9iamVj
dEhhc2hUYWJsZU1hcCYgRE9NT2JqZWN0SGFzaFRhYmxlTWFwOjptYXBGb3IoVk0mIHZtKQogewot
ICAgIEpTR2xvYmFsRGF0YTo6Q2xpZW50RGF0YSogY2xpZW50RGF0YSA9IGdsb2JhbERhdGEuY2xp
ZW50RGF0YTsKKyAgICBWTTo6Q2xpZW50RGF0YSogY2xpZW50RGF0YSA9IHZtLmNsaWVudERhdGE7
CiAgICAgQVNTRVJUKGNsaWVudERhdGEpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJDb3Jl
SlNDbGllbnREYXRhKj4oY2xpZW50RGF0YSktPmhhc2hUYWJsZU1hcDsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1hcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1hcC5oCShy
ZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01PYmplY3RI
YXNoVGFibGVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBKU0MgewotICAgIGNsYXNzIEpTR2xvYmFsRGF0
YTsKKyAgICBjbGFzcyBWTTsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzQsNyArMzQs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBNYXAgZnJvbSBzdGF0aWMgSGFzaFRhYmxlIGlu
c3RhbmNlcyB0byBwZXItR2xvYmFsRGF0YSBvbmVzLgogY2xhc3MgRE9NT2JqZWN0SGFzaFRhYmxl
TWFwIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgRE9NT2JqZWN0SGFzaFRhYmxlTWFwJiBtYXBGb3Io
SlNDOjpKU0dsb2JhbERhdGEmKTsKKyAgICBzdGF0aWMgRE9NT2JqZWN0SGFzaFRhYmxlTWFwJiBt
YXBGb3IoSlNDOjpWTSYpOwogCiAgICAgfkRPTU9iamVjdEhhc2hUYWJsZU1hcCgpCiAgICAgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3Bw
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFw
cGVyV29ybGQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxOCArMzAsMTggQEAgdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ET01XcmFwcGVyV29ybGQ6OkRP
TVdyYXBwZXJXb3JsZChKU0M6OkpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCBpc05vcm1h
bCkKLSAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorRE9NV3JhcHBlcldvcmxkOjpET01X
cmFwcGVyV29ybGQoSlNDOjpWTSogdm0sIGJvb2wgaXNOb3JtYWwpCisgICAgOiBtX3ZtKHZtKQog
ICAgICwgbV9pc05vcm1hbChpc05vcm1hbCkKIHsKLSAgICBKU0dsb2JhbERhdGE6OkNsaWVudERh
dGEqIGNsaWVudERhdGEgPSBtX2dsb2JhbERhdGEtPmNsaWVudERhdGE7CisgICAgVk06OkNsaWVu
dERhdGEqIGNsaWVudERhdGEgPSBtX3ZtLT5jbGllbnREYXRhOwogICAgIEFTU0VSVChjbGllbnRE
YXRhKTsKICAgICBzdGF0aWNfY2FzdDxXZWJDb3JlSlNDbGllbnREYXRhKj4oY2xpZW50RGF0YSkt
PnJlbWVtYmVyV29ybGQodGhpcyk7CiB9CiAKIERPTVdyYXBwZXJXb3JsZDo6fkRPTVdyYXBwZXJX
b3JsZCgpCiB7Ci0gICAgSlNHbG9iYWxEYXRhOjpDbGllbnREYXRhKiBjbGllbnREYXRhID0gbV9n
bG9iYWxEYXRhLT5jbGllbnREYXRhOworICAgIFZNOjpDbGllbnREYXRhKiBjbGllbnREYXRhID0g
bV92bS0+Y2xpZW50RGF0YTsKICAgICBBU1NFUlQoY2xpZW50RGF0YSk7CiAgICAgc3RhdGljX2Nh
c3Q8V2ViQ29yZUpTQ2xpZW50RGF0YSo+KGNsaWVudERhdGEpLT5mb3JnZXRXb3JsZCh0aGlzKTsK
IApAQCAtNjAsOSArNjAsOSBAQCB2b2lkIERPTVdyYXBwZXJXb3JsZDo6Y2xlYXJXcmFwcGVycygp
CiAgICAgICAgICgqbV9zY3JpcHRDb250cm9sbGVyc1dpdGhXaW5kb3dTaGVsbHMuYmVnaW4oKSkt
PmRlc3Ryb3lXaW5kb3dTaGVsbCh0aGlzKTsKIH0KIAotRE9NV3JhcHBlcldvcmxkKiBub3JtYWxX
b3JsZChKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK0RPTVdyYXBwZXJXb3JsZCogbm9y
bWFsV29ybGQoSlNDOjpWTSYgdm0pCiB7Ci0gICAgSlNHbG9iYWxEYXRhOjpDbGllbnREYXRhKiBj
bGllbnREYXRhID0gZ2xvYmFsRGF0YS5jbGllbnREYXRhOworICAgIFZNOjpDbGllbnREYXRhKiBj
bGllbnREYXRhID0gdm0uY2xpZW50RGF0YTsKICAgICBBU1NFUlQoY2xpZW50RGF0YSk7CiAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmVKU0NsaWVudERhdGEqPihjbGllbnREYXRhKS0+bm9y
bWFsV29ybGQoKTsKIH0KQEAgLTcwLDcgKzcwLDcgQEAgRE9NV3JhcHBlcldvcmxkKiBub3JtYWxX
b3JsZChKU0M6OkpTR2xvYgogRE9NV3JhcHBlcldvcmxkKiBtYWluVGhyZWFkTm9ybWFsV29ybGQo
KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc3RhdGljIERPTVdyYXBwZXJX
b3JsZCogY2FjaGVkTm9ybWFsV29ybGQgPSBub3JtYWxXb3JsZCgqSlNET01XaW5kb3c6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpKTsKKyAgICBzdGF0aWMgRE9NV3JhcHBlcldvcmxkKiBjYWNoZWROb3Jt
YWxXb3JsZCA9IG5vcm1hbFdvcmxkKCpKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CiAgICAgcmV0
dXJuIGNhY2hlZE5vcm1hbFdvcmxkOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9ET01XcmFwcGVyV29ybGQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9ET01XcmFwcGVyV29ybGQuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDkgKzM3LDkgQEAgdHlwZWRlZiBKU0M6OldlYWtHQ01hcDxTdHJpbmdJbXBsKiwgSlNDOgogCiBj
bGFzcyBET01XcmFwcGVyV29ybGQgOiBwdWJsaWMgUmVmQ291bnRlZDxET01XcmFwcGVyV29ybGQ+
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxET01XcmFwcGVyV29ybGQ+IGNyZWF0
ZShKU0M6OkpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCBpc05vcm1hbCA9IGZhbHNlKQor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gY3JlYXRlKEpTQzo6Vk0qIHZt
LCBib29sIGlzTm9ybWFsID0gZmFsc2UpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IERPTVdyYXBwZXJXb3JsZChnbG9iYWxEYXRhLCBpc05vcm1hbCkpOworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IERPTVdyYXBwZXJXb3JsZCh2bSwgaXNOb3JtYWwpKTsKICAgICB9CiAg
ICAgfkRPTVdyYXBwZXJXb3JsZCgpOwogCkBAIC01NiwxOCArNTYsMTggQEAgcHVibGljOgogCiAg
ICAgYm9vbCBpc05vcm1hbCgpIGNvbnN0IHsgcmV0dXJuIG1faXNOb3JtYWw7IH0KIAotICAgIEpT
Qzo6SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxEYXRh
OyB9CisgICAgSlNDOjpWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9CiAKIHByb3RlY3Rl
ZDoKLSAgICBET01XcmFwcGVyV29ybGQoSlNDOjpKU0dsb2JhbERhdGEqLCBib29sIGlzTm9ybWFs
KTsKKyAgICBET01XcmFwcGVyV29ybGQoSlNDOjpWTSosIGJvb2wgaXNOb3JtYWwpOwogCiBwcml2
YXRlOgotICAgIEpTQzo6SlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CisgICAgSlNDOjpWTSog
bV92bTsKICAgICBIYXNoU2V0PFNjcmlwdENvbnRyb2xsZXIqPiBtX3NjcmlwdENvbnRyb2xsZXJz
V2l0aFdpbmRvd1NoZWxsczsKICAgICBib29sIG1faXNOb3JtYWw7CiB9OwogCi1ET01XcmFwcGVy
V29ybGQqIG5vcm1hbFdvcmxkKEpTQzo6SlNHbG9iYWxEYXRhJik7CitET01XcmFwcGVyV29ybGQq
IG5vcm1hbFdvcmxkKEpTQzo6Vk0mKTsKIERPTVdyYXBwZXJXb3JsZCogbWFpblRocmVhZE5vcm1h
bFdvcmxkKCk7CiBpbmxpbmUgRE9NV3JhcHBlcldvcmxkKiBkZWJ1Z2dlcldvcmxkKCkgeyByZXR1
cm4gbWFpblRocmVhZE5vcm1hbFdvcmxkKCk7IH0KIGlubGluZSBET01XcmFwcGVyV29ybGQqIHBs
dWdpbldvcmxkKCkgeyByZXR1cm4gbWFpblRocmVhZE5vcm1hbFdvcmxkKCk7IH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTQ4
NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkdDQ29udHJvbGxlci5oIgog
CiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsRGF0
YS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5o
PgogI2luY2x1ZGUgPGhlYXAvSGVhcC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
QEAgLTM4LDggKzM4LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgdm9pZCBjb2xs
ZWN0KHZvaWQqKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25K
U0dsb2JhbERhdGEoKSk7Ci0gICAgSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5o
ZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5k
b3c6OmNvbW1vblZNKCkpOworICAgIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFwLmNvbGxl
Y3RBbGxHYXJiYWdlKCk7CiB9CiAKIEdDQ29udHJvbGxlciYgZ2NDb250cm9sbGVyKCkKQEAgLTYz
LDggKzYzLDggQEAgdm9pZCBHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xsZWN0U29vbigpCiAgICAg
Ly8gZG93biBpbnRvIFdURiBzbyB0aGF0IG1vcmUgcGxhdGZvcm1zIGNhbiB0YWtlIGFkdmFudGFn
ZSBvZiBpdCwgd2Ugd2lsbCBiZSAKICAgICAvLyBhYmxlIHRvIHVzZSByZXBvcnRBYmFuZG9uZWRP
YmplY3RHcmFwaCBvbiBtb3JlIHBsYXRmb3Jtcy4KICNpZiBVU0UoQ0YpIHx8IFBMQVRGT1JNKEJM
QUNLQkVSUlkpIHx8IFBMQVRGT1JNKFFUKQotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7Ci0gICAgSlNET01XaW5kb3c6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpLT5oZWFwLnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOworICAgIEpTRE9NV2luZG93Ojpj
b21tb25WTSgpLT5oZWFwLnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCk7CiAjZWxzZQogICAg
IGlmICghbV9HQ1RpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fR0NUaW1lci5zdGFydE9uZVNo
b3QoMCk7CkBAIC04MCw5ICs4MCw5IEBAIHZvaWQgR0NDb250cm9sbGVyOjpnY1RpbWVyRmlyZWQo
VGltZXI8R0MKIAogdm9pZCBHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xsZWN0Tm93KCkKIHsKLSAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwot
ICAgIGlmICghSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmlzQnVzeSgp
KQotICAgICAgICBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuY29sbGVj
dEFsbEdhcmJhZ2UoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9u
Vk0oKSk7CisgICAgaWYgKCFKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5pc0J1c3koKSkK
KyAgICAgICAgSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhlYXAuY29sbGVjdEFsbEdhcmJhZ2Uo
KTsKIH0KIAogdm9pZCBHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xsZWN0T25BbHRlcm5hdGVUaHJl
YWRGb3JEZWJ1Z2dpbmcoYm9vbCB3YWl0VW50aWxEb25lKQpAQCAtOTksMTMgKzk5LDEzIEBAIHZv
aWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE9uQWx0ZXIKIAogdm9pZCBHQ0NvbnRyb2xs
ZXI6OnNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKGJvb2wgZW5hYmxl
KQogewotICAgIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5zZXRHYXJi
YWdlQ29sbGVjdGlvblRpbWVyRW5hYmxlZChlbmFibGUpOworICAgIEpTRE9NV2luZG93Ojpjb21t
b25WTSgpLT5oZWFwLnNldEdhcmJhZ2VDb2xsZWN0aW9uVGltZXJFbmFibGVkKGVuYWJsZSk7CiB9
CiAKIHZvaWQgR0NDb250cm9sbGVyOjpkaXNjYXJkQWxsQ29tcGlsZWRDb2RlKCkKIHsKLSAgICBK
U0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwotICAg
IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+ZGlzY2FyZEFsbENvZGUoKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAgSlNET01X
aW5kb3c6OmNvbW1vblZNKCktPmRpc2NhcmRBbGxDb2RlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGls
aXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJp
bmRpbmdVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAs
NyArNTAsNyBAQCBzdGF0aWMgYm9vbCBnZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlCiAgICAg
fQogICAgIGlmICghb2JqZWN0LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBJZGVudGlmaWVyIGlkZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERhdGEoKSwga2V5UGF0aEVsZW1l
bnQudXRmOCgpLmRhdGEoKSk7CisgICAgSWRlbnRpZmllciBpZGVudGlmaWVyKCZleGVjLT52bSgp
LCBrZXlQYXRoRWxlbWVudC51dGY4KCkuZGF0YSgpKTsKICAgICBpZiAoIWFzT2JqZWN0KG9iamVj
dCktPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50aWZpZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgcmVzdWx0ID0gYXNPYmplY3Qob2JqZWN0KS0+Z2V0KGV4ZWMsIGlkZW50aWZpZXIpOwpA
QCAtNjcsOCArNjcsOCBAQCBzdGF0aWMgYm9vbCBzZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
CiB7CiAgICAgaWYgKCFjYW5TZXQob2JqZWN0LCBrZXlQYXRoRWxlbWVudCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERhdGEo
KSwga2V5UGF0aEVsZW1lbnQudXRmOCgpLmRhdGEoKSk7Ci0gICAgYXNPYmplY3Qob2JqZWN0KS0+
cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgaWRlbnRpZmllciwganNWYWx1ZSk7CisgICAg
SWRlbnRpZmllciBpZGVudGlmaWVyKCZleGVjLT52bSgpLCBrZXlQYXRoRWxlbWVudC51dGY4KCku
ZGF0YSgpKTsKKyAgICBhc09iamVjdChvYmplY3QpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRl
bnRpZmllciwganNWYWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTMwMCw3ICszMDAs
NyBAQCBTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlKERPTVJlcXVlCiAgICAgUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gcHJwVmFsdWU7CiAgICAg
aWYgKHNlcmlhbGl6ZWRWYWx1ZSkKICAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlOjpkZXNlcmlh
bGl6ZShleGVjLCBzZXJpYWxpemVkVmFsdWUuZ2V0KCksIE5vblRocm93aW5nKTsKLSAgICByZXR1
cm4gU2NyaXB0VmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc051bGwoKSk7CisgICAgcmV0dXJu
IFNjcmlwdFZhbHVlKGV4ZWMtPnZtKCksIGpzTnVsbCgpKTsKIH0KIAogU2NyaXB0VmFsdWUgZGVz
ZXJpYWxpemVJREJWYWx1ZUJ1ZmZlcihET01SZXF1ZXN0U3RhdGUqIHJlcXVlc3RTdGF0ZSwgUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IHBycEJ1ZmZlcikKQEAgLTMxNCwxMyArMzE0LDEzIEBAIFNj
cmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWVCdWZmZXIoRE8KICAgICAgICAgUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGVGcm9tV2lyZUJ5dGVzKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIFNjcmlwdFZh
bHVlOjpkZXNlcmlhbGl6ZShleGVjLCBzZXJpYWxpemVkVmFsdWUuZ2V0KCksIE5vblRocm93aW5n
KTsKICAgICB9Ci0gICAgcmV0dXJuIFNjcmlwdFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNO
dWxsKCkpOworICAgIHJldHVybiBTY3JpcHRWYWx1ZShleGVjLT52bSgpLCBqc051bGwoKSk7CiB9
CiAKIFNjcmlwdFZhbHVlIGlkYktleVRvU2NyaXB0VmFsdWUoRE9NUmVxdWVzdFN0YXRlKiByZXF1
ZXN0U3RhdGUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXkpCiB7CiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gcmVxdWVzdFN0YXRlLT5leGVjKCk7Ci0gICAgcmV0dXJuIFNjcmlwdFZhbHVlKGV4ZWMtPmds
b2JhbERhdGEoKSwgaWRiS2V5VG9KU1ZhbHVlKGV4ZWMsIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIGtleS5nZXQoKSkpOworICAgIHJldHVy
biBTY3JpcHRWYWx1ZShleGVjLT52bSgpLCBpZGJLZXlUb0pTVmFsdWUoZXhlYywganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwga2V5LmdldCgp
KSk7CiB9CiAKIFBhc3NSZWZQdHI8SURCS2V5PiBzY3JpcHRWYWx1ZVRvSURCS2V5KERPTVJlcXVl
c3RTdGF0ZSogcmVxdWVzdFN0YXRlLCBjb25zdCBTY3JpcHRWYWx1ZSYgc2NyaXB0VmFsdWUpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmgJKHJldmlz
aW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDggQEAgcHVibGljOgogICAgIHN0YXRpYyB2
b2lkIGRlbGV0ZURhdGEodm9pZCopOwogCiAgICAgSlNDYWxsYmFja0RhdGEoSlNDOjpKU09iamVj
dCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgICAgIDog
bV9jYWxsYmFjayhnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgY2FsbGJhY2spCi0gICAgICAg
ICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVj
dCkKKyAgICAgICAgOiBtX2NhbGxiYWNrKGdsb2JhbE9iamVjdC0+dm0oKSwgY2FsbGJhY2spCisg
ICAgICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3Qp
CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAsIG1fdGhyZWFkKGN1cnJlbnRUaHJlYWQoKSkKICNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAxNDg2
NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIGJvb2wgSlNT
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGUKIAogICAgIFJlZlB0cjxKU1NRTFN0YXRl
bWVudEVycm9yQ2FsbGJhY2s+IHByb3RlY3QodGhpcyk7CiAKLSAgICBKU0M6OkpTTG9ja0hvbGRl
ciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CisgICAgSlNDOjpK
U0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT52bSgpKTsKIAogICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkocmV2aXNpb24g
MTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVz
b2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw4ICs1NSw4IEBAIFBhc3NSZWZQdHI8SlND
dXN0b21YUGF0aE5TUmVzb2x2ZXI+IEpTQ3UKIH0KIAogSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6
OkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGN1c3Rv
bVJlc29sdmVyLCBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqZWN0KQotICAgIDogbV9jdXN0b21SZXNv
bHZlcihleGVjLT5nbG9iYWxEYXRhKCksIGN1c3RvbVJlc29sdmVyKQotICAgICwgbV9nbG9iYWxP
YmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QpCisgICAgOiBtX2N1c3RvbVJl
c29sdmVyKGV4ZWMtPnZtKCksIGN1c3RvbVJlc29sdmVyKQorICAgICwgbV9nbG9iYWxPYmplY3Qo
ZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0KQogewogfQogCkBAIC02OCw3ICs2OCw3IEBAIFN0cmlu
ZyBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6bG9va3VwTmEKIHsKICAgICBBU1NFUlQobV9jdXN0
b21SZXNvbHZlcik7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vblZNKCkpOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQmluZGluZy5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2
LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogQVNTRVJUX0hBU19UUklWSUFMX0RFU1RSVUNUT1Io
RE9NQ29uc3RydWN0b3JPYmplY3QpOwogQVNTRVJUX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoRE9N
Q29uc3RydWN0b3JXaXRoRG9jdW1lbnQpOwogCi1jb25zdCBKU0M6Okhhc2hUYWJsZSogZ2V0SGFz
aFRhYmxlRm9yR2xvYmFsRGF0YShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IEpTQzo6
SGFzaFRhYmxlKiBzdGF0aWNUYWJsZSkKK2NvbnN0IEpTQzo6SGFzaFRhYmxlKiBnZXRIYXNoVGFi
bGVGb3JHbG9iYWxEYXRhKFZNJiB2bSwgY29uc3QgSlNDOjpIYXNoVGFibGUqIHN0YXRpY1RhYmxl
KQogewotICAgIHJldHVybiBET01PYmplY3RIYXNoVGFibGVNYXA6Om1hcEZvcihnbG9iYWxEYXRh
KS5nZXQoc3RhdGljVGFibGUpOworICAgIHJldHVybiBET01PYmplY3RIYXNoVGFibGVNYXA6Om1h
cEZvcih2bSkuZ2V0KHN0YXRpY1RhYmxlKTsKIH0KIAogSlNWYWx1ZSBqc1N0cmluZ09yTnVsbChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykKQEAgLTE1MCw3ICsxNTAsNyBAQCB2b2lk
IHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgaW50IGxpbmVOdW1iZXIg
PSAwOwogICAgIFN0cmluZyBleGNlcHRpb25Tb3VyY2VVUkw7CiAKLSAgICBSZWZDb3VudGVkQXJy
YXk8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb25T
dGFjazsKKyAgICBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZSA9IGV4ZWMt
PnZtKCkuZXhjZXB0aW9uU3RhY2s7CiAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICBl
eGVjLT5jbGVhclN1cHBsZW1lbnRhcnlFeGNlcHRpb25JbmZvKCk7CiAKQEAgLTI2OCw3ICsyNjgs
NyBAQCBTdHJ1Y3R1cmUqIGNhY2hlRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsCiB7CiAgICAgSlNE
T01TdHJ1Y3R1cmVNYXAmIHN0cnVjdHVyZXMgPSBnbG9iYWxPYmplY3QtPnN0cnVjdHVyZXMoKTsK
ICAgICBBU1NFUlQoIXN0cnVjdHVyZXMuY29udGFpbnMoY2xhc3NJbmZvKSk7Ci0gICAgcmV0dXJu
IHN0cnVjdHVyZXMuc2V0KGNsYXNzSW5mbywgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4oZ2xvYmFs
T2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKSkuaXRlcmF0b3It
PnZhbHVlLmdldCgpOworICAgIHJldHVybiBzdHJ1Y3R1cmVzLnNldChjbGFzc0luZm8sIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+KGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUpKS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKIHN0YXRpYyBjb25zdCBpbnQzMl90
IGtNYXhJbnQzMiA9IDB4N2ZmZmZmZmY7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDkgKzYzLDkgQEAg
Y2xhc3MgRE9NU3RyaW5nTGlzdDsKICAgICBjbGFzcyBET01Db25zdHJ1Y3Rvck9iamVjdCA6IHB1
YmxpYyBKU0RPTVdyYXBwZXIgewogICAgICAgICB0eXBlZGVmIEpTRE9NV3JhcHBlciBCYXNlOwog
ICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIEpTQzo6
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogCiAgICAgcHJv
dGVjdGVkOgpAQCAtOTQsNyArOTQsNyBAQCBjbGFzcyBET01TdHJpbmdMaXN0OwogCiAgICAgICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAg
ICAgICAgewotICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT5n
bG9iYWxEYXRhKCkpOworICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2Jq
ZWN0LT52bSgpKTsKICAgICAgICAgICAgIEFTU0VSVChnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+aXNEb2N1bWVudCgpKTsKICAgICAgICAgfQogICAgIH07CkBAIC0xMTQs
NyArMTE0LDcgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKICAgICB7CiAgICAgICAgIGlmIChKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKGdsb2JhbE9iamVj
dCwgJldyYXBwZXJDbGFzczo6c19pbmZvKSkKICAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7
Ci0gICAgICAgIHJldHVybiBjYWNoZURPTVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIFdyYXBwZXJD
bGFzczo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBX
cmFwcGVyQ2xhc3M6OmNyZWF0ZVByb3RvdHlwZShleGVjLCBnbG9iYWxPYmplY3QpKSwgJldyYXBw
ZXJDbGFzczo6c19pbmZvKTsKKyAgICAgICAgcmV0dXJuIGNhY2hlRE9NU3RydWN0dXJlKGdsb2Jh
bE9iamVjdCwgV3JhcHBlckNsYXNzOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgZ2xvYmFs
T2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmNyZWF0ZVByb3RvdHlwZShleGVjLCBnbG9iYWxPYmplY3Qp
KSwgJldyYXBwZXJDbGFzczo6c19pbmZvKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBX
cmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OlN0cnVjdHVyZSogZGVwcmVjYXRlZEdldERPTVN0cnVj
dHVyZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKQEAgLTE0Myw3ICsxNDMsNyBAQCBjbGFzcyBET01T
dHJpbmdMaXN0OwogICAgIHsKICAgICAgICAgaWYgKCF3b3JsZC0+aXNOb3JtYWwoKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZG9tT2JqZWN0LT5zZXRXcmFwcGVyKCp3b3Js
ZC0+Z2xvYmFsRGF0YSgpLCB3cmFwcGVyLCB3cmFwcGVyT3duZXIsIGNvbnRleHQpOworICAgICAg
ICBkb21PYmplY3QtPnNldFdyYXBwZXIoKndvcmxkLT52bSgpLCB3cmFwcGVyLCB3cmFwcGVyT3du
ZXIsIGNvbnRleHQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTIxOCw3ICsy
MTgsNyBAQCBjbGFzcyBET01TdHJpbmdMaXN0OwogICAgICAgICByZXR1cm4gaW5kZXggPj0gZXhl
Yy0+YXJndW1lbnRDb3VudCgpID8gSlNDOjpKU1ZhbHVlKCkgOiBleGVjLT5hcmd1bWVudChpbmRl
eCk7CiAgICAgfQogCi0gICAgY29uc3QgSlNDOjpIYXNoVGFibGUqIGdldEhhc2hUYWJsZUZvckds
b2JhbERhdGEoSlNDOjpKU0dsb2JhbERhdGEmLCBjb25zdCBKU0M6Okhhc2hUYWJsZSogc3RhdGlj
VGFibGUpOworICAgIGNvbnN0IEpTQzo6SGFzaFRhYmxlKiBnZXRIYXNoVGFibGVGb3JHbG9iYWxE
YXRhKEpTQzo6Vk0mLCBjb25zdCBKU0M6Okhhc2hUYWJsZSogc3RhdGljVGFibGUpOwogCiAgICAg
dm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUgZXhjZXB0
aW9uLCBDYWNoZWRTY3JpcHQqID0gMCk7CiAgICAgdm9pZCByZXBvcnRDdXJyZW50RXhjZXB0aW9u
KEpTQzo6RXhlY1N0YXRlKik7CkBAIC00ODYsOCArNDg2LDggQEAgY2xhc3MgRE9NU3RyaW5nTGlz
dDsKICAgICAgICAgaWYgKHN0cmluZ0ltcGwtPmxlbmd0aCgpID09IDEpIHsKICAgICAgICAgICAg
IFVDaGFyIHNpbmdsZUNoYXJhY3RlciA9ICgqc3RyaW5nSW1wbClbMHVdOwogICAgICAgICAgICAg
aWYgKHNpbmdsZUNoYXJhY3RlciA8PSBKU0M6Om1heFNpbmdsZUNoYXJhY3RlclN0cmluZykgewot
ICAgICAgICAgICAgICAgIEpTQzo6SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmds
b2JhbERhdGEoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJp
bmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhnbG9iYWxEYXRhLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyPihzaW5nbGVDaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgICAgICBKU0M6OlZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgICAgICAgICAgICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLnNp
bmdsZUNoYXJhY3RlclN0cmluZyh2bSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc2luZ2xl
Q2hhcmFjdGVyKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24g
MTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY29uc3QgQ2xhc3NJbmZvIEpTRE9NR2xvYmFsT2JqZWN0OjpzX2luZm8gPSB7ICJET01HbG9i
YWxPYmplY3QiLCAmSlNHbG9iYWxPYmplY3Q6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU0RPTUdsb2JhbE9iamVjdCkgfTsKIAotSlNET01HbG9iYWxPYmplY3Q6OkpTRE9NR2xv
YmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFBhc3NSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiB3b3JsZCwgY29uc3QgR2xvYmFsT2JqZWN0TWV0
aG9kVGFibGUqIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQotICAgIDogSlNHbG9iYWxPYmplY3Qo
Z2xvYmFsRGF0YSwgc3RydWN0dXJlLCBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSkKK0pTRE9NR2xv
YmFsT2JqZWN0OjpKU0RPTUdsb2JhbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBQYXNzUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gd29ybGQsIGNvbnN0IEdsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKiBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSkKKyAgICA6IEpTR2xvYmFsT2JqZWN0
KHZtLCBzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQogICAgICwgbV9jdXJyZW50
RXZlbnQoMCkKICAgICAsIG1fd29ybGQod29ybGQpCiB7CkBAIC01NCwxNSArNTQsMTUgQEAgdm9p
ZCBKU0RPTUdsb2JhbE9iamVjdDo6ZGVzdHJveShKU0NlbGwqIAogICAgIHN0YXRpY19jYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oY2VsbCktPkpTRE9NR2xvYmFsT2JqZWN0Ojp+SlNET01HbG9iYWxP
YmplY3QoKTsKIH0KIAotdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwor
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5m
bykpOwogfQogCi12b2lkIEpTRE9NR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTT2JqZWN0KiB0aGlzVmFsdWUpCit2b2lkIEpTRE9NR2xvYmFs
T2JqZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTT2JqZWN0KiB0aGlzVmFsdWUpCiB7Ci0g
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgdGhpc1ZhbHVlKTsKKyAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSwgdGhpc1ZhbHVlKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNf
aW5mbykpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2Jh
bE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
R2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEwICs0OCwx
MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJvdGVjdGVkOgogICAgICAgICBzdHJ1Y3Qg
SlNET01HbG9iYWxPYmplY3REYXRhOwogCi0gICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0KEpTQzo6
SlNHbG9iYWxEYXRhJiwgSlNDOjpTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPERPTVdyYXBwZXJXb3Js
ZD4sIGNvbnN0IEpTQzo6R2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqID0gMCk7CisgICAgICAgIEpT
RE9NR2xvYmFsT2JqZWN0KEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFBhc3NSZWZQdHI8RE9N
V3JhcHBlcldvcmxkPiwgY29uc3QgSlNDOjpHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogPSAwKTsK
ICAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwotICAgICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJik7Ci0gICAgICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNDOjpKU0dsb2JhbERhdGEmLCBKU0M6OkpTT2JqZWN0Kik7CisgICAgICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTQzo6Vk0mLCBKU0M6OkpTT2JqZWN0Kik7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIEpTRE9N
U3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVzOyB9CkBAIC03
MSw5ICs3MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0aWMgV0VCS0lU
X0VYUE9SVERBVEEgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgICAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUo
Z2xvYmFsRGF0YSwgMCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6R2xvYmFsT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCAwLCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpH
bG9iYWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgICAgICB9CiAK
ICAgICBwcm90ZWN0ZWQ6CkBAIC04OSwxMCArODksMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIHsKICAgICAgICAgaWYgKEpTQzo6SlNPYmplY3QqIGNvbnN0cnVjdG9yID0gY29uc3RfY2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCktPmNvbnN0cnVjdG9ycygpLmdldCgm
Q29uc3RydWN0b3JDbGFzczo6c19pbmZvKS5nZXQoKSkKICAgICAgICAgICAgIHJldHVybiBjb25z
dHJ1Y3RvcjsKLSAgICAgICAgSlNDOjpKU09iamVjdCogY29uc3RydWN0b3IgPSBDb25zdHJ1Y3Rv
ckNsYXNzOjpjcmVhdGUoZXhlYywgQ29uc3RydWN0b3JDbGFzczo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9i
amVjdCksIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpLCBjb25zdF9jYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CisgICAgICAgIEpTQzo6SlNPYmplY3QqIGNv
bnN0cnVjdG9yID0gQ29uc3RydWN0b3JDbGFzczo6Y3JlYXRlKGV4ZWMsIENvbnN0cnVjdG9yQ2xh
c3M6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCBjb25zdF9jYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSksIGNv
bnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKICAgICAgICAgQVNT
RVJUKCFjb25zdF9jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KS0+Y29uc3Ry
dWN0b3JzKCkuY29udGFpbnMoJkNvbnN0cnVjdG9yQ2xhc3M6OnNfaW5mbykpOwogICAgICAgICBK
U0M6OldyaXRlQmFycmllcjxKU0M6OkpTT2JqZWN0PiB0ZW1wOwotICAgICAgICBjb25zdF9jYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KS0+Y29uc3RydWN0b3JzKCkuYWRkKCZD
b25zdHJ1Y3RvckNsYXNzOjpzX2luZm8sIHRlbXApLml0ZXJhdG9yLT52YWx1ZS5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgY29uc3Rf
Y2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCktPmNvbnN0cnVjdG9ycygpLmFk
ZCgmQ29uc3RydWN0b3JDbGFzczo6c19pbmZvLCB0ZW1wKS5pdGVyYXRvci0+dmFsdWUuc2V0KGV4
ZWMtPnZtKCksIGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3IpOwogICAgICAgICByZXR1cm4gY29u
c3RydWN0b3I7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93QmFzZS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDE2
ICs1MywxNiBAQCBjb25zdCBDbGFzc0luZm8gSlNET01XaW5kb3dCYXNlOjpzX2luZm8gCiAKIGNv
bnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIEpTRE9NV2luZG93QmFzZTo6c19nbG9iYWxPYmpl
Y3RNZXRob2RUYWJsZSA9IHsgJnNob3VsZEFsbG93QWNjZXNzRnJvbSwgJnN1cHBvcnRzUHJvZmls
aW5nLCAmc3VwcG9ydHNSaWNoU291cmNlSW5mbywgJnNob3VsZEludGVycnVwdFNjcmlwdCwgJmph
dmFTY3JpcHRFeHBlcmltZW50c0VuYWJsZWQgfTsKIAotSlNET01XaW5kb3dCYXNlOjpKU0RPTVdp
bmRvd0Jhc2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
UGFzc1JlZlB0cjxET01XaW5kb3c+IHdpbmRvdywgSlNET01XaW5kb3dTaGVsbCogc2hlbGwpCi0g
ICAgOiBKU0RPTUdsb2JhbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIHNoZWxsLT53b3Js
ZCgpLCAmc19nbG9iYWxPYmplY3RNZXRob2RUYWJsZSkKK0pTRE9NV2luZG93QmFzZTo6SlNET01X
aW5kb3dCYXNlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8RE9NV2lu
ZG93PiB3aW5kb3csIEpTRE9NV2luZG93U2hlbGwqIHNoZWxsKQorICAgIDogSlNET01HbG9iYWxP
YmplY3Qodm0sIHN0cnVjdHVyZSwgc2hlbGwtPndvcmxkKCksICZzX2dsb2JhbE9iamVjdE1ldGhv
ZFRhYmxlKQogICAgICwgbV9pbXBsKHdpbmRvdykKICAgICAsIG1fc2hlbGwoc2hlbGwpCiB7CiB9
CiAKLXZvaWQgSlNET01XaW5kb3dCYXNlOjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTRE9NV2luZG93U2hlbGwqIHNoZWxsKQordm9pZCBKU0RPTVdpbmRvd0Jhc2U6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNET01XaW5kb3dTaGVsbCogc2hlbGwpCiB7Ci0gICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgc2hlbGwpOworICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtLCBzaGVsbCk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIAog
ICAgIEdsb2JhbFByb3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxzW10gPSB7CkBAIC04Miw3ICs4Miw3
IEBAIHZvaWQgSlNET01XaW5kb3dCYXNlOjp1cGRhdGVEb2N1bWVudCgpCiB7CiAgICAgQVNTRVJU
KG1faW1wbC0+ZG9jdW1lbnQoKSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsRXhlYygp
OwotICAgIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXModGhpcywgZXhlYy0+Z2xvYmFsRGF0
YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJkb2N1bWVudCIpLCB0b0pTKGV4ZWMsIHRoaXMsIG1faW1w
bC0+ZG9jdW1lbnQoKSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgc3ltYm9sVGFibGVQ
dXRXaXRoQXR0cmlidXRlcyh0aGlzLCBleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJkb2N1
bWVudCIpLCB0b0pTKGV4ZWMsIHRoaXMsIG1faW1wbC0+ZG9jdW1lbnQoKSksIERvbnREZWxldGUg
fCBSZWFkT25seSk7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEpTRE9NV2luZG93QmFz
ZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CkBAIC0xNzcsMjEgKzE3NywyMSBAQCBK
U0RPTVdpbmRvd1NoZWxsKiBKU0RPTVdpbmRvd0Jhc2U6OnNoZWxsCiAgICAgcmV0dXJuIG1fc2hl
bGw7CiB9CiAKLUpTR2xvYmFsRGF0YSogSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKQorVk0qIEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKQogewogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAKLSAgICBzdGF0aWMgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gMDsK
LSAgICBpZiAoIWdsb2JhbERhdGEpIHsKKyAgICBzdGF0aWMgVk0qIHZtID0gMDsKKyAgICBpZiAo
IXZtKSB7CiAgICAgICAgIFNjcmlwdENvbnRyb2xsZXI6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsK
LSAgICAgICAgZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3JlYXRlTGVha2VkKExhcmdlSGVh
cCkubGVha1JlZigpOworICAgICAgICB2bSA9IFZNOjpjcmVhdGVMZWFrZWQoTGFyZ2VIZWFwKS5s
ZWFrUmVmKCk7CiAjaWZuZGVmIE5ERUJVRwotICAgICAgICBnbG9iYWxEYXRhLT5leGNsdXNpdmVU
aHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7CisgICAgICAgIHZtLT5leGNsdXNpdmVUaHJlYWQgPSBj
dXJyZW50VGhyZWFkKCk7CiAjZW5kaWYKLSAgICAgICAgaW5pdE5vcm1hbFdvcmxkQ2xpZW50RGF0
YShnbG9iYWxEYXRhKTsKKyAgICAgICAgaW5pdE5vcm1hbFdvcmxkQ2xpZW50RGF0YSh2bSk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIGdsb2JhbERhdGE7CisgICAgcmV0dXJuIHZtOwogfQogCiAvLyBK
U0RPTUdsb2JhbE9iamVjdCogaXMgaWdub3JlZCwgYWNjZXNzaW5nIGEgd2luZG93IGluIGFueSBj
b250ZXh0IHdpbGwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93
QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93QmFzZS5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0Jhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgSlNET01XaW5kb3dCYXNlIDogcHVibGljIEpTRE9N
R2xvYmFsT2JqZWN0IHsKICAgICAgICAgdHlwZWRlZiBKU0RPTUdsb2JhbE9iamVjdCBCYXNlOwog
ICAgIHByb3RlY3RlZDoKLSAgICAgICAgSlNET01XaW5kb3dCYXNlKEpTQzo6SlNHbG9iYWxEYXRh
JiwgSlNDOjpTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPERPTVdpbmRvdz4sIEpTRE9NV2luZG93U2hl
bGwqKTsKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkpTR2xvYmFsRGF0YSYsIEpT
RE9NV2luZG93U2hlbGwqKTsKKyAgICAgICAgSlNET01XaW5kb3dCYXNlKEpTQzo6Vk0mLCBKU0M6
OlN0cnVjdHVyZSosIFBhc3NSZWZQdHI8RE9NV2luZG93PiwgSlNET01XaW5kb3dTaGVsbCopOwor
ICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTVdpbmRvd1NoZWxsKik7
CiAKICAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIApAQCAtNTMsOSArNTMs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xh
c3NJbmZvIHNfaW5mbzsKIAotICAgICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKKyAgICAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIDAsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Okdsb2JhbE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7CisgICAgICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgMCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6R2xvYmFsT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBjb25zdCBKU0M6
Okdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIHNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGU7CkBAIC02
OCw3ICs2OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBKU0RPTVdpbmRvd1No
ZWxsKiBzaGVsbCgpIGNvbnN0OwogCi0gICAgICAgIHN0YXRpYyBKU0M6OkpTR2xvYmFsRGF0YSog
Y29tbW9uSlNHbG9iYWxEYXRhKCk7CisgICAgICAgIHN0YXRpYyBKU0M6OlZNKiBjb21tb25WTSgp
OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPERPTVdpbmRvdz4gbV9pbXBsOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNw
cAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTYsNyArNDk2LDcgQEAgdm9pZCBK
U0RPTVdpbmRvdzo6c2V0TG9jYXRpb24oRXhlY1N0YXRlKgogICAgICAgICBpZiAoU2V0dGluZ3Mq
IHNldHRpbmdzID0gYWN0aXZlRnJhbWUtPnNldHRpbmdzKCkpIHsKICAgICAgICAgICAgIGlmIChz
ZXR0aW5ncy0+dXNlc0Rhc2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUoKSAmJiAhYWN0
aXZlRnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoQmluZGlu
Z1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIGltcGwoKSkpCi0g
ICAgICAgICAgICAgICAgICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZp
ZXIoZXhlYywgImxvY2F0aW9uIiksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcHV0RGly
ZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgImxvY2F0aW9uIiksIHZhbHVlKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTU4Nywx
NCArNTg3LDE0IEBAIGlubGluZSB2b2lkIERpYWxvZ0hhbmRsZXI6OmRpYWxvZ0NyZWF0ZWQKICAg
ICBtX2ZyYW1lID0gZGlhbG9nLT5mcmFtZSgpOwogICAgIC8vIEZJWE1FOiBUaGlzIGxvb2tzIGxp
a2UgYSBsZWFrIGJldHdlZW4gdGhlIG5vcm1hbCB3b3JsZCBhbmQgYW4gaXNvbGF0ZWQKICAgICAv
LyAgICAgICAgd29ybGQgaWYgZGlhbG9nQXJndW1lbnRzIGNvbWVzIGZyb20gYW4gaXNvbGF0ZWQg
d29ybGQuCi0gICAgSlNET01XaW5kb3cqIGdsb2JhbE9iamVjdCA9IHRvSlNET01XaW5kb3cobV9m
cmFtZS5nZXQoKSwgbm9ybWFsV29ybGQobV9leGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICBKU0RP
TVdpbmRvdyogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTVdpbmRvdyhtX2ZyYW1lLmdldCgpLCBub3Jt
YWxXb3JsZChtX2V4ZWMtPnZtKCkpKTsKICAgICBpZiAoSlNWYWx1ZSBkaWFsb2dBcmd1bWVudHMg
PSBtX2V4ZWMtPmFyZ3VtZW50KDEpKQotICAgICAgICBnbG9iYWxPYmplY3QtPnB1dERpcmVjdCht
X2V4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihtX2V4ZWMsICJkaWFsb2dBcmd1bWVudHMi
KSwgZGlhbG9nQXJndW1lbnRzKTsKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3QobV9l
eGVjLT52bSgpLCBJZGVudGlmaWVyKG1fZXhlYywgImRpYWxvZ0FyZ3VtZW50cyIpLCBkaWFsb2dB
cmd1bWVudHMpOwogfQogCiBpbmxpbmUgSlNWYWx1ZSBEaWFsb2dIYW5kbGVyOjpyZXR1cm5WYWx1
ZSgpIGNvbnN0CiB7Ci0gICAgSlNET01XaW5kb3cqIGdsb2JhbE9iamVjdCA9IHRvSlNET01XaW5k
b3cobV9mcmFtZS5nZXQoKSwgbm9ybWFsV29ybGQobV9leGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAg
ICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTVdpbmRvdyhtX2ZyYW1lLmdldCgp
LCBub3JtYWxXb3JsZChtX2V4ZWMtPnZtKCkpKTsKICAgICBpZiAoIWdsb2JhbE9iamVjdCkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyKG1f
ZXhlYywgInJldHVyblZhbHVlIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd1NoZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDE0ICs0NCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjb25zdCBDbGFzc0luZm8gSlNE
T01XaW5kb3dTaGVsbDo6c19pbmZvID0geyAiSlNET01XaW5kb3dTaGVsbCIsICZCYXNlOjpzX2lu
Zm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNET01XaW5kb3dTaGVsbCkgfTsKIAogSlNE
T01XaW5kb3dTaGVsbDo6SlNET01XaW5kb3dTaGVsbChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRE9N
V3JhcHBlcldvcmxkKiB3b3JsZCkKLSAgICA6IEJhc2UoKndvcmxkLT5nbG9iYWxEYXRhKCksIHN0
cnVjdHVyZSkKKyAgICA6IEJhc2UoKndvcmxkLT52bSgpLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX3dv
cmxkKHdvcmxkKQogewogfQogCi12b2lkIEpTRE9NV2luZG93U2hlbGw6OmZpbmlzaENyZWF0aW9u
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUGFzc1JlZlB0cjxET01XaW5kb3c+IHdpbmRvdykK
K3ZvaWQgSlNET01XaW5kb3dTaGVsbDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBQYXNzUmVmUHRy
PERPTVdpbmRvdz4gd2luZG93KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMo
JnNfaW5mbykpOwogICAgIHNldFdpbmRvdyh3aW5kb3cpOwogfQpAQCAtNjEsMTEgKzYxLDExIEBA
IHZvaWQgSlNET01XaW5kb3dTaGVsbDo6ZGVzdHJveShKU0NlbGwqIGMKICAgICBzdGF0aWNfY2Fz
dDxKU0RPTVdpbmRvd1NoZWxsKj4oY2VsbCktPkpTRE9NV2luZG93U2hlbGw6On5KU0RPTVdpbmRv
d1NoZWxsKCk7CiB9CiAKLXZvaWQgSlNET01XaW5kb3dTaGVsbDo6c2V0V2luZG93KEpTQzo6SlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0RPTVdpbmRvdyogd2luZG93KQordm9pZCBKU0RPTVdp
bmRvd1NoZWxsOjpzZXRXaW5kb3coSlNDOjpWTSYgdm0sIEpTRE9NV2luZG93KiB3aW5kb3cpCiB7
CiAgICAgQVNTRVJUX0FSRyh3aW5kb3csIHdpbmRvdyk7Ci0gICAgc2V0VGFyZ2V0KGdsb2JhbERh
dGEsIHdpbmRvdyk7Ci0gICAgc3RydWN0dXJlKCktPnNldEdsb2JhbE9iamVjdCgqSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLCB3aW5kb3cpOworICAgIHNldFRhcmdldCh2bSwgd2lu
ZG93KTsKKyAgICBzdHJ1Y3R1cmUoKS0+c2V0R2xvYmFsT2JqZWN0KCpKU0RPTVdpbmRvdzo6Y29t
bW9uVk0oKSwgd2luZG93KTsKICAgICBnY0NvbnRyb2xsZXIoKS5nYXJiYWdlQ29sbGVjdFNvb24o
KTsKIH0KIApAQCAtNzcsMTMgKzc3LDEzIEBAIHZvaWQgSlNET01XaW5kb3dTaGVsbDo6c2V0V2lu
ZG93KFBhc3NSZWYKICAgICAvLyBFeHBsaWNpdGx5IHByb3RlY3QgdGhlIGdsb2JhbCBvYmplY3Qn
cyBwcm90b3R5cGUgc28gaXQgaXNuJ3QgY29sbGVjdGVkCiAgICAgLy8gd2hlbiB3ZSBhbGxvY2F0
ZSB0aGUgZ2xvYmFsIG9iamVjdC4gKE9uY2UgdGhlIGdsb2JhbCBvYmplY3QgaXMgZnVsbHkKICAg
ICAvLyBjb25zdHJ1Y3RlZCwgaXQgY2FuIG1hcmsgaXRzIG93biBwcm90b3R5cGUuKQotICAgIFN0
cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlID0gSlNET01XaW5kb3dQcm90b3R5cGU6OmNyZWF0
ZVN0cnVjdHVyZSgqSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLCAwLCBqc051bGwo
KSk7Ci0gICAgU3Ryb25nPEpTRE9NV2luZG93UHJvdG90eXBlPiBwcm90b3R5cGUoKkpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSwgSlNET01XaW5kb3dQcm90b3R5cGU6OmNyZWF0ZSgq
SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLCAwLCBwcm90b3R5cGVTdHJ1Y3R1cmUp
KTsKKyAgICBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSA9IEpTRE9NV2luZG93UHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoKkpTRE9NV2luZG93Ojpjb21tb25WTSgpLCAwLCBqc051bGwo
KSk7CisgICAgU3Ryb25nPEpTRE9NV2luZG93UHJvdG90eXBlPiBwcm90b3R5cGUoKkpTRE9NV2lu
ZG93Ojpjb21tb25WTSgpLCBKU0RPTVdpbmRvd1Byb3RvdHlwZTo6Y3JlYXRlKCpKU0RPTVdpbmRv
dzo6Y29tbW9uVk0oKSwgMCwgcHJvdG90eXBlU3RydWN0dXJlKSk7CiAKLSAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IEpTRE9NV2luZG93OjpjcmVhdGVTdHJ1Y3R1cmUoKkpTRE9NV2luZG93Ojpj
b21tb25KU0dsb2JhbERhdGEoKSwgMCwgcHJvdG90eXBlLmdldCgpKTsKLSAgICBKU0RPTVdpbmRv
dyoganNET01XaW5kb3cgPSBKU0RPTVdpbmRvdzo6Y3JlYXRlKCpKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwgZG9tV2luZG93LCB0aGlzKTsKLSAgICBwcm90b3R5
cGUtPnN0cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3QoKkpTRE9NV2luZG93Ojpjb21tb25KU0ds
b2JhbERhdGEoKSwganNET01XaW5kb3cpOwotICAgIHNldFdpbmRvdygqSlNET01XaW5kb3c6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpLCBqc0RPTVdpbmRvdyk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBKU0RPTVdpbmRvdzo6Y3JlYXRlU3RydWN0dXJlKCpKU0RPTVdpbmRvdzo6Y29tbW9uVk0o
KSwgMCwgcHJvdG90eXBlLmdldCgpKTsKKyAgICBKU0RPTVdpbmRvdyoganNET01XaW5kb3cgPSBK
U0RPTVdpbmRvdzo6Y3JlYXRlKCpKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSwgc3RydWN0dXJlLCBk
b21XaW5kb3csIHRoaXMpOworICAgIHByb3RvdHlwZS0+c3RydWN0dXJlKCktPnNldEdsb2JhbE9i
amVjdCgqSlNET01XaW5kb3c6OmNvbW1vblZNKCksIGpzRE9NV2luZG93KTsKKyAgICBzZXRXaW5k
b3coKkpTRE9NV2luZG93Ojpjb21tb25WTSgpLCBqc0RPTVdpbmRvdyk7CiAgICAgQVNTRVJUKGpz
RE9NV2luZG93LT5nbG9iYWxPYmplY3QoKSA9PSBqc0RPTVdpbmRvdyk7CiAgICAgQVNTRVJUKHBy
b3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkgPT0ganNET01XaW5kb3cpOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaAkocmV2aXNpb24gMTQ4
NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAgICAgICBKU0RPTVdpbmRvdyog
d2luZG93KCkgY29uc3QgeyByZXR1cm4gSlNDOjpqc0Nhc3Q8SlNET01XaW5kb3cqPih0YXJnZXQo
KSk7IH0KLSAgICAgICAgdm9pZCBzZXRXaW5kb3coSlNDOjpKU0dsb2JhbERhdGEmLCBKU0RPTVdp
bmRvdyopOworICAgICAgICB2b2lkIHNldFdpbmRvdyhKU0M6OlZNJiwgSlNET01XaW5kb3cqKTsK
ICAgICAgICAgdm9pZCBzZXRXaW5kb3coUGFzc1JlZlB0cjxET01XaW5kb3c+KTsKIAogICAgICAg
ICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwpAQCAtNTMsMjIgKzUzLDIyIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0aWMgSlNET01XaW5kb3dTaGVsbCog
Y3JlYXRlKFBhc3NSZWZQdHI8RE9NV2luZG93PiB3aW5kb3csIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIERPTVdyYXBwZXJXb3JsZCogd29ybGQpIAogICAgICAgICB7Ci0gICAgICAgICAgICBK
U0M6OkhlYXAmIGhlYXAgPSBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXA7
CisgICAgICAgICAgICBKU0M6OkhlYXAmIGhlYXAgPSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+
aGVhcDsKICAgICAgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHNoZWxsID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDxKU0RPTVdpbmRvd1NoZWxsPihoZWFwKSkgSlNET01XaW5kb3dT
aGVsbChzdHJ1Y3R1cmUsIHdvcmxkKTsKLSAgICAgICAgICAgIHNoZWxsLT5maW5pc2hDcmVhdGlv
bigqd29ybGQtPmdsb2JhbERhdGEoKSwgd2luZG93KTsKKyAgICAgICAgICAgIHNoZWxsLT5maW5p
c2hDcmVhdGlvbigqd29ybGQtPnZtKCksIHdpbmRvdyk7CiAgICAgICAgICAgICByZXR1cm4gc2hl
bGw7IAogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpIAorICAgICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkgCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIDAsIHByb3RvdHlw
ZSwgSlNDOjpUeXBlSW5mbyhKU0M6OlByb3h5VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKKyAgICAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCAwLCBwcm90
b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpQcm94eVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7CiAgICAgICAgIH0KIAogICAgICAgICBET01XcmFwcGVyV29ybGQqIHdvcmxkKCkgeyBy
ZXR1cm4gbV93b3JsZC5nZXQoKTsgfQogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBKU0RPTVdp
bmRvd1NoZWxsKEpTQzo6U3RydWN0dXJlKiwgRE9NV3JhcHBlcldvcmxkKik7Ci0gICAgICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpKU0dsb2JhbERhdGEmLCBQYXNzUmVmUHRyPERPTVdpbmRv
dz4pOworICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBQYXNzUmVmUHRyPERP
TVdpbmRvdz4pOwogCiAgICAgICAgIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IG1fd29ybGQ7CiAg
ICAgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV3JhcHBlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV3JhcHBlci5oCShy
ZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBw
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3Rl
ZDoKICAgICBKU0RPTVdyYXBwZXIoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSAKLSAgICAgICAgOiBKU0Rlc3RydWN0aWJsZU9iamVj
dChnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKQorICAgICAgICA6IEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0KGdsb2JhbE9iamVjdC0+dm0oKSwgc3RydWN0dXJlKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXZpY2VNb3Rpb25FdmVu
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRGV2aWNlTW90aW9uRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYs
MTggKzExNiwxOCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpSb3RhCiBz
dGF0aWMgSlNPYmplY3QqIGNyZWF0ZUFjY2VsZXJhdGlvbk9iamVjdChjb25zdCBEZXZpY2VNb3Rp
b25EYXRhOjpBY2NlbGVyYXRpb24qIGFjY2VsZXJhdGlvbiwgRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICBv
YmplY3QtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgIngi
KSwgYWNjZWxlcmF0aW9uLT5jYW5Qcm92aWRlWCgpID8ganNOdW1iZXIoYWNjZWxlcmF0aW9uLT54
KCkpIDoganNOdWxsKCkpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgSWRlbnRpZmllcihleGVjLCAieSIpLCBhY2NlbGVyYXRpb24tPmNhblByb3ZpZGVZKCkgPyBq
c051bWJlcihhY2NlbGVyYXRpb24tPnkoKSkgOiBqc051bGwoKSk7Ci0gICAgb2JqZWN0LT5wdXRE
aXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJ6IiksIGFjY2VsZXJh
dGlvbi0+Y2FuUHJvdmlkZVooKSA/IGpzTnVtYmVyKGFjY2VsZXJhdGlvbi0+eigpKSA6IGpzTnVs
bCgpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMs
ICJ4IiksIGFjY2VsZXJhdGlvbi0+Y2FuUHJvdmlkZVgoKSA/IGpzTnVtYmVyKGFjY2VsZXJhdGlv
bi0+eCgpKSA6IGpzTnVsbCgpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBJ
ZGVudGlmaWVyKGV4ZWMsICJ5IiksIGFjY2VsZXJhdGlvbi0+Y2FuUHJvdmlkZVkoKSA/IGpzTnVt
YmVyKGFjY2VsZXJhdGlvbi0+eSgpKSA6IGpzTnVsbCgpKTsKKyAgICBvYmplY3QtPnB1dERpcmVj
dChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJ6IiksIGFjY2VsZXJhdGlvbi0+Y2FuUHJv
dmlkZVooKSA/IGpzTnVtYmVyKGFjY2VsZXJhdGlvbi0+eigpKSA6IGpzTnVsbCgpKTsKICAgICBy
ZXR1cm4gb2JqZWN0OwogfQogCiBzdGF0aWMgSlNPYmplY3QqIGNyZWF0ZVJvdGF0aW9uUmF0ZU9i
amVjdChjb25zdCBEZXZpY2VNb3Rpb25EYXRhOjpSb3RhdGlvblJhdGUqIHJvdGF0aW9uUmF0ZSwg
RXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBjb25zdHJ1Y3RFbXB0
eU9iamVjdChleGVjKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCks
IElkZW50aWZpZXIoZXhlYywgImFscGhhIiksIHJvdGF0aW9uUmF0ZS0+Y2FuUHJvdmlkZUFscGhh
KCkgPyBqc051bWJlcihyb3RhdGlvblJhdGUtPmFscGhhKCkpIDoganNOdWxsKCkpOwotICAgIG9i
amVjdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiYmV0
YSIpLCAgcm90YXRpb25SYXRlLT5jYW5Qcm92aWRlQmV0YSgpICA/IGpzTnVtYmVyKHJvdGF0aW9u
UmF0ZS0+YmV0YSgpKSAgOiBqc051bGwoKSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJnYW1tYSIpLCByb3RhdGlvblJhdGUtPmNh
blByb3ZpZGVHYW1tYSgpID8ganNOdW1iZXIocm90YXRpb25SYXRlLT5nYW1tYSgpKSA6IGpzTnVs
bCgpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMs
ICJhbHBoYSIpLCByb3RhdGlvblJhdGUtPmNhblByb3ZpZGVBbHBoYSgpID8ganNOdW1iZXIocm90
YXRpb25SYXRlLT5hbHBoYSgpKSA6IGpzTnVsbCgpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdChl
eGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJiZXRhIiksICByb3RhdGlvblJhdGUtPmNhblBy
b3ZpZGVCZXRhKCkgID8ganNOdW1iZXIocm90YXRpb25SYXRlLT5iZXRhKCkpICA6IGpzTnVsbCgp
KTsKKyAgICBvYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJn
YW1tYSIpLCByb3RhdGlvblJhdGUtPmNhblByb3ZpZGVHYW1tYSgpID8ganNOdW1iZXIocm90YXRp
b25SYXRlLT5nYW1tYSgpKSA6IGpzTnVsbCgpKTsKICAgICByZXR1cm4gb2JqZWN0OwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAJKHJldmlz
aW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIEpTRGljdGlvbmFyeTo6
Y29udmVydFZhbHVlKEV4ZWNTdGF0CiAKIHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBTY3JpcHRWYWx1ZSYgcmVzdWx0KQogewot
ICAgIHJlc3VsdCA9IFNjcmlwdFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdmFsdWUpOworICAg
IHJlc3VsdCA9IFNjcmlwdFZhbHVlKGV4ZWMtPnZtKCksIHZhbHVlKTsKIH0KIAogdm9pZCBKU0Rp
Y3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFJl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+JiByZXN1bHQpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDcgKzU2LDcgQEAgcHVibGljOgogICAgICAgICA6IG1fZXhlYyhleGVjKQogICAgIHsKICAgICAg
ICAgaWYgKGV4ZWMgJiYgaW5pdGlhbGl6ZXJPYmplY3QpCi0gICAgICAgICAgICBtX2luaXRpYWxp
emVyT2JqZWN0ID0gSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4oZXhlYy0+Z2xvYmFsRGF0YSgp
LCBpbml0aWFsaXplck9iamVjdCk7CisgICAgICAgICAgICBtX2luaXRpYWxpemVyT2JqZWN0ID0g
SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4oZXhlYy0+dm0oKSwgaW5pdGlhbGl6ZXJPYmplY3Qp
OwogICAgIH0KIAogICAgIC8vIFJldHVybnMgZmFsc2UgaWYgYW55IGV4Y2VwdGlvbnMgd2VyZSB0
aHJvd24sIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcHJvcGVydHkgd2FzIGZvdW5kLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAkocmV2
aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgSlNFcnJvckhhbmRs
ZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEUKIAogICAgIEVycm9yRXZlbnQqIGVycm9yRXZlbnQgPSBz
dGF0aWNfY2FzdDxFcnJvckV2ZW50Kj4oZXZlbnQpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2so
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+Z2xvYmFsRGF0YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhzY3JpcHRFeGVjdXRpb25Db250ZXh0LT52bSgpKTsKIAogICAgIEpTT2JqZWN0KiBqc0Z1
bmN0aW9uID0gdGhpcy0+anNGdW5jdGlvbihzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKICAgICBp
ZiAoIWpzRnVuY3Rpb24pCkBAIC04OSw4ICs4OSw4IEBAIHZvaWQgSlNFcnJvckhhbmRsZXI6Omhh
bmRsZUV2ZW50KFNjcmlwdEUKICAgICAgICAgYXJncy5hcHBlbmQoanNTdHJpbmdXaXRoQ2FjaGUo
ZXhlYywgZXJyb3JFdmVudC0+ZmlsZW5hbWUoKSkpOwogICAgICAgICBhcmdzLmFwcGVuZChqc051
bWJlcihlcnJvckV2ZW50LT5saW5lbm8oKSkpOwogCi0gICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpOwotICAgICAgICBEeW5hbWljR2xv
YmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5k
eW5hbWljR2xvYmFsT2JqZWN0ID8gZ2xvYmFsRGF0YS5keW5hbWljR2xvYmFsT2JqZWN0IDogZ2xv
YmFsT2JqZWN0KTsKKyAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgICAg
ICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUodm0sIHZtLmR5bmFt
aWNHbG9iYWxPYmplY3QgPyB2bS5keW5hbWljR2xvYmFsT2JqZWN0IDogZ2xvYmFsT2JqZWN0KTsK
IAogICAgICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGdsb2JhbE9iamVjdC0+bWV0aG9kVGFibGUo
KS0+dG9UaGlzT2JqZWN0KGdsb2JhbE9iamVjdCwgZXhlYyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMTQ4NjU1
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxl
RXZlbnQoU2NyaXB0CiAgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0IHx8IHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQtPmlzSlNFeGVjdXRpb25Gb3JiaWRkZW4oKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+Z2xvYmFs
RGF0YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhzY3JpcHRFeGVjdXRpb25Db250ZXh0LT52
bSgpKTsKIAogICAgIEpTT2JqZWN0KiBqc0Z1bmN0aW9uID0gdGhpcy0+anNGdW5jdGlvbihzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KTsKICAgICBpZiAoIWpzRnVuY3Rpb24pCkBAIC0xMTksOCArMTE5
LDggQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdAogICAgICAgICBF
dmVudCogc2F2ZWRFdmVudCA9IGdsb2JhbE9iamVjdC0+Y3VycmVudEV2ZW50KCk7CiAgICAgICAg
IGdsb2JhbE9iamVjdC0+c2V0Q3VycmVudEV2ZW50KGV2ZW50KTsKIAotICAgICAgICBKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEgPSBnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKTsKLSAgICAgICAg
RHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKGdsb2JhbERhdGEsIGds
b2JhbERhdGEuZHluYW1pY0dsb2JhbE9iamVjdCA/IGdsb2JhbERhdGEuZHluYW1pY0dsb2JhbE9i
amVjdCA6IGdsb2JhbE9iamVjdCk7CisgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICAgICAgRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKHZt
LCB2bS5keW5hbWljR2xvYmFsT2JqZWN0ID8gdm0uZHluYW1pY0dsb2JhbE9iamVjdCA6IGdsb2Jh
bE9iamVjdCk7CiAKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tp
ZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6aW5zdHJ1bWVudEZ1bmN0aW9uQ2FsbChzY3JpcHRF
eGVjdXRpb25Db250ZXh0LCBjYWxsVHlwZSwgY2FsbERhdGEpOwogCkBAIC0xMzYsNyArMTM2LDcg
QEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdAogI2lmIEVOQUJMRShX
T1JLRVJTKQogICAgICAgICBpZiAoc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNXb3JrZXJDb250
ZXh0KCkpIHsKICAgICAgICAgICAgIGJvb2wgdGVybWluYXRvckNhdXNlZEV4Y2VwdGlvbiA9IChl
eGVjLT5oYWRFeGNlcHRpb24oKSAmJiBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oZXhl
Yy0+ZXhjZXB0aW9uKCkpKTsKLSAgICAgICAgICAgIGlmICh0ZXJtaW5hdG9yQ2F1c2VkRXhjZXB0
aW9uIHx8IGdsb2JhbERhdGEud2F0Y2hkb2cuZGlkRmlyZSgpKQorICAgICAgICAgICAgaWYgKHRl
cm1pbmF0b3JDYXVzZWRFeGNlcHRpb24gfHwgdm0ud2F0Y2hkb2cuZGlkRmlyZSgpKQogICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihzY3JpcHRFeGVjdXRpb25Db250
ZXh0KS0+c2NyaXB0KCktPmZvcmJpZEV4ZWN1dGlvbigpOwogICAgICAgICB9CiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oCShyZXZp
c2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVu
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIERPTVdyYXBwZXJXb3JsZCogaXNvbGF0ZWRXb3JsZCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNvbGF0ZWRXb3JsZC5nZXQoKTsgfQogCiAgICAgICAgIEpTQzo6SlNPYmplY3QqIHdyYXBw
ZXIoKSBjb25zdCB7IHJldHVybiBtX3dyYXBwZXIuZ2V0KCk7IH0KLSAgICAgICAgdm9pZCBzZXRX
cmFwcGVyKEpTQzo6SlNHbG9iYWxEYXRhJiwgSlNDOjpKU09iamVjdCogd3JhcHBlcikgY29uc3Qg
eyBtX3dyYXBwZXIgPSBKU0M6OlBhc3NXZWFrPEpTQzo6SlNPYmplY3Q+KHdyYXBwZXIpOyB9Cisg
ICAgICAgIHZvaWQgc2V0V3JhcHBlcihKU0M6OlZNJiwgSlNDOjpKU09iamVjdCogd3JhcHBlcikg
Y29uc3QgeyBtX3dyYXBwZXIgPSBKU0M6OlBhc3NXZWFrPEpTQzo6SlNPYmplY3Q+KHdyYXBwZXIp
OyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIEpTQzo6SlNPYmplY3QqIGluaXRp
YWxpemVKU0Z1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKSBjb25zdDsKQEAgLTgwLDcg
KzgwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBpbml0aWFsaXplSlNGdW5j
dGlvbiBjYW4gdHJpZ2dlciBjb2RlIHRoYXQgZGVsZXRlcyB0aGlzIGV2ZW50IGxpc3RlbmVyCiAg
ICAgICAgIC8vIGJlZm9yZSB3ZSdyZSBkb25lLiBJdCBzaG91bGQgYWx3YXlzIHJldHVybiAwIGlu
IHRoaXMgY2FzZS4KICAgICAgICAgUmVmUHRyPEpTRXZlbnRMaXN0ZW5lcj4gcHJvdGVjdChjb25z
dF9jYXN0PEpTRXZlbnRMaXN0ZW5lcio+KHRoaXMpKTsKLSAgICAgICAgSlNDOjpTdHJvbmc8SlND
OjpKU09iamVjdD4gd3JhcHBlcigqbV9pc29sYXRlZFdvcmxkLT5nbG9iYWxEYXRhKCksIG1fd3Jh
cHBlci5nZXQoKSk7CisgICAgICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IHdyYXBwZXIo
Km1faXNvbGF0ZWRXb3JsZC0+dm0oKSwgbV93cmFwcGVyLmdldCgpKTsKIAogICAgICAgICBpZiAo
IW1fanNGdW5jdGlvbikgewogICAgICAgICAgICAgSlNDOjpKU09iamVjdCogZnVuY3Rpb24gPSBp
bml0aWFsaXplSlNGdW5jdGlvbihzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERv
Y3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBKU1ZhbHVl
IEpTSFRNTERvY3VtZW50OjpuYW1lR2V0dGVyKEV4ZWNTCiBKU1ZhbHVlIEpTSFRNTERvY3VtZW50
OjphbGwoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIC8vIElmICJhbGwiIGhhcyBiZWVu
IG92ZXJ3cml0dGVuLCByZXR1cm4gdGhlIG92ZXJ3cml0dGVuIHZhbHVlCi0gICAgSlNWYWx1ZSB2
ID0gZ2V0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiYWxsIikp
OworICAgIEpTVmFsdWUgdiA9IGdldERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMs
ICJhbGwiKSk7CiAgICAgaWYgKHYpCiAgICAgICAgIHJldHVybiB2OwogCkBAIC05NSw3ICs5NSw3
IEBAIEpTVmFsdWUgSlNIVE1MRG9jdW1lbnQ6OmFsbChFeGVjU3RhdGUqIGUKIHZvaWQgSlNIVE1M
RG9jdW1lbnQ6OnNldEFsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAg
Ly8gQWRkICJhbGwiIHRvIHRoZSBwcm9wZXJ0eSBtYXAuCi0gICAgcHV0RGlyZWN0KGV4ZWMtPmds
b2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiYWxsIiksIHZhbHVlKTsKKyAgICBwdXREaXJl
Y3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiYWxsIiksIHZhbHVlKTsKIH0KIAogLy8g
Q3VzdG9tIGZ1bmN0aW9ucwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
VGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxNDg2
NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIEpTVmFsdWUgSlNIVE1M
VGVtcGxhdGVFbGVtZW50Ojpjb250ZW50KEUKIAogICAgIHdyYXBwZXIgPSBDUkVBVEVfRE9NX1dS
QVBQRVIoZXhlYywgZ2xvYmFsT2JqZWN0KCksIERvY3VtZW50RnJhZ21lbnQsIGNvbnRlbnQpOwog
ICAgIFByaXZhdGVOYW1lIHByb3BlcnR5TmFtZTsKLSAgICBjb25zdF9jYXN0PEpTSFRNTFRlbXBs
YXRlRWxlbWVudCo+KHRoaXMpLT5wdXREaXJlY3QoZ2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEo
KSwgcHJvcGVydHlOYW1lLCB3cmFwcGVyKTsKKyAgICBjb25zdF9jYXN0PEpTSFRNTFRlbXBsYXRl
RWxlbWVudCo+KHRoaXMpLT5wdXREaXJlY3QoZ2xvYmFsT2JqZWN0KCktPnZtKCksIHByb3BlcnR5
TmFtZSwgd3JhcHBlcik7CiAgICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkocmV2aXNpb24gMTQ4
NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTgzLDcgKzE4Myw3IEBAIEpTVmFsdWUgSlNIaXN0b3J5OjpzdGF0
ZShFeGVjU3RhdGUgKmV4ZWMKIAogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNl
cmlhbGl6ZWQgPSBoaXN0b3J5LT5zdGF0ZSgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gc2VyaWFs
aXplZCA/IHNlcmlhbGl6ZWQtPmRlc2VyaWFsaXplKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCAwKSA6
IGpzTnVsbCgpOwotICAgIGNvbnN0X2Nhc3Q8SlNIaXN0b3J5Kj4odGhpcyktPm1fc3RhdGUuc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgcmVzdWx0KTsKKyAgICBjb25zdF9jYXN0PEpTSGlz
dG9yeSo+KHRoaXMpLT5tX3N0YXRlLnNldChleGVjLT52bSgpLCB0aGlzLCByZXN1bHQpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SW1hZ2VDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDMsNyArNDMsNyBAQCB2b2lkIEpTSW1hZ2VDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRp
b24oCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0KTsKICAgICBBU1NF
UlQoaW5oZXJpdHMoJnNfaW5mbykpOwotICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCks
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTSFRNTEltYWdlRWxlbWVudFByb3Rv
dHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTsKKyAgICBwdXREaXJlY3QoZXhl
Yy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNIVE1MSW1hZ2VFbGVt
ZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIE5vbmUpOwogfQogCiBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RJbWFnZShFeGVjU3RhdGUq
IGV4ZWMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlQ29u
c3RydWN0b3IuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJbWFnZUNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOwogICAg
ICAgICB9CiAKLSAgICAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0
YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCShyZXZpc2lvbiAxNDg2NTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhl
YywgSlNET01HbG9iYQogICAgIAogICAgIHdyYXBwZXIgPSBDUkVBVEVfRE9NX1dSQVBQRVIoZXhl
YywgZ2xvYmFsT2JqZWN0LCBJbWFnZURhdGEsIGltYWdlRGF0YSk7CiAgICAgSWRlbnRpZmllciBk
YXRhTmFtZShleGVjLCAiZGF0YSIpOwotICAgIHdyYXBwZXItPnB1dERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksIGRhdGFOYW1lLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW1hZ2VEYXRhLT5k
YXRhKCkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHdyYXBwZXItPnB1dERpcmVjdChl
eGVjLT52bSgpLCBkYXRhTmFtZSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGltYWdlRGF0YS0+
ZGF0YSgpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBleGVjLT5oZWFwKCktPnJlcG9y
dEV4dHJhTWVtb3J5Q29zdChpbWFnZURhdGEtPmRhdGEoKS0+bGVuZ3RoKCkpOwogICAgIAogICAg
IHJldHVybiB3cmFwcGVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmpl
Y3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTQ4NjU1
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCwxMCArODQsMTAgQEAgTm9kZSogSW5qZWN0ZWRT
Y3JpcHRIb3N0OjpzY3JpcHRWYWx1ZUFzTgogU2NyaXB0VmFsdWUgSW5qZWN0ZWRTY3JpcHRIb3N0
Ojpub2RlQXNTY3JpcHRWYWx1ZShTY3JpcHRTdGF0ZSogc3RhdGUsIE5vZGUqIG5vZGUpCiB7CiAg
ICAgaWYgKCFzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShzdGF0ZSwgbm9kZSkpCi0gICAgICAgIHJl
dHVybiBTY3JpcHRWYWx1ZShzdGF0ZS0+Z2xvYmFsRGF0YSgpLCBqc051bGwoKSk7CisgICAgICAg
IHJldHVybiBTY3JpcHRWYWx1ZShzdGF0ZS0+dm0oKSwganNOdWxsKCkpOwogCiAgICAgSlNMb2Nr
SG9sZGVyIGxvY2soc3RhdGUpOwotICAgIHJldHVybiBTY3JpcHRWYWx1ZShzdGF0ZS0+Z2xvYmFs
RGF0YSgpLCB0b0pTKHN0YXRlLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKHN0
YXRlKSwgbm9kZSkpOworICAgIHJldHVybiBTY3JpcHRWYWx1ZShzdGF0ZS0+dm0oKSwgdG9KUyhz
dGF0ZSwgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShzdGF0ZSksIG5vZGUpKTsK
IH0KIAogSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdGVkT2JqZWN0KEV4ZWNT
dGF0ZSogZXhlYykKQEAgLTE3NywxNyArMTc3LDE3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlw
dEhvc3Q6OmZ1bmN0aW9uRGUKICAgICBTdHJpbmcgc2NyaXB0SWQgPSBTdHJpbmc6Om51bWJlcihz
b3VyY2VDb2RlLT5wcm92aWRlcigpLT5hc0lEKCkpOwogCiAgICAgSlNPYmplY3QqIGxvY2F0aW9u
ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgbG9jYXRpb24tPnB1dERpcmVjdChl
eGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgImxpbmVOdW1iZXIiKSwganNOdW1i
ZXIobGluZU51bWJlcikpOwotICAgIGxvY2F0aW9uLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJzY3JpcHRJZCIpLCBqc1N0cmluZyhleGVjLCBzY3JpcHRJ
ZCkpOworICAgIGxvY2F0aW9uLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVj
LCAibGluZU51bWJlciIpLCBqc051bWJlcihsaW5lTnVtYmVyKSk7CisgICAgbG9jYXRpb24tPnB1
dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJzY3JpcHRJZCIpLCBqc1N0cmlu
ZyhleGVjLCBzY3JpcHRJZCkpOwogCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVt
cHR5T2JqZWN0KGV4ZWMpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgSWRlbnRpZmllcihleGVjLCAibG9jYXRpb24iKSwgbG9jYXRpb24pOworICAgIHJlc3VsdC0+
cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgImxvY2F0aW9uIiksIGxvY2F0
aW9uKTsKICAgICBTdHJpbmcgbmFtZSA9IGZ1bmN0aW9uLT5uYW1lKGV4ZWMpOwogICAgIGlmICgh
bmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgSWRlbnRpZmllcihleGVjLCAibmFtZSIpLCBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBu
YW1lKSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXIo
ZXhlYywgIm5hbWUiKSwganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgbmFtZSkpOwogICAgIFN0cmlu
ZyBkaXNwbGF5TmFtZSA9IGZ1bmN0aW9uLT5kaXNwbGF5TmFtZShleGVjKTsKICAgICBpZiAoIWRp
c3BsYXlOYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJkaXNwbGF5TmFtZSIpLCBqc1N0cmluZ1dpdGhD
YWNoZShleGVjLCBkaXNwbGF5TmFtZSkpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdChleGVj
LT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJkaXNwbGF5TmFtZSIpLCBqc1N0cmluZ1dpdGhDYWNo
ZShleGVjLCBkaXNwbGF5TmFtZSkpOwogICAgIC8vIEZJWE1FOiBwcm92aWRlIGZ1bmN0aW9uIHNj
b3BlIGRhdGEgaW4gInNjb3Blc1JhdyIgcHJvcGVydHkgd2hlbiBKU0Mgc3VwcG9ydHMgaXQuCiAg
ICAgLy8gICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzE5Mgog
ICAgIHJldHVybiByZXN1bHQ7CkBAIC0yMTYsOCArMjE2LDggQEAgc3RhdGljIEpTQXJyYXkqIGdl
dEpTTGlzdGVuZXJGdW5jdGlvbnMoRQogICAgICAgICBpZiAoIWZ1bmN0aW9uKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIEpTT2JqZWN0KiBsaXN0ZW5lckVudHJ5ID0gY29uc3RydWN0
RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgICAgIGxpc3RlbmVyRW50cnktPnB1dERpcmVjdChleGVj
LT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgImxpc3RlbmVyIiksIGZ1bmN0aW9uKTsK
LSAgICAgICAgbGlzdGVuZXJFbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRl
bnRpZmllcihleGVjLCAidXNlQ2FwdHVyZSIpLCBqc0Jvb2xlYW4obGlzdGVuZXJJbmZvLmV2ZW50
TGlzdGVuZXJWZWN0b3JbaV0udXNlQ2FwdHVyZSkpOworICAgICAgICBsaXN0ZW5lckVudHJ5LT5w
dXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAibGlzdGVuZXIiKSwgZnVuY3Rp
b24pOworICAgICAgICBsaXN0ZW5lckVudHJ5LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRp
ZmllcihleGVjLCAidXNlQ2FwdHVyZSIpLCBqc0Jvb2xlYW4obGlzdGVuZXJJbmZvLmV2ZW50TGlz
dGVuZXJWZWN0b3JbaV0udXNlQ2FwdHVyZSkpOwogICAgICAgICByZXN1bHQtPnB1dERpcmVjdElu
ZGV4KGV4ZWMsIG91dHB1dEluZGV4KyssIEpTVmFsdWUobGlzdGVuZXJFbnRyeSkpOwogICAgIH0K
ICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjQ3LDcgKzI0Nyw3IEBAIEpTVmFsdWUgSlNJbmplY3Rl
ZFNjcmlwdEhvc3Q6OmdldEV2ZW50TGkKICAgICAgICAgaWYgKCFsaXN0ZW5lcnMtPmxlbmd0aCgp
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIEF0b21pY1N0cmluZyBldmVudFR5cGUg
PSBsaXN0ZW5lcnNBcnJheVtpXS5ldmVudFR5cGU7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCBldmVudFR5cGUuaW1wbCgpKSwg
SlNWYWx1ZShsaXN0ZW5lcnMpKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0o
KSwgSWRlbnRpZmllcihleGVjLCBldmVudFR5cGUuaW1wbCgpKSwgSlNWYWx1ZShsaXN0ZW5lcnMp
KTsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjU2LDggKzI1Niw4IEBAIEpTVmFs
dWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldEV2ZW50TGkKIEpTVmFsdWUgSlNJbmplY3RlZFNj
cmlwdEhvc3Q6Omluc3BlY3QoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgPj0gMikgewotICAgICAgICBTY3JpcHRWYWx1ZSBvYmplY3QoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgICAgIFNjcmlwdFZhbHVlIGhpbnRz
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+YXJndW1lbnQoMSkpOworICAgICAgICBTY3JpcHRW
YWx1ZSBvYmplY3QoZXhlYy0+dm0oKSwgZXhlYy0+YXJndW1lbnQoMCkpOworICAgICAgICBTY3Jp
cHRWYWx1ZSBoaW50cyhleGVjLT52bSgpLCBleGVjLT5hcmd1bWVudCgxKSk7CiAgICAgICAgIGlt
cGwoKS0+aW5zcGVjdEltcGwob2JqZWN0LnRvSW5zcGVjdG9yVmFsdWUoZXhlYyksIGhpbnRzLnRv
SW5zcGVjdG9yVmFsdWUoZXhlYykpOwogICAgIH0KICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlz
dGVuZXIuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDEyICsxMTgs
MTIgQEAgSlNPYmplY3QqIEpTTGF6eUV2ZW50TGlzdGVuZXI6OmluaXRpYWxpegogICAgICAgICAg
ICAgLy8gRW5zdXJlIHRoYXQgJ25vZGUnIGhhcyBhIEphdmFTY3JpcHQgd3JhcHBlciB0byBtYXJr
IHRoZSBldmVudCBsaXN0ZW5lciB3ZSdyZSBjcmVhdGluZy4KICAgICAgICAgICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOwogICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBwYXNzIHRoZSBn
bG9iYWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZQotICAgICAgICAgICAgc2V0V3Jh
cHBlcihleGVjLT5nbG9iYWxEYXRhKCksIGFzT2JqZWN0KHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBtX29yaWdpbmFsTm9kZSkpKTsKKyAgICAgICAgICAgIHNldFdyYXBwZXIoZXhlYy0+dm0oKSwg
YXNPYmplY3QodG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIG1fb3JpZ2luYWxOb2RlKSkpOwogICAg
ICAgICB9CiAKICAgICAgICAgLy8gQWRkIHRoZSBldmVudCdzIGhvbWUgZWxlbWVudCB0byB0aGUg
c2NvcGUKICAgICAgICAgLy8gKGFuZCB0aGUgZG9jdW1lbnQsIGFuZCB0aGUgZm9ybSAtIHNlZSBK
U0hUTUxFbGVtZW50OjpldmVudEhhbmRsZXJTY29wZSkKLSAgICAgICAgbGlzdGVuZXJBc0Z1bmN0
aW9uLT5zZXRTY29wZShleGVjLT5nbG9iYWxEYXRhKCksIGpzQ2FzdDxKU05vZGUqPih3cmFwcGVy
KCkpLT5wdXNoRXZlbnRIYW5kbGVyU2NvcGUoZXhlYywgbGlzdGVuZXJBc0Z1bmN0aW9uLT5zY29w
ZSgpKSk7CisgICAgICAgIGxpc3RlbmVyQXNGdW5jdGlvbi0+c2V0U2NvcGUoZXhlYy0+dm0oKSwg
anNDYXN0PEpTTm9kZSo+KHdyYXBwZXIoKSktPnB1c2hFdmVudEhhbmRsZXJTY29wZShleGVjLCBs
aXN0ZW5lckFzRnVuY3Rpb24tPnNjb3BlKCkpKTsKICAgICB9CiAgICAgcmV0dXJuIGpzRnVuY3Rp
b247CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNz
YWdlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0
LDcgKzg0LDcgQEAgSlNWYWx1ZSBKU01lc3NhZ2VFdmVudDo6ZGF0YShFeGVjU3RhdGUqIAogICAg
IH0KIAogICAgIC8vIFNhdmUgdGhlIHJlc3VsdCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRlc2VyaWFs
aXplIHRoZSB2YWx1ZSBhZ2Fpbi4KLSAgICBjb25zdF9jYXN0PEpTTWVzc2FnZUV2ZW50Kj4odGhp
cyktPm1fZGF0YS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCByZXN1bHQpOworICAgIGNv
bnN0X2Nhc3Q8SlNNZXNzYWdlRXZlbnQqPih0aGlzKS0+bV9kYXRhLnNldChleGVjLT52bSgpLCB0
aGlzLCByZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTExNywxMyArMTE3LDEz
IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgaGFuZGxlSW5pdE1lc3NhZ2VFdmUKICAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgfQotICAgIFNjcmlwdFZhbHVlIGRhdGFBcmcgPSBTY3JpcHRWYWx1ZShleGVjLT5nbG9i
YWxEYXRhKCksIGV4ZWMtPmFyZ3VtZW50KDMpKTsKKyAgICBTY3JpcHRWYWx1ZSBkYXRhQXJnID0g
U2NyaXB0VmFsdWUoZXhlYy0+dm0oKSwgZXhlYy0+YXJndW1lbnQoMykpOwogICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBN
ZXNzYWdlRXZlbnQqIGV2ZW50ID0gc3RhdGljX2Nhc3Q8TWVzc2FnZUV2ZW50Kj4oanNFdmVudC0+
aW1wbCgpKTsKICAgICBldmVudC0+aW5pdE1lc3NhZ2VFdmVudCh0eXBlQXJnLCBjYW5CdWJibGVB
cmcsIGNhbmNlbGFibGVBcmcsIGRhdGFBcmcsIG9yaWdpbkFyZywgbGFzdEV2ZW50SWRBcmcsIHNv
dXJjZUFyZywgbWVzc2FnZVBvcnRzLnJlbGVhc2UoKSk7Ci0gICAganNFdmVudC0+bV9kYXRhLnNl
dChleGVjLT5nbG9iYWxEYXRhKCksIGpzRXZlbnQsIGRhdGFBcmcuanNWYWx1ZSgpKTsKKyAgICBq
c0V2ZW50LT5tX2RhdGEuc2V0KGV4ZWMtPnZtKCksIGpzRXZlbnQsIGRhdGFBcmcuanNWYWx1ZSgp
KTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNdXRhdGlvbkNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAxNDg2
NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uQ2FsbGJhY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgSlNNdXRhdGlvbkNhbGxiYWNr
OjpjYWxsKGNvbnN0IFZlY3QKIAogICAgIFJlZlB0cjxKU011dGF0aW9uQ2FsbGJhY2s+IHByb3Rl
Y3QodGhpcyk7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2lzb2xhdGVkV29ybGQtPmdsb2Jh
bERhdGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9pc29sYXRlZFdvcmxkLT52bSgpKTsK
IAogICAgIGlmICghbV9jYWxsYmFjaykKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20u
Y3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011
dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNNdXRhdGlvbk8KICAgICBSZWZQdHI8SlNN
dXRhdGlvbkNhbGxiYWNrPiBjYWxsYmFjayA9IEpTTXV0YXRpb25DYWxsYmFjazo6Y3JlYXRlKG9i
amVjdCwganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCkpOwogICAgIEpTT2JqZWN0KiBqc09i
c2VydmVyID0gYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3Qo
KSwgTXV0YXRpb25PYnNlcnZlcjo6Y3JlYXRlKGNhbGxiYWNrLnJlbGVhc2UoKSkpKTsKICAgICBQ
cml2YXRlTmFtZSBwcm9wZXJ0eU5hbWU7Ci0gICAganNPYnNlcnZlci0+cHV0RGlyZWN0KGpzQ29u
c3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgb2Jq
ZWN0KTsKKyAgICBqc09ic2VydmVyLT5wdXREaXJlY3QoanNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2Jq
ZWN0KCktPnZtKCksIHByb3BlcnR5TmFtZSwgb2JqZWN0KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzT2JzZXJ2ZXIpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAJKHJldmlzaW9uIDE0ODY1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1
c2luZyBuYW1lc3BhY2UgSlNDOwogCi1KU05vZGVGaWx0ZXJDb25kaXRpb246OkpTTm9kZUZpbHRl
ckNvbmRpdGlvbihKU0dsb2JhbERhdGEmLCBOb2RlRmlsdGVyKiBvd25lciwgSlNWYWx1ZSBmaWx0
ZXIpCitKU05vZGVGaWx0ZXJDb25kaXRpb246OkpTTm9kZUZpbHRlckNvbmRpdGlvbihWTSYsIE5v
ZGVGaWx0ZXIqIG93bmVyLCBKU1ZhbHVlIGZpbHRlcikKICAgICA6IG1fZmlsdGVyKGZpbHRlci5p
c09iamVjdCgpID8gUGFzc1dlYWs8SlNPYmplY3Q+KGpzQ2FzdDxKU09iamVjdCo+KGZpbHRlciks
ICZtX3dlYWtPd25lciwgb3duZXIpIDogbnVsbHB0cikKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5oCShyZXZpc2lv
biAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25k
aXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTMgKzM0LDEzIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgIGNsYXNzIEpTTm9kZUZpbHRlckNvbmRpdGlvbiA6IHB1YmxpYyBOb2RlRmls
dGVyQ29uZGl0aW9uIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpT
Tm9kZUZpbHRlckNvbmRpdGlvbj4gY3JlYXRlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBOb2RlRmlsdGVyKiBvd25lciwgSlNDOjpKU1ZhbHVlIGZpbHRlcikKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SlNOb2RlRmlsdGVyQ29uZGl0aW9uPiBjcmVhdGUoSlNDOjpWTSYgdm0sIE5v
ZGVGaWx0ZXIqIG93bmVyLCBKU0M6OkpTVmFsdWUgZmlsdGVyKQogICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpTTm9kZUZpbHRlckNvbmRpdGlvbihnbG9iYWxEYXRh
LCBvd25lciwgZmlsdGVyKSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpTTm9k
ZUZpbHRlckNvbmRpdGlvbih2bSwgb3duZXIsIGZpbHRlcikpOwogICAgICAgICB9CiAKICAgICBw
cml2YXRlOgotICAgICAgICBKU05vZGVGaWx0ZXJDb25kaXRpb24oSlNDOjpKU0dsb2JhbERhdGEm
LCBOb2RlRmlsdGVyKiBvd25lciwgSlNDOjpKU1ZhbHVlIGZpbHRlcik7CisgICAgICAgIEpTTm9k
ZUZpbHRlckNvbmRpdGlvbihKU0M6OlZNJiwgTm9kZUZpbHRlciogb3duZXIsIEpTQzo6SlNWYWx1
ZSBmaWx0ZXIpOwogCiAgICAgICAgIHZpcnR1YWwgc2hvcnQgYWNjZXB0Tm9kZShTY3JpcHRTdGF0
ZSosIE5vZGUqKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNO
b2RlRmlsdGVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NiwxMyArNDYsMTMgQEAgdm9pZCBKU05vZGVGaWx0ZXI6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKgogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh0aGlzT2JqZWN0LT5pbXBsKCkpOwogfQog
Ci1QYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IHRvTm9kZUZpbHRlcihKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTVmFsdWUgdmFsdWUpCitQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IHRvTm9kZUZpbHRl
cihWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLmluaGVyaXRzKCZKU05v
ZGVGaWx0ZXI6OnNfaW5mbykpCiAgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNOb2RlRmlsdGVyKj4o
YXNPYmplY3QodmFsdWUpKS0+aW1wbCgpOwogCiAgICAgUmVmUHRyPE5vZGVGaWx0ZXI+IHJlc3Vs
dCA9IE5vZGVGaWx0ZXI6OmNyZWF0ZSgpOwotICAgIHJlc3VsdC0+c2V0Q29uZGl0aW9uKEpTTm9k
ZUZpbHRlckNvbmRpdGlvbjo6Y3JlYXRlKGdsb2JhbERhdGEsIHJlc3VsdC5nZXQoKSwgdmFsdWUp
KTsKKyAgICByZXN1bHQtPnNldENvbmRpdGlvbihKU05vZGVGaWx0ZXJDb25kaXRpb246OmNyZWF0
ZSh2bSwgcmVzdWx0LmdldCgpLCB2YWx1ZSkpOwogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9w
U3RhdGVFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gU2F2ZSB0aGUgc3RhdGUgdmFs
dWUgdG8gdGhlIG1fc3RhdGUgbWVtYmVyIG9mIGEgSlNQb3BTdGF0ZUV2ZW50LCBhbmQgcmV0dXJu
IGl0LCBmb3IgY29udmVuaWVuY2UuCiBzdGF0aWMgY29uc3QgSlNWYWx1ZSYgY2FjaGVTdGF0ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTUG9wU3RhdGVFdmVudCogZXZlbnQsIGNvbnN0IEpTVmFsdWUmIHN0
YXRlKQogewotICAgIGV2ZW50LT5tX3N0YXRlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIGV2ZW50
LCBzdGF0ZSk7CisgICAgZXZlbnQtPm1fc3RhdGUuc2V0KGV4ZWMtPnZtKCksIGV2ZW50LCBzdGF0
ZSk7CiAgICAgcmV0dXJuIHN0YXRlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlcXVlc3RBbmltYXRpb25GcmFtZUNh
bGxiYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja0N1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgYm9vbCBKU1JlcXVlc3RBbmltYXRpb25GcmFtZUNh
bGxiYWNrOjpoYQogCiAgICAgUmVmUHRyPEpTUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s+
IHByb3RlY3QodGhpcyk7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxEYXRhKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xv
YmFsT2JqZWN0KCktPnZtKCkpOwogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAg
ICBhcmdzLmFwcGVuZChqc051bWJlcihoaWdoUmVzTm93TXMpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyAr
NzYsNyBAQCBKU1ZhbHVlIEpTU1FMUmVzdWx0U2V0Um93TGlzdDo6aXRlbShFeGVjCiAgICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgb2JqZWN0
LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsIG1faW1wbC0+
Y29sdW1uTmFtZXMoKVtpXSksIGpzVmFsdWUsIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAg
ICAgIG9iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgbV9pbXBs
LT5jb2x1bW5OYW1lcygpW2ldKSwganNWYWx1ZSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAg
ICB9CiAKICAgICByZXR1cm4gb2JqZWN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXb3JrZXJDb250ZXh0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0QmFzZS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEJhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NiwxNSArNDYsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjb25z
dCBDbGFzc0luZm8gSlNXb3JrZXJDb250ZXh0QmFzZTo6c19pbmZvID0geyAiV29ya2VyQ29udGV4
dCIsICZKU0RPTUdsb2JhbE9iamVjdDo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTV29ya2VyQ29udGV4dEJhc2UpIH07CiAKLUpTV29ya2VyQ29udGV4dEJhc2U6OkpTV29ya2Vy
Q29udGV4dEJhc2UoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8V29ya2VyQ29udGV4dD4gaW1wbCkKLSAgICA6IEpTRE9N
R2xvYmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgbm9ybWFsV29ybGQoZ2xvYmFsRGF0
YSkpCitKU1dvcmtlckNvbnRleHRCYXNlOjpKU1dvcmtlckNvbnRleHRCYXNlKEpTQzo6Vk0mIHZt
LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPFdvcmtlckNvbnRleHQ+IGlt
cGwpCisgICAgOiBKU0RPTUdsb2JhbE9iamVjdCh2bSwgc3RydWN0dXJlLCBub3JtYWxXb3JsZCh2
bSkpCiAgICAgLCBtX2ltcGwoaW1wbCkKIHsKIH0KIAotdm9pZCBKU1dvcmtlckNvbnRleHRCYXNl
OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEpTV29ya2Vy
Q29udGV4dEJhc2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKLSAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAg
QVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEJhc2UuaAkocmV2aXNpb24gMTQ4NjU1KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0QmFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCwxNCArNDgsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBXb3JrZXJDb250ZXh0KiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9CiAg
ICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBj
b25zdDsKIAotICAgICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgICAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Okdsb2JhbE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpH
bG9iYWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgICAgICB9CiAK
ICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEpTV29ya2VyQ29udGV4dEJhc2UoSlNDOjpKU0dsb2Jh
bERhdGEmLCBKU0M6OlN0cnVjdHVyZSosIFBhc3NSZWZQdHI8V29ya2VyQ29udGV4dD4pOwotICAg
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJik7CisgICAgICAgIEpT
V29ya2VyQ29udGV4dEJhc2UoSlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwgUGFzc1JlZlB0cjxX
b3JrZXJDb250ZXh0Pik7CisgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPFdvcmtlckNvbnRleHQ+IG1faW1wbDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUGFnZVNjcmlwdERlYnVn
U2VydmVyLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDEyICsx
MTIsMTIgQEAgdm9pZCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUxpc3RlbgogCiB2b2lk
IFBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoVGltZXI8U2Ny
aXB0RGVidWdTZXJ2ZXI+KikKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93
Ojpjb21tb25WTSgpKTsKICAgICAvLyBJZiBKYXZhU2NyaXB0IHN0YWNrIGlzIG5vdCBlbXB0eSBw
b3N0cG9uZSByZWNvbXBpbGF0aW9uLgotICAgIGlmIChKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9i
YWxEYXRhKCktPmR5bmFtaWNHbG9iYWxPYmplY3QpCisgICAgaWYgKEpTRE9NV2luZG93Ojpjb21t
b25WTSgpLT5keW5hbWljR2xvYmFsT2JqZWN0KQogICAgICAgICByZWNvbXBpbGVBbGxKU0Z1bmN0
aW9uc1Nvb24oKTsKICAgICBlbHNlCi0gICAgICAgIERlYnVnZ2VyOjpyZWNvbXBpbGVBbGxKU0Z1
bmN0aW9ucyhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICBEZWJ1
Z2dlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwog
fQogCiBTY3JpcHREZWJ1Z1NlcnZlcjo6TGlzdGVuZXJTZXQqIFBhZ2VTY3JpcHREZWJ1Z1NlcnZl
cjo6Z2V0TGlzdGVuZXJzRm9yR2xvYmFsT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlv
bi5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
aGVkdWxlZEFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDEzICs2NSwxMyBAQCBQYXNz
T3duUHRyPFNjaGVkdWxlZEFjdGlvbj4gU2NoZWR1bGVkQWN0CiB9CiAKIFNjaGVkdWxlZEFjdGlv
bjo6U2NoZWR1bGVkQWN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBmdW5jdGlvbiwgRE9N
V3JhcHBlcldvcmxkKiBpc29sYXRlZFdvcmxkKQotICAgIDogbV9mdW5jdGlvbihleGVjLT5nbG9i
YWxEYXRhKCksIGZ1bmN0aW9uKQorICAgIDogbV9mdW5jdGlvbihleGVjLT52bSgpLCBmdW5jdGlv
bikKICAgICAsIG1faXNvbGF0ZWRXb3JsZChpc29sYXRlZFdvcmxkKQogewogICAgIC8vIHNldFRp
bWVvdXQoZnVuY3Rpb24sIGludGVydmFsLCBhcmcwLCBhcmcxLi4uKS4KICAgICAvLyBTdGFydCBh
dCAyIHRvIHNraXAgZnVuY3Rpb24gYW5kIGludGVydmFsLgogICAgIGZvciAoc2l6ZV90IGkgPSAy
OyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kpCi0gICAgICAgIG1fYXJncy5hcHBlbmQo
U3Ryb25nPEpTQzo6VW5rbm93bj4oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5hcmd1bWVudChp
KSkpOworICAgICAgICBtX2FyZ3MuYXBwZW5kKFN0cm9uZzxKU0M6OlVua25vd24+KGV4ZWMtPnZt
KCksIGV4ZWMtPmFyZ3VtZW50KGkpKSk7CiB9CiAKIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVj
dXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCkBAIC05MSw3ICs5MSw3IEBAIHZv
aWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlKFNjcmlwdEV4ZWMKIHZvaWQgU2NoZWR1bGVkQWN0
aW9uOjpleGVjdXRlRnVuY3Rpb25JbkNvbnRleHQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSB0aGlzVmFsdWUsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7
CiAgICAgQVNTRVJUKG1fZnVuY3Rpb24pOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbnRleHQt
Pmdsb2JhbERhdGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29udGV4dC0+dm0oKSk7CiAK
ICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxE
YXRhKG1fZnVuY3Rpb24uZ2V0KCksIGNhbGxEYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtNTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAgICAg
ICAgU2NoZWR1bGVkQWN0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9u
LCBET01XcmFwcGVyV29ybGQqIGlzb2xhdGVkV29ybGQpOwogICAgICAgICBTY2hlZHVsZWRBY3Rp
b24oY29uc3QgU3RyaW5nJiBjb2RlLCBET01XcmFwcGVyV29ybGQqIGlzb2xhdGVkV29ybGQpCi0g
ICAgICAgICAgICA6IG1fZnVuY3Rpb24oKmlzb2xhdGVkV29ybGQtPmdsb2JhbERhdGEoKSkKKyAg
ICAgICAgICAgIDogbV9mdW5jdGlvbigqaXNvbGF0ZWRXb3JsZC0+dm0oKSkKICAgICAgICAgICAg
ICwgbV9jb2RlKGNvZGUpCiAgICAgICAgICAgICAsIG1faXNvbGF0ZWRXb3JsZChpc29sYXRlZFdv
cmxkKQogICAgICAgICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
YWNoZWRGcmFtZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTY3JpcHRDYWNo
ZWRGcmFtZURhdGE6OlNjcmlwdENhY2hlZEZyYW1lRGF0YShGcmFtZSogZnJhbWUpCiB7Ci0gICAg
SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKIAog
ICAgIFNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdENvbnRyb2xsZXIgPSBmcmFtZS0+c2NyaXB0KCk7
CiAgICAgU2NyaXB0Q29udHJvbGxlcjo6U2hlbGxNYXAmIHdpbmRvd1NoZWxscyA9IHNjcmlwdENv
bnRyb2xsZXItPm1fd2luZG93U2hlbGxzOwpAQCAtNTQsNyArNTQsNyBAQCBTY3JpcHRDYWNoZWRG
cmFtZURhdGE6OlNjcmlwdENhY2hlZEZyYW1lCiAgICAgU2NyaXB0Q29udHJvbGxlcjo6U2hlbGxN
YXA6Oml0ZXJhdG9yIHdpbmRvd1NoZWxsc0VuZCA9IHdpbmRvd1NoZWxscy5lbmQoKTsKICAgICBm
b3IgKFNjcmlwdENvbnRyb2xsZXI6OlNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gd2luZG93U2hl
bGxzLmJlZ2luKCk7IGl0ZXIgIT0gd2luZG93U2hlbGxzRW5kOyArK2l0ZXIpIHsKICAgICAgICAg
SlNET01XaW5kb3cqIHdpbmRvdyA9IGl0ZXItPnZhbHVlLT53aW5kb3coKTsKLSAgICAgICAgbV93
aW5kb3dzLmFkZChpdGVyLT5rZXkuZ2V0KCksIFN0cm9uZzxKU0RPTVdpbmRvdz4od2luZG93LT5n
bG9iYWxEYXRhKCksIHdpbmRvdykpOworICAgICAgICBtX3dpbmRvd3MuYWRkKGl0ZXItPmtleS5n
ZXQoKSwgU3Ryb25nPEpTRE9NV2luZG93Pih3aW5kb3ctPnZtKCksIHdpbmRvdykpOwogICAgIH0K
IAogICAgIHNjcmlwdENvbnRyb2xsZXItPmF0dGFjaERlYnVnZ2VyKDApOwpAQCAtNjcsNyArNjcs
NyBAQCBTY3JpcHRDYWNoZWRGcmFtZURhdGE6On5TY3JpcHRDYWNoZWRGcmFtCiAKIHZvaWQgU2Ny
aXB0Q2FjaGVkRnJhbWVEYXRhOjpyZXN0b3JlKEZyYW1lKiBmcmFtZSkKIHsKLSAgICBKU0xvY2tI
b2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogCiAgICAgU2Ny
aXB0Q29udHJvbGxlciogc2NyaXB0Q29udHJvbGxlciA9IGZyYW1lLT5zY3JpcHQoKTsKICAgICBT
Y3JpcHRDb250cm9sbGVyOjpTaGVsbE1hcCYgd2luZG93U2hlbGxzID0gc2NyaXB0Q29udHJvbGxl
ci0+bV93aW5kb3dTaGVsbHM7CkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgU2NyaXB0Q2FjaGVkRnJh
bWVEYXRhOjpyZXN0b3JlKEZyYW0KICAgICAgICAgSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hl
bGwgPSBpdGVyLT52YWx1ZS5nZXQoKTsKIAogICAgICAgICBpZiAoSlNET01XaW5kb3cqIHdpbmRv
dyA9IG1fd2luZG93cy5nZXQod29ybGQpLmdldCgpKQotICAgICAgICAgICAgd2luZG93U2hlbGwt
PnNldFdpbmRvdyh3aW5kb3ctPmdsb2JhbERhdGEoKSwgd2luZG93KTsKKyAgICAgICAgICAgIHdp
bmRvd1NoZWxsLT5zZXRXaW5kb3cod2luZG93LT52bSgpLCB3aW5kb3cpOwogICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgIERPTVdpbmRvdyogZG9tV2luZG93ID0gZnJhbWUtPmRvY3VtZW50KCkt
PmRvbVdpbmRvdygpOwogICAgICAgICAgICAgaWYgKHdpbmRvd1NoZWxsLT53aW5kb3coKS0+aW1w
bCgpID09IGRvbVdpbmRvdykKQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBTY3JpcHRDYWNoZWRGcmFt
ZURhdGE6OmNsZWFyKCkKICAgICBpZiAobV93aW5kb3dzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0ds
b2JhbERhdGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21t
b25WTSgpKTsKICAgICBtX3dpbmRvd3MuY2xlYXIoKTsKICAgICBnY0NvbnRyb2xsZXIoKS5nYXJi
YWdlQ29sbGVjdFNvb24oKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvQXJnTGlz
dC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
SlNGdW5jdGlvbi5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9WTS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwpAQCAtNTgsNyArNTgsNyBAQCBQYXNzUmVmUHRyPFNjcmlwdENhbGxT
dGFjaz4gY3JlYXRlU2NyaXB0CiAgICAgVmVjdG9yPFNjcmlwdENhbGxGcmFtZT4gZnJhbWVzOwog
ICAgIGlmIChKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y3Vy
cmVudFN0YXRlKCkpIHsKICAgICAgICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJhY2U7Ci0g
ICAgICAgIEludGVycHJldGVyOjpnZXRTdGFja1RyYWNlKCZleGVjLT5nbG9iYWxEYXRhKCksIHN0
YWNrVHJhY2UsIG1heFN0YWNrU2l6ZSk7CisgICAgICAgIEludGVycHJldGVyOjpnZXRTdGFja1Ry
YWNlKCZleGVjLT52bSgpLCBzdGFja1RyYWNlLCBtYXhTdGFja1NpemUpOwogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHN0YWNrVHJhY2Uuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICBm
cmFtZXMuYXBwZW5kKFNjcmlwdENhbGxGcmFtZShzdGFja1RyYWNlW2ldLmZyaWVuZGx5RnVuY3Rp
b25OYW1lKGV4ZWMpLCBzdGFja1RyYWNlW2ldLmZyaWVuZGx5U291cmNlVVJMKCksIHN0YWNrVHJh
Y2VbaV0ubGluZSgpLCBzdGFja1RyYWNlW2ldLmNvbHVtbigpKSk7CiAgICAgfQpAQCAtNzUsNyAr
NzUsNyBAQCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY3JlYXRlU2NyaXB0CiB7CiAgICAg
VmVjdG9yPFNjcmlwdENhbGxGcmFtZT4gZnJhbWVzOwogICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBz
dGFja1RyYWNlOwotICAgIEludGVycHJldGVyOjpnZXRTdGFja1RyYWNlKCZleGVjLT5nbG9iYWxE
YXRhKCksIHN0YWNrVHJhY2UsIG1heFN0YWNrU2l6ZSArIDEpOworICAgIEludGVycHJldGVyOjpn
ZXRTdGFja1RyYWNlKCZleGVjLT52bSgpLCBzdGFja1RyYWNlLCBtYXhTdGFja1NpemUgKyAxKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gc3RhY2tUcmFjZS5zaXplKCkgPT0gMSA/IDAgOiAxOyBpIDwg
c3RhY2tUcmFjZS5zaXplKCk7IGkrKykgewogICAgICAgICAvLyBUaGlzIGVhcmx5IGV4aXQgaXMg
bmVjZXNzYXJ5IHRvIG1haW50YWluIG91ciBvbGQgYmVoYXZpb3VyCiAgICAgICAgIC8vIGJ1dCB0
aGUgc3RhY2sgdHJhY2Ugd2UgcHJvZHVjZSBub3cgaXMgY29tcGxldGUgYW5kIGhhbmRsZXMgYWxs
CkBAIC0xMDYsNyArMTA2LDcgQEAgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGNyZWF0ZVNj
cmlwdAogICAgIFZlY3RvcjxTY3JpcHRWYWx1ZT4gYXJndW1lbnRzOwogICAgIHNpemVfdCBhcmd1
bWVudENvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSBz
a2lwQXJndW1lbnRDb3VudDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkKLSAgICAgICAgYXJndW1l
bnRzLmFwcGVuZChTY3JpcHRWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmFyZ3VtZW50
KGkpKSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoU2NyaXB0VmFsdWUoZXhlYy0+dm0oKSwg
ZXhlYy0+YXJndW1lbnQoaSkpKTsKICAgICByZXR1cm4gU2NyaXB0QXJndW1lbnRzOjpjcmVhdGUo
ZXhlYywgYXJndW1lbnRzKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDQsOCArMTA0LDggQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpkZXN0cm95V2luZG93U2hl
bAogSlNET01XaW5kb3dTaGVsbCogU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlV2luZG93U2hlbGwo
RE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKIHsKICAgICBBU1NFUlQoIW1fd2luZG93U2hlbGxzLmNv
bnRhaW5zKHdvcmxkKSk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBKU0RPTVdpbmRvd1No
ZWxsOjpjcmVhdGVTdHJ1Y3R1cmUoKndvcmxkLT5nbG9iYWxEYXRhKCksIGpzTnVsbCgpKTsKLSAg
ICBTdHJvbmc8SlNET01XaW5kb3dTaGVsbD4gd2luZG93U2hlbGwoKndvcmxkLT5nbG9iYWxEYXRh
KCksIEpTRE9NV2luZG93U2hlbGw6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5k
b3coKSwgc3RydWN0dXJlLCB3b3JsZCkpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSlNE
T01XaW5kb3dTaGVsbDo6Y3JlYXRlU3RydWN0dXJlKCp3b3JsZC0+dm0oKSwganNOdWxsKCkpOwor
ICAgIFN0cm9uZzxKU0RPTVdpbmRvd1NoZWxsPiB3aW5kb3dTaGVsbCgqd29ybGQtPnZtKCksIEpT
RE9NV2luZG93U2hlbGw6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKSwg
c3RydWN0dXJlLCB3b3JsZCkpOwogICAgIFN0cm9uZzxKU0RPTVdpbmRvd1NoZWxsPiB3aW5kb3dT
aGVsbDIod2luZG93U2hlbGwpOwogICAgIG1fd2luZG93U2hlbGxzLmFkZCh3b3JsZCwgd2luZG93
U2hlbGwpOwogICAgIHdvcmxkLT5kaWRDcmVhdGVXaW5kb3dTaGVsbCh0aGlzKTsKQEAgLTE0OCw3
ICsxNDgsNyBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluCiAgICAg
fQogCiAgICAgbV9zb3VyY2VVUkwgPSBzYXZlZFNvdXJjZVVSTDsKLSAgICByZXR1cm4gU2NyaXB0
VmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCByZXR1cm5WYWx1ZSk7CisgICAgcmV0dXJuIFNjcmlw
dFZhbHVlKGV4ZWMtPnZtKCksIHJldHVyblZhbHVlKTsKIH0KIAogU2NyaXB0VmFsdWUgU2NyaXB0
Q29udHJvbGxlcjo6ZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSkg
CkBAIC0xNTgsMTIgKzE1OCwxMiBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFs
dWF0ZShjCiAKIFBhc3NSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiBTY3JpcHRDb250cm9sbGVyOjpj
cmVhdGVXb3JsZCgpCiB7Ci0gICAgcmV0dXJuIERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKEpTRE9N
V2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgcmV0dXJuIERPTVdyYXBwZXJXb3Js
ZDo6Y3JlYXRlKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKIH0KIAogdm9pZCBTY3JpcHRDb250
cm9sbGVyOjpnZXRBbGxXb3JsZHMoVmVjdG9yPFJlZlB0cjxET01XcmFwcGVyV29ybGQ+ID4mIHdv
cmxkcykKIHsKLSAgICBzdGF0aWNfY2FzdDxXZWJDb3JlSlNDbGllbnREYXRhKj4oSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5jbGllbnREYXRhKS0+Z2V0QWxsV29ybGRzKHdvcmxk
cyk7CisgICAgc3RhdGljX2Nhc3Q8V2ViQ29yZUpTQ2xpZW50RGF0YSo+KEpTRE9NV2luZG93Ojpj
b21tb25WTSgpLT5jbGllbnREYXRhKS0+Z2V0QWxsV29ybGRzKHdvcmxkcyk7CiB9CiAKIHZvaWQg
U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJXaW5kb3dTaGVsbChET01XaW5kb3cqIG5ld0RPTVdpbmRv
dywgYm9vbCBnb2luZ0ludG9QYWdlQ2FjaGUpCkBAIC0xNzEsNyArMTcxLDcgQEAgdm9pZCBTY3Jp
cHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKAogICAgIGlmIChtX3dpbmRvd1NoZWxscy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9N
V2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAKICAgICBmb3IgKFNoZWxsTWFwOjppdGVy
YXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBtX3dpbmRvd1NoZWxs
cy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxs
ID0gaXRlci0+dmFsdWUuZ2V0KCk7CkBAIC0yMDYsNyArMjA2LDcgQEAgSlNET01XaW5kb3dTaGVs
bCogU2NyaXB0Q29udHJvbGxlcjo6aW5pdAogewogICAgIEFTU0VSVCghbV93aW5kb3dTaGVsbHMu
Y29udGFpbnMod29ybGQpKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKHdvcmxkLT5nbG9iYWxE
YXRhKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHdvcmxkLT52bSgpKTsKIAogICAgIEpTRE9N
V2luZG93U2hlbGwqIHdpbmRvd1NoZWxsID0gY3JlYXRlV2luZG93U2hlbGwod29ybGQpOwogCkBA
IC0yODUsNyArMjg1LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjphdHRhY2hEZWJ1Z2dlcihK
Uwogdm9pZCBTY3JpcHRDb250cm9sbGVyOjp1cGRhdGVEb2N1bWVudCgpCiB7CiAgICAgZm9yIChT
aGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0g
bV93aW5kb3dTaGVsbHMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9j
ayhpdGVyLT5rZXktPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGl0
ZXItPmtleS0+dm0oKSk7CiAgICAgICAgIGl0ZXItPnZhbHVlLT53aW5kb3coKS0+dXBkYXRlRG9j
dW1lbnQoKTsKICAgICB9CiB9CkBAIC0zMDEsNyArMzAxLDcgQEAgQmluZGluZ3M6OlJvb3RPYmpl
Y3QqIFNjcmlwdENvbnRyb2xsZXI6OgogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICghbV9j
YWNoZWFibGVCaW5kaW5nUm9vdE9iamVjdCkgewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNMb2NrSG9s
ZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgbV9jYWNoZWFi
bGVCaW5kaW5nUm9vdE9iamVjdCA9IEJpbmRpbmdzOjpSb290T2JqZWN0OjpjcmVhdGUoMCwgZ2xv
YmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fY2FjaGVhYmxl
QmluZGluZ1Jvb3RPYmplY3QuZ2V0KCk7CkBAIC0zMTMsNyArMzEzLDcgQEAgQmluZGluZ3M6OlJv
b3RPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OgogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlm
ICghbV9iaW5kaW5nUm9vdE9iamVjdCkgewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RP
TVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgbV9iaW5kaW5nUm9v
dE9iamVjdCA9IEJpbmRpbmdzOjpSb290T2JqZWN0OjpjcmVhdGUoMCwgZ2xvYmFsT2JqZWN0KHBs
dWdpbldvcmxkKCkpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fYmluZGluZ1Jvb3RPYmplY3QuZ2V0
KCk7CkBAIC00MzQsNyArNDM0LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhbnVwU2Ny
aXB0T2JqZQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cygpCiB7
Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgp
KTsKIAogICAgIFJvb3RPYmplY3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcm9vdE9iamVj
dHMuZW5kKCk7CiAgICAgZm9yIChSb290T2JqZWN0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
cm9vdE9iamVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQpAQCAtNDcxLDcgKzQ3MSw3IEBA
IFNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV4ZWN1dGVTY3IKIAogYm9vbCBTY3JpcHRD
b250cm9sbGVyOjpzaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3koKQog
ewotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpLT50b3BDYWxsRnJhbWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBKU0RPTVdp
bmRvdzo6Y29tbW9uVk0oKS0+dG9wQ2FsbEZyYW1lOwogICAgIGlmICghY2FsbEZyYW1lIHx8IGNh
bGxGcmFtZSA9PSBDYWxsRnJhbWU6Om5vQ2FsbGVyKCkpIAogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgRE9NV3JhcHBlcldvcmxkKiBkb21XcmFwcGVyV29ybGQgPSBjdXJyZW50V29ybGQoY2Fs
bEZyYW1lKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xs
ZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
Q29udHJvbGxlck1hYy5tbQkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcg
KzEwMSw3IEBAIFdlYlNjcmlwdE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6d2luZG8KICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIW1fd2luZG93U2NyaXB0T2JqZWN0KSB7Ci0gICAgICAg
IEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKSk7CisgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpj
b21tb25WTSgpKTsKICAgICAgICAgSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdCA9IGJp
bmRpbmdSb290T2JqZWN0KCk7CiAgICAgICAgIG1fd2luZG93U2NyaXB0T2JqZWN0ID0gW1dlYlNj
cmlwdE9iamVjdCBzY3JpcHRPYmplY3RGb3JKU09iamVjdDp0b1JlZih3aW5kb3dTaGVsbChwbHVn
aW5Xb3JsZCgpKSkgb3JpZ2luUm9vdE9iamVjdDpyb290IHJvb3RPYmplY3Q6cm9vdF07CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2Vy
dmVyLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzMsNyArMjczLDcgQEAg
dm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXVzZQogICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgIGpzQ2FsbEZyYW1lID0ganNVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgbGlz
dGVuZXItPmRpZFBhdXNlKHN0YXRlLCBTY3JpcHRWYWx1ZShzdGF0ZS0+Z2xvYmFsRGF0YSgpLCBq
c0NhbGxGcmFtZSksIFNjcmlwdFZhbHVlKCkpOworICAgIGxpc3RlbmVyLT5kaWRQYXVzZShzdGF0
ZSwgU2NyaXB0VmFsdWUoc3RhdGUtPnZtKCksIGpzQ2FsbEZyYW1lKSwgU2NyaXB0VmFsdWUoKSk7
CiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkQ29udGludWUoU2NyaXB0
RGVidWdMaXN0ZW5lciogbGlzdGVuZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRFdmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgU3RyaW5nIGV2ZW50TGlzdGVuZXJIYW5kbGVyQm9k
eShEb2N1bWVudAogICAgIEFTU0VSVChqc0xpc3RlbmVyKTsKICAgICBpZiAoIWpzTGlzdGVuZXIp
CiAgICAgICAgIHJldHVybiAiIjsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhqc0xpc3RlbmVyLT5p
c29sYXRlZFdvcmxkKCktPmdsb2JhbERhdGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soanNM
aXN0ZW5lci0+aXNvbGF0ZWRXb3JsZCgpLT52bSgpKTsKICAgICBKU0M6OkpTT2JqZWN0KiBqc0Z1
bmN0aW9uID0ganNMaXN0ZW5lci0+anNGdW5jdGlvbihkb2N1bWVudCk7CiAgICAgaWYgKCFqc0Z1
bmN0aW9uKQogICAgICAgICByZXR1cm4gIiI7CkBAIC0xMTMsMTEgKzExMywxMSBAQCBTY3JpcHRW
YWx1ZSBldmVudExpc3RlbmVySGFuZGxlcihEb2N1bWVuCiAgICAgQVNTRVJUKGpzTGlzdGVuZXIp
OwogICAgIGlmICghanNMaXN0ZW5lcikKICAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7Ci0g
ICAgSlNMb2NrSG9sZGVyIGxvY2soanNMaXN0ZW5lci0+aXNvbGF0ZWRXb3JsZCgpLT5nbG9iYWxE
YXRhKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGpzTGlzdGVuZXItPmlzb2xhdGVkV29ybGQo
KS0+dm0oKSk7CiAgICAgSlNDOjpKU09iamVjdCoganNGdW5jdGlvbiA9IGpzTGlzdGVuZXItPmpz
RnVuY3Rpb24oZG9jdW1lbnQpOwogICAgIGlmICghanNGdW5jdGlvbikKICAgICAgICAgcmV0dXJu
IFNjcmlwdFZhbHVlKCk7Ci0gICAgcmV0dXJuIFNjcmlwdFZhbHVlKCpqc0xpc3RlbmVyLT5pc29s
YXRlZFdvcmxkKCktPmdsb2JhbERhdGEoKSwganNGdW5jdGlvbik7CisgICAgcmV0dXJuIFNjcmlw
dFZhbHVlKCpqc0xpc3RlbmVyLT5pc29sYXRlZFdvcmxkKCktPnZtKCksIGpzRnVuY3Rpb24pOwog
fQogCiBTY3JpcHRTdGF0ZSogZXZlbnRMaXN0ZW5lckhhbmRsZXJTY3JpcHRTdGF0ZShGcmFtZSog
ZnJhbWUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIpCkBAIC0xMzgsNyArMTM4LDcgQEAg
Ym9vbCBldmVudExpc3RlbmVySGFuZGxlckxvY2F0aW9uKERvY3VtZQogICAgIEFTU0VSVChqc0xp
c3RlbmVyKTsKICAgICBpZiAoIWpzTGlzdGVuZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBKU0xvY2tIb2xkZXIgbG9jayhqc0xpc3RlbmVyLT5pc29sYXRlZFdvcmxkKCktPmdsb2JhbERh
dGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soanNMaXN0ZW5lci0+aXNvbGF0ZWRXb3JsZCgp
LT52bSgpKTsKICAgICBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCA9IGpzTGlzdGVuZXItPmpzRnVu
Y3Rpb24oZG9jdW1lbnQpOwogICAgIGlmICghanNPYmplY3QpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rp
b25DYWxsLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3
IEBAIFNjcmlwdFZhbHVlIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y2FsbChib28KICAgICAgICAgcmV0
dXJuIFNjcmlwdFZhbHVlKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIFNjcmlwdFZhbHVlKG1fZXhl
Yy0+Z2xvYmFsRGF0YSgpLCByZXN1bHQpOworICAgIHJldHVybiBTY3JpcHRWYWx1ZShtX2V4ZWMt
PnZtKCksIHJlc3VsdCk7CiB9CiAKIFNjcmlwdFZhbHVlIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y2Fs
bCgpCkBAIC0yMTMsNyArMjEzLDcgQEAgU2NyaXB0VmFsdWUgU2NyaXB0Q2FsbGJhY2s6OmNhbGwo
KQogICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKICAgICB9CiAKLSAgICByZXR1cm4gU2Ny
aXB0VmFsdWUobV9leGVjLT5nbG9iYWxEYXRhKCksIHJlc3VsdCk7CisgICAgcmV0dXJuIFNjcmlw
dFZhbHVlKG1fZXhlYy0+dm0oKSwgcmVzdWx0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0R0NFdmVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0R0NFdmVudC5jcHAJ
KHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEdD
RXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAKICNpbmNsdWRlICJK
U0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgPGhlYXAvSGVhcC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
SlNHbG9iYWxEYXRhLmg+CisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgogI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NSw5ICs0NSw5IEBAIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKIHZvaWQgU2NyaXB0R0NFdmVudDo6Z2V0SGVhcFNpemUoSGVh
cEluZm8mIGluZm8pCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpOwotICAgIGluZm8udG90YWxKU0hlYXBTaXplID0gZ2xv
YmFsRGF0YS0+aGVhcC5jYXBhY2l0eSgpOwotICAgIGluZm8udXNlZEpTSGVhcFNpemUgPSBnbG9i
YWxEYXRhLT5oZWFwLnNpemUoKTsKKyAgICBWTSogdm0gPSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0o
KTsKKyAgICBpbmZvLnRvdGFsSlNIZWFwU2l6ZSA9IHZtLT5oZWFwLmNhcGFjaXR5KCk7CisgICAg
aW5mby51c2VkSlNIZWFwU2l6ZSA9IHZtLT5oZWFwLnNpemUoKTsKICAgICBpbmZvLmpzSGVhcFNp
emVMaW1pdCA9IDA7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0T2JqZWN0LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTMgKzQ1LDEzIEBA
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNjcmlwdE9iamVj
dDo6U2NyaXB0T2JqZWN0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgSlNPYmplY3QqIG9iamVj
dCkKLSAgICA6IFNjcmlwdFZhbHVlKHNjcmlwdFN0YXRlLT5nbG9iYWxEYXRhKCksIG9iamVjdCkK
KyAgICA6IFNjcmlwdFZhbHVlKHNjcmlwdFN0YXRlLT52bSgpLCBvYmplY3QpCiAgICAgLCBtX3Nj
cmlwdFN0YXRlKHNjcmlwdFN0YXRlKQogewogfQogCiBTY3JpcHRPYmplY3Q6OlNjcmlwdE9iamVj
dChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IFNjcmlwdFZhbHVlJiBzY3JpcHRWYWx1
ZSkKLSAgICA6IFNjcmlwdFZhbHVlKHNjcmlwdFN0YXRlLT5nbG9iYWxEYXRhKCksIHNjcmlwdFZh
bHVlLmpzVmFsdWUoKSkKKyAgICA6IFNjcmlwdFZhbHVlKHNjcmlwdFN0YXRlLT52bSgpLCBzY3Jp
cHRWYWx1ZS5qc1ZhbHVlKCkpCiAgICAgLCBtX3NjcmlwdFN0YXRlKHNjcmlwdFN0YXRlKQogewog
fQpAQCAtNjgsNyArNjgsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVFeGNlcHRpb24oU2NyaXB0U3Rh
dGUqCiBib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0
ZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgU2NyaXB0T2JqZWN0JiB2YWx1ZSkKIHsKICAgICBK
U0xvY2tIb2xkZXIgbG9jayhzY3JpcHRTdGF0ZSk7Ci0gICAgc2NyaXB0U3RhdGUtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+cHV0RGlyZWN0KHNjcmlwdFN0YXRlLT5nbG9iYWxEYXRhKCksIElkZW50
aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpLCB2YWx1ZS5qc09iamVjdCgpKTsKKyAgICBzY3JpcHRT
dGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wdXREaXJlY3Qoc2NyaXB0U3RhdGUtPnZtKCks
IElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpLCB2YWx1ZS5qc09iamVjdCgpKTsKICAgICBy
ZXR1cm4gaGFuZGxlRXhjZXB0aW9uKHNjcmlwdFN0YXRlKTsKIH0KIApAQCAtNzcsNyArNzcsNyBA
QCBib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlCiB7CiAgICAgSlNMb2Nr
SG9sZGVyIGxvY2soc2NyaXB0U3RhdGUpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRTdGF0ZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpKTsKLSAgICBnbG9iYWxPYmplY3QtPnB1dERpcmVjdChzY3JpcHRTdGF0ZS0+
Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKHNjcmlwdFN0YXRlLCBuYW1lKSwgdG9KUyhzY3JpcHRT
dGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSkpOworICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0
KHNjcmlwdFN0YXRlLT52bSgpLCBJZGVudGlmaWVyKHNjcmlwdFN0YXRlLCBuYW1lKSwgdG9KUyhz
Y3JpcHRTdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSkpOwogICAgIHJldHVybiBoYW5kbGVFeGNl
cHRpb24oc2NyaXB0U3RhdGUpOwogfQogCkBAIC04NSw3ICs4NSw3IEBAIGJvb2wgU2NyaXB0R2xv
YmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhzY3Jp
cHRTdGF0ZSk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwot
ICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KHNjcmlwdFN0YXRlLT5nbG9iYWxEYXRhKCksIElk
ZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpLCB0b0pTKHNjcmlwdFN0YXRlLCBnbG9iYWxPYmpl
Y3QsIHZhbHVlKSk7CisgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3Qoc2NyaXB0U3RhdGUtPnZt
KCksIElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpLCB0b0pTKHNjcmlwdFN0YXRlLCBnbG9i
YWxPYmplY3QsIHZhbHVlKSk7CiAgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihzY3JpcHRTdGF0
ZSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0U3RhdGUuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyAr
NDcsNyBAQCBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgV29ya2VyQ29udGV4
dDsKIAogLy8gVGhlIGlkZWEgaXMgdG8gZXhwb3NlICJzdGF0ZS1saWtlIiBtZXRob2RzIChoYWRF
eGNlcHRpb24sIGFuZCBhbnkgb3RoZXIKLS8vIG1ldGhvZHMgd2hlcmUgRXhlY1N0YXRlIGp1c3Qg
ZGlwcyBpbnRvIGdsb2JhbERhdGEpIG9mIEpTQzo6RXhlY1N0YXRlIGFzIGEKKy8vIG1ldGhvZHMg
d2hlcmUgRXhlY1N0YXRlIGp1c3QgZGlwcyBpbnRvIHZtKSBvZiBKU0M6OkV4ZWNTdGF0ZSBhcyBh
CiAvLyBzZXBhcmF0ZSBhYnN0cmFjdGlvbi4KIC8vIEZvciBub3csIHRoZSBzZXBhcmF0aW9uIGlz
IHB1cmVseSBieSBjb252ZW50aW9uLgogdHlwZWRlZiBKU0M6OkV4ZWNTdGF0ZSBTY3JpcHRTdGF0
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAJKHJl
dmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDcgKzExMiw3IEBAIFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBTY3JpcHQKIAogU2NyaXB0VmFsdWUgU2NyaXB0VmFsdWU6OmRlc2Vy
aWFsaXplKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiB2
YWx1ZSwgU2VyaWFsaXphdGlvbkVycm9yTW9kZSB0aHJvd0V4Y2VwdGlvbnMpCiB7Ci0gICAgcmV0
dXJuIFNjcmlwdFZhbHVlKHNjcmlwdFN0YXRlLT5nbG9iYWxEYXRhKCksIHZhbHVlLT5kZXNlcmlh
bGl6ZShzY3JpcHRTdGF0ZSwgc2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgMCwg
dGhyb3dFeGNlcHRpb25zKSk7CisgICAgcmV0dXJuIFNjcmlwdFZhbHVlKHNjcmlwdFN0YXRlLT52
bSgpLCB2YWx1ZS0+ZGVzZXJpYWxpemUoc2NyaXB0U3RhdGUsIHNjcmlwdFN0YXRlLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCksIDAsIHRocm93RXhjZXB0aW9ucykpOwogfQogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU7CiBjbGFzcyBTY3JpcHRWYWx1ZSB7CiBwdWJsaWM6CiAgICAgU2NyaXB0VmFsdWUo
KSB7IH0KLSAgICBTY3JpcHRWYWx1ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlND
OjpKU1ZhbHVlIHZhbHVlKSA6IG1fdmFsdWUoZ2xvYmFsRGF0YSwgdmFsdWUpIHt9CisgICAgU2Ny
aXB0VmFsdWUoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgOiBtX3ZhbHVlKHZtLCB2
YWx1ZSkge30KICAgICB2aXJ0dWFsIH5TY3JpcHRWYWx1ZSgpIHt9CiAKICAgICBKU0M6OkpTVmFs
dWUganNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFdyYXBwYWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFdyYXBwYWJsZS5oCShyZXZpc2lvbiAxNDg2
NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRXcmFwcGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgPGhlYXAvV2Vhay5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwogY2xhc3MgV2Vh
a0hhbmRsZU93bmVyOwogfQogCkBAIC00Niw3ICs0Niw3IEBAIGNsYXNzIEpTRE9NV3JhcHBlcjsK
IGNsYXNzIFNjcmlwdFdyYXBwYWJsZSB7CiBwdWJsaWM6CiAgICAgSlNET01XcmFwcGVyKiB3cmFw
cGVyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRXcmFwcGVyKEpTQzo6SlNHbG9iYWxEYXRhJiwgSlNE
T01XcmFwcGVyKiwgSlNDOjpXZWFrSGFuZGxlT3duZXIqLCB2b2lkKik7CisgICAgdm9pZCBzZXRX
cmFwcGVyKEpTQzo6Vk0mLCBKU0RPTVdyYXBwZXIqLCBKU0M6OldlYWtIYW5kbGVPd25lciosIHZv
aWQqKTsKICAgICB2b2lkIGNsZWFyV3JhcHBlcihKU0RPTVdyYXBwZXIqKTsKIAogcHJpdmF0ZToK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFdyYXBwYWJsZUlubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRXcmFwcGFi
bGVJbmxpbmVzLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdFdyYXBwYWJsZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMs
NyBAQCBpbmxpbmUgSlNET01XcmFwcGVyKiBTY3JpcHRXcmFwcGFibGU6OndyCiAgICAgcmV0dXJu
IG1fd3JhcHBlci5nZXQoKTsKIH0KIAotaW5saW5lIHZvaWQgU2NyaXB0V3JhcHBhYmxlOjpzZXRX
cmFwcGVyKEpTQzo6SlNHbG9iYWxEYXRhJiwgSlNET01XcmFwcGVyKiB3cmFwcGVyLCBKU0M6Oldl
YWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyLCB2b2lkKiBjb250ZXh0KQoraW5saW5lIHZvaWQg
U2NyaXB0V3JhcHBhYmxlOjpzZXRXcmFwcGVyKEpTQzo6Vk0mLCBKU0RPTVdyYXBwZXIqIHdyYXBw
ZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIsIHZvaWQqIGNvbnRleHQpCiB7
CiAgICAgQVNTRVJUKCFtX3dyYXBwZXIpOwogICAgIG1fd3JhcHBlciA9IEpTQzo6UGFzc1dlYWs8
SlNET01XcmFwcGVyPih3cmFwcGVyLCB3cmFwcGVyT3duZXIsIGNvbnRleHQpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
Y3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgzLDE0ICsxMzgzLDE0
IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVHJ1ZVRhZzoKICAgICAgICAgICAgIHJldHVybiBq
c0Jvb2xlYW4odHJ1ZSk7CiAgICAgICAgIGNhc2UgRmFsc2VPYmplY3RUYWc6IHsKLSAgICAgICAg
ICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZShtX2V4ZWMtPmds
b2JhbERhdGEoKSwgbV9nbG9iYWxPYmplY3QtPmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7Ci0g
ICAgICAgICAgICBvYmotPnNldEludGVybmFsVmFsdWUobV9leGVjLT5nbG9iYWxEYXRhKCksIGpz
Qm9vbGVhbihmYWxzZSkpOworICAgICAgICAgICAgQm9vbGVhbk9iamVjdCogb2JqID0gQm9vbGVh
bk9iamVjdDo6Y3JlYXRlKG1fZXhlYy0+dm0oKSwgbV9nbG9iYWxPYmplY3QtPmJvb2xlYW5PYmpl
Y3RTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBvYmotPnNldEludGVybmFsVmFsdWUobV9leGVj
LT52bSgpLCBqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5k
KG9iaik7CiAgICAgICAgICAgICByZXR1cm4gb2JqOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
VHJ1ZU9iamVjdFRhZzogewotICAgICAgICAgICAgQm9vbGVhbk9iamVjdCogb2JqID0gQm9vbGVh
bk9iamVjdDo6Y3JlYXRlKG1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2dsb2JhbE9iamVjdC0+Ym9v
bGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1
ZShtX2V4ZWMtPmdsb2JhbERhdGEoKSwganNCb29sZWFuKHRydWUpKTsKKyAgICAgICAgICAgIEJv
b2xlYW5PYmplY3QqIG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZShtX2V4ZWMtPnZtKCksIG1f
Z2xvYmFsT2JqZWN0LT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOworICAgICAgICAgICAgb2Jq
LT5zZXRJbnRlcm5hbFZhbHVlKG1fZXhlYy0+dm0oKSwganNCb29sZWFuKHRydWUpKTsKICAgICAg
ICAgICAgICBtX2djQnVmZmVyLmFwcGVuZChvYmopOwogICAgICAgICAgICAgcmV0dXJuIG9iajsK
ICAgICAgICAgfQpAQCAtMTQ4Miw3ICsxNDgyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJl
dHVybiBjYWNoZWRTdHJpbmctPmpzU3RyaW5nKG1fZXhlYyk7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBFbXB0eVN0cmluZ1RhZzoKLSAgICAgICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKCZt
X2V4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZygm
bV9leGVjLT52bSgpKTsKICAgICAgICAgY2FzZSBTdHJpbmdPYmplY3RUYWc6IHsKICAgICAgICAg
ICAgIENhY2hlZFN0cmluZ1JlZiBjYWNoZWRTdHJpbmc7CiAgICAgICAgICAgICBpZiAoIXJlYWRT
dHJpbmdEYXRhKGNhY2hlZFN0cmluZykpCkBAIC0xNDkyLDcgKzE0OTIsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgcmV0dXJuIG9iajsKICAgICAgICAgfQogICAgICAgICBjYXNlIEVtcHR5U3Ry
aW5nT2JqZWN0VGFnOiB7Ci0gICAgICAgICAgICBTdHJpbmdPYmplY3QqIG9iaiA9IGNvbnN0cnVj
dFN0cmluZyhtX2V4ZWMsIG1fZ2xvYmFsT2JqZWN0LCBqc0VtcHR5U3RyaW5nKCZtX2V4ZWMtPmds
b2JhbERhdGEoKSkpOworICAgICAgICAgICAgU3RyaW5nT2JqZWN0KiBvYmogPSBjb25zdHJ1Y3RT
dHJpbmcobV9leGVjLCBtX2dsb2JhbE9iamVjdCwganNFbXB0eVN0cmluZygmbV9leGVjLT52bSgp
KSk7CiAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZChvYmopOwogICAgICAgICAgICAgcmV0
dXJuIG9iajsKICAgICAgICAgfQpAQCAtMTUwNSw3ICsxNTA1LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICAgICAgUmVnRXhwRmxhZ3MgcmVG
bGFncyA9IHJlZ0V4cEZsYWdzKGZsYWdzLT5zdHJpbmcoKSk7CiAgICAgICAgICAgICBBU1NFUlQo
cmVGbGFncyAhPSBJbnZhbGlkRmxhZ3MpOwotICAgICAgICAgICAgUmVnRXhwKiByZWdFeHAgPSBS
ZWdFeHA6OmNyZWF0ZShtX2V4ZWMtPmdsb2JhbERhdGEoKSwgcGF0dGVybi0+c3RyaW5nKCksIHJl
RmxhZ3MpOworICAgICAgICAgICAgUmVnRXhwKiByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShtX2V4
ZWMtPnZtKCksIHBhdHRlcm4tPnN0cmluZygpLCByZUZsYWdzKTsKICAgICAgICAgICAgIHJldHVy
biBSZWdFeHBPYmplY3Q6OmNyZWF0ZShtX2V4ZWMsIG1fZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLCBtX2dsb2JhbE9iamVjdC0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCk7IAogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgT2JqZWN0UmVmZXJlbmNlVGFnOiB7CkBAIC0xODQ5LDcgKzE4NDks
NyBAQCBKU1ZhbHVlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpCiBTY3JpcHRWYWx1
ZSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplRm9ySW5zcGVjdG9yKFNjcmlwdFN0
YXRlKiBzY3JpcHRTdGF0ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gZGVzZXJpYWxpemUoc2Ny
aXB0U3RhdGUsIHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIDApOwotICAgIHJl
dHVybiBTY3JpcHRWYWx1ZShzY3JpcHRTdGF0ZS0+Z2xvYmFsRGF0YSgpLCB2YWx1ZSk7CisgICAg
cmV0dXJuIFNjcmlwdFZhbHVlKHNjcmlwdFN0YXRlLT52bSgpLCB2YWx1ZSk7CiB9CiAjZW5kaWYK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVu
dERhdGEuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
V2ViQ29yZUpTQ2xpZW50RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksMTAgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBXZWJDb3JlSlNDbGllbnREYXRhIDogcHVi
bGljIEpTQzo6SlNHbG9iYWxEYXRhOjpDbGllbnREYXRhIHsKK2NsYXNzIFdlYkNvcmVKU0NsaWVu
dERhdGEgOiBwdWJsaWMgSlNDOjpWTTo6Q2xpZW50RGF0YSB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoV2ViQ29yZUpTQ2xpZW50RGF0YSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAg
IGZyaWVuZCBjbGFzcyBKU0dsb2JhbERhdGFXb3JsZEl0ZXJhdG9yOwotICAgIGZyaWVuZCB2b2lk
IGluaXROb3JtYWxXb3JsZENsaWVudERhdGEoSlNDOjpKU0dsb2JhbERhdGEqKTsKKyAgICBmcmll
bmQgY2xhc3MgVk1Xb3JsZEl0ZXJhdG9yOworICAgIGZyaWVuZCB2b2lkIGluaXROb3JtYWxXb3Js
ZENsaWVudERhdGEoSlNDOjpWTSopOwogCiBwdWJsaWM6CiAgICAgV2ViQ29yZUpTQ2xpZW50RGF0
YSgpIHsgfQpAQCAtNzAsMTEgKzcwLDExIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPERPTVdyYXBw
ZXJXb3JsZD4gbV9ub3JtYWxXb3JsZDsKIH07CiAKLWlubGluZSB2b2lkIGluaXROb3JtYWxXb3Js
ZENsaWVudERhdGEoSlNDOjpKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitpbmxpbmUgdm9pZCBp
bml0Tm9ybWFsV29ybGRDbGllbnREYXRhKEpTQzo6Vk0qIHZtKQogewogICAgIFdlYkNvcmVKU0Ns
aWVudERhdGEqIHdlYkNvcmVKU0NsaWVudERhdGEgPSBuZXcgV2ViQ29yZUpTQ2xpZW50RGF0YTsK
LSAgICBnbG9iYWxEYXRhLT5jbGllbnREYXRhID0gd2ViQ29yZUpTQ2xpZW50RGF0YTsgLy8gfkpT
R2xvYmFsRGF0YSBkZWxldGVzIHRoaXMgcG9pbnRlci4KLSAgICB3ZWJDb3JlSlNDbGllbnREYXRh
LT5tX25vcm1hbFdvcmxkID0gRE9NV3JhcHBlcldvcmxkOjpjcmVhdGUoZ2xvYmFsRGF0YSwgdHJ1
ZSk7CisgICAgdm0tPmNsaWVudERhdGEgPSB3ZWJDb3JlSlNDbGllbnREYXRhOyAvLyB+Vk0gZGVs
ZXRlcyB0aGlzIHBvaW50ZXIuCisgICAgd2ViQ29yZUpTQ2xpZW50RGF0YS0+bV9ub3JtYWxXb3Js
ZCA9IERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKHZtLCB0cnVlKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0
Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
V29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Niw1NSArNTYsNTUgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6V29ya2VyU2NyaXB0Q29udHJvbGxl
cihXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0KQotICAgIDogbV9nbG9iYWxEYXRhKEpTR2xv
YmFsRGF0YTo6Y3JlYXRlKCkpCisgICAgOiBtX3ZtKFZNOjpjcmVhdGUoKSkKICAgICAsIG1fd29y
a2VyQ29udGV4dCh3b3JrZXJDb250ZXh0KQotICAgICwgbV93b3JrZXJDb250ZXh0V3JhcHBlcigq
bV9nbG9iYWxEYXRhKQorICAgICwgbV93b3JrZXJDb250ZXh0V3JhcHBlcigqbV92bSkKICAgICAs
IG1fZXhlY3V0aW9uRm9yYmlkZGVuKGZhbHNlKQogewotICAgIGluaXROb3JtYWxXb3JsZENsaWVu
dERhdGEobV9nbG9iYWxEYXRhLmdldCgpKTsKKyAgICBpbml0Tm9ybWFsV29ybGRDbGllbnREYXRh
KG1fdm0uZ2V0KCkpOwogfQogCiBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjp+V29ya2VyU2NyaXB0
Q29udHJvbGxlcigpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsRGF0YSgpKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayh2bSgpKTsKICAgICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLmNs
ZWFyKCk7Ci0gICAgbV9nbG9iYWxEYXRhLmNsZWFyKCk7CisgICAgbV92bS5jbGVhcigpOwogfQog
CiB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmluaXRTY3JpcHQoKQogewogICAgIEFTU0VS
VCghbV93b3JrZXJDb250ZXh0V3JhcHBlcik7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2ds
b2JhbERhdGEuZ2V0KCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fdm0uZ2V0KCkpOwogCiAg
ICAgLy8gRXhwbGljaXRseSBwcm90ZWN0IHRoZSBnbG9iYWwgb2JqZWN0J3MgcHJvdG90eXBlIHNv
IGl0IGlzbid0IGNvbGxlY3RlZAogICAgIC8vIHdoZW4gd2UgYWxsb2NhdGUgdGhlIGdsb2JhbCBv
YmplY3QuIChPbmNlIHRoZSBnbG9iYWwgb2JqZWN0IGlzIGZ1bGx5CiAgICAgLy8gY29uc3RydWN0
ZWQsIGl0IGNhbiBtYXJrIGl0cyBvd24gcHJvdG90eXBlLikKLSAgICBTdHJ1Y3R1cmUqIHdvcmtl
ckNvbnRleHRQcm90b3R5cGVTdHJ1Y3R1cmUgPSBKU1dvcmtlckNvbnRleHRQcm90b3R5cGU6OmNy
ZWF0ZVN0cnVjdHVyZSgqbV9nbG9iYWxEYXRhLCAwLCBqc051bGwoKSk7Ci0gICAgU3Ryb25nPEpT
V29ya2VyQ29udGV4dFByb3RvdHlwZT4gd29ya2VyQ29udGV4dFByb3RvdHlwZSgqbV9nbG9iYWxE
YXRhLCBKU1dvcmtlckNvbnRleHRQcm90b3R5cGU6OmNyZWF0ZSgqbV9nbG9iYWxEYXRhLCAwLCB3
b3JrZXJDb250ZXh0UHJvdG90eXBlU3RydWN0dXJlKSk7CisgICAgU3RydWN0dXJlKiB3b3JrZXJD
b250ZXh0UHJvdG90eXBlU3RydWN0dXJlID0gSlNXb3JrZXJDb250ZXh0UHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUoKm1fdm0sIDAsIGpzTnVsbCgpKTsKKyAgICBTdHJvbmc8SlNXb3JrZXJDb250
ZXh0UHJvdG90eXBlPiB3b3JrZXJDb250ZXh0UHJvdG90eXBlKCptX3ZtLCBKU1dvcmtlckNvbnRl
eHRQcm90b3R5cGU6OmNyZWF0ZSgqbV92bSwgMCwgd29ya2VyQ29udGV4dFByb3RvdHlwZVN0cnVj
dHVyZSkpOwogCiAgICAgaWYgKG1fd29ya2VyQ29udGV4dC0+aXNEZWRpY2F0ZWRXb3JrZXJDb250
ZXh0KCkpIHsKLSAgICAgICAgU3RydWN0dXJlKiBkZWRpY2F0ZWRDb250ZXh0UHJvdG90eXBlU3Ry
dWN0dXJlID0gSlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1
cmUoKm1fZ2xvYmFsRGF0YSwgMCwgd29ya2VyQ29udGV4dFByb3RvdHlwZS5nZXQoKSk7Ci0gICAg
ICAgIFN0cm9uZzxKU0RlZGljYXRlZFdvcmtlckNvbnRleHRQcm90b3R5cGU+IGRlZGljYXRlZENv
bnRleHRQcm90b3R5cGUoKm1fZ2xvYmFsRGF0YSwgSlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0UHJv
dG90eXBlOjpjcmVhdGUoKm1fZ2xvYmFsRGF0YSwgMCwgZGVkaWNhdGVkQ29udGV4dFByb3RvdHlw
ZVN0cnVjdHVyZSkpOwotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTRGVkaWNhdGVk
V29ya2VyQ29udGV4dDo6Y3JlYXRlU3RydWN0dXJlKCptX2dsb2JhbERhdGEsIDAsIGRlZGljYXRl
ZENvbnRleHRQcm90b3R5cGUuZ2V0KCkpOwotCi0gICAgICAgIG1fd29ya2VyQ29udGV4dFdyYXBw
ZXIuc2V0KCptX2dsb2JhbERhdGEsIEpTRGVkaWNhdGVkV29ya2VyQ29udGV4dDo6Y3JlYXRlKCpt
X2dsb2JhbERhdGEsIHN0cnVjdHVyZSwgc3RhdGljX2Nhc3Q8RGVkaWNhdGVkV29ya2VyQ29udGV4
dCo+KG1fd29ya2VyQ29udGV4dCkpKTsKLSAgICAgICAgd29ya2VyQ29udGV4dFByb3RvdHlwZVN0
cnVjdHVyZS0+c2V0R2xvYmFsT2JqZWN0KCptX2dsb2JhbERhdGEsIG1fd29ya2VyQ29udGV4dFdy
YXBwZXIuZ2V0KCkpOwotICAgICAgICBkZWRpY2F0ZWRDb250ZXh0UHJvdG90eXBlU3RydWN0dXJl
LT5zZXRHbG9iYWxPYmplY3QoKm1fZ2xvYmFsRGF0YSwgbV93b3JrZXJDb250ZXh0V3JhcHBlci5n
ZXQoKSk7CisgICAgICAgIFN0cnVjdHVyZSogZGVkaWNhdGVkQ29udGV4dFByb3RvdHlwZVN0cnVj
dHVyZSA9IEpTRGVkaWNhdGVkV29ya2VyQ29udGV4dFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJl
KCptX3ZtLCAwLCB3b3JrZXJDb250ZXh0UHJvdG90eXBlLmdldCgpKTsKKyAgICAgICAgU3Ryb25n
PEpTRGVkaWNhdGVkV29ya2VyQ29udGV4dFByb3RvdHlwZT4gZGVkaWNhdGVkQ29udGV4dFByb3Rv
dHlwZSgqbV92bSwgSlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0UHJvdG90eXBlOjpjcmVhdGUoKm1f
dm0sIDAsIGRlZGljYXRlZENvbnRleHRQcm90b3R5cGVTdHJ1Y3R1cmUpKTsKKyAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBKU0RlZGljYXRlZFdvcmtlckNvbnRleHQ6OmNyZWF0ZVN0cnVj
dHVyZSgqbV92bSwgMCwgZGVkaWNhdGVkQ29udGV4dFByb3RvdHlwZS5nZXQoKSk7CisKKyAgICAg
ICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci5zZXQoKm1fdm0sIEpTRGVkaWNhdGVkV29ya2VyQ29u
dGV4dDo6Y3JlYXRlKCptX3ZtLCBzdHJ1Y3R1cmUsIHN0YXRpY19jYXN0PERlZGljYXRlZFdvcmtl
ckNvbnRleHQqPihtX3dvcmtlckNvbnRleHQpKSk7CisgICAgICAgIHdvcmtlckNvbnRleHRQcm90
b3R5cGVTdHJ1Y3R1cmUtPnNldEdsb2JhbE9iamVjdCgqbV92bSwgbV93b3JrZXJDb250ZXh0V3Jh
cHBlci5nZXQoKSk7CisgICAgICAgIGRlZGljYXRlZENvbnRleHRQcm90b3R5cGVTdHJ1Y3R1cmUt
PnNldEdsb2JhbE9iamVjdCgqbV92bSwgbV93b3JrZXJDb250ZXh0V3JhcHBlci5nZXQoKSk7CiAg
ICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpID09IG1fd29ya2VyQ29udGV4
dFdyYXBwZXIpOwogICAgICAgICBBU1NFUlQobV93b3JrZXJDb250ZXh0V3JhcHBlci0+c3RydWN0
dXJlKCktPmdsb2JhbE9iamVjdCgpID09IG1fd29ya2VyQ29udGV4dFdyYXBwZXIpOwotICAgICAg
ICB3b3JrZXJDb250ZXh0UHJvdG90eXBlLT5zdHJ1Y3R1cmUoKS0+c2V0R2xvYmFsT2JqZWN0KCpt
X2dsb2JhbERhdGEsIG1fd29ya2VyQ29udGV4dFdyYXBwZXIuZ2V0KCkpOwotICAgICAgICBkZWRp
Y2F0ZWRDb250ZXh0UHJvdG90eXBlLT5zdHJ1Y3R1cmUoKS0+c2V0R2xvYmFsT2JqZWN0KCptX2ds
b2JhbERhdGEsIG1fd29ya2VyQ29udGV4dFdyYXBwZXIuZ2V0KCkpOworICAgICAgICB3b3JrZXJD
b250ZXh0UHJvdG90eXBlLT5zdHJ1Y3R1cmUoKS0+c2V0R2xvYmFsT2JqZWN0KCptX3ZtLCBtX3dv
cmtlckNvbnRleHRXcmFwcGVyLmdldCgpKTsKKyAgICAgICAgZGVkaWNhdGVkQ29udGV4dFByb3Rv
dHlwZS0+c3RydWN0dXJlKCktPnNldEdsb2JhbE9iamVjdCgqbV92bSwgbV93b3JrZXJDb250ZXh0
V3JhcHBlci5nZXQoKSk7CiAjaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQogICAgIH0gZWxzZSB7
CiAgICAgICAgIEFTU0VSVChtX3dvcmtlckNvbnRleHQtPmlzU2hhcmVkV29ya2VyQ29udGV4dCgp
KTsKLSAgICAgICAgU3RydWN0dXJlKiBzaGFyZWRDb250ZXh0UHJvdG90eXBlU3RydWN0dXJlID0g
SlNTaGFyZWRXb3JrZXJDb250ZXh0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoKm1fZ2xvYmFs
RGF0YSwgMCwgd29ya2VyQ29udGV4dFByb3RvdHlwZS5nZXQoKSk7Ci0gICAgICAgIFN0cm9uZzxK
U1NoYXJlZFdvcmtlckNvbnRleHRQcm90b3R5cGU+IHNoYXJlZENvbnRleHRQcm90b3R5cGUoKm1f
Z2xvYmFsRGF0YSwgSlNTaGFyZWRXb3JrZXJDb250ZXh0UHJvdG90eXBlOjpjcmVhdGUoKm1fZ2xv
YmFsRGF0YSwgMCwgc2hhcmVkQ29udGV4dFByb3RvdHlwZVN0cnVjdHVyZSkpOwotICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTU2hhcmVkV29ya2VyQ29udGV4dDo6Y3JlYXRlU3RydWN0
dXJlKCptX2dsb2JhbERhdGEsIDAsIHNoYXJlZENvbnRleHRQcm90b3R5cGUuZ2V0KCkpOwotCi0g
ICAgICAgIG1fd29ya2VyQ29udGV4dFdyYXBwZXIuc2V0KCptX2dsb2JhbERhdGEsIEpTU2hhcmVk
V29ya2VyQ29udGV4dDo6Y3JlYXRlKCptX2dsb2JhbERhdGEsIHN0cnVjdHVyZSwgc3RhdGljX2Nh
c3Q8U2hhcmVkV29ya2VyQ29udGV4dCo+KG1fd29ya2VyQ29udGV4dCkpKTsKLSAgICAgICAgd29y
a2VyQ29udGV4dFByb3RvdHlwZS0+c3RydWN0dXJlKCktPnNldEdsb2JhbE9iamVjdCgqbV9nbG9i
YWxEYXRhLCBtX3dvcmtlckNvbnRleHRXcmFwcGVyLmdldCgpKTsKLSAgICAgICAgc2hhcmVkQ29u
dGV4dFByb3RvdHlwZS0+c3RydWN0dXJlKCktPnNldEdsb2JhbE9iamVjdCgqbV9nbG9iYWxEYXRh
LCBtX3dvcmtlckNvbnRleHRXcmFwcGVyLmdldCgpKTsKKyAgICAgICAgU3RydWN0dXJlKiBzaGFy
ZWRDb250ZXh0UHJvdG90eXBlU3RydWN0dXJlID0gSlNTaGFyZWRXb3JrZXJDb250ZXh0UHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoKm1fdm0sIDAsIHdvcmtlckNvbnRleHRQcm90b3R5cGUuZ2V0
KCkpOworICAgICAgICBTdHJvbmc8SlNTaGFyZWRXb3JrZXJDb250ZXh0UHJvdG90eXBlPiBzaGFy
ZWRDb250ZXh0UHJvdG90eXBlKCptX3ZtLCBKU1NoYXJlZFdvcmtlckNvbnRleHRQcm90b3R5cGU6
OmNyZWF0ZSgqbV92bSwgMCwgc2hhcmVkQ29udGV4dFByb3RvdHlwZVN0cnVjdHVyZSkpOworICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTU2hhcmVkV29ya2VyQ29udGV4dDo6Y3JlYXRl
U3RydWN0dXJlKCptX3ZtLCAwLCBzaGFyZWRDb250ZXh0UHJvdG90eXBlLmdldCgpKTsKKworICAg
ICAgICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLnNldCgqbV92bSwgSlNTaGFyZWRXb3JrZXJDb250
ZXh0OjpjcmVhdGUoKm1fdm0sIHN0cnVjdHVyZSwgc3RhdGljX2Nhc3Q8U2hhcmVkV29ya2VyQ29u
dGV4dCo+KG1fd29ya2VyQ29udGV4dCkpKTsKKyAgICAgICAgd29ya2VyQ29udGV4dFByb3RvdHlw
ZS0+c3RydWN0dXJlKCktPnNldEdsb2JhbE9iamVjdCgqbV92bSwgbV93b3JrZXJDb250ZXh0V3Jh
cHBlci5nZXQoKSk7CisgICAgICAgIHNoYXJlZENvbnRleHRQcm90b3R5cGUtPnN0cnVjdHVyZSgp
LT5zZXRHbG9iYWxPYmplY3QoKm1fdm0sIG1fd29ya2VyQ29udGV4dFdyYXBwZXIuZ2V0KCkpOwog
I2VuZGlmCiAgICAgfQogICAgIEFTU0VSVChtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5nbG9iYWxP
YmplY3QoKSA9PSBtX3dvcmtlckNvbnRleHRXcmFwcGVyKTsKQEAgLTExOSw3ICsxMTksNyBAQCB2
b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvCiAgICAgU2NyaXB0VmFsdWUg
ZXhjZXB0aW9uOwogICAgIGV2YWx1YXRlKHNvdXJjZUNvZGUsICZleGNlcHRpb24pOwogICAgIGlm
IChleGNlcHRpb24uanNWYWx1ZSgpKSB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2Jh
bERhdGEoKSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKCkpOwogICAgICAgICByZXBv
cnRFeGNlcHRpb24obV93b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xvYmFsRXhlYygpLCBleGNlcHRp
b24uanNWYWx1ZSgpKTsKICAgICB9CiB9CkBAIC0xMzcsNyArMTM3LDcgQEAgdm9pZCBXb3JrZXJT
Y3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjbwogICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2Vw
dGlvbjsKICAgICBKU0M6OmV2YWx1YXRlKGV4ZWMsIHNvdXJjZUNvZGUuanNTb3VyY2VDb2RlKCks
IG1fd29ya2VyQ29udGV4dFdyYXBwZXIuZ2V0KCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKIAot
ICAgIGlmICgoZXZhbHVhdGlvbkV4Y2VwdGlvbiAmJiBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNl
cHRpb24oZXZhbHVhdGlvbkV4Y2VwdGlvbikpIHx8ICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5n
bG9iYWxEYXRhKCkud2F0Y2hkb2cuZGlkRmlyZSgpKSB7CisgICAgaWYgKChldmFsdWF0aW9uRXhj
ZXB0aW9uICYmIGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihldmFsdWF0aW9uRXhjZXB0
aW9uKSkgfHwgIG1fd29ya2VyQ29udGV4dFdyYXBwZXItPnZtKCkud2F0Y2hkb2cuZGlkRmlyZSgp
KSB7CiAgICAgICAgIGZvcmJpZEV4ZWN1dGlvbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMTQ3LDkgKzE0Nyw5IEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUo
Y28KICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSAwOwogICAgICAgICBTdHJpbmcgc291cmNlVVJM
ID0gc291cmNlQ29kZS51cmwoKS5zdHJpbmcoKTsKICAgICAgICAgaWYgKG1fd29ya2VyQ29udGV4
dC0+c2FuaXRpemVTY3JpcHRFcnJvcihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVS
TCwgc291cmNlQ29kZS5jYWNoZWRTY3JpcHQoKSkpCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0g
U2NyaXB0VmFsdWUoKm1fZ2xvYmFsRGF0YSwgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVFcnJvcihl
eGVjLCBlcnJvck1lc3NhZ2UuaW1wbCgpKSkpOworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IFNj
cmlwdFZhbHVlKCptX3ZtLCB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGVycm9y
TWVzc2FnZS5pbXBsKCkpKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICpleGNlcHRpb24g
PSBTY3JpcHRWYWx1ZSgqbV9nbG9iYWxEYXRhLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICAg
ICAgICAgICpleGNlcHRpb24gPSBTY3JpcHRWYWx1ZSgqbV92bSwgZXZhbHVhdGlvbkV4Y2VwdGlv
bik7CiAgICAgfQogfQogCkBAIC0xNjQsMTQgKzE2NCwxNCBAQCB2b2lkIFdvcmtlclNjcmlwdENv
bnRyb2xsZXI6OnNjaGVkdWxlRXhlCiAgICAgLy8gdGVybWluYXRpb24gaXMgc2NoZWR1bGVkLCBp
c0V4ZWN1dGlvblRlcm1pbmF0aW5nIHdpbGwKICAgICAvLyBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhh
dCBzdGF0ZSB3aGVuIGNhbGxlZCBmcm9tIGFub3RoZXIgdGhyZWFkLgogICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX3NjaGVkdWxlZFRlcm1pbmF0aW9uTXV0ZXgpOwotICAgIG1fZ2xvYmFsRGF0YS0+
d2F0Y2hkb2cuZmlyZSgpOworICAgIG1fdm0tPndhdGNoZG9nLmZpcmUoKTsKIH0KIAogYm9vbCBX
b3JrZXJTY3JpcHRDb250cm9sbGVyOjppc0V4ZWN1dGlvblRlcm1pbmF0aW5nKCkgY29uc3QKIHsK
ICAgICAvLyBTZWUgY29tbWVudHMgaW4gc2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbiByZWdh
cmRpbmcgbXV0ZXggdXNhZ2UuCiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc2NoZWR1bGVkVGVy
bWluYXRpb25NdXRleCk7Ci0gICAgcmV0dXJuIG1fZ2xvYmFsRGF0YS0+d2F0Y2hkb2cuZGlkRmly
ZSgpOworICAgIHJldHVybiBtX3ZtLT53YXRjaGRvZy5kaWRGaXJlKCk7CiB9CiAKIHZvaWQgV29y
a2VyU2NyaXB0Q29udHJvbGxlcjo6Zm9yYmlkRXhlY3V0aW9uKCkKQEAgLTE4OSw3ICsxODksNyBA
QCBib29sIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmlzRXhlY3V0aW9uCiB2b2lkIFdvcmtlclNj
cmlwdENvbnRyb2xsZXI6OmRpc2FibGVFdmFsKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQog
ewogICAgIGluaXRTY3JpcHRJZk5lZWRlZCgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2Jh
bERhdGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0oKSk7CiAKICAgICBtX3dvcmtlckNv
bnRleHRXcmFwcGVyLT5zZXRFdmFsRW5hYmxlZChmYWxzZSwgZXJyb3JNZXNzYWdlKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250
cm9sbGVyLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBA
QAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7Ci0gICAgY2xh
c3MgSlNHbG9iYWxEYXRhOworICAgIGNsYXNzIFZNOwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC03Nyw3ICs3Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIGRp
c2FibGVFdmFsKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKIAotICAgICAgICBKU0M6OkpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpIHsgcmV0dXJuIG1fZ2xvYmFsRGF0YS5nZXQoKTsgfQor
ICAgICAgICBKU0M6OlZNKiB2bSgpIHsgcmV0dXJuIG1fdm0uZ2V0KCk7IH0KIAogICAgICAgICB2
b2lkIGF0dGFjaERlYnVnZ2VyKEpTQzo6RGVidWdnZXIqKTsKICAgICAgICAgdm9pZCBkZXRhY2hE
ZWJ1Z2dlcihKU0M6OkRlYnVnZ2VyKik7CkBAIC05MCw3ICs5MCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgfQogICAgICAgICB2b2lkIGluaXRTY3JpcHQoKTsKIAotICAgICAgICBS
ZWZQdHI8SlNDOjpKU0dsb2JhbERhdGE+IG1fZ2xvYmFsRGF0YTsKKyAgICAgICAgUmVmUHRyPEpT
Qzo6Vk0+IG1fdm07CiAgICAgICAgIFdvcmtlckNvbnRleHQqIG1fd29ya2VyQ29udGV4dDsKICAg
ICAgICAgSlNDOjpTdHJvbmc8SlNXb3JrZXJDb250ZXh0PiBtX3dvcmtlckNvbnRleHRXcmFwcGVy
OwogICAgICAgICBib29sIG1fZXhlY3V0aW9uRm9yYmlkZGVuOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmNwcAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2Ny
aXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxNCArNjgsMTQgQEAgdm9p
ZCBXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlcjo6d2lsbEV4ZWN1dAogCiB2b2lkIFdvcmtlclNjcmlw
dERlYnVnU2VydmVyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhUaW1lcjxTY3JpcHREZWJ1Z1Nl
cnZlcj4qKQogewotICAgIEpTQzo6SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gbV93b3JrZXJD
b250ZXh0LT5zY3JpcHQoKS0+Z2xvYmFsRGF0YSgpOworICAgIEpTQzo6Vk0qIHZtID0gbV93b3Jr
ZXJDb250ZXh0LT5zY3JpcHQoKS0+dm0oKTsKIAotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2so
Z2xvYmFsRGF0YSk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgLy8gSWYg
SmF2YVNjcmlwdCBzdGFjayBpcyBub3QgZW1wdHkgcG9zdHBvbmUgcmVjb21waWxhdGlvbi4KLSAg
ICBpZiAoZ2xvYmFsRGF0YS0+ZHluYW1pY0dsb2JhbE9iamVjdCkKKyAgICBpZiAodm0tPmR5bmFt
aWNHbG9iYWxPYmplY3QpCiAgICAgICAgIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpOwog
ICAgIGVsc2UKLSAgICAgICAgSlNDOjpEZWJ1Z2dlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMo
Z2xvYmFsRGF0YSk7CisgICAgICAgIEpTQzo6RGVidWdnZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rp
b25zKHZtKTsKIH0KIAogdm9pZCBXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlzdGVu
ZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkocmV2aXNpb24gMTQ4NjU1KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHdvcmtp
bmcgY29weSkKQEAgLTUzMiw3ICs1MzIsNyBAQCArIChpZClfY29udmVydFZhbHVlVG9PYmpjVmFs
dWU6KEpTQzo6SlNWCiB7CiAgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgSlNP
YmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxv
Y2socm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEpT
TG9ja0hvbGRlciBsb2NrKHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT52bSgpKTsKIAogICAg
ICAgICBpZiAob2JqZWN0LT5pbmhlcml0cygmSlNIVE1MRWxlbWVudDo6c19pbmZvKSkgewogICAg
ICAgICAgICAgLy8gUGx1Z2luIGVsZW1lbnRzIGNhY2hlIHRoZSBpbnN0YW5jZSBpbnRlcm5hbGx5
LgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0JKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC03MzMsMTkgKzcz
MywxOSBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHVi
bGljOlxuIik7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB0eXBlZGVmICRwYXJlbnRD
bGFzc05hbWUgQmFzZTtcbiIpOwogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93
IikgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyAkY2xhc3NOYW1l
KiBjcmVhdGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFBhc3NSZWZQdHI8JGltcGxUeXBlPiBpbXBsLCBKU0RPTVdpbmRvd1NoZWxsKiB3
aW5kb3dTaGVsbClcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRp
YyAkY2xhc3NOYW1lKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFBhc3NSZWZQdHI8JGltcGxUeXBlPiBpbXBsLCBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dT
aGVsbClcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHtcbiIpOwotICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICAkY2xhc3NOYW1lKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPCRjbGFzc05hbWU+KGdsb2JhbERhdGEuaGVhcCkp
ICR7Y2xhc3NOYW1lfShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGltcGwsIHdpbmRvd1NoZWxsKTtc
biIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICBwdHItPmZpbmlzaENy
ZWF0aW9uKGdsb2JhbERhdGEsIHdpbmRvd1NoZWxsKTtcbiIpOwotICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgICAgICBnbG9iYWxEYXRhLmhlYXAuYWRkRmluYWxpemVyKHB0ciwgZGVz
dHJveSk7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgJGNsYXNz
TmFtZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDwkY2xhc3NOYW1lPih2
bS5oZWFwKSkgJHtjbGFzc05hbWV9KHZtLCBzdHJ1Y3R1cmUsIGltcGwsIHdpbmRvd1NoZWxsKTtc
biIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICBwdHItPmZpbmlzaENy
ZWF0aW9uKHZtLCB3aW5kb3dTaGVsbCk7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICAgICAgdm0uaGVhcC5hZGRGaW5hbGl6ZXIocHRyLCBkZXN0cm95KTtcbiIpOwogICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICByZXR1cm4gcHRyO1xuIik7CiAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgfVxuXG4iKTsKICAgICB9IGVsc2lmICgkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSXNXb3JrZXJDb250ZXh0In0pIHsKLSAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgJGNsYXNzTmFtZSogY3JlYXRlKEpT
Qzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBQ
YXNzUmVmUHRyPCRpbXBsVHlwZT4gaW1wbClcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgIHN0YXRpYyAkY2xhc3NOYW1lKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8JGltcGxUeXBlPiBpbXBsKVxuIik7CiAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAge1xuIik7Ci0gICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgICAgICRjbGFzc05hbWUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjph
bGxvY2F0ZUNlbGw8JGNsYXNzTmFtZT4oZ2xvYmFsRGF0YS5oZWFwKSkgJHtjbGFzc05hbWV9KGds
b2JhbERhdGEsIHN0cnVjdHVyZSwgaW1wbCk7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTtcbiIpOwotICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICBnbG9iYWxEYXRhLmhlYXAuYWRkRmlu
YWxpemVyKHB0ciwgZGVzdHJveSk7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICAgICAgJGNsYXNzTmFtZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDwkY2xhc3NOYW1lPih2bS5oZWFwKSkgJHtjbGFzc05hbWV9KHZtLCBzdHJ1Y3R1cmUsIGltcGwp
O1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24odm0pO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAg
IHZtLmhlYXAuYWRkRmluYWxpemVyKHB0ciwgZGVzdHJveSk7XG4iKTsKICAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHB0cjtcbiIpOwogICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIH1cblxuIik7CiAgICAgfSBlbHNpZiAoJGludGVyZmFjZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57Ik1hc3F1ZXJhZGVzQXNVbmRlZmluZWQifSkgewpAQCAtNzUzLDE2
ICs3NTMsMTYgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgc3RhdGljICRjbGFzc05hbWUqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPCRpbXBsVHlw
ZT4gaW1wbClcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHtcbiIpOwog
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICBnbG9iYWxPYmplY3QtPm1hc3F1
ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPm5vdGlmeVdyaXRlKCk7XG4iKTsKLSAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgJGNsYXNzTmFtZSogcHRyID0gbmV3IChO
b3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDwkY2xhc3NOYW1lPihnbG9iYWxPYmplY3QtPmdsb2Jh
bERhdGEoKS5oZWFwKSkgJGNsYXNzTmFtZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7
XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7XG4iKTsKKyAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICAgICAgJGNsYXNzTmFtZSogcHRyID0gbmV3IChOb3ROdWxsLCBK
U0M6OmFsbG9jYXRlQ2VsbDwkY2xhc3NOYW1lPihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpICRj
bGFzc05hbWUoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpO1xuIik7CisgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2Jq
ZWN0LT52bSgpKTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICBy
ZXR1cm4gcHRyO1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgfVxuXG4i
KTsKICAgICB9IGVsc2UgewogICAgICAgICBBZGRJbmNsdWRlc0ZvclR5cGVJbkhlYWRlcigkaW1w
bFR5cGUpIHVubGVzcyAkc3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5cGU7CiAgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljICRjbGFzc05hbWUqIGNyZWF0ZShKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNz
UmVmUHRyPCRpbXBsVHlwZT4gaW1wbClcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIHtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICAkY2xh
c3NOYW1lKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPCRjbGFzc05hbWU+
KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLmhlYXApKSAkY2xhc3NOYW1lKHN0cnVjdHVyZSwg
Z2xvYmFsT2JqZWN0LCBpbXBsKTtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKTtc
biIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICAkY2xhc3NOYW1lKiBw
dHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPCRjbGFzc05hbWU+KGdsb2JhbE9i
amVjdC0+dm0oKS5oZWFwKSkgJGNsYXNzTmFtZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1w
bCk7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcHRyLT5maW5p
c2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpO1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgICAgIHJldHVybiBwdHI7XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICB9XG5cbiIpOwogICAgIH0KQEAgLTg0MywxMiArODQzLDEyIEBAIHN1YiBH
ZW5lcmF0ZUhlYWRlcgogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93Iikgewog
ICAgICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIn0gPSAx
OwogICAgIH0KLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpXG4i
KTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpXG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgIHtcbiIpOwogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IiB8
fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSXNXb3JrZXJDb250ZXh0In0pIHsK
LSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpHbG9iYWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pO1xu
Iik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Okdsb2JhbE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7XG4iKTsK
ICAgICB9IGVsc2UgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTtcbiIp
OwogICAgIH0KICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIH1cblxuIik7CiAKQEAgLTk3
OSwxMiArOTc5LDEyIEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICJwcm90ZWN0ZWQ6XG4iKTsKICAgICAjIENvbnN0cnVjdG9yCiAgICAgaWYgKCRpbnRlcmZh
Y2VOYW1lIGVxICJET01XaW5kb3ciKSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgJGNsYXNzTmFtZShKU0M6OkpTR2xvYmFsRGF0YSYsIEpTQzo6U3RydWN0dXJlKiwgUGFzc1Jl
ZlB0cjwkaW1wbFR5cGU+LCBKU0RPTVdpbmRvd1NoZWxsKik7XG4iKTsKKyAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSos
IFBhc3NSZWZQdHI8JGltcGxUeXBlPiwgSlNET01XaW5kb3dTaGVsbCopO1xuIik7CiAgICAgfSBl
bHNpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IklzV29ya2VyQ29udGV4dCJ9
KSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShKU0M6OkpT
R2xvYmFsRGF0YSYsIEpTQzo6U3RydWN0dXJlKiwgUGFzc1JlZlB0cjwkaW1wbFR5cGU+KTtcbiIp
OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRjbGFzc05hbWUoSlNDOjpWTSYs
IEpTQzo6U3RydWN0dXJlKiwgUGFzc1JlZlB0cjwkaW1wbFR5cGU+KTtcbiIpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShKU0M6OlN0
cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjwkaW1wbFR5cGU+KTtcbiIp
OwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
SlNDOjpKU0dsb2JhbERhdGEmKTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpO1xuIik7CiAgICAgfQogCiAgICAgIyBz
dHJ1Y3R1cmUgZmxhZ3MKQEAgLTEwNjMsNyArMTA2Myw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgog
ICAgIH0KICAgICBpZiAoISRoYXNQYXJlbnQgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCJ9KSB7CiAgICAgICAgIGlmICgkaW50ZXJm
YWNlTmFtZSBlcSAiTm9kZUZpbHRlciIpIHsKLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICJQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IHRvTm9kZUZpbHRlcihKU0M6OkpTR2xvYmFsRGF0
YSYsIEpTQzo6SlNWYWx1ZSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICJQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IHRvTm9kZUZpbHRlcihKU0M6OlZNJiwgSlNDOjpKU1Zh
bHVlKTtcbiIpOwogICAgICAgICB9IGVsc2lmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NU3RyaW5n
TGlzdCIpIHsKICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJQYXNzUmVmUHRyPERP
TVN0cmluZ0xpc3Q+IHRvRE9NU3RyaW5nTGlzdChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSk7XG4iKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTEwODUsMTAgKzEwODUsMTAgQEAgc3ViIEdl
bmVyYXRlSGVhZGVyCiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpT
Qzo6SlNPYmplY3QqIHNlbGYoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7
XG4iKTsKICAgICB9CiAKLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyAke2Ns
YXNzTmFtZX1Qcm90b3R5cGUqIGNyZWF0ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlKVxuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgJHtjbGFzc05h
bWV9UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSlcbiIpOwogICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAge1xuIik7Ci0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAg
ICAgJHtjbGFzc05hbWV9UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2Nh
dGVDZWxsPCR7Y2xhc3NOYW1lfVByb3RvdHlwZT4oZ2xvYmFsRGF0YS5oZWFwKSkgJHtjbGFzc05h
bWV9UHJvdG90eXBlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTtcbiIpOwot
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xv
YmFsRGF0YSk7XG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICAke2NsYXNz
TmFtZX1Qcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8JHtj
bGFzc05hbWV9UHJvdG90eXBlPih2bS5oZWFwKSkgJHtjbGFzc05hbWV9UHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7XG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTtcbiIpOwogICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgICAgIHJldHVybiBwdHI7XG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIH1cblxuIik7CiAKQEAgLTExMDIsOSArMTEwMiw5IEBAIHN1YiBHZW5lcmF0ZUhlYWRl
cgogICAgICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiJ9
ID0gMTsKICAgICB9CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwKLSAgICAgICAgIiAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKVxuIiAuCisgICAgICAgICIgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSlcbiIgLgogICAgICAgICAiICAgIHtcbiIgLgotICAg
ICAgICAiICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7XG4iIC4KKyAgICAgICAgIiAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTtcbiIgLgog
ICAgICAgICAiICAgIH1cbiIpOwogICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiSlNDdXN0b21OYW1lZEdldHRlck9uUHJvdG90eXBlIn0pIHsKICAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVy
dHlTbG90Jik7XG4iKTsKQEAgLTExMTUsNyArMTExNSw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgog
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVy
dHkoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpT
Qzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7XG4iKSBpZiAkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21EZWZpbmVPd25Qcm9wZXJ0eU9uUHJv
dG90eXBlIn07CiAKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5wcml2YXRlOlxuIik7Ci0g
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX1Qcm90b3R5cGUoSlNDOjpK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUpIHsgfVxuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAke2NsYXNzTmFt
ZX1Qcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7
IH1cbiIpOwogCiAgICAgIyBzdHJ1Y3R1cmUgZmxhZ3MKICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAicHJvdGVjdGVkOlxuIik7CkBAIC0xNzA3LDcgKzE3MDcsNyBAQCBzdWIgR2VuZXJhdGVJbXBs
ZW1lbnRhdGlvbgogICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNO
b1N0YXRpY1RhYmxlcyJ9KSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAic3RhdGljIGNv
bnN0IEhhc2hUYWJsZSogZ2V0JHtjbGFzc05hbWV9UHJvdG90eXBlVGFibGUoRXhlY1N0YXRlKiBl
eGVjKVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKGV4
ZWMtPmdsb2JhbERhdGEoKSwgJiR7Y2xhc3NOYW1lfVByb3RvdHlwZVRhYmxlKTtcbiIpOworICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gZ2V0SGFzaFRhYmxlRm9yR2xvYmFs
RGF0YShleGVjLT52bSgpLCAmJHtjbGFzc05hbWV9UHJvdG90eXBlVGFibGUpO1xuIik7CiAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJjb25zdCBDbGFzc0luZm8gJHtjbGFzc05hbWV9UHJvdG90eXBlOjpzX2luZm8gPSB7IFwi
JHt2aXNpYmxlSW50ZXJmYWNlTmFtZX1Qcm90b3R5cGVcIiwgJkJhc2U6OnNfaW5mbywgMCwgZ2V0
JHtjbGFzc05hbWV9UHJvdG90eXBlVGFibGUsIENSRUFURV9NRVRIT0RfVEFCTEUoJHtjbGFzc05h
bWV9UHJvdG90eXBlKSB9O1xuXG4iKTsKICAgICB9IGVsc2UgewpAQCAtMTc2Niw3ICsxNzY2LDcg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBpZiAoJG51bUF0dHJpYnV0ZXMgPiAw
ICYmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU05vU3RhdGljVGFibGVzIn0p
IHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBn
ZXQke2NsYXNzTmFtZX1UYWJsZShFeGVjU3RhdGUqIGV4ZWMpXG4iKTsKICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ7XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0
dXJuIGdldEhhc2hUYWJsZUZvckdsb2JhbERhdGEoZXhlYy0+Z2xvYmFsRGF0YSgpLCAmJHtjbGFz
c05hbWV9VGFibGUpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVy
biBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKGV4ZWMtPnZtKCksICYke2NsYXNzTmFtZX1UYWJs
ZSk7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAgIH0KIApA
QCAtMTc5NSwxNCArMTc5NSwxNCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICMg
Q29uc3RydWN0b3IKICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKICAg
ICAgICAgQWRkSW5jbHVkZXNGb3JUeXBlSW5JbXBsKCJKU0RPTVdpbmRvd1NoZWxsIik7Ci0gICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9OjokY2xhc3NOYW1lKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8JGltcGxU
eXBlPiBpbXBsLCBKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbClcbiIpOwotICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICA6ICRwYXJlbnRDbGFzc05hbWUoZ2xvYmFsRGF0YSwgc3RydWN0dXJl
LCBpbXBsLCBzaGVsbClcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NO
YW1lfTo6JGNsYXNzTmFtZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRy
PCRpbXBsVHlwZT4gaW1wbCwgSlNET01XaW5kb3dTaGVsbCogc2hlbGwpXG4iKTsKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgOiAkcGFyZW50Q2xhc3NOYW1lKHZtLCBzdHJ1Y3R1cmUs
IGltcGwsIHNoZWxsKVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICB9IGVsc2lmICgkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSXNXb3JrZXJDb250ZXh0In0pIHsKICAgICAgICAg
QWRkSW5jbHVkZXNGb3JUeXBlSW5JbXBsKCRpbnRlcmZhY2VOYW1lKTsKLSAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06OiRjbGFzc05hbWUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjwkaW1wbFR5cGU+IGltcGwp
XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgOiAkcGFyZW50Q2xhc3NOYW1l
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgaW1wbClcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiR7Y2xhc3NOYW1lfTo6JGNsYXNzTmFtZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4gaW1wbClcbiIpOworICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICA6ICRwYXJlbnRDbGFzc05hbWUodm0sIHN0cnVjdHVyZSwgaW1wbClcbiIp
OwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIn1cblxuIik7CiAgICAgfSBlbHNlIHsKQEAgLTE4MTYsMTIgKzE4MTYsMTIgQEAg
c3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7
XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogCi0gICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OmZpbmlzaENyZWF0aW9uKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSlcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZv
aWQgJHtjbGFzc05hbWV9OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pXG4iKTsKICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJ7XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pO1xuIik7CiAgICAgICAgIGlm
ICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkaW1wbFR5cGUpIGFuZCAoJGltcGxU
eXBlIG5lICJBcnJheUJ1ZmZlclZpZXciKSBhbmQgKCRpbXBsVHlwZSBuZSAiQXJyYXlCdWZmZXIi
KSkgewogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVHlwZWRBcnJheURlc2Ny
aXB0b3IgZGVzY3JpcHRvcigmJHtjbGFzc05hbWV9OjpzX2luZm8sIE9CSkVDVF9PRkZTRVRPRigk
e2NsYXNzTmFtZX0sIG1fc3RvcmFnZSksIE9CSkVDVF9PRkZTRVRPRigke2NsYXNzTmFtZX0sIG1f
c3RvcmFnZUxlbmd0aCkpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBnbG9iYWxEYXRhLnJlZ2lzdGVyVHlwZWRBcnJheURlc2NyaXB0b3IoaW1wbCgpLCBkZXNjcmlw
dG9yKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdm0ucmVnaXN0
ZXJUeXBlZEFycmF5RGVzY3JpcHRvcihpbXBsKCksIGRlc2NyaXB0b3IpO1xuIik7CiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBtX3N0b3JhZ2UgPSBpbXBsKCktPmRhdGEoKTtc
biIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgbV9zdG9yYWdlTGVuZ3Ro
ID0gaW1wbCgpLT5sZW5ndGgoKTtcbiIpOwogICAgICAgICB9CkBAIC0xODMzLDEwICsxODMzLDEw
IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiSlNPYmplY3QqICR7Y2xhc3NOYW1lfTo6Y3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdClcbiIpOwogICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIntcbiIpOwogICAgICAgICBpZiAoJGhhc1BhcmVudCAmJiAkcGFyZW50Q2xhc3NO
YW1lIG5lICJKU0M6OkRPTU5vZGVGaWx0ZXIiKSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICByZXR1cm4gJHtjbGFzc05hbWV9UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCAke3BhcmVudENsYXNzTmFt
ZX1Qcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSkpO1xuIik7CisgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gJHtjbGFzc05hbWV9UHJvdG90eXBlOjpj
cmVhdGUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCBnbG9iYWxPYmplY3QsICR7cGFyZW50Q2xhc3NOYW1l
fVByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpKSk7XG4iKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIG15ICRwcm90b3R5cGUgPSAkaW50ZXJmYWNlLT5pc0V4Y2VwdGlv
biA/ICJlcnJvclByb3RvdHlwZSIgOiAib2JqZWN0UHJvdG90eXBlIjsKLSAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmNyZWF0
ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgJHtjbGFzc05hbWV9UHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LT4ke3Byb3RvdHlwZX0oKSkpO1xuIik7CisgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gJHtjbGFzc05hbWV9UHJvdG90eXBlOjpjcmVhdGUo
ZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZShnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT4k
e3Byb3RvdHlwZX0oKSkpO1xuIik7CiAgICAgICAgIH0KICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ9XG5cbiIpOwogICAgIH0KQEAgLTIwNjAsNyArMjA2MCw3IEBAIHN1YiBHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBjYXN0
ZWRUaGlzLT5tXyIgLiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiLnNldChleGVjLT5n
bG9iYWxEYXRhKCksIGNhc3RlZFRoaXMsIHJlc3VsdCk7XG4iKSBpZiAoJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FjaGVkQXR0cmlidXRlIn0pOworICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBjYXN0ZWRUaGlzLT5tXyIgLiAk
YXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiLnNldChleGVjLT52bSgpLCBjYXN0ZWRUaGlz
LCByZXN1bHQpO1xuIikgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkNhY2hlZEF0dHJpYnV0ZSJ9KTsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgcmV0dXJuIHJlc3VsdDtcbiIpOwogCiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKQEAgLTIyMzMsMTMgKzIyMzMsMTMgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3JcbiIpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIgJiYgJGNs
YXNzTmFtZSBlcSAiSlNibGFoIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIyBGSVhNRTogVGhpcyBicmFuY2ggbmV2ZXIgZXhlY3V0ZXMgYW5kIHNob3VsZCBiZSByZW1v
dmVkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAganNDYXN0PCRjbGFzc05hbWUqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2YWx1ZSk7
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGpzQ2FzdDwkY2xhc3NOYW1lKj4odGhpc09iamVjdCktPnB1dERpcmVjdChleGVj
LT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHZhbHVlKTtcbiIpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAganNDYXN0PCRjbGFz
c05hbWUqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRp
ZmllcihleGVjLCBcIiRuYW1lXCIpLCB2YWx1ZSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGpzQ2FzdDwkY2xhc3NOYW1l
Kj4odGhpc09iamVjdCktPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsIFwi
JG5hbWVcIiksIHZhbHVlKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVwbGFjZWFibGUifSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAvLyBTaGFkb3dpbmcg
YSBidWlsdC1pbiBvYmplY3RcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBqc0Nhc3Q8JGNsYXNzTmFtZSo+KHRoaXNPYmplY3QpLT5w
dXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsIFwiJG5hbWVcIiks
IHZhbHVlKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBqc0Nhc3Q8JGNsYXNzTmFtZSo+KHRoaXNPYmplY3QpLT5wdXREaXJlY3Qo
ZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCBcIiRuYW1lXCIpLCB2YWx1ZSk7XG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoISRhdHRyaWJ1dGUtPmlzU3RhdGljKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKiBj
YXN0ZWRUaGlzID0ganNDYXN0PCRjbGFzc05hbWUqPih0aGlzT2JqZWN0KTtcbiIpOwpAQCAtMjM1
MCw3ICsyMzUwLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1
Y3RvclxuIik7CiAKICAgICAgICAgICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdp
bmRvdyIpIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAganND
YXN0PCRjbGFzc05hbWUqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2YWx1ZSk7XG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAganNDYXN0PCRjbGFzc05hbWUq
Pih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5jb25zdHJ1Y3RvciwgdmFsdWUpO1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgZGllICJObyB3YXkgdG8gaGFuZGxlIGludGVyZmFjZSB3aXRoIFJl
cGxhY2VhYmxlQ29uc3RydWN0b3IgZXh0ZW5kZWQgYXR0cmlidXRlOiAkaW50ZXJmYWNlTmFtZSI7
CiAgICAgICAgICAgICAgICAgfQpAQCAtMzE5Miw3ICszMTkyLDcgQEAgRU5ECiAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWNhbkludm9rZUNhbGxiYWNrKCkpXG4iKTsK
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcblxu
Iik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8JGNsYXNzTmFt
ZT4gcHJvdGVjdCh0aGlzKTtcblxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRh
KCkpO1xuXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTTG9ja0hv
bGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPnZtKCkpO1xuXG4iKTsKICAgICAgICAg
ICAgIGlmIChAcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
O1xuIik7CiAgICAgICAgICAgICB9CkBAIC0zNDI4LDE3ICszNDI4LDE3IEBAIHN1YiBKU1ZhbHVl
VG9OYXRpdmUKICAgICB9CiAKICAgICBpZiAoJHR5cGUgZXEgImFueSIpIHsKLSAgICAgICAgcmV0
dXJuICJleGVjLT5nbG9iYWxEYXRhKCksICR2YWx1ZSI7CisgICAgICAgIHJldHVybiAiZXhlYy0+
dm0oKSwgJHZhbHVlIjsKICAgICB9CiAKICAgICBpZiAoJHR5cGUgZXEgIk5vZGVGaWx0ZXIiKSB7
CiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKUyR0eXBlLmgiLCAkY29uZGl0aW9uYWwpOwot
ICAgICAgICByZXR1cm4gInRvJHR5cGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCAkdmFsdWUpIjsKKyAg
ICAgICAgcmV0dXJuICJ0byR0eXBlKGV4ZWMtPnZtKCksICR2YWx1ZSkiOwogICAgIH0KIAogICAg
IGlmICgkdHlwZSBlcSAiTWVkaWFRdWVyeUxpc3RMaXN0ZW5lciIpIHsKICAgICAgICAgQWRkVG9J
bXBsSW5jbHVkZXMoIk1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCIsICRjb25kaXRpb25hbCk7Ci0g
ICAgICAgIHJldHVybiAiTWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6Y3JlYXRlKFNjcmlwdFZhbHVl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgIiAuICR2YWx1ZSAuIikpIjsKKyAgICAgICAgcmV0dXJuICJN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpjcmVhdGUoU2NyaXB0VmFsdWUoZXhlYy0+dm0oKSwgIiAu
ICR2YWx1ZSAuIikpIjsKICAgICB9CiAKICAgICBpZiAoJHR5cGUgZXEgIlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSIpIHsKQEAgLTM4NTYsOSArMzg1Niw5IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9y
RGVjbGFyYXRpb24KICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpO1xuIik7CiAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87
XG4iKTsKIAotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKVxuIik7
CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpXG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAge1xuIik7Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7XG4iKTsKICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgfVxuIik7CiAKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJw
cm90ZWN0ZWQ6XG4iKTsKQEAgLTM5MDEsOSArMzkwMSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGNvbnN0cnVjdG9yOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGlj
IEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3Qg
SlNDOjpDbGFzc0luZm8gc19pbmZvOwpAQCAtNDE5NCw3ICs0MTk0LDcgQEAgc3ViIEdlbmVyYXRl
Q29uc3RydWN0b3JIZWxwZXJNZXRob2RzCiAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiSlNOb1N0YXRpY1RhYmxlcyJ9KSB7CiAgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICJzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBnZXQke2NvbnN0cnVjdG9yQ2xh
c3NOYW1lfVRhYmxlKEV4ZWNTdGF0ZSogZXhlYylcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAie1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
cmV0dXJuIGdldEhhc2hUYWJsZUZvckdsb2JhbERhdGEoZXhlYy0+Z2xvYmFsRGF0YSgpLCAmJHtj
b25zdHJ1Y3RvckNsYXNzTmFtZX1UYWJsZSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICByZXR1cm4gZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShleGVjLT52bSgp
LCAmJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX1UYWJsZSk7XG4iKTsKICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIn1cblxuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICJjb25zdCBDbGFzc0luZm8gJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OnNfaW5mbyA9IHsgXCIk
e3Zpc2libGVJbnRlcmZhY2VOYW1lfUNvbnN0cnVjdG9yXCIsICZCYXNlOjpzX2luZm8sIDAsIGdl
dCR7Y29uc3RydWN0b3JDbGFzc05hbWV9VGFibGUsIENSRUFURV9NRVRIT0RfVEFCTEUoJGNvbnN0
cnVjdG9yQ2xhc3NOYW1lKSB9O1xuXG4iKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTQyMDksMTkg
KzQyMDksMTkgQEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JIZWxwZXJNZXRob2RzCiAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAidm9pZCAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6ZmluaXNoQ3Jl
YXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KVxu
Iik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7CiAgICAgaWYgKCRpbnRlcmZhY2VO
YW1lIGVxICJET01XaW5kb3ciKSB7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpO1xuIik7CisgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTtc
biIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJUKGluaGVyaXRzKCZz
X2luZm8pKTtcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgZ2xv
YmFsT2JqZWN0LT5wcm90b3R5cGUoKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTtcbiIpOworICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIGdsb2JhbE9iamVjdC0+cHJvdG90eXBlKCksIERv
bnREZWxldGUgfCBSZWFkT25seSk7XG4iKTsKICAgICB9IGVsc2lmICgkZ2VuZXJhdGluZ05hbWVk
Q29uc3RydWN0b3IpIHsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdCk7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7XG4iKTsKLSAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6c2VsZihleGVj
LCBnbG9iYWxPYmplY3QpLCBOb25lKTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5
cGUsICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25l
KTtcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpO1xuIik7CisgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTtc
biIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJUKGluaGVyaXRzKCZz
X2luZm8pKTtcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgJHtw
cm90b0NsYXNzTmFtZX06OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5KTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0
KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsICR7cHJvdG9DbGFz
c05hbWV9OjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7
XG4iKTsKICAgICB9Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdChleGVj
LT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKCR7
bnVtYmVyT2ZDb25zdHJ1Y3RvclBhcmFtZXRlcnN9KSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwg
RG9udEVudW0pO1xuIikgaWYgZGVmaW5lZCAkbnVtYmVyT2ZDb25zdHJ1Y3RvclBhcmFtZXRlcnM7
CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigke251bWJlck9mQ29uc3RydWN0b3JQ
YXJhbWV0ZXJzfSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTtcbiIpIGlmIGRl
ZmluZWQgJG51bWJlck9mQ29uc3RydWN0b3JQYXJhbWV0ZXJzOwogICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIn1cblxuIik7CiAKICAgICBpZiAoISRnZW5lcmF0aW5nTmFtZWRDb25zdHJ1Y3Rvcikg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRmxvYXQ2
NEFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNGbG9hdDY0QXJyYXkuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNGbG9hdDY0QXJyYXkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgSlNGbG9hdDY0QXJyYXk6OmluZGV4U2V0
dGVyKEpTQzo6RXgKIAogc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZ2V0SlNGbG9hdDY0QXJyYXlD
b25zdHJ1Y3RvclRhYmxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gZ2V0SGFzaFRh
YmxlRm9yR2xvYmFsRGF0YShleGVjLT5nbG9iYWxEYXRhKCksICZKU0Zsb2F0NjRBcnJheUNvbnN0
cnVjdG9yVGFibGUpOworICAgIHJldHVybiBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKGV4ZWMt
PnZtKCksICZKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yVGFibGUpOwogfQogCiBjb25zdCBDbGFz
c0luZm8gSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiRmxvYXQ2NEFycmF5
Q29uc3RydWN0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBnZXRKU0Zsb2F0NjRBcnJheUNvbnN0cnVj
dG9yVGFibGUsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3Rvcikg
fTsKQEAgLTg3LDEwICs4NywxMCBAQCBKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yOjpKU0Zsb2F0
NjRBcnJhCiAKIHZvaWQgSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24o
RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsK
LSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
cHJvdG90eXBlLCBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmpl
Y3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwotICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxE
YXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEyMyksIFJlYWRP
bmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNGbG9hdDY0QXJyYXlQcm90b3R5cGU6
OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBw
dXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1i
ZXIoMTIzKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCiBib29sIEpT
RmxvYXQ2NEFycmF5Q29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiBzbG90KQpAQCAtMTIxLDcgKzEyMSw3IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBK
U0Zsb2F0NjRBcnIKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNGbG9hdDY0QXJyYXlQcm90b3R5
cGVUYWJsZSA9IHsgNCwgMywgSlNGbG9hdDY0QXJyYXlQcm90b3R5cGVUYWJsZVZhbHVlcywgMCB9
Owogc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZ2V0SlNGbG9hdDY0QXJyYXlQcm90b3R5cGVUYWJs
ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGdldEhhc2hUYWJsZUZvckdsb2JhbERh
dGEoZXhlYy0+Z2xvYmFsRGF0YSgpLCAmSlNGbG9hdDY0QXJyYXlQcm90b3R5cGVUYWJsZSk7Cisg
ICAgcmV0dXJuIGdldEhhc2hUYWJsZUZvckdsb2JhbERhdGEoZXhlYy0+dm0oKSwgJkpTRmxvYXQ2
NEFycmF5UHJvdG90eXBlVGFibGUpOwogfQogCiBjb25zdCBDbGFzc0luZm8gSlNGbG9hdDY0QXJy
YXlQcm90b3R5cGU6OnNfaW5mbyA9IHsgIkZsb2F0NjRBcnJheVByb3RvdHlwZSIsICZCYXNlOjpz
X2luZm8sIDAsIGdldEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlVGFibGUsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNGbG9hdDY0QXJyYXlQcm90b3R5cGUpIH07CkBAIC0xNDUsNyArMTQ1LDcgQEAgYm9v
bCBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZTo6Z2V0T3duUHJvcAogCiBzdGF0aWMgY29uc3QgSGFz
aFRhYmxlKiBnZXRKU0Zsb2F0NjRBcnJheVRhYmxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBy
ZXR1cm4gZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShleGVjLT5nbG9iYWxEYXRhKCksICZKU0Zs
b2F0NjRBcnJheVRhYmxlKTsKKyAgICByZXR1cm4gZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShl
eGVjLT52bSgpLCAmSlNGbG9hdDY0QXJyYXlUYWJsZSk7CiB9CiAKIGNvbnN0IENsYXNzSW5mbyBK
U0Zsb2F0NjRBcnJheTo6c19pbmZvID0geyAiRmxvYXQ2NEFycmF5IiwgJkJhc2U6OnNfaW5mbywg
MCwgZ2V0SlNGbG9hdDY0QXJyYXlUYWJsZSAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNGbG9hdDY0
QXJyYXkpIH07CkBAIC0xNTUsMTEgKzE1NSwxMSBAQCBKU0Zsb2F0NjRBcnJheTo6SlNGbG9hdDY0
QXJyYXkoU3RydWN0dXJlCiB7CiB9CiAKLXZvaWQgSlNGbG9hdDY0QXJyYXk6OmZpbmlzaENyZWF0
aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgSlNGbG9hdDY0QXJyYXk6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRh
KTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgVHlwZWRBcnJheURlc2NyaXB0
b3IgZGVzY3JpcHRvcigmSlNGbG9hdDY0QXJyYXk6OnNfaW5mbywgT0JKRUNUX09GRlNFVE9GKEpT
RmxvYXQ2NEFycmF5LCBtX3N0b3JhZ2UpLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGbG9hdDY0QXJyYXks
IG1fc3RvcmFnZUxlbmd0aCkpOwotICAgIGdsb2JhbERhdGEucmVnaXN0ZXJUeXBlZEFycmF5RGVz
Y3JpcHRvcihpbXBsKCksIGRlc2NyaXB0b3IpOworICAgIHZtLnJlZ2lzdGVyVHlwZWRBcnJheURl
c2NyaXB0b3IoaW1wbCgpLCBkZXNjcmlwdG9yKTsKICAgICBtX3N0b3JhZ2UgPSBpbXBsKCktPmRh
dGEoKTsKICAgICBtX3N0b3JhZ2VMZW5ndGggPSBpbXBsKCktPmxlbmd0aCgpOwogICAgIEFTU0VS
VChpbmhlcml0cygmc19pbmZvKSk7CkBAIC0xNjcsNyArMTY3LDcgQEAgdm9pZCBKU0Zsb2F0NjRB
cnJheTo6ZmluaXNoQ3JlYXRpb24oSlNHbAogCiBKU09iamVjdCogSlNGbG9hdDY0QXJyYXk6OmNy
ZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCiB7Ci0gICAgcmV0dXJuIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIEpTQXJyYXlCdWZm
ZXJWaWV3UHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCkpKTsKKyAgICByZXR1cm4g
SlNGbG9hdDY0QXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLT52bSgpLCBnbG9iYWxPYmplY3Qs
IEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgZ2xv
YmFsT2JqZWN0LCBKU0FycmF5QnVmZmVyVmlld1Byb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxP
YmplY3QpKSk7CiB9CiAKIGJvb2wgSlNGbG9hdDY0QXJyYXk6OmdldE93blByb3BlcnR5U2xvdChK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTRmxvYXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRmxvYXQ2NEFycmF5LmgJKHJldmlzaW9uIDE0ODY1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0Zsb2F0NjRB
cnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw4IEBAIHB1YmxpYzoKICAgICB0eXBl
ZGVmIEpTQXJyYXlCdWZmZXJWaWV3IEJhc2U7CiAgICAgc3RhdGljIEpTRmxvYXQ2NEFycmF5KiBj
cmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IGltcGwpCiAgICAgewotICAgICAgICBK
U0Zsb2F0NjRBcnJheSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU0Zs
b2F0NjRBcnJheT4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkpIEpTRmxvYXQ2NEFy
cmF5KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKLSAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEpTRmxvYXQ2NEFy
cmF5KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTRmxvYXQ2NEFycmF5
PihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTRmxvYXQ2NEFycmF5KHN0cnVjdHVyZSwgZ2xv
YmFsT2JqZWN0LCBpbXBsKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmpl
Y3QtPnZtKCkpOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIApAQCAtNDYsOSArNDYsOSBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpOwogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAKLSAg
ICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6
OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVt
ZXJhdGlvbk1vZGUgbW9kZSA9IEpTQzo6RXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CkBAIC02
Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkKiBtX3N0b3JhZ2U7CiBwcm90ZWN0ZWQ6CiAg
ICAgSlNGbG9hdDY0QXJyYXkoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFBh
c3NSZWZQdHI8RmxvYXQ2NEFycmF5Pik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkpT
R2xvYmFsRGF0YSYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwogICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0UHJv
cGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbnRl
cmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwg
QmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAgICAgSlNDOjpKU1ZhbHVlIGdldEJ5SW5kZXgoSlNDOjpF
eGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCk7CiAgICAgdm9pZCBpbmRleFNldHRlcihKU0M6OkV4
ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUpOwpAQCAtNzUsMjMgKzc1LDIz
IEBAIGNsYXNzIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlIDogcHVibGljIEoKIHB1YmxpYzoKICAg
ICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwogICAgIHN0YXRpYyBKU0M6OkpT
T2JqZWN0KiBzZWxmKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAg
IHN0YXRpYyBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZSogY3JlYXRlKEpTQzo6SlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgc3RhdGljIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlKiBj
cmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIEpTRmxvYXQ2NEFycmF5UHJv
dG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTRmxvYXQ2NEFy
cmF5UHJvdG90eXBlPihnbG9iYWxEYXRhLmhlYXApKSBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZShn
bG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlKiBw
dHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTRmxvYXQ2NEFycmF5UHJvdG90
eXBlPih2bS5oZWFwKSkgSlNGbG9hdDY0QXJyYXlQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIHJl
dHVybiBwdHI7CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5m
bzsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlND
OjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3Im
KTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1
Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAg
ICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlKEpT
Qzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlKSB7IH0KKyAgICBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpK
U05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQogcHJvdGVjdGVkOgogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwpAQCAtMTEzLDkgKzExMyw5IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwq
LCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYp
OwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0
KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2Ny
aXB0b3ImKTsKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpT
Qzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAg
ICB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJ
bnN0YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsOSArNjAsOSBAQCBKU1Rlc3RBY3RpdmVET01PYmpl
Y3RDb25zdHJ1Y3Rvcjo6SlNUZXN0CiAKIHZvaWQgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3Ry
dWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxE
YXRhKCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwogICAgIEFTU0VS
VChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJv
dG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7
CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5
cGUsIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmpl
Y3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogfQogCiBib29sIEpTVGVzdEFjdGl2ZURPTU9i
amVjdENvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
QEAgLTExMiwxNSArMTEyLDE1IEBAIEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6SlNUZXN0QWN0aXZl
RE9NT2IKIHsKIH0KIAotdm9pZCBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OmZpbmlzaENyZWF0aW9u
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Ojpm
aW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0
cygmc19pbmZvKSk7CiB9CiAKIEpTT2JqZWN0KiBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OmNyZWF0
ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CiB7Ci0gICAgcmV0dXJuIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZTo6Y3JlYXRlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90
b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CisgICAgcmV0dXJuIEpT
VGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGdsb2JhbE9i
amVjdCwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xv
YmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90
eXBlKCkpKTsKIH0KIAogdm9pZCBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OmRlc3Ryb3koSlNDOjpK
U0NlbGwqIGNlbGwpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5oCShyZXZpc2lv
biAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0QWN0aXZlRE9NT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDggQEAgcHVi
bGljOgogICAgIHR5cGVkZWYgSlNET01XcmFwcGVyIEJhc2U7CiAgICAgc3RhdGljIEpTVGVzdEFj
dGl2ZURPTU9iamVjdCogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8VGVzdEFjdGl2ZURPTU9iamVjdD4g
aW1wbCkKICAgICB7Ci0gICAgICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdCogcHRyID0gbmV3IChO
b3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RBY3RpdmVET01PYmplY3Q+KGdsb2JhbE9i
amVjdC0+Z2xvYmFsRGF0YSgpLmhlYXApKSBKU1Rlc3RBY3RpdmVET01PYmplY3Qoc3RydWN0dXJl
LCBnbG9iYWxPYmplY3QsIGltcGwpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KiBw
dHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEFjdGl2ZURPTU9iamVj
dD4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RBY3RpdmVET01PYmplY3Qoc3RydWN0
dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGds
b2JhbE9iamVjdC0+dm0oKSk7CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogCkBAIC00Niw5
ICs0Niw5IEBAIHB1YmxpYzoKICAgICB+SlNUZXN0QWN0aXZlRE9NT2JqZWN0KCk7CiAgICAgc3Rh
dGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisg
ICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEs
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0ds
b2JhbE9iamVjdCopOwpAQCAtNjEsNyArNjEsNyBAQCBwcml2YXRlOgogICAgIFRlc3RBY3RpdmVE
T01PYmplY3QqIG1faW1wbDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RBY3RpdmVET01PYmplY3Qo
SlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8VGVzdEFjdGl2
ZURPTU9iamVjdD4pOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpKU0dsb2JhbERhdGEm
KTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKICAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIApAQCAtODksMjMgKzg5LDIz
IEBAIGNsYXNzIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSA6IHAKIHB1YmxpYzoKICAg
ICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwogICAgIHN0YXRpYyBKU0M6OkpT
T2JqZWN0KiBzZWxmKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAg
IHN0YXRpYyBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUqIGNyZWF0ZShKU0M6OkpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHN0YXRpYyBKU1Rlc3RBY3RpdmVET01PYmpl
Y3RQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgSlNU
ZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxs
b2NhdGVDZWxsPEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZT4oZ2xvYmFsRGF0YS5oZWFw
KSkgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsK
KyAgICAgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51
bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZT4odm0u
aGVhcCkpIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0
dXJuIHB0cjsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZv
OwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYp
OwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90
eXBlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3QoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKSB7IH0KKyAgICBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KIHByb3RlY3Rl
ZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKQEAgLTEy
Nyw5ICsxMjcsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQ
cm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
SlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6
UHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNf
aW5mbzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cisg
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
JnNfaW5mbyk7CiAgICAgfQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJ
bXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxh
Z3M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJh
Y2tXaXRoTm9QYXJhbQogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMp
OwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RGF0YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT52
bSgpKTsKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAKQEAgLTgxLDcgKzgxLDcg
QEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUAogCiAgICAgUmVmUHRy
PEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2so
bV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT52bSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1
bWVudEJ1ZmZlciBhcmdzOwpAQCAtOTksNyArOTksNyBAQCBib29sIEpTVGVzdENhbGxiYWNrOjpj
YWxsYmFja1dpdGhDbGFzczJQCiAKICAgICBSZWZQdHI8SlNUZXN0Q2FsbGJhY2s+IHByb3RlY3Qo
dGhpcyk7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5n
bG9iYWxEYXRhKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0
KCktPnZtKCkpOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkBAIC0xMTgs
NyArMTE4LDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoU3RyaW5nTAogCiAg
ICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgSlNMb2NrSG9s
ZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT52bSgpKTsKIAogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpAQCAtMTM2LDcgKzEzNiw3IEBAIGJvb2wgSlNUZXN0
Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aEJvb2xlYW4KIAogICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFj
az4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5n
bG9iYWxPYmplY3QoKS0+dm0oKSk7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJn
czsKQEAgLTE1Niw3ICsxNTYsNyBAQCBib29sIEpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1JlcXVp
cmVzVGhpCiAKICAgICBSZWZQdHI8SlNUZXN0Q2FsbGJhY2s+IHByb3RlY3QodGhpcyk7CiAKLSAg
ICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPnZtKCkpOwog
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RDdXN0b21OYW1lZEdldHRlci5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU4LDkgKzU4LDkgQEAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJD
b25zdHJ1Y3Rvcjo6SlNUZQogCiB2b2lkIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0
b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRh
KCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwogICAgIEFTU0VSVChp
bmhlcml0cygmc19pbmZvKSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90
b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsK
KyAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlw
ZSwgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2Jq
ZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKIH0KIAogYm9vbCBKU1Rlc3RDdXN0b21OYW1l
ZEdldHRlckNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dCkKQEAgLTEwOSwxNSArMTA5LDE1IEBAIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpKU1Rlc3RD
dXN0b21OYW0KIHsKIH0KIAotdm9pZCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6ZmluaXNoQ3Jl
YXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBKU1Rlc3RDdXN0b21OYW1lZEdl
dHRlcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGdsb2JhbERhdGEpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQo
aW5oZXJpdHMoJnNfaW5mbykpOwogfQogCiBKU09iamVjdCogSlNUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXI6OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCiB7Ci0gICAgcmV0dXJuIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBl
OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIEpTVGVzdEN1c3RvbU5h
bWVkR2V0dGVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxE
YXRhKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwor
ICAgIHJldHVybiBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMt
PnZtKCksIGdsb2JhbE9iamVjdCwgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6OmNy
ZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQogCiB2b2lkIEpTVGVzdEN1c3RvbU5hbWVkR2V0
dGVyOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw4ICszNCw4IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRE9NV3JhcHBlciBC
YXNlOwogICAgIHN0YXRpYyBKU1Rlc3RDdXN0b21OYW1lZEdldHRlciogY3JlYXRlKEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NS
ZWZQdHI8VGVzdEN1c3RvbU5hbWVkR2V0dGVyPiBpbXBsKQogICAgIHsKLSAgICAgICAgSlNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXIqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI+KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLmhlYXAp
KSBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7
Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkp
OworICAgICAgICBKU1Rlc3RDdXN0b21OYW1lZEdldHRlciogcHRyID0gbmV3IChOb3ROdWxsLCBK
U0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RDdXN0b21OYW1lZEdldHRlcj4oZ2xvYmFsT2JqZWN0LT52
bSgpLmhlYXApKSBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVj
dCwgaW1wbCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgp
KTsKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAKQEAgLTQ3LDkgKzQ3LDkgQEAgcHVibGlj
OgogICAgIH5KU1Rlc3RDdXN0b21OYW1lZEdldHRlcigpOwogICAgIHN0YXRpYyBjb25zdCBKU0M6
OkNsYXNzSW5mbyBzX2luZm87CiAKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsK
QEAgLTYyLDcgKzYyLDcgQEAgcHJpdmF0ZToKICAgICBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIG1f
aW1wbDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcihKU0M6OlN0cnVj
dHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXI+KTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJik7CisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6
OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm8gfCBKU0M6Okhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZs
YWdzOwogcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBjYW5HZXRJdGVtc0Zvck5hbWUoSlNDOjpF
eGVjU3RhdGUqLCBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqLCBKU0M6OlByb3BlcnR5TmFtZSk7CkBA
IC05MywyMyArOTMsMjMgQEAgY2xhc3MgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUg
OgogcHVibGljOgogICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAgICAg
c3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFs
T2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKiBj
cmVhdGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBzdGF0aWMgSlNU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQog
ICAgIHsKLSAgICAgICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUqIHB0ciA9IG5l
dyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90
b3R5cGU+KGdsb2JhbERhdGEuaGVhcCkpIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBl
KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5p
c2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQ
cm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RDdXN0b21OYW1lZEdldHRl
clByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZp
bmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAKICAgICBzdGF0
aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwogICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5h
bWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlO
YW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAg
c3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKIHByaXZhdGU6Ci0g
ICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUoSlNDOjpKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
KSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpIHsgfQorICAg
IEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxP
YmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CkBAIC0xMzEsOSArMTMxLDkgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwog
ICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87Ci0gICAgc3RhdGljIEpTQzo6
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFs
RGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8o
SlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIHByb3Rl
Y3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwg
RE9NQ29uc3RydWN0b3JPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFdmVudENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05OCwxMCArOTgsMTAgQEAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNv
bnN0cnVjdG9yOjpKU1RlcwogCiB2b2lkIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rv
cjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEo
KSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAgICAgQVNTRVJUKGlu
aGVyaXRzKCZzX2luZm8pKTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90
eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7Ci0g
ICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCwganNOdW1iZXIoMiksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKKyAg
ICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwg
SlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3Qp
LCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigyKSwgUmVhZE9ubHkgfCBEb250RGVs
ZXRlIHwgRG9udEVudW0pOwogfQogCiBib29sIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1
Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC0xNDMsMTUg
KzE0MywxNSBAQCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpKU1Rlc3RFdmVudENvbnN0CiB7CiB9
CiAKLXZvaWQgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQordm9pZCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Cisg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZv
KSk7CiB9CiAKIEpTT2JqZWN0KiBKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpjcmVhdGVQcm90b3R5
cGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAg
IHJldHVybiBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6
OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CisgICAgcmV0dXJuIEpTVGVzdEV2
ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZShleGVjLT52bSgpLCBnbG9iYWxPYmplY3Qs
IEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxP
YmplY3QtPnZtKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUo
KSkpOwogfQogCiB2b2lkIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmRlc3Ryb3koSlNDOjpKU0Nl
bGwqIGNlbGwpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmgJKHJldmlzaW9u
IDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFdmVudENvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDggQEAgcHVi
bGljOgogICAgIHR5cGVkZWYgSlNET01XcmFwcGVyIEJhc2U7CiAgICAgc3RhdGljIEpTVGVzdEV2
ZW50Q29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFRlc3RFdmVudENvbnN0cnVjdG9y
PiBpbXBsKQogICAgIHsKLSAgICAgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciogcHRyID0gbmV3
IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFdmVudENvbnN0cnVjdG9yPihnbG9i
YWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKSkgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvcihzdHJ1
Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpOworICAgICAgICBKU1Rlc3RFdmVudENvbnN0cnVj
dG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50Q29u
c3RydWN0b3I+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
cihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAK
QEAgLTQ4LDkgKzQ4LDkgQEAgcHVibGljOgogICAgIH5KU1Rlc3RFdmVudENvbnN0cnVjdG9yKCk7
CiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBK
U0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGds
b2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJ
bmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAK
ICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU0dsb2JhbE9iamVjdCopOwpAQCAtNjMsNyArNjMsNyBAQCBwcml2YXRlOgogICAgIFRl
c3RFdmVudENvbnN0cnVjdG9yKiBtX2ltcGw7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0RXZlbnRD
b25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0
cjxUZXN0RXZlbnRDb25zdHJ1Y3Rvcj4pOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpK
U0dsb2JhbERhdGEmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhF
dmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIApAQCAt
OTEsMjEgKzkxLDIxIEBAIGNsYXNzIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGUgOiAK
IHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwogICAgIHN0
YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9i
amVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKiBjcmVh
dGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBzdGF0aWMgSlNUZXN0
RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAg
ewotICAgICAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU+
KGdsb2JhbERhdGEuaGVhcCkpIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGUoZ2xvYmFs
RGF0YSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpOworICAgICAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBl
KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50Q29uc3Ry
dWN0b3JQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRp
b24odm0pOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBK
U0M6OkNsYXNzSW5mbyBzX2luZm87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBKU1Rlc3RF
dmVudENvbnN0cnVjdG9yUHJvdG90eXBlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpT
Tm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKSB7IH0KKyAgICBKU1Rlc3RFdmVu
dENvbnN0cnVjdG9yUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0
cnVjdHVyZSkgeyB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwpAQCAtMTI3LDkgKzEyNyw5IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwq
LCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYp
OwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0
KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2Ny
aXB0b3ImKTsKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpT
Qzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAg
ICB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJ
bnN0YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjQsOSArNjQsOSBAQCBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yOjpK
U1Rlc3RFdmVuCiAKIHZvaWQgSlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3Jl
YXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQog
ewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2lu
Zm8pKTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkucHJvdG90eXBlLCBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZTo6c2VsZihleGVjLCBn
bG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdChleGVj
LT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RFdmVudFRhcmdl
dFByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9u
bHkpOwogfQogCiBib29sIEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I6OmdldE93blByb3Bl
cnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtMTE4LDE1ICsxMTgsMTUgQEAgSlNUZXN0
RXZlbnRUYXJnZXQ6OkpTVGVzdEV2ZW50VGFyZ2V0KFN0cgogewogfQogCi12b2lkIEpTVGVzdEV2
ZW50VGFyZ2V0OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lk
IEpTVGVzdEV2ZW50VGFyZ2V0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7Ci0gICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiB9CiAKIEpTT2JqZWN0KiBKU1Rlc3RF
dmVudFRhcmdldDo6Y3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICByZXR1cm4gSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5
cGU6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgSlNUZXN0RXZlbnRU
YXJnZXRQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEo
KSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CisgICAg
cmV0dXJuIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZ2xv
YmFsT2JqZWN0LCBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGds
b2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3Rv
dHlwZSgpKSk7CiB9CiAKIHZvaWQgSlNUZXN0RXZlbnRUYXJnZXQ6OmRlc3Ryb3koSlNDOjpKU0Nl
bGwqIGNlbGwpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RXZlbnRUYXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuaAkocmV2aXNpb24gMTQ4NjU1KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFy
Z2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAgcHVibGljOgogICAgIHN0YXRp
YyBKU1Rlc3RFdmVudFRhcmdldCogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8VGVzdEV2ZW50VGFyZ2V0
PiBpbXBsKQogICAgIHsKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5tYXNxdWVyYWRlc0FzVW5kZWZp
bmVkV2F0Y2hwb2ludCgpLT5ub3RpZnlXcml0ZSgpOwotICAgICAgICBKU1Rlc3RFdmVudFRhcmdl
dCogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFdmVudFRhcmdl
dD4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkpIEpTVGVzdEV2ZW50VGFyZ2V0KHN0
cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlv
bihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEpTVGVzdEV2ZW50VGFyZ2V0
KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50VGFyZ2V0
PihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdEV2ZW50VGFyZ2V0KHN0cnVjdHVyZSwg
Z2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxP
YmplY3QtPnZtKCkpOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIApAQCAtNDgsOSArNDgs
OSBAQCBwdWJsaWM6CiAgICAgfkpTVGVzdEV2ZW50VGFyZ2V0KCk7CiAgICAgc3RhdGljIGNvbnN0
IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGlj
IEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSBtb2RlID0gSlNDOjpFeGNs
dWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICBU
ZXN0RXZlbnRUYXJnZXQqIG1faW1wbDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RFdmVudFRhcmdl
dChKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxUZXN0RXZl
bnRUYXJnZXQ+KTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJik7
CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwg
SlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRl
c1Zpc2l0Q2hpbGRyZW4gfCBKU0M6Ok1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgfCBKU0M6Okhhc0lt
cHVyZUdldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgaW5kZXhHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IHVuc2lnbmVkKTsKIHByaXZhdGU6CkBAIC05OCwyMyArOTgsMjMgQEAgY2xhc3MgSlNUZXN0RXZl
bnRUYXJnZXRQcm90b3R5cGUgOiBwdWJsaQogcHVibGljOgogICAgIHR5cGVkZWYgSlNDOjpKU05v
bkZpbmFsT2JqZWN0IEJhc2U7CiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdEV2ZW50
VGFyZ2V0UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICBzdGF0aWMgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqIHB0
ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXZlbnRUYXJnZXRQcm90
b3R5cGU+KGdsb2JhbERhdGEuaGVhcCkpIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVh
dGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqIHB0
ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXZlbnRUYXJnZXRQcm90
b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAg
ICAgcmV0dXJuIHB0cjsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8g
c19pbmZvOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCos
IEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7
CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3Jp
cHRvciYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsK
KyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCAmc19pbmZvKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90
b3R5cGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdChnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUpIHsgfQorICAgIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9CiBwcm90ZWN0ZWQ6
CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNl
OjpTdHJ1Y3R1cmVGbGFnczsKIH07CkBAIC0xMzYsOSArMTM2LDkgQEAgcHVibGljOgogICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIHN0
YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAg
ICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIHByb3RlY3RlZDoK
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgRE9NQ29u
c3RydWN0b3JPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5j
cHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw5ICs1Nyw5
IEBAIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpKU1Rlc3RFeGNlcHQKIAogdm9pZCBKU1Rl
c3RFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+
dm0oKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLSAgICBwdXREaXJlY3QoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RF
eGNlcHRpb25Qcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLnByb3RvdHlwZSwgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2Jh
bE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiB9CiAKIGJvb2wgSlNUZXN0RXhjZXB0
aW9uQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpA
QCAtOTUsMTUgKzk1LDE1IEBAIEpTVGVzdEV4Y2VwdGlvbjo6SlNUZXN0RXhjZXB0aW9uKFN0cnVj
dHUKIHsKIH0KIAotdm9pZCBKU1Rlc3RFeGNlcHRpb246OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgSlNUZXN0RXhjZXB0aW9uOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiB9
CiAKIEpTT2JqZWN0KiBKU1Rlc3RFeGNlcHRpb246OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUq
IGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgcmV0dXJuIEpTVGVz
dEV4Y2VwdGlvblByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmpl
Y3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmVycm9yUHJvdG90
eXBlKCkpKTsKKyAgICByZXR1cm4gSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlOjpjcmVhdGUoZXhl
Yy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZShnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5l
cnJvclByb3RvdHlwZSgpKSk7CiB9CiAKIHZvaWQgSlNUZXN0RXhjZXB0aW9uOjpkZXN0cm95KEpT
Qzo6SlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uaAkocmV2aXNpb24gMTQ4NjU1
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2Vw
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw4IEBAIHB1YmxpYzoKICAgICB0eXBl
ZGVmIEpTRE9NV3JhcHBlciBCYXNlOwogICAgIHN0YXRpYyBKU1Rlc3RFeGNlcHRpb24qIGNyZWF0
ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBQYXNzUmVmUHRyPFRlc3RFeGNlcHRpb24+IGltcGwpCiAgICAgewotICAgICAgICBKU1Rl
c3RFeGNlcHRpb24qIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0
RXhjZXB0aW9uPihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKSkgSlNUZXN0RXhjZXB0
aW9uKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKLSAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEpTVGVzdEV4Y2Vw
dGlvbiogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFeGNlcHRp
b24+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0RXhjZXB0aW9uKHN0cnVjdHVyZSwg
Z2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxP
YmplY3QtPnZtKCkpOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIApAQCAtNDYsOSArNDYs
OSBAQCBwdWJsaWM6CiAgICAgfkpTVGVzdEV4Y2VwdGlvbigpOwogICAgIHN0YXRpYyBjb25zdCBK
U0M6OkNsYXNzSW5mbyBzX2luZm87CiAKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBK
U0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3Qq
KTsKQEAgLTYxLDcgKzYxLDcgQEAgcHJpdmF0ZToKICAgICBUZXN0RXhjZXB0aW9uKiBtX2ltcGw7
CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0RXhjZXB0aW9uKEpTQzo6U3RydWN0dXJlKiwgSlNET01H
bG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPFRlc3RFeGNlcHRpb24+KTsKLSAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJik7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlND
OjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBCYXNlOjpTdHJ1Y3R1cmVG
bGFnczsKIH07CiAKQEAgLTg5LDIxICs4OSwyMSBAQCBjbGFzcyBKU1Rlc3RFeGNlcHRpb25Qcm90
b3R5cGUgOiBwdWJsaWMgCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmpl
Y3QgQmFzZTsKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0RXhjZXB0aW9uUHJvdG90
eXBlKiBjcmVhdGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBzdGF0
aWMgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAg
ICB7Ci0gICAgICAgIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGU+KGdsb2JhbERhdGEu
aGVhcCkpIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Cisg
ICAgICAgIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6
OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RF
eGNlcHRpb25Qcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAg
cHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogCiAg
ICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxE
YXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiBwcml2
YXRlOgotICAgIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUp
IDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkgeyB9CisgICAg
SlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0s
IHN0cnVjdHVyZSkgeyB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwpAQCAtMTI1LDkgKzEyNSw5
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0Nl
bGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xv
dCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURl
c2NyaXB0b3ImKTsKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsK
ICAgICB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNI
YXNJbnN0YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTMyLDEwICsxMzIsMTAgQEAgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OkpT
VGVzdEludGVyZgogCiB2b2lkIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVh
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7
Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5m
bykpOwotICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUsIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9i
YWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwotICAgIHB1dERpcmVjdChleGVjLT5n
bG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDIpLCBS
ZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZt
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdEludGVyZmFjZVByb3Rv
dHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwor
ICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBq
c051bWJlcigyKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCiBib29s
IEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYgc2xvdCkKQEAgLTIwNiwxNSArMjA2LDE1IEBAIEpTVGVzdEludGVyZmFjZTo6SlNUZXN0
SW50ZXJmYWNlKFN0cnVjdHUKIHsKIH0KIAotdm9pZCBKU1Rlc3RJbnRlcmZhY2U6OmZpbmlzaENy
ZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgSlNUZXN0SW50ZXJmYWNlOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0
cygmc19pbmZvKSk7CiB9CiAKIEpTT2JqZWN0KiBKU1Rlc3RJbnRlcmZhY2U6OmNyZWF0ZVByb3Rv
dHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0g
ICAgcmV0dXJuIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU6OmNyZWF0ZVN0cnVj
dHVyZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmpl
Y3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CisgICAgcmV0dXJuIEpTVGVzdEludGVyZmFjZVByb3Rv
dHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdCwgSlNUZXN0SW50ZXJmYWNlUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAogdm9pZCBKU1Rlc3RJbnRl
cmZhY2U6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5o
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0SW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDggQEAg
cHVibGljOgogICAgIHR5cGVkZWYgSlNET01XcmFwcGVyIEJhc2U7CiAgICAgc3RhdGljIEpTVGVz
dEludGVyZmFjZSogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8VGVzdEludGVyZmFjZT4gaW1wbCkKICAg
ICB7Ci0gICAgICAgIEpTVGVzdEludGVyZmFjZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFs
bG9jYXRlQ2VsbDxKU1Rlc3RJbnRlcmZhY2U+KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLmhl
YXApKSBKU1Rlc3RJbnRlcmZhY2Uoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOwotICAg
ICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKTsKKyAg
ICAgICAgSlNUZXN0SW50ZXJmYWNlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVD
ZWxsPEpTVGVzdEludGVyZmFjZT4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RJbnRl
cmZhY2Uoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOworICAgICAgICBwdHItPmZpbmlz
aENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAg
fQogCkBAIC01MSw5ICs1MSw5IEBAIHB1YmxpYzoKICAgICB+SlNUZXN0SW50ZXJmYWNlKCk7CiAg
ICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU0dsb2JhbE9iamVjdCopOwpAQCAtNzksNyArNzksNyBAQCBwcml2YXRlOgogICAgIFRlc3RJ
bnRlcmZhY2UqIG1faW1wbDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RJbnRlcmZhY2UoSlNDOjpT
dHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8VGVzdEludGVyZmFjZT4p
OwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpKU0dsb2JhbERhdGEmKTsKKyAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8
IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIApAQCAtMTA3LDIzICsxMDcsMjMgQEAgY2xhc3Mg
SlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlIDogcHVibGljIAogcHVibGljOgogICAgIHR5cGVkZWYg
SlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNl
bGYoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpT
VGVzdEludGVyZmFjZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCisgICAgc3RhdGljIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSogY3JlYXRlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUq
IHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0SW50ZXJmYWNlUHJv
dG90eXBlPihnbG9iYWxEYXRhLmhlYXApKSBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUoZ2xvYmFs
RGF0YSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpOworICAgICAgICBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUqIHB0ciA9
IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0SW50ZXJmYWNlUHJvdG90eXBl
Pih2bS5oZWFwKSkgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1
cm4gcHRyOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87
CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7
Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUoSlND
OjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUpIHsgfQorICAgIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpK
U05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQogcHJvdGVjdGVkOgogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwpAQCAtMTQ1LDkgKzE0NSw5IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwq
LCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYp
OwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0
KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2Ny
aXB0b3ImKTsKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpT
Qzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAg
ICB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJ
bnN0YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDE0
ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsOSArNTgsOSBA
QCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3I6CiAKIHZvaWQgSlNUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihleGVjLT52bSgpKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwotICAgIHB1
dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5
cGUsIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xv
YmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3QoZXhlYy0+
dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lclByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpOwogfQogCiBib29sIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25z
dHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC0xMDks
MTUgKzEwOSwxNSBAQCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpKU1Rlc3RNZWRpCiB7
CiB9CiAKLXZvaWQgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6ZmluaXNoQ3JlYXRpb24o
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsRGF0YSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChp
bmhlcml0cygmc19pbmZvKSk7CiB9CiAKIEpTT2JqZWN0KiBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyOjpjcmVhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQogewotICAgIHJldHVybiBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIEpTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxP
YmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFBy
b3RvdHlwZSgpKSk7CisgICAgcmV0dXJuIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90
b3R5cGU6OmNyZWF0ZShleGVjLT52bSgpLCBnbG9iYWxPYmplY3QsIEpTVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPnZtKCks
IGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQogCiB2
b2lkIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNl
bGwpCkBAIC0xNjYsNyArMTY2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RNZWRpYQogICAgIFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBpbXBsID0gc3RhdGljX2Nh
c3Q8VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBSZWZQ
dHI8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4gbGlzdGVuZXIoTWVkaWFRdWVyeUxpc3RMaXN0ZW5l
cjo6Y3JlYXRlKFNjcmlwdFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+YXJndW1lbnQo
MCkpKSk7CisgICAgUmVmUHRyPE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+IGxpc3RlbmVyKE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXI6OmNyZWF0ZShTY3JpcHRWYWx1ZShleGVjLT52bSgpLCBleGVjLT5h
cmd1bWVudCgwKSkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC0+bWV0aG9kKGxp
c3RlbmVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIu
aAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsOCArMzQsOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0RPTVdyYXBwZXIgQmFzZTsKICAg
ICBzdGF0aWMgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogY3JlYXRlKEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQ
dHI8VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+IGltcGwpCiAgICAgewotICAgICAgICBKU1Rl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2Nh
dGVDZWxsPEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+KGdsb2JhbE9iamVjdC0+Z2xvYmFs
RGF0YSgpLmhlYXApKSBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKHN0cnVjdHVyZSwgZ2xv
YmFsT2JqZWN0LCBpbXBsKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmpl
Y3QtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIq
IHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lcj4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICAgICAgcHRyLT5m
aW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwogICAgICAgICByZXR1cm4gcHRyOwog
ICAgIH0KIApAQCAtNDYsOSArNDYsOSBAQCBwdWJsaWM6CiAgICAgfkpTVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXIoKTsKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwog
Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOwogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CkBAIC02MSw3ICs2MSw3IEBAIHBy
aXZhdGU6CiAgICAgVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIG1faW1wbDsKIHByb3RlY3Rl
ZDoKICAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKEpTQzo6U3RydWN0dXJlKiwgSlNE
T01HbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPik7
Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkpTR2xvYmFsRGF0YSYpOworICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbnRl
cmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwg
QmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwogCkBAIC04OSwyMyArODksMjMgQEAgY2xhc3MgSlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdAogcHVibGljOgogICAgIHR5cGVkZWYgSlND
OjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUqIGNyZWF0ZShKU0M6OkpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHN0YXRpYyBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIEpT
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwg
SlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZT4o
Z2xvYmFsRGF0YS5oZWFwKSkgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZShn
bG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXJQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXJQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAg
ICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAg
fQogCiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICBzdGF0aWMg
SlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJv
dG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShn
bG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQog
CiBwcml2YXRlOgotICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUoSlND
OjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUpIHsgfQorICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KIHByb3RlY3Rl
ZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKQEAgLTEy
Nyw5ICsxMjcsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQ
cm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
SlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6
UHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNf
aW5mbzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cisg
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
JnNfaW5mbyk7CiAgICAgfQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJ
bXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxh
Z3M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAx
NDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDkgKzU3LDkgQEAgSlNU
ZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpKU1RlcwogCiB2b2lkIEpTVGVzdE5hbWVk
Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+
dm0oKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLSAgICBwdXREaXJlY3QoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnRE
ZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU6OnNl
bGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKIH0KIAogYm9v
bCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdChK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiBzbG90KQpAQCAtMTA2LDcgKzEwNiw3IEBAIHZvaWQgSlNUZXN0TmFtZWRD
b25zdHJ1Y3Rvck5hbWVkQ29uc3RydWMKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9i
YWxPYmplY3QpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgcHV0RGlyZWN0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNU
ZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBO
b25lKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnBy
b3RvdHlwZSwgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9i
YWxPYmplY3QpLCBOb25lKTsKIH0KIAogQ29uc3RydWN0VHlwZSBKU1Rlc3ROYW1lZENvbnN0cnVj
dG9yTmFtZWRDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3RE
YXRhJiBjb25zdHJ1Y3REYXRhKQpAQCAtMTM4LDE1ICsxMzgsMTUgQEAgSlNUZXN0TmFtZWRDb25z
dHJ1Y3Rvcjo6SlNUZXN0TmFtZWRDb25zdAogewogfQogCi12b2lkIEpTVGVzdE5hbWVkQ29uc3Ry
dWN0b3I6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgSlNU
ZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewotICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogfQogCiBKU09iamVjdCogSlNUZXN0
TmFtZWRDb25zdHJ1Y3Rvcjo6Y3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICByZXR1cm4gSlNUZXN0TmFtZWRDb25zdHJ1
Y3RvclByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBK
U1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90
b3R5cGUoKSkpOworICAgIHJldHVybiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpj
cmVhdGUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw4ICszNCw4IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRE9NV3Jh
cHBlciBCYXNlOwogICAgIHN0YXRpYyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKiBjcmVhdGUoSlND
OjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UGFzc1JlZlB0cjxUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4gaW1wbCkKICAgICB7Ci0gICAgICAgIEpT
VGVzdE5hbWVkQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNl
bGw8SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVh
cCkpIEpTVGVzdE5hbWVkQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwp
OwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgp
KTsKKyAgICAgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBK
U0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yPihnbG9iYWxPYmplY3QtPnZt
KCkuaGVhcCkpIEpTVGVzdE5hbWVkQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3Qs
IGltcGwpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7
CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogCkBAIC00Niw5ICs0Niw5IEBAIHB1YmxpYzoK
ICAgICB+SlNUZXN0TmFtZWRDb25zdHJ1Y3RvcigpOwogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNs
YXNzSW5mbyBzX2luZm87CiAKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
JnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBn
ZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKQEAg
LTYxLDcgKzYxLDcgQEAgcHJpdmF0ZToKICAgICBUZXN0TmFtZWRDb25zdHJ1Y3RvciogbV9pbXBs
OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8VGVzdE5hbWVkQ29uc3RydWN0b3I+KTsK
LSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJik7CisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkludGVy
Y2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBC
YXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CiAKQEAgLTg5LDIxICs4OSwyMSBAQCBjbGFzcyBKU1Rl
c3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlIDogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0M6
OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0
TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSogY3JlYXRlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCisgICAgc3RhdGljIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUq
IGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgSlNUZXN0TmFtZWRDb25z
dHJ1Y3RvclByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxK
U1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlPihnbG9iYWxEYXRhLmhlYXApKSBKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAg
SlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6
OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlPih2bS5oZWFwKSkg
SlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIHB0
cjsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsK
ICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZShK
U0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEs
IHN0cnVjdHVyZSkgeyB9CisgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUp
IDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQogcHJvdGVjdGVkOgog
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzOwogfTsKQEAgLTEyNSw5ICsxMjUsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlBy
b3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQ
cm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIGNvbnN0
IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBK
U0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogcHJvdGVjdGVkOgogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9i
amVjdDo6U3RydWN0dXJlRmxhZ3M7CkBAIC0xNDQsOSArMTQ0LDkgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gY29uc3RydWN0b3I7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBz
dGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogICAgIHN0YXRpYyBj
b25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCShyZXZpc2lvbiAx
NDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDEwICs2NCwxMCBAQCBKU1Rlc3ROb2RlQ29u
c3RydWN0b3I6OkpTVGVzdE5vZGVDb25zdHJ1CiAKIHZvaWQgSlNUZXN0Tm9kZUNvbnN0cnVjdG9y
OjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgp
KTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKICAgICBBU1NFUlQoaW5o
ZXJpdHMoJnNfaW5mbykpOwotICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdE5vZGVQcm90b3R5cGU6OnNlbGYoZXhl
YywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3Qo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJl
cigwKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdChl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3ROb2RlUHJv
dG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7
CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgs
IGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKIGJv
b2wgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkKQEAgLTEwOCwxNSArMTA4LDE1IEBAIEpTVGVzdE5vZGU6OkpTVGVzdE5vZGUoU3Ry
dWN0dXJlKiBzdHJ1Y3QKIHsKIH0KIAotdm9pZCBKU1Rlc3ROb2RlOjpmaW5pc2hDcmVhdGlvbihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEpTVGVzdE5vZGU6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsK
IH0KIAogSlNPYmplY3QqIEpTVGVzdE5vZGU6OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgcmV0dXJuIEpTVGVzdE5v
ZGVQcm90b3R5cGU6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgSlNU
ZXN0Tm9kZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xv
YmFsT2JqZWN0LCBKU05vZGVQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSkpOwor
ICAgIHJldHVybiBKU1Rlc3ROb2RlUHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZ2xvYmFs
T2JqZWN0LCBKU1Rlc3ROb2RlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwg
Z2xvYmFsT2JqZWN0LCBKU05vZGVQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSkp
OwogfQogCiBib29sIEpTVGVzdE5vZGU6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiBzbG90KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Tm9kZS5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw4ICszMyw4IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTTm9kZSBCYXNlOwogICAgIHN0
YXRpYyBKU1Rlc3ROb2RlKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxUZXN0Tm9kZT4gaW1wbCkKICAg
ICB7Ci0gICAgICAgIEpTVGVzdE5vZGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0
ZUNlbGw8SlNUZXN0Tm9kZT4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkpIEpTVGVz
dE5vZGUoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOwotICAgICAgICBwdHItPmZpbmlz
aENyZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNUZXN0Tm9k
ZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROb2RlPihnbG9i
YWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdE5vZGUoc3RydWN0dXJlLCBnbG9iYWxPYmplY3Qs
IGltcGwpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7
CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogCkBAIC00Myw5ICs0Myw5IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCos
IEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlw
dG9yJik7CiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAotICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpT
Qzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAg
ICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAK
IHByb3RlY3RlZDoKICAgICBKU1Rlc3ROb2RlKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxP
YmplY3QqLCBQYXNzUmVmUHRyPFRlc3ROb2RlPik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OkpTR2xvYmFsRGF0YSYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwog
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNWaXNpdENoaWxkcmVu
IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwogCkBAIC02MiwyMSArNjIsMjEgQEAgY2xhc3Mg
SlNUZXN0Tm9kZVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OgogcHVibGljOgogICAgIHR5cGVkZWYg
SlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNl
bGYoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpT
VGVzdE5vZGVQcm90b3R5cGUqIGNyZWF0ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgIHN0YXRpYyBKU1Rlc3ROb2RlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKICAgICB7Ci0gICAgICAgIEpTVGVzdE5vZGVQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9kZVByb3RvdHlwZT4oZ2xvYmFsRGF0YS5o
ZWFwKSkgSlNUZXN0Tm9kZVByb3RvdHlwZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHN0cnVj
dHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAg
IEpTVGVzdE5vZGVQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNl
bGw8SlNUZXN0Tm9kZVByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE5vZGVQcm90b3R5cGUodm0s
IGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IEpTQzo6
Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
JnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEpTVGVzdE5vZGVQ
cm90b3R5cGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdChn
bG9iYWxEYXRhLCBzdHJ1Y3R1cmUpIHsgfQorICAgIEpTVGVzdE5vZGVQcm90b3R5cGUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6
IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KIHByb3RlY3RlZDoKICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc1Zp
c2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CkBAIC05OCw5ICs5OCw5IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwq
LCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYp
OwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0
KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2Ny
aXB0b3ImKTsKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpT
Qzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAg
ICB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJ
bnN0YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
YmouY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDEwICsyMjgs
MTAgQEAgSlNUZXN0T2JqQ29uc3RydWN0b3I6OkpTVGVzdE9iakNvbnN0cnVjdAogCiB2b2lkIEpT
VGVzdE9iakNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
ZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgp
KTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwotICAgIHB1dERpcmVjdChleGVjLT5n
bG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdE9ialBy
b3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
OwotICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGgsIGpzTnVtYmVyKDEpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7
CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5
cGUsIEpTVGVzdE9ialByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9u
dEVudW0pOwogfQogCiBib29sIEpTVGVzdE9iakNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAgLTM2MSwxNSArMzYxLDE1IEBAIEpTVGVzdE9iajo6
SlNUZXN0T2JqKFN0cnVjdHVyZSogc3RydWN0dXIKIHsKIH0KIAotdm9pZCBKU1Rlc3RPYmo6OmZp
bmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgSlNUZXN0T2JqOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0
cygmc19pbmZvKSk7CiB9CiAKIEpTT2JqZWN0KiBKU1Rlc3RPYmo6OmNyZWF0ZVByb3RvdHlwZShF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgcmV0
dXJuIEpTVGVzdE9ialByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFs
T2JqZWN0LCBKU1Rlc3RPYmpQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3Qt
Pmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlw
ZSgpKSk7CisgICAgcmV0dXJuIEpTVGVzdE9ialByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCks
IGdsb2JhbE9iamVjdCwgSlNUZXN0T2JqUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFs
T2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBl
KCkpKTsKIH0KIAogdm9pZCBKU1Rlc3RPYmo6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCkBA
IC04NjUsNyArODY1LDcgQEAgSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUxKEV4ZWNT
dAogICAgICAgICByZXR1cm4gY2FjaGVkVmFsdWU7CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRp
Y19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0gKGltcGwtPmNhY2hlZEF0dHJpYnV0ZTEoKS5oYXNOb1ZhbHVlKCkgPyBqc051bGwoKSA6IGlt
cGwtPmNhY2hlZEF0dHJpYnV0ZTEoKS5qc1ZhbHVlKCkpOwotICAgIGNhc3RlZFRoaXMtPm1fY2Fj
aGVkQXR0cmlidXRlMS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBjYXN0ZWRUaGlzLCByZXN1bHQp
OworICAgIGNhc3RlZFRoaXMtPm1fY2FjaGVkQXR0cmlidXRlMS5zZXQoZXhlYy0+dm0oKSwgY2Fz
dGVkVGhpcywgcmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC04NzgsNyArODc4
LDcgQEAgSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUyKEV4ZWNTdAogICAgICAgICBy
ZXR1cm4gY2FjaGVkVmFsdWU7CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RP
YmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gKGltcGwtPmNh
Y2hlZEF0dHJpYnV0ZTIoKS5oYXNOb1ZhbHVlKCkgPyBqc051bGwoKSA6IGltcGwtPmNhY2hlZEF0
dHJpYnV0ZTIoKS5qc1ZhbHVlKCkpOwotICAgIGNhc3RlZFRoaXMtPm1fY2FjaGVkQXR0cmlidXRl
Mi5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBjYXN0ZWRUaGlzLCByZXN1bHQpOworICAgIGNhc3Rl
ZFRoaXMtPm1fY2FjaGVkQXR0cmlidXRlMi5zZXQoZXhlYy0+dm0oKSwgY2FzdGVkVGhpcywgcmVz
dWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNTQyLDcgKzE1NDIsNyBAQCB2b2lk
IHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1CiB7CiAgICAgVU5VU0VEX1BBUkFN
KGV4ZWMpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAganND
YXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBJZGVudGlmaWVyKGV4ZWMsICJjb25kaXRpb25hbEF0dHI0IiksIHZhbHVlKTsKKyAgICBqc0Nh
c3Q8SlNUZXN0T2JqKj4odGhpc09iamVjdCktPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlm
aWVyKGV4ZWMsICJjb25kaXRpb25hbEF0dHI0IiksIHZhbHVlKTsKIH0KIAogI2VuZGlmCkBAIC0x
NTUyLDcgKzE1NTIsNyBAQCB2b2lkIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWlu
IGNvbnN0cnVjdG9yCi0gICAganNDYXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpLT5wdXREaXJl
Y3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJjb25kaXRpb25hbEF0dHI1
IiksIHZhbHVlKTsKKyAgICBqc0Nhc3Q8SlNUZXN0T2JqKj4odGhpc09iamVjdCktPnB1dERpcmVj
dChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJjb25kaXRpb25hbEF0dHI1IiksIHZhbHVl
KTsKIH0KIAogI2VuZGlmCkBAIC0xNTYyLDcgKzE1NjIsNyBAQCB2b2lkIHNldEpTVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjZDb25zdHJ1CiB7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAganNDYXN0PEpTVGVzdE9iaio+
KHRoaXNPYmplY3QpLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4
ZWMsICJjb25kaXRpb25hbEF0dHI2IiksIHZhbHVlKTsKKyAgICBqc0Nhc3Q8SlNUZXN0T2JqKj4o
dGhpc09iamVjdCktPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJjb25k
aXRpb25hbEF0dHI2IiksIHZhbHVlKTsKIH0KIAogI2VuZGlmCkBAIC0xNTcyLDcgKzE1NzIsNyBA
QCB2b2lkIHNldEpTVGVzdE9iakFueUF0dHJpYnV0ZShFeGVjU3RhdGUqCiAgICAgVU5VU0VEX1BB
UkFNKGV4ZWMpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoq
Pih0aGlzT2JqZWN0KTsKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+
KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgU2NyaXB0VmFsdWUgbmF0aXZlVmFsdWUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB2YWx1ZSk7CisgICAgU2NyaXB0VmFsdWUgbmF0aXZlVmFsdWUoZXhlYy0+
dm0oKSwgdmFsdWUpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuOwogICAgIGltcGwtPnNldEFueUF0dHJpYnV0ZShuYXRpdmVWYWx1ZSk7CkBAIC0xNjQzLDcg
KzE2NDMsNyBAQCB2b2lkIHNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKEV4CiB7CiAg
ICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIG9iamVj
dAotICAgIGpzQ2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KGV4ZWMtPmds
b2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAicmVwbGFjZWFibGVBdHRyaWJ1dGUiKSwgdmFs
dWUpOworICAgIGpzQ2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KGV4ZWMt
PnZtKCksIElkZW50aWZpZXIoZXhlYywgInJlcGxhY2VhYmxlQXR0cmlidXRlIiksIHZhbHVlKTsK
IH0KIAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T2JqLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDggKzM0LDggQEAgcHVibGljOgogICAgIHR5cGVkZWYgSlNET01XcmFwcGVyIEJhc2U7CiAgICAg
c3RhdGljIEpTVGVzdE9iaiogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8VGVzdE9iaj4gaW1wbCkKICAg
ICB7Ci0gICAgICAgIEpTVGVzdE9iaiogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRl
Q2VsbDxKU1Rlc3RPYmo+KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLmhlYXApKSBKU1Rlc3RP
Ymooc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOwotICAgICAgICBwdHItPmZpbmlzaENy
ZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNUZXN0T2JqKiBw
dHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE9iaj4oZ2xvYmFsT2Jq
ZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RPYmooc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwp
OworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CiAgICAg
ICAgIHJldHVybiBwdHI7CiAgICAgfQogCkBAIC00Nyw5ICs0Nyw5IEBAIHB1YmxpYzoKICAgICB+
SlNUZXN0T2JqKCk7CiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAot
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJ
bmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAg
cmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwpAQCAtNzUsNyArNzUsNyBAQCBwcml2
YXRlOgogICAgIFRlc3RPYmoqIG1faW1wbDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RPYmooSlND
OjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8VGVzdE9iaj4pOwot
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpKU0dsb2JhbERhdGEmKTsKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpT
Qzo6T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIApA
QCAtMTAzLDIzICsxMDMsMjMgQEAgY2xhc3MgSlNUZXN0T2JqUHJvdG90eXBlIDogcHVibGljIEpT
Qzo6SgogcHVibGljOgogICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAg
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xv
YmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdE9ialByb3RvdHlwZSogY3JlYXRlKEpTQzo6
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgc3RhdGljIEpTVGVzdE9ialByb3Rv
dHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBKU1Rlc3RPYmpQ
cm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0T2Jq
UHJvdG90eXBlPihnbG9iYWxEYXRhLmhlYXApKSBKU1Rlc3RPYmpQcm90b3R5cGUoZ2xvYmFsRGF0
YSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9u
KGdsb2JhbERhdGEpOworICAgICAgICBKU1Rlc3RPYmpQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0T2JqUHJvdG90eXBlPih2bS5oZWFwKSkgSlNU
ZXN0T2JqUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0
ci0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIAogICAg
IHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3Bl
cnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9w
ZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkK
KyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0
YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBKU1Rlc3RPYmpQcm90b3R5cGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6
SlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpIHsgfQorICAgIEpTVGVzdE9i
alByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsg
fQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNWaXNpdENo
aWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwpAQCAtMTQxLDkgKzE0MSw5IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwog
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0
b3ImKTsKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVl
IHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9
CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
SlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0
YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAJKHJldmlzaW9uIDE0ODY1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDEwICsxMjUsMTAg
QEAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOgogCiB2b2lkIEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0
YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZXhlYy0+dm0oKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLSAgICBw
dXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90
eXBlLCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGds
b2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSks
IFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+
dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1Byb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkubGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVu
dW0pOwogfQogCiBib29sIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6
Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC0xNzAsMTUgKzE3MCwx
NSBAQCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpKU1Rlc3RPdmVyCiB7CiB9CiAKLXZv
aWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQordm9pZCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0
YSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cygm
c19pbmZvKSk7CiB9CiAKIEpTT2JqZWN0KiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpj
cmVhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQogewotICAgIHJldHVybiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBl
OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIEpTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmds
b2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgp
KSk7CisgICAgcmV0dXJuIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGU6OmNy
ZWF0ZShleGVjLT52bSgpLCBnbG9iYWxPYmplY3QsIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQogCiB2b2lkIEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmgJKHJldmlzaW9uIDE0
ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDggQEAg
cHVibGljOgogICAgIHR5cGVkZWYgSlNET01XcmFwcGVyIEJhc2U7CiAgICAgc3RhdGljIEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzPiBpbXBsKQogICAgIHsKLSAgICAgICAgSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9ycyogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzPihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKSkg
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyhzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1w
bCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRh
KCkpOworICAgICAgICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiBwdHIgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+KGds
b2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyhzdHJ1
Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAKQEAgLTQ2
LDkgKzQ2LDkgQEAgcHVibGljOgogICAgIH5KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKCk7
CiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBK
U0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGds
b2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJ
bmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAK
ICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU0dsb2JhbE9iamVjdCopOwpAQCAtNjEsNyArNjEsNyBAQCBwcml2YXRlOgogICAgIFRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiBtX2ltcGw7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyhKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiwgUGFzc1JlZlB0cjxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4pOwotICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNDOjpKU0dsb2JhbERhdGEmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTQzo6Vk0mKTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBK
U0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW50ZXJjZXB0c0dldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzOwogfTsKIApAQCAtODksMjEgKzg5LDIxIEBAIGNsYXNzIEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNQcm90b3QKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9i
amVjdCBCYXNlOwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICBzdGF0aWMgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSog
Y3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVD
ZWxsPEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGU+KGdsb2JhbERhdGEuaGVh
cCkpIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUoZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2Jh
bERhdGEpOworICAgICAgICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKiBw
dHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+Zmlu
aXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIAogICAgIHN0YXRp
YyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBz
dGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogcHJpdmF0ZToKLSAg
ICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKEpTQzo6SlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKSB7IH0K
KyAgICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpT
Tm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9
OwpAQCAtMTI1LDkgKzEyNSw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1l
LCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFt
ZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFz
c0luZm8gc19pbmZvOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1
Y3R1cmVGbGFnczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTAgKzg4LDEwIEBAIEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnMKIAogdm9pZCBKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRl
KiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZXhlYy0+dm0oKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLSAgICBwdXRE
aXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBl
LCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6OnNlbGYoZXhl
YywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3Qo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJl
cigzKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdChl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0
KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMyksIFJlYWRPbmx5IHwgRG9udERl
bGV0ZSB8IERvbnRFbnVtKTsKIH0KIAogYm9vbCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCkBAIC0xNDcsMTUgKzE0NywxNSBAQCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2U6OkpTCiB7CiB9CiAKLXZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlOjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQog
ewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogfQogCiBKU09i
amVjdCogSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpjcmVhdGVQcm90b3R5
cGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAg
IHJldHVybiBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6OmNy
ZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0
LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5
cGUoKSkpOworICAgIHJldHVybiBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQ
cm90b3R5cGU6OmNyZWF0ZShleGVjLT52bSgpLCBnbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9i
amVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgp
KSk7CiB9CiAKIHZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpkZXN0
cm95KEpTQzo6SlNDZWxsKiBjZWxsKQpAQCAtMjExLDcgKzIxMSw3IEBAIEpTVmFsdWUganNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXIKICAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlOwog
ICAgIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGltcGwgPSBzdGF0aWNfY2Fz
dDxUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oY2FzdGVkVGhpcy0+aW1wbCgp
KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwtPmNhY2hlZFZhbHVlKCkgPyBpbXBsLT5jYWNo
ZWRWYWx1ZSgpLT5kZXNlcmlhbGl6ZShleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
MCkgOiBqc051bGwoKTsKLSAgICBjYXN0ZWRUaGlzLT5tX2NhY2hlZFZhbHVlLnNldChleGVjLT5n
bG9iYWxEYXRhKCksIGNhc3RlZFRoaXMsIHJlc3VsdCk7CisgICAgY2FzdGVkVGhpcy0+bV9jYWNo
ZWRWYWx1ZS5zZXQoZXhlYy0+dm0oKSwgY2FzdGVkVGhpcywgcmVzdWx0KTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCkBAIC0yMzQsNyArMjM0LDcgQEAgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcgogICAgICAgICByZXR1cm4gY2FjaGVkVmFsdWU7CiAgICAgVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIEpT
VmFsdWUgcmVzdWx0ID0gaW1wbC0+Y2FjaGVkUmVhZG9ubHlWYWx1ZSgpID8gaW1wbC0+Y2FjaGVk
UmVhZG9ubHlWYWx1ZSgpLT5kZXNlcmlhbGl6ZShleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgMCkgOiBqc051bGwoKTsKLSAgICBjYXN0ZWRUaGlzLT5tX2NhY2hlZFJlYWRvbmx5VmFs
dWUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgY2FzdGVkVGhpcywgcmVzdWx0KTsKKyAgICBjYXN0
ZWRUaGlzLT5tX2NhY2hlZFJlYWRvbmx5VmFsdWUuc2V0KGV4ZWMtPnZtKCksIGNhc3RlZFRoaXMs
IHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAkocmV2aXNpb24gMTQ4
NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICsz
Niw4IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRE9NV3JhcHBlciBCYXNlOwogICAgIHN0YXRp
YyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGNyZWF0ZShKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVm
UHRyPFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+IGltcGwpCiAgICAgewotICAg
ICAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHB0ciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlPihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKSkgSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKLSAgICAg
ICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7CisgICAg
ICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogcHRyID0gbmV3IChOb3RO
dWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2U+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICAgICAgcHRyLT5m
aW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwogICAgICAgICByZXR1cm4gcHRyOwog
ICAgIH0KIApAQCAtNDksOSArNDksOSBAQCBwdWJsaWM6CiAgICAgfkpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZSgpOwogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBz
X2luZm87CiAKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6
OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKQEAgLTY4LDcgKzY4
LDcgQEAgcHJpdmF0ZToKICAgICBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBt
X2ltcGw7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPFRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+KTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTQzo6SlNHbG9iYWxEYXRhJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7
CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc1Zpc2l0Q2hpbGRy
ZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CiAKQEAgLTk2LDIzICs5NiwyMyBAQCBjbGFz
cyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhCiBwdWJsaWM6CiAgICAgdHlwZWRl
ZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCog
c2VsZihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMg
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKiBjcmVhdGUoSlND
OjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBzdGF0aWMgSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKICAgICB7Ci0gICAgICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBy
b3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU+KGdsb2JhbERhdGEuaGVhcCkpIEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZShnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xv
YmFsRGF0YSk7CisgICAgICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBy
b3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3Ry
dWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVy
biBwdHI7CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsK
LSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZVByb3RvdHlwZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFs
T2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkgeyB9CisgICAgSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qo
dm0sIHN0cnVjdHVyZSkgeyB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6
Ok92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CkBAIC0x
MzQsOSArMTM0LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6
UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6
OlByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBz
X2luZm87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6
U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwor
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8pOwogICAgIH0KIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6
SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgRE9NQ29uc3RydWN0b3JPYmplY3Q6OlN0cnVjdHVyZUZs
YWdzOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFR5cGVkZWZzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05MCwxMCArOTAsMTAgQEAgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rv
cjo6SlNUZXN0VHlwZWRlZgogCiB2b2lkIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I6OmZpbmlz
aENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwogICAgIEFTU0VSVChpbmhlcml0cygm
c19pbmZvKSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGU6OnNlbGYoZXhlYywg
Z2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3QoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigy
KSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdChleGVj
LT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RUeXBlZGVmc1By
b3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
OworICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
LCBqc051bWJlcigyKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCiBi
b29sIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90JiBzbG90KQpAQCAtMTU3LDE1ICsxNTcsMTUgQEAgSlNUZXN0VHlwZWRlZnM6OkpTVGVz
dFR5cGVkZWZzKFN0cnVjdHVyZQogewogfQogCi12b2lkIEpTVGVzdFR5cGVkZWZzOjpmaW5pc2hD
cmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEpTVGVzdFR5cGVkZWZzOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0
cygmc19pbmZvKSk7CiB9CiAKIEpTT2JqZWN0KiBKU1Rlc3RUeXBlZGVmczo6Y3JlYXRlUHJvdG90
eXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAg
ICByZXR1cm4gSlNUZXN0VHlwZWRlZnNQcm90b3R5cGU6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRh
KCksIGdsb2JhbE9iamVjdCwgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qt
Pm9iamVjdFByb3RvdHlwZSgpKSk7CisgICAgcmV0dXJuIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBl
OjpjcmVhdGUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKIHZvaWQgSlNUZXN0VHlwZWRlZnM6
OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuaAkocmV2aXNp
b24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFR5cGVkZWZzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDggQEAgcHVibGljOgog
ICAgIHR5cGVkZWYgSlNET01XcmFwcGVyIEJhc2U7CiAgICAgc3RhdGljIEpTVGVzdFR5cGVkZWZz
KiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUGFzc1JlZlB0cjxUZXN0VHlwZWRlZnM+IGltcGwpCiAgICAgewotICAgICAg
ICBKU1Rlc3RUeXBlZGVmcyogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxK
U1Rlc3RUeXBlZGVmcz4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkpIEpTVGVzdFR5
cGVkZWZzKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKLSAgICAgICAgcHRyLT5maW5p
c2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEpTVGVzdFR5
cGVkZWZzKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFR5cGVk
ZWZzPihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdFR5cGVkZWZzKHN0cnVjdHVyZSwg
Z2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxP
YmplY3QtPnZtKCkpOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIApAQCAtNDcsOSArNDcs
OSBAQCBwdWJsaWM6CiAgICAgfkpTVGVzdFR5cGVkZWZzKCk7CiAgICAgc3RhdGljIGNvbnN0IEpT
Qzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpT
Qzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCop
OwpAQCAtNjIsNyArNjIsNyBAQCBwcml2YXRlOgogICAgIFRlc3RUeXBlZGVmcyogbV9pbXBsOwog
cHJvdGVjdGVkOgogICAgIEpTVGVzdFR5cGVkZWZzKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9i
YWxPYmplY3QqLCBQYXNzUmVmUHRyPFRlc3RUeXBlZGVmcz4pOwotICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNDOjpKU0dsb2JhbERhdGEmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6
Vk0mKTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5
U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdz
OwogfTsKIApAQCAtOTAsMjMgKzkwLDIzIEBAIGNsYXNzIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBl
IDogcHVibGljIEoKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBC
YXNlOwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSog
Y3JlYXRlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgc3RhdGljIEpT
VGVzdFR5cGVkZWZzUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7Ci0g
ICAgICAgIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6
YWxsb2NhdGVDZWxsPEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlPihnbG9iYWxEYXRhLmhlYXApKSBK
U1Rlc3RUeXBlZGVmc1Byb3RvdHlwZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVy
ZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEpT
VGVzdFR5cGVkZWZzUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVD
ZWxsPEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0VHlwZWRlZnNQcm90
b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogCiAgICAgc3RhdGljIGNv
bnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBK
U0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwg
SlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEpT
VGVzdFR5cGVkZWZzUHJvdG90eXBlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9u
RmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKSB7IH0KKyAgICBKU1Rlc3RUeXBlZGVm
c1Byb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsg
fQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7
CiB9OwpAQCAtMTI4LDkgKzEyOCw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlO
YW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5
TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBzdGF0aWMgY29uc3QgSlNDOjpD
bGFzc0luZm8gc19pbmZvOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAm
c19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpT
dHJ1Y3R1cmVGbGFnczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5j
cHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2Fy
cmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTQgKzM4LDE0IEBAIG5hbWVzcGFjZSBKU0Mg
ewogY29uc3QgQ2xhc3NJbmZvIFJ1bnRpbWVBcnJheTo6c19pbmZvID0geyAiUnVudGltZUFycmF5
IiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShSdW50aW1lQXJyYXkp
IH07CiAKIFJ1bnRpbWVBcnJheTo6UnVudGltZUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBKU0FycmF5KGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0
dXJlLCAwKQorICAgIDogSlNBcnJheShleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIDApCiAgICAgLCBt
X2FycmF5KDApCiB7CiB9CiAKLXZvaWQgUnVudGltZUFycmF5OjpmaW5pc2hDcmVhdGlvbihKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEJpbmRpbmdzOjpBcnJheSogYXJyYXkpCit2b2lkIFJ1bnRp
bWVBcnJheTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBCaW5kaW5nczo6QXJyYXkqIGFycmF5KQog
ewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogICAgIG1fYXJy
YXkgPSBhcnJheTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXku
aAkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIsOCBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFdl
IG5lZWQgdG8gcGFzcyBpbiB0aGUgcmlnaHQgZ2xvYmFsIG9iamVjdCBmb3IgImFycmF5Ii4KICAg
ICAgICAgU3RydWN0dXJlKiBkb21TdHJ1Y3R1cmUgPSBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9N
U3RydWN0dXJlPFJ1bnRpbWVBcnJheT4oZXhlYyk7CiAgICAgICAgIFJ1bnRpbWVBcnJheSogcnVu
dGltZUFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UnVudGltZUFycmF5PigqZXhl
Yy0+aGVhcCgpKSkgUnVudGltZUFycmF5KGV4ZWMsIGRvbVN0cnVjdHVyZSk7Ci0gICAgICAgIHJ1
bnRpbWVBcnJheS0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBhcnJheSk7Ci0g
ICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5oZWFwLmFkZEZpbmFsaXplcihydW50aW1lQXJyYXks
IGRlc3Ryb3kpOworICAgICAgICBydW50aW1lQXJyYXktPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZt
KCksIGFycmF5KTsKKyAgICAgICAgZXhlYy0+dm0oKS5oZWFwLmFkZEZpbmFsaXplcihydW50aW1l
QXJyYXksIGRlc3Ryb3kpOwogICAgICAgICByZXR1cm4gcnVudGltZUFycmF5OwogICAgIH0KIApA
QCAtNzMsMTMgKzczLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+
YXJyYXlQcm90b3R5cGUoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxE
YXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvLCBBcnJheUNsYXNzKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBBcnJheUNsYXNzKTsKICAgICB9CiAKIHByb3Rl
Y3RlZDoKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYsIEJpbmRpbmdzOjpB
cnJheSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBCaW5kaW5nczo6QXJyYXkqKTsK
IAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm8gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNBcnJh
eTo6U3RydWN0dXJlRmxhZ3M7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1l
X21ldGhvZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
bWV0aG9kLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1
bnRpbWVfbWV0aG9kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgsOSBAQCBSdW50aW1l
TWV0aG9kOjpSdW50aW1lTWV0aG9kKEpTR2xvYmFsT2JqCiB7CiB9CiAKLXZvaWQgUnVudGltZU1l
dGhvZDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTdHJp
bmcmIGlkZW50KQordm9pZCBSdW50aW1lTWV0aG9kOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIGNv
bnN0IFN0cmluZyYgaWRlbnQpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0
YSwgaWRlbnQpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBpZGVudCk7CiAgICAgQVNT
RVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdl
L3J1bnRpbWVfbWV0aG9kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1
bnRpbWVfbWV0aG9kLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9ydW50aW1lX21ldGhvZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgUnVudGltZU1ldGhvZCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFN0
cmluZyYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZCogbWV0aG9kKQogICAgIHsKICAgICAgICAgUnVu
dGltZU1ldGhvZCogcnVudGltZU1ldGhvZCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFJ1
bnRpbWVNZXRob2Q+KCpleGVjLT5oZWFwKCkpKSBSdW50aW1lTWV0aG9kKGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlLCBtZXRob2QpOwotICAgICAgICBydW50aW1lTWV0aG9kLT5maW5pc2hDcmVhdGlv
bihleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUpOworICAgICAgICBydW50aW1lTWV0aG9kLT5maW5p
c2hDcmVhdGlvbihleGVjLT52bSgpLCBuYW1lKTsKICAgICAgICAgcmV0dXJuIHJ1bnRpbWVNZXRo
b2Q7CiAgICAgfQogCkBAIC01MywxNCArNTMsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
Z2xvYmFsT2JqZWN0LT5mdW5jdGlvblByb3RvdHlwZSgpOwogICAgIH0KIAotICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogcHJvdGVjdGVkOgog
ICAgIFJ1bnRpbWVNZXRob2QoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBCaW5kaW5nczo6
TWV0aG9kKik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmLCBjb25zdCBT
dHJpbmcmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgY29uc3QgU3RyaW5nJik7CiAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgSW50ZXJuYWxGdW5jdGlvbjo6U3RydWN0dXJlRmxhZ3M7CiAgICAgc3Rh
dGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAkocmV2aXNpb24gMTQ4NjU1KQor
KysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzgsMTQgKzM4LDE0IEBAIG5hbWVzcGFjZSBCaW5kaW5ncyB7CiBjb25zdCBDbGFzc0lu
Zm8gUnVudGltZU9iamVjdDo6c19pbmZvID0geyAiUnVudGltZU9iamVjdCIsICZCYXNlOjpzX2lu
Zm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoUnVudGltZU9iamVjdCkgfTsKIAogUnVudGlt
ZU9iamVjdDo6UnVudGltZU9iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxJbnN0YW5jZT4gaW5zdGFu
Y2UpCi0gICAgOiBKU0Rlc3RydWN0aWJsZU9iamVjdChnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEo
KSwgc3RydWN0dXJlKQorICAgIDogSlNEZXN0cnVjdGlibGVPYmplY3QoZ2xvYmFsT2JqZWN0LT52
bSgpLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX2luc3RhbmNlKGluc3RhbmNlKQogewogfQogCiB2b2lk
IFJ1bnRpbWVPYmplY3Q6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRh
KCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CiAgICAg
QVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3J1bnRpbWVfb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdl
L3J1bnRpbWVfb2JqZWN0LmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9ydW50aW1lX29iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw5ICs2OCw5IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCk7CiAg
ICAgfQogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAg
ICAgfQogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9y
b290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9yb290
LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
cm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgUGFzc1JlZlB0cjxSb290
T2JqZWN0PiBSb290T2JqZWN0OjpjcmVhdAogUm9vdE9iamVjdDo6Um9vdE9iamVjdChjb25zdCB2
b2lkKiBuYXRpdmVIYW5kbGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgOiBt
X2lzVmFsaWQodHJ1ZSkKICAgICAsIG1fbmF0aXZlSGFuZGxlKG5hdGl2ZUhhbmRsZSkKLSAgICAs
IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3Qp
CisgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdCkK
IHsKICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KTsKICAgICByb290T2JqZWN0U2V0KCktPmFkZCh0
aGlzKTsKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIFJvb3RPYmplY3Q6OmdjUHJvdGVjdChKU09i
amVjdCoganNPCiAgICAgQVNTRVJUKG1faXNWYWxpZCk7CiAgICAgCiAgICAgaWYgKCFtX3Byb3Rl
Y3RDb3VudFNldC5jb250YWlucyhqc09iamVjdCkpIHsKLSAgICAgICAgSlNDOjpKU0xvY2tIb2xk
ZXIgaG9sZGVyKCZnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNDOjpK
U0xvY2tIb2xkZXIgaG9sZGVyKCZnbG9iYWxPYmplY3QoKS0+dm0oKSk7CiAgICAgICAgIEpTQzo6
Z2NQcm90ZWN0KGpzT2JqZWN0KTsKICAgICB9CiAgICAgbV9wcm90ZWN0Q291bnRTZXQuYWRkKGpz
T2JqZWN0KTsKQEAgLTE1NSw3ICsxNTUsNyBAQCB2b2lkIFJvb3RPYmplY3Q6OmdjVW5wcm90ZWN0
KEpTT2JqZWN0KiBqCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3Byb3RlY3RDb3VudFNl
dC5jb3VudChqc09iamVjdCkgPT0gMSkgewotICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBob2xk
ZXIoJmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBKU0M6OkpTTG9ja0hv
bGRlciBob2xkZXIoJmdsb2JhbE9iamVjdCgpLT52bSgpKTsKICAgICAgICAgSlNDOjpnY1VucHJv
dGVjdChqc09iamVjdCk7CiAgICAgfQogICAgIG1fcHJvdGVjdENvdW50U2V0LnJlbW92ZShqc09i
amVjdCk7CkBAIC0xODEsMTAgKzE4MSwxMCBAQCBKU0dsb2JhbE9iamVjdCogUm9vdE9iamVjdDo6
Z2xvYmFsT2JqZWN0CiAKIHZvaWQgUm9vdE9iamVjdDo6dXBkYXRlR2xvYmFsT2JqZWN0KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgbV9nbG9iYWxPYmplY3Quc2V0KGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QpOworICAgIG1fZ2xvYmFsT2JqZWN0
LnNldChnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdCk7CiB9CiAKLXZvaWQgUm9vdE9i
amVjdDo6YWRkUnVudGltZU9iamVjdChKU0dsb2JhbERhdGEmLCBSdW50aW1lT2JqZWN0KiBvYmpl
Y3QpCit2b2lkIFJvb3RPYmplY3Q6OmFkZFJ1bnRpbWVPYmplY3QoVk0mLCBSdW50aW1lT2JqZWN0
KiBvYmplY3QpCiB7CiAgICAgQVNTRVJUKG1faXNWYWxpZCk7CiAgICAgd2Vha0FkZChtX3J1bnRp
bWVPYmplY3RzLCBvYmplY3QsIEpTQzo6UGFzc1dlYWs8UnVudGltZU9iamVjdD4ob2JqZWN0LCB0
aGlzKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9yb290LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5oCShyZXZpc2lvbiAx
NDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9yb290LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QoKSBjb25zdDsKICAgICB2b2lkIHVwZGF0ZUdsb2JhbE9iamVjdChKU0dsb2JhbE9i
amVjdCopOwogCi0gICAgdm9pZCBhZGRSdW50aW1lT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFJ1bnRp
bWVPYmplY3QqKTsKKyAgICB2b2lkIGFkZFJ1bnRpbWVPYmplY3QoVk0mLCBSdW50aW1lT2JqZWN0
Kik7CiAgICAgdm9pZCByZW1vdmVSdW50aW1lT2JqZWN0KFJ1bnRpbWVPYmplY3QqKTsKIAogICAg
IHN0cnVjdCBJbnZhbGlkYXRpb25DYWxsYmFjayB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvYy9DUnVudGltZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9jL0NSdW50aW1lT2JqZWN0LmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9jL0NSdW50aW1lT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDkgKzU0LDkg
QEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKIHByaXZh
dGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAkocmV2aXNpb24g
MTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNywxMyArMTE3LDEzIEBAIHB1YmxpYzoKICAgICAgICAgLy8gV2UgbmVl
ZCB0byBwYXNzIGluIHRoZSByaWdodCBnbG9iYWwgb2JqZWN0IGZvciAiaSIuCiAgICAgICAgIFN0
cnVjdHVyZSogZG9tU3RydWN0dXJlID0gV2ViQ29yZTo6ZGVwcmVjYXRlZEdldERPTVN0cnVjdHVy
ZTxDUnVudGltZU1ldGhvZD4oZXhlYyk7CiAgICAgICAgIENSdW50aW1lTWV0aG9kKiBydW50aW1l
TWV0aG9kID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8Q1J1bnRpbWVNZXRob2Q+KCpleGVj
LT5oZWFwKCkpKSBDUnVudGltZU1ldGhvZChnbG9iYWxPYmplY3QsIGRvbVN0cnVjdHVyZSwgbWV0
aG9kKTsKLSAgICAgICAgcnVudGltZU1ldGhvZC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFs
RGF0YSgpLCBuYW1lKTsKKyAgICAgICAgcnVudGltZU1ldGhvZC0+ZmluaXNoQ3JlYXRpb24oZXhl
Yy0+dm0oKSwgbmFtZSk7CiAgICAgICAgIHJldHVybiBydW50aW1lTWV0aG9kOwogICAgIH0KIAot
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQor
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAog
ICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpAQCAtMTM0LDkgKzEzNCw5IEBAIHBy
aXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICB7Ci0gICAgICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIG5hbWUpOworICAgICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSwgbmFtZSk7CiAgICAgICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiAgICAg
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvanNjL0JyaWRnZUpTQy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0MuY3BwCShyZXZpc2lv
biAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvanNjL0JyaWRnZUpTQy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgSlNPYmplY3QqIEluc3RhbmNlOjpjcmVhdGVS
dW50aW1lT2JqZWN0KAogICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFJ1bnRpbWVP
YmplY3QqIG5ld09iamVjdCA9IG5ld1J1bnRpbWVPYmplY3QoZXhlYyk7CiAgICAgbV9ydW50aW1l
T2JqZWN0ID0gUGFzc1dlYWs8UnVudGltZU9iamVjdD4obmV3T2JqZWN0KTsKLSAgICBtX3Jvb3RP
YmplY3QtPmFkZFJ1bnRpbWVPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBuZXdPYmplY3QpOwor
ICAgIG1fcm9vdE9iamVjdC0+YWRkUnVudGltZU9iamVjdChleGVjLT52bSgpLCBuZXdPYmplY3Qp
OwogICAgIHJldHVybiBuZXdPYmplY3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9vYmpjL09iakNSdW50aW1lT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YnJpZGdlL29iamMvT2JqQ1J1bnRpbWVPYmplY3QuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291
cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvT2JqQ1J1bnRpbWVPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNTEsOSArNTEsOSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZv
IHNfaW5mbzsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8p
OwogICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29i
amNfaW5zdGFuY2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMv
b2JqY19pbnN0YW5jZS5tbQkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYnJp
ZGdlL29iamMvb2JqY19pbnN0YW5jZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTg3LDEzICsxODcs
MTMgQEAgcHVibGljOgogICAgICAgICAvLyBXZSBuZWVkIHRvIHBhc3MgaW4gdGhlIHJpZ2h0IGds
b2JhbCBvYmplY3QgZm9yICJpIi4KICAgICAgICAgU3RydWN0dXJlKiBkb21TdHJ1Y3R1cmUgPSBX
ZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPE9iakNSdW50aW1lTWV0aG9kPihleGVj
KTsKICAgICAgICAgT2JqQ1J1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxPYmpDUnVudGltZU1ldGhvZD4oKmV4ZWMtPmhlYXAoKSkpIE9iakNS
dW50aW1lTWV0aG9kKGdsb2JhbE9iamVjdCwgZG9tU3RydWN0dXJlLCBtZXRob2QpOwotICAgICAg
ICBydW50aW1lTWV0aG9kLT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUp
OworICAgICAgICBydW50aW1lTWV0aG9kLT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpLCBuYW1l
KTsKICAgICAgICAgcmV0dXJuIHJ1bnRpbWVNZXRob2Q7CiAgICAgfQogCi0gICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpAQCAtMjA2LDkgKzIwNiw5IEBAIHByaXZh
dGU6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYgdm0sIGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKGdsb2JhbERhdGEsIG5hbWUpOworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSwgbmFtZSk7CiAgICAgICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiAgICAgfQog
fTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5oCShyZXZp
c2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDkgKzExMiw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCk7CiAgICAgfQogCi0gICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCShyZXZp
c2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTE5MSw3ICsxOTEsNyBAQCB1bnNpZ25lZCBpbnQgT2JqY0Fy
cmF5OjpnZXRMZW5ndGgoKSBjb25zCiBjb25zdCBDbGFzc0luZm8gT2JqY0ZhbGxiYWNrT2JqZWN0
SW1wOjpzX2luZm8gPSB7ICJPYmpjRmFsbGJhY2tPYmplY3QiLCAmQmFzZTo6c19pbmZvLCAwLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKE9iamNGYWxsYmFja09iamVjdEltcCkgfTsKIAogT2JqY0Zh
bGxiYWNrT2JqZWN0SW1wOjpPYmpjRmFsbGJhY2tPYmplY3RJbXAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE9iamNJbnN0YW5jZSogaSwgY29uc3Qg
U3RyaW5nJiBwcm9wZXJ0eU5hbWUpCi0gICAgOiBKU0Rlc3RydWN0aWJsZU9iamVjdChnbG9iYWxP
YmplY3QtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKQorICAgIDogSlNEZXN0cnVjdGlibGVPYmpl
Y3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBzdHJ1Y3R1cmUpCiAgICAgLCBfaW5zdGFuY2UoaSkKICAg
ICAsIG1faXRlbShwcm9wZXJ0eU5hbWUpCiB7CkBAIC0yMDQsNyArMjA0LDcgQEAgdm9pZCBPYmpj
RmFsbGJhY2tPYmplY3RJbXA6OmRlc3Ryb3koSlNDZQogCiB2b2lkIE9iamNGYWxsYmFja09iamVj
dEltcDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7CisgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICBBU1NFUlQoaW5o
ZXJpdHMoJnNfaW5mbykpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRf
aW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9p
bnN0YW5jZS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9x
dC9xdF9pbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDkgKzYwLDkgQEAgcHVibGlj
OgogICAgIAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsICBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCAgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKIHByb3RlY3Rl
ZDoKQEAgLTkxLDcgKzkxLDcgQEAgUXRJbnN0YW5jZTo6UXRJbnN0YW5jZShRT2JqZWN0KiBvLCBQ
YXNzUgogCiBRdEluc3RhbmNlOjp+UXRJbnN0YW5jZSgpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxv
Y2soV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsK
IAogICAgIGNhY2hlZEluc3RhbmNlcy5yZW1vdmUobV9oYXNoa2V5KTsKIApAQCAtMTE4LDcgKzEx
OCw3IEBAIFF0SW5zdGFuY2U6On5RdEluc3RhbmNlKCkKIAogUGFzc1JlZlB0cjxRdEluc3RhbmNl
PiBRdEluc3RhbmNlOjpnZXRRdEluc3RhbmNlKFFPYmplY3QqIG8sIFBhc3NSZWZQdHI8Um9vdE9i
amVjdD4gcm9vdE9iamVjdCwgVmFsdWVPd25lcnNoaXAgb3duZXJzaGlwKQogewotICAgIEpTTG9j
a0hvbGRlciBsb2NrKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29t
bW9uVk0oKSk7CiAKICAgICBmb3JlYWNoIChRdEluc3RhbmNlKiBpbnN0YW5jZSwgY2FjaGVkSW5z
dGFuY2VzLnZhbHVlcyhvKSkKICAgICAgICAgaWYgKGluc3RhbmNlLT5yb290T2JqZWN0KCkgPT0g
cm9vdE9iamVjdCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMy
LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjZW5kaWYKIAotI2luY2x1
ZGUgPHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg+CisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvT3BlcmF0aW9ucy5oPgogCiAjaWYgRU5BQkxFKE1JQ1JPREFUQSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0
L0F0b21pY1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKLSAgICBjbGFzcyBKU0dsb2JhbERh
dGE7CisgICAgY2xhc3MgVk07CiAgICAgY2xhc3MgU2xvdFZpc2l0b3I7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAJKHJldmlzaW9u
IDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDA0LDE0ICs0MDQsMTQgQEAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6VGFzazo6flRhc2soKQogewogfQogCi1KU0M6OkpTR2xvYmFsRGF0YSogU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6Z2xvYmFsRGF0YSgpCitKU0M6OlZNKiBTY3JpcHRFeGVjdXRpb25Db250
ZXh0Ojp2bSgpCiB7CiAgICAgIGlmIChpc0RvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBKU0RP
TVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCk7CisgICAgICAgIHJldHVybiBKU0RPTVdpbmRv
dzo6Y29tbW9uVk0oKTsKIAogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgIGlmIChpc1dvcmtlckNv
bnRleHQoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPih0aGlz
KS0+c2NyaXB0KCktPmdsb2JhbERhdGEoKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdv
cmtlckNvbnRleHQqPih0aGlzKS0+c2NyaXB0KCktPnZtKCk7CiAjZW5kaWYKIAogICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogY2xhc3MgRXhlY1N0YXRlOwotY2xhc3MgSlNHbG9iYWxEYXRhOwor
Y2xhc3MgVk07CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE0Myw3ICsxNDMsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZW1vdmVUaW1lb3V0KGludCB0aW1lb3V0SWQpIHsgbV90aW1lb3V0
cy5yZW1vdmUodGltZW91dElkKTsgfQogICAgIERPTVRpbWVyKiBmaW5kVGltZW91dChpbnQgdGlt
ZW91dElkKSB7IHJldHVybiBtX3RpbWVvdXRzLmdldCh0aW1lb3V0SWQpOyB9CiAKLSAgICBKU0M6
OkpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpOworICAgIEpTQzo6Vk0qIHZtKCk7CiAKICAgICAv
LyBJbnRlcnZhbCBpcyBpbiBzZWNvbmRzLgogICAgIHZvaWQgYWRqdXN0TWluaW11bVRpbWVySW50
ZXJ2YWwoZG91YmxlIG9sZE1pbmltdW1UaW1lckludGVydmFsKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTUwLDkgKzU1MCw5IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmUK
ICAgICBtX2ltYWdlQnVmZmVyLT5jb250ZXh0KCktPnNldFN0cm9rZVRoaWNrbmVzcygxKTsKICAg
ICBtX2NvbnRleHRTdGF0ZVNhdmVyID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIoKm1faW1hZ2VCdWZmZXItPmNvbnRleHQoKSkpOwogCi0gICAgSlNDOjpKU0xvY2tIb2xk
ZXIgbG9jayhzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmdsb2JhbERhdGEoKSk7CisgICAgSlND
OjpKU0xvY2tIb2xkZXIgbG9jayhzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnZtKCkpOwogICAg
IHNpemVfdCBudW1CeXRlcyA9IDQgKiBtX2ltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKS53aWR0
aCgpICogbV9pbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7Ci0gICAgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5nbG9iYWxEYXRhKCktPmhlYXAucmVwb3J0RXh0cmFNZW1vcnlD
b3N0KG51bUJ5dGVzKTsKKyAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnZtKCktPmhlYXAu
cmVwb3J0RXh0cmFNZW1vcnlDb3N0KG51bUJ5dGVzKTsKIAogI2lmIFVTRShJT1NVUkZBQ0VfQ0FO
VkFTX0JBQ0tJTkdfU1RPUkUpIHx8IChFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpKQogICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250
ZXh0LT5pczJkKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUxvYWRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3Bw
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUxvYWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDkgKzc5LDkgQEAgdm9pZCBIVE1MSW1hZ2VMb2Fk
ZXI6Om5vdGlmeUZpbmlzaGVkKENhYwogICAgIGJvb2wgbG9hZEVycm9yID0gY2FjaGVkSW1hZ2Ut
PmVycm9yT2NjdXJyZWQoKSB8fCBjYWNoZWRJbWFnZS0+cmVzcG9uc2UoKS5odHRwU3RhdHVzQ29k
ZSgpID49IDQwMDsKICAgICBpZiAoIWxvYWRFcnJvcikgewogICAgICAgICBpZiAoIWVsZW1lbnQt
PmluRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgSlNDOjpKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEgPSBKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpOwotICAgICAgICAgICAg
SlNDOjpKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxEYXRhKTsKLSAgICAgICAgICAgIGdsb2JhbERh
dGEtPmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KGNhY2hlZEltYWdlLT5lbmNvZGVkU2l6ZSgp
KTsKKyAgICAgICAgICAgIEpTQzo6Vk0qIHZtID0gSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgp
OworICAgICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgICAgICAgICB2
bS0+aGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoY2FjaGVkSW1hZ2UtPmVuY29kZWRTaXplKCkp
OwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvU2Ny
aXB0QXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
U2NyaXB0QXJndW1lbnRzLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL1NjcmlwdEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQx
LDcgQEAgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IFNjcmlwdEFyZ3VtZQogfQogCiBTY3Jp
cHRBcmd1bWVudHM6OlNjcmlwdEFyZ3VtZW50cyhTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIFZl
Y3RvcjxTY3JpcHRWYWx1ZT4mIGFyZ3VtZW50cykKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KHNjcmlw
dFN0YXRlLT5nbG9iYWxEYXRhKCksIHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkp
CisgICAgOiBtX2dsb2JhbE9iamVjdChzY3JpcHRTdGF0ZS0+dm0oKSwgc2NyaXB0U3RhdGUtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSkKIHsKICAgICBtX2FyZ3VtZW50cy5zd2FwKGFyZ3VtZW50cyk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2VCYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2VC
YXNlLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24v
SWNvbkRhdGFiYXNlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEzICs0NywxMyBAQCBi
b29sIEljb25EYXRhYmFzZUJhc2U6Om9wZW4oY29uc3QgU3RyaW5nCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1zdGF0aWMgSWNvbkRhdGFiYXNlQmFzZSogZ2xvYmFsRGF0YWJhc2UgPSAwOworc3Rh
dGljIEljb25EYXRhYmFzZUJhc2UqIHZtYmFzZSA9IDA7CiAKIC8vIEZ1bmN0aW9ucyB0byBnZXQv
c2V0IHRoZSBnbG9iYWwgaWNvbiBkYXRhYmFzZS4KIEljb25EYXRhYmFzZUJhc2UmIGljb25EYXRh
YmFzZSgpCiB7Ci0gICAgaWYgKGdsb2JhbERhdGFiYXNlKQotICAgICAgICByZXR1cm4gKmdsb2Jh
bERhdGFiYXNlOworICAgIGlmICh2bWJhc2UpCisgICAgICAgIHJldHVybiAqdm1iYXNlOwogCiAg
ICAgc3RhdGljIEljb25EYXRhYmFzZUJhc2UqIGRlZmF1bHREYXRhYmFzZSA9IDA7ICAgICAgICAK
ICAgICBpZiAoIWRlZmF1bHREYXRhYmFzZSkKQEAgLTY0LDcgKzY0LDcgQEAgSWNvbkRhdGFiYXNl
QmFzZSYgaWNvbkRhdGFiYXNlKCkKIAogdm9pZCBzZXRHbG9iYWxJY29uRGF0YWJhc2UoSWNvbkRh
dGFiYXNlQmFzZSogbmV3R2xvYmFsRGF0YWJhc2UpCiB7Ci0gICAgZ2xvYmFsRGF0YWJhc2UgPSBu
ZXdHbG9iYWxEYXRhYmFzZTsKKyAgICB2bWJhc2UgPSBuZXdHbG9iYWxEYXRhYmFzZTsKIH0KIAog
Ym9vbCBkb2N1bWVudENhbkhhdmVJY29uKGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9NZW1vcnlVc2FnZVN1cHBvcnRRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvTWVtb3J5VXNhZ2VTdXBwb3J0
UXQuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9N
ZW1vcnlVc2FnZVN1cHBvcnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAg
c3RhdGljIGludCBtZW1vcnlVc2FnZUtCKCkKIAogICAgIC8vIEV4dHJhY3QgbWVtb3J5IHN0YXRp
c3RpY3MgZnJvbSBKYXZhU2NyaXB0Q29yZToKICAgICBKU0M6Okdsb2JhbE1lbW9yeVN0YXRpc3Rp
Y3MganNjU3RhdHMgPSBKU0M6Omdsb2JhbE1lbW9yeVN0YXRpc3RpY3MoKTsKLSAgICBzaXplX3Qg
anNjSGVhcFVzYWdlID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmNh
cGFjaXR5KCk7CisgICAgc2l6ZV90IGpzY0hlYXBVc2FnZSA9IEpTRE9NV2luZG93Ojpjb21tb25W
TSgpLT5oZWFwLmNhcGFjaXR5KCk7CiAgICAgcmV0dXJuIChtYWxsb2NVc2FnZSArIGZtU3RhdHMu
Y29tbWl0dGVkVk1CeXRlcyArIGpzY1N0YXRzLnN0YWNrQnl0ZXMgKyBqc2NTdGF0cy5KSVRCeXRl
cyArIGpzY0hlYXBVc2FnZSkgPj4gMTA7CiB9CiAKQEAgLTcwLDcgKzcwLDcgQEAgc3RhdGljIGlu
dCBhY3R1YWxNZW1vcnlVc2FnZUtCKCkKIAogICAgIC8vIEV4dHJhY3QgbWVtb3J5IHN0YXRpc3Rp
Y3MgZnJvbSBKYXZhU2NyaXB0Q29yZToKICAgICBKU0M6Okdsb2JhbE1lbW9yeVN0YXRpc3RpY3Mg
anNjU3RhdHMgPSBKU0M6Omdsb2JhbE1lbW9yeVN0YXRpc3RpY3MoKTsKLSAgICBzaXplX3QganNj
SGVhcFVzYWdlID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnNpemUo
KTsKKyAgICBzaXplX3QganNjSGVhcFVzYWdlID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhl
YXAuc2l6ZSgpOwogICAgIHJldHVybiAobWFsbG9jVXNhZ2UgKyBmbVN0YXRzLmNvbW1pdHRlZFZN
Qnl0ZXMgLSBmbVN0YXRzLmZyZWVMaXN0Qnl0ZXMgKyBqc2NTdGF0cy5zdGFja0J5dGVzICsganNj
U3RhdHMuSklUQnl0ZXMgKyBqc2NIZWFwVXNhZ2UpID4+IDEwOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmNw
cAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBi
b2FyZFV0aWxpdGllc1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MCwyNiArMTkwLDI2IEBA
IEhHTE9CQUwgY3JlYXRlR2xvYmFsRGF0YShjb25zdCBLVVJMJiB1cmwKIAogSEdMT0JBTCBjcmVh
dGVHbG9iYWxEYXRhKGNvbnN0IFN0cmluZyYgc3RyKQogewotICAgIEhHTE9CQUwgZ2xvYmFsRGF0
YSA9IDo6R2xvYmFsQWxsb2MoR1BUUiwgKHN0ci5sZW5ndGgoKSArIDEpICogc2l6ZW9mKFVDaGFy
KSk7Ci0gICAgaWYgKCFnbG9iYWxEYXRhKQorICAgIEhHTE9CQUwgdm0gPSA6Okdsb2JhbEFsbG9j
KEdQVFIsIChzdHIubGVuZ3RoKCkgKyAxKSAqIHNpemVvZihVQ2hhcikpOworICAgIGlmICghdm0p
CiAgICAgICAgIHJldHVybiAwOwotICAgIFVDaGFyKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxVQ2hh
cio+KEdsb2JhbExvY2soZ2xvYmFsRGF0YSkpOworICAgIFVDaGFyKiBidWZmZXIgPSBzdGF0aWNf
Y2FzdDxVQ2hhcio+KEdsb2JhbExvY2sodm0pKTsKICAgICBtZW1jcHkoYnVmZmVyLCBzdHIuY2hh
cmFjdGVycygpLCBzdHIubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKICAgICBidWZmZXJbc3Ry
Lmxlbmd0aCgpXSA9IDA7Ci0gICAgR2xvYmFsVW5sb2NrKGdsb2JhbERhdGEpOwotICAgIHJldHVy
biBnbG9iYWxEYXRhOworICAgIEdsb2JhbFVubG9jayh2bSk7CisgICAgcmV0dXJuIHZtOwogfQog
CiBIR0xPQkFMIGNyZWF0ZUdsb2JhbERhdGEoY29uc3QgVmVjdG9yPGNoYXI+JiB2ZWN0b3IpCiB7
Ci0gICAgSEdMT0JBTCBnbG9iYWxEYXRhID0gOjpHbG9iYWxBbGxvYyhHUFRSLCB2ZWN0b3Iuc2l6
ZSgpICsgMSk7Ci0gICAgaWYgKCFnbG9iYWxEYXRhKQorICAgIEhHTE9CQUwgdm0gPSA6Okdsb2Jh
bEFsbG9jKEdQVFIsIHZlY3Rvci5zaXplKCkgKyAxKTsKKyAgICBpZiAoIXZtKQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICBjaGFyKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oR2xvYmFsTG9j
ayhnbG9iYWxEYXRhKSk7CisgICAgY2hhciogYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KEds
b2JhbExvY2sodm0pKTsKICAgICBtZW1jcHkoYnVmZmVyLCB2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iu
c2l6ZSgpKTsKICAgICBidWZmZXJbdmVjdG9yLnNpemUoKV0gPSAwOwotICAgIEdsb2JhbFVubG9j
ayhnbG9iYWxEYXRhKTsKLSAgICByZXR1cm4gZ2xvYmFsRGF0YTsKKyAgICBHbG9iYWxVbmxvY2so
dm0pOworICAgIHJldHVybiB2bTsKIH0KIAogc3RhdGljIFN0cmluZyBnZXRGdWxsQ0ZIVE1MKElE
YXRhT2JqZWN0KiBkYXRhKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3Bw
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYsNyArMjQ2LDcgQEAgYm9vbCBQbHVnaW5WaWV3Ojpz
dGFydCgpCiAgICAgTlBFcnJvciBucEVycjsKICAgICB7CiAgICAgICAgIFBsdWdpblZpZXc6OnNl
dEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
KyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAg
ICAgICAgbnBFcnIgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+bmV3cCgoTlBNSU1FVHlwZSlt
X21pbWVUeXBlLnV0ZjgoKS5kYXRhKCksIG1faW5zdGFuY2UsIG1fbW9kZSwgbV9wYXJhbUNvdW50
LCBtX3BhcmFtTmFtZXMsIG1fcGFyYW1WYWx1ZXMsIE5VTEwpOwogICAgICAgICBzZXRDYWxsaW5n
UGx1Z2luKGZhbHNlKTsKQEAgLTMzNCw3ICszMzQsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnN0b3Ao
KQogCiAgICAgbV9pc1N0YXJ0ZWQgPSBmYWxzZTsKIAotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkp
OworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uVk0oKSk7CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICNp
ZiBkZWZpbmVkKFhQX1dJTikgJiYgIVBMQVRGT1JNKEdUSykKQEAgLTQ1MSw3ICs0NTEsNyBAQCB2
b2lkIFBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0KFBsdWdpblJlCiAgICAgICAgICAgICAvLyBG
SVhNRTogPHJkYXI6Ly9wcm9ibGVtLzQ4MDc0Njk+IFRoaXMgc2hvdWxkIGJlIHNlbnQgd2hlbiB0
aGUgZG9jdW1lbnQgaGFzIGZpbmlzaGVkIGxvYWRpbmcKICAgICAgICAgICAgIGlmIChyZXF1ZXN0
LT5zZW5kTm90aWZpY2F0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBQbHVnaW5WaWV3OjpzZXRD
dXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKKyAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICAgICAgICAgIHNldENh
bGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgICAgICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPnVybG5vdGlmeShtX2luc3RhbmNlLCByZXF1ZXN0VVJMLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCksIE5QUkVTX0RPTkUsIHJlcXVlc3QtPm5vdGlmeURhdGEoKSk7CiAgICAgICAgICAgICAgICAg
c2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkBAIC03MzUsNyArNzM1LDcgQEAgTlBPYmplY3QqIFBs
dWdpblZpZXc6Om5wT2JqZWN0KCkKICAgICBOUEVycm9yIG5wRXJyOwogICAgIHsKICAgICAgICAg
UGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICBzZXRDYWxsaW5nUGx1
Z2luKHRydWUpOwogICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2
YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0LCAmb2JqZWN0KTsK
ICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkBAIC0xNTA3LDcgKzE1MDcsNyBAQCB2
b2lkIFBsdWdpblZpZXc6OnByaXZhdGVCcm93c2luZ1N0YXRlQ2hhCiAgICAgICAgIHJldHVybjsK
IAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0
cnVlKTsKICAgICBOUEJvb2wgdmFsdWUgPSBwcml2YXRlQnJvd3NpbmdFbmFibGVkOwogICAgIHNl
dFZhbHVlKG1faW5zdGFuY2UsIE5QTlZwcml2YXRlTW9kZUJvb2wsICZ2YWx1ZSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld0JsYWNrQmVycnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5W
aWV3QmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5WaWV3QmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2NCw3ICsyNjQsNyBAQCBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2
ZW50CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQ
bHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0o
KSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAgIGJvb2wgYWNjZXB0ZWQgPSBt
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKQEAgLTgx
NSw3ICs4MTUsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQogICAg
ICAgICAoKE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqKW1fbnBXaW5kb3cud3NfaW5mbyktPndp
bmRvd0dyb3VwID0gd2luZG93LT53aW5kb3dHcm91cCgpOwogCiAgICAgUGx1Z2luVmlldzo6c2V0
Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25WTSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogCiAgICAgLy8gRklYTUU6
IFBhc3Npbmcgem9vbUZhY3RvciB0byBzZXR3aW5kb3cgbWFrZSB3aW5kb3dlZCBwbHVnaW4gc2Nh
bGUgaW5jb3JyZWN0bHkuCkBAIC0xMDY1LDcgKzEwNjUsNyBAQCBib29sIFBsdWdpblZpZXc6OnBs
YXRmb3JtU3RhcnQoKQogCiAgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1
ZSkgewogICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAg
IHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luTmVlZHNYRW1iZWQsICZtX25lZWRzWEVt
YmVkKTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkBAIC0xMTQ2LDcgKzExNDYs
NyBAQCB2b2lkIFBsdWdpblZpZXc6OmdldFdpbmRvd0luZm8oVmVjdG9yPFBsCiAgICAgdm9pZCog
dmFsUHRyID0gMDsKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMp
OwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgc2V0Q2Fs
bGluZ1BsdWdpbih0cnVlKTsKICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUo
bV9pbnN0YW5jZSwgTlBQVnBsdWdpblNjcmVlbldpbmRvdywgJnZhbFB0cik7CiAgICAgc2V0Q2Fs
bGluZ1BsdWdpbihmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVn
aW5WaWV3RWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9Q
bHVnaW5WaWV3RWZsLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcg
QEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudAogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsK
LSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgIHNldENhbGxp
bmdQbHVnaW4odHJ1ZSk7CiAKICAgICBib29sIGFjY2VwdGVkID0gbV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZldmVudCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwMCw3ICsxMDAsNyBAQCBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2
ZW50CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQ
bHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0o
KSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAgIGJvb2wgYWNjZXB0ZWQgPSAh
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZldmVudCk7CkBAIC0y
NjQsNyArMjY0LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIAog
CiB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZl
bnQpCiB7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKIAogICAg
IGlmICghbV9pc1N0YXJ0ZWQgfHwgbV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vz
c2Z1bGx5KQogICAgICAgICByZXR1cm47CkBAIC0zOTAsNyArMzkwLDcgQEAgc3RhdGljIHZvaWQg
c2V0WENyb3NzaW5nRXZlbnRTcGVjaWZpY0ZpZQogCiB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1v
dXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCiB7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7
CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25WTSgpKTsKIAogICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgbV9zdGF0dXMgIT0g
UGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQogICAgICAgICByZXR1cm47CkBAIC01MTUs
NyArNTE1LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKICAgICB9
CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgIHNldENhbGxpbmdQbHVnaW4o
dHJ1ZSk7CiAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNl
LCAmbV9ucFdpbmRvdyk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkBAIC03ODksNyAr
Nzg5LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKIAogICAgIGlmIChtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpIHsKICAgICAgICAgUGx1Z2luVmlldzo6c2V0
Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwor
ICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRv
d0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAg
ICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBs
dWdpbk5lZWRzWEVtYmVkLCAmbV9uZWVkc1hFbWJlZCk7CiAgICAgICAgIHNldENhbGxpbmdQbHVn
aW4oZmFsc2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luVmlld01h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL21hYy9QbHVnaW5WaWV3
TWFjLm1tCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL21hYy9Q
bHVnaW5WaWV3TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OTUsNyArNDk1LDcgQEAgdm9pZCBQ
bHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKICAgICAgICAgICAgIG1fbnBXaW5kb3cu
Y2xpcFJlY3QucmlnaHQgLSBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQsIG1fbnBXaW5kb3cuY2xp
cFJlY3QuYm90dG9tIC0gbV9ucFdpbmRvdy5jbGlwUmVjdC50b3ApOwogCiAgICAgUGx1Z2luVmll
dzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7
CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25WTSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgIG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOwog
ICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtMTA2MCw3ICsxMDYwLDcgQEAgUG9pbnQg
UGx1Z2luVmlldzo6bW91c2VQb3NGb3JQbHVnaW4oTW91cwogYm9vbCBQbHVnaW5WaWV3OjpkaXNw
YXRjaE5QRXZlbnQoTlBFdmVudCYgZXZlbnQpCiB7CiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVu
dFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25W
TSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogCiAgICAgYm9vbCBhY2NlcHRlZCA9
IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwpAQCAt
MTA3NSw3ICsxMDc1LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVu
dAogaW50MTZfdCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QQ29jb2FFdmVudChOUENvY29hRXZlbnQm
IGNvY29hRXZlbnQpCiB7CiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhp
cyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICBzZXRD
YWxsaW5nUGx1Z2luKHRydWUpOwogCiAgICAgaW50MTZfdCByZXNwb25zZSA9IG1fcGx1Z2luLT5w
bHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmY29jb2FFdmVudCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCShyZXZpc2lvbiAxNDg2NTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3NCw3ICsyNzQsNyBAQCBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVu
dChOUEV2ZW50CiAgICAgfQogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXco
dGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICBz
ZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgIGJvb2wgYWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZldmVudCk7CiAgICAgc2V0Q2FsbGluZ1Bs
dWdpbihmYWxzZSk7CkBAIC01NTcsNyArNTU3LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdp
bmRvd0lmTmVlZGVkKCkKICAgICB9CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2lu
Vmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwog
ICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCkt
PnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7CiAgICAgc2V0Q2FsbGluZ1BsdWdp
bihmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2lu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3
V2luLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4v
UGx1Z2luVmlld1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyOCw3ICs1MjgsNyBAQCBib29s
IFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50CiAgICAgICAgIHNob3VsZFBvcCA9
IHRydWU7CiAgICAgfQogCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgp
KTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgIGJvb2wgYWNjZXB0ZWQgPSAhbV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KTsKICAgICBz
ZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKQEAgLTY4Nyw3ICs2ODcsNyBAQCB2b2lkIFBsdWdpblZp
ZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybjsK
IAotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgaWYgKGRp
c3BhdGNoTlBFdmVudChucEV2ZW50KSkKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7CiB9CkBAIC03NTcsNyArNzU3LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2
ZW50KE1vdXNlRQogICAgIH0gZWxzZQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgIC8vIEZJWE1FOiBDb25zaWRlciBiYWNr
IHBvcnRpbmcgdGhlIGh0dHA6Ly93ZWJraXQub3JnL2IvNTgxMDggZml4IGhlcmUuCiAgICAgaWYg
KGRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7CkBAIC04NTEsNyArODUxLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1Jl
Y3QoY29uc3QgSQogICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKIAogICAgIGlmICht
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KSB7Ci0gICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2lu
KHRydWUpOwogICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5z
dGFuY2UsICZtX25wV2luZG93KTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQu
Y3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNv
cmVUZXN0U3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBp
bmplY3RJbnRlcm5hbHNPYmplY3QoSlNDb250ZXh0UmVmIAogICAgIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRl
eHQgPSBnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoc2Ny
aXB0Q29udGV4dC0+aXNEb2N1bWVudCgpKQotICAgICAgICBnbG9iYWxPYmplY3QtPnB1dERpcmVj
dChleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgSW50ZXJuYWxzOjppbnRlcm5h
bHNJZCksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBJbnRlcm5hbHM6OmNyZWF0ZSh0b0RvY3Vt
ZW50KHNjcmlwdENvbnRleHQpKSkpOworICAgICAgICBnbG9iYWxPYmplY3QtPnB1dERpcmVjdChl
eGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsIEludGVybmFsczo6aW50ZXJuYWxzSWQpLCB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgSW50ZXJuYWxzOjpjcmVhdGUodG9Eb2N1bWVudChzY3JpcHRD
b250ZXh0KSkpKTsKIH0KIAogdm9pZCByZXNldEludGVybmFsc09iamVjdChKU0NvbnRleHRSZWYg
Y29udGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNp
b24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTQyLDkgKzk0Miw5IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRyb3BQ
cm90ZWN0aW9uKCkKICAgICAvLyBvdXQuIEJ1dCBpdCBpcyBwcm90ZWN0ZWQgZnJvbSBHQyB3aGls
ZSBsb2FkaW5nLCBzbyB0aGlzCiAgICAgLy8gY2FuJ3QgYmUgcmVjb3VwZWQgdW50aWwgdGhlIGxv
YWQgaXMgZG9uZSwgc28gb25seQogICAgIC8vIHJlcG9ydCB0aGUgZXh0cmEgY29zdCBhdCB0aGF0
IHBvaW50LgotICAgIEpTQzo6SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5nbG9iYWxEYXRhKCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhn
bG9iYWxEYXRhKTsKLSAgICBnbG9iYWxEYXRhLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdCht
X3Jlc3BvbnNlQnVpbGRlci5sZW5ndGgoKSAqIDIpOworICAgIEpTQzo6Vk0qIHZtID0gc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0p
OworICAgIHZtLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChtX3Jlc3BvbnNlQnVpbGRlci5s
ZW5ndGgoKSAqIDIpOwogCiAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1NiBAQAorMjAxMy0wNC0xNyAgR2VvZmZyZXkgR2Fy
ZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZWQgSlNHbG9iYWxEYXRhIHRv
IFZNCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ3
NzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNo
YXJlZC9saW51eC9XZWJNZW1vcnlTYW1wbGVyTGludXguY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJNZW1vcnlTYW1wbGVyOjpzYW1wbGVXZWJLaXQpOgorICAgICAgICAqIFNoYXJlZC9tYWMvV2Vi
TWVtb3J5U2FtcGxlci5tYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNhbXBsZXI6
OnNhbXBsZVdlYktpdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpqYXZhU2Ny
aXB0T2JqZWN0c0NvdW50KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
SlNOUE1ldGhvZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkpTTlBNZXRob2Q6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5o
OgorICAgICAgICAoV2ViS2l0OjpKU05QTWV0aG9kOjpjcmVhdGUpOgorICAgICAgICAoSlNOUE1l
dGhvZCk6CisgICAgICAgIChXZWJLaXQ6OkpTTlBNZXRob2Q6OmNyZWF0ZVN0cnVjdHVyZSk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpKU05QT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6
SlNOUE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0
OjpjYWxsTWV0aG9kKToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Y2FsbE9iamVjdCk6
CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmNhbGxDb25zdHJ1Y3Rvcik6CisgICAgICAg
IChXZWJLaXQ6OkpTTlBPYmplY3Q6OnB1dCk6CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6
OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Z2V0T3duUHJv
cGVydHlOYW1lcyk6CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OnByb3BlcnR5R2V0dGVy
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oOgor
ICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpK
U05QT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6aW5pdGlhbGl6ZSk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuaDoKKyAgICAgICAg
KEpTQyk6CisgICAgICAgIChOUEpTT2JqZWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBS
dW50aW1lT2JqZWN0TWFwOjpnZXRPckNyZWF0ZU5QT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6
TlBSdW50aW1lT2JqZWN0TWFwOjpjb252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KToKKyAgICAgICAg
KFdlYktpdDo6TlBSdW50aW1lT2JqZWN0TWFwOjpldmFsdWF0ZSk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5oOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKE5QUnVudGltZU9iamVjdE1hcCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3Ojp3aW5k
b3dTY3JpcHROUE9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OnBsdWdpbkVs
ZW1lbnROUE9iamVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpydW5KYXZhU2NyaXB0SW5NYWluRnJhbWUpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3M6OmdldFdlYkNvcmVTdGF0aXN0aWNzKToKKwogMjAxMy0wNC0xNyAgSm9vbmUgSHVy
ICA8am9vbmUuaHVyQGludGVsLmNvbT4KIAogICAgICAgICBbRUZMXVtBQ10gbV9wZW5kaW5nU3Vy
ZmFjZVJlc2l6ZSBuZWVkcyB0byBiZSBndWFyZGVkIGJ5IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9XZWJNZW1vcnlTYW1wbGVy
TGludXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9XZWJN
ZW1vcnlTYW1wbGVyTGludXguY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbGludXgvV2ViTWVtb3J5U2FtcGxlckxpbnV4LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTU0LDggKzE1NCw4IEBAIFdlYk1lbW9yeVN0YXRpc3RpY3MgV2ViTWVtb3J5U2FtcGxlcjo6
c2EKICAgICBhcHBlbmRLZXlWYWx1ZVBhaXIod2ViS2l0TWVtb3J5U3RhdHMsIEFTQ0lJTGl0ZXJh
bCgiRmFzdCBNYWxsb2MgQ29tbWl0dGVkIE1lbW9yeSIpLCBmYXN0TWFsbG9jQnl0ZXNDb21taXR0
ZWQpOwogI2VuZGlmCiAKLSAgICBzaXplX3QganNjSGVhcEJ5dGVzSW5Vc2UgPSBKU0RPTVdpbmRv
dzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuc2l6ZSgpOwotICAgIHNpemVfdCBqc2NIZWFw
Qnl0ZXNDb21taXR0ZWQgPSBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAu
Y2FwYWNpdHkoKTsKKyAgICBzaXplX3QganNjSGVhcEJ5dGVzSW5Vc2UgPSBKU0RPTVdpbmRvdzo6
Y29tbW9uVk0oKS0+aGVhcC5zaXplKCk7CisgICAgc2l6ZV90IGpzY0hlYXBCeXRlc0NvbW1pdHRl
ZCA9IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFwLmNhcGFjaXR5KCk7CiAgICAgdG90YWxC
eXRlc0luVXNlICs9IGpzY0hlYXBCeXRlc0luVXNlOwogICAgIHRvdGFsQnl0ZXNDb21taXR0ZWQg
Kz0ganNjSGVhcEJ5dGVzQ29tbWl0dGVkOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL1dlYk1lbW9yeVNhbXBsZXIubWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9tYWMvV2ViTWVtb3J5U2FtcGxlci5tYWMubW0JKHJldmlzaW9uIDE0ODY1NSkKKysr
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViTWVtb3J5U2FtcGxlci5tYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTExNiw5ICsxMTYsOSBAQCBXZWJNZW1vcnlTdGF0aXN0aWNzIFdlYk1lbW9y
eVNhbXBsZXI6OnNhCiAgICAgdG90YWxCeXRlc0luVXNlICs9IGZhc3RNYWxsb2NCeXRlc0luVXNl
OwogICAgIHRvdGFsQnl0ZXNDb21taXR0ZWQgKz0gZmFzdE1hbGxvY0J5dGVzQ29tbWl0dGVkOwog
ICAgIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERh
dGEoKSk7Ci0gICAgc2l6ZV90IGpzY0hlYXBCeXRlc0luVXNlID0gSlNET01XaW5kb3c6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpLT5oZWFwLnNpemUoKTsKLSAgICBzaXplX3QganNjSGVhcEJ5dGVzQ29t
bWl0dGVkID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmNhcGFjaXR5
KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOworICAg
IHNpemVfdCBqc2NIZWFwQnl0ZXNJblVzZSA9IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFw
LnNpemUoKTsKKyAgICBzaXplX3QganNjSGVhcEJ5dGVzQ29tbWl0dGVkID0gSlNET01XaW5kb3c6
OmNvbW1vblZNKCktPmhlYXAuY2FwYWNpdHkoKTsKICAgICB0b3RhbEJ5dGVzSW5Vc2UgKz0ganNj
SGVhcEJ5dGVzSW5Vc2U7CiAgICAgdG90YWxCeXRlc0NvbW1pdHRlZCArPSBqc2NIZWFwQnl0ZXND
b21taXR0ZWQ7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nl
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyNSwyMSArOTI1LDIxIEBAIHZvaWQgV2Vi
UHJvY2Vzczo6Z2V0V2ViQ29yZVN0YXRpc3RpY3ModWkKICAgICAKICAgICAvLyBHYXRoZXIgSmF2
YVNjcmlwdCBzdGF0aXN0aWNzLgogICAgIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNE
T01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKLSAgICAgICAgZGF0YS5zdGF0aXN0aWNz
TnVtYmVycy5zZXQoIkphdmFTY3JpcHRPYmplY3RzQ291bnQiLCBKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQoKSk7Ci0gICAgICAgIGRhdGEuc3RhdGlz
dGljc051bWJlcnMuc2V0KCJKYXZhU2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50IiwgSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmdsb2JhbE9iamVjdENvdW50KCkpOwotICAg
ICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldCgiSmF2YVNjcmlwdFByb3RlY3RlZE9iamVj
dHNDb3VudCIsIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0
ZWRPYmplY3RDb3VudCgpKTsKLSAgICAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoIkph
dmFTY3JpcHRQcm90ZWN0ZWRHbG9iYWxPYmplY3RzQ291bnQiLCBKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKSk7CisgICAg
ICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKKyAgICAgICAg
ZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoIkphdmFTY3JpcHRPYmplY3RzQ291bnQiLCBKU0RP
TVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5vYmplY3RDb3VudCgpKTsKKyAgICAgICAgZGF0YS5z
dGF0aXN0aWNzTnVtYmVycy5zZXQoIkphdmFTY3JpcHRHbG9iYWxPYmplY3RzQ291bnQiLCBKU0RP
TVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5nbG9iYWxPYmplY3RDb3VudCgpKTsKKyAgICAgICAg
ZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoIkphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RzQ291
bnQiLCBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5wcm90ZWN0ZWRPYmplY3RDb3VudCgp
KTsKKyAgICAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoIkphdmFTY3JpcHRQcm90ZWN0
ZWRHbG9iYWxPYmplY3RzQ291bnQiLCBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5wcm90
ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpKTsKICAgICAgICAgCi0gICAgICAgIE93blB0cjxUeXBl
Q291bnRTZXQ+IHByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoSlNET01XaW5kb3c6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKSk7CisgICAgICAg
IE93blB0cjxUeXBlQ291bnRTZXQ+IHByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoSlNET01XaW5k
b3c6OmNvbW1vblZNKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygpKTsKICAgICAg
ICAgZnJvbUNvdW50ZWRTZXRUb0hhc2hNYXAocHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cy5nZXQo
KSwgZGF0YS5qYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cyk7CiAgICAgICAgIAot
ICAgICAgICBPd25QdHI8VHlwZUNvdW50U2V0PiBvYmplY3RUeXBlQ291bnRzKEpTRE9NV2luZG93
Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5vYmplY3RUeXBlQ291bnRzKCkpOworICAgICAg
ICBPd25QdHI8VHlwZUNvdW50U2V0PiBvYmplY3RUeXBlQ291bnRzKEpTRE9NV2luZG93Ojpjb21t
b25WTSgpLT5oZWFwLm9iamVjdFR5cGVDb3VudHMoKSk7CiAgICAgICAgIGZyb21Db3VudGVkU2V0
VG9IYXNoTWFwKG9iamVjdFR5cGVDb3VudHMuZ2V0KCksIGRhdGEuamF2YVNjcmlwdE9iamVjdFR5
cGVDb3VudHMpOwogICAgICAgICAKLSAgICAgICAgdWludDY0X3QgamF2YVNjcmlwdEhlYXBTaXpl
ID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnNpemUoKTsKKyAgICAg
ICAgdWludDY0X3QgamF2YVNjcmlwdEhlYXBTaXplID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCkt
PmhlYXAuc2l6ZSgpOwogICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldCgiSmF2YVNj
cmlwdEhlYXBTaXplIiwgamF2YVNjcmlwdEhlYXBTaXplKTsKLSAgICAgICAgZGF0YS5zdGF0aXN0
aWNzTnVtYmVycy5zZXQoIkphdmFTY3JpcHRGcmVlU2l6ZSIsIEpTRE9NV2luZG93Ojpjb21tb25K
U0dsb2JhbERhdGEoKS0+aGVhcC5jYXBhY2l0eSgpIC0gamF2YVNjcmlwdEhlYXBTaXplKTsKKyAg
ICAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoIkphdmFTY3JpcHRGcmVlU2l6ZSIsIEpT
RE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFwLmNhcGFjaXR5KCkgLSBqYXZhU2NyaXB0SGVhcFNp
emUpOwogICAgIH0KIAogICAgIFdURjo6RmFzdE1hbGxvY1N0YXRpc3RpY3MgZmFzdE1hbGxvY1N0
YXRpc3RpY3MgPSBXVEY6OmZhc3RNYWxsb2NTdGF0aXN0aWNzKCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1
Miw4ICs1NTIsOCBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpnYXJiYWdlQ29sbGVjdEphdmFTCiAK
IHNpemVfdCBJbmplY3RlZEJ1bmRsZTo6amF2YVNjcmlwdE9iamVjdHNDb3VudCgpCiB7Ci0gICAg
SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKLSAg
ICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLm9iamVjdENv
dW50KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwor
ICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5vYmplY3RDb3VudCgpOwog
fQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpyZXBvcnRFeGNlcHRpb24oSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZWYgZXhjZXB0aW9uKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzIzLDcgKzEzMjMsNyBAQCBOUE9iamVjdCogUGx1Z2luVmlldzo6d2luZG93
U2NyaXB0TlBPYmplCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHJldHVybiBtX25w
UnVudGltZU9iamVjdE1hcC5nZXRPckNyZWF0ZU5QT2JqZWN0KCpwbHVnaW5Xb3JsZCgpLT5nbG9i
YWxEYXRhKCksIGZyYW1lKCktPnNjcmlwdCgpLT53aW5kb3dTaGVsbChwbHVnaW5Xb3JsZCgpKS0+
d2luZG93KCkpOworICAgIHJldHVybiBtX25wUnVudGltZU9iamVjdE1hcC5nZXRPckNyZWF0ZU5Q
T2JqZWN0KCpwbHVnaW5Xb3JsZCgpLT52bSgpLCBmcmFtZSgpLT5zY3JpcHQoKS0+d2luZG93U2hl
bGwocGx1Z2luV29ybGQoKSktPndpbmRvdygpKTsKIH0KIAogTlBPYmplY3QqIFBsdWdpblZpZXc6
OnBsdWdpbkVsZW1lbnROUE9iamVjdCgpCkBAIC0xMzM5LDcgKzEzMzksNyBAQCBOUE9iamVjdCog
UGx1Z2luVmlldzo6cGx1Z2luRWxlbWVudE5QT2JqCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGZy
YW1lKCktPnNjcmlwdCgpLT5qc09iamVjdEZvclBsdWdpbkVsZW1lbnQobV9wbHVnaW5FbGVtZW50
LmdldCgpKTsKICAgICBBU1NFUlQob2JqZWN0KTsKIAotICAgIHJldHVybiBtX25wUnVudGltZU9i
amVjdE1hcC5nZXRPckNyZWF0ZU5QT2JqZWN0KCpwbHVnaW5Xb3JsZCgpLT5nbG9iYWxEYXRhKCks
IG9iamVjdCk7CisgICAgcmV0dXJuIG1fbnBSdW50aW1lT2JqZWN0TWFwLmdldE9yQ3JlYXRlTlBP
YmplY3QoKnBsdWdpbldvcmxkKCktPnZtKCksIG9iamVjdCk7CiB9CiAKIGJvb2wgUGx1Z2luVmll
dzo6ZXZhbHVhdGUoTlBPYmplY3QqIG5wT2JqZWN0LCBjb25zdCBTdHJpbmcmIHNjcmlwdFN0cmlu
ZywgTlBWYXJpYW50KiByZXN1bHQsIGJvb2wgYWxsb3dQb3B1cHMpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBNZXRo
b2QuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUx
LDkgQEAgSlNOUE1ldGhvZDo6SlNOUE1ldGhvZChKU0dsb2JhbE9iamVjdCogZwogewogfQogCi12
b2lkIEpTTlBNZXRob2Q6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
Y29uc3QgU3RyaW5nJiBuYW1lKQordm9pZCBKU05QTWV0aG9kOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9i
YWxEYXRhLCBuYW1lKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgbmFtZSk7CiAgICAg
QVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBNZXRob2QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5oCShyZXZp
c2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvSlNOUE1ldGhvZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0Myw5IEBAIHB1YmxpYzoK
IAogICAgIHN0YXRpYyBKU05QTWV0aG9kKiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBOUElk
ZW50aWZpZXIgbnBJZGVudCkKICAgICB7Ci0gICAgICAgIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdC0+ZnVuY3Rpb25Qcm90b3R5cGUoKSk7CisgICAgICAgIEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QtPmZ1bmN0aW9uUHJvdG90eXBlKCkpOwogICAgICAgICBKU05QTWV0aG9kKiBt
ZXRob2QgPSBuZXcgKEpTQzo6YWxsb2NhdGVDZWxsPEpTTlBNZXRob2Q+KCpleGVjLT5oZWFwKCkp
KSBKU05QTWV0aG9kKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBucElkZW50KTsKLSAgICAgICAg
bWV0aG9kLT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUpOworICAgICAg
ICBtZXRob2QtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCksIG5hbWUpOwogICAgICAgICByZXR1
cm4gbWV0aG9kOwogICAgIH0KIApAQCAtNTQsMTQgKzU0LDE0IEBAIHB1YmxpYzoKICAgICBOUElk
ZW50aWZpZXIgbnBJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9ucElkZW50aWZpZXI7IH0K
IAogcHJvdGVjdGVkOgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpKU0dsb2JhbERhdGEm
LCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYs
IGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKIHByaXZhdGU6ICAgIAogICAgIEpTTlBNZXRob2QoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiwgTlBJZGVudGlmaWVyKTsKIAotICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsK
ICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0M6OkpTQ2Vs
bCosIEpTQzo6Q2FsbERhdGEmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAJKHJldmlzaW9uIDE0
ODY1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05Q
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBzdGF0aWMgTlBJZGVu
dGlmaWVyIG5wSWRlbnRpZmllckZyb21JZGVuCiBjb25zdCBDbGFzc0luZm8gSlNOUE9iamVjdDo6
c19pbmZvID0geyAiTlBPYmplY3QiLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTTlBPYmplY3QpIH07CiAKIEpTTlBPYmplY3Q6OkpTTlBPYmplY3QoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5QUnVudGltZU9iamVj
dE1hcCogb2JqZWN0TWFwLCBOUE9iamVjdCogbnBPYmplY3QpCi0gICAgOiBKU0Rlc3RydWN0aWJs
ZU9iamVjdChnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKQorICAgIDogSlNE
ZXN0cnVjdGlibGVPYmplY3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBzdHJ1Y3R1cmUpCiAgICAgLCBt
X29iamVjdE1hcChvYmplY3RNYXApCiAgICAgLCBtX25wT2JqZWN0KG5wT2JqZWN0KQogewpAQCAt
NjYsNyArNjYsNyBAQCBKU05QT2JqZWN0OjpKU05QT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBnCiAK
IHZvaWQgSlNOUE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERh
dGEoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAg
ICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogCiAgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGhh
dmUgYW4gTlBKU09iamVjdCBpbnNpZGUgYSBKU05QT2JqZWN0LgpAQCAtMTI3LDcgKzEyNyw3IEBA
IEpTVmFsdWUgSlNOUE9iamVjdDo6Y2FsbE1ldGhvZChFeGVjU3RhdGUKICAgICBWT0lEX1RPX05Q
VkFSSUFOVChyZXN1bHQpOwogICAgIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwor
ICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNl
Ojpjb21tb25WTSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5fY2xhc3Mt
Pmludm9rZShtX25wT2JqZWN0LCBtZXRob2ROYW1lLCBhcmd1bWVudHMuZGF0YSgpLCBhcmd1bWVu
dENvdW50LCAmcmVzdWx0KTsKICAgICAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFs
RXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiAgICAgfQpAQCAtMTY3LDcgKzE2Nyw3IEBAIEpT
Qzo6SlNWYWx1ZSBKU05QT2JqZWN0OjpjYWxsT2JqZWN0KEpTQzoKICAgICBWT0lEX1RPX05QVkFS
SUFOVChyZXN1bHQpOwogCiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgICAg
IEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1v
blZNKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fbnBPYmplY3QtPl9jbGFzcy0+aW52b2tl
RGVmYXVsdChtX25wT2JqZWN0LCBhcmd1bWVudHMuZGF0YSgpLCBhcmd1bWVudENvdW50LCAmcmVz
dWx0KTsKICAgICAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9F
eGVjU3RhdGUoZXhlYyk7CiAgICAgfQpAQCAtMjA3LDcgKzIwNyw3IEBAIEpTVmFsdWUgSlNOUE9i
amVjdDo6Y2FsbENvbnN0cnVjdG9yKEV4ZWMKICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHQp
OwogICAgIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICBKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsK
ICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5fY2xhc3MtPmNvbnN0cnVjdChtX25w
T2JqZWN0LCBhcmd1bWVudHMuZGF0YSgpLCBhcmd1bWVudENvdW50LCAmcmVzdWx0KTsKICAgICAg
ICAgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhl
Yyk7CiAgICAgfQpAQCAtMzUyLDcgKzM1Miw3IEBAIHZvaWQgSlNOUE9iamVjdDo6cHV0KEpTQ2Vs
bCogY2VsbCwgRXhlY1MKICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBw
cm90ZWN0b3IodGhpc09iamVjdC0+bV9vYmplY3RNYXApOwogCiAgICAgewotICAgICAgICBKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0ds
b2JhbERhdGEoKSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICB0aGlzT2JqZWN0LT5tX25wT2Jq
ZWN0LT5fY2xhc3MtPnNldFByb3BlcnR5KHRoaXNPYmplY3QtPm1fbnBPYmplY3QsIG5wSWRlbnRp
ZmllciwgJnZhcmlhbnQpOwogCiAgICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2Jh
bEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwpAQCAtMzkyLDcgKzM5Miw3IEBAIGJvb2wgSlNO
UE9iamVjdDo6ZGVsZXRlUHJvcGVydHkoRXhlY1N0YXQKICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6
OlBsdWdpblByb3RlY3RvciBwcm90ZWN0b3IobV9vYmplY3RNYXApOwogCiAgICAgewotICAgICAg
ICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogCiAgICAgICAgIC8vIEZJWE1FOiBT
aG91bGQgd2UgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHJlbW92ZVByb3BlcnR5IHJldHVybnMgZmFs
c2U/CiAgICAgICAgIGlmICghbV9ucE9iamVjdC0+X2NsYXNzLT5yZW1vdmVQcm9wZXJ0eShtX25w
T2JqZWN0LCBwcm9wZXJ0eU5hbWUpKQpAQCAtNDI1LDcgKzQyNSw3IEBAIHZvaWQgSlNOUE9iamVj
dDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU08KICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdp
blByb3RlY3RvciBwcm90ZWN0b3IodGhpc09iamVjdC0+bV9vYmplY3RNYXApOwogICAgIAogICAg
IHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKIAogICAgICAgICAv
LyBGSVhNRTogU2hvdWxkIHdlIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBlbnVtZXJhdGUgcmV0dXJu
cyBmYWxzZT8KICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5fY2xhc3MtPmVu
dW1lcmF0ZSh0aGlzT2JqZWN0LT5tX25wT2JqZWN0LCAmaWRlbnRpZmllcnMsICZpZGVudGlmaWVy
Q291bnQpKQpAQCAtNDczLDcgKzQ3Myw3IEBAIEpTVmFsdWUgSlNOUE9iamVjdDo6cHJvcGVydHlH
ZXR0ZXIoRXhlY1MKICAgICAKICAgICBib29sIHJldHVyblZhbHVlOwogICAgIHsKLSAgICAgICAg
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgTlBJZGVudGlmaWVyIG5w
SWRlbnRpZmllciA9IG5wSWRlbnRpZmllckZyb21JZGVudGlmaWVyKHByb3BlcnR5TmFtZSk7CiAg
ICAgICAgIHJldHVyblZhbHVlID0gdGhpc09iai0+bV9ucE9iamVjdC0+X2NsYXNzLT5nZXRQcm9w
ZXJ0eSh0aGlzT2JqLT5tX25wT2JqZWN0LCBucElkZW50aWZpZXIsICZyZXN1bHQpOwogICAgICAg
ICAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05Q
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L05ldHNjYXBlL0pTTlBPYmplY3QuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNDcsOCArNDcsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgSlNOUE9iamVjdCogY3Jl
YXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTlBSdW50aW1lT2JqZWN0TWFw
KiBvYmplY3RNYXAsIE5QT2JqZWN0KiBucE9iamVjdCkKICAgICB7Ci0gICAgICAgIEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxE
YXRhKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSk7Ci0g
ICAgICAgIEpTTlBPYmplY3QqIG9iamVjdCA9IG5ldyAoSlNDOjphbGxvY2F0ZUNlbGw8SlNOUE9i
amVjdD4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkpIEpTTlBPYmplY3QoZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUsIG9iamVjdE1hcCwgbnBPYmplY3QpOworICAgICAgICBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlID0gY3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+dm0oKSwg
Z2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKTsKKyAgICAgICAg
SlNOUE9iamVjdCogb2JqZWN0ID0gbmV3IChKU0M6OmFsbG9jYXRlQ2VsbDxKU05QT2JqZWN0Pihn
bG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTTlBPYmplY3QoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUsIG9iamVjdE1hcCwgbnBPYmplY3QpOwogICAgICAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9u
KGdsb2JhbE9iamVjdCk7CiAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgfQpAQCAtNzcsOSAr
NzcsOSBAQCBwcml2YXRlOgogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc0dl
dFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAgICAgCi0gICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVl
IHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVh
dGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4g
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6
VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAg
IH0KIAogICAgIHN0YXRpYyBKU0M6OkNhbGxUeXBlIGdldENhbGxEYXRhKEpTQzo6SlNDZWxsKiwg
SlNDOjpDYWxsRGF0YSYpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L05ldHNjYXBlL05QSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAkocmV2aXNpb24gMTQ4NjU1
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMyArNDYsMTMgQEAgdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1OUEpTT2JqZWN0KiBOUEpTT2JqZWN0
OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBOUFJ1bnRpbWVPYmplY3RNYXAqIG9i
amVjdE1hcCwgSlNPYmplY3QqIGpzT2JqZWN0KQorTlBKU09iamVjdCogTlBKU09iamVjdDo6Y3Jl
YXRlKFZNJiB2bSwgTlBSdW50aW1lT2JqZWN0TWFwKiBvYmplY3RNYXAsIEpTT2JqZWN0KiBqc09i
amVjdCkKIHsKICAgICAvLyBXZSBzaG91bGQgbmV2ZXIgaGF2ZSBhIEpTTlBPYmplY3QgaW5zaWRl
IGFuIE5QSlNPYmplY3QuCiAgICAgQVNTRVJUKCFqc09iamVjdC0+aW5oZXJpdHMoJkpTTlBPYmpl
Y3Q6OnNfaW5mbykpOwogCiAgICAgTlBKU09iamVjdCogbnBKU09iamVjdCA9IHRvTlBKU09iamVj
dChjcmVhdGVOUE9iamVjdCgwLCBucENsYXNzKCkpKTsKLSAgICBucEpTT2JqZWN0LT5pbml0aWFs
aXplKGdsb2JhbERhdGEsIG9iamVjdE1hcCwganNPYmplY3QpOworICAgIG5wSlNPYmplY3QtPmlu
aXRpYWxpemUodm0sIG9iamVjdE1hcCwganNPYmplY3QpOwogCiAgICAgcmV0dXJuIG5wSlNPYmpl
Y3Q7CiB9CkBAIC03MiwxMyArNzIsMTMgQEAgYm9vbCBOUEpTT2JqZWN0Ojppc05QSlNPYmplY3Qo
TlBPYmplY3QqIAogICAgIHJldHVybiBucE9iamVjdC0+X2NsYXNzID09IG5wQ2xhc3MoKTsKIH0K
IAotdm9pZCBOUEpTT2JqZWN0Ojppbml0aWFsaXplKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
TlBSdW50aW1lT2JqZWN0TWFwKiBvYmplY3RNYXAsIEpTT2JqZWN0KiBqc09iamVjdCkKK3ZvaWQg
TlBKU09iamVjdDo6aW5pdGlhbGl6ZShWTSYgdm0sIE5QUnVudGltZU9iamVjdE1hcCogb2JqZWN0
TWFwLCBKU09iamVjdCoganNPYmplY3QpCiB7CiAgICAgQVNTRVJUKCFtX29iamVjdE1hcCk7CiAg
ICAgQVNTRVJUKCFtX2pzT2JqZWN0KTsKIAogICAgIG1fb2JqZWN0TWFwID0gb2JqZWN0TWFwOwot
ICAgIG1fanNPYmplY3Quc2V0KGdsb2JhbERhdGEsIGpzT2JqZWN0KTsKKyAgICBtX2pzT2JqZWN0
LnNldCh2bSwganNPYmplY3QpOwogfQogCiBzdGF0aWMgSWRlbnRpZmllciBpZGVudGlmaWVyRnJv
bUlkZW50aWZpZXJSZXAoRXhlY1N0YXRlKiBleGVjLCBJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVy
UmVwKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05Q
SlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvTlBKU09iamVjdC5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU0dsb2Jh
bERhdGE7CitjbGFzcyBWTTsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgSlNPYmplY3Q7
CiAKQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgTlBSdW50aW1lT2JqZWN0TWFwOwogY2xhc3MgTlBK
U09iamVjdCA6IHB1YmxpYyBOUE9iamVjdCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTlBK
U09iamVjdCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIE5QSlNPYmplY3QqIGNyZWF0ZShKU0M6OkpT
R2xvYmFsRGF0YSYsIE5QUnVudGltZU9iamVjdE1hcCosIEpTQzo6SlNPYmplY3QqKTsKKyAgICBz
dGF0aWMgTlBKU09iamVjdCogY3JlYXRlKEpTQzo6Vk0mLCBOUFJ1bnRpbWVPYmplY3RNYXAqLCBK
U0M6OkpTT2JqZWN0Kik7CiAKICAgICBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fanNPYmplY3QuZ2V0KCk7IH0KIApAQCAtNjQsNyArNjQsNyBAQCBwcml2YXRlOgog
ICAgIE5QSlNPYmplY3QoKTsKICAgICB+TlBKU09iamVjdCgpOwogCi0gICAgdm9pZCBpbml0aWFs
aXplKEpTQzo6SlNHbG9iYWxEYXRhJiwgTlBSdW50aW1lT2JqZWN0TWFwKiwgSlNDOjpKU09iamVj
dCopOworICAgIHZvaWQgaW5pdGlhbGl6ZShKU0M6OlZNJiwgTlBSdW50aW1lT2JqZWN0TWFwKiwg
SlNDOjpKU09iamVjdCopOwogCiAgICAgYm9vbCBoYXNNZXRob2QoTlBJZGVudGlmaWVyIG1ldGhv
ZE5hbWUpOwogICAgIGJvb2wgaW52b2tlKE5QSWRlbnRpZmllciBtZXRob2ROYW1lLCBjb25zdCBO
UFZhcmlhbnQqIGFyZ3VtZW50cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50KiBy
ZXN1bHQpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBl
L05QUnVudGltZU9iamVjdE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAJKHJldmlzaW9u
IDE0ODY1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
UFJ1bnRpbWVPYmplY3RNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIE5Q
UnVudGltZU9iamVjdE1hcDo6UGx1Z2luUHJvdGVjdG9yOjp+UGwKIHsKIH0KIAotTlBPYmplY3Qq
IE5QUnVudGltZU9iamVjdE1hcDo6Z2V0T3JDcmVhdGVOUE9iamVjdChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTT2JqZWN0KiBqc09iamVjdCkKK05QT2JqZWN0KiBOUFJ1bnRpbWVPYmplY3RN
YXA6OmdldE9yQ3JlYXRlTlBPYmplY3QoVk0mIHZtLCBKU09iamVjdCoganNPYmplY3QpCiB7CiAg
ICAgLy8gSWYgdGhpcyBpcyBhIEpTTlBPYmplY3QsIHdlIGNhbiBqdXN0IGdldCBpdHMgdW5kZXJs
eWluZyBOUE9iamVjdC4KICAgICBpZiAoanNPYmplY3QtPmNsYXNzSW5mbygpID09ICZKU05QT2Jq
ZWN0OjpzX2luZm8pIHsKQEAgLTgzLDcgKzgzLDcgQEAgTlBPYmplY3QqIE5QUnVudGltZU9iamVj
dE1hcDo6Z2V0T3JDcmVhdAogICAgICAgICByZXR1cm4gbnBKU09iamVjdDsKICAgICB9CiAKLSAg
ICBOUEpTT2JqZWN0KiBucEpTT2JqZWN0ID0gTlBKU09iamVjdDo6Y3JlYXRlKGdsb2JhbERhdGEs
IHRoaXMsIGpzT2JqZWN0KTsKKyAgICBOUEpTT2JqZWN0KiBucEpTT2JqZWN0ID0gTlBKU09iamVj
dDo6Y3JlYXRlKHZtLCB0aGlzLCBqc09iamVjdCk7CiAgICAgbV9ucEpTT2JqZWN0cy5zZXQoanNP
YmplY3QsIG5wSlNPYmplY3QpOwogCiAgICAgcmV0dXJuIG5wSlNPYmplY3Q7CkBAIC0xNzIsNyAr
MTcyLDcgQEAgdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnRKU1ZhbHVlVAogICAgIH0K
IAogICAgIGlmICh2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgIE5QT2JqZWN0KiBucE9iamVj
dCA9IGdldE9yQ3JlYXRlTlBPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhc09iamVjdCh2YWx1
ZSkpOworICAgICAgICBOUE9iamVjdCogbnBPYmplY3QgPSBnZXRPckNyZWF0ZU5QT2JqZWN0KGV4
ZWMtPnZtKCksIGFzT2JqZWN0KHZhbHVlKSk7CiAgICAgICAgIE9CSkVDVF9UT19OUFZBUklBTlQo
bnBPYmplY3QsIHZhcmlhbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTgyLDcgKzE4
Miw3IEBAIHZvaWQgTlBSdW50aW1lT2JqZWN0TWFwOjpjb252ZXJ0SlNWYWx1ZVQKIAogYm9vbCBO
UFJ1bnRpbWVPYmplY3RNYXA6OmV2YWx1YXRlKE5QT2JqZWN0KiBucE9iamVjdCwgY29uc3QgU3Ry
aW5nJiBzY3JpcHRTdHJpbmcsIE5QVmFyaWFudCogcmVzdWx0KQogewotICAgIFN0cm9uZzxKU0ds
b2JhbE9iamVjdD4gZ2xvYmFsT2JqZWN0KHRoaXMtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRh
KCksIHRoaXMtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBTdHJvbmc8SlNHbG9iYWxPYmplY3Q+IGds
b2JhbE9iamVjdCh0aGlzLT5nbG9iYWxPYmplY3QoKS0+dm0oKSwgdGhpcy0+Z2xvYmFsT2JqZWN0
KCkpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVP
YmplY3RNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RN
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCB0eXBlZGVmIHN0cnVjdCBfTlBW
YXJpYW50IE5QVmFyaWFudDsKIAogbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRXhlY1N0YXRl
OwotICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKKyAgICBjbGFzcyBWTTsKICAgICBjbGFzcyBKU0ds
b2JhbE9iamVjdDsKICAgICBjbGFzcyBKU09iamVjdDsKICAgICBjbGFzcyBKU1ZhbHVlOwpAQCAt
NjcsNyArNjcsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5zIGFuIE5QT2JqZWN0IHRoYXQg
d3JhcHMgdGhlIGdpdmVuIEpTT2JqZWN0IG9iamVjdC4gSWYgdGhlcmUgaXMgYWxyZWFkeSBhbiBO
UE9iamVjdCB0aGF0IHdyYXBzIHRoaXMgSlNPYmplY3QsIGl0IHdpbGwKICAgICAvLyByZXRhaW4g
aXQgYW5kIHJldHVybiBpdC4KLSAgICBOUE9iamVjdCogZ2V0T3JDcmVhdGVOUE9iamVjdChKU0M6
OkpTR2xvYmFsRGF0YSYsIEpTQzo6SlNPYmplY3QqKTsKKyAgICBOUE9iamVjdCogZ2V0T3JDcmVh
dGVOUE9iamVjdChKU0M6OlZNJiwgSlNDOjpKU09iamVjdCopOwogICAgIHZvaWQgbnBKU09iamVj
dERlc3Ryb3llZChOUEpTT2JqZWN0Kik7CiAKICAgICAvLyBSZXR1cm5zIGEgSlNPYmplY3Qgb2Jq
ZWN0IHRoYXQgd3JhcHMgdGhlIGdpdmVuIE5QT2JqZWN0LgpJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTAyLDcgKzIxMDIsNyBAQCB2b2lkIFdlYlBhZ2U6OnJ1bkphdmFTY3JpcHRJbk1h
aW5GcmFtZShjCiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFJl
c3VsdFZhbHVlOwogICAgIENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YVJlZmVyZW5jZTsKIAot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwogICAgIGlm
IChKU1ZhbHVlIHJlc3VsdFZhbHVlID0gbV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpLT5zY3JpcHQo
KS0+ZXhlY3V0ZVNjcmlwdChzY3JpcHQsIHRydWUpLmpzVmFsdWUoKSkgewogICAgICAgICBpZiAo
KHNlcmlhbGl6ZWRSZXN1bHRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKG1f
bWFpbkZyYW1lLT5qc0NvbnRleHQoKSwgdG9SZWYobV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpLT5z
Y3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhl
YygpLCByZXN1bHRWYWx1ZSksIDApKSkKICAgICAgICAgICAgIGRhdGFSZWZlcmVuY2UgPSBzZXJp
YWxpemVkUmVzdWx0VmFsdWUtPmRhdGEoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5n
ZUxvZwkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDEzLTA0LTE3ICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lZCBKU0dsb2JhbERh
dGEgdG8gVk0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExNDc3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogQXBpL0JsYWNrQmVycnlHbG9iYWwuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpjbGVhck1lbW9yeUNhY2hlcyk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9BYm91dERhdGEu
Y3BwOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0LmNwcDoK
KyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6amF2YVNjcmlwdE9iamVjdHNDb3VudCk6
CisKIDIwMTMtMDQtMTcgIE5pbWEgR2hhbmF2YXRpYW4gIDxuZ2hhbmF2YXRpYW5AYmxhY2tiZXJy
eS5jb20+CiAKICAgICAgICAgQ2xlYW4gdXAgc3BlbGxjaGVjayBzdGF0ZSB3aGVuIGNoYW5naW5n
IGZvY3VzLgpJbmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CbGFja0JlcnJ5R2xv
YmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JsYWNr
QmVycnlHbG9iYWwuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL0JsYWNrQmVycnlHbG9iYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsy
OCw3IEBACiAjaW5jbHVkZSAiSW5pdGlhbGl6ZUxvZ2dpbmcuaCIKICNpbmNsdWRlICJJbml0aWFs
aXplVGhyZWFkaW5nLmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKLSNpbmNsdWRlICJKU0ds
b2JhbERhdGEuaCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCiAj
aW5jbHVkZSAiTmV0d29ya1N0YXRlTm90aWZpZXIuaCIKICNpbmNsdWRlICJQYWdlQ2FjaGUuaCIK
QEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIGNsZWFyTWVtb3J5Q2FjaGVzKCkKICNlbmRpZgogCiAg
ICAgewotICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25K
U0dsb2JhbERhdGEoKSk7CisgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5k
b3c6OmNvbW1vblZNKCkpOwogICAgICAgICBjb2xsZWN0SmF2YXNjcmlwdEdhcmJhZ2VOb3coKTsK
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0Fi
b3V0RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktp
dFN1cHBvcnQvQWJvdXREYXRhLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQWJvdXREYXRhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPEJ1aWxkSW5mb3JtYXRpb24uaD4KICNpbmNsdWRl
IDxoZWFwL0hlYXAuaD4KICNpbmNsdWRlIDxwcm9jZXNzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9K
U0dsb2JhbERhdGEuaD4KKyNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CiAjaW5jbHVkZSA8c3lzL3N0
YXQuaD4KICNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KQEAgLTI0NSw3ICsyNDUsNyBAQCBzdGF0aWMgU3RyaW5nIG1lbW9yeVBhZ2UoKQogCiAg
ICAgLy8gSlMgZW5naW5lIG1lbW9yeSB1c2FnZS4KICAgICBKU0M6Okdsb2JhbE1lbW9yeVN0YXRp
c3RpY3MganNjTWVtb3J5U3RhdCA9IEpTQzo6Z2xvYmFsTWVtb3J5U3RhdGlzdGljcygpOwotICAg
IEpTQzo6SGVhcCYgbWFpbkhlYXAgPSBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkt
PmhlYXA7CisgICAgSlNDOjpIZWFwJiBtYWluSGVhcCA9IEpTRE9NV2luZG93Ojpjb21tb25WTSgp
LT5oZWFwOwogICAgIE93blB0cjxKU0M6OlR5cGVDb3VudFNldD4gb2JqZWN0VHlwZUNvdW50cyA9
IG1haW5IZWFwLm9iamVjdFR5cGVDb3VudHMoKTsKICAgICBPd25QdHI8SlNDOjpUeXBlQ291bnRT
ZXQ+IHByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMgPSBtYWluSGVhcC5wcm90ZWN0ZWRPYmplY3RU
eXBlQ291bnRzKCk7CiAKQEAgLTM3Myw3ICszNzMsNyBAQCB2b2lkIE1lbW9yeVRyYWNrZXI6OnVw
ZGF0ZU1lbW9yeVBlYWtzKFRpCiB7CiAgICAgLy8gSlMgZW5naW5lIG1lbW9yeSB1c2FnZS4KICAg
ICBKU0M6Okdsb2JhbE1lbW9yeVN0YXRpc3RpY3MganNjTWVtb3J5U3RhdCA9IEpTQzo6Z2xvYmFs
TWVtb3J5U3RhdGlzdGljcygpOwotICAgIEpTQzo6SGVhcCYgbWFpbkhlYXAgPSBKU0RPTVdpbmRv
dzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXA7CisgICAgSlNDOjpIZWFwJiBtYWluSGVhcCA9
IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFwOwogCiAgICAgLy8gTWFsbG9jIGluZm8uCiAg
ICAgc3RydWN0IG1hbGxpbmZvIG1hbGxvY0luZm8gPSBtYWxsaW5mbygpOwpJbmRleDogU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9E
dW1wUmVuZGVyVHJlZVN1cHBvcnQuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIFBhZ2UqIER1bXBSZW5kZXJUcmVlU3VwcG9y
dDo6Y29yZVBhZ2UoV2UKIAogaW50IER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6amF2YVNjcmlwdE9i
amVjdHNDb3VudCgpCiB7Ci0gICAgcmV0dXJuIEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCktPmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQoKTsKKyAgICByZXR1cm4gSlNET01XaW5k
b3dCYXNlOjpjb21tb25WTSgpLT5oZWFwLmdsb2JhbE9iamVjdENvdW50KCk7CiB9CiAKIHZvaWQg
RHVtcFJlbmRlclRyZWVTdXBwb3J0OjpnYXJiYWdlQ29sbGVjdG9yQ29sbGVjdCgpCkluZGV4OiBT
b3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9l
ZmwvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMy0wNC0xNyAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZWQgSlNHbG9iYWxE
YXRhIHRvIFZNCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTQ3NzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHA6CisgICAgICAg
IChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmphdmFTY3JpcHRPYmplY3RzQ291bnQpOgorCiAy
MDEzLTA0LTE2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIE1v
cmUgRUZMIGJ1aWxkIGZpeGVzLgpJbmRleDogU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBv
cnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuY3BwCShyZXZp
c2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsNyArMzk0LDcgQEAg
dm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmdhcmJhZ2VDbwogCiBzaXplX3QgRHVtcFJl
bmRlclRyZWVTdXBwb3J0RWZsOjpqYXZhU2NyaXB0T2JqZWN0c0NvdW50KCkKIHsKLSAgICByZXR1
cm4gV2ViQ29yZTo6SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLm9iamVj
dENvdW50KCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OkpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5o
ZWFwLm9iamVjdENvdW50KCk7CiB9CiAKIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpz
ZXREZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEzLTA0LTE3ICBHZW9m
ZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lZCBKU0dsb2Jh
bERhdGEgdG8gVk0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExNDc3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcDoKKyAgICAg
ICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Z2NDb3VudEphdmFzY3JpcHRPYmplY3RzKToK
KwogMjAxMy0wNC0xNiAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAg
ICAgICAgIEZpeCBzcGVsaW5nIGVycm9yLgpJbmRleDogU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3Bw
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9E
dW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzcsOCArNDc3
LDggQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdjQ29sbGVjdAogCiB1bnNpZ25l
ZCBsb25nIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Z2NDb3VudEphdmFzY3JpcHRPYmplY3Rz
KCkKIHsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0ds
b2JhbERhdGEoKSk7Ci0gICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEo
KS0+aGVhcC5vYmplY3RDb3VudCgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soSlNET01X
aW5kb3c6OmNvbW1vblZNKCkpOworICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+
aGVhcC5vYmplY3RDb3VudCgpOwogfQogCiB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6
bGF5b3V0RnJhbWUoV2ViS2l0V2ViRnJhbWUqIGZyYW1lKQpJbmRleDogU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsNjQgQEAKKzIwMTMtMDQtMTcgIEdlb2ZmcmV5IEdhcmVuICA8Z2dh
cmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWVkIEpTR2xvYmFsRGF0YSB0byBWTQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0Nzc3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNaXNjL1dlYkNv
cmVTdGF0aXN0aWNzLm1tOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0
T2JqZWN0c0NvdW50XSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRH
bG9iYWxPYmplY3RzQ291bnRdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNj
cmlwdFByb3RlY3RlZE9iamVjdHNDb3VudF0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGlj
cyBqYXZhU2NyaXB0UHJvdGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50XSk6CisgICAgICAgICgrW1dl
YkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzXSk6Cisg
ICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRPYmplY3RUeXBlQ291bnRzXSk6
CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIHNob3VsZFByaW50RXhjZXB0aW9uc10pOgor
ICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBzZXRTaG91bGRQcmludEV4Y2VwdGlvbnM6XSk6
CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIG1lbW9yeVN0YXRpc3RpY3NdKToKKyAgICAg
ICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdFJlZmVyZW5jZWRPYmplY3RzQ291bnRd
KToKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbToK
KyAgICAgICAgKGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcCk6CisgICAgICAgICogUGx1Z2lu
cy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lmg6CisgICAgICAgIChMb2NhbE9i
amVjdE1hcCk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
OkxvY2FsT2JqZWN0TWFwOjppZEZvck9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0V2luZG93TlBPYmplY3QpOgorICAgICAgICAoV2ViS2l0
OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmdldFBsdWdpbkVsZW1lbnROUE9iamVjdCk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZXZhbHVhdGUp
OgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmFkZFZhbHVl
VG9BcnJheSk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbToKKyAg
ICAgICAgKFdlYktpdDo6UHJveHlSdW50aW1lTWV0aG9kOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpQcm94eVJ1bnRpbWVNZXRob2Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJL
aXQ6OlByb3h5UnVudGltZU1ldGhvZDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViS2l0
OjpQcm94eUluc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBQbHVnaW5zL0hv
c3RlZC9Qcm94eVJ1bnRpbWVPYmplY3QuaDoKKyAgICAgICAgKFdlYktpdDo6UHJveHlSdW50aW1l
T2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpQcm94eVJ1bnRpbWVPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVh
bS5tbToKKyAgICAgICAgKFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjp3YW50c0FsbFN0cmVhbXMp
OgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tOgorICAgICAgICAo
LVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgc2VuZEV2ZW50OmlzRHJhd1JlY3Q6XSk6CisgICAgICAg
ICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBwcml2YXRlQnJvd3NpbmdNb2RlRGlkQ2hhbmdlXSk6
CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBzZXRXaW5kb3dJZk5lY2Vzc2FyeV0p
OgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgY3JlYXRlUGx1Z2luU2NyaXB0YWJs
ZU9iamVjdF0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgZ2V0Rm9ybVZhbHVl
Ol0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0
UGx1Z2luUmVxdWVzdDpdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHdlYkZy
YW1lOmRpZEZpbmlzaExvYWRXaXRoUmVhc29uOl0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBs
dWdpblZpZXcgbG9hZFBsdWdpblJlcXVlc3Q6XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1
Z2luVmlldyBfcHJpbnRlZFBsdWdpbkJpdG1hcF0pOgorICAgICAgICAqIFBsdWdpbnMvV2ViUGx1
Z2luQ29udHJvbGxlci5tbToKKyAgICAgICAgKCtbV2ViUGx1Z2luQ29udHJvbGxlciBwbHVnSW5W
aWV3V2l0aEFyZ3VtZW50czpmcm9tUGx1Z2luUGFja2FnZTpdKToKKyAgICAgICAgKC1bV2ViUGx1
Z2luQ29udHJvbGxlciBzdG9wT25lUGx1Z2luOl0pOgorICAgICAgICAoLVtXZWJQbHVnaW5Db250
cm9sbGVyIGRlc3Ryb3lPbmVQbHVnaW46XSk6CisgICAgICAgICgtW1dlYlBsdWdpbkNvbnRyb2xs
ZXIgc3RhcnRBbGxQbHVnaW5zXSk6CisgICAgICAgICgtW1dlYlBsdWdpbkNvbnRyb2xsZXIgYWRk
UGx1Z2luOl0pOgorICAgICAgICAqIFdlYktpdC5vcmRlcjoKKyAgICAgICAgKiBXZWJWaWV3L1dl
YlNjcmlwdERlYnVnRGVsZWdhdGUubW06CisgICAgICAgICgtW1dlYlNjcmlwdENhbGxGcmFtZSBz
Y29wZUNoYWluXSk6CisgICAgICAgICgtW1dlYlNjcmlwdENhbGxGcmFtZSBldmFsdWF0ZVdlYlNj
cmlwdDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1tOgorICAgICAg
ICAoV2ViU2NyaXB0RGVidWdnZXI6OldlYlNjcmlwdERlYnVnZ2VyKToKKwogMjAxMy0wNC0xNiAg
QmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmUtbmFtZSBQYWdlOjps
YXlvdXRNaWxlc3RvbmVzKCkgdG8gUGFnZTo6cmVxdWVzdGVkTGF5b3V0TWlsZXN0b25lcygpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJLaXQub3JkZXIKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvV2ViS2l0Lm9yZGVyCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJLaXQub3JkZXIJKHdvcmtpbmcgY29weSkKQEAgLTEwNTAsNyArMTA1MCw3IEBA
IF9fWFBDR2V0V2luZG93TlBPYmplY3QKIF9XS1BDR2V0V2luZG93TlBPYmplY3QKIF9fWk5LM1dU
RjdIYXNoTWFwSWpQTjZXZWJLaXQyM05ldHNjYXBlUGx1Z2luSG9zdFByb3h5RU5TXzdJbnRIYXNo
SWpFRU5TXzEwSGFzaFRyYWl0c0lqRUVOUzZfSVMzX0VFRTNnZXRFUktqCiBfX1pONldlYktpdDI3
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5MTdnZXRXaW5kb3dOUE9iamVjdEVSagotX19aTjZX
ZWJLaXQyN05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTE0TG9jYWxPYmplY3RNYXAxMWlkRm9y
T2JqZWN0RVJOM0pTQzEySlNHbG9iYWxEYXRhRVBOUzJfOEpTT2JqZWN0RQorX19aTjZXZWJLaXQy
N05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTE0TG9jYWxPYmplY3RNYXAxMWlkRm9yT2JqZWN0
RVJOM0pTQzEyVk1FUE5TMl84SlNPYmplY3RFCiBfX1pOSzNXVEY5SGFzaFRhYmxlSWpTdDRwYWly
SWpOM0pTQzZTdHJvbmdJTlMyXzhKU09iamVjdEVFRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklT
Nl9FRU5TXzdJbnRIYXNoSWpFRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSWpF
RU5TQ19JUzVfRUVFRVNEX0U4Y29udGFpbnNJak5TXzIySWRlbnRpdHlIYXNoVHJhbnNsYXRvcklq
UzZfU0FfRUVFRWJSS1RfCiBfX1pOM0pTQzZTdHJvbmdJTlNfOEpTT2JqZWN0RUVhU0VSS1MyXwog
X19YUENFdmFsdWF0ZQpAQCAtMjI0NSw3ICsyMjQ1LDcgQEAgX19aTjdXZWJDb3JlMTRQbHVnaW5W
aWV3QmFzZTI3cHJpdmF0ZUJybwogX19aTjZXZWJLaXQyN05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTI4cHJpdmF0ZUJyb3dzaW5nTW9kZURpZENoYW5nZUViCiBfX1dLUEhQbHVnaW5JbnN0YW5j
ZVByaXZhdGVCcm93c2luZ01vZGVEaWRDaGFuZ2UKIF9XS1NldENvb2tpZVN0b3JhZ2VQcml2YXRl
QnJvd3NpbmdFbmFibGVkCi1fX1pOM0pTQzhKU09iamVjdDE3Z2V0RGlyZWN0TG9jYXRpb25FUk5T
XzEySlNHbG9iYWxEYXRhRVJLTlNfMTBJZGVudGlmaWVyRQorX19aTjNKU0M4SlNPYmplY3QxN2dl
dERpcmVjdExvY2F0aW9uRVJOU18xMlZNRVJLTlNfMTBJZGVudGlmaWVyRQogX19YUENTdGF0dXNU
ZXh0CiBfV0tQQ1N0YXR1c1RleHQKIF9fWk42V2ViS2l0MjdOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk2c3RhdHVzRVBLYwpAQCAtMjI2MCw3ICsyMjYwLDcgQEAgX1dLUENFbnVtZXJhdGUKIF9f
Wk42V2ViS2l0MjdOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk5ZW51bWVyYXRlRWpSUGNSagog
X19aTjNKU0MxN1Byb3BlcnR5TmFtZUFycmF5RDFFdgogX19aTjNXVEY2VmVjdG9ySU4zSlNDMTBJ
ZGVudGlmaWVyRUxtMjBFRUQxRXYKLV9fWk4zSlNDOGpzU3RyaW5nRVBOU18xMkpTR2xvYmFsRGF0
YUVSS05TXzdVU3RyaW5nRQorX19aTjNKU0M4anNTdHJpbmdFUE5TXzEyVk1FUktOU183VVN0cmlu
Z0UKIF9fWk42V2ViS2l0MTNQcm94eUluc3RhbmNlMTZnZXRQcm9wZXJ0eU5hbWVzRVBOM0pTQzlF
eGVjU3RhdGVFUk5TMV8xN1Byb3BlcnR5TmFtZUFycmF5RQogX19XS1BITlBPYmplY3RFbnVtZXJh
dGUKIF9fWFBDR2V0SW50SWRlbnRpZmllcgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvTWlzYy9X
ZWJDb3JlU3RhdGlzdGljcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9NaXNj
L1dlYkNvcmVTdGF0aXN0aWNzLm1tCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViS2l0
L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01OCwzNSAr
NTgsMzUgQEAgKyAoTlNBcnJheSAqKXN0YXRpc3RpY3MKIAogKyAoc2l6ZV90KWphdmFTY3JpcHRP
YmplY3RzQ291bnQKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOwotICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxE
YXRhKCktPmhlYXAub2JqZWN0Q291bnQoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdp
bmRvdzo6Y29tbW9uVk0oKSk7CisgICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5o
ZWFwLm9iamVjdENvdW50KCk7CiB9CiAKICsgKHNpemVfdClqYXZhU2NyaXB0R2xvYmFsT2JqZWN0
c0NvdW50CiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKLSAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
LT5oZWFwLmdsb2JhbE9iamVjdENvdW50KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01X
aW5kb3c6OmNvbW1vblZNKCkpOworICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+
aGVhcC5nbG9iYWxPYmplY3RDb3VudCgpOwogfQogCiArIChzaXplX3QpamF2YVNjcmlwdFByb3Rl
Y3RlZE9iamVjdHNDb3VudAogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpj
b21tb25KU0dsb2JhbERhdGEoKSk7Ci0gICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0ds
b2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRPYmplY3RDb3VudCgpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKKyAgICByZXR1cm4gSlNET01XaW5kb3c6
OmNvbW1vblZNKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKIH0KIAogKyAoc2l6ZV90
KWphdmFTY3JpcHRQcm90ZWN0ZWRHbG9iYWxPYmplY3RzQ291bnQKIHsKLSAgICBKU0xvY2tIb2xk
ZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwotICAgIHJldHVybiBK
U0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkR2xvYmFsT2Jq
ZWN0Q291bnQoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0o
KSk7CisgICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFwLnByb3RlY3RlZEds
b2JhbE9iamVjdENvdW50KCk7CiB9CiAKICsgKE5TQ291bnRlZFNldCAqKWphdmFTY3JpcHRQcm90
ZWN0ZWRPYmplY3RUeXBlQ291bnRzCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdp
bmRvdzo6Y29tbW9uVk0oKSk7CiAgICAgCiAgICAgTlNDb3VudGVkU2V0ICpyZXN1bHQgPSBbTlND
b3VudGVkU2V0IHNldF07CiAKLSAgICBPd25QdHI8VHlwZUNvdW50U2V0PiBjb3VudHMoSlNET01X
aW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdFR5cGVDb3Vu
dHMoKSk7CisgICAgT3duUHRyPFR5cGVDb3VudFNldD4gY291bnRzKEpTRE9NV2luZG93Ojpjb21t
b25WTSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKSk7CiAgICAgSGFzaENvdW50
ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVyYXRvciBlbmQgPSBjb3VudHMtPmVuZCgpOwogICAgIGZv
ciAoSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVyYXRvciBpdCA9IGNvdW50cy0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
aXQtPnZhbHVlOyArK2kpCkBAIC05NywxMSArOTcsMTEgQEAgKyAoTlNDb3VudGVkU2V0ICopamF2
YVNjcmlwdFByb3RlY3RlZE9iagogCiArIChOU0NvdW50ZWRTZXQgKilqYXZhU2NyaXB0T2JqZWN0
VHlwZUNvdW50cwogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25K
U0dsb2JhbERhdGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1v
blZNKCkpOwogICAgIAogICAgIE5TQ291bnRlZFNldCAqcmVzdWx0ID0gW05TQ291bnRlZFNldCBz
ZXRdOwogCi0gICAgT3duUHRyPFR5cGVDb3VudFNldD4gY291bnRzKEpTRE9NV2luZG93Ojpjb21t
b25KU0dsb2JhbERhdGEoKS0+aGVhcC5vYmplY3RUeXBlQ291bnRzKCkpOworICAgIE93blB0cjxU
eXBlQ291bnRTZXQ+IGNvdW50cyhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5vYmplY3RU
eXBlQ291bnRzKCkpOwogICAgIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPjo6aXRlcmF0b3Ig
ZW5kID0gY291bnRzLT5lbmQoKTsKICAgICBmb3IgKEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIq
Pjo6aXRlcmF0b3IgaXQgPSBjb3VudHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0LT52YWx1ZTsgKytpKQpAQCAtMTY3LDEzICsx
NjcsMTMgQEAgKyAoc2l6ZV90KWdseXBoUGFnZUNvdW50CiAKICsgKEJPT0wpc2hvdWxkUHJpbnRF
eGNlcHRpb25zCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9u
Vk0oKSk7CiAgICAgcmV0dXJuIFBhZ2VDb25zb2xlOjpzaG91bGRQcmludEV4Y2VwdGlvbnMoKTsK
IH0KIAogKyAodm9pZClzZXRTaG91bGRQcmludEV4Y2VwdGlvbnM6KEJPT0wpcHJpbnQKIHsKLSAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKICAgICBQYWdl
Q29uc29sZTo6c2V0U2hvdWxkUHJpbnRFeGNlcHRpb25zKHByaW50KTsKIH0KIApAQCAtMjAxLDkg
KzIwMSw5IEBAICsgKE5TRGljdGlvbmFyeSAqKW1lbW9yeVN0YXRpc3RpY3MKIHsKICAgICBXVEY6
OkZhc3RNYWxsb2NTdGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0aWNzID0gV1RGOjpmYXN0TWFs
bG9jU3RhdGlzdGljcygpOwogICAgIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93
Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7Ci0gICAgc2l6ZV90IGhlYXBTaXplID0gSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnNpemUoKTsKLSAgICBzaXplX3QgaGVhcEZy
ZWUgPSBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuY2FwYWNpdHkoKSAt
IGhlYXBTaXplOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgp
KTsKKyAgICBzaXplX3QgaGVhcFNpemUgPSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5z
aXplKCk7CisgICAgc2l6ZV90IGhlYXBGcmVlID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhl
YXAuY2FwYWNpdHkoKSAtIGhlYXBTaXplOwogICAgIEdsb2JhbE1lbW9yeVN0YXRpc3RpY3MgZ2xv
YmFsTWVtb3J5U3RhdHMgPSBnbG9iYWxNZW1vcnlTdGF0aXN0aWNzKCk7CiAgICAgCiAgICAgcmV0
dXJuIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKQEAgLTI0Niw4
ICsyNDYsOCBAQCArIChzaXplX3QpamF2YVNjcmlwdE5vR0NBbGxvd2VkT2JqZWN0c0NvCiAKICsg
KHNpemVfdClqYXZhU2NyaXB0UmVmZXJlbmNlZE9iamVjdHNDb3VudAogewotICAgIEpTTG9ja0hv
bGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7Ci0gICAgcmV0dXJu
IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRPYmplY3RD
b3VudCgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsK
KyAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0
Q291bnQoKTsKIH0KIAogKyAoTlNTZXQgKilqYXZhU2NyaXB0Um9vdE9iamVjdENsYXNzZXMKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdp
blN0cmVhbS5tbQkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lu
cy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzY4LDcgKzM2
OCw3IEBAIGJvb2wgV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OndhbnRzQWxsU3QKICAgICBOUEVy
cm9yIGVycm9yOwogICAgIHsKICAgICAgICAgUGx1Z2luU3RvcERlZmVycmVyIGRlZmVycmVyKG1f
cGx1Z2luVmlldy5nZXQoKSk7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vblZNKCkpOwogICAgICAgICBlcnJvciA9IG1fcGx1Z2luRnVuY3MtPmdldHZhbHVlKG1f
cGx1Z2luLCBOUFBWcGx1Z2luV2FudHNBbGxOZXR3b3JrU3RyZWFtcywgJnZhbHVlKTsKICAgICB9
CiAgICAgaWYgKGVycm9yICE9IE5QRVJSX05PX0VSUk9SKQpJbmRleDogU291cmNlL1dlYktpdC9t
YWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0JKHJldmlzaW9uIDE0
ODY1NSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02NjksNyArNjY5LDcgQEAgLSAoQk9PTClzZW5kRXZlbnQ6
KHZvaWQqKWV2ZW50IGlzRHJhd1JlYwogICAgIC8vIFNldCB0aGUgcGx1Z2luQWxsb3dQb3B1cCBm
bGFnLgogICAgIEFTU0VSVChfZXZlbnRIYW5kbGVyKTsKICAgICB7Ci0gICAgICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICBVc2VyR2VzdHVyZUlu
ZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKF9ldmVudEhhbmRsZXItPmN1cnJlbnRFdmVudElzVXNl
ckdlc3R1cmUoKSA/IERlZmluaXRlbHlQcm9jZXNzaW5nTmV3VXNlckdlc3R1cmUgOiBQb3NzaWJs
eVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgICAgIGFjY2VwdGVkRXZlbnQgPSBbX3BsdWdp
blBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5ldmVudChwbHVnaW4sIGV2ZW50KTsKICAgICB9
CkBAIC04NTAsNyArODUwLDcgQEAgLSAodm9pZClwcml2YXRlQnJvd3NpbmdNb2RlRGlkQ2hhbmdl
CiAKICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICB7Ci0gICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICBpZiAoW19w
bHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+c2V0dmFsdWUpCiAgICAgICAgICAgICBb
X3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5zZXR2YWx1ZShwbHVnaW4sIE5QTlZw
cml2YXRlTW9kZUJvb2wsICZ2YWx1ZSk7CiAgICAgfQpAQCAtOTkxLDcgKzk5MSw3IEBAIC0gKHZv
aWQpc2V0V2luZG93SWZOZWNlc3NhcnkKICAgICAgICAgaW5TZXRXaW5kb3cgPSBZRVM7ICAgICAg
ICAKICAgICAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgICAgIHsKLSAg
ICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2lu
ZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICAgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsK
ICAgICAgICAgICAgIG5wRXJyID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+
c2V0d2luZG93KHBsdWdpbiwgJndpbmRvdyk7CiAgICAgICAgIH0KICAgICAgICAgW3NlbGYgZGlk
Q2FsbFBsdWdJbkZ1bmN0aW9uXTsKQEAgLTE0NDMsNyArMTQ0Myw3IEBAIC0gKE5QT2JqZWN0ICop
Y3JlYXRlUGx1Z2luU2NyaXB0YWJsZU9iamUKICAgICBOUEVycm9yIGVycm9yOwogICAgIFtzZWxm
IHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25dOwogICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgIGVycm9yID0gW19wbHVnaW5QYWNr
YWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+Z2V0dmFsdWUocGx1Z2luLCBOUFBWcGx1Z2luU2NyaXB0
YWJsZU5QT2JqZWN0LCAmdmFsdWUpOwogICAgIH0KICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVu
Y3Rpb25dOwpAQCAtMTQ2Miw3ICsxNDYyLDcgQEAgLSAoQk9PTClnZXRGb3JtVmFsdWU6KE5TU3Ry
aW5nICoqKXZhbHVlCiAgICAgTlBFcnJvciBlcnJvcjsKICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJ
bkZ1bmN0aW9uXTsKICAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vblZNKCkpOwogICAgICAgICBlcnJvciA9IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVn
aW5GdW5jc10tPmdldHZhbHVlKHBsdWdpbiwgTlBQVmZvcm1WYWx1ZSwgJmJ1ZmZlcik7CiAgICAg
fQogICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0xNTk0LDcgKzE1OTQsNyBA
QCAtICh2b2lkKWV2YWx1YXRlSmF2YVNjcmlwdFBsdWdpblJlcXVlc3Q6CiAgICAgICAgIGlmIChb
SlNQbHVnaW5SZXF1ZXN0IHNlbmROb3RpZmljYXRpb25dKSB7CiAgICAgICAgICAgICBbc2VsZiB3
aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAg
ICAgICAgICAgIFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPnVybG5vdGlmeShw
bHVnaW4sIFtVUkwgX3dlYl9VUkxDU3RyaW5nXSwgTlBSRVNfRE9ORSwgW0pTUGx1Z2luUmVxdWVz
dCBub3RpZnlEYXRhXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBbc2VsZiBkaWRDYWxs
UGx1Z0luRnVuY3Rpb25dOwpAQCAtMTYyNiw3ICsxNjI2LDcgQEAgLSAodm9pZCl3ZWJGcmFtZToo
V2ViRnJhbWUgKil3ZWJGcmFtZSBkaQogICAgICAgICAKICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJ
bkZ1bmN0aW9uXTsKICAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vblZNKCkpOwogICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3Nd
LT51cmxub3RpZnkocGx1Z2luLCBbW1twbHVnaW5SZXF1ZXN0IHJlcXVlc3RdIFVSTF0gX3dlYl9V
UkxDU3RyaW5nXSwgcmVhc29uLCBbcGx1Z2luUmVxdWVzdCBub3RpZnlEYXRhXSk7CiAgICAgfQog
ICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0xNjcwLDcgKzE2NzAsNyBAQCAt
ICh2b2lkKWxvYWRQbHVnaW5SZXF1ZXN0OihXZWJQbHVnaW5SZXF1CiAgICAgICAgICAgICAgICAg
aWYgKFtwbHVnaW5SZXF1ZXN0IHNlbmROb3RpZmljYXRpb25dKSB7CiAgICAgICAgICAgICAgICAg
ICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25dOwogICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBbX3Bs
dWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT51cmxub3RpZnkocGx1Z2luLCBbW1twbHVn
aW5SZXF1ZXN0IHJlcXVlc3RdIFVSTF0gX3dlYl9VUkxDU3RyaW5nXSwgTlBFUlJfR0VORVJJQ19F
UlJPUiwgW3BsdWdpblJlcXVlc3Qgbm90aWZ5RGF0YV0pOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0y
NDY0LDcgKzI0NjQsNyBAQCAtIChOU0JpdG1hcEltYWdlUmVwICopX3ByaW50ZWRQbHVnaW5CaXRt
CiAgICAgLy8gVGVsbCB0aGUgcGx1Z2luIHRvIHByaW50IGludG8gdGhlIEdXb3JsZAogICAgIFtz
ZWxmIHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25dOwogICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2Jh
bERhdGEoKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgIFtfcGx1Z2luUGFja2FnZS5n
ZXQoKSBwbHVnaW5GdW5jc10tPnByaW50KHBsdWdpbiwgJm5wUHJpbnQpOwogICAgIH0KICAgICBb
c2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1
Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
bWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxlci5tbQkocmV2aXNpb24gMTQ4NjU1KQorKysg
U291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC05NywxMCArOTcsMTAgQEAgKyAoTlNWaWV3ICopcGx1Z0luVmlld1dpdGhBcmd1
bWVudHM6KE5TRAogICAgIE5TVmlldyAqdmlldyA9IG5pbDsKIAogICAgIGlmIChbdmlld0ZhY3Rv
cnkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnSW5WaWV3V2l0aEFyZ3VtZW50czop
XSkgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RP
TVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsK
ICAgICAgICAgdmlldyA9IFt2aWV3RmFjdG9yeSBwbHVnSW5WaWV3V2l0aEFyZ3VtZW50czphcmd1
bWVudHNdOwogICAgIH0gZWxzZSBpZiAoW3ZpZXdGYWN0b3J5IHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IocGx1Z2luVmlld1dpdGhBcmd1bWVudHM6KV0pIHsKLSAgICAgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0ds
b2JhbERhdGEoKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgIHZpZXcgPSBbdmlld0Zh
Y3RvcnkgcGx1Z2luVmlld1dpdGhBcmd1bWVudHM6YXJndW1lbnRzXTsKICAgICB9CiAgICAgCkBA
IC0xNTAsMTAgKzE1MCwxMCBAQCAtICh2b2lkKWRlYWxsb2MKIC0gKHZvaWQpc3RvcE9uZVBsdWdp
bjooTlNWaWV3ICopdmlldwogewogICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKHdlYlBsdWdJblN0b3ApXSkgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
KyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgW3ZpZXcgd2ViUGx1Z0luU3RvcF07CiAgICAg
fSBlbHNlIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdpblN0b3Ap
XSkgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RP
TVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsK
ICAgICAgICAgW3ZpZXcgcGx1Z2luU3RvcF07CiAgICAgfQogfQpAQCAtMTYxLDEwICsxNjEsMTAg
QEAgLSAodm9pZClzdG9wT25lUGx1Z2luOihOU1ZpZXcgKil2aWV3CiAtICh2b2lkKWRlc3Ryb3lP
bmVQbHVnaW46KE5TVmlldyAqKXZpZXcKIHsKICAgICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5EZXN0cm95KV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2Jh
bERhdGEoKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgIFt2aWV3IHdlYlBsdWdJbkRl
c3Ryb3ldOwogICAgIH0gZWxzZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihwbHVnaW5EZXN0cm95KV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAg
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgIFt2aWV3IHBsdWdpbkRlc3Ryb3ldOwogICAgIH0KIH0K
QEAgLTE4MSwxMCArMTgxLDEwIEBAIC0gKHZvaWQpc3RhcnRBbGxQbHVnaW5zCiAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgIGlkIGFWaWV3ID0gW192aWV3cyBv
YmplY3RBdEluZGV4OmldOwogICAgICAgICBpZiAoW2FWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3Iod2ViUGx1Z0luU3RhcnQpXSkgewotICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKSk7CisgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICAgICAgW2FWaWV3IHdlYlBs
dWdJblN0YXJ0XTsKICAgICAgICAgfSBlbHNlIGlmIChbYVZpZXcgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3RvcihwbHVnaW5TdGFydCldKSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKKyAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgICAgICBbYVZpZXcgcGx1Z2lu
U3RhcnRdOwogICAgICAgICB9CiAgICAgfQpAQCAtMjUzLDEwICsyNTMsMTAgQEAgLSAodm9pZClh
ZGRQbHVnaW46KE5TVmlldyAqKXZpZXcKIAogICAgICAgICBMT0coUGx1Z2lucywgImluaXRpYWxp
emluZyBwbHVnLWluICVAIiwgdmlldyk7CiAgICAgICAgIGlmIChbdmlldyByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKHdlYlBsdWdJbkluaXRpYWxpemUpXSkgewotICAgICAgICAgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CisgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICAgICAg
W3ZpZXcgd2ViUGx1Z0luSW5pdGlhbGl6ZV07CiAgICAgICAgIH0gZWxzZSBpZiAoW3ZpZXcgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnaW5Jbml0aWFsaXplKV0pIHsKLSAgICAgICAg
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAg
ICAgICAgIFt2aWV3IHBsdWdpbkluaXRpYWxpemVdOwogICAgICAgICB9CiAKQEAgLTI2NiwxNSAr
MjY2LDE1IEBAIC0gKHZvaWQpYWRkUGx1Z2luOihOU1ZpZXcgKil2aWV3CiAgICAgICAgIGlmIChf
c3RhcnRlZCkgewogICAgICAgICAgICAgTE9HKFBsdWdpbnMsICJzdGFydGluZyBwbHVnLWluICVA
Iiwgdmlldyk7CiAgICAgICAgICAgICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3Rvcih3ZWJQbHVnSW5TdGFydCldKSB7Ci0gICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKSk7CisgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgICAgICAgICBbdmll
dyB3ZWJQbHVnSW5TdGFydF07CiAgICAgICAgICAgICB9IGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luU3RhcnQpXSkgewotICAgICAgICAgICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAg
ICAgICAgICAgW3ZpZXcgcGx1Z2luU3RhcnRdOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzZXRD
b250YWluaW5nV2luZG93OildKSB7Ci0gICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEo
KSk7CisgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgICAgICAgICBbdmlldyBz
ZXRDb250YWluaW5nV2luZG93OltfZG9jdW1lbnRWaWV3IHdpbmRvd11dOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRz
Y2FwZVBsdWdpbkhvc3RQcm94eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9Q
bHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbQkocmV2aXNpb24gMTQ4NjU1
KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0
UHJveHkubW0JKHdvcmtpbmcgY29weSkKQEAgLTYzOSw3ICs2MzksNyBAQCBzdGF0aWMgSWRlbnRp
ZmllciBpZGVudGlmaWVyRnJvbUlkZW50aWZpCiAgICAgQVNTRVJUKGlkZW50aWZpZXItPmlzU3Ry
aW5nKCkpOwogICAKICAgICBjb25zdCBjaGFyKiBzdHIgPSBpZGVudGlmaWVyLT5zdHJpbmcoKTsg
ICAgCi0gICAgcmV0dXJuIElkZW50aWZpZXIoSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpLCBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKHN0ciwgc3RybGVuKHN0cikp
KTsKKyAgICByZXR1cm4gSWRlbnRpZmllcihKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSwgU3RyaW5n
Ojpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhzdHIsIHN0cmxlbihzdHIpKSk7CiB9CiAKIGtl
cm5fcmV0dXJuX3QgV0tQQ0ludm9rZShtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50MzJfdCBw
bHVnaW5JRCwgdWludDMyX3QgcmVxdWVzdElELCB1aW50MzJfdCBvYmplY3RJRCwgdWludDY0X3Qg
c2VydmVySWRlbnRpZmllciwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVk
L05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5oCShyZXZp
c2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAog
I2RlZmluZSBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHlfaAogCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSWRlbnRpZmllci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTR2xvYmFs
RGF0YS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1ZNLmg+CiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvU3Ryb25nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgogI2luY2x1ZGUg
PFdlYktpdC9ucGFwaS5oPgpAQCAtMzIwLDcgKzMyMCw3IEBAIHByaXZhdGU6CiAgICAgcHVibGlj
OgogICAgICAgICBMb2NhbE9iamVjdE1hcCgpOwogICAgICAgICB+TG9jYWxPYmplY3RNYXAoKTsK
LSAgICAgICAgdWludDMyX3QgaWRGb3JPYmplY3QoSlNDOjpKU0dsb2JhbERhdGEmLCBKU0M6OkpT
T2JqZWN0Kik7CisgICAgICAgIHVpbnQzMl90IGlkRm9yT2JqZWN0KEpTQzo6Vk0mLCBKU0M6OkpT
T2JqZWN0Kik7CiAgICAgICAgIHZvaWQgcmV0YWluKEpTQzo6SlNPYmplY3QqKTsKICAgICAgICAg
dm9pZCByZWxlYXNlKEpTQzo6SlNPYmplY3QqKTsKICAgICAgICAgdm9pZCBjbGVhcigpOwpJbmRl
eDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVk
L05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQkocmV2aXNpb24gMTQ4NjU1KQorKysgU291
cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDcgQEAgaW5saW5lIEpTQzo6SlNPYmpl
Y3QqIE5ldHNjYXBlUGx1Z2luSW5zdAogICAgIHJldHVybiBtX2lkVG9KU09iamVjdE1hcC5nZXQo
b2JqZWN0SUQpLmdldCgpOwogfQogCi11aW50MzJfdCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk6OkxvY2FsT2JqZWN0TWFwOjppZEZvck9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpTT2JqZWN0KiBvYmplY3QpCit1aW50MzJfdCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
OkxvY2FsT2JqZWN0TWFwOjppZEZvck9iamVjdChWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCiB7
CiAgICAgLy8gVGhpcyBtZXRob2QgY3JlYXRlcyBvYmplY3RzIHdpdGggcmVmY291bnQgb2YgMSwg
YnV0IGRvZXNuJ3QgaW5jcmVhc2UgcmVmY291bnQgd2hlbiByZXR1cm5pbmcKICAgICAvLyBmb3Vu
ZCBvYmplY3RzLiBUaGlzIGV4dHJhIGNvdW50IGFjY291bnRzIGZvciB0aGUgbWFpbiAicmVmZXJl
bmNlIiBrZXB0IGJ5IHBsdWdpbiBwcm9jZXNzLgpAQCAtMTUxLDcgKzE1MSw3IEBAIHVpbnQzMl90
IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG8KICAgICAgICAgb2JqZWN0SUQgPSArK21f
b2JqZWN0SURDb3VudGVyOwogICAgIH0gd2hpbGUgKCFtX29iamVjdElEQ291bnRlciB8fCBtX29i
amVjdElEQ291bnRlciA9PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oLTEpIHx8IG1faWRUb0pTT2Jq
ZWN0TWFwLmNvbnRhaW5zKG9iamVjdElEKSk7CiAKLSAgICBtX2lkVG9KU09iamVjdE1hcC5zZXQo
b2JqZWN0SUQsIFN0cm9uZzxKU09iamVjdD4oZ2xvYmFsRGF0YSwgb2JqZWN0KSk7CisgICAgbV9p
ZFRvSlNPYmplY3RNYXAuc2V0KG9iamVjdElELCBTdHJvbmc8SlNPYmplY3Q+KHZtLCBvYmplY3Qp
KTsKICAgICBtX2pzT2JqZWN0VG9JRE1hcC5zZXQob2JqZWN0LCBtYWtlX3BhaXIob2JqZWN0SUQs
IDEpKTsKIAogICAgIHJldHVybiBvYmplY3RJRDsKQEAgLTgyOSw3ICs4MjksNyBAQCBib29sIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0V2luCiAgICAgaWYgKCFmcmFtZS0+c2NyaXB0
KCktPmNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkKICAgICAgICAg
b2JqZWN0SUQgPSAwOwogICAgIGVsc2UKLSAgICAgICAgb2JqZWN0SUQgPSBtX2xvY2FsT2JqZWN0
cy5pZEZvck9iamVjdCgqcGx1Z2luV29ybGQoKS0+Z2xvYmFsRGF0YSgpLCBmcmFtZS0+c2NyaXB0
KCktPndpbmRvd1NoZWxsKHBsdWdpbldvcmxkKCkpLT53aW5kb3coKSk7CisgICAgICAgIG9iamVj
dElEID0gbV9sb2NhbE9iamVjdHMuaWRGb3JPYmplY3QoKnBsdWdpbldvcmxkKCktPnZtKCksIGZy
YW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwocGx1Z2luV29ybGQoKSktPndpbmRvdygpKTsKICAg
ICAgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC04NDEsNyArODQxLDcgQEAgYm9vbCBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmdldFBsdQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCiAgICAgaWYgKEpTT2JqZWN0KiBvYmplY3QgPSBmcmFtZS0+c2NyaXB0KCktPmpzT2JqZWN0
Rm9yUGx1Z2luRWxlbWVudChbbV9wbHVnaW5WaWV3IGVsZW1lbnRdKSkKLSAgICAgICAgb2JqZWN0
SUQgPSBtX2xvY2FsT2JqZWN0cy5pZEZvck9iamVjdCgqcGx1Z2luV29ybGQoKS0+Z2xvYmFsRGF0
YSgpLCBvYmplY3QpOworICAgICAgICBvYmplY3RJRCA9IG1fbG9jYWxPYmplY3RzLmlkRm9yT2Jq
ZWN0KCpwbHVnaW5Xb3JsZCgpLT52bSgpLCBvYmplY3QpOwogICAgIGVsc2UKICAgICAgICAgb2Jq
ZWN0SUQgPSAwOwogICAgIApAQCAtODcwLDggKzg3MCw4IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5OjpldmFsdWEKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhwbHVnaW5Xb3JsZCgpLT5nbG9iYWxEYXRhKCkp
OwotICAgIFN0cm9uZzxKU0dsb2JhbE9iamVjdD4gZ2xvYmFsT2JqZWN0KCpwbHVnaW5Xb3JsZCgp
LT5nbG9iYWxEYXRhKCksIGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxk
KCkpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhwbHVnaW5Xb3JsZCgpLT52bSgpKTsKKyAgICBT
dHJvbmc8SlNHbG9iYWxPYmplY3Q+IGdsb2JhbE9iamVjdCgqcGx1Z2luV29ybGQoKS0+dm0oKSwg
ZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSkpOwogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCiAgICAgVXNlckdlc3R1
cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihhbGxvd1BvcHVwcyA/IERlZmluaXRlbHlQcm9j
ZXNzaW5nTmV3VXNlckdlc3R1cmUgOiBQb3NzaWJseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CkBA
IC0xMjgxLDcgKzEyODEsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6YWRk
VmFsCiAgICAgICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50
Om9iamVjdElEXV07CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBbYXJyYXkgYWRkT2Jq
ZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50OkpTT2JqZWN0VmFsdWVUeXBlXV07Ci0gICAgICAg
ICAgICBbYXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50Om1fbG9jYWxPYmpl
Y3RzLmlkRm9yT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgb2JqZWN0KV1dOworICAgICAgICAg
ICAgW2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDptX2xvY2FsT2JqZWN0
cy5pZEZvck9iamVjdChleGVjLT52bSgpLCBvYmplY3QpXV07CiAgICAgICAgIH0KICAgICB9IGVs
c2UKICAgICAgICAgW2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpWb2lk
VmFsdWVUeXBlXV07CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94
eUluc3RhbmNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9z
dGVkL1Byb3h5SW5zdGFuY2UubW0JKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJLaXQv
bWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4
NCwxNiArMTg0LDE2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUHJveHlSdW50aW1lTWV0aG9kKiBj
cmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25z
dCBTdHJpbmcmIG5hbWUsIEJpbmRpbmdzOjpNZXRob2QqIG1ldGhvZCkKICAgICB7CiAgICAgICAg
IC8vIEZJWE1FOiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlIHVzZXMgdGhlIHByb3RvdHlwZSBv
ZmYgb2YgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QKLSAgICAgICAgLy8gZXhlYy1nbG9iYWxEYXRh
KCkgaXMgYWxzbyBsaWtlbHkgd3JvbmcuCisgICAgICAgIC8vIGV4ZWMtdm0oKSBpcyBhbHNvIGxp
a2VseSB3cm9uZy4KICAgICAgICAgU3RydWN0dXJlKiBkb21TdHJ1Y3R1cmUgPSBkZXByZWNhdGVk
R2V0RE9NU3RydWN0dXJlPFByb3h5UnVudGltZU1ldGhvZD4oZXhlYyk7CiAgICAgICAgIFByb3h5
UnVudGltZU1ldGhvZCogcnVudGltZU1ldGhvZCA9IG5ldyAoYWxsb2NhdGVDZWxsPFByb3h5UnVu
dGltZU1ldGhvZD4oKmV4ZWMtPmhlYXAoKSkpIFByb3h5UnVudGltZU1ldGhvZChnbG9iYWxPYmpl
Y3QsIGRvbVN0cnVjdHVyZSwgbWV0aG9kKTsKLSAgICAgICAgcnVudGltZU1ldGhvZC0+ZmluaXNo
Q3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBuYW1lKTsKKyAgICAgICAgcnVudGltZU1ldGhv
ZC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwgbmFtZSk7CiAgICAgICAgIHJldHVybiBydW50
aW1lTWV0aG9kOwogICAgIH0KIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8pOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpA
QCAtMjA0LDkgKzIwNCw5IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTdHJpbmcmIG5hbWUp
CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0sIGNvbnN0IFN0cmluZyYgbmFtZSkKICAg
ICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIG5hbWUpOworICAg
ICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgbmFtZSk7CiAgICAgICAgIEFTU0VSVChpbmhl
cml0cygmc19pbmZvKSk7CiAgICAgfQogfTsKQEAgLTMzNyw3ICszMzcsNyBAQCB2b2lkIFByb3h5
SW5zdGFuY2U6OmdldFByb3BlcnR5TmFtZXMoRXhlCiAKICAgICAgICAgaWYgKGlkZW50aWZpZXIt
PmlzU3RyaW5nKCkpIHsKICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHN0ciA9IGlkZW50aWZpZXIt
PnN0cmluZygpOwotICAgICAgICAgICAgbmFtZUFycmF5LmFkZChJZGVudGlmaWVyKEpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSwgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxs
YmFjayhzdHIsIHN0cmxlbihzdHIpKSkpOworICAgICAgICAgICAgbmFtZUFycmF5LmFkZChJZGVu
dGlmaWVyKEpTRE9NV2luZG93Ojpjb21tb25WTSgpLCBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGlu
MUZhbGxiYWNrKHN0ciwgc3RybGVuKHN0cikpKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgbmFtZUFycmF5LmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGlkZW50aWZpZXItPm51bWJl
cigpKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJv
eHlSdW50aW1lT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lu
cy9Ib3N0ZWQvUHJveHlSdW50aW1lT2JqZWN0LmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJj
ZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5UnVudGltZU9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUHJveHlSdW50aW1l
T2JqZWN0KiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxQcm94eUluc3RhbmNlPiBpbnN0YW5jZSkKICAgICB7
CiAgICAgICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlIHVzZXMgdGhlIHBy
b3RvdHlwZSBvZmYgb2YgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QuCi0gICAgICAgIC8vIGV4ZWMt
Pmdsb2JhbERhdGEoKSBpcyBhbHNvIGxpa2VseSB3cm9uZy4KKyAgICAgICAgLy8gZXhlYy0+dm0o
KSBpcyBhbHNvIGxpa2VseSB3cm9uZy4KICAgICAgICAgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IFdlYkNvcmU6OmRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8UHJveHlSdW50aW1lT2JqZWN0
PihleGVjKTsKICAgICAgICAgUHJveHlSdW50aW1lT2JqZWN0KiBvYmplY3QgPSBuZXcgKEpTQzo6
YWxsb2NhdGVDZWxsPFByb3h5UnVudGltZU9iamVjdD4oKmV4ZWMtPmhlYXAoKSkpIFByb3h5UnVu
dGltZU9iamVjdChleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgaW5zdGFuY2UpOwogICAg
ICAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdCk7CkBAIC01MSw5ICs1MSw5
IEBAIHB1YmxpYzoKIAogICAgIFByb3h5SW5zdGFuY2UqIGdldEludGVybmFsUHJveHlJbnN0YW5j
ZSgpIGNvbnN0OwogCi0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8pOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5m
byBzX2luZm87CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVn
RGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJT
Y3JpcHREZWJ1Z0RlbGVnYXRlLm1tCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAg
LTE3Niw3ICsxNzYsNyBAQCAtIChOU0FycmF5ICopc2NvcGVDaGFpbgogCiAKICAgICBKU1Njb3Bl
KiBzY29wZSA9IF9wcml2YXRlLT5kZWJ1Z2dlckNhbGxGcmFtZS0+c2NvcGUoKTsKLSAgICBKU0xv
Y2tIb2xkZXIgbG9jayhzY29wZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhzY29wZS0+dm0oKSk7CiAgICAgaWYgKCFzY29wZS0+bmV4dCgpKSAgLy8gZ2xvYmFsIGZyYW1l
CiAgICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6X3ByaXZhdGUtPmdsb2Jh
bE9iamVjdF07CiAKQEAgLTE4Niw3ICsxODYsNyBAQCAtIChOU0FycmF5ICopc2NvcGVDaGFpbgog
ICAgIGZvciAoU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ID0gc2NvcGUtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gaXQuZ2V0KCk7CiAgICAgICAg
IGlmIChvYmplY3QtPmlzQWN0aXZhdGlvbk9iamVjdCgpKQotICAgICAgICAgICAgb2JqZWN0ID0g
RGVidWdnZXJBY3RpdmF0aW9uOjpjcmVhdGUoKnNjb3BlLT5nbG9iYWxEYXRhKCksIG9iamVjdCk7
CisgICAgICAgICAgICBvYmplY3QgPSBEZWJ1Z2dlckFjdGl2YXRpb246OmNyZWF0ZSgqc2NvcGUt
PnZtKCksIG9iamVjdCk7CiAgICAgICAgIFtzY29wZXMgYWRkT2JqZWN0OltzZWxmIF9jb252ZXJ0
VmFsdWVUb09iamNWYWx1ZTpvYmplY3RdXTsKICAgICB9CiAKQEAgLTIzNCwxMiArMjM0LDEyIEBA
IC0gKGlkKWV2YWx1YXRlV2ViU2NyaXB0OihOU1N0cmluZyAqKXNjcmkKICAgICAvLyBXZWJTY3Jp
cHRDYWxsRnJhbWUuIEluc3RlYWQsIHdlIG5lZWQgdG8gc2V0IHRoZSBkeW5hbWljIGdsb2JhbCBv
YmplY3QKICAgICAvLyBhbmQgZXZhbHVhdGUgdGhlIEpTIGluIHRoZSBnbG9iYWwgb2JqZWN0J3Mg
Z2xvYmFsIGNhbGwgZnJhbWUuCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IF9w
cml2YXRlLT5kZWJ1Z2dlci0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2so
Z2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2Jh
bE9iamVjdC0+dm0oKSk7CiAKLSAgICBpZiAoc2VsZiA9PSBfcHJpdmF0ZS0+ZGVidWdnZXItPmds
b2JhbENhbGxGcmFtZSgpICYmICFnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5keW5hbWljR2xv
YmFsT2JqZWN0KSB7CisgICAgaWYgKHNlbGYgPT0gX3ByaXZhdGUtPmRlYnVnZ2VyLT5nbG9iYWxD
YWxsRnJhbWUoKSAmJiAhZ2xvYmFsT2JqZWN0LT52bSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpIHsK
ICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IF9wcml2YXRlLT5kZWJ1Z2dl
ci0+Z2xvYmFsT2JqZWN0KCk7CiAKLSAgICAgICAgRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIGds
b2JhbE9iamVjdFNjb3BlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3Qp
OworICAgICAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUoZ2xv
YmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QpOwogCiAgICAgICAgIEpTQzo6SlNWYWx1ZSBl
eGNlcHRpb247CiAgICAgICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBldmFsdWF0ZUluR2xvYmFs
Q2FsbEZyYW1lKHNjcmlwdCwgZXhjZXB0aW9uLCBnbG9iYWxPYmplY3QpOwpJbmRleDogU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1tCShyZXZpc2lvbiAx
NDg2NTUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHN0YXRpYyBXZWJGcmFtZSAqdG9XZWJG
cmFtZShKU0dsb2JhbE9iamUKIAogV2ViU2NyaXB0RGVidWdnZXI6OldlYlNjcmlwdERlYnVnZ2Vy
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgOiBtX2NhbGxpbmdEZWxlZ2F0ZShm
YWxzZSkKLSAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBn
bG9iYWxPYmplY3QpCisgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPnZtKCksIGds
b2JhbE9iamVjdCkKIHsKICAgICBhdHRhY2goZ2xvYmFsT2JqZWN0KTsKICAgICBpbml0R2xvYmFs
Q2FsbEZyYW1lKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTA0LTE3ICBHZW9mZnJleSBHYXJlbiAgPGdn
YXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lZCBKU0dsb2JhbERhdGEgdG8gVk0KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDc3NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwOgorICAgICAgICAoRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OmphdmFTY3JpcHRPYmplY3RzQ291bnQpOgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L1FXZWJGcmFtZUFkYXB0ZXIuY3BwOgorICAgICAgICAoUVdlYkZyYW1lQWRhcHRlcjo6
YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqZWN0KToKKwogMjAxMy0wNC0xNSAgU2FtIFdlaW5pZyAg
PHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBtb3JlICNpbmNsdWRlcyBmcm9tIEZy
YW1lLmgKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBT
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6OmNsZWFyRnJhbWUKIAogaW50IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpqYXZh
U2NyaXB0T2JqZWN0c0NvdW50KCkKIHsKLSAgICByZXR1cm4gSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKS0+aGVhcC5nbG9iYWxPYmplY3RDb3VudCgpOworICAgIHJldHVybiBK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCktPmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQoKTsKIH0K
IAogdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Z2FyYmFnZUNvbGxlY3RvckNvbGxlY3Qo
KQpJbmRleDogU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViRnJhbWVBZGFwdGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FXZWJG
cmFtZUFkYXB0ZXIuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L1FXZWJGcmFtZUFkYXB0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYs
NyArMjM2LDcgQEAgdm9pZCBRV2ViRnJhbWVBZGFwdGVyOjphZGRUb0phdmFTY3JpcHRXaQogICAg
IEpTQzo6SlNPYmplY3QqIHJ1bnRpbWVPYmplY3QgPSBKU0M6OkJpbmRpbmdzOjpRdEluc3RhbmNl
OjpnZXRRdEluc3RhbmNlKG9iamVjdCwgcm9vdCwgdmFsdWVPd25lcnNoaXApLT5jcmVhdGVSdW50
aW1lT2JqZWN0KGV4ZWMpOwogCiAgICAgSlNDOjpQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICB3
aW5kb3ctPm1ldGhvZFRhYmxlKCktPnB1dCh3aW5kb3csIGV4ZWMsIEpTQzo6SWRlbnRpZmllcigm
ZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWludGVycHJldF9jYXN0X3B0cjxjb25zdCBVQ2hhcio+KG5h
bWUuY29uc3REYXRhKCkpLCBuYW1lLmxlbmd0aCgpKSwgcnVudGltZU9iamVjdCwgc2xvdCk7Cisg
ICAgd2luZG93LT5tZXRob2RUYWJsZSgpLT5wdXQod2luZG93LCBleGVjLCBKU0M6OklkZW50aWZp
ZXIoJmV4ZWMtPnZtKCksIHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IFVDaGFyKj4obmFtZS5j
b25zdERhdGEoKSksIG5hbWUubGVuZ3RoKCkpLCBydW50aW1lT2JqZWN0LCBzbG90KTsKIH0KIAog
UVN0cmluZyBRV2ViRnJhbWVBZGFwdGVyOjp0b0h0bWwoKSBjb25zdApJbmRleDogU291cmNlL1dl
YktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTMtMDQtMTcgIEdlb2ZmcmV5IEdhcmVu
ICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWVkIEpTR2xvYmFsRGF0YSB0byBW
TQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0Nzc3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJD
b3JlU3RhdGlzdGljcy5jcHA6CisgICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlw
dE9iamVjdHNDb3VudCk6CisgICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlwdEds
b2JhbE9iamVjdHNDb3VudCk6CisgICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlw
dFByb3RlY3RlZE9iamVjdHNDb3VudCk6CisgICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6amF2
YVNjcmlwdFByb3RlY3RlZEdsb2JhbE9iamVjdHNDb3VudCk6CisgICAgICAgIChXZWJDb3JlU3Rh
dGlzdGljczo6amF2YVNjcmlwdFByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMpOgorICAgICAgICAq
IFdlYkphdmFTY3JpcHRDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2ViSmF2YVNjcmlwdENvbGxl
Y3Rvcjo6b2JqZWN0Q291bnQpOgorCiAyMDEzLTA0LTEzICBSb2dlciBGb25nICA8cm9nZXJfZm9u
Z0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQnVpbGQgZml4IGZvciBXaW5kb3dz
LgpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAkocmV2aXNpb24g
MTQ4NjU1KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OCw4ICs5OCw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2Vi
Q29yZVN0YXRpc3QKICAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwog
Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKLSAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkt
PmhlYXAub2JqZWN0Q291bnQoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6
Y29tbW9uVk0oKSk7CisgICAgKmNvdW50ID0gKFVJTlQpSlNET01XaW5kb3c6OmNvbW1vblZNKCkt
PmhlYXAub2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTA5LDggKzEw
OSw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29yZVN0YXRpc3QKICAgICBpZiAo
IWNvdW50KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgSlNMb2NrSG9sZGVyIGxv
Y2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKLSAgICAqY291bnQgPSAoVUlO
VClKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuZ2xvYmFsT2JqZWN0Q291
bnQoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Cisg
ICAgKmNvdW50ID0gKFVJTlQpSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhlYXAuZ2xvYmFsT2Jq
ZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTIwLDggKzEyMCw4IEBAIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29yZVN0YXRpc3QKICAgICBpZiAoIWNvdW50KQog
ICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01X
aW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKLSAgICAqY291bnQgPSAoVUlOVClKU0RPTVdp
bmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAgKmNv
dW50ID0gKFVJTlQpSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0
Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTMxLDE2ICsxMzEsMTYgQEAgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJDb3JlU3RhdGlzdAogICAgIGlmICghY291bnQpCiAg
ICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdp
bmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwotICAgICpjb3VudCA9IChVSU5UKUpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3Vu
dCgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKKyAg
ICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5wcm90ZWN0ZWRH
bG9iYWxPYmplY3RDb3VudCgpOwogICAgIHJldHVybiBTX09LOwogfQogCiBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0
VHlwZUNvdW50cyggCiAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBJUHJvcGVydHlCYWcyKiogdHlw
ZU5hbWVzQW5kQ291bnRzKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpj
b21tb25KU0dsb2JhbERhdGEoKSk7Ci0gICAgT3duUHRyPFR5cGVDb3VudFNldD4ganNPYmplY3RU
eXBlTmFtZXMoSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3Rl
ZE9iamVjdFR5cGVDb3VudHMoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6
OmNvbW1vblZNKCkpOworICAgIE93blB0cjxUeXBlQ291bnRTZXQ+IGpzT2JqZWN0VHlwZU5hbWVz
KEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMo
KSk7CiAgICAgdHlwZWRlZiBUeXBlQ291bnRTZXQ6OmNvbnN0X2l0ZXJhdG9yIEl0ZXJhdG9yOwog
ICAgIEl0ZXJhdG9yIGVuZCA9IGpzT2JqZWN0VHlwZU5hbWVzLT5lbmQoKTsKICAgICBIYXNoTWFw
PFN0cmluZywgaW50PiB0eXBlQ291bnRNYXA7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJK
YXZhU2NyaXB0Q29sbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9X
ZWJKYXZhU2NyaXB0Q29sbGVjdG9yLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dl
YktpdC93aW4vV2ViSmF2YVNjcmlwdENvbGxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDcgKzI4LDcgQEAKICNpbmNsdWRlICJXZWJKYXZhU2NyaXB0Q29sbGVjdG9yLmgiCiAKICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNH
bG9iYWxEYXRhLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVk0uaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0dDQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSlNET01XaW5kb3cuaD4K
ICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgpAQCAtMTExLDcgKzExMSw3IEBAIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgV2ViSmF2YVNjcmlwdEMKICAgICAgICAgcmV0dXJuIEVfUE9JTlRF
UjsKICAgICB9CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOwotICAgICpjb3VudCA9IChVSU5UKUpTRE9NV2luZG93Ojpjb21tb25KU0ds
b2JhbERhdGEoKS0+aGVhcC5vYmplY3RDb3VudCgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpT
RE9NV2luZG93Ojpjb21tb25WTSgpKTsKKyAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6
Y29tbW9uVk0oKS0+aGVhcC5vYmplY3RDb3VudCgpOwogICAgIHJldHVybiBTX09LOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198675</attachid>
            <date>2013-04-17 20:59:12 -0700</date>
            <delta_ts>2013-04-18 10:51:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-114777-20130417205843.patch</filename>
            <type>text/plain</type>
            <size>1990890</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4NTQg
QEAKKzIwMTMtMDQtMTcgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZW5hbWVkIEpTR2xvYmFsRGF0YSB0byBWTQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0Nzc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBUEkvQVBJQ2FzdC5oOgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKHRvSlMpOgorICAgICAgICAodG9SZWYpOgorICAgICAgICAqIEFQSS9BUElTaGlt
cy5oOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW1XaXRob3V0TG9jazo6QVBJRW50cnlTaGlt
V2l0aG91dExvY2spOgorICAgICAgICAoQVBJRW50cnlTaGltV2l0aG91dExvY2spOgorICAgICAg
ICAoSlNDOjpBUElFbnRyeVNoaW06OkFQSUVudHJ5U2hpbSk6CisgICAgICAgIChBUElFbnRyeVNo
aW0pOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW06On5BUElFbnRyeVNoaW0pOgorICAgICAg
ICAoSlNDOjpBUElDYWxsYmFja1NoaW06OkFQSUNhbGxiYWNrU2hpbSk6CisgICAgICAgIChKU0M6
OkFQSUNhbGxiYWNrU2hpbTo6fkFQSUNhbGxiYWNrU2hpbSk6CisgICAgICAgIChBUElDYWxsYmFj
a1NoaW0pOgorICAgICAgICAqIEFQSS9KU0FQSVdyYXBwZXJPYmplY3QuaDoKKyAgICAgICAgKEpT
QVBJV3JhcHBlck9iamVjdCk6CisgICAgICAgICogQVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbToK
KyAgICAgICAgKEpTQzo6OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU0FQSVdy
YXBwZXJPYmplY3Q6OkpTQVBJV3JhcHBlck9iamVjdCk6CisgICAgICAgIChKU0M6OkpTQVBJV3Jh
cHBlck9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0FQSVdyYXBwZXJP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIEFQSS9KU0Jhc2UuY3BwOgorICAgICAg
ICAoSlNHYXJiYWdlQ29sbGVjdCk6CisgICAgICAgIChKU1JlcG9ydEV4dHJhTWVtb3J5Q29zdCk6
CisgICAgICAgIChKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmcpOgorICAg
ICAgICAqIEFQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpKU0Nh
bGxiYWNrQ29uc3RydWN0b3I6OkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6
OkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIEFQSS9K
U0NhbGxiYWNrQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja0NvbnN0cnVj
dG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrRnVuY3Rpb24u
Y3BwOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKEpTQzo6SlNDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAqIEFQ
SS9KU0NhbGxiYWNrRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQ2FsbGJhY2tGdW5jdGlvbik6Cisg
ICAgICAgIChKU0M6OkpTQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5jcHA6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIEFQSS9KU0NhbGxi
YWNrT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3REYXRhOjpzZXRQcml2
YXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0RGF0YTo6SlNQcml2
YXRlUHJvcGVydHlNYXA6OnNldFByaXZhdGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0NhbGxiYWNr
T2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDo6c2V0UHJpdmF0ZVByb3Bl
cnR5KToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oOgorICAgICAg
ICAoSlNDOjo6OkpTQ2FsbGJhY2tPYmplY3QpOgorICAgICAgICAoSlNDOjo6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKEpTQzo6OjpwdXQpOgorICAgICAgICAoSlNDOjo6OnN0YXRpY0Z1bmN0
aW9uR2V0dGVyKToKKyAgICAgICAgKiBBUEkvSlNDbGFzc1JlZi5jcHA6CisgICAgICAgIChPcGFx
dWVKU0NsYXNzQ29udGV4dERhdGE6Ok9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSk6CisgICAgICAg
IChPcGFxdWVKU0NsYXNzOjpjb250ZXh0RGF0YSk6CisgICAgICAgIChPcGFxdWVKU0NsYXNzOjpw
cm90b3R5cGUpOgorICAgICAgICAqIEFQSS9KU0NsYXNzUmVmLmg6CisgICAgICAgIChPcGFxdWVK
U0NsYXNzQ29udGV4dERhdGEpOgorICAgICAgICAqIEFQSS9KU0NvbnRleHQubW06CisgICAgICAg
ICgtW0pTQ29udGV4dCBzZXRFeGNlcHRpb246XSk6CisgICAgICAgICgtW0pTQ29udGV4dCBpbml0
V2l0aEdsb2JhbENvbnRleHRSZWY6XSk6CisgICAgICAgICgrW0pTQ29udGV4dCBjb250ZXh0V2l0
aEdsb2JhbENvbnRleHRSZWY6XSk6CisgICAgICAgICogQVBJL0pTQ29udGV4dFJlZi5jcHA6Cisg
ICAgICAgIChKU0NvbnRleHRHcm91cENyZWF0ZSk6CisgICAgICAgIChKU0NvbnRleHRHcm91cFJl
bGVhc2UpOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0Q3JlYXRlKToKKyAgICAgICAgKEpTR2xv
YmFsQ29udGV4dENyZWF0ZUluR3JvdXApOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0UmV0YWlu
KToKKyAgICAgICAgKEpTR2xvYmFsQ29udGV4dFJlbGVhc2UpOgorICAgICAgICAoSlNDb250ZXh0
R2V0R3JvdXApOgorICAgICAgICAoSlNDb250ZXh0Q3JlYXRlQmFja3RyYWNlKToKKyAgICAgICAg
KiBBUEkvSlNPYmplY3RSZWYuY3BwOgorICAgICAgICAoSlNPYmplY3RNYWtlKToKKyAgICAgICAg
KEpTT2JqZWN0TWFrZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTT2JqZWN0TWFrZUZ1bmN0aW9u
KToKKyAgICAgICAgKEpTT2JqZWN0U2V0UHJvdG90eXBlKToKKyAgICAgICAgKEpTT2JqZWN0SGFz
UHJvcGVydHkpOgorICAgICAgICAoSlNPYmplY3RHZXRQcm9wZXJ0eSk6CisgICAgICAgIChKU09i
amVjdFNldFByb3BlcnR5KToKKyAgICAgICAgKEpTT2JqZWN0RGVsZXRlUHJvcGVydHkpOgorICAg
ICAgICAoSlNPYmplY3RHZXRQcml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlNPYmplY3RTZXRQ
cml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlNPYmplY3REZWxldGVQcml2YXRlUHJvcGVydHkp
OgorICAgICAgICAoT3BhcXVlSlNQcm9wZXJ0eU5hbWVBcnJheTo6T3BhcXVlSlNQcm9wZXJ0eU5h
bWVBcnJheSk6CisgICAgICAgIChPcGFxdWVKU1Byb3BlcnR5TmFtZUFycmF5KToKKyAgICAgICAg
KEpTT2JqZWN0Q29weVByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNQcm9wZXJ0eU5hbWVBcnJh
eVJlbGVhc2UpOgorICAgICAgICAoSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvckFkZE5hbWUpOgor
ICAgICAgICAqIEFQSS9KU1NjcmlwdFJlZi5jcHA6CisgICAgICAgIChPcGFxdWVKU1NjcmlwdDo6
Y3JlYXRlKToKKyAgICAgICAgKE9wYXF1ZUpTU2NyaXB0Ojp2bSk6CisgICAgICAgIChPcGFxdWVK
U1NjcmlwdDo6T3BhcXVlSlNTY3JpcHQpOgorICAgICAgICAoT3BhcXVlSlNTY3JpcHQpOgorICAg
ICAgICAocGFyc2VTY3JpcHQpOgorICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tOgor
ICAgICAgICAoc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgpOgorICAgICAgICAqIEFQSS9KU1ZpcnR1
YWxNYWNoaW5lSW50ZXJuYWwuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogQVBJL0pTV3Jh
cHBlck1hcC5tbToKKyAgICAgICAgKG1ha2VXcmFwcGVyKToKKyAgICAgICAgKiBBUEkvT2JqQ0Nh
bGxiYWNrRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb246OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tOgor
ICAgICAgICAoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBB
UEkvT3BhcXVlSlNTdHJpbmcuY3BwOgorICAgICAgICAoT3BhcXVlSlNTdHJpbmc6OmlkZW50aWZp
ZXIpOgorICAgICAgICAqIEFQSS9PcGFxdWVKU1N0cmluZy5oOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKE9wYXF1ZUpTU3RyaW5nKToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIEpTQ1R5cGVkQXJyYXlTdHVicy5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS5vcmRlcjoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZUV4cG9ydHMuZGVmOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ou
ZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
RXhwb3J0R2VuZXJhdG9yL0phdmFTY3JpcHRDb3JlRXhwb3J0cy5kZWYuaW46CisgICAgICAgICog
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBLZXl3
b3JkTG9va3VwR2VuZXJhdG9yLnB5OgorICAgICAgICAoVHJpZS5wcmludFN1YlRyZWVBc0MpOgor
ICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5j
cHA6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6ZXhlY3V0YWJsZUNvcHkpOgorICAgICAg
ICAqIGFzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEFSTUFzc2VtYmxlcik6Cisg
ICAgICAgICogYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBc3Nl
bWJsZXJCdWZmZXI6OmV4ZWN1dGFibGVDb3B5KToKKyAgICAgICAgKiBhc3NlbWJsZXIvQXNzZW1i
bGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZm
ZXJXaXRoQ29uc3RhbnRQb29sOjpleGVjdXRhYmxlQ29weSk6CisgICAgICAgICogYXNzZW1ibGVy
L0xpbmtCdWZmZXIuY3BwOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpsaW5rQ29kZSk6Cisg
ICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChKU0M6OkxpbmtCdWZmZXI6OkxpbmtCdWZmZXIpOgorICAgICAgICAoTGlua0J1ZmZlcik6Cisg
ICAgICAgICogYXNzZW1ibGVyL01JUFNBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6TUlQU0Fz
c2VtYmxlcjo6ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAqIGFzc2VtYmxlci9TSDRBc3NlbWJs
ZXIuaDoKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpleGVjdXRhYmxlQ29weSk6CisgICAg
ICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJs
ZXI6OmV4ZWN1dGFibGVDb3B5KToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpYODZJbnN0
cnVjdGlvbkZvcm1hdHRlcjo6ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nh
bGxMaW5rSW5mby5jcHA6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dW5saW5rKToKKyAg
ICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uaDoKKyAgICAgICAgKENhbGxMaW5rSW5mbyk6
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6ZHVtcFN0
cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRTdHJ1Y3R1cmVzKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6On5Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0U3RydWN0dXJl
cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNyZWF0ZUFjdGl2YXRpb24pOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnVubGlua0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxp
bmtJbmNvbWluZ0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5kQ2xvc3VyZUNh
bGxGb3JSZXR1cm5QQyk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OmpldHRpc29u
SW1wbCk6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6OmpldHRpc29uSW1wbCk6CisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpqZXR0aXNvbkltcGwpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnByZWRpY3RlZE1hY2hpbmVDb2RlU2l6ZSk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6dXNlc09wY29kZSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6YXBwZW5kV2Vha1JlZmVyZW5jZSk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6YXBwZW5kV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnNldEpJVENvZGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNl
dEdsb2JhbERhdGEpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZtKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjp2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNl
dENvbnN0YW50UmVnaXN0ZXJzKToKKyAgICAgICAgKENvZGVCbG9jayk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb246OldlYWtSZWZlcmVuY2VUcmFuc2l0
aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9FdmFsQ29kZUNhY2hlLmg6CisgICAgICAgIChKU0M6
OkV2YWxDb2RlQ2FjaGU6OmdldFNsb3cpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0
dXMuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KToK
KyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvckNoYWluKToKKyAgICAgICAg
KEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvR2V0
QnlJZFN0YXR1cy5oOgorICAgICAgICAoR2V0QnlJZFN0YXR1cyk6CisgICAgICAgICogYnl0ZWNv
ZGUvSW5zdHJ1Y3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SW5zdHJ1Y3Rpb246Okluc3RydWN0aW9u
KToKKyAgICAgICAgKiBieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oOgorICAgICAg
ICAoSlNDOjpPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChK
U0M6Ok9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpwb3NzaWJsZURlZmF1bHRQcm9wZXJ0eUNvdW50
KToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaDoK
KyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0OjpQb2x5bW9ycGhp
Y1N0dWJJbmZvOjpzZXQpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3Q6OlBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCk6CisgICAgICAgICogYnl0ZWNv
ZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNz
Ojp0cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6cmVwbGFjZSk6Cisg
ICAgICAgICogYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmNwcDoKKyAgICAgICAgKEpTQzo6
Y29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0cyk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5jcHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQp
OgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBi
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoUHV0QnlJ
ZFN0YXR1cyk6CisgICAgICAgICogYnl0ZWNvZGUvUmVzb2x2ZUdsb2JhbFN0YXR1cy5jcHA6Cisg
ICAgICAgIChKU0M6OmNvbXB1dGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJ5dGVjb2RlL1Nh
bXBsaW5nVG9vbC5jcHA6CisgICAgICAgIChKU0M6OlNhbXBsaW5nVG9vbDo6bm90aWZ5T2ZTY29w
ZSk6CisgICAgICAgICogYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmg6CisgICAgICAgIChKU0M6OlNj
cmlwdFNhbXBsZVJlY29yZDo6U2NyaXB0U2FtcGxlUmVjb3JkKToKKyAgICAgICAgKFNhbXBsaW5n
VG9vbCk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRHZXRCeUlkU2VsZik6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0R2V0QnlJZFByb3RvKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlU3R1YkluZm86OmluaXRHZXRCeUlkQ2hhaW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU3R1YkluZm86OmluaXRQdXRCeUlkUmVwbGFjZSk6CisgICAgICAgICogYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUZ1bmN0aW9uQ29kZUJs
b2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGU6OmxpbmspOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
ZnJvbUdsb2JhbENvZGUpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6Y29kZUJsb2NrRm9yKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVubGlu
a2VkQ29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjphZGRSZWdFeHApOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9jazo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRk
RnVuY3Rpb25EZWNsKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZEZ1bmN0
aW9uRXhwcik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp2bSk6CisgICAgICAg
IChVbmxpbmtlZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OlVubGlua2VkR2xvYmFsQ29kZUJsb2NrOjpV
bmxpbmtlZEdsb2JhbENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlVubGlua2VkUHJvZ3JhbUNv
ZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
OjphZGRGdW5jdGlvbkRlY2xhcmF0aW9uKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrOjpVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZFByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkRXZhbENvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRFdmFs
Q29kZUJsb2NrOjpVbmxpbmtlZEV2YWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZEV2YWxDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2s6OlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjphZGRDb25zdGFudCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0TG9hZCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGlyZWN0UHV0
QnlJZCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRTdHJpbmdDb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpleHBlY3RlZEZ1bmN0aW9uRm9y
SWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VGhyb3dS
ZWZlcmVuY2VFcnJvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVh
ZE9ubHlFeGNlcHRpb25JZk5lZWRlZCk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmg6CisgICAgICAgIChCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjp2bSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
Ojpwcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6Om1ha2VG
dW5jdGlvbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAg
ICAgIChKU0M6OlJlZ0V4cE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFycmF5
Tm9kZTo6dG9Bcmd1bWVudExpc3QpOgorICAgICAgICAoSlNDOjpBcHBseUZ1bmN0aW9uQ2FsbERv
dE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZOb2RlOjplbWl0
Qnl0ZWNvZGUpOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6RGVidWdnZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6ZXZh
bHVhdGVJbkdsb2JhbENhbGxGcmFtZSk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuaDoK
KyAgICAgICAgKEpTQyk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJBY3RpdmF0aW9uOjpEZWJ1Z2dlckFjdGl2YXRpb24p
OgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckFjdGl2YXRpb246OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6RGVi
dWdnZXJBY3RpdmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckFjdGl2YXRp
b246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChEZWJ1Z2dlckFjdGl2YXRpb24pOgorICAg
ICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6RGVi
dWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHMp
OgorICAgICAgICAqIGRmZy9ERkdBc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpBc3NlbWJseUhlbHBlcnM6OkFzc2VtYmx5SGVscGVycyk6CisgICAgICAgIChKU0M6OkRGRzo6
QXNzZW1ibHlIZWxwZXJzOjp2bSk6CisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJz
OjpkZWJ1Z0NhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEV4
Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEFzc2VtYmx5SGVscGVycyk6CisgICAgICAgICogZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoQnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24p
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3Rh
Y2tFbnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJs
b2NrKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuaDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgICogZGZnL0RGR0NDYWxsSGVscGVycy5oOgorICAgICAgICAoSlNDOjpERkc6OkND
YWxsSGVscGVyczo6Q0NhbGxIZWxwZXJzKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYW5IYW5kbGVPcGNvZGVzKToKKyAgICAgICAgKiBk
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0
YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKiBkZmcvREZHRGlzYXNz
ZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEaXNhc3NlbWJsZXI6OnJlcG9ydFRvUHJv
ZmlsZXIpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuaDoKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVw
UGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6aXNTdHJp
bmdQcm90b3R5cGVNZXRob2RTYW5lKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpj
YW5PcHRpbWl6ZVN0cmluZ09iamVjdEFjY2Vzcyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6R3JhcGgpOgorICAgICAgICAqIGRmZy9ERkdH
cmFwaC5oOgorICAgICAgICAoR3JhcGgpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OkpJVENvbXBpbGVyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKToKKyAgICAgICAgKEpTQzo6
REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6
OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rp
b24pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVP
U1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAg
ICogZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpP
U1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENv
bXBpbGVyNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRDb21waWxlcjo6Y29tcGls
ZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpwdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6b3BlcmF0aW9uUHV0QnlWYWxJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRl
KToKKyAgICAgICAgKiBkZmcvREZHUGhhc2UuaDoKKyAgICAgICAgKEpTQzo6REZHOjpQaGFzZTo6
dm0pOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpn
ZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDYWNo
ZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRExpc3QpOgorICAg
ICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6
OkRGRzo6ZW1pdFB1dFJlcGxhY2VTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjplbWl0UHV0VHJh
bnNpdGlvblN0dWIpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUNhY2hlUHV0QnlJRCk6CisgICAg
ICAgIChKU0M6OkRGRzo6dHJ5QnVpbGRQdXRCeUlkTGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6
bGlua1Nsb3dGb3IpOgorICAgICAgICAoSlNDOjpERkc6OmRmZ0xpbmtGb3IpOgorICAgICAgICAo
SlNDOjpERkc6OmRmZ0xpbmtTbG93Rm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpkZmdMaW5rQ2xv
c3VyZUNhbGwpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnR5cGVkQXJyYXlEZXNjcmlwdG9yKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxp
dHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxP
blN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVGcm9t
Q2hhckNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTWFr
ZVJvcGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaW5n
RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9T
dHJpbmdPbkNlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGVPYmplY3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVP
YmplY3RPck90aGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRl
U3RyaW5nT3JTdHJpbmdPYmplY3QpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpwcmVwYXJlRm9yRXh0ZXJuYWxD
YWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlQmFz
aWNTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9j
YXRlSlNPYmplY3QpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2Jq
ZWN0T3JPdGhlckVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJy
YW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0
VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdUaHVua3Mu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpERkc6OnRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6c2xvd1BhdGhGb3IpOgorICAgICAgICAoSlNDOjpE
Rkc6OmxpbmtGb3JUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6bGlua0NhbGxU
aHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6bGlua0NvbnN0cnVjdFRodW5rR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkRGRzo6dmlydHVhbEZvclRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6REZHOjp2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
REZHOjp2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGRmZy9ERkdU
aHVua3MuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGhlYXAv
QmxvY2tBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaGVhcC9Db3BpZWRT
cGFjZS5jcHA6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZVNsb3dDYXNl
KToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OnRyeVJlYWxsb2NhdGUpOgorICAgICAgICAq
IGhlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjp0
cnlBbGxvY2F0ZSk6CisgICAgICAgICogaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwOgorICAg
ICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERhdGE6OkdDVGhyZWFkU2hhcmVkRGF0YSk6CisgICAg
ICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6cmVzZXQpOgorICAgICAgICAqIGhlYXAvR0NU
aHJlYWRTaGFyZWREYXRhLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoR0NUaHJlYWRTaGFy
ZWREYXRhKToKKyAgICAgICAgKiBoZWFwL0hhbmRsZVNldC5jcHA6CisgICAgICAgIChKU0M6Okhh
bmRsZVNldDo6SGFuZGxlU2V0KToKKyAgICAgICAgKEpTQzo6SGFuZGxlU2V0Ojp+SGFuZGxlU2V0
KToKKyAgICAgICAgKEpTQzo6SGFuZGxlU2V0Ojpncm93KToKKyAgICAgICAgKiBoZWFwL0hhbmRs
ZVNldC5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEhhbmRsZVNldCk6CisgICAgICAgIChK
U0M6OkhhbmRsZVNldDo6dm0pOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChK
U0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bGFz
dENoYW5jZVRvRmluYWxpemUpOgorICAgICAgICAoSlNDOjpIZWFwOjpwcm90ZWN0KToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6dW5wcm90ZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6c3RhY2spOgor
ICAgICAgICAoSlNDOjpIZWFwOjpnZXRDb25zZXJ2YXRpdmVSZWdpc3RlclJvb3RzKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVsZXRlQWxs
Q29tcGlsZWRDb2RlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdCk6CisgICAgICAgIChK
U0M6OkhlYXA6OmlzVmFsaWRBbGxvY2F0aW9uKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dm0pOgor
ICAgICAgICAqIGhlYXAvSGVhcFRpbWVyLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcFRpbWVyOjpI
ZWFwVGltZXIpOgorICAgICAgICAoSlNDOjpIZWFwVGltZXI6OnRpbWVyRGlkRmlyZSk6CisgICAg
ICAgIChKU0M6OkhlYXBUaW1lcjo6dGltZXJFdmVudCk6CisgICAgICAgICogaGVhcC9IZWFwVGlt
ZXIuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChIZWFwVGltZXIpOgorICAgICAgICAqIGhl
YXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2Vl
cGVyOjpJbmNyZW1lbnRhbFN3ZWVwZXIpOgorICAgICAgICAoSlNDOjpJbmNyZW1lbnRhbFN3ZWVw
ZXI6OnN3ZWVwTmV4dEJsb2NrKToKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjp3
aWxsRmluaXNoU3dlZXBpbmcpOgorICAgICAgICAoSlNDOjpJbmNyZW1lbnRhbFN3ZWVwZXI6OmNy
ZWF0ZSk6CisgICAgICAgICogaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaDoKKyAgICAgICAgKElu
Y3JlbWVudGFsU3dlZXBlcik6CisgICAgICAgICogaGVhcC9Mb2NhbC5oOgorICAgICAgICAoTG9j
YWwpOgorICAgICAgICAoSlNDOjo6OkxvY2FsKToKKyAgICAgICAgKEpTQzo6TG9jYWxTdGFjazo6
TG9jYWxTdGFjayk6CisgICAgICAgIChKU0M6OkxvY2FsU3RhY2s6OnB1c2gpOgorICAgICAgICAo
TG9jYWxTdGFjayk6CisgICAgICAgICogaGVhcC9Mb2NhbFNjb3BlLmg6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoTG9jYWxTY29wZSk6CisgICAgICAgIChKU0M6OkxvY2FsU2NvcGU6OkxvY2Fs
U2NvcGUpOgorICAgICAgICAqIGhlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcDoKKyAgICAgICAg
KEpTQzo6TWFjaGluZVRocmVhZHM6OmFkZEN1cnJlbnRUaHJlYWQpOgorICAgICAgICAqIGhlYXAv
TWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjphbGxv
Y2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmNwcDoKKyAgICAgICAg
KEpTQzo6TWFya2VkQmxvY2s6Ok1hcmtlZEJsb2NrKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJs
b2NrLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjp2bSk6CisgICAgICAgICogaGVhcC9T
bG90VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcik6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpzZXR1cCk6CisgICAgICAgICogaGVhcC9TdHJv
bmcuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChTdHJvbmcpOgorICAgICAgICAoSlNDOjpT
dHJvbmc6Om9wZXJhdG9yPSk6CisgICAgICAgICogaGVhcC9TdHJvbmdJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6Ojo6U3Ryb25nKToKKyAgICAgICAgKEpTQzo6OjpzZXQpOgorICAgICAgICAqIGhl
YXAvU3VwZXJSZWdpb24uaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaGVhcC9XZWFrU2V0
LmNwcDoKKyAgICAgICAgKiBoZWFwL1dlYWtTZXQuaDoKKyAgICAgICAgKFdlYWtTZXQpOgorICAg
ICAgICAoSlNDOjpXZWFrU2V0OjpXZWFrU2V0KToKKyAgICAgICAgKEpTQzo6V2Vha1NldDo6dm0p
OgorICAgICAgICAqIGludGVycHJldGVyL0Fic3RyYWN0UEMuY3BwOgorICAgICAgICAoSlNDOjpB
YnN0cmFjdFBDOjpBYnN0cmFjdFBDKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9BYnN0cmFjdFBD
Lmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoQWJzdHJhY3RQQyk6CisgICAgICAgICogaW50
ZXJwcmV0ZXIvQ2FjaGVkQ2FsbC5oOgorICAgICAgICAoSlNDOjpDYWNoZWRDYWxsOjpDYWNoZWRD
YWxsKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEV4ZWNT
dGF0ZSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6Y2xlYXJFeGNlcHRpb24pOgorICAgICAg
ICAoSlNDOjpFeGVjU3RhdGU6OmNsZWFyU3VwcGxlbWVudGFyeUV4Y2VwdGlvbkluZm8pOgorICAg
ICAgICAoSlNDOjpFeGVjU3RhdGU6OmV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0
ZTo6aGFkRXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpwcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjplbXB0eUxpc3QpOgorICAgICAgICAoSlNDOjpF
eGVjU3RhdGU6OmludGVycHJldGVyKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpoZWFwKToK
KyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjphcnJheUNvbnN0cnVjdG9yVGFibGUpOgorICAgICAg
ICAoSlNDOjpFeGVjU3RhdGU6OmFycmF5UHJvdG90eXBlVGFibGUpOgorICAgICAgICAoSlNDOjpF
eGVjU3RhdGU6OmJvb2xlYW5Qcm90b3R5cGVUYWJsZSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0
ZTo6ZGF0ZVRhYmxlKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpkYXRlQ29uc3RydWN0b3JU
YWJsZSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6ZXJyb3JQcm90b3R5cGVUYWJsZSk6Cisg
ICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6Z2xvYmFsT2JqZWN0VGFibGUpOgorICAgICAgICAoSlND
OjpFeGVjU3RhdGU6Ompzb25UYWJsZSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6bWF0aFRh
YmxlKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpudW1iZXJDb25zdHJ1Y3RvclRhYmxlKToK
KyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpudW1iZXJQcm90b3R5cGVUYWJsZSk6CisgICAgICAg
IChKU0M6OkV4ZWNTdGF0ZTo6b2JqZWN0Q29uc3RydWN0b3JUYWJsZSk6CisgICAgICAgIChKU0M6
OkV4ZWNTdGF0ZTo6cHJpdmF0ZU5hbWVQcm90b3R5cGVUYWJsZSk6CisgICAgICAgIChKU0M6OkV4
ZWNTdGF0ZTo6cmVnRXhwVGFibGUpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnJlZ0V4cENv
bnN0cnVjdG9yVGFibGUpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnJlZ0V4cFByb3RvdHlw
ZVRhYmxlKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpzdHJpbmdDb25zdHJ1Y3RvclRhYmxl
KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjphYnN0cmFjdFJldHVyblBDKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWVDbG9zdXJlLmg6CisgICAgICAgIChDYWxsRnJhbWVDbG9z
dXJlKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChK
U0MpOgorICAgICAgICAoSlNDOjpldmFsKToKKyAgICAgICAgKEpTQzo6bG9hZFZhcmFyZ3MpOgor
ICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIpOgorICAgICAgICAoSlNDOjpJ
bnRlcnByZXRlcjo6ZHVtcFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjp1
bndpbmRDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjphcHBlbmRTb3VyY2VUb0Vycm9yKToKKyAg
ICAgICAgKEpTQzo6Z2V0Q2FsbGVySW5mbyk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpn
ZXRTdGFja1RyYWNlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmFkZFN0YWNrVHJhY2VJ
Zk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjp0aHJvd0V4Y2VwdGlvbik6
CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6SW50
ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1
dGVDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cHJlcGFyZUZvclJlcGVh
dENhbGwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cmV0cmlldmVBcmd1bWVudHNGcm9t
Vk1Db2RlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJldHJpZXZlQ2FsbGVyRnJvbVZN
Q29kZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEpT
Qyk6CisgICAgICAgIChKU0M6OlRvcENhbGxGcmFtZVNldHRlcjo6VG9wQ2FsbEZyYW1lU2V0dGVy
KToKKyAgICAgICAgKEpTQzo6VG9wQ2FsbEZyYW1lU2V0dGVyOjp+VG9wQ2FsbEZyYW1lU2V0dGVy
KToKKyAgICAgICAgKFRvcENhbGxGcmFtZVNldHRlcik6CisgICAgICAgIChKU0M6Ok5hdGl2ZUNh
bGxGcmFtZVRyYWNlcjo6TmF0aXZlQ2FsbEZyYW1lVHJhY2VyKToKKyAgICAgICAgKEludGVycHJl
dGVyKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9KU1N0YWNrLmNwcDoKKyAgICAgICAgKEpTQzo6
SlNTdGFjazo6SlNTdGFjayk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSlNTdGFjay5oOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBqaXQvQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHA6Cisg
ICAgICAgIChKU0M6OkNsb3N1cmVDYWxsU3R1YlJvdXRpbmU6OkNsb3N1cmVDYWxsU3R1YlJvdXRp
bmUpOgorICAgICAgICAqIGppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmg6CisgICAgICAgIChD
bG9zdXJlQ2FsbFN0dWJSb3V0aW5lKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OkV4ZWN1dGFibGVBbGxv
Y2F0b3IpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZSk6Cisg
ICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChFeGVjdXRhYmxlQWxsb2NhdG9yKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9j
YXRvckZpeGVkVk1Qb29sLmNwcDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6
RXhlY3V0YWJsZUFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6
OmFsbG9jYXRlKToKKyAgICAgICAgKiBqaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcDoKKyAg
ICAgICAgKEpTQzo6R0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmUp
OgorICAgICAgICAoSlNDOjpNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aE9uZU9iamVj
dDo6TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3QpOgorICAgICAgICAo
SlNDOjpjcmVhdGVKSVRTdHViUm91dGluZSk6CisgICAgICAgICogaml0L0dDQXdhcmVKSVRTdHVi
Um91dGluZS5oOgorICAgICAgICAoR0NBd2FyZUpJVFN0dWJSb3V0aW5lKToKKyAgICAgICAgKE1h
cmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoT25lT2JqZWN0KToKKyAgICAgICAgKEpTQyk6
CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6SklUKToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6bGlua0Zv
cik6CisgICAgICAgIChKU0M6OkpJVDo6bGlua1Nsb3dDYWxsKToKKyAgICAgICAgKiBqaXQvSklU
Lmg6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZUNsb3N1cmVDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZFByb3Rv
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZFNlbGZMaXN0KToKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6
Y29tcGlsZUdldEJ5SWRDaGFpbkxpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVHZXRC
eUlkQ2hhaW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6
CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDVElOYXRpdmVD
YWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCk6Cisg
ICAgICAgIChKSVQpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxs
RXZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2Up
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlQ2xvc3VyZUNhbGwpOgorICAgICAg
ICAqIGppdC9KSVRDYWxsMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVMb2Fk
VmFyYXJncyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2FsbCk6CisgICAgICAgICogaml0L0pJVENvZGUu
aDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpJVENvZGU6OmV4ZWN1dGUpOgorICAg
ICAgICAqIGppdC9KSVREcml2ZXIuaDoKKyAgICAgICAgKEpTQzo6aml0Q29tcGlsZUlmQXBwcm9w
cmlhdGUpOgorICAgICAgICAoSlNDOjpqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKToK
KyAgICAgICAgKiBqaXQvSklURXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyaWNU
aHJvdyk6CisgICAgICAgIChKU0M6OmppdFRocm93KToKKyAgICAgICAgKiBqaXQvSklURXhjZXB0
aW9ucy5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKToKKyAgICAgICAgKEpTQzo6
SklUOjp1cGRhdGVUb3BDYWxsRnJhbWUpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90b19wcmltaXRpdmUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY29udmVydF90aGlzKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9jb252ZXJ0X3RoaXMpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2Fs
bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25lcSk6CisgICAgICAg
IChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfY2F0Y2gpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY29udmVydF90aGlzKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jb252ZXJ0X3RoaXMpOgorICAgICAgICAqIGpp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6c3RyaW5nR2V0QnlW
YWxTdHViR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlf
dmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCk6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8pOgorICAgICAgICAoSlNDOjpKSVQ6
OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlJZENoYWluTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVHZXRCeUlkQ2hhaW4pOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlW
YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwpOgorICAgICAg
ICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpz
dHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVHZXRCeUlkSG90UGF0
aCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6
CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6CisgICAgICAg
IChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoK
KyAgICAgICAgKEpTQzo6Y3RpVHJhbXBvbGluZSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpwZXJmb3JtUGxhdGZvcm1TcGVjaWZpY0pJVEFzc2VydGlvbnMpOgorICAgICAgICAoSlND
Ojp0cnlDYWNoZVB1dEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgorICAg
ICAgICAoSlNDOjpyZXR1cm5Ub1Rocm93VHJhbXBvbGluZSk6CisgICAgICAgIChKU0M6OnRocm93
RXhjZXB0aW9uRnJvbU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9O
KToKKyAgICAgICAgKEpTQzo6Z2V0UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U2xvdCk6
CisgICAgICAgIChKU0M6OmppdENvbXBpbGVGb3IpOgorICAgICAgICAoSlNDOjpsYXp5TGlua0Zv
cik6CisgICAgICAgIChKU0M6OnB1dEJ5VmFsKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuaDoK
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChKSVRTdGFja0ZyYW1lKToKKyAgICAgICAgKiBqaXQv
SklUVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlOYXRpdmVDYWxsKToK
KyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlOYXRpdmVDb25zdHJ1Y3QpOgorICAgICAgICAo
SlNDOjpKSVRUaHVua3M6OmN0aVN0dWIpOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6Omhvc3RG
dW5jdGlvblN0dWIpOgorICAgICAgICAqIGppdC9KSVRUaHVua3MuaDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgIChKSVRUaHVua3MpOgorICAgICAgICAqIGppdC9KSVRXcml0ZUJhcnJpZXIuaDoK
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpJVFdyaXRlQmFycmllckJhc2U6OnNldCk6
CisgICAgICAgIChKU0M6OkpJVFdyaXRlQmFycmllcjo6c2V0KToKKyAgICAgICAgKiBqaXQvU3Bl
Y2lhbGl6ZWRUaHVua0pJVC5oOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjps
b2FkSlNTdHJpbmdBcmd1bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6
OmZpbmFsaXplKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpT
Qyk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6Omdl
bmVyYXRlU2xvd0Nhc2VGb3IpOgorICAgICAgICAoSlNDOjpsaW5rRm9yR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6bGlua0NhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ29uc3Ry
dWN0R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bGlua0Nsb3N1cmVDYWxsR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6dmlydHVhbEZvckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1
YWxDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6dmlydHVhbENvbnN0cnVjdEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OnN0cmluZ0xlbmd0aFRyYW1wb2xpbmVHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpuYXRpdmVGb3JHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpuYXRpdmVDYWxs
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6c3RyaW5nQ2hhckxvYWQpOgorICAgICAgICAoSlNDOjpjaGFyVG9TdHJpbmcp
OgorICAgICAgICAoSlNDOjpjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpjaGFyQXRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmZyb21DaGFyQ29kZVRodW5r
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6c3FydFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6Zmxvb3JUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmNlaWxUaHVua0dlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OnJvdW5kVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpleHBUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmxvZ1RodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6YWJzVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpwb3dUaHVu
a0dlbmVyYXRvcik6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5oOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0KToKKyAgICAg
ICAgKEdsb2JhbE9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoR2xvYmFsT2JqZWN0OjphZGRGdW5jdGlvbik6CisgICAgICAgIChHbG9iYWxPYmplY3Q6
OmFkZENvbnN0cnVjdGFibGVGdW5jdGlvbik6CisgICAgICAgIChmdW5jdGlvbkR1bXBDYWxsRnJh
bWUpOgorICAgICAgICAoZnVuY3Rpb25KU0NTdGFjayk6CisgICAgICAgIChmdW5jdGlvblJlbGVh
c2VFeGVjdXRhYmxlTWVtb3J5KToKKyAgICAgICAgKGZ1bmN0aW9uUnVuKToKKyAgICAgICAgKG1h
aW4pOgorICAgICAgICAocnVuV2l0aFNjcmlwdHMpOgorICAgICAgICAoanNjbWFpbik6CisgICAg
ICAgICogbGxpbnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkRhdGE6OnBl
cmZvcm1Bc3NlcnRpb25zKToKKyAgICAgICAgKiBsbGludC9MTEludERhdGEuaDoKKyAgICAgICAg
KEpTQyk6CisgICAgICAgIChEYXRhKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OkRhdGE6OnBlcmZv
cm1Bc3NlcnRpb25zKToKKyAgICAgICAgKiBsbGludC9MTEludEVudHJ5cG9pbnRzLmNwcDoKKyAg
ICAgICAgKEpTQzo6TExJbnQ6OmdldEZ1bmN0aW9uRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6
OkxMSW50OjpnZXRFdmFsRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRQcm9n
cmFtRW50cnlwb2ludCk6CisgICAgICAgICogbGxpbnQvTExJbnRFbnRyeXBvaW50cy5oOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKExMSW50KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldEVu
dHJ5cG9pbnQpOgorICAgICAgICAqIGxsaW50L0xMSW50RXhjZXB0aW9ucy5jcHA6CisgICAgICAg
IChKU0M6OkxMSW50OjppbnRlcnByZXRlclRocm93SW5DYWxsZXIpOgorICAgICAgICAoSlNDOjpM
TEludDo6cmV0dXJuVG9UaHJvdyk6CisgICAgICAgIChKU0M6OkxMSW50OjpjYWxsVG9UaHJvdyk6
CisgICAgICAgICogbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcDoKKyAgICAgICAgKiBs
bGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChMTEludCk6CisgICAgICAgIChKU0M6
OkxMSW50OjpsbGludF90cmFjZV9vcGVyYW5kKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmxsaW50
X3RyYWNlX3ZhbHVlKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNM
KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNob3VsZEpJVCk6CisgICAgICAgIChKU0M6OkxMSW50
OjpoYW5kbGVIb3N0Q2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpzZXRVcENhbGwpOgorICAg
ICAgICAqIGxsaW50L0xMSW50VGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdlbmVy
YXRlVGh1bmtXaXRoSnVtcFRvKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmZ1bmN0aW9uRm9yQ2Fs
bEVudHJ5VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpMTEludDo6ZnVuY3Rpb25Gb3JD
b25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmZ1bmN0
aW9uRm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkxMSW50
OjpmdW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OkxMSW50OjpldmFsRW50cnlUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkxM
SW50Ojpwcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcik6CisgICAgICAgICogbGxpbnQvTExJbnRU
aHVua3MuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChMTEludCk6CisgICAgICAgICogbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkNMb29wOjpleGVjdXRlKToKKyAgICAgICAgKiBs
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogb2ZmbGluZWFzbS9jbG9vcC5yYjoKKyAg
ICAgICAgKiBwYXJzZXIvQVNUQnVpbGRlci5oOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpB
U1RCdWlsZGVyKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlU291cmNlRWxlbWVu
dHMpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVDb21tYUV4cHIpOgorICAgICAg
ICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6QVNU
QnVpbGRlcjo6Y3JlYXRlVW5hcnlQbHVzKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3Jl
YXRlVm9pZCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OnRoaXNFeHByKToKKyAgICAgICAg
KEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlUmVzb2x2ZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxk
ZXI6OmNyZWF0ZU9iamVjdExpdGVyYWwpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVh
dGVBcnJheSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZU51bWJlckV4cHIpOgor
ICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpB
U1RCdWlsZGVyOjpjcmVhdGVCb29sZWFuKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3Jl
YXRlTnVsbCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUJyYWNrZXRBY2Nlc3Mp
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVEb3RBY2Nlc3MpOgorICAgICAgICAo
SlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVSZWdFeHApOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjpjcmVhdGVOZXdFeHByKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQ29uZGl0
aW9uYWxFeHByKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQXNzaWduUmVzb2x2
ZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUZ1bmN0aW9uRXhwcik6CisgICAg
ICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUZ1bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6
OkFTVEJ1aWxkZXI6OmNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkpOgorICAgICAgICAoSlND
OjpBU1RCdWlsZGVyOjpjcmVhdGVBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjpjcmVhdGVBcmd1bWVudHNMaXN0KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRl
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVQcm9wZXJ0eUxpc3Qp
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVFbGVtZW50TGlzdCk6CisgICAgICAg
IChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUZvcm1hbFBhcmFtZXRlckxpc3QpOgorICAgICAgICAo
SlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVDbGF1c2UpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjpjcmVhdGVDbGF1c2VMaXN0KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRnVu
Y0RlY2xTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVCbG9ja1N0
YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUV4cHJTdGF0ZW1lbnQp
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVJZlN0YXRlbWVudCk6CisgICAgICAg
IChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUZvckxvb3ApOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjpjcmVhdGVGb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVF
bXB0eVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVZhclN0YXRl
bWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVJldHVyblN0YXRlbWVudCk6
CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUJyZWFrU3RhdGVtZW50KToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQ29udGludWVTdGF0ZW1lbnQpOgorICAgICAgICAo
SlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVUcnlTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RC
dWlsZGVyOjpjcmVhdGVTd2l0Y2hTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjpjcmVhdGVXaGlsZVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0
ZURvV2hpbGVTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVMYWJl
bFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVdpdGhTdGF0ZW1l
bnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVUaHJvd1N0YXRlbWVudCk6Cisg
ICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZURlYnVnZ2VyKToKKyAgICAgICAgKEpTQzo6
QVNUQnVpbGRlcjo6Y3JlYXRlQ29uc3RTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjphcHBlbmRDb25zdERlY2wpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjphZGRWYXIp
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjb21iaW5lQ29tbWFOb2Rlcyk6CisgICAgICAg
IChKU0M6OkFTVEJ1aWxkZXI6OlNjb3BlOjpTY29wZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxk
ZXI6OmNyZWF0ZU51bWJlcik6CisgICAgICAgIChBU1RCdWlsZGVyKToKKyAgICAgICAgKEpTQzo6
QVNUQnVpbGRlcjo6bWFrZVR5cGVPZk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpt
YWtlRGVsZXRlTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VOZWdhdGVOb2Rl
KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUJpdHdpc2VOb3ROb2RlKToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZU11bHROb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVp
bGRlcjo6bWFrZURpdk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlTW9kTm9k
ZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VBZGROb2RlKToKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6bWFrZVN1Yk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpt
YWtlTGVmdFNoaWZ0Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VSaWdodFNo
aWZ0Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VVUmlnaHRTaGlmdE5vZGUp
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlQml0T3JOb2RlKToKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6bWFrZUJpdEFuZE5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjptYWtlQml0WE9yTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlv
bkNhbGxOb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUJpbmFyeU5vZGUpOgor
ICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlQXNzaWduTm9kZSk6CisgICAgICAgIChKU0M6
OkFTVEJ1aWxkZXI6Om1ha2VQcmVmaXhOb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6
bWFrZVBvc3RmaXhOb2RlKToKKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuY3BwOgorICAgICAgICAo
SlNDOjpLZXl3b3Jkczo6S2V5d29yZHMpOgorICAgICAgICAoSlNDOjo6OkxleGVyKToKKyAgICAg
ICAgKEpTQzo6OjpwYXJzZUlkZW50aWZpZXIpOgorICAgICAgICAoSlNDOjo6OnBhcnNlSWRlbnRp
ZmllclNsb3dDYXNlKToKKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuaDoKKyAgICAgICAgKEpTQzo6
S2V5d29yZHM6OmlzS2V5d29yZCk6CisgICAgICAgIChKU0M6OktleXdvcmRzOjpnZXRLZXl3b3Jk
KToKKyAgICAgICAgKEtleXdvcmRzKToKKyAgICAgICAgKExleGVyKToKKyAgICAgICAgKEpTQzo6
OjptYWtlSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6Ojo6bWFrZVJpZ2h0U2l6ZWRJZGVudGlm
aWVyKToKKyAgICAgICAgKEpTQzo6OjptYWtlSWRlbnRpZmllckxDaGFyRnJvbVVDaGFyKToKKyAg
ICAgICAgKEpTQzo6OjptYWtlTENoYXJJZGVudGlmaWVyKToKKyAgICAgICAgKiBwYXJzZXIvTm9k
ZUNvbnN0cnVjdG9ycy5oOgorICAgICAgICAoSlNDOjpQYXJzZXJBcmVuYUZyZWVhYmxlOjpvcGVy
YXRvciBuZXcpOgorICAgICAgICAoSlNDOjpQYXJzZXJBcmVuYURlbGV0YWJsZTo6b3BlcmF0b3Ig
bmV3KToKKyAgICAgICAgKEpTQzo6UGFyc2VyQXJlbmFSZWZDb3VudGVkOjpQYXJzZXJBcmVuYVJl
ZkNvdW50ZWQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5vZGU6OlByb3BlcnR5Tm9kZSk6Cisg
ICAgICAgIChKU0M6OkNvbnRpbnVlTm9kZTo6Q29udGludWVOb2RlKToKKyAgICAgICAgKEpTQzo6
QnJlYWtOb2RlOjpCcmVha05vZGUpOgorICAgICAgICAoSlNDOjpGb3JJbk5vZGU6OkZvckluTm9k
ZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6U2NvcGVOb2Rl
OjpTY29wZU5vZGUpOgorICAgICAgICAoSlNDOjpQcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUpOgor
ICAgICAgICAoSlNDOjpQcm9ncmFtTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RXZhbE5v
ZGU6OkV2YWxOb2RlKToKKyAgICAgICAgKEpTQzo6RXZhbE5vZGU6OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUpOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUpOgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5oOgor
ICAgICAgICAoUGFyc2VyQXJlbmFGcmVlYWJsZSk6CisgICAgICAgIChQYXJzZXJBcmVuYURlbGV0
YWJsZSk6CisgICAgICAgIChQYXJzZXJBcmVuYVJlZkNvdW50ZWQpOgorICAgICAgICAoQXJyYXlO
b2RlKToKKyAgICAgICAgKEZvckluTm9kZSk6CisgICAgICAgIChDb250aW51ZU5vZGUpOgorICAg
ICAgICAoQnJlYWtOb2RlKToKKyAgICAgICAgKFNjb3BlTm9kZSk6CisgICAgICAgIChQcm9ncmFt
Tm9kZSk6CisgICAgICAgIChFdmFsTm9kZSk6CisgICAgICAgIChGdW5jdGlvbkJvZHlOb2RlKToK
KyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6OjpQYXJzZXIpOgor
ICAgICAgICAoSlNDOjo6OnBhcnNlSW5uZXIpOgorICAgICAgICAoSlNDOjo6OnBhcnNlU291cmNl
RWxlbWVudHMpOgorICAgICAgICAoSlNDOjo6OnBhcnNlVHJ5U3RhdGVtZW50KToKKyAgICAgICAg
KEpTQzo6OjpwYXJzZUZ1bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VGdW5jdGlv
bkluZm8pOgorICAgICAgICAoSlNDOjo6OnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOgorICAg
ICAgICAoSlNDOjo6OnBhcnNlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjo6OnBhcnNlUHJpbWFy
eUV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjo6OnBhcnNlTWVtYmVyRXhwcmVzc2lvbik6Cisg
ICAgICAgIChKU0M6Ojo6cGFyc2VVbmFyeUV4cHJlc3Npb24pOgorICAgICAgICAqIHBhcnNlci9Q
YXJzZXIuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OlNjb3BlOjpTY29wZSk6Cisg
ICAgICAgIChKU0M6OlNjb3BlOjpkZWNsYXJlVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpTY29w
ZTo6ZGVjbGFyZVBhcmFtZXRlcik6CisgICAgICAgIChTY29wZSk6CisgICAgICAgIChQYXJzZXIp
OgorICAgICAgICAoSlNDOjpQYXJzZXI6OnB1c2hTY29wZSk6CisgICAgICAgIChKU0M6Ojo6cGFy
c2UpOgorICAgICAgICAoSlNDOjpwYXJzZSk6CisgICAgICAgICogcGFyc2VyL1BhcnNlckFyZW5h
Lmg6CisgICAgICAgIChJZGVudGlmaWVyQXJlbmEpOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVy
QXJlbmE6Om1ha2VJZGVudGlmaWVyKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllckFyZW5hOjpt
YWtlSWRlbnRpZmllckxDaGFyRnJvbVVDaGFyKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllckFy
ZW5hOjptYWtlTnVtZXJpY0lkZW50aWZpZXIpOgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVj
a2VyLmg6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OlN5bnRheENoZWNrZXIpOgorICAg
ICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6
OlN5bnRheENoZWNrZXI6OmNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkpOgorICAgICAgICAq
IHByb2ZpbGVyL0xlZ2FjeVByb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6TGVnYWN5UHJvZmls
ZXI6OnN0YXJ0UHJvZmlsaW5nKToKKyAgICAgICAgKEpTQzo6TGVnYWN5UHJvZmlsZXI6OnN0b3BQ
cm9maWxpbmcpOgorICAgICAgICAqIHByb2ZpbGVyL0xlZ2FjeVByb2ZpbGVyLmg6CisgICAgICAg
IChKU0MpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGUuY3BwOgorICAgICAg
ICAoSlNDOjpQcm9maWxlcjo6Qnl0ZWNvZGU6OnRvSlMpOgorICAgICAgICAqIHByb2ZpbGVyL1By
b2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpCeXRl
Y29kZVNlcXVlbmNlOjpCeXRlY29kZVNlcXVlbmNlKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6
OkJ5dGVjb2RlU2VxdWVuY2U6OmFkZFNlcXVlbmNlUHJvcGVydGllcyk6CisgICAgICAgICogcHJv
ZmlsZXIvUHJvZmlsZXJCeXRlY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6Qnl0
ZWNvZGVzOjp0b0pTKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OkNvbXBpbGF0aW9uOjp0b0pTKToKKyAgICAgICAg
KiBwcm9maWxlci9Qcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuY3BwOgorICAgICAgICAoSlNDOjpQ
cm9maWxlcjo6Q29tcGlsZWRCeXRlY29kZTo6dG9KUyk6CisgICAgICAgICogcHJvZmlsZXIvUHJv
ZmlsZXJEYXRhYmFzZS5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpEYXRhYmFzZTo6RGF0
YWJhc2UpOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6RGF0YWJhc2U6OnRvSlMpOgorICAgICAg
ICAoSlNDOjpQcm9maWxlcjo6RGF0YWJhc2U6OnRvSlNPTik6CisgICAgICAgICogcHJvZmlsZXIv
UHJvZmlsZXJEYXRhYmFzZS5oOgorICAgICAgICAoRGF0YWJhc2UpOgorICAgICAgICAqIHByb2Zp
bGVyL1Byb2ZpbGVyT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpPU1JFeGl0
Ojp0b0pTKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlck9yaWdpbi5jcHA6CisgICAgICAg
IChKU0M6OlByb2ZpbGVyOjpPcmlnaW46OnRvSlMpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2Zp
bGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6UHJvZmls
ZWRCeXRlY29kZXM6OnRvSlMpOgorICAgICAgICAqIHJ1bnRpbWUvQXJnTGlzdC5oOgorICAgICAg
ICAoTWFya2VkQXJndW1lbnRCdWZmZXIpOgorICAgICAgICAqIHJ1bnRpbWUvQXJndW1lbnRzLmNw
cDoKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpwdXRCeUluZGV4KToKKyAgICAgICAgKEpTQzo6
QXJndW1lbnRzOjpwdXQpOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAg
IChKU0M6OkFyZ3VtZW50czo6dGVhck9mZik6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6ZGlk
VGVhck9mZkFjdGl2YXRpb24pOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OnRlYXJPZmZGb3JJ
bmxpbmVDYWxsRnJhbWUpOgorICAgICAgICAqIHJ1bnRpbWUvQXJndW1lbnRzLmg6CisgICAgICAg
IChKU0M6OkFyZ3VtZW50czo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpjcmVh
dGVTdHJ1Y3R1cmUpOgorICAgICAgICAoQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6QXJndW1l
bnRzOjpBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OnRyeVNldEFyZ3VtZW50
KToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICog
cnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlDb25zdHJ1
Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rv
ci5oOgorICAgICAgICAoSlNDOjpBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgor
ICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpBcnJh
eVByb3RvdHlwZTo6QXJyYXlQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpBcnJheVByb3RvdHlw
ZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvcnQpOgor
ICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NwbGljZSk6CisgICAgICAgICogcnVudGltZS9B
cnJheVByb3RvdHlwZS5oOgorICAgICAgICAoSlNDOjpBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0JhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmg6
CisgICAgICAgIChKU0M6OkJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyOjpCYXRjaGVkVHJhbnNp
dGlvbk9wdGltaXplcik6CisgICAgICAgIChKU0M6OkJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVy
Ojp+QmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIpOgorICAgICAgICAoQmF0Y2hlZFRyYW5zaXRp
b25PcHRpbWl6ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Qm9vbGVhbkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgIChKU0M6OmNvbnN0cnVjdEJvb2xlYW4pOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RCb29s
ZWFuRnJvbUltbWVkaWF0ZUJvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhbkNvbnN0
cnVjdG9yLmg6CisgICAgICAgIChKU0M6OkJvb2xlYW5Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5PYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpCb29sZWFuT2JqZWN0OjpCb29sZWFuT2JqZWN0KToKKyAgICAgICAgKEpTQzo6Qm9vbGVhbk9i
amVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhbk9iamVjdC5o
OgorICAgICAgICAoQm9vbGVhbk9iamVjdCk6CisgICAgICAgIChKU0M6OkJvb2xlYW5PYmplY3Q6
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkJvb2xlYW5PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgICogcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6
Qm9vbGVhblByb3RvdHlwZTo6Qm9vbGVhblByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OkJvb2xl
YW5Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Ym9vbGVhblByb3Rv
RnVuY1RvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuaDoKKyAg
ICAgICAgKEpTQzo6Qm9vbGVhblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KiBydW50aW1lL0J1dHRlcmZseS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEJ1dHRlcmZs
eSk6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmg6CisgICAgICAgIChKU0M6
OkJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZs
eTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodCk6CisgICAgICAgIChKU0M6OkJ1
dHRlcmZseTo6cmVzaXplQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmNwcDoK
KyAgICAgICAgKEpTQzo6Q29kZUNhY2hlOjpnZXRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpD
b2RlQ2FjaGU6OmdldFByb2dyYW1Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6
OmdldEV2YWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6OmdldEZ1bmN0aW9u
RXhlY3V0YWJsZUZyb21HbG9iYWxDb2RlKToKKyAgICAgICAgKiBydW50aW1lL0NvZGVDYWNoZS5o
OgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U291cmNlQ29kZVZhbHVlOjpTb3VyY2VD
b2RlVmFsdWUpOgorICAgICAgICAoQ29kZUNhY2hlKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1v
bklkZW50aWZpZXJzLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkNvbW1vbklk
ZW50aWZpZXJzOjpDb21tb25JZGVudGlmaWVycyk6CisgICAgICAgICogcnVudGltZS9Db21tb25J
ZGVudGlmaWVycy5oOgorICAgICAgICAoQ29tbW9uSWRlbnRpZmllcnMpOgorICAgICAgICAqIHJ1
bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgIChKU0M6OkNvbW1vblNsb3dQYXRoczo6
b3BJbik6CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6
Y2hlY2tTeW50YXgpOgorICAgICAgICAoSlNDOjpldmFsdWF0ZSk6CisgICAgICAgICogcnVudGlt
ZS9EYXRlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpEYXRlQ29uc3RydWN0b3I6OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5oOgorICAg
ICAgICAoSlNDOjpEYXRlQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICog
cnVudGltZS9EYXRlSW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpEYXRlSW5zdGFuY2U6OkRh
dGVJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkRhdGVJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoSlNDOjpEYXRlSW5zdGFuY2U6OmNhbGN1bGF0ZUdyZWdvcmlhbkRhdGVUaW1l
KToKKyAgICAgICAgKEpTQzo6RGF0ZUluc3RhbmNlOjpjYWxjdWxhdGVHcmVnb3JpYW5EYXRlVGlt
ZVVUQyk6CisgICAgICAgICogcnVudGltZS9EYXRlSW5zdGFuY2UuaDoKKyAgICAgICAgKERhdGVJ
bnN0YW5jZSk6CisgICAgICAgIChKU0M6OkRhdGVJbnN0YW5jZTo6Y3JlYXRlKToKKyAgICAgICAg
KEpTQzo6RGF0ZUluc3RhbmNlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUv
RGF0ZVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkRhdGVQcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldFRpbWUpOgorICAgICAgICAo
SlNDOjpzZXROZXdWYWx1ZUZyb21UaW1lQXJncyk6CisgICAgICAgIChKU0M6OnNldE5ld1ZhbHVl
RnJvbURhdGVBcmdzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldFllYXIpOgorICAg
ICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9KU09OKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVQ
cm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6RGF0ZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlRXJy
b3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVFdmFsRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVh
dGVSYW5nZUVycm9yKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlUmVmZXJlbmNlRXJyb3IpOgorICAg
ICAgICAoSlNDOjpjcmVhdGVTeW50YXhFcnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZVR5cGVF
cnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZVVSSUVycm9yKToKKyAgICAgICAgKEpTQzo6YWRk
RXJyb3JJbmZvKToKKyAgICAgICAgKEpTQzo6dGhyb3dFcnJvcik6CisgICAgICAgICogcnVudGlt
ZS9FcnJvci5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3RyaWN0TW9kZVR5cGVF
cnJvckZ1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpTdHJpY3RNb2RlVHlwZUVycm9y
RnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9FcnJvckNvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6RXJyb3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlND
OjpFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUv
RXJyb3JJbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OkVycm9ySW5z
dGFuY2UpOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JJbnN0YW5jZS5oOgorICAgICAgICAoSlND
OjpFcnJvckluc3RhbmNlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpFcnJvcklu
c3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAoRXJyb3JJbnN0YW5jZSk6CisgICAgICAgIChKU0M6
OkVycm9ySW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9y
UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6RXJyb3JQcm90b3R5cGU6OkVycm9yUHJvdG90
eXBlKToKKyAgICAgICAgKEpTQzo6RXJyb3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKiBydW50aW1lL0Vycm9yUHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6OkVycm9yUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uSGVs
cGVycy5jcHA6CisgICAgICAgIChKU0M6OmNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0
aW9uKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbik6
CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSlNDOjpJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yOjpJbnRlcnJ1cHRlZEV4ZWN1
dGlvbkVycm9yKToKKyAgICAgICAgKEpTQzo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpUZXJtaW5h
dGVkRXhlY3V0aW9uRXJyb3IpOgorICAgICAgICAoSlNDOjpUZXJtaW5hdGVkRXhlY3V0aW9uRXJy
b3I6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAg
ICAoSlNDOjpqZXR0aXNvbkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxl
OjpFdmFsRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpQcm9n
cmFtRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rp
b25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVPcHRp
bWl6ZWQpOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToK
KyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZSk6Cisg
ICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjaGVja1N5bnRheCk6CisgICAgICAgIChK
U0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6
UHJvZ3JhbUV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZSk6CisgICAgICAgIChKU0M6
OlByb2dyYW1FeGVjdXRhYmxlOjppbml0aWFsaXplR2xvYmFsUHJvcGVydGllcyk6CisgICAgICAg
IChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNhbGwpOgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1
Y3QpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tG
b3IpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVk
Q29kZUZvckNhbGwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29u
T3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0
YWJsZTo6ZnJvbUdsb2JhbENvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6RXhlY3V0YWJsZUJhc2UpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQmFzZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpFeGVj
dXRhYmxlQmFzZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6TmF0aXZlRXhlY3V0
YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6TmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6TmF0aXZlRXhlY3V0YWJsZTo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoSlNDOjpOYXRpdmVFeGVjdXRhYmxlOjpOYXRpdmVFeGVjdXRhYmxlKToKKyAg
ICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6U2NyaXB0RXhlY3V0YWJsZSk6CisgICAgICAg
IChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGUpOgorICAgICAgICAoRXZhbEV4ZWN1dGFibGUpOgorICAg
ICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RXZhbEV4
ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRh
YmxlOjpjcmVhdGUpOgorICAgICAgICAoUHJvZ3JhbUV4ZWN1dGFibGUpOgorICAgICAgICAoSlND
OjpQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVj
dXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFi
bGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZv
ckNhbGwpOgorICAgICAgICAoRnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3IpOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpT
RnVuY3Rpb246OkpTRnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0aW9uSGFybmVz
cy5oOgorICAgICAgICAoSlNDOjpwcmVwYXJlRm9yRXhlY3V0aW9uKToKKyAgICAgICAgKEpTQzo6
cHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9u
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvbnN0cnVjdG9yOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmg6Cisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgICogcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHJv
dG90eXBlOjphZGRGdW5jdGlvblByb3BlcnRpZXMpOgorICAgICAgICAoSlNDOjpmdW5jdGlvblBy
b3RvRnVuY0JpbmQpOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaDoKKyAg
ICAgICAgKEpTQzo6RnVuY3Rpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAg
ICogcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwOgorICAgICAgICAoSlNDOjpEZWZhdWx0
R0NBY3Rpdml0eUNhbGxiYWNrOjpEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKToKKyAgICAgICAg
KEpTQzo6RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6ZG9Xb3JrKToKKyAgICAgICAgKEpTQzo6
RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6ZGlkQWxsb2NhdGUpOgorICAgICAgICAqIHJ1bnRp
bWUvR0NBY3Rpdml0eUNhbGxiYWNrLmg6CisgICAgICAgIChKU0M6OkdDQWN0aXZpdHlDYWxsYmFj
azo6R0NBY3Rpdml0eUNhbGxiYWNrKToKKyAgICAgICAgKiBydW50aW1lL0dDQWN0aXZpdHlDYWxs
YmFja0JsYWNrQmVycnkuY3BwOgorICAgICAgICAoSlNDOjpEZWZhdWx0R0NBY3Rpdml0eUNhbGxi
YWNrOjpEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6RGVmYXVsdEdD
QWN0aXZpdHlDYWxsYmFjazo6ZG9Xb3JrKToKKyAgICAgICAgKEpTQzo6RGVmYXVsdEdDQWN0aXZp
dHlDYWxsYmFjazo6ZGlkQWxsb2NhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVy
Lmg6CisgICAgICAgIChKU0M6OkdldHRlclNldHRlcjo6R2V0dGVyU2V0dGVyKToKKyAgICAgICAg
KEpTQzo6R2V0dGVyU2V0dGVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXI6
OnNldEdldHRlcik6CisgICAgICAgIChKU0M6OkdldHRlclNldHRlcjo6c2V0U2V0dGVyKToKKyAg
ICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1
bnRpbWUvSWRlbnRpZmllci5jcHA6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFkZCk6Cisg
ICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFkZDgpOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVy
OjphZGRTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmZyb20pOgorICAgICAg
ICAoSlNDOjpJZGVudGlmaWVyOjpjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvSWRlbnRpZmllci5oOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjpJZGVu
dGlmaWVyKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6Y3JlYXRlTENoYXJGcm9tVUNoYXIp
OgorICAgICAgICAoSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFkZCk6
CisgICAgICAgICogcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6
SW50ZXJuYWxGdW5jdGlvbjo6SW50ZXJuYWxGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkludGVy
bmFsRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxGdW5j
dGlvbjo6bmFtZSk6CisgICAgICAgIChKU0M6OkludGVybmFsRnVuY3Rpb246OmRpc3BsYXlOYW1l
KToKKyAgICAgICAgKiBydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6
SW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEludGVybmFsRnVu
Y3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNBUElWYWx1ZVdyYXBwZXIuaDoKKyAgICAgICAg
KEpTQzo6SlNBUElWYWx1ZVdyYXBwZXI6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
OkpTQVBJVmFsdWVXcmFwcGVyOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTQVBJ
VmFsdWVXcmFwcGVyOjpKU0FQSVZhbHVlV3JhcHBlcik6CisgICAgICAgICogcnVudGltZS9KU0Fj
dGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxlUHV0
KToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1
dGVzKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgor
ICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OnB1dCk6CisgICAgICAgIChKU0M6OkpTQWN0aXZh
dGlvbjo6cHV0RGlyZWN0VmlydHVhbCk6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6YXJn
dW1lbnRzR2V0dGVyKToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5oOgorICAgICAg
ICAoSlNBY3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChK
U0M6OkpTQWN0aXZhdGlvbjo6SlNBY3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0
aW9uOjp0ZWFyT2ZmKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAo
SlNDOjpjcmVhdGVBcnJheUJ1dHRlcmZseUluRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OnNldExlbmd0aFdyaXRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRM
ZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXNoKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6c2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OkNvbnRp
Z3VvdXNUeXBlQWNjZXNzb3I6OnNldFdpdGhWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OnNvcnRDb21wYWN0ZWRWZWN0b3IpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0VmVjdG9y
KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
SlNBcnJheSk6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hp
ZnRDb3VudEZvclNoaWZ0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50Rm9y
U2hpZnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAg
ICAoSlNDOjpjcmVhdGVDb250aWd1b3VzQXJyYXlCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpj
cmVhdGVBcnJheUJ1dHRlcmZseSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxp
emVkKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNCb3VuZEZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNCb3VuZEZ1bmN0aW9uOjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpKU0JvdW5kRnVuY3Rpb246OkpTQm91bmRGdW5jdGlvbik6Cisg
ICAgICAgICogcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SlNCb3Vu
ZEZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1
ZS5jcHA6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlKToKKyAgICAgICAg
KEpTQzo6SlNWYWx1ZTo6dG9TdHJpbmdTbG93Q2FzZSk6CisgICAgICAgICogcnVudGltZS9KU0NK
U1ZhbHVlLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6Cisg
ICAgICAgIChKU0NlbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjpKU0NlbGw6OkpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAoSlNDOjphbGxvY2F0ZUNlbGwpOgorICAgICAgICAoSlNDOjpK
U0NlbGw6OnNldFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6ZmFzdEdldE93blBy
b3BlcnR5KToKKyAgICAgICAgKiBydW50aW1lL0pTRGF0ZU1hdGguY3BwOgorICAgICAgICAoSlND
OjpnZXREU1RPZmZzZXQpOgorICAgICAgICAoSlNDOjpnZXRVVENPZmZzZXQpOgorICAgICAgICAo
SlNDOjpwYXJzZURhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3Qu
aDoKKyAgICAgICAgKEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Q6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0KToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpK
U0Z1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9u
KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGVBbGxvY2F0aW9uUHJvZmlsZSk6CisgICAgICAgIChKU0M6
OkpTRnVuY3Rpb246Om5hbWUpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpkaXNwbGF5TmFt
ZSk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93blByb3BlcnR5U2xvdCk6CisgICAg
ICAgIChKU0M6OkpTRnVuY3Rpb246OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKiBydW50aW1l
L0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU0Z1
bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpzZXRTY29wZSk6Cisg
ICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbERhdGEuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxEYXRhLmg6IFJlbW92ZWQuCisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6
CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp+SlNHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbE9iamVjdDo6c2V0R2xvYmFsVGhpcyk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0Ojppbml0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnB1dERpcmVjdFZpcnR1
YWwpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmhhdmVBQmFkVGltZSk6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsT2JqZWN0OjpjcmVhdGVUaHJvd1R5cGVFcnJvcik6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0OjpyZXNldFByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OkpTR2xv
YmFsT2JqZWN0OjphZGRTdGF0aWNHbG9iYWxzKToKKyAgICAgICAgKEpTQzo6RHluYW1pY0dsb2Jh
bE9iamVjdFNjb3BlOjpEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUpOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbE9iamVjdDo6Y3JlYXRlUHJvZ3JhbUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjpjcmVhdGVFdmFsQ29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0pT
R2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpjcmVhdGUpOgor
ICAgICAgICAoSlNHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6dm0pOgorICAg
ICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6RXhlY1N0YXRlOjpkeW5hbWljR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6Y29uc3Ry
dWN0RW1wdHlBcnJheSk6CisgICAgICAgIChEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlND
OjpnbG9iYWxGdW5jUHJvdG9TZXR0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNMb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIpOgorICAgICAgICAoSlND
OjpKU0xvY2tIb2xkZXI6OmluaXQpOgorICAgICAgICAoSlNDOjpKU0xvY2tIb2xkZXI6On5KU0xv
Y2tIb2xkZXIpOgorICAgICAgICAoSlNDOjpKU0xvY2s6OkpTTG9jayk6CisgICAgICAgIChKU0M6
OkpTTG9jazo6d2lsbERlc3Ryb3lHbG9iYWxEYXRhKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjps
b2NrKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjp1bmxvY2spOgorICAgICAgICAoSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFsbExvY2tzKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3M6On5Ecm9wQWxsTG9ja3MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNMb2NrLmg6
CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNMb2NrSG9sZGVyKToKKyAgICAgICAgKEpTTG9j
ayk6CisgICAgICAgIChKU0M6OkpTTG9jazo6dm0pOgorICAgICAgICAoRHJvcEFsbExvY2tzKToK
KyAgICAgICAgKiBydW50aW1lL0pTTmFtZVNjb3BlLmg6CisgICAgICAgIChKU0M6OkpTTmFtZVNj
b3BlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU05hbWVTY29wZTo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU05hbWVTY29wZTo6SlNOYW1lU2NvcGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNOb3RBbk9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU05vdEFuT2Jq
ZWN0OjpKU05vdEFuT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNOb3RBbk9iamVjdDo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6SlNOb3RBbk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKiBydW50aW1lL0pTT05PYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09OT2JqZWN0OjpK
U09OT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPTk9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgor
ICAgICAgICAoSG9sZGVyKToKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OlN0cmluZ2lmaWVy
KToKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OnN0cmluZ2lmeSk6CisgICAgICAgIChKU0M6
OlN0cmluZ2lmaWVyOjp0b0pTT04pOgorICAgICAgICAoSlNDOjpTdHJpbmdpZmllcjo6YXBwZW5k
U3RyaW5naWZpZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjpIb2xkZXI6Okhv
bGRlcik6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OldhbGtlcjo6V2Fsa2VyKToKKyAgICAgICAgKEpTQzo6V2Fs
a2VyOjp3YWxrKToKKyAgICAgICAgKEpTQzo6SlNPTlByb3RvRnVuY1BhcnNlKToKKyAgICAgICAg
KEpTQzo6SlNPTlByb3RvRnVuY1N0cmluZ2lmeSk6CisgICAgICAgIChKU0M6OkpTT05TdHJpbmdp
ZnkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09O
T2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OnB1dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6Om5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpjcmVhdGVJbml0aWFsVW5kZWNpZGVkKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmNyZWF0ZUluaXRpYWxJbnQzMik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0
aWFsRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxDb250aWd1
b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0ludDMyKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHMp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvRG91YmxlKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQ29udGlndW91cyk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpnZW5lcmljQ29udmVydERvdWJsZVRvQ29udGlndW91cyk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnJhZ2VDb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRGb3JWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0Ojpjb252ZXJ0SW50MzJGb3JWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRJ
bmRleFF1aWNrbHlUb1VuZGVjaWRlZCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0
SW50MzJUb0RvdWJsZU9yQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1p
bmdTZXRJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVJbnQzMlNsb3cpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlRG91YmxlU2xvdyk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjplbnN1cmVDb250aWd1b3VzU2xvdyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpyYWdlRW5zdXJlQ29udGlndW91c1Nsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5z
dXJlQXJyYXlTdG9yYWdlU2xvdyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJh
eVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6c3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
c2V0UHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldFByb3RvdHlwZVdpdGhD
eWNsZUNoZWNrKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEFjY2Vzc29yKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmdldFByb3BlcnR5U3BlY2lmaWNWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6c2VhbCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpmcmVlemUpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHJldmVudEV4dGVuc2lvbnMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
cmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JEZWxldGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
cmVtb3ZlRGlyZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEluZGV4ZWREZXNjcmlw
dG9yKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphbGxvY2F0ZVNwYXJzZUluZGV4TWFwKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRob3V0QXR0
cmlidXRlcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoV2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUlu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVj
dEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpwdXREaXJlY3ROYXRpdmVGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpl
bnN1cmVMZW5ndGhTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cik6CisgICAgICAgIChKU0M6OnB1dERlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0RGlyZWN0TWF5QmVJbmRleCk6CisgICAgICAgIChKU0M6OkRlZmluZU93blByb3BlcnR5
U2NvcGU6OkRlZmluZU93blByb3BlcnR5U2NvcGUpOgorICAgICAgICAoSlNDOjpEZWZpbmVPd25Q
cm9wZXJ0eVNjb3BlOjp+RGVmaW5lT3duUHJvcGVydHlTY29wZSk6CisgICAgICAgIChEZWZpbmVP
d25Qcm9wZXJ0eVNjb3BlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bk5vbklu
ZGV4UHJvcGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpT
T2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhJbmxpbmUpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6c2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluaXRpYWxp
emVJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXREaXJlY3QpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6Z2V0RGlyZWN0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OnB1dERpcmVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojppc1NlYWxlZCk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0Ojppc0Zyb3plbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpmbGF0
dGVuRGljdGlvbmFyeU9iamVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVJbnQz
Mik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVEb3VibGUpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6ZW5zdXJlQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpy
YWdlRW5zdXJlQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJh
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmVuc3VyZUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTTm9uRmluYWxPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTTm9uRmluYWxPYmplY3Q6OkpTTm9uRmlu
YWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU05vbkZpbmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlv
bik6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
SlNGaW5hbE9iamVjdDo6SlNGaW5hbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmpl
Y3Q6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6SlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
aW5saW5lR2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERp
cmVjdEludGVybmFsKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZFJl
YWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0
T3duRGF0YVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9KU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRv
cjo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcik6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1l
SXRlcmF0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yLmg6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZVN0cnVj
dHVyZSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OnNldENhY2hlZFN0
cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OnNldENhY2hl
ZFByb3RvdHlwZUNoYWluKToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0RW51
bWVyYXRpb25DYWNoZSk6CisgICAgICAgICogcnVudGltZS9KU1Byb3h5LmNwcDoKKyAgICAgICAg
KEpTQzo6SlNQcm94eTo6c2V0VGFyZ2V0KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJveHkuaDoK
KyAgICAgICAgKEpTQzo6SlNQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNQcm94eTo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNQcm94eTo6SlNQcm94eSk6CisgICAg
ICAgIChKU0M6OkpTUHJveHk6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTUHJveHkpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNTY29wZS5jcHA6CisgICAgICAgIChKU0M6OmV4ZWN1dGVSZXNv
bHZlT3BlcmF0aW9ucyk6CisgICAgICAgIChKU0M6OkpTU2NvcGU6OnJlc29sdmVDb250YWluaW5n
U2NvcGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkpTU2NvcGU6OnJlc29sdmVXaXRoQmFzZSk6
CisgICAgICAgIChKU0M6OkpTU2NvcGU6OnJlc29sdmVXaXRoVGhpcyk6CisgICAgICAgIChKU0M6
OkpTU2NvcGU6OnJlc29sdmVQdXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTY29wZS5oOgorICAg
ICAgICAoSlNTY29wZSk6CisgICAgICAgIChKU0M6OkpTU2NvcGU6OkpTU2NvcGUpOgorICAgICAg
ICAoSlNDOjpKU1Njb3BlOjp2bSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6dm0pOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oOgorICAgICAgICAoSlND
OjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KToK
KyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuY3BwOgorICAgICAgICAoSlNDOjpKU1JvcGVT
dHJpbmc6OlJvcGVCdWlsZGVyOjpleHBhbmQpOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6
OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5oOgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKEpTU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OkpTU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
SlNTdHJpbmc6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpjcmVhdGVIYXNPdGhl
ck93bmVyKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgIChKU1JvcGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OlJvcGVCdWls
ZGVyOjpSb3BlQnVpbGRlcik6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6Um9wZUJ1aWxk
ZXI6OmFwcGVuZCk6CisgICAgICAgIChSb3BlQnVpbGRlcik6CisgICAgICAgIChKU0M6OkpTUm9w
ZVN0cmluZzo6SlNSb3BlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6YXBwZW5kKToKKyAgICAg
ICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpjcmVhdGVOdWxsKToKKyAgICAgICAgKEpTQzo6SlNSb3Bl
U3RyaW5nOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpqc0VtcHR5U3RyaW5nKToKKyAgICAgICAg
KEpTQzo6anNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOgorICAgICAgICAoSlNDOjpqc1NpbmdsZUNo
YXJhY3RlclN1YnN0cmluZyk6CisgICAgICAgIChKU0M6OmpzTm9udHJpdmlhbFN0cmluZyk6Cisg
ICAgICAgIChKU0M6OmpzU3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNTdWJzdHJpbmcpOgorICAg
ICAgICAoSlNDOjpqc1N1YnN0cmluZzgpOgorICAgICAgICAoSlNDOjpqc093bmVkU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6anNTdHJpbmdCdWlsZGVyKToKKyAgICAgICAgKEpTQzo6aW5saW5lSlNW
YWx1ZU5vdFN0cmluZ3RvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nSm9pbmVy
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmdKb2luZXI6OmJ1aWxkKToKKyAgICAgICAgKiBy
dW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJs
ZU9iamVjdDo6SlNTeW1ib2xUYWJsZU9iamVjdCk6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFi
bGVPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6c3ltYm9sVGFibGVQdXQp
OgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKToKKyAgICAgICAg
KiBydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNWYXJpYWJsZU9i
amVjdDo6SlNWYXJpYWJsZU9iamVjdCk6CisgICAgICAgICogcnVudGltZS9KU1dpdGhTY29wZS5o
OgorICAgICAgICAoSlNDOjpKU1dpdGhTY29wZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNX
aXRoU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTV2l0aFNjb3BlOjpK
U1dpdGhTY29wZSk6CisgICAgICAgICogcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaDoKKyAgICAg
ICAgKEpTV3JhcHBlck9iamVjdCk6CisgICAgICAgIChKU0M6OkpTV3JhcHBlck9iamVjdDo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNXcmFwcGVyT2JqZWN0OjpKU1dyYXBwZXJP
YmplY3QpOgorICAgICAgICAoSlNDOjpKU1dyYXBwZXJPYmplY3Q6OnNldEludGVybmFsVmFsdWUp
OgorICAgICAgICAqIHJ1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHA6CisgICAgICAgIChKU0M6Ojo6
dHJ5SlNPTlBQYXJzZSk6CisgICAgICAgIChKU0M6Ojo6bWFrZUlkZW50aWZpZXIpOgorICAgICAg
ICAoSlNDOjo6OnBhcnNlKToKKyAgICAgICAgKiBydW50aW1lL0xvb2t1cC5jcHA6CisgICAgICAg
IChKU0M6Okhhc2hUYWJsZTo6Y3JlYXRlVGFibGUpOgorICAgICAgICAoSlNDOjpzZXRVcFN0YXRp
Y0Z1bmN0aW9uU2xvdCk6CisgICAgICAgICogcnVudGltZS9Mb29rdXAuaDoKKyAgICAgICAgKEpT
Qzo6SGFzaFRhYmxlOjppbml0aWFsaXplSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpIYXNoVGFi
bGU6OmVudHJ5KToKKyAgICAgICAgKEpTQzo6SGFzaFRhYmxlOjpiZWdpbik6CisgICAgICAgIChK
U0M6Okhhc2hUYWJsZTo6ZW5kKToKKyAgICAgICAgKEhhc2hUYWJsZSk6CisgICAgICAgIChKU0M6
Omxvb2t1cFB1dCk6CisgICAgICAgICogcnVudGltZS9NYXRoT2JqZWN0LmNwcDoKKyAgICAgICAg
KEpTQzo6TWF0aE9iamVjdDo6TWF0aE9iamVjdCk6CisgICAgICAgIChKU0M6Ok1hdGhPYmplY3Q6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY1Npbik6CisgICAg
ICAgICogcnVudGltZS9NYXRoT2JqZWN0Lmg6CisgICAgICAgIChKU0M6Ok1hdGhPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9NZW1vcnlTdGF0aXN0aWNzLmNwcDoK
KyAgICAgICAgKiBydW50aW1lL01lbW9yeVN0YXRpc3RpY3MuaDoKKyAgICAgICAgKiBydW50aW1l
L05hbWVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6Ok5hbWVDb25zdHJ1Y3Rvcjo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RQcml2YXRlTmFtZSk6CisgICAg
ICAgICogcnVudGltZS9OYW1lQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6TmFtZUNvbnN0
cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvTmFtZUluc3RhbmNl
LmNwcDoKKyAgICAgICAgKEpTQzo6TmFtZUluc3RhbmNlOjpOYW1lSW5zdGFuY2UpOgorICAgICAg
ICAqIHJ1bnRpbWUvTmFtZUluc3RhbmNlLmg6CisgICAgICAgIChKU0M6Ok5hbWVJbnN0YW5jZTo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6TmFtZUluc3RhbmNlOjpjcmVhdGUpOgor
ICAgICAgICAoTmFtZUluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6TmFtZUluc3RhbmNlOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9OYW1lUHJvdG90eXBlLmNwcDoKKyAgICAg
ICAgKEpTQzo6TmFtZVByb3RvdHlwZTo6TmFtZVByb3RvdHlwZSk6CisgICAgICAgIChKU0M6Ok5h
bWVQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL05hbWVQcm90
b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6TmFtZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKiBydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpT
Qzo6TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1
bnRpbWUvTmF0aXZlRXJyb3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpOYXRpdmVFcnJv
clByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpOdW1iZXJDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3Jl
YXRpb24pOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoTnVtYmVyQ29uc3RydWN0b3IpOgor
ICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6TnVt
YmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9OdW1i
ZXJPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpOdW1iZXJPYmplY3Q6Ok51bWJlck9iamVjdCk6
CisgICAgICAgIChKU0M6Ok51bWJlck9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpjb25zdHJ1Y3ROdW1iZXIpOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyT2JqZWN0Lmg6
CisgICAgICAgIChOdW1iZXJPYmplY3QpOgorICAgICAgICAoSlNDOjpOdW1iZXJPYmplY3Q6OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6Ok51bWJlck9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKiBydW50aW1lL051bWJlclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6Ok51bWJl
clByb3RvdHlwZTo6TnVtYmVyUHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6TnVtYmVyUHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OmludGVnZXJWYWx1ZVRvU3RyaW5n
KToKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAqIHJ1
bnRpbWUvTnVtYmVyUHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6Ok51bWJlclByb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6T2JqZWN0Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgor
ICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvclNlYWwpOgorICAgICAgICAoSlNDOjpvYmpl
Y3RDb25zdHJ1Y3RvckZyZWV6ZSk6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yUHJl
dmVudEV4dGVuc2lvbnMpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvcklzU2VhbGVk
KToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JJc0Zyb3plbik6CisgICAgICAgICog
cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpPYmplY3RDb25zdHJ1
Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RW1wdHlPYmpl
Y3QpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpT
Qzo6T2JqZWN0UHJvdG90eXBlOjpPYmplY3RQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpPYmpl
Y3RQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9G
dW5jVG9TdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBy
dW50aW1lL09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpqc1R5cGVTdHJpbmdGb3JWYWx1
ZSk6CisgICAgICAgICogcnVudGltZS9PcGVyYXRpb25zLmg6CisgICAgICAgIChKU0MpOgorICAg
ICAgICAoSlNDOjpqc1N0cmluZyk6CisgICAgICAgIChKU0M6OmpzU3RyaW5nRnJvbUFyZ3VtZW50
cyk6CisgICAgICAgIChKU0M6Om5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3Mp
OgorICAgICAgICAoSlNDOjpub3JtYWxpemVQcm90b3R5cGVDaGFpbik6CisgICAgICAgICogcnVu
dGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU1hcEVu
dHJ5OjpQcm9wZXJ0eU1hcEVudHJ5KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKFByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlNDOjpQ
cm9wZXJ0eVRhYmxlOjpjb3B5KToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5
Lmg6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5OjpQcm9wZXJ0eU5hbWVBcnJheSk6
CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5Ojp2bSk6CisgICAgICAgIChKU0M6OlBy
b3BlcnR5TmFtZUFycmF5OjphZGRLbm93blVuaXF1ZSk6CisgICAgICAgIChQcm9wZXJ0eU5hbWVB
cnJheSk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6UHJvcGVydHlUYWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6
Y2xvbmUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKToKKyAg
ICAgICAgKiBydW50aW1lL1Byb3RvdHlwZU1hcC5jcHA6CisgICAgICAgIChKU0M6OlByb3RvdHlw
ZU1hcDo6ZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUpOgorICAgICAgICAqIHJ1bnRp
bWUvUmVnRXhwLmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpSZWdFeHApOgorICAgICAgICAo
SlNDOjpSZWdFeHA6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpjcmVh
dGVXaXRob3V0Q2FjaGluZyk6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6UmVnRXhwOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpjb21waWxl
SWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpSZWdFeHA6Om1hdGNoKToKKyAgICAgICAgKEpT
Qzo6UmVnRXhwOjpjb21waWxlTWF0Y2hPbmx5KToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpjb21w
aWxlSWZOZWNlc3NhcnlNYXRjaE9ubHkpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwLmg6Cisg
ICAgICAgIChKU0MpOgorICAgICAgICAoUmVnRXhwKToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpj
cmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwOgorICAg
ICAgICAoSlNDOjpSZWdFeHBDYWNoZTo6bG9va3VwT3JDcmVhdGUpOgorICAgICAgICAoSlNDOjpS
ZWdFeHBDYWNoZTo6UmVnRXhwQ2FjaGUpOgorICAgICAgICAoSlNDOjpSZWdFeHBDYWNoZTo6YWRk
VG9TdHJvbmdDYWNoZSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDYWNoZS5oOgorICAgICAg
ICAoUmVnRXhwQ2FjaGUpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNw
cDoKKyAgICAgICAgKEpTQzo6UmVnRXhwQ2FjaGVkUmVzdWx0OjpsYXN0UmVzdWx0KToKKyAgICAg
ICAgKEpTQzo6UmVnRXhwQ2FjaGVkUmVzdWx0OjpzZXRJbnB1dCk6CisgICAgICAgICogcnVudGlt
ZS9SZWdFeHBDYWNoZWRSZXN1bHQuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwQ2FjaGVkUmVzdWx0
OjpSZWdFeHBDYWNoZWRSZXN1bHQpOgorICAgICAgICAoSlNDOjpSZWdFeHBDYWNoZWRSZXN1bHQ6
OnJlY29yZCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OlJlZ0V4cENvbnN0cnVjdG9yOjpSZWdFeHBDb25zdHJ1Y3Rvcik6CisgICAgICAg
IChKU0M6OlJlZ0V4cENvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6
OmNvbnN0cnVjdFJlZ0V4cCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5o
OgorICAgICAgICAoSlNDOjpSZWdFeHBDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKFJlZ0V4cENvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6UmVnRXhwQ29uc3RydWN0
b3I6OnBlcmZvcm1NYXRjaCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXku
Y3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBNYXRjaGVzQXJyYXk6OlJlZ0V4cE1hdGNoZXNBcnJh
eSk6CisgICAgICAgIChKU0M6OlJlZ0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRlKToKKyAgICAgICAg
KEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6
OlJlZ0V4cE1hdGNoZXNBcnJheTo6cmVpZnlBbGxQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBydW50
aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oOgorICAgICAgICAoUmVnRXhwTWF0Y2hlc0FycmF5KToK
KyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAg
ICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2Jq
ZWN0OjpSZWdFeHBPYmplY3QpOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjptYXRjaCk6CisgICAgICAgICog
cnVudGltZS9SZWdFeHBPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OnNldFJlZ0V4cCk6CisgICAgICAgIChK
U0M6OlJlZ0V4cE9iamVjdDo6c2V0TGFzdEluZGV4KToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2Jq
ZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBl
LmNwcDoKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jQ29tcGlsZSk6CisgICAgICAgICog
cnVudGltZS9SZWdFeHBQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwUHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvU21hbGxTdHJpbmdzLmNwcDoK
KyAgICAgICAgKEpTQzo6U21hbGxTdHJpbmdzOjppbml0aWFsaXplQ29tbW9uU3RyaW5ncyk6Cisg
ICAgICAgIChKU0M6OlNtYWxsU3RyaW5nczo6Y3JlYXRlRW1wdHlTdHJpbmcpOgorICAgICAgICAo
SlNDOjpTbWFsbFN0cmluZ3M6OmNyZWF0ZVNpbmdsZUNoYXJhY3RlclN0cmluZyk6CisgICAgICAg
IChKU0M6OlNtYWxsU3RyaW5nczo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcnVudGltZS9TbWFs
bFN0cmluZ3MuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OlNtYWxsU3RyaW5nczo6
c2luZ2xlQ2hhcmFjdGVyU3RyaW5nKToKKyAgICAgICAgKFNtYWxsU3RyaW5ncyk6CisgICAgICAg
ICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcDoKKyAgICAgICAgKEpTQzo6U3BhcnNl
QXJyYXlWYWx1ZU1hcDo6U3BhcnNlQXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6OlNwYXJz
ZUFycmF5VmFsdWVNYXA6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJy
YXlWYWx1ZU1hcDo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0
RGlyZWN0KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6cHV0KToKKyAgICAgICAg
KiBydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cmlj
dEV2YWxBY3RpdmF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaWN0RXZhbEFjdGl2YXRpb246
OlN0cmljdEV2YWxBY3RpdmF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cmljdEV2YWxBY3Rp
dmF0aW9uLmg6CisgICAgICAgIChKU0M6OlN0cmljdEV2YWxBY3RpdmF0aW9uOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpTdHJpY3RFdmFsQWN0aXZhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKiBydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U3Ry
aW5nQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cmlu
Z0NvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6OlN0cmluZ0NvbnN0cnVjdG9yOjpjcmVhdGVT
dHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcDoKKyAgICAgICAg
KEpTQzo6U3RyaW5nT2JqZWN0OjpTdHJpbmdPYmplY3QpOgorICAgICAgICAoSlNDOjpTdHJpbmdP
YmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0U3RyaW5nKToK
KyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5oOgorICAgICAgICAoSlNDOjpTdHJpbmdP
YmplY3Q6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKFN0cmluZ09iamVjdCk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpTdHJpbmdQcm90b3R5cGU6OlN0cmluZ1Byb3Rv
dHlwZSk6CisgICAgICAgIChKU0M6OlN0cmluZ1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgor
ICAgICAgICAoSlNDOjpyZW1vdmVVc2luZ1JlZ0V4cFNlYXJjaCk6CisgICAgICAgIChKU0M6OnJl
cGxhY2VVc2luZ1JlZ0V4cFNlYXJjaCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY01h
dGNoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU2VhcmNoKToKKyAgICAgICAgKEpT
Qzo6c3RyaW5nUHJvdG9GdW5jU3BsaXQpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90
eXBlLmg6CisgICAgICAgIChKU0M6OlN0cmluZ1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKiBydW50aW1lL1N0cmluZ1JlY3Vyc2lvbkNoZWNrZXIuaDoKKyAgICAgICAgKEpT
Qzo6U3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6cGVyZm9ybUNoZWNrKToKKyAgICAgICAgKEpTQzo6
U3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6flN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIpOgorICAgICAg
ICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNp
dGlvblRhYmxlOjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OlN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6ZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0aW9uKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0
b0RpY3Rpb25hcnlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0b0NhY2hl
YWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0b1Vu
Y2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OnNlYWxUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmcmVlemVUcmFuc2l0
aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRp
b24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlm
UGlubmVkKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24p
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmlzU2VhbGVkKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjppc0Zyb3plbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rp
b25hcnlTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5V2l0
aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5
V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFsbG9jYXRlUmFy
ZURhdGEpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNsb25lUmFyZURhdGFGcm9tKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZSk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjpnZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0
aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkZXNwZWNpZnlBbGxGdW5jdGlvbnMpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnB1dFNwZWNpZmljVmFsdWUpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZVByb3BlcnR5TWFwKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjpnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0UHJvdG90
eXBlV2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNldEdsb2Jh
bE9iamVjdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0T2JqZWN0VG9TdHJpbmdWYWx1
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVj
ZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFw
SWZOZWNlc3NhcnlGb3JQaW5uaW5nKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzZXRQcmV2
aW91c0lEKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcDoKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlQ2hhaW46OlN0cnVjdHVyZUNoYWluKToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZUNoYWluLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUNoYWluOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVDaGFpbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlQ2hhaW46OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFN0cnVj
dHVyZUNoYWluKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Z2V0KToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjpzZXRFbnVtZXJhdGlvbkNhY2hlKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjpwcm90b3R5cGVDaGFpbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHJvcGVy
dHlUYWJsZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHA6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
UmFyZURhdGE6OmNsb25lKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OlN0cnVj
dHVyZVJhcmVEYXRhKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmg6Cisg
ICAgICAgIChTdHJ1Y3R1cmVSYXJlRGF0YSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVS
YXJlRGF0YUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnNldFBy
ZXZpb3VzSUQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0T2JqZWN0VG9T
dHJpbmdWYWx1ZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUu
aDoKKyAgICAgICAgKFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6c2V0U2luZ2xlVHJhbnNpdGlvbik6CisgICAgICAgICog
cnVudGltZS9TeW1ib2xUYWJsZS5oOgorICAgICAgICAoSlNDOjpTaGFyZWRTeW1ib2xUYWJsZTo6
Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OlNoYXJlZFN5bWJvbFRhYmxlOjpTaGFyZWRTeW1ib2xUYWJsZSk6
CisgICAgICAgICogcnVudGltZS9WTS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAuCisgICAgICAgIChKU0M6OlZNOjpWTSk6Cisg
ICAgICAgIChKU0M6OlZNOjp+Vk0pOgorICAgICAgICAoSlNDOjpWTTo6Y3JlYXRlQ29udGV4dEdy
b3VwKToKKyAgICAgICAgKEpTQzo6Vk06OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlZNOjpjcmVh
dGVMZWFrZWQpOgorICAgICAgICAoSlNDOjpWTTo6c2hhcmVkSW5zdGFuY2VFeGlzdHMpOgorICAg
ICAgICAoSlNDOjpWTTo6c2hhcmVkSW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpWTTo6c2hhcmVk
SW5zdGFuY2VJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OlZNOjpnZXRIb3N0RnVuY3Rpb24pOgor
ICAgICAgICAoSlNDOjpWTTo6Q2xpZW50RGF0YTo6fkNsaWVudERhdGEpOgorICAgICAgICAoSlND
OjpWTTo6cmVzZXREYXRlQ2FjaGUpOgorICAgICAgICAoSlNDOjpWTTo6c3RhcnRTYW1wbGluZyk6
CisgICAgICAgIChKU0M6OlZNOjpzdG9wU2FtcGxpbmcpOgorICAgICAgICAoSlNDOjpWTTo6ZGlz
Y2FyZEFsbENvZGUpOgorICAgICAgICAoSlNDOjpWTTo6ZHVtcFNhbXBsZURhdGEpOgorICAgICAg
ICAoSlNDOjpWTTo6YWRkU291cmNlUHJvdmlkZXJDYWNoZSk6CisgICAgICAgIChKU0M6OlZNOjpj
bGVhclNvdXJjZVByb3ZpZGVyQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Vk06OnJlbGVhc2VFeGVj
dXRhYmxlTWVtb3J5KToKKyAgICAgICAgKEpTQzo6cmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkpOgor
ICAgICAgICAoSlNDOjpWTTo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMpOgorICAgICAgICAoSlND
OjpWTTo6YWRkUmVnRXhwVG9UcmFjZSk6CisgICAgICAgIChKU0M6OlZNOjpkdW1wUmVnRXhwVHJh
Y2UpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmguCisgICAgICAgIChWTSk6CisgICAgICAgIChK
U0M6OlZNOjppc1NoYXJlZEluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6Vk06OnVzaW5nQVBJKToK
KyAgICAgICAgKEpTQzo6Vk06OmlzSW5pdGlhbGl6aW5nT2JqZWN0KToKKyAgICAgICAgKEpTQzo6
Vk06OnNldEluaXRpYWxpemluZ09iamVjdENsYXNzKToKKyAgICAgICAgKEpTQzo6V2Vha1NldDo6
aGVhcCk6CisgICAgICAgICogcnVudGltZS9Xcml0ZUJhcnJpZXIuaDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgIChKU0M6OldyaXRlQmFycmllckJhc2U6OnNldCk6CisgICAgICAgIChKU0M6Oldy
aXRlQmFycmllckJhc2U6OnNldE1heUJlTnVsbCk6CisgICAgICAgIChKU0M6OldyaXRlQmFycmll
ckJhc2U6OnNldEVhcmx5VmFsdWUpOgorICAgICAgICAoSlNDOjpXcml0ZUJhcnJpZXI6OldyaXRl
QmFycmllcik6CisgICAgICAgICogdGVzdFJlZ0V4cC5jcHA6CisgICAgICAgIChHbG9iYWxPYmpl
Y3QpOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAoR2xvYmFsT2Jq
ZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKHRlc3RPbmVSZWdFeHApOgorICAgICAg
ICAocGFyc2VSZWdFeHBMaW5lKToKKyAgICAgICAgKHJ1bkZyb21GaWxlcyk6CisgICAgICAgIChy
ZWFsTWFpbik6CisgICAgICAgICogeWFyci9ZYXJySW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEJ5
dGVjb2RlUGF0dGVybik6CisgICAgICAgICogeWFyci9ZYXJySklULmNwcDoKKyAgICAgICAgKFlh
cnJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpjb21waWxl
KToKKyAgICAgICAgKEpTQzo6WWFycjo6aml0Q29tcGlsZSk6CisgICAgICAgICogeWFyci9ZYXJy
SklULmg6CisgICAgICAgIChKU0MpOgorCiAyMDEzLTA0LTE3ICBNYXJrIExhbSAgPG1hcmsubGFt
QGFwcGxlLmNvbT4KIAogICAgICAgICBBdm9pZCB1c2luZyBhIGJyYW5jaCByYW5nZSB0aGF0IGlz
IHRvbyBmYXIgZm9yIHNvbWUgQ1BVIGFyY2hpdGVjdHVyZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI0Nyw3ICsyNDcsNyBAQCBz
ZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHJ1bnRpbWUvSlNEYXRlTWF0aC5jcHAKICAg
ICBydW50aW1lL0pTRnVuY3Rpb24uY3BwCiAgICAgcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3Bw
Ci0gICAgcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCisgICAgcnVudGltZS9WTS5jcHAKICAgICBy
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5j
dGlvbnMuY3BwCiAgICAgcnVudGltZS9KU1Byb3h5LmNwcApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC02NDcs
OCArNjQ3LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRXhwb3J0TWFjcm9zLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5jcHAgXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsRGF0YS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgXAorCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KU0NUeXBlZEFycmF5U3R1YnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJzLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KU0NUeXBlZEFycmF5U3R1YnMuaAkod29ya2luZyBjb3B5KQpA
QCAtNDgsOCArNDgsOCBAQCBwdWJsaWM6IFwKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0IEJhc2U7IFwKICAgICBzdGF0aWMgSlMjI25hbWUjI0FycmF5KiBjcmVhdGUoSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0
cjxuYW1lIyNBcnJheT4gaW1wbCkgXAogICAgIHsgXAotICAgICAgICBKUyMjbmFtZSMjQXJyYXkq
IHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlMjI25hbWUjI0FycmF5Pihn
bG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKSkgSlMjI25hbWUjI0FycmF5KHN0cnVjdHVy
ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsgXAotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGds
b2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKTsgXAorICAgICAgICBKUyMjbmFtZSMjQXJyYXkqIHB0
ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlMjI25hbWUjI0FycmF5PihnbG9i
YWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTIyNuYW1lIyNBcnJheShzdHJ1Y3R1cmUsIGdsb2JhbE9i
amVjdCwgaW1wbCk7IFwKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3Qt
PnZtKCkpOyBcCiAgICAgICAgIHJldHVybiBwdHI7IFwKICAgICB9XAogXApAQCAtNjAsOSArNjAs
OSBAQCBwdWJsaWM6IFwKICAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwg
SlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9v
bCk7XAogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87XAogXAotICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpXAorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpXAogICAgIHtcCi0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTtcCisgICAgICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
XAogICAgIH1cCiBcCiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpT
T2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpF
bnVtZXJhdGlvbk1vZGUgbW9kZSA9IEpTQzo6RXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7XApA
QCAtNzQsNyArNzQsNyBAQCBwdWJsaWM6IFwKICAgICBSZWZQdHI8bmFtZSMjQXJyYXk+IG1faW1w
bDtcCiBwcm90ZWN0ZWQ6XAogICAgIEpTIyNuYW1lIyNBcnJheShKU0M6OlN0cnVjdHVyZSosIEpT
R2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxuYW1lIyNBcnJheT4pO1wKLSAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJik7XAorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
SlNDOjpWTSYpO1wKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBK
U0M6Ok92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOyBcCiAgICAgSlNDOjpKU1Zh
bHVlIGdldEJ5SW5kZXgoSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCk7XAogICAgIHZv
aWQgaW5kZXhTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1Zh
bHVlKTtcCkBAIC04MywxOSArODMsMTkgQEAgcHJvdGVjdGVkOlwKIGNvbnN0IENsYXNzSW5mbyBK
UyMjbmFtZSMjQXJyYXk6OnNfaW5mbyA9IHsgI25hbWUgIkFycmF5IiAsICZCYXNlOjpzX2luZm8s
IDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlMjI25hbWUjI0FycmF5KSB9O1wKIFwKIEpTIyNu
YW1lIyNBcnJheTo6SlMjI25hbWUjI0FycmF5KFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPG5hbWUjI0FycmF5PiBpbXBsKVwKLSAg
ICA6IEJhc2UoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSlcCisgICAgOiBC
YXNlKGdsb2JhbE9iamVjdC0+dm0oKSwgc3RydWN0dXJlKVwKICAgICAsIG1faW1wbChpbXBsKVwK
IHtcCiB9XAogXAotdm9pZCBKUyMjbmFtZSMjQXJyYXk6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSlcCit2b2lkIEpTIyNuYW1lIyNBcnJheTo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtKVwKIHtcCi0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7XAorICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTtcCiAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgZGVz
Y3JpcHRvcigmSlMjI25hbWUjI0FycmF5OjpzX2luZm8sIE9CSkVDVF9PRkZTRVRPRihKUyMjbmFt
ZSMjQXJyYXksIG1fc3RvcmFnZSksIE9CSkVDVF9PRkZTRVRPRihKUyMjbmFtZSMjQXJyYXksIG1f
c3RvcmFnZUxlbmd0aCkpO1wKLSAgICBnbG9iYWxEYXRhLnJlZ2lzdGVyVHlwZWRBcnJheURlc2Ny
aXB0b3IobV9pbXBsLmdldCgpLCBkZXNjcmlwdG9yKTtcCisgICAgdm0ucmVnaXN0ZXJUeXBlZEFy
cmF5RGVzY3JpcHRvcihtX2ltcGwuZ2V0KCksIGRlc2NyaXB0b3IpO1wKICAgICBtX3N0b3JhZ2Ug
PSBtX2ltcGwtPmRhdGEoKTtcCiAgICAgbV9zdG9yYWdlTGVuZ3RoID0gbV9pbXBsLT5sZW5ndGgo
KTtcCi0gICAgcHV0RGlyZWN0KGdsb2JhbERhdGEsIGdsb2JhbERhdGEucHJvcGVydHlOYW1lcy0+
bGVuZ3RoLCBqc051bWJlcihtX3N0b3JhZ2VMZW5ndGgpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkg
fCBEb250RW51bSk7IFwKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCwganNOdW1iZXIobV9zdG9yYWdlTGVuZ3RoKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9u
dEVudW0pOyBcCiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTtcCiB9XAogXApAQCAtMTg0
LDcgKzE4NCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAg
ICBpbnQzMl90IGxlbmd0aCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9JbnQzMihjYWxsRnJh
bWUpOyBcCiAgICAgaWYgKGxlbmd0aCA8IDApIFwKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsgXAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSlMjI25h
bWUjI0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxG
cmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpOyBcCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBK
UyMjbmFtZSMjQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFt
ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+b2JqZWN0UHJvdG90eXBlKCkpOyBcCiAgICAgUmVmUHRyPG5hbWUjI0FycmF5PiBidWZmZXIg
PSBuYW1lIyNBcnJheTo6Y3JlYXRlKGxlbmd0aCk7IFwKICAgICBpZiAoIWJ1ZmZlcikgXAogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGNhbGxGcmFtZSwgY3JlYXRlUmFuZ2VFcnJvcihjYWxs
RnJhbWUsICJBcnJheUJ1ZmZlciBzaXplIGlzIG5vdCBhIHNtYWxsIGVub3VnaCBwb3NpdGl2ZSBp
bnRlZ2VyLiIpKTsgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lm9yZGVyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5vcmRlcgkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLm9yZGVyCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBAIF9fWk4zSlND
TDIzaW5pdGlhbGl6ZVRocmVhZGluZ09uY2VFdgogX19aTjNXVEYxMFN0cmluZ0ltcGw1ZW1wdHlF
dgogX19aTjNXVEYxM1dURlRocmVhZERhdGFDMUV2CiBfX1pOM1dURjExU3RhY2tCb3VuZHMxMGlu
aXRpYWxpemVFdgotX19aTjNKU0MxMkpTR2xvYmFsRGF0YTEwc3RvcmVWUHRyc0V2CitfX1pOM0pT
QzEyVk0xMHN0b3JlVlB0cnNFdgogX19aTjNKU0M3SlNBcnJheUMxRU5TXzZKU0NlbGwyMFZQdHJT
dGVhbGluZ0hhY2tUeXBlRQogX19aTjNKU0MxMEpTRnVuY3Rpb25DMUVOU182SlNDZWxsMjBWUHRy
U3RlYWxpbmdIYWNrVHlwZUUKIF9fWk4zV1RGMTVpbml0aWFsaXplRGF0ZXNFdgpAQCAtMTE5LDY1
ICsxMTksNjUgQEAgX19aTjNXVEYxMkF0b21pY1N0cmluZzZyZW1vdmVFUE5TXzEwU3RyaQogX0pT
R2xvYmFsQ29udGV4dENyZWF0ZQogX19aTjNKU0M2SlNMb2NrNGxvY2tFTlNfMTRKU0xvY2tCZWhh
dmlvckUKIF9fWk4zSlNDTDE3Y3JlYXRlSlNMb2NrQ291bnRFdgotX19aTjNKU0MxMkpTR2xvYmFs
RGF0YTE0c2hhcmVkSW5zdGFuY2VFdgotX19aTjNKU0MxMkpTR2xvYmFsRGF0YUMyRU5TMF8xNEds
b2JhbERhdGFUeXBlRU5TXzhIZWFwVHlwZUUKK19fWk4zSlNDMTJWTTE0c2hhcmVkSW5zdGFuY2VF
dgorX19aTjNKU0MxMlZNQzJFTlMwXzE0Vk1UeXBlRU5TXzhIZWFwVHlwZUUKIF9fWk4zSlNDMjFj
cmVhdGVJZGVudGlmaWVyVGFibGVFdgotX19aTjNKU0MxN0NvbW1vbklkZW50aWZpZXJzQzFFUE5T
XzEySlNHbG9iYWxEYXRhRQotX19aTjNKU0MxN0NvbW1vbklkZW50aWZpZXJzQzJFUE5TXzEySlNH
bG9iYWxEYXRhRQotX19aTjNKU0MxMElkZW50aWZpZXIzYWRkRVBOU18xMkpTR2xvYmFsRGF0YUVQ
S2MKK19fWk4zSlNDMTdDb21tb25JZGVudGlmaWVyc0MxRVBOU18xMlZNRQorX19aTjNKU0MxN0Nv
bW1vbklkZW50aWZpZXJzQzJFUE5TXzEyVk1FCitfX1pOM0pTQzEwSWRlbnRpZmllcjNhZGRFUE5T
XzEyVk1FUEtjCiBfX1pOM0pTQzE1SWRlbnRpZmllclRhYmxlM2FkZElQS2NOU18yN0lkZW50aWZp
ZXJDU3RyaW5nVHJhbnNsYXRvckVFRVN0NHBhaXJJTjNXVEYyOUhhc2hUYWJsZUNvbnN0SXRlcmF0
b3JBZGFwdGVySU5TNl85SGFzaFRhYmxlSVBOUzZfMTBTdHJpbmdJbXBsRVNBX05TNl8xN0lkZW50
aXR5RXh0cmFjdG9ySVNBX0VFTlM2XzEwU3RyaW5nSGFzaEVOUzZfMTBIYXNoVHJhaXRzSVNBX0VF
U0ZfRUVTQV9FRWJFVF8KIF9fWk4zV1RGOUhhc2hUYWJsZUlQTlNfMTBTdHJpbmdJbXBsRVMyX05T
XzE3SWRlbnRpdHlFeHRyYWN0b3JJUzJfRUVOU18xMFN0cmluZ0hhc2hFTlNfMTBIYXNoVHJhaXRz
SVMyX0VFUzdfRTZleHBhbmRFdgogX19aTjNXVEY5SGFzaFRhYmxlSVBLY1N0NHBhaXJJUzJfTlNf
NlJlZlB0cklOU18xMFN0cmluZ0ltcGxFRUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzdfRUVO
U183UHRySGFzaElTMl9FRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMyX0VF
TlNEX0lTNl9FRUVFU0VfRTZleHBhbmRFdgogX19aTjNXVEY5SGFzaFRhYmxlSVBOU18xMFN0cmlu
Z0ltcGxFUzJfTlNfMTdJZGVudGl0eUV4dHJhY3RvcklTMl9FRU5TXzEwU3RyaW5nSGFzaEVOU18x
MEhhc2hUcmFpdHNJUzJfRUVTN19FNGZpbmRJUzJfTlNfMjJJZGVudGl0eUhhc2hUcmFuc2xhdG9y
SVMyX1MyX1M1X0VFRUVOU18xN0hhc2hUYWJsZUl0ZXJhdG9ySVMyX1MyX1M0X1M1X1M3X1M3X0VF
UktUXwotX19aTjNKU0MxMElkZW50aWZpZXJDMUVQTlNfMTJKU0dsb2JhbERhdGFFUEtjCitfX1pO
M0pTQzEwSWRlbnRpZmllckMxRVBOU18xMlZNRVBLYwogX19aTjNKU0MxMlNtYWxsU3RyaW5nc0Mx
RXYKIF9fWk4zSlNDMTlFeGVjdXRhYmxlQWxsb2NhdG9yMTdpbnRpYWxpemVQYWdlU2l6ZUV2CiBf
X1pOSzNKU0MxOUV4ZWN1dGFibGVBbGxvY2F0b3I3aXNWYWxpZEV2CiBfX1pOM1dURjExT1NBbGxv
Y2F0b3IxOHJlc2VydmVVbmNvbW1pdHRlZEVtTlMwXzVVc2FnZUViYgogX19aTjNKU0MxNEV4ZWN1
dGFibGVQb29sMTFzeXN0ZW1BbGxvY0VtCiBfX1pOM1dURjExT1NBbGxvY2F0b3I2Y29tbWl0RVB2
bWJiCi1fX1pOM0pTQzVMZXhlckMxRVBOU18xMkpTR2xvYmFsRGF0YUUKK19fWk4zSlNDNUxleGVy
QzFFUE5TXzEyVk1FCiBfX1pOM0pTQzExUGFyc2VyQXJlbmFDMUV2CiBfX1pOM0pTQzExUGFyc2Vy
QXJlbmFDMkV2CiBfX1pOM0pTQzE0VGltZW91dENoZWNrZXJDMUV2Ci1fX1pOM0pTQzRIZWFwQzFF
UE5TXzEySlNHbG9iYWxEYXRhRQotX19aTjNKU0M0SGVhcEMyRVBOU18xMkpTR2xvYmFsRGF0YUUK
LV9fWk4zSlNDMTFNYXJrZWRTcGFjZUMxRVBOU18xMkpTR2xvYmFsRGF0YUUKK19fWk4zSlNDNEhl
YXBDMUVQTlNfMTJWTUUKK19fWk4zSlNDNEhlYXBDMkVQTlNfMTJWTUUKK19fWk4zSlNDMTFNYXJr
ZWRTcGFjZUMxRVBOU18xMlZNRQogX19aTjNKU0MyNURlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2tD
MUVQTlNfNEhlYXBFCiBfX1pOM0pTQzI1RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazE3Y29tbW9u
Q29uc3RydWN0b3JFUE5TXzRIZWFwRVAxMV9fQ0ZSdW5Mb29wCiBfX1pOM0pTQzE0TWFjaGluZVRo
cmVhZHNDMUVQTlNfNEhlYXBFCiBfX1pOM0pTQzlNYXJrU3RhY2sxOGluaXRpYWxpemVQYWdlc2l6
ZUV2CiBfX1pOM1dURjExT1NBbGxvY2F0b3IxNnJlc2VydmVBbmRDb21taXRFbU5TMF81VXNhZ2VF
YmIKLV9fWk4zSlNDMTBIYW5kbGVIZWFwQzFFUE5TXzEySlNHbG9iYWxEYXRhRQorX19aTjNKU0Mx
MEhhbmRsZUhlYXBDMUVQTlNfMTJWTUUKIF9fWk4zV1RGMTBCbG9ja1N0YWNrSU4zSlNDMTBIYW5k
bGVIZWFwNE5vZGVFRTRncm93RXYKIF9fWk4zV1RGNlZlY3RvcklQTjNKU0MxMEhhbmRsZUhlYXA0
Tm9kZUVMbTBFRTE1cmVzZXJ2ZUNhcGFjaXR5RW0KIF9fWk4zSlNDMTFIYW5kbGVTdGFja0MxRXYK
IF9fWk4zV1RGMTBCbG9ja1N0YWNrSU4zSlNDN0pTVmFsdWVFRTRncm93RXYKIF9fWk4zV1RGNlZl
Y3RvcklQTjNKU0M3SlNWYWx1ZUVMbTBFRTE1cmVzZXJ2ZUNhcGFjaXR5RW0KIF9fWk4zSlNDMjVE
ZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrY2xFdgotX19aTjNKU0MxMVJlZ0V4cENhY2hlQzFFUE5T
XzEySlNHbG9iYWxEYXRhRQotX19aTjNKU0MxMUludGVycHJldGVyQzFFUk5TXzEySlNHbG9iYWxE
YXRhRQorX19aTjNKU0MxMVJlZ0V4cENhY2hlQzFFUE5TXzEyVk1FCitfX1pOM0pTQzExSW50ZXJw
cmV0ZXJDMUVSTlNfMTJWTUUKIF9fWk4zSlNDMTBIYW5kbGVIZWFwMTJ3cml0ZUJhcnJpZXJFUE5T
XzdKU1ZhbHVlRVJLUzFfCiBfX1pOM0pTQzEySlNTdGFjazIzYWRkVG9Db21taXR0ZWRCeXRlQ291
bnRFbAogX19aTjNKU0MxMU1hcmtlZFNwYWNlMjFhbGxvY2F0ZUZyb21TaXplQ2xhc3NFUk5TMF85
U2l6ZUNsYXNzRQogX19aTjNKU0MxMU1hcmtlZFNwYWNlMTNhbGxvY2F0ZUJsb2NrRVJOUzBfOVNp
emVDbGFzc0UKLV9fWk4zSlNDMTFNYXJrZWRCbG9jazZjcmVhdGVFUE5TXzEySlNHbG9iYWxEYXRh
RW0KK19fWk4zSlNDMTFNYXJrZWRCbG9jazZjcmVhdGVFUE5TXzEyVk1FbQogX19aTjNXVEYyMVBh
Z2VBbGxvY2F0aW9uQWxpZ25lZDhhbGxvY2F0ZUVtbU5TXzExT1NBbGxvY2F0b3I1VXNhZ2VFYmIK
IF9fWk4zV1RGOUhhc2hUYWJsZUlQTjNKU0MxMU1hcmtlZEJsb2NrRVMzX05TXzE3SWRlbnRpdHlF
eHRyYWN0b3JJUzNfRUVOU183UHRySGFzaElTM19FRU5TXzEwSGFzaFRyYWl0c0lTM19FRVM5X0U2
cmVoYXNoRWkKIF9fWk4zSlNDNkpTQ2VsbEQxRXYKLV9fWk4zSlNDOVN0cnVjdHVyZUMxRVJOU18x
MkpTR2xvYmFsRGF0YUUKLV9fWk4zSlNDNlN0cm9uZ0lOU185U3RydWN0dXJlRUUzc2V0RVJOU18x
MkpTR2xvYmFsRGF0YUVQUzFfCi1fX1pOM0pTQzlTdHJ1Y3R1cmU2Y3JlYXRlRVJOU18xMkpTR2xv
YmFsRGF0YUVOU183SlNWYWx1ZUVSS05TXzhUeXBlSW5mb0VqUEtOU185Q2xhc3NJbmZvRQotX19a
TjNKU0M5U3RydWN0dXJlQzFFUk5TXzEySlNHbG9iYWxEYXRhRU5TXzdKU1ZhbHVlRVJLTlNfOFR5
cGVJbmZvRWpQS05TXzlDbGFzc0luZm9FCitfX1pOM0pTQzlTdHJ1Y3R1cmVDMUVSTlNfMTJWTUUK
K19fWk4zSlNDNlN0cm9uZ0lOU185U3RydWN0dXJlRUUzc2V0RVJOU18xMlZNRVBTMV8KK19fWk4z
SlNDOVN0cnVjdHVyZTZjcmVhdGVFUk5TXzEyVk1FTlNfN0pTVmFsdWVFUktOU184VHlwZUluZm9F
alBLTlNfOUNsYXNzSW5mb0UKK19fWk4zSlNDOVN0cnVjdHVyZUMxRVJOU18xMlZNRU5TXzdKU1Zh
bHVlRVJLTlNfOFR5cGVJbmZvRWpQS05TXzlDbGFzc0luZm9FCiBfX1pOM1dURjEzd3RmVGhyZWFk
RGF0YUV2CiBfX1pOM0pTQzI3c3RhcnRQcm9maWxlclNlcnZlcklmTmVlZGVkRXYKICtbUHJvZmls
ZXJTZXJ2ZXIgc2hhcmVkUHJvZmlsZVNlcnZlcl0KIC1bUHJvZmlsZXJTZXJ2ZXIgaW5pdF0KLV9f
Wk4zSlNDOUpJVFRodW5rc0MxRVBOU18xMkpTR2xvYmFsRGF0YUUKLV9fWk4zSlNDOUpJVFRodW5r
c0MyRVBOU18xMkpTR2xvYmFsRGF0YUUKLV9fWk4zSlNDM0pJVEMxRVBOU18xMkpTR2xvYmFsRGF0
YUVQTlNfOUNvZGVCbG9ja0UKLV9fWk4zSlNDM0pJVEMyRVBOU18xMkpTR2xvYmFsRGF0YUVQTlNf
OUNvZGVCbG9ja0UKLV9fWk4zSlNDM0pJVDM1cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBv
bGluZXNFUE4zV1RGNlJlZlB0cklOU18xNEV4ZWN1dGFibGVQb29sRUVFUE5TXzEySlNHbG9iYWxE
YXRhRVBOU18xOVRyYW1wb2xpbmVTdHJ1Y3R1cmVFCitfX1pOM0pTQzlKSVRUaHVua3NDMUVQTlNf
MTJWTUUKK19fWk4zSlNDOUpJVFRodW5rc0MyRVBOU18xMlZNRQorX19aTjNKU0MzSklUQzFFUE5T
XzEyVk1FUE5TXzlDb2RlQmxvY2tFCitfX1pOM0pTQzNKSVRDMkVQTlNfMTJWTUVQTlNfOUNvZGVC
bG9ja0UKK19fWk4zSlNDM0pJVDM1cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXNF
UE4zV1RGNlJlZlB0cklOU18xNEV4ZWN1dGFibGVQb29sRUVFUE5TXzEyVk1FUE5TXzE5VHJhbXBv
bGluZVN0cnVjdHVyZUUKIF9fWk4zSlNDMjBNYWNyb0Fzc2VtYmxlclg4Nl82NDEzYnJhbmNoVGVz
dFB0ckVOU18yM01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uMTVSZXN1bHRDb25kaXRpb25FTlNfMTJY
ODZSZWdpc3RlcnMxMFJlZ2lzdGVySURFUzRfCiBfX1pOM0pTQzEyWDg2QXNzZW1ibGVyMjNYODZJ
bnN0cnVjdGlvbkZvcm1hdHRlcjExb25lQnl0ZU9wNjRFTlMwXzE1T25lQnl0ZU9wY29kZUlERWlO
U18xMlg4NlJlZ2lzdGVyczEwUmVnaXN0ZXJJREUKIF9fWk4zSlNDMTJYODZBc3NlbWJsZXIzakND
RU5TMF85Q29uZGl0aW9uRQpAQCAtMTkyLDcgKzE5Miw3IEBAIF9fWk4zSlNDMjBNYWNyb0Fzc2Vt
Ymxlclg4Nl82NDEzYnJhbmNoVGUKIF9fWk4zSlNDMTJYODZBc3NlbWJsZXIyM1g4Nkluc3RydWN0
aW9uRm9ybWF0dGVyOW9uZUJ5dGVPcEVOUzBfMTVPbmVCeXRlT3Bjb2RlSURFTlNfMTJYODZSZWdp
c3RlcnMxMFJlZ2lzdGVySURFCiBfX1pOM1dURjZWZWN0b3JJY0xtMTI4RUUxNGV4cGFuZENhcGFj
aXR5RW0KIF9fWk4zV1RGNlZlY3RvckljTG0xMjhFRTRncm93RW0KLV9fWk4zSlNDM0pJVDI3cHJp
dmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsRVBOU18xMkpTR2xvYmFsRGF0YUViCitfX1pOM0pTQzNK
SVQyN3ByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbEVQTlNfMTJWTUViCiBfX1pOSzNKU0MyMkFi
c3RyYWN0TWFjcm9Bc3NlbWJsZXJJTlNfMTJYODZBc3NlbWJsZXJFRTRKdW1wNGxpbmtFUFMyXwog
X19aTjNXVEYxMFJlZkNvdW50ZWRJTjNKU0MxNEV4ZWN1dGFibGVQb29sRUU1ZGVyZWZFdgogX19a
TjNKU0MxNE1hY2hpbmVUaHJlYWRzMjltYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkc0V2CkBA
IC0yMDAsNyArMjAwLDcgQEAgX0pTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXAKIF9fWk4zSlND
NEhlYXAxNmFjdGl2aXR5Q2FsbGJhY2tFdgogX19aTjNKU0MyNURlZmF1bHRHQ0FjdGl2aXR5Q2Fs
bGJhY2sxMXN5bmNocm9uaXplRXYKIF9fWk4zSlNDMTRUaW1lb3V0Q2hlY2tlcjVyZXNldEV2Ci1f
X1pOM0pTQzE0SlNHbG9iYWxPYmplY3Rud0VtUE5TXzEySlNHbG9iYWxEYXRhRQorX19aTjNKU0Mx
NEpTR2xvYmFsT2JqZWN0bndFbVBOU18xMlZNRQogX19aTjNXVEYxMnJhbmRvbU51bWJlckV2CiBf
X1pOM1dURjI5Y3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXJFdgogX19aTjNXVEYzNWNyeXB0
b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzRnJvbU9TRVBobQpAQCAtMjA4LDUyICsyMDgsNTIgQEAg
X19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0NGluaXRFUE5TXzhKU09iagogX19aTjNKU0MxNEpTR2xv
YmFsT2JqZWN0NXJlc2V0RU5TXzdKU1ZhbHVlRQogX19aTjNKU0MxN0Z1bmN0aW9uUHJvdG90eXBl
QzFFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1cmVFCiBf
X1pOM0pTQzE3RnVuY3Rpb25Qcm90b3R5cGVDMkVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2Jh
bE9iamVjdEVQTlNfOVN0cnVjdHVyZUUKLV9fWk4zSlNDMTZJbnRlcm5hbEZ1bmN0aW9uQzJFUE5T
XzEySlNHbG9iYWxEYXRhRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBOU185U3RydWN0dXJlRVJLTlNf
MTBJZGVudGlmaWVyRQorX19aTjNKU0MxNkludGVybmFsRnVuY3Rpb25DMkVQTlNfMTJWTUVQTlNf
MTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0cnVjdHVyZUVSS05TXzEwSWRlbnRpZmllckUKIF9fWk4z
SlNDMjRKU09iamVjdFdpdGhHbG9iYWxPYmplY3RDMkVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNf
OVN0cnVjdHVyZUUKIF9fWk4zSlNDN1VTdHJpbmdDMUVQS2MKLV9fWk4zSlNDMTJTbWFsbFN0cmlu
Z3MxN2NyZWF0ZUVtcHR5U3RyaW5nRVBOU18xMkpTR2xvYmFsRGF0YUUKK19fWk4zSlNDMTJTbWFs
bFN0cmluZ3MxN2NyZWF0ZUVtcHR5U3RyaW5nRVBOU18xMlZNRQogX19aTjNKU0M5U3RydWN0dXJl
NDBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlRVBTMF9SS05TXzEwSWRl
bnRpZmllckVqUE5TXzZKU0NlbGxFUm0KLV9fWk4zSlNDOVN0cnVjdHVyZTNnZXRFUk5TXzEySlNH
bG9iYWxEYXRhRVBOM1dURjEwU3RyaW5nSW1wbEVSalJQTlNfNkpTQ2VsbEUKLV9fWk4zSlNDOVN0
cnVjdHVyZTIxYWRkUHJvcGVydHlUcmFuc2l0aW9uRVJOU18xMkpTR2xvYmFsRGF0YUVQUzBfUktO
U18xMElkZW50aWZpZXJFalBOU182SlNDZWxsRVJtCitfX1pOM0pTQzlTdHJ1Y3R1cmUzZ2V0RVJO
U18xMlZNRVBOM1dURjEwU3RyaW5nSW1wbEVSalJQTlNfNkpTQ2VsbEUKK19fWk4zSlNDOVN0cnVj
dHVyZTIxYWRkUHJvcGVydHlUcmFuc2l0aW9uRVJOU18xMlZNRVBTMF9SS05TXzEwSWRlbnRpZmll
ckVqUE5TXzZKU0NlbGxFUm0KIF9fWk4zSlNDOVN0cnVjdHVyZTE3Y3JlYXRlUHJvcGVydHlNYXBF
agogX19aTjNXVEYxNGRlbGV0ZU93bmVkUHRySU4zSlNDMTNQcm9wZXJ0eVRhYmxlRUVFdlBUXwot
X19aTjNKU0M5U3RydWN0dXJlMTZwdXRTcGVjaWZpY1ZhbHVlRVJOU18xMkpTR2xvYmFsRGF0YUVS
S05TXzEwSWRlbnRpZmllckVqUE5TXzZKU0NlbGxFCi1fX1pOM0pTQzI0U3RydWN0dXJlVHJhbnNp
dGlvblRhYmxlM2FkZEVSTlNfMTJKU0dsb2JhbERhdGFFUE5TXzlTdHJ1Y3R1cmVFCi1fX1pOM0pT
QzlTdHJ1Y3R1cmUyOGFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb25FUk5TXzEySlNHbG9iYWxE
YXRhRVJLTlNfMTBJZGVudGlmaWVyRWpQTlNfNkpTQ2VsbEUKK19fWk4zSlNDOVN0cnVjdHVyZTE2
cHV0U3BlY2lmaWNWYWx1ZUVSTlNfMTJWTUVSS05TXzEwSWRlbnRpZmllckVqUE5TXzZKU0NlbGxF
CitfX1pOM0pTQzI0U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlM2FkZEVSTlNfMTJWTUVQTlNfOVN0
cnVjdHVyZUUKK19fWk4zSlNDOVN0cnVjdHVyZTI4YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlv
bkVSTlNfMTJWTUVSS05TXzEwSWRlbnRpZmllckVqUE5TXzZKU0NlbGxFCiBfX1pOM0pTQzhKU09i
amVjdDIzYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VFbW0KIF9fWk4zSlNDMTdGdW5jdGlvblByb3Rv
dHlwZTIxYWRkRnVuY3Rpb25Qcm9wZXJ0aWVzRVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xvYmFs
T2JqZWN0RVBOU185U3RydWN0dXJlRVBQTlNfMTBKU0Z1bmN0aW9uRVM5XwogX19aTjNKU0MxMEpT
RnVuY3Rpb25DMUVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0cnVj
dHVyZUVpUktOU18xMElkZW50aWZpZXJFUEZQdlMyX0UKIF9fWk4zSlNDMTBKU0Z1bmN0aW9uQzJF
UE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1cmVFaVJLTlNf
MTBJZGVudGlmaWVyRVBGUHZTMl9FCi1fX1pOM0pTQzEySlNHbG9iYWxEYXRhMTVnZXRIb3N0RnVu
Y3Rpb25FUEZQdlBOU185RXhlY1N0YXRlRUUKLV9fWk4zSlNDOUpJVFRodW5rczE2aG9zdEZ1bmN0
aW9uU3R1YkVQTlNfMTJKU0dsb2JhbERhdGFFUEZQdlBOU185RXhlY1N0YXRlRUUKK19fWk4zSlND
MTJWTTE1Z2V0SG9zdEZ1bmN0aW9uRVBGUHZQTlNfOUV4ZWNTdGF0ZUVFCitfX1pOM0pTQzlKSVRU
aHVua3MxNmhvc3RGdW5jdGlvblN0dWJFUE5TXzEyVk1FUEZQdlBOU185RXhlY1N0YXRlRUUKIF9f
Wk4zV1RGN0hhc2hNYXBJUEZQdlBOM0pTQzlFeGVjU3RhdGVFRU5TMl80V2Vha0lOUzJfMTZOYXRp
dmVFeGVjdXRhYmxlRUVFTlNfN1B0ckhhc2hJUzZfRUVOU18xMEhhc2hUcmFpdHNJUzZfRUVOU0Nf
SVM5X0VFRTNhZGRFUktTNl9SS1M5XwogX19aTjNXVEY5SGFzaFRhYmxlSVBGUHZQTjNKU0M5RXhl
Y1N0YXRlRUVTdDRwYWlySVM2X05TMl80V2Vha0lOUzJfMTZOYXRpdmVFeGVjdXRhYmxlRUVFRU5T
XzE4UGFpckZpcnN0RXh0cmFjdG9ySVNCX0VFTlNfN1B0ckhhc2hJUzZfRUVOU18xNFBhaXJIYXNo
VHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTNl9FRU5TSF9JU0FfRUVFRVNJX0U2ZXhwYW5kRXYKLV9f
Wk4zSlNDM0pJVDI3cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsRU4zV1RGMTBQYXNzUmVmUHRy
SU5TXzE0RXhlY3V0YWJsZVBvb2xFRUVQTlNfMTJKU0dsb2JhbERhdGFFUEZQdlBOU185RXhlY1N0
YXRlRUUKLV9fWk4zSlNDMTZOYXRpdmVFeGVjdXRhYmxlNmNyZWF0ZUVSTlNfMTJKU0dsb2JhbERh
dGFFTlNfMjFNYWNyb0Fzc2VtYmxlckNvZGVQdHJFUEZQdlBOU185RXhlY1N0YXRlRUVTM19TOF8K
K19fWk4zSlNDM0pJVDI3cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsRU4zV1RGMTBQYXNzUmVm
UHRySU5TXzE0RXhlY3V0YWJsZVBvb2xFRUVQTlNfMTJWTUVQRlB2UE5TXzlFeGVjU3RhdGVFRQor
X19aTjNKU0MxNk5hdGl2ZUV4ZWN1dGFibGU2Y3JlYXRlRVJOU18xMlZNRU5TXzIxTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyRVBGUHZQTlNfOUV4ZWNTdGF0ZUVFUzNfUzhfCiBfX1pOM0pTQzhKU09iamVj
dDM0cHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbkVQTlNfOUV4ZWNTdGF0ZUVQTlNf
MTBKU0Z1bmN0aW9uRWoKIF9fWk4zSlNDMTBKU0Z1bmN0aW9uNG5hbWVFUE5TXzlFeGVjU3RhdGVF
CiBfX1pOM0pTQzE1T2JqZWN0UHJvdG90eXBlQzFFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9i
YWxPYmplY3RFUE5TXzlTdHJ1Y3R1cmVFCiBfX1pOM0pTQzE0QXJyYXlQcm90b3R5cGVDMUVQTlNf
MTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0cnVjdHVyZUUKLV9fWk4zSlNDN0pTQXJyYXlDMkVSTlNf
MTJKU0dsb2JhbERhdGFFUE5TXzlTdHJ1Y3R1cmVFCitfX1pOM0pTQzdKU0FycmF5QzJFUk5TXzEy
Vk1FUE5TXzlTdHJ1Y3R1cmVFCiBfX1pOM0pTQzE1U3RyaW5nUHJvdG90eXBlQzFFUE5TXzlFeGVj
U3RhdGVFUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1cmVFCiBfX1pOM0pTQzE1U3Ry
aW5nUHJvdG90eXBlQzJFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzlT
dHJ1Y3R1cmVFCiBfX1pOM0pTQzEyU3RyaW5nT2JqZWN0QzJFUE5TXzlFeGVjU3RhdGVFUE5TXzlT
dHJ1Y3R1cmVFCiBfX1pOM0pTQzE2Qm9vbGVhblByb3RvdHlwZUMxRVBOU185RXhlY1N0YXRlRVBO
U18xNEpTR2xvYmFsT2JqZWN0RVBOU185U3RydWN0dXJlRQotX19aTjNKU0MxM0Jvb2xlYW5PYmpl
Y3RDMkVSTlNfMTJKU0dsb2JhbERhdGFFUE5TXzlTdHJ1Y3R1cmVFCitfX1pOM0pTQzEzQm9vbGVh
bk9iamVjdEMyRVJOU18xMlZNRVBOU185U3RydWN0dXJlRQogX19aTjNKU0MxNU51bWJlclByb3Rv
dHlwZUMxRVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBOU185U3RydWN0dXJl
RQotX19aTjNKU0MxMk51bWJlck9iamVjdEMyRVJOU18xMkpTR2xvYmFsRGF0YUVQTlNfOVN0cnVj
dHVyZUUKK19fWk4zSlNDMTJOdW1iZXJPYmplY3RDMkVSTlNfMTJWTUVQTlNfOVN0cnVjdHVyZUUK
IF9fWk4zSlNDMTNEYXRlUHJvdG90eXBlQzFFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxP
YmplY3RFUE5TXzlTdHJ1Y3R1cmVFCiBfX1pOM0pTQzEyRGF0ZUluc3RhbmNlQzJFUE5TXzlFeGVj
U3RhdGVFUE5TXzlTdHJ1Y3R1cmVFCiBfX1pOM0pTQzEybm9uSW5saW5lTmFORXYKIF9fWk4zSlND
MTVSZWdFeHBQcm90b3R5cGVDMUVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQ
TlNfOVN0cnVjdHVyZUUKIF9fWk4zSlNDMTVSZWdFeHBQcm90b3R5cGVDMkVQTlNfOUV4ZWNTdGF0
ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0cnVjdHVyZUUKLV9fWk4zSlNDNlJlZ0V4cDZj
cmVhdGVFUE5TXzEySlNHbG9iYWxEYXRhRVJLTlNfN1VTdHJpbmdFTlNfMTFSZWdFeHBGbGFnc0UK
LV9fWk4zSlNDNlJlZ0V4cDdjb21waWxlRVBOU18xMkpTR2xvYmFsRGF0YUUKK19fWk4zSlNDNlJl
Z0V4cDZjcmVhdGVFUE5TXzEyVk1FUktOU183VVN0cmluZ0VOU18xMVJlZ0V4cEZsYWdzRQorX19a
TjNKU0M2UmVnRXhwN2NvbXBpbGVFUE5TXzEyVk1FCiBfX1pOM0pTQzRZYXJyMTFZYXJyUGF0dGVy
bkMxRVJLTlNfN1VTdHJpbmdFYmJQUEtjCiBfX1pOM0pTQzRZYXJyMTFZYXJyUGF0dGVybjdjb21w
aWxlRVJLTlNfN1VTdHJpbmdFCiBfX1pOM1dURjZWZWN0b3JJUE4zSlNDNFlhcnIxOFBhdHRlcm5B
bHRlcm5hdGl2ZUVMbTBFRTE0ZXhwYW5kQ2FwYWNpdHlFbQogX19aTjNKU0M0WWFycjZQYXJzZXJJ
TlMwXzIyWWFyclBhdHRlcm5Db25zdHJ1Y3RvckVFNXBhcnNlRXYKLV9fWk4zSlNDNFlhcnIxMGpp
dENvbXBpbGVFUk5TMF8xMVlhcnJQYXR0ZXJuRVBOU18xMkpTR2xvYmFsRGF0YUVSTlMwXzEzWWFy
ckNvZGVCbG9ja0UKK19fWk4zSlNDNFlhcnIxMGppdENvbXBpbGVFUk5TMF8xMVlhcnJQYXR0ZXJu
RVBOU18xMlZNRVJOUzBfMTNZYXJyQ29kZUJsb2NrRQogX19aTjNKU0M0WWFycjEzWWFyckdlbmVy
YXRvcjEzb3BDb21waWxlQm9keUVQTlMwXzE4UGF0dGVybkRpc2p1bmN0aW9uRQogX19aTjNXVEY2
VmVjdG9ySU4zSlNDMjJBYnN0cmFjdE1hY3JvQXNzZW1ibGVySU5TMV8xMlg4NkFzc2VtYmxlckVF
NEp1bXBFTG0xNkVFRDFFdgogX19aTjNKU0M0WWFycjEzWWFyckdlbmVyYXRvcjIwb3BDb21waWxl
QWx0ZXJuYXRpdmVFUE5TMF8xOFBhdHRlcm5BbHRlcm5hdGl2ZUUKQEAgLTI2OSw3ICsyNjksNyBA
QCBfX1pOM1dURjE1ZGVsZXRlQWxsVmFsdWVzSVBOM0pTQzRZYXJyMThQCiBfX1pOM1dURjE1ZGVs
ZXRlQWxsVmFsdWVzSVBOM0pTQzRZYXJyMTRDaGFyYWN0ZXJDbGFzc0VMbTBFRUV2UktOU182VmVj
dG9ySVRfWFQwX0VFRQogX19aTjNKU0MxNEVycm9yUHJvdG90eXBlQzFFUE5TXzlFeGVjU3RhdGVF
UE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1cmVFCiBfX1pOM0pTQzE0RXJyb3JQcm90
b3R5cGVDMkVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0cnVjdHVy
ZUUKLV9fWk4zSlNDMTNFcnJvckluc3RhbmNlQzJFUE5TXzEySlNHbG9iYWxEYXRhRVBOU185U3Ry
dWN0dXJlRQorX19aTjNKU0MxM0Vycm9ySW5zdGFuY2VDMkVQTlNfMTJWTUVQTlNfOVN0cnVjdHVy
ZUUKIF9fWk4zSlNDMTdPYmplY3RDb25zdHJ1Y3RvckMxRVBOU185RXhlY1N0YXRlRVBOU18xNEpT
R2xvYmFsT2JqZWN0RVBOU185U3RydWN0dXJlRVBOU18xNU9iamVjdFByb3RvdHlwZUUKIF9fWk4z
SlNDMTdPYmplY3RDb25zdHJ1Y3RvckMyRVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xvYmFsT2Jq
ZWN0RVBOU185U3RydWN0dXJlRVBOU18xNU9iamVjdFByb3RvdHlwZUUKIF9fWk4zSlNDMTBJZGVu
dGlmaWVyM2FkZEVQTlNfOUV4ZWNTdGF0ZUVQS2MKQEAgLTMwMyw4ICszMDMsOCBAQCBfX1pOM0pT
QzE5U21hbGxTdHJpbmdzU3RvcmFnZUMyRXYKIF9fWk4zSlNDMTBKU09OT2JqZWN0QzFFUE5TXzE0
SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1cmVFCiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3Qx
NmFkZFN0YXRpY0dsb2JhbHNFUE5TMF8xOEdsb2JhbFByb3BlcnR5SW5mb0VpCiBfX1pOM1dURjdI
YXNoTWFwSU5TXzZSZWZQdHJJTlNfMTBTdHJpbmdJbXBsRUVFTjNKU0MxNlN5bWJvbFRhYmxlRW50
cnlFTlM0XzE3SWRlbnRpZmllclJlcEhhc2hFTlNfMTBIYXNoVHJhaXRzSVMzX0VFTlM0XzI2U3lt
Ym9sVGFibGVJbmRleEhhc2hUcmFpdHNFRTNhZGRFUFMyX1JLUzVfCi1fX1pOM0pTQzlTdHJ1Y3R1
cmUyNWNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb25FUk5TXzEySlNHbG9iYWxEYXRhRVBTMF9OU183
SlNWYWx1ZUUKLV9fWk4zSlNDOVN0cnVjdHVyZTE3Y29weVByb3BlcnR5VGFibGVFUk5TXzEySlNH
bG9iYWxEYXRhRVBTMF8KK19fWk4zSlNDOVN0cnVjdHVyZTI1Y2hhbmdlUHJvdG90eXBlVHJhbnNp
dGlvbkVSTlNfMTJWTUVQUzBfTlNfN0pTVmFsdWVFCitfX1pOM0pTQzlTdHJ1Y3R1cmUxN2NvcHlQ
cm9wZXJ0eVRhYmxlRVJOU18xMlZNRVBTMF8KIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDEwZ2xv
YmFsRXhlY0V2CiBfSlNHbG9iYWxDb250ZXh0UmV0YWluCiBfX1pOM0pTQzE0TWFjaGluZVRocmVh
ZHMxNmFkZEN1cnJlbnRUaHJlYWRFdgpAQCAtMzE3LDcgKzMxNyw3IEBAIF9fWk5LMTRPcGFxdWVK
U1N0cmluZzd1c3RyaW5nRXYKIF9fWk4zSlNDN1VTdHJpbmdDMUVQS3RqCiBfX1pOM0pTQzEzTGl0
ZXJhbFBhcnNlcjVMZXhlcjNsZXhFUk5TMV8xOExpdGVyYWxQYXJzZXJUb2tlbkUKIF9fWk4zSlND
MTNMaXRlcmFsUGFyc2VyNXBhcnNlRU5TMF8xMVBhcnNlclN0YXRlRQotX19aTjNKU0M3SlNBcnJh
eUMxRVJOU18xMkpTR2xvYmFsRGF0YUVQTlNfOVN0cnVjdHVyZUUKK19fWk4zSlNDN0pTQXJyYXlD
MUVSTlNfMTJWTUVQTlNfOVN0cnVjdHVyZUUKIF9fWk4zV1RGMTNTdHJpbmdCdWlsZGVyNmFwcGVu
ZEVQS3RqCiBfX1pOM1dURjEzU3RyaW5nQnVpbGRlcjE5YXBwZW5kVW5pbml0aWFsaXplZEVqCiBf
X1pOM1dURjEzU3RyaW5nQnVpbGRlcjE0YWxsb2NhdGVCdWZmZXJFUEt0agpAQCAtMzQwLDggKzM0
MCw4IEBAIF9KU0NvbnRleHRHZXRHbG9iYWxPYmplY3QKIF9fWk5LM0pTQzhKU09iamVjdDEydG9U
aGlzT2JqZWN0RVBOU185RXhlY1N0YXRlRQogX0pTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
CiBfSlNPYmplY3RHZXRQcm9wZXJ0eQotX19aTksxNE9wYXF1ZUpTU3RyaW5nMTBpZGVudGlmaWVy
RVBOM0pTQzEySlNHbG9iYWxEYXRhRQotX19aTjNKU0MxMElkZW50aWZpZXIzYWRkRVBOU18xMkpT
R2xvYmFsRGF0YUVQS3RpCitfX1pOSzE0T3BhcXVlSlNTdHJpbmcxMGlkZW50aWZpZXJFUE4zSlND
MTJWTUUKK19fWk4zSlNDMTBJZGVudGlmaWVyM2FkZEVQTlNfMTJWTUVQS3RpCiBfX1pOM0pTQzE0
SlNHbG9iYWxPYmplY3QxOGdldE93blByb3BlcnR5U2xvdEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEw
SWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCiBfSlNWYWx1ZUlzSW5zdGFuY2VPZkNvbnN0
cnVjdG9yCiBfX1pOM0pTQzE2QXJyYXlDb25zdHJ1Y3RvcjE4Z2V0T3duUHJvcGVydHlTbG90RVBO
U185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJOU18xMlByb3BlcnR5U2xvdEUKQEAgLTM2
MCwxMCArMzYwLDEwIEBAIF9fWk4zSlNDNEhlYXA5dW5wcm90ZWN0RU5TXzdKU1ZhbHVlRQogX19a
TjNXVEY5SGFzaFRhYmxlSVBOM0pTQzZKU0NlbGxFU3Q0cGFpcklTM19qRU5TXzE4UGFpckZpcnN0
RXh0cmFjdG9ySVM1X0VFTlNfN1B0ckhhc2hJUzNfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEw
SGFzaFRyYWl0c0lTM19FRU5TQl9JakVFRUVTQ19FNGZpbmRJUzNfTlNfMjJJZGVudGl0eUhhc2hU
cmFuc2xhdG9ySVMzX1M1X1M5X0VFRUVOU18xN0hhc2hUYWJsZUl0ZXJhdG9ySVMzX1M1X1M3X1M5
X1NFX1NDX0VFUktUXwogX19aTjNXVEY5SGFzaFRhYmxlSVBOM0pTQzZKU0NlbGxFU3Q0cGFpcklT
M19qRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM1X0VFTlNfN1B0ckhhc2hJUzNfRUVOU18xNFBh
aXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTM19FRU5TQl9JakVFRUVTQ19FNnJlaGFzaEVp
CiBfX1pOM0pTQzEwSGFuZGxlSGVhcDRncm93RXYKLV9fWk4zSlNDMTJTbWFsbFN0cmluZ3MyN2Ny
ZWF0ZVNpbmdsZUNoYXJhY3RlclN0cmluZ0VQTlNfMTJKU0dsb2JhbERhdGFFaAorX19aTjNKU0Mx
MlNtYWxsU3RyaW5nczI3Y3JlYXRlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nRVBOU18xMlZNRWgKIF9f
Wk4zSlNDMzdEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrUGxhdGZvcm1EYXRhN3RyaWdnZXJFUDE2
X19DRlJ1bkxvb3BUaW1lclB2CiBfX1pOM0pTQzRIZWFwMTdjb2xsZWN0QWxsR2FyYmFnZUV2Ci1f
X1pOM0pTQzEySlNHbG9iYWxEYXRhMjNyZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc0V2CitfX1pOM0pT
QzEyVk0yM3JlY29tcGlsZUFsbEpTRnVuY3Rpb25zRXYKIF9fWk4zSlNDNEhlYXA1cmVzZXRFTlMw
XzExU3dlZXBUb2dnbGVFCiBfX1pOM0pTQzRIZWFwOW1hcmtSb290c0V2CiBfX1pOM0pTQzE0TWFj
aGluZVRocmVhZHMyM2dhdGhlckNvbnNlcnZhdGl2ZVJvb3RzRVJOU18xN0NvbnNlcnZhdGl2ZVJv
b3RzRVB2CkBAIC00MzksMjAgKzQzOSwyMCBAQCBfX1pOM1dURjZzdHJ0b2RFUEtjUFBjCiBfX1pO
M1dURjEwU3RyaW5nSW1wbDIyY29udGFpbnNPbmx5V2hpdGVzcGFjZUV2CiBfX1pOM1dURjEwU3Ry
aW5nSW1wbDExcmV2ZXJzZUZpbmRFUFMwX2oKIF9fWk4zV1RGMTdlcXVhbElnbm9yaW5nQ2FzZUVQ
TlNfMTBTdHJpbmdJbXBsRVMxXwotX19aTjNKU0MxMkpTR2xvYmFsRGF0YTEyY3JlYXRlTGVha2Vk
RU5TXzhIZWFwVHlwZUUKLV9fWk4zSlNDMjRKU09iamVjdFdpdGhHbG9iYWxPYmplY3RDMkVSTlNf
MTJKU0dsb2JhbERhdGFFUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1cmVFCitfX1pO
M0pTQzEyVk0xMmNyZWF0ZUxlYWtlZEVOU184SGVhcFR5cGVFCitfX1pOM0pTQzI0SlNPYmplY3RX
aXRoR2xvYmFsT2JqZWN0QzJFUk5TXzEyVk1FUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1
Y3R1cmVFCiBfX1pOM0pTQzhldmFsdWF0ZUVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRTY29wZUNoYWlu
Tm9kZUVSS05TXzEwU291cmNlQ29kZUVOU183SlNWYWx1ZUUKIF9fWk4zSlNDMTdQcm9ncmFtRXhl
Y3V0YWJsZUMxRVBOU185RXhlY1N0YXRlRVJLTlNfMTBTb3VyY2VDb2RlRQogX19aTjNKU0MxMUlu
dGVycHJldGVyN2V4ZWN1dGVFUE5TXzE3UHJvZ3JhbUV4ZWN1dGFibGVFUE5TXzlFeGVjU3RhdGVF
UE5TXzE0U2NvcGVDaGFpbk5vZGVFUE5TXzhKU09iamVjdEUKLV9fWk4zSlNDMjREeW5hbWljR2xv
YmFsT2JqZWN0U2NvcGVDMUVSTlNfMTJKU0dsb2JhbERhdGFFUE5TXzE0SlNHbG9iYWxPYmplY3RF
CitfX1pOM0pTQzI0RHluYW1pY0dsb2JhbE9iamVjdFNjb3BlQzFFUk5TXzEyVk1FUE5TXzE0SlNH
bG9iYWxPYmplY3RFCiBfX1pOM0pTQzE5RXhlY3V0YWJsZUFsbG9jYXRvcjE5dW5kZXJNZW1vcnlQ
cmVzc3VyZUV2Ci1fX1pOM0pTQzEySlNHbG9iYWxEYXRhMTRyZXNldERhdGVDYWNoZUV2CitfX1pO
M0pTQzEyVk0xNHJlc2V0RGF0ZUNhY2hlRXYKIF9fWk4zSlNDMTdQcm9ncmFtRXhlY3V0YWJsZTE1
Y29tcGlsZUludGVybmFsRVBOU185RXhlY1N0YXRlRVBOU18xNFNjb3BlQ2hhaW5Ob2RlRQogX19a
TjNKU0M2UGFyc2VyNXBhcnNlSU5TXzExUHJvZ3JhbU5vZGVFRUVOM1dURjEwUGFzc1JlZlB0cklU
X0VFUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzhEZWJ1Z2dlckVQTlNfOUV4ZWNTdGF0ZUVSS05T
XzEwU291cmNlQ29kZUVQTlNfMThGdW5jdGlvblBhcmFtZXRlcnNFTlNfMThKU1BhcnNlclN0cmlj
dG5lc3NFUFBOU184SlNPYmplY3RFCi1fX1pOM0pTQzZQYXJzZXI1cGFyc2VFUE5TXzEySlNHbG9i
YWxEYXRhRVBOU18xOEZ1bmN0aW9uUGFyYW1ldGVyc0VOU18xOEpTUGFyc2VyU3RyaWN0bmVzc0VO
U18xMkpTUGFyc2VyTW9kZUVQaVBOU183VVN0cmluZ0UKK19fWk4zSlNDNlBhcnNlcjVwYXJzZUVQ
TlNfMTJWTUVQTlNfMThGdW5jdGlvblBhcmFtZXRlcnNFTlNfMThKU1BhcnNlclN0cmljdG5lc3NF
TlNfMTJKU1BhcnNlck1vZGVFUGlQTlNfN1VTdHJpbmdFCiBfX1pOM0pTQzVMZXhlcjdzZXRDb2Rl
RVJLTlNfMTBTb3VyY2VDb2RlRVJOU18xMVBhcnNlckFyZW5hRQotX19aTjNKU0M3anNQYXJzZUVQ
TlNfMTJKU0dsb2JhbERhdGFFUE5TXzE4RnVuY3Rpb25QYXJhbWV0ZXJzRU5TXzE4SlNQYXJzZXJT
dHJpY3RuZXNzRU5TXzEySlNQYXJzZXJNb2RlRVBLTlNfMTBTb3VyY2VDb2RlRQotX19aTjNKU0M4
SlNQYXJzZXJDMkVQTlNfNUxleGVyRVBOU18xMkpTR2xvYmFsRGF0YUVQTlNfMThGdW5jdGlvblBh
cmFtZXRlcnNFYmJQTlNfMTRTb3VyY2VQcm92aWRlckUKK19fWk4zSlNDN2pzUGFyc2VFUE5TXzEy
Vk1FUE5TXzE4RnVuY3Rpb25QYXJhbWV0ZXJzRU5TXzE4SlNQYXJzZXJTdHJpY3RuZXNzRU5TXzEy
SlNQYXJzZXJNb2RlRVBLTlNfMTBTb3VyY2VDb2RlRQorX19aTjNKU0M4SlNQYXJzZXJDMkVQTlNf
NUxleGVyRVBOU18xMlZNRVBOU18xOEZ1bmN0aW9uUGFyYW1ldGVyc0ViYlBOU18xNFNvdXJjZVBy
b3ZpZGVyRQogX19aTjNKU0M4SlNQYXJzZXI5cHVzaFNjb3BlRXYKIF9fWk4zSlNDOEpTUGFyc2Vy
NG5leHRFTlNfNUxleGVyN0xleFR5cGVFCiBfX1pOM0pTQzVMZXhlcjNsZXhFUE5TXzExSlNUb2tl
bkRhdGFFUE5TXzExSlNUb2tlbkluZm9FTlMwXzdMZXhUeXBlRWIKQEAgLTQ2NCw4ICs0NjQsOCBA
QCBfX1pOM0pTQzhKU1BhcnNlcjE0cGFyc2VTdGF0ZW1lbnRJTlNfMTBBCiBfX1pOM0pTQzZQYXJz
ZXIxNmRpZEZpbmlzaFBhcnNpbmdFUE5TXzE0U291cmNlRWxlbWVudHNFUE5TXzE1UGFyc2VyQXJl
bmFEYXRhSU4zV1RGNlZlY3RvcklTdDRwYWlySVBLTlNfMTBJZGVudGlmaWVyRWpFTG0wRUVFRUVQ
TlMzX0lOUzVfSVBOU18xNkZ1bmN0aW9uQm9keU5vZGVFTG0wRUVFRUVqaWlSTlM0XzdIYXNoU2V0
SU5TNF82UmVmUHRySU5TNF8xMFN0cmluZ0ltcGxFRUVOU18xN0lkZW50aWZpZXJSZXBIYXNoRU5T
NF8xMEhhc2hUcmFpdHNJU01fRUVFRQogX19aTjNKU0MxMVBhcnNlckFyZW5hRDFFdgogX19aTjNK
U0M1TGV4ZXI1Y2xlYXJFdgotX19aTjNKU0MxMVByb2dyYW1Ob2RlNmNyZWF0ZUVQTlNfMTJKU0ds
b2JhbERhdGFFUE5TXzE0U291cmNlRWxlbWVudHNFUE4zV1RGNlZlY3RvcklTdDRwYWlySVBLTlNf
MTBJZGVudGlmaWVyRWpFTG0wRUVFUE5TNl9JUE5TXzE2RnVuY3Rpb25Cb2R5Tm9kZUVMbTBFRUVS
TlM1XzdIYXNoU2V0SU5TNV82UmVmUHRySU5TNV8xMFN0cmluZ0ltcGxFRUVOU18xN0lkZW50aWZp
ZXJSZXBIYXNoRU5TNV8xMEhhc2hUcmFpdHNJU0xfRUVFRVJLTlNfMTBTb3VyY2VDb2RlRWppCi1f
X1pOM0pTQzlTY29wZU5vZGVDMkVQTlNfMTJKU0dsb2JhbERhdGFFUktOU18xMFNvdXJjZUNvZGVF
UE5TXzE0U291cmNlRWxlbWVudHNFUE4zV1RGNlZlY3RvcklTdDRwYWlySVBLTlNfMTBJZGVudGlm
aWVyRWpFTG0wRUVFUE5TOV9JUE5TXzE2RnVuY3Rpb25Cb2R5Tm9kZUVMbTBFRUVSTlM4XzdIYXNo
U2V0SU5TOF82UmVmUHRySU5TOF8xMFN0cmluZ0ltcGxFRUVOU18xN0lkZW50aWZpZXJSZXBIYXNo
RU5TOF8xMEhhc2hUcmFpdHNJU09fRUVFRWppCitfX1pOM0pTQzExUHJvZ3JhbU5vZGU2Y3JlYXRl
RVBOU18xMlZNRVBOU18xNFNvdXJjZUVsZW1lbnRzRVBOM1dURjZWZWN0b3JJU3Q0cGFpcklQS05T
XzEwSWRlbnRpZmllckVqRUxtMEVFRVBOUzZfSVBOU18xNkZ1bmN0aW9uQm9keU5vZGVFTG0wRUVF
Uk5TNV83SGFzaFNldElOUzVfNlJlZlB0cklOUzVfMTBTdHJpbmdJbXBsRUVFTlNfMTdJZGVudGlm
aWVyUmVwSGFzaEVOUzVfMTBIYXNoVHJhaXRzSVNMX0VFRUVSS05TXzEwU291cmNlQ29kZUVqaQor
X19aTjNKU0M5U2NvcGVOb2RlQzJFUE5TXzEyVk1FUktOU18xMFNvdXJjZUNvZGVFUE5TXzE0U291
cmNlRWxlbWVudHNFUE4zV1RGNlZlY3RvcklTdDRwYWlySVBLTlNfMTBJZGVudGlmaWVyRWpFTG0w
RUVFUE5TOV9JUE5TXzE2RnVuY3Rpb25Cb2R5Tm9kZUVMbTBFRUVSTlM4XzdIYXNoU2V0SU5TOF82
UmVmUHRySU5TOF8xMFN0cmluZ0ltcGxFRUVOU18xN0lkZW50aWZpZXJSZXBIYXNoRU5TOF8xMEhh
c2hUcmFpdHNJU09fRUVFRWppCiBfX1pOM0pTQzExUGFyc2VyQXJlbmExNGRlcmVmV2l0aEFyZW5h
RU4zV1RGMTBQYXNzUmVmUHRySU5TXzIxUGFyc2VyQXJlbmFSZWZDb3VudGVkRUVFCiBfX1pOM0pT
QzExUGFyc2VyQXJlbmExMHJlbW92ZUxhc3RFdgogX19aTjNKU0MxMVBhcnNlckFyZW5hNXJlc2V0
RXYKQEAgLTUxNCw3ICs1MTQsNyBAQCBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxM2NvcHlHbG9i
YWxzVG9FCiBfX1pOM0pTQzEySlNTdGFjazE1c2V0R2xvYmFsT2JqZWN0RVBOU18xNEpTR2xvYmFs
T2JqZWN0RQogX2N0aVRyYW1wb2xpbmUKIF9fWk4zV1RGMTVTZWdtZW50ZWRWZWN0b3JJTjNKU0Mx
MElkZW50aWZpZXJFTG02NEVFNmFwcGVuZElTMl9FRXZSS1RfCi1fX1pOSzNKU0M5SGFzaFRhYmxl
MTFjcmVhdGVUYWJsZUVQTlNfMTJKU0dsb2JhbERhdGFFCitfX1pOSzNKU0M5SGFzaFRhYmxlMTFj
cmVhdGVUYWJsZUVQTlNfMTJWTUUKIF9fWk4zSlNDOEpTUGFyc2VyMzFwYXJzZUV4cHJlc3Npb25P
ckxhYmVsU3RhdGVtZW50SU5TXzEwQVNUQnVpbGRlckVFRU5UXzlTdGF0ZW1lbnRFUlMzXwogX19a
TjNKU0M1TGV4ZXIxNm5leHRUb2tlbklzQ29sb25FdgogX19aTjNKU0M4SlNQYXJzZXIxNXBhcnNl
RXhwcmVzc2lvbklOU18xMEFTVEJ1aWxkZXJFRUVOVF8xMEV4cHJlc3Npb25FUlMzXwpAQCAtNTYw
LDkgKzU2MCw5IEBAIF9fWk4zSlNDMjhjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yRVAKIF9f
Wk4zSlNDMTFtYWtlVVN0cmluZ0lQS2NOU183VVN0cmluZ0VFRVMzX1RfVDBfCiBfX1pOM1dURjEz
dHJ5TWFrZVN0cmluZ0lQS2NOM0pTQzdVU3RyaW5nRUVFTlNfMTBQYXNzUmVmUHRySU5TXzEwU3Ry
aW5nSW1wbEVFRVRfVDBfCiBfX1pOM0pTQzIwY3JlYXRlUmVmZXJlbmNlRXJyb3JFUE5TXzlFeGVj
U3RhdGVFUktOU183VVN0cmluZ0UKLV9fWk4zSlNDMTNFcnJvckluc3RhbmNlNmNyZWF0ZUVQTlNf
MTJKU0dsb2JhbERhdGFFUE5TXzlTdHJ1Y3R1cmVFUktOU183VVN0cmluZ0UKLV9fWk4zSlNDMTNF
cnJvckluc3RhbmNlQzJFUE5TXzEySlNHbG9iYWxEYXRhRVBOU185U3RydWN0dXJlRVJLTlNfN1VT
dHJpbmdFCi1fX1pOM0pTQ0wyM3JldHVyblRvVGhyb3dUcmFtcG9saW5lRVBOU18xMkpTR2xvYmFs
RGF0YUVOU18xNlJldHVybkFkZHJlc3NQdHJFUlMyXworX19aTjNKU0MxM0Vycm9ySW5zdGFuY2U2
Y3JlYXRlRVBOU18xMlZNRVBOU185U3RydWN0dXJlRVJLTlNfN1VTdHJpbmdFCitfX1pOM0pTQzEz
RXJyb3JJbnN0YW5jZUMyRVBOU18xMlZNRVBOU185U3RydWN0dXJlRVJLTlNfN1VTdHJpbmdFCitf
X1pOM0pTQ0wyM3JldHVyblRvVGhyb3dUcmFtcG9saW5lRVBOU18xMlZNRU5TXzE2UmV0dXJuQWRk
cmVzc1B0ckVSUzJfCiBfY3RpVk1UaHJvd1RyYW1wb2xpbmUKIF9jdGlfdm1fdGhyb3cKIF9fWk4z
SlNDMTFJbnRlcnByZXRlcjE0dGhyb3dFeGNlcHRpb25FUlBOU185RXhlY1N0YXRlRVJOU183SlNW
YWx1ZUVqCkBAIC02MTEsMTQgKzYxMSwxNCBAQCBfX1pOM0pTQzlBcnJheU5vZGUxMmVtaXRCeXRl
Y29kZUVSTlNfMTdCCiBfX1pOM0pTQzE3Qnl0ZWNvZGVHZW5lcmF0b3IxMmVtaXROZXdBcnJheUVQ
TlNfMTBSZWdpc3RlcklERVBOU18xMUVsZW1lbnROb2RlRQogX19aTjNKU0MzSklUMTdlbWl0X29w
X25ld19hcnJheUVQTlNfMTFJbnN0cnVjdGlvbkUKIF9jdGlfb3BfbmV3X2FycmF5Ci1fX1pOM0pT
QzdKU0FycmF5QzFFUk5TXzEySlNHbG9iYWxEYXRhRVBOU185U3RydWN0dXJlRVJLTlNfN0FyZ0xp
c3RFCitfX1pOM0pTQzdKU0FycmF5QzFFUk5TXzEyVk1FUE5TXzlTdHJ1Y3R1cmVFUktOU183QXJn
TGlzdEUKIF9fWk4zSlNDOEpTUGFyc2VyMTdwYXJzZUZ1bmN0aW9uSW5mb0lMTlMwXzIwRnVuY3Rp
b25SZXF1aXJlbWVudHNFMEVMYjBFTlNfMTBBU1RCdWlsZGVyRUVFYlJUMV9SUEtOU18xMElkZW50
aWZpZXJFUk5TNF8xOUZvcm1hbFBhcmFtZXRlckxpc3RFUk5TNF8xMkZ1bmN0aW9uQm9keUVSaVNF
X1NFXwogX19aTjNKU0M4SlNQYXJzZXIxOXBhcnNlU291cmNlRWxlbWVudHNJTE5TMF8xOFNvdXJj
ZUVsZW1lbnRzTW9kZUUwRU5TXzEzU3ludGF4Q2hlY2tlckVFRU5UMF8xNFNvdXJjZUVsZW1lbnRz
RVJTNF8KIF9fWk4zSlNDOEpTUGFyc2VyMTRwYXJzZVN0YXRlbWVudElOU18xM1N5bnRheENoZWNr
ZXJFRUVOVF85U3RhdGVtZW50RVJTM19SUEtOU18xMElkZW50aWZpZXJFCiBfX1pOM0pTQzhKU1Bh
cnNlcjE1cGFyc2VFeHByZXNzaW9uSU5TXzEzU3ludGF4Q2hlY2tlckVFRU5UXzEwRXhwcmVzc2lv
bkVSUzNfCiBfX1pOM0pTQzhKU1BhcnNlcjI1cGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbklOU18x
M1N5bnRheENoZWNrZXJFRUVOVF8xMEV4cHJlc3Npb25FUlMzXwogX19aTjNKU0M4SlNQYXJzZXIy
MXBhcnNlTWVtYmVyRXhwcmVzc2lvbklOU18xM1N5bnRheENoZWNrZXJFRUVOVF8xMEV4cHJlc3Np
b25FUlMzXwotX19aTjNKU0MxNkZ1bmN0aW9uQm9keU5vZGU2Y3JlYXRlRVBOU18xMkpTR2xvYmFs
RGF0YUViCitfX1pOM0pTQzE2RnVuY3Rpb25Cb2R5Tm9kZTZjcmVhdGVFUE5TXzEyVk1FYgogX19a
TjNKU0M4SlNQYXJzZXI1U2NvcGVEMUV2CiBfX1pOM0pTQzVMZXhlcjEwc291cmNlQ29kZUVpaWkK
IF9fWk4zSlNDMTZGdW5jdGlvbkJvZHlOb2RlMTNmaW5pc2hQYXJzaW5nRVJLTlNfMTBTb3VyY2VD
b2RlRVBOU18xM1BhcmFtZXRlck5vZGVFUktOU18xMElkZW50aWZpZXJFCkBAIC02MjgsNyArNjI4
LDcgQEAgX19aTkszSlNDMTRFeHByZXNzaW9uTm9kZTEwaXNMb2NhdGlvbkV2CiBfX1pOM0pTQzIx
RnVuY3Rpb25DYWxsVmFsdWVOb2RlMTJlbWl0Qnl0ZWNvZGVFUk5TXzE3Qnl0ZWNvZGVHZW5lcmF0
b3JFUE5TXzEwUmVnaXN0ZXJJREUKIF9fWk4zSlNDMTJGdW5jRXhwck5vZGUxMmVtaXRCeXRlY29k
ZUVSTlNfMTdCeXRlY29kZUdlbmVyYXRvckVQTlNfMTBSZWdpc3RlcklERQogX19aTjNKU0MxN0J5
dGVjb2RlR2VuZXJhdG9yMjVlbWl0TmV3RnVuY3Rpb25FeHByZXNzaW9uRVBOU18xMFJlZ2lzdGVy
SURFUE5TXzEyRnVuY0V4cHJOb2RlRQotX19aTjNKU0MxOEZ1bmN0aW9uRXhlY3V0YWJsZUMxRVBO
U18xMkpTR2xvYmFsRGF0YUVSS05TXzEwSWRlbnRpZmllckVSS05TXzEwU291cmNlQ29kZUViUE5T
XzE4RnVuY3Rpb25QYXJhbWV0ZXJzRWJpaQorX19aTjNKU0MxOEZ1bmN0aW9uRXhlY3V0YWJsZUMx
RVBOU18xMlZNRVJLTlNfMTBJZGVudGlmaWVyRVJLTlNfMTBTb3VyY2VDb2RlRWJQTlNfMThGdW5j
dGlvblBhcmFtZXRlcnNFYmlpCiBfX1pOM1dURjZWZWN0b3JJTjNKU0MxMldyaXRlQmFycmllcklO
UzFfMThGdW5jdGlvbkV4ZWN1dGFibGVFRUVMbTBFRTE0ZXhwYW5kQ2FwYWNpdHlFbQogX19aTjNK
U0MxN0J5dGVjb2RlR2VuZXJhdG9yOGVtaXRDYWxsRVBOU18xMFJlZ2lzdGVySURFUzJfUk5TXzEz
Q2FsbEFyZ3VtZW50c0VqamoKIF9fWk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvcjhlbWl0Q2FsbEVO
U184T3Bjb2RlSURFUE5TXzEwUmVnaXN0ZXJJREVTM19STlNfMTNDYWxsQXJndW1lbnRzRWpqagpA
QCAtNjQ1LDcgKzY0NSw3IEBAIF9fWk4zSlNDMThGdW5jdGlvbkV4ZWN1dGFibGUyMmNvbXBpbGVG
b3IKIF9fWk4zSlNDNlBhcnNlcjVwYXJzZUlOU18xNkZ1bmN0aW9uQm9keU5vZGVFRUVOM1dURjEw
UGFzc1JlZlB0cklUX0VFUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzhEZWJ1Z2dlckVQTlNfOUV4
ZWNTdGF0ZUVSS05TXzEwU291cmNlQ29kZUVQTlNfMThGdW5jdGlvblBhcmFtZXRlcnNFTlNfMThK
U1BhcnNlclN0cmljdG5lc3NFUFBOU184SlNPYmplY3RFCiBfX1pOM0pTQzhKU1BhcnNlcjE5cGFy
c2VTb3VyY2VFbGVtZW50c0lMTlMwXzE4U291cmNlRWxlbWVudHNNb2RlRTFFTlNfMTBBU1RCdWls
ZGVyRUVFTlQwXzE0U291cmNlRWxlbWVudHNFUlM0XwogX19aTjNKU0M4SlNQYXJzZXIxOXBhcnNl
VGhyb3dTdGF0ZW1lbnRJTlNfMTBBU1RCdWlsZGVyRUVFTlRfOVN0YXRlbWVudEVSUzNfCi1fX1pO
M0pTQzE2RnVuY3Rpb25Cb2R5Tm9kZTZjcmVhdGVFUE5TXzEySlNHbG9iYWxEYXRhRVBOU18xNFNv
dXJjZUVsZW1lbnRzRVBOM1dURjZWZWN0b3JJU3Q0cGFpcklQS05TXzEwSWRlbnRpZmllckVqRUxt
MEVFRVBOUzZfSVBTMF9MbTBFRUVSTlM1XzdIYXNoU2V0SU5TNV82UmVmUHRySU5TNV8xMFN0cmlu
Z0ltcGxFRUVOU18xN0lkZW50aWZpZXJSZXBIYXNoRU5TNV8xMEhhc2hUcmFpdHNJU0tfRUVFRVJL
TlNfMTBTb3VyY2VDb2RlRWppCitfX1pOM0pTQzE2RnVuY3Rpb25Cb2R5Tm9kZTZjcmVhdGVFUE5T
XzEyVk1FUE5TXzE0U291cmNlRWxlbWVudHNFUE4zV1RGNlZlY3RvcklTdDRwYWlySVBLTlNfMTBJ
ZGVudGlmaWVyRWpFTG0wRUVFUE5TNl9JUFMwX0xtMEVFRVJOUzVfN0hhc2hTZXRJTlM1XzZSZWZQ
dHJJTlM1XzEwU3RyaW5nSW1wbEVFRU5TXzE3SWRlbnRpZmllclJlcEhhc2hFTlM1XzEwSGFzaFRy
YWl0c0lTS19FRUVFUktOU18xMFNvdXJjZUNvZGVFamkKIF9fWk4zSlNDMTdCeXRlY29kZUdlbmVy
YXRvckMxRVBOU18xNkZ1bmN0aW9uQm9keU5vZGVFUE5TXzE0U2NvcGVDaGFpbk5vZGVFUE4zV1RG
N0hhc2hNYXBJTlM1XzZSZWZQdHJJTlM1XzEwU3RyaW5nSW1wbEVFRU5TXzE2U3ltYm9sVGFibGVF
bnRyeUVOU18xN0lkZW50aWZpZXJSZXBIYXNoRU5TNV8xMEhhc2hUcmFpdHNJUzlfRUVOU18yNlN5
bWJvbFRhYmxlSW5kZXhIYXNoVHJhaXRzRUVFUE5TXzlDb2RlQmxvY2tFCiBfX1pOM0pTQzE3Qnl0
ZWNvZGVHZW5lcmF0b3JDMkVQTlNfMTZGdW5jdGlvbkJvZHlOb2RlRVBOU18xNFNjb3BlQ2hhaW5O
b2RlRVBOM1dURjdIYXNoTWFwSU5TNV82UmVmUHRySU5TNV8xMFN0cmluZ0ltcGxFRUVOU18xNlN5
bWJvbFRhYmxlRW50cnlFTlNfMTdJZGVudGlmaWVyUmVwSGFzaEVOUzVfMTBIYXNoVHJhaXRzSVM5
X0VFTlNfMjZTeW1ib2xUYWJsZUluZGV4SGFzaFRyYWl0c0VFRVBOU185Q29kZUJsb2NrRQogX19a
TjNXVEYxNVNlZ21lbnRlZFZlY3RvcklOM0pTQzEwUmVnaXN0ZXJJREVMbTMyRUVDMUV2CkBAIC02
NjEsNyArNjYxLDcgQEAgX19aTjNKU0MxMUpJVFN0dWJDYWxsMTFhZGRBcmd1bWVudEVqTlNfMQog
X19aTjNKU0MzSklUMTFlbWl0X29wX3JldEVQTlNfMTFJbnN0cnVjdGlvbkUKIF9jdGlfb3BfdGhy
b3cKIF9fWk5LM0pTQzhKU1N0cmluZzh0b09iamVjdEVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0ds
b2JhbE9iamVjdEUKLV9fWk4zSlNDMTJTdHJpbmdPYmplY3RDMUVSTlNfMTJKU0dsb2JhbERhdGFF
UE5TXzlTdHJ1Y3R1cmVFUE5TXzhKU1N0cmluZ0UKK19fWk4zSlNDMTJTdHJpbmdPYmplY3RDMUVS
TlNfMTJWTUVQTlNfOVN0cnVjdHVyZUVQTlNfOEpTU3RyaW5nRQogX19aTjNKU0MxMlN0cmluZ09i
amVjdDE4Z2V0T3duUHJvcGVydHlTbG90RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVy
RVJOU18xMlByb3BlcnR5U2xvdEUKIF9fWk4zSlNDMTVTdHJpbmdQcm90b3R5cGUxOGdldE93blBy
b3BlcnR5U2xvdEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0
eVNsb3RFCiBfX1pOM0pTQzE3Qnl0ZWNvZGVHZW5lcmF0b3I4ZW1pdE1vdmVFUE5TXzEwUmVnaXN0
ZXJJREVTMl8KQEAgLTcwMyw3ICs3MDMsNyBAQCBfX1pOM0pTQzE2SlNDYWxsYmFja09iamVjdElO
U18yNEpTT2JqZWN0CiBfX1pOMTNPcGFxdWVKU0NsYXNzOXByb3RvdHlwZUVQTjNKU0M5RXhlY1N0
YXRlRQogX19aTjEzT3BhcXVlSlNDbGFzczExY29udGV4dERhdGFFUE4zSlNDOUV4ZWNTdGF0ZUUK
IF9fWk4zV1RGOUhhc2hUYWJsZUlQMTNPcGFxdWVKU0NsYXNzU3Q0cGFpcklTMl9QMjRPcGFxdWVK
U0NsYXNzQ29udGV4dERhdGFFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzZfRUVOU183UHRySGFz
aElTMl9FRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMyX0VFTlNDX0lTNV9F
RUVFU0RfRTZleHBhbmRFdgotX19aTjI0T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhQzJFUk4zSlND
MTJKU0dsb2JhbERhdGFFUDEzT3BhcXVlSlNDbGFzcworX19aTjI0T3BhcXVlSlNDbGFzc0NvbnRl
eHREYXRhQzJFUk4zSlNDMTJWTUVQMTNPcGFxdWVKU0NsYXNzCiBfSlNDbGFzc1JlbGVhc2UKIF9K
U09iamVjdFNldFByb3BlcnR5CiBfX1pOSzNKU0M4SlNPYmplY3QxMWhhc1Byb3BlcnR5RVBOU185
RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRQpAQCAtNzc0LDcgKzc3NCw3IEBAIF9fWk4zV1RG
NlZlY3RvcklOU182UmVmUHRySU5TXzEwU3RyaW5nSW0KIF9fWk4zSlNDMTlTb3VyY2VQcm92aWRl
ckNhY2hlM2FkZEVpTjNXVEYxMFBhc3NPd25QdHJJTlNfMjNTb3VyY2VQcm92aWRlckNhY2hlSXRl
bUVFRWoKIF9fWk4zV1RGOUhhc2hUYWJsZUlpU3Q0cGFpcklpUE4zSlNDMjNTb3VyY2VQcm92aWRl
ckNhY2hlSXRlbUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzVfRUVOU183SW50SGFzaElqRUVO
U18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lpRUVOU0JfSVM0X0VFRUVTQ19FNmV4
cGFuZEV2CiBfX1pOM1dURjZWZWN0b3JJUE4zSlNDMTZGdW5jdGlvbkJvZHlOb2RlRUxtMEVFMTVy
ZXNlcnZlQ2FwYWNpdHlFbQotX19aTjNKU0M4SlNPYmplY3QxMnJlbW92ZURpcmVjdEVSTlNfMTJK
U0dsb2JhbERhdGFFUktOU18xMElkZW50aWZpZXJFCitfX1pOM0pTQzhKU09iamVjdDEycmVtb3Zl
RGlyZWN0RVJOU18xMlZNRVJLTlNfMTBJZGVudGlmaWVyRQogX19aTjNXVEY5SGFzaFRhYmxlSU5T
XzZSZWZQdHJJTlNfMTBTdHJpbmdJbXBsRUVFU3Q0cGFpcklTM19OM0pTQzE2U3ltYm9sVGFibGVF
bnRyeUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzdfRUVOUzVfMTdJZGVudGlmaWVyUmVwSGFz
aEVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTM19FRU5TNV8yNlN5bWJvbFRh
YmxlSW5kZXhIYXNoVHJhaXRzRUVFU0RfRTEzaXNFbXB0eUJ1Y2tldEVSS1M3XwogX19aTjNXVEY5
SGFzaFRhYmxlSU5TXzZSZWZQdHJJTlNfMTBTdHJpbmdJbXBsRUVFU3Q0cGFpcklTM19OM0pTQzE2
U3ltYm9sVGFibGVFbnRyeUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzdfRUVOUzVfMTdJZGVu
dGlmaWVyUmVwSGFzaEVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTM19FRU5T
NV8yNlN5bWJvbFRhYmxlSW5kZXhIYXNoVHJhaXRzRUVFU0RfRTZleHBhbmRFdgogX19aTjNXVEY5
SGFzaFRhYmxlSU5TXzZSZWZQdHJJTlNfMTBTdHJpbmdJbXBsRUVFU3Q0cGFpcklTM19OM0pTQzE2
U3ltYm9sVGFibGVFbnRyeUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzdfRUVOUzVfMTdJZGVu
dGlmaWVyUmVwSGFzaEVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTM19FRU5T
NV8yNlN5bWJvbFRhYmxlSW5kZXhIYXNoVHJhaXRzRUVFU0RfRTZyZWhhc2hFaQpAQCAtNzkyLDcg
Kzc5Miw3IEBAIF9fWk5LM0pTQzIxVVN0cmluZ1NvdXJjZVByb3ZpZGVyNGRhdGFFdgogX19aTjNK
U0M4SlNQYXJzZXIxNmRlY2xhcmVQYXJhbWV0ZXJFUEtOU18xMElkZW50aWZpZXJFCiBfX1pOM1dU
RjZWZWN0b3JJTjNKU0MxMElkZW50aWZpZXJFTG0wRUUxNGV4cGFuZENhcGFjaXR5RW0KIF9fWk4z
SlNDMTBKU0Z1bmN0aW9uMThnZXRPd25Qcm9wZXJ0eVNsb3RFUE5TXzlFeGVjU3RhdGVFUktOU18x
MElkZW50aWZpZXJFUk5TXzEyUHJvcGVydHlTbG90RQotX19aTjNKU0M5U3RydWN0dXJlMjJtYXRl
cmlhbGl6ZVByb3BlcnR5TWFwRVJOU18xMkpTR2xvYmFsRGF0YUUKK19fWk4zSlNDOVN0cnVjdHVy
ZTIybWF0ZXJpYWxpemVQcm9wZXJ0eU1hcEVSTlNfMTJWTUUKIF9fWk5LM0pTQzExUmVzb2x2ZU5v
ZGUxMGlzTG9jYXRpb25FdgogX19aTkszSlNDMTFSZXNvbHZlTm9kZTEzaXNSZXNvbHZlTm9kZUV2
CiBfX1pOM0pTQzE3Qnl0ZWNvZGVHZW5lcmF0b3IxMmFkZFBhcmFtZXRlckVSS05TXzEwSWRlbnRp
ZmllckVpCkBAIC04OTQsOSArODk0LDkgQEAgX19aTjNKU0MzSklUMTVlbWl0X29wX3ByZV9pbmNF
UE5TXzExSW5zdAogX19aTjNKU0MzSklUMTZlbWl0VGltZW91dENoZWNrRXYKIF9fWk4zSlNDM0pJ
VDEzZW1pdF9vcF9qbGVzc0VQTlNfMTFJbnN0cnVjdGlvbkUKIF9fWk4zSlNDM0pJVDIyZW1pdFNs
b3dfb3BfZ2V0X2J5X3ZhbEVQTlNfMTFJbnN0cnVjdGlvbkVSUE5TXzEzU2xvd0Nhc2VFbnRyeUUK
LV9fWk4zSlNDOUpJVFRodW5rczdjdGlTdHViRVBOU18xMkpTR2xvYmFsRGF0YUVQRk5TXzIxTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyRVMyX1BOU18xNEV4ZWN1dGFibGVQb29sRUUKLV9fWk4zV1RGOUhh
c2hUYWJsZUlQRk4zSlNDMjFNYWNyb0Fzc2VtYmxlckNvZGVQdHJFUE5TMV8xMkpTR2xvYmFsRGF0
YUVQTlMxXzE0RXhlY3V0YWJsZVBvb2xFRVN0NHBhaXJJUzhfUzJfRU5TXzE4UGFpckZpcnN0RXh0
cmFjdG9ySVNBX0VFTlNfN1B0ckhhc2hJUzhfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFz
aFRyYWl0c0lTOF9FRU5TR19JUzJfRUVFRVNIX0U2ZXhwYW5kRXYKLV9fWk4zSlNDM0pJVDI3c3Ry
aW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yRVBOU18xMkpTR2xvYmFsRGF0YUVQTlNfMTRFeGVjdXRh
YmxlUG9vbEUKK19fWk4zSlNDOUpJVFRodW5rczdjdGlTdHViRVBOU18xMlZNRVBGTlNfMjFNYWNy
b0Fzc2VtYmxlckNvZGVQdHJFUzJfUE5TXzE0RXhlY3V0YWJsZVBvb2xFRQorX19aTjNXVEY5SGFz
aFRhYmxlSVBGTjNKU0MyMU1hY3JvQXNzZW1ibGVyQ29kZVB0ckVQTlMxXzEyVk1FUE5TMV8xNEV4
ZWN1dGFibGVQb29sRUVTdDRwYWlySVM4X1MyX0VOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTQV9F
RU5TXzdQdHJIYXNoSVM4X0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzhf
RUVOU0dfSVMyX0VFRUVTSF9FNmV4cGFuZEV2CitfX1pOM0pTQzNKSVQyN3N0cmluZ0dldEJ5VmFs
U3R1YkdlbmVyYXRvckVQTlNfMTJWTUVQTlNfMTRFeGVjdXRhYmxlUG9vbEUKIF9fWk4zSlNDMjFy
b3VuZFVwQWxsb2NhdGlvblNpemVFbW0KIF9fWk4zSlNDM0pJVDE5ZW1pdFNsb3dfb3BfcHJlX2lu
Y0VQTlNfMTFJbnN0cnVjdGlvbkVSUE5TXzEzU2xvd0Nhc2VFbnRyeUUKIF9fWk4zSlNDM0pJVDE3
ZW1pdFNsb3dfb3Bfamxlc3NFUE5TXzExSW5zdHJ1Y3Rpb25FUlBOU18xM1Nsb3dDYXNlRW50cnlF
CkBAIC05ODEsNyArOTgxLDcgQEAgX19aTjNKU0MxMUludGVycHJldGVyOGNhbGxFdmFsRVBOU185
RXhlYwogX19aTjNKU0MxNEV2YWxFeGVjdXRhYmxlQzFFUE5TXzlFeGVjU3RhdGVFUktOU18xMFNv
dXJjZUNvZGVFYgogX19aTjNKU0MxNEV2YWxFeGVjdXRhYmxlMTVjb21waWxlSW50ZXJuYWxFUE5T
XzlFeGVjU3RhdGVFUE5TXzE0U2NvcGVDaGFpbk5vZGVFCiBfX1pOM0pTQzZQYXJzZXI1cGFyc2VJ
TlNfOEV2YWxOb2RlRUVFTjNXVEYxMFBhc3NSZWZQdHJJVF9FRVBOU18xNEpTR2xvYmFsT2JqZWN0
RVBOU184RGVidWdnZXJFUE5TXzlFeGVjU3RhdGVFUktOU18xMFNvdXJjZUNvZGVFUE5TXzE4RnVu
Y3Rpb25QYXJhbWV0ZXJzRU5TXzE4SlNQYXJzZXJTdHJpY3RuZXNzRVBQTlNfOEpTT2JqZWN0RQot
X19aTjNKU0M4RXZhbE5vZGU2Y3JlYXRlRVBOU18xMkpTR2xvYmFsRGF0YUVQTlNfMTRTb3VyY2VF
bGVtZW50c0VQTjNXVEY2VmVjdG9ySVN0NHBhaXJJUEtOU18xMElkZW50aWZpZXJFakVMbTBFRUVQ
TlM2X0lQTlNfMTZGdW5jdGlvbkJvZHlOb2RlRUxtMEVFRVJOUzVfN0hhc2hTZXRJTlM1XzZSZWZQ
dHJJTlM1XzEwU3RyaW5nSW1wbEVFRU5TXzE3SWRlbnRpZmllclJlcEhhc2hFTlM1XzEwSGFzaFRy
YWl0c0lTTF9FRUVFUktOU18xMFNvdXJjZUNvZGVFamkKK19fWk4zSlNDOEV2YWxOb2RlNmNyZWF0
ZUVQTlNfMTJWTUVQTlNfMTRTb3VyY2VFbGVtZW50c0VQTjNXVEY2VmVjdG9ySVN0NHBhaXJJUEtO
U18xMElkZW50aWZpZXJFakVMbTBFRUVQTlM2X0lQTlNfMTZGdW5jdGlvbkJvZHlOb2RlRUxtMEVF
RVJOUzVfN0hhc2hTZXRJTlM1XzZSZWZQdHJJTlM1XzEwU3RyaW5nSW1wbEVFRU5TXzE3SWRlbnRp
ZmllclJlcEhhc2hFTlM1XzEwSGFzaFRyYWl0c0lTTF9FRUVFUktOU18xMFNvdXJjZUNvZGVFamkK
IF9fWk4zSlNDMTRTY29wZUNoYWluTm9kZTEwbG9jYWxEZXB0aEV2CiBfX1pOM0pTQzE3Qnl0ZWNv
ZGVHZW5lcmF0b3JDMUVQTlNfOEV2YWxOb2RlRVBOU18xNFNjb3BlQ2hhaW5Ob2RlRVBOM1dURjdI
YXNoTWFwSU5TNV82UmVmUHRySU5TNV8xMFN0cmluZ0ltcGxFRUVOU18xNlN5bWJvbFRhYmxlRW50
cnlFTlNfMTdJZGVudGlmaWVyUmVwSGFzaEVOUzVfMTBIYXNoVHJhaXRzSVM5X0VFTlNfMjZTeW1i
b2xUYWJsZUluZGV4SGFzaFRyYWl0c0VFRVBOU18xM0V2YWxDb2RlQmxvY2tFCiBfX1pOM0pTQzE3
Qnl0ZWNvZGVHZW5lcmF0b3JDMkVQTlNfOEV2YWxOb2RlRVBOU18xNFNjb3BlQ2hhaW5Ob2RlRVBO
M1dURjdIYXNoTWFwSU5TNV82UmVmUHRySU5TNV8xMFN0cmluZ0ltcGxFRUVOU18xNlN5bWJvbFRh
YmxlRW50cnlFTlNfMTdJZGVudGlmaWVyUmVwSGFzaEVOUzVfMTBIYXNoVHJhaXRzSVM5X0VFTlNf
MjZTeW1ib2xUYWJsZUluZGV4SGFzaFRyYWl0c0VFRVBOU18xM0V2YWxDb2RlQmxvY2tFCkBAIC0x
MDQ2LDEzICsxMDQ2LDEzIEBAIF9fWk4zSlNDOUpJVFRodW5rczE1dHJ5Q2FjaGVHZXRCeUlERVBO
U18KIF9fWk4zSlNDM0pJVDMzcHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoRU5TXzE2
UmV0dXJuQWRkcmVzc1B0ckUKIF9fWk5LM0pTQzhKU09iamVjdDI0Z2V0UHJvcGVydHlTcGVjaWZp
Y1ZhbHVlRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJQTlNfNkpTQ2VsbEUKIF9f
Wk4zSlNDMjdjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3NFUE5TXzlDb2RlQmxvY2tFTlNfMTZS
ZXR1cm5BZGRyZXNzUHRyRU5TXzExRnVuY3Rpb25QdHJFCi1fX1pOM0pTQzNKSVQ4bGlua0NhbGxF
UE5TXzEwSlNGdW5jdGlvbkVQTlNfOUNvZGVCbG9ja0VTNF9OU18yMU1hY3JvQXNzZW1ibGVyQ29k
ZVB0ckVQTlNfMTJDYWxsTGlua0luZm9FaVBOU18xMkpTR2xvYmFsRGF0YUUKLV9fWk4zSlNDM0pJ
VDIwcGF0Y2hNZXRob2RDYWxsUHJvdG9FUk5TXzEySlNHbG9iYWxEYXRhRVBOU185Q29kZUJsb2Nr
RVJOU18xOE1ldGhvZENhbGxMaW5rSW5mb0VQTlNfMTBKU0Z1bmN0aW9uRVBOU185U3RydWN0dXJl
RVBOU184SlNPYmplY3RFTlNfMTZSZXR1cm5BZGRyZXNzUHRyRQorX19aTjNKU0MzSklUOGxpbmtD
YWxsRVBOU18xMEpTRnVuY3Rpb25FUE5TXzlDb2RlQmxvY2tFUzRfTlNfMjFNYWNyb0Fzc2VtYmxl
ckNvZGVQdHJFUE5TXzEyQ2FsbExpbmtJbmZvRWlQTlNfMTJWTUUKK19fWk4zSlNDM0pJVDIwcGF0
Y2hNZXRob2RDYWxsUHJvdG9FUk5TXzEyVk1FUE5TXzlDb2RlQmxvY2tFUk5TXzE4TWV0aG9kQ2Fs
bExpbmtJbmZvRVBOU18xMEpTRnVuY3Rpb25FUE5TXzlTdHJ1Y3R1cmVFUE5TXzhKU09iamVjdEVO
U18xNlJldHVybkFkZHJlc3NQdHJFCiBfX1pOM0pTQzlKSVRUaHVua3MxNXRyeUNhY2hlUHV0QnlJ
REVQTlNfOUV4ZWNTdGF0ZUVQTlNfOUNvZGVCbG9ja0VOU18xNlJldHVybkFkZHJlc3NQdHJFTlNf
N0pTVmFsdWVFUktOU18xNVB1dFByb3BlcnR5U2xvdEVQTlNfMTdTdHJ1Y3R1cmVTdHViSW5mb0Vi
CiBfY3RpX29wX2dldF9ieV9pZF9nZW5lcmljCiBfY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljCi1f
X1pOM0pTQzE0U3RydWN0dXJlQ2hhaW5DMUVSTlNfMTJKU0dsb2JhbERhdGFFUE5TXzlTdHJ1Y3R1
cmVFUzRfCi1fX1pOM0pTQzE0U3RydWN0dXJlQ2hhaW5DMkVSTlNfMTJKU0dsb2JhbERhdGFFUE5T
XzlTdHJ1Y3R1cmVFUzRfCitfX1pOM0pTQzE0U3RydWN0dXJlQ2hhaW5DMUVSTlNfMTJWTUVQTlNf
OVN0cnVjdHVyZUVTNF8KK19fWk4zSlNDMTRTdHJ1Y3R1cmVDaGFpbkMyRVJOU18xMlZNRVBOU185
U3RydWN0dXJlRVM0XwogX19aTjNKU0MzSklUMjZwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkVQ
TlNfMTdTdHJ1Y3R1cmVTdHViSW5mb0VQTlNfOVN0cnVjdHVyZUVQTlNfMTRTdHJ1Y3R1cmVDaGFp
bkVtUktOU18xMElkZW50aWZpZXJFUktOU18xMlByb3BlcnR5U2xvdEVtTlNfMTZSZXR1cm5BZGRy
ZXNzUHRyRVBOU185RXhlY1N0YXRlRQogX19aTjNKU0MzSklUMTN0ZXN0UHJvdG90eXBlRU5TXzdK
U1ZhbHVlRVJOU18yMkFic3RyYWN0TWFjcm9Bc3NlbWJsZXJJTlNfMTJYODZBc3NlbWJsZXJFRThK
dW1wTGlzdEUKIF9fWk4zSlNDM0pJVDIyY29tcGlsZUdldERpcmVjdE9mZnNldEVQTlNfOEpTT2Jq
ZWN0RU5TXzEyWDg2UmVnaXN0ZXJzMTBSZWdpc3RlcklERW0KQEAgLTExMTcsNyArMTExNyw3IEBA
IF9fWk4zSlNDMjNNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjRtb3ZlRU4KIF9fWk4zSlNDTDIwc3Ry
aW5nUHJvdG9GdW5jTWF0Y2hFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0MxN1JlZ0V4cENvbnN0
cnVjdG9yMTRhcnJheU9mTWF0Y2hlc0VQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlNDMThSZWdFeHBN
YXRjaGVzQXJyYXlDMkVQTlNfOUV4ZWNTdGF0ZUVQTlNfMjRSZWdFeHBDb25zdHJ1Y3RvclByaXZh
dGVFCi1fX1pOM0pTQzdKU0FycmF5QzJFUk5TXzEySlNHbG9iYWxEYXRhRVBOU185U3RydWN0dXJl
RWpOU18xN0FycmF5Q3JlYXRpb25Nb2RlRQorX19aTjNKU0M3SlNBcnJheUMyRVJOU18xMlZNRVBO
U185U3RydWN0dXJlRWpOU18xN0FycmF5Q3JlYXRpb25Nb2RlRQogX19aTjNKU0M3SlNBcnJheTE1
c2V0U3ViY2xhc3NEYXRhRVB2CiBfX1pOM0pTQzE4UmVnRXhwTWF0Y2hlc0FycmF5RDFFdgogX19a
TkszSlNDN0pTQXJyYXkxMnN1YmNsYXNzRGF0YUV2CkBAIC0xMTQ3LDcgKzExNDcsNyBAQCBfX1pO
M1dURjEwU3RyaW5nSW1wbDRmaW5kRVBGYnRFagogX19aTjNXVEYxMFN0cmluZ0ltcGw0ZmluZEVQ
S2NqCiBfX1pOM1dURjZTdHJpbmcyNmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrRVBLY20KIF9f
Wk4zV1RGMTBmYXN0U3RyRHVwRVBLYwotX19aTjNKU0MxMElkZW50aWZpZXIxMWFkZFNsb3dDYXNl
RVBOU18xMkpTR2xvYmFsRGF0YUVQTjNXVEYxMFN0cmluZ0ltcGxFCitfX1pOM0pTQzEwSWRlbnRp
ZmllcjExYWRkU2xvd0Nhc2VFUE5TXzEyVk1FUE4zV1RGMTBTdHJpbmdJbXBsRQogX0pTU3RyaW5n
UmV0YWluCiBfX19pbml0aWFsaXplU2NhdmVuZ2VyX2Jsb2NrX2ludm9rZV8xCiBfX1pOM1dURjIz
d2FpdEZvclRocmVhZENvbXBsZXRpb25FagpAQCAtMTE1Niw3ICsxMTU2LDcgQEAgX0pTT2JqZWN0
Q29weVByb3BlcnR5TmFtZXMKIF9fWk4zSlNDOEpTT2JqZWN0MTZjb3B5QmFja2luZ1N0b3JlRVBO
U182SlNDZWxsRVJOU18xMUNvcHlWaXNpdG9yRQogX19aTjNKU0M4SlNPYmplY3QxNmdldFByb3Bl
cnR5TmFtZXNFUE5TXzlFeGVjU3RhdGVFUk5TXzE3UHJvcGVydHlOYW1lQXJyYXlFTlNfMTVFbnVt
ZXJhdGlvbk1vZGVFCiBfX1pOM0pTQzhKU09iamVjdDE5Z2V0T3duUHJvcGVydHlOYW1lc0VQTlNf
OUV4ZWNTdGF0ZUVSTlNfMTdQcm9wZXJ0eU5hbWVBcnJheUVOU18xNUVudW1lcmF0aW9uTW9kZUUK
LV9fWk4zSlNDOVN0cnVjdHVyZTE2Z2V0UHJvcGVydHlOYW1lc0VSTlNfMTJKU0dsb2JhbERhdGFF
Uk5TXzE3UHJvcGVydHlOYW1lQXJyYXlFTlNfMTVFbnVtZXJhdGlvbk1vZGVFCitfX1pOM0pTQzlT
dHJ1Y3R1cmUxNmdldFByb3BlcnR5TmFtZXNFUk5TXzEyVk1FUk5TXzE3UHJvcGVydHlOYW1lQXJy
YXlFTlNfMTVFbnVtZXJhdGlvbk1vZGVFCiBfX1pOM0pTQzlFeGVjU3RhdGUyMG9iamVjdFByb3Rv
dHlwZVRhYmxlRVBTMF8KIF9KU1Byb3BlcnR5TmFtZUFycmF5R2V0Q291bnQKIF9KU1Byb3BlcnR5
TmFtZUFycmF5UmVsZWFzZQpAQCAtMTIwMiw3ICsxMjAyLDcgQEAgX19aTjNKU0M5QnJlYWtOb2Rl
MTJlbWl0Qnl0ZWNvZGVFUk5TXzE3QgogX19aTjNKU0MxN0J5dGVjb2RlR2VuZXJhdG9yMTFicmVh
a1RhcmdldEVSS05TXzEwSWRlbnRpZmllckUKIF9fWk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvcjE0
ZW1pdEp1bXBTY29wZXNFUE5TXzVMYWJlbEVpCiBfX1pOM0pTQ0wyMHN0cmluZ1Byb3RvRnVuY1Nw
bGl0RVBOU185RXhlY1N0YXRlRQotX19aTjNKU0MxMWpzU3Vic3RyaW5nRVBOU18xMkpTR2xvYmFs
RGF0YUVSS05TXzdVU3RyaW5nRWpqCitfX1pOM0pTQzExanNTdWJzdHJpbmdFUE5TXzEyVk1FUktO
U183VVN0cmluZ0VqagogX19aTjNKU0M3SlNBcnJheTNwdXRFUE5TXzlFeGVjU3RhdGVFak5TXzdK
U1ZhbHVlRQogX19aTjNKU0M3SlNBcnJheTExcHV0U2xvd0Nhc2VFUE5TXzlFeGVjU3RhdGVFak5T
XzdKU1ZhbHVlRQogX19aTjNKU0MxMEFTVEJ1aWxkZXIxMW1ha2VTdWJOb2RlRVBOU18xNEV4cHJl
c3Npb25Ob2RlRVMyX2IKQEAgLTEzMDMsOCArMTMwMyw4IEBAIF9fWk4zSlNDMTB0aHJvd0Vycm9y
RVBOU185RXhlY1N0YXRlRU5TXzcKIF9fWk4zSlNDMTJoYXNFcnJvckluZm9FUE5TXzlFeGVjU3Rh
dGVFUE5TXzhKU09iamVjdEUKIF9fWk4zSlNDOUNvZGVCbG9jazI3bGluZU51bWJlckZvckJ5dGVj
b2RlT2Zmc2V0RWoKIF9fWk4zSlNDMTJhZGRFcnJvckluZm9FUE5TXzlFeGVjU3RhdGVFUE5TXzhK
U09iamVjdEVpUktOU18xMFNvdXJjZUNvZGVFCi1fX1pOM0pTQzEyYWRkRXJyb3JJbmZvRVBOU18x
MkpTR2xvYmFsRGF0YUVQTlNfOEpTT2JqZWN0RWlSS05TXzEwU291cmNlQ29kZUUKLV9fWk4zSlND
OEpTT2JqZWN0MTdwdXRXaXRoQXR0cmlidXRlc0VQTlNfMTJKU0dsb2JhbERhdGFFUktOU18xMElk
ZW50aWZpZXJFTlNfN0pTVmFsdWVFagorX19aTjNKU0MxMmFkZEVycm9ySW5mb0VQTlNfMTJWTUVQ
TlNfOEpTT2JqZWN0RWlSS05TXzEwU291cmNlQ29kZUUKK19fWk4zSlNDOEpTT2JqZWN0MTdwdXRX
aXRoQXR0cmlidXRlc0VQTlNfMTJWTUVSS05TXzEwSWRlbnRpZmllckVOU183SlNWYWx1ZUVqCiBf
Y3RpX29wX3B1c2hfbmV3X3Njb3BlCiBfX1pOM0pTQzE5SlNTdGF0aWNTY29wZU9iamVjdDE4Z2V0
T3duUHJvcGVydHlTbG90RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJOU18xMlBy
b3BlcnR5U2xvdEUKIF9fWk4zSlNDMTJKU0FjdGl2YXRpb24zcHV0RVBOU185RXhlY1N0YXRlRVJL
TlNfMTBJZGVudGlmaWVyRU5TXzdKU1ZhbHVlRVJOU18xNVB1dFByb3BlcnR5U2xvdEUKQEAgLTEz
NjYsMTUgKzEzNjYsMTUgQEAgX2N0aV9vcF9wcmVfZGVjCiBfX1pOM1dURjEwU3RyaW5nSW1wbDE2
ZmluZElnbm9yaW5nQ2FzZUVQUzBfagogX19aTjNKU0M1TGV4ZXIxOWdldFVuaWNvZGVDaGFyYWN0
ZXJFdgogX19aTjNKU0NMMjNudW1iZXJQcm90b0Z1bmNUb1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUK
LV9fWk4zSlNDMTJKU0dsb2JhbERhdGExNWdldEhvc3RGdW5jdGlvbkVQRlB2UE5TXzlFeGVjU3Rh
dGVFRVBGTlNfMjFNYWNyb0Fzc2VtYmxlckNvZGVQdHJFUFMwX1BOU18xNEV4ZWN1dGFibGVQb29s
RUUKLV9fWk4zSlNDOUpJVFRodW5rczE2aG9zdEZ1bmN0aW9uU3R1YkVQTlNfMTJKU0dsb2JhbERh
dGFFUEZQdlBOU185RXhlY1N0YXRlRUVQRk5TXzIxTWFjcm9Bc3NlbWJsZXJDb2RlUHRyRVMyX1BO
U18xNEV4ZWN1dGFibGVQb29sRUUKLV9fWk4zSlNDMThzcXJ0VGh1bmtHZW5lcmF0b3JFUE5TXzEy
SlNHbG9iYWxEYXRhRVBOU18xNEV4ZWN1dGFibGVQb29sRQorX19aTjNKU0MxMlZNMTVnZXRIb3N0
RnVuY3Rpb25FUEZQdlBOU185RXhlY1N0YXRlRUVQRk5TXzIxTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
RVBTMF9QTlNfMTRFeGVjdXRhYmxlUG9vbEVFCitfX1pOM0pTQzlKSVRUaHVua3MxNmhvc3RGdW5j
dGlvblN0dWJFUE5TXzEyVk1FUEZQdlBOU185RXhlY1N0YXRlRUVQRk5TXzIxTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyRVMyX1BOU18xNEV4ZWN1dGFibGVQb29sRUUKK19fWk4zSlNDMThzcXJ0VGh1bmtH
ZW5lcmF0b3JFUE5TXzEyVk1FUE5TXzE0RXhlY3V0YWJsZVBvb2xFCiBfX1pOM0pTQzE5U3BlY2lh
bGl6ZWRUaHVua0pJVDhmaW5hbGl6ZUVOU18yMU1hY3JvQXNzZW1ibGVyQ29kZVB0ckUKIF9fWk4z
SlNDMTBKU0Z1bmN0aW9uQzFFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5T
XzlTdHJ1Y3R1cmVFaVJLTlNfMTBJZGVudGlmaWVyRVBOU18xNk5hdGl2ZUV4ZWN1dGFibGVFCiBf
X1pOM0pTQzEwSlNGdW5jdGlvbkMyRVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0
RVBOU185U3RydWN0dXJlRWlSS05TXzEwSWRlbnRpZmllckVQTlNfMTZOYXRpdmVFeGVjdXRhYmxl
RQogX19aTjNKU0MzSklUMTFlbWl0X29wX25vdEVQTlNfMTFJbnN0cnVjdGlvbkUKIF9fWk4zSlND
M0pJVDE1ZW1pdFNsb3dfb3Bfbm90RVBOU18xMUluc3RydWN0aW9uRVJQTlNfMTNTbG93Q2FzZUVu
dHJ5RQotX19aTjNKU0MxN3Bvd1RodW5rR2VuZXJhdG9yRVBOU18xMkpTR2xvYmFsRGF0YUVQTlNf
MTRFeGVjdXRhYmxlUG9vbEUKK19fWk4zSlNDMTdwb3dUaHVua0dlbmVyYXRvckVQTlNfMTJWTUVQ
TlNfMTRFeGVjdXRhYmxlUG9vbEUKIF9fWk4zSlNDMTJYODZBc3NlbWJsZXI3Y21wbF9pbUVpaU5T
XzEyWDg2UmVnaXN0ZXJzMTBSZWdpc3RlcklERQogX19aTjNKU0MyM01hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uMjZicmFuY2hDb252ZXJ0RG91YmxlVG9JbnQzMkVOU18xMlg4NlJlZ2lzdGVyczEzWE1N
UmVnaXN0ZXJJREVOUzFfMTBSZWdpc3RlcklERVJOU18yMkFic3RyYWN0TWFjcm9Bc3NlbWJsZXJJ
TlNfMTJYODZBc3NlbWJsZXJFRThKdW1wTGlzdEVTMl8KIF9fWk4zSlNDMTlTcGVjaWFsaXplZFRo
dW5rSklUMTFyZXR1cm5JbnQzMkVOU18xMlg4NlJlZ2lzdGVyczEwUmVnaXN0ZXJJREUKQEAgLTEz
ODgsOCArMTM4OCw4IEBAIF9jdGlfb3BfZGVsX2J5X2lkCiBfX1pOM0pTQzE2SlNWYXJpYWJsZU9i
amVjdDE0ZGVsZXRlUHJvcGVydHlFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFCiBf
X1pOM0pTQzhKU09iamVjdDE0ZGVsZXRlUHJvcGVydHlFUE5TXzlFeGVjU3RhdGVFUktOU18xMElk
ZW50aWZpZXJFCiBfX1pOM0pTQzE3T2JqZWN0Q29uc3RydWN0b3IxOGdldE93blByb3BlcnR5U2xv
dEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCi1f
X1pOM0pTQzlTdHJ1Y3R1cmUyN2Rlc3BlY2lmeUZ1bmN0aW9uVHJhbnNpdGlvbkVSTlNfMTJKU0ds
b2JhbERhdGFFUFMwX1JLTlNfMTBJZGVudGlmaWVyRQotX19aTjNKU0MxM1Byb3BlcnR5VGFibGVD
MkVSTlNfMTJKU0dsb2JhbERhdGFFUE5TXzZKU0NlbGxFUktTMF8KK19fWk4zSlNDOVN0cnVjdHVy
ZTI3ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uRVJOU18xMlZNRVBTMF9SS05TXzEwSWRlbnRp
ZmllckUKK19fWk4zSlNDMTNQcm9wZXJ0eVRhYmxlQzJFUk5TXzEyVk1FUE5TXzZKU0NlbGxFUktT
MF8KIF9fWk5LM1dURjZTdHJpbmc2dG9VSW50RVBiCiBfX1pOM1dURjEwU3RyaW5nSW1wbDZ0b1VJ
bnRFUGIKIF9fWk4zV1RGMTZjaGFyYWN0ZXJzVG9VSW50RVBLdG1QYgpAQCAtMTQzNiw3ICsxNDM2
LDcgQEAgX2N0aV9vcF9wdXRfYnlfaWRfZmFpbAogX19aTjNKU0MxN0J5dGVjb2RlR2VuZXJhdG9y
MTFlbWl0UG9zdEluY0VQTlNfMTBSZWdpc3RlcklERVMyXwogX19aTjNKU0MzSklUMTZlbWl0X29w
X3Bvc3RfaW5jRVBOU18xMUluc3RydWN0aW9uRQogX19aTjNKU0MzSklUMjBlbWl0U2xvd19vcF9w
b3N0X2luY0VQTlNfMTFJbnN0cnVjdGlvbkVSUE5TXzEzU2xvd0Nhc2VFbnRyeUUKLV9fWk4zSlND
TDIzY3JlYXRlUHJvdG90eXBlUHJvcGVydHlFUk5TXzEySlNHbG9iYWxEYXRhRVBOU18xNEpTR2xv
YmFsT2JqZWN0RVBOU18xMEpTRnVuY3Rpb25FCitfX1pOM0pTQ0wyM2NyZWF0ZVByb3RvdHlwZVBy
b3BlcnR5RVJOU18xMlZNRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBOU18xMEpTRnVuY3Rpb25FCiBf
X1pOSzNKU0M4TnVsbE5vZGU2aXNOdWxsRXYKIF9fWk4zSlNDM0pJVDE3ZW1pdF9vcF9qbmVxX251
bGxFUE5TXzExSW5zdHJ1Y3Rpb25FCiBfY3RpX29wX2NvbnZlcnRfdGhpcwpAQCAtMTQ3OCw3ICsx
NDc4LDcgQEAgX19aTjNXVEY3VW5pY29kZTE4ZXF1YWxVVEYxNldpdGhVVEY4RVBLdAogX19aTjNX
VEYxMWVtcHR5U3RyaW5nRXYKIF9fWk4zV1RGNlN0cmluZzZudW1iZXJFagogX19aTjNKU0MxNFBv
c3RmaXhEb3ROb2RlMTJlbWl0Qnl0ZWNvZGVFUk5TXzE3Qnl0ZWNvZGVHZW5lcmF0b3JFUE5TXzEw
UmVnaXN0ZXJJREUKLV9fWk4zSlNDN0pTQXJyYXlDMUVSTlNfMTJKU0dsb2JhbERhdGFFUE5TXzlT
dHJ1Y3R1cmVFak5TXzE3QXJyYXlDcmVhdGlvbk1vZGVFCitfX1pOM0pTQzdKU0FycmF5QzFFUk5T
XzEyVk1FUE5TXzlTdHJ1Y3R1cmVFak5TXzE3QXJyYXlDcmVhdGlvbk1vZGVFCiBfX1pOM0pTQzEw
SWRlbnRpZmllcjRmcm9tRVBOU185RXhlY1N0YXRlRWoKIF9fWk4zSlNDM0pJVDIyY29tcGlsZUdl
dERpcmVjdE9mZnNldEVOU18xMlg4NlJlZ2lzdGVyczEwUmVnaXN0ZXJJREVTMl9QTlNfOVN0cnVj
dHVyZUVtCiBfX1pOM1dURjZWZWN0b3JJTjNKU0MxNEV4ZWN1dGFibGVQb29sMTBBbGxvY2F0aW9u
RUxtMkVFMTVyZXNlcnZlQ2FwYWNpdHlFbQpAQCAtMTQ5NCw4ICsxNDk0LDggQEAgX19aTjNKU0M0
WWFycjEzWWFyckdlbmVyYXRvcjI5Z2VuZXJhdGVBcwogX19aTjNKU0MxMlg4NkFzc2VtYmxlcjIz
WDg2SW5zdHJ1Y3Rpb25Gb3JtYXR0ZXIxMW1lbW9yeU1vZFJNRWlOU18xMlg4NlJlZ2lzdGVyczEw
UmVnaXN0ZXJJREVTM19paQogX19aTjNKU0NMMjFzdHJpbmdQcm90b0Z1bmNTZWFyY2hFUE5TXzlF
eGVjU3RhdGVFCiBfX1pOM0pTQzE3U3RyaW5nQ29uc3RydWN0b3IxOGdldE93blByb3BlcnR5U2xv
dEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCi1f
X1pOM0pTQzI2ZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3JFUE5TXzEySlNHbG9iYWxEYXRhRVBO
U18xNEV4ZWN1dGFibGVQb29sRQotX19aTjNKU0NMMTJjaGFyVG9TdHJpbmdFUk5TXzE5U3BlY2lh
bGl6ZWRUaHVua0pJVEVQTlNfMTJKU0dsb2JhbERhdGFFTlNfMTJYODZSZWdpc3RlcnMxMFJlZ2lz
dGVySURFUzVfUzVfCitfX1pOM0pTQzI2ZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3JFUE5TXzEy
Vk1FUE5TXzE0RXhlY3V0YWJsZVBvb2xFCitfX1pOM0pTQ0wxMmNoYXJUb1N0cmluZ0VSTlNfMTlT
cGVjaWFsaXplZFRodW5rSklURVBOU18xMlZNRU5TXzEyWDg2UmVnaXN0ZXJzMTBSZWdpc3RlcklE
RVM1X1M1XwogX19aTjNKU0NMMThzdHJpbmdGcm9tQ2hhckNvZGVFUE5TXzlFeGVjU3RhdGVFCiBf
X1pOSzNKU0M4SlNPYmplY3QxNGlzR2xvYmFsT2JqZWN0RXYKIF9fWk5LM1dURjZTdHJpbmcxNnJl
bW92ZUNoYXJhY3RlcnNFUEZidEUKQEAgLTE1MTgsMTIgKzE1MTgsMTIgQEAgX19aTjNKU0MzSklU
MThlbWl0X29wX2dldF9wbmFtZXNFUE5TXzExSQogX19aTjNKU0MzSklUMjBlbWl0X29wX2dldF9i
eV9wbmFtZUVQTlNfMTFJbnN0cnVjdGlvbkUKIF9fWk4zSlNDM0pJVDE4ZW1pdF9vcF9uZXh0X3Bu
YW1lRVBOU18xMUluc3RydWN0aW9uRQogX19aTjNKU0MzSklUMjRlbWl0U2xvd19vcF9nZXRfYnlf
cG5hbWVFUE5TXzExSW5zdHJ1Y3Rpb25FUlBOU18xM1Nsb3dDYXNlRW50cnlFCi1fX1pOM0pTQzlT
dHJ1Y3R1cmUyMnRvRGljdGlvbmFyeVRyYW5zaXRpb25FUk5TXzEySlNHbG9iYWxEYXRhRVBTMF9O
UzBfMTREaWN0aW9uYXJ5S2luZEUKK19fWk4zSlNDOVN0cnVjdHVyZTIydG9EaWN0aW9uYXJ5VHJh
bnNpdGlvbkVSTlNfMTJWTUVQUzBfTlMwXzE0RGljdGlvbmFyeUtpbmRFCiBfY3RpX29wX2dldF9w
bmFtZXMKIF9fWk4zSlNDMjJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yNmNyZWF0ZUVQTlNfOUV4ZWNT
dGF0ZUVQTlNfOEpTT2JqZWN0RQogX19aTjNXVEY2VmVjdG9ySU4zSlNDMTBJZGVudGlmaWVyRUxt
MjBFRTE0ZXhwYW5kQ2FwYWNpdHlFbQogX2N0aV9oYXNfcHJvcGVydHkKLV9fWk4zSlNDOVN0cnVj
dHVyZTI2ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmVFUk5TXzEySlNHbG9iYWxEYXRhRVBOU184
SlNPYmplY3RFCitfX1pOM0pTQzlTdHJ1Y3R1cmUyNmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJl
RVJOU18xMlZNRVBOU184SlNPYmplY3RFCiBfSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcwogX19aTjNK
U0MxNkpTQ2FsbGJhY2tPYmplY3RJTlNfMjRKU09iamVjdFdpdGhHbG9iYWxPYmplY3RFRTNwdXRF
UE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFTlNfN0pTVmFsdWVFUk5TXzE1UHV0UHJv
cGVydHlTbG90RQogX0pTVmFsdWVDcmVhdGVKU09OU3RyaW5nCkBAIC0xNTk4LDcgKzE1OTgsNyBA
QCBfX1pOM0pTQzExU3RyaW5naWZpZXIxOGFwcGVuZFF1b3RlZFN0cmluCiBfX1pOM0pTQzdVU3Ry
aW5nQzFFUEtjagogX0pTT2JqZWN0R2V0UHJpdmF0ZVByb3BlcnR5CiBfSlNPYmplY3RTZXRQcml2
YXRlUHJvcGVydHkKLV9fWk4zSlNDMjBKU0NhbGxiYWNrT2JqZWN0RGF0YTE4c2V0UHJpdmF0ZVBy
b3BlcnR5RVJOU18xMkpTR2xvYmFsRGF0YUVQTlNfNkpTQ2VsbEVSS05TXzEwSWRlbnRpZmllckVO
U183SlNWYWx1ZUUKK19fWk4zSlNDMjBKU0NhbGxiYWNrT2JqZWN0RGF0YTE4c2V0UHJpdmF0ZVBy
b3BlcnR5RVJOU18xMlZNRVBOU182SlNDZWxsRVJLTlNfMTBJZGVudGlmaWVyRU5TXzdKU1ZhbHVl
RQogX19aTjNXVEY5SGFzaFRhYmxlSU5TXzZSZWZQdHJJTlNfMTBTdHJpbmdJbXBsRUVFU3Q0cGFp
cklTM19OM0pTQzEyV3JpdGVCYXJyaWVySU5TNV83VW5rbm93bkVFRUVOU18xOFBhaXJGaXJzdEV4
dHJhY3RvcklTOV9FRU5TNV8xN0lkZW50aWZpZXJSZXBIYXNoRU5TXzE0UGFpckhhc2hUcmFpdHNJ
TlNfMTBIYXNoVHJhaXRzSVMzX0VFTlNFX0lTOF9FRUVFU0ZfRTZyZWhhc2hFaQogX0pTT2JqZWN0
RGVsZXRlUHJpdmF0ZVByb3BlcnR5CiBfX1pOM0pTQzRZYXJyMThQYXR0ZXJuRGlzanVuY3Rpb24x
N2FkZE5ld0FsdGVybmF0aXZlRXYKQEAgLTE2MjMsNyArMTYyMyw3IEBAIF9fWk4zSlNDM0pJVDIw
ZW1pdFNsb3dfb3BfcG9zdF9kZWNFUE5TXzEKIF9fWk4zSlNDN0pTQXJyYXkxOWdldE93blByb3Bl
cnR5TmFtZXNFUE5TXzlFeGVjU3RhdGVFUk5TXzE3UHJvcGVydHlOYW1lQXJyYXlFTlNfMTVFbnVt
ZXJhdGlvbk1vZGVFCiBfX1pOM0pTQzE3UHJvcGVydHlOYW1lQXJyYXkzYWRkRVBOM1dURjEwU3Ry
aW5nSW1wbEUKIF9fWk4zSlNDOUV4ZWNTdGF0ZTE5YXJyYXlQcm90b3R5cGVUYWJsZUVQUzBfCi1f
X1pOM0pTQzIwY2hhckF0VGh1bmtHZW5lcmF0b3JFUE5TXzEySlNHbG9iYWxEYXRhRVBOU18xNEV4
ZWN1dGFibGVQb29sRQorX19aTjNKU0MyMGNoYXJBdFRodW5rR2VuZXJhdG9yRVBOU18xMlZNRVBO
U18xNEV4ZWN1dGFibGVQb29sRQogX19aTjNKU0NMMTRzdHJpbmdDaGFyTG9hZEVSTlNfMTlTcGVj
aWFsaXplZFRodW5rSklURQogX19aTjNKU0NMMjFzdHJpbmdQcm90b0Z1bmNDaGFyQXRFUE5TXzlF
eGVjU3RhdGVFCiBfX1pOM1dURjZWZWN0b3JJUE4zSlNDMTRFeHByZXNzaW9uTm9kZUVMbTE2RUUx
NGV4cGFuZENhcGFjaXR5RW0KQEAgLTE2NjUsNyArMTY2NSw3IEBAIF9fWk4zSlNDM0pJVDE0ZW1p
dF9vcF9yc2hpZnRFUE5TXzExSW5zdHIKIF9fWk4zSlNDM0pJVDE4ZW1pdFNsb3dfb3BfcnNoaWZ0
RVBOU18xMUluc3RydWN0aW9uRVJQTlNfMTNTbG93Q2FzZUVudHJ5RQogX2N0aV9vcF9wdXRfYnlf
aWRfdHJhbnNpdGlvbl9yZWFsbG9jCiBfX1pOSzNXVEY2U3RyaW5nNXNwbGl0RXRiUk5TXzZWZWN0
b3JJUzBfTG0wRUVFCi1fX1pOM0pTQzI0Y2hhckNvZGVBdFRodW5rR2VuZXJhdG9yRVBOU18xMkpT
R2xvYmFsRGF0YUVQTlNfMTRFeGVjdXRhYmxlUG9vbEUKK19fWk4zSlNDMjRjaGFyQ29kZUF0VGh1
bmtHZW5lcmF0b3JFUE5TXzEyVk1FUE5TXzE0RXhlY3V0YWJsZVBvb2xFCiBfY3RpX29wX2dldF9i
eV92YWxfc3RyaW5nCiBfX1pOM0pTQzE3U3RyaW5nQ29uc3RydWN0b3IxMWdldENhbGxEYXRhRVJO
U184Q2FsbERhdGFFCiBfX1pOM0pTQ0wyMWNhbGxTdHJpbmdDb25zdHJ1Y3RvckVQTlNfOUV4ZWNT
dGF0ZUUKQEAgLTE2NzUsMTAgKzE2NzUsMTAgQEAgX19aTjNKU0MxN051bWJlckNvbnN0cnVjdG9y
MThnZXRPd25Qcm9wZQogX19aTjNKU0MxM2pzQWRkU2xvd0Nhc2VFUE5TXzlFeGVjU3RhdGVFTlNf
N0pTVmFsdWVFUzJfCiBfX1pOSzNKU0M4SlNTdHJpbmcxMXRvUHJpbWl0aXZlRVBOU185RXhlY1N0
YXRlRU5TXzIyUHJlZmVycmVkUHJpbWl0aXZlVHlwZUUKIF9jdGlfb3BfZ2V0X2J5X2lkX2dldHRl
cl9zdHViCi1fX1pOM0pTQzlTdHJ1Y3R1cmUyNHJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbkVSTlNf
MTJKU0dsb2JhbERhdGFFUFMwX1JLTlNfMTBJZGVudGlmaWVyRVJtCitfX1pOM0pTQzlTdHJ1Y3R1
cmUyNHJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbkVSTlNfMTJWTUVQUzBfUktOU18xMElkZW50aWZp
ZXJFUm0KIF9fWk4zSlNDOVN0cnVjdHVyZTZyZW1vdmVFUktOU18xMElkZW50aWZpZXJFCiBfX1pO
M1dURjZWZWN0b3JJakxtMEVFMTRleHBhbmRDYXBhY2l0eUVtCi1fX1pOM0pTQzlTdHJ1Y3R1cmUz
MXJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb25FUk5TXzEySlNHbG9iYWxEYXRhRVJLTlNf
MTBJZGVudGlmaWVyRQorX19aTjNKU0M5U3RydWN0dXJlMzFyZW1vdmVQcm9wZXJ0eVdpdGhvdXRU
cmFuc2l0aW9uRVJOU18xMlZNRVJLTlNfMTBJZGVudGlmaWVyRQogX19aTjNKU0MxMkdldHRlclNl
dHRlcjEzdmlzaXRDaGlsZHJlbkVSTlNfOU1hcmtTdGFja0UKIF9fWk4zSlNDOUFyZ3VtZW50czEz
dmlzaXRDaGlsZHJlbkVSTlNfOU1hcmtTdGFja0UKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDE3
V2Vha01hcHNGaW5hbGl6ZXI4ZmluYWxpemVFTlNfNkhhbmRsZUlOU183VW5rbm93bkVFRVB2CkBA
IC0xNzAxLDEzICsxNzAxLDEzIEBAIF9fWk4zSlNDOEpTUGFyc2VyMjFwYXJzZURvV2hpbGVTdGF0
ZW1lbnQKIF9fWk4zSlNDTDE2bWF0aFByb3RvRnVuY01pbkVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4z
SlNDTDIxYXJyYXlQcm90b0Z1bmNSZXZlcnNlRVBOU185RXhlY1N0YXRlRQogX19aTjNKU0MxN1By
b2dyYW1FeGVjdXRhYmxlMTN2aXNpdENoaWxkcmVuRVJOU185TWFya1N0YWNrRQotX19aTjNKU0Mx
MkpTR2xvYmFsRGF0YTE4Y3JlYXRlQ29udGV4dEdyb3VwRU5TXzhIZWFwVHlwZUUKLV9fWk4zSlND
MTJKU0dsb2JhbERhdGEyMmNsZWFyQnVpbHRpblN0cnVjdHVyZXNFdgorX19aTjNKU0MxMlZNMThj
cmVhdGVDb250ZXh0R3JvdXBFTlNfOEhlYXBUeXBlRQorX19aTjNKU0MxMlZNMjJjbGVhckJ1aWx0
aW5TdHJ1Y3R1cmVzRXYKIF9fWk4zSlNDNEhlYXA3ZGVzdHJveUV2CiBfX1pOM0pTQzlKSVRUaHVu
a3MyMmNsZWFySG9zdEZ1bmN0aW9uU3R1YnNFdgogX19aTjNKU0MxMU1hcmtlZFNwYWNlN2Rlc3Ry
b3lFdgotX19aTjNKU0MxMkpTR2xvYmFsRGF0YUQxRXYKLV9fWk4zSlNDMTJKU0dsb2JhbERhdGFE
MkV2CitfX1pOM0pTQzEyVk1EMUV2CitfX1pOM0pTQzEyVk1EMkV2CiBfX1pOM0pTQzEySlNTdGFj
a0QxRXYKIF9fWk4zSlNDMTJKU1N0YWNrRDJFdgogX19aTkszSlNDOUhhc2hUYWJsZTExZGVsZXRl
VGFibGVFdgpAQCAtMTcyNiwxMiArMTcyNiwxMiBAQCBfX1pOM0pTQzI1RGVmYXVsdEdDQWN0aXZp
dHlDYWxsYmFja0QwRXYKIF9fWk4zSlNDOUpJVFRodW5rc0QxRXYKIF9fWk4zSlNDMTJTbWFsbFN0
cmluZ3NEMUV2CiBfX1pOMTNPcGFxdWVKU0NsYXNzMjZjcmVhdGVOb0F1dG9tYXRpY1Byb3RvdHlw
ZUVQSzE3SlNDbGFzc0RlZmluaXRpb24KLV9fWk4zSlNDMTZKU0NhbGxiYWNrT2JqZWN0SU5TXzE0
SlNHbG9iYWxPYmplY3RFRUMyRVJOU18xMkpTR2xvYmFsRGF0YUVQMTNPcGFxdWVKU0NsYXNzUE5T
XzlTdHJ1Y3R1cmVFCitfX1pOM0pTQzE2SlNDYWxsYmFja09iamVjdElOU18xNEpTR2xvYmFsT2Jq
ZWN0RUVDMkVSTlNfMTJWTUVQMTNPcGFxdWVKU0NsYXNzUE5TXzlTdHJ1Y3R1cmVFCiBfX1pOM0pT
QzE2SlNDYWxsYmFja09iamVjdElOU18xNEpTR2xvYmFsT2JqZWN0RUU0aW5pdEVQTlNfOUV4ZWNT
dGF0ZUUKIF9fWk4zSlNDMTZKU0NhbGxiYWNrT2JqZWN0SU5TXzE0SlNHbG9iYWxPYmplY3RFRTE4
Z2V0T3duUHJvcGVydHlTbG90RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJOU18x
MlByb3BlcnR5U2xvdEUKIF9fWk4xM09wYXF1ZUpTQ2xhc3MxMnN0YXRpY1ZhbHVlc0VQTjNKU0M5
RXhlY1N0YXRlRQogX19aTjEzT3BhcXVlSlNDbGFzczE1c3RhdGljRnVuY3Rpb25zRVBOM0pTQzlF
eGVjU3RhdGVFCi1fX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxNHJlc2V0UHJvdG90eXBlRVJOU18x
MkpTR2xvYmFsRGF0YUVOU183SlNWYWx1ZUUKK19fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDE0cmVz
ZXRQcm90b3R5cGVFUk5TXzEyVk1FTlNfN0pTVmFsdWVFCiBfSlNSZXBvcnRFeHRyYU1lbW9yeUNv
c3QKIF9KU1ZhbHVlSXNPYmplY3QKIF9KU1ZhbHVlTWFrZU51bGwKQEAgLTE4MzYsMTggKzE4MzYs
MTggQEAgX0pTT2JqZWN0SGFzUHJvcGVydHkKIF9KU09iamVjdEdldFByb3RvdHlwZQogX19aTjNK
U0M4SlNPYmplY3QxNXVud3JhcHBlZE9iamVjdEV2CiBfX1pOM0pTQzExY3JlYXRlRXJyb3JFUE5T
XzlFeGVjU3RhdGVFUktOU183VVN0cmluZ0UKLV9fWk4zSlNDMTJKU0dsb2JhbERhdGE2Y3JlYXRl
RU5TXzhIZWFwVHlwZUUKK19fWk4zSlNDMTJWTTZjcmVhdGVFTlNfOEhlYXBUeXBlRQogX19aTjNK
U0M4SlNPYmplY3QxN3B1dERpcmVjdEZ1bmN0aW9uRVBOU185RXhlY1N0YXRlRVBOU18xMEpTRnVu
Y3Rpb25FagotX19aTjNKU0MxMkpTR2xvYmFsRGF0YTEzc3RhcnRTYW1wbGluZ0V2CitfX1pOM0pT
QzEyVk0xM3N0YXJ0U2FtcGxpbmdFdgogX19aTjNKU0MxMUludGVycHJldGVyMTNzdGFydFNhbXBs
aW5nRXYKIF9fWk4zSlNDMTVEYXRlQ29uc3RydWN0b3IxNmdldENvbnN0cnVjdERhdGFFUk5TXzEz
Q29uc3RydWN0RGF0YUUKIF9fWk4zSlNDTDI4Y29uc3RydWN0V2l0aERhdGVDb25zdHJ1Y3RvckVQ
TlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlNDMjFncmVnb3JpYW5EYXRlVGltZVRvTVNFUE5TXzlFeGVj
U3RhdGVFUktOU18xN0dyZWdvcmlhbkRhdGVUaW1lRWRiCiBfX1pOM0pTQ0wzMGRhdGVQcm90b0Z1
bmNHZXRUaW1lem9uZU9mZnNldEVQTlNfOUV4ZWNTdGF0ZUUKLV9fWk4zSlNDMTJKU0dsb2JhbERh
dGExMnN0b3BTYW1wbGluZ0V2CitfX1pOM0pTQzEyVk0xMnN0b3BTYW1wbGluZ0V2CiBfX1pOM0pT
QzExSW50ZXJwcmV0ZXIxMnN0b3BTYW1wbGluZ0V2CiBfX1pOM1dURjlIYXNoVGFibGVJalN0NHBh
aXJJak4zSlNDMTJXcml0ZUJhcnJpZXJJTlMyXzdVbmtub3duRUVFRU5TXzE4UGFpckZpcnN0RXh0
cmFjdG9ySVM2X0VFTlNfN0ludEhhc2hJakVFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hU
cmFpdHNJakVFTlNDX0lTNV9FRUVFU0RfRTZyZWhhc2hFaQotX19aTjNKU0MxMkpTR2xvYmFsRGF0
YTE0ZHVtcFNhbXBsZURhdGFFUE5TXzlFeGVjU3RhdGVFCitfX1pOM0pTQzEyVk0xNGR1bXBTYW1w
bGVEYXRhRVBOU185RXhlY1N0YXRlRQogX19aTjNKU0MxMUludGVycHJldGVyMTRkdW1wU2FtcGxl
RGF0YUVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlNDMTZBcnJheUNvbnN0cnVjdG9yMTFnZXRDYWxs
RGF0YUVSTlNfOENhbGxEYXRhRQogX19aTjNKU0NMMjBjYWxsQXJyYXlDb25zdHJ1Y3RvckVQTlNf
OUV4ZWNTdGF0ZUUKQEAgLTE4NTUsMTUgKzE4NTUsMTUgQEAgX19aTjNKU0MxN051bWJlckNvbnN0
cnVjdG9yMTFnZXRDYWxsRGF0YQogX19aTjNKU0NMMjFjYWxsTnVtYmVyQ29uc3RydWN0b3JFUE5T
XzlFeGVjU3RhdGVFCiBfX1pOM0pTQ0wyOG51bWJlckNvbnN0cnVjdG9yUG9zSW5maW5pdHlFUE5T
XzlFeGVjU3RhdGVFTlNfN0pTVmFsdWVFUktOU18xMElkZW50aWZpZXJFCiBfY3RpX29wX21vZAot
X19aTjNKU0MzSklUMTNsaW5rQ29uc3RydWN0RVBOU18xMEpTRnVuY3Rpb25FUE5TXzlDb2RlQmxv
Y2tFUzRfTlNfMjFNYWNyb0Fzc2VtYmxlckNvZGVQdHJFUE5TXzEyQ2FsbExpbmtJbmZvRWlQTlNf
MTJKU0dsb2JhbERhdGFFCitfX1pOM0pTQzNKSVQxM2xpbmtDb25zdHJ1Y3RFUE5TXzEwSlNGdW5j
dGlvbkVQTlNfOUNvZGVCbG9ja0VTNF9OU18yMU1hY3JvQXNzZW1ibGVyQ29kZVB0ckVQTlNfMTJD
YWxsTGlua0luZm9FaVBOU18xMlZNRQogX19aTjNKU0MxNEV2YWxFeGVjdXRhYmxlMTN2aXNpdENo
aWxkcmVuRVJOU185TWFya1N0YWNrRQogX19aTjNKU0MxN051bWJlckNvbnN0cnVjdG9yMTZnZXRD
b25zdHJ1Y3REYXRhRVJOU18xM0NvbnN0cnVjdERhdGFFCiBfX1pOM0pTQ0wzMGNvbnN0cnVjdFdp
dGhOdW1iZXJDb25zdHJ1Y3RvckVQTlNfOUV4ZWNTdGF0ZUUKLV9fWk4zSlNDMTJOdW1iZXJPYmpl
Y3RDMUVSTlNfMTJKU0dsb2JhbERhdGFFUE5TXzlTdHJ1Y3R1cmVFCitfX1pOM0pTQzEyTnVtYmVy
T2JqZWN0QzFFUk5TXzEyVk1FUE5TXzlTdHJ1Y3R1cmVFCiBfX1pOM0pTQzE4Qm9vbGVhbkNvbnN0
cnVjdG9yMTZnZXRDb25zdHJ1Y3REYXRhRVJOU18xM0NvbnN0cnVjdERhdGFFCiBfX1pOM0pTQ0wz
MWNvbnN0cnVjdFdpdGhCb29sZWFuQ29uc3RydWN0b3JFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0pT
QzE2Y29uc3RydWN0Qm9vbGVhbkVQTlNfOUV4ZWNTdGF0ZUVSS05TXzdBcmdMaXN0RQotX19aTjNK
U0MxM0Jvb2xlYW5PYmplY3RDMUVSTlNfMTJKU0dsb2JhbERhdGFFUE5TXzlTdHJ1Y3R1cmVFCitf
X1pOM0pTQzEzQm9vbGVhbk9iamVjdEMxRVJOU18xMlZNRVBOU185U3RydWN0dXJlRQogX19aTjNK
U0MxM0Jvb2xlYW5PYmplY3REMUV2CiBfX1pOM0pTQzlFeGVjU3RhdGUyMWFycmF5Q29uc3RydWN0
b3JUYWJsZUVQUzBfCiBfX1pOM0pTQzE3RnVuY3Rpb25Qcm90b3R5cGUxMWdldENhbGxEYXRhRVJO
U184Q2FsbERhdGFFCkBAIC0yMTkwLDcgKzIxOTAsNyBAQCBfX1pOM0pTQ0wyNWFycmF5UHJvdG9G
dW5jTGFzdEluZGV4T2ZFUE5TCiBfX1pOM1dURjIwZXF1YWxJZ25vcmluZ051bGxpdHlFUE5TXzEw
U3RyaW5nSW1wbEVTMV8KIF9jdGlfb3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwKIF9fWk4zSlNDMTdQ
cmVmaXhCcmFja2V0Tm9kZTEyZW1pdEJ5dGVjb2RlRVJOU18xN0J5dGVjb2RlR2VuZXJhdG9yRVBO
U18xMFJlZ2lzdGVySURFCi1fX1pOM0pTQzEySlNHbG9iYWxEYXRhMTBDbGllbnREYXRhRDJFdgor
X19aTjNKU0MxMlZNMTBDbGllbnREYXRhRDJFdgogX19aTjNKU0M4RGVidWdnZXJEMkV2CiBfX1pO
M1dURjE0VGhyZWFkU3BlY2lmaWNJTlNfMTNXVEZUaHJlYWREYXRhRUU3ZGVzdHJveUVQdgogX19a
TjNXVEYxM1dURlRocmVhZERhdGFEMUV2CkBAIC0yMjA3LDcgKzIyMDcsNyBAQCBfX1pOSzNKU0M0
SGVhcDExb2JqZWN0Q291bnRFdgogX19aTkszSlNDMTFNYXJrZWRTcGFjZTExb2JqZWN0Q291bnRF
dgogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0MTJkZWZpbmVHZXR0ZXJFUE5TXzlFeGVjU3RhdGVF
UktOU18xMElkZW50aWZpZXJFUE5TXzhKU09iamVjdEVqCiBfX1pOM0pTQzE0SlNHbG9iYWxPYmpl
Y3QxMmRlZmluZVNldHRlckVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVQTlNfOEpT
T2JqZWN0RWoKLV9fWk4zSlNDOVN0cnVjdHVyZTIyZ2V0dGVyU2V0dGVyVHJhbnNpdGlvbkVSTlNf
MTJKU0dsb2JhbERhdGFFUFMwXworX19aTjNKU0M5U3RydWN0dXJlMjJnZXR0ZXJTZXR0ZXJUcmFu
c2l0aW9uRVJOU18xMlZNRVBTMF8KIF9fWk4zSlNDTDI4b2JqZWN0UHJvdG9GdW5jSXNQcm90b3R5
cGVPZkVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlNDTDIxZnVuY3Rpb25Qcm90b0Z1bmNDYWxsRVBO
U185RXhlY1N0YXRlRQogX19aTkszSlNDN0FyZ0xpc3Q4Z2V0U2xpY2VFaVJTMF8KQEAgLTIzMzIs
MTcgKzIzMzIsMTcgQEAgX19aTjNKU0MxM1VuYXJ5UGx1c05vZGUxNHN0cmlwVW5hcnlQbHVzRQog
X19aTjNKU0NMMjlvYmplY3RQcm90b0Z1bmNUb0xvY2FsZVN0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUK
IF9fWk4zV1RGNlZlY3RvcklOM0pTQzhKU1BhcnNlcjE0U2NvcGVMYWJlbEluZm9FTG0yRUUxNGV4
cGFuZENhcGFjaXR5RW0KIF9fWk4zSlNDTDM0b2JqZWN0Q29uc3RydWN0b3JQcmV2ZW50RXh0ZW5z
aW9uc0VQTlNfOUV4ZWNTdGF0ZUUKLV9fWk4zSlNDMTBKU0Z1bmN0aW9uMTdwcmV2ZW50RXh0ZW5z
aW9uc0VSTlNfMTJKU0dsb2JhbERhdGFFCi1fX1pOM0pTQzhKU09iamVjdDE3cHJldmVudEV4dGVu
c2lvbnNFUk5TXzEySlNHbG9iYWxEYXRhRQotX19aTjNKU0M5U3RydWN0dXJlMjdwcmV2ZW50RXh0
ZW5zaW9uc1RyYW5zaXRpb25FUk5TXzEySlNHbG9iYWxEYXRhRVBTMF8KK19fWk4zSlNDMTBKU0Z1
bmN0aW9uMTdwcmV2ZW50RXh0ZW5zaW9uc0VSTlNfMTJWTUUKK19fWk4zSlNDOEpTT2JqZWN0MTdw
cmV2ZW50RXh0ZW5zaW9uc0VSTlNfMTJWTUUKK19fWk4zSlNDOVN0cnVjdHVyZTI3cHJldmVudEV4
dGVuc2lvbnNUcmFuc2l0aW9uRVJOU18xMlZNRVBTMF8KIF9fWk4zSlNDTDIxb2JqZWN0Q29uc3Ry
dWN0b3JTZWFsRVBOU185RXhlY1N0YXRlRQotX19aTjNKU0M4SlNPYmplY3Q0c2VhbEVSTlNfMTJK
U0dsb2JhbERhdGFFCi1fX1pOM0pTQzlTdHJ1Y3R1cmU4aXNTZWFsZWRFUk5TXzEySlNHbG9iYWxE
YXRhRQotX19aTjNKU0M5U3RydWN0dXJlMTRzZWFsVHJhbnNpdGlvbkVSTlNfMTJKU0dsb2JhbERh
dGFFUFMwXworX19aTjNKU0M4SlNPYmplY3Q0c2VhbEVSTlNfMTJWTUUKK19fWk4zSlNDOVN0cnVj
dHVyZThpc1NlYWxlZEVSTlNfMTJWTUUKK19fWk4zSlNDOVN0cnVjdHVyZTE0c2VhbFRyYW5zaXRp
b25FUk5TXzEyVk1FUFMwXwogX19aTjNKU0NMMjNvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZUVQTlNf
OUV4ZWNTdGF0ZUUKLV9fWk4zSlNDOEpTT2JqZWN0NmZyZWV6ZUVSTlNfMTJKU0dsb2JhbERhdGFF
Ci1fX1pOM0pTQzlTdHJ1Y3R1cmU4aXNGcm96ZW5FUk5TXzEySlNHbG9iYWxEYXRhRQotX19aTjNK
U0M5U3RydWN0dXJlMTZmcmVlemVUcmFuc2l0aW9uRVJOU18xMkpTR2xvYmFsRGF0YUVQUzBfCitf
X1pOM0pTQzhKU09iamVjdDZmcmVlemVFUk5TXzEyVk1FCitfX1pOM0pTQzlTdHJ1Y3R1cmU4aXNG
cm96ZW5FUk5TXzEyVk1FCitfX1pOM0pTQzlTdHJ1Y3R1cmUxNmZyZWV6ZVRyYW5zaXRpb25FUk5T
XzEyVk1FUFMwXwogX19aTjNKU0NMMjVvYmplY3RDb25zdHJ1Y3RvcklzU2VhbGVkRVBOU185RXhl
Y1N0YXRlRQogX19aTjNKU0NMMjVvYmplY3RDb25zdHJ1Y3RvcklzRnJvemVuRVBOU185RXhlY1N0
YXRlRQogX19aTjNKU0NMMjlvYmplY3RDb25zdHJ1Y3RvcklzRXh0ZW5zaWJsZUVQTlNfOUV4ZWNT
dGF0ZUUKQEAgLTIzNjAsNyArMjM2MCw3IEBAIF9fWk4zV1RGOENvbGxhdG9yMTVyZWxlYXNlQ29s
bGF0b3JFdgogX19aTjNKU0MzSklUMzBlbWl0X29wX2Vuc3VyZV9wcm9wZXJ0eV9leGlzdHNFUE5T
XzExSW5zdHJ1Y3Rpb25FCiBfY3RpX29wX2Vuc3VyZV9wcm9wZXJ0eV9leGlzdHMKIF9fWk5LM0pT
QzIwU3RyaWN0RXZhbEFjdGl2YXRpb24xMnRvVGhpc09iamVjdEVQTlNfOUV4ZWNTdGF0ZUUKLV9f
Wk4zSlNDMTVJZGVudGlmaWVyQXJlbmEyMW1ha2VOdW1lcmljSWRlbnRpZmllckVQTlNfMTJKU0ds
b2JhbERhdGFFZAorX19aTjNKU0MxNUlkZW50aWZpZXJBcmVuYTIxbWFrZU51bWVyaWNJZGVudGlm
aWVyRVBOU18xMlZNRWQKIF9fWk4zSlNDNkpTQ2VsbDNwdXRFUE5TXzlFeGVjU3RhdGVFUktOU18x
MElkZW50aWZpZXJFTlNfN0pTVmFsdWVFUk5TXzE1UHV0UHJvcGVydHlTbG90RQogX19aTjNKU0M2
SlNDZWxsM3B1dEVQTlNfOUV4ZWNTdGF0ZUVqTlNfN0pTVmFsdWVFCiBfX1pOM1dURjE2Y29kZVBv
aW50Q29tcGFyZUVSS05TXzZTdHJpbmdFUzJfCkBAIC0yMzk0LDcgKzIzOTQsNyBAQCBfX1pOSzNK
U0MxMVByb2ZpbGVOb2RlMjV0cmF2ZXJzZU5leHROb2RlCiBfX1pOM0pTQzExUHJvZmlsZU5vZGUx
M3N0b3BQcm9maWxpbmdFdgogX19aTjNKU0MxMVByb2ZpbGVOb2RlMTFyZW1vdmVDaGlsZEVQUzBf
CiBfX1pOM0pTQzExUHJvZmlsZU5vZGU4YWRkQ2hpbGRFTjNXVEYxMFBhc3NSZWZQdHJJUzBfRUUK
LV9fWk4zSlNDOERlYnVnZ2VyMjNyZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc0VQTlNfMTJKU0dsb2Jh
bERhdGFFCitfX1pOM0pTQzhEZWJ1Z2dlcjIzcmVjb21waWxlQWxsSlNGdW5jdGlvbnNFUE5TXzEy
Vk1FCiBfX1pOM1dURjlIYXNoVGFibGVJUE4zSlNDMThGdW5jdGlvbkV4ZWN1dGFibGVFUzNfTlNf
MTdJZGVudGl0eUV4dHJhY3RvcklTM19FRU5TXzdQdHJIYXNoSVMzX0VFTlNfMTBIYXNoVHJhaXRz
SVMzX0VFUzlfRTZyZWhhc2hFaQogX19aTjNKU0M3UHJvZmlsZUQwRXYKIF9fWk4zV1RGMTBSZWZD
b3VudGVkSU4zSlNDMTFQcm9maWxlTm9kZUVFNWRlcmVmRXYKQEAgLTI0MDIsNyArMjQwMiw3IEBA
IF9fWk4zSlNDOFByb2ZpbGVyMTF3aWxsRXhlY3V0ZUVQTlNfOUV4ZWMKIF9fWk4zSlNDOFByb2Zp
bGVyMTBkaWRFeGVjdXRlRVBOU185RXhlY1N0YXRlRVJLTlNfN1VTdHJpbmdFaQogX19aTkszSlND
MTZQcm9maWxlR2VuZXJhdG9yNXRpdGxlRXYKIF9fWk4zSlNDOFByb2ZpbGVyMTNzdG9wUHJvZmls
aW5nRVBOU18xNEpTR2xvYmFsT2JqZWN0RQotX19aTjNKU0MzNGNyZWF0ZVRlcm1pbmF0ZWRFeGVj
dXRpb25FeGNlcHRpb25FUE5TXzEySlNHbG9iYWxEYXRhRQorX19aTjNKU0MzNGNyZWF0ZVRlcm1p
bmF0ZWRFeGVjdXRpb25FeGNlcHRpb25FUE5TXzEyVk1FCiBfX1pOSzNKU0MyNFRlcm1pbmF0ZWRF
eGVjdXRpb25FcnJvcjEzZXhjZXB0aW9uVHlwZUV2CiBfX1pOM0pTQzI0VGVybWluYXRlZEV4ZWN1
dGlvbkVycm9yRDFFdgogX19aTjNXVEY1TXV0ZXg3dHJ5TG9ja0V2CkBAIC0yNDExLDcgKzI0MTEs
NyBAQCBfX1pOM1dURjV5aWVsZEV2CiBfX1pOM1dURjhDb2xsYXRvckMxRVBLYwogX19aTjNXVEY4
Q29sbGF0b3IxOHNldE9yZGVyTG93ZXJGaXJzdEViCiBfX1pOM0pTQzEwSlNPTk9iamVjdDI0Z2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJO
U18xOFByb3BlcnR5RGVzY3JpcHRvckUKLV9fWk4zSlNDOVN0cnVjdHVyZTI3ZGVzcGVjaWZ5RGlj
dGlvbmFyeUZ1bmN0aW9uRVJOU18xMkpTR2xvYmFsRGF0YUVSS05TXzEwSWRlbnRpZmllckUKK19f
Wk4zSlNDOVN0cnVjdHVyZTI3ZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0aW9uRVJOU18xMlZNRVJL
TlNfMTBJZGVudGlmaWVyRQogX19aTjNKU0MxN09iamVjdENvbnN0cnVjdG9yMjRnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3JFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUk5TXzE4UHJv
cGVydHlEZXNjcmlwdG9yRQogX19aTjNKU0MxNU9iamVjdFByb3RvdHlwZTI0Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJOU18xOFByb3Bl
cnR5RGVzY3JpcHRvckUKIF9fWk4zSlNDMTdTdHJpbmdDb25zdHJ1Y3RvcjI0Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJOU18xOFByb3Bl
cnR5RGVzY3JpcHRvckUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9LZXl3b3JkTG9va3Vw
R2VuZXJhdG9yLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9LZXl3b3Jk
TG9va3VwR2VuZXJhdG9yLnB5CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvS2V5d29yZExvb2t1cEdlbmVyYXRvci5weQkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDcg
KzE0NCw3IEBAIGNsYXNzIFRyaWU6CiAgICAgICAgICAgICBwcmludChzdHIgKyAiaWYgKCFpc0lk
ZW50UGFydChjb2RlWyVkXSkpIHsiICUgKGxlbihzZWxmLmZ1bGxQcmVmaXgpKSkKICAgICAgICAg
ICAgIHByaW50KHN0ciArICIgICAgaW50ZXJuYWxTaGlmdDwlZD4oKTsiICUgbGVuKHNlbGYuZnVs
bFByZWZpeCkpCiAgICAgICAgICAgICBwcmludChzdHIgKyAiICAgIGlmIChzaG91bGRDcmVhdGVJ
ZGVudGlmaWVyKSIpCi0gICAgICAgICAgICBwcmludChzdHIgKyAoIiAgICAgICAgZGF0YS0+aWRl
bnQgPSAmbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT4lc0tleXdvcmQ7IiAlIHNlbGYuZnVs
bFByZWZpeCkpCisgICAgICAgICAgICBwcmludChzdHIgKyAoIiAgICAgICAgZGF0YS0+aWRlbnQg
PSAmbV92bS0+cHJvcGVydHlOYW1lcy0+JXNLZXl3b3JkOyIgJSBzZWxmLmZ1bGxQcmVmaXgpKQog
ICAgICAgICAgICAgcHJpbnQoc3RyICsgIiAgICByZXR1cm4gIiArIHNlbGYudmFsdWUgKyAiOyIp
CiAgICAgICAgICAgICBwcmludChzdHIgKyAifSIpCiAgICAgICAgIHJvb3RJbmRleCA9IGxlbihz
ZWxmLmZ1bGxQcmVmaXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24g
MTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29w
eSkKQEAgLTI2Niw3ICsyNjYsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBydW50aW1lL0pTRGF0ZU1h
dGguY3BwIFwKICAgICBydW50aW1lL0pTRnVuY3Rpb24uY3BwIFwKICAgICBydW50aW1lL0pTQm91
bmRGdW5jdGlvbi5jcHAgXAotICAgIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcCBcCisgICAgcnVu
dGltZS9WTS5jcHAgXAogICAgIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIFwKICAgICBydW50
aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCBcCiAgICAgcnVudGltZS9KU1Byb3h5LmNw
cCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NiwxNyArMTc2LDE3
IEBAIGxvbmcgU3RvcFdhdGNoOjpnZXRFbGFwc2VkTVMoKQogCiBjbGFzcyBHbG9iYWxPYmplY3Qg
OiBwdWJsaWMgSlNHbG9iYWxPYmplY3QgewogcHJpdmF0ZToKLSAgICBHbG9iYWxPYmplY3QoSlNH
bG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CisgICAgR2xvYmFsT2JqZWN0KFZNJiwgU3RydWN0dXJl
Kik7CiAKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTR2xvYmFsT2JqZWN0IEJhc2U7CiAKLSAgICBz
dGF0aWMgR2xvYmFsT2JqZWN0KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50cykKKyAgICBz
dGF0aWMgR2xvYmFsT2JqZWN0KiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50cykKICAgICB7Ci0gICAgICAgIEdsb2JhbE9i
amVjdCogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8R2xvYmFsT2JqZWN0Pihn
bG9iYWxEYXRhLmhlYXApKSBHbG9iYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKLSAg
ICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBhcmd1bWVudHMpOwotICAg
ICAgICBnbG9iYWxEYXRhLmhlYXAuYWRkRmluYWxpemVyKG9iamVjdCwgZGVzdHJveSk7Ci0gICAg
ICAgIG9iamVjdC0+c2V0R2xvYmFsVGhpcyhnbG9iYWxEYXRhLCBKU1Byb3h5OjpjcmVhdGUoZ2xv
YmFsRGF0YSwgSlNQcm94eTo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbERhdGEsIG9iamVjdCwgb2Jq
ZWN0LT5wcm90b3R5cGUoKSksIG9iamVjdCkpOworICAgICAgICBHbG9iYWxPYmplY3QqIG9iamVj
dCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEdsb2JhbE9iamVjdD4odm0uaGVhcCkpIEds
b2JhbE9iamVjdCh2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlv
bih2bSwgYXJndW1lbnRzKTsKKyAgICAgICAgdm0uaGVhcC5hZGRGaW5hbGl6ZXIob2JqZWN0LCBk
ZXN0cm95KTsKKyAgICAgICAgb2JqZWN0LT5zZXRHbG9iYWxUaGlzKHZtLCBKU1Byb3h5OjpjcmVh
dGUodm0sIEpTUHJveHk6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgb2JqZWN0LCBvYmplY3QtPnByb3Rv
dHlwZSgpKSwgb2JqZWN0KSk7CiAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgfQogCkBAIC0x
OTUsNjUgKzE5NSw2NSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2lu
Zm87CiAgICAgc3RhdGljIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIHNfZ2xvYmFsT2Jq
ZWN0TWV0aG9kVGFibGU7CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU1ZhbHVlIHByb3RvdHlwZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCAwLCBwcm90
b3R5cGUsIFR5cGVJbmZvKEdsb2JhbE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgMCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhHbG9iYWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAg
IH0KIAogICAgIHN0YXRpYyBib29sIGphdmFTY3JpcHRFeHBlcmltZW50c0VuYWJsZWQoY29uc3Qg
SlNHbG9iYWxPYmplY3QqKSB7IHJldHVybiB0cnVlOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGFyZ3VtZW50cykKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50cykKICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAg
ICAgICAgIAotICAgICAgICBhZGRGdW5jdGlvbihnbG9iYWxEYXRhLCAiZGVidWciLCBmdW5jdGlv
bkRlYnVnLCAxKTsKLSAgICAgICAgYWRkRnVuY3Rpb24oZ2xvYmFsRGF0YSwgImRlc2NyaWJlIiwg
ZnVuY3Rpb25EZXNjcmliZSwgMSk7Ci0gICAgICAgIGFkZEZ1bmN0aW9uKGdsb2JhbERhdGEsICJw
cmludCIsIGZ1bmN0aW9uUHJpbnQsIDEpOwotICAgICAgICBhZGRGdW5jdGlvbihnbG9iYWxEYXRh
LCAicXVpdCIsIGZ1bmN0aW9uUXVpdCwgMCk7Ci0gICAgICAgIGFkZEZ1bmN0aW9uKGdsb2JhbERh
dGEsICJnYyIsIGZ1bmN0aW9uR0MsIDApOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgImRlYnVn
IiwgZnVuY3Rpb25EZWJ1ZywgMSk7CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiZGVzY3JpYmUi
LCBmdW5jdGlvbkRlc2NyaWJlLCAxKTsKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJwcmludCIs
IGZ1bmN0aW9uUHJpbnQsIDEpOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgInF1aXQiLCBmdW5j
dGlvblF1aXQsIDApOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgImdjIiwgZnVuY3Rpb25HQywg
MCk7CiAjaWZuZGVmIE5ERUJVRwotICAgICAgICBhZGRGdW5jdGlvbihnbG9iYWxEYXRhLCAiZHVt
cENhbGxGcmFtZSIsIGZ1bmN0aW9uRHVtcENhbGxGcmFtZSwgMCk7Ci0gICAgICAgIGFkZEZ1bmN0
aW9uKGdsb2JhbERhdGEsICJyZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSIsIGZ1bmN0aW9uUmVsZWFz
ZUV4ZWN1dGFibGVNZW1vcnksIDApOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgImR1bXBDYWxs
RnJhbWUiLCBmdW5jdGlvbkR1bXBDYWxsRnJhbWUsIDApOworICAgICAgICBhZGRGdW5jdGlvbih2
bSwgInJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5IiwgZnVuY3Rpb25SZWxlYXNlRXhlY3V0YWJsZU1l
bW9yeSwgMCk7CiAjZW5kaWYKLSAgICAgICAgYWRkRnVuY3Rpb24oZ2xvYmFsRGF0YSwgInZlcnNp
b24iLCBmdW5jdGlvblZlcnNpb24sIDEpOwotICAgICAgICBhZGRGdW5jdGlvbihnbG9iYWxEYXRh
LCAicnVuIiwgZnVuY3Rpb25SdW4sIDEpOwotICAgICAgICBhZGRGdW5jdGlvbihnbG9iYWxEYXRh
LCAibG9hZCIsIGZ1bmN0aW9uTG9hZCwgMSk7Ci0gICAgICAgIGFkZEZ1bmN0aW9uKGdsb2JhbERh
dGEsICJjaGVja1N5bnRheCIsIGZ1bmN0aW9uQ2hlY2tTeW50YXgsIDEpOwotICAgICAgICBhZGRG
dW5jdGlvbihnbG9iYWxEYXRhLCAianNjU3RhY2siLCBmdW5jdGlvbkpTQ1N0YWNrLCAxKTsKLSAg
ICAgICAgYWRkRnVuY3Rpb24oZ2xvYmFsRGF0YSwgInJlYWRsaW5lIiwgZnVuY3Rpb25SZWFkbGlu
ZSwgMCk7Ci0gICAgICAgIGFkZEZ1bmN0aW9uKGdsb2JhbERhdGEsICJwcmVjaXNlVGltZSIsIGZ1
bmN0aW9uUHJlY2lzZVRpbWUsIDApOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgInZlcnNpb24i
LCBmdW5jdGlvblZlcnNpb24sIDEpOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgInJ1biIsIGZ1
bmN0aW9uUnVuLCAxKTsKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJsb2FkIiwgZnVuY3Rpb25M
b2FkLCAxKTsKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJjaGVja1N5bnRheCIsIGZ1bmN0aW9u
Q2hlY2tTeW50YXgsIDEpOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgImpzY1N0YWNrIiwgZnVu
Y3Rpb25KU0NTdGFjaywgMSk7CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAicmVhZGxpbmUiLCBm
dW5jdGlvblJlYWRsaW5lLCAwKTsKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJwcmVjaXNlVGlt
ZSIsIGZ1bmN0aW9uUHJlY2lzZVRpbWUsIDApOwogI2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykK
LSAgICAgICAgYWRkRnVuY3Rpb24oZ2xvYmFsRGF0YSwgInNldFNhbXBsaW5nRmxhZ3MiLCBmdW5j
dGlvblNldFNhbXBsaW5nRmxhZ3MsIDEpOwotICAgICAgICBhZGRGdW5jdGlvbihnbG9iYWxEYXRh
LCAiY2xlYXJTYW1wbGluZ0ZsYWdzIiwgZnVuY3Rpb25DbGVhclNhbXBsaW5nRmxhZ3MsIDEpOwor
ICAgICAgICBhZGRGdW5jdGlvbih2bSwgInNldFNhbXBsaW5nRmxhZ3MiLCBmdW5jdGlvblNldFNh
bXBsaW5nRmxhZ3MsIDEpOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgImNsZWFyU2FtcGxpbmdG
bGFncyIsIGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzLCAxKTsKICNlbmRpZgogICAgICAgICAK
LSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKGdsb2JhbERhdGEsICJVaW50OEFycmF5
IiwgY29uc3RydWN0SlNVaW50OEFycmF5LCAxKTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1
bmN0aW9uKGdsb2JhbERhdGEsICJVaW50OENsYW1wZWRBcnJheSIsIGNvbnN0cnVjdEpTVWludDhD
bGFtcGVkQXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24oZ2xvYmFs
RGF0YSwgIlVpbnQxNkFycmF5IiwgY29uc3RydWN0SlNVaW50MTZBcnJheSwgMSk7Ci0gICAgICAg
IGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbihnbG9iYWxEYXRhLCAiVWludDMyQXJyYXkiLCBjb25z
dHJ1Y3RKU1VpbnQzMkFycmF5LCAxKTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9u
KGdsb2JhbERhdGEsICJJbnQ4QXJyYXkiLCBjb25zdHJ1Y3RKU0ludDhBcnJheSwgMSk7Ci0gICAg
ICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbihnbG9iYWxEYXRhLCAiSW50MTZBcnJheSIsIGNv
bnN0cnVjdEpTSW50MTZBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlv
bihnbG9iYWxEYXRhLCAiSW50MzJBcnJheSIsIGNvbnN0cnVjdEpTSW50MzJBcnJheSwgMSk7Ci0g
ICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbihnbG9iYWxEYXRhLCAiRmxvYXQzMkFycmF5
IiwgY29uc3RydWN0SlNGbG9hdDMyQXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxl
RnVuY3Rpb24oZ2xvYmFsRGF0YSwgIkZsb2F0NjRBcnJheSIsIGNvbnN0cnVjdEpTRmxvYXQ2NEFy
cmF5LCAxKTsKKyAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiVWludDhBcnJh
eSIsIGNvbnN0cnVjdEpTVWludDhBcnJheSwgMSk7CisgICAgICAgIGFkZENvbnN0cnVjdGFibGVG
dW5jdGlvbih2bSwgIlVpbnQ4Q2xhbXBlZEFycmF5IiwgY29uc3RydWN0SlNVaW50OENsYW1wZWRB
cnJheSwgMSk7CisgICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIlVpbnQxNkFy
cmF5IiwgY29uc3RydWN0SlNVaW50MTZBcnJheSwgMSk7CisgICAgICAgIGFkZENvbnN0cnVjdGFi
bGVGdW5jdGlvbih2bSwgIlVpbnQzMkFycmF5IiwgY29uc3RydWN0SlNVaW50MzJBcnJheSwgMSk7
CisgICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIkludDhBcnJheSIsIGNvbnN0
cnVjdEpTSW50OEFycmF5LCAxKTsKKyAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZt
LCAiSW50MTZBcnJheSIsIGNvbnN0cnVjdEpTSW50MTZBcnJheSwgMSk7CisgICAgICAgIGFkZENv
bnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIkludDMyQXJyYXkiLCBjb25zdHJ1Y3RKU0ludDMyQXJy
YXksIDEpOworICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJGbG9hdDMyQXJy
YXkiLCBjb25zdHJ1Y3RKU0Zsb2F0MzJBcnJheSwgMSk7CisgICAgICAgIGFkZENvbnN0cnVjdGFi
bGVGdW5jdGlvbih2bSwgIkZsb2F0NjRBcnJheSIsIGNvbnN0cnVjdEpTRmxvYXQ2NEFycmF5LCAx
KTsKIAogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZ2xvYmFs
RXhlYygpLCAwKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6
ZSgpOyArK2kpCiAgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsRXhlYygp
LCBpLCBqc1N0cmluZyhnbG9iYWxFeGVjKCksIGFyZ3VtZW50c1tpXSkpOwotICAgICAgICBwdXRE
aXJlY3QoZ2xvYmFsRGF0YSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJhcmd1bWVudHMiKSwg
YXJyYXkpOworICAgICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAi
YXJndW1lbnRzIiksIGFycmF5KTsKICAgICB9CiAKLSAgICB2b2lkIGFkZEZ1bmN0aW9uKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgY2hhciogbmFtZSwgTmF0aXZlRnVuY3Rpb24gZnVu
Y3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cykKKyAgICB2b2lkIGFkZEZ1bmN0aW9uKFZNJiB2bSwg
Y29uc3QgY2hhciogbmFtZSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3Vt
ZW50cykKICAgICB7CiAgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllcihnbG9iYWxFeGVjKCks
IG5hbWUpOwotICAgICAgICBwdXREaXJlY3QoZ2xvYmFsRGF0YSwgaWRlbnRpZmllciwgSlNGdW5j
dGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgYXJndW1lbnRzLCBpZGVudGlmaWVyLnN0
cmluZygpLCBmdW5jdGlvbikpOworICAgICAgICBwdXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIEpT
RnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjKCksIHRoaXMsIGFyZ3VtZW50cywgaWRlbnRpZmll
ci5zdHJpbmcoKSwgZnVuY3Rpb24pKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBhZGRDb25zdHJ1
Y3RhYmxlRnVuY3Rpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBjaGFyKiBuYW1l
LCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKQorICAgIHZvaWQg
YWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKFZNJiB2bSwgY29uc3QgY2hhciogbmFtZSwgTmF0aXZl
RnVuY3Rpb24gZnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIElk
ZW50aWZpZXIgaWRlbnRpZmllcihnbG9iYWxFeGVjKCksIG5hbWUpOwotICAgICAgICBwdXREaXJl
Y3QoZ2xvYmFsRGF0YSwgaWRlbnRpZmllciwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMo
KSwgdGhpcywgYXJndW1lbnRzLCBpZGVudGlmaWVyLnN0cmluZygpLCBmdW5jdGlvbiwgTm9JbnRy
aW5zaWMsIGZ1bmN0aW9uKSk7CisgICAgICAgIHB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwgSlNG
dW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgYXJndW1lbnRzLCBpZGVudGlmaWVy
LnN0cmluZygpLCBmdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGZ1bmN0aW9uKSk7CiAgICAgfQogfTsK
IApAQCAtMjYzLDggKzI2Myw4IEBAIGNvbnN0IENsYXNzSW5mbyBHbG9iYWxPYmplY3Q6OnNfaW5m
byA9IHsKIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIEdsb2JhbE9iamVjdDo6c19nbG9i
YWxPYmplY3RNZXRob2RUYWJsZSA9IHsgJmFsbG93c0FjY2Vzc0Zyb20sICZzdXBwb3J0c1Byb2Zp
bGluZywgJnN1cHBvcnRzUmljaFNvdXJjZUluZm8sICZzaG91bGRJbnRlcnJ1cHRTY3JpcHQsICZq
YXZhU2NyaXB0RXhwZXJpbWVudHNFbmFibGVkIH07CiAKIAotR2xvYmFsT2JqZWN0OjpHbG9iYWxP
YmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAg
ICA6IEpTR2xvYmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgJnNfZ2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUpCitHbG9iYWxPYmplY3Q6Okdsb2JhbE9iamVjdChWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgIDogSlNHbG9iYWxPYmplY3Qodm0sIHN0cnVjdHVyZSwgJnNfZ2xv
YmFsT2JqZWN0TWV0aG9kVGFibGUpCiB7CiB9CiAKQEAgLTMwNSw3ICszMDUsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uRHVtcENhbGxGcmFtZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgaWYg
KCFleGVjLT5jYWxsZXJGcmFtZSgpLT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpKQotICAgICAgICBl
eGVjLT5nbG9iYWxEYXRhKCkuaW50ZXJwcmV0ZXItPmR1bXBDYWxsRnJhbWUoZXhlYy0+Y2FsbGVy
RnJhbWUoKSk7CisgICAgICAgIGV4ZWMtPnZtKCkuaW50ZXJwcmV0ZXItPmR1bXBDYWxsRnJhbWUo
ZXhlYy0+Y2FsbGVyRnJhbWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KICNlbmRpZgpAQCAtMzI4LDcgKzMyOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25KU0MKICAgICB0cmFjZS5hcHBlbmRMaXRlcmFsKCItLT4gU3Rh
Y2sgdHJhY2U6XG4iKTsKIAogICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlOwotICAg
IEludGVycHJldGVyOjpnZXRTdGFja1RyYWNlKCZleGVjLT5nbG9iYWxEYXRhKCksIHN0YWNrVHJh
Y2UpOworICAgIEludGVycHJldGVyOjpnZXRTdGFja1RyYWNlKCZleGVjLT52bSgpLCBzdGFja1Ry
YWNlKTsKICAgICBpbnQgaSA9IDA7CiAKICAgICBmb3IgKFZlY3RvcjxTdGFja0ZyYW1lPjo6aXRl
cmF0b3IgaXRlciA9IHN0YWNrVHJhY2UuYmVnaW4oKTsgaXRlciA8IHN0YWNrVHJhY2UuZW5kKCk7
IGl0ZXIrKykgewpAQCAtMzUxLDcgKzM1MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25HQygKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZWxl
YXNlRXhlY3V0YWJsZU1lbW9yeShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7Ci0gICAgZXhlYy0+Z2xvYmFsRGF0YSgpLnJlbGVhc2VFeGVjdXRhYmxlTWVt
b3J5KCk7CisgICAgZXhlYy0+dm0oKS5yZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSgpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAjZW5kaWYKQEAgLTM3MCw3
ICszNzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUnVuCiAgICAg
aWYgKCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVOYW1lLCBzY3JpcHQpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXJyb3IoZXhlYywgY3JlYXRlRXJyb3Io
ZXhlYywgIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKTsKIAotICAgIEdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gR2xvYmFsT2JqZWN0OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBHbG9i
YWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIGpzTnVsbCgpKSwg
VmVjdG9yPFN0cmluZz4oKSk7CisgICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBHbG9i
YWxPYmplY3Q6OmNyZWF0ZShleGVjLT52bSgpLCBHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT52bSgpLCBqc051bGwoKSksIFZlY3RvcjxTdHJpbmc+KCkpOwogCiAgICAgSlNWYWx1
ZSBleGNlcHRpb247CiAgICAgU3RvcFdhdGNoIHN0b3BXYXRjaDsKQEAgLTUyMyw3ICs1MjMsNyBA
QCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgUUNvcmVBcHBsaWNhdGlvbiBh
cHAoYXJnYywgYXJndik7CiAjZW5kaWYKIAotICAgIC8vIEluaXRpYWxpemUgSlNDIGJlZm9yZSBn
ZXR0aW5nIEpTR2xvYmFsRGF0YS4KKyAgICAvLyBJbml0aWFsaXplIEpTQyBiZWZvcmUgZ2V0dGlu
ZyBWTS4KICNpZiBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykKICAgICBXVEY6OmluaXRpYWxpemVN
YWluVGhyZWFkKCk7CiAjZW5kaWYKQEAgLTU0OSw3ICs1NDksNyBAQCBzdGF0aWMgYm9vbCBydW5X
aXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqCiAgICAgaWYgKGR1bXApCiAgICAgICAgIEpTQzo6T3B0
aW9uczo6ZHVtcEdlbmVyYXRlZEJ5dGVjb2RlcygpID0gdHJ1ZTsKIAotICAgIEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpOworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykKICAgICBT
YW1wbGluZ0ZsYWdzOjpzdGFydCgpOwpAQCAtNTY3LDcgKzU2Nyw3IEBAIHN0YXRpYyBib29sIHJ1
bldpdGhTY3JpcHRzKEdsb2JhbE9iamVjdCoKICAgICAgICAgICAgIGZpbGVOYW1lID0gIltDb21t
YW5kIExpbmVdIjsKICAgICAgICAgfQogCi0gICAgICAgIGdsb2JhbERhdGEuc3RhcnRTYW1wbGlu
ZygpOworICAgICAgICB2bS5zdGFydFNhbXBsaW5nKCk7CiAKICAgICAgICAgSlNWYWx1ZSBldmFs
dWF0aW9uRXhjZXB0aW9uOwogICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHQsIGZpbGVOYW1lKSwg
SlNWYWx1ZSgpLCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7CkBAIC01ODIsNyArNTgyLDcgQEAgc3Rh
dGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0KgogICAgICAgICAgICAgICAgIHBy
aW50ZigiJXNcbiIsIHN0YWNrVmFsdWUudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCkpLT52YWx1ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAg
ICAgICAgIH0KIAotICAgICAgICBnbG9iYWxEYXRhLnN0b3BTYW1wbGluZygpOworICAgICAgICB2
bS5zdG9wU2FtcGxpbmcoKTsKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCktPmNs
ZWFyRXhjZXB0aW9uKCk7CiAgICAgfQogCkBAIC01OTIsMTIgKzU5MiwxMiBAQCBzdGF0aWMgYm9v
bCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqCiAjaWYgRU5BQkxFKFNBTVBMSU5HX1JFR0lP
TlMpCiAgICAgU2FtcGxpbmdSZWdpb246OmR1bXAoKTsKICNlbmRpZgotICAgIGdsb2JhbERhdGEu
ZHVtcFNhbXBsZURhdGEoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpOworICAgIHZtLmR1bXBT
YW1wbGVEYXRhKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKTsKICNpZiBFTkFCTEUoU0FNUExJ
TkdfQ09VTlRFUlMpCiAgICAgQWJzdHJhY3RTYW1wbGluZ0NvdW50ZXI6OmR1bXAoKTsKICNlbmRp
ZgogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKLSAgICBnbG9iYWxEYXRhLmR1bXBSZWdFeHBU
cmFjZSgpOworICAgIHZtLmR1bXBSZWdFeHBUcmFjZSgpOwogI2VuZGlmCiAgICAgcmV0dXJuIHN1
Y2Nlc3M7CiB9CkBAIC03NTgsMTcgKzc1OCwxNyBAQCB2b2lkIENvbW1hbmRMaW5lOjpwYXJzZUFy
Z3VtZW50cyhpbnQgYXJnCiAKIGludCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsK
LSAgICAvLyBOb3RlIHRoYXQgdGhlIG9wdGlvbnMgcGFyc2luZyBjYW4gYWZmZWN0IEpTR2xvYmFs
RGF0YSBjcmVhdGlvbiwgYW5kIHRodXMKKyAgICAvLyBOb3RlIHRoYXQgdGhlIG9wdGlvbnMgcGFy
c2luZyBjYW4gYWZmZWN0IFZNIGNyZWF0aW9uLCBhbmQgdGh1cwogICAgIC8vIGNvbWVzIGZpcnN0
LgogICAgIENvbW1hbmRMaW5lIG9wdGlvbnMoYXJnYywgYXJndik7Ci0gICAgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhID0gSlNHbG9iYWxEYXRhOjpjcmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7
Ci0gICAgQVBJRW50cnlTaGltIHNoaW0oZ2xvYmFsRGF0YSk7CisgICAgVk0qIHZtID0gVk06OmNy
ZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKKyAgICBBUElFbnRyeVNoaW0gc2hpbSh2bSk7CiAg
ICAgaW50IHJlc3VsdDsKIAotICAgIGlmIChvcHRpb25zLm1fcHJvZmlsZSAmJiAhZ2xvYmFsRGF0
YS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKQotICAgICAgICBnbG9iYWxEYXRhLT5tX3BlckJ5dGVj
b2RlUHJvZmlsZXIgPSBhZG9wdFB0cihuZXcgUHJvZmlsZXI6OkRhdGFiYXNlKCpnbG9iYWxEYXRh
KSk7CisgICAgaWYgKG9wdGlvbnMubV9wcm9maWxlICYmICF2bS0+bV9wZXJCeXRlY29kZVByb2Zp
bGVyKQorICAgICAgICB2bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyID0gYWRvcHRQdHIobmV3IFBy
b2ZpbGVyOjpEYXRhYmFzZSgqdm0pKTsKICAgICAKLSAgICBHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IEdsb2JhbE9iamVjdDo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBHbG9iYWxPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZSgqZ2xvYmFsRGF0YSwganNOdWxsKCkpLCBvcHRpb25zLm1fYXJndW1lbnRz
KTsKKyAgICBHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEdsb2JhbE9iamVjdDo6Y3JlYXRl
KCp2bSwgR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnZtLCBqc051bGwoKSksIG9wdGlv
bnMubV9hcmd1bWVudHMpOwogICAgIGJvb2wgc3VjY2VzcyA9IHJ1bldpdGhTY3JpcHRzKGdsb2Jh
bE9iamVjdCwgb3B0aW9ucy5tX3NjcmlwdHMsIG9wdGlvbnMubV9kdW1wKTsKICAgICBpZiAob3B0
aW9ucy5tX2ludGVyYWN0aXZlICYmIHN1Y2Nlc3MpCiAgICAgICAgIHJ1bkludGVyYWN0aXZlKGds
b2JhbE9iamVjdCk7CkBAIC03NzksNyArNzc5LDcgQEAgaW50IGpzY21haW4oaW50IGFyZ2MsIGNo
YXIqKiBhcmd2KQogICAgICAgICBwcmludGYoImpzYyBleGl0aW5nICVkXG4iLCByZXN1bHQpOwog
ICAgIAogICAgIGlmIChvcHRpb25zLm1fcHJvZmlsZSkgewotICAgICAgICBpZiAoIWdsb2JhbERh
dGEtPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+c2F2ZShvcHRpb25zLm1fcHJvZmlsZXJPdXRwdXQu
dXRmOCgpLmRhdGEoKSkpCisgICAgICAgIGlmICghdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+
c2F2ZShvcHRpb25zLm1fcHJvZmlsZXJPdXRwdXQudXRmOCgpLmRhdGEoKSkpCiAgICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgImNvdWxkIG5vdCBzYXZlIHByb2ZpbGVyIG91dHB1dC5cbiIpOwog
ICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RSZWdFeHAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0UmVnRXhwLmNwcAkocmV2aXNpb24g
MTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RSZWdFeHAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTAsMTUgKzExMCwxNSBAQCBzdHJ1Y3QgUmVnRXhwVGVzdCB7CiAKIGNsYXNz
IEdsb2JhbE9iamVjdCA6IHB1YmxpYyBKU0dsb2JhbE9iamVjdCB7CiBwcml2YXRlOgotICAgIEds
b2JhbE9iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgYXJndW1lbnRzKTsKKyAgICBHbG9iYWxPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgYXJndW1lbnRzKTsKIAogcHVibGljOgogICAgIHR5cGVkZWYgSlNHbG9i
YWxPYmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBHbG9iYWxPYmplY3QqIGNyZWF0ZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgYXJndW1lbnRzKQorICAgIHN0YXRpYyBHbG9iYWxPYmplY3QqIGNyZWF0ZShWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJndW1lbnRzKQog
ICAgIHsKLSAgICAgICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxHbG9iYWxPYmplY3Q+KGdsb2JhbERhdGEuaGVhcCkpIEdsb2JhbE9iamVj
dChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGFyZ3VtZW50cyk7Ci0gICAgICAgIGdsb2JhbERhdGEu
aGVhcC5hZGRGaW5hbGl6ZXIoZ2xvYmFsT2JqZWN0LCBkZXN0cm95KTsKKyAgICAgICAgR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxHbG9iYWxP
YmplY3Q+KHZtLmhlYXApKSBHbG9iYWxPYmplY3Qodm0sIHN0cnVjdHVyZSwgYXJndW1lbnRzKTsK
KyAgICAgICAgdm0uaGVhcC5hZGRGaW5hbGl6ZXIoZ2xvYmFsT2JqZWN0LCBkZXN0cm95KTsKICAg
ICAgICAgcmV0dXJuIGdsb2JhbE9iamVjdDsKICAgICB9CiAKQEAgLTEyNiwxNSArMTI2LDE1IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3RvciA9IGZhbHNl
OwogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiB2bSwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgMCwgcHJvdG90eXBlLCBUeXBlSW5m
byhHbG9iYWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIDAsIHByb3RvdHlwZSwgVHlwZUluZm8oR2xvYmFs
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKIHByb3RlY3Rl
ZDoKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50cykKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50cykKICAgICB7Ci0gICAgICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CiAgICAgICAgIFVOVVNFRF9QQVJBTShhcmd1bWVudHMpOwogICAgIH0KIH07CkBA
IC0xNDMsMTAgKzE0MywxMCBAQCBDT01QSUxFX0FTU0VSVCghSXNJbnRlZ2VyPEdsb2JhbE9iamVj
dD46CiAKIGNvbnN0IENsYXNzSW5mbyBHbG9iYWxPYmplY3Q6OnNfaW5mbyA9IHsgImdsb2JhbCIs
ICZKU0dsb2JhbE9iamVjdDo6c19pbmZvLCAwLCBFeGVjU3RhdGU6Omdsb2JhbE9iamVjdFRhYmxl
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEdsb2JhbE9iamVjdCkgfTsKIAotR2xvYmFsT2JqZWN0OjpH
bG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50cykKLSAgICA6IEpTR2xvYmFsT2JqZWN0
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKK0dsb2JhbE9iamVjdDo6R2xvYmFsT2JqZWN0KFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhcmd1bWVudHMp
CisgICAgOiBKU0dsb2JhbE9iamVjdCh2bSwgc3RydWN0dXJlKQogewotICAgIGZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEsIGFyZ3VtZW50cyk7CisgICAgZmluaXNoQ3JlYXRpb24odm0sIGFyZ3Vt
ZW50cyk7CiB9CiAKIC8vIFVzZSBTRUggZm9yIFJlbGVhc2UgYnVpbGRzIG9ubHkgdG8gZ2V0IHJp
ZCBvZiB0aGUgY3Jhc2ggcmVwb3J0IGRpYWxvZwpAQCAtMTkwLDcgKzE5MCw3IEBAIGludCBtYWlu
KGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICBRQ29yZUFwcGxpY2F0aW9uIGFwcChhcmdjLCBh
cmd2KTsKICNlbmRpZgogCi0gICAgLy8gSW5pdGlhbGl6ZSBKU0MgYmVmb3JlIGdldHRpbmcgSlNH
bG9iYWxEYXRhLgorICAgIC8vIEluaXRpYWxpemUgSlNDIGJlZm9yZSBnZXR0aW5nIFZNLgogICAg
IEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogCiAgICAgLy8gV2UgY2FuJ3QgdXNlIGRlc3Ry
dWN0b3JzIGluIHRoZSBmb2xsb3dpbmcgY29kZSBiZWNhdXNlIGl0IHVzZXMgV2luZG93cwpAQCAt
MjAyLDEyICsyMDIsMTIgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIHJl
dHVybiByZXM7CiB9CiAKLXN0YXRpYyBib29sIHRlc3RPbmVSZWdFeHAoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBSZWdFeHAqIHJlZ2V4cCwgUmVnRXhwVGVzdCogcmVnRXhwVGVzdCwgYm9vbCB2
ZXJib3NlLCB1bnNpZ25lZCBpbnQgbGluZU51bWJlcikKK3N0YXRpYyBib29sIHRlc3RPbmVSZWdF
eHAoVk0mIHZtLCBSZWdFeHAqIHJlZ2V4cCwgUmVnRXhwVGVzdCogcmVnRXhwVGVzdCwgYm9vbCB2
ZXJib3NlLCB1bnNpZ25lZCBpbnQgbGluZU51bWJlcikKIHsKICAgICBib29sIHJlc3VsdCA9IHRy
dWU7CiAgICAgVmVjdG9yPGludCwgMzI+IG91dFZlY3RvcjsKICAgICBvdXRWZWN0b3IucmVzaXpl
KHJlZ0V4cFRlc3QtPmV4cGVjdFZlY3Rvci5zaXplKCkpOwotICAgIGludCBtYXRjaFJlc3VsdCA9
IHJlZ2V4cC0+bWF0Y2goZ2xvYmFsRGF0YSwgcmVnRXhwVGVzdC0+c3ViamVjdCwgcmVnRXhwVGVz
dC0+b2Zmc2V0LCBvdXRWZWN0b3IpOworICAgIGludCBtYXRjaFJlc3VsdCA9IHJlZ2V4cC0+bWF0
Y2godm0sIHJlZ0V4cFRlc3QtPnN1YmplY3QsIHJlZ0V4cFRlc3QtPm9mZnNldCwgb3V0VmVjdG9y
KTsKIAogICAgIGlmIChtYXRjaFJlc3VsdCAhPSByZWdFeHBUZXN0LT5yZXN1bHQpIHsKICAgICAg
ICAgcmVzdWx0ID0gZmFsc2U7CkBAIC0zMTAsNyArMzEwLDcgQEAgc3RhdGljIGludCBzY2FuU3Ry
aW5nKGNoYXIqIGJ1ZmZlciwgaW50IAogICAgIHJldHVybiAtMTsKIH0KIAotc3RhdGljIFJlZ0V4
cCogcGFyc2VSZWdFeHBMaW5lKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY2hhciogbGluZSwg
aW50IGxpbmVMZW5ndGgpCitzdGF0aWMgUmVnRXhwKiBwYXJzZVJlZ0V4cExpbmUoVk0mIHZtLCBj
aGFyKiBsaW5lLCBpbnQgbGluZUxlbmd0aCkKIHsKICAgICBTdHJpbmdCdWlsZGVyIHBhdHRlcm47
CiAgICAgCkBAIC0zMjQsNyArMzI0LDcgQEAgc3RhdGljIFJlZ0V4cCogcGFyc2VSZWdFeHBMaW5l
KEpTR2xvYmFsRAogCiAgICAgKytpOwogCi0gICAgcmV0dXJuIFJlZ0V4cDo6Y3JlYXRlKGdsb2Jh
bERhdGEsIHBhdHRlcm4udG9TdHJpbmcoKSwgcmVnRXhwRmxhZ3MobGluZSArIGkpKTsKKyAgICBy
ZXR1cm4gUmVnRXhwOjpjcmVhdGUodm0sIHBhdHRlcm4udG9TdHJpbmcoKSwgcmVnRXhwRmxhZ3Mo
bGluZSArIGkpKTsKIH0KIAogc3RhdGljIFJlZ0V4cFRlc3QqIHBhcnNlVGVzdExpbmUoY2hhciog
bGluZSwgaW50IGxpbmVMZW5ndGgpCkBAIC00MDgsNyArNDA4LDcgQEAgc3RhdGljIGJvb2wgcnVu
RnJvbUZpbGVzKEdsb2JhbE9iamVjdCogZwogICAgIHVuc2lnbmVkIGZhaWx1cmVzID0gMDsKICAg
ICBjaGFyKiBsaW5lQnVmZmVyID0gbmV3IGNoYXJbTWF4TGluZUxlbmd0aCArIDFdOwogCi0gICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCk7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogCiAgICAgYm9vbCBzdWNjZXNzID0gdHJ1
ZTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVzLnNpemUoKTsgaSsrKSB7CkBAIC00
MzYsMTMgKzQzNiwxMyBAQCBzdGF0aWMgYm9vbCBydW5Gcm9tRmlsZXMoR2xvYmFsT2JqZWN0KiBn
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIGlmIChsaW5lUHRyWzBd
ID09ICcvJykgewotICAgICAgICAgICAgICAgIHJlZ2V4cCA9IHBhcnNlUmVnRXhwTGluZShnbG9i
YWxEYXRhLCBsaW5lUHRyLCBsaW5lTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWdleHAgPSBw
YXJzZVJlZ0V4cExpbmUodm0sIGxpbmVQdHIsIGxpbmVMZW5ndGgpOwogICAgICAgICAgICAgfSBl
bHNlIGlmIChsaW5lUHRyWzBdID09ICcgJykgewogICAgICAgICAgICAgICAgIFJlZ0V4cFRlc3Qq
IHJlZ0V4cFRlc3QgPSBwYXJzZVRlc3RMaW5lKGxpbmVQdHIsIGxpbmVMZW5ndGgpOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChyZWdleHAgJiYgcmVnRXhwVGVzdCkgewog
ICAgICAgICAgICAgICAgICAgICArK3Rlc3RzOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXRl
c3RPbmVSZWdFeHAoZ2xvYmFsRGF0YSwgcmVnZXhwLCByZWdFeHBUZXN0LCB2ZXJib3NlLCBsaW5l
TnVtYmVyKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXRlc3RPbmVSZWdFeHAodm0sIHJl
Z2V4cCwgcmVnRXhwVGVzdCwgdmVyYm9zZSwgbGluZU51bWJlcikpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGZhaWx1cmVzKys7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkZh
aWx1cmUgb24gbGluZSAldVxuIiwgbGluZU51bWJlcik7CiAgICAgICAgICAgICAgICAgICAgIH0K
QEAgLTQ2Myw5ICs0NjMsOSBAQCBzdGF0aWMgYm9vbCBydW5Gcm9tRmlsZXMoR2xvYmFsT2JqZWN0
KiBnCiAKICAgICBkZWxldGVbXSBsaW5lQnVmZmVyOwogCi0gICAgZ2xvYmFsRGF0YS5kdW1wU2Ft
cGxlRGF0YShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSk7CisgICAgdm0uZHVtcFNhbXBsZURh
dGEoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpOwogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lO
RykKLSAgICBnbG9iYWxEYXRhLmR1bXBSZWdFeHBUcmFjZSgpOworICAgIHZtLmR1bXBSZWdFeHBU
cmFjZSgpOwogI2VuZGlmCiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CkBAIC01MDAsMTMgKzUwMCwx
MyBAQCBzdGF0aWMgdm9pZCBwYXJzZUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhCiAKIGludCByZWFs
TWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gSlNHbG9iYWxEYXRhOjpjcmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7Ci0gICAgQVBJ
RW50cnlTaGltIHNoaW0oZ2xvYmFsRGF0YSk7CisgICAgVk0qIHZtID0gVk06OmNyZWF0ZShMYXJn
ZUhlYXApLmxlYWtSZWYoKTsKKyAgICBBUElFbnRyeVNoaW0gc2hpbSh2bSk7CiAKICAgICBDb21t
YW5kTGluZSBvcHRpb25zOwogICAgIHBhcnNlQXJndW1lbnRzKGFyZ2MsIGFyZ3YsIG9wdGlvbnMp
OwogCi0gICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBHbG9iYWxPYmplY3Q6OmNyZWF0
ZSgqZ2xvYmFsRGF0YSwgR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKmdsb2JhbERhdGEs
IGpzTnVsbCgpKSwgb3B0aW9ucy5hcmd1bWVudHMpOworICAgIEdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gR2xvYmFsT2JqZWN0OjpjcmVhdGUoKnZtLCBHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0
cnVjdHVyZSgqdm0sIGpzTnVsbCgpKSwgb3B0aW9ucy5hcmd1bWVudHMpOwogICAgIGJvb2wgc3Vj
Y2VzcyA9IHJ1bkZyb21GaWxlcyhnbG9iYWxPYmplY3QsIG9wdGlvbnMuZmlsZXMsIG9wdGlvbnMu
dmVyYm9zZSk7CiAKICAgICByZXR1cm4gc3VjY2VzcyA/IDAgOiAzOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9BUElDYXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9BUElDYXN0LmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvQVBJQ2FzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiBu
YW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBFeGVjU3RhdGU7CiAgICAgY2xhc3MgUHJvcGVydHlO
YW1lQXJyYXk7Ci0gICAgY2xhc3MgSlNHbG9iYWxEYXRhOworICAgIGNsYXNzIFZNOwogICAgIGNs
YXNzIEpTT2JqZWN0OwogICAgIGNsYXNzIEpTVmFsdWU7CiB9CkBAIC0xMTcsOSArMTE3LDkgQEAg
aW5saW5lIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkqIHRvSlMoSlNQcgogICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PEpTQzo6UHJvcGVydHlOYW1lQXJyYXkqPihhKTsKIH0KIAotaW5saW5lIEpT
Qzo6SlNHbG9iYWxEYXRhKiB0b0pTKEpTQ29udGV4dEdyb3VwUmVmIGcpCitpbmxpbmUgSlNDOjpW
TSogdG9KUyhKU0NvbnRleHRHcm91cFJlZiBnKQogewotICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PEpTQzo6SlNHbG9iYWxEYXRhKj4oY29uc3RfY2FzdDxPcGFxdWVKU0NvbnRleHRHcm91cCo+
KGcpKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0M6OlZNKj4oY29uc3RfY2FzdDxP
cGFxdWVKU0NvbnRleHRHcm91cCo+KGcpKTsKIH0KIAogaW5saW5lIEpTVmFsdWVSZWYgdG9SZWYo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2KQpAQCAtMTYyLDcgKzE2Miw3IEBA
IGlubGluZSBKU1Byb3BlcnR5TmFtZUFjY3VtdWxhdG9yUmVmIHRvUmUKICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxKU1Byb3BlcnR5TmFtZUFjY3VtdWxhdG9yUmVmPihsKTsKIH0KIAotaW5s
aW5lIEpTQ29udGV4dEdyb3VwUmVmIHRvUmVmKEpTQzo6SlNHbG9iYWxEYXRhKiBnKQoraW5saW5l
IEpTQ29udGV4dEdyb3VwUmVmIHRvUmVmKEpTQzo6Vk0qIGcpCiB7CiAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8SlNDb250ZXh0R3JvdXBSZWY+KGcpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9BUElTaGltcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvQVBJU2hpbXMuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9BUElTaGltcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxNCArMzYsMTQgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrIHsKIHByb3Rl
Y3RlZDoKLSAgICBBUElFbnRyeVNoaW1XaXRob3V0TG9jayhKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIGJvb2wgcmVnaXN0ZXJUaHJlYWQpCi0gICAgICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERh
dGEpCi0gICAgICAgICwgbV9lbnRyeUlkZW50aWZpZXJUYWJsZSh3dGZUaHJlYWREYXRhKCkuc2V0
Q3VycmVudElkZW50aWZpZXJUYWJsZShnbG9iYWxEYXRhLT5pZGVudGlmaWVyVGFibGUpKQorICAg
IEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKFZNKiB2bSwgYm9vbCByZWdpc3RlclRocmVhZCkKKyAg
ICAgICAgOiBtX3ZtKHZtKQorICAgICAgICAsIG1fZW50cnlJZGVudGlmaWVyVGFibGUod3RmVGhy
ZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUodm0tPmlkZW50aWZpZXJUYWJsZSkp
CiAgICAgewogICAgICAgICBpZiAocmVnaXN0ZXJUaHJlYWQpCi0gICAgICAgICAgICBnbG9iYWxE
YXRhLT5oZWFwLm1hY2hpbmVUaHJlYWRzKCkuYWRkQ3VycmVudFRocmVhZCgpOwotICAgICAgICBt
X2dsb2JhbERhdGEtPmhlYXAuYWN0aXZpdHlDYWxsYmFjaygpLT5zeW5jaHJvbml6ZSgpOwotICAg
ICAgICBtX2dsb2JhbERhdGEtPmhlYXAuc3dlZXBlcigpLT5zeW5jaHJvbml6ZSgpOworICAgICAg
ICAgICAgdm0tPmhlYXAubWFjaGluZVRocmVhZHMoKS5hZGRDdXJyZW50VGhyZWFkKCk7CisgICAg
ICAgIG1fdm0tPmhlYXAuYWN0aXZpdHlDYWxsYmFjaygpLT5zeW5jaHJvbml6ZSgpOworICAgICAg
ICBtX3ZtLT5oZWFwLnN3ZWVwZXIoKS0+c3luY2hyb25pemUoKTsKICAgICB9CiAKICAgICB+QVBJ
RW50cnlTaGltV2l0aG91dExvY2soKQpAQCAtNTIsNyArNTIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
fQogCiBwcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gbV9nbG9iYWxEYXRhOwor
ICAgIFJlZlB0cjxWTT4gbV92bTsKICAgICBJZGVudGlmaWVyVGFibGUqIG1fZW50cnlJZGVudGlm
aWVyVGFibGU7CiB9OwogCkBAIC02MCwyMiArNjAsMjIgQEAgY2xhc3MgQVBJRW50cnlTaGltIDog
cHVibGljIEFQSUVudHJ5U2hpbQogcHVibGljOgogICAgIC8vIE5vcm1hbCBBUEkgZW50cnkKICAg
ICBBUElFbnRyeVNoaW0oRXhlY1N0YXRlKiBleGVjLCBib29sIHJlZ2lzdGVyVGhyZWFkID0gdHJ1
ZSkKLSAgICAgICAgOiBBUElFbnRyeVNoaW1XaXRob3V0TG9jaygmZXhlYy0+Z2xvYmFsRGF0YSgp
LCByZWdpc3RlclRocmVhZCkKKyAgICAgICAgOiBBUElFbnRyeVNoaW1XaXRob3V0TG9jaygmZXhl
Yy0+dm0oKSwgcmVnaXN0ZXJUaHJlYWQpCiAgICAgICAgICwgbV9sb2NrSG9sZGVyKGV4ZWMpCiAg
ICAgewogICAgIH0KIAotICAgIC8vIEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3Igb25seSBoYXMg
YSBnbG9iYWxEYXRhLgotICAgIEFQSUVudHJ5U2hpbShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IGJvb2wgcmVnaXN0ZXJUaHJlYWQgPSB0cnVlKQotICAgICAgICA6IEFQSUVudHJ5U2hpbVdpdGhv
dXRMb2NrKGdsb2JhbERhdGEsIHJlZ2lzdGVyVGhyZWFkKQotICAgICAgICAsIG1fbG9ja0hvbGRl
cihnbG9iYWxEYXRhKQorICAgIC8vIEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3Igb25seSBoYXMg
YSB2bS4KKyAgICBBUElFbnRyeVNoaW0oVk0qIHZtLCBib29sIHJlZ2lzdGVyVGhyZWFkID0gdHJ1
ZSkKKyAgICAgICAgOiBBUElFbnRyeVNoaW1XaXRob3V0TG9jayh2bSwgcmVnaXN0ZXJUaHJlYWQp
CisgICAgICAgICwgbV9sb2NrSG9sZGVyKHZtKQogICAgIHsKICAgICB9CiAKICAgICB+QVBJRW50
cnlTaGltKCkKICAgICB7Ci0gICAgICAgIC8vIERlc3Ryb3lpbmcgb3VyIEpTTG9ja0hvbGRlciBz
aG91bGQgYWxzbyBkZXN0cm95IHRoZSBKU0dsb2JhbERhdGEuCi0gICAgICAgIG1fZ2xvYmFsRGF0
YS5jbGVhcigpOworICAgICAgICAvLyBEZXN0cm95aW5nIG91ciBKU0xvY2tIb2xkZXIgc2hvdWxk
IGFsc28gZGVzdHJveSB0aGUgVk0uCisgICAgICAgIG1fdm0uY2xlYXIoKTsKICAgICB9CiAKIHBy
aXZhdGU6CkBAIC04NiwxOSArODYsMTkgQEAgY2xhc3MgQVBJQ2FsbGJhY2tTaGltIHsKIHB1Ymxp
YzoKICAgICBBUElDYWxsYmFja1NoaW0oRXhlY1N0YXRlKiBleGVjKQogICAgICAgICA6IG1fZHJv
cEFsbExvY2tzKGV4ZWMpCi0gICAgICAgICwgbV9nbG9iYWxEYXRhKCZleGVjLT5nbG9iYWxEYXRh
KCkpCisgICAgICAgICwgbV92bSgmZXhlYy0+dm0oKSkKICAgICB7CiAgICAgICAgIHd0ZlRocmVh
ZERhdGEoKS5yZXNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoKTsKICAgICB9CiAKICAgICB+QVBJ
Q2FsbGJhY2tTaGltKCkKICAgICB7Ci0gICAgICAgIHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50
SWRlbnRpZmllclRhYmxlKG1fZ2xvYmFsRGF0YS0+aWRlbnRpZmllclRhYmxlKTsKKyAgICAgICAg
d3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUobV92bS0+aWRlbnRpZmll
clRhYmxlKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgbV9k
cm9wQWxsTG9ja3M7Ci0gICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CisgICAgVk0qIG1f
dm07CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBl
ck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElX
cmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcg
QEAgY2xhc3MgSlNBUElXcmFwcGVyT2JqZWN0IDogcHVibGljIEpTRGVzdAogcHVibGljOgogICAg
IHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKICAgICAKLSAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTR2xvYmFsRGF0YSYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
ICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KTsKICAgICAKICAgICB2b2lkKiB3cmFwcGVkT2JqZWN0KCkgeyByZXR1cm4gbV93cmFwcGVkT2Jq
ZWN0OyB9CkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwg
QmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAgICAgCi0gICAgSlNBUElXcmFwcGVyT2JqZWN0KEpTR2xv
YmFsRGF0YSYsIFN0cnVjdHVyZSopOworICAgIEpTQVBJV3JhcHBlck9iamVjdChWTSYsIFN0cnVj
dHVyZSopOwogCiBwcml2YXRlOgogICAgIHZvaWQqIG1fd3JhcHBlZE9iamVjdDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCShyZXZp
c2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9i
amVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtNzQsMjAgKzc0LDIwIEBAIHRlbXBsYXRlIDw+IGNv
bnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrT2IKIHRlbXBsYXRlPD4gY29uc3QgYm9vbCBKU0NhbGxi
YWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwog
CiB0ZW1wbGF0ZSA8PgotU3RydWN0dXJlKiBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9i
amVjdD46OmNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCitTdHJ1Y3R1cmUqIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKIHsKLSAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiB9CiAKLUpTQVBJV3JhcHBlck9iamVjdDo6
SlNBUElXcmFwcGVyT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCi0gICAgOiBCYXNlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKK0pTQVBJV3JhcHBl
ck9iamVjdDo6SlNBUElXcmFwcGVyT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX3dyYXBwZWRPYmplY3QoMCkKIHsK
IH0KIAotdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgSlNBUElXcmFwcGVyT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIFdlYWtTZXQ6OmFsbG9jYXRlKHRoaXMsIGpzQVBJ
V3JhcHBlck9iamVjdEhhbmRsZU93bmVyKCksIDApOyAvLyBCYWxhbmNlZCBpbiBKU0FQSVdyYXBw
ZXJPYmplY3RIYW5kbGVPd25lcjo6ZmluYWxpemUuCiB9CiAgICAgCkBAIC0xMDQsNyArMTA0LDcg
QEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSgogICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CiAKICAgICBpZiAodGhpc09iamVjdC0+d3JhcHBl
ZE9iamVjdCgpKQotICAgICAgICBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChjZWxsLT5zdHJ1Y3R1
cmUoKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSwgdmlzaXRvciwgdGhpc09iamVjdC0+
d3JhcHBlZE9iamVjdCgpKTsKKyAgICAgICAgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoY2VsbC0+
c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpLT52bSgpLCB2aXNpdG9yLCB0aGlzT2JqZWN0LT53
cmFwcGVkT2JqZWN0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQmFzZS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDE0ICsxMDEs
MTQgQEAgdm9pZCBKU0dhcmJhZ2VDb2xsZWN0KEpTQ29udGV4dFJlZiBjdHgpCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gdG9KUyhjdHgpOwogICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYywg
ZmFsc2UpOwogCi0gICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmhlYXAucmVwb3J0QWJhbmRvbmVkT2Jq
ZWN0R3JhcGgoKTsKKyAgICBleGVjLT52bSgpLmhlYXAucmVwb3J0QWJhbmRvbmVkT2JqZWN0R3Jh
cGgoKTsKIH0KIAogdm9pZCBKU1JlcG9ydEV4dHJhTWVtb3J5Q29zdChKU0NvbnRleHRSZWYgY3R4
LCBzaXplX3Qgc2l6ZSkKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7CiAgICAg
QVBJRW50cnlTaGltIGVudHJ5U2hpbShleGVjKTsKLSAgICBleGVjLT5nbG9iYWxEYXRhKCkuaGVh
cC5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZSk7CisgICAgZXhlYy0+dm0oKS5oZWFwLnJlcG9y
dEV4dHJhTWVtb3J5Q29zdChzaXplKTsKIH0KIAogZXh0ZXJuICJDIiBKU19FWFBPUlQgdm9pZCBK
U1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmcoSlNDb250ZXh0UmVmKTsKQEAg
LTEyMCw1ICsxMjAsNSBAQCB2b2lkIEpTU3luY2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRlYnVn
CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7CiAgICAgQVBJRW50cnlTaGltIGVu
dHJ5U2hpbShleGVjKTsKLSAgICBleGVjLT5nbG9iYWxEYXRhKCkuaGVhcC5jb2xsZWN0QWxsR2Fy
YmFnZSgpOworICAgIGV4ZWMtPnZtKCkuaGVhcC5jb2xsZWN0QWxsR2FyYmFnZSgpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVj
dG9yLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6
c19pbmZvID0geyAiQ2FsbGJhY2tDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsYmFja0NvbnN0cnVjdG9yKSB9OwogCiBKU0NhbGxiYWNr
Q29uc3RydWN0b3I6OkpTQ2FsbGJhY2tDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNDbGFzc1JlZiBqc0NsYXNzLCBKU09iamVj
dENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2sgY2FsbGJhY2spCi0gICAgOiBKU0Rlc3RydWN0aWJs
ZU9iamVjdChnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKQorICAgIDogSlNE
ZXN0cnVjdGlibGVPYmplY3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBzdHJ1Y3R1cmUpCiAgICAgLCBt
X2NsYXNzKGpzQ2xhc3MpCiAgICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNrKQogewpAQCAtNDgsNyAr
NDgsNyBAQCBKU0NhbGxiYWNrQ29uc3RydWN0b3I6OkpTQ2FsbGJhY2tDb25zdHJ1CiAKIHZvaWQg
SlNDYWxsYmFja0NvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0NsYXNzUmVmIGpzQ2xhc3MpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGdsb2JhbE9iamVjdC0+dm0oKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKICAg
ICBpZiAobV9jbGFzcykKICAgICAgICAgSlNDbGFzc1JldGFpbihqc0NsYXNzKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuaAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNr
Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgsOSBAQCBwdWJsaWM6CiAg
ICAgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxiYWNrIGNhbGxiYWNrKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYWxsYmFjazsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwog
Ci0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykgCisg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykgCiAgICAgewotICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogcHJvdGVjdGVkOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9u
LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxNiArNTAsMTYgQEAgSlND
YWxsYmFja0Z1bmN0aW9uOjpKU0NhbGxiYWNrRnVuY3Rpb24oSgogewogfQogCi12b2lkIEpTQ2Fs
bGJhY2tGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBj
b25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIEpTQ2FsbGJhY2tGdW5jdGlvbjo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZ2xvYmFsRGF0YSwgbmFtZSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIG5hbWUp
OwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiB9CiAKIEpTQ2FsbGJhY2tGdW5jdGlv
biogSlNDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgY2FsbGJh
Y2ssIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBKU0NhbGxiYWNrRnVuY3Rpb24qIGZ1bmN0
aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNDYWxsYmFja0Z1bmN0aW9uPigqZXhl
Yy0+aGVhcCgpKSkgSlNDYWxsYmFja0Z1bmN0aW9uKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0
LT5jYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlKCksIGNhbGxiYWNrKTsKLSAgICBmdW5jdGlvbi0+
ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBuYW1lKTsKKyAgICBmdW5jdGlvbi0+
ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwgbmFtZSk7CiAgICAgcmV0dXJuIGZ1bmN0aW9uOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0
aW9uLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
YWxsYmFja0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiBjbGFzcyBKU0NhbGxiYWNrRnVuY3Rpb24gOiBwdWJsaWMgSW50ZXJuYWxGdW5j
dGlvbiB7CiBwcm90ZWN0ZWQ6CiAgICAgSlNDYWxsYmFja0Z1bmN0aW9uKEpTR2xvYmFsT2JqZWN0
KiwgU3RydWN0dXJlKiwgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrKTsKLSAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKIHB1YmxpYzoK
ICAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKQEAgLTQ1LDkgKzQ1LDkgQEAgcHVi
bGljOgogICAgIAogICAgIC8vIEludGVybmFsRnVuY3Rpb24gbWlzaC1tYXNoZXMgY29uc3RydWN0
b3IgYW5kIGZ1bmN0aW9uIGJlaGF2aW9yIC0tIHdlIHNob3VsZCAKICAgICAvLyByZWZhY3RvciB0
aGUgY29kZSBzbyB0aGlzIG92ZXJyaWRlIGlzbid0IG5lY2Vzc2FyeQotICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pIAorICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG8pIAogICAgIHsgCi0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOyAKICAgICB9CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAkocmV2aXNpb24gMTQ4
NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDEsMjQgKzQxLDI0IEBAIHRlbXBsYXRlPD4gY29uc3QgYm9vbCBK
U0NhbGxiYWNrT2JqZWN0PEoKIHRlbXBsYXRlPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0
PEpTR2xvYmFsT2JqZWN0Pjo6bmVlZHNEZXN0cnVjdGlvbiA9IGZhbHNlOwogCiB0ZW1wbGF0ZTw+
Ci1KU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0PiogSlNDYWxsYmFja09iamVjdDxKU0ds
b2JhbE9iamVjdD46OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2xhc3NSZWYg
Y2xhc3NSZWYsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorSlNDYWxsYmFja09iamVjdDxKU0dsb2Jh
bE9iamVjdD4qIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+OjpjcmVhdGUoVk0mIHZt
LCBKU0NsYXNzUmVmIGNsYXNzUmVmLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBKU0Nh
bGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0PiogY2FsbGJhY2tPYmplY3QgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0PiA+KGdsb2Jh
bERhdGEuaGVhcCkpIEpTQ2FsbGJhY2tPYmplY3QoZ2xvYmFsRGF0YSwgY2xhc3NSZWYsIHN0cnVj
dHVyZSk7Ci0gICAgY2FsbGJhY2tPYmplY3QtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwot
ICAgIGdsb2JhbERhdGEuaGVhcC5hZGRGaW5hbGl6ZXIoY2FsbGJhY2tPYmplY3QsIGRlc3Ryb3kp
OworICAgIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+KiBjYWxsYmFja09iamVjdCA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmpl
Y3Q+ID4odm0uaGVhcCkpIEpTQ2FsbGJhY2tPYmplY3Qodm0sIGNsYXNzUmVmLCBzdHJ1Y3R1cmUp
OworICAgIGNhbGxiYWNrT2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgdm0uaGVhcC5h
ZGRGaW5hbGl6ZXIoY2FsbGJhY2tPYmplY3QsIGRlc3Ryb3kpOwogICAgIHJldHVybiBjYWxsYmFj
a09iamVjdDsKIH0KIAogdGVtcGxhdGUgPD4KLVN0cnVjdHVyZSogSlNDYWxsYmFja09iamVjdDxK
U0Rlc3RydWN0aWJsZU9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCitTdHJ1
Y3R1cmUqIEpTQ2FsbGJhY2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+OjpjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
KQogeyAKLSAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsgCisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAKIH0KICAg
ICAKIHRlbXBsYXRlIDw+Ci1TdHJ1Y3R1cmUqIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmpl
Y3Q+OjpjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorU3RydWN0dXJlKiBKU0NhbGxiYWNr
T2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKIHsgCi0gICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKEds
b2JhbE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7IAorICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oR2xvYmFs
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCiB9CiAKIHZvaWQgSlNDYWxs
YmFja09iamVjdERhdGE6OmZpbmFsaXplKEhhbmRsZTxVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNv
bnRleHQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmpl
Y3QuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDExICs1NCwxMSBAQCBzdHJ1Y3Qg
SlNDYWxsYmFja09iamVjdERhdGEgOiBXZWFrSGFuZGxlCiAgICAgICAgIHJldHVybiBtX3ByaXZh
dGVQcm9wZXJ0aWVzLT5nZXRQcml2YXRlUHJvcGVydHkocHJvcGVydHlOYW1lKTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBzZXRQcml2YXRlUHJvcGVydHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUpCisgICAgdm9pZCBzZXRQcml2YXRlUHJvcGVydHkoVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUpCiAgICAgewog
ICAgICAgICBpZiAoIW1fcHJpdmF0ZVByb3BlcnRpZXMpCiAgICAgICAgICAgICBtX3ByaXZhdGVQ
cm9wZXJ0aWVzID0gYWRvcHRQdHIobmV3IEpTUHJpdmF0ZVByb3BlcnR5TWFwKTsKLSAgICAgICAg
bV9wcml2YXRlUHJvcGVydGllcy0+c2V0UHJpdmF0ZVByb3BlcnR5KGdsb2JhbERhdGEsIG93bmVy
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAgICAgbV9wcml2YXRlUHJvcGVydGllcy0+c2V0
UHJpdmF0ZVByb3BlcnR5KHZtLCBvd25lciwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgZGVsZXRlUHJpdmF0ZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSkKQEAgLTg2LDEwICs4NiwxMCBAQCBzdHJ1Y3QgSlNDYWxsYmFja09iamVjdERh
dGEgOiBXZWFrSGFuZGxlCiAgICAgICAgICAgICByZXR1cm4gbG9jYXRpb24tPnZhbHVlLmdldCgp
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIHNldFByaXZhdGVQcm9wZXJ0eShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgdm9pZCBzZXRQcml2YXRlUHJv
cGVydHkoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiBlbXB0eTsKLSAgICAgICAgICAgIG1fcHJvcGVydHlNYXAuYWRkKHByb3BlcnR5TmFt
ZS5pbXBsKCksIGVtcHR5KS5pdGVyYXRvci0+dmFsdWUuc2V0KGdsb2JhbERhdGEsIG93bmVyLCB2
YWx1ZSk7CisgICAgICAgICAgICBtX3Byb3BlcnR5TWFwLmFkZChwcm9wZXJ0eU5hbWUuaW1wbCgp
LCBlbXB0eSkuaXRlcmF0b3ItPnZhbHVlLnNldCh2bSwgb3duZXIsIHZhbHVlKTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgdm9pZCBkZWxldGVQcml2YXRlUHJvcGVydHkoY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lKQpAQCAtMTE4LDEwICsxMTgsMTAgQEAgdGVtcGxhdGUgPGNs
YXNzIFBhcmVudD4KIGNsYXNzIEpTQ2FsbGJhY2tPYmplY3QgOiBwdWJsaWMgUGFyZW50IHsKIHBy
b3RlY3RlZDoKICAgICBKU0NhbGxiYWNrT2JqZWN0KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEpT
Q2xhc3NSZWYsIHZvaWQqIGRhdGEpOwotICAgIEpTQ2FsbGJhY2tPYmplY3QoSlNHbG9iYWxEYXRh
JiwgSlNDbGFzc1JlZiwgU3RydWN0dXJlKik7CisgICAgSlNDYWxsYmFja09iamVjdChWTSYsIEpT
Q2xhc3NSZWYsIFN0cnVjdHVyZSopOwogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3Rh
dGUqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYpOworICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mKTsKIAogcHVibGljOgogICAgIHR5cGVkZWYgUGFyZW50IEJhc2U7
CkBAIC0xMzMsNyArMTMzLDcgQEAgcHVibGljOgogICAgICAgICBjYWxsYmFja09iamVjdC0+Zmlu
aXNoQ3JlYXRpb24oZXhlYyk7CiAgICAgICAgIHJldHVybiBjYWxsYmFja09iamVjdDsKICAgICB9
Ci0gICAgc3RhdGljIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50PiogY3JlYXRlKEpTR2xvYmFsRGF0
YSYsIEpTQ2xhc3NSZWYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBKU0NhbGxiYWNrT2JqZWN0
PFBhcmVudD4qIGNyZWF0ZShWTSYsIEpTQ2xhc3NSZWYsIFN0cnVjdHVyZSopOwogCiAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbjsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KEpTQ2VsbCogY2VsbCkKQEAgLTE0OSwxNiArMTQ5LDE2IEBAIHB1YmxpYzoKICAgICBKU0NsYXNz
UmVmIGNsYXNzUmVmKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFja09iamVjdERhdGEtPmpzQ2xh
c3M7IH0KICAgICBib29sIGluaGVyaXRzKEpTQ2xhc3NSZWYpIGNvbnN0OwogCi0gICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSk7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwg
SlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKICAgICAKICAgICBKU1ZhbHVlIGdldFByaXZhdGVQ
cm9wZXJ0eShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpIGNvbnN0CiAgICAgewogICAg
ICAgICByZXR1cm4gbV9jYWxsYmFja09iamVjdERhdGEtPmdldFByaXZhdGVQcm9wZXJ0eShwcm9w
ZXJ0eU5hbWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldFByaXZhdGVQcm9wZXJ0eShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSkKKyAgICB2b2lkIHNldFByaXZhdGVQcm9wZXJ0eShWTSYgdm0sIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIG1f
Y2FsbGJhY2tPYmplY3REYXRhLT5zZXRQcml2YXRlUHJvcGVydHkoZ2xvYmFsRGF0YSwgdGhpcywg
cHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgICAgIG1fY2FsbGJhY2tPYmplY3REYXRhLT5zZXRQ
cml2YXRlUHJvcGVydHkodm0sIHRoaXMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIGRlbGV0ZVByaXZhdGVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmpl
Y3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDcgKzUxLDcgQEAgaW5saW5lIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50PiogSlND
YWxsYgogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgogSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+
OjpKU0NhbGxiYWNrT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTQ2xhc3NSZWYganNDbGFzcywgdm9pZCogZGF0YSkKLSAgICA6IFBhcmVudChleGVjLT5nbG9i
YWxEYXRhKCksIHN0cnVjdHVyZSkKKyAgICA6IFBhcmVudChleGVjLT52bSgpLCBzdHJ1Y3R1cmUp
CiAgICAgLCBtX2NhbGxiYWNrT2JqZWN0RGF0YShhZG9wdFB0cihuZXcgSlNDYWxsYmFja09iamVj
dERhdGEoZGF0YSwganNDbGFzcykpKQogewogfQpAQCAtNTksOCArNTksOCBAQCBKU0NhbGxiYWNr
T2JqZWN0PFBhcmVudD46OkpTQ2FsbGJhY2tPYmplCiAvLyBHbG9iYWwgb2JqZWN0IGNvbnN0cnVj
dG9yLgogLy8gRklYTUU6IE1vdmUgdGhpcyBpbnRvIGEgc2VwYXJhdGUgSlNHbG9iYWxDYWxsYmFj
a09iamVjdCBjbGFzcyBkZXJpdmVkIGZyb20gdGhpcyBvbmUuCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFy
ZW50PgotSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpKU0NhbGxiYWNrT2JqZWN0KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNDbGFzc1JlZiBqc0NsYXNzLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKLSAgICA6IFBhcmVudChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCitKU0NhbGxiYWNrT2JqZWN0
PFBhcmVudD46OkpTQ2FsbGJhY2tPYmplY3QoVk0mIHZtLCBKU0NsYXNzUmVmIGpzQ2xhc3MsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogUGFyZW50KHZtLCBzdHJ1Y3R1cmUpCiAgICAgLCBt
X2NhbGxiYWNrT2JqZWN0RGF0YShhZG9wdFB0cihuZXcgSlNDYWxsYmFja09iamVjdERhdGEoMCwg
anNDbGFzcykpKQogewogfQpAQCAtNjgsMTggKzY4LDE4IEBAIEpTQ2FsbGJhY2tPYmplY3Q8UGFy
ZW50Pjo6SlNDYWxsYmFja09iamUKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CiB2b2lkIEpTQ2Fs
bGJhY2tPYmplY3Q8UGFyZW50Pjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAgICAgQVNTRVJUKFBhcmVudDo6aW5oZXJpdHMo
JnNfaW5mbykpOwogICAgIGluaXQoZXhlYyk7CiB9CiAKIC8vIFRoaXMgaXMganVzdCBmb3IgR2xv
YmFsIG9iamVjdCwgc28gd2UgY2FuIGFzc3VtZSB0aGF0IEJhc2U6OmZpbmlzaENyZWF0aW9uIGlz
IEpTR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbi4KIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+
Ci12b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQordm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoUGFyZW50Ojppbmhlcml0cygmc19pbmZvKSk7
CiAgICAgQVNTRVJUKFBhcmVudDo6aXNHbG9iYWxPYmplY3QoKSk7Ci0gICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAg
IGluaXQoanNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4odGhpcyktPmdsb2JhbEV4ZWMoKSk7CiB9CiAK
QEAgLTI4Myw3ICsyODMsNyBAQCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6cHV0KEpT
Q2VsCiAgICAgICAgICAgICAgICAgaWYgKFN0YXRpY0Z1bmN0aW9uRW50cnkqIGVudHJ5ID0gc3Rh
dGljRnVuY3Rpb25zLT5nZXQobmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5
LT5hdHRyaWJ1dGVzICYga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+SlND
YWxsYmFja09iamVjdDxQYXJlbnQ+OjpwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlKTsgLy8gcHV0IGFzIG92ZXJyaWRlIHByb3BlcnR5CisgICAgICAgICAg
ICAgICAgICAgIHRoaXNPYmplY3QtPkpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6cHV0RGlyZWN0
KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOyAvLyBwdXQgYXMgb3ZlcnJpZGUgcHJv
cGVydHkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KQEAgLTYyNyw3ICs2MjcsNyBAQCBKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8
UGFyZW50Pjo6c3RhdGljCiAgICAgICAgICAgICAgICAgICAgIGlmIChKU09iamVjdENhbGxBc0Z1
bmN0aW9uQ2FsbGJhY2sgY2FsbEFzRnVuY3Rpb24gPSBlbnRyeS0+Y2FsbEFzRnVuY3Rpb24pIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmpl
Y3QqIG8gPSBKU0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZShleGVjLCB0aGlzT2JqLT5nbG9iYWxP
YmplY3QoKSwgY2FsbEFzRnVuY3Rpb24sIG5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAg
dGhpc09iai0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBvLCBl
bnRyeS0+YXR0cmlidXRlcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzT2JqLT5wdXRE
aXJlY3QoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCBvLCBlbnRyeS0+YXR0cmlidXRlcyk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbzsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFz
c1JlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNz
UmVmLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NsYXNzUmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw3IEBAIFBhc3NSZWZQ
dHI8T3BhcXVlSlNDbGFzcz4gT3BhcXVlSlNDbGFzczoKICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IE9wYXF1ZUpTQ2xhc3MoJmRlZmluaXRpb24sIHByb3RvQ2xhc3MuZ2V0KCkpKTsKIH0KIAotT3Bh
cXVlSlNDbGFzc0NvbnRleHREYXRhOjpPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEoSlNDOjpKU0ds
b2JhbERhdGEmLCBPcGFxdWVKU0NsYXNzKiBqc0NsYXNzKQorT3BhcXVlSlNDbGFzc0NvbnRleHRE
YXRhOjpPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEoSlNDOjpWTSYsIE9wYXF1ZUpTQ2xhc3MqIGpz
Q2xhc3MpCiAgICAgOiBtX2NsYXNzKGpzQ2xhc3MpCiB7CiAgICAgaWYgKGpzQ2xhc3MtPm1fc3Rh
dGljVmFsdWVzKSB7CkBAIC0xNTMsNyArMTUzLDcgQEAgT3BhcXVlSlNDbGFzc0NvbnRleHREYXRh
JiBPcGFxdWVKU0NsYXNzOgogewogICAgIE93blB0cjxPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE+
JiBjb250ZXh0RGF0YSA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b3BhcXVlSlNDbGFz
c0RhdGEoKS5hZGQodGhpcywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghY29u
dGV4dERhdGEpCi0gICAgICAgIGNvbnRleHREYXRhID0gYWRvcHRQdHIobmV3IE9wYXF1ZUpTQ2xh
c3NDb250ZXh0RGF0YShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMpKTsKKyAgICAgICAgY29udGV4
dERhdGEgPSBhZG9wdFB0cihuZXcgT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhKGV4ZWMtPnZtKCks
IHRoaXMpKTsKICAgICByZXR1cm4gKmNvbnRleHREYXRhOwogfQogCkBAIC0yMDMsNyArMjAzLDcg
QEAgSlNPYmplY3QqIE9wYXF1ZUpTQ2xhc3M6OnByb3RvdHlwZShFeGVjUwogICAgIEpTT2JqZWN0
KiBwcm90b3R5cGUgPSBKU0NhbGxiYWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6Y3Jl
YXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5jYWxsYmFja09iamVjdFN0cnVjdHVyZSgpLCBwcm90b3R5cGVDbGFzcywgJmpz
Q2xhc3NEYXRhKTsgLy8gc2V0IGpzQ2xhc3NEYXRhIGFzIHRoZSBvYmplY3QncyBwcml2YXRlIGRh
dGEsIHNvIGl0IGNhbiBjbGVhciBvdXIgcmVmZXJlbmNlIG9uIGRlc3RydWN0aW9uCiAgICAgaWYg
KHBhcmVudENsYXNzKSB7CiAgICAgICAgIGlmIChKU09iamVjdCogcGFyZW50UHJvdG90eXBlID0g
cGFyZW50Q2xhc3MtPnByb3RvdHlwZShleGVjKSkKLSAgICAgICAgICAgIHByb3RvdHlwZS0+c2V0
UHJvdG90eXBlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcGFyZW50UHJvdG90eXBlKTsKKyAgICAgICAg
ICAgIHByb3RvdHlwZS0+c2V0UHJvdG90eXBlKGV4ZWMtPnZtKCksIHBhcmVudFByb3RvdHlwZSk7
CiAgICAgfQogCiAgICAganNDbGFzc0RhdGEuY2FjaGVkUHJvdG90eXBlID0gUGFzc1dlYWs8SlNP
YmplY3Q+KHByb3RvdHlwZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xh
c3NSZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NS
ZWYuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Ns
YXNzUmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDE0ICs2OCwxNCBAQCBzdHJ1Y3QgT3BhcXVl
SlNDbGFzczsKIHN0cnVjdCBPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSk7IFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgotICAgIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YShKU0M6OkpTR2xv
YmFsRGF0YSYsIE9wYXF1ZUpTQ2xhc3MqKTsKKyAgICBPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEo
SlNDOjpWTSYsIE9wYXF1ZUpTQ2xhc3MqKTsKIAogICAgIC8vIEl0IGlzIG5lY2Vzc2FyeSB0byBr
ZWVwIE9wYXF1ZUpTQ2xhc3MgYWxpdmUgYmVjYXVzZSBvZiB0aGUgZm9sbG93aW5nIHJhcmUgc2Nl
bmFyaW86Ci0gICAgLy8gMS4gQSBjbGFzcyBpcyBjcmVhdGVkIGFuZCB1c2VkLCBzbyBpdHMgY29u
dGV4dCBkYXRhIGlzIHN0b3JlZCBpbiBKU0dsb2JhbERhdGEgaGFzaCBtYXAuCisgICAgLy8gMS4g
QSBjbGFzcyBpcyBjcmVhdGVkIGFuZCB1c2VkLCBzbyBpdHMgY29udGV4dCBkYXRhIGlzIHN0b3Jl
ZCBpbiBWTSBoYXNoIG1hcC4KICAgICAvLyAyLiBUaGUgY2xhc3MgaXMgcmVsZWFzZWQsIGFuZCB3
aGVuIGFsbCBKUyBvYmplY3RzIHRoYXQgdXNlIGl0IGFyZSBjb2xsZWN0ZWQsIE9wYXF1ZUpTQ2xh
c3MKICAgICAvLyBpcyBkZWxldGVkICh0aGF0J3MgdGhlIHBhcnQgcHJldmVudGVkIGJ5IHRoaXMg
UmVmUHRyKS4KICAgICAvLyAzLiBBbm90aGVyIGNsYXNzIGlzIGNyZWF0ZWQgYXQgdGhlIHNhbWUg
YWRkcmVzcy4KLSAgICAvLyA0LiBXaGVuIGl0IGlzIHVzZWQsIHRoZSBvbGQgY29udGV4dCBkYXRh
IGlzIGZvdW5kIGluIEpTR2xvYmFsRGF0YSBhbmQgdXNlZC4KKyAgICAvLyA0LiBXaGVuIGl0IGlz
IHVzZWQsIHRoZSBvbGQgY29udGV4dCBkYXRhIGlzIGZvdW5kIGluIFZNIGFuZCB1c2VkLgogICAg
IFJlZlB0cjxPcGFxdWVKU0NsYXNzPiBtX2NsYXNzOwogCiAgICAgT3duUHRyPE9wYXF1ZUpTQ2xh
c3NTdGF0aWNWYWx1ZXNUYWJsZT4gc3RhdGljVmFsdWVzOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NvbnRleHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NvbnRleHQubW0JKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDcg
QEAgLSAoSlNWYWx1ZSAqKWV2YWx1YXRlU2NyaXB0OihOU1N0cmluZyAqKQogLSAodm9pZClzZXRF
eGNlcHRpb246KEpTVmFsdWUgKil2YWx1ZQogewogICAgIGlmICh2YWx1ZSkKLSAgICAgICAgbV9l
eGNlcHRpb24uc2V0KHRvSlMobV9jb250ZXh0KS0+Z2xvYmFsRGF0YSgpLCB0b0pTKEpTVmFsdWVU
b09iamVjdChtX2NvbnRleHQsIHZhbHVlSW50ZXJuYWxWYWx1ZSh2YWx1ZSksIDApKSk7CisgICAg
ICAgIG1fZXhjZXB0aW9uLnNldCh0b0pTKG1fY29udGV4dCktPnZtKCksIHRvSlMoSlNWYWx1ZVRv
T2JqZWN0KG1fY29udGV4dCwgdmFsdWVJbnRlcm5hbFZhbHVlKHZhbHVlKSwgMCkpKTsKICAgICBl
bHNlCiAgICAgICAgIG1fZXhjZXB0aW9uLmNsZWFyKCk7CiB9CkBAIC0xOTAsNyArMTkwLDcgQEAg
LSAoaWQpaW5pdFdpdGhHbG9iYWxDb250ZXh0UmVmOihKU0dsb2JhbAogICAgICAgICByZXR1cm4g
bmlsOwogCiAgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250
ZXh0KS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgIG1fdmlydHVhbE1hY2hpbmUgPSBbW0pT
VmlydHVhbE1hY2hpbmUgdmlydHVhbE1hY2hpbmVXaXRoQ29udGV4dEdyb3VwUmVmOnRvUmVmKCZn
bG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSldIHJldGFpbl07CisgICAgbV92aXJ0dWFsTWFjaGlu
ZSA9IFtbSlNWaXJ0dWFsTWFjaGluZSB2aXJ0dWFsTWFjaGluZVdpdGhDb250ZXh0R3JvdXBSZWY6
dG9SZWYoJmdsb2JhbE9iamVjdC0+dm0oKSldIHJldGFpbl07CiAgICAgQVNTRVJUKG1fdmlydHVh
bE1hY2hpbmUpOwogICAgIG1fY29udGV4dCA9IEpTR2xvYmFsQ29udGV4dFJldGFpbihjb250ZXh0
KTsKICAgICBtX3dyYXBwZXJNYXAgPSBbW0pTV3JhcHBlck1hcCBhbGxvY10gaW5pdFdpdGhDb250
ZXh0OnNlbGZdOwpAQCAtMjU3LDcgKzI1Nyw3IEBAIC0gKEpTVmFsdWUgKil3cmFwcGVyRm9ySlNP
YmplY3Q6KEpTVmFsdWUKIAogKyAoSlNDb250ZXh0ICopY29udGV4dFdpdGhHbG9iYWxDb250ZXh0
UmVmOihKU0dsb2JhbENvbnRleHRSZWYpZ2xvYmFsQ29udGV4dAogewotICAgIEpTVmlydHVhbE1h
Y2hpbmUgKnZpcnR1YWxNYWNoaW5lID0gW0pTVmlydHVhbE1hY2hpbmUgdmlydHVhbE1hY2hpbmVX
aXRoQ29udGV4dEdyb3VwUmVmOnRvUmVmKCZ0b0pTKGdsb2JhbENvbnRleHQpLT5nbG9iYWxEYXRh
KCkpXTsKKyAgICBKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtKU1ZpcnR1YWxN
YWNoaW5lIHZpcnR1YWxNYWNoaW5lV2l0aENvbnRleHRHcm91cFJlZjp0b1JlZigmdG9KUyhnbG9i
YWxDb250ZXh0KS0+dm0oKSldOwogICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFt2aXJ0dWFsTWFj
aGluZSBjb250ZXh0Rm9yR2xvYmFsQ29udGV4dFJlZjpnbG9iYWxDb250ZXh0XTsKICAgICBpZiAo
IWNvbnRleHQpCiAgICAgICAgIGNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRXaXRo
R2xvYmFsQ29udGV4dFJlZjpnbG9iYWxDb250ZXh0XSBhdXRvcmVsZWFzZV07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCShyZXZpc2lvbiAxNDg2NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU2LDcgKzU2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIEpTQ29udGV4dEdy
b3VwUmVmIEpTQ29udGV4dEdyb3VwQ3JlYXRlKCkKIHsKICAgICBpbml0aWFsaXplVGhyZWFkaW5n
KCk7Ci0gICAgcmV0dXJuIHRvUmVmKEpTR2xvYmFsRGF0YTo6Y3JlYXRlQ29udGV4dEdyb3VwKCku
bGVha1JlZigpKTsKKyAgICByZXR1cm4gdG9SZWYoVk06OmNyZWF0ZUNvbnRleHRHcm91cCgpLmxl
YWtSZWYoKSk7CiB9CiAKIEpTQ29udGV4dEdyb3VwUmVmIEpTQ29udGV4dEdyb3VwUmV0YWluKEpT
Q29udGV4dEdyb3VwUmVmIGdyb3VwKQpAQCAtNjgsMTIgKzY4LDEyIEBAIEpTQ29udGV4dEdyb3Vw
UmVmIEpTQ29udGV4dEdyb3VwUmV0YWluKEoKIHZvaWQgSlNDb250ZXh0R3JvdXBSZWxlYXNlKEpT
Q29udGV4dEdyb3VwUmVmIGdyb3VwKQogewogICAgIElkZW50aWZpZXJUYWJsZSogc2F2ZWRJZGVu
dGlmaWVyVGFibGU7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gKnRvSlMoZ3JvdXAp
OworICAgIFZNJiB2bSA9ICp0b0pTKGdyb3VwKTsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrSG9s
ZGVyIGxvY2soZ2xvYmFsRGF0YSk7Ci0gICAgICAgIHNhdmVkSWRlbnRpZmllclRhYmxlID0gd3Rm
VGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoZ2xvYmFsRGF0YS5pZGVudGlm
aWVyVGFibGUpOwotICAgICAgICBnbG9iYWxEYXRhLmRlcmVmKCk7CisgICAgICAgIEpTTG9ja0hv
bGRlciBsb2NrKHZtKTsKKyAgICAgICAgc2F2ZWRJZGVudGlmaWVyVGFibGUgPSB3dGZUaHJlYWRE
YXRhKCkuc2V0Q3VycmVudElkZW50aWZpZXJUYWJsZSh2bS5pZGVudGlmaWVyVGFibGUpOworICAg
ICAgICB2bS5kZXJlZigpOwogICAgIH0KIAogICAgIHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50
SWRlbnRpZmllclRhYmxlKHNhdmVkSWRlbnRpZmllclRhYmxlKTsKQEAgLTg4LDE5ICs4OCwxOSBA
QCBzdGF0aWMgYm9vbCBpbnRlcm5hbFNjcmlwdFRpbWVvdXRDYWxsYmFjCiAKIHZvaWQgSlNDb250
ZXh0R3JvdXBTZXRFeGVjdXRpb25UaW1lTGltaXQoSlNDb250ZXh0R3JvdXBSZWYgZ3JvdXAsIGRv
dWJsZSBsaW1pdCwgSlNTaG91bGRUZXJtaW5hdGVDYWxsYmFjayBjYWxsYmFjaywgdm9pZCogY2Fs
bGJhY2tEYXRhKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9ICp0b0pTKGdyb3Vw
KTsKLSAgICBBUElFbnRyeVNoaW0gZW50cnlTaGltKCZnbG9iYWxEYXRhKTsKLSAgICBXYXRjaGRv
ZyYgd2F0Y2hkb2cgPSBnbG9iYWxEYXRhLndhdGNoZG9nOworICAgIFZNJiB2bSA9ICp0b0pTKGdy
b3VwKTsKKyAgICBBUElFbnRyeVNoaW0gZW50cnlTaGltKCZ2bSk7CisgICAgV2F0Y2hkb2cmIHdh
dGNoZG9nID0gdm0ud2F0Y2hkb2c7CiAgICAgdm9pZCogY2FsbGJhY2tQdHIgPSByZWludGVycHJl
dF9jYXN0PHZvaWQqPihjYWxsYmFjayk7Ci0gICAgd2F0Y2hkb2cuc2V0VGltZUxpbWl0KGdsb2Jh
bERhdGEsIGxpbWl0LCBpbnRlcm5hbFNjcmlwdFRpbWVvdXRDYWxsYmFjaywgY2FsbGJhY2tQdHIs
IGNhbGxiYWNrRGF0YSk7CisgICAgd2F0Y2hkb2cuc2V0VGltZUxpbWl0KHZtLCBsaW1pdCwgaW50
ZXJuYWxTY3JpcHRUaW1lb3V0Q2FsbGJhY2ssIGNhbGxiYWNrUHRyLCBjYWxsYmFja0RhdGEpOwog
fQogCiB2b2lkIEpTQ29udGV4dEdyb3VwQ2xlYXJFeGVjdXRpb25UaW1lTGltaXQoSlNDb250ZXh0
R3JvdXBSZWYgZ3JvdXApCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gKnRvSlMo
Z3JvdXApOwotICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oJmdsb2JhbERhdGEpOwotICAgIFdh
dGNoZG9nJiB3YXRjaGRvZyA9IGdsb2JhbERhdGEud2F0Y2hkb2c7Ci0gICAgd2F0Y2hkb2cuc2V0
VGltZUxpbWl0KGdsb2JhbERhdGEsIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5p
dHkoKSk7CisgICAgVk0mIHZtID0gKnRvSlMoZ3JvdXApOworICAgIEFQSUVudHJ5U2hpbSBlbnRy
eVNoaW0oJnZtKTsKKyAgICBXYXRjaGRvZyYgd2F0Y2hkb2cgPSB2bS53YXRjaGRvZzsKKyAgICB3
YXRjaGRvZy5zZXRUaW1lTGltaXQodm0sIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5m
aW5pdHkoKSk7CiB9CiAKIC8vIEZyb20gdGhlIEFQSSdzIHBlcnNwZWN0aXZlLCBhIGdsb2JhbCBj
b250ZXh0IHJlbWFpbnMgYWxpdmUgaWZmIGl0IGhhcyBiZWVuIEpTR2xvYmFsQ29udGV4dFJldGFp
bmVkLgpAQCAtMTEwLDEwICsxMTAsMTAgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xvYmFsQ29u
dGV4dENyZWF0ZQogICAgIGluaXRpYWxpemVUaHJlYWRpbmcoKTsKIAogI2lmIE9TKERBUldJTikK
LSAgICAvLyBJZiB0aGUgYXBwbGljYXRpb24gd2FzIGxpbmtlZCBiZWZvcmUgSlNHbG9iYWxDb250
ZXh0Q3JlYXRlIHdhcyBjaGFuZ2VkIHRvIHVzZSBhIHVuaXF1ZSBKU0dsb2JhbERhdGEsCisgICAg
Ly8gSWYgdGhlIGFwcGxpY2F0aW9uIHdhcyBsaW5rZWQgYmVmb3JlIEpTR2xvYmFsQ29udGV4dENy
ZWF0ZSB3YXMgY2hhbmdlZCB0byB1c2UgYSB1bmlxdWUgVk0sCiAgICAgLy8gd2UgdXNlIGEgc2hh
cmVkIG9uZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCiAgICAgaWYgKE5TVmVyc2lvbk9m
TGlua1RpbWVMaWJyYXJ5KCJKYXZhU2NyaXB0Q29yZSIpIDw9IHdlYmtpdEZpcnN0VmVyc2lvbldp
dGhDb25jdXJyZW50R2xvYmFsQ29udGV4dHMpIHsKLSAgICAgICAgcmV0dXJuIEpTR2xvYmFsQ29u
dGV4dENyZWF0ZUluR3JvdXAodG9SZWYoJkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuY2UoKSks
IGdsb2JhbE9iamVjdENsYXNzKTsKKyAgICAgICAgcmV0dXJuIEpTR2xvYmFsQ29udGV4dENyZWF0
ZUluR3JvdXAodG9SZWYoJlZNOjpzaGFyZWRJbnN0YW5jZSgpKSwgZ2xvYmFsT2JqZWN0Q2xhc3Mp
OwogICAgIH0KICNlbmRpZiAvLyBPUyhEQVJXSU4pCiAKQEAgLTEyNCwyMiArMTI0LDIyIEBAIEpT
R2xvYmFsQ29udGV4dFJlZiBKU0dsb2JhbENvbnRleHRDcmVhdGUKIHsKICAgICBpbml0aWFsaXpl
VGhyZWFkaW5nKCk7CiAKLSAgICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBnbG9iYWxEYXRhID0gZ3Jv
dXAgPyBQYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4odG9KUyhncm91cCkpIDogSlNHbG9iYWxEYXRh
OjpjcmVhdGVDb250ZXh0R3JvdXAoKTsKKyAgICBSZWZQdHI8Vk0+IHZtID0gZ3JvdXAgPyBQYXNz
UmVmUHRyPFZNPih0b0pTKGdyb3VwKSkgOiBWTTo6Y3JlYXRlQ29udGV4dEdyb3VwKCk7CiAKLSAg
ICBBUElFbnRyeVNoaW0gZW50cnlTaGltKGdsb2JhbERhdGEuZ2V0KCksIGZhbHNlKTsKLSAgICBn
bG9iYWxEYXRhLT5tYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpOworICAgIEFQSUVudHJ5
U2hpbSBlbnRyeVNoaW0odm0uZ2V0KCksIGZhbHNlKTsKKyAgICB2bS0+bWFrZVVzYWJsZUZyb21N
dWx0aXBsZVRocmVhZHMoKTsKIAogICAgIGlmICghZ2xvYmFsT2JqZWN0Q2xhc3MpIHsKLSAgICAg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTR2xvYmFsT2JqZWN0OjpjcmVhdGUo
Kmdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKmdsb2JhbERhdGEs
IGpzTnVsbCgpKSk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0ds
b2JhbE9iamVjdDo6Y3JlYXRlKCp2bSwgSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgq
dm0sIGpzTnVsbCgpKSk7CiAgICAgICAgIHJldHVybiBKU0dsb2JhbENvbnRleHRSZXRhaW4odG9H
bG9iYWxSZWYoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpKTsKICAgICB9CiAKLSAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVj
dD46OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0Q2xhc3MsIEpTQ2FsbGJhY2tPYmpl
Y3Q8SlNHbG9iYWxPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUoKmdsb2JhbERhdGEsIDAsIGpzTnVs
bCgpKSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQ2FsbGJhY2tPYmpl
Y3Q8SlNHbG9iYWxPYmplY3Q+OjpjcmVhdGUoKnZtLCBnbG9iYWxPYmplY3RDbGFzcywgSlNDYWxs
YmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZSgqdm0sIDAsIGpzTnVs
bCgpKSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7
CiAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBnbG9iYWxPYmplY3RDbGFzcy0+cHJvdG90eXBlKGV4
ZWMpOwogICAgIGlmICghcHJvdG90eXBlKQogICAgICAgICBwcm90b3R5cGUgPSBqc051bGwoKTsK
LSAgICBnbG9iYWxPYmplY3QtPnJlc2V0UHJvdG90eXBlKCpnbG9iYWxEYXRhLCBwcm90b3R5cGUp
OworICAgIGdsb2JhbE9iamVjdC0+cmVzZXRQcm90b3R5cGUoKnZtLCBwcm90b3R5cGUpOwogICAg
IHJldHVybiBKU0dsb2JhbENvbnRleHRSZXRhaW4odG9HbG9iYWxSZWYoZXhlYykpOwogfQogCkBA
IC0xNDgsOSArMTQ4LDkgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xvYmFsQ29udGV4dFJldGFp
bgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKICAgICBBUElFbnRyeVNoaW0gZW50
cnlTaGltKGV4ZWMpOwogCi0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgZ2NQcm90ZWN0KGV4ZWMt
PmR5bmFtaWNHbG9iYWxPYmplY3QoKSk7Ci0gICAgZ2xvYmFsRGF0YS5yZWYoKTsKKyAgICB2bS5y
ZWYoKTsKICAgICByZXR1cm4gY3R4OwogfQogCkBAIC0xNjEsMTMgKzE2MSwxMyBAQCB2b2lkIEpT
R2xvYmFsQ29udGV4dFJlbGVhc2UoSlNHbG9iYWxDb250CiAgICAgewogICAgICAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKIAotICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBl
eGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIHNhdmVkSWRlbnRpZmllclRhYmxlID0gd3RmVGhy
ZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoZ2xvYmFsRGF0YS5pZGVudGlmaWVy
VGFibGUpOworICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBzYXZlZElkZW50
aWZpZXJUYWJsZSA9IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKHZt
LmlkZW50aWZpZXJUYWJsZSk7CiAKICAgICAgICAgYm9vbCBwcm90ZWN0Q291bnRJc1plcm8gPSBI
ZWFwOjpoZWFwKGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSktPnVucHJvdGVjdChleGVjLT5k
eW5hbWljR2xvYmFsT2JqZWN0KCkpOwogICAgICAgICBpZiAocHJvdGVjdENvdW50SXNaZXJvKQot
ICAgICAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCk7
Ci0gICAgICAgIGdsb2JhbERhdGEuZGVyZWYoKTsKKyAgICAgICAgICAgIHZtLmhlYXAucmVwb3J0
QWJhbmRvbmVkT2JqZWN0R3JhcGgoKTsKKyAgICAgICAgdm0uZGVyZWYoKTsKICAgICB9CiAKICAg
ICB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElkZW50aWZpZXJUYWJsZShzYXZlZElkZW50aWZp
ZXJUYWJsZSk7CkBAIC0xODUsNyArMTg1LDcgQEAgSlNPYmplY3RSZWYgSlNDb250ZXh0R2V0R2xv
YmFsT2JqZWN0KEpTQwogSlNDb250ZXh0R3JvdXBSZWYgSlNDb250ZXh0R2V0R3JvdXAoSlNDb250
ZXh0UmVmIGN0eCkKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgcmV0
dXJuIHRvUmVmKCZleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIHJldHVybiB0b1JlZigmZXhlYy0+
dm0oKSk7CiB9CiAKIEpTR2xvYmFsQ29udGV4dFJlZiBKU0NvbnRleHRHZXRHbG9iYWxDb250ZXh0
KEpTQ29udGV4dFJlZiBjdHgpCkBAIC0yMDIsNyArMjAyLDcgQEAgSlNTdHJpbmdSZWYgSlNDb250
ZXh0Q3JlYXRlQmFja3RyYWNlKEpTQwogICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFj
ZTsKLSAgICBJbnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFjZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBz
dGFja1RyYWNlLCBtYXhTdGFja1NpemUpOworICAgIEludGVycHJldGVyOjpnZXRTdGFja1RyYWNl
KCZleGVjLT52bSgpLCBzdGFja1RyYWNlLCBtYXhTdGFja1NpemUpOwogCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzdGFja1RyYWNlLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIFN0cmluZyB1
cmxTdHJpbmc7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNw
cAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVj
dFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgSlNPYmplY3RSZWYgSlNP
YmplY3RNYWtlKEpTQ29udGV4dFJlZiBjdAogCiAgICAgSlNDYWxsYmFja09iamVjdDxKU0Rlc3Ry
dWN0aWJsZU9iamVjdD4qIG9iamVjdCA9IEpTQ2FsbGJhY2tPYmplY3Q8SlNEZXN0cnVjdGlibGVP
YmplY3Q+OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNhbGxiYWNrT2JqZWN0U3RydWN0dXJlKCksIGpzQ2xhc3Ms
IGRhdGEpOwogICAgIGlmIChKU09iamVjdCogcHJvdG90eXBlID0ganNDbGFzcy0+cHJvdG90eXBl
KGV4ZWMpKQotICAgICAgICBvYmplY3QtPnNldFByb3RvdHlwZShleGVjLT5nbG9iYWxEYXRhKCks
IHByb3RvdHlwZSk7CisgICAgICAgIG9iamVjdC0+c2V0UHJvdG90eXBlKGV4ZWMtPnZtKCksIHBy
b3RvdHlwZSk7CiAKICAgICByZXR1cm4gdG9SZWYob2JqZWN0KTsKIH0KQEAgLTExMCw3ICsxMTAs
NyBAQCBKU09iamVjdFJlZiBKU09iamVjdE1ha2VDb25zdHJ1Y3RvcihKU0NvCiAgICAgICAgIGpz
UHJvdG90eXBlID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUo
KTsKIAogICAgIEpTQ2FsbGJhY2tDb25zdHJ1Y3RvciogY29uc3RydWN0b3IgPSBKU0NhbGxiYWNr
Q29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZSgp
LCBqc0NsYXNzLCBjYWxsQXNDb25zdHJ1Y3Rvcik7Ci0gICAgY29uc3RydWN0b3ItPnB1dERpcmVj
dChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIGpz
UHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgY29uc3Ry
dWN0b3ItPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90
eXBlLCBqc1Byb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAg
IHJldHVybiB0b1JlZihjb25zdHJ1Y3Rvcik7CiB9CiAKQEAgLTExOSw3ICsxMTksNyBAQCBKU09i
amVjdFJlZiBKU09iamVjdE1ha2VGdW5jdGlvbihKU0NvbnRlCiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gdG9KUyhjdHgpOwogICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7CiAKLSAgICBJ
ZGVudGlmaWVyIG5hbWVJRCA9IG5hbWUgPyBuYW1lLT5pZGVudGlmaWVyKCZleGVjLT5nbG9iYWxE
YXRhKCkpIDogSWRlbnRpZmllcihleGVjLCAiYW5vbnltb3VzIik7CisgICAgSWRlbnRpZmllciBu
YW1lSUQgPSBuYW1lID8gbmFtZS0+aWRlbnRpZmllcigmZXhlYy0+dm0oKSkgOiBJZGVudGlmaWVy
KGV4ZWMsICJhbm9ueW1vdXMiKTsKICAgICAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdz
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJDb3VudDsgaSsrKQpAQCAt
MjM3LDcgKzIzNyw3IEBAIHZvaWQgSlNPYmplY3RTZXRQcm90b3R5cGUoSlNDb250ZXh0UmVmIGMK
ICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7CiAgICAgSlNWYWx1ZSBqc1Zh
bHVlID0gdG9KUyhleGVjLCB2YWx1ZSk7CiAKLSAgICBqc09iamVjdC0+c2V0UHJvdG90eXBlV2l0
aEN5Y2xlQ2hlY2soZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc1ZhbHVlLmlzT2JqZWN0KCkgPyBqc1Zh
bHVlIDoganNOdWxsKCkpOworICAgIGpzT2JqZWN0LT5zZXRQcm90b3R5cGVXaXRoQ3ljbGVDaGVj
ayhleGVjLT52bSgpLCBqc1ZhbHVlLmlzT2JqZWN0KCkgPyBqc1ZhbHVlIDoganNOdWxsKCkpOwog
fQogCiBib29sIEpTT2JqZWN0SGFzUHJvcGVydHkoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RS
ZWYgb2JqZWN0LCBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUpCkBAIC0yNDcsNyArMjQ3LDcgQEAg
Ym9vbCBKU09iamVjdEhhc1Byb3BlcnR5KEpTQ29udGV4dFJlZiBjdAogCiAgICAgSlNPYmplY3Qq
IGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogICAgIAotICAgIHJldHVybiBqc09iamVjdC0+aGFz
UHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRh
KCkpKTsKKyAgICByZXR1cm4ganNPYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFt
ZS0+aWRlbnRpZmllcigmZXhlYy0+dm0oKSkpOwogfQogCiBKU1ZhbHVlUmVmIEpTT2JqZWN0R2V0
UHJvcGVydHkoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0LCBKU1N0cmluZ1Jl
ZiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKQEAgLTI1Nyw3ICsyNTcsNyBA
QCBKU1ZhbHVlUmVmIEpTT2JqZWN0R2V0UHJvcGVydHkoSlNDb250ZXh0CiAKICAgICBKU09iamVj
dCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7CiAKLSAgICBKU1ZhbHVlIGpzVmFsdWUgPSBqc09i
amVjdC0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0
YSgpKSk7CisgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNPYmplY3QtPmdldChleGVjLCBwcm9wZXJ0
eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPnZtKCkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAgICpleGNlcHRpb24g
PSB0b1JlZihleGVjLCBleGVjLT5leGNlcHRpb24oKSk7CkBAIC0yNzIsNyArMjcyLDcgQEAgdm9p
ZCBKU09iamVjdFNldFByb3BlcnR5KEpTQ29udGV4dFJlZiBjdAogICAgIEFQSUVudHJ5U2hpbSBl
bnRyeVNoaW0oZXhlYyk7CiAKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7
Ci0gICAgSWRlbnRpZmllciBuYW1lKHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmZXhlYy0+Z2xv
YmFsRGF0YSgpKSk7CisgICAgSWRlbnRpZmllciBuYW1lKHByb3BlcnR5TmFtZS0+aWRlbnRpZmll
cigmZXhlYy0+dm0oKSkpOwogICAgIEpTVmFsdWUganNWYWx1ZSA9IHRvSlMoZXhlYywgdmFsdWUp
OwogCiAgICAgaWYgKGF0dHJpYnV0ZXMgJiYgIWpzT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBu
YW1lKSkKQEAgLTMyOSw3ICszMjksNyBAQCBib29sIEpTT2JqZWN0RGVsZXRlUHJvcGVydHkoSlND
b250ZXh0UmVmCiAKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7CiAKLSAg
ICBib29sIHJlc3VsdCA9IGpzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShq
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRh
KCkpKTsKKyAgICBib29sIHJlc3VsdCA9IGpzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQ
cm9wZXJ0eShqc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZleGVjLT52
bSgpKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAgIGlmIChleGNl
cHRpb24pCiAgICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhlYy0+ZXhjZXB0
aW9uKCkpOwpAQCAtMzgyLDcgKzM4Miw3IEBAIEpTVmFsdWVSZWYgSlNPYmplY3RHZXRQcml2YXRl
UHJvcGVydHkoSlMKICAgICBBUElFbnRyeVNoaW0gZW50cnlTaGltKGV4ZWMpOwogICAgIEpTT2Jq
ZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKICAgICBKU1ZhbHVlIHJlc3VsdDsKLSAgICBJ
ZGVudGlmaWVyIG5hbWUocHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRh
KCkpKTsKKyAgICBJZGVudGlmaWVyIG5hbWUocHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZleGVj
LT52bSgpKSk7CiAgICAgaWYgKGpzT2JqZWN0LT5pbmhlcml0cygmSlNDYWxsYmFja09iamVjdDxK
U0dsb2JhbE9iamVjdD46OnNfaW5mbykpCiAgICAgICAgIHJlc3VsdCA9IGpzQ2FzdDxKU0NhbGxi
YWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pio+KGpzT2JqZWN0KS0+Z2V0UHJpdmF0ZVByb3BlcnR5
KG5hbWUpOwogICAgIGVsc2UgaWYgKGpzT2JqZWN0LT5pbmhlcml0cygmSlNDYWxsYmFja09iamVj
dDxKU0Rlc3RydWN0aWJsZU9iamVjdD46OnNfaW5mbykpCkBAIC00MDAsMTggKzQwMCwxOCBAQCBi
b29sIEpTT2JqZWN0U2V0UHJpdmF0ZVByb3BlcnR5KEpTQ29udGV4CiAgICAgQVBJRW50cnlTaGlt
IGVudHJ5U2hpbShleGVjKTsKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7
CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWUgPyB0b0pTKGV4ZWMsIHZhbHVlKSA6IEpTVmFs
dWUoKTsKLSAgICBJZGVudGlmaWVyIG5hbWUocHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZleGVj
LT5nbG9iYWxEYXRhKCkpKTsKKyAgICBJZGVudGlmaWVyIG5hbWUocHJvcGVydHlOYW1lLT5pZGVu
dGlmaWVyKCZleGVjLT52bSgpKSk7CiAgICAgaWYgKGpzT2JqZWN0LT5pbmhlcml0cygmSlNDYWxs
YmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OnNfaW5mbykpIHsKLSAgICAgICAganNDYXN0PEpT
Q2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+Kj4oanNPYmplY3QpLT5zZXRQcml2YXRlUHJv
cGVydHkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBuYW1lLCBqc1ZhbHVlKTsKKyAgICAgICAganNDYXN0
PEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+Kj4oanNPYmplY3QpLT5zZXRQcml2YXRl
UHJvcGVydHkoZXhlYy0+dm0oKSwgbmFtZSwganNWYWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICBpZiAoanNPYmplY3QtPmluaGVyaXRzKCZKU0NhbGxiYWNrT2JqZWN0PEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6c19pbmZvKSkgewotICAgICAgICBqc0Nhc3Q8SlNDYWxsYmFj
a09iamVjdDxKU0Rlc3RydWN0aWJsZU9iamVjdD4qPihqc09iamVjdCktPnNldFByaXZhdGVQcm9w
ZXJ0eShleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUsIGpzVmFsdWUpOworICAgICAgICBqc0Nhc3Q8
SlNDYWxsYmFja09iamVjdDxKU0Rlc3RydWN0aWJsZU9iamVjdD4qPihqc09iamVjdCktPnNldFBy
aXZhdGVQcm9wZXJ0eShleGVjLT52bSgpLCBuYW1lLCBqc1ZhbHVlKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgaWYgKGpzT2JqZWN0
LT5pbmhlcml0cygmSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpzX2luZm8p
KSB7Ci0gICAgICAgIGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD4q
Pihqc09iamVjdCktPnNldFByaXZhdGVQcm9wZXJ0eShleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUs
IGpzVmFsdWUpOworICAgICAgICBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJP
YmplY3Q+Kj4oanNPYmplY3QpLT5zZXRQcml2YXRlUHJvcGVydHkoZXhlYy0+dm0oKSwgbmFtZSwg
anNWYWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgpAQCAtNDIzLDcg
KzQyMyw3IEBAIGJvb2wgSlNPYmplY3REZWxldGVQcml2YXRlUHJvcGVydHkoSlNDb24KICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7CiAgICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShl
eGVjKTsKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7Ci0gICAgSWRlbnRp
ZmllciBuYW1lKHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpKSk7
CisgICAgSWRlbnRpZmllciBuYW1lKHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmZXhlYy0+dm0o
KSkpOwogICAgIGlmIChqc09iamVjdC0+aW5oZXJpdHMoJkpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9i
YWxPYmplY3Q+OjpzX2luZm8pKSB7CiAgICAgICAgIGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0PEpT
R2xvYmFsT2JqZWN0Pio+KGpzT2JqZWN0KS0+ZGVsZXRlUHJpdmF0ZVByb3BlcnR5KG5hbWUpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTUyNSwxNCArNTI1LDE0IEBAIEpTT2JqZWN0UmVmIEpT
T2JqZWN0Q2FsbEFzQ29uc3RydWN0b3IoSlMKIHN0cnVjdCBPcGFxdWVKU1Byb3BlcnR5TmFtZUFy
cmF5IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBPcGFxdWVK
U1Byb3BlcnR5TmFtZUFycmF5KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKKyAgICBPcGFxdWVK
U1Byb3BlcnR5TmFtZUFycmF5KFZNKiB2bSkKICAgICAgICAgOiByZWZDb3VudCgwKQotICAgICAg
ICAsIGdsb2JhbERhdGEoZ2xvYmFsRGF0YSkKKyAgICAgICAgLCB2bSh2bSkKICAgICB7CiAgICAg
fQogICAgIAogICAgIHVuc2lnbmVkIHJlZkNvdW50OwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YTsKKyAgICBWTSogdm07CiAgICAgVmVjdG9yPEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiA+
IGFycmF5OwogfTsKIApAQCAtNTQyLDEwICs1NDIsMTAgQEAgSlNQcm9wZXJ0eU5hbWVBcnJheVJl
ZiBKU09iamVjdENvcHlQcm9wZQogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKICAg
ICBBUElFbnRyeVNoaW0gZW50cnlTaGltKGV4ZWMpOwogCi0gICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
IAotICAgIEpTUHJvcGVydHlOYW1lQXJyYXlSZWYgcHJvcGVydHlOYW1lcyA9IG5ldyBPcGFxdWVK
U1Byb3BlcnR5TmFtZUFycmF5KGdsb2JhbERhdGEpOwotICAgIFByb3BlcnR5TmFtZUFycmF5IGFy
cmF5KGdsb2JhbERhdGEpOworICAgIEpTUHJvcGVydHlOYW1lQXJyYXlSZWYgcHJvcGVydHlOYW1l
cyA9IG5ldyBPcGFxdWVKU1Byb3BlcnR5TmFtZUFycmF5KHZtKTsKKyAgICBQcm9wZXJ0eU5hbWVB
cnJheSBhcnJheSh2bSk7CiAgICAganNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldFByb3BlcnR5
TmFtZXMoanNPYmplY3QsIGV4ZWMsIGFycmF5LCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsK
IAogICAgIHNpemVfdCBzaXplID0gYXJyYXkuc2l6ZSgpOwpAQCAtNTY1LDcgKzU2NSw3IEBAIEpT
UHJvcGVydHlOYW1lQXJyYXlSZWYgSlNQcm9wZXJ0eU5hbWVBcnIKIHZvaWQgSlNQcm9wZXJ0eU5h
bWVBcnJheVJlbGVhc2UoSlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBhcnJheSkKIHsKICAgICBpZiAo
LS1hcnJheS0+cmVmQ291bnQgPT0gMCkgewotICAgICAgICBBUElFbnRyeVNoaW0gZW50cnlTaGlt
KGFycmF5LT5nbG9iYWxEYXRhLCBmYWxzZSk7CisgICAgICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNo
aW0oYXJyYXktPnZtLCBmYWxzZSk7CiAgICAgICAgIGRlbGV0ZSBhcnJheTsKICAgICB9CiB9CkBA
IC01ODMsNiArNTgzLDYgQEAgSlNTdHJpbmdSZWYgSlNQcm9wZXJ0eU5hbWVBcnJheUdldE5hbWVB
dAogdm9pZCBKU1Byb3BlcnR5TmFtZUFjY3VtdWxhdG9yQWRkTmFtZShKU1Byb3BlcnR5TmFtZUFj
Y3VtdWxhdG9yUmVmIGFycmF5LCBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgUHJv
cGVydHlOYW1lQXJyYXkqIHByb3BlcnR5TmFtZXMgPSB0b0pTKGFycmF5KTsKLSAgICBBUElFbnRy
eVNoaW0gZW50cnlTaGltKHByb3BlcnR5TmFtZXMtPmdsb2JhbERhdGEoKSk7Ci0gICAgcHJvcGVy
dHlOYW1lcy0+YWRkKHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcihwcm9wZXJ0eU5hbWVzLT5nbG9i
YWxEYXRhKCkpKTsKKyAgICBBUElFbnRyeVNoaW0gZW50cnlTaGltKHByb3BlcnR5TmFtZXMtPnZt
KCkpOworICAgIHByb3BlcnR5TmFtZXMtPmFkZChwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIocHJv
cGVydHlOYW1lcy0+dm0oKSkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U1NjcmlwdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U1NjcmlwdFJlZi5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNTY3JpcHRSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAj
aW5jbHVkZSAiQVBJU2hpbXMuaCIKICNpbmNsdWRlICJDb21wbGV0aW9uLmgiCiAjaW5jbHVkZSAi
SlNCYXNlUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZN
LmgiCiAjaW5jbHVkZSAiSlNTY3JpcHRSZWZQcml2YXRlLmgiCiAjaW5jbHVkZSAiT3BhcXVlSlNT
dHJpbmcuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCkBAIC00MSw5ICs0MSw5IEBAIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKIHN0cnVjdCBPcGFxdWVKU1NjcmlwdCA6IHB1YmxpYyBTb3VyY2VQ
cm92aWRlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFdURjo6UGFzc1JlZlB0cjxPcGFxdWVKU1Nj
cmlwdD4gY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgU3RyaW5nJiB1cmws
IGludCBzdGFydGluZ0xpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlKQorICAgIHN0YXRp
YyBXVEY6OlBhc3NSZWZQdHI8T3BhcXVlSlNTY3JpcHQ+IGNyZWF0ZShWTSogdm0sIGNvbnN0IFN0
cmluZyYgdXJsLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OmFkb3B0UmVmKG5ldyBPcGFxdWVKU1NjcmlwdChn
bG9iYWxEYXRhLCB1cmwsIHN0YXJ0aW5nTGluZU51bWJlciwgc291cmNlKSk7CisgICAgICAgIHJl
dHVybiBXVEY6OmFkb3B0UmVmKG5ldyBPcGFxdWVKU1NjcmlwdCh2bSwgdXJsLCBzdGFydGluZ0xp
bmVOdW1iZXIsIHNvdXJjZSkpOwogICAgIH0KIAogICAgIGNvbnN0IFN0cmluZyYgc291cmNlKCkg
Y29uc3QgT1ZFUlJJREUKQEAgLTUxLDQyICs1MSw0MiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBtX3NvdXJjZTsKICAgICB9CiAKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEoKSBjb25z
dCB7IHJldHVybiBtX2dsb2JhbERhdGE7IH0KKyAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBt
X3ZtOyB9CiAKIHByaXZhdGU6Ci0gICAgT3BhcXVlSlNTY3JpcHQoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwgY29uc3Qg
U3RyaW5nJiBzb3VyY2UpCisgICAgT3BhcXVlSlNTY3JpcHQoVk0qIHZtLCBjb25zdCBTdHJpbmcm
IHVybCwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2UpCiAgICAg
ICAgIDogU291cmNlUHJvdmlkZXIodXJsLCBUZXh0UG9zaXRpb24oT3JkaW5hbE51bWJlcjo6ZnJv
bU9uZUJhc2VkSW50KHN0YXJ0aW5nTGluZU51bWJlciksIE9yZGluYWxOdW1iZXI6OmZpcnN0KCkp
KQotICAgICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorICAgICAgICAsIG1fdm0odm0p
CiAgICAgICAgICwgbV9zb3VyY2Uoc291cmNlKQogICAgIHsKICAgICB9CiAKICAgICB+T3BhcXVl
SlNTY3JpcHQoKSB7IH0KIAotICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworICAgIFZN
KiBtX3ZtOwogICAgIFN0cmluZyBtX3NvdXJjZTsKIH07CiAKLXN0YXRpYyBib29sIHBhcnNlU2Ny
aXB0KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQ
YXJzZXJFcnJvciYgZXJyb3IpCitzdGF0aWMgYm9vbCBwYXJzZVNjcmlwdChWTSogdm0sIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgUGFyc2VyRXJyb3ImIGVycm9yKQogewotICAgIHJldHVybiBK
U0M6OnBhcnNlPEpTQzo6UHJvZ3JhbU5vZGU+KGdsb2JhbERhdGEsIHNvdXJjZSwgMCwgSWRlbnRp
ZmllcigpLCBKU1BhcnNlTm9ybWFsLCBKU1BhcnNlUHJvZ3JhbUNvZGUsIGVycm9yKTsKKyAgICBy
ZXR1cm4gSlNDOjpwYXJzZTxKU0M6OlByb2dyYW1Ob2RlPih2bSwgc291cmNlLCAwLCBJZGVudGlm
aWVyKCksIEpTUGFyc2VOb3JtYWwsIEpTUGFyc2VQcm9ncmFtQ29kZSwgZXJyb3IpOwogfQogCiBl
eHRlcm4gIkMiIHsKIAogSlNTY3JpcHRSZWYgSlNTY3JpcHRDcmVhdGVSZWZlcmVuY2luZ0ltbW9y
dGFsQVNDSUlUZXh0KEpTQ29udGV4dEdyb3VwUmVmIGNvbnRleHRHcm91cCwgSlNTdHJpbmdSZWYg
dXJsLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBjb25zdCBjaGFyKiBzb3VyY2UsIHNpemVfdCBs
ZW5ndGgsIEpTU3RyaW5nUmVmKiBlcnJvck1lc3NhZ2UsIGludCogZXJyb3JMaW5lKQogewotICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IHRvSlMoY29udGV4dEdyb3VwKTsKLSAgICBBUElF
bnRyeVNoaW0gZW50cnlTaGltKGdsb2JhbERhdGEpOworICAgIFZNKiB2bSA9IHRvSlMoY29udGV4
dEdyb3VwKTsKKyAgICBBUElFbnRyeVNoaW0gZW50cnlTaGltKHZtKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgIGlmICghaXNBU0NJSShzb3VyY2Vb
aV0pKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgUmVmUHRyPE9wYXF1ZUpT
U2NyaXB0PiByZXN1bHQgPSBPcGFxdWVKU1NjcmlwdDo6Y3JlYXRlKGdsb2JhbERhdGEsIHVybC0+
c3RyaW5nKCksIHN0YXJ0aW5nTGluZU51bWJlciwgU3RyaW5nKFN0cmluZ0ltcGw6OmNyZWF0ZUZy
b21MaXRlcmFsKHNvdXJjZSwgbGVuZ3RoKSkpOworICAgIFJlZlB0cjxPcGFxdWVKU1NjcmlwdD4g
cmVzdWx0ID0gT3BhcXVlSlNTY3JpcHQ6OmNyZWF0ZSh2bSwgdXJsLT5zdHJpbmcoKSwgc3RhcnRp
bmdMaW5lTnVtYmVyLCBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoc291cmNl
LCBsZW5ndGgpKSk7CiAKICAgICBQYXJzZXJFcnJvciBlcnJvcjsKLSAgICBpZiAoIXBhcnNlU2Ny
aXB0KGdsb2JhbERhdGEsIFNvdXJjZUNvZGUocmVzdWx0KSwgZXJyb3IpKSB7CisgICAgaWYgKCFw
YXJzZVNjcmlwdCh2bSwgU291cmNlQ29kZShyZXN1bHQpLCBlcnJvcikpIHsKICAgICAgICAgaWYg
KGVycm9yTWVzc2FnZSkKICAgICAgICAgICAgICplcnJvck1lc3NhZ2UgPSBPcGFxdWVKU1N0cmlu
Zzo6Y3JlYXRlKGVycm9yLm1fbWVzc2FnZSkubGVha1JlZigpOwogICAgICAgICBpZiAoZXJyb3JM
aW5lKQpAQCAtOTksMTMgKzk5LDEzIEBAIEpTU2NyaXB0UmVmIEpTU2NyaXB0Q3JlYXRlUmVmZXJl
bmNpbmdJbW0KIAogSlNTY3JpcHRSZWYgSlNTY3JpcHRDcmVhdGVGcm9tU3RyaW5nKEpTQ29udGV4
dEdyb3VwUmVmIGNvbnRleHRHcm91cCwgSlNTdHJpbmdSZWYgdXJsLCBpbnQgc3RhcnRpbmdMaW5l
TnVtYmVyLCBKU1N0cmluZ1JlZiBzb3VyY2UsIEpTU3RyaW5nUmVmKiBlcnJvck1lc3NhZ2UsIGlu
dCogZXJyb3JMaW5lKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IHRvSlMoY29u
dGV4dEdyb3VwKTsKLSAgICBBUElFbnRyeVNoaW0gZW50cnlTaGltKGdsb2JhbERhdGEpOworICAg
IFZNKiB2bSA9IHRvSlMoY29udGV4dEdyb3VwKTsKKyAgICBBUElFbnRyeVNoaW0gZW50cnlTaGlt
KHZtKTsKIAotICAgIFJlZlB0cjxPcGFxdWVKU1NjcmlwdD4gcmVzdWx0ID0gT3BhcXVlSlNTY3Jp
cHQ6OmNyZWF0ZShnbG9iYWxEYXRhLCB1cmwtPnN0cmluZygpLCBzdGFydGluZ0xpbmVOdW1iZXIs
IHNvdXJjZS0+c3RyaW5nKCkpOworICAgIFJlZlB0cjxPcGFxdWVKU1NjcmlwdD4gcmVzdWx0ID0g
T3BhcXVlSlNTY3JpcHQ6OmNyZWF0ZSh2bSwgdXJsLT5zdHJpbmcoKSwgc3RhcnRpbmdMaW5lTnVt
YmVyLCBzb3VyY2UtPnN0cmluZygpKTsKIAogICAgIFBhcnNlckVycm9yIGVycm9yOwotICAgIGlm
ICghcGFyc2VTY3JpcHQoZ2xvYmFsRGF0YSwgU291cmNlQ29kZShyZXN1bHQpLCBlcnJvcikpIHsK
KyAgICBpZiAoIXBhcnNlU2NyaXB0KHZtLCBTb3VyY2VDb2RlKHJlc3VsdCksIGVycm9yKSkgewog
ICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKQogICAgICAgICAgICAgKmVycm9yTWVzc2FnZSA9IE9w
YXF1ZUpTU3RyaW5nOjpjcmVhdGUoZXJyb3IubV9tZXNzYWdlKS5sZWFrUmVmKCk7CiAgICAgICAg
IGlmIChlcnJvckxpbmUpCkBAIC0xMTgsMTMgKzExOCwxMyBAQCBKU1NjcmlwdFJlZiBKU1Njcmlw
dENyZWF0ZUZyb21TdHJpbmcoSlNDCiAKIHZvaWQgSlNTY3JpcHRSZXRhaW4oSlNTY3JpcHRSZWYg
c2NyaXB0KQogewotICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oc2NyaXB0LT5nbG9iYWxEYXRh
KCkpOworICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oc2NyaXB0LT52bSgpKTsKICAgICBzY3Jp
cHQtPnJlZigpOwogfQogCiB2b2lkIEpTU2NyaXB0UmVsZWFzZShKU1NjcmlwdFJlZiBzY3JpcHQp
CiB7Ci0gICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShzY3JpcHQtPmdsb2JhbERhdGEoKSk7Cisg
ICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShzY3JpcHQtPnZtKCkpOwogICAgIHNjcmlwdC0+ZGVy
ZWYoKTsKIH0KIApAQCAtMTMyLDcgKzEzMiw3IEBAIEpTVmFsdWVSZWYgSlNTY3JpcHRFdmFsdWF0
ZShKU0NvbnRleHRSZWYKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQpOwog
ICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7Ci0gICAgaWYgKHNjcmlwdC0+Z2xvYmFs
RGF0YSgpICE9ICZleGVjLT5nbG9iYWxEYXRhKCkpIHsKKyAgICBpZiAoc2NyaXB0LT52bSgpICE9
ICZleGVjLT52bSgpKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNWaXJ0dWFsTWFjaGluZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTVmlydHVhbE1hY2hpbmUubW0JKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjI0
LDEwICsyMjQsMTAgQEAgLSAoTlNNYXBUYWJsZSAqKWV4dGVybmFsT2JqZWN0R3JhcGgKIAogQGVu
ZAogCi12b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCB2b2lkKiByb290KQordm9pZCBzY2Fu
RXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiB2bSwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
ciwgdm9pZCogcm9vdCkKIHsKICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgSlNWaXJ0
dWFsTWFjaGluZSAqdmlydHVhbE1hY2hpbmUgPSBbSlNWaXJ0dWFsTWFjaGluZSB2aXJ0dWFsTWFj
aGluZVdpdGhDb250ZXh0R3JvdXBSZWY6dG9SZWYoJmdsb2JhbERhdGEpXTsKKyAgICAgICAgSlNW
aXJ0dWFsTWFjaGluZSAqdmlydHVhbE1hY2hpbmUgPSBbSlNWaXJ0dWFsTWFjaGluZSB2aXJ0dWFs
TWFjaGluZVdpdGhDb250ZXh0R3JvdXBSZWY6dG9SZWYoJnZtKV07CiAgICAgICAgIE5TTWFwVGFi
bGUgKmV4dGVybmFsT2JqZWN0R3JhcGggPSBbdmlydHVhbE1hY2hpbmUgZXh0ZXJuYWxPYmplY3RH
cmFwaF07CiAgICAgICAgIFZlY3Rvcjx2b2lkKj4gc3RhY2s7CiAgICAgICAgIHN0YWNrLmFwcGVu
ZChyb290KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGlu
ZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Zp
cnR1YWxNYWNoaW5lSW50ZXJuYWwuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNyArMzEsNyBAQAogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAKIG5hbWVzcGFjZSBK
U0MgewotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiBjbGFzcyBTbG90VmlzaXRvcjsK
IH0KIApAQCAtNTAsNyArNTAsNyBAQCBKU0NvbnRleHRHcm91cFJlZiBnZXRHcm91cEZyb21WaXJ0
dWFsTWFjCiBAZW5kCiAjZW5kaWYgLy8gZGVmaW5lZChfX09CSkNfXykKIAotdm9pZCBzY2FuRXh0
ZXJuYWxPYmplY3RHcmFwaChKU0M6OkpTR2xvYmFsRGF0YSYsIEpTQzo6U2xvdFZpc2l0b3ImLCB2
b2lkKiByb290KTsKK3ZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYsIEpTQzo6
U2xvdFZpc2l0b3ImLCB2b2lkKiByb290KTsKIAogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5tbQkod29ya2luZyBjb3B5KQpAQCAt
MTAyLDcgKzEwMiw3IEBAIHN0YXRpYyBKU09iamVjdFJlZiBtYWtlV3JhcHBlcihKU0NvbnRleHQK
ICAgICBKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmplY3Q+KiBvYmpl
Y3QgPSBKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmplY3Q+OjpjcmVh
dGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPm9iamNXcmFwcGVyT2JqZWN0U3RydWN0dXJlKCksIGpzQ2xhc3MsIDApOwogICAg
IG9iamVjdC0+c2V0V3JhcHBlZE9iamVjdCh3cmFwcGVkT2JqZWN0KTsKICAgICBpZiAoSlNDOjpK
U09iamVjdCogcHJvdG90eXBlID0ganNDbGFzcy0+cHJvdG90eXBlKGV4ZWMpKQotICAgICAgICBv
YmplY3QtPnNldFByb3RvdHlwZShleGVjLT5nbG9iYWxEYXRhKCksIHByb3RvdHlwZSk7CisgICAg
ICAgIG9iamVjdC0+c2V0UHJvdG90eXBlKGV4ZWMtPnZtKCksIHByb3RvdHlwZSk7CiAKICAgICBy
ZXR1cm4gdG9SZWYob2JqZWN0KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
T2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtNDksMTAgKzQ5LDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgT2JqQ0NhbGxiYWNrRnVu
Y3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYg
bmFtZSwgUGFzc093blB0cjxPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw+KTsKICAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCiAgICAgewogICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAog
ICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0J
KHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxi
YWNrRnVuY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3Nyw3ICs0NzcsNyBAQCBPYmpDQ2Fs
bGJhY2tGdW5jdGlvbjo6T2JqQ0NhbGxiYWNrRnVuY3RpCiBPYmpDQ2FsbGJhY2tGdW5jdGlvbiog
T2JqQ0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NPd25Q
dHI8T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsPiBpbXBsKQogewogICAgIE9iakNDYWxsYmFja0Z1
bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE9iakNDYWxsYmFj
a0Z1bmN0aW9uPigqZXhlYy0+aGVhcCgpKSkgT2JqQ0NhbGxiYWNrRnVuY3Rpb24oZ2xvYmFsT2Jq
ZWN0LCBvYmpDQ2FsbGJhY2tGdW5jdGlvbkNhbGxBc0Z1bmN0aW9uLCBpbXBsKTsKLSAgICBmdW5j
dGlvbi0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBuYW1lKTsKKyAgICBmdW5j
dGlvbi0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwgbmFtZSk7CiAgICAgcmV0dXJuIGZ1bmN0
aW9uOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09wYXF1ZUpTU3RyaW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09wYXF1ZUpTU3Ry
aW5nLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9P
cGFxdWVKU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgU3RyaW5n
IE9wYXF1ZUpTU3RyaW5nOjpzdHJpbmcoKSBjb25zdAogICAgIHJldHVybiBtX3N0cmluZy5pc29s
YXRlZENvcHkoKTsKIH0KIAotSWRlbnRpZmllciBPcGFxdWVKU1N0cmluZzo6aWRlbnRpZmllcihK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEpIGNvbnN0CitJZGVudGlmaWVyIE9wYXF1ZUpTU3RyaW5n
OjppZGVudGlmaWVyKFZNKiB2bSkgY29uc3QKIHsKICAgICBpZiAoIXRoaXMgfHwgbV9zdHJpbmcu
aXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBJZGVudGlmaWVyKCk7CkBAIC01Nyw3ICs1Nyw3IEBA
IElkZW50aWZpZXIgT3BhcXVlSlNTdHJpbmc6OmlkZW50aWZpZXIoSlMKICAgICAgICAgcmV0dXJu
IElkZW50aWZpZXIoSWRlbnRpZmllcjo6RW1wdHlJZGVudGlmaWVyKTsKIAogICAgIGlmIChtX3N0
cmluZy5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIElkZW50aWZpZXIoZ2xvYmFsRGF0YSwgbV9z
dHJpbmcuY2hhcmFjdGVyczgoKSwgbV9zdHJpbmcubGVuZ3RoKCkpOworICAgICAgICByZXR1cm4g
SWRlbnRpZmllcih2bSwgbV9zdHJpbmcuY2hhcmFjdGVyczgoKSwgbV9zdHJpbmcubGVuZ3RoKCkp
OwogCi0gICAgcmV0dXJuIElkZW50aWZpZXIoZ2xvYmFsRGF0YSwgbV9zdHJpbmcuY2hhcmFjdGVy
czE2KCksIG1fc3RyaW5nLmxlbmd0aCgpKTsKKyAgICByZXR1cm4gSWRlbnRpZmllcih2bSwgbV9z
dHJpbmcuY2hhcmFjdGVyczE2KCksIG1fc3RyaW5nLmxlbmd0aCgpKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvT3BhcXVlSlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL09wYXF1ZUpTU3RyaW5nLmgJKHJldmlzaW9uIDE0ODY1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT3BhcXVlSlNTdHJpbmcuaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBJZGVu
dGlmaWVyOwotICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKKyAgICBjbGFzcyBWTTsKIH0KIAogc3Ry
dWN0IE9wYXF1ZUpTU3RyaW5nIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE9wYXF1ZUpT
U3RyaW5nPiB7CkBAIC01Nyw3ICs1Nyw3IEBAIHN0cnVjdCBPcGFxdWVKU1N0cmluZyA6IHB1Ymxp
YyBUaHJlYWRTYWYKICAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiAhIXRoaXMgPyBtX3N0
cmluZy5sZW5ndGgoKSA6IDA7IH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBzdHJp
bmcoKSBjb25zdDsKLSAgICBKU0M6OklkZW50aWZpZXIgaWRlbnRpZmllcihKU0M6OkpTR2xvYmFs
RGF0YSopIGNvbnN0OworICAgIEpTQzo6SWRlbnRpZmllciBpZGVudGlmaWVyKEpTQzo6Vk0qKSBj
b25zdDsKICNpZiBQTEFURk9STShRVCkKICAgICBRU3RyaW5nIHFTdHJpbmcoKSBjb25zdCB7IHJl
dHVybiBtX3N0cmluZzsgfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkocmV2aXNpb24gMTQ4NjU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTg1NCwxMSArODU0
LDExIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XC4uXHJ1bnRpbWVcSlNHbG9iYWxEYXRhLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1
bnRpbWVcVk0uY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlwuLlxydW50aW1lXEpTR2xvYmFsRGF0YS5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
Li5ccnVudGltZVxWTS5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlRXhwb3J0cy5kZWYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZUV4
cG9ydHMuZGVmCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlRXhwb3J0cy5k
ZWYJKHdvcmtpbmcgY29weSkKQEAgLTEsMjIgKzEsMTUgQEAKIEVYUE9SVFMKIAogICAgID8/MEFy
cmF5QnVmZmVyVmlld0BXVEZAQElBRUBWPyRQYXNzUmVmUHRyQFZBcnJheUJ1ZmZlckBXVEZAQEAx
QElAWgotICAgID8/MEJvb2xlYW5PYmplY3RASlNDQEBJQUVAQUFWSlNHbG9iYWxEYXRhQDFAUEFW
U3RydWN0dXJlQDFAQFoKICAgICA/PzBDb2xsYXRvckBXVEZAQFFBRUBQQkRAWgogICAgID8/MENT
dHJpbmdAV1RGQEBRQUVAUEJEQFoKICAgICA/PzBDU3RyaW5nQFdURkBAUUFFQFBCRElAWgotICAg
ID8/MERhdGFiYXNlQFByb2ZpbGVyQEpTQ0BAUUFFQEFBVkpTR2xvYmFsRGF0YUAyQEBaCiAgICAg
Pz8wRGF0ZUluc3RhbmNlQEpTQ0BASUFFQFBBVkV4ZWNTdGF0ZUAxQFBBVlN0cnVjdHVyZUAxQEBa
CiAgICAgPz8wRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFja0BKU0NAQFFBRUBQQVZIZWFwQDFAQFoK
ICAgICA/PzBEcm9wQWxsTG9ja3NASlNMb2NrQEpTQ0BAUUFFQFBBVkV4ZWNTdGF0ZUAyQEBaCi0g
ICAgPz8wRHJvcEFsbExvY2tzQEpTTG9ja0BKU0NAQFFBRUBQQVZKU0dsb2JhbERhdGFAMkBAWgot
ICAgID8/MER5bmFtaWNHbG9iYWxPYmplY3RTY29wZUBKU0NAQFFBRUBBQVZKU0dsb2JhbERhdGFA
MUBQQVZKU0dsb2JhbE9iamVjdEAxQEBaIAogICAgID8/MEVycm9ySGFuZGxpbmdNb2RlQEludGVy
cHJldGVyQEpTQ0BAUUFFQFBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgPz8wSW50ZXJuYWxGdW5jdGlv
bkBKU0NAQElBRUBQQVZKU0dsb2JhbE9iamVjdEAxQFBBVlN0cnVjdHVyZUAxQEBaCi0gICAgPz8w
SlNHbG9iYWxPYmplY3RASlNDQEBJQUVAQUFWSlNHbG9iYWxEYXRhQDFAUEFWU3RydWN0dXJlQDFA
UEJVR2xvYmFsT2JqZWN0TWV0aG9kVGFibGVAMUBAWgotICAgID8/MEpTTG9ja0hvbGRlckBKU0NA
QFFBRUBBQVZKU0dsb2JhbERhdGFAMUBAWgogICAgID8/MEpTTG9ja0hvbGRlckBKU0NAQFFBRUBQ
QVZFeGVjU3RhdGVAMUBAWgotICAgID8/MEpTTG9ja0hvbGRlckBKU0NAQFFBRUBQQVZKU0dsb2Jh
bERhdGFAMUBAWgogICAgID8/ME1ENUBXVEZAQFFBRUBYWgogICAgID8/ME1lZGlhVGltZUBXVEZA
QFFBRUBfSkhJQFogCiAgICAgPz8wTWVtb3J5SW5zdHJ1bWVudGF0aW9uQFdURkBAUUFFQFBBVk1l
bW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEAxQEBaCkBAIC0zMywyMSArMjYsMTcgQEAgRVhQT1JU
UwogICAgID8/MFN0cmluZ0BXVEZAQFFBRUBQQkRJQFoKICAgICA/PzBTdHJpbmdAV1RGQEBRQUVA
UEJFSUBaCiAgICAgPz8wU3RyaW5nQFdURkBAUUFFQFZBU0NJSUxpdGVyYWxAMUBAWgotICAgID8/
MFN0cmluZ09iamVjdEBKU0NAQElBRUBBQVZKU0dsb2JhbERhdGFAMUBQQVZTdHJ1Y3R1cmVAMUBA
WgogICAgID8/MFN0cmluZ1ByaW50U3RyZWFtQFdURkBAUUFFQFhaCi0gICAgPz8wU3RydWN0dXJl
QEpTQ0BAQUFFQEFBVkpTR2xvYmFsRGF0YUAxQFBBVkpTR2xvYmFsT2JqZWN0QDFAVkpTVmFsdWVA
MUBBQlZUeXBlSW5mb0AxQFBCVUNsYXNzSW5mb0AxQEVJQFoKICAgICA/PzBUaHJlYWRDb25kaXRp
b25AV1RGQEBRQUVAWFoKICAgICA/PzBXcmFwcGVyQmFzZUBNZW1vcnlJbnN0cnVtZW50YXRpb25A
V1RGQEBRQUVAUEJEUEJYQFoKICAgICA/PzBXVEZUaHJlYWREYXRhQFdURkBAUUFFQFhaCiAgICAg
Pz8wWWFyclBhdHRlcm5AWWFyckBKU0NAQFFBRUBBQlZTdHJpbmdAV1RGQEBfTjFQQVBCREBaCiAg
ICAgPz8xQXJyYXlCdWZmZXJWaWV3QFdURkBAVUFFQFhaCi0gICAgPz8xQ2xpZW50RGF0YUBKU0ds
b2JhbERhdGFASlNDQEBVQUVAWFoKICAgICA/PzFDb2xsYXRvckBXVEZAQFFBRUBYWgogICAgID8/
MURhdGFiYXNlQFByb2ZpbGVyQEpTQ0BAUUFFQFhaCiAgICAgPz8xRGVidWdnZXJASlNDQEBVQUVA
WFoKICAgICA/PzFEcm9wQWxsTG9ja3NASlNMb2NrQEpTQ0BAUUFFQFhaCiAgICAgPz8xRXJyb3JI
YW5kbGluZ01vZGVASW50ZXJwcmV0ZXJASlNDQEBRQUVAWFoKLSAgICA/PzFKU0dsb2JhbERhdGFA
SlNDQEBRQUVAWFoKICAgICA/PzFKU0dsb2JhbE9iamVjdEBKU0NAQFFBRUBYWgogICAgID8/MUpT
TG9ja0hvbGRlckBKU0NAQFFBRUBYWgogICAgID8/MU1lZGlhVGltZUBXVEZAQFFBRUBYWiAKQEAg
LTc4LDcgKzY3LDYgQEAgRVhQT1JUUwogICAgID9hZGRAQXRvbWljU3RyaW5nQFdURkBAQ0E/QVY/
JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBQQkRAWgogICAgID9hZGRAQXRvbWljU3Ry
aW5nQFdURkBAQ0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBQQkVAWgogICAg
ID9hZGRAQXRvbWljU3RyaW5nQFdURkBAQ0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RG
QEBAMkBQQkVJQFoKLSAgICA/YWRkQElkZW50aWZpZXJASlNDQEBDQT9BVj8kUGFzc1JlZlB0ckBW
U3RyaW5nSW1wbEBXVEZAQEBXVEZAQFBBVkpTR2xvYmFsRGF0YUAyQFBBVlN0cmluZ0ltcGxANEBA
WgogICAgID9hZGRASWRlbnRpZmllckBKU0NAQFNBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBs
QFdURkBAQFdURkBAUEFWRXhlY1N0YXRlQDJAUEJEQFoKICAgICA/YWRkQFByb3BlcnR5TmFtZUFy
cmF5QEpTQ0BAUUFFWFBBVlN0cmluZ0ltcGxAV1RGQEBAWgogICAgID9hZGRCeXRlc0BNRDVAV1RG
QEBRQUVYUEJFSUBaCkBAIC04NiwxNCArNzQsMTEgQEAgRVhQT1JUUwogICAgID9hZGRDdXJyZW50
VGhyZWFkQE1hY2hpbmVUaHJlYWRzQEpTQ0BAUUFFWFhaCiAgICAgP2FkZEZpbmFsaXplckBIZWFw
QEpTQ0BAUUFFWFBBVkpTQ2VsbEAyQFA2QVgwQFpAWgogICAgID9hZGRGcm9tTGl0ZXJhbERhdGFA
QXRvbWljU3RyaW5nQFdURkBAQ0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBQ
QkRJQFoKLSAgICA/YWRkUHJvcGVydHlUcmFuc2l0aW9uQFN0cnVjdHVyZUBKU0NAQFNBUEFWMTJA
QUFWSlNHbG9iYWxEYXRhQDJAUEFWMTJAVlByb3BlcnR5TmFtZUAyQElQQVZKU0NlbGxAMkBBQUhA
WgogICAgID9hZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQFN0cnVjdHVy
ZUBKU0NAQFNBUEFWMTJAUEFWMTJAVlByb3BlcnR5TmFtZUAyQElQQVZKU0NlbGxAMkBBQUhAWgot
ICAgID9hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uQFN0cnVjdHVyZUBKU0NAQFFBRUhBQVZK
U0dsb2JhbERhdGFAMkBWUHJvcGVydHlOYW1lQDJASVBBVkpTQ2VsbEAyQEBaCiAgICAgP2FkZFBy
aXZhdGVCdWZmZXJATWVtb3J5Q2xhc3NJbmZvQFdURkBAUUFFWElQQkQwMEBaCiAgICAgP2FkZFJh
d0J1ZmZlckBNZW1vcnlDbGFzc0luZm9AV1RGQEBRQUVYUEJYSVBCRDFAWgogICAgID9hZGRTbG93
Q2FzZUBBdG9taWNTdHJpbmdAV1RGQEBDQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZA
QEAyQFBBVlN0cmluZ0ltcGxAMkBAWgogICAgID9hZGRTbG93Q2FzZUBJZGVudGlmaWVyQEpTQ0BA
Q0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAV1RGQEBQQVZFeGVjU3RhdGVAMkBQ
QVZTdHJpbmdJbXBsQDRAQFoKLSAgICA/YWRkU2xvd0Nhc2VASWRlbnRpZmllckBKU0NAQENBP0FW
PyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQFdURkBAUEFWSlNHbG9iYWxEYXRhQDJAUEFW
U3RyaW5nSW1wbEA0QEBaCiAgICAgP2FkZFN0YXRpY0dsb2JhbHNASlNHbG9iYWxPYmplY3RASlND
QEBJQUVYUEFVR2xvYmFsUHJvcGVydHlJbmZvQDEyQEhAWgogICAgID9hZG9wdEBTdHJpbmdJbXBs
QFdURkBAU0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBBQVY/JFN0cmluZ0J1
ZmZlckBfV0AyQEBaCiAgICAgP2Fkb3B0QFN0cmluZ0ltcGxAV1RGQEBTQT9BVj8kUGFzc1JlZlB0
ckBWU3RyaW5nSW1wbEBXVEZAQEAyQEFBVj8kU3RyaW5nQnVmZmVyQEVAMkBAWgpAQCAtMTMyLDcg
KzExNyw2IEBAIEVYUE9SVFMKICAgICA/Y2FuY2VsQ2FsbE9uTWFpblRocmVhZEBXVEZAQFlBWFA2
QVhQQVhAWjBAWgogICAgID9jYW5TaHJpbmtAU3RyaW5nQnVpbGRlckBXVEZAQFFCRV9OWFoKICAg
ICA/Y2FwYWNpdHlASGVhcEBKU0NAQFFBRUlYWgotICAgID9jaGFuZ2VQcm90b3R5cGVUcmFuc2l0
aW9uQFN0cnVjdHVyZUBKU0NAQFNBUEFWMTJAQUFWSlNHbG9iYWxEYXRhQDJAUEFWMTJAVkpTVmFs
dWVAMkBAWgogICAgID9jaGFyYWN0ZXJTdGFydGluZ0F0QFN0cmluZ0BXVEZAQFFCRUhJQFoKICAg
ICA/Y2hhcmFjdGVyc1RvRG91YmxlQFdURkBAWUFOUEJfV0lQQV9OQFoKICAgICA/Y2hhcmFjdGVy
c1RvRG91YmxlQFdURkBAWUFOUEJFSVBBX05AWgpAQCAtMTQ0LDcgKzEyOCw2IEBAIEVYUE9SVFMK
ICAgICA/Y2hhcmFjdGVyc1RvVUludFN0cmljdEBXVEZAQFlBSVBCRUlQQV9OSEBaCiAgICAgP2No
YXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uQFN0cmluZ0BXVEZAQFFBRVBCX1dYWgogICAgID9j
aGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGVASWRlbnRpZmllckBKU0NAQENBWFBBVkV4ZWNTdGF0
ZUAyQEBaCi0gICAgP2NoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZUBJZGVudGlmaWVyQEpTQ0BA
Q0FYUEFWSlNHbG9iYWxEYXRhQDJAQFoKICAgICA/Y2hlY2tzdW1ATUQ1QFdURkBAUUFFWEFBVj8k
VmVjdG9yQEUkMEJBQFZDcmFzaE9uT3ZlcmZsb3dAV1RGQEBAMkBAWgogICAgID9jaGVja1N5bnRh
eEBKU0NAQFlBX05QQVZFeGVjU3RhdGVAMUBBQlZTb3VyY2VDb2RlQDFAUEFWSlNWYWx1ZUAxQEBa
CiAgICAgP2NsYXNzTmFtZUBKU09iamVjdEBKU0NAQFNBP0FWU3RyaW5nQFdURkBAUEJWMTJAQFoK
QEAgLTE2MywzMCArMTQ2LDIyIEBAIEVYUE9SVFMKICAgICA/Y29uc3RydWN0TnVtYmVyQEpTQ0BA
WUFQQVZOdW1iZXJPYmplY3RAMUBQQVZFeGVjU3RhdGVAMUBQQVZKU0dsb2JhbE9iamVjdEAxQFZK
U1ZhbHVlQDFAQFoKICAgICA/Y29uc3RydWN0U3RyaW5nQEpTQ0BAWUFQQVZTdHJpbmdPYmplY3RA
MUBQQVZFeGVjU3RhdGVAMUBQQVZKU0dsb2JhbE9iamVjdEAxQFZKU1ZhbHVlQDFAQFoKICAgICA/
Y29udGFpbnNPbmx5V2hpdGVzcGFjZUBTdHJpbmdJbXBsQFdURkBAUUFFX05YWgotICAgID9jb252
ZXJ0RG91YmxlVG9Db250aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXhASlNPYmplY3RASlND
QEBBQUVYQUFWSlNHbG9iYWxEYXRhQDJASVZKU1ZhbHVlQDJAQFoKLSAgICA/Y29udmVydEludDMy
VG9Eb3VibGVPckNvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRleEBKU09iamVjdEBKU0NA
QEFBRVhBQVZKU0dsb2JhbERhdGFAMkBJVkpTVmFsdWVAMkBAWgogICAgID9jb252ZXJ0TGF0aW4x
VG9VVEY4QFVuaWNvZGVAV1RGQEBZQT9BVzRDb252ZXJzaW9uUmVzdWx0QDEyQFBBUEJFUEJFUEFQ
QURQQURAWgogICAgID9jb252ZXJ0VVRGMTZUb1VURjhAVW5pY29kZUBXVEZAQFlBP0FXNENvbnZl
cnNpb25SZXN1bHRAMTJAUEFQQl9XUEJfV1BBUEFEUEFEX05AWgogICAgID9jb252ZXJ0VVRGOFRv
VVRGMTZAVW5pY29kZUBXVEZAQFlBP0FXNENvbnZlcnNpb25SZXN1bHRAMTJAUEFQQkRQQkRQQVBB
X1dQQV9XUEFfTl9OQFoKICAgICA/Y29weUJhY2tpbmdTdG9yZUBKU09iamVjdEBKU0NAQFNBWFBB
VkpTQ2VsbEAyQEFBVkNvcHlWaXNpdG9yQDJAQFoKICAgICA/Y3JlYXRlQEpTRnVuY3Rpb25ASlND
QEBTQVBBVjEyQFBBVkV4ZWNTdGF0ZUAyQFBBVkpTR2xvYmFsT2JqZWN0QDJASEFCVlN0cmluZ0BX
VEZAQFA2SV9KMEBaVzRJbnRyaW5zaWNAMkAzQFoKLSAgICA/Y3JlYXRlQEpTR2xvYmFsRGF0YUBK
U0NAQFNBP0FWPyRQYXNzUmVmUHRyQFZKU0dsb2JhbERhdGFASlNDQEBAV1RGQEBXNEhlYXBUeXBl
QDJAQFoKICAgICA/Y3JlYXRlQE9wYXF1ZUpTU3RyaW5nQEBTQT9BVj8kUGFzc1JlZlB0ckBVT3Bh
cXVlSlNTdHJpbmdAQEBXVEZAQEFCVlN0cmluZ0AzQEBaCi0gICAgP2NyZWF0ZUBSZWdFeHBASlND
QEBTQVBBVjEyQEFBVkpTR2xvYmFsRGF0YUAyQEFCVlN0cmluZ0BXVEZAQFc0UmVnRXhwRmxhZ3NA
MkBAWgogICAgID9jcmVhdGVAU3RyaW5nSW1wbEBXVEZAQFNBP0FWPyRQYXNzUmVmUHRyQFZTdHJp
bmdJbXBsQFdURkBAQDJAUEJfV0lAWgogICAgID9jcmVhdGVAU3RyaW5nSW1wbEBXVEZAQFNBP0FW
PyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQDJAUEJFQFoKICAgICA/Y3JlYXRlQFN0cmlu
Z0ltcGxAV1RGQEBTQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAyQFBCRUlAWgog
ICAgID9jcmVhdGU4Qml0SWZQb3NzaWJsZUBTdHJpbmdJbXBsQFdURkBAU0E/QVY/JFBhc3NSZWZQ
dHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBQQl9XSUBaCi0gICAgP2NyZWF0ZUVtcHR5U3RyaW5nQFNt
YWxsU3RyaW5nc0BKU0NAQEFBRVhQQVZKU0dsb2JhbERhdGFAMkBAWgogICAgID9jcmVhdGVFcnJv
ckBKU0NAQFlBUEFWSlNPYmplY3RAMUBQQVZFeGVjU3RhdGVAMUBBQlZTdHJpbmdAV1RGQEBAWgot
ICAgID9jcmVhdGVMZWFrZWRASlNHbG9iYWxEYXRhQEpTQ0BAU0E/QVY/JFBhc3NSZWZQdHJAVkpT
R2xvYmFsRGF0YUBKU0NAQEBXVEZAQFc0SGVhcFR5cGVAMkBAWgogICAgID9jcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvckBKU0NAQFlBUEFWSlNPYmplY3RAMUBQQVZFeGVjU3RhdGVAMUBAWgog
ICAgID9jcmVhdGVSYW5nZUVycm9yQEpTQ0BAWUFQQVZKU09iamVjdEAxQFBBVkV4ZWNTdGF0ZUAx
QEFCVlN0cmluZ0BXVEZAQEBaCiAgICAgP2NyZWF0ZVJlZmVyZW5jZUVycm9yQEpTQ0BAWUFQQVZK
U09iamVjdEAxQFBBVkV4ZWNTdGF0ZUAxQEFCVlN0cmluZ0BXVEZAQEBaCi0gICAgP2NyZWF0ZVNp
bmdsZUNoYXJhY3RlclN0cmluZ0BTbWFsbFN0cmluZ3NASlNDQEBBQUVYUEFWSlNHbG9iYWxEYXRh
QDJARUBaCiAgICAgP2NyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvckBKU0NAQFlBUEFWSlNPYmplY3RA
MUBQQVZFeGVjU3RhdGVAMUBAWgogICAgID9jcmVhdGVTeW50YXhFcnJvckBKU0NAQFlBUEFWSlNP
YmplY3RAMUBQQVZFeGVjU3RhdGVAMUBBQlZTdHJpbmdAV1RGQEBAWgotICAgID9jcmVhdGVUYWJs
ZUBIYXNoVGFibGVASlNDQEBBQkVYUEFWSlNHbG9iYWxEYXRhQDJAQFoKICAgICA/Y3JlYXRlVGhy
ZWFkQFdURkBAWUFJUDZBUEFYUEFYQFowQFoKICAgICA/Y3JlYXRlVGhyZWFkQFdURkBAWUFJUDZB
UEFYUEFYQFowUEJEQFoKICAgICA/Y3JlYXRlVGhyZWFkQFdURkBAWUFJUDZBWFBBWEBaMFBCREBa
CkBAIC0yMjMsMjAgKzE5OCwxNiBAQCBFWFBPUlRTCiAgICAgP2RlbGV0ZVByb3BlcnR5QnlJbmRl
eEBKU09iamVjdEBKU0NAQFNBX05QQVZKU0NlbGxAMkBQQVZFeGVjU3RhdGVAMkBJQFoKICAgICA/
ZGVsZXRlUHJvcGVydHlCeUluZGV4QEpTUHJveHlASlNDQEBLQV9OUEFWSlNDZWxsQDJAUEFWRXhl
Y1N0YXRlQDJASUBaCiAgICAgP2RlbGV0ZVRhYmxlQEhhc2hUYWJsZUBKU0NAQFFCRVhYWgotICAg
ID9kZXNwZWNpZnlEaWN0aW9uYXJ5RnVuY3Rpb25AU3RydWN0dXJlQEpTQ0BAUUFFWEFBVkpTR2xv
YmFsRGF0YUAyQFZQcm9wZXJ0eU5hbWVAMkBAWgotICAgID9kZXNwZWNpZnlGdW5jdGlvblRyYW5z
aXRpb25AU3RydWN0dXJlQEpTQ0BAU0FQQVYxMkBBQVZKU0dsb2JhbERhdGFAMkBQQVYxMkBWUHJv
cGVydHlOYW1lQDJAQFoKICAgICA/ZGVzdHJveUBKU0NlbGxASlNDQEBLQVhQQVYxMkBAWgogICAg
ID9kZXN0cm95QEpTR2xvYmFsT2JqZWN0QEpTQ0BAU0FYUEFWSlNDZWxsQDJAQFoKICAgICA/ZGVz
dHJveUBPdXRPZkxpbmVCaXRzQEJpdFZlY3RvckBXVEZAQFNBWFBBVjEyM0BAWgogICAgID9kZXRh
Y2hARGVidWdnZXJASlNDQEBVQUVYUEFWSlNHbG9iYWxPYmplY3RAMkBAWgogICAgID9kZXRhY2hU
aHJlYWRAV1RGQEBZQVhJQFoKLSAgICA/ZGlzY2FyZEFsbENvZGVASlNHbG9iYWxEYXRhQEpTQ0BA
UUFFWFhaCiAgICAgP2Rpc3BsYXlOYW1lQEpTRnVuY3Rpb25ASlNDQEBRQUU/QVZTdHJpbmdAV1RG
QEBQQVZFeGVjU3RhdGVAMkBAWgogICAgID9kdG9hQFdURkBAWUFYUUFETkFBX05BQUhBQUlAWgog
ICAgID9kdW1wQEpTVmFsdWVASlNDQEBRQkVYQUFWUHJpbnRTdHJlYW1AV1RGQEBAWgogICAgID9k
dW1wQWxsT3B0aW9uc0BPcHRpb25zQEpTQ0BAU0FYUEFVX2lvYnVmQEBAWgogICAgID9kdW1wQ2Fs
bEZyYW1lQEludGVycHJldGVyQEpTQ0BAUUFFWFBBVkV4ZWNTdGF0ZUAyQEBaCi0gICAgP2R1bXBT
YW1wbGVEYXRhQEpTR2xvYmFsRGF0YUBKU0NAQFFBRVhQQVZFeGVjU3RhdGVAMkBAWgogICAgID9F
Y21hU2NyaXB0Q29udmVydGVyQERvdWJsZVRvU3RyaW5nQ29udmVydGVyQGRvdWJsZV9jb252ZXJz
aW9uQFdURkBAU0FBQlYxMjNAWFoKICAgICA/ZW1wdHlAU3RyaW5nSW1wbEBXVEZAQFNBUEFWMTJA
WFoKICAgICA/ZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGVAUHJvdG90eXBlTWFwQEpT
Q0BAUUFFUEFWU3RydWN0dXJlQDJAUEFWSlNPYmplY3RAMkBJQFoKQEAgLTI4MiwxMSArMjUzLDcg
QEAgRVhQT1JUUwogICAgID9maW5kQFN0cmluZ0ltcGxAV1RGQEBRQUVJUEFWMTJASUBaCiAgICAg
P2ZpbmRJZ25vcmluZ0Nhc2VAU3RyaW5nSW1wbEBXVEZAQFFBRUlQQVYxMkBJQFoKICAgICA/Zmlu
ZEFsbG9jYXRvckBXZWFrU2V0QEpTQ0BAQUFFUEFVRnJlZUNlbGxAV2Vha0Jsb2NrQDJAWFoKLSAg
ICA/ZmluaXNoQ3JlYXRpb25AQm9vbGVhbk9iamVjdEBKU0NAQElBRVhBQVZKU0dsb2JhbERhdGFA
MkBAWgotICAgID9maW5pc2hDcmVhdGlvbkBEYXRlSW5zdGFuY2VASlNDQEBJQUVYQUFWSlNHbG9i
YWxEYXRhQDJATkBaCi0gICAgP2ZpbmlzaENyZWF0aW9uQEludGVybmFsRnVuY3Rpb25ASlNDQEBJ
QUVYQUFWSlNHbG9iYWxEYXRhQDJAQUJWU3RyaW5nQFdURkBAQFoKICAgICA/ZmluaXNoQ3JlYXRp
b25AUmVnRXhwT2JqZWN0QEpTQ0BASUFFWFBBVkpTR2xvYmFsT2JqZWN0QDJAQFoKLSAgICA/Zmlu
aXNoQ3JlYXRpb25AU3RyaW5nT2JqZWN0QEpTQ0BASUFFWEFBVkpTR2xvYmFsRGF0YUAyQFBBVkpT
U3RyaW5nQDJAQFoKICAgICA/ZmlyZUBXYXRjaGRvZ0BKU0NAQFFBRVhYWgogICAgID9mb2N1c0BQ
cm9maWxlQEpTQ0BAUUFFWFBCVlByb2ZpbGVOb2RlQDJAQFoKICAgICA/Zm9sZENhc2VAU3RyaW5n
QFdURkBAUUJFP0FWMTJAWFoKQEAgLTI5OSwxNCArMjY2LDEyIEBAIEVYUE9SVFMKICAgICA/ZnJv
bVVURjhJbnRlcm5hbEBBdG9taWNTdHJpbmdAV1RGQEBDQT9BVjEyQFBCRDBAWgogICAgID9mcm9t
VVRGOFdpdGhMYXRpbjFGYWxsYmFja0BTdHJpbmdAV1RGQEBTQT9BVjEyQFBCRUlAWgogICAgID9m
dW5jdGlvbkdldHRlckBQcm9wZXJ0eVNsb3RASlNDQEBBQkU/QVZKU1ZhbHVlQDJAUEFWRXhlY1N0
YXRlQDJAQFoKLSAgICA/Z2V0QFN0cnVjdHVyZUBKU0NAQFFBRUhBQVZKU0dsb2JhbERhdGFAMkBW
UHJvcGVydHlOYW1lQDJAQUFJQUFQQVZKU0NlbGxAMkBAWgogICAgID9nZXRDYWxjdWxhdGVkRGlz
cGxheU5hbWVASlNDQEBZQT9BVlN0cmluZ0BXVEZAQFBBVkV4ZWNTdGF0ZUAxQFBBVkpTT2JqZWN0
QDFAQFoKICAgICA/Z2V0Q2FsbGFibGVPYmplY3RTbG93QEpTQ0BAWUFQQVZKU0NlbGxAMUBQQVYy
MUBAWgogICAgID9nZXRDYWxsRGF0YUBKU0NlbGxASlNDQEBTQT9BVzRDYWxsVHlwZUAyQFBBVjEy
QEFBVENhbGxEYXRhQDJAQFoKICAgICA/Z2V0Q29uc3RydWN0RGF0YUBKU0NlbGxASlNDQEBTQT9B
VzRDb25zdHJ1Y3RUeXBlQDJAUEFWMTJAQUFUQ29uc3RydWN0RGF0YUAyQEBaCiAgICAgP2dldERh
dGExNlNsb3dDYXNlQFN0cmluZ0ltcGxAV1RGQEBBQkVQQl9XWFoKICAgICA/Z2V0SURAU291cmNl
UHJvdmlkZXJASlNDQEBBQUVYWFoKLSAgICA/Z2V0U3RhY2tUcmFjZUBJbnRlcnByZXRlckBKU0NA
QFNBWFBBVkpTR2xvYmFsRGF0YUAyQEFBVj8kVmVjdG9yQFVTdGFja0ZyYW1lQEpTQ0BAJDBBQFZD
cmFzaE9uT3ZlcmZsb3dAV1RGQEBAV1RGQEBJQFoKICAgICA/Z2V0T2JqZWN0QEpTQ2VsbEBKU0NA
QFFBRVBBVkpTT2JqZWN0QDJAWFoKICAgICA/Z2V0T2JqZWN0VHlwZUBNZW1vcnlJbnN0cnVtZW50
YXRpb25AV1RGQEBDQVBCRFBBVk1lbW9yeU9iamVjdEluZm9AMkBAWgogICAgID9nZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXNASlNPYmplY3RASlNDQEBTQVhQQVYxMkBQQVZFeGVjU3RhdGVAMkBB
QVZQcm9wZXJ0eU5hbWVBcnJheUAyQFc0RW51bWVyYXRpb25Nb2RlQDJAQFoKQEAgLTMzMCw3ICsy
OTUsNiBAQCBFWFBPUlRTCiAgICAgP2dsb2JhbEV4ZWNASlNHbG9iYWxPYmplY3RASlNDQEBRQUVQ
QVZFeGVjU3RhdGVAMkBYWgogICAgID9nbG9iYWxPYmplY3RDb3VudEBIZWFwQEpTQ0BAUUFFSVha
CiAgICAgP2dyb3dASGFuZGxlU2V0QEpTQ0BAQUFFWFhaCi0gICAgP2dyb3dPdXRPZkxpbmVTdG9y
YWdlQEpTT2JqZWN0QEpTQ0BAUUFFUEFWQnV0dGVyZmx5QDJAQUFWSlNHbG9iYWxEYXRhQDJASUlA
WgogICAgID9oYXNoU2xvd0Nhc2VAU3RyaW5nSW1wbEBXVEZAQEFCRUlYWgogICAgID9oYXNQcm9w
ZXJ0eUBKU09iamVjdEBKU0NAQFFCRV9OUEFWRXhlY1N0YXRlQDJASUBaCiAgICAgP2hhc1Byb3Bl
cnR5QEpTT2JqZWN0QEpTQ0BAUUJFX05QQVZFeGVjU3RhdGVAMkBWUHJvcGVydHlOYW1lQDJAQFoK
QEAgLTM2OCw4ICszMzIsNiBAQCBFWFBPUlRTCiAgICAgP2xvd2VyQFN0cmluZ0ltcGxAV1RGQEBR
QUU/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBYWgogICAgID9saW5lQFN0YWNr
RnJhbWVASlNDQEBRQUVJWFoKICAgICA/bWFrZThCaXRGcm9tMTZCaXRTb3VyY2VAU3RyaW5nQFdU
RkBAU0E/QVYxMkBQQl9XSUBaCi0gICAgP21hdGNoQFJlZ0V4cEBKU0NAQFFBRUhBQVZKU0dsb2Jh
bERhdGFAMkBBQlZTdHJpbmdAV1RGQEBJQUFWPyRWZWN0b3JASCQwQ0FAVkNyYXNoT25PdmVyZmxv
d0BXVEZAQEA1QEBaCi0gICAgP21hdGVyaWFsaXplUHJvcGVydHlNYXBAU3RydWN0dXJlQEpTQ0BA
QUFFWEFBVkpTR2xvYmFsRGF0YUAyQEBaCiAgICAgP21vbm90b25pY2FsbHlJbmNyZWFzaW5nVGlt
ZUBXVEZAQFlBTlhaCiAgICAgP21vbnRoRnJvbURheUluWWVhckBXVEZAQFlBSEhfTkBaCiAgICAg
P21zVG9ZZWFyQFdURkBAWUFITkBaCkBAIC00MTgsMTUgKzM4MCwxMiBAQCBFWFBPUlRTCiAgICAg
P3B1dERpcmVjdFZpcnR1YWxASlNPYmplY3RASlNDQEBTQVhQQVYxMkBQQVZFeGVjU3RhdGVAMkBW
UHJvcGVydHlOYW1lQDJAVkpTVmFsdWVAMkBJQFoKICAgICA/cHV0RGlyZWN0VmlydHVhbEBKU1By
b3h5QEpTQ0BAS0FYUEFWSlNPYmplY3RAMkBQQVZFeGVjU3RhdGVAMkBWUHJvcGVydHlOYW1lQDJA
VkpTVmFsdWVAMkBJQFoKICAgICA/cmFuZG9tTnVtYmVyQFdURkBAWUFOWFoKLSAgICA/cmVjb21w
aWxlQWxsSlNGdW5jdGlvbnNARGVidWdnZXJASlNDQEBRQUVYUEFWSlNHbG9iYWxEYXRhQDJAQFoK
ICAgICA/cmVnRXhwRmxhZ3NASlNDQEBZQT9BVzRSZWdFeHBGbGFnc0AxQEFCVlN0cmluZ0BXVEZA
QEBaCiAgICAgP3JlaWZ5U3RyaW5nQFN0cmluZ0J1aWxkZXJAV1RGQEBBQkVYWFoKICAgICA/cmVs
ZWFzZURlY29tbWl0dGVkQE9TQWxsb2NhdG9yQFdURkBAU0FYUEFYSUBaCi0gICAgP3JlbGVhc2VF
eGVjdXRhYmxlTWVtb3J5QEpTR2xvYmFsRGF0YUBKU0NAQFFBRVhYWgogICAgID9yZW1vdmVAU3Ry
aW5nQFdURkBAUUFFWElIQFoKICAgICA/cmVtb3ZlQmxvY2tATWFya2VkQWxsb2NhdG9yQEpTQ0BA
UUFFWFBBVk1hcmtlZEJsb2NrQDJAQFoKICAgICA/cmVtb3ZlQ2hhcmFjdGVyc0BTdHJpbmdAV1RG
QEBRQkU/QVYxMkBQNkFfTl9XQFpAWgotICAgID9yZW1vdmVEaXJlY3RASlNPYmplY3RASlNDQEBR
QUVfTkFBVkpTR2xvYmFsRGF0YUAyQFZQcm9wZXJ0eU5hbWVAMkBAWgogICAgID9yZXBsYWNlQFN0
cmluZ0ltcGxAV1RGQEBRQUU/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBfVzBA
WgogICAgID9yZXBsYWNlQFN0cmluZ0ltcGxAV1RGQEBRQUU/QVY/JFBhc3NSZWZQdHJAVlN0cmlu
Z0ltcGxAV1RGQEBAMkBfV1BBVjEyQEBaCiAgICAgP3JlcGxhY2VAU3RyaW5nSW1wbEBXVEZAQFFB
RT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAyQF9XUEJFSUBaCkBAIC00NDAsNyAr
Mzk5LDYgQEAgRVhQT1JUUwogICAgID9yZXNlcnZlQW5kQ29tbWl0QE9TQWxsb2NhdG9yQFdURkBA
U0FQQVhJVzRVc2FnZUAxMkBfTjExQFoKICAgICA/cmVzZXJ2ZUNhcGFjaXR5QFN0cmluZ0J1aWxk
ZXJAV1RGQEBRQUVYSUBaCiAgICAgP3Jlc2V0QFBhcnNlckFyZW5hQEpTQ0BAUUFFWFhaCi0gICAg
P3Jlc2V0RGF0ZUNhY2hlQEpTR2xvYmFsRGF0YUBKU0NAQFFBRVhYWgogICAgID9yZXNpemVAU3Ry
aW5nQnVpbGRlckBXVEZAQFFBRVhJQFoKICAgICA/cmVzaXplT3V0T2ZMaW5lQEJpdFZlY3RvckBX
VEZAQEFBRVhJQFoKICAgICA/cmVzb2x2ZVJvcGVASlNSb3BlU3RyaW5nQEpTQ0BAQUJFWFBBVkV4
ZWNTdGF0ZUAyQEBaCkBAIC00NTcsMTQgKzQxNSwxMCBAQCBFWFBPUlRTCiAgICAgP3NldEVudW1l
cmFibGVAUHJvcGVydHlEZXNjcmlwdG9yQEpTQ0BAUUFFWF9OQFoKICAgICA/c2V0R2FyYmFnZUNv
bGxlY3Rpb25UaW1lckVuYWJsZWRASGVhcEBKU0NAQFFBRVhfTkBaCiAgICAgP3NldEdldHRlckBQ
cm9wZXJ0eURlc2NyaXB0b3JASlNDQEBRQUVYVkpTVmFsdWVAMkBAWgotICAgID9zZXRHbG9iYWxU
aGlzQEpTR2xvYmFsT2JqZWN0QEpTQ0BASUFFWEFBVkpTR2xvYmFsRGF0YUAyQFBBVkpTT2JqZWN0
QDJAQFoKLSAgICA/c2V0SW5kZXhRdWlja2x5VG9VbmRlY2lkZWRASlNPYmplY3RASlNDQEBBQUVY
QUFWSlNHbG9iYWxEYXRhQDJASVZKU1ZhbHVlQDJAQFoKICAgICA/c2V0TWFpblRocmVhZENhbGxi
YWNrc1BhdXNlZEBXVEZAQFlBWF9OQFoKICAgICA/c2V0T3B0aW9uQE9wdGlvbnNASlNDQEBTQV9O
UEJEQFoKICAgICA/c2V0T3JkZXJMb3dlckZpcnN0QENvbGxhdG9yQFdURkBAUUFFWF9OQFoKLSAg
ICA/c2V0UHJvdG90eXBlQEpTT2JqZWN0QEpTQ0BAUUFFWEFBVkpTR2xvYmFsRGF0YUAyQFZKU1Zh
bHVlQDJAQFoKICAgICA/c2V0U2V0dGVyQFByb3BlcnR5RGVzY3JpcHRvckBKU0NAQFFBRVhWSlNW
YWx1ZUAyQEBaCi0gICAgP3NldFRhcmdldEBKU1Byb3h5QEpTQ0BASUFFWEFBVkpTR2xvYmFsRGF0
YUAyQFBBVkpTR2xvYmFsT2JqZWN0QDJAQFoKICAgICA/c2V0dGVyQFByb3BlcnR5RGVzY3JpcHRv
ckBKU0NAQFFCRT9BVkpTVmFsdWVAMkBYWgogICAgID9zZXRUb0N1cnJlbnRMb2NhbFRpbWVAR3Jl
Z29yaWFuRGF0ZVRpbWVAV1RGQEBRQUVYWFoKICAgICA/c2V0VW5kZWZpbmVkQFByb3BlcnR5RGVz
Y3JpcHRvckBKU0NAQFFBRVhYWgpAQCAtNDg1LDExICs0MzksOSBAQCBFWFBPUlRTCiAgICAgP3Nw
bGl0QFN0cmluZ0BXVEZAQFFCRVhfV19OQUFWPyRWZWN0b3JAVlN0cmluZ0BXVEZAQCQwQUBWQ3Jh
c2hPbk92ZXJmbG93QDJAQDJAQFoKICAgICA/c3BsaXRAU3RyaW5nQFdURkBAUUJFWEFCVjEyQF9O
QUFWPyRWZWN0b3JAVlN0cmluZ0BXVEZAQCQwQUBWQ3Jhc2hPbk92ZXJmbG93QDJAQDJAQFoKICAg
ICA/c3RhcnRQcm9maWxpbmdATGVnYWN5UHJvZmlsZXJASlNDQEBRQUVYUEFWRXhlY1N0YXRlQDJA
QUJWU3RyaW5nQFdURkBAQFoKLSAgICA/c3RhcnRTYW1wbGluZ0BKU0dsb2JhbERhdGFASlNDQEBR
QUVYWFoKICAgICA/c3RhcnRzV2l0aEBTdHJpbmdJbXBsQFdURkBAUUJFX05fV0BaCiAgICAgP3N0
YXJ0c1dpdGhAU3RyaW5nSW1wbEBXVEZAQFFCRV9OUEJESV9OQFoKICAgICA/c3RvcFByb2ZpbGlu
Z0BMZWdhY3lQcm9maWxlckBKU0NAQFFBRT9BVj8kUGFzc1JlZlB0ckBWUHJvZmlsZUBKU0NAQEBX
VEZAQFBBVkV4ZWNTdGF0ZUAyQEFCVlN0cmluZ0A0QEBaCi0gICAgP3N0b3BTYW1wbGluZ0BKU0ds
b2JhbERhdGFASlNDQEBRQUVYWFoKICAgICA/c3RyaW5nQE9wYXF1ZUpTU3RyaW5nQEBRQkU/QVZT
dHJpbmdAV1RGQEBYWgogICAgID9TdHJpbmdUb0RvdWJsZUBTdHJpbmdUb0RvdWJsZUNvbnZlcnRl
ckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFNBTlBCRElQQUlAWgogICAgID9zdHJpcFdoaXRlU3Bh
Y2VAU3RyaW5nQFdURkBAUUJFP0FWMTJAWFoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlw
dENvcmUudmN4cHJvagkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMzEzLDcgKzMxMyw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXEpTQ0pTVmFsdWUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSlNEYXRlTWF0aC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxKU0Z1bmN0aW9uLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1l
XEpTR2xvYmFsRGF0YS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxWTS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0dsb2Jh
bE9iamVjdC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0ds
b2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cnVudGltZVxKU0xvY2suY3BwIiAvPg0KQEAgLTY4MSw3ICs2ODEsNyBAQAogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0Rlc3RydWN0aWJsZU9iamVjdC5oIiAvPg0KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNFeHBvcnRNYWNyb3MuaCIgLz4NCiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTRnVuY3Rpb24uaCIgLz4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2xvYmFsRGF0YS5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVk0uaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxydW50aW1lXEpTR2xvYmFsT2JqZWN0LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIiAvPg0KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNMb2NrLmgiIC8+DQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
ai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24gMTQ4
NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC01NTUsNyArNTU1
LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNGdW5jdGlvbi5jcHAi
Pg0KICAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KICAgICA8L0NsQ29tcGlsZT4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2xvYmFsRGF0YS5jcHAiPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVk0uY3BwIj4NCiAgICAgICA8RmlsdGVy
PnJ1bnRpbWU8L0ZpbHRlcj4NCiAgICAgPC9DbENvbXBpbGU+DQogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxKU0dsb2JhbE9iamVjdC5jcHAiPg0KQEAgLTE1ODYsNyArMTU4Niw3
IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTRnVuY3Rpb24uaCI+DQog
ICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQogICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNHbG9iYWxEYXRhLmgiPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVk0uaCI+DQogICAgICAgPEZpbHRlcj5ydW50aW1l
PC9GaWx0ZXI+DQogICAgIDwvQ2xJbmNsdWRlPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcSlNHbG9iYWxPYmplY3QuaCI+DQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmVFeHBvcnRHZW5lcmF0b3IvSmF2
YVNjcmlwdENvcmVFeHBvcnRzLmRlZi5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZUV4cG9ydEdlbmVyYXRv
ci9KYXZhU2NyaXB0Q29yZUV4cG9ydHMuZGVmLmluCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZUV4
cG9ydEdlbmVyYXRvci9KYXZhU2NyaXB0Q29yZUV4cG9ydHMuZGVmLmluCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDIyICsxLDE1IEBACiBFWFBPUlRTCiAKICAgICA/PzBBcnJheUJ1ZmZlclZpZXdAV1RG
QEBJQUVAVj8kUGFzc1JlZlB0ckBWQXJyYXlCdWZmZXJAV1RGQEBAMUBJQFoKLSAgICA/PzBCb29s
ZWFuT2JqZWN0QEpTQ0BASUFFQEFBVkpTR2xvYmFsRGF0YUAxQFBBVlN0cnVjdHVyZUAxQEBaCiAg
ICAgPz8wQ29sbGF0b3JAV1RGQEBRQUVAUEJEQFoKICAgICA/PzBDU3RyaW5nQFdURkBAUUFFQFBC
REBaCiAgICAgPz8wQ1N0cmluZ0BXVEZAQFFBRUBQQkRJQFoKLSAgICA/PzBEYXRhYmFzZUBQcm9m
aWxlckBKU0NAQFFBRUBBQVZKU0dsb2JhbERhdGFAMkBAWgogICAgID8/MERhdGVJbnN0YW5jZUBK
U0NAQElBRUBQQVZFeGVjU3RhdGVAMUBQQVZTdHJ1Y3R1cmVAMUBAWgogICAgID8/MERlZmF1bHRH
Q0FjdGl2aXR5Q2FsbGJhY2tASlNDQEBRQUVAUEFWSGVhcEAxQEBaCiAgICAgPz8wRHJvcEFsbExv
Y2tzQEpTTG9ja0BKU0NAQFFBRUBQQVZFeGVjU3RhdGVAMkBAWgotICAgID8/MERyb3BBbGxMb2Nr
c0BKU0xvY2tASlNDQEBRQUVAUEFWSlNHbG9iYWxEYXRhQDJAQFoKLSAgICA/PzBEeW5hbWljR2xv
YmFsT2JqZWN0U2NvcGVASlNDQEBRQUVAQUFWSlNHbG9iYWxEYXRhQDFAUEFWSlNHbG9iYWxPYmpl
Y3RAMUBAWiAKICAgICA/PzBFcnJvckhhbmRsaW5nTW9kZUBJbnRlcnByZXRlckBKU0NAQFFBRUBQ
QVZFeGVjU3RhdGVAMkBAWgogICAgID8/MEludGVybmFsRnVuY3Rpb25ASlNDQEBJQUVAUEFWSlNH
bG9iYWxPYmplY3RAMUBQQVZTdHJ1Y3R1cmVAMUBAWgotICAgID8/MEpTR2xvYmFsT2JqZWN0QEpT
Q0BASUFFQEFBVkpTR2xvYmFsRGF0YUAxQFBBVlN0cnVjdHVyZUAxQFBCVUdsb2JhbE9iamVjdE1l
dGhvZFRhYmxlQDFAQFoKLSAgICA/PzBKU0xvY2tIb2xkZXJASlNDQEBRQUVAQUFWSlNHbG9iYWxE
YXRhQDFAQFoKICAgICA/PzBKU0xvY2tIb2xkZXJASlNDQEBRQUVAUEFWRXhlY1N0YXRlQDFAQFoK
LSAgICA/PzBKU0xvY2tIb2xkZXJASlNDQEBRQUVAUEFWSlNHbG9iYWxEYXRhQDFAQFoKICAgICA/
PzBNRDVAV1RGQEBRQUVAWFoKICAgICA/PzBNZWRpYVRpbWVAV1RGQEBRQUVAX0pISUBaIAogICAg
ID8/ME1lbW9yeUluc3RydW1lbnRhdGlvbkBXVEZAQFFBRUBQQVZNZW1vcnlJbnN0cnVtZW50YXRp
b25DbGllbnRAMUBAWgpAQCAtMzMsMjEgKzI2LDE3IEBAIEVYUE9SVFMKICAgICA/PzBTdHJpbmdA
V1RGQEBRQUVAUEJESUBaCiAgICAgPz8wU3RyaW5nQFdURkBAUUFFQFBCRUlAWgogICAgID8/MFN0
cmluZ0BXVEZAQFFBRUBWQVNDSUlMaXRlcmFsQDFAQFoKLSAgICA/PzBTdHJpbmdPYmplY3RASlND
QEBJQUVAQUFWSlNHbG9iYWxEYXRhQDFAUEFWU3RydWN0dXJlQDFAQFoKICAgICA/PzBTdHJpbmdQ
cmludFN0cmVhbUBXVEZAQFFBRUBYWgotICAgID8/MFN0cnVjdHVyZUBKU0NAQEFBRUBBQVZKU0ds
b2JhbERhdGFAMUBQQVZKU0dsb2JhbE9iamVjdEAxQFZKU1ZhbHVlQDFAQUJWVHlwZUluZm9AMUBQ
QlVDbGFzc0luZm9AMUBFSUBaCiAgICAgPz8wVGhyZWFkQ29uZGl0aW9uQFdURkBAUUFFQFhaCiAg
ICAgPz8wV3JhcHBlckJhc2VATWVtb3J5SW5zdHJ1bWVudGF0aW9uQFdURkBAUUFFQFBCRFBCWEBa
CiAgICAgPz8wV1RGVGhyZWFkRGF0YUBXVEZAQFFBRUBYWgogICAgID8/MFlhcnJQYXR0ZXJuQFlh
cnJASlNDQEBRQUVAQUJWU3RyaW5nQFdURkBAX04xUEFQQkRAWgogICAgID8/MUFycmF5QnVmZmVy
Vmlld0BXVEZAQFVBRUBYWgotICAgID8/MUNsaWVudERhdGFASlNHbG9iYWxEYXRhQEpTQ0BAVUFF
QFhaCiAgICAgPz8xQ29sbGF0b3JAV1RGQEBRQUVAWFoKICAgICA/PzFEYXRhYmFzZUBQcm9maWxl
ckBKU0NAQFFBRUBYWgogICAgID8/MURlYnVnZ2VyQEpTQ0BAVUFFQFhaCiAgICAgPz8xRHJvcEFs
bExvY2tzQEpTTG9ja0BKU0NAQFFBRUBYWgogICAgID8/MUVycm9ySGFuZGxpbmdNb2RlQEludGVy
cHJldGVyQEpTQ0BAUUFFQFhaCi0gICAgPz8xSlNHbG9iYWxEYXRhQEpTQ0BAUUFFQFhaCiAgICAg
Pz8xSlNHbG9iYWxPYmplY3RASlNDQEBRQUVAWFoKICAgICA/PzFKU0xvY2tIb2xkZXJASlNDQEBR
QUVAWFoKICAgICA/PzFNZWRpYVRpbWVAV1RGQEBRQUVAWFogCkBAIC03OCw3ICs2Nyw2IEBAIEVY
UE9SVFMKICAgICA/YWRkQEF0b21pY1N0cmluZ0BXVEZAQENBP0FWPyRQYXNzUmVmUHRyQFZTdHJp
bmdJbXBsQFdURkBAQDJAUEJEQFoKICAgICA/YWRkQEF0b21pY1N0cmluZ0BXVEZAQENBP0FWPyRQ
YXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQDJAUEJFQFoKICAgICA/YWRkQEF0b21pY1N0cmlu
Z0BXVEZAQENBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQDJAUEJFSUBaCi0gICAg
P2FkZEBJZGVudGlmaWVyQEpTQ0BAQ0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBA
V1RGQEBQQVZKU0dsb2JhbERhdGFAMkBQQVZTdHJpbmdJbXBsQDRAQFoKICAgICA/YWRkQElkZW50
aWZpZXJASlNDQEBTQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEBXVEZAQFBBVkV4
ZWNTdGF0ZUAyQFBCREBaCiAgICAgP2FkZEBQcm9wZXJ0eU5hbWVBcnJheUBKU0NAQFFBRVhQQVZT
dHJpbmdJbXBsQFdURkBAQFoKICAgICA/YWRkQnl0ZXNATUQ1QFdURkBAUUFFWFBCRUlAWgpAQCAt
ODYsMTQgKzc0LDExIEBAIEVYUE9SVFMKICAgICA/YWRkQ3VycmVudFRocmVhZEBNYWNoaW5lVGhy
ZWFkc0BKU0NAQFFBRVhYWgogICAgID9hZGRGaW5hbGl6ZXJASGVhcEBKU0NAQFFBRVhQQVZKU0Nl
bGxAMkBQNkFYMEBaQFoKICAgICA/YWRkRnJvbUxpdGVyYWxEYXRhQEF0b21pY1N0cmluZ0BXVEZA
QENBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQDJAUEJESUBaCi0gICAgP2FkZFBy
b3BlcnR5VHJhbnNpdGlvbkBTdHJ1Y3R1cmVASlNDQEBTQVBBVjEyQEFBVkpTR2xvYmFsRGF0YUAy
QFBBVjEyQFZQcm9wZXJ0eU5hbWVAMkBJUEFWSlNDZWxsQDJAQUFIQFoKICAgICA/YWRkUHJvcGVy
dHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUBTdHJ1Y3R1cmVASlNDQEBTQVBBVjEyQFBB
VjEyQFZQcm9wZXJ0eU5hbWVAMkBJUEFWSlNDZWxsQDJAQUFIQFoKLSAgICA/YWRkUHJvcGVydHlX
aXRob3V0VHJhbnNpdGlvbkBTdHJ1Y3R1cmVASlNDQEBRQUVIQUFWSlNHbG9iYWxEYXRhQDJAVlBy
b3BlcnR5TmFtZUAyQElQQVZKU0NlbGxAMkBAWgogICAgID9hZGRQcml2YXRlQnVmZmVyQE1lbW9y
eUNsYXNzSW5mb0BXVEZAQFFBRVhJUEJEMDBAWgogICAgID9hZGRSYXdCdWZmZXJATWVtb3J5Q2xh
c3NJbmZvQFdURkBAUUFFWFBCWElQQkQxQFoKICAgICA/YWRkU2xvd0Nhc2VAQXRvbWljU3RyaW5n
QFdURkBAQ0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBQQVZTdHJpbmdJbXBs
QDJAQFoKICAgICA/YWRkU2xvd0Nhc2VASWRlbnRpZmllckBKU0NAQENBP0FWPyRQYXNzUmVmUHRy
QFZTdHJpbmdJbXBsQFdURkBAQFdURkBAUEFWRXhlY1N0YXRlQDJAUEFWU3RyaW5nSW1wbEA0QEBa
Ci0gICAgP2FkZFNsb3dDYXNlQElkZW50aWZpZXJASlNDQEBDQT9BVj8kUGFzc1JlZlB0ckBWU3Ry
aW5nSW1wbEBXVEZAQEBXVEZAQFBBVkpTR2xvYmFsRGF0YUAyQFBBVlN0cmluZ0ltcGxANEBAWgog
ICAgID9hZGRTdGF0aWNHbG9iYWxzQEpTR2xvYmFsT2JqZWN0QEpTQ0BASUFFWFBBVUdsb2JhbFBy
b3BlcnR5SW5mb0AxMkBIQFoKICAgICA/YWRvcHRAU3RyaW5nSW1wbEBXVEZAQFNBP0FWPyRQYXNz
UmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQDJAQUFWPyRTdHJpbmdCdWZmZXJAX1dAMkBAWgogICAg
ID9hZG9wdEBTdHJpbmdJbXBsQFdURkBAU0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RG
QEBAMkBBQVY/JFN0cmluZ0J1ZmZlckBFQDJAQFoKQEAgLTEzMiw3ICsxMTcsNiBAQCBFWFBPUlRT
CiAgICAgP2NhbmNlbENhbGxPbk1haW5UaHJlYWRAV1RGQEBZQVhQNkFYUEFYQFowQFoKICAgICA/
Y2FuU2hyaW5rQFN0cmluZ0J1aWxkZXJAV1RGQEBRQkVfTlhaCiAgICAgP2NhcGFjaXR5QEhlYXBA
SlNDQEBRQUVJWFoKLSAgICA/Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbkBTdHJ1Y3R1cmVASlND
QEBTQVBBVjEyQEFBVkpTR2xvYmFsRGF0YUAyQFBBVjEyQFZKU1ZhbHVlQDJAQFoKICAgICA/Y2hh
cmFjdGVyU3RhcnRpbmdBdEBTdHJpbmdAV1RGQEBRQkVISUBaCiAgICAgP2NoYXJhY3RlcnNUb0Rv
dWJsZUBXVEZAQFlBTlBCX1dJUEFfTkBaCiAgICAgP2NoYXJhY3RlcnNUb0RvdWJsZUBXVEZAQFlB
TlBCRUlQQV9OQFoKQEAgLTE0NCw3ICsxMjgsNiBAQCBFWFBPUlRTCiAgICAgP2NoYXJhY3RlcnNU
b1VJbnRTdHJpY3RAV1RGQEBZQUlQQkVJUEFfTkhAWgogICAgID9jaGFyYWN0ZXJzV2l0aE51bGxU
ZXJtaW5hdGlvbkBTdHJpbmdAV1RGQEBRQUVQQl9XWFoKICAgICA/Y2hlY2tDdXJyZW50SWRlbnRp
ZmllclRhYmxlQElkZW50aWZpZXJASlNDQEBDQVhQQVZFeGVjU3RhdGVAMkBAWgotICAgID9jaGVj
a0N1cnJlbnRJZGVudGlmaWVyVGFibGVASWRlbnRpZmllckBKU0NAQENBWFBBVkpTR2xvYmFsRGF0
YUAyQEBaCiAgICAgP2NoZWNrc3VtQE1ENUBXVEZAQFFBRVhBQVY/JFZlY3RvckBFJDBCQUBWQ3Jh
c2hPbk92ZXJmbG93QFdURkBAQDJAQFoKICAgICA/Y2hlY2tTeW50YXhASlNDQEBZQV9OUEFWRXhl
Y1N0YXRlQDFAQUJWU291cmNlQ29kZUAxQFBBVkpTVmFsdWVAMUBAWgogICAgID9jbGFzc05hbWVA
SlNPYmplY3RASlNDQEBTQT9BVlN0cmluZ0BXVEZAQFBCVjEyQEBaCkBAIC0xNjMsMzAgKzE0Niwy
MiBAQCBFWFBPUlRTCiAgICAgP2NvbnN0cnVjdE51bWJlckBKU0NAQFlBUEFWTnVtYmVyT2JqZWN0
QDFAUEFWRXhlY1N0YXRlQDFAUEFWSlNHbG9iYWxPYmplY3RAMUBWSlNWYWx1ZUAxQEBaCiAgICAg
P2NvbnN0cnVjdFN0cmluZ0BKU0NAQFlBUEFWU3RyaW5nT2JqZWN0QDFAUEFWRXhlY1N0YXRlQDFA
UEFWSlNHbG9iYWxPYmplY3RAMUBWSlNWYWx1ZUAxQEBaCiAgICAgP2NvbnRhaW5zT25seVdoaXRl
c3BhY2VAU3RyaW5nSW1wbEBXVEZAQFFBRV9OWFoKLSAgICA/Y29udmVydERvdWJsZVRvQ29udGln
dW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4QEpTT2JqZWN0QEpTQ0BAQUFFWEFBVkpTR2xvYmFs
RGF0YUAyQElWSlNWYWx1ZUAyQEBaCi0gICAgP2NvbnZlcnRJbnQzMlRvRG91YmxlT3JDb250aWd1
b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXhASlNPYmplY3RASlNDQEBBQUVYQUFWSlNHbG9iYWxE
YXRhQDJASVZKU1ZhbHVlQDJAQFoKICAgICA/Y29udmVydExhdGluMVRvVVRGOEBVbmljb2RlQFdU
RkBAWUE/QVc0Q29udmVyc2lvblJlc3VsdEAxMkBQQVBCRVBCRVBBUEFEUEFEQFoKICAgICA/Y29u
dmVydFVURjE2VG9VVEY4QFVuaWNvZGVAV1RGQEBZQT9BVzRDb252ZXJzaW9uUmVzdWx0QDEyQFBB
UEJfV1BCX1dQQVBBRFBBRF9OQFoKICAgICA/Y29udmVydFVURjhUb1VURjE2QFVuaWNvZGVAV1RG
QEBZQT9BVzRDb252ZXJzaW9uUmVzdWx0QDEyQFBBUEJEUEJEUEFQQV9XUEFfV1BBX05fTkBaCiAg
ICAgP2NvcHlCYWNraW5nU3RvcmVASlNPYmplY3RASlNDQEBTQVhQQVZKU0NlbGxAMkBBQVZDb3B5
VmlzaXRvckAyQEBaCiAgICAgP2NyZWF0ZUBKU0Z1bmN0aW9uQEpTQ0BAU0FQQVYxMkBQQVZFeGVj
U3RhdGVAMkBQQVZKU0dsb2JhbE9iamVjdEAyQEhBQlZTdHJpbmdAV1RGQEBQNklfSjBAWlc0SW50
cmluc2ljQDJAM0BaCi0gICAgP2NyZWF0ZUBKU0dsb2JhbERhdGFASlNDQEBTQT9BVj8kUGFzc1Jl
ZlB0ckBWSlNHbG9iYWxEYXRhQEpTQ0BAQFdURkBAVzRIZWFwVHlwZUAyQEBaCiAgICAgP2NyZWF0
ZUBPcGFxdWVKU1N0cmluZ0BAU0E/QVY/JFBhc3NSZWZQdHJAVU9wYXF1ZUpTU3RyaW5nQEBAV1RG
QEBBQlZTdHJpbmdAM0BAWgotICAgID9jcmVhdGVAUmVnRXhwQEpTQ0BAU0FQQVYxMkBBQVZKU0ds
b2JhbERhdGFAMkBBQlZTdHJpbmdAV1RGQEBXNFJlZ0V4cEZsYWdzQDJAQFoKICAgICA/Y3JlYXRl
QFN0cmluZ0ltcGxAV1RGQEBTQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAyQFBC
X1dJQFoKICAgICA/Y3JlYXRlQFN0cmluZ0ltcGxAV1RGQEBTQT9BVj8kUGFzc1JlZlB0ckBWU3Ry
aW5nSW1wbEBXVEZAQEAyQFBCRUBaCiAgICAgP2NyZWF0ZUBTdHJpbmdJbXBsQFdURkBAU0E/QVY/
JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBQQkVJQFoKICAgICA/Y3JlYXRlOEJpdElm
UG9zc2libGVAU3RyaW5nSW1wbEBXVEZAQFNBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdU
RkBAQDJAUEJfV0lAWgotICAgID9jcmVhdGVFbXB0eVN0cmluZ0BTbWFsbFN0cmluZ3NASlNDQEBB
QUVYUEFWSlNHbG9iYWxEYXRhQDJAQFoKICAgICA/Y3JlYXRlRXJyb3JASlNDQEBZQVBBVkpTT2Jq
ZWN0QDFAUEFWRXhlY1N0YXRlQDFAQUJWU3RyaW5nQFdURkBAQFoKLSAgICA/Y3JlYXRlTGVha2Vk
QEpTR2xvYmFsRGF0YUBKU0NAQFNBP0FWPyRQYXNzUmVmUHRyQFZKU0dsb2JhbERhdGFASlNDQEBA
V1RGQEBXNEhlYXBUeXBlQDJAQFoKICAgICA/Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3JA
SlNDQEBZQVBBVkpTT2JqZWN0QDFAUEFWRXhlY1N0YXRlQDFAQFoKICAgICA/Y3JlYXRlUmFuZ2VF
cnJvckBKU0NAQFlBUEFWSlNPYmplY3RAMUBQQVZFeGVjU3RhdGVAMUBBQlZTdHJpbmdAV1RGQEBA
WgogICAgID9jcmVhdGVSZWZlcmVuY2VFcnJvckBKU0NAQFlBUEFWSlNPYmplY3RAMUBQQVZFeGVj
U3RhdGVAMUBBQlZTdHJpbmdAV1RGQEBAWgotICAgID9jcmVhdGVTaW5nbGVDaGFyYWN0ZXJTdHJp
bmdAU21hbGxTdHJpbmdzQEpTQ0BAQUFFWFBBVkpTR2xvYmFsRGF0YUAyQEVAWgogICAgID9jcmVh
dGVTdGFja092ZXJmbG93RXJyb3JASlNDQEBZQVBBVkpTT2JqZWN0QDFAUEFWRXhlY1N0YXRlQDFA
QFoKICAgICA/Y3JlYXRlU3ludGF4RXJyb3JASlNDQEBZQVBBVkpTT2JqZWN0QDFAUEFWRXhlY1N0
YXRlQDFAQUJWU3RyaW5nQFdURkBAQFoKLSAgICA/Y3JlYXRlVGFibGVASGFzaFRhYmxlQEpTQ0BA
QUJFWFBBVkpTR2xvYmFsRGF0YUAyQEBaCiAgICAgP2NyZWF0ZVRocmVhZEBXVEZAQFlBSVA2QVBB
WFBBWEBaMEBaCiAgICAgP2NyZWF0ZVRocmVhZEBXVEZAQFlBSVA2QVBBWFBBWEBaMFBCREBaCiAg
ICAgP2NyZWF0ZVRocmVhZEBXVEZAQFlBSVA2QVhQQVhAWjBQQkRAWgpAQCAtMjIzLDIwICsxOTgs
MTYgQEAgRVhQT1JUUwogICAgID9kZWxldGVQcm9wZXJ0eUJ5SW5kZXhASlNPYmplY3RASlNDQEBT
QV9OUEFWSlNDZWxsQDJAUEFWRXhlY1N0YXRlQDJASUBaCiAgICAgP2RlbGV0ZVByb3BlcnR5QnlJ
bmRleEBKU1Byb3h5QEpTQ0BAS0FfTlBBVkpTQ2VsbEAyQFBBVkV4ZWNTdGF0ZUAyQElAWgogICAg
ID9kZWxldGVUYWJsZUBIYXNoVGFibGVASlNDQEBRQkVYWFoKLSAgICA/ZGVzcGVjaWZ5RGljdGlv
bmFyeUZ1bmN0aW9uQFN0cnVjdHVyZUBKU0NAQFFBRVhBQVZKU0dsb2JhbERhdGFAMkBWUHJvcGVy
dHlOYW1lQDJAQFoKLSAgICA/ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uQFN0cnVjdHVyZUBK
U0NAQFNBUEFWMTJAQUFWSlNHbG9iYWxEYXRhQDJAUEFWMTJAVlByb3BlcnR5TmFtZUAyQEBaCiAg
ICAgP2Rlc3Ryb3lASlNDZWxsQEpTQ0BAS0FYUEFWMTJAQFoKICAgICA/ZGVzdHJveUBKU0dsb2Jh
bE9iamVjdEBKU0NAQFNBWFBBVkpTQ2VsbEAyQEBaCiAgICAgP2Rlc3Ryb3lAT3V0T2ZMaW5lQml0
c0BCaXRWZWN0b3JAV1RGQEBTQVhQQVYxMjNAQFoKICAgICA/ZGV0YWNoQERlYnVnZ2VyQEpTQ0BA
VUFFWFBBVkpTR2xvYmFsT2JqZWN0QDJAQFoKICAgICA/ZGV0YWNoVGhyZWFkQFdURkBAWUFYSUBa
Ci0gICAgP2Rpc2NhcmRBbGxDb2RlQEpTR2xvYmFsRGF0YUBKU0NAQFFBRVhYWgogICAgID9kaXNw
bGF5TmFtZUBKU0Z1bmN0aW9uQEpTQ0BAUUFFP0FWU3RyaW5nQFdURkBAUEFWRXhlY1N0YXRlQDJA
QFoKICAgICA/ZHRvYUBXVEZAQFlBWFFBRE5BQV9OQUFIQUFJQFoKICAgICA/ZHVtcEBKU1ZhbHVl
QEpTQ0BAUUJFWEFBVlByaW50U3RyZWFtQFdURkBAQFoKICAgICA/ZHVtcEFsbE9wdGlvbnNAT3B0
aW9uc0BKU0NAQFNBWFBBVV9pb2J1ZkBAQFoKICAgICA/ZHVtcENhbGxGcmFtZUBJbnRlcnByZXRl
ckBKU0NAQFFBRVhQQVZFeGVjU3RhdGVAMkBAWgotICAgID9kdW1wU2FtcGxlRGF0YUBKU0dsb2Jh
bERhdGFASlNDQEBRQUVYUEFWRXhlY1N0YXRlQDJAQFoKICAgICA/RWNtYVNjcmlwdENvbnZlcnRl
ckBEb3VibGVUb1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFNBQUJWMTIz
QFhaCiAgICAgP2VtcHR5QFN0cmluZ0ltcGxAV1RGQEBTQVBBVjEyQFhaCiAgICAgP2VtcHR5T2Jq
ZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlQFByb3RvdHlwZU1hcEBKU0NAQFFBRVBBVlN0cnVjdHVy
ZUAyQFBBVkpTT2JqZWN0QDJASUBaCkBAIC0yODIsMTEgKzI1Myw3IEBAIEVYUE9SVFMKICAgICA/
ZmluZEBTdHJpbmdJbXBsQFdURkBAUUFFSVBBVjEyQElAWgogICAgID9maW5kSWdub3JpbmdDYXNl
QFN0cmluZ0ltcGxAV1RGQEBRQUVJUEFWMTJASUBaCiAgICAgP2ZpbmRBbGxvY2F0b3JAV2Vha1Nl
dEBKU0NAQEFBRVBBVUZyZWVDZWxsQFdlYWtCbG9ja0AyQFhaCi0gICAgP2ZpbmlzaENyZWF0aW9u
QEJvb2xlYW5PYmplY3RASlNDQEBJQUVYQUFWSlNHbG9iYWxEYXRhQDJAQFoKLSAgICA/ZmluaXNo
Q3JlYXRpb25ARGF0ZUluc3RhbmNlQEpTQ0BASUFFWEFBVkpTR2xvYmFsRGF0YUAyQE5AWgotICAg
ID9maW5pc2hDcmVhdGlvbkBJbnRlcm5hbEZ1bmN0aW9uQEpTQ0BASUFFWEFBVkpTR2xvYmFsRGF0
YUAyQEFCVlN0cmluZ0BXVEZAQEBaCiAgICAgP2ZpbmlzaENyZWF0aW9uQFJlZ0V4cE9iamVjdEBK
U0NAQElBRVhQQVZKU0dsb2JhbE9iamVjdEAyQEBaCi0gICAgP2ZpbmlzaENyZWF0aW9uQFN0cmlu
Z09iamVjdEBKU0NAQElBRVhBQVZKU0dsb2JhbERhdGFAMkBQQVZKU1N0cmluZ0AyQEBaCiAgICAg
P2ZpcmVAV2F0Y2hkb2dASlNDQEBRQUVYWFoKICAgICA/Zm9jdXNAUHJvZmlsZUBKU0NAQFFBRVhQ
QlZQcm9maWxlTm9kZUAyQEBaCiAgICAgP2ZvbGRDYXNlQFN0cmluZ0BXVEZAQFFCRT9BVjEyQFha
CkBAIC0yOTksMTQgKzI2NiwxMiBAQCBFWFBPUlRTCiAgICAgP2Zyb21VVEY4SW50ZXJuYWxAQXRv
bWljU3RyaW5nQFdURkBAQ0E/QVYxMkBQQkQwQFoKICAgICA/ZnJvbVVURjhXaXRoTGF0aW4xRmFs
bGJhY2tAU3RyaW5nQFdURkBAU0E/QVYxMkBQQkVJQFoKICAgICA/ZnVuY3Rpb25HZXR0ZXJAUHJv
cGVydHlTbG90QEpTQ0BAQUJFP0FWSlNWYWx1ZUAyQFBBVkV4ZWNTdGF0ZUAyQEBaCi0gICAgP2dl
dEBTdHJ1Y3R1cmVASlNDQEBRQUVIQUFWSlNHbG9iYWxEYXRhQDJAVlByb3BlcnR5TmFtZUAyQEFB
SUFBUEFWSlNDZWxsQDJAQFoKICAgICA/Z2V0Q2FsY3VsYXRlZERpc3BsYXlOYW1lQEpTQ0BAWUE/
QVZTdHJpbmdAV1RGQEBQQVZFeGVjU3RhdGVAMUBQQVZKU09iamVjdEAxQEBaCiAgICAgP2dldENh
bGxhYmxlT2JqZWN0U2xvd0BKU0NAQFlBUEFWSlNDZWxsQDFAUEFWMjFAQFoKICAgICA/Z2V0Q2Fs
bERhdGFASlNDZWxsQEpTQ0BAU0E/QVc0Q2FsbFR5cGVAMkBQQVYxMkBBQVRDYWxsRGF0YUAyQEBa
CiAgICAgP2dldENvbnN0cnVjdERhdGFASlNDZWxsQEpTQ0BAU0E/QVc0Q29uc3RydWN0VHlwZUAy
QFBBVjEyQEFBVENvbnN0cnVjdERhdGFAMkBAWgogICAgID9nZXREYXRhMTZTbG93Q2FzZUBTdHJp
bmdJbXBsQFdURkBAQUJFUEJfV1haCiAgICAgP2dldElEQFNvdXJjZVByb3ZpZGVyQEpTQ0BAQUFF
WFhaCi0gICAgP2dldFN0YWNrVHJhY2VASW50ZXJwcmV0ZXJASlNDQEBTQVhQQVZKU0dsb2JhbERh
dGFAMkBBQVY/JFZlY3RvckBVU3RhY2tGcmFtZUBKU0NAQCQwQUBWQ3Jhc2hPbk92ZXJmbG93QFdU
RkBAQFdURkBASUBaCiAgICAgP2dldE9iamVjdEBKU0NlbGxASlNDQEBRQUVQQVZKU09iamVjdEAy
QFhaCiAgICAgP2dldE9iamVjdFR5cGVATWVtb3J5SW5zdHJ1bWVudGF0aW9uQFdURkBAQ0FQQkRQ
QVZNZW1vcnlPYmplY3RJbmZvQDJAQFoKICAgICA/Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
QEpTT2JqZWN0QEpTQ0BAU0FYUEFWMTJAUEFWRXhlY1N0YXRlQDJAQUFWUHJvcGVydHlOYW1lQXJy
YXlAMkBXNEVudW1lcmF0aW9uTW9kZUAyQEBaCkBAIC0zMzAsNyArMjk1LDYgQEAgRVhQT1JUUwog
ICAgID9nbG9iYWxFeGVjQEpTR2xvYmFsT2JqZWN0QEpTQ0BAUUFFUEFWRXhlY1N0YXRlQDJAWFoK
ICAgICA/Z2xvYmFsT2JqZWN0Q291bnRASGVhcEBKU0NAQFFBRUlYWgogICAgID9ncm93QEhhbmRs
ZVNldEBKU0NAQEFBRVhYWgotICAgID9ncm93T3V0T2ZMaW5lU3RvcmFnZUBKU09iamVjdEBKU0NA
QFFBRVBBVkJ1dHRlcmZseUAyQEFBVkpTR2xvYmFsRGF0YUAyQElJQFoKICAgICA/aGFzaFNsb3dD
YXNlQFN0cmluZ0ltcGxAV1RGQEBBQkVJWFoKICAgICA/aGFzUHJvcGVydHlASlNPYmplY3RASlND
QEBRQkVfTlBBVkV4ZWNTdGF0ZUAyQElAWgogICAgID9oYXNQcm9wZXJ0eUBKU09iamVjdEBKU0NA
QFFCRV9OUEFWRXhlY1N0YXRlQDJAVlByb3BlcnR5TmFtZUAyQEBaCkBAIC0zNjgsOCArMzMyLDYg
QEAgRVhQT1JUUwogICAgID9sb3dlckBTdHJpbmdJbXBsQFdURkBAUUFFP0FWPyRQYXNzUmVmUHRy
QFZTdHJpbmdJbXBsQFdURkBAQDJAWFoKICAgICA/bGluZUBTdGFja0ZyYW1lQEpTQ0BAUUFFSVha
CiAgICAgP21ha2U4Qml0RnJvbTE2Qml0U291cmNlQFN0cmluZ0BXVEZAQFNBP0FWMTJAUEJfV0lA
WgotICAgID9tYXRjaEBSZWdFeHBASlNDQEBRQUVIQUFWSlNHbG9iYWxEYXRhQDJAQUJWU3RyaW5n
QFdURkBASUFBVj8kVmVjdG9yQEgkMENBQFZDcmFzaE9uT3ZlcmZsb3dAV1RGQEBANUBAWgotICAg
ID9tYXRlcmlhbGl6ZVByb3BlcnR5TWFwQFN0cnVjdHVyZUBKU0NAQEFBRVhBQVZKU0dsb2JhbERh
dGFAMkBAWgogICAgID9tb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVAV1RGQEBZQU5YWgogICAg
ID9tb250aEZyb21EYXlJblllYXJAV1RGQEBZQUhIX05AWgogICAgID9tc1RvWWVhckBXVEZAQFlB
SE5AWgpAQCAtNDE3LDE1ICszNzksMTIgQEAgRVhQT1JUUwogICAgID9wdXREaXJlY3RWaXJ0dWFs
QEpTT2JqZWN0QEpTQ0BAU0FYUEFWMTJAUEFWRXhlY1N0YXRlQDJAVlByb3BlcnR5TmFtZUAyQFZK
U1ZhbHVlQDJASUBaCiAgICAgP3B1dERpcmVjdFZpcnR1YWxASlNQcm94eUBKU0NAQEtBWFBBVkpT
T2JqZWN0QDJAUEFWRXhlY1N0YXRlQDJAVlByb3BlcnR5TmFtZUAyQFZKU1ZhbHVlQDJASUBaCiAg
ICAgP3JhbmRvbU51bWJlckBXVEZAQFlBTlhaCi0gICAgP3JlY29tcGlsZUFsbEpTRnVuY3Rpb25z
QERlYnVnZ2VyQEpTQ0BAUUFFWFBBVkpTR2xvYmFsRGF0YUAyQEBaCiAgICAgP3JlZ0V4cEZsYWdz
QEpTQ0BAWUE/QVc0UmVnRXhwRmxhZ3NAMUBBQlZTdHJpbmdAV1RGQEBAWgogICAgID9yZWlmeVN0
cmluZ0BTdHJpbmdCdWlsZGVyQFdURkBAQUJFWFhaCiAgICAgP3JlbGVhc2VEZWNvbW1pdHRlZEBP
U0FsbG9jYXRvckBXVEZAQFNBWFBBWElAWgotICAgID9yZWxlYXNlRXhlY3V0YWJsZU1lbW9yeUBK
U0dsb2JhbERhdGFASlNDQEBRQUVYWFoKICAgICA/cmVtb3ZlQFN0cmluZ0BXVEZAQFFBRVhJSEBa
CiAgICAgP3JlbW92ZUJsb2NrQE1hcmtlZEFsbG9jYXRvckBKU0NAQFFBRVhQQVZNYXJrZWRCbG9j
a0AyQEBaCiAgICAgP3JlbW92ZUNoYXJhY3RlcnNAU3RyaW5nQFdURkBAUUJFP0FWMTJAUDZBX05f
V0BaQFoKLSAgICA/cmVtb3ZlRGlyZWN0QEpTT2JqZWN0QEpTQ0BAUUFFX05BQVZKU0dsb2JhbERh
dGFAMkBWUHJvcGVydHlOYW1lQDJAQFoKICAgICA/cmVwbGFjZUBTdHJpbmdJbXBsQFdURkBAUUFF
P0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQDJAX1cwQFoKICAgICA/cmVwbGFjZUBT
dHJpbmdJbXBsQFdURkBAUUFFP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQDJAX1dQ
QVYxMkBAWgogICAgID9yZXBsYWNlQFN0cmluZ0ltcGxAV1RGQEBRQUU/QVY/JFBhc3NSZWZQdHJA
VlN0cmluZ0ltcGxAV1RGQEBAMkBfV1BCRUlAWgpAQCAtNDM5LDcgKzM5OCw2IEBAIEVYUE9SVFMK
ICAgICA/cmVzZXJ2ZUFuZENvbW1pdEBPU0FsbG9jYXRvckBXVEZAQFNBUEFYSVc0VXNhZ2VAMTJA
X04xMUBaCiAgICAgP3Jlc2VydmVDYXBhY2l0eUBTdHJpbmdCdWlsZGVyQFdURkBAUUFFWElAWgog
ICAgID9yZXNldEBQYXJzZXJBcmVuYUBKU0NAQFFBRVhYWgotICAgID9yZXNldERhdGVDYWNoZUBK
U0dsb2JhbERhdGFASlNDQEBRQUVYWFoKICAgICA/cmVzaXplQFN0cmluZ0J1aWxkZXJAV1RGQEBR
QUVYSUBaCiAgICAgP3Jlc2l6ZU91dE9mTGluZUBCaXRWZWN0b3JAV1RGQEBBQUVYSUBaCiAgICAg
P3Jlc29sdmVSb3BlQEpTUm9wZVN0cmluZ0BKU0NAQEFCRVhQQVZFeGVjU3RhdGVAMkBAWgpAQCAt
NDU2LDE0ICs0MTQsMTAgQEAgRVhQT1JUUwogICAgID9zZXRFbnVtZXJhYmxlQFByb3BlcnR5RGVz
Y3JpcHRvckBKU0NAQFFBRVhfTkBaCiAgICAgP3NldEdhcmJhZ2VDb2xsZWN0aW9uVGltZXJFbmFi
bGVkQEhlYXBASlNDQEBRQUVYX05AWgogICAgID9zZXRHZXR0ZXJAUHJvcGVydHlEZXNjcmlwdG9y
QEpTQ0BAUUFFWFZKU1ZhbHVlQDJAQFoKLSAgICA/c2V0R2xvYmFsVGhpc0BKU0dsb2JhbE9iamVj
dEBKU0NAQElBRVhBQVZKU0dsb2JhbERhdGFAMkBQQVZKU09iamVjdEAyQEBaCi0gICAgP3NldElu
ZGV4UXVpY2tseVRvVW5kZWNpZGVkQEpTT2JqZWN0QEpTQ0BAQUFFWEFBVkpTR2xvYmFsRGF0YUAy
QElWSlNWYWx1ZUAyQEBaCiAgICAgP3NldE1haW5UaHJlYWRDYWxsYmFja3NQYXVzZWRAV1RGQEBZ
QVhfTkBaCiAgICAgP3NldE9wdGlvbkBPcHRpb25zQEpTQ0BAU0FfTlBCREBaCiAgICAgP3NldE9y
ZGVyTG93ZXJGaXJzdEBDb2xsYXRvckBXVEZAQFFBRVhfTkBaCi0gICAgP3NldFByb3RvdHlwZUBK
U09iamVjdEBKU0NAQFFBRVhBQVZKU0dsb2JhbERhdGFAMkBWSlNWYWx1ZUAyQEBaCiAgICAgP3Nl
dFNldHRlckBQcm9wZXJ0eURlc2NyaXB0b3JASlNDQEBRQUVYVkpTVmFsdWVAMkBAWgotICAgID9z
ZXRUYXJnZXRASlNQcm94eUBKU0NAQElBRVhBQVZKU0dsb2JhbERhdGFAMkBQQVZKU0dsb2JhbE9i
amVjdEAyQEBaCiAgICAgP3NldHRlckBQcm9wZXJ0eURlc2NyaXB0b3JASlNDQEBRQkU/QVZKU1Zh
bHVlQDJAWFoKICAgICA/c2V0VG9DdXJyZW50TG9jYWxUaW1lQEdyZWdvcmlhbkRhdGVUaW1lQFdU
RkBAUUFFWFhaCiAgICAgP3NldFVuZGVmaW5lZEBQcm9wZXJ0eURlc2NyaXB0b3JASlNDQEBRQUVY
WFoKQEAgLTQ4NCwxMSArNDM4LDkgQEAgRVhQT1JUUwogICAgID9zcGxpdEBTdHJpbmdAV1RGQEBR
QkVYX1dfTkFBVj8kVmVjdG9yQFZTdHJpbmdAV1RGQEAkMEFAVkNyYXNoT25PdmVyZmxvd0AyQEAy
QEBaCiAgICAgP3NwbGl0QFN0cmluZ0BXVEZAQFFCRVhBQlYxMkBfTkFBVj8kVmVjdG9yQFZTdHJp
bmdAV1RGQEAkMEFAVkNyYXNoT25PdmVyZmxvd0AyQEAyQEBaCiAgICAgP3N0YXJ0UHJvZmlsaW5n
QExlZ2FjeVByb2ZpbGVyQEpTQ0BAUUFFWFBBVkV4ZWNTdGF0ZUAyQEFCVlN0cmluZ0BXVEZAQEBa
Ci0gICAgP3N0YXJ0U2FtcGxpbmdASlNHbG9iYWxEYXRhQEpTQ0BAUUFFWFhaCiAgICAgP3N0YXJ0
c1dpdGhAU3RyaW5nSW1wbEBXVEZAQFFCRV9OX1dAWgogICAgID9zdGFydHNXaXRoQFN0cmluZ0lt
cGxAV1RGQEBRQkVfTlBCRElfTkBaCiAgICAgP3N0b3BQcm9maWxpbmdATGVnYWN5UHJvZmlsZXJA
SlNDQEBRQUU/QVY/JFBhc3NSZWZQdHJAVlByb2ZpbGVASlNDQEBAV1RGQEBQQVZFeGVjU3RhdGVA
MkBBQlZTdHJpbmdANEBAWgotICAgID9zdG9wU2FtcGxpbmdASlNHbG9iYWxEYXRhQEpTQ0BAUUFF
WFhaCiAgICAgP3N0cmluZ0BPcGFxdWVKU1N0cmluZ0BAUUJFP0FWU3RyaW5nQFdURkBAWFoKICAg
ICA/U3RyaW5nVG9Eb3VibGVAU3RyaW5nVG9Eb3VibGVDb252ZXJ0ZXJAZG91YmxlX2NvbnZlcnNp
b25AV1RGQEBTQU5QQkRJUEFJQFoKICAgICA/c3RyaXBXaGl0ZVNwYWNlQFN0cmluZ0BXVEZAQFFC
RT9BVjEyQFhaCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTQ4
NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc0NCw3ICs3NDQsNyBAQAogCQlCQzE4
QzQxRDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDbGFzc1JlZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0MEZDRTEwQTUxRTQ2QjAwMDVGMDYxIC8qIEpT
Q2xhc3NSZWYuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlCQzE4QzQxRTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDb250ZXh0UmVmLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEJENUEyQTBBM0U5MUY2MDBC
QUY1OUMgLyogSlNDb250ZXh0UmVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVi
bGljLCApOyB9OyB9OwogCQlCQzE4QzQxRjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNGdW5jdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjY5MkE4NUYw
MjU1NTk3RDAxRkY2MEY3IC8qIEpTRnVuY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCQzE4QzQyMDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNH
bG9iYWxEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMThFM0E1NjBERjkyNzhDMDBEOTBCMzQgLyogSlNHbG9iYWxEYXRhLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQkMxOEM0MjAwRTE2RjVDRDAw
QjM0NDYwIC8qIFZNLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMThFM0E1NjBERjkyNzhDMDBEOTBCMzQgLyogVk0uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzE4QzQyMTBFMTZGNUNEMDBCMzQ0NjAg
LyogSlNHbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4RTg5NDMzMENEMDYwM0YwMDM2NzE3OSAvKiBKU0dsb2JhbE9iamVjdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMThDNDIz
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0xvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDY1RUE0QzlBMDkyQUY5RTIwMDkzRDgwMCAvKiBKU0xvY2suaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzE4QzQy
NDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjJBMzk5MEUxNkUxNDgwMEFGMjFDOCAvKiBKU09iamVj
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04
NjEsNyArODYxLDcgQEAKIAkJRTEyNEE4RjcwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3Ry
aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI0
QThGNTBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMTI0QThGODBFNTU1Nzc1MDAzMDkx
RjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTEyNEE4RjYwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5n
LmNwcCAqLzsgfTsKIAkJRTE3ODYzNkQwRDlCRUVDMzAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJl
YWRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTE3ODYzNkMwRDlCRUVDMzAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwICovOyB9
OwotCQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQgLyogSlNHbG9iYWxEYXRhLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOEUzQTU3MERGOTI3OEMw
MEQ5MEIzNCAvKiBKU0dsb2JhbERhdGEuY3BwICovOyB9OworCQlFMThFM0E1OTBERjkyNzhDMDBE
OTBCMzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTE4RTNBNTcwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCAqLzsgfTsKIAkJRTQ5REMx
NkIxMkVGMjkzRTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5REMxNTUxMkVGMjc3MjAwMTg0
QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuY3BwICovOyB9OwogCQlFNDlEQzE2QzEyRUYyOTRF
MDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5REMxNTExMkVGMjcyMjAwMTg0QTFGIC8qIFNvdXJj
ZVByb3ZpZGVyQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNo
ZUl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
OURDMTQ5MTJFRjI2MUEwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNzczLDggKzE3
NzMsOCBAQAogCQlFMTI0QThGNjBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3BhcXVlSlNTdHJpbmcuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTc4NjMzRjBEOUJFQzAwMDBENzRFNzUg
LyogSW5pdGlhbGl6ZVRocmVhZGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbml0aWFsaXplVGhyZWFkaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUx
Nzg2MzZDMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVUaHJlYWRpbmcuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMThFM0E1NjBERjkyNzhDMDBEOTBCMzQgLyog
SlNHbG9iYWxEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2xvYmFs
RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMThFM0E1NzBERjkyNzhDMDBE
OTBCMzQgLyogSlNHbG9iYWxEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTR2xvYmFsRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUx
OEUzQTU2MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBWTS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMThFM0E1NzBERjky
NzhDMDBEOTBCMzQgLyogVk0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVk0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDlEQzE0OTEyRUYyNjFB
MDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTQ5REMxNTExMkVGMjcyMjAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVy
Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlUHJvdmlkZXJD
YWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDlEQzE1NTEyRUYyNzcyMDAx
ODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlckNhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTI0NjUsOCArMjQ2NSw4IEBACiAJCQkJQTdCNEFDQUUxNDg0QzlDRTAwQjM4
QTM2IC8qIEpTRXhwb3J0TWFjcm9zLmggKi8sCiAJCQkJRjY5MkE4NUUwMjU1NTk3RDAxRkY2MEY3
IC8qIEpTRnVuY3Rpb24uY3BwICovLAogCQkJCUY2OTJBODVGMDI1NTU5N0QwMUZGNjBGNyAvKiBK
U0Z1bmN0aW9uLmggKi8sCi0JCQkJRTE4RTNBNTcwREY5Mjc4QzAwRDkwQjM0IC8qIEpTR2xvYmFs
RGF0YS5jcHAgKi8sCi0JCQkJRTE4RTNBNTYwREY5Mjc4QzAwRDkwQjM0IC8qIEpTR2xvYmFsRGF0
YS5oICovLAorCQkJCUUxOEUzQTU3MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgKi8sCisJCQkJ
RTE4RTNBNTYwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmggKi8sCiAJCQkJMTRERTBENjgwRDAyNDMx
NDAwQUFDQ0EyIC8qIEpTR2xvYmFsT2JqZWN0LmNwcCAqLywKIAkJCQlBOEU4OTQzMzBDRDA2MDNG
MDAzNjcxNzkgLyogSlNHbG9iYWxPYmplY3QuaCAqLywKIAkJCQlCQzc1NkZDNjBFMjAzMUIyMDBE
RTdEMTIgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwICovLApAQCAtMzE4OCw3ICszMTg4
LDcgQEAKIAkJCQk4NkUzQzYxNDE2N0JBQkQ3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3QjRBQ0FGMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MUYwRTE2RjVDRDAwQjM0NDYwIC8qIEpTRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLAotCQkJCUJDMThDNDIwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0ds
b2JhbERhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDMThDNDIwMEUxNkY1Q0QwMEIzNDQ2MCAv
KiBWTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjEwRTE2RjVDRDAwQjM0NDYwIC8qIEpT
R2xvYmFsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzc1NkZDOTBFMjAzMUIyMDBERTdE
MTIgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkM1
MTc2MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zOTMwLDcgKzM5MzAsNyBAQAogCQkJCTE0QkQ1QTMwMEEzRTkxRjYwMEJBRjU5QyAvKiBKU0Nv
bnRleHRSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc4ODAxNDAxNDcxQUQ5MjAwNDFCMDE2
IC8qIEpTRGF0ZU1hdGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQwNTY2RDYxMDdFQzI3MTAw
NURCQzhEIC8qIEpTRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTE4RTNBNTkwREY5
Mjc4QzAwRDkwQjM0IC8qIEpTR2xvYmFsRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMThF
M0E1OTBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5
RDIxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTR2xvYmFsT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0RTlEMTdCMTA3RUM0NjkwMDREREEyMSAvKiBKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3NTEwN0VDMTNFMDAxM0U3QjIgLyogSlNMb2Nr
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BUk1Bc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOTEsMTQgKzM5MSwxNCBAQCB2b2lkIEFSTUFzc2VtYmxlcjo6YmFzZUluZGV4VHJhbnNmZXJG
bG9hCiAgICAgZGF0YVRyYW5zZmVyRmxvYXQodHJhbnNmZXJUeXBlLCBzcmNEc3QsIEFSTVJlZ2lz
dGVyczo6UzEsIG9mZnNldCk7CiB9CiAKLVBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRs
ZT4gQVJNQXNzZW1ibGVyOjpleGVjdXRhYmxlQ29weShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCitQYXNzUmVmUHRy
PEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEFSTUFzc2VtYmxlcjo6ZXhlY3V0YWJsZUNvcHkoVk0m
IHZtLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAg
IC8vIDY0LWJpdCBhbGlnbm1lbnQgaXMgcmVxdWlyZWQgZm9yIG5leHQgY29uc3RhbnQgcG9vbCBh
bmQgSklUIGNvZGUgYXMgd2VsbAogICAgIG1fYnVmZmVyLmZsdXNoV2l0aG91dEJhcnJpZXIodHJ1
ZSk7CiAgICAgaWYgKCFtX2J1ZmZlci5pc0FsaWduZWQoOCkpCiAgICAgICAgIGJrcHQoMCk7CiAK
LSAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0gbV9idWZmZXIuZXhl
Y3V0YWJsZUNvcHkoZ2xvYmFsRGF0YSwgb3duZXJVSUQsIGVmZm9ydCk7CisgICAgUmVmUHRyPEV4
ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KHZt
LCBvd25lclVJRCwgZWZmb3J0KTsKICAgICBjaGFyKiBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4ocmVzdWx0LT5zdGFydCgpKTsKIAogICAgIGZvciAoSnVtcHM6Okl0ZXJhdG9yIGl0ZXIg
PSBtX2p1bXBzLmJlZ2luKCk7IGl0ZXIgIT0gbV9qdW1wcy5lbmQoKTsgKytpdGVyKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmgJKHJl
dmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNz
ZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2MCw3ICs3NjAsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIHJldHVybiBsb2FkQnJhbmNoVGFyZ2V0KEFSTVJlZ2lzdGVyczo6cGMs
IGNjLCB1c2VDb25zdGFudFBvb2wpOwogICAgICAgICB9CiAKLSAgICAgICAgUGFzc1JlZlB0cjxF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxlQ29weShKU0dsb2JhbERhdGEmLCB2b2lk
KiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQpOworICAgICAgICBQYXNzUmVmUHRyPEV4
ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVDb3B5KFZNJiwgdm9pZCogb3duZXJVSUQs
IEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKIAogICAgICAgICB1bnNpZ25lZCBkZWJ1Z09mZnNldCgp
IHsgcmV0dXJuIG1fYnVmZmVyLmRlYnVnT2Zmc2V0KCk7IH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCShyZXZpc2lvbiAx
NDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJFeGVjdXRh
YmxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiSklUQ29tcGlsYXRpb25FZmZvcnQuaCIKLSNpbmNs
dWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgInN0ZGludC5o
IgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC0x
MzAsMTIgKzEzMCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBBc3Nl
bWJsZXJMYWJlbChtX2luZGV4KTsKICAgICAgICAgfQogCi0gICAgICAgIFBhc3NSZWZQdHI8RXhl
Y3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJsZUNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQorICAgICAg
ICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVDb3B5KFZNJiB2
bSwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAg
ewogICAgICAgICAgICAgaWYgKCFtX2luZGV4KQogICAgICAgICAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0gZ2xv
YmFsRGF0YS5leGVjdXRhYmxlQWxsb2NhdG9yLmFsbG9jYXRlKGdsb2JhbERhdGEsIG1faW5kZXgs
IG93bmVyVUlELCBlZmZvcnQpOworICAgICAgICAgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlI
YW5kbGU+IHJlc3VsdCA9IHZtLmV4ZWN1dGFibGVBbGxvY2F0b3IuYWxsb2NhdGUodm0sIG1faW5k
ZXgsIG93bmVyVUlELCBlZmZvcnQpOwogCiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9v
bC5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0Fzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaAkod29ya2luZyBjb3B5KQpAQCAtMTk1
LDEwICsxOTUsMTAgQEAgcHVibGljOgogICAgICAgICBwdXRJbnRlZ3JhbFVuY2hlY2tlZCh2YWx1
ZS5sb3cpOwogICAgIH0KIAotICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4g
ZXhlY3V0YWJsZUNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB2b2lkKiBvd25lclVJRCwg
SklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQorICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1l
bW9yeUhhbmRsZT4gZXhlY3V0YWJsZUNvcHkoVk0mIHZtLCB2b2lkKiBvd25lclVJRCwgSklUQ29t
cGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgIHsKICAgICAgICAgZmx1c2hDb25zdGFudFBvb2wo
ZmFsc2UpOwotICAgICAgICByZXR1cm4gQXNzZW1ibGVyQnVmZmVyOjpleGVjdXRhYmxlQ29weShn
bG9iYWxEYXRhLCBvd25lclVJRCwgZWZmb3J0KTsKKyAgICAgICAgcmV0dXJuIEFzc2VtYmxlckJ1
ZmZlcjo6ZXhlY3V0YWJsZUNvcHkodm0sIG93bmVyVUlELCBlZmZvcnQpOwogICAgIH0KIAogICAg
IHZvaWQgcHV0U2hvcnRXaXRoQ29uc3RhbnRJbnQodWludDE2X3QgaW5zbiwgdWludDMyX3QgY29u
c3RhbnQsIGJvb2wgaXNSZXVzYWJsZSA9IGZhbHNlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgTGlua0J1ZmZlcjo6bGlua0NvZGUodm9pZCogb3du
ZXJVSUQKIHsKICAgICBBU1NFUlQoIW1fY29kZSk7CiAjaWYgIUVOQUJMRShCUkFOQ0hfQ09NUEFD
VElPTikKLSAgICBtX2V4ZWN1dGFibGVNZW1vcnkgPSBtX2Fzc2VtYmxlci0+bV9hc3NlbWJsZXIu
ZXhlY3V0YWJsZUNvcHkoKm1fZ2xvYmFsRGF0YSwgb3duZXJVSUQsIGVmZm9ydCk7CisgICAgbV9l
eGVjdXRhYmxlTWVtb3J5ID0gbV9hc3NlbWJsZXItPm1fYXNzZW1ibGVyLmV4ZWN1dGFibGVDb3B5
KCptX3ZtLCBvd25lclVJRCwgZWZmb3J0KTsKICAgICBpZiAoIW1fZXhlY3V0YWJsZU1lbW9yeSkK
ICAgICAgICAgcmV0dXJuOwogICAgIG1fY29kZSA9IG1fZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQo
KTsKQEAgLTcwLDcgKzcwLDcgQEAgdm9pZCBMaW5rQnVmZmVyOjpsaW5rQ29kZSh2b2lkKiBvd25l
clVJRAogICAgIEFTU0VSVChtX2NvZGUpOwogI2Vsc2UKICAgICBtX2luaXRpYWxTaXplID0gbV9h
c3NlbWJsZXItPm1fYXNzZW1ibGVyLmNvZGVTaXplKCk7Ci0gICAgbV9leGVjdXRhYmxlTWVtb3J5
ID0gbV9nbG9iYWxEYXRhLT5leGVjdXRhYmxlQWxsb2NhdG9yLmFsbG9jYXRlKCptX2dsb2JhbERh
dGEsIG1faW5pdGlhbFNpemUsIG93bmVyVUlELCBlZmZvcnQpOworICAgIG1fZXhlY3V0YWJsZU1l
bW9yeSA9IG1fdm0tPmV4ZWN1dGFibGVBbGxvY2F0b3IuYWxsb2NhdGUoKm1fdm0sIG1faW5pdGlh
bFNpemUsIG93bmVyVUlELCBlZmZvcnQpOwogICAgIGlmICghbV9leGVjdXRhYmxlTWVtb3J5KQog
ICAgICAgICByZXR1cm47CiAgICAgbV9jb2RlID0gKHVpbnQ4X3QqKW1fZXhlY3V0YWJsZU1lbW9y
eS0+c3RhcnQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlu
a0J1ZmZlci5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiAKIC8vIExp
bmtCdWZmZXI6CiAvLwpAQCAtNzYsMTQgKzc2LDE0IEBAIGNsYXNzIExpbmtCdWZmZXIgewogI2Vu
ZGlmCiAKIHB1YmxpYzoKLSAgICBMaW5rQnVmZmVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
TWFjcm9Bc3NlbWJsZXIqIG1hc20sIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9y
dCBlZmZvcnQgPSBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKQorICAgIExpbmtCdWZmZXIoVk0m
IHZtLCBNYWNyb0Fzc2VtYmxlciogbWFzbSwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9u
RWZmb3J0IGVmZm9ydCA9IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpCiAgICAgICAgIDogbV9z
aXplKDApCiAjaWYgRU5BQkxFKEJSQU5DSF9DT01QQUNUSU9OKQogICAgICAgICAsIG1faW5pdGlh
bFNpemUoMCkKICNlbmRpZgogICAgICAgICAsIG1fY29kZSgwKQogICAgICAgICAsIG1fYXNzZW1i
bGVyKG1hc20pCi0gICAgICAgICwgbV9nbG9iYWxEYXRhKCZnbG9iYWxEYXRhKQorICAgICAgICAs
IG1fdm0oJnZtKQogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLCBtX2NvbXBsZXRlZChmYWxzZSkK
ICAgICAgICAgLCBtX2VmZm9ydChlZmZvcnQpCkBAIC0yNTYsNyArMjU2LDcgQEAgcHJpdmF0ZToK
ICNlbmRpZgogICAgIHZvaWQqIG1fY29kZTsKICAgICBNYWNyb0Fzc2VtYmxlciogbV9hc3NlbWJs
ZXI7Ci0gICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CisgICAgVk0qIG1fdm07CiAjaWZu
ZGVmIE5ERUJVRwogICAgIGJvb2wgbV9jb21wbGV0ZWQ7CiAgICAgSklUQ29tcGlsYXRpb25FZmZv
cnQgbV9lZmZvcnQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01JUFNB
c3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01JUFNBc3NlbWJsZXIuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NSVBTQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3Niw5ICs2
NzYsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2J1ZmZlci5jb2RlU2l6ZSgpOwogICAg
IH0KIAotICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJsZUNv
cHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0KQorICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4g
ZXhlY3V0YWJsZUNvcHkoVk0mIHZtLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZv
cnQgZWZmb3J0KQogICAgIHsKLSAgICAgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+
IHJlc3VsdCA9IG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGdsb2JhbERhdGEsIG93bmVyVUlELCBl
ZmZvcnQpOworICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0g
bV9idWZmZXIuZXhlY3V0YWJsZUNvcHkodm0sIG93bmVyVUlELCBlZmZvcnQpOwogICAgICAgICBp
ZiAoIXJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiAwOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVyLmgJKHJldmlzaW9uIDE0ODY1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE1NzUsOSArMTU3NSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlYWRQQ3JlbGF0aXZlQWRkcmVzcygoKmluc3RydWN0aW9u
UHRyICYgMHhmZiksIGluc3RydWN0aW9uUHRyKSk7CiAgICAgfQogCi0gICAgUGFzc1JlZlB0cjxF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxlQ29weShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCisgICAg
UGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxlQ29weShWTSYgdm0s
IHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgewotICAg
ICAgICByZXR1cm4gbV9idWZmZXIuZXhlY3V0YWJsZUNvcHkoZ2xvYmFsRGF0YSwgb3duZXJVSUQs
IGVmZm9ydCk7CisgICAgICAgIHJldHVybiBtX2J1ZmZlci5leGVjdXRhYmxlQ29weSh2bSwgb3du
ZXJVSUQsIGVmZm9ydCk7CiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQgY2FjaGVGbHVzaCh2b2lk
KiBjb2RlLCBzaXplX3Qgc2l6ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9YODZBc3NlbWJsZXIuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTk5
MSw5ICsxOTkxLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYi5tX29mZnNldCAtIGEubV9v
ZmZzZXQ7CiAgICAgfQogICAgIAotICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRs
ZT4gZXhlY3V0YWJsZUNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB2b2lkKiBvd25lclVJ
RCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQorICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJs
ZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJsZUNvcHkoVk0mIHZtLCB2b2lkKiBvd25lclVJRCwgSklU
Q29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZm9ybWF0
dGVyLmV4ZWN1dGFibGVDb3B5KGdsb2JhbERhdGEsIG93bmVyVUlELCBlZmZvcnQpOworICAgICAg
ICByZXR1cm4gbV9mb3JtYXR0ZXIuZXhlY3V0YWJsZUNvcHkodm0sIG93bmVyVUlELCBlZmZvcnQp
OwogICAgIH0KIAogICAgIHVuc2lnbmVkIGRlYnVnT2Zmc2V0KCkgeyByZXR1cm4gbV9mb3JtYXR0
ZXIuZGVidWdPZmZzZXQoKTsgfQpAQCAtMjM0OSw5ICsyMzQ5LDkgQEAgcHJpdmF0ZToKICAgICAg
ICAgYm9vbCBpc0FsaWduZWQoaW50IGFsaWdubWVudCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIu
aXNBbGlnbmVkKGFsaWdubWVudCk7IH0KICAgICAgICAgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQogCi0gICAgICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1l
bW9yeUhhbmRsZT4gZXhlY3V0YWJsZUNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB2b2lk
KiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQorICAgICAgICBQYXNzUmVm
UHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVDb3B5KFZNJiB2bSwgdm9pZCog
b3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGdsb2JhbERhdGEsIG93bmVyVUlE
LCBlZmZvcnQpOworICAgICAgICAgICAgcmV0dXJuIG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KHZt
LCBvd25lclVJRCwgZWZmb3J0KTsKICAgICAgICAgfQogCiAgICAgICAgIHVuc2lnbmVkIGRlYnVn
T2Zmc2V0KCkgeyByZXR1cm4gbV9idWZmZXIuZGVidWdPZmZzZXQoKTsgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9u
IDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxOSArMzMsMTkgQEAKICNpZiBFTkFCTEUoSklUKQog
bmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyKQordm9pZCBDYWxsTGlu
a0luZm86OnVubGluayhWTSYgdm0sIFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIpCiB7CiAg
ICAgQVNTRVJUKGlzTGlua2VkKCkpOwogICAgIAogICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVt
cFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJy
YW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoaG90UGF0aEJlZ2luKSwgc3RhdGljX2Nhc3Q8TWFj
cm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KGNhbGxlZUdQUiksIDApOwogICAgIGlmIChpc0RGRykg
ewogI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxs
UmV0dXJuTG9jYXRpb24sIChjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyBnbG9iYWxEYXRhLmdldENU
SVN0dWIoREZHOjpsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpIDogZ2xvYmFsRGF0YS5nZXRD
VElTdHViKERGRzo6bGlua0NhbGxUaHVua0dlbmVyYXRvcikpLmNvZGUoKSk7CisgICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxSZXR1cm5Mb2NhdGlvbiwgKGNhbGxUeXBlID09IENvbnN0
cnVjdCA/IHZtLmdldENUSVN0dWIoREZHOjpsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpIDog
dm0uZ2V0Q1RJU3R1YihERkc6OmxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpKS5jb2RlKCkpOwogI2Vs
c2UKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgogICAgIH0g
ZWxzZQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0dXJuTG9jYXRpb24sIGNh
bGxUeXBlID09IENvbnN0cnVjdCA/IGdsb2JhbERhdGEuZ2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0
R2VuZXJhdG9yKS5jb2RlKCkgOiBnbG9iYWxEYXRhLmdldENUSVN0dWIobGlua0NhbGxHZW5lcmF0
b3IpLmNvZGUoKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxSZXR1cm5Mb2Nh
dGlvbiwgY2FsbFR5cGUgPT0gQ29uc3RydWN0ID8gdm0uZ2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0
R2VuZXJhdG9yKS5jb2RlKCkgOiB2bS5nZXRDVElTdHViKGxpbmtDYWxsR2VuZXJhdG9yKS5jb2Rl
KCkpOwogICAgIGhhc1NlZW5TaG91bGRSZXBhdGNoID0gZmFsc2U7CiAgICAgY2FsbGVlLmNsZWFy
KCk7CiAgICAgc3R1Yi5jbGVhcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3
ICs4Nyw3IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBwdWJsaWMgQmFzaWNSYXdTZW4KICAgICBD
b2RlT3JpZ2luIGNvZGVPcmlnaW47CiAKICAgICBib29sIGlzTGlua2VkKCkgeyByZXR1cm4gc3R1
YiB8fCBjYWxsZWU7IH0KLSAgICB2b2lkIHVubGluayhKU0dsb2JhbERhdGEmLCBSZXBhdGNoQnVm
ZmVyJik7CisgICAgdm9pZCB1bmxpbmsoVk0mLCBSZXBhdGNoQnVmZmVyJik7CiAKICAgICBib29s
IHNlZW5PbmNlKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMiw3ICszMDIs
NyBAQCBzdGF0aWMgdm9pZCBkdW1wU3RydWN0dXJlKFByaW50U3RyZWFtJiBvCiAgICAgCiAgICAg
b3V0LnByaW50ZigiJXMgPSAlcCIsIG5hbWUsIHN0cnVjdHVyZSk7CiAgICAgCi0gICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBpZGVu
dCk7CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQoZXhlYy0+dm0o
KSwgaWRlbnQpOwogICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkKICAgICAgICAgb3V0
LnByaW50ZigiIChvZmZzZXQgPSAlZCkiLCBvZmZzZXQpOwogfQpAQCAtNDg2LDcgKzQ4Niw3IEBA
IHZvaWQgQ29kZUJsb2NrOjpwcmludFN0cnVjdHVyZShQcmludFN0cmUKIAogdm9pZCBDb2RlQmxv
Y2s6OnByaW50U3RydWN0dXJlcyhQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJbnN0cnVjdGlvbiog
dlBDKQogewotICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IG1fZ2xvYmFsRGF0YS0+aW50
ZXJwcmV0ZXI7CisgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV92bS0+aW50ZXJwcmV0
ZXI7CiAgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQgPSB2UEMgLSBpbnN0cnVjdGlvbnMo
KS5iZWdpbigpOwogCiAgICAgaWYgKHZQQ1swXS51Lm9wY29kZSA9PSBpbnRlcnByZXRlci0+Z2V0
T3Bjb2RlKG9wX2dldF9ieV9pZCkpIHsKQEAgLTE2MDcsOSArMTYwNyw5IEBAIENvZGVCbG9jazo6
Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJz
KG90aGVyLm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKQogICAgICwgbV9udW1WYXJzKG90aGVyLm1fbnVt
VmFycykKICAgICAsIG1faXNDb25zdHJ1Y3RvcihvdGhlci5tX2lzQ29uc3RydWN0b3IpCi0gICAg
LCBtX3VubGlua2VkQ29kZSgqb3RoZXIubV9nbG9iYWxEYXRhLCBvdGhlci5tX293bmVyRXhlY3V0
YWJsZS5nZXQoKSwgb3RoZXIubV91bmxpbmtlZENvZGUuZ2V0KCkpCi0gICAgLCBtX293bmVyRXhl
Y3V0YWJsZSgqb3RoZXIubV9nbG9iYWxEYXRhLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQo
KSwgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpCi0gICAgLCBtX2dsb2JhbERhdGEob3Ro
ZXIubV9nbG9iYWxEYXRhKQorICAgICwgbV91bmxpbmtlZENvZGUoKm90aGVyLm1fdm0sIG90aGVy
Lm1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBvdGhlci5tX3VubGlua2VkQ29kZS5nZXQoKSkKKyAg
ICAsIG1fb3duZXJFeGVjdXRhYmxlKCpvdGhlci5tX3ZtLCBvdGhlci5tX293bmVyRXhlY3V0YWJs
ZS5nZXQoKSwgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpCisgICAgLCBtX3ZtKG90aGVy
Lm1fdm0pCiAgICAgLCBtX2luc3RydWN0aW9ucyhvdGhlci5tX2luc3RydWN0aW9ucykKICAgICAs
IG1fdGhpc1JlZ2lzdGVyKG90aGVyLm1fdGhpc1JlZ2lzdGVyKQogICAgICwgbV9hcmd1bWVudHNS
ZWdpc3RlcihvdGhlci5tX2FyZ3VtZW50c1JlZ2lzdGVyKQpAQCAtMTY0OCwxNCArMTY0OCwxNCBA
QCBDb2RlQmxvY2s6OkNvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsCiB9CiAKIENvZGVCbG9j
azo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRD
b2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCB1bnNpZ25lZCBiYXNlU2NvcGVEZXB0aCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291
cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgUGFzc093blB0cjxDb2RlQmxvY2s+
IGFsdGVybmF0aXZlKQotICAgIDogbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT5nbG9iYWxE
YXRhKCksIG93bmVyRXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0KQotICAgICwgbV9oZWFwKCZtX2ds
b2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLmhlYXApCisgICAgOiBtX2dsb2JhbE9iamVjdChnbG9i
YWxPYmplY3QtPnZtKCksIG93bmVyRXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0KQorICAgICwgbV9o
ZWFwKCZtX2dsb2JhbE9iamVjdC0+dm0oKS5oZWFwKQogICAgICwgbV9udW1DYWxsZWVSZWdpc3Rl
cnModW5saW5rZWRDb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKQogICAgICwgbV9udW1W
YXJzKHVubGlua2VkQ29kZUJsb2NrLT5tX251bVZhcnMpCiAgICAgLCBtX2lzQ29uc3RydWN0b3Io
dW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSkKLSAgICAsIG1fdW5saW5rZWRDb2Rl
KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29k
ZUJsb2NrKQotICAgICwgbV9vd25lckV4ZWN1dGFibGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRh
KCksIG93bmVyRXhlY3V0YWJsZSwgb3duZXJFeGVjdXRhYmxlKQotICAgICwgbV9nbG9iYWxEYXRh
KHVubGlua2VkQ29kZUJsb2NrLT5nbG9iYWxEYXRhKCkpCisgICAgLCBtX3VubGlua2VkQ29kZShn
bG9iYWxPYmplY3QtPnZtKCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2spCisg
ICAgLCBtX293bmVyRXhlY3V0YWJsZShnbG9iYWxPYmplY3QtPnZtKCksIG93bmVyRXhlY3V0YWJs
ZSwgb3duZXJFeGVjdXRhYmxlKQorICAgICwgbV92bSh1bmxpbmtlZENvZGVCbG9jay0+dm0oKSkK
ICAgICAsIG1fdGhpc1JlZ2lzdGVyKHVubGlua2VkQ29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKSkK
ICAgICAsIG1fYXJndW1lbnRzUmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2stPmFyZ3VtZW50c1Jl
Z2lzdGVyKCkpCiAgICAgLCBtX2FjdGl2YXRpb25SZWdpc3Rlcih1bmxpbmtlZENvZGVCbG9jay0+
YWN0aXZhdGlvblJlZ2lzdGVyKCkpCkBAIC0xNjY5LDcgKzE2NjksNyBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgLCBtX29wdGltaXphdGlvbkRlbGF5Q291
bnRlcigwKQogICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigwKQogewotICAgIG1f
Z2xvYmFsRGF0YS0+c3RhcnRlZENvbXBpbGluZyh0aGlzKTsKKyAgICBtX3ZtLT5zdGFydGVkQ29t
cGlsaW5nKHRoaXMpOwogCiAgICAgQVNTRVJUKG1fc291cmNlKTsKICAgICBzZXROdW1QYXJhbWV0
ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwpAQCAtMTY4MCw3ICsxNjgw
LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgIHNldElk
ZW50aWZpZXJzKHVubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVycygpKTsKICAgICBzZXRDb25z
dGFudFJlZ2lzdGVycyh1bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcnMoKSk7CiAg
ICAgaWYgKHVubGlua2VkQ29kZUJsb2NrLT51c2VzR2xvYmFsT2JqZWN0KCkpCi0gICAgICAgIG1f
Y29uc3RhbnRSZWdpc3RlcnNbdW5saW5rZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdFJlZ2lzdGVy
KCldLnNldCgqbV9nbG9iYWxEYXRhLCBvd25lckV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCk7Cisg
ICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbdW5saW5rZWRDb2RlQmxvY2stPmdsb2JhbE9iamVj
dFJlZ2lzdGVyKCldLnNldCgqbV92bSwgb3duZXJFeGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpOwog
ICAgIG1fZnVuY3Rpb25EZWNscy5ncm93KHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0
aW9uRGVjbHMoKSk7CiAgICAgZm9yIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+
bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCksIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAg
ICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlID0gdW5saW5r
ZWRDb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChpKTsKQEAgLTE2ODksOCArMTY4OSw4IEBAIENvZGVC
bG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgdW5zaWduZWQgc3Rh
cnRPZmZzZXQgPSBzb3VyY2VPZmZzZXQgKyB1bmxpbmtlZEV4ZWN1dGFibGUtPnN0YXJ0T2Zmc2V0
KCk7CiAgICAgICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCA9IHVubGlua2VkRXhlY3V0YWJsZS0+
c291cmNlTGVuZ3RoKCk7CiAgICAgICAgIFNvdXJjZUNvZGUgY29kZShtX3NvdXJjZSwgc3RhcnRP
ZmZzZXQsIHN0YXJ0T2Zmc2V0ICsgc291cmNlTGVuZ3RoLCBmaXJzdExpbmUpOwotICAgICAgICBG
dW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0
ZSgqbV9nbG9iYWxEYXRhLCBjb2RlLCB1bmxpbmtlZEV4ZWN1dGFibGUsIGZpcnN0TGluZSwgZmly
c3RMaW5lICsgbGluZUNvdW50KTsKLSAgICAgICAgbV9mdW5jdGlvbkRlY2xzW2ldLnNldCgqbV9n
bG9iYWxEYXRhLCBvd25lckV4ZWN1dGFibGUsIGV4ZWN1dGFibGUpOworICAgICAgICBGdW5jdGlv
bkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgqbV92
bSwgY29kZSwgdW5saW5rZWRFeGVjdXRhYmxlLCBmaXJzdExpbmUsIGZpcnN0TGluZSArIGxpbmVD
b3VudCk7CisgICAgICAgIG1fZnVuY3Rpb25EZWNsc1tpXS5zZXQoKm1fdm0sIG93bmVyRXhlY3V0
YWJsZSwgZXhlY3V0YWJsZSk7CiAgICAgfQogCiAgICAgbV9mdW5jdGlvbkV4cHJzLmdyb3codW5s
aW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25FeHBycygpKTsKQEAgLTE3MDEsOCArMTcw
MSw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAg
dW5zaWduZWQgc3RhcnRPZmZzZXQgPSBzb3VyY2VPZmZzZXQgKyB1bmxpbmtlZEV4ZWN1dGFibGUt
PnN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCA9IHVubGlua2Vk
RXhlY3V0YWJsZS0+c291cmNlTGVuZ3RoKCk7CiAgICAgICAgIFNvdXJjZUNvZGUgY29kZShtX3Nv
dXJjZSwgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0ICsgc291cmNlTGVuZ3RoLCBmaXJzdExpbmUp
OwotICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBGdW5jdGlvbkV4ZWN1
dGFibGU6OmNyZWF0ZSgqbV9nbG9iYWxEYXRhLCBjb2RlLCB1bmxpbmtlZEV4ZWN1dGFibGUsIGZp
cnN0TGluZSwgZmlyc3RMaW5lICsgbGluZUNvdW50KTsKLSAgICAgICAgbV9mdW5jdGlvbkV4cHJz
W2ldLnNldCgqbV9nbG9iYWxEYXRhLCBvd25lckV4ZWN1dGFibGUsIGV4ZWN1dGFibGUpOworICAg
ICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBGdW5jdGlvbkV4ZWN1dGFibGU6
OmNyZWF0ZSgqbV92bSwgY29kZSwgdW5saW5rZWRFeGVjdXRhYmxlLCBmaXJzdExpbmUsIGZpcnN0
TGluZSArIGxpbmVDb3VudCk7CisgICAgICAgIG1fZnVuY3Rpb25FeHByc1tpXS5zZXQoKm1fdm0s
IG93bmVyRXhlY3V0YWJsZSwgZXhlY3V0YWJsZSk7CiAgICAgfQogCiAgICAgaWYgKHVubGlua2Vk
Q29kZUJsb2NrLT5oYXNSYXJlRGF0YSgpKSB7CkBAIC0xNzkxLDcgKzE3OTEsNyBAQCBDb2RlQmxv
Y2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgVmVjdG9yPEluc3RydWN0aW9u
LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gaW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9uQ291bnQp
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLnNpemUoKTsgKSB7CiAgICAgICAgIHVuc2lnbmVkIG9wTGVuZ3RoID0gb3Bjb2RlTGVu
Z3RoKHBjW2ldLnUub3Bjb2RlKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zW2ldID0gZ2xvYmFsRGF0
YSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlKHBjW2ldLnUub3Bjb2RlKTsKKyAgICAgICAgaW5z
dHJ1Y3Rpb25zW2ldID0gdm0oKS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZShwY1tpXS51Lm9wY29k
ZSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGogPSAxOyBqIDwgb3BMZW5ndGg7ICsraikgewogICAg
ICAgICAgICAgaWYgKHNpemVvZihpbnQzMl90KSAhPSBzaXplb2YoaW50cHRyX3QpKQogICAgICAg
ICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgal0udS5wb2ludGVyID0gMDsKQEAgLTE4OTEsNyAr
MTg5MSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAg
ICAgICAgIGludCBpbmZlcnJlZElubGluZUNhcGFjaXR5ID0gcGNbaSArIG9wTGVuZ3RoIC0gMl0u
dS5vcGVyYW5kOwogCiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMV0g
PSBvYmplY3RBbGxvY2F0aW9uUHJvZmlsZTsKLSAgICAgICAgICAgIG9iamVjdEFsbG9jYXRpb25Q
cm9maWxlLT5pbml0aWFsaXplKCpnbG9iYWxEYXRhKCksCisgICAgICAgICAgICBvYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZS0+aW5pdGlhbGl6ZSgqdm0oKSwKICAgICAgICAgICAgICAgICBtX293bmVy
RXhlY3V0YWJsZS5nZXQoKSwgbV9nbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLCBpbmZl
cnJlZElubGluZUNhcGFjaXR5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0x
OTQ2LDEzICsxOTQ2LDEzIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUq
IG8KICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgaWYgKGVudHJ5LmNvdWxk
QmVXYXRjaGVkKCkpIHsKLSAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDBdID0gZ2xv
YmFsRGF0YSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX2luaXRfZ2xvYmFsX2NvbnN0X2No
ZWNrKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDBdID0gdm0oKS0+aW50ZXJw
cmV0ZXItPmdldE9wY29kZShvcF9pbml0X2dsb2JhbF9jb25zdF9jaGVjayk7CiAgICAgICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAxXSA9ICZnbG9iYWxPYmplY3QtPnJlZ2lzdGVyQXQoZW50
cnkuZ2V0SW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAzXSA9IGVu
dHJ5LmFkZHJlc3NPZklzV2F0Y2hlZCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDBdID0gZ2xvYmFsRGF0YSgp
LT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX2luaXRfZ2xvYmFsX2NvbnN0KTsKKyAgICAgICAg
ICAgIGluc3RydWN0aW9uc1tpICsgMF0gPSB2bSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9w
X2luaXRfZ2xvYmFsX2NvbnN0KTsKICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgMV0gPSAm
Z2xvYmFsT2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KQEAgLTE5ODAsMTggKzE5ODAsMTggQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogCiAgICAgaWYgKE9wdGlvbnM6OmR1bXBHZW5lcmF0
ZWRCeXRlY29kZXMoKSkKICAgICAgICAgZHVtcEJ5dGVjb2RlKCk7Ci0gICAgbV9nbG9iYWxEYXRh
LT5maW5pc2hlZENvbXBpbGluZyh0aGlzKTsKKyAgICBtX3ZtLT5maW5pc2hlZENvbXBpbGluZyh0
aGlzKTsKIH0KIAogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKIHsKLSAgICBpZiAobV9nbG9iYWxE
YXRhLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCi0gICAgICAgIG1fZ2xvYmFsRGF0YS0+bV9wZXJC
eXRlY29kZVByb2ZpbGVyLT5ub3RpZnlEZXN0cnVjdGlvbih0aGlzKTsKKyAgICBpZiAobV92bS0+
bV9wZXJCeXRlY29kZVByb2ZpbGVyKQorICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmls
ZXItPm5vdGlmeURlc3RydWN0aW9uKHRoaXMpOwogICAgIAogI2lmIEVOQUJMRShERkdfSklUKQog
ICAgIC8vIFJlbW92ZSBteXNlbGYgZnJvbSB0aGUgc2V0IG9mIERGRyBjb2RlIGJsb2Nrcy4gTm90
ZSB0aGF0IEkgbWF5IG5vdCBiZSBpbiB0aGlzIHNldAogICAgIC8vIChiZWNhdXNlIEknbSBub3Qg
YSBERkcgY29kZSBibG9jayksIGluIHdoaWNoIGNhc2UgdGhpcyBpcyBhIG5vLW9wIGFueXdheS4K
LSAgICBtX2dsb2JhbERhdGEtPmhlYXAubV9kZmdDb2RlQmxvY2tzLm1fc2V0LnJlbW92ZSh0aGlz
KTsKKyAgICBtX3ZtLT5oZWFwLm1fZGZnQ29kZUJsb2Nrcy5tX3NldC5yZW1vdmUodGhpcyk7CiAj
ZW5kaWYKICAgICAKICNpZiBFTkFCTEUoVkVSQk9TRV9WQUxVRV9QUk9GSUxFKQpAQCAtMjAzNiw3
ICsyMDM2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnNldE51bVBhcmFtZXRlcnMoaW50IG5ldwogCiB2
b2lkIENvZGVCbG9jazo6dmlzaXRTdHJ1Y3R1cmVzKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBJbnN0
cnVjdGlvbiogdlBDKQogewotICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IG1fZ2xvYmFs
RGF0YS0+aW50ZXJwcmV0ZXI7CisgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV92bS0+
aW50ZXJwcmV0ZXI7CiAKICAgICBpZiAodlBDWzBdLnUub3Bjb2RlID09IGludGVycHJldGVyLT5n
ZXRPcGNvZGUob3BfZ2V0X2J5X2lkKSAmJiB2UENbNF0udS5zdHJ1Y3R1cmUpIHsKICAgICAgICAg
dmlzaXRvci5hcHBlbmQoJnZQQ1s0XS51LnN0cnVjdHVyZSk7CkBAIC0yMjMwLDcgKzIyMzAsNyBA
QCBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlVW5saW5raW5nID0gZmFsCiB2b2lkIENvZGVCbG9j
azo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQogewogI2lmIEVOQUJMRShMTElOVCkKLSAgICBJ
bnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX2dsb2JhbERhdGEtPmludGVycHJldGVyOworICAg
IEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IG1fdm0tPmludGVycHJldGVyOwogICAgIGlmICgh
IW51bWJlck9mSW5zdHJ1Y3Rpb25zKCkpIHsKICAgICAgICAgY29uc3QgVmVjdG9yPHVuc2lnbmVk
PiYgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMgPSBtX3VubGlua2VkQ29kZS0+cHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbnMoKTsKICAgICAgICAgZm9yIChzaXplX3Qgc2l6ZSA9IHByb3BlcnR5
QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKQEAgLTIz
NTIsNyArMjM1Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1Yi0+ZXhlY3V0YWJsZSgpLT5oYXNo
Rm9yKGNhbGxMaW5rSW5mbyhpKS5zcGVjaWFsaXphdGlvbktpbmQoKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIsIHN0dWIgcm91dGluZSAiLCBSYXdQb2ludGVyKHN0dWIpLCAi
LlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8oaSkudW5saW5rKCptX2dsb2JhbERhdGEsIHJlcGF0Y2hCdWZmZXIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvKGkpLnVubGluaygqbV92bSwgcmVw
YXRjaEJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCFIZWFwOjppc01hcmtlZChjYWxsTGlua0luZm8oaSkuY2FsbGVlLmdldCgpKSkgewog
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZVVubGlua2luZykgewpAQCAtMjM2Myw3ICsy
MzYzLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8oaSkuc3BlY2lhbGl6YXRpb25L
aW5kKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpLlxuIik7CiAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvKGkpLnVubGluaygq
bV9nbG9iYWxEYXRhLCByZXBhdGNoQnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvKGkpLnVubGluaygqbV92bSwgcmVwYXRjaEJ1ZmZlcik7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCEhY2FsbExpbmtJbmZvKGkpLmxhc3RT
ZWVuQ2FsbGVlCkBAIC0yNTQ1LDcgKzI1NDUsNyBAQCB2b2lkIENvZGVCbG9jazo6Y3JlYXRlQWN0
aXZhdGlvbihDYWxsRnJhCiAgICAgQVNTRVJUKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsK
ICAgICBBU1NFUlQobmVlZHNGdWxsU2NvcGVDaGFpbigpKTsKICAgICBBU1NFUlQoIWNhbGxGcmFt
ZS0+dW5jaGVja2VkUihhY3RpdmF0aW9uUmVnaXN0ZXIoKSkuanNWYWx1ZSgpKTsKLSAgICBKU0Fj
dGl2YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2YXRpb246OmNyZWF0ZShjYWxsRnJhbWUtPmds
b2JhbERhdGEoKSwgY2FsbEZyYW1lLCB0aGlzKTsKKyAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRp
b24gPSBKU0FjdGl2YXRpb246OmNyZWF0ZShjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZSwgdGhp
cyk7CiAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGFjdGl2YXRpb25SZWdpc3RlcigpKSA9IEpT
VmFsdWUoYWN0aXZhdGlvbik7CiAgICAgY2FsbEZyYW1lLT5zZXRTY29wZShhY3RpdmF0aW9uKTsK
IH0KQEAgLTI1NzMsMTMgKzI1NzMsMTMgQEAgdm9pZCBDb2RlQmxvY2s6OnVubGlua0NhbGxzKCkK
ICNlbmRpZgogICAgIGlmICghbV9jYWxsTGlua0luZm9zLnNpemUoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIGlmICghbV9nbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSkKKyAgICBpZiAoIW1fdm0tPmNh
blVzZUpJVCgpKQogICAgICAgICByZXR1cm47CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKHRoaXMpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jYWxsTGlua0luZm9zLnNp
emUoKTsgaSsrKSB7CiAgICAgICAgIGlmICghbV9jYWxsTGlua0luZm9zW2ldLmlzTGlua2VkKCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV9jYWxsTGlua0luZm9zW2ldLnVubGlu
aygqbV9nbG9iYWxEYXRhLCByZXBhdGNoQnVmZmVyKTsKKyAgICAgICAgbV9jYWxsTGlua0luZm9z
W2ldLnVubGluaygqbV92bSwgcmVwYXRjaEJ1ZmZlcik7CiAgICAgfQogfQogCkBAIC0yNTkzLDcg
KzI1OTMsNyBAQCB2b2lkIENvZGVCbG9jazo6dW5saW5rSW5jb21pbmdDYWxscygpCiAgICAgICAg
IHJldHVybjsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIodGhpcyk7CiAgICAgd2hp
bGUgKG1faW5jb21pbmdDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdDYWxscy5lbmQoKSkKLSAg
ICAgICAgbV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnVubGluaygqbV9nbG9iYWxEYXRhLCByZXBh
dGNoQnVmZmVyKTsKKyAgICAgICAgbV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnVubGluaygqbV92
bSwgcmVwYXRjaEJ1ZmZlcik7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIApAQCAtMjY2Niw3
ICsyNjY2LDcgQEAgQ2xvc3VyZUNhbGxTdHViUm91dGluZSogQ29kZUJsb2NrOjpmaW5kQwogICAg
IH0KICAgICAKICAgICAvLyBUaGUgc3R1YiByb3V0aW5lIG1heSBoYXZlIGJlZW4gamV0dGlzb25l
ZC4gVGhpcyBpcyByYXJlLCBidXQgd2UgaGF2ZSB0byBoYW5kbGUgaXQuCi0gICAgY29uc3QgSklU
U3R1YlJvdXRpbmVTZXQmIHNldCA9IG1fZ2xvYmFsRGF0YS0+aGVhcC5qaXRTdHViUm91dGluZXMo
KTsKKyAgICBjb25zdCBKSVRTdHViUm91dGluZVNldCYgc2V0ID0gbV92bS0+aGVhcC5qaXRTdHVi
Um91dGluZXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzZXQuc2l6ZSgpOyBpLS07KSB7CiAg
ICAgICAgIEdDQXdhcmVKSVRTdHViUm91dGluZSogZ2VuZXJpY1N0dWIgPSBzZXQuYXQoaSk7CiAg
ICAgICAgIGlmICghZ2VuZXJpY1N0dWItPmlzQ2xvc3VyZUNhbGwoKSkKQEAgLTI4ODUsMTcgKzI4
ODUsMTcgQEAgdm9pZCBDb2RlQmxvY2s6OmpldHRpc29uKCkKIAogdm9pZCBQcm9ncmFtQ29kZUJs
b2NrOjpqZXR0aXNvbkltcGwoKQogewotICAgIHN0YXRpY19jYXN0PFByb2dyYW1FeGVjdXRhYmxl
Kj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGUoKmdsb2JhbERhdGEo
KSk7CisgICAgc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUo
KSktPmpldHRpc29uT3B0aW1pemVkQ29kZSgqdm0oKSk7CiB9CiAKIHZvaWQgRXZhbENvZGVCbG9j
azo6amV0dGlzb25JbXBsKCkKIHsKLSAgICBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93
bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2RlKCpnbG9iYWxEYXRhKCkpOwor
ICAgIHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0
aXNvbk9wdGltaXplZENvZGUoKnZtKCkpOwogfQogCiB2b2lkIEZ1bmN0aW9uQ29kZUJsb2NrOjpq
ZXR0aXNvbkltcGwoKQogewotICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93
bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yKCpnbG9iYWxEYXRhKCks
IG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7CisgICAg
c3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0
aXNvbk9wdGltaXplZENvZGVGb3IoKnZtKCksIG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25z
dHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7CiB9CiAKIGJvb2wgUHJvZ3JhbUNvZGVCbG9jazo6aml0Q29t
cGlsZUltcGwoRXhlY1N0YXRlKiBleGVjKQpAQCAtMzI4MCwxOCArMzI4MCwxOCBAQCB2b2lkIENv
ZGVCbG9jazo6ZHVtcFZhbHVlUHJvZmlsZXMoKQogCiBzaXplX3QgQ29kZUJsb2NrOjpwcmVkaWN0
ZWRNYWNoaW5lQ29kZVNpemUoKQogewotICAgIC8vIFRoaXMgd2lsbCBiZSBjYWxsZWQgZnJvbSBD
b2RlQmxvY2s6OkNvZGVCbG9jayBiZWZvcmUgZWl0aGVyIG1fZ2xvYmFsRGF0YSBvciB0aGUKKyAg
ICAvLyBUaGlzIHdpbGwgYmUgY2FsbGVkIGZyb20gQ29kZUJsb2NrOjpDb2RlQmxvY2sgYmVmb3Jl
IGVpdGhlciBtX3ZtIG9yIHRoZQogICAgIC8vIGluc3RydWN0aW9ucyBoYXZlIGJlZW4gaW5pdGlh
bGl6ZWQuIEl0J3MgT0sgdG8gcmV0dXJuIDAgYmVjYXVzZSB3aGF0IHdpbGwgcmVhbGx5CiAgICAg
Ly8gbWF0dGVyIGlzIHRoZSByZWNvbXB1dGF0aW9uIG9mIHRoaXMgdmFsdWUgd2hlbiB0aGUgc2xv
dyBwYXRoIGlzIHRyaWdnZXJlZC4KLSAgICBpZiAoIW1fZ2xvYmFsRGF0YSkKKyAgICBpZiAoIW1f
dm0pCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIGlmICghbV9nbG9iYWxEYXRhLT5tYWNo
aW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQpCisgICAgaWYgKCFtX3Zt
LT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQpCiAgICAgICAg
IHJldHVybiAwOyAvLyBJdCdzIGFzIGdvb2Qgb2YgYSBwcmVkaWN0aW9uIGFzIHdlJ2xsIGdldC4K
ICAgICAKICAgICAvLyBCZSBjb25zZXJ2YXRpdmU6IHJldHVybiBhIHNpemUgdGhhdCB3aWxsIGJl
IGFuIG92ZXJlc3RpbWF0aW9uIDg0JSBvZiB0aGUgdGltZS4KLSAgICBkb3VibGUgbXVsdGlwbGll
ciA9IG1fZ2xvYmFsRGF0YS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2Vs
aW5lSklULm1lYW4oKSArCi0gICAgICAgIG1fZ2xvYmFsRGF0YS0+bWFjaGluZUNvZGVCeXRlc1Bl
ckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULnN0YW5kYXJkRGV2aWF0aW9uKCk7CisgICAgZG91
YmxlIG11bHRpcGxpZXIgPSBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9y
QmFzZWxpbmVKSVQubWVhbigpICsKKyAgICAgICAgbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5
dGVjb2RlV29yZEZvckJhc2VsaW5lSklULnN0YW5kYXJkRGV2aWF0aW9uKCk7CiAgICAgCiAgICAg
Ly8gQmUgcGFyYW5vaWQ6IHNpbGVudGx5IHJlamVjdCBib2d1cyBtdWx0aXBpZXJzLiBTaWxlbnRs
eSBkb2luZyB0aGUgIndyb25nIiB0aGluZwogICAgIC8vIGhlcmUgaXMgT0ssIHNpbmNlIHRoaXMg
d2hvbGUgbWV0aG9kIGlzIGp1c3QgYSBoZXVyaXN0aWMuCkBAIC0zMzEyLDcgKzMzMTIsNyBAQCBz
aXplX3QgQ29kZUJsb2NrOjpwcmVkaWN0ZWRNYWNoaW5lQ29kZVNpCiAKIGJvb2wgQ29kZUJsb2Nr
Ojp1c2VzT3Bjb2RlKE9wY29kZUlEIG9wY29kZUlEKQogewotICAgIEludGVycHJldGVyKiBpbnRl
cnByZXRlciA9IGdsb2JhbERhdGEoKS0+aW50ZXJwcmV0ZXI7CisgICAgSW50ZXJwcmV0ZXIqIGlu
dGVycHJldGVyID0gdm0oKS0+aW50ZXJwcmV0ZXI7CiAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uc0JlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKICAgICB1bnNpZ25lZCBpbnN0cnVj
dGlvbkNvdW50ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTQ4NjU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNzcsMTQgKzM3NywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhcHBl
bmRXZWFrUmVmZXJlbmNlKEpTQ2VsbCogdGFyZ2V0KQogICAgICAgICB7CiAgICAgICAgICAgICBj
cmVhdGVERkdEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgICAgIG1fZGZnRGF0YS0+d2Vha1Jl
ZmVyZW5jZXMuYXBwZW5kKFdyaXRlQmFycmllcjxKU0NlbGw+KCpnbG9iYWxEYXRhKCksIG93bmVy
RXhlY3V0YWJsZSgpLCB0YXJnZXQpKTsKKyAgICAgICAgICAgIG1fZGZnRGF0YS0+d2Vha1JlZmVy
ZW5jZXMuYXBwZW5kKFdyaXRlQmFycmllcjxKU0NlbGw+KCp2bSgpLCBvd25lckV4ZWN1dGFibGUo
KSwgdGFyZ2V0KSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgYXBwZW5kV2Vh
a1JlZmVyZW5jZVRyYW5zaXRpb24oSlNDZWxsKiBjb2RlT3JpZ2luLCBKU0NlbGwqIGZyb20sIEpT
Q2VsbCogdG8pCiAgICAgICAgIHsKICAgICAgICAgICAgIGNyZWF0ZURGR0RhdGFJZk5lY2Vzc2Fy
eSgpOwogICAgICAgICAgICAgbV9kZmdEYXRhLT50cmFuc2l0aW9ucy5hcHBlbmQoCi0gICAgICAg
ICAgICAgICAgV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24oKmdsb2JhbERhdGEoKSwgb3duZXJFeGVj
dXRhYmxlKCksIGNvZGVPcmlnaW4sIGZyb20sIHRvKSk7CisgICAgICAgICAgICAgICAgV2Vha1Jl
ZmVyZW5jZVRyYW5zaXRpb24oKnZtKCksIG93bmVyRXhlY3V0YWJsZSgpLCBjb2RlT3JpZ2luLCBm
cm9tLCB0bykpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBERkc6Ok1pbmlmaWVkR3Jh
cGgmIG1pbmlmaWVkREZHKCkKQEAgLTQyOCw3ICs0MjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNp
ZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgICAgIGlmIChtX2ppdENvZGUuaml0VHlwZSgpID09
IEpJVENvZGU6OkRGR0pJVCkgewogICAgICAgICAgICAgICAgIGNyZWF0ZURGR0RhdGFJZk5lY2Vz
c2FyeSgpOwotICAgICAgICAgICAgICAgIG1fZ2xvYmFsRGF0YS0+aGVhcC5tX2RmZ0NvZGVCbG9j
a3MubV9zZXQuYWRkKHRoaXMpOworICAgICAgICAgICAgICAgIG1fdm0tPmhlYXAubV9kZmdDb2Rl
QmxvY2tzLm1fc2V0LmFkZCh0aGlzKTsKICAgICAgICAgICAgIH0KICNlbmRpZgogICAgICAgICB9
CkBAIC00ODUsOCArNDg1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgU2NyaXB0RXhl
Y3V0YWJsZSogb3duZXJFeGVjdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9vd25lckV4ZWN1dGFi
bGUuZ2V0KCk7IH0KIAotICAgICAgICB2b2lkIHNldEdsb2JhbERhdGEoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhKSB7IG1fZ2xvYmFsRGF0YSA9IGdsb2JhbERhdGE7IH0KLSAgICAgICAgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhKCkgeyByZXR1cm4gbV9nbG9iYWxEYXRhOyB9CisgICAgICAgIHZv
aWQgc2V0R2xvYmFsRGF0YShWTSogdm0pIHsgbV92bSA9IHZtOyB9CisgICAgICAgIFZNKiB2bSgp
IHsgcmV0dXJuIG1fdm07IH0KIAogICAgICAgICB2b2lkIHNldFRoaXNSZWdpc3RlcihpbnQgdGhp
c1JlZ2lzdGVyKSB7IG1fdGhpc1JlZ2lzdGVyID0gdGhpc1JlZ2lzdGVyOyB9CiAgICAgICAgIGlu
dCB0aGlzUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3RoaXNSZWdpc3RlcjsgfQpAQCAtNjEz
LDcgKzYxMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIGdldFZhbHVlUHJv
ZmlsZUJ5dGVjb2RlT2Zmc2V0PFZhbHVlUHJvZmlsZT4pOwogICAgICAgICAgICAgQVNTRVJUKHJl
c3VsdC0+bV9ieXRlY29kZU9mZnNldCAhPSAtMSk7CiAgICAgICAgICAgICBBU1NFUlQoaW5zdHJ1
Y3Rpb25zKClbYnl0ZWNvZGVPZmZzZXQgKyBvcGNvZGVMZW5ndGgoCi0gICAgICAgICAgICAgICAg
ICAgICAgIG1fZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKAorICAgICAgICAg
ICAgICAgICAgICAgICBtX3ZtLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKVsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBieXRlY29kZU9mZnNldF0udS5vcGNvZGUpKSAtIDFdLnUucHJvZmlsZSA9PSByZXN1
bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTgxNiw3ICs4MTYsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9j
b25zdGFudFJlZ2lzdGVycy5zaXplKCk7CiAgICAgICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJz
LmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7Ci0gICAgICAgICAgICBtX2NvbnN0YW50
UmVnaXN0ZXJzLmxhc3QoKS5zZXQobV9nbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgbV9vd25l
ckV4ZWN1dGFibGUuZ2V0KCksIHYpOworICAgICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5s
YXN0KCkuc2V0KG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBtX293bmVyRXhlY3V0YWJsZS5nZXQoKSwg
dik7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAKQEAgLTEwOTMsNyAr
MTA5Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgc2l6ZV90IGNvdW50ID0gY29u
c3RhbnRzLnNpemUoKTsKICAgICAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMucmVzaXplKGNv
dW50KTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAg
ICAgICAgICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLnNldCgqbV9nbG9iYWxEYXRhLCBv
d25lckV4ZWN1dGFibGUoKSwgY29uc3RhbnRzW2ldLmdldCgpKTsKKyAgICAgICAgICAgICAgICBt
X2NvbnN0YW50UmVnaXN0ZXJzW2ldLnNldCgqbV92bSwgb3duZXJFeGVjdXRhYmxlKCksIGNvbnN0
YW50c1tpXS5nZXQoKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXBCeXRlY29kZShQ
cmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGNvbnN0IEluc3RydWN0aW9uKiBiZWdpbiwgY29uc3Qg
SW5zdHJ1Y3Rpb24qJik7CkBAIC0xMTU5LDcgKzExNTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkQ29kZUJsb2NrPiBtX3VubGlua2VkQ29kZTsKICAg
ICAgICAgaW50IG1fbnVtUGFyYW1ldGVyczsKICAgICAgICAgV3JpdGVCYXJyaWVyPFNjcmlwdEV4
ZWN1dGFibGU+IG1fb3duZXJFeGVjdXRhYmxlOwotICAgICAgICBKU0dsb2JhbERhdGEqIG1fZ2xv
YmFsRGF0YTsKKyAgICAgICAgVk0qIG1fdm07CiAKICAgICAgICAgUmVmQ291bnRlZEFycmF5PElu
c3RydWN0aW9uPiBtX2luc3RydWN0aW9uczsKICAgICAgICAgaW50IG1fdGhpc1JlZ2lzdGVyOwpA
QCAtMTE5MiwxMiArMTE5MiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RydWN0IFdl
YWtSZWZlcmVuY2VUcmFuc2l0aW9uIHsKICAgICAgICAgICAgIFdlYWtSZWZlcmVuY2VUcmFuc2l0
aW9uKCkgeyB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFdlYWtSZWZlcmVuY2VUcmFuc2l0
aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgSlNDZWxsKiBjb2Rl
T3JpZ2luLCBKU0NlbGwqIGZyb20sIEpTQ2VsbCogdG8pCi0gICAgICAgICAgICAgICAgOiBtX2Zy
b20oZ2xvYmFsRGF0YSwgb3duZXIsIGZyb20pCi0gICAgICAgICAgICAgICAgLCBtX3RvKGdsb2Jh
bERhdGEsIG93bmVyLCB0bykKKyAgICAgICAgICAgIFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uKFZN
JiB2bSwgSlNDZWxsKiBvd25lciwgSlNDZWxsKiBjb2RlT3JpZ2luLCBKU0NlbGwqIGZyb20sIEpT
Q2VsbCogdG8pCisgICAgICAgICAgICAgICAgOiBtX2Zyb20odm0sIG93bmVyLCBmcm9tKQorICAg
ICAgICAgICAgICAgICwgbV90byh2bSwgb3duZXIsIHRvKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIGlmICghIWNvZGVPcmlnaW4pCi0gICAgICAgICAgICAgICAgICAgIG1fY29kZU9y
aWdpbi5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIGNvZGVPcmlnaW4pOworICAgICAgICAgICAgICAg
ICAgICBtX2NvZGVPcmlnaW4uc2V0KHZtLCBvd25lciwgY29kZU9yaWdpbik7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IG1fY29kZU9yaWdpbjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUNhY2hlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxD
b2RlQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
aWYgKCFpblN0cmljdENvbnRleHQgJiYgZXZhbFNvdXJjZS5sZW5ndGgoKSA8IG1heENhY2hlYWJs
ZVNvdXJjZUxlbmd0aCAmJiBzY29wZS0+YmVnaW4oKS0+aXNWYXJpYWJsZU9iamVjdCgpICYmIG1f
Y2FjaGVNYXAuc2l6ZSgpIDwgbWF4Q2FjaGVFbnRyaWVzKQotICAgICAgICAgICAgICAgIG1fY2Fj
aGVNYXAuc2V0KGV2YWxTb3VyY2UuaW1wbCgpLCBXcml0ZUJhcnJpZXI8RXZhbEV4ZWN1dGFibGU+
KGV4ZWMtPmdsb2JhbERhdGEoKSwgb3duZXIsIGV2YWxFeGVjdXRhYmxlKSk7CisgICAgICAgICAg
ICAgICAgbV9jYWNoZU1hcC5zZXQoZXZhbFNvdXJjZS5pbXBsKCksIFdyaXRlQmFycmllcjxFdmFs
RXhlY3V0YWJsZT4oZXhlYy0+dm0oKSwgb3duZXIsIGV2YWxFeGVjdXRhYmxlKSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIHJldHVybiBldmFsRXhlY3V0YWJsZTsKICAgICAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNw
cAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIEdldEJ5SWRT
dGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb20KICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVz
SWdub3JlZDsKICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7CiAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQoCi0gICAgICAgICpwcm9maWxlZEJsb2NrLT5nbG9iYWxE
YXRhKCksIGlkZW50LCBhdHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAg
ICpwcm9maWxlZEJsb2NrLT52bSgpLCBpZGVudCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmlj
VmFsdWUpOwogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQogICAgICAgICBzcGVj
aWZpY1ZhbHVlID0gMDsKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKQEAgLTkzLDcg
KzkzLDcgQEAgdm9pZCBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yQ2hhaW4oR2V0QgogICAgIEpT
Q2VsbCogc3BlY2lmaWNWYWx1ZTsKICAgICAgICAgCiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gY3Vy
cmVudFN0cnVjdHVyZS0+Z2V0KAotICAgICAgICAqcHJvZmlsZWRCbG9jay0+Z2xvYmFsRGF0YSgp
LCBpZGVudCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWUpOworICAgICAgICAqcHJv
ZmlsZWRCbG9jay0+dm0oKSwgaWRlbnQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVl
KTsKICAgICBpZiAoY3VycmVudFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgIHNw
ZWNpZmljVmFsdWUgPSAwOwogICAgIGlmICghaXNWYWxpZE9mZnNldChyZXN1bHQubV9vZmZzZXQp
KQpAQCAtMTY1LDcgKzE2NSw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvcigKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7CiAgICAgICAgIEpTQ2Vs
bCogc3BlY2lmaWNWYWx1ZTsKICAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5n
ZXQoCi0gICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+Z2xvYmFsRGF0YSgpLCBpZGVudCwgYXR0
cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWUpOworICAgICAgICAgICAgKnByb2ZpbGVkQmxv
Y2stPnZtKCksIGlkZW50LCBhdHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1ZSk7CiAgICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQogICAgICAgICAgICAgc3BlY2lmaWNW
YWx1ZSA9IDA7CiAgICAgICAgIApAQCAtMTkwLDcgKzE5MCw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNJ
Z25vcmVkOwogICAgICAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwogICAgICAgICAgICAg
UHJvcGVydHlPZmZzZXQgbXlPZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCgKLSAgICAgICAgICAgICAg
ICAqcHJvZmlsZWRCbG9jay0+Z2xvYmFsRGF0YSgpLCBpZGVudCwgYXR0cmlidXRlc0lnbm9yZWQs
IHNwZWNpZmljVmFsdWUpOworICAgICAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCBp
ZGVudCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWUpOwogICAgICAgICAgICAgaWYg
KHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgICAgICAgICAgc3BlY2lmaWNWYWx1
ZSA9IDA7CiAgICAgICAgICAgICAKQEAgLTI1Niw3ICsyNTYsNyBAQCBHZXRCeUlkU3RhdHVzIEdl
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIAotR2V0
QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIElkZW50aWZpZXImIGlkZW50KQorR2V0QnlJZFN0
YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIElkZW50aWZpZXImIGlkZW50KQogewogICAgIC8vIEZvciBub3cgd2Ugb25seSBoYW5kbGUg
dGhlIHN1cGVyIHNpbXBsZSBzZWxmIGFjY2VzcyBjYXNlLiBXZSBjb3VsZCBoYW5kbGUgdGhlCiAg
ICAgLy8gcHJvdG90eXBlIGNhc2UgaW4gdGhlIGZ1dHVyZS4KQEAgLTI3MSwxMCArMjcxLDEwIEBA
IEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgcmV0dXJu
IEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgCiAgICAgR2V0QnlJZFN0YXR1cyBy
ZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fd2FzU2VlbkluSklUID0gZmFsc2U7IC8vIFRvIG15IGtub3ds
ZWRnZSBub2JvZHkgdGhhdCB1c2VzIGNvbXB1dGVGb3IoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJl
KiwgSWRlbnRpZmllciYpIHJlYWRzIHRoaXMgZmllbGQsIGJ1dCBJIG1pZ2h0IGFzIHdlbGwgYmUg
aG9uZXN0OiBubywgaXQgd2Fzbid0IHNlZW4gaW4gdGhlIEpJVCwgc2luY2UgSSBjb21wdXRlZCBp
dCBzdGF0aWNhbGx5LgorICAgIHJlc3VsdC5tX3dhc1NlZW5JbkpJVCA9IGZhbHNlOyAvLyBUbyBt
eSBrbm93bGVkZ2Ugbm9ib2R5IHRoYXQgdXNlcyBjb21wdXRlRm9yKFZNJiwgU3RydWN0dXJlKiwg
SWRlbnRpZmllciYpIHJlYWRzIHRoaXMgZmllbGQsIGJ1dCBJIG1pZ2h0IGFzIHdlbGwgYmUgaG9u
ZXN0OiBubywgaXQgd2Fzbid0IHNlZW4gaW4gdGhlIEpJVCwgc2luY2UgSSBjb21wdXRlZCBpdCBz
dGF0aWNhbGx5LgogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CiAgICAgSlNDZWxsKiBzcGVjaWZp
Y1ZhbHVlOwotICAgIHJlc3VsdC5tX29mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KGdsb2JhbERhdGEs
IGlkZW50LCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICByZXN1bHQubV9vZmZzZXQg
PSBzdHJ1Y3R1cmUtPmdldCh2bSwgaWRlbnQsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOwog
ICAgIGlmICghaXNWYWxpZE9mZnNldChyZXN1bHQubV9vZmZzZXQpKQogICAgICAgICByZXR1cm4g
R2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsgLy8gSXQncyBwcm9iYWJseSBhIHByb3RvdHlw
ZSBsb29rdXAuIEdpdmUgdXAgb24gbGlmZSBmb3Igbm93LCBldmVuIHRob3VnaCB3ZSBjb3VsZCB0
b3RhbGx5IGJlIHdheSBzbWFydGVyIGFib3V0IGl0LgogICAgIGlmIChhdHRyaWJ1dGVzICYgQWNj
ZXNzb3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
U3RhdHVzLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgcHVi
bGljOgogICAgIH0KICAgICAKICAgICBzdGF0aWMgR2V0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENv
ZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIElkZW50aWZpZXImKTsKLSAgICBzdGF0
aWMgR2V0QnlJZFN0YXR1cyBjb21wdXRlRm9yKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIElk
ZW50aWZpZXImKTsKKyAgICBzdGF0aWMgR2V0QnlJZFN0YXR1cyBjb21wdXRlRm9yKFZNJiwgU3Ry
dWN0dXJlKiwgSWRlbnRpZmllciYpOwogICAgIAogICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZTsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0luc3RydWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0luc3RydWN0aW9uLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCwyMCAr
NzAsMjAgQEAgc3RydWN0IEluc3RydWN0aW9uIHsKICAgICAgICAgdS5vcGVyYW5kID0gb3BlcmFu
ZDsKICAgICB9CiAKLSAgICBJbnN0cnVjdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Q2VsbCogb3duZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIEluc3RydWN0aW9uKFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICB1
LnN0cnVjdHVyZS5jbGVhcigpOwotICAgICAgICB1LnN0cnVjdHVyZS5zZXQoZ2xvYmFsRGF0YSwg
b3duZXIsIHN0cnVjdHVyZSk7CisgICAgICAgIHUuc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0
cnVjdHVyZSk7CiAgICAgfQotICAgIEluc3RydWN0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluKQorICAgIElu
c3RydWN0aW9uKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVy
ZUNoYWluKQogICAgIHsKICAgICAgICAgdS5zdHJ1Y3R1cmVDaGFpbi5jbGVhcigpOwotICAgICAg
ICB1LnN0cnVjdHVyZUNoYWluLnNldChnbG9iYWxEYXRhLCBvd25lciwgc3RydWN0dXJlQ2hhaW4p
OworICAgICAgICB1LnN0cnVjdHVyZUNoYWluLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZUNoYWlu
KTsKICAgICB9Ci0gICAgSW5zdHJ1Y3Rpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0Nl
bGwqIG93bmVyLCBKU0NlbGwqIGpzQ2VsbCkKKyAgICBJbnN0cnVjdGlvbihWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIEpTQ2VsbCoganNDZWxsKQogICAgIHsKICAgICAgICAgdS5qc0NlbGwuY2xlYXIo
KTsKLSAgICAgICAgdS5qc0NlbGwuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBqc0NlbGwpOworICAg
ICAgICB1LmpzQ2VsbC5zZXQodm0sIG93bmVyLCBqc0NlbGwpOwogICAgIH0KIAogICAgIEluc3Ry
dWN0aW9uKFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldHRlckZ1bmMpIHsgdS5nZXR0ZXJG
dW5jID0gZ2V0dGVyRnVuYzsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDE0ODY1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlX2gKICNkZWZpbmUgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVfaAogCi0j
aW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJKU0ds
b2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlNs
b3RWaXNpdG9yLmgiCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNOdWxs
KCkgeyByZXR1cm4gIW1fYWxsb2NhdG9yOyB9CiAKLSAgICB2b2lkIGluaXRpYWxpemUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogcHJvdG90eXBlLCB1
bnNpZ25lZCBpbmZlcnJlZElubGluZUNhcGFjaXR5KQorICAgIHZvaWQgaW5pdGlhbGl6ZShWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBwcm90b3R5cGUsIHVuc2lnbmVkIGluZmVycmVk
SW5saW5lQ2FwYWNpdHkpCiAgICAgewogICAgICAgICBBU1NFUlQoIW1fYWxsb2NhdG9yKTsKICAg
ICAgICAgQVNTRVJUKCFtX3N0cnVjdHVyZSk7CkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkgPSAwOwogICAgICAgICBpZiAoaW5mZXJyZWRJ
bmxpbmVDYXBhY2l0eSA8IEpTRmluYWxPYmplY3Q6OmRlZmF1bHRJbmxpbmVDYXBhY2l0eSgpKSB7
CiAgICAgICAgICAgICAvLyBUcnkgdG8gc2hyaW5rIHRoZSBvYmplY3QgYmFzZWQgb24gc3RhdGlj
IGFuYWx5c2lzLgotICAgICAgICAgICAgaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSArPSBwb3NzaWJs
ZURlZmF1bHRQcm9wZXJ0eUNvdW50KGdsb2JhbERhdGEsIHByb3RvdHlwZSk7CisgICAgICAgICAg
ICBpbmZlcnJlZElubGluZUNhcGFjaXR5ICs9IHBvc3NpYmxlRGVmYXVsdFByb3BlcnR5Q291bnQo
dm0sIHByb3RvdHlwZSk7CiAKICAgICAgICAgICAgIGlmICghaW5mZXJyZWRJbmxpbmVDYXBhY2l0
eSkgewogICAgICAgICAgICAgICAgIC8vIEVtcHR5IG9iamVjdHMgYXJlIHJhcmUsIHNvIG1vc3Qg
bGlrZWx5IHRoZSBzdGF0aWMgYW5hbHl6ZXIganVzdCBkaWRuJ3QKQEAgLTgwLDcgKzgwLDcgQEAg
cHVibGljOgogICAgICAgICBBU1NFUlQoaW5saW5lQ2FwYWNpdHkgPD0gSlNGaW5hbE9iamVjdDo6
bWF4SW5saW5lQ2FwYWNpdHkoKSk7CiAKICAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0g
SlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoaW5saW5lQ2FwYWNpdHkpOwotICAgICAgICBN
YXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZnbG9iYWxEYXRhLmhlYXAuYWxsb2NhdG9yRm9y
T2JqZWN0V2l0aG91dERlc3RydWN0b3IoYWxsb2NhdGlvblNpemUpOworICAgICAgICBNYXJrZWRB
bGxvY2F0b3IqIGFsbG9jYXRvciA9ICZ2bS5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXRE
ZXN0cnVjdG9yKGFsbG9jYXRpb25TaXplKTsKICAgICAgICAgQVNTRVJUKGFsbG9jYXRvci0+Y2Vs
bFNpemUoKSk7CiAKICAgICAgICAgLy8gVGFrZSBhZHZhbnRhZ2Ugb2YgZXh0cmEgaW5saW5lIGNh
cGFjaXR5IGF2YWlsYWJsZSBpbiB0aGUgc2l6ZSBjbGFzcy4KQEAgLTkwLDggKzkwLDggQEAgcHVi
bGljOgogICAgICAgICAgICAgaW5saW5lQ2FwYWNpdHkgPSBKU0ZpbmFsT2JqZWN0OjptYXhJbmxp
bmVDYXBhY2l0eSgpOwogCiAgICAgICAgIG1fYWxsb2NhdG9yID0gYWxsb2NhdG9yOwotICAgICAg
ICBtX3N0cnVjdHVyZS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsCi0gICAgICAgICAgICBnbG9iYWxE
YXRhLnByb3RvdHlwZU1hcC5lbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZShwcm90b3R5
cGUsIGlubGluZUNhcGFjaXR5KSk7CisgICAgICAgIG1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIs
CisgICAgICAgICAgICB2bS5wcm90b3R5cGVNYXAuZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90
b3R5cGUocHJvdG90eXBlLCBpbmxpbmVDYXBhY2l0eSkpOwogICAgIH0KIAogICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KQEAgLTExMSwxNyAr
MTExLDE3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKIAotICAgIHVuc2lnbmVkIHBvc3NpYmxlRGVm
YXVsdFByb3BlcnR5Q291bnQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU09iamVjdCogcHJv
dG90eXBlKQorICAgIHVuc2lnbmVkIHBvc3NpYmxlRGVmYXVsdFByb3BlcnR5Q291bnQoVk0mIHZt
LCBKU09iamVjdCogcHJvdG90eXBlKQogICAgIHsKICAgICAgICAgaWYgKHByb3RvdHlwZSA9PSBw
cm90b3R5cGUtPmdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkKICAgICAgICAgICAg
IHJldHVybiAwOwogCiAgICAgICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgIFByb3BlcnR5
TmFtZUFycmF5IHByb3BlcnR5TmFtZUFycmF5KCZnbG9iYWxEYXRhKTsKLSAgICAgICAgcHJvdG90
eXBlLT5zdHJ1Y3R1cmUoKS0+Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoZ2xvYmFsRGF0
YSwgcHJvcGVydHlOYW1lQXJyYXksIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworICAgICAg
ICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVBcnJheSgmdm0pOworICAgICAgICBwcm90
b3R5cGUtPnN0cnVjdHVyZSgpLT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSh2bSwgcHJv
cGVydHlOYW1lQXJyYXksIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOwogICAgICAgICBQcm9w
ZXJ0eU5hbWVBcnJheURhdGE6OlByb3BlcnR5TmFtZVZlY3RvciYgcHJvcGVydHlOYW1lVmVjdG9y
ID0gcHJvcGVydHlOYW1lQXJyYXkuZGF0YSgpLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKTsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9wZXJ0eU5hbWVWZWN0b3Iuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBwcm90b3R5cGUtPmdldERpcmVjdChnbG9i
YWxEYXRhLCBwcm9wZXJ0eU5hbWVWZWN0b3JbaV0pOworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IHByb3RvdHlwZS0+Z2V0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWVWZWN0b3JbaV0pOwogCiAg
ICAgICAgICAgICAvLyBGdW5jdGlvbnMgYXJlIGNvbW1vbiwgYW5kIGFyZSB1c3VhbGx5IGNsYXNz
LWxldmVsIG9iamVjdHMgdGhhdCBhcmUgbm90IG92ZXJyaWRkZW4uCiAgICAgICAgICAgICBpZiAo
anNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4odmFsdWUpKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzc1N0
cnVjdHVyZUxpc3QuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MCwyOSArNjAsMjkgQEAgcHVibGljOgogICAgICAgICAgICAgdS5wcm90by5jbGVhcigp
OwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBfc3R1YlJvdXRpbmUs
IFN0cnVjdHVyZSogX2Jhc2UsIGJvb2wgaXNEaXJlY3QpCisgICAgICAgIHZvaWQgc2V0KFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gX3N0dWJSb3V0aW5l
LCBTdHJ1Y3R1cmUqIF9iYXNlLCBib29sIGlzRGlyZWN0KQogICAgICAgICB7CiAgICAgICAgICAg
ICBzdHViUm91dGluZSA9IF9zdHViUm91dGluZTsKLSAgICAgICAgICAgIGJhc2Uuc2V0KGdsb2Jh
bERhdGEsIG93bmVyLCBfYmFzZSk7CisgICAgICAgICAgICBiYXNlLnNldCh2bSwgb3duZXIsIF9i
YXNlKTsKICAgICAgICAgICAgIHUucHJvdG8uY2xlYXIoKTsKICAgICAgICAgICAgIGlzQ2hhaW4g
PSBmYWxzZTsKICAgICAgICAgICAgIHRoaXMtPmlzRGlyZWN0ID0gaXNEaXJlY3Q7CiAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTQ2VsbCogb3duZXIsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IF9zdHViUm91dGlu
ZSwgU3RydWN0dXJlKiBfYmFzZSwgU3RydWN0dXJlKiBfcHJvdG8sIGJvb2wgaXNEaXJlY3QpCisg
ICAgICAgIHZvaWQgc2V0KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHVi
Um91dGluZT4gX3N0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIF9iYXNlLCBTdHJ1Y3R1cmUqIF9wcm90
bywgYm9vbCBpc0RpcmVjdCkKICAgICAgICAgewogICAgICAgICAgICAgc3R1YlJvdXRpbmUgPSBf
c3R1YlJvdXRpbmU7Ci0gICAgICAgICAgICBiYXNlLnNldChnbG9iYWxEYXRhLCBvd25lciwgX2Jh
c2UpOwotICAgICAgICAgICAgdS5wcm90by5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIF9wcm90byk7
CisgICAgICAgICAgICBiYXNlLnNldCh2bSwgb3duZXIsIF9iYXNlKTsKKyAgICAgICAgICAgIHUu
cHJvdG8uc2V0KHZtLCBvd25lciwgX3Byb3RvKTsKICAgICAgICAgICAgIGlzQ2hhaW4gPSBmYWxz
ZTsKICAgICAgICAgICAgIHRoaXMtPmlzRGlyZWN0ID0gaXNEaXJlY3Q7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Q2VsbCogb3duZXIsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IF9zdHViUm91dGluZSwgU3Ry
dWN0dXJlKiBfYmFzZSwgU3RydWN0dXJlQ2hhaW4qIF9jaGFpbiwgYm9vbCBpc0RpcmVjdCkKKyAg
ICAgICAgdm9pZCBzZXQoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIFN0cnVjdHVyZUNoYWluKiBf
Y2hhaW4sIGJvb2wgaXNEaXJlY3QpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0dWJSb3V0aW5l
ID0gX3N0dWJSb3V0aW5lOwotICAgICAgICAgICAgYmFzZS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIs
IF9iYXNlKTsKLSAgICAgICAgICAgIHUuY2hhaW4uc2V0KGdsb2JhbERhdGEsIG93bmVyLCBfY2hh
aW4pOworICAgICAgICAgICAgYmFzZS5zZXQodm0sIG93bmVyLCBfYmFzZSk7CisgICAgICAgICAg
ICB1LmNoYWluLnNldCh2bSwgb3duZXIsIF9jaGFpbik7CiAgICAgICAgICAgICBpc0NoYWluID0g
dHJ1ZTsKICAgICAgICAgICAgIHRoaXMtPmlzRGlyZWN0ID0gaXNEaXJlY3Q7CiAgICAgICAgIH0K
QEAgLTkyLDE5ICs5MiwxOSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAgICAgCi0gICAg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUsIFN0
cnVjdHVyZSogZmlyc3RCYXNlLCBib29sIGlzRGlyZWN0KQorICAgIFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdChWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFBhc3NSZWZQdHI8SklUU3R1YlJv
dXRpbmU+IHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSwgYm9vbCBpc0RpcmVjdCkK
ICAgICB7Ci0gICAgICAgIGxpc3RbMF0uc2V0KGdsb2JhbERhdGEsIG93bmVyLCBzdHViUm91dGlu
ZSwgZmlyc3RCYXNlLCBpc0RpcmVjdCk7CisgICAgICAgIGxpc3RbMF0uc2V0KHZtLCBvd25lciwg
c3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgaXNEaXJlY3QpOwogICAgIH0KIAotICAgIFBvbHltb3Jw
aGljQWNjZXNzU3RydWN0dXJlTGlzdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCog
b3duZXIsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUq
IGZpcnN0QmFzZSwgU3RydWN0dXJlKiBmaXJzdFByb3RvLCBib29sIGlzRGlyZWN0KQorICAgIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFBhc3NS
ZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSwg
U3RydWN0dXJlKiBmaXJzdFByb3RvLCBib29sIGlzRGlyZWN0KQogICAgIHsKLSAgICAgICAgbGlz
dFswXS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHN0dWJSb3V0aW5lLCBmaXJzdEJhc2UsIGZpcnN0
UHJvdG8sIGlzRGlyZWN0KTsKKyAgICAgICAgbGlzdFswXS5zZXQodm0sIG93bmVyLCBzdHViUm91
dGluZSwgZmlyc3RCYXNlLCBmaXJzdFByb3RvLCBpc0RpcmVjdCk7CiAgICAgfQogCi0gICAgUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlND
ZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUsIFN0cnVj
dHVyZSogZmlyc3RCYXNlLCBTdHJ1Y3R1cmVDaGFpbiogZmlyc3RDaGFpbiwgYm9vbCBpc0RpcmVj
dCkKKyAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwgU3RydWN0dXJlKiBm
aXJzdEJhc2UsIFN0cnVjdHVyZUNoYWluKiBmaXJzdENoYWluLCBib29sIGlzRGlyZWN0KQogICAg
IHsKLSAgICAgICAgbGlzdFswXS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHN0dWJSb3V0aW5lLCBm
aXJzdEJhc2UsIGZpcnN0Q2hhaW4sIGlzRGlyZWN0KTsKKyAgICAgICAgbGlzdFswXS5zZXQodm0s
IG93bmVyLCBzdHViUm91dGluZSwgZmlyc3RCYXNlLCBmaXJzdENoYWluLCBpc0RpcmVjdCk7CiAg
ICAgfQogCiAgICAgYm9vbCB2aXNpdFdlYWsoaW50IGNvdW50KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5o
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHB1
YmxpYzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5SWRBY2Nlc3MgdHJhbnNpdGlvbigK
LSAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLAorICAgICAgICBWTSYgdm0sCiAgICAg
ICAgIEpTQ2VsbCogb3duZXIsCiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAogICAg
ICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKQEAgLTY0LDIyICs2NCwyMiBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsKICAgICAgICAgcmVzdWx0Lm1f
dHlwZSA9IFRyYW5zaXRpb247Ci0gICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5zZXQoZ2xv
YmFsRGF0YSwgb3duZXIsIG9sZFN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX25ld1N0cnVj
dHVyZS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIG5ld1N0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3Vs
dC5tX2NoYWluLnNldChnbG9iYWxEYXRhLCBvd25lciwgY2hhaW4pOworICAgICAgICByZXN1bHQu
bV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgb2xkU3RydWN0dXJlKTsKKyAgICAgICAgcmVz
dWx0Lm1fbmV3U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIG5ld1N0cnVjdHVyZSk7CisgICAgICAg
IHJlc3VsdC5tX2NoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKICAgICAgICAgcmVzdWx0Lm1f
c3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5SWRBY2Nlc3MgcmVwbGFjZSgKLSAgICAgICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLAorICAgICAgICBWTSYgdm0sCiAgICAgICAgIEpTQ2VsbCogb3du
ZXIsCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAogICAgICAgICBQYXNzUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKICAgICB7CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3Mg
cmVzdWx0OwogICAgICAgICByZXN1bHQubV90eXBlID0gUmVwbGFjZTsKLSAgICAgICAgcmVzdWx0
Lm1fb2xkU3RydWN0dXJlLnNldChnbG9iYWxEYXRhLCBvd25lciwgc3RydWN0dXJlKTsKKyAgICAg
ICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CiAgICAg
ICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWNp
c2VKdW1wVGFyZ2V0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHZvaWQgY29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0cyhD
b2RlQmxvY2sKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2stPm51bWJlck9mRXhjZXB0
aW9uSGFuZGxlcnMoKTsgaS0tOykKICAgICAgICAgb3V0LmFwcGVuZChjb2RlQmxvY2stPmV4Y2Vw
dGlvbkhhbmRsZXIoaSkudGFyZ2V0KTsKICAgICAKLSAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0
ZXIgPSBjb2RlQmxvY2stPmdsb2JhbERhdGEoKS0+aW50ZXJwcmV0ZXI7CisgICAgSW50ZXJwcmV0
ZXIqIGludGVycHJldGVyID0gY29kZUJsb2NrLT52bSgpLT5pbnRlcnByZXRlcjsKICAgICBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJl
Z2luKCk7CiAgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IGNvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBi
eXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9uQ291bnQ7KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxNDg2
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRnJvbQogICAgIAogICAgIGlmIChpbnN0cnVjdGlvblswXS51Lm9wY29kZSA9
PSBMTEludDo6Z2V0T3Bjb2RlKGxsaW50X29wX3B1dF9ieV9pZCkKICAgICAgICAgfHwgaW5zdHJ1
Y3Rpb25bMF0udS5vcGNvZGUgPT0gTExJbnQ6OmdldE9wY29kZShsbGludF9vcF9wdXRfYnlfaWRf
b3V0X29mX2xpbmUpKSB7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVy
ZS0+Z2V0KCpwcm9maWxlZEJsb2NrLT5nbG9iYWxEYXRhKCksIGlkZW50KTsKKyAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQoKnByb2ZpbGVkQmxvY2stPnZtKCks
IGlkZW50KTsKICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uLCAwLCAwLCAwLCBpbnZhbGlkT2Zm
c2V0KTsKICAgICAgICAgCkBAIC02OCw3ICs2OCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZyb20KICAgICBBU1NFUlQobmV3U3RydWN0dXJlKTsKICAgICBBU1NFUlQo
Y2hhaW4pOwogICAgIAotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5ld1N0cnVjdHVyZS0+
Z2V0KCpwcm9maWxlZEJsb2NrLT5nbG9iYWxEYXRhKCksIGlkZW50KTsKKyAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBuZXdTdHJ1Y3R1cmUtPmdldCgqcHJvZmlsZWRCbG9jay0+dm0oKSwgaWRl
bnQpOwogICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uLCAwLCAwLCAwLCBpbnZhbGlkT2Zmc2V0KTsKICAgICAK
QEAgLTEwNCw3ICsxMDQsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IoCiAgICAgICAgIAogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOiB7CiAgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0dWJJbmZvLnUucHV0QnlJZFJlcGxhY2UuYmFz
ZU9iamVjdFN0cnVjdHVyZS0+Z2V0KAotICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPmdsb2Jh
bERhdGEoKSwgaWRlbnQpOworICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIGlkZW50
KTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewogICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoCiAgICAgICAgICAgICAgICAgU2ltcGxlUmVwbGFjZSwKQEAgLTEx
OSw3ICsxMTksNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAg
ICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OiB7CiAgICAgICAgIEFT
U0VSVChzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLT50cmFu
c2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKICAgICAgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUt
PmdldCgKLSAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT5nbG9iYWxEYXRhKCksIGlkZW50KTsK
KyAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCBpZGVudCk7CiAgICAgICAgIGlmIChp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KAogICAgICAgICAgICAgICAgIFNpbXBsZVRyYW5zaXRpb24sCkBAIC0xMzksNyArMTM5LDcgQEAg
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogI2VuZGlmIC8vIEVOQUJM
RShKSVQpCiB9CiAKLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBJZGVudGlmaWVyJiBpZGVudCwgYm9vbCBpc0RpcmVjdCkKK1B1dEJ5
SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBJZGVudGlmaWVyJiBpZGVudCwg
Ym9vbCBpc0RpcmVjdCkKIHsKICAgICBpZiAoUHJvcGVydHlOYW1lKGlkZW50KS5hc0luZGV4KCkg
IT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQogICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKQEAgLTE1Miw3ICsxNTIsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgCiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKICAg
ICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5nZXQoZ2xvYmFsRGF0YSwgaWRlbnQsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUp
OworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBpZGVudCwg
YXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CiAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0
KSkgewogICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChBY2Nlc3NvciB8IFJlYWRPbmx5KSkKICAg
ICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwpAQCAtMTc4LDcg
KzE3OCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAK
ICAgICBpZiAoIWlzRGlyZWN0KSB7CiAgICAgICAgIC8vIElmIHRoZSBwcm90b3R5cGUgY2hhaW4g
aGFzIHNldHRlcnMgb3IgcmVhZC1vbmx5IHByb3BlcnRpZXMsIHRoZW4gZ2l2ZSB1cC4KLSAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKGdsb2Jh
bERhdGEsIGlkZW50KSkKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW5NYXlJ
bnRlcmNlcHRTdG9yZVRvKHZtLCBpZGVudCkpCiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHRoZSBwcm90b3R5
cGUgY2hhaW4gaGFzbid0IGJlZW4gbm9ybWFsaXplZCAoaS5lLiB0aGVyZSBhcmUgcHJveGllcyBv
ciBkaWN0aW9uYXJpZXMpCkBAIC0yMTMsNyArMjEzLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKAogICAgIAogICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKAogICAg
ICAgICBTaW1wbGVUcmFuc2l0aW9uLCBzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sCi0gICAgICAgIHN0
cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0KSwgb2Zmc2V0
KTsKKyAgICAgICAgc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbih2bSwgZ2xvYmFsT2JqZWN0KSwg
b2Zmc2V0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgJKHJldmlzaW9uIDE0ODY1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9j
azsKIGNsYXNzIElkZW50aWZpZXI7Ci1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIGNs
YXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgU3RydWN0dXJlOwogY2xhc3MgU3RydWN0dXJlQ2hh
aW47CkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIFB1
dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4
LCBJZGVudGlmaWVyJik7Ci0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihKU0ds
b2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIElkZW50aWZpZXImLCBib29s
IGlzRGlyZWN0KTsKKyAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBJZGVudGlmaWVyJiwgYm9vbCBpc0RpcmVjdCk7CiAg
ICAgCiAgICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVzb2x2ZUdsb2JhbFN0YXR1cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Jlc29sdmVH
bG9iYWxTdGF0dXMuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUmVzb2x2ZUdsb2JhbFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDcgKzM3LDcgQEAgc3RhdGljIFJlc29sdmVHbG9iYWxTdGF0dXMgY29tcHV0ZUZvclN0cgogewog
ICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25vcmVkOwogICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1
ZTsKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCgqY29kZUJsb2Nr
LT5nbG9iYWxEYXRhKCksIGlkZW50aWZpZXIsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1Zh
bHVlKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCgqY29kZUJs
b2NrLT52bSgpLCBpZGVudGlmaWVyLCBhdHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1ZSk7
CiAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgIHNwZWNpZmljVmFs
dWUgPSAwOwogICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5jcHAJKHJldmlzaW9uIDE0
ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOTcsMTMgKzI5NywxMyBAQCB2b2lkIFNhbXBsaW5nVG9vbDo6
c2FtcGxlKCkKICAgICBzX3NhbXBsaW5nVG9vbC0+ZG9SdW4oKTsKIH0KIAotdm9pZCBTYW1wbGlu
Z1Rvb2w6Om5vdGlmeU9mU2NvcGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTY3JpcHRFeGVj
dXRhYmxlKiBzY3JpcHQpCit2b2lkIFNhbXBsaW5nVG9vbDo6bm90aWZ5T2ZTY29wZShWTSYgdm0s
IFNjcmlwdEV4ZWN1dGFibGUqIHNjcmlwdCkKIHsKICNpZiBFTkFCTEUoQ09ERUJMT0NLX1NBTVBM
SU5HKQogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3NjcmlwdFNhbXBsZU1hcE11dGV4KTsKLSAg
ICBtX3Njb3BlU2FtcGxlTWFwLT5zZXQoc2NyaXB0LCBhZG9wdFB0cihuZXcgU2NyaXB0U2FtcGxl
UmVjb3JkKGdsb2JhbERhdGEsIHNjcmlwdCkpKTsKKyAgICBtX3Njb3BlU2FtcGxlTWFwLT5zZXQo
c2NyaXB0LCBhZG9wdFB0cihuZXcgU2NyaXB0U2FtcGxlUmVjb3JkKHZtLCBzY3JpcHQpKSk7CiAj
ZWxzZQotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxEYXRhKTsKKyAgICBVTlVTRURfUEFSQU0odm0p
OwogICAgIFVOVVNFRF9QQVJBTShzY3JpcHQpOwogI2VuZGlmCiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCShyZXZpc2lvbiAxNDg2NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE4NSw4ICsxODUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBzdHJ1Y3Qg
SW5zdHJ1Y3Rpb247CiAKICAgICBzdHJ1Y3QgU2NyaXB0U2FtcGxlUmVjb3JkIHsKLSAgICAgICAg
U2NyaXB0U2FtcGxlUmVjb3JkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU2NyaXB0RXhlY3V0
YWJsZSogZXhlY3V0YWJsZSkKLSAgICAgICAgICAgIDogbV9leGVjdXRhYmxlKGdsb2JhbERhdGEs
IGV4ZWN1dGFibGUpCisgICAgICAgIFNjcmlwdFNhbXBsZVJlY29yZChWTSYgdm0sIFNjcmlwdEV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUpCisgICAgICAgICAgICA6IG1fZXhlY3V0YWJsZSh2bSwgZXhl
Y3V0YWJsZSkKICAgICAgICAgICAgICwgbV9jb2RlQmxvY2soMCkKICAgICAgICAgICAgICwgbV9z
YW1wbGVDb3VudCgwKQogICAgICAgICAgICAgLCBtX29wY29kZVNhbXBsZUNvdW50KDApCkBAIC0y
ODEsNyArMjgxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgc2V0dXAoKTsKICAgICAgICAgdm9pZCBkdW1wKEV4ZWNTdGF0ZSopOwogCi0gICAgICAg
IHZvaWQgbm90aWZ5T2ZTY29wZShKU0dsb2JhbERhdGEmLCBTY3JpcHRFeGVjdXRhYmxlKiBzY29w
ZSk7CisgICAgICAgIHZvaWQgbm90aWZ5T2ZTY29wZShWTSYsIFNjcmlwdEV4ZWN1dGFibGUqIHNj
b3BlKTsKIAogICAgICAgICB2b2lkIHNhbXBsZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1
Y3Rpb24qIHZQQykKICAgICAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDEsMjggKzEwMSwyOCBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewog
ICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGluaXRHZXRCeUlkU2VsZihKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkK
KyAgICB2b2lkIGluaXRHZXRCeUlkU2VsZihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVy
ZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nl
c3NfZ2V0X2J5X2lkX3NlbGY7CiAKLSAgICAgICAgdS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLnNldChnbG9iYWxEYXRhLCBvd25lciwgYmFzZU9iamVjdFN0cnVjdHVyZSk7CisgICAg
ICAgIHUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBiYXNl
T2JqZWN0U3RydWN0dXJlKTsKICAgICB9CiAKLSAgICB2b2lkIGluaXRHZXRCeUlkUHJvdG8oSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmpl
Y3RTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBib29sIGlzRGlyZWN0
KQorICAgIHZvaWQgaW5pdEdldEJ5SWRQcm90byhWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVj
dHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUs
IGJvb2wgaXNEaXJlY3QpCiAgICAgewogICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX2dldF9i
eV9pZF9wcm90bzsKIAotICAgICAgICB1LmdldEJ5SWRQcm90by5iYXNlT2JqZWN0U3RydWN0dXJl
LnNldChnbG9iYWxEYXRhLCBvd25lciwgYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgICAgIHUu
Z2V0QnlJZFByb3RvLnByb3RvdHlwZVN0cnVjdHVyZS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHBy
b3RvdHlwZVN0cnVjdHVyZSk7CisgICAgICAgIHUuZ2V0QnlJZFByb3RvLmJhc2VPYmplY3RTdHJ1
Y3R1cmUuc2V0KHZtLCBvd25lciwgYmFzZU9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIHUuZ2V0
QnlJZFByb3RvLnByb3RvdHlwZVN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBwcm90b3R5cGVTdHJ1
Y3R1cmUpOwogICAgICAgICB1LmdldEJ5SWRQcm90by5pc0RpcmVjdCA9IGlzRGlyZWN0OwogICAg
IH0KIAotICAgIHZvaWQgaW5pdEdldEJ5SWRDaGFpbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgU3RydWN0dXJl
Q2hhaW4qIGNoYWluLCB1bnNpZ25lZCBjb3VudCwgYm9vbCBpc0RpcmVjdCkKKyAgICB2b2lkIGlu
aXRHZXRCeUlkQ2hhaW4oVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmpl
Y3RTdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5zaWduZWQgY291bnQsIGJvb2wg
aXNEaXJlY3QpCiAgICAgewogICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX2dldF9ieV9pZF9j
aGFpbjsKIAotICAgICAgICB1LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLnNldChn
bG9iYWxEYXRhLCBvd25lciwgYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgICAgIHUuZ2V0QnlJ
ZENoYWluLmNoYWluLnNldChnbG9iYWxEYXRhLCBvd25lciwgY2hhaW4pOworICAgICAgICB1Lmdl
dEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIGJhc2VPYmplY3RT
dHJ1Y3R1cmUpOworICAgICAgICB1LmdldEJ5SWRDaGFpbi5jaGFpbi5zZXQodm0sIG93bmVyLCBj
aGFpbik7CiAgICAgICAgIHUuZ2V0QnlJZENoYWluLmNvdW50ID0gY291bnQ7CiAgICAgICAgIHUu
Z2V0QnlJZENoYWluLmlzRGlyZWN0ID0gaXNEaXJlY3Q7CiAgICAgfQpAQCAtMTQ1LDIzICsxNDUs
MjMgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKIAogICAgIC8vIFB1dEJ5SWQqCiAKLSAg
ICB2b2lkIGluaXRQdXRCeUlkVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Q2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIGJvb2wgaXNEaXJlY3QpCisgICAgdm9pZCBp
bml0UHV0QnlJZFRyYW5zaXRpb24oVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHBy
ZXZpb3VzU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNo
YWluLCBib29sIGlzRGlyZWN0KQogICAgIHsKICAgICAgICAgaWYgKGlzRGlyZWN0KQogICAgICAg
ICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3Ry
YW5zaXRpb25fbm9ybWFsOwogCi0gICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNT
dHJ1Y3R1cmUuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBwcmV2aW91c1N0cnVjdHVyZSk7Ci0gICAg
ICAgIHUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLnNldChnbG9iYWxEYXRhLCBvd25lciwg
c3RydWN0dXJlKTsKLSAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5zZXQoZ2xvYmFs
RGF0YSwgb3duZXIsIGNoYWluKTsKKyAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91
c1N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBwcmV2aW91c1N0cnVjdHVyZSk7CisgICAgICAgIHUu
cHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Cisg
ICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOwog
ICAgIH0KIAotICAgIHZvaWQgaW5pdFB1dEJ5SWRSZXBsYWNlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlKQorICAg
IHZvaWQgaW5pdFB1dEJ5SWRSZXBsYWNlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJl
KiBiYXNlT2JqZWN0U3RydWN0dXJlKQogICAgIHsKICAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vz
c19wdXRfYnlfaWRfcmVwbGFjZTsKICAgICAKLSAgICAgICAgdS5wdXRCeUlkUmVwbGFjZS5iYXNl
T2JqZWN0U3RydWN0dXJlLnNldChnbG9iYWxEYXRhLCBvd25lciwgYmFzZU9iamVjdFN0cnVjdHVy
ZSk7CisgICAgICAgIHUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5zZXQodm0s
IG93bmVyLCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKICAgICB9CiAgICAgICAgIAogICAgIHZvaWQg
aW5pdFB1dEJ5SWRMaXN0KFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3QpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5j
cHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDkgQEAgY29u
c3QgQ2xhc3NJbmZvIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jawogY29uc3QgQ2xhc3NJbmZvIFVu
bGlua2VkRXZhbENvZGVCbG9jazo6c19pbmZvID0geyAiVW5saW5rZWRFdmFsQ29kZUJsb2NrIiwg
JkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShVbmxpbmtlZEV2YWxDb2Rl
QmxvY2spIH07CiBjb25zdCBDbGFzc0luZm8gVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6c19p
bmZvID0geyAiVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaykgfTsKIAotc3Rh
dGljIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGdlbmVyYXRlRnVuY3Rpb25Db2RlQmxvY2so
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1Njb3BlKiBzY29wZSwgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxl
ck1vZGUgcHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJyb3IpCitzdGF0aWMgVW5saW5rZWRG
dW5jdGlvbkNvZGVCbG9jayogZ2VuZXJhdGVGdW5jdGlvbkNvZGVCbG9jayhWTSYgdm0sIEpTU2Nv
cGUqIHNjb3BlLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgY29uc3Qg
U291cmNlQ29kZSYgc291cmNlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIERlYnVnZ2Vy
TW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUsIFBhcnNlckVycm9y
JiBlcnJvcikKIHsKLSAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSA9IHBhcnNlPEZ1
bmN0aW9uQm9keU5vZGU+KCZnbG9iYWxEYXRhLCBzb3VyY2UsIGV4ZWN1dGFibGUtPnBhcmFtZXRl
cnMoKSwgZXhlY3V0YWJsZS0+bmFtZSgpLCBleGVjdXRhYmxlLT5pc0luU3RyaWN0Q29udGV4dCgp
ID8gSlNQYXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWwsIEpTUGFyc2VGdW5jdGlvbkNvZGUsIGVy
cm9yKTsKKyAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSA9IHBhcnNlPEZ1bmN0aW9u
Qm9keU5vZGU+KCZ2bSwgc291cmNlLCBleGVjdXRhYmxlLT5wYXJhbWV0ZXJzKCksIGV4ZWN1dGFi
bGUtPm5hbWUoKSwgZXhlY3V0YWJsZS0+aXNJblN0cmljdENvbnRleHQoKSA/IEpTUGFyc2VTdHJp
Y3QgOiBKU1BhcnNlTm9ybWFsLCBKU1BhcnNlRnVuY3Rpb25Db2RlLCBlcnJvcik7CiAKICAgICBp
ZiAoIWJvZHkpIHsKICAgICAgICAgQVNTRVJUKGVycm9yLm1fdHlwZSAhPSBQYXJzZXJFcnJvcjo6
RXJyb3JOb25lKTsKQEAgLTYxLDggKzYxLDggQEAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2sqIGdlbmVyYQogICAgIGJvZHktPmZpbmlzaFBhcnNpbmcoZXhlY3V0YWJsZS0+cGFyYW1l
dGVycygpLCBleGVjdXRhYmxlLT5uYW1lKCksIGV4ZWN1dGFibGUtPmZ1bmN0aW9uTmFtZUlzSW5T
Y29wZVRvZ2dsZSgpKTsKICAgICBleGVjdXRhYmxlLT5yZWNvcmRQYXJzZShib2R5LT5mZWF0dXJl
cygpLCBib2R5LT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCBib2R5LT5saW5lTm8oKSwgYm9keS0+
bGFzdExpbmUoKSk7CiAgICAgCi0gICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogcmVzdWx0
ID0gVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlKCZnbG9iYWxEYXRhLCBGdW5jdGlv
bkNvZGUsIEV4ZWN1dGFibGVJbmZvKGJvZHktPm5lZWRzQWN0aXZhdGlvbigpLCBib2R5LT51c2Vz
RXZhbCgpLCBib2R5LT5pc1N0cmljdE1vZGUoKSwga2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KSk7
Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5
dGVjb2RlR2VuZXJhdG9yKGdsb2JhbERhdGEsIHNjb3BlLCBib2R5LmdldCgpLCByZXN1bHQsIGRl
YnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlKSkpOworICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2sqIHJlc3VsdCA9IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSgmdm0sIEZ1bmN0
aW9uQ29kZSwgRXhlY3V0YWJsZUluZm8oYm9keS0+bmVlZHNBY3RpdmF0aW9uKCksIGJvZHktPnVz
ZXNFdmFsKCksIGJvZHktPmlzU3RyaWN0TW9kZSgpLCBraW5kID09IENvZGVGb3JDb25zdHJ1Y3Qp
KTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcg
Qnl0ZWNvZGVHZW5lcmF0b3Iodm0sIHNjb3BlLCBib2R5LmdldCgpLCByZXN1bHQsIGRlYnVnZ2Vy
TW9kZSwgcHJvZmlsZXJNb2RlKSkpOwogICAgIGVycm9yID0gZ2VuZXJhdG9yLT5nZW5lcmF0ZSgp
OwogICAgIGJvZHktPmRlc3Ryb3lEYXRhKCk7CiAgICAgaWYgKGVycm9yLm1fdHlwZSAhPSBQYXJz
ZXJFcnJvcjo6RXJyb3JOb25lKQpAQCAtODAsOCArODAsOCBAQCB1bnNpZ25lZCBVbmxpbmtlZENv
ZGVCbG9jazo6YWRkT3JGaW5kQ29uCiAgICAgcmV0dXJuIGFkZENvbnN0YW50KHYpOwogfQogCi1V
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgU291cmNl
Q29kZSYgc291cmNlLCBGdW5jdGlvbkJvZHlOb2RlKiBub2RlKQotICAgIDogQmFzZSgqZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKQorVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSwgRnVuY3Rpb25Cb2R5Tm9kZSogbm9kZSkKKyAgICA6IEJhc2UoKnZtLCBz
dHJ1Y3R1cmUpCiAgICAgLCBtX251bUNhcHR1cmVkVmFyaWFibGVzKG5vZGUtPmNhcHR1cmVkVmFy
aWFibGVDb3VudCgpKQogICAgICwgbV9mb3JjZVVzZXNBcmd1bWVudHMobm9kZS0+dXNlc0FyZ3Vt
ZW50cygpKQogICAgICwgbV9pc0luU3RyaWN0Q29udGV4dChub2RlLT5pc1N0cmljdE1vZGUoKSkK
QEAgLTExOCwxOSArMTE4LDE5IEBAIHZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZp
c2l0Q2gKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9zeW1ib2xUYWJsZUZvckNv
bnN0cnVjdCk7CiB9CiAKLUZ1bmN0aW9uRXhlY3V0YWJsZSogVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGU6OmxpbmsoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIHNpemVfdCBsaW5lT2Zmc2V0LCBzaXplX3Qgc291cmNlT2Zmc2V0KQorRnVuY3Rpb25F
eGVjdXRhYmxlKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6bGluayhWTSYgdm0sIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgc2l6ZV90IGxpbmVPZmZzZXQsIHNpemVfdCBzb3VyY2VPZmZz
ZXQpCiB7CiAgICAgdW5zaWduZWQgZmlyc3RMaW5lID0gbGluZU9mZnNldCArIG1fZmlyc3RMaW5l
T2Zmc2V0OwogICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gc291cmNlT2Zmc2V0ICsgbV9zdGFy
dE9mZnNldDsKICAgICBTb3VyY2VDb2RlIGNvZGUoc291cmNlLnByb3ZpZGVyKCksIHN0YXJ0T2Zm
c2V0LCBzdGFydE9mZnNldCArIG1fc291cmNlTGVuZ3RoLCBmaXJzdExpbmUpOwotICAgIHJldHVy
biBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZShnbG9iYWxEYXRhLCBjb2RlLCB0aGlzLCBmaXJz
dExpbmUsIGZpcnN0TGluZSArIG1fbGluZUNvdW50KTsKKyAgICByZXR1cm4gRnVuY3Rpb25FeGVj
dXRhYmxlOjpjcmVhdGUodm0sIGNvZGUsIHRoaXMsIGZpcnN0TGluZSwgZmlyc3RMaW5lICsgbV9s
aW5lQ291bnQpOwogfQogCiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2RlKGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEV4
ZWNTdGF0ZSogZXhlYywgRGVidWdnZXIqLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTT2Jq
ZWN0KiogZXhjZXB0aW9uKQogewogICAgIFBhcnNlckVycm9yIGVycm9yOwotICAgIENvZGVDYWNo
ZSogY29kZUNhY2hlID0gZXhlYy0+Z2xvYmFsRGF0YSgpLmNvZGVDYWNoZSgpOwotICAgIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gY29kZUNhY2hlLT5nZXRGdW5jdGlv
bkV4ZWN1dGFibGVGcm9tR2xvYmFsQ29kZShleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUsIHNvdXJj
ZSwgZXJyb3IpOworICAgIENvZGVDYWNoZSogY29kZUNhY2hlID0gZXhlYy0+dm0oKS5jb2RlQ2Fj
aGUoKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGNvZGVD
YWNoZS0+Z2V0RnVuY3Rpb25FeGVjdXRhYmxlRnJvbUdsb2JhbENvZGUoZXhlYy0+dm0oKSwgbmFt
ZSwgc291cmNlLCBlcnJvcik7CiAgICAgaWYgKGVycm9yLm1fdHlwZSAhPSBQYXJzZXJFcnJvcjo6
RXJyb3JOb25lKSB7CiAgICAgICAgICpleGNlcHRpb24gPSBlcnJvci50b0Vycm9yT2JqZWN0KGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc291cmNlKTsKICAgICAgICAgcmV0dXJuIDA7CkBA
IC0xMzksNyArMTM5LDcgQEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIFVubGlua2VkRnVu
YwogICAgIHJldHVybiBleGVjdXRhYmxlOwogfQogCi1VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
KiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29kZUJsb2NrRm9yKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNTY29wZSogc2NvcGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQsIERlYnVnZ2VyTW9kZSBkZWJ1
Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvcikK
K1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpj
b2RlQmxvY2tGb3IoVk0mIHZtLCBKU1Njb3BlKiBzY29wZSwgY29uc3QgU291cmNlQ29kZSYgc291
cmNlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCwgRGVidWdnZXJN
b2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3Im
IGVycm9yKQogewogICAgIHN3aXRjaCAoc3BlY2lhbGl6YXRpb25LaW5kKSB7CiAgICAgY2FzZSBD
b2RlRm9yQ2FsbDoKQEAgLTE1MiwxOSArMTUyLDE5IEBAIFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2sqIFVubGlua2VkRnVuY3QKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgVW5saW5rZWRG
dW5jdGlvbkNvZGVCbG9jayogcmVzdWx0ID0gZ2VuZXJhdGVGdW5jdGlvbkNvZGVCbG9jayhnbG9i
YWxEYXRhLCBzY29wZSwgdGhpcywgc291cmNlLCBzcGVjaWFsaXphdGlvbktpbmQsIGRlYnVnZ2Vy
TW9kZSwgcHJvZmlsZXJNb2RlLCBlcnJvcik7CisgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
ayogcmVzdWx0ID0gZ2VuZXJhdGVGdW5jdGlvbkNvZGVCbG9jayh2bSwgc2NvcGUsIHRoaXMsIHNv
dXJjZSwgc3BlY2lhbGl6YXRpb25LaW5kLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJy
b3IpOwogICAgIAogICAgIGlmIChlcnJvci5tX3R5cGUgIT0gUGFyc2VyRXJyb3I6OkVycm9yTm9u
ZSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBzd2l0Y2ggKHNwZWNpYWxpemF0aW9uS2luZCkg
ewogICAgIGNhc2UgQ29kZUZvckNhbGw6Ci0gICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgcmVzdWx0KTsKLSAgICAgICAgbV9zeW1ib2xUYWJsZUZvckNhbGwu
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHJlc3VsdC0+c3ltYm9sVGFibGUoKSk7CisgICAgICAgIG1f
Y29kZUJsb2NrRm9yQ2FsbC5zZXQodm0sIHRoaXMsIHJlc3VsdCk7CisgICAgICAgIG1fc3ltYm9s
VGFibGVGb3JDYWxsLnNldCh2bSwgdGhpcywgcmVzdWx0LT5zeW1ib2xUYWJsZSgpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgotICAgICAgICBtX2NvZGVCbG9j
a0ZvckNvbnN0cnVjdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgcmVzdWx0KTsKLSAgICAgICAgbV9z
eW1ib2xUYWJsZUZvckNvbnN0cnVjdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgcmVzdWx0LT5zeW1i
b2xUYWJsZSgpKTsKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Quc2V0KHZtLCB0aGlz
LCByZXN1bHQpOworICAgICAgICBtX3N5bWJvbFRhYmxlRm9yQ29uc3RydWN0LnNldCh2bSwgdGhp
cywgcmVzdWx0LT5zeW1ib2xUYWJsZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJl
dHVybiByZXN1bHQ7CkBAIC0xODIsMTIgKzE4MiwxMiBAQCBTdHJpbmcgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGU6OnBhcmFtCiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAot
VW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVj
dXRhYmxlSW5mbyYgaW5mbykKLSAgICA6IEJhc2UoKmdsb2JhbERhdGEsIHN0cnVjdHVyZSkKK1Vu
bGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCisg
ICAgOiBCYXNlKCp2bSwgc3RydWN0dXJlKQogICAgICwgbV9udW1WYXJzKDApCiAgICAgLCBtX251
bUNhbGxlZVJlZ2lzdGVycygwKQogICAgICwgbV9udW1QYXJhbWV0ZXJzKDApCi0gICAgLCBtX2ds
b2JhbERhdGEoZ2xvYmFsRGF0YSkKKyAgICAsIG1fdm0odm0pCiAgICAgLCBtX2FyZ3VtZW50c1Jl
Z2lzdGVyKC0xKQogICAgICwgbV9nbG9iYWxPYmplY3RSZWdpc3RlcigtMSkKICAgICAsIG1fbmVl
ZHNGdWxsU2NvcGVDaGFpbihpbmZvLm1fbmVlZHNBY3RpdmF0aW9uKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlz
aW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMCArODEsMTAgQEAgY2xhc3MgVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUgOiBwdWJsaQogcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBD
b2RlQ2FjaGU7CiAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKLSAgICBzdGF0aWMgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgRnVuY3Rpb25Cb2R5Tm9kZSogbm9kZSkKKyAgICBzdGF0aWMg
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShWTSogdm0sIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgRnVuY3Rpb25Cb2R5Tm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPihnbG9iYWxEYXRhLT5oZWFwKSkgVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+dW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIHNvdXJjZSwgbm9kZSk7Ci0gICAgICAgIGlu
c3RhbmNlLT5maW5pc2hDcmVhdGlvbigqZ2xvYmFsRGF0YSk7CisgICAgICAgIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPih2bS0+aGVhcCkpIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKHZtLCB2bS0+dW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCks
IHNvdXJjZSwgbm9kZSk7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOwog
ICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCkBAIC0xMDcsMTEgKzEwNywxMSBAQCBw
dWJsaWM6CiAKICAgICBTdHJpbmcgcGFyYW1TdHJpbmcoKSBjb25zdDsKIAotICAgIFVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9ja0ZvcihKU0dsb2JhbERhdGEmLCBKU1Njb3BlKiwg
Y29uc3QgU291cmNlQ29kZSYsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIERlYnVnZ2VyTW9kZSwg
UHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYpOworICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2sqIGNvZGVCbG9ja0ZvcihWTSYsIEpTU2NvcGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCwgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUsIFBhcnNlckVycm9y
Jik7CiAKICAgICBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZyb21HbG9iYWxD
b2RlKGNvbnN0IElkZW50aWZpZXImLCBFeGVjU3RhdGUqLCBEZWJ1Z2dlciosIGNvbnN0IFNvdXJj
ZUNvZGUmLCBKU09iamVjdCoqIGV4Y2VwdGlvbik7CiAKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGxpbmsoSlNHbG9iYWxEYXRhJiwgY29uc3QgU291cmNlQ29kZSYsIHNpemVfdCBsaW5lT2Zmc2V0
LCBzaXplX3Qgc291cmNlT2Zmc2V0KTsKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGxpbmsoVk0m
LCBjb25zdCBTb3VyY2VDb2RlJiwgc2l6ZV90IGxpbmVPZmZzZXQsIHNpemVfdCBzb3VyY2VPZmZz
ZXQpOwogCiAgICAgdm9pZCBjbGVhckNvZGVGb3JSZWNvbXBpbGF0aW9uKCkKICAgICB7CkBAIC0x
NDAsNyArMTQwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7
CiAKIHByaXZhdGU6Ci0gICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoSlNHbG9iYWxEYXRh
KiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0aW9uQm9keU5vZGUqKTsKKyAg
ICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShWTSosIFN0cnVjdHVyZSosIGNvbnN0IFNvdXJj
ZUNvZGUmLCBGdW5jdGlvbkJvZHlOb2RlKik7CiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsKICAgICBXcml0ZUJhcnJpZXI8VW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CiAKQEAgLTE2
NiwxOCArMTY2LDE4IEBAIHByaXZhdGU6CiAgICAgRnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xl
IG1fZnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xlOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCiAgICAgewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9i
YWxEYXRhKTsKLSAgICAgICAgbV9uYW1lVmFsdWUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIGpzU3Ry
aW5nKCZnbG9iYWxEYXRhLCBuYW1lKCkuc3RyaW5nKCkpKTsKKyAgICAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOworICAgICAgICBtX25hbWVWYWx1ZS5zZXQodm0sIHRoaXMsIGpzU3RyaW5n
KCZ2bSwgbmFtZSgpLnN0cmluZygpKSk7CiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiBwdWJsaWM6Ci0gICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKKyAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbiB8IEpTQ2VsbDo6U3RydWN0dXJlRmxhZ3M7CkBAIC0yODIsNyAr
MjgyLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2Fy
eSgpOwogICAgICAgICB1bnNpZ25lZCBzaXplID0gbV9yYXJlRGF0YS0+bV9yZWdleHBzLnNpemUo
KTsKLSAgICAgICAgbV9yYXJlRGF0YS0+bV9yZWdleHBzLmFwcGVuZChXcml0ZUJhcnJpZXI8UmVn
RXhwPigqbV9nbG9iYWxEYXRhLCB0aGlzLCByKSk7CisgICAgICAgIG1fcmFyZURhdGEtPm1fcmVn
ZXhwcy5hcHBlbmQoV3JpdGVCYXJyaWVyPFJlZ0V4cD4oKm1fdm0sIHRoaXMsIHIpKTsKICAgICAg
ICAgcmV0dXJuIHNpemU7CiAgICAgfQogICAgIHVuc2lnbmVkIG51bWJlck9mUmVnRXhwcygpIGNv
bnN0CkBAIC0zMDUsNyArMzA1LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgdW5zaWduZWQg
cmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7CiAgICAgICAgIG1fY29uc3RhbnRS
ZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKLSAgICAgICAgbV9jb25z
dGFudFJlZ2lzdGVycy5sYXN0KCkuc2V0KCptX2dsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAg
ICBtX2NvbnN0YW50UmVnaXN0ZXJzLmxhc3QoKS5zZXQoKm1fdm0sIHRoaXMsIHYpOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICB1bnNpZ25lZCBhZGRPckZpbmRDb25zdGFudChK
U1ZhbHVlKTsKQEAgLTM3Myw3ICszNzMsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICB1bnNp
Z25lZCBzaXplID0gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsKICAgICAgICAgbV9mdW5jdGlvbkRl
Y2xzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KCkpOwot
ICAgICAgICBtX2Z1bmN0aW9uRGVjbHMubGFzdCgpLnNldCgqbV9nbG9iYWxEYXRhLCB0aGlzLCBu
KTsKKyAgICAgICAgbV9mdW5jdGlvbkRlY2xzLmxhc3QoKS5zZXQoKm1fdm0sIHRoaXMsIG4pOwog
ICAgICAgICByZXR1cm4gc2l6ZTsKICAgICB9CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRl
eF0uZ2V0KCk7IH0KQEAgLTM4Miw3ICszODIsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICB1
bnNpZ25lZCBzaXplID0gbV9mdW5jdGlvbkV4cHJzLnNpemUoKTsKICAgICAgICAgbV9mdW5jdGlv
bkV4cHJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KCkp
OwotICAgICAgICBtX2Z1bmN0aW9uRXhwcnMubGFzdCgpLnNldCgqbV9nbG9iYWxEYXRhLCB0aGlz
LCBuKTsKKyAgICAgICAgbV9mdW5jdGlvbkV4cHJzLmxhc3QoKS5zZXQoKm1fdm0sIHRoaXMsIG4p
OwogICAgICAgICByZXR1cm4gc2l6ZTsKICAgICB9CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUqIGZ1bmN0aW9uRXhwcihpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25FeHByc1tp
bmRleF0uZ2V0KCk7IH0KQEAgLTM5NSw3ICszOTUsNyBAQCBwdWJsaWM6CiAKICAgICBTaGFyZWRT
eW1ib2xUYWJsZSogc3ltYm9sVGFibGUoKSBjb25zdCB7IHJldHVybiBtX3N5bWJvbFRhYmxlLmdl
dCgpOyB9CiAKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEoKSBjb25zdCB7IHJldHVybiBt
X2dsb2JhbERhdGE7IH0KKyAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9CiAKICAg
ICB1bnNpZ25lZCBhZGRSZXNvbHZlKCkgeyByZXR1cm4gbV9yZXNvbHZlT3BlcmF0aW9uQ291bnQr
KzsgfQogICAgIHVuc2lnbmVkIG51bWJlck9mUmVzb2x2ZU9wZXJhdGlvbnMoKSBjb25zdCB7IHJl
dHVybiBtX3Jlc29sdmVPcGVyYXRpb25Db3VudDsgfQpAQCAtNDcxLDE1ICs0NzEsMTUgQEAgcHVi
bGljOgogICAgIHVuc2lnbmVkIGxpbmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNvdW50
OyB9CiAKIHByb3RlY3RlZDoKLSAgICBVbmxpbmtlZENvZGVCbG9jayhKU0dsb2JhbERhdGEqLCBT
dHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mKTsKKyAgICBVbmxpbmtl
ZENvZGVCbG9jayhWTSosIFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5m
byYpOwogICAgIH5VbmxpbmtlZENvZGVCbG9jaygpOwogCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYg
dm0pCiAgICAgewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAg
ICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICBpZiAoY29kZVR5cGUoKSA9
PSBHbG9iYWxDb2RlKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N5bWJvbFRhYmxl
LnNldChnbG9iYWxEYXRhLCB0aGlzLCBTaGFyZWRTeW1ib2xUYWJsZTo6Y3JlYXRlKGdsb2JhbERh
dGEpKTsKKyAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQodm0sIHRoaXMsIFNoYXJlZFN5bWJvbFRh
YmxlOjpjcmVhdGUodm0pKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC00OTMsNyArNDkzLDcgQEAg
cHJpdmF0ZToKICAgICBSZWZDb3VudGVkQXJyYXk8VW5saW5rZWRJbnN0cnVjdGlvbj4gbV91bmxp
bmtlZEluc3RydWN0aW9uczsKIAogICAgIGludCBtX251bVBhcmFtZXRlcnM7Ci0gICAgSlNHbG9i
YWxEYXRhKiBtX2dsb2JhbERhdGE7CisgICAgVk0qIG1fdm07CiAKICAgICBpbnQgbV90aGlzUmVn
aXN0ZXI7CiAgICAgaW50IG1fYXJndW1lbnRzUmVnaXN0ZXI7CkBAIC01NzgsOCArNTc4LDggQEAg
cHVibGljOgogICAgIHR5cGVkZWYgVW5saW5rZWRDb2RlQmxvY2sgQmFzZTsKIAogcHJvdGVjdGVk
OgotICAgIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxl
SW5mbyYgaW5mbykKLSAgICAgICAgOiBCYXNlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgY29kZVR5
cGUsIGluZm8pCisgICAgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZv
KQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgY29kZVR5cGUsIGluZm8pCiAgICAgewog
ICAgIH0KIApAQCAtNTkxLDEwICs1OTEsMTAgQEAgcHJvdGVjdGVkOgogY2xhc3MgVW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrIDogcHVibGljIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIHsKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIENvZGVDYWNoZTsKLSAgICBzdGF0aWMgVW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrKiBjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBFeGVj
dXRhYmxlSW5mbyYgaW5mbykKKyAgICBzdGF0aWMgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBj
cmVhdGUoVk0qIHZtLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbykKICAgICB7Ci0gICAgICAg
IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+KGdsb2JhbERhdGEtPmhlYXApKSBVbmxp
bmtlZFByb2dyYW1Db2RlQmxvY2soZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+dW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBpbmZvKTsKLSAgICAgICAgaW5zdGFuY2UtPmZp
bmlzaENyZWF0aW9uKCpnbG9iYWxEYXRhKTsKKyAgICAgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJs
b2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jaz4odm0tPmhlYXApKSBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT51
bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGluZm8pOworICAgICAgICBp
bnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtKTsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwog
ICAgIH0KIApAQCAtNjAyLDkgKzYwMiw5IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFVubGlua2Vk
R2xvYmFsQ29kZUJsb2NrIEJhc2U7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsK
IAotICAgIHZvaWQgYWRkRnVuY3Rpb25EZWNsYXJhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBm
dW5jdGlvbkV4ZWN1dGFibGUpCisgICAgdm9pZCBhZGRGdW5jdGlvbkRlY2xhcmF0aW9uKFZNJiB2
bSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1
bmN0aW9uRXhlY3V0YWJsZSkKICAgICB7Ci0gICAgICAgIG1fZnVuY3Rpb25EZWNsYXJhdGlvbnMu
YXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG5hbWUsIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZT4oZ2xvYmFsRGF0YSwgdGhpcywgZnVuY3Rpb25FeGVjdXRhYmxlKSkpOworICAg
ICAgICBtX2Z1bmN0aW9uRGVjbGFyYXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihuYW1lLCBX
cml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCB0aGlzLCBmdW5jdGlv
bkV4ZWN1dGFibGUpKSk7CiAgICAgfQogCiAgICAgdm9pZCBhZGRWYXJpYWJsZURlY2xhcmF0aW9u
KGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGJvb2wgaXNDb25zdGFudCkKQEAgLTYyMSw4ICs2MjEs
OCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwogCiBwcml2YXRlOgotICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayhKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRh
YmxlSW5mbyYgaW5mbykKLSAgICAgICAgOiBCYXNlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgR2xv
YmFsQ29kZSwgaW5mbykKKyAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCisgICAgICAgIDog
QmFzZSh2bSwgc3RydWN0dXJlLCBHbG9iYWxDb2RlLCBpbmZvKQogICAgIHsKICAgICB9CiAKQEAg
LTYzMCw5ICs2MzAsOSBAQCBwcml2YXRlOgogICAgIEZ1bmN0aW9uRGVjbGF0aW9ucyBtX2Z1bmN0
aW9uRGVjbGFyYXRpb25zOwogCiBwdWJsaWM6Ci0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90bykKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGds
b2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1R5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oVW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVu
IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CkBAIC02NDQsMTAgKzY0NCwxMCBAQCBjbGFzcyBVbmxp
bmtlZEV2YWxDb2RlQmxvY2sgOiBwdWJsaWMgVW5sCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBDb2RlQ2FjaGU7CiAKLSAgICBzdGF0aWMgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBjcmVhdGUo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbykKKyAg
ICBzdGF0aWMgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBjb25zdCBFeGVj
dXRhYmxlSW5mbyYgaW5mbykKICAgICB7Ci0gICAgICAgIFVubGlua2VkRXZhbENvZGVCbG9jayog
aW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEV2YWxDb2RlQmxv
Y2s+KGdsb2JhbERhdGEtPmhlYXApKSBVbmxpbmtlZEV2YWxDb2RlQmxvY2soZ2xvYmFsRGF0YSwg
Z2xvYmFsRGF0YS0+dW5saW5rZWRFdmFsQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBpbmZvKTsK
LSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCpnbG9iYWxEYXRhKTsKKyAgICAgICAg
VW5saW5rZWRFdmFsQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPFVubGlua2VkRXZhbENvZGVCbG9jaz4odm0tPmhlYXApKSBVbmxpbmtlZEV2YWxDb2RlQmxv
Y2sodm0sIHZtLT51bmxpbmtlZEV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGluZm8pOwor
ICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtKTsKICAgICAgICAgcmV0dXJuIGlu
c3RhbmNlOwogICAgIH0KIApAQCAtNjY0LDE3ICs2NjQsMTcgQEAgcHVibGljOgogICAgIH0KIAog
cHJpdmF0ZToKLSAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCi0g
ICAgICAgIDogQmFzZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIEV2YWxDb2RlLCBpbmZvKQorICAg
IFVubGlua2VkRXZhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25z
dCBFeGVjdXRhYmxlSW5mbyYgaW5mbykKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIEV2
YWxDb2RlLCBpbmZvKQogICAgIHsKICAgICB9CiAKICAgICBWZWN0b3I8SWRlbnRpZmllciwgMCwg
VW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fdmFyaWFibGVzOwogCiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKKyAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFVubGlua2VkRXZh
bENvZGVCbG9ja1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oVW5s
aW5rZWRFdmFsQ29kZUJsb2NrVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9
CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNW
aXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CkBAIC02ODQsMTAgKzY4NCwxMCBA
QCBwdWJsaWM6CiAKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sgOiBwdWJsaWMgVW5s
aW5rZWRDb2RlQmxvY2sgewogcHVibGljOgotICAgIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrKiBjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlVHlwZSBjb2RlVHlw
ZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8pCisgICAgc3RhdGljIFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVj
dXRhYmxlSW5mbyYgaW5mbykKICAgICB7Ci0gICAgICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jaz4oZ2xvYmFsRGF0YS0+aGVhcCkpIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2so
Z2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+dW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVy
ZS5nZXQoKSwgY29kZVR5cGUsIGluZm8pOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRp
b24oKmdsb2JhbERhdGEpOworICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBpbnN0
YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2s+KHZtLT5oZWFwKSkgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayh2bSwgdm0tPnVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGNvZGVUeXBlLCBpbmZvKTsKKyAgICAg
ICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSk7CiAgICAgICAgIHJldHVybiBpbnN0YW5j
ZTsKICAgICB9CiAKQEAgLTY5NSwxNSArNjk1LDE1IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQ2VsbCopOwogCiBwcml2YXRlOgotICAgIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29k
ZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQotICAgICAgICA6IEJh
c2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBjb2RlVHlwZSwgaW5mbykKKyAgICBVbmxpbmtlZEZ1
bmN0aW9uQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNv
ZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbykKKyAgICAgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUsIGNvZGVUeXBlLCBpbmZvKQogICAgIHsKICAgICB9CiAgICAgCiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKKyAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2tUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwor
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8s
IFR5cGVJbmZvKFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8pOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTU1LDEyICsxNTUsMTIgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHJlc2VydmVMYXN0
VmFyKAogICAgICAgICBtX2xhc3RWYXIgPSAmbV9jYWxsZWVSZWdpc3RlcnMubGFzdCgpOwogfQog
Ci1CeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU1Njb3BlKiwgUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBVbmxpbmtlZFByb2dy
YW1Db2RlQmxvY2sqIGNvZGVCbG9jaywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmls
ZXJNb2RlIHByb2ZpbGVyTW9kZSkKK0J5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRv
cihWTSYgdm0sIEpTU2NvcGUqLCBQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIFVubGlua2VkUHJv
Z3JhbUNvZGVCbG9jayogY29kZUJsb2NrLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9m
aWxlck1vZGUgcHJvZmlsZXJNb2RlKQogICAgIDogbV9zaG91bGRFbWl0RGVidWdIb29rcyhkZWJ1
Z2dlck1vZGUgPT0gRGVidWdnZXJPbikKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcyhw
cm9maWxlck1vZGUgPT0gUHJvZmlsZXJPbikKICAgICAsIG1fc3ltYm9sVGFibGUoMCkKICAgICAs
IG1fc2NvcGVOb2RlKHByb2dyYW1Ob2RlKQotICAgICwgbV9jb2RlQmxvY2soZ2xvYmFsRGF0YSwg
Y29kZUJsb2NrKQorICAgICwgbV9jb2RlQmxvY2sodm0sIGNvZGVCbG9jaykKICAgICAsIG1fdGhp
c1JlZ2lzdGVyKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpCiAgICAgLCBtX2VtcHR5
VmFsdWVSZWdpc3RlcigwKQogICAgICwgbV9nbG9iYWxPYmplY3RSZWdpc3RlcigwKQpAQCAtMTcz
LDcgKzE3Myw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihKU0cKICAg
ICAsIG1fZmlyc3RMYXp5RnVuY3Rpb24oMCkKICAgICAsIG1fbGFzdExhenlGdW5jdGlvbigwKQog
ICAgICwgbV9zdGF0aWNQcm9wZXJ0eUFuYWx5emVyKCZtX2luc3RydWN0aW9ucykKLSAgICAsIG1f
Z2xvYmFsRGF0YSgmZ2xvYmFsRGF0YSkKKyAgICAsIG1fdm0oJnZtKQogICAgICwgbV9sYXN0T3Bj
b2RlSUQob3BfZW5kKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fbGFzdE9wY29kZVBvc2l0aW9u
KDApCkBAIC0xOTUsNyArMTk1LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJh
dG9yKEpTRwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25TdGFjay5zaXplKCk7
ICsraSkgewogICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbiA9IGZ1bmN0aW9uU3Rh
Y2tbaV07CiAgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEZ1bmN0
aW9uID0gbWFrZUZ1bmN0aW9uKGZ1bmN0aW9uKTsKLSAgICAgICAgY29kZUJsb2NrLT5hZGRGdW5j
dGlvbkRlY2xhcmF0aW9uKCptX2dsb2JhbERhdGEsIGZ1bmN0aW9uLT5pZGVudCgpLCB1bmxpbmtl
ZEZ1bmN0aW9uKTsKKyAgICAgICAgY29kZUJsb2NrLT5hZGRGdW5jdGlvbkRlY2xhcmF0aW9uKCpt
X3ZtLCBmdW5jdGlvbi0+aWRlbnQoKSwgdW5saW5rZWRGdW5jdGlvbik7CiAgICAgfQogCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YXJTdGFjay5zaXplKCk7ICsraSkKQEAgLTIwMywxMyAr
MjAzLDEzIEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihKU0cKIAogfQog
Ci1CeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU1Njb3BlKiBzY29wZSwgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBV
bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlYnVnZ2VyTW9kZSBkZWJ1Z2dl
ck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUpCitCeXRlY29kZUdlbmVyYXRvcjo6Qnl0
ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBKU1Njb3BlKiBzY29wZSwgRnVuY3Rpb25Cb2R5Tm9kZSog
ZnVuY3Rpb25Cb2R5LCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlYnVn
Z2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUpCiAgICAgOiBt
X3Nob3VsZEVtaXREZWJ1Z0hvb2tzKGRlYnVnZ2VyTW9kZSA9PSBEZWJ1Z2dlck9uKQogICAgICwg
bV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzKHByb2ZpbGVyTW9kZSA9PSBQcm9maWxlck9uKQogICAg
ICwgbV9zeW1ib2xUYWJsZShjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkpCiAgICAgLCBtX3Njb3Bl
Tm9kZShmdW5jdGlvbkJvZHkpCi0gICAgLCBtX3Njb3BlKGdsb2JhbERhdGEsIHNjb3BlKQotICAg
ICwgbV9jb2RlQmxvY2soZ2xvYmFsRGF0YSwgY29kZUJsb2NrKQorICAgICwgbV9zY29wZSh2bSwg
c2NvcGUpCisgICAgLCBtX2NvZGVCbG9jayh2bSwgY29kZUJsb2NrKQogICAgICwgbV9hY3RpdmF0
aW9uUmVnaXN0ZXIoMCkKICAgICAsIG1fZW1wdHlWYWx1ZVJlZ2lzdGVyKDApCiAgICAgLCBtX2ds
b2JhbE9iamVjdFJlZ2lzdGVyKDApCkBAIC0yMjIsNyArMjIyLDcgQEAgQnl0ZWNvZGVHZW5lcmF0
b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEpTRwogICAgICwgbV9maXJzdExhenlGdW5jdGlvbigwKQog
ICAgICwgbV9sYXN0TGF6eUZ1bmN0aW9uKDApCiAgICAgLCBtX3N0YXRpY1Byb3BlcnR5QW5hbHl6
ZXIoJm1faW5zdHJ1Y3Rpb25zKQotICAgICwgbV9nbG9iYWxEYXRhKCZnbG9iYWxEYXRhKQorICAg
ICwgbV92bSgmdm0pCiAgICAgLCBtX2xhc3RPcGNvZGVJRChvcF9lbmQpCiAjaWZuZGVmIE5ERUJV
RwogICAgICwgbV9sYXN0T3Bjb2RlUG9zaXRpb24oMCkKQEAgLTQwMCwxMyArNDAwLDEzIEBAIEJ5
dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihKU0cKICAgICB9CiB9CiAKLUJ5dGVj
b2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpTU2NvcGUqIHNjb3BlLCBFdmFsTm9kZSogZXZhbE5vZGUsIFVubGlua2VkRXZhbENvZGVCbG9j
ayogY29kZUJsb2NrLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJv
ZmlsZXJNb2RlKQorQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwg
SlNTY29wZSogc2NvcGUsIEV2YWxOb2RlKiBldmFsTm9kZSwgVW5saW5rZWRFdmFsQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9m
aWxlck1vZGUpCiAgICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKGRlYnVnZ2VyTW9kZSA9PSBE
ZWJ1Z2dlck9uKQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzKHByb2ZpbGVyTW9kZSA9
PSBQcm9maWxlck9uKQogICAgICwgbV9zeW1ib2xUYWJsZShjb2RlQmxvY2stPnN5bWJvbFRhYmxl
KCkpCiAgICAgLCBtX3Njb3BlTm9kZShldmFsTm9kZSkKLSAgICAsIG1fc2NvcGUoZ2xvYmFsRGF0
YSwgc2NvcGUpCi0gICAgLCBtX2NvZGVCbG9jayhnbG9iYWxEYXRhLCBjb2RlQmxvY2spCisgICAg
LCBtX3Njb3BlKHZtLCBzY29wZSkKKyAgICAsIG1fY29kZUJsb2NrKHZtLCBjb2RlQmxvY2spCiAg
ICAgLCBtX3RoaXNSZWdpc3RlcihDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKQogICAg
ICwgbV9lbXB0eVZhbHVlUmVnaXN0ZXIoMCkKICAgICAsIG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXIo
MCkKQEAgLTQxOSw3ICs0MTksNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoSlNHCiAgICAgLCBtX2ZpcnN0TGF6eUZ1bmN0aW9uKDApCiAgICAgLCBtX2xhc3RMYXp5RnVu
Y3Rpb24oMCkKICAgICAsIG1fc3RhdGljUHJvcGVydHlBbmFseXplcigmbV9pbnN0cnVjdGlvbnMp
Ci0gICAgLCBtX2dsb2JhbERhdGEoJmdsb2JhbERhdGEpCisgICAgLCBtX3ZtKCZ2bSkKICAgICAs
IG1fbGFzdE9wY29kZUlEKG9wX2VuZCkKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX2xhc3RPcGNv
ZGVQb3NpdGlvbigwKQpAQCAtOTU4LDcgKzk1OCw3IEBAIHVuc2lnbmVkIEJ5dGVjb2RlR2VuZXJh
dG9yOjphZGRDb25zdGFudCgKICAgICBTdHJpbmdJbXBsKiByZXAgPSBpZGVudC5pbXBsKCk7CiAg
ICAgSWRlbnRpZmllck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1faWRlbnRpZmllck1hcC5hZGQo
cmVwLCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygpKTsKICAgICBpZiAocmVzdWx0
LmlzTmV3RW50cnkpCi0gICAgICAgIG1fY29kZUJsb2NrLT5hZGRJZGVudGlmaWVyKElkZW50aWZp
ZXIobV9nbG9iYWxEYXRhLCByZXApKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmFkZElkZW50aWZp
ZXIoSWRlbnRpZmllcihtX3ZtLCByZXApKTsKIAogICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3It
PnZhbHVlOwogfQpAQCAtMTE0Nyw3ICsxMTQ3LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRMb2FkKAogewogICAgIEpTU3RyaW5nKiYgc3RyaW5nSW5NYXAgPSBtX3N0cmlu
Z01hcC5hZGQoaWRlbnRpZmllci5pbXBsKCksIDApLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAo
IXN0cmluZ0luTWFwKQotICAgICAgICBzdHJpbmdJbk1hcCA9IGpzT3duZWRTdHJpbmcoZ2xvYmFs
RGF0YSgpLCBpZGVudGlmaWVyLnN0cmluZygpKTsKKyAgICAgICAgc3RyaW5nSW5NYXAgPSBqc093
bmVkU3RyaW5nKHZtKCksIGlkZW50aWZpZXIuc3RyaW5nKCkpOwogICAgIHJldHVybiBlbWl0TG9h
ZChkc3QsIEpTVmFsdWUoc3RyaW5nSW5NYXApKTsKIH0KIApAQCAtMTQ4MSw3ICsxNDgxLDcgQEAg
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREaXJlYwogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZCgwKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKAotICAgICAgICBwcm9wZXJ0eSAhPSBtX2dsb2JhbERhdGEtPnByb3Bl
cnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bworICAgICAgICBwcm9wZXJ0eSAhPSBtX3ZtLT5wcm9w
ZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8KICAgICAgICAgJiYgUHJvcGVydHlOYW1lKHByb3Bl
cnR5KS5hc0luZGV4KCkgPT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTsKICAgICByZXR1cm4g
dmFsdWU7CiB9CkBAIC0xNjE0LDcgKzE2MTQsNyBAQCBKU1N0cmluZyogQnl0ZWNvZGVHZW5lcmF0
b3I6OmFkZFN0cmluZ0NvCiB7CiAgICAgSlNTdHJpbmcqJiBzdHJpbmdJbk1hcCA9IG1fc3RyaW5n
TWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICgh
c3RyaW5nSW5NYXApIHsKLSAgICAgICAgc3RyaW5nSW5NYXAgPSBqc1N0cmluZyhnbG9iYWxEYXRh
KCksIGlkZW50aWZpZXIuc3RyaW5nKCkpOworICAgICAgICBzdHJpbmdJbk1hcCA9IGpzU3RyaW5n
KHZtKCksIGlkZW50aWZpZXIuc3RyaW5nKCkpOwogICAgICAgICBhZGRDb25zdGFudFZhbHVlKHN0
cmluZ0luTWFwKTsKICAgICB9CiAgICAgcmV0dXJuIHN0cmluZ0luTWFwOwpAQCAtMTc2MCw5ICsx
NzYwLDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsRQogCiBFeHBl
Y3RlZEZ1bmN0aW9uIEJ5dGVjb2RlR2VuZXJhdG9yOjpleHBlY3RlZEZ1bmN0aW9uRm9ySWRlbnRp
Zmllcihjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewotICAgIGlmIChpZGVudGlmaWVy
ID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+T2JqZWN0KQorICAgIGlmIChpZGVudGlm
aWVyID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPk9iamVjdCkKICAgICAgICAgcmV0dXJuIEV4cGVj
dE9iamVjdENvbnN0cnVjdG9yOwotICAgIGlmIChpZGVudGlmaWVyID09IG1fZ2xvYmFsRGF0YS0+
cHJvcGVydHlOYW1lcy0+QXJyYXkpCisgICAgaWYgKGlkZW50aWZpZXIgPT0gbV92bS0+cHJvcGVy
dHlOYW1lcy0+QXJyYXkpCiAgICAgICAgIHJldHVybiBFeHBlY3RBcnJheUNvbnN0cnVjdG9yOwog
ICAgIHJldHVybiBOb0V4cGVjdGVkRnVuY3Rpb247CiB9CkBAIC0yMzY1LDcgKzIzNjUsNyBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6cG9wVHJ5QW5kCiB2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7
CiAgICAgZW1pdE9wY29kZShvcF90aHJvd19zdGF0aWNfZXJyb3IpOwotICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChhZGRDb25zdGFudFZhbHVlKGpzU3RyaW5nKGdsb2JhbERhdGEoKSwgbWVzc2Fn
ZSkpLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnRWYWx1
ZShqc1N0cmluZyh2bSgpLCBtZXNzYWdlKSktPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZCh0cnVlKTsKIH0KIApAQCAtMjUyMyw3ICsyNTIzLDcgQEAgdm9pZCBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdFJlYWRPbmx5RXhjZQogICAgIGlmICghaXNTdHJpY3RNb2RlKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICBlbWl0T3Bjb2RlKG9wX3Rocm93X3N0YXRpY19lcnJvcik7Ci0gICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50VmFsdWUoanNTdHJpbmcoZ2xvYmFsRGF0
YSgpLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKS0+aW5kZXgoKSk7Cisg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50VmFsdWUoanNTdHJpbmcodm0oKSwg
U3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKSktPmluZGV4KCkpOwogICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChmYWxzZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlz
aW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDE0ICsyNDQsMTQgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHR5cGVkZWYgRGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrIFZh
clN0YWNrOwogICAgICAgICB0eXBlZGVmIERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNr
IEZ1bmN0aW9uU3RhY2s7CiAKLSAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoSlNHbG9iYWxEYXRh
JiwgSlNTY29wZSosIFByb2dyYW1Ob2RlKiwgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiwgRGVi
dWdnZXJNb2RlLCBQcm9maWxlck1vZGUpOwotICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihKU0ds
b2JhbERhdGEmLCBKU1Njb3BlKiwgRnVuY3Rpb25Cb2R5Tm9kZSosIFVubGlua2VkRnVuY3Rpb25D
b2RlQmxvY2sqLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSk7Ci0gICAgICAgIEJ5dGVjb2Rl
R2VuZXJhdG9yKEpTR2xvYmFsRGF0YSYsIEpTU2NvcGUqLCBFdmFsTm9kZSosIFVubGlua2VkRXZh
bENvZGVCbG9jayosIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlKTsKKyAgICAgICAgQnl0ZWNv
ZGVHZW5lcmF0b3IoVk0mLCBKU1Njb3BlKiwgUHJvZ3JhbU5vZGUqLCBVbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2sqLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSk7CisgICAgICAgIEJ5dGVjb2Rl
R2VuZXJhdG9yKFZNJiwgSlNTY29wZSosIEZ1bmN0aW9uQm9keU5vZGUqLCBVbmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrKiwgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUpOworICAgICAgICBCeXRl
Y29kZUdlbmVyYXRvcihWTSYsIEpTU2NvcGUqLCBFdmFsTm9kZSosIFVubGlua2VkRXZhbENvZGVC
bG9jayosIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlKTsKIAogICAgICAgICB+Qnl0ZWNvZGVH
ZW5lcmF0b3IoKTsKICAgICAgICAgCi0gICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsRGF0YTsgfQotICAgICAgICBjb25zdCBDb21tb25JZGVu
dGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICptX2dsb2JhbERhdGEtPnBy
b3BlcnR5TmFtZXM7IH0KKyAgICAgICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQor
ICAgICAgICBjb25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsg
cmV0dXJuICptX3ZtLT5wcm9wZXJ0eU5hbWVzOyB9CiAKICAgICAgICAgYm9vbCBpc0NvbnN0cnVj
dG9yKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKTsgfQogCkBAIC02NDMs
NyArNjQzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSogbWFrZUZ1bmN0aW9uKEZ1bmN0aW9uQm9keU5vZGUqIGJvZHkpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
Y3JlYXRlKG1fZ2xvYmFsRGF0YSwgbV9zY29wZU5vZGUtPnNvdXJjZSgpLCBib2R5KTsKKyAgICAg
ICAgICAgIHJldHVybiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKG1fdm0sIG1f
c2NvcGVOb2RlLT5zb3VyY2UoKSwgYm9keSk7CiAgICAgICAgIH0KIAogICAgICAgICBKU1N0cmlu
ZyogYWRkU3RyaW5nQ29uc3RhbnQoY29uc3QgSWRlbnRpZmllciYpOwpAQCAtODE5LDcgKzgxOSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFN0YXRpY1Byb3BlcnR5QW5hbHl6ZXIgbV9z
dGF0aWNQcm9wZXJ0eUFuYWx5emVyOwogCi0gICAgICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxE
YXRhOworICAgICAgICBWTSogbV92bTsKIAogICAgICAgICBPcGNvZGVJRCBtX2xhc3RPcGNvZGVJ
RDsKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNCw3ICsxMzQsNyBAQCBSZWdpc3RlcklEKiBSZWdFeHBOb2RlOjplbWl0Qnl0
ZWNvZGUoQnl0CiB7CiAgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQog
ICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXROZXdSZWdFeHAoZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgUmVnRXhwOjpjcmVhdGUoKmdlbmVyYXRvci5n
bG9iYWxEYXRhKCksIG1fcGF0dGVybi5zdHJpbmcoKSwgcmVnRXhwRmxhZ3MobV9mbGFncy5zdHJp
bmcoKSkpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXROZXdSZWdFeHAoZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0KSwgUmVnRXhwOjpjcmVhdGUoKmdlbmVyYXRvci52bSgpLCBtX3Bh
dHRlcm4uc3RyaW5nKCksIHJlZ0V4cEZsYWdzKG1fZmxhZ3Muc3RyaW5nKCkpKSk7CiB9CiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzTm9kZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMTAsNyArMjEwLDcgQEAgYm9vbCBBcnJheU5vZGU6
OmlzU2ltcGxlQXJyYXkoKSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi1Bcmd1bWVudExp
c3ROb2RlKiBBcnJheU5vZGU6OnRvQXJndW1lbnRMaXN0KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgaW50IGxpbmVOdW1iZXIsIGludCBjaGFyUG9zaXRpb24pIGNvbnN0CitBcmd1bWVudExpc3RO
b2RlKiBBcnJheU5vZGU6OnRvQXJndW1lbnRMaXN0KFZNKiB2bSwgaW50IGxpbmVOdW1iZXIsIGlu
dCBjaGFyUG9zaXRpb24pIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFtX2VsaXNpb24gJiYgIW1fb3B0
aW9uYWwpOwogICAgIEVsZW1lbnROb2RlKiBwdHIgPSBtX2VsZW1lbnQ7CkBAIC0yMTksMTIgKzIx
OSwxMiBAQCBBcmd1bWVudExpc3ROb2RlKiBBcnJheU5vZGU6OnRvQXJndW1lbnRMCiAgICAgSlNU
b2tlbkxvY2F0aW9uIGxvY2F0aW9uOwogICAgIGxvY2F0aW9uLmxpbmUgPSBsaW5lTnVtYmVyOwog
ICAgIGxvY2F0aW9uLmNoYXJQb3NpdGlvbiA9IGNoYXJQb3NpdGlvbjsKLSAgICBBcmd1bWVudExp
c3ROb2RlKiBoZWFkID0gbmV3IChnbG9iYWxEYXRhKSBBcmd1bWVudExpc3ROb2RlKGxvY2F0aW9u
LCBwdHItPnZhbHVlKCkpOworICAgIEFyZ3VtZW50TGlzdE5vZGUqIGhlYWQgPSBuZXcgKHZtKSBB
cmd1bWVudExpc3ROb2RlKGxvY2F0aW9uLCBwdHItPnZhbHVlKCkpOwogICAgIEFyZ3VtZW50TGlz
dE5vZGUqIHRhaWwgPSBoZWFkOwogICAgIHB0ciA9IHB0ci0+bmV4dCgpOwogICAgIGZvciAoOyBw
dHI7IHB0ciA9IHB0ci0+bmV4dCgpKSB7CiAgICAgICAgIEFTU0VSVCghcHRyLT5lbGlzaW9uKCkp
OwotICAgICAgICB0YWlsID0gbmV3IChnbG9iYWxEYXRhKSBBcmd1bWVudExpc3ROb2RlKGxvY2F0
aW9uLCB0YWlsLCBwdHItPnZhbHVlKCkpOworICAgICAgICB0YWlsID0gbmV3ICh2bSkgQXJndW1l
bnRMaXN0Tm9kZShsb2NhdGlvbiwgdGFpbCwgcHRyLT52YWx1ZSgpKTsKICAgICB9CiAgICAgcmV0
dXJuIGhlYWQ7CiB9CkBAIC01NTYsNyArNTU2LDcgQEAgUmVnaXN0ZXJJRCogQXBwbHlGdW5jdGlv
bkNhbGxEb3ROb2RlOjplbQogICAgICAgICAgICAgICAgIGlmIChtX2FyZ3MtPm1fbGlzdE5vZGUt
Pm1fbmV4dCkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9hcmdzLT5tX2xpc3ROb2Rl
LT5tX25leHQtPm1fZXhwci0+aXNTaW1wbGVBcnJheSgpKTsKICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKCFtX2FyZ3MtPm1fbGlzdE5vZGUtPm1fbmV4dC0+bV9uZXh0KTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9hcmdzLT5tX2xpc3ROb2RlID0gc3RhdGljX2Nhc3Q8QXJyYXlOb2RlKj4obV9h
cmdzLT5tX2xpc3ROb2RlLT5tX25leHQtPm1fZXhwciktPnRvQXJndW1lbnRMaXN0KGdlbmVyYXRv
ci5nbG9iYWxEYXRhKCksIDAsIDApOworICAgICAgICAgICAgICAgICAgICBtX2FyZ3MtPm1fbGlz
dE5vZGUgPSBzdGF0aWNfY2FzdDxBcnJheU5vZGUqPihtX2FyZ3MtPm1fbGlzdE5vZGUtPm1fbmV4
dC0+bV9leHByKS0+dG9Bcmd1bWVudExpc3QoZ2VuZXJhdG9yLnZtKCksIDAsIDApOwogICAgICAg
ICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVhbEZ1bmN0aW9uID0gZ2VuZXJhdG9y
LmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3Is
IG1fYXJncyk7CiAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjYWxsQXJn
dW1lbnRzLnRoaXNSZWdpc3RlcigpLCBvbGRMaXN0LT5tX2V4cHIpOwpAQCAtMTEzMCw3ICsxMTMw
LDcgQEAgUmVnaXN0ZXJJRCogSW5zdGFuY2VPZk5vZGU6OmVtaXRCeXRlY29kZQogICAgIGdlbmVy
YXRvci5lbWl0Q2hlY2tIYXNJbnN0YW5jZShkc3RSZWcuZ2V0KCksIHNyYzEuZ2V0KCksIHNyYzIu
Z2V0KCksIHRhcmdldC5nZXQoKSk7CiAKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZv
KGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1p
dEdldEJ5SWQocHJvdG90eXBlLmdldCgpLCBzcmMyLmdldCgpLCBnZW5lcmF0b3IuZ2xvYmFsRGF0
YSgpLT5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOworICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJ
ZChwcm90b3R5cGUuZ2V0KCksIHNyYzIuZ2V0KCksIGdlbmVyYXRvci52bSgpLT5wcm9wZXJ0eU5h
bWVzLT5wcm90b3R5cGUpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZv
dCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiAgICAgUmVnaXN0ZXJJRCogcmVzdWx0
ID0gZ2VuZXJhdG9yLmVtaXRJbnN0YW5jZU9mKGRzdFJlZy5nZXQoKSwgc3JjMS5nZXQoKSwgcHJv
dG90eXBlLmdldCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1
Z2dlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rl
YnVnZ2VyL0RlYnVnZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDM0ICsxMTEsMzQgQEAg
dm9pZCBEZWJ1Z2dlcjo6ZGV0YWNoKEpTR2xvYmFsT2JqZWN0KiBnbAogICAgIGdsb2JhbE9iamVj
dC0+c2V0RGVidWdnZXIoMCk7CiB9CiAKLXZvaWQgRGVidWdnZXI6OnJlY29tcGlsZUFsbEpTRnVu
Y3Rpb25zKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK3ZvaWQgRGVidWdnZXI6OnJlY29tcGls
ZUFsbEpTRnVuY3Rpb25zKFZNKiB2bSkKIHsKICAgICAvLyBJZiBKYXZhU2NyaXB0IGlzIHJ1bm5p
bmcsIGl0J3Mgbm90IHNhZmUgdG8gcmVjb21waWxlLCBzaW5jZSB3ZSdsbCBlbmQKICAgICAvLyB1
cCB0aHJvd2luZyBhd2F5IGNvZGUgdGhhdCBpcyBsaXZlIG9uIHRoZSBzdGFjay4KLSAgICBBU1NF
UlQoIWdsb2JhbERhdGEtPmR5bmFtaWNHbG9iYWxPYmplY3QpOwotICAgIGlmIChnbG9iYWxEYXRh
LT5keW5hbWljR2xvYmFsT2JqZWN0KQorICAgIEFTU0VSVCghdm0tPmR5bmFtaWNHbG9iYWxPYmpl
Y3QpOworICAgIGlmICh2bS0+ZHluYW1pY0dsb2JhbE9iamVjdCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgUmVjb21waWxlciByZWNvbXBpbGVyKHRoaXMpOwotICAgIGdsb2JhbERhdGEtPmhlYXAu
b2JqZWN0U3BhY2UoKS5mb3JFYWNoTGl2ZUNlbGwocmVjb21waWxlcik7CisgICAgdm0tPmhlYXAu
b2JqZWN0U3BhY2UoKS5mb3JFYWNoTGl2ZUNlbGwocmVjb21waWxlcik7CiB9CiAKIEpTVmFsdWUg
ZXZhbHVhdGVJbkdsb2JhbENhbGxGcmFtZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgSlNWYWx1ZSYg
ZXhjZXB0aW9uLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIENhbGxGcmFt
ZSogZ2xvYmFsQ2FsbEZyYW1lID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogCiAgICAgRXZhbEV4ZWN1dGFibGUqIGV2YWwg
PSBFdmFsRXhlY3V0YWJsZTo6Y3JlYXRlKGdsb2JhbENhbGxGcmFtZSwgbWFrZVNvdXJjZShzY3Jp
cHQpLCBmYWxzZSk7CiAgICAgaWYgKCFldmFsKSB7Ci0gICAgICAgIGV4Y2VwdGlvbiA9IGdsb2Jh
bERhdGEuZXhjZXB0aW9uOwotICAgICAgICBnbG9iYWxEYXRhLmV4Y2VwdGlvbiA9IEpTVmFsdWUo
KTsKKyAgICAgICAgZXhjZXB0aW9uID0gdm0uZXhjZXB0aW9uOworICAgICAgICB2bS5leGNlcHRp
b24gPSBKU1ZhbHVlKCk7CiAgICAgICAgIHJldHVybiBleGNlcHRpb247CiAgICAgfQogCi0gICAg
SlNWYWx1ZSByZXN1bHQgPSBnbG9iYWxEYXRhLmludGVycHJldGVyLT5leGVjdXRlKGV2YWwsIGds
b2JhbENhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxDYWxsRnJhbWUtPnNjb3BlKCkpOwot
ICAgIGlmIChnbG9iYWxEYXRhLmV4Y2VwdGlvbikgewotICAgICAgICBleGNlcHRpb24gPSBnbG9i
YWxEYXRhLmV4Y2VwdGlvbjsKLSAgICAgICAgZ2xvYmFsRGF0YS5leGNlcHRpb24gPSBKU1ZhbHVl
KCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB2bS5pbnRlcnByZXRlci0+ZXhlY3V0ZShldmFsLCBn
bG9iYWxDYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgZ2xvYmFsQ2FsbEZyYW1lLT5zY29wZSgpKTsK
KyAgICBpZiAodm0uZXhjZXB0aW9uKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IHZtLmV4Y2VwdGlv
bjsKKyAgICAgICAgdm0uZXhjZXB0aW9uID0gSlNWYWx1ZSgpOwogICAgIH0KICAgICBBU1NFUlQo
cmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRGVidWdnZXJDYWxsRnJhbWU7CiAgICAg
Y2xhc3MgRXhlY1N0YXRlOwotICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKKyAgICBjbGFzcyBWTTsK
ICAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKICAgICBjbGFzcyBKU1ZhbHVlOwogICAgIGNsYXNz
IFNvdXJjZVByb3ZpZGVyOwpAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZFJlYWNoQnJlYWtwb2ludChjb25zdCBEZWJ1Z2dlckNhbGxGcmFt
ZSYsIGludHB0cl90LCBpbnQsIGludCkgPSAwOwogCiAKLSAgICAgICAgdm9pZCByZWNvbXBpbGVB
bGxKU0Z1bmN0aW9ucyhKU0dsb2JhbERhdGEqKTsKKyAgICAgICAgdm9pZCByZWNvbXBpbGVBbGxK
U0Z1bmN0aW9ucyhWTSopOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgSGFzaFNldDxKU0dsb2Jh
bE9iamVjdCo+IG1fZ2xvYmFsT2JqZWN0czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uY3BwCShyZXZpc2lvbiAxNDg2
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTcgKzM1LDE3IEBAIEFTU0VSVF9IQVNfVFJJVklB
TF9ERVNUUlVDVE9SKERlYnVnZ2VyQWMKIAogY29uc3QgQ2xhc3NJbmZvIERlYnVnZ2VyQWN0aXZh
dGlvbjo6c19pbmZvID0geyAiRGVidWdnZXJBY3RpdmF0aW9uIiwgJkJhc2U6OnNfaW5mbywgMCwg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShEZWJ1Z2dlckFjdGl2YXRpb24pIH07CiAKLURlYnVnZ2Vy
QWN0aXZhdGlvbjo6RGVidWdnZXJBY3RpdmF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
LSAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5kZWJ1Z2dlckFj
dGl2YXRpb25TdHJ1Y3R1cmUuZ2V0KCkpCitEZWJ1Z2dlckFjdGl2YXRpb246OkRlYnVnZ2VyQWN0
aXZhdGlvbihWTSYgdm0pCisgICAgOiBKU05vbkZpbmFsT2JqZWN0KHZtLCB2bS5kZWJ1Z2dlckFj
dGl2YXRpb25TdHJ1Y3R1cmUuZ2V0KCkpCiB7CiB9CiAKLXZvaWQgRGVidWdnZXJBY3RpdmF0aW9u
OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTT2JqZWN0KiBhY3Rp
dmF0aW9uKQordm9pZCBEZWJ1Z2dlckFjdGl2YXRpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
SlNPYmplY3QqIGFjdGl2YXRpb24pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChhY3RpdmF0
aW9uKTsKICAgICBBU1NFUlQoYWN0aXZhdGlvbi0+aXNBY3RpdmF0aW9uT2JqZWN0KCkpOwotICAg
IG1fYWN0aXZhdGlvbi5zZXQoZ2xvYmFsRGF0YSwgdGhpcywganNDYXN0PEpTQWN0aXZhdGlvbio+
KGFjdGl2YXRpb24pKTsKKyAgICBtX2FjdGl2YXRpb24uc2V0KHZtLCB0aGlzLCBqc0Nhc3Q8SlNB
Y3RpdmF0aW9uKj4oYWN0aXZhdGlvbikpOwogfQogCiB2b2lkIERlYnVnZ2VyQWN0aXZhdGlvbjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRp
b24uaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2Vy
L0RlYnVnZ2VyQWN0aXZhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIEpTTm9uRmluYWxP
YmplY3QgQmFzZTsKIAotICAgICAgICBzdGF0aWMgRGVidWdnZXJBY3RpdmF0aW9uKiBjcmVhdGUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU09iamVjdCogb2JqZWN0KQorICAgICAgICBzdGF0
aWMgRGVidWdnZXJBY3RpdmF0aW9uKiBjcmVhdGUoVk0mIHZtLCBKU09iamVjdCogb2JqZWN0KQog
ICAgICAgICB7Ci0gICAgICAgICAgICBEZWJ1Z2dlckFjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxEZWJ1Z2dlckFjdGl2YXRpb24+KGdsb2JhbERhdGEu
aGVhcCkpIERlYnVnZ2VyQWN0aXZhdGlvbihnbG9iYWxEYXRhKTsKLSAgICAgICAgICAgIGFjdGl2
YXRpb24tPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIG9iamVjdCk7CisgICAgICAgICAgICBE
ZWJ1Z2dlckFjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxEZWJ1Z2dlckFjdGl2YXRpb24+KHZtLmhlYXApKSBEZWJ1Z2dlckFjdGl2YXRpb24odm0pOwor
ICAgICAgICAgICAgYWN0aXZhdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0sIG9iamVjdCk7CiAgICAg
ICAgICAgICByZXR1cm4gYWN0aXZhdGlvbjsKICAgICAgICAgfQogCkBAIC01MywxOCArNTMsMTgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNfRVhQT1JUREFUQSBzdGF0aWMgY29uc3Qg
Q2xhc3NJbmZvIHNfaW5mbzsKIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKSAKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAKKyAgICAgICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7IAogICAgICAgICB9CiAKICAgICBwcm90
ZWN0ZWQ6CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBKU09i
amVjdDo6U3RydWN0dXJlRmxhZ3M7CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmLCBKU09iamVjdCogYWN0aXZhdGlvbik7CisgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU09iamVjdCog
YWN0aXZhdGlvbik7CiAKICAgICBwcml2YXRlOgotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBE
ZWJ1Z2dlckFjdGl2YXRpb24oSlNHbG9iYWxEYXRhJik7CisgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIERlYnVnZ2VyQWN0aXZhdGlvbihWTSYpOwogICAgICAgICBXcml0ZUJhcnJpZXI8SlNBY3Rp
dmF0aW9uPiBtX2FjdGl2YXRpb247CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAx
NDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJh
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCwxNyArOTAsMTcgQEAgSlNWYWx1ZSBEZWJ1Z2dl
ckNhbGxGcmFtZTo6ZXZhbHVhdGUoY29ucwogICAgIGlmICghbV9jYWxsRnJhbWUtPmNvZGVCbG9j
aygpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIAotICAgIEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSA9IG1fY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0gbV9j
YWxsRnJhbWUtPnZtKCk7CiAgICAgRXZhbEV4ZWN1dGFibGUqIGV2YWwgPSBFdmFsRXhlY3V0YWJs
ZTo6Y3JlYXRlKG1fY2FsbEZyYW1lLCBtYWtlU291cmNlKHNjcmlwdCksIG1fY2FsbEZyYW1lLT5j
b2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwotICAgIGlmIChnbG9iYWxEYXRhLmV4Y2VwdGlv
bikgewotICAgICAgICBleGNlcHRpb24gPSBnbG9iYWxEYXRhLmV4Y2VwdGlvbjsKLSAgICAgICAg
Z2xvYmFsRGF0YS5leGNlcHRpb24gPSBKU1ZhbHVlKCk7CisgICAgaWYgKHZtLmV4Y2VwdGlvbikg
eworICAgICAgICBleGNlcHRpb24gPSB2bS5leGNlcHRpb247CisgICAgICAgIHZtLmV4Y2VwdGlv
biA9IEpTVmFsdWUoKTsKICAgICB9CiAKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGdsb2JhbERhdGEu
aW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgbV9jYWxsRnJhbWUsIHRoaXNPYmplY3QoKSwgbV9j
YWxsRnJhbWUtPnNjb3BlKCkpOwotICAgIGlmIChnbG9iYWxEYXRhLmV4Y2VwdGlvbikgewotICAg
ICAgICBleGNlcHRpb24gPSBnbG9iYWxEYXRhLmV4Y2VwdGlvbjsKLSAgICAgICAgZ2xvYmFsRGF0
YS5leGNlcHRpb24gPSBKU1ZhbHVlKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB2bS5pbnRlcnBy
ZXRlci0+ZXhlY3V0ZShldmFsLCBtX2NhbGxGcmFtZSwgdGhpc09iamVjdCgpLCBtX2NhbGxGcmFt
ZS0+c2NvcGUoKSk7CisgICAgaWYgKHZtLmV4Y2VwdGlvbikgeworICAgICAgICBleGNlcHRpb24g
PSB2bS5leGNlcHRpb247CisgICAgICAgIHZtLmV4Y2VwdGlvbiA9IEpTVmFsdWUoKTsKICAgICB9
CiAgICAgQVNTRVJUKHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTQ4
NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDc2LDcgKzQ3Niw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZUVmZmVjdHModW5zaWcKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgTWFrZVJvcGU6IHsK
LSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaC5tX2dsb2JhbERhdGEuc3RyaW5nU3Ry
dWN0dXJlLmdldCgpKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaC5tX3ZtLnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAg
IApAQCAtNzIzLDQxICs3MjMsNDEgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0
cyh1bnNpZwogICAgIH0KIAogICAgIGNhc2UgVHlwZU9mOiB7Ci0gICAgICAgIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSA9IG1fY29kZUJsb2NrLT5nbG9iYWxEYXRhKCk7CisgICAgICAgIFZNKiB2
bSA9IG1fY29kZUJsb2NrLT52bSgpOwogICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgYWJzdHJhY3RD
aGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBpZiAoY2hpbGQpIHsKLSAg
ICAgICAgICAgIEpTVmFsdWUgdHlwZVN0cmluZyA9IGpzVHlwZVN0cmluZ0ZvclZhbHVlKCpnbG9i
YWxEYXRhLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLCBj
aGlsZCk7CisgICAgICAgICAgICBKU1ZhbHVlIHR5cGVTdHJpbmcgPSBqc1R5cGVTdHJpbmdGb3JW
YWx1ZSgqdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiks
IGNoaWxkKTsKICAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCB0eXBlU3RyaW5n
KSkgewogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVy
U3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBpZiAodHJ5
U2V0Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLm51bWJlclN0cmluZygp
KSkgeworICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGUsIHZtLT5zbWFsbFN0cmlu
Z3MubnVtYmVyU3RyaW5nKCkpKSB7CiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFu
dHMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UgaWYgKGlzU3RyaW5nU3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7
Ci0gICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+c21hbGxT
dHJpbmdzLnN0cmluZ1N0cmluZygpKSkgeworICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50
KG5vZGUsIHZtLT5zbWFsbFN0cmluZ3Muc3RyaW5nU3RyaW5nKCkpKSB7CiAgICAgICAgICAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwogICAgICAgICAg
ICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGlzRmluYWxPYmplY3RTcGVjdWxhdGlv
bihhYnN0cmFjdENoaWxkLm1fdHlwZSkgfHwgaXNBcnJheVNwZWN1bGF0aW9uKGFic3RyYWN0Q2hp
bGQubV90eXBlKSB8fCBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBl
KSkgewotICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGUsIGdsb2JhbERhdGEtPnNt
YWxsU3RyaW5ncy5vYmplY3RTdHJpbmcoKSkpIHsKKyAgICAgICAgICAgIGlmICh0cnlTZXRDb25z
dGFudChub2RlLCB2bS0+c21hbGxTdHJpbmdzLm9iamVjdFN0cmluZygpKSkgewogICAgICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjRmluYWxPYmplY3QgfCBT
cGVjQXJyYXkgfCBTcGVjQXJndW1lbnRzKTsKICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3Rh
bnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uU3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUp
KSB7Ci0gICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+c21h
bGxTdHJpbmdzLmZ1bmN0aW9uU3RyaW5nKCkpKSB7CisgICAgICAgICAgICBpZiAodHJ5U2V0Q29u
c3RhbnQobm9kZSwgdm0tPnNtYWxsU3RyaW5ncy5mdW5jdGlvblN0cmluZygpKSkgewogICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjRnVuY3Rpb24pOwog
ICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1
bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSkgewotICAgICAgICAgICAgaWYgKHRyeVNldENv
bnN0YW50KG5vZGUsIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5ib29sZWFuU3RyaW5nKCkpKSB7
CisgICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgdm0tPnNtYWxsU3RyaW5ncy5i
b29sZWFuU3RyaW5nKCkpKSB7CiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNCb29sZWFuKTsKICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRz
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTc3NSw3ICs3NzUsNyBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaC5tX2dsb2JhbERhdGEuc3RyaW5nU3RydWN0
dXJlLmdldCgpKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaC5tX3ZtLnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApA
QCAtODY3LDcgKzg2Nyw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5z
aWcKIAogICAgIGNhc2UgU3RyaW5nQ2hhckF0OgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLm1fZ2xvYmFsRGF0YS5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLm1f
dm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICBjYXNlIEdldEJ5VmFsOiB7CkBAIC04ODYsNyArODg2LDcgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtl
VG9wKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgot
ICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaC5tX2dsb2JhbERhdGEuc3RyaW5n
U3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgu
bV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRv
cCgpOwpAQCAtMTA1Miw3ICsxMDUyLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZm
ZWN0cyh1bnNpZwogICAgICAgICAvLyBpZiAoZGVzdGluYXRpb24ubV90eXBlICYgIShTcGVjTnVt
YmVyIHwgU3BlY1N0cmluZyB8IFNwZWNCb29sZWFuKSkgewogICAgICAgICAvLyAgICAgZGVzdGlu
YXRpb24uZmlsdGVyKFNwZWNOdW1iZXIgfCBTcGVjU3RyaW5nIHwgU3BlY0Jvb2xlYW4pOwogICAg
ICAgICAvLyAgICAgQWJzdHJhY3RWYWx1ZSBzdHJpbmc7Ci0gICAgICAgIC8vICAgICBzdHJpbmcu
c2V0KGdsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZSk7CisgICAgICAgIC8vICAgICBzdHJpbmcu
c2V0KHZtLT5zdHJpbmdTdHJ1Y3R1cmUpOwogICAgICAgICAvLyAgICAgZGVzdGluYXRpb24ubWVy
Z2Uoc3RyaW5nKTsKICAgICAgICAgLy8gfQogICAgICAgICAvLwpAQCAtMTA5Nyw3ICsxMDk3LDcg
QEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZwogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgubV9nbG9iYWxEYXRhLnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgubV92
bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IApAQCAtMTI3MCw3ICsxMjcwLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0
cyh1bnNpZwogICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnBy
ZWRpY3Rpb24oKSkpIHsKICAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgewogICAgICAgICAg
ICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigK
LSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2dsb2JhbERhdGEsIHN0cnVjdHVyZSwKKyAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZtLCBzdHJ1Y3R1cmUsCiAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgubV9jb2RlQmxvY2stPmlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51
bWJlcigpKSk7CiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZSgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIC8vIEFzc2VydCB0aGluZ3MgdGhhdCB3ZSBjYW4ndCBoYW5kbGUgYW5k
IHRoYXQgdGhlIGNvbXB1dGVGb3IoKSBtZXRob2QKQEAgLTE0NzAsNyArMTQ3MCw3IEBAIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdCh0cnVlKTsKICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CiAgICAgICAgICAgICBQdXRC
eUlkU3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAg
ICAgICAgbV9ncmFwaC5tX2dsb2JhbERhdGEsCisgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3Zt
LAogICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmln
aW4pLAogICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwKICAgICAgICAgICAgICAgICBtX2dyYXBo
Lm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSksCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgJKHJl
dmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlI
ZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJERkdG
UFJJbmZvLmgiCiAjaW5jbHVkZSAiREZHR1BSSW5mby5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIK
LSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTQz
LDggKzQzLDggQEAgdHlwZWRlZiB2b2lkICgqVl9ERkdEZWJ1Z09wZXJhdGlvbl9FUFApKAogCiBj
bGFzcyBBc3NlbWJseUhlbHBlcnMgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXIgewogcHVibGljOgot
ICAgIEFzc2VtYmx5SGVscGVycyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayog
Y29kZUJsb2NrKQotICAgICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorICAgIEFzc2Vt
Ymx5SGVscGVycyhWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgICAgICA6IG1fdm0o
dm0pCiAgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICAgICAsIG1fYmFzZWxp
bmVDb2RlQmxvY2soY29kZUJsb2NrID8gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSA6IDAp
CiAgICAgewpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIENvZGVC
bG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KLSAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEoKSB7IHJldHVybiBtX2dsb2JhbERhdGE7IH0KKyAgICBWTSogdm0oKSB7
IHJldHVybiBtX3ZtOyB9CiAgICAgQXNzZW1ibGVyVHlwZV9UJiBhc3NlbWJsZXIoKSB7IHJldHVy
biBtX2Fzc2VtYmxlcjsgfQogICAgIAogI2lmIENQVShYODZfNjQpIHx8IENQVShYODYpCkBAIC0x
OTAsNyArMTkwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZGVidWdDYWxsKFZfREZHRGVidWdPcGVy
YXRpb25fRVBQIGZ1bmN0aW9uLCB2b2lkKiBhcmd1bWVudCkKICAgICB7CiAgICAgICAgIHNpemVf
dCBzY3JhdGNoU2l6ZSA9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiAoR1BSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyk7Ci0gICAgICAgIFNjcmF0
Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBtX2dsb2JhbERhdGEtPnNjcmF0Y2hCdWZmZXJGb3JT
aXplKHNjcmF0Y2hTaXplKTsKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9
IG1fdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKICAgICAgICAgRW5jb2Rl
ZEpTVmFsdWUqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1
ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewpAQCAtMjkyLDkgKzI5Miw5IEBAIHB1
YmxpYzoKICAgICBKdW1wIGVtaXRFeGNlcHRpb25DaGVjayhFeGNlcHRpb25DaGVja0tpbmQga2lu
ZCA9IE5vcm1hbEV4Y2VwdGlvbkNoZWNrKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
ICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBO
b25aZXJvIDogWmVybywgQWJzb2x1dGVBZGRyZXNzKCZnbG9iYWxEYXRhKCktPmV4Y2VwdGlvbikp
OworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hl
Y2sgPyBOb25aZXJvIDogWmVybywgQWJzb2x1dGVBZGRyZXNzKCZ2bSgpLT5leGNlcHRpb24pKTsK
ICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHJldHVybiBicmFuY2gzMihraW5kID09
IE5vcm1hbEV4Y2VwdGlvbkNoZWNrID8gTm90RXF1YWwgOiBFcXVhbCwgQWJzb2x1dGVBZGRyZXNz
KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZnbG9iYWxEYXRhKCktPmV4Y2VwdGlvbikgKyBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpFbXB0eVZhbHVlVGFnKSk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihraW5kID09IE5vcm1h
bEV4Y2VwdGlvbkNoZWNrID8gTm90RXF1YWwgOiBFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZ2bSgpLT5leGNlcHRpb24pICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRh
ZykpOwogI2VuZGlmCiAgICAgfQogCkBAIC0zODEsNyArMzgxLDcgQEAgcHVibGljOgogICAgIFZl
Y3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcEZvcihDb2RlQmxv
Y2sqKTsKICAgICAKIHByb3RlY3RlZDoKLSAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsK
KyAgICBWTSogbV92bTsKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIENvZGVCbG9j
ayogbV9iYXNlbGluZUNvZGVCbG9jazsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjIsNyArMTIyLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogY2xh
c3MgQnl0ZUNvZGVQYXJzZXIgewogcHVibGljOgogICAgIEJ5dGVDb2RlUGFyc2VyKEdyYXBoJiBn
cmFwaCkKLSAgICAgICAgOiBtX2dsb2JhbERhdGEoJmdyYXBoLm1fZ2xvYmFsRGF0YSkKKyAgICAg
ICAgOiBtX3ZtKCZncmFwaC5tX3ZtKQogICAgICAgICAsIG1fY29kZUJsb2NrKGdyYXBoLm1fY29k
ZUJsb2NrKQogICAgICAgICAsIG1fcHJvZmlsZWRCbG9jayhncmFwaC5tX3Byb2ZpbGVkQmxvY2sp
CiAgICAgICAgICwgbV9ncmFwaChncmFwaCkKQEAgLTk0Miw3ICs5NDIsNyBAQCBwcml2YXRlOgog
ICAgIAogICAgIHZvaWQgYnVpbGRPcGVyYW5kTWFwc0lmTmVjZXNzYXJ5KCk7CiAgICAgCi0gICAg
SlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CisgICAgVk0qIG1fdm07CiAgICAgQ29kZUJsb2Nr
KiBtX2NvZGVCbG9jazsKICAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKICAgICBHcmFw
aCYgbV9ncmFwaDsKQEAgLTE2MzUsNyArMTYzNSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUNvbnN0YW50SW50ZXIKICAgICAgICAgTm9kZSogcmVzdWx0OwogICAgICAgICAKICAgICAg
ICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDw9IDEpCi0gICAgICAgICAgICByZXN1
bHQgPSBjZWxsQ29uc3RhbnQobV9nbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuZW1wdHlTdHJpbmco
KSk7CisgICAgICAgICAgICByZXN1bHQgPSBjZWxsQ29uc3RhbnQobV92bS0+c21hbGxTdHJpbmdz
LmVtcHR5U3RyaW5nKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHQgPSBhZGRU
b0dyYXBoKFRvU3RyaW5nLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgx
KSkpOwogICAgICAgICAKQEAgLTE5MjQsNyArMTkyNCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKIHsKICAgICBib29sIHNob3VsZENvbnRpbnVlUGFyc2luZyA9
IHRydWU7CiAKLSAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX2dsb2JhbERhdGEtPmlu
dGVycHJldGVyOworICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IG1fdm0tPmludGVycHJl
dGVyOwogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IG1faW5saW5lU3RhY2tU
b3AtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwogICAgIHVuc2lnbmVkIGJs
b2NrQmVnaW4gPSBtX2N1cnJlbnRJbmRleDsKICAgICAKQEAgLTE5NzQsNyArMTk3NCw3IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgCiAgICAgICAg
IGlmIChtX2dyYXBoLm1fY29tcGlsYXRpb24gJiYgb3Bjb2RlSUQgIT0gb3BfY2FsbF9wdXRfcmVz
dWx0KSB7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKENvdW50RXhlY3V0aW9uLCBPcEluZm8obV9n
cmFwaC5tX2NvbXBpbGF0aW9uLT5leGVjdXRpb25Db3VudGVyRm9yKAotICAgICAgICAgICAgICAg
IFByb2ZpbGVyOjpPcmlnaW5TdGFjaygqbV9nbG9iYWxEYXRhLT5tX3BlckJ5dGVjb2RlUHJvZmls
ZXIsIG1fY29kZUJsb2NrLCBjdXJyZW50Q29kZU9yaWdpbigpKSkpKTsKKyAgICAgICAgICAgICAg
ICBQcm9maWxlcjo6T3JpZ2luU3RhY2soKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9j
b2RlQmxvY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCkpKSkpOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CkBAIC0zNDc5LDEwICszNDc5LDEwIEBAIEJ5dGVD
b2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICAgICAgQVNTRVJUKGNhbGxz
aXRlQmxvY2tIZWFkICE9IE5vQmxvY2spOwogICAgICAgICAKICAgICAgICAgSW5saW5lQ2FsbEZy
YW1lIGlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgaW5saW5lQ2FsbEZyYW1lLmV4ZWN1dGFibGUu
c2V0KCpieXRlQ29kZVBhcnNlci0+bV9nbG9iYWxEYXRhLCBieXRlQ29kZVBhcnNlci0+bV9jb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKTsK
KyAgICAgICAgaW5saW5lQ2FsbEZyYW1lLmV4ZWN1dGFibGUuc2V0KCpieXRlQ29kZVBhcnNlci0+
bV92bSwgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSk7CiAgICAgICAgIGlubGluZUNhbGxGcmFtZS5zdGFj
a09mZnNldCA9IGlubGluZUNhbGxGcmFtZVN0YXJ0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZTsKICAgICAgICAgaWYgKGNhbGxlZSkKLSAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS5j
YWxsZWUuc2V0KCpieXRlQ29kZVBhcnNlci0+bV9nbG9iYWxEYXRhLCBieXRlQ29kZVBhcnNlci0+
bV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOworICAgICAgICAgICAgaW5s
aW5lQ2FsbEZyYW1lLmNhbGxlZS5zZXQoKmJ5dGVDb2RlUGFyc2VyLT5tX3ZtLCBieXRlQ29kZVBh
cnNlci0+bV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwogICAgICAgICBp
bmxpbmVDYWxsRnJhbWUuY2FsbGVyID0gYnl0ZUNvZGVQYXJzZXItPmN1cnJlbnRDb2RlT3JpZ2lu
KCk7CiAgICAgICAgIGlubGluZUNhbGxGcmFtZS5hcmd1bWVudHMucmVzaXplKGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKTsgLy8gU2V0IHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGluY2x1ZGlu
ZyB0aGlzLCBidXQgZG9uJ3QgY29uZmlndXJlIHRoZSB2YWx1ZSByZWNvdmVyaWVzLCB5ZXQuCiAg
ICAgICAgIGlubGluZUNhbGxGcmFtZS5pc0NhbGwgPSBpc0NhbGwoa2luZCk7CkBAIC0zNTI0LDcg
KzM1MjQsNyBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAg
ICAgICAgICBTdHJpbmdJbXBsKiByZXAgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoaSkuaW1wbCgp
OwogICAgICAgICAgICAgSWRlbnRpZmllck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGJ5dGVDb2Rl
UGFyc2VyLT5tX2lkZW50aWZpZXJNYXAuYWRkKHJlcCwgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJs
b2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCkpOwogICAgICAgICAgICAgaWYgKHJlc3VsdC5pc05l
d0VudHJ5KQotICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+YWRk
SWRlbnRpZmllcihJZGVudGlmaWVyKGJ5dGVDb2RlUGFyc2VyLT5tX2dsb2JhbERhdGEsIHJlcCkp
OworICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+YWRkSWRlbnRp
ZmllcihJZGVudGlmaWVyKGJ5dGVDb2RlUGFyc2VyLT5tX3ZtLCByZXApKTsKICAgICAgICAgICAg
IG1faWRlbnRpZmllclJlbWFwW2ldID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAg
fQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZDb25z
dGFudFJlZ2lzdGVycygpOyArK2kpIHsKQEAgLTM1OTQsNyArMzU5NCw3IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkKICAgICAKICAgICBpZiAobV9ncmFwaC5tX2NvbXBp
bGF0aW9uKSB7CiAgICAgICAgIG1fZ3JhcGgubV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRl
Y29kZXMoCi0gICAgICAgICAgICAqbV9nbG9iYWxEYXRhLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIs
IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jayk7CisgICAgICAgICAgICAqbV92bS0+
bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2sp
OwogICAgIH0KICAgICAKICAgICBib29sIHNob3VsZER1bXBCeXRlY29kZSA9IE9wdGlvbnM6OmR1
bXBCeXRlY29kZUF0REZHVGltZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3
ICszMyw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgSlNH
bG9iYWxEYXRhOworY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBERkcgewogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDE0ODY1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDggKzM3LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
CiBjbGFzcyBDQ2FsbEhlbHBlcnMgOiBwdWJsaWMgQXNzZW1ibHlIZWxwZXJzIHsKIHB1YmxpYzoK
LSAgICBDQ2FsbEhlbHBlcnMoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IDApCi0gICAgICAgIDogQXNzZW1ibHlIZWxwZXJzKGdsb2JhbERhdGEsIGNvZGVC
bG9jaykKKyAgICBDQ2FsbEhlbHBlcnMoVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDAp
CisgICAgICAgIDogQXNzZW1ibHlIZWxwZXJzKHZtLCBjb2RlQmxvY2spCiAgICAgewogICAgIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNw
cAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBh
YmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBkZWJ1Z0ZhaWwoQ29kZUJsb2NrKiAKIHRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5
cGUsIFJldHVyblR5cGUgKCpjYW5IYW5kbGVPcGNvZGUpKE9wY29kZUlELCBDb2RlQmxvY2sqLCBJ
bnN0cnVjdGlvbiopPgogUmV0dXJuVHlwZSBjYW5IYW5kbGVPcGNvZGVzKENvZGVCbG9jayogY29k
ZUJsb2NrLCBSZXR1cm5UeXBlIGluaXRpYWxWYWx1ZSkKIHsKLSAgICBJbnRlcnByZXRlciogaW50
ZXJwcmV0ZXIgPSBjb2RlQmxvY2stPmdsb2JhbERhdGEoKS0+aW50ZXJwcmV0ZXI7CisgICAgSW50
ZXJwcmV0ZXIqIGludGVycHJldGVyID0gY29kZUJsb2NrLT52bSgpLT5pbnRlcnByZXRlcjsKICAg
ICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBjb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLmJlZ2luKCk7CiAgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IGNvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwogICAgIFJldHVyblR5cGUgcmVzdWx0ID0gaW5pdGlhbFZh
bHVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25z
dGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTUsNyArMTU1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBib29sIG5lZWRzQ2Vs
bENoZWNrID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3R5cGUgJiB+U3BlY0NlbGw7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBHZXRC
eUlkU3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICBnbG9iYWxEYXRhKCks
IHN0cnVjdHVyZSwgY29kZUJsb2NrKCktPmlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpOwor
ICAgICAgICAgICAgICAgICAgICB2bSgpLCBzdHJ1Y3R1cmUsIGNvZGVCbG9jaygpLT5pZGVudGlm
aWVyKGlkZW50aWZpZXJOdW1iZXIpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAoIXN0YXR1cy5pc1NpbXBsZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSBjb3VsZCBoYW5kbGUgcHJvdG90eXBlIGNhc2VzLgpAQCAtMjIwLDcgKzIyMCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgYm9vbCBuZWVkc0NlbGxDaGVjayA9IG1fc3RhdGUuZm9y
Tm9kZShjaGlsZCkubV90eXBlICYgflNwZWNDZWxsOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
cigKLSAgICAgICAgICAgICAgICAgICAgZ2xvYmFsRGF0YSgpLAorICAgICAgICAgICAgICAgICAg
ICB2bSgpLAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2Rl
T3JpZ2luKSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLAogICAgICAgICAgICAgICAg
ICAgICBjb2RlQmxvY2soKS0+aWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKSwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9u
IDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCB2b2lkIERpc2Fzc2VtYmxlcjo6cmVw
b3J0VG9Qcm9maWxlcihQcm9mCiAgICAgICAgIFByb2ZpbGVyOjpPcmlnaW5TdGFjayBzdGFjazsK
ICAgICAgICAgCiAgICAgICAgIGlmIChvcHNbaV0uY29kZU9yaWdpbi5pc1NldCgpKQotICAgICAg
ICAgICAgc3RhY2sgPSBQcm9maWxlcjo6T3JpZ2luU3RhY2soKm1fZ3JhcGgubV9nbG9iYWxEYXRh
Lm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9ncmFwaC5tX2NvZGVCbG9jaywgb3BzW2ldLmNvZGVP
cmlnaW4pOworICAgICAgICAgICAgc3RhY2sgPSBQcm9maWxlcjo6T3JpZ2luU3RhY2soKm1fZ3Jh
cGgubV92bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fZ3JhcGgubV9jb2RlQmxvY2ssIG9wc1tp
XS5jb2RlT3JpZ2luKTsKICAgICAgICAgCiAgICAgICAgIGNvbXBpbGF0aW9uLT5hZGREZXNjcmlw
dGlvbihQcm9maWxlcjo6Q29tcGlsZWRCeXRlY29kZShzdGFjaywgb3BzW2ldLnRleHQpKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lv
biAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMsNyBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBp
bGVNb2RlIGNvbXBpbGVNCiAgICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0gZXhlYy0+
dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7CiAgICAgfQogICAgIAotICAgIEdyYXBoIGRm
ZyhleGVjLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jaywgb3NyRW50cnlCeXRlY29kZUluZGV4LCBt
dXN0SGFuZGxlVmFsdWVzKTsKKyAgICBHcmFwaCBkZmcoZXhlYy0+dm0oKSwgY29kZUJsb2NrLCBv
c3JFbnRyeUJ5dGVjb2RlSW5kZXgsIG11c3RIYW5kbGVWYWx1ZXMpOwogICAgIGlmICghcGFyc2Uo
ZXhlYywgZGZnKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBKSVRDb2RlOwot
Y2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI7CiAKIG5hbWVzcGFjZSBERkcgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzUsNyArNjc1
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNldFVzZUtpbmRBbmRVbmJveElmUHJvZml0YWJs
ZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBpZiAoIWlzSW50MzJTcGVj
dWxhdGlvbihub2RlLT5wcmVkaWN0aW9uKCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT5pZGVudGlmaWVyKG5vZGUtPmlkZW50aWZpZXJOdW1i
ZXIoKSkgIT0gZ2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkKKyAgICAgICAgICAg
IGlmIChjb2RlQmxvY2soKS0+aWRlbnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpICE9
IHZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAKICAgICAgICAgICAgICAgICBt
X2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5nZXRBcnJheVBy
b2ZpbGUoCkBAIC0xMDQ2LDcgKzEwNDYsNyBAQCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBh
dHRyaWJ1dGVzVW51c2VkOwogICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7CiAgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZS0+Z2V0KAot
ICAgICAgICAgICAgZ2xvYmFsRGF0YSgpLCBpZGVudCwgYXR0cmlidXRlc1VudXNlZCwgc3BlY2lm
aWNWYWx1ZSk7CisgICAgICAgICAgICB2bSgpLCBpZGVudCwgYXR0cmlidXRlc1VudXNlZCwgc3Bl
Y2lmaWNWYWx1ZSk7CiAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKQEAgLTEwODUsOSArMTA4NSw5IEBAIHByaXZh
dGU6CiAgICAgICAgIC8vICh0aGF0IHdvdWxkIGNhbGwgdG9TdHJpbmcoKSkuIFdlIGRvbid0IHdh
bnQgdGhlIERGRyB0byBoYXZlIHRvIGRpc3Rpbmd1aXNoCiAgICAgICAgIC8vIGJldHdlZW4gdGhl
IHR3bywganVzdCBiZWNhdXNlIHRoYXQgc2VlbXMgbGlrZSBpdCB3b3VsZCBnZXQgY29uZnVzaW5n
LiBTbyB3ZQogICAgICAgICAvLyBqdXN0IHJlcXVpcmUgYm90aCBtZXRob2RzIHRvIGJlIHNhbmUu
Ci0gICAgICAgIGlmICghaXNTdHJpbmdQcm90b3R5cGVNZXRob2RTYW5lKHN0cmluZ1Byb3RvdHlw
ZVN0cnVjdHVyZSwgZ2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YpKQorICAgICAg
ICBpZiAoIWlzU3RyaW5nUHJvdG90eXBlTWV0aG9kU2FuZShzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1
cmUsIHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWVPZikpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGlmICghaXNTdHJpbmdQcm90b3R5cGVNZXRob2RTYW5lKHN0cmluZ1Byb3Rv
dHlwZVN0cnVjdHVyZSwgZ2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nKSkKKyAg
ICAgICAgaWYgKCFpc1N0cmluZ1Byb3RvdHlwZU1ldGhvZFNhbmUoc3RyaW5nUHJvdG90eXBlU3Ry
dWN0dXJlLCB2bSgpLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxMiAr
NDQsMTIgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGRmZ09wTmFtZXNbXSA9IHsKICN1bmRlZiBTVFJJ
TkdJWkVfREZHX09QX0VOVU0KIH07CiAKLUdyYXBoOjpHcmFwaChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5k
ZXgsIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKQotICAgIDogbV9n
bG9iYWxEYXRhKGdsb2JhbERhdGEpCitHcmFwaDo6R3JhcGgoVk0mIHZtLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxK
U1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcykKKyAgICA6IG1fdm0odm0pCiAgICAgLCBtX2NvZGVC
bG9jayhjb2RlQmxvY2spCi0gICAgLCBtX2NvbXBpbGF0aW9uKGdsb2JhbERhdGEubV9wZXJCeXRl
Y29kZVByb2ZpbGVyID8gZ2xvYmFsRGF0YS5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPm5ld0NvbXBp
bGF0aW9uKGNvZGVCbG9jaywgUHJvZmlsZXI6OkRGRykgOiAwKQorICAgICwgbV9jb21waWxhdGlv
bih2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgPyB2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPm5l
d0NvbXBpbGF0aW9uKGNvZGVCbG9jaywgUHJvZmlsZXI6OkRGRykgOiAwKQogICAgICwgbV9wcm9m
aWxlZEJsb2NrKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkKLSAgICAsIG1fYWxsb2NhdG9yKGds
b2JhbERhdGEubV9kZmdTdGF0ZS0+bV9hbGxvY2F0b3IpCisgICAgLCBtX2FsbG9jYXRvcih2bS5t
X2RmZ1N0YXRlLT5tX2FsbG9jYXRvcikKICAgICAsIG1faGFzQXJndW1lbnRzKGZhbHNlKQogICAg
ICwgbV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXgob3NyRW50cnlCeXRlY29kZUluZGV4KQogICAgICwg
bV9tdXN0SGFuZGxlVmFsdWVzKG11c3RIYW5kbGVWYWx1ZXMpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgZW51
bSBBZGRTcGVjdWxhdGlvbk1vZGUgewogLy8gTm9kZXMgdGhhdCBhcmUgJ2RlYWQnIHJlbWFpbiBp
biB0aGUgdmVjdG9yIHdpdGggcmVmQ291bnQgMC4KIGNsYXNzIEdyYXBoIHsKIHB1YmxpYzoKLSAg
ICBHcmFwaChKU0dsb2JhbERhdGEmLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVj
b2RlSW5kZXgsIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKTsKKyAg
ICBHcmFwaChWTSYsIENvZGVCbG9jayosIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwg
Y29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMpOwogICAgIH5HcmFwaCgp
OwogICAgIAogICAgIHZvaWQgY2hhbmdlQ2hpbGQoRWRnZSYgZWRnZSwgTm9kZSogbmV3Tm9kZSkK
QEAgLTY4Nyw3ICs2ODcsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAg
SlNHbG9iYWxEYXRhJiBtX2dsb2JhbERhdGE7CisgICAgVk0mIG1fdm07CiAgICAgQ29kZUJsb2Nr
KiBtX2NvZGVCbG9jazsKICAgICBSZWZQdHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBtX2NvbXBp
bGF0aW9uOwogICAgIENvZGVCbG9jayogbV9wcm9maWxlZEJsb2NrOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE0ODY1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiwxNyArMzYsMTcgQEAKICNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5o
IgogI2luY2x1ZGUgIkRGR1RodW5rcy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgi
Ci0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJM
aW5rQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogSklUQ29t
cGlsZXI6OkpJVENvbXBpbGVyKEdyYXBoJiBkZmcpCi0gICAgOiBDQ2FsbEhlbHBlcnMoJmRmZy5t
X2dsb2JhbERhdGEsIGRmZy5tX2NvZGVCbG9jaykKKyAgICA6IENDYWxsSGVscGVycygmZGZnLm1f
dm0sIGRmZy5tX2NvZGVCbG9jaykKICAgICAsIG1fZ3JhcGgoZGZnKQogICAgICwgbV9jdXJyZW50
Q29kZU9yaWdpbkluZGV4KDApCiB7Ci0gICAgaWYgKHNob3VsZFNob3dEaXNhc3NlbWJseSgpIHx8
IG1fZ3JhcGgubV9nbG9iYWxEYXRhLm1fcGVyQnl0ZWNvZGVQcm9maWxlcikKKyAgICBpZiAoc2hv
dWxkU2hvd0Rpc2Fzc2VtYmx5KCkgfHwgbV9ncmFwaC5tX3ZtLm1fcGVyQnl0ZWNvZGVQcm9maWxl
cikKICAgICAgICAgbV9kaXNhc3NlbWJsZXIgPSBhZG9wdFB0cihuZXcgRGlzYXNzZW1ibGVyKGRm
ZykpOwogfQogCkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0
cygpCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvZGVCbG9jaygpLT53YXRjaHBvaW50KGV4
aXQubV93YXRjaHBvaW50SW5kZXgpLnNldERlc3RpbmF0aW9uKGxhYmVsKCkpOwogICAgICAgICBq
aXRBc3NlcnRIYXNWYWxpZENhbGxGcmFtZSgpOwotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0z
MihpKSwgJmdsb2JhbERhdGEoKS0+b3NyRXhpdEluZGV4KTsKKyAgICAgICAgc3RvcmUzMihUcnVz
dGVkSW1tMzIoaSksICZ2bSgpLT5vc3JFeGl0SW5kZXgpOwogICAgICAgICBleGl0LnNldFBhdGNo
YWJsZUNvZGVPZmZzZXQocGF0Y2hhYmxlSnVtcCgpKTsKICAgICB9CiB9CkBAIC0yMDYsMTQgKzIw
NiwxNCBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAg
IGluZm8uY2FsbFR5cGUgPSBtX2pzQ2FsbHNbaV0ubV9jYWxsVHlwZTsKICAgICAgICAgaW5mby5p
c0RGRyA9IHRydWU7CiAgICAgICAgIGluZm8uY29kZU9yaWdpbiA9IG1fanNDYWxsc1tpXS5tX2Nv
ZGVPcmlnaW47Ci0gICAgICAgIGxpbmtCdWZmZXIubGluayhtX2pzQ2FsbHNbaV0ubV9zbG93Q2Fs
bCwgRnVuY3Rpb25QdHIoKG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1YihpbmZvLmNhbGxUeXBlID09
IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0ID8gbGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yIDog
bGlua0NhbGxUaHVua0dlbmVyYXRvcikpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Cisg
ICAgICAgIGxpbmtCdWZmZXIubGluayhtX2pzQ2FsbHNbaV0ubV9zbG93Q2FsbCwgRnVuY3Rpb25Q
dHIoKG1fdm0tPmdldENUSVN0dWIoaW5mby5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNvbnN0
cnVjdCA/IGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvciA6IGxpbmtDYWxsVGh1bmtHZW5lcmF0
b3IpKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogICAgICAgICBpbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fanNDYWxsc1tpXS5t
X3Nsb3dDYWxsKTsKICAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YobV9qc0NhbGxzW2ldLm1fdGFyZ2V0VG9DaGVjayk7CiAgICAgICAgIGluZm8uaG90UGF0
aE90aGVyID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9qc0NhbGxzW2ldLm1fZmFz
dENhbGwpOwogICAgICAgICBpbmZvLmNhbGxlZUdQUiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPiht
X2pzQ2FsbHNbaV0ubV9jYWxsZWUpOwogICAgIH0KICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgb3NyRXhpdFRodW5rID0gZ2xvYmFsRGF0YSgpLT5nZXRDVElTdHViKG9zckV4aXRHZW5l
cmF0aW9uVGh1bmtHZW5lcmF0b3IpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0
VGh1bmsgPSB2bSgpLT5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3Ip
OwogICAgIENvZGVMb2NhdGlvbkxhYmVsIHRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsKG9zckV4
aXRUaHVuay5jb2RlKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2RlQmxvY2so
KS0+bnVtYmVyT2ZPU1JFeGl0cygpOyArK2kpIHsKICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IGNv
ZGVCbG9jaygpLT5vc3JFeGl0KGkpOwpAQCAtMjYwLDcgKzI2MCw3IEBAIGJvb2wgSklUQ29tcGls
ZXI6OmNvbXBpbGUoSklUQ29kZSYgZW50cnkKICAgICBzcGVjdWxhdGl2ZS5jcmVhdGVPU1JFbnRy
aWVzKCk7CiAgICAgc2V0RW5kT2ZDb2RlKCk7CiAKLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIo
Km1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7
CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jaywgSklU
Q29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgbGluayhsaW5rQnVmZmVyKTsKQEAgLTI5
Miw3ICsyOTIsNyBAQCBib29sIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oSklUQ29kCiAg
ICAgLy8gUGxhbnQgYSBjaGVjayB0aGF0IHN1ZmZpY2llbnQgc3BhY2UgaXMgYXZhaWxhYmxlIGlu
IHRoZSBKU1N0YWNrLgogICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTYyOTEKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5t
X251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDEpOwotICAgIEp1bXAgc3RhY2tDaGVjayA9IGJyYW5j
aFB0cihCZWxvdywgQWJzb2x1dGVBZGRyZXNzKG1fZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPnN0
YWNrKCkuYWRkcmVzc09mRW5kKCkpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgSnVtcCBzdGFja0No
ZWNrID0gYnJhbmNoUHRyKEJlbG93LCBBYnNvbHV0ZUFkZHJlc3MobV92bS0+aW50ZXJwcmV0ZXIt
PnN0YWNrKCkuYWRkcmVzc09mRW5kKCkpLCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgLy8gUmV0dXJu
IGhlcmUgYWZ0ZXIgc3RhY2sgY2hlY2suCiAgICAgTGFiZWwgZnJvbVN0YWNrQ2hlY2sgPSBsYWJl
bCgpOwogCkBAIC0zNDksNyArMzQ5LDcgQEAgYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0
aW9uKEpJVENvZAogICAgIHNldEVuZE9mQ29kZSgpOwogCiAgICAgLy8gPT09IExpbmsgPT09Ci0g
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2Nr
LCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV92
bSwgdGhpcywgbV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKGxp
bmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGxpbmsobGlua0J1ZmZlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEFic3RyYWN0U2FtcGxpbmdDb3VudGVyOwogY2xhc3MgQ29k
ZUJsb2NrOwotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBERkcg
ewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2
aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5
KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIGRhdGFMb2coIk9TUiBpbiAiLCAqY29kZUJsb2NrLT5h
bHRlcm5hdGl2ZSgpLCAiIC0+ICIsICpjb2RlQmxvY2ssICIgZnJvbSBiYyMiLCBieXRlY29kZUlu
ZGV4LCAiXG4iKTsKICNlbmRpZgogICAgIAotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9
ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgT1NS
RW50cnlEYXRhKiBlbnRyeSA9IGNvZGVCbG9jay0+ZGZnT1NSRW50cnlEYXRhRm9yQnl0ZWNvZGVJ
bmRleChieXRlY29kZUluZGV4KTsKICAgICAKICAgICBpZiAoIWVudHJ5KSB7CkBAIC0xMzMsNyAr
MTMzLDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIC8v
ICAgIGl0IHNlZW1zIHNpbGx5OiB5b3UnZCBiZSBkaXZlcnRpbmcgdGhlIHByb2dyYW0gdG8gZXJy
b3IgaGFuZGxpbmcgd2hlbiBpdAogICAgIC8vICAgIHdvdWxkIGhhdmUgb3RoZXJ3aXNlIGp1c3Qg
a2VwdCBydW5uaW5nIGFsYmVpdCBsZXNzIHF1aWNrbHkuCiAgICAgCi0gICAgaWYgKCFnbG9iYWxE
YXRhLT5pbnRlcnByZXRlci0+c3RhY2soKS5ncm93KCZleGVjLT5yZWdpc3RlcnMoKVtjb2RlQmxv
Y2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzXSkpIHsKKyAgICBpZiAoIXZtLT5pbnRlcnByZXRlci0+
c3RhY2soKS5ncm93KCZleGVjLT5yZWdpc3RlcnMoKVtjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVn
aXN0ZXJzXSkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgICAgICBkYXRhTG9n
RigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBzdGFjayBncm93dGggZmFpbGVkLlxuIik7CiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyMzJfNjQuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjY0LDcgKzI2NCw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAK
ICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgc2NyYXRjaEJ1ZmZlckxlbmd0aEJlZm9yZVVJbnQz
MnMgPSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyArICgobnVtYmVyT2ZEaXNwbGFj
ZWRWaXJ0dWFsUmVnaXN0ZXJzICogMikgPD0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPyAw
IDogbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKLSAgICBTY3JhdGNoQnVmZmVy
KiBzY3JhdGNoQnVmZmVyID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6
ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKHNjcmF0Y2hCdWZmZXJMZW5ndGhCZWZvcmVVSW50
MzJzICsgKGhhdmVVSW50MzJzID8gMiA6IDApKSk7CisgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRj
aEJ1ZmZlciA9IG1faml0LnZtKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkgKiAoc2NyYXRjaEJ1ZmZlckxlbmd0aEJlZm9yZVVJbnQzMnMgKyAoaGF2ZVVJbnQz
MnMgPyAyIDogMCkpKTsKICAgICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRjaERhdGFCdWZmZXIgPSBz
Y3JhdGNoQnVmZmVyID8gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVy
LT5kYXRhQnVmZmVyKCkpIDogMDsKIAogICAgIC8vIEZyb20gaGVyZSBvbiwgdGhlIGNvZGUgYXNz
dW1lcyB0aGF0IGl0IGlzIHByb2ZpdGFibGUgdG8gbWF4aW1pemUgdGhlIGRpc3RhbmNlCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0
LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXI2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MCw3ICsyNjAsNyBAQCB2
b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgZGF0YUxvZ0YoIiAi
KTsKICNlbmRpZgogICAgIAotICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBtX2pp
dC5nbG9iYWxEYXRhKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkgKiBzdGQ6Om1heChoYXZlVUludDMycyA/IDJ1IDogMHUsIG51bWJlck9mUG9pc29uZWRWaXJ0
dWFsUmVnaXN0ZXJzICsgKG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyA8PSBHUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVycyA/IDAgOiBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdp
c3RlcnMpKSk7CisgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1faml0LnZtKCkt
PnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBzdGQ6Om1heCho
YXZlVUludDMycyA/IDJ1IDogMHUsIG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzICsg
KG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyA8PSBHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVycyA/IDAgOiBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpKSk7CiAgICAg
RW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2hEYXRhQnVmZmVyID0gc2NyYXRjaEJ1ZmZlciA/IHN0YXRp
Y19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IDA7
CiAKICAgICAvLyBGcm9tIGhlcmUgb24sIHRoZSBjb2RlIGFzc3VtZXMgdGhhdCBpdCBpcyBwcm9m
aXRhYmxlIHRvIG1heGltaXplIHRoZSBkaXN0YW5jZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTQ4NjU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCw5ICs0OCw5IEBAIHZvaWQgY29tcGlsZU9TUkV4aXQoRXhlY1N0YXRl
KiBleGVjKQogICAgIEFTU0VSVChjb2RlQmxvY2spOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmdl
dEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOwogICAgIAotICAgIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CiAgICAgCi0gICAgdWludDMyX3QgZXhpdEluZGV4ID0gZ2xvYmFsRGF0YS0+b3NyRXhpdElu
ZGV4OworICAgIHVpbnQzMl90IGV4aXRJbmRleCA9IHZtLT5vc3JFeGl0SW5kZXg7CiAgICAgT1NS
RXhpdCYgZXhpdCA9IGNvZGVCbG9jay0+b3NyRXhpdChleGl0SW5kZXgpOwogICAgIAogICAgIC8v
IE1ha2Ugc3VyZSBhbGwgY29kZSBvbiBvdXIgaW5saW5lIHN0YWNrIGlzIEpJVCBjb21waWxlZC4g
VGhpcyBpcyBuZWNlc3Nhcnkgc2luY2UKQEAgLTkwLDEzICs5MCwxMyBAQCB2b2lkIGNvbXBpbGVP
U1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKICNlbmRpZgogCiAgICAgewotICAgICAgICBDQ2FsbEhl
bHBlcnMgaml0KGdsb2JhbERhdGEsIGNvZGVCbG9jayk7CisgICAgICAgIENDYWxsSGVscGVycyBq
aXQodm0sIGNvZGVCbG9jayk7CiAgICAgICAgIE9TUkV4aXRDb21waWxlciBleGl0Q29tcGlsZXIo
aml0KTsKIAogICAgICAgICBqaXQuaml0QXNzZXJ0SGFzVmFsaWRDYWxsRnJhbWUoKTsKICAgICAg
ICAgCi0gICAgICAgIGlmIChnbG9iYWxEYXRhLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgY29k
ZUJsb2NrLT5jb21waWxhdGlvbigpKSB7Ci0gICAgICAgICAgICBQcm9maWxlcjo6RGF0YWJhc2Um
IGRhdGFiYXNlID0gKmdsb2JhbERhdGEtPm1fcGVyQnl0ZWNvZGVQcm9maWxlcjsKKyAgICAgICAg
aWYgKHZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgY29kZUJsb2NrLT5jb21waWxhdGlvbigp
KSB7CisgICAgICAgICAgICBQcm9maWxlcjo6RGF0YWJhc2UmIGRhdGFiYXNlID0gKnZtLT5tX3Bl
ckJ5dGVjb2RlUHJvZmlsZXI7CiAgICAgICAgICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNv
bXBpbGF0aW9uID0gY29kZUJsb2NrLT5jb21waWxhdGlvbigpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBQcm9maWxlcjo6T1NSRXhpdCogcHJvZmlsZXJFeGl0ID0gY29tcGlsYXRpb24tPmFk
ZE9TUkV4aXQoCkBAIC0xMDgsNyArMTA4LDcgQEAgdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgICAgIAogICAgICAgICBleGl0Q29tcGlsZXIuY29tcGlsZUV4aXQoZXhp
dCwgb3BlcmFuZHMsIHJlY292ZXJ5KTsKICAgICAgICAgCi0gICAgICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIGNvZGVCbG9jayk7CisgICAgICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBjb2RlQmxvY2spOwogICAgICAgICBleGl0Lm1fY29k
ZSA9IEZJTkFMSVpFX0NPREVfSUYoCiAgICAgICAgICAgICBzaG91bGRTaG93RGlzYXNzZW1ibHko
KSwKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLApAQCAtMTIyLDcgKzEyMiw3IEBAIHZvaWQgY29t
cGlsZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhleGl0LmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goY29kZUJsb2NrKSwgQ29kZUxvY2F0aW9uTGFi
ZWwoZXhpdC5tX2NvZGUuY29kZSgpKSk7CiAgICAgfQogICAgIAotICAgIGdsb2JhbERhdGEtPm9z
ckV4aXRKdW1wRGVzdGluYXRpb24gPSBleGl0Lm1fY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKKyAgICB2bS0+b3NyRXhpdEp1bXBEZXN0aW5hdGlvbiA9IGV4aXQubV9jb2RlLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpOwogfQogCiB9IC8vIGV4dGVybiAiQyIKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTQ4NjU1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQAogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpJ
VEV4Y2VwdGlvbnMuaCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKLSNpbmNsdWRlICJKU0ds
b2JhbERhdGEuaCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIkpTTmFtZVNjb3BlLmgiCiAj
aW5jbHVkZSAiTmFtZUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIK
QEAgLTI4NCwxMyArMjg0LDEzIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIHRl
bXBsYXRlPGJvb2wgc3RyaWN0Pgogc3RhdGljIGlubGluZSB2b2lkIHB1dEJ5VmFsKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIHVpbnQzMl90IGluZGV4LCBKU1ZhbHVlIHZhbHVl
KQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKICAgICAKICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CiAgICAgICAgIGlmIChv
YmplY3QtPmNhblNldEluZGV4UXVpY2tseShpbmRleCkpIHsKLSAgICAgICAgICAgIG9iamVjdC0+
c2V0SW5kZXhRdWlja2x5KGdsb2JhbERhdGEsIGluZGV4LCB2YWx1ZSk7CisgICAgICAgICAgICBv
YmplY3QtPnNldEluZGV4UXVpY2tseSh2bSwgaW5kZXgsIHZhbHVlKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCkBAIC0zMDQsOCArMzA0LDggQEAgc3RhdGljIGlubGluZSB2b2lk
IHB1dEJ5VmFsKEV4ZWNTdGF0ZSogZQogdGVtcGxhdGU8Ym9vbCBzdHJpY3Q+CiBBTFdBWVNfSU5M
SU5FIHN0YXRpYyB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxJbnRlcm5hbChF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7
CiAgICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkUHJvcGVydHkp
OwpAQCAtMzMzLDcgKzMzMyw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgREZHX09QRVJB
VElPTiAKIAogICAgIC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyb3dz
IGFuIGV4Y2VwdGlvbi4KICAgICBJZGVudGlmaWVyIGlkZW50KGV4ZWMsIHByb3BlcnR5LnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLT5leGNlcHRpb24p
IHsKKyAgICBpZiAoIXZtLT5leGNlcHRpb24pIHsKICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNs
b3Qoc3RyaWN0KTsKICAgICAgICAgYmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUsIHNs
b3QpOwogICAgIH0KQEAgLTM0MywxNiArMzQzLDE2IEBAIGV4dGVybiAiQyIgewogCiBFbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbnZlcnRUaGlzKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcCkudG9UaGlzT2JqZWN0KGV4ZWMp
KTsKIH0KIAogSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRoaXMoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIGludDMyX3QgaW5saW5lQ2FwYWNpdHkp
CiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIENvbnN0cnVjdERhdGEgY29u
c3RydWN0RGF0YTsKQEAgLTM2NCwxNiArMzY0LDE2IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBv
cGVyYXRpb25DcmVhdGVUaGkKIAogSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09i
amVjdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAg
ICAKICAgICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgc3RydWN0dXJlKTsKIH0K
IAogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUFkZChFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDIpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERh
dGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMp
OworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cDIpOwpAQCAtMzgzLDggKzM4Myw4IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uVmEKIAogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUFk
ZE5vdE51bWJlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIEpTVmFsdWUgb3Ax
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwpAQCAtMzk5LDggKzM5OSw4IEBAIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uVmEKIAogc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1
ZSBnZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgdWludDMyX3QgaW5kZXgp
CiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwot
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOwogICAgIAogICAgIGlmIChiYXNlLT5pc09iamVjdCgpKSB7CiAgICAgICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlKTsKQEAgLTQxNiw4ICs0MTYsOCBAQCBzdGF0
aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGdldEJ5VmFsKEV4CiAKIEVuY29kZWRKU1ZhbHVlIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KQogewotICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKICAgICAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
QmFzZSk7CiAgICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkUHJv
cGVydHkpOwpAQCAtNDQ3LDggKzQ0Nyw4IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uR2UKIAogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRC
eVZhbENlbGwoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRQcm9wZXJ0eSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+
Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0
YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkUHJvcGVydHkpOwogCkBAIC00NzMsOCArNDczLDggQEAgRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogCiBFbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsQXJyYXlJbnQoRXhlY1N0YXRlKiBleGVjLCBK
U0FycmF5KiBiYXNlLCBpbnQzMl90IGluZGV4KQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBpZiAoaW5k
ZXggPCAwKSB7CiAgICAgICAgIC8vIEdvIHRoZSBzbG93ZXN0IHdheSBwb3NzaWJsZSBiZWNhc2Ug
bmVnYXRpdmUgaW5kaWNlcyBkb24ndCB1c2UgaW5kZXhlZCBzdG9yYWdlLgpAQCAtNDg3LDggKzQ4
Nyw4IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2UKIAogRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgYmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lKQogewotICAgIEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
ICAgICAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKICAg
ICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwpAQCAtNDk4LDggKzQ5OCw4IEBAIEVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2UKIEpfRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTX0VKSShvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KTsKIEVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdFdpdGhSZXR1
cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgSWRlbnRpZmll
ciogcHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiB7Ci0gICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogICAgIAogICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9j
aygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5
cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKQEAgLTUx
Nyw4ICs1MTcsOCBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiBK
X0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkob3BlcmF0aW9uR2V0QnlJ
ZFByb3RvQnVpbGRMaXN0KTsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
R2V0QnlJZFByb3RvQnVpbGRMaXN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBiYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAm
ZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xv
YmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJl
c3MpOwogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+
KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwpAQCAtNTM2LDggKzUzNiw4IEBAIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2UKIEpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0VKSShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwogRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5
TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogewotICAgIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1
YkluZm8ocmV0dXJuQWRkcmVzcyk7CiAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGlj
X2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CkBAIC01NTgsMTYgKzU1OCwx
NiBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAKIEVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbEN1c3RvbUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIEpTQ2VsbCogYmFzZSwgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZnVuY3Rpb24s
IElkZW50aWZpZXIqIGlkZW50KQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZl
eGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9i
YWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGZ1bmN0aW9uKGV4ZWMsIGFzT2JqZWN0KGJhc2UpLCAqaWRlbnQpKTsKIH0KIAogRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25DYWxsR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBiYXNlLCBKU0NlbGwqIHZhbHVlKQogewotICAgIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBH
ZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IGFzR2V0dGVyU2V0dGVyKHZhbHVlKTsKICAgICBK
U09iamVjdCogZ2V0dGVyID0gZ2V0dGVyU2V0dGVyLT5nZXR0ZXIoKTsKQEAgLTU4MCw0MCArNTgw
LDQwIEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ2EKIAogdm9pZCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBvcGVyYXRp
b25QdXRCeVZhbEludGVybmFsPHRydWU+KGV4ZWMsIGVuY29kZWRCYXNlLCBlbmNvZGVkUHJvcGVy
dHksIGVuY29kZWRWYWx1ZSk7CiB9CiAKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0
YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7
CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgb3BlcmF0aW9uUHV0QnlWYWxJbnRlcm5hbDxmYWxz
ZT4oZXhlYywgZW5jb2RlZEJhc2UsIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0K
IAogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmljdChFeGVjU3Rh
dGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIG9wZXJhdGlv
blB1dEJ5VmFsSW50ZXJuYWw8dHJ1ZT4oZXhlYywgSlNWYWx1ZTo6ZW5jb2RlKGNlbGwpLCBlbmNv
ZGVkUHJvcGVydHksIGVuY29kZWRWYWx1ZSk7CiB9CiAKIHZvaWQgREZHX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeVZhbENlbGxOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGws
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRh
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsK
KyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKICAgICAKICAgICBvcGVyYXRpb25QdXRCeVZhbEludGVybmFsPGZhbHNl
PihleGVjLCBKU1ZhbHVlOjplbmNvZGUoY2VsbCksIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZh
bHVlKTsKIH0KIAogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJy
YXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3Qg
aW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAg
aWYgKGluZGV4ID49IDApIHsKICAgICAgICAgYXJyYXktPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywg
aW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0cnVlKTsKQEAgLTYyNyw4ICs2
MjcsOCBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvCiAKIHZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0g
JmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGds
b2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIGlmIChpbmRleCA+PSAw
KSB7CiAgICAgICAgIGFycmF5LT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGluZGV4LCBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgZmFsc2UpOwpAQCAtNjQyLDggKzY0Miw4IEBAIHZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW8KIAogdm9pZCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKIHsK
LSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CiAgICAgCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNv
ZGVBc0RvdWJsZSwgdmFsdWUpOwogICAgIApAQCAtNjU5LDggKzY1OSw4IEBAIHZvaWQgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVYKIAogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dERvdWJsZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKIHsKLSAg
ICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CiAgICAgCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVB
c0RvdWJsZSwgdmFsdWUpOwogICAgIApAQCAtNjc2LDggKzY3Niw4IEBAIHZvaWQgREZHX09QRVJB
VElPTiBvcGVyYXRpb25QdXREb3VibGVCeVYKIAogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElP
TiBvcGVyYXRpb25BcnJheVB1c2goRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEpTQXJyYXkqIGFycmF5KQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBhcnJheS0+cHVz
aChleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihhcnJheS0+bGVuZ3RoKCkpKTsKQEAgLTY4NSw4ICs2ODUsOCBA
QCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAKIEVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoRG91YmxlKEV4ZWNTdGF0ZSogZXhl
YywgZG91YmxlIHZhbHVlLCBKU0FycmF5KiBhcnJheSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgYXJy
YXktPnB1c2goZXhlYywgSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGFycmF5LT5sZW5ndGgoKSkpOwpA
QCAtNjk0LDE2ICs2OTQsMTYgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRp
b25BcgogCiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wKEV4
ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXkpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoYXJyYXktPnBvcChleGVjKSk7CiB9CiAgICAgICAgIAogRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5ndGgo
RXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgYXJy
YXktPmJ1dHRlcmZseSgpLT5zZXRQdWJsaWNMZW5ndGgoYXJyYXktPmJ1dHRlcmZseSgpLT5wdWJs
aWNMZW5ndGgoKSArIDEpOwogICAgIApAQCAtNzEyLDggKzcxMiw4IEBAIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXIKICAgICAgICAgCiBFbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWMoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJh
c2UsIEpTQ2VsbCogYXJndW1lbnQpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0g
ZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmds
b2JhbERhdGEsIGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogICAgIAogICAgIGlmICghYmFzZS0+aW5o
ZXJpdHMoJlJlZ0V4cE9iamVjdDo6c19pbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYyk7CkBAIC03MjUsOCArNzI1LDggQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25SZQogICAgICAgICAKIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blJlZ0V4cFRlc3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2VsbCogYXJndW1l
bnQpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOwor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOwogCiAgICAgaWYgKCFiYXNlLT5pbmhlcml0cygmUmVnRXhwT2JqZWN0Ojpz
X2luZm8pKSB7CiAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOwpAQCAtNzQwLDggKzc0MCw4
IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cFRlc3QKICAgICAgICAgCiB2
b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKiBw
cm9wZXJ0eU5hbWUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmds
b2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEs
IGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRy
dWUpOwogICAgIGJhc2UtPm1ldGhvZFRhYmxlKCktPnB1dChiYXNlLCBleGVjLCAqcHJvcGVydHlO
YW1lLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CkBAIC03NDksOCArNzQ5
LDggQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpYwogCiB2b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKiBwcm9w
ZXJ0eU5hbWUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2Jh
bERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4
ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZhbHNl
KTsKICAgICBiYXNlLT5tZXRob2RUYWJsZSgpLT5wdXQoYmFzZSwgZXhlYywgKnByb3BlcnR5TmFt
ZSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwpAQCAtNzU4LDI5ICs3NTgs
MjkgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdAogCiB2b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdChFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKiBw
cm9wZXJ0eU5hbWUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmds
b2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEs
IGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRy
dWUpOwogICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+
cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgKnByb3BlcnR5TmFtZSwgSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3Qo
ZXhlYy0+dm0oKSwgKnByb3BlcnR5TmFtZSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSks
IHNsb3QpOwogfQogCiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5v
blN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlND
ZWxsKiBiYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90KGZhbHNlKTsKICAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3Qo
KSk7Ci0gICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksICpw
cm9wZXJ0eU5hbWUsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKKyAgICBh
c09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksICpwcm9wZXJ0eU5hbWUsIEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAogVl9GVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUp
Owogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZVdpdGhS
ZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVj
LT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxE
YXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7
CiAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1
YkluZm8uYWNjZXNzVHlwZSk7CkBAIC04MDMsOCArODAzLDggQEAgdm9pZCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5SWRTdHJpYwogVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUpOwogdm9pZCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRy
ZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwq
IGJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxE
YXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVj
KTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8g
PSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CiAgICAgQWNj
ZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNj
ZXNzVHlwZSk7CkBAIC04MjcsOCArODI3LDggQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5SWROb25TdAogVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpD
SShvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpOwogdm9pZCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNz
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJh
c2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRh
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsK
KyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKICAgICAKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBl
eGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CiAgICAgQWNjZXNz
VHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNz
VHlwZSk7CkBAIC04MzcsNyArODM3LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWREaXJlYwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUpOwogICAgIAogICAgIEFT
U0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIGFzT2Jq
ZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNs
b3QpOwogICAgIAogICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+
KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQogICAgICAgICByZXR1cm47CkBAIC04NTEsOCArODUxLDgg
QEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlYwogVl9GVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0T3B0aW1pemUpOwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqIHByb3Bl
cnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogewotICAgIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAK
ICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0
U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CiAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3Rh
dGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CkBAIC04NjEsNyArODYx
LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlYwogICAgIFB1dFBy
b3BlcnR5U2xvdCBzbG90KGZhbHNlKTsKICAgICAKICAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3Qo
KSk7Ci0gICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksICpw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0
KGV4ZWMtPnZtKCksICpwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKICAgICAKICAgICBpZiAo
YWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBl
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtODc1LDggKzg3NSw4IEBAIHZvaWQgREZHX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeUlkRGlyZWMKIFZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdCk7CiB2b2lkIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNz
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJh
c2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRh
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsK
KyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKICAgICAKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBl
eGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CiAgICAgQWNjZXNz
VHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNz
VHlwZSk7CkBAIC04OTYsOCArODk2LDggQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWRTdHJpYwogVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShv
cGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KTsKIHZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRl
bnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiB7
Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwogICAgIAogICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNv
ZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsK
QEAgLTkxNyw4ICs5MTcsOCBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5v
blN0CiBWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlv
blB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QpOwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVu
dGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsK
LSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CiAgICAgCiAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29k
ZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwogICAgIEFjY2Vzc1R5cGUgYWNj
ZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwpA
QCAtOTI3LDcgKzkyNyw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGly
ZWMKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlKTsKICAgICAKICAgICBBU1NFUlQoYmFz
ZS0+aXNPYmplY3QoKSk7Ci0gICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksICpwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICBhc09iamVjdChiYXNl
KS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksICpwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKICAg
ICAKICAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5m
by5hY2Nlc3NUeXBlKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTM4LDggKzkzOCw4IEBAIHZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWMKIFZfRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1
aWxkTGlzdCk7CiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFt
ZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogewotICAgIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1Yklu
Zm8ocmV0dXJuQWRkcmVzcyk7CiAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nh
c3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CkBAIC05NDgsNyArOTQ4LDcgQEAg
dm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlYwogICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KGZhbHNlKTsKICAgICAKICAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7Ci0g
ICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksICpwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMt
PnZtKCksICpwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKICAgICAKICAgICBpZiAoYWNjZXNz
VHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtOTU4LDQwICs5NTgsNDAgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5SWREaXJlYwogCiBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21w
YXJlTGVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0g
JmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGds
b2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHJldHVybiBqc0xlc3M8
dHJ1ZT4oZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZE9wMikpOwogfQogCiBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJl
TGVzc0VxKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAm
ZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xv
YmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgcmV0dXJuIGpzTGVzc0Vx
PHRydWU+KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRPcDIpKTsKIH0KIAogc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFy
ZUdyZWF0ZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9
ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihn
bG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICByZXR1cm4ganNMZXNz
PGZhbHNlPihleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMiksIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkT3AxKSk7CiB9CiAKIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBh
cmVHcmVhdGVyRXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICByZXR1cm4ganNM
ZXNzRXE8ZmFsc2U+KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRPcDEpKTsKIH0KIAogc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9u
Q29tcGFyZUVxKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEg
PSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
Z2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVxdWFsU2xvd0Nhc2VJbmxpbmUoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEp
LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikpOwogfQpAQCAtMTAwMiw4ICsxMDAyLDggQEAg
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Dbwogc2l6ZV90IERGR19PUEVS
QVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBs
ZWZ0LCBKU0NlbGwqIHJpZ2h0KQogI2VuZGlmCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIGJvb2wgcmVz
dWx0ID0gYXNTdHJpbmcobGVmdCktPnZhbHVlKGV4ZWMpID09IGFzU3RyaW5nKHJpZ2h0KS0+dmFs
dWUoZXhlYyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTEwMTUsOCArMTAxNSw4IEBAIHNpemVf
dCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHIKIAogc2l6ZV90IERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0gICAgSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwog
ICAgIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAg
IEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwpAQCAtMTAyOSw4ICsx
MDI5LDggQEAgc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cgogCiBzaXpl
X3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQog
ewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKIAogICAgIEpTVmFsdWUgc3JjMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3Ax
KTsKICAgICBKU1ZhbHVlIHNyYzIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CkBAIC0x
MDQxLDcgKzEwNDEsNyBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3Ry
CiBzdGF0aWMgdm9pZCogaGFuZGxlSG9zdENhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBKU1Zh
bHVlIGNhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKIAogICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlKGV4ZWMtPnNjb3BlKCkpOwogICAgIGV4ZWND
YWxsZWUtPnNldENvZGVCbG9jaygwKTsKQEAgLTEwNTMsMTggKzEwNTMsMTggQEAgc3RhdGljIHZv
aWQqIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZQogICAgICAgICBBU1NFUlQoY2FsbFR5cGUg
IT0gQ2FsbFR5cGVKUyk7CiAgICAgCiAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUhv
c3QpIHsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0
YSwgZXhlY0NhbGxlZSk7CisgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjQ2FsbGVlKTsKICAgICAgICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09i
amVjdChjYWxsZWUpKTsKLSAgICAgICAgICAgIGdsb2JhbERhdGEtPmhvc3RDYWxsUmV0dXJuVmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUp
KTsKLSAgICAgICAgICAgIGlmIChnbG9iYWxEYXRhLT5leGNlcHRpb24pCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGdsb2JhbERhdGEtPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAg
IHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2
ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7CisgICAgICAgICAgICBpZiAodm0tPmV4Y2VwdGlvbikK
KyAgICAgICAgICAgICAgICByZXR1cm4gdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIAogICAg
ICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldEhvc3RDYWxsUmV0dXJu
VmFsdWUpOwogICAgICAgICB9CiAgICAgCiAgICAgICAgIEFTU0VSVChjYWxsVHlwZSA9PSBDYWxs
VHlwZU5vbmUpOwotICAgICAgICBleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gY3JlYXRl
Tm90QUZ1bmN0aW9uRXJyb3IoZXhlYywgY2FsbGVlKTsKLSAgICAgICAgcmV0dXJuIGdsb2JhbERh
dGEtPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgZXhlYy0+dm0oKS5leGNlcHRpb24g
PSBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihleGVjLCBjYWxsZWUpOworICAgICAgICByZXR1cm4g
dm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9CiAKICAgICBBU1NFUlQoa2luZCA9PSBD
b2RlRm9yQ29uc3RydWN0KTsKQEAgLTEwNzUsMjUgKzEwNzUsMjUgQEAgc3RhdGljIHZvaWQqIGhh
bmRsZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZQogICAgIEFTU0VSVChjb25zdHJ1Y3RUeXBlICE9IENv
bnN0cnVjdFR5cGVKUyk7CiAgICAgCiAgICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0
VHlwZUhvc3QpIHsKLSAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxE
YXRhLCBleGVjQ2FsbGVlKTsKKyAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlY0NhbGxlZSk7CiAgICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChj
YWxsZWUpKTsKLSAgICAgICAgZ2xvYmFsRGF0YS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7Ci0g
ICAgICAgIGlmIChnbG9iYWxEYXRhLT5leGNlcHRpb24pCi0gICAgICAgICAgICByZXR1cm4gZ2xv
YmFsRGF0YS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0
b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICB2bS0+aG9zdENhbGxSZXR1
cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihl
eGVjQ2FsbGVlKSk7CisgICAgICAgIGlmICh2bS0+ZXhjZXB0aW9uKQorICAgICAgICAgICAgcmV0
dXJuIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRv
cikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKICAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpOwogICAgIH0KICAgICAKICAg
ICBBU1NFUlQoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlTm9uZSk7Ci0gICAgZXhlYy0+
Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMs
IGNhbGxlZSk7Ci0gICAgcmV0dXJuIGdsb2JhbERhdGEtPmdldENUSVN0dWIodGhyb3dFeGNlcHRp
b25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
KyAgICBleGVjLT52bSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4
ZWMsIGNhbGxlZSk7CisgICAgcmV0dXJuIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJv
bUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiB9CiAK
IGlubGluZSBjaGFyKiBsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBraW5kKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNh
bGxlckZyYW1lKCk7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2Jh
bERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4
ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGV4
ZWNDYWxsZWUtPmNhbGxlZUFzVmFsdWUoKTsKICAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25D
ZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKQEAgLTExMTIsOCArMTExMiw4IEBA
IGlubGluZSBjaGFyKiBsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlY0NhbGwKICAgICAgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4
ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rp
b25FeGVjdXRhYmxlLT5jb21waWxlRm9yKGV4ZWNDYWxsZWUsIGNhbGxlZS0+c2NvcGUoKSwga2lu
ZCk7CiAgICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgZ2xvYmFsRGF0YS0+ZXhjZXB0
aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGdsb2JhbERhdGEtPmdldENUSVN0dWIodGhyb3dFeGNl
cHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CisgICAgICAgICAgICB2bS0+ZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9y
KGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5n
ZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgICAgICB9CiAgICAgICAgIGNvZGVCbG9jayA9ICZm
dW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEJ5dGVjb2RlRm9yKGtpbmQpOwogICAgICAgICBp
ZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0
PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKQpAQCAtMTE0Miw4ICsxMTQyLDgg
QEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29uc3RydQogaW5saW5lIGNoYXIq
IHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQsIEpTQ2VsbComIGNhbGxlZUFzRnVuY3Rpb25DZWxsKQogewogICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAg
ICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gZXhlY0NhbGxlZS0+Y2FsbGVlQXNWYWx1ZSgpOwog
ICAgIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsK
QEAgLTExNTcsOCArMTE1Nyw4IEBAIGlubGluZSBjaGFyKiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9u
KEV4ZWMKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBz
dGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKICAgICAgICAgSlNP
YmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21waWxlRm9yKGV4ZWNDYWxsZWUs
IGZ1bmN0aW9uLT5zY29wZSgpLCBraW5kKTsKICAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAg
ICAgICBleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gZXJyb3I7Ci0gICAgICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih0aHJv
d0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpKTsKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkuZXhjZXB0aW9uID0gZXJyb3I7CisgICAg
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmdldENUSVN0dWIodGhy
b3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5k
KS5leGVjdXRhYmxlQWRkcmVzcygpKTsKQEAgLTEyMzEsMzEgKzEyMzEsMzEgQEAgdm9pZCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeUdsb2JhbAogCiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblJlc29sdmUoRXhlY1N0YXRlKiBleGVjLCBJZGVudGlmaWVyKiBwcm9w
ZXJ0eU5hbWUsIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zKQogewotICAgIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTU2NvcGU6OnJlc29sdmUoZXhlYywgKnByb3BlcnR5TmFt
ZSwgb3BlcmF0aW9ucykpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblJlc29sdmVCYXNlKEV4ZWNTdGF0ZSogZXhlYywgSWRlbnRpZmllciogcHJvcGVydHlOYW1l
LCBSZXNvbHZlT3BlcmF0aW9ucyogb3BlcmF0aW9ucywgUHV0VG9CYXNlT3BlcmF0aW9uKiBwdXRU
b0Jhc2VPcGVyYXRpb25zKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVj
LT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxE
YXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTU2NvcGU6OnJlc29sdmVCYXNlKGV4ZWMsICpwcm9wZXJ0eU5hbWUsIGZhbHNlLCBvcGVy
YXRpb25zLCBwdXRUb0Jhc2VPcGVyYXRpb25zKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZUJhc2VTdHJpY3RQdXQoRXhlY1N0YXRlKiBleGVjLCBJ
ZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zLCBQ
dXRUb0Jhc2VPcGVyYXRpb24qIHB1dFRvQmFzZU9wZXJhdGlvbnMpCiB7Ci0gICAgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNTY29wZTo6cmVzb2x2ZUJhc2UoZXhlYywgKnBy
b3BlcnR5TmFtZSwgdHJ1ZSwgb3BlcmF0aW9ucywgcHV0VG9CYXNlT3BlcmF0aW9ucykpOwogfQog
CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVHbG9iYWwoRXhl
Y1N0YXRlKiBleGVjLCBSZXNvbHZlT3BlcmF0aW9uKiByZXNvbHZlT3BlcmF0aW9uLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogICAgIEFTU0VSVChnbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTShyZXNvbHZlT3Bl
cmF0aW9uKTsKICAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKQEAgLTEyNjUsODggKzEy
NjUsODggQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZQogCiBFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKS50b1ByaW1pdGl2ZShleGVjKSk7
CiB9CiAKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXkoRXhlY1N0YXRlKiBl
eGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCB2b2lkKiBidWZmZXIsIHNpemVfdCBzaXpl
KQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICAgICAKICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPihjb25zdHJ1
Y3RBcnJheShleGVjLCBhcnJheVN0cnVjdHVyZSwgc3RhdGljX2Nhc3Q8SlNWYWx1ZSo+KGJ1ZmZl
ciksIHNpemUpKTsKIH0KIAogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdFbXB0eUFy
cmF5KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSkKIHsKLSAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAgICAgCi0gICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oSlNBcnJheTo6Y3JlYXRlKCpn
bG9iYWxEYXRhLCBhcnJheVN0cnVjdHVyZSkpOworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hh
cio+KEpTQXJyYXk6OmNyZWF0ZSgqdm0sIGFycmF5U3RydWN0dXJlKSk7CiB9CiAKIGNoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqIGV4ZWMsIFN0
cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIGludDMyX3Qgc2l6ZSkKIHsKLSAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBp
ZiAoVU5MSUtFTFkoc2l6ZSA8IDApKQogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIq
Pih0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJB
cnJheSBzaXplIGlzIG5vdCBhIHNtYWxsIGVub3VnaCBwb3NpdGl2ZSBpbnRlZ2VyLiIpKSkpOwog
Ci0gICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oSlNBcnJheTo6Y3JlYXRlKCpnbG9iYWxE
YXRhLCBhcnJheVN0cnVjdHVyZSwgc2l6ZSkpOworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hh
cio+KEpTQXJyYXk6OmNyZWF0ZSgqdm0sIGFycmF5U3RydWN0dXJlLCBzaXplKSk7CiB9CiAKIGNo
YXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVj
LCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBzaXplKQog
ewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPihjb25zdHJ1Y3RBcnJheShl
eGVjLCBhcnJheVN0cnVjdHVyZSwgZXhlYy0+Y29kZUJsb2NrKCktPmNvbnN0YW50QnVmZmVyKHN0
YXJ0KSwgc2l6ZSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld1JlZ2V4cChFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIHJlZ2V4cFB0cikKIHsKLSAgICBKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAg
ICAgUmVnRXhwKiByZWdleHAgPSBzdGF0aWNfY2FzdDxSZWdFeHAqPihyZWdleHBQdHIpOwogICAg
IGlmICghcmVnZXhwLT5pc1ZhbGlkKCkpIHsKICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVh
dGVTeW50YXhFcnJvcihleGVjLCAiSW52YWxpZCBmbGFncyBzdXBwbGllZCB0byBSZWdFeHAgY29u
c3RydWN0b3IuIikpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFJlZ0V4cE9iamVj
dDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdleHAp
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFJlZ0V4cE9iamVjdDo6Y3JlYXRlKGV4ZWMt
PnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnZXhwKSk7CiB9CiAKIEpTQ2VsbCogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7Ci0gICAgSlNBY3Rp
dmF0aW9uKiBhY3RpdmF0aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZXhl
YywgZXhlYy0+Y29kZUJsb2NrKCkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTQWN0aXZhdGlvbiog
YWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKHZtLCBleGVjLCBleGVjLT5jb2RlQmxv
Y2soKSk7CiAgICAgZXhlYy0+c2V0U2NvcGUoYWN0aXZhdGlvbik7CiAgICAgcmV0dXJuIGFjdGl2
YXRpb247CiB9CiAKIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBcmd1bWVu
dHMoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4
ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9i
YWxEYXRhLCBleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKICAgICAvLyBOQjogVGhpcyBuZWVkcyB0byBi
ZSBleGNlZWRpbmdseSBjYXJlZnVsIHdpdGggdG9wIGNhbGwgZnJhbWUgdHJhY2tpbmcsIHNpbmNl
IGl0CiAgICAgLy8gbWF5IGJlIGNhbGxlZCBmcm9tIE9TUiBleGl0LCB3aGlsZSB0aGUgc3RhdGUg
b2YgdGhlIGNhbGwgc3RhY2sgaXMgYml6YXJyZS4KLSAgICBBcmd1bWVudHMqIHJlc3VsdCA9IEFy
Z3VtZW50czo6Y3JlYXRlKGdsb2JhbERhdGEsIGV4ZWMpOwotICAgIEFTU0VSVCghZ2xvYmFsRGF0
YS5leGNlcHRpb24pOworICAgIEFyZ3VtZW50cyogcmVzdWx0ID0gQXJndW1lbnRzOjpjcmVhdGUo
dm0sIGV4ZWMpOworICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCiBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlSW5saW5lZEFyZ3Vt
ZW50cygKICAgICBFeGVjU3RhdGUqIGV4ZWMsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEo
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKICAgICAvLyBOQjogVGhpcyBuZWVkcyB0byBiZSBleGNlZWRpbmdseSBj
YXJlZnVsIHdpdGggdG9wIGNhbGwgZnJhbWUgdHJhY2tpbmcsIHNpbmNlIGl0CiAgICAgLy8gbWF5
IGJlIGNhbGxlZCBmcm9tIE9TUiBleGl0LCB3aGlsZSB0aGUgc3RhdGUgb2YgdGhlIGNhbGwgc3Rh
Y2sgaXMgYml6YXJyZS4KLSAgICBBcmd1bWVudHMqIHJlc3VsdCA9IEFyZ3VtZW50czo6Y3JlYXRl
KGdsb2JhbERhdGEsIGV4ZWMsIGlubGluZUNhbGxGcmFtZSk7Ci0gICAgQVNTRVJUKCFnbG9iYWxE
YXRhLmV4Y2VwdGlvbik7CisgICAgQXJndW1lbnRzKiByZXN1bHQgPSBBcmd1bWVudHM6OmNyZWF0
ZSh2bSwgZXhlYywgaW5saW5lQ2FsbEZyYW1lKTsKKyAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbik7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTM2OSwxMSArMTM2OSwxMSBAQCB2b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZklubGluCiAKIEVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uR2V0QXJndW1lbnRzTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgaW50
MzJfdCBhcmd1bWVudHNSZWdpc3RlcikKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEg
PSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
Z2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgLy8gSGVyZSB3ZSBjYW4gYXNz
dW1lIHRoYXQgdGhlIGFyZ3VtZXJudHMgd2VyZSBjcmVhdGVkLiBCZWNhdXNlIG90aGVyd2lzZSB0
aGUgSklUIGNvZGUgd291bGQKICAgICAvLyBoYXZlIG5vdCBtYWRlIHRoaXMgY2FsbC4KLSAgICBJ
ZGVudGlmaWVyIGlkZW50KCZnbG9iYWxEYXRhLCAibGVuZ3RoIik7CisgICAgSWRlbnRpZmllciBp
ZGVudCgmdm0sICJsZW5ndGgiKTsKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IGV4ZWMtPnVuY2hl
Y2tlZFIoYXJndW1lbnRzUmVnaXN0ZXIpLmpzVmFsdWUoKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xv
dChiYXNlVmFsdWUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChl
eGVjLCBpZGVudCwgc2xvdCkpOwpAQCAtMTM4MSwxNSArMTM4MSwxNSBAQCBFbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uR2V0QXJndW1lbnRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgYXJn
dW1lbnRzUmVnaXN0ZXIsIGludDMyX3QgaW5kZXgpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBh
cmd1bWVudHNWYWx1ZSA9IGV4ZWMtPnVuY2hlY2tlZFIoYXJndW1lbnRzUmVnaXN0ZXIpLmpzVmFs
dWUoKTsKICAgICAKICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gYXJndW1lbnRzLCBhbmQgd2UncmUg
YWNjZXNzaW5nIG91dCBvZiBib3VuZHMsIHRoZW4gd2UgaGF2ZSB0byBjcmVhdGUgdGhlCiAgICAg
Ly8gYXJndW1lbnRzIGluIGNhc2Ugc29tZW9uZSBoYXMgaW5zdGFsbGVkIGEgZ2V0dGVyIG9uIGEg
bnVtZXJpYyBwcm9wZXJ0eS4KICAgICBpZiAoIWFyZ3VtZW50c1ZhbHVlKQotICAgICAgICBleGVj
LT51bmNoZWNrZWRSKGFyZ3VtZW50c1JlZ2lzdGVyKSA9IGFyZ3VtZW50c1ZhbHVlID0gQXJndW1l
bnRzOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjKTsKKyAgICAgICAgZXhlYy0+dW5j
aGVja2VkUihhcmd1bWVudHNSZWdpc3RlcikgPSBhcmd1bWVudHNWYWx1ZSA9IEFyZ3VtZW50czo6
Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMpOwogICAgIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoYXJndW1lbnRzVmFsdWUuZ2V0KGV4ZWMsIGluZGV4KSk7CiB9CkBAIC0xMzk3LDggKzEzOTcs
OCBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiBFbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldElubGluZWRBcmd1bWVudEJ5VmFsKAogICAg
IEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBhcmd1bWVudHNSZWdpc3RlciwgSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUsIGludDMyX3QgaW5kZXgpCiB7Ci0gICAgSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogCiAgICAgSlNW
YWx1ZSBhcmd1bWVudHNWYWx1ZSA9IGV4ZWMtPnVuY2hlY2tlZFIoYXJndW1lbnRzUmVnaXN0ZXIp
LmpzVmFsdWUoKTsKICAgICAKQEAgLTE0MDYsNyArMTQwNiw3IEBAIEVuY29kZWRKU1ZhbHVlIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICAvLyBhcmd1bWVudHMgaW4gY2FzZSBzb21lb25l
IGhhcyBpbnN0YWxsZWQgYSBnZXR0ZXIgb24gYSBudW1lcmljIHByb3BlcnR5LgogICAgIGlmICgh
YXJndW1lbnRzVmFsdWUpIHsKICAgICAgICAgZXhlYy0+dW5jaGVja2VkUihhcmd1bWVudHNSZWdp
c3RlcikgPSBhcmd1bWVudHNWYWx1ZSA9Ci0gICAgICAgICAgICBBcmd1bWVudHM6OmNyZWF0ZShl
eGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMsIGlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICBB
cmd1bWVudHM6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLCBpbmxpbmVDYWxsRnJhbWUpOwogICAg
IH0KICAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFyZ3VtZW50c1ZhbHVlLmdldChl
eGVjLCBpbmRleCkpOwpAQCAtMTQxNSw4ICsxNDE1LDggQEAgRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25HZQogSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1
bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGUpCiB7CiAg
ICAgQVNTRVJUKGZ1bmN0aW9uRXhlY3V0YWJsZS0+aW5oZXJpdHMoJkZ1bmN0aW9uRXhlY3V0YWJs
ZTo6c19pbmZvKSk7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFs
RGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4
ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOwogICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywg
c3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZnVuY3Rpb25FeGVjdXRhYmxlKSwgZXhl
Yy0+c2NvcGUoKSk7CiB9CiAKQEAgLTE0MjQsOCArMTQyNCw4IEBAIEpTQ2VsbCogREZHX09QRVJB
VElPTiBvcGVyYXRpb25OZXdGdW5jdGkKIHsKICAgICBBU1NFUlQoZnVuY3Rpb25FeGVjdXRhYmxl
QXNDZWxsLT5pbmhlcml0cygmRnVuY3Rpb25FeGVjdXRhYmxlOjpzX2luZm8pKTsKIAotICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
IAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0KICAgICAgICAg
c3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZnVuY3Rpb25FeGVjdXRhYmxlQXNDZWxs
KTsKQEAgLTE0NDksMTU1ICsxNDQ5LDE1NSBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uVHlwZU9mKEV4CiAKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlU3Rv
cmFnZUFuZEZpbmlzaFB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSB2YWx1
ZSkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CiAKICAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ID4gYmFzZS0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgIEFTU0VSVCgh
Z2xvYmFsRGF0YS5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKS5mYXN0UGF0aFNob3VsZFN1Y2NlZWQo
c3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAg
YmFzZS0+c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUpOwotICAgIGJhc2UtPnB1dERpcmVjdChnbG9iYWxEYXRhLCBvZmZzZXQs
IEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkpOworICAgIEFTU0VSVCghdm0uaGVhcC5zdG9yYWdlQWxs
b2NhdG9yKCkuZmFzdFBhdGhTaG91bGRTdWNjZWVkKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgIGJhc2UtPnNldFN0cnVjdHVyZUFuZFJlYWxs
b2NhdGVTdG9yYWdlSWZOZWNlc3Nhcnkodm0sIHN0cnVjdHVyZSk7CisgICAgYmFzZS0+cHV0RGly
ZWN0KHZtLCBvZmZzZXQsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkpOwogfQogCiBjaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBh
Y2l0eShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0g
ZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmds
b2JhbERhdGEsIGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KAotICAgICAgICBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZ2xv
YmFsRGF0YSwgMCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5LCBmYWxzZSwgMCkpOworICAgICAg
ICBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIDAsIGluaXRpYWxPdXRPZkxpbmVD
YXBhY2l0eSwgZmFsc2UsIDApKTsKIH0KIAogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25B
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCBuZXdTaXplKQog
ewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKIAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPigKLSAgICAgICAg
QnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIDAsIG5ld1NpemUsIGZh
bHNlLCAwKSk7CisgICAgICAgIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCh2bSwgMCwg
bmV3U2l6ZSwgZmFsc2UsIDApKTsKIH0KIAogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25S
ZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0
eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogCiAgICAgQVNT
RVJUKCFvYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICBCdXR0
ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+Z3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwg
MCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9i
amVjdC0+Z3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIDAsIGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0
eSk7CiAgICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUocmVz
dWx0KTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIAog
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJv
cGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgc2l6ZV90IG5l
d1NpemUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOwogCi0gICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdyb3dP
dXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIG9iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCksIG5ld1NpemUpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5n
cm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSwgbmV3U2l6ZSk7CiAgICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdp
bmdTdHJ1Y3R1cmUocmVzdWx0KTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
cmVzdWx0KTsKIH0KIAogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVJbnQzMihF
eGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKCFj
ZWxsLT5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oYXNPYmplY3QoY2VsbCktPmVuc3VyZUludDMyKGdsb2JhbERh
dGEpLmRhdGEoKSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFzT2JqZWN0
KGNlbGwpLT5lbnN1cmVJbnQzMih2bSkuZGF0YSgpKTsKIH0KIAogY2hhciogREZHX09QRVJBVElP
TiBvcGVyYXRpb25FbnN1cmVEb3VibGUoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7
Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOwogICAgIAogICAgIGlmICghY2VsbC0+aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFzT2JqZWN0KGNl
bGwpLT5lbnN1cmVEb3VibGUoZ2xvYmFsRGF0YSkuZGF0YSgpKTsKKyAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oYXNPYmplY3QoY2VsbCktPmVuc3VyZURvdWJsZSh2bSkuZGF0YSgp
KTsKIH0KIAogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVDb250aWd1b3VzKEV4
ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKICAgICAKICAgICBpZiAoIWNl
bGwtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihhc09iamVjdChjZWxsKS0+ZW5zdXJlQ29udGlndW91cyhnbG9i
YWxEYXRhKS5kYXRhKCkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihhc09i
amVjdChjZWxsKS0+ZW5zdXJlQ29udGlndW91cyh2bSkuZGF0YSgpKTsKIH0KIAogY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25SYWdlRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMs
IEpTQ2VsbCogY2VsbCkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5n
bG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0
YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKCFjZWxsLT5pc09iamVjdCgp
KQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oYXNPYmplY3QoY2VsbCktPnJhZ2VFbnN1cmVDb250aWd1b3VzKGdsb2JhbERhdGEpLmRh
dGEoKSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFzT2JqZWN0KGNlbGwp
LT5yYWdlRW5zdXJlQ29udGlndW91cyh2bSkuZGF0YSgpKTsKIH0KIAogY2hhciogREZHX09QRVJB
VElPTiBvcGVyYXRpb25FbnN1cmVBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IGNlbGwpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOwogICAgIAogICAgIGlmICghY2VsbC0+aXNPYmplY3QoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYXNPYmpl
Y3QoY2VsbCktPmVuc3VyZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFzT2JqZWN0KGNlbGwpLT5lbnN1cmVBcnJheVN0b3JhZ2Uo
dm0pKTsKIH0KIAogU3RyaW5nSW1wbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlUm9w
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcpCiB7Ci0gICAgSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogCiAgICAgcmV0
dXJuIHN0cmluZy0+dmFsdWUoZXhlYykuaW1wbCgpOwogfQogCiBKU0NlbGwqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0
cmluZywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogICAgIAogICAgIHJldHVybiBT
dHJpbmdPYmplY3Q6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIHN0cmluZyk7CiB9CiAKIEpTQ2Vs
bCogREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZ09uQ2VsbChFeGVjU3RhdGUqIGV4ZWMs
IEpTQ2VsbCogY2VsbCkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5n
bG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0
YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWUoY2VsbCku
dG9TdHJpbmcoZXhlYyk7CiB9CiAKIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0
cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewotICAgIEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKIAog
ICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLnRvU3RyaW5nKGV4ZWMpOwogfQogCiBK
U0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUyKEV4ZWNTdGF0ZSogZXhlYywg
SlNTdHJpbmcqIGxlZnQsIEpTU3RyaW5nKiByaWdodCkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKLSAgICByZXR1cm4g
SlNSb3BlU3RyaW5nOjpjcmVhdGUoZ2xvYmFsRGF0YSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVy
biBKU1JvcGVTdHJpbmc6OmNyZWF0ZSh2bSwgbGVmdCwgcmlnaHQpOwogfQogCiBKU0NlbGwqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUzKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcq
IGEsIEpTU3RyaW5nKiBiLCBKU1N0cmluZyogYykKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKLSAgICByZXR1cm4gSlNS
b3BlU3RyaW5nOjpjcmVhdGUoZ2xvYmFsRGF0YSwgYSwgYiwgYyk7CisgICAgcmV0dXJuIEpTUm9w
ZVN0cmluZzo6Y3JlYXRlKHZtLCBhLCBiLCBjKTsKIH0KIAogZG91YmxlIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKQEAgLTE2MDcsMjkgKzE2
MDcsMjkgQEAgZG91YmxlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cwogCiBKU0Nl
bGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNTdGF0ZSog
ZXhlYywgaW50MzJfdCBvcDEpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4
ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2Jh
bERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIHJldHVybiBKU0M6OnN0cmluZ0Zyb21D
aGFyQ29kZShleGVjLCBvcDEpOwogfQogCiBERkdIYW5kbGVyRW5jb2RlZCBERkdfT1BFUkFUSU9O
IGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIoRXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBjYWxsSW5k
ZXgpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEo
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOwor
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2Vw
dGlvbigpOwogICAgIEFTU0VSVChleGNlcHRpb25WYWx1ZSk7CiAgICAgCiAgICAgdW5zaWduZWQg
dlBDSW5kZXggPSBleGVjLT5jb2RlQmxvY2soKS0+Ynl0ZWNvZGVPZmZzZXRGb3JDYWxsQXRJbmRl
eChjYWxsSW5kZXgpOwotICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGdlbmVyaWNUaHJv
dyhnbG9iYWxEYXRhLCBleGVjLCBleGNlcHRpb25WYWx1ZSwgdlBDSW5kZXgpOworICAgIEV4Y2Vw
dGlvbkhhbmRsZXIgaGFuZGxlciA9IGdlbmVyaWNUaHJvdyh2bSwgZXhlYywgZXhjZXB0aW9uVmFs
dWUsIHZQQ0luZGV4KTsKICAgICBBU1NFUlQoaGFuZGxlci5jYXRjaFJvdXRpbmUpOwogICAgIHJl
dHVybiBkZmdIYW5kbGVyRW5jb2RlZChoYW5kbGVyLmNhbGxGcmFtZSwgaGFuZGxlci5jYXRjaFJv
dXRpbmUpOwogfQogCiBERkdIYW5kbGVyRW5jb2RlZCBERkdfT1BFUkFUSU9OIGxvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXJJblN0dWIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8pCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERh
dGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMp
OworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4
Y2VwdGlvbigpOwogICAgIEFTU0VSVChleGNlcHRpb25WYWx1ZSk7CkBAIC0xNjM4LDE1ICsxNjM4
LDE1IEBAIERGR0hhbmRsZXJFbmNvZGVkIERGR19PUEVSQVRJT04gbG9va3VwRXgKICAgICB3aGls
ZSAoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgIGNvZGVPcmlnaW4gPSBjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOwogICAgIAotICAgIEV4Y2VwdGlvbkhhbmRs
ZXIgaGFuZGxlciA9IGdlbmVyaWNUaHJvdyhnbG9iYWxEYXRhLCBleGVjLCBleGNlcHRpb25WYWx1
ZSwgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICBFeGNlcHRpb25IYW5kbGVyIGhhbmRs
ZXIgPSBnZW5lcmljVGhyb3codm0sIGV4ZWMsIGV4Y2VwdGlvblZhbHVlLCBjb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgpOwogICAgIEFTU0VSVChoYW5kbGVyLmNhdGNoUm91dGluZSk7CiAgICAgcmV0
dXJuIGRmZ0hhbmRsZXJFbmNvZGVkKGhhbmRsZXIuY2FsbEZyYW1lLCBoYW5kbGVyLmNhdGNoUm91
dGluZSk7CiB9CiAKIHNpemVfdCBERkdfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG9JbnQz
MihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewotICAgIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAK
ICAgICAvLyB0b0ludDMyL3RvVUludDMyIHJldHVybiB0aGUgc2FtZSB2YWx1ZTsgd2Ugd2FudCB0
aGUgdmFsdWUgemVybyBleHRlbmRlZCB0byBmaWxsIHRoZSByZWdpc3Rlci4KICAgICByZXR1cm4g
SlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKS50b1VJbnQzMihleGVjKTsKQEAgLTE2NTQsMTYgKzE2NTQs
MTYgQEAgc2l6ZV90IERGR19PUEVSQVRJT04gZGZnQ29udmVydEpTVmFsdWVUbwogCiBzaXplX3Qg
REZHX09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcCkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgcmV0dXJuIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3ApLnRvQm9vbGVhbihleGVjKTsKIH0KIAogdm9pZCBERkdf
T1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUoRXhlY1N0YXRl
KiBleGVjLCB2b2lkKiBkZWJ1Z0luZm9SYXcsIHZvaWQqIHNjcmF0Y2gpCiB7Ci0gICAgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAg
IAogICAgIFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyogZGVidWdJbmZvID0gc3RhdGljX2Nh
c3Q8U3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvKj4oZGVidWdJbmZvUmF3KTsKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGRlYnVnSW5mby0+Y29kZUJsb2NrOwpAQCAtMTc5OCw3ICsxNzk4
LDcgQEAgZXh0ZXJuICJDIiBFbmNvZGVkSlNWYWx1ZSBIT1NUX0NBTExfUkVUVQogewogICAgIGlm
ICghZXhlYykKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+Z2xvYmFsRGF0YSgpLmhvc3RDYWxsUmV0dXJu
VmFsdWUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dm0oKS5ob3N0Q2FsbFJl
dHVyblZhbHVlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQaGFzZS5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgcHJv
dGVjdGVkOgogICAgIC8vIFRoaW5ncyB5b3UgbmVlZCB0byBoYXZlIGEgREZHIGNvbXBpbGVyIHBo
YXNlLgogICAgIEdyYXBoJiBtX2dyYXBoOwogICAgIAotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSgpIHsgcmV0dXJuIG1fZ3JhcGgubV9nbG9iYWxEYXRhOyB9CisgICAgVk0mIHZtKCkgeyBy
ZXR1cm4gbV9ncmFwaC5tX3ZtOyB9CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVy
biBtX2dyYXBoLm1fY29kZUJsb2NrOyB9CiAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrKCkg
eyByZXR1cm4gbV9ncmFwaC5tX3Byb2ZpbGVkQmxvY2s7IH0KICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTcyLDcgKzE3Miw3IEBAIHN0YXRpYyB2b2lkIGxpbmtSZXN0b3JlU2NyYXRjaChMaW5rQnVmZmUK
IAogc3RhdGljIHZvaWQgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBz
aXplX3QgY291bnQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nh
c2VMYWJlbCwgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCiB7Ci0gICAgSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7CiAgICAgICAgIApA
QCAtMjMxLDcgKzIzMSw3IEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0
dWIKICAgICAKICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNj
cmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7CiAgICAgCi0g
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQsIGV4ZWMtPmNv
ZGVCbG9jaygpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGV4
ZWMtPmNvZGVCbG9jaygpKTsKICAgICAKICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZm
ZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN1
Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7CiAgICAgCkBAIC0yNDcsNyArMjQ3LDcgQEAgc3Rh
dGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgIC8vIGxpa2UgdGhlIGlu
dGVycHJldGVyIGRvZXMsIHRoZW4gYWRkIGEgY2hlY2sgZm9yIHJlY3Vyc2lvbi4KIAogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKICAgICAKICAgICBpZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKICAgICAgICAgR1BSUmVnIGJhc2VH
UFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKTsKQEAg
LTI5Miw3ICsyOTIsNyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBl
CiAgICAgICAgIAogICAgICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVz
dG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7CiAg
ICAgICAgIAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1
YkppdCwgY29kZUJsb2NrKTsKKyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZz
dHViSml0LCBjb2RlQmxvY2spOwogICAgICAgICAKICAgICAgICAgbGlua1Jlc3RvcmVTY3JhdGNo
KHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3R1YkluZm8sIHN1Y2Nlc3MsIGZh
aWwsIGZhaWx1cmVDYXNlcyk7CiAgICAgICAgIApAQCAtMzMwLDcgKzMzMCw3IEBAIHN0YXRpYyBi
b29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgfQogCiAgICAgICAgIGRm
Z1JlcGF0Y2hCeUlkU2VsZkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNs
b3QuY2FjaGVkT2Zmc2V0KCksIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QsIHRydWUpOwotICAg
ICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGYoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CisgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlk
U2VsZigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAgLTM1Niw3ICszNTYsNyBAQCBzdGF0aWMg
Ym9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgcmVwbGFjZVdpdGhKdW1wKHJl
cGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSk7CiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LCBvcGVyYXRpb25HZXRCeUlkUHJvdG9CdWlsZExpc3QpOwogICAgIAotICAgIHN0dWJJbmZvLmlu
aXRHZXRCeUlkQ2hhaW4oKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCB0cnVlKTsKKyAgICBzdHViSW5mby5p
bml0R2V0QnlJZENoYWluKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0
dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHRydWUpOwogICAgIHJldHVybiB0cnVlOwogfQog
CkBAIC0zODYsNyArMzg2LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVj
U3RhdAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAg
SlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwog
ICAgIAogICAgIEFTU0VSVChzbG90LnNsb3RCYXNlKCkuaXNPYmplY3QoKSk7CiAgICAgCkBAIC00
MDAsNyArNDAwLDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAog
ICAgICAgICBsaXN0SW5kZXggPSAwOwogICAgIH0gZWxzZSBpZiAoc3R1YkluZm8uYWNjZXNzVHlw
ZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpIHsKICAgICAgICAgQVNTRVJUKCFzdHViSW5mby5z
dHViUm91dGluZSk7Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5
bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZn
LmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKSwgc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0
U3RydWN0dXJlLmdldCgpLCB0cnVlKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0
ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqdm0sIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUo
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKSwgc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2Jq
ZWN0U3RydWN0dXJlLmdldCgpLCB0cnVlKTsKICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRT
ZWxmTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEpOwogICAgICAgICBsaXN0SW5kZXgg
PSAxOwogICAgIH0gZWxzZSB7CkBAIC00MTgsNyArNDE4LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVp
bGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGlj
X2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVHUFIpOwogICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0
ZXJzKS5nZXRGcmVlR1BSKCk7CiAgICAgICAgIAotICAgICAgICBDQ2FsbEhlbHBlcnMgc3R1Ykpp
dChnbG9iYWxEYXRhLCBjb2RlQmxvY2spOworICAgICAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2
bSwgY29kZUJsb2NrKTsKICAgICAgICAgCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHdy
b25nU3RydWN0ID0gc3R1YkppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CiAgICAgICAgIApA
QCAtNTA3LDcgKzUwNyw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0
YXQKICAgICAgICAgICAgIGlzRGlyZWN0ID0gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHViSml0LCBjb2RlQmxvY2spOwor
ICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGNvZGVCbG9jayk7
CiAgICAgICAgIAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbjsKICAg
ICAgICAgaWYgKGxpc3RJbmRleCkKQEAgLTUzMCwxMiArNTMwLDEyIEBAIHN0YXRpYyBib29sIHRy
eUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKICAgICAgICAgICAgICAgICAgICAgKCJERkcgR2V0
QnlJZCBwb2x5bW9ycGhpYyBsaXN0IGFjY2VzcyBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRh
KCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpKSwKLSAgICAgICAgICAgICAgICAqZ2xvYmFsRGF0YSwKKyAgICAg
ICAgICAgICAgICAqdm0sCiAgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwKICAgICAgICAgICAgICAgICBzbG90LmNhY2hlZFByb3BlcnR5VHlwZSgpID09IFByb3Bl
cnR5U2xvdDo6R2V0dGVyCiAgICAgICAgICAgICAgICAgfHwgc2xvdC5jYWNoZWRQcm9wZXJ0eVR5
cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OkN1c3RvbSk7CiAgICAgICAgIAotICAgICAgICBwb2x5bW9y
cGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKmdsb2JhbERhdGEsIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGlzRGlyZWN0
KTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0
KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVy
ZSwgaXNEaXJlY3QpOwogICAgICAgICAKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKGNvZGVCbG9jayk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKApAQCAtNTc3LDE0
ICs1NzcsMTQgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4ZQogICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsK
ICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlw
ZUNoYWluKGV4ZWMpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2Nr
KCk7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsK
KyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICAKICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0
cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsKICAgICBpbnQgbGlzdEluZGV4
ID0gMTsKICAgICAKICAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5
X2lkX2NoYWluKSB7CiAgICAgICAgIEFTU0VSVCghIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKLSAg
ICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1
YkluZm8uc3R1YlJvdXRpbmUsIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1
Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpLCB0cnVlKTsK
KyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJJbmZv
LnN0dWJSb3V0aW5lLCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJl
LmdldCgpLCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5jaGFpbi5nZXQoKSwgdHJ1ZSk7CiAgICAg
ICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lLmNsZWFyKCk7CiAgICAgICAgIHN0dWJJbmZvLmluaXRH
ZXRCeUlkUHJvdG9MaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSk7CiAgICAgfSBlbHNl
IHsKQEAgLTYwMyw3ICs2MDMsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURQcm90b0xp
c3QoRXhlCiAgICAgICAgIAogICAgICAgICBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKGV4
ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgc3RydWN0dXJlLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9Eb25lKSwgbGFzdFByb3RvQmVnaW4sIHN0dWJSb3V0aW5lKTsKICAgICAg
ICAgCi0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNl
dCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUs
IHN0cnVjdHVyZSwgdHJ1ZSk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlz
dFtsaXN0SW5kZXhdLnNldCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJS
b3V0aW5lLCBzdHJ1Y3R1cmUsIHRydWUpOwogICAgICAgICAKICAgICAgICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgICAgIHJlcGxhY2VXaXRoSnVtcChyZXBh
dGNoQnVmZmVyLCBzdHViSW5mbywgc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwpAQCAtNjU3
LDcgKzY1Nyw3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRSZXBsYWNlU3R1YigKICAgICBDb2RlTG9j
YXRpb25MYWJlbCBmYWlsdXJlTGFiZWwsCiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1
YlJvdXRpbmUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2Jh
bERhdGEoKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBHUFJSZWcgYmFzZUdQUiA9
IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOwogI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCiAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BS
UmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIpOwpAQCAtNzMzLDcgKzczMyw3IEBA
IHN0YXRpYyB2b2lkIGVtaXRQdXRSZXBsYWNlU3R1YigKICAgICAgICAgZmFpbHVyZSA9IGJhZFN0
cnVjdHVyZTsKICAgICB9CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFs
RGF0YSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCp2bSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpKTsKICAgICBwYXRjaEJ1ZmZl
ci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJlbCk7CiAgICAgICAgICAgICAKQEAgLTc1Nyw3ICs3NTcs
NyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgQ29kZUxvY2F0aW9u
TGFiZWwgZmFpbHVyZUxhYmVsLAogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0
aW5lKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRh
KCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAKICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0
YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOwogI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCkBAIC03NzIsNyArNzcyLDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5z
aXRpb25TdHViKAogI2VuZGlmCiAgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVHUFIpOwogICAgIAot
ICAgIENDYWxsSGVscGVycyBzdHViSml0KGdsb2JhbERhdGEpOworICAgIENDYWxsSGVscGVycyBz
dHViSml0KHZtKTsKICAgICAgICAgICAgIAogICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9j
YXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0gYmFz
ZUdQUik7CkBAIC04NDAsNyArODQwLDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25T
dHViKAogICAgIAogICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xk
U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CiAgICAgICAgIHNpemVfdCBuZXdTaXpl
ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwotICAg
ICAgICBDb3BpZWRBbGxvY2F0b3IqIGNvcGllZEFsbG9jYXRvciA9ICZnbG9iYWxEYXRhLT5oZWFw
LnN0b3JhZ2VBbGxvY2F0b3IoKTsKKyAgICAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3BpZWRBbGxv
Y2F0b3IgPSAmdm0tPmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOwogICAgICAgICAKICAgICAgICAg
aWYgKCFvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKICAgICAgICAgICAgIHN0
dWJKaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0
Y2hHUFIxKTsKQEAgLTkxMiw3ICs5MTIsNyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlv
blN0dWIoCiAgICAgICAgIHNsb3dQYXRoLmxpbmsoJnN0dWJKaXQpOwogICAgICAgICAKICAgICAg
ICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCk7Ci0g
ICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBnbG9iYWxEYXRhLT5zY3JhdGNo
QnVmZmVyRm9yU2l6ZShhbGxvY2F0b3IuZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplKCkpOworICAg
ICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JT
aXplKGFsbG9jYXRvci5kZXNpcmVkU2NyYXRjaEJ1ZmZlclNpemUoKSk7CiAgICAgICAgIGFsbG9j
YXRvci5wcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXIoc3R1YkppdCwgc2NyYXRj
aEJ1ZmZlciwgc2NyYXRjaEdQUjEpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIHN0dWJK
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2xv
dC5jYWNoZWRPZmZzZXQoKSksIHZhbHVlR1BSKTsKQEAgLTkyNCw3ICs5MjQsNyBAQCBzdGF0aWMg
dm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgICAgIHN1Y2Nlc3NJblNsb3dQYXRoID0g
c3R1YkppdC5qdW1wKCk7CiAgICAgfQogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
Kmdsb2JhbERhdGEsICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7CisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7CiAgICAgcGF0
Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgaWYgKGFs
bG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZh
aWx1cmUsIGZhaWx1cmVMYWJlbCk7CkBAIC05NDQsNyArOTQ0LDcgQEAgc3RhdGljIHZvaWQgZW1p
dFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0
cnVjdHVyZSwKICAgICAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2so
KSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKLSAgICAgICAgICAgICpnbG9iYWxEYXRhLAorICAgICAg
ICAgICAgKnZtLAogICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJs
ZSgpLAogICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwKICAgICAgICAgICAgIHN0cnVjdHVyZSk7CkBA
IC05NTMsNyArOTUzLDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogc3Rh
dGljIGJvb2wgdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFs
dWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQogewogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKIAogICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC0xMDAyLDEzICsxMDAyLDEzIEBAIHN0YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJRChF
eGVjU3RhdGUqIGUKICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5z
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGlu
Z1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqZ2xvYmFsRGF0YSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNo
YWluLCBwdXRLaW5kID09IERpcmVjdCk7CisgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJ
ZFRyYW5zaXRpb24oKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBvbGRTdHJ1Y3R1
cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIHB1dEtpbmQgPT0gRGlyZWN0KTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBk
ZmdSZXBhdGNoQnlJZFNlbGZBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBz
bG90LmNhY2hlZE9mZnNldCgpLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlv
bihzbG90LCBwdXRLaW5kKSwgZmFsc2UpOwotICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJl
cGxhY2UoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVy
ZSk7CisgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZSgqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIApAQCAtMTAyNSw3ICsxMDI1LDcgQEAgdm9pZCBkZmdSZXBhdGNoUHV0QnlJRChFeGVjU3Rh
dGUqIGV4ZWMsIAogc3RhdGljIGJvb2wgdHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQ
dXRLaW5kIHB1dEtpbmQpCiB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2Rl
QmxvY2soKTsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0
YSgpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogCiAgICAgaWYgKCFiYXNlVmFsdWUuaXND
ZWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNzcsNyArMTA3Nyw3IEBAIHN0YXRp
YyBib29sIHRyeUJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXQKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgbGlzdC0+YWRkQWNjZXNzKAogICAgICAgICAgICAgICAgIFB1dEJ5SWRBY2Nlc3M6OnRy
YW5zaXRpb24oCi0gICAgICAgICAgICAgICAgICAgICpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLAorICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksCiAgICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0
dXJlLCBwcm90b3R5cGVDaGFpbiwKICAgICAgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUpKTsK
ICAgICAgICAgfSBlbHNlIHsKQEAgLTEwOTIsNyArMTA5Miw3IEBAIHN0YXRpYyBib29sIHRyeUJ1
aWxkUHV0QnlJZExpc3QoRXhlY1N0YXQKICAgICAgICAgICAgIAogICAgICAgICAgICAgbGlzdC0+
YWRkQWNjZXNzKAogICAgICAgICAgICAgICAgIFB1dEJ5SWRBY2Nlc3M6OnJlcGxhY2UoCi0gICAg
ICAgICAgICAgICAgICAgICpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LAorICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
CiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgc3R1YlJvdXRpbmUpKTsKICAgICAgICAg
fQogICAgICAgICAKQEAgLTExMTUsMTQgKzExMTUsMTQgQEAgdm9pZCBkZmdCdWlsZFB1dEJ5SWRM
aXN0KEV4ZWNTdGF0ZSogZXhlYwogICAgICAgICBkZmdSZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxv
Y2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRC
eUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwogfQogCi1zdGF0aWMgdm9pZCBsaW5rU2xvd0Zv
cihSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
CitzdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBW
TSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQpCiB7CiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgZ2xvYmFsRGF0
YS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOworICAgICAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLCB2
bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwot
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24s
IGdsb2JhbERhdGEtPmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKS5j
b2RlKCkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24sIHZtLT5nZXRDVElTdHViKHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvciku
Y29kZSgpKTsKIH0KIAogdm9pZCBkZmdMaW5rRm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJ
bmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBKU0Z1bmN0aW9u
KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCkBAIC0xMTMwLDM1ICsxMTMwLDM1IEBAIHZvaWQgZGZnTGlua0ZvcihFeGVj
U3RhdGUqIGV4ZWMsIENhbGxMaW4KICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKTsKICAg
ICAKICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZyYW1lKCkt
PmNvZGVCbG9jaygpOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IGNhbGxlckNvZGVC
bG9jay0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsK
ICAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsK
ICAgICAKICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKLSAgICBjYWxsTGlu
a0luZm8uY2FsbGVlLnNldChleGVjLT5jYWxsZXJGcmFtZSgpLT5nbG9iYWxEYXRhKCksIGNhbGxM
aW5rSW5mby5ob3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IGNhbGxlZSk7Ci0gICAgY2FsbExpbmtJbmZvLmxhc3RTZWVuQ2FsbGVlLnNldChleGVjLT5jYWxs
ZXJGcmFtZSgpLT5nbG9iYWxEYXRhKCksIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIGNhbGxlZSk7CisgICAgY2FsbExpbmtJbmZvLmNhbGxlZS5zZXQoZXhlYy0+Y2FsbGVyRnJh
bWUoKS0+dm0oKSwgY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbiwgY2FsbGVyQ29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKKyAgICBjYWxsTGlua0luZm8ubGFzdFNlZW5DYWxs
ZWUuc2V0KGV4ZWMtPmNhbGxlckZyYW1lKCktPnZtKCksIGNhbGxlckNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIGNhbGxlZSk7CiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJ
bmZvLmhvdFBhdGhPdGhlciwgY29kZVB0cik7CiAgICAgCiAgICAgaWYgKGNhbGxlZUNvZGVCbG9j
aykKICAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKCZjYWxsTGlua0lu
Zm8pOwogICAgIAogICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7Ci0gICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGdsb2JhbERh
dGEtPmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7Cisg
ICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24sIHZtLT5nZXRDVElTdHViKGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIEFTU0VSVChraW5kID09IENvZGVG
b3JDb25zdHJ1Y3QpOwotICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIGdsb2JhbERhdGEs
IGNhbGxMaW5rSW5mbywgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgbGlua1Nsb3dGb3IocmVwYXRj
aEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgQ29kZUZvckNvbnN0cnVjdCk7CiB9CiAKIHZvaWQg
ZGZnTGlua1Nsb3dGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5m
bywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIENvZGVCbG9jayogY2FsbGVy
Q29kZUJsb2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7Ci0gICAgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhID0gY2FsbGVyQ29kZUJsb2NrLT5nbG9iYWxEYXRhKCk7CisgICAg
Vk0qIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwogICAgIAotICAgIGxpbmtTbG93Rm9yKHJl
cGF0Y2hCdWZmZXIsIGdsb2JhbERhdGEsIGNhbGxMaW5rSW5mbywga2luZCk7CisgICAgbGlua1Ns
b3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywga2luZCk7CiB9CiAKIHZvaWQg
ZGZnTGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlu
a0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
RXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRy
KQpAQCAtMTE2NiwxMSArMTE2NiwxMSBAQCB2b2lkIGRmZ0xpbmtDbG9zdXJlQ2FsbChFeGVjU3Rh
dGUqIGV4ZWMsCiAgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1Yik7CiAgICAgCiAgICAgQ29k
ZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2so
KTsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBjYWxsZXJDb2RlQmxvY2stPmdsb2Jh
bERhdGEoKTsKKyAgICBWTSogdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7CiAgICAgCiAgICAg
R1BSUmVnIGNhbGxlZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oY2FsbExpbmtJbmZvLmNhbGxl
ZUdQUik7CiAgICAgCi0gICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQoZ2xvYmFsRGF0YSwgY2FsbGVy
Q29kZUJsb2NrKTsKKyAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSwgY2FsbGVyQ29kZUJsb2Nr
KTsKICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgIApAQCAt
MTIyMywxMSArMTIyMywxMSBAQCB2b2lkIGRmZ0xpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4
ZWMsCiAgICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZv
Ojpub25BcmdHUFIyKTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93ID0gc3R1YkppdC5qdW1w
KCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJK
aXQsIGNhbGxlckNvZGVCbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZz
dHViSml0LCBjYWxsZXJDb2RlQmxvY2spOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoY2Fs
bCwgRnVuY3Rpb25QdHIoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgcGF0Y2hC
dWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoMCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwo
Z2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkp
KTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsKHZtLT5nZXRD
VElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgIAogICAgIFJl
ZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGFkb3B0UmVmKG5ldyBD
bG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAogICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKQEAgLTEy
MzUsMTQgKzEyMzUsMTQgQEAgdm9pZCBkZmdMaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVj
LAogICAgICAgICAgICAgKCJERkcgY2xvc3VyZSBjYWxsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9p
bnQgJXAsIHRhcmdldCAlcCAoJXMpIiwKICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmNhbGxl
ckNvZGVCbG9jaykuZGF0YSgpLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoMCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICBjb2RlUHRy
LmV4ZWN1dGFibGVBZGRyZXNzKCksIHRvQ1N0cmluZyhwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxv
Y2spKS5kYXRhKCkpKSwKLSAgICAgICAgKmdsb2JhbERhdGEsIGNhbGxlckNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgZXhlY3V0YWJsZSwgY2FsbExpbmtJbmZvLmNvZGVP
cmlnaW4pKTsKKyAgICAgICAgKnZtLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBzdHJ1Y3R1cmUsIGV4ZWN1dGFibGUsIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKSk7CiAgICAg
CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7CiAgICAg
CiAgICAgcmVwYXRjaEJ1ZmZlci5yZXBsYWNlV2l0aEp1bXAoCiAgICAgICAgIFJlcGF0Y2hCdWZm
ZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGNhbGxMaW5rSW5mby5ob3RQ
YXRoQmVnaW4pLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKSkpOwotICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIGdsb2JhbERhdGEsIGNh
bGxMaW5rSW5mbywgQ29kZUZvckNhbGwpOworICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIs
IHZtLCBjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsKTsKICAgICAKICAgICBjYWxsTGlua0luZm8u
c3R1YiA9IHN0dWJSb3V0aW5lLnJlbGVhc2UoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNp
b24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4OSwxMiArMTI4OSwxMiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpCiAgICAgICAgICAgICBKU1ZhbHVlU291
cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY09iamVjdCwgbV9q
aXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Cisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBERkdfVFlQRV9DSEVDSygKICAgICAg
ICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigp
LCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhv
cDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKICAgICAgICAgR1BSUmVnIHN0
cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKQEAgLTEzMDQsNyArMTMwNCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGkKICAgICAgICAgICAgIEpTVmFsdWVT
b3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjT2JqZWN0LCBt
X2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAK
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSkpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2Rl
LT5jaGlsZDEoKSwgCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0xMzE2LDcgKzEzMTYsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpCiAgICAgICAgICAgICBKU1ZhbHVl
U291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLT5jaGlsZDIoKSwgU3BlY09iamVjdCwg
bV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
CiAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAKLSAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9k
ZS0+Y2hpbGQyKCksIAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIApAQCAtMTM2NiwxNCArMTM2NiwxNCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAgICAgICAgICAgICBKU1Zh
bHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1f
aml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCkt
PnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2ppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7CiAgICAgICAgIERGR19UWVBFX0NIRUNLKAogICAgICAg
ICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCBTcGVj
T2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLAogICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwKLSAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BS
KSwgbGVmdENoaWxkLCAKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAgLTEzOTUsNyArMTM5NSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamUKICAgICAgICAgICAgIG1faml0
LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMlBheWxvYWRHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkp
KTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52
bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9q
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJQYXlsb2FkR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKICAgICAgICAgREZHX1RZUEVfQ0hF
Q0soCkBAIC0xNDAzLDcgKzE0MDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2Jq
ZWN0VG9PYmplCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAogICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwKLSAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkp
KSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyVGFn
R1BSLCBvcDJQYXlsb2FkR1BSKSwgcmlnaHRDaGlsZCwgCiAgICAgICAgICAgICBtX2ppdC5icmFu
Y2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0x
NDc0LDE0ICsxNDc0LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9i
amUKICAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRD
aGlsZCwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKICAgICAgICAgREZH
X1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFH
UFIpLCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQ
UiwgCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3Vy
Y2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwKICAgICAgICAgICAgIG1faml0LmJy
YW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAg
LTE1MDIsNyArMTUwMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9i
amUKICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KG9wMlBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhv
cDJQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsK
ICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCkBAIC0xNTEwLDcgKzE1MTAsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQ
dHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmVHUFIsIAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCkt
PnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlUmVncyhvcDJUYWdHUFIsIG9wMlBheWxvYWRHUFIpLCByaWdodENoaWxkLAog
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIApAQCAtMTYyMSw3ICsxNjIxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIHN0cnVjdHVyZUdQUik7CiAKQEAgLTE2MzAsNyArMTYzMCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0
cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCiAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlR1BSLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBp
c05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSAKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRl
c3Q4KApAQCAtMTc1MSw3ICsxNzUxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVj
dE9yT3RoZXJCcgogICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3ModmFsdWVQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0g
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFs
RGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgp
KSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3ModmFsdWVQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7CiAKQEAgLTE3NjAsNyArMTc2MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRPYmplY3RPck90aGVyQnIKICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIHNjcmF0Y2hH
UFIsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSkpOwogCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IG1faml0LmJyYW5jaFRlc3Q4KEpJVENvbXBpbGVyOjpaZXJvLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAKQEAgLTI2ODYs
MzEgKzI2ODYsMzEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMobm9kZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5
RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7Cisg
ICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50
OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJh
eSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToK
LSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxE
YXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgU2ln
bmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJy
YXkobV9qaXQudm0oKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDE2
X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBl
ZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwg
c2l6ZW9mKGludDMyX3QpLCBTaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigp
LCBub2RlLCBzaXplb2YoaW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5
RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7
CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+
dWludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5
cGVkQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4
Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5
KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUs
IHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGNvbXBp
bGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OENsYW1wZWRBcnJheURl
c2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAg
ICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEo
KS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2ln
bmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJy
YXkobV9qaXQudm0oKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50
MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbklu
dFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwg
bm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAg
IGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MzJBcnJheURl
c2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0g
ICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxE
YXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7Cisg
ICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5m
bG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihmbG9hdCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAg
IGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+Zmxv
YXQ2NEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSk7CisgICAgICAgICAg
ICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDY0QXJy
YXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKQEAgLTI4OTIsMzkgKzI4OTIsMzkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50
VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgYmFz
ZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQ4X3QpLCBTaWduZWRUeXBl
ZEFycmF5KTsKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9q
aXQudm0oKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIo
KSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAg
ICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0
YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwg
bm9kZSwgc2l6ZW9mKGludDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGNv
bXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MTZBcnJheURlc2Ny
aXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQxNl90
KSwgU2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5
VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlw
dG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCks
IFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlw
ZWRBcnJheShtX2ppdC52bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBw
cm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBTaWduZWRUeXBlZEFycmF5KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OlVp
bnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1f
aml0Lmdsb2JhbERhdGEoKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJv
cGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsK
KyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+
dWludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUs
IHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5Ogot
ICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxE
YXRhKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0
eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXksIENsYW1w
Um91bmRpbmcpOworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheSht
X2ppdC52bSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJv
cGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5LCBD
bGFtcFJvdW5kaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9y
SW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigp
LCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5z
aWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVk
QXJyYXkobV9qaXQudm0oKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHBy
b3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDE2X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6
VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5
KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCks
IHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBVbnNpZ25lZFR5cGVkQXJy
YXkpOworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52
bSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCks
IG5vZGUsIHNpemVvZih1aW50MzJfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6
Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xv
YmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5
LmdwcigpLCBub2RlLCBzaXplb2YoZmxvYXQpKTsKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZh
bEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCks
IGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZmxvYXQpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRB
cnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2pp
dC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJv
cGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKKyAgICAgICAgICAgIGNvbXBpbGVQ
dXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlw
dG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgpAQCAt
MzMxNyw3ICszMzE3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICAgICAgbV9qaXQubW92ZShvcDFQYXlsb2FkR1BSLCByZXN1bHRQYXlsb2FkR1BS
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFs
cmVhZHlQcmltaXRpdmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IG9wMVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdFByaW1pdGl2ZSA9IG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMVBheWxvYWRH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxUGF5
bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBhbHJlYWR5UHJpbWl0aXZlLmxpbmsoJm1faml0KTsKICAgICAgICAg
ICAgIG1faml0Lm1vdmUob3AxVGFnR1BSLCByZXN1bHRUYWdHUFIpOwpAQCAtMzM1MSw3ICszMzUx
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoMiA9IG1faml0LmJyYW5jaFB0cigKICAg
ICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAogICAgICAgICAgICAgICAg
ICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhvcDFQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOworICAgICAgICAgICAgICAgICAgICBU
cnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwogICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUob3AxUGF5bG9hZEdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAg
ICAgICAgICBkb25lID0gbV9qaXQuanVtcCgpOwogICAgICAgICAgICAgICAgIHNsb3dQYXRoMS5s
aW5rKCZtX2ppdCk7CkBAIC0zNDU5LDcgKzM0NTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHNpemVfdCBz
Y3JhdGNoU2l6ZSA9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBub2RlLT5udW1DaGlsZHJlbigp
OwotICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbV9qaXQuZ2xvYmFsRGF0
YSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7CisgICAgICAgIFNjcmF0Y2hC
dWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBtX2ppdC52bSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShz
Y3JhdGNoU2l6ZSk7CiAgICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzY3JhdGNoQnVm
ZmVyID8gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVm
ZmVyKCkpIDogMDsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZElkeCA9
IDA7IG9wZXJhbmRJZHggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJZHgpIHsKQEAg
LTM3NDYsNyArMzc0Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbm9kZS0+c3RydWN0
dXJlKCk7CiAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTT2JqZWN0OjphbGxvY2F0
aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBNYXJrZWRBbGxv
Y2F0b3IqIGFsbG9jYXRvclB0ciA9ICZtX2ppdC5nbG9iYWxEYXRhKCktPmhlYXAuYWxsb2NhdG9y
Rm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3IoYWxsb2NhdGlvblNpemUpOworICAgICAgICBNYXJr
ZWRBbGxvY2F0b3IqIGFsbG9jYXRvclB0ciA9ICZtX2ppdC52bSgpLT5oZWFwLmFsbG9jYXRvckZv
ck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKGFsbG9jYXRpb25TaXplKTsKIAogICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yUHRyKSwgYWxsb2NhdG9yR1BSKTsKICAgICAg
ICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJ
bW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0cigwKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgp
OwpAQCAtNDQwMiw3ICs0NDAyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90U3RyaW5nID0gbV9qaXQu
YnJhbmNoOChKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHRlbXBH
UFIsIFN0cnVjdHVyZTo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5n
VHlwZSkpOwogICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTdHJp
bmdVc2UpCiAgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soSlNWYWx1ZVJlZ3ModGFnR1BS
LCBwYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNTdHJpbmcsIG5vdFN0cmluZyk7Ci0g
ICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5z
bWFsbFN0cmluZ3Muc3RyaW5nU3RyaW5nKCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy5zdHJpbmdTdHJp
bmcoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1
bXAoKSk7CiAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpICE9IFN0cmlu
Z1VzZSkgewogICAgICAgICAgICAgICAgIG5vdFN0cmluZy5saW5rKCZtX2ppdCk7CkBAIC00NDE5
LDIyICs0NDE5LDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
IAogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCB0YWdHUFIsIHRlbXBH
UFIpOwogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90TnVtYmVyID0gbV9qaXQuYnJh
bmNoMzIoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgdGVtcEdQUiwgSklUQ29tcGlsZXI6OlRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcgKyAxKSk7Ci0gICAgICAgICAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zbWFsbFN0cmluZ3MubnVtYmVy
U3RyaW5nKCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
UHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy5udW1iZXJTdHJpbmcoKSksIHJlc3VsdEdQUik7
CiAgICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAg
ICBub3ROdW1iZXIubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBub3RVbmRlZmluZWQgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHRh
Z0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZykpOwotICAgICAgICAgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c21hbGxTdHJpbmdz
LnVuZGVmaW5lZFN0cmluZygpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3MudW5kZWZpbmVkU3RyaW5nKCkp
LCByZXN1bHRHUFIpOwogICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkp
OwogICAgICAgICAgICAgbm90VW5kZWZpbmVkLmxpbmsoJm1faml0KTsKIAogICAgICAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgbm90TnVsbCA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpO
b3RFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykpOwotICAgICAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c21hbGxT
dHJpbmdzLm9iamVjdFN0cmluZygpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCkp
LCByZXN1bHRHUFIpOwogICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkp
OwogICAgICAgICAgICAgbm90TnVsbC5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgIC8vIE9u
bHkgYm9vbGVhbiBsZWZ0Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5zbWFsbFN0cmluZ3MuYm9vbGVhblN0cmluZygpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFs
bFN0cmluZ3MuYm9vbGVhblN0cmluZygpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgfQogICAgICAg
ICBkb25lSnVtcHMubGluaygmbV9qaXQpOwogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMTUsMTIg
KzEzMTUsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaQogICAg
ICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQx
KCksIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3Ry
dWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgREZH
X1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJH
UFIpLCBub2RlLT5jaGlsZDIoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0g
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFs
RGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgp
KSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7
CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CkBAIC0xMzMw
LDcgKzEzMzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpCiAg
ICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGls
ZDEoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAKLSAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7
CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hl
ZENlbGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hU
ZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0xMzQy
LDcgKzEzNDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpCiAg
ICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLT5jaGls
ZDIoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAKLSAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7
CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hl
ZENlbGwob3AyR1BSKSwgbm9kZS0+Y2hpbGQyKCksCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hU
ZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0xMzg4
LDE0ICsxMzg4LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamUK
ICAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGls
ZCwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
b3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKICAgICAgICAgREZHX1RZ
UEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIp
LCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCiAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLAot
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1
bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hU
ZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0xNDE1
LDE0ICsxNDE1LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamUK
ICAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsICh+U3BlY0NlbGwp
IHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
b3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKICAgICAgICAgREZHX1RZ
UEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLCAo
flNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCiAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLAot
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJH
UFIpLCByaWdodENoaWxkLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIApAQCAtMTQ5MiwxNCArMTQ5MiwxNCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgICAgICAgICBK
U1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3Qs
IG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkp
OworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZt
KCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7CiAgICAgICAgIERGR19UWVBFX0NIRUNLKAogICAg
ICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCBT
cGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAotICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3Ry
aW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChv
cDFHUFIpLCBsZWZ0Q2hpbGQsIAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIApAQCAtMTUxOSwxNCArMTUxOSwx
NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgICAgICAg
ICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLCAoflNwZWNDZWxsKSB8IFNwZWNPYmpl
Y3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgp
KSkpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7CiAgICAgICAgIERGR19UWVBFX0NIRUNLKAog
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2VsbCkg
fCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdo
dENoaWxkLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIApAQCAtMTYzMSw3ICsxNjMxLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mo
dmFsdWVHUFIpLCBub2RlVXNlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5j
aFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCiAgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgc3RydWN0dXJlR1BSKTsKIApAQCAtMTYzOSw3ICsxNjM5LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVH
UFIpLCBub2RlVXNlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigK
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCiAgICAgICAgICAgICAgICAg
c3RydWN0dXJlR1BSLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSkpKTsKIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc05v
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSAKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4
KApAQCAtMTc3NCw3ICsxNzc0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9y
T3RoZXJCcgogICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCAoflNw
ZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2
YWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogCkBAIC0x
NzgyLDcgKzE3ODIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJy
CiAgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsICh+U3BlY0NlbGwp
IHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiwKLSAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAKICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gbV9q
aXQuYnJhbmNoVGVzdDgoSklUQ29tcGlsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKIApAQCAtMjU4NSwzMSArMjU4NSwzMSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkFyZ3VtZW50cyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbklu
dFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5v
ZGUsIHNpemVvZihpbnQ4X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGNvbXBp
bGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9y
KCksIG5vZGUsIHNpemVvZihpbnQ4X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAgICAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50MTZBcnJh
eURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsK
KyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5p
bnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIFNpZ25lZFR5cGVk
QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJy
YXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xv
YmFsRGF0YSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCks
IFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBl
ZEFycmF5KG1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihp
bnQzMl90KSwgU2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50
VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5v
ZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OEFycmF5RGVzY3Jp
cHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0g
ICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0
YSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3Qp
LCBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRU
eXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBub2Rl
LCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxl
R2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURl
c2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsK
KyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51
aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRU
eXBlZEFycmF5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpVaW50
MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2pp
dC5nbG9iYWxEYXRhKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWlu
dDMyX3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFs
T25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2Rl
LCBzaXplb2YodWludDMyX3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBp
bGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFy
cmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoZmxvYXQpKTsKKyAgICAgICAgICAgIGNvbXBp
bGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0MzJBcnJheURlc2Ny
aXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFs
T25GbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlw
dG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZh
bE9uRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwg
bm9kZSwgc2l6ZW9mKGRvdWJsZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjg3Niwz
OSArMjg3NiwzOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0g
ICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERh
dGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwg
bm9kZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgY29t
cGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlw
dG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwg
U2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFs
Rm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9y
KCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIFNp
Z25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRB
cnJheShtX2ppdC52bSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9w
ZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMy
QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0
Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVy
dHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAg
ICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDMy
QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXpl
b2YoaW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGNv
bXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFy
cmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9m
KHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgY29tcGlsZVB1dEJ5
VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBi
YXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25l
ZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlW
YWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhDbGFtcGVkQXJyYXlE
ZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWlu
dDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7CisgICAgICAgICAgICBj
b21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFy
cmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9m
KHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6
Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2Jh
bERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdw
cigpLCBub2RlLCBzaXplb2YodWludDE2X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAg
ICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MTZB
cnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVv
Zih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAg
IGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50
MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNp
emVvZih1aW50MzJfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBjb21waWxl
UHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQzMkFycmF5RGVzY3JpcHRv
cigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwg
VW5zaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRC
eVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURl
c2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihmbG9h
dCkpOworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0
LnZtKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3By
KCksIG5vZGUsIHNpemVvZihmbG9hdCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgY29tcGls
ZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFy
cmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9m
KGRvdWJsZSkpOworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5
KG1faml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVy
dHkuZ3ByKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CkBAIC0zMjM1LDcgKzMyMzUsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5tb3Zl
KG9wMUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBhbHJlYWR5UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCBvcDFHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7Ci0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RQcmltaXRpdmUgPSBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhv
cDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOworICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3Ax
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGFscmVhZHlQcmltaXRpdmUubGluaygmbV9qaXQpOwogICAgICAgICAgICAg
bV9qaXQubW92ZShvcDFHUFIsIHJlc3VsdEdQUik7CkBAIC0zMjY1LDcgKzMyNjUsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgc2xvd1BhdGgyID0gbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCiAgICAgICAgICAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAg
ICAgICAgICAgICAgICAgIFRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihtX2pp
dC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlKG9wMUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgICAgICBkb25lID0gbV9qaXQuanVt
cCgpOwogICAgICAgICAgICAgICAgIHNsb3dQYXRoMS5saW5rKCZtX2ppdCk7CkBAIC0zMzcxLDcg
KzMzNzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIHNpemVfdCBzY3JhdGNoU2l6ZSA9IHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkgKiBub2RlLT5udW1DaGlsZHJlbigpOwotICAgICAgICBTY3JhdGNoQnVmZmVy
KiBzY3JhdGNoQnVmZmVyID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6
ZShzY3JhdGNoU2l6ZSk7CisgICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBt
X2ppdC52bSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7CiAgICAgICAgIEVu
Y29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzY3JhdGNoQnVmZmVyID8gc3RhdGljX2Nhc3Q8RW5jb2Rl
ZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogMDsKICAgICAgICAgCiAg
ICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZElkeCA9IDA7IG9wZXJhbmRJZHggPCBub2RlLT5u
dW1DaGlsZHJlbigpOyArK29wZXJhbmRJZHgpIHsKQEAgLTM2NTMsNyArMzY1Myw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IG5vZGUtPnN0cnVjdHVyZSgpOwogICAgICAgICBzaXplX3QgYWxsb2NhdGlv
blNpemUgPSBKU09iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0
eSgpKTsKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JQdHIgPSAmbV9qaXQuZ2xv
YmFsRGF0YSgpLT5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKGFsbG9j
YXRpb25TaXplKTsKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JQdHIgPSAmbV9q
aXQudm0oKS0+aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihhbGxvY2F0
aW9uU2l6ZSk7CiAKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvclB0
ciksIGFsbG9jYXRvckdQUik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQ
UiwgYWxsb2NhdG9yR1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIFRydXN0ZWRJbW1QdHIo
MCksIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKQEAgLTQyOTAsNyArNDI5MCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIG5vdFN0cmluZyA9IG1faml0LmJyYW5jaDgoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBK
SVRDb21waWxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKTsKICAgICAgICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKQogICAgICAgICAgICAgICAgIERGR19UWVBF
X0NIRUNLKEpTVmFsdWVTb3VyY2UodmFsdWVHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY1N0cmlu
Zywgbm90U3RyaW5nKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPnNtYWxsU3RyaW5ncy5zdHJpbmdTdHJpbmcoKSksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxT
dHJpbmdzLnN0cmluZ1N0cmluZygpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGRvbmVKdW1w
cy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgIT0gU3RyaW5nVXNlKSB7CiAgICAgICAgICAgICAgICAgbm90U3RyaW5nLmxpbmso
Jm1faml0KTsKQEAgLTQzMDUsMjIgKzQzMDUsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09
IFVudHlwZWRVc2UpIHsKICAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7CiAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3ROdW1iZXIgPSBtX2ppdC5icmFuY2hUZXN0NjQo
SklUQ29tcGlsZXI6Olplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpOwotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+c21hbGxTdHJpbmdzLm51bWJlclN0cmluZygpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3MubnVt
YmVyU3RyaW5nKCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZCht
X2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgbm90TnVtYmVyLmxpbmsoJm1faml0KTsKIAogICAg
ICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VW5kZWZpbmVkID0gbV9qaXQuYnJhbmNoNjQo
SklUQ29tcGlsZXI6Ok5vdEVxdWFsLCB2YWx1ZUdQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW02
NChWYWx1ZVVuZGVmaW5lZCkpOwotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+c21hbGxTdHJpbmdzLnVuZGVmaW5lZFN0cmluZygpKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgp
LT5zbWFsbFN0cmluZ3MudW5kZWZpbmVkU3RyaW5nKCkpLCByZXN1bHRHUFIpOwogICAgICAgICAg
ICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgbm90VW5kZWZp
bmVkLmxpbmsoJm1faml0KTsKIAogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90TnVs
bCA9IG1faml0LmJyYW5jaDY0KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgdmFsdWVHUFIsIEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3Ry
aW5nKCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRy
KG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy5vYmplY3RTdHJpbmcoKSksIHJlc3VsdEdQUik7CiAg
ICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBu
b3ROdWxsLmxpbmsoJm1faml0KTsKIAogICAgICAgICAgICAgLy8gT25seSBib29sZWFuIGxlZnQK
LSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PnNtYWxsU3RyaW5ncy5ib29sZWFuU3RyaW5nKCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy5ib29sZWFu
U3RyaW5nKCkpLCByZXN1bHRHUFIpOwogICAgICAgICB9CiAgICAgICAgIGRvbmVKdW1wcy5saW5r
KCZtX2ppdCk7CiAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZp
c2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQ2LDIzICs2NDYsMjMgQEAgY29uc3QgVHlwZWRB
cnJheURlc2NyaXB0b3IqIFNwZWN1bGF0aXZlSgogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5
cGUoKSkgewogICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2pp
dC5nbG9iYWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0b3IoKTsKKyAgICAgICAgcmV0dXJuICZt
X2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCk7CiAgICAgY2FzZSBBcnJheTo6SW50MTZB
cnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNj
cmlwdG9yKCk7CisgICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+aW50MTZBcnJheURlc2NyaXB0
b3IoKTsKICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0
Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKTsKKyAgICAgICAgcmV0dXJuICZt
X2ppdC52bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpOwogICAgIGNhc2UgQXJyYXk6OlVpbnQ4
QXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVz
Y3JpcHRvcigpOworICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPnVpbnQ4QXJyYXlEZXNjcmlw
dG9yKCk7CiAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgIHJldHVy
biAmbV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKTsKKyAg
ICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKTsK
ICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC5nbG9i
YWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpOworICAgICAgICByZXR1cm4gJm1faml0
LnZtKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpOwogICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFy
cmF5OgotICAgICAgICByZXR1cm4gJm1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNj
cmlwdG9yKCk7CisgICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+dWludDMyQXJyYXlEZXNjcmlw
dG9yKCk7CiAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICByZXR1cm4gJm1f
aml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpOworICAgICAgICByZXR1
cm4gJm1faml0LnZtKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKTsKICAgICBjYXNlIEFycmF5
OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9h
dDY0QXJyYXlEZXNjcmlwdG9yKCk7CisgICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+ZmxvYXQ2
NEFycmF5RGVzY3JpcHRvcigpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KQEAgLTE0MjAsNyArMTQyMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVw
SG9sZU9iamUKICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAot
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9k
ZS0+Y2hpbGQyKCkpLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7CiAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKApAQCAtMTQyOCw3ICsxNDI4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVBlZXBIb2xlT2JqZQogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBH
UFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwpAQCAtMTQ0MSw3ICsxNDQxLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAK
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAKLSAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAg
ICAgfQogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVu
Ym94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLAogICAgICAgICAgICAgbV9qaXQuYnJh
bmNoVGVzdDgoCkBAIC0xNDU2LDcgKzE0NTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUGVlcEhvbGVPYmplCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmVHUFIsIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsK
KyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
dm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICB9CiAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwg
bm9kZS0+Y2hpbGQyKCksCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKQEAgLTIwODIs
NyArMjA4Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3QKIAog
ICAgIEdQUlRlbXBvcmFyeSBzbWFsbFN0cmluZ3ModGhpcyk7CiAgICAgR1BSUmVnIHNtYWxsU3Ry
aW5nc1JlZyA9IHNtYWxsU3RyaW5ncy5ncHIoKTsKLSAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c21hbGxTdHJpbmdzLnNpbmds
ZUNoYXJhY3RlclN0cmluZ3MoKSksIHNtYWxsU3RyaW5nc1JlZyk7CisgICAgbV9qaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3Muc2lu
Z2xlQ2hhcmFjdGVyU3RyaW5ncygpKSwgc21hbGxTdHJpbmdzUmVnKTsKICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc21hbGxTdHJpbmdzUmVnLCBzY3JhdGNoUmVn
LCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIDApLCBzY3JhdGNoUmVnKTsKICAgICBzcGVjdWxh
dGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hUZXN0
MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hSZWcpKTsKICAgICBjZWxsUmVzdWx0KHNj
cmF0Y2hSZWcsIG1fY3VycmVudE5vZGUpOwpAQCAtMjA5OSw3ICsyMDk5LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUZyb21DaGFyQ29kZQogCiAgICAgSklUQ29tcGlsZXI6Okp1bXBM
aXN0IHNsb3dDYXNlczsKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBUcnVzdGVkSW1tMzIoMHhmZikp
KTsKLSAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSksIHNtYWxs
U3RyaW5nc1JlZyk7CisgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKSwgc21h
bGxTdHJpbmdzUmVnKTsKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc21hbGxTdHJpbmdzUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRy
LCAwKSwgc2NyYXRjaFJlZyk7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRl
c3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaFJlZykpOwpAQCAtMzE0MCw5ICszMTQw
LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1ha2VSb3BlKE5vZAogICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVt
cExpc3Qgc2xvd1BhdGg7Ci0gICAgTWFya2VkQWxsb2NhdG9yJiBtYXJrZWRBbGxvY2F0b3IgPSBt
X2ppdC5nbG9iYWxEYXRhKCktPmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aEltbW9ydGFsU3Ry
dWN0dXJlRGVzdHJ1Y3RvcihzaXplb2YoSlNSb3BlU3RyaW5nKSk7CisgICAgTWFya2VkQWxsb2Nh
dG9yJiBtYXJrZWRBbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5oZWFwLmFsbG9jYXRvckZvck9iamVj
dFdpdGhJbW1vcnRhbFN0cnVjdHVyZURlc3RydWN0b3Ioc2l6ZW9mKEpTUm9wZVN0cmluZykpOwog
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cigmbWFya2VkQWxsb2NhdG9yKSwgYWxsb2NhdG9y
R1BSKTsKLSAgICBlbWl0QWxsb2NhdGVKU0NlbGwocmVzdWx0R1BSLCBhbGxvY2F0b3JHUFIsIFRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpLCBz
Y3JhdGNoR1BSLCBzbG93UGF0aCk7CisgICAgZW1pdEFsbG9jYXRlSlNDZWxsKHJlc3VsdEdQUiwg
YWxsb2NhdG9yR1BSLCBUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSksIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKICAgICAgICAgCiAgICAgbV9qaXQuc3RvcmVQ
dHIoVHJ1c3RlZEltbVB0cigwKSwgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU1N0
cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51
bU9wR1BSczsgKytpKQpAQCAtMzY4NCw3ICszNjg0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVN0cmluZ0VxdWFsaQogICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChs
ZWZ0R1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNTdHJpbmcsIG1faml0LmJyYW5jaFB0cigKICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGxlZnRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAg
CiAgICAgLy8gSXQncyBzYWZlIHRvIGJyYW5jaCBhcm91bmQgdGhlIHR5cGUgY2hlY2sgYmVsb3cs
IHNpbmNlIHByb3ZpbmcgdGhhdCB0aGUgdmFsdWVzIGFyZQogICAgIC8vIGVxdWFsIGRvZXMgaW5k
ZWVkIHByb3ZlIHRoYXQgdGhlIHJpZ2h0IHZhbHVlIGlzIGEgc3RyaW5nLgpAQCAtMzY5NCw3ICsz
Njk0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ0VxdWFsaQogICAgICAg
ICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChyaWdodEdQUiksIG5vZGUtPmNoaWxkMigpLCBT
cGVjU3RyaW5nLCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyaWdodEdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkp
KTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCkt
PnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKIAogICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhsZWZ0R1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksIGxlbmd0
aEdQUik7CiAgICAgCkBAIC00MTIxLDcgKzQxMjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlVG9TdHJpbmdPbkNlCiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENv
bXBpbGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlc3Vs
dEdQUik7CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzU3RyaW5nID0gbV9qaXQuYnJhbmNo
UHRyKAotICAgICAgICAgICAgSklUQ29tcGlsZXI6OkVxdWFsLCByZXN1bHRHUFIsIFRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjpFcXVhbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKG1faml0
LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwogICAgICAgICAKICAgICAgICAgc3BlY3Vs
YXRlU3RyaW5nT2JqZWN0Rm9yU3RydWN0dXJlKG5vZGUtPmNoaWxkMSgpLCByZXN1bHRHUFIpOwog
ICAgICAgICAKQEAgLTQxNTEsNyArNDE1MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVUb1N0cmluZ09uQ2UKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5lZWRDYWxsID0g
bV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwK
ICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgIFRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICBUcnVz
dGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwogICAgICAgICAg
ICAgbV9qaXQubW92ZShvcDFHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBkb25lID0gbV9q
aXQuanVtcCgpOwogICAgICAgICAgICAgbmVlZENhbGwubGluaygmbV9qaXQpOwpAQCAtNDI2NCw3
ICs0MjY0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT2JqZWN0KEVkZwogICAg
ICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChncHIpLCBlZGdlLCBTcGVjT2JqZWN0LCBt
X2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZ3ByLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSkpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT2JqZWN0T3JPdGhl
cihFZGdlIGVkZ2UpCkBAIC00MjgzLDcgKzQyODMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpz
cGVjdWxhdGVPYmplY3RPck90CiAgICAgICAgIEpTVmFsdWVSZWdzKGdwciksIGVkZ2UsICh+U3Bl
Y0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGdw
ciwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52
bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
ZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKICAgICBpZiAo
bmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKSB7CkBAIC00MzA2LDcg
KzQzMDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPYmplY3RPck90CiAgICAg
ICAgIEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIGVkZ2UsICh+U3BlY0NlbGwpIHwg
U3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHBheWxvYWRHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgp
KSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0o
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRv
bmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7CiAgICAgaWYgKG5l
ZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVyKSkgewpAQCAtNDMzNCw3ICs0
MzM0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nKEVkZwogICAgICAg
ICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChncHIpLCBlZGdlLCBTcGVjU3RyaW5nLCBtX2pp
dC5icmFuY2hQdHIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAogICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZ3ByLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSkpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nT2JqZWN0
KEVkZ2UgZWRnZSwgR1BSUmVnIGdwcikKQEAgLTQzNzIsNyArNDM3Miw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OnNwZWN1bGF0ZVN0cmluZ09yU3QKICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBp
bGVyOjpBZGRyZXNzKGdwciwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQ
Uik7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNTdHJpbmcgPSBtX2ppdC5icmFuY2hQ
dHIoCi0gICAgICAgIEpJVENvbXBpbGVyOjpFcXVhbCwgc3RydWN0dXJlR1BSLCBUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CisgICAgICAg
IEpJVENvbXBpbGVyOjpFcXVhbCwgc3RydWN0dXJlR1BSLCBUcnVzdGVkSW1tUHRyKG1faml0LnZt
KCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwogICAgIAogICAgIHNwZWN1bGF0ZVN0cmluZ09i
amVjdEZvclN0cnVjdHVyZShlZGdlLCBzdHJ1Y3R1cmVHUFIpOwogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTQ4
NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzYxLDcgKzE3NjEsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGFu
eXdheSBzaW5jZSBpdCB3YXMgbm90IGJlaW5nIHVwZGF0ZWQgYnkgSklUJ2VkIGNvZGUgYnkgZGVz
aWduLgogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplb2Yodm9pZCopIC8g
NDsgaSsrKQotICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoMHhiYWRiZWVm
KSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJm1faml0Lmdsb2JhbERhdGEoKS0+dG9wQ2FsbEZy
YW1lKSArIGkgKiA0KTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKDB4
YmFkYmVlZiksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZtX2ppdC52bSgpLT50b3BDYWxsRnJh
bWUpICsgaSAqIDQpOwogICAgIH0KICNlbHNlCiAgICAgdm9pZCBwcmVwYXJlRm9yRXh0ZXJuYWxD
YWxsKCkgeyB9CkBAIC0yMTU0LDcgKzIxNTQsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgU2l6ZVR5cGU+CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZW1pdEFsbG9jYXRlQmFz
aWNTdG9yYWdlKFNpemVUeXBlIHNpemUsIEdQUlJlZyByZXN1bHRHUFIpCiAgICAgewotICAgICAg
ICBDb3BpZWRBbGxvY2F0b3IqIGNvcGllZEFsbG9jYXRvciA9ICZtX2ppdC5nbG9iYWxEYXRhKCkt
PmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOworICAgICAgICBDb3BpZWRBbGxvY2F0b3IqIGNvcGll
ZEFsbG9jYXRvciA9ICZtX2ppdC52bSgpLT5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKICAgICAg
ICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVt
YWluaW5nLCByZXN1bHRHUFIpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0
aCA9IG1faml0LmJyYW5jaFN1YlB0cihKSVRDb21waWxlcjo6U2lnbmVkLCBzaXplLCByZXN1bHRH
UFIpOwpAQCAtMjIwMSwxMSArMjIwMSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIE1hcmtlZEFsbG9j
YXRvciogYWxsb2NhdG9yID0gMDsKICAgICAgICAgc2l6ZV90IHNpemUgPSBDbGFzc1R5cGU6OmFs
bG9jYXRpb25TaXplKDApOwogICAgICAgICBpZiAoQ2xhc3NUeXBlOjpuZWVkc0Rlc3RydWN0aW9u
ICYmIENsYXNzVHlwZTo6aGFzSW1tb3J0YWxTdHJ1Y3R1cmUpCi0gICAgICAgICAgICBhbGxvY2F0
b3IgPSAmbV9qaXQuZ2xvYmFsRGF0YSgpLT5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhJbW1v
cnRhbFN0cnVjdHVyZURlc3RydWN0b3Ioc2l6ZSk7CisgICAgICAgICAgICBhbGxvY2F0b3IgPSAm
bV9qaXQudm0oKS0+aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRoSW1tb3J0YWxTdHJ1Y3R1cmVE
ZXN0cnVjdG9yKHNpemUpOwogICAgICAgICBlbHNlIGlmIChDbGFzc1R5cGU6Om5lZWRzRGVzdHJ1
Y3Rpb24pCi0gICAgICAgICAgICBhbGxvY2F0b3IgPSAmbV9qaXQuZ2xvYmFsRGF0YSgpLT5oZWFw
LmFsbG9jYXRvckZvck9iamVjdFdpdGhOb3JtYWxEZXN0cnVjdG9yKHNpemUpOworICAgICAgICAg
ICAgYWxsb2NhdG9yID0gJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aE5v
cm1hbERlc3RydWN0b3Ioc2l6ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFsbG9jYXRv
ciA9ICZtX2ppdC5nbG9iYWxEYXRhKCktPmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERl
c3RydWN0b3Ioc2l6ZSk7CisgICAgICAgICAgICBhbGxvY2F0b3IgPSAmbV9qaXQudm0oKS0+aGVh
cC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihzaXplKTsKICAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvciksIHNjcmF0Y2hHUFIxKTsKICAgICAgICAg
ZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBzY3JhdGNoR1BSMSwgc3RydWN0dXJlLCBz
dG9yYWdlLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTIg
KzM2LDEyIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVGh1
bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKICAgICAKICAg
ICBzaXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOwotICAgIFNj
cmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBnbG9iYWxEYXRhLT5zY3JhdGNoQnVmZmVyRm9y
U2l6ZShzY3JhdGNoU2l6ZSk7CisgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZt
LT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7CiAgICAgRW5jb2RlZEpTVmFsdWUq
IGJ1ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0
YUJ1ZmZlcigpKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewpAQCAtODQsOSArODQsOSBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UCiAjZW5kaWYKICAgICB9CiAgICAgCi0gICAgaml0
Lmp1bXAoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmZ2xvYmFsRGF0YS0+b3NyRXhp
dEp1bXBEZXN0aW5hdGlvbikpOworICAgIGppdC5qdW1wKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0
ZUFkZHJlc3MoJnZtLT5vc3JFeGl0SnVtcERlc3RpbmF0aW9uKSk7CiAgICAgCi0gICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAg
ICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZ1bmN0aW9uQ2FsbCwgY29tcGlsZU9TUkV4aXQpOwog
ICAgIApAQCAtMTA4LDkgKzEwOCw5IEBAIGlubGluZSB2b2lkIGVtaXRQb2ludGVyVmFsaWRhdGlv
bihDQ2FsbEgKICNlbmRpZgogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRp
b25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0
b3IoVk0qIHZtKQogewotICAgIENDYWxsSGVscGVycyBqaXQoZ2xvYmFsRGF0YSk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdCh2bSk7CiAgICAgCiAgICAgLy8gV2Ugd2lsbCBqdW1wIHRvIGhlcmUgaWYg
dGhlIEpJVCBjb2RlIHRoaW5rcyBpdCdzIG1ha2luZyBhIGNhbGwsIGJ1dCB0aGUKICAgICAvLyBs
aW5raW5nIGhlbHBlciAoQysrIGNvZGUpIGRlY2lkZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGlu
c3RlYWQuIFdlIHdpbGwKQEAgLTEzNywxMiArMTM3LDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiB0aHJvd0V4Y2VwdGlvbkZyb20KICAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwogICAgIGppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVl
R1BSMik7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmpp
dCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmpp
dCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgKCJERkcgdGhyb3cgZXhjZXB0aW9uIGZyb20gY2FsbCBzbG93IHBhdGggdGh1bmsiKSk7CiB9
CiAKIHN0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAotICAgIENDYWxsSGVscGVycyYgaml0LCBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIFBfREZHT3BlcmF0aW9uX0Ugc2xvd1BhdGhGdW5jdGlvbikK
KyAgICBDQ2FsbEhlbHBlcnMmIGppdCwgVk0qIHZtLCBQX0RGR09wZXJhdGlvbl9FIHNsb3dQYXRo
RnVuY3Rpb24pCiB7CiAgICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJ
bmZvOjpub25BcmdHUFIyKTsKICAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZv
Ojpub25BcmdHUFIyKTsKQEAgLTE1MSw3ICsxNTEsNyBAQCBzdGF0aWMgdm9pZCBzbG93UGF0aEZv
cigKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAogICAgICAgICAgICAgR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNp
emVvZihSZWdpc3RlcikpICogSlNTdGFjazo6UmV0dXJuUEMpKTsKLSAgICBqaXQuc3RvcmVQdHIo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZnbG9iYWxEYXRhLT50b3BDYWxsRnJhbWUpOwor
ICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxs
RnJhbWUpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgaml0LnBva2U2NChHUFJJbmZvOjpub25Q
cmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7CiAjZWxzZQpA
QCAtMTgzLDcgKzE4Myw3IEBAIHN0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAogfQogCiBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtGb3JUaHVua0dlbmVyYXRvcigKLSAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICBWTSog
dm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICAgICAvLyBUaGUgcmV0dXJuIGFk
ZHJlc3MgaXMgb24gdGhlIHN0YWNrIG9yIGluIHRoZSBsaW5rIHJlZ2lzdGVyLiBXZSB3aWxsIGhl
bmNlCiAgICAgLy8gc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGwgZnJhbWUgd2hp
bGUgd2UgbWFrZSBhIEMrKyBmdW5jdGlvbiBjYWxsCkBAIC0xOTMsNDYgKzE5Myw0NiBAQCBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtGb3JUaHVuCiAgICAgLy8gYW5kIGFsbCBvdGhl
ciByZWdpc3RlcnMgdG8gYmUgYXZhaWxhYmxlIGZvciB1c2UuIFdlIHVzZSBKSVRTdGFja0ZyYW1l
OjphcmdzCiAgICAgLy8gdG8gc2F2ZSBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWNyb3NzIGNhbGxz
LgogICAgIAotICAgIENDYWxsSGVscGVycyBqaXQoZ2xvYmFsRGF0YSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdCh2bSk7CiAgICAgCi0gICAgc2xvd1BhdGhGb3Ioaml0LCBnbG9iYWxEYXRhLCBraW5k
ID09IENvZGVGb3JDYWxsID8gb3BlcmF0aW9uTGlua0NhbGwgOiBvcGVyYXRpb25MaW5rQ29uc3Ry
dWN0KTsKKyAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBraW5kID09IENvZGVGb3JDYWxsID8gb3Bl
cmF0aW9uTGlua0NhbGwgOiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KTsKICAgICAKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwog
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwKICAgICAgICAg
KCJERkcgbGluayAlcyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxsID8gImNh
bGwiIDogImNvbnN0cnVjdCIpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxs
VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBsaW5r
Rm9yVGh1bmtHZW5lcmF0b3IoZ2xvYmFsRGF0YSwgQ29kZUZvckNhbGwpOworICAgIHJldHVybiBs
aW5rRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDYWxsKTsKIH0KIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9y
KFZNKiB2bSkKIHsKLSAgICByZXR1cm4gbGlua0ZvclRodW5rR2VuZXJhdG9yKGdsb2JhbERhdGEs
IENvZGVGb3JDb25zdHJ1Y3QpOworICAgIHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Iodm0s
IENvZGVGb3JDb25zdHJ1Y3QpOwogfQogCiAvLyBGb3IgY2xvc3VyZSBvcHRpbWl6YXRpb25zLCB3
ZSBvbmx5IGluY2x1ZGUgY2FsbHMsIHNpbmNlIGlmIHlvdSdyZSB1c2luZyBjbG9zdXJlcyBmb3IK
IC8vIG9iamVjdCBjb25zdHJ1Y3Rpb24gdGhlbiB5b3UncmUgZ29pbmcgdG8gbG9zZSBiaWcgdGlt
ZSBhbnl3YXkuCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxp
bmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICBDQ2FsbEhlbHBlcnMg
aml0KGdsb2JhbERhdGEpOworICAgIENDYWxsSGVscGVycyBqaXQodm0pOwogICAgIAotICAgIHNs
b3dQYXRoRm9yKGppdCwgZ2xvYmFsRGF0YSwgb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKTsKKyAg
ICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGwpOwogICAgIAot
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIEdMT0JBTF9USFVO
S19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVO
S19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiREZHIGxpbmsg
Y2xvc3VyZSBjYWxsIHNsb3cgcGF0aCB0aHVuayIpKTsKIH0KIAogc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3IoCi0gICAgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgVk0qIHZtLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgLy8gVGhlIHJldHVybiBhZGRyZXNzIGlz
IG9uIHRoZSBzdGFjaywgb3IgaW4gdGhlIGxpbmsgcmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKICAg
ICAvLyBqdW1wIHRvIHRoZSBjYWxsZWUsIG9yIHNhdmUgdGhlIHJldHVybiBhZGRyZXNzIHRvIHRo
ZSBjYWxsIGZyYW1lIHdoaWxlIHdlCiAgICAgLy8gbWFrZSBhIEMrKyBmdW5jdGlvbiBjYWxsIHRv
IHRoZSBhcHByb3ByaWF0ZSBERkcgb3BlcmF0aW9uLgogCi0gICAgQ0NhbGxIZWxwZXJzIGppdChn
bG9iYWxEYXRhKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKICAgICAKICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlOwogCkBAIC0zMDcsMjIgKzMwNywyMiBAQCBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JUCiAgICAgCiAgICAgLy8gSGVyZSB3ZSBk
b24ndCBrbm93IGFueXRoaW5nLCBzbyByZXZlcnQgdG8gdGhlIGZ1bGwgc2xvdyBwYXRoLgogICAg
IAotICAgIHNsb3dQYXRoRm9yKGppdCwgZ2xvYmFsRGF0YSwga2luZCA9PSBDb2RlRm9yQ2FsbCA/
IG9wZXJhdGlvblZpcnR1YWxDYWxsIDogb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdCk7CisgICAg
c2xvd1BhdGhGb3Ioaml0LCB2bSwga2luZCA9PSBDb2RlRm9yQ2FsbCA/IG9wZXJhdGlvblZpcnR1
YWxDYWxsIDogb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdCk7CiAgICAgCi0gICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsCiAgICAgICAgICgiREZH
IHZpcnR1YWwgJXMgc2xvdyBwYXRoIHRodW5rIiwga2luZCA9PSBDb2RlRm9yQ2FsbCA/ICJjYWxs
IiA6ICJjb25zdHJ1Y3QiKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2Fs
bFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiB2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4g
dmlydHVhbEZvclRodW5rR2VuZXJhdG9yKGdsb2JhbERhdGEsIENvZGVGb3JDYWxsKTsKKyAgICBy
ZXR1cm4gdmlydHVhbEZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ2FsbCk7CiB9CiAKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1
Y3RUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dl
bmVyYXRvcihnbG9iYWxEYXRhLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICByZXR1cm4gdmlydHVh
bEZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVu
a3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5o
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5r
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwyMSArMzQsMjEgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwogCiBuYW1lc3BhY2UgREZHIHsKIAot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoSlNH
bG9iYWxEYXRhKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UaHVu
a0dlbmVyYXRvcihWTSopOwogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25G
cm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSopOwogCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEq
KTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoSlNH
bG9iYWxEYXRhKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRv
cihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRv
cihWTSopOwogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVD
YWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxD
YWxsVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
dmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoVk0qKTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9C
bG9ja0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0Jsb2NrQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0Jsb2NrQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcg
QEAgY2xhc3MgQmxvY2tBbGxvY2F0b3I7CiBjbGFzcyBDb3BpZWRCbG9jazsKIGNsYXNzIENvcHlX
b3JrTGlzdFNlZ21lbnQ7CiBjbGFzcyBIYW5kbGVCbG9jazsKLWNsYXNzIEpTR2xvYmFsRGF0YTsK
K2NsYXNzIFZNOwogY2xhc3MgTWFya1N0YWNrU2VnbWVudDsKIGNsYXNzIE1hcmtlZEJsb2NrOwog
Y2xhc3MgV2Vha0Jsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVk
U3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGll
ZFNwYWNlLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29waWVkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIENoZWNr
ZWRCb29sZWFuIENvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZVMKICAgICBpZiAoaXNPdmVyc2l6ZShi
eXRlcykpCiAgICAgICAgIHJldHVybiB0cnlBbGxvY2F0ZU92ZXJzaXplKGJ5dGVzLCBvdXRQdHIp
OwogICAgIAotICAgIEFTU0VSVChtX2hlYXAtPmdsb2JhbERhdGEoKS0+YXBpTG9jaygpLmN1cnJl
bnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOworICAgIEFTU0VSVChtX2hlYXAtPnZtKCktPmFwaUxv
Y2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKICAgICBtX2hlYXAtPmRpZEFsbG9j
YXRlKG1fYWxsb2NhdG9yLmN1cnJlbnRDYXBhY2l0eSgpKTsKIAogICAgIGFsbG9jYXRlQmxvY2so
KTsKQEAgLTEwMyw3ICsxMDMsNyBAQCBDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5UmVh
bGxvY2F0CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIHZvaWQqIG9sZFB0ciA9ICpw
dHI7Ci0gICAgQVNTRVJUKCFtX2hlYXAtPmdsb2JhbERhdGEoKS0+aXNJbml0aWFsaXppbmdPYmpl
Y3QoKSk7CisgICAgQVNTRVJUKCFtX2hlYXAtPnZtKCktPmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkp
OwogICAgIAogICAgIGlmIChDb3BpZWRTcGFjZTo6YmxvY2tGb3Iob2xkUHRyKS0+aXNPdmVyc2l6
ZSgpIHx8IGlzT3ZlcnNpemUobmV3U2l6ZSkpCiAgICAgICAgIHJldHVybiB0cnlSZWFsbG9jYXRl
T3ZlcnNpemUocHRyLCBvbGRTaXplLCBuZXdTaXplKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lcy5oCShyZXZpc2lvbiAxNDg2NTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCiAjaW5j
bHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkhlYXBCbG9jay5oIgotI2luY2x1ZGUgIkpTR2xvYmFs
RGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRCb29sZWFuLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTUwLDcgKzE1MCw3IEBAIGlubGluZSB2b2lkIENvcGll
ZFNwYWNlOjphbGxvY2F0ZUJsb2NrKCkKIAogaW5saW5lIENoZWNrZWRCb29sZWFuIENvcGllZFNw
YWNlOjp0cnlBbGxvY2F0ZShzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCiB7Ci0gICAgQVNT
RVJUKCFtX2hlYXAtPmdsb2JhbERhdGEoKS0+aXNJbml0aWFsaXppbmdPYmplY3QoKSk7CisgICAg
QVNTRVJUKCFtX2hlYXAtPnZtKCktPmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkpOwogCiAgICAgaWYg
KCFtX2FsbG9jYXRvci50cnlBbGxvY2F0ZShieXRlcywgb3V0UHRyKSkKICAgICAgICAgcmV0dXJu
IHRyeUFsbG9jYXRlU2xvd0Nhc2UoYnl0ZXMsIG91dFB0cik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAJKHJldmlzaW9uIDE0
ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJDb3B5VmlzaXRv
ci5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkdDVGhyZWFk
LmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRl
ICJNYXJrU3RhY2suaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIlNsb3RW
aXNpdG9ySW5saW5lcy5oIgpAQCAtNTIsMTEgKzUyLDExIEBAIHNpemVfdCBHQ1RocmVhZFNoYXJl
ZERhdGE6OmNoaWxkVmlzaXRDb3UKIH0KICNlbmRpZgogCi1HQ1RocmVhZFNoYXJlZERhdGE6OkdD
VGhyZWFkU2hhcmVkRGF0YShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCi0gICAgOiBtX2dsb2Jh
bERhdGEoZ2xvYmFsRGF0YSkKLSAgICAsIG1fY29waWVkU3BhY2UoJmdsb2JhbERhdGEtPmhlYXAu
bV9zdG9yYWdlU3BhY2UpCitHQ1RocmVhZFNoYXJlZERhdGE6OkdDVGhyZWFkU2hhcmVkRGF0YShW
TSogdm0pCisgICAgOiBtX3ZtKHZtKQorICAgICwgbV9jb3BpZWRTcGFjZSgmdm0tPmhlYXAubV9z
dG9yYWdlU3BhY2UpCiAgICAgLCBtX3Nob3VsZEhhc2hDb25zKGZhbHNlKQotICAgICwgbV9zaGFy
ZWRNYXJrU3RhY2soZ2xvYmFsRGF0YS0+aGVhcC5ibG9ja0FsbG9jYXRvcigpKQorICAgICwgbV9z
aGFyZWRNYXJrU3RhY2sodm0tPmhlYXAuYmxvY2tBbGxvY2F0b3IoKSkKICAgICAsIG1fbnVtYmVy
T2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMoMCkKICAgICAsIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxk
RXhpdChmYWxzZSkKICAgICAsIG1fY29weUluZGV4KDApCkBAIC0xMTYsNyArMTE2LDcgQEAgdm9p
ZCBHQ1RocmVhZFNoYXJlZERhdGE6OnJlc2V0KCkKICAgICBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXJzLnJlbW92ZUFsbCgpOwogCiAgICAgaWYgKG1fc2hvdWxkSGFzaENvbnMpIHsKLSAgICAgICAg
bV9nbG9iYWxEYXRhLT5yZXNldE5ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29ucygpOworICAgICAg
ICBtX3ZtLT5yZXNldE5ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29ucygpOwogICAgICAgICBtX3No
b3VsZEhhc2hDb25zID0gZmFsc2U7CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmgJKHJldmlzaW9uIDE0ODY1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgR0NUaHJl
YWQ7Ci1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIGNsYXNzIENvcGllZFNwYWNlOwog
Y2xhc3MgQ29weVZpc2l0b3I7CiAKQEAgLTUyLDcgKzUyLDcgQEAgZW51bSBHQ1BoYXNlIHsKIAog
Y2xhc3MgR0NUaHJlYWRTaGFyZWREYXRhIHsKIHB1YmxpYzoKLSAgICBHQ1RocmVhZFNoYXJlZERh
dGEoSlNHbG9iYWxEYXRhKik7CisgICAgR0NUaHJlYWRTaGFyZWREYXRhKFZNKik7CiAgICAgfkdD
VGhyZWFkU2hhcmVkRGF0YSgpOwogICAgIAogICAgIHZvaWQgcmVzZXQoKTsKQEAgLTc3LDcgKzc3
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN0YXJ0TmV4dFBoYXNlKEdDUGhhc2UpOwogICAgIHZv
aWQgZW5kQ3VycmVudFBoYXNlKCk7CiAKLSAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsK
KyAgICBWTSogbV92bTsKICAgICBDb3BpZWRTcGFjZSogbV9jb3BpZWRTcGFjZTsKICAgICAKICAg
ICBib29sIG1fc2hvdWxkSGFzaENvbnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IYW5kbGVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hhbmRsZVNldC5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hhbmRsZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLUhhbmRsZVNldDo6SGFuZGxlU2V0KEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSkKLSAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorSGFuZGxlU2V0OjpIYW5k
bGVTZXQoVk0qIHZtKQorICAgIDogbV92bSh2bSkKICAgICAsIG1fbmV4dFRvRmluYWxpemUoMCkK
IHsKICAgICBncm93KCk7CkBAIC00NSwxMiArNDUsMTIgQEAgSGFuZGxlU2V0OjpIYW5kbGVTZXQo
SlNHbG9iYWxEYXRhKiBnbG9iYQogSGFuZGxlU2V0Ojp+SGFuZGxlU2V0KCkKIHsKICAgICB3aGls
ZSAoIW1fYmxvY2tMaXN0LmlzRW1wdHkoKSkKLSAgICAgICAgbV9nbG9iYWxEYXRhLT5oZWFwLmJs
b2NrQWxsb2NhdG9yKCkuZGVhbGxvY2F0ZShIYW5kbGVCbG9jazo6ZGVzdHJveShtX2Jsb2NrTGlz
dC5yZW1vdmVIZWFkKCkpKTsKKyAgICAgICAgbV92bS0+aGVhcC5ibG9ja0FsbG9jYXRvcigpLmRl
YWxsb2NhdGUoSGFuZGxlQmxvY2s6OmRlc3Ryb3kobV9ibG9ja0xpc3QucmVtb3ZlSGVhZCgpKSk7
CiB9CiAKIHZvaWQgSGFuZGxlU2V0Ojpncm93KCkKIHsKLSAgICBIYW5kbGVCbG9jayogbmV3Qmxv
Y2sgPSBIYW5kbGVCbG9jazo6Y3JlYXRlKG1fZ2xvYmFsRGF0YS0+aGVhcC5ibG9ja0FsbG9jYXRv
cigpLmFsbG9jYXRlPEhhbmRsZUJsb2NrPigpLCB0aGlzKTsKKyAgICBIYW5kbGVCbG9jayogbmV3
QmxvY2sgPSBIYW5kbGVCbG9jazo6Y3JlYXRlKG1fdm0tPmhlYXAuYmxvY2tBbGxvY2F0b3IoKS5h
bGxvY2F0ZTxIYW5kbGVCbG9jaz4oKSwgdGhpcyk7CiAgICAgbV9ibG9ja0xpc3QuYXBwZW5kKG5l
d0Jsb2NrKTsKIAogICAgIGZvciAoaW50IGkgPSBuZXdCbG9jay0+bm9kZUNhcGFjaXR5KCkgLSAx
OyBpID49IDA7IC0taSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxl
U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0
LmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRs
ZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
Y2xhc3MgSGFuZGxlQmxvY2s7CiBjbGFzcyBIYW5kbGVTZXQ7CiBjbGFzcyBIZWFwUm9vdFZpc2l0
b3I7Ci1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIGNsYXNzIEpTVmFsdWU7CiBjbGFz
cyBTbG90VmlzaXRvcjsKIApAQCAtNjcsMTAgKzY3LDEwIEBAIGNsYXNzIEhhbmRsZVNldCB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIEhhbmRsZVNldCogaGVhcEZvcihIYW5kbGVTbG90KTsKIAotICAg
IEhhbmRsZVNldChKU0dsb2JhbERhdGEqKTsKKyAgICBIYW5kbGVTZXQoVk0qKTsKICAgICB+SGFu
ZGxlU2V0KCk7CiAKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEoKTsKKyAgICBWTSogdm0o
KTsKIAogICAgIEhhbmRsZVNsb3QgYWxsb2NhdGUoKTsKICAgICB2b2lkIGRlYWxsb2NhdGUoSGFu
ZGxlU2xvdCk7CkBAIC05NCw3ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc0xpdmVOb2Rl
KE5vZGUqKTsKICNlbmRpZgogCi0gICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CisgICAg
Vk0qIG1fdm07CiAgICAgRG91Ymx5TGlua2VkTGlzdDxIYW5kbGVCbG9jaz4gbV9ibG9ja0xpc3Q7
CiAKICAgICBTZW50aW5lbExpbmtlZExpc3Q8Tm9kZT4gbV9zdHJvbmdMaXN0OwpAQCAtMTA4LDkg
KzEwOCw5IEBAIGlubGluZSBIYW5kbGVTZXQqIEhhbmRsZVNldDo6aGVhcEZvcihIYW4KICAgICBy
ZXR1cm4gdG9Ob2RlKGhhbmRsZSktPmhhbmRsZVNldCgpOwogfQogCi1pbmxpbmUgSlNHbG9iYWxE
YXRhKiBIYW5kbGVTZXQ6Omdsb2JhbERhdGEoKQoraW5saW5lIFZNKiBIYW5kbGVTZXQ6OnZtKCkK
IHsKLSAgICByZXR1cm4gbV9nbG9iYWxEYXRhOworICAgIHJldHVybiBtX3ZtOwogfQogCiBpbmxp
bmUgSGFuZGxlU2xvdCBIYW5kbGVTZXQ6OnRvSGFuZGxlKEhhbmRsZVNldDo6Tm9kZSogbm9kZSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIkhlYXBTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiSW5j
cmVtZW50YWxTd2VlcGVyLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKLSNpbmNsdWRlICJK
U0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0
LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNPTk9iamVjdC5oIgpAQCAtMTY0
LDE3ICsxNjQsMTcgQEAgc3RhdGljIGlubGluZSBzaXplX3QgcHJvcG9ydGlvbmFsSGVhcFNpegog
ICAgIHJldHVybiAxLjI1ICogaGVhcFNpemU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1Zh
bGlkU2hhcmVkSW5zdGFuY2VUaHJlYWRTdGF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitz
dGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZFNoYXJlZEluc3RhbmNlVGhyZWFkU3RhdGUoVk0qIHZt
KQogewotICAgIHJldHVybiBnbG9iYWxEYXRhLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9s
ZGluZ0xvY2soKTsKKyAgICByZXR1cm4gdm0tPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xk
aW5nTG9jaygpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZFRocmVhZFN0YXRlKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkVGhyZWFk
U3RhdGUoVk0qIHZtKQogewotICAgIGlmIChnbG9iYWxEYXRhLT5pZGVudGlmaWVyVGFibGUgIT0g
d3RmVGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSkKKyAgICBpZiAodm0tPmlk
ZW50aWZpZXJUYWJsZSAhPSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZ2xvYmFsRGF0YS0+aXNTaGFyZWRJ
bnN0YW5jZSgpICYmICFpc1ZhbGlkU2hhcmVkSW5zdGFuY2VUaHJlYWRTdGF0ZShnbG9iYWxEYXRh
KSkKKyAgICBpZiAodm0tPmlzU2hhcmVkSW5zdGFuY2UoKSAmJiAhaXNWYWxpZFNoYXJlZEluc3Rh
bmNlVGhyZWFkU3RhdGUodm0pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTI0MSw3ICsyNDEsNyBAQCBpbmxpbmUgUGFzc093blB0cjxUeXBlQ291bnRTZXQ+
IFJlY29yZFR5CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi1IZWFwOjpIZWFwKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgSGVhcFR5cGUgaGVhcFR5cGUpCitIZWFwOjpIZWFwKFZNKiB2
bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgOiBtX2hlYXBUeXBlKGhlYXBUeXBlKQogICAgICwg
bV9yYW1TaXplKHJhbVNpemUoKSkKICAgICAsIG1fbWluQnl0ZXNQZXJDeWNsZShtaW5IZWFwU2l6
ZShtX2hlYXBUeXBlLCBtX3JhbVNpemUpKQpAQCAtMjU0LDEyICsyNTQsMTIgQEAgSGVhcDo6SGVh
cChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEhlYQogICAgICwgbV9vYmplY3RTcGFjZSh0aGlz
KQogICAgICwgbV9zdG9yYWdlU3BhY2UodGhpcykKICAgICAsIG1fbWFjaGluZVRocmVhZHModGhp
cykKLSAgICAsIG1fc2hhcmVkRGF0YShnbG9iYWxEYXRhKQorICAgICwgbV9zaGFyZWREYXRhKHZt
KQogICAgICwgbV9zbG90VmlzaXRvcihtX3NoYXJlZERhdGEpCiAgICAgLCBtX2NvcHlWaXNpdG9y
KG1fc2hhcmVkRGF0YSkKLSAgICAsIG1faGFuZGxlU2V0KGdsb2JhbERhdGEpCisgICAgLCBtX2hh
bmRsZVNldCh2bSkKICAgICAsIG1faXNTYWZlVG9Db2xsZWN0KGZhbHNlKQotICAgICwgbV9nbG9i
YWxEYXRhKGdsb2JhbERhdGEpCisgICAgLCBtX3ZtKHZtKQogICAgICwgbV9sYXN0R0NMZW5ndGgo
MCkKICAgICAsIG1fbGFzdENvZGVEaXNjYXJkVGltZShXVEY6OmN1cnJlbnRUaW1lKCkpCiAgICAg
LCBtX2FjdGl2aXR5Q2FsbGJhY2soRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6Y3JlYXRlKHRo
aXMpKQpAQCAtMjc3LDExICsyNzcsMTEgQEAgYm9vbCBIZWFwOjppc1BhZ2VkT3V0KGRvdWJsZSBk
ZWFkbGluZSkKICAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5pc1BhZ2VkT3V0KGRlYWRsaW5lKSB8
fCBtX3N0b3JhZ2VTcGFjZS5pc1BhZ2VkT3V0KGRlYWRsaW5lKTsKIH0KIAotLy8gVGhlIEpTR2xv
YmFsRGF0YSBpcyBiZWluZyBkZXN0cm95ZWQgYW5kIHRoZSBjb2xsZWN0b3Igd2lsbCBuZXZlciBy
dW4gYWdhaW4uCisvLyBUaGUgVk0gaXMgYmVpbmcgZGVzdHJveWVkIGFuZCB0aGUgY29sbGVjdG9y
IHdpbGwgbmV2ZXIgcnVuIGFnYWluLgogLy8gUnVuIGFsbCBwZW5kaW5nIGZpbmFsaXplcnMgbm93
IGJlY2F1c2Ugd2Ugd29uJ3QgZ2V0IGFub3RoZXIgY2hhbmNlLgogdm9pZCBIZWFwOjpsYXN0Q2hh
bmNlVG9GaW5hbGl6ZSgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW1fZ2xvYmFsRGF0YS0+ZHlu
YW1pY0dsb2JhbE9iamVjdCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fdm0tPmR5bmFtaWNHbG9i
YWxPYmplY3QpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBO
b09wZXJhdGlvbik7CiAKICAgICBtX29iamVjdFNwYWNlLmxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7
CkBAIC0zMzIsNyArMzMyLDcgQEAgdm9pZCBIZWFwOjpkaWRBYmFuZG9uKHNpemVfdCBieXRlcykK
IHZvaWQgSGVhcDo6cHJvdGVjdChKU1ZhbHVlIGspCiB7CiAgICAgQVNTRVJUKGspOwotICAgIEFT
U0VSVChtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygp
KTsKKyAgICBBU1NFUlQobV92bS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2Nr
KCkpOwogCiAgICAgaWYgKCFrLmlzQ2VsbCgpKQogICAgICAgICByZXR1cm47CkBAIC0zNDMsNyAr
MzQzLDcgQEAgdm9pZCBIZWFwOjpwcm90ZWN0KEpTVmFsdWUgaykKIGJvb2wgSGVhcDo6dW5wcm90
ZWN0KEpTVmFsdWUgaykKIHsKICAgICBBU1NFUlQoayk7Ci0gICAgQVNTRVJUKG1fZ2xvYmFsRGF0
YS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOworICAgIEFTU0VSVCht
X3ZtLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAKICAgICBpZiAo
IWsuaXNDZWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQwMiw3ICs0MDIsNyBAQCB2
b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplCiAKIGlubGluZSBKU1N0YWNr
JiBIZWFwOjpzdGFjaygpCiB7Ci0gICAgcmV0dXJuIG1fZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXIt
PnN0YWNrKCk7CisgICAgcmV0dXJuIG1fdm0tPmludGVycHJldGVyLT5zdGFjaygpOwogfQogCiB2
b2lkIEhlYXA6OmNhbm9uaWNhbGl6ZUNlbGxMaXZlbmVzc0RhdGEoKQpAQCAtNDEyLDcgKzQxMiw3
IEBAIHZvaWQgSGVhcDo6Y2Fub25pY2FsaXplQ2VsbExpdmVuZXNzRGF0YSgKIAogdm9pZCBIZWFw
OjpnZXRDb25zZXJ2YXRpdmVSZWdpc3RlclJvb3RzKEhhc2hTZXQ8SlNDZWxsKj4mIHJvb3RzKQog
ewotICAgIEFTU0VSVChpc1ZhbGlkVGhyZWFkU3RhdGUobV9nbG9iYWxEYXRhKSk7CisgICAgQVNT
RVJUKGlzVmFsaWRUaHJlYWRTdGF0ZShtX3ZtKSk7CiAgICAgQ29uc2VydmF0aXZlUm9vdHMgc3Rh
Y2tSb290cygmbV9vYmplY3RTcGFjZS5ibG9ja3MoKSwgJm1fc3RvcmFnZVNwYWNlKTsKICAgICBz
dGFjaygpLmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKHN0YWNrUm9vdHMpOwogICAgIHNpemVfdCBz
dGFja1Jvb3RDb3VudCA9IHN0YWNrUm9vdHMuc2l6ZSgpOwpAQCAtNDI4LDcgKzQyOCw3IEBAIHZv
aWQgSGVhcDo6bWFya1Jvb3RzKCkKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigi
R2FyYmFnZSBDb2xsZWN0aW9uOiBUcmFjaW5nIik7CiAKICAgICBHQ1BIQVNFKE1hcmtSb290cyk7
Ci0gICAgQVNTRVJUKGlzVmFsaWRUaHJlYWRTdGF0ZShtX2dsb2JhbERhdGEpKTsKKyAgICBBU1NF
UlQoaXNWYWxpZFRocmVhZFN0YXRlKG1fdm0pKTsKIAogI2lmIEVOQUJMRShPQkpFQ1RfTUFSS19M
T0dHSU5HKQogICAgIGRvdWJsZSBnY1N0YXJ0VGltZSA9IFdURjo6Y3VycmVudFRpbWUoKTsKQEAg
LTQ1Nyw3ICs0NTcsNyBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAgICAgQ29uc2VydmF0aXZl
Um9vdHMgc2NyYXRjaEJ1ZmZlclJvb3RzKCZtX29iamVjdFNwYWNlLmJsb2NrcygpLCAmbV9zdG9y
YWdlU3BhY2UpOwogICAgIHsKICAgICAgICAgR0NQSEFTRShHYXRoZXJTY3JhdGNoQnVmZmVyUm9v
dHMpOwotICAgICAgICBtX2dsb2JhbERhdGEtPmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKHNjcmF0
Y2hCdWZmZXJSb290cyk7CisgICAgICAgIG1fdm0tPmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKHNj
cmF0Y2hCdWZmZXJSb290cyk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTQ3NCwxMyArNDc0LDEzIEBA
IHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKICAgICB7CiAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJs
ZXIgZW5hYmxlcih2aXNpdG9yKTsKIAotICAgICAgICBpZiAobV9nbG9iYWxEYXRhLT5jb2RlQmxv
Y2tzQmVpbmdDb21waWxlZC5zaXplKCkpIHsKKyAgICAgICAgaWYgKG1fdm0tPmNvZGVCbG9ja3NC
ZWluZ0NvbXBpbGVkLnNpemUoKSkgewogICAgICAgICAgICAgR0NQSEFTRShWaXNpdEFjdGl2ZUNv
ZGVCbG9jayk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ2xvYmFsRGF0
YS0+Y29kZUJsb2Nrc0JlaW5nQ29tcGlsZWQuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICAgICAg
bV9nbG9iYWxEYXRhLT5jb2RlQmxvY2tzQmVpbmdDb21waWxlZFtpXS0+dmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdm0tPmNvZGVC
bG9ja3NCZWluZ0NvbXBpbGVkLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgICAgIG1fdm0tPmNv
ZGVCbG9ja3NCZWluZ0NvbXBpbGVkW2ldLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICAg
ICAgfQogCi0gICAgICAgIG1fZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVm
ZXJlbmNlcyh2aXNpdG9yKTsKKyAgICAgICAgbV92bS0+c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25n
UmVmZXJlbmNlcyh2aXNpdG9yKTsKIAogICAgICAgICB7CiAgICAgICAgICAgICBHQ1BIQVNFKFZp
c2l0TWFjaGluZVJvb3RzKTsKQEAgLTUyMywxMCArNTIzLDEwIEBAIHZvaWQgSGVhcDo6bWFya1Jv
b3RzKCkKICAgICAgICAgICAgICAgICB2aXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKSB7
CisgICAgICAgIGlmIChtX3ZtLT5leGNlcHRpb24pIHsKICAgICAgICAgICAgIEdDUEhBU0UoTWFy
a2luZ0V4Y2VwdGlvbik7CiAgICAgICAgICAgICBNQVJLX0xPR19ST09UKHZpc2l0b3IsICJFeGNl
cHRpb25zIik7Ci0gICAgICAgICAgICBoZWFwUm9vdFZpc2l0b3IudmlzaXQoJm1fZ2xvYmFsRGF0
YS0+ZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdCgmbV92bS0+
ZXhjZXB0aW9uKTsKICAgICAgICAgICAgIHZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKICAgICAg
ICAgfQogICAgIApAQCAtNjU4LDcgKzY1OCw3IEBAIHZvaWQgSGVhcDo6ZGVsZXRlQWxsQ29tcGls
ZWRDb2RlKCkKIHsKICAgICAvLyBJZiBKYXZhU2NyaXB0IGlzIHJ1bm5pbmcsIGl0J3Mgbm90IHNh
ZmUgdG8gZGVsZXRlIGNvZGUsIHNpbmNlIHdlJ2xsIGVuZAogICAgIC8vIHVwIGRlbGV0aW5nIGNv
ZGUgdGhhdCBpcyBsaXZlIG9uIHRoZSBzdGFjay4KLSAgICBpZiAobV9nbG9iYWxEYXRhLT5keW5h
bWljR2xvYmFsT2JqZWN0KQorICAgIGlmIChtX3ZtLT5keW5hbWljR2xvYmFsT2JqZWN0KQogICAg
ICAgICByZXR1cm47CiAKICAgICBmb3IgKEV4ZWN1dGFibGVCYXNlKiBjdXJyZW50ID0gbV9jb21w
aWxlZENvZGUuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dCgpKSB7CkBA
IC03MDQsOCArNzA0LDggQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9n
ZwogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJHYXJiYWdlIENvbGxlY3Rpb24i
KTsKICAgICAKICAgICBHQ1BIQVNFKENvbGxlY3QpOwotICAgIEFTU0VSVChnbG9iYWxEYXRhKCkt
PmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKLSAgICBSRUxFQVNFX0FT
U0VSVChnbG9iYWxEYXRhKCktPmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3Vy
cmVudElkZW50aWZpZXJUYWJsZSgpKTsKKyAgICBBU1NFUlQodm0oKS0+YXBpTG9jaygpLmN1cnJl
bnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKHZtKCktPmlkZW50
aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpKTsK
ICAgICBBU1NFUlQobV9pc1NhZmVUb0NvbGxlY3QpOwogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX0JF
R0lOKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3Bl
cmF0aW9uKTsKQEAgLTc0OCw3ICs3NDgsNyBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dn
bGUgc3dlZXBUb2dnCiAKICAgICB7CiAgICAgICAgIEdDUEhBU0UoZmluYWxpemVTbWFsbFN0cmlu
Z3MpOwotICAgICAgICBtX2dsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5maW5hbGl6ZVNtYWxsU3Ry
aW5ncygpOworICAgICAgICBtX3ZtLT5zbWFsbFN0cmluZ3MuZmluYWxpemVTbWFsbFN0cmluZ3Mo
KTsKICAgICB9CiAKICAgICB7CkBAIC03NTgsNyArNzU4LDcgQEAgdm9pZCBIZWFwOjpjb2xsZWN0
KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogCiAgICAgewogICAgICAgICBHQ1BIQVNFKERlbGV0ZVNv
dXJjZVByb3ZpZGVyQ2FjaGVzKTsKLSAgICAgICAgbV9nbG9iYWxEYXRhLT5jbGVhclNvdXJjZVBy
b3ZpZGVyQ2FjaGVzKCk7CisgICAgICAgIG1fdm0tPmNsZWFyU291cmNlUHJvdmlkZXJDYWNoZXMo
KTsKICAgICB9CiAKICAgICBpZiAoc3dlZXBUb2dnbGUgPT0gRG9Td2VlcCkgewpAQCAtODQyLDcg
Kzg0Miw3IEBAIHZvaWQgSGVhcDo6ZGlkQWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQogCiBib29sIEhl
YXA6OmlzVmFsaWRBbGxvY2F0aW9uKHNpemVfdCkKIHsKLSAgICBpZiAoIWlzVmFsaWRUaHJlYWRT
dGF0ZShtX2dsb2JhbERhdGEpKQorICAgIGlmICghaXNWYWxpZFRocmVhZFN0YXRlKG1fdm0pKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9vcGVyYXRpb25JblByb2dyZXNzICE9
IE5vT3BlcmF0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24g
MTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NSw3ICs1NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEluY3JlbWVu
dGFsU3dlZXBlcjsKICAgICBjbGFzcyBKSVRTdHViUm91dGluZTsKICAgICBjbGFzcyBKU0NlbGw7
Ci0gICAgY2xhc3MgSlNHbG9iYWxEYXRhOworICAgIGNsYXNzIFZNOwogICAgIGNsYXNzIEpTU3Rh
Y2s7CiAgICAgY2xhc3MgSlNWYWx1ZTsKICAgICBjbGFzcyBMaXZlT2JqZWN0SXRlcmF0b3I7CkBA
IC05NiwxMSArOTYsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHdy
aXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU0NlbGwqKTsKICAgICAgICAgc3RhdGljIHVpbnQ4
X3QqIGFkZHJlc3NPZkNhcmRGb3IoSlNDZWxsKik7CiAKLSAgICAgICAgSGVhcChKU0dsb2JhbERh
dGEqLCBIZWFwVHlwZSk7CisgICAgICAgIEhlYXAoVk0qLCBIZWFwVHlwZSk7CiAgICAgICAgIH5I
ZWFwKCk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbGFzdENoYW5jZVRvRmluYWxp
emUoKTsKIAotICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEoKSBjb25zdCB7IHJldHVy
biBtX2dsb2JhbERhdGE7IH0KKyAgICAgICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsg
fQogICAgICAgICBNYXJrZWRTcGFjZSYgb2JqZWN0U3BhY2UoKSB7IHJldHVybiBtX29iamVjdFNw
YWNlOyB9CiAgICAgICAgIE1hY2hpbmVUaHJlYWRzJiBtYWNoaW5lVGhyZWFkcygpIHsgcmV0dXJu
IG1fbWFjaGluZVRocmVhZHM7IH0KIApAQCAtMjU5LDcgKzI1OSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAKICAgICAgICAgYm9vbCBtX2lzU2FmZVRvQ29sbGVjdDsKIAotICAgICAgICBK
U0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKKyAgICAgICAgVk0qIG1fdm07CiAgICAgICAgIGRv
dWJsZSBtX2xhc3RHQ0xlbmd0aDsKICAgICAgICAgZG91YmxlIG1fbGFzdENvZGVEaXNjYXJkVGlt
ZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuY3BwCShyZXZp
c2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NywxMiArNTcsMTIgQEAgc3RhdGljIHZvaWQgcmVsZWFzZUFQ
SUxvY2soY29uc3Qgdm9pZCogaQogICAgIHN0YXRpY19jYXN0PEpTTG9jayo+KGNvbnN0X2Nhc3Q8
dm9pZCo+KGluZm8pKS0+ZGVyZWYoKTsKIH0KIAotSGVhcFRpbWVyOjpIZWFwVGltZXIoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBDRlJ1bkxvb3BSZWYgcnVuTG9vcCkKLSAgICA6IG1fZ2xvYmFs
RGF0YShnbG9iYWxEYXRhKQorSGVhcFRpbWVyOjpIZWFwVGltZXIoVk0qIHZtLCBDRlJ1bkxvb3BS
ZWYgcnVuTG9vcCkKKyAgICA6IG1fdm0odm0pCiAgICAgLCBtX3J1bkxvb3AocnVuTG9vcCkKIHsK
ICAgICBtZW1zZXQoJm1fY29udGV4dCwgMCwgc2l6ZW9mKENGUnVuTG9vcFRpbWVyQ29udGV4dCkp
OwotICAgIG1fY29udGV4dC5pbmZvID0gJmdsb2JhbERhdGEtPmFwaUxvY2soKTsKKyAgICBtX2Nv
bnRleHQuaW5mbyA9ICZ2bS0+YXBpTG9jaygpOwogICAgIG1fY29udGV4dC5yZXRhaW4gPSByZXRh
aW5BUElMb2NrOwogICAgIG1fY29udGV4dC5yZWxlYXNlID0gcmVsZWFzZUFQSUxvY2s7CiAgICAg
bV90aW1lci5hZG9wdENGKENGUnVuTG9vcFRpbWVyQ3JlYXRlKDAsIHNfZGVjYWRlLCBzX2RlY2Fk
ZSwgMCwgMCwgSGVhcFRpbWVyOjp0aW1lckRpZEZpcmUsICZtX2NvbnRleHQpKTsKQEAgLTg5LDIz
ICs4OSwyMyBAQCB2b2lkIEhlYXBUaW1lcjo6dGltZXJEaWRGaXJlKENGUnVuTG9vcFRpCiAgICAg
SlNMb2NrKiBhcGlMb2NrID0gc3RhdGljX2Nhc3Q8SlNMb2NrKj4oY29udGV4dCk7CiAgICAgYXBp
TG9jay0+bG9jaygpOwogCi0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gYXBpTG9jay0+
Z2xvYmFsRGF0YSgpOwotICAgIC8vIFRoZSBKU0dsb2JhbERhdGEgaGFzIGJlZW4gZGVzdHJveWVk
LCBzbyB3ZSBzaG91bGQganVzdCBnaXZlIHVwLgotICAgIGlmICghZ2xvYmFsRGF0YSkgeworICAg
IFZNKiB2bSA9IGFwaUxvY2stPnZtKCk7CisgICAgLy8gVGhlIFZNIGhhcyBiZWVuIGRlc3Ryb3ll
ZCwgc28gd2Ugc2hvdWxkIGp1c3QgZ2l2ZSB1cC4KKyAgICBpZiAoIXZtKSB7CiAgICAgICAgIGFw
aUxvY2stPnVubG9jaygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgSGVhcFRpbWVy
KiBoZWFwVGltZXIgPSAwOwotICAgIGlmIChnbG9iYWxEYXRhLT5oZWFwLmFjdGl2aXR5Q2FsbGJh
Y2soKS0+bV90aW1lci5nZXQoKSA9PSB0aW1lcikKLSAgICAgICAgaGVhcFRpbWVyID0gZ2xvYmFs
RGF0YS0+aGVhcC5hY3Rpdml0eUNhbGxiYWNrKCk7Ci0gICAgZWxzZSBpZiAoZ2xvYmFsRGF0YS0+
aGVhcC5zd2VlcGVyKCktPm1fdGltZXIuZ2V0KCkgPT0gdGltZXIpCi0gICAgICAgIGhlYXBUaW1l
ciA9IGdsb2JhbERhdGEtPmhlYXAuc3dlZXBlcigpOworICAgIGlmICh2bS0+aGVhcC5hY3Rpdml0
eUNhbGxiYWNrKCktPm1fdGltZXIuZ2V0KCkgPT0gdGltZXIpCisgICAgICAgIGhlYXBUaW1lciA9
IHZtLT5oZWFwLmFjdGl2aXR5Q2FsbGJhY2soKTsKKyAgICBlbHNlIGlmICh2bS0+aGVhcC5zd2Vl
cGVyKCktPm1fdGltZXIuZ2V0KCkgPT0gdGltZXIpCisgICAgICAgIGhlYXBUaW1lciA9IHZtLT5o
ZWFwLnN3ZWVwZXIoKTsKICAgICBlbHNlCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAKICAgICB7Ci0gICAgICAgIEFQSUVudHJ5U2hpbSBzaGltKGdsb2JhbERhdGEpOwor
ICAgICAgICBBUElFbnRyeVNoaW0gc2hpbSh2bSk7CiAgICAgICAgIGhlYXBUaW1lci0+ZG9Xb3Jr
KCk7CiAgICAgfQogCkBAIC0xMTQsOCArMTE0LDggQEAgdm9pZCBIZWFwVGltZXI6OnRpbWVyRGlk
RmlyZShDRlJ1bkxvb3BUaQogCiAjZWxpZiBQTEFURk9STShCTEFDS0JFUlJZKQogCi1IZWFwVGlt
ZXI6OkhlYXBUaW1lcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCi0gICAgOiBtX2dsb2JhbERh
dGEoZ2xvYmFsRGF0YSkKK0hlYXBUaW1lcjo6SGVhcFRpbWVyKFZNKiB2bSkKKyAgICA6IG1fdm0o
dm0pCiAgICAgLCBtX3RpbWVyKHRoaXMsICZIZWFwVGltZXI6OnRpbWVyRGlkRmlyZSkKIHsKICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IEhlYXBUaW1lciBmb3Igb3RoZXIgdGhyZWFkcy4KQEAgLTE0
Miw4ICsxNDIsOCBAQCB2b2lkIEhlYXBUaW1lcjo6aW52YWxpZGF0ZSgpCiAKICNlbGlmIFBMQVRG
T1JNKFFUKQogCi1IZWFwVGltZXI6OkhlYXBUaW1lcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEp
Ci0gICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKK0hlYXBUaW1lcjo6SGVhcFRpbWVyKFZN
KiB2bSkKKyAgICA6IG1fdm0odm0pCiAgICAgLCBtX25ld1RocmVhZCgwKQogICAgICwgbV9tdXRl
eChRTXV0ZXg6Ok5vblJlY3Vyc2l2ZSkKIHsKQEAgLTE2Niw3ICsxNjYsNyBAQCB2b2lkIEhlYXBU
aW1lcjo6dGltZXJFdmVudChRVGltZXJFdmVudCopCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBBUElFbnRyeVNoaW0gc2hpbShtX2dsb2JhbERhdGEpOworICAgIEFQSUVudHJ5U2hpbSBz
aGltKG1fdm0pOwogICAgIGRvV29yaygpOwogfQogCkBAIC0xOTEsOCArMTkxLDggQEAgdm9pZCBI
ZWFwVGltZXI6OnN5bmNocm9uaXplKCkKIH0KIAogI2Vsc2UKLUhlYXBUaW1lcjo6SGVhcFRpbWVy
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKLSAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRh
KQorSGVhcFRpbWVyOjpIZWFwVGltZXIoVk0qIHZtKQorICAgIDogbV92bSh2bSkKIHsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmgJKHJldmlzaW9uIDE0ODY1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Miw3ICs0Miw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU0dsb2Jh
bERhdGE7CitjbGFzcyBWTTsKIAogI2lmIFBMQVRGT1JNKFFUKSAmJiAhVVNFKENGKQogY2xhc3Mg
SGVhcFRpbWVyIDogcHVibGljIFFPYmplY3QgewpAQCAtNTEsMTAgKzUxLDEwIEBAIGNsYXNzIEhl
YXBUaW1lciB7CiAjZW5kaWYKIHB1YmxpYzoKICNpZiBVU0UoQ0YpCi0gICAgSGVhcFRpbWVyKEpT
R2xvYmFsRGF0YSosIENGUnVuTG9vcFJlZik7CisgICAgSGVhcFRpbWVyKFZNKiwgQ0ZSdW5Mb29w
UmVmKTsKICAgICBzdGF0aWMgdm9pZCB0aW1lckRpZEZpcmUoQ0ZSdW5Mb29wVGltZXJSZWYsIHZv
aWQqKTsKICNlbHNlCi0gICAgSGVhcFRpbWVyKEpTR2xvYmFsRGF0YSopOworICAgIEhlYXBUaW1l
cihWTSopOwogI2VuZGlmCiAgICAgCiAgICAgdmlydHVhbCB+SGVhcFRpbWVyKCk7CkBAIC02Myw3
ICs2Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZG9Xb3JrKCkgPSAwOwogICAgIAog
cHJvdGVjdGVkOgotICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworICAgIFZNKiBtX3Zt
OwogCiAjaWYgVVNFKENGKQogICAgIHN0YXRpYyBjb25zdCBDRlRpbWVJbnRlcnZhbCBzX2RlY2Fk
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxT
d2VlcGVyLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBA
QCBzdGF0aWMgY29uc3QgZG91YmxlIHN3ZWVwVGltZU11bHRpcGxpZXIgCiAjaWYgVVNFKENGKQog
ICAgIAogSW5jcmVtZW50YWxTd2VlcGVyOjpJbmNyZW1lbnRhbFN3ZWVwZXIoSGVhcCogaGVhcCwg
Q0ZSdW5Mb29wUmVmIHJ1bkxvb3ApCi0gICAgOiBIZWFwVGltZXIoaGVhcC0+Z2xvYmFsRGF0YSgp
LCBydW5Mb29wKQorICAgIDogSGVhcFRpbWVyKGhlYXAtPnZtKCksIHJ1bkxvb3ApCiAgICAgLCBt
X2N1cnJlbnRCbG9ja1RvU3dlZXBJbmRleCgwKQogICAgICwgbV9ibG9ja3NUb1N3ZWVwKGhlYXAt
Pm1fYmxvY2tTbmFwc2hvdCkKIHsKQEAgLTcwLDcgKzcwLDcgQEAgdm9pZCBJbmNyZW1lbnRhbFN3
ZWVwZXI6OmNhbmNlbFRpbWVyKCkKICNlbGlmIFBMQVRGT1JNKEJMQUNLQkVSUlkpIHx8IFBMQVRG
T1JNKFFUKQogICAgCiBJbmNyZW1lbnRhbFN3ZWVwZXI6OkluY3JlbWVudGFsU3dlZXBlcihIZWFw
KiBoZWFwKQotICAgIDogSGVhcFRpbWVyKGhlYXAtPmdsb2JhbERhdGEoKSkKKyAgICA6IEhlYXBU
aW1lcihoZWFwLT52bSgpKQogICAgICwgbV9jdXJyZW50QmxvY2tUb1N3ZWVwSW5kZXgoMCkKICAg
ICAsIG1fYmxvY2tzVG9Td2VlcChoZWFwLT5tX2Jsb2NrU25hcHNob3QpCiB7CkBAIC0xMjgsNyAr
MTI4LDcgQEAgdm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnN3ZWVwTmV4dEJsb2NrKAogICAgICAg
ICAgICAgY29udGludWU7CiAKICAgICAgICAgYmxvY2stPnN3ZWVwKCk7Ci0gICAgICAgIG1fZ2xv
YmFsRGF0YS0+aGVhcC5vYmplY3RTcGFjZSgpLmZyZWVPclNocmlua0Jsb2NrKGJsb2NrKTsKKyAg
ICAgICAgbV92bS0+aGVhcC5vYmplY3RTcGFjZSgpLmZyZWVPclNocmlua0Jsb2NrKGJsb2NrKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KQEAgLTE0NCwxNCArMTQ0LDE0IEBAIHZvaWQgSW5j
cmVtZW50YWxTd2VlcGVyOjp3aWxsRmluaXNoU3dlZXAKIHsKICAgICBtX2N1cnJlbnRCbG9ja1Rv
U3dlZXBJbmRleCA9IDA7CiAgICAgbV9ibG9ja3NUb1N3ZWVwLmNsZWFyKCk7Ci0gICAgaWYgKG1f
Z2xvYmFsRGF0YSkKKyAgICBpZiAobV92bSkKICAgICAgICAgY2FuY2VsVGltZXIoKTsKIH0KIAog
I2Vsc2UKIAotSW5jcmVtZW50YWxTd2VlcGVyOjpJbmNyZW1lbnRhbFN3ZWVwZXIoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhKQotICAgIDogSGVhcFRpbWVyKGdsb2JhbERhdGEpCitJbmNyZW1lbnRh
bFN3ZWVwZXI6OkluY3JlbWVudGFsU3dlZXBlcihWTSogdm0pCisgICAgOiBIZWFwVGltZXIodm0p
CiB7CiB9CiAKQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6ZG9X
b3JrKCkKIAogUGFzc093blB0cjxJbmNyZW1lbnRhbFN3ZWVwZXI+IEluY3JlbWVudGFsU3dlZXBl
cjo6Y3JlYXRlKEhlYXAqIGhlYXApCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbmNyZW1l
bnRhbFN3ZWVwZXIoaGVhcC0+Z2xvYmFsRGF0YSgpKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBJbmNyZW1lbnRhbFN3ZWVwZXIoaGVhcC0+dm0oKSkpOwogfQogCiB2b2lkIEluY3JlbWVudGFs
U3dlZXBlcjo6c3RhcnRTd2VlcGluZyhWZWN0b3I8TWFya2VkQmxvY2sqPiYpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAkocmV2aXNp
b24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2Vl
cGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHJpdmF0ZToKICAgICBWZWN0
b3I8TWFya2VkQmxvY2sqPiYgbV9ibG9ja3NUb1N3ZWVwOwogI2Vsc2UKICAgICAKLSAgICBJbmNy
ZW1lbnRhbFN3ZWVwZXIoSlNHbG9iYWxEYXRhKik7CisgICAgSW5jcmVtZW50YWxTd2VlcGVyKFZN
Kik7CiAgICAgCiAjZW5kaWYKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9M
b2NhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsLmgJ
KHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgTG9jYWxfaAogCiAjaW5j
bHVkZSAiSGFuZGxlLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0u
aCIKIAogLyoKICAgICBBIHN0cm9uZ2x5IHJlZmVyZW5jZWQgaGFuZGxlIHdob3NlIGxpZmV0aW1l
IGlzIHRlbXBvcmFyeSwgbGltaXRlZCB0byBhIGdpdmVuCkBAIC00NCw4ICs0NCw4IEBAIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBMb2NhbCA6IHB1YmwKIHB1YmxpYzoKICAgICB0eXBlZGVm
IHR5cGVuYW1lIEhhbmRsZTxUPjo6RXh0ZXJuYWxUeXBlIEV4dGVybmFsVHlwZTsKIAotICAgIExv
Y2FsKEpTR2xvYmFsRGF0YSYsIEV4dGVybmFsVHlwZSA9IEV4dGVybmFsVHlwZSgpKTsKLSAgICBM
b2NhbChKU0dsb2JhbERhdGEmLCBIYW5kbGU8VD4pOworICAgIExvY2FsKFZNJiwgRXh0ZXJuYWxU
eXBlID0gRXh0ZXJuYWxUeXBlKCkpOworICAgIExvY2FsKFZNJiwgSGFuZGxlPFQ+KTsKICAgICBM
b2NhbChjb25zdCBMb2NhbDxUPiYpOyAvLyBBZG9wdGluZyBjb25zdHJ1Y3Rvci4gVXNlZCB0byBy
ZXR1cm4gYSBMb2NhbCB0byBhIGNhbGxpbmcgZnVuY3Rpb24uCiAKICAgICBMb2NhbCYgb3BlcmF0
b3I9KEV4dGVybmFsVHlwZSk7CkBAIC01NiwxNCArNTYsMTQgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHNldChFeHRlcm5hbFR5cGUpOwogfTsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBM
b2NhbDxUPjo6TG9jYWwoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBFeHRlcm5hbFR5cGUgdmFs
dWUpCi0gICAgOiBIYW5kbGU8VD4oZ2xvYmFsRGF0YS5oZWFwLmhhbmRsZVN0YWNrKCktPnB1c2go
KSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgTG9jYWw8VD46OkxvY2FsKFZNJiB2bSwg
RXh0ZXJuYWxUeXBlIHZhbHVlKQorICAgIDogSGFuZGxlPFQ+KHZtLmhlYXAuaGFuZGxlU3RhY2so
KS0+cHVzaCgpKQogewogICAgIHNldCh2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBU
PiBpbmxpbmUgTG9jYWw8VD46OkxvY2FsKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSGFuZGxl
PFQ+IG90aGVyKQotICAgIDogSGFuZGxlPFQ+KGdsb2JhbERhdGEuaGVhcC5oYW5kbGVTdGFjaygp
LT5wdXNoKCkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIExvY2FsPFQ+OjpMb2NhbChW
TSYgdm0sIEhhbmRsZTxUPiBvdGhlcikKKyAgICA6IEhhbmRsZTxUPih2bS5oZWFwLmhhbmRsZVN0
YWNrKCktPnB1c2goKSkKIHsKICAgICBzZXQob3RoZXIuZ2V0KCkpOwogfQpAQCAtMTAxLDggKzEw
MSw4IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBMb2NhbDwKIHRlbXBsYXRl
IDx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9IDA+IGNsYXNzIExvY2FsU3Rh
Y2sgewogICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFuZGxlPFQ+OjpFeHRlcm5hbFR5cGUgRXh0ZXJu
YWxUeXBlOwogcHVibGljOgotICAgIExvY2FsU3RhY2soSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KQotICAgICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorICAgIExvY2FsU3RhY2soVk0m
IHZtKQorICAgICAgICA6IG1fdm0odm0pCiAgICAgICAgICwgbV9jb3VudCgwKQogICAgIHsKICAg
ICB9CkBAIC0xMjIsNyArMTIyLDcgQEAgcHVibGljOgogICAgIHZvaWQgcHVzaChFeHRlcm5hbFR5
cGUgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAobV9jb3VudCA9PSBtX3N0YWNrLnNpemUoKSkK
LSAgICAgICAgICAgIG1fc3RhY2suYXBwZW5kKExvY2FsPFQ+KG1fZ2xvYmFsRGF0YSwgdmFsdWUp
KTsKKyAgICAgICAgICAgIG1fc3RhY2suYXBwZW5kKExvY2FsPFQ+KG1fdm0sIHZhbHVlKSk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fc3RhY2tbbV9jb3VudF0gPSB2YWx1ZTsKICAgICAg
ICAgbV9jb3VudCsrOwpAQCAtMTMyLDcgKzEzMiw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9jb3VudDsgfQogCiBwcml2YXRlOgotICAgIEpTR2xvYmFs
RGF0YSYgbV9nbG9iYWxEYXRhOworICAgIFZNJiBtX3ZtOwogICAgIFZlY3RvcjxMb2NhbDxUPiwg
aW5saW5lQ2FwYWNpdHk+IG1fc3RhY2s7CiAgICAgdW5zaWduZWQgbV9jb3VudDsKIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbFNjb3BlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxTY29wZS5oCShyZXZpc2lvbiAxNDg2NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbFNjb3BlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDExICszNywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBMb2NhbFNjb3BlIGlz
IHNpbWlsYXIgaW4gY29uY2VwdCB0byBOU0F1dG9yZWxlYXNlUG9vbC4KICovCiAKLWNsYXNzIEpT
R2xvYmFsRGF0YTsKK2NsYXNzIFZNOwogCiBjbGFzcyBMb2NhbFNjb3BlIHsKIHB1YmxpYzoKLSAg
ICBleHBsaWNpdCBMb2NhbFNjb3BlKEpTR2xvYmFsRGF0YSYpOworICAgIGV4cGxpY2l0IExvY2Fs
U2NvcGUoVk0mKTsKICAgICB+TG9jYWxTY29wZSgpOwogICAgIAogICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBMb2NhbDxUPiByZWxlYXNlKExvY2FsPFQ+KTsgLy8gRGVzdHJveXMgYWxsIG90aGVy
IGxvY2FscyBpbiB0aGUgc2NvcGUuCkBAIC01MSw4ICs1MSw4IEBAIHByaXZhdGU6CiAgICAgSGFu
ZGxlU3RhY2s6OkZyYW1lIG1fbGFzdEZyYW1lOwogfTsKIAotaW5saW5lIExvY2FsU2NvcGU6Okxv
Y2FsU2NvcGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAgIDogbV9oYW5kbGVTdGFjayhn
bG9iYWxEYXRhLmhlYXAuaGFuZGxlU3RhY2soKSkKK2lubGluZSBMb2NhbFNjb3BlOjpMb2NhbFNj
b3BlKFZNJiB2bSkKKyAgICA6IG1faGFuZGxlU3RhY2sodm0uaGVhcC5oYW5kbGVTdGFjaygpKQog
ewogICAgIG1faGFuZGxlU3RhY2stPmVudGVyU2NvcGUobV9sYXN0RnJhbWUpOwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3Bw
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5l
U3RhY2tNYXJrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVk
ZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSlNB
cnJheS5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5j
bHVkZSA8c2V0am1wLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgpAQCAtMTg4LDcgKzE4OCw3IEBAIHZvaWQgTWFjaGluZVRocmVhZHM6Om1ha2VV
c2FibGVGcm9tTXVsdGkKIAogdm9pZCBNYWNoaW5lVGhyZWFkczo6YWRkQ3VycmVudFRocmVhZCgp
CiB7Ci0gICAgQVNTRVJUKCFtX2hlYXAtPmdsb2JhbERhdGEoKS0+ZXhjbHVzaXZlVGhyZWFkIHx8
IG1faGVhcC0+Z2xvYmFsRGF0YSgpLT5leGNsdXNpdmVUaHJlYWQgPT0gY3VycmVudFRocmVhZCgp
KTsKKyAgICBBU1NFUlQoIW1faGVhcC0+dm0oKS0+ZXhjbHVzaXZlVGhyZWFkIHx8IG1faGVhcC0+
dm0oKS0+ZXhjbHVzaXZlVGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKSk7CiAKICAgICBpZiAoIW1f
dGhyZWFkU3BlY2lmaWMgfHwgdGhyZWFkU3BlY2lmaWNHZXQobV90aHJlYWRTcGVjaWZpYykpCiAg
ICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNCw3ICs0LDcg
QEAKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJIZWFwLmgiCiAj
aW5jbHVkZSAiSW5jcmVtZW50YWxTd2VlcGVyLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgi
CisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC03MCw3ICs3MCw3IEBAIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6
OnRyeUFsbG9jYXQKICAgICAKIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2Fz
ZShzaXplX3QgYnl0ZXMpCiB7Ci0gICAgQVNTRVJUKG1faGVhcC0+Z2xvYmFsRGF0YSgpLT5hcGlM
b2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CisgICAgQVNTRVJUKG1faGVhcC0+
dm0oKS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogI2lmIENPTExF
Q1RfT05fRVZFUllfQUxMT0NBVElPTgogICAgIG1faGVhcC0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsK
ICAgICBBU1NFUlQobV9oZWFwLT5tX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24p
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2
aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIE1hcmtlZEJsb2NrOjpNYXJrZWRC
bG9jayhSZWdpb24qIHJlZ2lvbiwKICAgICAsIG1fZGVzdHJ1Y3RvclR5cGUoZGVzdHJ1Y3RvclR5
cGUpCiAgICAgLCBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCiAgICAgLCBtX3N0YXRlKE5ldykgLy8g
QWxsIGNlbGxzIHN0YXJ0IG91dCB1bm1hcmtlZC4KLSAgICAsIG1fd2Vha1NldChhbGxvY2F0b3It
PmhlYXAoKS0+Z2xvYmFsRGF0YSgpKQorICAgICwgbV93ZWFrU2V0KGFsbG9jYXRvci0+aGVhcCgp
LT52bSgpKQogewogICAgIEFTU0VSVChhbGxvY2F0b3IpOwogICAgIEhFQVBfTE9HX0JMT0NLX1NU
QVRFX1RSQU5TSVRJT04odGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcigpIGNvbnN0
OwogICAgICAgICBIZWFwKiBoZWFwKCkgY29uc3Q7Ci0gICAgICAgIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSgpIGNvbnN0OworICAgICAgICBWTSogdm0oKSBjb25zdDsKICAgICAgICAgV2Vha1Nl
dCYgd2Vha1NldCgpOwogICAgICAgICAKICAgICAgICAgZW51bSBTd2VlcE1vZGUgeyBTd2VlcE9u
bHksIFN3ZWVwVG9GcmVlTGlzdCB9OwpAQCAtMjQwLDkgKzI0MCw5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICByZXR1cm4gbV93ZWFrU2V0LmhlYXAoKTsKICAgICB9CiAKLSAgICBpbmxpbmUg
SlNHbG9iYWxEYXRhKiBNYXJrZWRCbG9jazo6Z2xvYmFsRGF0YSgpIGNvbnN0CisgICAgaW5saW5l
IFZNKiBNYXJrZWRCbG9jazo6dm0oKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fd2Vh
a1NldC5nbG9iYWxEYXRhKCk7CisgICAgICAgIHJldHVybiBtX3dlYWtTZXQudm0oKTsKICAgICB9
CiAKICAgICBpbmxpbmUgV2Vha1NldCYgTWFya2VkQmxvY2s6OndlYWtTZXQoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMTQ4NjU1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04LDcgKzgsNyBAQAogI2luY2x1ZGUgIkdDVGhyZWFkLmgiCiAjaW5jbHVkZSAi
SlNBcnJheS5oIgogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCi0jaW5jbHVkZSAi
SlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgog
I2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgpAQCAtMTcsNyAr
MTcsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIFNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcihHQ1Ro
cmVhZFNoYXJlZERhdGEmIHNoYXJlZCkKLSAgICA6IG1fc3RhY2soc2hhcmVkLm1fZ2xvYmFsRGF0
YS0+aGVhcC5ibG9ja0FsbG9jYXRvcigpKQorICAgIDogbV9zdGFjayhzaGFyZWQubV92bS0+aGVh
cC5ibG9ja0FsbG9jYXRvcigpKQogICAgICwgbV92aXNpdENvdW50KDApCiAgICAgLCBtX2lzSW5Q
YXJhbGxlbE1vZGUoZmFsc2UpCiAgICAgLCBtX3NoYXJlZChzaGFyZWQpCkBAIC0zNiw3ICszNiw3
IEBAIFNsb3RWaXNpdG9yOjp+U2xvdFZpc2l0b3IoKQogCiB2b2lkIFNsb3RWaXNpdG9yOjpzZXR1
cCgpCiB7Ci0gICAgbV9zaGFyZWQubV9zaG91bGRIYXNoQ29ucyA9IG1fc2hhcmVkLm1fZ2xvYmFs
RGF0YS0+aGF2ZUVub3VnaE5ld1N0cmluZ3NUb0hhc2hDb25zKCk7CisgICAgbV9zaGFyZWQubV9z
aG91bGRIYXNoQ29ucyA9IG1fc2hhcmVkLm1fdm0tPmhhdmVFbm91Z2hOZXdTdHJpbmdzVG9IYXNo
Q29ucygpOwogICAgIG1fc2hvdWxkSGFzaENvbnMgPSBtX3NoYXJlZC5tX3Nob3VsZEhhc2hDb25z
OwogI2lmIEVOQUJMRShQQVJBTExFTF9HQykKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9zaGFyZWQubV9nY1RocmVhZHMuc2l6ZSgpOyArK2kpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TdHJvbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TdHJvbmcuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3Ryb25nLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwogCiAvLyBBIHN0cm9u
Z2x5IHJlZmVyZW5jZWQgaGFuZGxlIHRoYXQgcHJldmVudHMgdGhlIG9iamVjdCBpdCBwb2ludHMg
dG8gZnJvbSBiZWluZyBnYXJiYWdlIGNvbGxlY3RlZC4KIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBj
bGFzcyBTdHJvbmcgOiBwdWJsaWMgSGFuZGxlPFQ+IHsKQEAgLTQ4LDkgKzQ4LDkgQEAgcHVibGlj
OgogICAgIHsKICAgICB9CiAgICAgCi0gICAgU3Ryb25nKEpTR2xvYmFsRGF0YSYsIEV4dGVybmFs
VHlwZSA9IEV4dGVybmFsVHlwZSgpKTsKKyAgICBTdHJvbmcoVk0mLCBFeHRlcm5hbFR5cGUgPSBF
eHRlcm5hbFR5cGUoKSk7CiAKLSAgICBTdHJvbmcoSlNHbG9iYWxEYXRhJiwgSGFuZGxlPFQ+KTsK
KyAgICBTdHJvbmcoVk0mLCBIYW5kbGU8VD4pOwogICAgIAogICAgIFN0cm9uZyhjb25zdCBTdHJv
bmcmIG90aGVyKQogICAgICAgICA6IEhhbmRsZTxUPigpCkBAIC05NSw3ICs5NSw3IEBAIHB1Ymxp
YzoKIAogICAgIEV4dGVybmFsVHlwZSBnZXQoKSBjb25zdCB7IHJldHVybiBIYW5kbGVUeXBlczxU
Pjo6Z2V0RnJvbVNsb3QodGhpcy0+c2xvdCgpKTsgfQogCi0gICAgdm9pZCBzZXQoSlNHbG9iYWxE
YXRhJiwgRXh0ZXJuYWxUeXBlKTsKKyAgICB2b2lkIHNldChWTSYsIEV4dGVybmFsVHlwZSk7CiAK
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gU3Ryb25nJiBvcGVyYXRvcj0oY29uc3QgU3Ryb25n
PFU+JiBvdGhlcikKICAgICB7CkBAIC0xMDQsNyArMTA0LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgcmV0dXJuICp0aGlzOwogICAgICAgICB9CiAKLSAgICAgICAgc2V0KCpIYW5kbGVTZXQ6Omhl
YXBGb3Iob3RoZXIuc2xvdCgpKS0+Z2xvYmFsRGF0YSgpLCBvdGhlci5nZXQoKSk7CisgICAgICAg
IHNldCgqSGFuZGxlU2V0OjpoZWFwRm9yKG90aGVyLnNsb3QoKSktPnZtKCksIG90aGVyLmdldCgp
KTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KICAgICAKQEAgLTExNSw3ICsxMTUsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgIH0KIAotICAgICAg
ICBzZXQoKkhhbmRsZVNldDo6aGVhcEZvcihvdGhlci5zbG90KCkpLT5nbG9iYWxEYXRhKCksIG90
aGVyLmdldCgpKTsKKyAgICAgICAgc2V0KCpIYW5kbGVTZXQ6OmhlYXBGb3Iob3RoZXIuc2xvdCgp
KS0+dm0oKSwgb3RoZXIuZ2V0KCkpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdHJvbmdJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Ryb25nSW5saW5lcy5oCShyZXZpc2lv
biAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdHJvbmdJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDI5ICsyNiwyOSBAQAogI2lmbmRlZiBTdHJvbmdJbmxpbmVz
X2gKICNkZWZpbmUgU3Ryb25nSW5saW5lc19oCiAKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIK
KyNpbmNsdWRlICJWTS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+Ci1pbmxpbmUgU3Ryb25nPFQ+OjpTdHJvbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBF
eHRlcm5hbFR5cGUgdmFsdWUpCi0gICAgOiBIYW5kbGU8VD4oZ2xvYmFsRGF0YS5oZWFwLmhhbmRs
ZVNldCgpLT5hbGxvY2F0ZSgpKQoraW5saW5lIFN0cm9uZzxUPjo6U3Ryb25nKFZNJiB2bSwgRXh0
ZXJuYWxUeXBlIHZhbHVlKQorICAgIDogSGFuZGxlPFQ+KHZtLmhlYXAuaGFuZGxlU2V0KCktPmFs
bG9jYXRlKCkpCiB7CiAgICAgc2V0KHZhbHVlKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
Ci1pbmxpbmUgU3Ryb25nPFQ+OjpTdHJvbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBIYW5k
bGU8VD4gaGFuZGxlKQotICAgIDogSGFuZGxlPFQ+KGdsb2JhbERhdGEuaGVhcC5oYW5kbGVTZXQo
KS0+YWxsb2NhdGUoKSkKK2lubGluZSBTdHJvbmc8VD46OlN0cm9uZyhWTSYgdm0sIEhhbmRsZTxU
PiBoYW5kbGUpCisgICAgOiBIYW5kbGU8VD4odm0uaGVhcC5oYW5kbGVTZXQoKS0+YWxsb2NhdGUo
KSkKIHsKICAgICBzZXQoaGFuZGxlLmdldCgpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
Ci1pbmxpbmUgdm9pZCBTdHJvbmc8VD46OnNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEV4
dGVybmFsVHlwZSB2YWx1ZSkKK2lubGluZSB2b2lkIFN0cm9uZzxUPjo6c2V0KFZNJiB2bSwgRXh0
ZXJuYWxUeXBlIHZhbHVlKQogewogICAgIGlmICghc2xvdCgpKQotICAgICAgICBzZXRTbG90KGds
b2JhbERhdGEuaGVhcC5oYW5kbGVTZXQoKS0+YWxsb2NhdGUoKSk7CisgICAgICAgIHNldFNsb3Qo
dm0uaGVhcC5oYW5kbGVTZXQoKS0+YWxsb2NhdGUoKSk7CiAgICAgc2V0KHZhbHVlKTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3VwZXJSZWdpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdXBlclJlZ2lvbi5oCShyZXZpc2lvbiAx
NDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdXBlclJlZ2lvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBK
U0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIAogY2xhc3MgU3VwZXJSZWdpb24gOiBwdWJsaWMgV1RG
OjpNZXRhQWxsb2NhdG9yIHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWtTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1dlYWtTZXQuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9XZWFrU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1
ZGUgIldlYWtTZXQuaCIKIAogI2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJKU0dsb2JhbERh
dGEuaCIKKyNpbmNsdWRlICJWTS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMiArMzgs
MTIgQEAgcHVibGljOgogICAgIHN0YXRpYyBXZWFrSW1wbCogYWxsb2NhdGUoSlNWYWx1ZSwgV2Vh
a0hhbmRsZU93bmVyKiA9IDAsIHZvaWQqIGNvbnRleHQgPSAwKTsKICAgICBzdGF0aWMgdm9pZCBk
ZWFsbG9jYXRlKFdlYWtJbXBsKik7CiAKLSAgICBXZWFrU2V0KEpTR2xvYmFsRGF0YSopOworICAg
IFdlYWtTZXQoVk0qKTsKICAgICB+V2Vha1NldCgpOwogICAgIHZvaWQgbGFzdENoYW5jZVRvRmlu
YWxpemUoKTsKIAogICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKLSAgICBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEoKSBjb25zdDsKKyAgICBWTSogdm0oKSBjb25zdDsKIAogICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0OwogCkBAIC02MiwxOSArNjIsMTkgQEAgcHJpdmF0ZToKICAgICBXZWFrQmxvY2s6
OkZyZWVDZWxsKiBtX2FsbG9jYXRvcjsKICAgICBXZWFrQmxvY2sqIG1fbmV4dEFsbG9jYXRvcjsK
ICAgICBEb3VibHlMaW5rZWRMaXN0PFdlYWtCbG9jaz4gbV9ibG9ja3M7Ci0gICAgSlNHbG9iYWxE
YXRhKiBtX2dsb2JhbERhdGE7CisgICAgVk0qIG1fdm07CiB9OwogCi1pbmxpbmUgV2Vha1NldDo6
V2Vha1NldChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitpbmxpbmUgV2Vha1NldDo6V2Vha1Nl
dChWTSogdm0pCiAgICAgOiBtX2FsbG9jYXRvcigwKQogICAgICwgbV9uZXh0QWxsb2NhdG9yKDAp
Ci0gICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKKyAgICAsIG1fdm0odm0pCiB7CiB9CiAK
LWlubGluZSBKU0dsb2JhbERhdGEqIFdlYWtTZXQ6Omdsb2JhbERhdGEoKSBjb25zdAoraW5saW5l
IFZNKiBXZWFrU2V0Ojp2bSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZ2xvYmFsRGF0YTsKKyAg
ICByZXR1cm4gbV92bTsKIH0KIAogaW5saW5lIGJvb2wgV2Vha1NldDo6aXNFbXB0eSgpIGNvbnN0
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQWJzdHJhY3RQQy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Fic3RyYWN0
UEMuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQWJzdHJhY3RQQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDE5ICsyNywxOSBAQAog
I2luY2x1ZGUgIkFic3RyYWN0UEMuaCIKIAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgotI2luY2x1
ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiSlNPYmplY3Qu
aCIKIAogCiBuYW1lc3BhY2UgSlNDIHsKIAotQWJzdHJhY3RQQzo6QWJzdHJhY3RQQyhKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEV4ZWNTdGF0ZSogZXhlYykKK0Fic3RyYWN0UEM6OkFic3RyYWN0
UEMoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbERh
dGEpOworICAgIFVOVVNFRF9QQVJBTSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAg
IAogI2lmIEVOQUJMRShKSVQpCi0gICAgaWYgKGdsb2JhbERhdGEuY2FuVXNlSklUKCkpIHsKKyAg
ICBpZiAodm0uY2FuVXNlSklUKCkpIHsKICAgICAgICAgbV9wb2ludGVyID0gZXhlYy0+cmV0dXJu
UEMoKS52YWx1ZSgpOwogICAgICAgICBtX21vZGUgPSBKSVQ7CiAgICAgICAgIHJldHVybjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9BYnN0cmFjdFBDLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Fic3RyYWN0UEMuaAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Fi
c3RyYWN0UEMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiBjbGFzcyBFeGVjU3RhdGU7
CiBzdHJ1Y3QgSW5zdHJ1Y3Rpb247CiAKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIHsK
ICAgICB9CiAgICAgCi0gICAgQWJzdHJhY3RQQyhKU0dsb2JhbERhdGEmLCBFeGVjU3RhdGUqKTsK
KyAgICBBYnN0cmFjdFBDKFZNJiwgRXhlY1N0YXRlKik7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkK
ICAgICBBYnN0cmFjdFBDKFJldHVybkFkZHJlc3NQdHIgcHRyKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhY2hlZENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FjaGVkQ2FsbC5oCShyZXZpc2lvbiAxNDg2NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FjaGVkQ2FsbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBDYWNo
ZWRDYWxsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwgaW50IGFy
Z3VtZW50Q291bnQpCiAgICAgICAgICAgICA6IG1fdmFsaWQoZmFsc2UpCiAgICAgICAgICAgICAs
IG1faW50ZXJwcmV0ZXIoY2FsbEZyYW1lLT5pbnRlcnByZXRlcigpKQotICAgICAgICAgICAgLCBt
X2dsb2JhbE9iamVjdFNjb3BlKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvbi0+c2Nv
cGUoKS0+Z2xvYmFsT2JqZWN0KCkpCisgICAgICAgICAgICAsIG1fZ2xvYmFsT2JqZWN0U2NvcGUo
Y2FsbEZyYW1lLT52bSgpLCBmdW5jdGlvbi0+c2NvcGUoKS0+Z2xvYmFsT2JqZWN0KCkpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIEFTU0VSVCghZnVuY3Rpb24tPmlzSG9zdEZ1bmN0aW9uKCkpOwog
ICAgICAgICAgICAgbV9jbG9zdXJlID0gbV9pbnRlcnByZXRlci0+cHJlcGFyZUZvclJlcGVhdENh
bGwoZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpLCBjYWxsRnJhbWUsIGZ1bmN0aW9uLCBhcmd1bWVu
dENvdW50ICsgMSwgZnVuY3Rpb24tPnNjb3BlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCw3ICsyNCw3IEBACiAjZGVmaW5lIENhbGxGcmFtZV9oCiAKICNpbmNsdWRlICJBYnN0
cmFjdFBDLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIKICNp
bmNsdWRlICJKU1N0YWNrLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAj
aW5jbHVkZSAiUmVnaXN0ZXIuaCIKQEAgLTYwLDQ2ICs2MCw0NiBAQCBuYW1lc3BhY2UgSlNDICB7
CiAgICAgICAgIC8vIHRoZSBhY3R1YWwgRE9NIHdpbmRvdywgd2hpY2ggY2FuJ3QgYmUgInRoaXMi
IGZvciBzZWN1cml0eSByZWFzb25zLgogICAgICAgICBKU09iamVjdCogZ2xvYmFsVGhpc1ZhbHVl
KCkgY29uc3Q7CiAKLSAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKCkgY29uc3Q7Cisg
ICAgICAgIFZNJiB2bSgpIGNvbnN0OwogCiAgICAgICAgIC8vIENvbnZlbmllbmNlIGZ1bmN0aW9u
cyBmb3IgYWNjZXNzIHRvIGdsb2JhbCBkYXRhLgogICAgICAgICAvLyBJdCB0YWtlcyBhIGZldyBt
ZW1vcnkgcmVmZXJlbmNlcyB0byBnZXQgZnJvbSBhIGNhbGwgZnJhbWUgdG8gdGhlIGdsb2JhbCBk
YXRhCiAgICAgICAgIC8vIHBvaW50ZXIsIHNvIHRoZXNlIGFyZSBpbmVmZmljaWVudCwgYW5kIHNo
b3VsZCBiZSB1c2VkIHNwYXJpbmdseSBpbiBuZXcgY29kZS4KICAgICAgICAgLy8gQnV0IHRoZXkn
cmUgdXNlZCBpbiBtYW55IHBsYWNlcyBpbiBsZWdhY3kgY29kZSwgc28gdGhleSdyZSBub3QgZ29p
bmcgYXdheSBhbnkgdGltZSBzb29uLgogCi0gICAgICAgIHZvaWQgY2xlYXJFeGNlcHRpb24oKSB7
IGdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBKU1ZhbHVlKCk7IH0KKyAgICAgICAgdm9pZCBjbGVh
ckV4Y2VwdGlvbigpIHsgdm0oKS5leGNlcHRpb24gPSBKU1ZhbHVlKCk7IH0KICAgICAgICAgdm9p
ZCBjbGVhclN1cHBsZW1lbnRhcnlFeGNlcHRpb25JbmZvKCkKICAgICAgICAgewotICAgICAgICAg
ICAgZ2xvYmFsRGF0YSgpLmV4Y2VwdGlvblN0YWNrID0gUmVmQ291bnRlZEFycmF5PFN0YWNrRnJh
bWU+KCk7CisgICAgICAgICAgICB2bSgpLmV4Y2VwdGlvblN0YWNrID0gUmVmQ291bnRlZEFycmF5
PFN0YWNrRnJhbWU+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbigp
IGNvbnN0IHsgcmV0dXJuIGdsb2JhbERhdGEoKS5leGNlcHRpb247IH0KLSAgICAgICAgYm9vbCBo
YWRFeGNlcHRpb24oKSBjb25zdCB7IHJldHVybiBnbG9iYWxEYXRhKCkuZXhjZXB0aW9uOyB9Cisg
ICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gdm0oKS5leGNlcHRpb247
IH0KKyAgICAgICAgYm9vbCBoYWRFeGNlcHRpb24oKSBjb25zdCB7IHJldHVybiB2bSgpLmV4Y2Vw
dGlvbjsgfQogCi0gICAgICAgIGNvbnN0IENvbW1vbklkZW50aWZpZXJzJiBwcm9wZXJ0eU5hbWVz
KCkgY29uc3QgeyByZXR1cm4gKmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzOyB9Ci0gICAgICAg
IGNvbnN0IE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBlbXB0eUxpc3QoKSBjb25zdCB7IHJldHVybiAq
Z2xvYmFsRGF0YSgpLmVtcHR5TGlzdDsgfQotICAgICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0
ZXIoKSB7IHJldHVybiBnbG9iYWxEYXRhKCkuaW50ZXJwcmV0ZXI7IH0KLSAgICAgICAgSGVhcCog
aGVhcCgpIHsgcmV0dXJuICZnbG9iYWxEYXRhKCkuaGVhcDsgfQorICAgICAgICBjb25zdCBDb21t
b25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICp2bSgpLnByb3Bl
cnR5TmFtZXM7IH0KKyAgICAgICAgY29uc3QgTWFya2VkQXJndW1lbnRCdWZmZXImIGVtcHR5TGlz
dCgpIGNvbnN0IHsgcmV0dXJuICp2bSgpLmVtcHR5TGlzdDsgfQorICAgICAgICBJbnRlcnByZXRl
ciogaW50ZXJwcmV0ZXIoKSB7IHJldHVybiB2bSgpLmludGVycHJldGVyOyB9CisgICAgICAgIEhl
YXAqIGhlYXAoKSB7IHJldHVybiAmdm0oKS5oZWFwOyB9CiAjaWZuZGVmIE5ERUJVRwogICAgICAg
ICB2b2lkIGR1bXBDYWxsZXIoKTsKICNlbmRpZgotICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRh
YmxlKiBhcnJheUNvbnN0cnVjdG9yVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJu
IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmFycmF5Q29uc3RydWN0b3JUYWJsZTsgfQotICAgICAg
ICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBhcnJheVByb3RvdHlwZVRhYmxlKENhbGxGcmFtZSog
Y2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5hcnJheVByb3RvdHlw
ZVRhYmxlOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGJvb2xlYW5Qcm90b3R5
cGVUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCkuYm9vbGVhblByb3RvdHlwZVRhYmxlOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNo
VGFibGUqIGRhdGVUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCkuZGF0ZVRhYmxlOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFi
bGUqIGRhdGVDb25zdHJ1Y3RvclRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBj
YWxsRnJhbWUtPmdsb2JhbERhdGEoKS5kYXRlQ29uc3RydWN0b3JUYWJsZTsgfQotICAgICAgICBz
dGF0aWMgY29uc3QgSGFzaFRhYmxlKiBlcnJvclByb3RvdHlwZVRhYmxlKENhbGxGcmFtZSogY2Fs
bEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5lcnJvclByb3RvdHlwZVRh
YmxlOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGdsb2JhbE9iamVjdFRhYmxl
KENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5n
bG9iYWxPYmplY3RUYWJsZTsgfQotICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBqc29u
VGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+Z2xvYmFsRGF0
YSgpLmpzb25UYWJsZTsgfQotICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBtYXRoVGFi
bGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
Lm1hdGhUYWJsZTsgfQotICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBudW1iZXJDb25z
dHJ1Y3RvclRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPmds
b2JhbERhdGEoKS5udW1iZXJDb25zdHJ1Y3RvclRhYmxlOyB9Ci0gICAgICAgIHN0YXRpYyBjb25z
dCBIYXNoVGFibGUqIG51bWJlclByb3RvdHlwZVRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7
IHJldHVybiBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5udW1iZXJQcm90b3R5cGVUYWJsZTsgfQot
ICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBvYmplY3RDb25zdHJ1Y3RvclRhYmxlKENh
bGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5vYmpl
Y3RDb25zdHJ1Y3RvclRhYmxlOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIHBy
aXZhdGVOYW1lUHJvdG90eXBlVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNh
bGxGcmFtZS0+Z2xvYmFsRGF0YSgpLnByaXZhdGVOYW1lUHJvdG90eXBlVGFibGU7IH0KLSAgICAg
ICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogcmVnRXhwVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLnJlZ0V4cFRhYmxlOyB9Ci0gICAg
ICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIHJlZ0V4cENvbnN0cnVjdG9yVGFibGUoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLnJlZ0V4cENv
bnN0cnVjdG9yVGFibGU7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogcmVnRXhw
UHJvdG90eXBlVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLnJlZ0V4cFByb3RvdHlwZVRhYmxlOyB9Ci0gICAgICAgIHN0YXRpYyBjb25z
dCBIYXNoVGFibGUqIHN0cmluZ0NvbnN0cnVjdG9yVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
IHsgcmV0dXJuIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLnN0cmluZ0NvbnN0cnVjdG9yVGFibGU7
IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogYXJyYXlDb25zdHJ1Y3RvclRhYmxl
KENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuYXJyYXlDb25z
dHJ1Y3RvclRhYmxlOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGFycmF5UHJv
dG90eXBlVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0o
KS5hcnJheVByb3RvdHlwZVRhYmxlOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUq
IGJvb2xlYW5Qcm90b3R5cGVUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2Fs
bEZyYW1lLT52bSgpLmJvb2xlYW5Qcm90b3R5cGVUYWJsZTsgfQorICAgICAgICBzdGF0aWMgY29u
c3QgSGFzaFRhYmxlKiBkYXRlVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNh
bGxGcmFtZS0+dm0oKS5kYXRlVGFibGU7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJs
ZSogZGF0ZUNvbnN0cnVjdG9yVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNh
bGxGcmFtZS0+dm0oKS5kYXRlQ29uc3RydWN0b3JUYWJsZTsgfQorICAgICAgICBzdGF0aWMgY29u
c3QgSGFzaFRhYmxlKiBlcnJvclByb3RvdHlwZVRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7
IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuZXJyb3JQcm90b3R5cGVUYWJsZTsgfQorICAgICAgICBz
dGF0aWMgY29uc3QgSGFzaFRhYmxlKiBnbG9iYWxPYmplY3RUYWJsZShDYWxsRnJhbWUqIGNhbGxG
cmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmdsb2JhbE9iamVjdFRhYmxlOyB9CisgICAg
ICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGpzb25UYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmpzb25UYWJsZTsgfQorICAgICAgICBzdGF0aWMg
Y29uc3QgSGFzaFRhYmxlKiBtYXRoVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJu
IGNhbGxGcmFtZS0+dm0oKS5tYXRoVGFibGU7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hU
YWJsZSogbnVtYmVyQ29uc3RydWN0b3JUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1
cm4gY2FsbEZyYW1lLT52bSgpLm51bWJlckNvbnN0cnVjdG9yVGFibGU7IH0KKyAgICAgICAgc3Rh
dGljIGNvbnN0IEhhc2hUYWJsZSogbnVtYmVyUHJvdG90eXBlVGFibGUoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5udW1iZXJQcm90b3R5cGVUYWJsZTsgfQor
ICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBvYmplY3RDb25zdHJ1Y3RvclRhYmxlKENh
bGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkub2JqZWN0Q29uc3Ry
dWN0b3JUYWJsZTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBwcml2YXRlTmFt
ZVByb3RvdHlwZVRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUt
PnZtKCkucHJpdmF0ZU5hbWVQcm90b3R5cGVUYWJsZTsgfQorICAgICAgICBzdGF0aWMgY29uc3Qg
SGFzaFRhYmxlKiByZWdFeHBUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2Fs
bEZyYW1lLT52bSgpLnJlZ0V4cFRhYmxlOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFi
bGUqIHJlZ0V4cENvbnN0cnVjdG9yVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJu
IGNhbGxGcmFtZS0+dm0oKS5yZWdFeHBDb25zdHJ1Y3RvclRhYmxlOyB9CisgICAgICAgIHN0YXRp
YyBjb25zdCBIYXNoVGFibGUqIHJlZ0V4cFByb3RvdHlwZVRhYmxlKENhbGxGcmFtZSogY2FsbEZy
YW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkucmVnRXhwUHJvdG90eXBlVGFibGU7IH0KKyAg
ICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogc3RyaW5nQ29uc3RydWN0b3JUYWJsZShDYWxs
RnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLnN0cmluZ0NvbnN0cnVj
dG9yVGFibGU7IH0KIAogICAgICAgICBzdGF0aWMgQ2FsbEZyYW1lKiBjcmVhdGUoUmVnaXN0ZXIq
IGNhbGxGcmFtZUJhc2UpIHsgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxGcmFtZSo+KGNhbGxGcmFt
ZUJhc2UpOyB9CiAgICAgICAgIFJlZ2lzdGVyKiByZWdpc3RlcnMoKSB7IHJldHVybiB0aGlzOyB9
CkBAIC0xMTIsNyArMTEyLDcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBib29sIGhhc1Jl
dHVyblBDKCkgY29uc3QgeyByZXR1cm4gISF0aGlzW0pTU3RhY2s6OlJldHVyblBDXS52UEMoKTsg
fQogICAgICAgICB2b2lkIGNsZWFyUmV0dXJuUEMoKSB7IHJlZ2lzdGVycygpW0pTU3RhY2s6OlJl
dHVyblBDXSA9IHN0YXRpY19jYXN0PEluc3RydWN0aW9uKj4oMCk7IH0KICNlbmRpZgotICAgICAg
ICBBYnN0cmFjdFBDIGFic3RyYWN0UmV0dXJuUEMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKSB7
IHJldHVybiBBYnN0cmFjdFBDKGdsb2JhbERhdGEsIHRoaXMpOyB9CisgICAgICAgIEFic3RyYWN0
UEMgYWJzdHJhY3RSZXR1cm5QQyhWTSYgdm0pIHsgcmV0dXJuIEFic3RyYWN0UEModm0sIHRoaXMp
OyB9CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXRGb3JOb25ERkdDb2RlKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0Qnl0ZWNvZGVPZmZzZXRG
b3JOb25ERkdDb2RlKHVuc2lnbmVkIG9mZnNldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lQ2xvc3VyZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVDbG9zdXJlLmgJKHJldmlzaW9uIDE0
ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVDbG9z
dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgc3RydWN0IENhbGxGcmFtZUNs
b3N1cmUgewogICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lOwogICAgIEpTRnVuY3Rpb24qIGZ1
bmN0aW9uOwogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlOwotICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YTsKKyAgICBWTSogdm07CiAgICAgSlNTY29wZSogc2Nv
cGU7CiAgICAgaW50IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsKICAgICBpbnQgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5OSw3ICsxOTksNyBAQCBJbnRlcnByZXRlcjo6U3RhY2tQb2xpY3k6OlN0YWNrUG9s
aWN5KEluCiB9CiAKIAotc3RhdGljIENhbGxGcmFtZSogZ2V0Q2FsbGVySW5mbyhKU0dsb2JhbERh
dGEqLCBDYWxsRnJhbWUqLCB1bnNpZ25lZCYgYnl0ZWNvZGVPZmZzZXQsIENvZGVCbG9jayomIGNh
bGxlck91dCk7CitzdGF0aWMgQ2FsbEZyYW1lKiBnZXRDYWxsZXJJbmZvKFZNKiwgQ2FsbEZyYW1l
KiwgdW5zaWduZWQmIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqJiBjYWxsZXJPdXQpOwogCiAv
LyBSZXR1cm5zIHRoZSBkZXB0aCBvZiB0aGUgc2NvcGUgY2hhaW4gd2l0aGluIGEgZ2l2ZW4gY2Fs
bCBmcmFtZS4KIHN0YXRpYyBpbnQgZGVwdGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTU2NvcGUq
IHNjKQpAQCAtMjE4LDcgKzIxOCw3IEBAIEpTVmFsdWUgZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKICAgICBpZiAoIXByb2dyYW0uaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIHByb2dyYW07
CiAgICAgCi0gICAgVG9wQ2FsbEZyYW1lU2V0dGVyIHRvcENhbGxGcmFtZShjYWxsRnJhbWUtPmds
b2JhbERhdGEoKSwgY2FsbEZyYW1lKTsKKyAgICBUb3BDYWxsRnJhbWVTZXR0ZXIgdG9wQ2FsbEZy
YW1lKGNhbGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1lKTsKICAgICBTdHJpbmcgcHJvZ3JhbVNvdXJj
ZSA9IGFzU3RyaW5nKHByb2dyYW0pLT52YWx1ZShjYWxsRnJhbWUpOwogICAgIGlmIChjYWxsRnJh
bWUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwpAQCAtMjQ0LDcg
KzI0NCw3IEBAIEpTVmFsdWUgZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgLy8gSWYgdGhlIGxpdGVyYWwgcGFyc2VyIGJhaWxlZCwgaXQgc2hv
dWxkIG5vdCBoYXZlIHRocm93biBleGNlcHRpb25zLgotICAgICAgICBBU1NFUlQoIWNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbik7CisgICAgICAgIEFTU0VSVCghY2FsbEZyYW1lLT52
bSgpLmV4Y2VwdGlvbik7CiAKICAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZTsKICAgICAg
ICAgZXZhbCA9IGNhbGxlckNvZGVCbG9jay0+ZXZhbENvZGVDYWNoZSgpLmdldFNsb3coY2FsbEZy
YW1lLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZXJDb2RlQmxvY2st
PmlzU3RyaWN0TW9kZSgpLCBwcm9ncmFtU291cmNlLCBjYWxsZXJTY29wZUNoYWluLCBleGNlcHRp
b25WYWx1ZSk7CkBAIC0yNTYsNyArMjU2LDcgQEAgSlNWYWx1ZSBldmFsKENhbGxGcmFtZSogY2Fs
bEZyYW1lKQogCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsZXJGcmFtZS0+dGhpc1ZhbHVl
KCk7CiAgICAgQVNTRVJUKGlzVmFsaWRUaGlzT2JqZWN0KHRoaXNWYWx1ZSwgY2FsbEZyYW1lKSk7
Ci0gICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCku
aW50ZXJwcmV0ZXI7CisgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gY2FsbEZyYW1lLT52
bSgpLmludGVycHJldGVyOwogICAgIHJldHVybiBpbnRlcnByZXRlci0+ZXhlY3V0ZShldmFsLCBj
YWxsRnJhbWUsIHRoaXNWYWx1ZSwgY2FsbGVyU2NvcGVDaGFpbik7CiB9CiAKQEAgLTI2Niw3ICsy
NjYsNyBAQCBDYWxsRnJhbWUqIGxvYWRWYXJhcmdzKENhbGxGcmFtZSogY2FsbEZyCiAgICAgICAg
IHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcygpOwogICAgICAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9
IENhbGxGcmFtZTo6Y3JlYXRlKGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBmaXJzdEZyZWVSZWdp
c3RlciArIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZSk7CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+IEFyZ3Vt
ZW50czo6TWF4QXJndW1lbnRzICsgMSB8fCAhc3RhY2stPmdyb3cobmV3Q2FsbEZyYW1lLT5yZWdp
c3RlcnMoKSkpIHsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlv
biA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOworICAgICAgICAgICAgY2Fs
bEZyYW1lLT52bSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJh
bWUpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KIApAQCAtMjgwLDcgKzI4MCw3
IEBAIENhbGxGcmFtZSogbG9hZFZhcmFyZ3MoQ2FsbEZyYW1lKiBjYWxsRnIKICAgICBpZiAoYXJn
dW1lbnRzLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgQ2FsbEZyYW1lKiBuZXdDYWxs
RnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgZmlyc3RG
cmVlUmVnaXN0ZXIgKyAxICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSk7CiAgICAgICAg
IGlmICghc3RhY2stPmdyb3cobmV3Q2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkpIHsKLSAgICAgICAg
ICAgIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZs
b3dFcnJvcihjYWxsRnJhbWUpOworICAgICAgICAgICAgY2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlv
biA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOwogICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcygxKTsKQEAgLTI4OSw3ICsyODksNyBAQCBDYWxsRnJhbWUqIGxvYWRWYXJh
cmdzKENhbGxGcmFtZSogY2FsbEZyCiAgICAgfQogCiAgICAgaWYgKCFhcmd1bWVudHMuaXNPYmpl
Y3QoKSkgewotICAgICAgICBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBjcmVh
dGVJbnZhbGlkUGFyYW1FcnJvcihjYWxsRnJhbWUsICJGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHki
LCBhcmd1bWVudHMpOworICAgICAgICBjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uID0gY3JlYXRl
SW52YWxpZFBhcmFtRXJyb3IoY2FsbEZyYW1lLCAiRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5Iiwg
YXJndW1lbnRzKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0yOTgsNyArMjk4LDcg
QEAgQ2FsbEZyYW1lKiBsb2FkVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxGcgogICAgICAgICB1bnNp
Z25lZCBhcmdDb3VudCA9IGFyZ3NPYmplY3QtPmxlbmd0aChjYWxsRnJhbWUpOwogICAgICAgICBD
YWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKGNhbGxGcmFtZS0+cmVn
aXN0ZXJzKCkgKyBmaXJzdEZyZWVSZWdpc3RlciArIENhbGxGcmFtZTo6b2Zmc2V0Rm9yKGFyZ0Nv
dW50ICsgMSkpOwogICAgICAgICBpZiAoYXJnQ291bnQgPiBBcmd1bWVudHM6Ok1heEFyZ3VtZW50
cyB8fCAhc3RhY2stPmdyb3cobmV3Q2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkpIHsKLSAgICAgICAg
ICAgIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZs
b3dFcnJvcihjYWxsRnJhbWUpOworICAgICAgICAgICAgY2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlv
biA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOwogICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyhhcmdDb3VudCArIDEpOwpAQCAtMzEyLDcgKzMxMiw3IEBAIENhbGxGcmFt
ZSogbG9hZFZhcmFyZ3MoQ2FsbEZyYW1lKiBjYWxsRnIKICAgICAgICAgdW5zaWduZWQgYXJnQ291
bnQgPSBhcnJheS0+bGVuZ3RoKCk7CiAgICAgICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0g
Q2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIGZpcnN0RnJlZVJlZ2lz
dGVyICsgQ2FsbEZyYW1lOjpvZmZzZXRGb3IoYXJnQ291bnQgKyAxKSk7CiAgICAgICAgIGlmIChh
cmdDb3VudCA+IEFyZ3VtZW50czo6TWF4QXJndW1lbnRzIHx8ICFzdGFjay0+Z3JvdyhuZXdDYWxs
RnJhbWUtPnJlZ2lzdGVycygpKSkgewotICAgICAgICAgICAgY2FsbEZyYW1lLT5nbG9iYWxEYXRh
KCkuZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CisgICAg
ICAgICAgICBjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vy
cm9yKGNhbGxGcmFtZSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAg
ICBuZXdDYWxsRnJhbWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGFyZ0NvdW50ICsg
MSk7CkBAIC0zMjUsMjIgKzMyNSwyMiBAQCBDYWxsRnJhbWUqIGxvYWRWYXJhcmdzKENhbGxGcmFt
ZSogY2FsbEZyCiAgICAgdW5zaWduZWQgYXJnQ291bnQgPSBhcmdPYmplY3QtPmdldChjYWxsRnJh
bWUsIGNhbGxGcmFtZS0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoY2FsbEZyYW1l
KTsKICAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKGNhbGxG
cmFtZS0+cmVnaXN0ZXJzKCkgKyBmaXJzdEZyZWVSZWdpc3RlciArIENhbGxGcmFtZTo6b2Zmc2V0
Rm9yKGFyZ0NvdW50ICsgMSkpOwogICAgIGlmIChhcmdDb3VudCA+IEFyZ3VtZW50czo6TWF4QXJn
dW1lbnRzIHx8ICFzdGFjay0+Z3JvdyhuZXdDYWxsRnJhbWUtPnJlZ2lzdGVycygpKSkgewotICAg
ICAgICBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJm
bG93RXJyb3IoY2FsbEZyYW1lKTsKKyAgICAgICAgY2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlvbiA9
IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOwogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhh
cmdDb3VudCArIDEpOwogICAgIG5ld0NhbGxGcmFtZS0+c2V0VGhpc1ZhbHVlKHRoaXNWYWx1ZSk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdDb3VudDsgKytpKSB7CiAgICAgICAgIG5l
d0NhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgYXNPYmplY3QoYXJndW1lbnRzKS0+Z2V0KGNhbGxG
cmFtZSwgaSkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCku
ZXhjZXB0aW9uKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+dm0oKS5leGNlcHRp
b24pKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIHJldHVybiBuZXdDYWxsRnJh
bWU7CiB9CiAKLUludGVycHJldGVyOjpJbnRlcnByZXRlcihKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCitJbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIoVk0mIHZtKQogICAgIDogbV9zYW1wbGVFbnRy
eURlcHRoKDApCi0gICAgLCBtX3N0YWNrKGdsb2JhbERhdGEpCisgICAgLCBtX3N0YWNrKHZtKQog
ICAgICwgbV9lcnJvckhhbmRsaW5nTW9kZVJlZW50cnkoMCkKICNpZiAhQVNTRVJUX0RJU0FCTEVE
CiAgICAgLCBtX2luaXRpYWxpemVkKGZhbHNlKQpAQCAtNDE2LDE0ICs0MTYsMTQgQEAgdm9pZCBJ
bnRlcnByZXRlcjo6ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbQogICAgIGRhdGFMb2dGKCJbU2NvcGVD
aGFpbl0gICAgICAgICAgICAgICB8ICUxMHAgfCAlcCBcbiIsIGl0LCBjYWxsRnJhbWUtPnNjb3Bl
KCkpOwogICAgICsraXQ7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBBYnN0cmFjdFBDIHBjID0gY2Fs
bEZyYW1lLT5hYnN0cmFjdFJldHVyblBDKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICBB
YnN0cmFjdFBDIHBjID0gY2FsbEZyYW1lLT5hYnN0cmFjdFJldHVyblBDKGNhbGxGcmFtZS0+dm0o
KSk7CiAgICAgaWYgKHBjLmhhc0pJVFJldHVybkFkZHJlc3MoKSkKICAgICAgICAgZGF0YUxvZ0Yo
IltSZXR1cm5KSVRQQ10gICAgICAgICAgICAgIHwgJTEwcCB8ICVwIFxuIiwgaXQsIHBjLmppdFJl
dHVybkFkZHJlc3MoKS52YWx1ZSgpKTsKICNlbmRpZgogICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0ID0gMDsKICAgICBpbnQgbGluZSA9IDA7CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxv
Y2sgPSAwOwotICAgIGdldENhbGxlckluZm8oJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxs
RnJhbWUsIGJ5dGVjb2RlT2Zmc2V0LCBjYWxsZXJDb2RlQmxvY2spOworICAgIGdldENhbGxlcklu
Zm8oJmNhbGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1lLCBieXRlY29kZU9mZnNldCwgY2FsbGVyQ29k
ZUJsb2NrKTsKICAgICBsaW5lID0gY2FsbGVyQ29kZUJsb2NrLT5saW5lTnVtYmVyRm9yQnl0ZWNv
ZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOwogICAgIGRhdGFMb2dGKCJbUmV0dXJuVlBDXSAgICAg
ICAgICAgICAgICB8ICUxMHAgfCAlZCAobGluZSAlZClcbiIsIGl0LCBieXRlY29kZU9mZnNldCwg
bGluZSk7CiAgICAgKytpdDsKQEAgLTQ5Miw3ICs0OTIsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBJ
bnRlcnByZXRlcjo6dW53aW5kQ2FsCiAgICAgaWYgKG9sZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9
PSBGdW5jdGlvbkNvZGUgJiYgb2xkQ29kZUJsb2NrLT5uZWVkc0FjdGl2YXRpb24oKSkgewogICAg
ICAgICBhY3RpdmF0aW9uID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9sZENvZGVCbG9jay0+YWN0
aXZhdGlvblJlZ2lzdGVyKCkpLmpzVmFsdWUoKTsKICAgICAgICAgaWYgKGFjdGl2YXRpb24pCi0g
ICAgICAgICAgICBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4oYWN0aXZhdGlvbiktPnRlYXJPZmYoKnNj
b3BlLT5nbG9iYWxEYXRhKCkpOworICAgICAgICAgICAganNDYXN0PEpTQWN0aXZhdGlvbio+KGFj
dGl2YXRpb24pLT50ZWFyT2ZmKCpzY29wZS0+dm0oKSk7CiAgICAgfQogCiAgICAgaWYgKG9sZENv
ZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgb2xkQ29kZUJsb2NrLT51c2Vz
QXJndW1lbnRzKCkpIHsKQEAgLTUwNSwxMCArNTA1LDEwIEBAIE5FVkVSX0lOTElORSBib29sIElu
dGVycHJldGVyOjp1bndpbmRDYWwKICAgICB9CiAKICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1l
ID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwotICAgIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
LnRvcENhbGxGcmFtZSA9IGNhbGxlckZyYW1lOworICAgIGNhbGxGcmFtZS0+dm0oKS50b3BDYWxs
RnJhbWUgPSBjYWxsZXJGcmFtZTsKICAgICBpZiAoY2FsbGVyRnJhbWUtPmhhc0hvc3RDYWxsRnJh
bWVGbGFnKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjYWxsRnJhbWUgPSBnZXRDYWxs
ZXJJbmZvKCZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLCBieXRlY29kZU9mZnNl
dCwgY29kZUJsb2NrKTsKKyAgICBjYWxsRnJhbWUgPSBnZXRDYWxsZXJJbmZvKCZjYWxsRnJhbWUt
PnZtKCksIGNhbGxGcmFtZSwgYnl0ZWNvZGVPZmZzZXQsIGNvZGVCbG9jayk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTUzMyw4ICs1MzMsOCBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTb3VyY2VU
b0Vycm9yKENhbGxGcmFtCiAgICAgaWYgKCFleHByZXNzaW9uU3RvcCB8fCBleHByZXNzaW9uU3Rh
cnQgPiBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZVN0cmluZy5sZW5ndGgoKSkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKTsKLSAgICBKU1ZhbHVlIGpzTWVzc2FnZSA9IGV4Y2VwdGlvbi0+Z2V0RGlyZWN0KCpn
bG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5tZXNzYWdlKTsKKyAgICBWTSog
dm0gPSAmY2FsbEZyYW1lLT52bSgpOworICAgIEpTVmFsdWUganNNZXNzYWdlID0gZXhjZXB0aW9u
LT5nZXREaXJlY3QoKnZtLCB2bS0+cHJvcGVydHlOYW1lcy0+bWVzc2FnZSk7CiAgICAgaWYgKCFq
c01lc3NhZ2UgfHwgIWpzTWVzc2FnZS5pc1N0cmluZygpKQogICAgICAgICByZXR1cm47CiAKQEAg
LTU2MSw3ICs1NjEsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTb3VyY2VUb0Vycm9yKENhbGxGcmFt
CiAgICAgICAgIG1lc3NhZ2UgPSBtYWtlU3RyaW5nKG1lc3NhZ2UsICIgKG5lYXIgJy4uLiIsIGNv
ZGVCbG9jay0+c291cmNlKCktPmdldFJhbmdlKHN0YXJ0LCBzdG9wKSwgIi4uLicpIik7CiAgICAg
fQogCi0gICAgZXhjZXB0aW9uLT5wdXREaXJlY3QoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnBy
b3BlcnR5TmFtZXMtPm1lc3NhZ2UsIGpzU3RyaW5nKGdsb2JhbERhdGEsIG1lc3NhZ2UpKTsKKyAg
ICBleGNlcHRpb24tPnB1dERpcmVjdCgqdm0sIHZtLT5wcm9wZXJ0eU5hbWVzLT5tZXNzYWdlLCBq
c1N0cmluZyh2bSwgbWVzc2FnZSkpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgZ2V0Qnl0ZWNvZGVP
ZmZzZXRGb3JDYWxsRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC01ODEsOSArNTgxLDkg
QEAgc3RhdGljIHVuc2lnbmVkIGdldEJ5dGVjb2RlT2Zmc2V0Rm9yQ2FsbAogI2VuZGlmCiB9CiAK
LXN0YXRpYyBDYWxsRnJhbWUqIGdldENhbGxlckluZm8oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdW5zaWduZWQmIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxv
Y2sqJiBjYWxsZXIpCitzdGF0aWMgQ2FsbEZyYW1lKiBnZXRDYWxsZXJJbmZvKFZNKiB2bSwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIHVuc2lnbmVkJiBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKiYg
Y2FsbGVyKQogewotICAgIEFTU0VSVF9VTlVTRUQoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YSk7Cisg
ICAgQVNTRVJUX1VOVVNFRCh2bSwgdm0pOwogICAgIGJ5dGVjb2RlT2Zmc2V0ID0gMDsKICAgICBB
U1NFUlQoIWNhbGxGcmFtZS0+aGFzSG9zdENhbGxGcmFtZUZsYWcoKSk7CiAgICAgQ2FsbEZyYW1l
KiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkgPyBjYWxsRnJhbWUtPnRydWVD
YWxsZXJGcmFtZSgpIDogY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLT5yZW1vdmVIb3N0Q2FsbEZy
YW1lRmxhZygpOwpAQCAtNzE5LDkgKzcxOSw5IEBAIFN0cmluZyBTdGFja0ZyYW1lOjp0b1N0cmlu
ZyhDYWxsRnJhbWUqIGMKICAgICByZXR1cm4gdHJhY2VCdWlsZC50b1N0cmluZygpLmltcGwoKTsK
IH0KIAotdm9pZCBJbnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFjZShKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIFZlY3RvcjxTdGFja0ZyYW1lPiYgcmVzdWx0cywgc2l6ZV90IG1heFN0YWNrU2l6ZSkK
K3ZvaWQgSW50ZXJwcmV0ZXI6OmdldFN0YWNrVHJhY2UoVk0qIHZtLCBWZWN0b3I8U3RhY2tGcmFt
ZT4mIHJlc3VsdHMsIHNpemVfdCBtYXhTdGFja1NpemUpCiB7Ci0gICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBnbG9iYWxEYXRhLT50b3BDYWxsRnJhbWUtPnJlbW92ZUhvc3RDYWxsRnJhbWVGbGFn
KCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSB2bS0+dG9wQ2FsbEZyYW1lLT5yZW1vdmVI
b3N0Q2FsbEZyYW1lRmxhZygpOwogICAgIGlmICghY2FsbEZyYW1lIHx8IGNhbGxGcmFtZSA9PSBD
YWxsRnJhbWU6Om5vQ2FsbGVyKCkpIAogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQgPSBnZXRCeXRlY29kZU9mZnNldEZvckNhbGxGcmFtZShjYWxsRnJhbWUpOwpA
QCAtNzM1LDEwICs3MzUsMTAgQEAgdm9pZCBJbnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFjZShKU0ds
b2JhbAogICAgICAgICBpZiAoY2FsbGVyQ29kZUJsb2NrKSB7CiAgICAgICAgICAgICBzb3VyY2VV
UkwgPSBnZXRTb3VyY2VVUkxGcm9tQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CiAgICAgICAgICAgICBT
dGFja0ZyYW1lIHMgPSB7Ci0gICAgICAgICAgICAgICAgU3Ryb25nPEpTT2JqZWN0PigqZ2xvYmFs
RGF0YSwgY2FsbEZyYW1lLT5jYWxsZWUoKSksCisgICAgICAgICAgICAgICAgU3Ryb25nPEpTT2Jq
ZWN0Pigqdm0sIGNhbGxGcmFtZS0+Y2FsbGVlKCkpLAogICAgICAgICAgICAgICAgIGdldFN0YWNr
RnJhbWVDb2RlVHlwZShjYWxsRnJhbWUpLAotICAgICAgICAgICAgICAgIFN0cm9uZzxFeGVjdXRh
YmxlQmFzZT4oKmdsb2JhbERhdGEsIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkp
LAotICAgICAgICAgICAgICAgIFN0cm9uZzxVbmxpbmtlZENvZGVCbG9jaz4oKmdsb2JhbERhdGEs
IGNhbGxlckNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSksCisgICAgICAgICAgICAgICAg
U3Ryb25nPEV4ZWN1dGFibGVCYXNlPigqdm0sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCkpLAorICAgICAgICAgICAgICAgIFN0cm9uZzxVbmxpbmtlZENvZGVCbG9jaz4oKnZtLCBj
YWxsZXJDb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpLAogICAgICAgICAgICAgICAgIGNh
bGxlckNvZGVCbG9jay0+c291cmNlKCksCiAgICAgICAgICAgICAgICAgY2FsbGVyQ29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKS0+bGluZU5vKCksCiAgICAgICAgICAgICAgICAgY2FsbGVyQ29k
ZUJsb2NrLT5zb3VyY2VPZmZzZXQoKSwKQEAgLTc0NywyOCArNzQ3LDI4IEBAIHZvaWQgSW50ZXJw
cmV0ZXI6OmdldFN0YWNrVHJhY2UoSlNHbG9iYWwKICAgICAgICAgICAgIH07CiAgICAgICAgICAg
ICByZXN1bHRzLmFwcGVuZChzKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFN0YWNr
RnJhbWUgcyA9IHsgU3Ryb25nPEpTT2JqZWN0PigqZ2xvYmFsRGF0YSwgY2FsbEZyYW1lLT5jYWxs
ZWUoKSksIFN0YWNrRnJhbWVOYXRpdmVDb2RlLCBTdHJvbmc8RXhlY3V0YWJsZUJhc2U+KCksIFN0
cm9uZzxVbmxpbmtlZENvZGVCbG9jaz4oKSwgMCwgMCwgMCwgMCwgU3RyaW5nKCl9OworICAgICAg
ICAgICAgU3RhY2tGcmFtZSBzID0geyBTdHJvbmc8SlNPYmplY3Q+KCp2bSwgY2FsbEZyYW1lLT5j
YWxsZWUoKSksIFN0YWNrRnJhbWVOYXRpdmVDb2RlLCBTdHJvbmc8RXhlY3V0YWJsZUJhc2U+KCks
IFN0cm9uZzxVbmxpbmtlZENvZGVCbG9jaz4oKSwgMCwgMCwgMCwgMCwgU3RyaW5nKCl9OwogICAg
ICAgICAgICAgcmVzdWx0cy5hcHBlbmQocyk7CiAgICAgICAgIH0KLSAgICAgICAgY2FsbEZyYW1l
ID0gZ2V0Q2FsbGVySW5mbyhnbG9iYWxEYXRhLCBjYWxsRnJhbWUsIGJ5dGVjb2RlT2Zmc2V0LCBj
YWxsZXJDb2RlQmxvY2spOworICAgICAgICBjYWxsRnJhbWUgPSBnZXRDYWxsZXJJbmZvKHZtLCBj
YWxsRnJhbWUsIGJ5dGVjb2RlT2Zmc2V0LCBjYWxsZXJDb2RlQmxvY2spOwogICAgIH0KIH0KIAog
dm9pZCBJbnRlcnByZXRlcjo6YWRkU3RhY2tUcmFjZUlmTmVjZXNzYXJ5KENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBKU1ZhbHVlIGVycm9yKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9
ICZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKTsKLSAgICBBU1NFUlQoY2FsbEZyYW1lID09IGdsb2Jh
bERhdGEtPnRvcENhbGxGcmFtZSB8fCBjYWxsRnJhbWUgPT0gY2FsbEZyYW1lLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSB8fCBjYWxsRnJhbWUgPT0gY2FsbEZyYW1lLT5keW5h
bWljR2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7CisgICAgVk0qIHZtID0gJmNhbGxGcmFt
ZS0+dm0oKTsKKyAgICBBU1NFUlQoY2FsbEZyYW1lID09IHZtLT50b3BDYWxsRnJhbWUgfHwgY2Fs
bEZyYW1lID09IGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkg
fHwgY2FsbEZyYW1lID09IGNhbGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5nbG9iYWxF
eGVjKCkpOwogCiAgICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJhY2U7Ci0gICAgZ2V0U3Rh
Y2tUcmFjZSgmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHN0YWNrVHJhY2UpOwotICAgIGdsb2Jh
bERhdGEtPmV4Y2VwdGlvblN0YWNrID0gUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+KHN0YWNr
VHJhY2UpOworICAgIGdldFN0YWNrVHJhY2UoJmNhbGxGcmFtZS0+dm0oKSwgc3RhY2tUcmFjZSk7
CisgICAgdm0tPmV4Y2VwdGlvblN0YWNrID0gUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+KHN0
YWNrVHJhY2UpOwogICAgIGlmIChzdGFja1RyYWNlLmlzRW1wdHkoKSB8fCAhZXJyb3IuaXNPYmpl
Y3QoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSlNPYmplY3QqIGVycm9yT2JqZWN0ID0gYXNP
YmplY3QoZXJyb3IpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSAwOwogICAg
IGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oZXJyb3IpKQotICAgICAgICBnbG9i
YWxPYmplY3QgPSBnbG9iYWxEYXRhLT5keW5hbWljR2xvYmFsT2JqZWN0OworICAgICAgICBnbG9i
YWxPYmplY3QgPSB2bS0+ZHluYW1pY0dsb2JhbE9iamVjdDsKICAgICBlbHNlCiAgICAgICAgIGds
b2JhbE9iamVjdCA9IGVycm9yT2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKIApAQCAtNzgwLDkgKzc4
MCw5IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmFkZFN0YWNrVHJhY2VJZk5lY2Vzc2EKICAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOwogICAgIH0KIAotICAgIGlmIChlcnJvck9iamVjdC0+
aGFzUHJvcGVydHkoY2FsbEZyYW1lLCBnbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5zdGFjaykp
CisgICAgaWYgKGVycm9yT2JqZWN0LT5oYXNQcm9wZXJ0eShjYWxsRnJhbWUsIHZtLT5wcm9wZXJ0
eU5hbWVzLT5zdGFjaykpCiAgICAgICAgIHJldHVybjsKLSAgICBlcnJvck9iamVjdC0+cHV0RGly
ZWN0KCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5zdGFjaywganNTdHJp
bmcoZ2xvYmFsRGF0YSwgYnVpbGRlci50b1N0cmluZygpKSwgUmVhZE9ubHkgfCBEb250RGVsZXRl
KTsKKyAgICBlcnJvck9iamVjdC0+cHV0RGlyZWN0KCp2bSwgdm0tPnByb3BlcnR5TmFtZXMtPnN0
YWNrLCBqc1N0cmluZyh2bSwgYnVpbGRlci50b1N0cmluZygpKSwgUmVhZE9ubHkgfCBEb250RGVs
ZXRlKTsKIH0KIAogTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dGhyb3dF
eGNlcHRpb24oQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBKU1ZhbHVlJiBleGNlcHRpb25WYWx1ZSwg
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCkBAIC04MTIsMTAgKzgxMiwxMCBAQCBORVZFUl9JTkxJ
TkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp0CiAKICAgICAgICAgaXNUZXJtaW5hdGlvbiA9
IGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihleGNlcHRpb24pOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIGlmICghY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uU3RhY2suc2l6
ZSgpKSB7CisgICAgICAgIGlmICghY2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlvblN0YWNrLnNpemUo
KSkgewogICAgICAgICAgICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrOwotICAgICAgICAgICAg
SW50ZXJwcmV0ZXI6OmdldFN0YWNrVHJhY2UoJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBzdGFj
ayk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb25TdGFjayA9
IFJlZkNvdW50ZWRBcnJheTxTdGFja0ZyYW1lPihzdGFjayk7CisgICAgICAgICAgICBJbnRlcnBy
ZXRlcjo6Z2V0U3RhY2tUcmFjZSgmY2FsbEZyYW1lLT52bSgpLCBzdGFjayk7CisgICAgICAgICAg
ICBjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uU3RhY2sgPSBSZWZDb3VudGVkQXJyYXk8U3RhY2tG
cmFtZT4oc3RhY2spOwogICAgICAgICB9CiAgICAgfQogCkBAIC04MjksMTMgKzgyOSwxMyBAQCBO
RVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp0CiAgICAgSGFuZGxlckluZm8q
IGhhbmRsZXIgPSAwOwogICAgIHdoaWxlIChpc1Rlcm1pbmF0aW9uIHx8ICEoaGFuZGxlciA9IGNv
ZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSkpIHsKICAg
ICAgICAgaWYgKCF1bndpbmRDYWxsRnJhbWUoY2FsbEZyYW1lLCBleGNlcHRpb25WYWx1ZSwgYnl0
ZWNvZGVPZmZzZXQsIGNvZGVCbG9jaykpIHsKLSAgICAgICAgICAgIGlmIChMZWdhY3lQcm9maWxl
ciogcHJvZmlsZXIgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5lbmFibGVkUHJvZmlsZXIoKSkK
KyAgICAgICAgICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSBjYWxsRnJhbWUtPnZt
KCkuZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAgICAgICAgICAgcHJvZmlsZXItPmV4Y2VwdGlv
blVud2luZChjYWxsRnJhbWUpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gY2FsbEZyYW1lLT5nbG9i
YWxEYXRhKCkuZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9m
aWxlciA9IGNhbGxGcmFtZS0+dm0oKS5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJvZmls
ZXItPmV4Y2VwdGlvblVud2luZChjYWxsRnJhbWUpOwogCiAgICAgLy8gVW53aW5kIHRoZSBzY29w
ZSBjaGFpbiB3aXRoaW4gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyJ3MgY2FsbCBmcmFtZS4KQEAgLTg4
NywxMiArODg3LDEyIEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3JhbUV4ZWMK
ICAgICBTYW1wbGluZ1Njb3BlIHNhbXBsaW5nU2NvcGUodGhpcyk7CiAgICAgCiAgICAgSlNTY29w
ZSogc2NvcGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhID0gKnNjb3BlLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0gKnNjb3BlLT52bSgpOwog
CiAgICAgQVNTRVJUKGlzVmFsaWRUaGlzT2JqZWN0KHRoaXNPYmosIGNhbGxGcmFtZSkpOwotICAg
IEFTU0VSVCghZ2xvYmFsRGF0YS5leGNlcHRpb24pOwotICAgIEFTU0VSVCghZ2xvYmFsRGF0YS5p
c0NvbGxlY3RvckJ1c3koKSk7Ci0gICAgaWYgKGdsb2JhbERhdGEuaXNDb2xsZWN0b3JCdXN5KCkp
CisgICAgQVNTRVJUKCF2bS5leGNlcHRpb24pOworICAgIEFTU0VSVCghdm0uaXNDb2xsZWN0b3JC
dXN5KCkpOworICAgIGlmICh2bS5pc0NvbGxlY3RvckJ1c3koKSkKICAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOwogCiAgICAgU3RhY2tTdGF0czo6Q2hlY2tQb2ludCBzdGFja0NoZWNrUG9pbnQ7CkBA
IC05MDQsNyArOTA0LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShQcm9ncmFtRXhl
YwogICAgIC8vIEZpcnN0IGNoZWNrIGlmIHRoZSAicHJvZ3JhbSIgaXMgYWN0dWFsbHkganVzdCBh
IEpTT04gb2JqZWN0LiBJZiBzbywKICAgICAvLyB3ZSdsbCBoYW5kbGUgdGhlIEpTT04gb2JqZWN0
IGhlcmUuIEVsc2UsIHdlJ2xsIGhhbmRsZSByZWFsIEpTIGNvZGUKICAgICAvLyBiZWxvdyBhdCBm
YWlsZWRKU09OUC4KLSAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2Nv
cGUoZ2xvYmFsRGF0YSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBEeW5hbWljR2xvYmFs
T2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUodm0sIHNjb3BlLT5nbG9iYWxPYmplY3QoKSk7
CiAgICAgVmVjdG9yPEpTT05QRGF0YT4gSlNPTlBEYXRhOwogICAgIGJvb2wgcGFyc2VSZXN1bHQ7
CiAgICAgY29uc3QgU3RyaW5nIHByb2dyYW1Tb3VyY2UgPSBwcm9ncmFtLT5zb3VyY2UoKS50b1N0
cmluZygpOwpAQCAtMTAwOCw3ICsxMDA4LDcgQEAgZmFpbGVkSlNPTlA6CiAgICAgLy8gb2JqZWN0
LgogCiAgICAgLy8gQ29tcGlsZSBzb3VyY2UgdG8gYnl0ZWNvZGUgaWYgbmVjZXNzYXJ5OgotICAg
IGlmIChKU09iamVjdCogZXJyb3IgPSBwcm9ncmFtLT5pbml0aWFsaXplR2xvYmFsUHJvcGVydGll
cyhnbG9iYWxEYXRhLCBjYWxsRnJhbWUsIHNjb3BlKSkKKyAgICBpZiAoSlNPYmplY3QqIGVycm9y
ID0gcHJvZ3JhbS0+aW5pdGlhbGl6ZUdsb2JhbFByb3BlcnRpZXModm0sIGNhbGxGcmFtZSwgc2Nv
cGUpKQogICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd0Vycm9yKGNhbGxGcmFtZSwg
ZXJyb3IpKTsKIAogICAgIGlmIChKU09iamVjdCogZXJyb3IgPSBwcm9ncmFtLT5jb21waWxlKGNh
bGxGcmFtZSwgc2NvcGUpKQpAQCAtMTAyNSwyNCArMTAyNSwyNCBAQCBmYWlsZWRKU09OUDoKICAg
ICAvLyBTZXQgdGhlIGFyZ3VtZW50cyBmb3IgdGhlIGNhbGxlZToKICAgICBuZXdDYWxsRnJhbWUt
PnNldFRoaXNWYWx1ZSh0aGlzT2JqKTsKIAotICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmls
ZXIgPSBnbG9iYWxEYXRhLmVuYWJsZWRQcm9maWxlcigpKQorICAgIGlmIChMZWdhY3lQcm9maWxl
ciogcHJvZmlsZXIgPSB2bS5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJvZmlsZXItPndp
bGxFeGVjdXRlKGNhbGxGcmFtZSwgcHJvZ3JhbS0+c291cmNlVVJMKCksIHByb2dyYW0tPmxpbmVO
bygpKTsKIAogICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGU6CiAgICAgSlNWYWx1ZSByZXN1bHQ7Ci0g
ICAgaWYgKExJS0VMWSghZ2xvYmFsRGF0YS53YXRjaGRvZy5kaWRGaXJlKG5ld0NhbGxGcmFtZSkp
KSB7CisgICAgaWYgKExJS0VMWSghdm0ud2F0Y2hkb2cuZGlkRmlyZShuZXdDYWxsRnJhbWUpKSkg
ewogICAgICAgICBTYW1wbGluZ1Rvb2w6OkNhbGxSZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIu
Z2V0KCkpOwotICAgICAgICBXYXRjaGRvZzo6U2NvcGUgd2F0Y2hkb2dTY29wZShnbG9iYWxEYXRh
LndhdGNoZG9nKTsKKyAgICAgICAgV2F0Y2hkb2c6OlNjb3BlIHdhdGNoZG9nU2NvcGUodm0ud2F0
Y2hkb2cpOwogCiAjaWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKICAgICAgICAgcmVzdWx0ID0gTExJ
bnQ6OkNMb29wOjpleGVjdXRlKG5ld0NhbGxGcmFtZSwgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZSk7
CiAjZWxpZiBFTkFCTEUoSklUKQotICAgICAgICByZXN1bHQgPSBwcm9ncmFtLT5nZW5lcmF0ZWRK
SVRDb2RlKCkuZXhlY3V0ZSgmbV9zdGFjaywgbmV3Q2FsbEZyYW1lLCAmZ2xvYmFsRGF0YSk7Cisg
ICAgICAgIHJlc3VsdCA9IHByb2dyYW0tPmdlbmVyYXRlZEpJVENvZGUoKS5leGVjdXRlKCZtX3N0
YWNrLCBuZXdDYWxsRnJhbWUsICZ2bSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKICAgICB9IGVs
c2UKICAgICAgICAgcmVzdWx0ID0gdGhyb3dUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKG5l
d0NhbGxGcmFtZSk7CiAKLSAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gZ2xvYmFs
RGF0YS5lbmFibGVkUHJvZmlsZXIoKSkKKyAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVy
ID0gdm0uZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAgIHByb2ZpbGVyLT5kaWRFeGVjdXRlKGNh
bGxGcmFtZSwgcHJvZ3JhbS0+c291cmNlVVJMKCksIHByb2dyYW0tPmxpbmVObygpKTsKIAogICAg
IG1fc3RhY2sucG9wRnJhbWUobmV3Q2FsbEZyYW1lKTsKQEAgLTEwNTIsMTEgKzEwNTIsMTEgQEAg
ZmFpbGVkSlNPTlA6CiAKIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBKU09iamVjdCogZnVuY3Rpb24sIENhbGxUeXBlIGNhbGxUeXBlLCBjb25z
dCBDYWxsRGF0YSYgY2FsbERhdGEsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGNhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpOworICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKICAgICBBU1NFUlQoaXNWYWxp
ZFRoaXNPYmplY3QodGhpc1ZhbHVlLCBjYWxsRnJhbWUpKTsKICAgICBBU1NFUlQoIWNhbGxGcmFt
ZS0+aGFkRXhjZXB0aW9uKCkpOwotICAgIEFTU0VSVCghZ2xvYmFsRGF0YS5pc0NvbGxlY3RvckJ1
c3koKSk7Ci0gICAgaWYgKGdsb2JhbERhdGEuaXNDb2xsZWN0b3JCdXN5KCkpCisgICAgQVNTRVJU
KCF2bS5pc0NvbGxlY3RvckJ1c3koKSk7CisgICAgaWYgKHZtLmlzQ29sbGVjdG9yQnVzeSgpKQog
ICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKICAgICBTdGFja1N0YXRzOjpDaGVja1BvaW50IHN0
YWNrQ2hlY2tQb2ludDsKQEAgLTEwNzYsNyArMTA3Niw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6
OmV4ZWN1dGVDYWxsKENhbGxGcmEKICAgICAgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxUeXBl
SG9zdCk7CiAgICAgICAgIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOwogICAgIH0KLSAgICBE
eW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUoZ2xvYmFsRGF0YSwgc2Nv
cGUtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFs
T2JqZWN0U2NvcGUodm0sIHNjb3BlLT5nbG9iYWxPYmplY3QoKSk7CiAKICAgICBpZiAoaXNKU0Nh
bGwpIHsKICAgICAgICAgLy8gQ29tcGlsZSB0aGUgY2FsbGVlOgpAQCAtMTA5OCwyNyArMTA5OCwy
NyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlQ2FsbChDYWxsRnJhCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKQogICAgICAgICBuZXdDYWxsRnJhbWUt
PnNldEFyZ3VtZW50KGksIGFyZ3MuYXQoaSkpOwogCi0gICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBw
cm9maWxlciA9IGdsb2JhbERhdGEuZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgaWYgKExlZ2FjeVBy
b2ZpbGVyKiBwcm9maWxlciA9IHZtLmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICBwcm9maWxl
ci0+d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBmdW5jdGlvbik7CiAKICAgICBKU1ZhbHVlIHJlc3Vs
dDsKLSAgICBpZiAoTElLRUxZKCFnbG9iYWxEYXRhLndhdGNoZG9nLmRpZEZpcmUobmV3Q2FsbEZy
YW1lKSkpIHsKKyAgICBpZiAoTElLRUxZKCF2bS53YXRjaGRvZy5kaWRGaXJlKG5ld0NhbGxGcmFt
ZSkpKSB7CiAgICAgICAgIFNhbXBsaW5nVG9vbDo6Q2FsbFJlY29yZCBjYWxsUmVjb3JkKG1fc2Ft
cGxlci5nZXQoKSwgIWlzSlNDYWxsKTsKLSAgICAgICAgV2F0Y2hkb2c6OlNjb3BlIHdhdGNoZG9n
U2NvcGUoZ2xvYmFsRGF0YS53YXRjaGRvZyk7CisgICAgICAgIFdhdGNoZG9nOjpTY29wZSB3YXRj
aGRvZ1Njb3BlKHZtLndhdGNoZG9nKTsKIAogICAgICAgICAvLyBFeGVjdXRlIHRoZSBjb2RlOgog
ICAgICAgICBpZiAoaXNKU0NhbGwpIHsKICNpZiBFTkFCTEUoTExJTlRfQ19MT09QKQogICAgICAg
ICAgICAgcmVzdWx0ID0gTExJbnQ6OkNMb29wOjpleGVjdXRlKG5ld0NhbGxGcmFtZSwgbGxpbnRf
ZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUpOwogI2VsaWYgRU5BQkxFKEpJVCkKLSAgICAgICAg
ICAgIHJlc3VsdCA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklU
Q29kZUZvckNhbGwoKS5leGVjdXRlKCZtX3N0YWNrLCBuZXdDYWxsRnJhbWUsICZnbG9iYWxEYXRh
KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+
Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5leGVjdXRlKCZtX3N0YWNrLCBuZXdDYWxsRnJhbWUs
ICZ2bSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICByZXN1bHQgPSBKU1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKG5ld0Nh
bGxGcmFtZSkpOwogICAgIH0gZWxzZQogICAgICAgICByZXN1bHQgPSB0aHJvd1Rlcm1pbmF0ZWRF
eGVjdXRpb25FeGNlcHRpb24obmV3Q2FsbEZyYW1lKTsKIAotICAgIGlmIChMZWdhY3lQcm9maWxl
ciogcHJvZmlsZXIgPSBnbG9iYWxEYXRhLmVuYWJsZWRQcm9maWxlcigpKQorICAgIGlmIChMZWdh
Y3lQcm9maWxlciogcHJvZmlsZXIgPSB2bS5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJv
ZmlsZXItPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBmdW5jdGlvbik7CiAKICAgICBtX3N0YWNrLnBv
cEZyYW1lKG5ld0NhbGxGcmFtZSk7CkBAIC0xMTI3LDEyICsxMTI3LDEyIEBAIEpTVmFsdWUgSW50
ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKENhbGxGcmEKIAogSlNPYmplY3QqIEludGVycHJldGVyOjpl
eGVjdXRlQ29uc3RydWN0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogY29uc3RydWN0
b3IsIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYgY29u
c3RydWN0RGF0YSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSBjYWxsRnJh
bWUtPnZtKCk7CiAgICAgQVNTRVJUKCFjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKTsKLSAgICBB
U1NFUlQoIWdsb2JhbERhdGEuaXNDb2xsZWN0b3JCdXN5KCkpOworICAgIEFTU0VSVCghdm0uaXND
b2xsZWN0b3JCdXN5KCkpOwogICAgIC8vIFdlIHRocm93IGluIHRoaXMgY2FzZSBiZWNhdXNlIHdl
IGhhdmUgdG8gcmV0dXJuIHNvbWV0aGluZyAidmFsaWQiIGJ1dCB3ZSdyZQogICAgIC8vIGFscmVh
ZHkgaW4gYW4gaW52YWxpZCBzdGF0ZS4KLSAgICBpZiAoZ2xvYmFsRGF0YS5pc0NvbGxlY3RvckJ1
c3koKSkKKyAgICBpZiAodm0uaXNDb2xsZWN0b3JCdXN5KCkpCiAgICAgICAgIHJldHVybiBjaGVj
a2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSkpOwogCiAgICAgU3Rh
Y2tTdGF0czo6Q2hlY2tQb2ludCBzdGFja0NoZWNrUG9pbnQ7CkBAIC0xMTUzLDcgKzExNTMsNyBA
QCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoCiAgICAgICAgIHNjb3Bl
ID0gY2FsbEZyYW1lLT5zY29wZSgpOwogICAgIH0KIAotICAgIER5bmFtaWNHbG9iYWxPYmplY3RT
Y29wZSBnbG9iYWxPYmplY3RTY29wZShnbG9iYWxEYXRhLCBzY29wZS0+Z2xvYmFsT2JqZWN0KCkp
OworICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZSh2bSwgc2Nv
cGUtPmdsb2JhbE9iamVjdCgpKTsKIAogICAgIGlmIChpc0pTQ29uc3RydWN0KSB7CiAgICAgICAg
IC8vIENvbXBpbGUgdGhlIGNhbGxlZToKQEAgLTExNzUsMjcgKzExNzUsMjcgQEAgSlNPYmplY3Qq
IEludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYXJncy5zaXplKCk7ICsraSkKICAgICAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudChp
LCBhcmdzLmF0KGkpKTsKIAotICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSBnbG9i
YWxEYXRhLmVuYWJsZWRQcm9maWxlcigpKQorICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmls
ZXIgPSB2bS5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJvZmlsZXItPndpbGxFeGVjdXRl
KGNhbGxGcmFtZSwgY29uc3RydWN0b3IpOwogCiAgICAgSlNWYWx1ZSByZXN1bHQ7Ci0gICAgaWYg
KExJS0VMWSghZ2xvYmFsRGF0YS53YXRjaGRvZy5kaWRGaXJlKG5ld0NhbGxGcmFtZSkpKSB7Cisg
ICAgaWYgKExJS0VMWSghdm0ud2F0Y2hkb2cuZGlkRmlyZShuZXdDYWxsRnJhbWUpKSkgewogICAg
ICAgICBTYW1wbGluZ1Rvb2w6OkNhbGxSZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIuZ2V0KCks
ICFpc0pTQ29uc3RydWN0KTsKLSAgICAgICAgV2F0Y2hkb2c6OlNjb3BlIHdhdGNoZG9nU2NvcGUo
Z2xvYmFsRGF0YS53YXRjaGRvZyk7CisgICAgICAgIFdhdGNoZG9nOjpTY29wZSB3YXRjaGRvZ1Nj
b3BlKHZtLndhdGNoZG9nKTsKIAogICAgICAgICAvLyBFeGVjdXRlIHRoZSBjb2RlLgogICAgICAg
ICBpZiAoaXNKU0NvbnN0cnVjdCkgewogI2lmIEVOQUJMRShMTElOVF9DX0xPT1ApCiAgICAgICAg
ICAgICByZXN1bHQgPSBMTEludDo6Q0xvb3A6OmV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBsbGludF9m
dW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlKTsKICNlbGlmIEVOQUJMRShKSVQpCi0gICAg
ICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2Vu
ZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdCgpLmV4ZWN1dGUoJm1fc3RhY2ssIG5ld0NhbGxGcmFt
ZSwgJmdsb2JhbERhdGEpOworICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0RGF0YS5qcy5m
dW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3QoKS5leGVjdXRl
KCZtX3N0YWNrLCBuZXdDYWxsRnJhbWUsICZ2bSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXN1bHQgPSBKU1ZhbHVlOjpkZWNvZGUoY29uc3Ry
dWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24obmV3Q2FsbEZyYW1lKSk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIHJlc3VsdCA9IHRocm93VGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihuZXdDYWxsRnJh
bWUpOwogCi0gICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IGdsb2JhbERhdGEuZW5h
YmxlZFByb2ZpbGVyKCkpCisgICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IHZtLmVu
YWJsZWRQcm9maWxlcigpKQogICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0ZShjYWxsRnJhbWUs
IGNvbnN0cnVjdG9yKTsKIAogICAgIG1fc3RhY2sucG9wRnJhbWUobmV3Q2FsbEZyYW1lKTsKQEAg
LTEyMDgsMTAgKzEyMDgsMTAgQEAgSlNPYmplY3QqIEludGVycHJldGVyOjpleGVjdXRlQ29uc3Ry
dWN0KAogCiBDYWxsRnJhbWVDbG9zdXJlIEludGVycHJldGVyOjpwcmVwYXJlRm9yUmVwZWF0Q2Fs
bChGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIEpTU2NvcGUqIHNjb3BlKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9ICpz
Y29wZS0+Z2xvYmFsRGF0YSgpOwotICAgIEFTU0VSVCghZ2xvYmFsRGF0YS5leGNlcHRpb24pOwor
ICAgIFZNJiB2bSA9ICpzY29wZS0+dm0oKTsKKyAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbik7CiAg
ICAgCi0gICAgaWYgKGdsb2JhbERhdGEuaXNDb2xsZWN0b3JCdXN5KCkpCisgICAgaWYgKHZtLmlz
Q29sbGVjdG9yQnVzeSgpKQogICAgICAgICByZXR1cm4gQ2FsbEZyYW1lQ2xvc3VyZSgpOwogCiAg
ICAgU3RhY2tTdGF0czo6Q2hlY2tQb2ludCBzdGFja0NoZWNrUG9pbnQ7CkBAIC0xMjQ0LDE3ICsx
MjQ0LDE3IEBAIENhbGxGcmFtZUNsb3N1cmUgSW50ZXJwcmV0ZXI6OnByZXBhcmVGb3IKICAgICB9
CiAKICAgICAvLyBSZXR1cm4gdGhlIHN1Y2Nlc3NmdWwgY2xvc3VyZToKLSAgICBDYWxsRnJhbWVD
bG9zdXJlIHJlc3VsdCA9IHsgY2FsbEZyYW1lLCBuZXdDYWxsRnJhbWUsIGZ1bmN0aW9uLCBmdW5j
dGlvbkV4ZWN1dGFibGUsICZnbG9iYWxEYXRhLCBzY29wZSwgbmV3Q29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCksIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIH07CisgICAgQ2FsbEZyYW1lQ2xv
c3VyZSByZXN1bHQgPSB7IGNhbGxGcmFtZSwgbmV3Q2FsbEZyYW1lLCBmdW5jdGlvbiwgZnVuY3Rp
b25FeGVjdXRhYmxlLCAmdm0sIHNjb3BlLCBuZXdDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgfTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBK
U1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKENhbGxGcmFtZUNsb3N1cmUmIGNsb3N1cmUpIAog
ewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9ICpjbG9zdXJlLmdsb2JhbERhdGE7Cisg
ICAgVk0mIHZtID0gKmNsb3N1cmUudm07CiAgICAgU2FtcGxpbmdTY29wZSBzYW1wbGluZ1Njb3Bl
KHRoaXMpOwogICAgIAotICAgIEFTU0VSVCghZ2xvYmFsRGF0YS5pc0NvbGxlY3RvckJ1c3koKSk7
Ci0gICAgaWYgKGdsb2JhbERhdGEuaXNDb2xsZWN0b3JCdXN5KCkpCisgICAgQVNTRVJUKCF2bS5p
c0NvbGxlY3RvckJ1c3koKSk7CisgICAgaWYgKHZtLmlzQ29sbGVjdG9yQnVzeSgpKQogICAgICAg
ICByZXR1cm4ganNOdWxsKCk7CiAKICAgICBTdGFja1N0YXRzOjpDaGVja1BvaW50IHN0YWNrQ2hl
Y2tQb2ludDsKQEAgLTEyNjIsNyArMTI2Miw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1
dGUoQ2FsbEZyYW1lQ2wKICAgICBjbG9zdXJlLnJlc2V0Q2FsbEZyYW1lKCk7CiAgICAgbV9zdGFj
ay52YWxpZGF0ZUZlbmNlKGNsb3N1cmUubmV3Q2FsbEZyYW1lLCAiU1RFUCAxIik7CiAKLSAgICBp
ZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gZ2xvYmFsRGF0YS5lbmFibGVkUHJvZmlsZXIo
KSkKKyAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gdm0uZW5hYmxlZFByb2ZpbGVy
KCkpCiAgICAgICAgIHByb2ZpbGVyLT53aWxsRXhlY3V0ZShjbG9zdXJlLm9sZENhbGxGcmFtZSwg
Y2xvc3VyZS5mdW5jdGlvbik7CiAKICAgICAvLyBUaGUgY29kZSBleGVjdXRpb24gYmVsb3cgbWF5
IHB1c2ggbW9yZSBmcmFtZXMgYW5kIHBvaW50IHRoZSB0b3BDYWxsRnJhbWUKQEAgLTEyNzMsMjMg
KzEyNzMsMjMgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShDYWxsRnJhbWVDbAogICAg
IC8vIEhlbmNlLCB3ZSBuZWVkIHRvIHByZXNlcnZlIHRoZSB0b3BDYWxsRnJhbWUgaGVyZSBvdXJz
ZWx2ZXMgYmVmb3JlCiAgICAgLy8gcmVwZWF0aW5nIHRoaXMgY2FsbCBvbiBhIHNlY29uZCBjYWxs
YmFjayBmdW5jdGlvbi4KIAotICAgIFRvcENhbGxGcmFtZVNldHRlciB0b3BDYWxsRnJhbWUoZ2xv
YmFsRGF0YSwgY2xvc3VyZS5uZXdDYWxsRnJhbWUpOworICAgIFRvcENhbGxGcmFtZVNldHRlciB0
b3BDYWxsRnJhbWUodm0sIGNsb3N1cmUubmV3Q2FsbEZyYW1lKTsKIAogICAgIC8vIEV4ZWN1dGUg
dGhlIGNvZGU6CiAgICAgSlNWYWx1ZSByZXN1bHQ7Ci0gICAgaWYgKExJS0VMWSghZ2xvYmFsRGF0
YS53YXRjaGRvZy5kaWRGaXJlKGNsb3N1cmUubmV3Q2FsbEZyYW1lKSkpIHsKKyAgICBpZiAoTElL
RUxZKCF2bS53YXRjaGRvZy5kaWRGaXJlKGNsb3N1cmUubmV3Q2FsbEZyYW1lKSkpIHsKICAgICAg
ICAgU2FtcGxpbmdUb29sOjpDYWxsUmVjb3JkIGNhbGxSZWNvcmQobV9zYW1wbGVyLmdldCgpKTsK
LSAgICAgICAgV2F0Y2hkb2c6OlNjb3BlIHdhdGNoZG9nU2NvcGUoZ2xvYmFsRGF0YS53YXRjaGRv
Zyk7CisgICAgICAgIFdhdGNoZG9nOjpTY29wZSB3YXRjaGRvZ1Njb3BlKHZtLndhdGNoZG9nKTsK
IAogI2lmIEVOQUJMRShMTElOVF9DX0xPT1ApCiAgICAgICAgIHJlc3VsdCA9IExMSW50OjpDTG9v
cDo6ZXhlY3V0ZShjbG9zdXJlLm5ld0NhbGxGcmFtZSwgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxf
cHJvbG9ndWUpOwogI2VsaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgcmVzdWx0ID0gY2xvc3VyZS5m
dW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCkuZXhlY3V0ZSgmbV9z
dGFjaywgY2xvc3VyZS5uZXdDYWxsRnJhbWUsICZnbG9iYWxEYXRhKTsKKyAgICAgICAgcmVzdWx0
ID0gY2xvc3VyZS5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCku
ZXhlY3V0ZSgmbV9zdGFjaywgY2xvc3VyZS5uZXdDYWxsRnJhbWUsICZ2bSk7CiAjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKICAgICB9IGVsc2UKICAgICAgICAgcmVzdWx0ID0gdGhyb3dUZXJtaW5hdGVk
RXhlY3V0aW9uRXhjZXB0aW9uKGNsb3N1cmUubmV3Q2FsbEZyYW1lKTsKIAotICAgIGlmIChMZWdh
Y3lQcm9maWxlciogcHJvZmlsZXIgPSBnbG9iYWxEYXRhLmVuYWJsZWRQcm9maWxlcigpKQorICAg
IGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSB2bS5lbmFibGVkUHJvZmlsZXIoKSkKICAg
ICAgICAgcHJvZmlsZXItPmRpZEV4ZWN1dGUoY2xvc3VyZS5vbGRDYWxsRnJhbWUsIGNsb3N1cmUu
ZnVuY3Rpb24pOwogCiAgICAgbV9zdGFjay52YWxpZGF0ZUZlbmNlKGNsb3N1cmUubmV3Q2FsbEZy
YW1lLCAiQUZURVIiKTsKQEAgLTEzMDMsMTcgKzEzMDMsMTcgQEAgdm9pZCBJbnRlcnByZXRlcjo6
ZW5kUmVwZWF0Q2FsbChDYWxsRnJhbQogCiBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2
YWxFeGVjdXRhYmxlKiBldmFsLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB0aGlzVmFs
dWUsIEpTU2NvcGUqIHNjb3BlKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9ICpz
Y29wZS0+Z2xvYmFsRGF0YSgpOworICAgIFZNJiB2bSA9ICpzY29wZS0+dm0oKTsKICAgICBTYW1w
bGluZ1Njb3BlIHNhbXBsaW5nU2NvcGUodGhpcyk7CiAgICAgCi0gICAgQVNTRVJUKHNjb3BlLT5n
bG9iYWxEYXRhKCkgPT0gJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICBBU1NFUlQoc2Nv
cGUtPnZtKCkgPT0gJmNhbGxGcmFtZS0+dm0oKSk7CiAgICAgQVNTRVJUKGlzVmFsaWRUaGlzT2Jq
ZWN0KHRoaXNWYWx1ZSwgY2FsbEZyYW1lKSk7Ci0gICAgQVNTRVJUKCFnbG9iYWxEYXRhLmV4Y2Vw
dGlvbik7Ci0gICAgQVNTRVJUKCFnbG9iYWxEYXRhLmlzQ29sbGVjdG9yQnVzeSgpKTsKLSAgICBp
ZiAoZ2xvYmFsRGF0YS5pc0NvbGxlY3RvckJ1c3koKSkKKyAgICBBU1NFUlQoIXZtLmV4Y2VwdGlv
bik7CisgICAgQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3koKSk7CisgICAgaWYgKHZtLmlzQ29s
bGVjdG9yQnVzeSgpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBEeW5hbWljR2xv
YmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUoZ2xvYmFsRGF0YSwgc2NvcGUtPmdsb2Jh
bE9iamVjdCgpKTsKKyAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2Nv
cGUodm0sIHNjb3BlLT5nbG9iYWxPYmplY3QoKSk7CiAKICAgICBTdGFja1N0YXRzOjpDaGVja1Bv
aW50IHN0YWNrQ2hlY2tQb2ludDsKICAgICBjb25zdCBTdGFja0JvdW5kcyYgbmF0aXZlU3RhY2sg
PSB3dGZUaHJlYWREYXRhKCkuc3RhY2soKTsKQEAgLTEzNDQsNyArMTM0NCw3IEBAIEpTVmFsdWUg
SW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICAgICAgICAgIHZhcmlhYmxlT2Jq
ZWN0ID0gc2NvcGU7CiAgICAgICAgIH0KICAgICAgICAgLy8gU2NvcGUgZm9yIEJhdGNoZWRUcmFu
c2l0aW9uT3B0aW1pemVyCi0gICAgICAgIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyIG9wdGlt
aXplcihnbG9iYWxEYXRhLCB2YXJpYWJsZU9iamVjdCk7CisgICAgICAgIEJhdGNoZWRUcmFuc2l0
aW9uT3B0aW1pemVyIG9wdGltaXplcih2bSwgdmFyaWFibGVPYmplY3QpOwogCiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1WYXJpYWJsZXM7ICsraSkgewogICAgICAgICAgICAg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPnZhcmlhYmxlKGkpOwpAQCAtMTM3
MCwyNCArMTM3MCwyNCBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRh
CiAgICAgLy8gU2V0IHRoZSBhcmd1bWVudHMgZm9yIHRoZSBjYWxsZWU6CiAgICAgbmV3Q2FsbEZy
YW1lLT5zZXRUaGlzVmFsdWUodGhpc1ZhbHVlKTsKIAotICAgIGlmIChMZWdhY3lQcm9maWxlciog
cHJvZmlsZXIgPSBnbG9iYWxEYXRhLmVuYWJsZWRQcm9maWxlcigpKQorICAgIGlmIChMZWdhY3lQ
cm9maWxlciogcHJvZmlsZXIgPSB2bS5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJvZmls
ZXItPndpbGxFeGVjdXRlKGNhbGxGcmFtZSwgZXZhbC0+c291cmNlVVJMKCksIGV2YWwtPmxpbmVO
bygpKTsKIAogICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGU6CiAgICAgSlNWYWx1ZSByZXN1bHQ7Ci0g
ICAgaWYgKExJS0VMWSghZ2xvYmFsRGF0YS53YXRjaGRvZy5kaWRGaXJlKG5ld0NhbGxGcmFtZSkp
KSB7CisgICAgaWYgKExJS0VMWSghdm0ud2F0Y2hkb2cuZGlkRmlyZShuZXdDYWxsRnJhbWUpKSkg
ewogICAgICAgICBTYW1wbGluZ1Rvb2w6OkNhbGxSZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIu
Z2V0KCkpOwotICAgICAgICBXYXRjaGRvZzo6U2NvcGUgd2F0Y2hkb2dTY29wZShnbG9iYWxEYXRh
LndhdGNoZG9nKTsKKyAgICAgICAgV2F0Y2hkb2c6OlNjb3BlIHdhdGNoZG9nU2NvcGUodm0ud2F0
Y2hkb2cpOwogCiAjaWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKICAgICAgICAgcmVzdWx0ID0gTExJ
bnQ6OkNMb29wOjpleGVjdXRlKG5ld0NhbGxGcmFtZSwgbGxpbnRfZXZhbF9wcm9sb2d1ZSk7CiAj
ZWxpZiBFTkFCTEUoSklUKQotICAgICAgICByZXN1bHQgPSBldmFsLT5nZW5lcmF0ZWRKSVRDb2Rl
KCkuZXhlY3V0ZSgmbV9zdGFjaywgbmV3Q2FsbEZyYW1lLCAmZ2xvYmFsRGF0YSk7CisgICAgICAg
IHJlc3VsdCA9IGV2YWwtPmdlbmVyYXRlZEpJVENvZGUoKS5leGVjdXRlKCZtX3N0YWNrLCBuZXdD
YWxsRnJhbWUsICZ2bSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKICAgICB9IGVsc2UKICAgICAg
ICAgcmVzdWx0ID0gdGhyb3dUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKG5ld0NhbGxGcmFt
ZSk7CiAKLSAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gZ2xvYmFsRGF0YS5lbmFi
bGVkUHJvZmlsZXIoKSkKKyAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gdm0uZW5h
YmxlZFByb2ZpbGVyKCkpCiAgICAgICAgIHByb2ZpbGVyLT5kaWRFeGVjdXRlKGNhbGxGcmFtZSwg
ZXZhbC0+c291cmNlVVJMKCksIGV2YWwtPmxpbmVObygpKTsKIAogICAgIG1fc3RhY2sucG9wRnJh
bWUobmV3Q2FsbEZyYW1lKTsKQEAgLTE0MjgsNyArMTQyOCw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0
ZXI6OnJldHJpZXZlQXJndW1lbnRzRnIKICAgICBpZiAoIWZ1bmN0aW9uQ2FsbEZyYW1lKQogICAg
ICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IEFyZ3Vt
ZW50czo6Y3JlYXRlKGZ1bmN0aW9uQ2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGZ1bmN0aW9uQ2Fs
bEZyYW1lKTsKKyAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKGZ1
bmN0aW9uQ2FsbEZyYW1lLT52bSgpLCBmdW5jdGlvbkNhbGxGcmFtZSk7CiAgICAgYXJndW1lbnRz
LT50ZWFyT2ZmKGZ1bmN0aW9uQ2FsbEZyYW1lKTsKICAgICByZXR1cm4gSlNWYWx1ZShhcmd1bWVu
dHMpOwogfQpAQCAtMTQ0Miw3ICsxNDQyLDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6cmV0cmll
dmVDYWxsZXJGcm9tVgogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0OwogICAgIENv
ZGVCbG9jayogdW51c2VkQ2FsbGVyQ29kZUJsb2NrID0gMDsKLSAgICBDYWxsRnJhbWUqIGNhbGxl
ckZyYW1lID0gZ2V0Q2FsbGVySW5mbygmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGZ1bmN0aW9u
Q2FsbEZyYW1lLCBieXRlY29kZU9mZnNldCwgdW51c2VkQ2FsbGVyQ29kZUJsb2NrKTsKKyAgICBD
YWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZ2V0Q2FsbGVySW5mbygmY2FsbEZyYW1lLT52bSgpLCBm
dW5jdGlvbkNhbGxGcmFtZSwgYnl0ZWNvZGVPZmZzZXQsIHVudXNlZENhbGxlckNvZGVCbG9jayk7
CiAgICAgaWYgKCFjYWxsZXJGcmFtZSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIEpT
VmFsdWUgY2FsbGVyID0gY2FsbGVyRnJhbWUtPmNhbGxlZSgpOwpAQCAtMTQ1Miw3ICsxNDUyLDcg
QEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6cmV0cmlldmVDYWxsZXJGcm9tVgogICAgIC8vIFNraXAg
b3ZlciBmdW5jdGlvbiBiaW5kaW5ncy4KICAgICBBU1NFUlQoY2FsbGVyLmlzT2JqZWN0KCkpOwog
ICAgIHdoaWxlIChhc09iamVjdChjYWxsZXIpLT5pbmhlcml0cygmSlNCb3VuZEZ1bmN0aW9uOjpz
X2luZm8pKSB7Ci0gICAgICAgIGNhbGxlckZyYW1lID0gZ2V0Q2FsbGVySW5mbygmY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCksIGNhbGxlckZyYW1lLCBieXRlY29kZU9mZnNldCwgdW51c2VkQ2FsbGVy
Q29kZUJsb2NrKTsKKyAgICAgICAgY2FsbGVyRnJhbWUgPSBnZXRDYWxsZXJJbmZvKCZjYWxsRnJh
bWUtPnZtKCksIGNhbGxlckZyYW1lLCBieXRlY29kZU9mZnNldCwgdW51c2VkQ2FsbGVyQ29kZUJs
b2NrKTsKICAgICAgICAgaWYgKCFjYWxsZXJGcmFtZSkKICAgICAgICAgICAgIHJldHVybiBqc051
bGwoKTsKICAgICAgICAgY2FsbGVyID0gY2FsbGVyRnJhbWUtPmNhbGxlZSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHJldmlz
aW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIGNsYXNzIEV2YWxFeGVjdXRhYmxlOwogICAgIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwogICAg
IGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKLSAgICBjbGFzcyBKU0dsb2JhbERhdGE7CisgICAg
Y2xhc3MgVk07CiAgICAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiAgICAgY2xhc3MgTExJbnRPZmZz
ZXRzRXh0cmFjdG9yOwogICAgIGNsYXNzIFByb2dyYW1FeGVjdXRhYmxlOwpAQCAtMTMyLDggKzEz
Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgVG9wQ2FsbEZyYW1lU2V0dGVyIHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIFRvcENhbGxGcmFtZVNldHRlcihKU0dsb2JhbERhdGEmIGds
b2JhbCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi0gICAgICAgICAgICA6IGdsb2JhbERhdGEoZ2xv
YmFsKQorICAgICAgICBUb3BDYWxsRnJhbWVTZXR0ZXIoVk0mIGdsb2JhbCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCisgICAgICAgICAgICA6IHZtKGdsb2JhbCkKICAgICAgICAgICAgICwgb2xkQ2Fs
bEZyYW1lKGdsb2JhbC50b3BDYWxsRnJhbWUpIAogICAgICAgICB7CiAgICAgICAgICAgICBnbG9i
YWwudG9wQ2FsbEZyYW1lID0gY2FsbEZyYW1lOwpAQCAtMTQxLDE2ICsxNDEsMTYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICB+VG9wQ2FsbEZyYW1lU2V0dGVyKCkgCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGdsb2JhbERhdGEudG9wQ2FsbEZyYW1lID0gb2xkQ2FsbEZyYW1l
OworICAgICAgICAgICAgdm0udG9wQ2FsbEZyYW1lID0gb2xkQ2FsbEZyYW1lOwogICAgICAgICB9
CiAgICAgcHJpdmF0ZToKLSAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhOworICAgICAg
ICBWTSYgdm07CiAgICAgICAgIENhbGxGcmFtZSogb2xkQ2FsbEZyYW1lOwogICAgIH07CiAgICAg
CiAgICAgY2xhc3MgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IEFMV0FZU19JTkxJTkUgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyKEpTR2xvYmFsRGF0YSogZ2xvYmFs
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKKyAgICAgICAgQUxXQVlTX0lOTElORSBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIoVk0qIGdsb2JhbCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIEFTU0VSVChnbG9iYWwpOwogICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFt
ZSk7CkBAIC0xNzMsNyArMTczLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBJbnRl
cnByZXRlciYgbV9pbnRlcnByZXRlcjsKICAgICAgICAgfTsKIAotICAgICAgICBJbnRlcnByZXRl
cihKU0dsb2JhbERhdGEgJik7CisgICAgICAgIEludGVycHJldGVyKFZNICYpOwogICAgICAgICB+
SW50ZXJwcmV0ZXIoKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgaW5pdGlhbGl6ZShib29sIGNh
blVzZUpJVCk7CkBAIC0yMTksNyArMjE5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE5F
VkVSX0lOTElORSBIYW5kbGVySW5mbyogdGhyb3dFeGNlcHRpb24oQ2FsbEZyYW1lKiYsIEpTVmFs
dWUmLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CiAgICAgICAgIE5FVkVSX0lOTElORSB2b2lk
IGRlYnVnKENhbGxGcmFtZSosIERlYnVnSG9va0lELCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExp
bmUsIGludCBjb2x1bW4pOwogICAgICAgICBzdGF0aWMgY29uc3QgU3RyaW5nIGdldFRyYWNlTGlu
ZShDYWxsRnJhbWUqLCBTdGFja0ZyYW1lQ29kZVR5cGUsIGNvbnN0IFN0cmluZyYsIGludCk7Ci0g
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFN0YWNrVHJhY2UoSlNHbG9i
YWxEYXRhKiwgVmVjdG9yPFN0YWNrRnJhbWU+JiByZXN1bHRzLCBzaXplX3QgbWF4U3RhY2tTaXpl
ID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSk7CisgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFN0YWNrVHJhY2UoVk0qLCBWZWN0b3I8U3RhY2tGcmFt
ZT4mIHJlc3VsdHMsIHNpemVfdCBtYXhTdGFja1NpemUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNp
emVfdD46Om1heCgpKTsKICAgICAgICAgc3RhdGljIHZvaWQgYWRkU3RhY2tUcmFjZUlmTmVjZXNz
YXJ5KENhbGxGcmFtZSosIEpTVmFsdWUgZXJyb3IpOwogCiAgICAgICAgIHZvaWQgZHVtcFNhbXBs
ZURhdGEoRXhlY1N0YXRlKiBleGVjKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9KU1N0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSlNTdGFjay5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OSArNDMsOSBAQCBzdGF0aWMgTXV0ZXgmIHN0YWNrU3RhdGlzdGljc011dGV4KCkKICAgICByZXR1
cm4gc3RhdGljTXV0ZXg7CiB9ICAgIAogCi1KU1N0YWNrOjpKU1N0YWNrKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgc2l6ZV90IGNhcGFjaXR5KQorSlNTdGFjazo6SlNTdGFjayhWTSYgdm0sIHNp
emVfdCBjYXBhY2l0eSkKICAgICA6IG1fZW5kKDApCi0gICAgLCBtX3RvcENhbGxGcmFtZShnbG9i
YWxEYXRhLnRvcENhbGxGcmFtZSkKKyAgICAsIG1fdG9wQ2FsbEZyYW1lKHZtLnRvcENhbGxGcmFt
ZSkKIHsKICAgICBBU1NFUlQoY2FwYWNpdHkgJiYgaXNQYWdlQWxpZ25lZChjYXBhY2l0eSkpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmgJKHJl
dmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0
YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgY2xhc3MgREZHQ29kZUJsb2NrczsKICAgICBjbGFzcyBFeGVjU3RhdGU7CiAgICAgY2xhc3Mg
SklUU3R1YlJvdXRpbmVTZXQ7Ci0gICAgY2xhc3MgSlNHbG9iYWxEYXRhOworICAgIGNsYXNzIFZN
OwogICAgIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgIGNsYXNzIEpTU3RhY2sg
ewpAQCAtNjcsNyArNjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gQWxsb3cgOGsg
b2YgZXhjZXNzIHJlZ2lzdGVycyBiZWZvcmUgd2Ugc3RhcnQgdHJ5aW5nIHRvIHJlYXAgdGhlIHN0
YWNrCiAgICAgICAgIHN0YXRpYyBjb25zdCBwdHJkaWZmX3QgbWF4RXhjZXNzQ2FwYWNpdHkgPSA4
ICogMTAyNDsKIAotICAgICAgICBKU1N0YWNrKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBjYXBhY2l0
eSA9IGRlZmF1bHRDYXBhY2l0eSk7CisgICAgICAgIEpTU3RhY2soVk0mLCBzaXplX3QgY2FwYWNp
dHkgPSBkZWZhdWx0Q2FwYWNpdHkpOwogICAgICAgICB+SlNTdGFjaygpOwogICAgICAgICAKICAg
ICAgICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1
YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICsz
MCw3IEBACiAKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgotI2lu
Y2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgi
CkBAIC0zOCwxMSArMzgsMTEgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBDbG9zdXJlQ2FsbFN0dWJS
b3V0aW5lOjpDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAotICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiYgY29kZSwgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBKU0NlbGwqIG93
bmVyLAorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwgVk0mIHZtLCBjb25z
dCBKU0NlbGwqIG93bmVyLAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFeGVjdXRhYmxlQmFz
ZSogZXhlY3V0YWJsZSwgY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKLSAgICA6IEdDQXdh
cmVKSVRTdHViUm91dGluZShjb2RlLCBnbG9iYWxEYXRhLCB0cnVlKQotICAgICwgbV9zdHJ1Y3R1
cmUoZ2xvYmFsRGF0YSwgb3duZXIsIHN0cnVjdHVyZSkKLSAgICAsIG1fZXhlY3V0YWJsZShnbG9i
YWxEYXRhLCBvd25lciwgZXhlY3V0YWJsZSkKKyAgICA6IEdDQXdhcmVKSVRTdHViUm91dGluZShj
b2RlLCB2bSwgdHJ1ZSkKKyAgICAsIG1fc3RydWN0dXJlKHZtLCBvd25lciwgc3RydWN0dXJlKQor
ICAgICwgbV9leGVjdXRhYmxlKHZtLCBvd25lciwgZXhlY3V0YWJsZSkKICAgICAsIG1fY29kZU9y
aWdpbihjb2RlT3JpZ2luKQogewogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
bG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ2xvc3VyZUNh
bGxTdHViUm91dGluZSA6IHB1YmxpYyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUgewogcHVibGljOgog
ICAgIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUoCi0gICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiYsIEpTR2xvYmFsRGF0YSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsCisgICAgICAgIGNv
bnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwKICAg
ICAgICAgU3RydWN0dXJlKiwgRXhlY3V0YWJsZUJhc2UqLCBjb25zdCBDb2RlT3JpZ2luJik7CiAg
ICAgCiAgICAgdmlydHVhbCB+Q2xvc3VyZUNhbGxTdHViUm91dGluZSgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShyZXZp
c2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNyArMTY3LDcgQEAgdm9pZCBFeGVjdXRh
YmxlQWxsb2NhdG9yOjppbml0aWFsaXplQWxsbwogfQogI2VuZGlmCiAKLUV4ZWN1dGFibGVBbGxv
Y2F0b3I6OkV4ZWN1dGFibGVBbGxvY2F0b3IoSlNHbG9iYWxEYXRhJikKK0V4ZWN1dGFibGVBbGxv
Y2F0b3I6OkV4ZWN1dGFibGVBbGxvY2F0b3IoVk0mKQogI2lmIEVOQUJMRShBU1NFTUJMRVJfV1hf
RVhDTFVTSVZFKQogICAgIDogbV9hbGxvY2F0b3IoYWRvcHRQdHIobmV3ICBEZW1hbmRFeGVjdXRh
YmxlQWxsb2NhdG9yKCkpKQogI2VuZGlmCkBAIC0yMTIsNyArMjEyLDcgQEAgZG91YmxlIEV4ZWN1
dGFibGVBbGxvY2F0b3I6Om1lbW9yeVByZXNzdQogCiB9CiAKLVBhc3NSZWZQdHI8RXhlY3V0YWJs
ZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoSlNHbG9iYWxEYXRh
Jiwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZv
cnQgZWZmb3J0KQorUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxl
QWxsb2NhdG9yOjphbGxvY2F0ZShWTSYsIHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJV
SUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBSZWZQdHI8RXhlY3V0YWJs
ZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yKCktPmFsbG9jYXRlKHNpemVJbkJ5dGVz
LCBvd25lclVJRCk7CiAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0IHx8IGVmZm9ydCAhPSBKSVRD
b21waWxhdGlvbk11c3RTdWNjZWVkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
RXhlY3V0YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtNzQsOCArNzQsOCBAQCBleHRlcm4gIkMiIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSB2b2lkIENh
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU0dsb2JhbERhdGE7Ci12b2lkIHJlbGVhc2VF
eGVjdXRhYmxlTWVtb3J5KEpTR2xvYmFsRGF0YSYpOworY2xhc3MgVk07Cit2b2lkIHJlbGVhc2VF
eGVjdXRhYmxlTWVtb3J5KFZNJik7CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBqaXRBbGxvY2F0
aW9uR3JhbnVsZSA9IDMyOwogCkBAIC0xMTgsNyArMTE4LDcgQEAgY2xhc3MgRXhlY3V0YWJsZUFs
bG9jYXRvciB7CiAgICAgZW51bSBQcm90ZWN0aW9uU2V0dGluZyB7IFdyaXRhYmxlLCBFeGVjdXRh
YmxlIH07CiAKIHB1YmxpYzoKLSAgICBFeGVjdXRhYmxlQWxsb2NhdG9yKEpTR2xvYmFsRGF0YSYp
OworICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IoVk0mKTsKICAgICB+RXhlY3V0YWJsZUFsbG9jYXRv
cigpOwogICAgIAogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVBbGxvY2F0b3IoKTsKQEAgLTEz
NSw3ICsxMzUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcFByb2ZpbGUoKSB7IH0K
ICNlbmRpZgogCi0gICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBhbGxvY2F0
ZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlELCBKSVRD
b21waWxhdGlvbkVmZm9ydCk7CisgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
PiBhbGxvY2F0ZShWTSYsIHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQsIEpJVENv
bXBpbGF0aW9uRWZmb3J0KTsKIAogI2lmIEVOQUJMRShBU1NFTUJMRVJfV1hfRVhDTFVTSVZFKQog
ICAgIHN0YXRpYyB2b2lkIG1ha2VXcml0YWJsZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZN
UG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6
OmluaXRpYWxpemVBbGxvCiAgICAgQ29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9yKGFsbG9j
YXRvcik7CiB9CiAKLUV4ZWN1dGFibGVBbGxvY2F0b3I6OkV4ZWN1dGFibGVBbGxvY2F0b3IoSlNH
bG9iYWxEYXRhJikKK0V4ZWN1dGFibGVBbGxvY2F0b3I6OkV4ZWN1dGFibGVBbGxvY2F0b3IoVk0m
KQogewogICAgIEFTU0VSVChhbGxvY2F0b3IpOwogfQpAQCAtMTU2LDEzICsxNTYsMTMgQEAgZG91
YmxlIEV4ZWN1dGFibGVBbGxvY2F0b3I6Om1lbW9yeVByZXNzdQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLVBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9j
YXRvcjo6YWxsb2NhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgc2l6ZUluQnl0
ZXMsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCitQYXNzUmVm
UHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRl
KFZNJiB2bSwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0KQogewogICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBy
ZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBvd25lclVJRCk7CiAgICAg
aWYgKCFyZXN1bHQpIHsKICAgICAgICAgaWYgKGVmZm9ydCA9PSBKSVRDb21waWxhdGlvbkNhbkZh
aWwpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICByZWxlYXNlRXhlY3V0YWJs
ZU1lbW9yeShnbG9iYWxEYXRhKTsKKyAgICAgICAgcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkodm0p
OwogICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBvd25l
clVJRCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNw
cAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJl
SklUU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaWYg
RU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEu
aCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJT
bG90VmlzaXRvci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgpAQCAtMzcsMTMgKzM3LDEzIEBA
CiBuYW1lc3BhY2UgSlNDIHsKIAogR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpHQ0F3YXJlSklUU3R1
YlJvdXRpbmUoCi0gICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLCBKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIGJvb2wgaXNDbG9zdXJlQ2FsbCkKKyAgICBjb25zdCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYmIGNvZGUsIFZNJiB2bSwgYm9vbCBpc0Nsb3N1cmVDYWxsKQogICAgIDog
SklUU3R1YlJvdXRpbmUoY29kZSkKICAgICAsIG1fbWF5QmVFeGVjdXRpbmcoZmFsc2UpCiAgICAg
LCBtX2lzSmV0dGlzb25lZChmYWxzZSkKICAgICAsIG1faXNDbG9zdXJlQ2FsbChpc0Nsb3N1cmVD
YWxsKQogewotICAgIGdsb2JhbERhdGEuaGVhcC5tX2ppdFN0dWJSb3V0aW5lcy5hZGQodGhpcyk7
CisgICAgdm0uaGVhcC5tX2ppdFN0dWJSb3V0aW5lcy5hZGQodGhpcyk7CiB9CiAgICAgCiBHQ0F3
YXJlSklUU3R1YlJvdXRpbmU6On5HQ0F3YXJlSklUU3R1YlJvdXRpbmUoKSB7IH0KQEAgLTc5LDEw
ICs3OSwxMCBAQCB2b2lkIEdDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkCiB9CiAK
IE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoT25lT2JqZWN0OjpNYXJraW5nR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lV2l0aE9uZU9iamVjdCgKLSAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYmIGNvZGUsIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgSlNDZWxsKiBvd25l
ciwKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUsIFZNJiB2bSwgY29uc3Qg
SlNDZWxsKiBvd25lciwKICAgICBKU0NlbGwqIG9iamVjdCkKLSAgICA6IEdDQXdhcmVKSVRTdHVi
Um91dGluZShjb2RlLCBnbG9iYWxEYXRhKQotICAgICwgbV9vYmplY3QoZ2xvYmFsRGF0YSwgb3du
ZXIsIG9iamVjdCkKKyAgICA6IEdDQXdhcmVKSVRTdHViUm91dGluZShjb2RlLCB2bSkKKyAgICAs
IG1fb2JqZWN0KHZtLCBvd25lciwgb2JqZWN0KQogewogfQogCkBAIC05Nyw3ICs5Nyw3IEBAIHZv
aWQgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmUKIAogUGFzc1JlZlB0cjxKSVRT
dHViUm91dGluZT4gY3JlYXRlSklUU3R1YlJvdXRpbmUoCiAgICAgY29uc3QgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmJiBjb2RlLAotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwKKyAgICBWTSYg
dm0sCiAgICAgY29uc3QgSlNDZWxsKiwKICAgICBib29sIG1ha2VzQ2FsbHMpCiB7CkBAIC0xMDUs
MTIgKzEwNSwxMiBAQCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBjcmVhdGVKSVRTdHViCiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSklUU3R1YlJvdXRpbmUoY29kZSkpOwogCiAgICAg
cmV0dXJuIHN0YXRpY19wb2ludGVyX2Nhc3Q8SklUU3R1YlJvdXRpbmU+KAotICAgICAgICBhZG9w
dFJlZihuZXcgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIGdsb2JhbERhdGEpKSk7CisgICAg
ICAgIGFkb3B0UmVmKG5ldyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29kZSwgdm0pKSk7CiB9CiAK
IFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAogICAgIGNv
bnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwKLSAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsCisgICAgVk0mIHZtLAogICAgIGNvbnN0IEpTQ2VsbCogb3duZXIsCiAgICAgYm9vbCBt
YWtlc0NhbGxzLAogICAgIEpTQ2VsbCogb2JqZWN0KQpAQCAtMTE5LDcgKzExOSw3IEBAIFBhc3NS
ZWZQdHI8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0dWIKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBKSVRTdHViUm91dGluZShjb2RlKSk7CiAgICAgCiAgICAgcmV0dXJuIHN0YXRpY19w
b2ludGVyX2Nhc3Q8SklUU3R1YlJvdXRpbmU+KAotICAgICAgICBhZG9wdFJlZihuZXcgTWFya2lu
Z0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3QoY29kZSwgZ2xvYmFsRGF0YSwgb3du
ZXIsIG9iamVjdCkpKTsKKyAgICAgICAgYWRvcHRSZWYobmV3IE1hcmtpbmdHQ0F3YXJlSklUU3R1
YlJvdXRpbmVXaXRoT25lT2JqZWN0KGNvZGUsIHZtLCBvd25lciwgb2JqZWN0KSkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTQsNyArNTQsNyBAQCBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKIC8vIGxpc3Qgd2hpY2gg
ZG9lcyBub3QgZ2V0IHJlY2xhaW1lZCBhbGwgYXQgb25jZSkuCiBjbGFzcyBHQ0F3YXJlSklUU3R1
YlJvdXRpbmUgOiBwdWJsaWMgSklUU3R1YlJvdXRpbmUgewogcHVibGljOgotICAgIEdDQXdhcmVK
SVRTdHViUm91dGluZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmLCBKU0dsb2JhbERhdGEm
LCBib29sIGlzQ2xvc3VyZUNhbGwgPSBmYWxzZSk7CisgICAgR0NBd2FyZUpJVFN0dWJSb3V0aW5l
KGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIFZNJiwgYm9vbCBpc0Nsb3N1cmVDYWxsID0g
ZmFsc2UpOwogICAgIHZpcnR1YWwgfkdDQXdhcmVKSVRTdHViUm91dGluZSgpOwogICAgIAogICAg
IHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTg0LDcg
Kzg0LDcgQEAgcHJpdmF0ZToKIGNsYXNzIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRo
T25lT2JqZWN0IDogcHVibGljIEdDQXdhcmVKSVRTdHViUm91dGluZSB7CiBwdWJsaWM6CiAgICAg
TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3QoCi0gICAgICAgIGNvbnN0
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIEpTR2xvYmFsRGF0YSYsIGNvbnN0IEpTQ2VsbCogb3du
ZXIsIEpTQ2VsbCopOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmLCBWTSYs
IGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTQ2VsbCopOwogICAgIHZpcnR1YWwgfk1hcmtpbmdHQ0F3
YXJlSklUU3R1YlJvdXRpbmVXaXRoT25lT2JqZWN0KCk7CiAgICAgCiBwcm90ZWN0ZWQ6CkBAIC0x
MDIsNyArMTAyLDcgQEAgcHJpdmF0ZToKIC8vIAogLy8gUGFzc1JlZlB0cjxKSVRTdHViUm91dGlu
ZT4gY3JlYXRlSklUU3R1YlJvdXRpbmUoCiAvLyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYmIGNvZGUsCi0vLyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsCisvLyAgICBWTSYgdm0s
CiAvLyAgICBjb25zdCBKU0NlbGwqIG93bmVyLAogLy8gICAgYm9vbCBtYWtlc0NhbGxzLAogLy8g
ICAgLi4uKTsKQEAgLTExNCw5ICsxMTQsOSBAQCBwcml2YXRlOgogLy8gd2F5LgogCiBQYXNzUmVm
UHRyPEpJVFN0dWJSb3V0aW5lPiBjcmVhdGVKSVRTdHViUm91dGluZSgKLSAgICBjb25zdCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYmLCBKU0dsb2JhbERhdGEmLCBjb25zdCBKU0NlbGwqIG93bmVyLCBi
b29sIG1ha2VzQ2FsbHMpOworICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIFZNJiwg
Y29uc3QgSlNDZWxsKiBvd25lciwgYm9vbCBtYWtlc0NhbGxzKTsKIFBhc3NSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAotICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiYsIEpTR2xvYmFsRGF0YSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIGJvb2wgbWFrZXND
YWxscywKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmLCBWTSYsIGNvbnN0IEpTQ2Vs
bCogb3duZXIsIGJvb2wgbWFrZXNDYWxscywKICAgICBKU0NlbGwqKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxNDg2NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcwLDkgKzcwLDkgQEAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoQ29kZUJsbwog
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBu
ZXdDYWxsZWVGdW5jdGlvbik7CiB9CiAKLUpJVDo6SklUKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi0gICAgOiBtX2ludGVycHJldGVyKGdsb2JhbERhdGEt
PmludGVycHJldGVyKQotICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCitKSVQ6OkpJVChW
TSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIDogbV9pbnRlcnByZXRlcih2bS0+aW50
ZXJwcmV0ZXIpCisgICAgLCBtX3ZtKHZtKQogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQog
ICAgICwgbV9sYWJlbHMoY29kZUJsb2NrID8gY29kZUJsb2NrLT5udW1iZXJPZkluc3RydWN0aW9u
cygpIDogMCkKICAgICAsIG1fYnl0ZWNvZGVPZmZzZXQoKHVuc2lnbmVkKS0xKQpAQCAtMTIwLDEw
ICsxMjAsMTAgQEAgdm9pZCBKSVQ6OmVtaXRPcHRpbWl6YXRpb25DaGVjayhPcHRpbWl6YQogCiB2
b2lkIEpJVDo6ZW1pdFdhdGNoZG9nVGltZXJDaGVjaygpCiB7Ci0gICAgaWYgKCFtX2dsb2JhbERh
dGEtPndhdGNoZG9nLmlzRW5hYmxlZCgpKQorICAgIGlmICghbV92bS0+d2F0Y2hkb2cuaXNFbmFi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEp1bXAgc2tpcENoZWNrID0gYnJhbmNoVGVz
dDgoWmVybywgQWJzb2x1dGVBZGRyZXNzKG1fZ2xvYmFsRGF0YS0+d2F0Y2hkb2cudGltZXJEaWRG
aXJlQWRkcmVzcygpKSk7CisgICAgSnVtcCBza2lwQ2hlY2sgPSBicmFuY2hUZXN0OChaZXJvLCBB
YnNvbHV0ZUFkZHJlc3MobV92bS0+d2F0Y2hkb2cudGltZXJEaWRGaXJlQWRkcmVzcygpKSk7CiAg
ICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX2hhbmRsZV93YXRjaGRvZ190aW1lcik7
CiAgICAgc3R1YkNhbGwuY2FsbCgpOwogICAgIHNraXBDaGVjay5saW5rKHRoaXMpOwpAQCAtNjEx
LDExICs2MTEsMTEgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgog
ICAgIH0KICNlbmRpZgogICAgIAotICAgIGlmIChPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkoKSB8
fCBtX2dsb2JhbERhdGEtPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikKKyAgICBpZiAoT3B0aW9uczo6
c2hvd0Rpc2Fzc2VtYmx5KCkgfHwgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKQogICAgICAg
ICBtX2Rpc2Fzc2VtYmxlciA9IGFkb3B0UHRyKG5ldyBKSVREaXNhc3NlbWJsZXIobV9jb2RlQmxv
Y2spKTsKLSAgICBpZiAobV9nbG9iYWxEYXRhLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpIHsKLSAg
ICAgICAgbV9jb21waWxhdGlvbiA9IG1fZ2xvYmFsRGF0YS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
LT5uZXdDb21waWxhdGlvbihtX2NvZGVCbG9jaywgUHJvZmlsZXI6OkJhc2VsaW5lKTsKLSAgICAg
ICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fZ2xvYmFsRGF0YS0+bV9w
ZXJCeXRlY29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7CisgICAgaWYgKG1fdm0tPm1fcGVyQnl0
ZWNvZGVQcm9maWxlcikgeworICAgICAgICBtX2NvbXBpbGF0aW9uID0gbV92bS0+bV9wZXJCeXRl
Y29kZVByb2ZpbGVyLT5uZXdDb21waWxhdGlvbihtX2NvZGVCbG9jaywgUHJvZmlsZXI6OkJhc2Vs
aW5lKTsKKyAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0t
Pm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9jb2RlQmxvY2spOwogICAgIH0KICAgICAKICAgICBp
ZiAobV9kaXNhc3NlbWJsZXIpCkBAIC02NjYsNyArNjY2LDcgQEAgSklUQ29kZSBKSVQ6OnByaXZh
dGVDb21waWxlKENvZGVQdHIqIGZ1bgogI2VuZGlmCiAKICAgICAgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICAgICAgc3RhY2tDaGVjayA9IGJyYW5j
aFB0cihCZWxvdywgQWJzb2x1dGVBZGRyZXNzKG1fZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPnN0
YWNrKCkuYWRkcmVzc09mRW5kKCkpLCByZWdUMSk7CisgICAgICAgIHN0YWNrQ2hlY2sgPSBicmFu
Y2hQdHIoQmVsb3csIEFic29sdXRlQWRkcmVzcyhtX3ZtLT5pbnRlcnByZXRlci0+c3RhY2soKS5h
ZGRyZXNzT2ZFbmQoKSksIHJlZ1QxKTsKICAgICB9CiAKICAgICBMYWJlbCBmdW5jdGlvbkJvZHkg
PSBsYWJlbCgpOwpAQCAtNzEwLDcgKzcxMCw3IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGls
ZShDb2RlUHRyKiBmdW4KICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCiAgICAgICAgIG1fZGlzYXNz
ZW1ibGVyLT5zZXRFbmRPZkNvZGUobGFiZWwoKSk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLCBlZmZvcnQpOworICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrLCBlZmZvcnQpOwogICAg
IGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQogICAgICAgICByZXR1cm4gSklU
Q29kZSgpOwogCkBAIC04MDksNyArODA5LDcgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxl
KENvZGVQdHIqIGZ1bgogICAgIAogICAgIENvZGVSZWYgcmVzdWx0ID0gcGF0Y2hCdWZmZXIuZmlu
YWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KCk7CiAgICAgCi0gICAgbV9nbG9iYWxEYXRhLT5t
YWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQuYWRkKAorICAgIG1f
dm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC5hZGQoCiAg
ICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4ocmVzdWx0LnNpemUoKSkgLwogICAgICAgICBzdGF0
aWNfY2FzdDxkb3VibGU+KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKICAg
ICAKQEAgLTgyMiwxMyArODIyLDEzIEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2Rl
UHRyKiBmdW4KICAgICByZXR1cm4gSklUQ29kZShyZXN1bHQsIEpJVENvZGU6OkJhc2VsaW5lSklU
KTsKIH0KIAotdm9pZCBKSVQ6OmxpbmtGb3IoSlNGdW5jdGlvbiogY2FsbGVlLCBDb2RlQmxvY2sq
IGNhbGxlckNvZGVCbG9jaywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpJVDo6Q29kZVB0
ciBjb2RlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit2b2lkIEpJVDo6bGlua0ZvcihKU0Z1
bmN0aW9uKiBjYWxsZWUsIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGNh
bGxlZUNvZGVCbG9jaywgSklUOjpDb2RlUHRyIGNvZGUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvLCBWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKIAogICAgIEFTU0VSVCghY2Fs
bExpbmtJbmZvLT5pc0xpbmtlZCgpKTsKLSAgICBjYWxsTGlua0luZm8tPmNhbGxlZS5zZXQoKmds
b2JhbERhdGEsIGNhbGxMaW5rSW5mby0+aG90UGF0aEJlZ2luLCBjYWxsZXJDb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwotICAgIGNhbGxMaW5rSW5mby0+bGFzdFNlZW5DYWxs
ZWUuc2V0KCpnbG9iYWxEYXRhLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBj
YWxsZWUpOworICAgIGNhbGxMaW5rSW5mby0+Y2FsbGVlLnNldCgqdm0sIGNhbGxMaW5rSW5mby0+
aG90UGF0aEJlZ2luLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUp
OworICAgIGNhbGxMaW5rSW5mby0+bGFzdFNlZW5DYWxsZWUuc2V0KCp2bSwgY2FsbGVyQ29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKICAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhjYWxsTGlua0luZm8tPmhvdFBhdGhPdGhlciwgY29kZSk7CiAKICAgICBpZiAoY2FsbGVlQ29k
ZUJsb2NrKQpAQCAtODM5LDIzICs4MzksMjMgQEAgdm9pZCBKSVQ6OmxpbmtGb3IoSlNGdW5jdGlv
biogY2FsbGVlLCBDbwogICAgICAgICBBU1NFUlQoY2FsbExpbmtJbmZvLT5jYWxsVHlwZSA9PSBD
YWxsTGlua0luZm86OkNhbGwKICAgICAgICAgICAgICAgIHx8IGNhbGxMaW5rSW5mby0+Y2FsbFR5
cGUgPT0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJncyk7CiAgICAgICAgIGlmIChjYWxsTGlua0lu
Zm8tPmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q2FsbCkgewotICAgICAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGdsb2JhbERh
dGEtPmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgICAg
ICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRp
b24sIHZtLT5nZXRDVElTdHViKGxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBnbG9iYWxEYXRhLT5nZXRDVElT
dHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgICAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIo
dmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgZ2xvYmFsRGF0YS0+Z2V0
Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCkpOworICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJ
U3R1Yih2aXJ0dWFsQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCkpOwogfQogCiB2b2lkIEpJVDo6
bGlua1Nsb3dDYWxsKENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbykKIHsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29k
ZUJsb2NrKTsKIAotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJl
dHVybkxvY2F0aW9uLCBjYWxsZXJDb2RlQmxvY2stPmdsb2JhbERhdGEoKS0+Z2V0Q1RJU3R1Yih2
aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhj
YWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgY2FsbGVyQ29kZUJsb2NrLT52bSgpLT5n
ZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTQ4NjU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAy
LDgzICszMDIsODMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
cGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKIAogICAgIHB1YmxpYzoKLSAgICAgICAg
c3RhdGljIEpJVENvZGUgY29tcGlsZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIENvZGVQdHIqIGZ1bmN0
aW9uRW50cnlBcml0eUNoZWNrID0gMCkKKyAgICAgICAgc3RhdGljIEpJVENvZGUgY29tcGlsZShW
TSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQs
IENvZGVQdHIqIGZ1bmN0aW9uRW50cnlBcml0eUNoZWNrID0gMCkKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIEpJVChnbG9iYWxEYXRhLCBjb2RlQmxvY2spLnByaXZhdGVDb21waWxlKGZ1
bmN0aW9uRW50cnlBcml0eUNoZWNrLCBlZmZvcnQpOworICAgICAgICAgICAgcmV0dXJuIEpJVCh2
bSwgY29kZUJsb2NrKS5wcml2YXRlQ29tcGlsZShmdW5jdGlvbkVudHJ5QXJpdHlDaGVjaywgZWZm
b3J0KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUNs
b3N1cmVDYWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8sIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVC
bG9jaywgU3RydWN0dXJlKiBleHBlY3RlZFN0cnVjdHVyZSwgRXhlY3V0YWJsZUJhc2UqIGV4cGVj
dGVkRXhlY3V0YWJsZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIpCisgICAgICAgIHN0
YXRpYyB2b2lkIGNvbXBpbGVDbG9zdXJlQ2FsbChWTSogdm0sIENhbGxMaW5rSW5mbyogY2FsbExp
bmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jaywgQ29kZUJsb2NrKiBjYWxsZWVDb2Rl
QmxvY2ssIFN0cnVjdHVyZSogZXhwZWN0ZWRTdHJ1Y3R1cmUsIEV4ZWN1dGFibGVCYXNlKiBleHBl
Y3RlZEV4ZWN1dGFibGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyKQogICAgICAgICB7
Ci0gICAgICAgICAgICBKSVQgaml0KGdsb2JhbERhdGEsIGNhbGxlckNvZGVCbG9jayk7CisgICAg
ICAgICAgICBKSVQgaml0KHZtLCBjYWxsZXJDb2RlQmxvY2spOwogICAgICAgICAgICAgaml0Lm1f
Ynl0ZWNvZGVPZmZzZXQgPSBjYWxsTGlua0luZm8tPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsK
ICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKGNhbGxMaW5rSW5mbywg
Y2FsbGVlQ29kZUJsb2NrLCBleHBlY3RlZFN0cnVjdHVyZSwgZXhwZWN0ZWRFeGVjdXRhYmxlLCBj
b2RlUHRyKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeUlk
UHJvdG8oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBjYWNo
ZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKKyAgICAgICAgc3RhdGlj
IHZvaWQgY29tcGlsZUdldEJ5SWRQcm90byhWTSogdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IGNh
Y2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBKSVQgaml0KGdsb2JhbERhdGEsIGNvZGVCbG9jayk7CisgICAgICAgICAgICBK
SVQgaml0KHZtLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQg
PSBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGls
ZUdldEJ5SWRQcm90byhzdHViSW5mbywgc3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1cmUsIGlk
ZW50LCBzbG90LCBjYWNoZWRPZmZzZXQsIHJldHVybkFkZHJlc3MsIGNhbGxGcmFtZSk7CiAgICAg
ICAgIH0KIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlR2V0QnlJZFNlbGZMaXN0KEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhp
Y1N0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9m
ZnNldCBjYWNoZWRPZmZzZXQpCisgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeUlkU2Vs
Zkxpc3QoVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0
dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IGNh
Y2hlZE9mZnNldCkKICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdChnbG9iYWxEYXRhLCBj
b2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKICAgICAgICAg
ICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAg
ICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3Qoc3R1YkluZm8sIHBvbHlt
b3JwaGljU3RydWN0dXJlcywgY3VycmVudEluZGV4LCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCBj
YWNoZWRPZmZzZXQpOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRC
eUlkUHJvdG9MaXN0KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlTGlzdCwgaW50
IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBl
U3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQpCisgICAgICAgIHN0YXRpYyB2b2lkIGNv
bXBpbGVHZXRCeUlkUHJvdG9MaXN0KFZNKiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlTGlzdCwgaW50IGN1cnJlbnRJ
bmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJl
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9w
ZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQo
Z2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9j
ayk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IHN0dWJJbmZvLT5ieXRlY29k
ZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdChz
dHViSW5mbywgcHJvdG90eXBlU3RydWN0dXJlTGlzdCwgY3VycmVudEluZGV4LCBzdHJ1Y3R1cmUs
IHByb3RvdHlwZVN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIGNhY2hlZE9mZnNldCwgY2FsbEZyYW1l
KTsKICAgICAgICAgfQotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlR2V0QnlJZENoYWluTGlz
dChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIGludCBjdXJyZW50SW5k
ZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBj
b3VudCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwg
UHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0KQorICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxl
R2V0QnlJZENoYWluTGlzdChWTSogdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vz
c1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIGludCBjdXJyZW50SW5kZXgs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3Vu
dCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJv
cGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0KQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0
KGdsb2JhbERhdGEsIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxv
Y2spOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3Qo
c3R1YkluZm8sIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIGN1cnJlbnRJbmRleCwgc3RydWN0dXJl
LCBjaGFpbiwgY291bnQsIGlkZW50LCBzbG90LCBjYWNoZWRPZmZzZXQsIGNhbGxGcmFtZSk7CiAg
ICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlR2V0QnlJZENoYWluKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zm
c2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCisgICAgICAgIHN0YXRpYyB2b2lk
IGNvbXBpbGVHZXRCeUlkQ2hhaW4oVk0qIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBj
YWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKICAgICAgICAgewot
ICAgICAgICAgICAgSklUIGppdChnbG9iYWxEYXRhLCBjb2RlQmxvY2spOworICAgICAgICAgICAg
SklUIGppdCh2bSwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0
ID0gc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBp
bGVHZXRCeUlkQ2hhaW4oc3R1YkluZm8sIHN0cnVjdHVyZSwgY2hhaW4sIGNvdW50LCBpZGVudCwg
c2xvdCwgY2FjaGVkT2Zmc2V0LCByZXR1cm5BZGRyZXNzLCBjYWxsRnJhbWUpOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlJZFRyYW5zaXRpb24o
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgU3RydWN0dXJlQ2hhaW4q
IGNoYWluLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIGJvb2wgZGlyZWN0KQorICAg
ICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlJZFRyYW5zaXRpb24oVk0qIHZtLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IGNhY2hl
ZE9mZnNldCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MsIGJvb2wgZGlyZWN0KQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KGdsb2Jh
bERhdGEsIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwog
ICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKHN0dWJJ
bmZvLCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY2FjaGVkT2Zmc2V0LCBjaGFpbiwgcmV0
dXJuQWRkcmVzcywgZGlyZWN0KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGlj
IHZvaWQgY29tcGlsZUdldEJ5VmFsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCisgICAgICAgIHN0YXRpYyB2b2lkIGNv
bXBpbGVHZXRCeVZhbChWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5
VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJy
YXlNb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KGdsb2JhbERhdGEsIGNvZGVC
bG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwogICAgICAgICAgICAg
aml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAg
ICAgICBqaXQucHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChieVZhbEluZm8sIHJldHVybkFkZHJlc3Ms
IGFycmF5TW9kZSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0
QnlWYWwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlW
YWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJy
YXlNb2RlIGFycmF5TW9kZSkKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsKFZN
KiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAg
ICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9m
ZnNldCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRl
Q29tcGlsZVB1dEJ5VmFsKGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAg
ICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBDb2RlUmVmIGNvbXBpbGVDVElOYXRpdmVDYWxsKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuYykKKyAgICAgICAgc3Rh
dGljIENvZGVSZWYgY29tcGlsZUNUSU5hdGl2ZUNhbGwoVk0qIHZtLCBOYXRpdmVGdW5jdGlvbiBm
dW5jKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWdsb2JhbERhdGEtPmNhblVzZUpJVCgp
KSB7CisgICAgICAgICAgICBpZiAoIXZtLT5jYW5Vc2VKSVQoKSkgewogI2lmIEVOQUJMRShMTElO
VCkKICAgICAgICAgICAgICAgICByZXR1cm4gQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxs
aW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmUpOwogI2Vsc2UKICAgICAgICAgICAgICAgICByZXR1
cm4gQ29kZVJlZigpOwogI2VuZGlmCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBKSVQgaml0
KGdsb2JhbERhdGEsIDApOwotICAgICAgICAgICAgcmV0dXJuIGppdC5wcml2YXRlQ29tcGlsZUNU
SU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuYyk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCAw
KTsKKyAgICAgICAgICAgIHJldHVybiBqaXQucHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKHZt
LCBmdW5jKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lkIHJlc2V0UGF0Y2hHZXRC
eUlkKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyopOwpAQCAtMzg2LDkgKzM4Niw5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgdm9pZCBwYXRjaEdldEJ5SWRTZWxm
KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZz
ZXQgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyKTsKICAgICAgICAgc3RhdGljIHZvaWQg
cGF0Y2hQdXRCeUlkUmVwbGFjZShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVj
dHVyZSosIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciwgYm9v
bCBkaXJlY3QpOwogCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQYXRjaEdldEFycmF5TGVu
Z3RoKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVBh
dGNoR2V0QXJyYXlMZW5ndGgoVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KGds
b2JhbERhdGEsIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2sp
OwogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICAgICAgLy8gRm9yY2UgcHJvZmlsaW5nIHRv
IGJlIGVuYWJsZWQgZHVyaW5nIHN0dWIgZ2VuZXJhdGlvbi4KICAgICAgICAgICAgIGppdC5tX2Nh
bkJlT3B0aW1pemVkID0gdHJ1ZTsKQEAgLTM5OCwxMSArMzk4LDExIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgcmV0dXJuIGppdC5wcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5n
dGgocmV0dXJuQWRkcmVzcyk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdm9pZCBsaW5r
Rm9yKEpTRnVuY3Rpb24qIGNhbGxlZSwgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2ssIENvZGVC
bG9jayogY2FsbGVlQ29kZUJsb2NrLCBDb2RlUHRyLCBDYWxsTGlua0luZm8qLCBKU0dsb2JhbERh
dGEqLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICAgICAgc3RhdGljIHZvaWQgbGlua0Zv
cihKU0Z1bmN0aW9uKiBjYWxsZWUsIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDb2RlQmxv
Y2sqIGNhbGxlZUNvZGVCbG9jaywgQ29kZVB0ciwgQ2FsbExpbmtJbmZvKiwgVk0qLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kKTsKICAgICAgICAgc3RhdGljIHZvaWQgbGlua1Nsb3dDYWxsKENvZGVC
bG9jayogY2FsbGVyQ29kZUJsb2NrLCBDYWxsTGlua0luZm8qKTsKIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIEpJVChKU0dsb2JhbERhdGEqLCBDb2RlQmxvY2sqID0gMCk7CisgICAgICAgIEpJVChW
TSosIENvZGVCbG9jayogPSAwKTsKIAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTWFpblBh
c3MoKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCk7CkBAIC00MjEsOCAr
NDIxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRC
eVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwogICAgICAg
ICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0
ciwgSklUQXJyYXlNb2RlKTsKIAotICAgICAgICBMYWJlbCBwcml2YXRlQ29tcGlsZUNUSU5hdGl2
ZUNhbGwoSlNHbG9iYWxEYXRhKiwgYm9vbCBpc0NvbnN0cnVjdCA9IGZhbHNlKTsKLSAgICAgICAg
Q29kZVJlZiBwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiwgTmF0aXZl
RnVuY3Rpb24pOworICAgICAgICBMYWJlbCBwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoVk0q
LCBib29sIGlzQ29uc3RydWN0ID0gZmFsc2UpOworICAgICAgICBDb2RlUmVmIHByaXZhdGVDb21w
aWxlQ1RJTmF0aXZlQ2FsbChWTSosIE5hdGl2ZUZ1bmN0aW9uKTsKICAgICAgICAgdm9pZCBwcml2
YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBpc0RpcmVjdFB1dEJ5SWQoU3RydWN0dXJlU3R1
YkluZm8qKTsKQEAgLTg5Niw3ICs4OTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAg
ICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwotICAgICAgICBKU0dsb2JhbERhdGEq
IG1fZ2xvYmFsRGF0YTsKKyAgICAgICAgVk0qIG1fdm07CiAgICAgICAgIENvZGVCbG9jayogbV9j
b2RlQmxvY2s7CiAKICAgICAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CkBAIC05MzUs
NyArOTM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE93blB0cjxKSVREaXNhc3NlbWJs
ZXI+IG1fZGlzYXNzZW1ibGVyOwogICAgICAgICBSZWZQdHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9u
PiBtX2NvbXBpbGF0aW9uOwogICAgICAgICBXZWFrUmFuZG9tIG1fcmFuZG9tR2VuZXJhdG9yOwot
ICAgICAgICBzdGF0aWMgQ29kZVJlZiBzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IoSlNHbG9i
YWxEYXRhKik7CisgICAgICAgIHN0YXRpYyBDb2RlUmVmIHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVy
YXRvcihWTSopOwogCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICBib29sIG1f
Y2FuQmVPcHRpbWl6ZWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
MzJfNjQuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lk
IEpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKEluc3RydWN0aW9uCiAgICAgICAgIGFkZFB0cihjYWxs
RnJhbWVSZWdpc3RlciwgcmVnVDMpOwogICAgICAgICAvLyByZWdUMzogbmV3Q2FsbEZyYW1lCiAK
LSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFB0cihCZWxvdywgQWJzb2x1dGVBZGRyZXNz
KG1fZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPnN0YWNrKCkuYWRkcmVzc09mRW5kKCkpLCByZWdU
MykpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoUHRyKEJlbG93LCBBYnNvbHV0ZUFk
ZHJlc3MobV92bS0+aW50ZXJwcmV0ZXItPnN0YWNrKCkuYWRkcmVzc09mRW5kKCkpLCByZWdUMykp
OwogCiAgICAgICAgIC8vIEluaXRpYWxpemUgQXJndW1lbnRDb3VudC4KICAgICAgICAgc3RvcmUz
MihyZWdUMiwgcGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50LCByZWdUMykpOwpAQCAt
MjE1LDcgKzIxNSw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShWZWN0b3IK
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAKICAgICBlbWl0TG9hZChKU1N0YWNrOjpDYWxsZWUs
IHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmdldENUSVN0
dWIodmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgZW1pdE5ha2VkQ2FsbChtX3Zt
LT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgc2FtcGxl
Q29kZUJsb2NrKG1fY29kZUJsb2NrKTsKIH0KQEAgLTMwMCw3ICszMDAsNyBAQCB2b2lkIEpJVDo6
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlECiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwog
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICAKLSAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29t
cGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0
TmFrZWRDYWxsKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJ
U3R1YihsaW5rQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCkgOiBtX2dsb2JhbERhdGEtPmdldENU
SVN0dWIobGlua0NhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgbV9jYWxsU3RydWN0dXJlU3R1
YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0g
ZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBtX3ZtLT5nZXRDVElTdHVi
KGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IG1fdm0tPmdldENUSVN0dWIobGlua0Nh
bGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAKICAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2sp
OwogfQpAQCAtMzI0LDExICszMjQsMTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ2xvc3Vy
ZUNhbGwoQ2FsbAogICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QyKTsK
ICAgICBKdW1wIHNsb3cgPSBqdW1wKCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOwogICAgIAogICAgIHBhdGNoQnVmZmVy
LmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAg
ICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8tPmhvdFBhdGhPdGhlci5sYWJl
bEF0T2Zmc2V0KDApKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxh
YmVsKG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgp
KSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbChtX3ZtLT5n
ZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAKICAgICBSZWZQ
dHI8Q2xvc3VyZUNhbGxTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBhZG9wdFJlZihuZXcgQ2xv
c3VyZUNhbGxTdHViUm91dGluZSgKICAgICAgICAgRklOQUxJWkVfQ09ERSgKQEAgLTMzOCw3ICsz
MzgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2FsbChDYWxsCiAgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5ob3RQYXRoT3RoZXIubGFiZWxBdE9mZnNldCgwKS5leGVj
dXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJl
c3MoKSwKICAgICAgICAgICAgICAgICB0b0NTdHJpbmcocG9pbnRlckR1bXAoY2FsbGVlQ29kZUJs
b2NrKSkuZGF0YSgpKSksCi0gICAgICAgICptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgZXhwZWN0ZWRTdHJ1Y3R1cmUsIGV4cGVjdGVkRXhlY3V0YWJsZSwKKyAg
ICAgICAgKm1fdm0sIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhwZWN0ZWRTdHJ1
Y3R1cmUsIGV4cGVjdGVkRXhlY3V0YWJsZSwKICAgICAgICAgY2FsbExpbmtJbmZvLT5jb2RlT3Jp
Z2luKSk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2Nr
KTsKQEAgLTM0Niw3ICszNDYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2Fs
bChDYWxsCiAgICAgcmVwYXRjaEJ1ZmZlci5yZXBsYWNlV2l0aEp1bXAoCiAgICAgICAgIFJlcGF0
Y2hCdWZmZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGNhbGxMaW5rSW5m
by0+aG90UGF0aEJlZ2luKSwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUt
PmNvZGUoKS5jb2RlKCkpKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8t
PmNhbGxSZXR1cm5Mb2NhdGlvbiwgbV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKHZpcnR1YWxDYWxs
R2VuZXJhdG9yKS5jb2RlKCkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5m
by0+Y2FsbFJldHVybkxvY2F0aW9uLCBtX3ZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJh
dG9yKS5jb2RlKCkpOwogICAgIAogICAgIGNhbGxMaW5rSW5mby0+c3R1YiA9IHN0dWJSb3V0aW5l
LnJlbGVhc2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUxvYWRW
YXJhcmdzKEluc3RydWN0aW9uCiAgICAgICAgIGFkZFB0cihjYWxsRnJhbWVSZWdpc3RlciwgcmVn
VDEpOwogICAgICAgICAvLyByZWdUMTogbmV3Q2FsbEZyYW1lCiAKLSAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGJyYW5jaFB0cihCZWxvdywgQWJzb2x1dGVBZGRyZXNzKG1fZ2xvYmFsRGF0YS0+aW50
ZXJwcmV0ZXItPnN0YWNrKCkuYWRkcmVzc09mRW5kKCkpLCByZWdUMSkpOworICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoYnJhbmNoUHRyKEJlbG93LCBBYnNvbHV0ZUFkZHJlc3MobV92bS0+aW50ZXJw
cmV0ZXItPnN0YWNrKCkuYWRkcmVzc09mRW5kKCkpLCByZWdUMSkpOwogCiAgICAgICAgIC8vIElu
aXRpYWxpemUgQXJndW1lbnRDb3VudC4KICAgICAgICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhy
ZWdUMSwgSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnBheWxvYWQpKSk7CkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZh
bFNsb3dDYXNlKFZlY3RvcgogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAogICAgIGVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyNjQoSlNTdGFjazo6Q2FsbGVlLCByZWdUMCk7Ci0gICAgZW1pdE5h
a2VkQ2FsbChtX2dsb2JhbERhdGEtPmdldENUSVN0dWIodmlydHVhbENhbGxHZW5lcmF0b3IpLmNv
ZGUoKSk7CisgICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2Vu
ZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKIH0K
QEAgLTIyMCw3ICsyMjAsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29k
ZUlECiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgCi0gICAgbV9jYWxsU3RydWN0dXJl
U3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9u
ID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBtX2dsb2JhbERhdGEt
PmdldENUSVN0dWIobGlua0NvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpIDogbV9nbG9iYWxEYXRh
LT5nZXRDVElTdHViKGxpbmtDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIG1fY2FsbFN0cnVj
dHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2Nh
dGlvbiA9IGVtaXROYWtlZENhbGwob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gbV92bS0+Z2V0
Q1RJU3R1YihsaW5rQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCkgOiBtX3ZtLT5nZXRDVElTdHVi
KGxpbmtDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29k
ZUJsb2NrKTsKIH0KQEAgLTI0NCwxMSArMjQ0LDExIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUNsb3N1cmVDYWxsKENhbGwKICAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihy
ZWdUMik7CiAgICAgSnVtcCBzbG93ID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKICAgICAKICAgICBwYXRj
aEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLT5ob3RQYXRoT3Ro
ZXIubGFiZWxBdE9mZnNldCgwKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9j
YXRpb25MYWJlbChtX2dsb2JhbERhdGEtPmdldENUSVN0dWIodmlydHVhbENhbGxHZW5lcmF0b3Ip
LmNvZGUoKSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwo
bV92bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKSk7CiAgICAgCiAg
ICAgUmVmUHRyPENsb3N1cmVDYWxsU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0gYWRvcHRSZWYo
bmV3IENsb3N1cmVDYWxsU3R1YlJvdXRpbmUoCiAgICAgICAgIEZJTkFMSVpFX0NPREUoCkBAIC0y
NTgsNyArMjU4LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ2xvc3VyZUNhbGwoQ2FsbAog
ICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+aG90UGF0aE90aGVyLmxhYmVsQXRPZmZzZXQo
MCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICBjb2RlUHRyLmV4ZWN1dGFi
bGVBZGRyZXNzKCksCiAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKHBvaW50ZXJEdW1wKGNhbGxl
ZUNvZGVCbG9jaykpLmRhdGEoKSkpLAotICAgICAgICAqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIGV4cGVjdGVkU3RydWN0dXJlLCBleHBlY3RlZEV4ZWN1dGFi
bGUsCisgICAgICAgICptX3ZtLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4cGVj
dGVkU3RydWN0dXJlLCBleHBlY3RlZEV4ZWN1dGFibGUsCiAgICAgICAgIGNhbGxMaW5rSW5mby0+
Y29kZU9yaWdpbikpOwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2Nv
ZGVCbG9jayk7CkBAIC0yNjYsNyArMjY2LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ2xv
c3VyZUNhbGwoQ2FsbAogICAgIHJlcGF0Y2hCdWZmZXIucmVwbGFjZVdpdGhKdW1wKAogICAgICAg
ICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihjYWxs
TGlua0luZm8tPmhvdFBhdGhCZWdpbiksCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJS
b3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExp
bmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih2aXJ0
dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxs
TGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgbV92bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2Fs
bEdlbmVyYXRvcikuY29kZSgpKTsKICAgICAKICAgICBjYWxsTGlua0luZm8tPnN0dWIgPSBzdHVi
Um91dGluZS5yZWxlYXNlKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
aAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAj
aWYgRU5BQkxFKEpJVCkKLSAgICBjbGFzcyBKU0dsb2JhbERhdGE7CisgICAgY2xhc3MgVk07CiAg
ICAgY2xhc3MgSlNTdGFjazsKICNlbmRpZgogICAgIApAQCAtMTMwLDEwICsxMzAsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoSklUKQogICAgICAgICAvLyBFeGVjdXRlIHRoZSBj
b2RlIQotICAgICAgICBpbmxpbmUgSlNWYWx1ZSBleGVjdXRlKEpTU3RhY2sqIHN0YWNrLCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorICAgICAgICBpbmxp
bmUgSlNWYWx1ZSBleGVjdXRlKEpTU3RhY2sqIHN0YWNrLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
Vk0qIHZtKQogICAgICAgICB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWU6
OmRlY29kZShjdGlUcmFtcG9saW5lKG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBz
dGFjaywgY2FsbEZyYW1lLCAwLCAwLCBnbG9iYWxEYXRhKSk7Ci0gICAgICAgICAgICByZXR1cm4g
Z2xvYmFsRGF0YS0+ZXhjZXB0aW9uID8ganNOdWxsKCkgOiByZXN1bHQ7CisgICAgICAgICAgICBK
U1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWU6OmRlY29kZShjdGlUcmFtcG9saW5lKG1fcmVmLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpLCBzdGFjaywgY2FsbEZyYW1lLCAwLCAwLCB2bSkpOworICAg
ICAgICAgICAgcmV0dXJuIHZtLT5leGNlcHRpb24gPyBqc051bGwoKSA6IHJlc3VsdDsKICAgICAg
ICAgfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURHJpdmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREcml2ZXIuaAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREcml2ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTIgKzQwLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogdGVt
cGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KIGlubGluZSBib29sIGppdENvbXBpbGVJZkFw
cHJvcHJpYXRlKEV4ZWNTdGF0ZSogZXhlYywgT3duUHRyPENvZGVCbG9ja1R5cGU+JiBjb2RlQmxv
Y2ssIEpJVENvZGUmIGppdENvZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIAogICAgIGlmIChqaXRUeXBlID09IGNvZGVCbG9jay0+Z2V0SklUVHlw
ZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKLSAgICBpZiAoIWdsb2JhbERhdGEuY2Fu
VXNlSklUKCkpCisgICAgaWYgKCF2bS5jYW5Vc2VKSVQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgCiAgICAgY29kZUJsb2NrLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7CkBAIC02NCw3ICs2
NCw3IEBAIGlubGluZSBib29sIGppdENvbXBpbGVJZkFwcHJvcHJpYXRlKEV4ZWMKICAgICAgICAg
ICAgIGppdENvZGUgPSBvbGRKSVRDb2RlOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9Ci0gICAgICAgIGppdENvZGUgPSBKSVQ6OmNvbXBpbGUoJmdsb2JhbERhdGEsIGNvZGVC
bG9jay5nZXQoKSwgZWZmb3J0KTsKKyAgICAgICAgaml0Q29kZSA9IEpJVDo6Y29tcGlsZSgmdm0s
IGNvZGVCbG9jay5nZXQoKSwgZWZmb3J0KTsKICAgICAgICAgaWYgKCFqaXRDb2RlKSB7CiAgICAg
ICAgICAgICBqaXRDb2RlID0gb2xkSklUQ29kZTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTc3LDEyICs3NywxMiBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlSWZBcHByb3ByaWF0ZShF
eGVjCiAKIGlubGluZSBib29sIGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmlhdGUoRXhlY1N0
YXRlKiBleGVjLCBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+JiBjb2RlQmxvY2ssIEpJVENvZGUm
IGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBK
SVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBl
eGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAKICAgICBp
ZiAoaml0VHlwZSA9PSBjb2RlQmxvY2stPmdldEpJVFR5cGUoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgCi0gICAgaWYgKCFnbG9iYWxEYXRhLmNhblVzZUpJVCgpKQorICAgIGlmICghdm0u
Y2FuVXNlSklUKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIGNvZGVCbG9jay0+
dW5saW5rSW5jb21pbmdDYWxscygpOwpAQCAtMTAzLDcgKzEwMyw3IEBAIGlubGluZSBib29sIGpp
dENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmkKICAgICAgICAgICAgIGppdENvZGVXaXRoQXJpdHlD
aGVjayA9IG9sZEpJVENvZGVXaXRoQXJpdHlDaGVjazsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQotICAgICAgICBqaXRDb2RlID0gSklUOjpjb21waWxlKCZnbG9iYWxEYXRh
LCBjb2RlQmxvY2suZ2V0KCksIGVmZm9ydCwgJmppdENvZGVXaXRoQXJpdHlDaGVjayk7CisgICAg
ICAgIGppdENvZGUgPSBKSVQ6OmNvbXBpbGUoJnZtLCBjb2RlQmxvY2suZ2V0KCksIGVmZm9ydCwg
JmppdENvZGVXaXRoQXJpdHlDaGVjayk7CiAgICAgICAgIGlmICghaml0Q29kZSkgewogICAgICAg
ICAgICAgaml0Q29kZSA9IG9sZEpJVENvZGU7CiAgICAgICAgICAgICBqaXRDb2RlV2l0aEFyaXR5
Q2hlY2sgPSBvbGRKSVRDb2RlV2l0aEFyaXR5Q2hlY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDIwICszMCwyMCBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkludGVy
cHJldGVyLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0
YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogCiAjaWYgRU5B
QkxFKEpJVCkgfHwgRU5BQkxFKExMSU5UKQogCiBuYW1lc3BhY2UgSlNDIHsKIAotRXhjZXB0aW9u
SGFuZGxlciBnZW5lcmljVGhyb3coSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjU3RhdGUq
IGNhbGxGcmFtZSwgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgdW5zaWduZWQgdlBDSW5kZXgpCitF
eGNlcHRpb25IYW5kbGVyIGdlbmVyaWNUaHJvdyhWTSogdm0sIEV4ZWNTdGF0ZSogY2FsbEZyYW1l
LCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCB1bnNpZ25lZCB2UENJbmRleCkKIHsKICAgICBSRUxF
QVNFX0FTU0VSVChleGNlcHRpb25WYWx1ZSk7CiAgICAgCi0gICAgZ2xvYmFsRGF0YS0+ZXhjZXB0
aW9uID0gSlNWYWx1ZSgpOwotICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gZ2xvYmFsRGF0YS0+
aW50ZXJwcmV0ZXItPnRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIHZQ
Q0luZGV4KTsgLy8gVGhpcyBtYXkgdXBkYXRlIGNhbGxGcmFtZSAmIGV4Y2VwdGlvblZhbHVlIQot
ICAgIGdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGV4Y2VwdGlvblZhbHVlOworICAgIHZtLT5leGNl
cHRpb24gPSBKU1ZhbHVlKCk7CisgICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSB2bS0+aW50ZXJw
cmV0ZXItPnRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIHZQQ0luZGV4
KTsgLy8gVGhpcyBtYXkgdXBkYXRlIGNhbGxGcmFtZSAmIGV4Y2VwdGlvblZhbHVlIQorICAgIHZt
LT5leGNlcHRpb24gPSBleGNlcHRpb25WYWx1ZTsKIAogICAgIHZvaWQqIGNhdGNoUm91dGluZTsK
ICAgICBJbnN0cnVjdGlvbiogY2F0Y2hQQ0ZvckludGVycHJldGVyID0gMDsKQEAgLTUzLDE4ICs1
MywxOCBAQCBFeGNlcHRpb25IYW5kbGVyIGdlbmVyaWNUaHJvdyhKU0dsb2JhbERhCiAgICAgfSBl
bHNlCiAgICAgICAgIGNhdGNoUm91dGluZSA9IEZ1bmN0aW9uUHRyKExMSW50OjpnZXRDb2RlUHRy
KGN0aU9wVGhyb3dOb3RDYXVnaHQpKS52YWx1ZSgpOwogICAgIAotICAgIGdsb2JhbERhdGEtPmNh
bGxGcmFtZUZvclRocm93ID0gY2FsbEZyYW1lOwotICAgIGdsb2JhbERhdGEtPnRhcmdldE1hY2hp
bmVQQ0ZvclRocm93ID0gY2F0Y2hSb3V0aW5lOwotICAgIGdsb2JhbERhdGEtPnRhcmdldEludGVy
cHJldGVyUENGb3JUaHJvdyA9IGNhdGNoUENGb3JJbnRlcnByZXRlcjsKKyAgICB2bS0+Y2FsbEZy
YW1lRm9yVGhyb3cgPSBjYWxsRnJhbWU7CisgICAgdm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRocm93
ID0gY2F0Y2hSb3V0aW5lOworICAgIHZtLT50YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3cgPSBj
YXRjaFBDRm9ySW50ZXJwcmV0ZXI7CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQoY2F0Y2hSb3V0
aW5lKTsKICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIgPSB7IGNhdGNoUm91
dGluZSwgY2FsbEZyYW1lIH07CiAgICAgcmV0dXJuIGV4Y2VwdGlvbkhhbmRsZXI7CiB9CiAKLUV4
Y2VwdGlvbkhhbmRsZXIgaml0VGhyb3coSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjU3Rh
dGUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgUmV0dXJuQWRkcmVzc1B0ciBm
YXVsdExvY2F0aW9uKQorRXhjZXB0aW9uSGFuZGxlciBqaXRUaHJvdyhWTSogdm0sIEV4ZWNTdGF0
ZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBSZXR1cm5BZGRyZXNzUHRyIGZh
dWx0TG9jYXRpb24pCiB7Ci0gICAgcmV0dXJuIGdlbmVyaWNUaHJvdyhnbG9iYWxEYXRhLCBjYWxs
RnJhbWUsIGV4Y2VwdGlvblZhbHVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5ieXRlY29kZU9m
ZnNldChjYWxsRnJhbWUsIGZhdWx0TG9jYXRpb24pKTsKKyAgICByZXR1cm4gZ2VuZXJpY1Rocm93
KHZtLCBjYWxsRnJhbWUsIGV4Y2VwdGlvblZhbHVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5i
eXRlY29kZU9mZnNldChjYWxsRnJhbWUsIGZhdWx0TG9jYXRpb24pKTsKIH0KIAogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmgJKHJldmlzaW9uIDE0ODY1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRXhlY1N0
YXRlOwotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiAKIC8vIFRoaXMgaGVhZGVyIGdp
dmVzIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYWNjZXNzIHRvIHRoZSBKSVQncyBwcm90b3Rv
Y29sCiAvLyBmb3IgdGhlIHRocm93aW5nIGFuZCBoYW5kbGluZyBleGNlcHRpb25zLgpAQCAtNDQs
OSArNDQsOSBAQCBzdHJ1Y3QgRXhjZXB0aW9uSGFuZGxlciB7CiAgICAgRXhlY1N0YXRlKiBjYWxs
RnJhbWU7CiB9OwogCi1FeGNlcHRpb25IYW5kbGVyIGdlbmVyaWNUaHJvdyhKU0dsb2JhbERhdGEq
LCBFeGVjU3RhdGUqLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCB1bnNpZ25lZCB2UENJbmRleCk7
CitFeGNlcHRpb25IYW5kbGVyIGdlbmVyaWNUaHJvdyhWTSosIEV4ZWNTdGF0ZSosIEpTVmFsdWUg
ZXhjZXB0aW9uVmFsdWUsIHVuc2lnbmVkIHZQQ0luZGV4KTsKIAotRXhjZXB0aW9uSGFuZGxlciBq
aXRUaHJvdyhKU0dsb2JhbERhdGEqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVl
LCBSZXR1cm5BZGRyZXNzUHRyIGZhdWx0TG9jYXRpb24pOworRXhjZXB0aW9uSGFuZGxlciBqaXRU
aHJvdyhWTSosIEV4ZWNTdGF0ZSosIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUsIFJldHVybkFkZHJl
c3NQdHIgZmF1bHRMb2NhdGlvbik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4
LDcgKzc4LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldEZyb21DYWxsRgogCiBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0TG9hZENoYXJhY3RlclN0cmluZyhSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkc3QsIEp1bXBMaXN0JiBmYWlsdXJlcykKIHsKLSAgICBmYWlsdXJl
cy5hcHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNyYywgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKSk7CisgICAgZmFpbHVyZXMuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVz
cyhzcmMsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1fdm0tPnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICBmYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoTm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNyYywgVGh1bmtIZWxwZXJzOjpqc1N0cmlu
Z0xlbmd0aE9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKDEpKSk7CiAgICAgbG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzcmMsIFRodW5rSGVscGVyczo6anNTdHJpbmdWYWx1ZU9mZnNldCgp
KSwgZHN0KTsKICAgICBmYWlsdXJlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIGRzdCkpOwpA
QCAtMTg2LDcgKzE4Niw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnVwZGF0ZVRvcENhbGxG
cmEKICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobV9ieXRlY29kZU9mZnNldCArIDEpLCBp
bnRUYWdGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwogI2VuZGlmCiAgICAgfQotICAgIHN0
b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCAmbV9nbG9iYWxEYXRhLT50b3BDYWxsRnJhbWUpOwor
ICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCAmbV92bS0+dG9wQ2FsbEZyYW1lKTsKIH0K
IAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlRm9yVHJh
bXBvbGluZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEyICs0MSwxMiBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotSklUOjpDb2RlUmVmIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElO
YXRpdmVDYWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuYykK
K0pJVDo6Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChWTSogdm0sIE5h
dGl2ZUZ1bmN0aW9uIGZ1bmMpCiB7CiAgICAgQ2FsbCBuYXRpdmVDYWxsOwogCiAgICAgZW1pdFB1
dEltbWVkaWF0ZVRvQ2FsbEZyYW1lSGVhZGVyKDAsIEpTU3RhY2s6OkNvZGVCbG9jayk7Ci0gICAg
c3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsICZtX2dsb2JhbERhdGEtPnRvcENhbGxGcmFtZSk7
CisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsICZtX3ZtLT50b3BDYWxsRnJhbWUpOwog
CiAjaWYgQ1BVKFg4NikKICAgICAvLyBMb2FkIGNhbGxlciBmcmFtZSdzIHNjb3BlIGNoYWluIGlu
dG8gdGhpcyBjYWxsZnJhbWUgc28gdGhhdCB3aGF0ZXZlciB3ZSBjYWxsIGNhbgpAQCAtMTU0LDcg
KzE1NCw3IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXYKICNlbmRp
ZiAvLyBDUFUoWDg2KQogCiAgICAgLy8gQ2hlY2sgZm9yIGFuIGV4Y2VwdGlvbgotICAgIEp1bXAg
c2F3RXhjZXB0aW9uID0gYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhyZWludGVy
cHJldF9jYXN0PGNoYXIqPigmZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKSArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFs
dWVUYWcpKTsKKyAgICBKdW1wIHNhd0V4Y2VwdGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNv
bHV0ZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJnZtLT5leGNlcHRpb24pICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6RW1wdHlWYWx1ZVRhZykpOwogCiAgICAgLy8gUmV0dXJuLgogICAgIHJldCgpOwpAQCAtMTY1
LDExICsxNjUsMTEgQEAgSklUOjpDb2RlUmVmIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdgog
ICAgIC8vIEdyYWIgdGhlIHJldHVybiBhZGRyZXNzLgogICAgIHByZXNlcnZlUmV0dXJuQWRkcmVz
c0FmdGVyQ2FsbChyZWdUMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoJmdsb2JhbERhdGEt
PmV4Y2VwdGlvbkxvY2F0aW9uKSwgcmVnVDIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cigmdm0t
PmV4Y2VwdGlvbkxvY2F0aW9uKSwgcmVnVDIpOwogICAgIHN0b3JlUHRyKHJlZ1QxLCByZWdUMik7
CiAgICAgcG9rZShjYWxsRnJhbWVSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRT
dGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQqKSk7CiAgICAgCi0gICAgc3RvcmVQ
dHIoY2FsbEZyYW1lUmVnaXN0ZXIsICZtX2dsb2JhbERhdGEtPnRvcENhbGxGcmFtZSk7CisgICAg
c3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsICZtX3ZtLT50b3BDYWxsRnJhbWUpOwogICAgIC8v
IFNldCB0aGUgcmV0dXJuIGFkZHJlc3MuCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKEZ1bmN0aW9u
UHRyKGN0aVZNVGhyb3dUcmFtcG9saW5lKS52YWx1ZSgpKSwgcmVnVDEpOwogICAgIHJlc3RvcmVS
ZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QxKTsKQEAgLTE3Nyw3ICsxNzcsNyBAQCBKSVQ6
OkNvZGVSZWYgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2CiAgICAgcmV0KCk7CiAKICAgICAv
LyBBbGwgdHJhbXBvbGluZXMgY29uc3RydWN0ZWQhIGNvcHkgdGhlIGNvZGUsIGxpbmsgdXAgY2Fs
bHMsIGFuZCBzZXQgdGhlIHBvaW50ZXJzIG9uIHRoZSBNYWNoaW5lIG9iamVjdC4KLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIEdMT0JBTF9USFVOS19JRCk7
CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgR0xPQkFMX1RIVU5LX0lE
KTsKIAogICAgIHBhdGNoQnVmZmVyLmxpbmsobmF0aXZlQ2FsbCwgRnVuY3Rpb25QdHIoZnVuYykp
OwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkpJVCBDVEkgbmF0aXZl
IGNhbGwiKSk7CkBAIC0yMTUsNyArMjE1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVj
dChJbnN0cnVjdGlvbgogewogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub2JqZWN0QWxsb2NhdGlvblByb2ZpbGUtPnN0cnVjdHVyZSgpOwogICAgIHNp
emVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUt
PmlubGluZUNhcGFjaXR5KCkpOwotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJm1f
Z2xvYmFsRGF0YS0+aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihhbGxv
Y2F0aW9uU2l6ZSk7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmbV92bS0+aGVh
cC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihhbGxvY2F0aW9uU2l6ZSk7CiAK
ICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgYWxsb2Nh
dG9yUmVnID0gcmVnVDE7CkBAIC00MTksNyArNDE5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
cHJpbWl0aXZlKEluc3RydWN0aQogICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKIAog
ICAgIEp1bXAgaXNJbW0gPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0ciht
X2dsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICBhZGRTbG93Q2FzZShi
cmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tUHRyKG1fdm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICBp
c0ltbS5saW5rKHRoaXMpOwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCkBAIC02NDMsOCArNjQzLDgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKEluc3RydWN0aW9uKiBjdQogICAgIGdlbmVyaWND
YXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIHRhZ3Mgbm90IGVxdWFsCiAKICAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7IC8vIHRhZ3MgZXF1YWwgYW5kIEpTQ2VsbAotICAgIGdlbmVyaWND
YXNlLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSkpOwotICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRy
KG1fZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgIGdlbmVyaWNDYXNl
LmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1fdm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkp
KTsKKyAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJl
Z1QyLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihtX3ZtLT5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAKICAgICAvLyBTdHJpbmcgY2FzZS4KICAgICBKSVRTdHVi
Q2FsbCBzdHViQ2FsbEVxU3RyaW5ncyh0aGlzLCBjdGlfb3BfZXFfc3RyaW5ncyk7CkBAIC02OTEs
OCArNjkxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShJbnN0cnVjdGlvbiogYwogICAg
IGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIHRhZ3Mgbm90IGVxdWFs
CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHRhZ3MgZXF1YWwgYW5kIEpTQ2VsbAotICAg
IGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+c3Ry
aW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hQdHIo
Tm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgIGdl
bmVyaWNDYXNlLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1fdm0tPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkpKTsKKyAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCBB
ZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0ciht
X3ZtLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAKICAgICAvLyBTdHJpbmcgY2FzZS4KICAg
ICBKSVRTdHViQ2FsbCBzdHViQ2FsbEVxU3RyaW5ncyh0aGlzLCBjdGlfb3BfZXFfc3RyaW5ncyk7
CkBAIC03MjgsOCArNzI4LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKEluc3RydWN0
aW9uKgogCiAgICAgLy8gSnVtcCB0byBhIHNsb3cgY2FzZSBpZiBib3RoIGFyZSBzdHJpbmdzLgog
ICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpKTsKLSAgICBKdW1wIGZpcnN0Tm90U3RyaW5nID0gYnJhbmNoUHRy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1
c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKSk7CisgICAgSnVtcCBmaXJzdE5vdFN0cmluZyA9IGJyYW5jaFB0cihOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIo
bV92bS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRy
KEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3Rl
ZEltbVB0cihtX3ZtLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgbm90Q2VsbC5saW5r
KHRoaXMpOwogICAgIGZpcnN0Tm90U3RyaW5nLmxpbmsodGhpcyk7CiAKQEAgLTEwMjEsMTEgKzEw
MjEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cgogICAgIG1v
dmUocmVnVDAsIGNhbGxGcmFtZVJlZ2lzdGVyKTsKIAogICAgIC8vIE5vdyBzdG9yZSB0aGUgZXhj
ZXB0aW9uIHJldHVybmVkIGJ5IGN0aV9vcF90aHJvdy4KLSAgICBsb2FkUHRyKEFkZHJlc3Moc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwg
Z2xvYmFsRGF0YSkpLCByZWdUMyk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9P
RkZTRVRPRihKU0dsb2JhbERhdGEsIGV4Y2VwdGlvbikgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDMs
IE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbERhdGEsIGV4Y2VwdGlvbikgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlKCkucGF5bG9hZCgpKSwgQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9G
KEpTR2xvYmFsRGF0YSwgZXhjZXB0aW9uKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy5wYXlsb2FkKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWUoKS50YWco
KSksIEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbERhdGEsIGV4Y2VwdGlv
bikgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBK
SVRTdGFja0ZyYW1lLCB2bSkpLCByZWdUMyk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIE9C
SkVDVF9PRkZTRVRPRihWTSwgZXhjZXB0aW9uKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgT0JK
RUNUX09GRlNFVE9GKFZNLCBleGNlcHRpb24pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnRhZykpLCByZWdUMSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZSgp
LnBheWxvYWQoKSksIEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihWTSwgZXhjZXB0aW9u
KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOworICAgIHN0
b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWUoKS50YWcoKSksIEFkZHJlc3MocmVnVDMsIE9CSkVD
VF9PRkZTRVRPRihWTSwgZXhjZXB0aW9uKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy50YWcpKSk7CiAKICAgICB1bnNpZ25lZCBleGNlcHRpb24gPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOwogICAgIGVtaXRTdG9yZShleGNlcHRpb24sIHJlZ1QxLCByZWdUMCk7
CkBAIC0xMjAwLDcgKzEyMDAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jb252ZXJ0X3RoaXMoSW5z
dHJ1Y3RpCiAgICAgICAgIG1vdmUocmVnVDMsIHJlZ1QxKTsKICAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZSgpOwogICAgIH0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoRXF1YWwsIEFk
ZHJlc3MocmVnVDIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1f
Z2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IFRydXN0ZWRJbW1QdHIobV92bS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY29udmVydF90aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xMjIzLDcg
KzEyMjMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29udmVydF90aGlzKEluc3RyCiAgICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QxKTsKLSAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgp
KSwgcmVnVDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSwgcmVnVDApOwogICAgIH0KICAgICBpc05vdFVuZGVmaW5lZC5saW5rKHRoaXMp
OwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMs
OSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAKLUpJVDo6Q29kZVJl
ZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIE5hdGl2ZUZ1bmN0aW9uKQorSklUOjpDb2RlUmVmIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElO
YXRpdmVDYWxsKFZNKiB2bSwgTmF0aXZlRnVuY3Rpb24pCiB7Ci0gICAgcmV0dXJuIGdsb2JhbERh
dGEtPmdldENUSVN0dWIobmF0aXZlQ2FsbEdlbmVyYXRvcik7CisgICAgcmV0dXJuIHZtLT5nZXRD
VElTdHViKG5hdGl2ZUNhbGxHZW5lcmF0b3IpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tb3Yo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfbmV3X29iamVjdChJbnN0cnVjdGlvbgogewogICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub2JqZWN0QWxsb2NhdGlvblByb2ZpbGUt
PnN0cnVjdHVyZSgpOwogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTT2JqZWN0OjphbGxv
Y2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIE1hcmtlZEFsbG9j
YXRvciogYWxsb2NhdG9yID0gJm1fZ2xvYmFsRGF0YS0+aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RX
aXRob3V0RGVzdHJ1Y3RvcihhbGxvY2F0aW9uU2l6ZSk7CisgICAgTWFya2VkQWxsb2NhdG9yKiBh
bGxvY2F0b3IgPSAmbV92bS0+aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3Rv
cihhbGxvY2F0aW9uU2l6ZSk7CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwog
ICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CkBAIC0zNTAsNyArMzUwLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKEluc3RydWN0aQogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAgICAgCiAgICAgSnVtcCBpc0ltbSA9IGVtaXRKdW1w
SWZOb3RKU0NlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIo
bV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgVHJ1c3RlZEltbVB0cihtX3ZtLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAg
aXNJbW0ubGluayh0aGlzKTsKIAogICAgIGlmIChkc3QgIT0gc3JjKQpAQCAtNzEzLDkgKzcxMyw5
IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXIKIHsKICAgICBraWxs
TGFzdFJlc3VsdFJlZ2lzdGVyKCk7IC8vIEZJWE1FOiBJbXBsaWNpdGx5IHRyZWF0IG9wX2NhdGNo
IGFzIGEgbGFiZWxlZCBzdGF0ZW1lbnQsIGFuZCByZW1vdmUgdGhpcyBsaW5lIG9mIGNvZGUuCiAg
ICAgbW92ZShyZWdUMCwgY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIHBlZWsocmVnVDMsIE9CSkVD
VF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgZ2xvYmFsRGF0YSkgLyBzaXplb2Yodm9p
ZCopKTsKLSAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFs
RGF0YSwgZXhjZXB0aW9uKSksIHJlZ1QwKTsKLSAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihK
U0dsb2JhbERhdGEsIGV4Y2VwdGlvbikpKTsKKyAgICBwZWVrKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VU
T0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHZtKSAvIHNpemVvZih2b2lkKikpOworICAgIGxvYWQ2
NChBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoVk0sIGV4Y2VwdGlvbikpLCByZWdUMCk7
CisgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBB
ZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoVk0sIGV4Y2VwdGlvbikpKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogfQog
CkBAIC05MTAsNyArOTEwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY29udmVydF90aGlzKEluc3Ry
dWN0aQogICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCByZWdUMCk7CiAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICAgICB9
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoRXF1YWwsIEFkZHJl
c3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1fdm0t
PnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Nh
bGxlZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTgxLDcgKzk4MSw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9jb252ZXJ0X3RoaXMoSW5zdHIKIAogICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUobV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKSwgcmVnVDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUobV92bS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSksIHJlZ1QwKTsKICAgICBpc05vdFVu
ZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICAgICBK
SVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfY29udmVydF90aGlzKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsMTEgKzkyLDExIEBA
IHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChJbnN0cnVjdGlvbioKICAgICBzdHViQ2FsbC5j
YWxsKGRzdCk7CiB9CiAKLUpJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVy
YXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitKSVQ6OkNvZGVSZWYgSklUOjpzdHJpbmdH
ZXRCeVZhbFN0dWJHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIEpTSW50ZXJmYWNlSklUIGppdDsK
ICAgICBKdW1wTGlzdCBmYWlsdXJlczsKLSAgICBmYWlsdXJlcy5hcHBlbmQoaml0LmJyYW5jaFB0
cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRy
dXN0ZWRJbW1QdHIoZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgIGZh
aWx1cmVzLmFwcGVuZChqaXQuYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cih2bS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSkpOwogICAgIAogICAgIC8vIExvYWQgc3RyaW5nIGxlbmd0aCB0byByZWdUMSwgYW5k
IHN0YXJ0IHRoZSBwcm9jZXNzIG9mIGxvYWRpbmcgdGhlIGRhdGEgcG9pbnRlciBpbnRvIHJlZ1Qw
CiAgICAgaml0LmxvYWQzMihBZGRyZXNzKHJlZ1QwLCBUaHVua0hlbHBlcnM6OmpzU3RyaW5nTGVu
Z3RoT2Zmc2V0KCkpLCByZWdUMSk7CkBAIC0xMjEsNyArMTIxLDcgQEAgSklUOjpDb2RlUmVmIEpJ
VDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZQogICAgIGNvbnQ4Qml0LmxpbmsoJmppdCk7CiAgICAg
CiAgICAgZmFpbHVyZXMuYXBwZW5kKGppdC5icmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoMHgxMDApKSk7Ci0gICAgaml0Lm1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxE
YXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKSwgcmVnVDEpOworICAg
IGppdC5tb3ZlKFRydXN0ZWRJbW1QdHIodm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJT
dHJpbmdzKCkpLCByZWdUMSk7CiAgICAgaml0LmxvYWRQdHIoQmFzZUluZGV4KHJlZ1QxLCByZWdU
MCwgU2NhbGVQdHIsIDApLCByZWdUMCk7CiAgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpLCByZWdUMSk7IC8vIFdlIG51bGwgY2hlY2sgcmVnVDAgb24gcmV0dXJuIHNv
IHRoaXMgaXMgc2FmZQogICAgIGppdC5yZXQoKTsKQEAgLTEzMCw3ICsxMzAsNyBAQCBKSVQ6OkNv
ZGVSZWYgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lCiAgICAgaml0Lm1vdmUoVHJ1c3RlZElt
bTMyKDApLCByZWdUMCk7CiAgICAgaml0LnJldCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiU3RyaW5nIGdldF9ieV92YWwgc3R1YiIpKTsK
IH0KIApAQCAtMjQ5LDggKzI0OSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFs
KEluc3RydWMKIAogICAgIEp1bXAgbm9uQ2VsbCA9IGp1bXAoKTsKICAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7IC8vIGJhc2UgYXJyYXkgY2hlY2sKLSAgICBKdW1wIG5vdFN0cmluZyA9IGJyYW5jaFB0
cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRy
dXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKLSAgICBl
bWl0TmFrZWRDYWxsKG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0dWJH
ZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgSnVtcCBub3RTdHJpbmcgPSBicmFuY2hQdHIoTm90RXF1
YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
UHRyKG1fdm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOworICAgIGVtaXROYWtlZENhbGwobV92
bS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAg
SnVtcCBmYWlsZWQgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKTsKICAgICBlbWl0U3RvcmUo
ZHN0LCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RF
X0xFTkdUSChvcF9nZXRfYnlfdmFsKSk7CkBAIC00NzcsNyArNDc3LDcgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVHZXRCeUlkSG90UGF0aChJZGVudGlmaQogICAgIC8vIHRvIGFycmF5LWxlbmd0aCAvIHBy
b3RvdHlwZSBhY2Nlc3MgdHJhbnBvbGluZXMsIGFuZCBmaW5hbGx5IHdlIGFsc28gdGhlIHRoZSBw
cm9wZXJ0eS1tYXAgYWNjZXNzIG9mZnNldCBhcyBhIGxhYmVsCiAgICAgLy8gdG8ganVtcCBiYWNr
IHRvIGlmIG9uZSBvZiB0aGVzZSB0cmFtcG9saWVzIGZpbmRzIGEgbWF0Y2guCiAgICAgCi0gICAg
aWYgKCppZGVudCA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91
bGRFbWl0UHJvZmlsaW5nKCkpIHsKKyAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDIpOwogICAgICAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlRm9yQnl0ZWNvZGVJbmRleChyZWdUMiwgcmVnVDMsIG1f
Ynl0ZWNvZGVPZmZzZXQpOwogICAgIH0KQEAgLTcwNCw3ICs3MDQsNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvCiAgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNl
Rm9yVHJhbXBvbGluZSgpOwogICAgIENhbGwgZmFpbHVyZUNhbGwgPSB0YWlsUmVjdXJzaXZlQ2Fs
bCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhp
cywgbV9jb2RlQmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMs
IG1fY29kZUJsb2NrKTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYWxsLCBG
dW5jdGlvblB0cihkaXJlY3QgPyBjdGlfb3BfcHV0X2J5X2lkX2RpcmVjdF9mYWlsIDogY3RpX29w
X3B1dF9ieV9pZF9mYWlsKSk7CiAgICAgCkBAIC03MTgsNyArNzE4LDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpbwogICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCiAg
ICAgICAgICAgICAoIkJhc2VsaW5lIHB1dF9ieV9pZCB0cmFuc2l0aW9uIHN0dWIgZm9yICVzLCBy
ZXR1cm4gcG9pbnQgJXAiLAogICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqbV9jb2RlQmxvY2sp
LmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKSksCi0gICAgICAgICptX2dsb2JhbERhdGEs
CisgICAgICAgICptX3ZtLAogICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
CiAgICAgICAgIHdpbGxOZWVkU3RvcmFnZVJlYWxsb2MsCiAgICAgICAgIG5ld1N0cnVjdHVyZSk7
CkBAIC03NzYsNyArNzc2LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJh
eUxlbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOwog
ICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7CiAgICAgCiAgICAgLy8gVXNlIHRo
ZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhl
IG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgogICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dD
YXNlQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXN0
dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5jb2xkUGF0aEJlZ2luKTsKQEAgLTgzOSw3ICs4
MzksNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3RyCiAgICAgCiAg
ICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKICAgICAKICAgICAvLyBVc2UgdGhl
IHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUg
b3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nh
c2VCZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtc3R1
YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmNvbGRQYXRoQmVnaW4pOwpAQCAtODY0LDcgKzg2
NCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIKICAgICAgICAg
ICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIHByb3RvIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQg
JXAiLAogICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgc3R1
YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAogICAgICAgICAgICAgICAgICAgICBz
dHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVz
cygpKSksCi0gICAgICAgICptX2dsb2JhbERhdGEsCisgICAgICAgICptX3ZtLAogICAgICAgICBt
X2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgIG5lZWRzU3R1YkxpbmspOwog
ICAgIApAQCAtOTA3LDcgKzkwNyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRT
ZWxmTGlzdCgKIAogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7CiAgICAgaWYg
KG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJh
dG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVy
KSB7CiAgICAgICAgICAgICBpZiAoaXRlci0+dG8pCkBAIC05MzAsMTEgKzkzMCwxMSBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAgICAgICAgICAgICAoIkJhc2Vs
aW5lIGdldF9ieV9pZCBzZWxmIGxpc3Qgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCiAg
ICAgICAgICAgICAgICAgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCBzdHViSW5mby0+
aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCiAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZv
LT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwK
LSAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAgICAgKm1fdm0sCiAgICAgICAgIG1fY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgbmVlZHNTdHViTGluayk7CiAKLSAgICBw
b2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0
YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJl
LCBpc0RpcmVjdCk7CisgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRl
eF0uc2V0KCptX3ZtLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5l
LCBzdHJ1Y3R1cmUsIGlzRGlyZWN0KTsKICAgICAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBq
dW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVh
ZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRo
QmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1
cmVDaGVjayk7CkBAIC05ODEsNyArOTgxLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0
QnlJZFByb3RvTGlzdAogICAgIAogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2Nr
KTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7
CiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29y
ZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQo
KTsgKytpdGVyKSB7CiAgICAgICAgICAgICBpZiAoaXRlci0+dG8pCkBAIC0xMDAzLDExICsxMDAz
LDExIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QKICAgICAgICAg
ICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIHByb3RvIGxpc3Qgc3R1YiBmb3IgJXMsIHJldHVybiBw
b2ludCAlcCIsCiAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgp
LCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCiAgICAgICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKSwKLSAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAgICAgKm1fdm0sCiAgICAg
ICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgbmVlZHNTdHViTGlu
ayk7CiAKLSAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNh
bGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0
dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSwgaXNEaXJlY3QpOworICAg
IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT52
bSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1
cmUsIHByb3RvdHlwZVN0cnVjdHVyZSwgaXNEaXJlY3QpOwogICAgIAogICAgIC8vIEZpbmFsbHkg
cGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAg
aGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1Yklu
Zm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUu
Z2V0LnN0cnVjdHVyZUNoZWNrKTsKQEAgLTEwNjAsNyArMTA2MCw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QKIAogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsK
ICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1f
Y29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2Nv
ZGVCbG9jayk7CiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8
Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9j
YWxscy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgICAgICBpZiAoaXRlci0+dG8pCkBAIC0xMDgx
LDEyICsxMDgxLDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QK
ICAgICAgICAgICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIGNoYWluIGxpc3Qgc3R1YiBmb3IgJXMs
IHJldHVybiBwb2ludCAlcCIsCiAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCptX2NvZGVCbG9j
aykuZGF0YSgpLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCiAgICAgICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpKSwKLSAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAgICAgKm1f
dm0sCiAgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgbmVl
ZHNTdHViTGluayk7CiAgICAgCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVk
IHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIHByb3RvdHlwZVN0cnVjdHVy
ZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgY2hhaW4s
IGlzRGlyZWN0KTsKKyAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0u
c2V0KGNhbGxGcmFtZS0+dm0oKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHVi
Um91dGluZSwgc3RydWN0dXJlLCBjaGFpbiwgaXNEaXJlY3QpOwogICAgIAogICAgIC8vIEZpbmFs
bHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1
bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1
YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5l
LnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKQEAgLTExMzUsNyArMTEzNSw3IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHIKICAgICAgICAgY29tcGlsZUdldERpcmVjdE9m
ZnNldChwcm90b09iamVjdCwgcmVnVDEsIHJlZ1QwLCBjYWNoZWRPZmZzZXQpOwogICAgIEp1bXAg
c3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2ds
b2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7CiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAg
ICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJl
Z2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgICAgICBpZiAo
aXRlci0+dG8pCkBAIC0xMTU1LDcgKzExNTUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkQ2hhaW4oU3RyCiAgICAgICAgICAgICAoIkJhc2VsaW5lIGdldF9ieV9pZCBjaGFpbiBz
dHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKICAgICAgICAgICAgICAgICB0b0NTdHJpbmco
Km1fY29kZUJsb2NrKS5kYXRhKCksIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNl
dCgKICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1
dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAotICAgICAgICAqbV9nbG9iYWxEYXRhLAor
ICAgICAgICAqbV92bSwKICAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAog
ICAgICAgICBuZWVkc1N0dWJMaW5rKTsKICAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBzdHVi
Um91dGluZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTEgKzUzLDEx
IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBuYW1lc3BhY2UgSlNDIHsKICNpZiBVU0UoSlNWQUxV
RTY0KQogCi1KSVQ6OkNvZGVSZWYgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorSklUOjpDb2RlUmVmIEpJVDo6c3RyaW5nR2V0QnlWYWxT
dHViR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBKU0ludGVyZmFjZUpJVCBqaXQ7CiAgICAgSnVt
cExpc3QgZmFpbHVyZXM7Ci0gICAgZmFpbHVyZXMuYXBwZW5kKGppdC5icmFuY2hQdHIoTm90RXF1
YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
UHRyKGdsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICBmYWlsdXJlcy5h
cHBlbmQoaml0LmJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIodm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkp
KTsKIAogICAgIC8vIExvYWQgc3RyaW5nIGxlbmd0aCB0byByZWdUMiwgYW5kIHN0YXJ0IHRoZSBw
cm9jZXNzIG9mIGxvYWRpbmcgdGhlIGRhdGEgcG9pbnRlciBpbnRvIHJlZ1QwCiAgICAgaml0Lmxv
YWQzMihBZGRyZXNzKHJlZ1QwLCBUaHVua0hlbHBlcnM6OmpzU3RyaW5nTGVuZ3RoT2Zmc2V0KCkp
LCByZWdUMik7CkBAIC04MSw3ICs4MSw3IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5
VmFsU3R1YkdlbmUKICAgICBjb250OEJpdC5saW5rKCZqaXQpOwogCiAgICAgZmFpbHVyZXMuYXBw
ZW5kKGppdC5icmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoMHgxMDAp
KSk7Ci0gICAgaml0Lm1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Mu
c2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKSwgcmVnVDEpOworICAgIGppdC5tb3ZlKFRydXN0ZWRJ
bW1QdHIodm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpLCByZWdUMSk7
CiAgICAgaml0LmxvYWRQdHIoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgU2NhbGVQdHIsIDApLCBy
ZWdUMCk7CiAgICAgaml0LnJldCgpOwogICAgIApAQCAtODksNyArODksNyBAQCBKSVQ6OkNvZGVS
ZWYgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lCiAgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTMy
KDApLCByZWdUMCk7CiAgICAgaml0LnJldCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiU3RyaW5nIGdldF9ieV92YWwgc3R1YiIpKTsKIH0K
IApAQCAtMjEwLDggKzIxMCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKElu
c3RydWMKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlKTsgLy8gYmFzZSBj
ZWxsIGNoZWNrCiAgICAgSnVtcCBub25DZWxsID0ganVtcCgpOwogICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsgLy8gYmFzZSBhcnJheSBjaGVjawotICAgIEp1bXAgbm90U3RyaW5nID0gYnJhbmNoUHRy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1
c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwotICAgIGVt
aXROYWtlZENhbGwoQ29kZUxvY2F0aW9uTGFiZWwobV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKHN0
cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcikuY29kZSgpKSk7CisgICAgSnVtcCBub3RTdHJpbmcg
PSBicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1fdm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOworICAg
IGVtaXROYWtlZENhbGwoQ29kZUxvY2F0aW9uTGFiZWwobV92bS0+Z2V0Q1RJU3R1YihzdHJpbmdH
ZXRCeVZhbFN0dWJHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgIEp1bXAgZmFpbGVkID0gYnJhbmNo
VGVzdDY0KFplcm8sIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVn
VDApOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9nZXRf
YnlfdmFsKSk7CkBAIC01MzUsNyArNTM1LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRCeUlkSG90
UGF0aChpbnQgYmFzZQogCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlVlJlZyk7CiAgICAgCi0gICAgaWYgKCppZGVudCA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5
TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKKyAgICBpZiAoKmlkZW50
ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkp
IHsKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgcmVnVDEpOwogICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlRm9yQnl0ZWNvZGVJ
bmRleChyZWdUMSwgcmVnVDIsIG1fYnl0ZWNvZGVPZmZzZXQpOwogICAgIH0KQEAgLTc0Niw3ICs3
NDYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvCiAgICAgcmVz
dG9yZUFyZ3VtZW50UmVmZXJlbmNlRm9yVHJhbXBvbGluZSgpOwogICAgIENhbGwgZmFpbHVyZUNh
bGwgPSB0YWlsUmVjdXJzaXZlQ2FsbCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
bV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOwogCiAgICAgcGF0Y2hCdWZmZXIubGluayhm
YWlsdXJlQ2FsbCwgRnVuY3Rpb25QdHIoZGlyZWN0ID8gY3RpX29wX3B1dF9ieV9pZF9kaXJlY3Rf
ZmFpbCA6IGN0aV9vcF9wdXRfYnlfaWRfZmFpbCkpOwogCkBAIC03NjAsNyArNzYwLDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpbwogICAgICAgICAgICAgcGF0Y2hC
dWZmZXIsCiAgICAgICAgICAgICAoIkJhc2VsaW5lIHB1dF9ieV9pZCB0cmFuc2l0aW9uIGZvciAl
cywgcmV0dXJuIHBvaW50ICVwIiwKICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKm1fY29kZUJs
b2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSkpLAotICAgICAgICAqbV9nbG9iYWxE
YXRhLAorICAgICAgICAqbV92bSwKICAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLAogICAgICAgICB3aWxsTmVlZFN0b3JhZ2VSZWFsbG9jLAogICAgICAgICBuZXdTdHJ1Y3R1
cmUpOwpAQCAtODEzLDcgKzgxMyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0
QXJyYXlMZW4KICAgICBlbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKHJlZ1QyLCByZWdUMCk7
CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOwogCiAgICAgLy8gVXNlIHRoZSBwYXRj
aCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdp
bmFsIHNsb3cgY2FzZSByb3V0aW5lLgogICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVn
aW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXN0dWJJbmZv
LT5wYXRjaC5iYXNlbGluZS51LmdldC5jb2xkUGF0aEJlZ2luKTsKQEAgLTg3NSw3ICs4NzUsNyBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3RyCiAgICAgfSBlbHNlCiAg
ICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJlZ1QwLCBjYWNoZWRP
ZmZzZXQpOwogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKLSAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7CiAKICAgICAvLyBVc2UgdGhl
IHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUg
b3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nh
c2VCZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtc3R1
YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmNvbGRQYXRoQmVnaW4pOwpAQCAtODk5LDcgKzg5
OSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIKICAgICAgICAg
ICAgICgiQmFzZWxpbmUgSklUIGdldF9ieV9pZCBwcm90byBzdHViIGZvciAlcywgcmV0dXJuIHBv
aW50ICVwIiwKICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCks
IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKICAgICAgICAgICAgICAgICAg
ICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpLAotICAgICAgICAqbV9nbG9iYWxEYXRhLAorICAgICAgICAqbV92bSwKICAgICAg
ICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICBuZWVkc1N0dWJMaW5r
KTsKIApAQCAtOTM5LDcgKzkzOSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRT
ZWxmTGlzdCgKICAgICB9CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogCi0gICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jayk7CisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOwogCiAgICAg
aWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0
ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytp
dGVyKSB7CkBAIC05NjQsMTEgKzk2NCwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRC
eUlkU2VsZkxpc3QoCiAgICAgICAgICAgICAoIkJhc2VsaW5lIEpJVCBnZXRfYnlfaWQgbGlzdCBz
dHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKICAgICAgICAgICAgICAgICB0b0NTdHJpbmco
Km1fY29kZUJsb2NrKS5kYXRhKCksIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNl
dCgKICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1
dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAotICAgICAgICAqbV9nbG9iYWxEYXRhLAor
ICAgICAgICAqbV92bSwKICAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAog
ICAgICAgICBuZWVkc1N0dWJMaW5rKTsKIAotICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlz
dFtjdXJyZW50SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHN0dWJDb2RlLCBzdHJ1Y3R1cmUsIGlzRGlyZWN0KTsKKyAgICBwb2x5bW9ycGhp
Y1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fdm0sIG1fY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgc3R1YkNvZGUsIHN0cnVjdHVyZSwgaXNEaXJlY3QpOwogCiAgICAg
Ly8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBh
dGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRp
b24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2gu
YmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwpAQCAtMTAxNCw3ICsxMDE0LDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdAogCiAgICAgSnVtcCBzdWNjZXNz
ID0ganVtcCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0
aGlzLCBtX2NvZGVCbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhp
cywgbV9jb2RlQmxvY2spOwogCiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9y
IChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0
ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CkBAIC0xMDM4LDEwICsxMDM4LDEwIEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QKICAgICAgICAgICAgICgiQmFz
ZWxpbmUgSklUIGdldF9ieV9pZCBwcm90byBsaXN0IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQg
JXAiLAogICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgc3R1
YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAogICAgICAgICAgICAgICAgICAgICBz
dHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVz
cygpKSksCi0gICAgICAgICptX2dsb2JhbERhdGEsCisgICAgICAgICptX3ZtLAogICAgICAgICBt
X2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgIG5lZWRzU3R1YkxpbmspOwot
ICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fZ2xvYmFs
RGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViQ29kZSwgc3RydWN0dXJl
LCBwcm90b3R5cGVTdHJ1Y3R1cmUsIGlzRGlyZWN0KTsKKyAgICBwcm90b3R5cGVTdHJ1Y3R1cmVz
LT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KCptX3ZtLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIHN0dWJDb2RlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSwgaXNEaXJlY3Qp
OwogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0
aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBq
dW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5m
by0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwpAQCAtMTA5Miw3ICsxMDky
LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdAogICAgIH0KICAg
ICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpt
X2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7CiAgICAgCiAgICAgaWYgKG5lZWRzU3R1Ykxp
bmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBt
X2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CkBAIC0xMTE1
LDEyICsxMTE1LDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QK
ICAgICAgICAgICAgICgiQmFzZWxpbmUgSklUIGdldF9ieV9pZCBjaGFpbiBsaXN0IHN0dWIgZm9y
ICVzLCByZXR1cm4gcG9pbnQgJXAiLAogICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqbV9jb2Rl
QmxvY2spLmRhdGEoKSwgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAogICAg
ICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0
KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICptX2dsb2JhbERhdGEsCisgICAgICAg
ICptX3ZtLAogICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAg
IG5lZWRzU3R1YkxpbmspOwogCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVk
IHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIHByb3RvdHlwZVN0cnVjdHVy
ZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgY2hhaW4s
IGlzRGlyZWN0KTsKKyAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0u
c2V0KGNhbGxGcmFtZS0+dm0oKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHVi
Um91dGluZSwgc3RydWN0dXJlLCBjaGFpbiwgaXNEaXJlY3QpOwogCiAgICAgLy8gRmluYWxseSBw
YXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBo
ZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5m
by0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5n
ZXQuc3RydWN0dXJlQ2hlY2spOwpAQCAtMTE2OCw3ICsxMTY4LDcgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlR2V0QnlJZENoYWluKFN0cgogICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0
KHByb3RvT2JqZWN0LCByZWdUMCwgY2FjaGVkT2Zmc2V0KTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBq
dW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMs
IG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBt
X2NvZGVCbG9jayk7CiAKICAgICBpZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBmb3IgKFZl
Y3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAh
PSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKQEAgLTExOTAsNyArMTE5MCw3IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHIKICAgICAgICAgICAgICgiQmFzZWxpbmUg
SklUIGdldF9ieV9pZCBjaGFpbiBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKICAgICAg
ICAgICAgICAgICB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHN0dWJJbmZvLT5ob3RQ
YXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBh
dGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAotICAg
ICAgICAqbV9nbG9iYWxEYXRhLAorICAgICAgICAqbV92bSwKICAgICAgICAgbV9jb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICBuZWVkc1N0dWJMaW5rKTsKICAgICBzdHViSW5m
by0+c3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKQEAgLTE0MTcsMzEgKzE0MTcsMzEgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbgogICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRJbnQ4QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBl
LCBtX2dsb2JhbERhdGEtPmludDhBcnJheURlc2NyaXB0b3IoKSwgMSwgU2lnbmVkVHlwZWRBcnJh
eSk7CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIDEsIFNp
Z25lZFR5cGVkQXJyYXkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpJVEludDE2QXJyYXk6
Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudElu
c3RydWN0aW9uLCBiYWRUeXBlLCBtX2dsb2JhbERhdGEtPmludDE2QXJyYXlEZXNjcmlwdG9yKCks
IDIsIFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRB
cnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50MTZBcnJh
eURlc2NyaXB0b3IoKSwgMiwgU2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSklUSW50MzJBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJy
YXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+aW50
MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgIHNsb3dD
YXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRU
eXBlLCBtX3ZtLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBTaWduZWRUeXBlZEFycmF5KTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRVaW50OEFycmF5OgotICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSwgbV9nbG9iYWxEYXRhLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCAxLCBVbnNpZ25lZFR5cGVk
QXJyYXkpOworICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwg
MSwgVW5zaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRVaW50
OENsYW1wZWRBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRC
eVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+dWludDhDbGFt
cGVkQXJyYXlEZXNjcmlwdG9yKCksIDEsIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgIHNs
b3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBi
YWRUeXBlLCBtX3ZtLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRU
eXBlZEFycmF5KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRVaW50MTZBcnJheToKLSAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIs
IFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFy
cmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50MTZBcnJh
eURlc2NyaXB0b3IoKSwgMiwgVW5zaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBKSVRVaW50MzJBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVk
QXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+
dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIDQsIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAg
IHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9u
LCBiYWRUeXBlLCBtX3ZtLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgVW5zaWduZWRUeXBl
ZEFycmF5KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRGbG9hdDMyQXJyYXk6Ci0gICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCA0
KTsKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCA0
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRGbG9hdDY0QXJyYXk6Ci0gICAgICAgIHNs
b3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCA4KTsKKyAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCA4KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsKQEAgLTE0NDksNyAr
MTQ0OSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFsSW4KICAgICAK
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpt
X2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0
ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zm
c2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKICAgICBwYXRjaEJ1ZmZl
ci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFi
ZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CkBAIC0xNDg2
LDMxICsxNDg2LDMxIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4K
ICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYmFkVHlwZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUSW50OEFycmF5
OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCks
IDEsIFNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOworICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSwgbV92bS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCAxLCBTaWduZWRUeXBlZEFycmF5LCBUcnVu
Y2F0ZVJvdW5kaW5nKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRJbnQxNkFycmF5Ogot
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCAy
LCBTaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKKyAgICAgICAgc2xvd0Nhc2Vz
ID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUs
IG1fdm0tPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIsIFNpZ25lZFR5cGVkQXJyYXksIFRydW5j
YXRlUm91bmRpbmcpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpJVEludDMyQXJyYXk6Ci0g
ICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3Ry
dWN0aW9uLCBiYWRUeXBlLCBtX2dsb2JhbERhdGEtPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIDQs
IFNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOworICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwg
bV92bS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgU2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNh
dGVSb3VuZGluZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUVWludDhBcnJheToKLSAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgMSwg
VW5zaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKKyAgICAgICAgc2xvd0Nhc2Vz
ID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUs
IG1fdm0tPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIDEsIFVuc2lnbmVkVHlwZWRBcnJheSwgVHJ1
bmNhdGVSb3VuZGluZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUVWludDhDbGFtcGVk
QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX2dsb2JhbERhdGEtPnVpbnQ4Q2xhbXBlZEFycmF5
RGVzY3JpcHRvcigpLCAxLCBVbnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcpOworICAg
ICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIDEsIFVu
c2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSklUVWludDE2QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5
UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX2dsb2JhbERhdGEtPnVpbnQx
NkFycmF5RGVzY3JpcHRvcigpLCAyLCBVbnNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRp
bmcpOworICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIs
IFVuc2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgSklUVWludDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBl
ZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX2dsb2JhbERhdGEt
PnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBVbnNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRl
Um91bmRpbmcpOworICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDMyQXJyYXlEZXNjcmlwdG9y
KCksIDQsIFVuc2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSklURmxvYXQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0
RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX2ds
b2JhbERhdGEtPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgNCk7CisgICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5
cGUsIG1fdm0tPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgNCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgSklURmxvYXQ2NEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRU
eXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX2dsb2JhbERh
dGEtPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgOCk7CisgICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1f
dm0tPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgOCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC0xNTE5LDcgKzE1MTksNyBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluCiAgICAgCiAgICAgSnVtcCBkb25lID0ganVt
cCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBt
X2NvZGVCbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9j
b2RlQmxvY2spOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0
aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJl
c3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVy
bkFkZHJlc3NUb1Nsb3dQYXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENv
ZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFi
bGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZv
LT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNyArMjI4LDcgQEAgQ09N
UElMRV9BU1NFUlQob2Zmc2V0b2Yoc3RydWN0IEpJVFN0YWNrRgogCiBleHRlcm4gIkMiIHsKIAot
ICAgIF9fZGVjbHNwZWMobmFrZWQpIEVuY29kZWRKU1ZhbHVlIGN0aVRyYW1wb2xpbmUodm9pZCog
Y29kZSwgSlNTdGFjayosIENhbGxGcmFtZSosIHZvaWQqIC8qdW51c2VkMSovLCB2b2lkKiAvKnVu
dXNlZDIqLywgSlNHbG9iYWxEYXRhKikKKyAgICBfX2RlY2xzcGVjKG5ha2VkKSBFbmNvZGVkSlNW
YWx1ZSBjdGlUcmFtcG9saW5lKHZvaWQqIGNvZGUsIEpTU3RhY2sqLCBDYWxsRnJhbWUqLCB2b2lk
KiAvKnVudXNlZDEqLywgdm9pZCogLyp1bnVzZWQyKi8sIFZNKikKICAgICB7CiAgICAgICAgIF9f
YXNtIHsKICAgICAgICAgICAgIHB1c2ggZWJwOwpAQCAtMjkxLDcgKzI5MSw3IEBAIGV4dGVybiAi
QyIgewogI2RlZmluZSBTVEFDS19MRU5HVEggICAgICAgICAgICAgICAxMTIKICNlbGlmIENQVShT
SDQpCiAjZGVmaW5lIFNZTUJPTF9TVFJJTkcobmFtZSkgI25hbWUKLS8qIGNvZGUgKHI0KSwgSlNT
dGFjayogKHI1KSwgQ2FsbEZyYW1lKiAocjYpLCB2b2lkKiB1bnVzZWQxIChyNyksIHZvaWQqIHVu
dXNlZDIoc3ApLCBKU0dsb2JhbERhdGEgKHNwKSovCisvKiBjb2RlIChyNCksIEpTU3RhY2sqIChy
NSksIENhbGxGcmFtZSogKHI2KSwgdm9pZCogdW51c2VkMSAocjcpLCB2b2lkKiB1bnVzZWQyKHNw
KSwgVk0gKHNwKSovCiAKIGFzbSB2b2xhdGlsZSAoCiAiLnRleHRcbiIKQEAgLTQ3Niw5ICs0NzYs
OSBAQCBTWU1CT0xfU1RSSU5HKGN0aVRyYW1wb2xpbmUpICI6IiAiXG4iCiAgICAgIm1vdmUgICQx
NiwkNiAgICAgICAjIHNldCBjYWxsRnJhbWVSZWdpc3RlciIgIlxuIgogICAgICJtb3ZlICAkMjUs
JDQgICAgICAgIyBtb3ZlIGV4ZWN1dGFibGVBZGRyZXNzIHRvIHQ5IiAiXG4iCiAgICAgInN3ICAg
ICQ1LCIgU1RSSU5HSVpFX1ZBTFVFX09GKFJFR0lTVEVSX0ZJTEVfT0ZGU0VUKSAiKCQyOSkgIyBz
dG9yZSBKU1N0YWNrIHRvIGN1cnJlbnQgc3RhY2siICJcbiIKLSAgICAibHcgICAgJDksIiBTVFJJ
TkdJWkVfVkFMVUVfT0YoU1RBQ0tfTEVOR1RIICsgMjApICIoJDI5KSAgICAjIGxvYWQgZ2xvYmFs
RGF0YSBmcm9tIHByZXZpb3VzIHN0YWNrIiAiXG4iCisgICAgImx3ICAgICQ5LCIgU1RSSU5HSVpF
X1ZBTFVFX09GKFNUQUNLX0xFTkdUSCArIDIwKSAiKCQyOSkgICAgIyBsb2FkIHZtIGZyb20gcHJl
dmlvdXMgc3RhY2siICJcbiIKICAgICAiamFsciAgJDI1IiAiXG4iCi0gICAgInN3ICAgICQ5LCIg
U1RSSU5HSVpFX1ZBTFVFX09GKEdMT0JBTF9EQVRBX09GRlNFVCkgIigkMjkpICAgIyBzdG9yZSBn
bG9iYWxEYXRhIHRvIGN1cnJlbnQgc3RhY2siICJcbiIKKyAgICAic3cgICAgJDksIiBTVFJJTkdJ
WkVfVkFMVUVfT0YoR0xPQkFMX0RBVEFfT0ZGU0VUKSAiKCQyOSkgICAjIHN0b3JlIHZtIHRvIGN1
cnJlbnQgc3RhY2siICJcbiIKICAgICAibHcgICAgJDE2LCIgU1RSSU5HSVpFX1ZBTFVFX09GKFBS
RVNFUlZFRF9TMF9PRkZTRVQpICIoJDI5KSIgIlxuIgogICAgICJsdyAgICAkMTcsIiBTVFJJTkdJ
WkVfVkFMVUVfT0YoUFJFU0VSVkVEX1MxX09GRlNFVCkgIigkMjkpIiAiXG4iCiAgICAgImx3ICAg
ICQxOCwiIFNUUklOR0laRV9WQUxVRV9PRihQUkVTRVJWRURfUzJfT0ZGU0VUKSAiKCQyOSkiICJc
biIKQEAgLTY4NSw3ICs2ODUsNyBAQCBTWU1CT0xfU1RSSU5HKGN0aU9wVGhyb3dOb3RDYXVnaHQp
ICI6IiAiCiAKICNlbGlmIENPTVBJTEVSKFJWQ1QpICYmIENQVShBUk1fVEhVTUIyKQogCi1fX2Fz
bSBFbmNvZGVkSlNWYWx1ZSBjdGlUcmFtcG9saW5lKHZvaWQqLCBKU1N0YWNrKiwgQ2FsbEZyYW1l
Kiwgdm9pZCogLyp1bnVzZWQxKi8sIHZvaWQqIC8qdW51c2VkMiovLCBKU0dsb2JhbERhdGEqKQor
X19hc20gRW5jb2RlZEpTVmFsdWUgY3RpVHJhbXBvbGluZSh2b2lkKiwgSlNTdGFjayosIENhbGxG
cmFtZSosIHZvaWQqIC8qdW51c2VkMSovLCB2b2lkKiAvKnVudXNlZDIqLywgVk0qKQogewogICAg
IFBSRVNFUlZFOAogICAgIHN1YiBzcCwgc3AsICMgRklSU1RfU1RBQ0tfQVJHVU1FTlQKQEAgLTc1
Myw3ICs3NTMsNyBAQCBfX2FzbSB2b2lkIGN0aU9wVGhyb3dOb3RDYXVnaHQoKQogCiAjZWxpZiBD
T01QSUxFUihSVkNUKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKQogCi1fX2FzbSBFbmNvZGVkSlNW
YWx1ZSBjdGlUcmFtcG9saW5lKHZvaWQqLCBKU1N0YWNrKiwgQ2FsbEZyYW1lKiwgdm9pZCogLyp1
bnVzZWQxKi8sIHZvaWQqIC8qdW51c2VkMiovLCBKU0dsb2JhbERhdGEqKQorX19hc20gRW5jb2Rl
ZEpTVmFsdWUgY3RpVHJhbXBvbGluZSh2b2lkKiwgSlNTdGFjayosIENhbGxGcmFtZSosIHZvaWQq
IC8qdW51c2VkMSovLCB2b2lkKiAvKnVudXNlZDIqLywgVk0qKQogewogICAgIEFSTQogICAgIHN0
bWRiIHNwISwge3IxLXIzfQpAQCAtNzk1LDE0ICs3OTUsMTQgQEAgX19hc20gdm9pZCBjdGlPcFRo
cm93Tm90Q2F1Z2h0KCkKICNlbmRpZgogCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKLSAg
ICAjZGVmaW5lIENUSV9TQU1QTEVSIHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXIt
PnNhbXBsZXIoKQorICAgICNkZWZpbmUgQ1RJX1NBTVBMRVIgc3RhY2tGcmFtZS52bS0+aW50ZXJw
cmV0ZXItPnNhbXBsZXIoKQogI2Vsc2UKICAgICAjZGVmaW5lIENUSV9TQU1QTEVSIDAKICNlbmRp
ZgogCi12b2lkIHBlcmZvcm1QbGF0Zm9ybVNwZWNpZmljSklUQXNzZXJ0aW9ucyhKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEpCit2b2lkIHBlcmZvcm1QbGF0Zm9ybVNwZWNpZmljSklUQXNzZXJ0aW9u
cyhWTSogdm0pCiB7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSkKKyAgICBpZiAo
IXZtLT5jYW5Vc2VKSVQoKSkKICAgICAgICAgcmV0dXJuOwogCiAjaWYgQ1BVKEFSTV9USFVNQjIp
CkBAIC04MzksNyArODM5LDcgQEAgdm9pZCBwZXJmb3JtUGxhdGZvcm1TcGVjaWZpY0pJVEFzc2Vy
dGlvbgogICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHBy
ZXNlcnZlZFJldHVybkFkZHJlc3MpID09IFBSRVNFUlZFRF9SRVRVUk5fQUREUkVTU19PRkZTRVQp
OwogICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHRodW5r
UmV0dXJuQWRkcmVzcykgPT0gVEhVTktfUkVUVVJOX0FERFJFU1NfT0ZGU0VUKTsKICAgICBBU1NF
UlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBzdGFjaykgPT0gUkVHSVNU
RVJfRklMRV9PRkZTRVQpOwotICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0
YWNrRnJhbWUsIGdsb2JhbERhdGEpID09IEdMT0JBTF9EQVRBX09GRlNFVCk7CisgICAgQVNTRVJU
KE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgdm0pID09IEdMT0JBTF9EQVRB
X09GRlNFVCk7CiAKICNlbmRpZgogfQpAQCAtODg4LDEyICs4ODgsMTIgQEAgTkVWRVJfSU5MSU5F
IHN0YXRpYyB2b2lkIHRyeUNhY2hlUHV0QnlJRAogCiAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBw
cm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oY2FsbEZyYW1lKTsKICAg
ICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+cHJldmlvdXNJRCgpLT50cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKLSAgICAgICAgc3R1YkluZm8tPmluaXRQdXRCeUlk
VHJhbnNpdGlvbihjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgc3RydWN0dXJlLT5wcmV2aW91c0lEKCksIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hh
aW4sIGRpcmVjdCk7Ci0gICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKGNhbGxG
cmFtZS0+c2NvcGUoKS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1
cmUtPnByZXZpb3VzSUQoKSwgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm90b3R5
cGVDaGFpbiwgcmV0dXJuQWRkcmVzcywgZGlyZWN0KTsKKyAgICAgICAgc3R1YkluZm8tPmluaXRQ
dXRCeUlkVHJhbnNpdGlvbihjYWxsRnJhbWUtPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIHN0cnVjdHVyZS0+cHJldmlvdXNJRCgpLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWlu
LCBkaXJlY3QpOworICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihjYWxsRnJh
bWUtPnNjb3BlKCktPnZtKCksIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZS0+cHJldmlv
dXNJRCgpLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3RvdHlwZUNoYWluLCBy
ZXR1cm5BZGRyZXNzLCBkaXJlY3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAg
IHN0dWJJbmZvLT5pbml0UHV0QnlJZFJlcGxhY2UoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CisgICAgc3R1YkluZm8tPmlu
aXRQdXRCeUlkUmVwbGFjZShjYWxsRnJhbWUtPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIHN0cnVjdHVyZSk7CiAKICAgICBKSVQ6OnBhdGNoUHV0QnlJZFJlcGxhY2UoY29kZUJs
b2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCByZXR1cm5BZGRy
ZXNzLCBkaXJlY3QpOwogfQpAQCAtOTA5LDE3ICs5MDksMTcgQEAgTkVWRVJfSU5MSU5FIHN0YXRp
YyB2b2lkIHRyeUNhY2hlR2V0QnlJRAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKTsKKyAg
ICBWTSogdm0gPSAmY2FsbEZyYW1lLT52bSgpOwogCiAgICAgaWYgKGlzSlNBcnJheShiYXNlVmFs
dWUpICYmIHByb3BlcnR5TmFtZSA9PSBjYWxsRnJhbWUtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
IHsKLSAgICAgICAgSklUOjpjb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChjYWxsRnJhbWUtPnNj
b3BlKCktPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzKTsKKyAgICAgICAg
SklUOjpjb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChjYWxsRnJhbWUtPnNjb3BlKCktPnZtKCks
IGNvZGVCbG9jaywgcmV0dXJuQWRkcmVzcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
CiAgICAgaWYgKGlzSlNTdHJpbmcoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0gY2FsbEZy
YW1lLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CiAgICAgICAgIC8vIFRoZSB0cmFkZW9mZiBv
ZiBjb21waWxpbmcgYW4gcGF0Y2hlZCBpbmxpbmUgc3RyaW5nIGxlbmd0aCBhY2Nlc3Mgcm91dGlu
ZSBkb2VzIG5vdCBzZWVtCiAgICAgICAgIC8vIHRvIHBheSBvZmYsIHNvIHdlIGN1cnJlbnRseSBv
bmx5IGRvIHRoaXMgZm9yIGFycmF5cy4KLSAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRy
ZXNzKGNvZGVCbG9jaywgcmV0dXJuQWRkcmVzcywgZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1YihzdHJp
bmdMZW5ndGhUcmFtcG9saW5lR2VuZXJhdG9yKS5jb2RlKCkpOworICAgICAgICBjdGlQYXRjaENh
bGxCeVJldHVybkFkZHJlc3MoY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLCB2bS0+Z2V0Q1RJU3R1
YihzdHJpbmdMZW5ndGhUcmFtcG9saW5lR2VuZXJhdG9yKS5jb2RlKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC05NDgsNyArOTQ4LDcgQEAgTkVWRVJfSU5MSU5FIHN0YXRpYyB2b2lk
IHRyeUNhY2hlR2V0QnlJRAogICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNz
KGNvZGVCbG9jaywgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9z
ZWxmX2ZhaWwpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBKSVQ6OnBhdGNoR2V0QnlJ
ZFNlbGYoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgp
LCByZXR1cm5BZGRyZXNzKTsKLSAgICAgICAgICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZFNlbGYo
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0
cnVjdHVyZSk7CisgICAgICAgICAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRTZWxmKGNhbGxGcmFt
ZS0+dm0oKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTc0LDE1ICs5NzQsMTUgQEAgTkVWRVJf
SU5MSU5FIHN0YXRpYyB2b2lkIHRyeUNhY2hlR2V0QnlJRAogICAgICAgICAvLyBTaW5jZSB3ZSdy
ZSBhY2Nlc3NpbmcgYSBwcm90b3R5cGUgaW4gYSBsb29wLCBpdCdzIGEgZ29vZCBiZXQgdGhhdCBp
dAogICAgICAgICAvLyBzaG91bGQgbm90IGJlIHRyZWF0ZWQgYXMgYSBkaWN0aW9uYXJ5LgogICAg
ICAgICBpZiAoc2xvdEJhc2VPYmplY3QtPnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkgewot
ICAgICAgICAgICAgc2xvdEJhc2VPYmplY3QtPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgICAgIG9mZnNldCA9IHNsb3RCYXNlT2JqZWN0
LT5zdHJ1Y3R1cmUoKS0+Z2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUp
OworICAgICAgICAgICAgc2xvdEJhc2VPYmplY3QtPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KGNh
bGxGcmFtZS0+dm0oKSk7CisgICAgICAgICAgICBvZmZzZXQgPSBzbG90QmFzZU9iamVjdC0+c3Ry
dWN0dXJlKCktPmdldChjYWxsRnJhbWUtPnZtKCksIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZFByb3RvKGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUsIHNs
b3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKSwgc2xvdC5jYWNoZWRQcm9wZXJ0eVR5cGUoKSA9PSBQ
cm9wZXJ0eVNsb3Q6OlZhbHVlKTsKKyAgICAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlkUHJvdG8o
Y2FsbEZyYW1lLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUs
IHNsb3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKSwgc2xvdC5jYWNoZWRQcm9wZXJ0eVR5cGUoKSA9
PSBQcm9wZXJ0eVNsb3Q6OlZhbHVlKTsKIAogICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNE
aWN0aW9uYXJ5KCkpOwogICAgICAgICBBU1NFUlQoIXNsb3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+aXNEaWN0aW9uYXJ5KCkpOwotICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeUlkUHJvdG8oY2Fs
bEZyYW1lLT5zY29wZSgpLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZSwgY29kZUJsb2NrLCBzdHVi
SW5mbywgc3RydWN0dXJlLCBzbG90QmFzZU9iamVjdC0+c3RydWN0dXJlKCksIHByb3BlcnR5TmFt
ZSwgc2xvdCwgb2Zmc2V0LCByZXR1cm5BZGRyZXNzKTsKKyAgICAgICAgSklUOjpjb21waWxlR2V0
QnlJZFByb3RvKGNhbGxGcmFtZS0+c2NvcGUoKS0+dm0oKSwgY2FsbEZyYW1lLCBjb2RlQmxvY2ss
IHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKSwgcHJvcGVy
dHlOYW1lLCBzbG90LCBvZmZzZXQsIHJldHVybkFkZHJlc3MpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC05OTUsOCArOTk1LDggQEAgTkVWRVJfSU5MSU5FIHN0YXRpYyB2b2lkIHRyeUNh
Y2hlR2V0QnlJRAogICAgIH0KIAogICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9
IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oY2FsbEZyYW1lKTsKLSAgICBzdHViSW5mby0+aW5p
dEdldEJ5SWRDaGFpbihjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHNsb3QuY2FjaGVk
UHJvcGVydHlUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpWYWx1ZSk7Ci0gICAgSklUOjpjb21waWxl
R2V0QnlJZENoYWluKGNhbGxGcmFtZS0+c2NvcGUoKS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUs
IGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBw
cm9wZXJ0eU5hbWUsIHNsb3QsIG9mZnNldCwgcmV0dXJuQWRkcmVzcyk7CisgICAgc3R1YkluZm8t
PmluaXRHZXRCeUlkQ2hhaW4oY2FsbEZyYW1lLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgc2xvdC5jYWNoZWRQcm9w
ZXJ0eVR5cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OlZhbHVlKTsKKyAgICBKSVQ6OmNvbXBpbGVHZXRC
eUlkQ2hhaW4oY2FsbEZyYW1lLT5zY29wZSgpLT52bSgpLCBjYWxsRnJhbWUsIGNvZGVCbG9jaywg
c3R1YkluZm8sIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBwcm9wZXJ0eU5hbWUs
IHNsb3QsIG9mZnNldCwgcmV0dXJuQWRkcmVzcyk7CiB9CiAKICNpZiAhZGVmaW5lZChOREVCVUcp
CkBAIC0xMDQ2LDEwICsxMDQ2LDEwIEBAIHN0cnVjdCBTdGFja0hhY2sgewogLy8gdG8gZ2V0IHRo
ZSBhZGRyZXNzIG9mIHRoZSBjdGlWTVRocm93VHJhbXBvbGluZSBmdW5jdGlvbi4gSXQncyBhbHNv
CiAvLyBnb29kIHRvIGtlZXAgdGhlIGNvZGUgc2l6ZSBkb3duIGJ5IGxlYXZpbmcgYXMgbXVjaCBv
ZiB0aGUgZXhjZXB0aW9uCiAvLyBoYW5kbGluZyBjb2RlIG91dCBvZiBsaW5lIGFzIHBvc3NpYmxl
Lgotc3RhdGljIE5FVkVSX0lOTElORSB2b2lkIHJldHVyblRvVGhyb3dUcmFtcG9saW5lKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgUmV0dXJuQWRkcmVzc1B0ciBleGNlcHRpb25Mb2NhdGlvbiwg
UmV0dXJuQWRkcmVzc1B0ciYgcmV0dXJuQWRkcmVzc1Nsb3QpCitzdGF0aWMgTkVWRVJfSU5MSU5F
IHZvaWQgcmV0dXJuVG9UaHJvd1RyYW1wb2xpbmUoVk0qIHZtLCBSZXR1cm5BZGRyZXNzUHRyIGV4
Y2VwdGlvbkxvY2F0aW9uLCBSZXR1cm5BZGRyZXNzUHRyJiByZXR1cm5BZGRyZXNzU2xvdCkKIHsK
LSAgICBSRUxFQVNFX0FTU0VSVChnbG9iYWxEYXRhLT5leGNlcHRpb24pOwotICAgIGdsb2JhbERh
dGEtPmV4Y2VwdGlvbkxvY2F0aW9uID0gZXhjZXB0aW9uTG9jYXRpb247CisgICAgUkVMRUFTRV9B
U1NFUlQodm0tPmV4Y2VwdGlvbik7CisgICAgdm0tPmV4Y2VwdGlvbkxvY2F0aW9uID0gZXhjZXB0
aW9uTG9jYXRpb247CiAgICAgcmV0dXJuQWRkcmVzc1Nsb3QgPSBSZXR1cm5BZGRyZXNzUHRyKEZ1
bmN0aW9uUHRyKGN0aVZNVGhyb3dUcmFtcG9saW5lKSk7CiB9CiAKQEAgLTEwNjAsMjIgKzEwNjAs
MjIgQEAgc3RhdGljIE5FVkVSX0lOTElORSB2b2lkIHJldHVyblRvVGhyb3dUcgogICAgIH0gd2hp
bGUgKDApCiAjZGVmaW5lIFZNX1RIUk9XX0VYQ0VQVElPTl9BVF9FTkQoKSBcCiAgICAgZG8ge1wK
LSAgICAgICAgcmV0dXJuVG9UaHJvd1RyYW1wb2xpbmUoc3RhY2tGcmFtZS5nbG9iYWxEYXRhLCBT
VFVCX1JFVFVSTl9BRERSRVNTLCBTVFVCX1JFVFVSTl9BRERSRVNTKTtcCisgICAgICAgIHJldHVy
blRvVGhyb3dUcmFtcG9saW5lKHN0YWNrRnJhbWUudm0sIFNUVUJfUkVUVVJOX0FERFJFU1MsIFNU
VUJfUkVUVVJOX0FERFJFU1MpO1wKICAgICB9IHdoaWxlICgwKQogCiAjZGVmaW5lIENIRUNLX0ZP
Ul9FWENFUFRJT04oKSBcCiAgICAgZG8geyBcCi0gICAgICAgIGlmIChVTkxJS0VMWShzdGFja0Zy
YW1lLmdsb2JhbERhdGEtPmV4Y2VwdGlvbikpIFwKKyAgICAgICAgaWYgKFVOTElLRUxZKHN0YWNr
RnJhbWUudm0tPmV4Y2VwdGlvbikpIFwKICAgICAgICAgICAgIFZNX1RIUk9XX0VYQ0VQVElPTigp
OyBcCiAgICAgfSB3aGlsZSAoMCkKICNkZWZpbmUgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQo
KSBcCiAgICAgZG8geyBcCi0gICAgICAgIGlmIChVTkxJS0VMWShzdGFja0ZyYW1lLmdsb2JhbERh
dGEtPmV4Y2VwdGlvbikpIFwKKyAgICAgICAgaWYgKFVOTElLRUxZKHN0YWNrRnJhbWUudm0tPmV4
Y2VwdGlvbikpIFwKICAgICAgICAgICAgIFZNX1RIUk9XX0VYQ0VQVElPTl9BVF9FTkQoKTsgXAog
ICAgIH0gd2hpbGUgKDApCiAjZGVmaW5lIENIRUNLX0ZPUl9FWENFUFRJT05fVk9JRCgpIFwKICAg
ICBkbyB7IFwKLSAgICAgICAgaWYgKFVOTElLRUxZKHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhj
ZXB0aW9uKSkgeyBcCisgICAgICAgIGlmIChVTkxJS0VMWShzdGFja0ZyYW1lLnZtLT5leGNlcHRp
b24pKSB7IFwKICAgICAgICAgICAgIFZNX1RIUk9XX0VYQ0VQVElPTl9BVF9FTkQoKTsgXAogICAg
ICAgICAgICAgcmV0dXJuOyBcCiAgICAgICAgIH0gXApAQCAtMTA4NywxNiArMTA4NywxNiBAQCBz
dGF0aWMgTkVWRVJfSU5MSU5FIHZvaWQgcmV0dXJuVG9UaHJvd1RyCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdGF0aWMgVCB0aHJvd0V4Y2VwdGlvbkZyb21PcENhbGwoSklUU3RhY2tGcmFtZSYgaml0
U3RhY2tGcmFtZSwgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUsIFJldHVybkFkZHJlc3NQdHImIHJl
dHVybkFkZHJlc3NTbG90KQogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gbmV3Q2FsbEZy
YW1lLT5jYWxsZXJGcmFtZSgpOwotICAgIEFTU0VSVChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5l
eGNlcHRpb24pOworICAgIEFTU0VSVChjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uKTsKICAgICBq
aXRTdGFja0ZyYW1lLmNhbGxGcmFtZSA9IGNhbGxGcmFtZTsKLSAgICBjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKS50b3BDYWxsRnJhbWUgPSBjYWxsRnJhbWU7Ci0gICAgcmV0dXJuVG9UaHJvd1RyYW1w
b2xpbmUoJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBSZXR1cm5BZGRyZXNzUHRyKG5ld0NhbGxG
cmFtZS0+cmV0dXJuUEMoKSksIHJldHVybkFkZHJlc3NTbG90KTsKKyAgICBjYWxsRnJhbWUtPnZt
KCkudG9wQ2FsbEZyYW1lID0gY2FsbEZyYW1lOworICAgIHJldHVyblRvVGhyb3dUcmFtcG9saW5l
KCZjYWxsRnJhbWUtPnZtKCksIFJldHVybkFkZHJlc3NQdHIobmV3Q2FsbEZyYW1lLT5yZXR1cm5Q
QygpKSwgcmV0dXJuQWRkcmVzc1Nsb3QpOwogICAgIHJldHVybiBUKCk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0YXRpYyBUIHRocm93RXhjZXB0aW9uRnJvbU9wQ2FsbChKSVRTdGFja0Zy
YW1lJiBqaXRTdGFja0ZyYW1lLCBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSwgUmV0dXJuQWRkcmVz
c1B0ciYgcmV0dXJuQWRkcmVzc1Nsb3QsIEpTVmFsdWUgZXhjZXB0aW9uKQogewotICAgIG5ld0Nh
bGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGV4Y2VwdGlv
bjsKKyAgICBuZXdDYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPnZtKCkuZXhjZXB0aW9uID0gZXhj
ZXB0aW9uOwogICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbkZyb21PcENhbGw8VD4oaml0U3RhY2tG
cmFtZSwgbmV3Q2FsbEZyYW1lLCByZXR1cm5BZGRyZXNzU2xvdCk7CiB9CiAKQEAgLTEzNzksOSAr
MTM3OSw5IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIGhhbmRsZV93YXRjaGQKIHsKICAg
ICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEgPSBzdGFja0ZyYW1lLmdsb2JhbERhdGE7Ci0gICAgaWYgKFVOTElLRUxZKGdsb2JhbERhdGEt
PndhdGNoZG9nLmRpZEZpcmUoY2FsbEZyYW1lKSkpIHsKLSAgICAgICAgZ2xvYmFsRGF0YS0+ZXhj
ZXB0aW9uID0gY3JlYXRlVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihnbG9iYWxEYXRhKTsK
KyAgICBWTSogdm0gPSBzdGFja0ZyYW1lLnZtOworICAgIGlmIChVTkxJS0VMWSh2bS0+d2F0Y2hk
b2cuZGlkRmlyZShjYWxsRnJhbWUpKSkgeworICAgICAgICB2bS0+ZXhjZXB0aW9uID0gY3JlYXRl
VGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbih2bSk7CiAgICAgICAgIFZNX1RIUk9XX0VYQ0VQ
VElPTl9BVF9FTkQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE0MjEsNyArMTQyMSw3
IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV9pZF8KICAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdChzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0
TW9kZSgpKTsKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1Zh
bHVlKCk7CiAgICAgQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChi
YXNlVmFsdWUpLT5wdXREaXJlY3Qoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwg
c3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKSwgc3RhY2tGcmFtZS5hcmdzWzJdLmpzVmFs
dWUoKSwgc2xvdCk7CisgICAgYXNPYmplY3QoYmFzZVZhbHVlKS0+cHV0RGlyZWN0KHN0YWNrRnJh
bWUuY2FsbEZyYW1lLT52bSgpLCBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigpLCBzdGFj
a0ZyYW1lLmFyZ3NbMl0uanNWYWx1ZSgpLCBzbG90KTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9O
X0FUX0VORCgpOwogfQogCkBAIC0xNDc1LDcgKzE0NzUsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElP
Tih2b2lkLCBvcF9wdXRfYnlfaWRfCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1l
LmFyZ3NbMF0uanNWYWx1ZSgpOwogICAgIEFTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7CiAg
ICAgCi0gICAgYXNPYmplY3QoYmFzZVZhbHVlKS0+cHV0RGlyZWN0KGNhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpLCBpZGVudCwgc3RhY2tGcmFtZS5hcmdzWzJdLmpzVmFsdWUoKSwgc2xvdCk7CisgICAg
YXNPYmplY3QoYmFzZVZhbHVlKS0+cHV0RGlyZWN0KGNhbGxGcmFtZS0+dm0oKSwgaWRlbnQsIHN0
YWNrRnJhbWUuYXJnc1syXS5qc1ZhbHVlKCksIHNsb3QpOwogICAgIAogICAgIGlmIChhY2Nlc3NU
eXBlID09IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkgewog
ICAgICAgICBzdHViSW5mby0+c2V0U2VlbigpOwpAQCAtMTUwOCw3ICsxNTA4LDcgQEAgREVGSU5F
X1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X2lkXwogICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICBKU1ZhbHVl
IGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CiAgICAgQVNTRVJUKGJh
c2VWYWx1ZS5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlVmFsdWUpLT5wdXREaXJlY3Qo
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGlkZW50LCBzdGFja0ZyYW1lLmFyZ3NbMl0uanNWYWx1
ZSgpLCBzbG90KTsKKyAgICBhc09iamVjdChiYXNlVmFsdWUpLT5wdXREaXJlY3QoY2FsbEZyYW1l
LT52bSgpLCBpZGVudCwgc3RhY2tGcmFtZS5hcmdzWzJdLmpzVmFsdWUoKSwgc2xvdCk7CiAgICAg
CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKIH0KQEAgLTE1MjcsOSArMTUyNyw5
IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfcHV0X2IKIAogICAgIEFTU0VS
VChiYXNlVmFsdWUuaXNPYmplY3QoKSk7CiAgICAgSlNPYmplY3QqIGJhc2UgPSBhc09iamVjdChi
YXNlVmFsdWUpOwotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9ICpzdGFja0ZyYW1lLmds
b2JhbERhdGE7Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBiYXNlLT5ncm93T3V0T2ZMaW5l
U3RvcmFnZShnbG9iYWxEYXRhLCBvbGRTaXplLCBuZXdTaXplKTsKLSAgICBiYXNlLT5zZXRCdXR0
ZXJmbHkoZ2xvYmFsRGF0YSwgYnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOworICAgIFZNJiB2bSA9
ICpzdGFja0ZyYW1lLnZtOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gYmFzZS0+Z3Jvd091
dE9mTGluZVN0b3JhZ2Uodm0sIG9sZFNpemUsIG5ld1NpemUpOworICAgIGJhc2UtPnNldEJ1dHRl
cmZseSh2bSwgYnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOwogCiAgICAgcmV0dXJuIGJhc2U7CiB9
CkBAIC0xNTkxLDExICsxNTkxLDExIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1Zh
bHVlLCBvcF8KICAgICAgICAgaW50IGxpc3RJbmRleCA9IDE7CiAKICAgICAgICAgaWYgKHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCkKLSAgICAgICAgICAgIHN0dWJJbmZvLT5p
bml0R2V0QnlJZFNlbGYoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkpOworICAgICAgICAg
ICAgc3R1YkluZm8tPmluaXRHZXRCeUlkU2VsZihjYWxsRnJhbWUtPnZtKCksIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkpOwogCiAg
ICAgICAgIGlmIChzdHViSW5mby0+YWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYp
IHsKICAgICAgICAgICAgIEFTU0VSVCghc3R1YkluZm8tPnN0dWJSb3V0aW5lKTsKLSAgICAgICAg
ICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3QoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIDAsIHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0
KCksIHRydWUpOworICAgICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChjYWxsRnJhbWUtPnZtKCksIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIDAsIHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RT
dHJ1Y3R1cmUuZ2V0KCksIHRydWUpOwogICAgICAgICAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlk
U2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLT51LmdldEJ5
SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0OwpAQCAtMTYwMyw3ICsxNjAzLDcgQEAgREVGSU5FX1NU
VUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgICAgICB9CiAgICAgICAgIGlmIChs
aXN0SW5kZXggPCBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpIHsKICAgICAgICAgICAgIHN0
dWJJbmZvLT51LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZSsrOwotICAgICAgICAgICAgSklUOjpj
b21waWxlR2V0QnlJZFNlbGZMaXN0KGNhbGxGcmFtZS0+c2NvcGUoKS0+Z2xvYmFsRGF0YSgpLCBj
b2RlQmxvY2ssIHN0dWJJbmZvLCBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIGxpc3RJbmRleCwg
YmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgaWRlbnQsIHNsb3QsIHNsb3QuY2FjaGVk
T2Zmc2V0KCkpOworICAgICAgICAgICAgSklUOjpjb21waWxlR2V0QnlJZFNlbGZMaXN0KGNhbGxG
cmFtZS0+c2NvcGUoKS0+dm0oKSwgY29kZUJsb2NrLCBzdHViSW5mbywgcG9seW1vcnBoaWNTdHJ1
Y3R1cmVMaXN0LCBsaXN0SW5kZXgsIGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCksIGlk
ZW50LCBzbG90LCBzbG90LmNhY2hlZE9mZnNldCgpKTsKIAogICAgICAgICAgICAgaWYgKGxpc3RJ
bmRleCA9PSAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSkpCiAgICAgICAgICAgICAg
ICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNvZGVCbG9jaywgU1RVQl9SRVRVUk5fQURE
UkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9nZW5lcmljKSk7CkBAIC0xNjEzLDE5
ICsxNjEzLDE5IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLXN0YXRpYyBQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3QqIGdldFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFNs
b3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lciwgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBpbnQmIGxpc3RJbmRleCkKK3N0YXRpYyBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIGdldFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dFNsb3QoVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lciwgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLCBpbnQmIGxpc3RJbmRleCkKIHsKICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QgPSAwOwogICAgIGxpc3RJbmRleCA9IDE7
CiAKICAgICBzd2l0Y2ggKHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSB7CiAgICAgY2FzZSBhY2Nlc3Nf
Z2V0X2J5X2lkX3Byb3RvOgotICAgICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChnbG9iYWxEYXRhLCBvd25lciwgc3R1YkluZm8t
PnN0dWJSb3V0aW5lLCBzdHViSW5mby0+dS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVjdHVy
ZS5nZXQoKSwgc3R1YkluZm8tPnUuZ2V0QnlJZFByb3RvLnByb3RvdHlwZVN0cnVjdHVyZS5nZXQo
KSwgdHJ1ZSk7CisgICAgICAgIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBo
aWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KHZtLCBvd25lciwgc3R1YkluZm8tPnN0dWJSb3V0aW5lLCBz
dHViSW5mby0+dS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1Yklu
Zm8tPnUuZ2V0QnlJZFByb3RvLnByb3RvdHlwZVN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7CiAgICAg
ICAgIHN0dWJJbmZvLT5zdHViUm91dGluZS5jbGVhcigpOwogICAgICAgICBzdHViSW5mby0+aW5p
dEdldEJ5SWRQcm90b0xpc3QocHJvdG90eXBlU3RydWN0dXJlTGlzdCwgMik7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKLSAgICAgICAgcHJvdG90eXBl
U3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoZ2xvYmFs
RGF0YSwgb3duZXIsIHN0dWJJbmZvLT5zdHViUm91dGluZSwgc3R1YkluZm8tPnUuZ2V0QnlJZENo
YWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLT51LmdldEJ5SWRDaGFpbi5j
aGFpbi5nZXQoKSwgdHJ1ZSk7CisgICAgICAgIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QgPSBuZXcg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KHZtLCBvd25lciwgc3R1YkluZm8tPnN0dWJS
b3V0aW5lLCBzdHViSW5mby0+dS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQo
KSwgc3R1YkluZm8tPnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpLCB0cnVlKTsKICAgICAgICAg
c3R1YkluZm8tPnN0dWJSb3V0aW5lLmNsZWFyKCk7CiAgICAgICAgIHN0dWJJbmZvLT5pbml0R2V0
QnlJZFByb3RvTGlzdChwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCAyKTsKICAgICAgICAgYnJlYWs7
CkBAIC0xNjU1LDcgKzE2NTUsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1
ZSwgb3BfCiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXR0ZXItPm1ldGhvZFRhYmxlKCktPmdl
dENhbGxEYXRhKGdldHRlciwgY2FsbERhdGEpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChj
YWxsRnJhbWUsIGdldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBzdGFja0ZyYW1lLmFyZ3NbMV0u
anNPYmplY3QoKSwgQXJnTGlzdCgpKTsKICAgICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24o
KSkKLSAgICAgICAgcmV0dXJuVG9UaHJvd1RyYW1wb2xpbmUoJmNhbGxGcmFtZS0+Z2xvYmFsRGF0
YSgpLCBzdGFja0ZyYW1lLmFyZ3NbMl0ucmV0dXJuQWRkcmVzcygpLCBTVFVCX1JFVFVSTl9BRERS
RVNTKTsKKyAgICAgICAgcmV0dXJuVG9UaHJvd1RyYW1wb2xpbmUoJmNhbGxGcmFtZS0+dm0oKSwg
c3RhY2tGcmFtZS5hcmdzWzJdLnJldHVybkFkZHJlc3MoKSwgU1RVQl9SRVRVUk5fQUREUkVTUyk7
CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC0xNjY5LDcgKzE2
NjksNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQgPSBzdGFja0ZyYW1lLmFyZ3NbMl0uaWRlbnRpZmllcigpOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0gZ2V0dGVyKGNhbGxGcmFtZSwgc2xvdEJhc2UsIGlkZW50KTsK
ICAgICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuVG9UaHJv
d1RyYW1wb2xpbmUoJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBzdGFja0ZyYW1lLmFyZ3NbM10u
cmV0dXJuQWRkcmVzcygpLCBTVFVCX1JFVFVSTl9BRERSRVNTKTsKKyAgICAgICAgcmV0dXJuVG9U
aHJvd1RyYW1wb2xpbmUoJmNhbGxGcmFtZS0+dm0oKSwgc3RhY2tGcmFtZS5hcmdzWzNdLnJldHVy
bkFkZHJlc3MoKSwgU1RVQl9SRVRVUk5fQUREUkVTUyk7CiAgICAgCiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOwogfQpAQCAtMTcyMCwxNCArMTcyMCwxNCBAQCBERUZJTkVfU1RV
Ql9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgICAgIC8vIFNpbmNlIHdlJ3JlIGFj
Y2Vzc2luZyBhIHByb3RvdHlwZSBpbiBhIGxvb3AsIGl0J3MgYSBnb29kIGJldCB0aGF0IGl0CiAg
ICAgICAgIC8vIHNob3VsZCBub3QgYmUgdHJlYXRlZCBhcyBhIGRpY3Rpb25hcnkuCiAgICAgICAg
IGlmIChzbG90QmFzZU9iamVjdC0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7Ci0gICAg
ICAgICAgICBzbG90QmFzZU9iamVjdC0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCkpOwotICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdEJhc2VPYmplY3QtPnN0
cnVjdHVyZSgpLT5nZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7Cisg
ICAgICAgICAgICBzbG90QmFzZU9iamVjdC0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoY2FsbEZy
YW1lLT52bSgpKTsKKyAgICAgICAgICAgIG9mZnNldCA9IHNsb3RCYXNlT2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+Z2V0KGNhbGxGcmFtZS0+dm0oKSwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGludCBsaXN0SW5kZXg7Ci0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJl
TGlzdCogcHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IGdldFBvbHltb3JwaGljQWNjZXNzU3RydWN0
dXJlTGlzdFNsb3QoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHN0dWJJbmZvLCBsaXN0SW5kZXgpOworICAgICAgICBQb2x5bW9ycGhpY0FjY2Vz
c1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QgPSBnZXRQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3RTbG90KGNhbGxGcmFtZS0+dm0oKSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgc3R1YkluZm8sIGxpc3RJbmRleCk7CiAgICAgICAgIGlmIChsaXN0SW5kZXgg
PCBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpIHsKLSAgICAgICAgICAgIEpJVDo6Y29tcGls
ZUdldEJ5SWRQcm90b0xpc3QoY2FsbEZyYW1lLT5zY29wZSgpLT5nbG9iYWxEYXRhKCksIGNhbGxG
cmFtZSwgY29kZUJsb2NrLCBzdHViSW5mbywgcHJvdG90eXBlU3RydWN0dXJlTGlzdCwgbGlzdElu
ZGV4LCBzdHJ1Y3R1cmUsIHNsb3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1l
LCBzbG90LCBvZmZzZXQpOworICAgICAgICAgICAgSklUOjpjb21waWxlR2V0QnlJZFByb3RvTGlz
dChjYWxsRnJhbWUtPnNjb3BlKCktPnZtKCksIGNhbGxGcmFtZSwgY29kZUJsb2NrLCBzdHViSW5m
bywgcHJvdG90eXBlU3RydWN0dXJlTGlzdCwgbGlzdEluZGV4LCBzdHJ1Y3R1cmUsIHNsb3RCYXNl
T2JqZWN0LT5zdHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBzbG90LCBvZmZzZXQpOwogCiAgICAg
ICAgICAgICBpZiAobGlzdEluZGV4ID09IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAx
KSkKICAgICAgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY29kZUJsb2Nr
LCBTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3Rv
X2xpc3RfZnVsbCkpOwpAQCAtMTc0MSwxMSArMTc0MSwxMSBAQCBERUZJTkVfU1RVQl9GVU5DVElP
TihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgICAgIAogICAgICAgICBBU1NFUlQoIWJhc2VWYWx1
ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKTsKICAgICAgICAgaW50IGxp
c3RJbmRleDsKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5
cGVTdHJ1Y3R1cmVMaXN0ID0gZ2V0UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U2xvdChj
YWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1
YkluZm8sIGxpc3RJbmRleCk7CisgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dCogcHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IGdldFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJl
TGlzdFNsb3QoY2FsbEZyYW1lLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBz
dHViSW5mbywgbGlzdEluZGV4KTsKICAgICAgICAgCiAgICAgICAgIGlmIChsaXN0SW5kZXggPCBQ
T0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpIHsKICAgICAgICAgICAgIFN0cnVjdHVyZUNoYWlu
KiBwcm90b0NoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihjYWxsRnJhbWUpOwotICAg
ICAgICAgICAgSklUOjpjb21waWxlR2V0QnlJZENoYWluTGlzdChjYWxsRnJhbWUtPnNjb3BlKCkt
Pmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBwcm90b3R5cGVT
dHJ1Y3R1cmVMaXN0LCBsaXN0SW5kZXgsIHN0cnVjdHVyZSwgcHJvdG9DaGFpbiwgY291bnQsIHBy
b3BlcnR5TmFtZSwgc2xvdCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIEpJVDo6Y29tcGlsZUdldEJ5
SWRDaGFpbkxpc3QoY2FsbEZyYW1lLT5zY29wZSgpLT52bSgpLCBjYWxsRnJhbWUsIGNvZGVCbG9j
aywgc3R1YkluZm8sIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIGxpc3RJbmRleCwgc3RydWN0dXJl
LCBwcm90b0NoYWluLCBjb3VudCwgcHJvcGVydHlOYW1lLCBzbG90LCBvZmZzZXQpOwogCiAgICAg
ICAgICAgICBpZiAobGlzdEluZGV4ID09IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAx
KSkKICAgICAgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY29kZUJsb2Nr
LCBTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3Rv
X2xpc3RfZnVsbCkpOwpAQCAtMTgyMSw3ICsxODIxLDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04o
RW5jb2RlZEpTVmFsdWUsIG9wXwogICAgICAgICB9CiAgICAgfQogCi0gICAgc3RhY2tGcmFtZS5n
bG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihjYWxsRnJhbWUs
ICJpbnN0YW5jZW9mIiwgYmFzZVZhbCk7CisgICAgc3RhY2tGcmFtZS52bS0+ZXhjZXB0aW9uID0g
Y3JlYXRlSW52YWxpZFBhcmFtRXJyb3IoY2FsbEZyYW1lLCAiaW5zdGFuY2VvZiIsIGJhc2VWYWwp
OwogICAgIFZNX1RIUk9XX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSk7CiB9CkBAIC0xOTkwLDcgKzE5OTAsNyBAQCBERUZJTkVfU1RVQl9G
VU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgYm9vbCBjb3VsZERlbGV0ZSA9IGJhc2VP
YmotPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KGJhc2VPYmosIGNhbGxGcmFtZSwgc3Rh
Y2tGcmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jv
b2xlYW4oY291bGREZWxldGUpOwogICAgIGlmICghY291bGREZWxldGUgJiYgY2FsbEZyYW1lLT5j
b2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpCi0gICAgICAgIHN0YWNrRnJhbWUuZ2xvYmFsRGF0
YS0+ZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKHN0YWNrRnJhbWUuY2FsbEZyYW1lLCAiVW5h
YmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgc3RhY2tGcmFtZS52bS0+ZXhjZXB0
aW9uID0gY3JlYXRlVHlwZUVycm9yKHN0YWNrRnJhbWUuY2FsbEZyYW1lLCAiVW5hYmxlIHRvIGRl
bGV0ZSBwcm9wZXJ0eS4iKTsKIAogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtMjA0Niw3ICsyMDQ2LDcgQEAg
aW5saW5lIHZvaWQqIGppdENvbXBpbGVGb3IoQ2FsbEZyYW1lKiBjYQogICAgIEpTT2JqZWN0KiBl
cnJvciA9IGV4ZWN1dGFibGUtPmNvbXBpbGVGb3IoY2FsbEZyYW1lLCBjYWxsRGF0YVNjb3BlQ2hh
aW4sIGtpbmQpOwogICAgIGlmICghZXJyb3IpCiAgICAgICAgIHJldHVybiBmdW5jdGlvbjsKLSAg
ICBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBlcnJvcjsKKyAgICBjYWxsRnJh
bWUtPnZtKCkuZXhjZXB0aW9uID0gZXJyb3I7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTIxNDEs
NyArMjE0MSw3IEBAIGlubGluZSB2b2lkKiBsYXp5TGlua0ZvcihDYWxsRnJhbWUqIGNhbGwKICAg
ICBlbHNlIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUg
PSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKICAgICAgICAg
aWYgKEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvcihjYWxs
RnJhbWUsIGNhbGxlZS0+c2NvcGUoKSwga2luZCkpIHsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGVycm9yOworICAgICAgICAgICAgY2FsbEZyYW1lLT52
bSgpLmV4Y2VwdGlvbiA9IGVycm9yOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0K
ICAgICAgICAgY29kZUJsb2NrID0gJmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0ZWNv
ZGVGb3Ioa2luZCk7CkBAIC0yMTU1LDcgKzIxNTUsNyBAQCBpbmxpbmUgdm9pZCogbGF6eUxpbmtG
b3IoQ2FsbEZyYW1lKiBjYWxsCiAgICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCiAg
ICAgICAgIGNhbGxMaW5rSW5mby0+c2V0U2VlbigpOwogICAgIGVsc2UKLSAgICAgICAgSklUOjps
aW5rRm9yKGNhbGxlZSwgY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKSwgY29k
ZUJsb2NrLCBjb2RlUHRyLCBjYWxsTGlua0luZm8sICZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwg
a2luZCk7CisgICAgICAgIEpJVDo6bGlua0ZvcihjYWxsZWUsIGNhbGxGcmFtZS0+Y2FsbGVyRnJh
bWUoKS0+Y29kZUJsb2NrKCksIGNvZGVCbG9jaywgY29kZVB0ciwgY2FsbExpbmtJbmZvLCAmY2Fs
bEZyYW1lLT52bSgpLCBraW5kKTsKIAogICAgIHJldHVybiBjb2RlUHRyLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CiB9CkBAIC0yMTc5LDcgKzIxNzksNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lk
Kiwgdm1fbGF6eUxpbmtDCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNh
bGxGcmFtZTsKICAgICAKICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxGcmFt
ZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gY2FsbGVyQ29kZUJsb2NrLT5nbG9iYWxEYXRhKCk7CisgICAgVk0qIHZtID0gY2FsbGVy
Q29kZUJsb2NrLT52bSgpOwogICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gJmNhbGxl
ckNvZGVCbG9jay0+Z2V0Q2FsbExpbmtJbmZvKGNhbGxGcmFtZS0+cmV0dXJuUEMoKSk7CiAgICAg
SlNGdW5jdGlvbiogY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmNhbGxl
ZSgpKTsKICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJs
ZSgpOwpAQCAtMjIxOCw3ICsyMjE4LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIHZt
X2xhenlMaW5rQwogICAgICAgICBKU1Njb3BlKiBzY29wZUNoYWluID0gY2FsbGVlLT5zY29wZSgp
OwogICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVG
b3IoY2FsbEZyYW1lLCBzY29wZUNoYWluLCBDb2RlRm9yQ2FsbCk7CiAgICAgICAgIGlmIChlcnJv
cikgewotICAgICAgICAgICAgY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gZXJy
b3I7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uID0gZXJyb3I7CiAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICAKQEAgLTIyMjcsNyArMjIyNyw3
IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCB2bV9sYXp5TGlua0MKICAgICAKICAgICBp
ZiAoc2hvdWxkTGluaykgewogICAgICAgICBBU1NFUlQoY29kZVB0cik7Ci0gICAgICAgIEpJVDo6
Y29tcGlsZUNsb3N1cmVDYWxsKGdsb2JhbERhdGEsIGNhbGxMaW5rSW5mbywgY2FsbGVyQ29kZUJs
b2NrLCBjYWxsZWVDb2RlQmxvY2ssIHN0cnVjdHVyZSwgZXhlY3V0YWJsZSwgY29kZVB0cik7Cisg
ICAgICAgIEpJVDo6Y29tcGlsZUNsb3N1cmVDYWxsKHZtLCBjYWxsTGlua0luZm8sIGNhbGxlckNv
ZGVCbG9jaywgY2FsbGVlQ29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGV4ZWN1dGFibGUsIGNvZGVQdHIp
OwogICAgICAgICBjYWxsTGlua0luZm8tPmhhc1NlZW5DbG9zdXJlID0gdHJ1ZTsKICAgICB9IGVs
c2UKICAgICAgICAgSklUOjpsaW5rU2xvd0NhbGwoY2FsbGVyQ29kZUJsb2NrLCBjYWxsTGlua0lu
Zm8pOwpAQCAtMjI1MSw3ICsyMjUxLDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3Qq
LCBvcF9wdXNoXwogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKIAot
ICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKHN0YWNr
RnJhbWUuY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFj
a0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCkpOworICAgIEpTQWN0aXZhdGlvbiogYWN0aXZh
dGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT52bSgpLCBz
dGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsK
ICAgICBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+c2V0U2NvcGUoYWN0aXZhdGlvbik7CiAgICAgcmV0
dXJuIGFjdGl2YXRpb247CiB9CkBAIC0yMjc5LDcgKzIyNzksNyBAQCBERUZJTkVfU1RVQl9GVU5D
VElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgICAgIHJldHVyblZhbHVlID0gY2FsbERhdGEu
bmF0aXZlLmZ1bmN0aW9uKGNhbGxGcmFtZSk7CiAgICAgfQogCi0gICAgaWYgKHN0YWNrRnJhbWUu
Z2xvYmFsRGF0YS0+ZXhjZXB0aW9uKQorICAgIGlmIChzdGFja0ZyYW1lLnZtLT5leGNlcHRpb24p
CiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbkZyb21PcENhbGw8RW5jb2RlZEpTVmFsdWU+
KHN0YWNrRnJhbWUsIGNhbGxGcmFtZSwgU1RVQl9SRVRVUk5fQUREUkVTUyk7CiAKICAgICByZXR1
cm4gcmV0dXJuVmFsdWU7CkBAIC0yMjg5LDcgKzIyODksNyBAQCBERUZJTkVfU1RVQl9GVU5DVElP
TihFbmNvZGVkSlNWYWx1ZSwgb3BfCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNr
RnJhbWUpOwogCi0gICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBBcmd1bWVudHM6OmNyZWF0ZSgq
c3RhY2tGcmFtZS5nbG9iYWxEYXRhLCBzdGFja0ZyYW1lLmNhbGxGcmFtZSk7CisgICAgQXJndW1l
bnRzKiBhcmd1bWVudHMgPSBBcmd1bWVudHM6OmNyZWF0ZSgqc3RhY2tGcmFtZS52bSwgc3RhY2tG
cmFtZS5jYWxsRnJhbWUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShhcmd1
bWVudHMpKTsKIH0KIApAQCAtMjI5OCw3ICsyMjk4LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04o
dm9pZCwgb3BfdGVhcl9vZmZfYQogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1l
KTsKIAogICAgIEFTU0VSVChzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm5lZWRz
RnVsbFNjb3BlQ2hhaW4oKSk7Ci0gICAganNDYXN0PEpTQWN0aXZhdGlvbio+KHN0YWNrRnJhbWUu
YXJnc1swXS5qc1ZhbHVlKCkpLT50ZWFyT2ZmKCpzdGFja0ZyYW1lLmdsb2JhbERhdGEpOworICAg
IGpzQ2FzdDxKU0FjdGl2YXRpb24qPihzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpKS0+dGVh
ck9mZigqc3RhY2tGcmFtZS52bSk7CiB9CiAKIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9w
X3RlYXJfb2ZmX2FyZ3VtZW50cykKQEAgLTIzMTksNyArMjMxOSw3IEBAIERFRklORV9TVFVCX0ZV
TkNUSU9OKHZvaWQsIG9wX3Byb2ZpbGVfd2kKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUo
c3RhY2tGcmFtZSk7CiAKLSAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gc3RhY2tG
cmFtZS5nbG9iYWxEYXRhLT5lbmFibGVkUHJvZmlsZXIoKSkKKyAgICBpZiAoTGVnYWN5UHJvZmls
ZXIqIHByb2ZpbGVyID0gc3RhY2tGcmFtZS52bS0+ZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAg
IHByb2ZpbGVyLT53aWxsRXhlY3V0ZShzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5h
cmdzWzBdLmpzVmFsdWUoKSk7CiB9CiAKQEAgLTIzMjcsNyArMjMyNyw3IEBAIERFRklORV9TVFVC
X0ZVTkNUSU9OKHZvaWQsIG9wX3Byb2ZpbGVfZGkKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJB
TUUoc3RhY2tGcmFtZSk7CiAKLSAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gc3Rh
Y2tGcmFtZS5nbG9iYWxEYXRhLT5lbmFibGVkUHJvZmlsZXIoKSkKKyAgICBpZiAoTGVnYWN5UHJv
ZmlsZXIqIHByb2ZpbGVyID0gc3RhY2tGcmFtZS52bS0+ZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAg
ICAgIHByb2ZpbGVyLT5kaWRFeGVjdXRlKHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1l
LmFyZ3NbMF0uanNWYWx1ZSgpKTsKIH0KIApAQCAtMjQwNSw3ICsyNDA1LDcgQEAgREVGSU5FX1NU
VUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgICAgICByZXR1cm5WYWx1ZSA9IGNv
bnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGNhbGxGcmFtZSk7CiAgICAgfQogCi0gICAgaWYg
KHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKQorICAgIGlmIChzdGFja0ZyYW1lLnZt
LT5leGNlcHRpb24pCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbkZyb21PcENhbGw8RW5j
b2RlZEpTVmFsdWU+KHN0YWNrRnJhbWUsIGNhbGxGcmFtZSwgU1RVQl9SRVRVUk5fQUREUkVTUyk7
CiAKICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CkBAIC0yNDU4LDcgKzI0NTgsNyBAQCBERUZJTkVf
U1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgICAgICAgICAvLyBBdHRlbXB0
IHRvIG9wdGltaXplLgogICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFy
cmF5TW9kZUZvclN0cnVjdHVyZShvYmplY3QtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgIGlm
IChhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFycmF5TW9kZSkgewotICAgICAgICAgICAgICAgIEpJ
VDo6Y29tcGlsZUdldEJ5VmFsKCZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLT5j
b2RlQmxvY2soKSwgJmJ5VmFsSW5mbywgU1RVQl9SRVRVUk5fQUREUkVTUywgYXJyYXlNb2RlKTsK
KyAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeVZhbCgmY2FsbEZyYW1lLT52bSgpLCBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBh
cnJheU1vZGUpOwogICAgICAgICAgICAgICAgIGRpZE9wdGltaXplID0gdHJ1ZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQpAQCAtMjU1MSw3ICsyNTUxLDcgQEAgc3RhdGljIHZvaWQgcHV0QnlW
YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbQogICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkp
IHsKICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwog
ICAgICAgICAgICAgaWYgKG9iamVjdC0+Y2FuU2V0SW5kZXhRdWlja2x5KGkpKQotICAgICAgICAg
ICAgICAgIG9iamVjdC0+c2V0SW5kZXhRdWlja2x5KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBp
LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHkoY2FsbEZy
YW1lLT52bSgpLCBpLCB2YWx1ZSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
b2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KG9iamVjdCwgY2FsbEZyYW1lLCBpLCB2
YWx1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwogICAgICAgICB9
IGVsc2UKQEAgLTI1NjEsNyArMjU2MSw3IEBAIHN0YXRpYyB2b2lkIHB1dEJ5VmFsKENhbGxGcmFt
ZSogY2FsbEZyYW0KICAgICAgICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIGpzQ2FzdDxOYW1l
SW5zdGFuY2UqPihzdWJzY3JpcHQuYXNDZWxsKCkpLT5wcml2YXRlTmFtZSgpLCB2YWx1ZSwgc2xv
dCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUs
IHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUpKTsKLSAgICAg
ICAgaWYgKCFjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb24pIHsgLy8gRG9uJ3QgcHV0
IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCisgICAgICAgIGlm
ICghY2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlvbikgeyAvLyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0
IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4KICAgICAgICAgICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICAg
ICAgICAgIGJhc2VWYWx1ZS5wdXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOwog
ICAgICAgICB9CkBAIC0yNTkyLDcgKzI1OTIsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lk
LCBvcF9wdXRfYnlfdmFsCiAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgogICAg
ICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0cnVjdHVy
ZShvYmplY3QtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlW
YWxJbmZvLmFycmF5TW9kZSkgewotICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFs
KCZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgJmJ5VmFs
SW5mbywgU1RVQl9SRVRVUk5fQUREUkVTUywgYXJyYXlNb2RlKTsKKyAgICAgICAgICAgICAgICBK
SVQ6OmNvbXBpbGVQdXRCeVZhbCgmY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLCAmYnlWYWxJbmZvLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBhcnJheU1vZGUpOwogICAgICAg
ICAgICAgICAgIGRpZE9wdGltaXplID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtMjcyNyw3ICsyNzI3LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUs
IG9wXwogICAgIFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCk7CiAgICAgQVNTRVJUKHN0YWNrRnJh
bWUuY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwogICAgIGlmICghb2Jq
ZWN0LT5nZXRQcm9wZXJ0eVNsb3Qoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJn
c1sxXS5pZGVudGlmaWVyKCksIHNsb3QpKSB7Ci0gICAgICAgIHN0YWNrRnJhbWUuZ2xvYmFsRGF0
YS0+ZXhjZXB0aW9uID0gY3JlYXRlRXJyb3JGb3JJbnZhbGlkR2xvYmFsQXNzaWdubWVudChzdGFj
a0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKS5zdHJpbmco
KSk7CisgICAgICAgIHN0YWNrRnJhbWUudm0tPmV4Y2VwdGlvbiA9IGNyZWF0ZUVycm9yRm9ySW52
YWxpZEdsb2JhbEFzc2lnbm1lbnQoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJn
c1sxXS5pZGVudGlmaWVyKCkuc3RyaW5nKCkpOwogICAgICAgICBWTV9USFJPV19FWENFUFRJT04o
KTsKICAgICB9CiAKQEAgLTMxMDQsMTEgKzMxMDQsMTEgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04o
SlNPYmplY3QqLCBvcF9uZXdfcgogCiAgICAgUmVnRXhwKiByZWdFeHAgPSBzdGFja0ZyYW1lLmFy
Z3NbMF0ucmVnRXhwKCk7CiAgICAgaWYgKCFyZWdFeHAtPmlzVmFsaWQoKSkgewotICAgICAgICBz
dGFja0ZyYW1lLmdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVN5bnRheEVycm9yKGNhbGxG
cmFtZSwgIkludmFsaWQgZmxhZ3Mgc3VwcGxpZWQgdG8gUmVnRXhwIGNvbnN0cnVjdG9yLiIpOwor
ICAgICAgICBzdGFja0ZyYW1lLnZtLT5leGNlcHRpb24gPSBjcmVhdGVTeW50YXhFcnJvcihjYWxs
RnJhbWUsICJJbnZhbGlkIGZsYWdzIHN1cHBsaWVkIHRvIFJlZ0V4cCBjb25zdHJ1Y3Rvci4iKTsK
ICAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIFJlZ0V4
cE9iamVjdDo6Y3JlYXRlKCpzdGFja0ZyYW1lLmdsb2JhbERhdGEsIHN0YWNrRnJhbWUuY2FsbEZy
YW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOworICAgIHJldHVybiBS
ZWdFeHBPYmplY3Q6OmNyZWF0ZSgqc3RhY2tGcmFtZS52bSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUt
PmxleGljYWxHbG9iYWxPYmplY3QoKSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCk7CiB9CiAKIERFRklORV9TVFVC
X0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9iaXRvcikKQEAgLTMxNDMsNyArMzE0Myw3IEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBldmFs
KGNhbGxGcmFtZSk7Ci0gICAgaWYgKHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKQor
ICAgIGlmIChzdGFja0ZyYW1lLnZtLT5leGNlcHRpb24pCiAgICAgICAgIHJldHVybiB0aHJvd0V4
Y2VwdGlvbkZyb21PcENhbGw8RW5jb2RlZEpTVmFsdWU+KHN0YWNrRnJhbWUsIGNhbGxGcmFtZSwg
U1RVQl9SRVRVUk5fQUREUkVTUyk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CkBAIC0zMTUyLDcgKzMxNTIsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNW
YWx1ZSwgb3BfCiBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkKiwgb3BfdGhyb3cpCiB7CiAgICAg
U1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotICAgIEV4Y2VwdGlvbkhhbmRsZXIg
aGFuZGxlciA9IGppdFRocm93KHN0YWNrRnJhbWUuZ2xvYmFsRGF0YSwgc3RhY2tGcmFtZS5jYWxs
RnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCksIFNUVUJfUkVUVVJOX0FERFJFU1Mp
OworICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGppdFRocm93KHN0YWNrRnJhbWUudm0s
IHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpLCBTVFVC
X1JFVFVSTl9BRERSRVNTKTsKICAgICBTVFVCX1NFVF9SRVRVUk5fQUREUkVTUyhoYW5kbGVyLmNh
dGNoUm91dGluZSk7CiAgICAgcmV0dXJuIGhhbmRsZXIuY2FsbEZyYW1lOwogfQpAQCAtMzI3OCw3
ICszMjc4LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAg
IEpTVmFsdWUgYmFzZVZhbCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7CiAKICAgICBp
ZiAoIWJhc2VWYWwuaXNPYmplY3QoKSkgewotICAgICAgICBzdGFja0ZyYW1lLmdsb2JhbERhdGEt
PmV4Y2VwdGlvbiA9IGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKHN0YWNrRnJhbWUuY2FsbEZyYW1l
LCAiaW4iLCBiYXNlVmFsKTsKKyAgICAgICAgc3RhY2tGcmFtZS52bS0+ZXhjZXB0aW9uID0gY3Jl
YXRlSW52YWxpZFBhcmFtRXJyb3Ioc3RhY2tGcmFtZS5jYWxsRnJhbWUsICJpbiIsIGJhc2VWYWwp
OwogICAgICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKICAgICB9CiAKQEAgLTM0MDAsNyArMzQw
MCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICB9CiAK
ICAgICBpZiAoIXJlc3VsdCAmJiBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUo
KSkKLSAgICAgICAgc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVUeXBl
RXJyb3Ioc3RhY2tGcmFtZS5jYWxsRnJhbWUsICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIp
OworICAgICAgICBzdGFja0ZyYW1lLnZtLT5leGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3Ioc3Rh
Y2tGcmFtZS5jYWxsRnJhbWUsICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOwogCiAgICAg
Q0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbihyZXN1bHQpKTsKQEAgLTM0MjQsOSArMzQyNCw5IEBAIERFRklORV9TVFVCX0ZV
TkNUSU9OKHZvaWQsIG9wX3B1dF9nZXR0ZXIKICAgICBBU1NFUlQoZ2V0dGVyLmlzT2JqZWN0KCkg
fHwgc2V0dGVyLmlzT2JqZWN0KCkpOwogCiAgICAgaWYgKCFnZXR0ZXIuaXNVbmRlZmluZWQoKSkK
LSAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgYXNP
YmplY3QoZ2V0dGVyKSk7CisgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoY2FsbEZyYW1lLT52
bSgpLCBhc09iamVjdChnZXR0ZXIpKTsKICAgICBpZiAoIXNldHRlci5pc1VuZGVmaW5lZCgpKQot
ICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0dGVyKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBhc09i
amVjdChzZXR0ZXIpKTsKKyAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihjYWxsRnJhbWUtPnZt
KCksIGFzT2JqZWN0KHNldHRlcikpOwogICAgIGJhc2VPYmotPnB1dERpcmVjdEFjY2Vzc29yKGNh
bGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKSwgYWNjZXNzb3IsIEFjY2Vz
c29yKTsKIH0KIApAQCAtMzQzNyw5ICszNDM3LDkgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCwgb3BfdGhyb3dfc3RhdAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5j
YWxsRnJhbWU7CiAgICAgU3RyaW5nIG1lc3NhZ2UgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1
ZSgpLnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSk7CiAgICAgaWYgKHN0YWNr
RnJhbWUuYXJnc1sxXS5hc0ludDMyKQotICAgICAgICBzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmV4
Y2VwdGlvbiA9IGNyZWF0ZVJlZmVyZW5jZUVycm9yKGNhbGxGcmFtZSwgbWVzc2FnZSk7CisgICAg
ICAgIHN0YWNrRnJhbWUudm0tPmV4Y2VwdGlvbiA9IGNyZWF0ZVJlZmVyZW5jZUVycm9yKGNhbGxG
cmFtZSwgbWVzc2FnZSk7CiAgICAgZWxzZQotICAgICAgICBzdGFja0ZyYW1lLmdsb2JhbERhdGEt
PmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjYWxsRnJhbWUsIG1lc3NhZ2UpOworICAgICAg
ICBzdGFja0ZyYW1lLnZtLT5leGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY2FsbEZyYW1lLCBt
ZXNzYWdlKTsKICAgICBWTV9USFJPV19FWENFUFRJT05fQVRfRU5EKCk7CiB9CiAKQEAgLTM0NTQs
MTQgKzM0NTQsMTQgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfZGVidWcpCiAgICAg
aW50IGxhc3RMaW5lID0gc3RhY2tGcmFtZS5hcmdzWzJdLmludDMyKCk7CiAgICAgaW50IGNvbHVt
biA9IHN0YWNrRnJhbWUuYXJnc1szXS5pbnQzMigpOwogCi0gICAgc3RhY2tGcmFtZS5nbG9iYWxE
YXRhLT5pbnRlcnByZXRlci0+ZGVidWcoY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxEZWJ1Z0hvb2tJ
RD4oZGVidWdIb29rSUQpLCBmaXJzdExpbmUsIGxhc3RMaW5lLCBjb2x1bW4pOworICAgIHN0YWNr
RnJhbWUudm0tPmludGVycHJldGVyLT5kZWJ1ZyhjYWxsRnJhbWUsIHN0YXRpY19jYXN0PERlYnVn
SG9va0lEPihkZWJ1Z0hvb2tJRCksIGZpcnN0TGluZSwgbGFzdExpbmUsIGNvbHVtbik7CiB9CiAK
IERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCB2bV90aHJvdykKIHsKICAgICBTVFVCX0lOSVRf
U1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0g
c3RhY2tGcmFtZS5nbG9iYWxEYXRhOwotICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGpp
dFRocm93KGdsb2JhbERhdGEsIHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBnbG9iYWxEYXRhLT5leGNl
cHRpb24sIGdsb2JhbERhdGEtPmV4Y2VwdGlvbkxvY2F0aW9uKTsKKyAgICBWTSogdm0gPSBzdGFj
a0ZyYW1lLnZtOworICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGppdFRocm93KHZtLCBz
dGFja0ZyYW1lLmNhbGxGcmFtZSwgdm0tPmV4Y2VwdGlvbiwgdm0tPmV4Y2VwdGlvbkxvY2F0aW9u
KTsKICAgICBTVFVCX1NFVF9SRVRVUk5fQUREUkVTUyhoYW5kbGVyLmNhdGNoUm91dGluZSk7CiAg
ICAgcmV0dXJuIGhhbmRsZXIuY2FsbEZyYW1lOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YnMuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIENv
ZGVCbG9jazsKIGNsYXNzIEV4ZWN1dGFibGVQb29sOwogY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxl
OwogY2xhc3MgSWRlbnRpZmllcjsKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwogY2xh
c3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBKU09iamVjdDsKIGNsYXNzIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3I7CkBAIC05OCw3ICs5OCw3IEBAIHN0cnVjdCBKSVRTdGFja0ZyYW1lIHsKICAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZTsKICAgICB2b2lkKiB1bnVzZWQxOwogICAgIHZvaWQqIHVudXNl
ZDI7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhOworICAgIFZNKiB2bTsKIAogICAgIHZv
aWQqIHNhdmVkUkJYOwogICAgIHZvaWQqIHNhdmVkUjE1OwpAQCAtMTM0LDcgKzEzNCw3IEBAIHN0
cnVjdCBKSVRTdGFja0ZyYW1lIHsKIAogICAgIC8vIFBhc3NlZCBvbiB0aGUgc3RhY2sKICAgICB2
b2lkKiB1bnVzZWQyOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YTsKKyAgICBWTSogdm07
CiAKICAgICAvLyBXaGVuIEpJVCBjb2RlIG1ha2VzIGEgY2FsbCwgaXQgcHVzaGVzIGl0cyByZXR1
cm4gYWRkcmVzcyBqdXN0IGJlbG93IHRoZSByZXN0IG9mIHRoZSBzdGFjay4KICAgICBSZXR1cm5B
ZGRyZXNzUHRyKiByZXR1cm5BZGRyZXNzU2xvdCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
UmV0dXJuQWRkcmVzc1B0cio+KHRoaXMpIC0gMTsgfQpAQCAtMTYyLDcgKzE2Miw3IEBAIHN0cnVj
dCBKSVRTdGFja0ZyYW1lIHsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZTsKICAgICB2b2lkKiB1
bnVzZWQxOwogICAgIHZvaWQqIHVudXNlZDI7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
OworICAgIFZNKiB2bTsKICAgICAgICAgCiAgICAgLy8gV2hlbiBKSVQgY29kZSBtYWtlcyBhIGNh
bGwsIGl0IHB1c2hlcyBpdHMgcmV0dXJuIGFkZHJlc3MganVzdCBiZWxvdyB0aGUgcmVzdCBvZiB0
aGUgc3RhY2suCiAgICAgUmV0dXJuQWRkcmVzc1B0ciogcmV0dXJuQWRkcmVzc1Nsb3QoKSB7IHJl
dHVybiByZWludGVycHJldF9jYXN0PFJldHVybkFkZHJlc3NQdHIqPih0aGlzKSAtIDE7IH0KQEAg
LTE5Myw3ICsxOTMsNyBAQCBzdHJ1Y3QgSklUU3RhY2tGcmFtZSB7CiAKICAgICAvLyBUaGVzZSBh
cmd1bWVudHMgcGFzc2VkIG9uIHRoZSBzdGFjay4KICAgICB2b2lkKiB1bnVzZWQxOwotICAgIEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YTsKKyAgICBWTSogdm07CiAgICAgICAgIAogICAgIFJldHVy
bkFkZHJlc3NQdHIqIHJldHVybkFkZHJlc3NTbG90KCkgeyByZXR1cm4gJnRodW5rUmV0dXJuQWRk
cmVzczsgfQogfTsKQEAgLTIyMyw3ICsyMjMsNyBAQCBzdHJ1Y3QgSklUU3RhY2tGcmFtZSB7CiAK
ICAgICAvLyBUaGVzZSBhcmd1bWVudHMgcGFzc2VkIG9uIHRoZSBzdGFjay4KICAgICB2b2lkKiB1
bnVzZWQyOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YTsKKyAgICBWTSogdm07CiAKICAg
ICAvLyBXaGVuIEpJVCBjb2RlIG1ha2VzIGEgY2FsbCwgaXQgcHVzaGVzIGl0cyByZXR1cm4gYWRk
cmVzcyBqdXN0IGJlbG93IHRoZSByZXN0IG9mIHRoZSBzdGFjay4KICAgICBSZXR1cm5BZGRyZXNz
UHRyKiByZXR1cm5BZGRyZXNzU2xvdCgpIHsgcmV0dXJuICZ0aHVua1JldHVybkFkZHJlc3M7IH0K
QEAgLTI1Nyw3ICsyNTcsNyBAQCBzdHJ1Y3QgSklUU3RhY2tGcmFtZSB7CiAKICAgICAvLyBUaGVz
ZSBhcmd1bWVudHMgcGFzc2VkIG9uIHRoZSBzdGFjay4KICAgICB2b2lkKiB1bnVzZWQyOwotICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YTsKKyAgICBWTSogdm07CiAKICAgICBSZXR1cm5BZGRy
ZXNzUHRyKiByZXR1cm5BZGRyZXNzU2xvdCgpIHsgcmV0dXJuICZ0aHVua1JldHVybkFkZHJlc3M7
IH0KIH07CkBAIC0yNzgsNyArMjc4LDcgQEAgc3RydWN0IEpJVFN0YWNrRnJhbWUgewogICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lOwogICAgIEpTVmFsdWUqIGV4Y2VwdGlvbjsKICAgICB2b2lkKiB1
bnVzZWQxOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YTsKKyAgICBWTSogdm07CiAKICAg
ICBSZXR1cm5BZGRyZXNzUHRyKiByZXR1cm5BZGRyZXNzU2xvdCgpIHsgcmV0dXJuICZ0aHVua1Jl
dHVybkFkZHJlc3M7IH0KIH07CkBAIC0zMDcsNyArMzA3LDcgQEAgc3RydWN0IEpJVFN0YWNrRnJh
bWUgewogCiBleHRlcm4gIkMiIHZvaWQgY3RpVk1UaHJvd1RyYW1wb2xpbmUoKTsKIGV4dGVybiAi
QyIgdm9pZCBjdGlPcFRocm93Tm90Q2F1Z2h0KCk7Ci1leHRlcm4gIkMiIEVuY29kZWRKU1ZhbHVl
IGN0aVRyYW1wb2xpbmUodm9pZCogY29kZSwgSlNTdGFjayosIENhbGxGcmFtZSosIHZvaWQqIC8q
dW51c2VkMSovLCB2b2lkKiAvKnVudXNlZDIqLywgSlNHbG9iYWxEYXRhKik7CitleHRlcm4gIkMi
IEVuY29kZWRKU1ZhbHVlIGN0aVRyYW1wb2xpbmUodm9pZCogY29kZSwgSlNTdGFjayosIENhbGxG
cmFtZSosIHZvaWQqIC8qdW51c2VkMSovLCB2b2lkKiAvKnVudXNlZDIqLywgVk0qKTsKICNpZiBF
TkFCTEUoREZHX0pJVCkKIGV4dGVybiAiQyIgdm9pZCBjdGlUcmFtcG9saW5lRW5kKCk7CiAKQEAg
LTMxOCw3ICszMTgsNyBAQCBpbmxpbmUgYm9vbCByZXR1cm5BZGRyZXNzSXNJbkN0aVRyYW1wb2xp
CiB9CiAjZW5kaWYKIAotdm9pZCBwZXJmb3JtUGxhdGZvcm1TcGVjaWZpY0pJVEFzc2VydGlvbnMo
SlNHbG9iYWxEYXRhKik7Cit2b2lkIHBlcmZvcm1QbGF0Zm9ybVNwZWNpZmljSklUQXNzZXJ0aW9u
cyhWTSopOwogCiBleHRlcm4gIkMiIHsKIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9h
ZGQoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CkBAIC00NDgsNyArNDQ4LDcg
QEAgdm9pZCogSklUX1NUVUIgY3RpX3ZtX3Rocm93KFNUVUJfQVJHU19ERQogI2VsaWYgRU5BQkxF
KExMSU5UX0NfTE9PUCkKIAogc3RydWN0IEpJVFN0YWNrRnJhbWUgewotICAgIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YTsKKyAgICBWTSogdm07CiB9OwogCiAjZW5kaWYgLy8gRU5BQkxFKExMSU5U
X0NfTE9PUCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAJKHJl
dmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiRXhlY3V0YWJs
ZS5oIgogI2luY2x1ZGUgIkpJVC5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1
ZGUgIlZNLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAg
LTQ0LDU2ICs0NCw1NiBAQCBKSVRUaHVua3M6On5KSVRUaHVua3MoKQogewogfQogCi1NYWNyb0Fz
c2VtYmxlckNvZGVQdHIgSklUVGh1bmtzOjpjdGlOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBKSVRUaHVua3M6OmN0aU5hdGl2ZUNhbGwo
Vk0qIHZtKQogewogI2lmIEVOQUJMRShMTElOVCkKLSAgICBpZiAoIWdsb2JhbERhdGEtPmNhblVz
ZUpJVCgpKQorICAgIGlmICghdm0tPmNhblVzZUpJVCgpKQogICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVMTEludENvZGVQdHIobGxpbnRfbmF0aXZlX2NhbGxfdHJh
bXBvbGluZSk7CiAjZW5kaWYKLSAgICByZXR1cm4gY3RpU3R1YihnbG9iYWxEYXRhLCBuYXRpdmVD
YWxsR2VuZXJhdG9yKS5jb2RlKCk7CisgICAgcmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZUNhbGxH
ZW5lcmF0b3IpLmNvZGUoKTsKIH0KLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBKSVRUaHVua3M6OmN0
aU5hdGl2ZUNvbnN0cnVjdChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgSklUVGh1bmtzOjpjdGlOYXRpdmVDb25zdHJ1Y3QoVk0qIHZtKQogewogI2lmIEVO
QUJMRShMTElOVCkKLSAgICBpZiAoIWdsb2JhbERhdGEtPmNhblVzZUpJVCgpKQorICAgIGlmICgh
dm0tPmNhblVzZUpJVCgpKQogICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpj
cmVhdGVMTEludENvZGVQdHIobGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lKTsKICNl
bmRpZgotICAgIHJldHVybiBjdGlTdHViKGdsb2JhbERhdGEsIG5hdGl2ZUNvbnN0cnVjdEdlbmVy
YXRvcikuY29kZSgpOworICAgIHJldHVybiBjdGlTdHViKHZtLCBuYXRpdmVDb25zdHJ1Y3RHZW5l
cmF0b3IpLmNvZGUoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIEpJVFRodW5rczo6Y3Rp
U3R1YihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZiBKSVRUaHVua3M6OmN0aVN0dWIoVk0qIHZtLCBUaHVua0dl
bmVyYXRvciBnZW5lcmF0b3IpCiB7CiAgICAgQ1RJU3R1Yk1hcDo6QWRkUmVzdWx0IGVudHJ5ID0g
bV9jdGlTdHViTWFwLmFkZChnZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpKTsKICAg
ICBpZiAoZW50cnkuaXNOZXdFbnRyeSkKLSAgICAgICAgZW50cnkuaXRlcmF0b3ItPnZhbHVlID0g
Z2VuZXJhdG9yKGdsb2JhbERhdGEpOworICAgICAgICBlbnRyeS5pdGVyYXRvci0+dmFsdWUgPSBn
ZW5lcmF0b3Iodm0pOwogICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKLU5h
dGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1YihKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25z
dHJ1Y3RvcikKK05hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1YihW
TSogdm0sIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3Rv
cikKIHsKICAgICBpZiAoTmF0aXZlRXhlY3V0YWJsZSogbmF0aXZlRXhlY3V0YWJsZSA9IG1faG9z
dEZ1bmN0aW9uU3R1Yk1hcC0+Z2V0KGZ1bmN0aW9uKSkKICAgICAgICAgcmV0dXJuIG5hdGl2ZUV4
ZWN1dGFibGU7CiAKLSAgICBOYXRpdmVFeGVjdXRhYmxlKiBuYXRpdmVFeGVjdXRhYmxlID0gTmF0
aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBKSVQ6OmNvbXBpbGVDVElOYXRpdmVD
YWxsKGdsb2JhbERhdGEsIGZ1bmN0aW9uKSwgZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGN0aU5hdGl2ZUNvbnN0cnVjdChnbG9iYWxEYXRh
KSksIGNvbnN0cnVjdG9yLCBOb0ludHJpbnNpYyk7CisgICAgTmF0aXZlRXhlY3V0YWJsZSogbmF0
aXZlRXhlY3V0YWJsZSA9IE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqdm0sIEpJVDo6Y29tcGls
ZUNUSU5hdGl2ZUNhbGwodm0sIGZ1bmN0aW9uKSwgZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGN0aU5hdGl2ZUNvbnN0cnVjdCh2bSkpLCBj
b25zdHJ1Y3RvciwgTm9JbnRyaW5zaWMpOwogICAgIHdlYWtBZGQoKm1faG9zdEZ1bmN0aW9uU3R1
Yk1hcCwgZnVuY3Rpb24sIFBhc3NXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+KG5hdGl2ZUV4ZWN1dGFi
bGUpKTsKICAgICByZXR1cm4gbmF0aXZlRXhlY3V0YWJsZTsKIH0KIAotTmF0aXZlRXhlY3V0YWJs
ZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
TmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciwgSW50cmlu
c2ljIGludHJpbnNpYykKK05hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW9u
U3R1YihWTSogdm0sIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBUaHVua0dlbmVyYXRvciBnZW5l
cmF0b3IsIEludHJpbnNpYyBpbnRyaW5zaWMpCiB7CiAgICAgaWYgKE5hdGl2ZUV4ZWN1dGFibGUq
IG5hdGl2ZUV4ZWN1dGFibGUgPSBtX2hvc3RGdW5jdGlvblN0dWJNYXAtPmdldChmdW5jdGlvbikp
CiAgICAgICAgIHJldHVybiBuYXRpdmVFeGVjdXRhYmxlOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGNvZGU7CiAgICAgaWYgKGdlbmVyYXRvcikgewotICAgICAgICBpZiAoZ2xvYmFsRGF0
YS0+Y2FuVXNlSklUKCkpCi0gICAgICAgICAgICBjb2RlID0gZ2VuZXJhdG9yKGdsb2JhbERhdGEp
OworICAgICAgICBpZiAodm0tPmNhblVzZUpJVCgpKQorICAgICAgICAgICAgY29kZSA9IGdlbmVy
YXRvcih2bSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvZGUgPSBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYoKTsKICAgICB9IGVsc2UKLSAgICAgICAgY29kZSA9IEpJVDo6Y29tcGlsZUNUSU5h
dGl2ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuY3Rpb24pOworICAgICAgICBjb2RlID0gSklUOjpjb21w
aWxlQ1RJTmF0aXZlQ2FsbCh2bSwgZnVuY3Rpb24pOwogCi0gICAgTmF0aXZlRXhlY3V0YWJsZSog
bmF0aXZlRXhlY3V0YWJsZSA9IE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwg
Y29kZSwgZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRD
b2RlUmVmKGN0aU5hdGl2ZUNvbnN0cnVjdChnbG9iYWxEYXRhKSksIGNhbGxIb3N0RnVuY3Rpb25B
c0NvbnN0cnVjdG9yLCBpbnRyaW5zaWMpOworICAgIE5hdGl2ZUV4ZWN1dGFibGUqIG5hdGl2ZUV4
ZWN1dGFibGUgPSBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKnZtLCBjb2RlLCBmdW5jdGlvbiwg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZl
Q29uc3RydWN0KHZtKSksIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBpbnRyaW5zaWMp
OwogICAgIHdlYWtBZGQoKm1faG9zdEZ1bmN0aW9uU3R1Yk1hcCwgZnVuY3Rpb24sIFBhc3NXZWFr
PE5hdGl2ZUV4ZWN1dGFibGU+KG5hdGl2ZUV4ZWN1dGFibGUpKTsKICAgICByZXR1cm4gbmF0aXZl
RXhlY3V0YWJsZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
Y2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiBjbGFzcyBOYXRpdmVFeGVjdXRhYmxlOwog
CiBjbGFzcyBKSVRUaHVua3MgewpAQCAtNTEsMTMgKzUxLDEzIEBAIHB1YmxpYzoKICAgICBKSVRU
aHVua3MoKTsKICAgICB+SklUVGh1bmtzKCk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
Y3RpTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
Y3RpTmF0aXZlQ29uc3RydWN0KEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBjdGlOYXRpdmVDYWxsKFZNKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aU5h
dGl2ZUNvbnN0cnVjdChWTSopOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGN0aVN0dWIo
SlNHbG9iYWxEYXRhKiwgVGh1bmtHZW5lcmF0b3IpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBjdGlTdHViKFZNKiwgVGh1bmtHZW5lcmF0b3IpOwogCi0gICAgTmF0aXZlRXhlY3V0YWJsZSog
aG9zdEZ1bmN0aW9uU3R1YihKU0dsb2JhbERhdGEqLCBOYXRpdmVGdW5jdGlvbiwgTmF0aXZlRnVu
Y3Rpb24gY29uc3RydWN0b3IpOwotICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5jdGlvblN0
dWIoSlNHbG9iYWxEYXRhKiwgTmF0aXZlRnVuY3Rpb24sIFRodW5rR2VuZXJhdG9yLCBJbnRyaW5z
aWMpOworICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5jdGlvblN0dWIoVk0qLCBOYXRpdmVG
dW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpOworICAgIE5hdGl2ZUV4ZWN1dGFi
bGUqIGhvc3RGdW5jdGlvblN0dWIoVk0qLCBOYXRpdmVGdW5jdGlvbiwgVGh1bmtHZW5lcmF0b3Is
IEludHJpbnNpYyk7CiAKICAgICB2b2lkIGNsZWFySG9zdEZ1bmN0aW9uU3R1YnMoKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXcml0ZUJhcnJpZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFycmllci5oCShyZXZpc2lv
biAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFycmllci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xh
c3MgSlNDZWxsOwotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiAKIC8vIE5lZWRzIHRv
IGJlIGV2ZW4gdG8gYXBwZWFzZSBzb21lIG9mIHRoZSBiYWNrZW5kcy4KICNkZWZpbmUgSklUV3Jp
dGVCYXJyaWVyRmxhZyAoKHZvaWQqKTIpCkBAIC03Nyw3ICs3Nyw3IEBAIHByb3RlY3RlZDoKICAg
ICB7CiAgICAgfQogCi0gICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiwgQ29kZUxvY2F0aW9uRGF0
YUxhYmVsUHRyIGxvY2F0aW9uLCBKU0NlbGwqIG93bmVyLCBKU0NlbGwqIHZhbHVlKQorICAgIHZv
aWQgc2V0KFZNJiwgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGxvY2F0aW9uLCBKU0NlbGwqIG93
bmVyLCBKU0NlbGwqIHZhbHVlKQogICAgIHsKICAgICAgICAgSGVhcDo6d3JpdGVCYXJyaWVyKG93
bmVyLCB2YWx1ZSk7CiAgICAgICAgIG1fbG9jYXRpb24gPSBsb2NhdGlvbjsKQEAgLTExNiwxNSAr
MTE2LDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBzZXQoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgbG9jYXRpb24sIEpTQ2Vs
bCogb3duZXIsIFQqIHZhbHVlKQorICAgIHZvaWQgc2V0KFZNJiB2bSwgQ29kZUxvY2F0aW9uRGF0
YUxhYmVsUHRyIGxvY2F0aW9uLCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkKICAgICB7CiAgICAg
ICAgIHZhbGlkYXRlQ2VsbChvd25lcik7CiAgICAgICAgIHZhbGlkYXRlQ2VsbCh2YWx1ZSk7Ci0g
ICAgICAgIEpJVFdyaXRlQmFycmllckJhc2U6OnNldChnbG9iYWxEYXRhLCBsb2NhdGlvbiwgb3du
ZXIsIHZhbHVlKTsKKyAgICAgICAgSklUV3JpdGVCYXJyaWVyQmFzZTo6c2V0KHZtLCBsb2NhdGlv
biwgb3duZXIsIHZhbHVlKTsKICAgICB9Ci0gICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkKKyAgICB2b2lkIHNldChWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIFQqIHZhbHVlKQogICAgIHsKLSAgICAgICAgc2V0KGdsb2JhbERhdGEsIGxv
Y2F0aW9uKCksIG93bmVyLCB2YWx1ZSk7CisgICAgICAgIHNldCh2bSwgbG9jYXRpb24oKSwgb3du
ZXIsIHZhbHVlKTsKICAgICB9CiAgICAgVCogZ2V0KCkgY29uc3QKICAgICB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAkocmV2aXNp
b24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5r
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEwICs1NSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGVtaXRMb2FkSlNDZWxsKHNyYywgZHN0KSk7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgbG9hZEpTU3RyaW5nQXJndW1lbnQo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBpbnQgYXJndW1lbnQsIFJlZ2lzdGVySUQgZHN0KQor
ICAgICAgICB2b2lkIGxvYWRKU1N0cmluZ0FyZ3VtZW50KFZNJiB2bSwgaW50IGFyZ3VtZW50LCBS
ZWdpc3RlcklEIGRzdCkKICAgICAgICAgewogICAgICAgICAgICAgbG9hZENlbGxBcmd1bWVudChh
cmd1bWVudCwgZHN0KTsKLSAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhkc3QsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tUHRyKGdsb2JhbERhdGEuc3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAg
bV9mYWlsdXJlcy5hcHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKGRzdCwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIodm0uc3RyaW5nU3RydWN0dXJlLmdl
dCgpKSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2b2lkIGxvYWRJbnQzMkFyZ3Vt
ZW50KGludCBhcmd1bWVudCwgUmVnaXN0ZXJJRCBkc3QsIEp1bXAmIGZhaWxUYXJnZXQpCkBAIC0x
MzAsOSArMTMwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXQoKTsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZpbmFsaXplKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZhbGxiYWNrLCBj
b25zdCBjaGFyKiB0aHVua0tpbmQpCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmaW5h
bGl6ZShWTSYgdm0sIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmYWxsYmFjaywgY29uc3QgY2hhciog
dGh1bmtLaW5kKQogICAgICAgICB7Ci0gICAgICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KGdsb2JhbERhdGEsIHRoaXMsIEdMT0JBTF9USFVOS19JRCk7CisgICAgICAgICAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKHZtLCB0aGlzLCBHTE9CQUxfVEhVTktfSUQpOwogICAgICAgICAgICAg
cGF0Y2hCdWZmZXIubGluayhtX2ZhaWx1cmVzLCBDb2RlTG9jYXRpb25MYWJlbChmYWxsYmFjaykp
OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FsbHMuc2l6ZSgpOyBp
KyspCiAgICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzW2ldLmZpcnN0LCBt
X2NhbGxzW2ldLnNlY29uZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5r
R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVu
a0dlbmVyYXRvci5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1RodW5rR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEwICszMSwxMCBAQAog
I2lmIEVOQUJMRShKSVQpCiAKIG5hbWVzcGFjZSBKU0MgewotY2xhc3MgSlNHbG9iYWxEYXRhOwor
Y2xhc3MgVk07CiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY7CiAKLXR5cGVkZWYgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmICgqVGh1bmtHZW5lcmF0b3IpKEpTR2xvYmFsRGF0YSopOwordHlwZWRl
ZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgKCpUaHVua0dlbmVyYXRvcikoVk0qKTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5r
R2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIEpTSW50ZXJmYWNlSklUOjpDYWxsIGdlbmVy
YXRlU2xvd0Nhc2VGb3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU0ludGVyZmFjZUpJVCYg
aml0KQorc3RhdGljIEpTSW50ZXJmYWNlSklUOjpDYWxsIGdlbmVyYXRlU2xvd0Nhc2VGb3IoVk0q
IHZtLCBKU0ludGVyZmFjZUpJVCYgaml0KQogewogICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyKTsK
ICAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6U2NvcGVDaGFp
biwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOwpAQCAtNDgs
NyArNDgsNyBAQCBzdGF0aWMgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgZ2VuZXJhdGVTbG93CiAgICAg
aml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihKU0ludGVyZmFjZUpJVDo6cmVnVDMsIEpTU3Rh
Y2s6OlJldHVyblBDKTsKICAgICBqaXQuZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZyYW1lSGVhZGVy
KDAsIEpTU3RhY2s6OkNvZGVCbG9jayk7CiAKLSAgICBqaXQuc3RvcmVQdHIoSlNJbnRlcmZhY2VK
SVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCAmZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsKKyAgICBq
aXQuc3RvcmVQdHIoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENh
bGxGcmFtZSk7CiAgICAgaml0LnJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwogICAgIEpTSW50
ZXJmYWNlSklUOjpDYWxsIGNhbGxOb3RKU0Z1bmN0aW9uID0gaml0LmNhbGwoKTsKICAgICBqaXQu
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIEpTSW50
ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3Rlcik7CkBAIC01OCw3ICs1OCw3IEBAIHN0YXRpYyBK
U0ludGVyZmFjZUpJVDo6Q2FsbCBnZW5lcmF0ZVNsb3cKICAgICByZXR1cm4gY2FsbE5vdEpTRnVu
Y3Rpb247CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0ZvckdlbmVyYXRv
cihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEZ1bmN0aW9uUHRyIGxhenlMaW5rLCBGdW5jdGlv
blB0ciBub3RKU0Z1bmN0aW9uLCBjb25zdCBjaGFyKiBuYW1lKQorc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBsaW5rRm9yR2VuZXJhdG9yKFZNKiB2bSwgRnVuY3Rpb25QdHIgbGF6eUxpbmss
IEZ1bmN0aW9uUHRyIG5vdEpTRnVuY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUpCiB7CiAgICAgSlNJ
bnRlcmZhY2VKSVQgaml0OwogICAgIApAQCAtODAsMzggKzgwLDM4IEBAIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgbGlua0ZvckdlbmUKICAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNz
QWZ0ZXJDYWxsKEpTSW50ZXJmYWNlSklUOjpyZWdUMyk7CiAgICAgaml0LmVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihKU0ludGVyZmFjZUpJVDo6cmVnVDMsIEpTU3RhY2s6OlJldHVyblBDKTsKICAg
ICAKLSAgICBqaXQuc3RvcmVQdHIoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCAm
Z2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsKKyAgICBqaXQuc3RvcmVQdHIoSlNJbnRlcmZhY2VK
SVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7CiAgICAgaml0LnJlc3Rv
cmVBcmd1bWVudFJlZmVyZW5jZSgpOwogICAgIEpTSW50ZXJmYWNlSklUOjpDYWxsIGNhbGxMYXp5
TGluayA9IGppdC5jYWxsKCk7CiAgICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0
dXJuKEpTSW50ZXJmYWNlSklUOjpyZWdUMyk7CiAgICAgaml0Lmp1bXAoSlNJbnRlcmZhY2VKSVQ6
OnJlZ1QwKTsKICAgICAKICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwotICAgIEpTSW50ZXJmYWNl
SklUOjpDYWxsIGNhbGxOb3RKU0Z1bmN0aW9uID0gZ2VuZXJhdGVTbG93Q2FzZUZvcihnbG9iYWxE
YXRhLCBqaXQpOworICAgIEpTSW50ZXJmYWNlSklUOjpDYWxsIGNhbGxOb3RKU0Z1bmN0aW9uID0g
Z2VuZXJhdGVTbG93Q2FzZUZvcih2bSwgaml0KTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHBhdGNoQnVm
ZmVyLmxpbmsoY2FsbExhenlMaW5rLCBsYXp5TGluayk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhj
YWxsTm90SlNGdW5jdGlvbiwgbm90SlNGdW5jdGlvbik7CiAgICAgCiAgICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsICgibGluayAlcyB0cmFtcG9saW5lIiwgbmFtZSkpOwogfQog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsR2VuZXJhdG9yKFZNKiB2
bSkKIHsKLSAgICByZXR1cm4gbGlua0ZvckdlbmVyYXRvcihnbG9iYWxEYXRhLCBGdW5jdGlvblB0
cihjdGlfdm1fbGF6eUxpbmtDYWxsKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5j
dGlvbiksICJjYWxsIik7CisgICAgcmV0dXJuIGxpbmtGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9u
UHRyKGN0aV92bV9sYXp5TGlua0NhbGwpLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9Ob3RKU0Z1
bmN0aW9uKSwgImNhbGwiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1
Y3RHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBsaW5rRm9y
R2VuZXJhdG9yKGdsb2JhbERhdGEsIEZ1bmN0aW9uUHRyKGN0aV92bV9sYXp5TGlua0NvbnN0cnVj
dCksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3RfTm90SlNDb25zdHJ1Y3QpLCAiY29uc3Ry
dWN0Iik7CisgICAgcmV0dXJuIGxpbmtGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV92
bV9sYXp5TGlua0NvbnN0cnVjdCksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3RfTm90SlND
b25zdHJ1Y3QpLCAiY29uc3RydWN0Iik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5r
Q2xvc3VyZUNhbGxHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0
dXJuIGxpbmtGb3JHZW5lcmF0b3IoZ2xvYmFsRGF0YSwgRnVuY3Rpb25QdHIoY3RpX3ZtX2xhenlM
aW5rQ2xvc3VyZUNhbGwpLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKSwg
ImNsb3N1cmUgY2FsbCIpOworICAgIHJldHVybiBsaW5rRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlv
blB0cihjdGlfdm1fbGF6eUxpbmtDbG9zdXJlQ2FsbCksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxs
X05vdEpTRnVuY3Rpb24pLCAiY2xvc3VyZSBjYWxsIik7CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgdmlydHVhbEZvckdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IEZ1bmN0aW9uUHRyIGNvbXBpbGUsIEZ1bmN0aW9uUHRyIG5vdEpTRnVuY3Rpb24sIGNvbnN0IGNo
YXIqIG5hbWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3N0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgdmlydHVhbEZvckdlbmVyYXRvcihWTSogdm0sIEZ1bmN0aW9uUHRyIGNvbXBp
bGUsIEZ1bmN0aW9uUHRyIG5vdEpTRnVuY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUsIENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCkKIHsKICAgICBKU0ludGVyZmFjZUpJVCBqaXQ7CiAgICAgCkBA
IC0xMzEsNyArMTMxLDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9y
RwogICAgIGppdC5sb2FkUHRyKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklU
OjpyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLCBKU0ludGVyZmFjZUpJ
VDo6cmVnVDIpOwogICAgIEpTSW50ZXJmYWNlSklUOjpKdW1wIGhhc0NvZGVCbG9jazEgPSBqaXQu
YnJhbmNoMzIoSlNJbnRlcmZhY2VKSVQ6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgSlNJbnRlcmZhY2VK
SVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyLCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9m
ZnNldE9mTnVtUGFyYW1ldGVyc0ZvcihraW5kKSksIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1t
MzIoMCkpOwogICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoSlNJbnRlcmZh
Y2VKSVQ6OnJlZ1QzKTsKLSAgICBqaXQuc3RvcmVQdHIoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFt
ZVJlZ2lzdGVyLCAmZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsKKyAgICBqaXQuc3RvcmVQdHIo
SlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7CiAg
ICAgaml0LnJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwogICAgIEpTSW50ZXJmYWNlSklUOjpD
YWxsIGNhbGxDb21waWxlID0gaml0LmNhbGwoKTsKICAgICBqaXQucmVzdG9yZVJldHVybkFkZHJl
c3NCZWZvcmVSZXR1cm4oSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzKTsKQEAgLTE0MiwyNiArMTQyLDI2
IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbEZvckcKICAgICBqaXQuanVt
cChKU0ludGVyZmFjZUpJVDo6cmVnVDApOwogICAgIAogICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7
Ci0gICAgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgY2FsbE5vdEpTRnVuY3Rpb24gPSBnZW5lcmF0ZVNs
b3dDYXNlRm9yKGdsb2JhbERhdGEsIGppdCk7CisgICAgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgY2Fs
bE5vdEpTRnVuY3Rpb24gPSBnZW5lcmF0ZVNsb3dDYXNlRm9yKHZtLCBqaXQpOwogICAgIAotICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIEdMT0JBTF9USFVOS19J
RCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19J
RCk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsQ29tcGlsZSwgY29tcGlsZSk7CiAgICAgcGF0
Y2hCdWZmZXIubGluayhjYWxsTm90SlNGdW5jdGlvbiwgbm90SlNGdW5jdGlvbik7CiAgICAgCiAg
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgidmlydHVhbCAlcyB0cmFtcG9s
aW5lIiwgbmFtZSkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENhbGxHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZp
cnR1YWxDYWxsR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gdmlydHVhbEZvckdlbmVy
YXRvcihnbG9iYWxEYXRhLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9qaXRDb21waWxlKSwgRnVu
Y3Rpb25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbiksICJjYWxsIiwgQ29kZUZvckNhbGwp
OworICAgIHJldHVybiB2aXJ0dWFsRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihjdGlfb3Bf
Y2FsbF9qaXRDb21waWxlKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbiks
ICJjYWxsIiwgQ29kZUZvckNhbGwpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVh
bENvbnN0cnVjdEdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgdmlydHVhbENvbnN0cnVjdEdlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0
dXJuIHZpcnR1YWxGb3JHZW5lcmF0b3IoZ2xvYmFsRGF0YSwgRnVuY3Rpb25QdHIoY3RpX29wX2Nv
bnN0cnVjdF9qaXRDb21waWxlKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9Ob3RKU0Nv
bnN0cnVjdCksICJjb25zdHJ1Y3QiLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICByZXR1cm4gdmly
dHVhbEZvckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9qaXRDb21w
aWxlKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdCksICJjb25z
dHJ1Y3QiLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0
cmluZ0xlbmd0aFRyYW1wb2xpbmVHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0cmluZ0xlbmd0aFRyYW1wb2xpbmVHZW5lcmF0b3IoVk0q
IHZtKQogewogICAgIEpTSW50ZXJmYWNlSklUIGppdDsKICAgICAKQEAgLTE3MSw3ICsxNzEsNyBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3RyaW5nTGVuZ3RoVHJhbXBvCiAgICAgSlNJbnRlcmZh
Y2VKSVQ6Okp1bXAgZmFpbHVyZUNhc2VzMiA9IGppdC5icmFuY2hQdHIoCiAgICAgICAgIEpTSW50
ZXJmYWNlSklUOjpOb3RFcXVhbCwgSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoCiAgICAgICAgICAg
ICBKU0ludGVyZmFjZUpJVDo6cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAg
ICAgICBKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbVB0cihnbG9iYWxEYXRhLT5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAgSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIodm0t
PnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwogCiAgICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdl
dCB0aGUgbGVuZ3RoIGZyb20gdGhlIFVzdHJpbmcuCiAgICAgaml0LmxvYWQzMigKQEAgLTE5Myw3
ICsxOTMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3RyaW5nTGVuZ3RoVHJhbXBvCiAgICAg
SlNJbnRlcmZhY2VKSVQ6Okp1bXAgZmFpbHVyZUNhc2VzMiA9IGppdC5icmFuY2hQdHIoCiAgICAg
ICAgIEpTSW50ZXJmYWNlSklUOjpOb3RFcXVhbCwKICAgICAgICAgSlNJbnRlcmZhY2VKSVQ6OkFk
ZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwK
LSAgICAgICAgSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsRGF0YS0+c3RyaW5n
U3RydWN0dXJlLmdldCgpKSk7CisgICAgICAgIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRy
KHZtLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKIAogICAgIC8vIENoZWNrcyBvdXQgb2theSEg
LSBnZXQgdGhlIGxlbmd0aCBmcm9tIHRoZSBVc3RyaW5nLgogICAgIGppdC5sb2FkMzIoCkBAIC0y
MTIsNyArMjEyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0cmluZ0xlbmd0aFRyYW1wbwog
ICAgIEpTSW50ZXJmYWNlSklUOjpDYWxsIGZhaWx1cmVDYXNlczJDYWxsID0gaml0Lm1ha2VUYWls
UmVjdXJzaXZlQ2FsbChmYWlsdXJlQ2FzZXMyKTsKICAgICBKU0ludGVyZmFjZUpJVDo6Q2FsbCBm
YWlsdXJlQ2FzZXMzQ2FsbCA9IGppdC5tYWtlVGFpbFJlY3Vyc2l2ZUNhbGwoZmFpbHVyZUNhc2Vz
Myk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNl
czFDYWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7CiAgICAg
cGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMyQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX29wX2dl
dF9ieV9pZF9zdHJpbmdfZmFpbCkpOwpAQCAtMjIxLDE0ICsyMjEsMTQgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHN0cmluZ0xlbmd0aFRyYW1wbwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCAoInN0cmluZyBsZW5ndGggdHJhbXBvbGluZSIpKTsKIH0KIAotc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCitzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIG5hdGl2ZUZvckdlbmVyYXRvcihWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKIHsKICAgICBpbnQgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24gPSBOYXRpdmVF
eGVjdXRhYmxlOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0aW9uRm9yKGtpbmQpOwogICAgIAogICAgIEpT
SW50ZXJmYWNlSklUIGppdDsKICAgICAKICAgICBqaXQuZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZy
YW1lSGVhZGVyKDAsIEpTU3RhY2s6OkNvZGVCbG9jayk7Ci0gICAgaml0LnN0b3JlUHRyKEpTSW50
ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgJmdsb2JhbERhdGEtPnRvcENhbGxGcmFtZSk7
CisgICAgaml0LnN0b3JlUHRyKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZt
LT50b3BDYWxsRnJhbWUpOwogCiAjaWYgQ1BVKFg4NikKICAgICAvLyBMb2FkIGNhbGxlciBmcmFt
ZSdzIHNjb3BlIGNoYWluIGludG8gdGhpcyBjYWxsZnJhbWUgc28gdGhhdCB3aGF0ZXZlciB3ZSBj
YWxsIGNhbgpAQCAtMzczLDEyICszNzMsMTIgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBuYXRpdmVGb3JHZQogCiAgICAgLy8gQ2hlY2sgZm9yIGFuIGV4Y2VwdGlvbgogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgaml0LmxvYWQ2NCgmKGdsb2JhbERhdGEtPmV4Y2VwdGlvbiksIEpTSW50
ZXJmYWNlSklUOjpyZWdUMik7CisgICAgaml0LmxvYWQ2NCgmKHZtLT5leGNlcHRpb24pLCBKU0lu
dGVyZmFjZUpJVDo6cmVnVDIpOwogICAgIEpTSW50ZXJmYWNlSklUOjpKdW1wIGV4Y2VwdGlvbkhh
bmRsZXIgPSBqaXQuYnJhbmNoVGVzdDY0KEpTSW50ZXJmYWNlSklUOjpOb25aZXJvLCBKU0ludGVy
ZmFjZUpJVDo6cmVnVDIpOwogI2Vsc2UKICAgICBKU0ludGVyZmFjZUpJVDo6SnVtcCBleGNlcHRp
b25IYW5kbGVyID0gaml0LmJyYW5jaDMyKAogICAgICAgICBKU0ludGVyZmFjZUpJVDo6Tm90RXF1
YWwsCi0gICAgICAgIEpTSW50ZXJmYWNlSklUOjpBYnNvbHV0ZUFkZHJlc3MocmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oJmdsb2JhbERhdGEtPmV4Y2VwdGlvbikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLAorICAgICAgICBKU0ludGVyZmFjZUpJ
VDo6QWJzb2x1dGVBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZ2bS0+ZXhjZXB0aW9u
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSks
CiAgICAgICAgIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1
ZVRhZykpOwogI2VuZGlmCiAKQEAgLTM5MSwzNSArMzkxLDM1IEBAIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKICAgICAvLyBHcmFiIHRoZSByZXR1cm4gYWRkcmVzcy4K
ICAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEpTSW50ZXJmYWNlSklUOjpy
ZWdUMSk7CiAKLSAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbVB0cigmZ2xv
YmFsRGF0YS0+ZXhjZXB0aW9uTG9jYXRpb24pLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOworICAg
IGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKCZ2bS0+ZXhjZXB0aW9uTG9j
YXRpb24pLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOwogICAgIGppdC5zdG9yZVB0cihKU0ludGVy
ZmFjZUpJVDo6cmVnVDEsIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CiAgICAgaml0LnBva2UoSlNJ
bnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJ
VFN0YWNrRnJhbWUsIGNhbGxGcmFtZSkgLyBzaXplb2Yodm9pZCopKTsKIAotICAgIGppdC5zdG9y
ZVB0cihKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZnbG9iYWxEYXRhLT50b3BD
YWxsRnJhbWUpOworICAgIGppdC5zdG9yZVB0cihKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVn
aXN0ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsKICAgICAvLyBTZXQgdGhlIHJldHVybiBhZGRyZXNz
LgogICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKEZ1bmN0aW9uUHRy
KGN0aVZNVGhyb3dUcmFtcG9saW5lKS52YWx1ZSgpKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxKTsK
ICAgICBqaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oSlNJbnRlcmZhY2VKSVQ6
OnJlZ1QxKTsKIAogICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
Kmdsb2JhbERhdGEsICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUocGF0Y2hCdWZmZXIsICgibmF0aXZlICVzIHRyYW1wb2xpbmUiLCB0b0NTdHJpbmcoa2lu
ZCkuZGF0YSgpKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDYWxsR2VuZXJh
dG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRp
dmVDYWxsR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gbmF0aXZlRm9yR2VuZXJhdG9y
KGdsb2JhbERhdGEsIENvZGVGb3JDYWxsKTsKKyAgICByZXR1cm4gbmF0aXZlRm9yR2VuZXJhdG9y
KHZtLCBDb2RlRm9yQ2FsbCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDb25z
dHJ1Y3RHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIG5h
dGl2ZUZvckdlbmVyYXRvcihnbG9iYWxEYXRhLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICByZXR1
cm4gbmF0aXZlRm9yR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAotc3RhdGlj
IHZvaWQgc3RyaW5nQ2hhckxvYWQoU3BlY2lhbGl6ZWRUaHVua0pJVCYgaml0LCBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEpCitzdGF0aWMgdm9pZCBzdHJpbmdDaGFyTG9hZChTcGVjaWFsaXplZFRo
dW5rSklUJiBqaXQsIFZNKiB2bSkKIHsKICAgICAvLyBsb2FkIHN0cmluZwotICAgIGppdC5sb2Fk
SlNTdHJpbmdBcmd1bWVudCgqZ2xvYmFsRGF0YSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6VGhpc0Fy
Z3VtZW50LCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CisgICAgaml0LmxvYWRKU1N0cmlu
Z0FyZ3VtZW50KCp2bSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6VGhpc0FyZ3VtZW50LCBTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMCk7CiAKICAgICAvLyBMb2FkIHN0cmluZyBsZW5ndGggdG8gcmVn
VDIsIGFuZCBzdGFydCB0aGUgcHJvY2VzcyBvZiBsb2FkaW5nIHRoZSBkYXRhIHBvaW50ZXIgaW50
byByZWdUMAogICAgIGppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDAsIFRodW5rSGVscGVyczo6anNTdHJpbmdMZW5ndGhPZmZzZXQoKSks
IFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyKTsKQEAgLTQ0Niw1MSArNDQ2LDUxIEBAIHN0YXRp
YyB2b2lkIHN0cmluZ0NoYXJMb2FkKFNwZWNpYWxpemVkVGgKICAgICBjb250OEJpdC5saW5rKCZq
aXQpOwogfQogCi1zdGF0aWMgdm9pZCBjaGFyVG9TdHJpbmcoU3BlY2lhbGl6ZWRUaHVua0pJVCYg
aml0LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
IHNyYywgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgZHN0LCBNYWNyb0Fzc2VtYmxlcjo6UmVn
aXN0ZXJJRCBzY3JhdGNoKQorc3RhdGljIHZvaWQgY2hhclRvU3RyaW5nKFNwZWNpYWxpemVkVGh1
bmtKSVQmIGppdCwgVk0qIHZtLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBzcmMsIE1hY3Jv
QXNzZW1ibGVyOjpSZWdpc3RlcklEIGRzdCwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgc2Ny
YXRjaCkKIHsKICAgICBqaXQuYXBwZW5kRmFpbHVyZShqaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgc3JjLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4MTAw
KSkpOwotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGdsb2JhbERh
dGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpLCBzY3JhdGNoKTsKKyAg
ICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2bS0+c21hbGxTdHJpbmdz
LnNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSksIHNjcmF0Y2gpOwogICAgIGppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaCwgc3JjLCBNYWNyb0Fzc2VtYmxlcjo6U2Nh
bGVQdHIsIDApLCBkc3QpOwogICAgIGppdC5hcHBlbmRGYWlsdXJlKGppdC5icmFuY2hUZXN0UHRy
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBkc3QpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAg
ICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxKTsKLSAgICBzdHJpbmdDaGFyTG9hZChqaXQsIGds
b2JhbERhdGEpOworICAgIHN0cmluZ0NoYXJMb2FkKGppdCwgdm0pOwogICAgIGppdC5yZXR1cm5J
bnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7Ci0gICAgcmV0dXJuIGppdC5maW5hbGl6
ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoZ2xvYmFs
RGF0YSksICJjaGFyQ29kZUF0Iik7CisgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqdm0sIHZtLT5q
aXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSksICJjaGFyQ29kZUF0Iik7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBjaGFyQXRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hhckF0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQog
ewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEpOwotICAgIHN0cmluZ0NoYXJMb2FkKGpp
dCwgZ2xvYmFsRGF0YSk7Ci0gICAgY2hhclRvU3RyaW5nKGppdCwgZ2xvYmFsRGF0YSwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMSk7CisgICAgc3RyaW5nQ2hhckxvYWQoaml0LCB2bSk7CisgICAg
Y2hhclRvU3RyaW5nKGppdCwgdm0sIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwogICAgIGpp
dC5yZXR1cm5KU0NlbGwoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwotICAgIHJldHVybiBq
aXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVD
YWxsKGdsb2JhbERhdGEpLCAiY2hhckF0Iik7CisgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqdm0s
IHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSksICJjaGFyQXQiKTsKIH0KIAotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBmcm9tQ2hhckNvZGVUaHVua0dlbmVy
YXRvcihWTSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSk7CiAgICAgLy8g
bG9hZCBjaGFyIGNvZGUKICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6cmVnVDApOwotICAgIGNoYXJUb1N0cmluZyhqaXQsIGdsb2JhbERhdGEsIFNwZWNp
YWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDEpOworICAgIGNoYXJUb1N0cmluZyhqaXQsIHZtLCBTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxp
emVkVGh1bmtKSVQ6OnJlZ1QxKTsKICAgICBqaXQucmV0dXJuSlNDZWxsKFNwZWNpYWxpemVkVGh1
bmtKSVQ6OnJlZ1QwKTsKLSAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9i
YWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRhKSwgImZyb21DaGFyQ29k
ZSIpOworICAgIHJldHVybiBqaXQuZmluYWxpemUoKnZtLCB2bS0+aml0U3R1YnMtPmN0aU5hdGl2
ZUNhbGwodm0pLCAiZnJvbUNoYXJDb2RlIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBz
cXJ0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHNxcnRUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRU
aHVua0pJVCBqaXQoMSk7CiAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50U3FydCgp
KQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdl
ZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSkp
OworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdl
ZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAKICAgICBqaXQubG9h
ZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxp
emVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBqaXQuc3FydERvdWJsZShTcGVjaWFsaXplZFRodW5r
SklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKICAgICBqaXQucmV0
dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwotICAgIHJldHVybiBqaXQu
ZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxs
KGdsb2JhbERhdGEpLCAic3FydCIpOworICAgIHJldHVybiBqaXQuZmluYWxpemUoKnZtLCB2bS0+
aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pLCAic3FydCIpOwogfQogCiAKQEAgLTU2MSwxMiAr
NTYxLDEyIEBAIHN0YXRpYyBjb25zdCBkb3VibGUgbmVnYXRpdmVIYWxmQ29uc3RhbnQKIHN0YXRp
YyBjb25zdCBkb3VibGUgemVyb0NvbnN0YW50ID0gMC4wOwogc3RhdGljIGNvbnN0IGRvdWJsZSBo
YWxmQ29uc3RhbnQgPSAwLjU7CiAgICAgCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZmxvb3JUaHVu
a0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgZmxvb3JUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJ
VCBqaXQoMSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50SnVtcDsKICAgICBpZiAo
IVVuYXJ5RG91YmxlT3BXcmFwcGVyKGZsb29yKSB8fCAhaml0LnN1cHBvcnRzRmxvYXRpbmdQb2lu
dCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFu
YWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoZ2xvYmFsRGF0
YSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFu
YWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgaml0Lmxv
YWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1w
KTsKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAg
IG5vbkludEp1bXAubGluaygmaml0KTsKQEAgLTU5MCwxNCArNTkwLDE0IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBmbG9vclRodW5rR2VuZXJhdG8KICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGRvdWJsZVJlc3VsdC5saW5rKCZqaXQpOwogICAg
IGppdC5yZXR1cm5Eb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7Ci0gICAgcmV0
dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5h
dGl2ZUNhbGwoZ2xvYmFsRGF0YSksICJmbG9vciIpOworICAgIHJldHVybiBqaXQuZmluYWxpemUo
KnZtLCB2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pLCAiZmxvb3IiKTsKIH0KIAotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGNlaWxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2VpbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkK
IHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxKTsKICAgICBpZiAoIVVuYXJ5RG91Ymxl
T3BXcmFwcGVyKGNlaWwpIHx8ICFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAg
IHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihn
bG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRhKSk7CisgICAgICAg
IHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2
bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBub25JbnRKdW1wOwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRo
dW5rSklUOjpyZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxp
emVkVGh1bmtKSVQ6OnJlZ1QwKTsKQEAgLTYwOSwxNCArNjA5LDE0IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBjZWlsVGh1bmtHZW5lcmF0b3IKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGRvdWJsZVJlc3VsdC5saW5rKCZqaXQpOwogICAgIGpp
dC5yZXR1cm5Eb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7Ci0gICAgcmV0dXJu
IGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2
ZUNhbGwoZ2xvYmFsRGF0YSksICJjZWlsIik7CisgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqdm0s
IHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSksICJjZWlsIik7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiByb3VuZFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiByb3VuZFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsK
ICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxKTsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BX
cmFwcGVyKGpzUm91bmQpIHx8ICFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAg
IHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihn
bG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRhKSk7CisgICAgICAg
IHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2
bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBub25JbnRKdW1wOwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRo
dW5rSklUOjpyZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxp
emVkVGh1bmtKSVQ6OnJlZ1QwKTsKQEAgLTY0Myw0MCArNjQzLDQwIEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiByb3VuZFRodW5rR2VuZXJhdG8KICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGRvdWJsZVJlc3VsdC5saW5rKCZqaXQpOwogICAgIGpp
dC5yZXR1cm5Eb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7Ci0gICAgcmV0dXJu
IGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2
ZUNhbGwoZ2xvYmFsRGF0YSksICJyb3VuZCIpOworICAgIHJldHVybiBqaXQuZmluYWxpemUoKnZt
LCB2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pLCAicm91bmQiKTsKIH0KIAotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGV4cFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBleHBUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAg
ICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihleHApKQotICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0
U3R1YnMtPmN0aU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSkpOworICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5j
dGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSk7CiAgICAg
aWYgKCFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRT
dHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRhKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0
aU5hdGl2ZUNhbGwodm0pKTsKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxp
emVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBq
aXQuY2FsbERvdWJsZVRvRG91YmxlKFVuYXJ5RG91YmxlT3BXcmFwcGVyKGV4cCkpOwogICAgIGpp
dC5yZXR1cm5Eb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7Ci0gICAgcmV0dXJu
IGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2
ZUNhbGwoZ2xvYmFsRGF0YSksICJleHAiKTsKKyAgICByZXR1cm4gaml0LmZpbmFsaXplKCp2bSwg
dm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSwgImV4cCIpOwogfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgbG9nVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxvZ1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBp
ZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGxvZykpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVi
cy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRhKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5h
dGl2ZUNhbGwodm0pKTsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxKTsKICAgICBpZiAo
IWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJz
LT5jdGlOYXRpdmVDYWxsKGdsb2JhbERhdGEpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0
aXZlQ2FsbCh2bSkpOwogICAgIGppdC5sb2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGppdC5j
YWxsRG91YmxlVG9Eb3VibGUoVW5hcnlEb3VibGVPcFdyYXBwZXIobG9nKSk7CiAgICAgaml0LnJl
dHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKLSAgICByZXR1cm4gaml0
LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2Fs
bChnbG9iYWxEYXRhKSwgImxvZyIpOworICAgIHJldHVybiBqaXQuZmluYWxpemUoKnZtLCB2bS0+
aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pLCAibG9nIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBhYnNUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgYWJzVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIFNwZWNp
YWxpemVkVGh1bmtKSVQgaml0KDEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2lu
dEFicygpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxm
TWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoZ2xvYmFs
RGF0YSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxm
TWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50SnVtcDsKICAgICBqaXQubG9hZEludDMyQXJndW1lbnQo
MCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIG5vbkludEp1bXApOwogICAgIGppdC5yc2hp
ZnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMigzMSksIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxKTsKQEAgLTY4OSwxNCArNjg5LDE0
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhYnNUaHVua0dlbmVyYXRvcigKICAgICBqaXQubG9h
ZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxp
emVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBqaXQuYWJzRG91YmxlKFNwZWNpYWxpemVkVGh1bmtK
SVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDEpOwogICAgIGppdC5yZXR1
cm5Eb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMSk7Ci0gICAgcmV0dXJuIGppdC5m
aW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwo
Z2xvYmFsRGF0YSksICJhYnMiKTsKKyAgICByZXR1cm4gaml0LmZpbmFsaXplKCp2bSwgdm0tPmpp
dFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSwgImFicyIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgcG93VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHBvd1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBTcGVjaWFs
aXplZFRodW5rSklUIGppdCgyKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQo
KSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFn
ZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKGdsb2JhbERhdGEp
KTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFn
ZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogCiAgICAgaml0Lmxv
YWREb3VibGUoJm9uZUNvbnN0YW50LCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QxKTsKICAg
ICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAs
IFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKQEAgLTc0MSw3ICs3NDEsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgcG93VGh1bmtHZW5lcmF0b3IoCiAgICAgfSBlbHNlCiAgICAgICAgIGpp
dC5hcHBlbmRGYWlsdXJlKG5vbkludEV4cG9uZW50KTsKIAotICAgIHJldHVybiBqaXQuZmluYWxp
emUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKGdsb2Jh
bERhdGEpLCAicG93Iik7CisgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqdm0sIHZtLT5qaXRTdHVi
cy0+Y3RpTmF0aXZlQ2FsbCh2bSksICJwb3ciKTsKIH0KIAogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSwyNiArMzEsMjYgQEAKICNpZiBFTkFCTEUoSklUKQogbmFtZXNwYWNlIEpTQyB7CiAK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbEdlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0R2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRvcihKU0ds
b2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbEdlbmVyYXRvcihK
U0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0R2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0cmluZ0xlbmd0
aFRyYW1wb2xpbmVHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbmF0aXZlQ2FsbEdlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBuYXRpdmVDb25zdHJ1Y3RHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgbGlua0NhbGxHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBsaW5rQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlu
a0Nsb3N1cmVDYWxsR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVh
bENhbGxHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3Ry
dWN0R2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3RyaW5nTGVuZ3RoVHJh
bXBvbGluZUdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNhbGxH
ZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDb25zdHJ1Y3RHZW5l
cmF0b3IoVk0qKTsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJDb2RlQXRUaHVua0dlbmVy
YXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQXRUaHVua0dl
bmVyYXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmcm9tQ2hhckNv
ZGVUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBh
YnNUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
ZWlsVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
ZXhwVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
Zmxvb3JUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBsb2dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiByb3VuZFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHNxcnRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBwb3dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBjaGFyQXRUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZyb21D
aGFyQ29kZVRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYWJzVGh1
bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBjZWlsVGh1bmtHZW5lcmF0
b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBleHBUaHVua0dlbmVyYXRvcihWTSopOwor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZsb29yVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBsb2dUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHJvdW5kVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBzcXJ0
VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBwb3dUaHVua0dlbmVy
YXRvcihWTSopOwogCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjIsOSArNjIsOSBAQCB2b2lkIGluaXRpYWxpemUoKQogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGlj
IHB1c2gKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmctbm9yZXR1
cm4iCiAjZW5kaWYKLXZvaWQgRGF0YTo6cGVyZm9ybUFzc2VydGlvbnMoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQordm9pZCBEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyhWTSYgdm0pCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKGdsb2JhbERhdGEpOworICAgIFVOVVNFRF9QQVJBTSh2bSk7CiAgICAgCiAg
ICAgLy8gQXNzZXJ0aW9ucyB0byBtYXRjaCBMb3dMZXZlbEludGVycHJldGVyLmFzbS4gIElmIHlv
dSBjaGFuZ2UgYW55IG9mIHRoaXMgY29kZSwgYmUKICAgICAvLyBwcmVwYXJlZCB0byBjaGFuZ2Ug
TG93TGV2ZWxJbnRlcnByZXRlci5hc20gYXMgd2VsbCEhCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50RGF0YS5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwog
c3RydWN0IEluc3RydWN0aW9uOwogCiAjaWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKQEAgLTQ3LDcg
KzQ3LDcgQEAgbmFtZXNwYWNlIExMSW50IHsKIAogY2xhc3MgRGF0YSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIHZvaWQgcGVyZm9ybUFzc2VydGlvbnMoSlNHbG9iYWxEYXRhJik7CisgICAgc3RhdGlj
IHZvaWQgcGVyZm9ybUFzc2VydGlvbnMoVk0mKTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgSW5z
dHJ1Y3Rpb24qIHNfZXhjZXB0aW9uSW5zdHJ1Y3Rpb25zOwpAQCAtOTYsNyArOTYsNyBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQqIGdldENvZGVQdHIoT3Bjb2RlSUQgCiAKIGNsYXNzIERhdGEgewogcHVi
bGljOgotICAgIHN0YXRpYyB2b2lkIHBlcmZvcm1Bc3NlcnRpb25zKEpTR2xvYmFsRGF0YSYpIHsg
fQorICAgIHN0YXRpYyB2b2lkIHBlcmZvcm1Bc3NlcnRpb25zKFZNJikgeyB9CiB9OwogCiAjaWYg
Q09NUElMRVIoQ0xBTkcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRF
bnRyeXBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50RW50cnlwb2ludHMuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDcgKzI5LDcgQEAKICNpZiBFTkFCTEUoTExJTlQpCiAKICNpbmNsdWRlICJKSVRDb2RlLmgiCi0j
aW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJKU09i
amVjdC5oIgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAiTG93TGV2ZWxJbnRl
cnByZXRlci5oIgpAQCAtMzcsOSArMzcsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IExMSW50IHsKIAotdm9pZCBnZXRGdW5jdGlvbkVudHJ5cG9pbnQoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpJVENvZGUmIGppdENvZGUsIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciYgYXJpdHlDaGVjaykKK3ZvaWQgZ2V0RnVuY3Rpb25FbnRyeXBv
aW50KFZNJiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKSVRDb2RlJiBqaXRDb2Rl
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGFyaXR5Q2hlY2spCiB7Ci0gICAgaWYgKCFnbG9iYWxE
YXRhLmNhblVzZUpJVCgpKSB7CisgICAgaWYgKCF2bS5jYW5Vc2VKSVQoKSkgewogICAgICAgICBp
ZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewogICAgICAgICAgICAgaml0Q29kZSA9IEpJVENvZGUo
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZnVuY3Rpb25f
Zm9yX2NhbGxfcHJvbG9ndWUpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKTsKICAgICAgICAg
ICAgIGFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0
cihsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjayk7CkBAIC01NCwzNiArNTQsMzYg
QEAgdm9pZCBnZXRGdW5jdGlvbkVudHJ5cG9pbnQoSlNHbG9iYWxEYXRhJgogICAgIAogI2lmIEVO
QUJMRShKSVQpCiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgaml0Q29k
ZSA9IEpJVENvZGUoZ2xvYmFsRGF0YS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ2FsbEVudHJ5VGh1
bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKTsKLSAgICAgICAgYXJpdHlD
aGVjayA9IGdsb2JhbERhdGEuZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNhbGxBcml0eUNoZWNrVGh1
bmtHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICAgICAgaml0Q29kZSA9IEpJVENvZGUodm0uZ2V0Q1RJ
U3R1YihmdW5jdGlvbkZvckNhbGxFbnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJw
cmV0ZXJUaHVuayk7CisgICAgICAgIGFyaXR5Q2hlY2sgPSB2bS5nZXRDVElTdHViKGZ1bmN0aW9u
Rm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgaml0
Q29kZSA9IEpJVENvZGUoZ2xvYmFsRGF0YS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ29uc3RydWN0
RW50cnlUaHVua0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspOwotICAgIGFy
aXR5Q2hlY2sgPSBnbG9iYWxEYXRhLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1Y3RBcml0
eUNoZWNrVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICBqaXRDb2RlID0gSklUQ29kZSh2bS5n
ZXRDVElTdHViKGZ1bmN0aW9uRm9yQ29uc3RydWN0RW50cnlUaHVua0dlbmVyYXRvciksIEpJVENv
ZGU6OkludGVycHJldGVyVGh1bmspOworICAgIGFyaXR5Q2hlY2sgPSB2bS5nZXRDVElTdHViKGZ1
bmN0aW9uRm9yQ29uc3RydWN0QXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKS5jb2RlKCk7CiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKIH0KIAotdm9pZCBnZXRFdmFsRW50cnlwb2ludChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpJVENvZGUmIGppdENvZGUpCit2b2lkIGdldEV2YWxFbnRyeXBvaW50
KFZNJiB2bSwgSklUQ29kZSYgaml0Q29kZSkKIHsKLSAgICBpZiAoIWdsb2JhbERhdGEuY2FuVXNl
SklUKCkpIHsKKyAgICBpZiAoIXZtLmNhblVzZUpJVCgpKSB7CiAgICAgICAgIGppdENvZGUgPSBK
SVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X2V2
YWxfcHJvbG9ndWUpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICNpZiBFTkFCTEUoSklUKSAgICAKLSAgICBqaXRDb2RlID0gSklUQ29kZShnbG9i
YWxEYXRhLmdldENUSVN0dWIoZXZhbEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRl
cnByZXRlclRodW5rKTsKKyAgICBqaXRDb2RlID0gSklUQ29kZSh2bS5nZXRDVElTdHViKGV2YWxF
bnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuayk7CiAjZW5kaWYK
IH0KIAotdm9pZCBnZXRQcm9ncmFtRW50cnlwb2ludChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpJVENvZGUmIGppdENvZGUpCit2b2lkIGdldFByb2dyYW1FbnRyeXBvaW50KFZNJiB2bSwgSklU
Q29kZSYgaml0Q29kZSkKIHsKLSAgICBpZiAoIWdsb2JhbERhdGEuY2FuVXNlSklUKCkpIHsKKyAg
ICBpZiAoIXZtLmNhblVzZUpJVCgpKSB7CiAgICAgICAgIGppdENvZGUgPSBKSVRDb2RlKE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X3Byb2dyYW1fcHJvbG9n
dWUpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICNpZiBFTkFCTEUoSklUKQotICAgIGppdENvZGUgPSBKSVRDb2RlKGdsb2JhbERhdGEuZ2V0Q1RJ
U3R1Yihwcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1
bmspOworICAgIGppdENvZGUgPSBKSVRDb2RlKHZtLmdldENUSVN0dWIocHJvZ3JhbUVudHJ5VGh1
bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKTsKICNlbmRpZgogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50cy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEVudHJ5cG9pbnRzLmgJ
KHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEVu
dHJ5cG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDI1ICszNiwyNSBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgRXZhbENvZGVCbG9jazsKIGNsYXNzIEpJVENvZGU7Ci1jbGFzcyBKU0ds
b2JhbERhdGE7CitjbGFzcyBWTTsKIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjsKIGNsYXNz
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKIGNsYXNzIFByb2dyYW1Db2RlQmxvY2s7CiAKIG5hbWVz
cGFjZSBMTEludCB7CiAKLXZvaWQgZ2V0RnVuY3Rpb25FbnRyeXBvaW50KEpTR2xvYmFsRGF0YSYs
IENvZGVTcGVjaWFsaXphdGlvbktpbmQsIEpJVENvZGUmLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIm
IGFyaXR5Q2hlY2spOwotdm9pZCBnZXRFdmFsRW50cnlwb2ludChKU0dsb2JhbERhdGEmLCBKSVRD
b2RlJik7Ci12b2lkIGdldFByb2dyYW1FbnRyeXBvaW50KEpTR2xvYmFsRGF0YSYsIEpJVENvZGUm
KTsKK3ZvaWQgZ2V0RnVuY3Rpb25FbnRyeXBvaW50KFZNJiwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCwgSklUQ29kZSYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgYXJpdHlDaGVjayk7Cit2b2lkIGdl
dEV2YWxFbnRyeXBvaW50KFZNJiwgSklUQ29kZSYpOwordm9pZCBnZXRQcm9ncmFtRW50cnlwb2lu
dChWTSYsIEpJVENvZGUmKTsKIAotaW5saW5lIHZvaWQgZ2V0RW50cnlwb2ludChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEV2YWxDb2RlQmxvY2sqLCBKSVRDb2RlJiBqaXRDb2RlKQoraW5saW5l
IHZvaWQgZ2V0RW50cnlwb2ludChWTSYgdm0sIEV2YWxDb2RlQmxvY2sqLCBKSVRDb2RlJiBqaXRD
b2RlKQogewotICAgIGdldEV2YWxFbnRyeXBvaW50KGdsb2JhbERhdGEsIGppdENvZGUpOworICAg
IGdldEV2YWxFbnRyeXBvaW50KHZtLCBqaXRDb2RlKTsKIH0KIAotaW5saW5lIHZvaWQgZ2V0RW50
cnlwb2ludChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb2dyYW1Db2RlQmxvY2sqLCBKSVRD
b2RlJiBqaXRDb2RlKQoraW5saW5lIHZvaWQgZ2V0RW50cnlwb2ludChWTSYgdm0sIFByb2dyYW1D
b2RlQmxvY2sqLCBKSVRDb2RlJiBqaXRDb2RlKQogewotICAgIGdldFByb2dyYW1FbnRyeXBvaW50
KGdsb2JhbERhdGEsIGppdENvZGUpOworICAgIGdldFByb2dyYW1FbnRyeXBvaW50KHZtLCBqaXRD
b2RlKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkxMSW50CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcAkocmV2aXNpb24gMTQ4
NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhjZXB0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDE0ICs0OCwxNCBAQCBzdGF0aWMgdm9pZCBmaXh1cFBDZm9y
RXhjZXB0aW9uSWZOZWVkZWQoCiAKIHZvaWQgaW50ZXJwcmV0ZXJUaHJvd0luQ2FsbGVyKEV4ZWNT
dGF0ZSogZXhlYywgUmV0dXJuQWRkcmVzc1B0ciBwYykKIHsKLSAgICBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAjaWYgTExJTlRfU0xP
V19QQVRIX1RSQUNJTkcKLSAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwgZ2xvYmFs
RGF0YS0+ZXhjZXB0aW9uLCAiLlxuIik7CisgICAgZGF0YUxvZygiVGhyb3dpbmcgZXhjZXB0aW9u
ICIsIHZtLT5leGNlcHRpb24sICIuXG4iKTsKICNlbmRpZgogICAgIGZpeHVwUENmb3JFeGNlcHRp
b25JZk5lZWRlZChleGVjKTsKICAgICBnZW5lcmljVGhyb3coCi0gICAgICAgIGdsb2JhbERhdGEs
IGV4ZWMsIGdsb2JhbERhdGEtPmV4Y2VwdGlvbiwKKyAgICAgICAgdm0sIGV4ZWMsIHZtLT5leGNl
cHRpb24sCiAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5ieXRlY29kZU9mZnNldChleGVjLCBw
YykpOwogfQogCkBAIC02NywxNyArNjcsMTcgQEAgSW5zdHJ1Y3Rpb24qIHJldHVyblRvVGhyb3dG
b3JUaHJvd25FeGNlcAogCiBzdGF0aWMgdm9pZCBkb1Rocm93KEV4ZWNTdGF0ZSogZXhlYywgSW5z
dHJ1Y3Rpb24qIHBjKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5n
bG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRh
LCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBmaXh1cFBDZm9yRXhjZXB0aW9uSWZOZWVkZWQo
ZXhlYyk7Ci0gICAgZ2VuZXJpY1Rocm93KGdsb2JhbERhdGEsIGV4ZWMsIGdsb2JhbERhdGEtPmV4
Y2VwdGlvbiwgcGMgLSBleGVjLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSk7
CisgICAgZ2VuZXJpY1Rocm93KHZtLCBleGVjLCB2bS0+ZXhjZXB0aW9uLCBwYyAtIGV4ZWMtPmNv
ZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpKTsKIH0KIAogSW5zdHJ1Y3Rpb24qIHJl
dHVyblRvVGhyb3coRXhlY1N0YXRlKiBleGVjLCBJbnN0cnVjdGlvbiogcGMpCiB7CiAjaWYgTExJ
TlRfU0xPV19QQVRIX1RSQUNJTkcKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhl
Yy0+Z2xvYmFsRGF0YSgpOwotICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2VwdGlvbiAiLCBnbG9i
YWxEYXRhLT5leGNlcHRpb24sICIgKHJldHVyblRvVGhyb3cpLlxuIik7CisgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgZGF0YUxvZygiVGhyb3dpbmcgZXhjZXB0aW9uICIsIHZtLT5leGNl
cHRpb24sICIgKHJldHVyblRvVGhyb3cpLlxuIik7CiAjZW5kaWYKICAgICBkb1Rocm93KGV4ZWMs
IHBjKTsKICAgICByZXR1cm4gTExJbnQ6OmV4Y2VwdGlvbkluc3RydWN0aW9ucygpOwpAQCAtODYs
OCArODYsOCBAQCBJbnN0cnVjdGlvbiogcmV0dXJuVG9UaHJvdyhFeGVjU3RhdGUqIGV4CiB2b2lk
KiBjYWxsVG9UaHJvdyhFeGVjU3RhdGUqIGV4ZWMsIEluc3RydWN0aW9uKiBwYykKIHsKICNpZiBM
TElOVF9TTE9XX1BBVEhfVFJBQ0lORwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZl
eGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgZGF0YUxvZygiVGhyb3dpbmcgZXhjZXB0aW9uICIsIGds
b2JhbERhdGEtPmV4Y2VwdGlvbiwgIiAoY2FsbFRvVGhyb3cpLlxuIik7CisgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgZGF0YUxvZygiVGhyb3dpbmcgZXhjZXB0aW9uICIsIHZtLT5leGNl
cHRpb24sICIgKGNhbGxUb1Rocm93KS5cbiIpOwogI2VuZGlmCiAgICAgZG9UaHJvdyhleGVjLCBw
Yyk7CiAgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUHRyKGxsaW50X3Rocm93X2R1cmluZ19jYWxs
X3RyYW1wb2xpbmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zm
c2V0c0V4dHJhY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUg
IkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJKU0dsb2JhbERh
dGEuaCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5j
bHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJ
KHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDggKzU1LDggQEAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgTExJbnQgewogCiAjZGVmaW5lIExMSU5UX0JFR0lOX05PX1NFVF9QQygp
IFwKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7ICAg
ICAgXAotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMp
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsgICAgICBcCisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpCiAKICNpZm5kZWYgTkRFQlVHCiAjZGVmaW5lIExMSU5UX1NF
VF9QQ19GT1JfU1RVQlMoKSBkbyB7IFwKQEAgLTgzLDEzICs4MywxMyBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIExMSW50IHsKICNkZWZpbmUgTExJTlRfRU5EX0lNUEwoKSBMTElOVF9SRVRV
Uk5fVFdPKHBjLCBleGVjKQogCiAjZGVmaW5lIExMSU5UX1RIUk9XKGV4Y2VwdGlvblRvVGhyb3cp
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGdsb2JhbERhdGEuZXhjZXB0
aW9uID0gKGV4Y2VwdGlvblRvVGhyb3cpOyAgICAgICAgICAgICAgICBcCisgICAgICAgIHZtLmV4
Y2VwdGlvbiA9IChleGNlcHRpb25Ub1Rocm93KTsgICAgICAgICAgICAgICAgXAogICAgICAgICBw
YyA9IHJldHVyblRvVGhyb3coZXhlYywgcGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgICAgICBMTElOVF9FTkRfSU1QTCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCiAjZGVmaW5lIExMSU5UX0NIRUNL
X0VYQ0VQVElPTigpIGRvIHsgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKFVOTElL
RUxZKGdsb2JhbERhdGEuZXhjZXB0aW9uKSkgeyAgICAgICAgICAgXAorICAgICAgICBpZiAoVU5M
SUtFTFkodm0uZXhjZXB0aW9uKSkgeyAgICAgICAgICAgXAogICAgICAgICAgICAgcGMgPSByZXR1
cm5Ub1Rocm93KGV4ZWMsIHBjKTsgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBMTElOVF9F
TkRfSU1QTCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTQzLDE0ICsxNDMs
MTQgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBMTEludCB7CiAjZGVmaW5lIExMSU5UX0NB
TExfVEhST1coZXhlYywgcGMsIGV4Y2VwdGlvblRvVGhyb3cpIGRvIHsgICAgICAgICAgICAgICBc
CiAgICAgICAgIEV4ZWNTdGF0ZSogX19jdF9leGVjID0gKGV4ZWMpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgICAgIEluc3RydWN0aW9uKiBfX2N0X3BjID0gKHBjKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGdsb2JhbERhdGEu
ZXhjZXB0aW9uID0gKGV4Y2VwdGlvblRvVGhyb3cpOyAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIHZtLmV4Y2VwdGlvbiA9IChleGNlcHRpb25Ub1Rocm93KTsgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgICAgICBMTElOVF9DQUxMX0VORF9JTVBMKF9fY3RfZXhlYywgY2FsbFRvVGhy
b3coX19jdF9leGVjLCBfX2N0X3BjKSk7IFwKICAgICB9IHdoaWxlIChmYWxzZSkKIAogI2RlZmlu
ZSBMTElOVF9DQUxMX0NIRUNLX0VYQ0VQVElPTihleGVjLCBwYykgZG8geyAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgICAgICBFeGVjU3RhdGUqIF9fY2NlX2V4ZWMgPSAoZXhlYyk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBJbnN0cnVjdGlvbiogX19jY2Vf
cGMgPSAocGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBp
ZiAoVU5MSUtFTFkoZ2xvYmFsRGF0YS5leGNlcHRpb24pKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbikpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgTExJTlRfQ0FMTF9FTkRfSU1QTChfX2Nj
ZV9leGVjLCBjYWxsVG9UaHJvdyhfX2NjZV9leGVjLCBfX2NjZV9wYykpOyBcCiAgICAgfSB3aGls
ZSAoZmFsc2UpCiAKQEAgLTE2OSw3ICsxNjksNyBAQCBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJu
VHlwZSBsbGludF90cmFjCiAgICAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwKICAgICAgICAg
ICAgIGV4ZWMsCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnRwdHJfdD4ocGMgLSBleGVjLT5j
b2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSksCi0gICAgICAgICAgICBleGVjLT5n
bG9iYWxEYXRhKCkuaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHBjWzBdLnUub3Bjb2RlKSwKKyAg
ICAgICAgICAgIGV4ZWMtPnZtKCkuaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHBjWzBdLnUub3Bj
b2RlKSwKICAgICAgICAgICAgIGZyb21XaGVyZSwKICAgICAgICAgICAgIG9wZXJhbmQsCiAgICAg
ICAgICAgICBwY1tvcGVyYW5kXS51Lm9wZXJhbmQpOwpAQCAtMTkyLDcgKzE5Miw3IEBAIGV4dGVy
biAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3RyYWMKICAgICAgICAgZXhlYy0+Y29kZUJs
b2NrKCksCiAgICAgICAgIGV4ZWMsCiAgICAgICAgIHN0YXRpY19jYXN0PGludHB0cl90PihwYyAt
IGV4ZWMtPmNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpKSwKLSAgICAgICAgZXhl
Yy0+Z2xvYmFsRGF0YSgpLmludGVycHJldGVyLT5nZXRPcGNvZGVJRChwY1swXS51Lm9wY29kZSks
CisgICAgICAgIGV4ZWMtPnZtKCkuaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHBjWzBdLnUub3Bj
b2RlKSwKICAgICAgICAgZnJvbVdoZXJlLAogICAgICAgICBvcGVyYW5kLAogICAgICAgICBwY1tv
cGVyYW5kXS51Lm9wZXJhbmQsCkBAIC0yNDksOSArMjQ5LDkgQEAgTExJTlRfU0xPV19QQVRIX0RF
Q0wodHJhY2UpCiAgICAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwKICAgICAgICAgICAgIGV4
ZWMsCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnRwdHJfdD4ocGMgLSBleGVjLT5jb2RlQmxv
Y2soKS0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSksCi0gICAgICAgICAgICBvcGNvZGVOYW1lc1tl
eGVjLT5nbG9iYWxEYXRhKCkuaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHBjWzBdLnUub3Bjb2Rl
KV0sCisgICAgICAgICAgICBvcGNvZGVOYW1lc1tleGVjLT52bSgpLmludGVycHJldGVyLT5nZXRP
cGNvZGVJRChwY1swXS51Lm9wY29kZSldLAogICAgICAgICAgICAgZXhlYy0+c2NvcGUoKSk7Ci0g
ICAgaWYgKGV4ZWMtPmdsb2JhbERhdGEoKS5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocGNbMF0u
dS5vcGNvZGUpID09IG9wX3JldCkgeworICAgIGlmIChleGVjLT52bSgpLmludGVycHJldGVyLT5n
ZXRPcGNvZGVJRChwY1swXS51Lm9wY29kZSkgPT0gb3BfcmV0KSB7CiAgICAgICAgIGRhdGFMb2dG
KCJXaWxsIGJlIHJldHVybmluZyB0byAlcFxuIiwgZXhlYy0+cmV0dXJuUEMoKS52YWx1ZSgpKTsK
ICAgICAgICAgZGF0YUxvZ0YoIlRoZSBuZXcgY2ZyIHdpbGwgYmUgJXBcbiIsIGV4ZWMtPmNhbGxl
ckZyYW1lKCkpOwogICAgIH0KQEAgLTI2NCw3ICsyNjQsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVD
TChzcGVjaWFsX3RyYWNlKQogICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCksCiAgICAgICAg
ICAgICBleGVjLAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHBjIC0gZXhlYy0+
Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmJlZ2luKCkpLAotICAgICAgICAgICAgZXhlYy0+
Z2xvYmFsRGF0YSgpLmludGVycHJldGVyLT5nZXRPcGNvZGVJRChwY1swXS51Lm9wY29kZSksCisg
ICAgICAgICAgICBleGVjLT52bSgpLmludGVycHJldGVyLT5nZXRPcGNvZGVJRChwY1swXS51Lm9w
Y29kZSksCiAgICAgICAgICAgICBleGVjLT5yZXR1cm5QQygpLnZhbHVlKCkpOwogICAgIExMSU5U
X0VORF9JTVBMKCk7CiB9CkBAIC0yNzMsNyArMjczLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wo
c3BlY2lhbF90cmFjZSkKIGlubGluZSBib29sIHNob3VsZEpJVChFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgLy8gWW91IGNhbiBtb2RpZnkgdGhpcyB0byB0dXJuIG9mZiBKSVR0aW5nIHdpdGhvdXQg
cmVidWlsZGluZyB0aGUgd29ybGQuCi0gICAgcmV0dXJuIGV4ZWMtPmdsb2JhbERhdGEoKS5jYW5V
c2VKSVQoKTsKKyAgICByZXR1cm4gZXhlYy0+dm0oKS5jYW5Vc2VKSVQoKTsKIH0KIAogLy8gUmV0
dXJucyB0cnVlIGlmIHdlIHNob3VsZCB0cnkgdG8gT1NSLgpAQCAtNDE0LDEzICs0MTQsMTMgQEAg
TExJTlRfU0xPV19QQVRIX0RFQ0woc3RhY2tfY2hlY2spCiAgICAgZGF0YUxvZ0YoIkNvZGVCbG9j
ayA9ICVwLlxuIiwgZXhlYy0+Y29kZUJsb2NrKCkpOwogICAgIGRhdGFMb2dGKCJOdW0gY2FsbGVl
IHJlZ2lzdGVycyA9ICV1LlxuIiwgZXhlYy0+Y29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0
ZXJzKTsKICAgICBkYXRhTG9nRigiTnVtIHZhcnMgPSAldS5cbiIsIGV4ZWMtPmNvZGVCbG9jaygp
LT5tX251bVZhcnMpOwotICAgIGRhdGFMb2dGKCJDdXJyZW50IGVuZCBpcyBhdCAlcC5cbiIsIGV4
ZWMtPmdsb2JhbERhdGEoKS5pbnRlcnByZXRlci0+c3RhY2soKS5lbmQoKSk7CisgICAgZGF0YUxv
Z0YoIkN1cnJlbnQgZW5kIGlzIGF0ICVwLlxuIiwgZXhlYy0+dm0oKS5pbnRlcnByZXRlci0+c3Rh
Y2soKS5lbmQoKSk7CiAjZW5kaWYKLSAgICBBU1NFUlQoJmV4ZWMtPnJlZ2lzdGVycygpW2V4ZWMt
PmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVyc10gPiBleGVjLT5nbG9iYWxEYXRhKCku
aW50ZXJwcmV0ZXItPnN0YWNrKCkuZW5kKCkpOwotICAgIGlmIChVTkxJS0VMWSghZ2xvYmFsRGF0
YS5pbnRlcnByZXRlci0+c3RhY2soKS5ncm93KCZleGVjLT5yZWdpc3RlcnMoKVtleGVjLT5jb2Rl
QmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnNdKSkpIHsKKyAgICBBU1NFUlQoJmV4ZWMtPnJl
Z2lzdGVycygpW2V4ZWMtPmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVyc10gPiBleGVj
LT52bSgpLmludGVycHJldGVyLT5zdGFjaygpLmVuZCgpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXZt
LmludGVycHJldGVyLT5zdGFjaygpLmdyb3coJmV4ZWMtPnJlZ2lzdGVycygpW2V4ZWMtPmNvZGVC
bG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVyc10pKSkgewogICAgICAgICBSZXR1cm5BZGRyZXNz
UHRyIHJldHVyblBDID0gZXhlYy0+cmV0dXJuUEMoKTsKICAgICAgICAgZXhlYyA9IGV4ZWMtPmNh
bGxlckZyYW1lKCk7Ci0gICAgICAgIGdsb2JhbERhdGEuZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tP
dmVyZmxvd0Vycm9yKGV4ZWMpOworICAgICAgICB2bS5leGNlcHRpb24gPSBjcmVhdGVTdGFja092
ZXJmbG93RXJyb3IoZXhlYyk7CiAgICAgICAgIGludGVycHJldGVyVGhyb3dJbkNhbGxlcihleGVj
LCByZXR1cm5QQyk7CiAgICAgICAgIHBjID0gcmV0dXJuVG9UaHJvd0ZvclRocm93bkV4Y2VwdGlv
bihleGVjKTsKICAgICB9CkBAIC00MzAsMTEgKzQzMCwxMSBAQCBMTElOVF9TTE9XX1BBVEhfREVD
TChzdGFja19jaGVjaykKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jYWxsX2FyaXR5
Q2hlY2spCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKLSAgICBFeGVjU3RhdGUqIG5ld0V4ZWMgPSBD
b21tb25TbG93UGF0aHM6OmFyaXR5Q2hlY2tGb3IoZXhlYywgJmdsb2JhbERhdGEuaW50ZXJwcmV0
ZXItPnN0YWNrKCksIENvZGVGb3JDYWxsKTsKKyAgICBFeGVjU3RhdGUqIG5ld0V4ZWMgPSBDb21t
b25TbG93UGF0aHM6OmFyaXR5Q2hlY2tGb3IoZXhlYywgJnZtLmludGVycHJldGVyLT5zdGFjaygp
LCBDb2RlRm9yQ2FsbCk7CiAgICAgaWYgKCFuZXdFeGVjKSB7CiAgICAgICAgIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuUEMgPSBleGVjLT5yZXR1cm5QQygpOwogICAgICAgICBleGVjID0gZXhlYy0+
Y2FsbGVyRnJhbWUoKTsKLSAgICAgICAgZ2xvYmFsRGF0YS5leGNlcHRpb24gPSBjcmVhdGVTdGFj
a092ZXJmbG93RXJyb3IoZXhlYyk7CisgICAgICAgIHZtLmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNr
T3ZlcmZsb3dFcnJvcihleGVjKTsKICAgICAgICAgaW50ZXJwcmV0ZXJUaHJvd0luQ2FsbGVyKGV4
ZWMsIHJldHVyblBDKTsKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkpLCBleGVjKTsKICAgICB9CkBAIC00NDQsMTEg
KzQ0NCwxMSBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF9hcml0CiBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY29uc3RydWN0X2FyaXR5Q2hlY2spCiB7CiAgICAg
TExJTlRfQkVHSU4oKTsKLSAgICBFeGVjU3RhdGUqIG5ld0V4ZWMgPSBDb21tb25TbG93UGF0aHM6
OmFyaXR5Q2hlY2tGb3IoZXhlYywgJmdsb2JhbERhdGEuaW50ZXJwcmV0ZXItPnN0YWNrKCksIENv
ZGVGb3JDb25zdHJ1Y3QpOworICAgIEV4ZWNTdGF0ZSogbmV3RXhlYyA9IENvbW1vblNsb3dQYXRo
czo6YXJpdHlDaGVja0ZvcihleGVjLCAmdm0uaW50ZXJwcmV0ZXItPnN0YWNrKCksIENvZGVGb3JD
b25zdHJ1Y3QpOwogICAgIGlmICghbmV3RXhlYykgewogICAgICAgICBSZXR1cm5BZGRyZXNzUHRy
IHJldHVyblBDID0gZXhlYy0+cmV0dXJuUEMoKTsKICAgICAgICAgZXhlYyA9IGV4ZWMtPmNhbGxl
ckZyYW1lKCk7Ci0gICAgICAgIGdsb2JhbERhdGEuZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVy
Zmxvd0Vycm9yKGV4ZWMpOworICAgICAgICB2bS5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJm
bG93RXJyb3IoZXhlYyk7CiAgICAgICAgIGludGVycHJldGVyVGhyb3dJbkNhbGxlcihleGVjLCBy
ZXR1cm5QQyk7CiAgICAgICAgIExMSU5UX1JFVFVSTl9UV08oYml0d2lzZV9jYXN0PHZvaWQqPihz
dGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpKSwgZXhlYyk7CiAgICAgfQpAQCAtNDYxLDcgKzQ2MSw3
IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfYWMKICNpZiBMTElOVF9T
TE9XX1BBVEhfVFJBQ0lORwogICAgIGRhdGFMb2dGKCJDcmVhdGluZyBhbiBhY3RpdmF0aW9uLCBl
eGVjID0gJXAhXG4iLCBleGVjKTsKICNlbmRpZgotICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlv
biA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKGdsb2JhbERhdGEsIGV4ZWMsIGV4ZWMtPmNvZGVCbG9j
aygpKTsKKyAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2YXRpb246OmNyZWF0
ZSh2bSwgZXhlYywgZXhlYy0+Y29kZUJsb2NrKCkpOwogICAgIGV4ZWMtPnNldFNjb3BlKGFjdGl2
YXRpb24pOwogICAgIExMSU5UX1JFVFVSTihKU1ZhbHVlKGFjdGl2YXRpb24pKTsKIH0KQEAgLTQ2
OSw3ICs0NjksNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY3JlYXRlX2FjCiBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY3JlYXRlX2FyZ3VtZW50cykKIHsKICAgICBM
TElOVF9CRUdJTigpOwotICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZShBcmd1bWVudHM6
OmNyZWF0ZShnbG9iYWxEYXRhLCBleGVjKSk7CisgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1Zh
bHVlKEFyZ3VtZW50czo6Y3JlYXRlKHZtLCBleGVjKSk7CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBU
SU9OKCk7CiAgICAgZXhlYy0+dW5jaGVja2VkUihwY1sxXS51Lm9wZXJhbmQpID0gYXJndW1lbnRz
OwogICAgIGV4ZWMtPnVuY2hlY2tlZFIodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKHBjWzFd
LnUub3BlcmFuZCkpID0gYXJndW1lbnRzOwpAQCAtNTMzLDcgKzUzMyw3IEBAIExMSU5UX1NMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfcmVnZXgKICAgICBSZWdFeHAqIHJlZ0V4cCA9IGV4ZWMt
PmNvZGVCbG9jaygpLT5yZWdleHAocGNbMl0udS5vcGVyYW5kKTsKICAgICBpZiAoIXJlZ0V4cC0+
aXNWYWxpZCgpKQogICAgICAgICBMTElOVF9USFJPVyhjcmVhdGVTeW50YXhFcnJvcihleGVjLCAi
SW52YWxpZCBmbGFnIHN1cHBsaWVkIHRvIFJlZ0V4cCBjb25zdHJ1Y3Rvci4iKSk7Ci0gICAgTExJ
TlRfUkVUVVJOKFJlZ0V4cE9iamVjdDo6Y3JlYXRlKGdsb2JhbERhdGEsIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBTdHJ1Y3R1
cmUoKSwgcmVnRXhwKSk7CisgICAgTExJTlRfUkVUVVJOKFJlZ0V4cE9iamVjdDo6Y3JlYXRlKHZt
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCkpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfbm90KQpAQCAtODQ0LDcgKzg0NCw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9yZXNvbHZlX2IKICAgICBpZiAocGNbM10udS5vcGVyYW5kKSB7CiAgICAgICAg
IHJlc3VsdCA9IEpTU2NvcGU6OnJlc29sdmVCYXNlKGV4ZWMsIGlkZW50LCB0cnVlLCBvcGVyYXRp
b25zLCBwY1s1XS51LnB1dFRvQmFzZU9wZXJhdGlvbik7CiAgICAgICAgIGlmICghcmVzdWx0KQot
ICAgICAgICAgICAgTExJTlRfVEhST1coZ2xvYmFsRGF0YS5leGNlcHRpb24pOworICAgICAgICAg
ICAgTExJTlRfVEhST1codm0uZXhjZXB0aW9uKTsKICAgICB9IGVsc2UKICAgICAgICAgcmVzdWx0
ID0gSlNTY29wZTo6cmVzb2x2ZUJhc2UoZXhlYywgaWRlbnQsIGZhbHNlLCBvcGVyYXRpb25zLCBw
Y1s1XS51LnB1dFRvQmFzZU9wZXJhdGlvbik7CiAKQEAgLTkzOSw3ICs5MzksNyBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2J5X2lkCiAgICAgICAgIGlmICghc3RydWN0dXJl
LT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpCiAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT50
eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpKSB7CiAgICAgICAgICAgICBwY1s0
XS51LnN0cnVjdHVyZS5zZXQoCi0gICAgICAgICAgICAgICAgZ2xvYmFsRGF0YSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICB2bSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKICAgICAgICAgICAgIGlmIChp
c0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewogICAgICAgICAgICAgICAgIHBj
WzBdLnUub3Bjb2RlID0gTExJbnQ6OmdldE9wY29kZShsbGludF9vcF9nZXRfYnlfaWQpOwogICAg
ICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90
LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIEpTT2JqZWN0OjpvZmZzZXRPZklu
bGluZVN0b3JhZ2UoKTsKQEAgLTk4Niw3ICs5ODYsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfcHV0X2J5X2lkCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBMTElOVF9PUF9DKDEp
LmpzVmFsdWUoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChjb2RlQmxvY2stPmlzU3RyaWN0
TW9kZSgpKTsKICAgICBpZiAocGNbOF0udS5vcGVyYW5kKQotICAgICAgICBhc09iamVjdChiYXNl
VmFsdWUpLT5wdXREaXJlY3QoZ2xvYmFsRGF0YSwgaWRlbnQsIExMSU5UX09QX0MoMykuanNWYWx1
ZSgpLCBzbG90KTsKKyAgICAgICAgYXNPYmplY3QoYmFzZVZhbHVlKS0+cHV0RGlyZWN0KHZtLCBp
ZGVudCwgTExJTlRfT1BfQygzKS5qc1ZhbHVlKCksIHNsb3QpOwogICAgIGVsc2UKICAgICAgICAg
YmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgTExJTlRfT1BfQygzKS5qc1ZhbHVlKCksIHNsb3Qp
OwogICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOwpAQCAtMTAxMywxNyArMTAxMywxNyBAQCBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkCiAgICAgICAgICAgICAgICAg
ICAgIGlmIChub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBiYXNlQ2VsbCkgIT0gSW52YWxp
ZFByb3RvdHlwZUNoYWluKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0
dXJlLT5wcmV2aW91c0lEKCktPmlzT2JqZWN0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
cGNbNF0udS5zdHJ1Y3R1cmUuc2V0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2Jh
bERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZS0+cHJldmlvdXNJ
RCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldEluSW5saW5lU3RvcmFn
ZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIEpTT2JqZWN0OjpvZmZz
ZXRPZklubGluZVN0b3JhZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbkJ1dHRlcmZs
eShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHBjWzZdLnUuc3RydWN0dXJlLnNldCgKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlQ2hh
aW4qIGNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChjaGFpbik7CiAgICAgICAgICAgICAgICAgICAgICAgICBwY1s3
XS51LnN0cnVjdHVyZUNoYWluLnNldCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9i
YWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjaGFpbik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNoYWlu
KTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGNb
OF0udS5vcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5l
T2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQpAQCAtMTA0MCw3ICsxMDQwLDcgQEAgTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZAogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcGNbNF0udS5zdHJ1Y3R1cmUuc2V0
KAotICAgICAgICAgICAgICAgICAgICBnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBpZiAoaXNJbmxp
bmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgcGNb
MF0udS5vcGNvZGUgPSBMTEludDo6Z2V0T3Bjb2RlKGxsaW50X29wX3B1dF9ieV9pZCk7CiAgICAg
ICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldEluSW5saW5lU3RvcmFnZShz
bG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIEpTT2JqZWN0OjpvZmZzZXRP
ZklubGluZVN0b3JhZ2UoKTsKQEAgLTExMDAsNyArMTEwMCw3IEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9nZXRfYXJndW0KICAgICBMTElOVF9CRUdJTigpOwogICAgIEpTVmFsdWUg
YXJndW1lbnRzID0gTExJTlRfT1AoMikuanNWYWx1ZSgpOwogICAgIGlmICghYXJndW1lbnRzKSB7
Ci0gICAgICAgIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKGdsb2JhbERhdGEsIGV4ZWMp
OworICAgICAgICBhcmd1bWVudHMgPSBBcmd1bWVudHM6OmNyZWF0ZSh2bSwgZXhlYyk7CiAgICAg
ICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOwogICAgICAgICBMTElOVF9PUCgyKSA9IGFyZ3Vt
ZW50czsKICAgICAgICAgZXhlYy0+dW5jaGVja2VkUih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0
ZXIocGNbMl0udS5vcGVyYW5kKSkgPSBhcmd1bWVudHM7CkBAIC0xMTI4LDcgKzExMjgsNyBAQCBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X3ZhCiAgICAgICAgIGlmIChiYXNl
VmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2Jq
ZWN0KGJhc2VWYWx1ZSk7CiAgICAgICAgICAgICBpZiAob2JqZWN0LT5jYW5TZXRJbmRleFF1aWNr
bHkoaSkpCi0gICAgICAgICAgICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHkoZ2xvYmFsRGF0
YSwgaSwgdmFsdWUpOworICAgICAgICAgICAgICAgIG9iamVjdC0+c2V0SW5kZXhRdWlja2x5KHZt
LCBpLCB2YWx1ZSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgb2JqZWN0LT5t
ZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KG9iamVjdCwgZXhlYywgaSwgdmFsdWUsIGV4ZWMtPmNv
ZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CiAgICAgICAgICAgICBMTElOVF9FTkQoKTsKQEAg
LTEyMDMsOSArMTIwMyw5IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfZ2V0
dGUKICAgICBBU1NFUlQoZ2V0dGVyLmlzT2JqZWN0KCkgfHwgc2V0dGVyLmlzT2JqZWN0KCkpOwog
ICAgIAogICAgIGlmICghZ2V0dGVyLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIGFjY2Vzc29yLT5z
ZXRHZXR0ZXIoZ2xvYmFsRGF0YSwgYXNPYmplY3QoZ2V0dGVyKSk7CisgICAgICAgIGFjY2Vzc29y
LT5zZXRHZXR0ZXIodm0sIGFzT2JqZWN0KGdldHRlcikpOwogICAgIGlmICghc2V0dGVyLmlzVW5k
ZWZpbmVkKCkpCi0gICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZ2xvYmFsRGF0YSwgYXNPYmpl
Y3Qoc2V0dGVyKSk7CisgICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIodm0sIGFzT2JqZWN0KHNl
dHRlcikpOwogICAgIGJhc2VPYmotPnB1dERpcmVjdEFjY2Vzc29yKAogICAgICAgICBleGVjLAog
ICAgICAgICBleGVjLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQpLApA
QCAtMTM0Myw3ICsxMzQzLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19m
dW5jXwogc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChFeGVjU3RhdGUq
IGV4ZWNDYWxsZWUsIEluc3RydWN0aW9uKiBwYywgSlNWYWx1ZSBjYWxsZWUsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5j
YWxsZXJGcmFtZSgpOwotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2Jh
bERhdGEoKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogCiAgICAgZXhlY0NhbGxlZS0+c2V0
U2NvcGUoZXhlYy0+c2NvcGUoKSk7CiAgICAgZXhlY0NhbGxlZS0+c2V0Q29kZUJsb2NrKDApOwpA
QCAtMTM1Niw5ICsxMzU2LDkgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0
Q2FsbAogICAgICAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGVKUyk7CiAgICAgCiAgICAg
ICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUhvc3QpIHsKLSAgICAgICAgICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWNDYWxsZWUpOworICAgICAgICAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWNDYWxsZWUpOwogICAgICAg
ICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwotICAgICAgICAg
ICAgZ2xvYmFsRGF0YS5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxE
YXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7CisgICAgICAgICAgICB2bS5ob3N0Q2Fs
bFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihl
eGVjQ2FsbGVlKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExMSU5UX0NBTExfUkVUVVJO
KGV4ZWNDYWxsZWUsIHBjLCBMTEludDo6Z2V0Q29kZVB0cihnZXRIb3N0Q2FsbFJldHVyblZhbHVl
KSk7CiAgICAgICAgIH0KQEAgLTEzNzksOSArMTM3OSw5IEBAIHN0YXRpYyBTbG93UGF0aFJldHVy
blR5cGUgaGFuZGxlSG9zdENhbGwKICAgICBBU1NFUlQoY29uc3RydWN0VHlwZSAhPSBDb25zdHJ1
Y3RUeXBlSlMpOwogICAgIAogICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVI
b3N0KSB7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEs
IGV4ZWNDYWxsZWUpOworICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlY0NhbGxlZSk7CiAgICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChjYWxs
ZWUpKTsKLSAgICAgICAgZ2xvYmFsRGF0YS5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKKyAgICAg
ICAgdm0uaG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjb25zdHJ1Y3REYXRh
Lm5hdGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7CiAKICAgICAgICAgTExJTlRfQ0FMTF9SRVRV
Uk4oZXhlY0NhbGxlZSwgcGMsIExMSW50OjpnZXRDb2RlUHRyKGdldEhvc3RDYWxsUmV0dXJuVmFs
dWUpKTsKICAgICB9CkBAIC0xNDA2LDcgKzE0MDYsNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5U
eXBlIHNldFVwQ2FsbChFeGVjCiAgICAgCiAgICAgSlNGdW5jdGlvbiogY2FsbGVlID0ganNDYXN0
PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CiAgICAgSlNTY29wZSogc2NvcGUg
PSBjYWxsZWUtPnNjb3BlVW5jaGVja2VkKCk7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
ID0gKnNjb3BlLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0gKnNjb3BlLT52bSgpOwogICAg
IGV4ZWNDYWxsZWUtPnNldFNjb3BlKHNjb3BlKTsKICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0
YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOwogICAgIApAQCAtMTQzMSw4ICsxNDMxLDggQEAg
aW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlYwogICAgICAgICBpZiAoY2Fs
bExpbmtJbmZvLT5pc09uTGlzdCgpKQogICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5yZW1vdmUo
KTsKICAgICAgICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVyID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJh
bWUoKTsKLSAgICAgICAgY2FsbExpbmtJbmZvLT5jYWxsZWUuc2V0KGdsb2JhbERhdGEsIGV4ZWND
YWxsZXItPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKLSAgICAgICAg
Y2FsbExpbmtJbmZvLT5sYXN0U2VlbkNhbGxlZS5zZXQoZ2xvYmFsRGF0YSwgZXhlY0NhbGxlci0+
Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOworICAgICAgICBjYWxsTGlu
a0luZm8tPmNhbGxlZS5zZXQodm0sIGV4ZWNDYWxsZXItPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1
dGFibGUoKSwgY2FsbGVlKTsKKyAgICAgICAgY2FsbExpbmtJbmZvLT5sYXN0U2VlbkNhbGxlZS5z
ZXQodm0sIGV4ZWNDYWxsZXItPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVl
KTsKICAgICAgICAgY2FsbExpbmtJbmZvLT5tYWNoaW5lQ29kZVRhcmdldCA9IGNvZGVQdHI7CiAg
ICAgICAgIGlmIChjb2RlQmxvY2spCiAgICAgICAgICAgICBjb2RlQmxvY2stPmxpbmtJbmNvbWlu
Z0NhbGwoY2FsbExpbmtJbmZvKTsKQEAgLTE0ODQsNyArMTQ4NCw3IEBAIExMSU5UX1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9jYWxsX3ZhcmEKICAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBM
TElOVF9PUF9DKDEpLmpzVmFsdWUoKTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUg
PSBsb2FkVmFyYXJncygKLSAgICAgICAgZXhlYywgJmdsb2JhbERhdGEuaW50ZXJwcmV0ZXItPnN0
YWNrKCksCisgICAgICAgIGV4ZWMsICZ2bS5pbnRlcnByZXRlci0+c3RhY2soKSwKICAgICAgICAg
TExJTlRfT1BfQygyKS5qc1ZhbHVlKCksIExMSU5UX09QX0MoMykuanNWYWx1ZSgpLCBwY1s0XS51
Lm9wZXJhbmQpOwogICAgIExMSU5UX0NBTExfQ0hFQ0tfRVhDRVBUSU9OKGV4ZWMsIHBjKTsKICAg
ICAKQEAgLTE1MTMsNyArMTUxMyw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9j
YWxsX2V2YWwKICAgICBpZiAoIWlzSG9zdEZ1bmN0aW9uKGNhbGxlZUFzVmFsdWUsIGdsb2JhbEZ1
bmNFdmFsKSkKICAgICAgICAgcmV0dXJuIHNldFVwQ2FsbChleGVjQ2FsbGVlLCBwYywgQ29kZUZv
ckNhbGwsIGNhbGxlZUFzVmFsdWUpOwogICAgIAotICAgIGdsb2JhbERhdGEuaG9zdENhbGxSZXR1
cm5WYWx1ZSA9IGV2YWwoZXhlY0NhbGxlZSk7CisgICAgdm0uaG9zdENhbGxSZXR1cm5WYWx1ZSA9
IGV2YWwoZXhlY0NhbGxlZSk7CiAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZXhlY0NhbGxlZSwgcGMs
IExMSW50OjpnZXRDb2RlUHRyKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpKTsKIH0KIApAQCAtMTUy
MSw3ICsxNTIxLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RlYXJfb2ZmXwog
ewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgQVNTRVJUKGV4ZWMtPmNvZGVCbG9jaygpLT5uZWVk
c0Z1bGxTY29wZUNoYWluKCkpOwotICAgIGpzQ2FzdDxKU0FjdGl2YXRpb24qPihMTElOVF9PUCgx
KS5qc1ZhbHVlKCkpLT50ZWFyT2ZmKGdsb2JhbERhdGEpOworICAgIGpzQ2FzdDxKU0FjdGl2YXRp
b24qPihMTElOVF9PUCgxKS5qc1ZhbHVlKCkpLT50ZWFyT2ZmKHZtKTsKICAgICBMTElOVF9FTkQo
KTsKIH0KIApAQCAtMTYzMSw4ICsxNjMxLDggQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX3Rocm93X3N0YQogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2hhbmRsZV93YXRj
aGRvZ190aW1lcikKIHsKICAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsKLSAgICBpZiAoVU5M
SUtFTFkoZ2xvYmFsRGF0YS53YXRjaGRvZy5kaWRGaXJlKGV4ZWMpKSkKLSAgICAgICAgTExJTlRf
VEhST1coY3JlYXRlVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbigmZ2xvYmFsRGF0YSkpOwor
ICAgIGlmIChVTkxJS0VMWSh2bS53YXRjaGRvZy5kaWRGaXJlKGV4ZWMpKSkKKyAgICAgICAgTExJ
TlRfVEhST1coY3JlYXRlVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbigmdm0pKTsKICAgICBM
TElOVF9SRVRVUk5fVFdPKDAsIGV4ZWMpOwogfQogCkBAIC0xNjQ0LDcgKzE2NDQsNyBAQCBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZGVidWcpCiAgICAgaW50IGxhc3RMaW5lID0gcGNb
M10udS5vcGVyYW5kOwogICAgIGludCBjb2x1bW4gPSBwY1s0XS51Lm9wZXJhbmQ7CiAKLSAgICBn
bG9iYWxEYXRhLmludGVycHJldGVyLT5kZWJ1ZyhleGVjLCBzdGF0aWNfY2FzdDxEZWJ1Z0hvb2tJ
RD4oZGVidWdIb29rSUQpLCBmaXJzdExpbmUsIGxhc3RMaW5lLCBjb2x1bW4pOworICAgIHZtLmlu
dGVycHJldGVyLT5kZWJ1ZyhleGVjLCBzdGF0aWNfY2FzdDxEZWJ1Z0hvb2tJRD4oZGVidWdIb29r
SUQpLCBmaXJzdExpbmUsIGxhc3RMaW5lLCBjb2x1bW4pOwogICAgIAogICAgIExMSU5UX0VORCgp
OwogfQpAQCAtMTY1Miw3ICsxNjUyLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X2RlYnVnKQogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Byb2ZpbGVfd2lsbF9jYWxs
KQogewogICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxl
ciA9IGdsb2JhbERhdGEuZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgaWYgKExlZ2FjeVByb2ZpbGVy
KiBwcm9maWxlciA9IHZtLmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICBwcm9maWxlci0+d2ls
bEV4ZWN1dGUoZXhlYywgTExJTlRfT1AoMSkuanNWYWx1ZSgpKTsKICAgICBMTElOVF9FTkQoKTsK
IH0KQEAgLTE2NjAsNyArMTY2MCw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9w
cm9maWxlX3cKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wcm9maWxlX2RpZF9jYWxs
KQogewogICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxl
ciA9IGdsb2JhbERhdGEuZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgaWYgKExlZ2FjeVByb2ZpbGVy
KiBwcm9maWxlciA9IHZtLmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICBwcm9maWxlci0+ZGlk
RXhlY3V0ZShleGVjLCBMTElOVF9PUCgxKS5qc1ZhbHVlKCkpOwogICAgIExMSU5UX0VORCgpOwog
fQpAQCAtMTY2OCw3ICsxNjY4LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3By
b2ZpbGVfZAogTExJTlRfU0xPV19QQVRIX0RFQ0wodGhyb3dfZnJvbV9uYXRpdmVfY2FsbCkKIHsK
ICAgICBMTElOVF9CRUdJTigpOwotICAgIEFTU0VSVChnbG9iYWxEYXRhLmV4Y2VwdGlvbik7Cisg
ICAgQVNTRVJUKHZtLmV4Y2VwdGlvbik7CiAgICAgTExJTlRfRU5EKCk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcAkocmV2aXNpb24gMTQ4
NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIExM
SW50IHsKIAogI2lmICFFTkFCTEUoTExJTlRfQ19MT09QKQogCi1zdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgdm9pZCAoKnRhcmdldCkoKSwgY29uc3QgY2hhciAqdGh1bmtLaW5kKQorc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyhWTSogdm0sIHZvaWQgKCp0
YXJnZXQpKCksIGNvbnN0IGNoYXIgKnRodW5rS2luZCkKIHsKICAgICBKU0ludGVyZmFjZUpJVCBq
aXQ7CiAgICAgCkBAIC00NiwzOCArNDYsMzggQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBnZW5lcmF0ZVRodQogICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRy
KGJpdHdpc2VfY2FzdDx2b2lkKj4odGFyZ2V0KSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7CiAg
ICAgaml0Lmp1bXAoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKICAgICAKLSAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkxMSW50ICVzIHByb2xvZ3VlIHRodW5r
IiwgdGh1bmtLaW5kKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvckNh
bGxFbnRyeVRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvckNhbGxFbnRyeVRodW5rR2VuZXJhdG9yKFZNKiB2bSkK
IHsKLSAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8oZ2xvYmFsRGF0YSwgbGxpbnRf
ZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUsICJmdW5jdGlvbiBmb3IgY2FsbCIpOworICAgIHJl
dHVybiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyh2bSwgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxf
cHJvbG9ndWUsICJmdW5jdGlvbiBmb3IgY2FsbCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgZnVuY3Rpb25Gb3JDb25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvckNvbnN0cnVjdEVu
dHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0
aEp1bXBUbyhnbG9iYWxEYXRhLCBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3Vl
LCAiZnVuY3Rpb24gZm9yIGNvbnN0cnVjdCIpOworICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0
aEp1bXBUbyh2bSwgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZSwgImZ1bmN0
aW9uIGZvciBjb25zdHJ1Y3QiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9u
Rm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEp
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5rR2Vu
ZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8oZ2xv
YmFsRGF0YSwgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2ssICJmdW5jdGlvbiBm
b3IgY2FsbCB3aXRoIGFyaXR5IGNoZWNrIik7CisgICAgcmV0dXJuIGdlbmVyYXRlVGh1bmtXaXRo
SnVtcFRvKHZtLCBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjaywgImZ1bmN0aW9u
IGZvciBjYWxsIHdpdGggYXJpdHkgY2hlY2siKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGZ1bmN0aW9uRm9yQ29uc3RydWN0QXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvckNvbnN0cnVj
dEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIGdlbmVyYXRl
VGh1bmtXaXRoSnVtcFRvKGdsb2JhbERhdGEsIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3Rf
YXJpdHlfY2hlY2ssICJmdW5jdGlvbiBmb3IgY29uc3RydWN0IHdpdGggYXJpdHkgY2hlY2siKTsK
KyAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8odm0sIGxsaW50X2Z1bmN0aW9uX2Zv
cl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2ssICJmdW5jdGlvbiBmb3IgY29uc3RydWN0IHdpdGggYXJp
dHkgY2hlY2siKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV2YWxFbnRyeVRodW5rR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBl
dmFsRW50cnlUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIGdlbmVyYXRlVGh1
bmtXaXRoSnVtcFRvKGdsb2JhbERhdGEsIGxsaW50X2V2YWxfcHJvbG9ndWUsICJldmFsIik7Cisg
ICAgcmV0dXJuIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKHZtLCBsbGludF9ldmFsX3Byb2xvZ3Vl
LCAiZXZhbCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgcHJvZ3JhbUVudHJ5VGh1bmtH
ZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gZ2VuZXJh
dGVUaHVua1dpdGhKdW1wVG8oZ2xvYmFsRGF0YSwgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZSwgInBy
b2dyYW0iKTsKKyAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8odm0sIGxsaW50X3By
b2dyYW1fcHJvbG9ndWUsICJwcm9ncmFtIik7CiB9CiAKICNlbmRpZiAvLyAhRU5BQkxFKExMSU5U
X0NfTE9PUCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5o
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRU
aHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTYgKzM0LDE2IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIAogbmFtZXNwYWNlIExMSW50
IHsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JD
b25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcihKU0dsb2Jh
bERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5
Q2hlY2tUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBldmFsRW50cnlUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBwcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvckNhbGxFbnRyeVRodW5rR2VuZXJhdG9yKFZNKik7
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JDb25zdHJ1Y3RFbnRyeVRodW5rR2Vu
ZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JDYWxsQXJpdHlD
aGVja1RodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25G
b3JDb25zdHJ1Y3RBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiBldmFsRW50cnlUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKFZNKik7CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpMTEludAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMTQ4NjU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20J
KHdvcmtpbmcgY29weSkKQEAgLTMxMCw5ICszMTAsOSBAQCBtYWNybyBmdW5jdGlvbkFyaXR5Q2hl
Y2soZG9uZUxhYmVsLCBzbG93CiAgICAgY0NhbGwyKHNsb3dfcGF0aCwgY2ZyLCBQQykgICAjIFRo
aXMgc2xvd19wYXRoIGhhcyBhIHNpbXBsZSBwcm90b2NvbDogdDAgPSAwID0+IG5vIGVycm9yLCB0
MCAhPSAwID0+IGVycm9yCiAgICAgbW92ZSB0MSwgY2ZyCiAgICAgYnRpeiB0MCwgLmNvbnRpbnVl
Ci0gICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0YVtzcF0sIHQxCi0gICAgbG9hZHAg
SlNHbG9iYWxEYXRhOjpjYWxsRnJhbWVGb3JUaHJvd1t0MV0sIHQwCi0gICAgam1wIEpTR2xvYmFs
RGF0YTo6dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3dbdDFdCisgICAgbG9hZHAgSklUU3RhY2tGcmFt
ZTo6dm1bc3BdLCB0MQorICAgIGxvYWRwIFZNOjpjYWxsRnJhbWVGb3JUaHJvd1t0MV0sIHQwCisg
ICAgam1wIFZNOjp0YXJnZXRNYWNoaW5lUENGb3JUaHJvd1t0MV0KIC5jb250aW51ZToKICAgICAj
IFJlbG9hZCBDb2RlQmxvY2sgYW5kIFBDLCBzaW5jZSB0aGUgc2xvd19wYXRoIGNsb2JiZXJlZCBp
dC4KICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDEKQEAgLTE3NjksMTQgKzE3NjksMTQgQEAg
X2xsaW50X29wX2NhdGNoOgogICAgICMgdGhlIGludGVycHJldGVyJ3MgdGhyb3cgdHJhbXBvbGlu
ZSAoc2VlIF9sbGludF90aHJvd190cmFtcG9saW5lKS4KICAgICAjIFRoZSBKSVQgdGhyb3dpbmcg
cHJvdG9jb2wgY2FsbHMgZm9yIHRoZSBjZnIgdG8gYmUgaW4gdDAuIFRoZSB0aHJvd2luZwogICAg
ICMgY29kZSBtdXN0IGhhdmUga25vd24gdGhhdCB3ZSB3ZXJlIHRocm93aW5nIHRvIHRoZSBpbnRl
cnByZXRlciwgYW5kIGhhdmUKLSAgICAjIHNldCBKU0dsb2JhbERhdGE6OnRhcmdldEludGVycHJl
dGVyUENGb3JUaHJvdy4KKyAgICAjIHNldCBWTTo6dGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93
LgogICAgIG1vdmUgdDAsIGNmcgotICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6Omdsb2JhbERhdGFb
c3BdLCB0MwotICAgIGxvYWRpIEpTR2xvYmFsRGF0YTo6dGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRo
cm93W3QzXSwgUEMKLSAgICBsb2FkaSBKU0dsb2JhbERhdGE6OmV4Y2VwdGlvbiArIFBheWxvYWRP
ZmZzZXRbdDNdLCB0MAotICAgIGxvYWRpIEpTR2xvYmFsRGF0YTo6ZXhjZXB0aW9uICsgVGFnT2Zm
c2V0W3QzXSwgdDEKLSAgICBzdG9yZWkgMCwgSlNHbG9iYWxEYXRhOjpleGNlcHRpb24gKyBQYXls
b2FkT2Zmc2V0W3QzXQotICAgIHN0b3JlaSBFbXB0eVZhbHVlVGFnLCBKU0dsb2JhbERhdGE6OmV4
Y2VwdGlvbiArIFRhZ09mZnNldFt0M10gICAgICAgCisgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6
dm1bc3BdLCB0MworICAgIGxvYWRpIFZNOjp0YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3dbdDNd
LCBQQworICAgIGxvYWRpIFZNOjpleGNlcHRpb24gKyBQYXlsb2FkT2Zmc2V0W3QzXSwgdDAKKyAg
ICBsb2FkaSBWTTo6ZXhjZXB0aW9uICsgVGFnT2Zmc2V0W3QzXSwgdDEKKyAgICBzdG9yZWkgMCwg
Vk06OmV4Y2VwdGlvbiArIFBheWxvYWRPZmZzZXRbdDNdCisgICAgc3RvcmVpIEVtcHR5VmFsdWVU
YWcsIFZNOjpleGNlcHRpb24gKyBUYWdPZmZzZXRbdDNdICAgICAgIAogICAgIGxvYWRpIDRbUENd
LCB0MgogICAgIHN0b3JlaSB0MCwgUGF5bG9hZE9mZnNldFtjZnIsIHQyLCA4XQogICAgIHN0b3Jl
aSB0MSwgVGFnT2Zmc2V0W2NmciwgdDIsIDhdCkBAIC0xODYzLDE2ICsxODYzLDE2IEBAIF9sbGlu
dF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lOgogICAgICMgV2hlbiB0aHJvd2luZyBm
cm9tIHRoZSBpbnRlcnByZXRlciAoaS5lLiB0aHJvd2luZyBmcm9tIExMSW50U2xvd1BhdGhzKSwg
c28KICAgICAjIHRoZSB0aHJvdyB0YXJnZXQgaXMgbm90IG5lY2Vzc2FyaWx5IGludGVycHJldGVk
IGNvZGUsIHdlIGNvbWUgdG8gaGVyZS4KICAgICAjIFRoaXMgZXNzZW50aWFsbHkgZW11bGF0ZXMg
dGhlIEpJVCdzIHRocm93aW5nIHByb3RvY29sLgotICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6Omds
b2JhbERhdGFbc3BdLCB0MQotICAgIGxvYWRwIEpTR2xvYmFsRGF0YTo6Y2FsbEZyYW1lRm9yVGhy
b3dbdDFdLCB0MAotICAgIGptcCBKU0dsb2JhbERhdGE6OnRhcmdldE1hY2hpbmVQQ0ZvclRocm93
W3QxXQorICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6OnZtW3NwXSwgdDEKKyAgICBsb2FkcCBWTTo6
Y2FsbEZyYW1lRm9yVGhyb3dbdDFdLCB0MAorICAgIGptcCBWTTo6dGFyZ2V0TWFjaGluZVBDRm9y
VGhyb3dbdDFdCiAKIAogX2xsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CiAgICAg
cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHQyKQotICAgIGxvYWRwIEpJVFN0YWNrRnJh
bWU6Omdsb2JhbERhdGFbc3BdLCB0MQotICAgIGxvYWRwIEpTR2xvYmFsRGF0YTo6Y2FsbEZyYW1l
Rm9yVGhyb3dbdDFdLCB0MAotICAgIGptcCBKU0dsb2JhbERhdGE6OnRhcmdldE1hY2hpbmVQQ0Zv
clRocm93W3QxXQorICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6OnZtW3NwXSwgdDEKKyAgICBsb2Fk
cCBWTTo6Y2FsbEZyYW1lRm9yVGhyb3dbdDFdLCB0MAorICAgIGptcCBWTTo6dGFyZ2V0TWFjaGlu
ZVBDRm9yVGhyb3dbdDFdCiAKIAogbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhlY3V0YWJs
ZU9mZnNldFRvRnVuY3Rpb24pCkBAIC0xODgyLDggKzE4ODIsOCBAQCBtYWNybyBuYXRpdmVDYWxs
VHJhbXBvbGluZShleGVjdXRhYmxlT2ZmCiAgICAgc3RvcmVpIENlbGxUYWcsIFNjb3BlQ2hhaW4g
KyBUYWdPZmZzZXRbY2ZyXQogICAgIHN0b3JlaSB0MSwgU2NvcGVDaGFpbiArIFBheWxvYWRPZmZz
ZXRbY2ZyXQogICAgIGlmIFg4NgotICAgICAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjpnbG9iYWxE
YXRhICsgNFtzcF0sIHQzICMgQWRkaXRpb25hbCBvZmZzZXQgZm9yIHJldHVybiBhZGRyZXNzCi0g
ICAgICAgIHN0b3JlcCBjZnIsIEpTR2xvYmFsRGF0YTo6dG9wQ2FsbEZyYW1lW3QzXQorICAgICAg
ICBsb2FkcCBKSVRTdGFja0ZyYW1lOjp2bSArIDRbc3BdLCB0MyAjIEFkZGl0aW9uYWwgb2Zmc2V0
IGZvciByZXR1cm4gYWRkcmVzcworICAgICAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wQ2FsbEZyYW1l
W3QzXQogICAgICAgICBwZWVrIDAsIHQxCiAgICAgICAgIHN0b3JlcCB0MSwgUmV0dXJuUENbY2Zy
XQogICAgICAgICBtb3ZlIGNmciwgdDIgICMgdDIgPSBlY3gKQEAgLTE4OTMsMTAgKzE4OTMsMTAg
QEAgbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhlY3V0YWJsZU9mZgogICAgICAgICBtb3Zl
IHQwLCBjZnIKICAgICAgICAgY2FsbCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvblt0MV0KICAg
ICAgICAgYWRkcCAxNiAtIDQsIHNwCi0gICAgICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6Omdsb2Jh
bERhdGEgKyA0W3NwXSwgdDMKKyAgICAgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6dm0gKyA0W3Nw
XSwgdDMKICAgICBlbHNpZiBBUk0gb3IgQVJNdjcgb3IgQVJNdjdfVFJBRElUSU9OQUwKLSAgICAg
ICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0YVtzcF0sIHQzCi0gICAgICAgIHN0b3Jl
cCBjZnIsIEpTR2xvYmFsRGF0YTo6dG9wQ2FsbEZyYW1lW3QzXQorICAgICAgICBsb2FkcCBKSVRT
dGFja0ZyYW1lOjp2bVtzcF0sIHQzCisgICAgICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BDYWxsRnJh
bWVbdDNdCiAgICAgICAgIG1vdmUgdDAsIHQyCiAgICAgICAgIHByZXNlcnZlUmV0dXJuQWRkcmVz
c0FmdGVyQ2FsbCh0MykKICAgICAgICAgc3RvcmVwIHQzLCBSZXR1cm5QQ1tjZnJdCkBAIC0xOTA2
LDEwICsxOTA2LDEwIEBAIG1hY3JvIG5hdGl2ZUNhbGxUcmFtcG9saW5lKGV4ZWN1dGFibGVPZmYK
ICAgICAgICAgbW92ZSB0MiwgY2ZyCiAgICAgICAgIGNhbGwgZXhlY3V0YWJsZU9mZnNldFRvRnVu
Y3Rpb25bdDFdCiAgICAgICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHQzKQot
ICAgICAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjpnbG9iYWxEYXRhW3NwXSwgdDMKKyAgICAgICAg
bG9hZHAgSklUU3RhY2tGcmFtZTo6dm1bc3BdLCB0MwogICAgIGVsc2lmIE1JUFMKLSAgICAgICAg
bG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0YVtzcF0sIHQzCi0gICAgICAgIHN0b3JlcCBj
ZnIsIEpTR2xvYmFsRGF0YTo6dG9wQ2FsbEZyYW1lW3QzXQorICAgICAgICBsb2FkcCBKSVRTdGFj
a0ZyYW1lOjp2bVtzcF0sIHQzCisgICAgICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BDYWxsRnJhbWVb
dDNdCiAgICAgICAgIG1vdmUgdDAsIHQyCiAgICAgICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0Fm
dGVyQ2FsbCh0MykKICAgICAgICAgc3RvcmVwIHQzLCBSZXR1cm5QQ1tjZnJdCkBAIC0xOTIwLDEw
ICsxOTIwLDEwIEBAIG1hY3JvIG5hdGl2ZUNhbGxUcmFtcG9saW5lKGV4ZWN1dGFibGVPZmYKICAg
ICAgICAgbW92ZSB0MCwgYTAKICAgICAgICAgY2FsbCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlv
blt0MV0KICAgICAgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4odDMpCi0gICAg
ICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6Omdsb2JhbERhdGFbc3BdLCB0MworICAgICAgICBsb2Fk
cCBKSVRTdGFja0ZyYW1lOjp2bVtzcF0sIHQzCiAgICAgZWxzaWYgU0g0Ci0gICAgICAgIGxvYWRw
IEpJVFN0YWNrRnJhbWU6Omdsb2JhbERhdGFbc3BdLCB0MwotICAgICAgICBzdG9yZXAgY2ZyLCBK
U0dsb2JhbERhdGE6OnRvcENhbGxGcmFtZVt0M10KKyAgICAgICAgbG9hZHAgSklUU3RhY2tGcmFt
ZTo6dm1bc3BdLCB0MworICAgICAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wQ2FsbEZyYW1lW3QzXQog
ICAgICAgICBtb3ZlIHQwLCB0MgogICAgICAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNh
bGwodDMpCiAgICAgICAgIHN0b3JlcCB0MywgUmV0dXJuUENbY2ZyXQpAQCAtMTkzMywxMCArMTkz
MywxMCBAQCBtYWNybyBuYXRpdmVDYWxsVHJhbXBvbGluZShleGVjdXRhYmxlT2ZmCiAgICAgICAg
IG1vdmUgdDIsIGNmcgogICAgICAgICBjYWxsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uW3Qx
XQogICAgICAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybih0MykKLSAgICAgICAg
bG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0YVtzcF0sIHQzCisgICAgICAgIGxvYWRwIEpJ
VFN0YWNrRnJhbWU6OnZtW3NwXSwgdDMKICAgICBlbHNpZiBDX0xPT1AKLSAgICAgICAgbG9hZHAg
SklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0YVtzcF0sIHQzCi0gICAgICAgIHN0b3JlcCBjZnIsIEpT
R2xvYmFsRGF0YTo6dG9wQ2FsbEZyYW1lW3QzXQorICAgICAgICBsb2FkcCBKSVRTdGFja0ZyYW1l
Ojp2bVtzcF0sIHQzCisgICAgICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BDYWxsRnJhbWVbdDNdCiAg
ICAgICAgIG1vdmUgdDAsIHQyCiAgICAgICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2Fs
bCh0MykKICAgICAgICAgc3RvcmVwIHQzLCBSZXR1cm5QQ1tjZnJdCkBAIC0xOTQ2LDExICsxOTQ2
LDExIEBAIG1hY3JvIG5hdGl2ZUNhbGxUcmFtcG9saW5lKGV4ZWN1dGFibGVPZmYKICAgICAgICAg
bW92ZSB0MiwgY2ZyCiAgICAgICAgIGNsb29wQ2FsbE5hdGl2ZSBleGVjdXRhYmxlT2Zmc2V0VG9G
dW5jdGlvblt0MV0KICAgICAgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4odDMp
Ci0gICAgICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6Omdsb2JhbERhdGFbc3BdLCB0MworICAgICAg
ICBsb2FkcCBKSVRTdGFja0ZyYW1lOjp2bVtzcF0sIHQzCiAgICAgZWxzZSAgCiAgICAgICAgIGVy
cm9yCiAgICAgZW5kCi0gICAgYmluZXEgSlNHbG9iYWxEYXRhOjpleGNlcHRpb24gKyBUYWdPZmZz
ZXRbdDNdLCBFbXB0eVZhbHVlVGFnLCAuZXhjZXB0aW9uCisgICAgYmluZXEgVk06OmV4Y2VwdGlv
biArIFRhZ09mZnNldFt0M10sIEVtcHR5VmFsdWVUYWcsIC5leGNlcHRpb24KICAgICByZXQKIC5l
eGNlcHRpb246CiAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHQxKSAjIFRoaXMg
aXMgcmVhbGx5IG9ubHkgbmVlZGVkIG9uIFg4NgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDE0
ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYsOSArMTk2LDkgQEAgbWFjcm8gZnVuY3Rpb25B
cml0eUNoZWNrKGRvbmVMYWJlbCwgc2xvdwogICAgIGNDYWxsMihzbG93X3BhdGgsIGNmciwgUEMp
ICAgIyBUaGlzIHNsb3dfcGF0aCBoYXMgYSBzaW1wbGUgcHJvdG9jb2w6IHQwID0gMCA9PiBubyBl
cnJvciwgdDAgIT0gMCA9PiBlcnJvcgogICAgIG1vdmUgdDEsIGNmcgogICAgIGJ0aXogdDAsIC5j
b250aW51ZQotICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6Omdsb2JhbERhdGFbc3BdLCB0MQotICAg
IGxvYWRwIEpTR2xvYmFsRGF0YTo6Y2FsbEZyYW1lRm9yVGhyb3dbdDFdLCB0MAotICAgIGptcCBK
U0dsb2JhbERhdGE6OnRhcmdldE1hY2hpbmVQQ0ZvclRocm93W3QxXQorICAgIGxvYWRwIEpJVFN0
YWNrRnJhbWU6OnZtW3NwXSwgdDEKKyAgICBsb2FkcCBWTTo6Y2FsbEZyYW1lRm9yVGhyb3dbdDFd
LCB0MAorICAgIGptcCBWTTo6dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3dbdDFdCiAuY29udGludWU6
CiAgICAgIyBSZWxvYWQgQ29kZUJsb2NrIGFuZCByZXNldCBQQywgc2luY2UgdGhlIHNsb3dfcGF0
aCBjbG9iYmVyZWQgdGhlbS4KICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDEKQEAgLTE1OTcs
MTYgKzE1OTcsMTYgQEAgX2xsaW50X29wX2NhdGNoOgogICAgICMgdGhlIGludGVycHJldGVyJ3Mg
dGhyb3cgdHJhbXBvbGluZSAoc2VlIF9sbGludF90aHJvd190cmFtcG9saW5lKS4KICAgICAjIFRo
ZSBKSVQgdGhyb3dpbmcgcHJvdG9jb2wgY2FsbHMgZm9yIHRoZSBjZnIgdG8gYmUgaW4gdDAuIFRo
ZSB0aHJvd2luZwogICAgICMgY29kZSBtdXN0IGhhdmUga25vd24gdGhhdCB3ZSB3ZXJlIHRocm93
aW5nIHRvIHRoZSBpbnRlcnByZXRlciwgYW5kIGhhdmUKLSAgICAjIHNldCBKU0dsb2JhbERhdGE6
OnRhcmdldEludGVycHJldGVyUENGb3JUaHJvdy4KKyAgICAjIHNldCBWTTo6dGFyZ2V0SW50ZXJw
cmV0ZXJQQ0ZvclRocm93LgogICAgIG1vdmUgdDAsIGNmcgogICAgIGxvYWRwIENvZGVCbG9ja1tj
ZnJdLCBQQgogICAgIGxvYWRwIENvZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNbUEJdLCBQQgotICAg
IGxvYWRwIEpJVFN0YWNrRnJhbWU6Omdsb2JhbERhdGFbc3BdLCB0MwotICAgIGxvYWRwIEpTR2xv
YmFsRGF0YTo6dGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93W3QzXSwgUEMKKyAgICBsb2FkcCBK
SVRTdGFja0ZyYW1lOjp2bVtzcF0sIHQzCisgICAgbG9hZHAgVk06OnRhcmdldEludGVycHJldGVy
UENGb3JUaHJvd1t0M10sIFBDCiAgICAgc3VicCBQQiwgUEMKICAgICByc2hpZnRwIDMsIFBDCi0g
ICAgbG9hZHEgSlNHbG9iYWxEYXRhOjpleGNlcHRpb25bdDNdLCB0MAotICAgIHN0b3JlcSAwLCBK
U0dsb2JhbERhdGE6OmV4Y2VwdGlvblt0M10KKyAgICBsb2FkcSBWTTo6ZXhjZXB0aW9uW3QzXSwg
dDAKKyAgICBzdG9yZXEgMCwgVk06OmV4Y2VwdGlvblt0M10KICAgICBsb2FkaXNGcm9tSW5zdHJ1
Y3Rpb24oMSwgdDIpCiAgICAgc3RvcmVxIHQwLCBbY2ZyLCB0MiwgOF0KICAgICB0cmFjZUV4ZWN1
dGlvbigpCkBAIC0xNjI2LDE2ICsxNjI2LDE2IEBAIF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0
aF90cmFtcG9saW5lOgogICAgICMgV2hlbiB0aHJvd2luZyBmcm9tIHRoZSBpbnRlcnByZXRlciAo
aS5lLiB0aHJvd2luZyBmcm9tIExMSW50U2xvd1BhdGhzKSwgc28KICAgICAjIHRoZSB0aHJvdyB0
YXJnZXQgaXMgbm90IG5lY2Vzc2FyaWx5IGludGVycHJldGVkIGNvZGUsIHdlIGNvbWUgdG8gaGVy
ZS4KICAgICAjIFRoaXMgZXNzZW50aWFsbHkgZW11bGF0ZXMgdGhlIEpJVCdzIHRocm93aW5nIHBy
b3RvY29sLgotICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6Omdsb2JhbERhdGFbc3BdLCB0MQotICAg
IGxvYWRwIEpTR2xvYmFsRGF0YTo6Y2FsbEZyYW1lRm9yVGhyb3dbdDFdLCB0MAotICAgIGptcCBK
U0dsb2JhbERhdGE6OnRhcmdldE1hY2hpbmVQQ0ZvclRocm93W3QxXQorICAgIGxvYWRwIEpJVFN0
YWNrRnJhbWU6OnZtW3NwXSwgdDEKKyAgICBsb2FkcCBWTTo6Y2FsbEZyYW1lRm9yVGhyb3dbdDFd
LCB0MAorICAgIGptcCBWTTo6dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3dbdDFdCiAKIAogX2xsaW50
X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmU6CiAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNz
QWZ0ZXJDYWxsKHQyKQotICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6Omdsb2JhbERhdGFbc3BdLCB0
MQotICAgIGxvYWRwIEpTR2xvYmFsRGF0YTo6Y2FsbEZyYW1lRm9yVGhyb3dbdDFdLCB0MAotICAg
IGptcCBKU0dsb2JhbERhdGE6OnRhcmdldE1hY2hpbmVQQ0ZvclRocm93W3QxXQorICAgIGxvYWRw
IEpJVFN0YWNrRnJhbWU6OnZtW3NwXSwgdDEKKyAgICBsb2FkcCBWTTo6Y2FsbEZyYW1lRm9yVGhy
b3dbdDFdLCB0MAorICAgIGptcCBWTTo6dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3dbdDFdCiAKICMg
R2l2ZXMgeW91IHRoZSBzY29wZSBpbiB0MCwgd2hpbGUgYWxsb3dpbmcgeW91IHRvIG9wdGlvbmFs
bHkgcGVyZm9ybSBhZGRpdGlvbmFsIGNoZWNrcyBvbiB0aGUKICMgc2NvcGVzIGFzIHRoZXkgYXJl
IHRyYXZlcnNlZC4gc2NvcGVDaGVjaygpIGlzIGNhbGxlZCB3aXRoIHR3byBhcmd1bWVudHM6IHRo
ZSByZWdpc3RlcgpAQCAtMTcwMiw4ICsxNzAyLDggQEAgX2xsaW50X29wX3B1dF9zY29wZWRfdmFy
OgogbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24p
CiAgICAgc3RvcmVwIDAsIENvZGVCbG9ja1tjZnJdCiAgICAgaWYgWDg2XzY0Ci0gICAgICAgIGxv
YWRwIEpJVFN0YWNrRnJhbWU6Omdsb2JhbERhdGEgKyA4W3NwXSwgdDAKLSAgICAgICAgc3RvcmVw
IGNmciwgSlNHbG9iYWxEYXRhOjp0b3BDYWxsRnJhbWVbdDBdCisgICAgICAgIGxvYWRwIEpJVFN0
YWNrRnJhbWU6OnZtICsgOFtzcF0sIHQwCisgICAgICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BDYWxs
RnJhbWVbdDBdCiAgICAgICAgIGxvYWRwIENhbGxlckZyYW1lW2Nmcl0sIHQwCiAgICAgICAgIGxv
YWRxIFNjb3BlQ2hhaW5bdDBdLCB0MQogICAgICAgICBzdG9yZXEgdDEsIFNjb3BlQ2hhaW5bY2Zy
XQpAQCAtMTcxNiwxNSArMTcxNiwxNSBAQCBtYWNybyBuYXRpdmVDYWxsVHJhbXBvbGluZShleGVj
dXRhYmxlT2ZmCiAgICAgICAgIG1vdmUgdDAsIGNmciAjIFJlc3RvcmUgY2ZyIHRvIGF2b2lkIGxv
YWRpbmcgZnJvbSBzdGFjawogICAgICAgICBjYWxsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9u
W3QxXQogICAgICAgICBhZGRwIDE2IC0gOCwgc3AKLSAgICAgICAgbG9hZHAgSklUU3RhY2tGcmFt
ZTo6Z2xvYmFsRGF0YSArIDhbc3BdLCB0MworICAgICAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjp2
bSArIDhbc3BdLCB0MwogCiAgICAgZWxzaWYgQ19MT09QCiAgICAgICAgIGxvYWRwIENhbGxlckZy
YW1lW2Nmcl0sIHQwCiAgICAgICAgIGxvYWRwIFNjb3BlQ2hhaW5bdDBdLCB0MQogICAgICAgICBz
dG9yZXAgdDEsIFNjb3BlQ2hhaW5bY2ZyXQogCi0gICAgICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6
Omdsb2JhbERhdGFbc3BdLCB0MwotICAgICAgICBzdG9yZXAgY2ZyLCBKU0dsb2JhbERhdGE6OnRv
cENhbGxGcmFtZVt0M10KKyAgICAgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6dm1bc3BdLCB0Mwor
ICAgICAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wQ2FsbEZyYW1lW3QzXQogCiAgICAgICAgIG1vdmUg
dDAsIHQyCiAgICAgICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbCh0MykKQEAgLTE3
MzYsMjAgKzE3MzYsMjAgQEAgbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhlY3V0YWJsZU9m
ZgogICAgICAgICBjbG9vcENhbGxOYXRpdmUgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb25bdDFd
CiAKICAgICAgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4odDMpCi0gICAgICAg
IGxvYWRwIEpJVFN0YWNrRnJhbWU6Omdsb2JhbERhdGFbc3BdLCB0MworICAgICAgICBsb2FkcCBK
SVRTdGFja0ZyYW1lOjp2bVtzcF0sIHQzCiAgICAgZWxzZQogICAgICAgICBlcnJvcgogICAgIGVu
ZAogCi0gICAgYnRxbnogSlNHbG9iYWxEYXRhOjpleGNlcHRpb25bdDNdLCAuZXhjZXB0aW9uCisg
ICAgYnRxbnogVk06OmV4Y2VwdGlvblt0M10sIC5leGNlcHRpb24KICAgICByZXQKIC5leGNlcHRp
b246CiAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHQxKQogICAgIGxvYWRpIEFy
Z3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXSwgUEMKICAgICBsb2FkcCBDb2RlQmxvY2tbY2Zy
XSwgUEIKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1faW5zdHJ1Y3Rpb25zW1BCXSwgUEIKLSAgICBs
b2FkcCBKSVRTdGFja0ZyYW1lOjpnbG9iYWxEYXRhW3NwXSwgdDAKLSAgICBzdG9yZXAgY2ZyLCBK
U0dsb2JhbERhdGE6OnRvcENhbGxGcmFtZVt0MF0KKyAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjp2
bVtzcF0sIHQwCisgICAgc3RvcmVwIGNmciwgVk06OnRvcENhbGxGcmFtZVt0MF0KICAgICBjYWxs
U2xvd1BhdGgoX2xsaW50X3Rocm93X2Zyb21fbmF0aXZlX2NhbGwpCiAgICAgam1wIF9sbGludF90
aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lCiBlbmQKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9u
IDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMzYyLDggKzM2Miw4IEBAIG1hY3JvIGZ1bmN0aW9u
SW5pdGlhbGl6YXRpb24ocHJvZmlsZUFyZ1MKICAgICAgICAgCiAgICAgIyBDaGVjayBzdGFjayBo
ZWlnaHQuCiAgICAgbG9hZGkgQ29kZUJsb2NrOjptX251bUNhbGxlZVJlZ2lzdGVyc1t0MV0sIHQw
Ci0gICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbERhdGFbdDFdLCB0MgotICAgIGxvYWRwIEpT
R2xvYmFsRGF0YTo6aW50ZXJwcmV0ZXJbdDJdLCB0MiAgICMgRklYTUU6IENhbiBnZXQgdG8gdGhl
IEpTU3RhY2sgZnJvbSB0aGUgSklUU3RhY2tGcmFtZQorICAgIGxvYWRwIENvZGVCbG9jazo6bV92
bVt0MV0sIHQyCisgICAgbG9hZHAgVk06OmludGVycHJldGVyW3QyXSwgdDIgICAjIEZJWE1FOiBD
YW4gZ2V0IHRvIHRoZSBKU1N0YWNrIGZyb20gdGhlIEpJVFN0YWNrRnJhbWUKICAgICBsc2hpZnRp
IDMsIHQwCiAgICAgYWRkcCB0MCwgY2ZyLCB0MAogICAgIGJwYWVxIEludGVycHJldGVyOjptX3N0
YWNrICsgSlNTdGFjazo6bV9lbmRbdDJdLCB0MCwgLnN0YWNrSGVpZ2h0T0sKQEAgLTEwNTcsOCAr
MTA1Nyw4IEBAIF9sbGludF9vcF9qbmdyZWF0ZXJlcToKIAogX2xsaW50X29wX2xvb3BfaGludDoK
ICAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0
YVtzcF0sIHQxCi0gICAgbG9hZGIgSlNHbG9iYWxEYXRhOjp3YXRjaGRvZytXYXRjaGRvZzo6bV90
aW1lckRpZEZpcmVbdDFdLCB0MAorICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6OnZtW3NwXSwgdDEK
KyAgICBsb2FkYiBWTTo6d2F0Y2hkb2crV2F0Y2hkb2c6Om1fdGltZXJEaWRGaXJlW3QxXSwgdDAK
ICAgICBidGJueiB0MCwgLmhhbmRsZVdhdGNoZG9nVGltZXIKIC5hZnRlcldhdGNoZG9nVGltZXJD
aGVjazoKICAgICBjaGVja1N3aXRjaFRvSklURm9yTG9vcCgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lv
biAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NSw3ICsyNjUsNyBAQCBKU1ZhbHVlIENMb29w
OjpleGVjdXRlKENhbGxGcmFtZSogY2FsbEZyCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAg
ICAgfQogCi0gICAgQVNTRVJUKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLnRvcENhbGxGcmFtZSA9
PSBjYWxsRnJhbWUpOworICAgIEFTU0VSVChjYWxsRnJhbWUtPnZtKCkudG9wQ2FsbEZyYW1lID09
IGNhbGxGcmFtZSk7CiAKICAgICAvLyBEZWZpbmUgdGhlIHBzZXVkbyByZWdpc3RlcnMgdXNlZCBi
eSB0aGUgTExJTlQgQyBMb29wIGJhY2tlbmQ6CiAgICAgQVNTRVJUKHNpemVvZihDTG9vcFJlZ2lz
dGVyKSA9PSBzaXplb2YoaW50cHRyX3QpKTsKQEAgLTMxOSwxMCArMzE5LDEwIEBAIEpTVmFsdWUg
Q0xvb3A6OmV4ZWN1dGUoQ2FsbEZyYW1lKiBjYWxsRnIKICAgICAvLyBUaGUgbGxpbnQgZXhwZWN0
cyB0aGUgbmF0aXZlIHN0YWNrIHBvaW50ZXIsIHNwLCB0byBiZSBwb2ludGluZyB0byB0aGUKICAg
ICAvLyBqaXRTdGFja0ZyYW1lICh3aGljaCBpcyB0aGUgc2ltdWxhdGlvbiBvZiB0aGUgbmF0aXZl
IHN0YWNrIGZyYW1lKToKICAgICBKSVRTdGFja0ZyYW1lKiBjb25zdCBzcCA9ICZqaXRTdGFja0Zy
YW1lOwotICAgIHNwLT5nbG9iYWxEYXRhID0gJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpOworICAg
IHNwLT52bSA9ICZjYWxsRnJhbWUtPnZtKCk7CiAKLSAgICAvLyBTZXQgdXAgYW4gYWxpYXMgZm9y
IHRoZSBnbG9iYWxEYXRhIHB0ciBpbiB0aGUgSklUU3RhY2tGcmFtZToKLSAgICBKU0dsb2JhbERh
dGEqICZnbG9iYWxEYXRhID0gc3AtPmdsb2JhbERhdGE7CisgICAgLy8gU2V0IHVwIGFuIGFsaWFz
IGZvciB0aGUgdm0gcHRyIGluIHRoZSBKSVRTdGFja0ZyYW1lOgorICAgIFZNKiAmdm0gPSBzcC0+
dm07CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7
CiAgICAgSW5zdHJ1Y3Rpb24qIHZQQzsKQEAgLTQyMyw3ICs0MjMsNyBAQCBKU1ZhbHVlIENMb29w
OjpleGVjdXRlKENhbGxGcmFtZSogY2FsbEZyCiAgICAgICAgICAgICBjYWxsRnJhbWUgPSBjYWxs
RnJhbWUtPmNhbGxlckZyYW1lKCk7CiAKICAgICAgICAgICAgIC8vIFRoZSBwYXJ0IGluIGdldEhv
c3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKCk6Ci0gICAgICAgICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGdsb2JhbERhdGEtPmhvc3RDYWxsUmV0dXJuVmFsdWU7CisgICAgICAgICAgICBKU1Zh
bHVlIHJlc3VsdCA9IHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlOwogI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCiAgICAgICAgICAgICB0MS5pID0gcmVzdWx0LnRhZygpOwogICAgICAgICAgICAgdDAuaSA9
IHJlc3VsdC5wYXlsb2FkKCk7CkBAIC00MzUsNyArNDM1LDcgQEAgSlNWYWx1ZSBDTG9vcDo6ZXhl
Y3V0ZShDYWxsRnJhbWUqIGNhbGxGcgogCiAgICAgICAgIE9GRkxJTkVfQVNNX0dMVUVfTEFCRUwo
Y3RpT3BUaHJvd05vdENhdWdodCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsb2Jh
bERhdGEtPmV4Y2VwdGlvbjsKKyAgICAgICAgICAgIHJldHVybiB2bS0+ZXhjZXB0aW9uOwogICAg
ICAgICB9CiAKICNpZiAhRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2Nsb29wLnJiCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2Nsb29wLnJiCShyZXZpc2lvbiAxNDg2NTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9jbG9vcC5yYgkod29ya2luZyBjb3B5
KQpAQCAtMTc4LDcgKzE3OCw3IEBAIGNsYXNzIEFkZHJlc3MKICAgICBkZWYgcG9pbnRlckV4cHIK
ICAgICAgICAgaWYgYmFzZS5pc19hPyBSZWdpc3RlcklEIGFuZCBiYXNlLm5hbWUgPT0gInNwIiAK
ICAgICAgICAgICAgIG9mZnNldFZhbHVlID0gIiN7b2Zmc2V0LnZhbHVlfSIKLSAgICAgICAgICAg
ICIoQVNTRVJUKCN7b2Zmc2V0VmFsdWV9ID09IG9mZnNldG9mKEpJVFN0YWNrRnJhbWUsIGdsb2Jh
bERhdGEpKSwgJnNwLT5nbG9iYWxEYXRhKSIKKyAgICAgICAgICAgICIoQVNTRVJUKCN7b2Zmc2V0
VmFsdWV9ID09IG9mZnNldG9mKEpJVFN0YWNrRnJhbWUsIHZtKSksICZzcC0+dm0pIgogICAgICAg
ICBlbHNpZiBvZmZzZXQudmFsdWUgPT0gMAogICAgICAgICAgICAgIiN7YmFzZS5jbFZhbHVlKDpp
bnQ4UHRyKX0iCiAgICAgICAgIGVsc2lmIG9mZnNldC52YWx1ZSA+IDAKQEAgLTI1MCw3ICsyNTAs
NyBAQCBjbGFzcyBCYXNlSW5kZXgKICAgICBkZWYgcG9pbnRlckV4cHIKICAgICAgICAgaWYgYmFz
ZS5pc19hPyBSZWdpc3RlcklEIGFuZCBiYXNlLm5hbWUgPT0gInNwIgogICAgICAgICAgICAgb2Zm
c2V0VmFsdWUgPSAiKCN7aW5kZXguY2xWYWx1ZX0gPDwgI3tzY2FsZVNoaWZ0fSkgKyAje29mZnNl
dC5jbFZhbHVlfSkiCi0gICAgICAgICAgICAiKEFTU0VSVCgje29mZnNldFZhbHVlfSA9PSBvZmZz
ZXRvZihKSVRTdGFja0ZyYW1lLCBnbG9iYWxEYXRhKSksICZzcC0+Z2xvYmFsRGF0YSkiCisgICAg
ICAgICAgICAiKEFTU0VSVCgje29mZnNldFZhbHVlfSA9PSBvZmZzZXRvZihKSVRTdGFja0ZyYW1l
LCB2bSkpLCAmc3AtPnZtKSIKICAgICAgICAgZWxzZQogICAgICAgICAgICAgIiN7YmFzZS5jbFZh
bHVlKDppbnQ4UHRyKX0gKyAoI3tpbmRleC5jbFZhbHVlfSA8PCAje3NjYWxlU2hpZnR9KSArICN7
b2Zmc2V0LmNsVmFsdWV9IgogICAgICAgICBlbmQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvQVNUQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvQVNUQnVpbGRlci5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTAgKzcz
LDEwIEBAIGNsYXNzIEFTVEJ1aWxkZXIgewogICAgICAgICBPcGVyYXRvciBtX29wOwogICAgIH07
CiBwdWJsaWM6Ci0gICAgQVNUQnVpbGRlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFNvdXJj
ZUNvZGUqIHNvdXJjZUNvZGUpCi0gICAgICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisg
ICAgQVNUQnVpbGRlcihWTSogdm0sIFNvdXJjZUNvZGUqIHNvdXJjZUNvZGUpCisgICAgICAgIDog
bV92bSh2bSkKICAgICAgICAgLCBtX3NvdXJjZUNvZGUoc291cmNlQ29kZSkKLSAgICAgICAgLCBt
X3Njb3BlKGdsb2JhbERhdGEpCisgICAgICAgICwgbV9zY29wZSh2bSkKICAgICAgICAgLCBtX2V2
YWxDb3VudCgwKQogICAgIHsKICAgICB9CkBAIC0xMTUsNyArMTE1LDcgQEAgcHVibGljOgogICAg
IEV4cHJlc3Npb25Ob2RlKiBtYWtlQmluYXJ5Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBp
bnQgdG9rZW4sIHN0ZDo6cGFpcjxFeHByZXNzaW9uTm9kZSosIEJpbmFyeU9wSW5mbz4sIHN0ZDo6
cGFpcjxFeHByZXNzaW9uTm9kZSosIEJpbmFyeU9wSW5mbz4pOwogICAgIEV4cHJlc3Npb25Ob2Rl
KiBtYWtlRnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9u
Tm9kZSogZnVuYywgQXJndW1lbnRzTm9kZSogYXJncywgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGlu
dCBlbmQpOwogCi0gICAgSlNDOjpTb3VyY2VFbGVtZW50cyogY3JlYXRlU291cmNlRWxlbWVudHMo
KSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgSlNDOjpTb3VyY2VFbGVtZW50cygpOyB9Cisg
ICAgSlNDOjpTb3VyY2VFbGVtZW50cyogY3JlYXRlU291cmNlRWxlbWVudHMoKSB7IHJldHVybiBu
ZXcgKG1fdm0pIEpTQzo6U291cmNlRWxlbWVudHMoKTsgfQogCiAgICAgUGFyc2VyQXJlbmFEYXRh
PERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4qIHZhckRlY2xhcmF0aW9ucygpIHsgcmV0dXJu
IG1fc2NvcGUubV92YXJEZWNsYXJhdGlvbnM7IH0KICAgICBQYXJzZXJBcmVuYURhdGE8RGVjbGFy
YXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2s+KiBmdW5jRGVjbGFyYXRpb25zKCkgeyByZXR1cm4g
bV9zY29wZS5tX2Z1bmNEZWNsYXJhdGlvbnM7IH0KQEAgLTEyNCw3ICsxMjQsNyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGFwcGVuZFRvQ29tbWEoQ29tbWFOb2RlKiBjb21tYU5vZGUsIEV4cHJlc3Np
b25Ob2RlKiBleHByKSB7IGNvbW1hTm9kZS0+YXBwZW5kKGV4cHIpOyB9CiAKLSAgICBDb21tYU5v
ZGUqIGNyZWF0ZUNvbW1hRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHBy
ZXNzaW9uTm9kZSogbGhzLCBFeHByZXNzaW9uTm9kZSogcmhzKSB7IHJldHVybiBuZXcgKG1fZ2xv
YmFsRGF0YSkgQ29tbWFOb2RlKGxvY2F0aW9uLCBsaHMsIHJocyk7IH0KKyAgICBDb21tYU5vZGUq
IGNyZWF0ZUNvbW1hRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogbGhzLCBFeHByZXNzaW9uTm9kZSogcmhzKSB7IHJldHVybiBuZXcgKG1fdm0pIENv
bW1hTm9kZShsb2NhdGlvbiwgbGhzLCByaHMpOyB9CiAKICAgICBFeHByZXNzaW9uTm9kZSogbWFr
ZUFzc2lnbk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGxlZnQs
IE9wZXJhdG9yLCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgbGVmdEhhc0Fzc2lnbm1lbnRz
LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5k
KTsKICAgICBFeHByZXNzaW9uTm9kZSogbWFrZVByZWZpeE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgRXhwcmVzc2lvbk5vZGUqLCBPcGVyYXRvciwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGlu
dCBlbmQpOwpAQCAtMTUwLDc2ICsxNTAsNzYgQEAgcHVibGljOgogICAgICAgICBpZiAoZXhwci0+
aXNOdW1iZXIoKSkKICAgICAgICAgICAgIHJldHVybiBjcmVhdGVCb29sZWFuKGxvY2F0aW9uLCAh
c3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIpLT52YWx1ZSgpKTsKIAotICAgICAgICByZXR1
cm4gbmV3IChtX2dsb2JhbERhdGEpIExvZ2ljYWxOb3ROb2RlKGxvY2F0aW9uLCBleHByKTsKKyAg
ICAgICAgcmV0dXJuIG5ldyAobV92bSkgTG9naWNhbE5vdE5vZGUobG9jYXRpb24sIGV4cHIpOwog
ICAgIH0KLSAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlVW5hcnlQbHVzKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByKSB7IHJldHVybiBuZXcgKG1f
Z2xvYmFsRGF0YSkgVW5hcnlQbHVzTm9kZShsb2NhdGlvbiwgZXhwcik7IH0KKyAgICBFeHByZXNz
aW9uTm9kZSogY3JlYXRlVW5hcnlQbHVzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IEV4cHJlc3Npb25Ob2RlKiBleHByKSB7IHJldHVybiBuZXcgKG1fdm0pIFVuYXJ5UGx1c05vZGUo
bG9jYXRpb24sIGV4cHIpOyB9CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVZvaWQoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpCiAgICAgewog
ICAgICAgICBpbmNDb25zdGFudHMoKTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRh
KSBWb2lkTm9kZShsb2NhdGlvbiwgZXhwcik7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIFZv
aWROb2RlKGxvY2F0aW9uLCBleHByKTsKICAgICB9CiAgICAgRXhwcmVzc2lvbk5vZGUqIHRoaXNF
eHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCiAgICAgewogICAgICAgICB1c2Vz
VGhpcygpOwotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFRoaXNOb2RlKGxvY2F0
aW9uKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgVGhpc05vZGUobG9jYXRpb24pOwogICAg
IH0KICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlUmVzb2x2ZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgaW50IHN0YXJ0KQogICAgIHsK
LSAgICAgICAgaWYgKG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICpp
ZGVudCkKKyAgICAgICAgaWYgKG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqaWRl
bnQpCiAgICAgICAgICAgICB1c2VzQXJndW1lbnRzKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1f
Z2xvYmFsRGF0YSkgUmVzb2x2ZU5vZGUobG9jYXRpb24sICppZGVudCwgc3RhcnQpOworICAgICAg
ICByZXR1cm4gbmV3IChtX3ZtKSBSZXNvbHZlTm9kZShsb2NhdGlvbiwgKmlkZW50LCBzdGFydCk7
CiAgICAgfQotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVPYmplY3RMaXRlcmFsKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBPYmpl
Y3RMaXRlcmFsTm9kZShsb2NhdGlvbik7IH0KLSAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlT2Jq
ZWN0TGl0ZXJhbChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBQcm9wZXJ0eUxpc3RO
b2RlKiBwcm9wZXJ0aWVzKSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgT2JqZWN0TGl0ZXJh
bE5vZGUobG9jYXRpb24sIHByb3BlcnRpZXMpOyB9CisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0
ZU9iamVjdExpdGVyYWwoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikgeyByZXR1cm4g
bmV3IChtX3ZtKSBPYmplY3RMaXRlcmFsTm9kZShsb2NhdGlvbik7IH0KKyAgICBFeHByZXNzaW9u
Tm9kZSogY3JlYXRlT2JqZWN0TGl0ZXJhbChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBQcm9wZXJ0eUxpc3ROb2RlKiBwcm9wZXJ0aWVzKSB7IHJldHVybiBuZXcgKG1fdm0pIE9iamVj
dExpdGVyYWxOb2RlKGxvY2F0aW9uLCBwcm9wZXJ0aWVzKTsgfQogCiAgICAgRXhwcmVzc2lvbk5v
ZGUqIGNyZWF0ZUFycmF5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGludCBlbGlz
aW9ucykKICAgICB7CiAgICAgICAgIGlmIChlbGlzaW9ucykKICAgICAgICAgICAgIGluY0NvbnN0
YW50cygpOwotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEFycmF5Tm9kZShsb2Nh
dGlvbiwgZWxpc2lvbnMpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBBcnJheU5vZGUobG9j
YXRpb24sIGVsaXNpb25zKTsKICAgICB9CiAKLSAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlQXJy
YXkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRWxlbWVudE5vZGUqIGVsZW1zKSB7
IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQXJyYXlOb2RlKGxvY2F0aW9uLCBlbGVtcyk7IH0K
KyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlQXJyYXkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgRWxlbWVudE5vZGUqIGVsZW1zKSB7IHJldHVybiBuZXcgKG1fdm0pIEFycmF5Tm9k
ZShsb2NhdGlvbiwgZWxlbXMpOyB9CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUFycmF5KGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGludCBlbGlzaW9ucywgRWxlbWVudE5vZGUq
IGVsZW1zKQogICAgIHsKICAgICAgICAgaWYgKGVsaXNpb25zKQogICAgICAgICAgICAgaW5jQ29u
c3RhbnRzKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQXJyYXlOb2RlKGxv
Y2F0aW9uLCBlbGlzaW9ucywgZWxlbXMpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBBcnJh
eU5vZGUobG9jYXRpb24sIGVsaXNpb25zLCBlbGVtcyk7CiAgICAgfQogICAgIEV4cHJlc3Npb25O
b2RlKiBjcmVhdGVOdW1iZXJFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGRv
dWJsZSBkKQogICAgIHsKICAgICAgICAgaW5jQ29uc3RhbnRzKCk7Ci0gICAgICAgIHJldHVybiBu
ZXcgKG1fZ2xvYmFsRGF0YSkgTnVtYmVyTm9kZShsb2NhdGlvbiwgZCk7CisgICAgICAgIHJldHVy
biBuZXcgKG1fdm0pIE51bWJlck5vZGUobG9jYXRpb24sIGQpOwogICAgIH0KIAogICAgIEV4cHJl
c3Npb25Ob2RlKiBjcmVhdGVTdHJpbmcoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
Y29uc3QgSWRlbnRpZmllciogc3RyaW5nKQogICAgIHsKICAgICAgICAgaW5jQ29uc3RhbnRzKCk7
Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgU3RyaW5nTm9kZShsb2NhdGlvbiwg
KnN0cmluZyk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIFN0cmluZ05vZGUobG9jYXRpb24s
ICpzdHJpbmcpOwogICAgIH0KIAogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVCb29sZWFuKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGJvb2wgYikKICAgICB7CiAgICAgICAgIGlu
Y0NvbnN0YW50cygpOwotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEJvb2xlYW5O
b2RlKGxvY2F0aW9uLCBiKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgQm9vbGVhbk5vZGUo
bG9jYXRpb24sIGIpOwogICAgIH0KIAogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVOdWxsKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCiAgICAgewogICAgICAgICBpbmNDb25zdGFu
dHMoKTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBOdWxsTm9kZShsb2NhdGlv
bik7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIE51bGxOb2RlKGxvY2F0aW9uKTsKICAgICB9
CiAKICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlQnJhY2tldEFjY2Vzcyhjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUq
IHByb3BlcnR5LCBib29sIHByb3BlcnR5SGFzQXNzaWdubWVudHMsIGludCBzdGFydCwgaW50IGRp
dm90LCBpbnQgZW5kKQogICAgIHsKLSAgICAgICAgQnJhY2tldEFjY2Vzc29yTm9kZSogbm9kZSA9
IG5ldyAobV9nbG9iYWxEYXRhKSBCcmFja2V0QWNjZXNzb3JOb2RlKGxvY2F0aW9uLCBiYXNlLCBw
cm9wZXJ0eSwgcHJvcGVydHlIYXNBc3NpZ25tZW50cyk7CisgICAgICAgIEJyYWNrZXRBY2Nlc3Nv
ck5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIEJyYWNrZXRBY2Nlc3Nvck5vZGUobG9jYXRpb24sIGJh
c2UsIHByb3BlcnR5LCBwcm9wZXJ0eUhhc0Fzc2lnbm1lbnRzKTsKICAgICAgICAgc2V0RXhjZXB0
aW9uTG9jYXRpb24obm9kZSwgc3RhcnQsIGRpdm90LCBlbmQpOwogICAgICAgICByZXR1cm4gbm9k
ZTsKICAgICB9CiAKICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlRG90QWNjZXNzKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVu
dGlmaWVyKiBwcm9wZXJ0eSwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQpCiAgICAgewot
ICAgICAgICBEb3RBY2Nlc3Nvck5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgRG90QWNj
ZXNzb3JOb2RlKGxvY2F0aW9uLCBiYXNlLCAqcHJvcGVydHkpOworICAgICAgICBEb3RBY2Nlc3Nv
ck5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIERvdEFjY2Vzc29yTm9kZShsb2NhdGlvbiwgYmFzZSwg
KnByb3BlcnR5KTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgc3RhcnQsIGRp
dm90LCBlbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CkBAIC0yMjgsNyArMjI4LDcg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKFlhcnI6OmNoZWNrU3ludGF4KHBhdHRlcm4u
c3RyaW5nKCkpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIFJlZ0V4cE5vZGUqIG5v
ZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgUmVnRXhwTm9kZShsb2NhdGlvbiwgcGF0dGVybiwgZmxh
Z3MpOworICAgICAgICBSZWdFeHBOb2RlKiBub2RlID0gbmV3IChtX3ZtKSBSZWdFeHBOb2RlKGxv
Y2F0aW9uLCBwYXR0ZXJuLCBmbGFncyk7CiAgICAgICAgIGludCBzaXplID0gcGF0dGVybi5sZW5n
dGgoKSArIDI7IC8vICsgMiBmb3IgdGhlIHR3byAvJ3MKICAgICAgICAgc2V0RXhjZXB0aW9uTG9j
YXRpb24obm9kZSwgc3RhcnQsIHN0YXJ0ICsgc2l6ZSwgc3RhcnQgKyBzaXplKTsKICAgICAgICAg
cmV0dXJuIG5vZGU7CkBAIC0yMzYsNDIgKzIzNiw0MiBAQCBwdWJsaWM6CiAKICAgICBFeHByZXNz
aW9uTm9kZSogY3JlYXRlTmV3RXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogZXhwciwgQXJndW1lbnRzTm9kZSogYXJndW1lbnRzLCBpbnQgc3RhcnQs
IGludCBkaXZvdCwgaW50IGVuZCkKICAgICB7Ci0gICAgICAgIE5ld0V4cHJOb2RlKiBub2RlID0g
bmV3IChtX2dsb2JhbERhdGEpIE5ld0V4cHJOb2RlKGxvY2F0aW9uLCBleHByLCBhcmd1bWVudHMp
OworICAgICAgICBOZXdFeHByTm9kZSogbm9kZSA9IG5ldyAobV92bSkgTmV3RXhwck5vZGUobG9j
YXRpb24sIGV4cHIsIGFyZ3VtZW50cyk7CiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5v
ZGUsIHN0YXJ0LCBkaXZvdCwgZW5kKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCiAg
ICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU5ld0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGludCBzdGFydCwgaW50IGVuZCkKICAgICB7
Ci0gICAgICAgIE5ld0V4cHJOb2RlKiBub2RlID0gbmV3IChtX2dsb2JhbERhdGEpIE5ld0V4cHJO
b2RlKGxvY2F0aW9uLCBleHByKTsKKyAgICAgICAgTmV3RXhwck5vZGUqIG5vZGUgPSBuZXcgKG1f
dm0pIE5ld0V4cHJOb2RlKGxvY2F0aW9uLCBleHByKTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9j
YXRpb24obm9kZSwgc3RhcnQsIGVuZCwgZW5kKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAg
fQogCiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUNvbmRpdGlvbmFsRXhwcihjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogY29uZGl0aW9uLCBFeHByZXNz
aW9uTm9kZSogbGhzLCBFeHByZXNzaW9uTm9kZSogcmhzKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IG5ldyAobV9nbG9iYWxEYXRhKSBDb25kaXRpb25hbE5vZGUobG9jYXRpb24sIGNvbmRpdGlvbiwg
bGhzLCByaHMpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBDb25kaXRpb25hbE5vZGUobG9j
YXRpb24sIGNvbmRpdGlvbiwgbGhzLCByaHMpOwogICAgIH0KIAogICAgIEV4cHJlc3Npb25Ob2Rl
KiBjcmVhdGVBc3NpZ25SZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBFeHByZXNzaW9uTm9kZSogcmhzLCBpbnQgc3RhcnQsIGlu
dCBkaXZvdCwgaW50IGVuZCkKICAgICB7CiAgICAgICAgIGlmIChyaHMtPmlzRnVuY0V4cHJOb2Rl
KCkpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxGdW5jRXhwck5vZGUqPihyaHMpLT5ib2R5KCkt
PnNldEluZmVycmVkTmFtZShpZGVudCk7Ci0gICAgICAgIEFzc2lnblJlc29sdmVOb2RlKiBub2Rl
ID0gbmV3IChtX2dsb2JhbERhdGEpIEFzc2lnblJlc29sdmVOb2RlKGxvY2F0aW9uLCBpZGVudCwg
cmhzKTsKKyAgICAgICAgQXNzaWduUmVzb2x2ZU5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIEFzc2ln
blJlc29sdmVOb2RlKGxvY2F0aW9uLCBpZGVudCwgcmhzKTsKICAgICAgICAgc2V0RXhjZXB0aW9u
TG9jYXRpb24obm9kZSwgc3RhcnQsIGRpdm90LCBlbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsK
ICAgICB9CiAKICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlRnVuY3Rpb25FeHByKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXIqIG5hbWUsIEZ1bmN0aW9u
Qm9keU5vZGUqIGJvZHksIFBhcmFtZXRlck5vZGUqIHBhcmFtZXRlcnMsIGludCBvcGVuQnJhY2VQ
b3MsIGludCBjbG9zZUJyYWNlUG9zLCBpbnQgYm9keVN0YXJ0TGluZSwgaW50IGJvZHlFbmRMaW5l
KQogICAgIHsKLSAgICAgICAgRnVuY0V4cHJOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0
YSkgRnVuY0V4cHJOb2RlKGxvY2F0aW9uLCAqbmFtZSwgYm9keSwgbV9zb3VyY2VDb2RlLT5zdWJF
eHByZXNzaW9uKG9wZW5CcmFjZVBvcywgY2xvc2VCcmFjZVBvcywgYm9keVN0YXJ0TGluZSksIHBh
cmFtZXRlcnMpOworICAgICAgICBGdW5jRXhwck5vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgRnVu
Y0V4cHJOb2RlKGxvY2F0aW9uLCAqbmFtZSwgYm9keSwgbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNz
aW9uKG9wZW5CcmFjZVBvcywgY2xvc2VCcmFjZVBvcywgYm9keVN0YXJ0TGluZSksIHBhcmFtZXRl
cnMpOwogICAgICAgICBib2R5LT5zZXRMb2MoYm9keVN0YXJ0TGluZSwgYm9keUVuZExpbmUsIGxv
Y2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAg
ICAgRnVuY3Rpb25Cb2R5Tm9kZSogY3JlYXRlRnVuY3Rpb25Cb2R5KGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwg
Ym9vbCBpblN0cmljdENvbnRleHQpCiAgICAgewotICAgICAgICByZXR1cm4gRnVuY3Rpb25Cb2R5
Tm9kZTo6Y3JlYXRlKG1fZ2xvYmFsRGF0YSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGlu
U3RyaWN0Q29udGV4dCk7CisgICAgICAgIHJldHVybiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUo
bV92bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGluU3RyaWN0Q29udGV4dCk7CiAgICAg
fQogCiAgICAgdm9pZCBzZXRGdW5jdGlvblN0YXJ0KEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIGlu
dCBmdW5jdGlvblN0YXJ0KQpAQCAtMjg0LDQ2ICsyODQsNDYgQEAgcHVibGljOgogICAgICAgICBB
U1NFUlQobmFtZSk7CiAgICAgICAgIGJvZHktPnNldExvYyhib2R5U3RhcnRMaW5lLCBib2R5RW5k
TGluZSwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgYm9keS0+c2V0SW5mZXJyZWRO
YW1lKCpuYW1lKTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBQcm9wZXJ0eU5v
ZGUobV9nbG9iYWxEYXRhLCAqbmFtZSwgbmV3IChtX2dsb2JhbERhdGEpIEZ1bmNFeHByTm9kZShs
b2NhdGlvbiwgbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgYm9k
eSwgbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKG9wZW5CcmFjZVBvcywgY2xvc2VCcmFjZVBv
cywgYm9keVN0YXJ0TGluZSksIHBhcmFtcyksIHR5cGUpOworICAgICAgICByZXR1cm4gbmV3ICht
X3ZtKSBQcm9wZXJ0eU5vZGUobV92bSwgKm5hbWUsIG5ldyAobV92bSkgRnVuY0V4cHJOb2RlKGxv
Y2F0aW9uLCBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgYm9keSwgbV9zb3Vy
Y2VDb2RlLT5zdWJFeHByZXNzaW9uKG9wZW5CcmFjZVBvcywgY2xvc2VCcmFjZVBvcywgYm9keVN0
YXJ0TGluZSksIHBhcmFtcyksIHR5cGUpOwogICAgIH0KICAgICAKLSAgICB0ZW1wbGF0ZSA8Ym9v
bD4gUHJvcGVydHlOb2RlKiBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KEpTR2xvYmFsRGF0
YSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFByb3BlcnR5Tm9kZTo6VHlwZSB0
eXBlLCBkb3VibGUgbmFtZSwgUGFyYW1ldGVyTm9kZSogcGFyYW1zLCBGdW5jdGlvbkJvZHlOb2Rl
KiBib2R5LCBpbnQgb3BlbkJyYWNlUG9zLCBpbnQgY2xvc2VCcmFjZVBvcywgaW50IGJvZHlTdGFy
dExpbmUsIGludCBib2R5RW5kTGluZSkKKyAgICB0ZW1wbGF0ZSA8Ym9vbD4gUHJvcGVydHlOb2Rl
KiBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGRvdWJsZSBuYW1lLCBQYXJhbWV0
ZXJOb2RlKiBwYXJhbXMsIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIGludCBvcGVuQnJhY2VQb3Ms
IGludCBjbG9zZUJyYWNlUG9zLCBpbnQgYm9keVN0YXJ0TGluZSwgaW50IGJvZHlFbmRMaW5lKQog
ICAgIHsKICAgICAgICAgYm9keS0+c2V0TG9jKGJvZHlTdGFydExpbmUsIGJvZHlFbmRMaW5lLCBs
b2NhdGlvbi5jaGFyUG9zaXRpb24pOwotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEp
IFByb3BlcnR5Tm9kZShtX2dsb2JhbERhdGEsIG5hbWUsIG5ldyAobV9nbG9iYWxEYXRhKSBGdW5j
RXhwck5vZGUobG9jYXRpb24sIG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50
aWZpZXIsIGJvZHksIG1fc291cmNlQ29kZS0+c3ViRXhwcmVzc2lvbihvcGVuQnJhY2VQb3MsIGNs
b3NlQnJhY2VQb3MsIGJvZHlTdGFydExpbmUpLCBwYXJhbXMpLCB0eXBlKTsKKyAgICAgICAgcmV0
dXJuIG5ldyAobV92bSkgUHJvcGVydHlOb2RlKG1fdm0sIG5hbWUsIG5ldyAobV92bSkgRnVuY0V4
cHJOb2RlKGxvY2F0aW9uLCBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgYm9k
eSwgbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKG9wZW5CcmFjZVBvcywgY2xvc2VCcmFjZVBv
cywgYm9keVN0YXJ0TGluZSksIHBhcmFtcyksIHR5cGUpOwogICAgIH0KIAotICAgIEFyZ3VtZW50
c05vZGUqIGNyZWF0ZUFyZ3VtZW50cygpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBBcmd1
bWVudHNOb2RlKCk7IH0KLSAgICBBcmd1bWVudHNOb2RlKiBjcmVhdGVBcmd1bWVudHMoQXJndW1l
bnRMaXN0Tm9kZSogYXJncykgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEFyZ3VtZW50c05v
ZGUoYXJncyk7IH0KLSAgICBBcmd1bWVudExpc3ROb2RlKiBjcmVhdGVBcmd1bWVudHNMaXN0KGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBhcmcpIHsgcmV0
dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBBcmd1bWVudExpc3ROb2RlKGxvY2F0aW9uLCBhcmcpOyB9
Ci0gICAgQXJndW1lbnRMaXN0Tm9kZSogY3JlYXRlQXJndW1lbnRzTGlzdChjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBBcmd1bWVudExpc3ROb2RlKiBhcmdzLCBFeHByZXNzaW9uTm9k
ZSogYXJnKSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQXJndW1lbnRMaXN0Tm9kZShsb2Nh
dGlvbiwgYXJncywgYXJnKTsgfQorICAgIEFyZ3VtZW50c05vZGUqIGNyZWF0ZUFyZ3VtZW50cygp
IHsgcmV0dXJuIG5ldyAobV92bSkgQXJndW1lbnRzTm9kZSgpOyB9CisgICAgQXJndW1lbnRzTm9k
ZSogY3JlYXRlQXJndW1lbnRzKEFyZ3VtZW50TGlzdE5vZGUqIGFyZ3MpIHsgcmV0dXJuIG5ldyAo
bV92bSkgQXJndW1lbnRzTm9kZShhcmdzKTsgfQorICAgIEFyZ3VtZW50TGlzdE5vZGUqIGNyZWF0
ZUFyZ3VtZW50c0xpc3QoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lv
bk5vZGUqIGFyZykgeyByZXR1cm4gbmV3IChtX3ZtKSBBcmd1bWVudExpc3ROb2RlKGxvY2F0aW9u
LCBhcmcpOyB9CisgICAgQXJndW1lbnRMaXN0Tm9kZSogY3JlYXRlQXJndW1lbnRzTGlzdChjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBBcmd1bWVudExpc3ROb2RlKiBhcmdzLCBFeHBy
ZXNzaW9uTm9kZSogYXJnKSB7IHJldHVybiBuZXcgKG1fdm0pIEFyZ3VtZW50TGlzdE5vZGUobG9j
YXRpb24sIGFyZ3MsIGFyZyk7IH0KIAogICAgIHRlbXBsYXRlIDxib29sPiBQcm9wZXJ0eU5vZGUq
IGNyZWF0ZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgRXhwcmVzc2lv
bk5vZGUqIG5vZGUsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlKQogICAgIHsKICAgICAgICAgaWYg
KG5vZGUtPmlzRnVuY0V4cHJOb2RlKCkpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxGdW5jRXhw
ck5vZGUqPihub2RlKS0+Ym9keSgpLT5zZXRJbmZlcnJlZE5hbWUoKnByb3BlcnR5TmFtZSk7Ci0g
ICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUHJvcGVydHlOb2RlKG1fZ2xvYmFsRGF0
YSwgKnByb3BlcnR5TmFtZSwgbm9kZSwgdHlwZSk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0p
IFByb3BlcnR5Tm9kZShtX3ZtLCAqcHJvcGVydHlOYW1lLCBub2RlLCB0eXBlKTsKICAgICB9Ci0g
ICAgdGVtcGxhdGUgPGJvb2w+IFByb3BlcnR5Tm9kZSogY3JlYXRlUHJvcGVydHkoSlNHbG9iYWxE
YXRhKiwgZG91YmxlIHByb3BlcnR5TmFtZSwgRXhwcmVzc2lvbk5vZGUqIG5vZGUsIFByb3BlcnR5
Tm9kZTo6VHlwZSB0eXBlKSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUHJvcGVydHlOb2Rl
KG1fZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lLCBub2RlLCB0eXBlKTsgfQotICAgIFByb3BlcnR5
TGlzdE5vZGUqIGNyZWF0ZVByb3BlcnR5TGlzdChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBQcm9wZXJ0eU5vZGUqIHByb3BlcnR5KSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkg
UHJvcGVydHlMaXN0Tm9kZShsb2NhdGlvbiwgcHJvcGVydHkpOyB9Ci0gICAgUHJvcGVydHlMaXN0
Tm9kZSogY3JlYXRlUHJvcGVydHlMaXN0KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IFByb3BlcnR5Tm9kZSogcHJvcGVydHksIFByb3BlcnR5TGlzdE5vZGUqIHRhaWwpIHsgcmV0dXJu
IG5ldyAobV9nbG9iYWxEYXRhKSBQcm9wZXJ0eUxpc3ROb2RlKGxvY2F0aW9uLCBwcm9wZXJ0eSwg
dGFpbCk7IH0KKyAgICB0ZW1wbGF0ZSA8Ym9vbD4gUHJvcGVydHlOb2RlKiBjcmVhdGVQcm9wZXJ0
eShWTSosIGRvdWJsZSBwcm9wZXJ0eU5hbWUsIEV4cHJlc3Npb25Ob2RlKiBub2RlLCBQcm9wZXJ0
eU5vZGU6OlR5cGUgdHlwZSkgeyByZXR1cm4gbmV3IChtX3ZtKSBQcm9wZXJ0eU5vZGUobV92bSwg
cHJvcGVydHlOYW1lLCBub2RlLCB0eXBlKTsgfQorICAgIFByb3BlcnR5TGlzdE5vZGUqIGNyZWF0
ZVByb3BlcnR5TGlzdChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBQcm9wZXJ0eU5v
ZGUqIHByb3BlcnR5KSB7IHJldHVybiBuZXcgKG1fdm0pIFByb3BlcnR5TGlzdE5vZGUobG9jYXRp
b24sIHByb3BlcnR5KTsgfQorICAgIFByb3BlcnR5TGlzdE5vZGUqIGNyZWF0ZVByb3BlcnR5TGlz
dChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBQcm9wZXJ0eU5vZGUqIHByb3BlcnR5
LCBQcm9wZXJ0eUxpc3ROb2RlKiB0YWlsKSB7IHJldHVybiBuZXcgKG1fdm0pIFByb3BlcnR5TGlz
dE5vZGUobG9jYXRpb24sIHByb3BlcnR5LCB0YWlsKTsgfQogCi0gICAgRWxlbWVudE5vZGUqIGNy
ZWF0ZUVsZW1lbnRMaXN0KGludCBlbGlzaW9ucywgRXhwcmVzc2lvbk5vZGUqIGV4cHIpIHsgcmV0
dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBFbGVtZW50Tm9kZShlbGlzaW9ucywgZXhwcik7IH0KLSAg
ICBFbGVtZW50Tm9kZSogY3JlYXRlRWxlbWVudExpc3QoRWxlbWVudE5vZGUqIGVsZW1zLCBpbnQg
ZWxpc2lvbnMsIEV4cHJlc3Npb25Ob2RlKiBleHByKSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0
YSkgRWxlbWVudE5vZGUoZWxlbXMsIGVsaXNpb25zLCBleHByKTsgfQorICAgIEVsZW1lbnROb2Rl
KiBjcmVhdGVFbGVtZW50TGlzdChpbnQgZWxpc2lvbnMsIEV4cHJlc3Npb25Ob2RlKiBleHByKSB7
IHJldHVybiBuZXcgKG1fdm0pIEVsZW1lbnROb2RlKGVsaXNpb25zLCBleHByKTsgfQorICAgIEVs
ZW1lbnROb2RlKiBjcmVhdGVFbGVtZW50TGlzdChFbGVtZW50Tm9kZSogZWxlbXMsIGludCBlbGlz
aW9ucywgRXhwcmVzc2lvbk5vZGUqIGV4cHIpIHsgcmV0dXJuIG5ldyAobV92bSkgRWxlbWVudE5v
ZGUoZWxlbXMsIGVsaXNpb25zLCBleHByKTsgfQogCi0gICAgUGFyYW1ldGVyTm9kZSogY3JlYXRl
Rm9ybWFsUGFyYW1ldGVyTGlzdChjb25zdCBJZGVudGlmaWVyJiBpZGVudCkgeyByZXR1cm4gbmV3
IChtX2dsb2JhbERhdGEpIFBhcmFtZXRlck5vZGUoaWRlbnQpOyB9Ci0gICAgUGFyYW1ldGVyTm9k
ZSogY3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdChQYXJhbWV0ZXJOb2RlKiBsaXN0LCBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCkgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFBhcmFtZXRlck5v
ZGUobGlzdCwgaWRlbnQpOyB9CisgICAgUGFyYW1ldGVyTm9kZSogY3JlYXRlRm9ybWFsUGFyYW1l
dGVyTGlzdChjb25zdCBJZGVudGlmaWVyJiBpZGVudCkgeyByZXR1cm4gbmV3IChtX3ZtKSBQYXJh
bWV0ZXJOb2RlKGlkZW50KTsgfQorICAgIFBhcmFtZXRlck5vZGUqIGNyZWF0ZUZvcm1hbFBhcmFt
ZXRlckxpc3QoUGFyYW1ldGVyTm9kZSogbGlzdCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpIHsg
cmV0dXJuIG5ldyAobV92bSkgUGFyYW1ldGVyTm9kZShsaXN0LCBpZGVudCk7IH0KIAotICAgIENh
c2VDbGF1c2VOb2RlKiBjcmVhdGVDbGF1c2UoRXhwcmVzc2lvbk5vZGUqIGV4cHIsIEpTQzo6U291
cmNlRWxlbWVudHMqIHN0YXRlbWVudHMpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBDYXNl
Q2xhdXNlTm9kZShleHByLCBzdGF0ZW1lbnRzKTsgfQotICAgIENsYXVzZUxpc3ROb2RlKiBjcmVh
dGVDbGF1c2VMaXN0KENhc2VDbGF1c2VOb2RlKiBjbGF1c2UpIHsgcmV0dXJuIG5ldyAobV9nbG9i
YWxEYXRhKSBDbGF1c2VMaXN0Tm9kZShjbGF1c2UpOyB9Ci0gICAgQ2xhdXNlTGlzdE5vZGUqIGNy
ZWF0ZUNsYXVzZUxpc3QoQ2xhdXNlTGlzdE5vZGUqIHRhaWwsIENhc2VDbGF1c2VOb2RlKiBjbGF1
c2UpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBDbGF1c2VMaXN0Tm9kZSh0YWlsLCBjbGF1
c2UpOyB9CisgICAgQ2FzZUNsYXVzZU5vZGUqIGNyZWF0ZUNsYXVzZShFeHByZXNzaW9uTm9kZSog
ZXhwciwgSlNDOjpTb3VyY2VFbGVtZW50cyogc3RhdGVtZW50cykgeyByZXR1cm4gbmV3IChtX3Zt
KSBDYXNlQ2xhdXNlTm9kZShleHByLCBzdGF0ZW1lbnRzKTsgfQorICAgIENsYXVzZUxpc3ROb2Rl
KiBjcmVhdGVDbGF1c2VMaXN0KENhc2VDbGF1c2VOb2RlKiBjbGF1c2UpIHsgcmV0dXJuIG5ldyAo
bV92bSkgQ2xhdXNlTGlzdE5vZGUoY2xhdXNlKTsgfQorICAgIENsYXVzZUxpc3ROb2RlKiBjcmVh
dGVDbGF1c2VMaXN0KENsYXVzZUxpc3ROb2RlKiB0YWlsLCBDYXNlQ2xhdXNlTm9kZSogY2xhdXNl
KSB7IHJldHVybiBuZXcgKG1fdm0pIENsYXVzZUxpc3ROb2RlKHRhaWwsIGNsYXVzZSk7IH0KIAog
ICAgIHZvaWQgc2V0VXNlc0FyZ3VtZW50cyhGdW5jdGlvbkJvZHlOb2RlKiBub2RlKSB7IG5vZGUt
PnNldFVzZXNBcmd1bWVudHMoKTsgfQogCiAgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlRnVuY0Rl
Y2xTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRp
ZmllciogbmFtZSwgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwgUGFyYW1ldGVyTm9kZSogcGFyYW1l
dGVycywgaW50IG9wZW5CcmFjZVBvcywgaW50IGNsb3NlQnJhY2VQb3MsIGludCBib2R5U3RhcnRM
aW5lLCBpbnQgYm9keUVuZExpbmUpCiAgICAgewotICAgICAgICBGdW5jRGVjbE5vZGUqIGRlY2wg
PSBuZXcgKG1fZ2xvYmFsRGF0YSkgRnVuY0RlY2xOb2RlKGxvY2F0aW9uLCAqbmFtZSwgYm9keSwg
bV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKG9wZW5CcmFjZVBvcywgY2xvc2VCcmFjZVBvcywg
Ym9keVN0YXJ0TGluZSksIHBhcmFtZXRlcnMpOwotICAgICAgICBpZiAoKm5hbWUgPT0gbV9nbG9i
YWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMpCisgICAgICAgIEZ1bmNEZWNsTm9kZSog
ZGVjbCA9IG5ldyAobV92bSkgRnVuY0RlY2xOb2RlKGxvY2F0aW9uLCAqbmFtZSwgYm9keSwgbV9z
b3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKG9wZW5CcmFjZVBvcywgY2xvc2VCcmFjZVBvcywgYm9k
eVN0YXJ0TGluZSksIHBhcmFtZXRlcnMpOworICAgICAgICBpZiAoKm5hbWUgPT0gbV92bS0+cHJv
cGVydHlOYW1lcy0+YXJndW1lbnRzKQogICAgICAgICAgICAgdXNlc0FyZ3VtZW50cygpOwogICAg
ICAgICBtX3Njb3BlLm1fZnVuY0RlY2xhcmF0aW9ucy0+ZGF0YS5hcHBlbmQoZGVjbC0+Ym9keSgp
KTsKICAgICAgICAgYm9keS0+c2V0TG9jKGJvZHlTdGFydExpbmUsIGJvZHlFbmRMaW5lLCBsb2Nh
dGlvbi5jaGFyUG9zaXRpb24pOwpAQCAtMzMyLDQyICszMzIsNDIgQEAgcHVibGljOgogCiAgICAg
U3RhdGVtZW50Tm9kZSogY3JlYXRlQmxvY2tTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgSlNDOjpTb3VyY2VFbGVtZW50cyogZWxlbWVudHMsIGludCBzdGFydExpbmUs
IGludCBlbmRMaW5lKQogICAgIHsKLSAgICAgICAgQmxvY2tOb2RlKiBibG9jayA9IG5ldyAobV9n
bG9iYWxEYXRhKSBCbG9ja05vZGUobG9jYXRpb24sIGVsZW1lbnRzKTsKKyAgICAgICAgQmxvY2tO
b2RlKiBibG9jayA9IG5ldyAobV92bSkgQmxvY2tOb2RlKGxvY2F0aW9uLCBlbGVtZW50cyk7CiAg
ICAgICAgIGJsb2NrLT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jaGFyUG9z
aXRpb24pOwogICAgICAgICByZXR1cm4gYmxvY2s7CiAgICAgfQogCiAgICAgU3RhdGVtZW50Tm9k
ZSogY3JlYXRlRXhwclN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogZXhwciwgaW50IHN0YXJ0LCBpbnQgZW5kKQogICAgIHsKLSAgICAgICAg
RXhwclN0YXRlbWVudE5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBFeHByU3RhdGVt
ZW50Tm9kZShsb2NhdGlvbiwgZXhwcik7CisgICAgICAgIEV4cHJTdGF0ZW1lbnROb2RlKiByZXN1
bHQgPSBuZXcgKG1fdm0pIEV4cHJTdGF0ZW1lbnROb2RlKGxvY2F0aW9uLCBleHByKTsKICAgICAg
ICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQsIGVuZCwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVJ
ZlN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9k
ZSogY29uZGl0aW9uLCBTdGF0ZW1lbnROb2RlKiB0cnVlQmxvY2ssIGludCBzdGFydCwgaW50IGVu
ZCkKICAgICB7Ci0gICAgICAgIElmTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIElm
Tm9kZShsb2NhdGlvbiwgY29uZGl0aW9uLCB0cnVlQmxvY2spOworICAgICAgICBJZk5vZGUqIHJl
c3VsdCA9IG5ldyAobV92bSkgSWZOb2RlKGxvY2F0aW9uLCBjb25kaXRpb24sIHRydWVCbG9jayk7
CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0LCBlbmQsIGxvY2F0aW9uLmNoYXJQb3NpdGlv
bik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgU3RhdGVtZW50Tm9kZSog
Y3JlYXRlSWZTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVz
c2lvbk5vZGUqIGNvbmRpdGlvbiwgU3RhdGVtZW50Tm9kZSogdHJ1ZUJsb2NrLCBTdGF0ZW1lbnRO
b2RlKiBmYWxzZUJsb2NrLCBpbnQgc3RhcnQsIGludCBlbmQpCiAgICAgewotICAgICAgICBJZk5v
ZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBJZkVsc2VOb2RlKGxvY2F0aW9uLCBjb25k
aXRpb24sIHRydWVCbG9jaywgZmFsc2VCbG9jayk7CisgICAgICAgIElmTm9kZSogcmVzdWx0ID0g
bmV3IChtX3ZtKSBJZkVsc2VOb2RlKGxvY2F0aW9uLCBjb25kaXRpb24sIHRydWVCbG9jaywgZmFs
c2VCbG9jayk7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0LCBlbmQsIGxvY2F0aW9uLmNo
YXJQb3NpdGlvbik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgU3RhdGVt
ZW50Tm9kZSogY3JlYXRlRm9yTG9vcChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogaW5pdGlhbGl6ZXIsIEV4cHJlc3Npb25Ob2RlKiBjb25kaXRpb24sIEV4
cHJlc3Npb25Ob2RlKiBpdGVyLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnRzLCBpbnQgc3RhcnQs
IGludCBlbmQpCiAgICAgewotICAgICAgICBGb3JOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFs
RGF0YSkgRm9yTm9kZShsb2NhdGlvbiwgaW5pdGlhbGl6ZXIsIGNvbmRpdGlvbiwgaXRlciwgc3Rh
dGVtZW50cyk7CisgICAgICAgIEZvck5vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgRm9yTm9kZShs
b2NhdGlvbiwgaW5pdGlhbGl6ZXIsIGNvbmRpdGlvbiwgaXRlciwgc3RhdGVtZW50cyk7CiAgICAg
ICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0LCBlbmQsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRl
Rm9ySW5Mb29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50LCBFeHByZXNzaW9uTm9kZSogaW5pdGlhbGl6ZXIsIEV4cHJlc3Npb25Ob2RlKiBp
dGVyLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnRzLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50
IGVuZCwgaW50IGluaXRTdGFydCwgaW50IGluaXRFbmQsIGludCBzdGFydExpbmUsIGludCBlbmRM
aW5lKQogICAgIHsKLSAgICAgICAgRm9ySW5Ob2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0
YSkgRm9ySW5Ob2RlKG1fZ2xvYmFsRGF0YSwgbG9jYXRpb24sICppZGVudCwgaW5pdGlhbGl6ZXIs
IGl0ZXIsIHN0YXRlbWVudHMsIGluaXRTdGFydCwgaW5pdFN0YXJ0IC0gc3RhcnQsIGluaXRFbmQg
LSBpbml0U3RhcnQpOworICAgICAgICBGb3JJbk5vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgRm9y
SW5Ob2RlKG1fdm0sIGxvY2F0aW9uLCAqaWRlbnQsIGluaXRpYWxpemVyLCBpdGVyLCBzdGF0ZW1l
bnRzLCBpbml0U3RhcnQsIGluaXRTdGFydCAtIHN0YXJ0LCBpbml0RW5kIC0gaW5pdFN0YXJ0KTsK
ICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jaGFy
UG9zaXRpb24pOwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIHN0YXJ0LCBk
aXZvdCArIDEsIGVuZCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0zNzUsMjggKzM3NSwy
OCBAQCBwdWJsaWM6CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVGb3JJbkxvb3AoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGxocywgRXhwcmVzc2lv
bk5vZGUqIGl0ZXIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudHMsIGludCBlU3RhcnQsIGludCBl
RGl2b3QsIGludCBlRW5kLCBpbnQgc3RhcnQsIGludCBlbmQpCiAgICAgewotICAgICAgICBGb3JJ
bk5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBGb3JJbk5vZGUobG9jYXRpb24sIGxo
cywgaXRlciwgc3RhdGVtZW50cyk7CisgICAgICAgIEZvckluTm9kZSogcmVzdWx0ID0gbmV3ICht
X3ZtKSBGb3JJbk5vZGUobG9jYXRpb24sIGxocywgaXRlciwgc3RhdGVtZW50cyk7CiAgICAgICAg
IHJlc3VsdC0+c2V0TG9jKHN0YXJ0LCBlbmQsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAg
ICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgZVN0YXJ0LCBlRGl2b3QsIGVFbmQpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0
ZUVtcHR5U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pIHsgcmV0dXJu
IG5ldyAobV9nbG9iYWxEYXRhKSBFbXB0eVN0YXRlbWVudE5vZGUobG9jYXRpb24pOyB9CisgICAg
U3RhdGVtZW50Tm9kZSogY3JlYXRlRW1wdHlTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbikgeyByZXR1cm4gbmV3IChtX3ZtKSBFbXB0eVN0YXRlbWVudE5vZGUobG9jYXRp
b24pOyB9CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVWYXJTdGF0ZW1lbnQoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGludCBzdGFydCwg
aW50IGVuZCkKICAgICB7CiAgICAgICAgIFN0YXRlbWVudE5vZGUqIHJlc3VsdDsKICAgICAgICAg
aWYgKCFleHByKQotICAgICAgICAgICAgcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIEVtcHR5
U3RhdGVtZW50Tm9kZShsb2NhdGlvbik7CisgICAgICAgICAgICByZXN1bHQgPSBuZXcgKG1fdm0p
IEVtcHR5U3RhdGVtZW50Tm9kZShsb2NhdGlvbik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBWYXJTdGF0ZW1lbnROb2RlKGxvY2F0aW9uLCBl
eHByKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyAobV92bSkgVmFyU3RhdGVtZW50Tm9kZShs
b2NhdGlvbiwgZXhwcik7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0LCBlbmQsIGxvY2F0
aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAg
U3RhdGVtZW50Tm9kZSogY3JlYXRlUmV0dXJuU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByZXNzaW9uLCBpbnQgZVN0YXJ0LCBpbnQg
ZUVuZCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUpCiAgICAgewotICAgICAgICBSZXR1cm5O
b2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgUmV0dXJuTm9kZShsb2NhdGlvbiwgZXhw
cmVzc2lvbik7CisgICAgICAgIFJldHVybk5vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgUmV0dXJu
Tm9kZShsb2NhdGlvbiwgZXhwcmVzc2lvbik7CiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9u
KHJlc3VsdCwgZVN0YXJ0LCBlRW5kLCBlRW5kKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3Rh
cnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jaGFyUG9zaXRpb24pOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwpAQCAtNDA0LDcgKzQwNCw3IEBAIHB1YmxpYzoKIAogICAgIFN0YXRlbWVudE5vZGUq
IGNyZWF0ZUJyZWFrU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGlu
dCBlU3RhcnQsIGludCBlRW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7Ci0g
ICAgICAgIEJyZWFrTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIEJyZWFrTm9kZSht
X2dsb2JhbERhdGEsIGxvY2F0aW9uKTsKKyAgICAgICAgQnJlYWtOb2RlKiByZXN1bHQgPSBuZXcg
KG1fdm0pIEJyZWFrTm9kZShtX3ZtLCBsb2NhdGlvbik7CiAgICAgICAgIHNldEV4Y2VwdGlvbkxv
Y2F0aW9uKHJlc3VsdCwgZVN0YXJ0LCBlRW5kLCBlRW5kKTsKICAgICAgICAgcmVzdWx0LT5zZXRM
b2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jaGFyUG9zaXRpb24pOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwpAQCAtNDEyLDcgKzQxMiw3IEBAIHB1YmxpYzoKIAogICAgIFN0YXRlbWVu
dE5vZGUqIGNyZWF0ZUJyZWFrU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBpbnQgZVN0YXJ0LCBpbnQgZUVuZCwgaW50IHN0
YXJ0TGluZSwgaW50IGVuZExpbmUpCiAgICAgewotICAgICAgICBCcmVha05vZGUqIHJlc3VsdCA9
IG5ldyAobV9nbG9iYWxEYXRhKSBCcmVha05vZGUobG9jYXRpb24sICppZGVudCk7CisgICAgICAg
IEJyZWFrTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBCcmVha05vZGUobG9jYXRpb24sICppZGVu
dCk7CiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgZVN0YXJ0LCBlRW5kLCBl
RW5kKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlv
bi5jaGFyUG9zaXRpb24pOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDIwLDcgKzQyMCw3
IEBAIHB1YmxpYzoKIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGludCBlU3RhcnQsIGludCBlRW5kLCBp
bnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7Ci0gICAgICAgIENvbnRpbnVlTm9kZSog
cmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIENvbnRpbnVlTm9kZShtX2dsb2JhbERhdGEsIGxv
Y2F0aW9uKTsKKyAgICAgICAgQ29udGludWVOb2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIENvbnRp
bnVlTm9kZShtX3ZtLCBsb2NhdGlvbik7CiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJl
c3VsdCwgZVN0YXJ0LCBlRW5kLCBlRW5kKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRM
aW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jaGFyUG9zaXRpb24pOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwpAQCAtNDI4LDcgKzQyOCw3IEBAIHB1YmxpYzoKIAogICAgIFN0YXRlbWVudE5vZGUqIGNy
ZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50LCBpbnQgZVN0YXJ0LCBpbnQgZUVuZCwgaW50IHN0YXJ0TGlu
ZSwgaW50IGVuZExpbmUpCiAgICAgewotICAgICAgICBDb250aW51ZU5vZGUqIHJlc3VsdCA9IG5l
dyAobV9nbG9iYWxEYXRhKSBDb250aW51ZU5vZGUobG9jYXRpb24sICppZGVudCk7CisgICAgICAg
IENvbnRpbnVlTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBDb250aW51ZU5vZGUobG9jYXRpb24s
ICppZGVudCk7CiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgZVN0YXJ0LCBl
RW5kLCBlRW5kKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBs
b2NhdGlvbi5jaGFyUG9zaXRpb24pOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDM2LDcg
KzQzNiw3IEBAIHB1YmxpYzoKIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVRyeVN0YXRlbWVu
dChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBTdGF0ZW1lbnROb2RlKiB0cnlCbG9j
aywgY29uc3QgSWRlbnRpZmllciogaWRlbnQsIFN0YXRlbWVudE5vZGUqIGNhdGNoQmxvY2ssIFN0
YXRlbWVudE5vZGUqIGZpbmFsbHlCbG9jaywgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUpCiAg
ICAgewotICAgICAgICBUcnlOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgVHJ5Tm9k
ZShsb2NhdGlvbiwgdHJ5QmxvY2ssICppZGVudCwgY2F0Y2hCbG9jaywgZmluYWxseUJsb2NrKTsK
KyAgICAgICAgVHJ5Tm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBUcnlOb2RlKGxvY2F0aW9uLCB0
cnlCbG9jaywgKmlkZW50LCBjYXRjaEJsb2NrLCBmaW5hbGx5QmxvY2spOwogICAgICAgICBpZiAo
Y2F0Y2hCbG9jaykKICAgICAgICAgICAgIHVzZXNDYXRjaCgpOwogICAgICAgICByZXN1bHQtPnNl
dExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CkBAIC00NDUs
MjkgKzQ0NSwyOSBAQCBwdWJsaWM6CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVTd2l0Y2hT
dGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUq
IGV4cHIsIENsYXVzZUxpc3ROb2RlKiBmaXJzdENsYXVzZXMsIENhc2VDbGF1c2VOb2RlKiBkZWZh
dWx0Q2xhdXNlLCBDbGF1c2VMaXN0Tm9kZSogc2Vjb25kQ2xhdXNlcywgaW50IHN0YXJ0TGluZSwg
aW50IGVuZExpbmUpCiAgICAgewotICAgICAgICBDYXNlQmxvY2tOb2RlKiBjYXNlcyA9IG5ldyAo
bV9nbG9iYWxEYXRhKSBDYXNlQmxvY2tOb2RlKGZpcnN0Q2xhdXNlcywgZGVmYXVsdENsYXVzZSwg
c2Vjb25kQ2xhdXNlcyk7Ci0gICAgICAgIFN3aXRjaE5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9i
YWxEYXRhKSBTd2l0Y2hOb2RlKGxvY2F0aW9uLCBleHByLCBjYXNlcyk7CisgICAgICAgIENhc2VC
bG9ja05vZGUqIGNhc2VzID0gbmV3IChtX3ZtKSBDYXNlQmxvY2tOb2RlKGZpcnN0Q2xhdXNlcywg
ZGVmYXVsdENsYXVzZSwgc2Vjb25kQ2xhdXNlcyk7CisgICAgICAgIFN3aXRjaE5vZGUqIHJlc3Vs
dCA9IG5ldyAobV92bSkgU3dpdGNoTm9kZShsb2NhdGlvbiwgZXhwciwgY2FzZXMpOwogICAgICAg
ICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlv
bik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgU3RhdGVtZW50Tm9kZSog
Y3JlYXRlV2hpbGVTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgaW50IHN0YXJ0TGlu
ZSwgaW50IGVuZExpbmUpCiAgICAgewotICAgICAgICBXaGlsZU5vZGUqIHJlc3VsdCA9IG5ldyAo
bV9nbG9iYWxEYXRhKSBXaGlsZU5vZGUobG9jYXRpb24sIGV4cHIsIHN0YXRlbWVudCk7CisgICAg
ICAgIFdoaWxlTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBXaGlsZU5vZGUobG9jYXRpb24sIGV4
cHIsIHN0YXRlbWVudCk7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGlu
ZSwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVEb1doaWxlU3RhdGVtZW50KGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgRXhwcmVzc2lv
bk5vZGUqIGV4cHIsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lKQogICAgIHsKLSAgICAgICAg
RG9XaGlsZU5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBEb1doaWxlTm9kZShsb2Nh
dGlvbiwgc3RhdGVtZW50LCBleHByKTsKKyAgICAgICAgRG9XaGlsZU5vZGUqIHJlc3VsdCA9IG5l
dyAobV92bSkgRG9XaGlsZU5vZGUobG9jYXRpb24sIHN0YXRlbWVudCwgZXhwcik7CiAgICAgICAg
IHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uY2hhclBvc2l0aW9u
KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBTdGF0ZW1lbnROb2RlKiBj
cmVhdGVMYWJlbFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCBpbnQgc3RhcnQs
IGludCBlbmQpCiAgICAgewotICAgICAgICBMYWJlbE5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9i
YWxEYXRhKSBMYWJlbE5vZGUobG9jYXRpb24sICppZGVudCwgc3RhdGVtZW50KTsKKyAgICAgICAg
TGFiZWxOb2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIExhYmVsTm9kZShsb2NhdGlvbiwgKmlkZW50
LCBzdGF0ZW1lbnQpOwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIHN0YXJ0
LCBlbmQsIGVuZCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtNDc1LDE0ICs0
NzUsMTQgQEAgcHVibGljOgogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVdpdGhTdGF0ZW1lbnQo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0
YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgc3RhcnRMaW5l
LCBpbnQgZW5kTGluZSkKICAgICB7CiAgICAgICAgIHVzZXNXaXRoKCk7Ci0gICAgICAgIFdpdGhO
b2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgV2l0aE5vZGUobG9jYXRpb24sIGV4cHIs
IHN0YXRlbWVudCwgZW5kLCBlbmQgLSBzdGFydCk7CisgICAgICAgIFdpdGhOb2RlKiByZXN1bHQg
PSBuZXcgKG1fdm0pIFdpdGhOb2RlKGxvY2F0aW9uLCBleHByLCBzdGF0ZW1lbnQsIGVuZCwgZW5k
IC0gc3RhcnQpOwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxv
Y2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfSAgICAK
ICAgICAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVUaHJvd1N0YXRlbWVudChjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgaW50IHN0YXJ0LCBp
bnQgZW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7Ci0gICAgICAgIFRocm93
Tm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIFRocm93Tm9kZShsb2NhdGlvbiwgZXhw
cik7CisgICAgICAgIFRocm93Tm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBUaHJvd05vZGUobG9j
YXRpb24sIGV4cHIpOwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUs
IGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJl
c3VsdCwgc3RhcnQsIGVuZCwgZW5kKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTQ5MCwy
MSArNDkwLDIxIEBAIHB1YmxpYzoKICAgICAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVEZWJ1
Z2dlcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBpbnQgc3RhcnRMaW5lLCBpbnQg
ZW5kTGluZSkKICAgICB7Ci0gICAgICAgIERlYnVnZ2VyU3RhdGVtZW50Tm9kZSogcmVzdWx0ID0g
bmV3IChtX2dsb2JhbERhdGEpIERlYnVnZ2VyU3RhdGVtZW50Tm9kZShsb2NhdGlvbik7CisgICAg
ICAgIERlYnVnZ2VyU3RhdGVtZW50Tm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBEZWJ1Z2dlclN0
YXRlbWVudE5vZGUobG9jYXRpb24pOwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUs
IGVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogICAgIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUNvbnN0U3RhdGVtZW50KGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIENvbnN0RGVjbE5vZGUqIGRlY2xzLCBpbnQg
c3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7Ci0gICAgICAgIENvbnN0U3RhdGVtZW50Tm9k
ZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIENvbnN0U3RhdGVtZW50Tm9kZShsb2NhdGlv
biwgZGVjbHMpOworICAgICAgICBDb25zdFN0YXRlbWVudE5vZGUqIHJlc3VsdCA9IG5ldyAobV92
bSkgQ29uc3RTdGF0ZW1lbnROb2RlKGxvY2F0aW9uLCBkZWNscyk7CiAgICAgICAgIHJlc3VsdC0+
c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBDb25zdERlY2xOb2RlKiBhcHBlbmRDb25z
dERlY2woY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgQ29uc3REZWNsTm9kZSogdGFp
bCwgY29uc3QgSWRlbnRpZmllciogbmFtZSwgRXhwcmVzc2lvbk5vZGUqIGluaXRpYWxpemVyKQog
ICAgIHsKLSAgICAgICAgQ29uc3REZWNsTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEp
IENvbnN0RGVjbE5vZGUobG9jYXRpb24sICpuYW1lLCBpbml0aWFsaXplcik7CisgICAgICAgIENv
bnN0RGVjbE5vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgQ29uc3REZWNsTm9kZShsb2NhdGlvbiwg
Km5hbWUsIGluaXRpYWxpemVyKTsKICAgICAgICAgaWYgKHRhaWwpCiAgICAgICAgICAgICB0YWls
LT5tX25leHQgPSByZXN1bHQ7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC01MTcsNyArNTE3
LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRWYXIoY29uc3QgSWRlbnRpZmllciogaWRlbnQs
IGludCBhdHRycykKICAgICB7Ci0gICAgICAgIGlmIChtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFt
ZXMtPmFyZ3VtZW50cyA9PSAqaWRlbnQpCisgICAgICAgIGlmIChtX3ZtLT5wcm9wZXJ0eU5hbWVz
LT5hcmd1bWVudHMgPT0gKmlkZW50KQogICAgICAgICAgICAgdXNlc0FyZ3VtZW50cygpOwogICAg
ICAgICBtX3Njb3BlLm1fdmFyRGVjbGFyYXRpb25zLT5kYXRhLmFwcGVuZChzdGQ6Om1ha2VfcGFp
cihpZGVudCwgYXR0cnMpKTsKICAgICB9CkBAIC01MzAsNyArNTMwLDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8Q29tbWFOb2RlKj4obGlzdCktPmFwcGVuZChpbml0KTsKICAg
ICAgICAgICAgIHJldHVybiBsaXN0OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuZXcgKG1f
Z2xvYmFsRGF0YSkgQ29tbWFOb2RlKGxvY2F0aW9uLCBsaXN0LCBpbml0KTsKKyAgICAgICAgcmV0
dXJuIG5ldyAobV92bSkgQ29tbWFOb2RlKGxvY2F0aW9uLCBsaXN0LCBpbml0KTsKICAgICB9CiAK
ICAgICBpbnQgZXZhbENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9ldmFsQ291bnQ7IH0KQEAgLTYx
OCw5ICs2MTgsOSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgc3RydWN0IFNjb3BlIHsKLSAg
ICAgICAgU2NvcGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQotICAgICAgICAgICAgOiBtX3Zh
ckRlY2xhcmF0aW9ucyhuZXcgKGdsb2JhbERhdGEpIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlv
blN0YWNrczo6VmFyU3RhY2s+KQotICAgICAgICAgICAgLCBtX2Z1bmNEZWNsYXJhdGlvbnMobmV3
IChnbG9iYWxEYXRhKSBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9u
U3RhY2s+KQorICAgICAgICBTY29wZShWTSogdm0pCisgICAgICAgICAgICA6IG1fdmFyRGVjbGFy
YXRpb25zKG5ldyAodm0pIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6VmFyU3Rh
Y2s+KQorICAgICAgICAgICAgLCBtX2Z1bmNEZWNsYXJhdGlvbnMobmV3ICh2bSkgUGFyc2VyQXJl
bmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrPikKICAgICAgICAgICAgICwg
bV9mZWF0dXJlcygwKQogICAgICAgICAgICAgLCBtX251bUNvbnN0YW50cygwKQogICAgICAgICB7
CkBAIC02NDgsMTAgKzY0OCwxMCBAQCBwcml2YXRlOgogICAgIH0KICAgICBFeHByZXNzaW9uTm9k
ZSogY3JlYXRlTnVtYmVyKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGRvdWJsZSBk
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBOdW1iZXJOb2RlKGxv
Y2F0aW9uLCBkKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgTnVtYmVyTm9kZShsb2NhdGlv
biwgZCk7CiAgICAgfQogICAgIAotICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworICAg
IFZNKiBtX3ZtOwogICAgIFNvdXJjZUNvZGUqIG1fc291cmNlQ29kZTsKICAgICBTY29wZSBtX3Nj
b3BlOwogICAgIFZlY3RvcjxCaW5hcnlPcGVyYW5kLCAxMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+
IG1fYmluYXJ5T3BlcmFuZFN0YWNrOwpAQCAtNjY1LDI2ICs2NjUsMjYgQEAgRXhwcmVzc2lvbk5v
ZGUqIEFTVEJ1aWxkZXI6Om1ha2VUeXBlT2ZObwogewogICAgIGlmIChleHByLT5pc1Jlc29sdmVO
b2RlKCkpIHsKICAgICAgICAgUmVzb2x2ZU5vZGUqIHJlc29sdmUgPSBzdGF0aWNfY2FzdDxSZXNv
bHZlTm9kZSo+KGV4cHIpOwotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFR5cGVP
ZlJlc29sdmVOb2RlKGxvY2F0aW9uLCByZXNvbHZlLT5pZGVudGlmaWVyKCkpOworICAgICAgICBy
ZXR1cm4gbmV3IChtX3ZtKSBUeXBlT2ZSZXNvbHZlTm9kZShsb2NhdGlvbiwgcmVzb2x2ZS0+aWRl
bnRpZmllcigpKTsKICAgICB9Ci0gICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBUeXBlT2ZW
YWx1ZU5vZGUobG9jYXRpb24sIGV4cHIpOworICAgIHJldHVybiBuZXcgKG1fdm0pIFR5cGVPZlZh
bHVlTm9kZShsb2NhdGlvbiwgZXhwcik7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVy
OjptYWtlRGVsZXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogZXhwciwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQpCiB7CiAgICAgaWYg
KCFleHByLT5pc0xvY2F0aW9uKCkpCi0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkg
RGVsZXRlVmFsdWVOb2RlKGxvY2F0aW9uLCBleHByKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV92
bSkgRGVsZXRlVmFsdWVOb2RlKGxvY2F0aW9uLCBleHByKTsKICAgICBpZiAoZXhwci0+aXNSZXNv
bHZlTm9kZSgpKSB7CiAgICAgICAgIFJlc29sdmVOb2RlKiByZXNvbHZlID0gc3RhdGljX2Nhc3Q8
UmVzb2x2ZU5vZGUqPihleHByKTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBE
ZWxldGVSZXNvbHZlTm9kZShsb2NhdGlvbiwgcmVzb2x2ZS0+aWRlbnRpZmllcigpLCBkaXZvdCwg
ZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBE
ZWxldGVSZXNvbHZlTm9kZShsb2NhdGlvbiwgcmVzb2x2ZS0+aWRlbnRpZmllcigpLCBkaXZvdCwg
ZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOwogICAgIH0KICAgICBpZiAoZXhwci0+aXNCcmFj
a2V0QWNjZXNzb3JOb2RlKCkpIHsKICAgICAgICAgQnJhY2tldEFjY2Vzc29yTm9kZSogYnJhY2tl
dCA9IHN0YXRpY19jYXN0PEJyYWNrZXRBY2Nlc3Nvck5vZGUqPihleHByKTsKLSAgICAgICAgcmV0
dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBEZWxldGVCcmFja2V0Tm9kZShsb2NhdGlvbiwgYnJhY2tl
dC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVu
ZCAtIGRpdm90KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgRGVsZXRlQnJhY2tldE5vZGUo
bG9jYXRpb24sIGJyYWNrZXQtPmJhc2UoKSwgYnJhY2tldC0+c3Vic2NyaXB0KCksIGRpdm90LCBk
aXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CiAgICAgfQogICAgIEFTU0VSVChleHByLT5pc0Rv
dEFjY2Vzc29yTm9kZSgpKTsKICAgICBEb3RBY2Nlc3Nvck5vZGUqIGRvdCA9IHN0YXRpY19jYXN0
PERvdEFjY2Vzc29yTm9kZSo+KGV4cHIpOwotICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkg
RGVsZXRlRG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBk
aXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOworICAgIHJldHVybiBuZXcgKG1fdm0p
IERlbGV0ZURvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwg
ZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKIH0KIAogRXhwcmVzc2lvbk5vZGUq
IEFTVEJ1aWxkZXI6Om1ha2VOZWdhdGVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIEV4cHJlc3Npb25Ob2RlKiBuKQpAQCAtNjk1LDE0ICs2OTUsMTQgQEAgRXhwcmVzc2lvbk5v
ZGUqIEFTVEJ1aWxkZXI6Om1ha2VOZWdhdGVObwogICAgICAgICByZXR1cm4gbnVtYmVyTm9kZTsK
ICAgICB9CiAKLSAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIE5lZ2F0ZU5vZGUobG9jYXRp
b24sIG4pOworICAgIHJldHVybiBuZXcgKG1fdm0pIE5lZ2F0ZU5vZGUobG9jYXRpb24sIG4pOwog
fQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUJpdHdpc2VOb3ROb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByKQogewogICAg
IGlmIChleHByLT5pc051bWJlcigpKQogICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyKGxvY2F0
aW9uLCB+dG9JbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwciktPnZhbHVlKCkpKTsK
LSAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEJpdHdpc2VOb3ROb2RlKGxvY2F0aW9uLCBl
eHByKTsKKyAgICByZXR1cm4gbmV3IChtX3ZtKSBCaXR3aXNlTm90Tm9kZShsb2NhdGlvbiwgZXhw
cik7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlTXVsdE5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNz
aW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKQEAgLTcxNCwxMiArNzE0
LDEyIEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlTXVsdE5vZGUKICAgICAgICAg
cmV0dXJuIGNyZWF0ZU51bWJlcihsb2NhdGlvbiwgc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4
cHIxKS0+dmFsdWUoKSAqIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkp
OwogCiAgICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIHN0YXRpY19jYXN0PE51bWJlck5vZGUq
PihleHByMSktPnZhbHVlKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRh
KSBVbmFyeVBsdXNOb2RlKGxvY2F0aW9uLCBleHByMik7CisgICAgICAgIHJldHVybiBuZXcgKG1f
dm0pIFVuYXJ5UGx1c05vZGUobG9jYXRpb24sIGV4cHIyKTsKIAogICAgIGlmIChleHByMi0+aXNO
dW1iZXIoKSAmJiBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpID09IDEp
Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgVW5hcnlQbHVzTm9kZShsb2NhdGlv
biwgZXhwcjEpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBVbmFyeVBsdXNOb2RlKGxvY2F0
aW9uLCBleHByMSk7CiAKLSAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIE11bHROb2RlKGxv
Y2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgIHJldHVybiBu
ZXcgKG1fdm0pIE11bHROb2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdu
bWVudHMpOwogfQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZURpdk5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHBy
ZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKQEAgLTcyOSw3ICs3
MjksNyBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZURpdk5vZGUoCiAKICAgICBp
ZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVy
biBjcmVhdGVOdW1iZXIobG9jYXRpb24sIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSkt
PnZhbHVlKCkgLyBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKTsKLSAg
ICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIERpdk5vZGUobG9jYXRpb24sIGV4cHIxLCBleHBy
MiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgcmV0dXJuIG5ldyAobV92bSkgRGl2Tm9kZShs
b2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhwcmVz
c2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VNb2ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBi
b29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCkBAIC03MzksMTQgKzczOSwxNCBAQCBFeHByZXNzaW9u
Tm9kZSogQVNUQnVpbGRlcjo6bWFrZU1vZE5vZGUoCiAgICAgCiAgICAgaWYgKGV4cHIxLT5pc051
bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigpKQogICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVy
KGxvY2F0aW9uLCBmbW9kKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCks
IHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkpKTsKLSAgICByZXR1cm4g
bmV3IChtX2dsb2JhbERhdGEpIE1vZE5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRI
YXNBc3NpZ25tZW50cyk7CisgICAgcmV0dXJuIG5ldyAobV92bSkgTW9kTm9kZShsb2NhdGlvbiwg
ZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUq
IEFTVEJ1aWxkZXI6Om1ha2VBZGROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0
SGFzQXNzaWdubWVudHMpCiB7CiAgICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4cHIyLT5p
c051bWJlcigpKQogICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyKGxvY2F0aW9uLCBzdGF0aWNf
Y2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpICsgc3RhdGljX2Nhc3Q8TnVtYmVyTm9k
ZSo+KGV4cHIyKS0+dmFsdWUoKSk7Ci0gICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBBZGRO
b2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgIHJl
dHVybiBuZXcgKG1fdm0pIEFkZE5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNB
c3NpZ25tZW50cyk7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlU3ViTm9k
ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcjEs
IEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQpAQCAtNzU2
LDc5ICs3NTYsNzkgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VTdWJOb2RlKAog
CiAgICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigpKQogICAgICAg
ICByZXR1cm4gY3JlYXRlTnVtYmVyKGxvY2F0aW9uLCBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4o
ZXhwcjEpLT52YWx1ZSgpIC0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUo
KSk7Ci0gICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBTdWJOb2RlKGxvY2F0aW9uLCBleHBy
MSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgIHJldHVybiBuZXcgKG1fdm0pIFN1
Yk5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiB9CiAK
IEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlTGVmdFNoaWZ0Tm9kZShjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25O
b2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQogewogICAgIGlmIChleHByMS0+
aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkKICAgICAgICAgcmV0dXJuIGNyZWF0ZU51
bWJlcihsb2NhdGlvbiwgdG9JbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52
YWx1ZSgpKSA8PCAodG9VSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFs
dWUoKSkgJiAweDFmKSk7Ci0gICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBMZWZ0U2hpZnRO
b2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgIHJl
dHVybiBuZXcgKG1fdm0pIExlZnRTaGlmdE5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmln
aHRIYXNBc3NpZ25tZW50cyk7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtl
UmlnaHRTaGlmdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lv
bk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25t
ZW50cykKIHsKICAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkp
CiAgICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIHRvSW50MzIoc3RhdGljX2Nh
c3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSkgPj4gKHRvVUludDMyKHN0YXRpY19jYXN0
PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkpICYgMHgxZikpOwotICAgIHJldHVybiBuZXcg
KG1fZ2xvYmFsRGF0YSkgUmlnaHRTaGlmdE5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmln
aHRIYXNBc3NpZ25tZW50cyk7CisgICAgcmV0dXJuIG5ldyAobV92bSkgUmlnaHRTaGlmdE5vZGUo
bG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiB9CiAKIEV4cHJl
c3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlVVJpZ2h0U2hpZnROb2RlKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUq
IGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCiB7CiAgICAgaWYgKGV4cHIxLT5pc051
bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigpKQogICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVy
KGxvY2F0aW9uLCB0b1VJbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1
ZSgpKSA+PiAodG9VSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUo
KSkgJiAweDFmKSk7Ci0gICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBVbnNpZ25lZFJpZ2h0
U2hpZnROb2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwor
ICAgIHJldHVybiBuZXcgKG1fdm0pIFVuc2lnbmVkUmlnaHRTaGlmdE5vZGUobG9jYXRpb24sIGV4
cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBB
U1RCdWlsZGVyOjptYWtlQml0T3JOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0
SGFzQXNzaWdubWVudHMpCiB7CiAgICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4cHIyLT5p
c051bWJlcigpKQogICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyKGxvY2F0aW9uLCB0b0ludDMy
KHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkpIHwgdG9JbnQzMihzdGF0
aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKSk7Ci0gICAgcmV0dXJuIG5ldyAo
bV9nbG9iYWxEYXRhKSBCaXRPck5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNB
c3NpZ25tZW50cyk7CisgICAgcmV0dXJuIG5ldyAobV92bSkgQml0T3JOb2RlKGxvY2F0aW9uLCBl
eHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCiBFeHByZXNzaW9uTm9kZSog
QVNUQnVpbGRlcjo6bWFrZUJpdEFuZE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmln
aHRIYXNBc3NpZ25tZW50cykKIHsKICAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjIt
PmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIHRvSW50
MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSkgJiB0b0ludDMyKHN0
YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZhbHVlKCkpKTsKLSAgICByZXR1cm4gbmV3
IChtX2dsb2JhbERhdGEpIEJpdEFuZE5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRI
YXNBc3NpZ25tZW50cyk7CisgICAgcmV0dXJuIG5ldyAobV92bSkgQml0QW5kTm9kZShsb2NhdGlv
biwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhwcmVzc2lvbk5v
ZGUqIEFTVEJ1aWxkZXI6Om1ha2VCaXRYT3JOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9j
YXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29s
IHJpZ2h0SGFzQXNzaWdubWVudHMpCiB7CiAgICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4
cHIyLT5pc051bWJlcigpKQogICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyKGxvY2F0aW9uLCB0
b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkpIF4gdG9JbnQz
MihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKSk7Ci0gICAgcmV0dXJu
IG5ldyAobV9nbG9iYWxEYXRhKSBCaXRYT3JOb2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJp
Z2h0SGFzQXNzaWdubWVudHMpOworICAgIHJldHVybiBuZXcgKG1fdm0pIEJpdFhPck5vZGUobG9j
YXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiB9CiAKIEV4cHJlc3Np
b25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlRnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZnVuYywgQXJndW1lbnRzTm9kZSogYXJn
cywgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQpCiB7CiAgICAgaWYgKCFmdW5jLT5pc0xv
Y2F0aW9uKCkpCi0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgRnVuY3Rpb25DYWxs
VmFsdWVOb2RlKGxvY2F0aW9uLCBmdW5jLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5k
IC0gZGl2b3QpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBGdW5jdGlvbkNhbGxWYWx1ZU5v
ZGUobG9jYXRpb24sIGZ1bmMsIGFyZ3MsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZv
dCk7CiAgICAgaWYgKGZ1bmMtPmlzUmVzb2x2ZU5vZGUoKSkgewogICAgICAgICBSZXNvbHZlTm9k
ZSogcmVzb2x2ZSA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4oZnVuYyk7CiAgICAgICAgIGNv
bnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIgPSByZXNvbHZlLT5pZGVudGlmaWVyKCk7Ci0gICAg
ICAgIGlmIChpZGVudGlmaWVyID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+ZXZhbCkg
eworICAgICAgICBpZiAoaWRlbnRpZmllciA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5ldmFsKSB7
CiAgICAgICAgICAgICB1c2VzRXZhbCgpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9i
YWxEYXRhKSBFdmFsRnVuY3Rpb25DYWxsTm9kZShsb2NhdGlvbiwgYXJncywgZGl2b3QsIGRpdm90
IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEV2
YWxGdW5jdGlvbkNhbGxOb2RlKGxvY2F0aW9uLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwg
ZW5kIC0gZGl2b3QpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0
YSkgRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGUobG9jYXRpb24sIGlkZW50aWZpZXIsIGFyZ3MsIGRp
dm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CisgICAgICAgIHJldHVybiBuZXcgKG1f
dm0pIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlKGxvY2F0aW9uLCBpZGVudGlmaWVyLCBhcmdzLCBk
aXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOwogICAgIH0KICAgICBpZiAoZnVuYy0+
aXNCcmFja2V0QWNjZXNzb3JOb2RlKCkpIHsKICAgICAgICAgQnJhY2tldEFjY2Vzc29yTm9kZSog
YnJhY2tldCA9IHN0YXRpY19jYXN0PEJyYWNrZXRBY2Nlc3Nvck5vZGUqPihmdW5jKTsKLSAgICAg
ICAgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgRnVu
Y3Rpb25DYWxsQnJhY2tldE5vZGUobG9jYXRpb24sIGJyYWNrZXQtPmJhc2UoKSwgYnJhY2tldC0+
c3Vic2NyaXB0KCksIGFyZ3MsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7Cisg
ICAgICAgIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlKiBub2RlID0gbmV3IChtX3ZtKSBGdW5jdGlv
bkNhbGxCcmFja2V0Tm9kZShsb2NhdGlvbiwgYnJhY2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJz
Y3JpcHQoKSwgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKICAgICAg
ICAgbm9kZS0+c2V0U3ViZXhwcmVzc2lvbkluZm8oYnJhY2tldC0+ZGl2b3QoKSwgYnJhY2tldC0+
ZW5kT2Zmc2V0KCkpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAgICAgQVNTRVJUKGZ1
bmMtPmlzRG90QWNjZXNzb3JOb2RlKCkpOwogICAgIERvdEFjY2Vzc29yTm9kZSogZG90ID0gc3Rh
dGljX2Nhc3Q8RG90QWNjZXNzb3JOb2RlKj4oZnVuYyk7CiAgICAgRnVuY3Rpb25DYWxsRG90Tm9k
ZSogbm9kZTsKLSAgICBpZiAoZG90LT5pZGVudGlmaWVyKCkgPT0gbV9nbG9iYWxEYXRhLT5wcm9w
ZXJ0eU5hbWVzLT5jYWxsKQotICAgICAgICBub2RlID0gbmV3IChtX2dsb2JhbERhdGEpIENhbGxG
dW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVy
KCksIGFyZ3MsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7Ci0gICAgZWxzZSBp
ZiAoZG90LT5pZGVudGlmaWVyKCkgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5hcHBs
eSkKLSAgICAgICAgbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBBcHBseUZ1bmN0aW9uQ2FsbERv
dE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgYXJncywgZGl2
b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKKyAgICBpZiAoZG90LT5pZGVudGlmaWVy
KCkgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+Y2FsbCkKKyAgICAgICAgbm9kZSA9IG5ldyAobV92
bSkgQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlk
ZW50aWZpZXIoKSwgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKKyAg
ICBlbHNlIGlmIChkb3QtPmlkZW50aWZpZXIoKSA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcHBs
eSkKKyAgICAgICAgbm9kZSA9IG5ldyAobV92bSkgQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlKGxv
Y2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGFyZ3MsIGRpdm90LCBkaXZv
dCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CiAgICAgZWxzZQotICAgICAgICBub2RlID0gbmV3ICht
X2dsb2JhbERhdGEpIEZ1bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBk
b3QtPmlkZW50aWZpZXIoKSwgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90
KTsKKyAgICAgICAgbm9kZSA9IG5ldyAobV92bSkgRnVuY3Rpb25DYWxsRG90Tm9kZShsb2NhdGlv
biwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBz
dGFydCwgZW5kIC0gZGl2b3QpOwogICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25JbmZvKGRvdC0+
ZGl2b3QoKSwgZG90LT5lbmRPZmZzZXQoKSk7CiAgICAgcmV0dXJuIG5vZGU7CiB9CkBAIC04Mzcs
MTAgKzgzNywxMCBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUJpbmFyeU5vCiB7
CiAgICAgc3dpdGNoICh0b2tlbikgewogICAgIGNhc2UgT1I6Ci0gICAgICAgIHJldHVybiBuZXcg
KG1fZ2xvYmFsRGF0YSkgTG9naWNhbE9wTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmly
c3QsIE9wTG9naWNhbE9yKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgTG9naWNhbE9wTm9k
ZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIE9wTG9naWNhbE9yKTsKIAogICAgIGNh
c2UgQU5EOgotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIExvZ2ljYWxPcE5vZGUo
bG9jYXRpb24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCBPcExvZ2ljYWxBbmQpOworICAgICAgICBy
ZXR1cm4gbmV3IChtX3ZtKSBMb2dpY2FsT3BOb2RlKGxvY2F0aW9uLCBsaHMuZmlyc3QsIHJocy5m
aXJzdCwgT3BMb2dpY2FsQW5kKTsKIAogICAgIGNhc2UgQklUT1I6CiAgICAgICAgIHJldHVybiBt
YWtlQml0T3JOb2RlKGxvY2F0aW9uLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5o
YXNBc3NpZ25tZW50KTsKQEAgLTg1MiwzNyArODUyLDM3IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RC
dWlsZGVyOjptYWtlQmluYXJ5Tm8KICAgICAgICAgcmV0dXJuIG1ha2VCaXRBbmROb2RlKGxvY2F0
aW9uLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKIAog
ICAgIGNhc2UgRVFFUToKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBFcXVhbE5v
ZGUobG9jYXRpb24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1l
bnQpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBFcXVhbE5vZGUobG9jYXRpb24sIGxocy5m
aXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwogCiAgICAgY2FzZSBO
RToKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBOb3RFcXVhbE5vZGUobG9jYXRp
b24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOworICAg
ICAgICByZXR1cm4gbmV3IChtX3ZtKSBOb3RFcXVhbE5vZGUobG9jYXRpb24sIGxocy5maXJzdCwg
cmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwogCiAgICAgY2FzZSBTVFJFUToK
LSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBTdHJpY3RFcXVhbE5vZGUobG9jYXRp
b24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOworICAg
ICAgICByZXR1cm4gbmV3IChtX3ZtKSBTdHJpY3RFcXVhbE5vZGUobG9jYXRpb24sIGxocy5maXJz
dCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwogCiAgICAgY2FzZSBTVFJO
RVE6Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgTm90U3RyaWN0RXF1YWxOb2Rl
KGxvY2F0aW9uLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50
KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgTm90U3RyaWN0RXF1YWxOb2RlKGxvY2F0aW9u
LCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKIAogICAg
IGNhc2UgTFQ6Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgTGVzc05vZGUobG9j
YXRpb24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwor
ICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBMZXNzTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCBy
aHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CiAKICAgICBjYXNlIEdUOgotICAg
ICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEdyZWF0ZXJOb2RlKGxvY2F0aW9uLCBsaHMu
Zmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKKyAgICAgICAgcmV0
dXJuIG5ldyAobV92bSkgR3JlYXRlck5vZGUobG9jYXRpb24sIGxocy5maXJzdCwgcmhzLmZpcnN0
LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwogCiAgICAgY2FzZSBMRToKLSAgICAgICAgcmV0
dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBMZXNzRXFOb2RlKGxvY2F0aW9uLCBsaHMuZmlyc3QsIHJo
cy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKKyAgICAgICAgcmV0dXJuIG5ldyAo
bV92bSkgTGVzc0VxTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNv
bmQuaGFzQXNzaWdubWVudCk7CiAKICAgICBjYXNlIEdFOgotICAgICAgICByZXR1cm4gbmV3ICht
X2dsb2JhbERhdGEpIEdyZWF0ZXJFcU5vZGUobG9jYXRpb24sIGxocy5maXJzdCwgcmhzLmZpcnN0
LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBH
cmVhdGVyRXFOb2RlKGxvY2F0aW9uLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5o
YXNBc3NpZ25tZW50KTsKIAogICAgIGNhc2UgSU5TVEFOQ0VPRjogewotICAgICAgICBJbnN0YW5j
ZU9mTm9kZSogbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBJbnN0YW5jZU9mTm9kZShsb2NhdGlv
biwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CisgICAg
ICAgIEluc3RhbmNlT2ZOb2RlKiBub2RlID0gbmV3IChtX3ZtKSBJbnN0YW5jZU9mTm9kZShsb2Nh
dGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CiAg
ICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIGxocy5zZWNvbmQuc3RhcnQsIHJocy5z
ZWNvbmQuc3RhcnQsIHJocy5zZWNvbmQuZW5kKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAg
fQogCiAgICAgY2FzZSBJTlRPS0VOOiB7Ci0gICAgICAgIEluTm9kZSogbm9kZSA9IG5ldyAobV9n
bG9iYWxEYXRhKSBJbk5vZGUobG9jYXRpb24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vj
b25kLmhhc0Fzc2lnbm1lbnQpOworICAgICAgICBJbk5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIElu
Tm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdu
bWVudCk7CiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIGxocy5zZWNvbmQuc3Rh
cnQsIHJocy5zZWNvbmQuc3RhcnQsIHJocy5zZWNvbmQuZW5kKTsKICAgICAgICAgcmV0dXJuIG5v
ZGU7CiAgICAgfQpAQCAtOTE4LDI0ICs5MTgsMjQgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxk
ZXI6Om1ha2VCaW5hcnlObwogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VBc3NpZ25O
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBsb2Ms
IE9wZXJhdG9yIG9wLCBFeHByZXNzaW9uTm9kZSogZXhwciwgYm9vbCBsb2NIYXNBc3NpZ25tZW50
cywgYm9vbCBleHBySGFzQXNzaWdubWVudHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5k
KQogewogICAgIGlmICghbG9jLT5pc0xvY2F0aW9uKCkpCi0gICAgICAgIHJldHVybiBuZXcgKG1f
Z2xvYmFsRGF0YSkgQXNzaWduRXJyb3JOb2RlKGxvY2F0aW9uLCBkaXZvdCwgZGl2b3QgLSBzdGFy
dCwgZW5kIC0gZGl2b3QpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBBc3NpZ25FcnJvck5v
ZGUobG9jYXRpb24sIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CiAKICAgICBp
ZiAobG9jLT5pc1Jlc29sdmVOb2RlKCkpIHsKICAgICAgICAgUmVzb2x2ZU5vZGUqIHJlc29sdmUg
PSBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KGxvYyk7CiAgICAgICAgIGlmIChvcCA9PSBPcEVx
dWFsKSB7CiAgICAgICAgICAgICBpZiAoZXhwci0+aXNGdW5jRXhwck5vZGUoKSkKICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxGdW5jRXhwck5vZGUqPihleHByKS0+Ym9keSgpLT5zZXRJbmZl
cnJlZE5hbWUocmVzb2x2ZS0+aWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgIEFzc2lnblJlc29s
dmVOb2RlKiBub2RlID0gbmV3IChtX2dsb2JhbERhdGEpIEFzc2lnblJlc29sdmVOb2RlKGxvY2F0
aW9uLCByZXNvbHZlLT5pZGVudGlmaWVyKCksIGV4cHIpOworICAgICAgICAgICAgQXNzaWduUmVz
b2x2ZU5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIEFzc2lnblJlc29sdmVOb2RlKGxvY2F0aW9uLCBy
ZXNvbHZlLT5pZGVudGlmaWVyKCksIGV4cHIpOwogICAgICAgICAgICAgc2V0RXhjZXB0aW9uTG9j
YXRpb24obm9kZSwgc3RhcnQsIGRpdm90LCBlbmQpOwogICAgICAgICAgICAgcmV0dXJuIG5vZGU7
CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBSZWFkTW9kaWZ5
UmVzb2x2ZU5vZGUobG9jYXRpb24sIHJlc29sdmUtPmlkZW50aWZpZXIoKSwgb3AsIGV4cHIsIGV4
cHJIYXNBc3NpZ25tZW50cywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKKyAg
ICAgICAgcmV0dXJuIG5ldyAobV92bSkgUmVhZE1vZGlmeVJlc29sdmVOb2RlKGxvY2F0aW9uLCBy
ZXNvbHZlLT5pZGVudGlmaWVyKCksIG9wLCBleHByLCBleHBySGFzQXNzaWdubWVudHMsIGRpdm90
LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CiAgICAgfQogICAgIGlmIChsb2MtPmlzQnJh
Y2tldEFjY2Vzc29yTm9kZSgpKSB7CiAgICAgICAgIEJyYWNrZXRBY2Nlc3Nvck5vZGUqIGJyYWNr
ZXQgPSBzdGF0aWNfY2FzdDxCcmFja2V0QWNjZXNzb3JOb2RlKj4obG9jKTsKICAgICAgICAgaWYg
KG9wID09IE9wRXF1YWwpCi0gICAgICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEFz
c2lnbkJyYWNrZXROb2RlKGxvY2F0aW9uLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNj
cmlwdCgpLCBleHByLCBsb2NIYXNBc3NpZ25tZW50cywgZXhwckhhc0Fzc2lnbm1lbnRzLCBicmFj
a2V0LT5kaXZvdCgpLCBicmFja2V0LT5kaXZvdCgpIC0gc3RhcnQsIGVuZCAtIGJyYWNrZXQtPmRp
dm90KCkpOwotICAgICAgICBSZWFkTW9kaWZ5QnJhY2tldE5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xv
YmFsRGF0YSkgUmVhZE1vZGlmeUJyYWNrZXROb2RlKGxvY2F0aW9uLCBicmFja2V0LT5iYXNlKCks
IGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBvcCwgZXhwciwgbG9jSGFzQXNzaWdubWVudHMsIGV4cHJI
YXNBc3NpZ25tZW50cywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKKyAgICAg
ICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEFzc2lnbkJyYWNrZXROb2RlKGxvY2F0aW9uLCBicmFj
a2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBleHByLCBsb2NIYXNBc3NpZ25tZW50
cywgZXhwckhhc0Fzc2lnbm1lbnRzLCBicmFja2V0LT5kaXZvdCgpLCBicmFja2V0LT5kaXZvdCgp
IC0gc3RhcnQsIGVuZCAtIGJyYWNrZXQtPmRpdm90KCkpOworICAgICAgICBSZWFkTW9kaWZ5QnJh
Y2tldE5vZGUqIG5vZGUgPSBuZXcgKG1fdm0pIFJlYWRNb2RpZnlCcmFja2V0Tm9kZShsb2NhdGlv
biwgYnJhY2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwgb3AsIGV4cHIsIGxvY0hh
c0Fzc2lnbm1lbnRzLCBleHBySGFzQXNzaWdubWVudHMsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBl
bmQgLSBkaXZvdCk7CiAgICAgICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25JbmZvKGJyYWNrZXQt
PmRpdm90KCksIGJyYWNrZXQtPmVuZE9mZnNldCgpKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAg
ICAgfQpAQCAtOTQ0LDIyICs5NDQsMjIgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1h
a2VBc3NpZ25ObwogICAgIGlmIChvcCA9PSBPcEVxdWFsKSB7CiAgICAgICAgIGlmIChleHByLT5p
c0Z1bmNFeHByTm9kZSgpKQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RnVuY0V4cHJOb2RlKj4o
ZXhwciktPmJvZHkoKS0+c2V0SW5mZXJyZWROYW1lKGRvdC0+aWRlbnRpZmllcigpKTsKLSAgICAg
ICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBBc3NpZ25Eb3ROb2RlKGxvY2F0aW9uLCBkb3Qt
PmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGV4cHIsIGV4cHJIYXNBc3NpZ25tZW50cywgZG90
LT5kaXZvdCgpLCBkb3QtPmRpdm90KCkgLSBzdGFydCwgZW5kIC0gZG90LT5kaXZvdCgpKTsKKyAg
ICAgICAgcmV0dXJuIG5ldyAobV92bSkgQXNzaWduRG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNl
KCksIGRvdC0+aWRlbnRpZmllcigpLCBleHByLCBleHBySGFzQXNzaWdubWVudHMsIGRvdC0+ZGl2
b3QoKSwgZG90LT5kaXZvdCgpIC0gc3RhcnQsIGVuZCAtIGRvdC0+ZGl2b3QoKSk7CiAgICAgfQog
Ci0gICAgUmVhZE1vZGlmeURvdE5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgUmVhZE1v
ZGlmeURvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgb3As
IGV4cHIsIGV4cHJIYXNBc3NpZ25tZW50cywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRp
dm90KTsKKyAgICBSZWFkTW9kaWZ5RG90Tm9kZSogbm9kZSA9IG5ldyAobV92bSkgUmVhZE1vZGlm
eURvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgb3AsIGV4
cHIsIGV4cHJIYXNBc3NpZ25tZW50cywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90
KTsKICAgICBub2RlLT5zZXRTdWJleHByZXNzaW9uSW5mbyhkb3QtPmRpdm90KCksIGRvdC0+ZW5k
T2Zmc2V0KCkpOwogICAgIHJldHVybiBub2RlOwogfQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVp
bGRlcjo6bWFrZVByZWZpeE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIsIE9wZXJhdG9yIG9wLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50
IGVuZCkKIHsKLSAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFByZWZpeE5vZGUobG9jYXRp
b24sIGV4cHIsIG9wLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOworICAgIHJl
dHVybiBuZXcgKG1fdm0pIFByZWZpeE5vZGUobG9jYXRpb24sIGV4cHIsIG9wLCBkaXZvdCwgZGl2
b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOwogfQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRl
cjo6bWFrZVBvc3RmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJl
c3Npb25Ob2RlKiBleHByLCBPcGVyYXRvciBvcCwgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBl
bmQpCiB7Ci0gICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBQb3N0Zml4Tm9kZShsb2NhdGlv
biwgZXhwciwgb3AsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CisgICAgcmV0
dXJuIG5ldyAobV92bSkgUG9zdGZpeE5vZGUobG9jYXRpb24sIGV4cHIsIG9wLCBkaXZvdCwgZGl2
b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL0xleGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL0xleGVyLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9MZXhlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDggQEAg
dXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKIG5hbWVzcGFjZSBKU0MgewogCi1LZXl3b3Jkczo6
S2V5d29yZHMoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQotICAgIDogbV9nbG9iYWxEYXRhKGds
b2JhbERhdGEpCitLZXl3b3Jkczo6S2V5d29yZHMoVk0qIHZtKQorICAgIDogbV92bSh2bSkKICAg
ICAsIG1fa2V5d29yZFRhYmxlKEpTQzo6bWFpblRhYmxlKQogewogfQpAQCAtNDg5LDkgKzQ4OSw5
IEBAIHN0YXRpYyBjb25zdCBMQ2hhciBzaW5nbGVDaGFyYWN0ZXJFc2NhcGUKIH07CiAKIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPgotTGV4ZXI8VD46OkxleGVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSkKK0xleGVyPFQ+OjpMZXhlcihWTSogdm0pCiAgICAgOiBtX2lzUmVwYXJzaW5nKGZhbHNlKQot
ICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgLCBtX3ZtKHZtKQogewogfQogCkBA
IC03ODksNyArNzg5LDcgQEAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4g
QQogICAgIGlmIChVTkxJS0VMWSgocmVtYWluaW5nIDwgbWF4VG9rZW5MZW5ndGgpICYmICEobGV4
ZXJGbGFncyAmIExleGVyRmxhZ3NJZ25vcmVSZXNlcnZlZFdvcmRzKSkpIHsKICAgICAgICAgQVNT
RVJUKHNob3VsZENyZWF0ZUlkZW50aWZpZXIpOwogICAgICAgICBpZiAocmVtYWluaW5nIDwgbWF4
VG9rZW5MZW5ndGgpIHsKLSAgICAgICAgICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBtX2ds
b2JhbERhdGEtPmtleXdvcmRzLT5nZXRLZXl3b3JkKCppZGVudCk7CisgICAgICAgICAgICBjb25z
dCBIYXNoRW50cnkqIGVudHJ5ID0gbV92bS0+a2V5d29yZHMtPmdldEtleXdvcmQoKmlkZW50KTsK
ICAgICAgICAgICAgIEFTU0VSVCgocmVtYWluaW5nIDwgbWF4VG9rZW5MZW5ndGgpIHx8ICFlbnRy
eSk7CiAgICAgICAgICAgICBpZiAoIWVudHJ5KQogICAgICAgICAgICAgICAgIHJldHVybiBJREVO
VDsKQEAgLTg0OSw3ICs4NDksNyBAQCB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDcmVhdGVJZGVudGlm
aWVyPiBBCiAgICAgaWYgKFVOTElLRUxZKChyZW1haW5pbmcgPCBtYXhUb2tlbkxlbmd0aCkgJiYg
IShsZXhlckZsYWdzICYgTGV4ZXJGbGFnc0lnbm9yZVJlc2VydmVkV29yZHMpKSkgewogICAgICAg
ICBBU1NFUlQoc2hvdWxkQ3JlYXRlSWRlbnRpZmllcik7CiAgICAgICAgIGlmIChyZW1haW5pbmcg
PCBtYXhUb2tlbkxlbmd0aCkgewotICAgICAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9
IG1fZ2xvYmFsRGF0YS0+a2V5d29yZHMtPmdldEtleXdvcmQoKmlkZW50KTsKKyAgICAgICAgICAg
IGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBtX3ZtLT5rZXl3b3Jkcy0+Z2V0S2V5d29yZCgqaWRl
bnQpOwogICAgICAgICAgICAgQVNTRVJUKChyZW1haW5pbmcgPCBtYXhUb2tlbkxlbmd0aCkgfHwg
IWVudHJ5KTsKICAgICAgICAgICAgIGlmICghZW50cnkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IElERU5UOwpAQCAtOTE2LDcgKzkxNiw3IEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlk
ZW50aWZpZXI+IEoKICAgICAgICAgQVNTRVJUKHNob3VsZENyZWF0ZUlkZW50aWZpZXIpOwogICAg
ICAgICAvLyBLZXl3b3JkcyBtdXN0IG5vdCBiZSByZWNvZ25pemVkIGlmIHRoZXJlIHdhcyBhbiBc
dVhYWFggaW4gdGhlIGlkZW50aWZpZXIuCiAgICAgICAgIGlmIChyZW1haW5pbmcgPCBtYXhUb2tl
bkxlbmd0aCkgewotICAgICAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IG1fZ2xvYmFs
RGF0YS0+a2V5d29yZHMtPmdldEtleXdvcmQoKmlkZW50KTsKKyAgICAgICAgICAgIGNvbnN0IEhh
c2hFbnRyeSogZW50cnkgPSBtX3ZtLT5rZXl3b3Jkcy0+Z2V0S2V5d29yZCgqaWRlbnQpOwogICAg
ICAgICAgICAgQVNTRVJUKChyZW1haW5pbmcgPCBtYXhUb2tlbkxlbmd0aCkgfHwgIWVudHJ5KTsK
ICAgICAgICAgICAgIGlmICghZW50cnkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIElERU5UOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuaAkocmV2aXNpb24gMTQ4NjU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSwxMiArMzksMTIgQEAgY2xhc3MgS2V5d29yZHMgewogcHVibGljOgogICAgIGJvb2wgaXNL
ZXl3b3JkKGNvbnN0IElkZW50aWZpZXImIGlkZW50KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fa2V5d29yZFRhYmxlLmVudHJ5KG1fZ2xvYmFsRGF0YSwgaWRlbnQpOworICAgICAgICBy
ZXR1cm4gbV9rZXl3b3JkVGFibGUuZW50cnkobV92bSwgaWRlbnQpOwogICAgIH0KICAgICAKICAg
ICBjb25zdCBIYXNoRW50cnkqIGdldEtleXdvcmQoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9rZXl3b3JkVGFibGUuZW50cnkobV9nbG9iYWxE
YXRhLCBpZGVudCk7CisgICAgICAgIHJldHVybiBtX2tleXdvcmRUYWJsZS5lbnRyeShtX3ZtLCBp
ZGVudCk7CiAgICAgfQogICAgIAogICAgIH5LZXl3b3JkcygpCkBAIC01MywxMSArNTMsMTEgQEAg
cHVibGljOgogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIEpTR2xvYmFs
RGF0YTsKKyAgICBmcmllbmQgY2xhc3MgVk07CiAgICAgCi0gICAgS2V5d29yZHMoSlNHbG9iYWxE
YXRhKik7CisgICAgS2V5d29yZHMoVk0qKTsKICAgICAKLSAgICBKU0dsb2JhbERhdGEqIG1fZ2xv
YmFsRGF0YTsKKyAgICBWTSogbV92bTsKICAgICBjb25zdCBIYXNoVGFibGUgbV9rZXl3b3JkVGFi
bGU7CiB9OwogCkBAIC03Myw3ICs3Myw3IEBAIGNsYXNzIExleGVyIHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIAogcHVibGljOgotICAgIExleGVyKEpTR2xvYmFsRGF0YSopOworICAg
IExleGVyKFZNKik7CiAgICAgfkxleGVyKCk7CiAKICAgICAvLyBDaGFyYWN0ZXIgbWFuaXB1bGF0
aW9uIGZ1bmN0aW9ucy4KQEAgLTE5MCw3ICsxOTAsNyBAQCBwcml2YXRlOgogCiAgICAgSWRlbnRp
ZmllckFyZW5hKiBtX2FyZW5hOwogCi0gICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7Cisg
ICAgVk0qIG1fdm07CiB9OwogCiB0ZW1wbGF0ZSA8PgpAQCAtMjMyLDI4ICsyMzIsMjggQEAgaW5s
aW5lIFVDaGFyIExleGVyPFQ+Ojpjb252ZXJ0VW5pY29kZShpbgogdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CiBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXIqIExleGVyPFQ+OjptYWtlSWRlbnRp
Zmllcihjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKIHsKLSAgICByZXR1
cm4gJm1fYXJlbmEtPm1ha2VJZGVudGlmaWVyKG1fZ2xvYmFsRGF0YSwgY2hhcmFjdGVycywgbGVu
Z3RoKTsKKyAgICByZXR1cm4gJm1fYXJlbmEtPm1ha2VJZGVudGlmaWVyKG1fdm0sIGNoYXJhY3Rl
cnMsIGxlbmd0aCk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogQUxXQVlTX0lOTElORSBj
b25zdCBJZGVudGlmaWVyKiBMZXhlcjxUPjo6bWFrZUlkZW50aWZpZXIoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuICZtX2FyZW5hLT5tYWtlSWRl
bnRpZmllcihtX2dsb2JhbERhdGEsIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgcmV0dXJuICZt
X2FyZW5hLT5tYWtlSWRlbnRpZmllcihtX3ZtLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwogfQogCiB0
ZW1wbGF0ZSA8PgogQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyKiBMZXhlcjxMQ2hhcj46
Om1ha2VSaWdodFNpemVkSWRlbnRpZmllcihjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90
IGxlbmd0aCwgVUNoYXIpCiB7Ci0gICAgcmV0dXJuICZtX2FyZW5hLT5tYWtlSWRlbnRpZmllckxD
aGFyRnJvbVVDaGFyKG1fZ2xvYmFsRGF0YSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICByZXR1
cm4gJm1fYXJlbmEtPm1ha2VJZGVudGlmaWVyTENoYXJGcm9tVUNoYXIobV92bSwgY2hhcmFjdGVy
cywgbGVuZ3RoKTsKIH0KIAogdGVtcGxhdGUgPD4KIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRp
ZmllciogTGV4ZXI8VUNoYXI+OjptYWtlUmlnaHRTaXplZElkZW50aWZpZXIoY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVDaGFyIG9yQWxsQ2hhcnMpCiB7CiAgICAgaWYg
KCEob3JBbGxDaGFycyAmIH4weGZmKSkKLSAgICAgICAgcmV0dXJuICZtX2FyZW5hLT5tYWtlSWRl
bnRpZmllckxDaGFyRnJvbVVDaGFyKG1fZ2xvYmFsRGF0YSwgY2hhcmFjdGVycywgbGVuZ3RoKTsK
KyAgICAgICAgcmV0dXJuICZtX2FyZW5hLT5tYWtlSWRlbnRpZmllckxDaGFyRnJvbVVDaGFyKG1f
dm0sIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAKLSAgICByZXR1cm4gJm1fYXJlbmEtPm1ha2VJZGVu
dGlmaWVyKG1fZ2xvYmFsRGF0YSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICByZXR1cm4gJm1f
YXJlbmEtPm1ha2VJZGVudGlmaWVyKG1fdm0sIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiB9CiAKIHRl
bXBsYXRlIDw+CkBAIC0yNzMsMTkgKzI3MywxOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI8
VUNoYXI+OjpzZXRDb2RlCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIEFMV0FZU19JTkxJTkUgY29u
c3QgSWRlbnRpZmllciogTGV4ZXI8VD46Om1ha2VJZGVudGlmaWVyTENoYXJGcm9tVUNoYXIoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuICZtX2Fy
ZW5hLT5tYWtlSWRlbnRpZmllckxDaGFyRnJvbVVDaGFyKG1fZ2xvYmFsRGF0YSwgY2hhcmFjdGVy
cywgbGVuZ3RoKTsKKyAgICByZXR1cm4gJm1fYXJlbmEtPm1ha2VJZGVudGlmaWVyTENoYXJGcm9t
VUNoYXIobV92bSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CiBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXIqIExleGVyPFQ+OjptYWtlTENoYXJJ
ZGVudGlmaWVyKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogewotICAg
IHJldHVybiAmbV9hcmVuYS0+bWFrZUlkZW50aWZpZXIobV9nbG9iYWxEYXRhLCBjaGFyYWN0ZXJz
LCBsZW5ndGgpOworICAgIHJldHVybiAmbV9hcmVuYS0+bWFrZUlkZW50aWZpZXIobV92bSwgY2hh
cmFjdGVycywgbGVuZ3RoKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBBTFdBWVNfSU5M
SU5FIGNvbnN0IElkZW50aWZpZXIqIExleGVyPFQ+OjptYWtlTENoYXJJZGVudGlmaWVyKGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogewotICAgIHJldHVybiAmbV9hcmVu
YS0+bWFrZUlkZW50aWZpZXJMQ2hhckZyb21VQ2hhcihtX2dsb2JhbERhdGEsIGNoYXJhY3RlcnMs
IGxlbmd0aCk7CisgICAgcmV0dXJuICZtX2FyZW5hLT5tYWtlSWRlbnRpZmllckxDaGFyRnJvbVVD
aGFyKG1fdm0sIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0
b3JzLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
Tm9kZUNvbnN0cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxOSArMjcsMTkgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLSAgICBpbmxpbmUgdm9pZCogUGFyc2VyQXJlbmFGcmVlYWJsZTo6
b3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCisgICAg
aW5saW5lIHZvaWQqIFBhcnNlckFyZW5hRnJlZWFibGU6Om9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6
ZSwgVk0qIHZtKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPnBhcnNlckFyZW5h
LT5hbGxvY2F0ZUZyZWVhYmxlKHNpemUpOworICAgICAgICByZXR1cm4gdm0tPnBhcnNlckFyZW5h
LT5hbGxvY2F0ZUZyZWVhYmxlKHNpemUpOwogICAgIH0KIAotICAgIGlubGluZSB2b2lkKiBQYXJz
ZXJBcmVuYURlbGV0YWJsZTo6b3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEpCisgICAgaW5saW5lIHZvaWQqIFBhcnNlckFyZW5hRGVsZXRhYmxlOjpvcGVy
YXRvciBuZXcoc2l6ZV90IHNpemUsIFZNKiB2bSkKICAgICB7Ci0gICAgICAgIHJldHVybiBnbG9i
YWxEYXRhLT5wYXJzZXJBcmVuYS0+YWxsb2NhdGVEZWxldGFibGUoc2l6ZSk7CisgICAgICAgIHJl
dHVybiB2bS0+cGFyc2VyQXJlbmEtPmFsbG9jYXRlRGVsZXRhYmxlKHNpemUpOwogICAgIH0KIAot
ICAgIGlubGluZSBQYXJzZXJBcmVuYVJlZkNvdW50ZWQ6OlBhcnNlckFyZW5hUmVmQ291bnRlZChK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCisgICAgaW5saW5lIFBhcnNlckFyZW5hUmVmQ291bnRl
ZDo6UGFyc2VyQXJlbmFSZWZDb3VudGVkKFZNKiB2bSkKICAgICB7Ci0gICAgICAgIGdsb2JhbERh
dGEtPnBhcnNlckFyZW5hLT5kZXJlZldpdGhBcmVuYShhZG9wdFJlZih0aGlzKSk7CisgICAgICAg
IHZtLT5wYXJzZXJBcmVuYS0+ZGVyZWZXaXRoQXJlbmEoYWRvcHRSZWYodGhpcykpOwogICAgIH0K
IAogICAgIGlubGluZSBOb2RlOjpOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24p
CkBAIC0xNDEsMTUgKzE0MSwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgfQogCi0g
ICAgaW5saW5lIFByb3BlcnR5Tm9kZTo6UHJvcGVydHlOb2RlKEpTR2xvYmFsRGF0YSosIGNvbnN0
IElkZW50aWZpZXImIG5hbWUsIEV4cHJlc3Npb25Ob2RlKiBhc3NpZ24sIFR5cGUgdHlwZSkKKyAg
ICBpbmxpbmUgUHJvcGVydHlOb2RlOjpQcm9wZXJ0eU5vZGUoVk0qLCBjb25zdCBJZGVudGlmaWVy
JiBuYW1lLCBFeHByZXNzaW9uTm9kZSogYXNzaWduLCBUeXBlIHR5cGUpCiAgICAgICAgIDogbV9u
YW1lKG5hbWUpCiAgICAgICAgICwgbV9hc3NpZ24oYXNzaWduKQogICAgICAgICAsIG1fdHlwZSh0
eXBlKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgUHJvcGVydHlOb2RlOjpQcm9wZXJ0eU5v
ZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBkb3VibGUgbmFtZSwgRXhwcmVzc2lvbk5vZGUq
IGFzc2lnbiwgVHlwZSB0eXBlKQotICAgICAgICA6IG1fbmFtZShnbG9iYWxEYXRhLT5wYXJzZXJB
cmVuYS0+aWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVudGlmaWVyKGdsb2JhbERhdGEs
IG5hbWUpKQorICAgIGlubGluZSBQcm9wZXJ0eU5vZGU6OlByb3BlcnR5Tm9kZShWTSogdm0sIGRv
dWJsZSBuYW1lLCBFeHByZXNzaW9uTm9kZSogYXNzaWduLCBUeXBlIHR5cGUpCisgICAgICAgIDog
bV9uYW1lKHZtLT5wYXJzZXJBcmVuYS0+aWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVu
dGlmaWVyKHZtLCBuYW1lKSkKICAgICAgICAgLCBtX2Fzc2lnbihhc3NpZ24pCiAgICAgICAgICwg
bV90eXBlKHR5cGUpCiAgICAgewpAQCAtNjY4LDkgKzY2OCw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBBU1NFUlQoc3RhdGVtZW50KTsKICAgICB9CiAKLSAgICBpbmxpbmUgQ29udGludWVO
b2RlOjpDb250aW51ZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uKQorICAgIGlubGluZSBDb250aW51ZU5vZGU6OkNvbnRpbnVlTm9k
ZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCiAgICAgICAgIDogU3Rh
dGVtZW50Tm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBtX2lkZW50KGdsb2JhbERhdGEtPnByb3Bl
cnR5TmFtZXMtPm51bGxJZGVudGlmaWVyKQorICAgICAgICAsIG1faWRlbnQodm0tPnByb3BlcnR5
TmFtZXMtPm51bGxJZGVudGlmaWVyKQogICAgIHsKICAgICB9CiAKQEAgLTY4MCw5ICs2ODAsOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgfQogICAgIAotICAgIGlubGluZSBCcmVha05v
ZGU6OkJyZWFrTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgbG9jYXRpb24pCisgICAgaW5saW5lIEJyZWFrTm9kZTo6QnJlYWtOb2RlKFZNKiB2bSwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikKICAgICAgICAgOiBTdGF0ZW1lbnROb2Rl
KGxvY2F0aW9uKQotICAgICAgICAsIG1faWRlbnQoZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+
bnVsbElkZW50aWZpZXIpCisgICAgICAgICwgbV9pZGVudCh2bS0+cHJvcGVydHlOYW1lcy0+bnVs
bElkZW50aWZpZXIpCiAgICAgewogICAgIH0KIApAQCAtODEyLDE1ICs4MTIsMTUgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBGb3JJbk5vZGU6OkZvckluTm9k
ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBFeHByZXNzaW9uTm9kZSogaW4sIEV4cHJlc3Np
b25Ob2RlKiBleHByLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQsIGludCBkaXZvdCwgaW50IHN0
YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0KQorICAgIGlubGluZSBGb3JJbk5vZGU6OkZvckluTm9k
ZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50LCBFeHByZXNzaW9uTm9kZSogaW4sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBTdGF0
ZW1lbnROb2RlKiBzdGF0ZW1lbnQsIGludCBkaXZvdCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5k
T2Zmc2V0KQogICAgICAgICA6IFN0YXRlbWVudE5vZGUobG9jYXRpb24pCiAgICAgICAgICwgbV9p
bml0KDApCi0gICAgICAgICwgbV9sZXhwcihuZXcgKGdsb2JhbERhdGEpIFJlc29sdmVOb2RlKGxv
Y2F0aW9uLCBpZGVudCwgZGl2b3QgLSBzdGFydE9mZnNldCkpCisgICAgICAgICwgbV9sZXhwcihu
ZXcgKHZtKSBSZXNvbHZlTm9kZShsb2NhdGlvbiwgaWRlbnQsIGRpdm90IC0gc3RhcnRPZmZzZXQp
KQogICAgICAgICAsIG1fZXhwcihleHByKQogICAgICAgICAsIG1fc3RhdGVtZW50KHN0YXRlbWVu
dCkKICAgICB7CiAgICAgICAgIGlmIChpbikgewotICAgICAgICAgICAgQXNzaWduUmVzb2x2ZU5v
ZGUqIG5vZGUgPSBuZXcgKGdsb2JhbERhdGEpIEFzc2lnblJlc29sdmVOb2RlKGxvY2F0aW9uLCBp
ZGVudCwgaW4pOworICAgICAgICAgICAgQXNzaWduUmVzb2x2ZU5vZGUqIG5vZGUgPSBuZXcgKHZt
KSBBc3NpZ25SZXNvbHZlTm9kZShsb2NhdGlvbiwgaWRlbnQsIGluKTsKICAgICAgICAgICAgIG5v
ZGUtPnNldEV4Y2VwdGlvblNvdXJjZUNvZGUoZGl2b3QsIGRpdm90IC0gc3RhcnRPZmZzZXQsIGVu
ZE9mZnNldCAtIGRpdm90KTsKICAgICAgICAgICAgIG1faW5pdCA9IG5vZGU7CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCShyZXZpc2lvbiAxNDg2
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzYsOSArNzYsOSBAQCBTdGF0ZW1lbnROb2RlKiBTb3VyY2VFbGVtZW50czo6c2lu
Z2xlU3RhCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTY29wZU5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotU2NvcGVOb2RlOjpTY29wZU5vZGUoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24s
IGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIGJvb2wgaW5TdHJpY3RDb250ZXh0
KQorU2NvcGVOb2RlOjpTY29wZU5vZGUoVk0qIHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0
YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIGJvb2wgaW5T
dHJpY3RDb250ZXh0KQogICAgIDogU3RhdGVtZW50Tm9kZShlbmRMb2NhdGlvbikKLSAgICAsIFBh
cnNlckFyZW5hUmVmQ291bnRlZChnbG9iYWxEYXRhKQorICAgICwgUGFyc2VyQXJlbmFSZWZDb3Vu
dGVkKHZtKQogICAgICwgbV9zdGFydExpbmVOdW1iZXIoc3RhcnRMb2NhdGlvbi5saW5lKQogICAg
ICwgbV9zdGFydENoYXJQb3NpdGlvbihzdGFydExvY2F0aW9uLmNoYXJQb3NpdGlvbikKICAgICAs
IG1fZmVhdHVyZXMoaW5TdHJpY3RDb250ZXh0ID8gU3RyaWN0TW9kZUZlYXR1cmUgOiBOb0ZlYXR1
cmVzKQpAQCAtODcsOSArODcsOSBAQCBTY29wZU5vZGU6OlNjb3BlTm9kZShKU0dsb2JhbERhdGEq
IGdsb2JhCiB7CiB9CiAKLVNjb3BlTm9kZTo6U2NvcGVOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGVuZExvY2F0aW9uLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFNvdXJjZUVs
ZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5j
U3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBDb2RlRmVhdHVyZXMgZmVh
dHVyZXMsIGludCBudW1Db25zdGFudHMpCitTY29wZU5vZGU6OlNjb3BlTm9kZShWTSogdm0sIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBlbmRMb2NhdGlvbiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBTb3VyY2VFbGVtZW50cyog
Y2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJ
ZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBp
bnQgbnVtQ29uc3RhbnRzKQogICAgIDogU3RhdGVtZW50Tm9kZShlbmRMb2NhdGlvbikKLSAgICAs
IFBhcnNlckFyZW5hUmVmQ291bnRlZChnbG9iYWxEYXRhKQorICAgICwgUGFyc2VyQXJlbmFSZWZD
b3VudGVkKHZtKQogICAgICwgbV9zdGFydExpbmVOdW1iZXIoc3RhcnRMb2NhdGlvbi5saW5lKQog
ICAgICwgbV9zdGFydENoYXJQb3NpdGlvbihzdGFydExvY2F0aW9uLmNoYXJQb3NpdGlvbikKICAg
ICAsIG1fZmVhdHVyZXMoZmVhdHVyZXMpCkBAIC05Nyw3ICs5Nyw3IEBAIFNjb3BlTm9kZTo6U2Nv
cGVOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmEKICAgICAsIG1fbnVtQ29uc3RhbnRzKG51bUNvbnN0
YW50cykKICAgICAsIG1fc3RhdGVtZW50cyhjaGlsZHJlbikKIHsKLSAgICBtX2FyZW5hLnN3YXAo
Kmdsb2JhbERhdGEtPnBhcnNlckFyZW5hKTsKKyAgICBtX2FyZW5hLnN3YXAoKnZtLT5wYXJzZXJB
cmVuYSk7CiAgICAgaWYgKHZhclN0YWNrKQogICAgICAgICBtX3ZhclN0YWNrLnN3YXAoKnZhclN0
YWNrKTsKICAgICBpZiAoZnVuY1N0YWNrKQpAQCAtMTEyLDE0ICsxMTIsMTQgQEAgU3RhdGVtZW50
Tm9kZSogU2NvcGVOb2RlOjpzaW5nbGVTdGF0ZW1lbgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gUHJvZ3JhbU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
aW5saW5lIFByb2dyYW1Ob2RlOjpQcm9ncmFtTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBlbmRMb2NhdGlvbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFy
U3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRW
YXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVz
LCBpbnQgbnVtQ29uc3RhbnRzKQotICAgIDogU2NvcGVOb2RlKGdsb2JhbERhdGEsIHN0YXJ0TG9j
YXRpb24sIGVuZExvY2F0aW9uLCBzb3VyY2UsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNr
LCBjYXB0dXJlZFZhcmlhYmxlcywgZmVhdHVyZXMsIG51bUNvbnN0YW50cykKK2lubGluZSBQcm9n
cmFtTm9kZTo6UHJvZ3JhbU5vZGUoVk0qIHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0
TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIFNvdXJjZUVsZW1l
bnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3Rh
Y2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKKyAgICA6IFNj
b3BlTm9kZSh2bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNvdXJjZSwgY2hpbGRyZW4s
IHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBmZWF0dXJlcywgbnVtQ29u
c3RhbnRzKQogewogfQogCi1QYXNzUmVmUHRyPFByb2dyYW1Ob2RlPiBQcm9ncmFtTm9kZTo6Y3Jl
YXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFy
dExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCBTb3VyY2VFbGVt
ZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0
YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYg
c291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCitQYXNzUmVm
UHRyPFByb2dyYW1Ob2RlPiBQcm9ncmFtTm9kZTo6Y3JlYXRlKFZNKiB2bSwgY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0
aW9uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rp
b25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25z
dGFudHMpCiB7Ci0gICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBub2RlID0gbmV3IFByb2dyYW1Ob2Rl
KGdsb2JhbERhdGEsIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBjaGlsZHJlbiwgdmFyU3Rh
Y2ssIGZ1bmNTdGFjaywgIGNhcHR1cmVkVmFyaWFibGVzLCBzb3VyY2UsIGZlYXR1cmVzLCBudW1D
b25zdGFudHMpOworICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gbm9kZSA9IG5ldyBQcm9ncmFtTm9k
ZSh2bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVu
Y1N0YWNrLCAgY2FwdHVyZWRWYXJpYWJsZXMsIHNvdXJjZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50
cyk7CiAKICAgICBBU1NFUlQobm9kZS0+bV9hcmVuYS5sYXN0KCkgPT0gbm9kZSk7CiAgICAgbm9k
ZS0+bV9hcmVuYS5yZW1vdmVMYXN0KCk7CkBAIC0xMzAsMTQgKzEzMCwxNCBAQCBQYXNzUmVmUHRy
PFByb2dyYW1Ob2RlPiBQcm9ncmFtTm9kZTo6Y3JlCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBFdmFsTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1pbmxp
bmUgRXZhbE5vZGU6OkV2YWxOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExv
Y2F0aW9uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVu
Y3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1D
b25zdGFudHMpCi0gICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgc3RhcnRMb2NhdGlvbiwgZW5k
TG9jYXRpb24sIHNvdXJjZSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVk
VmFyaWFibGVzLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKQoraW5saW5lIEV2YWxOb2RlOjpFdmFs
Tm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBW
YXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNl
dCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1
cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQorICAgIDogU2NvcGVOb2RlKHZtLCBzdGFy
dExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNT
dGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpCiB7CiB9CiAK
LVBhc3NSZWZQdHI8RXZhbE5vZGU+IEV2YWxOb2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3Rh
Y2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNh
cHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBm
ZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKK1Bhc3NSZWZQdHI8RXZhbE5vZGU+IEV2YWxOb2Rl
OjpjcmVhdGUoVk0qIHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJl
biwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZp
ZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVG
ZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKIHsKLSAgICBSZWZQdHI8RXZhbE5v
ZGU+IG5vZGUgPSBuZXcgRXZhbE5vZGUoZ2xvYmFsRGF0YSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9j
YXRpb24sIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywg
c291cmNlLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsKKyAgICBSZWZQdHI8RXZhbE5vZGU+IG5v
ZGUgPSBuZXcgRXZhbE5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBjaGlsZHJl
biwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIHNvdXJjZSwgZmVhdHVy
ZXMsIG51bUNvbnN0YW50cyk7CiAKICAgICBBU1NFUlQobm9kZS0+bV9hcmVuYS5sYXN0KCkgPT0g
bm9kZSk7CiAgICAgbm9kZS0+bV9hcmVuYS5yZW1vdmVMYXN0KCk7CkBAIC0xNzMsMTMgKzE3Mywx
MyBAQCBGdW5jdGlvblBhcmFtZXRlcnM6On5GdW5jdGlvblBhcmFtZXRlcnMoCiAgICAgICAgIGlk
ZW50aWZpZXJzKClbaV0ufklkZW50aWZpZXIoKTsKIH0KIAotaW5saW5lIEZ1bmN0aW9uQm9keU5v
ZGU6OkZ1bmN0aW9uQm9keU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9j
YXRpb24sIGJvb2wgaW5TdHJpY3RDb250ZXh0KQotICAgIDogU2NvcGVOb2RlKGdsb2JhbERhdGEs
IHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBpblN0cmljdENvbnRleHQpCitpbmxpbmUgRnVu
Y3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwg
Ym9vbCBpblN0cmljdENvbnRleHQpCisgICAgOiBTY29wZU5vZGUodm0sIHN0YXJ0TG9jYXRpb24s
IGVuZExvY2F0aW9uLCBpblN0cmljdENvbnRleHQpCiB7CiB9CiAKLWlubGluZSBGdW5jdGlvbkJv
ZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVu
ZExvY2F0aW9uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywg
RnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxl
cywgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBp
bnQgbnVtQ29uc3RhbnRzKQotICAgIDogU2NvcGVOb2RlKGdsb2JhbERhdGEsIHN0YXJ0TG9jYXRp
b24sIGVuZExvY2F0aW9uLCBzb3VyY2VDb2RlLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFj
aywgY2FwdHVyZWRWYXJpYWJsZXMsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpCitpbmxpbmUgRnVu
Y3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwg
U291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3Rh
Y2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZUNvZGUsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0
YW50cykKKyAgICA6IFNjb3BlTm9kZSh2bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNv
dXJjZUNvZGUsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxl
cywgZmVhdHVyZXMsIG51bUNvbnN0YW50cykKIHsKIH0KIApAQCAtMTk3LDE0ICsxOTcsMTQgQEAg
dm9pZCBGdW5jdGlvbkJvZHlOb2RlOjpmaW5pc2hQYXJzaW5nKFBhcwogICAgIG1fZnVuY3Rpb25O
YW1lSXNJblNjb3BlVG9nZ2xlID0gZnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xlOwogfQogCi1G
dW5jdGlvbkJvZHlOb2RlKiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIGJvb2wgaW5TdHJpY3RDb250ZXh0KQorRnVuY3Rp
b25Cb2R5Tm9kZSogRnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKFZNKiB2bSwgY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0
aW9uLCBib29sIGluU3RyaWN0Q29udGV4dCkKIHsKLSAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQm9k
eU5vZGUoZ2xvYmFsRGF0YSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGluU3RyaWN0Q29u
dGV4dCk7CisgICAgcmV0dXJuIG5ldyBGdW5jdGlvbkJvZHlOb2RlKHZtLCBzdGFydExvY2F0aW9u
LCBlbmRMb2NhdGlvbiwgaW5TdHJpY3RDb250ZXh0KTsKIH0KIAotUGFzc1JlZlB0cjxGdW5jdGlv
bkJvZHlOb2RlPiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgZW5kTG9jYXRpb24sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sq
IHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1
cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBDb2RlRmVhdHVyZXMg
ZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCitQYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+
IEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
c3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgU291cmNl
RWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1
bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZUNvZGUsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykK
IHsKLSAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gbm9kZSA9IG5ldyBGdW5jdGlvbkJvZHlO
b2RlKGdsb2JhbERhdGEsIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBjaGlsZHJlbiwgdmFy
U3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIHNvdXJjZUNvZGUsIGZlYXR1cmVz
LCBudW1Db25zdGFudHMpOworICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBub2RlID0gbmV3
IEZ1bmN0aW9uQm9keU5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBjaGlsZHJl
biwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIHNvdXJjZUNvZGUsIGZl
YXR1cmVzLCBudW1Db25zdGFudHMpOwogCiAgICAgQVNTRVJUKG5vZGUtPm1fYXJlbmEubGFzdCgp
ID09IG5vZGUpOwogICAgIG5vZGUtPm1fYXJlbmEucmVtb3ZlTGFzdCgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAgLy8gUGFyc2VyQXJlbmFG
cmVlYWJsZSBvYmplY3RzIGFyZSBhcmUgZnJlZWQgd2hlbiB0aGUgYXJlbmEgaXMgZGVsZXRlZC4K
ICAgICAgICAgLy8gRGVzdHJ1Y3RvcnMgYXJlIG5vdCBjYWxsZWQuIENsaWVudHMgbXVzdCBub3Qg
Y2FsbCBkZWxldGUgb24gc3VjaCBvYmplY3RzLgotICAgICAgICB2b2lkKiBvcGVyYXRvciBuZXco
c2l6ZV90LCBKU0dsb2JhbERhdGEqKTsKKyAgICAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVf
dCwgVk0qKTsKICAgICB9OwogCiAgICAgY2xhc3MgUGFyc2VyQXJlbmFEZWxldGFibGUgewpAQCAt
MTAzLDcgKzEwMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIC8vIFBhcnNlckFyZW5h
RGVsZXRhYmxlIG9iamVjdHMgYXJlIGRlbGV0ZWQgd2hlbiB0aGUgYXJlbmEgaXMgZGVsZXRlZC4K
ICAgICAgICAgLy8gQ2xpZW50cyBtdXN0IG5vdCBjYWxsIGRlbGV0ZSBkaXJlY3RseSBvbiBzdWNo
IG9iamVjdHMuCi0gICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIEpTR2xvYmFsRGF0
YSopOworICAgICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCBWTSopOwogICAgIH07CiAK
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KQEAgLTExMyw3ICsxMTMsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIGNsYXNzIFBhcnNlckFyZW5hUmVmQ291bnRlZCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFBhcnNlckFyZW5hUmVmQ291bnRlZD4gewogICAgIHByb3RlY3RlZDoKLSAgICAgICAgUGFy
c2VyQXJlbmFSZWZDb3VudGVkKEpTR2xvYmFsRGF0YSopOworICAgICAgICBQYXJzZXJBcmVuYVJl
ZkNvdW50ZWQoVk0qKTsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+UGFyc2VyQXJl
bmFSZWZDb3VudGVkKCkKQEAgLTM5NSw3ICszOTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgQXJyYXlOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEVsZW1lbnROb2RlKik7CiAgICAg
ICAgIEFycmF5Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQgZWxpc2lvbiwgRWxlbWVu
dE5vZGUqKTsKIAotICAgICAgICBBcmd1bWVudExpc3ROb2RlKiB0b0FyZ3VtZW50TGlzdChKU0ds
b2JhbERhdGEqLCBpbnQsIGludCkgY29uc3Q7CisgICAgICAgIEFyZ3VtZW50TGlzdE5vZGUqIHRv
QXJndW1lbnRMaXN0KFZNKiwgaW50LCBpbnQpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IDApOwpAQCAtNDExLDggKzQxMSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IHB1YmxpYzoKICAgICAgICAgZW51bSBUeXBlIHsgQ29uc3RhbnQgPSAxLCBHZXR0ZXIgPSAyLCBT
ZXR0ZXIgPSA0IH07CiAKLSAgICAgICAgUHJvcGVydHlOb2RlKEpTR2xvYmFsRGF0YSosIGNvbnN0
IElkZW50aWZpZXImLCBFeHByZXNzaW9uTm9kZSosIFR5cGUpOwotICAgICAgICBQcm9wZXJ0eU5v
ZGUoSlNHbG9iYWxEYXRhKiwgZG91YmxlLCBFeHByZXNzaW9uTm9kZSosIFR5cGUpOworICAgICAg
ICBQcm9wZXJ0eU5vZGUoVk0qLCBjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvbk5vZGUqLCBU
eXBlKTsKKyAgICAgICAgUHJvcGVydHlOb2RlKFZNKiwgZG91YmxlLCBFeHByZXNzaW9uTm9kZSos
IFR5cGUpOwogCiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUoKSBjb25zdCB7IHJldHVy
biBtX25hbWU7IH0KICAgICAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
CkBAIC0xMTgzLDcgKzExODMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBGb3JJbk5v
ZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRh
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIEZvckluTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBFeHByZXNzaW9uTm9kZSosIEV4cHJlc3Npb25Ob2RlKiwgU3RhdGVtZW50Tm9kZSopOwotICAg
ICAgICBGb3JJbk5vZGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29u
c3QgSWRlbnRpZmllciYsIEV4cHJlc3Npb25Ob2RlKiwgRXhwcmVzc2lvbk5vZGUqLCBTdGF0ZW1l
bnROb2RlKiwgaW50IGRpdm90LCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQpOworICAg
ICAgICBGb3JJbk5vZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlm
aWVyJiwgRXhwcmVzc2lvbk5vZGUqLCBFeHByZXNzaW9uTm9kZSosIFN0YXRlbWVudE5vZGUqLCBp
bnQgZGl2b3QsIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCk7CiAKICAgICBwcml2YXRl
OgogICAgICAgICB2aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKTsKQEAgLTExOTYsNyArMTE5Niw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgY2xhc3MgQ29udGludWVOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUsIHB1YmxpYyBU
aHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBDb250aW51ZU5v
ZGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJik7CisgICAgICAgIENvbnRp
bnVlTm9kZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYpOwogICAgICAgICBDb250aW51ZU5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYpOwogICAgICAgICAK
ICAgICBwcml2YXRlOgpAQCAtMTIwNyw3ICsxMjA3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICBjbGFzcyBCcmVha05vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSwgcHVibGljIFRocm93YWJs
ZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEJyZWFrTm9kZShKU0dsb2Jh
bERhdGEqLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mKTsKKyAgICAgICAgQnJlYWtOb2RlKFZNKiwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJik7CiAgICAgICAgIEJyZWFrTm9kZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgICAgIAogICAgIHByaXZhdGU6CkBA
IC0xMjk1LDggKzEyOTUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdHlwZWRlZiBEZWNs
YXJhdGlvblN0YWNrczo6VmFyU3RhY2sgVmFyU3RhY2s7CiAgICAgICAgIHR5cGVkZWYgRGVjbGFy
YXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2sgRnVuY3Rpb25TdGFjazsKIAotICAgICAgICBTY29w
ZU5vZGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBlbmQsIGJvb2wgaW5TdHJpY3RDb250ZXh0KTsKLSAgICAgICAgU2Nv
cGVOb2RlKEpTR2xvYmFsRGF0YSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCBjb25zdCBTb3VyY2VDb2RlJiwgU291cmNlRWxlbWVudHMq
LCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgQ29kZUZlYXR1cmVz
LCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgU2NvcGVOb2RlKFZNKiwgY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIGJvb2wgaW5TdHJp
Y3RDb250ZXh0KTsKKyAgICAgICAgU2NvcGVOb2RlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIGNvbnN0IFNvdXJjZUNvZGUmLCBT
b3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQm
LCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOwogCiAgICAgICAgIHVzaW5nIFBhcnNl
ckFyZW5hUmVmQ291bnRlZDo6b3BlcmF0b3IgbmV3OwogCkBAIC0xMzY0LDEyICsxMzY0LDEyIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFByb2dyYW1Ob2RlIDogcHVibGljIFNjb3BlTm9k
ZSB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0Z1bmN0aW9uTm9k
ZSA9IGZhbHNlOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQcm9ncmFtTm9kZT4gY3JlYXRl
KEpTR2xvYmFsRGF0YSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgZW5kLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFj
ayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQg
bnVtQ29uc3RhbnRzKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IGNy
ZWF0ZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgZW5kLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElk
ZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29u
c3RhbnRzKTsKIAogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzY29wZUlzRnVuY3Rpb24gPSBm
YWxzZTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFByb2dyYW1Ob2RlKEpTR2xvYmFsRGF0YSos
IGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5k
LCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJT
ZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsK
KyAgICAgICAgUHJvZ3JhbU5vZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1
bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0
dXJlcywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CiAgICAgfTsKQEAgLTEz
NzcsMTIgKzEzNzcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRXZhbE5vZGUgOiBw
dWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzRnVuY3Rpb25Ob2RlID0gZmFsc2U7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV2YWxO
b2RlPiBjcmVhdGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBG
dW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVh
dHVyZXMsIGludCBudW1Db25zdGFudHMpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFdmFs
Tm9kZT4gY3JlYXRlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBlbmQsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0
YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGlu
dCBudW1Db25zdGFudHMpOwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNjb3BlSXNGdW5j
dGlvbiA9IGZhbHNlOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgRXZhbE5vZGUoSlNHbG9iYWxE
YXRhKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBlbmQsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRp
ZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFu
dHMpOworICAgICAgICBFdmFsTm9kZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQs
IGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwg
RnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZl
YXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKICAgICB9OwpAQCAt
MTQwOSw4ICsxNDA5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRnVuY3Rpb25Cb2R5
Tm9kZSA6IHB1YmxpYyBTY29wZU5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNGdW5jdGlvbk5vZGUgPSB0cnVlOwotICAgICAgICBzdGF0aWMgRnVuY3Rpb25C
b2R5Tm9kZSogY3JlYXRlKEpTR2xvYmFsRGF0YSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3Rh
cnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCBib29sIGlzU3RyaWN0TW9kZSk7Ci0gICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGNyZWF0ZShKU0dsb2JhbERh
dGEqLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGVuZCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlm
aWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50
cyk7CisgICAgICAgIHN0YXRpYyBGdW5jdGlvbkJvZHlOb2RlKiBjcmVhdGUoVk0qLCBjb25zdCBK
U1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgYm9vbCBp
c1N0cmljdE1vZGUpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGdW5jdGlvbkJvZHlOb2Rl
PiBjcmVhdGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGVuZCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sq
LCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51
bUNvbnN0YW50cyk7CiAKICAgICAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKCkg
Y29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLmdldCgpOyB9CiAgICAgICAgIHNpemVfdCBwYXJh
bWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVycy0+c2l6ZSgpOyB9CkBAIC0x
NDMzLDggKzE0MzMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgc2NvcGVJc0Z1bmN0aW9uID0gdHJ1ZTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEZ1bmN0
aW9uQm9keU5vZGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIGJvb2wgaW5TdHJpY3RDb250ZXh0KTsKLSAgICAg
ICAgRnVuY3Rpb25Cb2R5Tm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBKU1Rva2VuTG9jYXRpb24m
IHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgU291cmNlRWxlbWVudHMqLCBWYXJT
dGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYs
IENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CisgICAgICAgIEZ1bmN0aW9uQm9keU5v
ZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGVuZCwgYm9vbCBpblN0cmljdENvbnRleHQpOworICAgICAgICBGdW5jdGlvbkJvZHlOb2Rl
KFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBlbmQsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRp
ZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFu
dHMpOwogCiAgICAgICAgIElkZW50aWZpZXIgbV9pZGVudDsKICAgICAgICAgSWRlbnRpZmllciBt
X2luZmVycmVkTmFtZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5j
cHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgIkFTVEJ1
aWxkZXIuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgot
I2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiTGV4
ZXIuaCIKICNpbmNsdWRlICJOb2RlSW5mby5oIgogI2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyLmgi
CkBAIC02Miw4ICs2Miw4IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBuYW1lc3BhY2UgSlNDIHsK
IAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLVBhcnNlcjxMZXhlclR5cGU+OjpQYXJz
ZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1
bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgSlNQ
YXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MsIEpTUGFyc2VyTW9kZSBwYXJzZXJNb2RlKQotICAg
IDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCitQYXJzZXI8TGV4ZXJUeXBlPjo6UGFyc2VyKFZN
KiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFt
ZXRlcnMsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3Ru
ZXNzLCBKU1BhcnNlck1vZGUgcGFyc2VyTW9kZSkKKyAgICA6IG1fdm0odm0pCiAgICAgLCBtX3Nv
dXJjZSgmc291cmNlKQogICAgICwgbV9zdGFjayh3dGZUaHJlYWREYXRhKCkuc3RhY2soKSkKICAg
ICAsIG1faGFzU3RhY2tPdmVyZmxvdyhmYWxzZSkKQEAgLTc4LDExICs3OCwxMSBAQCBQYXJzZXI8
TGV4ZXJUeXBlPjo6UGFyc2VyKEpTR2xvYmFsRGF0YSogCiAgICAgLCBtX2xhc3RJZGVudGlmaWVy
KDApCiAgICAgLCBtX3NvdXJjZUVsZW1lbnRzKDApCiB7Ci0gICAgbV9sZXhlciA9IGFkb3B0UHRy
KG5ldyBMZXhlclR5cGUoZ2xvYmFsRGF0YSkpOwotICAgIG1fYXJlbmEgPSBtX2dsb2JhbERhdGEt
PnBhcnNlckFyZW5hLmdldCgpOworICAgIG1fbGV4ZXIgPSBhZG9wdFB0cihuZXcgTGV4ZXJUeXBl
KHZtKSk7CisgICAgbV9hcmVuYSA9IG1fdm0tPnBhcnNlckFyZW5hLmdldCgpOwogICAgIG1fbGV4
ZXItPnNldENvZGUoc291cmNlLCBtX2FyZW5hKTsKIAotICAgIG1fZnVuY3Rpb25DYWNoZSA9IGds
b2JhbERhdGEtPmFkZFNvdXJjZVByb3ZpZGVyQ2FjaGUoc291cmNlLnByb3ZpZGVyKCkpOworICAg
IG1fZnVuY3Rpb25DYWNoZSA9IHZtLT5hZGRTb3VyY2VQcm92aWRlckNhY2hlKHNvdXJjZS5wcm92
aWRlcigpKTsKICAgICBTY29wZVJlZiBzY29wZSA9IHB1c2hTY29wZSgpOwogICAgIGlmIChwYXJz
ZXJNb2RlID09IEpTUGFyc2VGdW5jdGlvbkNvZGUpCiAgICAgICAgIHNjb3BlLT5zZXRJc0Z1bmN0
aW9uKCk7CkBAIC0xMDcsNyArMTA3LDcgQEAgU3RyaW5nIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJz
ZUlubmVyKCkKIHsKICAgICBTdHJpbmcgcGFyc2VFcnJvciA9IFN0cmluZygpOwogICAgIAotICAg
IEFTVEJ1aWxkZXIgY29udGV4dChjb25zdF9jYXN0PEpTR2xvYmFsRGF0YSo+KG1fZ2xvYmFsRGF0
YSksIGNvbnN0X2Nhc3Q8U291cmNlQ29kZSo+KG1fc291cmNlKSk7CisgICAgQVNUQnVpbGRlciBj
b250ZXh0KGNvbnN0X2Nhc3Q8Vk0qPihtX3ZtKSwgY29uc3RfY2FzdDxTb3VyY2VDb2RlKj4obV9z
b3VyY2UpKTsKICAgICBpZiAobV9sZXhlci0+aXNSZXBhcnNpbmcoKSkKICAgICAgICAgbV9zdGF0
ZW1lbnREZXB0aC0tOwogICAgIFNjb3BlUmVmIHNjb3BlID0gY3VycmVudFNjb3BlKCk7CkBAIC0x
NjgsNyArMTY4LDcgQEAgdGVtcGxhdGUgPFNvdXJjZUVsZW1lbnRzTW9kZSBtb2RlLCBjbGFzcwog
ICAgICAgICBpZiAobW9kZSA9PSBDaGVja0ZvclN0cmljdE1vZGUgJiYgIXNlZW5Ob25EaXJlY3Rp
dmUpIHsKICAgICAgICAgICAgIGlmIChkaXJlY3RpdmUpIHsKICAgICAgICAgICAgICAgICAvLyAi
dXNlIHN0cmljdCIgbXVzdCBiZSB0aGUgZXhhY3QgbGl0ZXJhbCB3aXRob3V0IGVzY2FwZSBzZXF1
ZW5jZXMgb3IgbGluZSBjb250aW51YXRpb24uCi0gICAgICAgICAgICAgICAgaWYgKCFoYXNTZXRT
dHJpY3QgJiYgZGlyZWN0aXZlTGl0ZXJhbExlbmd0aCA9PSBsZW5ndGhPZlVzZVN0cmljdExpdGVy
YWwgJiYgbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT51c2VTdHJpY3RJZGVudGlmaWVyID09
ICpkaXJlY3RpdmUpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWhhc1NldFN0cmljdCAmJiBkaXJl
Y3RpdmVMaXRlcmFsTGVuZ3RoID09IGxlbmd0aE9mVXNlU3RyaWN0TGl0ZXJhbCAmJiBtX3ZtLT5w
cm9wZXJ0eU5hbWVzLT51c2VTdHJpY3RJZGVudGlmaWVyID09ICpkaXJlY3RpdmUpIHsKICAgICAg
ICAgICAgICAgICAgICAgc2V0U3RyaWN0TW9kZSgpOwogICAgICAgICAgICAgICAgICAgICBoYXNT
ZXRTdHJpY3QgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBmYWlsSWZGYWxzZShpc1ZhbGlk
U3RyaWN0TW9kZSgpKTsKQEAgLTYzMyw3ICs2MzMsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgQVNTRVJUKG1hdGNoKFRSWSkpOwogICAgIEpTVG9rZW5M
b2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwogICAgIFRyZWVTdGF0ZW1lbnQgdHJ5
QmxvY2sgPSAwOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJm1fZ2xvYmFsRGF0YS0+
cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CiAgICAgVHJlZVN0YXRl
bWVudCBjYXRjaEJsb2NrID0gMDsKICAgICBUcmVlU3RhdGVtZW50IGZpbmFsbHlCbG9jayA9IDA7
CiAgICAgaW50IGZpcnN0TGluZSA9IHRva2VuTGluZSgpOwpAQCAtODAwLDcgKzgwMCw3IEBAIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUZ1bmN0aW8KICAgICAgICAgcmV0dXJuIGNv
bnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24sIHRva2VuTG9jYXRpb24oKSwg
c3RyaWN0TW9kZSgpKTsKICAgICBEZXB0aE1hbmFnZXIgc3RhdGVtZW50RGVwdGgoJm1fc3RhdGVt
ZW50RGVwdGgpOwogICAgIG1fc3RhdGVtZW50RGVwdGggPSAwOwotICAgIHR5cGVuYW1lIFRyZWVC
dWlsZGVyOjpGdW5jdGlvbkJvZHlCdWlsZGVyIGJvZHlCdWlsZGVyKGNvbnN0X2Nhc3Q8SlNHbG9i
YWxEYXRhKj4obV9nbG9iYWxEYXRhKSwgbV9sZXhlci5nZXQoKSk7CisgICAgdHlwZW5hbWUgVHJl
ZUJ1aWxkZXI6OkZ1bmN0aW9uQm9keUJ1aWxkZXIgYm9keUJ1aWxkZXIoY29uc3RfY2FzdDxWTSo+
KG1fdm0pLCBtX2xleGVyLmdldCgpKTsKICAgICBmYWlsSWZGYWxzZShwYXJzZVNvdXJjZUVsZW1l
bnRzPENoZWNrRm9yU3RyaWN0TW9kZT4oYm9keUJ1aWxkZXIpKTsKICAgICByZXR1cm4gY29udGV4
dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwgdG9rZW5Mb2NhdGlvbigpLCBzdHJp
Y3RNb2RlKCkpOwogfQpAQCAtODU1LDggKzg1NSw4IEBAIHRlbXBsYXRlIDxGdW5jdGlvblJlcXVp
cmVtZW50cyByZXF1aXJlbWUKICAgICBib2R5ID0gcGFyc2VGdW5jdGlvbkJvZHkoY29udGV4dCk7
CiAgICAgZmFpbElmRmFsc2UoYm9keSk7CiAgICAgaWYgKGZ1bmN0aW9uU2NvcGUtPnN0cmljdE1v
ZGUoKSAmJiBuYW1lKSB7Ci0gICAgICAgIGZhaWxJZlRydWVXaXRoTmFtZUFuZE1lc3NhZ2UobV9n
bG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gKm5hbWUsICJGdW5jdGlvbiBu
YW1lIiwgbmFtZS0+aW1wbCgpLCAiaXMgbm90IHZhbGlkIGluIHN0cmljdCBtb2RlIik7Ci0gICAg
ICAgIGZhaWxJZlRydWVXaXRoTmFtZUFuZE1lc3NhZ2UobV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5h
bWVzLT5ldmFsID09ICpuYW1lLCAiRnVuY3Rpb24gbmFtZSIsIG5hbWUtPmltcGwoKSwgImlzIG5v
dCB2YWxpZCBpbiBzdHJpY3QgbW9kZSIpOworICAgICAgICBmYWlsSWZUcnVlV2l0aE5hbWVBbmRN
ZXNzYWdlKG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqbmFtZSwgIkZ1bmN0aW9u
IG5hbWUiLCBuYW1lLT5pbXBsKCksICJpcyBub3QgdmFsaWQgaW4gc3RyaWN0IG1vZGUiKTsKKyAg
ICAgICAgZmFpbElmVHJ1ZVdpdGhOYW1lQW5kTWVzc2FnZShtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5l
dmFsID09ICpuYW1lLCAiRnVuY3Rpb24gbmFtZSIsIG5hbWUtPmltcGwoKSwgImlzIG5vdCB2YWxp
ZCBpbiBzdHJpY3QgbW9kZSIpOwogICAgIH0KICAgICBjbG9zZUJyYWNlUG9zID0gbV90b2tlbi5t
X2RhdGEuaW50VmFsdWU7CiAgICAgCkBAIC0xMTQwLDggKzExNDAsOCBAQCB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVHJlZUJ1aWxkZXI+IFRyZWVFeHByCiAgICAgICAgIG1fYXNzaWdubWVudENvdW50Kys7
CiAgICAgICAgIG5leHQoVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOwogICAgICAgICBp
ZiAoc3RyaWN0TW9kZSgpICYmIG1fbGFzdElkZW50aWZpZXIgJiYgY29udGV4dC5pc1Jlc29sdmUo
bGhzKSkgewotICAgICAgICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0V2l0aE1lc3NhZ2UobV9nbG9i
YWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICptX2xhc3RJZGVudGlmaWVyLCAiJ2V2YWwn
IGNhbm5vdCBiZSBtb2RpZmllZCBpbiBzdHJpY3QgbW9kZSIpOwotICAgICAgICAgICAgZmFpbElm
VHJ1ZUlmU3RyaWN0V2l0aE1lc3NhZ2UobV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5hcmd1
bWVudHMgPT0gKm1fbGFzdElkZW50aWZpZXIsICInYXJndW1lbnRzJyBjYW5ub3QgYmUgbW9kaWZp
ZWQgaW4gc3RyaWN0IG1vZGUiKTsKKyAgICAgICAgICAgIGZhaWxJZlRydWVJZlN0cmljdFdpdGhN
ZXNzYWdlKG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKm1fbGFzdElkZW50aWZpZXIsICIn
ZXZhbCcgY2Fubm90IGJlIG1vZGlmaWVkIGluIHN0cmljdCBtb2RlIik7CisgICAgICAgICAgICBm
YWlsSWZUcnVlSWZTdHJpY3RXaXRoTWVzc2FnZShtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVu
dHMgPT0gKm1fbGFzdElkZW50aWZpZXIsICInYXJndW1lbnRzJyBjYW5ub3QgYmUgbW9kaWZpZWQg
aW4gc3RyaWN0IG1vZGUiKTsKICAgICAgICAgICAgIGRlY2xhcmVXcml0ZShtX2xhc3RJZGVudGlm
aWVyKTsKICAgICAgICAgICAgIG1fbGFzdElkZW50aWZpZXIgPSAwOwogICAgICAgICB9CkBAIC0x
MjUxLDcgKzEyNTEsNyBAQCB0ZW1wbGF0ZSA8Ym9vbCBjb21wbGV0ZSwgY2xhc3MgVHJlZUJ1aWxk
CiAgICAgICAgIHdhc0lkZW50ID0gdHJ1ZTsKICAgICBjYXNlIFNUUklORzogewogICAgICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OwotICAgICAgICBp
ZiAoY29tcGxldGUgfHwgKHdhc0lkZW50ICYmICgqaWRlbnQgPT0gbV9nbG9iYWxEYXRhLT5wcm9w
ZXJ0eU5hbWVzLT5nZXQgfHwgKmlkZW50ID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+
c2V0KSkpCisgICAgICAgIGlmIChjb21wbGV0ZSB8fCAod2FzSWRlbnQgJiYgKCppZGVudCA9PSBt
X3ZtLT5wcm9wZXJ0eU5hbWVzLT5nZXQgfHwgKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMt
PnNldCkpKQogICAgICAgICAgICAgbmV4dEV4cGVjdElkZW50aWZpZXIoTGV4ZXJGbGFnc0lnbm9y
ZVJlc2VydmVkV29yZHMpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBuZXh0RXhwZWN0SWRl
bnRpZmllcihMZXhlckZsYWdzSWdub3JlUmVzZXJ2ZWRXb3JkcyB8IFRyZWVCdWlsZGVyOjpEb250
QnVpbGRLZXl3b3Jkcyk7CkBAIC0xMjcwLDkgKzEyNzAsOSBAQCB0ZW1wbGF0ZSA8Ym9vbCBjb21w
bGV0ZSwgY2xhc3MgVHJlZUJ1aWxkCiAgICAgICAgIGludCBjbG9zZUJyYWNlUG9zID0gMDsKICAg
ICAgICAgaW50IGJvZHlTdGFydExpbmUgPSAwOwogICAgICAgICBQcm9wZXJ0eU5vZGU6OlR5cGUg
dHlwZTsKLSAgICAgICAgaWYgKCppZGVudCA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMt
PmdldCkKKyAgICAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5nZXQpCiAg
ICAgICAgICAgICB0eXBlID0gUHJvcGVydHlOb2RlOjpHZXR0ZXI7Ci0gICAgICAgIGVsc2UgaWYg
KCppZGVudCA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPnNldCkKKyAgICAgICAgZWxz
ZSBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPnNldCkKICAgICAgICAgICAgIHR5
cGUgPSBQcm9wZXJ0eU5vZGU6OlNldHRlcjsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZmFp
bCgpOwpAQCAtMTI4OSw3ICsxMjg5LDcgQEAgdGVtcGxhdGUgPGJvb2wgY29tcGxldGUsIGNsYXNz
IFRyZWVCdWlsZAogICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm88RnVuY3Rp
b25Ob1JlcXVpcmVtZW50cywgZmFsc2U+KGNvbnRleHQsIGFjY2Vzc29yTmFtZSwgcGFyYW1ldGVy
cywgYm9keSwgb3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5U3RhcnRMaW5lKSkpOwog
ICAgICAgICBpZiAoc3RyaW5nUHJvcGVydHlOYW1lKQogICAgICAgICAgICAgcmV0dXJuIGNvbnRl
eHQudGVtcGxhdGUgY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eTxjb21wbGV0ZT4obG9jYXRp
b24sIHR5cGUsIHN0cmluZ1Byb3BlcnR5TmFtZSwgcGFyYW1ldGVycywgYm9keSwgb3BlbkJyYWNl
UG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5U3RhcnRMaW5lLCBtX2xhc3RMaW5lKTsKLSAgICAgICAg
cmV0dXJuIGNvbnRleHQudGVtcGxhdGUgY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eTxjb21w
bGV0ZT4oY29uc3RfY2FzdDxKU0dsb2JhbERhdGEqPihtX2dsb2JhbERhdGEpLCBsb2NhdGlvbiwg
dHlwZSwgbnVtZXJpY1Byb3BlcnR5TmFtZSwgcGFyYW1ldGVycywgYm9keSwgb3BlbkJyYWNlUG9z
LCBjbG9zZUJyYWNlUG9zLCBib2R5U3RhcnRMaW5lLCBtX2xhc3RMaW5lKTsKKyAgICAgICAgcmV0
dXJuIGNvbnRleHQudGVtcGxhdGUgY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eTxjb21wbGV0
ZT4oY29uc3RfY2FzdDxWTSo+KG1fdm0pLCBsb2NhdGlvbiwgdHlwZSwgbnVtZXJpY1Byb3BlcnR5
TmFtZSwgcGFyYW1ldGVycywgYm9keSwgb3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5
U3RhcnRMaW5lLCBtX2xhc3RMaW5lKTsKICAgICB9CiAgICAgY2FzZSBOVU1CRVI6IHsKICAgICAg
ICAgZG91YmxlIHByb3BlcnR5TmFtZSA9IG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlOwpAQCAt
MTI5Nyw3ICsxMjk3LDcgQEAgdGVtcGxhdGUgPGJvb2wgY29tcGxldGUsIGNsYXNzIFRyZWVCdWls
ZAogICAgICAgICBjb25zdW1lT3JGYWlsKENPTE9OKTsKICAgICAgICAgVHJlZUV4cHJlc3Npb24g
bm9kZSA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oY29udGV4dCk7CiAgICAgICAgIGZhaWxJ
ZkZhbHNlKG5vZGUpOwotICAgICAgICByZXR1cm4gY29udGV4dC50ZW1wbGF0ZSBjcmVhdGVQcm9w
ZXJ0eTxjb21wbGV0ZT4oY29uc3RfY2FzdDxKU0dsb2JhbERhdGEqPihtX2dsb2JhbERhdGEpLCBw
cm9wZXJ0eU5hbWUsIG5vZGUsIFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQpOworICAgICAgICByZXR1
cm4gY29udGV4dC50ZW1wbGF0ZSBjcmVhdGVQcm9wZXJ0eTxjb21wbGV0ZT4oY29uc3RfY2FzdDxW
TSo+KG1fdm0pLCBwcm9wZXJ0eU5hbWUsIG5vZGUsIFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQpOwog
ICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgICBmYWlsSWZGYWxzZShtX3Rva2VuLm1fdHlwZSAm
IEtleXdvcmRUb2tlbkZsYWcpOwpAQCAtMTQ5MCw3ICsxNDkwLDcgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OwogICAgICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRp
b24odG9rZW5Mb2NhdGlvbigpKTsKICAgICAgICAgbmV4dCgpOwotICAgICAgICBjdXJyZW50U2Nv
cGUoKS0+dXNlVmFyaWFibGUoaWRlbnQsIG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+ZXZh
bCA9PSAqaWRlbnQpOworICAgICAgICBjdXJyZW50U2NvcGUoKS0+dXNlVmFyaWFibGUoaWRlbnQs
IG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKmlkZW50KTsKICAgICAgICAgbV9sYXN0SWRl
bnRpZmllciA9IGlkZW50OwogICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVSZXNvbHZlKGxv
Y2F0aW9uLCBpZGVudCwgc3RhcnQpOwogICAgIH0KQEAgLTE1ODUsNyArMTU4NSw3IEBAIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICB9CiAgICAgCiAgICAgaWYg
KG1hdGNoKEZVTkNUSU9OKSkgewotICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBuYW1lID0gJm1f
Z2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CisgICAgICAgIGNvbnN0
IElkZW50aWZpZXIqIG5hbWUgPSAmbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7
CiAgICAgICAgIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0IHBhcmFtZXRlcnMgPSAwOwogICAgICAg
ICBUcmVlRnVuY3Rpb25Cb2R5IGJvZHkgPSAwOwogICAgICAgICBpbnQgb3BlbkJyYWNlUG9zID0g
MDsKQEAgLTE2OTIsNyArMTY5Miw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZUV4cHJlc3MKICAgICBib29sIGlzRXZhbE9yQXJndW1lbnRzID0gZmFsc2U7CiAgICAgaWYgKHN0
cmljdE1vZGUoKSAmJiAhbV9zeW50YXhBbHJlYWR5VmFsaWRhdGVkKSB7CiAgICAgICAgIGlmIChj
b250ZXh0LmlzUmVzb2x2ZShleHByKSkKLSAgICAgICAgICAgIGlzRXZhbE9yQXJndW1lbnRzID0g
Km1fbGFzdElkZW50aWZpZXIgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5ldmFsIHx8
ICptX2xhc3RJZGVudGlmaWVyID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJndW1l
bnRzOworICAgICAgICAgICAgaXNFdmFsT3JBcmd1bWVudHMgPSAqbV9sYXN0SWRlbnRpZmllciA9
PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5ldmFsIHx8ICptX2xhc3RJZGVudGlmaWVyID09IG1fdm0t
PnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50czsKICAgICB9CiAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0
V2l0aE5hbWVBbmRNZXNzYWdlKGlzRXZhbE9yQXJndW1lbnRzICYmIG1vZGlmaWVzRXhwciwgIici
LCBtX2xhc3RJZGVudGlmaWVyLT5pbXBsKCksICInIGNhbm5vdCBiZSBtb2RpZmllZCBpbiBzdHJp
Y3QgbW9kZSIpOwogICAgIHN3aXRjaCAobV90b2tlbi5tX3R5cGUpIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUs
NyBAQCBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBGdW5jdGlvbkJvZHlOb2RlOwogY2xhc3MgRnVu
Y3Rpb25QYXJhbWV0ZXJzOwogY2xhc3MgSWRlbnRpZmllcjsKLWNsYXNzIEpTR2xvYmFsRGF0YTsK
K2NsYXNzIFZNOwogY2xhc3MgUHJvZ3JhbU5vZGU7CiBjbGFzcyBTb3VyY2VDb2RlOwogCkBAIC0x
MTAsOCArMTEwLDggQEAgc3RydWN0IFNjb3BlTGFiZWxJbmZvIHsKIH07CiAKIHN0cnVjdCBTY29w
ZSB7Ci0gICAgU2NvcGUoY29uc3QgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBib29sIGlzRnVu
Y3Rpb24sIGJvb2wgc3RyaWN0TW9kZSkKLSAgICAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0
YSkKKyAgICBTY29wZShjb25zdCBWTSogdm0sIGJvb2wgaXNGdW5jdGlvbiwgYm9vbCBzdHJpY3RN
b2RlKQorICAgICAgICA6IG1fdm0odm0pCiAgICAgICAgICwgbV9zaGFkb3dzQXJndW1lbnRzKGZh
bHNlKQogICAgICAgICAsIG1fdXNlc0V2YWwoZmFsc2UpCiAgICAgICAgICwgbV9uZWVkc0Z1bGxB
Y3RpdmF0aW9uKGZhbHNlKQpAQCAtMTI2LDcgKzEyNiw3IEBAIHN0cnVjdCBTY29wZSB7CiAgICAg
fQogCiAgICAgU2NvcGUoY29uc3QgU2NvcGUmIHJocykKLSAgICAgICAgOiBtX2dsb2JhbERhdGEo
cmhzLm1fZ2xvYmFsRGF0YSkKKyAgICAgICAgOiBtX3ZtKHJocy5tX3ZtKQogICAgICAgICAsIG1f
c2hhZG93c0FyZ3VtZW50cyhyaHMubV9zaGFkb3dzQXJndW1lbnRzKQogICAgICAgICAsIG1fdXNl
c0V2YWwocmhzLm1fdXNlc0V2YWwpCiAgICAgICAgICwgbV9uZWVkc0Z1bGxBY3RpdmF0aW9uKHJo
cy5tX25lZWRzRnVsbEFjdGl2YXRpb24pCkBAIC0xOTYsNyArMTk2LDcgQEAgc3RydWN0IFNjb3Bl
IHsKIAogICAgIGJvb2wgZGVjbGFyZVZhcmlhYmxlKGNvbnN0IElkZW50aWZpZXIqIGlkZW50KQog
ICAgIHsKLSAgICAgICAgYm9vbCBpc1ZhbGlkU3RyaWN0TW9kZSA9IG1fZ2xvYmFsRGF0YS0+cHJv
cGVydHlOYW1lcy0+ZXZhbCAhPSAqaWRlbnQgJiYgbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVz
LT5hcmd1bWVudHMgIT0gKmlkZW50OworICAgICAgICBib29sIGlzVmFsaWRTdHJpY3RNb2RlID0g
bV92bS0+cHJvcGVydHlOYW1lcy0+ZXZhbCAhPSAqaWRlbnQgJiYgbV92bS0+cHJvcGVydHlOYW1l
cy0+YXJndW1lbnRzICE9ICppZGVudDsKICAgICAgICAgbV9pc1ZhbGlkU3RyaWN0TW9kZSA9IG1f
aXNWYWxpZFN0cmljdE1vZGUgJiYgaXNWYWxpZFN0cmljdE1vZGU7CiAgICAgICAgIG1fZGVjbGFy
ZWRWYXJpYWJsZXMuYWRkKGlkZW50LT5zdHJpbmcoKS5pbXBsKCkpOwogICAgICAgICByZXR1cm4g
aXNWYWxpZFN0cmljdE1vZGU7CkBAIC0yMTMsOCArMjEzLDggQEAgc3RydWN0IFNjb3BlIHsKIAog
ICAgIGJvb2wgZGVjbGFyZVBhcmFtZXRlcihjb25zdCBJZGVudGlmaWVyKiBpZGVudCkKICAgICB7
Ci0gICAgICAgIGJvb2wgaXNBcmd1bWVudHMgPSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMt
PmFyZ3VtZW50cyA9PSAqaWRlbnQ7Ci0gICAgICAgIGJvb2wgaXNWYWxpZFN0cmljdE1vZGUgPSBt
X2RlY2xhcmVkVmFyaWFibGVzLmFkZChpZGVudC0+c3RyaW5nKCkuaW1wbCgpKS5pc05ld0VudHJ5
ICYmIG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+ZXZhbCAhPSAqaWRlbnQgJiYgIWlzQXJn
dW1lbnRzOworICAgICAgICBib29sIGlzQXJndW1lbnRzID0gbV92bS0+cHJvcGVydHlOYW1lcy0+
YXJndW1lbnRzID09ICppZGVudDsKKyAgICAgICAgYm9vbCBpc1ZhbGlkU3RyaWN0TW9kZSA9IG1f
ZGVjbGFyZWRWYXJpYWJsZXMuYWRkKGlkZW50LT5zdHJpbmcoKS5pbXBsKCkpLmlzTmV3RW50cnkg
JiYgbV92bS0+cHJvcGVydHlOYW1lcy0+ZXZhbCAhPSAqaWRlbnQgJiYgIWlzQXJndW1lbnRzOwog
ICAgICAgICBtX2lzVmFsaWRTdHJpY3RNb2RlID0gbV9pc1ZhbGlkU3RyaWN0TW9kZSAmJiBpc1Zh
bGlkU3RyaWN0TW9kZTsKICAgICAgICAgaWYgKGlzQXJndW1lbnRzKQogICAgICAgICAgICAgbV9z
aGFkb3dzQXJndW1lbnRzID0gdHJ1ZTsKQEAgLTMxMiw3ICszMTIsNyBAQCBzdHJ1Y3QgU2NvcGUg
ewogICAgIH0KIAogcHJpdmF0ZToKLSAgICBjb25zdCBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0
YTsKKyAgICBjb25zdCBWTSogbV92bTsKICAgICBib29sIG1fc2hhZG93c0FyZ3VtZW50cyA6IDE7
CiAgICAgYm9vbCBtX3VzZXNFdmFsIDogMTsKICAgICBib29sIG1fbmVlZHNGdWxsQWN0aXZhdGlv
biA6IDE7CkBAIC0zNjUsNyArMzY1LDcgQEAgY2xhc3MgUGFyc2VyIHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIAogcHVibGljOgotICAgIFBhcnNlcihKU0dsb2JhbERhdGEqLCBjb25z
dCBTb3VyY2VDb2RlJiwgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29uc3QgSWRlbnRpZmllciYsIEpT
UGFyc2VyU3RyaWN0bmVzcywgSlNQYXJzZXJNb2RlKTsKKyAgICBQYXJzZXIoVk0qLCBjb25zdCBT
b3VyY2VDb2RlJiwgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29uc3QgSWRlbnRpZmllciYsIEpTUGFy
c2VyU3RyaWN0bmVzcywgSlNQYXJzZXJNb2RlKTsKICAgICB+UGFyc2VyKCk7CiAKICAgICB0ZW1w
bGF0ZSA8Y2xhc3MgUGFyc2VkTm9kZT4KQEAgLTQyMiw3ICs0MjIsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgaXNTdHJpY3QgPSBtX3Njb3BlU3RhY2subGFzdCgpLnN0cmljdE1vZGUoKTsKICAg
ICAgICAgICAgIGlzRnVuY3Rpb24gPSBtX3Njb3BlU3RhY2subGFzdCgpLmlzRnVuY3Rpb24oKTsK
ICAgICAgICAgfQotICAgICAgICBtX3Njb3BlU3RhY2suYXBwZW5kKFNjb3BlKG1fZ2xvYmFsRGF0
YSwgaXNGdW5jdGlvbiwgaXNTdHJpY3QpKTsKKyAgICAgICAgbV9zY29wZVN0YWNrLmFwcGVuZChT
Y29wZShtX3ZtLCBpc0Z1bmN0aW9uLCBpc1N0cmljdCkpOwogICAgICAgICByZXR1cm4gY3VycmVu
dFNjb3BlKCk7CiAgICAgfQogICAgIApAQCAtODk0LDcgKzg5NCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIHJldHVybiAhbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCk7CiAgICAgfQogCi0gICAgSlNHbG9i
YWxEYXRhKiBtX2dsb2JhbERhdGE7CisgICAgVk0qIG1fdm07CiAgICAgY29uc3QgU291cmNlQ29k
ZSogbV9zb3VyY2U7CiAgICAgUGFyc2VyQXJlbmEqIG1fYXJlbmE7CiAgICAgT3duUHRyPExleGVy
VHlwZT4gbV9sZXhlcjsKQEAgLTk3NSw3ICs5NzUsNyBAQCBQYXNzUmVmUHRyPFBhcnNlZE5vZGU+
IFBhcnNlcjxMZXhlclR5cGU+CiAgICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBlbmRMb2NhdGlvbjsK
ICAgICAgICAgZW5kTG9jYXRpb24ubGluZSA9IG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCk7CiAg
ICAgICAgIGVuZExvY2F0aW9uLmNoYXJQb3NpdGlvbiA9IG1fbGV4ZXItPmN1cnJlbnRDaGFyUG9z
aXRpb24oKTsKLSAgICAgICAgcmVzdWx0ID0gUGFyc2VkTm9kZTo6Y3JlYXRlKG1fZ2xvYmFsRGF0
YSwKKyAgICAgICAgcmVzdWx0ID0gUGFyc2VkTm9kZTo6Y3JlYXRlKG1fdm0sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydExvY2F0aW9uLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZW5kTG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3NvdXJjZUVsZW1lbnRzLApAQCAtMTAwNywxNiArMTAwNywxNiBAQCBQ
YXNzUmVmUHRyPFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhlclR5cGU+CiB9CiAKIHRlbXBsYXRlIDxj
bGFzcyBQYXJzZWROb2RlPgotUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBwYXJzZShKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgRnVuY3Rpb25QYXJhbWV0
ZXJzKiBwYXJhbWV0ZXJzLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBKU1BhcnNlclN0cmljdG5l
c3Mgc3RyaWN0bmVzcywgSlNQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFBhcnNlckVycm9yJiBlcnJv
cikKK1Bhc3NSZWZQdHI8UGFyc2VkTm9kZT4gcGFyc2UoVk0qIHZtLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywgY29uc3QgSWRlbnRpZmll
ciYgbmFtZSwgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MsIEpTUGFyc2VyTW9kZSBwYXJz
ZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJyb3IpCiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxp
bmdSZWdpb24oIlBhcnNpbmciKTsKIAogICAgIEFTU0VSVCghc291cmNlLnByb3ZpZGVyKCktPnNv
dXJjZSgpLmlzTnVsbCgpKTsKICAgICBpZiAoc291cmNlLnByb3ZpZGVyKCktPnNvdXJjZSgpLmlz
OEJpdCgpKSB7Ci0gICAgICAgIFBhcnNlcjwgTGV4ZXI8TENoYXI+ID4gcGFyc2VyKGdsb2JhbERh
dGEsIHNvdXJjZSwgcGFyYW1ldGVycywgbmFtZSwgc3RyaWN0bmVzcywgcGFyc2VyTW9kZSk7Cisg
ICAgICAgIFBhcnNlcjwgTGV4ZXI8TENoYXI+ID4gcGFyc2VyKHZtLCBzb3VyY2UsIHBhcmFtZXRl
cnMsIG5hbWUsIHN0cmljdG5lc3MsIHBhcnNlck1vZGUpOwogICAgICAgICByZXR1cm4gcGFyc2Vy
LnBhcnNlPFBhcnNlZE5vZGU+KGVycm9yKTsKICAgICB9Ci0gICAgUGFyc2VyPCBMZXhlcjxVQ2hh
cj4gPiBwYXJzZXIoZ2xvYmFsRGF0YSwgc291cmNlLCBwYXJhbWV0ZXJzLCBuYW1lLCBzdHJpY3Ru
ZXNzLCBwYXJzZXJNb2RlKTsKKyAgICBQYXJzZXI8IExleGVyPFVDaGFyPiA+IHBhcnNlcih2bSwg
c291cmNlLCBwYXJhbWV0ZXJzLCBuYW1lLCBzdHJpY3RuZXNzLCBwYXJzZXJNb2RlKTsKICAgICBy
ZXR1cm4gcGFyc2VyLnBhcnNlPFBhcnNlZE5vZGU+KGVycm9yKTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuaAkocmV2aXNpb24gMTQ4NjU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MywxMCArNDMsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICAgICAgQUxXQVlTX0lOTElORSBjb25zdCBJ
ZGVudGlmaWVyJiBtYWtlSWRlbnRpZmllcihKU0dsb2JhbERhdGEqLCBjb25zdCBUKiBjaGFyYWN0
ZXJzLCBzaXplX3QgbGVuZ3RoKTsKLSAgICAgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlm
aWVyJiBtYWtlSWRlbnRpZmllckxDaGFyRnJvbVVDaGFyKEpTR2xvYmFsRGF0YSosIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSBj
b25zdCBJZGVudGlmaWVyJiBtYWtlSWRlbnRpZmllcihWTSosIGNvbnN0IFQqIGNoYXJhY3RlcnMs
IHNpemVfdCBsZW5ndGgpOworICAgICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXIm
IG1ha2VJZGVudGlmaWVyTENoYXJGcm9tVUNoYXIoVk0qLCBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgc2l6ZV90IGxlbmd0aCk7CiAKLSAgICAgICAgY29uc3QgSWRlbnRpZmllciYgbWFrZU51bWVy
aWNJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSosIGRvdWJsZSBudW1iZXIpOworICAgICAgICBjb25z
dCBJZGVudGlmaWVyJiBtYWtlTnVtZXJpY0lkZW50aWZpZXIoVk0qLCBkb3VibGUgbnVtYmVyKTsK
IAogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXJzLmlz
RW1wdHkoKTsgfQogCkBAIC02OSw1MSArNjksNTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsK
IAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSWRl
bnRpZmllciYgSWRlbnRpZmllckFyZW5hOjptYWtlSWRlbnRpZmllcihKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIGNvbnN0IFQqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCisgICAgQUxXQVlT
X0lOTElORSBjb25zdCBJZGVudGlmaWVyJiBJZGVudGlmaWVyQXJlbmE6Om1ha2VJZGVudGlmaWVy
KFZNKiB2bSwgY29uc3QgVCogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKICAgICB7CiAgICAg
ICAgIGlmIChjaGFyYWN0ZXJzWzBdID49IE1heGltdW1DYWNoYWJsZUNoYXJhY3RlcikgewotICAg
ICAgICAgICAgbV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcihnbG9iYWxEYXRhLCBjaGFy
YWN0ZXJzLCBsZW5ndGgpKTsKKyAgICAgICAgICAgIG1faWRlbnRpZmllcnMuYXBwZW5kKElkZW50
aWZpZXIodm0sIGNoYXJhY3RlcnMsIGxlbmd0aCkpOwogICAgICAgICAgICAgcmV0dXJuIG1faWRl
bnRpZmllcnMubGFzdCgpOwogICAgICAgICB9CiAgICAgICAgIGlmIChsZW5ndGggPT0gMSkgewog
ICAgICAgICAgICAgaWYgKElkZW50aWZpZXIqIGlkZW50ID0gbV9zaG9ydElkZW50aWZpZXJzW2No
YXJhY3RlcnNbMF1dKQogICAgICAgICAgICAgICAgIHJldHVybiAqaWRlbnQ7Ci0gICAgICAgICAg
ICBtX2lkZW50aWZpZXJzLmFwcGVuZChJZGVudGlmaWVyKGdsb2JhbERhdGEsIGNoYXJhY3RlcnMs
IGxlbmd0aCkpOworICAgICAgICAgICAgbV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcih2
bSwgY2hhcmFjdGVycywgbGVuZ3RoKSk7CiAgICAgICAgICAgICBtX3Nob3J0SWRlbnRpZmllcnNb
Y2hhcmFjdGVyc1swXV0gPSAmbV9pZGVudGlmaWVycy5sYXN0KCk7CiAgICAgICAgICAgICByZXR1
cm4gbV9pZGVudGlmaWVycy5sYXN0KCk7CiAgICAgICAgIH0KICAgICAgICAgSWRlbnRpZmllciog
aWRlbnQgPSBtX3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dOwogICAgICAgICBpZiAo
aWRlbnQgJiYgSWRlbnRpZmllcjo6ZXF1YWwoaWRlbnQtPmltcGwoKSwgY2hhcmFjdGVycywgbGVu
Z3RoKSkKICAgICAgICAgICAgIHJldHVybiAqaWRlbnQ7Ci0gICAgICAgIG1faWRlbnRpZmllcnMu
YXBwZW5kKElkZW50aWZpZXIoZ2xvYmFsRGF0YSwgY2hhcmFjdGVycywgbGVuZ3RoKSk7CisgICAg
ICAgIG1faWRlbnRpZmllcnMuYXBwZW5kKElkZW50aWZpZXIodm0sIGNoYXJhY3RlcnMsIGxlbmd0
aCkpOwogICAgICAgICBtX3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dID0gJm1faWRl
bnRpZmllcnMubGFzdCgpOwogICAgICAgICByZXR1cm4gbV9pZGVudGlmaWVycy5sYXN0KCk7CiAg
ICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyJiBJZGVudGlmaWVyQXJl
bmE6Om1ha2VJZGVudGlmaWVyTENoYXJGcm9tVUNoYXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKKyAgICBBTFdBWVNfSU5M
SU5FIGNvbnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZUlkZW50aWZpZXJMQ2hh
ckZyb21VQ2hhcihWTSogdm0sIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3Ro
KQogICAgIHsKICAgICAgICAgaWYgKGNoYXJhY3RlcnNbMF0gPj0gTWF4aW11bUNhY2hhYmxlQ2hh
cmFjdGVyKSB7Ci0gICAgICAgICAgICBtX2lkZW50aWZpZXJzLmFwcGVuZChJZGVudGlmaWVyOjpj
cmVhdGVMQ2hhckZyb21VQ2hhcihnbG9iYWxEYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKKyAg
ICAgICAgICAgIG1faWRlbnRpZmllcnMuYXBwZW5kKElkZW50aWZpZXI6OmNyZWF0ZUxDaGFyRnJv
bVVDaGFyKHZtLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKICAgICAgICAgICAgIHJldHVybiBtX2lk
ZW50aWZpZXJzLmxhc3QoKTsKICAgICAgICAgfQogICAgICAgICBpZiAobGVuZ3RoID09IDEpIHsK
ICAgICAgICAgICAgIGlmIChJZGVudGlmaWVyKiBpZGVudCA9IG1fc2hvcnRJZGVudGlmaWVyc1tj
aGFyYWN0ZXJzWzBdXSkKICAgICAgICAgICAgICAgICByZXR1cm4gKmlkZW50OwotICAgICAgICAg
ICAgbV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcihnbG9iYWxEYXRhLCBjaGFyYWN0ZXJz
LCBsZW5ndGgpKTsKKyAgICAgICAgICAgIG1faWRlbnRpZmllcnMuYXBwZW5kKElkZW50aWZpZXIo
dm0sIGNoYXJhY3RlcnMsIGxlbmd0aCkpOwogICAgICAgICAgICAgbV9zaG9ydElkZW50aWZpZXJz
W2NoYXJhY3RlcnNbMF1dID0gJm1faWRlbnRpZmllcnMubGFzdCgpOwogICAgICAgICAgICAgcmV0
dXJuIG1faWRlbnRpZmllcnMubGFzdCgpOwogICAgICAgICB9CiAgICAgICAgIElkZW50aWZpZXIq
IGlkZW50ID0gbV9yZWNlbnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXTsKICAgICAgICAgaWYg
KGlkZW50ICYmIElkZW50aWZpZXI6OmVxdWFsKGlkZW50LT5pbXBsKCksIGNoYXJhY3RlcnMsIGxl
bmd0aCkpCiAgICAgICAgICAgICByZXR1cm4gKmlkZW50OwotICAgICAgICBtX2lkZW50aWZpZXJz
LmFwcGVuZChJZGVudGlmaWVyOjpjcmVhdGVMQ2hhckZyb21VQ2hhcihnbG9iYWxEYXRhLCBjaGFy
YWN0ZXJzLCBsZW5ndGgpKTsKKyAgICAgICAgbV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmll
cjo6Y3JlYXRlTENoYXJGcm9tVUNoYXIodm0sIGNoYXJhY3RlcnMsIGxlbmd0aCkpOwogICAgICAg
ICBtX3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dID0gJm1faWRlbnRpZmllcnMubGFz
dCgpOwogICAgICAgICByZXR1cm4gbV9pZGVudGlmaWVycy5sYXN0KCk7CiAgICAgfQogICAgIAot
ICAgIGlubGluZSBjb25zdCBJZGVudGlmaWVyJiBJZGVudGlmaWVyQXJlbmE6Om1ha2VOdW1lcmlj
SWRlbnRpZmllcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGRvdWJsZSBudW1iZXIpCisgICAg
aW5saW5lIGNvbnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZU51bWVyaWNJZGVu
dGlmaWVyKFZNKiB2bSwgZG91YmxlIG51bWJlcikKICAgICB7Ci0gICAgICAgIG1faWRlbnRpZmll
cnMuYXBwZW5kKElkZW50aWZpZXIoZ2xvYmFsRGF0YSwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VD
TUFTY3JpcHQobnVtYmVyKSkpOworICAgICAgICBtX2lkZW50aWZpZXJzLmFwcGVuZChJZGVudGlm
aWVyKHZtLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdChudW1iZXIpKSk7CiAgICAg
ICAgIHJldHVybiBtX2lkZW50aWZpZXJzLmxhc3QoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCShyZXZpc2lvbiAxNDg2NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIFN5bnRheENoZWNrZXIq
IG1fY29udGV4dDsKICAgICB9OwogICAgIAotICAgIFN5bnRheENoZWNrZXIoSlNHbG9iYWxEYXRh
KiAsIHZvaWQqKQorICAgIFN5bnRheENoZWNrZXIoVk0qICwgdm9pZCopCiAgICAgewogICAgIH0K
IApAQCAtMTYzLDExICsxNjMsMTEgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobmFtZSk7CiAg
ICAgICAgIHJldHVybiBQcm9wZXJ0eShuYW1lLCB0eXBlKTsKICAgICB9Ci0gICAgdGVtcGxhdGUg
PGJvb2wgY29tcGxldGU+IFByb3BlcnR5IGNyZWF0ZVByb3BlcnR5KEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgZG91YmxlIG5hbWUsIGludCwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUpCisgICAg
dGVtcGxhdGUgPGJvb2wgY29tcGxldGU+IFByb3BlcnR5IGNyZWF0ZVByb3BlcnR5KFZNKiB2bSwg
ZG91YmxlIG5hbWUsIGludCwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUpCiAgICAgewogICAgICAg
ICBpZiAoIWNvbXBsZXRlKQogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KHR5cGUpOwotICAg
ICAgICByZXR1cm4gUHJvcGVydHkoJmdsb2JhbERhdGEtPnBhcnNlckFyZW5hLT5pZGVudGlmaWVy
QXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIoZ2xvYmFsRGF0YSwgbmFtZSksIHR5cGUpOwor
ICAgICAgICByZXR1cm4gUHJvcGVydHkoJnZtLT5wYXJzZXJBcmVuYS0+aWRlbnRpZmllckFyZW5h
KCkubWFrZU51bWVyaWNJZGVudGlmaWVyKHZtLCBuYW1lKSwgdHlwZSk7CiAgICAgfQogICAgIGlu
dCBjcmVhdGVQcm9wZXJ0eUxpc3QoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgUHJvcGVydHkpIHsg
cmV0dXJuIDE7IH0KICAgICBpbnQgY3JlYXRlUHJvcGVydHlMaXN0KGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIFByb3BlcnR5LCBpbnQpIHsgcmV0dXJuIDE7IH0KQEAgLTIxMSwxMSArMjExLDExIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eSh0eXBlKTsKICAgICAgICAgcmV0
dXJuIFByb3BlcnR5KG5hbWUsIHR5cGUpOwogICAgIH0KLSAgICB0ZW1wbGF0ZSA8Ym9vbCBzdHJp
Y3Q+IFByb3BlcnR5IGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlw
ZSwgZG91YmxlIG5hbWUsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpCisgICAgdGVtcGxh
dGUgPGJvb2wgc3RyaWN0PiBQcm9wZXJ0eSBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KFZN
KiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGRv
dWJsZSBuYW1lLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KQogICAgIHsKICAgICAgICAg
aWYgKCFzdHJpY3QpCiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkodHlwZSk7Ci0gICAgICAg
IHJldHVybiBQcm9wZXJ0eSgmZ2xvYmFsRGF0YS0+cGFyc2VyQXJlbmEtPmlkZW50aWZpZXJBcmVu
YSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihnbG9iYWxEYXRhLCBuYW1lKSwgdHlwZSk7CisgICAg
ICAgIHJldHVybiBQcm9wZXJ0eSgmdm0tPnBhcnNlckFyZW5hLT5pZGVudGlmaWVyQXJlbmEoKS5t
YWtlTnVtZXJpY0lkZW50aWZpZXIodm0sIG5hbWUpLCB0eXBlKTsKICAgICB9CiAKICAgICB2b2lk
IGFwcGVuZFN0YXRlbWVudChpbnQsIGludCkgeyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcHJvZmlsZXIvTGVnYWN5UHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9MZWdhY3lQcm9maWxlci5jcHAJKHJldmlzaW9uIDE0ODY1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9MZWdhY3lQcm9maWxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBMZWdhY3lQcm9maWxlcjo6c3RhcnRQ
cm9maWxpbmcoRXhlYwogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGV4ZWMtPmds
b2JhbERhdGEoKS5tX2VuYWJsZWRQcm9maWxlciA9IHRoaXM7CisgICAgZXhlYy0+dm0oKS5tX2Vu
YWJsZWRQcm9maWxlciA9IHRoaXM7CiAgICAgUmVmUHRyPFByb2ZpbGVHZW5lcmF0b3I+IHByb2Zp
bGVHZW5lcmF0b3IgPSBQcm9maWxlR2VuZXJhdG9yOjpjcmVhdGUoZXhlYywgdGl0bGUsICsrUHJv
ZmlsZXNVSUQpOwogICAgIG1fY3VycmVudFByb2ZpbGVzLmFwcGVuZChwcm9maWxlR2VuZXJhdG9y
KTsKIH0KQEAgLTk1LDcgKzk1LDcgQEAgUGFzc1JlZlB0cjxQcm9maWxlPiBMZWdhY3lQcm9maWxl
cjo6c3RvcAogCiAgICAgICAgICAgICBtX2N1cnJlbnRQcm9maWxlcy5yZW1vdmUoaSk7CiAgICAg
ICAgICAgICBpZiAoIW1fY3VycmVudFByb2ZpbGVzLnNpemUoKSkKLSAgICAgICAgICAgICAgICBl
eGVjLT5nbG9iYWxEYXRhKCkubV9lbmFibGVkUHJvZmlsZXIgPSAwOworICAgICAgICAgICAgICAg
IGV4ZWMtPnZtKCkubV9lbmFibGVkUHJvZmlsZXIgPSAwOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICByZXR1cm4gcmV0dXJuUHJvZmlsZTsKICAgICAgICAgfQpAQCAtMTEyLDcgKzExMiw3IEBA
IHZvaWQgTGVnYWN5UHJvZmlsZXI6OnN0b3BQcm9maWxpbmcoSlNHbG8KICAgICAgICAgICAgIHBy
b2ZpbGVHZW5lcmF0b3ItPnN0b3BQcm9maWxpbmcoKTsKICAgICAgICAgICAgIG1fY3VycmVudFBy
b2ZpbGVzLnJlbW92ZShpKTsKICAgICAgICAgICAgIGlmICghbV9jdXJyZW50UHJvZmlsZXMuc2l6
ZSgpKQotICAgICAgICAgICAgICAgIG9yaWdpbi0+Z2xvYmFsRGF0YSgpLm1fZW5hYmxlZFByb2Zp
bGVyID0gMDsKKyAgICAgICAgICAgICAgICBvcmlnaW4tPnZtKCkubV9lbmFibGVkUHJvZmlsZXIg
PSAwOwogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3By
b2ZpbGVyL0xlZ2FjeVByb2ZpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL0xlZ2FjeVByb2ZpbGVyLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9MZWdhY3lQcm9maWxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw3ICszNyw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRXhlY1N0YXRlOwot
Y2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNs
YXNzIEpTT2JqZWN0OwogY2xhc3MgSlNWYWx1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZS5jcHAJKHJldmlzaW9uIDE0ODY1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIFByb2ZpbGVyIHsKIEpTVmFsdWUgQnl0ZWNvZGU6OnRvSlMoRXhlY1N0YXRlKiBleGVjKSBj
b25zdAogewogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVj
KTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5ieXRlY29kZUluZGV4LCBqc051bWJlcihtX2J5dGVjb2RlSW5kZXgpKTsKLSAg
ICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5vcGNvZGUsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgob3Bjb2RlTmFtZXNb
bV9vcGNvZGVJRF0pKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZGVzY3JpcHRpb24sIGpzU3RyaW5nKGV4ZWMsIFN0cmlu
Zzo6ZnJvbVVURjgobV9kZXNjcmlwdGlvbikpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVj
LT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZWNvZGVJbmRleCwganNOdW1iZXIobV9i
eXRlY29kZUluZGV4KSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLm9wY29kZSwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOChv
cGNvZGVOYW1lc1ttX29wY29kZUlEXSkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52
bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZGVzY3JpcHRpb24sIGpzU3RyaW5nKGV4ZWMsIFN0
cmluZzo6ZnJvbVVURjgobV9kZXNjcmlwdGlvbikpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNl
cXVlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIv
UHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDkgQEAgQnl0ZWNvZGVTZXF1ZW5jZTo6Qnl0ZWNvZGVT
ZXF1ZW5jZShDb2RlQgogICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IDA7IGJ5dGVj
b2RlSW5kZXggPCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTspIHsKICAgICAgICAg
b3V0LnJlc2V0KCk7CiAgICAgICAgIGNvZGVCbG9jay0+ZHVtcEJ5dGVjb2RlKG91dCwgYnl0ZWNv
ZGVJbmRleCk7Ci0gICAgICAgIG1fc2VxdWVuY2UuYXBwZW5kKEJ5dGVjb2RlKGJ5dGVjb2RlSW5k
ZXgsIGNvZGVCbG9jay0+Z2xvYmFsRGF0YSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVtieXRlY29kZUluZGV4XS51Lm9wY29kZSksIG91dC50b0NT
dHJpbmcoKSkpOworICAgICAgICBtX3NlcXVlbmNlLmFwcGVuZChCeXRlY29kZShieXRlY29kZUlu
ZGV4LCBjb2RlQmxvY2stPnZtKCktPmludGVycHJldGVyLT5nZXRPcGNvZGVJRChjb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpW2J5dGVjb2RlSW5kZXhdLnUub3Bjb2RlKSwgb3V0LnRvQ1N0cmluZygp
KSk7CiAgICAgICAgIGJ5dGVjb2RlSW5kZXggKz0gb3Bjb2RlTGVuZ3RoKAotICAgICAgICAgICAg
Y29kZUJsb2NrLT5nbG9iYWxEYXRhKCktPmludGVycHJldGVyLT5nZXRPcGNvZGVJRCgKKyAgICAg
ICAgICAgIGNvZGVCbG9jay0+dm0oKS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKAogICAgICAg
ICAgICAgICAgIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbYnl0ZWNvZGVJbmRleF0udS5vcGNv
ZGUpKTsKICAgICB9CiB9CkBAIC03OCwxMiArNzgsMTIgQEAgdm9pZCBCeXRlY29kZVNlcXVlbmNl
OjphZGRTZXF1ZW5jZVByb3BlcgogICAgIEpTQXJyYXkqIGhlYWRlciA9IGNvbnN0cnVjdEVtcHR5
QXJyYXkoZXhlYywgMCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faGVhZGVyLnNp
emUoKTsgKytpKQogICAgICAgICBoZWFkZXItPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIGpzU3Ry
aW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgobV9oZWFkZXJbaV0pKSk7Ci0gICAgcmVzdWx0LT5w
dXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaGVhZGVy
LCBoZWFkZXIpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5oZWFkZXIsIGhlYWRlcik7CiAgICAgCiAgICAgSlNBcnJheSogc2VxdWVuY2Ug
PSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX3NlcXVlbmNlLnNpemUoKTsgKytpKQogICAgICAgICBzZXF1ZW5jZS0+cHV0RGlyZWN0
SW5kZXgoZXhlYywgaSwgbV9zZXF1ZW5jZVtpXS50b0pTKGV4ZWMpKTsKLSAgICByZXN1bHQtPnB1
dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29k
ZSwgc2VxdWVuY2UpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5ieXRlY29kZSwgc2VxdWVuY2UpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6UHJvZmlsZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9m
aWxlckJ5dGVjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3By
b2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVzLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTUsMTEgKzU1LDExIEBAIEpTVmFsdWUgQnl0ZWNvZGVzOjp0b0pTKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qo
ZXhlYyk7CiAgICAgCi0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZWNvZGVzSUQsIGpzTnVtYmVyKG1faWQpKTsKLSAgICBy
ZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5pbmZlcnJlZE5hbWUsIGpzU3RyaW5nKGV4ZWMsIG1faW5mZXJyZWROYW1lKSk7Ci0gICAgcmVz
dWx0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
c291cmNlQ29kZSwganNTdHJpbmcoZXhlYywgbV9zb3VyY2VDb2RlKSk7Ci0gICAgcmVzdWx0LT5w
dXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaGFzaCwg
anNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOCh0b0NTdHJpbmcobV9oYXNoKSkpKTsKLSAg
ICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5pbnN0cnVjdGlvbkNvdW50LCBqc051bWJlcihtX2luc3RydWN0aW9uQ291bnQpKTsKKyAg
ICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0
ZWNvZGVzSUQsIGpzTnVtYmVyKG1faWQpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52
bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaW5mZXJyZWROYW1lLCBqc1N0cmluZyhleGVjLCBt
X2luZmVycmVkTmFtZSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5zb3VyY2VDb2RlLCBqc1N0cmluZyhleGVjLCBtX3NvdXJjZUNvZGUp
KTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuaGFzaCwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOCh0b0NTdHJpbmcobV9oYXNo
KSkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuaW5zdHJ1Y3Rpb25Db3VudCwganNOdW1iZXIobV9pbnN0cnVjdGlvbkNvdW50KSk7CiAg
ICAgYWRkU2VxdWVuY2VQcm9wZXJ0aWVzKGV4ZWMsIHJlc3VsdCk7CiAgICAgCiAgICAgcmV0dXJu
IHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckNv
bXBpbGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmls
ZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTQsNDIgKzk0LDQyIEBAIEpTVmFsdWUgQ29tcGlsYXRpb246OnRvSlMoRXhlY1N0
YXRlKiBleGUKIHsKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qo
ZXhlYyk7CiAgICAgCi0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZWNvZGVzSUQsIGpzTnVtYmVyKG1fYnl0ZWNvZGVzLT5p
ZCgpKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuY29tcGlsYXRpb25LaW5kLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZy
b21VVEY4KHRvQ1N0cmluZyhtX2tpbmQpKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMt
PnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29kZXNJRCwganNOdW1iZXIobV9ieXRl
Y29kZXMtPmlkKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuY29tcGlsYXRpb25LaW5kLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZy
b21VVEY4KHRvQ1N0cmluZyhtX2tpbmQpKSkpOwogICAgIAogICAgIEpTQXJyYXkqIHByb2ZpbGVk
Qnl0ZWNvZGVzID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9wcm9maWxlZEJ5dGVjb2Rlcy5zaXplKCk7ICsraSkKICAgICAgICAg
cHJvZmlsZWRCeXRlY29kZXMtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fcHJvZmlsZWRCeXRl
Y29kZXNbaV0udG9KUyhleGVjKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvZmlsZWRCeXRlY29kZXMsIHByb2ZpbGVk
Qnl0ZWNvZGVzKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkucHJvZmlsZWRCeXRlY29kZXMsIHByb2ZpbGVkQnl0ZWNvZGVzKTsKICAgICAK
ICAgICBKU0FycmF5KiBkZXNjcmlwdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDAp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Rlc2NyaXB0aW9ucy5zaXplKCk7ICsr
aSkKICAgICAgICAgZGVzY3JpcHRpb25zLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX2Rlc2Ny
aXB0aW9uc1tpXS50b0pTKGV4ZWMpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5kZXNjcmlwdGlvbnMsIGRlc2NyaXB0aW9u
cyk7CisgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmRlc2NyaXB0aW9ucywgZGVzY3JpcHRpb25zKTsKICAgICAKICAgICBKU0FycmF5KiBjb3Vu
dGVycyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7CiAgICAgSGFzaE1hcDxPcmlnaW5T
dGFjaywgT3duUHRyPEV4ZWN1dGlvbkNvdW50ZXI+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
Y291bnRlcnMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPE9yaWdpblN0YWNrLCBPd25QdHI8RXhl
Y3V0aW9uQ291bnRlcj4gPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fY291bnRlcnMuYmVnaW4o
KTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBKU09iamVjdCogY291bnRlckVudHJ5
ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgICAgIGNvdW50ZXJFbnRyeS0+cHV0
RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm9yaWdpbiwg
aXRlci0+a2V5LnRvSlMoZXhlYykpOwotICAgICAgICBjb3VudGVyRW50cnktPnB1dERpcmVjdChl
eGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5leGVjdXRpb25Db3VudCwg
anNOdW1iZXIoaXRlci0+dmFsdWUtPmNvdW50KCkpKTsKKyAgICAgICAgY291bnRlckVudHJ5LT5w
dXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm9yaWdpbiwgaXRlci0+
a2V5LnRvSlMoZXhlYykpOworICAgICAgICBjb3VudGVyRW50cnktPnB1dERpcmVjdChleGVjLT52
bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZXhlY3V0aW9uQ291bnQsIGpzTnVtYmVyKGl0ZXIt
PnZhbHVlLT5jb3VudCgpKSk7CiAgICAgICAgIGNvdW50ZXJzLT5wdXNoKGV4ZWMsIGNvdW50ZXJF
bnRyeSk7CiAgICAgfQotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvdW50ZXJzLCBjb3VudGVycyk7CisgICAgcmVzdWx0LT5w
dXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvdW50ZXJzLCBjb3Vu
dGVycyk7CiAgICAgCiAgICAgSlNBcnJheSogZXhpdFNpdGVzID0gY29uc3RydWN0RW1wdHlBcnJh
eShleGVjLCAwKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vc3JFeGl0U2l0ZXMu
c2l6ZSgpOyArK2kpCiAgICAgICAgIGV4aXRTaXRlcy0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwg
bV9vc3JFeGl0U2l0ZXNbaV0udG9KUyhleGVjKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkub3NyRXhpdFNpdGVzLCBleGl0
U2l0ZXMpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5vc3JFeGl0U2l0ZXMsIGV4aXRTaXRlcyk7CiAgICAgCiAgICAgSlNBcnJheSogZXhp
dHMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX29zckV4aXRzLnNpemUoKTsgKytpKQogICAgICAgICBleGl0cy0+cHV0RGlyZWN0
SW5kZXgoZXhlYywgaSwgbV9vc3JFeGl0c1tpXS50b0pTKGV4ZWMpKTsKLSAgICByZXN1bHQtPnB1
dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5vc3JFeGl0
cywgZXhpdHMpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5vc3JFeGl0cywgZXhpdHMpOwogICAgIAotICAgIHJlc3VsdC0+cHV0RGlyZWN0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm51bUlubGluZWRHZXRC
eUlkcywganNOdW1iZXIobV9udW1JbmxpbmVkR2V0QnlJZHMpKTsKLSAgICByZXN1bHQtPnB1dERp
cmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5udW1JbmxpbmVk
UHV0QnlJZHMsIGpzTnVtYmVyKG1fbnVtSW5saW5lZFB1dEJ5SWRzKSk7Ci0gICAgcmVzdWx0LT5w
dXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubnVtSW5s
aW5lZENhbGxzLCBqc051bWJlcihtX251bUlubGluZWRDYWxscykpOworICAgIHJlc3VsdC0+cHV0
RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5udW1JbmxpbmVkR2V0QnlJ
ZHMsIGpzTnVtYmVyKG1fbnVtSW5saW5lZEdldEJ5SWRzKSk7CisgICAgcmVzdWx0LT5wdXREaXJl
Y3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm51bUlubGluZWRQdXRCeUlkcywg
anNOdW1iZXIobV9udW1JbmxpbmVkUHV0QnlJZHMpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubnVtSW5saW5lZENhbGxzLCBqc051bWJl
cihtX251bUlubGluZWRDYWxscykpOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxlZEJ5dGVjb2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmls
ZXJDb21waWxlZEJ5dGVjb2RlLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDggKzQ2LDggQEAgSlNWYWx1ZSBDb21waWxlZEJ5dGVjb2RlOjp0b0pTKEV4
ZWNTdGF0ZQogewogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChl
eGVjKTsKICAgICAKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5vcmlnaW4sIG1fb3JpZ2luLnRvSlMoZXhlYykpOwotICAgIHJl
c3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
LmRlc2NyaXB0aW9uLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG1fZGVzY3JpcHRp
b24pKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLm9yaWdpbiwgbV9vcmlnaW4udG9KUyhleGVjKSk7CisgICAgcmVzdWx0LT5wdXREaXJl
Y3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmRlc2NyaXB0aW9uLCBqc1N0cmlu
ZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG1fZGVzY3JpcHRpb24pKSk7CiAgICAgCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9m
aWxlckRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJv
ZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckRhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDIsOSArNDIsOSBAQCBzdGF0aWMgU3BpbkxvY2sgcmVnaXN0cmF0aW9uTG9jayA9IFNQ
SU5MCiBzdGF0aWMgaW50IGRpZFJlZ2lzdGVyQXRFeGl0Owogc3RhdGljIERhdGFiYXNlKiBmaXJz
dERhdGFiYXNlOwogCi1EYXRhYmFzZTo6RGF0YWJhc2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KQorRGF0YWJhc2U6OkRhdGFiYXNlKFZNJiB2bSkKICAgICA6IG1fZGF0YWJhc2VJRChhdG9taWNJ
bmNyZW1lbnQoJmRhdGFiYXNlQ291bnRlcikpCi0gICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0
YSkKKyAgICAsIG1fdm0odm0pCiAgICAgLCBtX3Nob3VsZFNhdmVBdEV4aXQoZmFsc2UpCiAgICAg
LCBtX25leHRSZWdpc3RlcmVkRGF0YWJhc2UoMCkKIHsKQEAgLTk4LDEyICs5OCwxMiBAQCBKU1Zh
bHVlIERhdGFiYXNlOjp0b0pTKEV4ZWNTdGF0ZSogZXhlYykgCiAgICAgSlNBcnJheSogYnl0ZWNv
ZGVzID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9ieXRlY29kZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGJ5dGVjb2Rlcy0+cHV0
RGlyZWN0SW5kZXgoZXhlYywgaSwgbV9ieXRlY29kZXNbaV0udG9KUyhleGVjKSk7Ci0gICAgcmVz
dWx0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
Ynl0ZWNvZGVzLCBieXRlY29kZXMpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCks
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29kZXMsIGJ5dGVjb2Rlcyk7CiAgICAgCiAgICAg
SlNBcnJheSogY29tcGlsYXRpb25zID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb21waWxhdGlvbnMuc2l6ZSgpOyArK2kpCiAg
ICAgICAgIGNvbXBpbGF0aW9ucy0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgbV9jb21waWxhdGlv
bnNbaV0tPnRvSlMoZXhlYykpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbXBpbGF0aW9ucywgY29tcGlsYXRpb25zKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
Y29tcGlsYXRpb25zLCBjb21waWxhdGlvbnMpOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9
CkBAIC0xMTEsNyArMTExLDcgQEAgSlNWYWx1ZSBEYXRhYmFzZTo6dG9KUyhFeGVjU3RhdGUqIGV4
ZWMpIAogU3RyaW5nIERhdGFiYXNlOjp0b0pTT04oKSBjb25zdAogewogICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlKAotICAgICAgICBtX2ds
b2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUobV9nbG9iYWxEYXRhLCBq
c051bGwoKSkpOworICAgICAgICBtX3ZtLCBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJl
KG1fdm0sIGpzTnVsbCgpKSk7CiAgICAgCiAgICAgcmV0dXJuIEpTT05TdHJpbmdpZnkoZ2xvYmFs
T2JqZWN0LT5nbG9iYWxFeGVjKCksIHRvSlMoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLCAw
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckRhdGFi
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2Zp
bGVyRGF0YWJhc2UuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIs
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFByb2ZpbGVyIHsKIGNsYXNzIERhdGFiYXNl
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0
YWJhc2UpOwogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIERhdGFiYXNlKEpTR2xvYmFs
RGF0YSYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIERhdGFiYXNlKFZNJik7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgfkRhdGFiYXNlKCk7CiAgICAgCiAgICAgaW50IGRhdGFiYXNlSUQoKSBjb25z
dCB7IHJldHVybiBtX2RhdGFiYXNlSUQ7IH0KQEAgLTc4LDcgKzc4LDcgQEAgcHJpdmF0ZToKICAg
ICBzdGF0aWMgdm9pZCBhdEV4aXRDYWxsYmFjaygpOwogICAgIAogICAgIGludCBtX2RhdGFiYXNl
SUQ7Ci0gICAgSlNHbG9iYWxEYXRhJiBtX2dsb2JhbERhdGE7CisgICAgVk0mIG1fdm07CiAgICAg
U2VnbWVudGVkVmVjdG9yPEJ5dGVjb2Rlcz4gbV9ieXRlY29kZXM7CiAgICAgSGFzaE1hcDxDb2Rl
QmxvY2sqLCBCeXRlY29kZXMqPiBtX2J5dGVjb2Rlc01hcDsKICAgICBWZWN0b3I8UmVmUHRyPENv
bXBpbGF0aW9uPiA+IG1fY29tcGlsYXRpb25zOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdC5jcHAJKHJldmlzaW9uIDE0ODY1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9TUkV4aXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OCwxMSArNDgsMTEgQEAgT1NSRXhpdDo6fk9TUkV4aXQoKQogSlNW
YWx1ZSBPU1JFeGl0Ojp0b0pTKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBKU09iamVj
dCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgcmVzdWx0LT5wdXRE
aXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaWQsIGpzTnVt
YmVyKG1faWQpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5vcmlnaW4sIG1fb3JpZ2luLnRvSlMoZXhlYykpOwotICAgIHJl
c3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
LmV4aXRLaW5kLCBqc1N0cmluZyhleGVjLCBleGl0S2luZFRvU3RyaW5nKG1fZXhpdEtpbmQpKSk7
Ci0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuaXNXYXRjaHBvaW50LCBqc0Jvb2xlYW4obV9pc1dhdGNocG9pbnQpKTsKLSAgICBy
ZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5jb3VudCwganNOdW1iZXIobV9jb3VudGVyKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhl
Yy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmlkLCBqc051bWJlcihtX2lkKSk7CisgICAg
cmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm9yaWdp
biwgbV9vcmlnaW4udG9KUyhleGVjKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0o
KSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmV4aXRLaW5kLCBqc1N0cmluZyhleGVjLCBleGl0S2lu
ZFRvU3RyaW5nKG1fZXhpdEtpbmQpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0o
KSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmlzV2F0Y2hwb2ludCwganNCb29sZWFuKG1faXNXYXRj
aHBvaW50KSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmNvdW50LCBqc051bWJlcihtX2NvdW50ZXIpKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmln
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9m
aWxlck9yaWdpbi5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wcm9maWxlci9Qcm9maWxlck9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4
LDggQEAgdm9pZCBPcmlnaW46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29ucwogSlNWYWx1ZSBP
cmlnaW46OnRvSlMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIEpTT2JqZWN0KiByZXN1
bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChl
eGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29kZXNJRCwganNO
dW1iZXIobV9ieXRlY29kZXMtPmlkKCkpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5n
bG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29kZUluZGV4LCBqc051bWJl
cihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZWNvZGVzSUQsIGpzTnVtYmVyKG1fYnl0ZWNvZGVzLT5p
ZCgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLmJ5dGVjb2RlSW5kZXgsIGpzTnVtYmVyKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Q
cm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5jcHAJKHJldmlzaW9u
IDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlclByb2Zp
bGVkQnl0ZWNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBKU1ZhbHVl
IFByb2ZpbGVkQnl0ZWNvZGVzOjp0b0pTKEV4ZWNTdGF0CiB7CiAgICAgSlNPYmplY3QqIHJlc3Vs
dCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogICAgIAotICAgIHJlc3VsdC0+cHV0RGly
ZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVjb2Rlc0lE
LCBqc051bWJlcihtX2J5dGVjb2Rlcy0+aWQoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4
ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29kZXNJRCwganNOdW1iZXIobV9i
eXRlY29kZXMtPmlkKCkpKTsKICAgICBhZGRTZXF1ZW5jZVByb3BlcnRpZXMoZXhlYywgcmVzdWx0
KTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJnTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FyZ0xpc3QuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJnTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIGNs
YXNzIFNsb3RWaXNpdG9yOwogCiBjbGFzcyBNYXJrZWRBcmd1bWVudEJ1ZmZlciB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoTWFya2VkQXJndW1lbnRCdWZmZXIpOwotICAgIGZyaWVuZCBjbGFz
cyBKU0dsb2JhbERhdGE7CisgICAgZnJpZW5kIGNsYXNzIFZNOwogICAgIGZyaWVuZCBjbGFzcyBB
cmdMaXN0OwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Bcmd1bWVudHMuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgsNyArMTk4LDcg
QEAgdm9pZCBBcmd1bWVudHM6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYgogdm9pZCBBcmd1bWVu
dHM6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGks
IEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgQXJndW1lbnRzKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEFyZ3VtZW50cyo+KGNlbGwpOwotICAgIGlmICh0aGlzT2JqZWN0LT50
cnlTZXRBcmd1bWVudChleGVjLT5nbG9iYWxEYXRhKCksIGksIHZhbHVlKSkKKyAgICBpZiAodGhp
c09iamVjdC0+dHJ5U2V0QXJndW1lbnQoZXhlYy0+dm0oKSwgaSwgdmFsdWUpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChzaG91bGRUaHJvdyk7CkBAIC0yMDks
MTkgKzIwOSwxOSBAQCB2b2lkIEFyZ3VtZW50czo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0CiB7
CiAgICAgQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PEFyZ3VtZW50cyo+KGNlbGwpOwog
ICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmICh0aGlzT2Jq
ZWN0LT50cnlTZXRBcmd1bWVudChleGVjLT5nbG9iYWxEYXRhKCksIGksIHZhbHVlKSkKKyAgICBp
ZiAodGhpc09iamVjdC0+dHJ5U2V0QXJndW1lbnQoZXhlYy0+dm0oKSwgaSwgdmFsdWUpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGggJiYgIXRoaXNPYmplY3QtPm1fb3ZlcnJvZGVMZW5ndGgpIHsKICAgICAgICAg
dGhpc09iamVjdC0+bV9vdmVycm9kZUxlbmd0aCA9IHRydWU7Ci0gICAgICAgIHRoaXNPYmplY3Qt
PnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUsIERvbnRF
bnVtKTsKKyAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIHByb3BlcnR5
TmFtZSwgdmFsdWUsIERvbnRFbnVtKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlZSAmJiAhdGhpc09i
amVjdC0+bV9vdmVycm9kZUNhbGxlZSkgewogICAgICAgICBpZiAoIXRoaXNPYmplY3QtPm1faXNT
dHJpY3RNb2RlKSB7CiAgICAgICAgICAgICB0aGlzT2JqZWN0LT5tX292ZXJyb2RlQ2FsbGVlID0g
dHJ1ZTsKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRh
KCksIHByb3BlcnR5TmFtZSwgdmFsdWUsIERvbnRFbnVtKTsKKyAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBEb250RW51bSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgdGhpc09iamVjdC0+Y3Jl
YXRlU3RyaWN0TW9kZUNhbGxlZUlmTmVjZXNzYXJ5KGV4ZWMpOwpAQCAtMjQ3LDcgKzI0Nyw3IEBA
IGJvb2wgQXJndW1lbnRzOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlMKIAogYm9vbCBBcmd1bWVu
dHM6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lKSAKIHsKLSAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmlzSW5E
ZWZpbmVPd25Qcm9wZXJ0eSgpKQorICAgIGlmIChleGVjLT52bSgpLmlzSW5EZWZpbmVPd25Qcm9w
ZXJ0eSgpKQogICAgICAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywg
cHJvcGVydHlOYW1lKTsKIAogICAgIEFyZ3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxBcmd1
bWVudHMqPihjZWxsKTsKQEAgLTMwNiw3ICszMDYsNyBAQCBib29sIEFyZ3VtZW50czo6ZGVmaW5l
T3duUHJvcGVydHkoSlNPYmplCiAgICAgICAgICAgICAgICAgLy8gaS4gSWYgRGVzYy5bW1ZhbHVl
XV0gaXMgcHJlc2VudCwgdGhlbgogICAgICAgICAgICAgICAgIC8vIDEuIENhbGwgdGhlIFtbUHV0
XV0gaW50ZXJuYWwgbWV0aG9kIG9mIG1hcCBwYXNzaW5nIFAsIERlc2MuW1tWYWx1ZV1dLCBhbmQg
VGhyb3cgYXMgdGhlIGFyZ3VtZW50cy4KICAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci52
YWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT50cnlTZXRBcmd1bWVudChl
eGVjLT5nbG9iYWxEYXRhKCksIGksIGRlc2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXNPYmplY3QtPnRyeVNldEFyZ3VtZW50KGV4ZWMtPnZtKCksIGksIGRlc2NyaXB0
b3IudmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgLy8gaWkuIElmIERlc2MuW1tXcml0YWJsZV1d
IGlzIHByZXNlbnQgYW5kIGl0cyB2YWx1ZSBpcyBmYWxzZSwgdGhlbgogICAgICAgICAgICAgICAg
IC8vIDEuIENhbGwgdGhlIFtbRGVsZXRlXV0gaW50ZXJuYWwgbWV0aG9kIG9mIG1hcCBwYXNzaW5n
IFAgYW5kIGZhbHNlIGFzIGFyZ3VtZW50cy4KICAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRv
ci53cml0YWJsZVByZXNlbnQoKSAmJiAhZGVzY3JpcHRvci53cml0YWJsZSgpKQpAQCAtMzE3LDEw
ICszMTcsMTAgQEAgYm9vbCBBcmd1bWVudHM6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZQogICAg
IH0KIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCAmJiAhdGhpc09iamVjdC0+bV9vdmVycm9kZUxlbmd0aCkgewotICAgICAgICB0aGlzT2JqZWN0
LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGpzTnVtYmVyKHRo
aXNPYmplY3QtPm1fbnVtQXJndW1lbnRzKSwgRG9udEVudW0pOworICAgICAgICB0aGlzT2JqZWN0
LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCBqc051bWJlcih0aGlzT2JqZWN0
LT5tX251bUFyZ3VtZW50cyksIERvbnRFbnVtKTsKICAgICAgICAgdGhpc09iamVjdC0+bV9vdmVy
cm9kZUxlbmd0aCA9IHRydWU7CiAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmNhbGxlZSAmJiAhdGhpc09iamVjdC0+bV9vdmVycm9kZUNhbGxlZSkg
ewotICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9w
ZXJ0eU5hbWUsIHRoaXNPYmplY3QtPm1fY2FsbGVlLmdldCgpLCBEb250RW51bSk7CisgICAgICAg
IHRoaXNPYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmpl
Y3QtPm1fY2FsbGVlLmdldCgpLCBEb250RW51bSk7CiAgICAgICAgIHRoaXNPYmplY3QtPm1fb3Zl
cnJvZGVDYWxsZWUgPSB0cnVlOwogICAgIH0gZWxzZSBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5jYWxsZXIgJiYgdGhpc09iamVjdC0+bV9pc1N0cmljdE1vZGUpCiAg
ICAgICAgIHRoaXNPYmplY3QtPmNyZWF0ZVN0cmljdE1vZGVDYWxsZXJJZk5lY2Vzc2FyeShleGVj
KTsKQEAgLTM1NiwxMiArMzU2LDEyIEBAIHZvaWQgQXJndW1lbnRzOjp0ZWFyT2ZmKENhbGxGcmFt
ZSogY2FsbEYKIAogICAgIGlmICghY2FsbEZyYW1lLT5pc0lubGluZUNhbGxGcmFtZSgpKSB7CiAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9udW1Bcmd1bWVudHM7ICsraSkKLSAgICAg
ICAgICAgIHRyeVNldEFyZ3VtZW50KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBpLCBjYWxsRnJh
bWUtPmFyZ3VtZW50QWZ0ZXJDYXB0dXJlKGkpKTsKKyAgICAgICAgICAgIHRyeVNldEFyZ3VtZW50
KGNhbGxGcmFtZS0+dm0oKSwgaSwgY2FsbEZyYW1lLT5hcmd1bWVudEFmdGVyQ2FwdHVyZShpKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICB0ZWFyT2ZmRm9ySW5saW5lQ2FsbEZyYW1l
KAotICAgICAgICBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLT5yZWdpc3RlcnMo
KSwgY2FsbEZyYW1lLT5pbmxpbmVDYWxsRnJhbWUoKSk7CisgICAgICAgIGNhbGxGcmFtZS0+dm0o
KSwgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSwgY2FsbEZyYW1lLT5pbmxpbmVDYWxsRnJhbWUoKSk7
CiB9CiAKIHZvaWQgQXJndW1lbnRzOjpkaWRUZWFyT2ZmQWN0aXZhdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbikKQEAgLTM3Myw3ICszNzMsNyBAQCB2b2lkIEFy
Z3VtZW50czo6ZGlkVGVhck9mZkFjdGl2YXRpb24oRXhlCiAgICAgaWYgKCFtX251bUFyZ3VtZW50
cykKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1fYWN0aXZhdGlvbi5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBhY3RpdmF0aW9uKTsKKyAgICBtX2FjdGl2YXRpb24uc2V0KGV4ZWMt
PnZtKCksIHRoaXMsIGFjdGl2YXRpb24pOwogICAgIHRlYXJPZmYoZXhlYyk7CiB9CiAKQEAgLTM4
OSwxMSArMzg5LDExIEBAIHZvaWQgQXJndW1lbnRzOjp0ZWFyT2ZmKENhbGxGcmFtZSogY2FsbEYK
ICAgICBtX3JlZ2lzdGVycyA9IG1fcmVnaXN0ZXJBcnJheS5nZXQoKSArIENhbGxGcmFtZTo6b2Zm
c2V0Rm9yKG1fbnVtQXJndW1lbnRzICsgMSk7CiAKICAgICB0ZWFyT2ZmRm9ySW5saW5lQ2FsbEZy
YW1lKAotICAgICAgICBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLT5yZWdpc3Rl
cnMoKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQsCisgICAgICAgIGNhbGxGcmFtZS0+
dm0oKSwgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQsCiAgICAgICAgIGlubGluZUNhbGxGcmFtZSk7CiB9CiAKLXZvaWQgQXJndW1lbnRzOjp0ZWFy
T2ZmRm9ySW5saW5lQ2FsbEZyYW1lKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUmVnaXN0ZXIq
IHJlZ2lzdGVycywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCit2b2lkIEFyZ3Vt
ZW50czo6dGVhck9mZkZvcklubGluZUNhbGxGcmFtZShWTSYgdm0sIFJlZ2lzdGVyKiByZWdpc3Rl
cnMsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogewogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9udW1Bcmd1bWVudHM7ICsraSkgewogICAgICAgICBWYWx1ZVJlY292ZXJ5
JiByZWNvdmVyeSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzW2kgKyAxXTsKQEAgLTQzMSw3
ICs0MzEsNyBAQCB2b2lkIEFyZ3VtZW50czo6dGVhck9mZkZvcklubGluZUNhbGxGcmFtCiAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KLSAgICAgICAgdHJ5U2V0QXJndW1lbnQoZ2xvYmFsRGF0YSwgaSwgdmFsdWUp
OworICAgICAgICB0cnlTZXRBcmd1bWVudCh2bSwgaSwgdmFsdWUpOwogICAgIH0KIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgJKHJldmlzaW9uIDE0
ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCwxNiArNDAsMTYgQEAgY2xhc3MgQXJndW1lbnRzIDogcHVibGljIEpT
RGVzdHJ1Y3RpYmxlTwogcHVibGljOgogICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3Qg
QmFzZTsKIAotICAgIHN0YXRpYyBBcmd1bWVudHMqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIENhbGxGcmFtZSogY2FsbEZyYW1lKQorICAgIHN0YXRpYyBBcmd1bWVudHMqIGNyZWF0
ZShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIHsKLSAgICAgICAgQXJndW1lbnRz
KiBhcmd1bWVudHMgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxBcmd1bWVudHM+KGdsb2Jh
bERhdGEuaGVhcCkpIEFyZ3VtZW50cyhjYWxsRnJhbWUpOworICAgICAgICBBcmd1bWVudHMqIGFy
Z3VtZW50cyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4odm0uaGVhcCkp
IEFyZ3VtZW50cyhjYWxsRnJhbWUpOwogICAgICAgICBhcmd1bWVudHMtPmZpbmlzaENyZWF0aW9u
KGNhbGxGcmFtZSk7CiAgICAgICAgIHJldHVybiBhcmd1bWVudHM7CiAgICAgfQogICAgICAgICAK
LSAgICBzdGF0aWMgQXJndW1lbnRzKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisg
ICAgc3RhdGljIEFyZ3VtZW50cyogY3JlYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHsKLSAgICAgICAgQXJndW1l
bnRzKiBhcmd1bWVudHMgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxBcmd1bWVudHM+KGds
b2JhbERhdGEuaGVhcCkpIEFyZ3VtZW50cyhjYWxsRnJhbWUpOworICAgICAgICBBcmd1bWVudHMq
IGFyZ3VtZW50cyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4odm0uaGVh
cCkpIEFyZ3VtZW50cyhjYWxsRnJhbWUpOwogICAgICAgICBhcmd1bWVudHMtPmZpbmlzaENyZWF0
aW9uKGNhbGxGcmFtZSwgaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgcmV0dXJuIGFyZ3VtZW50
czsKICAgICB9CkBAIC02Miw3ICs2Miw3IEBAIHByaXZhdGU6CiAgICAgQXJndW1lbnRzKENhbGxG
cmFtZSopOwogICAgIEFyZ3VtZW50cyhDYWxsRnJhbWUqLCBOb1BhcmFtZXRlcnNUeXBlKTsKICAg
ICAgICAgCi0gICAgdm9pZCB0ZWFyT2ZmRm9ySW5saW5lQ2FsbEZyYW1lKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgUmVnaXN0ZXIqLCBJbmxpbmVDYWxsRnJhbWUqKTsKKyAgICB2b2lkIHRlYXJP
ZmZGb3JJbmxpbmVDYWxsRnJhbWUoVk0mIHZtLCBSZWdpc3RlciosIElubGluZUNhbGxGcmFtZSop
OwogCiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CkBAIC04NCw5
ICs4NCw5IEBAIHB1YmxpYzoKICAgICBib29sIGlzVG9ybk9mZigpIGNvbnN0IHsgcmV0dXJuIG1f
cmVnaXN0ZXJBcnJheTsgfQogICAgIHZvaWQgZGlkVGVhck9mZkFjdGl2YXRpb24oRXhlY1N0YXRl
KiwgSlNBY3RpdmF0aW9uKik7CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpIAogICAgIHsgCi0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRh
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsgCisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7IAogICAgIH0KICAgICAgICAgCiBwcm90ZWN0ZWQ6CkBAIC0xMTAsNyAr
MTEwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZVN0cmljdE1vZGVDYWxsZWVJZk5lY2Vz
c2FyeShFeGVjU3RhdGUqKTsKIAogICAgIGJvb2wgaXNBcmd1bWVudChzaXplX3QpOwotICAgIGJv
b2wgdHJ5U2V0QXJndW1lbnQoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IGFyZ3VtZW50LCBKU1ZhbHVl
KTsKKyAgICBib29sIHRyeVNldEFyZ3VtZW50KFZNJiwgc2l6ZV90IGFyZ3VtZW50LCBKU1ZhbHVl
KTsKICAgICBKU1ZhbHVlIHRyeUdldEFyZ3VtZW50KHNpemVfdCBhcmd1bWVudCk7CiAgICAgYm9v
bCBpc0RlbGV0ZWRBcmd1bWVudChzaXplX3QpOwogICAgIGJvb2wgdHJ5RGVsZXRlQXJndW1lbnQo
c2l6ZV90KTsKQEAgLTE0OCwxMiArMTQ4LDEyIEBAIGlubGluZSBBcmd1bWVudHMqIGFzQXJndW1l
bnRzKEpTVmFsdWUgdmEKIH0KIAogaW5saW5lIEFyZ3VtZW50czo6QXJndW1lbnRzKENhbGxGcmFt
ZSogY2FsbEZyYW1lKQotICAgIDogSlNEZXN0cnVjdGlibGVPYmplY3QoY2FsbEZyYW1lLT5nbG9i
YWxEYXRhKCksIGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcmd1bWVudHNTdHJ1
Y3R1cmUoKSkKKyAgICA6IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0KGNhbGxGcmFtZS0+dm0oKSwgY2Fs
bEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFyZ3VtZW50c1N0cnVjdHVyZSgpKQogewog
fQogCiBpbmxpbmUgQXJndW1lbnRzOjpBcmd1bWVudHMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIE5v
UGFyYW1ldGVyc1R5cGUpCi0gICAgOiBKU0Rlc3RydWN0aWJsZU9iamVjdChjYWxsRnJhbWUtPmds
b2JhbERhdGEoKSwgY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFyZ3VtZW50c1N0
cnVjdHVyZSgpKQorICAgIDogSlNEZXN0cnVjdGlibGVPYmplY3QoY2FsbEZyYW1lLT52bSgpLCBj
YWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJndW1lbnRzU3RydWN0dXJlKCkpCiB7
CiB9CiAKQEAgLTE3NywxMSArMTc3LDExIEBAIGlubGluZSBib29sIEFyZ3VtZW50czo6dHJ5RGVs
ZXRlQXJndW1lbnQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIGJvb2wgQXJndW1lbnRz
Ojp0cnlTZXRBcmd1bWVudChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBhcmd1bWVu
dCwgSlNWYWx1ZSB2YWx1ZSkKK2lubGluZSBib29sIEFyZ3VtZW50czo6dHJ5U2V0QXJndW1lbnQo
Vk0mIHZtLCBzaXplX3QgYXJndW1lbnQsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaWYgKCFpc0Fy
Z3VtZW50KGFyZ3VtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHRoaXMtPmFyZ3Vt
ZW50KGFyZ3VtZW50KS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgIHRoaXMtPmFy
Z3VtZW50KGFyZ3VtZW50KS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtMjI3LDEzICsyMjcsMTMgQEAgaW5saW5lIFdyaXRlQmFycmllckJhc2U8VW5rbm93
bj4mIEFyZ3VtZQogCiBpbmxpbmUgdm9pZCBBcmd1bWVudHM6OmZpbmlzaENyZWF0aW9uKENhbGxG
cmFtZSogY2FsbEZyYW1lKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihjYWxsRnJhbWUtPnZtKCkp
OwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiAKICAgICBKU0Z1bmN0aW9uKiBjYWxs
ZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+Y2FsbGVlKCkpOwogICAgIG1fbnVt
QXJndW1lbnRzID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7CiAgICAgbV9yZWdpc3RlcnMg
PSByZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qPihjYWxsRnJhbWUt
PnJlZ2lzdGVycygpKTsKLSAgICBtX2NhbGxlZS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCks
IHRoaXMsIGNhbGxlZSk7CisgICAgbV9jYWxsZWUuc2V0KGNhbGxGcmFtZS0+dm0oKSwgdGhpcywg
Y2FsbGVlKTsKICAgICBtX292ZXJyb2RlTGVuZ3RoID0gZmFsc2U7CiAgICAgbV9vdmVycm9kZUNh
bGxlZSA9IGZhbHNlOwogICAgIG1fb3ZlcnJvZGVDYWxsZXIgPSBmYWxzZTsKQEAgLTI1NiwxMyAr
MjU2LDEzIEBAIGlubGluZSB2b2lkIEFyZ3VtZW50czo6ZmluaXNoQ3JlYXRpb24oQ2EKIAogaW5s
aW5lIHZvaWQgQXJndW1lbnRzOjpmaW5pc2hDcmVhdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGNhbGxGcmFtZS0+dm0oKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIAogICAg
IEpTRnVuY3Rpb24qIGNhbGxlZSA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlRm9yQ2FsbEZyYW1l
KGNhbGxGcmFtZSk7CiAgICAgbV9udW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50cy5zaXplKCkgLSAxOwogICAgIG1fcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4oY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkgKyBpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0OwotICAgIG1fY2FsbGVlLnNldChjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKSwgdGhpcywgY2FsbGVlKTsKKyAgICBtX2NhbGxlZS5zZXQoY2FsbEZyYW1lLT52bSgp
LCB0aGlzLCBjYWxsZWUpOwogICAgIG1fb3ZlcnJvZGVMZW5ndGggPSBmYWxzZTsKICAgICBtX292
ZXJyb2RlQ2FsbGVlID0gZmFsc2U7CiAgICAgbV9vdmVycm9kZUNhbGxlciA9IGZhbHNlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw5ICs2MSw5IEBAIEFy
cmF5Q29uc3RydWN0b3I6OkFycmF5Q29uc3RydWN0b3IoSlNHbG8KIAogdm9pZCBBcnJheUNvbnN0
cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEFycmF5UHJvdG90eXBlKiBh
cnJheVByb3RvdHlwZSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxE
YXRhKCksIGFycmF5UHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKTsKLSAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5wcm90b3R5cGUsIGFycmF5UHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUg
fCBSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFs
RGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9u
bHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4
ZWMtPnZtKCksIGFycmF5UHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKTsKKyAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkucHJvdG90eXBlLCBhcnJheVByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEpLCBSZWFkT25seSB8IERvbnRFbnVt
IHwgRG9udERlbGV0ZSk7CiB9CiAKIGJvb2wgQXJyYXlDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVy
dHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QgJnNsb3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDkgKzQyLDkgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAm
c19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKICAgICB9CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI0LDE2ICsxMjQsMTYgQEAgQXJyYXlQcm90b3R5cGUqIEFycmF5UHJvdG90eXBl
OjpjcmVhdGUoRQogCiAvLyBFQ01BIDE1LjQuNAogQXJyYXlQcm90b3R5cGU6OkFycmF5UHJvdG90
eXBlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQot
ICAgIDogSlNBcnJheShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCAwKQor
ICAgIDogSlNBcnJheShnbG9iYWxPYmplY3QtPnZtKCksIHN0cnVjdHVyZSwgMCkKIHsKIH0KIAog
dm9pZCBBcnJheVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBnbG9iYWxPYmplY3Qt
Pmdsb2JhbERhdGEoKTsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgZ2xvYmFsRGF0YS5wcm90
b3R5cGVNYXAuYWRkUHJvdG90eXBlKHRoaXMpOworICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQcm90
b3R5cGUodGhpcyk7CiB9CiAKIGJvb2wgQXJyYXlQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xv
dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtNzM5LDcgKzczOSw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgcmV0dXJuIHBlcmZvcm1TbG93U29y
dChleGVjLCB0aGlzT2JqLCBsZW5ndGgsIGZ1bmN0aW9uLCBjYWxsRGF0YSwgY2FsbFR5cGUpID8g
SlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmopIDogSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0dsb2JhbE9iamVj
dDo6Y3JlYXRlKAotICAgICAgICBleGVjLT5nbG9iYWxEYXRhKCksIEpTR2xvYmFsT2JqZWN0Ojpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc051bGwoKSkpOworICAgICAgICBl
eGVjLT52bSgpLCBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIGpz
TnVsbCgpKSk7CiAgICAgSlNBcnJheSogZmxhdEFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgMCk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAt
ODE4LDE3ICs4MTgsMTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RgogICAgICAgICAgICAgZGVsZXRlQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVsZXRl
RG91YmxlKTsKICAgICB9CiAKLSAgICBKU0FycmF5KiByZXNPYmogPSBKU0FycmF5Ojp0cnlDcmVh
dGVVbmluaXRpYWxpemVkKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJy
YXlXaXRoVW5kZWNpZGVkKSwgZGVsZXRlQ291bnQpOworICAgIEpTQXJyYXkqIHJlc09iaiA9IEpT
QXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRp
b24oQXJyYXlXaXRoVW5kZWNpZGVkKSwgZGVsZXRlQ291bnQpOwogICAgIGlmICghcmVzT2JqKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVj
KSk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHJlc09iajsKLSAgICBKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgZGVsZXRlQ291bnQ7IGsrKykgewogICAgICAg
ICBKU1ZhbHVlIHYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBrICsgYmVnaW4pOwogICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICByZXNPYmotPmluaXRpYWxpemVJbmRl
eChnbG9iYWxEYXRhLCBrLCB2KTsKKyAgICAgICAgcmVzT2JqLT5pbml0aWFsaXplSW5kZXgodm0s
IGssIHYpOwogICAgIH0KIAogICAgIHVuc2lnbmVkIGFkZGl0aW9uYWxBcmdzID0gc3RkOjptYXg8
aW50PihleGVjLT5hcmd1bWVudENvdW50KCkgLSAyLCAwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuaAkocmV2aXNpb24gMTQ4NjU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsOSArNDAsOSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgQ2xh
c3NJbmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8sIEFycmF5Q2xhc3MpOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8sIEFycmF5Q2xhc3MpOwogICAgIH0KIAogcHJvdGVjdGVkOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CYXRjaGVk
VHJhbnNpdGlvbk9wdGltaXplci5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9CYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw4ICszNCw4IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQmF0Y2hlZFRyYW5z
aXRpb25PcHRpbWl6ZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhdGNoZWRUcmFuc2l0
aW9uT3B0aW1pemVyKTsKIHB1YmxpYzoKLSAgICBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplcihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTT2JqZWN0KiBvYmplY3QpCi0gICAgICAgIDogbV9n
bG9iYWxEYXRhKCZnbG9iYWxEYXRhKQorICAgIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyKFZN
JiB2bSwgSlNPYmplY3QqIG9iamVjdCkKKyAgICAgICAgOiBtX3ZtKCZ2bSkKICAgICAgICAgLCBt
X29iamVjdChvYmplY3QpCiAgICAgewogICAgIH0KQEAgLTQzLDExICs0MywxMSBAQCBwdWJsaWM6
CiAgICAgfkJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyKCkKICAgICB7CiAgICAgICAgIGlmICht
X29iamVjdC0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgbV9vYmpl
Y3QtPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KCptX2dsb2JhbERhdGEpOworICAgICAgICAgICAg
bV9vYmplY3QtPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KCptX3ZtKTsKICAgICB9CiAKIHByaXZh
dGU6Ci0gICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CisgICAgVk0qIG1fdm07CiAgICAg
SlNPYmplY3QqIG1fb2JqZWN0OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxNDg2NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxOCArMzgsMTggQEAgQm9vbGVhbkNvbnN0cnVjdG9yOjpC
b29sZWFuQ29uc3RydWN0b3IoSgogCiB2b2lkIEJvb2xlYW5Db25zdHJ1Y3Rvcjo6ZmluaXNoQ3Jl
YXRpb24oRXhlY1N0YXRlKiBleGVjLCBCb29sZWFuUHJvdG90eXBlKiBib29sZWFuUHJvdG90eXBl
KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgYm9vbGVh
blByb3RvdHlwZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJv
dG90eXBlLCBib29sZWFuUHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25s
eSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwgYm9vbGVhblByb3RvdHlw
ZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRp
b24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgYm9vbGVhblBy
b3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogCiAgICAgLy8gbm8u
IG9mIGFyZ3VtZW50cyBmb3IgY29uc3RydWN0b3IKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpz
TnVtYmVyKDEpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CisgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCwganNOdW1iZXIoMSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0K
IAogLy8gRUNNQSAxNS42LjIKIEpTT2JqZWN0KiBjb25zdHJ1Y3RCb29sZWFuKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBCb29sZWFuT2JqZWN0KiBvYmogPSBC
b29sZWFuT2JqZWN0OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhc0ludGVybmFsRnVuY3Rp
b24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+Ym9vbGVhbk9iamVjdFN0cnVjdHVy
ZSgpKTsKLSAgICBvYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc0Jv
b2xlYW4oYXJncy5hdCgwKS50b0Jvb2xlYW4oZXhlYykpKTsKKyAgICBCb29sZWFuT2JqZWN0KiBv
YmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwgYXNJbnRlcm5hbEZ1bmN0aW9u
KGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUo
KSk7CisgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPnZtKCksIGpzQm9vbGVhbihhcmdz
LmF0KDApLnRvQm9vbGVhbihleGVjKSkpOwogICAgIHJldHVybiBvYmo7CiB9CiAKQEAgLTc5LDgg
Kzc5LDggQEAgQ2FsbFR5cGUgQm9vbGVhbkNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YQogCiBKU09i
amVjdCogY29uc3RydWN0Qm9vbGVhbkZyb21JbW1lZGlhdGVCb29sZWFuKEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBpbW1lZGlhdGVCb29sZWFu
VmFsdWUpCiB7Ci0gICAgQm9vbGVhbk9iamVjdCogb2JqID0gQm9vbGVhbk9iamVjdDo6Y3JlYXRl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5ib29sZWFuT2JqZWN0U3RydWN0dXJl
KCkpOwotICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIGltbWVk
aWF0ZUJvb2xlYW5WYWx1ZSk7CisgICAgQm9vbGVhbk9iamVjdCogb2JqID0gQm9vbGVhbk9iamVj
dDo6Y3JlYXRlKGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdC0+Ym9vbGVhbk9iamVjdFN0cnVjdHVy
ZSgpKTsKKyAgICBvYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+dm0oKSwgaW1tZWRpYXRlQm9v
bGVhblZhbHVlKTsKICAgICByZXR1cm4gb2JqOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMTQ4
NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDkgKzQwLDkgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpIAogICAgIHsgCi0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9i
YWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7IAogICAgIH0KIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbk9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbk9iamVjdC5jcHAJKHJldmlzaW9u
IDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5PYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNCArMzAsMTQgQEAgQVNTRVJUX0hBU19UUklWSUFM
X0RFU1RSVUNUT1IoQm9vbGVhbk9iagogCiBjb25zdCBDbGFzc0luZm8gQm9vbGVhbk9iamVjdDo6
c19pbmZvID0geyAiQm9vbGVhbiIsICZKU1dyYXBwZXJPYmplY3Q6OnNfaW5mbywgMCwgMCwgQ1JF
QVRFX01FVEhPRF9UQUJMRShCb29sZWFuT2JqZWN0KSB9OwogCi1Cb29sZWFuT2JqZWN0OjpCb29s
ZWFuT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
Ci0gICAgOiBKU1dyYXBwZXJPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQorQm9vbGVhbk9i
amVjdDo6Qm9vbGVhbk9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDog
SlNXcmFwcGVyT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCiB7CiB9CiAKLXZvaWQgQm9vbGVhbk9iamVj
dDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBCb29sZWFu
T2JqZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZ2xvYmFsRGF0YSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VS
VChpbmhlcml0cygmc19pbmZvKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Jvb2xlYW5PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Cb29sZWFuT2JqZWN0LmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsMjQgKzI3LDI0IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBCb29sZWFuT2JqZWN0IDog
cHVibGljIEpTV3JhcHBlck9iamVjdCB7CiBwcm90ZWN0ZWQ6Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgQm9vbGVhbk9iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIEJvb2xlYW5PYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAKIHB1YmxpYzoKICAgICB0eXBl
ZGVmIEpTV3JhcHBlck9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEJvb2xlYW5PYmplY3QqIGNy
ZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
IHN0YXRpYyBCb29sZWFuT2JqZWN0KiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKICAgICB7Ci0gICAgICAgIEJvb2xlYW5PYmplY3QqIGJvb2xlYW4gPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxCb29sZWFuT2JqZWN0PihnbG9iYWxEYXRhLmhlYXApKSBCb29sZWFuT2Jq
ZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgICAgIGJvb2xlYW4tPmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpOworICAgICAgICBCb29sZWFuT2JqZWN0KiBib29sZWFuID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8Qm9vbGVhbk9iamVjdD4odm0uaGVhcCkpIEJvb2xlYW5PYmpl
Y3Qodm0sIHN0cnVjdHVyZSk7CisgICAgICAgIGJvb2xlYW4tPmZpbmlzaENyZWF0aW9uKHZtKTsK
ICAgICAgICAgcmV0dXJuIGJvb2xlYW47CiAgICAgfQogICAgICAgICAKICAgICBzdGF0aWMgSlNf
RVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogICAgICAgICAKLSAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9v
bGVhblByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE0ICs1MSwxNCBAQCBjb25z
dCBDbGFzc0luZm8gQm9vbGVhblByb3RvdHlwZTo6c19pbmZvCiBBU1NFUlRfSEFTX1RSSVZJQUxf
REVTVFJVQ1RPUihCb29sZWFuUHJvdG90eXBlKTsKIAogQm9vbGVhblByb3RvdHlwZTo6Qm9vbGVh
blByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDog
Qm9vbGVhbk9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSkKKyAgICA6IEJvb2xl
YW5PYmplY3QoZXhlYy0+dm0oKSwgc3RydWN0dXJlKQogewogfQogCiB2b2lkIEJvb2xlYW5Qcm90
b3R5cGU6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqKQog
ewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgc2V0
SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIGpzQm9vbGVhbihmYWxzZSkpOworICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOworICAgIHNldEludGVybmFsVmFsdWUo
ZXhlYy0+dm0oKSwganNCb29sZWFuKGZhbHNlKSk7CiAKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNf
aW5mbykpOwogfQpAQCAtNzcsMjIgKzc3LDIyIEBAIGJvb2wgQm9vbGVhblByb3RvdHlwZTo6Z2V0
T3duUHJvcGVydHlEZXMKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib29sZWFuUHJv
dG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYg
KHRoaXNWYWx1ZSA9PSBqc0Jvb2xlYW4oZmFsc2UpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5mYWxzZVN0cmluZygpKTsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2bS0+c21hbGxTdHJpbmdzLmZhbHNlU3RyaW5nKCkpOwog
CiAgICAgaWYgKHRoaXNWYWx1ZSA9PSBqc0Jvb2xlYW4odHJ1ZSkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnRydWVTdHJpbmcoKSk7Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodm0tPnNtYWxsU3RyaW5ncy50cnVlU3RyaW5n
KCkpOwogCiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkJvb2xlYW5PYmplY3Q6OnNfaW5m
bykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogCiAgICAgaWYgKGFz
Qm9vbGVhbk9iamVjdCh0aGlzVmFsdWUpLT5pbnRlcm5hbFZhbHVlKCkgPT0ganNCb29sZWFuKGZh
bHNlKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShnbG9iYWxEYXRhLT5zbWFsbFN0
cmluZ3MuZmFsc2VTdHJpbmcoKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodm0t
PnNtYWxsU3RyaW5ncy5mYWxzZVN0cmluZygpKTsKIAogICAgIEFTU0VSVChhc0Jvb2xlYW5PYmpl
Y3QodGhpc1ZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpID09IGpzQm9vbGVhbih0cnVlKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MudHJ1ZVN0cmlu
ZygpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHZtLT5zbWFsbFN0cmluZ3MudHJ1ZVN0
cmluZygpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib29sZWFuUHJvdG9G
dW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDkgKzM4LDkgQEAgcHVibGljOgogICAgICAgICAKICAgICBzdGF0aWMgY29u
c3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEs
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pOwogICAgIH0KIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3
ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFz
cyBWTTsKIGNsYXNzIENvcHlWaXNpdG9yOwogc3RydWN0IEFycmF5U3RvcmFnZTsKIApAQCAtMTA0
LDEwICsxMDQsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQdWJs
aWNMZW5ndGgoKSB7IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hl
YWRlcjo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZWZWN0b3JMZW5ndGgoKSB7IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJ
bmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKTsgfQogICAgIAotICAgIHN0YXRp
YyBCdXR0ZXJmbHkqIGNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHBy
ZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRl
ciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzdGF0aWMgQnV0dGVy
Zmx5KiBjcmVhdGVVbmluaXRpYWxpemVkKFZNJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qg
cHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKIAotICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZShKU0ds
b2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBi
b29sIGhhc0luZGV4aW5nSGVhZGVyLCBjb25zdCBJbmRleGluZ0hlYWRlciYsIHNpemVfdCBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKEpT
R2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZShW
TSYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFz
SW5kZXhpbmdIZWFkZXIsIGNvbnN0IEluZGV4aW5nSGVhZGVyJiwgc2l6ZV90IGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoVk0mLCBTdHJ1
Y3R1cmUqKTsKICAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5n
Q29sbGVjdGlvbihDb3B5VmlzaXRvciYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3Bl
cnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyk7CiAgICAgCiAgICAgSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVy
KCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7IH0KQEAgLTE0NywyMCArMTQ3
LDIwIEBAIHB1YmxpYzoKICAgICB2b2lkKiBiYXNlKHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90
IHByb3BlcnR5Q2FwYWNpdHkpIHsgcmV0dXJuIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlD
YXBhY2l0eSAtIHByZUNhcGFjaXR5OyB9CiAgICAgdm9pZCogYmFzZShTdHJ1Y3R1cmUqKTsKIAot
ICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoQnV0dGVyZmx5Kiwg
SlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0eUNh
cGFjaXR5LCBib29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7IAorICAg
IHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoQnV0dGVyZmx5KiwgVk0m
LCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wg
aGFkSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywg
c2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgCiAKICAgICAvLyBUaGUgYnV0
dGVyZmx5IHJlYWxsb2NhdGlvbiBtZXRob2RzIHBlcmZvcm0gdGhlIHJlYWxsb2NhdGlvbiBpdHNl
bGYgYnV0IGRvIG5vdCBjaGFuZ2UgYW55CiAgICAgLy8gb2YgdGhlIG1ldGEtZGF0YSB0byByZWZs
ZWN0IHRoYXQgdGhlIHJlYWxsb2NhdGlvbiBvY2N1cnJlZC4gTm90ZSB0aGF0IHRoaXMgc2V0IG9m
CiAgICAgLy8gbWV0aG9kcyBpcyBub3QgZXhoYXVzdGl2ZSBhbmQgaXMgbm90IGludGVuZGVkIHRv
IGVuY2Fwc3VsYXRlIGFsbCBwb3NzaWJsZSBhbGxvY2F0aW9uCiAgICAgLy8gbW9kZXMgb2YgYnV0
dGVyZmxpZXMgLSB0aGVyZSBhcmUgY29kZSBwYXRocyB0aGF0IGFsbG9jYXRlIGJ1dHRlcmZsaWVz
IGJ5IGNhbGxpbmcKICAgICAvLyBkaXJlY3RseSBpbnRvIEhlYXA6OnRyeUFsbG9jYXRlU3RvcmFn
ZS4KLSAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6
ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRl
eGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3
UHJvcGVydHlDYXBhY2l0eSk7Ci0gICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdlKEpT
R2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3Qgb2xkUHJvcGVydHlD
YXBhY2l0eSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOwotICAgIEJ1dHRlcmZseSogZ3Jv
d1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwg
c2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOwotICAgIEJ1dHRlcmZseSogZ3Jvd0FycmF5Umln
aHQoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0
eUNhcGFjaXR5LCBib29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7IC8v
IEFzc3VtZXMgdGhhdCBwcmVDYXBhY2l0eSBpcyB6ZXJvLCBhbmQgYXNzZXJ0cyBhcyBtdWNoLgot
ICAgIEJ1dHRlcmZseSogZ3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwg
c2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBCdXR0ZXJmbHkqIHJl
c2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIG9s
ZEhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMs
IHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgYm9vbCBuZXdIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90
IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBCdXR0ZXJmbHkqIHJlc2l6ZUFy
cmF5KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6
ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgLy8gQXNzdW1lcyB0aGF0IHlvdSdy
ZSBub3QgY2hhbmdpbmcgd2hldGhlciBvciBub3QgdGhlIG9iamVjdCBoYXMgYW4gaW5kZXhpbmcg
aGVhZGVyLgorICAgIEJ1dHRlcmZseSogZ3Jvd1Byb3BlcnR5U3RvcmFnZShWTSYsIHNpemVfdCBw
cmVDYXBhY2l0eSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdI
ZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1Byb3Bl
cnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogZ3Jvd1Byb3BlcnR5U3RvcmFnZShWTSYsIFN0
cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90
IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogZ3Jvd1Byb3BlcnR5U3RvcmFn
ZShWTSYsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0
eSk7CisgICAgQnV0dGVyZmx5KiBncm93QXJyYXlSaWdodChWTSYsIFN0cnVjdHVyZSogb2xkU3Ry
dWN0dXJlLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYWRJbmRleGluZ0hlYWRlciwg
c2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3SW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpOyAvLyBBc3N1bWVzIHRoYXQgcHJlQ2FwYWNpdHkgaXMgemVybywg
YW5kIGFzc2VydHMgYXMgbXVjaC4KKyAgICBCdXR0ZXJmbHkqIGdyb3dBcnJheVJpZ2h0KFZNJiwg
U3RydWN0dXJlKiwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBC
dXR0ZXJmbHkqIHJlc2l6ZUFycmF5KFZNJiwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wg
b2xkSGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBib29sIG5ld0hhc0luZGV4aW5nSGVhZGVyLCBzaXpl
X3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIEJ1dHRlcmZseSogcmVzaXpl
QXJyYXkoVk0mLCBTdHJ1Y3R1cmUqLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIHNpemVfdCBuZXdJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7IC8vIEFzc3VtZXMgdGhhdCB5b3UncmUgbm90IGNo
YW5naW5nIHdoZXRoZXIgb3Igbm90IHRoZSBvYmplY3QgaGFzIGFuIGluZGV4aW5nIGhlYWRlci4K
ICAgICBCdXR0ZXJmbHkqIHVuc2hpZnQoU3RydWN0dXJlKiwgc2l6ZV90IG51bWJlck9mU2xvdHMp
OwogICAgIEJ1dHRlcmZseSogc2hpZnQoU3RydWN0dXJlKiwgc2l6ZV90IG51bWJlck9mU2xvdHMp
OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJm
bHlJbmxpbmVzLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMzIgKzMwLDMy
IEBACiAjaW5jbHVkZSAiQnV0dGVyZmx5LmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIK
KyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogCiBuYW1lc3BhY2UgSlND
IHsKIAotaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVy
dHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKQoraW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRp
YWxpemVkKFZNJiB2bSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0
eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKQogewogICAgIHZvaWQqIHRlbXA7CiAgICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJl
Q2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZ2xvYmFsRGF0YS5oZWFwLnRy
eUFsbG9jYXRlU3RvcmFnZShzaXplLCAmdGVtcCkpOworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmhl
YXAudHJ5QWxsb2NhdGVTdG9yYWdlKHNpemUsICZ0ZW1wKSk7CiAgICAgQnV0dGVyZmx5KiByZXN1
bHQgPSBmcm9tQmFzZSh0ZW1wLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9w
ZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBjb25zdCBJbmRleGluZ0hlYWRl
ciYgaW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK2lu
bGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlKFZNJiB2bSwgc2l6ZV90IHByZUNhcGFj
aXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgY29u
c3QgSW5kZXhpbmdIZWFkZXImIGluZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpCiB7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxp
emVkKAotICAgICAgICBnbG9iYWxEYXRhLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwg
aGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAgICAg
dm0sIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcikKICAg
ICAgICAgKnJlc3VsdC0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitpbmxpbmUgQnV0
dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQog
ewotICAgIHJldHVybiBjcmVhdGUoZ2xvYmFsRGF0YSwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpLCBoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwg
SW5kZXhpbmdIZWFkZXIoKSwgMCk7CisgICAgcmV0dXJuIGNyZWF0ZSh2bSwgMCwgc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSwgSW5kZXhpbmdIZWFkZXIoKSwgMCk7CiB9CiAKIGlubGluZSBCdXR0ZXJmbHkq
IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24oQ29weVZpc2l0
b3ImIHZpc2l0b3IsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHks
IGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cykKQEAgLTcyLDExICs3MiwxMSBAQCBpbmxpbmUgdm9pZCogQnV0dGVyZmx5OjpiYXNlKFN0cnVj
dHVyZSogCiAgICAgcmV0dXJuIGJhc2UoaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3Ry
dWN0dXJlKSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKIH0KIAotaW5saW5lIEJ1
dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwg
Ym9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZs
eTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShWTSYgdm0sIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90
IG9sZFByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQobmV3UHJvcGVydHlDYXBhY2l0eSA+IG9sZFByb3BlcnR5Q2FwYWNp
dHkpOwogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCgKLSAgICAg
ICAgZ2xvYmFsRGF0YSwgcHJlQ2FwYWNpdHksIG5ld1Byb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4
aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgICAgIHZtLCBwcmVD
YXBhY2l0eSwgbmV3UHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKICAgICBtZW1jcHkoCiAgICAgICAgIHJlc3VsdC0+cHJvcGVy
dHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNhcGFjaXR5LAogICAgICAgICBwcm9wZXJ0eVN0b3Jh
Z2UoKSAtIG9sZFByb3BlcnR5Q2FwYWNpdHksCkBAIC04NCw1MSArODQsNTEgQEAgaW5saW5lIEJ1
dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJvcGVydAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb2xkUHJvcGVy
dHlDYXBhY2l0eSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCitpbmxpbmUgQnV0dGVyZmx5
KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFj
aXR5KQogewogICAgIHJldHVybiBncm93UHJvcGVydHlTdG9yYWdlKAotICAgICAgICBnbG9iYWxE
YXRhLCBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBvbGRQcm9wZXJ0
eUNhcGFjaXR5LAorICAgICAgICB2bSwgaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3Ry
dWN0dXJlKSwgb2xkUHJvcGVydHlDYXBhY2l0eSwKICAgICAgICAgaGFzSW5kZXhpbmdIZWFkZXIo
c3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSksCiAgICAgICAgIGluZGV4aW5nSGVhZGVyKCktPmlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSksIG5ld1Byb3BlcnR5Q2FwYWNpdHkp
OwogfQogCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90
IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQ
cm9wZXJ0eVN0b3JhZ2UoVk0mIHZtLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG5l
d1Byb3BlcnR5Q2FwYWNpdHkpCiB7CiAgICAgcmV0dXJuIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoCi0g
ICAgICAgIGdsb2JhbERhdGEsIG9sZFN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpLCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICAgICAgdm0sIG9sZFN0cnVjdHVy
ZSwgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdQcm9wZXJ0eUNhcGFjaXR5
KTsKIH0KIAotaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJp
Z2h0KEJ1dHRlcmZseSogb2xkQnV0dGVyZmx5LCBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0
cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYWRJ
bmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXpl
X3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoQnV0dGVyZmx5KiBvbGRCdXR0ZXJmbHksIFZN
JiB2bSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBi
b29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKIHsKICAgICBpZiAoIW9s
ZEJ1dHRlcmZseSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxEYXRhLCAwLCBwcm9wZXJ0
eUNhcGFjaXR5LCB0cnVlLCBJbmRleGluZ0hlYWRlcigpLCBuZXdJbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyk7Ci0gICAgcmV0dXJuIG9sZEJ1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoZ2xvYmFs
RGF0YSwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eUNhcGFjaXR5LCBoYWRJbmRleGluZ0hlYWRlciwg
b2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZSh2bSwgMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1
ZSwgSW5kZXhpbmdIZWFkZXIoKSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAg
IHJldHVybiBvbGRCdXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0KHZtLCBvbGRTdHJ1Y3R1cmUsIHBy
b3BlcnR5Q2FwYWNpdHksIGhhZEluZGV4aW5nSGVhZGVyLCBvbGRJbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcywgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogfQogCi1pbmxpbmUgQnV0
dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29s
IGhhZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMs
IHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK2lubGluZSBCdXR0ZXJmbHkq
IEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQoVk0mIHZtLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVy
ZSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFkSW5kZXhpbmdIZWFkZXIsIHNpemVf
dCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKQogewogICAgIEFTU0VSVF9VTlVTRUQob2xkU3RydWN0dXJlLCAhaW5kZXhp
bmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkob2xkU3RydWN0dXJlKSk7CiAgICAgQVNTRVJUX1VOVVNF
RChvbGRTdHJ1Y3R1cmUsIGhhZEluZGV4aW5nSGVhZGVyID09IGhhc0luZGV4aW5nSGVhZGVyKG9s
ZFN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICB2b2lkKiB0aGVCYXNlID0gYmFzZSgw
LCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAgICBzaXplX3Qgb2xkU2l6ZSA9IHRvdGFsU2l6ZSgwLCBw
cm9wZXJ0eUNhcGFjaXR5LCBoYWRJbmRleGluZ0hlYWRlciwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpOwogICAgIHNpemVfdCBuZXdTaXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2Fw
YWNpdHksIHRydWUsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBpZiAoIWds
b2JhbERhdGEuaGVhcC50cnlSZWFsbG9jYXRlU3RvcmFnZSgmdGhlQmFzZSwgb2xkU2l6ZSwgbmV3
U2l6ZSkpCisgICAgaWYgKCF2bS5oZWFwLnRyeVJlYWxsb2NhdGVTdG9yYWdlKCZ0aGVCYXNlLCBv
bGRTaXplLCBuZXdTaXplKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGZyb21CYXNl
KHRoZUJhc2UsIDAsIHByb3BlcnR5Q2FwYWNpdHkpOwogfQogCi1pbmxpbmUgQnV0dGVyZmx5KiBC
dXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0
dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykK
K2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQoVk0mIHZtLCBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KQogewogICAgIHJldHVybiBncm93QXJyYXlSaWdodCgKLSAgICAgICAgZ2xvYmFsRGF0YSwgb2xk
U3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCisgICAgICAgIHZt
LCBvbGRTdHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwKICAgICAg
ICAgaGFzSW5kZXhpbmdIZWFkZXIob2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSksCiAgICAg
ICAgIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKG9sZFN0cnVj
dHVyZSksIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKIH0KIAotaW5saW5lIEJ1dHRl
cmZseSogQnV0dGVyZmx5OjpyZXNpemVBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNp
emVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIG9sZEhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3Qg
b2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgYm9v
bCBuZXdIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKQoraW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpyZXNpemVBcnJheShWTSYgdm0sIHNp
emVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIG9sZEhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3Qg
b2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgYm9v
bCBuZXdIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKQogewogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCgKLSAg
ICAgICAgZ2xvYmFsRGF0YSwgbmV3UHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIG5ld0hh
c0luZGV4aW5nSGVhZGVyLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgICAg
IHZtLCBuZXdQcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgbmV3SGFzSW5kZXhpbmdIZWFk
ZXIsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKICAgICAvLyBGSVhNRTogVGhpcyBj
b3VsZCBiZSBtYWRlIG11Y2ggbW9yZSBlZmZpY2llbnQgaWYgd2UgdXNlZCB0aGUgcHJvcGVydHkg
c2l6ZSwKICAgICAvLyBub3QgdGhlIGNhcGFjaXR5LgogICAgIHZvaWQqIHRvID0gcmVzdWx0LT5w
cm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHk7CkBAIC0xNDAsMTEgKzE0MCwxMSBA
QCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpyZXNpemVBcnJheShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbmV3UHJl
Q2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK2lubGluZSBC
dXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpCiB7CiAgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IEpTQzo6aGFzSW5kZXhp
bmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgcmV0dXJuIHJlc2l6ZUFy
cmF5KAotICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCks
IGhhc0luZGV4aW5nSGVhZGVyLAorICAgICAgICB2bSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpLCBoYXNJbmRleGluZ0hlYWRlciwKICAgICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+aW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKSwgbmV3UHJlQ2FwYWNpdHksCiAgICAg
ICAgIGhhc0luZGV4aW5nSGVhZGVyLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAJKHJl
dmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNo
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgdGVtcGxhdGUgPD4gc3RydWN0
IENhY2hlVHlwZXM8VW5saW5rZWRFdgogfTsKIAogdGVtcGxhdGUgPGNsYXNzIFVubGlua2VkQ29k
ZUJsb2NrVHlwZSwgY2xhc3MgRXhlY3V0YWJsZVR5cGU+Ci1VbmxpbmtlZENvZGVCbG9ja1R5cGUq
IENvZGVDYWNoZTo6Z2V0Q29kZUJsb2NrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNTY29w
ZSogc2NvcGUsIEV4ZWN1dGFibGVUeXBlKiBleGVjdXRhYmxlLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzLCBEZWJ1Z2dlck1vZGUgZGVidWdn
ZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJyb3IpCitV
bmxpbmtlZENvZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0Q29kZUJsb2NrKFZNJiB2bSwgSlNT
Y29wZSogc2NvcGUsIEV4ZWN1dGFibGVUeXBlKiBleGVjdXRhYmxlLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzLCBEZWJ1Z2dlck1vZGUgZGVi
dWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJyb3Ip
CiB7CiAgICAgU291cmNlQ29kZUtleSBrZXkgPSBTb3VyY2VDb2RlS2V5KHNvdXJjZSwgU3RyaW5n
KCksIENhY2hlVHlwZXM8VW5saW5rZWRDb2RlQmxvY2tUeXBlPjo6Y29kZVR5cGUsIHN0cmljdG5l
c3MpOwogICAgIENvZGVDYWNoZU1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fc291cmNlQ29k
ZS5hZGQoa2V5LCBTb3VyY2VDb2RlVmFsdWUoKSk7CkBAIC04OCwxNiArODgsMTYgQEAgVW5saW5r
ZWRDb2RlQmxvY2tUeXBlKiBDb2RlQ2FjaGU6OmdldENvZAogICAgIH0KIAogICAgIHR5cGVkZWYg
dHlwZW5hbWUgQ2FjaGVUeXBlczxVbmxpbmtlZENvZGVCbG9ja1R5cGU+OjpSb290Tm9kZSBSb290
Tm9kZTsKLSAgICBSZWZQdHI8Um9vdE5vZGU+IHJvb3ROb2RlID0gcGFyc2U8Um9vdE5vZGU+KCZn
bG9iYWxEYXRhLCBzb3VyY2UsIDAsIElkZW50aWZpZXIoKSwgc3RyaWN0bmVzcywgSlNQYXJzZVBy
b2dyYW1Db2RlLCBlcnJvcik7CisgICAgUmVmUHRyPFJvb3ROb2RlPiByb290Tm9kZSA9IHBhcnNl
PFJvb3ROb2RlPigmdm0sIHNvdXJjZSwgMCwgSWRlbnRpZmllcigpLCBzdHJpY3RuZXNzLCBKU1Bh
cnNlUHJvZ3JhbUNvZGUsIGVycm9yKTsKICAgICBpZiAoIXJvb3ROb2RlKSB7CiAgICAgICAgIG1f
c291cmNlQ29kZS5yZW1vdmUoYWRkUmVzdWx0Lml0ZXJhdG9yKTsKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogICAgIGV4ZWN1dGFibGUtPnJlY29yZFBhcnNlKHJvb3ROb2RlLT5mZWF0dXJlcygp
LCByb290Tm9kZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgcm9vdE5vZGUtPmxpbmVObygpLCBy
b290Tm9kZS0+bGFzdExpbmUoKSk7CiAKLSAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIHVubGlu
a2VkQ29kZSA9IFVubGlua2VkQ29kZUJsb2NrVHlwZTo6Y3JlYXRlKCZnbG9iYWxEYXRhLCBleGVj
dXRhYmxlLT5leGVjdXRhYmxlSW5mbygpKTsKKyAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIHVu
bGlua2VkQ29kZSA9IFVubGlua2VkQ29kZUJsb2NrVHlwZTo6Y3JlYXRlKCZ2bSwgZXhlY3V0YWJs
ZS0+ZXhlY3V0YWJsZUluZm8oKSk7CiAgICAgdW5saW5rZWRDb2RlLT5yZWNvcmRQYXJzZShyb290
Tm9kZS0+ZmVhdHVyZXMoKSwgcm9vdE5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIHJvb3RO
b2RlLT5saW5lTm8oKSAtIHNvdXJjZS5maXJzdExpbmUoKSwgcm9vdE5vZGUtPmxhc3RMaW5lKCkg
LSByb290Tm9kZS0+bGluZU5vKCkpOwotICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2Vu
ZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihnbG9iYWxEYXRhLCBzY29wZSwg
cm9vdE5vZGUuZ2V0KCksIHVubGlua2VkQ29kZSwgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUp
KSk7CisgICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3
IEJ5dGVjb2RlR2VuZXJhdG9yKHZtLCBzY29wZSwgcm9vdE5vZGUuZ2V0KCksIHVubGlua2VkQ29k
ZSwgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUpKSk7CiAgICAgZXJyb3IgPSBnZW5lcmF0b3It
PmdlbmVyYXRlKCk7CiAgICAgcm9vdE5vZGUtPmRlc3Ryb3lEYXRhKCk7CiAgICAgaWYgKGVycm9y
Lm1fdHlwZSAhPSBQYXJzZXJFcnJvcjo6RXJyb3JOb25lKSB7CkBAIC0xMTAsMjggKzExMCwyOCBA
QCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0Q29kCiAgICAgICAgIHJldHVy
biB1bmxpbmtlZENvZGU7CiAgICAgfQogCi0gICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IFNvdXJjZUNvZGVWYWx1ZShnbG9iYWxEYXRhLCB1bmxpbmtlZENvZGUsIG1fc291cmNlQ29kZS5h
Z2UoKSk7CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFNvdXJjZUNvZGVWYWx1ZSh2
bSwgdW5saW5rZWRDb2RlLCBtX3NvdXJjZUNvZGUuYWdlKCkpOwogICAgIHJldHVybiB1bmxpbmtl
ZENvZGU7CiB9CiAKLVVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogQ29kZUNhY2hlOjpnZXRQcm9n
cmFtQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvZ3JhbUV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQYXJzZXJTdHJpY3RuZXNz
IHN0cmljdG5lc3MsIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9m
aWxlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvcikKK1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jayog
Q29kZUNhY2hlOjpnZXRQcm9ncmFtQ29kZUJsb2NrKFZNJiB2bSwgUHJvZ3JhbUV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQYXJzZXJTdHJpY3RuZXNz
IHN0cmljdG5lc3MsIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9m
aWxlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvcikKIHsKLSAgICByZXR1cm4gZ2V0Q29kZUJsb2Nr
PFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4oZ2xvYmFsRGF0YSwgMCwgZXhlY3V0YWJsZSwgc291
cmNlLCBzdHJpY3RuZXNzLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3IpOworICAg
IHJldHVybiBnZXRDb2RlQmxvY2s8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPih2bSwgMCwgZXhl
Y3V0YWJsZSwgc291cmNlLCBzdHJpY3RuZXNzLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwg
ZXJyb3IpOwogfQogCi1VbmxpbmtlZEV2YWxDb2RlQmxvY2sqIENvZGVDYWNoZTo6Z2V0RXZhbENv
ZGVCbG9jayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTU2NvcGUqIHNjb3BlLCBFdmFsRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1BhcnNlclN0
cmljdG5lc3Mgc3RyaWN0bmVzcywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJN
b2RlIHByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yKQorVW5saW5rZWRFdmFsQ29kZUJs
b2NrKiBDb2RlQ2FjaGU6OmdldEV2YWxDb2RlQmxvY2soVk0mIHZtLCBKU1Njb3BlKiBzY29wZSwg
RXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQ
YXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MsIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFBy
b2ZpbGVyTW9kZSBwcm9maWxlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvcikKIHsKLSAgICByZXR1
cm4gZ2V0Q29kZUJsb2NrPFVubGlua2VkRXZhbENvZGVCbG9jaz4oZ2xvYmFsRGF0YSwgc2NvcGUs
IGV4ZWN1dGFibGUsIHNvdXJjZSwgc3RyaWN0bmVzcywgZGVidWdnZXJNb2RlLCBwcm9maWxlck1v
ZGUsIGVycm9yKTsKKyAgICByZXR1cm4gZ2V0Q29kZUJsb2NrPFVubGlua2VkRXZhbENvZGVCbG9j
az4odm0sIHNjb3BlLCBleGVjdXRhYmxlLCBzb3VyY2UsIHN0cmljdG5lc3MsIGRlYnVnZ2VyTW9k
ZSwgcHJvZmlsZXJNb2RlLCBlcnJvcik7CiB9CiAKLVVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KiBDb2RlQ2FjaGU6OmdldEZ1bmN0aW9uRXhlY3V0YWJsZUZyb21HbG9iYWxDb2RlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBQYXJzZXJFcnJvciYgZXJyb3IpCitVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZSogQ29kZUNhY2hlOjpnZXRGdW5jdGlvbkV4ZWN1dGFibGVGcm9tR2xvYmFsQ29kZShWTSYgdm0s
IGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgUGFyc2Vy
RXJyb3ImIGVycm9yKQogewogICAgIFNvdXJjZUNvZGVLZXkga2V5ID0gU291cmNlQ29kZUtleShz
b3VyY2UsIG5hbWUuc3RyaW5nKCksIFNvdXJjZUNvZGVLZXk6OkZ1bmN0aW9uVHlwZSwgSlNQYXJz
ZU5vcm1hbCk7CiAgICAgQ29kZUNhY2hlTWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9zb3Vy
Y2VDb2RlLmFkZChrZXksIFNvdXJjZUNvZGVWYWx1ZSgpKTsKICAgICBpZiAoIWFkZFJlc3VsdC5p
c05ld0VudHJ5KQogICAgICAgICByZXR1cm4ganNDYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKj4oYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5jZWxsLmdldCgpKTsKIAotICAgIFJlZlB0
cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbSA9IHBhcnNlPFByb2dyYW1Ob2RlPigmZ2xvYmFsRGF0YSwg
c291cmNlLCAwLCBJZGVudGlmaWVyKCksIEpTUGFyc2VOb3JtYWwsIEpTUGFyc2VQcm9ncmFtQ29k
ZSwgZXJyb3IpOworICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbSA9IHBhcnNlPFByb2dy
YW1Ob2RlPigmdm0sIHNvdXJjZSwgMCwgSWRlbnRpZmllcigpLCBKU1BhcnNlTm9ybWFsLCBKU1Bh
cnNlUHJvZ3JhbUNvZGUsIGVycm9yKTsKICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgQVNT
RVJUKGVycm9yLm1fdHlwZSAhPSBQYXJzZXJFcnJvcjo6RXJyb3JOb25lKTsKICAgICAgICAgbV9z
b3VyY2VDb2RlLnJlbW92ZShhZGRSZXN1bHQuaXRlcmF0b3IpOwpAQCAtMTQ5LDEwICsxNDksMTAg
QEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIENvZGVDYWNoZTo6ZwogICAgIEFTU0VSVChi
b2R5KTsKICAgICBBU1NFUlQoYm9keS0+aWRlbnQoKS5pc051bGwoKSk7CiAKLSAgICBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGU6OmNyZWF0ZSgmZ2xvYmFsRGF0YSwgc291cmNlLCBib2R5KTsKLSAgICBmdW5j
dGlvbkV4ZWN1dGFibGUtPm1fbmFtZVZhbHVlLnNldChnbG9iYWxEYXRhLCBmdW5jdGlvbkV4ZWN1
dGFibGUsIGpzU3RyaW5nKCZnbG9iYWxEYXRhLCBuYW1lLnN0cmluZygpKSk7CisgICAgVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlOjpjcmVhdGUoJnZtLCBzb3VyY2UsIGJvZHkpOworICAgIGZ1bmN0aW9uRXhl
Y3V0YWJsZS0+bV9uYW1lVmFsdWUuc2V0KHZtLCBmdW5jdGlvbkV4ZWN1dGFibGUsIGpzU3RyaW5n
KCZ2bSwgbmFtZS5zdHJpbmcoKSkpOwogCi0gICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IFNvdXJjZUNvZGVWYWx1ZShnbG9iYWxEYXRhLCBmdW5jdGlvbkV4ZWN1dGFibGUsIG1fc291cmNl
Q29kZS5hZ2UoKSk7CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFNvdXJjZUNvZGVW
YWx1ZSh2bSwgZnVuY3Rpb25FeGVjdXRhYmxlLCBtX3NvdXJjZUNvZGUuYWdlKCkpOwogICAgIHJl
dHVybiBmdW5jdGlvbkV4ZWN1dGFibGU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvZGVDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvZGVDYWNoZS5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAs
NyBAQCBjbGFzcyBVbmxpbmtlZEV2YWxDb2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CiBjbGFzcyBVbmxp
bmtlZFByb2dyYW1Db2RlQmxvY2s7Ci1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIHN0
cnVjdCBQYXJzZXJFcnJvcjsKIGNsYXNzIFNvdXJjZUNvZGU7CiBjbGFzcyBTb3VyY2VQcm92aWRl
cjsKQEAgLTEyMCw4ICsxMjAsOCBAQCBzdHJ1Y3QgU291cmNlQ29kZVZhbHVlIHsKICAgICB7CiAg
ICAgfQogCi0gICAgU291cmNlQ29kZVZhbHVlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlND
ZWxsKiBjZWxsLCBpbnQ2NF90IGFnZSkKLSAgICAgICAgOiBjZWxsKGdsb2JhbERhdGEsIGNlbGwp
CisgICAgU291cmNlQ29kZVZhbHVlKFZNJiB2bSwgSlNDZWxsKiBjZWxsLCBpbnQ2NF90IGFnZSkK
KyAgICAgICAgOiBjZWxsKHZtLCBjZWxsKQogICAgICAgICAsIGFnZShhZ2UpCiAgICAgewogICAg
IH0KQEAgLTIzOSw5ICsyMzksOSBAQCBjbGFzcyBDb2RlQ2FjaGUgewogcHVibGljOgogICAgIHN0
YXRpYyBQYXNzT3duUHRyPENvZGVDYWNoZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3
IENvZGVDYWNoZSk7IH0KIAotICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogZ2V0UHJvZ3Jh
bUNvZGVCbG9jayhKU0dsb2JhbERhdGEmLCBQcm9ncmFtRXhlY3V0YWJsZSosIGNvbnN0IFNvdXJj
ZUNvZGUmLCBKU1BhcnNlclN0cmljdG5lc3MsIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlLCBQ
YXJzZXJFcnJvciYpOwotICAgIFVubGlua2VkRXZhbENvZGVCbG9jayogZ2V0RXZhbENvZGVCbG9j
ayhKU0dsb2JhbERhdGEmLCBKU1Njb3BlKiwgRXZhbEV4ZWN1dGFibGUqLCBjb25zdCBTb3VyY2VD
b2RlJiwgSlNQYXJzZXJTdHJpY3RuZXNzLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSwgUGFy
c2VyRXJyb3ImKTsKLSAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZ2V0RnVuY3Rpb25F
eGVjdXRhYmxlRnJvbUdsb2JhbENvZGUoSlNHbG9iYWxEYXRhJiwgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFNvdXJjZUNvZGUmLCBQYXJzZXJFcnJvciYpOworICAgIFVubGlua2VkUHJvZ3JhbUNv
ZGVCbG9jayogZ2V0UHJvZ3JhbUNvZGVCbG9jayhWTSYsIFByb2dyYW1FeGVjdXRhYmxlKiwgY29u
c3QgU291cmNlQ29kZSYsIEpTUGFyc2VyU3RyaWN0bmVzcywgRGVidWdnZXJNb2RlLCBQcm9maWxl
ck1vZGUsIFBhcnNlckVycm9yJik7CisgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBnZXRFdmFs
Q29kZUJsb2NrKFZNJiwgSlNTY29wZSosIEV2YWxFeGVjdXRhYmxlKiwgY29uc3QgU291cmNlQ29k
ZSYsIEpTUGFyc2VyU3RyaWN0bmVzcywgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUsIFBhcnNl
ckVycm9yJik7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGdldEZ1bmN0aW9uRXhl
Y3V0YWJsZUZyb21HbG9iYWxDb2RlKFZNJiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFNvdXJj
ZUNvZGUmLCBQYXJzZXJFcnJvciYpOwogICAgIH5Db2RlQ2FjaGUoKTsKIAogICAgIHZvaWQgY2xl
YXIoKQpAQCAtMjUzLDcgKzI1Myw3IEBAIHByaXZhdGU6CiAgICAgQ29kZUNhY2hlKCk7CiAKICAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVW5saW5rZWRDb2RlQmxvY2tUeXBlLCBjbGFzcyBFeGVjdXRhYmxl
VHlwZT4gCi0gICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBnZXRDb2RlQmxvY2soSlNHbG9iYWxE
YXRhJiwgSlNTY29wZSosIEV4ZWN1dGFibGVUeXBlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTUGFy
c2VyU3RyaWN0bmVzcywgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUsIFBhcnNlckVycm9yJik7
CisgICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBnZXRDb2RlQmxvY2soVk0mLCBKU1Njb3BlKiwg
RXhlY3V0YWJsZVR5cGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNQYXJzZXJTdHJpY3RuZXNzLCBE
ZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImKTsKIAogICAgIENvZGVDYWNo
ZU1hcCBtX3NvdXJjZUNvZGU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uSWRlbnRpZmllcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMywxNSArMjMsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSNkZWZp
bmUgSU5JVElBTElaRV9QUk9QRVJUWV9OQU1FKG5hbWUpICwgbmFtZShnbG9iYWxEYXRhLCAjbmFt
ZSkKLSNkZWZpbmUgSU5JVElBTElaRV9LRVlXT1JEKG5hbWUpICwgbmFtZSMjS2V5d29yZChnbG9i
YWxEYXRhLCAjbmFtZSkKKyNkZWZpbmUgSU5JVElBTElaRV9QUk9QRVJUWV9OQU1FKG5hbWUpICwg
bmFtZSh2bSwgI25hbWUpCisjZGVmaW5lIElOSVRJQUxJWkVfS0VZV09SRChuYW1lKSAsIG5hbWUj
I0tleXdvcmQodm0sICNuYW1lKQogCi1Db21tb25JZGVudGlmaWVyczo6Q29tbW9uSWRlbnRpZmll
cnMoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorQ29tbW9uSWRlbnRpZmllcnM6OkNvbW1vbklk
ZW50aWZpZXJzKFZNKiB2bSkKICAgICA6IG51bGxJZGVudGlmaWVyKCkKICAgICAsIGVtcHR5SWRl
bnRpZmllcihJZGVudGlmaWVyOjpFbXB0eUlkZW50aWZpZXIpCi0gICAgLCB1bmRlcnNjb3JlUHJv
dG8oZ2xvYmFsRGF0YSwgIl9fcHJvdG9fXyIpCi0gICAgLCB0aGlzSWRlbnRpZmllcihnbG9iYWxE
YXRhLCAidGhpcyIpCi0gICAgLCB1c2VTdHJpY3RJZGVudGlmaWVyKGdsb2JhbERhdGEsICJ1c2Ug
c3RyaWN0IikKKyAgICAsIHVuZGVyc2NvcmVQcm90byh2bSwgIl9fcHJvdG9fXyIpCisgICAgLCB0
aGlzSWRlbnRpZmllcih2bSwgInRoaXMiKQorICAgICwgdXNlU3RyaWN0SWRlbnRpZmllcih2bSwg
InVzZSBzdHJpY3QiKQogICAgIEpTQ19DT01NT05fSURFTlRJRklFUlNfRUFDSF9LRVlXT1JEKElO
SVRJQUxJWkVfS0VZV09SRCkKICAgICBKU0NfQ09NTU9OX0lERU5USUZJRVJTX0VBQ0hfUFJPUEVS
VFlfTkFNRShJTklUSUFMSVpFX1BST1BFUlRZX05BTUUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgJKHJldmlzaW9uIDE0
ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw4ICsxNjEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBjbGFzcyBDb21tb25JZGVudGlmaWVycyB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KENvbW1vbklkZW50aWZpZXJzKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHJpdmF0
ZToKLSAgICAgICAgQ29tbW9uSWRlbnRpZmllcnMoSlNHbG9iYWxEYXRhKik7Ci0gICAgICAgIGZy
aWVuZCBjbGFzcyBKU0dsb2JhbERhdGE7CisgICAgICAgIENvbW1vbklkZW50aWZpZXJzKFZNKik7
CisgICAgICAgIGZyaWVuZCBjbGFzcyBWTTsKIAogICAgIHB1YmxpYzoKICAgICAgICAgY29uc3Qg
SWRlbnRpZmllciBudWxsSWRlbnRpZmllcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5
KQpAQCAtNzgsNyArNzgsNyBAQCBBTFdBWVNfSU5MSU5FIEV4ZWNTdGF0ZSogYXJpdHlDaGVja0Zv
cihFCiBpbmxpbmUgYm9vbCBvcEluKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBwcm9wTmFtZSwg
SlNWYWx1ZSBiYXNlVmFsKQogewogICAgIGlmICghYmFzZVZhbC5pc09iamVjdCgpKSB7Ci0gICAg
ICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBjcmVhdGVJbnZhbGlkUGFyYW1FcnJv
cihleGVjLCAiaW4iLCBiYXNlVmFsKTsKKyAgICAgICAgZXhlYy0+dm0oKS5leGNlcHRpb24gPSBj
cmVhdGVJbnZhbGlkUGFyYW1FcnJvcihleGVjLCAiaW4iLCBiYXNlVmFsKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIApAQCAtOTIsNyArOTIsNyBAQCBpbmxpbmUgYm9vbCBvcEluKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1CiAgICAgICAgIHJldHVybiBiYXNlT2JqLT5oYXNQcm9wZXJ0
eShleGVjLCBqc0Nhc3Q8TmFtZUluc3RhbmNlKj4ocHJvcE5hbWUuYXNDZWxsKCkpLT5wcml2YXRl
TmFtZSgpKTsKIAogICAgIElkZW50aWZpZXIgcHJvcGVydHkoZXhlYywgcHJvcE5hbWUudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmV4Y2Vw
dGlvbikKKyAgICBpZiAoZXhlYy0+dm0oKS5leGNlcHRpb24pCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICByZXR1cm4gYmFzZU9iai0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHkpOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHJl
dmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
Ym9vbCBjaGVja1N5bnRheChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSwgSlNWYWx1ZSogcmV0dXJuZWRFeGNlcHRpb24pCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmlkZW50aWZpZXJU
YWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRh
KCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpKTsKIAogICAgIFByb2dyYW1FeGVjdXRhYmxlKiBw
cm9ncmFtID0gUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZShleGVjLCBzb3VyY2UpOwogICAgIEpT
T2JqZWN0KiBlcnJvciA9IHByb2dyYW0tPmNoZWNrU3ludGF4KGV4ZWMpOwpAQCAtNTUsMTcgKzU1
LDE3IEBAIGJvb2wgY2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCAKIEpTVmFsdWUg
ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBKU1ZhbHVlKiByZXR1cm5lZEV4Y2VwdGlvbikKIHsKICAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKLSAgICBSRUxFQVNFX0FTU0VSVChleGVjLT5nbG9iYWxEYXRhKCku
aWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxl
KCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFleGVjLT5nbG9iYWxEYXRhKCkuaXNDb2xsZWN0b3JC
dXN5KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuaWRlbnRpZmllclRhYmxlID09
IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOworICAgIFJFTEVBU0Vf
QVNTRVJUKCFleGVjLT52bSgpLmlzQ29sbGVjdG9yQnVzeSgpKTsKIAogICAgIENvZGVQcm9maWxp
bmcgcHJvZmlsZShzb3VyY2UpOwogCiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHByb2dyYW0gPSBQ
cm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMsIHNvdXJjZSk7CiAgICAgaWYgKCFwcm9ncmFt
KSB7CiAgICAgICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikKLSAgICAgICAgICAgICpyZXR1cm5l
ZEV4Y2VwdGlvbiA9IGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb247CisgICAgICAgICAgICAq
cmV0dXJuZWRFeGNlcHRpb24gPSBleGVjLT52bSgpLmV4Y2VwdGlvbjsKIAotICAgICAgICBleGVj
LT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gSlNWYWx1ZSgpOworICAgICAgICBleGVjLT52bSgp
LmV4Y2VwdGlvbiA9IEpTVmFsdWUoKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVD
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDkgKzgx
LDkgQEAgRGF0ZUNvbnN0cnVjdG9yOjpEYXRlQ29uc3RydWN0b3IoSlNHbG9iYQogCiB2b2lkIERh
dGVDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBEYXRlUHJvdG90
eXBlKiBkYXRlUHJvdG90eXBlKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmds
b2JhbERhdGEoKSwgZGF0ZVByb3RvdHlwZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSk7Ci0gICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBkYXRlUHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxl
dGUgfCBSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xv
YmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcig3KSwgUmVh
ZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGV4ZWMtPnZtKCksIGRhdGVQcm90b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpOworICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUsIGRhdGVQcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcig3KSwgUmVhZE9ubHkgfCBEb250RW51
bSB8IERvbnREZWxldGUpOwogfQogCiBib29sIERhdGVDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVy
dHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QgJnNsb3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EYXRlQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDkgKzQwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIGNv
bnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgICAgICB9CiAKICAgICBwcm90
ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0
YW5jZS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RhdGVJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDIyICszNSwyMiBAQCBu
YW1lc3BhY2UgSlNDIHsKIGNvbnN0IENsYXNzSW5mbyBEYXRlSW5zdGFuY2U6OnNfaW5mbyA9IHsi
RGF0ZSIsICZKU1dyYXBwZXJPYmplY3Q6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShEYXRlSW5zdGFuY2UpfTsKIAogRGF0ZUluc3RhbmNlOjpEYXRlSW5zdGFuY2UoRXhlY1N0YXRl
KiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IEpTV3JhcHBlck9iamVjdChleGVj
LT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSkKKyAgICA6IEpTV3JhcHBlck9iamVjdChleGVjLT52
bSgpLCBzdHJ1Y3R1cmUpCiB7CiB9CiAKLXZvaWQgRGF0ZUluc3RhbmNlOjpmaW5pc2hDcmVhdGlv
bihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIERhdGVJbnN0YW5jZTo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwor
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5m
bykpOwotICAgIHNldEludGVybmFsVmFsdWUoZ2xvYmFsRGF0YSwganNOYU4oKSk7CisgICAgc2V0
SW50ZXJuYWxWYWx1ZSh2bSwganNOYU4oKSk7CiB9CiAKLXZvaWQgRGF0ZUluc3RhbmNlOjpmaW5p
c2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGRvdWJsZSB0aW1lKQordm9pZCBE
YXRlSW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgZG91YmxlIHRpbWUpCiB7Ci0gICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgc2V0SW50ZXJuYWxW
YWx1ZShnbG9iYWxEYXRhLCBqc051bWJlcih0aW1lQ2xpcCh0aW1lKSkpOworICAgIHNldEludGVy
bmFsVmFsdWUodm0sIGpzTnVtYmVyKHRpbWVDbGlwKHRpbWUpKSk7CiB9CiAKIHZvaWQgRGF0ZUlu
c3RhbmNlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKQEAgLTY1LDcgKzY1LDcgQEAgY29uc3QgR3Jl
Z29yaWFuRGF0ZVRpbWUqIERhdGVJbnN0YW5jZTo6YwogICAgICAgICByZXR1cm4gMDsKIAogICAg
IGlmICghbV9kYXRhKQotICAgICAgICBtX2RhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCkuZGF0ZUlu
c3RhbmNlQ2FjaGUuYWRkKG1pbGxpKTsKKyAgICAgICAgbV9kYXRhID0gZXhlYy0+dm0oKS5kYXRl
SW5zdGFuY2VDYWNoZS5hZGQobWlsbGkpOwogCiAgICAgaWYgKG1fZGF0YS0+bV9ncmVnb3JpYW5E
YXRlVGltZUNhY2hlZEZvck1TICE9IG1pbGxpKSB7CiAgICAgICAgIG1zVG9HcmVnb3JpYW5EYXRl
VGltZShleGVjLCBtaWxsaSwgZmFsc2UsIG1fZGF0YS0+bV9jYWNoZWRHcmVnb3JpYW5EYXRlVGlt
ZSk7CkBAIC04MSw3ICs4MSw3IEBAIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBEYXRlSW5zdGFu
Y2U6OmMKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIW1fZGF0YSkKLSAgICAgICAgbV9k
YXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpLmRhdGVJbnN0YW5jZUNhY2hlLmFkZChtaWxsaSk7Cisg
ICAgICAgIG1fZGF0YSA9IGV4ZWMtPnZtKCkuZGF0ZUluc3RhbmNlQ2FjaGUuYWRkKG1pbGxpKTsK
IAogICAgIGlmIChtX2RhdGEtPm1fZ3JlZ29yaWFuRGF0ZVRpbWVVVENDYWNoZWRGb3JNUyAhPSBt
aWxsaSkgewogICAgICAgICBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywgbWlsbGksIHRydWUs
IG1fZGF0YS0+bV9jYWNoZWRHcmVnb3JpYW5EYXRlVGltZVVUQyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuaAkocmV2aXNpb24gMTQ4NjU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDggKzI4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRGF0ZUlu
c3RhbmNlIDogcHVibGljIEpTV3JhcHBlck9iamVjdCB7CiAgICAgcHJvdGVjdGVkOgogICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBEYXRlSW5zdGFuY2UoRXhlY1N0YXRlKiwgU3RydWN0dXJlKik7
Ci0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJik7Ci0gICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiwgZG91Ymxl
KTsKKyAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgZG91YmxlKTsKIAogICAgICAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogIApAQCAtMzksMTQgKzM5LDE0IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBzdGF0aWMgRGF0ZUluc3RhbmNlKiBjcmVhdGUoRXhlY1N0YXRlKiBl
eGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgZG91YmxlIGRhdGUpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIERhdGVJbnN0YW5jZSogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxEYXRlSW5zdGFuY2U+KCpleGVjLT5oZWFwKCkpKSBEYXRlSW5zdGFuY2UoZXhlYywgc3RydWN0
dXJlKTsKLSAgICAgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxE
YXRhKCksIGRhdGUpOworICAgICAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGV4ZWMt
PnZtKCksIGRhdGUpOwogICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgICAgICB9CiAK
ICAgICAgICAgc3RhdGljIERhdGVJbnN0YW5jZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIHsKICAgICAgICAgICAgIERhdGVJbnN0YW5jZSog
aW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxEYXRlSW5zdGFuY2U+KCpleGVj
LT5oZWFwKCkpKSBEYXRlSW5zdGFuY2UoZXhlYywgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIGlu
c3RhbmNlLT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICAgICAg
aW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwogICAgICAgICAgICAgcmV0dXJu
IGluc3RhbmNlOwogICAgICAgICB9CiAKQEAgLTY4LDkgKzY4LDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICByZXR1cm4gY2FsY3VsYXRlR3JlZ29yaWFuRGF0ZVRpbWVVVEMoZXhlYyk7
CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9i
YWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVBy
b3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwOSw3ICs1MDksNyBAQCBEYXRlUHJvdG90
eXBlOjpEYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSogCiAKIHZvaWQgRGF0ZVByb3RvdHlwZTo6Zmlu
aXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCopCiB7Ci0gICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbihleGVjLT52bSgpKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogCiAg
ICAgLy8gVGhlIGNvbnN0cnVjdG9yIHdpbGwgYmUgYWRkZWQgbGF0ZXIsIGFmdGVyIERhdGVDb25z
dHJ1Y3RvciBoYXMgYmVlbiBidWlsdC4KQEAgLTg4Miw3ICs4ODIsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAKICAgICBkb3VibGUgbWlsbGkgPSB0aW1lQ2xp
cChleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc051bWJlcihtaWxsaSk7Ci0gICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCByZXN1bHQpOworICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZh
bHVlKGV4ZWMtPnZtKCksIHJlc3VsdCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOwogfQogCkBAIC04OTcsNyArODk3LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHNldE5l
d1ZhbHVlRnJvbVRpbQogICAgIAogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpIHx8IHN0
ZDo6aXNuYW4obWlsbGkpKSB7CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOYU4oKTsKLSAg
ICAgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBy
ZXN1bHQpOworICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT52bSgp
LCByZXN1bHQpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiAgICAg
fQogICAgICAKQEAgLTkxNCwxMiArOTE0LDEyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBzZXRO
ZXdWYWx1ZUZyb21UaW0KICAgICBncmVnb3JpYW5EYXRlVGltZS5jb3B5RnJvbSgqb3RoZXIpOwog
ICAgIGlmICghZmlsbFN0cnVjdHVyZXNVc2luZ1RpbWVBcmdzKGV4ZWMsIG51bUFyZ3NUb1VzZSwg
Jm1zLCAmZ3JlZ29yaWFuRGF0ZVRpbWUpKSB7CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNO
YU4oKTsKLSAgICAgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCByZXN1bHQpOworICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShl
eGVjLT52bSgpLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CiAgICAgfSAKICAgICAKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGdyZWdvcmlh
bkRhdGVUaW1lVG9NUyhleGVjLCBncmVnb3JpYW5EYXRlVGltZSwgbXMsIGlucHV0SXNVVEMpKTsK
LSAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIHJl
c3VsdCk7CisgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+dm0oKSwgcmVz
dWx0KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKQEAgLTkzMiw3
ICs5MzIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgc2V0TmV3VmFsdWVGcm9tRGF0CiAgICAg
RGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7CiAg
ICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpIHsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc05hTigpOwotICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5n
bG9iYWxEYXRhKCksIHJlc3VsdCk7CisgICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZh
bHVlKGV4ZWMtPnZtKCksIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKICAgICB9ICAgICAgCiAgICAgCkBAIC05NTQsMTIgKzk1NCwxMiBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgc2V0TmV3VmFsdWVGcm9tRGF0CiAgICAgCiAgICAgaWYgKCFmaWxsU3Ry
dWN0dXJlc1VzaW5nRGF0ZUFyZ3MoZXhlYywgbnVtQXJnc1RvVXNlLCAmbXMsICZncmVnb3JpYW5E
YXRlVGltZSkpIHsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc05hTigpOwotICAgICAgICB0
aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIHJlc3VsdCk7
CisgICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPnZtKCksIHJlc3Vs
dCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9IAogICAg
ICAgICAgICAKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1l
VG9NUyhleGVjLCBncmVnb3JpYW5EYXRlVGltZSwgbXMsIGlucHV0SXNVVEMpKTsKLSAgICB0aGlz
RGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIHJlc3VsdCk7Cisg
ICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+dm0oKSwgcmVzdWx0KTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKQEAgLTEwNTYsNyArMTA1Niw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKICAgICBEYXRlSW5z
dGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsKICAgICBpZiAo
IWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgeyAKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc05h
TigpOwotICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxE
YXRhKCksIHJlc3VsdCk7CisgICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4
ZWMtPnZtKCksIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKICAgICB9CiAKQEAgLTEwNzgsMTMgKzEwNzgsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdQogICAgIGRvdWJsZSB5ZWFyID0gZXhlYy0+YXJndW1lbnQoMCku
dG9JbnRlZ2VyUHJlc2VydmVOYU4oZXhlYyk7CiAgICAgaWYgKCFzdGQ6OmlzZmluaXRlKHllYXIp
KSB7CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOYU4oKTsKLSAgICAgICAgdGhpc0RhdGVP
YmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCByZXN1bHQpOworICAgICAg
ICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT52bSgpLCByZXN1bHQpOwogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQogCiAgICAgZ3JlZ29y
aWFuRGF0ZVRpbWUuc2V0WWVhcih0b0ludDMyKCh5ZWFyID49IDAgJiYgeWVhciA8PSA5OSkgPyAo
eWVhciArIDE5MDApIDogeWVhcikpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZ3Jl
Z29yaWFuRGF0ZVRpbWVUb01TKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lLCBtcywgZmFsc2UpKTsK
LSAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIHJl
c3VsdCk7CisgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+dm0oKSwgcmVz
dWx0KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKQEAgLTExMTEs
NyArMTExMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpOwogICAgIAotICAgIEpTVmFsdWUgdG9JU09WYWx1ZSA9IG9iamVjdC0+Z2V0
KGV4ZWMsIGV4ZWMtPmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT50b0lTT1N0cmluZyk7Cisg
ICAgSlNWYWx1ZSB0b0lTT1ZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9w
ZXJ0eU5hbWVzLT50b0lTT1N0cmluZyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuaAkocmV2aXNpb24gMTQ4
NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw5ICs0Niw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQog
CiAgICAgcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJy
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9y
LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXJyb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywzNyArNDcsMzcgQEAgc3RhdGljIGNvbnN0
IGNoYXIqIHNvdXJjZVVSTFByb3BlcnR5TmFtZQogSlNPYmplY3QqIGNyZWF0ZUVycm9yKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBB
U1NFUlQoIW1lc3NhZ2UuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3Jl
YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmVycm9yU3RydWN0
dXJlKCksIG1lc3NhZ2UpOworICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFs
T2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QtPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOwog
fQogCiBKU09iamVjdCogY3JlYXRlRXZhbEVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBBU1NFUlQoIW1lc3NhZ2UuaXNFbXB0
eSgpKTsKLSAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+Z2xv
YmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmV2YWxFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3Ry
dWN0dXJlKCksIG1lc3NhZ2UpOworICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xv
YmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QtPmV2YWxFcnJvckNvbnN0cnVjdG9yKCktPmVy
cm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOwogfQogCiBKU09iamVjdCogY3JlYXRlUmFuZ2VFcnJv
cihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7
CiAgICAgQVNTRVJUKCFtZXNzYWdlLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIEVycm9ySW5zdGFu
Y2U6OmNyZWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5yYW5n
ZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAgcmV0
dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVj
dC0+cmFuZ2VFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOwog
fQogCiBKU09iamVjdCogY3JlYXRlUmVmZXJlbmNlRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIEFTU0VSVCghbWVzc2FnZS5p
c0VtcHR5KCkpOwotICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0
LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+cmVmZXJlbmNlRXJyb3JDb25zdHJ1Y3Rvcigp
LT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKKyAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6
Y3JlYXRlKGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5yZWZlcmVuY2VFcnJvckNv
bnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOwogfQogCiBKU09iamVjdCog
Y3JlYXRlU3ludGF4RXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQogewogICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAgIHJl
dHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGds
b2JhbE9iamVjdC0+c3ludGF4RXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBt
ZXNzYWdlKTsKKyAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+
dm0oKSwgZ2xvYmFsT2JqZWN0LT5zeW50YXhFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0
dXJlKCksIG1lc3NhZ2UpOwogfQogCiBKU09iamVjdCogY3JlYXRlVHlwZUVycm9yKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBBU1NF
UlQoIW1lc3NhZ2UuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRl
KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPnR5cGVFcnJvckNvbnN0
cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOworICAgIHJldHVybiBFcnJvcklu
c3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QtPnR5cGVFcnJv
ckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOwogfQogCiBKU09iamVj
dCogY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKQEAgLTg4LDcgKzg4LDcgQEAgSlNPYmplY3QqIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKAogSlNPYmplY3QqIGNyZWF0ZVVSSUVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBBU1NFUlQoIW1lc3NhZ2UuaXNF
bXB0eSgpKTsKLSAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPlVSSUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JT
dHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShn
bG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdC0+VVJJRXJyb3JDb25zdHJ1Y3RvcigpLT5l
cnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKIH0KIAogSlNPYmplY3QqIGNyZWF0ZUVycm9yKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpAQCAtMTMzLDE1ICsxMzMsMTUg
QEAgSlNPYmplY3QqIGNyZWF0ZVVSSUVycm9yKEV4ZWNTdGF0ZSogZXhlYwogCiBKU09iamVjdCog
YWRkRXJyb3JJbmZvKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogZXJyb3IsIGludCBs
aW5lLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhID0gJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2bSA9ICZjYWxsRnJh
bWUtPnZtKCk7CiAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwgPSBzb3VyY2UucHJvdmlkZXIo
KS0+dXJsKCk7CiAKICAgICBpZiAobGluZSAhPSAtMSkKLSAgICAgICAgZXJyb3ItPnB1dERpcmVj
dCgqZ2xvYmFsRGF0YSwgSWRlbnRpZmllcihnbG9iYWxEYXRhLCBsaW5lUHJvcGVydHlOYW1lKSwg
anNOdW1iZXIobGluZSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CisgICAgICAgIGVycm9yLT5w
dXREaXJlY3QoKnZtLCBJZGVudGlmaWVyKHZtLCBsaW5lUHJvcGVydHlOYW1lKSwganNOdW1iZXIo
bGluZSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CiAgICAgaWYgKCFzb3VyY2VVUkwuaXNOdWxs
KCkpCi0gICAgICAgIGVycm9yLT5wdXREaXJlY3QoKmdsb2JhbERhdGEsIElkZW50aWZpZXIoZ2xv
YmFsRGF0YSwgc291cmNlVVJMUHJvcGVydHlOYW1lKSwganNTdHJpbmcoZ2xvYmFsRGF0YSwgc291
cmNlVVJMKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKKyAgICAgICAgZXJyb3ItPnB1dERpcmVj
dCgqdm0sIElkZW50aWZpZXIodm0sIHNvdXJjZVVSTFByb3BlcnR5TmFtZSksIGpzU3RyaW5nKHZt
LCBzb3VyY2VVUkwpLCBSZWFkT25seSB8IERvbnREZWxldGUpOwogCi0gICAgZ2xvYmFsRGF0YS0+
aW50ZXJwcmV0ZXItPmFkZFN0YWNrVHJhY2VJZk5lY2Vzc2FyeShjYWxsRnJhbWUsIGVycm9yKTsK
KyAgICB2bS0+aW50ZXJwcmV0ZXItPmFkZFN0YWNrVHJhY2VJZk5lY2Vzc2FyeShjYWxsRnJhbWUs
IGVycm9yKTsKIAogICAgIHJldHVybiBlcnJvcjsKIH0KQEAgLTE1NiwxNCArMTU2LDE0IEBAIGJv
b2wgaGFzRXJyb3JJbmZvKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmoKIEpTVmFsdWUgdGhyb3dFcnJv
cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZXJyb3IpCiB7CiAgICAgSW50ZXJwcmV0ZXI6OmFk
ZFN0YWNrVHJhY2VJZk5lY2Vzc2FyeShleGVjLCBlcnJvcik7Ci0gICAgZXhlYy0+Z2xvYmFsRGF0
YSgpLmV4Y2VwdGlvbiA9IGVycm9yOworICAgIGV4ZWMtPnZtKCkuZXhjZXB0aW9uID0gZXJyb3I7
CiAgICAgcmV0dXJuIGVycm9yOwogfQogCiBKU09iamVjdCogdGhyb3dFcnJvcihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBlcnJvcikKIHsKICAgICBJbnRlcnByZXRlcjo6YWRkU3RhY2tUcmFj
ZUlmTmVjZXNzYXJ5KGV4ZWMsIGVycm9yKTsKLSAgICBleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0
aW9uID0gZXJyb3I7CisgICAgZXhlYy0+dm0oKS5leGNlcHRpb24gPSBlcnJvcjsKICAgICByZXR1
cm4gZXJyb3I7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuaAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICBjbGFzcyBFeGVjU3RhdGU7Ci0gICAgY2xhc3MgSlNHbG9iYWxEYXRhOworICAgIGNsYXNzIFZN
OwogICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIGNsYXNzIEpTT2JqZWN0OwogICAgIGNs
YXNzIFNvdXJjZUNvZGU7CkBAIC04OSw3ICs4OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBzdGF0aWMgU3RyaWN0TW9kZVR5cGVFcnJvckZ1bmN0aW9uKiBjcmVhdGUoRXhlY1N0YXRlKiBl
eGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgICAgICB7CiAgICAgICAgICAgICBTdHJpY3RNb2Rl
VHlwZUVycm9yRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
U3RyaWN0TW9kZVR5cGVFcnJvckZ1bmN0aW9uPigqZXhlYy0+aGVhcCgpKSkgU3RyaWN0TW9kZVR5
cGVFcnJvckZ1bmN0aW9uKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBtZXNzYWdlKTsKLSAgICAg
ICAgICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIFN0cmlu
ZygpKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpLCBT
dHJpbmcoKSk7CiAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb247CiAgICAgICAgIH0KICAgICAK
QEAgLTExOSw5ICsxMTksOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgY29u
c3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKSAKICAgICAgICAgeyAKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCisgICAgICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAKICAgICAgICAgfQogCiAgICAg
cHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vy
cm9yQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzks
MTAgKzM5LDEwIEBAIEVycm9yQ29uc3RydWN0b3I6OkVycm9yQ29uc3RydWN0b3IoSlNHbG8KIAog
dm9pZCBFcnJvckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEVy
cm9yUHJvdG90eXBlKiBlcnJvclByb3RvdHlwZSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bihleGVjLT5nbG9iYWxEYXRhKCksIGVycm9yUHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NO
YW1lKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpLCBlcnJvclByb3RvdHlw
ZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSk7CiAgICAgLy8gRUNNQSAxNS4xMS4zLjEgRXJyb3Iu
cHJvdG90eXBlCi0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0
YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBlcnJvclByb3RvdHlwZSwgRG9u
dEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwg
anNOdW1iZXIoMSksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
cHJvdG90eXBlLCBlcnJvclByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9u
bHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkg
fCBEb250RW51bSk7CiB9CiAKIC8vIEVDTUEgMTUuOS4zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxNDg2NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDkgKzQxLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpIAorICAgICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCiAgICAgICAgIHsgCi0gICAgICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7IAorICAgICAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCiAgICAgICAg
IH0KIAogICAgIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Vycm9ySW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsOCArMzAsOCBAQCBBU1NFUlRfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUihFcnJvckluc3RhCiAK
IGNvbnN0IENsYXNzSW5mbyBFcnJvckluc3RhbmNlOjpzX2luZm8gPSB7ICJFcnJvciIsICZKU05v
bkZpbmFsT2JqZWN0OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoRXJyb3JJbnN0
YW5jZSkgfTsKIAotRXJyb3JJbnN0YW5jZTo6RXJyb3JJbnN0YW5jZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogSlNOb25GaW5hbE9iamVjdChn
bG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCitFcnJvckluc3RhbmNlOjpFcnJvckluc3RhbmNlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1
Y3R1cmUpCiAgICAgLCBtX2FwcGVuZFNvdXJjZVRvTWVzc2FnZShmYWxzZSkKIHsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgJKHJldmlz
aW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFu
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjEgKzMxLDIxIEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhFcnJvckluc3RhbmNlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKEVycm9ySW5zdGFuY2VUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8pOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIEVycm9ySW5zdGFuY2UqIGNy
ZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCisgICAgICAgIHN0YXRpYyBFcnJvckluc3RhbmNlKiBjcmVhdGUo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBFcnJvckluc3RhbmNlKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEVycm9ySW5zdGFuY2U+KGdsb2JhbERhdGEuaGVhcCkpIEVycm9ySW5z
dGFuY2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIGluc3RhbmNlLT5maW5p
c2hDcmVhdGlvbihnbG9iYWxEYXRhLCBtZXNzYWdlKTsKKyAgICAgICAgICAgIEVycm9ySW5zdGFu
Y2UqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXJyb3JJbnN0YW5jZT4o
dm0uaGVhcCkpIEVycm9ySW5zdGFuY2Uodm0sIHN0cnVjdHVyZSk7CisgICAgICAgICAgICBpbnN0
YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIG1lc3NhZ2UpOwogICAgICAgICAgICAgcmV0dXJuIGlu
c3RhbmNlOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIEVycm9ySW5zdGFuY2UqIGNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1ZhbHVlIG1lc3NhZ2Up
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBzdHJ1Y3R1cmUsIG1lc3NhZ2UuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogbWVzc2FnZS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZShl
eGVjLT52bSgpLCBzdHJ1Y3R1cmUsIG1lc3NhZ2UuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDog
bWVzc2FnZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICB9CiAKICAgICAg
ICAgYm9vbCBhcHBlbmRTb3VyY2VUb01lc3NhZ2UoKSB7IHJldHVybiBtX2FwcGVuZFNvdXJjZVRv
TWVzc2FnZTsgfQpAQCAtNTMsMTQgKzUzLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIGNsZWFyQXBwZW5kU291cmNlVG9NZXNzYWdlKCkgeyBtX2FwcGVuZFNvdXJjZVRvTWVzc2Fn
ZSA9IGZhbHNlOyB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIGV4cGxpY2l0IEVycm9ySW5z
dGFuY2UoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CisgICAgICAgIGV4cGxpY2l0IEVycm9y
SW5zdGFuY2UoVk0mLCBTdHJ1Y3R1cmUqKTsKIAotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorICAgICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAg
ICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgICAgIEFTU0VSVChp
bmhlcml0cygmc19pbmZvKSk7CiAgICAgICAgICAgICBpZiAoIW1lc3NhZ2UuaXNOdWxsKCkpCi0g
ICAgICAgICAgICAgICAgcHV0RGlyZWN0KGdsb2JhbERhdGEsIGdsb2JhbERhdGEucHJvcGVydHlO
YW1lcy0+bWVzc2FnZSwganNTdHJpbmcoJmdsb2JhbERhdGEsIG1lc3NhZ2UpLCBEb250RW51bSk7
CisgICAgICAgICAgICAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5tZXNzYWdl
LCBqc1N0cmluZygmdm0sIG1lc3NhZ2UpLCBEb250RW51bSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBib29sIG1fYXBwZW5kU291cmNlVG9NZXNzYWdlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTQ4NjU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCwxNSArNTAsMTUgQEAgY29uc3QgQ2xhc3NJbmZvIEVycm9yUHJvdG90
eXBlOjpzX2luZm8gPQogKi8KIAogRXJyb3JQcm90b3R5cGU6OkVycm9yUHJvdG90eXBlKEV4ZWNT
dGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBFcnJvckluc3RhbmNlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKQorICAgIDogRXJyb3JJbnN0YW5jZShleGVjLT52
bSgpLCBzdHJ1Y3R1cmUpCiB7CiB9CiAKIHZvaWQgRXJyb3JQcm90b3R5cGU6OmZpbmlzaENyZWF0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqKQogewotICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgIiIpOworICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGV4ZWMtPnZtKCksICIiKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwotICAg
IHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1l
LCBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiRXJyb3IiKSkp
LCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
RXJyb3IiKSkpLCBEb250RW51bSk7CiB9CiAKIGJvb2wgRXJyb3JQcm90b3R5cGU6OmdldE93blBy
b3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90ICZzbG90KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw5ICs0MCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKEVycm9ySW5zdGFuY2VUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oRXJyb3JJbnN0YW5jZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCShyZXZpc2lvbiAxNDg2NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBKU1ZhbHVlIFRlcm1pbmF0ZWRFeGVjdXRp
b25FcnJvcjo6ZGVmYXVsCiAgICAgcmV0dXJuIEpTVmFsdWUoUU5hTik7CiB9CiAKLUpTT2JqZWN0
KiBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSkKK0pTT2JqZWN0KiBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKFZNKiB2
bSkKIHsKLSAgICByZXR1cm4gVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpjcmVhdGUoKmdsb2Jh
bERhdGEpOworICAgIHJldHVybiBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZSgqdm0p
OwogfQogCiBib29sIGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU09iamVjdCogb2Jq
ZWN0KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIEpTT2JqZWN0KiB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJv
cihFeGVjU3QKIEpTT2JqZWN0KiB0aHJvd1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIEludGVycHJldGVyOjpFcnJvckhhbmRsaW5nTW9kZSBtb2Rl
KGV4ZWMpOwotICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVRlcm1pbmF0ZWRFeGVj
dXRpb25FeGNlcHRpb24oJmV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIGNyZWF0ZVRlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oJmV4ZWMtPnZtKCkp
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUpTT2JqZWN0KiBj
cmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTR2xvYmFsRGF0YSopOworSlNPYmpl
Y3QqIGNyZWF0ZVRlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oVk0qKTsKIGJvb2wgaXNUZXJt
aW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTT2JqZWN0Kik7CiBKU19FWFBPUlRfUFJJVkFURSBi
b29sIGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU1ZhbHVlKTsKIApAQCAtNTQsOCAr
NTQsOCBAQCBKU09iamVjdCogdGhyb3dUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0CiAKIGNsYXNz
IFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHBy
aXZhdGU6Ci0gICAgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKLSAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIGdsb2JhbERhdGEu
dGVybWluYXRlZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlLmdldCgpKQorICAgIFRlcm1pbmF0ZWRF
eGVjdXRpb25FcnJvcihWTSYgdm0pCisgICAgICAgIDogSlNOb25GaW5hbE9iamVjdCh2bSwgdm0u
dGVybWluYXRlZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlLmdldCgpKQogICAgIHsKICAgICB9CiAK
QEAgLTY0LDE2ICs2NCwxNiBAQCBwcml2YXRlOgogcHVibGljOgogICAgIHR5cGVkZWYgSlNOb25G
aW5hbE9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvciog
Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICBzdGF0aWMgVGVybWluYXRlZEV4
ZWN1dGlvbkVycm9yKiBjcmVhdGUoVk0mIHZtKQogICAgIHsKLSAgICAgICAgVGVybWluYXRlZEV4
ZWN1dGlvbkVycm9yKiBlcnJvciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFRlcm1pbmF0
ZWRFeGVjdXRpb25FcnJvcj4oZ2xvYmFsRGF0YS5oZWFwKSkgVGVybWluYXRlZEV4ZWN1dGlvbkVy
cm9yKGdsb2JhbERhdGEpOwotICAgICAgICBlcnJvci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0
YSk7CisgICAgICAgIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvciogZXJyb3IgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I+KHZtLmhlYXApKSBUZXJt
aW5hdGVkRXhlY3V0aW9uRXJyb3Iodm0pOworICAgICAgICBlcnJvci0+ZmluaXNoQ3JlYXRpb24o
dm0pOwogICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgfQogCi0gICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTX0VYUE9S
VERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTQsMTQgKzk0LDE0IEBAIEludHJpbnNpYyBOYXRpdmVFeGVjdXRhYmxlOjppbnRyaW5zaWMoKSAK
ICNpZiBFTkFCTEUoSklUKQogLy8gVXRpbGl0eSBtZXRob2QgdXNlZCBmb3IgamV0dGlzb25pbmcg
Y29kZSBibG9ja3MuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIHZvaWQgamV0dGlzb25D
b2RlQmxvY2soSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBPd25QdHI8VD4mIGNvZGVCbG9jaykK
K3N0YXRpYyB2b2lkIGpldHRpc29uQ29kZUJsb2NrKFZNJiB2bSwgT3duUHRyPFQ+JiBjb2RlQmxv
Y2spCiB7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmdl
dEpJVFR5cGUoKSkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwogICAg
IE93blB0cjxUPiBjb2RlQmxvY2tUb0pldHRpc29uID0gY29kZUJsb2NrLnJlbGVhc2UoKTsKICAg
ICBjb2RlQmxvY2sgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFQ+KGNvZGVCbG9ja1RvSmV0dGlzb24t
PnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKICAgICBjb2RlQmxvY2tUb0pldHRpc29uLT51bmxpbmtJ
bmNvbWluZ0NhbGxzKCk7Ci0gICAgZ2xvYmFsRGF0YS5oZWFwLmpldHRpc29uREZHQ29kZUJsb2Nr
KHN0YXRpY19wb2ludGVyX2Nhc3Q8Q29kZUJsb2NrPihjb2RlQmxvY2tUb0pldHRpc29uLnJlbGVh
c2UoKSkpOworICAgIHZtLmhlYXAuamV0dGlzb25ERkdDb2RlQmxvY2soc3RhdGljX3BvaW50ZXJf
Y2FzdDxDb2RlQmxvY2s+KGNvZGVCbG9ja1RvSmV0dGlzb24ucmVsZWFzZSgpKSk7CiB9CiAjZW5k
aWYKIApAQCAtMTE3LDcgKzExNyw3IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6ZGVzdHJveShK
U0NlbGwqIGMKIGNvbnN0IENsYXNzSW5mbyBFdmFsRXhlY3V0YWJsZTo6c19pbmZvID0geyAiRXZh
bEV4ZWN1dGFibGUiLCAmU2NyaXB0RXhlY3V0YWJsZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEV2YWxFeGVjdXRhYmxlKSB9OwogCiBFdmFsRXhlY3V0YWJsZTo6RXZhbEV4ZWN1
dGFibGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGJvb2wgaW5T
dHJpY3RDb250ZXh0KQotICAgIDogU2NyaXB0RXhlY3V0YWJsZShleGVjLT5nbG9iYWxEYXRhKCku
ZXZhbEV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIGV4ZWMsIHNvdXJjZSwgaW5TdHJpY3RDb250
ZXh0KQorICAgIDogU2NyaXB0RXhlY3V0YWJsZShleGVjLT52bSgpLmV2YWxFeGVjdXRhYmxlU3Ry
dWN0dXJlLmdldCgpLCBleGVjLCBzb3VyY2UsIGluU3RyaWN0Q29udGV4dCkKIHsKIH0KIApAQCAt
MTI5LDcgKzEyOSw3IEBAIHZvaWQgRXZhbEV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWwK
IGNvbnN0IENsYXNzSW5mbyBQcm9ncmFtRXhlY3V0YWJsZTo6c19pbmZvID0geyAiUHJvZ3JhbUV4
ZWN1dGFibGUiLCAmU2NyaXB0RXhlY3V0YWJsZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKFByb2dyYW1FeGVjdXRhYmxlKSB9OwogCiBQcm9ncmFtRXhlY3V0YWJsZTo6UHJvZ3Jh
bUV4ZWN1dGFibGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCi0g
ICAgOiBTY3JpcHRFeGVjdXRhYmxlKGV4ZWMtPmdsb2JhbERhdGEoKS5wcm9ncmFtRXhlY3V0YWJs
ZVN0cnVjdHVyZS5nZXQoKSwgZXhlYywgc291cmNlLCBmYWxzZSkKKyAgICA6IFNjcmlwdEV4ZWN1
dGFibGUoZXhlYy0+dm0oKS5wcm9ncmFtRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgZXhlYywg
c291cmNlLCBmYWxzZSkKIHsKIH0KIApAQCAtMTQwLDkgKzE0MCw5IEBAIHZvaWQgUHJvZ3JhbUV4
ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKiAKIAogY29uc3QgQ2xhc3NJbmZvIEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6c19pbmZvID0geyAiRnVuY3Rpb25FeGVjdXRhYmxlIiwgJlNjcmlwdEV4ZWN1dGFi
bGU6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShGdW5jdGlvbkV4ZWN1dGFibGUp
IH07CiAKLUZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rpb25FeGVjdXRhYmxlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlLCB1bnNpZ25lZCBmaXJzdExpbmUsIHVuc2ln
bmVkIGxhc3RMaW5lKQotICAgIDogU2NyaXB0RXhlY3V0YWJsZShnbG9iYWxEYXRhLmZ1bmN0aW9u
RXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgZ2xvYmFsRGF0YSwgc291cmNlLCB1bmxpbmtlZEV4
ZWN1dGFibGUtPmlzSW5TdHJpY3RDb250ZXh0KCkpCi0gICAgLCBtX3VubGlua2VkRXhlY3V0YWJs
ZShnbG9iYWxEYXRhLCB0aGlzLCB1bmxpbmtlZEV4ZWN1dGFibGUpCitGdW5jdGlvbkV4ZWN1dGFi
bGU6OkZ1bmN0aW9uRXhlY3V0YWJsZShWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwg
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSwgdW5zaWduZWQg
Zmlyc3RMaW5lLCB1bnNpZ25lZCBsYXN0TGluZSkKKyAgICA6IFNjcmlwdEV4ZWN1dGFibGUodm0u
ZnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCB2bSwgc291cmNlLCB1bmxpbmtlZEV4
ZWN1dGFibGUtPmlzSW5TdHJpY3RDb250ZXh0KCkpCisgICAgLCBtX3VubGlua2VkRXhlY3V0YWJs
ZSh2bSwgdGhpcywgdW5saW5rZWRFeGVjdXRhYmxlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFz
b3VyY2UuaXNOdWxsKCkpOwogICAgIEFTU0VSVChzb3VyY2UubGVuZ3RoKCkpOwpAQCAtMTU3LDcg
KzE1Nyw3IEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpkZXN0cm95KEpTQ2VsbCoKIAogSlNP
YmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywg
SlNTY29wZSogc2NvcGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgQVNTRVJUKGV4
ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICBBU1NFUlQoZXhlYy0+
dm0oKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKICAgICBBU1NFUlQoISFtX2V2YWxDb2RlQmxvY2sp
OwogICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAgICAgaWYgKG1fZXZhbENvZGVCbG9jay0+Z2V0
SklUVHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkKQEAgLTE5Niw3ICsxOTYsNyBAQCBK
U09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hCiAgICAgVU5VU0VEX1BBUkFN
KGppdFR5cGUpOwogICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKICNlbmRpZgotICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgCiAgICAgaWYgKCEhbV9ldmFs
Q29kZUJsb2NrKSB7CkBAIC0yMDUsNyArMjA1LDcgQEAgSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxl
Ojpjb21waWxlSW50ZXJuYQogICAgICAgICBtX2V2YWxDb2RlQmxvY2sgPSBuZXdDb2RlQmxvY2su
cmVsZWFzZSgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFVOVVNFRF9QQVJBTShzY29wZSk7Ci0g
ICAgICAgIFVOVVNFRF9QQVJBTShnbG9iYWxEYXRhKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHZt
KTsKICAgICAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgICAgICBp
ZiAoIWxleGljYWxHbG9iYWxPYmplY3QtPmV2YWxFbmFibGVkKCkpCiAgICAgICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVFdmFsRXJyb3IoZXhlYywgbGV4aWNhbEdsb2JhbE9i
amVjdC0+ZXZhbERpc2FibGVkRXJyb3JNZXNzYWdlKCkpKTsKQEAgLTIxNyw3ICsyMTcsNyBAQCBK
U09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hCiAKICAgICAgICAgT3duUHRy
PENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxvY2sgPSBtX2V2YWxDb2RlQmxvY2sucmVsZWFzZSgp
OwogICAgICAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9
PSAhcHJldmlvdXNDb2RlQmxvY2spOwotICAgICAgICBtX3VubGlua2VkRXZhbENvZGVCbG9jay5z
ZXQoKmdsb2JhbERhdGEsIHRoaXMsIHVubGlua2VkRXZhbENvZGUpOworICAgICAgICBtX3VubGlu
a2VkRXZhbENvZGVCbG9jay5zZXQoKnZtLCB0aGlzLCB1bmxpbmtlZEV2YWxDb2RlKTsKICAgICAg
ICAgbV9ldmFsQ29kZUJsb2NrID0gYWRvcHRQdHIobmV3IEV2YWxDb2RlQmxvY2sodGhpcywgdW5s
aW5rZWRFdmFsQ29kZSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwg
c2NvcGUtPmxvY2FsRGVwdGgoKSwgcHJldmlvdXNDb2RlQmxvY2sucmVsZWFzZSgpKSk7CiAgICAg
ICAgIG1fZXZhbENvZGVCbG9jay0+Y29weVBvc3RQYXJzZURhdGFGcm9tQWx0ZXJuYXRpdmUoKTsK
ICAgICB9CkBAIC0yMzcsOSArMjM3LDkgQEAgSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21w
aWxlSW50ZXJuYQogfQogCiAjaWYgRU5BQkxFKEpJVCkKLXZvaWQgRXZhbEV4ZWN1dGFibGU6Ompl
dHRpc29uT3B0aW1pemVkQ29kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEV2YWxF
eGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGUoVk0mIHZtKQogewotICAgIGpldHRpc29u
Q29kZUJsb2NrKGdsb2JhbERhdGEsIG1fZXZhbENvZGVCbG9jayk7CisgICAgamV0dGlzb25Db2Rl
QmxvY2sodm0sIG1fZXZhbENvZGVCbG9jayk7CiAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IG1fZXZh
bENvZGVCbG9jay0+Z2V0SklUQ29kZSgpOwogICAgIEFTU0VSVCghbV9qaXRDb2RlRm9yQ2FsbFdp
dGhBcml0eUNoZWNrKTsKIH0KQEAgLTI3Nyw5ICsyNzcsOSBAQCB2b2lkIEV2YWxFeGVjdXRhYmxl
OjpjbGVhckNvZGUoKQogSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjaGVja1N5bnRheChF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgUGFyc2VyRXJyb3IgZXJyb3I7Ci0gICAgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKTsKLSAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dyYW1O
b2RlID0gcGFyc2U8UHJvZ3JhbU5vZGU+KGdsb2JhbERhdGEsIG1fc291cmNlLCAwLCBJZGVudGlm
aWVyKCksIEpTUGFyc2VOb3JtYWwsIFByb2dyYW1Ob2RlOjppc0Z1bmN0aW9uTm9kZSA/IEpTUGFy
c2VGdW5jdGlvbkNvZGUgOiBKU1BhcnNlUHJvZ3JhbUNvZGUsIGVycm9yKTsKKyAgICBSZWZQdHI8
UHJvZ3JhbU5vZGU+IHByb2dyYW1Ob2RlID0gcGFyc2U8UHJvZ3JhbU5vZGU+KHZtLCBtX3NvdXJj
ZSwgMCwgSWRlbnRpZmllcigpLCBKU1BhcnNlTm9ybWFsLCBQcm9ncmFtTm9kZTo6aXNGdW5jdGlv
bk5vZGUgPyBKU1BhcnNlRnVuY3Rpb25Db2RlIDogSlNQYXJzZVByb2dyYW1Db2RlLCBlcnJvcik7
CiAgICAgaWYgKHByb2dyYW1Ob2RlKQogICAgICAgICByZXR1cm4gMDsKICAgICBBU1NFUlQoZXJy
b3IubV90eXBlICE9IFBhcnNlckVycm9yOjpFcnJvck5vbmUpOwpAQCAtMjg4LDcgKzI4OCw3IEBA
IEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y2hlY2tTeW50YXgKIAogSlNPYmplY3QqIFBy
b2dyYW1FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29w
ZSogc2NvcGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOworICAgIFJFTEVBU0VfQVNT
RVJUKGV4ZWMtPnZtKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CiAgICAgQVNTRVJUKCEhbV9wcm9n
cmFtQ29kZUJsb2NrKTsKICAgICBKU09iamVjdCogZXJyb3IgPSAwOwogICAgIGlmIChtX3Byb2dy
YW1Db2RlQmxvY2stPmdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BUaWVySklUKCkpCkBAIC0z
MzgsOSArMzM4LDkgQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZQog
fQogCiAjaWYgRU5BQkxFKEpJVCkKLXZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OmpldHRpc29uT3B0
aW1pemVkQ29kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIFByb2dyYW1FeGVjdXRh
YmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGUoVk0mIHZtKQogewotICAgIGpldHRpc29uQ29kZUJs
b2NrKGdsb2JhbERhdGEsIG1fcHJvZ3JhbUNvZGVCbG9jayk7CisgICAgamV0dGlzb25Db2RlQmxv
Y2sodm0sIG1fcHJvZ3JhbUNvZGVCbG9jayk7CiAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IG1fcHJv
Z3JhbUNvZGVCbG9jay0+Z2V0SklUQ29kZSgpOwogICAgIEFTU0VSVCghbV9qaXRDb2RlRm9yQ2Fs
bFdpdGhBcml0eUNoZWNrKTsKIH0KQEAgLTM3MywyMSArMzczLDIxIEBAIGludCBQcm9ncmFtRXhl
Y3V0YWJsZTo6YWRkR2xvYmFsVmFyKEpTR2wKICAgICByZXR1cm4gaW5kZXg7CiB9CiAKLUpTT2Jq
ZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6aW5pdGlhbGl6ZUdsb2JhbFByb3BlcnRpZXMoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNTY29wZSogc2NvcGUp
CitKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmluaXRpYWxpemVHbG9iYWxQcm9wZXJ0aWVz
KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTU2NvcGUqIHNjb3BlKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKHNjb3BlKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
c2NvcGUtPmdsb2JhbE9iamVjdCgpOwogICAgIFJFTEVBU0VfQVNTRVJUKGdsb2JhbE9iamVjdCk7
Ci0gICAgQVNTRVJUKCZnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSA9PSAmZ2xvYmFsRGF0YSk7
CisgICAgQVNTRVJUKCZnbG9iYWxPYmplY3QtPnZtKCkgPT0gJnZtKTsKIAogICAgIEpTT2JqZWN0
KiBleGNlcHRpb24gPSAwOwogICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRD
b2RlID0gZ2xvYmFsT2JqZWN0LT5jcmVhdGVQcm9ncmFtQ29kZUJsb2NrKGNhbGxGcmFtZSwgdGhp
cywgJmV4Y2VwdGlvbik7CiAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIGV4Y2Vw
dGlvbjsKIAotICAgIG1fdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLnNldChnbG9iYWxEYXRhLCB0
aGlzLCB1bmxpbmtlZENvZGUpOworICAgIG1fdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLnNldCh2
bSwgdGhpcywgdW5saW5rZWRDb2RlKTsKIAotICAgIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVy
IG9wdGltaXplcihnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QpOworICAgIEJhdGNoZWRUcmFuc2l0
aW9uT3B0aW1pemVyIG9wdGltaXplcih2bSwgZ2xvYmFsT2JqZWN0KTsKIAogICAgIGNvbnN0IFVu
bGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6VmFyaWFibGVEZWNsYXRpb25zJiB2YXJpYWJsZURlY2xh
cmF0aW9ucyA9IHVubGlua2VkQ29kZS0+dmFyaWFibGVEZWNsYXJhdGlvbnMoKTsKICAgICBjb25z
dCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OkZ1bmN0aW9uRGVjbGF0aW9ucyYgZnVuY3Rpb25E
ZWNsYXJhdGlvbnMgPSB1bmxpbmtlZENvZGUtPmZ1bmN0aW9uRGVjbGFyYXRpb25zKCk7CkBAIC0z
OTksMTIgKzM5OSwxMiBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmluaXRpYWxpemVH
CiAgICAgQ2FsbEZyYW1lKiBnbG9iYWxFeGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7
CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uRGVjbGFyYXRpb25zLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIGJvb2wgcHJvcGVydHlEaWRFeGlzdCA9IGdsb2JhbE9iamVjdC0+
cmVtb3ZlRGlyZWN0KGdsb2JhbERhdGEsIGZ1bmN0aW9uRGVjbGFyYXRpb25zW2ldLmZpcnN0KTsg
Ly8gTmV3bHkgZGVjbGFyZWQgZnVuY3Rpb25zIG92ZXJ3cml0ZSBleGlzdGluZyBwcm9wZXJ0aWVz
LgorICAgICAgICBib29sIHByb3BlcnR5RGlkRXhpc3QgPSBnbG9iYWxPYmplY3QtPnJlbW92ZURp
cmVjdCh2bSwgZnVuY3Rpb25EZWNsYXJhdGlvbnNbaV0uZmlyc3QpOyAvLyBOZXdseSBkZWNsYXJl
ZCBmdW5jdGlvbnMgb3ZlcndyaXRlIGV4aXN0aW5nIHByb3BlcnRpZXMuCiAgICAgICAgIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSA9IGZ1bmN0
aW9uRGVjbGFyYXRpb25zW2ldLnNlY29uZC5nZXQoKTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjLCB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZS0+bGluayhnbG9iYWxEYXRhLCBtX3NvdXJjZSwgbGluZU5vKCksIDApLCBzY29wZSk7CisgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU0Z1bmN0aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYywgdW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUtPmxpbmsodm0sIG1fc291cmNlLCBsaW5lTm8oKSwgMCksIHNj
b3BlKTsKICAgICAgICAgaW50IGluZGV4ID0gYWRkR2xvYmFsVmFyKGdsb2JhbE9iamVjdCwgZnVu
Y3Rpb25EZWNsYXJhdGlvbnNbaV0uZmlyc3QsIElzVmFyaWFibGUsCiAgICAgICAgICAgICAhcHJv
cGVydHlEaWRFeGlzdCA/IElzRnVuY3Rpb25Ub1NwZWNpYWxpemUgOiBOb3RGdW5jdGlvbk9yTm90
U3BlY2lhbGl6YWJsZSk7Ci0gICAgICAgIGdsb2JhbE9iamVjdC0+cmVnaXN0ZXJBdChpbmRleCku
c2V0KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgICAgICBnbG9iYWxPYmpl
Y3QtPnJlZ2lzdGVyQXQoaW5kZXgpLnNldCh2bSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAg
fQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YXJpYWJsZURlY2xhcmF0aW9ucy5zaXpl
KCk7ICsraSkgewpAQCAtNDU2LDcgKzQ1Niw3IEBAIEZ1bmN0aW9uQ29kZUJsb2NrKiBGdW5jdGlv
bkV4ZWN1dGFibGU6OmIKIAogSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9w
dGltaXplZEZvckNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChleGVjLT5nbG9iYWxEYXRhKCku
ZHluYW1pY0dsb2JhbE9iamVjdCk7CisgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5keW5h
bWljR2xvYmFsT2JqZWN0KTsKICAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNhbGwpOwogICAg
IEpTT2JqZWN0KiBlcnJvciA9IDA7CiAgICAgaWYgKG1fY29kZUJsb2NrRm9yQ2FsbC0+Z2V0SklU
VHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkKQEAgLTQ2Nyw3ICs0NjcsNyBAQCBKU09i
amVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlT3B0CiAKIEpTT2JqZWN0KiBGdW5jdGlv
bkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVj
LCBKU1Njb3BlKiBzY29wZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBSRUxFQVNF
X0FTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CisgICAgUkVM
RUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKICAgICBBU1NFUlQo
ISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CiAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAg
ICBpZiAobV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjp0
b3BUaWVySklUKCkpCkBAIC00OTMsMTIgKzQ5MywxMiBAQCBQYXNzT3duUHRyPEZ1bmN0aW9uQ29k
ZUJsb2NrPiBGdW5jdGlvbkV4CiAgICAgaWYgKCEhY29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9u
S2luZCkpCiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2soQ29k
ZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ssICpjb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5k
KSkpOwogCi0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gc2NvcGUtPmdsb2JhbERhdGEo
KTsKKyAgICBWTSogdm0gPSBzY29wZS0+dm0oKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gc2NvcGUtPmdsb2JhbE9iamVjdCgpOwogICAgIFBhcnNlckVycm9yIGVycm9yOwog
ICAgIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUgPSBnbG9iYWxPYmplY3QtPmhhc0RlYnVnZ2Vy
KCkgPyBEZWJ1Z2dlck9uIDogRGVidWdnZXJPZmY7CiAgICAgUHJvZmlsZXJNb2RlIHByb2ZpbGVy
TW9kZSA9IGdsb2JhbE9iamVjdC0+aGFzUHJvZmlsZXIoKSA/IFByb2ZpbGVyT24gOiBQcm9maWxl
ck9mZjsKLSAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jayA9
IG1fdW5saW5rZWRFeGVjdXRhYmxlLT5jb2RlQmxvY2tGb3IoKmdsb2JhbERhdGEsIHNjb3BlLCBt
X3NvdXJjZSwgc3BlY2lhbGl6YXRpb25LaW5kLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwg
ZXJyb3IpOworICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2Nr
ID0gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmNvZGVCbG9ja0Zvcigqdm0sIHNjb3BlLCBtX3NvdXJj
ZSwgc3BlY2lhbGl6YXRpb25LaW5kLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3Ip
OwogICAgIHJlY29yZFBhcnNlKG1fdW5saW5rZWRFeGVjdXRhYmxlLT5mZWF0dXJlcygpLCBtX3Vu
bGlua2VkRXhlY3V0YWJsZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgbGluZU5vKCksIGxhc3RM
aW5lKCkpOwogCiAgICAgaWYgKCF1bmxpbmtlZENvZGVCbG9jaykgewpAQCAtNTg1LDE2ICs1ODUs
MTYgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogfQogCiAjaWYg
RU5BQkxFKEpJVCkKLXZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENv
ZGVGb3JDYWxsKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgRnVuY3Rpb25FeGVjdXRh
YmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDYWxsKFZNJiB2bSkKIHsKLSAgICBqZXR0aXNv
bkNvZGVCbG9jayhnbG9iYWxEYXRhLCBtX2NvZGVCbG9ja0ZvckNhbGwpOworICAgIGpldHRpc29u
Q29kZUJsb2NrKHZtLCBtX2NvZGVCbG9ja0ZvckNhbGwpOwogICAgIG1faml0Q29kZUZvckNhbGwg
PSBtX2NvZGVCbG9ja0ZvckNhbGwtPmdldEpJVENvZGUoKTsKICAgICBtX2ppdENvZGVGb3JDYWxs
V2l0aEFyaXR5Q2hlY2sgPSBtX2NvZGVCbG9ja0ZvckNhbGwtPmdldEpJVENvZGVXaXRoQXJpdHlD
aGVjaygpOwogfQogCi12b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRD
b2RlRm9yQ29uc3RydWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgRnVuY3Rpb25F
eGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QoVk0mIHZtKQogewot
ICAgIGpldHRpc29uQ29kZUJsb2NrKGdsb2JhbERhdGEsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0
KTsKKyAgICBqZXR0aXNvbkNvZGVCbG9jayh2bSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOwog
ICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5nZXRK
SVRDb2RlKCk7CiAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sgPSBtX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdC0+Z2V0SklUQ29kZVdpdGhBcml0eUNoZWNrKCk7CiB9CkBAIC02
NTgsNyArNjU4LDcgQEAgRnVuY3Rpb25FeGVjdXRhYmxlKiBGdW5jdGlvbkV4ZWN1dGFibGU6Ogog
ICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gc291cmNlLnN0YXJ0T2Zmc2V0KCkgKyB1bmxpbmtl
ZEZ1bmN0aW9uLT5zdGFydE9mZnNldCgpOwogICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCA9IHVu
bGlua2VkRnVuY3Rpb24tPnNvdXJjZUxlbmd0aCgpOwogICAgIFNvdXJjZUNvZGUgZnVuY3Rpb25T
b3VyY2Uoc291cmNlLnByb3ZpZGVyKCksIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCArIHNvdXJj
ZUxlbmd0aCwgZmlyc3RMaW5lKTsKLSAgICByZXR1cm4gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVh
dGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvblNvdXJjZSwgdW5saW5rZWRGdW5jdGlvbiwg
Zmlyc3RMaW5lLCB1bmxpbmtlZEZ1bmN0aW9uLT5saW5lQ291bnQoKSk7CisgICAgcmV0dXJuIEZ1
bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGZ1bmN0aW9uU291cmNlLCB1bmxp
bmtlZEZ1bmN0aW9uLCBmaXJzdExpbmUsIHVubGlua2VkRnVuY3Rpb24tPmxpbmVDb3VudCgpKTsK
IH0KIAogU3RyaW5nIEZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFyYW1TdHJpbmcoKSBjb25zdApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24g
MTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC02OCwxNiArNjgsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgTlVNX1BBUkFNRVRFUlNfSVNfSE9TVCA9IDA7CiAgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEID0gLTE7CiAKLSAgICAg
ICAgRXhlY3V0YWJsZUJhc2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgaW50IG51bVBhcmFtZXRlcnMpCi0gICAgICAgICAgICA6IEpTQ2VsbChnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUpCisgICAgICAgIEV4ZWN1dGFibGVCYXNlKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIGludCBudW1QYXJhbWV0ZXJzKQorICAgICAgICAgICAgOiBKU0NlbGwodm0s
IHN0cnVjdHVyZSkKICAgICAgICAgICAgICwgbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbChudW1QYXJh
bWV0ZXJzKQogICAgICAgICAgICAgLCBtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1Y3QobnVtUGFy
YW1ldGVycykKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mIHZtKQogICAgICAgICB7Ci0gICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihn
bG9iYWxEYXRhKTsKKyAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAg
ICAgfQogCiAgICAgcHVibGljOgpAQCAtMTAyLDcgKzEwMiw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgcmV0dXJuIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwgPT0gTlVNX1BBUkFNRVRF
UlNfSVNfSE9TVDsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKENvbXBvdW5kVHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsgfQorICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvKSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywg
VHlwZUluZm8oQ29tcG91bmRUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyB9CiAgICAg
ICAgIAogICAgICAgICB2b2lkIGNsZWFyQ29kZSgpOwogCkBAIC0yNzEsMjYgKzI3MSwyNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdHlwZWRlZiBFeGVjdXRhYmxlQmFzZSBCYXNlOwogCiAj
aWYgRU5BQkxFKEpJVCkKLSAgICAgICAgc3RhdGljIE5hdGl2ZUV4ZWN1dGFibGUqIGNyZWF0ZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjYWxsVGh1bmss
IE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29uc3RydWN0
VGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBJbnRyaW5zaWMgaW50cmluc2ljKQor
ICAgICAgICBzdGF0aWMgTmF0aXZlRXhlY3V0YWJsZSogY3JlYXRlKFZNJiB2bSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGNhbGxUaHVuaywgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBjb25zdHJ1Y3RUaHVuaywgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3Is
IEludHJpbnNpYyBpbnRyaW5zaWMpCiAgICAgICAgIHsKICAgICAgICAgICAgIE5hdGl2ZUV4ZWN1
dGFibGUqIGV4ZWN1dGFibGU7CiAgICAgICAgICAgICBpZiAoIWNhbGxUaHVuaykgewotICAgICAg
ICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxOYXRpdmVF
eGVjdXRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBOYXRpdmVFeGVjdXRhYmxlKGdsb2JhbERhdGEs
IGZ1bmN0aW9uLCBjb25zdHJ1Y3Rvcik7Ci0gICAgICAgICAgICAgICAgZXhlY3V0YWJsZS0+Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgSklUQ29kZSgpLCBKSVRDb2RlKCksIGludHJpbnNpYyk7
CisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PE5hdGl2ZUV4ZWN1dGFibGU+KHZtLmhlYXApKSBOYXRpdmVFeGVjdXRhYmxlKHZtLCBmdW5jdGlv
biwgY29uc3RydWN0b3IpOworICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0
aW9uKHZtLCBKSVRDb2RlKCksIEpJVENvZGUoKSwgaW50cmluc2ljKTsKICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPE5hdGl2ZUV4ZWN1dGFibGU+KGdsb2JhbERhdGEuaGVhcCkpIE5hdGl2ZUV4ZWN1dGFi
bGUoZ2xvYmFsRGF0YSwgZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKLSAgICAgICAgICAgICAgICBl
eGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBKSVRDb2RlOjpIb3N0RnVuY3Rp
b24oY2FsbFRodW5rKSwgSklUQ29kZTo6SG9zdEZ1bmN0aW9uKGNvbnN0cnVjdFRodW5rKSwgaW50
cmluc2ljKTsKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8TmF0aXZlRXhlY3V0YWJsZT4odm0uaGVhcCkpIE5hdGl2ZUV4ZWN1dGFibGUodm0s
IGZ1bmN0aW9uLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZS0+Zmlu
aXNoQ3JlYXRpb24odm0sIEpJVENvZGU6Okhvc3RGdW5jdGlvbihjYWxsVGh1bmspLCBKSVRDb2Rl
OjpIb3N0RnVuY3Rpb24oY29uc3RydWN0VGh1bmspLCBpbnRyaW5zaWMpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiAgICAgICAgIH0KICNlbmRpZgogCiAj
aWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKLSAgICAgICAgc3RhdGljIE5hdGl2ZUV4ZWN1dGFibGUq
IGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9u
LCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKKyAgICAgICAgc3RhdGljIE5hdGl2ZUV4ZWN1
dGFibGUqIGNyZWF0ZShWTSYgdm0sIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5j
dGlvbiBjb25zdHJ1Y3RvcikKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFnbG9iYWxE
YXRhLmNhblVzZUpJVCgpKTsKLSAgICAgICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFi
bGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxOYXRpdmVFeGVjdXRhYmxlPihnbG9iYWxE
YXRhLmhlYXApKSBOYXRpdmVFeGVjdXRhYmxlKGdsb2JhbERhdGEsIGZ1bmN0aW9uLCBjb25zdHJ1
Y3Rvcik7Ci0gICAgICAgICAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRh
KTsKKyAgICAgICAgICAgIEFTU0VSVCghdm0uY2FuVXNlSklUKCkpOworICAgICAgICAgICAgTmF0
aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE5h
dGl2ZUV4ZWN1dGFibGU+KHZtLmhlYXApKSBOYXRpdmVFeGVjdXRhYmxlKHZtLCBmdW5jdGlvbiwg
Y29uc3RydWN0b3IpOworICAgICAgICAgICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24odm0p
OwogICAgICAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiAgICAgICAgIH0KICNlbmRpZgpAQCAt
MzIwLDcgKzMyMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihOYXRpdmVFeGVjdXRhYmxlLCBtX2NvbnN0cnVjdG9yKTsKICAgICAgICAgfQog
Ci0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8p
IHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJv
dG8sIFR5cGVJbmZvKExlYWZUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyB9CisgICAg
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhMZWFmVHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CiAKQEAgLTMyOCw5ICszMjgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
IHByb3RlY3RlZDoKICNpZiBFTkFCTEUoSklUKQotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSklUQ29kZSBjYWxsVGh1bmssIEpJVENvZGUgY29u
c3RydWN0VGh1bmssIEludHJpbnNpYyBpbnRyaW5zaWMpCisgICAgICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBKSVRDb2RlIGNhbGxUaHVuaywgSklUQ29kZSBjb25zdHJ1Y3RUaHVuaywg
SW50cmluc2ljIGludHJpbnNpYykKICAgICAgICAgewotICAgICAgICAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgICAgICAgICBtX2ppdENvZGVGb3JDYWxsID0gY2FsbFRodW5rOwogICAgICAgICAg
ICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gY29uc3RydWN0VGh1bms7CiAgICAgICAgICAgICBt
X2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBjYWxsVGh1bmsuYWRkcmVzc0ZvckNhbGwo
KTsKQEAgLTM0MCw4ICszNDAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgTmF0aXZlRXhlY3V0YWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKLSAg
ICAgICAgICAgIDogRXhlY3V0YWJsZUJhc2UoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5uYXRpdmVF
eGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBOVU1fUEFSQU1FVEVSU19JU19IT1NUKQorICAgICAg
ICBOYXRpdmVFeGVjdXRhYmxlKFZNJiB2bSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE5hdGl2
ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQorICAgICAgICAgICAgOiBFeGVjdXRhYmxlQmFzZSh2bSwg
dm0ubmF0aXZlRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgTlVNX1BBUkFNRVRFUlNfSVNfSE9T
VCkKICAgICAgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKICAgICAgICAgICAgICwgbV9j
b25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcikKICAgICAgICAgewpAQCAtMzU3LDE1ICszNTcsMTUgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIEV4ZWN1dGFibGVC
YXNlIEJhc2U7CiAKLSAgICAgICAgU2NyaXB0RXhlY3V0YWJsZShTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGJv
b2wgaXNJblN0cmljdENvbnRleHQpCi0gICAgICAgICAgICA6IEV4ZWN1dGFibGVCYXNlKGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSwgTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEKQorICAgICAgICBT
Y3JpcHRFeGVjdXRhYmxlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBWTSYgdm0sIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCkKKyAgICAgICAgICAgIDogRXhl
Y3V0YWJsZUJhc2Uodm0sIHN0cnVjdHVyZSwgTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEKQog
ICAgICAgICAgICAgLCBtX3NvdXJjZShzb3VyY2UpCiAgICAgICAgICAgICAsIG1fZmVhdHVyZXMo
aXNJblN0cmljdENvbnRleHQgPyBTdHJpY3RNb2RlRmVhdHVyZSA6IDApCiAgICAgICAgIHsKICAg
ICAgICAgfQogCiAgICAgICAgIFNjcmlwdEV4ZWN1dGFibGUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29sIGlzSW5TdHJp
Y3RDb250ZXh0KQotICAgICAgICAgICAgOiBFeGVjdXRhYmxlQmFzZShleGVjLT5nbG9iYWxEYXRh
KCksIHN0cnVjdHVyZSwgTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEKQorICAgICAgICAgICAg
OiBFeGVjdXRhYmxlQmFzZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIE5VTV9QQVJBTUVURVJTX05P
VF9DT01QSUxFRCkKICAgICAgICAgICAgICwgbV9zb3VyY2Uoc291cmNlKQogICAgICAgICAgICAg
LCBtX2ZlYXR1cmVzKGlzSW5TdHJpY3RDb250ZXh0ID8gU3RyaWN0TW9kZUZlYXR1cmUgOiAwKQog
ICAgICAgICB7CkBAIC00MDMsMTQgKzQwMywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
fQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwot
ICAgICAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLmFkZENvbXBpbGVkQ29kZSh0aGlzKTsgLy8gQmFs
YW5jZWQgYnkgSGVhcDo6ZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKS4KKyAgICAgICAgICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgICAgIHZtLmhlYXAuYWRkQ29tcGls
ZWRDb2RlKHRoaXMpOyAvLyBCYWxhbmNlZCBieSBIZWFwOjpkZWxldGVVbm1hcmtlZENvbXBpbGVk
Q29kZSgpLgogCiAjaWYgRU5BQkxFKENPREVCTE9DS19TQU1QTElORykKLSAgICAgICAgICAgIGlm
IChTYW1wbGluZ1Rvb2wqIHNhbXBsZXIgPSBnbG9iYWxEYXRhLmludGVycHJldGVyLT5zYW1wbGVy
KCkpCi0gICAgICAgICAgICAgICAgc2FtcGxlci0+bm90aWZ5T2ZTY29wZShnbG9iYWxEYXRhLCB0
aGlzKTsKKyAgICAgICAgICAgIGlmIChTYW1wbGluZ1Rvb2wqIHNhbXBsZXIgPSB2bS5pbnRlcnBy
ZXRlci0+c2FtcGxlcigpKQorICAgICAgICAgICAgICAgIHNhbXBsZXItPm5vdGlmeU9mU2NvcGUo
dm0sIHRoaXMpOwogI2VuZGlmCiAgICAgICAgIH0KIApAQCAtNDMwLDcgKzQzMCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlKEV4ZWNTdGF0ZSogZXhlYywg
SlNTY29wZSogc2NvcGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4
ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGV4ZWMtPnZtKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICBK
U09iamVjdCogZXJyb3IgPSAwOwogICAgICAgICAgICAgaWYgKCFtX2V2YWxDb2RlQmxvY2spCiAg
ICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGUsIEpJVENv
ZGU6OmJvdHRvbVRpZXJKSVQoKSk7CkBAIC00NDEsNyArNDQxLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2NvcGUq
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICAgICAgICAgCiAjaWYgRU5BQkxFKEpJVCkKLSAg
ICAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGUoSlNHbG9iYWxEYXRhJik7CisgICAgICAg
IHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlKFZNJik7CiAgICAgICAgIGJvb2wgaml0Q29tcGls
ZShFeGVjU3RhdGUqKTsKICNlbmRpZgogCkBAIC00NTQsNyArNDU0LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHN0YXRpYyBFdmFsRXhlY3V0YWJsZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29sIGlzSW5TdHJpY3RDb250ZXh0KSAKICAg
ICAgICAgewogICAgICAgICAgICAgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxFdmFsRXhlY3V0YWJsZT4oKmV4ZWMtPmhlYXAoKSkpIEV2YWxF
eGVjdXRhYmxlKGV4ZWMsIHNvdXJjZSwgaXNJblN0cmljdENvbnRleHQpOwotICAgICAgICAgICAg
ZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAg
ICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwogICAgICAgICAgICAg
cmV0dXJuIGV4ZWN1dGFibGU7CiAgICAgICAgIH0KIApAQCAtNDY0LDkgKzQ2NCw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCk7
CiAgICAgICAgIH0KICNlbmRpZgotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvKQorICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFs
RGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oRXZhbEV4ZWN1dGFibGVUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhFdmFsRXhlY3V0YWJsZVR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpAQCAtNDk2LDE4ICs0OTYsMTggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBQcm9ncmFtRXhlY3V0YWJsZSogY3JlYXRl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQogICAgICAgICB7CiAg
ICAgICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPFByb2dyYW1FeGVjdXRhYmxlPigqZXhlYy0+aGVhcCgpKSkgUHJvZ3JhbUV4
ZWN1dGFibGUoZXhlYywgc291cmNlKTsKLSAgICAgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENy
ZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgICAgICBleGVjdXRhYmxlLT5maW5p
c2hDcmVhdGlvbihleGVjLT52bSgpKTsKICAgICAgICAgICAgIHJldHVybiBleGVjdXRhYmxlOwog
ICAgICAgICB9CiAKIAotICAgICAgICBKU09iamVjdCogaW5pdGlhbGl6ZUdsb2JhbFByb3BlcnRp
ZXMoSlNHbG9iYWxEYXRhJiwgQ2FsbEZyYW1lKiwgSlNTY29wZSopOworICAgICAgICBKU09iamVj
dCogaW5pdGlhbGl6ZUdsb2JhbFByb3BlcnRpZXMoVk0mLCBDYWxsRnJhbWUqLCBKU1Njb3BlKik7
CiAKICAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAgICAgICBKU09i
amVjdCogY29tcGlsZShFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlKQogICAgICAgICB7
Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0ds
b2JhbE9iamVjdCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmR5bmFt
aWNHbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAgICAg
ICAgICAgIGlmICghbV9wcm9ncmFtQ29kZUJsb2NrKQogICAgICAgICAgICAgICAgIGVycm9yID0g
Y29tcGlsZUludGVybmFsKGV4ZWMsIHNjb3BlLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpOwpA
QCAtNTE4LDcgKzUxOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU09iamVjdCogY29t
cGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCk7CiAgICAgICAgIAogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIHZvaWQgamV0dGlzb25PcHRp
bWl6ZWRDb2RlKEpTR2xvYmFsRGF0YSYpOworICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVk
Q29kZShWTSYpOwogICAgICAgICBib29sIGppdENvbXBpbGUoRXhlY1N0YXRlKik7CiAjZW5kaWYK
IApAQCAtNTM3LDkgKzUzNyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAjZW5kaWYK
ICAgICAgICAgCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG8pCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9i
YWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhQcm9ncmFtRXhlY3V0YWJsZVR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFByb2dyYW1FeGVjdXRhYmxlVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CkBAIC01NzIsMTAgKzU3MiwxMCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgU2NyaXB0RXhlY3V0YWJs
ZSBCYXNlOwogCi0gICAgICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSwgdW5zaWduZWQgZmlyc3RMaW5l
LCB1bnNpZ25lZCBsYXN0TGluZSkKKyAgICAgICAgc3RhdGljIEZ1bmN0aW9uRXhlY3V0YWJsZSog
Y3JlYXRlKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlLCB1bnNpZ25lZCBmaXJzdExpbmUsIHVuc2ln
bmVkIGxhc3RMaW5lKQogICAgICAgICB7Ci0gICAgICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxGdW5jdGlvbkV4ZWN1dGFi
bGU+KGdsb2JhbERhdGEuaGVhcCkpIEZ1bmN0aW9uRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBzb3Vy
Y2UsIHVubGlua2VkRXhlY3V0YWJsZSwgZmlyc3RMaW5lLCBsYXN0TGluZSk7Ci0gICAgICAgICAg
ICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0uaGVhcCkpIEZ1bmN0aW9uRXhlY3V0YWJsZSh2bSwgc291
cmNlLCB1bmxpbmtlZEV4ZWN1dGFibGUsIGZpcnN0TGluZSwgbGFzdExpbmUpOworICAgICAgICAg
ICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICAgICAgcmV0dXJuIGV4
ZWN1dGFibGU7CiAgICAgICAgIH0KICAgICAgICAgc3RhdGljIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZnJvbUdsb2JhbENvZGUoY29uc3QgSWRlbnRpZmllciYgbmFtZSwgRXhlY1N0YXRlKiwgRGVidWdn
ZXIqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNPYmplY3QqKiBleGNlcHRpb24pOwpAQCAtNjAyLDcg
KzYwMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlRm9y
Q2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVj
dCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmR5bmFtaWNHbG9iYWxP
YmplY3QpOwogICAgICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAgICAgICAgICAgIGlm
ICghbV9jb2RlQmxvY2tGb3JDYWxsKQogICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUZv
ckNhbGxJbnRlcm5hbChleGVjLCBzY29wZSwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKTsKQEAg
LTYxMyw3ICs2MTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNPYmplY3QqIGNvbXBp
bGVPcHRpbWl6ZWRGb3JDYWxsKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4KTsKICAgICAgICAgCiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgdm9pZCBqZXR0aXNv
bk9wdGltaXplZENvZGVGb3JDYWxsKEpTR2xvYmFsRGF0YSYpOworICAgICAgICB2b2lkIGpldHRp
c29uT3B0aW1pemVkQ29kZUZvckNhbGwoVk0mKTsKICAgICAgICAgYm9vbCBqaXRDb21waWxlRm9y
Q2FsbChFeGVjU3RhdGUqKTsKICNlbmRpZgogCkBAIC02MzAsNyArNjMwLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDb25zdHJ1Y3QoRXhlY1N0YXRl
KiBleGVjLCBKU1Njb3BlKiBzY29wZSkKICAgICAgICAgewotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKICAgICAg
ICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAgICAgICAgICAgICBpZiAoIW1fY29kZUJsb2Nr
Rm9yQ29uc3RydWN0KQogICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUZvckNvbnN0cnVj
dEludGVybmFsKGV4ZWMsIHNjb3BlLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpOwpAQCAtNjQx
LDcgKzY0MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU09iamVjdCogY29tcGlsZU9w
dGltaXplZEZvckNvbnN0cnVjdChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCk7CiAgICAgICAgIAogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIHZvaWQgamV0dGlz
b25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KEpTR2xvYmFsRGF0YSYpOworICAgICAgICB2b2lk
IGpldHRpc29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdChWTSYpOwogICAgICAgICBib29sIGpp
dENvbXBpbGVGb3JDb25zdHJ1Y3QoRXhlY1N0YXRlKik7CiAjZW5kaWYKIApAQCAtNjgxLDEzICs2
ODEsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgCiAjaWYgRU5BQkxF
KEpJVCkKLSAgICAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGVGb3IoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgICAgIHZvaWQg
amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yKFZNJiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBr
aW5kKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgCi0g
ICAgICAgICAgICAgICAgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChnbG9iYWxEYXRhKTsK
KyAgICAgICAgICAgICAgICBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDYWxsKHZtKTsKICAgICAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25z
dHJ1Y3QpOwotICAgICAgICAgICAgICAgIGpldHRpc29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVj
dChnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgICAgICBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JD
b25zdHJ1Y3Qodm0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIApAQCAtNzMz
LDkgKzczMyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNsZWFyQ29kZUlmTm90
Q29tcGlsaW5nKCk7CiAgICAgICAgIHZvaWQgY2xlYXJVbmxpbmtlZENvZGVGb3JSZWNvbXBpbGF0
aW9uSWZOb3RDb21waWxpbmcoKTsKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oRnVuY3Rpb25FeGVjdXRhYmxl
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oRnVuY3Rpb25F
eGVjdXRhYmxlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CkBAIC03NDUsNyAr
NzQ1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgY2xlYXJDb2RlKCk7CiAKICAg
ICBwcml2YXRlOgotICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUoSlNHbG9iYWxEYXRhJiwgY29u
c3QgU291cmNlQ29kZSYsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiwgdW5zaWduZWQgZmly
c3RMaW5lLCB1bnNpZ25lZCBsYXN0TGluZSk7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShW
TSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSosIHVuc2ln
bmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGFzdExpbmUpOwogCiAgICAgICAgIEpTT2JqZWN0KiBj
b21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBKSVRDb2RlOjpKSVRU
eXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gVUlOVF9NQVgpOwogICAgICAgICBKU09iamVj
dCogY29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBKSVRD
b2RlOjpKSVRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gVUlOVF9NQVgpOwpAQCAtNzc1
LDEwICs3NzUsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE93blB0cjxGdW5jdGlvbkNv
ZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CiAgICAgfTsKIAotICAgIGlubGluZSBK
U0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRnVuY3Rpb25F
eGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSkKLSAgICAgICAgOiBCYXNlKGds
b2JhbERhdGEsIHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSkKLSAg
ICAgICAgLCBtX2V4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgdGhpcywgZXhlY3V0YWJsZSkKLSAgICAg
ICAgLCBtX3Njb3BlKGdsb2JhbERhdGEsIHRoaXMsIHNjb3BlKQorICAgIGlubGluZSBKU0Z1bmN0
aW9uOjpKU0Z1bmN0aW9uKFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBK
U1Njb3BlKiBzY29wZSkKKyAgICAgICAgOiBCYXNlKHZtLCBzY29wZS0+Z2xvYmFsT2JqZWN0KCkt
PmZ1bmN0aW9uU3RydWN0dXJlKCkpCisgICAgICAgICwgbV9leGVjdXRhYmxlKHZtLCB0aGlzLCBl
eGVjdXRhYmxlKQorICAgICAgICAsIG1fc2NvcGUodm0sIHRoaXMsIHNjb3BlKQogICAgICAgICAs
IG1fYWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50KEluaXRpYWxpemVkQmxpbmQpIC8vIFNlZSBj
b21tZW50IGluIEpTRnVuY3Rpb24uY3BwIGNvbmNlcm5pbmcgdGhlIHJlYXNvbiBmb3IgdXNpbmcg
SW5pdGlhbGl6ZWRCbGluZCBhcyBvcHBvc2VkIHRvIEluaXRpYWxpemVkV2F0Y2hpbmcuCiAgICAg
ewogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhh
cm5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRpb25IYXJuZXNzLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTAgKzQx
LDEwIEBAIGlubGluZSBib29sIHByZXBhcmVGb3JFeGVjdXRpb24oRXhlY1N0YXQKICNpZiBFTkFC
TEUoTExJTlQpCiAgICAgaWYgKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpKSB7CiAg
ICAgICAgIC8vIFN0YXJ0IG9mZiBpbiB0aGUgbG93IGxldmVsIGludGVycHJldGVyLgotICAgICAg
ICBMTEludDo6Z2V0RW50cnlwb2ludChleGVjLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay5nZXQo
KSwgaml0Q29kZSk7CisgICAgICAgIExMSW50OjpnZXRFbnRyeXBvaW50KGV4ZWMtPnZtKCksIGNv
ZGVCbG9jay5nZXQoKSwgaml0Q29kZSk7CiAgICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZShq
aXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7Ci0gICAgICAgIGlmIChleGVjLT5nbG9i
YWxEYXRhKCkubV9wZXJCeXRlY29kZVByb2ZpbGVyKQotICAgICAgICAgICAgZXhlYy0+Z2xvYmFs
RGF0YSgpLm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKGNvZGVCbG9j
ay5nZXQoKSk7CisgICAgICAgIGlmIChleGVjLT52bSgpLm1fcGVyQnl0ZWNvZGVQcm9maWxlcikK
KyAgICAgICAgICAgIGV4ZWMtPnZtKCkubV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRl
Y29kZXNGb3IoY29kZUJsb2NrLmdldCgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
I2VuZGlmIC8vIEVOQUJMRShMTElOVCkKQEAgLTU2LDEwICs1NiwxMCBAQCBpbmxpbmUgYm9vbCBw
cmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb24oCiAjaWYgRU5BQkxFKExMSU5UKQogICAgIGlmIChK
SVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkgewogICAgICAgICAvLyBTdGFydCBvZmYg
aW4gdGhlIGxvdyBsZXZlbCBpbnRlcnByZXRlci4KLSAgICAgICAgTExJbnQ6OmdldEZ1bmN0aW9u
RW50cnlwb2ludChleGVjLT5nbG9iYWxEYXRhKCksIGtpbmQsIGppdENvZGUsIGppdENvZGVXaXRo
QXJpdHlDaGVjayk7CisgICAgICAgIExMSW50OjpnZXRGdW5jdGlvbkVudHJ5cG9pbnQoZXhlYy0+
dm0oKSwga2luZCwgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKICAgICAgICAgY29k
ZUJsb2NrLT5zZXRKSVRDb2RlKGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjayk7Ci0gICAg
ICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCkubV9wZXJCeXRlY29kZVByb2ZpbGVyKQotICAgICAg
ICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0
ZWNvZGVzRm9yKGNvZGVCbG9jay5nZXQoKSk7CisgICAgICAgIGlmIChleGVjLT52bSgpLm1fcGVy
Qnl0ZWNvZGVQcm9maWxlcikKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkubV9wZXJCeXRlY29kZVBy
b2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IoY29kZUJsb2NrLmdldCgpKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogI2Vsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxNDg2NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTEgKzQ2LDExIEBAIEZ1bmN0aW9uQ29uc3RydWN0b3I6
OkZ1bmN0aW9uQ29uc3RydWN0b3IKIAogdm9pZCBGdW5jdGlvbkNvbnN0cnVjdG9yOjpmaW5pc2hD
cmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9uUHJvdG90eXBlKiBmdW5jdGlvblByb3Rv
dHlwZSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGZ1
bmN0aW9uUHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKTsKLSAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5wcm90b3R5cGUsIGZ1bmN0aW9uUHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBS
ZWFkT25seSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwgZnVuY3Rpb25Q
cm90b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpOworICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIGZ1
bmN0aW9uUHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CiAKICAg
ICAvLyBOdW1iZXIgb2YgYXJndW1lbnRzIGZvciBjb25zdHJ1Y3RvcgotICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
Lmxlbmd0aCwganNOdW1iZXIoMSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsK
KyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9u
dEVudW0pOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3RXaXRoRnVuY3Rpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5oCShy
ZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlv
bkNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDkgKzQ0LDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpIAor
ICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCiAgICAgICAgIHsgCi0g
ICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7IAorICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAm
c19pbmZvKTsgCiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCShyZXZpc2lv
biAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3Rv
dHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDIzICs0OSwyMyBAQCBGdW5jdGlvblByb3Rv
dHlwZTo6RnVuY3Rpb25Qcm90b3R5cGUoSlNHCiAKIHZvaWQgRnVuY3Rpb25Qcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmFtZSk7Ci0gICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigwKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9u
dEVudW0pOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCksIG5hbWUpOworICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDApLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51
bSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25Qcm90b3R5cGU6OmFkZEZ1bmN0aW9uUHJvcGVydGllcyhF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTRnVuY3Rpb24q
KiBjYWxsRnVuY3Rpb24sIEpTRnVuY3Rpb24qKiBhcHBseUZ1bmN0aW9uKQogewogICAgIEpTRnVu
Y3Rpb24qIHRvU3RyaW5nRnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFs
T2JqZWN0LCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcuc3RyaW5nKCksIGZ1bmN0
aW9uUHJvdG9GdW5jVG9TdHJpbmcpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4
ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLCB0b1N0cmlu
Z0Z1bmN0aW9uLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhl
Yy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLCB0b1N0cmluZ0Z1bmN0aW9u
LCBEb250RW51bSk7CiAKICAgICAqYXBwbHlGdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0ZShl
eGVjLCBnbG9iYWxPYmplY3QsIDIsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcHBseS5zdHJpbmco
KSwgZnVuY3Rpb25Qcm90b0Z1bmNBcHBseSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRp
b24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXBwbHksICphcHBs
eUZ1bmN0aW9uLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhl
Yy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmFwcGx5LCAqYXBwbHlGdW5jdGlvbiwgRG9u
dEVudW0pOwogCiAgICAgKmNhbGxGdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBn
bG9iYWxPYmplY3QsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsLnN0cmluZygpLCBmdW5j
dGlvblByb3RvRnVuY0NhbGwpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGwsICpjYWxsRnVuY3Rpb24s
IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbCwgKmNhbGxGdW5jdGlvbiwgRG9udEVudW0pOwogCiAg
ICAgSlNGdW5jdGlvbiogYmluZEZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGds
b2JhbE9iamVjdCwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmJpbmQuc3RyaW5nKCksIGZ1bmN0
aW9uUHJvdG9GdW5jQmluZCk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+
Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYmluZCwgYmluZEZ1bmN0aW9uLCBE
b250RW51bSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmJpbmQsIGJpbmRGdW5jdGlvbiwgRG9udEVudW0pOwogfQogCiBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsRnVuY3Rpb25Qcm90b3R5cGUo
RXhlY1N0YXRlKikKQEAgLTE4NywxMiArMTg3LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25Qcm8KIAogICAgIC8vIExldCBBIGJlIGEgbmV3IChwb3NzaWJseSBlbXB0
eSkgaW50ZXJuYWwgbGlzdCBvZiBhbGwgb2YgdGhlIGFyZ3VtZW50IHZhbHVlcyBwcm92aWRlZCBh
ZnRlciB0aGlzQXJnIChhcmcxLCBhcmcyIGV0YyksIGluIG9yZGVyLgogICAgIHNpemVfdCBudW1C
b3VuZEFyZ3MgPSBleGVjLT5hcmd1bWVudENvdW50KCkgPiAxID8gZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIC0gMSA6IDA7Ci0gICAgSlNBcnJheSogYm91bmRBcmdzID0gSlNBcnJheTo6dHJ5Q3JlYXRl
VW5pbml0aWFsaXplZChleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1
Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aFVuZGVjaWRlZCks
IG51bUJvdW5kQXJncyk7CisgICAgSlNBcnJheSogYm91bmRBcmdzID0gSlNBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChleGVjLT52bSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJl
Rm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhVbmRlY2lkZWQpLCBudW1C
b3VuZEFyZ3MpOwogICAgIGlmICghYm91bmRBcmdzKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG51bUJvdW5kQXJnczsgKytpKQotICAgICAgICBib3VuZEFyZ3MtPmluaXRpYWxp
emVJbmRleChleGVjLT5nbG9iYWxEYXRhKCksIGksIGV4ZWMtPmFyZ3VtZW50KGkgKyAxKSk7Cisg
ICAgICAgIGJvdW5kQXJncy0+aW5pdGlhbGl6ZUluZGV4KGV4ZWMtPnZtKCksIGksIGV4ZWMtPmFy
Z3VtZW50KGkgKyAxKSk7CiAKICAgICAvLyBJZiB0aGUgW1tDbGFzc11dIGludGVybmFsIHByb3Bl
cnR5IG9mIFRhcmdldCBpcyAiRnVuY3Rpb24iLCB0aGVuIC4uLgogICAgIC8vIEVsc2Ugc2V0IHRo
ZSBsZW5ndGggb3duIHByb3BlcnR5IG9mIEYgdG8gMC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaAkocmV2aXNpb24gMTQ4NjU1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
CiAgICAgICAgIHZvaWQgYWRkRnVuY3Rpb25Qcm9wZXJ0aWVzKEV4ZWNTdGF0ZSosIEpTR2xvYmFs
T2JqZWN0KiwgSlNGdW5jdGlvbioqIGNhbGxGdW5jdGlvbiwgSlNGdW5jdGlvbioqIGFwcGx5RnVu
Y3Rpb24pOwogICAgICAgICAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90bykKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZv
IHNfaW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlD
YWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R0NBY3Rpdml0eUNhbGxiYWNrLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNyArMzEsNyBAQAogCiAjaW5jbHVkZSAiQVBJU2hpbXMuaCIKICNpbmNsdWRlICJIZWFw
LmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRl
ICJKU0xvY2suaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogCkBAIC01MCwxOSArNTAsMTkgQEAg
Y29uc3QgZG91YmxlIGhvdXIgPSA2MCAqIDYwOwogCiAjaWYgVVNFKENGKQogRGVmYXVsdEdDQWN0
aXZpdHlDYWxsYmFjazo6RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayhIZWFwKiBoZWFwKQotICAg
IDogR0NBY3Rpdml0eUNhbGxiYWNrKGhlYXAtPmdsb2JhbERhdGEoKSwgQ0ZSdW5Mb29wR2V0Q3Vy
cmVudCgpKQorICAgIDogR0NBY3Rpdml0eUNhbGxiYWNrKGhlYXAtPnZtKCksIENGUnVuTG9vcEdl
dEN1cnJlbnQoKSkKICAgICAsIG1fZGVsYXkoc19kZWNhZGUpCiB7CiB9CiAKIERlZmF1bHRHQ0Fj
dGl2aXR5Q2FsbGJhY2s6OkRlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2soSGVhcCogaGVhcCwgQ0ZS
dW5Mb29wUmVmIHJ1bkxvb3ApCi0gICAgOiBHQ0FjdGl2aXR5Q2FsbGJhY2soaGVhcC0+Z2xvYmFs
RGF0YSgpLCBydW5Mb29wKQorICAgIDogR0NBY3Rpdml0eUNhbGxiYWNrKGhlYXAtPnZtKCksIHJ1
bkxvb3ApCiAgICAgLCBtX2RlbGF5KHNfZGVjYWRlKQogewogfQogI2VsaWYgUExBVEZPUk0oUVQp
CiBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKEhl
YXAqIGhlYXApCi0gICAgOiBHQ0FjdGl2aXR5Q2FsbGJhY2soaGVhcC0+Z2xvYmFsRGF0YSgpKQor
ICAgIDogR0NBY3Rpdml0eUNhbGxiYWNrKGhlYXAtPnZtKCkpCiAgICAgLCBtX2RlbGF5KGhvdXIp
CiB7CiB9CkBAIC03MCwxMSArNzAsMTEgQEAgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6RGVm
YXVsdEdDQWN0aQogCiB2b2lkIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OmRvV29yaygpCiB7
Ci0gICAgSGVhcCogaGVhcCA9ICZtX2dsb2JhbERhdGEtPmhlYXA7CisgICAgSGVhcCogaGVhcCA9
ICZtX3ZtLT5oZWFwOwogICAgIGlmICghaXNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAg
ICAKLSAgICBBUElFbnRyeVNoaW0gc2hpbShtX2dsb2JhbERhdGEpOworICAgIEFQSUVudHJ5U2hp
bSBzaGltKG1fdm0pOwogI2lmICFQTEFURk9STShJT1MpCiAgICAgZG91YmxlIHN0YXJ0VGltZSA9
IFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAgICAgaWYgKGhlYXAtPmlzUGFn
ZWRPdXQoc3RhcnRUaW1lICsgcGFnaW5nVGltZU91dCkpIHsKQEAgLTEyNCw3ICsxMjQsNyBAQCB2
b2lkIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OmRpZEFsbG9jCiAgICAgLy8gV2UgcHJldGVu
ZCBpdCdzIG9uZSBieXRlIHNvIHRoYXQgd2UgZG9uJ3QgaWdub3JlIHRoaXMgYWxsb2NhdGlvbiBl
bnRpcmVseS4KICAgICBpZiAoIWJ5dGVzKQogICAgICAgICBieXRlcyA9IDE7Ci0gICAgSGVhcCog
aGVhcCA9IHN0YXRpY19jYXN0PEhlYXAqPigmbV9nbG9iYWxEYXRhLT5oZWFwKTsKKyAgICBIZWFw
KiBoZWFwID0gc3RhdGljX2Nhc3Q8SGVhcCo+KCZtX3ZtLT5oZWFwKTsKICAgICBkb3VibGUgZ2NU
aW1lU2xpY2UgPSBzdGQ6Om1pbigoc3RhdGljX2Nhc3Q8ZG91YmxlPihieXRlcykgLyBNQikgKiBn
Y1RpbWVTbGljZVBlck1CLCBtYXhHQ1RpbWVTbGljZSk7CiAgICAgZG91YmxlIG5ld0RlbGF5ID0g
aGVhcC0+bGFzdEdDTGVuZ3RoKCkgLyBnY1RpbWVTbGljZTsKICAgICBzY2hlZHVsZVRpbWVyKG5l
d0RlbGF5KTsKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJh
Y2s6OmNhbmNlbCgpCiAjZWxzZQogCiBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpEZWZhdWx0
R0NBY3Rpdml0eUNhbGxiYWNrKEhlYXAqIGhlYXApCi0gICAgOiBHQ0FjdGl2aXR5Q2FsbGJhY2so
aGVhcC0+Z2xvYmFsRGF0YSgpKQorICAgIDogR0NBY3Rpdml0eUNhbGxiYWNrKGhlYXAtPnZtKCkp
CiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlD
YWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dD
QWN0aXZpdHlDYWxsYmFjay5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTIs
MTQgKzUyLDE0IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogI2lmIFVTRShDRikKLSAgICBHQ0Fj
dGl2aXR5Q2FsbGJhY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDRlJ1bkxvb3BSZWYgcnVu
TG9vcCkKLSAgICAgICAgOiBIZWFwVGltZXIoZ2xvYmFsRGF0YSwgcnVuTG9vcCkKKyAgICBHQ0Fj
dGl2aXR5Q2FsbGJhY2soVk0qIHZtLCBDRlJ1bkxvb3BSZWYgcnVuTG9vcCkKKyAgICAgICAgOiBI
ZWFwVGltZXIodm0sIHJ1bkxvb3ApCiAgICAgICAgICwgbV9lbmFibGVkKHRydWUpCiAgICAgewog
ICAgIH0KICNlbHNlCi0gICAgR0NBY3Rpdml0eUNhbGxiYWNrKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSkKLSAgICAgICAgOiBIZWFwVGltZXIoZ2xvYmFsRGF0YSkKKyAgICBHQ0FjdGl2aXR5Q2Fs
bGJhY2soVk0qIHZtKQorICAgICAgICA6IEhlYXBUaW1lcih2bSkKICAgICAgICAgLCBtX2VuYWJs
ZWQodHJ1ZSkKICAgICB7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR0NBY3Rpdml0eUNhbGxiYWNrQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrQmxhY2tCZXJyeS5jcHAJ
KHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0
aXZpdHlDYWxsYmFja0JsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwyMCArMjAs
MjAgQEAKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKIAogI2luY2x1ZGUgIkhlYXAu
aCIKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUg
PEJsYWNrQmVycnlQbGF0Zm9ybU1lbW9yeS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogRGVmYXVs
dEdDQWN0aXZpdHlDYWxsYmFjazo6RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayhIZWFwKiBoZWFw
KQotICAgIDogR0NBY3Rpdml0eUNhbGxiYWNrKGhlYXAtPmdsb2JhbERhdGEoKSkKKyAgICA6IEdD
QWN0aXZpdHlDYWxsYmFjayhoZWFwLT52bSgpKQogewogfQogCiB2b2lkIERlZmF1bHRHQ0FjdGl2
aXR5Q2FsbGJhY2s6OmRvV29yaygpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2sobV9nbG9iYWxE
YXRhKTsKLSAgICBtX2dsb2JhbERhdGEtPmhlYXAuY29sbGVjdChIZWFwOjpEb05vdFN3ZWVwKTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX3ZtKTsKKyAgICBtX3ZtLT5oZWFwLmNvbGxlY3QoSGVh
cDo6RG9Ob3RTd2VlcCk7CiB9CiAKIHZvaWQgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6ZGlk
QWxsb2NhdGUoc2l6ZV90IGJ5dGVzQWxsb2NhdGVkKQpAQCAtNDIsNyArNDIsNyBAQCB2b2lkIERl
ZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OmRpZEFsbG9jCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIFRyeSB1c2luZyB+NSUgQ1BVIHRpbWUuCi0gICAgbV90aW1lci5zdGFydChtX2dsb2JhbERh
dGEtPmhlYXAubGFzdEdDTGVuZ3RoKCkgKiAyMCk7CisgICAgbV90aW1lci5zdGFydChtX3ZtLT5o
ZWFwLmxhc3RHQ0xlbmd0aCgpICogMjApOwogfQogCiB2b2lkIERlZmF1bHRHQ0FjdGl2aXR5Q2Fs
bGJhY2s6OndpbGxDb2xsZWN0KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dldHRlclNldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0dldHRlclNldHRlci5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzks
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHByaXZhdGU6ICAgICAgICAKICAgICAgICAgR2V0
dGVyU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKLSAgICAgICAgICAgIDogSlNDZWxsKGV4ZWMtPmds
b2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLmdldHRlclNldHRlclN0cnVjdHVyZS5nZXQo
KSkKKyAgICAgICAgICAgIDogSlNDZWxsKGV4ZWMtPnZtKCksIGV4ZWMtPnZtKCkuZ2V0dGVyU2V0
dGVyU3RydWN0dXJlLmdldCgpKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtNDksMTkgKzQ5
LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgR2V0dGVyU2V0dGVyKiBjcmVh
dGUoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICB7CiAgICAgICAgICAgICBHZXR0ZXJTZXR0ZXIq
IGdldHRlclNldHRlciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEdldHRlclNldHRlcj4o
KmV4ZWMtPmhlYXAoKSkpIEdldHRlclNldHRlcihleGVjKTsKLSAgICAgICAgICAgIGdldHRlclNl
dHRlci0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgIGdl
dHRlclNldHRlci0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAgICAgICAgICAgICByZXR1
cm4gZ2V0dGVyU2V0dGVyOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgICAgIEpTT2JqZWN0KiBnZXR0
ZXIoKSBjb25zdCB7IHJldHVybiBtX2dldHRlci5nZXQoKTsgfQotICAgICAgICB2b2lkIHNldEdl
dHRlcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTT2JqZWN0KiBnZXR0ZXIpIHsgbV9nZXR0
ZXIuc2V0TWF5QmVOdWxsKGdsb2JhbERhdGEsIHRoaXMsIGdldHRlcik7IH0KKyAgICAgICAgdm9p
ZCBzZXRHZXR0ZXIoVk0mIHZtLCBKU09iamVjdCogZ2V0dGVyKSB7IG1fZ2V0dGVyLnNldE1heUJl
TnVsbCh2bSwgdGhpcywgZ2V0dGVyKTsgfQogICAgICAgICBKU09iamVjdCogc2V0dGVyKCkgY29u
c3QgeyByZXR1cm4gbV9zZXR0ZXIuZ2V0KCk7IH0KLSAgICAgICAgdm9pZCBzZXRTZXR0ZXIoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU09iamVjdCogc2V0dGVyKSB7IG1fc2V0dGVyLnNldE1h
eUJlTnVsbChnbG9iYWxEYXRhLCB0aGlzLCBzZXR0ZXIpOyB9Ci0gICAgICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgICAgICB2b2lkIHNl
dFNldHRlcihWTSYgdm0sIEpTT2JqZWN0KiBzZXR0ZXIpIHsgbV9zZXR0ZXIuc2V0TWF5QmVOdWxs
KHZtLCB0aGlzLCBzZXR0ZXIpOyB9CisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
Z2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEdldHRlclNldHRl
clR5cGUsIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4pLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKEdldHRlclNldHRlclR5cGUsIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4pLCAmc19pbmZvKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2lu
Zm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNw
cAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRl
bnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDE0ICs4OCwxNCBAQCBzdHJ1Y3QgSWRl
bnRpZmllckxDaGFyRnJvbVVDaGFyVHJhbnNsYXRvCiAgICAgfQogfTsKIAotUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25z
dCBjaGFyKiBjKQorUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQoVk0qIHZt
LCBjb25zdCBjaGFyKiBjKQogewogICAgIEFTU0VSVChjKTsKICAgICBBU1NFUlQoY1swXSk7CiAg
ICAgaWYgKCFjWzFdKQotICAgICAgICByZXR1cm4gYWRkKGdsb2JhbERhdGEsIGdsb2JhbERhdGEt
PnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoY1swXSkpOworICAgICAgICBy
ZXR1cm4gYWRkKHZtLCB2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChj
WzBdKSk7CiAKLSAgICBJZGVudGlmaWVyVGFibGUmIGlkZW50aWZpZXJUYWJsZSA9ICpnbG9iYWxE
YXRhLT5pZGVudGlmaWVyVGFibGU7CisgICAgSWRlbnRpZmllclRhYmxlJiBpZGVudGlmaWVyVGFi
bGUgPSAqdm0tPmlkZW50aWZpZXJUYWJsZTsKICAgICBMaXRlcmFsSWRlbnRpZmllclRhYmxlJiBs
aXRlcmFsSWRlbnRpZmllclRhYmxlID0gaWRlbnRpZmllclRhYmxlLmxpdGVyYWxUYWJsZSgpOwog
CiAgICAgY29uc3QgTGl0ZXJhbElkZW50aWZpZXJUYWJsZTo6aXRlcmF0b3ImIGl0ZXIgPSBsaXRl
cmFsSWRlbnRpZmllclRhYmxlLmZpbmQoYyk7CkBAIC0xMTUsMjkgKzExNSwyOSBAQCBQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZChKCiAKIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gSWRlbnRpZmllcjo6YWRkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgY2hhciogYykKIHsKLSAg
ICByZXR1cm4gYWRkKCZleGVjLT5nbG9iYWxEYXRhKCksIGMpOworICAgIHJldHVybiBhZGQoJmV4
ZWMtPnZtKCksIGMpOwogfQogCi1QYXNzUmVmUHRyPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFk
ZDgoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVQ2hhciogcywgaW50IGxlbmd0aCkK
K1Bhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkOChWTSogdm0sIGNvbnN0IFVD
aGFyKiBzLCBpbnQgbGVuZ3RoKQogewogICAgIGlmIChsZW5ndGggPT0gMSkgewogICAgICAgICBV
Q2hhciBjID0gc1swXTsKICAgICAgICAgQVNTRVJUKGMgPD0gMHhmZik7CiAgICAgICAgIGlmIChj
YW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoYykpCi0gICAgICAgICAgICByZXR1cm4gYWRkKGds
b2JhbERhdGEsIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdS
ZXAoYykpOworICAgICAgICAgICAgcmV0dXJuIGFkZCh2bSwgdm0tPnNtYWxsU3RyaW5ncy5zaW5n
bGVDaGFyYWN0ZXJTdHJpbmdSZXAoYykpOwogICAgIH0KICAgICAKICAgICBpZiAoIWxlbmd0aCkK
ICAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmVtcHR5KCk7CiAgICAgQ2hhckJ1ZmZlcjxVQ2hh
cj4gYnVmID0geyBzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKSB9OwotICAgIEhhc2hT
ZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gZ2xvYmFsRGF0YS0+aWRlbnRp
ZmllclRhYmxlLT5hZGQ8Q2hhckJ1ZmZlcjxVQ2hhcj4sIElkZW50aWZpZXJMQ2hhckZyb21VQ2hh
clRyYW5zbGF0b3IgPihidWYpOworICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQg
YWRkUmVzdWx0ID0gdm0tPmlkZW50aWZpZXJUYWJsZS0+YWRkPENoYXJCdWZmZXI8VUNoYXI+LCBJ
ZGVudGlmaWVyTENoYXJGcm9tVUNoYXJUcmFuc2xhdG9yID4oYnVmKTsKICAgICAKICAgICAvLyBJ
ZiB0aGUgc3RyaW5nIGlzIG5ld2x5LXRyYW5zbGF0ZWQsIHRoZW4gd2UgbmVlZCB0byBhZG9wdCBp
dC4KICAgICAvLyBUaGUgYm9vbGVhbiBpbiB0aGUgcGFpciB0ZWxscyB1cyBpZiB0aGF0IGlzIHNv
LgogICAgIHJldHVybiBhZGRSZXN1bHQuaXNOZXdFbnRyeSA/IGFkb3B0UmVmKCphZGRSZXN1bHQu
aXRlcmF0b3IpIDogKmFkZFJlc3VsdC5pdGVyYXRvcjsKIH0KIAotUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBJZGVudGlmaWVyOjphZGRTbG93Q2FzZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0
cmluZ0ltcGwqIHIpCitQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZFNsb3dD
YXNlKFZNKiB2bSwgU3RyaW5nSW1wbCogcikKIHsKICAgICBBU1NFUlQoIXItPmlzSWRlbnRpZmll
cigpKTsKICAgICAvLyBUaGUgZW1wdHkgJiBudWxsIHN0cmluZ3MgYXJlIHN0YXRpYyBzaW5nbGV0
b25zLCBhbmQgc3RhdGljIHN0cmluZ3MgYXJlIGhhbmRsZWQKQEAgLTE0Nyw2OCArMTQ3LDY4IEBA
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkU2wKICAgICBpZiAoci0+bGVu
Z3RoKCkgPT0gMSkgewogICAgICAgICBVQ2hhciBjID0gKCpyKVswXTsKICAgICAgICAgaWYgKGMg
PD0gbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKQotICAgICAgICAgICAgciA9IGdsb2JhbERhdGEt
PnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoYyk7CisgICAgICAgICAgICBy
ID0gdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoYyk7CiAgICAgICAg
ICAgICBpZiAoci0+aXNJZGVudGlmaWVyKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHI7CiAg
ICAgfQogCi0gICAgcmV0dXJuICpnbG9iYWxEYXRhLT5pZGVudGlmaWVyVGFibGUtPmFkZChyKS5p
dGVyYXRvcjsKKyAgICByZXR1cm4gKnZtLT5pZGVudGlmaWVyVGFibGUtPmFkZChyKS5pdGVyYXRv
cjsKIH0KIAogUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGRTbG93Q2FzZShF
eGVjU3RhdGUqIGV4ZWMsIFN0cmluZ0ltcGwqIHIpCiB7Ci0gICAgcmV0dXJuIGFkZFNsb3dDYXNl
KCZleGVjLT5nbG9iYWxEYXRhKCksIHIpOworICAgIHJldHVybiBhZGRTbG93Q2FzZSgmZXhlYy0+
dm0oKSwgcik7CiB9CiAKIElkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbShFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIHZhbHVlKQogewotICAgIHJldHVybiBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMt
Pmdsb2JhbERhdGEoKS5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUpKTsKKyAgICByZXR1cm4gSWRl
bnRpZmllcihleGVjLCBleGVjLT52bSgpLm51bWVyaWNTdHJpbmdzLmFkZCh2YWx1ZSkpOwogfQog
CiBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb20oRXhlY1N0YXRlKiBleGVjLCBpbnQgdmFsdWUp
CiB7Ci0gICAgcmV0dXJuIElkZW50aWZpZXIoZXhlYywgZXhlYy0+Z2xvYmFsRGF0YSgpLm51bWVy
aWNTdHJpbmdzLmFkZCh2YWx1ZSkpOworICAgIHJldHVybiBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMt
PnZtKCkubnVtZXJpY1N0cmluZ3MuYWRkKHZhbHVlKSk7CiB9CiAKIElkZW50aWZpZXIgSWRlbnRp
Zmllcjo6ZnJvbShFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4g
SWRlbnRpZmllcihleGVjLCBleGVjLT5nbG9iYWxEYXRhKCkubnVtZXJpY1N0cmluZ3MuYWRkKHZh
bHVlKSk7CisgICAgcmV0dXJuIElkZW50aWZpZXIoZXhlYywgZXhlYy0+dm0oKS5udW1lcmljU3Ry
aW5ncy5hZGQodmFsdWUpKTsKIH0KIAotSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgdW5zaWduZWQgdmFsdWUpCitJZGVudGlmaWVyIElkZW50aWZp
ZXI6OmZyb20oVk0qIHZtLCB1bnNpZ25lZCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gSWRlbnRpZmll
cihnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUpKTsKKyAg
ICByZXR1cm4gSWRlbnRpZmllcih2bSwgdm0tPm51bWVyaWNTdHJpbmdzLmFkZCh2YWx1ZSkpOwog
fQogCi1JZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb20oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBpbnQgdmFsdWUpCitJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb20oVk0qIHZtLCBpbnQgdmFs
dWUpCiB7Ci0gICAgcmV0dXJuIElkZW50aWZpZXIoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+bnVt
ZXJpY1N0cmluZ3MuYWRkKHZhbHVlKSk7CisgICAgcmV0dXJuIElkZW50aWZpZXIodm0sIHZtLT5u
dW1lcmljU3RyaW5ncy5hZGQodmFsdWUpKTsKIH0KIAotSWRlbnRpZmllciBJZGVudGlmaWVyOjpm
cm9tKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgZG91YmxlIHZhbHVlKQorSWRlbnRpZmllciBJ
ZGVudGlmaWVyOjpmcm9tKFZNKiB2bSwgZG91YmxlIHZhbHVlKQogewotICAgIHJldHVybiBJZGVu
dGlmaWVyKGdsb2JhbERhdGEsIGdsb2JhbERhdGEtPm51bWVyaWNTdHJpbmdzLmFkZCh2YWx1ZSkp
OworICAgIHJldHVybiBJZGVudGlmaWVyKHZtLCB2bS0+bnVtZXJpY1N0cmluZ3MuYWRkKHZhbHVl
KSk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCiAKLXZvaWQgSWRlbnRpZmllcjo6Y2hlY2tDdXJyZW50
SWRlbnRpZmllclRhYmxlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK3ZvaWQgSWRlbnRpZmll
cjo6Y2hlY2tDdXJyZW50SWRlbnRpZmllclRhYmxlKFZNKiB2bSkKIHsKICAgICAvLyBDaGVjayB0
aGUgaWRlbnRpZmllciB0YWJsZSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIHRocmVhZHNwZWNpZmlj
IG1hdGNoZXMgdGhlCi0gICAgLy8gZ2xvYmFsRGF0YSdzIGlkZW50aWZpZXIgdGFibGUuCi0gICAg
QVNTRVJUX1VOVVNFRChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5pZGVudGlmaWVyVGFibGUgPT0g
d3RmVGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSk7CisgICAgLy8gdm0ncyBp
ZGVudGlmaWVyIHRhYmxlLgorICAgIEFTU0VSVF9VTlVTRUQodm0sIHZtLT5pZGVudGlmaWVyVGFi
bGUgPT0gd3RmVGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSk7CiB9CiAKIHZv
aWQgSWRlbnRpZmllcjo6Y2hlY2tDdXJyZW50SWRlbnRpZmllclRhYmxlKEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICBjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUoJmV4ZWMtPmdsb2JhbERhdGEo
KSk7CisgICAgY2hlY2tDdXJyZW50SWRlbnRpZmllclRhYmxlKCZleGVjLT52bSgpKTsKIH0KIAog
I2Vsc2UKIAogLy8gVGhlc2Ugb25seSBleGlzdHMgc28gdGhhdCBvdXIgZXhwb3J0cyBhcmUgdGhl
IHNhbWUgZm9yIGRlYnVnIGFuZCByZWxlYXNlIGJ1aWxkcy4KIC8vIFRoaXMgd291bGQgYmUgYW4g
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKSwgYnV0IHdlJ3JlIGluIE5ERUJVRyBvbmx5IGNv
ZGUgaGVyZSEKLU5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBJZGVudGlmaWVyOjpjaGVja0N1
cnJlbnRJZGVudGlmaWVyVGFibGUoSlNHbG9iYWxEYXRhKikgeyBDUkFTSCgpOyB9CitOT19SRVRV
Uk5fRFVFX1RPX0NSQVNIIHZvaWQgSWRlbnRpZmllcjo6Y2hlY2tDdXJyZW50SWRlbnRpZmllclRh
YmxlKFZNKikgeyBDUkFTSCgpOyB9CiBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgSWRlbnRp
Zmllcjo6Y2hlY2tDdXJyZW50SWRlbnRpZmllclRhYmxlKEV4ZWNTdGF0ZSopIHsgQ1JBU0goKTsg
fQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZp
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlm
aWVyLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQAogI2lmbmRlZiBJ
ZGVudGlmaWVyX2gKICNkZWZpbmUgSWRlbnRpZmllcl9oCiAKLSNpbmNsdWRlICJKU0dsb2JhbERh
dGEuaCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgog
I2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgpAQCAtNDIsMTUgKzQyLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0
ZTx1bnNpZ25lZCBjaGFyYWN0ZXJzQ291bnQ+CiAgICAgICAgIElkZW50aWZpZXIoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFjdGVyc0NvdW50XSkgOiBtX3N0
cmluZyhhZGQoZXhlYywgY2hhcmFjdGVycykpIHsgfQogICAgICAgICB0ZW1wbGF0ZTx1bnNpZ25l
ZCBjaGFyYWN0ZXJzQ291bnQ+Ci0gICAgICAgIElkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFjdGVyc0NvdW50XSkgOiBtX3N0
cmluZyhhZGQoZ2xvYmFsRGF0YSwgY2hhcmFjdGVycykpIHsgfQorICAgICAgICBJZGVudGlmaWVy
KFZNKiB2bSwgY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0pIDogbV9z
dHJpbmcoYWRkKHZtLCBjaGFyYWN0ZXJzKSkgeyB9CiAKICAgICAgICAgSWRlbnRpZmllcihFeGVj
U3RhdGUqIGV4ZWMsIFN0cmluZ0ltcGwqIHJlcCkgOiBtX3N0cmluZyhhZGQoZXhlYywgcmVwKSkg
eyB9CiAgICAgICAgIElkZW50aWZpZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMp
IDogbV9zdHJpbmcoYWRkKGV4ZWMsIHMuaW1wbCgpKSkgeyB9CiAKLSAgICAgICAgSWRlbnRpZmll
cihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IExDaGFyKiBzLCBpbnQgbGVuZ3RoKSA6
IG1fc3RyaW5nKGFkZChnbG9iYWxEYXRhLCBzLCBsZW5ndGgpKSB7IH0KLSAgICAgICAgSWRlbnRp
ZmllcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVuZ3Ro
KSA6IG1fc3RyaW5nKGFkZChnbG9iYWxEYXRhLCBzLCBsZW5ndGgpKSB7IH0KLSAgICAgICAgSWRl
bnRpZmllcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0cmluZ0ltcGwqIHJlcCkgOiBtX3N0
cmluZyhhZGQoZ2xvYmFsRGF0YSwgcmVwKSkgeyB9IAotICAgICAgICBJZGVudGlmaWVyKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgU3RyaW5nJiBzKSA6IG1fc3RyaW5nKGFkZChnbG9i
YWxEYXRhLCBzLmltcGwoKSkpIHsgfQorICAgICAgICBJZGVudGlmaWVyKFZNKiB2bSwgY29uc3Qg
TENoYXIqIHMsIGludCBsZW5ndGgpIDogbV9zdHJpbmcoYWRkKHZtLCBzLCBsZW5ndGgpKSB7IH0K
KyAgICAgICAgSWRlbnRpZmllcihWTSogdm0sIGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVuZ3RoKSA6
IG1fc3RyaW5nKGFkZCh2bSwgcywgbGVuZ3RoKSkgeyB9CisgICAgICAgIElkZW50aWZpZXIoVk0q
IHZtLCBTdHJpbmdJbXBsKiByZXApIDogbV9zdHJpbmcoYWRkKHZtLCByZXApKSB7IH0gCisgICAg
ICAgIElkZW50aWZpZXIoVk0qIHZtLCBjb25zdCBTdHJpbmcmIHMpIDogbV9zdHJpbmcoYWRkKHZt
LCBzLmltcGwoKSkpIHsgfQogCiAgICAgICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJpbmc7IH0KICAgICAgICAgU3RyaW5nSW1wbCogaW1wbCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RyaW5nLmltcGwoKTsgfQpAQCAtNjAsMTQgKzYwLDE0IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAKICAgICAgICAgQ1N0cmluZyBhc2NpaSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RyaW5nLmFzY2lpKCk7IH0KIAotICAgICAgICBzdGF0aWMgSWRlbnRpZmllciBjcmVhdGVMQ2hh
ckZyb21VQ2hhcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVDaGFyKiBzLCBpbnQg
bGVuZ3RoKSB7IHJldHVybiBJZGVudGlmaWVyKGdsb2JhbERhdGEsIGFkZDgoZ2xvYmFsRGF0YSwg
cywgbGVuZ3RoKSk7IH0KKyAgICAgICAgc3RhdGljIElkZW50aWZpZXIgY3JlYXRlTENoYXJGcm9t
VUNoYXIoVk0qIHZtLCBjb25zdCBVQ2hhciogcywgaW50IGxlbmd0aCkgeyByZXR1cm4gSWRlbnRp
Zmllcih2bSwgYWRkOCh2bSwgcywgbGVuZ3RoKSk7IH0KIAogICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgSWRlbnRpZmllciBmcm9tKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgeSk7
CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBJZGVudGlmaWVyIGZyb20oRXhlY1N0
YXRlKiBleGVjLCBpbnQgeSk7CiAgICAgICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb20oRXhlY1N0
YXRlKiBleGVjLCBkb3VibGUgeSk7Ci0gICAgICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb20oSlNH
bG9iYWxEYXRhKiwgdW5zaWduZWQgeSk7Ci0gICAgICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb20o
SlNHbG9iYWxEYXRhKiwgaW50IHkpOwotICAgICAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tKEpT
R2xvYmFsRGF0YSosIGRvdWJsZSB5KTsKKyAgICAgICAgc3RhdGljIElkZW50aWZpZXIgZnJvbShW
TSosIHVuc2lnbmVkIHkpOworICAgICAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tKFZNKiwgaW50
IHkpOworICAgICAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tKFZNKiwgZG91YmxlIHkpOwogCiAg
ICAgICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNOdWxsKCk7IH0K
ICAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNFbXB0eSgp
OyB9CkBAIC04Nyw3ICs4Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBTdHJpbmdJbXBsKiBiKSB7IHJldHVy
biA6OmVxdWFsKGEsIGIpOyB9CiAKICAgICAgICAgLy8gT25seSB0byBiZSB1c2VkIHdpdGggc3Ry
aW5nIGxpdGVyYWxzLgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQo
SlNHbG9iYWxEYXRhKiwgY29uc3QgY2hhciopOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBhZGQoVk0qLCBjb25zdCBjaGFyKik7CiAgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChFeGVjU3RhdGUqLCBjb25zdCBj
aGFyKik7CiAKICAgICBwcml2YXRlOgpAQCAtOTksOCArOTksOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgSWRlbnRpZmllciYgYSwgY29uc3QgSWRl
bnRpZmllciYgYikgeyByZXR1cm4gYS5tX3N0cmluZy5pbXBsKCkgPT0gYi5tX3N0cmluZy5pbXBs
KCk7IH0KICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgSWRlbnRpZmllciYgYSwgY29u
c3QgTENoYXIqIGIpIHsgcmV0dXJuIGVxdWFsKGEubV9zdHJpbmcuaW1wbCgpLCBiKTsgfQogCi0g
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBs
PiBhZGQoSlNHbG9iYWxEYXRhKiwgY29uc3QgVCosIGludCBsZW5ndGgpOwotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQ4KEpTR2xvYmFsRGF0YSosIGNvbnN0IFVDaGFy
KiwgaW50IGxlbmd0aCk7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoVk0qLCBjb25zdCBUKiwgaW50IGxlbmd0aCk7CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZDgoVk0qLCBjb25zdCBVQ2hhcios
IGludCBsZW5ndGgpOwogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gQUxXQVlTX0lOTElO
RSBzdGF0aWMgYm9vbCBjYW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVCk7CiAKICAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5n
SW1wbCogcikKQEAgLTExMiwyMSArMTEyLDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgICAgIHJldHVybiByOwogICAgICAgICAgICAgcmV0dXJuIGFkZFNsb3dDYXNlKGV4ZWMsIHIp
OwogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0cmluZ0ltcGwqIHIpCisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChWTSogdm0sIFN0cmluZ0ltcGwqIHIpCiAgICAgICAg
IHsKICNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICBjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFi
bGUoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUo
dm0pOwogI2VuZGlmCiAgICAgICAgICAgICBpZiAoci0+aXNJZGVudGlmaWVyKCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHI7Ci0gICAgICAgICAgICByZXR1cm4gYWRkU2xvd0Nhc2UoZ2xvYmFs
RGF0YSwgcik7CisgICAgICAgICAgICByZXR1cm4gYWRkU2xvd0Nhc2Uodm0sIHIpOwogICAgICAg
ICB9CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gYWRkU2xvd0Nhc2UoRXhlY1N0YXRlKiwgU3RyaW5nSW1wbCogcik7Ci0gICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZFNsb3dDYXNl
KEpTR2xvYmFsRGF0YSosIFN0cmluZ0ltcGwqIHIpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGRTbG93Q2FzZShWTSosIFN0cmluZ0lt
cGwqIHIpOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGNoZWNrQ3Vy
cmVudElkZW50aWZpZXJUYWJsZShFeGVjU3RhdGUqKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgY2hlY2tDdXJyZW50SWRlbnRpZmllclRhYmxlKEpTR2xvYmFsRGF0YSop
OworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBjaGVja0N1cnJlbnRJZGVu
dGlmaWVyVGFibGUoVk0qKTsKICAgICB9OwogCiAgICAgdGVtcGxhdGUgPD4gQUxXQVlTX0lOTElO
RSBib29sIElkZW50aWZpZXI6OmNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhMQ2hhcikKQEAg
LTE3MCwxOCArMTcwLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KLSAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFk
ZChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFQqIHMsIGludCBsZW5ndGgpCisgICAg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQoVk0qIHZtLCBjb25zdCBUKiBz
LCBpbnQgbGVuZ3RoKQogICAgIHsKICAgICAgICAgaWYgKGxlbmd0aCA9PSAxKSB7CiAgICAgICAg
ICAgICBUIGMgPSBzWzBdOwogICAgICAgICAgICAgaWYgKGNhblVzZVNpbmdsZUNoYXJhY3RlclN0
cmluZyhjKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYWRkKGdsb2JhbERhdGEsIGdsb2JhbERh
dGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoYykpOworICAgICAgICAg
ICAgICAgIHJldHVybiBhZGQodm0sIHZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nUmVwKGMpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFsZW5ndGgpCiAg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKICAgICAgICAgQ2hhckJ1ZmZl
cjxUPiBidWYgPSB7IHMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGgpIH07Ci0gICAgICAg
IEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gZ2xvYmFsRGF0YS0+
aWRlbnRpZmllclRhYmxlLT5hZGQ8Q2hhckJ1ZmZlcjxUPiwgSWRlbnRpZmllckNoYXJCdWZmZXJU
cmFuc2xhdG9yPFQ+ID4oYnVmKTsKKyAgICAgICAgSGFzaFNldDxTdHJpbmdJbXBsKj46OkFkZFJl
c3VsdCBhZGRSZXN1bHQgPSB2bS0+aWRlbnRpZmllclRhYmxlLT5hZGQ8Q2hhckJ1ZmZlcjxUPiwg
SWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yPFQ+ID4oYnVmKTsKICAgICAgICAgCiAgICAg
ICAgIC8vIElmIHRoZSBzdHJpbmcgaXMgbmV3bHktdHJhbnNsYXRlZCwgdGhlbiB3ZSBuZWVkIHRv
IGFkb3B0IGl0LgogICAgICAgICAvLyBUaGUgYm9vbGVhbiBpbiB0aGUgcGFpciB0ZWxscyB1cyBp
ZiB0aGF0IGlzIHNvLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJu
YWxGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSwyNiArMzUsMjYgQEAgQVNTRVJUX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoSW50ZXJuYWxG
dQogY29uc3QgQ2xhc3NJbmZvIEludGVybmFsRnVuY3Rpb246OnNfaW5mbyA9IHsgIkZ1bmN0aW9u
IiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShJbnRlcm5hbEZ1bmN0
aW9uKSB9OwogCiBJbnRlcm5hbEZ1bmN0aW9uOjpJbnRlcm5hbEZ1bmN0aW9uKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogSlNEZXN0cnVj
dGlibGVPYmplY3QoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSkKKyAgICA6
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0KGdsb2JhbE9iamVjdC0+dm0oKSwgc3RydWN0dXJlKQogewog
fQogCi12b2lkIEludGVybmFsRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgY29uc3QgU3RyaW5nJiBuYW1lKQordm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKICAgICBBU1NFUlQobWV0aG9kVGFibGUo
KS0+Z2V0Q2FsbERhdGEgIT0gSW50ZXJuYWxGdW5jdGlvbjo6c19pbmZvLm1ldGhvZFRhYmxlLmdl
dENhbGxEYXRhKTsKLSAgICBwdXREaXJlY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5wcm9wZXJ0
eU5hbWVzLT5uYW1lLCBqc1N0cmluZygmZ2xvYmFsRGF0YSwgbmFtZSksIERvbnREZWxldGUgfCBS
ZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pm5hbWUsIGpzU3RyaW5nKCZ2bSwgbmFtZSksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRF
bnVtKTsKIH0KIAogY29uc3QgU3RyaW5nJiBJbnRlcm5hbEZ1bmN0aW9uOjpuYW1lKEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICByZXR1cm4gYXNTdHJpbmcoZ2V0RGlyZWN0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPm5hbWUpKS0+dHJ5R2V0VmFs
dWUoKTsKKyAgICByZXR1cm4gYXNTdHJpbmcoZ2V0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnZt
KCkucHJvcGVydHlOYW1lcy0+bmFtZSkpLT50cnlHZXRWYWx1ZSgpOwogfQogCiBjb25zdCBTdHJp
bmcgSW50ZXJuYWxGdW5jdGlvbjo6ZGlzcGxheU5hbWUoRXhlY1N0YXRlKiBleGVjKQogewotICAg
IEpTVmFsdWUgZGlzcGxheU5hbWUgPSBnZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVj
LT5nbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+ZGlzcGxheU5hbWUpOworICAgIEpTVmFsdWUg
ZGlzcGxheU5hbWUgPSBnZXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+dm0oKS5wcm9wZXJ0eU5h
bWVzLT5kaXNwbGF5TmFtZSk7CiAgICAgCiAgICAgaWYgKGRpc3BsYXlOYW1lICYmIGlzSlNTdHJp
bmcoZGlzcGxheU5hbWUpKQogICAgICAgICByZXR1cm4gYXNTdHJpbmcoZGlzcGxheU5hbWUpLT50
cnlHZXRWYWx1ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJu
YWxGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGVybmFsRnVuY3Rpb24uaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw5
ICs0MSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBjb25zdCBTdHJpbmcgZGlzcGxheU5h
bWUoRXhlY1N0YXRlKik7CiAgICAgICAgIGNvbnN0IFN0cmluZyBjYWxjdWxhdGVkRGlzcGxheU5h
bWUoRXhlY1N0YXRlKik7CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90bykgCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8p
IAogICAgICAgICB7IAotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7IAorICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8pOyAKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgpAQCAtNTEsNyAr
NTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBJbnRl
cm5hbEZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAKLSAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmLCBjb25zdCBT
dHJpbmcmIG5hbWUpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgICAgICBzdGF0aWMgQ2FsbFR5cGUg
Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKICAgICB9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBUElWYWx1ZVdyYXBwZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FQSVZhbHVlV3JhcHBlci5oCShyZXZpc2lv
biAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FQSVZhbHVlV3Jh
cHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw5ICszNyw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIEpTVmFsdWUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9
CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEFQSVZhbHVlV3JhcHBlclR5cGUsIE92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzKSwgJnNfaW5mbyk7
CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhBUElWYWx1ZVdyYXBwZXJUeXBlLCBPdmVycmlkZXNWaXNpdENo
aWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyksICZzX2luZm8pOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8g
c19pbmZvOwpAQCAtNTQsMTQgKzU0LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByb3RlY3Rl
ZDoKICAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dmFsdWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMt
Pmdsb2JhbERhdGEoKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlLnNldChleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMt
PnZtKCkpOworICAgICAgICAgICAgbV92YWx1ZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgdmFsdWUp
OwogICAgICAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc0NlbGwoKSk7CiAgICAgICAgIH0KIAogICAg
IHByaXZhdGU6CiAgICAgICAgIEpTQVBJVmFsdWVXcmFwcGVyKEV4ZWNTdGF0ZSogZXhlYykKLSAg
ICAgICAgICAgIDogSlNDZWxsKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0YSgp
LmFwaVdyYXBwZXJTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgICAgICA6IEpTQ2VsbChleGVjLT52
bSgpLCBleGVjLT52bSgpLmFwaVdyYXBwZXJTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgIHsKICAg
ICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0
aXZhdGlvbi5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQWN0aXZhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAg
aW5saW5lIGJvb2wgSlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZUdldAogCiBpbmxpbmUgYm9vbCBK
U0FjdGl2YXRpb246OnN5bWJvbFRhYmxlUHV0KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKLSAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6Omhl
YXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpcykpOwogICAgIAogICAgIFN5bWJvbFRhYmxlRW50
cnkgZW50cnkgPSBzeW1ib2xUYWJsZSgpLT5pbmxpbmVHZXQocHJvcGVydHlOYW1lLnB1YmxpY05h
bWUoKSk7CkBAIC0xMDIsNyArMTAyLDcgQEAgaW5saW5lIGJvb2wgSlNBY3RpdmF0aW9uOjpzeW1i
b2xUYWJsZVB1dAogICAgIGlmIChpc1Rvcm5PZmYoKSAmJiAhaXNWYWxpZChlbnRyeSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICByZWdpc3RlckF0KGVudHJ5LmdldEluZGV4
KCkpLnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMjUs
NyArMTI1LDcgQEAgdm9pZCBKU0FjdGl2YXRpb246OmdldE93bk5vbkluZGV4UHJvcGVydAogICAg
IEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKLWlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3lt
Ym9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMp
CitpbmxpbmUgYm9vbCBKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMo
Vk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzKQogewogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6
aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzKSk7CiAgICAgCkBAIC0xMzgsNyArMTM4LDcg
QEAgaW5saW5lIGJvb2wgSlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZVB1dAogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBlbnRyeS5zZXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwotICAgIHJl
Z2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsK
KyAgICByZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLnNldCh2bSwgdGhpcywgdmFsdWUpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNTcsNyArMTU3LDcgQEAgYm9vbCBKU0FjdGl2YXRp
b246OmdldE93blByb3BlcnR5U2xvdChKUwogICAgIGlmICh0aGlzT2JqZWN0LT5zeW1ib2xUYWJs
ZUdldChwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlm
IChKU1ZhbHVlIHZhbHVlID0gdGhpc09iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgcHJvcGVydHlOYW1lKSkgeworICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gdGhpc09iamVjdC0+
Z2V0RGlyZWN0KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSkpIHsKICAgICAgICAgc2xvdC5zZXRW
YWx1ZSh2YWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTIwMSw3ICsyMDEs
NyBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlCiAgICAgLy8gcHJv
cGVydGllcyBhcmUgbm9uLXN0YW5kYXJkIGV4dGVuc2lvbnMgdGhhdCBvdGhlciBpbXBsZW1lbnRh
dGlvbnMgZG8gbm90CiAgICAgLy8gZXhwb3NlIGluIHRoZSBhY3RpdmF0aW9uIG9iamVjdC4KICAg
ICBBU1NFUlQoIXRoaXNPYmplY3QtPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSk7Ci0gICAg
dGhpc09iamVjdC0+cHV0T3duRGF0YVByb3BlcnR5KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgdGhpc09iamVjdC0+cHV0T3duRGF0YVByb3BlcnR5
KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCiAvLyBGSVhNRTog
TWFrZSB0aGlzIGZ1bmN0aW9uIGhvbm9yIFJlYWRPbmx5IChjb25zdCkgYW5kIERvbnRFbnVtCkBA
IC0yMTAsNyArMjEwLDcgQEAgdm9pZCBKU0FjdGl2YXRpb246OnB1dERpcmVjdFZpcnR1YWwoSlNP
YgogICAgIEpTQWN0aXZhdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FjdGl2YXRpb24qPihv
YmplY3QpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1
ZSkgPT0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KSk7CiAKLSAgICBpZiAodGhpc09iamVjdC0+c3lt
Ym9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIGF0dHJpYnV0ZXMpKQorICAgIGlmICh0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZVB1
dFdpdGhBdHRyaWJ1dGVzKGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0
ZXMpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXZSBkb24ndCBjYWxsIHRocm91Z2ggdG8g
SlNPYmplY3QgYmVjYXVzZSBfX3Byb3RvX18gYW5kIGdldHRlci9zZXR0ZXIgCkBAIC0yNDUsNyAr
MjQ1LDcgQEAgSlNWYWx1ZSBKU0FjdGl2YXRpb246OmFyZ3VtZW50c0dldHRlcihFeAogICAgICAg
ICByZXR1cm4gYXJndW1lbnRzOwogICAgIGludCByZWFsQXJndW1lbnRzUmVnaXN0ZXIgPSB1bm1v
ZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpOwogCi0gICAgSlNWYWx1
ZSBhcmd1bWVudHMgPSBKU1ZhbHVlKEFyZ3VtZW50czo6Y3JlYXRlKGNhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpLCBjYWxsRnJhbWUpKTsKKyAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWUoQXJn
dW1lbnRzOjpjcmVhdGUoY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUpKTsKICAgICBjYWxsRnJh
bWUtPnVuY2hlY2tlZFIoYXJndW1lbnRzUmVnaXN0ZXIpID0gYXJndW1lbnRzOwogICAgIGNhbGxG
cmFtZS0+dW5jaGVja2VkUihyZWFsQXJndW1lbnRzUmVnaXN0ZXIpID0gYXJndW1lbnRzOwogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJ
KHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0
aXZhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyMiArNDEsMjIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgCiAgICAgY2xhc3MgSlNBY3RpdmF0aW9uIDogcHVibGljIEpTVmFyaWFibGVPYmpl
Y3QgewogICAgIHByaXZhdGU6Ci0gICAgICAgIEpTQWN0aXZhdGlvbihKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIENhbGxGcmFtZSosIFNoYXJlZFN5bWJvbFRhYmxlKik7CisgICAgICAgIEpTQWN0
aXZhdGlvbihWTSYgdm0sIENhbGxGcmFtZSosIFNoYXJlZFN5bWJvbFRhYmxlKik7CiAgICAgCiAg
ICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIEpTVmFyaWFibGVPYmplY3QgQmFzZTsKIAotICAg
ICAgICBzdGF0aWMgSlNBY3RpdmF0aW9uKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgICAgIHN0
YXRpYyBKU0FjdGl2YXRpb24qIGNyZWF0ZShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICAgICAgewogICAgICAgICAgICAgU2hhcmVkU3ltYm9s
VGFibGUqIHN5bWJvbFRhYmxlID0gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpOwogICAgICAgICAg
ICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gbmV3ICgKICAgICAgICAgICAgICAgICBOb3RO
dWxsLAogICAgICAgICAgICAgICAgIGFsbG9jYXRlQ2VsbDxKU0FjdGl2YXRpb24+KAotICAgICAg
ICAgICAgICAgICAgICBnbG9iYWxEYXRhLmhlYXAsCisgICAgICAgICAgICAgICAgICAgIHZtLmhl
YXAsCiAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb25TaXplKHN5bWJvbFRhYmxlKQogICAg
ICAgICAgICAgICAgICkKLSAgICAgICAgICAgICkgSlNBY3RpdmF0aW9uKGdsb2JhbERhdGEsIGNh
bGxGcmFtZSwgc3ltYm9sVGFibGUpOwotICAgICAgICAgICAgYWN0aXZhdGlvbi0+ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICApIEpTQWN0aXZhdGlvbih2bSwgY2FsbEZy
YW1lLCBzeW1ib2xUYWJsZSk7CisgICAgICAgICAgICBhY3RpdmF0aW9uLT5maW5pc2hDcmVhdGlv
bih2bSk7CiAgICAgICAgICAgICByZXR1cm4gYWN0aXZhdGlvbjsKICAgICAgICAgfQogCkBAIC03
NSwxMSArNzUsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIEpTT2JqZWN0
KiB0b1RoaXNPYmplY3QoSlNDZWxsKiwgRXhlY1N0YXRlKik7CiAKLSAgICAgICAgdm9pZCB0ZWFy
T2ZmKEpTR2xvYmFsRGF0YSYpOworICAgICAgICB2b2lkIHRlYXJPZmYoVk0mKTsKICAgICAgICAg
CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pIHsgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKEFj
dGl2YXRpb25PYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyB9CisgICAgICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhBY3RpdmF0aW9uT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgfQogCiAgICAgICAgIFdyaXRlQmFycmllckJhc2U8
VW5rbm93bj4mIHJlZ2lzdGVyQXQoaW50KSBjb25zdDsKICAgICAgICAgYm9vbCBpc1ZhbGlkSW5k
ZXgoaW50KSBjb25zdDsKQEAgLTk2LDcgKzk2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IGJvb2wgc3ltYm9sVGFibGVHZXQoUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsK
ICAgICAgICAgYm9vbCBzeW1ib2xUYWJsZUdldChQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYs
IGJvb2wmIHNsb3RJc1dyaXRlYWJsZSk7CiAgICAgICAgIGJvb2wgc3ltYm9sVGFibGVQdXQoRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAg
ICAgYm9vbCBzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKEpTR2xvYmFsRGF0YSYsIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CisgICAgICAgIGJvb2wgc3lt
Ym9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5z
aWduZWQgYXR0cmlidXRlcyk7CiAKICAgICAgICAgc3RhdGljIEpTVmFsdWUgYXJndW1lbnRzR2V0
dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CiAgICAgICAgIE5FVkVSX0lO
TElORSBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBnZXRBcmd1bWVudHNHZXR0ZXIoKTsKQEAg
LTExMCw5ICsxMTAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBleHRlcm4gaW50IGFjdGl2YXRp
b25Db3VudDsKICAgICBleHRlcm4gaW50IGFsbFRoZVRoaW5nc0NvdW50OwogCi0gICAgaW5saW5l
IEpTQWN0aXZhdGlvbjo6SlNBY3RpdmF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKKyAgICBp
bmxpbmUgSlNBY3RpdmF0aW9uOjpKU0FjdGl2YXRpb24oVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQogICAgICAgICA6IEJhc2UoCi0g
ICAgICAgICAgICBnbG9iYWxEYXRhLAorICAgICAgICAgICAgdm0sCiAgICAgICAgICAgICBjYWxs
RnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpLAogICAg
ICAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSwKICAgICAgICAgICAgIGNhbGxGcmFtZS0+
c2NvcGUoKSwKQEAgLTE0OSw3ICsxNDksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0
dXJuIHN0b3JhZ2VPZmZzZXQoKSAtIChzeW1ib2xUYWJsZS0+Y2FwdHVyZVN0YXJ0KCkgKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSk7CiAgICAgfQogCi0gICAgaW5saW5lIHZvaWQgSlNB
Y3RpdmF0aW9uOjp0ZWFyT2ZmKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUg
dm9pZCBKU0FjdGl2YXRpb246OnRlYXJPZmYoVk0mIHZtKQogICAgIHsKICAgICAgICAgQVNTRVJU
KCFpc1Rvcm5PZmYoKSk7CiAKQEAgLTE1OSw3ICsxNTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICBpbnQgY2FwdHVyZUVuZCA9IHN5bWJvbFRhYmxlKCktPmNhcHR1cmVFbmQoKTsKICAg
ICAgICAgZm9yIChpbnQgaSA9IHN5bWJvbFRhYmxlKCktPmNhcHR1cmVTdGFydCgpOyBpIDwgY2Fw
dHVyZUVuZDsgKytpKQotICAgICAgICAgICAgZHN0W2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCBz
cmNbaV0uZ2V0KCkpOworICAgICAgICAgICAgZHN0W2ldLnNldCh2bSwgdGhpcywgc3JjW2ldLmdl
dCgpKTsKIAogICAgICAgICBtX3JlZ2lzdGVycyA9IGRzdDsKICAgICAgICAgQVNTRVJUKGlzVG9y
bk9mZigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3Bw
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTAgKzQ4LDEwIEBAIEFTU0VSVF9IQVNfVFJJ
VklBTF9ERVNUUlVDVE9SKEpTQXJyYXkpOwogCiBjb25zdCBDbGFzc0luZm8gSlNBcnJheTo6c19p
bmZvID0geyJBcnJheSIsICZKU05vbkZpbmFsT2JqZWN0OjpzX2luZm8sIDAsIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNBcnJheSl9OwogCi1CdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5
SW5EaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWdu
ZWQgaW5pdGlhbExlbmd0aCkKK0J1dHRlcmZseSogY3JlYXRlQXJyYXlCdXR0ZXJmbHlJbkRpY3Rp
b25hcnlJbmRleGluZ01vZGUoVk0mIHZtLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogewogICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUoCi0gICAgICAgIGdsb2Jh
bERhdGEsIDAsIDAsIHRydWUsIEluZGV4aW5nSGVhZGVyKCksIEFycmF5U3RvcmFnZTo6c2l6ZUZv
cigwKSk7CisgICAgICAgIHZtLCAwLCAwLCB0cnVlLCBJbmRleGluZ0hlYWRlcigpLCBBcnJheVN0
b3JhZ2U6OnNpemVGb3IoMCkpOwogICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGluaXRpYWxMZW5ndGgp
OwogICAgIHN0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aCgwKTsKQEAgLTY3LDcgKzY3LDcgQEAgdm9p
ZCBKU0FycmF5OjpzZXRMZW5ndGhXcml0YWJsZShFeGVjU3RhdAogICAgIGlmICghaXNMZW5ndGhX
cml0YWJsZSgpIHx8IHdyaXRhYmxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBlbnRlckRpY3Rp
b25hcnlJbmRleGluZ01vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBlbnRlckRpY3Rpb25h
cnlJbmRleGluZ01vZGUoZXhlYy0+dm0oKSk7CiAKICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBt
YXAgPSBhcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0KCk7CiAgICAgQVNTRVJUKG1hcCk7
CkBAIC0yNDQsOSArMjQ0LDkgQEAgdm9pZCBKU0FycmF5OjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZQogfQogCiAvLyBUaGlzIG1ldGhvZCBtYWtlcyByb29tIGluIHRoZSB2ZWN0b3IsIGJ1dCBs
ZWF2ZXMgdGhlIG5ldyBzcGFjZSBmb3IgY291bnQgc2xvdHMgdW5jbGVhcmVkLgotYm9vbCBKU0Fy
cmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGJvb2wg
YWRkVG9Gcm9udCwgdW5zaWduZWQgY291bnQpCitib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNs
b3dDYXNlKFZNJiB2bSwgYm9vbCBhZGRUb0Zyb250LCB1bnNpZ25lZCBjb3VudCkKIHsKLSAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7Cisg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKHZtKTsKICAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpOwogICAgIHVuc2lnbmVk
IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAg
ICB1bnNpZ25lZCBwcm9wZXJ0eVNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZSgpOwpA
QCAtMjg2LDcgKzI4Niw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNH
bG8KICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gY3VycmVudENhcGFjaXR5OwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIHNpemVfdCBuZXdTaXplID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwg
cHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGRlc2lyZWRDYXBh
Y2l0eSkpOwotICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uo
bmV3U2l6ZSwgJm5ld0FsbG9jQmFzZSkpCisgICAgICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0
ZVN0b3JhZ2UobmV3U2l6ZSwgJm5ld0FsbG9jQmFzZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsKICAgICB9
CkBAIC00MDgsOSArNDA4LDkgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBl
eGVjLAogICAgICAgICBpZiAobmV3TGVuZ3RoID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpIHsK
ICAgICAgICAgICAgIHJldHVybiBzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAogICAgICAgICAg
ICAgICAgIGV4ZWMsIG5ld0xlbmd0aCwgdGhyb3dFeGNlcHRpb24sCi0gICAgICAgICAgICAgICAg
Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAg
ICAgICAgICAgICAgICBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkp
KTsKICAgICAgICAgfQotICAgICAgICBjcmVhdGVJbml0aWFsVW5kZWNpZGVkKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgbmV3TGVuZ3RoKTsKKyAgICAgICAgY3JlYXRlSW5pdGlhbFVuZGVjaWRlZChleGVj
LT52bSgpLCBuZXdMZW5ndGgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAg
Y2FzZSBBcnJheVdpdGhVbmRlY2lkZWQ6CkBAIC00MjQsMTAgKzQyNCwxMCBAQCBib29sIEpTQXJy
YXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgICAgICAgICAgJiYgIWlzRGVu
c2VFbm91Z2hGb3JWZWN0b3IobmV3TGVuZ3RoLCBjb3VudEVsZW1lbnRzKCkpKSkgewogICAgICAg
ICAgICAgcmV0dXJuIHNldExlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCiAgICAgICAgICAgICAgICAg
ZXhlYywgbmV3TGVuZ3RoLCB0aHJvd0V4Y2VwdGlvbiwKLSAgICAgICAgICAgICAgICBlbnN1cmVB
cnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgICAgICAgICAgZW5zdXJl
QXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsKICAgICAgICAgfQogICAgICAgICBpZiAobmV3TGVu
Z3RoID4gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKSB7Ci0gICAgICAgICAgICBlbnN1cmVM
ZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBuZXdMZW5ndGgpOworICAgICAgICAgICAgZW5zdXJl
TGVuZ3RoKGV4ZWMtPnZtKCksIG5ld0xlbmd0aCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogICAgICAgICBpZiAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpID09IEFy
cmF5V2l0aERvdWJsZSkgewpAQCAtNTQ5LDE5ICs1NDksMTkgQEAgdm9pZCBKU0FycmF5OjpwdXNo
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogewogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOiB7Ci0gICAgICAgIGNyZWF0ZUluaXRp
YWxVbmRlY2lkZWQoZXhlYy0+Z2xvYmFsRGF0YSgpLCAwKTsKKyAgICAgICAgY3JlYXRlSW5pdGlh
bFVuZGVjaWRlZChleGVjLT52bSgpLCAwKTsKICAgICAgICAgLy8gRmFsbCB0aHJvdWdoLgogICAg
IH0KICAgICAgICAgCiAgICAgY2FzZSBBcnJheVdpdGhVbmRlY2lkZWQ6IHsKLSAgICAgICAgY29u
dmVydFVuZGVjaWRlZEZvclZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdmFsdWUpOworICAgICAg
ICBjb252ZXJ0VW5kZWNpZGVkRm9yVmFsdWUoZXhlYy0+dm0oKSwgdmFsdWUpOwogICAgICAgICBw
dXNoKGV4ZWMsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCiAgICAg
Y2FzZSBBcnJheVdpdGhJbnQzMjogewogICAgICAgICBpZiAoIXZhbHVlLmlzSW50MzIoKSkgewot
ICAgICAgICAgICAgY29udmVydEludDMyRm9yVmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB2YWx1
ZSk7CisgICAgICAgICAgICBjb252ZXJ0SW50MzJGb3JWYWx1ZShleGVjLT52bSgpLCB2YWx1ZSk7
CiAgICAgICAgICAgICBwdXNoKGV4ZWMsIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQpAQCAtNTg5LDcgKzU4OSw3IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmEKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpOwogICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IG1fYnV0dGVyZmx5LT52ZWN0b3JM
ZW5ndGgoKSk7CiAgICAgICAgIGlmIChsZW5ndGggPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCkpIHsKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3RoXS5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBtX2J1dHRlcmZs
eS0+Y29udGlndW91cygpW2xlbmd0aF0uc2V0KGV4ZWMtPnZtKCksIHRoaXMsIHZhbHVlKTsKICAg
ICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoICsgMSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTYwNywxMyArNjA3LDEzIEBAIHZvaWQgSlNB
cnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAgCiAgICAgY2FzZSBBcnJh
eVdpdGhEb3VibGU6IHsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKSB7Ci0gICAgICAg
ICAgICBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAg
ICAgICAgICBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKGV4ZWMtPnZtKCkpOwogICAgICAgICAg
ICAgcHVzaChleGVjLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgZG91YmxlIHZhbHVlQXNEb3VibGUgPSB2YWx1ZS5hc051bWJlcigpOwogICAgICAgICBp
ZiAodmFsdWVBc0RvdWJsZSAhPSB2YWx1ZUFzRG91YmxlKSB7Ci0gICAgICAgICAgICBjb252ZXJ0
RG91YmxlVG9Db250aWd1b3VzKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgICAgICBjb252
ZXJ0RG91YmxlVG9Db250aWd1b3VzKGV4ZWMtPnZtKCkpOwogICAgICAgICAgICAgcHVzaChleGVj
LCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTY1Myw3ICs2NTMs
NyBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgICAgIC8v
IEZhc3QgY2FzZSAtIHB1c2ggd2l0aGluIHZlY3RvciwgYWx3YXlzIHVwZGF0ZSBtX2xlbmd0aCAm
IG1fbnVtVmFsdWVzSW5WZWN0b3IuCiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2Ut
Pmxlbmd0aCgpOwogICAgICAgICBpZiAobGVuZ3RoIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkp
IHsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2xlbmd0aF0uc2V0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbGVu
Z3RoXS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgdmFsdWUpOwogICAgICAgICAgICAgc3RvcmFnZS0+
c2V0TGVuZ3RoKGxlbmd0aCArIDEpOwogICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNzU0LDcgKzc1NCw3IEBAIGJvb2wg
SlNBcnJheTo6c2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1QKICAgICAgICAgLy8gV2UgbWF5IGhh
dmUgdG8gd2FsayB0aGUgZW50aXJlIGFycmF5IHRvIGRvIHRoZSBzaGlmdC4gV2UncmUgd2lsbGlu
ZyB0byBkbwogICAgICAgICAvLyBzbyBvbmx5IGlmIGl0J3Mgbm90IGhvcnJpYmx5IHNsb3cuCiAg
ICAgICAgIGlmIChvbGRMZW5ndGggLSAoc3RhcnRJbmRleCArIGNvdW50KSA+PSBNSU5fU1BBUlNF
X0FSUkFZX0lOREVYKQotICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9y
YWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0
YSgpKSk7CisgICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uoc3Rh
cnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT52bSgpKSk7CiAgICAgICAg
IAogICAgICAgICB1bnNpZ25lZCBlbmQgPSBvbGRMZW5ndGggLSBjb3VudDsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsgaSA8IGVuZDsgKytpKSB7CkBAIC03NjgsNyArNzY4
LDcgQEAgYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFueUluZGV4aW5nVAogICAgICAgICAg
ICAgICAgIC8vIGFib3V0IGhvbGVzIChhdCBsZWFzdCBmb3Igbm93KSwgYnV0IGl0IGNhbiBkZXRl
Y3QgdGhlbSBxdWlja2x5LiBTbwogICAgICAgICAgICAgICAgIC8vIHdlIGNvbnZlcnQgdG8gYXJy
YXkgc3RvcmFnZSBhbmQgdGhlbiBhbGxvdyB0aGUgYXJyYXkgc3RvcmFnZSBwYXRoIHRvCiAgICAg
ICAgICAgICAgICAgLy8gZmlndXJlIGl0IG91dC4KLSAgICAgICAgICAgICAgICByZXR1cm4gc2hp
ZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3Rv
cmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2hpZnRD
b3VudFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFn
ZShleGVjLT52bSgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBObyBuZWVkIGZv
ciBhIGJhcnJpZXIgc2luY2Ugd2UncmUganVzdCBtb3ZpbmcgZGF0YSBhcm91bmQgaW4gdGhlIHNh
bWUgdmVjdG9yLgogICAgICAgICAgICAgLy8gVGhpcyBpcyBpbiBsaW5lIHdpdGggb3VyIHN0YW5k
aW5nIGFzc3VtcHRpb24gdGhhdCB3ZSB3b24ndCBoYXZlIGEgZGVsZXRpb24KQEAgLTc4OSw3ICs3
ODksNyBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUCiAgICAgICAg
IC8vIFdlIG1heSBoYXZlIHRvIHdhbGsgdGhlIGVudGlyZSBhcnJheSB0byBkbyB0aGUgc2hpZnQu
IFdlJ3JlIHdpbGxpbmcgdG8gZG8KICAgICAgICAgLy8gc28gb25seSBpZiBpdCdzIG5vdCBob3Jy
aWJseSBzbG93LgogICAgICAgICBpZiAob2xkTGVuZ3RoIC0gKHN0YXJ0SW5kZXggKyBjb3VudCkg
Pj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkKLSAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50
V2l0aEFycmF5U3RvcmFnZShzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4
ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJy
YXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0o
KSkpOwogICAgICAgICAKICAgICAgICAgdW5zaWduZWQgZW5kID0gb2xkTGVuZ3RoIC0gY291bnQ7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmQ7ICsraSkgewpA
QCAtODAzLDcgKzgwMyw3IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBbnlJbmRleGlu
Z1QKICAgICAgICAgICAgICAgICAvLyBhYm91dCBob2xlcyAoYXQgbGVhc3QgZm9yIG5vdyksIGJ1
dCBpdCBjYW4gZGV0ZWN0IHRoZW0gcXVpY2tseS4gU28KICAgICAgICAgICAgICAgICAvLyB3ZSBj
b252ZXJ0IHRvIGFycmF5IHN0b3JhZ2UgYW5kIHRoZW4gYWxsb3cgdGhlIGFycmF5IHN0b3JhZ2Ug
cGF0aCB0bwogICAgICAgICAgICAgICAgIC8vIGZpZ3VyZSBpdCBvdXQuCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBl
bnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1
cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
Ly8gTm8gbmVlZCBmb3IgYSBiYXJyaWVyIHNpbmNlIHdlJ3JlIGp1c3QgbW92aW5nIGRhdGEgYXJv
dW5kIGluIHRoZSBzYW1lIHZlY3Rvci4KICAgICAgICAgICAgIC8vIFRoaXMgaXMgaW4gbGluZSB3
aXRoIG91ciBzdGFuZGluZyBhc3N1bXB0aW9uIHRoYXQgd2Ugd29uJ3QgaGF2ZSBhIGRlbGV0aW9u
CkBAIC04NTAsNyArODUwLDcgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlT
dG9yYQogICAgICAgICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoICsgY291
bnQpOwogICAgIH0gZWxzZSBpZiAoIW1vdmVGcm9udCAmJiB2ZWN0b3JMZW5ndGggLSBsZW5ndGgg
Pj0gY291bnQpCiAgICAgICAgIHN0b3JhZ2UgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+YXJyYXlT
dG9yYWdlKCk7Ci0gICAgZWxzZSBpZiAodW5zaGlmdENvdW50U2xvd0Nhc2UoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBtb3ZlRnJvbnQsIGNvdW50KSkKKyAgICBlbHNlIGlmICh1bnNoaWZ0Q291bnRTbG93
Q2FzZShleGVjLT52bSgpLCBtb3ZlRnJvbnQsIGNvdW50KSkKICAgICAgICAgc3RvcmFnZSA9IGFy
cmF5U3RvcmFnZSgpOwogICAgIGVsc2UgewogICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3Io
ZXhlYyk7CkBAIC04ODYsMTQgKzg4NiwxNCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdp
dGhBbnlJbmRleGluCiAgICAgICAgIC8vIFdlIG1heSBoYXZlIHRvIHdhbGsgdGhlIGVudGlyZSBh
cnJheSB0byBkbyB0aGUgdW5zaGlmdC4gV2UncmUgd2lsbGluZyB0byBkbyBzbwogICAgICAgICAv
LyBvbmx5IGlmIGl0J3Mgbm90IGhvcnJpYmx5IHNsb3cuCiAgICAgICAgIGlmIChvbGRMZW5ndGgg
LSBzdGFydEluZGV4ID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpCi0gICAgICAgICAgICByZXR1
cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBzdGFydEluZGV4LCBjb3VudCwg
ZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAgICAgICAgcmV0
dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgc3RhcnRJbmRleCwgY291bnQs
IGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT52bSgpKSk7CiAgICAgICAgIAotICAgICAgICBlbnN1
cmVMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBvbGRMZW5ndGggKyBjb3VudCk7CisgICAgICAg
IGVuc3VyZUxlbmd0aChleGVjLT52bSgpLCBvbGRMZW5ndGggKyBjb3VudCk7CiAgICAgICAgIAog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRMZW5ndGg7IGktLSA+IHN0YXJ0SW5kZXg7KSB7
CiAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdl
dCgpOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBzdGFydEluZGV4LCBjb3VudCwg
ZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAgICAgICAgICAg
IHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNv
dW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOwogICAgICAgICAgICAgbV9idXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKVtpICsgY291bnRdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7
CiAgICAgICAgIH0KICAgICAgICAgCkBAIC05MTEsMTQgKzkxMSwxNCBAQCBib29sIEpTQXJyYXk6
OnVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluCiAgICAgICAgIC8vIFdlIG1heSBoYXZlIHRvIHdh
bGsgdGhlIGVudGlyZSBhcnJheSB0byBkbyB0aGUgdW5zaGlmdC4gV2UncmUgd2lsbGluZyB0byBk
byBzbwogICAgICAgICAvLyBvbmx5IGlmIGl0J3Mgbm90IGhvcnJpYmx5IHNsb3cuCiAgICAgICAg
IGlmIChvbGRMZW5ndGggLSBzdGFydEluZGV4ID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpCi0g
ICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBzdGFy
dEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkpOwor
ICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgc3Rh
cnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT52bSgpKSk7CiAgICAgICAg
IAotICAgICAgICBlbnN1cmVMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBvbGRMZW5ndGggKyBj
b3VudCk7CisgICAgICAgIGVuc3VyZUxlbmd0aChleGVjLT52bSgpLCBvbGRMZW5ndGggKyBjb3Vu
dCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRMZW5ndGg7IGktLSA+
IHN0YXJ0SW5kZXg7KSB7CiAgICAgICAgICAgICBkb3VibGUgdiA9IG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzRG91YmxlKClbaV07CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkodiAhPSB2KSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBz
dGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkp
OworICAgICAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4
ZWMsIHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOwog
ICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpICsgY291bnRdID0g
djsKICAgICAgICAgfQogICAgICAgICAKQEAgLTEwNjQsOSArMTA2NCw5IEBAIHZvaWQgSlNBcnJh
eTo6c29ydE51bWVyaWMoRXhlY1N0YXRlKiBleGUKIHRlbXBsYXRlIDxJbmRleGluZ1R5cGU+IHN0
cnVjdCBDb250aWd1b3VzVHlwZUFjY2Vzc29yIHsKICAgICB0eXBlZGVmIFdyaXRlQmFycmllcjxV
bmtub3duPiBUeXBlOwogICAgIHN0YXRpYyBKU1ZhbHVlIGdldEFzVmFsdWUoQ29udGlndW91c0Rh
dGE8VHlwZT4gZGF0YSwgc2l6ZV90IGkpIHsgcmV0dXJuIGRhdGFbaV0uZ2V0KCk7IH0KLSAgICBz
dGF0aWMgdm9pZCBzZXRXaXRoVmFsdWUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0FycmF5
KiB0aGlzVmFsdWUsIENvbnRpZ3VvdXNEYXRhPFR5cGU+IGRhdGEsIHNpemVfdCBpLCBKU1ZhbHVl
IHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIHNldFdpdGhWYWx1ZShWTSYgdm0sIEpTQXJyYXkqIHRo
aXNWYWx1ZSwgQ29udGlndW91c0RhdGE8VHlwZT4gZGF0YSwgc2l6ZV90IGksIEpTVmFsdWUgdmFs
dWUpCiAgICAgewotICAgICAgICBkYXRhW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzVmFsdWUsIHZh
bHVlKTsKKyAgICAgICAgZGF0YVtpXS5zZXQodm0sIHRoaXNWYWx1ZSwgdmFsdWUpOwogICAgIH0K
ICAgICBzdGF0aWMgdm9pZCByZXBsYWNlRGF0YVJlZmVyZW5jZShDb250aWd1b3VzRGF0YTxUeXBl
Piogb3V0RGF0YSwgQ29udGlndW91c0pTVmFsdWVzIGluRGF0YSkKICAgICB7CkBAIC0xMDc3LDcg
KzEwNzcsNyBAQCB0ZW1wbGF0ZSA8SW5kZXhpbmdUeXBlPiBzdHJ1Y3QgQ29udGlndW91CiB0ZW1w
bGF0ZSA8PiBzdHJ1Y3QgQ29udGlndW91c1R5cGVBY2Nlc3NvcjxBcnJheVdpdGhEb3VibGU+IHsK
ICAgICB0eXBlZGVmIGRvdWJsZSBUeXBlOwogICAgIHN0YXRpYyBKU1ZhbHVlIGdldEFzVmFsdWUo
Q29udGlndW91c0RhdGE8VHlwZT4gZGF0YSwgc2l6ZV90IGkpIHsgQVNTRVJUKGRhdGFbaV0gPT0g
ZGF0YVtpXSk7IHJldHVybiBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBkYXRhW2ld
KTsgfQotICAgIHN0YXRpYyB2b2lkIHNldFdpdGhWYWx1ZShKU0dsb2JhbERhdGEmLCBKU0FycmF5
KiwgQ29udGlndW91c0RhdGE8VHlwZT4gZGF0YSwgc2l6ZV90IGksIEpTVmFsdWUgdmFsdWUpCisg
ICAgc3RhdGljIHZvaWQgc2V0V2l0aFZhbHVlKFZNJiwgSlNBcnJheSosIENvbnRpZ3VvdXNEYXRh
PFR5cGU+IGRhdGEsIHNpemVfdCBpLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgZGF0
YVtpXSA9IHZhbHVlLmFzTnVtYmVyKCk7CiAgICAgfQpAQCAtMTA5NCw3ICsxMDk0LDcgQEAgdm9p
ZCBKU0FycmF5Ojpzb3J0Q29tcGFjdGVkVmVjdG9yKEV4ZWNTdAogICAgIGlmICghcmVsZXZhbnRM
ZW5ndGgpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKIAogICAg
IC8vIENvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5ncyBjYW4gYmUgZXhwZW5z
aXZlLCBzbyB3ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0IGJhc2VkIG9uIHRoYXQuCiAg
ICAgLy8gVGhpcyBpcyBhIGNvbnNpZGVyYWJsZSBpbXByb3ZlbWVudCBvdmVyIGRvaW5nIGl0IHR3
aWNlIHBlciBjb21wYXJpc29uLCB0aG91Z2ggaXQgcmVxdWlyZXMgYSBsYXJnZSB0ZW1wb3JhcnkK
QEAgLTExNTEsMTIgKzExNTEsMTIgQEAgdm9pZCBKU0FycmF5Ojpzb3J0Q29tcGFjdGVkVmVjdG9y
KEV4ZWNTdAogICAgIGNhc2UgQXJyYXlXaXRoSW50MzI6CiAgICAgY2FzZSBBcnJheVdpdGhEb3Vi
bGU6CiAgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOgotICAgICAgICBlbnN1cmVMZW5ndGgo
Z2xvYmFsRGF0YSwgcmVsZXZhbnRMZW5ndGgpOworICAgICAgICBlbnN1cmVMZW5ndGgodm0sIHJl
bGV2YW50TGVuZ3RoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOgogICAgICAgICBpZiAoYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0
aCgpIDwgcmVsZXZhbnRMZW5ndGgpIHsKLSAgICAgICAgICAgIGluY3JlYXNlVmVjdG9yTGVuZ3Ro
KGV4ZWMtPmdsb2JhbERhdGEoKSwgcmVsZXZhbnRMZW5ndGgpOworICAgICAgICAgICAgaW5jcmVh
c2VWZWN0b3JMZW5ndGgoZXhlYy0+dm0oKSwgcmVsZXZhbnRMZW5ndGgpOwogICAgICAgICAgICAg
Q29udGlndW91c1R5cGVBY2Nlc3NvcjxpbmRleGluZ1R5cGU+OjpyZXBsYWNlRGF0YVJlZmVyZW5j
ZSgmZGF0YSwgYXJyYXlTdG9yYWdlKCktPnZlY3RvcigpKTsKICAgICAgICAgfQogICAgICAgICBp
ZiAoYXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpIDwgcmVsZXZhbnRMZW5ndGgpCkBAIC0xMTY4LDcg
KzExNjgsNyBAQCB2b2lkIEpTQXJyYXk6OnNvcnRDb21wYWN0ZWRWZWN0b3IoRXhlY1N0CiAgICAg
fQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWxldmFudExlbmd0aDsgaSsrKQotICAg
ICAgICBDb250aWd1b3VzVHlwZUFjY2Vzc29yPGluZGV4aW5nVHlwZT46OnNldFdpdGhWYWx1ZShn
bG9iYWxEYXRhLCB0aGlzLCBkYXRhLCBpLCB2YWx1ZXNbaV0uZmlyc3QpOworICAgICAgICBDb250
aWd1b3VzVHlwZUFjY2Vzc29yPGluZGV4aW5nVHlwZT46OnNldFdpdGhWYWx1ZSh2bSwgdGhpcywg
ZGF0YSwgaSwgdmFsdWVzW2ldLmZpcnN0KTsKICAgICAKICAgICBIZWFwOjpoZWFwKHRoaXMpLT5w
b3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKIH0KQEAgLTEzODcsMTMgKzEzODcsMTMgQEAgdm9p
ZCBKU0FycmF5Ojpzb3J0VmVjdG9yKEV4ZWNTdGF0ZSogZXhlYwogICAgIC8vIENvcHkgdGhlIHZh
bHVlcyBiYWNrIGludG8gbV9zdG9yYWdlLgogICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JG
b3JBcnJheUNvbXBhcmUsIDQ0Pjo6SXRlcmF0b3IgaXRlcjsKICAgICBpdGVyLnN0YXJ0X2l0ZXJf
bGVhc3QodHJlZSk7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFs
RGF0YSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGVsZW1lbnRzVG9FeHRyYWN0VGhyZXNob2xkOyArK2kpIHsKICAgICAgICAgQVNTRVJU
KGkgPCBidXR0ZXJmbHkoKS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgICAgICBpZiAoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERvdWJsZSkKICAgICAgICAgICAgIGJ1dHRl
cmZseSgpLT5jb250aWd1b3VzRG91YmxlKClbaV0gPSB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVz
WyppdGVyXS52YWx1ZS5hc051bWJlcigpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjdXJy
ZW50SW5kZXhpbmdEYXRhKClbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUuYWJzdHJhY3Rv
cigpLm1fbm9kZXNbKml0ZXJdLnZhbHVlKTsKKyAgICAgICAgICAgIGN1cnJlbnRJbmRleGluZ0Rh
dGEoKVtpXS5zZXQodm0sIHRoaXMsIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbKml0ZXJdLnZh
bHVlKTsKICAgICAgICAgKytpdGVyOwogICAgIH0KICAgICAvLyBQdXQgdW5kZWZpbmVkIHZhbHVl
cyBiYWNrIGluLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxOSArMzksMTkgQEAgcHVibGljOgogICAgIHR5cGVk
ZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwogCiBwcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgSlNB
cnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSkKLSAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEs
IHN0cnVjdHVyZSwgYnV0dGVyZmx5KQorICAgIGV4cGxpY2l0IEpTQXJyYXkoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgICAgIDogSlNOb25G
aW5hbE9iamVjdCh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiAgICAgewogICAgIH0KIAogcHVi
bGljOgotICAgIHN0YXRpYyBKU0FycmF5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJl
KiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDApOworICAgIHN0YXRpYyBKU0FycmF5KiBjcmVh
dGUoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gMCk7CiAKICAgICAv
LyB0cnlDcmVhdGVVbmluaXRpYWxpemVkIGlzIHVzZWQgZm9yIGZhc3QgY29uc3RydWN0aW9uIG9m
IGFycmF5cyB3aG9zZSBzaXplIGFuZAogICAgIC8vIGNvbnRlbnRzIGFyZSBrbm93biBhdCB0aW1l
IG9mIGNyZWF0aW9uLiBDbGllbnRzIG9mIHRoaXMgaW50ZXJmYWNlIG11c3Q6CiAgICAgLy8gICAt
IG51bGwtY2hlY2sgdGhlIHJlc3VsdCAoaW5kaWNhdGluZyBvdXQgb2YgbWVtb3J5LCBvciBvdGhl
cndpc2UgdW5hYmxlIHRvIGFsbG9jYXRlIHZlY3RvcikuCiAgICAgLy8gICAtIGNhbGwgJ2luaXRp
YWxpemVJbmRleCcgZm9yIGFsbCBwcm9wZXJ0aWVzIGluIHNlcXVlbmNlLCBmb3IgMCA8PSBpIDwg
aW5pdGlhbExlbmd0aC4KLSAgICBzdGF0aWMgSlNBcnJheSogdHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKTsKKyAg
ICBzdGF0aWMgSlNBcnJheSogdHJ5Q3JlYXRlVW5pbml0aWFsaXplZChWTSYsIFN0cnVjdHVyZSos
IHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwogCkBAIC04NCw3
ICs4NCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgc2hpZnRDb3VudEZvclNoaWZ0KEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCiAgICAgewotICAg
ICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRleCwgY291bnQs
IGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgcmV0dXJu
IHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJh
eVN0b3JhZ2UoZXhlYy0+dm0oKSkpOwogICAgIH0KICAgICBib29sIHNoaWZ0Q291bnRGb3JTcGxp
Y2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkK
ICAgICB7CkBAIC0xMDYsNyArMTA2LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICBib29sIHVu
c2hpZnRDb3VudEZvclNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwg
dW5zaWduZWQgY291bnQpCiAgICAgewotICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFy
cmF5U3RvcmFnZShleGVjLCBzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4
ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5
U3RvcmFnZShleGVjLCBzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMt
PnZtKCkpKTsKICAgICB9CiAgICAgYm9vbCB1bnNoaWZ0Q291bnRGb3JTcGxpY2UoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKICAgICB7CkBAIC0x
MjksOSArMTI5LDkgQEAgcHVibGljOgogICAgIHZvaWQgZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiwg
TWFya2VkQXJndW1lbnRCdWZmZXImKTsKICAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhFeGVjU3Rh
dGUqLCBDYWxsRnJhbWUqLCB1aW50MzJfdCBsZW5ndGgpOwogCi0gICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIEluZGV4aW5nVHlwZSBpbmRleGlu
Z1R5cGUpCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIEluZGV4aW5nVHlw
ZSBpbmRleGluZ1R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
Z2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywgaW5kZXhpbmdUeXBlKTsKKyAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBpbmRleGluZ1R5cGUpOwogICAg
IH0KICAgICAgICAgCiBwcm90ZWN0ZWQ6CkBAIC0xNTYsNyArMTU2LDcgQEAgcHJpdmF0ZToKIAog
ICAgIGJvb2wgdW5zaGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZShFeGVjU3RhdGUqLCB1bnNp
Z25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCk7CiAgICAgYm9vbCB1bnNoaWZ0Q291bnRX
aXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVk
IGNvdW50LCBBcnJheVN0b3JhZ2UqKTsKLSAgICBib29sIHVuc2hpZnRDb3VudFNsb3dDYXNlKEpT
R2xvYmFsRGF0YSYsIGJvb2wsIHVuc2lnbmVkKTsKKyAgICBib29sIHVuc2hpZnRDb3VudFNsb3dD
YXNlKFZNJiwgYm9vbCwgdW5zaWduZWQpOwogCiAgICAgdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGlu
ZGV4aW5nVHlwZT4KICAgICB2b2lkIHNvcnROdW1lcmljVmVjdG9yKEV4ZWNTdGF0ZSosIEpTVmFs
dWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmKTsKQEAgLTE3NCwy
MSArMTc0LDIxIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21wYWN0Rm9yU29ydGluZyh1bnNpZ25l
ZCYgbnVtRGVmaW5lZCwgdW5zaWduZWQmIG5ld1JlbGV2YW50TGVuZ3RoKTsKIH07CiAKLWlubGlu
ZSBCdXR0ZXJmbHkqIGNyZWF0ZUNvbnRpZ3VvdXNBcnJheUJ1dHRlcmZseShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQmIHZlY3Rvckxlbmd0aCkKK2lu
bGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUNvbnRpZ3VvdXNBcnJheUJ1dHRlcmZseShWTSYgdm0sIHVu
c2lnbmVkIGxlbmd0aCwgdW5zaWduZWQmIHZlY3Rvckxlbmd0aCkKIHsKICAgICBJbmRleGluZ0hl
YWRlciBoZWFkZXI7CiAgICAgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCBCQVNFX1ZF
Q1RPUl9MRU4pOwogICAgIGhlYWRlci5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKICAg
ICBoZWFkZXIuc2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQg
PSBCdXR0ZXJmbHk6OmNyZWF0ZSgKLSAgICAgICAgZ2xvYmFsRGF0YSwgMCwgMCwgdHJ1ZSwgaGVh
ZGVyLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICAgICAgdm0s
IDAsIDAsIHRydWUsIGhlYWRlciwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotaW5saW5lIEJ1dHRlcmZseSogY3JlYXRlQXJy
YXlCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsTGVu
Z3RoKQoraW5saW5lIEJ1dHRlcmZseSogY3JlYXRlQXJyYXlCdXR0ZXJmbHkoVk0mIHZtLCB1bnNp
Z25lZCBpbml0aWFsTGVuZ3RoKQogewogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVy
Zmx5OjpjcmVhdGUoCi0gICAgICAgIGdsb2JhbERhdGEsIDAsIDAsIHRydWUsIGJhc2VJbmRleGlu
Z0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IoQkFT
RV9WRUNUT1JfTEVOKSk7CisgICAgICAgIHZtLCAwLCAwLCB0cnVlLCBiYXNlSW5kZXhpbmdIZWFk
ZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKEJBU0VfVkVD
VE9SX0xFTikpOwogICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCk7CiAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgPSAwOwogICAgIHN0b3JhZ2UtPm1f
c3BhcnNlTWFwLmNsZWFyKCk7CkBAIC0xOTYsOSArMTk2LDkgQEAgaW5saW5lIEJ1dHRlcmZseSog
Y3JlYXRlQXJyYXlCdXR0ZXJmbHkoSgogICAgIHJldHVybiBidXR0ZXJmbHk7CiB9CiAKLUJ1dHRl
cmZseSogY3JlYXRlQXJyYXlCdXR0ZXJmbHlJbkRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9i
YWxEYXRhJiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCk7CitCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5
QnV0dGVyZmx5SW5EaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKFZNJiwgdW5zaWduZWQgaW5pdGlhbExl
bmd0aCk7CiAKLWlubGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkK
K2lubGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKIHsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eTsKICAgICBpZiAoTElLRUxZKCFoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSkpKSB7CkBAIC0yMDgsNyArMjA4LDcgQEAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNy
ZWF0ZShKU0dsb2JhbAogICAgICAgICAgICAgfHwgaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpCiAgICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpKTsKICAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoOwotICAgICAgICBidXR0
ZXJmbHkgPSBjcmVhdGVDb250aWd1b3VzQXJyYXlCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgaW5pdGlh
bExlbmd0aCwgdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgYnV0dGVyZmx5ID0gY3JlYXRlQ29udGln
dW91c0FycmF5QnV0dGVyZmx5KHZtLCBpbml0aWFsTGVuZ3RoLCB2ZWN0b3JMZW5ndGgpOwogICAg
ICAgICBBU1NFUlQoaW5pdGlhbExlbmd0aCA8IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpOwogICAg
ICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSB7CiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yTGVuZ3RoOyArK2kpCkBAIC0yMTgs
MTQgKzIxOCwxNCBAQCBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlKEpTR2xvYmFsCiAg
ICAgICAgIEFTU0VSVCgKICAgICAgICAgICAgIHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0g
QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZQogICAgICAgICAgICAgfHwgc3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhBcnJheVN0b3JhZ2UpOwotICAgICAgICBidXR0ZXJm
bHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAg
ICAgICAgYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJmbHkodm0sIGluaXRpYWxMZW5ndGgp
OwogICAgIH0KLSAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJl
LCBidXR0ZXJmbHkpOwotICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAg
ICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KHZt
LmhlYXApKSBKU0FycmF5KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgYXJyYXktPmZp
bmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLWlubGluZSBKU0FycmF5
KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCitpbmxpbmUg
SlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogewogICAgIHVuc2lnbmVkIHZl
Y3Rvckxlbmd0aCA9IHN0ZDo6bWF4KEJBU0VfVkVDVE9SX0xFTiwgaW5pdGlhbExlbmd0aCk7CiAg
ICAgaWYgKHZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCkBAIC0yNDAs
NyArMjQwLDcgQEAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdAogICAg
ICAgICAgICAgfHwgaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAK
ICAgICAgICAgdm9pZCogdGVtcDsKLSAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxs
b2NhdGVTdG9yYWdlKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIHZlY3Rvckxlbmd0
aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVtcCkpCisgICAgICAgIGlmICghdm0uaGVh
cC50cnlBbGxvY2F0ZVN0b3JhZ2UoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgdmVj
dG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksICZ0ZW1wKSkKICAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAs
IDAsIDApOwogICAgICAgICBidXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgp
OwpAQCAtMjUxLDcgKzI1MSw3IEBAIGlubGluZSBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVV
bmluaXQKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIHZvaWQqIHRlbXA7Ci0gICAg
ICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRv
dGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSks
ICZ0ZW1wKSkKKyAgICAgICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJm
bHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVu
Z3RoKSksICZ0ZW1wKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBidXR0ZXJmbHkg
PSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIDApOwogICAgICAgICAqYnV0dGVyZmx5LT5p
bmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoLCB2
ZWN0b3JMZW5ndGgpOwpAQCAtMjYxLDggKzI2MSw4IEBAIGlubGluZSBKU0FycmF5KiBKU0FycmF5
Ojp0cnlDcmVhdGVVbmluaXQKICAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9
IGluaXRpYWxMZW5ndGg7CiAgICAgfQogICAgICAgICAKLSAgICBKU0FycmF5KiBhcnJheSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJy
YXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwotICAgIGFycmF5LT5maW5pc2hD
cmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEpTQXJyYXk+KHZtLmhlYXApKSBKU0FycmF5KHZtLCBzdHJ1Y3R1cmUsIGJ1
dHRlcmZseSk7CisgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gYXJy
YXk7CiB9CiAKQEAgLTI4NCw5ICsyODQsOSBAQCBpbmxpbmUgYm9vbCBpc0pTQXJyYXkoSlNWYWx1
ZSB2KSB7IHJldHVyCiAKIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIGNvbnN0IEFyZ0xpc3QmIHZhbHVlcykK
IHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB2YWx1ZXMuc2l6
ZSgpOwotICAgIEpTQXJyYXkqIGFycmF5ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZChnbG9iYWxEYXRhLCBhcnJheVN0cnVjdHVyZSwgbGVuZ3RoKTsKKyAgICBKU0FycmF5KiBhcnJh
eSA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIGFycmF5U3RydWN0dXJlLCBs
ZW5ndGgpOwogCiAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBwcm9iYWJseSB0aHJvdyBhbiBvdXQg
b2YgbWVtb3J5IGVycm9yIGhlcmUsIGJ1dAogICAgIC8vIHdoZW4gbWFraW5nIHRoaXMgY2hhbmdl
IHdlIHNob3VsZCBjaGVjayB0aGF0IGFsbCBjbGllbnRzIG9mIHRoaXMKQEAgLTI5NCwxNCArMjk0
LDE0IEBAIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUKICAgICBSRUxF
QVNFX0FTU0VSVChhcnJheSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpCi0gICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgoZ2xvYmFsRGF0YSwgaSwgdmFs
dWVzLmF0KGkpKTsKKyAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgaSwgdmFsdWVz
LmF0KGkpKTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAgICAgCiBpbmxpbmUgSlNBcnJheSogY29u
c3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCBj
b25zdCBKU1ZhbHVlKiB2YWx1ZXMsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgSlNBcnJheSogYXJyYXkg
PSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIGFycmF5U3RydWN0
dXJlLCBsZW5ndGgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNBcnJheSogYXJy
YXkgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCBhcnJheVN0cnVjdHVyZSwg
bGVuZ3RoKTsKIAogICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgcHJvYmFibHkgdGhyb3cgYW4gb3V0
IG9mIG1lbW9yeSBlcnJvciBoZXJlLCBidXQKICAgICAvLyB3aGVuIG1ha2luZyB0aGlzIGNoYW5n
ZSB3ZSBzaG91bGQgY2hlY2sgdGhhdCBhbGwgY2xpZW50cyBvZiB0aGlzCkBAIC0zMDksNyArMzA5
LDcgQEAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZQogICAgIFJFTEVB
U0VfQVNTRVJUKGFycmF5KTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkKLSAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleChnbG9iYWxEYXRhLCBpLCB2YWx1
ZXNbaV0pOworICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCB2YWx1ZXNbaV0p
OwogICAgIHJldHVybiBhcnJheTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIEpTQm91bmRGdW5jdGlvbiogSlNCb3VuZEZ1bmN0aW9u
OjpjcmVhdGUKICAgICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSBKU0M6OmdldENvbnN0
cnVjdERhdGEodGFyZ2V0RnVuY3Rpb24sIGNvbnN0cnVjdERhdGEpOwogICAgIGJvb2wgY2FuQ29u
c3RydWN0ID0gY29uc3RydWN0VHlwZSAhPSBDb25zdHJ1Y3RUeXBlTm9uZTsKIAotICAgIE5hdGl2
ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBleGVjLT5nbG9iYWxEYXRhKCkuZ2V0SG9zdEZ1bmN0
aW9uKGJvdW5kRnVuY3Rpb25DYWxsLCBjYW5Db25zdHJ1Y3QgPyBib3VuZEZ1bmN0aW9uQ29uc3Ry
dWN0IDogY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpOworICAgIE5hdGl2ZUV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUgPSBleGVjLT52bSgpLmdldEhvc3RGdW5jdGlvbihib3VuZEZ1bmN0aW9u
Q2FsbCwgY2FuQ29uc3RydWN0ID8gYm91bmRGdW5jdGlvbkNvbnN0cnVjdCA6IGNhbGxIb3N0RnVu
Y3Rpb25Bc0NvbnN0cnVjdG9yKTsKICAgICBKU0JvdW5kRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNCb3VuZEZ1bmN0aW9uPigqZXhlYy0+aGVhcCgpKSkg
SlNCb3VuZEZ1bmN0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5ib3VuZEZ1
bmN0aW9uU3RydWN0dXJlKCksIHRhcmdldEZ1bmN0aW9uLCBib3VuZFRoaXMsIGJvdW5kQXJncyk7
CiAKICAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24oZXhlYywgZXhlY3V0YWJsZSwgbGVuZ3Ro
LCBuYW1lKTsKQEAgLTk5LDkgKzk5LDkgQEAgYm9vbCBKU0JvdW5kRnVuY3Rpb246OmN1c3RvbUhh
c0luc3RhbmNlKAogCiBKU0JvdW5kRnVuY3Rpb246OkpTQm91bmRGdW5jdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24sIEpTVmFsdWUgYm91bmRUaGlzLCBKU1ZhbHVlIGJv
dW5kQXJncykKICAgICA6IEJhc2UoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCi0gICAg
LCBtX3RhcmdldEZ1bmN0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdGFyZ2V0RnVuY3Rp
b24pCi0gICAgLCBtX2JvdW5kVGhpcyhleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGJvdW5kVGhp
cykKLSAgICAsIG1fYm91bmRBcmdzKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYm91bmRBcmdz
KQorICAgICwgbV90YXJnZXRGdW5jdGlvbihleGVjLT52bSgpLCB0aGlzLCB0YXJnZXRGdW5jdGlv
bikKKyAgICAsIG1fYm91bmRUaGlzKGV4ZWMtPnZtKCksIHRoaXMsIGJvdW5kVGhpcykKKyAgICAs
IG1fYm91bmRBcmdzKGV4ZWMtPnZtKCksIHRoaXMsIGJvdW5kQXJncykKIHsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgJKHJl
dmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRG
dW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00NywxMCArNDcsMTAgQEAgcHVibGljOgogICAg
IEpTVmFsdWUgYm91bmRUaGlzKCkgeyByZXR1cm4gbV9ib3VuZFRoaXMuZ2V0KCk7IH0KICAgICBK
U1ZhbHVlIGJvdW5kQXJncygpIHsgcmV0dXJuIG1fYm91bmRBcmdzLmdldCgpOyB9CiAKLSAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCisgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpIAogICAgIHsKICAgICAgICAgQVNTRVJU
KGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxE
YXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7IAorICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0Z1bmN0aW9uVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IENs
YXNzSW5mbyBzX2luZm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NK
U1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NKU1ZhbHVlLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBA
QCBKU09iamVjdCogSlNWYWx1ZTo6c3ludGhlc2l6ZVByb3RvdHlwZShFCiAvLyBFQ01BIDguNy4y
CiB2b2lkIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQog
ewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogCiAgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5h
bWUuYXNJbmRleCgpOwogICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgp
IHsKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlKEV4ZWNT
dGF0ZSogCiAgICAgZm9yICg7IDsgb2JqID0gYXNPYmplY3QocHJvdG90eXBlKSkgewogICAgICAg
ICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwogICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7Ci0g
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG9iai0+c3RydWN0dXJlKCktPmdldChnbG9i
YWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmotPnN0cnVjdHVyZSgpLT5nZXQodm0sIHByb3Bl
cnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CiAgICAgICAgIGlmIChvZmZzZXQg
IT0gaW52YWxpZE9mZnNldCkgewogICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25s
eSkgewogICAgICAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQpAQCAtMjk1LDIw
ICsyOTUsMjAgQEAgYm9vbCBKU1ZhbHVlOjppc1ZhbGlkQ2FsbGVlKCkKIAogSlNTdHJpbmcqIEpT
VmFsdWU6OnRvU3RyaW5nU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIEFTU0VSVCghaXNTdHJpbmcoKSk7CiAgICAgaWYgKGlzSW50MzIo
KSkKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCZnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLm51bWVy
aWNTdHJpbmdzLmFkZChhc0ludDMyKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCZ2bSwg
dm0ubnVtZXJpY1N0cmluZ3MuYWRkKGFzSW50MzIoKSkpOwogICAgIGlmIChpc0RvdWJsZSgpKQot
ICAgICAgICByZXR1cm4ganNTdHJpbmcoJmdsb2JhbERhdGEsIGdsb2JhbERhdGEubnVtZXJpY1N0
cmluZ3MuYWRkKGFzRG91YmxlKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCZ2bSwgdm0u
bnVtZXJpY1N0cmluZ3MuYWRkKGFzRG91YmxlKCkpKTsKICAgICBpZiAoaXNUcnVlKCkpCi0gICAg
ICAgIHJldHVybiBnbG9iYWxEYXRhLnNtYWxsU3RyaW5ncy50cnVlU3RyaW5nKCk7CisgICAgICAg
IHJldHVybiB2bS5zbWFsbFN0cmluZ3MudHJ1ZVN0cmluZygpOwogICAgIGlmIChpc0ZhbHNlKCkp
Ci0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLnNtYWxsU3RyaW5ncy5mYWxzZVN0cmluZygpOwor
ICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdzLmZhbHNlU3RyaW5nKCk7CiAgICAgaWYgKGlz
TnVsbCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS5zbWFsbFN0cmluZ3MubnVsbFN0cmlu
ZygpOworICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdzLm51bGxTdHJpbmcoKTsKICAgICBp
ZiAoaXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEuc21hbGxTdHJpbmdz
LnVuZGVmaW5lZFN0cmluZygpOworICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdzLnVuZGVm
aW5lZFN0cmluZygpOwogCiAgICAgQVNTRVJUKGlzQ2VsbCgpKTsKICAgICBKU1ZhbHVlIHZhbHVl
ID0gYXNDZWxsKCktPnRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlclN0cmluZyk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCShyZXZpc2lvbiAxNDg2NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEV4ZWNTdGF0
ZTsKIGNsYXNzIEpTQ2VsbDsKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwogY2xhc3Mg
SlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBKU09iamVjdDsKIGNsYXNzIEpTU3RyaW5nOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDE0ODY1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICBKU0NlbGwoQ3JlYXRpbmdFYXJseUNlbGxUYWcp
OwogCiBwcm90ZWN0ZWQ6Ci0gICAgSlNDZWxsKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwor
ICAgIEpTQ2VsbChWTSYsIFN0cnVjdHVyZSopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKIHB1YmxpYzoKQEAgLTc4LDcgKzc4LDcgQEAgcHVi
bGljOgogICAgIGJvb2wgaXNBUElWYWx1ZVdyYXBwZXIoKSBjb25zdDsKIAogICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRh
JiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBzZXRTdHJ1Y3R1cmUoVk0mLCBTdHJ1Y3R1cmUqKTsK
ICAgICB2b2lkIGNsZWFyU3RydWN0dXJlKCkgeyBtX3N0cnVjdHVyZS5jbGVhcigpOyB9CiAKICAg
ICBjb25zdCBjaGFyKiBjbGFzc05hbWUoKTsKQEAgLTE0MSw4ICsxNDEsOCBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IFR5
cGVkQXJyYXlOb25lOwogcHJvdGVjdGVkOgogCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0ds
b2JhbERhdGEmKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVj
dHVyZSosIENyZWF0aW5nRWFybHlDZWxsVGFnKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
Jik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFN0cnVjdHVyZSosIENyZWF0aW5nRWFy
bHlDZWxsVGFnKTsKIAogICAgIC8vIEJhc2UgaW1wbGVtZW50YXRpb247IGZvciBub24tb2JqZWN0
IGNsYXNzZXMgaW1wbGVtZW50cyBnZXRQcm9wZXJ0eVNsb3QuCiAgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
SW5saW5lcy5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDMyICszOSwzMiBAQCBp
bmxpbmUgSlNDZWxsOjpKU0NlbGwoQ3JlYXRpbmdFYXJseUNlbGxUCiB7CiB9CiAKLWlubGluZSBK
U0NlbGw6OkpTQ2VsbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQotICAgIDogbV9zdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgdGhpcywgc3RydWN0dXJlKQoraW5s
aW5lIEpTQ2VsbDo6SlNDZWxsKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBt
X3N0cnVjdHVyZSh2bSwgdGhpcywgc3RydWN0dXJlKQogewogfQogCi1pbmxpbmUgdm9pZCBKU0Nl
bGw6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK2lubGluZSB2b2lk
IEpTQ2VsbDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogI2lmIEVOQUJMRShHQ19WQUxJREFU
SU9OKQotICAgIEFTU0VSVChnbG9iYWxEYXRhLmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkpOwotICAg
IGdsb2JhbERhdGEuc2V0SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoMCk7CisgICAgQVNTRVJUKHZt
LmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkpOworICAgIHZtLnNldEluaXRpYWxpemluZ09iamVjdENs
YXNzKDApOwogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsRGF0YSk7CisgICAgVU5VU0VE
X1BBUkFNKHZtKTsKICNlbmRpZgogICAgIEFTU0VSVChtX3N0cnVjdHVyZSk7CiB9CiAKLWlubGlu
ZSB2b2lkIEpTQ2VsbDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ3JlYXRpbmdFYXJseUNlbGxUYWcpCitpbmxpbmUgdm9pZCBK
U0NlbGw6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENyZWF0
aW5nRWFybHlDZWxsVGFnKQogewogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQotICAgIEFTU0VS
VChnbG9iYWxEYXRhLmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkpOwotICAgIGdsb2JhbERhdGEuc2V0
SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoMCk7CisgICAgQVNTRVJUKHZtLmlzSW5pdGlhbGl6aW5n
T2JqZWN0KCkpOworICAgIHZtLnNldEluaXRpYWxpemluZ09iamVjdENsYXNzKDApOwogICAgIGlm
IChzdHJ1Y3R1cmUpCiAjZW5kaWYKLSAgICAgICAgbV9zdHJ1Y3R1cmUuc2V0RWFybHlWYWx1ZShn
bG9iYWxEYXRhLCB0aGlzLCBzdHJ1Y3R1cmUpOworICAgICAgICBtX3N0cnVjdHVyZS5zZXRFYXJs
eVZhbHVlKHZtLCB0aGlzLCBzdHJ1Y3R1cmUpOwogICAgIC8vIFZlcnkgZmlyc3Qgc2V0IG9mIGFs
bG9jYXRpb25zIHdvbid0IGhhdmUgYSByZWFsIHN0cnVjdHVyZS4KLSAgICBBU1NFUlQobV9zdHJ1
Y3R1cmUgfHwgIWdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0dXJlKTsKKyAgICBBU1NFUlQobV9z
dHJ1Y3R1cmUgfHwgIXZtLnN0cnVjdHVyZVN0cnVjdHVyZSk7CiB9CiAKIGlubGluZSBTdHJ1Y3R1
cmUqIEpTQ2VsbDo6c3RydWN0dXJlKCkgY29uc3QKQEAgLTg0LDggKzg0LDggQEAgdm9pZCogYWxs
b2NhdGVDZWxsKEhlYXAmIGhlYXAsIHNpemVfdCBzaQogewogICAgIEFTU0VSVChzaXplID49IHNp
emVvZihUKSk7CiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCi0gICAgQVNTRVJUKCFoZWFwLmds
b2JhbERhdGEoKS0+aXNJbml0aWFsaXppbmdPYmplY3QoKSk7Ci0gICAgaGVhcC5nbG9iYWxEYXRh
KCktPnNldEluaXRpYWxpemluZ09iamVjdENsYXNzKCZUOjpzX2luZm8pOworICAgIEFTU0VSVCgh
aGVhcC52bSgpLT5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKKyAgICBoZWFwLnZtKCktPnNldElu
aXRpYWxpemluZ09iamVjdENsYXNzKCZUOjpzX2luZm8pOwogI2VuZGlmCiAgICAgSlNDZWxsKiBy
ZXN1bHQgPSAwOwogICAgIGlmIChUOjpuZWVkc0Rlc3RydWN0aW9uICYmIFQ6Omhhc0ltbW9ydGFs
U3RydWN0dXJlKQpAQCAtMTM0LDE0ICsxMzQsMTQgQEAgaW5saW5lIGJvb2wgSlNDZWxsOjppc0FQ
SVZhbHVlV3JhcHBlcigpIAogICAgIHJldHVybiBtX3N0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBl
KCkgPT0gQVBJVmFsdWVXcmFwcGVyVHlwZTsKIH0KIAotaW5saW5lIHZvaWQgSlNDZWxsOjpzZXRT
dHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
K2lubGluZSB2b2lkIEpTQ2VsbDo6c2V0U3RydWN0dXJlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiB7CiAgICAgQVNTRVJUKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNp
dENoaWxkcmVuKCkgPT0gdGhpcy0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlz
aXRDaGlsZHJlbigpKTsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5jbGFzc0luZm8oKSA9PSBtX3N0
cnVjdHVyZS0+Y2xhc3NJbmZvKCkpOwogICAgIEFTU0VSVCghbV9zdHJ1Y3R1cmUKICAgICAgICAg
fHwgbV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVk
KCkKICAgICAgICAgfHwgbV9zdHJ1Y3R1cmUuZ2V0KCkgPT0gc3RydWN0dXJlKTsKLSAgICBtX3N0
cnVjdHVyZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgc3RydWN0dXJlKTsKKyAgICBtX3N0cnVjdHVy
ZS5zZXQodm0sIHRoaXMsIHN0cnVjdHVyZSk7CiB9CiAKIGlubGluZSBjb25zdCBNZXRob2RUYWJs
ZSogSlNDZWxsOjptZXRob2RUYWJsZUZvckRlc3RydWN0aW9uKCkgY29uc3QKQEAgLTE3Nyw4ICsx
NzcsOCBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSlNDZWxsOjpmYXN0R2V0T3duCiB7CiAgICAg
aWYgKCFzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qo
KSAmJiAhc3RydWN0dXJlKCktPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSkgewogICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBuYW1lLmltcGwoKS0+aGFzSGFzaCgpCi0gICAgICAg
ICAgICA/IHN0cnVjdHVyZSgpLT5nZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4
ZWMsIG5hbWUpKQotICAgICAgICAgICAgOiBzdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgbmFtZSk7CisgICAgICAgICAgICA/IHN0cnVjdHVyZSgpLT5nZXQoZXhlYy0+dm0oKSwg
SWRlbnRpZmllcihleGVjLCBuYW1lKSkKKyAgICAgICAgICAgIDogc3RydWN0dXJlKCktPmdldChl
eGVjLT52bSgpLCBuYW1lKTsKICAgICAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KQog
ICAgICAgICAgICAgcmV0dXJuIGFzT2JqZWN0KHRoaXMpLT5sb2NhdGlvbkZvck9mZnNldChvZmZz
ZXQpLT5nZXQoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0RhdGVNYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0RhdGVNYXRoLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQs
NyBAQCBzdGF0aWMgaW5saW5lIGludCBtc1RvV2Vla0RheShkb3VibGUgbXMpCiAvLyBJZiB0aGlz
IGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIE5hTiBpdCByZXR1cm5zIE5hTi4KIHN0YXRpYyBkb3Vi
bGUgZ2V0RFNUT2Zmc2V0KEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIG1zLCBkb3VibGUgdXRjT2Zm
c2V0KQogewotICAgIERTVE9mZnNldENhY2hlJiBjYWNoZSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5k
c3RPZmZzZXRDYWNoZTsKKyAgICBEU1RPZmZzZXRDYWNoZSYgY2FjaGUgPSBleGVjLT52bSgpLmRz
dE9mZnNldENhY2hlOwogICAgIGRvdWJsZSBzdGFydCA9IGNhY2hlLnN0YXJ0OwogICAgIGRvdWJs
ZSBlbmQgPSBjYWNoZS5lbmQ7CiAKQEAgLTE5NSwxMSArMTk1LDExIEBAIHN0YXRpYyBkb3VibGUg
Z2V0RFNUT2Zmc2V0KEV4ZWNTdGF0ZSogZXgKICAqLwogZG91YmxlIGdldFVUQ09mZnNldChFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgZG91YmxlIHV0Y09mZnNldCA9IGV4ZWMtPmdsb2JhbERhdGEo
KS5jYWNoZWRVVENPZmZzZXQ7CisgICAgZG91YmxlIHV0Y09mZnNldCA9IGV4ZWMtPnZtKCkuY2Fj
aGVkVVRDT2Zmc2V0OwogICAgIGlmICghc3RkOjppc25hbih1dGNPZmZzZXQpKQogICAgICAgICBy
ZXR1cm4gdXRjT2Zmc2V0OwotICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5jYWNoZWRVVENPZmZzZXQg
PSBjYWxjdWxhdGVVVENPZmZzZXQoKTsKLSAgICByZXR1cm4gZXhlYy0+Z2xvYmFsRGF0YSgpLmNh
Y2hlZFVUQ09mZnNldDsKKyAgICBleGVjLT52bSgpLmNhY2hlZFVUQ09mZnNldCA9IGNhbGN1bGF0
ZVVUQ09mZnNldCgpOworICAgIHJldHVybiBleGVjLT52bSgpLmNhY2hlZFVUQ09mZnNldDsKIH0K
IAogZG91YmxlIGdyZWdvcmlhbkRhdGVUaW1lVG9NUyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEdy
ZWdvcmlhbkRhdGVUaW1lJiB0LCBkb3VibGUgbWlsbGlTZWNvbmRzLCBib29sIGlucHV0SXNVVEMp
CkBAIC0yNjEsMTMgKzI2MSwxMyBAQCBkb3VibGUgcGFyc2VEYXRlRnJvbU51bGxUZXJtaW5hdGVk
Q2hhcmFjCiAKIGRvdWJsZSBwYXJzZURhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcm
IGRhdGUpCiB7Ci0gICAgaWYgKGRhdGUgPT0gZXhlYy0+Z2xvYmFsRGF0YSgpLmNhY2hlZERhdGVT
dHJpbmcpCi0gICAgICAgIHJldHVybiBleGVjLT5nbG9iYWxEYXRhKCkuY2FjaGVkRGF0ZVN0cmlu
Z1ZhbHVlOworICAgIGlmIChkYXRlID09IGV4ZWMtPnZtKCkuY2FjaGVkRGF0ZVN0cmluZykKKyAg
ICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkuY2FjaGVkRGF0ZVN0cmluZ1ZhbHVlOwogICAgIGRvdWJs
ZSB2YWx1ZSA9IHBhcnNlRVM1RGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3RlcnMoZGF0ZS51
dGY4KCkuZGF0YSgpKTsKICAgICBpZiAoc3RkOjppc25hbih2YWx1ZSkpCiAgICAgICAgIHZhbHVl
ID0gcGFyc2VEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVycyhleGVjLCBkYXRlLnV0Zjgo
KS5kYXRhKCkpOwotICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5jYWNoZWREYXRlU3RyaW5nID0gZGF0
ZTsKLSAgICBleGVjLT5nbG9iYWxEYXRhKCkuY2FjaGVkRGF0ZVN0cmluZ1ZhbHVlID0gdmFsdWU7
CisgICAgZXhlYy0+dm0oKS5jYWNoZWREYXRlU3RyaW5nID0gZGF0ZTsKKyAgICBleGVjLT52bSgp
LmNhY2hlZERhdGVTdHJpbmdWYWx1ZSA9IHZhbHVlOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0
aWJsZU9iamVjdC5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOCw4ICsx
OCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IGNsYXNzSW5mb09mZnNldCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0Rlc3RydWN0aWJsZU9iamVjdCwgbV9jbGFzc0luZm8p
OyB9CiAKIHByb3RlY3RlZDoKLSAgICBKU0Rlc3RydWN0aWJsZU9iamVjdChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9
IDApCi0gICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1
dHRlcmZseSkKKyAgICBKU0Rlc3RydWN0aWJsZU9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IDApCisgICAgICAgIDogSlNOb25GaW5hbE9i
amVjdCh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiAgICAgICAgICwgbV9jbGFzc0luZm8oc3Ry
dWN0dXJlLT5jbGFzc0luZm8oKSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2NsYXNzSW5mbyk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5j
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDEyICs2MywxMiBAQCBKU0Z1bmN0aW9uKiBK
U0Z1bmN0aW9uOjpjcmVhdGUoRXhlY1N0YXRlCiAjaWYgIUVOQUJMRShKSVQpCiAgICAgVU5VU0VE
X1BBUkFNKGludHJpbnNpYyk7CiAjZWxzZQotICAgIGlmIChpbnRyaW5zaWMgIT0gTm9JbnRyaW5z
aWMgJiYgZXhlYy0+Z2xvYmFsRGF0YSgpLmNhblVzZUpJVCgpKSB7CisgICAgaWYgKGludHJpbnNp
YyAhPSBOb0ludHJpbnNpYyAmJiBleGVjLT52bSgpLmNhblVzZUpJVCgpKSB7CiAgICAgICAgIEFT
U0VSVChuYXRpdmVDb25zdHJ1Y3RvciA9PSBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rvcik7
Ci0gICAgICAgIGV4ZWN1dGFibGUgPSBleGVjLT5nbG9iYWxEYXRhKCkuZ2V0SG9zdEZ1bmN0aW9u
KG5hdGl2ZUZ1bmN0aW9uLCBpbnRyaW5zaWMpOworICAgICAgICBleGVjdXRhYmxlID0gZXhlYy0+
dm0oKS5nZXRIb3N0RnVuY3Rpb24obmF0aXZlRnVuY3Rpb24sIGludHJpbnNpYyk7CiAgICAgfSBl
bHNlCiAjZW5kaWYKLSAgICAgICAgZXhlY3V0YWJsZSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5nZXRI
b3N0RnVuY3Rpb24obmF0aXZlRnVuY3Rpb24sIG5hdGl2ZUNvbnN0cnVjdG9yKTsKKyAgICAgICAg
ZXhlY3V0YWJsZSA9IGV4ZWMtPnZtKCkuZ2V0SG9zdEZ1bmN0aW9uKG5hdGl2ZUZ1bmN0aW9uLCBu
YXRpdmVDb25zdHJ1Y3Rvcik7CiAKICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+KCpleGVjLT5oZWFwKCkpKSBKU0Z1bmN0aW9u
KGV4ZWMsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVyZSgpKTsK
ICAgICAvLyBDYW4ndCBkbyB0aGlzIGR1cmluZyBpbml0aWFsaXphdGlvbiBiZWNhdXNlIGdldEhv
c3RGdW5jdGlvbiBtaWdodCBkbyBhIEdDIGFsbG9jYXRpb24uCkBAIC04Miw5ICs4Miw5IEBAIHZv
aWQgSlNGdW5jdGlvbjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB9CiAKIEpTRnVuY3Rpb246OkpT
RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IEJhc2UoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1
Y3R1cmUpCisgICAgOiBCYXNlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSkKICAgICAsIG1fZXhlY3V0
YWJsZSgpCi0gICAgLCBtX3Njb3BlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZ2xvYmFsT2Jq
ZWN0KQorICAgICwgbV9zY29wZShleGVjLT52bSgpLCB0aGlzLCBnbG9iYWxPYmplY3QpCiAgICAg
Ly8gV2UgaW5pdGlhbGl6ZSBibGluZCBzbyB0aGF0IGNoYW5nZXMgdG8gdGhlIHByb3RvdHlwZSBh
ZnRlciBmdW5jdGlvbiBjcmVhdGlvbiBidXQgYmVmb3JlCiAgICAgLy8gdGhlIG9wdGltaXplciBr
aWNrcyBpbiBkb24ndCBkaXNhYmxlIG9wdGltaXphdGlvbnMuIE9uY2UgdGhlIG9wdGltaXplciBr
aWNrcyBpbiwgdGhlCiAgICAgLy8gd2F0Y2hwb2ludCB3aWxsIHN0YXJ0IHdhdGNoaW5nIGFuZCBh
bnkgY2hhbmdlcyB3aWxsIGJvdGggZm9yY2UgZGVvcHRpbWl6YXRpb24gYW5kIGRpc2FibGUKQEAg
LTEwMCwzMSArMTAwLDMxIEBAIEpTRnVuY3Rpb246OkpTRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVj
LCAKIAogdm9pZCBKU0Z1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIE5h
dGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFt
ZSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwogICAgIEFTU0VSVChpbmhlcml0cygm
c19pbmZvKSk7Ci0gICAgbV9leGVjdXRhYmxlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IGV4ZWN1dGFibGUpOwotICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmds
b2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc1N0cmluZyhleGVjLCBuYW1lKSwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGxlbmd0aCks
IERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBtX2V4ZWN1dGFibGUuc2V0
KGV4ZWMtPnZtKCksIHRoaXMsIGV4ZWN1dGFibGUpOworICAgIHB1dERpcmVjdChleGVjLT52bSgp
LCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzU3RyaW5nKGV4ZWMsIG5hbWUpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZt
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGxlbmd0aCksIERvbnRE
ZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKIH0KIAogT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUqIEpTRnVuY3Rpb246OmNyZWF0ZUFsbG9jYXRpb25Qcm9maWxlKEV4ZWNTdGF0ZSogZXhlYywg
c2l6ZV90IGlubGluZUNhcGFjaXR5KQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9
IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBKU09iamVjdCogcHJvdG90eXBlID0ganNEeW5hbWlj
Q2FzdDxKU09iamVjdCo+KGdldChleGVjLCBnbG9iYWxEYXRhLnByb3BlcnR5TmFtZXMtPnByb3Rv
dHlwZSkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNPYmplY3QqIHByb3RvdHlw
ZSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihnZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+
cHJvdG90eXBlKSk7CiAgICAgaWYgKCFwcm90b3R5cGUpCiAgICAgICAgIHByb3RvdHlwZSA9IGds
b2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKTsKLSAgICBtX2FsbG9jYXRpb25Qcm9maWxl
LmluaXRpYWxpemUoZ2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSwgdGhpcywgcHJvdG90eXBl
LCBpbmxpbmVDYXBhY2l0eSk7CisgICAgbV9hbGxvY2F0aW9uUHJvZmlsZS5pbml0aWFsaXplKGds
b2JhbE9iamVjdCgpLT52bSgpLCB0aGlzLCBwcm90b3R5cGUsIGlubGluZUNhcGFjaXR5KTsKICAg
ICByZXR1cm4gJm1fYWxsb2NhdGlvblByb2ZpbGU7CiB9CiAKIFN0cmluZyBKU0Z1bmN0aW9uOjpu
YW1lKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gZ2V0KGV4ZWMsIGV4ZWMtPmdsb2Jh
bERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5uYW1lKS50b1dURlN0cmluZyhleGVjKTsKKyAgICByZXR1
cm4gZ2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bmFtZSkudG9XVEZTdHJpbmco
ZXhlYyk7CiB9CiAKIFN0cmluZyBKU0Z1bmN0aW9uOjpkaXNwbGF5TmFtZShFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgSlNWYWx1ZSBkaXNwbGF5TmFtZSA9IGdldERpcmVjdChleGVjLT5nbG9iYWxE
YXRhKCksIGV4ZWMtPmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5kaXNwbGF5TmFtZSk7Cisg
ICAgSlNWYWx1ZSBkaXNwbGF5TmFtZSA9IGdldERpcmVjdChleGVjLT52bSgpLCBleGVjLT52bSgp
LnByb3BlcnR5TmFtZXMtPmRpc3BsYXlOYW1lKTsKICAgICAKICAgICBpZiAoZGlzcGxheU5hbWUg
JiYgaXNKU1N0cmluZyhkaXNwbGF5TmFtZSkpCiAgICAgICAgIHJldHVybiBhc1N0cmluZyhkaXNw
bGF5TmFtZSktPnRyeUdldFZhbHVlKCk7CkBAIC0yMjEsMTMgKzIyMSwxMyBAQCBib29sIEpTRnVu
Y3Rpb246OmdldE93blByb3BlcnR5U2xvdChKU0NlCiAgICAgICAgIHJldHVybiBCYXNlOjpnZXRP
d25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIAog
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSkg
ewotICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7
Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHRoaXNPYmplY3QtPmdldERpcmVjdE9m
ZnNldChnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSB0aGlzT2JqZWN0LT5nZXREaXJl
Y3RPZmZzZXQodm0sIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChv
ZmZzZXQpKSB7CiAgICAgICAgICAgICBKU09iamVjdCogcHJvdG90eXBlID0gY29uc3RydWN0RW1w
dHlPYmplY3QoZXhlYyk7Ci0gICAgICAgICAgICBwcm90b3R5cGUtPnB1dERpcmVjdChnbG9iYWxE
YXRhLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHRoaXNPYmplY3QsIERvbnRF
bnVtKTsKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdChnbG9iYWxEYXRhLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBwcm90b3R5cGUsIERvbnREZWxldGUgfCBEb250
RW51bSk7Ci0gICAgICAgICAgICBvZmZzZXQgPSB0aGlzT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQo
Z2xvYmFsRGF0YSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7CisgICAgICAgICAg
ICBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVj
dG9yLCB0aGlzT2JqZWN0LCBEb250RW51bSk7CisgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXRE
aXJlY3Qodm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIHByb3RvdHlwZSwgRG9u
dERlbGV0ZSB8IERvbnRFbnVtKTsKKyAgICAgICAgICAgIG9mZnNldCA9IHRoaXNPYmplY3QtPmdl
dERpcmVjdE9mZnNldCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7CiAgICAg
ICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKICAgICAgICAgfQogCkBAIC0z
ODIsNyArMzgyLDcgQEAgYm9vbCBKU0Z1bmN0aW9uOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIAog
ewogICAgIEpTRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNlbGwp
OwogICAgIC8vIEZvciBub24taG9zdCBmdW5jdGlvbnMsIGRvbid0IGxldCB0aGVzZSBwcm9wZXJ0
aWVzIGJ5IGRlbGV0ZWQgLSBleGNlcHQgYnkgRGVmaW5lT3duUHJvcGVydHkuCi0gICAgaWYgKCF0
aGlzT2JqZWN0LT5pc0hvc3RGdW5jdGlvbigpICYmICFleGVjLT5nbG9iYWxEYXRhKCkuaXNJbkRl
ZmluZU93blByb3BlcnR5KCkKKyAgICBpZiAoIXRoaXNPYmplY3QtPmlzSG9zdEZ1bmN0aW9uKCkg
JiYgIWV4ZWMtPnZtKCkuaXNJbkRlZmluZU93blByb3BlcnR5KCkKICAgICAgICAgJiYgKHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzCiAgICAgICAgICAgICB8
fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aAogICAgICAgICAg
ICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1lCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAxNDg2
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBKSVQ7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBERkc6OlNwZWN1bGF0aXZlSklUOwog
ICAgICAgICBmcmllbmQgY2xhc3MgREZHOjpKSVRDb21waWxlcjsKLSAgICAgICAgZnJpZW5kIGNs
YXNzIEpTR2xvYmFsRGF0YTsKKyAgICAgICAgZnJpZW5kIGNsYXNzIFZNOwogCiAgICAgcHVibGlj
OgogICAgICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CkBAIC02MiwxMCAr
NjIsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNy
ZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNT
Y29wZSogc2NvcGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0
aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNGdW5jdGlvbj4oZ2xvYmFsRGF0YS5o
ZWFwKSkgSlNGdW5jdGlvbihnbG9iYWxEYXRhLCBleGVjdXRhYmxlLCBzY29wZSk7CisgICAgICAg
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rp
b24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0Z1bmN0aW9uPih2bS5oZWFwKSkgSlNG
dW5jdGlvbih2bSwgZXhlY3V0YWJsZSwgc2NvcGUpOwogICAgICAgICAgICAgQVNTRVJUKGZ1bmN0
aW9uLT5zdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCkpOwotICAgICAgICAgICAgZnVuY3Rpb24t
PmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICAgICAgZnVuY3Rpb24tPmZpbmlz
aENyZWF0aW9uKHZtKTsKICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbjsKICAgICAgICAgfQog
ICAgICAgICAKQEAgLTg5LDEwICs4OSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewog
ICAgICAgICAgICAgcmV0dXJuIG1fc2NvcGUuZ2V0KCk7CiAgICAgICAgIH0KLSAgICAgICAgdm9p
ZCBzZXRTY29wZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTU2NvcGUqIHNjb3BlKQorICAg
ICAgICB2b2lkIHNldFNjb3BlKFZNJiB2bSwgSlNTY29wZSogc2NvcGUpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIEFTU0VSVCghaXNIb3N0RnVuY3Rpb25Ob25JbmxpbmUoKSk7Ci0gICAgICAgICAg
ICBtX3Njb3BlLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzY29wZSk7CisgICAgICAgICAgICBtX3Nj
b3BlLnNldCh2bSwgdGhpcywgc2NvcGUpOwogICAgICAgICB9CiAKICAgICAgICAgRXhlY3V0YWJs
ZUJhc2UqIGV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBtX2V4ZWN1dGFibGUuZ2V0KCk7IH0K
QEAgLTEwNSwxMCArMTA1LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBK
U19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICAgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpIAorICAgICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCiAgICAgICAgIHsKICAgICAgICAgICAgIEFT
U0VSVChnbG9iYWxPYmplY3QpOwotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0Z1bmN0aW9u
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCisgICAgICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0Z1
bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCiAgICAgICAgIH0KIAogICAg
ICAgICBOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbigpOwpAQCAtMTU4LDcgKzE1OCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBjb25zdCBzdGF0aWMgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbXBsZW1lbnRzSGFzSW5zdGFu
Y2UgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8
IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBK
U0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7Ci0gICAg
ICAgIEpTRnVuY3Rpb24oSlNHbG9iYWxEYXRhJiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwgSlNTY29w
ZSopOworICAgICAgICBKU0Z1bmN0aW9uKFZNJiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwgSlNTY29w
ZSopOwogICAgICAgICAKICAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqLCBO
YXRpdmVFeGVjdXRhYmxlKiwgaW50IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICAg
ICAgdXNpbmcgQmFzZTo6ZmluaXNoQ3JlYXRpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNTY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEsIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0g
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKLQotI2luY2x1ZGUgIkFyZ0xpc3QuaCIKLSNpbmNs
dWRlICJDb2RlQ2FjaGUuaCIKLSNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgotI2luY2x1
ZGUgIkRGR0xvbmdMaXZlZFN0YXRlLmgiCi0jaW5jbHVkZSAiRGVidWdnZXJBY3RpdmF0aW9uLmgi
Ci0jaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIkdDQWN0aXZpdHlD
YWxsYmFjay5oIgotI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgotI2luY2x1ZGUgIkhlYXAuaCIK
LSNpbmNsdWRlICJIb3N0Q2FsbFJldHVyblZhbHVlLmgiCi0jaW5jbHVkZSAiSW5jcmVtZW50YWxT
d2VlcGVyLmgiCi0jaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKLSNpbmNsdWRlICJKU0FjdGl2YXRp
b24uaCIKLSNpbmNsdWRlICJKU0FQSVZhbHVlV3JhcHBlci5oIgotI2luY2x1ZGUgIkpTQXJyYXku
aCIKLSNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCi0jaW5jbHVkZSAiSlNMb2NrLmgiCi0jaW5jbHVk
ZSAiSlNOYW1lU2NvcGUuaCIKLSNpbmNsdWRlICJKU05vdEFuT2JqZWN0LmgiCi0jaW5jbHVkZSAi
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgotI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCi0jaW5j
bHVkZSAiTGV4ZXIuaCIKLSNpbmNsdWRlICJMb29rdXAuaCIKLSNpbmNsdWRlICJOb2Rlcy5oIgot
I2luY2x1ZGUgIlBhcnNlckFyZW5hLmgiCi0jaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKLSNpbmNs
dWRlICJSZWdFeHBPYmplY3QuaCIKLSNpbmNsdWRlICJTb3VyY2VQcm92aWRlckNhY2hlLmgiCi0j
aW5jbHVkZSAiU3RyaWN0RXZhbEFjdGl2YXRpb24uaCIKLSNpbmNsdWRlICJTdHJvbmdJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKLSNpbmNsdWRlIDx3dGYvUHJvY2Vz
c0lELmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdQ
cmludFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYv
V1RGVGhyZWFkRGF0YS5oPgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0jaW5jbHVkZSAiQ29uc2Vy
dmF0aXZlUm9vdHMuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQotI2lu
Y2x1ZGUgIlJlZ0V4cC5oIgotI2VuZGlmCi0KLSNpZiBVU0UoQ0YpCi0jaW5jbHVkZSA8Q29yZUZv
dW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgV1RG
OwotCi1uYW1lc3BhY2UgSlNDIHsKLQotZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBhcnJheUNvbnN0
cnVjdG9yVGFibGU7Ci1leHRlcm4gY29uc3QgSGFzaFRhYmxlIGFycmF5UHJvdG90eXBlVGFibGU7
Ci1leHRlcm4gY29uc3QgSGFzaFRhYmxlIGJvb2xlYW5Qcm90b3R5cGVUYWJsZTsKLWV4dGVybiBj
b25zdCBIYXNoVGFibGUganNvblRhYmxlOwotZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBkYXRlVGFi
bGU7Ci1leHRlcm4gY29uc3QgSGFzaFRhYmxlIGRhdGVDb25zdHJ1Y3RvclRhYmxlOwotZXh0ZXJu
IGNvbnN0IEhhc2hUYWJsZSBlcnJvclByb3RvdHlwZVRhYmxlOwotZXh0ZXJuIGNvbnN0IEhhc2hU
YWJsZSBnbG9iYWxPYmplY3RUYWJsZTsKLWV4dGVybiBjb25zdCBIYXNoVGFibGUgbWF0aFRhYmxl
OwotZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBudW1iZXJDb25zdHJ1Y3RvclRhYmxlOwotZXh0ZXJu
IGNvbnN0IEhhc2hUYWJsZSBudW1iZXJQcm90b3R5cGVUYWJsZTsKLUpTX0VYUE9SVERBVEEgZXh0
ZXJuIGNvbnN0IEhhc2hUYWJsZSBvYmplY3RDb25zdHJ1Y3RvclRhYmxlOwotZXh0ZXJuIGNvbnN0
IEhhc2hUYWJsZSBwcml2YXRlTmFtZVByb3RvdHlwZVRhYmxlOwotZXh0ZXJuIGNvbnN0IEhhc2hU
YWJsZSByZWdFeHBUYWJsZTsKLWV4dGVybiBjb25zdCBIYXNoVGFibGUgcmVnRXhwQ29uc3RydWN0
b3JUYWJsZTsKLWV4dGVybiBjb25zdCBIYXNoVGFibGUgcmVnRXhwUHJvdG90eXBlVGFibGU7Ci1l
eHRlcm4gY29uc3QgSGFzaFRhYmxlIHN0cmluZ0NvbnN0cnVjdG9yVGFibGU7Ci0KLS8vIE5vdGU6
IFBsYXRmb3JtLmggd2lsbCBlbmZvcmNlIHRoYXQgRU5BQkxFKEFTU0VNQkxFUikgaXMgdHJ1ZSBp
ZiBlaXRoZXIKLS8vIEVOQUJMRShKSVQpIG9yIEVOQUJMRShZQVJSX0pJVCkgb3IgYm90aCBhcmUg
ZW5hYmxlZC4gVGhlIGNvZGUgYmVsb3cKLS8vIGp1c3QgY2hlY2tzIGZvciBFTkFCTEUoSklUKSBv
ciBFTkFCTEUoWUFSUl9KSVQpIHdpdGggdGhpcyBwcmVtaXNlIGluIG1pbmQuCi0KLSNpZiBFTkFC
TEUoQVNTRU1CTEVSKQotc3RhdGljIGJvb2wgZW5hYmxlQXNzZW1ibGVyKEV4ZWN1dGFibGVBbGxv
Y2F0b3ImIGV4ZWN1dGFibGVBbGxvY2F0b3IpCi17Ci0gICAgaWYgKCFleGVjdXRhYmxlQWxsb2Nh
dG9yLmlzVmFsaWQoKSB8fCAoIU9wdGlvbnM6OnVzZUpJVCgpICYmICFPcHRpb25zOjp1c2VSZWdF
eHBKSVQoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotI2lmIFVTRShDRikKLSNpZiBDT01Q
SUxFUihHQ0MpICYmICFDT01QSUxFUihDTEFORykKLSAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMg
b25jZSB0aGUgRVdTIGhhdmUgYmVlbiB1cGdyYWRlZCB0byBMTFZNLgotICAgIC8vIFdvcmsgYXJv
dW5kIGEgYnVnIG9mIEdDQyB3aXRoIHN0cmljdC1hbGlhc2luZy4KLSAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IGNhblVzZUpJVEtleVJldGFpbihBZG9wdENGLCBDRlN0cmluZ0NyZWF0ZVdpdGhD
U3RyaW5nKDAgLCAiSmF2YVNjcmlwdENvcmVVc2VKSVQiLCBrQ0ZTdHJpbmdFbmNvZGluZ01hY1Jv
bWFuKSk7Ci0gICAgQ0ZTdHJpbmdSZWYgY2FuVXNlSklUS2V5ID0gY2FuVXNlSklUS2V5UmV0YWlu
LmdldCgpOwotI2Vsc2UKLSAgICBDRlN0cmluZ1JlZiBjYW5Vc2VKSVRLZXkgPSBDRlNUUigiSmF2
YVNjcmlwdENvcmVVc2VKSVQiKTsKLSNlbmRpZiAvLyBDT01QSUxFUihHQ0MpICYmICFDT01QSUxF
UihDTEFORykKLSAgICBSZXRhaW5QdHI8Q0ZCb29sZWFuUmVmPiBjYW5Vc2VKSVQoQWRvcHRDRiwg
KENGQm9vbGVhblJlZilDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlKGNhblVzZUpJVEtleSwga0NG
UHJlZmVyZW5jZXNDdXJyZW50QXBwbGljYXRpb24pKTsKLSAgICBpZiAoY2FuVXNlSklUKQotICAg
ICAgICByZXR1cm4ga0NGQm9vbGVhblRydWUgPT0gY2FuVXNlSklULmdldCgpOwotI2VuZGlmCi0K
LSNpZiBVU0UoQ0YpIHx8IE9TKFVOSVgpCi0gICAgY2hhciogY2FuVXNlSklUU3RyaW5nID0gZ2V0
ZW52KCJKYXZhU2NyaXB0Q29yZVVzZUpJVCIpOwotICAgIHJldHVybiAhY2FuVXNlSklUU3RyaW5n
IHx8IGF0b2koY2FuVXNlSklUU3RyaW5nKTsKLSNlbHNlCi0gICAgcmV0dXJuIHRydWU7Ci0jZW5k
aWYKLX0KLSNlbmRpZiAvLyBFTkFCTEUoIUFTU0VNQkxFUikKLQotSlNHbG9iYWxEYXRhOjpKU0ds
b2JhbERhdGEoR2xvYmFsRGF0YVR5cGUgZ2xvYmFsRGF0YVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBl
KQotICAgIDogbV9hcGlMb2NrKGFkb3B0UmVmKG5ldyBKU0xvY2sodGhpcykpKQotI2lmIEVOQUJM
RShBU1NFTUJMRVIpCi0gICAgLCBleGVjdXRhYmxlQWxsb2NhdG9yKCp0aGlzKQotI2VuZGlmCi0g
ICAgLCBoZWFwKHRoaXMsIGhlYXBUeXBlKQotICAgICwgZ2xvYmFsRGF0YVR5cGUoZ2xvYmFsRGF0
YVR5cGUpCi0gICAgLCBjbGllbnREYXRhKDApCi0gICAgLCB0b3BDYWxsRnJhbWUoQ2FsbEZyYW1l
Ojpub0NhbGxlcigpKQotICAgICwgYXJyYXlDb25zdHJ1Y3RvclRhYmxlKGZhc3ROZXc8SGFzaFRh
YmxlPihKU0M6OmFycmF5Q29uc3RydWN0b3JUYWJsZSkpCi0gICAgLCBhcnJheVByb3RvdHlwZVRh
YmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmFycmF5UHJvdG90eXBlVGFibGUpKQotICAgICwg
Ym9vbGVhblByb3RvdHlwZVRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmJvb2xlYW5Qcm90
b3R5cGVUYWJsZSkpCi0gICAgLCBkYXRlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6ZGF0
ZVRhYmxlKSkKLSAgICAsIGRhdGVDb25zdHJ1Y3RvclRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihK
U0M6OmRhdGVDb25zdHJ1Y3RvclRhYmxlKSkKLSAgICAsIGVycm9yUHJvdG90eXBlVGFibGUoZmFz
dE5ldzxIYXNoVGFibGU+KEpTQzo6ZXJyb3JQcm90b3R5cGVUYWJsZSkpCi0gICAgLCBnbG9iYWxP
YmplY3RUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpnbG9iYWxPYmplY3RUYWJsZSkpCi0g
ICAgLCBqc29uVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6anNvblRhYmxlKSkKLSAgICAs
IG1hdGhUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjptYXRoVGFibGUpKQotICAgICwgbnVt
YmVyQ29uc3RydWN0b3JUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpudW1iZXJDb25zdHJ1
Y3RvclRhYmxlKSkKLSAgICAsIG51bWJlclByb3RvdHlwZVRhYmxlKGZhc3ROZXc8SGFzaFRhYmxl
PihKU0M6Om51bWJlclByb3RvdHlwZVRhYmxlKSkKLSAgICAsIG9iamVjdENvbnN0cnVjdG9yVGFi
bGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6b2JqZWN0Q29uc3RydWN0b3JUYWJsZSkpCi0gICAg
LCBwcml2YXRlTmFtZVByb3RvdHlwZVRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OnByaXZh
dGVOYW1lUHJvdG90eXBlVGFibGUpKQotICAgICwgcmVnRXhwVGFibGUoZmFzdE5ldzxIYXNoVGFi
bGU+KEpTQzo6cmVnRXhwVGFibGUpKQotICAgICwgcmVnRXhwQ29uc3RydWN0b3JUYWJsZShmYXN0
TmV3PEhhc2hUYWJsZT4oSlNDOjpyZWdFeHBDb25zdHJ1Y3RvclRhYmxlKSkKLSAgICAsIHJlZ0V4
cFByb3RvdHlwZVRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OnJlZ0V4cFByb3RvdHlwZVRh
YmxlKSkKLSAgICAsIHN0cmluZ0NvbnN0cnVjdG9yVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpT
Qzo6c3RyaW5nQ29uc3RydWN0b3JUYWJsZSkpCi0gICAgLCBpZGVudGlmaWVyVGFibGUoZ2xvYmFs
RGF0YVR5cGUgPT0gRGVmYXVsdCA/IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRh
YmxlKCkgOiBjcmVhdGVJZGVudGlmaWVyVGFibGUoKSkKLSAgICAsIHByb3BlcnR5TmFtZXMobmV3
IENvbW1vbklkZW50aWZpZXJzKHRoaXMpKQotICAgICwgZW1wdHlMaXN0KG5ldyBNYXJrZWRBcmd1
bWVudEJ1ZmZlcikKLSAgICAsIHBhcnNlckFyZW5hKGFkb3B0UHRyKG5ldyBQYXJzZXJBcmVuYSkp
Ci0gICAgLCBrZXl3b3JkcyhhZG9wdFB0cihuZXcgS2V5d29yZHModGhpcykpKQotICAgICwgaW50
ZXJwcmV0ZXIoMCkKLSAgICAsIGpzQXJyYXlDbGFzc0luZm8oJkpTQXJyYXk6OnNfaW5mbykKLSAg
ICAsIGpzRmluYWxPYmplY3RDbGFzc0luZm8oJkpTRmluYWxPYmplY3Q6OnNfaW5mbykKLSNpZiBF
TkFCTEUoREZHX0pJVCkKLSAgICAsIHNpemVPZkxhc3RTY3JhdGNoQnVmZmVyKDApCi0jZW5kaWYK
LSAgICAsIGR5bmFtaWNHbG9iYWxPYmplY3QoMCkKLSAgICAsIGNhY2hlZFVUQ09mZnNldChRTmFO
KQotICAgICwgbV9lbmFibGVkUHJvZmlsZXIoMCkKLSAgICAsIG1fcmVnRXhwQ2FjaGUobmV3IFJl
Z0V4cENhY2hlKHRoaXMpKQotI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKLSAgICAsIG1fcnRU
cmFjZUxpc3QobmV3IFJUVHJhY2VMaXN0KCkpCi0jZW5kaWYKLSNpZm5kZWYgTkRFQlVHCi0gICAg
LCBleGNsdXNpdmVUaHJlYWQoMCkKLSNlbmRpZgotICAgICwgbV9uZXdTdHJpbmdzU2luY2VMYXN0
SGFzaENvbnMoMCkKLSNpZiBFTkFCTEUoQVNTRU1CTEVSKQotICAgICwgbV9jYW5Vc2VBc3NlbWJs
ZXIoZW5hYmxlQXNzZW1ibGVyKGV4ZWN1dGFibGVBbGxvY2F0b3IpKQotI2VuZGlmCi0jaWYgRU5B
QkxFKEpJVCkKLSAgICAsIG1fY2FuVXNlSklUKG1fY2FuVXNlQXNzZW1ibGVyICYmIE9wdGlvbnM6
OnVzZUpJVCgpKQotI2VuZGlmCi0jaWYgRU5BQkxFKFlBUlJfSklUKQotICAgICwgbV9jYW5Vc2VS
ZWdFeHBKSVQobV9jYW5Vc2VBc3NlbWJsZXIgJiYgT3B0aW9uczo6dXNlUmVnRXhwSklUKCkpCi0j
ZW5kaWYKLSNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKLSAgICAsIG1faW5pdGlhbGl6aW5nT2Jq
ZWN0Q2xhc3MoMCkKLSNlbmRpZgotICAgICwgbV9pbkRlZmluZU93blByb3BlcnR5KGZhbHNlKQot
ICAgICwgbV9jb2RlQ2FjaGUoQ29kZUNhY2hlOjpjcmVhdGUoKSkKLXsKLSAgICBpbnRlcnByZXRl
ciA9IG5ldyBJbnRlcnByZXRlcigqdGhpcyk7Ci0KLSAgICAvLyBOZWVkIHRvIGJlIGNhcmVmdWwg
dG8ga2VlcCBldmVyeXRoaW5nIGNvbnNpc3RlbnQgaGVyZQotICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHRoaXMpOwotICAgIElkZW50aWZpZXJUYWJsZSogZXhpc3RpbmdFbnRyeUlkZW50aWZpZXJUYWJs
ZSA9IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKGlkZW50aWZpZXJU
YWJsZSk7Ci0gICAgc3RydWN0dXJlU3RydWN0dXJlLnNldCgqdGhpcywgU3RydWN0dXJlOjpjcmVh
dGVTdHJ1Y3R1cmUoKnRoaXMpKTsKLSAgICBzdHJ1Y3R1cmVSYXJlRGF0YVN0cnVjdHVyZS5zZXQo
KnRoaXMsIFN0cnVjdHVyZVJhcmVEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVs
bCgpKSk7Ci0gICAgZGVidWdnZXJBY3RpdmF0aW9uU3RydWN0dXJlLnNldCgqdGhpcywgRGVidWdn
ZXJBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAg
dGVybWluYXRlZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlLnNldCgqdGhpcywgVGVybWluYXRlZEV4
ZWN1dGlvbkVycm9yOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAg
c3RyaW5nU3RydWN0dXJlLnNldCgqdGhpcywgSlNTdHJpbmc6OmNyZWF0ZVN0cnVjdHVyZSgqdGhp
cywgMCwganNOdWxsKCkpKTsKLSAgICBub3RBbk9iamVjdFN0cnVjdHVyZS5zZXQoKnRoaXMsIEpT
Tm90QW5PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICBw
cm9wZXJ0eU5hbWVJdGVyYXRvclN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTUHJvcGVydHlOYW1lSXRl
cmF0b3I6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICBnZXR0ZXJT
ZXR0ZXJTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKLSAgICBhcGlXcmFwcGVyU3RydWN0dXJlLnNldCgqdGhpcywg
SlNBUElWYWx1ZVdyYXBwZXI6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
LSAgICBKU1Njb3BlU3RydWN0dXJlLnNldCgqdGhpcywgSlNTY29wZTo6Y3JlYXRlU3RydWN0dXJl
KCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAgIGV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlz
LCBFeGVjdXRhYmxlQmFzZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwot
ICAgIG5hdGl2ZUV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBOYXRpdmVFeGVjdXRhYmxl
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgZXZhbEV4ZWN1dGFi
bGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBFdmFsRXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOwotICAgIHByb2dyYW1FeGVjdXRhYmxlU3RydWN0dXJlLnNldCgq
dGhpcywgUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxs
KCkpKTsKLSAgICBmdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBGdW5jdGlv
bkV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICBy
ZWdFeHBTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBSZWdFeHA6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKLSAgICBzaGFyZWRTeW1ib2xUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMs
IFNoYXJlZFN5bWJvbFRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7
Ci0gICAgc3RydWN0dXJlQ2hhaW5TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTdHJ1Y3R1cmVDaGFpbjo6
Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAgIHNwYXJzZUFycmF5VmFs
dWVNYXBTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTcGFyc2VBcnJheVZhbHVlTWFwOjpjcmVhdGVTdHJ1
Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgd2l0aFNjb3BlU3RydWN0dXJlLnNldCgq
dGhpcywgSlNXaXRoU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
LSAgICB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgp
KSk7Ci0gICAgdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgVW5s
aW5rZWRQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgp
KSk7Ci0gICAgdW5saW5rZWRFdmFsQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgVW5saW5r
ZWRFdmFsQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0g
ICAgdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
LSAgICBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgUHJvcGVydHlUYWJsZTo6Y3Jl
YXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAgIHNtYWxsU3RyaW5ncy5pbml0
aWFsaXplQ29tbW9uU3RyaW5ncygqdGhpcyk7Ci0KLSAgICB3dGZUaHJlYWREYXRhKCkuc2V0Q3Vy
cmVudElkZW50aWZpZXJUYWJsZShleGlzdGluZ0VudHJ5SWRlbnRpZmllclRhYmxlKTsKLQotI2lm
IEVOQUJMRShKSVQpCi0gICAgaml0U3R1YnMgPSBhZG9wdFB0cihuZXcgSklUVGh1bmtzKCkpOwot
ICAgIHBlcmZvcm1QbGF0Zm9ybVNwZWNpZmljSklUQXNzZXJ0aW9ucyh0aGlzKTsKLSNlbmRpZgot
ICAgIAotICAgIGludGVycHJldGVyLT5pbml0aWFsaXplKHRoaXMtPmNhblVzZUpJVCgpKTsKLSAg
ICAKLSNpZiBFTkFCTEUoSklUKQotICAgIGluaXRpYWxpemVIb3N0Q2FsbFJldHVyblZhbHVlKCk7
IC8vIFRoaXMgaXMgbmVlZGVkIHRvIGNvbnZpbmNlIHRoZSBsaW5rZXIgbm90IHRvIGRyb3AgaG9z
dCBjYWxsIHJldHVybiBzdXBwb3J0LgotI2VuZGlmCi0KLSAgICBoZWFwLm5vdGlmeUlzU2FmZVRv
Q29sbGVjdCgpOwotCi0gICAgTExJbnQ6OkRhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKCp0aGlzKTsK
LSAgICAKLSAgICBpZiAoT3B0aW9uczo6ZW5hYmxlUHJvZmlsZXIoKSkgewotICAgICAgICBtX3Bl
ckJ5dGVjb2RlUHJvZmlsZXIgPSBhZG9wdFB0cihuZXcgUHJvZmlsZXI6OkRhdGFiYXNlKCp0aGlz
KSk7Ci0KLSAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gcGF0aE91dDsKLSNpZiAhT1MoV0lOQ0Up
Ci0gICAgICAgIGNvbnN0IGNoYXIqIHByb2ZpbGVyUGF0aCA9IGdldGVudigiSlNDX1BST0ZJTEVS
X1BBVEgiKTsKLSAgICAgICAgaWYgKHByb2ZpbGVyUGF0aCkKLSAgICAgICAgICAgIHBhdGhPdXQu
cHJpbnQocHJvZmlsZXJQYXRoLCAiLyIpOwotI2VuZGlmCi0gICAgICAgIHBhdGhPdXQucHJpbnQo
IkpTQ1Byb2ZpbGUtIiwgZ2V0Q3VycmVudFByb2Nlc3NJRCgpLCAiLSIsIG1fcGVyQnl0ZWNvZGVQ
cm9maWxlci0+ZGF0YWJhc2VJRCgpLCAiLmpzb24iKTsKLSAgICAgICAgbV9wZXJCeXRlY29kZVBy
b2ZpbGVyLT5yZWdpc3RlclRvU2F2ZUF0RXhpdChwYXRoT3V0LnRvQ1N0cmluZygpLmRhdGEoKSk7
Ci0gICAgfQotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKGNhblVzZUpJVCgpKQotICAg
ICAgICBtX2RmZ1N0YXRlID0gYWRvcHRQdHIobmV3IERGRzo6TG9uZ0xpdmVkU3RhdGUoKSk7Ci0j
ZW5kaWYKLX0KLQotSlNHbG9iYWxEYXRhOjp+SlNHbG9iYWxEYXRhKCkKLXsKLSAgICAvLyBDbGVh
ciB0aGlzIGZpcnN0IHRvIGVuc3VyZSB0aGF0IG5vYm9keSB0cmllcyB0byByZW1vdmUgdGhlbXNl
bHZlcyBmcm9tIGl0LgotICAgIG1fcGVyQnl0ZWNvZGVQcm9maWxlci5jbGVhcigpOwotICAgIAot
ICAgIEFTU0VSVChtX2FwaUxvY2stPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwotICAg
IG1fYXBpTG9jay0+d2lsbERlc3Ryb3lHbG9iYWxEYXRhKHRoaXMpOwotICAgIGhlYXAubGFzdENo
YW5jZVRvRmluYWxpemUoKTsKLQotICAgIGRlbGV0ZSBpbnRlcnByZXRlcjsKLSNpZm5kZWYgTkRF
QlVHCi0gICAgaW50ZXJwcmV0ZXIgPSByZWludGVycHJldF9jYXN0PEludGVycHJldGVyKj4oMHhi
YmFkYmVlZik7Ci0jZW5kaWYKLQotICAgIGFycmF5UHJvdG90eXBlVGFibGUtPmRlbGV0ZVRhYmxl
KCk7Ci0gICAgYXJyYXlDb25zdHJ1Y3RvclRhYmxlLT5kZWxldGVUYWJsZSgpOwotICAgIGJvb2xl
YW5Qcm90b3R5cGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKLSAgICBkYXRlVGFibGUtPmRlbGV0ZVRh
YmxlKCk7Ci0gICAgZGF0ZUNvbnN0cnVjdG9yVGFibGUtPmRlbGV0ZVRhYmxlKCk7Ci0gICAgZXJy
b3JQcm90b3R5cGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKLSAgICBnbG9iYWxPYmplY3RUYWJsZS0+
ZGVsZXRlVGFibGUoKTsKLSAgICBqc29uVGFibGUtPmRlbGV0ZVRhYmxlKCk7Ci0gICAgbWF0aFRh
YmxlLT5kZWxldGVUYWJsZSgpOwotICAgIG51bWJlckNvbnN0cnVjdG9yVGFibGUtPmRlbGV0ZVRh
YmxlKCk7Ci0gICAgbnVtYmVyUHJvdG90eXBlVGFibGUtPmRlbGV0ZVRhYmxlKCk7Ci0gICAgb2Jq
ZWN0Q29uc3RydWN0b3JUYWJsZS0+ZGVsZXRlVGFibGUoKTsKLSAgICBwcml2YXRlTmFtZVByb3Rv
dHlwZVRhYmxlLT5kZWxldGVUYWJsZSgpOwotICAgIHJlZ0V4cFRhYmxlLT5kZWxldGVUYWJsZSgp
OwotICAgIHJlZ0V4cENvbnN0cnVjdG9yVGFibGUtPmRlbGV0ZVRhYmxlKCk7Ci0gICAgcmVnRXhw
UHJvdG90eXBlVGFibGUtPmRlbGV0ZVRhYmxlKCk7Ci0gICAgc3RyaW5nQ29uc3RydWN0b3JUYWJs
ZS0+ZGVsZXRlVGFibGUoKTsKLQotICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUq
PihhcnJheUNvbnN0cnVjdG9yVGFibGUpKTsKLSAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFz
aFRhYmxlKj4oYXJyYXlQcm90b3R5cGVUYWJsZSkpOwotICAgIGZhc3REZWxldGUoY29uc3RfY2Fz
dDxIYXNoVGFibGUqPihib29sZWFuUHJvdG90eXBlVGFibGUpKTsKLSAgICBmYXN0RGVsZXRlKGNv
bnN0X2Nhc3Q8SGFzaFRhYmxlKj4oZGF0ZVRhYmxlKSk7Ci0gICAgZmFzdERlbGV0ZShjb25zdF9j
YXN0PEhhc2hUYWJsZSo+KGRhdGVDb25zdHJ1Y3RvclRhYmxlKSk7Ci0gICAgZmFzdERlbGV0ZShj
b25zdF9jYXN0PEhhc2hUYWJsZSo+KGVycm9yUHJvdG90eXBlVGFibGUpKTsKLSAgICBmYXN0RGVs
ZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oZ2xvYmFsT2JqZWN0VGFibGUpKTsKLSAgICBmYXN0
RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oanNvblRhYmxlKSk7Ci0gICAgZmFzdERlbGV0
ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KG1hdGhUYWJsZSkpOwotICAgIGZhc3REZWxldGUoY29u
c3RfY2FzdDxIYXNoVGFibGUqPihudW1iZXJDb25zdHJ1Y3RvclRhYmxlKSk7Ci0gICAgZmFzdERl
bGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KG51bWJlclByb3RvdHlwZVRhYmxlKSk7Ci0gICAg
ZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KG9iamVjdENvbnN0cnVjdG9yVGFibGUp
KTsKLSAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4ocHJpdmF0ZU5hbWVQcm90
b3R5cGVUYWJsZSkpOwotICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihyZWdF
eHBUYWJsZSkpOwotICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihyZWdFeHBD
b25zdHJ1Y3RvclRhYmxlKSk7Ci0gICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+
KHJlZ0V4cFByb3RvdHlwZVRhYmxlKSk7Ci0gICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hU
YWJsZSo+KHN0cmluZ0NvbnN0cnVjdG9yVGFibGUpKTsKLQotICAgIGRlbGV0ZSBlbXB0eUxpc3Q7
Ci0KLSAgICBkZWxldGUgcHJvcGVydHlOYW1lczsKLSAgICBpZiAoZ2xvYmFsRGF0YVR5cGUgIT0g
RGVmYXVsdCkKLSAgICAgICAgZGVsZXRlSWRlbnRpZmllclRhYmxlKGlkZW50aWZpZXJUYWJsZSk7
Ci0KLSAgICBkZWxldGUgY2xpZW50RGF0YTsKLSAgICBkZWxldGUgbV9yZWdFeHBDYWNoZTsKLSNp
ZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCi0gICAgZGVsZXRlIG1fcnRUcmFjZUxpc3Q7Ci0jZW5k
aWYKLQotI2lmIEVOQUJMRShERkdfSklUKQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
Y3JhdGNoQnVmZmVycy5zaXplKCk7ICsraSkKLSAgICAgICAgZmFzdEZyZWUoc2NyYXRjaEJ1ZmZl
cnNbaV0pOwotI2VuZGlmCi19Ci0KLVBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBKU0dsb2JhbERh
dGE6OmNyZWF0ZUNvbnRleHRHcm91cChIZWFwVHlwZSBoZWFwVHlwZSkKLXsKLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEpTR2xvYmFsRGF0YShBUElDb250ZXh0R3JvdXAsIGhlYXBUeXBlKSk7Ci19
Ci0KLVBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBKU0dsb2JhbERhdGE6OmNyZWF0ZShIZWFwVHlw
ZSBoZWFwVHlwZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpTR2xvYmFsRGF0YShEZWZh
dWx0LCBoZWFwVHlwZSkpOwotfQotCi1QYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4gSlNHbG9iYWxE
YXRhOjpjcmVhdGVMZWFrZWQoSGVhcFR5cGUgaGVhcFR5cGUpCi17Ci0gICAgcmV0dXJuIGNyZWF0
ZShoZWFwVHlwZSk7Ci19Ci0KLWJvb2wgSlNHbG9iYWxEYXRhOjpzaGFyZWRJbnN0YW5jZUV4aXN0
cygpCi17Ci0gICAgcmV0dXJuIHNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKTsKLX0KLQotSlNHbG9i
YWxEYXRhJiBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNlKCkKLXsKLSAgICBHbG9iYWxKU0xv
Y2sgZ2xvYmFsTG9jazsKLSAgICBKU0dsb2JhbERhdGEqJiBpbnN0YW5jZSA9IHNoYXJlZEluc3Rh
bmNlSW50ZXJuYWwoKTsKLSAgICBpZiAoIWluc3RhbmNlKSB7Ci0gICAgICAgIGluc3RhbmNlID0g
YWRvcHRSZWYobmV3IEpTR2xvYmFsRGF0YShBUElTaGFyZWQsIFNtYWxsSGVhcCkpLmxlYWtSZWYo
KTsKLSAgICAgICAgaW5zdGFuY2UtPm1ha2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCk7Ci0g
ICAgfQotICAgIHJldHVybiAqaW5zdGFuY2U7Ci19Ci0KLUpTR2xvYmFsRGF0YSomIEpTR2xvYmFs
RGF0YTo6c2hhcmVkSW5zdGFuY2VJbnRlcm5hbCgpCi17Ci0gICAgc3RhdGljIEpTR2xvYmFsRGF0
YSogc2hhcmVkSW5zdGFuY2U7Ci0gICAgcmV0dXJuIHNoYXJlZEluc3RhbmNlOwotfQotCi0jaWYg
RU5BQkxFKEpJVCkKLXN0YXRpYyBUaHVua0dlbmVyYXRvciB0aHVua0dlbmVyYXRvckZvckludHJp
bnNpYyhJbnRyaW5zaWMgaW50cmluc2ljKQotewotICAgIHN3aXRjaCAoaW50cmluc2ljKSB7Ci0g
ICAgY2FzZSBDaGFyQ29kZUF0SW50cmluc2ljOgotICAgICAgICByZXR1cm4gY2hhckNvZGVBdFRo
dW5rR2VuZXJhdG9yOwotICAgIGNhc2UgQ2hhckF0SW50cmluc2ljOgotICAgICAgICByZXR1cm4g
Y2hhckF0VGh1bmtHZW5lcmF0b3I7Ci0gICAgY2FzZSBGcm9tQ2hhckNvZGVJbnRyaW5zaWM6Ci0g
ICAgICAgIHJldHVybiBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcjsKLSAgICBjYXNlIFNxcnRJ
bnRyaW5zaWM6Ci0gICAgICAgIHJldHVybiBzcXJ0VGh1bmtHZW5lcmF0b3I7Ci0gICAgY2FzZSBQ
b3dJbnRyaW5zaWM6Ci0gICAgICAgIHJldHVybiBwb3dUaHVua0dlbmVyYXRvcjsKLSAgICBjYXNl
IEFic0ludHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIGFic1RodW5rR2VuZXJhdG9yOwotICAgIGNh
c2UgRmxvb3JJbnRyaW5zaWM6Ci0gICAgICAgIHJldHVybiBmbG9vclRodW5rR2VuZXJhdG9yOwot
ICAgIGNhc2UgQ2VpbEludHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIGNlaWxUaHVua0dlbmVyYXRv
cjsKLSAgICBjYXNlIFJvdW5kSW50cmluc2ljOgotICAgICAgICByZXR1cm4gcm91bmRUaHVua0dl
bmVyYXRvcjsKLSAgICBjYXNlIEV4cEludHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIGV4cFRodW5r
R2VuZXJhdG9yOwotICAgIGNhc2UgTG9nSW50cmluc2ljOgotICAgICAgICByZXR1cm4gbG9nVGh1
bmtHZW5lcmF0b3I7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQot
Ci1OYXRpdmVFeGVjdXRhYmxlKiBKU0dsb2JhbERhdGE6OmdldEhvc3RGdW5jdGlvbihOYXRpdmVG
dW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpCi17Ci0gICAgcmV0
dXJuIGppdFN0dWJzLT5ob3N0RnVuY3Rpb25TdHViKHRoaXMsIGZ1bmN0aW9uLCBjb25zdHJ1Y3Rv
cik7Ci19Ci1OYXRpdmVFeGVjdXRhYmxlKiBKU0dsb2JhbERhdGE6OmdldEhvc3RGdW5jdGlvbihO
YXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgSW50cmluc2ljIGludHJpbnNpYykKLXsKLSAgICBBU1NF
UlQoY2FuVXNlSklUKCkpOwotICAgIHJldHVybiBqaXRTdHVicy0+aG9zdEZ1bmN0aW9uU3R1Yih0
aGlzLCBmdW5jdGlvbiwgaW50cmluc2ljICE9IE5vSW50cmluc2ljID8gdGh1bmtHZW5lcmF0b3JG
b3JJbnRyaW5zaWMoaW50cmluc2ljKSA6IDAsIGludHJpbnNpYyk7Ci19Ci0KLSNlbHNlIC8vICFF
TkFCTEUoSklUKQotTmF0aXZlRXhlY3V0YWJsZSogSlNHbG9iYWxEYXRhOjpnZXRIb3N0RnVuY3Rp
b24oTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQot
ewotICAgIHJldHVybiBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKnRoaXMsIGZ1bmN0aW9uLCBj
b25zdHJ1Y3Rvcik7Ci19Ci0jZW5kaWYgLy8gIUVOQUJMRShKSVQpCi0KLUpTR2xvYmFsRGF0YTo6
Q2xpZW50RGF0YTo6fkNsaWVudERhdGEoKQotewotfQotCi12b2lkIEpTR2xvYmFsRGF0YTo6cmVz
ZXREYXRlQ2FjaGUoKQotewotICAgIGNhY2hlZFVUQ09mZnNldCA9IFFOYU47Ci0gICAgZHN0T2Zm
c2V0Q2FjaGUucmVzZXQoKTsKLSAgICBjYWNoZWREYXRlU3RyaW5nID0gU3RyaW5nKCk7Ci0gICAg
Y2FjaGVkRGF0ZVN0cmluZ1ZhbHVlID0gUU5hTjsKLSAgICBkYXRlSW5zdGFuY2VDYWNoZS5yZXNl
dCgpOwotfQotCi12b2lkIEpTR2xvYmFsRGF0YTo6c3RhcnRTYW1wbGluZygpCi17Ci0gICAgaW50
ZXJwcmV0ZXItPnN0YXJ0U2FtcGxpbmcoKTsKLX0KLQotdm9pZCBKU0dsb2JhbERhdGE6OnN0b3BT
YW1wbGluZygpCi17Ci0gICAgaW50ZXJwcmV0ZXItPnN0b3BTYW1wbGluZygpOwotfQotCi12b2lk
IEpTR2xvYmFsRGF0YTo6ZGlzY2FyZEFsbENvZGUoKQotewotICAgIG1fY29kZUNhY2hlLT5jbGVh
cigpOwotICAgIGhlYXAuZGVsZXRlQWxsQ29tcGlsZWRDb2RlKCk7Ci0gICAgaGVhcC5yZXBvcnRB
YmFuZG9uZWRPYmplY3RHcmFwaCgpOwotfQotCi12b2lkIEpTR2xvYmFsRGF0YTo6ZHVtcFNhbXBs
ZURhdGEoRXhlY1N0YXRlKiBleGVjKQotewotICAgIGludGVycHJldGVyLT5kdW1wU2FtcGxlRGF0
YShleGVjKTsKLSNpZiBFTkFCTEUoQVNTRU1CTEVSKQotICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6
OmR1bXBQcm9maWxlKCk7Ci0jZW5kaWYKLX0KLQotU291cmNlUHJvdmlkZXJDYWNoZSogSlNHbG9i
YWxEYXRhOjphZGRTb3VyY2VQcm92aWRlckNhY2hlKFNvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92
aWRlcikKLXsKLSAgICBTb3VyY2VQcm92aWRlckNhY2hlTWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0
ID0gc291cmNlUHJvdmlkZXJDYWNoZU1hcC5hZGQoc291cmNlUHJvdmlkZXIsIDApOwotICAgIGlm
IChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSA9IGFkb3B0UmVmKG5ldyBTb3VyY2VQcm92aWRlckNhY2hlKTsKLSAgICByZXR1cm4gYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLX0KLQotdm9pZCBKU0dsb2JhbERhdGE6OmNsZWFy
U291cmNlUHJvdmlkZXJDYWNoZXMoKQotewotICAgIHNvdXJjZVByb3ZpZGVyQ2FjaGVNYXAuY2xl
YXIoKTsKLX0KLQotc3RydWN0IFN0YWNrUHJlc2VydmluZ1JlY29tcGlsZXIgOiBwdWJsaWMgTWFy
a2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKLSAgICBIYXNoU2V0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+
IGN1cnJlbnRseUV4ZWN1dGluZ0Z1bmN0aW9uczsKLSAgICB2b2lkIG9wZXJhdG9yKCkoSlNDZWxs
KiBjZWxsKQotICAgIHsKLSAgICAgICAgaWYgKCFjZWxsLT5pbmhlcml0cygmRnVuY3Rpb25FeGVj
dXRhYmxlOjpzX2luZm8pKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBGdW5jdGlvbkV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7
Ci0gICAgICAgIGlmIChjdXJyZW50bHlFeGVjdXRpbmdGdW5jdGlvbnMuY29udGFpbnMoZXhlY3V0
YWJsZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGV4ZWN1dGFibGUtPmNsZWFyQ29k
ZUlmTm90Q29tcGlsaW5nKCk7Ci0gICAgfQotfTsKLQotdm9pZCBKU0dsb2JhbERhdGE6OnJlbGVh
c2VFeGVjdXRhYmxlTWVtb3J5KCkKLXsKLSAgICBpZiAoZHluYW1pY0dsb2JhbE9iamVjdCkgewot
ICAgICAgICBTdGFja1ByZXNlcnZpbmdSZWNvbXBpbGVyIHJlY29tcGlsZXI7Ci0gICAgICAgIEhh
c2hTZXQ8SlNDZWxsKj4gcm9vdHM7Ci0gICAgICAgIGhlYXAuY2Fub25pY2FsaXplQ2VsbExpdmVu
ZXNzRGF0YSgpOwotICAgICAgICBoZWFwLmdldENvbnNlcnZhdGl2ZVJlZ2lzdGVyUm9vdHMocm9v
dHMpOwotICAgICAgICBIYXNoU2V0PEpTQ2VsbCo+OjppdGVyYXRvciBlbmQgPSByb290cy5lbmQo
KTsKLSAgICAgICAgZm9yIChIYXNoU2V0PEpTQ2VsbCo+OjppdGVyYXRvciBwdHIgPSByb290cy5i
ZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikgewotICAgICAgICAgICAgU2NyaXB0RXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSA9IDA7Ci0gICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSAqcHRyOwotICAg
ICAgICAgICAgaWYgKGNlbGwtPmluaGVyaXRzKCZTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8pKQot
ICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxTY3JpcHRFeGVjdXRhYmxl
Kj4oKnB0cik7Ci0gICAgICAgICAgICBlbHNlIGlmIChjZWxsLT5pbmhlcml0cygmSlNGdW5jdGlv
bjo6c19pbmZvKSkgewotICAgICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganND
YXN0PEpTRnVuY3Rpb24qPigqcHRyKTsKLSAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmlz
SG9zdEZ1bmN0aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCk7Ci0gICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIEFTU0VSVChl
eGVjdXRhYmxlLT5pbmhlcml0cygmU2NyaXB0RXhlY3V0YWJsZTo6c19pbmZvKSk7Ci0gICAgICAg
ICAgICBleGVjdXRhYmxlLT51bmxpbmtDYWxscygpOwotICAgICAgICAgICAgaWYgKGV4ZWN1dGFi
bGUtPmluaGVyaXRzKCZGdW5jdGlvbkV4ZWN1dGFibGU6OnNfaW5mbykpCi0gICAgICAgICAgICAg
ICAgcmVjb21waWxlci5jdXJyZW50bHlFeGVjdXRpbmdGdW5jdGlvbnMuYWRkKHN0YXRpY19jYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgfQotICAgICAgICBoZWFwLm9iamVjdFNwYWNlKCkuZm9yRWFjaExpdmVDZWxsPFN0YWNr
UHJlc2VydmluZ1JlY29tcGlsZXI+KHJlY29tcGlsZXIpOwotICAgIH0KLSAgICBtX3JlZ0V4cENh
Y2hlLT5pbnZhbGlkYXRlQ29kZSgpOwotICAgIGhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKLX0K
LSAgICAKLXZvaWQgcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQotewotICAgIGdsb2JhbERhdGEucmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoKTsKLX0KLQot
I2lmIEVOQUJMRShERkdfSklUKQotdm9pZCBKU0dsb2JhbERhdGE6OmdhdGhlckNvbnNlcnZhdGl2
ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykKLXsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNjcmF0Y2hCdWZmZXJzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAg
IFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBzY3JhdGNoQnVmZmVyc1tpXTsKLSAgICAg
ICAgaWYgKHNjcmF0Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aCgpKSB7Ci0gICAgICAgICAgICB2b2lk
KiBidWZmZXJTdGFydCA9IHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKTsKLSAgICAgICAgICAg
IGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChidWZmZXJTdGFydCwgc3RhdGljX2Nhc3Q8dm9pZCo+KHN0
YXRpY19jYXN0PGNoYXIqPihidWZmZXJTdGFydCkgKyBzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5n
dGgoKSkpOwotICAgICAgICB9Ci0gICAgfQotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoUkVHRVhQ
X1RSQUNJTkcpCi12b2lkIEpTR2xvYmFsRGF0YTo6YWRkUmVnRXhwVG9UcmFjZShSZWdFeHAqIHJl
Z0V4cCkKLXsKLSAgICBtX3J0VHJhY2VMaXN0LT5hZGQocmVnRXhwKTsKLX0KLQotdm9pZCBKU0ds
b2JhbERhdGE6OmR1bXBSZWdFeHBUcmFjZSgpCi17Ci0gICAgLy8gVGhlIGZpcnN0IFJlZ0V4cCBv
YmplY3QgaXMgaWdub3JlZC4gIEl0IGlzIGNyZWF0ZSBieSB0aGUgUmVnRXhwUHJvdG90eXBlIGN0
b3IgYW5kIG5vdCB1c2VkLgotICAgIFJUVHJhY2VMaXN0OjppdGVyYXRvciBpdGVyID0gKyttX3J0
VHJhY2VMaXN0LT5iZWdpbigpOwotICAgIAotICAgIGlmIChpdGVyICE9IG1fcnRUcmFjZUxpc3Qt
PmVuZCgpKSB7Ci0gICAgICAgIGRhdGFMb2dGKCJcblJlZ0V4cCBUcmFjaW5nXG4iKTsKLSAgICAg
ICAgZGF0YUxvZ0YoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1hdGNoKCkgICAgbWF0Y2hlc1xuIik7Ci0gICAgICAgIGRhdGFMb2dG
KCJSZWd1bGFyIEV4cHJlc3Npb24gICAgICAgICAgICAgICAgICAgICAgICAgIEpJVCBBZGRyZXNz
ICAgICAgY2FsbHMgICAgICBmb3VuZFxuIik7Ci0gICAgICAgIGRhdGFMb2dGKCItLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t
LSstLS0tLS0tLS0tXG4iKTsKLSAgICAKLSAgICAgICAgdW5zaWduZWQgcmVDb3VudCA9IDA7Ci0g
ICAgCi0gICAgICAgIGZvciAoOyBpdGVyICE9IG1fcnRUcmFjZUxpc3QtPmVuZCgpOyArK2l0ZXIs
ICsrcmVDb3VudCkKLSAgICAgICAgICAgICgqaXRlciktPnByaW50VHJhY2VEYXRhKCk7Ci0KLSAg
ICAgICAgZGF0YUxvZ0YoIiVkIFJlZ3VsYXIgRXhwcmVzc2lvbnNcbiIsIHJlQ291bnQpOwotICAg
IH0KLSAgICAKLSAgICBtX3J0VHJhY2VMaXN0LT5jbGVhcigpOwotfQotI2Vsc2UKLXZvaWQgSlNH
bG9iYWxEYXRhOjpkdW1wUmVnRXhwVHJhY2UoKQotewotfQotI2VuZGlmCi0KLX0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxE
YXRhLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUyNSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIEpTR2xvYmFsRGF0YV9oCi0jZGVmaW5lIEpTR2xvYmFsRGF0YV9oCi0K
LSNpbmNsdWRlICJDYWNoZWRUcmFuc2NlbmRlbnRhbEZ1bmN0aW9uLmgiCi0jaW5jbHVkZSAiRGF0
ZUluc3RhbmNlQ2FjaGUuaCIKLSNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCi0jaW5j
bHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgIkludHJpbnNpYy5oIgotI2luY2x1ZGUgIkpJVFRodW5r
cy5oIgotI2luY2x1ZGUgIkpJVFRodW5rcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKLSNp
bmNsdWRlICJKU0xvY2suaCIKLSNpbmNsdWRlICJMTEludERhdGEuaCIKLSNpbmNsdWRlICJNYWNy
b0Fzc2VtYmxlckNvZGVSZWYuaCIKLSNpbmNsdWRlICJOdW1lcmljU3RyaW5ncy5oIgotI2luY2x1
ZGUgIlByb2ZpbGVyRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJQcml2YXRlTmFtZS5oIgotI2luY2x1
ZGUgIlByb3RvdHlwZU1hcC5oIgotI2luY2x1ZGUgIlNtYWxsU3RyaW5ncy5oIgotI2luY2x1ZGUg
IlN0cm9uZy5oIgotI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgotI2luY2x1ZGUgIlR5cGVk
QXJyYXlEZXNjcmlwdG9yLmgiCi0jaW5jbHVkZSAiV2F0Y2hkb2cuaCIKLSNpbmNsdWRlICJXZWFr
UmFuZG9tLmgiCi0jaW5jbHVkZSA8d3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmg+Ci0jaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KLSNpbmNs
dWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU3Bl
Y2lmaWMuaD4KLSNpbmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgotI2lmIEVOQUJMRShSRUdF
WFBfVFJBQ0lORykKLSNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KLSNlbmRpZgotCi1uYW1l
c3BhY2UgSlNDIHsKLQotICAgIGNsYXNzIENvZGVCbG9jazsKLSAgICBjbGFzcyBDb2RlQ2FjaGU7
Ci0gICAgY2xhc3MgQ29tbW9uSWRlbnRpZmllcnM7Ci0gICAgY2xhc3MgRXhlY1N0YXRlOwotICAg
IGNsYXNzIEhhbmRsZVN0YWNrOwotICAgIGNsYXNzIElkZW50aWZpZXJUYWJsZTsKLSAgICBjbGFz
cyBJbnRlcnByZXRlcjsKLSAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKLSAgICBjbGFzcyBKU09i
amVjdDsKLSAgICBjbGFzcyBLZXl3b3JkczsKLSAgICBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7Ci0gICAgY2xhc3MgTGVnYWN5UHJvZmlsZXI7Ci0gICAgY2xhc3MgTmF0aXZlRXhlY3V0YWJs
ZTsKLSAgICBjbGFzcyBQYXJzZXJBcmVuYTsKLSAgICBjbGFzcyBSZWdFeHBDYWNoZTsKLSAgICBj
bGFzcyBTb3VyY2VQcm92aWRlcjsKLSAgICBjbGFzcyBTb3VyY2VQcm92aWRlckNhY2hlOwotICAg
IHN0cnVjdCBTdGFja0ZyYW1lOwotICAgIGNsYXNzIFN0cmluZ2lmaWVyOwotICAgIGNsYXNzIFN0
cnVjdHVyZTsKLSNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCi0gICAgY2xhc3MgUmVnRXhwOwot
I2VuZGlmCi0gICAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7Ci0gICAgY2xhc3MgVW5saW5rZWRF
dmFsQ29kZUJsb2NrOwotICAgIGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOwotICAg
IGNsYXNzIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKLQotI2lmIEVOQUJMRShERkdfSklUKQot
ICAgIG5hbWVzcGFjZSBERkcgewotICAgIGNsYXNzIExvbmdMaXZlZFN0YXRlOwotICAgIH0KLSNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotICAgIHN0cnVjdCBIYXNoVGFibGU7Ci0gICAgc3Ry
dWN0IEluc3RydWN0aW9uOwotCi0gICAgc3RydWN0IERTVE9mZnNldENhY2hlIHsKLSAgICAgICAg
RFNUT2Zmc2V0Q2FjaGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXNldCgpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHJlc2V0KCkKLSAgICAgICAgewotICAgICAgICAg
ICAgb2Zmc2V0ID0gMC4wOwotICAgICAgICAgICAgc3RhcnQgPSAwLjA7Ci0gICAgICAgICAgICBl
bmQgPSAtMS4wOwotICAgICAgICAgICAgaW5jcmVtZW50ID0gMC4wOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZG91YmxlIG9mZnNldDsKLSAgICAgICAgZG91YmxlIHN0YXJ0OwotICAgICAgICBkb3Vi
bGUgZW5kOwotICAgICAgICBkb3VibGUgaW5jcmVtZW50OwotICAgIH07Ci0KLSNpZiBFTkFCTEUo
REZHX0pJVCkKLSAgICBjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKLQotI2lmIENPTVBJTEVSKE1T
VkMpCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MjAw
KSAvLyBEaXNhYmxlICJ6ZXJvLXNpemVkIGFycmF5IGluIHN0cnVjdC91bmlvbiIgd2FybmluZwot
I2VuZGlmCi0gICAgc3RydWN0IFNjcmF0Y2hCdWZmZXIgewotICAgICAgICBTY3JhdGNoQnVmZmVy
KCkKLSAgICAgICAgewotICAgICAgICAgICAgdS5tX2FjdGl2ZUxlbmd0aCA9IDA7Ci0gICAgICAg
IH0KLQotICAgICAgICBzdGF0aWMgU2NyYXRjaEJ1ZmZlciogY3JlYXRlKHNpemVfdCBzaXplKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBTY3JhdGNoQnVmZmVyKiByZXN1bHQgPSBuZXcgKGZhc3RN
YWxsb2MoU2NyYXRjaEJ1ZmZlcjo6YWxsb2NhdGlvblNpemUoc2l6ZSkpKSBTY3JhdGNoQnVmZmVy
OwotCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgc3Rh
dGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShzaXplX3QgYnVmZmVyU2l6ZSkgeyByZXR1cm4gc2l6
ZW9mKFNjcmF0Y2hCdWZmZXIpICsgYnVmZmVyU2l6ZTsgfQotICAgICAgICB2b2lkIHNldEFjdGl2
ZUxlbmd0aChzaXplX3QgYWN0aXZlTGVuZ3RoKSB7IHUubV9hY3RpdmVMZW5ndGggPSBhY3RpdmVM
ZW5ndGg7IH0KLSAgICAgICAgc2l6ZV90IGFjdGl2ZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHUu
bV9hY3RpdmVMZW5ndGg7IH07Ci0gICAgICAgIHNpemVfdCogYWN0aXZlTGVuZ3RoUHRyKCkgeyBy
ZXR1cm4gJnUubV9hY3RpdmVMZW5ndGg7IH07Ci0gICAgICAgIHZvaWQqIGRhdGFCdWZmZXIoKSB7
IHJldHVybiBtX2J1ZmZlcjsgfQotCi0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgIHNpemVf
dCBtX2FjdGl2ZUxlbmd0aDsKLSAgICAgICAgICAgIGRvdWJsZSBwYWQ7IC8vIE1ha2Ugc3VyZSBt
X2J1ZmZlciBpcyBkb3VibGUgYWxpZ25lZC4KLSAgICAgICAgfSB1OwotI2lmIENQVShNSVBTKSAm
JiAoZGVmaW5lZCBXVEZfTUlQU19BUkNIX1JFViAmJiBXVEZfTUlQU19BUkNIX1JFViA9PSAyKQot
ICAgICAgICB2b2lkKiBtX2J1ZmZlclswXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7Ci0j
ZWxzZQotICAgICAgICB2b2lkKiBtX2J1ZmZlclswXTsKLSNlbmRpZgotICAgIH07Ci0jaWYgQ09N
UElMRVIoTVNWQykKLSNwcmFnbWEgd2FybmluZyhwb3ApCi0jZW5kaWYKLSNlbmRpZgotCi0gICAg
Y2xhc3MgSlNHbG9iYWxEYXRhIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpTR2xvYmFs
RGF0YT4gewotICAgIHB1YmxpYzoKLSAgICAgICAgLy8gV2ViQ29yZSBoYXMgYSBvbmUtdG8tb25l
IG1hcHBpbmcgb2YgdGhyZWFkcyB0byBKU0dsb2JhbERhdGFzOwotICAgICAgICAvLyBlaXRoZXIg
Y3JlYXRlKCkgb3IgY3JlYXRlTGVha2VkKCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UKLSAg
ICAgICAgLy8gb24gYSB0aHJlYWQsIHRoaXMgaXMgdGhlICdkZWZhdWx0JyBKU0dsb2JhbERhdGEg
KGl0IHVzZXMgdGhlCi0gICAgICAgIC8vIHRocmVhZCdzIGRlZmF1bHQgc3RyaW5nIHVuaXF1aW5n
IHRhYmxlIGZyb20gd3RmVGhyZWFkRGF0YSkuCi0gICAgICAgIC8vIEFQSSBjb250ZXh0cyBjcmVh
dGVkIHVzaW5nIHRoZSBuZXcgY29udGV4dCBncm91cCBhd2FyZSBpbnRlcmZhY2UKLSAgICAgICAg
Ly8gY3JlYXRlIEFQSUNvbnRleHRHcm91cCBvYmplY3RzIHdoaWNoIHJlcXVpcmUgbGVzcyBsb2Nr
aW5nIG9mIEpTQwotICAgICAgICAvLyB0aGFuIHRoZSBvbGQgc2luZ2xldG9uIEFQSVNoYXJlZCBK
U0dsb2JhbERhdGEgY3JlYXRlZCBmb3IgdXNlIGJ5Ci0gICAgICAgIC8vIHRoZSBvcmlnaW5hbCBB
UEkuCi0gICAgICAgIGVudW0gR2xvYmFsRGF0YVR5cGUgeyBEZWZhdWx0LCBBUElDb250ZXh0R3Jv
dXAsIEFQSVNoYXJlZCB9OwotICAgICAgICAKLSAgICAgICAgc3RydWN0IENsaWVudERhdGEgewot
ICAgICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+Q2xpZW50RGF0YSgpID0gMDsK
LSAgICAgICAgfTsKLQotICAgICAgICBib29sIGlzU2hhcmVkSW5zdGFuY2UoKSB7IHJldHVybiBn
bG9iYWxEYXRhVHlwZSA9PSBBUElTaGFyZWQ7IH0KLSAgICAgICAgYm9vbCB1c2luZ0FQSSgpIHsg
cmV0dXJuIGdsb2JhbERhdGFUeXBlICE9IERlZmF1bHQ7IH0KLSAgICAgICAgc3RhdGljIGJvb2wg
c2hhcmVkSW5zdGFuY2VFeGlzdHMoKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IEpTR2xvYmFsRGF0YSYgc2hhcmVkSW5zdGFuY2UoKTsKLQotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IGNyZWF0ZShIZWFwVHlwZSA9IFNt
YWxsSGVhcCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPEpT
R2xvYmFsRGF0YT4gY3JlYXRlTGVha2VkKEhlYXBUeXBlID0gU21hbGxIZWFwKTsKLSAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBjcmVhdGVDb250ZXh0R3JvdXAoSGVhcFR5
cGUgPSBTbWFsbEhlYXApOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB+SlNHbG9iYWxEYXRh
KCk7Ci0KLSAgICAgICAgdm9pZCBtYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpIHsgaGVh
cC5tYWNoaW5lVGhyZWFkcygpLm1ha2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCk7IH0KLQot
ICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU0xvY2s+IG1fYXBpTG9jazsKLQotICAgIHB1
YmxpYzoKLSNpZiBFTkFCTEUoQVNTRU1CTEVSKQotICAgICAgICAvLyBleGVjdXRhYmxlQWxsb2Nh
dG9yIHNob3VsZCBiZSBkZXN0cnVjdGVkIGFmdGVyIHRoZSBoZWFwLCBhcyB0aGUgaGVhcCBjYW4g
Y2FsbCBleGVjdXRhYmxlQWxsb2NhdG9yCi0gICAgICAgIC8vIGluIGl0cyBkZXN0cnVjdG9yLgot
ICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yIGV4ZWN1dGFibGVBbGxvY2F0b3I7Ci0jZW5kaWYK
LQotICAgICAgICAvLyBUaGUgaGVhcCBzaG91bGQgYmUganVzdCBhZnRlciBleGVjdXRhYmxlQWxs
b2NhdG9yIGFuZCBiZWZvcmUgb3RoZXIgbWVtYmVycyB0byBlbnN1cmUgdGhhdCBpdCdzCi0gICAg
ICAgIC8vIGRlc3RydWN0ZWQgYWZ0ZXIgYWxsIHRoZSBvYmplY3RzIHRoYXQgcmVmZXJlbmNlIGl0
LgotICAgICAgICBIZWFwIGhlYXA7Ci0gICAgICAgIAotI2lmIEVOQUJMRShERkdfSklUKQotICAg
ICAgICBPd25QdHI8REZHOjpMb25nTGl2ZWRTdGF0ZT4gbV9kZmdTdGF0ZTsKLSNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKLQotICAgICAgICBHbG9iYWxEYXRhVHlwZSBnbG9iYWxEYXRhVHlwZTsK
LSAgICAgICAgQ2xpZW50RGF0YSogY2xpZW50RGF0YTsKLSAgICAgICAgRXhlY1N0YXRlKiB0b3BD
YWxsRnJhbWU7Ci0gICAgICAgIFdhdGNoZG9nIHdhdGNoZG9nOwotCi0gICAgICAgIGNvbnN0IEhh
c2hUYWJsZSogYXJyYXlDb25zdHJ1Y3RvclRhYmxlOwotICAgICAgICBjb25zdCBIYXNoVGFibGUq
IGFycmF5UHJvdG90eXBlVGFibGU7Ci0gICAgICAgIGNvbnN0IEhhc2hUYWJsZSogYm9vbGVhblBy
b3RvdHlwZVRhYmxlOwotICAgICAgICBjb25zdCBIYXNoVGFibGUqIGRhdGVUYWJsZTsKLSAgICAg
ICAgY29uc3QgSGFzaFRhYmxlKiBkYXRlQ29uc3RydWN0b3JUYWJsZTsKLSAgICAgICAgY29uc3Qg
SGFzaFRhYmxlKiBlcnJvclByb3RvdHlwZVRhYmxlOwotICAgICAgICBjb25zdCBIYXNoVGFibGUq
IGdsb2JhbE9iamVjdFRhYmxlOwotICAgICAgICBjb25zdCBIYXNoVGFibGUqIGpzb25UYWJsZTsK
LSAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBtYXRoVGFibGU7Ci0gICAgICAgIGNvbnN0IEhhc2hU
YWJsZSogbnVtYmVyQ29uc3RydWN0b3JUYWJsZTsKLSAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBu
dW1iZXJQcm90b3R5cGVUYWJsZTsKLSAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBvYmplY3RDb25z
dHJ1Y3RvclRhYmxlOwotICAgICAgICBjb25zdCBIYXNoVGFibGUqIHByaXZhdGVOYW1lUHJvdG90
eXBlVGFibGU7Ci0gICAgICAgIGNvbnN0IEhhc2hUYWJsZSogcmVnRXhwVGFibGU7Ci0gICAgICAg
IGNvbnN0IEhhc2hUYWJsZSogcmVnRXhwQ29uc3RydWN0b3JUYWJsZTsKLSAgICAgICAgY29uc3Qg
SGFzaFRhYmxlKiByZWdFeHBQcm90b3R5cGVUYWJsZTsKLSAgICAgICAgY29uc3QgSGFzaFRhYmxl
KiBzdHJpbmdDb25zdHJ1Y3RvclRhYmxlOwotICAgICAgICAKLSAgICAgICAgU3Ryb25nPFN0cnVj
dHVyZT4gc3RydWN0dXJlU3RydWN0dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1
Y3R1cmVSYXJlRGF0YVN0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZGVidWdn
ZXJBY3RpdmF0aW9uU3RydWN0dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB0ZXJtaW5h
dGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0
cmluZ1N0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gbm90QW5PYmplY3RTdHJ1
Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb3BlcnR5TmFtZUl0ZXJhdG9yU3Ry
dWN0dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBnZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmU7
Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGFwaVdyYXBwZXJTdHJ1Y3R1cmU7Ci0gICAgICAg
IFN0cm9uZzxTdHJ1Y3R1cmU+IEpTU2NvcGVTdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1
Y3R1cmU+IGV4ZWN1dGFibGVTdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IG5h
dGl2ZUV4ZWN1dGFibGVTdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGV2YWxF
eGVjdXRhYmxlU3RydWN0dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9ncmFtRXhl
Y3V0YWJsZVN0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZnVuY3Rpb25FeGVj
dXRhYmxlU3RydWN0dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiByZWdFeHBTdHJ1Y3R1
cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHNoYXJlZFN5bWJvbFRhYmxlU3RydWN0dXJl
OwotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1cmVDaGFpblN0cnVjdHVyZTsKLSAg
ICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3BhcnNlQXJyYXlWYWx1ZU1hcFN0cnVjdHVyZTsKLSAg
ICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2l0aFNjb3BlU3RydWN0dXJlOwotICAgICAgICBTdHJv
bmc8U3RydWN0dXJlPiB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZTsKLSAgICAg
ICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlOwot
ICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZEV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmU7
Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1
Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb3BlcnR5VGFibGVTdHJ1Y3R1cmU7
Ci0KLSAgICAgICAgSWRlbnRpZmllclRhYmxlKiBpZGVudGlmaWVyVGFibGU7Ci0gICAgICAgIENv
bW1vbklkZW50aWZpZXJzKiBwcm9wZXJ0eU5hbWVzOwotICAgICAgICBjb25zdCBNYXJrZWRBcmd1
bWVudEJ1ZmZlciogZW1wdHlMaXN0OyAvLyBMaXN0cyBhcmUgc3VwcG9zZWQgdG8gYmUgYWxsb2Nh
dGVkIG9uIHRoZSBzdGFjayB0byBoYXZlIHRoZWlyIGVsZW1lbnRzIHByb3Blcmx5IG1hcmtlZCwg
d2hpY2ggaXMgbm90IHRoZSBjYXNlIGhlcmUgLSBidXQgdGhpcyBsaXN0IGhhcyBub3RoaW5nIHRv
IG1hcmsuCi0gICAgICAgIFNtYWxsU3RyaW5ncyBzbWFsbFN0cmluZ3M7Ci0gICAgICAgIE51bWVy
aWNTdHJpbmdzIG51bWVyaWNTdHJpbmdzOwotICAgICAgICBEYXRlSW5zdGFuY2VDYWNoZSBkYXRl
SW5zdGFuY2VDYWNoZTsKLSAgICAgICAgV1RGOjpTaW1wbGVTdGF0cyBtYWNoaW5lQ29kZUJ5dGVz
UGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQ7Ci0gICAgICAgIFZlY3RvcjxDb2RlQmxvY2sq
PiBjb2RlQmxvY2tzQmVpbmdDb21waWxlZDsKLSAgICAgICAgdm9pZCBzdGFydGVkQ29tcGlsaW5n
KENvZGVCbG9jayogY29kZUJsb2NrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb2RlQmxvY2tz
QmVpbmdDb21waWxlZC5hcHBlbmQoY29kZUJsb2NrKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZv
aWQgZmluaXNoZWRDb21waWxpbmcoQ29kZUJsb2NrKiBjb2RlQmxvY2spCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBjb2RlQmxvY2sgPT0gY29kZUJsb2Nr
c0JlaW5nQ29tcGlsZWQubGFzdCgpKTsKLSAgICAgICAgICAgIGNvZGVCbG9ja3NCZWluZ0NvbXBp
bGVkLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0SW5EZWZpbmVP
d25Qcm9wZXJ0eShib29sIGluRGVmaW5lT3duUHJvcGVydHkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1faW5EZWZpbmVPd25Qcm9wZXJ0eSA9IGluRGVmaW5lT3duUHJvcGVydHk7Ci0gICAgICAg
IH0KLQotICAgICAgICBib29sIGlzSW5EZWZpbmVPd25Qcm9wZXJ0eSgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBtX2luRGVmaW5lT3duUHJvcGVydHk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBMZWdhY3lQcm9maWxlciogZW5hYmxlZFByb2ZpbGVyKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIG1fZW5hYmxlZFByb2ZpbGVyOwotICAgICAgICB9Ci0KLSNpZiBFTkFCTEUo
SklUKSAmJiBFTkFCTEUoTExJTlQpCi0gICAgICAgIGJvb2wgY2FuVXNlSklUKCkgeyByZXR1cm4g
bV9jYW5Vc2VKSVQ7IH0KLSNlbGlmIEVOQUJMRShKSVQpCi0gICAgICAgIGJvb2wgY2FuVXNlSklU
KCkgeyByZXR1cm4gdHJ1ZTsgfSAvLyBqaXQgb25seQotI2Vsc2UKLSAgICAgICAgYm9vbCBjYW5V
c2VKSVQoKSB7IHJldHVybiBmYWxzZTsgfSAvLyBpbnRlcnByZXRlciBvbmx5Ci0jZW5kaWYKLQot
I2lmIEVOQUJMRShZQVJSX0pJVCkKLSAgICAgICAgYm9vbCBjYW5Vc2VSZWdFeHBKSVQoKSB7IHJl
dHVybiBtX2NhblVzZVJlZ0V4cEpJVDsgfQotI2Vsc2UKLSAgICAgICAgYm9vbCBjYW5Vc2VSZWdF
eHBKSVQoKSB7IHJldHVybiBmYWxzZTsgfSAvLyBpbnRlcnByZXRlciBvbmx5Ci0jZW5kaWYKLQot
ICAgICAgICBTb3VyY2VQcm92aWRlckNhY2hlKiBhZGRTb3VyY2VQcm92aWRlckNhY2hlKFNvdXJj
ZVByb3ZpZGVyKik7Ci0gICAgICAgIHZvaWQgY2xlYXJTb3VyY2VQcm92aWRlckNhY2hlcygpOwot
Ci0gICAgICAgIFByb3RvdHlwZU1hcCBwcm90b3R5cGVNYXA7Ci0KLSAgICAgICAgT3duUHRyPFBh
cnNlckFyZW5hPiBwYXJzZXJBcmVuYTsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxT
b3VyY2VQcm92aWRlcj4sIFJlZlB0cjxTb3VyY2VQcm92aWRlckNhY2hlPiA+IFNvdXJjZVByb3Zp
ZGVyQ2FjaGVNYXA7Ci0gICAgICAgIFNvdXJjZVByb3ZpZGVyQ2FjaGVNYXAgc291cmNlUHJvdmlk
ZXJDYWNoZU1hcDsKLSAgICAgICAgT3duUHRyPEtleXdvcmRzPiBrZXl3b3JkczsKLSAgICAgICAg
SW50ZXJwcmV0ZXIqIGludGVycHJldGVyOwotI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIE93blB0
cjxKSVRUaHVua3M+IGppdFN0dWJzOwotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2V0
Q1RJU3R1YihUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBqaXRTdHVicy0+Y3RpU3R1Yih0aGlzLCBnZW5lcmF0b3IpOwotICAgICAgICB9Ci0g
ICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiwg
SW50cmluc2ljKTsKLSNlbmRpZgotICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBnZXRIb3N0RnVu
Y3Rpb24oTmF0aXZlRnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKTsKLQotICAg
ICAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKLSAgICAgICAgUmVmQ291bnRlZEFycmF5PFN0YWNrRnJh
bWU+IGV4Y2VwdGlvblN0YWNrOwotCi0gICAgICAgIGNvbnN0IENsYXNzSW5mbyogY29uc3QganNB
cnJheUNsYXNzSW5mbzsKLSAgICAgICAgY29uc3QgQ2xhc3NJbmZvKiBjb25zdCBqc0ZpbmFsT2Jq
ZWN0Q2xhc3NJbmZvOwotCi0gICAgICAgIFJldHVybkFkZHJlc3NQdHIgZXhjZXB0aW9uTG9jYXRp
b247Ci0gICAgICAgIEpTVmFsdWUgaG9zdENhbGxSZXR1cm5WYWx1ZTsKLSAgICAgICAgRXhlY1N0
YXRlKiBjYWxsRnJhbWVGb3JUaHJvdzsKLSAgICAgICAgdm9pZCogdGFyZ2V0TWFjaGluZVBDRm9y
VGhyb3c7Ci0gICAgICAgIEluc3RydWN0aW9uKiB0YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3c7
Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIHVpbnQzMl90IG9zckV4aXRJbmRleDsKLSAg
ICAgICAgdm9pZCogb3NyRXhpdEp1bXBEZXN0aW5hdGlvbjsKLSAgICAgICAgVmVjdG9yPFNjcmF0
Y2hCdWZmZXIqPiBzY3JhdGNoQnVmZmVyczsKLSAgICAgICAgc2l6ZV90IHNpemVPZkxhc3RTY3Jh
dGNoQnVmZmVyOwotICAgICAgICAKLSAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZl
ckZvclNpemUoc2l6ZV90IHNpemUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghc2l6ZSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KHNpemUgPiBzaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlcikgewotICAgICAgICAgICAgICAgIC8vIFBy
b3RlY3QgYWdhaW5zdCBhIE5eMiBtZW1vcnkgdXNhZ2UgcGF0aG9sb2d5IGJ5IGVuc3VyaW5nCi0g
ICAgICAgICAgICAgICAgLy8gdGhhdCBhdCB3b3JzdCwgd2UgZ2V0IGEgZ2VvbWV0cmljIHNlcmll
cywgbWVhbmluZyB0aGF0IHRoZQotICAgICAgICAgICAgICAgIC8vIHRvdGFsIG1lbW9yeSB1c2Fn
ZSBpcyBzb21ld2hlcmUgYXJvdW5kCi0gICAgICAgICAgICAgICAgLy8gbWF4KHNjcmF0Y2ggYnVm
ZmVyIHNpemUpICogNC4KLSAgICAgICAgICAgICAgICBzaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlciA9
IHNpemUgKiAyOwotCi0gICAgICAgICAgICAgICAgc2NyYXRjaEJ1ZmZlcnMuYXBwZW5kKFNjcmF0
Y2hCdWZmZXI6OmNyZWF0ZShzaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlcikpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBTY3JhdGNoQnVmZmVyKiByZXN1bHQgPSBzY3JhdGNoQnVmZmVycy5s
YXN0KCk7Ci0gICAgICAgICAgICByZXN1bHQtPnNldEFjdGl2ZUxlbmd0aCgwKTsKLSAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGdhdGhlckNvbnNl
cnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7Ci0jZW5kaWYKLQotICAgICAgICBKU0ds
b2JhbE9iamVjdCogZHluYW1pY0dsb2JhbE9iamVjdDsKLQotICAgICAgICBIYXNoU2V0PEpTT2Jq
ZWN0Kj4gc3RyaW5nUmVjdXJzaW9uQ2hlY2tWaXNpdGVkT2JqZWN0czsKLQotICAgICAgICBkb3Vi
bGUgY2FjaGVkVVRDT2Zmc2V0OwotICAgICAgICBEU1RPZmZzZXRDYWNoZSBkc3RPZmZzZXRDYWNo
ZTsKLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBjYWNoZWREYXRlU3RyaW5nOwotICAgICAgICBk
b3VibGUgY2FjaGVkRGF0ZVN0cmluZ1ZhbHVlOwotCi0gICAgICAgIExlZ2FjeVByb2ZpbGVyKiBt
X2VuYWJsZWRQcm9maWxlcjsKLSAgICAgICAgT3duUHRyPFByb2ZpbGVyOjpEYXRhYmFzZT4gbV9w
ZXJCeXRlY29kZVByb2ZpbGVyOwotICAgICAgICBSZWdFeHBDYWNoZSogbV9yZWdFeHBDYWNoZTsK
LSAgICAgICAgQnVtcFBvaW50ZXJBbGxvY2F0b3IgbV9yZWdFeHBBbGxvY2F0b3I7Ci0KLSNpZiBF
TkFCTEUoUkVHRVhQX1RSQUNJTkcpCi0gICAgICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8UmVmUHRy
PFJlZ0V4cD4gPiBSVFRyYWNlTGlzdDsKLSAgICAgICAgUlRUcmFjZUxpc3QqIG1fcnRUcmFjZUxp
c3Q7Ci0jZW5kaWYKLQotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciBl
eGNsdXNpdmVUaHJlYWQ7Ci0jZW5kaWYKLQotICAgICAgICBDYWNoZWRUcmFuc2NlbmRlbnRhbEZ1
bmN0aW9uPHN0ZDo6c2luPiBjYWNoZWRTaW47Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCByZXNldERhdGVDYWNoZSgpOwotCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
c3RhcnRTYW1wbGluZygpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHN0b3BTYW1w
bGluZygpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXBTYW1wbGVEYXRhKEV4
ZWNTdGF0ZSogZXhlYyk7Ci0gICAgICAgIFJlZ0V4cENhY2hlKiByZWdFeHBDYWNoZSgpIHsgcmV0
dXJuIG1fcmVnRXhwQ2FjaGU7IH0KLSNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCi0gICAgICAg
IHZvaWQgYWRkUmVnRXhwVG9UcmFjZShQYXNzUmVmUHRyPFJlZ0V4cD4gcmVnRXhwKTsKLSNlbmRp
ZgotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXBSZWdFeHBUcmFjZSgpOwotCi0g
ICAgICAgIGJvb2wgaXNDb2xsZWN0b3JCdXN5KCkgeyByZXR1cm4gaGVhcC5pc0J1c3koKTsgfQot
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KCk7
Ci0KLSNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKLSAgICAgICAgYm9vbCBpc0luaXRpYWxpemlu
Z09iamVjdCgpIGNvbnN0OyAKLSAgICAgICAgdm9pZCBzZXRJbml0aWFsaXppbmdPYmplY3RDbGFz
cyhjb25zdCBDbGFzc0luZm8qKTsKLSNlbmRpZgotCi0gICAgICAgIHVuc2lnbmVkIG1fbmV3U3Ry
aW5nc1NpbmNlTGFzdEhhc2hDb25zOwotCi0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBz
X21pbk51bWJlck9mTmV3U3RyaW5nc1RvSGFzaENvbnMgPSAxMDA7Ci0KLSAgICAgICAgYm9vbCBo
YXZlRW5vdWdoTmV3U3RyaW5nc1RvSGFzaENvbnMoKSB7IHJldHVybiBtX25ld1N0cmluZ3NTaW5j
ZUxhc3RIYXNoQ29ucyA+IHNfbWluTnVtYmVyT2ZOZXdTdHJpbmdzVG9IYXNoQ29uczsgfQotICAg
ICAgICB2b2lkIHJlc2V0TmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zKCkgeyBtX25ld1N0cmlu
Z3NTaW5jZUxhc3RIYXNoQ29ucyA9IDA7IH0KLQotI2RlZmluZSByZWdpc3RlclR5cGVkQXJyYXlG
dW5jdGlvbih0eXBlLCBjYXBpdGFsaXplZFR5cGUpIFwKLSAgICAgICAgdm9pZCByZWdpc3RlclR5
cGVkQXJyYXlEZXNjcmlwdG9yKGNvbnN0IGNhcGl0YWxpemVkVHlwZSMjQXJyYXkqLCBjb25zdCBU
eXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgXAotICAgICAgICB7IFwKLSAgICAgICAg
ICAgIEFTU0VSVCghbV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvci5tX2NsYXNzSW5mbyB8fCBtXyMj
dHlwZSMjQXJyYXlEZXNjcmlwdG9yLm1fY2xhc3NJbmZvID09IGRlc2NyaXB0b3IubV9jbGFzc0lu
Zm8pOyBcCi0gICAgICAgICAgICBtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yID0gZGVzY3JpcHRv
cjsgXAotICAgICAgICAgICAgQVNTRVJUKG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IubV9jbGFz
c0luZm8pOyBcCi0gICAgICAgIH0gXAotICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRv
ciYgdHlwZSMjQXJyYXlEZXNjcmlwdG9yKCkgY29uc3QgeyBBU1NFUlQobV8jI3R5cGUjI0FycmF5
RGVzY3JpcHRvci5tX2NsYXNzSW5mbyk7IHJldHVybiBtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9y
OyB9Ci0KLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oaW50OCwgSW50OCk7Ci0g
ICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKGludDE2LCBJbnQxNik7Ci0gICAgICAg
IHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKGludDMyLCBJbnQzMik7Ci0gICAgICAgIHJlZ2lz
dGVyVHlwZWRBcnJheUZ1bmN0aW9uKHVpbnQ4LCBVaW50OCk7Ci0gICAgICAgIHJlZ2lzdGVyVHlw
ZWRBcnJheUZ1bmN0aW9uKHVpbnQ4Q2xhbXBlZCwgVWludDhDbGFtcGVkKTsKLSAgICAgICAgcmVn
aXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odWludDE2LCBVaW50MTYpOwotICAgICAgICByZWdpc3Rl
clR5cGVkQXJyYXlGdW5jdGlvbih1aW50MzIsIFVpbnQzMik7Ci0gICAgICAgIHJlZ2lzdGVyVHlw
ZWRBcnJheUZ1bmN0aW9uKGZsb2F0MzIsIEZsb2F0MzIpOwotICAgICAgICByZWdpc3RlclR5cGVk
QXJyYXlGdW5jdGlvbihmbG9hdDY0LCBGbG9hdDY0KTsKLSN1bmRlZiByZWdpc3RlclR5cGVkQXJy
YXlGdW5jdGlvbgotICAgICAgICAKLSAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3Iq
IHR5cGVkQXJyYXlEZXNjcmlwdG9yKFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNvbnN0Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICAgICAgY2FzZSBUeXBlZEFy
cmF5Tm9uZToKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGNhc2UgVHlw
ZWRBcnJheUludDg6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZpbnQ4QXJyYXlEZXNjcmlwdG9y
KCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlJbnQxNjoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gJmludDE2QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJy
YXlJbnQzMjoKLSAgICAgICAgICAgICAgICByZXR1cm4gJmludDMyQXJyYXlEZXNjcmlwdG9yKCk7
Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50ODoKLSAgICAgICAgICAgICAgICByZXR1
cm4gJnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlV
aW50OENsYW1wZWQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50OENsYW1wZWRBcnJheURl
c2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQxNjoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gJnVpbnQxNkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2Fz
ZSBUeXBlZEFycmF5VWludDMyOgotICAgICAgICAgICAgICAgIHJldHVybiAmdWludDMyQXJyYXlE
ZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgotICAgICAg
ICAgICAgICAgIHJldHVybiAmZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAg
Y2FzZSBUeXBlZEFycmF5RmxvYXQ2NDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJmZsb2F0NjRB
cnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
Q1JBU0goKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIEpTTG9jayYgYXBpTG9jaygpIHsgcmV0dXJuICptX2FwaUxvY2s7IH0K
LSAgICAgICAgQ29kZUNhY2hlKiBjb2RlQ2FjaGUoKSB7IHJldHVybiBtX2NvZGVDYWNoZS5nZXQo
KTsgfQotCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGlzY2FyZEFsbENvZGUoKTsK
LQotICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7Ci0gICAgICAgIAotICAgICAgICBKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cGUsIEhlYXBU
eXBlKTsKLSAgICAgICAgc3RhdGljIEpTR2xvYmFsRGF0YSomIHNoYXJlZEluc3RhbmNlSW50ZXJu
YWwoKTsKLSAgICAgICAgdm9pZCBjcmVhdGVOYXRpdmVUaHVuaygpOwotI2lmIEVOQUJMRShBU1NF
TUJMRVIpCi0gICAgICAgIGJvb2wgbV9jYW5Vc2VBc3NlbWJsZXI7Ci0jZW5kaWYKLSNpZiBFTkFC
TEUoSklUKQotICAgICAgICBib29sIG1fY2FuVXNlSklUOwotI2VuZGlmCi0jaWYgRU5BQkxFKFlB
UlJfSklUKQotICAgICAgICBib29sIG1fY2FuVXNlUmVnRXhwSklUOwotI2VuZGlmCi0jaWYgRU5B
QkxFKEdDX1ZBTElEQVRJT04pCi0gICAgICAgIGNvbnN0IENsYXNzSW5mbyogbV9pbml0aWFsaXpp
bmdPYmplY3RDbGFzczsKLSNlbmRpZgotICAgICAgICBib29sIG1faW5EZWZpbmVPd25Qcm9wZXJ0
eTsKLSAgICAgICAgT3duUHRyPENvZGVDYWNoZT4gbV9jb2RlQ2FjaGU7Ci0KLSAgICAgICAgVHlw
ZWRBcnJheURlc2NyaXB0b3IgbV9pbnQ4QXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFy
cmF5RGVzY3JpcHRvciBtX2ludDE2QXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5
RGVzY3JpcHRvciBtX2ludDMyQXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVz
Y3JpcHRvciBtX3VpbnQ4QXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3Jp
cHRvciBtX3VpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURl
c2NyaXB0b3IgbV91aW50MTZBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNj
cmlwdG9yIG1fdWludDMyQXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3Jp
cHRvciBtX2Zsb2F0MzJBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlw
dG9yIG1fZmxvYXQ2NEFycmF5RGVzY3JpcHRvcjsKLSAgICB9OwotCi0jaWYgRU5BQkxFKEdDX1ZB
TElEQVRJT04pCi0gICAgaW5saW5lIGJvb2wgSlNHbG9iYWxEYXRhOjppc0luaXRpYWxpemluZ09i
amVjdCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gISFtX2luaXRpYWxpemluZ09iamVj
dENsYXNzOwotICAgIH0KLQotICAgIGlubGluZSB2b2lkIEpTR2xvYmFsRGF0YTo6c2V0SW5pdGlh
bGl6aW5nT2JqZWN0Q2xhc3MoY29uc3QgQ2xhc3NJbmZvKiBpbml0aWFsaXppbmdPYmplY3RDbGFz
cykKLSAgICB7Ci0gICAgICAgIG1faW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MgPSBpbml0aWFsaXpp
bmdPYmplY3RDbGFzczsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGlubGluZSBIZWFwKiBXZWFrU2V0
OjpoZWFwKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAmbV9nbG9iYWxEYXRhLT5oZWFw
OwotICAgIH0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBKU0dsb2JhbERhdGFf
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsOCArMTA1LDggQEAg
Y29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgSlNHbG9iYWxPYgogQGVuZAogKi8KIAotSlNH
bG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiBnbG9iYWxP
YmplY3RNZXRob2RUYWJsZSkKLSAgICA6IEJhc2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCAwKQor
SlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiBnbG9iYWxPYmplY3RNZXRob2RUYWJs
ZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgMCkKICAgICAsIG1fbWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZFdhdGNocG9pbnQoYWRvcHRSZWYobmV3IFdhdGNocG9pbnRTZXQoSW5pdGlhbGl6ZWRX
YXRjaGluZykpKQogICAgICwgbV9oYXZpbmdBQmFkVGltZVdhdGNocG9pbnQoYWRvcHRSZWYobmV3
IFdhdGNocG9pbnRTZXQoSW5pdGlhbGl6ZWRXYXRjaGluZykpKQogICAgICwgbV93ZWFrUmFuZG9t
KE9wdGlvbnM6OmZvcmNlV2Vha1JhbmRvbVNlZWQoKSA/IE9wdGlvbnM6OmZvcmNlZFdlYWtSYW5k
b21TZWVkKCkgOiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZG9tTnVtYmVyKCkgKiAoc3RkOjpu
dW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpICsgMS4wKSkpCkBAIC0xMjAsNyArMTIwLDcg
QEAgSlNHbG9iYWxPYmplY3Q6On5KU0dsb2JhbE9iamVjdCgpCiAgICAgaWYgKG1fZGVidWdnZXIp
CiAgICAgICAgIG1fZGVidWdnZXItPmRldGFjaCh0aGlzKTsKIAotICAgIGlmIChMZWdhY3lQcm9m
aWxlciogcHJvZmlsZXIgPSBnbG9iYWxEYXRhKCkuZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgaWYg
KExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IHZtKCkuZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAg
ICAgIHByb2ZpbGVyLT5zdG9wUHJvZmlsaW5nKHRoaXMpOwogfQogCkBAIC0xMjksMTYgKzEyOSwx
NiBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpkZXN0cm95KEpTQ2VsbCogY2VsCiAgICAgc3RhdGlj
X2Nhc3Q8SlNHbG9iYWxPYmplY3QqPihjZWxsKS0+SlNHbG9iYWxPYmplY3Q6On5KU0dsb2JhbE9i
amVjdCgpOwogfQogCi12b2lkIEpTR2xvYmFsT2JqZWN0OjpzZXRHbG9iYWxUaGlzKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNPYmplY3QqIGdsb2JhbFRoaXMpCit2b2lkIEpTR2xvYmFsT2Jq
ZWN0OjpzZXRHbG9iYWxUaGlzKFZNJiB2bSwgSlNPYmplY3QqIGdsb2JhbFRoaXMpCiB7IAotICAg
IG1fZ2xvYmFsVGhpcy5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgZ2xvYmFsVGhpcyk7CisgICAgbV9n
bG9iYWxUaGlzLnNldCh2bSwgdGhpcywgZ2xvYmFsVGhpcyk7CiB9CiAKIHZvaWQgSlNHbG9iYWxP
YmplY3Q6OmluaXQoSlNPYmplY3QqIHRoaXNWYWx1ZSkKIHsKLSAgICBBU1NFUlQoZ2xvYmFsRGF0
YSgpLmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKKyAgICBBU1NFUlQo
dm0oKS5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAKLSAgICBzZXRH
bG9iYWxUaGlzKGdsb2JhbERhdGEoKSwgdGhpc1ZhbHVlKTsKKyAgICBzZXRHbG9iYWxUaGlzKHZt
KCksIHRoaXNWYWx1ZSk7CiAgICAgSlNHbG9iYWxPYmplY3Q6Omdsb2JhbEV4ZWMoKS0+aW5pdCgw
LCAwLCB0aGlzLCBDYWxsRnJhbWU6Om5vQ2FsbGVyKCksIDAsIDApOwogCiAgICAgbV9kZWJ1Z2dl
ciA9IDA7CkBAIC0xNjEsMTQgKzE2MSwxNCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpwdXREaXJl
Y3RWaXJ0dWFsKEpTCiAgICAgSlNHbG9iYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNH
bG9iYWxPYmplY3QqPihvYmplY3QpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwg
SGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KSk7CiAKLSAgICBpZiAo
c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyh0aGlzT2JqZWN0LCBleGVjLT5nbG9iYWxEYXRh
KCksIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMpKQorICAgIGlmIChzeW1ib2xUYWJs
ZVB1dFdpdGhBdHRyaWJ1dGVzKHRoaXNPYmplY3QsIGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSwg
dmFsdWUsIGF0dHJpYnV0ZXMpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU1ZhbHVlIHZhbHVl
QmVmb3JlID0gdGhpc09iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVy
dHlOYW1lKTsKKyAgICBKU1ZhbHVlIHZhbHVlQmVmb3JlID0gdGhpc09iamVjdC0+Z2V0RGlyZWN0
KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7CiAg
ICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3Qp
OwogICAgIGlmICghdmFsdWVCZWZvcmUpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZUFmdGVyID0g
dGhpc09iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsK
KyAgICAgICAgSlNWYWx1ZSB2YWx1ZUFmdGVyID0gdGhpc09iamVjdC0+Z2V0RGlyZWN0KGV4ZWMt
PnZtKCksIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIGlmICh2YWx1ZUFmdGVyKQogICAgICAgICAg
ICAgSlNPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCB2YWx1ZUFmdGVyLCBhdHRyaWJ1dGVzKTsKICAgICB9CkBAIC0xOTcsMTI2ICsxOTcsMTI2
IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KIHsKICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBKU0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhlYygpOwogCi0gICAgbV9mdW5j
dGlvblByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBGdW5jdGlvblByb3Rv
dHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEZ1bmN0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBqc051bGwoKSkpKTsgLy8gVGhlIHJlYWwgcHJv
dG90eXBlIHdpbGwgYmUgc2V0IG9uY2UgT2JqZWN0UHJvdG90eXBlIGlzIGNyZWF0ZWQuCi0gICAg
bV9mdW5jdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0Z1bmN0
aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Z1bmN0aW9u
UHJvdG90eXBlLmdldCgpKSk7Ci0gICAgbV9ib3VuZEZ1bmN0aW9uU3RydWN0dXJlLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOwotICAg
IG1fbmFtZWRGdW5jdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBT
dHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVu
Y3Rpb25TdHJ1Y3R1cmUuZ2V0KCksIGV4ZWMtPmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5u
YW1lLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSwgMCwgbV9mdW5jdGlvbk5hbWVP
ZmZzZXQpKTsKLSAgICBtX2ludGVybmFsRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywgSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fZnVu
Y3Rpb25Qcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEZ1bmN0aW9uUHJvdG90eXBlOjpj
cmVhdGUoZXhlYywgdGhpcywgRnVuY3Rpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT52bSgpLCB0aGlzLCBqc051bGwoKSkpKTsgLy8gVGhlIHJlYWwgcHJvdG90eXBlIHdpbGwgYmUg
c2V0IG9uY2UgT2JqZWN0UHJvdG90eXBlIGlzIGNyZWF0ZWQuCisgICAgbV9mdW5jdGlvblN0cnVj
dHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX2JvdW5k
RnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQm91bmRGdW5jdGlvbjo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0
KCkpKTsKKyAgICBtX25hbWVkRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMs
IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIG1fZnVuY3Rpb25T
dHJ1Y3R1cmUuZ2V0KCksIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bmFtZSwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0sIDAsIG1fZnVuY3Rpb25OYW1lT2Zmc2V0KSk7CisgICAg
bV9pbnRlcm5hbEZ1bmN0aW9uU3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBJbnRlcm5h
bEZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblBy
b3RvdHlwZS5nZXQoKSkpOwogICAgIEpTRnVuY3Rpb24qIGNhbGxGdW5jdGlvbiA9IDA7CiAgICAg
SlNGdW5jdGlvbiogYXBwbHlGdW5jdGlvbiA9IDA7CiAgICAgbV9mdW5jdGlvblByb3RvdHlwZS0+
YWRkRnVuY3Rpb25Qcm9wZXJ0aWVzKGV4ZWMsIHRoaXMsICZjYWxsRnVuY3Rpb24sICZhcHBseUZ1
bmN0aW9uKTsKLSAgICBtX2NhbGxGdW5jdGlvbi5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBjYWxsRnVuY3Rpb24pOwotICAgIG1fYXBwbHlGdW5jdGlvbi5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBhcHBseUZ1bmN0aW9uKTsKLSAgICBtX29iamVjdFByb3RvdHlwZS5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBPYmplY3RQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlz
LCBPYmplY3RQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRo
aXMsIGpzTnVsbCgpKSkpOworICAgIG1fY2FsbEZ1bmN0aW9uLnNldChleGVjLT52bSgpLCB0aGlz
LCBjYWxsRnVuY3Rpb24pOworICAgIG1fYXBwbHlGdW5jdGlvbi5zZXQoZXhlYy0+dm0oKSwgdGhp
cywgYXBwbHlGdW5jdGlvbik7CisgICAgbV9vYmplY3RQcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCks
IHRoaXMsIE9iamVjdFByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIE9iamVjdFByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIGpzTnVsbCgpKSkpOwogICAgIEdl
dHRlclNldHRlciogcHJvdG9BY2Nlc3NvciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKGV4ZWMpOwot
ICAgIHByb3RvQWNjZXNzb3ItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIEpTRnVuY3Rp
b246OmNyZWF0ZShleGVjLCB0aGlzLCAwLCBTdHJpbmcoKSwgZ2xvYmFsRnVuY1Byb3RvR2V0dGVy
KSk7Ci0gICAgcHJvdG9BY2Nlc3Nvci0+c2V0U2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgSlNG
dW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIDAsIFN0cmluZygpLCBnbG9iYWxGdW5jUHJvdG9T
ZXR0ZXIpKTsKKyAgICBwcm90b0FjY2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+dm0oKSwgSlNGdW5j
dGlvbjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIDAsIFN0cmluZygpLCBnbG9iYWxGdW5jUHJvdG9HZXR0
ZXIpKTsKKyAgICBwcm90b0FjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+dm0oKSwgSlNGdW5jdGlv
bjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIDAsIFN0cmluZygpLCBnbG9iYWxGdW5jUHJvdG9TZXR0ZXIp
KTsKICAgICBtX29iamVjdFByb3RvdHlwZS0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgZXhlYy0+
cHJvcGVydHlOYW1lcygpLnVuZGVyc2NvcmVQcm90bywgcHJvdG9BY2Nlc3NvciwgQWNjZXNzb3Ig
fCBEb250RW51bSk7Ci0gICAgbV9mdW5jdGlvblByb3RvdHlwZS0+c3RydWN0dXJlKCktPnNldFBy
b3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90
b3R5cGUuZ2V0KCkpOworICAgIG1fZnVuY3Rpb25Qcm90b3R5cGUtPnN0cnVjdHVyZSgpLT5zZXRQ
cm90b3R5cGVXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBtX29iamVjdFByb3RvdHlwZS5n
ZXQoKSk7CiAKLSAgICBtX25hbWVTY29wZVN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBKU05hbWVTY29wZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywganNOdWxsKCkpKTsKLSAgICBtX2FjdGl2YXRpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgSlNBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBqc051bGwoKSkpOwotICAgIG1fc3RyaWN0RXZhbEFjdGl2YXRpb25T
dHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgU3RyaWN0RXZhbEFjdGl2YXRp
b246OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGpzTnVsbCgpKSk7
Ci0gICAgbV93aXRoU2NvcGVTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
SlNXaXRoU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGpz
TnVsbCgpKSk7Ci0KLSAgICBtX251bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywgSlNGaW5hbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGdsb2Jh
bERhdGEoKSwgdGhpcywganNOdWxsKCksIEpTRmluYWxPYmplY3Q6OmRlZmF1bHRJbmxpbmVDYXBh
Y2l0eSgpKSk7Ci0KLSAgICBtX2NhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgSlNDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7Ci0gICAg
bV9hcmd1bWVudHNTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgQXJndW1l
bnRzOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFBy
b3RvdHlwZS5nZXQoKSkpOwotICAgIG1fY2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZS5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0NhbGxiYWNrQ29uc3RydWN0b3I6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgp
KSk7Ci0gICAgbV9jYWxsYmFja09iamVjdFN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBKU0NhbGxiYWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkp
KTsKKyAgICBtX25hbWVTY29wZVN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNOYW1l
U2NvcGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBqc051bGwoKSkpOworICAg
IG1fYWN0aXZhdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNBY3RpdmF0aW9u
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywganNOdWxsKCkpKTsKKyAgICBtX3N0
cmljdEV2YWxBY3RpdmF0aW9uU3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBTdHJpY3RF
dmFsQWN0aXZhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIGpzTnVsbCgp
KSk7CisgICAgbV93aXRoU2NvcGVTdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTV2l0
aFNjb3BlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywganNOdWxsKCkpKTsKKwor
ICAgIG1fbnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywg
SlNGaW5hbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtKCksIHRoaXMsIGpzTnVsbCgpLCBKU0Zp
bmFsT2JqZWN0OjpkZWZhdWx0SW5saW5lQ2FwYWNpdHkoKSkpOworCisgICAgbV9jYWxsYmFja0Z1
bmN0aW9uU3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0NhbGxiYWNrRnVuY3Rpb246
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdl
dCgpKSk7CisgICAgbV9hcmd1bWVudHNTdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEFy
Z3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90
eXBlLmdldCgpKSk7CisgICAgbV9jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlLnNldChleGVj
LT52bSgpLCB0aGlzLCBKU0NhbGxiYWNrQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fY2FsbGJhY2tP
YmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQ2FsbGJhY2tPYmplY3Q8SlNE
ZXN0cnVjdGlibGVPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9v
YmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotICAgIG1f
b2JqY0NhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgT2JqQ0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKLSAgICBtX29iamNXcmFwcGVy
T2JqZWN0U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQ2FsbGJhY2tP
YmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX29iamNDYWxsYmFj
a0Z1bmN0aW9uU3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBPYmpDQ2FsbGJhY2tGdW5j
dGlvbjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5
cGUuZ2V0KCkpKTsKKyAgICBtX29iamNXcmFwcGVyT2JqZWN0U3RydWN0dXJlLnNldChleGVjLT52
bSgpLCB0aGlzLCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOwogI2Vu
ZGlmCiAKLSAgICBtX2FycmF5UHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgQXJyYXlQcm90b3R5cGU6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdl
dCgpKSkpOworICAgIG1fYXJyYXlQcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEFycmF5
UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgQXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKICAgICAK
LSAgICBtX29yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1NoYXBlW1VuZGVjaWRlZFNo
YXBlID4+IEluZGV4aW5nU2hhcGVTaGlmdF0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
SlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJh
eVByb3RvdHlwZS5nZXQoKSwgQXJyYXlXaXRoVW5kZWNpZGVkKSk7Ci0gICAgbV9vcmlnaW5hbEFy
cmF5U3RydWN0dXJlRm9ySW5kZXhpbmdTaGFwZVtJbnQzMlNoYXBlID4+IEluZGV4aW5nU2hhcGVT
aGlmdF0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwgQXJy
YXlXaXRoSW50MzIpKTsKLSAgICBtX29yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1No
YXBlW0RvdWJsZVNoYXBlID4+IEluZGV4aW5nU2hhcGVTaGlmdF0uc2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwgQXJyYXlXaXRoRG91YmxlKSk7Ci0gICAgbV9v
cmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdTaGFwZVtDb250aWd1b3VzU2hhcGUgPj4g
SW5kZXhpbmdTaGFwZVNoaWZ0XS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90
eXBlLmdldCgpLCBBcnJheVdpdGhDb250aWd1b3VzKSk7Ci0gICAgbV9vcmlnaW5hbEFycmF5U3Ry
dWN0dXJlRm9ySW5kZXhpbmdTaGFwZVtBcnJheVN0b3JhZ2VTaGFwZSA+PiBJbmRleGluZ1NoYXBl
U2hpZnRdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFy
cmF5V2l0aEFycmF5U3RvcmFnZSkpOwotICAgIG1fb3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvcklu
ZGV4aW5nU2hhcGVbU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlID4+IEluZGV4aW5nU2hhcGVTaGlm
dF0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwgQXJyYXlX
aXRoU2xvd1B1dEFycmF5U3RvcmFnZSkpOworICAgIG1fb3JpZ2luYWxBcnJheVN0cnVjdHVyZUZv
ckluZGV4aW5nU2hhcGVbVW5kZWNpZGVkU2hhcGUgPj4gSW5kZXhpbmdTaGFwZVNoaWZ0XS5zZXQo
ZXhlYy0+dm0oKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRo
aXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aFVuZGVjaWRlZCkpOworICAgIG1f
b3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5nU2hhcGVbSW50MzJTaGFwZSA+PiBJbmRl
eGluZ1NoYXBlU2hpZnRdLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwgQXJyYXlXaXRo
SW50MzIpKTsKKyAgICBtX29yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1NoYXBlW0Rv
dWJsZVNoYXBlID4+IEluZGV4aW5nU2hhcGVTaGlmdF0uc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpT
QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBl
LmdldCgpLCBBcnJheVdpdGhEb3VibGUpKTsKKyAgICBtX29yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVG
b3JJbmRleGluZ1NoYXBlW0NvbnRpZ3VvdXNTaGFwZSA+PiBJbmRleGluZ1NoYXBlU2hpZnRdLnNl
dChleGVjLT52bSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwg
dGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwgQXJyYXlXaXRoQ29udGlndW91cykpOworICAg
IG1fb3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5nU2hhcGVbQXJyYXlTdG9yYWdlU2hh
cGUgPj4gSW5kZXhpbmdTaGFwZVNoaWZ0XS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNBcnJheTo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCks
IEFycmF5V2l0aEFycmF5U3RvcmFnZSkpOworICAgIG1fb3JpZ2luYWxBcnJheVN0cnVjdHVyZUZv
ckluZGV4aW5nU2hhcGVbU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlID4+IEluZGV4aW5nU2hhcGVT
aGlmdF0uc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT52bSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdpdGhTbG93UHV0QXJy
YXlTdG9yYWdlKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE51bWJlck9mSW5kZXhp
bmdTaGFwZXM7ICsraSkKICAgICAgICAgbV9hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nU2hhcGVE
dXJpbmdBbGxvY2F0aW9uW2ldID0gbV9vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdT
aGFwZVtpXTsKICAgICAKLSAgICBtX3JlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZS5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBSZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCkpKTsKKyAg
ICBtX3JlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgUmVn
RXhwTWF0Y2hlc0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9hcnJh
eVByb3RvdHlwZS5nZXQoKSkpOwogCi0gICAgbV9zdHJpbmdQcm90b3R5cGUuc2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgU3RyaW5nUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgU3Ry
aW5nUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBt
X29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKLSAgICBtX3N0cmluZ09iamVjdFN0cnVjdHVyZS5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBTdHJpbmdPYmplY3Q6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fc3RyaW5nUHJvdG90eXBlLmdldCgpKSk7Cisg
ICAgbV9zdHJpbmdQcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIFN0cmluZ1Byb3RvdHlw
ZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIFN0cmluZ1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fc3RyaW5n
T2JqZWN0U3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBTdHJpbmdPYmplY3Q6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3N0cmluZ1Byb3RvdHlwZS5nZXQoKSkpOwog
Ci0gICAgbV9ib29sZWFuUHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEJv
b2xlYW5Qcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBCb29sZWFuUHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5n
ZXQoKSkpKTsKLSAgICBtX2Jvb2xlYW5PYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgQm9vbGVhbk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgbV9ib29sZWFuUHJvdG90eXBlLmdldCgpKSk7CisgICAgbV9ib29sZWFuUHJv
dG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBCb29sZWFuUHJvdG90eXBlOjpjcmVhdGUoZXhl
YywgdGhpcywgQm9vbGVhblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRo
aXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fYm9vbGVhbk9iamVjdFN0cnVj
dHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgQm9vbGVhbk9iamVjdDo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPnZtKCksIHRoaXMsIG1fYm9vbGVhblByb3RvdHlwZS5nZXQoKSkpOwogCi0gICAgbV9u
dW1iZXJQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgTnVtYmVyUHJvdG90
eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgTnVtYmVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKLSAg
ICBtX251bWJlck9iamVjdFN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBO
dW1iZXJPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1f
bnVtYmVyUHJvdG90eXBlLmdldCgpKSk7CisgICAgbV9udW1iZXJQcm90b3R5cGUuc2V0KGV4ZWMt
PnZtKCksIHRoaXMsIE51bWJlclByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIE51bWJlclBy
b3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90
eXBlLmdldCgpKSkpOworICAgIG1fbnVtYmVyT2JqZWN0U3RydWN0dXJlLnNldChleGVjLT52bSgp
LCB0aGlzLCBOdW1iZXJPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBt
X251bWJlclByb3RvdHlwZS5nZXQoKSkpOwogCi0gICAgbV9kYXRlUHJvdG90eXBlLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIERhdGVQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBE
YXRlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBt
X29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKLSAgICBtX2RhdGVTdHJ1Y3R1cmUuc2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywgRGF0ZUluc3RhbmNlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2RhdGVQcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX2RhdGVQ
cm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIERhdGVQcm90b3R5cGU6OmNyZWF0ZShleGVj
LCB0aGlzLCBEYXRlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywg
bV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV9kYXRlU3RydWN0dXJlLnNldChleGVj
LT52bSgpLCB0aGlzLCBEYXRlSW5zdGFuY2U6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0
aGlzLCBtX2RhdGVQcm90b3R5cGUuZ2V0KCkpKTsKIAotICAgIFJlZ0V4cCogZW1wdHlSZWdleCA9
IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgIiIsIE5vRmxhZ3MpOworICAgIFJl
Z0V4cCogZW1wdHlSZWdleCA9IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMtPnZtKCksICIiLCBOb0ZsYWdz
KTsKICAgICAKLSAgICBtX3JlZ0V4cFByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzLCBSZWdFeHBQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBSZWdFeHBQcm90b3R5cGU6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90
eXBlLmdldCgpKSwgZW1wdHlSZWdleCkpOwotICAgIG1fcmVnRXhwU3RydWN0dXJlLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIFJlZ0V4cE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywgbV9yZWdFeHBQcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3Jl
Z0V4cFByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgUmVnRXhwUHJvdG90eXBlOjpjcmVh
dGUoZXhlYywgdGhpcywgUmVnRXhwUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0o
KSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpLCBlbXB0eVJlZ2V4KSk7CisgICAgbV9y
ZWdFeHBTdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIFJlZ0V4cE9iamVjdDo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fcmVnRXhwUHJvdG90eXBlLmdldCgpKSk7CiAK
LSAgICBtX2Vycm9yUHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEVycm9y
UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgRXJyb3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkp
OwotICAgIG1fZXJyb3JTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgRXJy
b3JJbnN0YW5jZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9l
cnJvclByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fZXJyb3JQcm90b3R5cGUuc2V0KGV4ZWMtPnZt
KCksIHRoaXMsIEVycm9yUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgRXJyb3JQcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5n
ZXQoKSkpKTsKKyAgICBtX2Vycm9yU3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBFcnJv
ckluc3RhbmNlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9lcnJvclByb3Rv
dHlwZS5nZXQoKSkpOwogCiAgICAgLy8gQ29uc3RydWN0b3JzCiAKLSAgICBKU0NlbGwqIG9iamVj
dENvbnN0cnVjdG9yID0gT2JqZWN0Q29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBPYmpl
Y3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
bV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKTsKLSAg
ICBKU0NlbGwqIGZ1bmN0aW9uQ29uc3RydWN0b3IgPSBGdW5jdGlvbkNvbnN0cnVjdG9yOjpjcmVh
dGUoZXhlYywgdGhpcywgRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fZnVuY3Rp
b25Qcm90b3R5cGUuZ2V0KCkpOwotICAgIEpTQ2VsbCogYXJyYXlDb25zdHJ1Y3RvciA9IEFycmF5
Q29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdl
dCgpKSwgbV9hcnJheVByb3RvdHlwZS5nZXQoKSk7Ci0gICAgSlNDZWxsKiBzdHJpbmdDb25zdHJ1
Y3RvciA9IFN0cmluZ0NvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgU3RyaW5nQ29uc3Ry
dWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fZnVuY3Rp
b25Qcm90b3R5cGUuZ2V0KCkpLCBtX3N0cmluZ1Byb3RvdHlwZS5nZXQoKSk7Ci0gICAgSlNDZWxs
KiBib29sZWFuQ29uc3RydWN0b3IgPSBCb29sZWFuQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0
aGlzLCBCb29sZWFuQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX2Jvb2xlYW5Qcm90b3R5cGUu
Z2V0KCkpOwotICAgIEpTQ2VsbCogbnVtYmVyQ29uc3RydWN0b3IgPSBOdW1iZXJDb25zdHJ1Y3Rv
cjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIE51bWJlckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9u
dW1iZXJQcm90b3R5cGUuZ2V0KCkpOwotICAgIEpTQ2VsbCogZGF0ZUNvbnN0cnVjdG9yID0gRGF0
ZUNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgRGF0ZUNvbnN0cnVjdG9yOjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdl
dCgpKSwgbV9kYXRlUHJvdG90eXBlLmdldCgpKTsKLQotICAgIG1fcmVnRXhwQ29uc3RydWN0b3Iu
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgUmVnRXhwQ29uc3RydWN0b3I6OmNyZWF0ZShl
eGVjLCB0aGlzLCBSZWdFeHBDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fcmVnRXhwUHJvdG90
eXBlLmdldCgpKSk7Ci0KLSAgICBtX2Vycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEVycm9yQ29u
c3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fZnVu
Y3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX2Vycm9yUHJvdG90eXBlLmdldCgpKSk7Ci0KLSAgICBT
dHJ1Y3R1cmUqIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlID0gTmF0aXZlRXJyb3JQcm90
b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fZXJyb3JQ
cm90b3R5cGUuZ2V0KCkpOwotICAgIFN0cnVjdHVyZSogbmF0aXZlRXJyb3JTdHJ1Y3R1cmUgPSBO
YXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKTsKLSAgICBtX2V2YWxFcnJvckNvbnN0
cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE5hdGl2ZUVycm9yQ29uc3RydWN0
b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0aXZlRXJyb3JQ
cm90b3R5cGVTdHJ1Y3R1cmUsIEFTQ0lJTGl0ZXJhbCgiRXZhbEVycm9yIikpKTsKLSAgICBtX3Jh
bmdlRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOYXRpdmVF
cnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUs
IG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCBBU0NJSUxpdGVyYWwoIlJhbmdlRXJyb3Ii
KSkpOwotICAgIG1fcmVmZXJlbmNlRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgbmF0
aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCBBU0NJSUxp
dGVyYWwoIlJlZmVyZW5jZUVycm9yIikpKTsKLSAgICBtX3N5bnRheEVycm9yQ29uc3RydWN0b3Iu
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlw
ZVN0cnVjdHVyZSwgQVNDSUlMaXRlcmFsKCJTeW50YXhFcnJvciIpKSk7Ci0gICAgbV90eXBlRXJy
b3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOYXRpdmVFcnJvckNv
bnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2
ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCBBU0NJSUxpdGVyYWwoIlR5cGVFcnJvciIpKSk7Ci0g
ICAgbV9VUklFcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE5h
dGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVj
dHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsIEFTQ0lJTGl0ZXJhbCgiVVJJRXJy
b3IiKSkpOwotCi0gICAgbV9vYmplY3RQcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9y
LCBvYmplY3RDb25zdHJ1Y3RvciwgRG9udEVudW0pOwotICAgIG1fZnVuY3Rpb25Qcm90b3R5cGUt
PnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBmdW5jdGlvbkNvbnN0cnVjdG9yLCBEb250RW51bSk7
Ci0gICAgbV9hcnJheVByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+
Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGFycmF5Q29u
c3RydWN0b3IsIERvbnRFbnVtKTsKLSAgICBtX2Jvb2xlYW5Qcm90b3R5cGUtPnB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
LmNvbnN0cnVjdG9yLCBib29sZWFuQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKLSAgICBtX3N0cmlu
Z1Byb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgp
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHN0cmluZ0NvbnN0cnVjdG9yLCBE
b250RW51bSk7Ci0gICAgbV9udW1iZXJQcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9y
LCBudW1iZXJDb25zdHJ1Y3RvciwgRG9udEVudW0pOwotICAgIG1fZGF0ZVByb3RvdHlwZS0+cHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuY29uc3RydWN0b3IsIGRhdGVDb25zdHJ1Y3RvciwgRG9udEVudW0pOwotICAgIG1f
cmVnRXhwUHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxE
YXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgbV9yZWdFeHBDb25zdHJ1
Y3Rvci5nZXQoKSwgRG9udEVudW0pOwotICAgIG1fZXJyb3JQcm90b3R5cGUtPnB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
LmNvbnN0cnVjdG9yLCBtX2Vycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsKLQotICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLk9iamVjdCwgb2JqZWN0Q29uc3RydWN0b3IsIERvbnRFbnVtKTsKLSAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIo
ZXhlYywgIkZ1bmN0aW9uIiksIGZ1bmN0aW9uQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKLSAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5BcnJheSwgYXJyYXlDb25zdHJ1Y3RvciwgRG9udEVudW0pOwotICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVj
LCAiQm9vbGVhbiIpLCBib29sZWFuQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKLSAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywg
IlN0cmluZyIpLCBzdHJpbmdDb25zdHJ1Y3RvciwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiTnVt
YmVyIiksIG51bWJlckNvbnN0cnVjdG9yLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJEYXRlIiks
IGRhdGVDb25zdHJ1Y3RvciwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiUmVnRXhwIiksIG1fcmVn
RXhwQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgIkVycm9yIiksIG1f
ZXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiRXZhbEVycm9y
IiksIG1fZXZhbEVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsKLSAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywg
IlJhbmdlRXJyb3IiKSwgbV9yYW5nZUVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsK
LSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50
aWZpZXIoZXhlYywgIlJlZmVyZW5jZUVycm9yIiksIG1fcmVmZXJlbmNlRXJyb3JDb25zdHJ1Y3Rv
ci5nZXQoKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiU3ludGF4RXJyb3IiKSwgbV9zeW50YXhF
cnJvckNvbnN0cnVjdG9yLmdldCgpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJUeXBlRXJyb3Ii
KSwgbV90eXBlRXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAi
VVJJRXJyb3IiKSwgbV9VUklFcnJvckNvbnN0cnVjdG9yLmdldCgpLCBEb250RW51bSk7CisgICAg
SlNDZWxsKiBvYmplY3RDb25zdHJ1Y3RvciA9IE9iamVjdENvbnN0cnVjdG9yOjpjcmVhdGUoZXhl
YywgdGhpcywgT2JqZWN0Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0
aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkp
OworICAgIEpTQ2VsbCogZnVuY3Rpb25Db25zdHJ1Y3RvciA9IEZ1bmN0aW9uQ29uc3RydWN0b3I6
OmNyZWF0ZShleGVjLCB0aGlzLCBGdW5jdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fZnVuY3Rpb25Q
cm90b3R5cGUuZ2V0KCkpOworICAgIEpTQ2VsbCogYXJyYXlDb25zdHJ1Y3RvciA9IEFycmF5Q29u
c3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fYXJy
YXlQcm90b3R5cGUuZ2V0KCkpOworICAgIEpTQ2VsbCogc3RyaW5nQ29uc3RydWN0b3IgPSBTdHJp
bmdDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIFN0cmluZ0NvbnN0cnVjdG9yOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSks
IG1fc3RyaW5nUHJvdG90eXBlLmdldCgpKTsKKyAgICBKU0NlbGwqIGJvb2xlYW5Db25zdHJ1Y3Rv
ciA9IEJvb2xlYW5Db25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEJvb2xlYW5Db25zdHJ1
Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5
cGUuZ2V0KCkpLCBtX2Jvb2xlYW5Qcm90b3R5cGUuZ2V0KCkpOworICAgIEpTQ2VsbCogbnVtYmVy
Q29uc3RydWN0b3IgPSBOdW1iZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIE51bWJl
ckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlv
blByb3RvdHlwZS5nZXQoKSksIG1fbnVtYmVyUHJvdG90eXBlLmdldCgpKTsKKyAgICBKU0NlbGwq
IGRhdGVDb25zdHJ1Y3RvciA9IERhdGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIERh
dGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rp
b25Qcm90b3R5cGUuZ2V0KCkpLCBtX2RhdGVQcm90b3R5cGUuZ2V0KCkpOworCisgICAgbV9yZWdF
eHBDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+dm0oKSwgdGhpcywgUmVnRXhwQ29uc3RydWN0b3I6OmNy
ZWF0ZShleGVjLCB0aGlzLCBSZWdFeHBDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
PnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3JlZ0V4cFByb3RvdHlw
ZS5nZXQoKSkpOworCisgICAgbV9lcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT52bSgpLCB0aGlz
LCBFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgRXJyb3JDb25zdHJ1Y3Rvcjo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0
KCkpLCBtX2Vycm9yUHJvdG90eXBlLmdldCgpKSk7CisKKyAgICBTdHJ1Y3R1cmUqIG5hdGl2ZUVy
cm9yUHJvdG90eXBlU3RydWN0dXJlID0gTmF0aXZlRXJyb3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Vycm9yUHJvdG90eXBlLmdldCgpKTsKKyAgICBTdHJ1
Y3R1cmUqIG5hdGl2ZUVycm9yU3RydWN0dXJlID0gTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkp
OworICAgIG1fZXZhbEVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIE5hdGl2
ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVy
ZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsIEFTQ0lJTGl0ZXJhbCgiRXZhbEVycm9y
IikpKTsKKyAgICBtX3JhbmdlRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+dm0oKSwgdGhpcywg
TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3Ry
dWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgQVNDSUlMaXRlcmFsKCJSYW5n
ZUVycm9yIikpKTsKKyAgICBtX3JlZmVyZW5jZUVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPnZt
KCksIHRoaXMsIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBuYXRp
dmVFcnJvclN0cnVjdHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsIEFTQ0lJTGl0
ZXJhbCgiUmVmZXJlbmNlRXJyb3IiKSkpOworICAgIG1fc3ludGF4RXJyb3JDb25zdHJ1Y3Rvci5z
ZXQoZXhlYy0+dm0oKSwgdGhpcywgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMs
IHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVy
ZSwgQVNDSUlMaXRlcmFsKCJTeW50YXhFcnJvciIpKSk7CisgICAgbV90eXBlRXJyb3JDb25zdHJ1
Y3Rvci5zZXQoZXhlYy0+dm0oKSwgdGhpcywgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRl
KGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0
cnVjdHVyZSwgQVNDSUlMaXRlcmFsKCJUeXBlRXJyb3IiKSkpOworICAgIG1fVVJJRXJyb3JDb25z
dHJ1Y3Rvci5zZXQoZXhlYy0+dm0oKSwgdGhpcywgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlw
ZVN0cnVjdHVyZSwgQVNDSUlMaXRlcmFsKCJVUklFcnJvciIpKSk7CisKKyAgICBtX29iamVjdFBy
b3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBvYmplY3RDb25zdHJ1Y3RvciwgRG9udEVudW0pOwor
ICAgIG1fZnVuY3Rpb25Qcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMt
PnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgZnVuY3Rpb25Db25zdHJ1
Y3RvciwgRG9udEVudW0pOworICAgIG1fYXJyYXlQcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvciwg
YXJyYXlDb25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIG1fYm9vbGVhblByb3RvdHlwZS0+cHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
LmNvbnN0cnVjdG9yLCBib29sZWFuQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICBtX3N0cmlu
Z1Byb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBzdHJpbmdDb25zdHJ1Y3RvciwgRG9udEVudW0p
OworICAgIG1fbnVtYmVyUHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVj
LT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIG51bWJlckNvbnN0cnVj
dG9yLCBEb250RW51bSk7CisgICAgbV9kYXRlUHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGRh
dGVDb25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIG1fcmVnRXhwUHJvdG90eXBlLT5wdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29u
c3RydWN0b3IsIG1fcmVnRXhwQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsKKyAgICBtX2Vy
cm9yUHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIG1fZXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwg
RG9udEVudW0pOworCisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLk9iamVjdCwgb2JqZWN0Q29uc3RydWN0b3IsIERvbnRFbnVt
KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVy
KGV4ZWMsICJGdW5jdGlvbiIpLCBmdW5jdGlvbkNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLkFycmF5LCBhcnJheUNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiQm9vbGVhbiIpLCBi
b29sZWFuQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJTdHJpbmciKSwgc3RyaW5nQ29uc3Ry
dWN0b3IsIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52
bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJOdW1iZXIiKSwgbnVtYmVyQ29uc3RydWN0b3IsIERvbnRF
bnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlm
aWVyKGV4ZWMsICJEYXRlIiksIGRhdGVDb25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgIlJlZ0V4
cCIpLCBtX3JlZ0V4cENvbnN0cnVjdG9yLmdldCgpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiRXJyb3IiKSwg
bV9lcnJvckNvbnN0cnVjdG9yLmdldCgpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiRXZhbEVycm9yIiksIG1f
ZXZhbEVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJSYW5nZUVycm9yIiks
IG1fcmFuZ2VFcnJvckNvbnN0cnVjdG9yLmdldCgpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiUmVmZXJlbmNl
RXJyb3IiKSwgbV9yZWZlcmVuY2VFcnJvckNvbnN0cnVjdG9yLmdldCgpLCBEb250RW51bSk7Cisg
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVj
LCAiU3ludGF4RXJyb3IiKSwgbV9zeW50YXhFcnJvckNvbnN0cnVjdG9yLmdldCgpLCBEb250RW51
bSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmll
cihleGVjLCAiVHlwZUVycm9yIiksIG1fdHlwZUVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRF
bnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlm
aWVyKGV4ZWMsICJVUklFcnJvciIpLCBtX1VSSUVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRF
bnVtKTsKIAotICAgIG1fZXZhbEZ1bmN0aW9uLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCB0aGlzLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
ZXZhbC5zdHJpbmcoKSwgZ2xvYmFsRnVuY0V2YWwpKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ldmFsLCBt
X2V2YWxGdW5jdGlvbi5nZXQoKSwgRG9udEVudW0pOworICAgIG1fZXZhbEZ1bmN0aW9uLnNldChl
eGVjLT52bSgpLCB0aGlzLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhpcywgMSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmV2YWwuc3RyaW5nKCksIGdsb2JhbEZ1bmNFdmFsKSk7CisgICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
LmV2YWwsIG1fZXZhbEZ1bmN0aW9uLmdldCgpLCBEb250RW51bSk7CiAKLSAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgIkpT
T04iKSwgSlNPTk9iamVjdDo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTT05PYmplY3Q6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgp
KSksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9i
YWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgIk1hdGgiKSwgTWF0aE9iamVjdDo6Y3JlYXRlKGV4
ZWMsIHRoaXMsIE1hdGhPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCks
IHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSksIERvbnRFbnVtKTsKKyAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJKU09OIiks
IEpTT05PYmplY3Q6OmNyZWF0ZShleGVjLCB0aGlzLCBKU09OT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0p
OworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZpZXIo
ZXhlYywgIk1hdGgiKSwgTWF0aE9iamVjdDo6Y3JlYXRlKGV4ZWMsIHRoaXMsIE1hdGhPYmplY3Q6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQo
KSkpLCBEb250RW51bSk7CiAKICAgICBHbG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFsc1td
ID0gewogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oSWRlbnRpZmllcihleGVjLCAiTmFOIiks
IGpzTmFOKCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKQEAgLTMzMSwxNSAr
MzMxLDE1IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICBt
X3NwZWNpYWxQb2ludGVyc1tTcGVjaWFsOjpBcnJheUNvbnN0cnVjdG9yXSA9IGFycmF5Q29uc3Ry
dWN0b3I7CiAKICAgICBpZiAobV9leHBlcmltZW50c0VuYWJsZWQpIHsKLSAgICAgICAgTmFtZVBy
b3RvdHlwZSogcHJpdmF0ZU5hbWVQcm90b3R5cGUgPSBOYW1lUHJvdG90eXBlOjpjcmVhdGUoZXhl
YywgTmFtZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKLSAgICAgICAgbV9wcml2YXRlTmFtZVN0cnVj
dHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOYW1lSW5zdGFuY2U6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHByaXZhdGVOYW1lUHJvdG90eXBlKSk7
CisgICAgICAgIE5hbWVQcm90b3R5cGUqIHByaXZhdGVOYW1lUHJvdG90eXBlID0gTmFtZVByb3Rv
dHlwZTo6Y3JlYXRlKGV4ZWMsIE5hbWVQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52
bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOworICAgICAgICBtX3ByaXZhdGVO
YW1lU3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBOYW1lSW5zdGFuY2U6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBwcml2YXRlTmFtZVByb3RvdHlwZSkpOwogCi0gICAg
ICAgIEpTQ2VsbCogcHJpdmF0ZU5hbWVDb25zdHJ1Y3RvciA9IE5hbWVDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlKGV4ZWMsIHRoaXMsIE5hbWVDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIHByaXZhdGVOYW1l
UHJvdG90eXBlKTsKLSAgICAgICAgcHJpdmF0ZU5hbWVQcm90b3R5cGUtPnB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNv
bnN0cnVjdG9yLCBwcml2YXRlTmFtZUNvbnN0cnVjdG9yLCBEb250RW51bSk7Ci0gICAgICAgIHB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihl
eGVjLCAiTmFtZSIpLCBwcml2YXRlTmFtZUNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgICAg
IEpTQ2VsbCogcHJpdmF0ZU5hbWVDb25zdHJ1Y3RvciA9IE5hbWVDb25zdHJ1Y3Rvcjo6Y3JlYXRl
KGV4ZWMsIHRoaXMsIE5hbWVDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCks
IHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBwcml2YXRlTmFtZVByb3RvdHlwZSk7
CisgICAgICAgIHByaXZhdGVOYW1lUHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHByaXZhdGVO
YW1lQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiTmFtZSIpLCBwcml2YXRlTmFtZUNv
bnN0cnVjdG9yLCBEb250RW51bSk7CiAgICAgfQogCi0gICAgcmVzZXRQcm90b3R5cGUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBwcm90b3R5cGUpOworICAgIHJlc2V0UHJvdG90eXBlKGV4ZWMtPnZtKCks
IHByb3RvdHlwZSk7CiB9CiAKIC8vIFByaXZhdGUgbmFtZXNwYWNlIGZvciBoZWxwZXJzIGZvciBK
U0dsb2JhbE9iamVjdDo6aGF2ZUFCYWRUaW1lKCkKQEAgLTQwNSw5ICs0MDUsOSBAQCB2b2lkIE9i
amVjdHNXaXRoQnJva2VuSW5kZXhpbmdGaW5kZXI6Om9wCiAKIH0gLy8gZW5kIHByaXZhdGUgbmFt
ZXNwYWNlIGZvciBoZWxwZXJzIGZvciBKU0dsb2JhbE9iamVjdDo6aGF2ZUFCYWRUaW1lKCkKIAot
dm9pZCBKU0dsb2JhbE9iamVjdDo6aGF2ZUFCYWRUaW1lKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKK3ZvaWQgSlNHbG9iYWxPYmplY3Q6OmhhdmVBQmFkVGltZShWTSYgdm0pCiB7Ci0gICAgQVNT
RVJUKCZnbG9iYWxEYXRhID09ICZ0aGlzLT5nbG9iYWxEYXRhKCkpOworICAgIEFTU0VSVCgmdm0g
PT0gJnRoaXMtPnZtKCkpOwogICAgIAogICAgIGlmIChpc0hhdmluZ0FCYWRUaW1lKCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTQyMSwxOCArNDIxLDE4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6Omhh
dmVBQmFkVGltZShKU0dsb2IKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbGwgSlNBcnJheSBhbGxv
Y2F0aW9ucyB0aGF0IGxvYWQgdGhlIGFwcHJvcHJpYXRlIHN0cnVjdHVyZSBmcm9tCiAgICAgLy8g
dGhpcyBvYmplY3Qgbm93IGxvYWQgYSBzdHJ1Y3R1cmUgdGhhdCB1c2VzIFNsb3dQdXQuCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE51bWJlck9mSW5kZXhpbmdTaGFwZXM7ICsraSkKLSAg
ICAgICAgbV9hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nU2hhcGVEdXJpbmdBbGxvY2F0aW9uW2ld
LnNldChnbG9iYWxEYXRhLCB0aGlzLCBvcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdU
eXBlKEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpKTsKKyAgICAgICAgbV9hcnJheVN0cnVj
dHVyZUZvckluZGV4aW5nU2hhcGVEdXJpbmdBbGxvY2F0aW9uW2ldLnNldCh2bSwgdGhpcywgb3Jp
Z2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZShBcnJheVdpdGhTbG93UHV0QXJyYXlT
dG9yYWdlKSk7CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYWxsIG9iamVjdHMgdGhhdCBo
YXZlIGluZGV4ZWQgc3RvcmFnZSBzd2l0Y2ggdG8gdGhlIHNsb3cga2luZCBvZgogICAgIC8vIGlu
ZGV4ZWQgc3RvcmFnZS4KICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBmb3VuZE9iamVjdHM7IC8v
IFVzZSBNYXJrZWRBcmd1bWVudEJ1ZmZlciBiZWNhdXNlIHN3aXRjaFRvU2xvd1B1dEFycmF5U3Rv
cmFnZSgpIG1heSBHQy4KICAgICBPYmplY3RzV2l0aEJyb2tlbkluZGV4aW5nRmluZGVyIGZpbmRl
cihmb3VuZE9iamVjdHMsIHRoaXMpOwotICAgIGdsb2JhbERhdGEuaGVhcC5vYmplY3RTcGFjZSgp
LmZvckVhY2hMaXZlQ2VsbChmaW5kZXIpOworICAgIHZtLmhlYXAub2JqZWN0U3BhY2UoKS5mb3JF
YWNoTGl2ZUNlbGwoZmluZGVyKTsKICAgICB3aGlsZSAoIWZvdW5kT2JqZWN0cy5pc0VtcHR5KCkp
IHsKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGZvdW5kT2JqZWN0cy5sYXN0
KCkpOwogICAgICAgICBmb3VuZE9iamVjdHMucmVtb3ZlTGFzdCgpOwogICAgICAgICBBU1NFUlQo
aGFzQnJva2VuSW5kZXhpbmcob2JqZWN0KSk7Ci0gICAgICAgIG9iamVjdC0+c3dpdGNoVG9TbG93
UHV0QXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOworICAgICAgICBvYmplY3QtPnN3aXRjaFRvU2xv
d1B1dEFycmF5U3RvcmFnZSh2bSk7CiAgICAgfQogfQogCkBAIC00NDgsMjAgKzQ0OCwyMCBAQCB2
b2lkIEpTR2xvYmFsT2JqZWN0OjpjcmVhdGVUaHJvd1R5cGVFcnJvCiB7CiAgICAgSlNGdW5jdGlv
biogdGhyb3dlciA9IEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCB0aGlzLCAwLCBTdHJpbmcoKSwg
Z2xvYmFsRnVuY1Rocm93VHlwZUVycm9yKTsKICAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRl
ciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKGV4ZWMpOwotICAgIGdldHRlclNldHRlci0+c2V0R2V0
dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhyb3dlcik7Ci0gICAgZ2V0dGVyU2V0dGVyLT5zZXRT
ZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aHJvd2VyKTsKLSAgICBtX3Rocm93VHlwZUVycm9y
R2V0dGVyU2V0dGVyLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGdldHRlclNldHRlcik7
CisgICAgZ2V0dGVyU2V0dGVyLT5zZXRHZXR0ZXIoZXhlYy0+dm0oKSwgdGhyb3dlcik7CisgICAg
Z2V0dGVyU2V0dGVyLT5zZXRTZXR0ZXIoZXhlYy0+dm0oKSwgdGhyb3dlcik7CisgICAgbV90aHJv
d1R5cGVFcnJvckdldHRlclNldHRlci5zZXQoZXhlYy0+dm0oKSwgdGhpcywgZ2V0dGVyU2V0dGVy
KTsKIH0KIAogLy8gU2V0IHByb3RvdHlwZSwgYW5kIGFsc28gaW5zZXJ0IHRoZSBvYmplY3QgcHJv
dG90eXBlIGF0IHRoZSBlbmQgb2YgdGhlIGNoYWluLgotdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVz
ZXRQcm90b3R5cGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkK
K3ZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0UHJvdG90eXBlKFZNJiB2bSwgSlNWYWx1ZSBwcm90
b3R5cGUpCiB7Ci0gICAgc2V0UHJvdG90eXBlKGdsb2JhbERhdGEsIHByb3RvdHlwZSk7CisgICAg
c2V0UHJvdG90eXBlKHZtLCBwcm90b3R5cGUpOwogCiAgICAgSlNPYmplY3QqIG9sZExhc3RJblBy
b3RvdHlwZUNoYWluID0gbGFzdEluUHJvdG90eXBlQ2hhaW4odGhpcyk7CiAgICAgSlNPYmplY3Qq
IG9iamVjdFByb3RvdHlwZSA9IG1fb2JqZWN0UHJvdG90eXBlLmdldCgpOwogICAgIGlmIChvbGRM
YXN0SW5Qcm90b3R5cGVDaGFpbiAhPSBvYmplY3RQcm90b3R5cGUpCi0gICAgICAgIG9sZExhc3RJ
blByb3RvdHlwZUNoYWluLT5zZXRQcm90b3R5cGUoZ2xvYmFsRGF0YSwgb2JqZWN0UHJvdG90eXBl
KTsKKyAgICAgICAgb2xkTGFzdEluUHJvdG90eXBlQ2hhaW4tPnNldFByb3RvdHlwZSh2bSwgb2Jq
ZWN0UHJvdG90eXBlKTsKIH0KIAogdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtNTUwLDcgKzU1MCw3IEBAIHZv
aWQgSlNHbG9iYWxPYmplY3Q6OmFkZFN0YXRpY0dsb2JhbHMoR2wKICAgICAgICAgaW50IGluZGV4
ID0gc3ltYm9sVGFibGUoKS0+c2l6ZSgpOwogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IG5ld0Vu
dHJ5KGluZGV4LCBnbG9iYWwuYXR0cmlidXRlcyk7CiAgICAgICAgIHN5bWJvbFRhYmxlKCktPmFk
ZChnbG9iYWwuaWRlbnRpZmllci5pbXBsKCksIG5ld0VudHJ5KTsKLSAgICAgICAgcmVnaXN0ZXJB
dChpbmRleCkuc2V0KGdsb2JhbERhdGEoKSwgdGhpcywgZ2xvYmFsLnZhbHVlKTsKKyAgICAgICAg
cmVnaXN0ZXJBdChpbmRleCkuc2V0KHZtKCksIHRoaXMsIGdsb2JhbC52YWx1ZSk7CiAgICAgfQog
fQogCkBAIC01NzUsMjQgKzU3NSwyNCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpjbGVhclJhcmVE
YXRhKEpTQ2VsCiAgICAganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oY2VsbCktPm1fcmFyZURhdGEu
Y2xlYXIoKTsKIH0KIAotRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlOjpEeW5hbWljR2xvYmFsT2Jq
ZWN0U2NvcGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZHluYW1p
Y0dsb2JhbE9iamVjdCkKLSAgICA6IG1fZHluYW1pY0dsb2JhbE9iamVjdFNsb3QoZ2xvYmFsRGF0
YS5keW5hbWljR2xvYmFsT2JqZWN0KQorRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlOjpEeW5hbWlj
R2xvYmFsT2JqZWN0U2NvcGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZHluYW1pY0dsb2JhbE9i
amVjdCkKKyAgICA6IG1fZHluYW1pY0dsb2JhbE9iamVjdFNsb3Qodm0uZHluYW1pY0dsb2JhbE9i
amVjdCkKICAgICAsIG1fc2F2ZWREeW5hbWljR2xvYmFsT2JqZWN0KG1fZHluYW1pY0dsb2JhbE9i
amVjdFNsb3QpCiB7CiAgICAgaWYgKCFtX2R5bmFtaWNHbG9iYWxPYmplY3RTbG90KSB7CiAjaWYg
RU5BQkxFKEFTU0VNQkxFUikKICAgICAgICAgaWYgKEV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVy
TWVtb3J5UHJlc3N1cmUoKSkKLSAgICAgICAgICAgIGdsb2JhbERhdGEuaGVhcC5kZWxldGVBbGxD
b21waWxlZENvZGUoKTsKKyAgICAgICAgICAgIHZtLmhlYXAuZGVsZXRlQWxsQ29tcGlsZWRDb2Rl
KCk7CiAjZW5kaWYKIAogICAgICAgICBtX2R5bmFtaWNHbG9iYWxPYmplY3RTbG90ID0gZHluYW1p
Y0dsb2JhbE9iamVjdDsKIAogICAgICAgICAvLyBSZXNldCB0aGUgZGF0ZSBjYWNoZSBiZXR3ZWVu
IEpTIGludm9jYXRpb25zIHRvIGZvcmNlIHRoZSBWTQogICAgICAgICAvLyB0byBvYnNlcnZlIHRp
bWUgem9uZSBjaGFuZ2VzLgotICAgICAgICBnbG9iYWxEYXRhLnJlc2V0RGF0ZUNhY2hlKCk7Cisg
ICAgICAgIHZtLnJlc2V0RGF0ZUNhY2hlKCk7CiAgICAgfQogICAgIC8vIENsZWFyIHRoZSBleGNl
cHRpb24gc3RhY2sgYmV0d2VlbiBlbnRyaWVzCi0gICAgZ2xvYmFsRGF0YS5leGNlcHRpb25TdGFj
ayA9IFJlZkNvdW50ZWRBcnJheTxTdGFja0ZyYW1lPigpOworICAgIHZtLmV4Y2VwdGlvblN0YWNr
ID0gUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+KCk7CiB9CiAKIHZvaWQgc2xvd1ZhbGlkYXRl
Q2VsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpAQCAtNjA3LDcgKzYwNyw3IEBAIFVu
bGlua2VkUHJvZ3JhbUNvZGVCbG9jayogSlNHbG9iYWxPYmplY3QKICAgICBKU1BhcnNlclN0cmlj
dG5lc3Mgc3RyaWN0bmVzcyA9IGV4ZWN1dGFibGUtPmlzU3RyaWN0TW9kZSgpID8gSlNQYXJzZVN0
cmljdCA6IEpTUGFyc2VOb3JtYWw7CiAgICAgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSA9IGhh
c0RlYnVnZ2VyKCkgPyBEZWJ1Z2dlck9uIDogRGVidWdnZXJPZmY7CiAgICAgUHJvZmlsZXJNb2Rl
IHByb2ZpbGVyTW9kZSA9IGhhc1Byb2ZpbGVyKCkgPyBQcm9maWxlck9uIDogUHJvZmlsZXJPZmY7
Ci0gICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGUgPSBnbG9iYWxEYXRh
KCkuY29kZUNhY2hlKCktPmdldFByb2dyYW1Db2RlQmxvY2soZ2xvYmFsRGF0YSgpLCBleGVjdXRh
YmxlLCBleGVjdXRhYmxlLT5zb3VyY2UoKSwgc3RyaWN0bmVzcywgZGVidWdnZXJNb2RlLCBwcm9m
aWxlck1vZGUsIGVycm9yKTsKKyAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHVubGlua2Vk
Q29kZSA9IHZtKCkuY29kZUNhY2hlKCktPmdldFByb2dyYW1Db2RlQmxvY2sodm0oKSwgZXhlY3V0
YWJsZSwgZXhlY3V0YWJsZS0+c291cmNlKCksIHN0cmljdG5lc3MsIGRlYnVnZ2VyTW9kZSwgcHJv
ZmlsZXJNb2RlLCBlcnJvcik7CiAKICAgICBpZiAoaGFzRGVidWdnZXIoKSkKICAgICAgICAgZGVi
dWdnZXIoKS0+c291cmNlUGFyc2VkKGNhbGxGcmFtZSwgZXhlY3V0YWJsZS0+c291cmNlKCkucHJv
dmlkZXIoKSwgZXJyb3IubV9saW5lLCBlcnJvci5tX21lc3NhZ2UpOwpAQCAtNjI2LDcgKzYyNiw3
IEBAIFVubGlua2VkRXZhbENvZGVCbG9jayogSlNHbG9iYWxPYmplY3Q6OmMKICAgICBKU1BhcnNl
clN0cmljdG5lc3Mgc3RyaWN0bmVzcyA9IGV4ZWN1dGFibGUtPmlzU3RyaWN0TW9kZSgpID8gSlNQ
YXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWw7CiAgICAgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9k
ZSA9IGhhc0RlYnVnZ2VyKCkgPyBEZWJ1Z2dlck9uIDogRGVidWdnZXJPZmY7CiAgICAgUHJvZmls
ZXJNb2RlIHByb2ZpbGVyTW9kZSA9IGhhc1Byb2ZpbGVyKCkgPyBQcm9maWxlck9uIDogUHJvZmls
ZXJPZmY7Ci0gICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtlZENvZGUgPSBnbG9iYWxE
YXRhKCkuY29kZUNhY2hlKCktPmdldEV2YWxDb2RlQmxvY2soZ2xvYmFsRGF0YSgpLCBzY29wZSwg
ZXhlY3V0YWJsZSwgZXhlY3V0YWJsZS0+c291cmNlKCksIHN0cmljdG5lc3MsIGRlYnVnZ2VyTW9k
ZSwgcHJvZmlsZXJNb2RlLCBlcnJvcik7CisgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxp
bmtlZENvZGUgPSB2bSgpLmNvZGVDYWNoZSgpLT5nZXRFdmFsQ29kZUJsb2NrKHZtKCksIHNjb3Bl
LCBleGVjdXRhYmxlLCBleGVjdXRhYmxlLT5zb3VyY2UoKSwgc3RyaWN0bmVzcywgZGVidWdnZXJN
b2RlLCBwcm9maWxlck1vZGUsIGVycm9yKTsKIAogICAgIGlmIChoYXNEZWJ1Z2dlcigpKQogICAg
ICAgICBkZWJ1Z2dlcigpLT5zb3VyY2VQYXJzZWQoY2FsbEZyYW1lLCBleGVjdXRhYmxlLT5zb3Vy
Y2UoKS5wcm92aWRlcigpLCBlcnJvci5tX2xpbmUsIGVycm9yLm1fbWVzc2FnZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlz
aW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJBcnJheUFs
bG9jYXRpb25Qcm9maWxlLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQ2xh
c3NSZWYuaCIKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJWTS5oIgogI2lu
Y2x1ZGUgIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU1dlYWtPYmpl
Y3RNYXBSZWZJbnRlcm5hbC5oIgogI2luY2x1ZGUgIk51bWJlclByb3RvdHlwZS5oIgpAQCAtMTk1
LDExICsxOTUsMTEgQEAgcHJvdGVjdGVkOgogcHVibGljOgogICAgIHR5cGVkZWYgSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTR2xvYmFsT2JqZWN0KiBjcmVh
dGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBz
dGF0aWMgSlNHbG9iYWxPYmplY3QqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
KQogICAgIHsKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2xvYmFsT2JqZWN0PihnbG9iYWxEYXRhLmhlYXApKSBKU0ds
b2JhbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAgICAgICBnbG9iYWxPYmplY3Qt
PmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICBnbG9iYWxEYXRhLmhlYXAuYWRk
RmluYWxpemVyKGdsb2JhbE9iamVjdCwgZGVzdHJveSk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dsb2JhbE9iamVj
dD4odm0uaGVhcCkpIEpTR2xvYmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpOworICAgICAgICBnbG9i
YWxPYmplY3QtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgdm0uaGVhcC5hZGRGaW5hbGl6
ZXIoZ2xvYmFsT2JqZWN0LCBkZXN0cm95KTsKICAgICAgICAgcmV0dXJuIGdsb2JhbE9iamVjdDsK
ICAgICB9CiAKQEAgLTIwOSwyMCArMjA5LDIwIEBAIHB1YmxpYzoKICAgICBib29sIGhhc1Byb2Zp
bGVyKCkgY29uc3QgeyByZXR1cm4gZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+c3VwcG9ydHNQ
cm9maWxpbmcodGhpcyk7IH0KIAogcHJvdGVjdGVkOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIGV4
cGxpY2l0IEpTR2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIGNvbnN0IEds
b2JhbE9iamVjdE1ldGhvZFRhYmxlKiA9IDApOworICAgIEpTX0VYUE9SVF9QUklWQVRFIGV4cGxp
Y2l0IEpTR2xvYmFsT2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgY29uc3QgR2xvYmFsT2JqZWN0TWV0
aG9kVGFibGUqID0gMCk7CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICB7Ci0gICAg
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICBzdHJ1Y3R1cmUo
KS0+c2V0R2xvYmFsT2JqZWN0KGdsb2JhbERhdGEsIHRoaXMpOworICAgICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CisgICAgICAgIHN0cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3Qodm0s
IHRoaXMpOwogICAgICAgICBtX2V4cGVyaW1lbnRzRW5hYmxlZCA9IG1fZ2xvYmFsT2JqZWN0TWV0
aG9kVGFibGUtPmphdmFTY3JpcHRFeHBlcmltZW50c0VuYWJsZWQodGhpcyk7CiAgICAgICAgIGlu
aXQodGhpcyk7CiAgICAgfQogCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTT2JqZWN0KiB0aGlzVmFsdWUpCisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYgdm0sIEpTT2JqZWN0KiB0aGlzVmFsdWUpCiAgICAgewotICAgICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICAgICAgc3RydWN0dXJlKCktPnNldEdsb2JhbE9i
amVjdChnbG9iYWxEYXRhLCB0aGlzKTsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OworICAgICAgICBzdHJ1Y3R1cmUoKS0+c2V0R2xvYmFsT2JqZWN0KHZtLCB0aGlzKTsKICAgICAg
ICAgbV9leHBlcmltZW50c0VuYWJsZWQgPSBtX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlLT5qYXZh
U2NyaXB0RXhwZXJpbWVudHNFbmFibGVkKHRoaXMpOwogICAgICAgICBpbml0KHRoaXNWYWx1ZSk7
CiAgICAgfQpAQCAtMzQ0LDcgKzM0NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1faGF2
aW5nQUJhZFRpbWVXYXRjaHBvaW50LT5oYXNCZWVuSW52YWxpZGF0ZWQoKTsKICAgICB9CiAgICAg
ICAgIAotICAgIHZvaWQgaGF2ZUFCYWRUaW1lKEpTR2xvYmFsRGF0YSYpOworICAgIHZvaWQgaGF2
ZUFCYWRUaW1lKFZNJik7CiAgICAgICAgIAogICAgIGJvb2wgYXJyYXlQcm90b3R5cGVDaGFpbklz
U2FuZSgpOwogCkBAIC0zODAsMTQgKzM4MCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIG1fZXZhbERp
c2FibGVkRXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlOwogICAgIH0KIAotICAgIHZvaWQgcmVz
ZXRQcm90b3R5cGUoSlNHbG9iYWxEYXRhJiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgIHZvaWQg
cmVzZXRQcm90b3R5cGUoVk0mLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKLSAgICBKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEoKSBjb25zdCB7IHJldHVybiAqSGVhcDo6aGVhcCh0aGlzKS0+Z2xvYmFs
RGF0YSgpOyB9CisgICAgVk0mIHZtKCkgY29uc3QgeyByZXR1cm4gKkhlYXA6OmhlYXAodGhpcykt
PnZtKCk7IH0KICAgICBKU09iamVjdCogZ2xvYmFsVGhpcygpIGNvbnN0OwogCi0gICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUoZ2xvYmFsRGF0YSwgMCwgcHJvdG90eXBlLCBUeXBlSW5mbyhHbG9iYWxPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIDAsIHByb3RvdHlwZSwgVHlwZUluZm8oR2xvYmFsT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICB2b2lkIHJlZ2lzdGVyV2Vha01h
cChPcGFxdWVKU1dlYWtPYmplY3RNYXAqIG1hcCkKQEAgLTQzNCw3ICs0MzQsNyBAQCBwcm90ZWN0
ZWQ6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNDOjpKU09iamVjdCogdG9UaGlz
T2JqZWN0KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqKTsKIAotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgc2V0R2xvYmFsVGhpcyhKU0dsb2JhbERhdGEmLCBKU09iamVjdCogZ2xvYmFs
VGhpcyk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRHbG9iYWxUaGlzKFZNJiwgSlNP
YmplY3QqIGdsb2JhbFRoaXMpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7CkBAIC00NzgsMTMgKzQ3OCwxMyBAQCBpbmxpbmUgSlNHbG9iYWxPYmpl
Y3QqIEV4ZWNTdGF0ZTo6ZHluYW1pCiAKICAgICAvLyBGb3IgYW55IEV4ZWNTdGF0ZSB0aGF0J3Mg
bm90IGEgZ2xvYmFsRXhlYywgdGhlIAogICAgIC8vIGR5bmFtaWMgZ2xvYmFsIG9iamVjdCBtdXN0
IGJlIHNldCBzaW5jZSBjb2RlIGlzIHJ1bm5pbmcKLSAgICBBU1NFUlQoZ2xvYmFsRGF0YSgpLmR5
bmFtaWNHbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBnbG9iYWxEYXRhKCkuZHluYW1pY0dsb2Jh
bE9iamVjdDsKKyAgICBBU1NFUlQodm0oKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1
cm4gdm0oKS5keW5hbWljR2xvYmFsT2JqZWN0OwogfQogCiBpbmxpbmUgSlNBcnJheSogY29uc3Ry
dWN0RW1wdHlBcnJheShFeGVjU3RhdGUqIGV4ZWMsIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqIHBy
b2ZpbGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGluaXRpYWxMZW5n
dGggPSAwKQogewotICAgIHJldHVybiBBcnJheUFsbG9jYXRpb25Qcm9maWxlOjp1cGRhdGVMYXN0
QWxsb2NhdGlvbkZvcihwcm9maWxlLCBKU0FycmF5OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBpbml0aWFsTGVuZ3RoID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggPyBnbG9iYWxPYmplY3Qt
PmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhB
cnJheVN0b3JhZ2UpIDogZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvclByb2ZpbGVEdXJp
bmdBbGxvY2F0aW9uKHByb2ZpbGUpLCBpbml0aWFsTGVuZ3RoKSk7CisgICAgcmV0dXJuIEFycmF5
QWxsb2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RBbGxvY2F0aW9uRm9yKHByb2ZpbGUsIEpTQXJy
YXk6OmNyZWF0ZShleGVjLT52bSgpLCBpbml0aWFsTGVuZ3RoID49IE1JTl9TUEFSU0VfQVJSQVlf
SU5ERVggPyBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5n
QWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpIDogZ2xvYmFsT2JqZWN0LT5hcnJheVN0
cnVjdHVyZUZvclByb2ZpbGVEdXJpbmdBbGxvY2F0aW9uKHByb2ZpbGUpLCBpbml0aWFsTGVuZ3Ro
KSk7CiB9CiAKIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSog
ZXhlYywgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSwgdW5zaWduZWQgaW5pdGlhbExl
bmd0aCA9IDApCkBAIC01MTUsNyArNTE1LDcgQEAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFy
cmF5KEV4ZWNTdGF0ZQogY2xhc3MgRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUpOwogcHVibGljOgotICAg
IEpTX0VYUE9SVF9QUklWQVRFIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZShKU0dsb2JhbERhdGEm
LCBKU0dsb2JhbE9iamVjdCopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIER5bmFtaWNHbG9iYWxP
YmplY3RTY29wZShWTSYsIEpTR2xvYmFsT2JqZWN0Kik7CiAKICAgICB+RHluYW1pY0dsb2JhbE9i
amVjdFNjb3BlKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAxNDg2
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczNiw3ICs3MzYsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQCiAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc0V4dGVu
c2libGUoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJy
b3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKSk7CiAKLSAgICBp
ZiAoIXRoaXNPYmplY3QtPnNldFByb3RvdHlwZVdpdGhDeWNsZUNoZWNrKGV4ZWMtPmdsb2JhbERh
dGEoKSwgdmFsdWUpKQorICAgIGlmICghdGhpc09iamVjdC0+c2V0UHJvdG90eXBlV2l0aEN5Y2xl
Q2hlY2soZXhlYy0+dm0oKSwgdmFsdWUpKQogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0
ZUVycm9yKGV4ZWMsICJjeWNsaWMgX19wcm90b19fIHZhbHVlIikpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTG9jay5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDQwICs1MSw0
MCBAQCB2b2lkIEdsb2JhbEpTTG9jazo6aW5pdGlhbGl6ZSgpCiB9CiAKIEpTTG9ja0hvbGRlcjo6
SlNMb2NrSG9sZGVyKEV4ZWNTdGF0ZSogZXhlYykKLSAgICA6IG1fZ2xvYmFsRGF0YSgmZXhlYy0+
Z2xvYmFsRGF0YSgpKQorICAgIDogbV92bSgmZXhlYy0+dm0oKSkKIHsKICAgICBpbml0KCk7CiB9
CiAKLUpTTG9ja0hvbGRlcjo6SlNMb2NrSG9sZGVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkK
LSAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xk
ZXIoVk0qIHZtKQorICAgIDogbV92bSh2bSkKIHsKICAgICBpbml0KCk7CiB9CiAKLUpTTG9ja0hv
bGRlcjo6SlNMb2NrSG9sZGVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLSAgICA6IG1fZ2xv
YmFsRGF0YSgmZ2xvYmFsRGF0YSkKK0pTTG9ja0hvbGRlcjo6SlNMb2NrSG9sZGVyKFZNJiB2bSkK
KyAgICA6IG1fdm0oJnZtKQogewogICAgIGluaXQoKTsKIH0KIAogdm9pZCBKU0xvY2tIb2xkZXI6
OmluaXQoKQogewotICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxvY2soKTsKKyAgICBtX3Zt
LT5hcGlMb2NrKCkubG9jaygpOwogfQogCiBKU0xvY2tIb2xkZXI6On5KU0xvY2tIb2xkZXIoKQog
ewotICAgIFJlZlB0cjxKU0xvY2s+IGFwaUxvY2soJm1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpKTsK
LSAgICBtX2dsb2JhbERhdGEuY2xlYXIoKTsKKyAgICBSZWZQdHI8SlNMb2NrPiBhcGlMb2NrKCZt
X3ZtLT5hcGlMb2NrKCkpOworICAgIG1fdm0uY2xlYXIoKTsKICAgICBhcGlMb2NrLT51bmxvY2so
KTsKIH0KIAotSlNMb2NrOjpKU0xvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorSlNMb2Nr
OjpKU0xvY2soVk0qIHZtKQogICAgIDogbV9vd25lclRocmVhZCgwKQogICAgICwgbV9sb2NrQ291
bnQoMCkKICAgICAsIG1fbG9ja0Ryb3BEZXB0aCgwKQotICAgICwgbV9nbG9iYWxEYXRhKGdsb2Jh
bERhdGEpCisgICAgLCBtX3ZtKHZtKQogewogICAgIG1fc3BpbkxvY2suSW5pdCgpOwogfQpAQCAt
OTMsMTAgKzkzLDEwIEBAIEpTTG9jazo6fkpTTG9jaygpCiB7CiB9CiAKLXZvaWQgSlNMb2NrOjp3
aWxsRGVzdHJveUdsb2JhbERhdGEoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQordm9pZCBKU0xv
Y2s6OndpbGxEZXN0cm95R2xvYmFsRGF0YShWTSogdm0pCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChn
bG9iYWxEYXRhLCBtX2dsb2JhbERhdGEgPT0gZ2xvYmFsRGF0YSk7Ci0gICAgbV9nbG9iYWxEYXRh
ID0gMDsKKyAgICBBU1NFUlRfVU5VU0VEKHZtLCBtX3ZtID09IHZtKTsKKyAgICBtX3ZtID0gMDsK
IH0KIAogdm9pZCBKU0xvY2s6OmxvY2soKQpAQCAtMTMzLDEyICsxMzMsMTIgQEAgdm9pZCBKU0xv
Y2s6OnVubG9jaygpCiAKIHZvaWQgSlNMb2NrOjpsb2NrKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBleGVjLT5nbG9iYWxEYXRhKCkuYXBpTG9jaygpLmxvY2soKTsKKyAgICBleGVjLT52bSgpLmFw
aUxvY2soKS5sb2NrKCk7CiB9CiAKIHZvaWQgSlNMb2NrOjp1bmxvY2soRXhlY1N0YXRlKiBleGVj
KQogewotICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5hcGlMb2NrKCkudW5sb2NrKCk7CisgICAgZXhl
Yy0+dm0oKS5hcGlMb2NrKCkudW5sb2NrKCk7CiB9CiAKIGJvb2wgSlNMb2NrOjpjdXJyZW50VGhy
ZWFkSXNIb2xkaW5nTG9jaygpCkBAIC0yMTUsMjEgKzIxNSwyMSBAQCB2b2lkIEpTTG9jazo6Z3Jh
YkFsbExvY2tzKHVuc2lnbmVkIGxvY2tDCiAKIEpTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxs
TG9ja3MoRXhlY1N0YXRlKiBleGVjKQogICAgIDogbV9sb2NrQ291bnQoMCkKLSAgICAsIG1fZ2xv
YmFsRGF0YSgmZXhlYy0+Z2xvYmFsRGF0YSgpKQorICAgICwgbV92bSgmZXhlYy0+dm0oKSkKIHsK
LSAgICBtX2xvY2tDb3VudCA9IG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmRyb3BBbGxMb2Nrcygp
OworICAgIG1fbG9ja0NvdW50ID0gbV92bS0+YXBpTG9jaygpLmRyb3BBbGxMb2NrcygpOwogfQog
Ci1KU0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFsbExvY2tzKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSkKK0pTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoVk0qIHZtKQogICAgIDog
bV9sb2NrQ291bnQoMCkKLSAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorICAgICwgbV92
bSh2bSkKIHsKLSAgICBtX2xvY2tDb3VudCA9IG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmRyb3BB
bGxMb2NrcygpOworICAgIG1fbG9ja0NvdW50ID0gbV92bS0+YXBpTG9jaygpLmRyb3BBbGxMb2Nr
cygpOwogfQogCiBKU0xvY2s6OkRyb3BBbGxMb2Nrczo6fkRyb3BBbGxMb2NrcygpCiB7Ci0gICAg
bV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuZ3JhYkFsbExvY2tzKG1fbG9ja0NvdW50KTsKKyAgICBt
X3ZtLT5hcGlMb2NrKCkuZ3JhYkFsbExvY2tzKG1fbG9ja0NvdW50KTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAkocmV2
aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDEwICs0OSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAv
LyB0aHJlYWQgYWNxdWlyZWQgaXQgdG8gYmVnaW4gd2l0aC4KIAogICAgIGNsYXNzIEV4ZWNTdGF0
ZTsKLSAgICBjbGFzcyBKU0dsb2JhbERhdGE7CisgICAgY2xhc3MgVk07CiAKICAgICAvLyBUaGlz
IGNsYXNzIGlzIHVzZWQgdG8gcHJvdGVjdCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGxlZ2Fj
eSBzaW5nbGUgCi0gICAgLy8gc2hhcmVkIEpTR2xvYmFsRGF0YS4KKyAgICAvLyBzaGFyZWQgVk0u
CiAgICAgY2xhc3MgR2xvYmFsSlNMb2NrIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
R2xvYmFsSlNMb2NrKTsKICAgICBwdWJsaWM6CkBAIC02NiwyMSArNjYsMjEgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICBjbGFzcyBKU0xvY2tIb2xkZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgSlNMb2NrSG9sZGVyKEpTR2xvYmFsRGF0YSopOwotICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIEpTTG9ja0hvbGRlcihWTSopOworICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBKU0xvY2tIb2xkZXIoVk0mKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNMb2Nr
SG9sZGVyKEV4ZWNTdGF0ZSopOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIH5KU0xvY2tI
b2xkZXIoKTsKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGluaXQoKTsKIAotICAgICAgICBS
ZWZQdHI8SlNHbG9iYWxEYXRhPiBtX2dsb2JhbERhdGE7CisgICAgICAgIFJlZlB0cjxWTT4gbV92
bTsKICAgICB9OwogCiAgICAgY2xhc3MgSlNMb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPEpTTG9jaz4gewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShKU0xvY2spOwogICAg
IHB1YmxpYzoKLSAgICAgICAgSlNMb2NrKEpTR2xvYmFsRGF0YSopOworICAgICAgICBKU0xvY2so
Vk0qKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTTG9jaygpOwogCiAgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgbG9jaygpOwpAQCAtODgsMTAgKzg4LDEwIEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyB2b2lkIGxvY2soRXhlY1N0YXRlKik7CiAgICAgICAg
IHN0YXRpYyB2b2lkIHVubG9jayhFeGVjU3RhdGUqKTsKLSAgICAgICAgc3RhdGljIHZvaWQgbG9j
ayhKU0dsb2JhbERhdGEmKTsKLSAgICAgICAgc3RhdGljIHZvaWQgdW5sb2NrKEpTR2xvYmFsRGF0
YSYpOworICAgICAgICBzdGF0aWMgdm9pZCBsb2NrKFZNJik7CisgICAgICAgIHN0YXRpYyB2b2lk
IHVubG9jayhWTSYpOwogCi0gICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpIHsgcmV0
dXJuIG1fZ2xvYmFsRGF0YTsgfQorICAgICAgICBWTSogdm0oKSB7IHJldHVybiBtX3ZtOyB9CiAK
ICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9j
aygpOwogCkBAIC05OSwxOCArOTksMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2ln
bmVkIGRyb3BBbGxMb2Nrc1VuY29uZGl0aW9uYWxseSgpOwogICAgICAgICB2b2lkIGdyYWJBbGxM
b2Nrcyh1bnNpZ25lZCBsb2NrQ291bnQpOwogCi0gICAgICAgIHZvaWQgd2lsbERlc3Ryb3lHbG9i
YWxEYXRhKEpTR2xvYmFsRGF0YSopOworICAgICAgICB2b2lkIHdpbGxEZXN0cm95R2xvYmFsRGF0
YShWTSopOwogCiAgICAgICAgIGNsYXNzIERyb3BBbGxMb2NrcyB7CiAgICAgICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShEcm9wQWxsTG9ja3MpOwogICAgICAgICBwdWJsaWM6CiAgICAgICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBEcm9wQWxsTG9ja3MoRXhlY1N0YXRlKiBleGVjKTsKLSAg
ICAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIERyb3BBbGxMb2NrcyhKU0dsb2JhbERhdGEqKTsK
KyAgICAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIERyb3BBbGxMb2NrcyhWTSopOwogICAgICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkRyb3BBbGxMb2NrcygpOwogICAgICAgICAgICAgCiAg
ICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICBpbnRwdHJfdCBtX2xvY2tDb3VudDsKLSAgICAg
ICAgICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IG1fZ2xvYmFsRGF0YTsKKyAgICAgICAgICAgIFJl
ZlB0cjxWTT4gbV92bTsKICAgICAgICAgfTsKIAogICAgIHByaXZhdGU6CkBAIC0xMTksNyArMTE5
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFRocmVhZElkZW50aWZpZXIgbV9vd25lclRo
cmVhZDsKICAgICAgICAgaW50cHRyX3QgbV9sb2NrQ291bnQ7CiAgICAgICAgIHVuc2lnbmVkIG1f
bG9ja0Ryb3BEZXB0aDsKLSAgICAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CisgICAg
ICAgIFZNKiBtX3ZtOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmgJKHJldmlzaW9uIDE0ODY1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU2LDE1ICs1NiwxNSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CiAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShn
bG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhOYW1lU2NvcGVPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyB9CisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90bykgeyByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG8sIFR5cGVJbmZvKE5hbWVTY29wZU9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7IH0KIAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCiBwcm90ZWN0
ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50aWZpZXIsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAg
ICAgewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOwot
ICAgICAgICBtX3JlZ2lzdGVyU3RvcmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFs
dWUpOworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKKyAgICAgICAg
bV9yZWdpc3RlclN0b3JlLnNldChleGVjLT52bSgpLCB0aGlzLCB2YWx1ZSk7CiAgICAgICAgIHN5
bWJvbFRhYmxlKCktPmFkZChpZGVudGlmaWVyLmltcGwoKSwgU3ltYm9sVGFibGVFbnRyeSgtMSwg
YXR0cmlidXRlcykpOwogICAgIH0KIApAQCAtNzMsNyArNzMsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2
YXRlOgogICAgIEpTTmFtZVNjb3BlKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogbmV4dCkKICAg
ICAgICAgOiBCYXNlKAotICAgICAgICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLAorICAgICAgICAg
ICAgZXhlYy0+dm0oKSwKICAgICAgICAgICAgIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
bmFtZVNjb3BlU3RydWN0dXJlKCksCiAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PFJlZ2lz
dGVyKj4oJm1fcmVnaXN0ZXJTdG9yZSArIDEpLAogICAgICAgICAgICAgbmV4dApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3QuaAkocmV2aXNpb24g
MTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNs
YXNzIEpTTm90QW5PYmplY3QgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgcHJpdmF0
ZToKICAgICAgICAgSlNOb3RBbk9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCi0gICAgICAgICAgICA6
IEpTTm9uRmluYWxPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRhKCku
bm90QW5PYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgICAgICA6IEpTTm9uRmluYWxPYmpl
Y3QoZXhlYy0+dm0oKSwgZXhlYy0+dm0oKS5ub3RBbk9iamVjdFN0cnVjdHVyZS5nZXQoKSkKICAg
ICAgICAgewogICAgICAgICB9CiAgICAgICAgIApAQCAtNDksMTMgKzQ5LDEzIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBzdGF0aWMgSlNOb3RBbk9iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSog
ZXhlYykKICAgICAgICAgewogICAgICAgICAgICAgSlNOb3RBbk9iamVjdCogb2JqZWN0ID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNOb3RBbk9iamVjdD4oKmV4ZWMtPmhlYXAoKSkpIEpT
Tm90QW5PYmplY3QoZXhlYyk7Ci0gICAgICAgICAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKGV4
ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgICAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKGV4
ZWMtPnZtKCkpOwogICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICAgICAgfQogCi0gICAg
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQor
ICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZv
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJ
KHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05P
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMyArNTUsMTMgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNPTgogbmFtZXNwYWNlIEpTQyB7CiAKIEpTT05PYmpl
Y3Q6OkpTT05PYmplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCi0gICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0
YSgpLCBzdHJ1Y3R1cmUpCisgICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+dm0o
KSwgc3RydWN0dXJlKQogewogfQogCiB2b2lkIEpTT05PYmplY3Q6OmZpbmlzaENyZWF0aW9uKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGds
b2JhbE9iamVjdC0+dm0oKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIH0KIApA
QCAtOTAsNyArOTAsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGNsYXNzIEhvbGRlciB7CiAg
ICAgcHVibGljOgotICAgICAgICBIb2xkZXIoSlNHbG9iYWxEYXRhJiwgSlNPYmplY3QqKTsKKyAg
ICAgICAgSG9sZGVyKFZNJiwgSlNPYmplY3QqKTsKIAogICAgICAgICBKU09iamVjdCogb2JqZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3QuZ2V0KCk7IH0KIApAQCAtMjE3LDcgKzIxNyw3IEBA
IFN0cmluZ2lmaWVyOjpTdHJpbmdpZmllcihFeGVjU3RhdGUqIGV4ZWMKICAgICBpZiAobV9yZXBs
YWNlci5hc09iamVjdCgpLT5pbmhlcml0cygmSlNBcnJheTo6c19pbmZvKSkgewogICAgICAgICBt
X3VzaW5nQXJyYXlSZXBsYWNlciA9IHRydWU7CiAgICAgICAgIEhhbmRsZTxKU09iamVjdD4gYXJy
YXkgPSBtX3JlcGxhY2VyLmFzT2JqZWN0KCk7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFy
cmF5LT5nZXQoZXhlYywgZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCku
dG9VSW50MzIoZXhlYyk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5nZXQoZXhl
YywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAg
IEpTVmFsdWUgbmFtZSA9IGFycmF5LT5nZXQoZXhlYywgaSk7CiAgICAgICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCkBAIC0yNDAsMTggKzI0MCwxOCBAQCBMb2NhbDxVbmtub3duPiBT
dHJpbmdpZmllcjo6c3RyaW5naWZ5KEhhCiB7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGNvbnN0
cnVjdEVtcHR5T2JqZWN0KG1fZXhlYyk7CiAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkp
Ci0gICAgICAgIHJldHVybiBMb2NhbDxVbmtub3duPihtX2V4ZWMtPmdsb2JhbERhdGEoKSwganNO
dWxsKCkpOworICAgICAgICByZXR1cm4gTG9jYWw8VW5rbm93bj4obV9leGVjLT52bSgpLCBqc051
bGwoKSk7CiAKLSAgICBQcm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGwgZW1wdHlQcm9wZXJ0eU5h
bWUobV9leGVjLT5nbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyKTsK
LSAgICBvYmplY3QtPnB1dERpcmVjdChtX2V4ZWMtPmdsb2JhbERhdGEoKSwgbV9leGVjLT5nbG9i
YWxEYXRhKCkucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyLCB2YWx1ZS5nZXQoKSk7Cisg
ICAgUHJvcGVydHlOYW1lRm9yRnVuY3Rpb25DYWxsIGVtcHR5UHJvcGVydHlOYW1lKG1fZXhlYy0+
dm0oKS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXIpOworICAgIG9iamVjdC0+cHV0RGly
ZWN0KG1fZXhlYy0+dm0oKSwgbV9leGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmVtcHR5SWRlbnRp
ZmllciwgdmFsdWUuZ2V0KCkpOwogCiAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAgICAgaWYg
KGFwcGVuZFN0cmluZ2lmaWVkVmFsdWUocmVzdWx0LCB2YWx1ZS5nZXQoKSwgb2JqZWN0LCBlbXB0
eVByb3BlcnR5TmFtZSkgIT0gU3RyaW5naWZ5U3VjY2VlZGVkKQotICAgICAgICByZXR1cm4gTG9j
YWw8VW5rbm93bj4obV9leGVjLT5nbG9iYWxEYXRhKCksIGpzVW5kZWZpbmVkKCkpOworICAgICAg
ICByZXR1cm4gTG9jYWw8VW5rbm93bj4obV9leGVjLT52bSgpLCBqc1VuZGVmaW5lZCgpKTsKICAg
ICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIExvY2FsPFVua25v
d24+KG1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc051bGwoKSk7CisgICAgICAgIHJldHVybiBMb2Nh
bDxVbmtub3duPihtX2V4ZWMtPnZtKCksIGpzTnVsbCgpKTsKIAotICAgIHJldHVybiBMb2NhbDxV
bmtub3duPihtX2V4ZWMtPmdsb2JhbERhdGEoKSwganNTdHJpbmcobV9leGVjLCByZXN1bHQudG9T
dHJpbmcoKSkpOworICAgIHJldHVybiBMb2NhbDxVbmtub3duPihtX2V4ZWMtPnZtKCksIGpzU3Ry
aW5nKG1fZXhlYywgcmVzdWx0LnRvU3RyaW5nKCkpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1l
IENoYXJUeXBlPgpAQCAtMzIwLDEwICszMjAsMTAgQEAgdm9pZCBTdHJpbmdpZmllcjo6YXBwZW5k
UXVvdGVkU3RyaW5nKFN0cgogaW5saW5lIEpTVmFsdWUgU3RyaW5naWZpZXI6OnRvSlNPTihKU1Zh
bHVlIHZhbHVlLCBjb25zdCBQcm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGwmIHByb3BlcnR5TmFt
ZSkKIHsKICAgICBBU1NFUlQoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwotICAgIGlmICghdmFs
dWUuaXNPYmplY3QoKSB8fCAhYXNPYmplY3QodmFsdWUpLT5oYXNQcm9wZXJ0eShtX2V4ZWMsIG1f
ZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPnRvSlNPTikpCisgICAgaWYgKCF2YWx1
ZS5pc09iamVjdCgpIHx8ICFhc09iamVjdCh2YWx1ZSktPmhhc1Byb3BlcnR5KG1fZXhlYywgbV9l
eGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPnRvSlNPTikpCiAgICAgICAgIHJldHVybiB2YWx1ZTsK
IAotICAgIEpTVmFsdWUgdG9KU09ORnVuY3Rpb24gPSBhc09iamVjdCh2YWx1ZSktPmdldChtX2V4
ZWMsIG1fZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPnRvSlNPTik7CisgICAgSlNW
YWx1ZSB0b0pTT05GdW5jdGlvbiA9IGFzT2JqZWN0KHZhbHVlKS0+Z2V0KG1fZXhlYywgbV9leGVj
LT52bSgpLnByb3BlcnR5TmFtZXMtPnRvSlNPTik7CiAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIApAQCAtNDE2LDcgKzQxNiw3IEBAIFN0
cmluZ2lmaWVyOjpTdHJpbmdpZnlSZXN1bHQgU3RyaW5naWZpZXIKICAgICAgICAgfQogICAgIH0K
ICAgICBib29sIGhvbGRlclN0YWNrV2FzRW1wdHkgPSBtX2hvbGRlclN0YWNrLmlzRW1wdHkoKTsK
LSAgICBtX2hvbGRlclN0YWNrLmFwcGVuZChIb2xkZXIobV9leGVjLT5nbG9iYWxEYXRhKCksIG9i
amVjdCkpOworICAgIG1faG9sZGVyU3RhY2suYXBwZW5kKEhvbGRlcihtX2V4ZWMtPnZtKCksIG9i
amVjdCkpOwogICAgIGlmICghaG9sZGVyU3RhY2tXYXNFbXB0eSkKICAgICAgICAgcmV0dXJuIFN0
cmluZ2lmeVN1Y2NlZWRlZDsKIApAQCAtNDU5LDggKzQ1OSw4IEBAIGlubGluZSB2b2lkIFN0cmlu
Z2lmaWVyOjpzdGFydE5ld0xpbmUoU3QKICAgICBidWlsZGVyLmFwcGVuZChtX2luZGVudCk7CiB9
CiAKLWlubGluZSBTdHJpbmdpZmllcjo6SG9sZGVyOjpIb2xkZXIoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU09iamVjdCogb2JqZWN0KQotICAgIDogbV9vYmplY3QoZ2xvYmFsRGF0YSwgb2Jq
ZWN0KQoraW5saW5lIFN0cmluZ2lmaWVyOjpIb2xkZXI6OkhvbGRlcihWTSYgdm0sIEpTT2JqZWN0
KiBvYmplY3QpCisgICAgOiBtX29iamVjdCh2bSwgb2JqZWN0KQogICAgICwgbV9pc0FycmF5KG9i
amVjdC0+aW5oZXJpdHMoJkpTQXJyYXk6OnNfaW5mbykpCiAgICAgLCBtX2luZGV4KDApCiAjaWZu
ZGVmIE5ERUJVRwpAQCAtNDc5LDcgKzQ3OSw3IEBAIGJvb2wgU3RyaW5naWZpZXI6OkhvbGRlcjo6
YXBwZW5kTmV4dFByb3AKICAgICBpZiAoIW1faW5kZXgpIHsKICAgICAgICAgaWYgKG1faXNBcnJh
eSkgewogICAgICAgICAgICAgbV9pc0pTQXJyYXkgPSBpc0pTQXJyYXkobV9vYmplY3QuZ2V0KCkp
OwotICAgICAgICAgICAgbV9zaXplID0gbV9vYmplY3QtPmdldChleGVjLCBleGVjLT5nbG9iYWxE
YXRhKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgICAg
IG1fc2l6ZSA9IG1fb2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgpLnRvVUludDMyKGV4ZWMpOwogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1snKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChzdHJpbmdpZmllci5tX3VzaW5nQXJy
YXlSZXBsYWNlcikKQEAgLTYwNCw3ICs2MDQsNyBAQCBjbGFzcyBXYWxrZXIgewogcHVibGljOgog
ICAgIFdhbGtlcihFeGVjU3RhdGUqIGV4ZWMsIEhhbmRsZTxKU09iamVjdD4gZnVuY3Rpb24sIENh
bGxUeXBlIGNhbGxUeXBlLCBDYWxsRGF0YSBjYWxsRGF0YSkKICAgICAgICAgOiBtX2V4ZWMoZXhl
YykKLSAgICAgICAgLCBtX2Z1bmN0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZnVuY3Rpb24pCisg
ICAgICAgICwgbV9mdW5jdGlvbihleGVjLT52bSgpLCBmdW5jdGlvbikKICAgICAgICAgLCBtX2Nh
bGxUeXBlKGNhbGxUeXBlKQogICAgICAgICAsIG1fY2FsbERhdGEoY2FsbERhdGEpCiAgICAgewpA
QCAtNjM1LDggKzYzNSw4IEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1Zh
bHUKIHsKICAgICBWZWN0b3I8UHJvcGVydHlOYW1lQXJyYXksIDE2LCBVbnNhZmVWZWN0b3JPdmVy
Zmxvdz4gcHJvcGVydHlTdGFjazsKICAgICBWZWN0b3I8dWludDMyX3QsIDE2LCBVbnNhZmVWZWN0
b3JPdmVyZmxvdz4gaW5kZXhTdGFjazsKLSAgICBMb2NhbFN0YWNrPEpTT2JqZWN0LCAxNj4gb2Jq
ZWN0U3RhY2sobV9leGVjLT5nbG9iYWxEYXRhKCkpOwotICAgIExvY2FsU3RhY2s8SlNBcnJheSwg
MTY+IGFycmF5U3RhY2sobV9leGVjLT5nbG9iYWxEYXRhKCkpOworICAgIExvY2FsU3RhY2s8SlNP
YmplY3QsIDE2PiBvYmplY3RTdGFjayhtX2V4ZWMtPnZtKCkpOworICAgIExvY2FsU3RhY2s8SlNB
cnJheSwgMTY+IGFycmF5U3RhY2sobV9leGVjLT52bSgpKTsKICAgICAKICAgICBWZWN0b3I8V2Fs
a2VyU3RhdGUsIDE2LCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gc3RhdGVTdGFjazsKICAgICBXYWxr
ZXJTdGF0ZSBzdGF0ZSA9IFN0YXRlVW5rbm93bjsKQEAgLTc3Miw3ICs3NzIsNyBAQCBORVZFUl9J
TkxJTkUgSlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAgICAgfQogICAgIEpTT2JqZWN0KiBm
aW5hbEhvbGRlciA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KG1fZXhlYyk7CiAgICAgUHV0UHJvcGVy
dHlTbG90IHNsb3Q7Ci0gICAgZmluYWxIb2xkZXItPm1ldGhvZFRhYmxlKCktPnB1dChmaW5hbEhv
bGRlciwgbV9leGVjLCBtX2V4ZWMtPmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlk
ZW50aWZpZXIsIG91dFZhbHVlLCBzbG90KTsKKyAgICBmaW5hbEhvbGRlci0+bWV0aG9kVGFibGUo
KS0+cHV0KGZpbmFsSG9sZGVyLCBtX2V4ZWMsIG1fZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5l
bXB0eUlkZW50aWZpZXIsIG91dFZhbHVlLCBzbG90KTsKICAgICByZXR1cm4gY2FsbFJldml2ZXIo
ZmluYWxIb2xkZXIsIGpzRW1wdHlTdHJpbmcobV9leGVjKSwgb3V0VmFsdWUpOwogfQogCkBAIC03
ODYsNyArNzg2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09OUHJvdG9GdQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKIAogICAgIEpTVmFsdWUg
dW5maWx0ZXJlZDsKLSAgICBMb2NhbFNjb3BlIHNjb3BlKGV4ZWMtPmdsb2JhbERhdGEoKSk7Cisg
ICAgTG9jYWxTY29wZSBzY29wZShleGVjLT52bSgpKTsKICAgICBpZiAoc291cmNlLmlzOEJpdCgp
KSB7CiAgICAgICAgIExpdGVyYWxQYXJzZXI8TENoYXI+IGpzb25QYXJzZXIoZXhlYywgc291cmNl
LmNoYXJhY3RlcnM4KCksIHNvdXJjZS5sZW5ndGgoKSwgU3RyaWN0SlNPTik7CiAgICAgICAgIHVu
ZmlsdGVyZWQgPSBqc29uUGFyc2VyLnRyeUxpdGVyYWxQYXJzZSgpOwpAQCAtODA3LDcgKzgwNyw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNPTlByb3RvRnUKICAgICBDYWxsVHlw
ZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgaWYgKGNh
bGxUeXBlID09IENhbGxUeXBlTm9uZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh1
bmZpbHRlcmVkKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFdhbGtlcihleGVjLCBMb2Nh
bDxKU09iamVjdD4oZXhlYy0+Z2xvYmFsRGF0YSgpLCBhc09iamVjdChmdW5jdGlvbikpLCBjYWxs
VHlwZSwgY2FsbERhdGEpLndhbGsodW5maWx0ZXJlZCkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoV2Fsa2VyKGV4ZWMsIExvY2FsPEpTT2JqZWN0PihleGVjLT52bSgpLCBhc09iamVjdChm
dW5jdGlvbikpLCBjYWxsVHlwZSwgY2FsbERhdGEpLndhbGsodW5maWx0ZXJlZCkpOwogfQogCiAv
LyBFQ01BLTI2MiB2NSAxNS4xMi4zCkBAIC04MTUsMTcgKzgxNSwxNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIEpTT05Qcm90b0Z1CiB7CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENv
dW50KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhl
YywgQVNDSUlMaXRlcmFsKCJObyBpbnB1dCB0byBzdHJpbmdpZnkiKSkpOwotICAgIExvY2FsU2Nv
cGUgc2NvcGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBMb2NhbDxVbmtub3duPiB2YWx1ZShl
eGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBMb2NhbDxVbmtub3du
PiByZXBsYWNlcihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmFyZ3VtZW50KDEpKTsKLSAgICBM
b2NhbDxVbmtub3duPiBzcGFjZShleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmFyZ3VtZW50KDIp
KTsKKyAgICBMb2NhbFNjb3BlIHNjb3BlKGV4ZWMtPnZtKCkpOworICAgIExvY2FsPFVua25vd24+
IHZhbHVlKGV4ZWMtPnZtKCksIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBMb2NhbDxVbmtub3du
PiByZXBsYWNlcihleGVjLT52bSgpLCBleGVjLT5hcmd1bWVudCgxKSk7CisgICAgTG9jYWw8VW5r
bm93bj4gc3BhY2UoZXhlYy0+dm0oKSwgZXhlYy0+YXJndW1lbnQoMikpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoU3RyaW5naWZpZXIoZXhlYywgcmVwbGFjZXIsIHNwYWNlKS5zdHJpbmdp
ZnkodmFsdWUpLmdldCgpKTsKIH0KIAogU3RyaW5nIEpTT05TdHJpbmdpZnkoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBpbmRlbnQpCiB7Ci0gICAgTG9jYWxTY29wZSBz
Y29wZShleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgIExvY2FsPFVua25vd24+IHJlc3VsdCA9IFN0
cmluZ2lmaWVyKGV4ZWMsIExvY2FsPFVua25vd24+KGV4ZWMtPmdsb2JhbERhdGEoKSwganNOdWxs
KCkpLCBMb2NhbDxVbmtub3duPihleGVjLT5nbG9iYWxEYXRhKCksIGpzTnVtYmVyKGluZGVudCkp
KS5zdHJpbmdpZnkoTG9jYWw8VW5rbm93bj4oZXhlYy0+Z2xvYmFsRGF0YSgpLCB2YWx1ZSkpOwor
ICAgIExvY2FsU2NvcGUgc2NvcGUoZXhlYy0+dm0oKSk7CisgICAgTG9jYWw8VW5rbm93bj4gcmVz
dWx0ID0gU3RyaW5naWZpZXIoZXhlYywgTG9jYWw8VW5rbm93bj4oZXhlYy0+dm0oKSwganNOdWxs
KCkpLCBMb2NhbDxVbmtub3duPihleGVjLT52bSgpLCBqc051bWJlcihpbmRlbnQpKSkuc3RyaW5n
aWZ5KExvY2FsPFVua25vd24+KGV4ZWMtPnZtKCksIHZhbHVlKSk7CiAgICAgaWYgKHJlc3VsdC5p
c1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgcmV0dXJu
IHJlc3VsdC5nZXRTdHJpbmcoZXhlYyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09OT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPTk9iamVjdC5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09OT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxE
YXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRp
YyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDIsNyArMzQy
LDcgQEAgdm9pZCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YQogICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUKHZh
bHVlKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUp
ID09IEhlYXA6OmhlYXAodGhpc09iamVjdCkpOwotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIAog
ICAgIC8vIFRyeSBpbmRleGVkIHB1dCBmaXJzdC4gVGhpcyBpcyByZXF1aXJlZCBmb3IgY29ycmVj
dG5lc3MsIHNpbmNlIGxvYWRzIG9uIHByb3BlcnR5IG5hbWVzIHRoYXQgYXBwZWFyIGxpa2UKICAg
ICAvLyB2YWxpZCBpbmRpY2VzIHdpbGwgbmV2ZXIgbG9vayBpbiB0aGUgbmFtZWQgcHJvcGVydHkg
c3RvcmFnZS4KQEAgLTM1OCw4ICszNTgsOCBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhCiAgICAgICAgIGZvciAoSlNPYmplY3QqIG9iaiA9IHRoaXNPYmplY3Q7ICFv
YmotPnN0cnVjdHVyZSgpLT5oYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1
ZGluZ1Byb3RvKCk7IG9iaiA9IGFzT2JqZWN0KHByb3RvdHlwZSkpIHsKICAgICAgICAgICAgIHBy
b3RvdHlwZSA9IG9iai0+cHJvdG90eXBlKCk7CiAgICAgICAgICAgICBpZiAocHJvdG90eXBlLmlz
TnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKGV4ZWMtPmdsb2JhbERhdGEoKSwg
cHJvcGVydHlOYW1lKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5wdXREaXJl
Y3RJbnRlcm5hbDxQdXRNb2RlUHV0PihnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAw
LCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgQVNTRVJU
KCF0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9y
ZVRvKGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSkpOworICAgICAgICAgICAgICAgIGlmICghdGhp
c09iamVjdC0+cHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwg
dmFsdWUsIDAsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSkKICAgICAgICAgICAgICAg
ICAgICAgJiYgc2xvdC5pc1N0cmljdE1vZGUoKSkKICAgICAgICAgICAgICAgICAgICAgdGhyb3dU
eXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3Jp
dGVFcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTM3MSwxMCArMzcxLDEwIEBA
IHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGEKICAgICBmb3IgKG9iaiA9
IHRoaXNPYmplY3Q7IDsgb2JqID0gYXNPYmplY3QocHJvdG90eXBlKSkgewogICAgICAgICB1bnNp
Z25lZCBhdHRyaWJ1dGVzOwogICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7Ci0gICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG9iai0+c3RydWN0dXJlKCktPmdldChnbG9iYWxEYXRh
LCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmotPnN0cnVjdHVyZSgpLT5nZXQodm0sIHByb3BlcnR5TmFt
ZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0
KG9mZnNldCkpIHsKICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpIHsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnByb3RvdHlwZUNo
YWluTWF5SW50ZXJjZXB0U3RvcmVUbyhleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSkg
fHwgb2JqID09IHRoaXNPYmplY3QpOworICAgICAgICAgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0
LT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKGV4ZWMtPnZt
KCksIHByb3BlcnR5TmFtZSkgfHwgb2JqID09IHRoaXNPYmplY3QpOwogICAgICAgICAgICAgICAg
IGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQogICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
KGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoU3RyaWN0TW9kZVJlYWRv
bmx5UHJvcGVydHlXcml0ZUVycm9yKSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTM4
Myw3ICszODMsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAg
ICAgICAgICAgICBKU1ZhbHVlIGdzID0gb2JqLT5nZXREaXJlY3Qob2Zmc2V0KTsKICAgICAgICAg
ICAgIGlmIChncy5pc0dldHRlclNldHRlcigpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGF0
dHJpYnV0ZXMgJiBBY2Nlc3Nvcik7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHRoaXNPYmplY3Qt
PnN0cnVjdHVyZSgpLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oZXhlYy0+Z2xv
YmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpIHx8IG9iaiA9PSB0aGlzT2JqZWN0KTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnByb3RvdHlwZUNoYWluTWF5
SW50ZXJjZXB0U3RvcmVUbyhleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUpIHx8IG9iaiA9PSB0aGlz
T2JqZWN0KTsKICAgICAgICAgICAgICAgICBKU09iamVjdCogc2V0dGVyRnVuYyA9IGFzR2V0dGVy
U2V0dGVyKGdzKS0+c2V0dGVyKCk7ICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIXNldHRl
ckZ1bmMpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCkBA
IC00MTIsOCArNDEyLDggQEAgdm9pZCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIAotICAgIEFTU0VSVCghdGhpc09iamVj
dC0+c3RydWN0dXJlKCktPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhleGVjLT5n
bG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSkgfHwgb2JqID09IHRoaXNPYmplY3QpOwotICAgIGlm
ICghdGhpc09iamVjdC0+cHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4oZ2xvYmFsRGF0YSwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKSAm
JiBzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgIEFTU0VSVCghdGhpc09iamVjdC0+c3RydWN0dXJl
KCktPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhleGVjLT52bSgpLCBwcm9wZXJ0
eU5hbWUpIHx8IG9iaiA9PSB0aGlzT2JqZWN0KTsKKyAgICBpZiAoIXRoaXNPYmplY3QtPnB1dERp
cmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90
LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpICYmIHNsb3QuaXNTdHJpY3RNb2RlKCkpCiAgICAg
ICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9ubHlQ
cm9wZXJ0eVdyaXRlRXJyb3IpKTsKICAgICByZXR1cm47CiB9CkBAIC00MzMsNyArNDMzLDcgQEAg
dm9pZCBKU09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIAogICAgICAgICBicmVhazsK
ICAgICAgICAgCiAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAg
ICAgIHRoaXNPYmplY3QtPmNvbnZlcnRVbmRlY2lkZWRGb3JWYWx1ZShleGVjLT5nbG9iYWxEYXRh
KCksIHZhbHVlKTsKKyAgICAgICAgdGhpc09iamVjdC0+Y29udmVydFVuZGVjaWRlZEZvclZhbHVl
KGV4ZWMtPnZtKCksIHZhbHVlKTsKICAgICAgICAgLy8gUmVsb29wLgogICAgICAgICBwdXRCeUlu
ZGV4KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtNDQxLDcgKzQ0MSw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXgo
SlNDZWxsKiBjZWxsLCAKICAgICAgICAgCiAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQ
RVM6IHsKICAgICAgICAgaWYgKCF2YWx1ZS5pc0ludDMyKCkpIHsKLSAgICAgICAgICAgIHRoaXNP
YmplY3QtPmNvbnZlcnRJbnQzMkZvclZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdmFsdWUpOwor
ICAgICAgICAgICAgdGhpc09iamVjdC0+Y29udmVydEludDMyRm9yVmFsdWUoZXhlYy0+dm0oKSwg
dmFsdWUpOwogICAgICAgICAgICAgcHV0QnlJbmRleChjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzaG91bGRUaHJvdyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAg
LTQ1Miw3ICs0NTIsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwg
CiAgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHk7
CiAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPj0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtwcm9w
ZXJ0eU5hbWVdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNPYmplY3QsIHZhbHVlKTsKKyAg
ICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbcHJvcGVydHlOYW1lXS5zZXQoZXhlYy0+dm0o
KSwgdGhpc09iamVjdCwgdmFsdWUpOwogICAgICAgICBpZiAocHJvcGVydHlOYW1lID49IGJ1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCkpCiAgICAgICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xl
bmd0aChwcm9wZXJ0eU5hbWUgKyAxKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDYwLDE0ICs0NjAs
MTQgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIAogICAgICAgICAK
ICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgaWYgKCF2YWx1
ZS5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICB0aGlzT2JqZWN0LT5jb252ZXJ0RG91YmxlVG9D
b250aWd1b3VzKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgICAgICB0aGlzT2JqZWN0LT5j
b252ZXJ0RG91YmxlVG9Db250aWd1b3VzKGV4ZWMtPnZtKCkpOwogICAgICAgICAgICAgLy8gUmVs
b29wLgogICAgICAgICAgICAgcHV0QnlJbmRleChjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzaG91bGRUaHJvdyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAgZG91YmxlIHZhbHVlQXNEb3VibGUgPSB2YWx1ZS5hc051bWJlcigpOwogICAgICAgICBpZiAo
dmFsdWVBc0RvdWJsZSAhPSB2YWx1ZUFzRG91YmxlKSB7Ci0gICAgICAgICAgICB0aGlzT2JqZWN0
LT5jb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAg
ICAgICB0aGlzT2JqZWN0LT5jb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKGV4ZWMtPnZtKCkpOwog
ICAgICAgICAgICAgLy8gUmVsb29wLgogICAgICAgICAgICAgcHV0QnlJbmRleChjZWxsLCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7CiAgICAgICAgICAgICByZXR1cm47
CkBAIC00OTksNyArNDk5LDcgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNl
bGwsIAogICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZVNsb3QpCiAgICAgICAgICAgICArK3N0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CiAgICAgICAgIAotICAgICAgICB2YWx1ZVNsb3Quc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOworICAgICAgICB2YWx1ZVNs
b3Quc2V0KGV4ZWMtPnZtKCksIHRoaXNPYmplY3QsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAgICAgCkBAIC01MjYsNyArNTI2LDcgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJ
bmRleChKU0NlbGwqIGNlbGwsIAogICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2YWx1ZVNsb3Quc2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOworICAgICAgICB2YWx1ZVNsb3Quc2V0
KGV4ZWMtPnZtKCksIHRoaXNPYmplY3QsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAgICAgCkBAIC01MzcsMTIgKzUzNywxMiBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4
KEpTQ2VsbCogY2VsbCwgCiAgICAgdGhpc09iamVjdC0+cHV0QnlJbmRleEJleW9uZFZlY3Rvckxl
bmd0aChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7CiB9CiAKLUFycmF5
U3RvcmFnZSogSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0
b3JhZ2VBbHJlYWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlKQorQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoVk0mIHZtLCBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UpCiB7CiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9z
cGFyc2VNYXAuZ2V0KCk7CiAKICAgICBpZiAoIW1hcCkKLSAgICAgICAgbWFwID0gYWxsb2NhdGVT
cGFyc2VJbmRleE1hcChnbG9iYWxEYXRhKTsKKyAgICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJ
bmRleE1hcCh2bSk7CiAKICAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkpCiAgICAgICAgIHJldHVy
biBzdG9yYWdlOwpAQCAtNTU1LDIxICs1NTUsMjEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6
ZW50ZXJEaWN0aW9uYXJ5SQogICAgICAgICAvLyBUaGlzIHdpbGwgYWx3YXlzIGJlIGEgbmV3IGVu
dHJ5IGluIHRoZSBtYXAsIHNvIG5vIG5lZWQgdG8gY2hlY2sgd2UgY2FuIHdyaXRlLAogICAgICAg
ICAvLyBhbmQgYXR0cmlidXRlcyBhcmUgZGVmYXVsdCBzbyBubyBuZWVkIHRvIHNldCB0aGVtLgog
ICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVyYXRv
ci0+dmFsdWUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIG1hcC0+
YWRkKHRoaXMsIGkpLml0ZXJhdG9yLT52YWx1ZS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICB9
CiAKLSAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5y
ZXNpemVBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgMCwgQXJyYXlTdG9yYWdlOjpzaXpl
Rm9yKDApKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZs
eSgpLT5yZXNpemVBcnJheSh2bSwgc3RydWN0dXJlKCksIDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZv
cigwKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobmV3QnV0dGVyZmx5KTsKICAgICAKICAgICBtX2J1
dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT5tX2luZGV4QmlhcyA9IDA7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0
VmVjdG9yTGVuZ3RoKDApOwotICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3Bh
cnNlTWFwLnNldChnbG9iYWxEYXRhLCB0aGlzLCBtYXApOworICAgIG5ld0J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLnNldCh2bSwgdGhpcywgbWFwKTsKICAgICAKICAgICBy
ZXR1cm4gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKIH0KIAotdm9pZCBKU09iamVjdDo6
ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3Zv
aWQgSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShWTSYgdm0pCiB7CiAgICAg
c3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFMTF9CTEFO
S19JTkRFWElOR19UWVBFUzoKQEAgLTU3OSwxMCArNTc5LDEwIEBAIHZvaWQgSlNPYmplY3Q6OmVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW8KICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5H
X1RZUEVTOgogICAgICAgICAvLyBOT1RFOiB0aGlzIGlzIGhvcnJpYmx5IGluZWZmaWNpZW50LCBh
cyBpdCB3aWxsIHBlcmZvcm0gdHdvIGNvbnZlcnNpb25zLiBXZSBjb3VsZCBvcHRpbWl6ZQogICAg
ICAgICAvLyB0aGlzIGNhc2UgaWYgd2UgZXZlciBjYXJlZC4KLSAgICAgICAgZW50ZXJEaWN0aW9u
YXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwg
ZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyhnbG9iYWxEYXRhKSk7CisgICAgICAgIGVudGVyRGljdGlv
bmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBlbnN1cmVB
cnJheVN0b3JhZ2VTbG93KHZtKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5n
TW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdo
ZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCkpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKQEAgLTU5MCwyMCAr
NTkwLDIwIEBAIHZvaWQgSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW8KICAgICB9
CiB9CiAKLXZvaWQgSlNPYmplY3Q6Om5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNjZXNzb3JzKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgSlNPYmplY3Q6Om5vdGlmeVByZXNlbmNlT2ZJ
bmRleGVkQWNjZXNzb3JzKFZNJiB2bSkKIHsKICAgICBpZiAobWF5SW50ZXJjZXB0SW5kZXhlZEFj
Y2Vzc2VzKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFs
RGF0YSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0
dXJlKCksIEFkZEluZGV4ZWRBY2Nlc3NvcnMpKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVj
dHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwgQWRkSW5kZXhlZEFj
Y2Vzc29ycykpOwogICAgIAotICAgIGlmICghZ2xvYmFsRGF0YS5wcm90b3R5cGVNYXAuaXNQcm90
b3R5cGUodGhpcykpCisgICAgaWYgKCF2bS5wcm90b3R5cGVNYXAuaXNQcm90b3R5cGUodGhpcykp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBnbG9iYWxPYmplY3QoKS0+aGF2ZUFCYWRUaW1l
KGdsb2JhbERhdGEpOworICAgIGdsb2JhbE9iamVjdCgpLT5oYXZlQUJhZFRpbWUodm0pOwogfQog
Ci1CdXR0ZXJmbHkqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2UoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgsIHNpemVfdCBlbGVtZW50U2l6ZSkK
K0J1dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZShWTSYgdm0s
IHVuc2lnbmVkIGxlbmd0aCwgc2l6ZV90IGVsZW1lbnRTaXplKQogewogICAgIEFTU0VSVChsZW5n
dGggPCBNQVhfQVJSQVlfSU5ERVgpOwogICAgIEluZGV4aW5nVHlwZSBvbGRUeXBlID0gc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpOwpAQCAtNjEyLDUzICs2MTIsNTMgQEAgQnV0dGVyZmx5KiBK
U09iamVjdDo6Y3JlYXRlSW5pdGlhbEluZGV4ZQogICAgIEFTU0VSVCghaW5kZXhpbmdTaG91bGRC
ZVNwYXJzZSgpKTsKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChsZW5ndGgs
IEJBU0VfVkVDVE9SX0xFTik7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJm
bHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQobV9idXR0ZXJmbHksIAotICAgICAgICBnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNl
LCAwLAorICAgICAgICB2bSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpLCBmYWxzZSwgMCwKICAgICAgICAgZWxlbWVudFNpemUgKiB2ZWN0b3JMZW5ndGgpOwog
ICAgIG5ld0J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CiAgICAgbmV3QnV0dGVy
Zmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKICAgICByZXR1cm4gbmV3QnV0dGVy
Zmx5OwogfQogCi1CdXR0ZXJmbHkqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsVW5kZWNpZGVkKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorQnV0dGVyZmx5KiBKU09i
amVjdDo6Y3JlYXRlSW5pdGlhbFVuZGVjaWRlZChWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkKIHsK
LSAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFn
ZShnbG9iYWxEYXRhLCBsZW5ndGgsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwotICAgIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKCksIEFsbG9jYXRlVW5kZWNpZGVkKTsKLSAgICBzZXRCdXR0ZXJm
bHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOworICAgIEJ1dHRlcmZs
eSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgs
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0g
U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCBBbGxvY2F0
ZVVuZGVjaWRlZCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVj
dHVyZSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseTsKIH0KIAotQ29udGlndW91c0pTVmFsdWVz
IEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsSW50MzIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1
bnNpZ25lZCBsZW5ndGgpCitDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRp
YWxJbnQzMihWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBCdXR0ZXJmbHkqIG5ld0J1
dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZShnbG9iYWxEYXRhLCBsZW5ndGgs
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0g
U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCks
IEFsbG9jYXRlSW50MzIpOwotICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJm
bHksIG5ld1N0cnVjdHVyZSk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJ
bml0aWFsSW5kZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7
CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlKCksIEFsbG9jYXRlSW50MzIpOworICAgIHNldEJ1dHRlcmZs
eSh2bSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdCdXR0ZXJm
bHktPmNvbnRpZ3VvdXNJbnQzMigpOwogfQogCi1Db250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6
Y3JlYXRlSW5pdGlhbERvdWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxl
bmd0aCkKK0NvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsRG91YmxlKFZN
JiB2bSwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0g
Y3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKGdsb2JhbERhdGEsIGxlbmd0aCwgc2l6ZW9mKGRv
dWJsZSkpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4
ZWRTdG9yYWdlKHZtLCBsZW5ndGgsIHNpemVvZihkb3VibGUpKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQogICAgICAgICBuZXdCdXR0
ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFFOYU47Ci0gICAgU3RydWN0dXJlKiBuZXdT
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUoKSwgQWxsb2NhdGVEb3VibGUpOwotICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRh
LCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKCksIEFs
bG9jYXRlRG91YmxlKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSwgbmV3U3Ry
dWN0dXJlKTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCk7CiB9
CiAKLUNvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgpCitDb250aWd1b3VzSlNW
YWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxDb250aWd1b3VzKFZNJiB2bSwgdW5zaWduZWQg
bGVuZ3RoKQogewotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbElu
ZGV4ZWRTdG9yYWdlKGdsb2JhbERhdGEsIGxlbmd0aCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7
Ci0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJh
bnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVDb250aWd1b3VzKTsKLSAg
ICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOwor
ICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdl
KHZtLCBsZW5ndGgsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVy
ZSgpLCBBbGxvY2F0ZUNvbnRpZ3VvdXMpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVy
Zmx5LCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KTsKIH0KIAotQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5n
dGgpCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UoVk0mIHZtLCB1
bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKIHsKICAgICBJbmRleGluZ1R5
cGUgb2xkVHlwZSA9IHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKTsKICAgICBBU1NFUlRfVU5V
U0VEKG9sZFR5cGUsICFoYXNJbmRleGVkUHJvcGVydGllcyhvbGRUeXBlKSk7CiAgICAgQnV0dGVy
Zmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQobV9i
dXR0ZXJmbHksIAotICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAwLAorICAgICAgICB2bSwgc3RydWN0dXJlKCks
IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwKICAgICAgICAgQXJy
YXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG5l
d0J1dHRlcmZseSk7CiAKQEAgLTY2OCw0OSArNjY4LDQ5IEBAIEFycmF5U3RvcmFnZSogSlNPYmpl
Y3Q6OmNyZWF0ZUFycmF5U3RvcmEKICAgICByZXN1bHQtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CiAg
ICAgcmVzdWx0LT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKICAgICByZXN1bHQtPm1faW5kZXhC
aWFzID0gMDsKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJv
cGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+c3Vn
Z2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKLSAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFs
RGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOworICAgIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgp
LCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKKyAgICBz
ZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1BcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQXJyYXlT
dG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6
OmNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoVk0mIHZtKQogewotICAgIHJldHVybiBjcmVhdGVB
cnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgQkFTRV9WRUNUT1JfTEVOKTsKKyAgICByZXR1cm4g
Y3JlYXRlQXJyYXlTdG9yYWdlKHZtLCAwLCBCQVNFX1ZFQ1RPUl9MRU4pOwogfQogCi1Db250aWd1
b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0ludDMyKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKK0NvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydFVuZGVj
aWRlZFRvSW50MzIoVk0mIHZtKQogewogICAgIEFTU0VSVChoYXNVbmRlY2lkZWQoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSk7Ci0gICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0cnVj
dHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBBbGxv
Y2F0ZUludDMyKSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5
VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKCksIEFsbG9jYXRlSW50MzIpKTsKICAgICByZXR1cm4g
bV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpOwogfQogCi1Db250aWd1b3VzRG91YmxlcyBK
U09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvRG91YmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKK0NvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9Eb3VibGUo
Vk0mIHZtKQogewogICAgIEFTU0VSVChoYXNVbmRlY2lkZWQoc3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9idXR0ZXJmbHktPnZlY3Rv
ckxlbmd0aCgpOyBpLS07KQogICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgp
W2ldID0gUU5hTjsKICAgICAKLSAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgU3RydWN0dXJl
Ojpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIEFsbG9jYXRl
RG91YmxlKSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlKCksIEFsbG9jYXRlRG91YmxlKSk7CiAgICAgcmV0dXJuIG1f
YnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCk7CiB9CiAKLUNvbnRpZ3VvdXNKU1ZhbHVlcyBK
U09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQ29udGlndW91cyhKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCitDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0Nv
bnRpZ3VvdXMoVk0mIHZtKQogewogICAgIEFTU0VSVChoYXNVbmRlY2lkZWQoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSk7Ci0gICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0cnVjdHVy
ZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBBbGxvY2F0
ZUNvbnRpZ3VvdXMpKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVy
dHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVDb250aWd1b3VzKSk7CiAgICAg
cmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CiB9CiAKLUFycmF5U3RvcmFnZSogSlNP
YmplY3Q6OmNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVu
dHMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpCitBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0
Q29weWluZ0VsZW1lbnRzKFZNJiB2bSwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKQogewogICAgIHVu
c2lnbmVkIHB1YmxpY0xlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICB1
bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCk7CiAgICAgdW5zaWduZWQgcHJvcGVydHlTaXplID0gc3RydWN0dXJlKCktPm91dE9mTGluZVNp
emUoKTsKICAgICAKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3Jl
YXRlVW5pbml0aWFsaXplZCgKLSAgICAgICAgZ2xvYmFsRGF0YSwgMCwgcHJvcGVydHlDYXBhY2l0
eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5lZWRlZExlbmd0aCkpOworICAgICAgICB2
bSwgMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5lZWRl
ZExlbmd0aCkpOwogICAgIAogICAgIG1lbWNweSgKICAgICAgICAgbmV3QnV0dGVyZmx5LT5wcm9w
ZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKQEAgLTcyNywyOSArNzI3LDI5IEBAIEFycmF5
U3RvcmFnZSogSlNPYmplY3Q6OmNvbnN0cnVjdENvbnZlcnQKICAgICByZXR1cm4gbmV3U3RvcmFn
ZTsKIH0KIAotQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQXJyYXlT
dG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRy
YW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCkKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6
OmNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZShWTSYgdm0sIE5vblByb3BlcnR5VHJhbnNp
dGlvbiB0cmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpCiB7CiAgICAgQVNTRVJUKGhh
c1VuZGVjaWRlZChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICAKLSAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0
Q29weWluZ0VsZW1lbnRzKGdsb2JhbERhdGEsIG5lZWRlZExlbmd0aCk7CisgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlp
bmdFbGVtZW50cyh2bSwgbmVlZGVkTGVuZ3RoKTsKICAgICAvLyBObyBuZWVkIHRvIGNvcHkgZWxl
bWVudHMuCiAgICAgCi0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgdHJhbnNpdGlvbik7
Ci0gICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIHN0b3JhZ2UtPmJ1dHRlcmZseSgpLCBuZXdT
dHJ1Y3R1cmUpOworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Q
cm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKyAgICBzZXRC
dXR0ZXJmbHkodm0sIHN0b3JhZ2UtPmJ1dHRlcmZseSgpLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJl
dHVybiBzdG9yYWdlOwogfQogCi1BcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNp
ZGVkVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBOb25Qcm9wZXJ0eVRy
YW5zaXRpb24gdHJhbnNpdGlvbikKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRVbmRl
Y2lkZWRUb0FycmF5U3RvcmFnZShWTSYgdm0sIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0
aW9uKQogewotICAgIHJldHVybiBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UoZ2xvYmFs
RGF0YSwgdHJhbnNpdGlvbiwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICByZXR1
cm4gY29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdlKHZtLCB0cmFuc2l0aW9uLCBtX2J1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCkpOwogfQogCi1BcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252
ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorQXJy
YXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdlKFZNJiB2
bSkKIHsKLSAgICByZXR1cm4gY29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdlKGdsb2JhbERh
dGEsIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOworICAg
IHJldHVybiBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5z
dWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOwogfQogCi1Db250aWd1b3VzRG91Ymxl
cyBKU09iamVjdDo6Y29udmVydEludDMyVG9Eb3VibGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KQorQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvRG91YmxlKFZNJiB2
bSkKIHsKICAgICBBU1NFUlQoaGFzSW50MzIoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7
CiAgICAgCkBAIC03NjUsMjMgKzc2NSwyMyBAQCBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6
Y29udmVydEludDMyCiAgICAgICAgICpjdXJyZW50QXNEb3VibGUgPSB2LmFzSW50MzIoKTsKICAg
ICB9CiAgICAgCi0gICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0cnVjdHVyZTo6bm9uUHJv
cGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZURvdWJsZSkp
OworICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24o
dm0sIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZURvdWJsZSkpOwogICAgIHJldHVybiBtX2J1dHRlcmZs
eS0+Y29udGlndW91c0RvdWJsZSgpOwogfQogCi1Db250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6
OmNvbnZlcnRJbnQzMlRvQ29udGlndW91cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitDb250
aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQ29udGlndW91cyhWTSYgdm0p
CiB7CiAgICAgQVNTRVJUKGhhc0ludDMyKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOwog
ICAgIAotICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5
VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVDb250aWd1b3VzKSk7
CisgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2
bSwgc3RydWN0dXJlKCksIEFsbG9jYXRlQ29udGlndW91cykpOwogICAgIHJldHVybiBtX2J1dHRl
cmZseS0+Y29udGlndW91cygpOwogfQogCi1BcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0
SW50MzJUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE5vblByb3BlcnR5
VHJhbnNpdGlvbiB0cmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpCitBcnJheVN0b3Jh
Z2UqIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShWTSYgdm0sIE5vblByb3Bl
cnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpCiB7CiAgICAg
QVNTRVJUKGhhc0ludDMyKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOwogICAgIAotICAg
IEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFn
ZVdpdGhvdXRDb3B5aW5nRWxlbWVudHMoZ2xvYmFsRGF0YSwgbmVlZGVkTGVuZ3RoKTsKKyAgICBB
cnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VX
aXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCBuZWVkZWRMZW5ndGgpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaS0tOykgewogICAgICAgICBKU1Zh
bHVlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwogICAgICAgICBpZiAo
IXYpCkBAIC03OTAsMjMgKzc5MCwyMyBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0
SW50MzJUb0FyCiAgICAgICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKICAg
ICB9CiAgICAgCi0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblBy
b3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgdHJhbnNpdGlvbik7Ci0g
ICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpLCBuZXdT
dHJ1Y3R1cmUpOworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Q
cm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKyAgICBzZXRC
dXR0ZXJmbHkodm0sIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpLCBuZXdTdHJ1Y3R1cmUpOwogICAg
IHJldHVybiBuZXdTdG9yYWdlOwogfQogCi1BcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0
SW50MzJUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE5vblByb3BlcnR5
VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQorQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydElu
dDMyVG9BcnJheVN0b3JhZ2UoVk0mIHZtLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlv
bikKIHsKLSAgICByZXR1cm4gY29udmVydEludDMyVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwg
dHJhbnNpdGlvbiwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICByZXR1cm4gY29u
dmVydEludDMyVG9BcnJheVN0b3JhZ2Uodm0sIHRyYW5zaXRpb24sIG1fYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKSk7CiB9CiAKLUFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRv
QXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK0FycmF5U3RvcmFnZSogSlNP
YmplY3Q6OmNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKFZNJiB2bSkKIHsKLSAgICByZXR1cm4g
Y29udmVydEludDMyVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPnN1Z2dl
c3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7CisgICAgcmV0dXJuIGNvbnZlcnRJbnQzMlRv
QXJyYXlTdG9yYWdlKHZtLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNp
dGlvbigpKTsKIH0KIAogdGVtcGxhdGU8SlNPYmplY3Q6OkRvdWJsZVRvQ29udGlndW91c01vZGUg
bW9kZT4KLUNvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Z2VuZXJpY0NvbnZlcnREb3VibGVU
b0NvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorQ29udGlndW91c0pTVmFsdWVz
IEpTT2JqZWN0OjpnZW5lcmljQ29udmVydERvdWJsZVRvQ29udGlndW91cyhWTSYgdm0pCiB7CiAg
ICAgQVNTRVJUKGhhc0RvdWJsZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICAK
QEAgLTgzMSwyNSArODMxLDI1IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Z2VuZXJp
Y0NvbnYKICAgICAgICAgY3VycmVudEFzVmFsdWUtPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7
CiAgICAgfQogICAgIAotICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVDb250
aWd1b3VzKSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlKCksIEFsbG9jYXRlQ29udGlndW91cykpOwogICAgIHJldHVy
biBtX2J1dHRlcmZseS0+Y29udGlndW91cygpOwogfQogCi1Db250aWd1b3VzSlNWYWx1ZXMgSlNP
YmplY3Q6OmNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KQorQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9Db250aWd1b3Vz
KFZNJiB2bSkKIHsKLSAgICByZXR1cm4gZ2VuZXJpY0NvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXM8
RW5jb2RlVmFsdWVBc0RvdWJsZT4oZ2xvYmFsRGF0YSk7CisgICAgcmV0dXJuIGdlbmVyaWNDb252
ZXJ0RG91YmxlVG9Db250aWd1b3VzPEVuY29kZVZhbHVlQXNEb3VibGU+KHZtKTsKIH0KIAotQ29u
dGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpyYWdlQ29udmVydERvdWJsZVRvQ29udGlndW91cyhK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OnJh
Z2VDb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKFZNJiB2bSkKIHsKLSAgICByZXR1cm4gZ2VuZXJp
Y0NvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXM8UmFnZUNvbnZlcnREb3VibGVUb1ZhbHVlPihnbG9i
YWxEYXRhKTsKKyAgICByZXR1cm4gZ2VuZXJpY0NvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXM8UmFn
ZUNvbnZlcnREb3VibGVUb1ZhbHVlPih2bSk7CiB9CiAKLUFycmF5U3RvcmFnZSogSlNPYmplY3Q6
OmNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE5v
blByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpCitB
cnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2UoVk0mIHZt
LCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbiwgdW5zaWduZWQgbmVlZGVkTGVuZ3Ro
KQogewogICAgIEFTU0VSVChoYXNEb3VibGUoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7
CiAgICAgCi0gICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVk
QXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyhnbG9iYWxEYXRhLCBuZWVkZWRMZW5n
dGgpOworICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFy
cmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIG5lZWRlZExlbmd0aCk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpLS07KSB7CiAg
ICAgICAgIGRvdWJsZSB2YWx1ZSA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07
CiAgICAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkKQEAgLTg1OCwyNiArODU4LDI2IEBAIEFycmF5
U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0EKICAgICAgICAgbmV3U3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvcisrOwogICAgIH0KICAgICAKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0
cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKLSAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3
U3RvcmFnZS0+YnV0dGVyZmx5KCksIG5ld1N0cnVjdHVyZSk7CisgICAgU3RydWN0dXJlKiBuZXdT
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJl
KCksIHRyYW5zaXRpb24pOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3U3RvcmFnZS0+YnV0dGVy
Zmx5KCksIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld1N0b3JhZ2U7CiB9CiAKLUFycmF5
U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQorQXJyYXlT
dG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKFZNJiB2bSwgTm9u
UHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCiB7Ci0gICAgcmV0dXJuIGNvbnZlcnREb3Vi
bGVUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBtX2J1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCkpOworICAgIHJldHVybiBjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2Uodm0s
IHRyYW5zaXRpb24sIG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CiB9CiAKLUFycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BcnJh
eVN0b3JhZ2UoVk0mIHZtKQogewotICAgIHJldHVybiBjb252ZXJ0RG91YmxlVG9BcnJheVN0b3Jh
Z2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRp
b24oKSk7CisgICAgcmV0dXJuIGNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSh2bSwgc3RydWN0
dXJlKCktPnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7CiB9CiAKLUFycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbiwgdW5zaWdu
ZWQgbmVlZGVkTGVuZ3RoKQorQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3Vv
dXNUb0FycmF5U3RvcmFnZShWTSYgdm0sIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9u
LCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpCiB7CiAgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgCi0gICAgQXJyYXlTdG9yYWdlKiBuZXdT
dG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVt
ZW50cyhnbG9iYWxEYXRhLCBuZWVkZWRMZW5ndGgpOworICAgIEFycmF5U3RvcmFnZSogbmV3U3Rv
cmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVu
dHModm0sIG5lZWRlZExlbmd0aCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9idXR0ZXJmbHkt
PnB1YmxpY0xlbmd0aCgpOyBpLS07KSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5
LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAgICAgIGlmICghdikKQEAgLTg4Niw3MSArODg2
LDcxIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3UKICAgICAgICAg
bmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOwogICAgIH0KICAgICAKLSAgICBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGds
b2JhbERhdGEsIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKLSAgICBzZXRCdXR0ZXJmbHkoZ2xv
YmFsRGF0YSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCksIG5ld1N0cnVjdHVyZSk7CisgICAgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2
bSwgc3RydWN0dXJlKCksIHRyYW5zaXRpb24pOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3U3Rv
cmFnZS0+YnV0dGVyZmx5KCksIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld1N0b3JhZ2U7
CiB9CiAKLUFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0
b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJh
bnNpdGlvbikKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJh
eVN0b3JhZ2UoVk0mIHZtLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKIHsKLSAg
ICByZXR1cm4gY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCB0cmFu
c2l0aW9uLCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIHJldHVybiBjb252ZXJ0
Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKHZtLCB0cmFuc2l0aW9uLCBtX2J1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCkpOwogfQogCi1BcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGln
dW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK0FycmF5U3RvcmFn
ZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoVk0mIHZtKQogewot
ICAgIHJldHVybiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIHN0
cnVjdHVyZSgpLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOworICAgIHJldHVy
biBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKHZtLCBzdHJ1Y3R1cmUoKS0+c3VnZ2Vz
dGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKIH0KIAotdm9pZCBKU09iamVjdDo6Y29udmVy
dFVuZGVjaWRlZEZvclZhbHVlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSB2YWx1
ZSkKK3ZvaWQgSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRGb3JWYWx1ZShWTSYgdm0sIEpTVmFs
dWUgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkgewotICAgICAgICBjb252ZXJ0
VW5kZWNpZGVkVG9JbnQzMihnbG9iYWxEYXRhKTsKKyAgICAgICAgY29udmVydFVuZGVjaWRlZFRv
SW50MzIodm0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGlmICh2YWx1ZS5p
c0RvdWJsZSgpKSB7Ci0gICAgICAgIGNvbnZlcnRVbmRlY2lkZWRUb0RvdWJsZShnbG9iYWxEYXRh
KTsKKyAgICAgICAgY29udmVydFVuZGVjaWRlZFRvRG91YmxlKHZtKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKLSAgICBjb252ZXJ0VW5kZWNpZGVkVG9Db250aWd1b3VzKGdsb2JhbERh
dGEpOworICAgIGNvbnZlcnRVbmRlY2lkZWRUb0NvbnRpZ3VvdXModm0pOwogfQogCi12b2lkIEpT
T2JqZWN0Ojpjb252ZXJ0SW50MzJGb3JWYWx1ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
VmFsdWUgdmFsdWUpCit2b2lkIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJGb3JWYWx1ZShWTSYgdm0s
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc0ludDMyKCkpOwogICAgIAog
ICAgIGlmICh2YWx1ZS5pc0RvdWJsZSgpKSB7Ci0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91Ymxl
KGdsb2JhbERhdGEpOworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZSh2bSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgCi0gICAgY29udmVydEludDMyVG9Db250aWd1b3VzKGdsb2Jh
bERhdGEpOworICAgIGNvbnZlcnRJbnQzMlRvQ29udGlndW91cyh2bSk7CiB9CiAKLXZvaWQgSlNP
YmplY3Q6OnNldEluZGV4UXVpY2tseVRvVW5kZWNpZGVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUpCit2b2lkIEpTT2JqZWN0OjpzZXRJbmRl
eFF1aWNrbHlUb1VuZGVjaWRlZChWTSYgdm0sIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVl
KQogewogICAgIEFTU0VSVChpbmRleCA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CiAg
ICAgQVNTRVJUKGluZGV4IDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKLSAgICBjb252
ZXJ0VW5kZWNpZGVkRm9yVmFsdWUoZ2xvYmFsRGF0YSwgdmFsdWUpOwotICAgIHNldEluZGV4UXVp
Y2tseShnbG9iYWxEYXRhLCBpbmRleCwgdmFsdWUpOworICAgIGNvbnZlcnRVbmRlY2lkZWRGb3JW
YWx1ZSh2bSwgdmFsdWUpOworICAgIHNldEluZGV4UXVpY2tseSh2bSwgaW5kZXgsIHZhbHVlKTsK
IH0KIAotdm9pZCBKU09iamVjdDo6Y29udmVydEludDMyVG9Eb3VibGVPckNvbnRpZ3VvdXNXaGls
ZVBlcmZvcm1pbmdTZXRJbmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGlu
ZGV4LCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU09iamVjdDo6Y29udmVydEludDMyVG9Eb3VibGVP
ckNvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRleChWTSYgdm0sIHVuc2lnbmVkIGluZGV4
LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIEFTU0VSVCghdmFsdWUuaXNJbnQzMigpKTsKLSAgICBj
b252ZXJ0SW50MzJGb3JWYWx1ZShnbG9iYWxEYXRhLCB2YWx1ZSk7Ci0gICAgc2V0SW5kZXhRdWlj
a2x5KGdsb2JhbERhdGEsIGluZGV4LCB2YWx1ZSk7CisgICAgY29udmVydEludDMyRm9yVmFsdWUo
dm0sIHZhbHVlKTsKKyAgICBzZXRJbmRleFF1aWNrbHkodm0sIGluZGV4LCB2YWx1ZSk7CiB9CiAK
LXZvaWQgSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdT
ZXRJbmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVl
IHZhbHVlKQordm9pZCBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQ29udGlndW91c1doaWxlUGVy
Zm9ybWluZ1NldEluZGV4KFZNJiB2bSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUpCiB7
CiAgICAgQVNTRVJUKCF2YWx1ZS5pc051bWJlcigpIHx8IHZhbHVlLmFzTnVtYmVyKCkgIT0gdmFs
dWUuYXNOdW1iZXIoKSk7Ci0gICAgY29udmVydERvdWJsZVRvQ29udGlndW91cyhnbG9iYWxEYXRh
KTsKLSAgICBzZXRJbmRleFF1aWNrbHkoZ2xvYmFsRGF0YSwgaW5kZXgsIHZhbHVlKTsKKyAgICBj
b252ZXJ0RG91YmxlVG9Db250aWd1b3VzKHZtKTsKKyAgICBzZXRJbmRleFF1aWNrbHkodm0sIGlu
ZGV4LCB2YWx1ZSk7CiB9CiAKLUNvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6ZW5zdXJlSW50
MzJTbG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK0NvbnRpZ3VvdXNKU1ZhbHVlcyBKU09i
amVjdDo6ZW5zdXJlSW50MzJTbG93KFZNJiB2bSkKIHsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNf
aW5mbykpOwogICAgIApAQCAtOTU4LDEwICs5NTgsMTAgQEAgQ29udGlndW91c0pTVmFsdWVzIEpT
T2JqZWN0OjplbnN1cmVJbnQzMgogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgog
ICAgICAgICBpZiAoVU5MSUtFTFkoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpIHx8IHN0cnVjdHVy
ZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKSkKICAgICAgICAgICAgIHJldHVybiBDb250aWd1
b3VzSlNWYWx1ZXMoKTsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxJbnQzMihnbG9iYWxE
YXRhLCAwKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxJbnQzMih2bSwgMCk7CiAgICAg
ICAgIAogICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgcmV0
dXJuIGNvbnZlcnRVbmRlY2lkZWRUb0ludDMyKGdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4g
Y29udmVydFVuZGVjaWRlZFRvSW50MzIodm0pOwogICAgICAgICAKICAgICBjYXNlIEFMTF9ET1VC
TEVfSU5ERVhJTkdfVFlQRVM6CiAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBF
UzoKQEAgLTk3NCw3ICs5NzQsNyBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmVuc3Vy
ZUludDMyCiAgICAgfQogfQogCi1Db250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6ZW5zdXJlRG91
YmxlU2xvdyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitDb250aWd1b3VzRG91YmxlcyBKU09i
amVjdDo6ZW5zdXJlRG91YmxlU2xvdyhWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZz
X2luZm8pKTsKICAgICAKQEAgLTk4MiwxMyArOTgyLDEzIEBAIENvbnRpZ3VvdXNEb3VibGVzIEpT
T2JqZWN0OjplbnN1cmVEb3VibGUKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoK
ICAgICAgICAgaWYgKFVOTElLRUxZKGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSB8fCBzdHJ1Y3R1
cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSkpCiAgICAgICAgICAgICByZXR1cm4gQ29udGln
dW91c0RvdWJsZXMoKTsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxEb3VibGUoZ2xvYmFs
RGF0YSwgMCk7CisgICAgICAgIHJldHVybiBjcmVhdGVJbml0aWFsRG91YmxlKHZtLCAwKTsKICAg
ICAgICAgCiAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgotICAgICAgICBy
ZXR1cm4gY29udmVydFVuZGVjaWRlZFRvRG91YmxlKGdsb2JhbERhdGEpOworICAgICAgICByZXR1
cm4gY29udmVydFVuZGVjaWRlZFRvRG91YmxlKHZtKTsKICAgICAgICAgCiAgICAgY2FzZSBBTExf
SU5UMzJfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIHJldHVybiBjb252ZXJ0SW50MzJUb0RvdWJs
ZShnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRJbnQzMlRvRG91YmxlKHZtKTsK
ICAgICAgICAgCiAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICBj
YXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgpAQCAtMTAwMCw3ICsxMDAwLDcg
QEAgQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmVuc3VyZURvdWJsZQogICAgIH0KIH0KIAot
Q29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjplbnN1cmVDb250aWd1b3VzU2xvdyhKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIERvdWJsZVRvQ29udGlndW91c01vZGUgbW9kZSkKK0NvbnRpZ3Vv
dXNKU1ZhbHVlcyBKU09iamVjdDo6ZW5zdXJlQ29udGlndW91c1Nsb3coVk0mIHZtLCBEb3VibGVU
b0NvbnRpZ3VvdXNNb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsK
ICAgICAKQEAgLTEwMDgsMTggKzEwMDgsMTggQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0
OjplbnN1cmVDb250aQogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAg
ICBpZiAoVU5MSUtFTFkoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpIHx8IHN0cnVjdHVyZSgpLT5u
ZWVkc1Nsb3dQdXRJbmRleGluZygpKSkKICAgICAgICAgICAgIHJldHVybiBDb250aWd1b3VzSlNW
YWx1ZXMoKTsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKGdsb2JhbERh
dGEsIDApOworICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXModm0sIDApOwog
ICAgICAgICAKICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAg
IHJldHVybiBjb252ZXJ0VW5kZWNpZGVkVG9Db250aWd1b3VzKGdsb2JhbERhdGEpOworICAgICAg
ICByZXR1cm4gY29udmVydFVuZGVjaWRlZFRvQ29udGlndW91cyh2bSk7CiAgICAgICAgIAogICAg
IGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgotICAgICAgICByZXR1cm4gY29udmVydElu
dDMyVG9Db250aWd1b3VzKGdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4gY29udmVydEludDMy
VG9Db250aWd1b3VzKHZtKTsKICAgICAgICAgCiAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5H
X1RZUEVTOgogICAgICAgICBpZiAobW9kZSA9PSBSYWdlQ29udmVydERvdWJsZVRvVmFsdWUpCi0g
ICAgICAgICAgICByZXR1cm4gcmFnZUNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoZ2xvYmFsRGF0
YSk7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKGdsb2JhbERhdGEp
OworICAgICAgICAgICAgcmV0dXJuIHJhZ2VDb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKHZtKTsK
KyAgICAgICAgcmV0dXJuIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXModm0pOwogICAgICAgICAK
ICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICByZXR1
cm4gQ29udGlndW91c0pTVmFsdWVzKCk7CkBAIC0xMDMwLDQ1ICsxMDMwLDQ1IEBAIENvbnRpZ3Vv
dXNKU1ZhbHVlcyBKU09iamVjdDo6ZW5zdXJlQ29udGkKICAgICB9CiB9CiAKLUNvbnRpZ3VvdXNK
U1ZhbHVlcyBKU09iamVjdDo6ZW5zdXJlQ29udGlndW91c1Nsb3coSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQorQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjplbnN1cmVDb250aWd1b3VzU2xv
dyhWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIGVuc3VyZUNvbnRpZ3VvdXNTbG93KGdsb2JhbERhdGEs
IEVuY29kZVZhbHVlQXNEb3VibGUpOworICAgIHJldHVybiBlbnN1cmVDb250aWd1b3VzU2xvdyh2
bSwgRW5jb2RlVmFsdWVBc0RvdWJsZSk7CiB9CiAKLUNvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVj
dDo6cmFnZUVuc3VyZUNvbnRpZ3VvdXNTbG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK0Nv
bnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6cmFnZUVuc3VyZUNvbnRpZ3VvdXNTbG93KFZNJiB2
bSkKIHsKLSAgICByZXR1cm4gZW5zdXJlQ29udGlndW91c1Nsb3coZ2xvYmFsRGF0YSwgUmFnZUNv
bnZlcnREb3VibGVUb1ZhbHVlKTsKKyAgICByZXR1cm4gZW5zdXJlQ29udGlndW91c1Nsb3codm0s
IFJhZ2VDb252ZXJ0RG91YmxlVG9WYWx1ZSk7CiB9CiAKLUFycmF5U3RvcmFnZSogSlNPYmplY3Q6
OmVuc3VyZUFycmF5U3RvcmFnZVNsb3coSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorQXJyYXlT
dG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyhWTSYgdm0pCiB7CiAgICAg
QVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKICAgICAKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgog
ICAgICAgICBpZiAoVU5MSUtFTFkoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKSkKLSAgICAgICAg
ICAgIHJldHVybiBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRl
eGluZ01vZGUoZ2xvYmFsRGF0YSk7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJbml0aWFsQXJyYXlT
dG9yYWdlKGdsb2JhbERhdGEpOworICAgICAgICAgICAgcmV0dXJuIGVuc3VyZUFycmF5U3RvcmFn
ZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSh2bSk7CisgICAgICAgIHJldHVy
biBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKHZtKTsKICAgICAgICAgCiAgICAgY2FzZSBBTExf
VU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBBU1NFUlQoIWluZGV4aW5nU2hvdWxk
QmVTcGFyc2UoKSk7CiAgICAgICAgIEFTU0VSVCghc3RydWN0dXJlKCktPm5lZWRzU2xvd1B1dElu
ZGV4aW5nKCkpOwotICAgICAgICByZXR1cm4gY29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdl
KGdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4gY29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9y
YWdlKHZtKTsKICAgICAgICAgCiAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6CiAg
ICAgICAgIEFTU0VSVCghaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKTsKICAgICAgICAgQVNTRVJU
KCFzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSk7Ci0gICAgICAgIHJldHVybiBj
b252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIGNv
bnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKHZtKTsKICAgICAgICAgCiAgICAgY2FzZSBBTExfRE9V
QkxFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBBU1NFUlQoIWluZGV4aW5nU2hvdWxkQmVTcGFy
c2UoKSk7CiAgICAgICAgIEFTU0VSVCghc3RydWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5n
KCkpOwotICAgICAgICByZXR1cm4gY29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKGdsb2JhbERh
dGEpOworICAgICAgICByZXR1cm4gY29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKHZtKTsKICAg
ICAgICAgCiAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICAgICAg
QVNTRVJUKCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpOwogICAgICAgICBBU1NFUlQoIXN0cnVj
dHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKTsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRD
b250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBjb252
ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKHZtKTsKICAgICAgICAgCiAgICAgZGVmYXVsdDoK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEwNzYsMzAgKzEwNzYs
MzAgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYQogICAgIH0KIH0K
IAotQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50
ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK0FycmF5
U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlv
bmFyeUluZGV4aW5nTW9kZShWTSYgdm0pCiB7CiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzogewotICAg
ICAgICBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCk7Ci0gICAgICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXAqIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZ2xvYmFsRGF0YSk7
CisgICAgICAgIGNyZWF0ZUFycmF5U3RvcmFnZSh2bSwgMCwgMCk7CisgICAgICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAodm0pOwogICAgICAgICBt
YXAtPnNldFNwYXJzZU1vZGUoKTsKICAgICAgICAgcmV0dXJuIGFycmF5U3RvcmFnZSgpOwogICAg
IH0KICAgICAgICAgCiAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgotICAg
ICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFs
cmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgY29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdlKGds
b2JhbERhdGEpKTsKKyAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdo
ZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0
b3JhZ2Uodm0pKTsKICAgICAgICAgCiAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6
Ci0gICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9y
YWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShn
bG9iYWxEYXRhKSk7CisgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVX
aGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgY29udmVydEludDMyVG9BcnJheVN0b3Jh
Z2Uodm0pKTsKICAgICAgICAgCiAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOgot
ICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFn
ZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgY29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKGds
b2JhbERhdGEpKTsKKyAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdo
ZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBjb252ZXJ0RG91YmxlVG9BcnJheVN0b3Jh
Z2Uodm0pKTsKICAgICAgICAgCiAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBF
UzoKLSAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0
b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0
b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIGNvbnZlcnRDb250aWd1b3Vz
VG9BcnJheVN0b3JhZ2Uodm0pKTsKICAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFH
RV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5n
TW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGlu
Z01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpKTsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsKQEAg
LTExMDcsMjkgKzExMDcsMjkgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlT
dG9yYQogICAgIH0KIH0KIAotdm9pZCBKU09iamVjdDo6c3dpdGNoVG9TbG93UHV0QXJyYXlTdG9y
YWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgSlNPYmplY3Q6OnN3aXRjaFRvU2xv
d1B1dEFycmF5U3RvcmFnZShWTSYgdm0pCiB7CiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6Ci0g
ICAgICAgIGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBBbGxvY2F0
ZVNsb3dQdXRBcnJheVN0b3JhZ2UpOworICAgICAgICBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0
b3JhZ2Uodm0sIEFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAKICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgY29u
dmVydEludDMyVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgQWxsb2NhdGVTbG93UHV0QXJyYXlT
dG9yYWdlKTsKKyAgICAgICAgY29udmVydEludDMyVG9BcnJheVN0b3JhZ2Uodm0sIEFsbG9jYXRl
U2xvd1B1dEFycmF5U3RvcmFnZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNl
IEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIGNvbnZlcnREb3VibGVUb0FycmF5
U3RvcmFnZShnbG9iYWxEYXRhLCBBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2UpOworICAgICAg
ICBjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2Uodm0sIEFsbG9jYXRlU2xvd1B1dEFycmF5U3Rv
cmFnZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEFMTF9DT05USUdVT1VT
X0lOREVYSU5HX1RZUEVTOgotICAgICAgICBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdl
KGdsb2JhbERhdGEsIEFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZSk7CisgICAgICAgIGNvbnZl
cnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uodm0sIEFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFn
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5
U3RvcmFnZToKICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewotICAgICAgICBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGds
b2JhbERhdGEsIHN0cnVjdHVyZSgpLCBTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UpOwotICAg
ICAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgbmV3U3RydWN0dXJlKTsKKyAgICAgICAgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2
bSwgc3RydWN0dXJlKCksIFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSk7CisgICAgICAgIHNl
dFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKQEAgLTExNDMsMjMgKzExNDMsMjMgQEAgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0Vmly
dHVhbChKU09iamVjdAogewogICAgIEFTU0VSVCghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSAmJiAh
KGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwotICAg
IG9iamVjdC0+cHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZURlZmluZU93blByb3BlcnR5PihleGVj
LT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMsIHNsb3QsIGdl
dENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3RJbnRlcm5hbDxQ
dXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSwgdmFsdWUs
IGF0dHJpYnV0ZXMsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7CiB9CiAKLXZvaWQg
SlNPYmplY3Q6OnNldFByb3RvdHlwZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUg
cHJvdG90eXBlKQordm9pZCBKU09iamVjdDo6c2V0UHJvdG90eXBlKFZNJiB2bSwgSlNWYWx1ZSBw
cm90b3R5cGUpCiB7CiAgICAgQVNTRVJUKHByb3RvdHlwZSk7CiAgICAgaWYgKHByb3RvdHlwZS5p
c09iamVjdCgpKQotICAgICAgICBnbG9iYWxEYXRhLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUo
YXNPYmplY3QocHJvdG90eXBlKSk7CisgICAgICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5
cGUoYXNPYmplY3QocHJvdG90eXBlKSk7CiAgICAgCi0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlKCksIHByb3RvdHlwZSk7Ci0gICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIG5ld1N0
cnVjdHVyZSk7CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmNoYW5n
ZVByb3RvdHlwZVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCBwcm90b3R5cGUpOworICAgIHNl
dFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICAKICAgICBpZiAoIW5ld1N0cnVjdHVy
ZS0+YW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgaWYgKGdsb2JhbERhdGEucHJvdG90eXBlTWFwLmlzUHJvdG90
eXBlKHRoaXMpKSB7Ci0gICAgICAgIG5ld1N0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCktPmhhdmVB
QmFkVGltZShnbG9iYWxEYXRhKTsKKyAgICBpZiAodm0ucHJvdG90eXBlTWFwLmlzUHJvdG90eXBl
KHRoaXMpKSB7CisgICAgICAgIG5ld1N0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCktPmhhdmVBQmFk
VGltZSh2bSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0xMTY5LDEwICsxMTY5
LDEwIEBAIHZvaWQgSlNPYmplY3Q6OnNldFByb3RvdHlwZShKU0dsb2JhbERhdGEKICAgICBpZiAo
c2hvdWxkVXNlU2xvd1B1dChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgc3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKGdsb2JhbERhdGEp
OworICAgIHN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSh2bSk7CiB9CiAKLWJvb2wgSlNPYmpl
Y3Q6OnNldFByb3RvdHlwZVdpdGhDeWNsZUNoZWNrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNWYWx1ZSBwcm90b3R5cGUpCitib29sIEpTT2JqZWN0OjpzZXRQcm90b3R5cGVXaXRoQ3ljbGVD
aGVjayhWTSYgdm0sIEpTVmFsdWUgcHJvdG90eXBlKQogewogICAgIEpTVmFsdWUgY2hlY2tGb3Ig
PSB0aGlzOwogICAgIGlmICh0aGlzLT5pc0dsb2JhbE9iamVjdCgpKQpAQCAtMTE4NCw3ICsxMTg0
LDcgQEAgYm9vbCBKU09iamVjdDo6c2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlYwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBuZXh0UHJvdG90eXBlID0gYXNPYmplY3QobmV4dFBy
b3RvdHlwZSktPnByb3RvdHlwZSgpOwogICAgIH0KLSAgICBzZXRQcm90b3R5cGUoZ2xvYmFsRGF0
YSwgcHJvdG90eXBlKTsKKyAgICBzZXRQcm90b3R5cGUodm0sIHByb3RvdHlwZSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTEyMDQsMjEgKzEyMDQsMjEgQEAgdm9pZCBKU09iamVjdDo6cHV0
RGlyZWN0QWNjZXNzb3IoRXhlY1N0YQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBwdXREaXJlY3RJ
bnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KGdsb2JhbERhdGEsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIGF0dHJpYnV0ZXMsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7Cisg
ICAgcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZURlZmluZU93blByb3BlcnR5Pih2bSwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcywgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUp
KTsKIAogICAgIC8vIHB1dERpcmVjdCB3aWxsIGNoYW5nZSBvdXIgU3RydWN0dXJlIGlmIHdlIGFk
ZCBhIG5ldyBwcm9wZXJ0eS4gRm9yCiAgICAgLy8gZ2V0dGVycyBhbmQgc2V0dGVycywgdGhvdWdo
LCB3ZSBhbHNvIG5lZWQgdG8gY2hhbmdlIG91ciBTdHJ1Y3R1cmUKICAgICAvLyBpZiB3ZSBvdmVy
cmlkZSBhbiBleGlzdGluZyBub24tZ2V0dGVyIG9yIG5vbi1zZXR0ZXIuCiAgICAgaWYgKHNsb3Qu
dHlwZSgpICE9IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpCi0gICAgICAgIHNldFN0cnVj
dHVyZShnbG9iYWxEYXRhLCBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24oZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcykpOworICAgICAg
ICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbih2
bSwgc3RydWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcykpOwogCiAgICAgaWYgKGF0
dHJpYnV0ZXMgJiBSZWFkT25seSkKICAgICAgICAgc3RydWN0dXJlKCktPnNldENvbnRhaW5zUmVh
ZE9ubHlQcm9wZXJ0aWVzKCk7CiAKLSAgICBzdHJ1Y3R1cmUoKS0+c2V0SGFzR2V0dGVyU2V0dGVy
UHJvcGVydGllcyhwcm9wZXJ0eU5hbWUgPT0gZ2xvYmFsRGF0YS5wcm9wZXJ0eU5hbWVzLT51bmRl
cnNjb3JlUHJvdG8pOworICAgIHN0cnVjdHVyZSgpLT5zZXRIYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0
aWVzKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8pOwog
fQogCiBib29sIEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CkBAIC0xMjQ3LDE2ICsxMjQ3LDE2IEBAIGJvb2wgSlNP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2UKIAogICAgIHVuc2lnbmVkIGF0dHJpYnV0
ZXM7CiAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgIGlmIChpc1ZhbGlkT2Zmc2V0KHRo
aXNPYmplY3QtPnN0cnVjdHVyZSgpLT5nZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5h
bWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpKSkgewotICAgICAgICBpZiAoYXR0cmlidXRl
cyAmIERvbnREZWxldGUgJiYgIWV4ZWMtPmdsb2JhbERhdGEoKS5pc0luRGVmaW5lT3duUHJvcGVy
dHkoKSkKKyAgICBpZiAoaXNWYWxpZE9mZnNldCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2V0
KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSkpKSB7
CisgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgRG9udERlbGV0ZSAmJiAhZXhlYy0+dm0oKS5pc0lu
RGVmaW5lT3duUHJvcGVydHkoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
dGhpc09iamVjdC0+cmVtb3ZlRGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1l
KTsKKyAgICAgICAgdGhpc09iamVjdC0+cmVtb3ZlRGlyZWN0KGV4ZWMtPnZtKCksIHByb3BlcnR5
TmFtZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIC8vIExvb2sgaW4gdGhl
IHN0YXRpYyBoYXNodGFibGUgb2YgcHJvcGVydGllcwogICAgIGNvbnN0IEhhc2hFbnRyeSogZW50
cnkgPSB0aGlzT2JqZWN0LT5maW5kUHJvcGVydHlIYXNoRW50cnkoZXhlYywgcHJvcGVydHlOYW1l
KTsKLSAgICBpZiAoZW50cnkgJiYgZW50cnktPmF0dHJpYnV0ZXMoKSAmIERvbnREZWxldGUgJiYg
IWV4ZWMtPmdsb2JhbERhdGEoKS5pc0luRGVmaW5lT3duUHJvcGVydHkoKSkKKyAgICBpZiAoZW50
cnkgJiYgZW50cnktPmF0dHJpYnV0ZXMoKSAmIERvbnREZWxldGUgJiYgIWV4ZWMtPnZtKCkuaXNJ
bkRlZmluZU93blByb3BlcnR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gdGhpcyBidWls
dGluIHByb3BlcnR5IGNhbid0IGJlIGRlbGV0ZWQKIAogICAgIC8vIEZJWE1FOiBTaG91bGQgdGhl
IGNvZGUgaGVyZSBhY3R1YWxseSBkbyBzb21lIGRlbGV0aW9uPwpAQCAtMTQzMCw3ICsxNDMwLDcg
QEAgYm9vbCBKU09iamVjdDo6cHJvcGVydHlJc0VudW1lcmFibGUoRXhlYwogYm9vbCBKU09iamVj
dDo6Z2V0UHJvcGVydHlTcGVjaWZpY1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNDZWxsKiYgc3BlY2lmaWNWYWx1ZSkgY29uc3QKIHsKICAgICB1bnNp
Z25lZCBhdHRyaWJ1dGVzOwotICAgIGlmIChpc1ZhbGlkT2Zmc2V0KHN0cnVjdHVyZSgpLT5nZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFs
dWUpKSkKKyAgICBpZiAoaXNWYWxpZE9mZnNldChzdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPnZtKCks
IHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSkpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgIC8vIFRoaXMgY291bGQgYmUgYSBmdW5jdGlvbiB3aXRoaW4gdGhlIHN0
YXRpYyB0YWJsZT8gLSBzaG91bGQgcHJvYmFibHkKQEAgLTE1MzUsNyArMTUzNSw3IEBAIHZvaWQg
SlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW0KICAgICBnZXRDbGFzc1Byb3BlcnR5
TmFtZXMoZXhlYywgb2JqZWN0LT5jbGFzc0luZm8oKSwgcHJvcGVydHlOYW1lcywgbW9kZSwgb2Jq
ZWN0LT5zdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCkpOwogCiAgICAgYm9vbCBjYW5DYWNoZVByb3Bl
cnRpZXNGcm9tU3RydWN0dXJlID0gIXByb3BlcnR5TmFtZXMuc2l6ZSgpOwotICAgIG9iamVjdC0+
c3RydWN0dXJlKCktPmdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2V0
UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lcywgbW9k
ZSk7CiAKICAgICBpZiAoY2FuQ2FjaGVQcm9wZXJ0aWVzRnJvbVN0cnVjdHVyZSkKICAgICAgICAg
cHJvcGVydHlOYW1lcy5zZXROdW1DYWNoZWFibGVTbG90c0Zvck9iamVjdChvYmplY3QsIHByb3Bl
cnR5TmFtZXMuc2l6ZSgpKTsKQEAgLTE1NjIsMjcgKzE1NjIsMjcgQEAgSlNPYmplY3QqIEpTT2Jq
ZWN0Ojp0b1RoaXNPYmplY3QoSlNDZWxsKgogICAgIHJldHVybiBqc0Nhc3Q8SlNPYmplY3QqPihj
ZWxsKTsKIH0KIAotdm9pZCBKU09iamVjdDo6c2VhbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
Cit2b2lkIEpTT2JqZWN0OjpzZWFsKFZNJiB2bSkKIHsKLSAgICBpZiAoaXNTZWFsZWQoZ2xvYmFs
RGF0YSkpCisgICAgaWYgKGlzU2VhbGVkKHZtKSkKICAgICAgICAgcmV0dXJuOwotICAgIHByZXZl
bnRFeHRlbnNpb25zKGdsb2JhbERhdGEpOwotICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBT
dHJ1Y3R1cmU6OnNlYWxUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpKSk7CisgICAg
cHJldmVudEV4dGVuc2lvbnModm0pOworICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpz
ZWFsVHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKCkpKTsKIH0KIAotdm9pZCBKU09iamVjdDo6ZnJl
ZXplKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgSlNPYmplY3Q6OmZyZWV6ZShWTSYg
dm0pCiB7Ci0gICAgaWYgKGlzRnJvemVuKGdsb2JhbERhdGEpKQorICAgIGlmIChpc0Zyb3plbih2
bSkpCiAgICAgICAgIHJldHVybjsKLSAgICBwcmV2ZW50RXh0ZW5zaW9ucyhnbG9iYWxEYXRhKTsK
LSAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgU3RydWN0dXJlOjpmcmVlemVUcmFuc2l0aW9u
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpKSk7CisgICAgcHJldmVudEV4dGVuc2lvbnModm0pOwor
ICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpmcmVlemVUcmFuc2l0aW9uKHZtLCBzdHJ1
Y3R1cmUoKSkpOwogfQogCi12b2lkIEpTT2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyhKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEpTT2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyhWTSYg
dm0pCiB7Ci0gICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpOworICAg
IGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSh2bSk7CiAgICAgaWYgKGlzRXh0ZW5zaWJsZSgp
KQotICAgICAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgU3RydWN0dXJlOjpwcmV2ZW50RXh0
ZW5zaW9uc1RyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCkpKTsKKyAgICAgICAgc2V0
U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbih2bSwg
c3RydWN0dXJlKCkpKTsKIH0KIAogLy8gVGhpcyBwcmVzZW50bHkgd2lsbCBmbGF0dGVuIHRvIGFu
IHVuY2FjaGFibGUgZGljdGlvbmFyeTsgdGhpcyBpcyBzdWl0YWJsZQpAQCAtMTU5MCw3ICsxNTkw
LDcgQEAgdm9pZCBKU09iamVjdDo6cHJldmVudEV4dGVuc2lvbnMoSlNHbG9iYQogdm9pZCBKU09i
amVjdDo6cmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JEZWxldGUoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIEFTU0VSVCghc3RhdGljRnVuY3Rpb25zUmVpZmllZCgpKTsKLSAgICBKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKIAogICAgIC8vIElmIHRoaXMgb2JqZWN0J3MgQ2xhc3NJbmZvIGhhcyBubyBzdGF0aWMgcHJv
cGVydGllcywgdGhlbiBub3RoaW5nIHRvIHJlaWZ5IQogICAgIC8vIFdlIGNhbiBzYWZlbHkgc2V0
IHRoZSBmbGFnIHRvIGF2b2lkIHRoZSBleHBlbnNpdmUgY2hlY2sgYWdhaW4gaW4gdGhlIGZ1dHVy
ZS4KQEAgLTE2MDAsMzcgKzE2MDAsMzcgQEAgdm9pZCBKU09iamVjdDo6cmVpZnlTdGF0aWNGdW5j
dGlvbnNGb3JEZQogICAgIH0KIAogICAgIGlmICghc3RydWN0dXJlKCktPmlzVW5jYWNoZWFibGVE
aWN0aW9uYXJ5KCkpCi0gICAgICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBTdHJ1Y3R1cmU6
OnRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUo
KSkpOworICAgICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6dG9VbmNhY2hlYWJsZURp
Y3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSkpOwogCiAgICAgZm9yIChjb25zdCBD
bGFzc0luZm8qIGluZm8gPSBjbGFzc0luZm8oKTsgaW5mbzsgaW5mbyA9IGluZm8tPnBhcmVudENs
YXNzKSB7CiAgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogaGFzaFRhYmxlID0gaW5mby0+cHJvcEhh
c2hUYWJsZShnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsKICAgICAgICAgaWYgKCFoYXNo
VGFibGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7
Ci0gICAgICAgIGZvciAoSGFzaFRhYmxlOjpDb25zdEl0ZXJhdG9yIGl0ZXIgPSBoYXNoVGFibGUt
PmJlZ2luKGdsb2JhbERhdGEpOyBpdGVyICE9IGhhc2hUYWJsZS0+ZW5kKGdsb2JhbERhdGEpOyAr
K2l0ZXIpIHsKKyAgICAgICAgZm9yIChIYXNoVGFibGU6OkNvbnN0SXRlcmF0b3IgaXRlciA9IGhh
c2hUYWJsZS0+YmVnaW4odm0pOyBpdGVyICE9IGhhc2hUYWJsZS0+ZW5kKHZtKTsgKytpdGVyKSB7
CiAgICAgICAgICAgICBpZiAoaXRlci0+YXR0cmlidXRlcygpICYgRnVuY3Rpb24pCi0gICAgICAg
ICAgICAgICAgc2V0VXBTdGF0aWNGdW5jdGlvblNsb3QoZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4
ZWMoKSwgKml0ZXIsIHRoaXMsIElkZW50aWZpZXIoJmdsb2JhbERhdGEsIGl0ZXItPmtleSgpKSwg
c2xvdCk7CisgICAgICAgICAgICAgICAgc2V0VXBTdGF0aWNGdW5jdGlvblNsb3QoZ2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbEV4ZWMoKSwgKml0ZXIsIHRoaXMsIElkZW50aWZpZXIoJnZtLCBpdGVyLT5r
ZXkoKSksIHNsb3QpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgc3RydWN0dXJlKCktPnNldFN0
YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKTsKIH0KIAotYm9vbCBKU09iamVjdDo6cmVtb3ZlRGlyZWN0
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK2Jv
b2wgSlNPYmplY3Q6OnJlbW92ZURpcmVjdChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpCiB7Ci0gICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KHN0cnVjdHVyZSgpLT5nZXQoZ2xvYmFsRGF0
YSwgcHJvcGVydHlOYW1lKSkpCisgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KHN0cnVjdHVyZSgpLT5n
ZXQodm0sIHByb3BlcnR5TmFtZSkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgaWYgKHN0cnVjdHVyZSgpLT5pc1VuY2FjaGVhYmxlRGlj
dGlvbmFyeSgpKSB7Ci0gICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZSgpLT5yZW1vdmVQcm9wZXJ0
eVdpdGhvdXRUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIG9m
ZnNldCA9IHN0cnVjdHVyZSgpLT5yZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBw
cm9wZXJ0eU5hbWUpOwogICAgICAgICBpZiAob2Zmc2V0ID09IGludmFsaWRPZmZzZXQpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHB1dERpcmVjdFVuZGVmaW5lZChvZmZzZXQp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFs
RGF0YSwgU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlKCksIHByb3BlcnR5TmFtZSwgb2Zmc2V0KSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBT
dHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKCksIHByb3Bl
cnR5TmFtZSwgb2Zmc2V0KSk7CiAgICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgcHV0RGlyZWN0VW5kZWZpbmVkKG9mZnNldCk7CkBAIC0x
NjUyLDkgKzE2NTIsOSBAQCB2b2lkIEpTT2JqZWN0OjpwdXRJbmRleGVkRGVzY3JpcHRvcihFeGVj
CiB7CiAgICAgaWYgKGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7CiAgICAgICAgIGlm
IChkZXNjcmlwdG9yLnZhbHVlKCkpCi0gICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBkZXNjcmlwdG9yLnZhbHVlKCkpOworICAgICAgICAgICAgZW50
cnlJbk1hcC0+c2V0KGV4ZWMtPnZtKCksIHRoaXMsIGRlc2NyaXB0b3IudmFsdWUoKSk7CiAgICAg
ICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAgICAg
ICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGpzVW5kZWZp
bmVkKCkpOworICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPnZtKCksIHRoaXMsIGpz
VW5kZWZpbmVkKCkpOwogICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRv
ci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+QWNjZXNzb3I7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNjczLDExICsxNjczLDExIEBAIHZvaWQgSlNP
YmplY3Q6OnB1dEluZGV4ZWREZXNjcmlwdG9yKEV4ZWMKIAogICAgICAgICBHZXR0ZXJTZXR0ZXIq
IGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7CiAgICAgICAgIGlmIChnZXR0
ZXIpCi0gICAgICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwg
Z2V0dGVyKTsKKyAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+dm0oKSwgZ2V0
dGVyKTsKICAgICAgICAgaWYgKHNldHRlcikKLSAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0
ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzZXR0ZXIpOworICAgICAgICAgICAgYWNjZXNzb3ItPnNl
dFNldHRlcihleGVjLT52bSgpLCBzZXR0ZXIpOwogCi0gICAgICAgIGVudHJ5SW5NYXAtPnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGFjY2Vzc29yKTsKKyAgICAgICAgZW50cnlJbk1hcC0+
c2V0KGV4ZWMtPnZtKCksIHRoaXMsIGFjY2Vzc29yKTsKICAgICAgICAgZW50cnlJbk1hcC0+YXR0
cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2Ny
aXB0b3IpICYgflJlYWRPbmx5OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTcwMSwxMSAr
MTcwMSwxMSBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoCiAgICAg
ICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFs
dWUoKSwgMCwgdGhyb3dFeGNlcHRpb24gPyBQdXREaXJlY3RJbmRleFNob3VsZFRocm93IDogUHV0
RGlyZWN0SW5kZXhTaG91bGROb3RUaHJvdyk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShl
eGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRF
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZXhlYy0+dm0oKSk7CiAgICAgfQogCiAgICAgaWYg
KGRlc2NyaXB0b3IuYXR0cmlidXRlcygpICYgKFJlYWRPbmx5IHwgQWNjZXNzb3IpKQotICAgICAg
ICBub3RpZnlQcmVzZW5jZU9mSW5kZXhlZEFjY2Vzc29ycyhleGVjLT5nbG9iYWxEYXRhKCkpOwor
ICAgICAgICBub3RpZnlQcmVzZW5jZU9mSW5kZXhlZEFjY2Vzc29ycyhleGVjLT52bSgpKTsKIAog
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+bV9zcGFyc2VNYXAuZ2V0KCk7CiAgICAgUkVMRUFTRV9BU1NFUlQobWFwKTsKQEAgLTE4MDgs
MTAgKzE4MDgsMTAgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KAog
ICAgIHJldHVybiB0cnVlOwogfQogCi1TcGFyc2VBcnJheVZhbHVlTWFwKiBKU09iamVjdDo6YWxs
b2NhdGVTcGFyc2VJbmRleE1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitTcGFyc2VBcnJh
eVZhbHVlTWFwKiBKU09iamVjdDo6YWxsb2NhdGVTcGFyc2VJbmRleE1hcChWTSYgdm0pCiB7Ci0g
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogcmVzdWx0ID0gU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y3Jl
YXRlKGdsb2JhbERhdGEpOwotICAgIGFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5zZXQoZ2xv
YmFsRGF0YSwgdGhpcywgcmVzdWx0KTsKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiByZXN1bHQg
PSBTcGFyc2VBcnJheVZhbHVlTWFwOjpjcmVhdGUodm0pOworICAgIGFycmF5U3RvcmFnZSgpLT5t
X3NwYXJzZU1hcC5zZXQodm0sIHRoaXMsIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IApAQCAtMTg2NSwyMSArMTg2NSwyMSBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25k
VmVjdG9yTGVuCiAgICAgLy8gb3IgZXF1YWwgdG8gdGhlIHZlY3RvciBsZW5ndGguCiAgICAgQVNT
RVJUKGkgPj0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAgICAKLSAgICBKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICAKICAgICBpZiAoaSA+PSBNQVhfQVJSQVlfSU5ERVggLSAxCiAgICAgICAg
IHx8IChpID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgKICAgICAgICAgICAgICYmICFpc0RlbnNl
RW5vdWdoRm9yVmVjdG9yKGksIGNvdW50RWxlbWVudHM8aW5kZXhpbmdTaGFwZT4obV9idXR0ZXJm
bHkpKSkpIHsKICAgICAgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKLSAgICAgICAg
ZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyhnbG9iYWxEYXRhKTsKLSAgICAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChnbG9iYWxEYXRhKTsKKyAgICAg
ICAgZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyh2bSk7CisgICAgICAgIFNwYXJzZUFycmF5VmFsdWVN
YXAqIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAodm0pOwogICAgICAgICBtYXAtPnB1dEVu
dHJ5KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBmYWxzZSk7CiAgICAgICAgIEFTU0VSVChpID49IGFy
cmF5U3RvcmFnZSgpLT5sZW5ndGgoKSk7CiAgICAgICAgIGFycmF5U3RvcmFnZSgpLT5zZXRMZW5n
dGgoaSArIDEpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZW5zdXJlTGVuZ3RoKGds
b2JhbERhdGEsIGkgKyAxKTsKKyAgICBlbnN1cmVMZW5ndGgodm0sIGkgKyAxKTsKIAogICAgIFJF
TEVBU0VfQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgIHN3aXRj
aCAoaW5kZXhpbmdTaGFwZSkgewpAQCAtMTg5Nyw3ICsxODk3LDcgQEAgdm9pZCBKU09iamVjdDo6
cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBDb250
aWd1b3VzU2hhcGU6Ci0gICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KGds
b2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtpXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAg
IGRlZmF1bHQ6CkBAIC0xOTA3LDcgKzE5MDcsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4
QmV5b25kVmVjdG9yTGVuCiAKIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1
ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQogewotICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogCiAgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRl
eCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgogICAgIEFTU0VSVChpIDw9
IE1BWF9BUlJBWV9JTkRFWCk7CkBAIC0xOTI1LDE1ICsxOTI1LDE1IEBAIHZvaWQgSlNPYmplY3Q6
OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4KICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0
aChpICsgMSk7CiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGls
bCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KLSAg
ICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSAr
IDEpKSkgeworICAgICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aCh2bSwg
aSArIDEpKSkgewogICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNp
bmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0
b3IuCiAgICAgICAgICAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7Ci0gICAgICAgICAgICBz
dG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAg
ICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgICAg
ICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEg
dmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFk
ZCB0aGUgdmFsdWUuCi0gICAgICAgIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZXhlYy0+
Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChleGVj
LT52bSgpKTsKICAgICAgICAgbWFwLT5wdXRFbnRyeShleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hv
dWxkVGhyb3cpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTk1NCw3ICsxOTU0LDcgQEAg
dm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAgIC8vIFdlIGFyZSBj
dXJyZW50bHkgdXNpbmcgYSBtYXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUg
ZG9pbmcgc28uCiAgICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBp
ZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYg
YWxsb2NhdGlvbiBmYWlscy4KICAgICB1bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOwotICAgIGlmIChtYXAtPnNwYXJz
ZU1vZGUoKSB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0luQXJy
YXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aCkp
IHsKKyAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3Io
bGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+
dm0oKSwgbGVuZ3RoKSkgewogICAgICAgICBtYXAtPnB1dEVudHJ5KGV4ZWMsIHRoaXMsIGksIHZh
bHVlLCBzaG91bGRUaHJvdyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xOTY3LDE5ICsx
OTY3LDE5IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4KICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwogICAgIFNw
YXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CiAgICAg
Zm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB2ZWN0b3JbaXQtPmtleV0uc2V0KGdsb2JhbERh
dGEsIHRoaXMsIGl0LT52YWx1ZS5nZXROb25TcGFyc2VNb2RlKCkpOworICAgICAgICB2ZWN0b3Jb
aXQtPmtleV0uc2V0KHZtLCB0aGlzLCBpdC0+dmFsdWUuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKICAg
ICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKIAogICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJv
cGVydHkgaW50byB0aGUgdmVjdG9yLgogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVT
bG90ID0gdmVjdG9yW2ldOwogICAgIGlmICghdmFsdWVTbG90KQogICAgICAgICArK3N0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRhLCB0aGlz
LCB2YWx1ZSk7CisgICAgdmFsdWVTbG90LnNldCh2bSwgdGhpcywgdmFsdWUpOwogfQogCiB2b2lk
IEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKLSAgICBKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKIAogICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhh
dCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KICAgICBBU1NFUlQoaSA8PSBNQVhf
QVJSQVlfSU5ERVgpOwpAQCAtMTk4OSwyMiArMTk4OSwyMiBAQCB2b2lkIEpTT2JqZWN0OjpwdXRC
eUluZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgICAgIGlmIChpbmRleGluZ1Nob3VsZEJlU3BhcnNl
KCkpIHsKICAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlT
dG9yYWdlKAogICAgICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywKLSAg
ICAgICAgICAgICAgICBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOworICAgICAgICAgICAgICAgIGVuc3VyZUFycmF5U3Rv
cmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSh2bSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGkgPj0gTUlOX1NQQVJTRV9BUlJBWV9J
TkRFWCkgewogICAgICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJh
eVN0b3JhZ2UoCi0gICAgICAgICAgICAgICAgZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBj
cmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOworICAgICAgICAgICAgICAgIGV4
ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRlQXJyYXlTdG9yYWdlKHZtLCAwLCAwKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAoc3RydWN0dXJlKCkt
Pm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpIHsKLSAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBpICsgMSwgZ2V0TmV3VmVjdG9y
TGVuZ3RoKDAsIDAsIGkgKyAxKSk7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5z
ZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKHZtLCBpICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3Ro
KDAsIDAsIGkgKyAxKSk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQodm0s
IHRoaXMsIHZhbHVlKTsKICAgICAgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3Ir
KzsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAg
Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgaSArIDEpW2ldLnNldChnbG9iYWxE
YXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKHZtLCBp
ICsgMSlbaV0uc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAgICAgCkBAIC0yMDQ5LDcgKzIwNDksNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5
b25kVmVjdG9yTGVuCiAKIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFs
dWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSBtb2RlLCBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0g
ZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgCiAgICAg
Ly8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhl
IGN1cnJlbnQgdmVjdG9yLgogICAgIEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSk7CkBAIC0yMDcyLDE1ICsyMDcyLDE1IEBAIGJvb2wgSlNPYmplY3Q6
OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG8KICAgICAgICAgaWYgKExJS0VMWSgKICAgICAgICAg
ICAgICAgICAhYXR0cmlidXRlcwogICAgICAgICAgICAgICAgICYmIChpc0RlbnNlRW5vdWdoRm9y
VmVjdG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKQotICAgICAgICAgICAgICAg
ICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKKyAgICAgICAg
ICAgICAgICAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aCh2bSwgaSArIDEpKSkgewogICAgICAgICAg
ICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVl
biByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCiAgICAgICAgICAgICBzdG9y
YWdlID0gYXJyYXlTdG9yYWdlKCk7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5z
ZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0
b3JbaV0uc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3I7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAg
ICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0
aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KLSAg
ICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChleGVjLT5nbG9iYWxEYXRhKCkpOwor
ICAgICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGV4ZWMtPnZtKCkpOwogICAgICAg
ICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMs
IG1vZGUpOwogICAgIH0KIApAQCAtMjEwMSw3ICsyMTAxLDcgQEAgYm9vbCBKU09iamVjdDo6cHV0
RGlyZWN0SW5kZXhCZXlvbmRWZWN0bwogICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSBt
YXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCiAgICAgLy8g
V2Ugd2lsbCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNl
dCwgYSB2ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWlscy4K
ICAgICB1bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvciArIG1hcC0+c2l6ZSgpOwotICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCBhdHRyaWJ1
dGVzIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkg
fHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkKKyAg
ICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgYXR0cmlidXRlcyB8fCAhaXNEZW5zZUVub3VnaEZv
clZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0
aChleGVjLT52bSgpLCBsZW5ndGgpKQogICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhl
YywgdGhpcywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUpOwogCiAgICAgLy8gUmVyZWFkIG1f
c3RvcmFnZSBhZnRlciBpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5W
ZWN0b3IuCkBAIC0yMTEyLDUxICsyMTEyLDUxIEBAIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdElu
ZGV4QmV5b25kVmVjdG8KICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3Jh
Z2UtPm1fdmVjdG9yOwogICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1hcC0+ZW5kKCk7CiAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB2ZWN0b3Jb
aXQtPmtleV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT52YWx1ZS5nZXROb25TcGFyc2VNb2Rl
KCkpOworICAgICAgICB2ZWN0b3JbaXQtPmtleV0uc2V0KHZtLCB0aGlzLCBpdC0+dmFsdWUuZ2V0
Tm9uU3BhcnNlTW9kZSgpKTsKICAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKIAogICAg
IC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgogICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gdmVjdG9yW2ldOwogICAgIGlmICghdmFsdWVTbG90
KQogICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgdmFsdWVTbG90
LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgdmFsdWVTbG90LnNldCh2bSwgdGhp
cywgdmFsdWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIEpTT2JqZWN0OjpwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpT
VmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSBtb2Rl
KQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogCiAgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBh
cnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgogICAgIEFT
U0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CiAgICAgCiAgICAgaWYgKGF0dHJpYnV0ZXMgJiAo
UmVhZE9ubHkgfCBBY2Nlc3NvcikpCi0gICAgICAgIG5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNj
ZXNzb3JzKGdsb2JhbERhdGEpOworICAgICAgICBub3RpZnlQcmVzZW5jZU9mSW5kZXhlZEFjY2Vz
c29ycyh2bSk7CiAgICAgCiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
IHsKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzogewogICAgICAgICBpZiAoaW5k
ZXhpbmdTaG91bGRCZVNwYXJzZSgpIHx8IGF0dHJpYnV0ZXMpIHsKICAgICAgICAgICAgIHJldHVy
biBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCiAgICAg
ICAgICAgICAgICAgZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsCi0gICAgICAgICAg
ICAgICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgICAgICBlbnN1cmVBcnJheVN0b3JhZ2VFeGlz
dHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUodm0pKTsKICAgICAgICAgfQogICAgICAg
ICBpZiAoaSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKSB7CiAgICAgICAgICAgICByZXR1cm4g
cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAotICAgICAg
ICAgICAgICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjcmVhdGVBcnJheVN0
b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOworICAgICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVl
LCBhdHRyaWJ1dGVzLCBtb2RlLCBjcmVhdGVBcnJheVN0b3JhZ2Uodm0sIDAsIDApKTsKICAgICAg
ICAgfQogICAgICAgICBpZiAoc3RydWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpIHsK
LSAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShn
bG9iYWxEYXRhLCBpICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7Ci0gICAg
ICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUp
OworICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdl
KHZtLCBpICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7CisgICAgICAgICAg
ICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICAgICAgICAg
IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBjcmVhdGVJbml0aWFsQ29udGlndW91cyhn
bG9iYWxEYXRhLCBpICsgMSlbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAg
ICAgY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXModm0sIGkgKyAxKVtpXS5zZXQodm0sIHRoaXMsIHZh
bHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFM
TF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgY29udmVydFVuZGVjaWRlZEZv
clZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdmFsdWUpOworICAgICAgICBjb252ZXJ0VW5kZWNp
ZGVkRm9yVmFsdWUoZXhlYy0+dm0oKSwgdmFsdWUpOwogICAgICAgICAvLyBSZWxvb3AuCiAgICAg
ICAgIHJldHVybiBwdXREaXJlY3RJbmRleChleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9k
ZSk7CiAgICAgfQpAQCAtMjE2NCwxMCArMjE2NCwxMCBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3RvCiAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6IHsK
ICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpIHsKICAgICAg
ICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0
b3JhZ2UoCi0gICAgICAgICAgICAgICAgZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUs
IGNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgICAg
ICBleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY29udmVydEludDMyVG9BcnJheVN0
b3JhZ2Uodm0pKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIXZhbHVlLmlzSW50MzIoKSkgewot
ICAgICAgICAgICAgY29udmVydEludDMyRm9yVmFsdWUoZ2xvYmFsRGF0YSwgdmFsdWUpOworICAg
ICAgICAgICAgY29udmVydEludDMyRm9yVmFsdWUodm0sIHZhbHVlKTsKICAgICAgICAgICAgIHJl
dHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBpLCB2YWx1ZSwgYXR0
cmlidXRlcywgbW9kZSk7CiAgICAgICAgIH0KICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aFdpdGhvdXRBdHRyaWJ1dGVzPEludDMyU2hhcGU+KGV4ZWMsIGksIHZhbHVlKTsKQEAg
LTIxNzcsMTUgKzIxNzcsMTUgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRW
ZWN0bwogICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBpZiAo
YXR0cmlidXRlcyAmIChSZWFkT25seSB8IEFjY2Vzc29yKSkgewogICAgICAgICAgICAgcmV0dXJu
IHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKLSAgICAg
ICAgICAgICAgICBleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY29udmVydERvdWJs
ZVRvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgICAgICBleGVjLCBpLCB2
YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKHZtKSk7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKSB7Ci0gICAgICAgICAg
ICBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKGdsb2JhbERhdGEpOworICAgICAgICAgICAgY29u
dmVydERvdWJsZVRvQ29udGlndW91cyh2bSk7CiAgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUp
OwogICAgICAgICB9CiAgICAgICAgIGRvdWJsZSB2YWx1ZUFzRG91YmxlID0gdmFsdWUuYXNOdW1i
ZXIoKTsKICAgICAgICAgaWYgKHZhbHVlQXNEb3VibGUgIT0gdmFsdWVBc0RvdWJsZSkgewotICAg
ICAgICAgICAgY29udmVydERvdWJsZVRvQ29udGlndW91cyhnbG9iYWxEYXRhKTsKKyAgICAgICAg
ICAgIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXModm0pOwogICAgICAgICAgICAgcmV0dXJuIHB1
dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVz
LCBtb2RlKTsKICAgICAgICAgfQogICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
V2l0aG91dEF0dHJpYnV0ZXM8RG91YmxlU2hhcGU+KGV4ZWMsIGksIHZhbHVlKTsKQEAgLTIxOTUs
NyArMjE5NSw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG8KICAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGlmIChhdHRy
aWJ1dGVzICYgKFJlYWRPbmx5IHwgQWNjZXNzb3IpKSB7CiAgICAgICAgICAgICByZXR1cm4gcHV0
RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAotICAgICAgICAg
ICAgICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjb252ZXJ0Q29udGlndW91
c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgICAgICBleGVjLCBpLCB2
YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZSh2
bSkpOwogICAgICAgICB9CiAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRo
b3V0QXR0cmlidXRlczxDb250aWd1b3VzU2hhcGU+KGV4ZWMsIGksIHZhbHVlKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC0yMjE3LDcgKzIyMTcsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXREaXJl
Y3ROYXRpdmVGdW5jdGlvbihFCiAgICAgCiAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPQogICAg
ICAgICBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbkxlbmd0
aCwgbmFtZSwgbmF0aXZlRnVuY3Rpb24sIGludHJpbnNpYyk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBmdW5jdGlvbiwgYXR0cmlidXRlcyk7CisgICAg
cHV0RGlyZWN0KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSwgZnVuY3Rpb24sIGF0dHJpYnV0ZXMp
OwogfQogCiBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWZWN0b3JMZW5n
dGgodW5zaWduZWQgY3VycmVudFZlY3Rvckxlbmd0aCwgdW5zaWduZWQgY3VycmVudExlbmd0aCwg
dW5zaWduZWQgZGVzaXJlZExlbmd0aCkKQEAgLTIzMDYsNyArMjMwNiw3IEBAIHVuc2lnbmVkIEpT
T2JqZWN0Ojpjb3VudEVsZW1lbnRzKCkKICAgICB9CiB9CiAKLWJvb2wgSlNPYmplY3Q6OmluY3Jl
YXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbmV3TGVu
Z3RoKQorYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIHZtLCB1bnNpZ25l
ZCBuZXdMZW5ndGgpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGlu
IGFuIGludGVybmFsbHkgaW5jb25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1v
dmUgYW55IHZhbHVlcyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAKICAgICAvLyB0byB0aGUgdmVjdG9y
LiBDYWxsZXJzIGhhdmUgdG8gYWNjb3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBp
dCBtb3JlIGVmZmljaWVudGx5LgpAQCAtMjMyNiw3ICsyMzI2LDcgQEAgYm9vbCBKU09iamVjdDo6
aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbAogCiAgICAgLy8gRmFzdCBjYXNlIC0gdGhlcmUgaXMg
bm8gcHJlY2FwYWNpdHkuIEluIHRoZXNlIGNhc2VzIGEgcmVhbGxvYyBtYWtlcyBzZW5zZS4KICAg
ICBpZiAoTElLRUxZKCFpbmRleEJpYXMpKSB7Ci0gICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVy
Zmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPmdyb3dBcnJheVJpZ2h0KGdsb2JhbERhdGEsIHN0
cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgQXJyYXlT
dG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdW
ZWN0b3JMZW5ndGgpKTsKKyAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdl
LT5idXR0ZXJmbHkoKS0+Z3Jvd0FycmF5UmlnaHQodm0sIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rv
ckxlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKICAgICAg
ICAgaWYgKCFuZXdCdXR0ZXJmbHkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OwpAQCAtMjMzNyw3ICsyMzM3LDcgQEAgYm9vbCBK
U09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbAogICAgIC8vIFJlbW92ZSBzb21lLCBi
dXQgbm90IGFsbCBvZiB0aGUgcHJlY2FwYWNpdHkuIEF0b21pYyBkZWNheSwgJiBjYXBwZWQgdG8g
bm90IG92ZXJmbG93IGFycmF5IGxlbmd0aC4KICAgICB1bnNpZ25lZCBuZXdJbmRleEJpYXMgPSBz
dGQ6Om1pbihpbmRleEJpYXMgPj4gMSwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIG5ld1Zl
Y3Rvckxlbmd0aCk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0
ZXJmbHkoKS0+cmVzaXplQXJyYXkoCi0gICAgICAgIGdsb2JhbERhdGEsCisgICAgICAgIHZtLAog
ICAgICAgICBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgQXJyYXlTdG9y
YWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCksCiAgICAgICAgIG5ld0luZGV4QmlhcywgdHJ1ZSwg
QXJyYXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkpOwogICAgIGlmICghbmV3QnV0
dGVyZmx5KQpAQCAtMjM0OSw3ICsyMzQ5LDcgQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0
b3JMZW5ndGgoSlNHbAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEpTT2JqZWN0OjplbnN1
cmVMZW5ndGhTbG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoKQor
dm9pZCBKU09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyhWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkK
IHsKICAgICBBU1NFUlQobGVuZ3RoIDwgTUFYX0FSUkFZX0lOREVYKTsKICAgICBBU1NFUlQoaGFz
Q29udGlndW91cyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHx8IGhhc0ludDMyKHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgfHwgaGFzRG91YmxlKHN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKSkgfHwgaGFzVW5kZWNpZGVkKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOwpA
QCAtMjM2MCw3ICsyMzYwLDcgQEAgdm9pZCBKU09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyhKU0ds
b2JhbAogICAgICAgICBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICB1bnNpZ25lZCBv
bGRWZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgbV9idXR0
ZXJmbHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoCi0gICAgICAgIGdsb2JhbERhdGEs
IHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwKKyAg
ICAgICAgdm0sIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwg
dHJ1ZSwKICAgICAgICAgb2xkVmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSwK
ICAgICAgICAgbmV3VmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CiAgICAg
aWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSB7CkBAIC0yMzcwLDIx
ICsyMzcwLDIxIEBAIHZvaWQgSlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3coSlNHbG9iYWwKICAg
ICBtX2J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiB9CiAKLUJ1
dHRlcmZseSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQorQnV0dGVyZmx5KiBKU09i
amVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoVk0mIHZtLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90
IG5ld1NpemUpCiB7CiAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKIAogICAgIC8vIEl0
J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBub3QgcmVseSBvbiBzdHJ1Y3R1cmUoKSwg
Zm9yIHRoZSBwcm9wZXJ0eQogICAgIC8vIGNhcGFjaXR5LCBzaW5jZSB3ZSBtaWdodCBoYXZlIGFs
cmVhZHkgbXV0YXRlZCB0aGUgc3RydWN0dXJlIGluLXBsYWNlLgogICAgIAotICAgIHJldHVybiBt
X2J1dHRlcmZseS0+Z3Jvd1Byb3BlcnR5U3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwg
b2xkU2l6ZSwgbmV3U2l6ZSk7CisgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5ncm93UHJvcGVydHlT
dG9yYWdlKHZtLCBzdHJ1Y3R1cmUoKSwgb2xkU2l6ZSwgbmV3U2l6ZSk7CiB9CiAKIGJvb2wgSlNP
YmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikKIHsKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gMDsKICAgICBKU0NlbGwq
IGNlbGwgPSAwOwotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG9iamVjdC0+c3RydWN0dXJl
KCktPmdldChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgY2Vs
bCk7CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2V0
KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgY2VsbCk7CiAgICAgaWYgKGlz
VmFsaWRPZmZzZXQob2Zmc2V0KSkgewogICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Io
b2JqZWN0LT5nZXREaXJlY3Qob2Zmc2V0KSwgYXR0cmlidXRlcyk7CiAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtMjQ2OCw5ICsyNDY4LDkgQEAgc3RhdGljIGJvb2wgcHV0RGVzY3JpcHRvcihFeGVj
U3RhdGUqIGV4ZQogICAgICAgICBpZiAoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkg
JiYgb2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7CiAgICAgICAgICAgICBH
ZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7CiAgICAg
ICAgICAgICBpZiAob2xkRGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkpCi0gICAgICAgICAgICAg
ICAgYWNjZXNzb3ItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIG9sZERlc2NyaXB0b3Iu
Z2V0dGVyT2JqZWN0KCkpOworICAgICAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhl
Yy0+dm0oKSwgb2xkRGVzY3JpcHRvci5nZXR0ZXJPYmplY3QoKSk7CiAgICAgICAgICAgICBpZiAo
b2xkRGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkpCi0gICAgICAgICAgICAgICAgYWNjZXNzb3It
PnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIG9sZERlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0
KCkpOworICAgICAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+dm0oKSwgb2xk
RGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKSk7CiAgICAgICAgICAgICB0YXJnZXQtPnB1dERpcmVj
dEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5TmFtZSwgYWNjZXNzb3IsIGF0dHJpYnV0ZXMgfCBBY2Nl
c3Nvcik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMjQ3OSw3ICsy
NDc5LDcgQEAgc3RhdGljIGJvb2wgcHV0RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZQogICAgICAg
ICAgICAgbmV3VmFsdWUgPSBkZXNjcmlwdG9yLnZhbHVlKCk7CiAgICAgICAgIGVsc2UgaWYgKG9s
ZERlc2NyaXB0b3IudmFsdWUoKSkKICAgICAgICAgICAgIG5ld1ZhbHVlID0gb2xkRGVzY3JpcHRv
ci52YWx1ZSgpOwotICAgICAgICB0YXJnZXQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCks
IHByb3BlcnR5TmFtZSwgbmV3VmFsdWUsIGF0dHJpYnV0ZXMgJiB+QWNjZXNzb3IpOworICAgICAg
ICB0YXJnZXQtPnB1dERpcmVjdChleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUsIG5ld1ZhbHVlLCBh
dHRyaWJ1dGVzICYgfkFjY2Vzc29yKTsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25s
eSkKICAgICAgICAgICAgIHRhcmdldC0+c3RydWN0dXJlKCktPnNldENvbnRhaW5zUmVhZE9ubHlQ
cm9wZXJ0aWVzKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjQ4OCwxMyArMjQ4OCwxMyBA
QCBzdGF0aWMgYm9vbCBwdXREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlCiAgICAgR2V0dGVyU2V0
dGVyKiBhY2Nlc3NvciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKGV4ZWMpOwogCiAgICAgaWYgKGRl
c2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpKQotICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGV4
ZWMtPmdsb2JhbERhdGEoKSwgZGVzY3JpcHRvci5nZXR0ZXJPYmplY3QoKSk7CisgICAgICAgIGFj
Y2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+dm0oKSwgZGVzY3JpcHRvci5nZXR0ZXJPYmplY3QoKSk7
CiAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkpCi0gICAgICAgIGFj
Y2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBvbGREZXNjcmlwdG9yLmdldHRl
ck9iamVjdCgpKTsKKyAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihleGVjLT52bSgpLCBvbGRE
ZXNjcmlwdG9yLmdldHRlck9iamVjdCgpKTsKICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVz
ZW50KCkpCi0gICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBk
ZXNjcmlwdG9yLnNldHRlck9iamVjdCgpKTsKKyAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihl
eGVjLT52bSgpLCBkZXNjcmlwdG9yLnNldHRlck9iamVjdCgpKTsKICAgICBlbHNlIGlmIChvbGRE
ZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSkKLSAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihl
eGVjLT5nbG9iYWxEYXRhKCksIG9sZERlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCkpOworICAgICAg
ICBhY2Nlc3Nvci0+c2V0U2V0dGVyKGV4ZWMtPnZtKCksIG9sZERlc2NyaXB0b3Iuc2V0dGVyT2Jq
ZWN0KCkpOwogCiAgICAgdGFyZ2V0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCBwcm9wZXJ0eU5h
bWUsIGFjY2Vzc29yLCBhdHRyaWJ1dGVzIHwgQWNjZXNzb3IpOwogICAgIHJldHVybiB0cnVlOwpA
QCAtMjUwNCw3ICsyNTA0LDcgQEAgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0TWF5QmVJbmRleChF
eGVjUwogewogICAgIHVuc2lnbmVkIGFzSW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwog
ICAgIGlmIChhc0luZGV4ID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKLSAgICAgICAgcHV0
RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgICAg
IHB1dERpcmVjdChleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKICAgICBlbHNlCiAg
ICAgICAgIHB1dERpcmVjdEluZGV4KGV4ZWMsIGFzSW5kZXgsIHZhbHVlKTsKIH0KQEAgLTI1MTIs
MTggKzI1MTIsMTggQEAgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0TWF5QmVJbmRleChFeGVjUwog
Y2xhc3MgRGVmaW5lT3duUHJvcGVydHlTY29wZSB7CiBwdWJsaWM6CiAgICAgRGVmaW5lT3duUHJv
cGVydHlTY29wZShFeGVjU3RhdGUqIGV4ZWMpCi0gICAgICAgIDogbV9nbG9iYWxEYXRhKGV4ZWMt
Pmdsb2JhbERhdGEoKSkKKyAgICAgICAgOiBtX3ZtKGV4ZWMtPnZtKCkpCiAgICAgewotICAgICAg
ICBtX2dsb2JhbERhdGEuc2V0SW5EZWZpbmVPd25Qcm9wZXJ0eSh0cnVlKTsKKyAgICAgICAgbV92
bS5zZXRJbkRlZmluZU93blByb3BlcnR5KHRydWUpOwogICAgIH0KIAogICAgIH5EZWZpbmVPd25Q
cm9wZXJ0eVNjb3BlKCkKICAgICB7Ci0gICAgICAgIG1fZ2xvYmFsRGF0YS5zZXRJbkRlZmluZU93
blByb3BlcnR5KGZhbHNlKTsKKyAgICAgICAgbV92bS5zZXRJbkRlZmluZU93blByb3BlcnR5KGZh
bHNlKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSlNHbG9iYWxEYXRhJiBtX2dsb2JhbERhdGE7
CisgICAgVk0mIG1fdm07CiB9OwogCiBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFBy
b3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQpAQCAtMjYyNCwx
NCArMjYyNCwxNCBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9Ci0gICAgSlNWYWx1ZSBh
Y2Nlc3NvciA9IGdldERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7Cisg
ICAgSlNWYWx1ZSBhY2Nlc3NvciA9IGdldERpcmVjdChleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUp
OwogICAgIGlmICghYWNjZXNzb3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBHZXR0ZXJT
ZXR0ZXIqIGdldHRlclNldHRlciA9IGFzR2V0dGVyU2V0dGVyKGFjY2Vzc29yKTsKICAgICBpZiAo
ZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkpCi0gICAgICAgIGdldHRlclNldHRlci0+c2V0U2V0
dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgZGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKSk7CisgICAg
ICAgIGdldHRlclNldHRlci0+c2V0U2V0dGVyKGV4ZWMtPnZtKCksIGRlc2NyaXB0b3Iuc2V0dGVy
T2JqZWN0KCkpOwogICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSkKLSAgICAgICAg
Z2V0dGVyU2V0dGVyLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBkZXNjcmlwdG9yLmdl
dHRlck9iamVjdCgpKTsKKyAgICAgICAgZ2V0dGVyU2V0dGVyLT5zZXRHZXR0ZXIoZXhlYy0+dm0o
KSwgZGVzY3JpcHRvci5nZXR0ZXJPYmplY3QoKSk7CiAgICAgaWYgKGN1cnJlbnQuYXR0cmlidXRl
c0VxdWFsKGRlc2NyaXB0b3IpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBtZXRob2RUYWJs
ZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxNDg2NTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSAiUHV0UHJvcGVydHlTbG90LmgiCiAKICNpbmNs
dWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJW
TS5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIgpAQCAtMTIxLDggKzEyMSw4IEBA
IHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShj
b25zdCBKU09iamVjdCopOwogCiAgICAgSlNWYWx1ZSBwcm90b3R5cGUoKSBjb25zdDsKLSAgICB2
b2lkIHNldFByb3RvdHlwZShKU0dsb2JhbERhdGEmLCBKU1ZhbHVlIHByb3RvdHlwZSk7Ci0gICAg
Ym9vbCBzZXRQcm90b3R5cGVXaXRoQ3ljbGVDaGVjayhKU0dsb2JhbERhdGEmLCBKU1ZhbHVlIHBy
b3RvdHlwZSk7CisgICAgdm9pZCBzZXRQcm90b3R5cGUoVk0mLCBKU1ZhbHVlIHByb3RvdHlwZSk7
CisgICAgYm9vbCBzZXRQcm90b3R5cGVXaXRoQ3ljbGVDaGVjayhWTSYsIEpTVmFsdWUgcHJvdG90
eXBlKTsKICAgICAgICAgCiAgICAgYm9vbCBtYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKQog
ICAgIHsKQEAgLTE2Miw3ICsxNjIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwdXRCeUluZGV4SW5s
aW5lKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVl
LCBib29sIHNob3VsZFRocm93KQogICAgIHsKICAgICAgICAgaWYgKGNhblNldEluZGV4UXVpY2ts
eShwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICBzZXRJbmRleFF1aWNrbHkoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgIHNldEluZGV4UXVp
Y2tseShleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICBtZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KHRoaXMsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKQEAgLTE3Niw3ICsxNzYsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBwdXREaXJlY3RJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0
RGlyZWN0SW5kZXhNb2RlIG1vZGUpCiAgICAgewogICAgICAgICBpZiAoIWF0dHJpYnV0ZXMgJiYg
Y2FuU2V0SW5kZXhRdWlja2x5Rm9yUHV0RGlyZWN0KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAg
ICAgIHNldEluZGV4UXVpY2tseShleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFs
dWUpOworICAgICAgICAgICAgc2V0SW5kZXhRdWlja2x5KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFt
ZSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUpOwpAQCAtMzE2LDIwICszMTYsMjAgQEAgcHVibGlj
OgogICAgICAgICB9CiAgICAgfQogICAgICAgICAKLSAgICB2b2lkIHNldEluZGV4UXVpY2tseShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKKyAgICB2b2lk
IHNldEluZGV4UXVpY2tseShWTSYgdm0sIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKICAgICB7CiAg
ICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNh
c2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICBBU1NFUlQoaSA8IG1f
YnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgICAgICBpZiAoIXYuaXNJbnQzMigp
KSB7Ci0gICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGVPckNvbnRpZ3VvdXNXaGls
ZVBlcmZvcm1pbmdTZXRJbmRleChnbG9iYWxEYXRhLCBpLCB2KTsKKyAgICAgICAgICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZU9yQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KHZt
LCBpLCB2KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAvLyBGYWxsIHRocm91Z2ggdG8gY29udGlndW91cyBjYXNlLgogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgIEFT
U0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgICAgIG1fYnV0
dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAg
ICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQodm0sIHRoaXMsIHYpOwogICAg
ICAgICAgICAgaWYgKGkgPj0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQogICAgICAgICAg
ICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgoaSArIDEpOwogICAgICAgICAgICAg
YnJlYWs7CkBAIC0zMzcsMTIgKzMzNywxMiBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQUxMX0RP
VUJMRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgICAgICAgICAgaWYgKCF2LmlzTnVtYmVyKCkpIHsKLSAg
ICAgICAgICAgICAgICBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0
SW5kZXgoZ2xvYmFsRGF0YSwgaSwgdik7CisgICAgICAgICAgICAgICAgY29udmVydERvdWJsZVRv
Q29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KHZtLCBpLCB2KTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkb3VibGUgdmFsdWUgPSB2
LmFzTnVtYmVyKCk7CiAgICAgICAgICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHsKLSAgICAgICAg
ICAgICAgICBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXgo
Z2xvYmFsRGF0YSwgaSwgdik7CisgICAgICAgICAgICAgICAgY29udmVydERvdWJsZVRvQ29udGln
dW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KHZtLCBpLCB2KTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91
c0RvdWJsZSgpW2ldID0gdmFsdWU7CkBAIC0zNTQsNyArMzU0LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OwogICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gc3RvcmFnZS0+bV92ZWN0
b3JbaV07CiAgICAgICAgICAgICBKU1ZhbHVlIG9sZCA9IHguZ2V0KCk7Ci0gICAgICAgICAgICB4
LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAgIHguc2V0KHZtLCB0aGlzLCB2
KTsKICAgICAgICAgICAgIGlmICghb2xkKSB7CiAgICAgICAgICAgICAgICAgKytzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yOwogICAgICAgICAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxl
bmd0aCgpKQpAQCAtMzY3LDE4ICszNjcsMTggQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQog
ICAgICAgICAKLSAgICB2b2lkIGluaXRpYWxpemVJbmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKKyAgICB2b2lkIGluaXRpYWxpemVJbmRleChWTSYg
dm0sIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKICAgICB7CiAgICAgICAgIHN3aXRjaCAoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRF
WElOR19UWVBFUzogewotICAgICAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9VbmRlY2lkZWQoZ2xv
YmFsRGF0YSwgaSwgdik7CisgICAgICAgICAgICBzZXRJbmRleFF1aWNrbHlUb1VuZGVjaWRlZCh2
bSwgaSwgdik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEFM
TF9JTlQzMl9JTkRFWElOR19UWVBFUzogewogICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCkpOwogICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgICAgICAgICAgaWYgKCF2LmlzSW50MzIoKSkgewotICAg
ICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlT3JDb250aWd1b3VzV2hpbGVQZXJmb3Jt
aW5nU2V0SW5kZXgoZ2xvYmFsRGF0YSwgaSwgdik7CisgICAgICAgICAgICAgICAgY29udmVydElu
dDMyVG9Eb3VibGVPckNvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRleCh2bSwgaSwgdik7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBG
YWxsIHRocm91Z2guCkBAIC0zODYsMTkgKzM4NiwxOSBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2Ug
QUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgIEFTU0VSVChpIDwg
bV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKICAgICAgICAgICAgIEFTU0VSVChpIDwgbV9i
dXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgbV9idXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQodm0sIHRoaXMsIHYpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7
CiAgICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CiAg
ICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CiAgICAg
ICAgICAgICBpZiAoIXYuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgICAgIGNvbnZlcnREb3Vi
bGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRleChnbG9iYWxEYXRhLCBpLCB2KTsK
KyAgICAgICAgICAgICAgICBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzV2hpbGVQZXJmb3JtaW5n
U2V0SW5kZXgodm0sIGksIHYpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IHYuYXNOdW1iZXIoKTsKICAgICAgICAgICAg
IGlmICh2YWx1ZSAhPSB2YWx1ZSkgewotICAgICAgICAgICAgICAgIGNvbnZlcnREb3VibGVUb0Nv
bnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRleChnbG9iYWxEYXRhLCBpLCB2KTsKKyAgICAg
ICAgICAgICAgICBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5k
ZXgodm0sIGksIHYpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSB2YWx1ZTsKQEAg
LTQwOCw3ICs0MDgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgICAgICBBU1NFUlQoaSA8
IHN0b3JhZ2UtPmxlbmd0aCgpKTsKICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5z
ZXQodm0sIHRoaXMsIHYpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ZGVmYXVsdDoKQEAgLTQ1MCw3ICs0NTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAg
ICAgICAgIAotICAgIHZvaWQgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0
YSYpOworICAgIHZvaWQgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKFZNJik7CiAKICAgICAv
LyBwdXREaXJlY3QgaXMgZWZmZWN0aXZlbHkgYW4gdW5jaGVja2VkIHZlc2lvbiBvZiAnZGVmaW5l
T3duUHJvcGVydHknOgogICAgIC8vICAtIHRoZSBwcm90b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1
bHRlZApAQCAtNDU4LDkgKzQ1OCw5IEBAIHB1YmxpYzoKICAgICAvLyAgLSBhdHRyaWJ1dGVzIHdp
bGwgYmUgcmVzcGVjdGVkIChhZnRlciB0aGUgY2FsbCB0aGUgcHJvcGVydHkgd2lsbCBleGlzdCB3
aXRoIHRoZSBnaXZlbiBhdHRyaWJ1dGVzKQogICAgIC8vICAtIHRoZSBwcm9wZXJ0eSBuYW1lIGlz
IGFzc3VtZWQgdG8gbm90IGJlIGFuIGluZGV4LgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIHB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwotICAgIHZvaWQgcHV0RGlyZWN0KEpT
R2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyA9
IDApOwotICAgIHZvaWQgcHV0RGlyZWN0KEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7Ci0gICAgdm9pZCBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbihKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMgPSAwKTsKKyAgICB2b2lkIHB1dERpcmVjdChWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgdW5zaWduZWQgYXR0cmlidXRlcyA9IDApOworICAgIHZvaWQgcHV0RGlyZWN0KFZNJiwgUHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICB2b2lkIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzID0gMCk7CiAgICAgdm9pZCBwdXREaXJlY3RBY2Nlc3NvcihFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogCiAgICAgYm9vbCBw
cm9wZXJ0eUlzRW51bWVyYWJsZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUpIGNvbnN0OwpAQCAtNDkzLDE2ICs0OTMsMTYgQEAgcHVibGljOgogICAgIGJvb2wgZ2V0
UHJvcGVydHlTcGVjaWZpY1ZhbHVlKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNDZWxsKiYg
c3BlY2lmaWNGdW5jdGlvbikgY29uc3Q7CiAKICAgICAvLyBUaGlzIGdldCBmdW5jdGlvbiBvbmx5
IGxvb2tzIGF0IHRoZSBwcm9wZXJ0eSBtYXAuCi0gICAgSlNWYWx1ZSBnZXREaXJlY3QoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAorICAg
IEpTVmFsdWUgZ2V0RGlyZWN0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29u
c3QKICAgICB7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5n
ZXQoZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gc3RydWN0dXJlKCktPmdldCh2bSwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgY2hlY2tP
ZmZzZXQob2Zmc2V0LCBzdHJ1Y3R1cmUoKS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIHJl
dHVybiBvZmZzZXQgIT0gaW52YWxpZE9mZnNldCA/IGdldERpcmVjdChvZmZzZXQpIDogSlNWYWx1
ZSgpOwogICAgIH0KIAotICAgIFByb3BlcnR5T2Zmc2V0IGdldERpcmVjdE9mZnNldChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCisgICAgUHJvcGVy
dHlPZmZzZXQgZ2V0RGlyZWN0T2Zmc2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSkKICAgICB7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5n
ZXQoZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gc3RydWN0dXJlKCktPmdldCh2bSwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgY2hlY2tP
ZmZzZXQob2Zmc2V0LCBzdHJ1Y3R1cmUoKS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIHJl
dHVybiBvZmZzZXQ7CiAgICAgfQpAQCAtNTQ3LDkgKzU0Nyw5IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuICZvdXRPZkxpbmVTdG9yYWdlKClbb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNl
dCldOwogICAgIH0KIAotICAgIHZvaWQgdHJhbnNpdGlvblRvKEpTR2xvYmFsRGF0YSYsIFN0cnVj
dHVyZSopOworICAgIHZvaWQgdHJhbnNpdGlvblRvKFZNJiwgU3RydWN0dXJlKik7CiAKLSAgICBi
b29sIHJlbW92ZURpcmVjdChKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUpOyAvLyBSZXR1cm4g
dHJ1ZSBpZiBhbnl0aGluZyBpcyByZW1vdmVkLgorICAgIGJvb2wgcmVtb3ZlRGlyZWN0KFZNJiwg
UHJvcGVydHlOYW1lKTsgLy8gUmV0dXJuIHRydWUgaWYgYW55dGhpbmcgaXMgcmVtb3ZlZC4KICAg
ICBib29sIGhhc0N1c3RvbVByb3BlcnRpZXMoKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+ZGlkVHJh
bnNpdGlvbigpOyB9CiAgICAgYm9vbCBoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgeyByZXR1
cm4gc3RydWN0dXJlKCktPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKTsgfQogCkBAIC01NTgs
MTEgKzU1OCwxMSBAQCBwdWJsaWM6CiAgICAgLy8gIC0gcHJvdmlkZXMgbm8gc3BlY2lhbCBoYW5k
bGluZyBmb3IgX19wcm90b19fCiAgICAgLy8gIC0gZG9lcyBub3Qgd2FsayB0aGUgcHJvdG90eXBl
IGNoYWluICh0byBjaGVjayBmb3IgYWNjZXNzb3JzIG9yIG5vbi13cml0YWJsZSBwcm9wZXJ0aWVz
KS4KICAgICAvLyBUaGlzIGlzIHVzZWQgYnkgSlNBY3RpdmF0aW9uLgotICAgIGJvb2wgcHV0T3du
RGF0YVByb3BlcnR5KEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJv
cGVydHlTbG90Jik7CisgICAgYm9vbCBwdXRPd25EYXRhUHJvcGVydHkoVk0mLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgLy8gRmFzdCBhY2Nlc3MgdG8g
a25vd24gcHJvcGVydHkgb2Zmc2V0cy4KICAgICBKU1ZhbHVlIGdldERpcmVjdChQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQpIGNvbnN0IHsgcmV0dXJuIGxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCktPmdl
dCgpOyB9Ci0gICAgdm9pZCBwdXREaXJlY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQsIEpTVmFsdWUgdmFsdWUpIHsgbG9jYXRpb25Gb3JPZmZzZXQob2Zm
c2V0KS0+c2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsgfQorICAgIHZvaWQgcHV0RGlyZWN0
KFZNJiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1ZhbHVlIHZhbHVlKSB7IGxvY2F0aW9u
Rm9yT2Zmc2V0KG9mZnNldCktPnNldCh2bSwgdGhpcywgdmFsdWUpOyB9CiAgICAgdm9pZCBwdXRE
aXJlY3RVbmRlZmluZWQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSB7IGxvY2F0aW9uRm9yT2Zmc2V0
KG9mZnNldCktPnNldFVuZGVmaW5lZCgpOyB9CiAKICAgICB2b2lkIHB1dERpcmVjdE5hdGl2ZUZ1
bmN0aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgUHJvcGVydHlOYW1lJiwg
dW5zaWduZWQgZnVuY3Rpb25MZW5ndGgsIE5hdGl2ZUZ1bmN0aW9uLCBJbnRyaW5zaWMsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMpOwpAQCAtNTc1LDExICs1NzUsMTEgQEAgcHVibGljOgogICAgIGJvb2wg
aXNBY3RpdmF0aW9uT2JqZWN0KCkgY29uc3Q7CiAgICAgYm9vbCBpc0Vycm9ySW5zdGFuY2UoKSBj
b25zdDsKIAotICAgIHZvaWQgc2VhbChKU0dsb2JhbERhdGEmKTsKLSAgICB2b2lkIGZyZWV6ZShK
U0dsb2JhbERhdGEmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByZXZlbnRFeHRlbnNp
b25zKEpTR2xvYmFsRGF0YSYpOwotICAgIGJvb2wgaXNTZWFsZWQoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+aXNTZWFsZWQoZ2xvYmFsRGF0YSk7IH0KLSAg
ICBib29sIGlzRnJvemVuKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkgeyByZXR1cm4gc3RydWN0
dXJlKCktPmlzRnJvemVuKGdsb2JhbERhdGEpOyB9CisgICAgdm9pZCBzZWFsKFZNJik7CisgICAg
dm9pZCBmcmVlemUoVk0mKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByZXZlbnRFeHRl
bnNpb25zKFZNJik7CisgICAgYm9vbCBpc1NlYWxlZChWTSYgdm0pIHsgcmV0dXJuIHN0cnVjdHVy
ZSgpLT5pc1NlYWxlZCh2bSk7IH0KKyAgICBib29sIGlzRnJvemVuKFZNJiB2bSkgeyByZXR1cm4g
c3RydWN0dXJlKCktPmlzRnJvemVuKHZtKTsgfQogICAgIGJvb2wgaXNFeHRlbnNpYmxlKCkgeyBy
ZXR1cm4gc3RydWN0dXJlKCktPmlzRXh0ZW5zaWJsZSgpOyB9CiAgICAgYm9vbCBpbmRleGluZ1No
b3VsZEJlU3BhcnNlKCkKICAgICB7CkBAIC01OTAsMTYgKzU5MCwxNiBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBzdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCkgeyByZXR1cm4gc3RydWN0dXJlKCktPnN0YXRp
Y0Z1bmN0aW9uc1JlaWZpZWQoKTsgfQogICAgIHZvaWQgcmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JE
ZWxldGUoRXhlY1N0YXRlKiBleGVjKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZs
eSogZ3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFNpemUsIHNp
emVfdCBuZXdTaXplKTsKLSAgICB2b2lkIHNldEJ1dHRlcmZseShKU0dsb2JhbERhdGEmLCBCdXR0
ZXJmbHkqLCBTdHJ1Y3R1cmUqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBCdXR0ZXJmbHkqIGdy
b3dPdXRPZkxpbmVTdG9yYWdlKFZNJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsK
KyAgICB2b2lkIHNldEJ1dHRlcmZseShWTSYsIEJ1dHRlcmZseSosIFN0cnVjdHVyZSopOwogICAg
IHZvaWQgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKEJ1dHRlcmZseSopOyAv
LyBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBjYWxsIHRoaXMuCiAgICAgICAgIAotICAgIHZv
aWQgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERh
dGEmLCB1bnNpZ25lZCBvbGRDYXBhY2l0eSwgU3RydWN0dXJlKik7Ci0gICAgdm9pZCBzZXRTdHJ1
Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYsIFN0cnVj
dHVyZSopOworICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vz
c2FyeShWTSYsIHVuc2lnbmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIHNl
dFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoVk0mLCBTdHJ1Y3R1cmUq
KTsKIAotICAgIHZvaWQgZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQorICAgIHZvaWQgZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoVk0mIHZtKQogICAgIHsK
LSAgICAgICAgc3RydWN0dXJlKCktPmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKGdsb2JhbERh
dGEsIHRoaXMpOworICAgICAgICBzdHJ1Y3R1cmUoKS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1
cmUodm0sIHRoaXMpOwogICAgIH0KIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qo
KSBjb25zdApAQCAtNjA5LDcgKzYwOSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0cnVj
dHVyZSgpLT5nbG9iYWxPYmplY3QoKTsKICAgICB9CiAgICAgICAgIAotICAgIHZvaWQgc3dpdGNo
VG9TbG93UHV0QXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYpOworICAgIHZvaWQgc3dpdGNoVG9T
bG93UHV0QXJyYXlTdG9yYWdlKFZNJik7CiAgICAgICAgIAogICAgIC8vIFRoZSByZWNlaXZlciBp
cyB0aGUgcHJvdG90eXBlIGluIHRoaXMgY2FzZS4gVGhlIGZvbGxvd2luZzoKICAgICAvLwpAQCAt
NjI0LDU3ICs2MjQsNTcgQEAgcHVibGljOgogICAgIC8vIGluZGV4aW5nIHNob3VsZCBiZSBzcGFy
c2UsIHdlJ3JlIGhhdmluZyBhIGJhZCB0aW1lLCBvciBiZWNhdXNlCiAgICAgLy8gd2UgYWxyZWFk
eSBoYXZlIGEgbW9yZSBnZW5lcmFsIGZvcm0gb2Ygc3RvcmFnZSAoZG91YmxlLAogICAgIC8vIGNv
bnRpZ3VvdXMsIGFycmF5IHN0b3JhZ2UpLgotICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBlbnN1cmVJ
bnQzMihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgQ29udGlndW91c0pTVmFsdWVzIGVu
c3VyZUludDMyKFZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkoaGFzSW50MzIoc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSkpCiAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJm
bHktPmNvbnRpZ3VvdXNJbnQzMigpOwogICAgICAgICAgICAgCi0gICAgICAgIHJldHVybiBlbnN1
cmVJbnQzMlNsb3coZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBlbnN1cmVJbnQzMlNsb3co
dm0pOwogICAgIH0KICAgICAgICAgCiAgICAgLy8gUmV0dXJucyAwIGlmIGRvdWJsZSBzdG9yYWdl
IGNhbm5vdCBiZSBjcmVhdGVkIC0gZWl0aGVyIGJlY2F1c2UKICAgICAvLyBpbmRleGluZyBzaG91
bGQgYmUgc3BhcnNlLCB3ZSdyZSBoYXZpbmcgYSBiYWQgdGltZSwgb3IgYmVjYXVzZQogICAgIC8v
IHdlIGFscmVhZHkgaGF2ZSBhIG1vcmUgZ2VuZXJhbCBmb3JtIG9mIHN0b3JhZ2UgKGNvbnRpZ3Vv
dXMsCiAgICAgLy8gb3IgYXJyYXkgc3RvcmFnZSkuCi0gICAgQ29udGlndW91c0RvdWJsZXMgZW5z
dXJlRG91YmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICBDb250aWd1b3VzRG91Ymxl
cyBlbnN1cmVEb3VibGUoVk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgKExJS0VMWShoYXNEb3Vi
bGUoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSkpCiAgICAgICAgICAgICByZXR1cm4gbV9i
dXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKTsKICAgICAgICAgICAgIAotICAgICAgICByZXR1
cm4gZW5zdXJlRG91YmxlU2xvdyhnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIGVuc3VyZURv
dWJsZVNsb3codm0pOwogICAgIH0KICAgICAgICAgCiAgICAgLy8gUmV0dXJucyAwIGlmIGNvbnRp
Z3VvdXMgc3RvcmFnZSBjYW5ub3QgYmUgY3JlYXRlZCAtIGVpdGhlciBiZWNhdXNlCiAgICAgLy8g
aW5kZXhpbmcgc2hvdWxkIGJlIHNwYXJzZSBvciBiZWNhdXNlIHdlJ3JlIGhhdmluZyBhIGJhZCB0
aW1lLgotICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBlbnN1cmVDb250aWd1b3VzKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKKyAgICBDb250aWd1b3VzSlNWYWx1ZXMgZW5zdXJlQ29udGlndW91cyhW
TSYgdm0pCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSkpCiAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNv
bnRpZ3VvdXMoKTsKICAgICAgICAgICAgIAotICAgICAgICByZXR1cm4gZW5zdXJlQ29udGlndW91
c1Nsb3coZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBlbnN1cmVDb250aWd1b3VzU2xvdyh2
bSk7CiAgICAgfQogICAgICAgICAKICAgICAvLyBTYW1lIGFzIGVuc3VyZUNvbnRpZ3VvdXMoKSwg
ZXhjZXB0IHRoYXQgaWYgdGhlIGluZGV4ZWQgc3RvcmFnZSBpcyBpbgogICAgIC8vIGRvdWJsZSBt
b2RlLCB0aGVuIGl0IGRvZXMgYSByYWdlIGNvbnZlcnNpb24gdG8gY29udGlndW91czogaXQKICAg
ICAvLyBhdHRlbXB0cyB0byBjb252ZXJ0IGVhY2ggZG91YmxlIHRvIGFuIGludDMyLgotICAgIENv
bnRpZ3VvdXNKU1ZhbHVlcyByYWdlRW5zdXJlQ29udGlndW91cyhKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCisgICAgQ29udGlndW91c0pTVmFsdWVzIHJhZ2VFbnN1cmVDb250aWd1b3VzKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkoaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUoKS0+
aW5kZXhpbmdUeXBlKCkpKSkKICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGln
dW91cygpOwogICAgICAgICAgICAgCi0gICAgICAgIHJldHVybiByYWdlRW5zdXJlQ29udGlndW91
c1Nsb3coZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiByYWdlRW5zdXJlQ29udGlndW91c1Ns
b3codm0pOwogICAgIH0KICAgICAgICAgCiAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIG9iamVjdCBp
cyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5IHN0b3JhZ2UuIFVzZQogICAgIC8vIHRoaXMg
aWYgeW91J3JlIGFib3V0IHRvIHBlcmZvcm0gYWN0aW9ucyB0aGF0IHdvdWxkIGhhdmUgcmVxdWly
ZWQgdGhlCiAgICAgLy8gb2JqZWN0IHRvIGJlIGNvbnZlcnRlZCB0byBoYXZlIGFycmF5IHN0b3Jh
Z2UsIGlmIGl0IGRpZG4ndCBoYXZlIGl0CiAgICAgLy8gYWxyZWFkeS4KLSAgICBBcnJheVN0b3Jh
Z2UqIGVuc3VyZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgQXJy
YXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2UoVk0mIHZtKQogICAgIHsKICAgICAgICAgaWYg
KExJS0VMWShoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSkpCiAg
ICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAg
ICAgCi0gICAgICAgIHJldHVybiBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KGdsb2JhbERhdGEpOwor
ICAgICAgICByZXR1cm4gZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyh2bSk7CiAgICAgfQogICAgICAg
ICAKICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW5saW5lU3RvcmFnZSgpOwpAQCAtNjkyLDkg
KzY5Miw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAg
ewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykp
OwogICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAg
ICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5pc0VtcHR5KCkpOwpAQCAtNzAzLDE0ICs3MDMsMTQg
QEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoY2xhc3NJbmZvKCkpOwogICAgIH0KIAotICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogICAg
IC8vIFRvIGluc3RhbnRpYXRlIG9iamVjdHMgeW91IGxpa2VseSB3YW50IEpTRmluYWxPYmplY3Qs
IGJlbG93LgogICAgIC8vIFRvIGNyZWF0ZSBkZXJpdmVkIHR5cGVzIHlvdSBsaWtlbHkgd2FudCBK
U05vbkZpbmFsT2JqZWN0LCBiZWxvdy4KLSAgICBKU09iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1
Y3R1cmUqLCBCdXR0ZXJmbHkqID0gMCk7CisgICAgSlNPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBC
dXR0ZXJmbHkqID0gMCk7CiAgICAgICAgIAogICAgIHZvaWQgdmlzaXRCdXR0ZXJmbHkoU2xvdFZp
c2l0b3ImLCBCdXR0ZXJmbHkqLCBzaXplX3Qgc3RvcmFnZVNpemUpOwogICAgIHZvaWQgY29weUJ1
dHRlcmZseShDb3B5VmlzaXRvciYsIEJ1dHRlcmZseSosIHNpemVfdCBzdG9yYWdlU2l6ZSk7CkBA
IC03MzYsNDIgKzczNiw0MiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIH0KICAgICB9CiAgICAgICAg
IAotICAgIEJ1dHRlcmZseSogY3JlYXRlSW5pdGlhbFVuZGVjaWRlZChKU0dsb2JhbERhdGEmLCB1
bnNpZ25lZCBsZW5ndGgpOwotICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBjcmVhdGVJbml0aWFsSW50
MzIoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBDb250aWd1b3VzRG91Ymxl
cyBjcmVhdGVJbml0aWFsRG91YmxlKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGxlbmd0aCk7Ci0g
ICAgQ29udGlndW91c0pTVmFsdWVzIGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKEpTR2xvYmFsRGF0
YSYsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgICAgIAotICAgIHZvaWQgY29udmVydFVuZGVjaWRl
ZEZvclZhbHVlKEpTR2xvYmFsRGF0YSYsIEpTVmFsdWUpOwotICAgIHZvaWQgY29udmVydEludDMy
Rm9yVmFsdWUoSlNHbG9iYWxEYXRhJiwgSlNWYWx1ZSk7Ci0gICAgICAgIAotICAgIEFycmF5U3Rv
cmFnZSogY3JlYXRlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGxlbmd0aCwg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoKTsKLSAgICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUluaXRpYWxB
cnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJik7Ci0gICAgICAgIAotICAgIENvbnRpZ3VvdXNKU1Zh
bHVlcyBjb252ZXJ0VW5kZWNpZGVkVG9JbnQzMihKU0dsb2JhbERhdGEmKTsKLSAgICBDb250aWd1
b3VzRG91YmxlcyBjb252ZXJ0VW5kZWNpZGVkVG9Eb3VibGUoSlNHbG9iYWxEYXRhJik7Ci0gICAg
Q29udGlndW91c0pTVmFsdWVzIGNvbnZlcnRVbmRlY2lkZWRUb0NvbnRpZ3VvdXMoSlNHbG9iYWxE
YXRhJik7Ci0gICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVkZWRMZW5n
dGgpOwotICAgIEFycmF5U3RvcmFnZSogY29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdlKEpT
R2xvYmFsRGF0YSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbik7Ci0gICAgQXJyYXlTdG9yYWdlKiBj
b252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJik7Ci0gICAgICAgIAot
ICAgIENvbnRpZ3VvdXNEb3VibGVzIGNvbnZlcnRJbnQzMlRvRG91YmxlKEpTR2xvYmFsRGF0YSYp
OwotICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBjb252ZXJ0SW50MzJUb0NvbnRpZ3VvdXMoSlNHbG9i
YWxEYXRhJik7Ci0gICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShK
U0dsb2JhbERhdGEmLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0
aCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShKU0dsb2Jh
bERhdGEmLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24pOwotICAgIEFycmF5U3RvcmFnZSogY29udmVy
dEludDMyVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJik7CisgICAgQnV0dGVyZmx5KiBjcmVh
dGVJbml0aWFsVW5kZWNpZGVkKFZNJiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBDb250aWd1b3Vz
SlNWYWx1ZXMgY3JlYXRlSW5pdGlhbEludDMyKFZNJiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBD
b250aWd1b3VzRG91YmxlcyBjcmVhdGVJbml0aWFsRG91YmxlKFZNJiwgdW5zaWduZWQgbGVuZ3Ro
KTsKKyAgICBDb250aWd1b3VzSlNWYWx1ZXMgY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoVk0mLCB1
bnNpZ25lZCBsZW5ndGgpOworICAgICAgICAKKyAgICB2b2lkIGNvbnZlcnRVbmRlY2lkZWRGb3JW
YWx1ZShWTSYsIEpTVmFsdWUpOworICAgIHZvaWQgY29udmVydEludDMyRm9yVmFsdWUoVk0mLCBK
U1ZhbHVlKTsKKyAgICAgICAgCisgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVBcnJheVN0b3JhZ2Uo
Vk0mLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7CisgICAgQXJyYXlT
dG9yYWdlKiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKFZNJik7CisgICAgICAgIAorICAgIENv
bnRpZ3VvdXNKU1ZhbHVlcyBjb252ZXJ0VW5kZWNpZGVkVG9JbnQzMihWTSYpOworICAgIENvbnRp
Z3VvdXNEb3VibGVzIGNvbnZlcnRVbmRlY2lkZWRUb0RvdWJsZShWTSYpOworICAgIENvbnRpZ3Vv
dXNKU1ZhbHVlcyBjb252ZXJ0VW5kZWNpZGVkVG9Db250aWd1b3VzKFZNJik7CisgICAgQXJyYXlT
dG9yYWdlKiBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UoVk0mLCBOb25Qcm9wZXJ0eVRy
YW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCk7CisgICAgQXJyYXlTdG9yYWdlKiBjb252
ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UoVk0mLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24pOwor
ICAgIEFycmF5U3RvcmFnZSogY29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdlKFZNJik7Cisg
ICAgICAgIAorICAgIENvbnRpZ3VvdXNEb3VibGVzIGNvbnZlcnRJbnQzMlRvRG91YmxlKFZNJik7
CisgICAgQ29udGlndW91c0pTVmFsdWVzIGNvbnZlcnRJbnQzMlRvQ29udGlndW91cyhWTSYpOwor
ICAgIEFycmF5U3RvcmFnZSogY29udmVydEludDMyVG9BcnJheVN0b3JhZ2UoVk0mLCBOb25Qcm9w
ZXJ0eVRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCk7CisgICAgQXJyYXlTdG9yYWdl
KiBjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShWTSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbik7
CisgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShWTSYpOwogICAg
IAotICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKEpTR2xv
YmFsRGF0YSYpOwotICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyByYWdlQ29udmVydERvdWJsZVRvQ29u
dGlndW91cyhKU0dsb2JhbERhdGEmKTsKLSAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnREb3VibGVU
b0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24sIHVuc2ln
bmVkIG5lZWRlZExlbmd0aCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0RG91YmxlVG9BcnJh
eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsKLSAgICBBcnJh
eVN0b3JhZ2UqIGNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKLSAg
ICAgICAgCi0gICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdl
KEpTR2xvYmFsRGF0YSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbiwgdW5zaWduZWQgbmVlZGVkTGVu
Z3RoKTsKLSAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsKLSAgICBBcnJheVN0b3JhZ2Uq
IGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJik7CisgICAgQ29u
dGlndW91c0pTVmFsdWVzIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoVk0mKTsKKyAgICBDb250
aWd1b3VzSlNWYWx1ZXMgcmFnZUNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoVk0mKTsKKyAgICBB
cnJheVN0b3JhZ2UqIGNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZShWTSYsIE5vblByb3BlcnR5
VHJhbnNpdGlvbiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKTsKKyAgICBBcnJheVN0b3JhZ2UqIGNv
bnZlcnREb3VibGVUb0FycmF5U3RvcmFnZShWTSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbik7Cisg
ICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2UoVk0mKTsKKyAgICAg
ICAgCisgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKFZN
JiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpOworICAgIEFy
cmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShWTSYsIE5vblByb3Bl
cnR5VHJhbnNpdGlvbik7CisgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0Q29udGlndW91c1RvQXJy
YXlTdG9yYWdlKFZNJik7CiAKICAgICAgICAgCi0gICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJh
eVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRh
Jik7CisgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRp
Y3Rpb25hcnlJbmRleGluZ01vZGUoVk0mKTsKICAgICAgICAgCiAgICAgYm9vbCBkZWZpbmVPd25O
b25JbmRleFByb3BlcnR5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CiAKQEAgLTc3OSwyNCArNzc5LDI0IEBAIHByb3Rl
Y3RlZDoKICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRob3V0QXR0cmli
dXRlcyhFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUpOwogICAgIHZv
aWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJh
eVN0b3JhZ2UqKTsKIAotICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRh
JiwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKKyAgICBib29sIGluY3JlYXNlVmVjdG9yTGVuZ3RoKFZN
JiwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKICAgICB2b2lkIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1h
cCgpOwogICAgIGJvb2wgZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KEV4ZWNTdGF0ZSosIHVuc2ln
bmVkLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsKLSAgICBTcGFy
c2VBcnJheVZhbHVlTWFwKiBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKEpTR2xvYmFsRGF0YSYpOwor
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoVk0mKTsKICAg
ICAgICAgCi0gICAgdm9pZCBub3RpZnlQcmVzZW5jZU9mSW5kZXhlZEFjY2Vzc29ycyhKU0dsb2Jh
bERhdGEmKTsKKyAgICB2b2lkIG5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNjZXNzb3JzKFZNJik7
CiAgICAgICAgIAogICAgIGJvb2wgYXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZShF
eGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAg
ICAgICAgIAogICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ugd2FudCBzZXRJbmRleFF1aWNrbHkgdG8g
c3VjY2VlZCBhbmQgeW91J3JlIHN1cmUgdGhhdAogICAgIC8vIHRoZSBhcnJheSBpcyBjb250aWd1
b3VzLgotICAgIHZvaWQgZW5zdXJlTGVuZ3RoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5z
aWduZWQgbGVuZ3RoKQorICAgIHZvaWQgZW5zdXJlTGVuZ3RoKFZNJiB2bSwgdW5zaWduZWQgbGVu
Z3RoKQogICAgIHsKICAgICAgICAgQVNTRVJUKGxlbmd0aCA8IE1BWF9BUlJBWV9JTkRFWCk7CiAg
ICAgICAgIEFTU0VSVChoYXNDb250aWd1b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
fHwgaGFzSW50MzIoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB8fCBoYXNEb3VibGUoc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB8fCBoYXNVbmRlY2lkZWQoc3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgaWYgKG1fYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKSA8IGxlbmd0aCkKLSAgICAgICAgICAgIGVuc3VyZUxlbmd0aFNsb3coZ2xv
YmFsRGF0YSwgbGVuZ3RoKTsKKyAgICAgICAgICAgIGVuc3VyZUxlbmd0aFNsb3codm0sIGxlbmd0
aCk7CiAgICAgICAgICAgICAKICAgICAgICAgaWYgKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgo
KSA8IGxlbmd0aCkKICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVu
Z3RoKTsKQEAgLTkxNiwxMiArOTE2LDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBpc09iamVjdCgp
OwogICAgIHZvaWQgaXNTdHJpbmcoKTsKICAgICAgICAgCi0gICAgQnV0dGVyZmx5KiBjcmVhdGVJ
bml0aWFsSW5kZXhlZFN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbGVuZ3RoLCBzaXpl
X3QgZWxlbWVudFNpemUpOworICAgIEJ1dHRlcmZseSogY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9y
YWdlKFZNJiwgdW5zaWduZWQgbGVuZ3RoLCBzaXplX3QgZWxlbWVudFNpemUpOwogICAgICAgICAK
LSAgICBBcnJheVN0b3JhZ2UqIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0
b3JhZ2VBbHJlYWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYsIEFycmF5U3RvcmFnZSopOworICAgIEFy
cmF5U3RvcmFnZSogZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFs
cmVhZHlFeGlzdHMoVk0mLCBBcnJheVN0b3JhZ2UqKTsKICAgICAgICAgCiAgICAgdGVtcGxhdGU8
UHV0TW9kZT4KLSAgICBib29sIHB1dERpcmVjdEludGVybmFsKEpTR2xvYmFsRGF0YSYsIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0ciwgUHV0UHJvcGVydHlTbG90JiwgSlNDZWxs
Kik7CisgICAgYm9vbCBwdXREaXJlY3RJbnRlcm5hbChWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgdW5zaWduZWQgYXR0ciwgUHV0UHJvcGVydHlTbG90JiwgSlNDZWxsKik7CiAKICAgICBib29s
IGlubGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5
U2xvdChQcm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCk7CkBAIC05MzksMjQgKzkzOSwyNCBA
QCBwcml2YXRlOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3RTbG93KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAg
IAotICAgIEFycmF5U3RvcmFnZSogY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91
dENvcHlpbmdFbGVtZW50cyhKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpOwor
ICAgIEFycmF5U3RvcmFnZSogY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENv
cHlpbmdFbGVtZW50cyhWTSYsIHVuc2lnbmVkIG5lZWRlZExlbmd0aCk7CiAgICAgICAgIAotICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0SW5kZXhRdWlja2x5VG9VbmRlY2lkZWQoSlNHbG9i
YWxEYXRhJiwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgY29udmVydEludDMyVG9Eb3VibGVPckNvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJ
bmRleChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSk7Ci0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzV2hpbGVQZXJmb3JtaW5n
U2V0SW5kZXgoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUpOwotICAgICAg
ICAKLSAgICB2b2lkIGVuc3VyZUxlbmd0aFNsb3coSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbGVu
Z3RoKTsKLSAgICAgICAgCi0gICAgQ29udGlndW91c0pTVmFsdWVzIGVuc3VyZUludDMyU2xvdyhK
U0dsb2JhbERhdGEmKTsKLSAgICBDb250aWd1b3VzRG91YmxlcyBlbnN1cmVEb3VibGVTbG93KEpT
R2xvYmFsRGF0YSYpOwotICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBlbnN1cmVDb250aWd1b3VzU2xv
dyhKU0dsb2JhbERhdGEmKTsKLSAgICBDb250aWd1b3VzSlNWYWx1ZXMgcmFnZUVuc3VyZUNvbnRp
Z3VvdXNTbG93KEpTR2xvYmFsRGF0YSYpOwotICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlT
dG9yYWdlU2xvdyhKU0dsb2JhbERhdGEmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNl
dEluZGV4UXVpY2tseVRvVW5kZWNpZGVkKFZNJiwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUpOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29udmVydEludDMyVG9Eb3VibGVPckNvbnRpZ3Vv
dXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRleChWTSYsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlKTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXNXaGls
ZVBlcmZvcm1pbmdTZXRJbmRleChWTSYsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlKTsKKyAgICAg
ICAgCisgICAgdm9pZCBlbnN1cmVMZW5ndGhTbG93KFZNJiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICAgICAgCisgICAgQ29udGlndW91c0pTVmFsdWVzIGVuc3VyZUludDMyU2xvdyhWTSYpOworICAg
IENvbnRpZ3VvdXNEb3VibGVzIGVuc3VyZURvdWJsZVNsb3coVk0mKTsKKyAgICBDb250aWd1b3Vz
SlNWYWx1ZXMgZW5zdXJlQ29udGlndW91c1Nsb3coVk0mKTsKKyAgICBDb250aWd1b3VzSlNWYWx1
ZXMgcmFnZUVuc3VyZUNvbnRpZ3VvdXNTbG93KFZNJik7CisgICAgQXJyYXlTdG9yYWdlKiBlbnN1
cmVBcnJheVN0b3JhZ2VTbG93KFZNJik7CiAgICAgCiAgICAgZW51bSBEb3VibGVUb0NvbnRpZ3Vv
dXNNb2RlIHsgRW5jb2RlVmFsdWVBc0RvdWJsZSwgUmFnZUNvbnZlcnREb3VibGVUb1ZhbHVlIH07
CiAgICAgdGVtcGxhdGU8RG91YmxlVG9Db250aWd1b3VzTW9kZSBtb2RlPgotICAgIENvbnRpZ3Vv
dXNKU1ZhbHVlcyBnZW5lcmljQ29udmVydERvdWJsZVRvQ29udGlndW91cyhKU0dsb2JhbERhdGEm
KTsKLSAgICBDb250aWd1b3VzSlNWYWx1ZXMgZW5zdXJlQ29udGlndW91c1Nsb3coSlNHbG9iYWxE
YXRhJiwgRG91YmxlVG9Db250aWd1b3VzTW9kZSk7CisgICAgQ29udGlndW91c0pTVmFsdWVzIGdl
bmVyaWNDb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKFZNJik7CisgICAgQ29udGlndW91c0pTVmFs
dWVzIGVuc3VyZUNvbnRpZ3VvdXNTbG93KFZNJiwgRG91YmxlVG9Db250aWd1b3VzTW9kZSk7CiAg
ICAgCiBwcm90ZWN0ZWQ6CiAgICAgQnV0dGVyZmx5KiBtX2J1dHRlcmZseTsKQEAgLTk3MSwyMCAr
OTcxLDIwIEBAIGNsYXNzIEpTTm9uRmluYWxPYmplY3QgOiBwdWJsaWMgSlNPYmplY3QKIHB1Ymxp
YzoKICAgICB0eXBlZGVmIEpTT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShn
bG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKIHByb3RlY3RlZDoKLSAgICBleHBsaWNp
dCBKU05vbkZpbmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gMCkKLSAgICAgICAgOiBKU09iamVjdChn
bG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKKyAgICBleHBsaWNpdCBKU05vbkZpbmFs
T2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gMCkKKyAgICAgICAgOiBKU09iamVjdCh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiAgICAg
ewogICAgIH0KIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIHsKLSAgICAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICAgICAgQVNTRVJUKCF0aGlzLT5zdHJ1Y3R1cmUoKS0+dG90YWxTdG9yYWdl
Q2FwYWNpdHkoKSk7CiAgICAgICAgIEFTU0VSVChjbGFzc0luZm8oKSk7CiAgICAgfQpAQCAtMTAx
Myw5ICsxMDEzLDkgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0ZpbmFsT2JqZWN0
KiBjcmVhdGUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKik7Ci0gICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5
KQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCB1bnNpZ25lZCBpbmxpbmVD
YXBhY2l0eSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxE
YXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oRmluYWxPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIE5vbkFycmF5LCBpbmxpbmVDYXBhY2l0eSk7CisgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKEZpbmFsT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBOb25B
cnJheSwgaW5saW5lQ2FwYWNpdHkpOwogICAgIH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKQEAgLTEwMjUs
OSArMTAyNSw5IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2b2lkIHZpc2l0Q2hpbGRyZW5D
b21tb24oU2xvdFZpc2l0b3ImKTsKICAgICAgICAgCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0p
CiAgICAgewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCkt
PnRvdGFsU3RvcmFnZUNhcGFjaXR5KCkgPT0gc3RydWN0dXJlKCktPmlubGluZUNhcGFjaXR5KCkp
OwogICAgICAgICBBU1NFUlQoY2xhc3NJbmZvKCkpOwogICAgIH0KQEAgLTEwMzUsOCArMTAzNSw4
IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4
dHJhY3RvcjsKIAotICAgIGV4cGxpY2l0IEpTRmluYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgOiBKU09iamVjdChnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUpCisgICAgZXhwbGljaXQgSlNGaW5hbE9iamVjdChWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCiAgICAg
ewogICAgIH0KIApAQCAtMTA1MSw4ICsxMDUxLDggQEAgaW5saW5lIEpTRmluYWxPYmplY3QqIEpT
RmluYWxPYmplY3Q6OmNyZQogICAgICAgICAgICAgKmV4ZWMtPmhlYXAoKSwKICAgICAgICAgICAg
IGFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSkKICAgICAgICAgKQot
ICAgICkgSlNGaW5hbE9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSk7Ci0gICAg
ZmluYWxPYmplY3QtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgKSBK
U0ZpbmFsT2JqZWN0KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CisgICAgZmluYWxPYmplY3QtPmZp
bmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwogICAgIHJldHVybiBmaW5hbE9iamVjdDsKIH0KIApA
QCAtMTA5NiwxMSArMTA5NiwxMSBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6aXNFcnJvckluc3Rh
bmNlKCkgCiAgICAgcmV0dXJuIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBFcnJv
ckluc3RhbmNlVHlwZTsKIH0KIAotaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldEJ1dHRlcmZseShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkoVk0mIHZtLCBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgQVNTRVJU
KHN0cnVjdHVyZSk7CiAgICAgQVNTRVJUKCFidXR0ZXJmbHkgPT0gKCFzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkgJiYgIWhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkpKSk7Ci0gICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CisgICAg
c2V0U3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIG1fYnV0dGVyZmx5ID0gYnV0dGVyZmx5
OwogfQogCkBAIC0xMTM0LDggKzExMzQsOCBAQCBpbmxpbmUgSlNPYmplY3QqIGFzT2JqZWN0KEpT
VmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIGFzT2JqZWN0KHZhbHVlLmFzQ2VsbCgpKTsKIH0KIAot
aW5saW5lIEpTT2JqZWN0OjpKU09iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKLSAgICA6IEpTQ2VsbChnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUpCitpbmxpbmUgSlNPYmplY3Q6OkpTT2JqZWN0KFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQorICAgIDogSlNDZWxsKHZt
LCBzdHJ1Y3R1cmUpCiAgICAgLCBtX2J1dHRlcmZseShidXR0ZXJmbHkpCiB7CiB9CkBAIC0xMTQ3
LDcgKzExNDcsNyBAQCBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6cHJvdG90eXBlKCkgY29uCiAK
IEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6aW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQogewotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5nZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IHN0cnVjdHVyZSgpLT5nZXQoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKTsKICAgICBpZiAo
TElLRUxZKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IGdldERpcmVjdChvZmZzZXQpOwogICAgICAgICBpZiAoc3RydWN0dXJlKCktPmhhc0dldHRlclNl
dHRlclByb3BlcnRpZXMoKSAmJiB2YWx1ZS5pc0dldHRlclNldHRlcigpKQpAQCAtMTIxNSw3ICsx
MjE1LDcgQEAgaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OmdldChFeGVjU3RhdGUqIAogfQogCiB0
ZW1wbGF0ZTxKU09iamVjdDo6UHV0TW9kZSBtb2RlPgotaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1
dERpcmVjdEludGVybmFsKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0UHJvcGVy
dHlTbG90JiBzbG90LCBKU0NlbGwqIHNwZWNpZmljRnVuY3Rpb24pCitpbmxpbmUgYm9vbCBKU09i
amVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QsIEpTQ2VsbCogc3BlY2lmaWNGdW5jdGlvbikKIHsKICAgICBBU1NFUlQodmFsdWUpOwogICAg
IEFTU0VSVCh2YWx1ZS5pc0dldHRlclNldHRlcigpID09ICEhKGF0dHJpYnV0ZXMgJiBBY2Nlc3Nv
cikpOwpAQCAtMTIyNSwxNiArMTIyNSwxNiBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGly
ZWN0SW50ZXJuYWwoCiAgICAgaWYgKHN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkgewogICAg
ICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKICAgICAgICAgSlNDZWxsKiBjdXJyZW50
U3BlY2lmaWNGdW5jdGlvbjsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0
dXJlKCktPmdldChnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzLCBj
dXJyZW50U3BlY2lmaWNGdW5jdGlvbik7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IHN0cnVjdHVyZSgpLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMsIGN1
cnJlbnRTcGVjaWZpY0Z1bmN0aW9uKTsKICAgICAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zm
c2V0KSB7CiAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBjdXJyZW50bHkgYSBzcGVjaWZpYyBm
dW5jdGlvbiwgYW5kIHRoZXJlIG5vdyBlaXRoZXIgaXNuJ3QsCiAgICAgICAgICAgICAvLyBvciB0
aGUgbmV3IHZhbHVlIGlzIGRpZmZlcmVudCwgdGhlbiBkZXNwZWNpZnkuCiAgICAgICAgICAgICBp
ZiAoY3VycmVudFNwZWNpZmljRnVuY3Rpb24gJiYgKHNwZWNpZmljRnVuY3Rpb24gIT0gY3VycmVu
dFNwZWNpZmljRnVuY3Rpb24pKQotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSgpLT5kZXNwZWNp
ZnlEaWN0aW9uYXJ5RnVuY3Rpb24oZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAg
ICAgICAgICBzdHJ1Y3R1cmUoKS0+ZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0aW9uKHZtLCBwcm9w
ZXJ0eU5hbWUpOwogICAgICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJl
bnRBdHRyaWJ1dGVzICYgUmVhZE9ubHkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgICAgICBwdXREaXJlY3QoZ2xvYmFsRGF0YSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAg
ICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogICAgICAgICAgICAgLy8gQXQg
dGhpcyBwb2ludCwgdGhlIG9iamVjdHMgc3RydWN0dXJlIG9ubHkgaGFzIGEgc3BlY2lmaWMgdmFs
dWUgc2V0IGlmIHByZXZpb3VzbHkgdGhlcmUKICAgICAgICAgICAgIC8vIGhhZCBiZWVuIG9uZSBz
ZXQsIGFuZCBpZiB0aGUgbmV3IHZhbHVlIGJlaW5nIHNwZWNpZmllZCBpcyB0aGUgc2FtZSAob3Ro
ZXJ3aXNlIHdlIHdvdWxkCiAgICAgICAgICAgICAvLyBoYXZlIGRlc3BlY2lmaWVkLCBhYm92ZSku
ICBTbywgaWYgY3VycmVudFNwZWNpZmljRnVuY3Rpb24gaXMgbm90IHNldCwgb3IgaWYgdGhlIG5l
dwpAQCAtMTI1MSwxMyArMTI1MSwxMyBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0
SW50ZXJuYWwoCiAKICAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZs
eTsKICAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2Uo
KSkKLSAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3Vn
Z2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwotICAgICAgICBvZmZzZXQgPSBz
dHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24pOwotICAgICAgICBzZXRCdXR0
ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBzdHJ1Y3R1cmUoKSk7CisgICAgICAgICAg
ICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgc3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9y
YWdlQ2FwYWNpdHkoKSk7CisgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0
eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmlj
RnVuY3Rpb24pOworICAgICAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSwgc3RydWN0
dXJlKCkpOwogCiAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgICAgIEFTU0VS
VChzdHJ1Y3R1cmUoKS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICAgICAgcHV0RGlyZWN0
KGdsb2JhbERhdGEsIG9mZnNldCwgdmFsdWUpOworICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNl
dCwgdmFsdWUpOwogICAgICAgICAvLyBTZWUgY29tbWVudCBvbiBzZXROZXdQcm9wZXJ0eSBjYWxs
IGJlbG93LgogICAgICAgICBpZiAoIXNwZWNpZmljRnVuY3Rpb24pCiAgICAgICAgICAgICBzbG90
LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CkBAIC0xMjcxLDEyICsxMjcxLDEyIEBAIGlu
bGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICBpZiAoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdT
dHJ1Y3R1cmUodGhpcy0+c3RydWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3Bl
Y2lmaWNGdW5jdGlvbiwgb2Zmc2V0KSkgewogICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZs
eSA9IG1fYnV0dGVyZmx5OwogICAgICAgICBpZiAoY3VycmVudENhcGFjaXR5ICE9IHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKLSAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dP
dXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIGN1cnJlbnRDYXBhY2l0eSwgc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRP
ZkxpbmVTdG9yYWdlKHZtLCBjdXJyZW50Q2FwYWNpdHksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSk7CiAKICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICAgICAgQVNT
RVJUKHN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICAgICAgc2V0QnV0dGVy
Zmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgc3RydWN0dXJlKTsKLSAgICAgICAgcHV0RGly
ZWN0KGdsb2JhbERhdGEsIG9mZnNldCwgdmFsdWUpOworICAgICAgICBzZXRCdXR0ZXJmbHkodm0s
IG5ld0J1dHRlcmZseSwgc3RydWN0dXJlKTsKKyAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQs
IHZhbHVlKTsKICAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBwcm9wZXJ0eTsgdHJhbnNpdGlvbnMg
d2l0aCBzcGVjaWZpYyB2YWx1ZXMgYXJlIG5vdCBjdXJyZW50bHkgY2FjaGFibGUsCiAgICAgICAg
IC8vIHNvIGxlYXZlIHRoZSBzbG90IGluIGFuIHVuY2FjaGFibGUgc3RhdGUuCiAgICAgICAgIGlm
ICghc3BlY2lmaWNGdW5jdGlvbikKQEAgLTEyODYsNyArMTI4Niw3IEBAIGlubGluZSBib29sIEpT
T2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKIAogICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1
dGVzOwogICAgIEpTQ2VsbCogY3VycmVudFNwZWNpZmljRnVuY3Rpb247Ci0gICAgb2Zmc2V0ID0g
c3RydWN0dXJlKCktPmdldChnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1
dGVzLCBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbik7CisgICAgb2Zmc2V0ID0gc3RydWN0dXJlKCkt
PmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcywgY3VycmVudFNwZWNpZmlj
RnVuY3Rpb24pOwogICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkgewogICAgICAgICBp
ZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgY3VycmVudEF0dHJpYnV0ZXMgJiBSZWFkT25seSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEzMDMsMjkgKzEzMDMsMjkgQEAgaW5saW5l
IGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgICAgICBpZiAoY3VycmVudFNw
ZWNpZmljRnVuY3Rpb24pIHsKICAgICAgICAgICAgIC8vIGNhc2UgKDEpIERvIHRoZSBwdXQsIHRo
ZW4gcmV0dXJuIGxlYXZpbmcgdGhlIHNsb3QgdW5jYWNoYWJsZS4KICAgICAgICAgICAgIGlmIChz
cGVjaWZpY0Z1bmN0aW9uID09IGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uKSB7Ci0gICAgICAgICAg
ICAgICAgcHV0RGlyZWN0KGdsb2JhbERhdGEsIG9mZnNldCwgdmFsdWUpOworICAgICAgICAgICAg
ICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBjYXNlICgyKSBEZXNwZWNpZnks
IGZhbGwgdGhyb3VnaCB0byAoMykuCi0gICAgICAgICAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0
YSwgU3RydWN0dXJlOjpkZXNwZWNpZnlGdW5jdGlvblRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlKCksIHByb3BlcnR5TmFtZSkpOworICAgICAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBT
dHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uVHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKCksIHBy
b3BlcnR5TmFtZSkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gY2FzZSAoMykgc2V0IHRoZSBz
bG90LCBkbyB0aGUgcHV0LCByZXR1cm4uCiAgICAgICAgIHNsb3Quc2V0RXhpc3RpbmdQcm9wZXJ0
eSh0aGlzLCBvZmZzZXQpOwotICAgICAgICBwdXREaXJlY3QoZ2xvYmFsRGF0YSwgb2Zmc2V0LCB2
YWx1ZSk7CisgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiAhaXNF
eHRlbnNpYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgdGhp
cy0+c3RydWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNGdW5jdGlv
biwgb2Zmc2V0KTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJv
cGVydHlUcmFuc2l0aW9uKHZtLCB0aGlzLT5zdHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBhdHRy
aWJ1dGVzLCBzcGVjaWZpY0Z1bmN0aW9uLCBvZmZzZXQpOwogICAgIAogICAgIHZhbGlkYXRlT2Zm
c2V0KG9mZnNldCk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQp
KTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSk7CisgICAgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJ
Zk5lY2Vzc2FyeSh2bSwgc3RydWN0dXJlKTsKIAotICAgIHB1dERpcmVjdChnbG9iYWxEYXRhLCBv
ZmZzZXQsIHZhbHVlKTsKKyAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogICAgIC8v
IFRoaXMgaXMgYSBuZXcgcHJvcGVydHk7IHRyYW5zaXRpb25zIHdpdGggc3BlY2lmaWMgdmFsdWVz
IGFyZSBub3QgY3VycmVudGx5IGNhY2hhYmxlLAogICAgIC8vIHNvIGxlYXZlIHRoZSBzbG90IGlu
IGFuIHVuY2FjaGFibGUgc3RhdGUuCiAgICAgaWYgKCFzcGVjaWZpY0Z1bmN0aW9uKQpAQCAtMTMz
NSw1NyArMTMzNSw1NyBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwo
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1
cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgdW5zaWduZWQgb2xkQ2FwYWNpdHksIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKQoraW5saW5l
IHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3Nh
cnkoVk0mIHZtLCB1bnNpZ25lZCBvbGRDYXBhY2l0eSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUp
CiB7CiAgICAgQVNTRVJUKG9sZENhcGFjaXR5IDw9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSk7CiAgICAgCiAgICAgaWYgKG9sZENhcGFjaXR5ID09IG5ld1N0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgbmV3
U3RydWN0dXJlKTsKKyAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0g
Z3Jvd091dE9mTGluZVN0b3JhZ2UoCi0gICAgICAgIGdsb2JhbERhdGEsIG9sZENhcGFjaXR5LCBu
ZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgIHNldEJ1dHRlcmZseShnbG9i
YWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CisgICAgICAgIHZtLCBvbGRDYXBh
Y2l0eSwgbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICBzZXRCdXR0ZXJm
bHkodm0sIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKIH0KIAotaW5saW5lIHZvaWQgSlNP
YmplY3Q6OnNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSkKK2lubGluZSB2b2lk
IEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KFZN
JiB2bSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUpCiB7CiAgICAgc2V0U3RydWN0dXJlQW5kUmVh
bGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSgKLSAgICAgICAgZ2xvYmFsRGF0YSwgc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1N0cnVjdHVyZSk7CisgICAgICAgIHZtLCBzdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3U3RydWN0dXJlKTsKIH0KIAotaW5saW5l
IGJvb2wgSlNPYmplY3Q6OnB1dE93bkRhdGFQcm9wZXJ0eShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYgc2xvdCkKK2lubGluZSBib29sIEpTT2JqZWN0OjpwdXRPd25EYXRhUHJvcGVydHkoVk0m
IHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBBU1NFUlQoIUhlYXA6Omhl
YXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpcykpOwogICAg
IEFTU0VSVCghc3RydWN0dXJlKCktPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSk7CiAKLSAg
ICByZXR1cm4gcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4oZ2xvYmFsRGF0YSwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKKyAgICBy
ZXR1cm4gcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFs
dWUsIDAsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7CiB9CiAKLWlubGluZSB2b2lk
IEpTT2JqZWN0OjpwdXREaXJlY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQoraW5s
aW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJU
KCF2YWx1ZS5pc0dldHRlclNldHRlcigpICYmICEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CiAg
ICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZURl
ZmluZU93blByb3BlcnR5PihnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1
dGVzLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOworICAgIHB1dERpcmVjdEludGVy
bmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0
dHJpYnV0ZXMsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7CiB9CiAKLWlubGluZSB2
b2lkIEpTT2JqZWN0OjpwdXREaXJlY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qp
CitpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAg
IEFTU0VSVCghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSk7Ci0gICAgcHV0RGlyZWN0SW50ZXJuYWw8
UHV0TW9kZURlZmluZU93blByb3BlcnR5PihnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCAwLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOworICAgIHB1dERpcmVjdEludGVy
bmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAs
IHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7CiB9CiAKLWlubGluZSB2b2lkIEpTT2Jq
ZWN0OjpwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpCitpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
Vk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzKQogewogICAgIEFTU0VSVCghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSAmJiAh
KGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0g
bV9idXR0ZXJmbHk7CiAgICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0
b3JhZ2UoKSkKLSAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5z
dWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7Ci0gICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oZ2xv
YmFsRGF0YSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1
ZSkpOwotICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIHN0cnVjdHVy
ZSgpKTsKLSAgICBwdXREaXJlY3QoZ2xvYmFsRGF0YSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAgICAg
IG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBzdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3Jh
Z2VDYXBhY2l0eSgpKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+
YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVz
LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0
dGVyZmx5LCBzdHJ1Y3R1cmUoKSk7CisgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsK
IH0KIAogaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSogZXhl
YywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBwcmVmZXJyZWRUeXBlKSBjb25zdApAQCAtMTQ1Myw3
ICsxNDUzLDcgQEAgQ09NUElMRV9BU1NFUlQoIShzaXplb2YoSlNPYmplY3QpICUgc2l6ZQogCiAv
LyBIZWxwZXIgZm9yIGRlZmluaW5nIG5hdGl2ZSBmdW5jdGlvbnMsIGlmIHlvdSdyZSBub3QgdXNp
bmcgYSBzdGF0aWMgaGFzaCB0YWJsZS4KIC8vIFVzZSB0aGlzIG1hY3JvIGZyb20gd2l0aGluIGZp
bmlzaENyZWF0aW9uKCkgbWV0aG9kcyBpbiBwcm90b3R5cGVzLiBUaGlzIGFzc3VtZXMKLS8vIHlv
dSd2ZSBkZWZpbmVkIHZhcmlhYmxlcyBjYWxsZWQgZXhlYywgZ2xvYmFsT2JqZWN0LCBhbmQgZ2xv
YmFsRGF0YSwgYW5kIHRoZXkKKy8vIHlvdSd2ZSBkZWZpbmVkIHZhcmlhYmxlcyBjYWxsZWQgZXhl
YywgZ2xvYmFsT2JqZWN0LCBhbmQgdm0sIGFuZCB0aGV5CiAvLyBoYXZlIHRoZSBleHBlY3RlZCBt
ZWFuaW5ncy4KICNkZWZpbmUgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT04oanNOYW1lLCBj
cHBOYW1lLCBhdHRyaWJ1dGVzLCBsZW5ndGgsIGludHJpbnNpYykgXAogICAgIHB1dERpcmVjdE5h
dGl2ZUZ1bmN0aW9uKFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
cGVydHlOYW1lSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNvbnN0
IENsYXNzSW5mbyBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpzX2luZm8gPSB7ICJKU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yIiwgMCwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yKSB9OwogCiBpbmxpbmUgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6SlNQcm9wZXJ0
eU5hbWVJdGVyYXRvcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5RGF0YSogcHJv
cGVydHlOYW1lQXJyYXlEYXRhLCBzaXplX3QgbnVtQ2FjaGVhYmxlU2xvdHMpCi0gICAgOiBKU0Nl
bGwoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lSXRl
cmF0b3JTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgOiBKU0NlbGwoZXhlYy0+dm0oKSwgZXhlYy0+dm0o
KS5wcm9wZXJ0eU5hbWVJdGVyYXRvclN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1fbnVtQ2FjaGVh
YmxlU2xvdHMobnVtQ2FjaGVhYmxlU2xvdHMpCiAgICAgLCBtX2pzU3RyaW5nc1NpemUocHJvcGVy
dHlOYW1lQXJyYXlEYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5zaXplKCkpCiAgICAgLCBtX2pz
U3RyaW5ncyhhZG9wdEFycmF5UHRyKG5ldyBXcml0ZUJhcnJpZXI8VW5rbm93bj5bbV9qc1N0cmlu
Z3NTaXplXSkpCkBAIC03Niw5ICs3Niw5IEBAIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIEpTUHJv
cGVydHlOYW1lSXQKICAgICAgICAgICAgIHJldHVybiBqc1Byb3BlcnR5TmFtZUl0ZXJhdG9yOwog
ICAgIH0KIAotICAgIGpzUHJvcGVydHlOYW1lSXRlcmF0b3ItPnNldENhY2hlZFByb3RvdHlwZUNo
YWluKGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlQ2hhaW4pOwotICAgIGpzUHJvcGVydHlO
YW1lSXRlcmF0b3ItPnNldENhY2hlZFN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG8tPnN0
cnVjdHVyZSgpKTsKLSAgICBvLT5zdHJ1Y3R1cmUoKS0+c2V0RW51bWVyYXRpb25DYWNoZShleGVj
LT5nbG9iYWxEYXRhKCksIGpzUHJvcGVydHlOYW1lSXRlcmF0b3IpOworICAgIGpzUHJvcGVydHlO
YW1lSXRlcmF0b3ItPnNldENhY2hlZFByb3RvdHlwZUNoYWluKGV4ZWMtPnZtKCksIHN0cnVjdHVy
ZUNoYWluKTsKKyAgICBqc1Byb3BlcnR5TmFtZUl0ZXJhdG9yLT5zZXRDYWNoZWRTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgby0+c3RydWN0dXJlKCkpOworICAgIG8tPnN0cnVjdHVyZSgpLT5zZXRFbnVt
ZXJhdGlvbkNhY2hlKGV4ZWMtPnZtKCksIGpzUHJvcGVydHlOYW1lSXRlcmF0b3IpOwogICAgIHJl
dHVybiBqc1Byb3BlcnR5TmFtZUl0ZXJhdG9yOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oCShyZXZp
c2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJlID0g
dHJ1ZTsKICAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICAgICAKLSAg
ICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENvbXBvdW5kVHlwZSwgT3ZlcnJpZGVzVmlzaXRDaGls
ZHJlbiksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ29tcG91bmRUeXBlLCBPdmVycmlk
ZXNWaXNpdENoaWxkcmVuKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CkBAIC02MiwxNSArNjIs
MTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIEpT
T2JqZWN0Kiwgc2l6ZV90IGkpOwogICAgICAgICBzaXplX3Qgc2l6ZSgpIHsgcmV0dXJuIG1fanNT
dHJpbmdzU2l6ZTsgfQogCi0gICAgICAgIHZvaWQgc2V0Q2FjaGVkU3RydWN0dXJlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHZvaWQgc2V0
Q2FjaGVkU3RydWN0dXJlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIEFTU0VSVCghbV9jYWNoZWRTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgQVNT
RVJUKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBtX2NhY2hlZFN0cnVjdHVyZS5zZXQoZ2xvYmFs
RGF0YSwgdGhpcywgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIG1fY2FjaGVkU3RydWN0dXJlLnNl
dCh2bSwgdGhpcywgc3RydWN0dXJlKTsKICAgICAgICAgfQogICAgICAgICBTdHJ1Y3R1cmUqIGNh
Y2hlZFN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fY2FjaGVkU3RydWN0dXJlLmdldCgpOyB9CiAKLSAg
ICAgICAgdm9pZCBzZXRDYWNoZWRQcm90b3R5cGVDaGFpbihKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90b3R5cGVDaGFpbikgeyBtX2NhY2hlZFByb3Rv
dHlwZUNoYWluLnNldChnbG9iYWxEYXRhLCB0aGlzLCBjYWNoZWRQcm90b3R5cGVDaGFpbik7IH0K
KyAgICAgICAgdm9pZCBzZXRDYWNoZWRQcm90b3R5cGVDaGFpbihWTSYgdm0sIFN0cnVjdHVyZUNo
YWluKiBjYWNoZWRQcm90b3R5cGVDaGFpbikgeyBtX2NhY2hlZFByb3RvdHlwZUNoYWluLnNldCh2
bSwgdGhpcywgY2FjaGVkUHJvdG90eXBlQ2hhaW4pOyB9CiAgICAgICAgIFN0cnVjdHVyZUNoYWlu
KiBjYWNoZWRQcm90b3R5cGVDaGFpbigpIHsgcmV0dXJuIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4u
Z2V0KCk7IH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENs
YXNzSW5mbyBzX2luZm87CkBAIC03OCwxMCArNzgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
cHJvdGVjdGVkOgogICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lQXJyYXlEYXRhKiBwcm9wZXJ0eU5hbWVBcnJheURhdGEsIEpTT2JqZWN0KiBv
YmplY3QpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMt
Pmdsb2JhbERhdGEoKSk7CisgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52
bSgpKTsKICAgICAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5RGF0YTo6UHJvcGVydHlOYW1lVmVj
dG9yJiBwcm9wZXJ0eU5hbWVWZWN0b3IgPSBwcm9wZXJ0eU5hbWVBcnJheURhdGEtPnByb3BlcnR5
TmFtZVZlY3RvcigpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2pzU3Ry
aW5nc1NpemU7ICsraSkKLSAgICAgICAgICAgICAgICBtX2pzU3RyaW5nc1tpXS5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBqc093bmVkU3RyaW5nKGV4ZWMsIHByb3BlcnR5TmFtZVZlY3Rv
cltpXS5zdHJpbmcoKSkpOworICAgICAgICAgICAgICAgIG1fanNTdHJpbmdzW2ldLnNldChleGVj
LT52bSgpLCB0aGlzLCBqc093bmVkU3RyaW5nKGV4ZWMsIHByb3BlcnR5TmFtZVZlY3RvcltpXS5z
dHJpbmcoKSkpOwogICAgICAgICAgICAgbV9jYWNoZWRTdHJ1Y3R1cmVJbmxpbmVDYXBhY2l0eSA9
IG9iamVjdC0+c3RydWN0dXJlKCktPmlubGluZUNhcGFjaXR5KCk7CiAgICAgICAgIH0KIApAQCAt
MTA4LDkgKzEwOCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gbV9lbnVtZXJh
dGlvbkNhY2hlLmdldCgpOwogICAgIH0KICAgICAKLSAgICBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmVS
YXJlRGF0YTo6c2V0RW51bWVyYXRpb25DYWNoZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNv
bnN0IFN0cnVjdHVyZSogb3duZXIsIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIHZhbHVlKQorICAg
IGlubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpzZXRFbnVtZXJhdGlvbkNhY2hlKFZNJiB2
bSwgY29uc3QgU3RydWN0dXJlKiBvd25lciwgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogdmFsdWUp
CiAgICAgewotICAgICAgICBtX2VudW1lcmF0aW9uQ2FjaGUuc2V0KGdsb2JhbERhdGEsIG93bmVy
LCB2YWx1ZSk7CisgICAgICAgIG1fZW51bWVyYXRpb25DYWNoZS5zZXQodm0sIG93bmVyLCB2YWx1
ZSk7CiAgICAgfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTMg
KzQ3LDEzIEBAIHZvaWQgSlNQcm94eTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwKICAgICB2
aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV90YXJnZXQpOwogfQogCi12b2lkIEpTUHJveHk6
OnNldFRhcmdldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCit2b2lkIEpTUHJveHk6OnNldFRhcmdldChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgQVNTRVJUX0FSRyhnbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdCk7Ci0gICAgbV90YXJnZXQuc2V0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCk7
Ci0gICAgc2V0UHJvdG90eXBlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdC0+cHJvdG90eXBlKCkp
OworICAgIG1fdGFyZ2V0LnNldCh2bSwgdGhpcywgZ2xvYmFsT2JqZWN0KTsKKyAgICBzZXRQcm90
b3R5cGUodm0sIGdsb2JhbE9iamVjdC0+cHJvdG90eXBlKCkpOwogCi0gICAgUHJvdG90eXBlTWFw
JiBwcm90b3R5cGVNYXAgPSBnbG9iYWxEYXRhLnByb3RvdHlwZU1hcDsKKyAgICBQcm90b3R5cGVN
YXAmIHByb3RvdHlwZU1hcCA9IHZtLnByb3RvdHlwZU1hcDsKICAgICBpZiAoIXByb3RvdHlwZU1h
cC5pc1Byb3RvdHlwZSh0aGlzKSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDE2
ICszNCwxNiBAQCBjbGFzcyBKU1Byb3h5IDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqCiBwdWJs
aWM6CiAgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGlj
IEpTUHJveHkqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU09iamVjdCogdGFyZ2V0KQorICAgIHN0YXRpYyBKU1Byb3h5KiBjcmVhdGUoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIHRhcmdldCkKICAgICB7Ci0gICAg
ICAgIEpTUHJveHkqIHByb3h5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNQcm94eT4o
Z2xvYmFsRGF0YS5oZWFwKSkgSlNQcm94eShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAgICAg
ICBwcm94eS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgdGFyZ2V0KTsKKyAgICAgICAgSlNQ
cm94eSogcHJveHkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1Byb3h5Pih2bS5oZWFw
KSkgSlNQcm94eSh2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgcHJveHktPmZpbmlzaENyZWF0aW9u
KHZtLCB0YXJnZXQpOwogICAgICAgICByZXR1cm4gcHJveHk7CiAgICAgfQogCi0gICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KFByb3h5VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oUHJv
eHlUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogICAgIHN0YXRpYyBK
U19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CkBAIC01MSwyNyArNTEsMjcgQEAg
cHVibGljOgogICAgIEpTT2JqZWN0KiB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldC5n
ZXQoKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSlNQcm94eShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICA6IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKKyAgICBKU1Byb3h5KFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCisgICAgICAgIDogSlNEZXN0cnVjdGlibGVPYmplY3Qodm0sIHN0cnVjdHVyZSkK
ICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgewotICAgICAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOwogICAgIH0KIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU09iamVjdCogdGFyZ2V0KQorICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBKU09iamVjdCogdGFyZ2V0KQogICAgIHsKLSAgICAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgICAgIG1fdGFyZ2V0LnNldChnbG9iYWxEYXRhLCB0
aGlzLCB0YXJnZXQpOworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAg
IG1fdGFyZ2V0LnNldCh2bSwgdGhpcywgdGFyZ2V0KTsKICAgICB9CiAKICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IElu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8g
fCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgc2V0VGFyZ2V0KEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0Kik7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRUYXJnZXQoVk0mLCBKU0dsb2JhbE9iamVj
dCopOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29u
c3QgSlNPYmplY3QqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShy
ZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3Bl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDcgKzE4Nyw3IEBAIHN0YXRpYyBib29sIGV4ZWN1
dGVSZXNvbHZlT3BlcmF0aW9ucyhDYWwKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgcGMtPm1fc3RydWN0dXJlLnNldChjYWxsRnJhbWUt
Pmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCks
IHN0cnVjdHVyZSk7CisgICAgICAgICAgICBwYy0+bV9zdHJ1Y3R1cmUuc2V0KGNhbGxGcmFtZS0+
dm0oKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVy
ZSk7CiAgICAgICAgICAgICBwYy0+bV9vZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwogICAg
ICAgICAgICAgcmVzdWx0LnNldFZhbHVlKHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtMzAzLDcgKzMwMyw3IEBAIHRlbXBsYXRlIDxKU1Njb3BlOjpMb29rdXBNb2RlIG1vZGUs
IEpTU2MKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwdXRUb0Jhc2VPcGVyYXRpb24pIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRUb0Jhc2VPcGVyYXRpb24tPm1faXNEeW5h
bWljID0gcmVxdWlyZXNEeW5hbWljQ2hlY2tzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1dFRvQmFzZU9wZXJhdGlvbi0+bV9raW5kID0gUHV0VG9CYXNlT3BlcmF0aW9uOjpHbG9iYWxQ
cm9wZXJ0eVB1dDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRUb0Jhc2VPcGVyYXRp
b24tPm1fc3RydWN0dXJlLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLT5j
b2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksIGdsb2JhbE9iamVjdC0+c3RydWN0dXJlKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFRvQmFzZU9wZXJhdGlvbi0+bV9zdHJ1
Y3R1cmUuc2V0KGNhbGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJF
eGVjdXRhYmxlKCksIGdsb2JhbE9iamVjdC0+c3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNldFB1dFByb3BlcnR5QWNjZXNzT2Zmc2V0KHB1dFRvQmFzZU9wZXJhdGlv
biwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJldHVyblZhbHVlcykgewpAQCAtMzQ2LDcgKzM0
Niw3IEBAIHRlbXBsYXRlIDxKU1Njb3BlOjpMb29rdXBNb2RlIG1vZGUsIEpTU2MKIAogICAgICAg
ICAgICAgICAgICAgICBpZiAocHV0VG9CYXNlT3BlcmF0aW9uKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBwdXRUb0Jhc2VPcGVyYXRpb24tPm1fa2luZCA9IGVudHJ5LmlzUmVhZE9ubHkoKSA/
IFB1dFRvQmFzZU9wZXJhdGlvbjo6UmVhZG9ubHkgOiBQdXRUb0Jhc2VPcGVyYXRpb246OlZhcmlh
YmxlUHV0OwotICAgICAgICAgICAgICAgICAgICAgICAgcHV0VG9CYXNlT3BlcmF0aW9uLT5tX3N0
cnVjdHVyZS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCktPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1dFRvQmFz
ZU9wZXJhdGlvbi0+bV9zdHJ1Y3R1cmUuc2V0KGNhbGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1lLT5j
b2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
cHV0VG9CYXNlT3BlcmF0aW9uLT5tX29mZnNldCA9IGVudHJ5LmdldEluZGV4KCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBwdXRUb0Jhc2VPcGVyYXRpb24tPm1fc2NvcGVEZXB0aCA9IChza2lw
VG9wU2NvcGVOb2RlID8gMSA6IDApICsgc2NvcGVDb3VudDsKICAgICAgICAgICAgICAgICAgICAg
fQpAQCAtNDk5LDcgKzQ5OSw3IEBAIEpTVmFsdWUgSlNTY29wZTo6cmVzb2x2ZVdpdGhCYXNlKENh
bGxGcmEKICAgICBpZiAoSlNPYmplY3QqIHByb3BlcnR5QmFzZSA9IEpTU2NvcGU6OnJlc29sdmVD
b250YWluaW5nU2NvcGU8UmV0dXJuQmFzZUFuZFZhbHVlPihjYWxsRnJhbWUsIGlkZW50aWZpZXIs
IHNsb3QsIG9wZXJhdGlvbnMsIHB1dFRvQmFzZU9wZXJhdGlvbnMsIGZhbHNlKSkgewogICAgICAg
ICBBU1NFUlQob3BlcmF0aW9ucy0+c2l6ZSgpKTsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHNs
b3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudGlmaWVyKTsKLSAgICAgICAgaWYgKGNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbikKKyAgICAgICAgaWYgKGNhbGxGcmFtZS0+dm0oKS5l
eGNlcHRpb24pCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogCiAgICAgICAgICpiYXNl
ID0gcHJvcGVydHlCYXNlOwpAQCAtNTI5LDcgKzUyOSw3IEBAIEpTVmFsdWUgSlNTY29wZTo6cmVz
b2x2ZVdpdGhUaGlzKENhbGxGcmEKICAgICBpZiAoSlNPYmplY3QqIHByb3BlcnR5QmFzZSA9IEpT
U2NvcGU6OnJlc29sdmVDb250YWluaW5nU2NvcGU8UmV0dXJuVGhpc0FuZFZhbHVlPihjYWxsRnJh
bWUsIGlkZW50aWZpZXIsIHNsb3QsIG9wZXJhdGlvbnMsIDAsIGZhbHNlKSkgewogICAgICAgICBB
U1NFUlQob3BlcmF0aW9ucy0+c2l6ZSgpKTsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHNsb3Qu
Z2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudGlmaWVyKTsKLSAgICAgICAgaWYgKGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbikKKyAgICAgICAgaWYgKGNhbGxGcmFtZS0+dm0oKS5leGNl
cHRpb24pCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICBBU1NFUlQodmFs
dWUpOwogICAgICAgICAqYmFzZSA9IHByb3BlcnR5QmFzZS0+c3RydWN0dXJlKCktPnR5cGVJbmZv
KCkuaXNFbnZpcm9ubWVudFJlY29yZCgpID8ganNVbmRlZmluZWQoKSA6IEpTVmFsdWUocHJvcGVy
dHlCYXNlKTsKQEAgLTU2NCw3ICs1NjQsNyBAQCB2b2lkIEpTU2NvcGU6OnJlc29sdmVQdXQoQ2Fs
bEZyYW1lKiBjYWxsCiAgICAgICAgICAgICAgICAgZ290byBnZW5lcmljSGFuZGxlcjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBvcGVyYXRpb24tPm1fcmVnaXN0ZXJBZGRyZXNz
LT5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGJhc2UuYXNDZWxsKCksIHZhbHVlKTsKKyAg
ICAgICAgb3BlcmF0aW9uLT5tX3JlZ2lzdGVyQWRkcmVzcy0+c2V0KGNhbGxGcmFtZS0+dm0oKSwg
YmFzZS5hc0NlbGwoKSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIFB1dFRv
QmFzZU9wZXJhdGlvbjo6VmFyaWFibGVQdXQ6IHsKQEAgLTU3NCw3ICs1NzQsNyBAQCB2b2lkIEpT
U2NvcGU6OnJlc29sdmVQdXQoQ2FsbEZyYW1lKiBjYWxsCiAgICAgICAgICAgICAgICAgZ290byBn
ZW5lcmljSGFuZGxlcjsKICAgICAgICAgfQogICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KiB2YXJp
YWJsZU9iamVjdCA9IGpzQ2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oYmFzZSk7Ci0gICAgICAgIHZh
cmlhYmxlT2JqZWN0LT5yZWdpc3RlckF0KG9wZXJhdGlvbi0+bV9vZmZzZXQpLnNldChjYWxsRnJh
bWUtPmdsb2JhbERhdGEoKSwgdmFyaWFibGVPYmplY3QsIHZhbHVlKTsKKyAgICAgICAgdmFyaWFi
bGVPYmplY3QtPnJlZ2lzdGVyQXQob3BlcmF0aW9uLT5tX29mZnNldCkuc2V0KGNhbGxGcmFtZS0+
dm0oKSwgdmFyaWFibGVPYmplY3QsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtNTgyLDcgKzU4Miw3IEBAIHZvaWQgSlNTY29wZTo6cmVzb2x2ZVB1dChDYWxsRnJhbWUqIGNh
bGwKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGJhc2UpOwog
ICAgICAgICBpZiAob3BlcmF0aW9uLT5tX3N0cnVjdHVyZS5nZXQoKSAhPSBvYmplY3QtPnN0cnVj
dHVyZSgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KGNh
bGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBvcGVyYXRpb24tPm1fb2Zmc2V0LCB2YWx1ZSk7CisgICAg
ICAgIG9iamVjdC0+cHV0RGlyZWN0KGNhbGxGcmFtZS0+dm0oKSwgb3BlcmF0aW9uLT5tX29mZnNl
dCwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02MDcsNyArNjA3LDcgQEAg
dm9pZCBKU1Njb3BlOjpyZXNvbHZlUHV0KENhbGxGcmFtZSogY2FsbAogICAgIGlmIChzbG90LmJh
c2UoKSAhPSBiYXNlT2JqZWN0KQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKCFiYXNlT2Jq
ZWN0LT5oYXNJbmxpbmVTdG9yYWdlKCkpOwotICAgIG9wZXJhdGlvbi0+bV9zdHJ1Y3R1cmUuc2V0
KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lckV4
ZWN1dGFibGUoKSwgYmFzZU9iamVjdC0+c3RydWN0dXJlKCkpOworICAgIG9wZXJhdGlvbi0+bV9z
dHJ1Y3R1cmUuc2V0KGNhbGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+b3du
ZXJFeGVjdXRhYmxlKCksIGJhc2VPYmplY3QtPnN0cnVjdHVyZSgpKTsKICAgICBzZXRQdXRQcm9w
ZXJ0eUFjY2Vzc09mZnNldChvcGVyYXRpb24sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgIHJl
dHVybjsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgJKHJl
dmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNTksMTEgKzU5LDExIEBAIHB1YmxpYzoKICAgICBpbnQgbG9j
YWxEZXB0aCgpOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpOwotICAgIEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpOworICAgIFZNKiB2bSgpOwogICAgIEpTT2JqZWN0KiBn
bG9iYWxUaGlzKCk7CiAKIHByb3RlY3RlZDoKLSAgICBKU1Njb3BlKEpTR2xvYmFsRGF0YSYsIFN0
cnVjdHVyZSosIEpTU2NvcGUqIG5leHQpOworICAgIEpTU2NvcGUoVk0mLCBTdHJ1Y3R1cmUqLCBK
U1Njb3BlKiBuZXh0KTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKIHByaXZh
dGU6CkBAIC04MCw5ICs4MCw5IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPFJldHVyblZhbHVl
cz4gc3RhdGljIEpTT2JqZWN0KiByZXNvbHZlQ29udGFpbmluZ1Njb3BlKENhbGxGcmFtZSosIGNv
bnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmLCBSZXNvbHZlT3BlcmF0aW9ucyosIFB1dFRv
QmFzZU9wZXJhdGlvbiosIGJvb2wgaXNTdHJpY3QpOwogfTsKIAotaW5saW5lIEpTU2NvcGU6OkpT
U2NvcGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNT
Y29wZSogbmV4dCkKLSAgICA6IEJhc2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQotICAgICwgbV9u
ZXh0KGdsb2JhbERhdGEsIHRoaXMsIG5leHQsIFdyaXRlQmFycmllcjxKU1Njb3BlPjo6TWF5QmVO
dWxsKQoraW5saW5lIEpTU2NvcGU6OkpTU2NvcGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNTY29wZSogbmV4dCkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fbmV4
dCh2bSwgdGhpcywgbmV4dCwgV3JpdGVCYXJyaWVyPEpTU2NvcGU+OjpNYXlCZU51bGwpCiB7CiB9
CiAKQEAgLTEyNyw5ICsxMjcsOSBAQCBpbmxpbmUgSlNHbG9iYWxPYmplY3QqIEpTU2NvcGU6Omds
b2JhbE9iCiAgICAgcmV0dXJuIHN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKTsKIH0KIAotaW5s
aW5lIEpTR2xvYmFsRGF0YSogSlNTY29wZTo6Z2xvYmFsRGF0YSgpCitpbmxpbmUgVk0qIEpTU2Nv
cGU6OnZtKCkKIHsgCi0gICAgcmV0dXJuIEhlYXA6OmhlYXAodGhpcyktPmdsb2JhbERhdGEoKTsK
KyAgICByZXR1cm4gSGVhcDo6aGVhcCh0aGlzKS0+dm0oKTsKIH0KIAogaW5saW5lIFJlZ2lzdGVy
JiBSZWdpc3Rlcjo6b3BlcmF0b3I9KEpTU2NvcGUqIHNjb3BlKQpAQCAtMTQzLDEwICsxNDMsMTAg
QEAgaW5saW5lIEpTU2NvcGUqIFJlZ2lzdGVyOjpzY29wZSgpIGNvbnN0CiAgICAgcmV0dXJuIGpz
Q2FzdDxKU1Njb3BlKj4oanNWYWx1ZSgpKTsKIH0KIAotaW5saW5lIEpTR2xvYmFsRGF0YSYgRXhl
Y1N0YXRlOjpnbG9iYWxEYXRhKCkgY29uc3QKK2lubGluZSBWTSYgRXhlY1N0YXRlOjp2bSgpIGNv
bnN0CiB7Ci0gICAgQVNTRVJUKHNjb3BlKCktPmdsb2JhbERhdGEoKSk7Ci0gICAgcmV0dXJuICpz
Y29wZSgpLT5nbG9iYWxEYXRhKCk7CisgICAgQVNTRVJUKHNjb3BlKCktPnZtKCkpOworICAgIHJl
dHVybiAqc2NvcGUoKS0+dm0oKTsKIH0KIAogaW5saW5lIEpTR2xvYmFsT2JqZWN0KiBFeGVjU3Rh
dGU6OmxleGljYWxHbG9iYWxPYmplY3QoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MiwxNCArODIsMTQgQEAg
cHVibGljOgogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpTdHJ1
Y3R1cmVGbGFnczsKIAotICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTY29wZSogc2NvcGUpCi0gICAg
ICAgIDogSlNTeW1ib2xUYWJsZU9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIHNjb3BlKQor
ICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNTY29wZSogc2NvcGUpCisgICAgICAgIDogSlNTeW1ib2xUYWJsZU9iamVjdCh2bSwgc3Ry
dWN0dXJlLCBzY29wZSkKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0p
CiAgICAgewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIH0KIAogICAgIFNlZ21lbnRlZFZlY3Rv
cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4sIDE2PiBtX3JlZ2lzdGVyczsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNyArNDAsNyBAQCB2b2lkIEpTUm9wZVN0cmluZzo6Um9wZUJ1aWxkZXI6OmV4cGFu
ZCgpCiB7CiAgICAgQVNTRVJUKG1faW5kZXggPT0gSlNSb3BlU3RyaW5nOjpzX21heEludGVybmFs
Um9wZUxlbmd0aCk7CiAgICAgSlNTdHJpbmcqIGpzU3RyaW5nID0gbV9qc1N0cmluZzsKLSAgICBt
X2pzU3RyaW5nID0ganNTdHJpbmdCdWlsZGVyKCZtX2dsb2JhbERhdGEpOworICAgIG1fanNTdHJp
bmcgPSBqc1N0cmluZ0J1aWxkZXIoJm1fdm0pOwogICAgIG1faW5kZXggPSAwOwogICAgIGFwcGVu
ZChqc1N0cmluZyk7CiB9CkBAIC0yNjEsOCArMjYxLDggQEAgZG91YmxlIEpTU3RyaW5nOjp0b051
bWJlcihFeGVjU3RhdGUqIGV4ZQogCiBpbmxpbmUgU3RyaW5nT2JqZWN0KiBTdHJpbmdPYmplY3Q6
OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
U3RyaW5nKiBzdHJpbmcpCiB7Ci0gICAgU3RyaW5nT2JqZWN0KiBvYmplY3QgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxTdHJpbmdPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBTdHJpbmdPYmpl
Y3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVy
ZSgpKTsKLSAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgc3Ry
aW5nKTsKKyAgICBTdHJpbmdPYmplY3QqIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPFN0cmluZ09iamVjdD4oKmV4ZWMtPmhlYXAoKSkpIFN0cmluZ09iamVjdChleGVjLT52bSgp
LCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKTsKKyAgICBvYmplY3QtPmZp
bmlzaENyZWF0aW9uKGV4ZWMtPnZtKCksIHN0cmluZyk7CiAgICAgcmV0dXJuIG9iamVjdDsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lv
biAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSwzNCArMzUsMzQgQEAgY2xhc3MgSlNTdHJpbmc7CiBjbGFzcyBK
U1JvcGVTdHJpbmc7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLUpTU3RyaW5nKiBq
c0VtcHR5U3RyaW5nKEpTR2xvYmFsRGF0YSopOworSlNTdHJpbmcqIGpzRW1wdHlTdHJpbmcoVk0q
KTsKIEpTU3RyaW5nKiBqc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSopOwotSlNTdHJpbmcqIGpzU3Ry
aW5nKEpTR2xvYmFsRGF0YSosIGNvbnN0IFN0cmluZyYpOyAvLyByZXR1cm5zIGVtcHR5IHN0cmlu
ZyBpZiBwYXNzZWQgbnVsbCBzdHJpbmcKK0pTU3RyaW5nKiBqc1N0cmluZyhWTSosIGNvbnN0IFN0
cmluZyYpOyAvLyByZXR1cm5zIGVtcHR5IHN0cmluZyBpZiBwYXNzZWQgbnVsbCBzdHJpbmcKIEpT
U3RyaW5nKiBqc1N0cmluZyhFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsgLy8gcmV0dXJucyBl
bXB0eSBzdHJpbmcgaWYgcGFzc2VkIG51bGwgc3RyaW5nCiAKLUpTU3RyaW5nKiBqc1NpbmdsZUNo
YXJhY3RlclN0cmluZyhKU0dsb2JhbERhdGEqLCBVQ2hhcik7CitKU1N0cmluZyoganNTaW5nbGVD
aGFyYWN0ZXJTdHJpbmcoVk0qLCBVQ2hhcik7CiBKU1N0cmluZyoganNTaW5nbGVDaGFyYWN0ZXJT
dHJpbmcoRXhlY1N0YXRlKiwgVUNoYXIpOwogSlNTdHJpbmcqIGpzU2luZ2xlQ2hhcmFjdGVyU3Vi
c3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIG9mZnNldCk7Ci1KU1N0
cmluZyoganNTdWJzdHJpbmcoSlNHbG9iYWxEYXRhKiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworSlNTdHJpbmcqIGpzU3Vic3RyaW5nKFZNKiwgY29u
c3QgU3RyaW5nJiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogSlNTdHJpbmcq
IGpzU3Vic3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKTsKIAogLy8gTm9uLXRyaXZpYWwgc3RyaW5ncyBhcmUgdHdvIG9yIG1v
cmUgY2hhcmFjdGVycyBsb25nLgogLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBmYXN0ZXIgdGhhbiBq
dXN0IGNhbGxpbmcganNTdHJpbmcuCi1KU1N0cmluZyoganNOb250cml2aWFsU3RyaW5nKEpTR2xv
YmFsRGF0YSosIGNvbnN0IFN0cmluZyYpOworSlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhW
TSosIGNvbnN0IFN0cmluZyYpOwogSlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhFeGVjU3Rh
dGUqLCBjb25zdCBTdHJpbmcmKTsKIAogLy8gU2hvdWxkIGJlIHVzZWQgZm9yIHN0cmluZ3MgdGhh
dCBhcmUgb3duZWQgYnkgYW4gb2JqZWN0IHRoYXQgd2lsbAogLy8gbGlrZWx5IG91dGxpdmUgdGhl
IEpTVmFsdWUgdGhpcyBtYWtlcywgc3VjaCBhcyB0aGUgcGFyc2UgdHJlZSBvciBhCiAvLyBET00g
b2JqZWN0IHRoYXQgY29udGFpbnMgYSBTdHJpbmcKLUpTU3RyaW5nKiBqc093bmVkU3RyaW5nKEpT
R2xvYmFsRGF0YSosIGNvbnN0IFN0cmluZyYpOworSlNTdHJpbmcqIGpzT3duZWRTdHJpbmcoVk0q
LCBjb25zdCBTdHJpbmcmKTsKIEpTU3RyaW5nKiBqc093bmVkU3RyaW5nKEV4ZWNTdGF0ZSosIGNv
bnN0IFN0cmluZyYpOwogCi1KU1JvcGVTdHJpbmcqIGpzU3RyaW5nQnVpbGRlcihKU0dsb2JhbERh
dGEqKTsKK0pTUm9wZVN0cmluZyoganNTdHJpbmdCdWlsZGVyKFZNKik7CiAKIGNsYXNzIEpTU3Ry
aW5nIDogcHVibGljIEpTQ2VsbCB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIEpJVDsKLSAg
ICBmcmllbmQgY2xhc3MgSlNHbG9iYWxEYXRhOworICAgIGZyaWVuZCBjbGFzcyBWTTsKICAgICBm
cmllbmQgY2xhc3MgU3BlY2lhbGl6ZWRUaHVua0pJVDsKICAgICBmcmllbmQgY2xhc3MgSlNSb3Bl
U3RyaW5nOwogICAgIGZyaWVuZCBjbGFzcyBNYXJrU3RhY2s7CkBAIC03Niw2MyArNzYsNjMgQEAg
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKIHByaXZhdGU6Ci0g
ICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IHZhbHVlKQotICAgICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSkKKyAgICBKU1N0cmluZyhWTSYgdm0sIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gdmFsdWUpCisgICAgICAgIDogSlNDZWxsKHZtLCB2bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpCiAgICAgICAgICwgbV9mbGFncygwKQogICAgICAgICAsIG1fdmFsdWUodmFsdWUpCiAgICAg
ewogICAgIH0KIAotICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLSAgICAg
ICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkp
CisgICAgSlNTdHJpbmcoVk0mIHZtKQorICAgICAgICA6IEpTQ2VsbCh2bSwgdm0uc3RyaW5nU3Ry
dWN0dXJlLmdldCgpKQogICAgICAgICAsIG1fZmxhZ3MoMCkKICAgICB7CiAgICAgfQogCi0gICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBsZW5n
dGgpCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0sIHNpemVfdCBsZW5ndGgpCiAgICAg
ewogICAgICAgICBBU1NFUlQoIW1fdmFsdWUuaXNOdWxsKCkpOwotICAgICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OwogICAgICAgICBtX2xlbmd0aCA9IGxlbmd0aDsKICAgICAgICAgc2V0SXM4Qml0KG1fdmFsdWUu
aW1wbCgpLT5pczhCaXQoKSk7Ci0gICAgICAgIGdsb2JhbERhdGEubV9uZXdTdHJpbmdzU2luY2VM
YXN0SGFzaENvbnMrKzsKKyAgICAgICAgdm0ubV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMr
KzsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgc2l6ZV90IGxlbmd0aCwgc2l6ZV90IGNvc3QpCisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYgdm0sIHNpemVfdCBsZW5ndGgsIHNpemVfdCBjb3N0KQogICAgIHsKICAgICAgICAgQVNT
RVJUKCFtX3ZhbHVlLmlzTnVsbCgpKTsKLSAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xv
YmFsRGF0YSk7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgbV9s
ZW5ndGggPSBsZW5ndGg7CiAgICAgICAgIHNldElzOEJpdChtX3ZhbHVlLmltcGwoKS0+aXM4Qml0
KCkpOwogICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoY29z
dCk7Ci0gICAgICAgIGdsb2JhbERhdGEubV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMrKzsK
KyAgICAgICAgdm0ubV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMrKzsKICAgICB9CiAKIHBy
b3RlY3RlZDoKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICB7Ci0gICAgICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7CiAgICAgICAgIG1fbGVuZ3RoID0gMDsKICAgICAgICAgc2V0SXM4Qml0KHRydWUpOwot
ICAgICAgICBnbG9iYWxEYXRhLm1fbmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zKys7CisgICAg
ICAgIHZtLm1fbmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zKys7CiAgICAgfQogICAgICAgICAK
IHB1YmxpYzoKLSAgICBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdmFsdWUpCisgICAgc3RhdGljIEpTU3RyaW5n
KiBjcmVhdGUoVk0mIHZtLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHZhbHVlKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKHZhbHVlKTsKICAgICAgICAgc2l6ZV90IGxlbmd0aCA9IHZhbHVlLT5sZW5n
dGgoKTsKICAgICAgICAgc2l6ZV90IGNvc3QgPSB2YWx1ZS0+Y29zdCgpOwotICAgICAgICBKU1N0
cmluZyogbmV3U3RyaW5nID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KGds
b2JhbERhdGEuaGVhcCkpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHZhbHVlKTsKLSAgICAgICAgbmV3
U3RyaW5nLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBsZW5ndGgsIGNvc3QpOworICAgICAg
ICBKU1N0cmluZyogbmV3U3RyaW5nID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNTdHJp
bmc+KHZtLmhlYXApKSBKU1N0cmluZyh2bSwgdmFsdWUpOworICAgICAgICBuZXdTdHJpbmctPmZp
bmlzaENyZWF0aW9uKHZtLCBsZW5ndGgsIGNvc3QpOwogICAgICAgICByZXR1cm4gbmV3U3RyaW5n
OwogICAgIH0KLSAgICBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZUhhc090aGVyT3duZXIoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHZhbHVlKQorICAgIHN0
YXRpYyBKU1N0cmluZyogY3JlYXRlSGFzT3RoZXJPd25lcihWTSYgdm0sIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gdmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlQodmFsdWUpOwogICAgICAgICBz
aXplX3QgbGVuZ3RoID0gdmFsdWUtPmxlbmd0aCgpOwotICAgICAgICBKU1N0cmluZyogbmV3U3Ry
aW5nID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KGdsb2JhbERhdGEuaGVh
cCkpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHZhbHVlKTsKLSAgICAgICAgbmV3U3RyaW5nLT5maW5p
c2hDcmVhdGlvbihnbG9iYWxEYXRhLCBsZW5ndGgpOworICAgICAgICBKU1N0cmluZyogbmV3U3Ry
aW5nID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KHZtLmhlYXApKSBKU1N0
cmluZyh2bSwgdmFsdWUpOworICAgICAgICBuZXdTdHJpbmctPmZpbmlzaENyZWF0aW9uKHZtLCBs
ZW5ndGgpOwogICAgICAgICByZXR1cm4gbmV3U3RyaW5nOwogICAgIH0KIApAQCAtMTUzLDkgKzE1
Myw5IEBAIHB1YmxpYzoKICAgICBib29sIGNhbkdldEluZGV4KHVuc2lnbmVkIGkpIHsgcmV0dXJu
IGkgPCBtX2xlbmd0aDsgfQogICAgIEpTU3RyaW5nKiBnZXRJbmRleChFeGVjU3RhdGUqLCB1bnNp
Z25lZCk7CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvKQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCiAgICAgewotICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywg
VHlwZUluZm8oU3RyaW5nVHlwZSwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyksICZz
X2luZm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG8sIFR5cGVJbmZvKFN0cmluZ1R5cGUsIE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm8pLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mTGVu
Z3RoKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTU3RyaW5nLCBtX2xlbmd0aCk7IH0KQEAg
LTIxNSwxMyArMjE1LDEzIEBAIHByaXZhdGU6CiBjbGFzcyBKU1JvcGVTdHJpbmcgOiBwdWJsaWMg
SlNTdHJpbmcgewogICAgIGZyaWVuZCBjbGFzcyBKU1N0cmluZzsKIAotICAgIGZyaWVuZCBKU1Jv
cGVTdHJpbmcqIGpzU3RyaW5nQnVpbGRlcihKU0dsb2JhbERhdGEqKTsKKyAgICBmcmllbmQgSlNS
b3BlU3RyaW5nKiBqc1N0cmluZ0J1aWxkZXIoVk0qKTsKIAogICAgIGNsYXNzIFJvcGVCdWlsZGVy
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFJvcGVCdWlsZGVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKLSAgICAgICAgICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCi0gICAgICAgICAg
ICAsIG1fanNTdHJpbmcoanNTdHJpbmdCdWlsZGVyKCZnbG9iYWxEYXRhKSkKKyAgICAgICAgUm9w
ZUJ1aWxkZXIoVk0mIHZtKQorICAgICAgICAgICAgOiBtX3ZtKHZtKQorICAgICAgICAgICAgLCBt
X2pzU3RyaW5nKGpzU3RyaW5nQnVpbGRlcigmdm0pKQogICAgICAgICAgICAgLCBtX2luZGV4KDAp
CiAgICAgICAgIHsKICAgICAgICAgfQpAQCAtMjMwLDcgKzIzMCw3IEBAIGNsYXNzIEpTUm9wZVN0
cmluZyA6IHB1YmxpYyBKU1N0cmluZyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChtX2lu
ZGV4ID09IEpTUm9wZVN0cmluZzo6c19tYXhJbnRlcm5hbFJvcGVMZW5ndGgpCiAgICAgICAgICAg
ICAgICAgZXhwYW5kKCk7Ci0gICAgICAgICAgICBtX2pzU3RyaW5nLT5hcHBlbmQobV9nbG9iYWxE
YXRhLCBtX2luZGV4KyssIGpzU3RyaW5nKTsKKyAgICAgICAgICAgIG1fanNTdHJpbmctPmFwcGVu
ZChtX3ZtLCBtX2luZGV4KyssIGpzU3RyaW5nKTsKICAgICAgICAgfQogCiAgICAgICAgIEpTUm9w
ZVN0cmluZyogcmVsZWFzZSgpCkBAIC0yNDUsNjYgKzI0NSw2NiBAQCBjbGFzcyBKU1JvcGVTdHJp
bmcgOiBwdWJsaWMgSlNTdHJpbmcgewogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgZXhwYW5k
KCk7CiAgICAgICAgICAgICAKLSAgICAgICAgSlNHbG9iYWxEYXRhJiBtX2dsb2JhbERhdGE7Cisg
ICAgICAgIFZNJiBtX3ZtOwogICAgICAgICBKU1JvcGVTdHJpbmcqIG1fanNTdHJpbmc7CiAgICAg
ICAgIHNpemVfdCBtX2luZGV4OwogICAgIH07CiAgICAgICAgIAogcHJpdmF0ZToKLSAgICBKU1Jv
cGVTdHJpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAgICAgICA6IEpTU3RyaW5nKGds
b2JhbERhdGEpCisgICAgSlNSb3BlU3RyaW5nKFZNJiB2bSkKKyAgICAgICAgOiBKU1N0cmluZyh2
bSkKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTU3RyaW5nKiBzMSwgSlNTdHJpbmcqIHMyKQorICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBKU1N0cmluZyogczEsIEpTU3RyaW5nKiBzMikKICAgICB7Ci0gICAg
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CiAgICAgICAgIG1fbGVuZ3RoID0gczEtPmxlbmd0aCgpICsgczItPmxl
bmd0aCgpOwogICAgICAgICBzZXRJczhCaXQoczEtPmlzOEJpdCgpICYmIHMyLT5pczhCaXQoKSk7
Ci0gICAgICAgIG1fZmliZXJzWzBdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMSk7Ci0gICAgICAg
IG1fZmliZXJzWzFdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMik7CisgICAgICAgIG1fZmliZXJz
WzBdLnNldCh2bSwgdGhpcywgczEpOworICAgICAgICBtX2ZpYmVyc1sxXS5zZXQodm0sIHRoaXMs
IHMyKTsKICAgICB9CiAgICAgICAgIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU1N0cmluZyogczEsIEpTU3RyaW5nKiBzMiwgSlNTdHJpbmcqIHMz
KQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1N0cmluZyogczEsIEpTU3RyaW5n
KiBzMiwgSlNTdHJpbmcqIHMzKQogICAgIHsKLSAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsRGF0YSk7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAg
bV9sZW5ndGggPSBzMS0+bGVuZ3RoKCkgKyBzMi0+bGVuZ3RoKCkgKyBzMy0+bGVuZ3RoKCk7CiAg
ICAgICAgIHNldElzOEJpdChzMS0+aXM4Qml0KCkgJiYgczItPmlzOEJpdCgpICYmICBzMy0+aXM4
Qml0KCkpOwotICAgICAgICBtX2ZpYmVyc1swXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgczEpOwot
ICAgICAgICBtX2ZpYmVyc1sxXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgczIpOwotICAgICAgICBt
X2ZpYmVyc1syXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgczMpOworICAgICAgICBtX2ZpYmVyc1sw
XS5zZXQodm0sIHRoaXMsIHMxKTsKKyAgICAgICAgbV9maWJlcnNbMV0uc2V0KHZtLCB0aGlzLCBz
Mik7CisgICAgICAgIG1fZmliZXJzWzJdLnNldCh2bSwgdGhpcywgczMpOwogICAgIH0KIAotICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIHsKLSAgICAgICAgSlNTdHJpbmc6OmZpbmlzaENy
ZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBKU1N0cmluZzo6ZmluaXNoQ3JlYXRpb24odm0p
OwogICAgIH0KIAotICAgIHZvaWQgYXBwZW5kKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6
ZV90IGluZGV4LCBKU1N0cmluZyoganNTdHJpbmcpCisgICAgdm9pZCBhcHBlbmQoVk0mIHZtLCBz
aXplX3QgaW5kZXgsIEpTU3RyaW5nKiBqc1N0cmluZykKICAgICB7Ci0gICAgICAgIG1fZmliZXJz
W2luZGV4XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywganNTdHJpbmcpOworICAgICAgICBtX2ZpYmVy
c1tpbmRleF0uc2V0KHZtLCB0aGlzLCBqc1N0cmluZyk7CiAgICAgICAgIG1fbGVuZ3RoICs9IGpz
U3RyaW5nLT5tX2xlbmd0aDsKICAgICAgICAgc2V0SXM4Qml0KGlzOEJpdCgpICYmIGpzU3RyaW5n
LT5pczhCaXQoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTUm9wZVN0cmluZyogY3JlYXRlTnVs
bChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgc3RhdGljIEpTUm9wZVN0cmluZyogY3Jl
YXRlTnVsbChWTSYgdm0pCiAgICAgewotICAgICAgICBKU1JvcGVTdHJpbmcqIG5ld1N0cmluZyA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTUm9wZVN0cmluZz4oZ2xvYmFsRGF0YS5oZWFw
KSkgSlNSb3BlU3RyaW5nKGdsb2JhbERhdGEpOwotICAgICAgICBuZXdTdHJpbmctPmZpbmlzaENy
ZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBKU1JvcGVTdHJpbmcqIG5ld1N0cmluZyA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTUm9wZVN0cmluZz4odm0uaGVhcCkpIEpTUm9wZVN0
cmluZyh2bSk7CisgICAgICAgIG5ld1N0cmluZy0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAg
ICByZXR1cm4gbmV3U3RyaW5nOwogICAgIH0KIAogcHVibGljOgotICAgIHN0YXRpYyBKU1N0cmlu
ZyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNTdHJpbmcqIHMxLCBKU1N0cmlu
ZyogczIpCisgICAgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGUoVk0mIHZtLCBKU1N0cmluZyogczEs
IEpTU3RyaW5nKiBzMikKICAgICB7Ci0gICAgICAgIEpTUm9wZVN0cmluZyogbmV3U3RyaW5nID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNSb3BlU3RyaW5nPihnbG9iYWxEYXRhLmhlYXAp
KSBKU1JvcGVTdHJpbmcoZ2xvYmFsRGF0YSk7Ci0gICAgICAgIG5ld1N0cmluZy0+ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSwgczEsIHMyKTsKKyAgICAgICAgSlNSb3BlU3RyaW5nKiBuZXdTdHJp
bmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1JvcGVTdHJpbmc+KHZtLmhlYXApKSBK
U1JvcGVTdHJpbmcodm0pOworICAgICAgICBuZXdTdHJpbmctPmZpbmlzaENyZWF0aW9uKHZtLCBz
MSwgczIpOwogICAgICAgICByZXR1cm4gbmV3U3RyaW5nOwogICAgIH0KLSAgICBzdGF0aWMgSlNT
dHJpbmcqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTU3RyaW5nKiBzMSwgSlNT
dHJpbmcqIHMyLCBKU1N0cmluZyogczMpCisgICAgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGUoVk0m
IHZtLCBKU1N0cmluZyogczEsIEpTU3RyaW5nKiBzMiwgSlNTdHJpbmcqIHMzKQogICAgIHsKLSAg
ICAgICAgSlNSb3BlU3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxKU1JvcGVTdHJpbmc+KGdsb2JhbERhdGEuaGVhcCkpIEpTUm9wZVN0cmluZyhnbG9iYWxEYXRh
KTsKLSAgICAgICAgbmV3U3RyaW5nLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBzMSwgczIs
IHMzKTsKKyAgICAgICAgSlNSb3BlU3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU1JvcGVTdHJpbmc+KHZtLmhlYXApKSBKU1JvcGVTdHJpbmcodm0pOworICAg
ICAgICBuZXdTdHJpbmctPmZpbmlzaENyZWF0aW9uKHZtLCBzMSwgczIsIHMzKTsKICAgICAgICAg
cmV0dXJuIG5ld1N0cmluZzsKICAgICB9CiAKQEAgLTMzNiwzMiArMzM2LDMyIEBAIGlubGluZSBK
U1N0cmluZyogYXNTdHJpbmcoSlNWYWx1ZSB2YWx1ZSkKICAgICByZXR1cm4ganNDYXN0PEpTU3Ry
aW5nKj4odmFsdWUuYXNDZWxsKCkpOwogfQogCi1pbmxpbmUgSlNTdHJpbmcqIGpzRW1wdHlTdHJp
bmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQoraW5saW5lIEpTU3RyaW5nKiBqc0VtcHR5U3Ry
aW5nKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLmVtcHR5
U3RyaW5nKCk7CisgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3MuZW1wdHlTdHJpbmcoKTsKIH0K
IAotQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBVQ2hhciBjKQorQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNT
aW5nbGVDaGFyYWN0ZXJTdHJpbmcoVk0qIHZtLCBVQ2hhciBjKQogewogICAgIGlmIChjIDw9IG1h
eFNpbmdsZUNoYXJhY3RlclN0cmluZykKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPnNtYWxs
U3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZ2xvYmFsRGF0YSwgYyk7Ci0gICAgcmV0dXJu
IEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIFN0cmluZygmYywgMSkuaW1wbCgpKTsKKyAg
ICAgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHZtLCBj
KTsKKyAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqdm0sIFN0cmluZygmYywgMSkuaW1wbCgp
KTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTaW5nbGVDaGFyYWN0ZXJTdWJzdHJp
bmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIG9mZnNldCkKIHsK
LSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIEFTU0VSVChvZmZzZXQgPCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4ocy5sZW5ndGgoKSkpOwogICAgIFVDaGFyIGMgPSBzLmNoYXJhY3RlckF0KG9mZnNl
dCk7CiAgICAgaWYgKGMgPD0gbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKQotICAgICAgICByZXR1
cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhnbG9iYWxE
YXRhLCBjKTsKLSAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgU3RyaW5n
SW1wbDo6Y3JlYXRlKHMuaW1wbCgpLCBvZmZzZXQsIDEpKTsKKyAgICAgICAgcmV0dXJuIHZtLT5z
bWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHZtLCBjKTsKKyAgICByZXR1cm4gSlNT
dHJpbmc6OmNyZWF0ZSgqdm0sIFN0cmluZ0ltcGw6OmNyZWF0ZShzLmltcGwoKSwgb2Zmc2V0LCAx
KSk7CiB9CiAKLWlubGluZSBKU1N0cmluZyoganNOb250cml2aWFsU3RyaW5nKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgY29uc3QgU3RyaW5nJiBzKQoraW5saW5lIEpTU3RyaW5nKiBqc05vbnRy
aXZpYWxTdHJpbmcoVk0qIHZtLCBjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAgQVNTRVJUKHMubGVu
Z3RoKCkgPiAxKTsKLSAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgcy5p
bXBsKCkpOworICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKCp2bSwgcy5pbXBsKCkpOwogfQog
CiBpbmxpbmUgY29uc3QgU3RyaW5nJiBKU1N0cmluZzo6dmFsdWUoRXhlY1N0YXRlKiBleGVjKSBj
b25zdApAQCAtMzg3LDE3ICszODcsMTcgQEAgaW5saW5lIEpTU3RyaW5nKiBKU1N0cmluZzo6Z2V0
SW5kZXgoRXhlYwogICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyhleGVjLCBt
X3ZhbHVlLCBpKTsKIH0KIAotaW5saW5lIEpTU3RyaW5nKiBqc1N0cmluZyhKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIGNvbnN0IFN0cmluZyYgcykKK2lubGluZSBKU1N0cmluZyoganNTdHJpbmco
Vk0qIHZtLCBjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAgaW50IHNpemUgPSBzLmxlbmd0aCgpOwog
ICAgIGlmICghc2l6ZSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5l
bXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy5lbXB0eVN0cmlu
ZygpOwogICAgIGlmIChzaXplID09IDEpIHsKICAgICAgICAgVUNoYXIgYyA9IHMuY2hhcmFjdGVy
QXQoMCk7CiAgICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKLSAgICAg
ICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nKGdsb2JhbERhdGEsIGMpOworICAgICAgICAgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3Mu
c2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHZtLCBjKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTU3RyaW5n
OjpjcmVhdGUoKmdsb2JhbERhdGEsIHMuaW1wbCgpKTsKKyAgICByZXR1cm4gSlNTdHJpbmc6OmNy
ZWF0ZSgqdm0sIHMuaW1wbCgpKTsKIH0KIAogaW5saW5lIEpTU3RyaW5nKiBqc1N1YnN0cmluZyhF
eGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKQEAgLTQwNSw2NyArNDA1LDY3IEBAIGlubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmco
RXhlY1N0YXRlKiAKICAgICBBU1NFUlQob2Zmc2V0IDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihz
LT5sZW5ndGgoKSkpOwogICAgIEFTU0VSVChsZW5ndGggPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHMtPmxlbmd0aCgpKSk7CiAgICAgQVNTRVJUKG9mZnNldCArIGxlbmd0aCA8PSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4ocy0+bGVuZ3RoKCkpKTsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEg
PSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIGlm
ICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLmVtcHR5
U3RyaW5nKCk7Ci0gICAgcmV0dXJuIGpzU3Vic3RyaW5nKGdsb2JhbERhdGEsIHMtPnZhbHVlKGV4
ZWMpLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLmVt
cHR5U3RyaW5nKCk7CisgICAgcmV0dXJuIGpzU3Vic3RyaW5nKHZtLCBzLT52YWx1ZShleGVjKSwg
b2Zmc2V0LCBsZW5ndGgpOwogfQogCi1pbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5nOChKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFN0cmluZyYgcywgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCitpbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5nOChWTSogdm0sIGNv
bnN0IFN0cmluZyYgcywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAg
QVNTRVJUKG9mZnNldCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocy5sZW5ndGgoKSkpOwogICAg
IEFTU0VSVChsZW5ndGggPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHMubGVuZ3RoKCkpKTsKICAg
ICBBU1NFUlQob2Zmc2V0ICsgbGVuZ3RoIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzLmxlbmd0
aCgpKSk7CiAgICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFs
bFN0cmluZ3MuZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3Mu
ZW1wdHlTdHJpbmcoKTsKICAgICBpZiAobGVuZ3RoID09IDEpIHsKICAgICAgICAgVUNoYXIgYyA9
IHMuY2hhcmFjdGVyQXQob2Zmc2V0KTsKICAgICAgICAgaWYgKGMgPD0gbWF4U2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKQotICAgICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5z
aW5nbGVDaGFyYWN0ZXJTdHJpbmcoZ2xvYmFsRGF0YSwgYyk7CisgICAgICAgICAgICByZXR1cm4g
dm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcodm0sIGMpOwogICAgIH0KLSAg
ICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZUhhc090aGVyT3duZXIoKmdsb2JhbERhdGEsIFN0cmlu
Z0ltcGw6OmNyZWF0ZTgocy5pbXBsKCksIG9mZnNldCwgbGVuZ3RoKSk7CisgICAgcmV0dXJuIEpT
U3RyaW5nOjpjcmVhdGVIYXNPdGhlck93bmVyKCp2bSwgU3RyaW5nSW1wbDo6Y3JlYXRlOChzLmlt
cGwoKSwgb2Zmc2V0LCBsZW5ndGgpKTsKIH0KIAotaW5saW5lIEpTU3RyaW5nKiBqc1N1YnN0cmlu
ZyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFN0cmluZyYgcywgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCitpbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5nKFZNKiB2
bSwgY29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsK
ICAgICBBU1NFUlQob2Zmc2V0IDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzLmxlbmd0aCgpKSk7
CiAgICAgQVNTRVJUKGxlbmd0aCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocy5sZW5ndGgoKSkp
OwogICAgIEFTU0VSVChvZmZzZXQgKyBsZW5ndGggPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHMu
bGVuZ3RoKCkpKTsKICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEt
PnNtYWxsU3RyaW5ncy5lbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdm0tPnNtYWxsU3Ry
aW5ncy5lbXB0eVN0cmluZygpOwogICAgIGlmIChsZW5ndGggPT0gMSkgewogICAgICAgICBVQ2hh
ciBjID0gcy5jaGFyYWN0ZXJBdChvZmZzZXQpOwogICAgICAgICBpZiAoYyA8PSBtYXhTaW5nbGVD
aGFyYWN0ZXJTdHJpbmcpCi0gICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJp
bmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhnbG9iYWxEYXRhLCBjKTsKKyAgICAgICAgICAgIHJl
dHVybiB2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyh2bSwgYyk7CiAgICAg
fQotICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlSGFzT3RoZXJPd25lcigqZ2xvYmFsRGF0YSwg
U3RyaW5nSW1wbDo6Y3JlYXRlKHMuaW1wbCgpLCBvZmZzZXQsIGxlbmd0aCkpOworICAgIHJldHVy
biBKU1N0cmluZzo6Y3JlYXRlSGFzT3RoZXJPd25lcigqdm0sIFN0cmluZ0ltcGw6OmNyZWF0ZShz
LmltcGwoKSwgb2Zmc2V0LCBsZW5ndGgpKTsKIH0KIAotaW5saW5lIEpTU3RyaW5nKiBqc093bmVk
U3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgU3RyaW5nJiBzKQoraW5saW5l
IEpTU3RyaW5nKiBqc093bmVkU3RyaW5nKFZNKiB2bSwgY29uc3QgU3RyaW5nJiBzKQogewogICAg
IGludCBzaXplID0gcy5sZW5ndGgoKTsKICAgICBpZiAoIXNpemUpCi0gICAgICAgIHJldHVybiBn
bG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZt
LT5zbWFsbFN0cmluZ3MuZW1wdHlTdHJpbmcoKTsKICAgICBpZiAoc2l6ZSA9PSAxKSB7CiAgICAg
ICAgIFVDaGFyIGMgPSBzLmNoYXJhY3RlckF0KDApOwogICAgICAgICBpZiAoYyA8PSBtYXhTaW5n
bGVDaGFyYWN0ZXJTdHJpbmcpCi0gICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxT
dHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhnbG9iYWxEYXRhLCBjKTsKKyAgICAgICAgICAg
IHJldHVybiB2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyh2bSwgYyk7CiAg
ICAgfQotICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlSGFzT3RoZXJPd25lcigqZ2xvYmFsRGF0
YSwgcy5pbXBsKCkpOworICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlSGFzT3RoZXJPd25lcigq
dm0sIHMuaW1wbCgpKTsKIH0KIAotaW5saW5lIEpTUm9wZVN0cmluZyoganNTdHJpbmdCdWlsZGVy
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK2lubGluZSBKU1JvcGVTdHJpbmcqIGpzU3RyaW5n
QnVpbGRlcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlTnVsbCgq
Z2xvYmFsRGF0YSk7CisgICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlTnVsbCgqdm0pOwog
fQogCi1pbmxpbmUgSlNTdHJpbmcqIGpzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBleGVjKSB7IHJl
dHVybiBqc0VtcHR5U3RyaW5nKCZleGVjLT5nbG9iYWxEYXRhKCkpOyB9Ci1pbmxpbmUgSlNTdHJp
bmcqIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKSB7IHJldHVybiBq
c1N0cmluZygmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzKTsgfQotaW5saW5lIEpTU3RyaW5nKiBqc1Np
bmdsZUNoYXJhY3RlclN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIFVDaGFyIGMpIHsgcmV0dXJuIGpz
U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKCZleGVjLT5nbG9iYWxEYXRhKCksIGMpOyB9Ci1pbmxpbmUg
SlNTdHJpbmcqIGpzU3Vic3RyaW5nOChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcywg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpIHsgcmV0dXJuIGpzU3Vic3RyaW5nOCgm
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBzLCBvZmZzZXQsIGxlbmd0aCk7IH0KLWlubGluZSBKU1N0cmlu
ZyoganNTdWJzdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKSB7IHJldHVybiBqc1N1YnN0cmluZygmZXhlYy0+Z2xv
YmFsRGF0YSgpLCBzLCBvZmZzZXQsIGxlbmd0aCk7IH0KLWlubGluZSBKU1N0cmluZyoganNOb250
cml2aWFsU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKSB7IHJldHVybiBq
c05vbnRyaXZpYWxTdHJpbmcoJmV4ZWMtPmdsb2JhbERhdGEoKSwgcyk7IH0KLWlubGluZSBKU1N0
cmluZyoganNPd25lZFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykgeyBy
ZXR1cm4ganNPd25lZFN0cmluZygmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzKTsgfQoraW5saW5lIEpT
U3RyaW5nKiBqc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4ganNFbXB0eVN0
cmluZygmZXhlYy0+dm0oKSk7IH0KK2lubGluZSBKU1N0cmluZyoganNTdHJpbmcoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTdHJpbmcmIHMpIHsgcmV0dXJuIGpzU3RyaW5nKCZleGVjLT52bSgpLCBz
KTsgfQoraW5saW5lIEpTU3RyaW5nKiBqc1NpbmdsZUNoYXJhY3RlclN0cmluZyhFeGVjU3RhdGUq
IGV4ZWMsIFVDaGFyIGMpIHsgcmV0dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKCZleGVjLT52
bSgpLCBjKTsgfQoraW5saW5lIEpTU3RyaW5nKiBqc1N1YnN0cmluZzgoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKSB7IHJl
dHVybiBqc1N1YnN0cmluZzgoJmV4ZWMtPnZtKCksIHMsIG9mZnNldCwgbGVuZ3RoKTsgfQoraW5s
aW5lIEpTU3RyaW5nKiBqc1N1YnN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYg
cywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpIHsgcmV0dXJuIGpzU3Vic3RyaW5n
KCZleGVjLT52bSgpLCBzLCBvZmZzZXQsIGxlbmd0aCk7IH0KK2lubGluZSBKU1N0cmluZyoganNO
b250cml2aWFsU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKSB7IHJldHVy
biBqc05vbnRyaXZpYWxTdHJpbmcoJmV4ZWMtPnZtKCksIHMpOyB9CitpbmxpbmUgSlNTdHJpbmcq
IGpzT3duZWRTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpIHsgcmV0dXJu
IGpzT3duZWRTdHJpbmcoJmV4ZWMtPnZtKCksIHMpOyB9CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBK
U1N0cmluZzo6Z2V0U3RyaW5nUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewpAQCAtNTI1LDE5ICs1MjUs
MTkgQEAgaW5saW5lIFN0cmluZyBKU1ZhbHVlOjp0b1dURlN0cmluZyhFeGVjUwogCiBBTFdBWVNf
SU5MSU5FIFN0cmluZyBpbmxpbmVKU1ZhbHVlTm90U3RyaW5ndG9TdHJpbmcoY29uc3QgSlNWYWx1
ZSYgdmFsdWUsIEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBp
ZiAodmFsdWUuaXNJbnQzMigpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS5udW1lcmljU3Ry
aW5ncy5hZGQodmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHZtLm51bWVyaWNTdHJp
bmdzLmFkZCh2YWx1ZS5hc0ludDMyKCkpOwogICAgIGlmICh2YWx1ZS5pc0RvdWJsZSgpKQotICAg
ICAgICByZXR1cm4gZ2xvYmFsRGF0YS5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUuYXNEb3VibGUo
KSk7CisgICAgICAgIHJldHVybiB2bS5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUuYXNEb3VibGUo
KSk7CiAgICAgaWYgKHZhbHVlLmlzVHJ1ZSgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS5w
cm9wZXJ0eU5hbWVzLT50cnVlS2V5d29yZC5zdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZtLnBy
b3BlcnR5TmFtZXMtPnRydWVLZXl3b3JkLnN0cmluZygpOwogICAgIGlmICh2YWx1ZS5pc0ZhbHNl
KCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLnByb3BlcnR5TmFtZXMtPmZhbHNlS2V5d29y
ZC5zdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZtLnByb3BlcnR5TmFtZXMtPmZhbHNlS2V5d29y
ZC5zdHJpbmcoKTsKICAgICBpZiAodmFsdWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBnbG9i
YWxEYXRhLnByb3BlcnR5TmFtZXMtPm51bGxLZXl3b3JkLnN0cmluZygpOworICAgICAgICByZXR1
cm4gdm0ucHJvcGVydHlOYW1lcy0+bnVsbEtleXdvcmQuc3RyaW5nKCk7CiAgICAgaWYgKHZhbHVl
LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLnByb3BlcnR5TmFtZXMt
PnVuZGVmaW5lZEtleXdvcmQuc3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2bS5wcm9wZXJ0eU5h
bWVzLT51bmRlZmluZWRLZXl3b3JkLnN0cmluZygpOwogICAgIHJldHVybiB2YWx1ZS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI0LDcgKzEyNCw3IEBAIEpTVmFsdWUgSlNTdHJpbmdKb2luZXI6OmJ1aWxkKEV4
ZWNTdGF0ZSoKICAgICBpZiAoIW91dHB1dFN0cmluZ0ltcGwpCiAgICAgICAgIHJldHVybiB0aHJv
d091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAKLSAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZShl
eGVjLT5nbG9iYWxEYXRhKCksIG91dHB1dFN0cmluZ0ltcGwucmVsZWFzZSgpKTsKKyAgICByZXR1
cm4gSlNTdHJpbmc6OmNyZWF0ZShleGVjLT52bSgpLCBvdXRwdXRTdHJpbmdJbXBsLnJlbGVhc2Uo
KSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9s
VGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksMTggKzQ5LDE4IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBJc0Vudmlyb25tZW50UmVjb3JkIHwgT3ZlcnJpZGVz
VmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBCYXNlOjpTdHJ1Y3R1
cmVGbGFnczsKICAgICAKLSAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU2NvcGUqIHNjb3BlLCBTaGFyZWRTeW1i
b2xUYWJsZSogc3ltYm9sVGFibGUgPSAwKQotICAgICAgICA6IEJhc2UoZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlLCBzY29wZSkKKyAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTU2NvcGUqIHNjb3BlLCBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFi
bGUgPSAwKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgc2NvcGUpCiAgICAgewogICAg
ICAgICBpZiAoc3ltYm9sVGFibGUpCi0gICAgICAgICAgICBtX3N5bWJvbFRhYmxlLnNldChnbG9i
YWxEYXRhLCB0aGlzLCBzeW1ib2xUYWJsZSk7CisgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLnNl
dCh2bSwgdGhpcywgc3ltYm9sVGFibGUpOwogICAgIH0KIAotICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
IHZtKQogICAgIHsKLSAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Cisg
ICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgaWYgKCFtX3N5bWJvbFRh
YmxlKQotICAgICAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgU2hh
cmVkU3ltYm9sVGFibGU6OmNyZWF0ZShnbG9iYWxEYXRhKSk7CisgICAgICAgICAgICBtX3N5bWJv
bFRhYmxlLnNldCh2bSwgdGhpcywgU2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZSh2bSkpOwogICAg
IH0KIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKQEAgLTExOCw3ICsxMTgsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dCgKICAgICBT
eW1ib2xUYWJsZU9iamVjdFR5cGUqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAogICAgIGJvb2wgc2hvdWxkVGhyb3cpCiB7
Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBI
ZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKG9iamVjdCkpOwogICAgIAogICAgIFN5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSA9ICpvYmplY3QtPnN5bWJvbFRhYmxlKCk7CkBAIC0xMzUsMTMg
KzEzNSwxMyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dCgKICAgICB9CiAgICAgaWYgKFVO
TElLRUxZKHdhc0ZhdCkpCiAgICAgICAgIGl0ZXItPnZhbHVlLm5vdGlmeVdyaXRlKCk7Ci0gICAg
b2JqZWN0LT5yZWdpc3RlckF0KGZhc3RFbnRyeS5nZXRJbmRleCgpKS5zZXQoZ2xvYmFsRGF0YSwg
b2JqZWN0LCB2YWx1ZSk7CisgICAgb2JqZWN0LT5yZWdpc3RlckF0KGZhc3RFbnRyeS5nZXRJbmRl
eCgpKS5zZXQodm0sIG9iamVjdCwgdmFsdWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBTeW1ib2xUYWJsZU9iamVjdFR5cGU+CiBpbmxpbmUgYm9vbCBzeW1ib2xU
YWJsZVB1dFdpdGhBdHRyaWJ1dGVzKAotICAgIFN5bWJvbFRhYmxlT2JqZWN0VHlwZSogb2JqZWN0
LCBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisg
ICAgU3ltYm9sVGFibGVPYmplY3RUeXBlKiBvYmplY3QsIFZNJiB2bSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwKICAgICBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewog
ICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVh
cDo6aGVhcChvYmplY3QpKTsKQEAgLTE1Myw3ICsxNTMsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xU
YWJsZVB1dFdpdGhBdHRyaWJ1dGVzCiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CiAgICAg
ZW50cnkubm90aWZ5V3JpdGUoKTsKICAgICBlbnRyeS5zZXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMp
OwotICAgIG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5zZXQoZ2xvYmFsRGF0
YSwgb2JqZWN0LCB2YWx1ZSk7CisgICAgb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4
KCkpLnNldCh2bSwgb2JqZWN0LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgJ
KHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFy
aWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTksMTMgKzU5LDEzIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KAotICAgICAg
ICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLAorICAgICAgICAgICAgVk0mIHZtLAogICAg
ICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCiAgICAgICAgICAgICBSZWdpc3RlciogcmVn
aXN0ZXJzLAogICAgICAgICAgICAgSlNTY29wZSogc2NvcGUsCiAgICAgICAgICAgICBTaGFyZWRT
eW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSAwCiAgICAgICAgICkKLSAgICAgICAgICAgIDogQmFz
ZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIHNjb3BlLCBzeW1ib2xUYWJsZSkKKyAgICAgICAgICAg
IDogQmFzZSh2bSwgc3RydWN0dXJlLCBzY29wZSwgc3ltYm9sVGFibGUpCiAgICAgICAgICAgICAs
IG1fcmVnaXN0ZXJzKHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPio+
KHJlZ2lzdGVycykpCiAgICAgICAgIHsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNywxNCArMzcsMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU1dpdGhTY29wZSogY3JlYXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKICAgICB7CiAgICAgICAgIEpTV2l0
aFNjb3BlKiB3aXRoU2NvcGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dpdGhTY29w
ZT4oKmV4ZWMtPmhlYXAoKSkpIEpTV2l0aFNjb3BlKGV4ZWMsIG9iamVjdCk7Ci0gICAgICAgIHdp
dGhTY29wZS0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgd2l0
aFNjb3BlLT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKICAgICAgICAgcmV0dXJuIHdpdGhT
Y29wZTsKICAgICB9CiAKICAgICBzdGF0aWMgSlNXaXRoU2NvcGUqIGNyZWF0ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIEpTU2NvcGUqIG5leHQpCiAgICAgewogICAgICAgICBK
U1dpdGhTY29wZSogd2l0aFNjb3BlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXaXRo
U2NvcGU+KCpleGVjLT5oZWFwKCkpKSBKU1dpdGhTY29wZShleGVjLCBvYmplY3QsIG5leHQpOwot
ICAgICAgICB3aXRoU2NvcGUtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7Cisg
ICAgICAgIHdpdGhTY29wZS0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAgICAgICAgIHJl
dHVybiB3aXRoU2NvcGU7CiAgICAgfQogCkBAIC01Miw5ICs1Miw5IEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCisgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhXaXRo
U2NvcGVUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFdpdGhTY29w
ZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGljIEpT
X0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKQEAgLTY1LDIxICs2NSwyMSBAQCBw
cm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIEpTV2l0aFNjb3BlKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIG9iamVjdCkKICAgICAgICAgOiBCYXNlKAotICAgICAgICAgICAgZXhlYy0+Z2xvYmFs
RGF0YSgpLAorICAgICAgICAgICAgZXhlYy0+dm0oKSwKICAgICAgICAgICAgIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+d2l0aFNjb3BlU3RydWN0dXJlKCksCiAgICAgICAgICAgICBleGVj
LT5zY29wZSgpCiAgICAgICAgICkKLSAgICAgICAgLCBtX29iamVjdChleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIG9iamVjdCkKKyAgICAgICAgLCBtX29iamVjdChleGVjLT52bSgpLCB0aGlzLCBv
YmplY3QpCiAgICAgewogICAgIH0KIAogICAgIEpTV2l0aFNjb3BlKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIG9iamVjdCwgSlNTY29wZSogbmV4dCkKICAgICAgICAgOiBCYXNlKAotICAgICAg
ICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLAorICAgICAgICAgICAgZXhlYy0+dm0oKSwKICAgICAg
ICAgICAgIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+d2l0aFNjb3BlU3RydWN0dXJlKCks
CiAgICAgICAgICAgICBuZXh0CiAgICAgICAgICkKLSAgICAgICAgLCBtX29iamVjdChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIG9iamVjdCkKKyAgICAgICAgLCBtX29iamVjdChleGVjLT52bSgp
LCB0aGlzLCBvYmplY3QpCiAgICAgewogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDE0ODY1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSwxMSArMzksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAog
ICAgICAgICBKU1ZhbHVlIGludGVybmFsVmFsdWUoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRJ
bnRlcm5hbFZhbHVlKEpTR2xvYmFsRGF0YSYsIEpTVmFsdWUpOworICAgICAgICB2b2lkIHNldElu
dGVybmFsVmFsdWUoVk0mLCBKU1ZhbHVlKTsKIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKSAKICAgICAgICAgeyAKLSAgICAgICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgaW50ZXJuYWxWYWx1ZU9mZnNldCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dyYXBwZXJPYmplY3QsIG1faW50ZXJuYWxWYWx1ZSk7
IH0KQEAgLTU3LDcgKzU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHBy
b3RlY3RlZDoKLSAgICAgICAgZXhwbGljaXQgSlNXcmFwcGVyT2JqZWN0KEpTR2xvYmFsRGF0YSYs
IFN0cnVjdHVyZSopOworICAgICAgICBleHBsaWNpdCBKU1dyYXBwZXJPYmplY3QoVk0mLCBTdHJ1
Y3R1cmUqKTsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKQEAgLTY2
LDggKzY2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiBtX2ludGVybmFsVmFsdWU7CiAgICAgfTsKIAotICAgIGlubGluZSBKU1dyYXBwZXJPYmplY3Q6
OkpTV3JhcHBlck9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQotICAgICAgICA6IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVj
dHVyZSkKKyAgICBpbmxpbmUgSlNXcmFwcGVyT2JqZWN0OjpKU1dyYXBwZXJPYmplY3QoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0Rlc3RydWN0aWJsZU9iamVjdCh2
bSwgc3RydWN0dXJlKQogICAgIHsKICAgICB9CiAKQEAgLTc2LDExICs3NiwxMSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgcmV0dXJuIG1faW50ZXJuYWxWYWx1ZS5nZXQoKTsKICAgICB9CiAK
LSAgICBpbmxpbmUgdm9pZCBKU1dyYXBwZXJPYmplY3Q6OnNldEludGVybmFsVmFsdWUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHZhbHVlKQorICAgIGlubGluZSB2b2lkIEpTV3Jh
cHBlck9iamVjdDo6c2V0SW50ZXJuYWxWYWx1ZShWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCiAgICAg
ewogICAgICAgICBBU1NFUlQodmFsdWUpOwogICAgICAgICBBU1NFUlQoIXZhbHVlLmlzT2JqZWN0
KCkpOwotICAgICAgICBtX2ludGVybmFsVmFsdWUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVl
KTsKKyAgICAgICAgbV9pbnRlcm5hbFZhbHVlLnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9MaXRlcmFsUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU3LDIwICs1NywyMCBAQCBib29sIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+Ojp0cnlKU09OUFBh
CiAgICAgZG8gewogICAgICAgICBWZWN0b3I8SlNPTlBQYXRoRW50cnk+IHBhdGg7CiAgICAgICAg
IC8vIFVuZ3VhcmRlZCBuZXh0IHRvIHN0YXJ0IG9mZiB0aGUgbGV4ZXIKLSAgICAgICAgSWRlbnRp
ZmllciBuYW1lID0gSWRlbnRpZmllcigmbV9leGVjLT5nbG9iYWxEYXRhKCksIG1fbGV4ZXIuY3Vy
cmVudFRva2VuKCkuc3RhcnQsIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuZW5kIC0gbV9sZXhlci5j
dXJyZW50VG9rZW4oKS5zdGFydCk7CisgICAgICAgIElkZW50aWZpZXIgbmFtZSA9IElkZW50aWZp
ZXIoJm1fZXhlYy0+dm0oKSwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5zdGFydCwgbV9sZXhlci5j
dXJyZW50VG9rZW4oKS5lbmQgLSBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0KTsKICAgICAg
ICAgSlNPTlBQYXRoRW50cnkgZW50cnk7Ci0gICAgICAgIGlmIChuYW1lID09IG1fZXhlYy0+Z2xv
YmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPnZhcktleXdvcmQpIHsKKyAgICAgICAgaWYgKG5hbWUg
PT0gbV9leGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPnZhcktleXdvcmQpIHsKICAgICAgICAgICAg
IGlmIChtX2xleGVyLm5leHQoKSAhPSBUb2tJZGVudGlmaWVyKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgIGVudHJ5Lm1fdHlwZSA9IEpTT05QUGF0aEVudHJ5VHlw
ZURlY2xhcmU7Ci0gICAgICAgICAgICBlbnRyeS5tX3BhdGhFbnRyeU5hbWUgPSBJZGVudGlmaWVy
KCZtX2V4ZWMtPmdsb2JhbERhdGEoKSwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5zdGFydCwgbV9s
ZXhlci5jdXJyZW50VG9rZW4oKS5lbmQgLSBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0KTsK
KyAgICAgICAgICAgIGVudHJ5Lm1fcGF0aEVudHJ5TmFtZSA9IElkZW50aWZpZXIoJm1fZXhlYy0+
dm0oKSwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5zdGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4o
KS5lbmQgLSBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0KTsKICAgICAgICAgICAgIHBhdGgu
YXBwZW5kKGVudHJ5KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGVudHJ5Lm1fdHlw
ZSA9IEpTT05QUGF0aEVudHJ5VHlwZURvdDsKLSAgICAgICAgICAgIGVudHJ5Lm1fcGF0aEVudHJ5
TmFtZSA9IElkZW50aWZpZXIoJm1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2xleGVyLmN1cnJlbnRU
b2tlbigpLnN0YXJ0LCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLmVuZCAtIG1fbGV4ZXIuY3VycmVu
dFRva2VuKCkuc3RhcnQpOworICAgICAgICAgICAgZW50cnkubV9wYXRoRW50cnlOYW1lID0gSWRl
bnRpZmllcigmbV9leGVjLT52bSgpLCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0LCBtX2xl
eGVyLmN1cnJlbnRUb2tlbigpLmVuZCAtIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3RhcnQpOwog
ICAgICAgICAgICAgcGF0aC5hcHBlbmQoZW50cnkpOwogICAgICAgICB9Ci0gICAgICAgIGlmICht
X2V4ZWMtPmdsb2JhbERhdGEoKS5rZXl3b3Jkcy0+aXNLZXl3b3JkKGVudHJ5Lm1fcGF0aEVudHJ5
TmFtZSkpCisgICAgICAgIGlmIChtX2V4ZWMtPnZtKCkua2V5d29yZHMtPmlzS2V5d29yZChlbnRy
eS5tX3BhdGhFbnRyeU5hbWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBU
b2tlblR5cGUgdG9rZW5UeXBlID0gbV9sZXhlci5uZXh0KCk7CiAgICAgICAgIGlmIChlbnRyeS5t
X3R5cGUgPT0gSlNPTlBQYXRoRW50cnlUeXBlRGVjbGFyZSAmJiB0b2tlblR5cGUgIT0gVG9rQXNz
aWduKQpAQCAtOTQsNyArOTQsNyBAQCBib29sIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+Ojp0cnlK
U09OUFBhCiAgICAgICAgICAgICAgICAgZW50cnkubV90eXBlID0gSlNPTlBQYXRoRW50cnlUeXBl
RG90OwogICAgICAgICAgICAgICAgIGlmIChtX2xleGVyLm5leHQoKSAhPSBUb2tJZGVudGlmaWVy
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZW50
cnkubV9wYXRoRW50cnlOYW1lID0gSWRlbnRpZmllcigmbV9leGVjLT5nbG9iYWxEYXRhKCksIG1f
bGV4ZXIuY3VycmVudFRva2VuKCkuc3RhcnQsIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuZW5kIC0g
bV9sZXhlci5jdXJyZW50VG9rZW4oKS5zdGFydCk7CisgICAgICAgICAgICAgICAgZW50cnkubV9w
YXRoRW50cnlOYW1lID0gSWRlbnRpZmllcigmbV9leGVjLT52bSgpLCBtX2xleGVyLmN1cnJlbnRU
b2tlbigpLnN0YXJ0LCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLmVuZCAtIG1fbGV4ZXIuY3VycmVu
dFRva2VuKCkuc3RhcnQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgY2FzZSBUb2tMUGFyZW46IHsKQEAgLTExMyw3ICsxMTMsNyBAQCBib29sIExp
dGVyYWxQYXJzZXI8Q2hhclR5cGU+Ojp0cnlKU09OUFBhCiAgICAgc3RhcnRKU09OOgogICAgICAg
ICBtX2xleGVyLm5leHQoKTsKICAgICAgICAgcmVzdWx0cy5hcHBlbmQoSlNPTlBEYXRhKCkpOwot
ICAgICAgICByZXN1bHRzLmxhc3QoKS5tX3ZhbHVlLnNldChtX2V4ZWMtPmdsb2JhbERhdGEoKSwg
cGFyc2UoU3RhcnRQYXJzZUV4cHJlc3Npb24pKTsKKyAgICAgICAgcmVzdWx0cy5sYXN0KCkubV92
YWx1ZS5zZXQobV9leGVjLT52bSgpLCBwYXJzZShTdGFydFBhcnNlRXhwcmVzc2lvbikpOwogICAg
ICAgICBpZiAoIXJlc3VsdHMubGFzdCgpLm1fdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIHJlc3VsdHMubGFzdCgpLm1fcGF0aC5zd2FwKHBhdGgpOwpAQCAtMTMzLDE5
ICsxMzMsMTkgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgogQUxXQVlTX0lOTElORSBj
b25zdCBJZGVudGlmaWVyIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjptYWtlSWRlbnRpZmllcihj
b25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBpZiAoIWxlbmd0
aCkKLSAgICAgICAgcmV0dXJuIG1fZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPmVt
cHR5SWRlbnRpZmllcjsKKyAgICAgICAgcmV0dXJuIG1fZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVz
LT5lbXB0eUlkZW50aWZpZXI7CiAgICAgaWYgKGNoYXJhY3RlcnNbMF0gPj0gTWF4aW11bUNhY2hh
YmxlQ2hhcmFjdGVyKQotICAgICAgICByZXR1cm4gSWRlbnRpZmllcigmbV9leGVjLT5nbG9iYWxE
YXRhKCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgICAgIHJldHVybiBJZGVudGlmaWVyKCZt
X2V4ZWMtPnZtKCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAKICAgICBpZiAobGVuZ3RoID09IDEp
IHsKICAgICAgICAgaWYgKCFtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0uaXNOdWxs
KCkpCiAgICAgICAgICAgICByZXR1cm4gbV9zaG9ydElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1d
OwotICAgICAgICBtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0gPSBJZGVudGlmaWVy
KCZtX2V4ZWMtPmdsb2JhbERhdGEoKSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICAgICAgbV9z
aG9ydElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dID0gSWRlbnRpZmllcigmbV9leGVjLT52bSgp
LCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwogICAgICAgICByZXR1cm4gbV9zaG9ydElkZW50aWZpZXJz
W2NoYXJhY3RlcnNbMF1dOwogICAgIH0KICAgICBpZiAoIW1fcmVjZW50SWRlbnRpZmllcnNbY2hh
cmFjdGVyc1swXV0uaXNOdWxsKCkgJiYgSWRlbnRpZmllcjo6ZXF1YWwobV9yZWNlbnRJZGVudGlm
aWVyc1tjaGFyYWN0ZXJzWzBdXS5pbXBsKCksIGNoYXJhY3RlcnMsIGxlbmd0aCkpCiAgICAgICAg
IHJldHVybiBtX3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dOwotICAgIG1fcmVjZW50
SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0gPSBJZGVudGlmaWVyKCZtX2V4ZWMtPmdsb2JhbERh
dGEoKSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICBtX3JlY2VudElkZW50aWZpZXJzW2NoYXJh
Y3RlcnNbMF1dID0gSWRlbnRpZmllcigmbV9leGVjLT52bSgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgp
OwogICAgIHJldHVybiBtX3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dOwogfQogCkBA
IC0xNTMsMTkgKzE1MywxOSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+CiBBTFdBWVNf
SU5MSU5FIGNvbnN0IElkZW50aWZpZXIgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46Om1ha2VJZGVu
dGlmaWVyKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogewogICAgIGlm
ICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gbV9leGVjLT5nbG9iYWxEYXRhKCkucHJvcGVydHlO
YW1lcy0+ZW1wdHlJZGVudGlmaWVyOworICAgICAgICByZXR1cm4gbV9leGVjLT52bSgpLnByb3Bl
cnR5TmFtZXMtPmVtcHR5SWRlbnRpZmllcjsKICAgICBpZiAoY2hhcmFjdGVyc1swXSA+PSBNYXhp
bXVtQ2FjaGFibGVDaGFyYWN0ZXIpCi0gICAgICAgIHJldHVybiBJZGVudGlmaWVyKCZtX2V4ZWMt
Pmdsb2JhbERhdGEoKSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIElkZW50
aWZpZXIoJm1fZXhlYy0+dm0oKSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKIAogICAgIGlmIChsZW5n
dGggPT0gMSkgewogICAgICAgICBpZiAoIW1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBd
XS5pc051bGwoKSkKICAgICAgICAgICAgIHJldHVybiBtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFj
dGVyc1swXV07Ci0gICAgICAgIG1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXSA9IElk
ZW50aWZpZXIoJm1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAg
ICAgICBtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0gPSBJZGVudGlmaWVyKCZtX2V4
ZWMtPnZtKCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybiBtX3Nob3J0SWRl
bnRpZmllcnNbY2hhcmFjdGVyc1swXV07CiAgICAgfQogICAgIGlmICghbV9yZWNlbnRJZGVudGlm
aWVyc1tjaGFyYWN0ZXJzWzBdXS5pc051bGwoKSAmJiBJZGVudGlmaWVyOjplcXVhbChtX3JlY2Vu
dElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dLmltcGwoKSwgY2hhcmFjdGVycywgbGVuZ3RoKSkK
ICAgICAgICAgcmV0dXJuIG1fcmVjZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV07Ci0gICAg
bV9yZWNlbnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXSA9IElkZW50aWZpZXIoJm1fZXhlYy0+
Z2xvYmFsRGF0YSgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIG1fcmVjZW50SWRlbnRpZmll
cnNbY2hhcmFjdGVyc1swXV0gPSBJZGVudGlmaWVyKCZtX2V4ZWMtPnZtKCksIGNoYXJhY3RlcnMs
IGxlbmd0aCk7CiAgICAgcmV0dXJuIG1fcmVjZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV07
CiB9CiAKQEAgLTY1Myw3ICs2NTMsNyBAQCBKU1ZhbHVlIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+
OjpwYXJzZShQCiAgICAgICAgICAgICAgICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbklu
ZGV4KQogICAgICAgICAgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdEluZGV4KG1fZXhlYywg
aSwgbGFzdFZhbHVlKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IG9iamVjdC0+cHV0RGlyZWN0KG1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBpZGVudCwgbGFzdFZhbHVl
KTsKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3QobV9leGVjLT52bSgpLCBp
ZGVudCwgbGFzdFZhbHVlKTsKICAgICAgICAgICAgICAgICBpZGVudGlmaWVyU3RhY2sucmVtb3Zl
TGFzdCgpOwogICAgICAgICAgICAgICAgIGlmIChtX2xleGVyLmN1cnJlbnRUb2tlbigpLnR5cGUg
PT0gVG9rQ29tbWEpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9QYXJzZU9iamVjdFN0YXJ0
RXhwcmVzc2lvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmNw
cAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9v
a3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotdm9pZCBIYXNoVGFibGU6OmNyZWF0ZVRhYmxlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSkgY29uc3QKK3ZvaWQgSGFzaFRhYmxlOjpjcmVhdGVUYWJsZShWTSogdm0pIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKCF0YWJsZSk7CiAgICAgaW50IGxpbmtJbmRleCA9IGNvbXBhY3RIYXNoU2l6ZU1h
c2sgKyAxOwpAQCAtMzQsNyArMzQsNyBAQCB2b2lkIEhhc2hUYWJsZTo6Y3JlYXRlVGFibGUoSlNH
bG9iYWxEYXRhCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb21wYWN0U2l6ZTsgKytpKQogICAg
ICAgICBlbnRyaWVzW2ldLnNldEtleSgwKTsKICAgICBmb3IgKGludCBpID0gMDsgdmFsdWVzW2ld
LmtleTsgKytpKSB7Ci0gICAgICAgIFN0cmluZ0ltcGwqIGlkZW50aWZpZXIgPSBJZGVudGlmaWVy
OjphZGQoZ2xvYmFsRGF0YSwgdmFsdWVzW2ldLmtleSkubGVha1JlZigpOworICAgICAgICBTdHJp
bmdJbXBsKiBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6YWRkKHZtLCB2YWx1ZXNbaV0ua2V5KS5s
ZWFrUmVmKCk7CiAgICAgICAgIGludCBoYXNoSW5kZXggPSBpZGVudGlmaWVyLT5leGlzdGluZ0hh
c2goKSAmIGNvbXBhY3RIYXNoU2l6ZU1hc2s7CiAgICAgICAgIEhhc2hFbnRyeSogZW50cnkgPSAm
ZW50cmllc1toYXNoSW5kZXhdOwogCkBAIC02OSw3ICs2OSw3IEBAIGJvb2wgc2V0VXBTdGF0aWNG
dW5jdGlvblNsb3QoRXhlY1N0YXRlKiAKIHsKICAgICBBU1NFUlQodGhpc09iai0+Z2xvYmFsT2Jq
ZWN0KCkpOwogICAgIEFTU0VSVChlbnRyeS0+YXR0cmlidXRlcygpICYgRnVuY3Rpb24pOwotICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHRoaXNPYmotPmdldERpcmVjdE9mZnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0g
dGhpc09iai0+Z2V0RGlyZWN0T2Zmc2V0KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSk7CiAKICAg
ICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewogICAgICAgICAvLyBJZiBhIHByb3BlcnR5
IGlzIGV2ZXIgZGVsZXRlZCBmcm9tIGFuIG9iamVjdCB3aXRoIGEgc3RhdGljIHRhYmxlLCB0aGVu
IHdlIHJlaWZ5CkBAIC04MCw3ICs4MCw3IEBAIGJvb2wgc2V0VXBTdGF0aWNGdW5jdGlvblNsb3Qo
RXhlY1N0YXRlKiAKICAgICAgICAgdGhpc09iai0+cHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24oCiAg
ICAgICAgICAgICBleGVjLCB0aGlzT2JqLT5nbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lLCBl
bnRyeS0+ZnVuY3Rpb25MZW5ndGgoKSwKICAgICAgICAgICAgIGVudHJ5LT5mdW5jdGlvbigpLCBl
bnRyeS0+aW50cmluc2ljKCksIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwotICAgICAgICBvZmZzZXQg
PSB0aGlzT2JqLT5nZXREaXJlY3RPZmZzZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5h
bWUpOworICAgICAgICBvZmZzZXQgPSB0aGlzT2JqLT5nZXREaXJlY3RPZmZzZXQoZXhlYy0+dm0o
KSwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAkocmV2
aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMSwyNCArMTIxLDI0IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogCi0gICAgICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBpbml0aWFsaXplSWZOZWVkZWQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKSBjb25z
dAorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgaW5pdGlhbGl6ZUlmTmVlZGVkKFZNKiB2bSkg
Y29uc3QKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCF0YWJsZSkKLSAgICAgICAgICAgICAg
ICBjcmVhdGVUYWJsZShnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgICAgICBjcmVhdGVUYWJsZSh2
bSk7CiAgICAgICAgIH0KIAogICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgaW5pdGlhbGl6ZUlm
TmVlZGVkKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgaWYg
KCF0YWJsZSkKLSAgICAgICAgICAgICAgICBjcmVhdGVUYWJsZSgmZXhlYy0+Z2xvYmFsRGF0YSgp
KTsKKyAgICAgICAgICAgICAgICBjcmVhdGVUYWJsZSgmZXhlYy0+dm0oKSk7CiAgICAgICAgIH0K
IAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGRlbGV0ZVRhYmxlKCkgY29uc3Q7CiAK
ICAgICAgICAgLy8gRmluZCBhbiBlbnRyeSBpbiB0aGUgdGFibGUsIGFuZCByZXR1cm4gdGhlIGVu
dHJ5LgotICAgICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IEhhc2hFbnRyeSogZW50cnkoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgaWRlbnRpZmllcikgY29uc3QKKyAgICAg
ICAgQUxXQVlTX0lOTElORSBjb25zdCBIYXNoRW50cnkqIGVudHJ5KFZNKiB2bSwgUHJvcGVydHlO
YW1lIGlkZW50aWZpZXIpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIGluaXRpYWxpemVJ
Zk5lZWRlZChnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIGluaXRpYWxpemVJZk5lZWRlZCh2bSk7
CiAgICAgICAgICAgICByZXR1cm4gZW50cnkoaWRlbnRpZmllcik7CiAgICAgICAgIH0KIApAQCAt
MTk0LDE0ICsxOTQsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpbnQgbV9wb3Np
dGlvbjsKICAgICAgICAgfTsKIAotICAgICAgICBDb25zdEl0ZXJhdG9yIGJlZ2luKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkgY29uc3QKKyAgICAgICAgQ29uc3RJdGVyYXRvciBiZWdpbihWTSYg
dm0pIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIGluaXRpYWxpemVJZk5lZWRlZCgmZ2xv
YmFsRGF0YSk7CisgICAgICAgICAgICBpbml0aWFsaXplSWZOZWVkZWQoJnZtKTsKICAgICAgICAg
ICAgIHJldHVybiBDb25zdEl0ZXJhdG9yKHRoaXMsIDApOwogICAgICAgICB9Ci0gICAgICAgIENv
bnN0SXRlcmF0b3IgZW5kKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkgY29uc3QKKyAgICAgICAg
Q29uc3RJdGVyYXRvciBlbmQoVk0mIHZtKSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICBp
bml0aWFsaXplSWZOZWVkZWQoJmdsb2JhbERhdGEpOworICAgICAgICAgICAgaW5pdGlhbGl6ZUlm
TmVlZGVkKCZ2bSk7CiAgICAgICAgICAgICByZXR1cm4gQ29uc3RJdGVyYXRvcih0aGlzLCBjb21w
YWN0U2l6ZSk7CiAgICAgICAgIH0KIApAQCAtMjI5LDcgKzIyOSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB9CiAKICAgICAgICAgLy8gQ29udmVydCB0aGUgaGFzaCB0YWJsZSBrZXlzIHRv
IGlkZW50aWZpZXJzLgotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNyZWF0ZVRhYmxl
KEpTR2xvYmFsRGF0YSopIGNvbnN0OworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNy
ZWF0ZVRhYmxlKFZNKikgY29uc3Q7CiAgICAgfTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJv
b2wgc2V0VXBTdGF0aWNGdW5jdGlvblNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSGFzaEVudHJ5Kiwg
SlNPYmplY3QqIHRoaXNPYmplY3QsIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkBAIC0z
NjgsNyArMzY4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gSWYgdGhpcyBpcyBh
IGZ1bmN0aW9uIHB1dCBpdCBhcyBhbiBvdmVycmlkZSBwcm9wZXJ0eS4KICAgICAgICAgaWYgKGVu
dHJ5LT5hdHRyaWJ1dGVzKCkgJiBGdW5jdGlvbikKLSAgICAgICAgICAgIHRoaXNPYmotPnB1dERp
cmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgICAgICAg
ICAgdGhpc09iai0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOwog
ICAgICAgICBlbHNlIGlmICghKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBSZWFkT25seSkpCiAgICAg
ICAgICAgICBlbnRyeS0+cHJvcGVydHlQdXR0ZXIoKShleGVjLCB0aGlzT2JqLCB2YWx1ZSk7CiAg
ICAgICAgIGVsc2UgaWYgKHNob3VsZFRocm93KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWF0aE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NSwyMyArODUsMjMgQEAgY29uc3QgQ2xhc3NJbmZvIE1hdGhPYmplY3Q6OnNfaW5mbyA9IHsgIgog
Ki8KIAogTWF0aE9iamVjdDo6TWF0aE9iamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSkKKyAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xv
YmFsT2JqZWN0LT52bSgpLCBzdHJ1Y3R1cmUpCiB7CiB9CiAKIHZvaWQgTWF0aE9iamVjdDo6Zmlu
aXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgp
KTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwogICAgIEFT
U0VSVChpbmhlcml0cygmc19pbmZvKSk7CiAKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgIkUiKSwganNOdW1iZXIoZXhw
KDEuMCkpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJM
TjIiKSwganNOdW1iZXIobG9nKDIuMCkpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25s
eSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJ
ZGVudGlmaWVyKGV4ZWMsICJMTjEwIiksIGpzTnVtYmVyKGxvZygxMC4wKSksIERvbnREZWxldGUg
fCBEb250RW51bSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihl
eGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgIkxPRzJFIiksIGpzTnVtYmVyKDEu
MCAvIGxvZygyLjApKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkpOwotICAgIHB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihl
eGVjLCAiTE9HMTBFIiksIGpzTnVtYmVyKDAuNDM0Mjk0NDgxOTAzMjUxOCksIERvbnREZWxldGUg
fCBEb250RW51bSB8IFJlYWRPbmx5KTsgLy8gU2VlIEVDTUEtMjYyIDE1LjguMS41Ci0gICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4
ZWMsICJQSSIpLCBqc051bWJlcihwaURvdWJsZSksIERvbnREZWxldGUgfCBEb250RW51bSB8IFJl
YWRPbmx5KTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRh
KCksIElkZW50aWZpZXIoZXhlYywgIlNRUlQxXzIiKSwganNOdW1iZXIoc3FydCgwLjUpKSwgRG9u
dERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiU1FSVDIiKSwganNO
dW1iZXIoc3FydCgyLjApKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkpOworICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywg
IkUiKSwganNOdW1iZXIoZXhwKDEuMCkpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25s
eSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmll
cihleGVjLCAiTE4yIiksIGpzTnVtYmVyKGxvZygyLjApKSwgRG9udERlbGV0ZSB8IERvbnRFbnVt
IHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCks
IElkZW50aWZpZXIoZXhlYywgIkxOMTAiKSwganNOdW1iZXIobG9nKDEwLjApKSwgRG9udERlbGV0
ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgIkxPRzJFIiksIGpzTnVtYmVyKDEuMCAvIGxv
ZygyLjApKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgIkxPRzEwRSIp
LCBqc051bWJlcigwLjQzNDI5NDQ4MTkwMzI1MTgpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBS
ZWFkT25seSk7IC8vIFNlZSBFQ01BLTI2MiAxNS44LjEuNQorICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgIlBJIiksIGpzTnVtYmVyKHBp
RG91YmxlKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgIlNRUlQxXzIi
KSwganNOdW1iZXIoc3FydCgwLjUpKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkp
OworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZpZXIo
ZXhlYywgIlNRUlQyIiksIGpzTnVtYmVyKHNxcnQoMi4wKSksIERvbnREZWxldGUgfCBEb250RW51
bSB8IFJlYWRPbmx5KTsKIH0KIAogYm9vbCBNYXRoT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCAmc2xvdCkKQEAgLTI2NSw3ICsyNjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bWF0aFByb3RvRnVuY1NpbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShleGVjLT5nbG9iYWxEYXRhKCkuY2FjaGVkU2luKGV4ZWMtPmFyZ3VtZW50KDApLnRv
TnVtYmVyKGV4ZWMpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT52bSgpLmNh
Y2hlZFNpbihleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpOwogfQogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNTcXJ0KEV4ZWNTdGF0ZSogZXhlYykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmgJKHJldmlz
aW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAg
IH0KIAogICAgIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L01lbW9yeVN0YXRpc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01lbW9yeVN0YXRpc3RpY3MuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NZW1vcnlTdGF0aXN0aWNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIk1lbW9yeVN0YXRpc3RpY3MuaCIKIAog
I2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEu
aCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIkpTU3RhY2suaCIKIAogbmFtZXNwYWNlIEpT
QyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NZW1vcnlTdGF0aXN0aWNz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWVtb3J5U3Rh
dGlzdGljcy5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NZW1vcnlTdGF0aXN0aWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAK
IAogI2luY2x1ZGUgIkhlYXAuaCIKIAotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiAK
IG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
YW1lQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL05hbWVDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL05hbWVDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDE1ICs0MywxNSBAQCBOYW1lQ29uc3RydWN0b3I6Ok5hbWVDb25zdHJ1Y3RvcihKU0ds
b2JhCiAKIHZvaWQgTmFtZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIE5hbWVQcm90b3R5cGUqIHByb3RvdHlwZSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bihleGVjLT5nbG9iYWxEYXRhKCksIHByb3RvdHlwZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSk7
Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBwcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5n
bG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZXhlYy0+dm0oKSwgcHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKTsKKyAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkucHJvdG90eXBlLCBwcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigxKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwg
RG9udEVudW0pOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3RQcml2YXRlTmFtZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSBwdWJsaWNO
YW1lID0gZXhlYy0+YXJndW1lbnRDb3VudCgpID8gZXhlYy0+YXJndW1lbnQoMCkgOiBqc1VuZGVm
aW5lZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoTmFtZUluc3RhbmNlOjpjcmVhdGUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnByaXZhdGVO
YW1lU3RydWN0dXJlKCksIHB1YmxpY05hbWUudG9TdHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKE5hbWVJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+cHJpdmF0ZU5hbWVTdHJ1Y3R1cmUoKSwgcHVibGljTmFtZS50
b1N0cmluZyhleGVjKSkpOwogfQogCiBDb25zdHJ1Y3RUeXBlIE5hbWVDb25zdHJ1Y3Rvcjo6Z2V0
Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFtZUNvbnN0cnVjdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFtZUNvbnN0cnVjdG9yLmgJ
KHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hbWVD
b25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw5ICs0Niw5IEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpIAorICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKSAKICAgICB7IAotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7IAorICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAKICAgICB9CiAKIHByb3RlY3RlZDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hbWVJbnN0YW5jZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFtZUluc3RhbmNlLmNwcAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFtZUlu
c3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTAgKzMzLDEwIEBAIG5hbWVzcGFjZSBK
U0MgewogCiBjb25zdCBDbGFzc0luZm8gTmFtZUluc3RhbmNlOjpzX2luZm8gPSB7ICJOYW1lIiwg
JkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShOYW1lSW5zdGFuY2UpIH07
CiAKLU5hbWVJbnN0YW5jZTo6TmFtZUluc3RhbmNlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU3RyaW5nKiBuYW1lU3RyaW5nKQotICAgIDogQmFzZShn
bG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCitOYW1lSW5zdGFuY2U6Ok5hbWVJbnN0YW5jZShWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1N0cmluZyogbmFtZVN0cmluZykKKyAgICA6IEJhc2Uo
dm0sIHN0cnVjdHVyZSkKIHsKLSAgICBtX25hbWVTdHJpbmcuc2V0KGdsb2JhbERhdGEsIHRoaXMs
IG5hbWVTdHJpbmcpOworICAgIG1fbmFtZVN0cmluZy5zZXQodm0sIHRoaXMsIG5hbWVTdHJpbmcp
OwogfQogCiB2b2lkIE5hbWVJbnN0YW5jZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lSW5zdGFuY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lSW5zdGFuY2UuaAkocmV2aXNpb24g
MTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFtZUluc3RhbmNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDE1ICszNywxNSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhOYW1lSW5zdGFuY2VUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhOYW1lSW5zdGFuY2VUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAotICAgIHN0YXRpYyBOYW1lSW5z
dGFuY2UqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU1N0cmluZyogbmFtZVN0cmluZykKKyAgICBzdGF0aWMgTmFtZUluc3RhbmNlKiBjcmVh
dGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTdHJpbmcqIG5hbWVTdHJpbmcpCiAg
ICAgewotICAgICAgICBOYW1lSW5zdGFuY2UqIG5hbWUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxOYW1lSW5zdGFuY2U+KGdsb2JhbERhdGEuaGVhcCkpIE5hbWVJbnN0YW5jZShnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUsIG5hbWVTdHJpbmcpOwotICAgICAgICBuYW1lLT5maW5pc2hDcmVhdGlv
bihnbG9iYWxEYXRhKTsKKyAgICAgICAgTmFtZUluc3RhbmNlKiBuYW1lID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8TmFtZUluc3RhbmNlPih2bS5oZWFwKSkgTmFtZUluc3RhbmNlKHZtLCBz
dHJ1Y3R1cmUsIG5hbWVTdHJpbmcpOworICAgICAgICBuYW1lLT5maW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KIApAQCAtNTUsMTEgKzU1LDExIEBAIHB1Ymxp
YzoKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAg
TmFtZUluc3RhbmNlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIEpTU3RyaW5nKik7CisgICAg
TmFtZUluc3RhbmNlKFZNJiwgU3RydWN0dXJlKiwgSlNTdHJpbmcqKTsKIAotICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQogICAgIHsKLSAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSk7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgQVNTRVJU
KGluaGVyaXRzKCZzX2luZm8pKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL05hbWVQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL05hbWVQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lUHJvdG90eXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDgsMTMgKzQ4LDEzIEBAIGNvbnN0IENsYXNzSW5mbyBOYW1lUHJvdG90eXBlOjpz
X2luZm8gPSAKICovCiAKIE5hbWVQcm90b3R5cGU6Ok5hbWVQcm90b3R5cGUoRXhlY1N0YXRlKiBl
eGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IEJhc2UoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBzdHJ1Y3R1cmUsIGpzRW1wdHlTdHJpbmcoZXhlYykpCisgICAgOiBCYXNlKGV4ZWMtPnZtKCks
IHN0cnVjdHVyZSwganNFbXB0eVN0cmluZyhleGVjKSkKIHsKIH0KIAogdm9pZCBOYW1lUHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihl
eGVjLT52bSgpKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lUHJvdG90eXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFtZVByb3RvdHlwZS5oCShyZXZpc2lv
biAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lUHJvdG90eXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDkgQEAgcHVibGljOgogICAgIAogICAgIHN0
YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE5hbWVJbnN0YW5jZVR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE5hbWVJbnN0YW5j
ZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJy
b3JDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQz
LDkgKzQzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgY29u
c3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KIAogICAgICAgICBT
dHJ1Y3R1cmUqIGVycm9yU3RydWN0dXJlKCkgeyByZXR1cm4gbV9lcnJvclN0cnVjdHVyZS5nZXQo
KTsgfQpAQCAtNTMsMTQgKzUzLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByb3RlY3RlZDoK
ICAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBjb25zdCBT
dHJpbmcmIG5hbWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGV4ZWMtPmdsb2JhbERhdGEoKSwgbmFtZSk7CisgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihleGVjLT52bSgpLCBuYW1lKTsKICAgICAgICAgICAgIEFTU0VSVChpbmhlcml0cygmc19p
bmZvKSk7CiAKICAgICAgICAgICAgIE5hdGl2ZUVycm9yUHJvdG90eXBlKiBwcm90b3R5cGUgPSBO
YXRpdmVFcnJvclByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
U3RydWN0dXJlLCBuYW1lLCB0aGlzKTsKIAotICAgICAgICAgICAgcHV0RGlyZWN0KGV4ZWMtPmds
b2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSksIERv
bnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsgLy8gRUNNQSAxNS4xMS43LjUKLSAgICAg
ICAgICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5wcm90b3R5cGUsIHByb3RvdHlwZSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0p
OwotICAgICAgICAgICAgbV9lcnJvclN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzLCBFcnJvckluc3RhbmNlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSkpOworICAgICAgICAgICAgcHV0RGlyZWN0KGV4ZWMtPnZt
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkgfCBEb250RW51bSk7IC8vIEVDTUEgMTUuMTEuNy41CisgICAgICAgICAgICBw
dXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgcHJv
dG90eXBlLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgICAgICAgICBt
X2Vycm9yU3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBFcnJvckluc3RhbmNlOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUpKTsKICAgICAg
ICAgICAgIEFTU0VSVChtX2Vycm9yU3RydWN0dXJlKTsKICAgICAgICAgICAgIEFTU0VSVChtX2Vy
cm9yU3RydWN0dXJlLT5pc09iamVjdCgpKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yUHJvdG90eXBlLmNwcAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZl
RXJyb3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiw5IEBAIE5hdGl2
ZUVycm9yUHJvdG90eXBlOjpOYXRpdmVFcnJvclByb3RvdHkKIHZvaWQgTmF0aXZlRXJyb3JQcm90
b3R5cGU6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWVBbmRNZXNzYWdlLCBOYXRpdmVFcnJv
ckNvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvcikKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihl
eGVjLCBnbG9iYWxPYmplY3QpOwotICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1lLCBqc1N0cmluZyhleGVjLCBuYW1lQW5kTWVzc2FnZSks
IERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubWVzc2FnZSwganNFbXB0eVN0cmluZyhleGVjKSwgRG9udEVudW0pOwotICAg
IHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25z
dHJ1Y3RvciwgY29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+dm0o
KSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm5hbWUsIGpzU3RyaW5nKGV4ZWMsIG5hbWVBbmRNZXNz
YWdlKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubWVzc2FnZSwganNFbXB0eVN0cmluZyhleGVjKSwgRG9udEVudW0pOworICAgIHB1
dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGNv
bnN0cnVjdG9yLCBEb250RW51bSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNw
cAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVt
YmVyQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MiwxNCArNjIsMTQgQEAgTnVt
YmVyQ29uc3RydWN0b3I6Ok51bWJlckNvbnN0cnVjdG9yKEpTRwogCiB2b2lkIE51bWJlckNvbnN0
cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIE51bWJlclByb3RvdHlwZSog
bnVtYmVyUHJvdG90eXBlKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgbnVtYmVyUHJvdG90eXBlLT5zX2luZm8uY2xhc3NOYW1lKTsKKyAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbihleGVjLT52bSgpLCBudW1iZXJQcm90b3R5cGUtPnNfaW5mby5jbGFzc05h
bWUpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiAKICAgICAvLyBOdW1iZXIuUHJv
dG90eXBlCi0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgp
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBudW1iZXJQcm90b3R5cGUsIERvbnRF
bnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBudW1iZXJQ
cm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKIAogICAgIC8vIG5v
LiBvZiBhcmd1bWVudHMgZm9yIGNvbnN0cnVjdG9yCi0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBq
c051bWJlcigxKSwgUmVhZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOworICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgsIGpzTnVtYmVyKDEpLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiB9
CiAKIGJvb2wgTnVtYmVyQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KQpAQCAtMTE1LDkgKzExNSw5IEBAIHN0YXRpYyBKU1ZhbHVlIG51bWJlckNvbnN0
cnVjdG9yTWluVmFsdWUKIC8vIEVDTUEgMTUuNy4xCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoTnVtYmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVj
KQogewotICAgIE51bWJlck9iamVjdCogb2JqZWN0ID0gTnVtYmVyT2JqZWN0OjpjcmVhdGUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9i
YWxPYmplY3QoKS0+bnVtYmVyT2JqZWN0U3RydWN0dXJlKCkpOworICAgIE51bWJlck9iamVjdCog
b2JqZWN0ID0gTnVtYmVyT2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwgYXNJbnRlcm5hbEZ1bmN0
aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPm51bWJlck9iamVjdFN0cnVjdHVy
ZSgpKTsKICAgICBkb3VibGUgbiA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA/IGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvTnVtYmVyKGV4ZWMpIDogMDsKLSAgICBvYmplY3QtPnNldEludGVybmFsVmFsdWUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc051bWJlcihuKSk7CisgICAgb2JqZWN0LT5zZXRJbnRlcm5h
bFZhbHVlKGV4ZWMtPnZtKCksIGpzTnVtYmVyKG4pKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKG9iamVjdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051
bWJlckNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtNDYsOSArNDYsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgY29uc3Qg
Q2xhc3NJbmZvIHNfaW5mbzsKIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvKSAKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
bykgCiAgICAgICAgIHsgCi0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsgCisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7IAogICAgICAgICB9CiAKICAgICAgICAgZW51bSB7IE5hTlZhbHVl
LCBOZWdJbmZpbml0eSwgUG9zSW5maW5pdHksIE1heFZhbHVlLCBNaW5WYWx1ZSB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuY3BwCShyZXZp
c2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwyMSArMzIsMjEgQEAgQVNTRVJUX0hBU19UUklW
SUFMX0RFU1RSVUNUT1IoTnVtYmVyT2JqZQogCiBjb25zdCBDbGFzc0luZm8gTnVtYmVyT2JqZWN0
OjpzX2luZm8gPSB7ICJOdW1iZXIiLCAmSlNXcmFwcGVyT2JqZWN0OjpzX2luZm8sIDAsIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoTnVtYmVyT2JqZWN0KSB9OwogCi1OdW1iZXJPYmplY3Q6Ok51bWJl
ck9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQot
ICAgIDogSlNXcmFwcGVyT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKK051bWJlck9iamVj
dDo6TnVtYmVyT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBKU1dy
YXBwZXJPYmplY3Qodm0sIHN0cnVjdHVyZSkKIHsKIH0KIAotdm9pZCBOdW1iZXJPYmplY3Q6OmZp
bmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgTnVtYmVyT2JqZWN0
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xv
YmFsRGF0YSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhl
cml0cygmc19pbmZvKSk7CiB9CiAKIE51bWJlck9iamVjdCogY29uc3RydWN0TnVtYmVyKEV4ZWNT
dGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBudW1iZXIp
CiB7Ci0gICAgTnVtYmVyT2JqZWN0KiBvYmplY3QgPSBOdW1iZXJPYmplY3Q6OmNyZWF0ZShleGVj
LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+bnVtYmVyT2JqZWN0U3RydWN0dXJlKCkpOwot
ICAgIG9iamVjdC0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIG51bWJlcik7
CisgICAgTnVtYmVyT2JqZWN0KiBvYmplY3QgPSBOdW1iZXJPYmplY3Q6OmNyZWF0ZShleGVjLT52
bSgpLCBnbG9iYWxPYmplY3QtPm51bWJlck9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICBvYmplY3Qt
PnNldEludGVybmFsVmFsdWUoZXhlYy0+dm0oKSwgbnVtYmVyKTsKICAgICByZXR1cm4gb2JqZWN0
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmpl
Y3QuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TnVtYmVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDI0ICsyNywyNCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgIGNsYXNzIE51bWJlck9iamVjdCA6IHB1YmxpYyBKU1dyYXBwZXJPYmpl
Y3QgewogICAgIHByb3RlY3RlZDoKLSAgICAgICAgTnVtYmVyT2JqZWN0KEpTR2xvYmFsRGF0YSYs
IFN0cnVjdHVyZSopOwotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYp
OworICAgICAgICBOdW1iZXJPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYpOwogCiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIEpTV3Jh
cHBlck9iamVjdCBCYXNlOwogCi0gICAgICAgIHN0YXRpYyBOdW1iZXJPYmplY3QqIGNyZWF0ZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICBz
dGF0aWMgTnVtYmVyT2JqZWN0KiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
ICAgICAgICAgewotICAgICAgICAgICAgTnVtYmVyT2JqZWN0KiBudW1iZXIgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxOdW1iZXJPYmplY3Q+KGdsb2JhbERhdGEuaGVhcCkpIE51bWJlck9i
amVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgbnVtYmVyLT5maW5pc2hD
cmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIE51bWJlck9iamVjdCogbnVtYmVyID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8TnVtYmVyT2JqZWN0Pih2bS5oZWFwKSkgTnVtYmVy
T2JqZWN0KHZtLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgbnVtYmVyLT5maW5pc2hDcmVhdGlv
bih2bSk7CiAgICAgICAgICAgICByZXR1cm4gbnVtYmVyOwogICAgICAgICB9CiAKICAgICAgICAg
c3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oTnVtYmVyT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE51bWJlck9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7CiAgICAgICAgIH0KICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE0ODY1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcxLDE0ICs3MSwxNCBAQCBjb25zdCBDbGFzc0luZm8gTnVtYmVy
UHJvdG90eXBlOjpzX2luZm8gCiBBU1NFUlRfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUihOdW1iZXJQ
cm90b3R5cGUpOwogCiBOdW1iZXJQcm90b3R5cGU6Ok51bWJlclByb3RvdHlwZShFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogTnVtYmVyT2JqZWN0KGV4ZWMtPmds
b2JhbERhdGEoKSwgc3RydWN0dXJlKQorICAgIDogTnVtYmVyT2JqZWN0KGV4ZWMtPnZtKCksIHN0
cnVjdHVyZSkKIHsKIH0KIAogdm9pZCBOdW1iZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgc2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9i
YWxEYXRhKCksIGpzTnVtYmVyKDApKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52
bSgpKTsKKyAgICBzZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPnZtKCksIGpzTnVtYmVyKDApKTsKIAog
ICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiB9CkBAIC00NzUsMTMgKzQ3NSwxMyBAQCBz
dGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGludGVnZXJWYWx1CiAgICAgaWYgKHN0YXRpY19j
YXN0PHVuc2lnbmVkPih2YWx1ZSkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFkaXgpKSB7CiAg
ICAgICAgIEFTU0VSVCh2YWx1ZSA8PSAzNik7CiAgICAgICAgIEFTU0VSVCh2YWx1ZSA+PSAwKTsK
LSAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Mu
c2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIHJhZGl4RGlnaXRzW3ZhbHVlXSkpOwor
ICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyh2bSwgcmFkaXhEaWdp
dHNbdmFsdWVdKSk7CiAgICAgfQogCiAgICAgaWYgKHJhZGl4ID09IDEwKSB7Ci0gICAgICAgIEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+bnVt
ZXJpY1N0cmluZ3MuYWRkKHZhbHVlKSkpOworICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgdm0tPm51bWVyaWNT
dHJpbmdzLmFkZCh2YWx1ZSkpKTsKICAgICB9CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzU3RyaW5nKGV4ZWMsIHRvU3RyaW5nV2l0aFJhZGl4KHZhbHVlLCByYWRpeCkpKTsKQEAgLTUw
Myw4ICs1MDMsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvCiAg
ICAgICAgIHJldHVybiBpbnRlZ2VyVmFsdWVUb1N0cmluZyhleGVjLCByYWRpeCwgaW50ZWdlclZh
bHVlKTsKIAogICAgIGlmIChyYWRpeCA9PSAxMCkgewotICAgICAgICBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzU3RyaW5nKGdsb2JhbERhdGEsIGdsb2JhbERhdGEtPm51bWVyaWNTdHJpbmdzLmFk
ZChkb3VibGVWYWx1ZSkpKTsKKyAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIHZtLT5udW1lcmljU3RyaW5ncy5h
ZGQoZG91YmxlVmFsdWUpKSk7CiAgICAgfQogCiAgICAgaWYgKCFzdGQ6OmlzZmluaXRlKGRvdWJs
ZVZhbHVlKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3Rv
dHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJl
clByb3RvdHlwZS5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9OdW1iZXJQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOwogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQorICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhOdW1iZXJPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oTnVtYmVyT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogCiAgICAgcHJv
dGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09i
amVjdENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NSwxMSArODUsMTEgQEAgT2JqZWN0Q29uc3RydWN0b3I6Ok9iamVjdENvbnN0cnVjdG9yKEpTRwog
CiB2b2lkIE9iamVjdENvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMs
IE9iamVjdFByb3RvdHlwZSogb2JqZWN0UHJvdG90eXBlKQogewotICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiT2JqZWN0Iikuc3Ry
aW5nKCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZpZXIo
ZXhlYywgIk9iamVjdCIpLnN0cmluZygpKTsKICAgICAvLyBFQ01BIDE1LjIuMy4xCi0gICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkucHJvdG90eXBlLCBvYmplY3RQcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgp
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBvYmplY3RQcm90b3R5cGUsIERvbnRF
bnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICAvLyBuby4gb2YgYXJndW1lbnRzIGZv
ciBjb25zdHJ1Y3RvcgotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSksIFJlYWRP
bmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigx
KSwgUmVhZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOwogfQogCiBib29sIE9iamVjdENv
bnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCAmc2xvdCkKQEAgLTE2
MCwxNyArMTYwLDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QK
IAogICAgIEpTT2JqZWN0KiBkZXNjcmlwdGlvbiA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMp
OwogICAgIGlmICghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7Ci0gICAgICAg
IGRlc2NyaXB0aW9uLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkudmFsdWUsIGRlc2NyaXB0b3IudmFsdWUoKSA/IGRlc2NyaXB0b3IudmFsdWUoKSA6
IGpzVW5kZWZpbmVkKCksIDApOwotICAgICAgICBkZXNjcmlwdGlvbi0+cHV0RGlyZWN0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLndyaXRhYmxlLCBqc0Jvb2xlYW4o
ZGVzY3JpcHRvci53cml0YWJsZSgpKSwgMCk7CisgICAgICAgIGRlc2NyaXB0aW9uLT5wdXREaXJl
Y3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnZhbHVlLCBkZXNjcmlwdG9yLnZh
bHVlKCkgPyBkZXNjcmlwdG9yLnZhbHVlKCkgOiBqc1VuZGVmaW5lZCgpLCAwKTsKKyAgICAgICAg
ZGVzY3JpcHRpb24tPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
d3JpdGFibGUsIGpzQm9vbGVhbihkZXNjcmlwdG9yLndyaXRhYmxlKCkpLCAwKTsKICAgICB9IGVs
c2UgewogICAgICAgICBBU1NFUlQoZGVzY3JpcHRvci5nZXR0ZXIoKSk7CiAgICAgICAgIEFTU0VS
VChkZXNjcmlwdG9yLnNldHRlcigpKTsKLSAgICAgICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdChl
eGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5nZXQsIGRlc2NyaXB0b3Iu
Z2V0dGVyKCksIDApOwotICAgICAgICBkZXNjcmlwdGlvbi0+cHV0RGlyZWN0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNldCwgZGVzY3JpcHRvci5zZXR0ZXIoKSwg
MCk7CisgICAgICAgIGRlc2NyaXB0aW9uLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmdldCwgZGVzY3JpcHRvci5nZXR0ZXIoKSwgMCk7CisgICAgICAgIGRlc2Ny
aXB0aW9uLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNldCwg
ZGVzY3JpcHRvci5zZXR0ZXIoKSwgMCk7CiAgICAgfQogICAgIAotICAgIGRlc2NyaXB0aW9uLT5w
dXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZW51bWVy
YWJsZSwganNCb29sZWFuKGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKSwgMCk7Ci0gICAgZGVzY3Jp
cHRpb24tPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5jb25maWd1cmFibGUsIGpzQm9vbGVhbihkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpKSwgMCk7
CisgICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuZW51bWVyYWJsZSwganNCb29sZWFuKGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKSwgMCk7
CisgICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuY29uZmlndXJhYmxlLCBqc0Jvb2xlYW4oZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSks
IDApOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShkZXNjcmlwdGlvbik7CiB9CkBAIC0z
NjgsNyArMzY4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAog
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChvYmopOwogCiAgICAgaWYgKGlzSlNGaW5h
bE9iamVjdChvYmplY3QpKSB7Ci0gICAgICAgIG9iamVjdC0+c2VhbChleGVjLT5nbG9iYWxEYXRh
KCkpOworICAgICAgICBvYmplY3QtPnNlYWwoZXhlYy0+dm0oKSk7CiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUob2JqKTsKICAgICB9CiAKQEAgLTM5MCw3ICszOTAsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgfQogCiAgICAgLy8gMy4gU2V0
IHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPIHRvIGZhbHNlLgotICAg
IG9iamVjdC0+cHJldmVudEV4dGVuc2lvbnMoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBvYmpl
Y3QtPnByZXZlbnRFeHRlbnNpb25zKGV4ZWMtPnZtKCkpOwogCiAgICAgLy8gNC4gUmV0dXJuIE8u
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmopOwpAQCAtNDA1LDcgKzQwNSw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gYXNPYmplY3Qob2JqKTsKIAogICAgIGlmIChpc0pTRmluYWxPYmplY3Qob2JqZWN0KSAm
JiAhaGFzSW5kZXhlZFByb3BlcnRpZXMob2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpKSB7Ci0gICAgICAgIG9iamVjdC0+ZnJlZXplKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAg
ICAgIG9iamVjdC0+ZnJlZXplKGV4ZWMtPnZtKCkpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKG9iaik7CiAgICAgfQogCkBAIC00MzEsNyArNDMxLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIH0KIAogICAgIC8vIDMuIFNldCB0aGUgW1tF
eHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTyB0byBmYWxzZS4KLSAgICBvYmplY3Qt
PnByZXZlbnRFeHRlbnNpb25zKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgb2JqZWN0LT5wcmV2
ZW50RXh0ZW5zaW9ucyhleGVjLT52bSgpKTsKIAogICAgIC8vIDQuIFJldHVybiBPLgogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUob2JqKTsKQEAgLTQ0Miw3ICs0NDIsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgSlNWYWx1ZSBvYmogPSBleGVjLT5h
cmd1bWVudCgwKTsKICAgICBpZiAoIW9iai5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIk9iamVj
dC5wcmV2ZW50RXh0ZW5zaW9ucyBjYW4gb25seSBiZSBjYWxsZWQgb24gT2JqZWN0cy4iKSkpOwot
ICAgIGFzT2JqZWN0KG9iaiktPnByZXZlbnRFeHRlbnNpb25zKGV4ZWMtPmdsb2JhbERhdGEoKSk7
CisgICAgYXNPYmplY3Qob2JqKS0+cHJldmVudEV4dGVuc2lvbnMoZXhlYy0+dm0oKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmopOwogfQogCkBAIC00NTUsNyArNDU1LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSBhc09iamVjdChvYmopOwogCiAgICAgaWYgKGlzSlNGaW5hbE9iamVjdChvYmplY3QpKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3QtPmlzU2VhbGVk
KGV4ZWMtPmdsb2JhbERhdGEoKSkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4ob2JqZWN0LT5pc1NlYWxlZChleGVjLT52bSgpKSkpOwogCiAgICAgLy8gMi4gRm9y
IGVhY2ggbmFtZWQgb3duIHByb3BlcnR5IG5hbWUgUCBvZiBPLAogICAgIFByb3BlcnR5TmFtZUFy
cmF5IHByb3BlcnRpZXMoZXhlYyk7CkBAIC00ODUsNyArNDg1LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVj
dChvYmopOwogCiAgICAgaWYgKGlzSlNGaW5hbE9iamVjdChvYmplY3QpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3QtPmlzRnJvemVuKGV4ZWMtPmdsb2Jh
bERhdGEoKSkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2Jq
ZWN0LT5pc0Zyb3plbihleGVjLT52bSgpKSkpOwogCiAgICAgLy8gMi4gRm9yIGVhY2ggbmFtZWQg
b3duIHByb3BlcnR5IG5hbWUgUCBvZiBPLAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRp
ZXMoZXhlYyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25z
dHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09i
amVjdENvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDkg
KzQ1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5m
byBzX2luZm87CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFs
RGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC02
OCw3ICs2OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGlubGluZSBKU09iamVjdCogY29uc3Ry
dWN0RW1wdHlPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogcHJvdG90eXBlLCB1bnNp
Z25lZCBpbmxpbmVDYXBhY2l0eSkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgIFByb3RvdHlw
ZU1hcCYgcHJvdG90eXBlTWFwID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkucHJvdG90eXBl
TWFwOworICAgICAgICBQcm90b3R5cGVNYXAmIHByb3RvdHlwZU1hcCA9IGdsb2JhbE9iamVjdC0+
dm0oKS5wcm90b3R5cGVNYXA7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gcHJvdG90
eXBlTWFwLmVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKAogICAgICAgICAgICAgcHJv
dG90eXBlLCBpbmxpbmVDYXBhY2l0eSk7CiAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9i
amVjdChleGVjLCBzdHJ1Y3R1cmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT2JqZWN0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NSwxNyArNDUsMTcgQEAgQVNTRVJUX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoT2Jq
ZWN0UHJvdAogY29uc3QgQ2xhc3NJbmZvIE9iamVjdFByb3RvdHlwZTo6c19pbmZvID0geyAiT2Jq
ZWN0IiwgJkpTTm9uRmluYWxPYmplY3Q6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShPYmplY3RQcm90b3R5cGUpIH07CiAKIE9iamVjdFByb3RvdHlwZTo6T2JqZWN0UHJvdG90eXBl
KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHVjdHVyZSkKLSAgICA6IEpTTm9uRmluYWxP
YmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHVjdHVyZSkKKyAgICA6IEpTTm9uRmluYWxPYmpl
Y3QoZXhlYy0+dm0oKSwgc3R1Y3R1cmUpCiB7CiB9CiAKIHZvaWQgT2JqZWN0UHJvdG90eXBlOjpm
aW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgCi0gICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZ2xvYmFsRGF0YSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VS
VChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgZ2xvYmFsRGF0YS5wcm90b3R5cGVNYXAuYWRkUHJv
dG90eXBlKHRoaXMpOworICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhpcyk7CiAg
ICAgCiAgICAgSlNDX05BVElWRV9GVU5DVElPTigidG9TdHJpbmciLCBvYmplY3RQcm90b0Z1bmNU
b1N0cmluZywgRG9udEVudW0sIDApOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04oInRvTG9jYWxl
U3RyaW5nIiwgb2JqZWN0UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcsIERvbnRFbnVtLCAwKTsKQEAg
LTIxOCw3ICsyMTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3Rv
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93T3V0T2ZNZW1vcnlFcnJv
cihleGVjKSk7CiAKICAgICAgICAgcmVzdWx0ID0ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIG5l
d1N0cmluZy5yZWxlYXNlKCkpOwotICAgICAgICB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+c2V0
T2JqZWN0VG9TdHJpbmdWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNPYmplY3QsIHJlc3Vs
dCk7CisgICAgICAgIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5zZXRPYmplY3RUb1N0cmluZ1Zh
bHVlKGV4ZWMtPnZtKCksIHRoaXNPYmplY3QsIHJlc3VsdCk7CiAgICAgfQogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09iamVjdFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzMsOSArMzMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgY29u
c3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KIAogICAgIHByb3Rl
Y3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsMzIgKzU2LDMyIEBAIE5FVkVSX0lO
TElORSBKU1ZhbHVlIGpzQWRkU2xvd0Nhc2UoQ2FsbEYKICAgICByZXR1cm4ganNOdW1iZXIocDEu
dG9OdW1iZXIoY2FsbEZyYW1lKSArIHAyLnRvTnVtYmVyKGNhbGxGcmFtZSkpOwogfQogCi1KU1Zh
bHVlIGpzVHlwZVN0cmluZ0ZvclZhbHVlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2KQorSlNWYWx1ZSBqc1R5cGVTdHJpbmdG
b3JWYWx1ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdikK
IHsKICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS5z
bWFsbFN0cmluZ3MudW5kZWZpbmVkU3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2bS5zbWFsbFN0
cmluZ3MudW5kZWZpbmVkU3RyaW5nKCk7CiAgICAgaWYgKHYuaXNCb29sZWFuKCkpCi0gICAgICAg
IHJldHVybiBnbG9iYWxEYXRhLnNtYWxsU3RyaW5ncy5ib29sZWFuU3RyaW5nKCk7CisgICAgICAg
IHJldHVybiB2bS5zbWFsbFN0cmluZ3MuYm9vbGVhblN0cmluZygpOwogICAgIGlmICh2LmlzTnVt
YmVyKCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLnNtYWxsU3RyaW5ncy5udW1iZXJTdHJp
bmcoKTsKKyAgICAgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy5udW1iZXJTdHJpbmcoKTsKICAg
ICBpZiAodi5pc1N0cmluZygpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS5zbWFsbFN0cmlu
Z3Muc3RyaW5nU3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3Muc3RyaW5n
U3RyaW5nKCk7CiAgICAgaWYgKHYuaXNPYmplY3QoKSkgewogICAgICAgICAvLyBSZXR1cm4gInVu
ZGVmaW5lZCIgZm9yIG9iamVjdHMgdGhhdCBzaG91bGQgYmUgdHJlYXRlZAogICAgICAgICAvLyBh
cyBudWxsIHdoZW4gZG9pbmcgY29tcGFyaXNvbnMuCiAgICAgICAgIGlmIChhc09iamVjdCh2KS0+
c3RydWN0dXJlKCktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoZ2xvYmFsT2JqZWN0KSkKLSAgICAg
ICAgICAgIHJldHVybiBnbG9iYWxEYXRhLnNtYWxsU3RyaW5ncy51bmRlZmluZWRTdHJpbmcoKTsK
KyAgICAgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3MudW5kZWZpbmVkU3RyaW5nKCk7CiAg
ICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNP
YmplY3Qodik7CiAgICAgICAgIGlmIChvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRh
KG9iamVjdCwgY2FsbERhdGEpICE9IENhbGxUeXBlTm9uZSkKLSAgICAgICAgICAgIHJldHVybiBn
bG9iYWxEYXRhLnNtYWxsU3RyaW5ncy5mdW5jdGlvblN0cmluZygpOworICAgICAgICAgICAgcmV0
dXJuIHZtLnNtYWxsU3RyaW5ncy5mdW5jdGlvblN0cmluZygpOwogICAgIH0KLSAgICByZXR1cm4g
Z2xvYmFsRGF0YS5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCk7CisgICAgcmV0dXJuIHZtLnNt
YWxsU3RyaW5ncy5vYmplY3RTdHJpbmcoKTsKIH0KIAogSlNWYWx1ZSBqc1R5cGVTdHJpbmdGb3JW
YWx1ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB2KQogewotICAgIHJldHVybiBqc1R5
cGVTdHJpbmdGb3JWYWx1ZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCksIHYpOworICAgIHJldHVybiBqc1R5cGVTdHJpbmdGb3JWYWx1ZShj
YWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCB2KTsKIH0K
IAogYm9vbCBqc0lzT2JqZWN0VHlwZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB2KQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkocmV2aXNp
b24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMyArMzMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIE5F
VkVSX0lOTElORSBKU1ZhbHVlIGpzQWRkU2xvd0Nhc2UoQ2FsbEZyYW1lKiwgSlNWYWx1ZSwgSlNW
YWx1ZSk7CiBKU1ZhbHVlIGpzVHlwZVN0cmluZ0ZvclZhbHVlKENhbGxGcmFtZSosIEpTVmFsdWUp
OwotSlNWYWx1ZSBqc1R5cGVTdHJpbmdGb3JWYWx1ZShKU0dsb2JhbERhdGEmLCBKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUpOworSlNWYWx1ZSBqc1R5cGVTdHJpbmdGb3JWYWx1ZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiBib29sIGpzSXNPYmplY3RUeXBlKENhbGxGcmFtZSosIEpT
VmFsdWUpOwogYm9vbCBqc0lzRnVuY3Rpb25UeXBlKEpTVmFsdWUpOwogCiBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogczEsIEpTU3RyaW5n
KiBzMikKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRh
KCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aDEgPSBz
MS0+bGVuZ3RoKCk7CiAgICAgaWYgKCFsZW5ndGgxKQpAQCAtNTAsMzUgKzUwLDM1IEBAIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUKICAgICBpZiAoKGxlbmd0aDEgKyBs
ZW5ndGgyKSA8IGxlbmd0aDEpCiAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3Io
ZXhlYyk7CiAKLSAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGUoZ2xvYmFsRGF0YSwgczEs
IHMyKTsKKyAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGUodm0sIHMxLCBzMik7CiB9CiAK
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0
cmluZyYgdTEsIGNvbnN0IFN0cmluZyYgdTIsIGNvbnN0IFN0cmluZyYgdTMpCiB7Ci0gICAgSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aDEgPSB1MS5sZW5ndGgoKTsKICAg
ICB1bnNpZ25lZCBsZW5ndGgyID0gdTIubGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoMyA9
IHUzLmxlbmd0aCgpOwogICAgIGlmICghbGVuZ3RoMSkKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5n
KGV4ZWMsIGpzU3RyaW5nKGdsb2JhbERhdGEsIHUyKSwganNTdHJpbmcoZ2xvYmFsRGF0YSwgdTMp
KTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGpzU3RyaW5nKHZtLCB1MiksIGpzU3Ry
aW5nKHZtLCB1MykpOwogICAgIGlmICghbGVuZ3RoMikKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5n
KGV4ZWMsIGpzU3RyaW5nKGdsb2JhbERhdGEsIHUxKSwganNTdHJpbmcoZ2xvYmFsRGF0YSwgdTMp
KTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGpzU3RyaW5nKHZtLCB1MSksIGpzU3Ry
aW5nKHZtLCB1MykpOwogICAgIGlmICghbGVuZ3RoMykKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5n
KGV4ZWMsIGpzU3RyaW5nKGdsb2JhbERhdGEsIHUxKSwganNTdHJpbmcoZ2xvYmFsRGF0YSwgdTIp
KTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGpzU3RyaW5nKHZtLCB1MSksIGpzU3Ry
aW5nKHZtLCB1MikpOwogCiAgICAgaWYgKChsZW5ndGgxICsgbGVuZ3RoMikgPCBsZW5ndGgxKQog
ICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogICAgIGlmICgobGVu
Z3RoMSArIGxlbmd0aDIgKyBsZW5ndGgzKSA8IGxlbmd0aDMpCiAgICAgICAgIHJldHVybiB0aHJv
d091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAKLSAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVh
dGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc1N0cmluZyhnbG9iYWxEYXRhLCB1MSksIGpzU3RyaW5n
KGdsb2JhbERhdGEsIHUyKSwganNTdHJpbmcoZ2xvYmFsRGF0YSwgdTMpKTsKKyAgICByZXR1cm4g
SlNSb3BlU3RyaW5nOjpjcmVhdGUoZXhlYy0+dm0oKSwganNTdHJpbmcodm0sIHUxKSwganNTdHJp
bmcodm0sIHUyKSwganNTdHJpbmcodm0sIHUzKSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIFJlZ2lzdGVyKiBzdHJpbmdzLCB1bnNpZ25lZCBj
b3VudCkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0
YSgpOwotICAgIEpTUm9wZVN0cmluZzo6Um9wZUJ1aWxkZXIgcm9wZUJ1aWxkZXIoKmdsb2JhbERh
dGEpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIEpTUm9wZVN0cmluZzo6Um9wZUJ1
aWxkZXIgcm9wZUJ1aWxkZXIoKnZtKTsKIAogICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IDA7CiAK
QEAgLTk2LDggKzk2LDggQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0
ZQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTdHJpbmdGcm9tQXJndW1lbnRzKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBKU1JvcGVTdHJpbmc6OlJvcGVCdWlsZGVy
IHJvcGVCdWlsZGVyKCpnbG9iYWxEYXRhKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAg
ICBKU1JvcGVTdHJpbmc6OlJvcGVCdWlsZGVyIHJvcGVCdWlsZGVyKCp2bSk7CiAgICAgcm9wZUJ1
aWxkZXIuYXBwZW5kKHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKSk7CiAKICAgICB1bnNpZ25lZCBv
bGRMZW5ndGggPSAwOwpAQCAtMjMwLDkgKzIzMCw5IEBAIGlubGluZSBzaXplX3Qgbm9ybWFsaXpl
UHJvdG90eXBlQ2hhaW5Gb3IKICAgICAgICAgLy8gU2luY2Ugd2UncmUgYWNjZXNzaW5nIGEgcHJv
dG90eXBlIGluIGEgbG9vcCwgaXQncyBhIGdvb2QgYmV0IHRoYXQgaXQKICAgICAgICAgLy8gc2hv
dWxkIG5vdCBiZSB0cmVhdGVkIGFzIGEgZGljdGlvbmFyeS4KICAgICAgICAgaWYgKGNlbGwtPnN0
cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkgewotICAgICAgICAgICAgYXNPYmplY3QoY2VsbCkt
PmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAg
ICAgICAgIGFzT2JqZWN0KGNlbGwpLT5mbGF0dGVuRGljdGlvbmFyeU9iamVjdChjYWxsRnJhbWUt
PnZtKCkpOwogICAgICAgICAgICAgaWYgKHNsb3RCYXNlID09IGNlbGwpCi0gICAgICAgICAgICAg
ICAgc2xvdE9mZnNldCA9IGNlbGwtPnN0cnVjdHVyZSgpLT5nZXQoY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCksIHByb3BlcnR5TmFtZSk7IAorICAgICAgICAgICAgICAgIHNsb3RPZmZzZXQgPSBjZWxs
LT5zdHJ1Y3R1cmUoKS0+Z2V0KGNhbGxGcmFtZS0+dm0oKSwgcHJvcGVydHlOYW1lKTsgCiAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICArK2NvdW50OwpAQCAtMjU4LDcgKzI1OCw3IEBA
IGlubGluZSBzaXplX3Qgbm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oQ2EKICAgICAgICAgLy8gU2lu
Y2Ugd2UncmUgYWNjZXNzaW5nIGEgcHJvdG90eXBlIGluIGEgbG9vcCwgaXQncyBhIGdvb2QgYmV0
IHRoYXQgaXQKICAgICAgICAgLy8gc2hvdWxkIG5vdCBiZSB0cmVhdGVkIGFzIGEgZGljdGlvbmFy
eS4KICAgICAgICAgaWYgKGJhc2UtPnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAg
ICAgICAgIGFzT2JqZWN0KGJhc2UpLT5mbGF0dGVuRGljdGlvbmFyeU9iamVjdChjYWxsRnJhbWUt
Pmdsb2JhbERhdGEoKSk7CisgICAgICAgICAgICBhc09iamVjdChiYXNlKS0+ZmxhdHRlbkRpY3Rp
b25hcnlPYmplY3QoY2FsbEZyYW1lLT52bSgpKTsKIAogICAgICAgICArK2NvdW50OwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlN
YXBIYXNoVGFibGUuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsMTEg
Kzc3LDExIEBAIHN0cnVjdCBQcm9wZXJ0eU1hcEVudHJ5IHsKICAgICB1bnNpZ25lZCBhdHRyaWJ1
dGVzOwogICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IHNwZWNpZmljVmFsdWU7CiAKLSAgICBQcm9w
ZXJ0eU1hcEVudHJ5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgU3Ry
aW5nSW1wbCoga2V5LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMs
IEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSkKKyAgICBQcm9wZXJ0eU1hcEVudHJ5KFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgU3RyaW5nSW1wbCoga2V5LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSkKICAgICAgICAgOiBrZXkoa2V5
KQogICAgICAgICAsIG9mZnNldChvZmZzZXQpCiAgICAgICAgICwgYXR0cmlidXRlcyhhdHRyaWJ1
dGVzKQotICAgICAgICAsIHNwZWNpZmljVmFsdWUoZ2xvYmFsRGF0YSwgb3duZXIsIHNwZWNpZmlj
VmFsdWUsIFdyaXRlQmFycmllcjxKU0NlbGw+OjpNYXlCZU51bGwpCisgICAgICAgICwgc3BlY2lm
aWNWYWx1ZSh2bSwgb3duZXIsIHNwZWNpZmljVmFsdWUsIFdyaXRlQmFycmllcjxKU0NlbGw+OjpN
YXlCZU51bGwpCiAgICAgewogICAgIH0KIH07CkBAIC0xMzUsOSArMTM1LDkgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhDb21wb3VuZFR5cGUsIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4pLCAmc19pbmZvKTsK
KyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oQ29tcG91bmRUeXBlLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuKSwgJnNf
aW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOwpAQCAtMTU1LDkgKzE1NSw5IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIHN0
ZDo6cGFpcjxWYWx1ZVR5cGUqLCB1bnNpZ25lZD4gZmluZF9pdGVyYXRvcjsKIAogICAgIC8vIENv
bnN0cnVjdG9yIGlzIHBhc3NlZCBhbiBpbml0aWFsIGNhcGFjaXR5LCBhIFByb3BlcnR5VGFibGUg
dG8gY29weSwgb3IgYm90aC4KLSAgICBzdGF0aWMgUHJvcGVydHlUYWJsZSogY3JlYXRlKEpTR2xv
YmFsRGF0YSYsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSk7Ci0gICAgc3RhdGljIFByb3BlcnR5
VGFibGUqIGNsb25lKEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCogb3duZXIsIGNvbnN0IFByb3BlcnR5
VGFibGUmKTsKLSAgICBzdGF0aWMgUHJvcGVydHlUYWJsZSogY2xvbmUoSlNHbG9iYWxEYXRhJiwg
SlNDZWxsKiBvd25lciwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRh
YmxlJik7CisgICAgc3RhdGljIFByb3BlcnR5VGFibGUqIGNyZWF0ZShWTSYsIHVuc2lnbmVkIGlu
aXRpYWxDYXBhY2l0eSk7CisgICAgc3RhdGljIFByb3BlcnR5VGFibGUqIGNsb25lKFZNJiwgSlND
ZWxsKiBvd25lciwgY29uc3QgUHJvcGVydHlUYWJsZSYpOworICAgIHN0YXRpYyBQcm9wZXJ0eVRh
YmxlKiBjbG9uZShWTSYsIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSwg
Y29uc3QgUHJvcGVydHlUYWJsZSYpOwogICAgIH5Qcm9wZXJ0eVRhYmxlKCk7CiAKICAgICAvLyBP
cmRlcmVkIGl0ZXJhdGlvbiBtZXRob2RzLgpAQCAtMTk0LDcgKzE5NCw3IEBAIHB1YmxpYzoKICAg
ICBQcm9wZXJ0eU9mZnNldCBuZXh0T2Zmc2V0KFByb3BlcnR5T2Zmc2V0IGlubGluZUNhcGFjaXR5
KTsKIAogICAgIC8vIENvcHkgdGhpcyBQcm9wZXJ0eVRhYmxlLCBlbnN1cmluZyB0aGUgY29weSBo
YXMgYXQgbGVhc3QgdGhlIGNhcGFjaXR5IHByb3ZpZGVkLgotICAgIFByb3BlcnR5VGFibGUqIGNv
cHkoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgbmV3Q2FwYWNpdHkpOwor
ICAgIFByb3BlcnR5VGFibGUqIGNvcHkoVk0mLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBuZXdD
YXBhY2l0eSk7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgc2l6ZV90IHNpemVJbk1lbW9yeSgpOwpA
QCAtMjAyLDkgKzIwMiw5IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIFByb3Bl
cnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5KTsKLSAgICBQ
cm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCosIGNvbnN0IFByb3BlcnR5VGFibGUm
KTsKLSAgICBQcm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCosIHVuc2lnbmVkIGlu
aXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYpOworICAgIFByb3BlcnR5VGFibGUo
Vk0mLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkpOworICAgIFByb3BlcnR5VGFibGUoVk0mLCBK
U0NlbGwqLCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CisgICAgUHJvcGVydHlUYWJsZShWTSYsIEpT
Q2VsbCosIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYpOwog
CiAgICAgUHJvcGVydHlUYWJsZShjb25zdCBQcm9wZXJ0eVRhYmxlJik7CiAgICAgLy8gVXNlZCB0
byBpbnNlcnQgYSB2YWx1ZSBrbm93biBub3QgdG8gYmUgaW4gdGhlIHRhYmxlLCBhbmQgd2hlcmUg
d2Uga25vdyBjYXBhY2l0eSB0byBiZSBhdmFpbGFibGUuCkBAIC00NTMsMTUgKzQ1MywxNSBAQCBp
bmxpbmUgUHJvcGVydHlPZmZzZXQgUHJvcGVydHlUYWJsZTo6bmV4CiAgICAgcmV0dXJuIG9mZnNl
dEZvclByb3BlcnR5TnVtYmVyKHNpemUoKSwgaW5saW5lQ2FwYWNpdHkpOwogfQogCi1pbmxpbmUg
UHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJsZTo6Y29weShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIG5ld0NhcGFjaXR5KQoraW5saW5lIFByb3BlcnR5
VGFibGUqIFByb3BlcnR5VGFibGU6OmNvcHkoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25l
ZCBuZXdDYXBhY2l0eSkKIHsKICAgICBBU1NFUlQobmV3Q2FwYWNpdHkgPj0gbV9rZXlDb3VudCk7
CiAKICAgICAvLyBGYXN0IGNhc2U7IGlmIHRoZSBuZXcgdGFibGUgd2lsbCBiZSB0aGUgc2FtZSBt
X2luZGV4U2l6ZSBhcyB0aGlzIG9uZSwgd2UgY2FuIG1lbWNweSBpdCwKICAgICAvLyBzYXZlIHJl
aGFzaGluZyBhbGwga2V5cy4KICAgICBpZiAoc2l6ZUZvckNhcGFjaXR5KG5ld0NhcGFjaXR5KSA9
PSBtX2luZGV4U2l6ZSkKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKGdsb2Jh
bERhdGEsIG93bmVyLCAqdGhpcyk7Ci0gICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKGds
b2JhbERhdGEsIG93bmVyLCBuZXdDYXBhY2l0eSwgKnRoaXMpOworICAgICAgICByZXR1cm4gUHJv
cGVydHlUYWJsZTo6Y2xvbmUodm0sIG93bmVyLCAqdGhpcyk7CisgICAgcmV0dXJuIFByb3BlcnR5
VGFibGU6OmNsb25lKHZtLCBvd25lciwgbmV3Q2FwYWNpdHksICp0aGlzKTsKIH0KIAogI2lmbmRl
ZiBOREVCVUcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFt
ZUFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlOYW1lQXJyYXkuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSAr
NTIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAvLyBGSVhNRTogUmVuYW1lIHRvIFByb3BlcnR5
TmFtZUFycmF5QnVpbGRlci4KICAgICBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheSB7CiAgICAgcHVi
bGljOgotICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEp
CisgICAgICAgIFByb3BlcnR5TmFtZUFycmF5KFZNKiB2bSkKICAgICAgICAgICAgIDogbV9kYXRh
KFByb3BlcnR5TmFtZUFycmF5RGF0YTo6Y3JlYXRlKCkpCi0gICAgICAgICAgICAsIG1fZ2xvYmFs
RGF0YShnbG9iYWxEYXRhKQorICAgICAgICAgICAgLCBtX3ZtKHZtKQogICAgICAgICAgICAgLCBt
X251bUNhY2hlYWJsZVNsb3RzKDApCiAgICAgICAgICAgICAsIG1fYmFzZU9iamVjdCgwKQogICAg
ICAgICB7CkBAIC02MiwxNyArNjIsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgUHJv
cGVydHlOYW1lQXJyYXkoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgOiBtX2RhdGEoUHJv
cGVydHlOYW1lQXJyYXlEYXRhOjpjcmVhdGUoKSkKLSAgICAgICAgICAgICwgbV9nbG9iYWxEYXRh
KCZleGVjLT5nbG9iYWxEYXRhKCkpCisgICAgICAgICAgICAsIG1fdm0oJmV4ZWMtPnZtKCkpCiAg
ICAgICAgICAgICAsIG1fbnVtQ2FjaGVhYmxlU2xvdHMoMCkKICAgICAgICAgICAgICwgbV9iYXNl
T2JqZWN0KDApCiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSgpIHsgcmV0dXJuIG1fZ2xvYmFsRGF0YTsgfQorICAgICAgICBWTSogdm0oKSB7
IHJldHVybiBtX3ZtOyB9CiAKICAgICAgICAgdm9pZCBhZGQoY29uc3QgSWRlbnRpZmllciYgaWRl
bnRpZmllcikgeyBhZGQoaWRlbnRpZmllci5pbXBsKCkpOyB9CiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgYWRkKFN0cmluZ0ltcGwqKTsKLSAgICAgICAgdm9pZCBhZGRLbm93blVuaXF1
ZShTdHJpbmdJbXBsKiBpZGVudGlmaWVyKSB7IG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKCku
YXBwZW5kKElkZW50aWZpZXIobV9nbG9iYWxEYXRhLCBpZGVudGlmaWVyKSk7IH0KKyAgICAgICAg
dm9pZCBhZGRLbm93blVuaXF1ZShTdHJpbmdJbXBsKiBpZGVudGlmaWVyKSB7IG1fZGF0YS0+cHJv
cGVydHlOYW1lVmVjdG9yKCkuYXBwZW5kKElkZW50aWZpZXIobV92bSwgaWRlbnRpZmllcikpOyB9
CiAKICAgICAgICAgSWRlbnRpZmllciYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSB7IHJldHVybiBt
X2RhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpW2ldOyB9CiAgICAgICAgIGNvbnN0IElkZW50aWZp
ZXImIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9kYXRhLT5wcm9wZXJ0
eU5hbWVWZWN0b3IoKVtpXTsgfQpAQCAtMTA2LDcgKzEwNiw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIFJlZlB0cjxQcm9wZXJ0eU5hbWVBcnJheURhdGE+IG1fZGF0YTsKICAgICAgICAg
SWRlbnRpZmllclNldCBtX3NldDsKLSAgICAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7
CisgICAgICAgIFZNKiBtX3ZtOwogICAgICAgICBzaXplX3QgbV9udW1DYWNoZWFibGVTbG90czsK
ICAgICAgICAgSlNPYmplY3QqIG1fYmFzZU9iamVjdDsKICAgICB9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAJKHJldmlzaW9uIDE0
ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSwyOSArMzUsMjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNv
bnN0IENsYXNzSW5mbyBQcm9wZXJ0eVRhYmxlOjpzX2luZm8gPSB7ICJQcm9wZXJ0eVRhYmxlIiwg
MCwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShQcm9wZXJ0eVRhYmxlKSB9OwogCi1Qcm9wZXJ0
eVRhYmxlKiBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1
bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkpCitQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxlOjpj
cmVhdGUoVk0mIHZtLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkpCiB7Ci0gICAgUHJvcGVydHlU
YWJsZSogdGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9wZXJ0eVRhYmxlPihn
bG9iYWxEYXRhLmhlYXApKSBQcm9wZXJ0eVRhYmxlKGdsb2JhbERhdGEsIGluaXRpYWxDYXBhY2l0
eSk7Ci0gICAgdGFibGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIFByb3BlcnR5
VGFibGUqIHRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvcGVydHlUYWJsZT4o
dm0uaGVhcCkpIFByb3BlcnR5VGFibGUodm0sIGluaXRpYWxDYXBhY2l0eSk7CisgICAgdGFibGUt
PmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gdGFibGU7CiB9CiAKLVByb3BlcnR5VGFi
bGUqIFByb3BlcnR5VGFibGU6OmNsb25lKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxs
KiBvd25lciwgY29uc3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCitQcm9wZXJ0eVRhYmxlKiBQcm9w
ZXJ0eVRhYmxlOjpjbG9uZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIGNvbnN0IFByb3BlcnR5VGFi
bGUmIG90aGVyKQogewotICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8UHJvcGVydHlUYWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgUHJvcGVydHlUYWJs
ZShnbG9iYWxEYXRhLCBvd25lciwgb3RoZXIpOwotICAgIHRhYmxlLT5maW5pc2hDcmVhdGlvbihn
bG9iYWxEYXRhKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPFByb3BlcnR5VGFibGU+KHZtLmhlYXApKSBQcm9wZXJ0eVRhYmxlKHZtLCBvd25l
ciwgb3RoZXIpOworICAgIHRhYmxlLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0dXJuIHRh
YmxlOwogfQogCi1Qcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxlOjpjbG9uZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSwg
Y29uc3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCitQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxl
OjpjbG9uZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSwg
Y29uc3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCiB7Ci0gICAgUHJvcGVydHlUYWJsZSogdGFibGUg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9wZXJ0eVRhYmxlPihnbG9iYWxEYXRhLmhl
YXApKSBQcm9wZXJ0eVRhYmxlKGdsb2JhbERhdGEsIG93bmVyLCBpbml0aWFsQ2FwYWNpdHksIG90
aGVyKTsKLSAgICB0YWJsZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgUHJvcGVy
dHlUYWJsZSogdGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9wZXJ0eVRhYmxl
Pih2bS5oZWFwKSkgUHJvcGVydHlUYWJsZSh2bSwgb3duZXIsIGluaXRpYWxDYXBhY2l0eSwgb3Ro
ZXIpOworICAgIHRhYmxlLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0dXJuIHRhYmxlOwog
fQogCi1Qcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5KQotICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGds
b2JhbERhdGEucHJvcGVydHlUYWJsZVN0cnVjdHVyZS5nZXQoKSkKK1Byb3BlcnR5VGFibGU6OlBy
b3BlcnR5VGFibGUoVk0mIHZtLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkpCisgICAgOiBKU0Nl
bGwodm0sIHZtLnByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX2luZGV4U2l6
ZShzaXplRm9yQ2FwYWNpdHkoaW5pdGlhbENhcGFjaXR5KSkKICAgICAsIG1faW5kZXhNYXNrKG1f
aW5kZXhTaXplIC0gMSkKICAgICAsIG1faW5kZXgoc3RhdGljX2Nhc3Q8dW5zaWduZWQqPihmYXN0
WmVyb2VkTWFsbG9jKGRhdGFTaXplKCkpKSkKQEAgLTY3LDggKzY3LDggQEAgUHJvcGVydHlUYWJs
ZTo6UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdAogICAgIEFTU0VSVChpc1Bvd2VyT2YyKG1faW5k
ZXhTaXplKSk7CiB9CiAKLVByb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikK
LSAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnByb3BlcnR5VGFibGVTdHJ1Y3R1
cmUuZ2V0KCkpCitQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgY29uc3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCisgICAgOiBKU0NlbGwodm0sIHZtLnBy
b3BlcnR5VGFibGVTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX2luZGV4U2l6ZShvdGhlci5tX2lu
ZGV4U2l6ZSkKICAgICAsIG1faW5kZXhNYXNrKG90aGVyLm1faW5kZXhNYXNrKQogICAgICwgbV9p
bmRleChzdGF0aWNfY2FzdDx1bnNpZ25lZCo+KGZhc3RNYWxsb2MoZGF0YVNpemUoKSkpKQpAQCAt
OTEsOCArOTEsOCBAQCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0CiAg
ICAgICAgIG1fZGVsZXRlZE9mZnNldHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFByb3BlcnR5T2Zm
c2V0Pigqb3RoZXJEZWxldGVkT2Zmc2V0cykpOwogfQogCi1Qcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0
eVRhYmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQg
aW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKLSAgICA6IEpTQ2Vs
bChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuZ2V0KCkpCitQ
cm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgdW5zaWdu
ZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKKyAgICA6IEpT
Q2VsbCh2bSwgdm0ucHJvcGVydHlUYWJsZVN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1faW5kZXhT
aXplKHNpemVGb3JDYXBhY2l0eShpbml0aWFsQ2FwYWNpdHkpKQogICAgICwgbV9pbmRleE1hc2so
bV9pbmRleFNpemUgLSAxKQogICAgICwgbV9pbmRleChzdGF0aWNfY2FzdDx1bnNpZ25lZCo+KGZh
c3RaZXJvZWRNYWxsb2MoZGF0YVNpemUoKSkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvdG90eXBlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm90b3R5cGVNYXAuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm90b3R5cGVNYXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Miw3ICs2Miw3IEBAIFN0cnVjdHVyZSogUHJvdG90eXBlTWFwOjplbXB0eU9iamVjdFN0
cnUKIAogICAgIGFkZFByb3RvdHlwZShwcm90b3R5cGUpOwogICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKAotICAgICAgICBwcm90b3R5cGUt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCks
IHByb3RvdHlwZSwgaW5saW5lQ2FwYWNpdHkpOworICAgICAgICBwcm90b3R5cGUtPmdsb2JhbE9i
amVjdCgpLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpLCBwcm90b3R5cGUsIGlubGlu
ZUNhcGFjaXR5KTsKICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gc3RydWN0dXJlOwog
ICAgIHJldHVybiBzdHJ1Y3R1cmU7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cC5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNyw4ICsyMTcsOCBAQCB2
b2lkIFJlZ0V4cEZ1bmN0aW9uYWxUZXN0Q29sbGVjdG9yOjpvdXRwCiB9CiAjZW5kaWYKIAotUmVn
RXhwOjpSZWdFeHAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTdHJpbmcmIHBhdHRl
cm5TdHJpbmcsIFJlZ0V4cEZsYWdzIGZsYWdzKQotICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGds
b2JhbERhdGEucmVnRXhwU3RydWN0dXJlLmdldCgpKQorUmVnRXhwOjpSZWdFeHAoVk0mIHZtLCBj
b25zdCBTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIFJlZ0V4cEZsYWdzIGZsYWdzKQorICAgIDogSlND
ZWxsKHZtLCB2bS5yZWdFeHBTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX3N0YXRlKE5vdENvbXBp
bGVkKQogICAgICwgbV9wYXR0ZXJuU3RyaW5nKHBhdHRlcm5TdHJpbmcpCiAgICAgLCBtX2ZsYWdz
KGZsYWdzKQpAQCAtMjMxLDkgKzIzMSw5IEBAIFJlZ0V4cDo6UmVnRXhwKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwKIHsKIH0KIAotdm9pZCBSZWdFeHA6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgUmVnRXhwOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7
Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOwogICAgIFlhcnI6OllhcnJQYXR0ZXJuIHBhdHRlcm4obV9wYXR0ZXJuU3Ry
aW5nLCBpZ25vcmVDYXNlKCksIG11bHRpbGluZSgpLCAmbV9jb25zdHJ1Y3Rpb25FcnJvcik7CiAg
ICAgaWYgKG1fY29uc3RydWN0aW9uRXJyb3IpCiAgICAgICAgIG1fc3RhdGUgPSBQYXJzZUVycm9y
OwpAQCAtMjUwLDE5ICsyNTAsMTkgQEAgdm9pZCBSZWdFeHA6OmRlc3Ryb3koSlNDZWxsKiBjZWxs
KQogICAgIHRoaXNPYmplY3QtPlJlZ0V4cDo6flJlZ0V4cCgpOwogfQogCi1SZWdFeHAqIFJlZ0V4
cDo6Y3JlYXRlV2l0aG91dENhY2hpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBT
dHJpbmcmIHBhdHRlcm5TdHJpbmcsIFJlZ0V4cEZsYWdzIGZsYWdzKQorUmVnRXhwKiBSZWdFeHA6
OmNyZWF0ZVdpdGhvdXRDYWNoaW5nKFZNJiB2bSwgY29uc3QgU3RyaW5nJiBwYXR0ZXJuU3RyaW5n
LCBSZWdFeHBGbGFncyBmbGFncykKIHsKLSAgICBSZWdFeHAqIHJlZ0V4cCA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPFJlZ0V4cD4oZ2xvYmFsRGF0YS5oZWFwKSkgUmVnRXhwKGdsb2JhbERh
dGEsIHBhdHRlcm5TdHJpbmcsIGZsYWdzKTsKLSAgICByZWdFeHAtPmZpbmlzaENyZWF0aW9uKGds
b2JhbERhdGEpOworICAgIFJlZ0V4cCogcmVnRXhwID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8UmVnRXhwPih2bS5oZWFwKSkgUmVnRXhwKHZtLCBwYXR0ZXJuU3RyaW5nLCBmbGFncyk7Cisg
ICAgcmVnRXhwLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0dXJuIHJlZ0V4cDsKIH0KIAot
UmVnRXhwKiBSZWdFeHA6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFN0
cmluZyYgcGF0dGVyblN0cmluZywgUmVnRXhwRmxhZ3MgZmxhZ3MpCitSZWdFeHAqIFJlZ0V4cDo6
Y3JlYXRlKFZNJiB2bSwgY29uc3QgU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBSZWdFeHBGbGFncyBm
bGFncykKIHsKLSAgICByZXR1cm4gZ2xvYmFsRGF0YS5yZWdFeHBDYWNoZSgpLT5sb29rdXBPckNy
ZWF0ZShwYXR0ZXJuU3RyaW5nLCBmbGFncyk7CisgICAgcmV0dXJuIHZtLnJlZ0V4cENhY2hlKCkt
Pmxvb2t1cE9yQ3JlYXRlKHBhdHRlcm5TdHJpbmcsIGZsYWdzKTsKIH0KIAotdm9pZCBSZWdFeHA6
OmNvbXBpbGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBZYXJyOjpZYXJyQ2hhclNpemUgY2hh
clNpemUpCit2b2lkIFJlZ0V4cDo6Y29tcGlsZShWTSogdm0sIFlhcnI6OllhcnJDaGFyU2l6ZSBj
aGFyU2l6ZSkKIHsKICAgICBZYXJyOjpZYXJyUGF0dGVybiBwYXR0ZXJuKG1fcGF0dGVyblN0cmlu
ZywgaWdub3JlQ2FzZSgpLCBtdWx0aWxpbmUoKSwgJm1fY29uc3RydWN0aW9uRXJyb3IpOwogICAg
IGlmIChtX2NvbnN0cnVjdGlvbkVycm9yKSB7CkBAIC0yNzQsMTMgKzI3NCwxMyBAQCB2b2lkIFJl
Z0V4cDo6Y29tcGlsZShKU0dsb2JhbERhdGEqIGdsb2JhCiAKICAgICBpZiAoIWhhc0NvZGUoKSkg
ewogICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBOb3RDb21waWxlZCk7Ci0gICAgICAgIGdsb2Jh
bERhdGEtPnJlZ0V4cENhY2hlKCktPmFkZFRvU3Ryb25nQ2FjaGUodGhpcyk7CisgICAgICAgIHZt
LT5yZWdFeHBDYWNoZSgpLT5hZGRUb1N0cm9uZ0NhY2hlKHRoaXMpOwogICAgICAgICBtX3N0YXRl
ID0gQnl0ZUNvZGU7CiAgICAgfQogCiAjaWYgRU5BQkxFKFlBUlJfSklUKQotICAgIGlmICghcGF0
dGVybi5tX2NvbnRhaW5zQmFja3JlZmVyZW5jZXMgJiYgZ2xvYmFsRGF0YS0+Y2FuVXNlUmVnRXhw
SklUKCkpIHsKLSAgICAgICAgWWFycjo6aml0Q29tcGlsZShwYXR0ZXJuLCBjaGFyU2l6ZSwgZ2xv
YmFsRGF0YSwgbV9yZWdFeHBKSVRDb2RlKTsKKyAgICBpZiAoIXBhdHRlcm4ubV9jb250YWluc0Jh
Y2tyZWZlcmVuY2VzICYmIHZtLT5jYW5Vc2VSZWdFeHBKSVQoKSkgeworICAgICAgICBZYXJyOjpq
aXRDb21waWxlKHBhdHRlcm4sIGNoYXJTaXplLCB2bSwgbV9yZWdFeHBKSVRDb2RlKTsKICNpZiBF
TkFCTEUoWUFSUl9KSVRfREVCVUcpCiAgICAgICAgIGlmICghbV9yZWdFeHBKSVRDb2RlLmlzRmFs
bEJhY2soKSkKICAgICAgICAgICAgIG1fc3RhdGUgPSBKSVRDb2RlOwpAQCAtMjk3LDEwICsyOTcs
MTAgQEAgdm9pZCBSZWdFeHA6OmNvbXBpbGUoSlNHbG9iYWxEYXRhKiBnbG9iYQogICAgIFVOVVNF
RF9QQVJBTShjaGFyU2l6ZSk7CiAjZW5kaWYKIAotICAgIG1fcmVnRXhwQnl0ZWNvZGUgPSBZYXJy
OjpieXRlQ29tcGlsZShwYXR0ZXJuLCAmZ2xvYmFsRGF0YS0+bV9yZWdFeHBBbGxvY2F0b3IpOwor
ICAgIG1fcmVnRXhwQnl0ZWNvZGUgPSBZYXJyOjpieXRlQ29tcGlsZShwYXR0ZXJuLCAmdm0tPm1f
cmVnRXhwQWxsb2NhdG9yKTsKIH0KIAotdm9pZCBSZWdFeHA6OmNvbXBpbGVJZk5lY2Vzc2FyeShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFlhcnI6OllhcnJDaGFyU2l6ZSBjaGFyU2l6ZSkKK3Zv
aWQgUmVnRXhwOjpjb21waWxlSWZOZWNlc3NhcnkoVk0mIHZtLCBZYXJyOjpZYXJyQ2hhclNpemUg
Y2hhclNpemUpCiB7CiAgICAgaWYgKGhhc0NvZGUoKSkgewogI2lmIEVOQUJMRShZQVJSX0pJVCkK
QEAgLTMxNSwxNyArMzE1LDE3IEBAIHZvaWQgUmVnRXhwOjpjb21waWxlSWZOZWNlc3NhcnkoSlNH
bG9iYWwKICNlbmRpZgogICAgIH0KIAotICAgIGNvbXBpbGUoJmdsb2JhbERhdGEsIGNoYXJTaXpl
KTsKKyAgICBjb21waWxlKCZ2bSwgY2hhclNpemUpOwogfQogCi1pbnQgUmVnRXhwOjptYXRjaChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFN0cmluZyYgcywgdW5zaWduZWQgc3RhcnRP
ZmZzZXQsIFZlY3RvcjxpbnQsIDMyPiYgb3ZlY3RvcikKK2ludCBSZWdFeHA6Om1hdGNoKFZNJiB2
bSwgY29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgVmVjdG9yPGludCwgMzI+
JiBvdmVjdG9yKQogewogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKICAgICBtX3J0TWF0Y2hD
YWxsQ291bnQrKzsKICNlbmRpZgogCiAgICAgQVNTRVJUKG1fc3RhdGUgIT0gUGFyc2VFcnJvcik7
Ci0gICAgY29tcGlsZUlmTmVjZXNzYXJ5KGdsb2JhbERhdGEsIHMuaXM4Qml0KCkgPyBZYXJyOjpD
aGFyOCA6IFlhcnI6OkNoYXIxNik7CisgICAgY29tcGlsZUlmTmVjZXNzYXJ5KHZtLCBzLmlzOEJp
dCgpID8gWWFycjo6Q2hhcjggOiBZYXJyOjpDaGFyMTYpOwogCiAgICAgaW50IG9mZnNldFZlY3Rv
clNpemUgPSAobV9udW1TdWJwYXR0ZXJucyArIDEpICogMjsKICAgICBvdmVjdG9yLnJlc2l6ZShv
ZmZzZXRWZWN0b3JTaXplKTsKQEAgLTM4NCw3ICszODQsNyBAQCBpbnQgUmVnRXhwOjptYXRjaChK
U0dsb2JhbERhdGEmIGdsb2JhbERhCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBSZWdF
eHA6OmNvbXBpbGVNYXRjaE9ubHkoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBZYXJyOjpZYXJy
Q2hhclNpemUgY2hhclNpemUpCit2b2lkIFJlZ0V4cDo6Y29tcGlsZU1hdGNoT25seShWTSogdm0s
IFlhcnI6OllhcnJDaGFyU2l6ZSBjaGFyU2l6ZSkKIHsKICAgICBZYXJyOjpZYXJyUGF0dGVybiBw
YXR0ZXJuKG1fcGF0dGVyblN0cmluZywgaWdub3JlQ2FzZSgpLCBtdWx0aWxpbmUoKSwgJm1fY29u
c3RydWN0aW9uRXJyb3IpOwogICAgIGlmIChtX2NvbnN0cnVjdGlvbkVycm9yKSB7CkBAIC0zOTYs
MTMgKzM5NiwxMyBAQCB2b2lkIFJlZ0V4cDo6Y29tcGlsZU1hdGNoT25seShKU0dsb2JhbERhCiAK
ICAgICBpZiAoIWhhc0NvZGUoKSkgewogICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBOb3RDb21w
aWxlZCk7Ci0gICAgICAgIGdsb2JhbERhdGEtPnJlZ0V4cENhY2hlKCktPmFkZFRvU3Ryb25nQ2Fj
aGUodGhpcyk7CisgICAgICAgIHZtLT5yZWdFeHBDYWNoZSgpLT5hZGRUb1N0cm9uZ0NhY2hlKHRo
aXMpOwogICAgICAgICBtX3N0YXRlID0gQnl0ZUNvZGU7CiAgICAgfQogCiAjaWYgRU5BQkxFKFlB
UlJfSklUKQotICAgIGlmICghcGF0dGVybi5tX2NvbnRhaW5zQmFja3JlZmVyZW5jZXMgJiYgZ2xv
YmFsRGF0YS0+Y2FuVXNlUmVnRXhwSklUKCkpIHsKLSAgICAgICAgWWFycjo6aml0Q29tcGlsZShw
YXR0ZXJuLCBjaGFyU2l6ZSwgZ2xvYmFsRGF0YSwgbV9yZWdFeHBKSVRDb2RlLCBZYXJyOjpNYXRj
aE9ubHkpOworICAgIGlmICghcGF0dGVybi5tX2NvbnRhaW5zQmFja3JlZmVyZW5jZXMgJiYgdm0t
PmNhblVzZVJlZ0V4cEpJVCgpKSB7CisgICAgICAgIFlhcnI6OmppdENvbXBpbGUocGF0dGVybiwg
Y2hhclNpemUsIHZtLCBtX3JlZ0V4cEpJVENvZGUsIFlhcnI6Ok1hdGNoT25seSk7CiAjaWYgRU5B
QkxFKFlBUlJfSklUX0RFQlVHKQogICAgICAgICBpZiAoIW1fcmVnRXhwSklUQ29kZS5pc0ZhbGxC
YWNrKCkpCiAgICAgICAgICAgICBtX3N0YXRlID0gSklUQ29kZTsKQEAgLTQxOSwxMCArNDE5LDEw
IEBAIHZvaWQgUmVnRXhwOjpjb21waWxlTWF0Y2hPbmx5KEpTR2xvYmFsRGEKICAgICBVTlVTRURf
UEFSQU0oY2hhclNpemUpOwogI2VuZGlmCiAKLSAgICBtX3JlZ0V4cEJ5dGVjb2RlID0gWWFycjo6
Ynl0ZUNvbXBpbGUocGF0dGVybiwgJmdsb2JhbERhdGEtPm1fcmVnRXhwQWxsb2NhdG9yKTsKKyAg
ICBtX3JlZ0V4cEJ5dGVjb2RlID0gWWFycjo6Ynl0ZUNvbXBpbGUocGF0dGVybiwgJnZtLT5tX3Jl
Z0V4cEFsbG9jYXRvcik7CiB9CiAKLXZvaWQgUmVnRXhwOjpjb21waWxlSWZOZWNlc3NhcnlNYXRj
aE9ubHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBZYXJyOjpZYXJyQ2hhclNpemUgY2hhclNp
emUpCit2b2lkIFJlZ0V4cDo6Y29tcGlsZUlmTmVjZXNzYXJ5TWF0Y2hPbmx5KFZNJiB2bSwgWWFy
cjo6WWFyckNoYXJTaXplIGNoYXJTaXplKQogewogICAgIGlmIChoYXNDb2RlKCkpIHsKICNpZiBF
TkFCTEUoWUFSUl9KSVQpCkBAIC00MzcsMTcgKzQzNywxNyBAQCB2b2lkIFJlZ0V4cDo6Y29tcGls
ZUlmTmVjZXNzYXJ5TWF0Y2hPbmx5CiAjZW5kaWYKICAgICB9CiAKLSAgICBjb21waWxlTWF0Y2hP
bmx5KCZnbG9iYWxEYXRhLCBjaGFyU2l6ZSk7CisgICAgY29tcGlsZU1hdGNoT25seSgmdm0sIGNo
YXJTaXplKTsKIH0KIAotTWF0Y2hSZXN1bHQgUmVnRXhwOjptYXRjaChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIGNvbnN0IFN0cmluZyYgcywgdW5zaWduZWQgc3RhcnRPZmZzZXQpCitNYXRjaFJl
c3VsdCBSZWdFeHA6Om1hdGNoKFZNJiB2bSwgY29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBzdGFy
dE9mZnNldCkKIHsKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCiAgICAgbV9ydE1hdGNoQ2Fs
bENvdW50Kys7CiAjZW5kaWYKIAogICAgIEFTU0VSVChtX3N0YXRlICE9IFBhcnNlRXJyb3IpOwot
ICAgIGNvbXBpbGVJZk5lY2Vzc2FyeU1hdGNoT25seShnbG9iYWxEYXRhLCBzLmlzOEJpdCgpID8g
WWFycjo6Q2hhcjggOiBZYXJyOjpDaGFyMTYpOworICAgIGNvbXBpbGVJZk5lY2Vzc2FyeU1hdGNo
T25seSh2bSwgcy5pczhCaXQoKSA/IFlhcnI6OkNoYXI4IDogWWFycjo6Q2hhcjE2KTsKIAogI2lm
IEVOQUJMRShZQVJSX0pJVCkKICAgICBpZiAobV9zdGF0ZSA9PSBKSVRDb2RlKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAkocmV2aXNpb24gMTQ4NjU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDcgKzM4LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgc3RydWN0IFJlZ0V4cFJlcHJl
c2VudGF0aW9uOwotICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKKyAgICBjbGFzcyBWTTsKIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIFJlZ0V4cEZsYWdzIHJlZ0V4cEZsYWdzKGNvbnN0IFN0cmluZyYp
OwogCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAg
ICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgUmVnRXhwKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgY29uc3QgU3RyaW5nJiBwYXR0ZXJuLCBS
ZWdFeHBGbGFncyk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWdFeHAqIGNy
ZWF0ZShWTSYsIGNvbnN0IFN0cmluZyYgcGF0dGVybiwgUmVnRXhwRmxhZ3MpOwogICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzSW1tb3J0YWxTdHJ1Y3R1cmUgPSB0cnVlOwogICAgICAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQ2VsbCopOwpAQCAtNjAsOCArNjAsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gIW1fY29uc3RydWN0aW9uRXJy
b3IgJiYgbV9mbGFncyAhPSBJbnZhbGlkRmxhZ3M7IH0KICAgICAgICAgY29uc3QgY2hhciogZXJy
b3JNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdHJ1Y3Rpb25FcnJvcjsgfQogCi0gICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGludCBtYXRjaChKU0dsb2JhbERhdGEmLCBjb25zdCBTdHJp
bmcmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgVmVjdG9yPGludCwgMzI+JiBvdmVjdG9yKTsKLSAg
ICAgICAgTWF0Y2hSZXN1bHQgbWF0Y2goSlNHbG9iYWxEYXRhJiwgY29uc3QgU3RyaW5nJiwgdW5z
aWduZWQgc3RhcnRPZmZzZXQpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBpbnQgbWF0Y2go
Vk0mLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgVmVjdG9yPGludCwgMzI+
JiBvdmVjdG9yKTsKKyAgICAgICAgTWF0Y2hSZXN1bHQgbWF0Y2goVk0mLCBjb25zdCBTdHJpbmcm
LCB1bnNpZ25lZCBzdGFydE9mZnNldCk7CiAgICAgICAgIHVuc2lnbmVkIG51bVN1YnBhdHRlcm5z
KCkgY29uc3QgeyByZXR1cm4gbV9udW1TdWJwYXR0ZXJuczsgfQogCiAgICAgICAgIGJvb2wgaGFz
Q29kZSgpCkBAIC03NSw5ICs3NSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHBy
aW50VHJhY2VEYXRhKCk7CiAjZW5kaWYKIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oTGVh
ZlR5cGUsIDApLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKExlYWZUeXBlLCAwKSwgJnNf
aW5mbyk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOwpAQCAtODUsMTMgKzg1LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBS
ZWdFeHBLZXkga2V5KCkgeyByZXR1cm4gUmVnRXhwS2V5KG1fZmxhZ3MsIG1fcGF0dGVyblN0cmlu
Zyk7IH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0ds
b2JhbERhdGEmKTsKKyAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIFJlZ0V4cENhY2hlOwotICAgICAgICBSZWdFeHAo
SlNHbG9iYWxEYXRhJiwgY29uc3QgU3RyaW5nJiwgUmVnRXhwRmxhZ3MpOworICAgICAgICBSZWdF
eHAoVk0mLCBjb25zdCBTdHJpbmcmLCBSZWdFeHBGbGFncyk7CiAKLSAgICAgICAgc3RhdGljIFJl
Z0V4cCogY3JlYXRlV2l0aG91dENhY2hpbmcoSlNHbG9iYWxEYXRhJiwgY29uc3QgU3RyaW5nJiwg
UmVnRXhwRmxhZ3MpOworICAgICAgICBzdGF0aWMgUmVnRXhwKiBjcmVhdGVXaXRob3V0Q2FjaGlu
ZyhWTSYsIGNvbnN0IFN0cmluZyYsIFJlZ0V4cEZsYWdzKTsKIAogICAgICAgICBlbnVtIFJlZ0V4
cFN0YXRlIHsKICAgICAgICAgICAgIFBhcnNlRXJyb3IsCkBAIC0xMDAsMTEgKzEwMCwxMSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIE5vdENvbXBpbGVkCiAgICAgICAgIH0gbV9zdGF0
ZTsKIAotICAgICAgICB2b2lkIGNvbXBpbGUoSlNHbG9iYWxEYXRhKiwgWWFycjo6WWFyckNoYXJT
aXplKTsKLSAgICAgICAgdm9pZCBjb21waWxlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiwgWWFy
cjo6WWFyckNoYXJTaXplKTsKKyAgICAgICAgdm9pZCBjb21waWxlKFZNKiwgWWFycjo6WWFyckNo
YXJTaXplKTsKKyAgICAgICAgdm9pZCBjb21waWxlSWZOZWNlc3NhcnkoVk0mLCBZYXJyOjpZYXJy
Q2hhclNpemUpOwogCi0gICAgICAgIHZvaWQgY29tcGlsZU1hdGNoT25seShKU0dsb2JhbERhdGEq
LCBZYXJyOjpZYXJyQ2hhclNpemUpOwotICAgICAgICB2b2lkIGNvbXBpbGVJZk5lY2Vzc2FyeU1h
dGNoT25seShKU0dsb2JhbERhdGEmLCBZYXJyOjpZYXJyQ2hhclNpemUpOworICAgICAgICB2b2lk
IGNvbXBpbGVNYXRjaE9ubHkoVk0qLCBZYXJyOjpZYXJyQ2hhclNpemUpOworICAgICAgICB2b2lk
IGNvbXBpbGVJZk5lY2Vzc2FyeU1hdGNoT25seShWTSYsIFlhcnI6OllhcnJDaGFyU2l6ZSk7CiAK
ICNpZiBFTkFCTEUoWUFSUl9KSVRfREVCVUcpCiAgICAgICAgIHZvaWQgbWF0Y2hDb21wYXJlV2l0
aEludGVycHJldGVyKGNvbnN0IFN0cmluZyYsIGludCBzdGFydE9mZnNldCwgaW50KiBvZmZzZXRW
ZWN0b3IsIGludCBqaXRSZXN1bHQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cENhY2hlLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwx
OCArNDEsMTggQEAgUmVnRXhwKiBSZWdFeHBDYWNoZTo6bG9va3VwT3JDcmVhdGUoY29ucwogICAg
IGlmIChSZWdFeHAqIHJlZ0V4cCA9IG1fd2Vha0NhY2hlLmdldChrZXkpKQogICAgICAgICByZXR1
cm4gcmVnRXhwOwogCi0gICAgUmVnRXhwKiByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZVdpdGhvdXRD
YWNoaW5nKCptX2dsb2JhbERhdGEsIHBhdHRlcm5TdHJpbmcsIGZsYWdzKTsKKyAgICBSZWdFeHAq
IHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlV2l0aG91dENhY2hpbmcoKm1fdm0sIHBhdHRlcm5TdHJp
bmcsIGZsYWdzKTsKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCi0gICAgbV9nbG9iYWxEYXRh
LT5hZGRSZWdFeHBUb1RyYWNlKHJlZ0V4cCk7CisgICAgbV92bS0+YWRkUmVnRXhwVG9UcmFjZShy
ZWdFeHApOwogI2VuZGlmCiAKICAgICB3ZWFrQWRkKG1fd2Vha0NhY2hlLCBrZXksIFBhc3NXZWFr
PFJlZ0V4cD4ocmVnRXhwLCB0aGlzKSk7CiAgICAgcmV0dXJuIHJlZ0V4cDsKIH0KIAotUmVnRXhw
Q2FjaGU6OlJlZ0V4cENhY2hlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK1JlZ0V4cENhY2hl
OjpSZWdFeHBDYWNoZShWTSogdm0pCiAgICAgOiBtX25leHRFbnRyeUluU3Ryb25nQ2FjaGUoMCkK
LSAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorICAgICwgbV92bSh2bSkKIHsKIH0KIApA
QCAtNjgsNyArNjgsNyBAQCB2b2lkIFJlZ0V4cENhY2hlOjphZGRUb1N0cm9uZ0NhY2hlKFJlZ0V4
CiAgICAgU3RyaW5nIHBhdHRlcm4gPSByZWdFeHAtPnBhdHRlcm4oKTsKICAgICBpZiAocGF0dGVy
bi5sZW5ndGgoKSA+IG1heFN0cm9uZ0NhY2hlYWJsZVBhdHRlcm5MZW5ndGgpCiAgICAgICAgIHJl
dHVybjsKLSAgICBtX3N0cm9uZ0NhY2hlW21fbmV4dEVudHJ5SW5TdHJvbmdDYWNoZV0uc2V0KCpt
X2dsb2JhbERhdGEsIHJlZ0V4cCk7CisgICAgbV9zdHJvbmdDYWNoZVttX25leHRFbnRyeUluU3Ry
b25nQ2FjaGVdLnNldCgqbV92bSwgcmVnRXhwKTsKICAgICBtX25leHRFbnRyeUluU3Ryb25nQ2Fj
aGUrKzsKICAgICBpZiAobV9uZXh0RW50cnlJblN0cm9uZ0NhY2hlID09IG1heFN0cm9uZ0NhY2hl
YWJsZUVudHJpZXMpCiAgICAgICAgIG1fbmV4dEVudHJ5SW5TdHJvbmdDYWNoZSA9IDA7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmgJKHJldmlzaW9u
IDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgZnJpZW5kIGNsYXNzIFJlZ0V4cDsKIHR5
cGVkZWYgSGFzaE1hcDxSZWdFeHBLZXksIFdlYWs8UmVnRXhwPiA+IFJlZ0V4cENhY2hlTWFwOwog
CiBwdWJsaWM6Ci0gICAgUmVnRXhwQ2FjaGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKTsKKyAg
ICBSZWdFeHBDYWNoZShWTSogdm0pOwogICAgIHZvaWQgaW52YWxpZGF0ZUNvZGUoKTsKIAogcHJp
dmF0ZToKQEAgLTU5LDcgKzU5LDcgQEAgcHJpdmF0ZToKICAgICBSZWdFeHBDYWNoZU1hcCBtX3dl
YWtDYWNoZTsgLy8gSG9sZHMgYWxsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgY3VycmVudGx5IGxpdmUu
CiAgICAgaW50IG1fbmV4dEVudHJ5SW5TdHJvbmdDYWNoZTsKICAgICBXVEY6OkZpeGVkQXJyYXk8
U3Ryb25nPFJlZ0V4cD4sIG1heFN0cm9uZ0NhY2hlYWJsZUVudHJpZXM+IG1fc3Ryb25nQ2FjaGU7
IC8vIEhvbGRzIGEgc2VsZWN0IGZldyByZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgaGF2ZSBjb21w
aWxlZCBhbmQgZXhlY3V0ZWQKLSAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKKyAgICBW
TSogbV92bTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuY3BwCShyZXZpc2lv
biAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRS
ZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw4IEBAIHZvaWQgUmVnRXhwQ2Fj
aGVkUmVzdWx0Ojp2aXNpdENoaWxkcmVuKFMKIFJlZ0V4cE1hdGNoZXNBcnJheSogUmVnRXhwQ2Fj
aGVkUmVzdWx0OjpsYXN0UmVzdWx0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG93bmVyKQog
ewogICAgIGlmIChtX3Jlc3VsdCkgewotICAgICAgICBtX3JlaWZpZWRJbnB1dC5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBvd25lciwgbV9sYXN0SW5wdXQuZ2V0KCkpOwotICAgICAgICBtX3JlaWZp
ZWRSZXN1bHQuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgb3duZXIsIFJlZ0V4cE1hdGNoZXNBcnJh
eTo6Y3JlYXRlKGV4ZWMsIG1fbGFzdElucHV0LmdldCgpLCBtX2xhc3RSZWdFeHAuZ2V0KCksIG1f
cmVzdWx0KSk7CisgICAgICAgIG1fcmVpZmllZElucHV0LnNldChleGVjLT52bSgpLCBvd25lciwg
bV9sYXN0SW5wdXQuZ2V0KCkpOworICAgICAgICBtX3JlaWZpZWRSZXN1bHQuc2V0KGV4ZWMtPnZt
KCksIG93bmVyLCBSZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZShleGVjLCBtX2xhc3RJbnB1dC5n
ZXQoKSwgbV9sYXN0UmVnRXhwLmdldCgpLCBtX3Jlc3VsdCkpOwogICAgICAgICBtX3Jlc3VsdCA9
IE1hdGNoUmVzdWx0OjpmYWlsZWQoKTsKICAgICB9CiAgICAgcmV0dXJuIG1fcmVpZmllZFJlc3Vs
dC5nZXQoKTsKQEAgLTU0LDcgKzU0LDcgQEAgdm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6OnNldElu
cHV0KEV4ZWNTdAogICAgIC8vIE1ha2Ugc3VyZSB3ZSdyZSByZWlmaWVkLCBvdGhlcndpc2UgbV9y
ZWlmaWVkSW5wdXQgd2lsbCBiZSBpZ25vcmVkLgogICAgIGxhc3RSZXN1bHQoZXhlYywgb3duZXIp
OwogICAgIEFTU0VSVCghbV9yZXN1bHQpOwotICAgIG1fcmVpZmllZElucHV0LnNldChleGVjLT5n
bG9iYWxEYXRhKCksIG93bmVyLCBpbnB1dCk7CisgICAgbV9yZWlmaWVkSW5wdXQuc2V0KGV4ZWMt
PnZtKCksIG93bmVyLCBpbnB1dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmgJ
KHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cENhY2hlZFJlc3VsdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxNyArNDQsMTcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgLy8gbV9yZWlmaWVkUmVzdWx0IGFuZCBtX3JlaWZpZWRJbnB1dCBob2xk
IHRoZSBjYWNoZWQgcmVzdWx0cy4KICAgICBjbGFzcyBSZWdFeHBDYWNoZWRSZXN1bHQgewogICAg
IHB1YmxpYzoKLSAgICAgICAgUmVnRXhwQ2FjaGVkUmVzdWx0KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNPYmplY3QqIG93bmVyLCBSZWdFeHAqIGVtcHR5UmVnRXhwKQorICAgICAgICBSZWdF
eHBDYWNoZWRSZXN1bHQoVk0mIHZtLCBKU09iamVjdCogb3duZXIsIFJlZ0V4cCogZW1wdHlSZWdF
eHApCiAgICAgICAgICAgICA6IG1fcmVzdWx0KDAsIDApCiAgICAgICAgIHsKLSAgICAgICAgICAg
IG1fbGFzdElucHV0LnNldChnbG9iYWxEYXRhLCBvd25lciwganNFbXB0eVN0cmluZygmZ2xvYmFs
RGF0YSkpOwotICAgICAgICAgICAgbV9sYXN0UmVnRXhwLnNldChnbG9iYWxEYXRhLCBvd25lciwg
ZW1wdHlSZWdFeHApOworICAgICAgICAgICAgbV9sYXN0SW5wdXQuc2V0KHZtLCBvd25lciwganNF
bXB0eVN0cmluZygmdm0pKTsKKyAgICAgICAgICAgIG1fbGFzdFJlZ0V4cC5zZXQodm0sIG93bmVy
LCBlbXB0eVJlZ0V4cCk7CiAgICAgICAgIH0KIAotICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
cmVjb3JkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNPYmplY3QqIG93bmVyLCBSZWdFeHAq
IHJlZ0V4cCwgSlNTdHJpbmcqIGlucHV0LCBNYXRjaFJlc3VsdCByZXN1bHQpCisgICAgICAgIEFM
V0FZU19JTkxJTkUgdm9pZCByZWNvcmQoVk0mIHZtLCBKU09iamVjdCogb3duZXIsIFJlZ0V4cCog
cmVnRXhwLCBKU1N0cmluZyogaW5wdXQsIE1hdGNoUmVzdWx0IHJlc3VsdCkKICAgICAgICAgewot
ICAgICAgICAgICAgbV9sYXN0UmVnRXhwLnNldChnbG9iYWxEYXRhLCBvd25lciwgcmVnRXhwKTsK
LSAgICAgICAgICAgIG1fbGFzdElucHV0LnNldChnbG9iYWxEYXRhLCBvd25lciwgaW5wdXQpOwor
ICAgICAgICAgICAgbV9sYXN0UmVnRXhwLnNldCh2bSwgb3duZXIsIHJlZ0V4cCk7CisgICAgICAg
ICAgICBtX2xhc3RJbnB1dC5zZXQodm0sIG93bmVyLCBpbnB1dCk7CiAgICAgICAgICAgICBtX3Jl
c3VsdCA9IHJlc3VsdDsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxNDg2NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg0LDIxICs4NCwyMSBAQCBjb25zdCBDbGFzc0luZm8gUmVnRXhw
Q29uc3RydWN0b3I6OnNfaW5mCiAKIFJlZ0V4cENvbnN0cnVjdG9yOjpSZWdFeHBDb25zdHJ1Y3Rv
cihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVn
RXhwUHJvdG90eXBlKiByZWdFeHBQcm90b3R5cGUpCiAgICAgOiBJbnRlcm5hbEZ1bmN0aW9uKGds
b2JhbE9iamVjdCwgc3RydWN0dXJlKQotICAgICwgbV9jYWNoZWRSZXN1bHQoZ2xvYmFsT2JqZWN0
LT5nbG9iYWxEYXRhKCksIHRoaXMsIHJlZ0V4cFByb3RvdHlwZS0+cmVnRXhwKCkpCisgICAgLCBt
X2NhY2hlZFJlc3VsdChnbG9iYWxPYmplY3QtPnZtKCksIHRoaXMsIHJlZ0V4cFByb3RvdHlwZS0+
cmVnRXhwKCkpCiAgICAgLCBtX211bHRpbGluZShmYWxzZSkKIHsKIH0KIAogdm9pZCBSZWdFeHBD
b25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBSZWdFeHBQcm90b3R5
cGUqIHJlZ0V4cFByb3RvdHlwZSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5n
bG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgIlJlZ0V4cCIpLnN0cmluZygpKTsKKyAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJSZWdFeHAi
KS5zdHJpbmcoKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIAogICAgIC8vIEVD
TUEgMTUuMTAuNS4xIFJlZ0V4cC5wcm90b3R5cGUKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUs
IHJlZ0V4cFByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUsIHJlZ0V4cFByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwg
UmVhZE9ubHkpOwogCiAgICAgLy8gbm8uIG9mIGFyZ3VtZW50cyBmb3IgY29uc3RydWN0b3IKLSAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDIpLCBSZWFkT25seSB8IERvbnREZWxldGUg
fCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMiksIFJlYWRPbmx5IHwgRG9u
dERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KIAogdm9pZCBSZWdFeHBDb25zdHJ1Y3Rvcjo6ZGVzdHJv
eShKU0NlbGwqIGNlbGwpCkBAIC0yODMsNyArMjgzLDcgQEAgSlNPYmplY3QqIGNvbnN0cnVjdFJl
Z0V4cChFeGVjU3RhdGUqIGV4ZQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
Y3JlYXRlU3ludGF4RXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJJbnZhbGlkIGZsYWdzIHN1cHBs
aWVkIHRvIFJlZ0V4cCBjb25zdHJ1Y3Rvci4iKSkpOwogICAgIH0KIAotICAgIFJlZ0V4cCogcmVn
RXhwID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwYXR0ZXJuLCBmbGFncyk7
CisgICAgUmVnRXhwKiByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShleGVjLT52bSgpLCBwYXR0ZXJu
LCBmbGFncyk7CiAgICAgaWYgKCFyZWdFeHAtPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgcmVnRXhwLT5lcnJvck1lc3Nh
Z2UoKSkpOwogICAgIHJldHVybiBSZWdFeHBPYmplY3Q6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCksIGdsb2JhbE9iamVjdC0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4
cCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENv
bnN0cnVjdG9yLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7CiAgICAg
ICAgIH0KIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRh
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9pZCBwdXQo
SlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmKTsKQEAgLTU1LDggKzU1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGlj
IGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICAgICAgTWF0Y2hSZXN1bHQgcGVyZm9ybU1h
dGNoKEpTR2xvYmFsRGF0YSYsIFJlZ0V4cCosIEpTU3RyaW5nKiwgY29uc3QgU3RyaW5nJiwgaW50
IHN0YXJ0T2Zmc2V0LCBpbnQqKiBvdmVjdG9yKTsKLSAgICAgICAgTWF0Y2hSZXN1bHQgcGVyZm9y
bU1hdGNoKEpTR2xvYmFsRGF0YSYsIFJlZ0V4cCosIEpTU3RyaW5nKiwgY29uc3QgU3RyaW5nJiwg
aW50IHN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgTWF0Y2hSZXN1bHQgcGVyZm9ybU1hdGNoKFZNJiwg
UmVnRXhwKiwgSlNTdHJpbmcqLCBjb25zdCBTdHJpbmcmLCBpbnQgc3RhcnRPZmZzZXQsIGludCoq
IG92ZWN0b3IpOworICAgICAgICBNYXRjaFJlc3VsdCBwZXJmb3JtTWF0Y2goVk0mLCBSZWdFeHAq
LCBKU1N0cmluZyosIGNvbnN0IFN0cmluZyYsIGludCBzdGFydE9mZnNldCk7CiAKICAgICAgICAg
dm9pZCBzZXRNdWx0aWxpbmUoYm9vbCBtdWx0aWxpbmUpIHsgbV9tdWx0aWxpbmUgPSBtdWx0aWxp
bmU7IH0KICAgICAgICAgYm9vbCBtdWx0aWxpbmUoKSBjb25zdCB7IHJldHVybiBtX211bHRpbGlu
ZTsgfQpAQCAtMTAxLDkgKzEwMSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgZXhwcmVzc2lv
biBtYXRjaGluZyB0aHJvdWdoIHRoZSBwZXJmb3JtTWF0Y2ggZnVuY3Rpb24uIFdlIHVzZSBjYWNo
ZWQgcmVzdWx0cyB0byBjYWxjdWxhdGUsIAogICAgICAgZS5nLiwgUmVnRXhwLmxhc3RNYXRjaCBh
bmQgUmVnRXhwLmxlZnRQYXJlbi4KICAgICAqLwotICAgIEFMV0FZU19JTkxJTkUgTWF0Y2hSZXN1
bHQgUmVnRXhwQ29uc3RydWN0b3I6OnBlcmZvcm1NYXRjaChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFJlZ0V4cCogcmVnRXhwLCBKU1N0cmluZyogc3RyaW5nLCBjb25zdCBTdHJpbmcmIGlucHV0
LCBpbnQgc3RhcnRPZmZzZXQsIGludCoqIG92ZWN0b3IpCisgICAgQUxXQVlTX0lOTElORSBNYXRj
aFJlc3VsdCBSZWdFeHBDb25zdHJ1Y3Rvcjo6cGVyZm9ybU1hdGNoKFZNJiB2bSwgUmVnRXhwKiBy
ZWdFeHAsIEpTU3RyaW5nKiBzdHJpbmcsIGNvbnN0IFN0cmluZyYgaW5wdXQsIGludCBzdGFydE9m
ZnNldCwgaW50Kiogb3ZlY3RvcikKICAgICB7Ci0gICAgICAgIGludCBwb3NpdGlvbiA9IHJlZ0V4
cC0+bWF0Y2goZ2xvYmFsRGF0YSwgaW5wdXQsIHN0YXJ0T2Zmc2V0LCBtX292ZWN0b3IpOworICAg
ICAgICBpbnQgcG9zaXRpb24gPSByZWdFeHAtPm1hdGNoKHZtLCBpbnB1dCwgc3RhcnRPZmZzZXQs
IG1fb3ZlY3Rvcik7CiAKICAgICAgICAgaWYgKG92ZWN0b3IpCiAgICAgICAgICAgICAqb3ZlY3Rv
ciA9IG1fb3ZlY3Rvci5kYXRhKCk7CkBAIC0xMTYsMTUgKzExNiwxNSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgQVNTRVJUKG1fb3ZlY3RvclsxXSA+PSBwb3NpdGlvbik7CiAgICAgICAgIHNp
emVfdCBlbmQgPSBtX292ZWN0b3JbMV07CiAKLSAgICAgICAgbV9jYWNoZWRSZXN1bHQucmVjb3Jk
KGdsb2JhbERhdGEsIHRoaXMsIHJlZ0V4cCwgc3RyaW5nLCBNYXRjaFJlc3VsdChwb3NpdGlvbiwg
ZW5kKSk7CisgICAgICAgIG1fY2FjaGVkUmVzdWx0LnJlY29yZCh2bSwgdGhpcywgcmVnRXhwLCBz
dHJpbmcsIE1hdGNoUmVzdWx0KHBvc2l0aW9uLCBlbmQpKTsKIAogICAgICAgICByZXR1cm4gTWF0
Y2hSZXN1bHQocG9zaXRpb24sIGVuZCk7CiAgICAgfQotICAgIEFMV0FZU19JTkxJTkUgTWF0Y2hS
ZXN1bHQgUmVnRXhwQ29uc3RydWN0b3I6OnBlcmZvcm1NYXRjaChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFJlZ0V4cCogcmVnRXhwLCBKU1N0cmluZyogc3RyaW5nLCBjb25zdCBTdHJpbmcmIGlu
cHV0LCBpbnQgc3RhcnRPZmZzZXQpCisgICAgQUxXQVlTX0lOTElORSBNYXRjaFJlc3VsdCBSZWdF
eHBDb25zdHJ1Y3Rvcjo6cGVyZm9ybU1hdGNoKFZNJiB2bSwgUmVnRXhwKiByZWdFeHAsIEpTU3Ry
aW5nKiBzdHJpbmcsIGNvbnN0IFN0cmluZyYgaW5wdXQsIGludCBzdGFydE9mZnNldCkKICAgICB7
Ci0gICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IHJlZ0V4cC0+bWF0Y2goZ2xvYmFsRGF0YSwg
aW5wdXQsIHN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gcmVnRXhw
LT5tYXRjaCh2bSwgaW5wdXQsIHN0YXJ0T2Zmc2V0KTsKICAgICAgICAgaWYgKHJlc3VsdCkKLSAg
ICAgICAgICAgIG1fY2FjaGVkUmVzdWx0LnJlY29yZChnbG9iYWxEYXRhLCB0aGlzLCByZWdFeHAs
IHN0cmluZywgcmVzdWx0KTsKKyAgICAgICAgICAgIG1fY2FjaGVkUmVzdWx0LnJlY29yZCh2bSwg
dGhpcywgcmVnRXhwLCBzdHJpbmcsIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVz
QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cE1hdGNoZXNBcnJheS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDI4ICszMywyOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIFJlZ0V4
cE1hdGNoZXNBcnJheTo6c19pbmZvID0geyJBcnJheSIsICZKU0FycmF5OjpzX2luZm8sIDAsIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoUmVnRXhwTWF0Y2hlc0FycmF5KX07CiAKLVJlZ0V4cE1hdGNo
ZXNBcnJheTo6UmVnRXhwTWF0Y2hlc0FycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQnV0
dGVyZmx5KiBidXR0ZXJmbHksIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5n
KiBpbnB1dCwgUmVnRXhwKiByZWdFeHAsIE1hdGNoUmVzdWx0IHJlc3VsdCkKLSAgICA6IEpTQXJy
YXkoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUo
KSwgYnV0dGVyZmx5KQorUmVnRXhwTWF0Y2hlc0FycmF5OjpSZWdFeHBNYXRjaGVzQXJyYXkoVk0m
IHZtLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNTdHJpbmcqIGlucHV0LCBSZWdFeHAqIHJlZ0V4cCwgTWF0Y2hSZXN1bHQgcmVzdWx0KQorICAg
IDogSlNBcnJheSh2bSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUo
KSwgYnV0dGVyZmx5KQogICAgICwgbV9yZXN1bHQocmVzdWx0KQogICAgICwgbV9zdGF0ZShSZWlm
aWVkTm9uZSkKIHsKLSAgICBtX2lucHV0LnNldChnbG9iYWxEYXRhLCB0aGlzLCBpbnB1dCk7Ci0g
ICAgbV9yZWdFeHAuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHJlZ0V4cCk7CisgICAgbV9pbnB1dC5z
ZXQodm0sIHRoaXMsIGlucHV0KTsKKyAgICBtX3JlZ0V4cC5zZXQodm0sIHRoaXMsIHJlZ0V4cCk7
CiB9CiAKIFJlZ0V4cE1hdGNoZXNBcnJheSogUmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVhdGUoRXhl
Y1N0YXRlKiBleGVjLCBKU1N0cmluZyogaW5wdXQsIFJlZ0V4cCogcmVnRXhwLCBNYXRjaFJlc3Vs
dCByZXN1bHQpCiB7CiAgICAgQVNTRVJUKHJlc3VsdCk7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0g
Y3JlYXRlQXJyYXlCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgcmVnRXhwLT5udW1TdWJwYXR0ZXJucygp
ICsgMSk7Ci0gICAgUmVnRXhwTWF0Y2hlc0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPFJlZ0V4cE1hdGNoZXNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgUmVnRXhwTWF0
Y2hlc0FycmF5KGdsb2JhbERhdGEsIGJ1dHRlcmZseSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLCBpbnB1dCwgcmVnRXhwLCByZXN1bHQpOwotICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihn
bG9iYWxEYXRhKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJmbHkodm0sIHJlZ0V4cC0+bnVtU3VicGF0dGVybnMo
KSArIDEpOworICAgIFJlZ0V4cE1hdGNoZXNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxSZWdFeHBNYXRjaGVzQXJyYXk+KHZtLmhlYXApKSBSZWdFeHBNYXRjaGVzQXJy
YXkodm0sIGJ1dHRlcmZseSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBpbnB1dCwgcmVn
RXhwLCByZXN1bHQpOworICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0dXJu
IGFycmF5OwogfQogCi12b2lkIFJlZ0V4cE1hdGNoZXNBcnJheTo6ZmluaXNoQ3JlYXRpb24oSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBSZWdFeHBNYXRjaGVzQXJyYXk6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsK
KyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9CiAKIHZvaWQgUmVnRXhwTWF0Y2hlc0Fy
cmF5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBA
IC03OCw3ICs3OCw3IEBAIHZvaWQgUmVnRXhwTWF0Y2hlc0FycmF5OjpyZWlmeUFsbFByb3BlcnQK
IAogICAgIGlmICh1bnNpZ25lZCBudW1TdWJwYXR0ZXJucyA9IG1fcmVnRXhwLT5udW1TdWJwYXR0
ZXJucygpKSB7CiAgICAgICAgIFZlY3RvcjxpbnQsIDMyPiBzdWJwYXR0ZXJuUmVzdWx0czsKLSAg
ICAgICAgaW50IHBvc2l0aW9uID0gbV9yZWdFeHAtPm1hdGNoKGV4ZWMtPmdsb2JhbERhdGEoKSwg
bV9pbnB1dC0+dmFsdWUoZXhlYyksIG1fcmVzdWx0LnN0YXJ0LCBzdWJwYXR0ZXJuUmVzdWx0cyk7
CisgICAgICAgIGludCBwb3NpdGlvbiA9IG1fcmVnRXhwLT5tYXRjaChleGVjLT52bSgpLCBtX2lu
cHV0LT52YWx1ZShleGVjKSwgbV9yZXN1bHQuc3RhcnQsIHN1YnBhdHRlcm5SZXN1bHRzKTsKICAg
ICAgICAgQVNTRVJUX1VOVVNFRChwb3NpdGlvbiwgcG9zaXRpb24gPj0gMCAmJiBzdGF0aWNfY2Fz
dDxzaXplX3Q+KHBvc2l0aW9uKSA9PSBtX3Jlc3VsdC5zdGFydCk7CiAgICAgICAgIEFTU0VSVCht
X3Jlc3VsdC5zdGFydCA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHN1YnBhdHRlcm5SZXN1bHRzWzBd
KSk7CiAgICAgICAgIEFTU0VSVChtX3Jlc3VsdC5lbmQgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihz
dWJwYXR0ZXJuUmVzdWx0c1sxXSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUmVn
RXhwTWF0Y2hlc0FycmF5IDogcHVibGljIEpTQXJyYXkgewogICAgIHByaXZhdGU6Ci0gICAgICAg
IFJlZ0V4cE1hdGNoZXNBcnJheShKU0dsb2JhbERhdGEmLCBCdXR0ZXJmbHkqLCBKU0dsb2JhbE9i
amVjdCosIEpTU3RyaW5nKiwgUmVnRXhwKiwgTWF0Y2hSZXN1bHQpOworICAgICAgICBSZWdFeHBN
YXRjaGVzQXJyYXkoVk0mLCBCdXR0ZXJmbHkqLCBKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKiwg
UmVnRXhwKiwgTWF0Y2hSZXN1bHQpOwogCiAgICAgICAgIGVudW0gUmVpZmllZFN0YXRlIHsgUmVp
ZmllZE5vbmUsIFJlaWZpZWRNYXRjaCwgUmVpZmllZEFsbCB9OwogCkBAIC00MiwxNSArNDIsMTUg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2lu
Zm87CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbywgQXJyYXlXaXRoQXJyYXlTdG9yYWdlKTsKKyAgICAgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOwogCiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVy
cmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNp
b24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsOCArNjQsOCBAQCBjb25zdCBDbGFzc0luZm8gUmVn
RXhwT2JqZWN0OjpzX2luZm8gPSB7CiAqLwogCiBSZWdFeHBPYmplY3Q6OlJlZ0V4cE9iamVjdChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVnRXhw
KiByZWdFeHApCi0gICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0
YSgpLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX3JlZ0V4cChnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEo
KSwgdGhpcywgcmVnRXhwKQorICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxPYmplY3QtPnZt
KCksIHN0cnVjdHVyZSkKKyAgICAsIG1fcmVnRXhwKGdsb2JhbE9iamVjdC0+dm0oKSwgdGhpcywg
cmVnRXhwKQogICAgICwgbV9sYXN0SW5kZXhJc1dyaXRhYmxlKHRydWUpCiB7CiAgICAgbV9sYXN0
SW5kZXguc2V0V2l0aG91dFdyaXRlQmFycmllcihqc051bWJlcigwKSk7CkBAIC03Myw3ICs3Myw3
IEBAIFJlZ0V4cE9iamVjdDo6UmVnRXhwT2JqZWN0KEpTR2xvYmFsT2JqZWMKIAogdm9pZCBSZWdF
eHBPYmplY3Q6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7
Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpOwor
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CiAgICAgQVNTRVJU
KGluaGVyaXRzKCZzX2luZm8pKTsKIH0KIApAQCAtMzE1LDkgKzMxNSw5IEBAIE1hdGNoUmVzdWx0
IFJlZ0V4cE9iamVjdDo6bWF0Y2goRXhlY1N0YXQKICAgICBSZWdFeHAqIHJlZ0V4cCA9IHRoaXMt
PnJlZ0V4cCgpOwogICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9IGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0b3IoKTsKICAgICBTdHJp
bmcgaW5wdXQgPSBzdHJpbmctPnZhbHVlKGV4ZWMpOwotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGlmICghcmVnRXhwLT5nbG9iYWwoKSkKLSAgICAgICAgcmV0dXJuIHJlZ0V4cENvbnN0cnVjdG9y
LT5wZXJmb3JtTWF0Y2goZ2xvYmFsRGF0YSwgcmVnRXhwLCBzdHJpbmcsIGlucHV0LCAwKTsKKyAg
ICAgICAgcmV0dXJuIHJlZ0V4cENvbnN0cnVjdG9yLT5wZXJmb3JtTWF0Y2godm0sIHJlZ0V4cCwg
c3RyaW5nLCBpbnB1dCwgMCk7CiAKICAgICBKU1ZhbHVlIGpzTGFzdEluZGV4ID0gZ2V0TGFzdElu
ZGV4KCk7CiAgICAgdW5zaWduZWQgbGFzdEluZGV4OwpAQCAtMzM2LDcgKzMzNiw3IEBAIE1hdGNo
UmVzdWx0IFJlZ0V4cE9iamVjdDo6bWF0Y2goRXhlY1N0YXQKICAgICAgICAgbGFzdEluZGV4ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRvdWJsZUxhc3RJbmRleCk7CiAgICAgfQogCi0gICAgTWF0
Y2hSZXN1bHQgcmVzdWx0ID0gcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRjaChnbG9iYWxE
YXRhLCByZWdFeHAsIHN0cmluZywgaW5wdXQsIGxhc3RJbmRleCk7CisgICAgTWF0Y2hSZXN1bHQg
cmVzdWx0ID0gcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRjaCh2bSwgcmVnRXhwLCBzdHJp
bmcsIGlucHV0LCBsYXN0SW5kZXgpOwogICAgIHNldExhc3RJbmRleChleGVjLCByZXN1bHQuZW5k
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywx
NCArMzcsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0Owog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgUmVnRXhwT2JqZWN0KiBjcmVhdGUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVnRXhwKiByZWdFeHApCisgICAgICAgIHN0YXRpYyBSZWdF
eHBPYmplY3QqIGNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBSZWdFeHAqIHJlZ0V4cCkKICAgICAgICAgewotICAgICAgICAg
ICAgUmVnRXhwT2JqZWN0KiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxSZWdF
eHBPYmplY3Q+KGdsb2JhbERhdGEuaGVhcCkpIFJlZ0V4cE9iamVjdChnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSwgcmVnRXhwKTsKKyAgICAgICAgICAgIFJlZ0V4cE9iamVjdCogb2JqZWN0ID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UmVnRXhwT2JqZWN0Pih2bS5oZWFwKSkgUmVnRXhwT2Jq
ZWN0KGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCByZWdFeHApOwogICAgICAgICAgICAgb2JqZWN0
LT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgcmV0dXJuIG9iamVj
dDsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0UmVnRXhwKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgUmVnRXhwKiByKSB7IG1fcmVnRXhwLnNldChnbG9iYWxEYXRhLCB0aGlzLCByKTsg
fQorICAgICAgICB2b2lkIHNldFJlZ0V4cChWTSYgdm0sIFJlZ0V4cCogcikgeyBtX3JlZ0V4cC5z
ZXQodm0sIHRoaXMsIHIpOyB9CiAgICAgICAgIFJlZ0V4cCogcmVnRXhwKCkgY29uc3QgeyByZXR1
cm4gbV9yZWdFeHAuZ2V0KCk7IH0KIAogICAgICAgICB2b2lkIHNldExhc3RJbmRleChFeGVjU3Rh
dGUqIGV4ZWMsIHNpemVfdCBsYXN0SW5kZXgpCkBAIC01OCw3ICs1OCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIHNldExhc3RJbmRleChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
bGFzdEluZGV4LCBib29sIHNob3VsZFRocm93KQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAo
TElLRUxZKG1fbGFzdEluZGV4SXNXcml0YWJsZSkpCi0gICAgICAgICAgICAgICAgbV9sYXN0SW5k
ZXguc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbGFzdEluZGV4KTsKKyAgICAgICAgICAg
ICAgICBtX2xhc3RJbmRleC5zZXQoZXhlYy0+dm0oKSwgdGhpcywgbGFzdEluZGV4KTsKICAgICAg
ICAgICAgIGVsc2UgaWYgKHNob3VsZFRocm93KQogICAgICAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CiAgICAgICAg
IH0KQEAgLTc2LDkgKzc2LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIEpT
X0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAg
IH0KIAogICAgIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTIwLDEzICsxMjAsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdF
eHBQcm90bwogICAgICAgICAgICAgaWYgKGZsYWdzID09IEludmFsaWRGbGFncykKICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMs
IEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBmbGFncyBzdXBwbGllZCB0byBSZWdFeHAgY29uc3RydWN0
b3IuIikpKTsKICAgICAgICAgfQotICAgICAgICByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShleGVj
LT5nbG9iYWxEYXRhKCksIHBhdHRlcm4sIGZsYWdzKTsKKyAgICAgICAgcmVnRXhwID0gUmVnRXhw
OjpjcmVhdGUoZXhlYy0+dm0oKSwgcGF0dGVybiwgZmxhZ3MpOwogICAgIH0KIAogICAgIGlmICgh
cmVnRXhwLT5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3Jl
YXRlU3ludGF4RXJyb3IoZXhlYywgcmVnRXhwLT5lcnJvck1lc3NhZ2UoKSkpOwogCi0gICAgYXNS
ZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+c2V0UmVnRXhwKGV4ZWMtPmdsb2JhbERhdGEoKSwgcmVn
RXhwKTsKKyAgICBhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5zZXRSZWdFeHAoZXhlYy0+dm0o
KSwgcmVnRXhwKTsKICAgICBhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5zZXRMYXN0SW5kZXgo
ZXhlYywgMCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlw
ZS5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzksOSArMzksOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZv
OwogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQorICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCShyZXZpc2lvbiAx
NDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMCArODEsMTAgQEAgU21hbGxTdHJpbmdzOjpTbWFsbFN0
cmluZ3MoKQogICAgICAgICBtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbaV0gPSAwOwogfQogCi12
b2lkIFNtYWxsU3RyaW5nczo6aW5pdGlhbGl6ZUNvbW1vblN0cmluZ3MoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQordm9pZCBTbWFsbFN0cmluZ3M6OmluaXRpYWxpemVDb21tb25TdHJpbmdzKFZN
JiB2bSkKIHsKLSAgICBjcmVhdGVFbXB0eVN0cmluZygmZ2xvYmFsRGF0YSk7Ci0jZGVmaW5lIEpT
Q19DT01NT05fU1RSSU5HU19BVFRSSUJVVEVfSU5JVElBTElaRShuYW1lKSBpbml0aWFsaXplKCZn
bG9iYWxEYXRhLCBtXyMjbmFtZSwgI25hbWUpOworICAgIGNyZWF0ZUVtcHR5U3RyaW5nKCZ2bSk7
CisjZGVmaW5lIEpTQ19DT01NT05fU1RSSU5HU19BVFRSSUJVVEVfSU5JVElBTElaRShuYW1lKSBp
bml0aWFsaXplKCZ2bSwgbV8jI25hbWUsICNuYW1lKTsKICAgICBKU0NfQ09NTU9OX1NUUklOR1Nf
RUFDSF9OQU1FKEpTQ19DT01NT05fU1RSSU5HU19BVFRSSUJVVEVfSU5JVElBTElaRSkKICN1bmRl
ZiBKU0NfQ09NTU9OX1NUUklOR1NfQVRUUklCVVRFX0lOSVRJQUxJWkUKIH0KQEAgLTEwOCwxOCAr
MTA4LDE4IEBAIHZvaWQgU21hbGxTdHJpbmdzOjpmaW5hbGl6ZVNtYWxsU3RyaW5ncygKICAgICAg
ICAgZmluYWxpemUobV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzW2ldKTsKIH0KIAotdm9pZCBTbWFs
bFN0cmluZ3M6OmNyZWF0ZUVtcHR5U3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK3Zv
aWQgU21hbGxTdHJpbmdzOjpjcmVhdGVFbXB0eVN0cmluZyhWTSogdm0pCiB7CiAgICAgQVNTRVJU
KCFtX2VtcHR5U3RyaW5nKTsKLSAgICBtX2VtcHR5U3RyaW5nID0gSlNTdHJpbmc6OmNyZWF0ZUhh
c090aGVyT3duZXIoKmdsb2JhbERhdGEsIFN0cmluZ0ltcGw6OmVtcHR5KCkpOworICAgIG1fZW1w
dHlTdHJpbmcgPSBKU1N0cmluZzo6Y3JlYXRlSGFzT3RoZXJPd25lcigqdm0sIFN0cmluZ0ltcGw6
OmVtcHR5KCkpOwogfQogCi12b2lkIFNtYWxsU3RyaW5nczo6Y3JlYXRlU2luZ2xlQ2hhcmFjdGVy
U3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgdW5zaWduZWQgY2hhciBjaGFyYWN0ZXIp
Cit2b2lkIFNtYWxsU3RyaW5nczo6Y3JlYXRlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKFZNKiB2bSwg
dW5zaWduZWQgY2hhciBjaGFyYWN0ZXIpCiB7CiAgICAgaWYgKCFtX3N0b3JhZ2UpCiAgICAgICAg
IG1fc3RvcmFnZSA9IGFkb3B0UHRyKG5ldyBTbWFsbFN0cmluZ3NTdG9yYWdlKTsKICAgICBBU1NF
UlQoIW1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tjaGFyYWN0ZXJdKTsKLSAgICBtX3NpbmdsZUNo
YXJhY3RlclN0cmluZ3NbY2hhcmFjdGVyXSA9IEpTU3RyaW5nOjpjcmVhdGVIYXNPdGhlck93bmVy
KCpnbG9iYWxEYXRhLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+KG1fc3RvcmFnZS0+cmVwKGNoYXJh
Y3RlcikpKTsKKyAgICBtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbY2hhcmFjdGVyXSA9IEpTU3Ry
aW5nOjpjcmVhdGVIYXNPdGhlck93bmVyKCp2bSwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPihtX3N0
b3JhZ2UtPnJlcChjaGFyYWN0ZXIpKSk7CiB9CiAKIFN0cmluZ0ltcGwqIFNtYWxsU3RyaW5nczo6
c2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyKQpAQCAtMTI5
LDkgKzEyOSw5IEBAIFN0cmluZ0ltcGwqIFNtYWxsU3RyaW5nczo6c2luZ2xlQ2hhcmFjdGUKICAg
ICByZXR1cm4gbV9zdG9yYWdlLT5yZXAoY2hhcmFjdGVyKTsKIH0KIAotdm9pZCBTbWFsbFN0cmlu
Z3M6OmluaXRpYWxpemUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU1N0cmluZyomIHN0cmlu
ZywgY29uc3QgY2hhciogdmFsdWUpIGNvbnN0Cit2b2lkIFNtYWxsU3RyaW5nczo6aW5pdGlhbGl6
ZShWTSogdm0sIEpTU3RyaW5nKiYgc3RyaW5nLCBjb25zdCBjaGFyKiB2YWx1ZSkgY29uc3QKIHsK
LSAgICBzdHJpbmcgPSBKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBTdHJpbmdJbXBsOjpj
cmVhdGUodmFsdWUpKTsKKyAgICBzdHJpbmcgPSBKU1N0cmluZzo6Y3JlYXRlKCp2bSwgU3RyaW5n
SW1wbDo6Y3JlYXRlKHZhbHVlKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmgJKHJldmlzaW9uIDE0
ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIGNsYXNzIFN0cmluZ0ltcGw7CiBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgIGNsYXNzIEhlYXBSb290VmlzaXRvcjsKLSAgICBjbGFzcyBKU0dsb2Jh
bERhdGE7CisgICAgY2xhc3MgVk07CiAgICAgY2xhc3MgSlNTdHJpbmc7CiAgICAgY2xhc3MgU21h
bGxTdHJpbmdzU3RvcmFnZTsKICAgICBjbGFzcyBTbG90VmlzaXRvcjsKQEAgLTY4LDEwICs2OCwx
MCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBtX2VtcHR5U3RyaW5nOwog
ICAgICAgICB9CiAKLSAgICAgICAgSlNTdHJpbmcqIHNpbmdsZUNoYXJhY3RlclN0cmluZyhKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyKQorICAgICAgICBK
U1N0cmluZyogc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKFZNKiB2bSwgdW5zaWduZWQgY2hhciBjaGFy
YWN0ZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9zaW5nbGVDaGFyYWN0ZXJTdHJp
bmdzW2NoYXJhY3Rlcl0pCi0gICAgICAgICAgICAgICAgY3JlYXRlU2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nKGdsb2JhbERhdGEsIGNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgY3JlYXRlU2luZ2xl
Q2hhcmFjdGVyU3RyaW5nKHZtLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgcmV0dXJuIG1fc2lu
Z2xlQ2hhcmFjdGVyU3RyaW5nc1tjaGFyYWN0ZXJdOwogICAgICAgICB9CiAKQEAgLTgxLDcgKzgx
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNTdHJpbmcqKiBzaW5nbGVDaGFyYWN0
ZXJTdHJpbmdzKCkgeyByZXR1cm4gJm1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1swXTsgfQogCi0g
ICAgICAgIHZvaWQgaW5pdGlhbGl6ZUNvbW1vblN0cmluZ3MoSlNHbG9iYWxEYXRhJik7CisgICAg
ICAgIHZvaWQgaW5pdGlhbGl6ZUNvbW1vblN0cmluZ3MoVk0mKTsKICAgICAgICAgdm9pZCB2aXNp
dFN0cm9uZ1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKIAogI2RlZmluZSBKU0NfQ09NTU9OX1NU
UklOR1NfQUNDRVNTT1JfREVGSU5JVElPTihuYW1lKSBcCkBAIC05NSwxMCArOTUsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IHNpbmdsZUNoYXJhY3RlclN0cmluZ0NvdW50ID0gbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nICsg
MTsKIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNyZWF0ZUVtcHR5U3RyaW5nKEpT
R2xvYmFsRGF0YSopOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNyZWF0ZVNpbmds
ZUNoYXJhY3RlclN0cmluZyhKU0dsb2JhbERhdGEqLCB1bnNpZ25lZCBjaGFyKTsKKyAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjcmVhdGVFbXB0eVN0cmluZyhWTSopOworICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGNyZWF0ZVNpbmdsZUNoYXJhY3RlclN0cmluZyhWTSosIHVu
c2lnbmVkIGNoYXIpOwogCi0gICAgICAgIHZvaWQgaW5pdGlhbGl6ZShKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIEpTU3RyaW5nKiYgc3RyaW5nLCBjb25zdCBjaGFyKiB2YWx1ZSkgY29uc3Q7Cisg
ICAgICAgIHZvaWQgaW5pdGlhbGl6ZShWTSogdm0sIEpTU3RyaW5nKiYgc3RyaW5nLCBjb25zdCBj
aGFyKiB2YWx1ZSkgY29uc3Q7CiAKICAgICAgICAgSlNTdHJpbmcqIG1fZW1wdHlTdHJpbmc7CiAj
ZGVmaW5lIEpTQ19DT01NT05fU1RSSU5HU19BVFRSSUJVVEVfREVDTEFSQVRJT04obmFtZSkgSlNT
dHJpbmcqIG1fIyNuYW1lOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Bh
cnNlQXJyYXlWYWx1ZU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw4ICszOSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFz
c0luZm8gU3BhcnNlQXJyYXlWYWx1ZU1hcDo6c19pbmZvID0geyAiU3BhcnNlQXJyYXlWYWx1ZU1h
cCIsIDAsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoU3BhcnNlQXJyYXlWYWx1ZU1hcCkgfTsK
IAotU3BhcnNlQXJyYXlWYWx1ZU1hcDo6U3BhcnNlQXJyYXlWYWx1ZU1hcChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCi0gICAgOiBCYXNlKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3BhcnNlQXJy
YXlWYWx1ZU1hcFN0cnVjdHVyZS5nZXQoKSkKK1NwYXJzZUFycmF5VmFsdWVNYXA6OlNwYXJzZUFy
cmF5VmFsdWVNYXAoVk0mIHZtKQorICAgIDogQmFzZSh2bSwgdm0uc3BhcnNlQXJyYXlWYWx1ZU1h
cFN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1fZmxhZ3MoTm9ybWFsKQogICAgICwgbV9yZXBvcnRl
ZENhcGFjaXR5KDApCiB7CkBAIC01MCwxNSArNTAsMTUgQEAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
flNwYXJzZUFycmF5VmFsdWVNYQogewogfQogCi12b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OmZp
bmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAotU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y3JlYXRlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKK1NwYXJzZUFycmF5VmFsdWVNYXAqIFNwYXJzZUFycmF5VmFsdWVNYXA6
OmNyZWF0ZShWTSYgdm0pCiB7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogcmVzdWx0ID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3BhcnNlQXJyYXlWYWx1ZU1hcD4oZ2xvYmFsRGF0YS5o
ZWFwKSkgU3BhcnNlQXJyYXlWYWx1ZU1hcChnbG9iYWxEYXRhKTsKLSAgICByZXN1bHQtPmZpbmlz
aENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIHJlc3VsdCA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFNwYXJzZUFycmF5VmFsdWVNYXA+KHZtLmhlYXAp
KSBTcGFyc2VBcnJheVZhbHVlTWFwKHZtKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZt
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC02Nyw5ICs2Nyw5IEBAIHZvaWQgU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6ZGVzdHJveShKU0NlbGwKICAgICBzdGF0aWNfY2FzdDxTcGFyc2VBcnJh
eVZhbHVlTWFwKj4oY2VsbCktPlNwYXJzZUFycmF5VmFsdWVNYXA6On5TcGFyc2VBcnJheVZhbHVl
TWFwKCk7CiB9CiAKLVN0cnVjdHVyZSogU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y3JlYXRlU3RydWN0
dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpCitTdHJ1Y3R1cmUqIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQogewotICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRh
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ29tcG91bmRUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENvbXBvdW5kVHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCAmc19pbmZvKTsKIH0KIAogU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmFkZChKU09iamVjdCogYXJyYXksIHVuc2lnbmVkIGkpCkBAIC0xMTgs
NyArMTE4LDcgQEAgYm9vbCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXREaXJlY3QoRXhlYwogICAg
IH0KIAogICAgIGVudHJ5LmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwotICAgIGVudHJ5LnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKKyAgICBlbnRyeS5zZXQoZXhlYy0+dm0o
KSwgdGhpcywgdmFsdWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNzIsNyArMTcyLDcg
QEAgdm9pZCBTcGFyc2VBcnJheUVudHJ5OjpwdXQoRXhlY1N0YXRlKiBleAogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgbWFw
LCB2YWx1ZSk7CisgICAgICAgIHNldChleGVjLT52bSgpLCBtYXAsIHZhbHVlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Bh
cnNlQXJyYXlWYWx1ZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02NSwxMCArNjUsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgTGVuZ3RoSXNSZWFkT25s
eSA9IDIsCiAgICAgfTsKIAotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAoSlNHbG9iYWxEYXRhJik7
CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcChWTSYpOwogICAgIH5TcGFyc2VBcnJheVZhbHVlTWFw
KCk7CiAgICAgCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmKTsKKyAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgSlNDZWxsOjpTdHJ1Y3R1cmVG
bGFnczsKIApAQCAtNzksMTMgKzc5LDEzIEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIE1hcDo6Y29u
c3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgICAgdHlwZWRlZiBNYXA6OkFkZFJlc3VsdCBB
ZGRSZXN1bHQ7CiAKLSAgICBzdGF0aWMgU3BhcnNlQXJyYXlWYWx1ZU1hcCogY3JlYXRlKEpTR2xv
YmFsRGF0YSYpOworICAgIHN0YXRpYyBTcGFyc2VBcnJheVZhbHVlTWFwKiBjcmVhdGUoVk0mKTsK
ICAgICAKICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CiAgICAgc3Rh
dGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHBy
b3RvdHlwZSk7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKICAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmljdEV2YWxBY3RpdmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAJKHJl
dmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmljdEV2
YWxBY3RpdmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBjb25zdCBD
bGFzc0luZm8gU3RyaWN0RXZhbEFjdGl2YXRpb246OnNfCiAKIFN0cmljdEV2YWxBY3RpdmF0aW9u
OjpTdHJpY3RFdmFsQWN0aXZhdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgOiBCYXNlKAotICAg
ICAgICBleGVjLT5nbG9iYWxEYXRhKCksCisgICAgICAgIGV4ZWMtPnZtKCksCiAgICAgICAgIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+c3RyaWN0RXZhbEFjdGl2YXRpb25TdHJ1Y3R1cmUo
KSwKICAgICAgICAgZXhlYy0+c2NvcGUoKQogICAgICkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cmljdEV2YWxBY3RpdmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaWN0RXZhbEFjdGl2YXRpb24uaAkocmV2aXNpb24g
MTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaWN0RXZhbEFjdGl2
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTYgKzM3LDE2IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgU3RyaWN0RXZhbEFjdGl2YXRpb24qIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
ewogICAgICAgICBTdHJpY3RFdmFsQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPFN0cmljdEV2YWxBY3RpdmF0aW9uPigqZXhlYy0+aGVhcCgpKSkgU3Ry
aWN0RXZhbEFjdGl2YXRpb24oZXhlYyk7Ci0gICAgICAgIGFjdGl2YXRpb24tPmZpbmlzaENyZWF0
aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIGFjdGl2YXRpb24tPmZpbmlzaENyZWF0
aW9uKGV4ZWMtPnZtKCkpOwogICAgICAgICByZXR1cm4gYWN0aXZhdGlvbjsKICAgICB9CiAKICAg
ICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUpOwogICAgIHN0YXRpYyBKU09iamVjdCogdG9UaGlzT2JqZWN0KEpTQ2VsbCosIEV4ZWNT
dGF0ZSopOwogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewot
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RyaW5nQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw5ICs1NSw5IEBAIFN0
cmluZ0NvbnN0cnVjdG9yOjpTdHJpbmdDb25zdHJ1Y3RvcihKU0cKIAogdm9pZCBTdHJpbmdDb25z
dHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBTdHJpbmdQcm90b3R5cGUq
IHN0cmluZ1Byb3RvdHlwZSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9i
YWxEYXRhKCksIHN0cmluZ1Byb3RvdHlwZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSk7Ci0gICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBzdHJpbmdQcm90b3R5cGUsIFJlYWRPbmx5IHwgRG9udEVu
dW0gfCBEb250RGVsZXRlKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5n
bG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEpLCBS
ZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZXhlYy0+dm0oKSwgc3RyaW5nUHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKTsK
KyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkucHJvdG90eXBlLCBzdHJpbmdQcm90b3R5cGUsIFJlYWRPbmx5IHwgRG9udEVudW0g
fCBEb250RGVsZXRlKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgp
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBE
b250RW51bSB8IERvbnREZWxldGUpOwogfQogCiBib29sIFN0cmluZ0NvbnN0cnVjdG9yOjpnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCAmc2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMTQ4
NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtNDAsOSArNDAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAg
IH0KIAogICAgIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
MTYgKzMyLDE2IEBAIEFTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKFN0cmluZ09iamUKIAog
Y29uc3QgQ2xhc3NJbmZvIFN0cmluZ09iamVjdDo6c19pbmZvID0geyAiU3RyaW5nIiwgJkpTV3Jh
cHBlck9iamVjdDo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFN0cmluZ09iamVj
dCkgfTsKIAotU3RyaW5nT2JqZWN0OjpTdHJpbmdPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IEpTV3JhcHBlck9iamVjdChnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUpCitTdHJpbmdPYmplY3Q6OlN0cmluZ09iamVjdChWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorICAgIDogSlNXcmFwcGVyT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCiB7
CiB9CiAKLXZvaWQgU3RyaW5nT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTU3RyaW5nKiBzdHJpbmcpCit2b2lkIFN0cmluZ09iamVjdDo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBKU1N0cmluZyogc3RyaW5nKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NF
UlQoaW5oZXJpdHMoJnNfaW5mbykpOwotICAgIHNldEludGVybmFsVmFsdWUoZ2xvYmFsRGF0YSwg
c3RyaW5nKTsKKyAgICBzZXRJbnRlcm5hbFZhbHVlKHZtLCBzdHJpbmcpOwogfQogCiBib29sIFN0
cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC0x
NjYsNyArMTY2LDcgQEAgdm9pZCBTdHJpbmdPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSgog
U3RyaW5nT2JqZWN0KiBjb25zdHJ1Y3RTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHN0cmluZykKIHsKICAgICBTdHJpbmdPYmplY3Qq
IG9iamVjdCA9IFN0cmluZ09iamVjdDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdC0+c3RyaW5n
T2JqZWN0U3RydWN0dXJlKCkpOwotICAgIG9iamVjdC0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5n
bG9iYWxEYXRhKCksIHN0cmluZyk7CisgICAgb2JqZWN0LT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMt
PnZtKCksIHN0cmluZyk7CiAgICAgcmV0dXJuIG9iamVjdDsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgJKHJldmlzaW9uIDE0ODY1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMywxNCArMzMsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRp
YyBTdHJpbmdPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQogICAgICAgICB7CiAgICAgICAgICAgICBKU1N0cmluZyogc3RyaW5nID0ganNFbXB0eVN0
cmluZyhleGVjKTsKLSAgICAgICAgICAgIFN0cmluZ09iamVjdCogb2JqZWN0ID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8U3RyaW5nT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgU3RyaW5nT2Jq
ZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKTsgIAotICAgICAgICAgICAgb2JqZWN0
LT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIHN0cmluZyk7CisgICAgICAgICAg
ICBTdHJpbmdPYmplY3QqIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cmlu
Z09iamVjdD4oKmV4ZWMtPmhlYXAoKSkpIFN0cmluZ09iamVjdChleGVjLT52bSgpLCBzdHJ1Y3R1
cmUpOyAgCisgICAgICAgICAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCksIHN0
cmluZyk7CiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICAgICB9CiAgICAgICAgIHN0
YXRpYyBTdHJpbmdPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU1N0cmluZyogc3RyaW5nKQogICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmdP
YmplY3QqIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cmluZ09iamVjdD4o
KmV4ZWMtPmhlYXAoKSkpIFN0cmluZ09iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVy
ZSk7Ci0gICAgICAgICAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEo
KSwgc3RyaW5nKTsKKyAgICAgICAgICAgIFN0cmluZ09iamVjdCogb2JqZWN0ID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8U3RyaW5nT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgU3RyaW5nT2Jq
ZWN0KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CisgICAgICAgICAgICBvYmplY3QtPmZpbmlzaENy
ZWF0aW9uKGV4ZWMtPnZtKCksIHN0cmluZyk7CiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0Owog
ICAgICAgICB9CiAgICAgICAgIHN0YXRpYyBTdHJpbmdPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUq
LCBKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKik7CkBAIC02MSwxNSArNjEsMTUgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgSlNTdHJpbmcqIGludGVybmFsVmFsdWUoKSBjb25zdCB7IHJl
dHVybiBhc1N0cmluZyhKU1dyYXBwZXJPYmplY3Q6OmludGVybmFsVmFsdWUoKSk7fQogCi0gICAg
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQor
ICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYsIEpTU3RyaW5nKik7CisgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1N0cmluZyop
OwogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpT
V3JhcHBlck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IFN0cmluZ09iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgU3RyaW5nT2JqZWN0KFZNJiwgU3RydWN0dXJlKik7CiAgICAgfTsKIAogICAg
IFN0cmluZ09iamVjdCogYXNTdHJpbmdPYmplY3QoSlNWYWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHJldmlzaW9u
IDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDE1ICs4NiwxNSBAQCBjb25zdCBDbGFzc0luZm8g
U3RyaW5nUHJvdG90eXBlOjpzX2luZm8gCiAKIC8vIEVDTUEgMTUuNS40CiBTdHJpbmdQcm90b3R5
cGU6OlN0cmluZ1Byb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQotICAgIDogU3RyaW5nT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKQorICAg
IDogU3RyaW5nT2JqZWN0KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSkKIHsKIH0KIAogdm9pZCBTdHJp
bmdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIG5hbWVBbmRNZXNzYWdlKQogewotICAgIEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIAotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIG5h
bWVBbmRNZXNzYWdlKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgbmFtZUFuZE1lc3Nh
Z2UpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiAKICAgICBKU0NfTkFUSVZFX0lO
VFJJTlNJQ19GVU5DVElPTigidG9TdHJpbmciLCBzdHJpbmdQcm90b0Z1bmNUb1N0cmluZywgRG9u
dEVudW0sIDAsIFN0cmluZ1Byb3RvdHlwZVZhbHVlT2ZJbnRyaW5zaWMpOwpAQCAtMTM0LDcgKzEz
NCw3IEBAIHZvaWQgU3RyaW5nUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihFeGUKICAgICBKU0Nf
TkFUSVZFX0ZVTkNUSU9OKCJ0cmltUmlnaHQiLCBzdHJpbmdQcm90b0Z1bmNUcmltUmlnaHQsIERv
bnRFbnVtLCAwKTsKIAogICAgIC8vIFRoZSBjb25zdHJ1Y3RvciB3aWxsIGJlIGFkZGVkIGxhdGVy
LCBhZnRlciBTdHJpbmdDb25zdHJ1Y3RvciBoYXMgYmVlbiBidWlsdAotICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
Lmxlbmd0aCwganNOdW1iZXIoMCksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsK
KyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigwKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9u
dEVudW0pOwogfQogCiBTdHJpbmdQcm90b3R5cGUqIFN0cmluZ1Byb3RvdHlwZTo6Y3JlYXRlKEV4
ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCkBAIC00MDUsMTIgKzQwNSwxMiBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIEVuY29k
ZWRKU1ZhbHVlIHJlbW92CiAgICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9IDA7CiAKICAgICBW
ZWN0b3I8U3RyaW5nUmFuZ2UsIDE2PiBzb3VyY2VSYW5nZXM7Ci0gICAgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKICAgICBSZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhwQ29uc3RydWN0b3IgPSBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cENvbnN0cnVjdG9yKCk7CiAgICAgdW5zaWduZWQgc291
cmNlTGVuID0gc291cmNlLmxlbmd0aCgpOwogCiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAg
TWF0Y2hSZXN1bHQgcmVzdWx0ID0gcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRjaCgqZ2xv
YmFsRGF0YSwgcmVnRXhwLCBzdHJpbmcsIHNvdXJjZSwgc3RhcnRQb3NpdGlvbik7CisgICAgICAg
IE1hdGNoUmVzdWx0IHJlc3VsdCA9IHJlZ0V4cENvbnN0cnVjdG9yLT5wZXJmb3JtTWF0Y2goKnZt
LCByZWdFeHAsIHN0cmluZywgc291cmNlLCBzdGFydFBvc2l0aW9uKTsKICAgICAgICAgaWYgKCFy
ZXN1bHQpCiAgICAgICAgICAgICBicmVhazsKIApAQCAtNDgwLDExICs0ODAsMTEgQEAgc3RhdGlj
IE5FVkVSX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYQogICAgICAgICBDYWNoZWRDYWxsIGNh
Y2hlZENhbGwoZXhlYywgZnVuYywgYXJnQ291bnQpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsK
LSAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsK
KyAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgICAgIGlmIChzb3VyY2UuaXM4Qml0
KCkpIHsKICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgaW50KiBv
dmVjdG9yOwotICAgICAgICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IHJlZ0V4cENvbnN0
cnVjdG9yLT5wZXJmb3JtTWF0Y2goKmdsb2JhbERhdGEsIHJlZ0V4cCwgc3RyaW5nLCBzb3VyY2Us
IHN0YXJ0UG9zaXRpb24sICZvdmVjdG9yKTsKKyAgICAgICAgICAgICAgICBNYXRjaFJlc3VsdCBy
ZXN1bHQgPSByZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9ybU1hdGNoKCp2bSwgcmVnRXhwLCBzdHJp
bmcsIHNvdXJjZSwgc3RhcnRQb3NpdGlvbiwgJm92ZWN0b3IpOwogICAgICAgICAgICAgICAgIGlm
ICghcmVzdWx0KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKIApAQCAtNDk4LDcgKzQ5OCw3
IEBAIHN0YXRpYyBORVZFUl9JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbGEKICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1hdGNoU3RhcnQgPCAwKQogICAgICAgICAgICAgICAgICAgICAgICAgY2Fj
aGVkQ2FsbC5zZXRBcmd1bWVudChpLCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudChp
LCBqc1N1YnN0cmluZzgoZ2xvYmFsRGF0YSwgc291cmNlLCBtYXRjaFN0YXJ0LCBtYXRjaExlbikp
OworICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudChpLCBqc1N1
YnN0cmluZzgodm0sIHNvdXJjZSwgbWF0Y2hTdGFydCwgbWF0Y2hMZW4pKTsKICAgICAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KGkrKywganNO
dW1iZXIocmVzdWx0LnN0YXJ0KSk7CkBAIC01MjMsNyArNTIzLDcgQEAgc3RhdGljIE5FVkVSX0lO
TElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
d2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICBpbnQqIG92ZWN0b3I7Ci0gICAgICAgICAg
ICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRj
aCgqZ2xvYmFsRGF0YSwgcmVnRXhwLCBzdHJpbmcsIHNvdXJjZSwgc3RhcnRQb3NpdGlvbiwgJm92
ZWN0b3IpOworICAgICAgICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IHJlZ0V4cENvbnN0
cnVjdG9yLT5wZXJmb3JtTWF0Y2goKnZtLCByZWdFeHAsIHN0cmluZywgc291cmNlLCBzdGFydFBv
c2l0aW9uLCAmb3ZlY3Rvcik7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogCkBAIC01MzcsNyArNTM3LDcgQEAgc3RhdGljIE5FVkVSX0lO
TElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYQogICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hT
dGFydCA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50
KGksIGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KGksIGpzU3Vic3RyaW5nKGdsb2Jh
bERhdGEsIHNvdXJjZSwgbWF0Y2hTdGFydCwgbWF0Y2hMZW4pKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoaSwganNTdWJzdHJpbmcodm0sIHNvdXJjZSwg
bWF0Y2hTdGFydCwgbWF0Y2hMZW4pKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
ICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KGkrKywganNOdW1iZXIocmVzdWx0LnN0YXJ0KSk7
CkBAIC01NjEsMTAgKzU2MSwxMCBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIEVuY29kZWRKU1ZhbHVl
IHJlcGxhCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgICAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICAgICAgZG8gewogICAgICAgICAgICAgaW50KiBvdmVj
dG9yOwotICAgICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gcmVnRXhwQ29uc3RydWN0b3It
PnBlcmZvcm1NYXRjaCgqZ2xvYmFsRGF0YSwgcmVnRXhwLCBzdHJpbmcsIHNvdXJjZSwgc3RhcnRQ
b3NpdGlvbiwgJm92ZWN0b3IpOworICAgICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gcmVn
RXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRjaCgqdm0sIHJlZ0V4cCwgc3RyaW5nLCBzb3VyY2Us
IHN0YXJ0UG9zaXRpb24sICZvdmVjdG9yKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0KQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogCkBAIC04MTAsNyArODEwLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjKTsKICAgICBKU1N0cmluZyogc3RyaW5nID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
OwogICAgIFN0cmluZyBzID0gc3RyaW5nLT52YWx1ZShleGVjKTsKLSAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogCkBAIC04MzIsMTIg
KzgzMiwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAg
ICAgICAqICByZXBsYWNlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24gbmV3IFJl
Z0V4cChyZWdleHApLgogICAgICAgICAgKiAgUGVyIEVDTUEgMTUuMTAuNC4xLCBpZiBhMCBpcyB1
bmRlZmluZWQgc3Vic3RpdHV0ZSB0aGUgZW1wdHkgc3RyaW5nLgogICAgICAgICAgKi8KLSAgICAg
ICAgcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhMC5pc1VuZGVm
aW5lZCgpID8gU3RyaW5nKCIiKSA6IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgTm9G
bGFncyk7CisgICAgICAgIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMtPnZtKCksIGEwLmlz
VW5kZWZpbmVkKCkgPyBTdHJpbmcoIiIpIDogYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
LCBOb0ZsYWdzKTsKICAgICAgICAgaWYgKCFyZWdFeHAtPmlzVmFsaWQoKSkKICAgICAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgcmVnRXhw
LT5lcnJvck1lc3NhZ2UoKSkpOwogICAgIH0KICAgICBSZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhw
Q29uc3RydWN0b3IgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cENvbnN0cnVj
dG9yKCk7Ci0gICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZv
cm1NYXRjaCgqZ2xvYmFsRGF0YSwgcmVnRXhwLCBzdHJpbmcsIHMsIDApOworICAgIE1hdGNoUmVz
dWx0IHJlc3VsdCA9IHJlZ0V4cENvbnN0cnVjdG9yLT5wZXJmb3JtTWF0Y2goKnZtLCByZWdFeHAs
IHN0cmluZywgcywgMCk7CiAgICAgLy8gY2FzZSB3aXRob3V0ICdnJyBmbGFnIGlzIGhhbmRsZWQg
bGlrZSBSZWdFeHAucHJvdG90eXBlLmV4ZWMKICAgICBpZiAoIWdsb2JhbCkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQgPyBSZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZShl
eGVjLCBzdHJpbmcsIHJlZ0V4cCwgcmVzdWx0KSA6IGpzTnVsbCgpKTsKQEAgLTg1MCw3ICs4NTAs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIGxp
c3QuYXBwZW5kKGpzU3Vic3RyaW5nKGV4ZWMsIHMsIHJlc3VsdC5zdGFydCwgbGVuZ3RoKSk7CiAg
ICAgICAgIGlmICghbGVuZ3RoKQogICAgICAgICAgICAgKytlbmQ7Ci0gICAgICAgIHJlc3VsdCA9
IHJlZ0V4cENvbnN0cnVjdG9yLT5wZXJmb3JtTWF0Y2goKmdsb2JhbERhdGEsIHJlZ0V4cCwgc3Ry
aW5nLCBzLCBlbmQpOworICAgICAgICByZXN1bHQgPSByZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9y
bU1hdGNoKCp2bSwgcmVnRXhwLCBzdHJpbmcsIHMsIGVuZCk7CiAgICAgfQogICAgIGlmIChsaXN0
LmlzRW1wdHkoKSkgewogICAgICAgICAvLyBpZiB0aGVyZSBhcmUgbm8gbWF0Y2hlcyBhdCBhbGws
IGl0J3MgaW1wb3J0YW50IHRvIHJldHVybgpAQCAtODY5LDcgKzg2OSw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYyk7CiAgICAgSlNTdHJpbmcqIHN0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhl
eGVjKTsKICAgICBTdHJpbmcgcyA9IHN0cmluZy0+dmFsdWUoZXhlYyk7Ci0gICAgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKIApAQCAtODgz
LDEyICs4ODMsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwog
ICAgICAgICAgKiAgcmVwbGFjZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBleHByZXNzaW9uIG5l
dyBSZWdFeHAocmVnZXhwKS4KICAgICAgICAgICogIFBlciBFQ01BIDE1LjEwLjQuMSwgaWYgYTAg
aXMgdW5kZWZpbmVkIHN1YnN0aXR1dGUgdGhlIGVtcHR5IHN0cmluZy4KICAgICAgICAgICovCi0g
ICAgICAgIHJlZyA9IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgYTAuaXNVbmRl
ZmluZWQoKSA/IFN0cmluZygiIikgOiBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksIE5v
RmxhZ3MpOworICAgICAgICByZWcgPSBSZWdFeHA6OmNyZWF0ZShleGVjLT52bSgpLCBhMC5pc1Vu
ZGVmaW5lZCgpID8gU3RyaW5nKCIiKSA6IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwg
Tm9GbGFncyk7CiAgICAgICAgIGlmICghcmVnLT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsIHJlZy0+ZXJyb3JN
ZXNzYWdlKCkpKTsKICAgICB9CiAgICAgUmVnRXhwQ29uc3RydWN0b3IqIHJlZ0V4cENvbnN0cnVj
dG9yID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBDb25zdHJ1Y3RvcigpOwot
ICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IHJlZ0V4cENvbnN0cnVjdG9yLT5wZXJmb3JtTWF0Y2go
Kmdsb2JhbERhdGEsIHJlZywgc3RyaW5nLCBzLCAwKTsKKyAgICBNYXRjaFJlc3VsdCByZXN1bHQg
PSByZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9ybU1hdGNoKCp2bSwgcmVnLCBzdHJpbmcsIHMsIDAp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0ID8ganNOdW1iZXIocmVzdWx0LnN0
YXJ0KSA6IGpzTnVtYmVyKC0xKSk7CiB9CiAKQEAgLTk3OCw3ICs5NzgsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgLy8gICAgb3RoZXJ3aXNlIGxldCBS
ID0gVG9TdHJpbmcoc2VwYXJhdG9yKS4KICAgICBKU1ZhbHVlIHNlcGFyYXRvclZhbHVlID0gZXhl
Yy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKHNlcGFyYXRvclZhbHVlLmluaGVyaXRzKCZSZWdFeHBP
YmplY3Q6OnNfaW5mbykpIHsKLSAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4
ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgICAg
IFJlZ0V4cCogcmVnID0gYXNSZWdFeHBPYmplY3Qoc2VwYXJhdG9yVmFsdWUpLT5yZWdFeHAoKTsK
IAogICAgICAgICAvLyA5LiBJZiBsaW0gPT0gMCwgcmV0dXJuIEEuCkBAIC0xMDAxLDcgKzEwMDEs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgICAg
ICAvLyBjLiBDYWxsIHRoZSBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9m
IEEgd2l0aCBhcmd1bWVudHMgIjAiLAogICAgICAgICAgICAgLy8gICAgUHJvcGVydHkgRGVzY3Jp
cHRvciB7W1tWYWx1ZV1dOiBTLCBbW1dyaXRhYmxlXV06IHRydWUsIFtbRW51bWVyYWJsZV1dOiB0
cnVlLCBbW0NvbmZpZ3VyYWJsZV1dOiB0cnVlfSwgYW5kIGZhbHNlLgogICAgICAgICAgICAgLy8g
ZC4gUmV0dXJuIEEuCi0gICAgICAgICAgICBpZiAoIXJlZy0+bWF0Y2goKmdsb2JhbERhdGEsIGlu
cHV0LCAwKSkKKyAgICAgICAgICAgIGlmICghcmVnLT5tYXRjaCgqdm0sIGlucHV0LCAwKSkKICAg
ICAgICAgICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIDAsIGpzU3RyaW5nV2l0
aFJldXNlKGV4ZWMsIHRoaXNWYWx1ZSwgaW5wdXQpKTsKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKICAgICAgICAgfQpAQCAtMTAxMiw3ICsxMDEyLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICB3aGlsZSAobWF0
Y2hQb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCgpKSB7CiAgICAgICAgICAgICAvLyBhLiBDYWxsIFNw
bGl0TWF0Y2goUywgcSwgUikgYW5kIGxldCB6IGJlIGl0cyBNYXRjaFJlc3VsdCByZXN1bHQuCiAg
ICAgICAgICAgICBWZWN0b3I8aW50LCAzMj4gb3ZlY3RvcjsKLSAgICAgICAgICAgIGludCBtcG9z
ID0gcmVnLT5tYXRjaCgqZ2xvYmFsRGF0YSwgaW5wdXQsIG1hdGNoUG9zaXRpb24sIG92ZWN0b3Ip
OworICAgICAgICAgICAgaW50IG1wb3MgPSByZWctPm1hdGNoKCp2bSwgaW5wdXQsIG1hdGNoUG9z
aXRpb24sIG92ZWN0b3IpOwogICAgICAgICAgICAgLy8gYi4gSWYgeiBpcyBmYWlsdXJlLCB0aGVu
IGxldCBxID0gcSArIDEuCiAgICAgICAgICAgICBpZiAobXBvcyA8IDApCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90
b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdQcm90b3R5cGUuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIFN0cmluZ1Byb3RvdHlwZSogY3Jl
YXRlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAKLSAgICAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAg
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8p
OwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdSZWN1cnNpb25DaGVja2Vy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUmVj
dXJzaW9uQ2hlY2tlci5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdSZWN1cnNpb25DaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDcgKzUyLDcgQEAgaW5saW5lIEpTVmFsdWUgU3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6cAogICAg
IGNvbnN0IFN0YWNrQm91bmRzJiBuYXRpdmVTdGFjayA9IHd0ZlRocmVhZERhdGEoKS5zdGFjaygp
OwogICAgIGlmICghbmF0aXZlU3RhY2suaXNTYWZlVG9SZWN1cnNlKCkpCiAgICAgICAgIHJldHVy
biB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcigpOwotICAgIGJvb2wgYWxyZWFkeVZpc2l0ZWQgPSAh
bV9leGVjLT5nbG9iYWxEYXRhKCkuc3RyaW5nUmVjdXJzaW9uQ2hlY2tWaXNpdGVkT2JqZWN0cy5h
ZGQobV90aGlzT2JqZWN0KS5pc05ld0VudHJ5OworICAgIGJvb2wgYWxyZWFkeVZpc2l0ZWQgPSAh
bV9leGVjLT52bSgpLnN0cmluZ1JlY3Vyc2lvbkNoZWNrVmlzaXRlZE9iamVjdHMuYWRkKG1fdGhp
c09iamVjdCkuaXNOZXdFbnRyeTsKICAgICBpZiAoYWxyZWFkeVZpc2l0ZWQpCiAgICAgICAgIHJl
dHVybiBlbXB0eVN0cmluZygpOyAvLyBSZXR1cm4gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIGluZmlu
aXRlIHJlY3Vyc2lvbi4KICAgICByZXR1cm4gSlNWYWx1ZSgpOyAvLyBJbmRpY2F0ZSBzdWNjZXNz
LgpAQCAtNzQsOCArNzQsOCBAQCBpbmxpbmUgU3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6flN0cmlu
Z1JlCiB7CiAgICAgaWYgKG1fZWFybHlSZXR1cm5WYWx1ZSkKICAgICAgICAgcmV0dXJuOwotICAg
IEFTU0VSVChtX2V4ZWMtPmdsb2JhbERhdGEoKS5zdHJpbmdSZWN1cnNpb25DaGVja1Zpc2l0ZWRP
YmplY3RzLmNvbnRhaW5zKG1fdGhpc09iamVjdCkpOwotICAgIG1fZXhlYy0+Z2xvYmFsRGF0YSgp
LnN0cmluZ1JlY3Vyc2lvbkNoZWNrVmlzaXRlZE9iamVjdHMucmVtb3ZlKG1fdGhpc09iamVjdCk7
CisgICAgQVNTRVJUKG1fZXhlYy0+dm0oKS5zdHJpbmdSZWN1cnNpb25DaGVja1Zpc2l0ZWRPYmpl
Y3RzLmNvbnRhaW5zKG1fdGhpc09iamVjdCkpOworICAgIG1fZXhlYy0+dm0oKS5zdHJpbmdSZWN1
cnNpb25DaGVja1Zpc2l0ZWRPYmplY3RzLnJlbW92ZShtX3RoaXNPYmplY3QpOwogfQogCiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlz
aW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDIxICs4MSwyMSBAQCBpbmxpbmUgU3RydWN0dXJlKiBT
dHJ1Y3R1cmVUcmFuc2l0aW9uVGFiCiAgICAgcmV0dXJuIG1hcCgpLT5nZXQobWFrZV9wYWlyKHJl
cCwgYXR0cmlidXRlcykpOwogfQogCi1pbmxpbmUgdm9pZCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGU6OmFkZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQor
aW5saW5lIHZvaWQgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjphZGQoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKIHsKICAgICBpZiAoaXNVc2luZ1NpbmdsZVNsb3QoKSkgewogICAgICAg
ICBTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbiA9IHNpbmdsZVRyYW5zaXRpb24oKTsKIAog
ICAgICAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIGZpcnN0IHRyYW5zaXRpb24gYmVpbmcgYWRkZWQu
CiAgICAgICAgIGlmICghZXhpc3RpbmdUcmFuc2l0aW9uKSB7Ci0gICAgICAgICAgICBzZXRTaW5n
bGVUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CisgICAgICAgICAgICBzZXRTaW5n
bGVUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKICAgICAgICAgLy8gVGhpcyBoYW5kbGVzIHRoZSBzZWNvbmQgdHJhbnNpdGlvbiBiZWlu
ZyBhZGRlZAogICAgICAgICAvLyAob3IgdGhlIGZpcnN0IHRyYW5zaXRpb24gYmVpbmcgZGVzcGVj
aWZpZWQhKQogICAgICAgICBzZXRNYXAobmV3IFRyYW5zaXRpb25NYXAoKSk7Ci0gICAgICAgIGFk
ZChnbG9iYWxEYXRhLCBleGlzdGluZ1RyYW5zaXRpb24pOworICAgICAgICBhZGQodm0sIGV4aXN0
aW5nVHJhbnNpdGlvbik7CiAgICAgfQogCiAgICAgLy8gQWRkIHRoZSBzdHJ1Y3R1cmUgdG8gdGhl
IG1hcC4KQEAgLTE1MSwxMCArMTUxLDEwIEBAIHZvaWQgU3RydWN0dXJlOjpkdW1wU3RhdGlzdGlj
cygpCiAjZW5kaWYKIH0KIAotU3RydWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwg
Y29uc3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgSW5k
ZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpCi0gICAgOiBK
U0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkpCi0g
ICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxEYXRhLCB0aGlzLCBnbG9iYWxPYmplY3QsIFdyaXRl
QmFycmllcjxKU0dsb2JhbE9iamVjdD46Ok1heUJlTnVsbCkKLSAgICAsIG1fcHJvdG90eXBlKGds
b2JhbERhdGEsIHRoaXMsIHByb3RvdHlwZSkKK1N0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5
cGVJbmZvJiB0eXBlSW5mbywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIEluZGV4aW5nVHlw
ZSBpbmRleGluZ1R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5KQorICAgIDogSlNDZWxsKHZt
LCB2bS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgLCBtX2dsb2JhbE9iamVjdCh2bSwg
dGhpcywgZ2xvYmFsT2JqZWN0LCBXcml0ZUJhcnJpZXI8SlNHbG9iYWxPYmplY3Q+OjpNYXlCZU51
bGwpCisgICAgLCBtX3Byb3RvdHlwZSh2bSwgdGhpcywgcHJvdG90eXBlKQogICAgICwgbV9jbGFz
c0luZm8oY2xhc3NJbmZvKQogICAgICwgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldChJbml0aWFs
aXplZFdhdGNoaW5nKQogICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKQEAgLTE3OSw5ICsx
NzksOSBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhCiAKIGNvbnN0
IENsYXNzSW5mbyBTdHJ1Y3R1cmU6OnNfaW5mbyA9IHsgIlN0cnVjdHVyZSIsIDAsIDAsIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoU3RydWN0dXJlKSB9OwogCi1TdHJ1Y3R1cmU6OlN0cnVjdHVyZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0pCiAg
ICAgOiBKU0NlbGwoQ3JlYXRpbmdFYXJseUNlbGwpCi0gICAgLCBtX3Byb3RvdHlwZShnbG9iYWxE
YXRhLCB0aGlzLCBqc051bGwoKSkKKyAgICAsIG1fcHJvdG90eXBlKHZtLCB0aGlzLCBqc051bGwo
KSkKICAgICAsIG1fY2xhc3NJbmZvKCZzX2luZm8pCiAgICAgLCBtX3RyYW5zaXRpb25XYXRjaHBv
aW50U2V0KEluaXRpYWxpemVkV2F0Y2hpbmcpCiAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0
KQpAQCAtMjAxLDkgKzIwMSw5IEBAIFN0cnVjdHVyZTo6U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYg
Z2xvYmEKIHsKIH0KIAotU3RydWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBjb25zdCBTdHJ1Y3R1cmUqIHByZXZpb3VzKQotICAgIDogSlNDZWxsKGdsb2JhbERhdGEs
IGdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0dXJlLmdldCgpKQotICAgICwgbV9wcm90b3R5cGUo
Z2xvYmFsRGF0YSwgdGhpcywgcHJldmlvdXMtPnN0b3JlZFByb3RvdHlwZSgpKQorU3RydWN0dXJl
OjpTdHJ1Y3R1cmUoVk0mIHZtLCBjb25zdCBTdHJ1Y3R1cmUqIHByZXZpb3VzKQorICAgIDogSlND
ZWxsKHZtLCB2bS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgLCBtX3Byb3RvdHlwZSh2
bSwgdGhpcywgcHJldmlvdXMtPnN0b3JlZFByb3RvdHlwZSgpKQogICAgICwgbV9jbGFzc0luZm8o
cHJldmlvdXMtPm1fY2xhc3NJbmZvKQogICAgICwgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldChJ
bml0aWFsaXplZFdhdGNoaW5nKQogICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKQEAgLTIy
MiwxMyArMjIyLDEzIEBAIFN0cnVjdHVyZTo6U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmEK
ICAgICAsIG1fc3RhdGljRnVuY3Rpb25SZWlmaWVkKHByZXZpb3VzLT5tX3N0YXRpY0Z1bmN0aW9u
UmVpZmllZCkKIHsKICAgICBpZiAocHJldmlvdXMtPnR5cGVJbmZvKCkuc3RydWN0dXJlSGFzUmFy
ZURhdGEoKSAmJiBwcmV2aW91cy0+cmFyZURhdGEoKS0+bmVlZHNDbG9uaW5nKCkpCi0gICAgICAg
IGNsb25lUmFyZURhdGFGcm9tKGdsb2JhbERhdGEsIHByZXZpb3VzKTsKKyAgICAgICAgY2xvbmVS
YXJlRGF0YUZyb20odm0sIHByZXZpb3VzKTsKICAgICBlbHNlIGlmIChwcmV2aW91cy0+cHJldmlv
dXNJRCgpKQotICAgICAgICBtX3ByZXZpb3VzT3JSYXJlRGF0YS5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgcHJldmlvdXMtPnByZXZpb3VzSUQoKSk7CisgICAgICAgIG1fcHJldmlvdXNPclJhcmVEYXRh
LnNldCh2bSwgdGhpcywgcHJldmlvdXMtPnByZXZpb3VzSUQoKSk7CiAKICAgICBwcmV2aW91cy0+
bm90aWZ5VHJhbnNpdGlvbkZyb21UaGlzU3RydWN0dXJlKCk7CiAgICAgaWYgKHByZXZpb3VzLT5t
X2dsb2JhbE9iamVjdCkKLSAgICAgICAgbV9nbG9iYWxPYmplY3Quc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHByZXZpb3VzLT5tX2dsb2JhbE9iamVjdC5nZXQoKSk7CisgICAgICAgIG1fZ2xvYmFsT2Jq
ZWN0LnNldCh2bSwgdGhpcywgcHJldmlvdXMtPm1fZ2xvYmFsT2JqZWN0LmdldCgpKTsKIH0KIAog
dm9pZCBTdHJ1Y3R1cmU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQpAQCAtMjM2LDcgKzIzNiw3IEBA
IHZvaWQgU3RydWN0dXJlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKICAgICBzdGF0aWNfY2FzdDxT
dHJ1Y3R1cmUqPihjZWxsKS0+U3RydWN0dXJlOjp+U3RydWN0dXJlKCk7CiB9CiAKLXZvaWQgU3Ry
dWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
K3ZvaWQgU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFZNJiB2bSkKIHsKICAgICBB
U1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09ICZzX2luZm8pOwogICAgIEFTU0VSVCgh
cHJvcGVydHlUYWJsZSgpKTsKQEAgLTI1Miw3ICsyNTIsNyBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0
ZXJpYWxpemVQcm9wZXJ0eU1hcChKCiAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5wcm9w
ZXJ0eVRhYmxlKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPnByZXZpb3VzSUQo
KSk7CiAKLSAgICAgICAgICAgIHByb3BlcnR5VGFibGUoKS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
c3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlKCktPmNvcHkoZ2xvYmFsRGF0YSwgMCwgbnVtYmVyT2ZT
bG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKSk7CisgICAgICAg
ICAgICBwcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0aGlzLCBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFi
bGUoKS0+Y29weSh2bSwgMCwgbnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1f
aW5saW5lQ2FwYWNpdHkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0y
NjAsMTMgKzI2MCwxMyBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChK
CiAgICAgfQogCiAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIGNyZWF0ZVByb3Bl
cnR5TWFwKGdsb2JhbERhdGEsIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBt
X2lubGluZUNhcGFjaXR5KSk7CisgICAgICAgIGNyZWF0ZVByb3BlcnR5TWFwKHZtLCBudW1iZXJP
ZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpOwogCiAgICAg
Zm9yIChwdHJkaWZmX3QgaSA9IHN0cnVjdHVyZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsK
ICAgICAgICAgc3RydWN0dXJlID0gc3RydWN0dXJlc1tpXTsKICAgICAgICAgaWYgKCFzdHJ1Y3R1
cmUtPm1fbmFtZUluUHJldmlvdXMpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgUHJv
cGVydHlNYXBFbnRyeSBlbnRyeShnbG9iYWxEYXRhLCB0aGlzLCBzdHJ1Y3R1cmUtPm1fbmFtZUlu
UHJldmlvdXMuZ2V0KCksIHN0cnVjdHVyZS0+bV9vZmZzZXQsIHN0cnVjdHVyZS0+bV9hdHRyaWJ1
dGVzSW5QcmV2aW91cywgc3RydWN0dXJlLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzLmdldCgp
KTsKKyAgICAgICAgUHJvcGVydHlNYXBFbnRyeSBlbnRyeSh2bSwgdGhpcywgc3RydWN0dXJlLT5t
X25hbWVJblByZXZpb3VzLmdldCgpLCBzdHJ1Y3R1cmUtPm1fb2Zmc2V0LCBzdHJ1Y3R1cmUtPm1f
YXR0cmlidXRlc0luUHJldmlvdXMsIHN0cnVjdHVyZS0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91
cy5nZXQoKSk7CiAgICAgICAgIHByb3BlcnR5VGFibGUoKS0+YWRkKGVudHJ5LCBtX29mZnNldCwg
UHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNdXN0Tm90Q2hhbmdlKTsKICAgICB9CiAgICAg
CkBAIC0yODUsMTEgKzI4NSwxMSBAQCBzaXplX3QgU3RydWN0dXJlOjpzdWdnZXN0ZWROZXdPdXRP
ZkxpbmVTCiAgICAgcmV0dXJuIG5leHRPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkob3V0T2ZMaW5l
Q2FwYWNpdHkoKSk7CiB9CiAgCi12b2lkIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RGljdGlvbmFyeUZ1
bmN0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSkKK3ZvaWQgU3RydWN0dXJlOjpkZXNwZWNpZnlEaWN0aW9uYXJ5RnVuY3Rpb24oVk0mIHZtLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIFN0cmluZ0ltcGwqIHJlcCA9IHByb3Bl
cnR5TmFtZS51aWQoKTsKIAotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShn
bG9iYWxEYXRhKTsKKyAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0pOwog
CiAgICAgQVNTRVJUKGlzRGljdGlvbmFyeSgpKTsKICAgICBBU1NFUlQocHJvcGVydHlUYWJsZSgp
KTsKQEAgLTM0NCw3ICszNDQsNyBAQCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gU3RydWN0dXJlOjpz
dWdnZXN0CiAgICAgcmV0dXJuIEFsbG9jYXRlQXJyYXlTdG9yYWdlOwogfQogCi1TdHJ1Y3R1cmUq
IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQmIG9m
ZnNldCkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWdu
ZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYgb2Zm
c2V0KQogewogICAgIC8vIElmIHdlIGhhdmUgYSBzcGVjaWZpYyBmdW5jdGlvbiwgd2UgbWF5IGhh
dmUgZ290IHRvIHRoaXMgcG9pbnQgaWYgdGhlcmUgaXMKICAgICAvLyBhbHJlYWR5IGEgdHJhbnNp
dGlvbiB3aXRoIHRoZSBjb3JyZWN0IHByb3BlcnR5IG5hbWUgYW5kIGF0dHJpYnV0ZXMsIGJ1dApA
QCAtMzY0LDM2ICszNjQsMzYgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJh
bnNpdAogICAgICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKIAogICAgIGlmIChzdHJ1Y3R1cmUtPnRy
YW5zaXRpb25Db3VudCgpID4gc19tYXhUcmFuc2l0aW9uTGVuZ3RoKSB7Ci0gICAgICAgIFN0cnVj
dHVyZSogdHJhbnNpdGlvbiA9IHRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKTsKKyAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gdG9DYWNo
ZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKTsKICAgICAgICAgQVNTRVJU
KHN0cnVjdHVyZSAhPSB0cmFuc2l0aW9uKTsKLSAgICAgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+
cHV0U3BlY2lmaWNWYWx1ZShnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNw
ZWNpZmljVmFsdWUpOworICAgICAgICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5wdXRTcGVjaWZpY1Zh
bHVlKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOwogICAgICAg
ICByZXR1cm4gdHJhbnNpdGlvbjsKICAgICB9CiAgICAgCi0gICAgU3RydWN0dXJlKiB0cmFuc2l0
aW9uID0gY3JlYXRlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CisgICAgU3RydWN0dXJlKiB0cmFu
c2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogCi0gICAgdHJhbnNpdGlvbi0+bV9jYWNo
ZWRQcm90b3R5cGVDaGFpbi5zZXRNYXlCZU51bGwoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3Ry
dWN0dXJlLT5tX2NhY2hlZFByb3RvdHlwZUNoYWluLmdldCgpKTsKLSAgICB0cmFuc2l0aW9uLT5z
ZXRQcmV2aW91c0lEKGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZSk7CisgICAgdHJh
bnNpdGlvbi0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5zZXRNYXlCZU51bGwodm0sIHRyYW5zaXRp
b24sIHN0cnVjdHVyZS0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5nZXQoKSk7CisgICAgdHJhbnNp
dGlvbi0+c2V0UHJldmlvdXNJRCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlKTsKICAgICB0cmFu
c2l0aW9uLT5tX25hbWVJblByZXZpb3VzID0gcHJvcGVydHlOYW1lLnVpZCgpOwogICAgIHRyYW5z
aXRpb24tPm1fYXR0cmlidXRlc0luUHJldmlvdXMgPSBhdHRyaWJ1dGVzOwotICAgIHRyYW5zaXRp
b24tPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMuc2V0TWF5QmVOdWxsKGdsb2JhbERhdGEsIHRy
YW5zaXRpb24sIHNwZWNpZmljVmFsdWUpOwotICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUo
KS5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJs
ZU9yQ2xvbmVJZlBpbm5lZChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKSk7CisgICAgdHJhbnNpdGlv
bi0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cy5zZXRNYXlCZU51bGwodm0sIHRyYW5zaXRpb24s
IHNwZWNpZmljVmFsdWUpOworICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0s
IHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQo
dm0sIHRyYW5zaXRpb24pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+
bV9vZmZzZXQ7CiAKLSAgICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5wdXRTcGVjaWZpY1ZhbHVlKGds
b2JhbERhdGEsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAg
b2Zmc2V0ID0gdHJhbnNpdGlvbi0+cHV0U3BlY2lmaWNWYWx1ZSh2bSwgcHJvcGVydHlOYW1lLCBh
dHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKIAogICAgIGNoZWNrT2Zmc2V0KHRyYW5zaXRpb24t
Pm1fb2Zmc2V0LCB0cmFuc2l0aW9uLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBzdHJ1Y3R1cmUt
Pm1fdHJhbnNpdGlvblRhYmxlLmFkZChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKTsKKyAgICBzdHJ1
Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmFkZCh2bSwgdHJhbnNpdGlvbik7CiAgICAgdHJhbnNp
dGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwogICAgIHN0cnVjdHVyZS0+Y2hlY2tPZmZz
ZXRDb25zaXN0ZW5jeSgpOwogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCi1TdHJ1Y3R1cmUq
IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5T2Zmc2V0JiBvZmZzZXQpCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVy
dHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCiB7CiAgICAgQVNTRVJUKCFzdHJ1
Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOwogCi0gICAgU3RydWN0dXJlKiB0cmFu
c2l0aW9uID0gdG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0
cnVjdHVyZSk7CisgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gdG9VbmNhY2hlYWJsZURpY3Rp
b25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUpOwogCiAgICAgb2Zmc2V0ID0gdHJhbnNpdGlv
bi0+cmVtb3ZlKHByb3BlcnR5TmFtZSk7CiAKQEAgLTQwMSwxNCArNDAxLDE0IEBAIFN0cnVjdHVy
ZSogU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW4KICAgICByZXR1cm4gdHJhbnNpdGlvbjsK
IH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24oSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNWYWx1ZSBwcm90
b3R5cGUpCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsKLSAgICBT
dHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKKyAg
ICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAKLSAgICB0
cmFuc2l0aW9uLT5tX3Byb3RvdHlwZS5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgcHJvdG90
eXBlKTsKKyAgICB0cmFuc2l0aW9uLT5tX3Byb3RvdHlwZS5zZXQodm0sIHRyYW5zaXRpb24sIHBy
b3RvdHlwZSk7CiAKLSAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vz
c2FyeShnbG9iYWxEYXRhKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KGds
b2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5u
aW5nKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pKTsKKyAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXpl
UHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSk7CisgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJs
ZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBp
bm5pbmcodm0sIHRyYW5zaXRpb24pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVj
dHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+cGluKCk7CiAKQEAgLTQxNiwyMiArNDE2
LDIyIEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmEKICAgICByZXR1
cm4gdHJhbnNpdGlvbjsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0
aW9uVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBQcm9wZXJ0eU5hbWUgcmVwbGFjZUZ1bmN0aW9uKQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OmRlc3BlY2lmeUZ1bmN0aW9uVHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBQcm9wZXJ0eU5hbWUgcmVwbGFjZUZ1bmN0aW9uKQogewogICAgIEFTU0VSVChzdHJ1Y3R1cmUt
Pm1fc3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50IDwgbWF4U3BlY2lmaWNGdW5jdGlvblRocmFz
aENvdW50KTsKLSAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVj
dHVyZSk7CiAKICAgICArK3RyYW5zaXRpb24tPm1fc3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50
OwogCi0gICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xv
YmFsRGF0YSk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldChnbG9iYWxEYXRh
LCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9i
YWxEYXRhLCB0cmFuc2l0aW9uKSk7CisgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5
TWFwSWZOZWNlc3Nhcnkodm0pOworICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQo
dm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZt
LCB0cmFuc2l0aW9uKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1f
b2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPnBpbigpOwogCiAgICAgaWYgKHRyYW5zaXRpb24tPm1f
c3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50ID09IG1heFNwZWNpZmljRnVuY3Rpb25UaHJhc2hD
b3VudCkKLSAgICAgICAgdHJhbnNpdGlvbi0+ZGVzcGVjaWZ5QWxsRnVuY3Rpb25zKGdsb2JhbERh
dGEpOworICAgICAgICB0cmFuc2l0aW9uLT5kZXNwZWNpZnlBbGxGdW5jdGlvbnModm0pOwogICAg
IGVsc2UgewotICAgICAgICBib29sIHJlbW92ZWQgPSB0cmFuc2l0aW9uLT5kZXNwZWNpZnlGdW5j
dGlvbihnbG9iYWxEYXRhLCByZXBsYWNlRnVuY3Rpb24pOworICAgICAgICBib29sIHJlbW92ZWQg
PSB0cmFuc2l0aW9uLT5kZXNwZWNpZnlGdW5jdGlvbih2bSwgcmVwbGFjZUZ1bmN0aW9uKTsKICAg
ICAgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKICAgICB9CiAKQEAgLTQzOSwx
MyArNDM5LDEzIEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpkZXNwZWNpZnlGdW5jdGlvblQKICAg
ICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmF0dHJpYnV0
ZUNoYW5nZVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcykK
K1N0cnVjdHVyZSogU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMpCiB7CiAgICAgaWYgKCFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9u
YXJ5KCkpIHsKLSAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKGdsb2JhbERh
dGEsIHN0cnVjdHVyZSk7CisgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2
bSwgc3RydWN0dXJlKTsKIAotICAgICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlN
YXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICAgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlU
YWJsZSgpLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0
eVRhYmxlRm9yUGlubmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKSk7CisgICAgICAgIHN0cnVj
dHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtKTsKKyAgICAgICAgdHJh
bnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5j
b3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0sIHRyYW5zaXRpb24pKTsKICAgICAgICAgdHJh
bnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgICAgICB0cmFuc2l0
aW9uLT5waW4oKTsKICAgICAgICAgCkBAIC00NjEsMTQgKzQ2MSwxNCBAQCBTdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhCiAgICAgcmV0dXJuIHN0cnVjdHVyZTsKIH0KIAot
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGljdGlvbmFyeUtpbmQga2luZCkK
K1N0cnVjdHVyZSogU3RydWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIERpY3Rpb25hcnlLaW5kIGtpbmQpCiB7CiAgICAgQVNTRVJUKCFz
dHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOwogICAgIAotICAgIFN0cnVjdHVy
ZSogdHJhbnNpdGlvbiA9IGNyZWF0ZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOworICAgIFN0cnVj
dHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKIAotICAgIHN0cnVjdHVy
ZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KGdsb2JhbERhdGEpOwotICAgIHRy
YW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3Ry
dWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwgdHJhbnNpdGlv
bikpOworICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZt
KTsKKyAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBz
dHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSwgdHJhbnNpdGlvbikpOwog
ICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKICAgICB0cmFu
c2l0aW9uLT5tX2RpY3Rpb25hcnlLaW5kID0ga2luZDsKICAgICB0cmFuc2l0aW9uLT5waW4oKTsK
QEAgLTQ3NywyMCArNDc3LDIwIEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjp0b0RpY3Rpb25hcnlU
cmFuc2kKICAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OnRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjp0b0NhY2hlYWJs
ZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0g
ICAgcmV0dXJuIHRvRGljdGlvbmFyeVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBD
YWNoZWREaWN0aW9uYXJ5S2luZCk7CisgICAgcmV0dXJuIHRvRGljdGlvbmFyeVRyYW5zaXRpb24o
dm0sIHN0cnVjdHVyZSwgQ2FjaGVkRGljdGlvbmFyeUtpbmQpOwogfQogCi1TdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6dG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
dG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiB7Ci0gICAgcmV0dXJuIHRvRGljdGlvbmFyeVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwg
c3RydWN0dXJlLCBVbmNhY2hlZERpY3Rpb25hcnlLaW5kKTsKKyAgICByZXR1cm4gdG9EaWN0aW9u
YXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBVbmNhY2hlZERpY3Rpb25hcnlLaW5kKTsKIH0K
IAogLy8gSW4gZnV0dXJlIHdlIG1heSB3YW50IHRvIGNhY2hlIHRoaXMgdHJhbnNpdGlvbi4KLVN0
cnVjdHVyZSogU3RydWN0dXJlOjpzZWFsVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnNlYWxUcmFu
c2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgU3RydWN0dXJlKiB0
cmFuc2l0aW9uID0gcHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVj
dHVyZSk7CisgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gcHJldmVudEV4dGVuc2lvbnNUcmFu
c2l0aW9uKHZtLCBzdHJ1Y3R1cmUpOwogCiAgICAgaWYgKHRyYW5zaXRpb24tPnByb3BlcnR5VGFi
bGUoKSkgewogICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSB0cmFuc2l0aW9u
LT5wcm9wZXJ0eVRhYmxlKCktPmVuZCgpOwpAQCAtNTAzLDkgKzUwMyw5IEBAIFN0cnVjdHVyZSog
U3RydWN0dXJlOjpzZWFsVHJhbnNpdGlvbihKU0cKIH0KIAogLy8gSW4gZnV0dXJlIHdlIG1heSB3
YW50IHRvIGNhY2hlIHRoaXMgdHJhbnNpdGlvbi4KLVN0cnVjdHVyZSogU3RydWN0dXJlOjpmcmVl
emVUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZnJlZXplVHJhbnNpdGlvbihWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogewotICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHByZXZlbnRF
eHRlbnNpb25zVHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOworICAgIFN0cnVjdHVy
ZSogdHJhbnNpdGlvbiA9IHByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbih2bSwgc3RydWN0dXJl
KTsKIAogICAgIGlmICh0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkpIHsKICAgICAgICAgUHJv
cGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS0+
YmVnaW4oKTsKQEAgLTUyMSwxNCArNTIxLDE0IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpmcmVl
emVUcmFuc2l0aW9uKEoKIH0KIAogLy8gSW4gZnV0dXJlIHdlIG1heSB3YW50IHRvIGNhY2hlIHRo
aXMgdHJhbnNpdGlvbi4KLVN0cnVjdHVyZSogU3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1Ry
YW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
K1N0cnVjdHVyZSogU3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24oVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBj
cmVhdGUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24g
PSBjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAKICAgICAvLyBEb24ndCBzZXQgbV9vZmZzZXQsIGFz
IG9uZSBjYW4gbm90IHRyYW5zaXRpb24gdG8gdGhpcy4KIAotICAgIHN0cnVjdHVyZS0+bWF0ZXJp
YWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KGdsb2JhbERhdGEpOwotICAgIHRyYW5zaXRpb24t
PnByb3BlcnR5VGFibGUoKS5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5j
b3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbikpOworICAg
IHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtKTsKKyAgICB0
cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUt
PmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSwgdHJhbnNpdGlvbikpOwogICAgIHRyYW5z
aXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKICAgICB0cmFuc2l0aW9uLT5t
X3ByZXZlbnRFeHRlbnNpb25zID0gdHJ1ZTsKICAgICB0cmFuc2l0aW9uLT5waW4oKTsKQEAgLTUz
NywxNyArNTM3LDE3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1QK
ICAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KIAotUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjp0
YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogb3duZXIpCitQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OnRha2VQcm9wZXJ0
eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJiB2bSwgU3RydWN0dXJlKiBvd25lcikKIHsKLSAgICBt
YXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5nKGdsb2JhbERhdGEpOwor
ICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcodm0pOwogICAg
IGlmIChtX2lzUGlubmVkUHJvcGVydHlUYWJsZSkKLSAgICAgICAgcmV0dXJuIHByb3BlcnR5VGFi
bGUoKS0+Y29weShnbG9iYWxEYXRhLCBvd25lciwgcHJvcGVydHlUYWJsZSgpLT5zaXplKCkgKyAx
KTsKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5VGFibGUoKS0+Y29weSh2bSwgb3duZXIsIHByb3Bl
cnR5VGFibGUoKS0+c2l6ZSgpICsgMSk7CiAgICAgUHJvcGVydHlUYWJsZSogdGFrZW5Qcm9wZXJ0
eVRhYmxlID0gcHJvcGVydHlUYWJsZSgpLmdldCgpOwogICAgIHByb3BlcnR5VGFibGUoKS5jbGVh
cigpOwogICAgIHJldHVybiB0YWtlblByb3BlcnR5VGFibGU7CiB9CiAKLVN0cnVjdHVyZSogU3Ry
dWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb25LaW5k
KQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbktpbmQp
CiB7CiAgICAgdW5zaWduZWQgYXR0cmlidXRlcyA9IHRvQXR0cmlidXRlcyh0cmFuc2l0aW9uS2lu
ZCk7CiAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IG5ld0luZGV4aW5nVHlwZShzdHJ1
Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSwgdHJhbnNpdGlvbktpbmQpOwpA
QCAtNTY4LDI2ICs1NjgsMjYgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJh
bnNpdAogICAgICAgICByZXR1cm4gZXhpc3RpbmdUcmFuc2l0aW9uOwogICAgIH0KICAgICAKLSAg
ICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsK
LSAgICB0cmFuc2l0aW9uLT5zZXRQcmV2aW91c0lEKGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0
cnVjdHVyZSk7CisgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1
cmUpOworICAgIHRyYW5zaXRpb24tPnNldFByZXZpb3VzSUQodm0sIHRyYW5zaXRpb24sIHN0cnVj
dHVyZSk7CiAgICAgdHJhbnNpdGlvbi0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA9IGF0dHJpYnV0
ZXM7CiAgICAgdHJhbnNpdGlvbi0+bV9pbmRleGluZ1R5cGUgPSBpbmRleGluZ1R5cGU7Ci0gICAg
dHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBz
dHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKGdsb2JhbERhdGEsIHRy
YW5zaXRpb24pKTsKKyAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFu
c2l0aW9uLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZtLCB0
cmFuc2l0aW9uKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zm
c2V0OwogICAgIGNoZWNrT2Zmc2V0KHRyYW5zaXRpb24tPm1fb2Zmc2V0LCB0cmFuc2l0aW9uLT5p
bmxpbmVDYXBhY2l0eSgpKTsKICAgICAKLSAgICBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxl
LmFkZChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKTsKKyAgICBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlv
blRhYmxlLmFkZCh2bSwgdHJhbnNpdGlvbik7CiAgICAgdHJhbnNpdGlvbi0+Y2hlY2tPZmZzZXRD
b25zaXN0ZW5jeSgpOwogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCiAvLyBJbiBmdXR1cmUg
d2UgbWF5IHdhbnQgdG8gY2FjaGUgdGhpcyBwcm9wZXJ0eS4KLWJvb2wgU3RydWN0dXJlOjppc1Nl
YWxlZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitib29sIFN0cnVjdHVyZTo6aXNTZWFsZWQo
Vk0mIHZtKQogewogICAgIGlmIChpc0V4dGVuc2libGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KGdsb2JhbERhdGEpOwor
ICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSk7CiAgICAgaWYgKCFwcm9w
ZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC02MDAsMTIgKzYwMCwxMiBA
QCBib29sIFN0cnVjdHVyZTo6aXNTZWFsZWQoSlNHbG9iYWxEYXRhJiBnCiB9CiAKIC8vIEluIGZ1
dHVyZSB3ZSBtYXkgd2FudCB0byBjYWNoZSB0aGlzIHByb3BlcnR5LgotYm9vbCBTdHJ1Y3R1cmU6
OmlzRnJvemVuKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK2Jvb2wgU3RydWN0dXJlOjppc0Zy
b3plbihWTSYgdm0pCiB7CiAgICAgaWYgKGlzRXh0ZW5zaWJsZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0
YSk7CisgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtKTsKICAgICBpZiAo
IXByb3BlcnR5VGFibGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTYxOSw3ICs2MTks
NyBAQCBib29sIFN0cnVjdHVyZTo6aXNGcm96ZW4oSlNHbG9iYWxEYXRhJiBnCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLVN0cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVN0cnVj
dHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTT2JqZWN0KiBvYmplY3QpCitTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUoVk0mIHZtLCBKU09iamVj
dCogb2JqZWN0KQogewogICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKICAgICBBU1NFUlQo
aXNEaWN0aW9uYXJ5KCkpOwpAQCAtNjQyLDcgKzY0Miw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJl
OjpmbGF0dGVuRGljdGlvbmFyeVMKICAgICAgICAgCiAgICAgICAgIC8vIENvcGllcyBpbiBvdXIg
dmFsdWVzIHRvIHRoZWlyIGNvbXBhY3RlZCBsb2NhdGlvbnMuCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwcm9wZXJ0eUNvdW50OyBpKyspCi0gICAgICAgICAgICBvYmplY3QtPnB1
dERpcmVjdChnbG9iYWxEYXRhLCBvZmZzZXRGb3JQcm9wZXJ0eU51bWJlcihpLCBtX2lubGluZUNh
cGFjaXR5KSwgdmFsdWVzW2ldKTsKKyAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBv
ZmZzZXRGb3JQcm9wZXJ0eU51bWJlcihpLCBtX2lubGluZUNhcGFjaXR5KSwgdmFsdWVzW2ldKTsK
IAogICAgICAgICBwcm9wZXJ0eVRhYmxlKCktPmNsZWFyRGVsZXRlZE9mZnNldHMoKTsKICAgICAg
ICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwpAQCAtNjUyLDI2ICs2NTIsMjYgQEAgU3RydWN0
dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5UwogICAgIHJldHVybiB0aGlzOwogfQog
Ci1Qcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24o
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUpCitQcm9wZXJ0eU9mZnNldCBT
dHJ1Y3R1cmU6OmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFs
dWUpCiB7CiAgICAgQVNTRVJUKCFlbnVtZXJhdGlvbkNhY2hlKCkpOwogCiAgICAgaWYgKG1fc3Bl
Y2lmaWNGdW5jdGlvblRocmFzaENvdW50ID09IG1heFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3Vu
dCkKICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7CiAKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5
TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5nKGdsb2JhbERhdGEpOworICAgIG1hdGVyaWFsaXplUHJv
cGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcodm0pOwogICAgIAogICAgIHBpbigpOwogCi0g
ICAgcmV0dXJuIHB1dFNwZWNpZmljVmFsdWUoZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lLCBhdHRy
aWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICByZXR1cm4gcHV0U3BlY2lmaWNWYWx1ZSh2bSwg
cHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKIH0KIAotUHJvcGVydHlP
ZmZzZXQgU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK1Byb3BlcnR5T2Zm
c2V0IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgQVNTRVJUKGlzVW5jYWNoZWFibGVEaWN0
aW9uYXJ5KCkpOwogICAgIEFTU0VSVCghZW51bWVyYXRpb25DYWNoZSgpKTsKIAotICAgIG1hdGVy
aWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcoZ2xvYmFsRGF0YSk7CisgICAg
bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmluZyh2bSk7CiAKICAgICBw
aW4oKTsKICAgICByZXR1cm4gcmVtb3ZlKHByb3BlcnR5TmFtZSk7CkBAIC02ODUsMjAgKzY4NSwy
MCBAQCB2b2lkIFN0cnVjdHVyZTo6cGluKCkKICAgICBtX25hbWVJblByZXZpb3VzLmNsZWFyKCk7
CiB9CiAKLXZvaWQgU3RydWN0dXJlOjphbGxvY2F0ZVJhcmVEYXRhKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSkKK3ZvaWQgU3RydWN0dXJlOjphbGxvY2F0ZVJhcmVEYXRhKFZNJiB2bSkKIHsKICAg
ICBBU1NFUlQoIXR5cGVJbmZvKCkuc3RydWN0dXJlSGFzUmFyZURhdGEoKSk7Ci0gICAgU3RydWN0
dXJlUmFyZURhdGEqIHJhcmVEYXRhID0gU3RydWN0dXJlUmFyZURhdGE6OmNyZWF0ZShnbG9iYWxE
YXRhLCBwcmV2aW91cygpKTsKKyAgICBTdHJ1Y3R1cmVSYXJlRGF0YSogcmFyZURhdGEgPSBTdHJ1
Y3R1cmVSYXJlRGF0YTo6Y3JlYXRlKHZtLCBwcmV2aW91cygpKTsKICAgICBtX3R5cGVJbmZvID0g
VHlwZUluZm8odHlwZUluZm8oKS50eXBlKCksIHR5cGVJbmZvKCkuZmxhZ3MoKSB8IFN0cnVjdHVy
ZUhhc1JhcmVEYXRhKTsKLSAgICBtX3ByZXZpb3VzT3JSYXJlRGF0YS5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgcmFyZURhdGEpOworICAgIG1fcHJldmlvdXNPclJhcmVEYXRhLnNldCh2bSwgdGhpcywg
cmFyZURhdGEpOwogfQogCi12b2lkIFN0cnVjdHVyZTo6Y2xvbmVSYXJlRGF0YUZyb20oSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTdHJ1Y3R1cmUqIG90aGVyKQordm9pZCBTdHJ1Y3R1
cmU6OmNsb25lUmFyZURhdGFGcm9tKFZNJiB2bSwgY29uc3QgU3RydWN0dXJlKiBvdGhlcikKIHsK
ICAgICBBU1NFUlQob3RoZXItPnR5cGVJbmZvKCkuc3RydWN0dXJlSGFzUmFyZURhdGEoKSk7Ci0g
ICAgU3RydWN0dXJlUmFyZURhdGEqIG5ld1JhcmVEYXRhID0gU3RydWN0dXJlUmFyZURhdGE6OmNs
b25lKGdsb2JhbERhdGEsIG90aGVyLT5yYXJlRGF0YSgpKTsKKyAgICBTdHJ1Y3R1cmVSYXJlRGF0
YSogbmV3UmFyZURhdGEgPSBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2xvbmUodm0sIG90aGVyLT5yYXJl
RGF0YSgpKTsKICAgICBtX3R5cGVJbmZvID0gVHlwZUluZm8odHlwZUluZm8oKS50eXBlKCksIHR5
cGVJbmZvKCkuZmxhZ3MoKSB8IFN0cnVjdHVyZUhhc1JhcmVEYXRhKTsKLSAgICBtX3ByZXZpb3Vz
T3JSYXJlRGF0YS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgbmV3UmFyZURhdGEpOworICAgIG1fcHJl
dmlvdXNPclJhcmVEYXRhLnNldCh2bSwgdGhpcywgbmV3UmFyZURhdGEpOwogfQogCiAjaWYgRFVN
UF9QUk9QRVJUWU1BUF9TVEFUUwpAQCAtNzI5LDI1ICs3MjksMjUgQEAgaW5saW5lIHZvaWQgU3Ry
dWN0dXJlOjpjaGVja0NvbnNpc3RlbmN5KAogCiAjZW5kaWYKIAotUHJvcGVydHlUYWJsZSogU3Ry
dWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVj
dHVyZSogb3duZXIpCitQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxl
KFZNJiB2bSwgU3RydWN0dXJlKiBvd25lcikKIHsKICAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkK
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKGdsb2Jh
bERhdGEsIG93bmVyLCAqcHJvcGVydHlUYWJsZSgpLmdldCgpKTsKKyAgICByZXR1cm4gUHJvcGVy
dHlUYWJsZTo6Y2xvbmUodm0sIG93bmVyLCAqcHJvcGVydHlUYWJsZSgpLmdldCgpKTsKIH0KIAot
UHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG93bmVyKQorUHJvcGVydHlUYWJsZSog
U3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoVk0mIHZtLCBTdHJ1Y3R1cmUq
IG93bmVyKQogewogICAgIGlmIChwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybiBQcm9w
ZXJ0eVRhYmxlOjpjbG9uZShnbG9iYWxEYXRhLCBvd25lciwgKnByb3BlcnR5VGFibGUoKS5nZXQo
KSk7Ci0gICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNyZWF0ZShnbG9iYWxEYXRhLCBudW1iZXJP
ZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpOworICAgICAg
ICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUodm0sIG93bmVyLCAqcHJvcGVydHlUYWJsZSgp
LmdldCgpKTsKKyAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y3JlYXRlKHZtLCBudW1iZXJPZlNs
b3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpOwogfQogCi1Qcm9w
ZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBKU0NlbGwqJiBzcGVj
aWZpY1ZhbHVlKQorUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgSlNDZWxsKiYgc3BlY2lm
aWNWYWx1ZSkKIHsKICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09ICZzX2lu
Zm8pOwogCi0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KGdsb2JhbERhdGEp
OworICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSk7CiAgICAgaWYgKCFw
cm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwogCkBAIC03NjAs
OSArNzYwLDkgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoSlNHbG9iYWxEYQogICAg
IHJldHVybiBlbnRyeS0+b2Zmc2V0OwogfQogCi1ib29sIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVu
Y3Rpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
KQorYm9vbCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSkKIHsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnko
Z2xvYmFsRGF0YSk7CisgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtKTsK
ICAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC03
NzUsOSArNzc1LDkgQEAgYm9vbCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uKEpTR2xvYgog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5QWxsRnVuY3Rp
b25zKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgU3RydWN0dXJlOjpkZXNwZWNpZnlB
bGxGdW5jdGlvbnMoVk0mIHZtKQogewotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vz
c2FyeShnbG9iYWxEYXRhKTsKKyAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnko
dm0pOwogICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTc4
Niw5ICs3ODYsOSBAQCB2b2lkIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5QWxsRnVuY3Rpb25zKEpTCiAg
ICAgICAgIGl0ZXItPnNwZWNpZmljVmFsdWUuY2xlYXIoKTsKIH0KIAotUHJvcGVydHlPZmZzZXQg
U3RydWN0dXJlOjpwdXRTcGVjaWZpY1ZhbHVlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVj
aWZpY1ZhbHVlKQorUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpwdXRTcGVjaWZpY1ZhbHVlKFZN
JiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlND
ZWxsKiBzcGVjaWZpY1ZhbHVlKQogewotICAgIEFTU0VSVCghSlNDOjppc1ZhbGlkT2Zmc2V0KGdl
dChnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUpKSk7CisgICAgQVNTRVJUKCFKU0M6OmlzVmFsaWRP
ZmZzZXQoZ2V0KHZtLCBwcm9wZXJ0eU5hbWUpKSk7CiAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7
CiAgICAgaWYgKGF0dHJpYnV0ZXMgJiBEb250RW51bSkKQEAgLTc5NywxMSArNzk3LDExIEBAIFBy
b3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cHV0U3BlY2lmaWNWYWwKICAgICBTdHJpbmdJbXBsKiBy
ZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CiAKICAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKLSAg
ICAgICAgY3JlYXRlUHJvcGVydHlNYXAoZ2xvYmFsRGF0YSk7CisgICAgICAgIGNyZWF0ZVByb3Bl
cnR5TWFwKHZtKTsKIAogICAgIFByb3BlcnR5T2Zmc2V0IG5ld09mZnNldCA9IHByb3BlcnR5VGFi
bGUoKS0+bmV4dE9mZnNldChtX2lubGluZUNhcGFjaXR5KTsKIAotICAgIHByb3BlcnR5VGFibGUo
KS0+YWRkKFByb3BlcnR5TWFwRW50cnkoZ2xvYmFsRGF0YSwgdGhpcywgcmVwLCBuZXdPZmZzZXQs
IGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpLCBtX29mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJv
cGVydHlPZmZzZXRNYXlDaGFuZ2UpOworICAgIHByb3BlcnR5VGFibGUoKS0+YWRkKFByb3BlcnR5
TWFwRW50cnkodm0sIHRoaXMsIHJlcCwgbmV3T2Zmc2V0LCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1Zh
bHVlKSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0TWF5Q2hhbmdlKTsK
ICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgcmV0dXJuIG5ld09mZnNldDsKQEAg
LTgyOSwxNyArODI5LDE3IEBAIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFByb3Bl
cnQKICAgICByZXR1cm4gb2Zmc2V0OwogfQogCi12b2lkIFN0cnVjdHVyZTo6Y3JlYXRlUHJvcGVy
dHlNYXAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBjYXBhY2l0eSkKK3ZvaWQg
U3RydWN0dXJlOjpjcmVhdGVQcm9wZXJ0eU1hcChWTSYgdm0sIHVuc2lnbmVkIGNhcGFjaXR5KQog
ewogICAgIEFTU0VSVCghcHJvcGVydHlUYWJsZSgpKTsKIAogICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKLSAgICBwcm9wZXJ0eVRhYmxlKCkuc2V0KGdsb2JhbERhdGEsIHRoaXMsIFByb3BlcnR5VGFi
bGU6OmNyZWF0ZShnbG9iYWxEYXRhLCBjYXBhY2l0eSkpOworICAgIHByb3BlcnR5VGFibGUoKS5z
ZXQodm0sIHRoaXMsIFByb3BlcnR5VGFibGU6OmNyZWF0ZSh2bSwgY2FwYWNpdHkpKTsKIH0KIAot
dm9pZCBTdHJ1Y3R1cmU6OmdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0
aW9uTW9kZSBtb2RlKQordm9pZCBTdHJ1Y3R1cmU6OmdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0
dXJlKFZNJiB2bSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQogewotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9i
YWxEYXRhKTsKKyAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0pOwogICAg
IGlmICghcHJvcGVydHlUYWJsZSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTg4Niw3ICs4ODYs
NyBAQCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgICAgIHRo
aXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZS5jbGVhcigpOwogfQogCi1ib29sIFN0cnVj
dHVyZTo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK2Jvb2wgU3RydWN0dXJlOjpwcm90
b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lKQogewogICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwogICAg
IGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKQEAgLTkwMSw3ICs5MDEsNyBAQCBi
b29sIFN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlCiAgICAgICAgIAogICAgICAg
ICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwogICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7Ci0g
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGN1cnJlbnQtPmdldChnbG9iYWxEYXRhLCBw
cm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSBjdXJyZW50LT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRl
cywgc3BlY2lmaWNWYWx1ZSk7CiAgICAgICAgIGlmICghSlNDOjppc1ZhbGlkT2Zmc2V0KG9mZnNl
dCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5
LDU3ICs2OSw1NyBAQCBwdWJsaWM6CiAKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogCi0gICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZvKiwgSW5k
ZXhpbmdUeXBlID0gTm9uQXJyYXksIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5ID0gMCk7CisgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHBy
b3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8qLCBJbmRleGluZ1R5cGUg
PSBOb25BcnJheSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkgPSAwKTsKIAogcHJvdGVjdGVkOgot
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIHsKLSAgICAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAg
ICAgICAgQVNTRVJUKG1fcHJvdG90eXBlKTsKICAgICAgICAgQVNTRVJUKG1fcHJvdG90eXBlLmlz
T2JqZWN0KCkgfHwgbV9wcm90b3R5cGUuaXNOdWxsKCkpOwogICAgIH0KIAotICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDcmVhdGluZ0Vhcmx5Q2VsbFRh
ZykKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSwgQ3JlYXRpbmdFYXJseUNlbGxUYWcp
CiAgICAgewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCB0aGlzLCBD
cmVhdGluZ0Vhcmx5Q2VsbCk7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCB0aGlz
LCBDcmVhdGluZ0Vhcmx5Q2VsbCk7CiAgICAgICAgIEFTU0VSVChtX3Byb3RvdHlwZSk7CiAgICAg
ICAgIEFTU0VSVChtX3Byb3RvdHlwZS5pc051bGwoKSk7Ci0gICAgICAgIEFTU0VSVCghZ2xvYmFs
RGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUpOworICAgICAgICBBU1NFUlQoIXZtLnN0cnVjdHVyZVN0
cnVjdHVyZSk7CiAgICAgfQogCiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcFN0YXRpc3Rp
Y3MoKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3Bl
cnR5VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQm
KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBhZGRQcm9wZXJ0eVRy
YW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQmKTsKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0
aW5nU3RydWN0dXJlKFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRl
cywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYpOwotICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIHJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1
cmUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0Jik7Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIFN0cnVjdHVyZSogY2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihKU0dsb2JhbERh
dGEmLCBTdHJ1Y3R1cmUqLCBKU1ZhbHVlIHByb3RvdHlwZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIFN0cnVjdHVyZSogZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKEpTR2xvYmFs
RGF0YSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgc3RhdGljIFN0cnVjdHVyZSog
YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBQcm9w
ZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRv
Q2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7
Ci0gICAgc3RhdGljIFN0cnVjdHVyZSogdG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9u
KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHNlYWxU
cmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwotICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGZyZWV6ZVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7Ci0gICAgc3Rh
dGljIFN0cnVjdHVyZSogcHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYs
IFN0cnVjdHVyZSopOwotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIG5vblByb3BlcnR5VHJhbnNpdGlv
bihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24pOworICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIHJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVy
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgU3RydWN0dXJlKiBjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKFZNJiwgU3RydWN0
dXJlKiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBT
dHJ1Y3R1cmUqIGRlc3BlY2lmeUZ1bmN0aW9uVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFBy
b3BlcnR5TmFtZSk7CisgICAgc3RhdGljIFN0cnVjdHVyZSogYXR0cmlidXRlQ2hhbmdlVHJhbnNp
dGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7
CisgICAgc3RhdGljIFN0cnVjdHVyZSogdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihW
TSYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvVW5jYWNoZWFibGVEaWN0
aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IHNlYWxUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIFN0cnVjdHVyZSog
ZnJlZXplVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IHByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOworICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIG5vblByb3BlcnR5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIE5vblBy
b3BlcnR5VHJhbnNpdGlvbik7CiAKLSAgICBib29sIGlzU2VhbGVkKEpTR2xvYmFsRGF0YSYpOwot
ICAgIGJvb2wgaXNGcm96ZW4oSlNHbG9iYWxEYXRhJik7CisgICAgYm9vbCBpc1NlYWxlZChWTSYp
OworICAgIGJvb2wgaXNGcm96ZW4oVk0mKTsKICAgICBib29sIGlzRXh0ZW5zaWJsZSgpIGNvbnN0
IHsgcmV0dXJuICFtX3ByZXZlbnRFeHRlbnNpb25zOyB9CiAgICAgYm9vbCBkaWRUcmFuc2l0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9kaWRUcmFuc2l0aW9uOyB9CiAgICAgYm9vbCBwdXRXaWxsR3Jv
d091dE9mTGluZVN0b3JhZ2UoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgc3VnZ2Vz
dGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCk7IAogCi0gICAgU3RydWN0dXJlKiBmbGF0
dGVuRGljdGlvbmFyeVN0cnVjdHVyZShKU0dsb2JhbERhdGEmLCBKU09iamVjdCopOworICAgIFN0
cnVjdHVyZSogZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUoVk0mLCBKU09iamVjdCopOwogCiAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzSW1tb3J0YWxTdHJ1Y3R1cmUgPSB0cnVlOwogICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICAvLyBUaGVzZSBzaG91bGQgYmUgdXNlZCB3aXRoIGNh
dXRpb24uICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eU9mZnNldCBhZGRQcm9wZXJ0
eVdpdGhvdXRUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQg
YXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKTsKLSAgICBQcm9wZXJ0eU9mZnNldCBy
ZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFt
ZSk7Ci0gICAgdm9pZCBzZXRQcm90b3R5cGVXaXRob3V0VHJhbnNpdGlvbihKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKSB7IG1fcHJvdG90eXBlLnNldChnbG9iYWxE
YXRhLCB0aGlzLCBwcm90b3R5cGUpOyB9CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlP
ZmZzZXQgYWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSwgdW5z
aWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKTsKKyAgICBQcm9wZXJ0eU9m
ZnNldCByZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lKTsK
KyAgICB2b2lkIHNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgSlNWYWx1ZSBw
cm90b3R5cGUpIHsgbV9wcm90b3R5cGUuc2V0KHZtLCB0aGlzLCBwcm90b3R5cGUpOyB9CiAgICAg
ICAgIAogICAgIGJvb2wgaXNEaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4gbV9kaWN0aW9uYXJ5
S2luZCAhPSBOb25lRGljdGlvbmFyeUtpbmQ7IH0KICAgICBib29sIGlzVW5jYWNoZWFibGVEaWN0
aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4gbV9kaWN0aW9uYXJ5S2luZCA9PSBVbmNhY2hlZERpY3Rp
b25hcnlLaW5kOyB9CkBAIC0xNDQsMTggKzE0NCwxOCBAQCBwdWJsaWM6CiAgICAgTm9uUHJvcGVy
dHlUcmFuc2l0aW9uIHN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSBjb25zdDsKICAg
ICAgICAgCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZ2xvYmFsT2JqZWN0LmdldCgpOyB9Ci0gICAgdm9pZCBzZXRHbG9iYWxPYmplY3QoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSB7IG1fZ2xv
YmFsT2JqZWN0LnNldChnbG9iYWxEYXRhLCB0aGlzLCBnbG9iYWxPYmplY3QpOyB9CisgICAgdm9p
ZCBzZXRHbG9iYWxPYmplY3QoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSB7
IG1fZ2xvYmFsT2JqZWN0LnNldCh2bSwgdGhpcywgZ2xvYmFsT2JqZWN0KTsgfQogICAgICAgICAK
ICAgICBKU1ZhbHVlIHN0b3JlZFByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdG90eXBl
LmdldCgpOyB9CiAgICAgSlNWYWx1ZSBwcm90b3R5cGVGb3JMb29rdXAoRXhlY1N0YXRlKikgY29u
c3Q7CiAgICAgSlNWYWx1ZSBwcm90b3R5cGVGb3JMb29rdXAoSlNHbG9iYWxPYmplY3QqKSBjb25z
dDsKICAgICBKU1ZhbHVlIHByb3RvdHlwZUZvckxvb2t1cChDb2RlQmxvY2sqKSBjb25zdDsKLSAg
ICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4oSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxP
YmplY3QqKSBjb25zdDsKKyAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4oVk0mLCBK
U0dsb2JhbE9iamVjdCopIGNvbnN0OwogICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFp
bihFeGVjU3RhdGUqKSBjb25zdDsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CiAgICAgICAgIAogICAgIC8vIFdpbGwganVzdCB0aGUgcHJvdG90
eXBlIGNoYWluIGludGVyY2VwdCB0aGlzIHByb3BlcnR5IGFjY2Vzcz8KLSAgICBib29sIHByb3Rv
dHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUp
OworICAgIGJvb2wgcHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKFZNJiwgUHJvcGVy
dHlOYW1lKTsKICAgICAgICAgCiAgICAgYm9vbCB0cmFuc2l0aW9uRGlkSW52b2x2ZVNwZWNpZmlj
VmFsdWUoKSBjb25zdCB7IHJldHVybiAhIW1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXM7IH0KICAg
ICAgICAgCkBAIC0yMzEsOSArMjMxLDkgQEAgcHVibGljOgogCiAgICAgYm9vbCBtYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIAotICAg
IFByb3BlcnR5T2Zmc2V0IGdldChKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUpOwotICAgIFBy
b3BlcnR5T2Zmc2V0IGdldChKU0dsb2JhbERhdGEmLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSk7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZzZXQgZ2V0KEpTR2xvYmFsRGF0YSYs
IFByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFs
dWUpOworICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSk7CisgICAgUHJv
cGVydHlPZmZzZXQgZ2V0KFZNJiwgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWdu
ZWQmIGF0dHJpYnV0ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFsdWUpOwogCiAgICAgYm9vbCBoYXNH
ZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNHZXR0ZXJTZXR0ZXJQ
cm9wZXJ0aWVzOyB9CiAgICAgYm9vbCBoYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGll
c0V4Y2x1ZGluZ1Byb3RvKCkgY29uc3QgeyByZXR1cm4gbV9oYXNSZWFkT25seU9yR2V0dGVyU2V0
dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvOyB9CkBAIC0yNTYsMTIgKzI1NiwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiAhSlNDOjppc1ZhbGlkT2Zmc2V0KG1fb2Zmc2V0KTsKICAgICB9
CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGRlc3BlY2lmeURpY3Rpb25hcnlGdW5jdGlv
bihKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0aW9uKFZNJiwgUHJvcGVydHlOYW1lKTsKICAgICB2
b2lkIGRpc2FibGVTcGVjaWZpY0Z1bmN0aW9uVHJhY2tpbmcoKSB7IG1fc3BlY2lmaWNGdW5jdGlv
blRocmFzaENvdW50ID0gbWF4U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50OyB9CiAKLSAgICB2
b2lkIHNldEVudW1lcmF0aW9uQ2FjaGUoSlNHbG9iYWxEYXRhJiwgSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvciogZW51bWVyYXRpb25DYWNoZSk7IC8vIERlZmluZWQgaW4gSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvci5oLgorICAgIHZvaWQgc2V0RW51bWVyYXRpb25DYWNoZShWTSYsIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3IqIGVudW1lcmF0aW9uQ2FjaGUpOyAvLyBEZWZpbmVkIGluIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3IuaC4KICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBlbnVtZXJhdGlvbkNhY2hl
KCk7IC8vIERlZmluZWQgaW4gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oLgotICAgIHZvaWQgZ2V0
UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHZvaWQgZ2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1
Y3R1cmUoVk0mLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKICAgICBK
U1N0cmluZyogb2JqZWN0VG9TdHJpbmdWYWx1ZSgpCiAgICAgewpAQCAtMjcwLDExICsyNzAsMTEg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmFyZURhdGEoKS0+b2JqZWN0VG9TdHJpbmdWYWx1
ZSgpOwogICAgIH0KIAotICAgIHZvaWQgc2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTU3RyaW5nKiB2YWx1ZSkKKyAg
ICB2b2lkIHNldE9iamVjdFRvU3RyaW5nVmFsdWUoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVy
LCBKU1N0cmluZyogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXR5cGVJbmZvKCkuc3RydWN0
dXJlSGFzUmFyZURhdGEoKSkKLSAgICAgICAgICAgIGFsbG9jYXRlUmFyZURhdGEoZ2xvYmFsRGF0
YSk7Ci0gICAgICAgIHJhcmVEYXRhKCktPnNldE9iamVjdFRvU3RyaW5nVmFsdWUoZ2xvYmFsRGF0
YSwgb3duZXIsIHZhbHVlKTsKKyAgICAgICAgICAgIGFsbG9jYXRlUmFyZURhdGEodm0pOworICAg
ICAgICByYXJlRGF0YSgpLT5zZXRPYmplY3RUb1N0cmluZ1ZhbHVlKHZtLCBvd25lciwgdmFsdWUp
OwogICAgIH0KIAogICAgIGJvb2wgc3RhdGljRnVuY3Rpb25zUmVpZmllZCgpCkBAIC0zMTksNyAr
MzE5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVy
ZSwgbV9pbmRleGluZ1R5cGUpOwogICAgIH0KIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mKTsKICAgICAgICAgCiAgICAgYm9vbCB0cmFuc2l0aW9uV2F0Y2hwb2ludFNl
dEhhc0JlZW5JbnZhbGlkYXRlZCgpIGNvbnN0CiAgICAgewpAQCAtMzQ3LDU0ICszNDcsNTQgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xh
c3NJbmZvKiwgSW5kZXhpbmdUeXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSk7Ci0gICAgU3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYpOwotICAgIFN0cnVjdHVyZShKU0dsb2JhbERhdGEmLCBjb25z
dCBTdHJ1Y3R1cmUqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJ1Y3R1cmUoVk0mLCBKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENs
YXNzSW5mbyosIEluZGV4aW5nVHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpOworICAgIFN0
cnVjdHVyZShWTSYpOworICAgIFN0cnVjdHVyZShWTSYsIGNvbnN0IFN0cnVjdHVyZSopOwogCi0g
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFN0cnVjdHVy
ZSopOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZShWTSYsIGNvbnN0IFN0cnVjdHVyZSop
OwogICAgICAgICAKICAgICB0eXBlZGVmIGVudW0geyAKICAgICAgICAgTm9uZURpY3Rpb25hcnlL
aW5kID0gMCwKICAgICAgICAgQ2FjaGVkRGljdGlvbmFyeUtpbmQgPSAxLAogICAgICAgICBVbmNh
Y2hlZERpY3Rpb25hcnlLaW5kID0gMgogICAgIH0gRGljdGlvbmFyeUtpbmQ7Ci0gICAgc3RhdGlj
IFN0cnVjdHVyZSogdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1
cmUqLCBEaWN0aW9uYXJ5S2luZCk7CisgICAgc3RhdGljIFN0cnVjdHVyZSogdG9EaWN0aW9uYXJ5
VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIERpY3Rpb25hcnlLaW5kKTsKIAotICAgIFByb3Bl
cnR5T2Zmc2V0IHB1dFNwZWNpZmljVmFsdWUoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUpOworICAgIFByb3BlcnR5
T2Zmc2V0IHB1dFNwZWNpZmljVmFsdWUoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSk7CiAgICAgUHJvcGVydHlPZmZzZXQgcmVtb3Zl
KFByb3BlcnR5TmFtZSk7CiAKLSAgICB2b2lkIGNyZWF0ZVByb3BlcnR5TWFwKEpTR2xvYmFsRGF0
YSYsIHVuc2lnbmVkIGtleUNvdW50ID0gMCk7CisgICAgdm9pZCBjcmVhdGVQcm9wZXJ0eU1hcChW
TSYsIHVuc2lnbmVkIGtleUNvdW50ID0gMCk7CiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCk7
CiAKLSAgICBib29sIGRlc3BlY2lmeUZ1bmN0aW9uKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFt
ZSk7Ci0gICAgdm9pZCBkZXNwZWNpZnlBbGxGdW5jdGlvbnMoSlNHbG9iYWxEYXRhJik7CisgICAg
Ym9vbCBkZXNwZWNpZnlGdW5jdGlvbihWTSYsIFByb3BlcnR5TmFtZSk7CisgICAgdm9pZCBkZXNw
ZWNpZnlBbGxGdW5jdGlvbnMoVk0mKTsKIAogICAgIFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxl
PiYgcHJvcGVydHlUYWJsZSgpOwotICAgIFByb3BlcnR5VGFibGUqIHRha2VQcm9wZXJ0eVRhYmxl
T3JDbG9uZUlmUGlubmVkKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogb3duZXIpOwotICAgIFBy
b3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSog
b3duZXIpOwotICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhK
U0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG93bmVyKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIG1hdGVyaWFsaXplUHJvcGVydHlNYXAoSlNHbG9iYWxEYXRhJik7Ci0gICAgdm9pZCBtYXRl
cmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQor
ICAgIFByb3BlcnR5VGFibGUqIHRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJiwg
U3RydWN0dXJlKiBvd25lcik7CisgICAgUHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGUo
Vk0mLCBTdHJ1Y3R1cmUqIG93bmVyKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlU
YWJsZUZvclBpbm5pbmcoVk0mLCBTdHJ1Y3R1cmUqIG93bmVyKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIG1hdGVyaWFsaXplUHJvcGVydHlNYXAoVk0mKTsKKyAgICB2b2lkIG1hdGVyaWFs
aXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShWTSYgdm0pCiAgICAgewogICAgICAgICBBU1NFUlQo
c3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09ICZzX2luZm8pOwogICAgICAgICBBU1NFUlQoY2hl
Y2tPZmZzZXRDb25zaXN0ZW5jeSgpKTsKICAgICAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkgJiYg
cHJldmlvdXNJRCgpKQotICAgICAgICAgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChnbG9iYWxE
YXRhKTsKKyAgICAgICAgICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXAodm0pOwogICAgIH0KLSAg
ICB2b2lkIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVj
ZXNzYXJ5Rm9yUGlubmluZyhWTSYgdm0pCiAgICAgewogICAgICAgICBBU1NFUlQoc3RydWN0dXJl
KCktPmNsYXNzSW5mbygpID09ICZzX2luZm8pOwogICAgICAgICBjaGVja09mZnNldENvbnNpc3Rl
bmN5KCk7CiAgICAgICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQotICAgICAgICAgICAgbWF0ZXJp
YWxpemVQcm9wZXJ0eU1hcChnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIG1hdGVyaWFsaXplUHJv
cGVydHlNYXAodm0pOwogICAgIH0KIAotICAgIHZvaWQgc2V0UHJldmlvdXNJRChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogdHJhbnNpdGlvbiwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCisgICAgdm9pZCBzZXRQcmV2aW91c0lEKFZNJiB2bSwgU3RydWN0dXJlKiB0cmFuc2l0aW9u
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIGlmICh0eXBlSW5mbygpLnN0
cnVjdHVyZUhhc1JhcmVEYXRhKCkpCi0gICAgICAgICAgICByYXJlRGF0YSgpLT5zZXRQcmV2aW91
c0lEKGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZSk7CisgICAgICAgICAgICByYXJl
RGF0YSgpLT5zZXRQcmV2aW91c0lEKHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtX3ByZXZpb3VzT3JSYXJlRGF0YS5zZXQoZ2xvYmFsRGF0YSwg
dHJhbnNpdGlvbiwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIG1fcHJldmlvdXNPclJhcmVEYXRh
LnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlKTsKICAgICB9CiAKICAgICB2b2lkIGNsZWFy
UHJldmlvdXNJRCgpCkBAIC00MzAsOCArNDMwLDggQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAg
Ym9vbCBjaGVja09mZnNldENvbnNpc3RlbmN5KCkgY29uc3Q7CiAKLSAgICB2b2lkIGFsbG9jYXRl
UmFyZURhdGEoSlNHbG9iYWxEYXRhJik7Ci0gICAgdm9pZCBjbG9uZVJhcmVEYXRhRnJvbShKU0ds
b2JhbERhdGEmLCBjb25zdCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGFsbG9jYXRlUmFyZURhdGEo
Vk0mKTsKKyAgICB2b2lkIGNsb25lUmFyZURhdGFGcm9tKFZNJiwgY29uc3QgU3RydWN0dXJlKik7
CiAKICAgICBzdGF0aWMgY29uc3QgaW50IHNfbWF4VHJhbnNpdGlvbkxlbmd0aCA9IDY0OwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4u
Y3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVDaGFpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgCiBDbGFzc0luZm8gU3RydWN0dXJlQ2hhaW46OnNfaW5mbyA9IHsgIlN0
cnVjdHVyZUNoYWluIiwgMCwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShTdHJ1Y3R1cmVDaGFp
bikgfTsKIAotU3RydWN0dXJlQ2hhaW46OlN0cnVjdHVyZUNoYWluKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlKQorU3RydWN0dXJlQ2hhaW46OlN0cnVjdHVyZUNoYWluKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBKU0NlbGwodm0sIHN0cnVjdHVyZSkKIHsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCShy
ZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxNiArNDYsMTYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogCi0gICAgICAg
IHN0YXRpYyBTdHJ1Y3R1cmVDaGFpbiogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
U3RydWN0dXJlKiBoZWFkKQorICAgICAgICBzdGF0aWMgU3RydWN0dXJlQ2hhaW4qIGNyZWF0ZShW
TSYgdm0sIFN0cnVjdHVyZSogaGVhZCkKICAgICAgICAgeyAKLSAgICAgICAgICAgIFN0cnVjdHVy
ZUNoYWluKiBjaGFpbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cnVjdHVyZUNoYWlu
PihnbG9iYWxEYXRhLmhlYXApKSBTdHJ1Y3R1cmVDaGFpbihnbG9iYWxEYXRhLCBnbG9iYWxEYXRh
LnN0cnVjdHVyZUNoYWluU3RydWN0dXJlLmdldCgpKTsKLSAgICAgICAgICAgIGNoYWluLT5maW5p
c2hDcmVhdGlvbihnbG9iYWxEYXRhLCBoZWFkKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cnVjdHVyZUNoYWluPih2bS5o
ZWFwKSkgU3RydWN0dXJlQ2hhaW4odm0sIHZtLnN0cnVjdHVyZUNoYWluU3RydWN0dXJlLmdldCgp
KTsKKyAgICAgICAgICAgIGNoYWluLT5maW5pc2hDcmVhdGlvbih2bSwgaGVhZCk7CiAgICAgICAg
ICAgICByZXR1cm4gY2hhaW47CiAgICAgICAgIH0KICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4qIGhlYWQoKSB7IHJldHVybiBtX3ZlY3Rvci5nZXQoKTsgfQogICAgICAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpIHsgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhDb21wb3VuZFR5cGUsIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4pLCAmc19pbmZvKTsg
fQorICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgeyByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDb21w
b3VuZFR5cGUsIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4pLCAmc19pbmZvKTsgfQogICAgICAgICAK
ICAgICAgICAgc3RhdGljIENsYXNzSW5mbyBzX2luZm87CiAKQEAgLTY0LDkgKzY0LDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAg
ICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIGhlYWQpCisgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBTdHJ1Y3R1cmUqIGhlYWQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwogICAgICAgICAgICAgc2l6ZV90IHNpemUgPSAwOwogICAgICAgICAgICAgZm9yIChT
dHJ1Y3R1cmUqIGN1cnJlbnQgPSBoZWFkOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+c3Rv
cmVkUHJvdG90eXBlKCkuaXNOdWxsKCkgPyAwIDogYXNPYmplY3QoY3VycmVudC0+c3RvcmVkUHJv
dG90eXBlKCkpLT5zdHJ1Y3R1cmUoKSkKICAgICAgICAgICAgICAgICArK3NpemU7CkBAIC03NSwx
MyArNzUsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgICAgIHNpemVfdCBpID0gMDsK
ICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlKiBjdXJyZW50ID0gaGVhZDsgY3VycmVudDsgY3Vy
cmVudCA9IGN1cnJlbnQtPnN0b3JlZFByb3RvdHlwZSgpLmlzTnVsbCgpID8gMCA6IGFzT2JqZWN0
KGN1cnJlbnQtPnN0b3JlZFByb3RvdHlwZSgpKS0+c3RydWN0dXJlKCkpCi0gICAgICAgICAgICAg
ICAgbV92ZWN0b3JbaSsrXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgY3VycmVudCk7CisgICAgICAg
ICAgICAgICAgbV92ZWN0b3JbaSsrXS5zZXQodm0sIHRoaXMsIGN1cnJlbnQpOwogICAgICAgICB9
CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOwogICAgICAgICAKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4oSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKik7CisgICAgICAgIFN0cnVjdHVyZUNoYWluKFZNJiwgU3RydWN0dXJlKik7CiAgICAg
ICAgIE93bkFycmF5UHRyPFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+ID4gbV92ZWN0b3I7CiAgICAg
fTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZUlubGluZXMuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwzNSArMzEsMzUg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y3Jl
YXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywgY29uc3QgQ2xh
c3NJbmZvKiBjbGFzc0luZm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUsIHVuc2lnbmVkIGlu
bGluZUNhcGFjaXR5KQoraW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjcmVhdGUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3Qg
VHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgSW5kZXhpbmdU
eXBlIGluZGV4aW5nVHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpCiB7Ci0gICAgQVNTRVJU
KGdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0dXJlKTsKKyAgICBBU1NFUlQodm0uc3RydWN0dXJl
U3RydWN0dXJlKTsKICAgICBBU1NFUlQoY2xhc3NJbmZvKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cnVjdHVyZT4oZ2xvYmFsRGF0YS5o
ZWFwKSkgU3RydWN0dXJlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCB0eXBl
SW5mbywgY2xhc3NJbmZvLCBpbmRleGluZ1R5cGUsIGlubGluZUNhcGFjaXR5KTsKLSAgICBzdHJ1
Y3R1cmUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJlPih2bS5oZWFwKSkgU3Ry
dWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgdHlwZUluZm8sIGNsYXNzSW5mbywg
aW5kZXhpbmdUeXBlLCBpbmxpbmVDYXBhY2l0eSk7CisgICAgc3RydWN0dXJlLT5maW5pc2hDcmVh
dGlvbih2bSk7CiAgICAgcmV0dXJuIHN0cnVjdHVyZTsKIH0KIAotaW5saW5lIFN0cnVjdHVyZSog
U3RydWN0dXJlOjpjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoraW5s
aW5lIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtKQogewotICAg
IEFTU0VSVCghZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUpOwotICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJlPihnbG9iYWxE
YXRhLmhlYXApKSBTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSk7Ci0gICAgc3RydWN0dXJlLT5maW5pc2hD
cmVhdGlvbihnbG9iYWxEYXRhLCBDcmVhdGluZ0Vhcmx5Q2VsbCk7CisgICAgQVNTRVJUKCF2bS5z
dHJ1Y3R1cmVTdHJ1Y3R1cmUpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJlPih2bS5oZWFwKSkgU3RydWN0dXJlKHZtKTsKKyAg
ICBzdHJ1Y3R1cmUtPmZpbmlzaENyZWF0aW9uKHZtLCBDcmVhdGluZ0Vhcmx5Q2VsbCk7CiAgICAg
cmV0dXJuIHN0cnVjdHVyZTsKIH0KIAotaW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjcmVh
dGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
K2lubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y3JlYXRlKFZNJiB2bSwgY29uc3QgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgQVNTRVJUKGdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0
dXJlKTsKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPFN0cnVjdHVyZT4oZ2xvYmFsRGF0YS5oZWFwKSkgU3RydWN0dXJlKGdsb2JhbERhdGEs
IHN0cnVjdHVyZSk7Ci0gICAgbmV3U3RydWN0dXJlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRh
KTsKKyAgICBBU1NFUlQodm0uc3RydWN0dXJlU3RydWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cnVjdHVyZT4odm0uaGVh
cCkpIFN0cnVjdHVyZSh2bSwgc3RydWN0dXJlKTsKKyAgICBuZXdTdHJ1Y3R1cmUtPmZpbmlzaENy
ZWF0aW9uKHZtKTsKICAgICByZXR1cm4gbmV3U3RydWN0dXJlOwogfQogCi1pbmxpbmUgUHJvcGVy
dHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lKQoraW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0
KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBBU1NFUlQoc3RydWN0
dXJlKCktPmNsYXNzSW5mbygpID09ICZzX2luZm8pOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlN
YXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKKyAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZO
ZWNlc3Nhcnkodm0pOwogICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQogICAgICAgICByZXR1cm4g
aW52YWxpZE9mZnNldDsKIApAQCAtNjcsMTAgKzY3LDEwIEBAIGlubGluZSBQcm9wZXJ0eU9mZnNl
dCBTdHJ1Y3R1cmU6OmdldChKU0cKICAgICByZXR1cm4gZW50cnkgPyBlbnRyeS0+b2Zmc2V0IDog
aW52YWxpZE9mZnNldDsKIH0KIAotaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUpCitpbmxp
bmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBjb25zdCBXVEY6OlN0cmlu
ZyYgbmFtZSkKIHsKICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09ICZzX2lu
Zm8pOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsK
KyAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0pOwogICAgIGlmICghcHJv
cGVydHlUYWJsZSgpKQogICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKIApAQCAtMTEzLDEy
ICsxMTMsMTIgQEAgaW5saW5lIGJvb2wgU3RydWN0dXJlOjp0cmFuc2l0aXZlbHlUcmFucwogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotaW5saW5lIHZvaWQgU3RydWN0dXJlOjpzZXRFbnVtZXJhdGlv
bkNhY2hlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciog
ZW51bWVyYXRpb25DYWNoZSkKK2lubGluZSB2b2lkIFN0cnVjdHVyZTo6c2V0RW51bWVyYXRpb25D
YWNoZShWTSYgdm0sIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGVudW1lcmF0aW9uQ2FjaGUpCiB7
CiAgICAgQVNTRVJUKCFpc0RpY3Rpb25hcnkoKSk7CiAgICAgaWYgKCF0eXBlSW5mbygpLnN0cnVj
dHVyZUhhc1JhcmVEYXRhKCkpCi0gICAgICAgIGFsbG9jYXRlUmFyZURhdGEoZ2xvYmFsRGF0YSk7
Ci0gICAgcmFyZURhdGEoKS0+c2V0RW51bWVyYXRpb25DYWNoZShnbG9iYWxEYXRhLCB0aGlzLCBl
bnVtZXJhdGlvbkNhY2hlKTsKKyAgICAgICAgYWxsb2NhdGVSYXJlRGF0YSh2bSk7CisgICAgcmFy
ZURhdGEoKS0+c2V0RW51bWVyYXRpb25DYWNoZSh2bSwgdGhpcywgZW51bWVyYXRpb25DYWNoZSk7
CiB9CiAKIGlubGluZSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBTdHJ1Y3R1cmU6OmVudW1lcmF0
aW9uQ2FjaGUoKQpAQCAtMTQyLDE5ICsxNDIsMTkgQEAgaW5saW5lIEpTVmFsdWUgU3RydWN0dXJl
Ojpwcm90b3R5cGVGb3JMbwogICAgIHJldHVybiBwcm90b3R5cGVGb3JMb29rdXAoZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKTsKIH0KIAotaW5saW5lIFN0cnVjdHVyZUNoYWluKiBTdHJ1Y3R1
cmU6OnByb3RvdHlwZUNoYWluKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkgY29uc3QKK2lubGluZSBTdHJ1Y3R1cmVDaGFpbiogU3RydWN0dXJl
Ojpwcm90b3R5cGVDaGFpbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNv
bnN0CiB7CiAgICAgLy8gV2UgY2FjaGUgb3VyIHByb3RvdHlwZSBjaGFpbiBzbyBvdXIgY2xpZW50
cyBjYW4gc2hhcmUgaXQuCiAgICAgaWYgKCFpc1ZhbGlkKGdsb2JhbE9iamVjdCwgbV9jYWNoZWRQ
cm90b3R5cGVDaGFpbi5nZXQoKSkpIHsKICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBwcm90
b3R5cGVGb3JMb29rdXAoZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgbV9jYWNoZWRQcm90b3R5cGVD
aGFpbi5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgU3RydWN0dXJlQ2hhaW46OmNyZWF0ZShnbG9iYWxE
YXRhLCBwcm90b3R5cGUuaXNOdWxsKCkgPyAwIDogYXNPYmplY3QocHJvdG90eXBlKS0+c3RydWN0
dXJlKCkpKTsKKyAgICAgICAgbV9jYWNoZWRQcm90b3R5cGVDaGFpbi5zZXQodm0sIHRoaXMsIFN0
cnVjdHVyZUNoYWluOjpjcmVhdGUodm0sIHByb3RvdHlwZS5pc051bGwoKSA/IDAgOiBhc09iamVj
dChwcm90b3R5cGUpLT5zdHJ1Y3R1cmUoKSkpOwogICAgIH0KICAgICByZXR1cm4gbV9jYWNoZWRQ
cm90b3R5cGVDaGFpbi5nZXQoKTsKIH0KIAogaW5saW5lIFN0cnVjdHVyZUNoYWluKiBTdHJ1Y3R1
cmU6OnByb3RvdHlwZUNoYWluKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICByZXR1cm4g
cHJvdG90eXBlQ2hhaW4oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpOworICAgIHJldHVybiBwcm90b3R5cGVDaGFpbihleGVjLT52bSgpLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpOwogfQogCiBpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6OmlzVmFsaWQo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlQ2hhaW4qIGNhY2hlZFByb3Rv
dHlwZUNoYWluKSBjb25zdApAQCAtMjAwLDcgKzIwMCw3IEBAIGlubGluZSBib29sIFN0cnVjdHVy
ZTo6cHV0V2lsbEdyb3dPdXRPZkwKIAogQUxXQVlTX0lOTElORSBXcml0ZUJhcnJpZXI8UHJvcGVy
dHlUYWJsZT4mIFN0cnVjdHVyZTo6cHJvcGVydHlUYWJsZSgpCiB7Ci0gICAgQVNTRVJUKCFnbG9i
YWxPYmplY3QoKSB8fCAhZ2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKS5oZWFwLmlzQnVzeSgp
KTsKKyAgICBBU1NFUlQoIWdsb2JhbE9iamVjdCgpIHx8ICFnbG9iYWxPYmplY3QoKS0+dm0oKS5o
ZWFwLmlzQnVzeSgpKTsKICAgICByZXR1cm4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFy
ZURhdGEuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDM5ICszMywz
OSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIFN0cnVjdHVyZVJhcmVEYXRh
OjpzX2luZm8gPSB7ICJTdHJ1Y3R1cmVSYXJlRGF0YSIsIDAsIDAsIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoU3RydWN0dXJlUmFyZURhdGEpIH07CiAKLVN0cnVjdHVyZSogU3RydWN0dXJlUmFyZURh
dGE6OmNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorU3RydWN0dXJlKiBTdHJ1Y3R1
cmVSYXJlRGF0YTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7Ci0gICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDb21wb3Vu
ZFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ29tcG91bmRUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogfQogCi1TdHJ1Y3R1cmVSYXJlRGF0YSogU3Ry
dWN0dXJlUmFyZURhdGE6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVy
ZSogcHJldmlvdXMpCitTdHJ1Y3R1cmVSYXJlRGF0YSogU3RydWN0dXJlUmFyZURhdGE6OmNyZWF0
ZShWTSYgdm0sIFN0cnVjdHVyZSogcHJldmlvdXMpCiB7Ci0gICAgU3RydWN0dXJlUmFyZURhdGEq
IHJhcmVEYXRhID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJlUmFyZURhdGE+
KGdsb2JhbERhdGEuaGVhcCkpIFN0cnVjdHVyZVJhcmVEYXRhKGdsb2JhbERhdGEsIHByZXZpb3Vz
KTsKLSAgICByYXJlRGF0YS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgU3RydWN0
dXJlUmFyZURhdGEqIHJhcmVEYXRhID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0
dXJlUmFyZURhdGE+KHZtLmhlYXApKSBTdHJ1Y3R1cmVSYXJlRGF0YSh2bSwgcHJldmlvdXMpOwor
ICAgIHJhcmVEYXRhLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0dXJuIHJhcmVEYXRhOwog
fQogCi1TdHJ1Y3R1cmVSYXJlRGF0YSogU3RydWN0dXJlUmFyZURhdGE6OmNsb25lKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgU3RydWN0dXJlUmFyZURhdGEqIG90aGVyKQorU3RydWN0
dXJlUmFyZURhdGEqIFN0cnVjdHVyZVJhcmVEYXRhOjpjbG9uZShWTSYgdm0sIGNvbnN0IFN0cnVj
dHVyZVJhcmVEYXRhKiBvdGhlcikKIHsKLSAgICBTdHJ1Y3R1cmVSYXJlRGF0YSogbmV3UmFyZURh
dGEgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmVSYXJlRGF0YT4oZ2xvYmFs
RGF0YS5oZWFwKSkgU3RydWN0dXJlUmFyZURhdGEoZ2xvYmFsRGF0YSwgb3RoZXIpOwotICAgIG5l
d1JhcmVEYXRhLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBTdHJ1Y3R1cmVSYXJl
RGF0YSogbmV3UmFyZURhdGEgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmVS
YXJlRGF0YT4odm0uaGVhcCkpIFN0cnVjdHVyZVJhcmVEYXRhKHZtLCBvdGhlcik7CisgICAgbmV3
UmFyZURhdGEtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gbmV3UmFyZURhdGE7CiB9
CiAKLVN0cnVjdHVyZVJhcmVEYXRhOjpTdHJ1Y3R1cmVSYXJlRGF0YShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFN0cnVjdHVyZSogcHJldmlvdXMpCi0gICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwg
Z2xvYmFsRGF0YS5zdHJ1Y3R1cmVSYXJlRGF0YVN0cnVjdHVyZS5nZXQoKSkKK1N0cnVjdHVyZVJh
cmVEYXRhOjpTdHJ1Y3R1cmVSYXJlRGF0YShWTSYgdm0sIFN0cnVjdHVyZSogcHJldmlvdXMpCisg
ICAgOiBKU0NlbGwodm0sIHZtLnN0cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlLmdldCgpKQogewog
ICAgIGlmIChwcmV2aW91cykKLSAgICAgICAgbV9wcmV2aW91cy5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgcHJldmlvdXMpOworICAgICAgICBtX3ByZXZpb3VzLnNldCh2bSwgdGhpcywgcHJldmlvdXMp
OwogfQogCi1TdHJ1Y3R1cmVSYXJlRGF0YTo6U3RydWN0dXJlUmFyZURhdGEoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBjb25zdCBTdHJ1Y3R1cmVSYXJlRGF0YSogb3RoZXIpCi0gICAgOiBKU0Nl
bGwoZ2xvYmFsRGF0YSwgb3RoZXItPnN0cnVjdHVyZSgpKQorU3RydWN0dXJlUmFyZURhdGE6OlN0
cnVjdHVyZVJhcmVEYXRhKFZNJiB2bSwgY29uc3QgU3RydWN0dXJlUmFyZURhdGEqIG90aGVyKQor
ICAgIDogSlNDZWxsKHZtLCBvdGhlci0+c3RydWN0dXJlKCkpCiB7CiAgICAgaWYgKG90aGVyLT5w
cmV2aW91c0lEKCkpCi0gICAgICAgIG1fcHJldmlvdXMuc2V0KGdsb2JhbERhdGEsIHRoaXMsIG90
aGVyLT5wcmV2aW91c0lEKCkpOworICAgICAgICBtX3ByZXZpb3VzLnNldCh2bSwgdGhpcywgb3Ro
ZXItPnByZXZpb3VzSUQoKSk7CiAgICAgaWYgKG90aGVyLT5vYmplY3RUb1N0cmluZ1ZhbHVlKCkp
Ci0gICAgICAgIG1fb2JqZWN0VG9TdHJpbmdWYWx1ZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgb3Ro
ZXItPm9iamVjdFRvU3RyaW5nVmFsdWUoKSk7CisgICAgICAgIG1fb2JqZWN0VG9TdHJpbmdWYWx1
ZS5zZXQodm0sIHRoaXMsIG90aGVyLT5vYmplY3RUb1N0cmluZ1ZhbHVlKCkpOwogfQogCiB2b2lk
IFN0cnVjdHVyZVJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZVJhcmVEYXRhLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDMxICszOCwzMSBAQCBjbGFzcyBTdHJ1Y3R1cmU7CiBjbGFzcyBTdHJ1Y3R1cmVSYXJlRGF0YSA6
IHB1YmxpYyBKU0NlbGwgewogICAgIGZyaWVuZCBjbGFzcyBTdHJ1Y3R1cmU7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFN0cnVjdHVyZVJhcmVEYXRhKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0
dXJlKik7Ci0gICAgc3RhdGljIFN0cnVjdHVyZVJhcmVEYXRhKiBjbG9uZShKU0dsb2JhbERhdGEm
LCBjb25zdCBTdHJ1Y3R1cmVSYXJlRGF0YSogb3RoZXIpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmVS
YXJlRGF0YSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIFN0cnVjdHVyZVJh
cmVEYXRhKiBjbG9uZShWTSYsIGNvbnN0IFN0cnVjdHVyZVJhcmVEYXRhKiBvdGhlcik7CiAKICAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiwgSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAK
ICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBTdHJ1Y3R1cmVSYXJlRGF0YSBzaG91bGQgYWxz
byBiZSBjbG9uZWQgd2hlbiBjbG9uaW5nIHRoZSBvd25lciBTdHJ1Y3R1cmUuCiAgICAgYm9vbCBu
ZWVkc0Nsb25pbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgU3RydWN0dXJlKiBw
cmV2aW91c0lEKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRQcmV2aW91c0lEKEpTR2xvYmFsRGF0YSYs
IFN0cnVjdHVyZSogdHJhbnNpdGlvbiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBzZXRQcmV2aW91
c0lEKFZNJiwgU3RydWN0dXJlKiB0cmFuc2l0aW9uLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGNs
ZWFyUHJldmlvdXNJRCgpOwogCiAgICAgSlNTdHJpbmcqIG9iamVjdFRvU3RyaW5nVmFsdWUoKSBj
b25zdDsKLSAgICB2b2lkIHNldE9iamVjdFRvU3RyaW5nVmFsdWUoSlNHbG9iYWxEYXRhJiwgY29u
c3QgSlNDZWxsKiBvd25lciwgSlNTdHJpbmcqIHZhbHVlKTsKKyAgICB2b2lkIHNldE9iamVjdFRv
U3RyaW5nVmFsdWUoVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLCBKU1N0cmluZyogdmFsdWUpOwog
CiAgICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogZW51bWVyYXRpb25DYWNoZSgpOwotICAgIHZv
aWQgc2V0RW51bWVyYXRpb25DYWNoZShKU0dsb2JhbERhdGEmLCBjb25zdCBTdHJ1Y3R1cmUqIG93
bmVyLCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiB2YWx1ZSk7CisgICAgdm9pZCBzZXRFbnVtZXJh
dGlvbkNhY2hlKFZNJiwgY29uc3QgU3RydWN0dXJlKiBvd25lciwgSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvciogdmFsdWUpOwogCiAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZv
IHNfaW5mbzsKIAogcHJpdmF0ZToKLSAgICBTdHJ1Y3R1cmVSYXJlRGF0YShKU0dsb2JhbERhdGEm
LCBTdHJ1Y3R1cmUqKTsKLSAgICBTdHJ1Y3R1cmVSYXJlRGF0YShKU0dsb2JhbERhdGEmLCBjb25z
dCBTdHJ1Y3R1cmVSYXJlRGF0YSopOworICAgIFN0cnVjdHVyZVJhcmVEYXRhKFZNJiwgU3RydWN0
dXJlKik7CisgICAgU3RydWN0dXJlUmFyZURhdGEoVk0mLCBjb25zdCBTdHJ1Y3R1cmVSYXJlRGF0
YSopOwogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbiB8IEpTQ2VsbDo6U3RydWN0dXJlRmxhZ3M7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRh
SW5saW5lcy5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSAr
MzUsOSBAQCBpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmVSYXJlRGF0YTo6cHJlCiAgICAgcmV0
dXJuIG1fcHJldmlvdXMuZ2V0KCk7CiB9CiAKLWlubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRh
OjpzZXRQcmV2aW91c0lEKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiB0cmFu
c2l0aW9uLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2lubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVE
YXRhOjpzZXRQcmV2aW91c0lEKFZNJiB2bSwgU3RydWN0dXJlKiB0cmFuc2l0aW9uLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBtX3ByZXZpb3VzLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0
aW9uLCBzdHJ1Y3R1cmUpOworICAgIG1fcHJldmlvdXMuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1
Y3R1cmUpOwogfQogCiBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2xlYXJQcmV2aW91
c0lEKCkKQEAgLTUwLDkgKzUwLDkgQEAgaW5saW5lIEpTU3RyaW5nKiBTdHJ1Y3R1cmVSYXJlRGF0
YTo6b2JqZQogICAgIHJldHVybiBtX29iamVjdFRvU3RyaW5nVmFsdWUuZ2V0KCk7CiB9CiAKLWlu
bGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpzZXRPYmplY3RUb1N0cmluZ1ZhbHVlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNTdHJpbmcqIHZhbHVl
KQoraW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNldE9iamVjdFRvU3RyaW5nVmFsdWUo
Vk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBKU1N0cmluZyogdmFsdWUpCiB7Ci0gICAgbV9v
YmplY3RUb1N0cmluZ1ZhbHVlLnNldChnbG9iYWxEYXRhLCBvd25lciwgdmFsdWUpOworICAgIG1f
b2JqZWN0VG9TdHJpbmdWYWx1ZS5zZXQodm0sIG93bmVyLCB2YWx1ZSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgcHVibGljOgogICAgICAgICBXZWFrU2V0
OjpkZWFsbG9jYXRlKGltcGwpOwogICAgIH0KIAotICAgIGlubGluZSB2b2lkIGFkZChKU0dsb2Jh
bERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICBpbmxpbmUgdm9pZCBhZGQoVk0mLCBTdHJ1Y3R1cmUq
KTsKICAgICBpbmxpbmUgYm9vbCBjb250YWlucyhTdHJpbmdJbXBsKiByZXAsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMpIGNvbnN0OwogICAgIGlubGluZSBTdHJ1Y3R1cmUqIGdldChTdHJpbmdJbXBsKiBy
ZXAsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpIGNvbnN0OwogCkBAIC0xNzcsNyArMTc3LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0U2luZ2xl
VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB2b2lk
IHNldFNpbmdsZVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAg
ICAgICAgIEFTU0VSVChpc1VzaW5nU2luZ2xlU2xvdCgpKTsKICAgICAgICAgaWYgKFdlYWtJbXBs
KiBpbXBsID0gdGhpcy0+d2Vha0ltcGwoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDE5
ICszNDYsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVm
IEpTQ2VsbCBCYXNlOwogCi0gICAgICAgIHN0YXRpYyBTaGFyZWRTeW1ib2xUYWJsZSogY3JlYXRl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgc3RhdGljIFNoYXJlZFN5bWJvbFRh
YmxlKiBjcmVhdGUoVk0mIHZtKQogICAgICAgICB7Ci0gICAgICAgICAgICBTaGFyZWRTeW1ib2xU
YWJsZSogc2hhcmVkU3ltYm9sVGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTaGFy
ZWRTeW1ib2xUYWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgU2hhcmVkU3ltYm9sVGFibGUoZ2xvYmFs
RGF0YSk7Ci0gICAgICAgICAgICBzaGFyZWRTeW1ib2xUYWJsZS0+ZmluaXNoQ3JlYXRpb24oZ2xv
YmFsRGF0YSk7CisgICAgICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZSogc2hhcmVkU3ltYm9sVGFi
bGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTaGFyZWRTeW1ib2xUYWJsZT4odm0uaGVh
cCkpIFNoYXJlZFN5bWJvbFRhYmxlKHZtKTsKKyAgICAgICAgICAgIHNoYXJlZFN5bWJvbFRhYmxl
LT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgICAgICByZXR1cm4gc2hhcmVkU3ltYm9sVGFi
bGU7CiAgICAgICAgIH0KICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlv
biA9IHRydWU7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJl
ID0gdHJ1ZTsKICAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAg
ICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oTGVhZlR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhMZWFmVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgdXNlc05vblN0cmljdEV2YWwoKSB7IHJldHVybiBt
X3VzZXNOb25TdHJpY3RFdmFsOyB9CkBAIC0zODMsOCArMzgzLDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAK
ICAgICBwcml2YXRlOgotICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCi0gICAgICAgICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnNo
YXJlZFN5bWJvbFRhYmxlU3RydWN0dXJlLmdldCgpKQorICAgICAgICBTaGFyZWRTeW1ib2xUYWJs
ZShWTSYgdm0pCisgICAgICAgICAgICA6IEpTQ2VsbCh2bSwgdm0uc2hhcmVkU3ltYm9sVGFibGVT
dHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgICAgICAsIG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdU
aGlzKDApCiAgICAgICAgICAgICAsIG1fdXNlc05vblN0cmljdEV2YWwoZmFsc2UpCiAgICAgICAg
ICAgICAsIG1fY2FwdHVyZVN0YXJ0KDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCShyZXZpc2lvbiAxNDg2NTQpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsRGF0YS5jcHA6MTQ4NjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTY3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisKKyNp
bmNsdWRlICJBcmdMaXN0LmgiCisjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCisjaW5jbHVkZSAiQ29t
bW9uSWRlbnRpZmllcnMuaCIKKyNpbmNsdWRlICJERkdMb25nTGl2ZWRTdGF0ZS5oIgorI2luY2x1
ZGUgIkRlYnVnZ2VyQWN0aXZhdGlvbi5oIgorI2luY2x1ZGUgIkZ1bmN0aW9uQ29uc3RydWN0b3Iu
aCIKKyNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJHZXR0ZXJTZXR0
ZXIuaCIKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSG9zdENhbGxSZXR1cm5WYWx1ZS5o
IgorI2luY2x1ZGUgIkluY3JlbWVudGFsU3dlZXBlci5oIgorI2luY2x1ZGUgIkludGVycHJldGVy
LmgiCisjaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCisjaW5jbHVkZSAiSlNBUElWYWx1ZVdyYXBw
ZXIuaCIKKyNpbmNsdWRlICJKU0FycmF5LmgiCisjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2lu
Y2x1ZGUgIkpTTG9jay5oIgorI2luY2x1ZGUgIkpTTmFtZVNjb3BlLmgiCisjaW5jbHVkZSAiSlNO
b3RBbk9iamVjdC5oIgorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCIKKyNpbmNs
dWRlICJKU1dpdGhTY29wZS5oIgorI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiTG9va3Vw
LmgiCisjaW5jbHVkZSAiTm9kZXMuaCIKKyNpbmNsdWRlICJQYXJzZXJBcmVuYS5oIgorI2luY2x1
ZGUgIlJlZ0V4cENhY2hlLmgiCisjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCisjaW5jbHVkZSAi
U291cmNlUHJvdmlkZXJDYWNoZS5oIgorI2luY2x1ZGUgIlN0cmljdEV2YWxBY3RpdmF0aW9uLmgi
CisjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgorI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2Nr
LmgiCisjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KKworI2lmIEVOQUJMRShE
RkdfSklUKQorI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCisjZW5kaWYKKworI2lmIEVO
QUJMRShSRUdFWFBfVFJBQ0lORykKKyNpbmNsdWRlICJSZWdFeHAuaCIKKyNlbmRpZgorCisjaWYg
VVNFKENGKQorI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjZW5k
aWYKKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIEpTQyB7CisKK2V4dGVybiBj
b25zdCBIYXNoVGFibGUgYXJyYXlDb25zdHJ1Y3RvclRhYmxlOworZXh0ZXJuIGNvbnN0IEhhc2hU
YWJsZSBhcnJheVByb3RvdHlwZVRhYmxlOworZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBib29sZWFu
UHJvdG90eXBlVGFibGU7CitleHRlcm4gY29uc3QgSGFzaFRhYmxlIGpzb25UYWJsZTsKK2V4dGVy
biBjb25zdCBIYXNoVGFibGUgZGF0ZVRhYmxlOworZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBkYXRl
Q29uc3RydWN0b3JUYWJsZTsKK2V4dGVybiBjb25zdCBIYXNoVGFibGUgZXJyb3JQcm90b3R5cGVU
YWJsZTsKK2V4dGVybiBjb25zdCBIYXNoVGFibGUgZ2xvYmFsT2JqZWN0VGFibGU7CitleHRlcm4g
Y29uc3QgSGFzaFRhYmxlIG1hdGhUYWJsZTsKK2V4dGVybiBjb25zdCBIYXNoVGFibGUgbnVtYmVy
Q29uc3RydWN0b3JUYWJsZTsKK2V4dGVybiBjb25zdCBIYXNoVGFibGUgbnVtYmVyUHJvdG90eXBl
VGFibGU7CitKU19FWFBPUlREQVRBIGV4dGVybiBjb25zdCBIYXNoVGFibGUgb2JqZWN0Q29uc3Ry
dWN0b3JUYWJsZTsKK2V4dGVybiBjb25zdCBIYXNoVGFibGUgcHJpdmF0ZU5hbWVQcm90b3R5cGVU
YWJsZTsKK2V4dGVybiBjb25zdCBIYXNoVGFibGUgcmVnRXhwVGFibGU7CitleHRlcm4gY29uc3Qg
SGFzaFRhYmxlIHJlZ0V4cENvbnN0cnVjdG9yVGFibGU7CitleHRlcm4gY29uc3QgSGFzaFRhYmxl
IHJlZ0V4cFByb3RvdHlwZVRhYmxlOworZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBzdHJpbmdDb25z
dHJ1Y3RvclRhYmxlOworCisvLyBOb3RlOiBQbGF0Zm9ybS5oIHdpbGwgZW5mb3JjZSB0aGF0IEVO
QUJMRShBU1NFTUJMRVIpIGlzIHRydWUgaWYgZWl0aGVyCisvLyBFTkFCTEUoSklUKSBvciBFTkFC
TEUoWUFSUl9KSVQpIG9yIGJvdGggYXJlIGVuYWJsZWQuIFRoZSBjb2RlIGJlbG93CisvLyBqdXN0
IGNoZWNrcyBmb3IgRU5BQkxFKEpJVCkgb3IgRU5BQkxFKFlBUlJfSklUKSB3aXRoIHRoaXMgcHJl
bWlzZSBpbiBtaW5kLgorCisjaWYgRU5BQkxFKEFTU0VNQkxFUikKK3N0YXRpYyBib29sIGVuYWJs
ZUFzc2VtYmxlcihFeGVjdXRhYmxlQWxsb2NhdG9yJiBleGVjdXRhYmxlQWxsb2NhdG9yKQorewor
ICAgIGlmICghZXhlY3V0YWJsZUFsbG9jYXRvci5pc1ZhbGlkKCkgfHwgKCFPcHRpb25zOjp1c2VK
SVQoKSAmJiAhT3B0aW9uczo6dXNlUmVnRXhwSklUKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyNpZiBVU0UoQ0YpCisjaWYgQ09NUElMRVIoR0NDKSAmJiAhQ09NUElMRVIoQ0xBTkcpCisg
ICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIG9uY2UgdGhlIEVXUyBoYXZlIGJlZW4gdXBncmFkZWQg
dG8gTExWTS4KKyAgICAvLyBXb3JrIGFyb3VuZCBhIGJ1ZyBvZiBHQ0Mgd2l0aCBzdHJpY3QtYWxp
YXNpbmcuCisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjYW5Vc2VKSVRLZXlSZXRhaW4oQWRv
cHRDRiwgQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZygwICwgIkphdmFTY3JpcHRDb3JlVXNlSklU
Iiwga0NGU3RyaW5nRW5jb2RpbmdNYWNSb21hbikpOworICAgIENGU3RyaW5nUmVmIGNhblVzZUpJ
VEtleSA9IGNhblVzZUpJVEtleVJldGFpbi5nZXQoKTsKKyNlbHNlCisgICAgQ0ZTdHJpbmdSZWYg
Y2FuVXNlSklUS2V5ID0gQ0ZTVFIoIkphdmFTY3JpcHRDb3JlVXNlSklUIik7CisjZW5kaWYgLy8g
Q09NUElMRVIoR0NDKSAmJiAhQ09NUElMRVIoQ0xBTkcpCisgICAgUmV0YWluUHRyPENGQm9vbGVh
blJlZj4gY2FuVXNlSklUKEFkb3B0Q0YsIChDRkJvb2xlYW5SZWYpQ0ZQcmVmZXJlbmNlc0NvcHlB
cHBWYWx1ZShjYW5Vc2VKSVRLZXksIGtDRlByZWZlcmVuY2VzQ3VycmVudEFwcGxpY2F0aW9uKSk7
CisgICAgaWYgKGNhblVzZUpJVCkKKyAgICAgICAgcmV0dXJuIGtDRkJvb2xlYW5UcnVlID09IGNh
blVzZUpJVC5nZXQoKTsKKyNlbmRpZgorCisjaWYgVVNFKENGKSB8fCBPUyhVTklYKQorICAgIGNo
YXIqIGNhblVzZUpJVFN0cmluZyA9IGdldGVudigiSmF2YVNjcmlwdENvcmVVc2VKSVQiKTsKKyAg
ICByZXR1cm4gIWNhblVzZUpJVFN0cmluZyB8fCBhdG9pKGNhblVzZUpJVFN0cmluZyk7CisjZWxz
ZQorICAgIHJldHVybiB0cnVlOworI2VuZGlmCit9CisjZW5kaWYgLy8gRU5BQkxFKCFBU1NFTUJM
RVIpCisKK0pTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXBlIGdsb2JhbERh
dGFUeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKKyAgICA6IG1fYXBpTG9jayhhZG9wdFJlZihuZXcg
SlNMb2NrKHRoaXMpKSkKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKQorICAgICwgZXhlY3V0YWJsZUFs
bG9jYXRvcigqdGhpcykKKyNlbmRpZgorICAgICwgaGVhcCh0aGlzLCBoZWFwVHlwZSkKKyAgICAs
IGdsb2JhbERhdGFUeXBlKGdsb2JhbERhdGFUeXBlKQorICAgICwgY2xpZW50RGF0YSgwKQorICAg
ICwgdG9wQ2FsbEZyYW1lKENhbGxGcmFtZTo6bm9DYWxsZXIoKSkKKyAgICAsIGFycmF5Q29uc3Ry
dWN0b3JUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjphcnJheUNvbnN0cnVjdG9yVGFibGUp
KQorICAgICwgYXJyYXlQcm90b3R5cGVUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjphcnJh
eVByb3RvdHlwZVRhYmxlKSkKKyAgICAsIGJvb2xlYW5Qcm90b3R5cGVUYWJsZShmYXN0TmV3PEhh
c2hUYWJsZT4oSlNDOjpib29sZWFuUHJvdG90eXBlVGFibGUpKQorICAgICwgZGF0ZVRhYmxlKGZh
c3ROZXc8SGFzaFRhYmxlPihKU0M6OmRhdGVUYWJsZSkpCisgICAgLCBkYXRlQ29uc3RydWN0b3JU
YWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpkYXRlQ29uc3RydWN0b3JUYWJsZSkpCisgICAg
LCBlcnJvclByb3RvdHlwZVRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmVycm9yUHJvdG90
eXBlVGFibGUpKQorICAgICwgZ2xvYmFsT2JqZWN0VGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpT
Qzo6Z2xvYmFsT2JqZWN0VGFibGUpKQorICAgICwganNvblRhYmxlKGZhc3ROZXc8SGFzaFRhYmxl
PihKU0M6Ompzb25UYWJsZSkpCisgICAgLCBtYXRoVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpT
Qzo6bWF0aFRhYmxlKSkKKyAgICAsIG51bWJlckNvbnN0cnVjdG9yVGFibGUoZmFzdE5ldzxIYXNo
VGFibGU+KEpTQzo6bnVtYmVyQ29uc3RydWN0b3JUYWJsZSkpCisgICAgLCBudW1iZXJQcm90b3R5
cGVUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpudW1iZXJQcm90b3R5cGVUYWJsZSkpCisg
ICAgLCBvYmplY3RDb25zdHJ1Y3RvclRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6Om9iamVj
dENvbnN0cnVjdG9yVGFibGUpKQorICAgICwgcHJpdmF0ZU5hbWVQcm90b3R5cGVUYWJsZShmYXN0
TmV3PEhhc2hUYWJsZT4oSlNDOjpwcml2YXRlTmFtZVByb3RvdHlwZVRhYmxlKSkKKyAgICAsIHJl
Z0V4cFRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OnJlZ0V4cFRhYmxlKSkKKyAgICAsIHJl
Z0V4cENvbnN0cnVjdG9yVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6cmVnRXhwQ29uc3Ry
dWN0b3JUYWJsZSkpCisgICAgLCByZWdFeHBQcm90b3R5cGVUYWJsZShmYXN0TmV3PEhhc2hUYWJs
ZT4oSlNDOjpyZWdFeHBQcm90b3R5cGVUYWJsZSkpCisgICAgLCBzdHJpbmdDb25zdHJ1Y3RvclRh
YmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OnN0cmluZ0NvbnN0cnVjdG9yVGFibGUpKQorICAg
ICwgaWRlbnRpZmllclRhYmxlKGdsb2JhbERhdGFUeXBlID09IERlZmF1bHQgPyB3dGZUaHJlYWRE
YXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpIDogY3JlYXRlSWRlbnRpZmllclRhYmxlKCkp
CisgICAgLCBwcm9wZXJ0eU5hbWVzKG5ldyBDb21tb25JZGVudGlmaWVycyh0aGlzKSkKKyAgICAs
IGVtcHR5TGlzdChuZXcgTWFya2VkQXJndW1lbnRCdWZmZXIpCisgICAgLCBwYXJzZXJBcmVuYShh
ZG9wdFB0cihuZXcgUGFyc2VyQXJlbmEpKQorICAgICwga2V5d29yZHMoYWRvcHRQdHIobmV3IEtl
eXdvcmRzKHRoaXMpKSkKKyAgICAsIGludGVycHJldGVyKDApCisgICAgLCBqc0FycmF5Q2xhc3NJ
bmZvKCZKU0FycmF5OjpzX2luZm8pCisgICAgLCBqc0ZpbmFsT2JqZWN0Q2xhc3NJbmZvKCZKU0Zp
bmFsT2JqZWN0OjpzX2luZm8pCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgLCBzaXplT2ZMYXN0
U2NyYXRjaEJ1ZmZlcigwKQorI2VuZGlmCisgICAgLCBkeW5hbWljR2xvYmFsT2JqZWN0KDApCisg
ICAgLCBjYWNoZWRVVENPZmZzZXQoUU5hTikKKyAgICAsIG1fZW5hYmxlZFByb2ZpbGVyKDApCisg
ICAgLCBtX3JlZ0V4cENhY2hlKG5ldyBSZWdFeHBDYWNoZSh0aGlzKSkKKyNpZiBFTkFCTEUoUkVH
RVhQX1RSQUNJTkcpCisgICAgLCBtX3J0VHJhY2VMaXN0KG5ldyBSVFRyYWNlTGlzdCgpKQorI2Vu
ZGlmCisjaWZuZGVmIE5ERUJVRworICAgICwgZXhjbHVzaXZlVGhyZWFkKDApCisjZW5kaWYKKyAg
ICAsIG1fbmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zKDApCisjaWYgRU5BQkxFKEFTU0VNQkxF
UikKKyAgICAsIG1fY2FuVXNlQXNzZW1ibGVyKGVuYWJsZUFzc2VtYmxlcihleGVjdXRhYmxlQWxs
b2NhdG9yKSkKKyNlbmRpZgorI2lmIEVOQUJMRShKSVQpCisgICAgLCBtX2NhblVzZUpJVChtX2Nh
blVzZUFzc2VtYmxlciAmJiBPcHRpb25zOjp1c2VKSVQoKSkKKyNlbmRpZgorI2lmIEVOQUJMRShZ
QVJSX0pJVCkKKyAgICAsIG1fY2FuVXNlUmVnRXhwSklUKG1fY2FuVXNlQXNzZW1ibGVyICYmIE9w
dGlvbnM6OnVzZVJlZ0V4cEpJVCgpKQorI2VuZGlmCisjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04p
CisgICAgLCBtX2luaXRpYWxpemluZ09iamVjdENsYXNzKDApCisjZW5kaWYKKyAgICAsIG1faW5E
ZWZpbmVPd25Qcm9wZXJ0eShmYWxzZSkKKyAgICAsIG1fY29kZUNhY2hlKENvZGVDYWNoZTo6Y3Jl
YXRlKCkpCit7CisgICAgaW50ZXJwcmV0ZXIgPSBuZXcgSW50ZXJwcmV0ZXIoKnRoaXMpOworCisg
ICAgLy8gTmVlZCB0byBiZSBjYXJlZnVsIHRvIGtlZXAgZXZlcnl0aGluZyBjb25zaXN0ZW50IGhl
cmUKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh0aGlzKTsKKyAgICBJZGVudGlmaWVyVGFibGUqIGV4
aXN0aW5nRW50cnlJZGVudGlmaWVyVGFibGUgPSB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElk
ZW50aWZpZXJUYWJsZShpZGVudGlmaWVyVGFibGUpOworICAgIHN0cnVjdHVyZVN0cnVjdHVyZS5z
ZXQoKnRoaXMsIFN0cnVjdHVyZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzKSk7CisgICAgc3RydWN0
dXJlUmFyZURhdGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y3JlYXRl
U3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIGRlYnVnZ2VyQWN0aXZhdGlvblN0
cnVjdHVyZS5zZXQoKnRoaXMsIERlYnVnZ2VyQWN0aXZhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOworICAgIHRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVy
ZS5zZXQoKnRoaXMsIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOworICAgIHN0cmluZ1N0cnVjdHVyZS5zZXQoKnRoaXMsIEpTU3Ry
aW5nOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgbm90QW5PYmpl
Y3RTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU05vdEFuT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnRo
aXMsIDAsIGpzTnVsbCgpKSk7CisgICAgcHJvcGVydHlOYW1lSXRlcmF0b3JTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAs
IGpzTnVsbCgpKSk7CisgICAgZ2V0dGVyU2V0dGVyU3RydWN0dXJlLnNldCgqdGhpcywgR2V0dGVy
U2V0dGVyOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgYXBpV3Jh
cHBlclN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTQVBJVmFsdWVXcmFwcGVyOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgSlNTY29wZVN0cnVjdHVyZS5zZXQoKnRoaXMs
IEpTU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBleGVj
dXRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgRXhlY3V0YWJsZUJhc2U6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBuYXRpdmVFeGVjdXRhYmxlU3RydWN0dXJlLnNl
dCgqdGhpcywgTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOworICAgIGV2YWxFeGVjdXRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgRXZhbEV4ZWN1
dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBwcm9ncmFt
RXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgZnVuY3Rpb25FeGVjdXRhYmxlU3Ry
dWN0dXJlLnNldCgqdGhpcywgRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRo
aXMsIDAsIGpzTnVsbCgpKSk7CisgICAgcmVnRXhwU3RydWN0dXJlLnNldCgqdGhpcywgUmVnRXhw
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgc2hhcmVkU3ltYm9s
VGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTaGFyZWRTeW1ib2xUYWJsZTo6Y3JlYXRlU3RydWN0
dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHN0cnVjdHVyZUNoYWluU3RydWN0dXJlLnNl
dCgqdGhpcywgU3RydWN0dXJlQ2hhaW46OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxs
KCkpKTsKKyAgICBzcGFyc2VBcnJheVZhbHVlTWFwU3RydWN0dXJlLnNldCgqdGhpcywgU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAg
IHdpdGhTY29wZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTV2l0aFNjb3BlOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVT
dHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlU3Ry
dWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
a1N0cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6Y3JlYXRlU3Ry
dWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHVubGlua2VkRXZhbENvZGVCbG9ja1N0
cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlua2VkRXZhbENvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJl
KCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1
Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgcHJvcGVydHlUYWJsZVN0cnVjdHVyZS5zZXQo
KnRoaXMsIFByb3BlcnR5VGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkp
KTsKKyAgICBzbWFsbFN0cmluZ3MuaW5pdGlhbGl6ZUNvbW1vblN0cmluZ3MoKnRoaXMpOworCisg
ICAgd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoZXhpc3RpbmdFbnRy
eUlkZW50aWZpZXJUYWJsZSk7CisKKyNpZiBFTkFCTEUoSklUKQorICAgIGppdFN0dWJzID0gYWRv
cHRQdHIobmV3IEpJVFRodW5rcygpKTsKKyAgICBwZXJmb3JtUGxhdGZvcm1TcGVjaWZpY0pJVEFz
c2VydGlvbnModGhpcyk7CisjZW5kaWYKKyAgICAKKyAgICBpbnRlcnByZXRlci0+aW5pdGlhbGl6
ZSh0aGlzLT5jYW5Vc2VKSVQoKSk7CisgICAgCisjaWYgRU5BQkxFKEpJVCkKKyAgICBpbml0aWFs
aXplSG9zdENhbGxSZXR1cm5WYWx1ZSgpOyAvLyBUaGlzIGlzIG5lZWRlZCB0byBjb252aW5jZSB0
aGUgbGlua2VyIG5vdCB0byBkcm9wIGhvc3QgY2FsbCByZXR1cm4gc3VwcG9ydC4KKyNlbmRpZgor
CisgICAgaGVhcC5ub3RpZnlJc1NhZmVUb0NvbGxlY3QoKTsKKworICAgIExMSW50OjpEYXRhOjpw
ZXJmb3JtQXNzZXJ0aW9ucygqdGhpcyk7CisgICAgCisgICAgaWYgKE9wdGlvbnM6OmVuYWJsZVBy
b2ZpbGVyKCkpIHsKKyAgICAgICAgbV9wZXJCeXRlY29kZVByb2ZpbGVyID0gYWRvcHRQdHIobmV3
IFByb2ZpbGVyOjpEYXRhYmFzZSgqdGhpcykpOworCisgICAgICAgIFN0cmluZ1ByaW50U3RyZWFt
IHBhdGhPdXQ7CisjaWYgIU9TKFdJTkNFKQorICAgICAgICBjb25zdCBjaGFyKiBwcm9maWxlclBh
dGggPSBnZXRlbnYoIkpTQ19QUk9GSUxFUl9QQVRIIik7CisgICAgICAgIGlmIChwcm9maWxlclBh
dGgpCisgICAgICAgICAgICBwYXRoT3V0LnByaW50KHByb2ZpbGVyUGF0aCwgIi8iKTsKKyNlbmRp
ZgorICAgICAgICBwYXRoT3V0LnByaW50KCJKU0NQcm9maWxlLSIsIGdldEN1cnJlbnRQcm9jZXNz
SUQoKSwgIi0iLCBtX3BlckJ5dGVjb2RlUHJvZmlsZXItPmRhdGFiYXNlSUQoKSwgIi5qc29uIik7
CisgICAgICAgIG1fcGVyQnl0ZWNvZGVQcm9maWxlci0+cmVnaXN0ZXJUb1NhdmVBdEV4aXQocGF0
aE91dC50b0NTdHJpbmcoKS5kYXRhKCkpOworICAgIH0KKworI2lmIEVOQUJMRShERkdfSklUKQor
ICAgIGlmIChjYW5Vc2VKSVQoKSkKKyAgICAgICAgbV9kZmdTdGF0ZSA9IGFkb3B0UHRyKG5ldyBE
Rkc6OkxvbmdMaXZlZFN0YXRlKCkpOworI2VuZGlmCit9CisKK0pTR2xvYmFsRGF0YTo6fkpTR2xv
YmFsRGF0YSgpCit7CisgICAgLy8gQ2xlYXIgdGhpcyBmaXJzdCB0byBlbnN1cmUgdGhhdCBub2Jv
ZHkgdHJpZXMgdG8gcmVtb3ZlIHRoZW1zZWx2ZXMgZnJvbSBpdC4KKyAgICBtX3BlckJ5dGVjb2Rl
UHJvZmlsZXIuY2xlYXIoKTsKKyAgICAKKyAgICBBU1NFUlQobV9hcGlMb2NrLT5jdXJyZW50VGhy
ZWFkSXNIb2xkaW5nTG9jaygpKTsKKyAgICBtX2FwaUxvY2stPndpbGxEZXN0cm95R2xvYmFsRGF0
YSh0aGlzKTsKKyAgICBoZWFwLmxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CisKKyAgICBkZWxldGUg
aW50ZXJwcmV0ZXI7CisjaWZuZGVmIE5ERUJVRworICAgIGludGVycHJldGVyID0gcmVpbnRlcnBy
ZXRfY2FzdDxJbnRlcnByZXRlcio+KDB4YmJhZGJlZWYpOworI2VuZGlmCisKKyAgICBhcnJheVBy
b3RvdHlwZVRhYmxlLT5kZWxldGVUYWJsZSgpOworICAgIGFycmF5Q29uc3RydWN0b3JUYWJsZS0+
ZGVsZXRlVGFibGUoKTsKKyAgICBib29sZWFuUHJvdG90eXBlVGFibGUtPmRlbGV0ZVRhYmxlKCk7
CisgICAgZGF0ZVRhYmxlLT5kZWxldGVUYWJsZSgpOworICAgIGRhdGVDb25zdHJ1Y3RvclRhYmxl
LT5kZWxldGVUYWJsZSgpOworICAgIGVycm9yUHJvdG90eXBlVGFibGUtPmRlbGV0ZVRhYmxlKCk7
CisgICAgZ2xvYmFsT2JqZWN0VGFibGUtPmRlbGV0ZVRhYmxlKCk7CisgICAganNvblRhYmxlLT5k
ZWxldGVUYWJsZSgpOworICAgIG1hdGhUYWJsZS0+ZGVsZXRlVGFibGUoKTsKKyAgICBudW1iZXJD
b25zdHJ1Y3RvclRhYmxlLT5kZWxldGVUYWJsZSgpOworICAgIG51bWJlclByb3RvdHlwZVRhYmxl
LT5kZWxldGVUYWJsZSgpOworICAgIG9iamVjdENvbnN0cnVjdG9yVGFibGUtPmRlbGV0ZVRhYmxl
KCk7CisgICAgcHJpdmF0ZU5hbWVQcm90b3R5cGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKKyAgICBy
ZWdFeHBUYWJsZS0+ZGVsZXRlVGFibGUoKTsKKyAgICByZWdFeHBDb25zdHJ1Y3RvclRhYmxlLT5k
ZWxldGVUYWJsZSgpOworICAgIHJlZ0V4cFByb3RvdHlwZVRhYmxlLT5kZWxldGVUYWJsZSgpOwor
ICAgIHN0cmluZ0NvbnN0cnVjdG9yVGFibGUtPmRlbGV0ZVRhYmxlKCk7CisKKyAgICBmYXN0RGVs
ZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oYXJyYXlDb25zdHJ1Y3RvclRhYmxlKSk7CisgICAg
ZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGFycmF5UHJvdG90eXBlVGFibGUpKTsK
KyAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oYm9vbGVhblByb3RvdHlwZVRh
YmxlKSk7CisgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGRhdGVUYWJsZSkp
OworICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihkYXRlQ29uc3RydWN0b3JU
YWJsZSkpOworICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihlcnJvclByb3Rv
dHlwZVRhYmxlKSk7CisgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGdsb2Jh
bE9iamVjdFRhYmxlKSk7CisgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGpz
b25UYWJsZSkpOworICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihtYXRoVGFi
bGUpKTsKKyAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4obnVtYmVyQ29uc3Ry
dWN0b3JUYWJsZSkpOworICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihudW1i
ZXJQcm90b3R5cGVUYWJsZSkpOworICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUq
PihvYmplY3RDb25zdHJ1Y3RvclRhYmxlKSk7CisgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhh
c2hUYWJsZSo+KHByaXZhdGVOYW1lUHJvdG90eXBlVGFibGUpKTsKKyAgICBmYXN0RGVsZXRlKGNv
bnN0X2Nhc3Q8SGFzaFRhYmxlKj4ocmVnRXhwVGFibGUpKTsKKyAgICBmYXN0RGVsZXRlKGNvbnN0
X2Nhc3Q8SGFzaFRhYmxlKj4ocmVnRXhwQ29uc3RydWN0b3JUYWJsZSkpOworICAgIGZhc3REZWxl
dGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihyZWdFeHBQcm90b3R5cGVUYWJsZSkpOworICAgIGZh
c3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihzdHJpbmdDb25zdHJ1Y3RvclRhYmxlKSk7
CisKKyAgICBkZWxldGUgZW1wdHlMaXN0OworCisgICAgZGVsZXRlIHByb3BlcnR5TmFtZXM7Cisg
ICAgaWYgKGdsb2JhbERhdGFUeXBlICE9IERlZmF1bHQpCisgICAgICAgIGRlbGV0ZUlkZW50aWZp
ZXJUYWJsZShpZGVudGlmaWVyVGFibGUpOworCisgICAgZGVsZXRlIGNsaWVudERhdGE7CisgICAg
ZGVsZXRlIG1fcmVnRXhwQ2FjaGU7CisjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQorICAgIGRl
bGV0ZSBtX3J0VHJhY2VMaXN0OworI2VuZGlmCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2NyYXRjaEJ1ZmZlcnMuc2l6ZSgpOyArK2kpCisgICAg
ICAgIGZhc3RGcmVlKHNjcmF0Y2hCdWZmZXJzW2ldKTsKKyNlbmRpZgorfQorCitQYXNzUmVmUHRy
PEpTR2xvYmFsRGF0YT4gSlNHbG9iYWxEYXRhOjpjcmVhdGVDb250ZXh0R3JvdXAoSGVhcFR5cGUg
aGVhcFR5cGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKU0dsb2JhbERhdGEoQVBJQ29u
dGV4dEdyb3VwLCBoZWFwVHlwZSkpOworfQorCitQYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4gSlNH
bG9iYWxEYXRhOjpjcmVhdGUoSGVhcFR5cGUgaGVhcFR5cGUpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBKU0dsb2JhbERhdGEoRGVmYXVsdCwgaGVhcFR5cGUpKTsKK30KKworUGFzc1JlZlB0
cjxKU0dsb2JhbERhdGE+IEpTR2xvYmFsRGF0YTo6Y3JlYXRlTGVha2VkKEhlYXBUeXBlIGhlYXBU
eXBlKQoreworICAgIHJldHVybiBjcmVhdGUoaGVhcFR5cGUpOworfQorCitib29sIEpTR2xvYmFs
RGF0YTo6c2hhcmVkSW5zdGFuY2VFeGlzdHMoKQoreworICAgIHJldHVybiBzaGFyZWRJbnN0YW5j
ZUludGVybmFsKCk7Cit9CisKK0pTR2xvYmFsRGF0YSYgSlNHbG9iYWxEYXRhOjpzaGFyZWRJbnN0
YW5jZSgpCit7CisgICAgR2xvYmFsSlNMb2NrIGdsb2JhbExvY2s7CisgICAgSlNHbG9iYWxEYXRh
KiYgaW5zdGFuY2UgPSBzaGFyZWRJbnN0YW5jZUludGVybmFsKCk7CisgICAgaWYgKCFpbnN0YW5j
ZSkgeworICAgICAgICBpbnN0YW5jZSA9IGFkb3B0UmVmKG5ldyBKU0dsb2JhbERhdGEoQVBJU2hh
cmVkLCBTbWFsbEhlYXApKS5sZWFrUmVmKCk7CisgICAgICAgIGluc3RhbmNlLT5tYWtlVXNhYmxl
RnJvbU11bHRpcGxlVGhyZWFkcygpOworICAgIH0KKyAgICByZXR1cm4gKmluc3RhbmNlOworfQor
CitKU0dsb2JhbERhdGEqJiBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKQor
eworICAgIHN0YXRpYyBKU0dsb2JhbERhdGEqIHNoYXJlZEluc3RhbmNlOworICAgIHJldHVybiBz
aGFyZWRJbnN0YW5jZTsKK30KKworI2lmIEVOQUJMRShKSVQpCitzdGF0aWMgVGh1bmtHZW5lcmF0
b3IgdGh1bmtHZW5lcmF0b3JGb3JJbnRyaW5zaWMoSW50cmluc2ljIGludHJpbnNpYykKK3sKKyAg
ICBzd2l0Y2ggKGludHJpbnNpYykgeworICAgIGNhc2UgQ2hhckNvZGVBdEludHJpbnNpYzoKKyAg
ICAgICAgcmV0dXJuIGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcjsKKyAgICBjYXNlIENoYXJBdElu
dHJpbnNpYzoKKyAgICAgICAgcmV0dXJuIGNoYXJBdFRodW5rR2VuZXJhdG9yOworICAgIGNhc2Ug
RnJvbUNoYXJDb2RlSW50cmluc2ljOgorICAgICAgICByZXR1cm4gZnJvbUNoYXJDb2RlVGh1bmtH
ZW5lcmF0b3I7CisgICAgY2FzZSBTcXJ0SW50cmluc2ljOgorICAgICAgICByZXR1cm4gc3FydFRo
dW5rR2VuZXJhdG9yOworICAgIGNhc2UgUG93SW50cmluc2ljOgorICAgICAgICByZXR1cm4gcG93
VGh1bmtHZW5lcmF0b3I7CisgICAgY2FzZSBBYnNJbnRyaW5zaWM6CisgICAgICAgIHJldHVybiBh
YnNUaHVua0dlbmVyYXRvcjsKKyAgICBjYXNlIEZsb29ySW50cmluc2ljOgorICAgICAgICByZXR1
cm4gZmxvb3JUaHVua0dlbmVyYXRvcjsKKyAgICBjYXNlIENlaWxJbnRyaW5zaWM6CisgICAgICAg
IHJldHVybiBjZWlsVGh1bmtHZW5lcmF0b3I7CisgICAgY2FzZSBSb3VuZEludHJpbnNpYzoKKyAg
ICAgICAgcmV0dXJuIHJvdW5kVGh1bmtHZW5lcmF0b3I7CisgICAgY2FzZSBFeHBJbnRyaW5zaWM6
CisgICAgICAgIHJldHVybiBleHBUaHVua0dlbmVyYXRvcjsKKyAgICBjYXNlIExvZ0ludHJpbnNp
YzoKKyAgICAgICAgcmV0dXJuIGxvZ1RodW5rR2VuZXJhdG9yOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KK30KKworTmF0aXZlRXhlY3V0YWJsZSogSlNHbG9iYWxEYXRh
OjpnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9u
IGNvbnN0cnVjdG9yKQoreworICAgIHJldHVybiBqaXRTdHVicy0+aG9zdEZ1bmN0aW9uU3R1Yih0
aGlzLCBmdW5jdGlvbiwgY29uc3RydWN0b3IpOworfQorTmF0aXZlRXhlY3V0YWJsZSogSlNHbG9i
YWxEYXRhOjpnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIEludHJpbnNp
YyBpbnRyaW5zaWMpCit7CisgICAgQVNTRVJUKGNhblVzZUpJVCgpKTsKKyAgICByZXR1cm4gaml0
U3R1YnMtPmhvc3RGdW5jdGlvblN0dWIodGhpcywgZnVuY3Rpb24sIGludHJpbnNpYyAhPSBOb0lu
dHJpbnNpYyA/IHRodW5rR2VuZXJhdG9yRm9ySW50cmluc2ljKGludHJpbnNpYykgOiAwLCBpbnRy
aW5zaWMpOworfQorCisjZWxzZSAvLyAhRU5BQkxFKEpJVCkKK05hdGl2ZUV4ZWN1dGFibGUqIEpT
R2xvYmFsRGF0YTo6Z2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRp
dmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKK3sKKyAgICByZXR1cm4gTmF0aXZlRXhlY3V0YWJsZTo6
Y3JlYXRlKCp0aGlzLCBmdW5jdGlvbiwgY29uc3RydWN0b3IpOworfQorI2VuZGlmIC8vICFFTkFC
TEUoSklUKQorCitKU0dsb2JhbERhdGE6OkNsaWVudERhdGE6On5DbGllbnREYXRhKCkKK3sKK30K
Kwordm9pZCBKU0dsb2JhbERhdGE6OnJlc2V0RGF0ZUNhY2hlKCkKK3sKKyAgICBjYWNoZWRVVENP
ZmZzZXQgPSBRTmFOOworICAgIGRzdE9mZnNldENhY2hlLnJlc2V0KCk7CisgICAgY2FjaGVkRGF0
ZVN0cmluZyA9IFN0cmluZygpOworICAgIGNhY2hlZERhdGVTdHJpbmdWYWx1ZSA9IFFOYU47Cisg
ICAgZGF0ZUluc3RhbmNlQ2FjaGUucmVzZXQoKTsKK30KKwordm9pZCBKU0dsb2JhbERhdGE6OnN0
YXJ0U2FtcGxpbmcoKQoreworICAgIGludGVycHJldGVyLT5zdGFydFNhbXBsaW5nKCk7Cit9CisK
K3ZvaWQgSlNHbG9iYWxEYXRhOjpzdG9wU2FtcGxpbmcoKQoreworICAgIGludGVycHJldGVyLT5z
dG9wU2FtcGxpbmcoKTsKK30KKwordm9pZCBKU0dsb2JhbERhdGE6OmRpc2NhcmRBbGxDb2RlKCkK
K3sKKyAgICBtX2NvZGVDYWNoZS0+Y2xlYXIoKTsKKyAgICBoZWFwLmRlbGV0ZUFsbENvbXBpbGVk
Q29kZSgpOworICAgIGhlYXAucmVwb3J0QWJhbmRvbmVkT2JqZWN0R3JhcGgoKTsKK30KKwordm9p
ZCBKU0dsb2JhbERhdGE6OmR1bXBTYW1wbGVEYXRhKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBp
bnRlcnByZXRlci0+ZHVtcFNhbXBsZURhdGEoZXhlYyk7CisjaWYgRU5BQkxFKEFTU0VNQkxFUikK
KyAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSgpOworI2VuZGlmCit9CisKK1Nv
dXJjZVByb3ZpZGVyQ2FjaGUqIEpTR2xvYmFsRGF0YTo6YWRkU291cmNlUHJvdmlkZXJDYWNoZShT
b3VyY2VQcm92aWRlciogc291cmNlUHJvdmlkZXIpCit7CisgICAgU291cmNlUHJvdmlkZXJDYWNo
ZU1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IHNvdXJjZVByb3ZpZGVyQ2FjaGVNYXAuYWRkKHNv
dXJjZVByb3ZpZGVyLCAwKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAg
IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBhZG9wdFJlZihuZXcgU291cmNlUHJvdmlkZXJD
YWNoZSk7CisgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7Cit9CisK
K3ZvaWQgSlNHbG9iYWxEYXRhOjpjbGVhclNvdXJjZVByb3ZpZGVyQ2FjaGVzKCkKK3sKKyAgICBz
b3VyY2VQcm92aWRlckNhY2hlTWFwLmNsZWFyKCk7Cit9CisKK3N0cnVjdCBTdGFja1ByZXNlcnZp
bmdSZWNvbXBpbGVyIDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CisgICAgSGFz
aFNldDxGdW5jdGlvbkV4ZWN1dGFibGUqPiBjdXJyZW50bHlFeGVjdXRpbmdGdW5jdGlvbnM7Cisg
ICAgdm9pZCBvcGVyYXRvcigpKEpTQ2VsbCogY2VsbCkKKyAgICB7CisgICAgICAgIGlmICghY2Vs
bC0+aW5oZXJpdHMoJkZ1bmN0aW9uRXhlY3V0YWJsZTo6c19pbmZvKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpOworICAgICAgICBpZiAoY3VycmVudGx5RXhlY3V0aW5n
RnVuY3Rpb25zLmNvbnRhaW5zKGV4ZWN1dGFibGUpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBleGVjdXRhYmxlLT5jbGVhckNvZGVJZk5vdENvbXBpbGluZygpOworICAgIH0KK307CisK
K3ZvaWQgSlNHbG9iYWxEYXRhOjpyZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSgpCit7CisgICAgaWYg
KGR5bmFtaWNHbG9iYWxPYmplY3QpIHsKKyAgICAgICAgU3RhY2tQcmVzZXJ2aW5nUmVjb21waWxl
ciByZWNvbXBpbGVyOworICAgICAgICBIYXNoU2V0PEpTQ2VsbCo+IHJvb3RzOworICAgICAgICBo
ZWFwLmNhbm9uaWNhbGl6ZUNlbGxMaXZlbmVzc0RhdGEoKTsKKyAgICAgICAgaGVhcC5nZXRDb25z
ZXJ2YXRpdmVSZWdpc3RlclJvb3RzKHJvb3RzKTsKKyAgICAgICAgSGFzaFNldDxKU0NlbGwqPjo6
aXRlcmF0b3IgZW5kID0gcm9vdHMuZW5kKCk7CisgICAgICAgIGZvciAoSGFzaFNldDxKU0NlbGwq
Pjo6aXRlcmF0b3IgcHRyID0gcm9vdHMuYmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpIHsKKyAg
ICAgICAgICAgIFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSAwOworICAgICAgICAgICAg
SlNDZWxsKiBjZWxsID0gKnB0cjsKKyAgICAgICAgICAgIGlmIChjZWxsLT5pbmhlcml0cygmU2Ny
aXB0RXhlY3V0YWJsZTo6c19pbmZvKSkKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gc3Rh
dGljX2Nhc3Q8U2NyaXB0RXhlY3V0YWJsZSo+KCpwdHIpOworICAgICAgICAgICAgZWxzZSBpZiAo
Y2VsbC0+aW5oZXJpdHMoJkpTRnVuY3Rpb246OnNfaW5mbykpIHsKKyAgICAgICAgICAgICAgICBK
U0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oKnB0cik7CisgICAgICAg
ICAgICAgICAgaWYgKGZ1bmN0aW9uLT5pc0hvc3RGdW5jdGlvbigpKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmpz
RXhlY3V0YWJsZSgpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBBU1NFUlQoZXhlY3V0YWJsZS0+aW5oZXJpdHMoJlNjcmlwdEV4ZWN1
dGFibGU6OnNfaW5mbykpOworICAgICAgICAgICAgZXhlY3V0YWJsZS0+dW5saW5rQ2FsbHMoKTsK
KyAgICAgICAgICAgIGlmIChleGVjdXRhYmxlLT5pbmhlcml0cygmRnVuY3Rpb25FeGVjdXRhYmxl
OjpzX2luZm8pKQorICAgICAgICAgICAgICAgIHJlY29tcGlsZXIuY3VycmVudGx5RXhlY3V0aW5n
RnVuY3Rpb25zLmFkZChzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxl
KSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICAgICAgaGVhcC5vYmplY3RTcGFj
ZSgpLmZvckVhY2hMaXZlQ2VsbDxTdGFja1ByZXNlcnZpbmdSZWNvbXBpbGVyPihyZWNvbXBpbGVy
KTsKKyAgICB9CisgICAgbV9yZWdFeHBDYWNoZS0+aW52YWxpZGF0ZUNvZGUoKTsKKyAgICBoZWFw
LmNvbGxlY3RBbGxHYXJiYWdlKCk7Cit9CisgICAgCit2b2lkIHJlbGVhc2VFeGVjdXRhYmxlTWVt
b3J5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBnbG9iYWxEYXRhLnJlbGVhc2VF
eGVjdXRhYmxlTWVtb3J5KCk7Cit9CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK3ZvaWQgSlNHbG9i
YWxEYXRhOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2Vy
dmF0aXZlUm9vdHMpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzY3JhdGNoQnVmZmVy
cy5zaXplKCk7IGkrKykgeworICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0g
c2NyYXRjaEJ1ZmZlcnNbaV07CisgICAgICAgIGlmIChzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5n
dGgoKSkgeworICAgICAgICAgICAgdm9pZCogYnVmZmVyU3RhcnQgPSBzY3JhdGNoQnVmZmVyLT5k
YXRhQnVmZmVyKCk7CisgICAgICAgICAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYnVmZmVyU3Rh
cnQsIHN0YXRpY19jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxjaGFyKj4oYnVmZmVyU3RhcnQpICsg
c2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoKCkpKTsKKyAgICAgICAgfQorICAgIH0KK30KKyNl
bmRpZgorCisjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQordm9pZCBKU0dsb2JhbERhdGE6OmFk
ZFJlZ0V4cFRvVHJhY2UoUmVnRXhwKiByZWdFeHApCit7CisgICAgbV9ydFRyYWNlTGlzdC0+YWRk
KHJlZ0V4cCk7Cit9CisKK3ZvaWQgSlNHbG9iYWxEYXRhOjpkdW1wUmVnRXhwVHJhY2UoKQorewor
ICAgIC8vIFRoZSBmaXJzdCBSZWdFeHAgb2JqZWN0IGlzIGlnbm9yZWQuICBJdCBpcyBjcmVhdGUg
YnkgdGhlIFJlZ0V4cFByb3RvdHlwZSBjdG9yIGFuZCBub3QgdXNlZC4KKyAgICBSVFRyYWNlTGlz
dDo6aXRlcmF0b3IgaXRlciA9ICsrbV9ydFRyYWNlTGlzdC0+YmVnaW4oKTsKKyAgICAKKyAgICBp
ZiAoaXRlciAhPSBtX3J0VHJhY2VMaXN0LT5lbmQoKSkgeworICAgICAgICBkYXRhTG9nRigiXG5S
ZWdFeHAgVHJhY2luZ1xuIik7CisgICAgICAgIGRhdGFMb2dGKCIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCgpICAgIG1hdGNo
ZXNcbiIpOworICAgICAgICBkYXRhTG9nRigiUmVndWxhciBFeHByZXNzaW9uICAgICAgICAgICAg
ICAgICAgICAgICAgICBKSVQgQWRkcmVzcyAgICAgIGNhbGxzICAgICAgZm91bmRcbiIpOworICAg
ICAgICBkYXRhTG9nRigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst
LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLVxuIik7CisgICAgCisgICAgICAg
IHVuc2lnbmVkIHJlQ291bnQgPSAwOworICAgIAorICAgICAgICBmb3IgKDsgaXRlciAhPSBtX3J0
VHJhY2VMaXN0LT5lbmQoKTsgKytpdGVyLCArK3JlQ291bnQpCisgICAgICAgICAgICAoKml0ZXIp
LT5wcmludFRyYWNlRGF0YSgpOworCisgICAgICAgIGRhdGFMb2dGKCIlZCBSZWd1bGFyIEV4cHJl
c3Npb25zXG4iLCByZUNvdW50KTsKKyAgICB9CisgICAgCisgICAgbV9ydFRyYWNlTGlzdC0+Y2xl
YXIoKTsKK30KKyNlbHNlCit2b2lkIEpTR2xvYmFsRGF0YTo6ZHVtcFJlZ0V4cFRyYWNlKCkKK3sK
K30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJW
TS5oIgogCiAjaW5jbHVkZSAiQXJnTGlzdC5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgpAQCAt
MTMzLDEzICsxMzMsMTMgQEAgc3RhdGljIGJvb2wgZW5hYmxlQXNzZW1ibGVyKEV4ZWN1dGFibGVB
bAogfQogI2VuZGlmIC8vIEVOQUJMRSghQVNTRU1CTEVSKQogCi1KU0dsb2JhbERhdGE6OkpTR2xv
YmFsRGF0YShHbG9iYWxEYXRhVHlwZSBnbG9iYWxEYXRhVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUp
CitWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgOiBtX2FwaUxv
Y2soYWRvcHRSZWYobmV3IEpTTG9jayh0aGlzKSkpCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKICAg
ICAsIGV4ZWN1dGFibGVBbGxvY2F0b3IoKnRoaXMpCiAjZW5kaWYKICAgICAsIGhlYXAodGhpcywg
aGVhcFR5cGUpCi0gICAgLCBnbG9iYWxEYXRhVHlwZShnbG9iYWxEYXRhVHlwZSkKKyAgICAsIHZt
VHlwZSh2bVR5cGUpCiAgICAgLCBjbGllbnREYXRhKDApCiAgICAgLCB0b3BDYWxsRnJhbWUoQ2Fs
bEZyYW1lOjpub0NhbGxlcigpKQogICAgICwgYXJyYXlDb25zdHJ1Y3RvclRhYmxlKGZhc3ROZXc8
SGFzaFRhYmxlPihKU0M6OmFycmF5Q29uc3RydWN0b3JUYWJsZSkpCkBAIC0xNTksNyArMTU5LDcg
QEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cAogICAgICwgcmVnRXhw
Q29uc3RydWN0b3JUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpyZWdFeHBDb25zdHJ1Y3Rv
clRhYmxlKSkKICAgICAsIHJlZ0V4cFByb3RvdHlwZVRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihK
U0M6OnJlZ0V4cFByb3RvdHlwZVRhYmxlKSkKICAgICAsIHN0cmluZ0NvbnN0cnVjdG9yVGFibGUo
ZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6c3RyaW5nQ29uc3RydWN0b3JUYWJsZSkpCi0gICAgLCBp
ZGVudGlmaWVyVGFibGUoZ2xvYmFsRGF0YVR5cGUgPT0gRGVmYXVsdCA/IHd0ZlRocmVhZERhdGEo
KS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkgOiBjcmVhdGVJZGVudGlmaWVyVGFibGUoKSkKKyAg
ICAsIGlkZW50aWZpZXJUYWJsZSh2bVR5cGUgPT0gRGVmYXVsdCA/IHd0ZlRocmVhZERhdGEoKS5j
dXJyZW50SWRlbnRpZmllclRhYmxlKCkgOiBjcmVhdGVJZGVudGlmaWVyVGFibGUoKSkKICAgICAs
IHByb3BlcnR5TmFtZXMobmV3IENvbW1vbklkZW50aWZpZXJzKHRoaXMpKQogICAgICwgZW1wdHlM
aXN0KG5ldyBNYXJrZWRBcmd1bWVudEJ1ZmZlcikKICAgICAsIHBhcnNlckFyZW5hKGFkb3B0UHRy
KG5ldyBQYXJzZXJBcmVuYSkpCkBAIC0yNjQsNyArMjY0LDcgQEAgSlNHbG9iYWxEYXRhOjpKU0ds
b2JhbERhdGEoR2xvYmFsRGF0YVR5cAogI2VuZGlmCiB9CiAKLUpTR2xvYmFsRGF0YTo6fkpTR2xv
YmFsRGF0YSgpCitWTTo6flZNKCkKIHsKICAgICAvLyBDbGVhciB0aGlzIGZpcnN0IHRvIGVuc3Vy
ZSB0aGF0IG5vYm9keSB0cmllcyB0byByZW1vdmUgdGhlbXNlbHZlcyBmcm9tIGl0LgogICAgIG1f
cGVyQnl0ZWNvZGVQcm9maWxlci5jbGVhcigpOwpAQCAtMzE3LDcgKzMxNyw3IEBAIEpTR2xvYmFs
RGF0YTo6fkpTR2xvYmFsRGF0YSgpCiAgICAgZGVsZXRlIGVtcHR5TGlzdDsKIAogICAgIGRlbGV0
ZSBwcm9wZXJ0eU5hbWVzOwotICAgIGlmIChnbG9iYWxEYXRhVHlwZSAhPSBEZWZhdWx0KQorICAg
IGlmICh2bVR5cGUgIT0gRGVmYXVsdCkKICAgICAgICAgZGVsZXRlSWRlbnRpZmllclRhYmxlKGlk
ZW50aWZpZXJUYWJsZSk7CiAKICAgICBkZWxldGUgY2xpZW50RGF0YTsKQEAgLTMzMiw0MCArMzMy
LDQwIEBAIEpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSgpCiAjZW5kaWYKIH0KIAotUGFzc1Jl
ZlB0cjxKU0dsb2JhbERhdGE+IEpTR2xvYmFsRGF0YTo6Y3JlYXRlQ29udGV4dEdyb3VwKEhlYXBU
eXBlIGhlYXBUeXBlKQorUGFzc1JlZlB0cjxWTT4gVk06OmNyZWF0ZUNvbnRleHRHcm91cChIZWFw
VHlwZSBoZWFwVHlwZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpTR2xvYmFsRGF0YShB
UElDb250ZXh0R3JvdXAsIGhlYXBUeXBlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWTShB
UElDb250ZXh0R3JvdXAsIGhlYXBUeXBlKSk7CiB9CiAKLVBhc3NSZWZQdHI8SlNHbG9iYWxEYXRh
PiBKU0dsb2JhbERhdGE6OmNyZWF0ZShIZWFwVHlwZSBoZWFwVHlwZSkKK1Bhc3NSZWZQdHI8Vk0+
IFZNOjpjcmVhdGUoSGVhcFR5cGUgaGVhcFR5cGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBKU0dsb2JhbERhdGEoRGVmYXVsdCwgaGVhcFR5cGUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFZNKERlZmF1bHQsIGhlYXBUeXBlKSk7CiB9CiAKLVBhc3NSZWZQdHI8SlNHbG9iYWxEYXRh
PiBKU0dsb2JhbERhdGE6OmNyZWF0ZUxlYWtlZChIZWFwVHlwZSBoZWFwVHlwZSkKK1Bhc3NSZWZQ
dHI8Vk0+IFZNOjpjcmVhdGVMZWFrZWQoSGVhcFR5cGUgaGVhcFR5cGUpCiB7CiAgICAgcmV0dXJu
IGNyZWF0ZShoZWFwVHlwZSk7CiB9CiAKLWJvb2wgSlNHbG9iYWxEYXRhOjpzaGFyZWRJbnN0YW5j
ZUV4aXN0cygpCitib29sIFZNOjpzaGFyZWRJbnN0YW5jZUV4aXN0cygpCiB7CiAgICAgcmV0dXJu
IHNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKTsKIH0KIAotSlNHbG9iYWxEYXRhJiBKU0dsb2JhbERh
dGE6OnNoYXJlZEluc3RhbmNlKCkKK1ZNJiBWTTo6c2hhcmVkSW5zdGFuY2UoKQogewogICAgIEds
b2JhbEpTTG9jayBnbG9iYWxMb2NrOwotICAgIEpTR2xvYmFsRGF0YSomIGluc3RhbmNlID0gc2hh
cmVkSW5zdGFuY2VJbnRlcm5hbCgpOworICAgIFZNKiYgaW5zdGFuY2UgPSBzaGFyZWRJbnN0YW5j
ZUludGVybmFsKCk7CiAgICAgaWYgKCFpbnN0YW5jZSkgewotICAgICAgICBpbnN0YW5jZSA9IGFk
b3B0UmVmKG5ldyBKU0dsb2JhbERhdGEoQVBJU2hhcmVkLCBTbWFsbEhlYXApKS5sZWFrUmVmKCk7
CisgICAgICAgIGluc3RhbmNlID0gYWRvcHRSZWYobmV3IFZNKEFQSVNoYXJlZCwgU21hbGxIZWFw
KSkubGVha1JlZigpOwogICAgICAgICBpbnN0YW5jZS0+bWFrZVVzYWJsZUZyb21NdWx0aXBsZVRo
cmVhZHMoKTsKICAgICB9CiAgICAgcmV0dXJuICppbnN0YW5jZTsKIH0KIAotSlNHbG9iYWxEYXRh
KiYgSlNHbG9iYWxEYXRhOjpzaGFyZWRJbnN0YW5jZUludGVybmFsKCkKK1ZNKiYgVk06OnNoYXJl
ZEluc3RhbmNlSW50ZXJuYWwoKQogewotICAgIHN0YXRpYyBKU0dsb2JhbERhdGEqIHNoYXJlZElu
c3RhbmNlOworICAgIHN0YXRpYyBWTSogc2hhcmVkSW5zdGFuY2U7CiAgICAgcmV0dXJuIHNoYXJl
ZEluc3RhbmNlOwogfQogCkBAIC00MDAsMjggKzQwMCwyOCBAQCBzdGF0aWMgVGh1bmtHZW5lcmF0
b3IgdGh1bmtHZW5lcmF0b3JGb3JJCiAgICAgfQogfQogCi1OYXRpdmVFeGVjdXRhYmxlKiBKU0ds
b2JhbERhdGE6OmdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZl
RnVuY3Rpb24gY29uc3RydWN0b3IpCitOYXRpdmVFeGVjdXRhYmxlKiBWTTo6Z2V0SG9zdEZ1bmN0
aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikK
IHsKICAgICByZXR1cm4gaml0U3R1YnMtPmhvc3RGdW5jdGlvblN0dWIodGhpcywgZnVuY3Rpb24s
IGNvbnN0cnVjdG9yKTsKIH0KLU5hdGl2ZUV4ZWN1dGFibGUqIEpTR2xvYmFsRGF0YTo6Z2V0SG9z
dEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBJbnRyaW5zaWMgaW50cmluc2ljKQor
TmF0aXZlRXhlY3V0YWJsZSogVk06OmdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiBmdW5j
dGlvbiwgSW50cmluc2ljIGludHJpbnNpYykKIHsKICAgICBBU1NFUlQoY2FuVXNlSklUKCkpOwog
ICAgIHJldHVybiBqaXRTdHVicy0+aG9zdEZ1bmN0aW9uU3R1Yih0aGlzLCBmdW5jdGlvbiwgaW50
cmluc2ljICE9IE5vSW50cmluc2ljID8gdGh1bmtHZW5lcmF0b3JGb3JJbnRyaW5zaWMoaW50cmlu
c2ljKSA6IDAsIGludHJpbnNpYyk7CiB9CiAKICNlbHNlIC8vICFFTkFCTEUoSklUKQotTmF0aXZl
RXhlY3V0YWJsZSogSlNHbG9iYWxEYXRhOjpnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24g
ZnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQorTmF0aXZlRXhlY3V0YWJsZSog
Vk06OmdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rp
b24gY29uc3RydWN0b3IpCiB7CiAgICAgcmV0dXJuIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgq
dGhpcywgZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKIH0KICNlbmRpZiAvLyAhRU5BQkxFKEpJVCkK
IAotSlNHbG9iYWxEYXRhOjpDbGllbnREYXRhOjp+Q2xpZW50RGF0YSgpCitWTTo6Q2xpZW50RGF0
YTo6fkNsaWVudERhdGEoKQogewogfQogCi12b2lkIEpTR2xvYmFsRGF0YTo6cmVzZXREYXRlQ2Fj
aGUoKQordm9pZCBWTTo6cmVzZXREYXRlQ2FjaGUoKQogewogICAgIGNhY2hlZFVUQ09mZnNldCA9
IFFOYU47CiAgICAgZHN0T2Zmc2V0Q2FjaGUucmVzZXQoKTsKQEAgLTQzMCwyNCArNDMwLDI0IEBA
IHZvaWQgSlNHbG9iYWxEYXRhOjpyZXNldERhdGVDYWNoZSgpCiAgICAgZGF0ZUluc3RhbmNlQ2Fj
aGUucmVzZXQoKTsKIH0KIAotdm9pZCBKU0dsb2JhbERhdGE6OnN0YXJ0U2FtcGxpbmcoKQordm9p
ZCBWTTo6c3RhcnRTYW1wbGluZygpCiB7CiAgICAgaW50ZXJwcmV0ZXItPnN0YXJ0U2FtcGxpbmco
KTsKIH0KIAotdm9pZCBKU0dsb2JhbERhdGE6OnN0b3BTYW1wbGluZygpCit2b2lkIFZNOjpzdG9w
U2FtcGxpbmcoKQogewogICAgIGludGVycHJldGVyLT5zdG9wU2FtcGxpbmcoKTsKIH0KIAotdm9p
ZCBKU0dsb2JhbERhdGE6OmRpc2NhcmRBbGxDb2RlKCkKK3ZvaWQgVk06OmRpc2NhcmRBbGxDb2Rl
KCkKIHsKICAgICBtX2NvZGVDYWNoZS0+Y2xlYXIoKTsKICAgICBoZWFwLmRlbGV0ZUFsbENvbXBp
bGVkQ29kZSgpOwogICAgIGhlYXAucmVwb3J0QWJhbmRvbmVkT2JqZWN0R3JhcGgoKTsKIH0KIAot
dm9pZCBKU0dsb2JhbERhdGE6OmR1bXBTYW1wbGVEYXRhKEV4ZWNTdGF0ZSogZXhlYykKK3ZvaWQg
Vk06OmR1bXBTYW1wbGVEYXRhKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBpbnRlcnByZXRlci0+
ZHVtcFNhbXBsZURhdGEoZXhlYyk7CiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKQEAgLTQ1NSw3ICs0
NTUsNyBAQCB2b2lkIEpTR2xvYmFsRGF0YTo6ZHVtcFNhbXBsZURhdGEoRXhlY1N0CiAjZW5kaWYK
IH0KIAotU291cmNlUHJvdmlkZXJDYWNoZSogSlNHbG9iYWxEYXRhOjphZGRTb3VyY2VQcm92aWRl
ckNhY2hlKFNvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlcikKK1NvdXJjZVByb3ZpZGVyQ2Fj
aGUqIFZNOjphZGRTb3VyY2VQcm92aWRlckNhY2hlKFNvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92
aWRlcikKIHsKICAgICBTb3VyY2VQcm92aWRlckNhY2hlTWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0
ID0gc291cmNlUHJvdmlkZXJDYWNoZU1hcC5hZGQoc291cmNlUHJvdmlkZXIsIDApOwogICAgIGlm
IChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKQEAgLTQ2Myw3ICs0NjMsNyBAQCBTb3VyY2VQcm92aWRl
ckNhY2hlKiBKU0dsb2JhbERhdGE6OmFkZFNvCiAgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUuZ2V0KCk7CiB9CiAKLXZvaWQgSlNHbG9iYWxEYXRhOjpjbGVhclNvdXJjZVByb3Zp
ZGVyQ2FjaGVzKCkKK3ZvaWQgVk06OmNsZWFyU291cmNlUHJvdmlkZXJDYWNoZXMoKQogewogICAg
IHNvdXJjZVByb3ZpZGVyQ2FjaGVNYXAuY2xlYXIoKTsKIH0KQEAgLTQ4MSw3ICs0ODEsNyBAQCBz
dHJ1Y3QgU3RhY2tQcmVzZXJ2aW5nUmVjb21waWxlciA6IHB1YmxpCiAgICAgfQogfTsKIAotdm9p
ZCBKU0dsb2JhbERhdGE6OnJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KCkKK3ZvaWQgVk06OnJlbGVh
c2VFeGVjdXRhYmxlTWVtb3J5KCkKIHsKICAgICBpZiAoZHluYW1pY0dsb2JhbE9iamVjdCkgewog
ICAgICAgICBTdGFja1ByZXNlcnZpbmdSZWNvbXBpbGVyIHJlY29tcGlsZXI7CkBAIC01MTMsMTMg
KzUxMywxMyBAQCB2b2lkIEpTR2xvYmFsRGF0YTo6cmVsZWFzZUV4ZWN1dGFibGVNZW1vCiAgICAg
aGVhcC5jb2xsZWN0QWxsR2FyYmFnZSgpOwogfQogICAgIAotdm9pZCByZWxlYXNlRXhlY3V0YWJs
ZU1lbW9yeShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIHJlbGVhc2VFeGVjdXRhYmxl
TWVtb3J5KFZNJiB2bSkKIHsKLSAgICBnbG9iYWxEYXRhLnJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5
KCk7CisgICAgdm0ucmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoKTsKIH0KIAogI2lmIEVOQUJMRShE
RkdfSklUKQotdm9pZCBKU0dsb2JhbERhdGE6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNl
cnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykKK3ZvaWQgVk06OmdhdGhlckNvbnNlcnZh
dGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykKIHsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNjcmF0Y2hCdWZmZXJzLnNpemUoKTsgaSsrKSB7CiAgICAg
ICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBzY3JhdGNoQnVmZmVyc1tpXTsKQEAg
LTUzMiwxMiArNTMyLDEyIEBAIHZvaWQgSlNHbG9iYWxEYXRhOjpnYXRoZXJDb25zZXJ2YXRpdmVS
b28KICNlbmRpZgogCiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQotdm9pZCBKU0dsb2JhbERh
dGE6OmFkZFJlZ0V4cFRvVHJhY2UoUmVnRXhwKiByZWdFeHApCit2b2lkIFZNOjphZGRSZWdFeHBU
b1RyYWNlKFJlZ0V4cCogcmVnRXhwKQogewogICAgIG1fcnRUcmFjZUxpc3QtPmFkZChyZWdFeHAp
OwogfQogCi12b2lkIEpTR2xvYmFsRGF0YTo6ZHVtcFJlZ0V4cFRyYWNlKCkKK3ZvaWQgVk06OmR1
bXBSZWdFeHBUcmFjZSgpCiB7CiAgICAgLy8gVGhlIGZpcnN0IFJlZ0V4cCBvYmplY3QgaXMgaWdu
b3JlZC4gIEl0IGlzIGNyZWF0ZSBieSB0aGUgUmVnRXhwUHJvdG90eXBlIGN0b3IgYW5kIG5vdCB1
c2VkLgogICAgIFJUVHJhY2VMaXN0OjppdGVyYXRvciBpdGVyID0gKyttX3J0VHJhY2VMaXN0LT5i
ZWdpbigpOwpAQCAtNTU5LDcgKzU1OSw3IEBAIHZvaWQgSlNHbG9iYWxEYXRhOjpkdW1wUmVnRXhw
VHJhY2UoKQogICAgIG1fcnRUcmFjZUxpc3QtPmNsZWFyKCk7CiB9CiAjZWxzZQotdm9pZCBKU0ds
b2JhbERhdGE6OmR1bXBSZWdFeHBUcmFjZSgpCit2b2lkIFZNOjpkdW1wUmVnRXhwVHJhY2UoKQog
ewogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9u
IDE0ODY1NCkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRh
Lmg6MTQ4NjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDUyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAw
OSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKU0dsb2Jh
bERhdGFfaAorI2RlZmluZSBKU0dsb2JhbERhdGFfaAorCisjaW5jbHVkZSAiQ2FjaGVkVHJhbnNj
ZW5kZW50YWxGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkRhdGVJbnN0YW5jZUNhY2hlLmgiCisjaW5j
bHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRl
ICJJbnRyaW5zaWMuaCIKKyNpbmNsdWRlICJKSVRUaHVua3MuaCIKKyNpbmNsdWRlICJKSVRUaHVu
a3MuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiSlNMb2NrLmgiCisjaW5j
bHVkZSAiTExJbnREYXRhLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCisj
aW5jbHVkZSAiTnVtZXJpY1N0cmluZ3MuaCIKKyNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgi
CisjaW5jbHVkZSAiUHJpdmF0ZU5hbWUuaCIKKyNpbmNsdWRlICJQcm90b3R5cGVNYXAuaCIKKyNp
bmNsdWRlICJTbWFsbFN0cmluZ3MuaCIKKyNpbmNsdWRlICJTdHJvbmcuaCIKKyNpbmNsdWRlICJU
aHVua0dlbmVyYXRvcnMuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5RGVzY3JpcHRvci5oIgorI2lu
Y2x1ZGUgIldhdGNoZG9nLmgiCisjaW5jbHVkZSAiV2Vha1JhbmRvbS5oIgorI2luY2x1ZGUgPHd0
Zi9CdW1wUG9pbnRlckFsbG9jYXRvci5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZEFycmF5Lmg+Cisj
aW5jbHVkZSA8d3RmL1NpbXBsZVN0YXRzLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CisjaW5jbHVkZSA8d3Rm
L1dURlRocmVhZERhdGEuaD4KKyNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCisjaW5jbHVkZSA8
d3RmL0xpc3RIYXNoU2V0Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIEpTQyB7CisKKyAgICBjbGFz
cyBDb2RlQmxvY2s7CisgICAgY2xhc3MgQ29kZUNhY2hlOworICAgIGNsYXNzIENvbW1vbklkZW50
aWZpZXJzOworICAgIGNsYXNzIEV4ZWNTdGF0ZTsKKyAgICBjbGFzcyBIYW5kbGVTdGFjazsKKyAg
ICBjbGFzcyBJZGVudGlmaWVyVGFibGU7CisgICAgY2xhc3MgSW50ZXJwcmV0ZXI7CisgICAgY2xh
c3MgSlNHbG9iYWxPYmplY3Q7CisgICAgY2xhc3MgSlNPYmplY3Q7CisgICAgY2xhc3MgS2V5d29y
ZHM7CisgICAgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworICAgIGNsYXNzIExlZ2FjeVBy
b2ZpbGVyOworICAgIGNsYXNzIE5hdGl2ZUV4ZWN1dGFibGU7CisgICAgY2xhc3MgUGFyc2VyQXJl
bmE7CisgICAgY2xhc3MgUmVnRXhwQ2FjaGU7CisgICAgY2xhc3MgU291cmNlUHJvdmlkZXI7Cisg
ICAgY2xhc3MgU291cmNlUHJvdmlkZXJDYWNoZTsKKyAgICBzdHJ1Y3QgU3RhY2tGcmFtZTsKKyAg
ICBjbGFzcyBTdHJpbmdpZmllcjsKKyAgICBjbGFzcyBTdHJ1Y3R1cmU7CisjaWYgRU5BQkxFKFJF
R0VYUF9UUkFDSU5HKQorICAgIGNsYXNzIFJlZ0V4cDsKKyNlbmRpZgorICAgIGNsYXNzIFVubGlu
a2VkQ29kZUJsb2NrOworICAgIGNsYXNzIFVubGlua2VkRXZhbENvZGVCbG9jazsKKyAgICBjbGFz
cyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKKyAgICBjbGFzcyBVbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2s7CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBuYW1lc3BhY2UgREZHIHsKKyAg
ICBjbGFzcyBMb25nTGl2ZWRTdGF0ZTsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKKyAgICBzdHJ1Y3QgSGFzaFRhYmxlOworICAgIHN0cnVjdCBJbnN0cnVjdGlvbjsKKworICAg
IHN0cnVjdCBEU1RPZmZzZXRDYWNoZSB7CisgICAgICAgIERTVE9mZnNldENhY2hlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmVzZXQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
dm9pZCByZXNldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG9mZnNldCA9IDAuMDsKKyAgICAg
ICAgICAgIHN0YXJ0ID0gMC4wOworICAgICAgICAgICAgZW5kID0gLTEuMDsKKyAgICAgICAgICAg
IGluY3JlbWVudCA9IDAuMDsKKyAgICAgICAgfQorCisgICAgICAgIGRvdWJsZSBvZmZzZXQ7Cisg
ICAgICAgIGRvdWJsZSBzdGFydDsKKyAgICAgICAgZG91YmxlIGVuZDsKKyAgICAgICAgZG91Ymxl
IGluY3JlbWVudDsKKyAgICB9OworCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgY2xhc3MgQ29u
c2VydmF0aXZlUm9vdHM7CisKKyNpZiBDT01QSUxFUihNU1ZDKQorI3ByYWdtYSB3YXJuaW5nKHB1
c2gpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDIwMCkgLy8gRGlzYWJsZSAiemVyby1zaXpl
ZCBhcnJheSBpbiBzdHJ1Y3QvdW5pb24iIHdhcm5pbmcKKyNlbmRpZgorICAgIHN0cnVjdCBTY3Jh
dGNoQnVmZmVyIHsKKyAgICAgICAgU2NyYXRjaEJ1ZmZlcigpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHUubV9hY3RpdmVMZW5ndGggPSAwOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIFNj
cmF0Y2hCdWZmZXIqIGNyZWF0ZShzaXplX3Qgc2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
U2NyYXRjaEJ1ZmZlciogcmVzdWx0ID0gbmV3IChmYXN0TWFsbG9jKFNjcmF0Y2hCdWZmZXI6OmFs
bG9jYXRpb25TaXplKHNpemUpKSkgU2NyYXRjaEJ1ZmZlcjsKKworICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNp
emUoc2l6ZV90IGJ1ZmZlclNpemUpIHsgcmV0dXJuIHNpemVvZihTY3JhdGNoQnVmZmVyKSArIGJ1
ZmZlclNpemU7IH0KKyAgICAgICAgdm9pZCBzZXRBY3RpdmVMZW5ndGgoc2l6ZV90IGFjdGl2ZUxl
bmd0aCkgeyB1Lm1fYWN0aXZlTGVuZ3RoID0gYWN0aXZlTGVuZ3RoOyB9CisgICAgICAgIHNpemVf
dCBhY3RpdmVMZW5ndGgoKSBjb25zdCB7IHJldHVybiB1Lm1fYWN0aXZlTGVuZ3RoOyB9OworICAg
ICAgICBzaXplX3QqIGFjdGl2ZUxlbmd0aFB0cigpIHsgcmV0dXJuICZ1Lm1fYWN0aXZlTGVuZ3Ro
OyB9OworICAgICAgICB2b2lkKiBkYXRhQnVmZmVyKCkgeyByZXR1cm4gbV9idWZmZXI7IH0KKwor
ICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBzaXplX3QgbV9hY3RpdmVMZW5ndGg7CisgICAg
ICAgICAgICBkb3VibGUgcGFkOyAvLyBNYWtlIHN1cmUgbV9idWZmZXIgaXMgZG91YmxlIGFsaWdu
ZWQuCisgICAgICAgIH0gdTsKKyNpZiBDUFUoTUlQUykgJiYgKGRlZmluZWQgV1RGX01JUFNfQVJD
SF9SRVYgJiYgV1RGX01JUFNfQVJDSF9SRVYgPT0gMikKKyAgICAgICAgdm9pZCogbV9idWZmZXJb
MF0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOworI2Vsc2UKKyAgICAgICAgdm9pZCogbV9i
dWZmZXJbMF07CisjZW5kaWYKKyAgICB9OworI2lmIENPTVBJTEVSKE1TVkMpCisjcHJhZ21hIHdh
cm5pbmcocG9wKQorI2VuZGlmCisjZW5kaWYKKworICAgIGNsYXNzIEpTR2xvYmFsRGF0YSA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxKU0dsb2JhbERhdGE+IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIC8vIFdlYkNvcmUgaGFzIGEgb25lLXRvLW9uZSBtYXBwaW5nIG9mIHRocmVhZHMgdG8g
SlNHbG9iYWxEYXRhczsKKyAgICAgICAgLy8gZWl0aGVyIGNyZWF0ZSgpIG9yIGNyZWF0ZUxlYWtl
ZCgpIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlCisgICAgICAgIC8vIG9uIGEgdGhyZWFkLCB0
aGlzIGlzIHRoZSAnZGVmYXVsdCcgSlNHbG9iYWxEYXRhIChpdCB1c2VzIHRoZQorICAgICAgICAv
LyB0aHJlYWQncyBkZWZhdWx0IHN0cmluZyB1bmlxdWluZyB0YWJsZSBmcm9tIHd0ZlRocmVhZERh
dGEpLgorICAgICAgICAvLyBBUEkgY29udGV4dHMgY3JlYXRlZCB1c2luZyB0aGUgbmV3IGNvbnRl
eHQgZ3JvdXAgYXdhcmUgaW50ZXJmYWNlCisgICAgICAgIC8vIGNyZWF0ZSBBUElDb250ZXh0R3Jv
dXAgb2JqZWN0cyB3aGljaCByZXF1aXJlIGxlc3MgbG9ja2luZyBvZiBKU0MKKyAgICAgICAgLy8g
dGhhbiB0aGUgb2xkIHNpbmdsZXRvbiBBUElTaGFyZWQgSlNHbG9iYWxEYXRhIGNyZWF0ZWQgZm9y
IHVzZSBieQorICAgICAgICAvLyB0aGUgb3JpZ2luYWwgQVBJLgorICAgICAgICBlbnVtIEdsb2Jh
bERhdGFUeXBlIHsgRGVmYXVsdCwgQVBJQ29udGV4dEdyb3VwLCBBUElTaGFyZWQgfTsKKyAgICAg
ICAgCisgICAgICAgIHN0cnVjdCBDbGllbnREYXRhIHsKKyAgICAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZpcnR1YWwgfkNsaWVudERhdGEoKSA9IDA7CisgICAgICAgIH07CisKKyAgICAgICAg
Ym9vbCBpc1NoYXJlZEluc3RhbmNlKCkgeyByZXR1cm4gZ2xvYmFsRGF0YVR5cGUgPT0gQVBJU2hh
cmVkOyB9CisgICAgICAgIGJvb2wgdXNpbmdBUEkoKSB7IHJldHVybiBnbG9iYWxEYXRhVHlwZSAh
PSBEZWZhdWx0OyB9CisgICAgICAgIHN0YXRpYyBib29sIHNoYXJlZEluc3RhbmNlRXhpc3RzKCk7
CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0dsb2JhbERhdGEmIHNoYXJlZElu
c3RhbmNlKCk7CisKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFBhc3NSZWZQdHI8
SlNHbG9iYWxEYXRhPiBjcmVhdGUoSGVhcFR5cGUgPSBTbWFsbEhlYXApOworICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IGNyZWF0ZUxlYWtl
ZChIZWFwVHlwZSA9IFNtYWxsSGVhcCk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTR2xv
YmFsRGF0YT4gY3JlYXRlQ29udGV4dEdyb3VwKEhlYXBUeXBlID0gU21hbGxIZWFwKTsKKyAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTR2xvYmFsRGF0YSgpOworCisgICAgICAgIHZvaWQgbWFr
ZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKSB7IGhlYXAubWFjaGluZVRocmVhZHMoKS5tYWtl
VXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBS
ZWZQdHI8SlNMb2NrPiBtX2FwaUxvY2s7CisKKyAgICBwdWJsaWM6CisjaWYgRU5BQkxFKEFTU0VN
QkxFUikKKyAgICAgICAgLy8gZXhlY3V0YWJsZUFsbG9jYXRvciBzaG91bGQgYmUgZGVzdHJ1Y3Rl
ZCBhZnRlciB0aGUgaGVhcCwgYXMgdGhlIGhlYXAgY2FuIGNhbGwgZXhlY3V0YWJsZUFsbG9jYXRv
cgorICAgICAgICAvLyBpbiBpdHMgZGVzdHJ1Y3Rvci4KKyAgICAgICAgRXhlY3V0YWJsZUFsbG9j
YXRvciBleGVjdXRhYmxlQWxsb2NhdG9yOworI2VuZGlmCisKKyAgICAgICAgLy8gVGhlIGhlYXAg
c2hvdWxkIGJlIGp1c3QgYWZ0ZXIgZXhlY3V0YWJsZUFsbG9jYXRvciBhbmQgYmVmb3JlIG90aGVy
IG1lbWJlcnMgdG8gZW5zdXJlIHRoYXQgaXQncworICAgICAgICAvLyBkZXN0cnVjdGVkIGFmdGVy
IGFsbCB0aGUgb2JqZWN0cyB0aGF0IHJlZmVyZW5jZSBpdC4KKyAgICAgICAgSGVhcCBoZWFwOwor
ICAgICAgICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgT3duUHRyPERGRzo6TG9uZ0xp
dmVkU3RhdGU+IG1fZGZnU3RhdGU7CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyAgICAg
ICAgR2xvYmFsRGF0YVR5cGUgZ2xvYmFsRGF0YVR5cGU7CisgICAgICAgIENsaWVudERhdGEqIGNs
aWVudERhdGE7CisgICAgICAgIEV4ZWNTdGF0ZSogdG9wQ2FsbEZyYW1lOworICAgICAgICBXYXRj
aGRvZyB3YXRjaGRvZzsKKworICAgICAgICBjb25zdCBIYXNoVGFibGUqIGFycmF5Q29uc3RydWN0
b3JUYWJsZTsKKyAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBhcnJheVByb3RvdHlwZVRhYmxlOwor
ICAgICAgICBjb25zdCBIYXNoVGFibGUqIGJvb2xlYW5Qcm90b3R5cGVUYWJsZTsKKyAgICAgICAg
Y29uc3QgSGFzaFRhYmxlKiBkYXRlVGFibGU7CisgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogZGF0
ZUNvbnN0cnVjdG9yVGFibGU7CisgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogZXJyb3JQcm90b3R5
cGVUYWJsZTsKKyAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBnbG9iYWxPYmplY3RUYWJsZTsKKyAg
ICAgICAgY29uc3QgSGFzaFRhYmxlKiBqc29uVGFibGU7CisgICAgICAgIGNvbnN0IEhhc2hUYWJs
ZSogbWF0aFRhYmxlOworICAgICAgICBjb25zdCBIYXNoVGFibGUqIG51bWJlckNvbnN0cnVjdG9y
VGFibGU7CisgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogbnVtYmVyUHJvdG90eXBlVGFibGU7Cisg
ICAgICAgIGNvbnN0IEhhc2hUYWJsZSogb2JqZWN0Q29uc3RydWN0b3JUYWJsZTsKKyAgICAgICAg
Y29uc3QgSGFzaFRhYmxlKiBwcml2YXRlTmFtZVByb3RvdHlwZVRhYmxlOworICAgICAgICBjb25z
dCBIYXNoVGFibGUqIHJlZ0V4cFRhYmxlOworICAgICAgICBjb25zdCBIYXNoVGFibGUqIHJlZ0V4
cENvbnN0cnVjdG9yVGFibGU7CisgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogcmVnRXhwUHJvdG90
eXBlVGFibGU7CisgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogc3RyaW5nQ29uc3RydWN0b3JUYWJs
ZTsKKyAgICAgICAgCisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVyZVN0cnVjdHVy
ZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3RydWN0dXJlUmFyZURhdGFTdHJ1Y3R1cmU7
CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGRlYnVnZ2VyQWN0aXZhdGlvblN0cnVjdHVyZTsK
KyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdGVybWluYXRlZEV4ZWN1dGlvbkVycm9yU3RydWN0
dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJpbmdTdHJ1Y3R1cmU7CisgICAgICAg
IFN0cm9uZzxTdHJ1Y3R1cmU+IG5vdEFuT2JqZWN0U3RydWN0dXJlOworICAgICAgICBTdHJvbmc8
U3RydWN0dXJlPiBwcm9wZXJ0eU5hbWVJdGVyYXRvclN0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25n
PFN0cnVjdHVyZT4gZ2V0dGVyU2V0dGVyU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0
dXJlPiBhcGlXcmFwcGVyU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBKU1Nj
b3BlU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBleGVjdXRhYmxlU3RydWN0
dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBuYXRpdmVFeGVjdXRhYmxlU3RydWN0dXJl
OworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBldmFsRXhlY3V0YWJsZVN0cnVjdHVyZTsKKyAg
ICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvZ3JhbUV4ZWN1dGFibGVTdHJ1Y3R1cmU7CisgICAg
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZTsKKyAgICAg
ICAgU3Ryb25nPFN0cnVjdHVyZT4gcmVnRXhwU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3Ry
dWN0dXJlPiBzaGFyZWRTeW1ib2xUYWJsZVN0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVj
dHVyZT4gc3RydWN0dXJlQ2hhaW5TdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+
IHNwYXJzZUFycmF5VmFsdWVNYXBTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+
IHdpdGhTY29wZVN0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVu
bGlua2VkUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVy
ZT4gdW5saW5rZWRFdmFsQ29kZUJsb2NrU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0
dXJlPiB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8
U3RydWN0dXJlPiBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlOworCisgICAgICAgIElkZW50aWZpZXJU
YWJsZSogaWRlbnRpZmllclRhYmxlOworICAgICAgICBDb21tb25JZGVudGlmaWVycyogcHJvcGVy
dHlOYW1lczsKKyAgICAgICAgY29uc3QgTWFya2VkQXJndW1lbnRCdWZmZXIqIGVtcHR5TGlzdDsg
Ly8gTGlzdHMgYXJlIHN1cHBvc2VkIHRvIGJlIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgdG8gaGF2
ZSB0aGVpciBlbGVtZW50cyBwcm9wZXJseSBtYXJrZWQsIHdoaWNoIGlzIG5vdCB0aGUgY2FzZSBo
ZXJlIC0gYnV0IHRoaXMgbGlzdCBoYXMgbm90aGluZyB0byBtYXJrLgorICAgICAgICBTbWFsbFN0
cmluZ3Mgc21hbGxTdHJpbmdzOworICAgICAgICBOdW1lcmljU3RyaW5ncyBudW1lcmljU3RyaW5n
czsKKyAgICAgICAgRGF0ZUluc3RhbmNlQ2FjaGUgZGF0ZUluc3RhbmNlQ2FjaGU7CisgICAgICAg
IFdURjo6U2ltcGxlU3RhdHMgbWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2Vs
aW5lSklUOworICAgICAgICBWZWN0b3I8Q29kZUJsb2NrKj4gY29kZUJsb2Nrc0JlaW5nQ29tcGls
ZWQ7CisgICAgICAgIHZvaWQgc3RhcnRlZENvbXBpbGluZyhDb2RlQmxvY2sqIGNvZGVCbG9jaykK
KyAgICAgICAgeworICAgICAgICAgICAgY29kZUJsb2Nrc0JlaW5nQ29tcGlsZWQuYXBwZW5kKGNv
ZGVCbG9jayk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZpbmlzaGVkQ29tcGlsaW5nKENv
ZGVCbG9jayogY29kZUJsb2NrKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VE
KGNvZGVCbG9jaywgY29kZUJsb2NrID09IGNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkLmxhc3QoKSk7
CisgICAgICAgICAgICBjb2RlQmxvY2tzQmVpbmdDb21waWxlZC5yZW1vdmVMYXN0KCk7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIHNldEluRGVmaW5lT3duUHJvcGVydHkoYm9vbCBpbkRlZmlu
ZU93blByb3BlcnR5KQorICAgICAgICB7CisgICAgICAgICAgICBtX2luRGVmaW5lT3duUHJvcGVy
dHkgPSBpbkRlZmluZU93blByb3BlcnR5OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc0lu
RGVmaW5lT3duUHJvcGVydHkoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbkRl
ZmluZU93blByb3BlcnR5OworICAgICAgICB9CisKKyAgICAgICAgTGVnYWN5UHJvZmlsZXIqIGVu
YWJsZWRQcm9maWxlcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2VuYWJsZWRQ
cm9maWxlcjsKKyAgICAgICAgfQorCisjaWYgRU5BQkxFKEpJVCkgJiYgRU5BQkxFKExMSU5UKQor
ICAgICAgICBib29sIGNhblVzZUpJVCgpIHsgcmV0dXJuIG1fY2FuVXNlSklUOyB9CisjZWxpZiBF
TkFCTEUoSklUKQorICAgICAgICBib29sIGNhblVzZUpJVCgpIHsgcmV0dXJuIHRydWU7IH0gLy8g
aml0IG9ubHkKKyNlbHNlCisgICAgICAgIGJvb2wgY2FuVXNlSklUKCkgeyByZXR1cm4gZmFsc2U7
IH0gLy8gaW50ZXJwcmV0ZXIgb25seQorI2VuZGlmCisKKyNpZiBFTkFCTEUoWUFSUl9KSVQpCisg
ICAgICAgIGJvb2wgY2FuVXNlUmVnRXhwSklUKCkgeyByZXR1cm4gbV9jYW5Vc2VSZWdFeHBKSVQ7
IH0KKyNlbHNlCisgICAgICAgIGJvb2wgY2FuVXNlUmVnRXhwSklUKCkgeyByZXR1cm4gZmFsc2U7
IH0gLy8gaW50ZXJwcmV0ZXIgb25seQorI2VuZGlmCisKKyAgICAgICAgU291cmNlUHJvdmlkZXJD
YWNoZSogYWRkU291cmNlUHJvdmlkZXJDYWNoZShTb3VyY2VQcm92aWRlciopOworICAgICAgICB2
b2lkIGNsZWFyU291cmNlUHJvdmlkZXJDYWNoZXMoKTsKKworICAgICAgICBQcm90b3R5cGVNYXAg
cHJvdG90eXBlTWFwOworCisgICAgICAgIE93blB0cjxQYXJzZXJBcmVuYT4gcGFyc2VyQXJlbmE7
CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U291cmNlUHJvdmlkZXI+LCBSZWZQdHI8
U291cmNlUHJvdmlkZXJDYWNoZT4gPiBTb3VyY2VQcm92aWRlckNhY2hlTWFwOworICAgICAgICBT
b3VyY2VQcm92aWRlckNhY2hlTWFwIHNvdXJjZVByb3ZpZGVyQ2FjaGVNYXA7CisgICAgICAgIE93
blB0cjxLZXl3b3Jkcz4ga2V5d29yZHM7CisgICAgICAgIEludGVycHJldGVyKiBpbnRlcnByZXRl
cjsKKyNpZiBFTkFCTEUoSklUKQorICAgICAgICBPd25QdHI8SklUVGh1bmtzPiBqaXRTdHViczsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdldENUSVN0dWIoVGh1bmtHZW5lcmF0b3Ig
Z2VuZXJhdG9yKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0aVN0
dWIodGhpcywgZ2VuZXJhdG9yKTsKKyAgICAgICAgfQorICAgICAgICBOYXRpdmVFeGVjdXRhYmxl
KiBnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24sIEludHJpbnNpYyk7CisjZW5kaWYKKyAg
ICAgICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uLCBO
YXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3Rvcik7CisKKyAgICAgICAgSlNWYWx1ZSBleGNlcHRpb247
CisgICAgICAgIFJlZkNvdW50ZWRBcnJheTxTdGFja0ZyYW1lPiBleGNlcHRpb25TdGFjazsKKwor
ICAgICAgICBjb25zdCBDbGFzc0luZm8qIGNvbnN0IGpzQXJyYXlDbGFzc0luZm87CisgICAgICAg
IGNvbnN0IENsYXNzSW5mbyogY29uc3QganNGaW5hbE9iamVjdENsYXNzSW5mbzsKKworICAgICAg
ICBSZXR1cm5BZGRyZXNzUHRyIGV4Y2VwdGlvbkxvY2F0aW9uOworICAgICAgICBKU1ZhbHVlIGhv
c3RDYWxsUmV0dXJuVmFsdWU7CisgICAgICAgIEV4ZWNTdGF0ZSogY2FsbEZyYW1lRm9yVGhyb3c7
CisgICAgICAgIHZvaWQqIHRhcmdldE1hY2hpbmVQQ0ZvclRocm93OworICAgICAgICBJbnN0cnVj
dGlvbiogdGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93OworI2lmIEVOQUJMRShERkdfSklUKQor
ICAgICAgICB1aW50MzJfdCBvc3JFeGl0SW5kZXg7CisgICAgICAgIHZvaWQqIG9zckV4aXRKdW1w
RGVzdGluYXRpb247CisgICAgICAgIFZlY3RvcjxTY3JhdGNoQnVmZmVyKj4gc2NyYXRjaEJ1ZmZl
cnM7CisgICAgICAgIHNpemVfdCBzaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlcjsKKyAgICAgICAgCisg
ICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVfdCBzaXplKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoIXNpemUpCisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzaXplID4gc2l6ZU9mTGFzdFNjcmF0
Y2hCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgYSBOXjIgbWVt
b3J5IHVzYWdlIHBhdGhvbG9neSBieSBlbnN1cmluZworICAgICAgICAgICAgICAgIC8vIHRoYXQg
YXQgd29yc3QsIHdlIGdldCBhIGdlb21ldHJpYyBzZXJpZXMsIG1lYW5pbmcgdGhhdCB0aGUKKyAg
ICAgICAgICAgICAgICAvLyB0b3RhbCBtZW1vcnkgdXNhZ2UgaXMgc29tZXdoZXJlIGFyb3VuZAor
ICAgICAgICAgICAgICAgIC8vIG1heChzY3JhdGNoIGJ1ZmZlciBzaXplKSAqIDQuCisgICAgICAg
ICAgICAgICAgc2l6ZU9mTGFzdFNjcmF0Y2hCdWZmZXIgPSBzaXplICogMjsKKworICAgICAgICAg
ICAgICAgIHNjcmF0Y2hCdWZmZXJzLmFwcGVuZChTY3JhdGNoQnVmZmVyOjpjcmVhdGUoc2l6ZU9m
TGFzdFNjcmF0Y2hCdWZmZXIpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU2NyYXRj
aEJ1ZmZlciogcmVzdWx0ID0gc2NyYXRjaEJ1ZmZlcnMubGFzdCgpOworICAgICAgICAgICAgcmVz
dWx0LT5zZXRBY3RpdmVMZW5ndGgoMCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRp
dmVSb290cyYpOworI2VuZGlmCisKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGR5bmFtaWNHbG9i
YWxPYmplY3Q7CisKKyAgICAgICAgSGFzaFNldDxKU09iamVjdCo+IHN0cmluZ1JlY3Vyc2lvbkNo
ZWNrVmlzaXRlZE9iamVjdHM7CisKKyAgICAgICAgZG91YmxlIGNhY2hlZFVUQ09mZnNldDsKKyAg
ICAgICAgRFNUT2Zmc2V0Q2FjaGUgZHN0T2Zmc2V0Q2FjaGU7CisgICAgICAgIAorICAgICAgICBT
dHJpbmcgY2FjaGVkRGF0ZVN0cmluZzsKKyAgICAgICAgZG91YmxlIGNhY2hlZERhdGVTdHJpbmdW
YWx1ZTsKKworICAgICAgICBMZWdhY3lQcm9maWxlciogbV9lbmFibGVkUHJvZmlsZXI7CisgICAg
ICAgIE93blB0cjxQcm9maWxlcjo6RGF0YWJhc2U+IG1fcGVyQnl0ZWNvZGVQcm9maWxlcjsKKyAg
ICAgICAgUmVnRXhwQ2FjaGUqIG1fcmVnRXhwQ2FjaGU7CisgICAgICAgIEJ1bXBQb2ludGVyQWxs
b2NhdG9yIG1fcmVnRXhwQWxsb2NhdG9yOworCisjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQor
ICAgICAgICB0eXBlZGVmIExpc3RIYXNoU2V0PFJlZlB0cjxSZWdFeHA+ID4gUlRUcmFjZUxpc3Q7
CisgICAgICAgIFJUVHJhY2VMaXN0KiBtX3J0VHJhY2VMaXN0OworI2VuZGlmCisKKyNpZm5kZWYg
TkRFQlVHCisgICAgICAgIFRocmVhZElkZW50aWZpZXIgZXhjbHVzaXZlVGhyZWFkOworI2VuZGlm
CisKKyAgICAgICAgQ2FjaGVkVHJhbnNjZW5kZW50YWxGdW5jdGlvbjxzdGQ6OnNpbj4gY2FjaGVk
U2luOworCisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVzZXREYXRlQ2FjaGUoKTsK
KworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHN0YXJ0U2FtcGxpbmcoKTsKKyAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzdG9wU2FtcGxpbmcoKTsKKyAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBkdW1wU2FtcGxlRGF0YShFeGVjU3RhdGUqIGV4ZWMpOworICAgICAg
ICBSZWdFeHBDYWNoZSogcmVnRXhwQ2FjaGUoKSB7IHJldHVybiBtX3JlZ0V4cENhY2hlOyB9Cisj
aWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQorICAgICAgICB2b2lkIGFkZFJlZ0V4cFRvVHJhY2Uo
UGFzc1JlZlB0cjxSZWdFeHA+IHJlZ0V4cCk7CisjZW5kaWYKKyAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBkdW1wUmVnRXhwVHJhY2UoKTsKKworICAgICAgICBib29sIGlzQ29sbGVjdG9y
QnVzeSgpIHsgcmV0dXJuIGhlYXAuaXNCdXN5KCk7IH0KKyAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCByZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSgpOworCisjaWYgRU5BQkxFKEdDX1ZBTElE
QVRJT04pCisgICAgICAgIGJvb2wgaXNJbml0aWFsaXppbmdPYmplY3QoKSBjb25zdDsgCisgICAg
ICAgIHZvaWQgc2V0SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoY29uc3QgQ2xhc3NJbmZvKik7Cisj
ZW5kaWYKKworICAgICAgICB1bnNpZ25lZCBtX25ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29uczsK
KworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19taW5OdW1iZXJPZk5ld1N0cmluZ3NU
b0hhc2hDb25zID0gMTAwOworCisgICAgICAgIGJvb2wgaGF2ZUVub3VnaE5ld1N0cmluZ3NUb0hh
c2hDb25zKCkgeyByZXR1cm4gbV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMgPiBzX21pbk51
bWJlck9mTmV3U3RyaW5nc1RvSGFzaENvbnM7IH0KKyAgICAgICAgdm9pZCByZXNldE5ld1N0cmlu
Z3NTaW5jZUxhc3RIYXNoQ29ucygpIHsgbV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMgPSAw
OyB9CisKKyNkZWZpbmUgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odHlwZSwgY2FwaXRhbGl6
ZWRUeXBlKSBcCisgICAgICAgIHZvaWQgcmVnaXN0ZXJUeXBlZEFycmF5RGVzY3JpcHRvcihjb25z
dCBjYXBpdGFsaXplZFR5cGUjI0FycmF5KiwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IpIFwKKyAgICAgICAgeyBcCisgICAgICAgICAgICBBU1NFUlQoIW1fIyN0eXBlIyNB
cnJheURlc2NyaXB0b3IubV9jbGFzc0luZm8gfHwgbV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvci5t
X2NsYXNzSW5mbyA9PSBkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKTsgXAorICAgICAgICAgICAgbV8j
I3R5cGUjI0FycmF5RGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7IFwKKyAgICAgICAgICAgIEFTU0VS
VChtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yLm1fY2xhc3NJbmZvKTsgXAorICAgICAgICB9IFwK
KyAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIHR5cGUjI0FycmF5RGVzY3JpcHRv
cigpIGNvbnN0IHsgQVNTRVJUKG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IubV9jbGFzc0luZm8p
OyByZXR1cm4gbV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvcjsgfQorCisgICAgICAgIHJlZ2lzdGVy
VHlwZWRBcnJheUZ1bmN0aW9uKGludDgsIEludDgpOworICAgICAgICByZWdpc3RlclR5cGVkQXJy
YXlGdW5jdGlvbihpbnQxNiwgSW50MTYpOworICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5j
dGlvbihpbnQzMiwgSW50MzIpOworICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih1
aW50OCwgVWludDgpOworICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih1aW50OENs
YW1wZWQsIFVpbnQ4Q2xhbXBlZCk7CisgICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9u
KHVpbnQxNiwgVWludDE2KTsKKyAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odWlu
dDMyLCBVaW50MzIpOworICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihmbG9hdDMy
LCBGbG9hdDMyKTsKKyAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oZmxvYXQ2NCwg
RmxvYXQ2NCk7CisjdW5kZWYgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24KKyAgICAgICAgCisg
ICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiB0eXBlZEFycmF5RGVzY3JpcHRvcihU
eXBlZEFycmF5VHlwZSB0eXBlKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheU5vbmU6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlJbnQ4OgorICAgICAgICAg
ICAgICAgIHJldHVybiAmaW50OEFycmF5RGVzY3JpcHRvcigpOworICAgICAgICAgICAgY2FzZSBU
eXBlZEFycmF5SW50MTY6CisgICAgICAgICAgICAgICAgcmV0dXJuICZpbnQxNkFycmF5RGVzY3Jp
cHRvcigpOworICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5SW50MzI6CisgICAgICAgICAgICAg
ICAgcmV0dXJuICZpbnQzMkFycmF5RGVzY3JpcHRvcigpOworICAgICAgICAgICAgY2FzZSBUeXBl
ZEFycmF5VWludDg6CisgICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50OEFycmF5RGVzY3JpcHRv
cigpOworICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDhDbGFtcGVkOgorICAgICAgICAg
ICAgICAgIHJldHVybiAmdWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCk7CisgICAgICAgICAg
ICBjYXNlIFR5cGVkQXJyYXlVaW50MTY6CisgICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50MTZB
cnJheURlc2NyaXB0b3IoKTsKKyAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQzMjoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gJnVpbnQzMkFycmF5RGVzY3JpcHRvcigpOworICAgICAgICAg
ICAgY2FzZSBUeXBlZEFycmF5RmxvYXQzMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gJmZsb2F0
MzJBcnJheURlc2NyaXB0b3IoKTsKKyAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUZsb2F0NjQ6
CisgICAgICAgICAgICAgICAgcmV0dXJuICZmbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCk7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBKU0xvY2sm
IGFwaUxvY2soKSB7IHJldHVybiAqbV9hcGlMb2NrOyB9CisgICAgICAgIENvZGVDYWNoZSogY29k
ZUNhY2hlKCkgeyByZXR1cm4gbV9jb2RlQ2FjaGUuZ2V0KCk7IH0KKworICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGRpc2NhcmRBbGxDb2RlKCk7CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworICAgICAgICAKKyAgICAgICAg
SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXBlLCBIZWFwVHlwZSk7CisgICAgICAgIHN0YXRpYyBK
U0dsb2JhbERhdGEqJiBzaGFyZWRJbnN0YW5jZUludGVybmFsKCk7CisgICAgICAgIHZvaWQgY3Jl
YXRlTmF0aXZlVGh1bmsoKTsKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKQorICAgICAgICBib29sIG1f
Y2FuVXNlQXNzZW1ibGVyOworI2VuZGlmCisjaWYgRU5BQkxFKEpJVCkKKyAgICAgICAgYm9vbCBt
X2NhblVzZUpJVDsKKyNlbmRpZgorI2lmIEVOQUJMRShZQVJSX0pJVCkKKyAgICAgICAgYm9vbCBt
X2NhblVzZVJlZ0V4cEpJVDsKKyNlbmRpZgorI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQorICAg
ICAgICBjb25zdCBDbGFzc0luZm8qIG1faW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3M7CisjZW5kaWYK
KyAgICAgICAgYm9vbCBtX2luRGVmaW5lT3duUHJvcGVydHk7CisgICAgICAgIE93blB0cjxDb2Rl
Q2FjaGU+IG1fY29kZUNhY2hlOworCisgICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1faW50
OEFycmF5RGVzY3JpcHRvcjsKKyAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV9pbnQxNkFy
cmF5RGVzY3JpcHRvcjsKKyAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV9pbnQzMkFycmF5
RGVzY3JpcHRvcjsKKyAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV91aW50OEFycmF5RGVz
Y3JpcHRvcjsKKyAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV91aW50OENsYW1wZWRBcnJh
eURlc2NyaXB0b3I7CisgICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fdWludDE2QXJyYXlE
ZXNjcmlwdG9yOworICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX3VpbnQzMkFycmF5RGVz
Y3JpcHRvcjsKKyAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV9mbG9hdDMyQXJyYXlEZXNj
cmlwdG9yOworICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX2Zsb2F0NjRBcnJheURlc2Ny
aXB0b3I7CisgICAgfTsKKworI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQorICAgIGlubGluZSBi
b29sIEpTR2xvYmFsRGF0YTo6aXNJbml0aWFsaXppbmdPYmplY3QoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuICEhbV9pbml0aWFsaXppbmdPYmplY3RDbGFzczsKKyAgICB9CisKKyAgICBp
bmxpbmUgdm9pZCBKU0dsb2JhbERhdGE6OnNldEluaXRpYWxpemluZ09iamVjdENsYXNzKGNvbnN0
IENsYXNzSW5mbyogaW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MpCisgICAgeworICAgICAgICBtX2lu
aXRpYWxpemluZ09iamVjdENsYXNzID0gaW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3M7CisgICAgfQor
I2VuZGlmCisKKyAgICBpbmxpbmUgSGVhcCogV2Vha1NldDo6aGVhcCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gJm1fZ2xvYmFsRGF0YS0+aGVhcDsKKyAgICB9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gSlNHbG9iYWxEYXRhX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi0jaWZuZGVmIEpTR2xvYmFsRGF0YV9oCi0jZGVmaW5lIEpTR2xvYmFsRGF0YV9oCisj
aWZuZGVmIFZNX2gKKyNkZWZpbmUgVk1faAogCiAjaW5jbHVkZSAiQ2FjaGVkVHJhbnNjZW5kZW50
YWxGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkRhdGVJbnN0YW5jZUNhY2hlLmgiCkBAIC0xNjIsMzEg
KzE2MiwzMSBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogI2VuZGlmCiAKLSAgICBjbGFzcyBK
U0dsb2JhbERhdGEgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SlNHbG9iYWxEYXRhPiB7
CisgICAgY2xhc3MgVk0gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+IHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIC8vIFdlYkNvcmUgaGFzIGEgb25lLXRvLW9uZSBtYXBwaW5nIG9mIHRo
cmVhZHMgdG8gSlNHbG9iYWxEYXRhczsKKyAgICAgICAgLy8gV2ViQ29yZSBoYXMgYSBvbmUtdG8t
b25lIG1hcHBpbmcgb2YgdGhyZWFkcyB0byBWTXM7CiAgICAgICAgIC8vIGVpdGhlciBjcmVhdGUo
KSBvciBjcmVhdGVMZWFrZWQoKSBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZQotICAgICAgICAv
LyBvbiBhIHRocmVhZCwgdGhpcyBpcyB0aGUgJ2RlZmF1bHQnIEpTR2xvYmFsRGF0YSAoaXQgdXNl
cyB0aGUKKyAgICAgICAgLy8gb24gYSB0aHJlYWQsIHRoaXMgaXMgdGhlICdkZWZhdWx0JyBWTSAo
aXQgdXNlcyB0aGUKICAgICAgICAgLy8gdGhyZWFkJ3MgZGVmYXVsdCBzdHJpbmcgdW5pcXVpbmcg
dGFibGUgZnJvbSB3dGZUaHJlYWREYXRhKS4KICAgICAgICAgLy8gQVBJIGNvbnRleHRzIGNyZWF0
ZWQgdXNpbmcgdGhlIG5ldyBjb250ZXh0IGdyb3VwIGF3YXJlIGludGVyZmFjZQogICAgICAgICAv
LyBjcmVhdGUgQVBJQ29udGV4dEdyb3VwIG9iamVjdHMgd2hpY2ggcmVxdWlyZSBsZXNzIGxvY2tp
bmcgb2YgSlNDCi0gICAgICAgIC8vIHRoYW4gdGhlIG9sZCBzaW5nbGV0b24gQVBJU2hhcmVkIEpT
R2xvYmFsRGF0YSBjcmVhdGVkIGZvciB1c2UgYnkKKyAgICAgICAgLy8gdGhhbiB0aGUgb2xkIHNp
bmdsZXRvbiBBUElTaGFyZWQgVk0gY3JlYXRlZCBmb3IgdXNlIGJ5CiAgICAgICAgIC8vIHRoZSBv
cmlnaW5hbCBBUEkuCi0gICAgICAgIGVudW0gR2xvYmFsRGF0YVR5cGUgeyBEZWZhdWx0LCBBUElD
b250ZXh0R3JvdXAsIEFQSVNoYXJlZCB9OworICAgICAgICBlbnVtIFZNVHlwZSB7IERlZmF1bHQs
IEFQSUNvbnRleHRHcm91cCwgQVBJU2hhcmVkIH07CiAgICAgICAgIAogICAgICAgICBzdHJ1Y3Qg
Q2xpZW50RGF0YSB7CiAgICAgICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5DbGll
bnREYXRhKCkgPSAwOwogICAgICAgICB9OwogCi0gICAgICAgIGJvb2wgaXNTaGFyZWRJbnN0YW5j
ZSgpIHsgcmV0dXJuIGdsb2JhbERhdGFUeXBlID09IEFQSVNoYXJlZDsgfQotICAgICAgICBib29s
IHVzaW5nQVBJKCkgeyByZXR1cm4gZ2xvYmFsRGF0YVR5cGUgIT0gRGVmYXVsdDsgfQorICAgICAg
ICBib29sIGlzU2hhcmVkSW5zdGFuY2UoKSB7IHJldHVybiB2bVR5cGUgPT0gQVBJU2hhcmVkOyB9
CisgICAgICAgIGJvb2wgdXNpbmdBUEkoKSB7IHJldHVybiB2bVR5cGUgIT0gRGVmYXVsdDsgfQog
ICAgICAgICBzdGF0aWMgYm9vbCBzaGFyZWRJbnN0YW5jZUV4aXN0cygpOwotICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgSlNHbG9iYWxEYXRhJiBzaGFyZWRJbnN0YW5jZSgpOworICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgVk0mIHNoYXJlZEluc3RhbmNlKCk7CiAKLSAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBj
cmVhdGUoSGVhcFR5cGUgPSBTbWFsbEhlYXApOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IGNyZWF0ZUxlYWtlZChIZWFwVHlwZSA9IFNt
YWxsSGVhcCk7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4gY3JlYXRl
Q29udGV4dEdyb3VwKEhlYXBUeXBlID0gU21hbGxIZWFwKTsKLSAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgfkpTR2xvYmFsRGF0YSgpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
UGFzc1JlZlB0cjxWTT4gY3JlYXRlKEhlYXBUeXBlID0gU21hbGxIZWFwKTsKKyAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIFBhc3NSZWZQdHI8Vk0+IGNyZWF0ZUxlYWtlZChIZWFwVHlw
ZSA9IFNtYWxsSGVhcCk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFZNPiBjcmVhdGVDb250
ZXh0R3JvdXAoSGVhcFR5cGUgPSBTbWFsbEhlYXApOworICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSB+Vk0oKTsKIAogICAgICAgICB2b2lkIG1ha2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCkg
eyBoZWFwLm1hY2hpbmVUaHJlYWRzKCkubWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKTsg
fQogCkBAIC0yMDgsNyArMjA4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE93blB0cjxE
Rkc6OkxvbmdMaXZlZFN0YXRlPiBtX2RmZ1N0YXRlOwogI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQogCi0gICAgICAgIEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFUeXBlOworICAgICAgICBWTVR5
cGUgdm1UeXBlOwogICAgICAgICBDbGllbnREYXRhKiBjbGllbnREYXRhOwogICAgICAgICBFeGVj
U3RhdGUqIHRvcENhbGxGcmFtZTsKICAgICAgICAgV2F0Y2hkb2cgd2F0Y2hkb2c7CkBAIC00NzQs
OCArNDc0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5k
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAgICAgCi0gICAgICAgIEpTR2xvYmFs
RGF0YShHbG9iYWxEYXRhVHlwZSwgSGVhcFR5cGUpOwotICAgICAgICBzdGF0aWMgSlNHbG9iYWxE
YXRhKiYgc2hhcmVkSW5zdGFuY2VJbnRlcm5hbCgpOworICAgICAgICBWTShWTVR5cGUsIEhlYXBU
eXBlKTsKKyAgICAgICAgc3RhdGljIFZNKiYgc2hhcmVkSW5zdGFuY2VJbnRlcm5hbCgpOwogICAg
ICAgICB2b2lkIGNyZWF0ZU5hdGl2ZVRodW5rKCk7CiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKICAg
ICAgICAgYm9vbCBtX2NhblVzZUFzc2VtYmxlcjsKQEAgLTUwNCwxMiArNTA0LDEyIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIH07CiAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKLSAgICBpbmxp
bmUgYm9vbCBKU0dsb2JhbERhdGE6OmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkgY29uc3QKKyAgICBp
bmxpbmUgYm9vbCBWTTo6aXNJbml0aWFsaXppbmdPYmplY3QoKSBjb25zdAogICAgIHsKICAgICAg
ICAgcmV0dXJuICEhbV9pbml0aWFsaXppbmdPYmplY3RDbGFzczsKICAgICB9CiAKLSAgICBpbmxp
bmUgdm9pZCBKU0dsb2JhbERhdGE6OnNldEluaXRpYWxpemluZ09iamVjdENsYXNzKGNvbnN0IENs
YXNzSW5mbyogaW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MpCisgICAgaW5saW5lIHZvaWQgVk06OnNl
dEluaXRpYWxpemluZ09iamVjdENsYXNzKGNvbnN0IENsYXNzSW5mbyogaW5pdGlhbGl6aW5nT2Jq
ZWN0Q2xhc3MpCiAgICAgewogICAgICAgICBtX2luaXRpYWxpemluZ09iamVjdENsYXNzID0gaW5p
dGlhbGl6aW5nT2JqZWN0Q2xhc3M7CiAgICAgfQpAQCAtNTE3LDkgKzUxNyw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgaW5saW5lIEhlYXAqIFdlYWtTZXQ6OmhlYXAoKSBjb25zdAogICAgIHsK
LSAgICAgICAgcmV0dXJuICZtX2dsb2JhbERhdGEtPmhlYXA7CisgICAgICAgIHJldHVybiAmbV92
bS0+aGVhcDsKICAgICB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCi0jZW5kaWYgLy8gSlNHbG9i
YWxEYXRhX2gKKyNlbmRpZiAvLyBWTV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9XYXRjaGRvZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvV2F0Y2hkb2cuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9XYXRjaGRvZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcg
QEAgV2F0Y2hkb2c6On5XYXRjaGRvZygpCiAgICAgZGVzdHJveVRpbWVyKCk7CiB9CiAKLXZvaWQg
V2F0Y2hkb2c6OnNldFRpbWVMaW1pdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGRvdWJsZSBs
aW1pdCwKK3ZvaWQgV2F0Y2hkb2c6OnNldFRpbWVMaW1pdChWTSYgdm0sIGRvdWJsZSBsaW1pdCwK
ICAgICBTaG91bGRUZXJtaW5hdGVDYWxsYmFjayBjYWxsYmFjaywgdm9pZCogZGF0YTEsIHZvaWQq
IGRhdGEyKQogewogICAgIGJvb2wgd2FzRW5hYmxlZCA9IGlzRW5hYmxlZCgpOwpAQCAtODQsNyAr
ODQsNyBAQCB2b2lkIFdhdGNoZG9nOjpzZXRUaW1lTGltaXQoSlNHbG9iYWxEYXRhCiAKICAgICAg
ICAgLy8gQW5kIGlmIHdlJ3ZlIHByZXZpb3VzbHkgY29tcGlsZWQgYW55IGZ1bmN0aW9ucywgd2Ug
bmVlZCB0byBkZW9wdAogICAgICAgICAvLyB0aGVtIGJlY2F1c2UgdGhleSBkb24ndCBoYWJlIHRo
ZSBuZWVkZWQgcG9sbGluZyBjaGVja3MgeWV0LgotICAgICAgICBnbG9iYWxEYXRhLnJlbGVhc2VF
eGVjdXRhYmxlTWVtb3J5KCk7CisgICAgICAgIHZtLnJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KCk7
CiAgICAgfQogCiAgICAgc3RhcnRDb3VudGRvd25JZk5lZWRlZCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2F0Y2hkb2cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9XYXRjaGRvZy5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XYXRjaGRvZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw3ICszMyw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRXhlY1N0YXRlOwotY2xhc3Mg
SlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiAKIGNsYXNzIFdhdGNoZG9nIHsKIHB1YmxpYzoKQEAg
LTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIH5XYXRjaGRvZygpOwogCiAgICAgdHlwZWRlZiBi
b29sICgqU2hvdWxkVGVybWluYXRlQ2FsbGJhY2spKEV4ZWNTdGF0ZSosIHZvaWQqIGRhdGExLCB2
b2lkKiBkYXRhMik7Ci0gICAgdm9pZCBzZXRUaW1lTGltaXQoSlNHbG9iYWxEYXRhJiwgZG91Ymxl
IHNlY29uZHMsIFNob3VsZFRlcm1pbmF0ZUNhbGxiYWNrID0gMCwgdm9pZCogZGF0YTEgPSAwLCB2
b2lkKiBkYXRhMiA9IDApOworICAgIHZvaWQgc2V0VGltZUxpbWl0KFZNJiwgZG91YmxlIHNlY29u
ZHMsIFNob3VsZFRlcm1pbmF0ZUNhbGxiYWNrID0gMCwgdm9pZCogZGF0YTEgPSAwLCB2b2lkKiBk
YXRhMiA9IDApOwogCiAgICAgLy8gVGhpcyB2ZXJzaW9uIG9mIGRpZEZpcmUoKSB3aWxsIGNoZWNr
IHRoZSBlbGFwc2VkIENQVSB0aW1lIGFuZCBjYWxsIHRoZQogICAgIC8vIGNhbGxiYWNrIChpZiBu
ZWVkZWQpIHRvIGRldGVybWluZSBpZiB0aGUgd2F0Y2hkb2cgc2hvdWxkIGZpcmUuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Xcml0ZUJhcnJpZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Xcml0ZUJhcnJpZXIuaAkocmV2aXNpb24g
MTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBKU0NlbGw7Ci1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIGNsYXNzIEpTR2xvYmFs
T2JqZWN0OwogCiB0ZW1wbGF0ZTxjbGFzcyBUPiBjbGFzcyBXcml0ZUJhcnJpZXJCYXNlOwpAQCAt
NjgsMTEgKzY4LDExIEBAIHRlbXBsYXRlPGNsYXNzIFQ+IGlubGluZSB2b2lkIHZhbGlkYXRlQ2UK
IC8vIFdlIGhhdmUgYSBzZXBhcmF0ZSBiYXNlIGNsYXNzIHdpdGggbm8gY29uc3RydWN0b3JzIGZv
ciB1c2UgaW4gVW5pb25zLgogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdyaXRlQmFycmll
ckJhc2UgewogcHVibGljOgotICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
Y29uc3QgSlNDZWxsKiBvd25lciwgVCogdmFsdWUpCisgICAgdm9pZCBzZXQoVk0mIHZtLCBjb25z
dCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh2YWx1ZSk7
CiAgICAgICAgIHZhbGlkYXRlQ2VsbCh2YWx1ZSk7Ci0gICAgICAgIHNldEVhcmx5VmFsdWUoZ2xv
YmFsRGF0YSwgb3duZXIsIHZhbHVlKTsKKyAgICAgICAgc2V0RWFybHlWYWx1ZSh2bSwgb3duZXIs
IHZhbHVlKTsKICAgICB9CiAgICAgCiAgICAgLy8gVGhpcyBpcyBtZWFudCB0byBiZSB1c2VkIGxp
a2Ugb3BlcmF0b3I9LCBidXQgaXMgY2FsbGVkIGNvcHlGcm9tIGluc3RlYWQsIGluCkBAIC04Miwx
NiArODIsMTYgQEAgcHVibGljOgogICAgICAgICBtX2NlbGwgPSBvdGhlci5tX2NlbGw7CiAgICAg
fQogCi0gICAgdm9pZCBzZXRNYXlCZU51bGwoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25z
dCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkKKyAgICB2b2lkIHNldE1heUJlTnVsbChWTSYgdm0s
IGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVl
KQogICAgICAgICAgICAgdmFsaWRhdGVDZWxsKHZhbHVlKTsKLSAgICAgICAgc2V0RWFybHlWYWx1
ZShnbG9iYWxEYXRhLCBvd25lciwgdmFsdWUpOworICAgICAgICBzZXRFYXJseVZhbHVlKHZtLCBv
d25lciwgdmFsdWUpOwogICAgIH0KIAogICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgYnkgSlND
ZWxsIGR1cmluZyBlYXJseSBpbml0aWFsaXNhdGlvbgogICAgIC8vIHdoZW4gc29tZSBiYXNpYyB0
eXBlcyBhcmVuJ3QgeWV0IGNvbXBsZXRlbHkgaW5zdGFudGlhdGVkCi0gICAgdm9pZCBzZXRFYXJs
eVZhbHVlKEpTR2xvYmFsRGF0YSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQorICAg
IHZvaWQgc2V0RWFybHlWYWx1ZShWTSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQog
ICAgIHsKICAgICAgICAgdGhpcy0+bV9jZWxsID0gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPih2
YWx1ZSk7CiAgICAgICAgIEhlYXA6OndyaXRlQmFycmllcihvd25lciwgdGhpcy0+bV9jZWxsKTsK
QEAgLTE0Nyw3ICsxNDcsNyBAQCBwcml2YXRlOgogCiB0ZW1wbGF0ZSA8PiBjbGFzcyBXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24+IHsKIHB1YmxpYzoKLSAgICB2b2lkIHNldChKU0dsb2JhbERhdGEm
LCBjb25zdCBKU0NlbGwqIG93bmVyLCBKU1ZhbHVlIHZhbHVlKQorICAgIHZvaWQgc2V0KFZNJiwg
Y29uc3QgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIG1fdmFs
dWUgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOwogICAgICAgICBIZWFwOjp3cml0ZUJhcnJpZXIo
b3duZXIsIHZhbHVlKTsKQEAgLTE5NywxNSArMTk3LDE1IEBAIHB1YmxpYzoKICAgICAgICAgdGhp
cy0+c2V0V2l0aG91dFdyaXRlQmFycmllcigwKTsKICAgICB9CiAKLSAgICBXcml0ZUJhcnJpZXIo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkK
KyAgICBXcml0ZUJhcnJpZXIoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIHRoaXMtPnNldChnbG9iYWxEYXRhLCBvd25lciwgdmFsdWUpOworICAg
ICAgICB0aGlzLT5zZXQodm0sIG93bmVyLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgZW51bSBNYXlC
ZU51bGxUYWcgeyBNYXlCZU51bGwgfTsKLSAgICBXcml0ZUJhcnJpZXIoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBjb25zdCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSwgTWF5QmVOdWxsVGFnKQor
ICAgIFdyaXRlQmFycmllcihWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlLCBN
YXlCZU51bGxUYWcpCiAgICAgewotICAgICAgICB0aGlzLT5zZXRNYXlCZU51bGwoZ2xvYmFsRGF0
YSwgb3duZXIsIHZhbHVlKTsKKyAgICAgICAgdGhpcy0+c2V0TWF5QmVOdWxsKHZtLCBvd25lciwg
dmFsdWUpOwogICAgIH0KIH07CiAKQEAgLTIxNiw5ICsyMTYsOSBAQCBwdWJsaWM6CiAgICAgICAg
IHRoaXMtPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICB9CiAKLSAgICBX
cml0ZUJhcnJpZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBKU0NlbGwqIG93bmVy
LCBKU1ZhbHVlIHZhbHVlKQorICAgIFdyaXRlQmFycmllcihWTSYgdm0sIGNvbnN0IEpTQ2VsbCog
b3duZXIsIEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICB0aGlzLT5zZXQoZ2xvYmFsRGF0
YSwgb3duZXIsIHZhbHVlKTsKKyAgICAgICAgdGhpcy0+c2V0KHZtLCBvd25lciwgdmFsdWUpOwog
ICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJJbnRlcnBy
ZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJJbnRl
cnByZXRlci5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFy
ci9ZYXJySW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzU5LDcgKzM1OSw3IEBAIHB1
YmxpYzoKICAgICBib29sIG1faWdub3JlQ2FzZTsKICAgICBib29sIG1fbXVsdGlsaW5lOwogICAg
IC8vIEVhY2ggQnl0ZWNvZGVQYXR0ZXJuIGlzIGFzc29jaWF0ZWQgd2l0aCBhIFJlZ0V4cCwgZWFj
aCBSZWdFeHAgaXMgYXNzb2NpYXRlZAotICAgIC8vIHdpdGggYSBKU0dsb2JhbERhdGEuICBDYWNo
ZSBhIHBvaW50ZXIgdG8gb3V0IEpTR2xvYmFsRGF0YSdzIG1fcmVnRXhwQWxsb2NhdG9yLgorICAg
IC8vIHdpdGggYSBWTS4gIENhY2hlIGEgcG9pbnRlciB0byBvdXQgVk0ncyBtX3JlZ0V4cEFsbG9j
YXRvci4KICAgICBCdW1wUG9pbnRlckFsbG9jYXRvciogbV9hbGxvY2F0b3I7CiAKICAgICBDaGFy
YWN0ZXJDbGFzcyogbmV3bGluZUNoYXJhY3RlckNsYXNzOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3lhcnIvWWFyckpJVC5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgWWFyciB7CiAKIHRlbXBsYXRlPFlhcnJKSVRDb21w
aWxlTW9kZSBjb21waWxlTW9kZT4KIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3Jv
QXNzZW1ibGVyIHsKLSAgICBmcmllbmQgdm9pZCBqaXRDb21waWxlKEpTR2xvYmFsRGF0YSosIFlh
cnJDb2RlQmxvY2smIGppdE9iamVjdCwgY29uc3QgU3RyaW5nJiBwYXR0ZXJuLCB1bnNpZ25lZCYg
bnVtU3VicGF0dGVybnMsIGNvbnN0IGNoYXIqJiBlcnJvciwgYm9vbCBpZ25vcmVDYXNlLCBib29s
IG11bHRpbGluZSk7CisgICAgZnJpZW5kIHZvaWQgaml0Q29tcGlsZShWTSosIFlhcnJDb2RlQmxv
Y2smIGppdE9iamVjdCwgY29uc3QgU3RyaW5nJiBwYXR0ZXJuLCB1bnNpZ25lZCYgbnVtU3VicGF0
dGVybnMsIGNvbnN0IGNoYXIqJiBlcnJvciwgYm9vbCBpZ25vcmVDYXNlLCBib29sIG11bHRpbGlu
ZSk7CiAKICNpZiBDUFUoQVJNKQogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGlucHV0ID0g
QVJNUmVnaXN0ZXJzOjpyMDsKQEAgLTI2MDgsNyArMjYwOCw3IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgfQogCi0gICAgdm9pZCBjb21waWxlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgWWFyckNv
ZGVCbG9jayYgaml0T2JqZWN0KQorICAgIHZvaWQgY29tcGlsZShWTSogdm0sIFlhcnJDb2RlQmxv
Y2smIGppdE9iamVjdCkKICAgICB7CiAgICAgICAgIGdlbmVyYXRlRW50ZXIoKTsKIApAQCAtMjY0
Miw3ICsyNjQyLDcgQEAgcHVibGljOgogICAgICAgICBiYWNrdHJhY2soKTsKIAogICAgICAgICAv
LyBMaW5rICYgZmluYWxpemUgdGhlIGNvZGUuCi0gICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZl
cigqZ2xvYmFsRGF0YSwgdGhpcywgUkVHRVhQX0NPREVfSUQpOworICAgICAgICBMaW5rQnVmZmVy
IGxpbmtCdWZmZXIoKnZtLCB0aGlzLCBSRUdFWFBfQ09ERV9JRCk7CiAgICAgICAgIG1fYmFja3Ry
YWNraW5nU3RhdGUubGlua0RhdGFMYWJlbHMobGlua0J1ZmZlcik7CiAKICAgICAgICAgaWYgKGNv
bXBpbGVNb2RlID09IE1hdGNoT25seSkgewpAQCAtMjY4OSwxMiArMjY4OSwxMiBAQCBwcml2YXRl
OgogICAgIEJhY2t0cmFja2luZ1N0YXRlIG1fYmFja3RyYWNraW5nU3RhdGU7CiB9OwogCi12b2lk
IGppdENvbXBpbGUoWWFyclBhdHRlcm4mIHBhdHRlcm4sIFlhcnJDaGFyU2l6ZSBjaGFyU2l6ZSwg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3QsIFlhcnJK
SVRDb21waWxlTW9kZSBtb2RlKQordm9pZCBqaXRDb21waWxlKFlhcnJQYXR0ZXJuJiBwYXR0ZXJu
LCBZYXJyQ2hhclNpemUgY2hhclNpemUsIFZNKiB2bSwgWWFyckNvZGVCbG9jayYgaml0T2JqZWN0
LCBZYXJySklUQ29tcGlsZU1vZGUgbW9kZSkKIHsKICAgICBpZiAobW9kZSA9PSBNYXRjaE9ubHkp
Ci0gICAgICAgIFlhcnJHZW5lcmF0b3I8TWF0Y2hPbmx5PihwYXR0ZXJuLCBjaGFyU2l6ZSkuY29t
cGlsZShnbG9iYWxEYXRhLCBqaXRPYmplY3QpOworICAgICAgICBZYXJyR2VuZXJhdG9yPE1hdGNo
T25seT4ocGF0dGVybiwgY2hhclNpemUpLmNvbXBpbGUodm0sIGppdE9iamVjdCk7CiAgICAgZWxz
ZQotICAgICAgICBZYXJyR2VuZXJhdG9yPEluY2x1ZGVTdWJwYXR0ZXJucz4ocGF0dGVybiwgY2hh
clNpemUpLmNvbXBpbGUoZ2xvYmFsRGF0YSwgaml0T2JqZWN0KTsKKyAgICAgICAgWWFyckdlbmVy
YXRvcjxJbmNsdWRlU3VicGF0dGVybnM+KHBhdHRlcm4sIGNoYXJTaXplKS5jb21waWxlKHZtLCBq
aXRPYmplY3QpOwogfQogCiB9fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFy
ckpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQu
aAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoWUFSUl9K
SVQpCiAKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1
ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIk1hdGNoUmVzdWx0LmgiCiAj
aW5jbHVkZSAiWWFyci5oIgpAQCAtNDIsNyArNDIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
Y2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiBjbGFzcyBFeGVjdXRhYmxlUG9vbDsKIAog
bmFtZXNwYWNlIFlhcnIgewpAQCAtMTMyLDcgKzEzMiw3IEBAIGVudW0gWWFyckpJVENvbXBpbGVN
b2RlIHsKICAgICBNYXRjaE9ubHksCiAgICAgSW5jbHVkZVN1YnBhdHRlcm5zCiB9Owotdm9pZCBq
aXRDb21waWxlKFlhcnJQYXR0ZXJuJiwgWWFyckNoYXJTaXplLCBKU0dsb2JhbERhdGEqLCBZYXJy
Q29kZUJsb2NrJiBqaXRPYmplY3QsIFlhcnJKSVRDb21waWxlTW9kZSA9IEluY2x1ZGVTdWJwYXR0
ZXJucyk7Cit2b2lkIGppdENvbXBpbGUoWWFyclBhdHRlcm4mLCBZYXJyQ2hhclNpemUsIFZNKiwg
WWFyckNvZGVCbG9jayYgaml0T2JqZWN0LCBZYXJySklUQ29tcGlsZU1vZGUgPSBJbmNsdWRlU3Vi
cGF0dGVybnMpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6WWFycgogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSw1MzIgQEAKKzIwMTMtMDQtMTcgIEdlb2ZmcmV5IEdhcmVuICA8Z2dh
cmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWVkIEpTR2xvYmFsRGF0YSB0byBWTQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0Nzc3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
IChPT1BTISkuCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTR2xvYmFs
RGF0YS5oOiBSZW1vdmVkLgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVk0u
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9K
U0dsb2JhbERhdGEuaC4KKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJD
b3JlLm9yZGVyOgorICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2o6Cisg
ICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1hcC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpET01PYmplY3RIYXNoVGFibGVNYXA6Om1hcEZvcik6CisgICAgICAgICogYmluZGluZ3Mv
anMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoRE9N
T2JqZWN0SGFzaFRhYmxlTWFwKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01XcmFwcGVyV29y
bGQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV3JhcHBlcldvcmxkOjpET01XcmFwcGVyV29y
bGQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV3JhcHBlcldvcmxkOjp+RE9NV3JhcHBlcldvcmxk
KToKKyAgICAgICAgKFdlYkNvcmU6Om5vcm1hbFdvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6Om1h
aW5UaHJlYWROb3JtYWxXb3JsZCk6CisgICAgICAgICogYmluZGluZ3MvanMvRE9NV3JhcHBlcldv
cmxkLmg6CisgICAgICAgIChXZWJDb3JlOjpET01XcmFwcGVyV29ybGQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpET01XcmFwcGVyV29ybGQ6OnZtKToKKyAgICAgICAgKERPTVdyYXBwZXJX
b3JsZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9HQ0NvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xsZWN0U29vbik6CisgICAgICAgIChXZWJDb3JlOjpH
Q0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xsZWN0Tm93KToKKyAgICAgICAgKFdlYkNvcmU6OkdDQ29u
dHJvbGxlcjo6c2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6R0NDb250cm9sbGVyOjpkaXNjYXJkQWxsQ29tcGlsZWRDb2RlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
ZGVzZXJpYWxpemVJREJWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpkZXNlcmlhbGl6ZUlEQlZh
bHVlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmlkYktleVRvU2NyaXB0VmFsdWUpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpK
U0NhbGxiYWNrRGF0YTo6SlNDYWxsYmFja0RhdGEpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hbWVzcGFjZVVSSSk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmdldEhhc2hUYWJsZUZvckdsb2JhbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6cmVwb3J0
RXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlRE9NU3RydWN0dXJlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUNv
bnN0cnVjdG9yT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6RE9N
Q29uc3RydWN0b3JXaXRoRG9jdW1lbnQ6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OmdldERPTVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRJbmxpbmVDYWNoZWRX
cmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6anNTdHJpbmdX
aXRoQ2FjaGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0OjpKU0RPTUdsb2JhbE9iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0RP
TUdsb2JhbE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OmdldERPTUNvbnN0cnVjdG9yKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNET01XaW5kb3dCYXNlOjpKU0RPTVdpbmRvd0Jhc2UpOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01XaW5kb3dCYXNlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU0RP
TVdpbmRvd0Jhc2U6OnVwZGF0ZURvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2lu
ZG93QmFzZTo6Y29tbW9uVk0pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFz
ZS5oOgorICAgICAgICAoSlNET01XaW5kb3dCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9N
V2luZG93QmFzZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6c2V0TG9j
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGlhbG9nSGFuZGxlcjo6ZGlhbG9nQ3JlYXRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpEaWFsb2dIYW5kbGVyOjpyZXR1cm5WYWx1ZSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U0RPTVdpbmRvd1NoZWxsOjpKU0RPTVdpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
RE9NV2luZG93U2hlbGw6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9N
V2luZG93U2hlbGw6OnNldFdpbmRvdyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5k
b3dTaGVsbC5oOgorICAgICAgICAoSlNET01XaW5kb3dTaGVsbCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0RPTVdpbmRvd1NoZWxsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5k
b3dTaGVsbDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdy
YXBwZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV3JhcHBlcjo6SlNET01XcmFwcGVyKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RldmljZU1vdGlvbkV2ZW50Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFjY2VsZXJhdGlvbk9iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVSb3RhdGlvblJhdGVPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
RGljdGlvbmFyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RpY3Rpb25hcnk6OmNvbnZlcnRW
YWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpKU0RpY3Rpb25hcnk6OkpTRGljdGlvbmFyeSk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNFcnJvckhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNFcnJvckhhbmRsZXI6
OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpK
U0V2ZW50TGlzdGVuZXI6OnNldFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExp
c3RlbmVyOjpqc0Z1bmN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVu
dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6YWxsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50OjpzZXRBbGwpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OmNvbnRlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTSGlzdG9yeUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hpc3Rvcnk6OnN0YXRl
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNJbWFnZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpK
U0ltYWdlQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNJbWFnZURhdGFDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0Ojpub2RlQXNTY3JpcHRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6ZnVuY3Rpb25EZXRhaWxzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmdldEpTTGlzdGVuZXJGdW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldEV2ZW50TGlzdGVuZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppbnNwZWN0KToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTGF6eUV2
ZW50TGlzdGVuZXI6OmluaXRpYWxpemVKU0Z1bmN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU01lc3NhZ2VF
dmVudDo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVJbml0TWVzc2FnZUV2ZW50KToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU011dGF0aW9uQ2FsbGJhY2suY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNNdXRhdGlvbkNhbGxiYWNrOjpjYWxsKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNNdXRh
dGlvbk9ic2VydmVyQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTTXV0YXRpb25PYnNlcnZlcik6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTTm9kZUZpbHRlckNvbmRpdGlvbjo6SlNOb2RlRmlsdGVyQ29uZGl0aW9uKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uaDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTTm9kZUZpbHRlckNvbmRpdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKEpTTm9k
ZUZpbHRlckNvbmRpdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvTm9kZUZpbHRlcik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNh
Y2hlU3RhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVxdWVzdEFuaW1hdGlvbkZyYW1l
Q2FsbGJhY2tDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNSZXF1ZXN0QW5pbWF0aW9u
RnJhbWVDYWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1FM
UmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NRTFJlc3Vs
dFNldFJvd0xpc3Q6Oml0ZW0pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4
dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJDb250ZXh0QmFzZTo6SlNXb3Jr
ZXJDb250ZXh0QmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckNvbnRleHRCYXNlOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0QmFz
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJDb250ZXh0QmFzZTo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKEpTV29ya2VyQ29udGV4dEJhc2UpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2Ny
aXB0RGVidWdTZXJ2ZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NoZWR1bGVk
QWN0aW9uOjpTY2hlZHVsZWRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkQWN0
aW9uOjpleGVjdXRlRnVuY3Rpb25JbkNvbnRleHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Nj
aGVkdWxlZEFjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9uOjpTY2hl
ZHVsZWRBY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OlNjcmlwdENh
Y2hlZEZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6
OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpjbGVh
cik6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVTY3JpcHRDYWxsU3RhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlU2NyaXB0QXJndW1lbnRzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNyZWF0
ZVdpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV2YWx1
YXRlSW5Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjcmVhdGVX
b3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpnZXRBbGxXb3JsZHMp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJXaW5kb3dTaGVsbCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjppbml0U2NyaXB0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OnVwZGF0ZURvY3VtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmJpbmRpbmdSb290T2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cyk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpzaG91bGRCeXBhc3NNYWluV29y
bGRDb250ZW50U2VjdXJpdHlQb2xpY3kpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENv
bnRyb2xsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjp3aW5k
b3dTY3JpcHRPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZFBh
dXNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRFdmVudExpc3RlbmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmV2ZW50TGlzdGVuZXJIYW5kbGVyQm9keSk6CisgICAgICAgIChXZWJD
b3JlOjpldmVudExpc3RlbmVySGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpldmVudExpc3Rl
bmVySGFuZGxlckxvY2F0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlv
bkNhbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RnVuY3Rpb25DYWxsOjpjYWxsKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxiYWNrOjpjYWxsKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TY3JpcHRHQ0V2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEdDRXZl
bnQ6OmdldEhlYXBTaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0T2JqZWN0OjpTY3JpcHRPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL1NjcmlwdFN0YXRlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9TY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6ZGVz
ZXJpYWxpemUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmg6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6U2NyaXB0VmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL1NjcmlwdFdyYXBwYWJsZS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKFNjcmlwdFdy
YXBwYWJsZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5o
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0V3JhcHBhYmxlOjpzZXRXcmFwcGVyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRUZXJtaW5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplRm9ySW5zcGVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bWF5YmVUaHJvd0V4Y2VwdGlvbklm
U2VyaWFsaXphdGlvbkZhaWxlZCk6CisgICAgICAgICogYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xp
ZW50RGF0YS5oOgorICAgICAgICAoV2ViQ29yZUpTQ2xpZW50RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjppbml0Tm9ybWFsV29ybGRDbGllbnREYXRhKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9X
b3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlw
dENvbnRyb2xsZXI6OldvcmtlclNjcmlwdENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6fldvcmtlclNjcmlwdENvbnRyb2xsZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6aW5pdFNjcmlwdCk6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpzY2hlZHVsZUV4ZWN1dGlvblRlcm1pbmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmlzRXhlY3V0
aW9uVGVybWluYXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxl
cjo6ZGlzYWJsZUV2YWwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRy
b2xsZXIuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRD
b250cm9sbGVyOjp2bSk6CisgICAgICAgIChXb3JrZXJTY3JpcHRDb250cm9sbGVyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMp
OgorICAgICAgICAqIGJpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tOgorICAgICAgICAo
K1tXZWJTY3JpcHRPYmplY3QgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOkpTQzo6b3JpZ2luUm9v
dE9iamVjdDpyb290T2JqZWN0Ol0pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAoR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRp
b24pOgorICAgICAgICAoSlNWYWx1ZVRvTmF0aXZlKToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3Ry
dWN0b3JEZWNsYXJhdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9ySGVscGVyTWV0
aG9kcyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRmxvYXQ2NEFycmF5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldEpTRmxvYXQ2NEFycmF5Q29uc3RydWN0b3JUYWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpnZXRKU0Zsb2F0NjRBcnJheVByb3RvdHlwZVRh
YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEpTRmxvYXQ2NEFycmF5VGFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNGbG9hdDY0QXJyYXk6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTRmxvYXQ2NEFycmF5OjpjcmVhdGVQcm90b3R5cGUpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU0Zsb2F0NjRBcnJheS5oOgorICAgICAgICAoV2ViQ29yZTo6
SlNGbG9hdDY0QXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0Zsb2F0NjRBcnJh
eTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTRmxvYXQ2NEFycmF5KToKKyAgICAgICAg
KFdlYkNvcmU6OkpTRmxvYXQ2NEFycmF5UHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNGbG9hdDY0QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpKU0Zsb2F0NjRBcnJheVByb3RvdHlwZTo6SlNGbG9hdDY0QXJyYXlQcm90b3R5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0
aXZlRE9NT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEFjdGl2ZURPTU9iamVj
dENvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RB
Y3RpdmVET01PYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dEFjdGl2ZURPTU9iamVjdDo6Y3JlYXRlUHJvdG90eXBlKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RBY3RpdmVET01PYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RBY3RpdmVET01PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU1Rlc3RBY3Rp
dmVET01PYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJv
dG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0QWN0aXZlRE9NT2JqZWN0
UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0QWN0
aXZlRE9NT2JqZWN0UHJvdG90eXBlOjpKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3I6OmNyZWF0
ZVN0cnVjdHVyZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENh
bGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dp
dGhOb1BhcmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dp
dGhDbGFzczFQYXJhbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6Y2FsbGJh
Y2tXaXRoQ2xhc3MyUGFyYW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2s6OmNh
bGxiYWNrV2l0aFN0cmluZ0xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2s6
OmNhbGxiYWNrV2l0aEJvb2xlYW4pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2s6
OmNhbGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpjcmVhdGVQcm90b3R5
cGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1l
ZEdldHRlci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3Rv
dHlwZTo6SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0
b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3Ry
dWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29u
c3RydWN0b3I6OmNyZWF0ZVByb3RvdHlwZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dEV2ZW50Q29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVu
dENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNUZXN0RXZlbnRDb25z
dHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90
eXBlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25zdHJ1Y3RvclBy
b3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50
Q29uc3RydWN0b3JQcm90b3R5cGU6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpjcmVh
dGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RF
dmVudFRhcmdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudFRhcmdldENvbnN0
cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudFRh
cmdldDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRUYXJn
ZXQ6OmNyZWF0ZVByb3RvdHlwZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV2ZW50VGFyZ2V0Lmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudFRhcmdl
dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFyZ2V0OjpjcmVhdGVT
dHJ1Y3R1cmUpOgorICAgICAgICAoSlNUZXN0RXZlbnRUYXJnZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlOjpKU1Rlc3RFdmVudFRhcmdldFBy
b3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9y
OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXhjZXB0aW9uQ29u
c3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV4Y2Vw
dGlvbjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXhjZXB0aW9u
OjpjcmVhdGVQcm90b3R5cGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFeGNlcHRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV4Y2VwdGlvbjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV4Y2VwdGlvbjo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKEpTVGVzdEV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RF
eGNlcHRpb25Qcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFeGNl
cHRpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RFeGNlcHRpb25Qcm90b3R5cGU6OkpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2U6OmZpbmlzaENyZWF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZTo6Y3JlYXRlUHJvdG90eXBlKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RJbnRlcmZhY2U6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU1Rlc3RJ
bnRlcmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlUHJvdG90eXBl
OjpKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50
ZXJmYWNlQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyOjpjcmVhdGVQcm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5o
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmNyZWF0
ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGU6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZTo6SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclBy
b3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcjo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rv
cjo6Y3JlYXRlUHJvdG90eXBlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRD
b25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3Ry
dWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU1Rlc3ROYW1lZENvbnN0cnVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1
Y3RvclByb3RvdHlwZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVj
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25z
dHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROb2RlQ29uc3Ry
dWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5vZGU6OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5vZGU6OmNyZWF0ZVByb3Rv
dHlwZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5vZGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROb2RlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNUZXN0Tm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROb2RlUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0Tm9kZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdE5vZGVQcm90b3R5cGU6OkpTVGVzdE5vZGVQcm90b3R5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0Tm9kZUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0T2JqQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE9iajo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0T2JqOjpjcmVhdGVQcm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqQ2FjaGVkQXR0cmlidXRlMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDYWNoZWRB
dHRyaWJ1dGUyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0
cjRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25kaXRpb25h
bEF0dHI1Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0
aW9uYWxBdHRyNkNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakFu
eUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZXBsYWNlYWJsZUF0
dHJpYnV0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5o
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0T2JqOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNUZXN0T2JqKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE9ialByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE9ialByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE9ialByb3RvdHlwZTo6SlNUZXN0T2JqUHJvdG90eXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdE9iakNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25z
dHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yczo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlUHJvdG90eXBlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZVN0
cnVjdHVyZSk6CisgICAgICAgIChKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGU6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1Byb3RvdHlwZTo6SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3Rv
dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29u
c3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rv
cjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmNyZWF0ZVByb3RvdHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNo
ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmg6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6
OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJv
dG90eXBlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29u
c3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFR5cGVk
ZWZzQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dFR5cGVkZWZzOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RUeXBl
ZGVmczo6Y3JlYXRlUHJvdG90eXBlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0VHlwZWRlZnMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFR5cGVkZWZzOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0VHlwZWRlZnM6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU1Rlc3RUeXBlZGVmcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RU
eXBlZGVmc1Byb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFR5cGVk
ZWZzUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
VHlwZWRlZnNQcm90b3R5cGU6OkpTVGVzdFR5cGVkZWZzUHJvdG90eXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgICogYnJpZGdlL2MvQ1J1bnRpbWVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OkNSdW50aW1lT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJyaWRnZS9jL2Nf
aW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q1J1bnRpbWVNZXRob2Q6OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDUnVudGltZU1ldGhvZDo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNSdW50aW1lTWV0aG9kOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgICogYnJpZGdlL2pzYy9CcmlkZ2VKU0MuY3BwOgorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmplY3QpOgorICAgICAgICAq
IGJyaWRnZS9vYmpjL09iakNSdW50aW1lT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpPYmpDUnVudGltZU9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBicmlkZ2Uv
b2JqYy9vYmpjX2luc3RhbmNlLm1tOgorICAgICAgICAoT2JqQ1J1bnRpbWVNZXRob2Q6OmNyZWF0
ZSk6CisgICAgICAgIChPYmpDUnVudGltZU1ldGhvZDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKE9iakNSdW50aW1lTWV0aG9kOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogYnJpZGdl
L29iamMvb2JqY19ydW50aW1lLmg6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpPYmpjRmFsbGJh
Y2tPYmplY3RJbXA6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYnJpZGdlL29iamMvb2Jq
Y19ydW50aW1lLm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6T2JqY0ZhbGxiYWNrT2JqZWN0
SW1wOjpPYmpjRmFsbGJhY2tPYmplY3RJbXApOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6T2Jq
Y0ZhbGxiYWNrT2JqZWN0SW1wOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogYnJpZGdlL3F0
L3F0X2luc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZU9iamVj
dDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6
On5RdEluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6OmdldFF0
SW5zdGFuY2UpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX2FycmF5LmNwcDoKKyAgICAgICAg
KEpTQzo6UnVudGltZUFycmF5OjpSdW50aW1lQXJyYXkpOgorICAgICAgICAoSlNDOjpSdW50aW1l
QXJyYXk6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9hcnJheS5o
OgorICAgICAgICAoSlNDOjpSdW50aW1lQXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlJ1
bnRpbWVBcnJheTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFJ1bnRpbWVBcnJheSk6Cisg
ICAgICAgICogYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcDoKKyAgICAgICAgKEpTQzo6UnVudGlt
ZU1ldGhvZDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX21ldGhv
ZC5oOgorICAgICAgICAoSlNDOjpSdW50aW1lTWV0aG9kOjpjcmVhdGUpOgorICAgICAgICAoSlND
OjpSdW50aW1lTWV0aG9kOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoUnVudGltZU1ldGhv
ZCk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6
QmluZGluZ3M6OlJ1bnRpbWVPYmplY3Q6OlJ1bnRpbWVPYmplY3QpOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6UnVudGltZU9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIGJyaWRn
ZS9ydW50aW1lX29iamVjdC5oOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVj
dDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9yb290LmNwcDoK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3Q6OlJvb3RPYmplY3QpOgorICAgICAg
ICAoSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdDo6Z2NQcm90ZWN0KToKKyAgICAgICAgKEpTQzo6
QmluZGluZ3M6OlJvb3RPYmplY3Q6OmdjVW5wcm90ZWN0KToKKyAgICAgICAgKEpTQzo6QmluZGlu
Z3M6OlJvb3RPYmplY3Q6OnVwZGF0ZUdsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpSb290T2JqZWN0OjphZGRSdW50aW1lT2JqZWN0KToKKyAgICAgICAgKiBicmlkZ2UvcnVu
dGltZV9yb290Lmg6CisgICAgICAgIChSb290T2JqZWN0KToKKyAgICAgICAgKiBkb20vTm9kZS5j
cHA6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogZG9t
L1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6dm0pOgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0
Lmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6Cisg
ICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIGh0bWwvSFRN
TEltYWdlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUxvYWRlcjo6bm90
aWZ5RmluaXNoZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHRBcmd1bWVudHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0QXJndW1lbnRzOjpTY3JpcHRBcmd1bWVudHMpOgorICAg
ICAgICAqIGxvYWRlci9pY29uL0ljb25EYXRhYmFzZUJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjppY29uRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0R2xvYmFsSWNvbkRhdGFiYXNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9NZW1vcnlVc2Fn
ZVN1cHBvcnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjptZW1vcnlVc2FnZUtCKToKKyAgICAg
ICAgKFdlYkNvcmU6OmFjdHVhbE1lbW9yeVVzYWdlS0IpOgorICAgICAgICAqIHBsYXRmb3JtL3dp
bi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR2xv
YmFsRGF0YSk6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGVyZm9ybVJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6bnBPYmplY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKiBw
bHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld0JsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6cGxhdGZvcm1TdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpnZXRX
aW5kb3dJbmZvKToKKyAgICAgICAgKiBwbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgICog
cGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpkaXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFu
ZGxlS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVN
b3VzZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCk6Cisg
ICAgICAgICogcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQpOgorICAgICAgICAqIHBsdWdpbnMvcXQvUGx1Z2lu
Vmlld1F0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKToK
KyAgICAgICAgKiBwbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0
TlBXaW5kb3dSZWN0KToKKyAgICAgICAgKiB0ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5j
cHA6CisgICAgICAgIChXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdCk6
CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhN
TEh0dHBSZXF1ZXN0Ojpkcm9wUHJvdGVjdGlvbik6CisKIDIwMTMtMDQtMTcgIEphbWVzIENyYWln
ICA8amFtZXNAY29va2llY3Jvb2suY29tPgogCiAgICAgICAgIEFYOiBhcmlhLWxldmVsIGRvZXMg
bm90IG92ZXJyaWRlIGltcGxpY2l0IGxldmVsIG9uIGgxLCBoMiwgZXRjCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTQ2NCw3ICs0NjQsNyBAQCBfX1pON1dlYkNvcmUxNUdy
YXBoaWNzQ29udGV4dDlkcmF3SW1hZ2VFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDlz
ZXRTaGFkb3dFUktOU185RmxvYXRTaXplRWZSS05TXzVDb2xvckVOU18xMENvbG9yU3BhY2VFCiBf
X1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDl0cmFuc2xhdGVFZmYKIF9fWk43V2ViQ29yZTE1
R3JhcGhpY3NDb250ZXh0RDFFdgotX19aTjdXZWJDb3JlMTVKU0RPTVdpbmRvd0Jhc2UxOGNvbW1v
bkpTR2xvYmFsRGF0YUV2CitfX1pON1dlYkNvcmUxNUpTRE9NV2luZG93QmFzZThjb21tb25WTUV2
CiBfX1pON1dlYkNvcmUxNVBsYXRmb3JtQ0FMYXllcjE4c2V0R2VvbWV0cnlGbGlwcGVkRWIKIF9f
Wk43V2ViQ29yZTE1UHJvdGVjdGlvblNwYWNlQzFFUktOM1dURjZTdHJpbmdFaU5TXzI1UHJvdGVj
dGlvblNwYWNlU2VydmVyVHlwZUVTNF9OU18zNVByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9u
U2NoZW1lRQogX19aTjdXZWJDb3JlMTVQcm90ZWN0aW9uU3BhY2VDMUV2CkBAIC0yNTk2LDcgKzI1
OTYsNyBAQCBfX1pON1dlYkNvcmU0UGFnZTE4c2V0VmlzaWJpbGl0eVN0YXRlRU5TCiAKICNpZiBV
U0UoUExVR0lOX0hPU1RfUFJPQ0VTUykKIF9fWk4zSlNDMTNSdW50aW1lTWV0aG9kMTFnZXRDYWxs
RGF0YUVQTlNfNkpTQ2VsbEVSTlNfOENhbGxEYXRhRQotX19aTjNKU0MxM1J1bnRpbWVNZXRob2Qx
NGZpbmlzaENyZWF0aW9uRVJOU18xMkpTR2xvYmFsRGF0YUVSS04zV1RGNlN0cmluZ0UKK19fWk4z
SlNDMTNSdW50aW1lTWV0aG9kMTRmaW5pc2hDcmVhdGlvbkVSTlNfMlZNRVJLTjNXVEY2U3RyaW5n
RQogX19aTjNKU0MxM1J1bnRpbWVNZXRob2QxOGdldE93blByb3BlcnR5U2xvdEVQTlNfNkpTQ2Vs
bEVQTlNfOUV4ZWNTdGF0ZUVOU18xMlByb3BlcnR5TmFtZUVSTlNfMTJQcm9wZXJ0eVNsb3RFCiBf
X1pOM0pTQzEzUnVudGltZU1ldGhvZDI0Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRVBOU184SlNP
YmplY3RFUE5TXzlFeGVjU3RhdGVFTlNfMTJQcm9wZXJ0eU5hbWVFUk5TXzE4UHJvcGVydHlEZXNj
cmlwdG9yRQogX19aTjNKU0MxM1J1bnRpbWVNZXRob2Q2c19pbmZvRQpJbmRleDogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5vcmRlcgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lm9yZGVyCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLm9yZGVy
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTU2LDggKzE5NTYsOCBAQCBfX1pON1dlYkNvcmUxNlNjcmlw
dENvbnRyb2xsZXIxM2V4ZWN1dGVTCiBfX1pON1dlYkNvcmUxNlNjcmlwdENvbnRyb2xsZXIxN2Nh
bkV4ZWN1dGVTY3JpcHRzRU5TXzMzUmVhc29uRm9yQ2FsbGluZ0NhbkV4ZWN1dGVTY3JpcHRzRQog
X19aTjdXZWJDb3JlMTZTY3JpcHRDb250cm9sbGVyOGV2YWx1YXRlRVJLTlNfMTZTY3JpcHRTb3Vy
Y2VDb2RlRQogX19aTjdXZWJDb3JlMjFtYWluVGhyZWFkTm9ybWFsV29ybGRFdgotX19aTjdXZWJD
b3JlMTVKU0RPTVdpbmRvd0Jhc2UxOGNvbW1vbkpTR2xvYmFsRGF0YUV2Ci1fX1pON1dlYkNvcmUx
NURPTVdyYXBwZXJXb3JsZEMxRVBOM0pTQzEySlNHbG9iYWxEYXRhRWIKK19fWk43V2ViQ29yZTE1
SlNET01XaW5kb3dCYXNlMThjb21tb25WTUV2CitfX1pON1dlYkNvcmUxNURPTVdyYXBwZXJXb3Js
ZEMxRVBOM0pTQzEyVk1FYgogX19aTjNXVEY5SGFzaFRhYmxlSVBON1dlYkNvcmUxNURPTVdyYXBw
ZXJXb3JsZEVTM19OU18xN0lkZW50aXR5RXh0cmFjdG9ySVMzX0VFTlNfN1B0ckhhc2hJUzNfRUVO
U18xMEhhc2hUcmFpdHNJUzNfRUVTOV9FM2FkZElTM19TM19OU18yMklkZW50aXR5SGFzaFRyYW5z
bGF0b3JJUzNfUzNfUzdfRUVFRVN0NHBhaXJJTlNfMTdIYXNoVGFibGVJdGVyYXRvcklTM19TM19T
NV9TN19TOV9TOV9FRWJFUktUX1JLVDBfCiBfX1pOM1dURjlIYXNoVGFibGVJUE43V2ViQ29yZTE1
RE9NV3JhcHBlcldvcmxkRVMzX05TXzE3SWRlbnRpdHlFeHRyYWN0b3JJUzNfRUVOU183UHRySGFz
aElTM19FRU5TXzEwSGFzaFRyYWl0c0lTM19FRVM5X0U2ZXhwYW5kRXYKIF9fWk43V2ViQ29yZTE2
U2NyaXB0Q29udHJvbGxlcjE1ZXZhbHVhdGVJbldvcmxkRVJLTlNfMTZTY3JpcHRTb3VyY2VDb2Rl
RVBOU18xNURPTVdyYXBwZXJXb3JsZEUKQEAgLTE5NjgsMTAgKzE5NjgsMTAgQEAgX19aTjdXZWJD
b3JlMTZKU0RPTVdpbmRvd1NoZWxsQzFFTjNXVEYxMAogX19aTjdXZWJDb3JlMTZKU0RPTVdpbmRv
d1NoZWxsQzJFTjNXVEYxMFBhc3NSZWZQdHJJTlNfOURPTVdpbmRvd0VFRVBOU18xNURPTVdyYXBw
ZXJXb3JsZEUKIF9fWk43V2ViQ29yZTE2SlNET01XaW5kb3dTaGVsbDlzZXRXaW5kb3dFTjNXVEYx
MFBhc3NSZWZQdHJJTlNfOURPTVdpbmRvd0VFRQogX19aTjdXZWJDb3JlMjBKU0RPTVdpbmRvd1By
b3RvdHlwZW53RW0KLV9fWk43V2ViQ29yZTExSlNET01XaW5kb3dDMUVSTjNKU0MxMkpTR2xvYmFs
RGF0YUVQTlMxXzlTdHJ1Y3R1cmVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfOURPTVdpbmRvd0VFRVBO
U18xNkpTRE9NV2luZG93U2hlbGxFCi1fX1pON1dlYkNvcmUxNUpTRE9NV2luZG93QmFzZUMyRVJO
M0pTQzEySlNHbG9iYWxEYXRhRVBOUzFfOVN0cnVjdHVyZUVOM1dURjEwUGFzc1JlZlB0cklOU185
RE9NV2luZG93RUVFUE5TXzE2SlNET01XaW5kb3dTaGVsbEUKLV9fWk43V2ViQ29yZTE3SlNET01H
bG9iYWxPYmplY3RDMkVSTjNKU0MxMkpTR2xvYmFsRGF0YUVQTlMxXzlTdHJ1Y3R1cmVFTjNXVEYx
MFBhc3NSZWZQdHJJTlNfMTVET01XcmFwcGVyV29ybGRFRUVQTlMxXzhKU09iamVjdEUKLV9fWk4z
SlNDMTRKU0dsb2JhbE9iamVjdEMyRVJOU18xMkpTR2xvYmFsRGF0YUVQTlNfOVN0cnVjdHVyZUVQ
TlNfOEpTT2JqZWN0RQorX19aTjdXZWJDb3JlMTFKU0RPTVdpbmRvd0MxRVJOM0pTQzEyVk1FUE5T
MV85U3RydWN0dXJlRU4zV1RGMTBQYXNzUmVmUHRySU5TXzlET01XaW5kb3dFRUVQTlNfMTZKU0RP
TVdpbmRvd1NoZWxsRQorX19aTjdXZWJDb3JlMTVKU0RPTVdpbmRvd0Jhc2VDMkVSTjNKU0MxMlZN
RVBOUzFfOVN0cnVjdHVyZUVOM1dURjEwUGFzc1JlZlB0cklOU185RE9NV2luZG93RUVFUE5TXzE2
SlNET01XaW5kb3dTaGVsbEUKK19fWk43V2ViQ29yZTE3SlNET01HbG9iYWxPYmplY3RDMkVSTjNK
U0MxMlZNRVBOUzFfOVN0cnVjdHVyZUVOM1dURjEwUGFzc1JlZlB0cklOU18xNURPTVdyYXBwZXJX
b3JsZEVFRVBOUzFfOEpTT2JqZWN0RQorX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0QzJFUk5TXzEy
Vk1FUE5TXzlTdHJ1Y3R1cmVFUE5TXzhKU09iamVjdEUKIF9fWk43V2ViQ29yZTVGcmFtZTlrZWVw
QWxpdmVFdgogX19aTjNKU0M2U3Ryb25nSU43V2ViQ29yZTE2SlNET01XaW5kb3dTaGVsbEVFQzJF
UktTM18KIF9fWk4zV1RGOUhhc2hUYWJsZUlOU182UmVmUHRySU43V2ViQ29yZTE1RE9NV3JhcHBl
cldvcmxkRUVFU3Q0cGFpcklTNF9OM0pTQzZTdHJvbmdJTlMyXzE2SlNET01XaW5kb3dTaGVsbEVF
RUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTQV9FRU5TXzdQdHJIYXNoSVM0X0VFTlNfMTRQYWly
SGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzRfRUVOU0dfSVM5X0VFRUVTSF9FMTVkZWFsbG9j
YXRlVGFibGVFUFNBX2kKQEAgLTIwMDYsNyArMjAwNiw3IEBAIF9fWk43V2ViQ29yZTE0SlNIVE1M
RG9jdW1lbnRDMUVQTjNKU0M5U3QKIF9fWk43V2ViQ29yZTEwSlNEb2N1bWVudEMyRVBOM0pTQzlT
dHJ1Y3R1cmVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFTjNXVEYxMFBhc3NSZWZQdHJJTlNfOERv
Y3VtZW50RUVFCiBfX1pON1dlYkNvcmU2SlNOb2RlQzJFUE4zSlNDOVN0cnVjdHVyZUVQTlNfMTdK
U0RPTUdsb2JhbE9iamVjdEVOM1dURjEwUGFzc1JlZlB0cklOU180Tm9kZUVFRQogX19aTjdXZWJD
b3JlMTJjYWNoZVdyYXBwZXJJTlNfMTJIVE1MRG9jdW1lbnRFRUV2UE5TXzE1RE9NV3JhcHBlcldv
cmxkRVBUX1BOU18xMkpTRE9NV3JhcHBlckUKLV9fWk4zSlNDNFdlYWtJTjdXZWJDb3JlMTJKU0RP
TVdyYXBwZXJFRTNzZXRFUk5TXzEySlNHbG9iYWxEYXRhRVBTMl9QTlNfMTVXZWFrSGFuZGxlT3du
ZXJFUHYKK19fWk4zSlNDNFdlYWtJTjdXZWJDb3JlMTJKU0RPTVdyYXBwZXJFRTNzZXRFUk5TXzEy
Vk1FUFMyX1BOU18xNVdlYWtIYW5kbGVPd25lckVQdgogX19aTjNXVEY5SGFzaFRhYmxlSU5TXzZS
ZWZQdHJJTlNfMTBTdHJpbmdJbXBsRUVFU3Q0cGFpcklTM19OM0pTQzE2U3ltYm9sVGFibGVFbnRy
eUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzdfRUVOUzVfMTdJZGVudGlmaWVyUmVwSGFzaEVO
U18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTM19FRU5TNV8yNlN5bWJvbFRhYmxl
SW5kZXhIYXNoVHJhaXRzRUVFU0RfRTRmaW5kSVBTMl9OU18yOVJlZlB0ckhhc2hNYXBSYXdLZXlU
cmFuc2xhdG9ySVNJX1M3X1NGX1NBX0VFRUVOU18xN0hhc2hUYWJsZUl0ZXJhdG9ySVMzX1M3X1M5
X1NBX1NGX1NEX0VFUktUXwogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjM1ZGlzcGF0Y2hEaWRD
bGVhcldpbmRvd09iamVjdEluV29ybGRFUE5TXzE1RE9NV3JhcHBlcldvcmxkRQogX19aTkszV1RG
OUhhc2hUYWJsZUlOU182UmVmUHRySU43V2ViQ29yZTE1RE9NV3JhcHBlcldvcmxkRUVFU3Q0cGFp
cklTNF9OM0pTQzZTdHJvbmdJTlMyXzE2SlNET01XaW5kb3dTaGVsbEVFRUVOU18xOFBhaXJGaXJz
dEV4dHJhY3RvcklTQV9FRU5TXzdQdHJIYXNoSVM0X0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18x
MEhhc2hUcmFpdHNJUzRfRUVOU0dfSVM5X0VFRUVTSF9FNGZpbmRJUFMzX05TXzI5UmVmUHRySGFz
aE1hcFJhd0tleVRyYW5zbGF0b3JJU01fU0FfU0pfU0VfRUVFRU5TXzIySGFzaFRhYmxlQ29uc3RJ
dGVyYXRvcklTNF9TQV9TQ19TRV9TSl9TSF9FRVJLVF8KQEAgLTIwMjcsNyArMjAyNyw3IEBAIF9f
Wk5LN1dlYkNvcmUxNUpTRE9NV2luZG93QmFzZTE2YWxsb3dzQWMKIF9fWk5LN1dlYkNvcmU5RnJh
bWVUcmVlNWNoaWxkRVJLTjNXVEYxMkF0b21pY1N0cmluZ0UKIF9fWk43V2ViQ29yZTIwSlNET01X
aW5kb3dQcm90b3R5cGUxOGdldE93blByb3BlcnR5U2xvdEVQTjNKU0M5RXhlY1N0YXRlRVJLTlMx
XzEwSWRlbnRpZmllckVSTlMxXzEyUHJvcGVydHlTbG90RQogX19aTjNKU0MyMWdldFN0YXRpY0Z1
bmN0aW9uU2xvdElOU184SlNPYmplY3RFRUViUE5TXzlFeGVjU3RhdGVFUEtOU185SGFzaFRhYmxl
RVBTMV9SS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCi1fX1pOM0pTQzhKU09i
amVjdDE3Z2V0RGlyZWN0TG9jYXRpb25FUk5TXzEySlNHbG9iYWxEYXRhRVJLTlNfMTBJZGVudGlm
aWVyRQorX19aTjNKU0M4SlNPYmplY3QxN2dldERpcmVjdExvY2F0aW9uRVJOU18xMlZNRVJLTlNf
MTBJZGVudGlmaWVyRQogX19aTjdXZWJDb3JlMTZmaW5kQXRvbWljU3RyaW5nRVJLTjNKU0MxMElk
ZW50aWZpZXJFCiBfX1pOSzNXVEY5SGFzaFRhYmxlSVBOU18xNkF0b21pY1N0cmluZ0ltcGxFU3Q0
cGFpcklTMl9qRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM0X0VFTlNfN1B0ckhhc2hJUzJfRUVO
U18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTMl9FRU5TQV9JakVFRUVTQl9FOGNv
bnRhaW5zSVMyX05TXzIySWRlbnRpdHlIYXNoVHJhbnNsYXRvcklTMl9TNF9TOF9FRUVFYlJLVF8K
IF9fWk5LM1dURjlIYXNoVGFibGVJUE5TXzE2QXRvbWljU3RyaW5nSW1wbEVTdDRwYWlySVMyX1BO
N1dlYkNvcmU3RWxlbWVudEVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzdfRUVOU183UHRySGFz
aElTMl9FRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMyX0VFTlNEX0lTNl9F
RUVFU0VfRThjb250YWluc0lTMl9OU18yMklkZW50aXR5SGFzaFRyYW5zbGF0b3JJUzJfUzdfU0Jf
RUVFRWJSS1RfCkBAIC0yODM1LDE0ICsyODM1LDE0IEBAIF9fWk4zSlNDOEJpbmRpbmdzMjB3ZWJT
Y3JpcHRPYmplY3RDbGFzc0UKIF9fWk4zSlNDOEJpbmRpbmdzMTJPYmpjSW5zdGFuY2U2Y3JlYXRl
RVAxMW9iamNfb2JqZWN0TjNXVEYxMFBhc3NSZWZQdHJJTlMwXzEwUm9vdE9iamVjdEVFRQogX19a
TjNKU0M4QmluZGluZ3MxMk9iamNJbnN0YW5jZUMyRVAxMW9iamNfb2JqZWN0TjNXVEYxMFBhc3NS
ZWZQdHJJTlMwXzEwUm9vdE9iamVjdEVFRQogX19aTjNKU0M4QmluZGluZ3M4SW5zdGFuY2VDMkVO
M1dURjEwUGFzc1JlZlB0cklOUzBfMTBSb290T2JqZWN0RUVFCi1fX1pOM0pTQzRXZWFrSU5TXzhC
aW5kaW5nczEzUnVudGltZU9iamVjdEVFQzJFUk5TXzEySlNHbG9iYWxEYXRhRVBTMl9QTlNfMTVX
ZWFrSGFuZGxlT3duZXJFUHYKK19fWk4zSlNDNFdlYWtJTlNfOEJpbmRpbmdzMTNSdW50aW1lT2Jq
ZWN0RUVDMkVSTlNfMTJWTUVQUzJfUE5TXzE1V2Vha0hhbmRsZU93bmVyRVB2CiBfX1pOM0pTQzhC
aW5kaW5nczhJbnN0YW5jZTE5Y3JlYXRlUnVudGltZU9iamVjdEVQTlNfOUV4ZWNTdGF0ZUUKIF9f
Wk4zSlNDOEJpbmRpbmdzMTJPYmpjSW5zdGFuY2UxNm5ld1J1bnRpbWVPYmplY3RFUE5TXzlFeGVj
U3RhdGVFCiBfX1pOM0pTQzhCaW5kaW5nczE3T2JqQ1J1bnRpbWVPYmplY3RDMUVQTlNfOUV4ZWNT
dGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVOM1dURjEwUGFzc1JlZlB0cklOUzBfMTJPYmpjSW5z
dGFuY2VFRUUKIF9fWk4zSlNDOEJpbmRpbmdzMTdPYmpDUnVudGltZU9iamVjdEMyRVBOU185RXhl
Y1N0YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0RU4zV1RGMTBQYXNzUmVmUHRySU5TMF8xMk9iamNJ
bnN0YW5jZUVFRQogX19aTjNKU0M4QmluZGluZ3MxM1J1bnRpbWVPYmplY3RDMkVQTlNfOUV4ZWNT
dGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0cnVjdHVyZUVOM1dURjEwUGFzc1JlZlB0
cklOUzBfOEluc3RhbmNlRUVFCi1fX1pOM0pTQzRXZWFrSU5TXzhCaW5kaW5nczEzUnVudGltZU9i
amVjdEVFM3NldEVSTlNfMTJKU0dsb2JhbERhdGFFUFMyX1BOU18xNVdlYWtIYW5kbGVPd25lckVQ
dgotX19aTjNKU0M4QmluZGluZ3MxMFJvb3RPYmplY3QxNmFkZFJ1bnRpbWVPYmplY3RFUk5TXzEy
SlNHbG9iYWxEYXRhRVBOUzBfMTNSdW50aW1lT2JqZWN0RQorX19aTjNKU0M0V2Vha0lOU184Qmlu
ZGluZ3MxM1J1bnRpbWVPYmplY3RFRTNzZXRFUk5TXzEyVk1FUFMyX1BOU18xNVdlYWtIYW5kbGVP
d25lckVQdgorX19aTjNKU0M4QmluZGluZ3MxMFJvb3RPYmplY3QxNmFkZFJ1bnRpbWVPYmplY3RF
Uk5TXzEyVk1FUE5TMF8xM1J1bnRpbWVPYmplY3RFCiBfX1pOM0pTQzRXZWFrSU5TXzhCaW5kaW5n
czEzUnVudGltZU9iamVjdEVFYVNFUktTM18KIF9fWk43V2ViQ29yZTE2SlNET01XaW5kb3dTaGVs
bDNwdXRFUE4zSlNDOUV4ZWNTdGF0ZUVSS05TMV8xMElkZW50aWZpZXJFTlMxXzdKU1ZhbHVlRVJO
UzFfMTVQdXRQcm9wZXJ0eVNsb3RFCiBfX1pON1dlYkNvcmUxMUpTRE9NV2luZG93M3B1dEVQTjNK
U0M5RXhlY1N0YXRlRVJLTlMxXzEwSWRlbnRpZmllckVOUzFfN0pTVmFsdWVFUk5TMV8xNVB1dFBy
b3BlcnR5U2xvdEUKQEAgLTMwNzYsNyArMzA3Niw3IEBAIF9fWk43V2ViQ29yZTEzdG9KU0RPTVdp
bmRvd0VQTlNfNUZyYW1lRVAKIF9fWk43V2ViQ29yZUwxOGV2ZW50UGFyYW1ldGVyTmFtZUViCiBf
X1pON1dlYkNvcmUxOUpTTGF6eUV2ZW50TGlzdGVuZXJDMUVSS04zV1RGNlN0cmluZ0VTNF9TNF9Q
TlNfNE5vZGVFUzRfaVBOM0pTQzhKU09iamVjdEVQTlNfMTVET01XcmFwcGVyV29ybGRFCiBfX1pO
N1dlYkNvcmUxNUpTRXZlbnRMaXN0ZW5lckMyRVBOM0pTQzhKU09iamVjdEVTM19iUE5TXzE1RE9N
V3JhcHBlcldvcmxkRQotX19aTjNKU0M0V2Vha0lOU184SlNPYmplY3RFRUMyRVJOU18xMkpTR2xv
YmFsRGF0YUVQUzFfUE5TXzE1V2Vha0hhbmRsZU93bmVyRVB2CitfX1pOM0pTQzRXZWFrSU5TXzhK
U09iamVjdEVFQzJFUk5TXzEyVk1FUFMxX1BOU18xNVdlYWtIYW5kbGVPd25lckVQdgogX19aTjdX
ZWJDb3JlOERvY3VtZW50MzFzZXRXaW5kb3dBdHRyaWJ1dGVFdmVudExpc3RlbmVyRVJLTjNXVEYx
MkF0b21pY1N0cmluZ0VOUzFfMTBQYXNzUmVmUHRySU5TXzEzRXZlbnRMaXN0ZW5lckVFRQogX19a
TjdXZWJDb3JlMTFFdmVudFRhcmdldDI1c2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lckVSS04zV1RG
MTJBdG9taWNTdHJpbmdFTlMxXzEwUGFzc1JlZlB0cklOU18xM0V2ZW50TGlzdGVuZXJFRUUKIF9f
Wk43V2ViQ29yZTExRXZlbnRUYXJnZXQyNWdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXJFUktOM1dU
RjEyQXRvbWljU3RyaW5nRQpAQCAtMzMzOSwxMyArMzMzOSwxMyBAQCBfX1pOSzdXZWJDb3JlMTlK
U0xhenlFdmVudExpc3RlbmVyMjBpbml0CiBfX1pOSzdXZWJDb3JlMjFDb250ZW50U2VjdXJpdHlQ
b2xpY3kyNGFsbG93SW5saW5lRXZlbnRIYW5kbGVyc0V2CiBfX1pON1dlYkNvcmUxOXRvSlNET01H
bG9iYWxPYmplY3RFUE5TXzIyU2NyaXB0RXhlY3V0aW9uQ29udGV4dEVQTlNfMTVET01XcmFwcGVy
V29ybGRFCiBfX1pUaG4yMDhfTks3V2ViQ29yZThEb2N1bWVudDEwaXNEb2N1bWVudEV2Ci1fX1pO
M0pTQzE4anNOb250cml2aWFsU3RyaW5nRVBOU18xMkpTR2xvYmFsRGF0YUVSS05TXzdVU3RyaW5n
RQorX19aTjNKU0MxOGpzTm9udHJpdmlhbFN0cmluZ0VQTlNfMTJWTUVSS05TXzdVU3RyaW5nRQog
X19aTjdXZWJDb3JlOGpzU3RyaW5nRVBOM0pTQzlFeGVjU3RhdGVFUktOM1dURjZTdHJpbmdFCiBf
X1pON1dlYkNvcmUxNmpzU3RyaW5nU2xvd0Nhc2VFUE4zSlNDOUV4ZWNTdGF0ZUVSTjNXVEY3SGFz
aE1hcElQTlMzXzEwU3RyaW5nSW1wbEVOUzBfNFdlYWtJTlMwXzhKU1N0cmluZ0VFRU5TM18xMFN0
cmluZ0hhc2hFTlMzXzEwSGFzaFRyYWl0c0lTNl9FRU5TQl9JUzlfRUVFRVM2XwotX19aTjNKU0M4
anNTdHJpbmdFUE5TXzEySlNHbG9iYWxEYXRhRVJLTlNfN1VTdHJpbmdFCi1fX1pOM0pTQzRXZWFr
SU5TXzhKU1N0cmluZ0VFQzJFUk5TXzEySlNHbG9iYWxEYXRhRVBTMV9QTlNfMTVXZWFrSGFuZGxl
T3duZXJFUHYKK19fWk4zSlNDOGpzU3RyaW5nRVBOU18xMlZNRVJLTlNfN1VTdHJpbmdFCitfX1pO
M0pTQzRXZWFrSU5TXzhKU1N0cmluZ0VFQzJFUk5TXzEyVk1FUFMxX1BOU18xNVdlYWtIYW5kbGVP
d25lckVQdgogX19aTjNKU0M0V2Vha0lOU184SlNTdHJpbmdFRWFTRVJLUzJfCi1fX1pON1dlYkNv
cmUyMlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQxMGdsb2JhbERhdGFFdgorX19aTjdXZWJDb3JlMjJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0MTB2bUV2CiBfX1pON1dlYkNvcmU0dG9KU0VQTjNKU0M5RXhl
Y1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOU181RXZlbnRFCiBfX1pOSzdXZWJDb3Jl
NUV2ZW50OWlzVUlFdmVudEV2CiBfX1pOSzdXZWJDb3JlNUV2ZW50MTVpc011dGF0aW9uRXZlbnRF
dgpAQCAtMzM2Niw3ICszMzY2LDcgQEAgX19aTjdXZWJDb3JlMTNjcmVhdGVXcmFwcGVySU5TXzdK
U0V2ZW50RQogX19aTjdXZWJDb3JlMTVnZXRET01TdHJ1Y3R1cmVJTlNfN0pTRXZlbnRFRUVQTjNK
U0M5U3RydWN0dXJlRVBOUzJfOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEUKIF9f
Wk43V2ViQ29yZTdKU0V2ZW50MTVjcmVhdGVQcm90b3R5cGVFUE4zSlNDOUV4ZWNTdGF0ZUVQTlMx
XzE0SlNHbG9iYWxPYmplY3RFCiBfX1pON1dlYkNvcmU3SlNFdmVudEMxRVBOM0pTQzlTdHJ1Y3R1
cmVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNUV2ZW50RUVF
Ci1fX1pOM0pTQzRXZWFrSU43V2ViQ29yZTEySlNET01XcmFwcGVyRUVDMkVSTlNfMTJKU0dsb2Jh
bERhdGFFUFMyX1BOU18xNVdlYWtIYW5kbGVPd25lckVQdgorX19aTjNKU0M0V2Vha0lON1dlYkNv
cmUxMkpTRE9NV3JhcHBlckVFQzJFUk5TXzEyVk1FUFMyX1BOU18xNVdlYWtIYW5kbGVPd25lckVQ
dgogX19aTjNKU0M0V2Vha0lON1dlYkNvcmUxMkpTRE9NV3JhcHBlckVFYVNFUktTM18KIF9fWk5L
N1dlYkNvcmUxN0pTRE9NR2xvYmFsT2JqZWN0MTJjdXJyZW50RXZlbnRFdgogX19aTjdXZWJDb3Jl
NHRvSlNFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNfMTFFdmVu
dFRhcmdldEUKQEAgLTM2NzUsNyArMzY3NSw3IEBAIF9fWk43V2ViQ29yZTE3TW91c2VSZWxhdGVk
RXZlbnQxNHJlY2VpdmUKIF9fWk5LN1dlYkNvcmUxME1vdXNlRXZlbnQxMmlzTW91c2VFdmVudEV2
CiBfX1pON1dlYkNvcmU5SW5wdXRUeXBlMTd3aWxsRGlzcGF0Y2hDbGlja0V2CiBfX1pOSzdXZWJD
b3JlNE5vZGUyMnNjcmlwdEV4ZWN1dGlvbkNvbnRleHRFdgotX19aTjNKU0M0V2Vha0lOU184SlNP
YmplY3RFRTNzZXRFUk5TXzEySlNHbG9iYWxEYXRhRVBTMV9QTlNfMTVXZWFrSGFuZGxlT3duZXJF
UHYKK19fWk4zSlNDNFdlYWtJTlNfOEpTT2JqZWN0RUUzc2V0RVJOU18xMlZNRVBTMV9QTlNfMTVX
ZWFrSGFuZGxlT3duZXJFUHYKIF9fWk5LN1dlYkNvcmUxM0pTSFRNTEVsZW1lbnQyMXB1c2hFdmVu
dEhhbmRsZXJTY29wZUVQTjNKU0M5RXhlY1N0YXRlRVBOUzFfMTRTY29wZUNoYWluTm9kZUUKIF9f
Wk5LN1dlYkNvcmU0Tm9kZTEzb3duZXJEb2N1bWVudEV2CiBfX1pOSzdXZWJDb3JlMjJIVE1MRm9y
bUNvbnRyb2xFbGVtZW50MTF2aXJ0dWFsRm9ybUV2CkBAIC00ODUyLDcgKzQ4NTIsNyBAQCBfX1pO
N1dlYkNvcmUyMEhUTUxDb25zdHJ1Y3Rpb25TaXRlMjhpbnNlCiBfX1pOSzdXZWJDb3JlMTZIVE1M
RWxlbWVudFN0YWNrMTFodG1sRWxlbWVudEV2CiBfX1pON1dlYkNvcmUyMEhUTUxDb25zdHJ1Y3Rp
b25TaXRlMzVtZXJnZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudEVSTlNfMTVBdG9taWNI
VE1MVG9rZW5FUE5TXzdFbGVtZW50RQogX19aTjdXZWJDb3JlMjBzZXRKU0RPTVdpbmRvd1BhcmVu
dEVQTjNKU0M5RXhlY1N0YXRlRVBOUzBfOEpTT2JqZWN0RU5TMF83SlNWYWx1ZUUKLV9fWk4zSlND
OEpTT2JqZWN0MTdwdXREaXJlY3RJbnRlcm5hbEVSTlNfMTJKU0dsb2JhbERhdGFFUktOU18xMElk
ZW50aWZpZXJFTlNfN0pTVmFsdWVFamJSTlNfMTVQdXRQcm9wZXJ0eVNsb3RFUE5TXzZKU0NlbGxF
CitfX1pOM0pTQzhKU09iamVjdDE3cHV0RGlyZWN0SW50ZXJuYWxFUk5TXzEyVk1FUktOU18xMElk
ZW50aWZpZXJFTlNfN0pTVmFsdWVFamJSTlNfMTVQdXRQcm9wZXJ0eVNsb3RFUE5TXzZKU0NlbGxF
CiBfX1pON1dlYkNvcmVMMTZ0YWJsZUNvbnN0cnVjdG9yRVJLTlNfMTNRdWFsaWZpZWROYW1lRVBO
U184RG9jdW1lbnRFUE5TXzE1SFRNTEZvcm1FbGVtZW50RWIKIF9fWk43V2ViQ29yZTE2SFRNTFRh
YmxlRWxlbWVudDZjcmVhdGVFUktOU18xM1F1YWxpZmllZE5hbWVFUE5TXzhEb2N1bWVudEUKIF9f
Wk5LN1dlYkNvcmUxNkhUTUxUYWJsZUVsZW1lbnQxMG1hcFRvRW50cnlFUktOU18xM1F1YWxpZmll
ZE5hbWVFUk5TXzIwTWFwcGVkQXR0cmlidXRlRW50cnlFCkBAIC03MzM2LDggKzczMzYsOCBAQCBf
X1pON1dlYkNvcmUxNmpzRE9NV2luZG93RXZlbnRFUE4zSlNDOUV4CiBfX1pOSzdXZWJDb3JlMTFK
U0RPTVdpbmRvdzVldmVudEVQTjNKU0M5RXhlY1N0YXRlRQogX19aTjNKU0M0V2Vha0lON1dlYkNv
cmUxMkpTRE9NV3JhcHBlckVFQzJFUktTM18KIF9fWk43V2ViQ29yZTdKU0V2ZW50MThnZXRPd25Q
cm9wZXJ0eVNsb3RFUE4zSlNDOUV4ZWNTdGF0ZUVSS05TMV8xMElkZW50aWZpZXJFUk5TMV8xMlBy
b3BlcnR5U2xvdEUKLV9fWk43V2ViQ29yZTI1Z2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YUVSTjNK
U0MxMkpTR2xvYmFsRGF0YUVQS05TMF85SGFzaFRhYmxlRQotX19aTjdXZWJDb3JlMjFET01PYmpl
Y3RIYXNoVGFibGVNYXA2bWFwRm9yRVJOM0pTQzEySlNHbG9iYWxEYXRhRQorX19aTjdXZWJDb3Jl
MjVnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhRVJOM0pTQzEyVk1FUEtOUzBfOUhhc2hUYWJsZUUK
K19fWk43V2ViQ29yZTIxRE9NT2JqZWN0SGFzaFRhYmxlTWFwNm1hcEZvckVSTjNKU0MxMlZNRQog
X19aTjdXZWJDb3JlMjFET01PYmplY3RIYXNoVGFibGVNYXAzZ2V0RVBLTjNKU0M5SGFzaFRhYmxl
RQogX19aTjNKU0MxOGdldFN0YXRpY1ZhbHVlU2xvdElON1dlYkNvcmU3SlNFdmVudEVOUzFfMTJK
U0RPTVdyYXBwZXJFRUViUE5TXzlFeGVjU3RhdGVFUEtOU185SGFzaFRhYmxlRVBUX1JLTlNfMTBJ
ZGVudGlmaWVyRVJOU18xMlByb3BlcnR5U2xvdEUKIF9fWk43V2ViQ29yZTExanNFdmVudFR5cGVF
UE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFUktOUzBfMTBJZGVudGlmaWVyRQpAQCAtMTQz
NDQsNyArMTQzNDQsNyBAQCBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDIzc2V0VXBkYXRp
CiBfX1pOSzdXZWJDb3JlMTRSZW5kZXJUaGVtZU1hYzIwY29udHJvbFN1cHBvcnRzVGludHNFUEtO
U18xMlJlbmRlck9iamVjdEUKIF9fWk43V2ViQ29yZTIxU2VyaWFsaXplZFNjcmlwdFZhbHVlQzFF
Uk4zV1RGNlZlY3RvckloTG0wRUVFCiBfX1pON1dlYkNvcmUyMVNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTZjcmVhdGVFUEsxNU9wYXF1ZUpTQ29udGV4dFBLMTNPcGFxdWVKU1ZhbHVlUFM2XwotX19aTjNK
U0MyM0FQSUVudHJ5U2hpbVdpdGhvdXRMb2NrQzJFUE5TXzEySlNHbG9iYWxEYXRhRWIKK19fWk4z
SlNDMjNBUElFbnRyeVNoaW1XaXRob3V0TG9ja0MyRVBOU18xMlZNRWIKIF9fWk43V2ViQ29yZTIx
U2VyaWFsaXplZFNjcmlwdFZhbHVlNmNyZWF0ZUVQTjNKU0M5RXhlY1N0YXRlRU5TMV83SlNWYWx1
ZUVOU18yMlNlcmlhbGl6YXRpb25FcnJvck1vZGVFCiBfX1pON1dlYkNvcmUxNUNsb25lU2VyaWFs
aXplckMyRVBOM0pTQzlFeGVjU3RhdGVFUk4zV1RGNlZlY3RvckloTG0wRUVFCiBfX1pON1dlYkNv
cmVMMTd3cml0ZUxpdHRsZUVuZGlhbklqRUV2Uk4zV1RGNlZlY3RvckloTG0wRUVFVF8KQEAgLTE3
MzQ3LDcgKzE3MzQ3LDcgQEAgX19aTjdXZWJDb3JlMjhqc1hNTEh0dHBSZXF1ZXN0UmVzcG9uc2VU
ZQogX19aTks3V2ViQ29yZTE2SlNYTUxIdHRwUmVxdWVzdDEycmVzcG9uc2VUZXh0RVBOM0pTQzlF
eGVjU3RhdGVFCiBfX1pON1dlYkNvcmUxNFhNTEh0dHBSZXF1ZXN0MTJyZXNwb25zZVRleHRFUmkK
IF9fWk43V2ViQ29yZTE5anNPd25lZFN0cmluZ09yTnVsbEVQTjNKU0M5RXhlY1N0YXRlRVJLTjNX
VEY2U3RyaW5nRQotX19aTjNKU0MxM2pzT3duZWRTdHJpbmdFUE5TXzEySlNHbG9iYWxEYXRhRVJL
TlNfN1VTdHJpbmdFCitfX1pOM0pTQzEzanNPd25lZFN0cmluZ0VQTlNfMTJWTUVSS05TXzdVU3Ry
aW5nRQogX19aTjdXZWJDb3JlNDhqc1dlYkdMUmVuZGVyaW5nQ29udGV4dFByb3RvdHlwZUZ1bmN0
aW9uR2V0RXJyb3JFUE4zSlNDOUV4ZWNTdGF0ZUUKIF9fWk43V2ViQ29yZTIxV2ViR0xSZW5kZXJp
bmdDb250ZXh0OGdldEVycm9yRXYKIF9fWk43V2ViQ29yZTE3R3JhcGhpY3NDb250ZXh0M0Q4Z2V0
RXJyb3JFdgpAQCAtMTg2MDEsMTQgKzE4NjAxLDE0IEBAIF9fWk43V2ViQ29yZTIzV29ya2VyU2Ny
aXB0RGVidWdTZXJ2ZXJDMUUKIF9fWk43V2ViQ29yZTIyV29ya2VyU2NyaXB0Q29udHJvbGxlcjhl
dmFsdWF0ZUVSS05TXzE2U2NyaXB0U291cmNlQ29kZUUKIF9fWk43V2ViQ29yZTIyV29ya2VyU2Ny
aXB0Q29udHJvbGxlcjhldmFsdWF0ZUVSS05TXzE2U2NyaXB0U291cmNlQ29kZUVQTlNfMTFTY3Jp
cHRWYWx1ZUUKIF9fWk43V2ViQ29yZTIyV29ya2VyU2NyaXB0Q29udHJvbGxlcjEwaW5pdFNjcmlw
dEV2Ci1fX1pON1dlYkNvcmUyNEpTV29ya2VyQ29udGV4dFByb3RvdHlwZW53RW1QTjNKU0MxMkpT
R2xvYmFsRGF0YUUKK19fWk43V2ViQ29yZTI0SlNXb3JrZXJDb250ZXh0UHJvdG90eXBlbndFbVBO
M0pTQzEyVk1FCiBfX1pOSzdXZWJDb3JlMjJEZWRpY2F0ZWRXb3JrZXJDb250ZXh0MjRpc0RlZGlj
YXRlZFdvcmtlckNvbnRleHRFdgotX19aTjdXZWJDb3JlMzNKU0RlZGljYXRlZFdvcmtlckNvbnRl
eHRQcm90b3R5cGVud0VtUE4zSlNDMTJKU0dsb2JhbERhdGFFCitfX1pON1dlYkNvcmUzM0pTRGVk
aWNhdGVkV29ya2VyQ29udGV4dFByb3RvdHlwZW53RW1QTjNKU0MxMlZNRQogX19aVGhuMTI4X043
V2ViQ29yZTIyRGVkaWNhdGVkV29ya2VyQ29udGV4dDI0dG9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0
RXYKLV9fWk43V2ViQ29yZTI0SlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0QzFFUk4zSlNDMTJKU0ds
b2JhbERhdGFFUE5TMV85U3RydWN0dXJlRU4zV1RGMTBQYXNzUmVmUHRySU5TXzIyRGVkaWNhdGVk
V29ya2VyQ29udGV4dEVFRQotX19aTjdXZWJDb3JlMTVKU1dvcmtlckNvbnRleHRDMkVSTjNKU0Mx
MkpTR2xvYmFsRGF0YUVQTlMxXzlTdHJ1Y3R1cmVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTNXb3Jr
ZXJDb250ZXh0RUVFCi1fX1pON1dlYkNvcmUxOUpTV29ya2VyQ29udGV4dEJhc2VDMkVSTjNKU0Mx
MkpTR2xvYmFsRGF0YUVQTlMxXzlTdHJ1Y3R1cmVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTNXb3Jr
ZXJDb250ZXh0RUVFCi1fX1pON1dlYkNvcmUxMW5vcm1hbFdvcmxkRVJOM0pTQzEySlNHbG9iYWxE
YXRhRQorX19aTjdXZWJDb3JlMjRKU0RlZGljYXRlZFdvcmtlckNvbnRleHRDMUVSTjNKU0MxMlZN
RVBOUzFfOVN0cnVjdHVyZUVOM1dURjEwUGFzc1JlZlB0cklOU18yMkRlZGljYXRlZFdvcmtlckNv
bnRleHRFRUUKK19fWk43V2ViQ29yZTE1SlNXb3JrZXJDb250ZXh0QzJFUk4zSlNDMTJWTUVQTlMx
XzlTdHJ1Y3R1cmVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTNXb3JrZXJDb250ZXh0RUVFCitfX1pO
N1dlYkNvcmUxOUpTV29ya2VyQ29udGV4dEJhc2VDMkVSTjNKU0MxMlZNRVBOUzFfOVN0cnVjdHVy
ZUVOM1dURjEwUGFzc1JlZlB0cklOU18xM1dvcmtlckNvbnRleHRFRUUKK19fWk43V2ViQ29yZTEx
bm9ybWFsV29ybGRFUk4zSlNDMTJWTUUKIF9fWk5LM0pTQzE0SlNHbG9iYWxPYmplY3QxN3N1cHBv
cnRzUHJvZmlsaW5nRXYKIF9fWk5LM0pTQzE0SlNHbG9iYWxPYmplY3QyMnN1cHBvcnRzUmljaFNv
dXJjZUluZm9FdgogX19aTjdXZWJDb3JlMjRKU0RlZGljYXRlZFdvcmtlckNvbnRleHQzcHV0RVBO
M0pTQzlFeGVjU3RhdGVFUktOUzFfMTBJZGVudGlmaWVyRU5TMV83SlNWYWx1ZUVSTlMxXzE1UHV0
UHJvcGVydHlTbG90RQpAQCAtMTk2OTgsNyArMTk2OTgsNyBAQCBfX1pON1dlYkNvcmUyMmpzSFRN
TE1lZGlhRWxlbWVudExvb3BFUE4zCiBfX1pON1dlYkNvcmUyNXNldEpTSFRNTE1lZGlhRWxlbWVu
dExvb3BFUE4zSlNDOUV4ZWNTdGF0ZUVQTlMwXzhKU09iamVjdEVOUzBfN0pTVmFsdWVFCiBfX1pO
N1dlYkNvcmUxN2pzSFRNTERvY3VtZW50QWxsRVBOM0pTQzlFeGVjU3RhdGVFTlMwXzdKU1ZhbHVl
RVJLTlMwXzEwSWRlbnRpZmllckUKIF9fWk5LN1dlYkNvcmUxNEpTSFRNTERvY3VtZW50M2FsbEVQ
TjNKU0M5RXhlY1N0YXRlRQotX19aTkszSlNDOEpTT2JqZWN0OWdldERpcmVjdEVSTlNfMTJKU0ds
b2JhbERhdGFFUktOU18xMElkZW50aWZpZXJFCitfX1pOSzNKU0M4SlNPYmplY3Q5Z2V0RGlyZWN0
RVJOU18xMlZNRVJLTlNfMTBJZGVudGlmaWVyRQogX19aTjdXZWJDb3JlOERvY3VtZW50M2FsbEV2
CiBfX1pON1dlYkNvcmUxN0hUTUxBbGxDb2xsZWN0aW9uNmNyZWF0ZUVOM1dURjEwUGFzc1JlZlB0
cklOU180Tm9kZUVFRQogX19aTjdXZWJDb3JlMTRIVE1MQ29sbGVjdGlvbkMyRU4zV1RGMTBQYXNz
UmVmUHRySU5TXzROb2RlRUVFTlNfMTRDb2xsZWN0aW9uVHlwZUUKQEAgLTE5NzUxLDkgKzE5NzUx
LDkgQEAgX19aTjdXZWJDb3JlMjNKU05vZGVGaWx0ZXJDb25zdHJ1Y3RvcjE4ZwogX19aTjNKU0Mx
OGdldFN0YXRpY1ZhbHVlU2xvdElON1dlYkNvcmUyM0pTTm9kZUZpbHRlckNvbnN0cnVjdG9yRU5T
MV8xMkpTRE9NV3JhcHBlckVFRWJQTlNfOUV4ZWNTdGF0ZUVQS05TXzlIYXNoVGFibGVFUFRfUktO
U18xMElkZW50aWZpZXJFUk5TXzEyUHJvcGVydHlTbG90RQogX19aTjdXZWJDb3JlMjRqc05vZGVG
aWx0ZXJTSE9XX0VMRU1FTlRFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFUktOUzBfMTBJ
ZGVudGlmaWVyRQogX19aTjdXZWJDb3JlNDVqc0RvY3VtZW50UHJvdG90eXBlRnVuY3Rpb25DcmVh
dGVOb2RlSXRlcmF0b3JFUE4zSlNDOUV4ZWNTdGF0ZUUKLV9fWk43V2ViQ29yZTEydG9Ob2RlRmls
dGVyRVJOM0pTQzEySlNHbG9iYWxEYXRhRU5TMF83SlNWYWx1ZUUKLV9fWk43V2ViQ29yZTIxSlNO
b2RlRmlsdGVyQ29uZGl0aW9uQzFFUk4zSlNDMTJKU0dsb2JhbERhdGFFUE5TXzEwTm9kZUZpbHRl
ckVOUzFfN0pTVmFsdWVFCi1fX1pOM0pTQzRXZWFrSU5TXzdVbmtub3duRUVDMkVSTlNfMTJKU0ds
b2JhbERhdGFFTlNfN0pTVmFsdWVFUE5TXzE1V2Vha0hhbmRsZU93bmVyRVB2CitfX1pON1dlYkNv
cmUxMnRvTm9kZUZpbHRlckVSTjNKU0MxMlZNRU5TMF83SlNWYWx1ZUUKK19fWk43V2ViQ29yZTIx
SlNOb2RlRmlsdGVyQ29uZGl0aW9uQzFFUk4zSlNDMTJWTUVQTlNfMTBOb2RlRmlsdGVyRU5TMV83
SlNWYWx1ZUUKK19fWk4zSlNDNFdlYWtJTlNfN1Vua25vd25FRUMyRVJOU18xMlZNRU5TXzdKU1Zh
bHVlRVBOU18xNVdlYWtIYW5kbGVPd25lckVQdgogX19aTjdXZWJDb3JlNHRvSlNFUE4zSlNDOUV4
ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNfMTJOb2RlSXRlcmF0b3JFCiBfX1pO
N1dlYkNvcmUxM2NyZWF0ZVdyYXBwZXJJTlNfMTRKU05vZGVJdGVyYXRvckVOU18xMk5vZGVJdGVy
YXRvckVFRVBOU18xMkpTRE9NV3JhcHBlckVQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xv
YmFsT2JqZWN0RVBUMF8KIF9fWk43V2ViQ29yZTE1Z2V0RE9NU3RydWN0dXJlSU5TXzE0SlNOb2Rl
SXRlcmF0b3JFRUVQTjNKU0M5U3RydWN0dXJlRVBOUzJfOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUds
b2JhbE9iamVjdEUKQEAgLTI2MzI2LDkgKzI2MzI2LDkgQEAgX19aTjdXZWJDb3JlMjRTaGFyZWRX
b3JrZXJTY3JpcHRMb2FkZXJEMAogX19aTjdXZWJDb3JlMThTaGFyZWRXb3JrZXJUaHJlYWQxOWNy
ZWF0ZVdvcmtlckNvbnRleHRFUktOU180S1VSTEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29y
ZTE5U2hhcmVkV29ya2VyQ29udGV4dEMxRVJLTjNXVEY2U3RyaW5nRVJLTlNfNEtVUkxFUzRfUE5T
XzE4U2hhcmVkV29ya2VyVGhyZWFkRQogX19aTks3V2ViQ29yZTEzV29ya2VyQ29udGV4dDI0aXNE
ZWRpY2F0ZWRXb3JrZXJDb250ZXh0RXYKLV9fWk43V2ViQ29yZTMwSlNTaGFyZWRXb3JrZXJDb250
ZXh0UHJvdG90eXBlbndFbVBOM0pTQzEySlNHbG9iYWxEYXRhRQorX19aTjdXZWJDb3JlMzBKU1No
YXJlZFdvcmtlckNvbnRleHRQcm90b3R5cGVud0VtUE4zSlNDMTJWTUUKIF9fWlRobjEyOF9ON1dl
YkNvcmUxOVNoYXJlZFdvcmtlckNvbnRleHQyMXRvU2hhcmVkV29ya2VyQ29udGV4dEV2Ci1fX1pO
N1dlYkNvcmUyMUpTU2hhcmVkV29ya2VyQ29udGV4dEMxRVJOM0pTQzEySlNHbG9iYWxEYXRhRVBO
UzFfOVN0cnVjdHVyZUVOM1dURjEwUGFzc1JlZlB0cklOU18xOVNoYXJlZFdvcmtlckNvbnRleHRF
RUUKK19fWk43V2ViQ29yZTIxSlNTaGFyZWRXb3JrZXJDb250ZXh0QzFFUk4zSlNDMTJWTUVQTlMx
XzlTdHJ1Y3R1cmVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTlTaGFyZWRXb3JrZXJDb250ZXh0RUVF
CiBfX1pON1dlYkNvcmUyMUpTU2hhcmVkV29ya2VyQ29udGV4dDNwdXRFUE4zSlNDOUV4ZWNTdGF0
ZUVSS05TMV8xMElkZW50aWZpZXJFTlMxXzdKU1ZhbHVlRVJOUzFfMTVQdXRQcm9wZXJ0eVNsb3RF
CiBfX1pOM0pTQzlsb29rdXBQdXRJTjdXZWJDb3JlMjFKU1NoYXJlZFdvcmtlckNvbnRleHRFRUVi
UE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFTlNfN0pTVmFsdWVFUEtOU185SGFzaFRh
YmxlRVBUXwogX19aTjdXZWJDb3JlMzNzZXRKU1NoYXJlZFdvcmtlckNvbnRleHRPbmNvbm5lY3RF
UE4zSlNDOUV4ZWNTdGF0ZUVQTlMwXzhKU09iamVjdEVOUzBfN0pTVmFsdWVFCkBAIC00MTIwNSw3
ICs0MTIwNSw3IEBAIF9fWlpON1dlYkNvcmUyNHBhcnNlWFNTUHJvdGVjdGlvbkhlYWRlckUKIF9f
WkdWWk43V2ViQ29yZTI0cGFyc2VYU1NQcm90ZWN0aW9uSGVhZGVyRVJLTjNXVEY2U3RyaW5nRVJT
MV9SalM0X0UyOGZhaWx1cmVSZWFzb25EdXBsaWNhdGVSZXBvcnQuYgogX19aWk43V2ViQ29yZTI0
cGFyc2VYU1NQcm90ZWN0aW9uSGVhZGVyRVJLTjNXVEY2U3RyaW5nRVJTMV9SalM0X0UyOWZhaWx1
cmVSZWFzb25JbnZhbGlkRGlyZWN0aXZlCiBfX1pHVlpON1dlYkNvcmUyNHBhcnNlWFNTUHJvdGVj
dGlvbkhlYWRlckVSS04zV1RGNlN0cmluZ0VSUzFfUmpTNF9FMjlmYWlsdXJlUmVhc29uSW52YWxp
ZERpcmVjdGl2ZS5iCi1fX1pON1dlYkNvcmVMMTRnbG9iYWxEYXRhYmFzZUUKK19fWk43V2ViQ29y
ZUwxNHZtYmFzZUUKIF9fWlpON1dlYkNvcmU1SW1hZ2U5bnVsbEltYWdlRXZFOW51bGxJbWFnZQog
X19aR1ZaTjdXZWJDb3JlNUltYWdlOW51bGxJbWFnZUV2RTludWxsSW1hZ2UuYgogX19aWk43V2Vi
Q29yZUwxNmVycm9yRXZlbnRTZW5kZXJFdkU2c2VuZGVyCkBAIC00MTI1Miw3ICs0MTI1Miw3IEBA
IF9fWkdWWk43V2ViQ29yZTE0SW5wdXRUeXBlTmFtZXMzdXJsRXZFNG4KIF9fWk43V2ViQ29yZTEy
X0dMT0JBTF9fTl8xTDIyaW5zdHJ1bWVudGluZ0FnZW50c1NldEUKIF9fWlpON1dlYkNvcmVMMzNj
c3NQcm9wZXJ0eUlERm9ySlNDU1NQcm9wZXJ0eU5hbWVFTjNKU0MxMlByb3BlcnR5TmFtZUVFMTdw
cm9wZXJ0eUluZm9DYWNoZQogX19aR1ZaTjdXZWJDb3JlTDMzY3NzUHJvcGVydHlJREZvckpTQ1NT
UHJvcGVydHlOYW1lRU4zSlNDMTJQcm9wZXJ0eU5hbWVFRTE3cHJvcGVydHlJbmZvQ2FjaGUuYgot
X19aWk43V2ViQ29yZTE1SlNET01XaW5kb3dCYXNlMThjb21tb25KU0dsb2JhbERhdGFFdkUxMGds
b2JhbERhdGEKK19fWlpON1dlYkNvcmUxNUpTRE9NV2luZG93QmFzZTE4Y29tbW9uVk1FdkUxMHZt
CiBfX1paTjdXZWJDb3JlMTljcmVhdGVKU0hUTUxXcmFwcGVyRVBOM0pTQzlFeGVjU3RhdGVFUE5T
XzE3SlNET01HbG9iYWxPYmplY3RFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTFIVE1MRWxlbWVudEVF
RUUzbWFwCiBfX1pHVlpON1dlYkNvcmUxOWNyZWF0ZUpTSFRNTFdyYXBwZXJFUE4zSlNDOUV4ZWNT
dGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVOM1dURjEwUGFzc1JlZlB0cklOU18xMUhUTUxF
bGVtZW50RUVFRTNtYXAuYgogX19aWk43V2ViQ29yZThibGFua1VSTEV2RTE0c3RhdGljQmxhbmtV
UkwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNHbG9i
YWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMv
cnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNv
cmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw0ICswLDAgQEAKLSNpZm5kZWYgV2ViQ29yZV9GV0RfSlNHbG9iYWxEYXRhX2gKLSNk
ZWZpbmUgV2ViQ29yZV9GV0RfSlNHbG9iYWxEYXRhX2gKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0dsb2JhbERhdGEuaD4KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGlu
Z0hlYWRlcnMvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Zvcndh
cmRpbmdIZWFkZXJzL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTQ4NjM4KQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTR2xvYmFsRGF0YS5oOjE0ODYzOCkK
KysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVk0uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfSlNHbG9iYWxEYXRh
X2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfSlNHbG9iYWxEYXRhX2gKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0dsb2JhbERhdGEuaD4KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQorKysgU291cmNl
L1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDQgKzEsNCBAQAotI2lmbmRlZiBXZWJDb3JlX0ZXRF9KU0dsb2JhbERhdGFfaAotI2RlZmlu
ZSBXZWJDb3JlX0ZXRF9KU0dsb2JhbERhdGFfaAotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
R2xvYmFsRGF0YS5oPgorI2lmbmRlZiBXZWJDb3JlX0ZXRF9WTV9oCisjZGVmaW5lIFdlYkNvcmVf
RldEX1ZNX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9WTS5oPgogI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHJldmlz
aW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZj
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExMTYzLDcgKzExMTYzLDcgQEAKICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXEZvcndhcmRpbmdIZWFkZXJzXHJ1bnRpbWVcSlNEZXN0cnVjdGlibGVP
YmplY3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEZvcndhcmRpbmdIZWFkZXJz
XHJ1bnRpbWVcSlNFeHBvcnRNYWNyb3MuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XEZvcndhcmRpbmdIZWFkZXJzXHJ1bnRpbWVcSlNGdW5jdGlvbi5oIiAvPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cRm9yd2FyZGluZ0hlYWRlcnNccnVudGltZVxKU0dsb2JhbERhdGEuaCIg
Lz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEZvcndhcmRpbmdIZWFkZXJzXHJ1bnRpbWVc
Vk0uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEZvcndhcmRpbmdIZWFkZXJzXHJ1
bnRpbWVcSlNHbG9iYWxPYmplY3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEZv
cndhcmRpbmdIZWFkZXJzXHJ1bnRpbWVcSlNQcm94eS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cRm9yd2FyZGluZ0hlYWRlcnNccnVudGltZVxKU1dpdGhTY29wZS5oIiAvPgpJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZj
eHByb2ouZmlsdGVycwkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAz
NSw3ICsxNDAzNSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxGb3J3YXJkaW5nSGVh
ZGVyc1xydW50aW1lXEpTRnVuY3Rpb24uaCI+CiAgICAgICA8RmlsdGVyPkZvcndhcmRpbmdIZWFk
ZXJzXHJ1bnRpbWU8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXEZvcndhcmRpbmdIZWFkZXJzXHJ1bnRpbWVcSlNHbG9iYWxEYXRhLmgiPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cRm9yd2FyZGluZ0hlYWRlcnNccnVudGltZVxWTS5oIj4K
ICAgICAgIDxGaWx0ZXI+Rm9yd2FyZGluZ0hlYWRlcnNccnVudGltZTwvRmlsdGVyPgogICAgIDwv
Q2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cRm9yd2FyZGluZ0hlYWRlcnNc
cnVudGltZVxKU0dsb2JhbE9iamVjdC5oIj4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0RPTU9iamVjdEhhc2hUYWJsZU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmNwcAkocmV2aXNpb24gMTQ4NjU1
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcsOSArMjcsOSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwog
CiBuYW1lc3BhY2UgV2ViQ29yZXsKIAotRE9NT2JqZWN0SGFzaFRhYmxlTWFwJiBET01PYmplY3RI
YXNoVGFibGVNYXA6Om1hcEZvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitET01PYmplY3RI
YXNoVGFibGVNYXAmIERPTU9iamVjdEhhc2hUYWJsZU1hcDo6bWFwRm9yKFZNJiB2bSkKIHsKLSAg
ICBKU0dsb2JhbERhdGE6OkNsaWVudERhdGEqIGNsaWVudERhdGEgPSBnbG9iYWxEYXRhLmNsaWVu
dERhdGE7CisgICAgVk06OkNsaWVudERhdGEqIGNsaWVudERhdGEgPSB2bS5jbGllbnREYXRhOwog
ICAgIEFTU0VSVChjbGllbnREYXRhKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZUpT
Q2xpZW50RGF0YSo+KGNsaWVudERhdGEpLT5oYXNoVGFibGVNYXA7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9ET01PYmplY3RIYXNoVGFibGVNYXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01PYmplY3RIYXNoVGFibGVNYXAuaAkocmV2
aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NT2JqZWN0SGFz
aFRhYmxlTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKLSAgICBjbGFzcyBKU0dsb2JhbERhdGE7
CisgICAgY2xhc3MgVk07CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM0LDcgKzM0LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gTWFwIGZyb20gc3RhdGljIEhhc2hUYWJsZSBpbnN0
YW5jZXMgdG8gcGVyLUdsb2JhbERhdGEgb25lcy4KIGNsYXNzIERPTU9iamVjdEhhc2hUYWJsZU1h
cCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIERPTU9iamVjdEhhc2hUYWJsZU1hcCYgbWFwRm9yKEpT
Qzo6SlNHbG9iYWxEYXRhJik7CisgICAgc3RhdGljIERPTU9iamVjdEhhc2hUYWJsZU1hcCYgbWFw
Rm9yKEpTQzo6Vk0mKTsKIAogICAgIH5ET01PYmplY3RIYXNoVGFibGVNYXAoKQogICAgIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBl
cldvcmxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTggKzMwLDE4IEBAIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRE9NV3JhcHBlcldvcmxkOjpET01X
cmFwcGVyV29ybGQoSlNDOjpKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGJvb2wgaXNOb3JtYWwp
Ci0gICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKK0RPTVdyYXBwZXJXb3JsZDo6RE9NV3Jh
cHBlcldvcmxkKEpTQzo6Vk0qIHZtLCBib29sIGlzTm9ybWFsKQorICAgIDogbV92bSh2bSkKICAg
ICAsIG1faXNOb3JtYWwoaXNOb3JtYWwpCiB7Ci0gICAgSlNHbG9iYWxEYXRhOjpDbGllbnREYXRh
KiBjbGllbnREYXRhID0gbV9nbG9iYWxEYXRhLT5jbGllbnREYXRhOworICAgIFZNOjpDbGllbnRE
YXRhKiBjbGllbnREYXRhID0gbV92bS0+Y2xpZW50RGF0YTsKICAgICBBU1NFUlQoY2xpZW50RGF0
YSk7CiAgICAgc3RhdGljX2Nhc3Q8V2ViQ29yZUpTQ2xpZW50RGF0YSo+KGNsaWVudERhdGEpLT5y
ZW1lbWJlcldvcmxkKHRoaXMpOwogfQogCiBET01XcmFwcGVyV29ybGQ6On5ET01XcmFwcGVyV29y
bGQoKQogewotICAgIEpTR2xvYmFsRGF0YTo6Q2xpZW50RGF0YSogY2xpZW50RGF0YSA9IG1fZ2xv
YmFsRGF0YS0+Y2xpZW50RGF0YTsKKyAgICBWTTo6Q2xpZW50RGF0YSogY2xpZW50RGF0YSA9IG1f
dm0tPmNsaWVudERhdGE7CiAgICAgQVNTRVJUKGNsaWVudERhdGEpOwogICAgIHN0YXRpY19jYXN0
PFdlYkNvcmVKU0NsaWVudERhdGEqPihjbGllbnREYXRhKS0+Zm9yZ2V0V29ybGQodGhpcyk7CiAK
QEAgLTYwLDkgKzYwLDkgQEAgdm9pZCBET01XcmFwcGVyV29ybGQ6OmNsZWFyV3JhcHBlcnMoKQog
ICAgICAgICAoKm1fc2NyaXB0Q29udHJvbGxlcnNXaXRoV2luZG93U2hlbGxzLmJlZ2luKCkpLT5k
ZXN0cm95V2luZG93U2hlbGwodGhpcyk7CiB9CiAKLURPTVdyYXBwZXJXb3JsZCogbm9ybWFsV29y
bGQoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitET01XcmFwcGVyV29ybGQqIG5vcm1h
bFdvcmxkKEpTQzo6Vk0mIHZtKQogewotICAgIEpTR2xvYmFsRGF0YTo6Q2xpZW50RGF0YSogY2xp
ZW50RGF0YSA9IGdsb2JhbERhdGEuY2xpZW50RGF0YTsKKyAgICBWTTo6Q2xpZW50RGF0YSogY2xp
ZW50RGF0YSA9IHZtLmNsaWVudERhdGE7CiAgICAgQVNTRVJUKGNsaWVudERhdGEpOwogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxXZWJDb3JlSlNDbGllbnREYXRhKj4oY2xpZW50RGF0YSktPm5vcm1h
bFdvcmxkKCk7CiB9CkBAIC03MCw3ICs3MCw3IEBAIERPTVdyYXBwZXJXb3JsZCogbm9ybWFsV29y
bGQoSlNDOjpKU0dsb2IKIERPTVdyYXBwZXJXb3JsZCogbWFpblRocmVhZE5vcm1hbFdvcmxkKCkK
IHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIHN0YXRpYyBET01XcmFwcGVyV29y
bGQqIGNhY2hlZE5vcm1hbFdvcmxkID0gbm9ybWFsV29ybGQoKkpTRE9NV2luZG93Ojpjb21tb25K
U0dsb2JhbERhdGEoKSk7CisgICAgc3RhdGljIERPTVdyYXBwZXJXb3JsZCogY2FjaGVkTm9ybWFs
V29ybGQgPSBub3JtYWxXb3JsZCgqSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwogICAgIHJldHVy
biBjYWNoZWROb3JtYWxXb3JsZDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvRE9NV3JhcHBlcldvcmxkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvRE9NV3JhcHBlcldvcmxkLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw5
ICszNyw5IEBAIHR5cGVkZWYgSlNDOjpXZWFrR0NNYXA8U3RyaW5nSW1wbCosIEpTQzoKIAogY2xh
c3MgRE9NV3JhcHBlcldvcmxkIDogcHVibGljIFJlZkNvdW50ZWQ8RE9NV3JhcHBlcldvcmxkPiB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiBjcmVhdGUo
SlNDOjpKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGJvb2wgaXNOb3JtYWwgPSBmYWxzZSkKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxET01XcmFwcGVyV29ybGQ+IGNyZWF0ZShKU0M6OlZNKiB2bSwg
Ym9vbCBpc05vcm1hbCA9IGZhbHNlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBET01XcmFwcGVyV29ybGQoZ2xvYmFsRGF0YSwgaXNOb3JtYWwpKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBET01XcmFwcGVyV29ybGQodm0sIGlzTm9ybWFsKSk7CiAgICAgfQogICAg
IH5ET01XcmFwcGVyV29ybGQoKTsKIApAQCAtNTYsMTggKzU2LDE4IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgaXNOb3JtYWwoKSBjb25zdCB7IHJldHVybiBtX2lzTm9ybWFsOyB9CiAKLSAgICBKU0M6
OkpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsRGF0YTsg
fQorICAgIEpTQzo6Vk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQogCiBwcm90ZWN0ZWQ6
Ci0gICAgRE9NV3JhcHBlcldvcmxkKEpTQzo6SlNHbG9iYWxEYXRhKiwgYm9vbCBpc05vcm1hbCk7
CisgICAgRE9NV3JhcHBlcldvcmxkKEpTQzo6Vk0qLCBib29sIGlzTm9ybWFsKTsKIAogcHJpdmF0
ZToKLSAgICBKU0M6OkpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworICAgIEpTQzo6Vk0qIG1f
dm07CiAgICAgSGFzaFNldDxTY3JpcHRDb250cm9sbGVyKj4gbV9zY3JpcHRDb250cm9sbGVyc1dp
dGhXaW5kb3dTaGVsbHM7CiAgICAgYm9vbCBtX2lzTm9ybWFsOwogfTsKIAotRE9NV3JhcHBlcldv
cmxkKiBub3JtYWxXb3JsZChKU0M6OkpTR2xvYmFsRGF0YSYpOworRE9NV3JhcHBlcldvcmxkKiBu
b3JtYWxXb3JsZChKU0M6OlZNJik7CiBET01XcmFwcGVyV29ybGQqIG1haW5UaHJlYWROb3JtYWxX
b3JsZCgpOwogaW5saW5lIERPTVdyYXBwZXJXb3JsZCogZGVidWdnZXJXb3JsZCgpIHsgcmV0dXJu
IG1haW5UaHJlYWROb3JtYWxXb3JsZCgpOyB9CiBpbmxpbmUgRE9NV3JhcHBlcldvcmxkKiBwbHVn
aW5Xb3JsZCgpIHsgcmV0dXJuIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpOyB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE0ODY1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJHQ0NvbnRyb2xsZXIuaCIKIAog
I2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbERhdGEu
aD4KKyNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4K
ICNpbmNsdWRlIDxoZWFwL0hlYXAuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBA
IC0zOCw4ICszOCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIHZvaWQgY29sbGVj
dCh2b2lkKikKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOwotICAgIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVh
cC5jb2xsZWN0QWxsR2FyYmFnZSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93
Ojpjb21tb25WTSgpKTsKKyAgICBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5jb2xsZWN0
QWxsR2FyYmFnZSgpOwogfQogCiBHQ0NvbnRyb2xsZXImIGdjQ29udHJvbGxlcigpCkBAIC02Myw4
ICs2Myw4IEBAIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdFNvb24oKQogICAgIC8v
IGRvd24gaW50byBXVEYgc28gdGhhdCBtb3JlIHBsYXRmb3JtcyBjYW4gdGFrZSBhZHZhbnRhZ2Ug
b2YgaXQsIHdlIHdpbGwgYmUgCiAgICAgLy8gYWJsZSB0byB1c2UgcmVwb3J0QWJhbmRvbmVkT2Jq
ZWN0R3JhcGggb24gbW9yZSBwbGF0Zm9ybXMuCiAjaWYgVVNFKENGKSB8fCBQTEFURk9STShCTEFD
S0JFUlJZKSB8fCBQTEFURk9STShRVCkKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRv
dzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwotICAgIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2Jh
bERhdGEoKS0+aGVhcC5yZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKKyAgICBKU0RPTVdpbmRvdzo6Y29t
bW9uVk0oKS0+aGVhcC5yZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpOwogI2Vsc2UKICAgICBp
ZiAoIW1fR0NUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX0dDVGltZXIuc3RhcnRPbmVTaG90
KDApOwpAQCAtODAsOSArODAsOSBAQCB2b2lkIEdDQ29udHJvbGxlcjo6Z2NUaW1lckZpcmVkKFRp
bWVyPEdDCiAKIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE5vdygpCiB7Ci0gICAg
SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKLSAg
ICBpZiAoIUpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5pc0J1c3koKSkK
LSAgICAgICAgSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmNvbGxlY3RB
bGxHYXJiYWdlKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZN
KCkpOworICAgIGlmICghSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhlYXAuaXNCdXN5KCkpCisg
ICAgICAgIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7
CiB9CiAKIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFk
Rm9yRGVidWdnaW5nKGJvb2wgd2FpdFVudGlsRG9uZSkKQEAgLTk5LDEzICs5OSwxMyBAQCB2b2lk
IEdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RPbkFsdGVyCiAKIHZvaWQgR0NDb250cm9sbGVy
OjpzZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChib29sIGVuYWJsZSkK
IHsKLSAgICBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuc2V0R2FyYmFn
ZUNvbGxlY3Rpb25UaW1lckVuYWJsZWQoZW5hYmxlKTsKKyAgICBKU0RPTVdpbmRvdzo6Y29tbW9u
Vk0oKS0+aGVhcC5zZXRHYXJiYWdlQ29sbGVjdGlvblRpbWVyRW5hYmxlZChlbmFibGUpOwogfQog
CiB2b2lkIEdDQ29udHJvbGxlcjo6ZGlzY2FyZEFsbENvbXBpbGVkQ29kZSgpCiB7Ci0gICAgSlNM
b2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKLSAgICBK
U0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmRpc2NhcmRBbGxDb2RlKCk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOworICAgIEpTRE9NV2lu
ZG93Ojpjb21tb25WTSgpLT5kaXNjYXJkQWxsQ29kZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0
aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5k
aW5nVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcg
KzUwLDcgQEAgc3RhdGljIGJvb2wgZ2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZQogICAgIH0K
ICAgICBpZiAoIW9iamVjdC5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
SWRlbnRpZmllciBpZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCksIGtleVBhdGhFbGVtZW50
LnV0ZjgoKS5kYXRhKCkpOworICAgIElkZW50aWZpZXIgaWRlbnRpZmllcigmZXhlYy0+dm0oKSwg
a2V5UGF0aEVsZW1lbnQudXRmOCgpLmRhdGEoKSk7CiAgICAgaWYgKCFhc09iamVjdChvYmplY3Qp
LT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudGlmaWVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIHJlc3VsdCA9IGFzT2JqZWN0KG9iamVjdCktPmdldChleGVjLCBpZGVudGlmaWVyKTsKQEAg
LTY3LDggKzY3LDggQEAgc3RhdGljIGJvb2wgc2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZQog
ewogICAgIGlmICghY2FuU2V0KG9iamVjdCwga2V5UGF0aEVsZW1lbnQpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgSWRlbnRpZmllciBpZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCks
IGtleVBhdGhFbGVtZW50LnV0ZjgoKS5kYXRhKCkpOwotICAgIGFzT2JqZWN0KG9iamVjdCktPnB1
dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGlkZW50aWZpZXIsIGpzVmFsdWUpOworICAgIElk
ZW50aWZpZXIgaWRlbnRpZmllcigmZXhlYy0+dm0oKSwga2V5UGF0aEVsZW1lbnQudXRmOCgpLmRh
dGEoKSk7CisgICAgYXNPYmplY3Qob2JqZWN0KS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50
aWZpZXIsIGpzVmFsdWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0zMDAsNyArMzAwLDcg
QEAgU2NyaXB0VmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZShET01SZXF1ZQogICAgIFJlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IHBycFZhbHVlOwogICAgIGlm
IChzZXJpYWxpemVkVmFsdWUpCiAgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxp
emUoZXhlYywgc2VyaWFsaXplZFZhbHVlLmdldCgpLCBOb25UaHJvd2luZyk7Ci0gICAgcmV0dXJu
IFNjcmlwdFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNOdWxsKCkpOworICAgIHJldHVybiBT
Y3JpcHRWYWx1ZShleGVjLT52bSgpLCBqc051bGwoKSk7CiB9CiAKIFNjcmlwdFZhbHVlIGRlc2Vy
aWFsaXplSURCVmFsdWVCdWZmZXIoRE9NUmVxdWVzdFN0YXRlKiByZXF1ZXN0U3RhdGUsIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBwcnBCdWZmZXIpCkBAIC0zMTQsMTMgKzMxNCwxMyBAQCBTY3Jp
cHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlQnVmZmVyKERPCiAgICAgICAgIFJlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlRnJvbVdpcmVCeXRlcyh2YWx1ZSk7CiAgICAgICAgIHJldHVybiBTY3JpcHRWYWx1
ZTo6ZGVzZXJpYWxpemUoZXhlYywgc2VyaWFsaXplZFZhbHVlLmdldCgpLCBOb25UaHJvd2luZyk7
CiAgICAgfQotICAgIHJldHVybiBTY3JpcHRWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIGpzTnVs
bCgpKTsKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUoZXhlYy0+dm0oKSwganNOdWxsKCkpOwogfQog
CiBTY3JpcHRWYWx1ZSBpZGJLZXlUb1NjcmlwdFZhbHVlKERPTVJlcXVlc3RTdGF0ZSogcmVxdWVz
dFN0YXRlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5KQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IHJlcXVlc3RTdGF0ZS0+ZXhlYygpOwotICAgIHJldHVybiBTY3JpcHRWYWx1ZShleGVjLT5nbG9i
YWxEYXRhKCksIGlkYktleVRvSlNWYWx1ZShleGVjLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBrZXkuZ2V0KCkpKTsKKyAgICByZXR1cm4g
U2NyaXB0VmFsdWUoZXhlYy0+dm0oKSwgaWRiS2V5VG9KU1ZhbHVlKGV4ZWMsIGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIGtleS5nZXQoKSkp
OwogfQogCiBQYXNzUmVmUHRyPElEQktleT4gc2NyaXB0VmFsdWVUb0lEQktleShET01SZXF1ZXN0
U3RhdGUqIHJlcXVlc3RTdGF0ZSwgY29uc3QgU2NyaXB0VmFsdWUmIHNjcmlwdFZhbHVlKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5oCShyZXZpc2lv
biAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBkZWxldGVEYXRhKHZvaWQqKTsKIAogICAgIEpTQ2FsbGJhY2tEYXRhKEpTQzo6SlNPYmplY3Qq
IGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgICAgICA6IG1f
Y2FsbGJhY2soZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGNhbGxiYWNrKQotICAgICAgICAs
IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3Qp
CisgICAgICAgIDogbV9jYWxsYmFjayhnbG9iYWxPYmplY3QtPnZtKCksIGNhbGxiYWNrKQorICAg
ICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0KQog
I2lmbmRlZiBOREVCVUcKICAgICAgICAgLCBtX3RocmVhZChjdXJyZW50VGhyZWFkKCkpCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50
RXJyb3JDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAkocmV2aXNpb24gMTQ4NjU1
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBib29sIEpTU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjazo6aGFuZGxlCiAKICAgICBSZWZQdHI8SlNTUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOworICAgIEpTQzo6SlNM
b2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+dm0oKSk7CiAKICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAJKHJldmlzaW9uIDE0
ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29s
dmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsOCArNTUsOCBAQCBQYXNzUmVmUHRyPEpTQ3Vz
dG9tWFBhdGhOU1Jlc29sdmVyPiBKU0N1CiB9CiAKIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpK
U0N1c3RvbVhQYXRoTlNSZXNvbHZlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjdXN0b21S
ZXNvbHZlciwgSlNET01XaW5kb3cqIGdsb2JhbE9iamVjdCkKLSAgICA6IG1fY3VzdG9tUmVzb2x2
ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBjdXN0b21SZXNvbHZlcikKLSAgICAsIG1fZ2xvYmFsT2Jq
ZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0KQorICAgIDogbV9jdXN0b21SZXNv
bHZlcihleGVjLT52bSgpLCBjdXN0b21SZXNvbHZlcikKKyAgICAsIG1fZ2xvYmFsT2JqZWN0KGV4
ZWMtPnZtKCksIGdsb2JhbE9iamVjdCkKIHsKIH0KIApAQCAtNjgsNyArNjgsNyBAQCBTdHJpbmcg
SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hCiB7CiAgICAgQVNTRVJUKG1fY3VzdG9t
UmVzb2x2ZXIpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNl
Ojpjb21tb25WTSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCk7CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw5ICs0Niw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEFTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKERP
TUNvbnN0cnVjdG9yT2JqZWN0KTsKIEFTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKERPTUNv
bnN0cnVjdG9yV2l0aERvY3VtZW50KTsKIAotY29uc3QgSlNDOjpIYXNoVGFibGUqIGdldEhhc2hU
YWJsZUZvckdsb2JhbERhdGEoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBKU0M6Okhh
c2hUYWJsZSogc3RhdGljVGFibGUpCitjb25zdCBKU0M6Okhhc2hUYWJsZSogZ2V0SGFzaFRhYmxl
Rm9yR2xvYmFsRGF0YShWTSYgdm0sIGNvbnN0IEpTQzo6SGFzaFRhYmxlKiBzdGF0aWNUYWJsZSkK
IHsKLSAgICByZXR1cm4gRE9NT2JqZWN0SGFzaFRhYmxlTWFwOjptYXBGb3IoZ2xvYmFsRGF0YSku
Z2V0KHN0YXRpY1RhYmxlKTsKKyAgICByZXR1cm4gRE9NT2JqZWN0SGFzaFRhYmxlTWFwOjptYXBG
b3Iodm0pLmdldChzdGF0aWNUYWJsZSk7CiB9CiAKIEpTVmFsdWUganNTdHJpbmdPck51bGwoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCkBAIC0xNTAsNyArMTUwLDcgQEAgdm9pZCBy
ZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKUwogICAgIGludCBsaW5lTnVtYmVyID0g
MDsKICAgICBTdHJpbmcgZXhjZXB0aW9uU291cmNlVVJMOwogCi0gICAgUmVmQ291bnRlZEFycmF5
PFN0YWNrRnJhbWU+IHN0YWNrVHJhY2UgPSBleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uU3Rh
Y2s7CisgICAgUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+IHN0YWNrVHJhY2UgPSBleGVjLT52
bSgpLmV4Y2VwdGlvblN0YWNrOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgZXhl
Yy0+Y2xlYXJTdXBwbGVtZW50YXJ5RXhjZXB0aW9uSW5mbygpOwogCkBAIC0yNjgsNyArMjY4LDcg
QEAgU3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2JhbAogewogICAgIEpTRE9N
U3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmVzKCk7CiAg
ICAgQVNTRVJUKCFzdHJ1Y3R1cmVzLmNvbnRhaW5zKGNsYXNzSW5mbykpOwotICAgIHJldHVybiBz
dHJ1Y3R1cmVzLnNldChjbGFzc0luZm8sIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KGdsb2JhbE9i
amVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkpLml0ZXJhdG9yLT52
YWx1ZS5nZXQoKTsKKyAgICByZXR1cm4gc3RydWN0dXJlcy5zZXQoY2xhc3NJbmZvLCBXcml0ZUJh
cnJpZXI8U3RydWN0dXJlPihnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlKSkuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCiBzdGF0aWMgY29uc3QgaW50MzJfdCBr
TWF4SW50MzIgPSAweDdmZmZmZmZmOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw5ICs2Myw5IEBAIGNs
YXNzIERPTVN0cmluZ0xpc3Q7CiAgICAgY2xhc3MgRE9NQ29uc3RydWN0b3JPYmplY3QgOiBwdWJs
aWMgSlNET01XcmFwcGVyIHsKICAgICAgICAgdHlwZWRlZiBKU0RPTVdyYXBwZXIgQmFzZTsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KIAogICAgIHByb3Rl
Y3RlZDoKQEAgLTk0LDcgKzk0LDcgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKIAogICAgICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xv
YmFsRGF0YSgpKTsKKyAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVj
dC0+dm0oKSk7CiAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPmlzRG9jdW1lbnQoKSk7CiAgICAgICAgIH0KICAgICB9OwpAQCAtMTE0LDcg
KzExNCw3IEBAIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiAgICAgewogICAgICAgICBpZiAoSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdldENhY2hlZERPTVN0cnVjdHVyZShnbG9iYWxPYmplY3Qs
ICZXcmFwcGVyQ2xhc3M6OnNfaW5mbykpCiAgICAgICAgICAgICByZXR1cm4gc3RydWN0dXJlOwot
ICAgICAgICByZXR1cm4gY2FjaGVET01TdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xh
c3M6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgV3Jh
cHBlckNsYXNzOjpjcmVhdGVQcm90b3R5cGUoZXhlYywgZ2xvYmFsT2JqZWN0KSksICZXcmFwcGVy
Q2xhc3M6OnNfaW5mbyk7CisgICAgICAgIHJldHVybiBjYWNoZURPTVN0cnVjdHVyZShnbG9iYWxP
YmplY3QsIFdyYXBwZXJDbGFzczo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIGdsb2JhbE9i
amVjdCwgV3JhcHBlckNsYXNzOjpjcmVhdGVQcm90b3R5cGUoZXhlYywgZ2xvYmFsT2JqZWN0KSks
ICZXcmFwcGVyQ2xhc3M6OnNfaW5mbyk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgV3Jh
cHBlckNsYXNzPiBpbmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1
cmUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xNDMsNyArMTQzLDcgQEAgY2xhc3MgRE9NU3Ry
aW5nTGlzdDsKICAgICB7CiAgICAgICAgIGlmICghd29ybGQtPmlzTm9ybWFsKCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRvbU9iamVjdC0+c2V0V3JhcHBlcigqd29ybGQt
Pmdsb2JhbERhdGEoKSwgd3JhcHBlciwgd3JhcHBlck93bmVyLCBjb250ZXh0KTsKKyAgICAgICAg
ZG9tT2JqZWN0LT5zZXRXcmFwcGVyKCp3b3JsZC0+dm0oKSwgd3JhcHBlciwgd3JhcHBlck93bmVy
LCBjb250ZXh0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yMTgsNyArMjE4
LDcgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKICAgICAgICAgcmV0dXJuIGluZGV4ID49IGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA/IEpTQzo6SlNWYWx1ZSgpIDogZXhlYy0+YXJndW1lbnQoaW5kZXgp
OwogICAgIH0KIAotICAgIGNvbnN0IEpTQzo6SGFzaFRhYmxlKiBnZXRIYXNoVGFibGVGb3JHbG9i
YWxEYXRhKEpTQzo6SlNHbG9iYWxEYXRhJiwgY29uc3QgSlNDOjpIYXNoVGFibGUqIHN0YXRpY1Rh
YmxlKTsKKyAgICBjb25zdCBKU0M6Okhhc2hUYWJsZSogZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0
YShKU0M6OlZNJiwgY29uc3QgSlNDOjpIYXNoVGFibGUqIHN0YXRpY1RhYmxlKTsKIAogICAgIHZv
aWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlv
biwgQ2FjaGVkU2NyaXB0KiA9IDApOwogICAgIHZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihK
U0M6OkV4ZWNTdGF0ZSopOwpAQCAtNDg2LDggKzQ4Niw4IEBAIGNsYXNzIERPTVN0cmluZ0xpc3Q7
CiAgICAgICAgIGlmIChzdHJpbmdJbXBsLT5sZW5ndGgoKSA9PSAxKSB7CiAgICAgICAgICAgICBV
Q2hhciBzaW5nbGVDaGFyYWN0ZXIgPSAoKnN0cmluZ0ltcGwpWzB1XTsKICAgICAgICAgICAgIGlm
IChzaW5nbGVDaGFyYWN0ZXIgPD0gSlNDOjptYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpIHsKLSAg
ICAgICAgICAgICAgICBKU0M6OkpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9i
YWxEYXRhKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5n
cy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZ2xvYmFsRGF0YSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4oc2luZ2xlQ2hhcmFjdGVyKSk7CisgICAgICAgICAgICAgICAgSlNDOjpWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy5zaW5n
bGVDaGFyYWN0ZXJTdHJpbmcodm0sIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHNpbmdsZUNo
YXJhY3RlcikpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDE0
ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNvbnN0IENsYXNzSW5mbyBKU0RPTUdsb2JhbE9iamVjdDo6c19pbmZvID0geyAiRE9NR2xvYmFs
T2JqZWN0IiwgJkpTR2xvYmFsT2JqZWN0OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNET01HbG9iYWxPYmplY3QpIH07CiAKLUpTRE9NR2xvYmFsT2JqZWN0OjpKU0RPTUdsb2Jh
bE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQ
YXNzUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gd29ybGQsIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhv
ZFRhYmxlKiBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSkKLSAgICA6IEpTR2xvYmFsT2JqZWN0KGds
b2JhbERhdGEsIHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCitKU0RPTUdsb2Jh
bE9iamVjdDo6SlNET01HbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
UGFzc1JlZlB0cjxET01XcmFwcGVyV29ybGQ+IHdvcmxkLCBjb25zdCBHbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSogZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCisgICAgOiBKU0dsb2JhbE9iamVjdCh2
bSwgc3RydWN0dXJlLCBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSkKICAgICAsIG1fY3VycmVudEV2
ZW50KDApCiAgICAgLCBtX3dvcmxkKHdvcmxkKQogewpAQCAtNTQsMTUgKzU0LDE1IEBAIHZvaWQg
SlNET01HbG9iYWxPYmplY3Q6OmRlc3Ryb3koSlNDZWxsKiAKICAgICBzdGF0aWNfY2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGNlbGwpLT5KU0RPTUdsb2JhbE9iamVjdDo6fkpTRE9NR2xvYmFsT2Jq
ZWN0KCk7CiB9CiAKLXZvaWQgSlNET01HbG9iYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgSlNET01HbG9iYWxPYmplY3Q6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8p
KTsKIH0KIAotdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU09iamVjdCogdGhpc1ZhbHVlKQordm9pZCBKU0RPTUdsb2JhbE9i
amVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU09iamVjdCogdGhpc1ZhbHVlKQogewotICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIHRoaXNWYWx1ZSk7CisgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0sIHRoaXNWYWx1ZSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2lu
Zm8pKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUds
b2JhbE9iamVjdC5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMCArNDgsMTAg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByb3RlY3RlZDoKICAgICAgICAgc3RydWN0IEpT
RE9NR2xvYmFsT2JqZWN0RGF0YTsKIAotICAgICAgICBKU0RPTUdsb2JhbE9iamVjdChKU0M6OkpT
R2xvYmFsRGF0YSYsIEpTQzo6U3RydWN0dXJlKiwgUGFzc1JlZlB0cjxET01XcmFwcGVyV29ybGQ+
LCBjb25zdCBKU0M6Okdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiA9IDApOworICAgICAgICBKU0RP
TUdsb2JhbE9iamVjdChKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPERPTVdy
YXBwZXJXb3JsZD4sIGNvbnN0IEpTQzo6R2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqID0gMCk7CiAg
ICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKLSAgICAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OkpTR2xvYmFsRGF0YSYpOwotICAgICAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJiwgSlNDOjpKU09iamVjdCopOworICAgICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKKyAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJiwgSlNDOjpKU09iamVjdCopOwogCiAgICAgcHVibGljOgogICAgICAgICBKU0RPTVN0
cnVjdHVyZU1hcCYgc3RydWN0dXJlcygpIHsgcmV0dXJuIG1fc3RydWN0dXJlczsgfQpAQCAtNzEs
OSArNzEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgc3RhdGljIFdFQktJVF9F
WFBPUlREQVRBIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAotICAgICAgICBzdGF0aWMg
SlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIEpTQzo6U3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGds
b2JhbERhdGEsIDAsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Okdsb2JhbE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgMCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6R2xv
YmFsT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogCiAg
ICAgcHJvdGVjdGVkOgpAQCAtODksMTAgKzg5LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICB7CiAgICAgICAgIGlmIChKU0M6OkpTT2JqZWN0KiBjb25zdHJ1Y3RvciA9IGNvbnN0X2Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLT5jb25zdHJ1Y3RvcnMoKS5nZXQoJkNv
bnN0cnVjdG9yQ2xhc3M6OnNfaW5mbykuZ2V0KCkpCiAgICAgICAgICAgICByZXR1cm4gY29uc3Ry
dWN0b3I7Ci0gICAgICAgIEpTQzo6SlNPYmplY3QqIGNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3JD
bGFzczo6Y3JlYXRlKGV4ZWMsIENvbnN0cnVjdG9yQ2xhc3M6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT5nbG9iYWxEYXRhKCksIGNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmpl
Y3QpLCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSwgY29uc3RfY2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworICAgICAgICBKU0M6OkpTT2JqZWN0KiBjb25z
dHJ1Y3RvciA9IENvbnN0cnVjdG9yQ2xhc3M6OmNyZWF0ZShleGVjLCBDb25zdHJ1Y3RvckNsYXNz
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGdsb2JhbE9iamVjdCksIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpLCBjb25z
dF9jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIEFTU0VS
VCghY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCktPmNvbnN0cnVj
dG9ycygpLmNvbnRhaW5zKCZDb25zdHJ1Y3RvckNsYXNzOjpzX2luZm8pKTsKICAgICAgICAgSlND
OjpXcml0ZUJhcnJpZXI8SlNDOjpKU09iamVjdD4gdGVtcDsKLSAgICAgICAgY29uc3RfY2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCktPmNvbnN0cnVjdG9ycygpLmFkZCgmQ29u
c3RydWN0b3JDbGFzczo6c19pbmZvLCB0ZW1wKS5pdGVyYXRvci0+dmFsdWUuc2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvcik7CisgICAgICAgIGNvbnN0X2Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLT5jb25zdHJ1Y3RvcnMoKS5hZGQo
JkNvbnN0cnVjdG9yQ2xhc3M6OnNfaW5mbywgdGVtcCkuaXRlcmF0b3ItPnZhbHVlLnNldChleGVj
LT52bSgpLCBnbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yKTsKICAgICAgICAgcmV0dXJuIGNvbnN0
cnVjdG9yOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0Jhc2UuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywxNiAr
NTMsMTYgQEAgY29uc3QgQ2xhc3NJbmZvIEpTRE9NV2luZG93QmFzZTo6c19pbmZvIAogCiBjb25z
dCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSBKU0RPTVdpbmRvd0Jhc2U6OnNfZ2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUgPSB7ICZzaG91bGRBbGxvd0FjY2Vzc0Zyb20sICZzdXBwb3J0c1Byb2ZpbGlu
ZywgJnN1cHBvcnRzUmljaFNvdXJjZUluZm8sICZzaG91bGRJbnRlcnJ1cHRTY3JpcHQsICZqYXZh
U2NyaXB0RXhwZXJpbWVudHNFbmFibGVkIH07CiAKLUpTRE9NV2luZG93QmFzZTo6SlNET01XaW5k
b3dCYXNlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBh
c3NSZWZQdHI8RE9NV2luZG93PiB3aW5kb3csIEpTRE9NV2luZG93U2hlbGwqIHNoZWxsKQotICAg
IDogSlNET01HbG9iYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBzaGVsbC0+d29ybGQo
KSwgJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCitKU0RPTVdpbmRvd0Jhc2U6OkpTRE9NV2lu
ZG93QmFzZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPERPTVdpbmRv
dz4gd2luZG93LCBKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCkKKyAgICA6IEpTRE9NR2xvYmFsT2Jq
ZWN0KHZtLCBzdHJ1Y3R1cmUsIHNoZWxsLT53b3JsZCgpLCAmc19nbG9iYWxPYmplY3RNZXRob2RU
YWJsZSkKICAgICAsIG1faW1wbCh3aW5kb3cpCiAgICAgLCBtX3NoZWxsKHNoZWxsKQogewogfQog
Ci12b2lkIEpTRE9NV2luZG93QmFzZTo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCkKK3ZvaWQgSlNET01XaW5kb3dCYXNlOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRE9NV2luZG93U2hlbGwqIHNoZWxsKQogewotICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIHNoZWxsKTsKKyAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSwgc2hlbGwpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiAKICAg
ICBHbG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFsc1tdID0gewpAQCAtODIsNyArODIsNyBA
QCB2b2lkIEpTRE9NV2luZG93QmFzZTo6dXBkYXRlRG9jdW1lbnQoKQogewogICAgIEFTU0VSVCht
X2ltcGwtPmRvY3VtZW50KCkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbEV4ZWMoKTsK
LSAgICBzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKHRoaXMsIGV4ZWMtPmdsb2JhbERhdGEo
KSwgSWRlbnRpZmllcihleGVjLCAiZG9jdW1lbnQiKSwgdG9KUyhleGVjLCB0aGlzLCBtX2ltcGwt
PmRvY3VtZW50KCkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHN5bWJvbFRhYmxlUHV0
V2l0aEF0dHJpYnV0ZXModGhpcywgZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiZG9jdW1l
bnQiKSwgdG9KUyhleGVjLCB0aGlzLCBtX2ltcGwtPmRvY3VtZW50KCkpLCBEb250RGVsZXRlIHwg
UmVhZE9ubHkpOwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBKU0RPTVdpbmRvd0Jhc2U6
OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApAQCAtMTc3LDIxICsxNzcsMjEgQEAgSlNE
T01XaW5kb3dTaGVsbCogSlNET01XaW5kb3dCYXNlOjpzaGVsbAogICAgIHJldHVybiBtX3NoZWxs
OwogfQogCi1KU0dsb2JhbERhdGEqIEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkKK1ZNKiBKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogCi0gICAgc3RhdGljIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IDA7Ci0g
ICAgaWYgKCFnbG9iYWxEYXRhKSB7CisgICAgc3RhdGljIFZNKiB2bSA9IDA7CisgICAgaWYgKCF2
bSkgewogICAgICAgICBTY3JpcHRDb250cm9sbGVyOjppbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0g
ICAgICAgIGdsb2JhbERhdGEgPSBKU0dsb2JhbERhdGE6OmNyZWF0ZUxlYWtlZChMYXJnZUhlYXAp
LmxlYWtSZWYoKTsKKyAgICAgICAgdm0gPSBWTTo6Y3JlYXRlTGVha2VkKExhcmdlSGVhcCkubGVh
a1JlZigpOwogI2lmbmRlZiBOREVCVUcKLSAgICAgICAgZ2xvYmFsRGF0YS0+ZXhjbHVzaXZlVGhy
ZWFkID0gY3VycmVudFRocmVhZCgpOworICAgICAgICB2bS0+ZXhjbHVzaXZlVGhyZWFkID0gY3Vy
cmVudFRocmVhZCgpOwogI2VuZGlmCi0gICAgICAgIGluaXROb3JtYWxXb3JsZENsaWVudERhdGEo
Z2xvYmFsRGF0YSk7CisgICAgICAgIGluaXROb3JtYWxXb3JsZENsaWVudERhdGEodm0pOwogICAg
IH0KIAotICAgIHJldHVybiBnbG9iYWxEYXRhOworICAgIHJldHVybiB2bTsKIH0KIAogLy8gSlNE
T01HbG9iYWxPYmplY3QqIGlzIGlnbm9yZWQsIGFjY2Vzc2luZyBhIHdpbmRvdyBpbiBhbnkgY29u
dGV4dCB3aWxsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0Jhc2UuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEpTRE9NV2luZG93QmFzZSA6IHB1YmxpYyBKU0RPTUds
b2JhbE9iamVjdCB7CiAgICAgICAgIHR5cGVkZWYgSlNET01HbG9iYWxPYmplY3QgQmFzZTsKICAg
ICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEpTRE9NV2luZG93QmFzZShKU0M6OkpTR2xvYmFsRGF0YSYs
IEpTQzo6U3RydWN0dXJlKiwgUGFzc1JlZlB0cjxET01XaW5kb3c+LCBKU0RPTVdpbmRvd1NoZWxs
Kik7Ci0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpKU0dsb2JhbERhdGEmLCBKU0RP
TVdpbmRvd1NoZWxsKik7CisgICAgICAgIEpTRE9NV2luZG93QmFzZShKU0M6OlZNJiwgSlNDOjpT
dHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPERPTVdpbmRvdz4sIEpTRE9NV2luZG93U2hlbGwqKTsKKyAg
ICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01XaW5kb3dTaGVsbCopOwog
CiAgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKQEAgLTUzLDkgKzUzLDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNz
SW5mbyBzX2luZm87CiAKLSAgICAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCAwLCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpHbG9iYWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworICAgICAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIDAsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Okdsb2JhbE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpH
bG9iYWxPYmplY3RNZXRob2RUYWJsZSBzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlOwpAQCAtNjgs
NyArNjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgSlNET01XaW5kb3dTaGVs
bCogc2hlbGwoKSBjb25zdDsKIAotICAgICAgICBzdGF0aWMgSlNDOjpKU0dsb2JhbERhdGEqIGNv
bW1vbkpTR2xvYmFsRGF0YSgpOworICAgICAgICBzdGF0aWMgSlNDOjpWTSogY29tbW9uVk0oKTsK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxET01XaW5kb3c+IG1faW1wbDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJ
KHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk2LDcgKzQ5Niw3IEBAIHZvaWQgSlNE
T01XaW5kb3c6OnNldExvY2F0aW9uKEV4ZWNTdGF0ZSoKICAgICAgICAgaWYgKFNldHRpbmdzKiBz
ZXR0aW5ncyA9IGFjdGl2ZUZyYW1lLT5zZXR0aW5ncygpKSB7CiAgICAgICAgICAgICBpZiAoc2V0
dGluZ3MtPnVzZXNEYXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKCkgJiYgIWFjdGl2
ZUZyYW1lLT50cmVlKCktPnBhcmVudCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKEJpbmRpbmdT
ZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVjLCBpbXBsKCkpKQotICAg
ICAgICAgICAgICAgICAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVy
KGV4ZWMsICJsb2NhdGlvbiIpLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHB1dERpcmVj
dChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJsb2NhdGlvbiIpLCB2YWx1ZSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01ODcsMTQg
KzU4NywxNCBAQCBpbmxpbmUgdm9pZCBEaWFsb2dIYW5kbGVyOjpkaWFsb2dDcmVhdGVkCiAgICAg
bV9mcmFtZSA9IGRpYWxvZy0+ZnJhbWUoKTsKICAgICAvLyBGSVhNRTogVGhpcyBsb29rcyBsaWtl
IGEgbGVhayBiZXR3ZWVuIHRoZSBub3JtYWwgd29ybGQgYW5kIGFuIGlzb2xhdGVkCiAgICAgLy8g
ICAgICAgIHdvcmxkIGlmIGRpYWxvZ0FyZ3VtZW50cyBjb21lcyBmcm9tIGFuIGlzb2xhdGVkIHdv
cmxkLgotICAgIEpTRE9NV2luZG93KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NV2luZG93KG1fZnJh
bWUuZ2V0KCksIG5vcm1hbFdvcmxkKG1fZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgSlNET01X
aW5kb3cqIGdsb2JhbE9iamVjdCA9IHRvSlNET01XaW5kb3cobV9mcmFtZS5nZXQoKSwgbm9ybWFs
V29ybGQobV9leGVjLT52bSgpKSk7CiAgICAgaWYgKEpTVmFsdWUgZGlhbG9nQXJndW1lbnRzID0g
bV9leGVjLT5hcmd1bWVudCgxKSkKLSAgICAgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3QobV9l
eGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIobV9leGVjLCAiZGlhbG9nQXJndW1lbnRzIiks
IGRpYWxvZ0FyZ3VtZW50cyk7CisgICAgICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KG1fZXhl
Yy0+dm0oKSwgSWRlbnRpZmllcihtX2V4ZWMsICJkaWFsb2dBcmd1bWVudHMiKSwgZGlhbG9nQXJn
dW1lbnRzKTsKIH0KIAogaW5saW5lIEpTVmFsdWUgRGlhbG9nSGFuZGxlcjo6cmV0dXJuVmFsdWUo
KSBjb25zdAogewotICAgIEpTRE9NV2luZG93KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NV2luZG93
KG1fZnJhbWUuZ2V0KCksIG5vcm1hbFdvcmxkKG1fZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAg
SlNET01XaW5kb3cqIGdsb2JhbE9iamVjdCA9IHRvSlNET01XaW5kb3cobV9mcmFtZS5nZXQoKSwg
bm9ybWFsV29ybGQobV9leGVjLT52bSgpKSk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIElkZW50aWZpZXIgaWRlbnRpZmllcihtX2V4
ZWMsICJyZXR1cm5WYWx1ZSIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dTaGVsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XaW5kb3dTaGVsbC5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NCwxNCArNDQsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY29uc3QgQ2xhc3NJbmZvIEpTRE9N
V2luZG93U2hlbGw6OnNfaW5mbyA9IHsgIkpTRE9NV2luZG93U2hlbGwiLCAmQmFzZTo6c19pbmZv
LCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRE9NV2luZG93U2hlbGwpIH07CiAKIEpTRE9N
V2luZG93U2hlbGw6OkpTRE9NV2luZG93U2hlbGwoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIERPTVdy
YXBwZXJXb3JsZCogd29ybGQpCi0gICAgOiBCYXNlKCp3b3JsZC0+Z2xvYmFsRGF0YSgpLCBzdHJ1
Y3R1cmUpCisgICAgOiBCYXNlKCp3b3JsZC0+dm0oKSwgc3RydWN0dXJlKQogICAgICwgbV93b3Js
ZCh3b3JsZCkKIHsKIH0KIAotdm9pZCBKU0RPTVdpbmRvd1NoZWxsOjpmaW5pc2hDcmVhdGlvbihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8RE9NV2luZG93PiB3aW5kb3cpCit2
b2lkIEpTRE9NV2luZG93U2hlbGw6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUGFzc1JlZlB0cjxE
T01XaW5kb3c+IHdpbmRvdykKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRh
KTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZz
X2luZm8pKTsKICAgICBzZXRXaW5kb3cod2luZG93KTsKIH0KQEAgLTYxLDExICs2MSwxMSBAQCB2
b2lkIEpTRE9NV2luZG93U2hlbGw6OmRlc3Ryb3koSlNDZWxsKiBjCiAgICAgc3RhdGljX2Nhc3Q8
SlNET01XaW5kb3dTaGVsbCo+KGNlbGwpLT5KU0RPTVdpbmRvd1NoZWxsOjp+SlNET01XaW5kb3dT
aGVsbCgpOwogfQogCi12b2lkIEpTRE9NV2luZG93U2hlbGw6OnNldFdpbmRvdyhKU0M6OkpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNET01XaW5kb3cqIHdpbmRvdykKK3ZvaWQgSlNET01XaW5k
b3dTaGVsbDo6c2V0V2luZG93KEpTQzo6Vk0mIHZtLCBKU0RPTVdpbmRvdyogd2luZG93KQogewog
ICAgIEFTU0VSVF9BUkcod2luZG93LCB3aW5kb3cpOwotICAgIHNldFRhcmdldChnbG9iYWxEYXRh
LCB3aW5kb3cpOwotICAgIHN0cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3QoKkpTRE9NV2luZG93
Ojpjb21tb25KU0dsb2JhbERhdGEoKSwgd2luZG93KTsKKyAgICBzZXRUYXJnZXQodm0sIHdpbmRv
dyk7CisgICAgc3RydWN0dXJlKCktPnNldEdsb2JhbE9iamVjdCgqSlNET01XaW5kb3c6OmNvbW1v
blZNKCksIHdpbmRvdyk7CiAgICAgZ2NDb250cm9sbGVyKCkuZ2FyYmFnZUNvbGxlY3RTb29uKCk7
CiB9CiAKQEAgLTc3LDEzICs3NywxMyBAQCB2b2lkIEpTRE9NV2luZG93U2hlbGw6OnNldFdpbmRv
dyhQYXNzUmVmCiAgICAgLy8gRXhwbGljaXRseSBwcm90ZWN0IHRoZSBnbG9iYWwgb2JqZWN0J3Mg
cHJvdG90eXBlIHNvIGl0IGlzbid0IGNvbGxlY3RlZAogICAgIC8vIHdoZW4gd2UgYWxsb2NhdGUg
dGhlIGdsb2JhbCBvYmplY3QuIChPbmNlIHRoZSBnbG9iYWwgb2JqZWN0IGlzIGZ1bGx5CiAgICAg
Ly8gY29uc3RydWN0ZWQsIGl0IGNhbiBtYXJrIGl0cyBvd24gcHJvdG90eXBlLikKLSAgICBTdHJ1
Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSA9IEpTRE9NV2luZG93UHJvdG90eXBlOjpjcmVhdGVT
dHJ1Y3R1cmUoKkpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSwgMCwganNOdWxsKCkp
OwotICAgIFN0cm9uZzxKU0RPTVdpbmRvd1Byb3RvdHlwZT4gcHJvdG90eXBlKCpKU0RPTVdpbmRv
dzo6Y29tbW9uSlNHbG9iYWxEYXRhKCksIEpTRE9NV2luZG93UHJvdG90eXBlOjpjcmVhdGUoKkpT
RE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSwgMCwgcHJvdG90eXBlU3RydWN0dXJlKSk7
CisgICAgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUgPSBKU0RPTVdpbmRvd1Byb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKCpKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSwgMCwganNOdWxsKCkp
OworICAgIFN0cm9uZzxKU0RPTVdpbmRvd1Byb3RvdHlwZT4gcHJvdG90eXBlKCpKU0RPTVdpbmRv
dzo6Y29tbW9uVk0oKSwgSlNET01XaW5kb3dQcm90b3R5cGU6OmNyZWF0ZSgqSlNET01XaW5kb3c6
OmNvbW1vblZNKCksIDAsIHByb3RvdHlwZVN0cnVjdHVyZSkpOwogCi0gICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBKU0RPTVdpbmRvdzo6Y3JlYXRlU3RydWN0dXJlKCpKU0RPTVdpbmRvdzo6Y29t
bW9uSlNHbG9iYWxEYXRhKCksIDAsIHByb3RvdHlwZS5nZXQoKSk7Ci0gICAgSlNET01XaW5kb3cq
IGpzRE9NV2luZG93ID0gSlNET01XaW5kb3c6OmNyZWF0ZSgqSlNET01XaW5kb3c6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIGRvbVdpbmRvdywgdGhpcyk7Ci0gICAgcHJvdG90eXBl
LT5zdHJ1Y3R1cmUoKS0+c2V0R2xvYmFsT2JqZWN0KCpKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9i
YWxEYXRhKCksIGpzRE9NV2luZG93KTsKLSAgICBzZXRXaW5kb3coKkpTRE9NV2luZG93Ojpjb21t
b25KU0dsb2JhbERhdGEoKSwganNET01XaW5kb3cpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gSlNET01XaW5kb3c6OmNyZWF0ZVN0cnVjdHVyZSgqSlNET01XaW5kb3c6OmNvbW1vblZNKCks
IDAsIHByb3RvdHlwZS5nZXQoKSk7CisgICAgSlNET01XaW5kb3cqIGpzRE9NV2luZG93ID0gSlNE
T01XaW5kb3c6OmNyZWF0ZSgqSlNET01XaW5kb3c6OmNvbW1vblZNKCksIHN0cnVjdHVyZSwgZG9t
V2luZG93LCB0aGlzKTsKKyAgICBwcm90b3R5cGUtPnN0cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmpl
Y3QoKkpTRE9NV2luZG93Ojpjb21tb25WTSgpLCBqc0RPTVdpbmRvdyk7CisgICAgc2V0V2luZG93
KCpKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSwganNET01XaW5kb3cpOwogICAgIEFTU0VSVChqc0RP
TVdpbmRvdy0+Z2xvYmFsT2JqZWN0KCkgPT0ganNET01XaW5kb3cpOwogICAgIEFTU0VSVChwcm90
b3R5cGUtPmdsb2JhbE9iamVjdCgpID09IGpzRE9NV2luZG93KTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmgJKHJldmlzaW9uIDE0ODY1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaAkod29y
a2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICAgICAgSlNET01XaW5kb3cqIHdp
bmRvdygpIGNvbnN0IHsgcmV0dXJuIEpTQzo6anNDYXN0PEpTRE9NV2luZG93Kj4odGFyZ2V0KCkp
OyB9Ci0gICAgICAgIHZvaWQgc2V0V2luZG93KEpTQzo6SlNHbG9iYWxEYXRhJiwgSlNET01XaW5k
b3cqKTsKKyAgICAgICAgdm9pZCBzZXRXaW5kb3coSlNDOjpWTSYsIEpTRE9NV2luZG93Kik7CiAg
ICAgICAgIHZvaWQgc2V0V2luZG93KFBhc3NSZWZQdHI8RE9NV2luZG93Pik7CiAKICAgICAgICAg
c3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKQEAgLTUzLDIyICs1MywyMiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgc3RhdGljIEpTRE9NV2luZG93U2hlbGwqIGNy
ZWF0ZShQYXNzUmVmUHRyPERPTVdpbmRvdz4gd2luZG93LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlLCBET01XcmFwcGVyV29ybGQqIHdvcmxkKSAKICAgICAgICAgewotICAgICAgICAgICAgSlND
OjpIZWFwJiBoZWFwID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwOwor
ICAgICAgICAgICAgSlNDOjpIZWFwJiBoZWFwID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhl
YXA7CiAgICAgICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCA9IG5ldyAoTm90TnVsbCwg
SlNDOjphbGxvY2F0ZUNlbGw8SlNET01XaW5kb3dTaGVsbD4oaGVhcCkpIEpTRE9NV2luZG93U2hl
bGwoc3RydWN0dXJlLCB3b3JsZCk7Ci0gICAgICAgICAgICBzaGVsbC0+ZmluaXNoQ3JlYXRpb24o
KndvcmxkLT5nbG9iYWxEYXRhKCksIHdpbmRvdyk7CisgICAgICAgICAgICBzaGVsbC0+ZmluaXNo
Q3JlYXRpb24oKndvcmxkLT52bSgpLCB3aW5kb3cpOwogICAgICAgICAgICAgcmV0dXJuIHNoZWxs
OyAKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKSAKKyAgICAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpIAogICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCAwLCBwcm90b3R5cGUs
IEpTQzo6VHlwZUluZm8oSlNDOjpQcm94eVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CisgICAgICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgMCwgcHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6UHJveHlUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOwogICAgICAgICB9CiAKICAgICAgICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCgpIHsgcmV0
dXJuIG1fd29ybGQuZ2V0KCk7IH0KIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgSlNET01XaW5k
b3dTaGVsbChKU0M6OlN0cnVjdHVyZSosIERPTVdyYXBwZXJXb3JsZCopOwotICAgICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJiwgUGFzc1JlZlB0cjxET01XaW5kb3c+
KTsKKyAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgUGFzc1JlZlB0cjxET01X
aW5kb3c+KTsKIAogICAgICAgICBSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiBtX3dvcmxkOwogICAg
IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXIuaAkocmV2
aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6
CiAgICAgSlNET01XcmFwcGVyKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkgCi0gICAgICAgIDogSlNEZXN0cnVjdGlibGVPYmplY3Qo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0Rlc3Ry
dWN0aWJsZU9iamVjdChnbG9iYWxPYmplY3QtPnZtKCksIHN0cnVjdHVyZSkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZlbnRDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZlbnRD
dXN0b20uY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RldmljZU1vdGlvbkV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDE4
ICsxMTYsMTggQEAgc3RhdGljIFBhc3NSZWZQdHI8RGV2aWNlTW90aW9uRGF0YTo6Um90YQogc3Rh
dGljIEpTT2JqZWN0KiBjcmVhdGVBY2NlbGVyYXRpb25PYmplY3QoY29uc3QgRGV2aWNlTW90aW9u
RGF0YTo6QWNjZWxlcmF0aW9uKiBhY2NlbGVyYXRpb24sIEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBKU09iamVjdCogb2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgb2Jq
ZWN0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJ4Iiks
IGFjY2VsZXJhdGlvbi0+Y2FuUHJvdmlkZVgoKSA/IGpzTnVtYmVyKGFjY2VsZXJhdGlvbi0+eCgp
KSA6IGpzTnVsbCgpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCks
IElkZW50aWZpZXIoZXhlYywgInkiKSwgYWNjZWxlcmF0aW9uLT5jYW5Qcm92aWRlWSgpID8ganNO
dW1iZXIoYWNjZWxlcmF0aW9uLT55KCkpIDoganNOdWxsKCkpOwotICAgIG9iamVjdC0+cHV0RGly
ZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAieiIpLCBhY2NlbGVyYXRp
b24tPmNhblByb3ZpZGVaKCkgPyBqc051bWJlcihhY2NlbGVyYXRpb24tPnooKSkgOiBqc051bGwo
KSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAi
eCIpLCBhY2NlbGVyYXRpb24tPmNhblByb3ZpZGVYKCkgPyBqc051bWJlcihhY2NlbGVyYXRpb24t
PngoKSkgOiBqc051bGwoKSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRl
bnRpZmllcihleGVjLCAieSIpLCBhY2NlbGVyYXRpb24tPmNhblByb3ZpZGVZKCkgPyBqc051bWJl
cihhY2NlbGVyYXRpb24tPnkoKSkgOiBqc051bGwoKSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3Qo
ZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAieiIpLCBhY2NlbGVyYXRpb24tPmNhblByb3Zp
ZGVaKCkgPyBqc051bWJlcihhY2NlbGVyYXRpb24tPnooKSkgOiBqc051bGwoKSk7CiAgICAgcmV0
dXJuIG9iamVjdDsKIH0KIAogc3RhdGljIEpTT2JqZWN0KiBjcmVhdGVSb3RhdGlvblJhdGVPYmpl
Y3QoY29uc3QgRGV2aWNlTW90aW9uRGF0YTo6Um90YXRpb25SYXRlKiByb3RhdGlvblJhdGUsIEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU09iamVjdCogb2JqZWN0ID0gY29uc3RydWN0RW1wdHlP
YmplY3QoZXhlYyk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJ
ZGVudGlmaWVyKGV4ZWMsICJhbHBoYSIpLCByb3RhdGlvblJhdGUtPmNhblByb3ZpZGVBbHBoYSgp
ID8ganNOdW1iZXIocm90YXRpb25SYXRlLT5hbHBoYSgpKSA6IGpzTnVsbCgpKTsKLSAgICBvYmpl
Y3QtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgImJldGEi
KSwgIHJvdGF0aW9uUmF0ZS0+Y2FuUHJvdmlkZUJldGEoKSAgPyBqc051bWJlcihyb3RhdGlvblJh
dGUtPmJldGEoKSkgIDoganNOdWxsKCkpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPmds
b2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiZ2FtbWEiKSwgcm90YXRpb25SYXRlLT5jYW5Q
cm92aWRlR2FtbWEoKSA/IGpzTnVtYmVyKHJvdGF0aW9uUmF0ZS0+Z2FtbWEoKSkgOiBqc051bGwo
KSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAi
YWxwaGEiKSwgcm90YXRpb25SYXRlLT5jYW5Qcm92aWRlQWxwaGEoKSA/IGpzTnVtYmVyKHJvdGF0
aW9uUmF0ZS0+YWxwaGEoKSkgOiBqc051bGwoKSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3QoZXhl
Yy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiYmV0YSIpLCAgcm90YXRpb25SYXRlLT5jYW5Qcm92
aWRlQmV0YSgpICA/IGpzTnVtYmVyKHJvdGF0aW9uUmF0ZS0+YmV0YSgpKSAgOiBqc051bGwoKSk7
CisgICAgb2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiZ2Ft
bWEiKSwgcm90YXRpb25SYXRlLT5jYW5Qcm92aWRlR2FtbWEoKSA/IGpzTnVtYmVyKHJvdGF0aW9u
UmF0ZS0+Z2FtbWEoKSkgOiBqc051bGwoKSk7CiAgICAgcmV0dXJuIG9iamVjdDsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCShyZXZpc2lv
biAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBKU0RpY3Rpb25hcnk6OmNv
bnZlcnRWYWx1ZShFeGVjU3RhdAogCiB2b2lkIEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVlKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgU2NyaXB0VmFsdWUmIHJlc3VsdCkKIHsKLSAg
ICByZXN1bHQgPSBTY3JpcHRWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIHZhbHVlKTsKKyAgICBy
ZXN1bHQgPSBTY3JpcHRWYWx1ZShleGVjLT52bSgpLCB2YWx1ZSk7CiB9CiAKIHZvaWQgSlNEaWN0
aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYgcmVzdWx0KQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3
ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX2V4ZWMoZXhlYykKICAgICB7CiAgICAgICAg
IGlmIChleGVjICYmIGluaXRpYWxpemVyT2JqZWN0KQotICAgICAgICAgICAgbV9pbml0aWFsaXpl
ck9iamVjdCA9IEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+KGV4ZWMtPmdsb2JhbERhdGEoKSwg
aW5pdGlhbGl6ZXJPYmplY3QpOworICAgICAgICAgICAgbV9pbml0aWFsaXplck9iamVjdCA9IEpT
Qzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+KGV4ZWMtPnZtKCksIGluaXRpYWxpemVyT2JqZWN0KTsK
ICAgICB9CiAKICAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGFueSBleGNlcHRpb25zIHdlcmUgdGhy
b3duLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHByb3BlcnR5IHdhcyBmb3VuZC4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAJKHJldmlz
aW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEpTRXJyb3JIYW5kbGVy
OjpoYW5kbGVFdmVudChTY3JpcHRFCiAKICAgICBFcnJvckV2ZW50KiBlcnJvckV2ZW50ID0gc3Rh
dGljX2Nhc3Q8RXJyb3JFdmVudCo+KGV2ZW50KTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPmdsb2JhbERhdGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+dm0oKSk7CiAKICAgICBKU09iamVjdCoganNGdW5j
dGlvbiA9IHRoaXMtPmpzRnVuY3Rpb24oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgaWYg
KCFqc0Z1bmN0aW9uKQpAQCAtODksOCArODksOCBAQCB2b2lkIEpTRXJyb3JIYW5kbGVyOjpoYW5k
bGVFdmVudChTY3JpcHRFCiAgICAgICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nV2l0aENhY2hlKGV4
ZWMsIGVycm9yRXZlbnQtPmZpbGVuYW1lKCkpKTsKICAgICAgICAgYXJncy5hcHBlbmQoanNOdW1i
ZXIoZXJyb3JFdmVudC0+bGluZW5vKCkpKTsKIAotICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSBnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgRHluYW1pY0dsb2Jh
bE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuZHlu
YW1pY0dsb2JhbE9iamVjdCA/IGdsb2JhbERhdGEuZHluYW1pY0dsb2JhbE9iamVjdCA6IGdsb2Jh
bE9iamVjdCk7CisgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAg
RHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKHZtLCB2bS5keW5hbWlj
R2xvYmFsT2JqZWN0ID8gdm0uZHluYW1pY0dsb2JhbE9iamVjdCA6IGdsb2JhbE9iamVjdCk7CiAK
ICAgICAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBnbG9iYWxPYmplY3QtPm1ldGhvZFRhYmxlKCkt
PnRvVGhpc09iamVjdChnbG9iYWxPYmplY3QsIGV4ZWMpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDE0ODY1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2
ZW50KFNjcmlwdAogICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCB8fCBzY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5pc0pTRXhlY3V0aW9uRm9yYmlkZGVuKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmdsb2JhbERh
dGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+dm0o
KSk7CiAKICAgICBKU09iamVjdCoganNGdW5jdGlvbiA9IHRoaXMtPmpzRnVuY3Rpb24oc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgaWYgKCFqc0Z1bmN0aW9uKQpAQCAtMTE5LDggKzExOSw4
IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHQKICAgICAgICAgRXZl
bnQqIHNhdmVkRXZlbnQgPSBnbG9iYWxPYmplY3QtPmN1cnJlbnRFdmVudCgpOwogICAgICAgICBn
bG9iYWxPYmplY3QtPnNldEN1cnJlbnRFdmVudChldmVudCk7CiAKLSAgICAgICAgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIER5
bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZShnbG9iYWxEYXRhLCBnbG9i
YWxEYXRhLmR5bmFtaWNHbG9iYWxPYmplY3QgPyBnbG9iYWxEYXRhLmR5bmFtaWNHbG9iYWxPYmpl
Y3QgOiBnbG9iYWxPYmplY3QpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZSh2bSwg
dm0uZHluYW1pY0dsb2JhbE9iamVjdCA/IHZtLmR5bmFtaWNHbG9iYWxPYmplY3QgOiBnbG9iYWxP
YmplY3QpOwogCiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUg
PSBKU01haW5UaHJlYWRFeGVjU3RhdGU6Omluc3RydW1lbnRGdW5jdGlvbkNhbGwoc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKIApAQCAtMTM2LDcgKzEzNiw3IEBA
IHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHQKICNpZiBFTkFCTEUoV09S
S0VSUykKICAgICAgICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2VyQ29udGV4
dCgpKSB7CiAgICAgICAgICAgICBib29sIHRlcm1pbmF0b3JDYXVzZWRFeGNlcHRpb24gPSAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkgJiYgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4ZWMt
PmV4Y2VwdGlvbigpKSk7Ci0gICAgICAgICAgICBpZiAodGVybWluYXRvckNhdXNlZEV4Y2VwdGlv
biB8fCBnbG9iYWxEYXRhLndhdGNoZG9nLmRpZEZpcmUoKSkKKyAgICAgICAgICAgIGlmICh0ZXJt
aW5hdG9yQ2F1c2VkRXhjZXB0aW9uIHx8IHZtLndhdGNoZG9nLmRpZEZpcmUoKSkKICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCktPnNjcmlwdCgpLT5mb3JiaWRFeGVjdXRpb24oKTsKICAgICAgICAgfQogI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAkocmV2aXNp
b24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBET01XcmFwcGVyV29ybGQqIGlzb2xhdGVkV29ybGQoKSBjb25zdCB7IHJldHVybiBt
X2lzb2xhdGVkV29ybGQuZ2V0KCk7IH0KIAogICAgICAgICBKU0M6OkpTT2JqZWN0KiB3cmFwcGVy
KCkgY29uc3QgeyByZXR1cm4gbV93cmFwcGVyLmdldCgpOyB9Ci0gICAgICAgIHZvaWQgc2V0V3Jh
cHBlcihKU0M6OkpTR2xvYmFsRGF0YSYsIEpTQzo6SlNPYmplY3QqIHdyYXBwZXIpIGNvbnN0IHsg
bV93cmFwcGVyID0gSlNDOjpQYXNzV2VhazxKU0M6OkpTT2JqZWN0Pih3cmFwcGVyKTsgfQorICAg
ICAgICB2b2lkIHNldFdyYXBwZXIoSlNDOjpWTSYsIEpTQzo6SlNPYmplY3QqIHdyYXBwZXIpIGNv
bnN0IHsgbV93cmFwcGVyID0gSlNDOjpQYXNzV2VhazxKU0M6OkpTT2JqZWN0Pih3cmFwcGVyKTsg
fQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBKU0M6OkpTT2JqZWN0KiBpbml0aWFs
aXplSlNGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KikgY29uc3Q7CkBAIC04MCw3ICs4
MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gaW5pdGlhbGl6ZUpTRnVuY3Rp
b24gY2FuIHRyaWdnZXIgY29kZSB0aGF0IGRlbGV0ZXMgdGhpcyBldmVudCBsaXN0ZW5lcgogICAg
ICAgICAvLyBiZWZvcmUgd2UncmUgZG9uZS4gSXQgc2hvdWxkIGFsd2F5cyByZXR1cm4gMCBpbiB0
aGlzIGNhc2UuCiAgICAgICAgIFJlZlB0cjxKU0V2ZW50TGlzdGVuZXI+IHByb3RlY3QoY29uc3Rf
Y2FzdDxKU0V2ZW50TGlzdGVuZXIqPih0aGlzKSk7Ci0gICAgICAgIEpTQzo6U3Ryb25nPEpTQzo6
SlNPYmplY3Q+IHdyYXBwZXIoKm1faXNvbGF0ZWRXb3JsZC0+Z2xvYmFsRGF0YSgpLCBtX3dyYXBw
ZXIuZ2V0KCkpOworICAgICAgICBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiB3cmFwcGVyKCpt
X2lzb2xhdGVkV29ybGQtPnZtKCksIG1fd3JhcHBlci5nZXQoKSk7CiAKICAgICAgICAgaWYgKCFt
X2pzRnVuY3Rpb24pIHsKICAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uID0gaW5p
dGlhbGl6ZUpTRnVuY3Rpb24oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCShy
ZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1
bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgSlNWYWx1ZSBK
U0hUTUxEb2N1bWVudDo6bmFtZUdldHRlcihFeGVjUwogSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6
YWxsKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICAvLyBJZiAiYWxsIiBoYXMgYmVlbiBv
dmVyd3JpdHRlbiwgcmV0dXJuIHRoZSBvdmVyd3JpdHRlbiB2YWx1ZQotICAgIEpTVmFsdWUgdiA9
IGdldERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgImFsbCIpKTsK
KyAgICBKU1ZhbHVlIHYgPSBnZXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAi
YWxsIikpOwogICAgIGlmICh2KQogICAgICAgICByZXR1cm4gdjsKIApAQCAtOTUsNyArOTUsNyBA
QCBKU1ZhbHVlIEpTSFRNTERvY3VtZW50OjphbGwoRXhlY1N0YXRlKiBlCiB2b2lkIEpTSFRNTERv
Y3VtZW50OjpzZXRBbGwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIC8v
IEFkZCAiYWxsIiB0byB0aGUgcHJvcGVydHkgbWFwLgotICAgIHB1dERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgImFsbCIpLCB2YWx1ZSk7CisgICAgcHV0RGlyZWN0
KGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgImFsbCIpLCB2YWx1ZSk7CiB9CiAKIC8vIEN1
c3RvbSBmdW5jdGlvbnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRl
bXBsYXRlRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTQ4NjU1
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBKU1ZhbHVlIEpTSFRNTFRl
bXBsYXRlRWxlbWVudDo6Y29udGVudChFCiAKICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9XUkFQ
UEVSKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBEb2N1bWVudEZyYWdtZW50LCBjb250ZW50KTsKICAg
ICBQcml2YXRlTmFtZSBwcm9wZXJ0eU5hbWU7Ci0gICAgY29uc3RfY2FzdDxKU0hUTUxUZW1wbGF0
ZUVsZW1lbnQqPih0aGlzKS0+cHV0RGlyZWN0KGdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCks
IHByb3BlcnR5TmFtZSwgd3JhcHBlcik7CisgICAgY29uc3RfY2FzdDxKU0hUTUxUZW1wbGF0ZUVs
ZW1lbnQqPih0aGlzKS0+cHV0RGlyZWN0KGdsb2JhbE9iamVjdCgpLT52bSgpLCBwcm9wZXJ0eU5h
bWUsIHdyYXBwZXIpOwogICAgIHJldHVybiB3cmFwcGVyOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHJldmlzaW9uIDE0ODY1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4Myw3ICsxODMsNyBAQCBKU1ZhbHVlIEpTSGlzdG9yeTo6c3RhdGUo
RXhlY1N0YXRlICpleGVjCiAKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJp
YWxpemVkID0gaGlzdG9yeS0+c3RhdGUoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHNlcmlhbGl6
ZWQgPyBzZXJpYWxpemVkLT5kZXNlcmlhbGl6ZShleGVjLCBnbG9iYWxPYmplY3QoKSwgMCkgOiBq
c051bGwoKTsKLSAgICBjb25zdF9jYXN0PEpTSGlzdG9yeSo+KHRoaXMpLT5tX3N0YXRlLnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHJlc3VsdCk7CisgICAgY29uc3RfY2FzdDxKU0hpc3Rv
cnkqPih0aGlzKS0+bV9zdGF0ZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgcmVzdWx0KTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lt
YWdlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBKU0ltYWdlQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9u
KAogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdCk7CiAgICAgQVNTRVJU
KGluaGVyaXRzKCZzX2luZm8pKTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU0hUTUxJbWFnZUVsZW1lbnRQcm90b3R5
cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7CisgICAgcHV0RGlyZWN0KGV4ZWMt
PnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTSFRNTEltYWdlRWxlbWVu
dFByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTsKIH0KIAogc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SW1hZ2UoRXhlY1N0YXRlKiBl
eGVjKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0
cnVjdG9yLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSW1hZ2VDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiw5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKICAgICAg
ICAgfQogCi0gICAgICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0
aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAkocmV2aXNpb24gMTQ4NjU1KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMs
IEpTRE9NR2xvYmEKICAgICAKICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9XUkFQUEVSKGV4ZWMs
IGdsb2JhbE9iamVjdCwgSW1hZ2VEYXRhLCBpbWFnZURhdGEpOwogICAgIElkZW50aWZpZXIgZGF0
YU5hbWUoZXhlYywgImRhdGEiKTsKLSAgICB3cmFwcGVyLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBkYXRhTmFtZSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGltYWdlRGF0YS0+ZGF0
YSgpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICB3cmFwcGVyLT5wdXREaXJlY3QoZXhl
Yy0+dm0oKSwgZGF0YU5hbWUsIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbWFnZURhdGEtPmRh
dGEoKSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgZXhlYy0+aGVhcCgpLT5yZXBvcnRF
eHRyYU1lbW9yeUNvc3QoaW1hZ2VEYXRhLT5kYXRhKCktPmxlbmd0aCgpKTsKICAgICAKICAgICBy
ZXR1cm4gd3JhcHBlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0
ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAJKHJldmlzaW9uIDE0ODY1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsMTAgKzg0LDEwIEBAIE5vZGUqIEluamVjdGVkU2Ny
aXB0SG9zdDo6c2NyaXB0VmFsdWVBc04KIFNjcmlwdFZhbHVlIEluamVjdGVkU2NyaXB0SG9zdDo6
bm9kZUFzU2NyaXB0VmFsdWUoU2NyaXB0U3RhdGUqIHN0YXRlLCBOb2RlKiBub2RlKQogewogICAg
IGlmICghc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3RhdGUsIG5vZGUpKQotICAgICAgICByZXR1
cm4gU2NyaXB0VmFsdWUoc3RhdGUtPmdsb2JhbERhdGEoKSwganNOdWxsKCkpOworICAgICAgICBy
ZXR1cm4gU2NyaXB0VmFsdWUoc3RhdGUtPnZtKCksIGpzTnVsbCgpKTsKIAogICAgIEpTTG9ja0hv
bGRlciBsb2NrKHN0YXRlKTsKLSAgICByZXR1cm4gU2NyaXB0VmFsdWUoc3RhdGUtPmdsb2JhbERh
dGEoKSwgdG9KUyhzdGF0ZSwgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShzdGF0
ZSksIG5vZGUpKTsKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUoc3RhdGUtPnZtKCksIHRvSlMoc3Rh
dGUsIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoc3RhdGUpLCBub2RlKSk7CiB9
CiAKIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Omluc3BlY3RlZE9iamVjdChFeGVjU3Rh
dGUqIGV4ZWMpCkBAIC0xNzcsMTcgKzE3NywxNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRI
b3N0OjpmdW5jdGlvbkRlCiAgICAgU3RyaW5nIHNjcmlwdElkID0gU3RyaW5nOjpudW1iZXIoc291
cmNlQ29kZS0+cHJvdmlkZXIoKS0+YXNJRCgpKTsKIAogICAgIEpTT2JqZWN0KiBsb2NhdGlvbiA9
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgIGxvY2F0aW9uLT5wdXREaXJlY3QoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJsaW5lTnVtYmVyIiksIGpzTnVtYmVy
KGxpbmVOdW1iZXIpKTsKLSAgICBsb2NhdGlvbi0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgSWRlbnRpZmllcihleGVjLCAic2NyaXB0SWQiKSwganNTdHJpbmcoZXhlYywgc2NyaXB0SWQp
KTsKKyAgICBsb2NhdGlvbi0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywg
ImxpbmVOdW1iZXIiKSwganNOdW1iZXIobGluZU51bWJlcikpOworICAgIGxvY2F0aW9uLT5wdXRE
aXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAic2NyaXB0SWQiKSwganNTdHJpbmco
ZXhlYywgc2NyaXB0SWQpKTsKIAogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0
eU9iamVjdChleGVjKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCks
IElkZW50aWZpZXIoZXhlYywgImxvY2F0aW9uIiksIGxvY2F0aW9uKTsKKyAgICByZXN1bHQtPnB1
dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJsb2NhdGlvbiIpLCBsb2NhdGlv
bik7CiAgICAgU3RyaW5nIG5hbWUgPSBmdW5jdGlvbi0+bmFtZShleGVjKTsKICAgICBpZiAoIW5h
bWUuaXNFbXB0eSgpKQotICAgICAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRh
KCksIElkZW50aWZpZXIoZXhlYywgIm5hbWUiKSwganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgbmFt
ZSkpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4
ZWMsICJuYW1lIiksIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIG5hbWUpKTsKICAgICBTdHJpbmcg
ZGlzcGxheU5hbWUgPSBmdW5jdGlvbi0+ZGlzcGxheU5hbWUoZXhlYyk7CiAgICAgaWYgKCFkaXNw
bGF5TmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiZGlzcGxheU5hbWUiKSwganNTdHJpbmdXaXRoQ2Fj
aGUoZXhlYywgZGlzcGxheU5hbWUpKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+
dm0oKSwgSWRlbnRpZmllcihleGVjLCAiZGlzcGxheU5hbWUiKSwganNTdHJpbmdXaXRoQ2FjaGUo
ZXhlYywgZGlzcGxheU5hbWUpKTsKICAgICAvLyBGSVhNRTogcHJvdmlkZSBmdW5jdGlvbiBzY29w
ZSBkYXRhIGluICJzY29wZXNSYXciIHByb3BlcnR5IHdoZW4gSlNDIHN1cHBvcnRzIGl0LgogICAg
IC8vICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODcxOTIKICAg
ICByZXR1cm4gcmVzdWx0OwpAQCAtMjE2LDggKzIxNiw4IEBAIHN0YXRpYyBKU0FycmF5KiBnZXRK
U0xpc3RlbmVyRnVuY3Rpb25zKEUKICAgICAgICAgaWYgKCFmdW5jdGlvbikKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBKU09iamVjdCogbGlzdGVuZXJFbnRyeSA9IGNvbnN0cnVjdEVt
cHR5T2JqZWN0KGV4ZWMpOwotICAgICAgICBsaXN0ZW5lckVudHJ5LT5wdXREaXJlY3QoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJsaXN0ZW5lciIpLCBmdW5jdGlvbik7Ci0g
ICAgICAgIGxpc3RlbmVyRW50cnktPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIElkZW50
aWZpZXIoZXhlYywgInVzZUNhcHR1cmUiKSwganNCb29sZWFuKGxpc3RlbmVySW5mby5ldmVudExp
c3RlbmVyVmVjdG9yW2ldLnVzZUNhcHR1cmUpKTsKKyAgICAgICAgbGlzdGVuZXJFbnRyeS0+cHV0
RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgImxpc3RlbmVyIiksIGZ1bmN0aW9u
KTsKKyAgICAgICAgbGlzdGVuZXJFbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZp
ZXIoZXhlYywgInVzZUNhcHR1cmUiKSwganNCb29sZWFuKGxpc3RlbmVySW5mby5ldmVudExpc3Rl
bmVyVmVjdG9yW2ldLnVzZUNhcHR1cmUpKTsKICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRl
eChleGVjLCBvdXRwdXRJbmRleCsrLCBKU1ZhbHVlKGxpc3RlbmVyRW50cnkpKTsKICAgICB9CiAg
ICAgcmV0dXJuIHJlc3VsdDsKQEAgLTI0Nyw3ICsyNDcsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRT
Y3JpcHRIb3N0OjpnZXRFdmVudExpCiAgICAgICAgIGlmICghbGlzdGVuZXJzLT5sZW5ndGgoKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBBdG9taWNTdHJpbmcgZXZlbnRUeXBlID0g
bGlzdGVuZXJzQXJyYXlbaV0uZXZlbnRUeXBlOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdChl
eGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgZXZlbnRUeXBlLmltcGwoKSksIEpT
VmFsdWUobGlzdGVuZXJzKSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCks
IElkZW50aWZpZXIoZXhlYywgZXZlbnRUeXBlLmltcGwoKSksIEpTVmFsdWUobGlzdGVuZXJzKSk7
CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTI1Niw4ICsyNTYsOCBAQCBKU1ZhbHVl
IEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRFdmVudExpCiBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3Jp
cHRIb3N0OjppbnNwZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpID49IDIpIHsKLSAgICAgICAgU2NyaXB0VmFsdWUgb2JqZWN0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgICAgICBTY3JpcHRWYWx1ZSBoaW50cyhl
eGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmFyZ3VtZW50KDEpKTsKKyAgICAgICAgU2NyaXB0VmFs
dWUgb2JqZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICAgICAgU2NyaXB0
VmFsdWUgaGludHMoZXhlYy0+dm0oKSwgZXhlYy0+YXJndW1lbnQoMSkpOwogICAgICAgICBpbXBs
KCktPmluc3BlY3RJbXBsKG9iamVjdC50b0luc3BlY3RvclZhbHVlKGV4ZWMpLCBoaW50cy50b0lu
c3BlY3RvclZhbHVlKGV4ZWMpKTsKICAgICB9CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3Rl
bmVyLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCwxMiArMTE4LDEy
IEBAIEpTT2JqZWN0KiBKU0xhenlFdmVudExpc3RlbmVyOjppbml0aWFsaXoKICAgICAgICAgICAg
IC8vIEVuc3VyZSB0aGF0ICdub2RlJyBoYXMgYSBKYXZhU2NyaXB0IHdyYXBwZXIgdG8gbWFyayB0
aGUgZXZlbnQgbGlzdGVuZXIgd2UncmUgY3JlYXRpbmcuCiAgICAgICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgcGFzcyB0aGUgZ2xv
YmFsIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGUKLSAgICAgICAgICAgIHNldFdyYXBw
ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhc09iamVjdCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
bV9vcmlnaW5hbE5vZGUpKSk7CisgICAgICAgICAgICBzZXRXcmFwcGVyKGV4ZWMtPnZtKCksIGFz
T2JqZWN0KHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBtX29yaWdpbmFsTm9kZSkpKTsKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIEFkZCB0aGUgZXZlbnQncyBob21lIGVsZW1lbnQgdG8gdGhlIHNj
b3BlCiAgICAgICAgIC8vIChhbmQgdGhlIGRvY3VtZW50LCBhbmQgdGhlIGZvcm0gLSBzZWUgSlNI
VE1MRWxlbWVudDo6ZXZlbnRIYW5kbGVyU2NvcGUpCi0gICAgICAgIGxpc3RlbmVyQXNGdW5jdGlv
bi0+c2V0U2NvcGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc0Nhc3Q8SlNOb2RlKj4od3JhcHBlcigp
KS0+cHVzaEV2ZW50SGFuZGxlclNjb3BlKGV4ZWMsIGxpc3RlbmVyQXNGdW5jdGlvbi0+c2NvcGUo
KSkpOworICAgICAgICBsaXN0ZW5lckFzRnVuY3Rpb24tPnNldFNjb3BlKGV4ZWMtPnZtKCksIGpz
Q2FzdDxKU05vZGUqPih3cmFwcGVyKCkpLT5wdXNoRXZlbnRIYW5kbGVyU2NvcGUoZXhlYywgbGlz
dGVuZXJBc0Z1bmN0aW9uLT5zY29wZSgpKSk7CiAgICAgfQogICAgIHJldHVybiBqc0Z1bmN0aW9u
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2Fn
ZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3
ICs4NCw3IEBAIEpTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6OmRhdGEoRXhlY1N0YXRlKiAKICAgICB9
CiAKICAgICAvLyBTYXZlIHRoZSByZXN1bHQgc28gd2UgZG9uJ3QgaGF2ZSB0byBkZXNlcmlhbGl6
ZSB0aGUgdmFsdWUgYWdhaW4uCi0gICAgY29uc3RfY2FzdDxKU01lc3NhZ2VFdmVudCo+KHRoaXMp
LT5tX2RhdGEuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgcmVzdWx0KTsKKyAgICBjb25z
dF9jYXN0PEpTTWVzc2FnZUV2ZW50Kj4odGhpcyktPm1fZGF0YS5zZXQoZXhlYy0+dm0oKSwgdGhp
cywgcmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMTcsMTMgKzExNywxMyBA
QCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGhhbmRsZUluaXRNZXNzYWdlRXZlCiAgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIH0KLSAgICBTY3JpcHRWYWx1ZSBkYXRhQXJnID0gU2NyaXB0VmFsdWUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBleGVjLT5hcmd1bWVudCgzKSk7CisgICAgU2NyaXB0VmFsdWUgZGF0YUFyZyA9IFNj
cmlwdFZhbHVlKGV4ZWMtPnZtKCksIGV4ZWMtPmFyZ3VtZW50KDMpKTsKICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgTWVz
c2FnZUV2ZW50KiBldmVudCA9IHN0YXRpY19jYXN0PE1lc3NhZ2VFdmVudCo+KGpzRXZlbnQtPmlt
cGwoKSk7CiAgICAgZXZlbnQtPmluaXRNZXNzYWdlRXZlbnQodHlwZUFyZywgY2FuQnViYmxlQXJn
LCBjYW5jZWxhYmxlQXJnLCBkYXRhQXJnLCBvcmlnaW5BcmcsIGxhc3RFdmVudElkQXJnLCBzb3Vy
Y2VBcmcsIG1lc3NhZ2VQb3J0cy5yZWxlYXNlKCkpOwotICAgIGpzRXZlbnQtPm1fZGF0YS5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc0V2ZW50LCBkYXRhQXJnLmpzVmFsdWUoKSk7CisgICAganNF
dmVudC0+bV9kYXRhLnNldChleGVjLT52bSgpLCBqc0V2ZW50LCBkYXRhQXJnLmpzVmFsdWUoKSk7
CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTXV0YXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMTQ4NjU1
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbkNhbGxiYWNrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIEpTTXV0YXRpb25DYWxsYmFjazo6
Y2FsbChjb25zdCBWZWN0CiAKICAgICBSZWZQdHI8SlNNdXRhdGlvbkNhbGxiYWNrPiBwcm90ZWN0
KHRoaXMpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2sobV9pc29sYXRlZFdvcmxkLT5nbG9iYWxE
YXRhKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1faXNvbGF0ZWRXb3JsZC0+dm0oKSk7CiAK
ICAgICBpZiAoIW1fY2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNw
cAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRh
dGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTTXV0YXRpb25PCiAgICAgUmVmUHRyPEpTTXV0
YXRpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBKU011dGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZShvYmpl
Y3QsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpKTsKICAgICBKU09iamVjdCoganNPYnNl
cnZlciA9IGFzT2JqZWN0KHRvSlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCks
IE11dGF0aW9uT2JzZXJ2ZXI6OmNyZWF0ZShjYWxsYmFjay5yZWxlYXNlKCkpKSk7CiAgICAgUHJp
dmF0ZU5hbWUgcHJvcGVydHlOYW1lOwotICAgIGpzT2JzZXJ2ZXItPnB1dERpcmVjdChqc0NvbnN0
cnVjdG9yLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIG9iamVj
dCk7CisgICAganNPYnNlcnZlci0+cHV0RGlyZWN0KGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVj
dCgpLT52bSgpLCBwcm9wZXJ0eU5hbWUsIG9iamVjdCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc09ic2VydmVyKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCShyZXZpc2lvbiAxNDg2NTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAotSlNOb2RlRmlsdGVyQ29uZGl0aW9uOjpKU05vZGVGaWx0ZXJD
b25kaXRpb24oSlNHbG9iYWxEYXRhJiwgTm9kZUZpbHRlciogb3duZXIsIEpTVmFsdWUgZmlsdGVy
KQorSlNOb2RlRmlsdGVyQ29uZGl0aW9uOjpKU05vZGVGaWx0ZXJDb25kaXRpb24oVk0mLCBOb2Rl
RmlsdGVyKiBvd25lciwgSlNWYWx1ZSBmaWx0ZXIpCiAgICAgOiBtX2ZpbHRlcihmaWx0ZXIuaXNP
YmplY3QoKSA/IFBhc3NXZWFrPEpTT2JqZWN0Pihqc0Nhc3Q8SlNPYmplY3QqPihmaWx0ZXIpLCAm
bV93ZWFrT3duZXIsIG93bmVyKSA6IG51bGxwdHIpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uaAkocmV2aXNpb24g
MTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEzICszNCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICBjbGFzcyBKU05vZGVGaWx0ZXJDb25kaXRpb24gOiBwdWJsaWMgTm9kZUZpbHRl
ckNvbmRpdGlvbiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU05v
ZGVGaWx0ZXJDb25kaXRpb24+IGNyZWF0ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
Tm9kZUZpbHRlciogb3duZXIsIEpTQzo6SlNWYWx1ZSBmaWx0ZXIpCisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEpTTm9kZUZpbHRlckNvbmRpdGlvbj4gY3JlYXRlKEpTQzo6Vk0mIHZtLCBOb2Rl
RmlsdGVyKiBvd25lciwgSlNDOjpKU1ZhbHVlIGZpbHRlcikKICAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKU05vZGVGaWx0ZXJDb25kaXRpb24oZ2xvYmFsRGF0YSwg
b3duZXIsIGZpbHRlcikpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKU05vZGVG
aWx0ZXJDb25kaXRpb24odm0sIG93bmVyLCBmaWx0ZXIpKTsKICAgICAgICAgfQogCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgSlNOb2RlRmlsdGVyQ29uZGl0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJiwg
Tm9kZUZpbHRlciogb3duZXIsIEpTQzo6SlNWYWx1ZSBmaWx0ZXIpOworICAgICAgICBKU05vZGVG
aWx0ZXJDb25kaXRpb24oSlNDOjpWTSYsIE5vZGVGaWx0ZXIqIG93bmVyLCBKU0M6OkpTVmFsdWUg
ZmlsdGVyKTsKIAogICAgICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoU2NyaXB0U3RhdGUq
LCBOb2RlKikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9k
ZUZpbHRlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDYsMTMgKzQ2LDEzIEBAIHZvaWQgSlNOb2RlRmlsdGVyOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCoKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QodGhpc09iamVjdC0+aW1wbCgpKTsKIH0KIAot
UGFzc1JlZlB0cjxOb2RlRmlsdGVyPiB0b05vZGVGaWx0ZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU1ZhbHVlIHZhbHVlKQorUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiB0b05vZGVGaWx0ZXIo
Vk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS5pbmhlcml0cygmSlNOb2Rl
RmlsdGVyOjpzX2luZm8pKQogICAgICAgICByZXR1cm4ganNDYXN0PEpTTm9kZUZpbHRlcio+KGFz
T2JqZWN0KHZhbHVlKSktPmltcGwoKTsKIAogICAgIFJlZlB0cjxOb2RlRmlsdGVyPiByZXN1bHQg
PSBOb2RlRmlsdGVyOjpjcmVhdGUoKTsKLSAgICByZXN1bHQtPnNldENvbmRpdGlvbihKU05vZGVG
aWx0ZXJDb25kaXRpb246OmNyZWF0ZShnbG9iYWxEYXRhLCByZXN1bHQuZ2V0KCksIHZhbHVlKSk7
CisgICAgcmVzdWx0LT5zZXRDb25kaXRpb24oSlNOb2RlRmlsdGVyQ29uZGl0aW9uOjpjcmVhdGUo
dm0sIHJlc3VsdC5nZXQoKSwgdmFsdWUpKTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BvcFN0
YXRlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIFNhdmUgdGhlIHN0YXRlIHZhbHVl
IHRvIHRoZSBtX3N0YXRlIG1lbWJlciBvZiBhIEpTUG9wU3RhdGVFdmVudCwgYW5kIHJldHVybiBp
dCwgZm9yIGNvbnZlbmllbmNlLgogc3RhdGljIGNvbnN0IEpTVmFsdWUmIGNhY2hlU3RhdGUoRXhl
Y1N0YXRlKiBleGVjLCBKU1BvcFN0YXRlRXZlbnQqIGV2ZW50LCBjb25zdCBKU1ZhbHVlJiBzdGF0
ZSkKIHsKLSAgICBldmVudC0+bV9zdGF0ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBldmVudCwg
c3RhdGUpOworICAgIGV2ZW50LT5tX3N0YXRlLnNldChleGVjLT52bSgpLCBldmVudCwgc3RhdGUp
OwogICAgIHJldHVybiBzdGF0ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxs
YmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGJvb2wgSlNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxs
YmFjazo6aGEKIAogICAgIFJlZlB0cjxKU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPiBw
cm90ZWN0KHRoaXMpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRGF0YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2Jh
bE9iamVjdCgpLT52bSgpKTsKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAg
YXJncy5hcHBlbmQoanNOdW1iZXIoaGlnaFJlc05vd01zKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2
LDcgQEAgSlNWYWx1ZSBKU1NRTFJlc3VsdFNldFJvd0xpc3Q6Oml0ZW0oRXhlYwogICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCi0gICAgICAgIG9iamVjdC0+
cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCBtX2ltcGwtPmNv
bHVtbk5hbWVzKClbaV0pLCBqc1ZhbHVlLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAg
ICBvYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsIG1faW1wbC0+
Y29sdW1uTmFtZXMoKVtpXSksIGpzVmFsdWUsIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAg
fQogCiAgICAgcmV0dXJuIG9iamVjdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2VyQ29udGV4dEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEJhc2UuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRCYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsMTUgKzQ2LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY29uc3Qg
Q2xhc3NJbmZvIEpTV29ya2VyQ29udGV4dEJhc2U6OnNfaW5mbyA9IHsgIldvcmtlckNvbnRleHQi
LCAmSlNET01HbG9iYWxPYmplY3Q6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1dvcmtlckNvbnRleHRCYXNlKSB9OwogCi1KU1dvcmtlckNvbnRleHRCYXNlOjpKU1dvcmtlckNv
bnRleHRCYXNlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlLCBQYXNzUmVmUHRyPFdvcmtlckNvbnRleHQ+IGltcGwpCi0gICAgOiBKU0RPTUds
b2JhbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIG5vcm1hbFdvcmxkKGdsb2JhbERhdGEp
KQorSlNXb3JrZXJDb250ZXh0QmFzZTo6SlNXb3JrZXJDb250ZXh0QmFzZShKU0M6OlZNJiB2bSwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxXb3JrZXJDb250ZXh0PiBpbXBs
KQorICAgIDogSlNET01HbG9iYWxPYmplY3Qodm0sIHN0cnVjdHVyZSwgbm9ybWFsV29ybGQodm0p
KQogICAgICwgbV9pbXBsKGltcGwpCiB7CiB9CiAKLXZvaWQgSlNXb3JrZXJDb250ZXh0QmFzZTo6
ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBKU1dvcmtlckNv
bnRleHRCYXNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFT
U0VSVChpbmhlcml0cygmc19pbmZvKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV29ya2VyQ29udGV4dEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRCYXNlLmgJKHJldmlzaW9uIDE0ODY1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEJhc2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsMTQgKzQ4LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
V29ya2VyQ29udGV4dCogaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQogICAg
ICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29u
c3Q7CiAKLSAgICAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIEpTQzo6U3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpHbG9iYWxPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6R2xv
YmFsT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogCiAg
ICAgcHJvdGVjdGVkOgotICAgICAgICBKU1dvcmtlckNvbnRleHRCYXNlKEpTQzo6SlNHbG9iYWxE
YXRhJiwgSlNDOjpTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPFdvcmtlckNvbnRleHQ+KTsKLSAgICAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkpTR2xvYmFsRGF0YSYpOworICAgICAgICBKU1dv
cmtlckNvbnRleHRCYXNlKEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFBhc3NSZWZQdHI8V29y
a2VyQ29udGV4dD4pOworICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxXb3JrZXJDb250ZXh0PiBtX2ltcGw7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1Nl
cnZlci5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiwxMiArMTEy
LDEyIEBAIHZvaWQgUGFnZVNjcmlwdERlYnVnU2VydmVyOjpyZW1vdmVMaXN0ZW4KIAogdm9pZCBQ
YWdlU2NyaXB0RGVidWdTZXJ2ZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKFRpbWVyPFNjcmlw
dERlYnVnU2VydmVyPiopCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6
Y29tbW9uVk0oKSk7CiAgICAgLy8gSWYgSmF2YVNjcmlwdCBzdGFjayBpcyBub3QgZW1wdHkgcG9z
dHBvbmUgcmVjb21waWxhdGlvbi4KLSAgICBpZiAoSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpLT5keW5hbWljR2xvYmFsT2JqZWN0KQorICAgIGlmIChKU0RPTVdpbmRvdzo6Y29tbW9u
Vk0oKS0+ZHluYW1pY0dsb2JhbE9iamVjdCkKICAgICAgICAgcmVjb21waWxlQWxsSlNGdW5jdGlv
bnNTb29uKCk7CiAgICAgZWxzZQotICAgICAgICBEZWJ1Z2dlcjo6cmVjb21waWxlQWxsSlNGdW5j
dGlvbnMoSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgRGVidWdn
ZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKIH0K
IAogU2NyaXB0RGVidWdTZXJ2ZXI6Okxpc3RlbmVyU2V0KiBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6
OmdldExpc3RlbmVyc0Zvckdsb2JhbE9iamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24u
Y3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hl
ZHVsZWRBY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSwxMyArNjUsMTMgQEAgUGFzc093
blB0cjxTY2hlZHVsZWRBY3Rpb24+IFNjaGVkdWxlZEFjdAogfQogCiBTY2hlZHVsZWRBY3Rpb246
OlNjaGVkdWxlZEFjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZnVuY3Rpb24sIERPTVdy
YXBwZXJXb3JsZCogaXNvbGF0ZWRXb3JsZCkKLSAgICA6IG1fZnVuY3Rpb24oZXhlYy0+Z2xvYmFs
RGF0YSgpLCBmdW5jdGlvbikKKyAgICA6IG1fZnVuY3Rpb24oZXhlYy0+dm0oKSwgZnVuY3Rpb24p
CiAgICAgLCBtX2lzb2xhdGVkV29ybGQoaXNvbGF0ZWRXb3JsZCkKIHsKICAgICAvLyBzZXRUaW1l
b3V0KGZ1bmN0aW9uLCBpbnRlcnZhbCwgYXJnMCwgYXJnMS4uLikuCiAgICAgLy8gU3RhcnQgYXQg
MiB0byBza2lwIGZ1bmN0aW9uIGFuZCBpbnRlcnZhbC4KICAgICBmb3IgKHNpemVfdCBpID0gMjsg
aSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgKytpKQotICAgICAgICBtX2FyZ3MuYXBwZW5kKFN0
cm9uZzxKU0M6OlVua25vd24+KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+YXJndW1lbnQoaSkp
KTsKKyAgICAgICAgbV9hcmdzLmFwcGVuZChTdHJvbmc8SlNDOjpVbmtub3duPihleGVjLT52bSgp
LCBleGVjLT5hcmd1bWVudChpKSkpOwogfQogCiB2b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQpAQCAtOTEsNyArOTEsNyBAQCB2b2lk
IFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZShTY3JpcHRFeGVjCiB2b2lkIFNjaGVkdWxlZEFjdGlv
bjo6ZXhlY3V0ZUZ1bmN0aW9uSW5Db250ZXh0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewog
ICAgIEFTU0VSVChtX2Z1bmN0aW9uKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhjb250ZXh0LT5n
bG9iYWxEYXRhKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbnRleHQtPnZtKCkpOwogCiAg
ICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0
YShtX2Z1bmN0aW9uLmdldCgpLCBjYWxsRGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAg
IFNjaGVkdWxlZEFjdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbiwg
RE9NV3JhcHBlcldvcmxkKiBpc29sYXRlZFdvcmxkKTsKICAgICAgICAgU2NoZWR1bGVkQWN0aW9u
KGNvbnN0IFN0cmluZyYgY29kZSwgRE9NV3JhcHBlcldvcmxkKiBpc29sYXRlZFdvcmxkKQotICAg
ICAgICAgICAgOiBtX2Z1bmN0aW9uKCppc29sYXRlZFdvcmxkLT5nbG9iYWxEYXRhKCkpCisgICAg
ICAgICAgICA6IG1fZnVuY3Rpb24oKmlzb2xhdGVkV29ybGQtPnZtKCkpCiAgICAgICAgICAgICAs
IG1fY29kZShjb2RlKQogICAgICAgICAgICAgLCBtX2lzb2xhdGVkV29ybGQoaXNvbGF0ZWRXb3Js
ZCkKICAgICAgICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2Fj
aGVkRnJhbWVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2NyaXB0Q2FjaGVk
RnJhbWVEYXRhOjpTY3JpcHRDYWNoZWRGcmFtZURhdGEoRnJhbWUqIGZyYW1lKQogewotICAgIEpT
TG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAKICAg
ICBTY3JpcHRDb250cm9sbGVyKiBzY3JpcHRDb250cm9sbGVyID0gZnJhbWUtPnNjcmlwdCgpOwog
ICAgIFNjcmlwdENvbnRyb2xsZXI6OlNoZWxsTWFwJiB3aW5kb3dTaGVsbHMgPSBzY3JpcHRDb250
cm9sbGVyLT5tX3dpbmRvd1NoZWxsczsKQEAgLTU0LDcgKzU0LDcgQEAgU2NyaXB0Q2FjaGVkRnJh
bWVEYXRhOjpTY3JpcHRDYWNoZWRGcmFtZQogICAgIFNjcmlwdENvbnRyb2xsZXI6OlNoZWxsTWFw
OjppdGVyYXRvciB3aW5kb3dTaGVsbHNFbmQgPSB3aW5kb3dTaGVsbHMuZW5kKCk7CiAgICAgZm9y
IChTY3JpcHRDb250cm9sbGVyOjpTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IHdpbmRvd1NoZWxs
cy5iZWdpbigpOyBpdGVyICE9IHdpbmRvd1NoZWxsc0VuZDsgKytpdGVyKSB7CiAgICAgICAgIEpT
RE9NV2luZG93KiB3aW5kb3cgPSBpdGVyLT52YWx1ZS0+d2luZG93KCk7Ci0gICAgICAgIG1fd2lu
ZG93cy5hZGQoaXRlci0+a2V5LmdldCgpLCBTdHJvbmc8SlNET01XaW5kb3c+KHdpbmRvdy0+Z2xv
YmFsRGF0YSgpLCB3aW5kb3cpKTsKKyAgICAgICAgbV93aW5kb3dzLmFkZChpdGVyLT5rZXkuZ2V0
KCksIFN0cm9uZzxKU0RPTVdpbmRvdz4od2luZG93LT52bSgpLCB3aW5kb3cpKTsKICAgICB9CiAK
ICAgICBzY3JpcHRDb250cm9sbGVyLT5hdHRhY2hEZWJ1Z2dlcigwKTsKQEAgLTY3LDcgKzY3LDcg
QEAgU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjp+U2NyaXB0Q2FjaGVkRnJhbQogCiB2b2lkIFNjcmlw
dENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZShGcmFtZSogZnJhbWUpCiB7Ci0gICAgSlNMb2NrSG9s
ZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKIAogICAgIFNjcmlw
dENvbnRyb2xsZXIqIHNjcmlwdENvbnRyb2xsZXIgPSBmcmFtZS0+c2NyaXB0KCk7CiAgICAgU2Ny
aXB0Q29udHJvbGxlcjo6U2hlbGxNYXAmIHdpbmRvd1NoZWxscyA9IHNjcmlwdENvbnRyb2xsZXIt
Pm1fd2luZG93U2hlbGxzOwpAQCAtNzgsNyArNzgsNyBAQCB2b2lkIFNjcmlwdENhY2hlZEZyYW1l
RGF0YTo6cmVzdG9yZShGcmFtCiAgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxs
ID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAKICAgICAgICAgaWYgKEpTRE9NV2luZG93KiB3aW5kb3cg
PSBtX3dpbmRvd3MuZ2V0KHdvcmxkKS5nZXQoKSkKLSAgICAgICAgICAgIHdpbmRvd1NoZWxsLT5z
ZXRXaW5kb3cod2luZG93LT5nbG9iYWxEYXRhKCksIHdpbmRvdyk7CisgICAgICAgICAgICB3aW5k
b3dTaGVsbC0+c2V0V2luZG93KHdpbmRvdy0+dm0oKSwgd2luZG93KTsKICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICBET01XaW5kb3cqIGRvbVdpbmRvdyA9IGZyYW1lLT5kb2N1bWVudCgpLT5k
b21XaW5kb3coKTsKICAgICAgICAgICAgIGlmICh3aW5kb3dTaGVsbC0+d2luZG93KCktPmltcGwo
KSA9PSBkb21XaW5kb3cpCkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgU2NyaXB0Q2FjaGVkRnJhbWVE
YXRhOjpjbGVhcigpCiAgICAgaWYgKG1fd2luZG93cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
Vk0oKSk7CiAgICAgbV93aW5kb3dzLmNsZWFyKCk7CiAgICAgZ2NDb250cm9sbGVyKCkuZ2FyYmFn
ZUNvbGxlY3RTb29uKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDYWxsU3RhY2tGYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAKICNpbmNsdWRlIDxydW50aW1lL0FyZ0xpc3Qu
aD4KICNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWUuaD4KICNpbmNsdWRlIDxydW50aW1lL0pT
RnVuY3Rpb24uaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsRGF0YS5oPgorI2luY2x1ZGUg
PHJ1bnRpbWUvVk0uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogdXNpbmcg
bmFtZXNwYWNlIEpTQzsKQEAgLTU4LDcgKzU4LDcgQEAgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3Rh
Y2s+IGNyZWF0ZVNjcmlwdAogICAgIFZlY3RvcjxTY3JpcHRDYWxsRnJhbWU+IGZyYW1lczsKICAg
ICBpZiAoSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmN1cnJl
bnRTdGF0ZSgpKSB7CiAgICAgICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlOwotICAg
ICAgICBJbnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFjZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdGFj
a1RyYWNlLCBtYXhTdGFja1NpemUpOworICAgICAgICBJbnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFj
ZSgmZXhlYy0+dm0oKSwgc3RhY2tUcmFjZSwgbWF4U3RhY2tTaXplKTsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzdGFja1RyYWNlLnNpemUoKTsgaSsrKQogICAgICAgICAgICAgZnJh
bWVzLmFwcGVuZChTY3JpcHRDYWxsRnJhbWUoc3RhY2tUcmFjZVtpXS5mcmllbmRseUZ1bmN0aW9u
TmFtZShleGVjKSwgc3RhY2tUcmFjZVtpXS5mcmllbmRseVNvdXJjZVVSTCgpLCBzdGFja1RyYWNl
W2ldLmxpbmUoKSwgc3RhY2tUcmFjZVtpXS5jb2x1bW4oKSkpOwogICAgIH0KQEAgLTc1LDcgKzc1
LDcgQEAgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNjcmlwdAogewogICAgIFZl
Y3RvcjxTY3JpcHRDYWxsRnJhbWU+IGZyYW1lczsKICAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3Rh
Y2tUcmFjZTsKLSAgICBJbnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFjZSgmZXhlYy0+Z2xvYmFsRGF0
YSgpLCBzdGFja1RyYWNlLCBtYXhTdGFja1NpemUgKyAxKTsKKyAgICBJbnRlcnByZXRlcjo6Z2V0
U3RhY2tUcmFjZSgmZXhlYy0+dm0oKSwgc3RhY2tUcmFjZSwgbWF4U3RhY2tTaXplICsgMSk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IHN0YWNrVHJhY2Uuc2l6ZSgpID09IDEgPyAwIDogMTsgaSA8IHN0
YWNrVHJhY2Uuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgLy8gVGhpcyBlYXJseSBleGl0IGlzIG5l
Y2Vzc2FyeSB0byBtYWludGFpbiBvdXIgb2xkIGJlaGF2aW91cgogICAgICAgICAvLyBidXQgdGhl
IHN0YWNrIHRyYWNlIHdlIHByb2R1Y2Ugbm93IGlzIGNvbXBsZXRlIGFuZCBoYW5kbGVzIGFsbApA
QCAtMTA2LDcgKzEwNiw3IEBAIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBjcmVhdGVTY3Jp
cHQKICAgICBWZWN0b3I8U2NyaXB0VmFsdWU+IGFyZ3VtZW50czsKICAgICBzaXplX3QgYXJndW1l
bnRDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBmb3IgKHNpemVfdCBpID0gc2tp
cEFyZ3VtZW50Q291bnQ7IGkgPCBhcmd1bWVudENvdW50OyArK2kpCi0gICAgICAgIGFyZ3VtZW50
cy5hcHBlbmQoU2NyaXB0VmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5hcmd1bWVudChp
KSkpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKFNjcmlwdFZhbHVlKGV4ZWMtPnZtKCksIGV4
ZWMtPmFyZ3VtZW50KGkpKSk7CiAgICAgcmV0dXJuIFNjcmlwdEFyZ3VtZW50czo6Y3JlYXRlKGV4
ZWMsIGFyZ3VtZW50cyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA0LDggKzEwNCw4IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZGVzdHJveVdpbmRvd1NoZWwK
IEpTRE9NV2luZG93U2hlbGwqIFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVdpbmRvd1NoZWxsKERP
TVdyYXBwZXJXb3JsZCogd29ybGQpCiB7CiAgICAgQVNTRVJUKCFtX3dpbmRvd1NoZWxscy5jb250
YWlucyh3b3JsZCkpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSlNET01XaW5kb3dTaGVs
bDo6Y3JlYXRlU3RydWN0dXJlKCp3b3JsZC0+Z2xvYmFsRGF0YSgpLCBqc051bGwoKSk7Ci0gICAg
U3Ryb25nPEpTRE9NV2luZG93U2hlbGw+IHdpbmRvd1NoZWxsKCp3b3JsZC0+Z2xvYmFsRGF0YSgp
LCBKU0RPTVdpbmRvd1NoZWxsOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93
KCksIHN0cnVjdHVyZSwgd29ybGQpKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTRE9N
V2luZG93U2hlbGw6OmNyZWF0ZVN0cnVjdHVyZSgqd29ybGQtPnZtKCksIGpzTnVsbCgpKTsKKyAg
ICBTdHJvbmc8SlNET01XaW5kb3dTaGVsbD4gd2luZG93U2hlbGwoKndvcmxkLT52bSgpLCBKU0RP
TVdpbmRvd1NoZWxsOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCksIHN0
cnVjdHVyZSwgd29ybGQpKTsKICAgICBTdHJvbmc8SlNET01XaW5kb3dTaGVsbD4gd2luZG93U2hl
bGwyKHdpbmRvd1NoZWxsKTsKICAgICBtX3dpbmRvd1NoZWxscy5hZGQod29ybGQsIHdpbmRvd1No
ZWxsKTsKICAgICB3b3JsZC0+ZGlkQ3JlYXRlV2luZG93U2hlbGwodGhpcyk7CkBAIC0xNDgsNyAr
MTQ4LDcgQEAgU2NyaXB0VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbgogICAgIH0K
IAogICAgIG1fc291cmNlVVJMID0gc2F2ZWRTb3VyY2VVUkw7Ci0gICAgcmV0dXJuIFNjcmlwdFZh
bHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcmV0dXJuVmFsdWUpOworICAgIHJldHVybiBTY3JpcHRW
YWx1ZShleGVjLT52bSgpLCByZXR1cm5WYWx1ZSk7CiB9CiAKIFNjcmlwdFZhbHVlIFNjcmlwdENv
bnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpIApA
QCAtMTU4LDEyICsxNTgsMTIgQEAgU2NyaXB0VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVh
dGUoYwogCiBQYXNzUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gU2NyaXB0Q29udHJvbGxlcjo6Y3Jl
YXRlV29ybGQoKQogewotICAgIHJldHVybiBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZShKU0RPTVdp
bmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIHJldHVybiBET01XcmFwcGVyV29ybGQ6
OmNyZWF0ZShKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CiB9CiAKIHZvaWQgU2NyaXB0Q29udHJv
bGxlcjo6Z2V0QWxsV29ybGRzKFZlY3RvcjxSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiA+JiB3b3Js
ZHMpCiB7Ci0gICAgc3RhdGljX2Nhc3Q8V2ViQ29yZUpTQ2xpZW50RGF0YSo+KEpTRE9NV2luZG93
Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+Y2xpZW50RGF0YSktPmdldEFsbFdvcmxkcyh3b3JsZHMp
OworICAgIHN0YXRpY19jYXN0PFdlYkNvcmVKU0NsaWVudERhdGEqPihKU0RPTVdpbmRvdzo6Y29t
bW9uVk0oKS0+Y2xpZW50RGF0YSktPmdldEFsbFdvcmxkcyh3b3JsZHMpOwogfQogCiB2b2lkIFNj
cmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hlbGwoRE9NV2luZG93KiBuZXdET01XaW5kb3cs
IGJvb2wgZ29pbmdJbnRvUGFnZUNhY2hlKQpAQCAtMTcxLDcgKzE3MSw3IEBAIHZvaWQgU2NyaXB0
Q29udHJvbGxlcjo6Y2xlYXJXaW5kb3dTaGVsbCgKICAgICBpZiAobV93aW5kb3dTaGVsbHMuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogCiAgICAgZm9yIChTaGVsbE1hcDo6aXRlcmF0
b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMu
ZW5kKCk7ICsraXRlcikgewogICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9
IGl0ZXItPnZhbHVlLmdldCgpOwpAQCAtMjA2LDcgKzIwNiw3IEBAIEpTRE9NV2luZG93U2hlbGwq
IFNjcmlwdENvbnRyb2xsZXI6OmluaXQKIHsKICAgICBBU1NFUlQoIW1fd2luZG93U2hlbGxzLmNv
bnRhaW5zKHdvcmxkKSk7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayh3b3JsZC0+Z2xvYmFsRGF0
YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh3b3JsZC0+dm0oKSk7CiAKICAgICBKU0RPTVdp
bmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGNyZWF0ZVdpbmRvd1NoZWxsKHdvcmxkKTsKIApAQCAt
Mjg1LDcgKzI4NSw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6YXR0YWNoRGVidWdnZXIoSlMK
IHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQoKQogewogICAgIGZvciAoU2hl
bGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVyICE9IG1f
d2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2so
aXRlci0+a2V5LT5nbG9iYWxEYXRhKCkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhpdGVy
LT5rZXktPnZtKCkpOwogICAgICAgICBpdGVyLT52YWx1ZS0+d2luZG93KCktPnVwZGF0ZURvY3Vt
ZW50KCk7CiAgICAgfQogfQpAQCAtMzAxLDcgKzMwMSw3IEBAIEJpbmRpbmdzOjpSb290T2JqZWN0
KiBTY3JpcHRDb250cm9sbGVyOjoKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIW1fY2Fj
aGVhYmxlQmluZGluZ1Jvb3RPYmplY3QpIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgICAgIEpTTG9ja0hvbGRl
ciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgIG1fY2FjaGVhYmxl
QmluZGluZ1Jvb3RPYmplY3QgPSBCaW5kaW5nczo6Um9vdE9iamVjdDo6Y3JlYXRlKDAsIGdsb2Jh
bE9iamVjdChwbHVnaW5Xb3JsZCgpKSk7CiAgICAgfQogICAgIHJldHVybiBtX2NhY2hlYWJsZUJp
bmRpbmdSb290T2JqZWN0LmdldCgpOwpAQCAtMzEzLDcgKzMxMyw3IEBAIEJpbmRpbmdzOjpSb290
T2JqZWN0KiBTY3JpcHRDb250cm9sbGVyOjoKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAo
IW1fYmluZGluZ1Jvb3RPYmplY3QpIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgIG1fYmluZGluZ1Jvb3RP
YmplY3QgPSBCaW5kaW5nczo6Um9vdE9iamVjdDo6Y3JlYXRlKDAsIGdsb2JhbE9iamVjdChwbHVn
aW5Xb3JsZCgpKSk7CiAgICAgfQogICAgIHJldHVybiBtX2JpbmRpbmdSb290T2JqZWN0LmdldCgp
OwpAQCAtNDM0LDcgKzQzNCw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYW51cFNjcmlw
dE9iamUKIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVjdHMoKQogewot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7
CiAKICAgICBSb290T2JqZWN0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jvb3RPYmplY3Rz
LmVuZCgpOwogICAgIGZvciAoUm9vdE9iamVjdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jv
b3RPYmplY3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKQEAgLTQ3MSw3ICs0NzEsNyBAQCBT
Y3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpleGVjdXRlU2NyCiAKIGJvb2wgU2NyaXB0Q29u
dHJvbGxlcjo6c2hvdWxkQnlwYXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5KCkKIHsK
LSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERh
dGEoKS0+dG9wQ2FsbEZyYW1lOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gSlNET01XaW5k
b3c6OmNvbW1vblZNKCktPnRvcENhbGxGcmFtZTsKICAgICBpZiAoIWNhbGxGcmFtZSB8fCBjYWxs
RnJhbWUgPT0gQ2FsbEZyYW1lOjpub0NhbGxlcigpKSAKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIERPTVdyYXBwZXJXb3JsZCogZG9tV3JhcHBlcldvcmxkID0gY3VycmVudFdvcmxkKGNhbGxG
cmFtZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVy
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENv
bnRyb2xsZXJNYWMubW0JKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsx
MDEsNyBAQCBXZWJTY3JpcHRPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OndpbmRvCiAgICAgICAg
IHJldHVybiAwOwogCiAgICAgaWYgKCFtX3dpbmRvd1NjcmlwdE9iamVjdCkgewotICAgICAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOworICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uVk0oKSk7CiAgICAgICAgIEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3QgPSBiaW5k
aW5nUm9vdE9iamVjdCgpOwogICAgICAgICBtX3dpbmRvd1NjcmlwdE9iamVjdCA9IFtXZWJTY3Jp
cHRPYmplY3Qgc2NyaXB0T2JqZWN0Rm9ySlNPYmplY3Q6dG9SZWYod2luZG93U2hlbGwocGx1Z2lu
V29ybGQoKSkpIG9yaWdpblJvb3RPYmplY3Q6cm9vdCByb290T2JqZWN0OnJvb3RdOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZl
ci5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdERlYnVnU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjczLDcgKzI3Myw3IEBAIHZv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGF1c2UKICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICBqc0NhbGxGcmFtZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIGxpc3Rl
bmVyLT5kaWRQYXVzZShzdGF0ZSwgU2NyaXB0VmFsdWUoc3RhdGUtPmdsb2JhbERhdGEoKSwganND
YWxsRnJhbWUpLCBTY3JpcHRWYWx1ZSgpKTsKKyAgICBsaXN0ZW5lci0+ZGlkUGF1c2Uoc3RhdGUs
IFNjcmlwdFZhbHVlKHN0YXRlLT52bSgpLCBqc0NhbGxGcmFtZSksIFNjcmlwdFZhbHVlKCkpOwog
fQogCiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZENvbnRpbnVlKFNjcmlwdERl
YnVnTGlzdGVuZXIqIGxpc3RlbmVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIFN0cmluZyBldmVudExpc3RlbmVySGFuZGxlckJvZHko
RG9jdW1lbnQKICAgICBBU1NFUlQoanNMaXN0ZW5lcik7CiAgICAgaWYgKCFqc0xpc3RlbmVyKQog
ICAgICAgICByZXR1cm4gIiI7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soanNMaXN0ZW5lci0+aXNv
bGF0ZWRXb3JsZCgpLT5nbG9iYWxEYXRhKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGpzTGlz
dGVuZXItPmlzb2xhdGVkV29ybGQoKS0+dm0oKSk7CiAgICAgSlNDOjpKU09iamVjdCoganNGdW5j
dGlvbiA9IGpzTGlzdGVuZXItPmpzRnVuY3Rpb24oZG9jdW1lbnQpOwogICAgIGlmICghanNGdW5j
dGlvbikKICAgICAgICAgcmV0dXJuICIiOwpAQCAtMTEzLDExICsxMTMsMTEgQEAgU2NyaXB0VmFs
dWUgZXZlbnRMaXN0ZW5lckhhbmRsZXIoRG9jdW1lbgogICAgIEFTU0VSVChqc0xpc3RlbmVyKTsK
ICAgICBpZiAoIWpzTGlzdGVuZXIpCiAgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOwotICAg
IEpTTG9ja0hvbGRlciBsb2NrKGpzTGlzdGVuZXItPmlzb2xhdGVkV29ybGQoKS0+Z2xvYmFsRGF0
YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhqc0xpc3RlbmVyLT5pc29sYXRlZFdvcmxkKCkt
PnZtKCkpOwogICAgIEpTQzo6SlNPYmplY3QqIGpzRnVuY3Rpb24gPSBqc0xpc3RlbmVyLT5qc0Z1
bmN0aW9uKGRvY3VtZW50KTsKICAgICBpZiAoIWpzRnVuY3Rpb24pCiAgICAgICAgIHJldHVybiBT
Y3JpcHRWYWx1ZSgpOwotICAgIHJldHVybiBTY3JpcHRWYWx1ZSgqanNMaXN0ZW5lci0+aXNvbGF0
ZWRXb3JsZCgpLT5nbG9iYWxEYXRhKCksIGpzRnVuY3Rpb24pOworICAgIHJldHVybiBTY3JpcHRW
YWx1ZSgqanNMaXN0ZW5lci0+aXNvbGF0ZWRXb3JsZCgpLT52bSgpLCBqc0Z1bmN0aW9uKTsKIH0K
IAogU2NyaXB0U3RhdGUqIGV2ZW50TGlzdGVuZXJIYW5kbGVyU2NyaXB0U3RhdGUoRnJhbWUqIGZy
YW1lLCBFdmVudExpc3RlbmVyKiBldmVudExpc3RlbmVyKQpAQCAtMTM4LDcgKzEzOCw3IEBAIGJv
b2wgZXZlbnRMaXN0ZW5lckhhbmRsZXJMb2NhdGlvbihEb2N1bWUKICAgICBBU1NFUlQoanNMaXN0
ZW5lcik7CiAgICAgaWYgKCFqc0xpc3RlbmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
SlNMb2NrSG9sZGVyIGxvY2soanNMaXN0ZW5lci0+aXNvbGF0ZWRXb3JsZCgpLT5nbG9iYWxEYXRh
KCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGpzTGlzdGVuZXItPmlzb2xhdGVkV29ybGQoKS0+
dm0oKSk7CiAgICAgSlNDOjpKU09iamVjdCoganNPYmplY3QgPSBqc0xpc3RlbmVyLT5qc0Z1bmN0
aW9uKGRvY3VtZW50KTsKICAgICBpZiAoIWpzT2JqZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9u
Q2FsbC5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksNyBA
QCBTY3JpcHRWYWx1ZSBTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwoYm9vCiAgICAgICAgIHJldHVy
biBTY3JpcHRWYWx1ZSgpOwogICAgIH0KIAotICAgIHJldHVybiBTY3JpcHRWYWx1ZShtX2V4ZWMt
Pmdsb2JhbERhdGEoKSwgcmVzdWx0KTsKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUobV9leGVjLT52
bSgpLCByZXN1bHQpOwogfQogCiBTY3JpcHRWYWx1ZSBTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwo
KQpAQCAtMjEzLDcgKzIxMyw3IEBAIFNjcmlwdFZhbHVlIFNjcmlwdENhbGxiYWNrOjpjYWxsKCkK
ICAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIFNjcmlw
dFZhbHVlKG1fZXhlYy0+Z2xvYmFsRGF0YSgpLCByZXN1bHQpOworICAgIHJldHVybiBTY3JpcHRW
YWx1ZShtX2V4ZWMtPnZtKCksIHJlc3VsdCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEdDRXZlbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEdDRXZlbnQuY3BwCShy
ZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRHQ0V2
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogCiAjaW5jbHVkZSAiSlNE
T01XaW5kb3cuaCIKICNpbmNsdWRlIDxoZWFwL0hlYXAuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pT
R2xvYmFsRGF0YS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KICNpbmNsdWRlIDx3dGYvQ3Vy
cmVudFRpbWUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsOSArNDUsOSBAQCB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCiB2b2lkIFNjcmlwdEdDRXZlbnQ6OmdldEhlYXBTaXplKEhlYXBJ
bmZvJiBpbmZvKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IEpTRE9NV2luZG93
Ojpjb21tb25KU0dsb2JhbERhdGEoKTsKLSAgICBpbmZvLnRvdGFsSlNIZWFwU2l6ZSA9IGdsb2Jh
bERhdGEtPmhlYXAuY2FwYWNpdHkoKTsKLSAgICBpbmZvLnVzZWRKU0hlYXBTaXplID0gZ2xvYmFs
RGF0YS0+aGVhcC5zaXplKCk7CisgICAgVk0qIHZtID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCk7
CisgICAgaW5mby50b3RhbEpTSGVhcFNpemUgPSB2bS0+aGVhcC5jYXBhY2l0eSgpOworICAgIGlu
Zm8udXNlZEpTSGVhcFNpemUgPSB2bS0+aGVhcC5zaXplKCk7CiAgICAgaW5mby5qc0hlYXBTaXpl
TGltaXQgPSAwOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dE9iamVjdC5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEzICs0NSwxMyBAQCB1
c2luZyBuYW1lc3BhY2UgSlNDOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTY3JpcHRPYmplY3Q6
OlNjcmlwdE9iamVjdChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIEpTT2JqZWN0KiBvYmplY3Qp
Ci0gICAgOiBTY3JpcHRWYWx1ZShzY3JpcHRTdGF0ZS0+Z2xvYmFsRGF0YSgpLCBvYmplY3QpCisg
ICAgOiBTY3JpcHRWYWx1ZShzY3JpcHRTdGF0ZS0+dm0oKSwgb2JqZWN0KQogICAgICwgbV9zY3Jp
cHRTdGF0ZShzY3JpcHRTdGF0ZSkKIHsKIH0KIAogU2NyaXB0T2JqZWN0OjpTY3JpcHRPYmplY3Qo
U2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBTY3JpcHRWYWx1ZSYgc2NyaXB0VmFsdWUp
Ci0gICAgOiBTY3JpcHRWYWx1ZShzY3JpcHRTdGF0ZS0+Z2xvYmFsRGF0YSgpLCBzY3JpcHRWYWx1
ZS5qc1ZhbHVlKCkpCisgICAgOiBTY3JpcHRWYWx1ZShzY3JpcHRTdGF0ZS0+dm0oKSwgc2NyaXB0
VmFsdWUuanNWYWx1ZSgpKQogICAgICwgbV9zY3JpcHRTdGF0ZShzY3JpcHRTdGF0ZSkKIHsKIH0K
QEAgLTY4LDcgKzY4LDcgQEAgc3RhdGljIGJvb2wgaGFuZGxlRXhjZXB0aW9uKFNjcmlwdFN0YXRl
KgogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUs
IGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFNjcmlwdE9iamVjdCYgdmFsdWUpCiB7CiAgICAgSlNM
b2NrSG9sZGVyIGxvY2soc2NyaXB0U3RhdGUpOwotICAgIHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPnB1dERpcmVjdChzY3JpcHRTdGF0ZS0+Z2xvYmFsRGF0YSgpLCBJZGVudGlm
aWVyKHNjcmlwdFN0YXRlLCBuYW1lKSwgdmFsdWUuanNPYmplY3QoKSk7CisgICAgc2NyaXB0U3Rh
dGUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHV0RGlyZWN0KHNjcmlwdFN0YXRlLT52bSgpLCBJ
ZGVudGlmaWVyKHNjcmlwdFN0YXRlLCBuYW1lKSwgdmFsdWUuanNPYmplY3QoKSk7CiAgICAgcmV0
dXJuIGhhbmRsZUV4Y2VwdGlvbihzY3JpcHRTdGF0ZSk7CiB9CiAKQEAgLTc3LDcgKzc3LDcgQEAg
Ym9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZQogewogICAgIEpTTG9ja0hv
bGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0U3RhdGUtPmxleGljYWxHbG9i
YWxPYmplY3QoKSk7Ci0gICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3Qoc2NyaXB0U3RhdGUtPmds
b2JhbERhdGEoKSwgSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSksIHRvSlMoc2NyaXB0U3Rh
dGUsIGdsb2JhbE9iamVjdCwgdmFsdWUpKTsKKyAgICBnbG9iYWxPYmplY3QtPnB1dERpcmVjdChz
Y3JpcHRTdGF0ZS0+dm0oKSwgSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSksIHRvSlMoc2Ny
aXB0U3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUpKTsKICAgICByZXR1cm4gaGFuZGxlRXhjZXB0
aW9uKHNjcmlwdFN0YXRlKTsKIH0KIApAQCAtODUsNyArODUsNyBAQCBib29sIFNjcmlwdEdsb2Jh
bE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0
U3RhdGUpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLSAg
ICBnbG9iYWxPYmplY3QtPnB1dERpcmVjdChzY3JpcHRTdGF0ZS0+Z2xvYmFsRGF0YSgpLCBJZGVu
dGlmaWVyKHNjcmlwdFN0YXRlLCBuYW1lKSwgdG9KUyhzY3JpcHRTdGF0ZSwgZ2xvYmFsT2JqZWN0
LCB2YWx1ZSkpOworICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KHNjcmlwdFN0YXRlLT52bSgp
LCBJZGVudGlmaWVyKHNjcmlwdFN0YXRlLCBuYW1lKSwgdG9KUyhzY3JpcHRTdGF0ZSwgZ2xvYmFs
T2JqZWN0LCB2YWx1ZSkpOwogICAgIHJldHVybiBoYW5kbGVFeGNlcHRpb24oc2NyaXB0U3RhdGUp
OwogfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdFN0YXRlLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3
LDcgQEAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFdvcmtlckNvbnRleHQ7
CiAKIC8vIFRoZSBpZGVhIGlzIHRvIGV4cG9zZSAic3RhdGUtbGlrZSIgbWV0aG9kcyAoaGFkRXhj
ZXB0aW9uLCBhbmQgYW55IG90aGVyCi0vLyBtZXRob2RzIHdoZXJlIEV4ZWNTdGF0ZSBqdXN0IGRp
cHMgaW50byBnbG9iYWxEYXRhKSBvZiBKU0M6OkV4ZWNTdGF0ZSBhcyBhCisvLyBtZXRob2RzIHdo
ZXJlIEV4ZWNTdGF0ZSBqdXN0IGRpcHMgaW50byB2bSkgb2YgSlNDOjpFeGVjU3RhdGUgYXMgYQog
Ly8gc2VwYXJhdGUgYWJzdHJhY3Rpb24uCiAvLyBGb3Igbm93LCB0aGUgc2VwYXJhdGlvbiBpcyBw
dXJlbHkgYnkgY29udmVudGlvbi4KIHR5cGVkZWYgSlNDOjpFeGVjU3RhdGUgU2NyaXB0U3RhdGU7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCShyZXZp
c2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCBQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gU2NyaXB0CiAKIFNjcmlwdFZhbHVlIFNjcmlwdFZhbHVlOjpkZXNlcmlh
bGl6ZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogdmFs
dWUsIFNlcmlhbGl6YXRpb25FcnJvck1vZGUgdGhyb3dFeGNlcHRpb25zKQogewotICAgIHJldHVy
biBTY3JpcHRWYWx1ZShzY3JpcHRTdGF0ZS0+Z2xvYmFsRGF0YSgpLCB2YWx1ZS0+ZGVzZXJpYWxp
emUoc2NyaXB0U3RhdGUsIHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIDAsIHRo
cm93RXhjZXB0aW9ucykpOworICAgIHJldHVybiBTY3JpcHRWYWx1ZShzY3JpcHRTdGF0ZS0+dm0o
KSwgdmFsdWUtPmRlc2VyaWFsaXplKHNjcmlwdFN0YXRlLCBzY3JpcHRTdGF0ZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLCAwLCB0aHJvd0V4Y2VwdGlvbnMpKTsKIH0KIAogI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmgJKHJl
dmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgU2VyaWFsaXplZFNjcmlw
dFZhbHVlOwogY2xhc3MgU2NyaXB0VmFsdWUgewogcHVibGljOgogICAgIFNjcmlwdFZhbHVlKCkg
eyB9Ci0gICAgU2NyaXB0VmFsdWUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkgOiBtX3ZhbHVlKGdsb2JhbERhdGEsIHZhbHVlKSB7fQorICAgIFNjcmlw
dFZhbHVlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIDogbV92YWx1ZSh2bSwgdmFs
dWUpIHt9CiAgICAgdmlydHVhbCB+U2NyaXB0VmFsdWUoKSB7fQogCiAgICAgSlNDOjpKU1ZhbHVl
IGpzVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRXcmFwcGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRXcmFwcGFibGUuaAkocmV2aXNpb24gMTQ4NjU1
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0V3JhcHBhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDxoZWFwL1dlYWsuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7Ci1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIGNsYXNzIFdlYWtI
YW5kbGVPd25lcjsKIH0KIApAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBKU0RPTVdyYXBwZXI7CiBj
bGFzcyBTY3JpcHRXcmFwcGFibGUgewogcHVibGljOgogICAgIEpTRE9NV3JhcHBlciogd3JhcHBl
cigpIGNvbnN0OwotICAgIHZvaWQgc2V0V3JhcHBlcihKU0M6OkpTR2xvYmFsRGF0YSYsIEpTRE9N
V3JhcHBlciosIEpTQzo6V2Vha0hhbmRsZU93bmVyKiwgdm9pZCopOworICAgIHZvaWQgc2V0V3Jh
cHBlcihKU0M6OlZNJiwgSlNET01XcmFwcGVyKiwgSlNDOjpXZWFrSGFuZGxlT3duZXIqLCB2b2lk
Kik7CiAgICAgdm9pZCBjbGVhcldyYXBwZXIoSlNET01XcmFwcGVyKik7CiAKIHByaXZhdGU6Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRXcmFwcGFibGVJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0V3JhcHBhYmxl
SW5saW5lcy5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRXcmFwcGFibGVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcg
QEAgaW5saW5lIEpTRE9NV3JhcHBlciogU2NyaXB0V3JhcHBhYmxlOjp3cgogICAgIHJldHVybiBt
X3dyYXBwZXIuZ2V0KCk7CiB9CiAKLWlubGluZSB2b2lkIFNjcmlwdFdyYXBwYWJsZTo6c2V0V3Jh
cHBlcihKU0M6OkpTR2xvYmFsRGF0YSYsIEpTRE9NV3JhcHBlciogd3JhcHBlciwgSlNDOjpXZWFr
SGFuZGxlT3duZXIqIHdyYXBwZXJPd25lciwgdm9pZCogY29udGV4dCkKK2lubGluZSB2b2lkIFNj
cmlwdFdyYXBwYWJsZTo6c2V0V3JhcHBlcihKU0M6OlZNJiwgSlNET01XcmFwcGVyKiB3cmFwcGVy
LCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyLCB2b2lkKiBjb250ZXh0KQogewog
ICAgIEFTU0VSVCghbV93cmFwcGVyKTsKICAgICBtX3dyYXBwZXIgPSBKU0M6OlBhc3NXZWFrPEpT
RE9NV3JhcHBlcj4od3JhcHBlciwgd3JhcHBlck93bmVyLCBjb250ZXh0KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNw
cAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4MywxNCArMTM4MywxNCBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIFRydWVUYWc6CiAgICAgICAgICAgICByZXR1cm4ganNC
b29sZWFuKHRydWUpOwogICAgICAgICBjYXNlIEZhbHNlT2JqZWN0VGFnOiB7Ci0gICAgICAgICAg
ICBCb29sZWFuT2JqZWN0KiBvYmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUobV9leGVjLT5nbG9i
YWxEYXRhKCksIG1fZ2xvYmFsT2JqZWN0LT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOwotICAg
ICAgICAgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKG1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc0Jv
b2xlYW4oZmFsc2UpKTsKKyAgICAgICAgICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IEJvb2xlYW5P
YmplY3Q6OmNyZWF0ZShtX2V4ZWMtPnZtKCksIG1fZ2xvYmFsT2JqZWN0LT5ib29sZWFuT2JqZWN0
U3RydWN0dXJlKCkpOworICAgICAgICAgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKG1fZXhlYy0+
dm0oKSwganNCb29sZWFuKGZhbHNlKSk7CiAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZChv
YmopOwogICAgICAgICAgICAgcmV0dXJuIG9iajsKICAgICAgICAgfQogICAgICAgICBjYXNlIFRy
dWVPYmplY3RUYWc6IHsKLSAgICAgICAgICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IEJvb2xlYW5P
YmplY3Q6OmNyZWF0ZShtX2V4ZWMtPmdsb2JhbERhdGEoKSwgbV9nbG9iYWxPYmplY3QtPmJvb2xl
YW5PYmplY3RTdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICBvYmotPnNldEludGVybmFsVmFsdWUo
bV9leGVjLT5nbG9iYWxEYXRhKCksIGpzQm9vbGVhbih0cnVlKSk7CisgICAgICAgICAgICBCb29s
ZWFuT2JqZWN0KiBvYmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUobV9leGVjLT52bSgpLCBtX2ds
b2JhbE9iamVjdC0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIG9iai0+
c2V0SW50ZXJuYWxWYWx1ZShtX2V4ZWMtPnZtKCksIGpzQm9vbGVhbih0cnVlKSk7CiAgICAgICAg
ICAgICAgbV9nY0J1ZmZlci5hcHBlbmQob2JqKTsKICAgICAgICAgICAgIHJldHVybiBvYmo7CiAg
ICAgICAgIH0KQEAgLTE0ODIsNyArMTQ4Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1
cm4gY2FjaGVkU3RyaW5nLT5qc1N0cmluZyhtX2V4ZWMpOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgRW1wdHlTdHJpbmdUYWc6Ci0gICAgICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZygmbV9l
eGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoJm1f
ZXhlYy0+dm0oKSk7CiAgICAgICAgIGNhc2UgU3RyaW5nT2JqZWN0VGFnOiB7CiAgICAgICAgICAg
ICBDYWNoZWRTdHJpbmdSZWYgY2FjaGVkU3RyaW5nOwogICAgICAgICAgICAgaWYgKCFyZWFkU3Ry
aW5nRGF0YShjYWNoZWRTdHJpbmcpKQpAQCAtMTQ5Miw3ICsxNDkyLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHJldHVybiBvYmo7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBFbXB0eVN0cmlu
Z09iamVjdFRhZzogewotICAgICAgICAgICAgU3RyaW5nT2JqZWN0KiBvYmogPSBjb25zdHJ1Y3RT
dHJpbmcobV9leGVjLCBtX2dsb2JhbE9iamVjdCwganNFbXB0eVN0cmluZygmbV9leGVjLT5nbG9i
YWxEYXRhKCkpKTsKKyAgICAgICAgICAgIFN0cmluZ09iamVjdCogb2JqID0gY29uc3RydWN0U3Ry
aW5nKG1fZXhlYywgbV9nbG9iYWxPYmplY3QsIGpzRW1wdHlTdHJpbmcoJm1fZXhlYy0+dm0oKSkp
OwogICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQob2JqKTsKICAgICAgICAgICAgIHJldHVy
biBvYmo7CiAgICAgICAgIH0KQEAgLTE1MDUsNyArMTUwNSw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgICAgIFJlZ0V4cEZsYWdzIHJlRmxh
Z3MgPSByZWdFeHBGbGFncyhmbGFncy0+c3RyaW5nKCkpOwogICAgICAgICAgICAgQVNTRVJUKHJl
RmxhZ3MgIT0gSW52YWxpZEZsYWdzKTsKLSAgICAgICAgICAgIFJlZ0V4cCogcmVnRXhwID0gUmVn
RXhwOjpjcmVhdGUobV9leGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4tPnN0cmluZygpLCByZUZs
YWdzKTsKKyAgICAgICAgICAgIFJlZ0V4cCogcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUobV9leGVj
LT52bSgpLCBwYXR0ZXJuLT5zdHJpbmcoKSwgcmVGbGFncyk7CiAgICAgICAgICAgICByZXR1cm4g
UmVnRXhwT2JqZWN0OjpjcmVhdGUobV9leGVjLCBtX2V4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwgbV9nbG9iYWxPYmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOyAKICAgICAgICAg
fQogICAgICAgICBjYXNlIE9iamVjdFJlZmVyZW5jZVRhZzogewpAQCAtMTg0OSw3ICsxODQ5LDcg
QEAgSlNWYWx1ZSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaQogU2NyaXB0VmFsdWUg
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZUZvckluc3BlY3RvcihTY3JpcHRTdGF0
ZSogc2NyaXB0U3RhdGUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlc2VyaWFsaXplKHNjcmlw
dFN0YXRlLCBzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwKTsKLSAgICByZXR1
cm4gU2NyaXB0VmFsdWUoc2NyaXB0U3RhdGUtPmdsb2JhbERhdGEoKSwgdmFsdWUpOworICAgIHJl
dHVybiBTY3JpcHRWYWx1ZShzY3JpcHRTdGF0ZS0+dm0oKSwgdmFsdWUpOwogfQogI2VuZGlmCiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnRE
YXRhLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dl
YkNvcmVKU0NsaWVudERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDEwIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2ViQ29yZUpTQ2xpZW50RGF0YSA6IHB1Ymxp
YyBKU0M6OkpTR2xvYmFsRGF0YTo6Q2xpZW50RGF0YSB7CitjbGFzcyBXZWJDb3JlSlNDbGllbnRE
YXRhIDogcHVibGljIEpTQzo6Vk06OkNsaWVudERhdGEgewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFdlYkNvcmVKU0NsaWVudERhdGEpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBm
cmllbmQgY2xhc3MgSlNHbG9iYWxEYXRhV29ybGRJdGVyYXRvcjsKLSAgICBmcmllbmQgdm9pZCBp
bml0Tm9ybWFsV29ybGRDbGllbnREYXRhKEpTQzo6SlNHbG9iYWxEYXRhKik7CisgICAgZnJpZW5k
IGNsYXNzIFZNV29ybGRJdGVyYXRvcjsKKyAgICBmcmllbmQgdm9pZCBpbml0Tm9ybWFsV29ybGRD
bGllbnREYXRhKEpTQzo6Vk0qKTsKIAogcHVibGljOgogICAgIFdlYkNvcmVKU0NsaWVudERhdGEo
KSB7IH0KQEAgLTcwLDExICs3MCwxMSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxET01XcmFwcGVy
V29ybGQ+IG1fbm9ybWFsV29ybGQ7CiB9OwogCi1pbmxpbmUgdm9pZCBpbml0Tm9ybWFsV29ybGRD
bGllbnREYXRhKEpTQzo6SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQoraW5saW5lIHZvaWQgaW5p
dE5vcm1hbFdvcmxkQ2xpZW50RGF0YShKU0M6OlZNKiB2bSkKIHsKICAgICBXZWJDb3JlSlNDbGll
bnREYXRhKiB3ZWJDb3JlSlNDbGllbnREYXRhID0gbmV3IFdlYkNvcmVKU0NsaWVudERhdGE7Ci0g
ICAgZ2xvYmFsRGF0YS0+Y2xpZW50RGF0YSA9IHdlYkNvcmVKU0NsaWVudERhdGE7IC8vIH5KU0ds
b2JhbERhdGEgZGVsZXRlcyB0aGlzIHBvaW50ZXIuCi0gICAgd2ViQ29yZUpTQ2xpZW50RGF0YS0+
bV9ub3JtYWxXb3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKGdsb2JhbERhdGEsIHRydWUp
OworICAgIHZtLT5jbGllbnREYXRhID0gd2ViQ29yZUpTQ2xpZW50RGF0YTsgLy8gflZNIGRlbGV0
ZXMgdGhpcyBwb2ludGVyLgorICAgIHdlYkNvcmVKU0NsaWVudERhdGEtPm1fbm9ybWFsV29ybGQg
PSBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZSh2bSwgdHJ1ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENv
bnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dv
cmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTYsNTUgKzU2LDU1IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OldvcmtlclNjcmlwdENvbnRyb2xsZXIo
V29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCkKLSAgICA6IG1fZ2xvYmFsRGF0YShKU0dsb2Jh
bERhdGE6OmNyZWF0ZSgpKQorICAgIDogbV92bShWTTo6Y3JlYXRlKCkpCiAgICAgLCBtX3dvcmtl
ckNvbnRleHQod29ya2VyQ29udGV4dCkKLSAgICAsIG1fd29ya2VyQ29udGV4dFdyYXBwZXIoKm1f
Z2xvYmFsRGF0YSkKKyAgICAsIG1fd29ya2VyQ29udGV4dFdyYXBwZXIoKm1fdm0pCiAgICAgLCBt
X2V4ZWN1dGlvbkZvcmJpZGRlbihmYWxzZSkKIHsKLSAgICBpbml0Tm9ybWFsV29ybGRDbGllbnRE
YXRhKG1fZ2xvYmFsRGF0YS5nZXQoKSk7CisgICAgaW5pdE5vcm1hbFdvcmxkQ2xpZW50RGF0YSht
X3ZtLmdldCgpKTsKIH0KIAogV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6fldvcmtlclNjcmlwdENv
bnRyb2xsZXIoKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbERhdGEoKSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2sodm0oKSk7CiAgICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci5jbGVh
cigpOwotICAgIG1fZ2xvYmFsRGF0YS5jbGVhcigpOworICAgIG1fdm0uY2xlYXIoKTsKIH0KIAog
dm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjppbml0U2NyaXB0KCkKIHsKICAgICBBU1NFUlQo
IW1fd29ya2VyQ29udGV4dFdyYXBwZXIpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2sobV9nbG9i
YWxEYXRhLmdldCgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX3ZtLmdldCgpKTsKIAogICAg
IC8vIEV4cGxpY2l0bHkgcHJvdGVjdCB0aGUgZ2xvYmFsIG9iamVjdCdzIHByb3RvdHlwZSBzbyBp
dCBpc24ndCBjb2xsZWN0ZWQKICAgICAvLyB3aGVuIHdlIGFsbG9jYXRlIHRoZSBnbG9iYWwgb2Jq
ZWN0LiAoT25jZSB0aGUgZ2xvYmFsIG9iamVjdCBpcyBmdWxseQogICAgIC8vIGNvbnN0cnVjdGVk
LCBpdCBjYW4gbWFyayBpdHMgb3duIHByb3RvdHlwZS4pCi0gICAgU3RydWN0dXJlKiB3b3JrZXJD
b250ZXh0UHJvdG90eXBlU3RydWN0dXJlID0gSlNXb3JrZXJDb250ZXh0UHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUoKm1fZ2xvYmFsRGF0YSwgMCwganNOdWxsKCkpOwotICAgIFN0cm9uZzxKU1dv
cmtlckNvbnRleHRQcm90b3R5cGU+IHdvcmtlckNvbnRleHRQcm90b3R5cGUoKm1fZ2xvYmFsRGF0
YSwgSlNXb3JrZXJDb250ZXh0UHJvdG90eXBlOjpjcmVhdGUoKm1fZ2xvYmFsRGF0YSwgMCwgd29y
a2VyQ29udGV4dFByb3RvdHlwZVN0cnVjdHVyZSkpOworICAgIFN0cnVjdHVyZSogd29ya2VyQ29u
dGV4dFByb3RvdHlwZVN0cnVjdHVyZSA9IEpTV29ya2VyQ29udGV4dFByb3RvdHlwZTo6Y3JlYXRl
U3RydWN0dXJlKCptX3ZtLCAwLCBqc051bGwoKSk7CisgICAgU3Ryb25nPEpTV29ya2VyQ29udGV4
dFByb3RvdHlwZT4gd29ya2VyQ29udGV4dFByb3RvdHlwZSgqbV92bSwgSlNXb3JrZXJDb250ZXh0
UHJvdG90eXBlOjpjcmVhdGUoKm1fdm0sIDAsIHdvcmtlckNvbnRleHRQcm90b3R5cGVTdHJ1Y3R1
cmUpKTsKIAogICAgIGlmIChtX3dvcmtlckNvbnRleHQtPmlzRGVkaWNhdGVkV29ya2VyQ29udGV4
dCgpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogZGVkaWNhdGVkQ29udGV4dFByb3RvdHlwZVN0cnVj
dHVyZSA9IEpTRGVkaWNhdGVkV29ya2VyQ29udGV4dFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJl
KCptX2dsb2JhbERhdGEsIDAsIHdvcmtlckNvbnRleHRQcm90b3R5cGUuZ2V0KCkpOwotICAgICAg
ICBTdHJvbmc8SlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0UHJvdG90eXBlPiBkZWRpY2F0ZWRDb250
ZXh0UHJvdG90eXBlKCptX2dsb2JhbERhdGEsIEpTRGVkaWNhdGVkV29ya2VyQ29udGV4dFByb3Rv
dHlwZTo6Y3JlYXRlKCptX2dsb2JhbERhdGEsIDAsIGRlZGljYXRlZENvbnRleHRQcm90b3R5cGVT
dHJ1Y3R1cmUpKTsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBKU0RlZGljYXRlZFdv
cmtlckNvbnRleHQ6OmNyZWF0ZVN0cnVjdHVyZSgqbV9nbG9iYWxEYXRhLCAwLCBkZWRpY2F0ZWRD
b250ZXh0UHJvdG90eXBlLmdldCgpKTsKLQotICAgICAgICBtX3dvcmtlckNvbnRleHRXcmFwcGVy
LnNldCgqbV9nbG9iYWxEYXRhLCBKU0RlZGljYXRlZFdvcmtlckNvbnRleHQ6OmNyZWF0ZSgqbV9n
bG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIHN0YXRpY19jYXN0PERlZGljYXRlZFdvcmtlckNvbnRleHQq
PihtX3dvcmtlckNvbnRleHQpKSk7Ci0gICAgICAgIHdvcmtlckNvbnRleHRQcm90b3R5cGVTdHJ1
Y3R1cmUtPnNldEdsb2JhbE9iamVjdCgqbV9nbG9iYWxEYXRhLCBtX3dvcmtlckNvbnRleHRXcmFw
cGVyLmdldCgpKTsKLSAgICAgICAgZGVkaWNhdGVkQ29udGV4dFByb3RvdHlwZVN0cnVjdHVyZS0+
c2V0R2xvYmFsT2JqZWN0KCptX2dsb2JhbERhdGEsIG1fd29ya2VyQ29udGV4dFdyYXBwZXIuZ2V0
KCkpOworICAgICAgICBTdHJ1Y3R1cmUqIGRlZGljYXRlZENvbnRleHRQcm90b3R5cGVTdHJ1Y3R1
cmUgPSBKU0RlZGljYXRlZFdvcmtlckNvbnRleHRQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSgq
bV92bSwgMCwgd29ya2VyQ29udGV4dFByb3RvdHlwZS5nZXQoKSk7CisgICAgICAgIFN0cm9uZzxK
U0RlZGljYXRlZFdvcmtlckNvbnRleHRQcm90b3R5cGU+IGRlZGljYXRlZENvbnRleHRQcm90b3R5
cGUoKm1fdm0sIEpTRGVkaWNhdGVkV29ya2VyQ29udGV4dFByb3RvdHlwZTo6Y3JlYXRlKCptX3Zt
LCAwLCBkZWRpY2F0ZWRDb250ZXh0UHJvdG90eXBlU3RydWN0dXJlKSk7CisgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gSlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0OjpjcmVhdGVTdHJ1Y3R1
cmUoKm1fdm0sIDAsIGRlZGljYXRlZENvbnRleHRQcm90b3R5cGUuZ2V0KCkpOworCisgICAgICAg
IG1fd29ya2VyQ29udGV4dFdyYXBwZXIuc2V0KCptX3ZtLCBKU0RlZGljYXRlZFdvcmtlckNvbnRl
eHQ6OmNyZWF0ZSgqbV92bSwgc3RydWN0dXJlLCBzdGF0aWNfY2FzdDxEZWRpY2F0ZWRXb3JrZXJD
b250ZXh0Kj4obV93b3JrZXJDb250ZXh0KSkpOworICAgICAgICB3b3JrZXJDb250ZXh0UHJvdG90
eXBlU3RydWN0dXJlLT5zZXRHbG9iYWxPYmplY3QoKm1fdm0sIG1fd29ya2VyQ29udGV4dFdyYXBw
ZXIuZ2V0KCkpOworICAgICAgICBkZWRpY2F0ZWRDb250ZXh0UHJvdG90eXBlU3RydWN0dXJlLT5z
ZXRHbG9iYWxPYmplY3QoKm1fdm0sIG1fd29ya2VyQ29udGV4dFdyYXBwZXIuZ2V0KCkpOwogICAg
ICAgICBBU1NFUlQoc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSA9PSBtX3dvcmtlckNvbnRleHRX
cmFwcGVyKTsKICAgICAgICAgQVNTRVJUKG1fd29ya2VyQ29udGV4dFdyYXBwZXItPnN0cnVjdHVy
ZSgpLT5nbG9iYWxPYmplY3QoKSA9PSBtX3dvcmtlckNvbnRleHRXcmFwcGVyKTsKLSAgICAgICAg
d29ya2VyQ29udGV4dFByb3RvdHlwZS0+c3RydWN0dXJlKCktPnNldEdsb2JhbE9iamVjdCgqbV9n
bG9iYWxEYXRhLCBtX3dvcmtlckNvbnRleHRXcmFwcGVyLmdldCgpKTsKLSAgICAgICAgZGVkaWNh
dGVkQ29udGV4dFByb3RvdHlwZS0+c3RydWN0dXJlKCktPnNldEdsb2JhbE9iamVjdCgqbV9nbG9i
YWxEYXRhLCBtX3dvcmtlckNvbnRleHRXcmFwcGVyLmdldCgpKTsKKyAgICAgICAgd29ya2VyQ29u
dGV4dFByb3RvdHlwZS0+c3RydWN0dXJlKCktPnNldEdsb2JhbE9iamVjdCgqbV92bSwgbV93b3Jr
ZXJDb250ZXh0V3JhcHBlci5nZXQoKSk7CisgICAgICAgIGRlZGljYXRlZENvbnRleHRQcm90b3R5
cGUtPnN0cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3QoKm1fdm0sIG1fd29ya2VyQ29udGV4dFdy
YXBwZXIuZ2V0KCkpOwogI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKICAgICB9IGVsc2Ugewog
ICAgICAgICBBU1NFUlQobV93b3JrZXJDb250ZXh0LT5pc1NoYXJlZFdvcmtlckNvbnRleHQoKSk7
Ci0gICAgICAgIFN0cnVjdHVyZSogc2hhcmVkQ29udGV4dFByb3RvdHlwZVN0cnVjdHVyZSA9IEpT
U2hhcmVkV29ya2VyQ29udGV4dFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKCptX2dsb2JhbERh
dGEsIDAsIHdvcmtlckNvbnRleHRQcm90b3R5cGUuZ2V0KCkpOwotICAgICAgICBTdHJvbmc8SlNT
aGFyZWRXb3JrZXJDb250ZXh0UHJvdG90eXBlPiBzaGFyZWRDb250ZXh0UHJvdG90eXBlKCptX2ds
b2JhbERhdGEsIEpTU2hhcmVkV29ya2VyQ29udGV4dFByb3RvdHlwZTo6Y3JlYXRlKCptX2dsb2Jh
bERhdGEsIDAsIHNoYXJlZENvbnRleHRQcm90b3R5cGVTdHJ1Y3R1cmUpKTsKLSAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBKU1NoYXJlZFdvcmtlckNvbnRleHQ6OmNyZWF0ZVN0cnVjdHVy
ZSgqbV9nbG9iYWxEYXRhLCAwLCBzaGFyZWRDb250ZXh0UHJvdG90eXBlLmdldCgpKTsKLQotICAg
ICAgICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLnNldCgqbV9nbG9iYWxEYXRhLCBKU1NoYXJlZFdv
cmtlckNvbnRleHQ6OmNyZWF0ZSgqbV9nbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIHN0YXRpY19jYXN0
PFNoYXJlZFdvcmtlckNvbnRleHQqPihtX3dvcmtlckNvbnRleHQpKSk7Ci0gICAgICAgIHdvcmtl
ckNvbnRleHRQcm90b3R5cGUtPnN0cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3QoKm1fZ2xvYmFs
RGF0YSwgbV93b3JrZXJDb250ZXh0V3JhcHBlci5nZXQoKSk7Ci0gICAgICAgIHNoYXJlZENvbnRl
eHRQcm90b3R5cGUtPnN0cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3QoKm1fZ2xvYmFsRGF0YSwg
bV93b3JrZXJDb250ZXh0V3JhcHBlci5nZXQoKSk7CisgICAgICAgIFN0cnVjdHVyZSogc2hhcmVk
Q29udGV4dFByb3RvdHlwZVN0cnVjdHVyZSA9IEpTU2hhcmVkV29ya2VyQ29udGV4dFByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKCptX3ZtLCAwLCB3b3JrZXJDb250ZXh0UHJvdG90eXBlLmdldCgp
KTsKKyAgICAgICAgU3Ryb25nPEpTU2hhcmVkV29ya2VyQ29udGV4dFByb3RvdHlwZT4gc2hhcmVk
Q29udGV4dFByb3RvdHlwZSgqbV92bSwgSlNTaGFyZWRXb3JrZXJDb250ZXh0UHJvdG90eXBlOjpj
cmVhdGUoKm1fdm0sIDAsIHNoYXJlZENvbnRleHRQcm90b3R5cGVTdHJ1Y3R1cmUpKTsKKyAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBKU1NoYXJlZFdvcmtlckNvbnRleHQ6OmNyZWF0ZVN0
cnVjdHVyZSgqbV92bSwgMCwgc2hhcmVkQ29udGV4dFByb3RvdHlwZS5nZXQoKSk7CisKKyAgICAg
ICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci5zZXQoKm1fdm0sIEpTU2hhcmVkV29ya2VyQ29udGV4
dDo6Y3JlYXRlKCptX3ZtLCBzdHJ1Y3R1cmUsIHN0YXRpY19jYXN0PFNoYXJlZFdvcmtlckNvbnRl
eHQqPihtX3dvcmtlckNvbnRleHQpKSk7CisgICAgICAgIHdvcmtlckNvbnRleHRQcm90b3R5cGUt
PnN0cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3QoKm1fdm0sIG1fd29ya2VyQ29udGV4dFdyYXBw
ZXIuZ2V0KCkpOworICAgICAgICBzaGFyZWRDb250ZXh0UHJvdG90eXBlLT5zdHJ1Y3R1cmUoKS0+
c2V0R2xvYmFsT2JqZWN0KCptX3ZtLCBtX3dvcmtlckNvbnRleHRXcmFwcGVyLmdldCgpKTsKICNl
bmRpZgogICAgIH0KICAgICBBU1NFUlQobV93b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xvYmFsT2Jq
ZWN0KCkgPT0gbV93b3JrZXJDb250ZXh0V3JhcHBlcik7CkBAIC0xMTksNyArMTE5LDcgQEAgdm9p
ZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjbwogICAgIFNjcmlwdFZhbHVlIGV4
Y2VwdGlvbjsKICAgICBldmFsdWF0ZShzb3VyY2VDb2RlLCAmZXhjZXB0aW9uKTsKICAgICBpZiAo
ZXhjZXB0aW9uLmpzVmFsdWUoKSkgewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxE
YXRhKCkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSgpKTsKICAgICAgICAgcmVwb3J0
RXhjZXB0aW9uKG1fd29ya2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbEV4ZWMoKSwgZXhjZXB0aW9u
LmpzVmFsdWUoKSk7CiAgICAgfQogfQpAQCAtMTM3LDcgKzEzNyw3IEBAIHZvaWQgV29ya2VyU2Ny
aXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY28KICAgICBKU1ZhbHVlIGV2YWx1YXRpb25FeGNlcHRp
b247CiAgICAgSlNDOjpldmFsdWF0ZShleGVjLCBzb3VyY2VDb2RlLmpzU291cmNlQ29kZSgpLCBt
X3dvcmtlckNvbnRleHRXcmFwcGVyLmdldCgpLCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAKLSAg
ICBpZiAoKGV2YWx1YXRpb25FeGNlcHRpb24gJiYgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0
aW9uKGV2YWx1YXRpb25FeGNlcHRpb24pKSB8fCAgbV93b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xv
YmFsRGF0YSgpLndhdGNoZG9nLmRpZEZpcmUoKSkgeworICAgIGlmICgoZXZhbHVhdGlvbkV4Y2Vw
dGlvbiAmJiBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oZXZhbHVhdGlvbkV4Y2VwdGlv
bikpIHx8ICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT52bSgpLndhdGNoZG9nLmRpZEZpcmUoKSkg
ewogICAgICAgICBmb3JiaWRFeGVjdXRpb24oKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTE0Nyw5ICsxNDcsOSBAQCB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNv
CiAgICAgICAgIGludCBsaW5lTnVtYmVyID0gMDsKICAgICAgICAgU3RyaW5nIHNvdXJjZVVSTCA9
IHNvdXJjZUNvZGUudXJsKCkuc3RyaW5nKCk7CiAgICAgICAgIGlmIChtX3dvcmtlckNvbnRleHQt
PnNhbml0aXplU2NyaXB0RXJyb3IoZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkws
IHNvdXJjZUNvZGUuY2FjaGVkU2NyaXB0KCkpKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IFNj
cmlwdFZhbHVlKCptX2dsb2JhbERhdGEsIHRocm93RXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhl
YywgZXJyb3JNZXNzYWdlLmltcGwoKSkpKTsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSBTY3Jp
cHRWYWx1ZSgqbV92bSwgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBlcnJvck1l
c3NhZ2UuaW1wbCgpKSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0g
U2NyaXB0VmFsdWUoKm1fZ2xvYmFsRGF0YSwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisgICAgICAg
ICAgICAqZXhjZXB0aW9uID0gU2NyaXB0VmFsdWUoKm1fdm0sIGV2YWx1YXRpb25FeGNlcHRpb24p
OwogICAgIH0KIH0KIApAQCAtMTY0LDE0ICsxNjQsMTQgQEAgdm9pZCBXb3JrZXJTY3JpcHRDb250
cm9sbGVyOjpzY2hlZHVsZUV4ZQogICAgIC8vIHRlcm1pbmF0aW9uIGlzIHNjaGVkdWxlZCwgaXNF
eGVjdXRpb25UZXJtaW5hdGluZyB3aWxsCiAgICAgLy8gYWNjdXJhdGVseSByZWZsZWN0IHRoYXQg
c3RhdGUgd2hlbiBjYWxsZWQgZnJvbSBhbm90aGVyIHRocmVhZC4KICAgICBNdXRleExvY2tlciBs
b2NrZXIobV9zY2hlZHVsZWRUZXJtaW5hdGlvbk11dGV4KTsKLSAgICBtX2dsb2JhbERhdGEtPndh
dGNoZG9nLmZpcmUoKTsKKyAgICBtX3ZtLT53YXRjaGRvZy5maXJlKCk7CiB9CiAKIGJvb2wgV29y
a2VyU2NyaXB0Q29udHJvbGxlcjo6aXNFeGVjdXRpb25UZXJtaW5hdGluZygpIGNvbnN0CiB7CiAg
ICAgLy8gU2VlIGNvbW1lbnRzIGluIHNjaGVkdWxlRXhlY3V0aW9uVGVybWluYXRpb24gcmVnYXJk
aW5nIG11dGV4IHVzYWdlLgogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3NjaGVkdWxlZFRlcm1p
bmF0aW9uTXV0ZXgpOwotICAgIHJldHVybiBtX2dsb2JhbERhdGEtPndhdGNoZG9nLmRpZEZpcmUo
KTsKKyAgICByZXR1cm4gbV92bS0+d2F0Y2hkb2cuZGlkRmlyZSgpOwogfQogCiB2b2lkIFdvcmtl
clNjcmlwdENvbnRyb2xsZXI6OmZvcmJpZEV4ZWN1dGlvbigpCkBAIC0xODksNyArMTg5LDcgQEAg
Ym9vbCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjppc0V4ZWN1dGlvbgogdm9pZCBXb3JrZXJTY3Jp
cHRDb250cm9sbGVyOjpkaXNhYmxlRXZhbChjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKIHsK
ICAgICBpbml0U2NyaXB0SWZOZWVkZWQoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxE
YXRhKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKCkpOwogCiAgICAgbV93b3JrZXJDb250
ZXh0V3JhcHBlci0+c2V0RXZhbEVuYWJsZWQoZmFsc2UsIGVycm9yTWVzc2FnZSk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJv
bGxlci5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9X
b3JrZXJTY3JpcHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAK
ICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewotICAgIGNsYXNz
IEpTR2xvYmFsRGF0YTsKKyAgICBjbGFzcyBWTTsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNzcsNyArNzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBkaXNh
YmxlRXZhbChjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiAKLSAgICAgICAgSlNDOjpKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEoKSB7IHJldHVybiBtX2dsb2JhbERhdGEuZ2V0KCk7IH0KKyAg
ICAgICAgSlNDOjpWTSogdm0oKSB7IHJldHVybiBtX3ZtLmdldCgpOyB9CiAKICAgICAgICAgdm9p
ZCBhdHRhY2hEZWJ1Z2dlcihKU0M6OkRlYnVnZ2VyKik7CiAgICAgICAgIHZvaWQgZGV0YWNoRGVi
dWdnZXIoSlNDOjpEZWJ1Z2dlciopOwpAQCAtOTAsNyArOTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIH0KICAgICAgICAgdm9pZCBpbml0U2NyaXB0KCk7CiAKLSAgICAgICAgUmVm
UHRyPEpTQzo6SlNHbG9iYWxEYXRhPiBtX2dsb2JhbERhdGE7CisgICAgICAgIFJlZlB0cjxKU0M6
OlZNPiBtX3ZtOwogICAgICAgICBXb3JrZXJDb250ZXh0KiBtX3dvcmtlckNvbnRleHQ7CiAgICAg
ICAgIEpTQzo6U3Ryb25nPEpTV29ya2VyQ29udGV4dD4gbV93b3JrZXJDb250ZXh0V3JhcHBlcjsK
ICAgICAgICAgYm9vbCBtX2V4ZWN1dGlvbkZvcmJpZGRlbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJl
dmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlw
dERlYnVnU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTQgKzY4LDE0IEBAIHZvaWQg
V29ya2VyU2NyaXB0RGVidWdTZXJ2ZXI6OndpbGxFeGVjdXQKIAogdm9pZCBXb3JrZXJTY3JpcHRE
ZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoVGltZXI8U2NyaXB0RGVidWdTZXJ2
ZXI+KikKIHsKLSAgICBKU0M6OkpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IG1fd29ya2VyQ29u
dGV4dC0+c2NyaXB0KCktPmdsb2JhbERhdGEoKTsKKyAgICBKU0M6OlZNKiB2bSA9IG1fd29ya2Vy
Q29udGV4dC0+c2NyaXB0KCktPnZtKCk7CiAKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGds
b2JhbERhdGEpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIC8vIElmIEph
dmFTY3JpcHQgc3RhY2sgaXMgbm90IGVtcHR5IHBvc3Rwb25lIHJlY29tcGlsYXRpb24uCi0gICAg
aWYgKGdsb2JhbERhdGEtPmR5bmFtaWNHbG9iYWxPYmplY3QpCisgICAgaWYgKHZtLT5keW5hbWlj
R2xvYmFsT2JqZWN0KQogICAgICAgICByZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKTsKICAg
ICBlbHNlCi0gICAgICAgIEpTQzo6RGVidWdnZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKGds
b2JhbERhdGEpOworICAgICAgICBKU0M6OkRlYnVnZ2VyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9u
cyh2bSk7CiB9CiAKIHZvaWQgV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUxpc3RlbmVy
KFNjcmlwdERlYnVnTGlzdGVuZXIqIGxpc3RlbmVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlzaW9uIDE0ODY1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC01MzIsNyArNTMyLDcgQEAgKyAoaWQpX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVl
OihKU0M6OkpTVgogewogICAgIGlmICh2YWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9jayhyb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dm0oKSk7CiAKICAgICAg
ICAgaWYgKG9iamVjdC0+aW5oZXJpdHMoJkpTSFRNTEVsZW1lbnQ6OnNfaW5mbykpIHsKICAgICAg
ICAgICAgIC8vIFBsdWdpbiBlbGVtZW50cyBjYWNoZSB0aGUgaW5zdGFuY2UgaW50ZXJuYWxseS4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtNzMzLDE5ICs3MzMs
MTkgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgInB1Ymxp
YzpcbiIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdHlwZWRlZiAkcGFyZW50Q2xh
c3NOYW1lIEJhc2U7XG4iKTsKICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIp
IHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgJGNsYXNzTmFtZSog
Y3JlYXRlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4gaW1wbCwgSlNET01XaW5kb3dTaGVsbCogd2lu
ZG93U2hlbGwpXG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMg
JGNsYXNzTmFtZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
LCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4gaW1wbCwgSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hl
bGwpXG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB7XG4iKTsKLSAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgJGNsYXNzTmFtZSogcHRyID0gbmV3IChO
b3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDwkY2xhc3NOYW1lPihnbG9iYWxEYXRhLmhlYXApKSAk
e2NsYXNzTmFtZX0oZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBpbXBsLCB3aW5kb3dTaGVsbCk7XG4i
KTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcHRyLT5maW5pc2hDcmVh
dGlvbihnbG9iYWxEYXRhLCB3aW5kb3dTaGVsbCk7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLmFkZEZpbmFsaXplcihwdHIsIGRlc3Ry
b3kpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgICRjbGFzc05h
bWUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8JGNsYXNzTmFtZT4odm0u
aGVhcCkpICR7Y2xhc3NOYW1lfSh2bSwgc3RydWN0dXJlLCBpbXBsLCB3aW5kb3dTaGVsbCk7XG4i
KTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcHRyLT5maW5pc2hDcmVh
dGlvbih2bSwgd2luZG93U2hlbGwpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAgICAgIHZtLmhlYXAuYWRkRmluYWxpemVyKHB0ciwgZGVzdHJveSk7XG4iKTsKICAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHB0cjtcbiIpOwogICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIH1cblxuIik7CiAgICAgfSBlbHNpZiAoJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IklzV29ya2VyQ29udGV4dCJ9KSB7Ci0gICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljICRjbGFzc05hbWUqIGNyZWF0ZShKU0M6
OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFz
c1JlZlB0cjwkaW1wbFR5cGU+IGltcGwpXG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICBzdGF0aWMgJGNsYXNzTmFtZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4gaW1wbClcbiIpOwogICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgICAgICAkY2xhc3NOYW1lKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxs
b2NhdGVDZWxsPCRjbGFzc05hbWU+KGdsb2JhbERhdGEuaGVhcCkpICR7Y2xhc3NOYW1lfShnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUsIGltcGwpO1xuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7XG4iKTsKLSAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLmFkZEZpbmFs
aXplcihwdHIsIGRlc3Ryb3kpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgICAgICRjbGFzc05hbWUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
JGNsYXNzTmFtZT4odm0uaGVhcCkpICR7Y2xhc3NOYW1lfSh2bSwgc3RydWN0dXJlLCBpbXBsKTtc
biIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICBwdHItPmZpbmlzaENy
ZWF0aW9uKHZtKTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICB2
bS5oZWFwLmFkZEZpbmFsaXplcihwdHIsIGRlc3Ryb3kpO1xuIik7CiAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgICAgIHJldHVybiBwdHI7XG4iKTsKICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICB9XG5cbiIpOwogICAgIH0gZWxzaWYgKCRpbnRlcmZhY2UtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIn0pIHsKQEAgLTc1MywxNiAr
NzUzLDE2IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIHN0YXRpYyAkY2xhc3NOYW1lKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjwkaW1wbFR5cGU+
IGltcGwpXG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB7XG4iKTsKICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgZ2xvYmFsT2JqZWN0LT5tYXNxdWVy
YWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5ub3RpZnlXcml0ZSgpO1xuIik7Ci0gICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgICRjbGFzc05hbWUqIHB0ciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8JGNsYXNzTmFtZT4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxE
YXRhKCkuaGVhcCkpICRjbGFzc05hbWUoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpO1xu
Iik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIHB0ci0+ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpO1xuIik7CisgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgICAgICRjbGFzc05hbWUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlND
OjphbGxvY2F0ZUNlbGw8JGNsYXNzTmFtZT4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSAkY2xh
c3NOYW1lKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTtcbiIpOworICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVj
dC0+dm0oKSk7XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcmV0
dXJuIHB0cjtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIH1cblxuIik7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgQWRkSW5jbHVkZXNGb3JUeXBlSW5IZWFkZXIoJGltcGxU
eXBlKSB1bmxlc3MgJHN2Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlOwogICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyAkY2xhc3NOYW1lKiBjcmVhdGUoSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1Jl
ZlB0cjwkaW1wbFR5cGU+IGltcGwpXG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICB7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgJGNsYXNz
TmFtZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDwkY2xhc3NOYW1lPihn
bG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKSkgJGNsYXNzTmFtZShzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCwgaW1wbCk7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7XG4i
KTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgJGNsYXNzTmFtZSogcHRy
ID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDwkY2xhc3NOYW1lPihnbG9iYWxPYmpl
Y3QtPnZtKCkuaGVhcCkpICRjbGFzc05hbWUoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwp
O1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgICAgICByZXR1cm4gcHRyO1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgfVxuXG4iKTsKICAgICB9CkBAIC04NDMsMTIgKzg0MywxMiBAQCBzdWIgR2Vu
ZXJhdGVIZWFkZXIKICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKICAg
ICAgICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSJ9ID0gMTsK
ICAgICB9Ci0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKVxuIik7
CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKVxuIik7CiAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICB7XG4iKTsKICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIgfHwg
JGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IklzV29ya2VyQ29udGV4dCJ9KSB7Ci0g
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJ
bmZvKEpTQzo6R2xvYmFsT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTtcbiIp
OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICByZXR1cm4gSlNDOjpTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8o
SlNDOjpHbG9iYWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pO1xuIik7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7XG4iKTsK
ICAgICB9CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB9XG5cbiIpOwogCkBAIC05Nzks
MTIgKzk3OSwxMiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAicHJvdGVjdGVkOlxuIik7CiAgICAgIyBDb25zdHJ1Y3RvcgogICAgIGlmICgkaW50ZXJmYWNl
TmFtZSBlcSAiRE9NV2luZG93IikgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAg
ICRjbGFzc05hbWUoSlNDOjpKU0dsb2JhbERhdGEmLCBKU0M6OlN0cnVjdHVyZSosIFBhc3NSZWZQ
dHI8JGltcGxUeXBlPiwgSlNET01XaW5kb3dTaGVsbCopO1xuIik7CisgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBQ
YXNzUmVmUHRyPCRpbXBsVHlwZT4sIEpTRE9NV2luZG93U2hlbGwqKTtcbiIpOwogICAgIH0gZWxz
aWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJc1dvcmtlckNvbnRleHQifSkg
ewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRjbGFzc05hbWUoSlNDOjpKU0ds
b2JhbERhdGEmLCBKU0M6OlN0cnVjdHVyZSosIFBhc3NSZWZQdHI8JGltcGxUeXBlPik7XG4iKTsK
KyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKEpTQzo6Vk0mLCBK
U0M6OlN0cnVjdHVyZSosIFBhc3NSZWZQdHI8JGltcGxUeXBlPik7XG4iKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRjbGFzc05hbWUoSlNDOjpTdHJ1
Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8JGltcGxUeXBlPik7XG4iKTsK
LSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
Qzo6SlNHbG9iYWxEYXRhJik7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTtcbiIpOwogICAgIH0KIAogICAgICMgc3Ry
dWN0dXJlIGZsYWdzCkBAIC0xMDYzLDcgKzEwNjMsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAg
ICB9CiAgICAgaWYgKCEkaGFzUGFyZW50IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QifSkgewogICAgICAgICBpZiAoJGludGVyZmFj
ZU5hbWUgZXEgIk5vZGVGaWx0ZXIiKSB7Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiB0b05vZGVGaWx0ZXIoSlNDOjpKU0dsb2JhbERhdGEm
LCBKU0M6OkpTVmFsdWUpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
UGFzc1JlZlB0cjxOb2RlRmlsdGVyPiB0b05vZGVGaWx0ZXIoSlNDOjpWTSYsIEpTQzo6SlNWYWx1
ZSk7XG4iKTsKICAgICAgICAgfSBlbHNpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVN0cmluZ0xp
c3QiKSB7CiAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiUGFzc1JlZlB0cjxET01T
dHJpbmdMaXN0PiB0b0RPTVN0cmluZ0xpc3QoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUp
O1xuIik7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMDg1LDEwICsxMDg1LDEwIEBAIHN1YiBHZW5l
cmF0ZUhlYWRlcgogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBKU0M6
OkpTT2JqZWN0KiBzZWxmKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopO1xu
Iik7CiAgICAgfQogCi0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgJHtjbGFz
c05hbWV9UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSlcbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljICR7Y2xhc3NOYW1l
fVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpXG4iKTsKICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIHtcbiIpOwotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAg
ICR7Y2xhc3NOYW1lfVByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRl
Q2VsbDwke2NsYXNzTmFtZX1Qcm90b3R5cGU+KGdsb2JhbERhdGEuaGVhcCkpICR7Y2xhc3NOYW1l
fVByb3RvdHlwZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7XG4iKTsKLSAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2Jh
bERhdGEpO1xuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgJHtjbGFzc05h
bWV9UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPCR7Y2xh
c3NOYW1lfVByb3RvdHlwZT4odm0uaGVhcCkpICR7Y2xhc3NOYW1lfVByb3RvdHlwZSh2bSwgZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUpO1xuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7XG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgICAgICByZXR1cm4gcHRyO1xuIik7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICB9XG5cbiIpOwogCkBAIC0xMTAyLDkgKzExMDIsOSBAQCBzdWIgR2VuZXJhdGVIZWFkZXIK
ICAgICAgICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6Ok92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4ifSA9
IDE7CiAgICAgfQogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsCi0gICAgICAgICIgICAgc3RhdGlj
IEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSlcbiIgLgorICAgICAgICAiICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpXG4iIC4KICAgICAgICAgIiAgICB7XG4iIC4KLSAgICAg
ICAgIiAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksICZzX2luZm8pO1xuIiAuCisgICAgICAgICIgICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7XG4iIC4KICAg
ICAgICAgIiAgICB9XG4iKTsKICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkpTQ3VzdG9tTmFtZWRHZXR0ZXJPblByb3RvdHlwZSJ9KSB7CiAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5
U2xvdCYpO1xuIik7CkBAIC0xMTE1LDcgKzExMTUsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6
OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpO1xuIikgaWYgJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tRGVmaW5lT3duUHJvcGVydHlPblByb3Rv
dHlwZSJ9OwogCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxucHJpdmF0ZTpcbiIpOwotICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9UHJvdG90eXBlKEpTQzo6SlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0
dXJlKSB7IH1cbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9
UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9
XG4iKTsKIAogICAgICMgc3RydWN0dXJlIGZsYWdzCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
InByb3RlY3RlZDpcbiIpOwpAQCAtMTcwNyw3ICsxNzA3LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVt
ZW50YXRpb24KICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTTm9T
dGF0aWNUYWJsZXMifSkgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBjb25z
dCBIYXNoVGFibGUqIGdldCR7Y2xhc3NOYW1lfVByb3RvdHlwZVRhYmxlKEV4ZWNTdGF0ZSogZXhl
YylcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShleGVj
LT5nbG9iYWxEYXRhKCksICYke2NsYXNzTmFtZX1Qcm90b3R5cGVUYWJsZSk7XG4iKTsKKyAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGdldEhhc2hUYWJsZUZvckdsb2JhbERh
dGEoZXhlYy0+dm0oKSwgJiR7Y2xhc3NOYW1lfVByb3RvdHlwZVRhYmxlKTtcbiIpOwogICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiY29uc3QgQ2xhc3NJbmZvICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6c19pbmZvID0geyBcIiR7
dmlzaWJsZUludGVyZmFjZU5hbWV9UHJvdG90eXBlXCIsICZCYXNlOjpzX2luZm8sIDAsIGdldCR7
Y2xhc3NOYW1lfVByb3RvdHlwZVRhYmxlLCBDUkVBVEVfTUVUSE9EX1RBQkxFKCR7Y2xhc3NOYW1l
fVByb3RvdHlwZSkgfTtcblxuIik7CiAgICAgfSBlbHNlIHsKQEAgLTE3NjYsNyArMTc2Niw3IEBA
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgaWYgKCRudW1BdHRyaWJ1dGVzID4gMCAm
JiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNOb1N0YXRpY1RhYmxlcyJ9KSB7
CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAic3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZ2V0
JHtjbGFzc05hbWV9VGFibGUoRXhlY1N0YXRlKiBleGVjKVxuIik7CiAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAie1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVy
biBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKGV4ZWMtPmdsb2JhbERhdGEoKSwgJiR7Y2xhc3NO
YW1lfVRhYmxlKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4g
Z2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShleGVjLT52bSgpLCAmJHtjbGFzc05hbWV9VGFibGUp
O1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICB9CiAKQEAg
LTE3OTUsMTQgKzE3OTUsMTQgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAjIENv
bnN0cnVjdG9yCiAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7CiAgICAg
ICAgIEFkZEluY2x1ZGVzRm9yVHlwZUluSW1wbCgiSlNET01XaW5kb3dTaGVsbCIpOwotICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NOYW1lfTo6JGNsYXNzTmFtZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPCRpbXBsVHlw
ZT4gaW1wbCwgSlNET01XaW5kb3dTaGVsbCogc2hlbGwpXG4iKTsKLSAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgOiAkcGFyZW50Q2xhc3NOYW1lKGdsb2JhbERhdGEsIHN0cnVjdHVyZSwg
aW1wbCwgc2hlbGwpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFt
ZX06OiRjbGFzc05hbWUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjwk
aW1wbFR5cGU+IGltcGwsIEpTRE9NV2luZG93U2hlbGwqIHNoZWxsKVxuIik7CisgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIDogJHBhcmVudENsYXNzTmFtZSh2bSwgc3RydWN0dXJlLCBp
bXBsLCBzaGVsbClcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAgICAgfSBlbHNpZiAoJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IklzV29ya2VyQ29udGV4dCJ9KSB7CiAgICAgICAgIEFk
ZEluY2x1ZGVzRm9yVHlwZUluSW1wbCgkaW50ZXJmYWNlTmFtZSk7Ci0gICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiJHtjbGFzc05hbWV9OjokY2xhc3NOYW1lKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8JGltcGxUeXBlPiBpbXBsKVxu
Iik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIDogJHBhcmVudENsYXNzTmFtZShn
bG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGltcGwpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIke2NsYXNzTmFtZX06OiRjbGFzc05hbWUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgUGFzc1JlZlB0cjwkaW1wbFR5cGU+IGltcGwpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgOiAkcGFyZW50Q2xhc3NOYW1lKHZtLCBzdHJ1Y3R1cmUsIGltcGwpXG4iKTsK
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ9XG5cbiIpOwogICAgIH0gZWxzZSB7CkBAIC0xODE2LDEyICsxODE2LDEyIEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xu
Iik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKIAotICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9OjpmaW5pc2hDcmVhdGlvbihKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lk
ICR7Y2xhc3NOYW1lfTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKVxuIik7CiAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTtcbiIpOwogICAgICAgICBpZiAo
JGNvZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5cGUoJGltcGxUeXBlKSBhbmQgKCRpbXBsVHlw
ZSBuZSAiQXJyYXlCdWZmZXJWaWV3IikgYW5kICgkaW1wbFR5cGUgbmUgIkFycmF5QnVmZmVyIikp
IHsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFR5cGVkQXJyYXlEZXNjcmlw
dG9yIGRlc2NyaXB0b3IoJiR7Y2xhc3NOYW1lfTo6c19pbmZvLCBPQkpFQ1RfT0ZGU0VUT0YoJHtj
bGFzc05hbWV9LCBtX3N0b3JhZ2UpLCBPQkpFQ1RfT0ZGU0VUT0YoJHtjbGFzc05hbWV9LCBtX3N0
b3JhZ2VMZW5ndGgpKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
Z2xvYmFsRGF0YS5yZWdpc3RlclR5cGVkQXJyYXlEZXNjcmlwdG9yKGltcGwoKSwgZGVzY3JpcHRv
cik7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHZtLnJlZ2lzdGVy
VHlwZWRBcnJheURlc2NyaXB0b3IoaW1wbCgpLCBkZXNjcmlwdG9yKTtcbiIpOwogICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgbV9zdG9yYWdlID0gaW1wbCgpLT5kYXRhKCk7XG4i
KTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIG1fc3RvcmFnZUxlbmd0aCA9
IGltcGwoKS0+bGVuZ3RoKCk7XG4iKTsKICAgICAgICAgfQpAQCAtMTgzMywxMCArMTgzMywxMCBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IkpTT2JqZWN0KiAke2NsYXNzTmFtZX06OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ7XG4iKTsKICAgICAgICAgaWYgKCRoYXNQYXJlbnQgJiYgJHBhcmVudENsYXNzTmFt
ZSBuZSAiSlNDOjpET01Ob2RlRmlsdGVyIikgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgcmV0dXJuICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZ2xvYmFsT2JqZWN0LCAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgJHtwYXJlbnRDbGFzc05hbWV9
UHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCkpKTtcbiIpOworICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6Y3Jl
YXRlKGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdCwgJHtjbGFzc05hbWV9UHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCAke3BhcmVudENsYXNzTmFtZX1Q
cm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSkpO1xuIik7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBteSAkcHJvdG90eXBlID0gJGludGVyZmFjZS0+aXNFeGNlcHRpb24g
PyAiZXJyb3JQcm90b3R5cGUiIDogIm9iamVjdFByb3RvdHlwZSI7Ci0gICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gJHtjbGFzc05hbWV9UHJvdG90eXBlOjpjcmVhdGUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdC0+JHtwcm90b3R5cGV9KCkpKTtcbiIpOworICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgcmV0dXJuICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6Y3JlYXRlKGV4
ZWMtPnZtKCksIGdsb2JhbE9iamVjdCwgJHtjbGFzc05hbWV9UHJvdG90eXBlOjpjcmVhdGVTdHJ1
Y3R1cmUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+JHtw
cm90b3R5cGV9KCkpKTtcbiIpOwogICAgICAgICB9CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAifVxuXG4iKTsKICAgICB9CkBAIC0yMDYwLDcgKzIwNjAsNyBAQCBzdWIgR2VuZXJhdGVJbXBs
ZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgY2FzdGVk
VGhpcy0+bV8iIC4gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIC4gIi5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBjYXN0ZWRUaGlzLCByZXN1bHQpO1xuIikgaWYgKCRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhY2hlZEF0dHJpYnV0ZSJ9KTsKKyAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgY2FzdGVkVGhpcy0+bV8iIC4gJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIC4gIi5zZXQoZXhlYy0+dm0oKSwgY2FzdGVkVGhpcywg
cmVzdWx0KTtcbiIpIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDYWNoZWRBdHRyaWJ1dGUifSk7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJldHVybiByZXN1bHQ7XG4iKTsKIAogICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CkBAIC0yMjMzLDEzICsyMjMzLDEzIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yXG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciICYmICRjbGFz
c05hbWUgZXEgIkpTYmxhaCIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICMgRklYTUU6IFRoaXMgYnJhbmNoIG5ldmVyIGV4ZWN1dGVzIGFuZCBzaG91bGQgYmUgcmVtb3Zl
ZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGpzQ2FzdDwkY2xhc3NOYW1lKj4odGhpc09iamVjdCktPnB1dERpcmVjdChleGVjLT5n
bG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdmFsdWUpO1xu
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBqc0Nhc3Q8JGNsYXNzTmFtZSo+KHRoaXNPYmplY3QpLT5wdXREaXJlY3QoZXhlYy0+
dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2YWx1ZSk7XG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGpzQ2FzdDwkY2xhc3NO
YW1lKj4odGhpc09iamVjdCktPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZp
ZXIoZXhlYywgXCIkbmFtZVwiKSwgdmFsdWUpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBqc0Nhc3Q8JGNsYXNzTmFtZSo+
KHRoaXNPYmplY3QpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCBcIiRu
YW1lXCIpLCB2YWx1ZSk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlcGxhY2VhYmxlIn0pIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgLy8gU2hhZG93aW5nIGEg
YnVpbHQtaW4gb2JqZWN0XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAganNDYXN0PCRjbGFzc05hbWUqPih0aGlzT2JqZWN0KS0+cHV0
RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCBcIiRuYW1lXCIpLCB2
YWx1ZSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAganNDYXN0PCRjbGFzc05hbWUqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KGV4
ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgXCIkbmFtZVwiKSwgdmFsdWUpO1xuIik7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCEkYXR0cmlidXRlLT5pc1N0YXRpYykgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGNsYXNzTmFtZSogY2Fz
dGVkVGhpcyA9IGpzQ2FzdDwkY2xhc3NOYW1lKj4odGhpc09iamVjdCk7XG4iKTsKQEAgLTIzNTAs
NyArMjM1MCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0
b3JcbiIpOwogCiAgICAgICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5k
b3ciKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGpzQ2Fz
dDwkY2xhc3NOYW1lKj4odGhpc09iamVjdCktPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCks
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdmFsdWUpO1xuIik7CisgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGpzQ2FzdDwkY2xhc3NOYW1lKj4o
dGhpc09iamVjdCktPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
Y29uc3RydWN0b3IsIHZhbHVlKTtcbiIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgIGRpZSAiTm8gd2F5IHRvIGhhbmRsZSBpbnRlcmZhY2Ugd2l0aCBSZXBs
YWNlYWJsZUNvbnN0cnVjdG9yIGV4dGVuZGVkIGF0dHJpYnV0ZTogJGludGVyZmFjZU5hbWUiOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTMxOTIsNyArMzE5Miw3IEBAIEVORAogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFjYW5JbnZva2VDYWxsYmFjaygpKVxuIik7CiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiIp
OwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPCRjbGFzc05hbWU+
IHByb3RlY3QodGhpcyk7XG5cbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgp
KTtcblxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU0xvY2tIb2xk
ZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT52bSgpKTtcblxuIik7CiAgICAgICAgICAg
ICBpZiAoQHBhcmFtcykgewogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTtc
biIpOwogICAgICAgICAgICAgfQpAQCAtMzQyOCwxNyArMzQyOCwxNyBAQCBzdWIgSlNWYWx1ZVRv
TmF0aXZlCiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJhbnkiKSB7Ci0gICAgICAgIHJldHVy
biAiZXhlYy0+Z2xvYmFsRGF0YSgpLCAkdmFsdWUiOworICAgICAgICByZXR1cm4gImV4ZWMtPnZt
KCksICR2YWx1ZSI7CiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJOb2RlRmlsdGVyIikgewog
ICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlMkdHlwZS5oIiwgJGNvbmRpdGlvbmFsKTsKLSAg
ICAgICAgcmV0dXJuICJ0byR0eXBlKGV4ZWMtPmdsb2JhbERhdGEoKSwgJHZhbHVlKSI7CisgICAg
ICAgIHJldHVybiAidG8kdHlwZShleGVjLT52bSgpLCAkdmFsdWUpIjsKICAgICB9CiAKICAgICBp
ZiAoJHR5cGUgZXEgIk1lZGlhUXVlcnlMaXN0TGlzdGVuZXIiKSB7CiAgICAgICAgIEFkZFRvSW1w
bEluY2x1ZGVzKCJNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgiLCAkY29uZGl0aW9uYWwpOwotICAg
ICAgICByZXR1cm4gIk1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmNyZWF0ZShTY3JpcHRWYWx1ZShl
eGVjLT5nbG9iYWxEYXRhKCksICIgLiAkdmFsdWUgLiIpKSI7CisgICAgICAgIHJldHVybiAiTWVk
aWFRdWVyeUxpc3RMaXN0ZW5lcjo6Y3JlYXRlKFNjcmlwdFZhbHVlKGV4ZWMtPnZtKCksICIgLiAk
dmFsdWUgLiIpKSI7CiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0
VmFsdWUiKSB7CkBAIC0zODU2LDkgKzM4NTYsOSBAQCBzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckRl
Y2xhcmF0aW9uCiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTtcbiIpOwogICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvO1xu
Iik7CiAKLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSlcbiIpOwor
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKVxuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIHtcbiIpOwotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIEpTQzo6
U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pO1xu
Iik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pO1xuIik7CiAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIH1cbiIpOwogCiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAicHJv
dGVjdGVkOlxuIik7CkBAIC0zOTAxLDkgKzM5MDEsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBjb25zdHJ1Y3RvcjsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBK
U0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IEpT
Qzo6Q2xhc3NJbmZvIHNfaW5mbzsKQEAgLTQxOTQsNyArNDE5NCw3IEBAIHN1YiBHZW5lcmF0ZUNv
bnN0cnVjdG9ySGVscGVyTWV0aG9kcwogICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkpTTm9TdGF0aWNUYWJsZXMifSkgewogICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAic3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZ2V0JHtjb25zdHJ1Y3RvckNsYXNz
TmFtZX1UYWJsZShFeGVjU3RhdGUqIGV4ZWMpXG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIntcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJl
dHVybiBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKGV4ZWMtPmdsb2JhbERhdGEoKSwgJiR7Y29u
c3RydWN0b3JDbGFzc05hbWV9VGFibGUpO1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgcmV0dXJuIGdldEhhc2hUYWJsZUZvckdsb2JhbERhdGEoZXhlYy0+dm0oKSwg
JiR7Y29uc3RydWN0b3JDbGFzc05hbWV9VGFibGUpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICJ9XG5cbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
Y29uc3QgQ2xhc3NJbmZvICR7Y29uc3RydWN0b3JDbGFzc05hbWV9OjpzX2luZm8gPSB7IFwiJHt2
aXNpYmxlSW50ZXJmYWNlTmFtZX1Db25zdHJ1Y3RvclwiLCAmQmFzZTo6c19pbmZvLCAwLCBnZXQk
e2NvbnN0cnVjdG9yQ2xhc3NOYW1lfVRhYmxlLCBDUkVBVEVfTUVUSE9EX1RBQkxFKCRjb25zdHJ1
Y3RvckNsYXNzTmFtZSkgfTtcblxuIik7CiAgICAgICAgIH0gZWxzZSB7CkBAIC00MjA5LDE5ICs0
MjA5LDE5IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9ySGVscGVyTWV0aG9kcwogICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgInZvaWQgJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OmZpbmlzaENyZWF0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdClcbiIp
OwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwogICAgIGlmICgkaW50ZXJmYWNlTmFt
ZSBlcSAiRE9NV2luZG93IikgewotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTtcbiIpOworICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7XG4i
KTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEFTU0VSVChpbmhlcml0cygmc19p
bmZvKSk7XG4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdChl
eGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIGdsb2Jh
bE9iamVjdC0+cHJvdG90eXBlKCksIERvbnREZWxldGUgfCBSZWFkT25seSk7XG4iKTsKKyAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBnbG9iYWxPYmplY3QtPnByb3RvdHlwZSgpLCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpO1xuIik7CiAgICAgfSBlbHNpZiAoJGdlbmVyYXRpbmdOYW1lZENv
bnN0cnVjdG9yKSB7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihnbG9iYWxPYmplY3QpO1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpO1xuIik7Ci0gICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkucHJvdG90eXBlLCAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OnNlbGYoZXhlYywg
Z2xvYmFsT2JqZWN0KSwgTm9uZSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBl
LCAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7
XG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTtcbiIpOworICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7XG4i
KTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEFTU0VSVChpbmhlcml0cygmc19p
bmZvKSk7XG4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdChl
eGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsICR7cHJv
dG9DbGFzc05hbWV9OjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFk
T25seSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdChl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCAke3Byb3RvQ2xhc3NO
YW1lfTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpO1xu
Iik7CiAgICAgfQotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBwdXREaXJlY3QoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigke251
bWJlck9mQ29uc3RydWN0b3JQYXJhbWV0ZXJzfSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERv
bnRFbnVtKTtcbiIpIGlmIGRlZmluZWQgJG51bWJlck9mQ29uc3RydWN0b3JQYXJhbWV0ZXJzOwor
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoJHtudW1iZXJPZkNvbnN0cnVjdG9yUGFy
YW1ldGVyc30pLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7XG4iKSBpZiBkZWZp
bmVkICRudW1iZXJPZkNvbnN0cnVjdG9yUGFyYW1ldGVyczsKICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICJ9XG5cbiIpOwogCiAgICAgaWYgKCEkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3IpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0Zsb2F0NjRB
cnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTRmxvYXQ2NEFycmF5LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRmxvYXQ2NEFycmF5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCB2b2lkIEpTRmxvYXQ2NEFycmF5OjppbmRleFNldHRl
cihKU0M6OkV4CiAKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGdldEpTRmxvYXQ2NEFycmF5Q29u
c3RydWN0b3JUYWJsZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGdldEhhc2hUYWJs
ZUZvckdsb2JhbERhdGEoZXhlYy0+Z2xvYmFsRGF0YSgpLCAmSlNGbG9hdDY0QXJyYXlDb25zdHJ1
Y3RvclRhYmxlKTsKKyAgICByZXR1cm4gZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShleGVjLT52
bSgpLCAmSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3RvclRhYmxlKTsKIH0KIAogY29uc3QgQ2xhc3NJ
bmZvIEpTRmxvYXQ2NEFycmF5Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkZsb2F0NjRBcnJheUNv
bnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgZ2V0SlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3Rv
clRhYmxlLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRmxvYXQ2NEFycmF5Q29uc3RydWN0b3IpIH07
CkBAIC04NywxMCArODcsMTAgQEAgSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3Rvcjo6SlNGbG9hdDY0
QXJyYQogCiB2b2lkIEpTRmxvYXQ2NEFycmF5Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKGV4ZWMtPnZtKCkpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0g
ICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnBy
b3RvdHlwZSwgSlNGbG9hdDY0QXJyYXlQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0
KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigxMjMpLCBSZWFkT25s
eSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlOjpz
ZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0
RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVy
KDEyMyksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KIAogYm9vbCBKU0Zs
b2F0NjRBcnJheUNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKQEAgLTEyMSw3ICsxMjEsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNG
bG9hdDY0QXJyCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBl
VGFibGUgPSB7IDQsIDMsIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlVGFibGVWYWx1ZXMsIDAgfTsK
IHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGdldEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlVGFibGUo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRh
KGV4ZWMtPmdsb2JhbERhdGEoKSwgJkpTRmxvYXQ2NEFycmF5UHJvdG90eXBlVGFibGUpOworICAg
IHJldHVybiBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKGV4ZWMtPnZtKCksICZKU0Zsb2F0NjRB
cnJheVByb3RvdHlwZVRhYmxlKTsKIH0KIAogY29uc3QgQ2xhc3NJbmZvIEpTRmxvYXQ2NEFycmF5
UHJvdG90eXBlOjpzX2luZm8gPSB7ICJGbG9hdDY0QXJyYXlQcm90b3R5cGUiLCAmQmFzZTo6c19p
bmZvLCAwLCBnZXRKU0Zsb2F0NjRBcnJheVByb3RvdHlwZVRhYmxlLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlKSB9OwpAQCAtMTQ1LDcgKzE0NSw3IEBAIGJvb2wg
SlNGbG9hdDY0QXJyYXlQcm90b3R5cGU6OmdldE93blByb3AKIAogc3RhdGljIGNvbnN0IEhhc2hU
YWJsZSogZ2V0SlNGbG9hdDY0QXJyYXlUYWJsZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0
dXJuIGdldEhhc2hUYWJsZUZvckdsb2JhbERhdGEoZXhlYy0+Z2xvYmFsRGF0YSgpLCAmSlNGbG9h
dDY0QXJyYXlUYWJsZSk7CisgICAgcmV0dXJuIGdldEhhc2hUYWJsZUZvckdsb2JhbERhdGEoZXhl
Yy0+dm0oKSwgJkpTRmxvYXQ2NEFycmF5VGFibGUpOwogfQogCiBjb25zdCBDbGFzc0luZm8gSlNG
bG9hdDY0QXJyYXk6OnNfaW5mbyA9IHsgIkZsb2F0NjRBcnJheSIsICZCYXNlOjpzX2luZm8sIDAs
IGdldEpTRmxvYXQ2NEFycmF5VGFibGUgLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRmxvYXQ2NEFy
cmF5KSB9OwpAQCAtMTU1LDExICsxNTUsMTEgQEAgSlNGbG9hdDY0QXJyYXk6OkpTRmxvYXQ2NEFy
cmF5KFN0cnVjdHVyZQogewogfQogCi12b2lkIEpTRmxvYXQ2NEFycmF5OjpmaW5pc2hDcmVhdGlv
bihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEpTRmxvYXQ2NEFycmF5OjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7
CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9y
IGRlc2NyaXB0b3IoJkpTRmxvYXQ2NEFycmF5OjpzX2luZm8sIE9CSkVDVF9PRkZTRVRPRihKU0Zs
b2F0NjRBcnJheSwgbV9zdG9yYWdlKSwgT0JKRUNUX09GRlNFVE9GKEpTRmxvYXQ2NEFycmF5LCBt
X3N0b3JhZ2VMZW5ndGgpKTsKLSAgICBnbG9iYWxEYXRhLnJlZ2lzdGVyVHlwZWRBcnJheURlc2Ny
aXB0b3IoaW1wbCgpLCBkZXNjcmlwdG9yKTsKKyAgICB2bS5yZWdpc3RlclR5cGVkQXJyYXlEZXNj
cmlwdG9yKGltcGwoKSwgZGVzY3JpcHRvcik7CiAgICAgbV9zdG9yYWdlID0gaW1wbCgpLT5kYXRh
KCk7CiAgICAgbV9zdG9yYWdlTGVuZ3RoID0gaW1wbCgpLT5sZW5ndGgoKTsKICAgICBBU1NFUlQo
aW5oZXJpdHMoJnNfaW5mbykpOwpAQCAtMTY3LDcgKzE2Nyw3IEBAIHZvaWQgSlNGbG9hdDY0QXJy
YXk6OmZpbmlzaENyZWF0aW9uKEpTR2wKIAogSlNPYmplY3QqIEpTRmxvYXQ2NEFycmF5OjpjcmVh
dGVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQogewotICAgIHJldHVybiBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPmds
b2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZTo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBKU0FycmF5QnVmZmVy
Vmlld1Byb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpKSk7CisgICAgcmV0dXJuIEpT
RmxvYXQ2NEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBK
U0Zsb2F0NjRBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIGdsb2Jh
bE9iamVjdCwgSlNBcnJheUJ1ZmZlclZpZXdQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2Jq
ZWN0KSkpOwogfQogCiBib29sIEpTRmxvYXQ2NEFycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU0Zsb2F0NjRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0Zsb2F0NjRBcnJheS5oCShyZXZpc2lvbiAxNDg2NTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNGbG9hdDY0QXJy
YXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRl
ZiBKU0FycmF5QnVmZmVyVmlldyBCYXNlOwogICAgIHN0YXRpYyBKU0Zsb2F0NjRBcnJheSogY3Jl
YXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBpbXBsKQogICAgIHsKLSAgICAgICAgSlNG
bG9hdDY0QXJyYXkqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNGbG9h
dDY0QXJyYXk+KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLmhlYXApKSBKU0Zsb2F0NjRBcnJh
eShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpOworICAgICAgICBKU0Zsb2F0NjRBcnJh
eSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU0Zsb2F0NjRBcnJheT4o
Z2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU0Zsb2F0NjRBcnJheShzdHJ1Y3R1cmUsIGdsb2Jh
bE9iamVjdCwgaW1wbCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0
LT52bSgpKTsKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAKQEAgLTQ2LDkgKzQ2LDkgQEAg
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4
ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3Vs
ZFRocm93KTsKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwogCi0gICAg
c3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8o
SlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwog
ICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVj
dCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVy
YXRpb25Nb2RlIG1vZGUgPSBKU0M6OkV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOwpAQCAtNjIs
NyArNjIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCogbV9zdG9yYWdlOwogcHJvdGVjdGVkOgogICAg
IEpTRmxvYXQ2NEFycmF5KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqLCBQYXNz
UmVmUHRyPEZsb2F0NjRBcnJheT4pOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpKU0ds
b2JhbERhdGEmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldFByb3Bl
cnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEJh
c2U6OlN0cnVjdHVyZUZsYWdzOwogICAgIEpTQzo6SlNWYWx1ZSBnZXRCeUluZGV4KEpTQzo6RXhl
Y1N0YXRlKiwgdW5zaWduZWQgaW5kZXgpOwogICAgIHZvaWQgaW5kZXhTZXR0ZXIoSlNDOjpFeGVj
U3RhdGUqLCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVlKTsKQEAgLTc1LDIzICs3NSwyMyBA
QCBjbGFzcyBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZSA6IHB1YmxpYyBKCiBwdWJsaWM6CiAgICAg
dHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKICAgICBzdGF0aWMgSlNDOjpKU09i
amVjdCogc2VsZihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBz
dGF0aWMgSlNGbG9hdDY0QXJyYXlQcm90b3R5cGUqIGNyZWF0ZShKU0M6OkpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlKQorICAgIHN0YXRpYyBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZSogY3Jl
YXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBKU0Zsb2F0NjRBcnJheVByb3Rv
dHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU0Zsb2F0NjRBcnJh
eVByb3RvdHlwZT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNGbG9hdDY0QXJyYXlQcm90b3R5cGUoZ2xv
YmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENy
ZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZSogcHRy
ID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU0Zsb2F0NjRBcnJheVByb3RvdHlw
ZT4odm0uaGVhcCkpIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1
cm4gcHRyOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87
CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7
Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZShKU0M6
OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0
cnVjdHVyZSkgeyB9CisgICAgSlNGbG9hdDY0QXJyYXlQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNO
b25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KIHByb3RlY3RlZDoKICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKQEAgLTExMyw5ICsxMTMsOSBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwg
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCos
IEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlw
dG9yJik7CiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAg
fQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5z
dGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDkgKzYwLDkgQEAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0
Q29uc3RydWN0b3I6OkpTVGVzdAogCiB2b2lkIEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVj
dG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0
YSgpKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKICAgICBBU1NFUlQo
aW5oZXJpdHMoJnNfaW5mbykpOwotICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3Rv
dHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwor
ICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBl
LCBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0
KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKIH0KIAogYm9vbCBKU1Rlc3RBY3RpdmVET01PYmpl
Y3RDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBA
IC0xMTIsMTUgKzExMiwxNSBAQCBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OkpTVGVzdEFjdGl2ZURP
TU9iCiB7CiB9CiAKLXZvaWQgSlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMo
JnNfaW5mbykpOwogfQogCiBKU09iamVjdCogSlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpjcmVhdGVQ
cm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQog
ewotICAgIHJldHVybiBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU6OmNyZWF0ZShleGVj
LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworICAgIHJldHVybiBKU1Rl
c3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU6OmNyZWF0ZShleGVjLT52bSgpLCBnbG9iYWxPYmpl
Y3QsIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGdsb2Jh
bE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlw
ZSgpKSk7CiB9CiAKIHZvaWQgSlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpkZXN0cm95KEpTQzo6SlND
ZWxsKiBjZWxsKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEFjdGl2ZURPTU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuaAkocmV2aXNpb24g
MTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEFjdGl2ZURPTU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw4IEBAIHB1Ymxp
YzoKICAgICB0eXBlZGVmIEpTRE9NV3JhcHBlciBCYXNlOwogICAgIHN0YXRpYyBKU1Rlc3RBY3Rp
dmVET01PYmplY3QqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFRlc3RBY3RpdmVET01PYmplY3Q+IGlt
cGwpCiAgICAgewotICAgICAgICBKU1Rlc3RBY3RpdmVET01PYmplY3QqIHB0ciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0QWN0aXZlRE9NT2JqZWN0PihnbG9iYWxPYmpl
Y3QtPmdsb2JhbERhdGEoKS5oZWFwKSkgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KHN0cnVjdHVyZSwg
Z2xvYmFsT2JqZWN0LCBpbXBsKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxP
YmplY3QtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdCogcHRy
ID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RBY3RpdmVET01PYmplY3Q+
KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KHN0cnVjdHVy
ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9i
YWxPYmplY3QtPnZtKCkpOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIApAQCAtNDYsOSAr
NDYsOSBAQCBwdWJsaWM6CiAgICAgfkpTVGVzdEFjdGl2ZURPTU9iamVjdCgpOwogICAgIHN0YXRp
YyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAg
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9i
YWxPYmplY3QqKTsKQEAgLTYxLDcgKzYxLDcgQEAgcHJpdmF0ZToKICAgICBUZXN0QWN0aXZlRE9N
T2JqZWN0KiBtX2ltcGw7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KEpT
Qzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPFRlc3RBY3RpdmVE
T01PYmplY3Q+KTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJik7
CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm8gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CiAKQEAgLTg5LDIzICs4OSwyMyBA
QCBjbGFzcyBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUgOiBwCiBwdWJsaWM6CiAgICAg
dHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKICAgICBzdGF0aWMgSlNDOjpKU09i
amVjdCogc2VsZihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBz
dGF0aWMgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBzdGF0aWMgSlNUZXN0QWN0aXZlRE9NT2JqZWN0
UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIEpTVGVz
dEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9j
YXRlQ2VsbDxKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU+KGdsb2JhbERhdGEuaGVhcCkp
IEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Cisg
ICAgICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU+KHZtLmhl
YXApKSBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3Ry
dWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVy
biBwdHI7CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsK
LSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlw
ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERh
dGEsIHN0cnVjdHVyZSkgeyB9CisgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9CiBwcm90ZWN0ZWQ6
CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CkBAIC0xMjcs
OSArMTI3LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChK
U0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJv
cGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlBy
b3BlcnR5RGVzY3JpcHRvciYpOwogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2lu
Zm87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6
VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOwogICAgIH0KIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW1w
bGVtZW50c0hhc0luc3RhbmNlIHwgRE9NQ29uc3RydWN0b3JPYmplY3Q6OlN0cnVjdHVyZUZsYWdz
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENh
bGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNr
V2l0aE5vUGFyYW0KIAogICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsK
IAotICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERh
dGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+dm0o
KSk7CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogCkBAIC04MSw3ICs4MSw3IEBA
IGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMVAKIAogICAgIFJlZlB0cjxK
U1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKG1f
ZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+dm0oKSk7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1l
bnRCdWZmZXIgYXJnczsKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2Fs
bGJhY2tXaXRoQ2xhc3MyUAogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRo
aXMpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRGF0YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgp
LT52bSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpAQCAtMTE4LDcg
KzExOCw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aFN0cmluZ0wKIAogICAg
IFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9ja0hvbGRl
ciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+dm0oKSk7CiAKICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgYXJnczsKQEAgLTEzNiw3ICsxMzYsNyBAQCBib29sIEpTVGVzdENh
bGxiYWNrOjpjYWxsYmFja1dpdGhCb29sZWFuCiAKICAgICBSZWZQdHI8SlNUZXN0Q2FsbGJhY2s+
IHByb3RlY3QodGhpcyk7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxEYXRhKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xv
YmFsT2JqZWN0KCktPnZtKCkpOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9i
YWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7
CkBAIC0xNTYsNyArMTU2LDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tSZXF1aXJl
c1RoaQogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAg
SlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT52bSgpKTsKIAog
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMo
KTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01OCw5ICs1OCw5IEBAIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29u
c3RydWN0b3I6OkpTVGUKIAogdm9pZCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9y
OjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgp
KTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKICAgICBBU1NFUlQoaW5o
ZXJpdHMoJnNfaW5mbykpOwotICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90
eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7Cisg
ICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUs
IEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVj
dCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiB9CiAKIGJvb2wgSlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXJDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CkBAIC0xMDksMTUgKzEwOSwxNSBAQCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6SlNUZXN0Q3Vz
dG9tTmFtCiB7CiB9CiAKLXZvaWQgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OmZpbmlzaENyZWF0
aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXI6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihn
bG9iYWxEYXRhKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGlu
aGVyaXRzKCZzX2luZm8pKTsKIH0KIAogSlNPYmplY3QqIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVy
OjpjcmVhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQogewotICAgIHJldHVybiBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZTo6
Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RDdXN0b21OYW1l
ZEdldHRlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0
YSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKKyAg
ICByZXR1cm4gSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6OmNyZWF0ZShleGVjLT52
bSgpLCBnbG9iYWxPYmplY3QsIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAogdm9pZCBKU1Rlc3RDdXN0b21OYW1lZEdldHRl
cjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21O
YW1lZEdldHRlci5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzQsOCArMzQsOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0RPTVdyYXBwZXIgQmFz
ZTsKICAgICBzdGF0aWMgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGNyZWF0ZShKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVm
UHRyPFRlc3RDdXN0b21OYW1lZEdldHRlcj4gaW1wbCkKICAgICB7Ci0gICAgICAgIEpTVGVzdEN1
c3RvbU5hbWVkR2V0dGVyKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpT
VGVzdEN1c3RvbU5hbWVkR2V0dGVyPihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKSkg
SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOwot
ICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKTsK
KyAgICAgICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlND
OjphbGxvY2F0ZUNlbGw8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI+KGdsb2JhbE9iamVjdC0+dm0o
KS5oZWFwKSkgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIoc3RydWN0dXJlLCBnbG9iYWxPYmplY3Qs
IGltcGwpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7
CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogCkBAIC00Nyw5ICs0Nyw5IEBAIHB1YmxpYzoK
ICAgICB+SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIoKTsKICAgICBzdGF0aWMgY29uc3QgSlNDOjpD
bGFzc0luZm8gc19pbmZvOwogCi0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Z2V0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CkBA
IC02Miw3ICs2Miw3IEBAIHByaXZhdGU6CiAgICAgVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBtX2lt
cGw7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIoSlNDOjpTdHJ1Y3R1
cmUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8VGVzdEN1c3RvbU5hbWVkR2V0dGVy
Pik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkpTR2xvYmFsRGF0YSYpOworICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJ
bnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJv
IHwgSlNDOjpIYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFn
czsKIHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgY2FuR2V0SXRlbXNGb3JOYW1lKEpTQzo6RXhl
Y1N0YXRlKiwgVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiwgSlNDOjpQcm9wZXJ0eU5hbWUpOwpAQCAt
OTMsMjMgKzkzLDIzIEBAIGNsYXNzIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlIDoK
IHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwogICAgIHN0
YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9i
amVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZSogY3Jl
YXRlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgc3RhdGljIEpTVGVz
dEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAg
ICB7Ci0gICAgICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90
eXBlPihnbG9iYWxEYXRhLmhlYXApKSBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZShn
bG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJv
dG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQ
cm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5p
c2hDcmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogCiAgICAgc3RhdGlj
IGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1l
LCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFt
ZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiBwcml2YXRlOgotICAg
IEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkg
OiBKU0M6OkpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKSB7IH0KKyAgICBK
U1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
QmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwpAQCAtMTMxLDkgKzEzMSw5IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAg
ICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpT
Qzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiBwcm90ZWN0
ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IERP
TUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RXZlbnRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTgsMTAgKzk4LDEwIEBAIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25z
dHJ1Y3Rvcjo6SlNUZXMKIAogdm9pZCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6
OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkp
OworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwogICAgIEFTU0VSVChpbmhl
cml0cygmc19pbmZvKSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlw
ZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwotICAg
IHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgsIGpzTnVtYmVyKDIpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CisgICAg
cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpT
VGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMiksIFJlYWRPbmx5IHwgRG9udERlbGV0
ZSB8IERvbnRFbnVtKTsKIH0KIAogYm9vbCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0
b3I6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtMTQzLDE1ICsx
NDMsMTUgQEAgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6SlNUZXN0RXZlbnRDb25zdAogewogfQog
Ci12b2lkIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykp
OwogfQogCiBKU09iamVjdCogSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlUHJvdG90eXBl
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBy
ZXR1cm4gSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlOjpj
cmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwg
Z2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworICAgIHJldHVybiBKU1Rlc3RFdmVu
dENvbnN0cnVjdG9yUHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBK
U1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2Jq
ZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkp
KTsKIH0KIAogdm9pZCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpkZXN0cm95KEpTQzo6SlNDZWxs
KiBjZWxsKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEV2ZW50Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAx
NDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RXZlbnRDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw4IEBAIHB1Ymxp
YzoKICAgICB0eXBlZGVmIEpTRE9NV3JhcHBlciBCYXNlOwogICAgIHN0YXRpYyBKU1Rlc3RFdmVu
dENvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxUZXN0RXZlbnRDb25zdHJ1Y3Rvcj4g
aW1wbCkKICAgICB7Ci0gICAgICAgIEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqIHB0ciA9IG5ldyAo
Tm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcj4oZ2xvYmFs
T2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkpIEpTVGVzdEV2ZW50Q29uc3RydWN0b3Ioc3RydWN0
dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGds
b2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
ciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFdmVudENvbnN0
cnVjdG9yPihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdEV2ZW50Q29uc3RydWN0b3Io
c3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0
aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogCkBA
IC00OCw5ICs0OCw5IEBAIHB1YmxpYzoKICAgICB+SlNUZXN0RXZlbnRDb25zdHJ1Y3RvcigpOwog
ICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAKLSAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9i
YWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNHbG9iYWxPYmplY3QqKTsKQEAgLTYzLDcgKzYzLDcgQEAgcHJpdmF0ZToKICAgICBUZXN0
RXZlbnRDb25zdHJ1Y3RvciogbV9pbXBsOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdEV2ZW50Q29u
c3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8
VGVzdEV2ZW50Q29uc3RydWN0b3I+KTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6SlNH
bG9iYWxEYXRhJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CiAgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm8gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CiAKQEAgLTkx
LDIxICs5MSwyMSBAQCBjbGFzcyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlIDogCiBw
dWJsaWM6CiAgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKICAgICBzdGF0
aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSogY3JlYXRl
KEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgc3RhdGljIEpTVGVzdEV2
ZW50Q29uc3RydWN0b3JQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsK
LSAgICAgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSogcHRyID0gbmV3IChOb3RO
dWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlPihn
bG9iYWxEYXRhLmhlYXApKSBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKGdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlv
bihnbG9iYWxEYXRhKTsKKyAgICAgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSog
cHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFdmVudENvbnN0cnVj
dG9yUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSh2
bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9u
KHZtKTsKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgSlND
OjpDbGFzc0luZm8gc19pbmZvOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSlNUZXN0RXZl
bnRDb25zdHJ1Y3RvclByb3RvdHlwZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05v
bkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkgeyB9CisgICAgSlNUZXN0RXZlbnRD
b25zdHJ1Y3RvclByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1
Y3R1cmUpIHsgfQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKQEAgLTEyNyw5ICsxMjcsOSBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwg
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCos
IEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlw
dG9yJik7CiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAg
fQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5z
dGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFdmVudFRhcmdldC5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY0LDkgKzY0LDkgQEAgSlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3Rvcjo6SlNU
ZXN0RXZlbgogCiB2b2lkIEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsK
LSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZv
KSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLnByb3RvdHlwZSwgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xv
YmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3QoZXhlYy0+
dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0RXZlbnRUYXJnZXRQ
cm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
KTsKIH0KIAogYm9vbCBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAgLTExOCwxNSArMTE4LDE1IEBAIEpTVGVzdEV2
ZW50VGFyZ2V0OjpKU1Rlc3RFdmVudFRhcmdldChTdHIKIHsKIH0KIAotdm9pZCBKU1Rlc3RFdmVu
dFRhcmdldDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBK
U1Rlc3RFdmVudFRhcmdldDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewotICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
ICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogfQogCiBKU09iamVjdCogSlNUZXN0RXZl
bnRUYXJnZXQ6OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgcmV0dXJuIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBl
OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIEpTVGVzdEV2ZW50VGFy
Z2V0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCks
IGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworICAgIHJl
dHVybiBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGdsb2Jh
bE9iamVjdCwgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9i
YWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5
cGUoKSkpOwogfQogCiB2b2lkIEpTVGVzdEV2ZW50VGFyZ2V0OjpkZXN0cm95KEpTQzo6SlNDZWxs
KiBjZWxsKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEV2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDE0ODY1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
SlNUZXN0RXZlbnRUYXJnZXQqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFRlc3RFdmVudFRhcmdldD4g
aW1wbCkKICAgICB7CiAgICAgICAgIGdsb2JhbE9iamVjdC0+bWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZFdhdGNocG9pbnQoKS0+bm90aWZ5V3JpdGUoKTsKLSAgICAgICAgSlNUZXN0RXZlbnRUYXJnZXQq
IHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXZlbnRUYXJnZXQ+
KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLmhlYXApKSBKU1Rlc3RFdmVudFRhcmdldChzdHJ1
Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpOworICAgICAgICBKU1Rlc3RFdmVudFRhcmdldCog
cHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFdmVudFRhcmdldD4o
Z2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RFdmVudFRhcmdldChzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCwgaW1wbCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2Jq
ZWN0LT52bSgpKTsKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAKQEAgLTQ4LDkgKzQ4LDkg
QEAgcHVibGljOgogICAgIH5KU1Rlc3RFdmVudFRhcmdldCgpOwogICAgIHN0YXRpYyBjb25zdCBK
U0M6OkNsYXNzSW5mbyBzX2luZm87CiAKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBK
U0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQgZ2V0
T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlBy
b3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgbW9kZSA9IEpTQzo6RXhjbHVk
ZURvbnRFbnVtUHJvcGVydGllcyk7CkBAIC02Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAgICAgVGVz
dEV2ZW50VGFyZ2V0KiBtX2ltcGw7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0RXZlbnRUYXJnZXQo
SlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8VGVzdEV2ZW50
VGFyZ2V0Pik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkpTR2xvYmFsRGF0YSYpOwor
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwogICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpT
Qzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJv
cGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNW
aXNpdENoaWxkcmVuIHwgSlNDOjpNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIHwgSlNDOjpIYXNJbXB1
cmVHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKICAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGluZGV4R2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCB1
bnNpZ25lZCk7CiBwcml2YXRlOgpAQCAtOTgsMjMgKzk4LDIzIEBAIGNsYXNzIEpTVGVzdEV2ZW50
VGFyZ2V0UHJvdG90eXBlIDogcHVibGkKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQzo6SlNOb25G
aW5hbE9iamVjdCBCYXNlOwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3RFdmVudFRh
cmdldFByb3RvdHlwZSogY3JlYXRlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgc3RhdGljIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90
eXBlPihnbG9iYWxEYXRhLmhlYXApKSBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZShnbG9iYWxE
YXRhLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRp
b24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90
eXBlPih2bS5oZWFwKSkgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAg
IHJldHVybiBwdHI7CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNf
aW5mbzsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwog
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0
b3ImKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cisg
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
JnNfaW5mbyk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90
eXBlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3QoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKSB7IH0KKyAgICBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUp
IDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQogcHJvdGVjdGVkOgog
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6
U3RydWN0dXJlRmxhZ3M7CiB9OwpAQCAtMTM2LDkgKzEzNiw5IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBzdGF0
aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAg
c3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiBwcm90ZWN0ZWQ6CiAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IERPTUNvbnN0
cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3Bw
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsOSArNTcsOSBA
QCBKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6SlNUZXN0RXhjZXB0CiAKIHZvaWQgSlNUZXN0
RXhjZXB0aW9uQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bihleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZt
KCkpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0RXhj
ZXB0aW9uUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBS
ZWFkT25seSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5wcm90b3R5cGUsIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxP
YmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogfQogCiBib29sIEpTVGVzdEV4Y2VwdGlv
bkNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAg
LTk1LDE1ICs5NSwxNSBAQCBKU1Rlc3RFeGNlcHRpb246OkpTVGVzdEV4Y2VwdGlvbihTdHJ1Y3R1
CiB7CiB9CiAKLXZvaWQgSlNUZXN0RXhjZXB0aW9uOjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEpCit2b2lkIEpTVGVzdEV4Y2VwdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogfQog
CiBKU09iamVjdCogSlNUZXN0RXhjZXB0aW9uOjpjcmVhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiBl
eGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIHJldHVybiBKU1Rlc3RF
eGNlcHRpb25Qcm90b3R5cGU6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVj
dCwgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0
LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5lcnJvclByb3RvdHlw
ZSgpKSk7CisgICAgcmV0dXJuIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMt
PnZtKCksIGdsb2JhbE9iamVjdCwgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1
Y3R1cmUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+ZXJy
b3JQcm90b3R5cGUoKSkpOwogfQogCiB2b2lkIEpTVGVzdEV4Y2VwdGlvbjo6ZGVzdHJveShKU0M6
OkpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmgJKHJldmlzaW9uIDE0ODY1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRl
ZiBKU0RPTVdyYXBwZXIgQmFzZTsKICAgICBzdGF0aWMgSlNUZXN0RXhjZXB0aW9uKiBjcmVhdGUo
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUGFzc1JlZlB0cjxUZXN0RXhjZXB0aW9uPiBpbXBsKQogICAgIHsKLSAgICAgICAgSlNUZXN0
RXhjZXB0aW9uKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV4
Y2VwdGlvbj4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkpIEpTVGVzdEV4Y2VwdGlv
bihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpOworICAgICAgICBKU1Rlc3RFeGNlcHRp
b24qIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXhjZXB0aW9u
PihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdEV4Y2VwdGlvbihzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCwgaW1wbCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2Jq
ZWN0LT52bSgpKTsKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAKQEAgLTQ2LDkgKzQ2LDkg
QEAgcHVibGljOgogICAgIH5KU1Rlc3RFeGNlcHRpb24oKTsKICAgICBzdGF0aWMgY29uc3QgSlND
OjpDbGFzc0luZm8gc19pbmZvOwogCi0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7
CkBAIC02MSw3ICs2MSw3IEBAIHByaXZhdGU6CiAgICAgVGVzdEV4Y2VwdGlvbiogbV9pbXBsOwog
cHJvdGVjdGVkOgogICAgIEpTVGVzdEV4Y2VwdGlvbihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xv
YmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxUZXN0RXhjZXB0aW9uPik7Ci0gICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OkpTR2xvYmFsRGF0YSYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlND
OjpWTSYpOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgQmFzZTo6U3RydWN0dXJlRmxh
Z3M7CiB9OwogCkBAIC04OSwyMSArODksMjEgQEAgY2xhc3MgSlNUZXN0RXhjZXB0aW9uUHJvdG90
eXBlIDogcHVibGljIAogcHVibGljOgogICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0
IEJhc2U7CiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlw
ZSogY3JlYXRlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgc3RhdGlj
IEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAg
ewotICAgICAgICBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwg
SlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlPihnbG9iYWxEYXRhLmhl
YXApKSBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAg
ICAgICBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjph
bGxvY2F0ZUNlbGw8SlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0RXhj
ZXB0aW9uUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0
ci0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIAogICAg
IHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87Ci0gICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkK
KyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0
YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6
IEpTQzo6SlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpIHsgfQorICAgIEpT
VGVzdEV4Y2VwdGlvblByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBz
dHJ1Y3R1cmUpIHsgfQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKQEAgLTEyNSw5ICsxMjUsOSBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxs
KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3Qm
KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVj
dCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNj
cmlwdG9yJik7CiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBz
dGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAg
ICAgfQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFz
SW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMiwxMCArMTMyLDEwIEBAIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjpKU1Rl
c3RJbnRlcmYKIAogdm9pZCBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRp
b24oRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewot
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8p
KTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkucHJvdG90eXBlLCBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFs
T2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigyKSwgUmVh
ZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdChleGVjLT52bSgp
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5
cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAg
ICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNO
dW1iZXIoMiksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KIAogYm9vbCBK
U1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCkBAIC0yMDYsMTUgKzIwNiwxNSBAQCBKU1Rlc3RJbnRlcmZhY2U6OkpTVGVzdElu
dGVyZmFjZShTdHJ1Y3R1CiB7CiB9CiAKLXZvaWQgSlNUZXN0SW50ZXJmYWNlOjpmaW5pc2hDcmVh
dGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEpTVGVzdEludGVyZmFjZTo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMo
JnNfaW5mbykpOwogfQogCiBKU09iamVjdCogSlNUZXN0SW50ZXJmYWNlOjpjcmVhdGVQcm90b3R5
cGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAg
IHJldHVybiBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRh
KCksIGdsb2JhbE9iamVjdCwgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1
cmUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0
LT5vYmplY3RQcm90b3R5cGUoKSkpOworICAgIHJldHVybiBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5
cGU6OmNyZWF0ZShleGVjLT52bSgpLCBnbG9iYWxPYmplY3QsIEpTVGVzdEludGVyZmFjZVByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKIHZvaWQgSlNUZXN0SW50ZXJm
YWNlOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw4IEBAIHB1
YmxpYzoKICAgICB0eXBlZGVmIEpTRE9NV3JhcHBlciBCYXNlOwogICAgIHN0YXRpYyBKU1Rlc3RJ
bnRlcmZhY2UqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFRlc3RJbnRlcmZhY2U+IGltcGwpCiAgICAg
ewotICAgICAgICBKU1Rlc3RJbnRlcmZhY2UqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxv
Y2F0ZUNlbGw8SlNUZXN0SW50ZXJmYWNlPihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFw
KSkgSlNUZXN0SW50ZXJmYWNlKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKLSAgICAg
ICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7CisgICAg
ICAgIEpTVGVzdEludGVyZmFjZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDxKU1Rlc3RJbnRlcmZhY2U+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0SW50ZXJm
YWNlKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0K
IApAQCAtNTEsOSArNTEsOSBAQCBwdWJsaWM6CiAgICAgfkpTVGVzdEludGVyZmFjZSgpOwogICAg
IHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAKLSAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxE
YXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNHbG9iYWxPYmplY3QqKTsKQEAgLTc5LDcgKzc5LDcgQEAgcHJpdmF0ZToKICAgICBUZXN0SW50
ZXJmYWNlKiBtX2ltcGw7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0SW50ZXJmYWNlKEpTQzo6U3Ry
dWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPFRlc3RJbnRlcmZhY2U+KTsK
LSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJik7CisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkludGVy
Y2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBC
YXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CiAKQEAgLTEwNywyMyArMTA3LDIzIEBAIGNsYXNzIEpT
VGVzdEludGVyZmFjZVByb3RvdHlwZSA6IHB1YmxpYyAKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpT
Qzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxm
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rl
c3RJbnRlcmZhY2VQcm90b3R5cGUqIGNyZWF0ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgIHN0YXRpYyBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUqIGNyZWF0ZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKiBw
dHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEludGVyZmFjZVByb3Rv
dHlwZT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKGdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlv
bihnbG9iYWxEYXRhKTsKKyAgICAgICAgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKiBwdHIgPSBu
ZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEludGVyZmFjZVByb3RvdHlwZT4o
dm0uaGVhcCkpIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJu
IHB0cjsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwog
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwot
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJ
bmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAg
cmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKEpTQzo6
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlKSB7IH0KKyAgICBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNO
b25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KIHByb3RlY3RlZDoKICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKQEAgLTE0NSw5ICsxNDUsOSBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwg
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCos
IEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlw
dG9yJik7CiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAg
fQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5z
dGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAxNDg2
NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDkgKzU4LDkgQEAg
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yOgogCiB2b2lkIEpTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRl
KiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZXhlYy0+dm0oKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLSAgICBwdXRE
aXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBl
LCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2Jh
bE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZt
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXJQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5KTsKIH0KIAogYm9vbCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3Ry
dWN0b3I6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtMTA5LDE1
ICsxMDksMTUgQEAgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6SlNUZXN0TWVkaQogewog
fQogCi12b2lkIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmZpbmlzaENyZWF0aW9uKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
cjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGds
b2JhbERhdGEpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5o
ZXJpdHMoJnNfaW5mbykpOwogfQogCiBKU09iamVjdCogSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lcjo6Y3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKIHsKLSAgICByZXR1cm4gSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclBy
b3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90
b3R5cGUoKSkpOworICAgIHJldHVybiBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90
eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT52bSgpLCBn
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAogdm9p
ZCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxs
KQpAQCAtMTY2LDcgKzE2Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
TWVkaWEKICAgICBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogaW1wbCA9IHN0YXRpY19jYXN0
PFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgUmVmUHRy
PE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+IGxpc3RlbmVyKE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6
OmNyZWF0ZShTY3JpcHRWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmFyZ3VtZW50KDAp
KSkpOworICAgIFJlZlB0cjxNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiBsaXN0ZW5lcihNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyOjpjcmVhdGUoU2NyaXB0VmFsdWUoZXhlYy0+dm0oKSwgZXhlYy0+YXJn
dW1lbnQoMCkpKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwtPm1ldGhvZChsaXN0
ZW5lcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgJ
KHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDggKzM0LDggQEAgcHVibGljOgogICAgIHR5cGVkZWYgSlNET01XcmFwcGVyIEJhc2U7CiAgICAg
c3RhdGljIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGNyZWF0ZShKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRy
PFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiBpbXBsKQogICAgIHsKLSAgICAgICAgSlNUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRl
Q2VsbDxKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPihnbG9iYWxPYmplY3QtPmdsb2JhbERh
dGEoKS5oZWFwKSkgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcihzdHJ1Y3R1cmUsIGdsb2Jh
bE9iamVjdCwgaW1wbCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0
LT5nbG9iYWxEYXRhKCkpOworICAgICAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBw
dHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXI+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7CisgICAgICAgIHB0ci0+Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICAgICAgcmV0dXJuIHB0cjsKICAg
ICB9CiAKQEAgLTQ2LDkgKzQ2LDkgQEAgcHVibGljOgogICAgIH5KU1Rlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyKCk7CiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAot
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJ
bmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAg
cmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwpAQCAtNjEsNyArNjEsNyBAQCBwcml2
YXRlOgogICAgIFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBtX2ltcGw7CiBwcm90ZWN0ZWQ6
CiAgICAgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcihKU0M6OlN0cnVjdHVyZSosIEpTRE9N
R2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4pOwot
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpKU0dsb2JhbERhdGEmKTsKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEJh
c2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIApAQCAtODksMjMgKzg5LDIzIEBAIGNsYXNzIEpTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3QKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQzo6
SlNOb25GaW5hbE9iamVjdCBCYXNlOwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBzdGF0aWMgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
clByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBKU1Rl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpT
Qzo6YWxsb2NhdGVDZWxsPEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGU+KGds
b2JhbERhdGEuaGVhcCkpIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUoZ2xv
YmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENy
ZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0K
IAogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgc3RhdGljIEpT
Qzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJv
dG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAog
cHJpdmF0ZToKLSAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlKEpTQzo6
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlKSB7IH0KKyAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9CiBwcm90ZWN0ZWQ6
CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CkBAIC0xMjcs
OSArMTI3LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChK
U0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJv
cGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlBy
b3BlcnR5RGVzY3JpcHRvciYpOwogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2lu
Zm87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6
VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOwogICAgIH0KIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW1w
bGVtZW50c0hhc0luc3RhbmNlIHwgRE9NQ29uc3RydWN0b3JPYmplY3Q6OlN0cnVjdHVyZUZsYWdz
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTQ4
NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw5ICs1Nyw5IEBAIEpTVGVz
dE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6SlNUZXMKIAogdm9pZCBKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bihleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZt
KCkpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpzZWxm
KGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiB9CiAKIGJvb2wg
SlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIEpTVGVzdE5hbWVkQ29u
c3RydWN0b3JOYW1lZENvbnN0cnVjCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
T2JqZWN0KTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwotICAgIHB1dERpcmVjdChl
eGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVz
dE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgTm9u
ZSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90
b3R5cGUsIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFs
T2JqZWN0KSwgTm9uZSk7CiB9CiAKIENvbnN0cnVjdFR5cGUgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rv
ck5hbWVkQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0
YSYgY29uc3RydWN0RGF0YSkKQEAgLTEzOCwxNSArMTM4LDE1IEBAIEpTVGVzdE5hbWVkQ29uc3Ry
dWN0b3I6OkpTVGVzdE5hbWVkQ29uc3QKIHsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZENvbnN0cnVj
dG9yOjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEpTVGVz
dE5hbWVkQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKLSAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIH0KIAogSlNPYmplY3QqIEpTVGVzdE5h
bWVkQ29uc3RydWN0b3I6OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgcmV0dXJuIEpTVGVzdE5hbWVkQ29uc3RydWN0
b3JQcm90b3R5cGU6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgSlNU
ZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVj
dC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90
eXBlKCkpKTsKKyAgICByZXR1cm4gSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6Y3Jl
YXRlKGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdCwgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRD
b25zdHJ1Y3Rvcjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsOCArMzQsOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0RPTVdyYXBw
ZXIgQmFzZTsKICAgICBzdGF0aWMgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBh
c3NSZWZQdHI8VGVzdE5hbWVkQ29uc3RydWN0b3I+IGltcGwpCiAgICAgewotICAgICAgICBKU1Rl
c3ROYW1lZENvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxs
PEpTVGVzdE5hbWVkQ29uc3RydWN0b3I+KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLmhlYXAp
KSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsK
LSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7
CisgICAgICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlND
OjphbGxvY2F0ZUNlbGw8SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4oZ2xvYmFsT2JqZWN0LT52bSgp
LmhlYXApKSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBp
bXBsKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwog
ICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIApAQCAtNDYsOSArNDYsOSBAQCBwdWJsaWM6CiAg
ICAgfkpTVGVzdE5hbWVkQ29uc3RydWN0b3IoKTsKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFz
c0luZm8gc19pbmZvOwogCi0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CkBAIC02
MSw3ICs2MSw3IEBAIHByaXZhdGU6CiAgICAgVGVzdE5hbWVkQ29uc3RydWN0b3IqIG1faW1wbDsK
IHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwg
SlNET01HbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPFRlc3ROYW1lZENvbnN0cnVjdG9yPik7Ci0g
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkpTR2xvYmFsRGF0YSYpOworICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNDOjpWTSYpOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgQmFz
ZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwogCkBAIC04OSwyMSArODksMjEgQEAgY2xhc3MgSlNUZXN0
TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSA6IAogcHVibGljOgogICAgIHR5cGVkZWYgSlNDOjpK
U05vbkZpbmFsT2JqZWN0IEJhc2U7CiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdE5h
bWVkQ29uc3RydWN0b3JQcm90b3R5cGUqIGNyZWF0ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgIHN0YXRpYyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKiBj
cmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIEpTVGVzdE5hbWVkQ29uc3Ry
dWN0b3JQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNU
ZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3RvclByb3RvdHlwZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVy
ZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEpT
VGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjph
bGxvY2F0ZUNlbGw8SlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZT4odm0uaGVhcCkpIEpT
VGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVybiBwdHI7
CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBz
dGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAg
ICAgfQogCiBwcml2YXRlOgotICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUoSlND
OjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUpIHsgfQorICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6
IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KIHByb3RlY3RlZDoKICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFnczsKIH07CkBAIC0xMjUsOSArMTI1LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9w
ZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJv
cGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIHN0YXRpYyBjb25zdCBK
U0M6OkNsYXNzSW5mbyBzX2luZm87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIHByb3RlY3RlZDoKICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgRE9NQ29uc3RydWN0b3JPYmpl
Y3Q6OlN0cnVjdHVyZUZsYWdzOwpAQCAtMTQ0LDkgKzE0NCw5IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGNvbnN0cnVjdG9yOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgY29u
c3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAkocmV2aXNpb24gMTQ4
NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5v
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCwxMCArNjQsMTAgQEAgSlNUZXN0Tm9kZUNvbnN0
cnVjdG9yOjpKU1Rlc3ROb2RlQ29uc3RydQogCiB2b2lkIEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcjo6
ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7
CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKCZzX2luZm8pKTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3ROb2RlUHJvdG90eXBlOjpzZWxmKGV4ZWMs
IGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIo
MCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3QoZXhl
Yy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0Tm9kZVByb3Rv
dHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwor
ICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBq
c051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCiBib29s
IEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCkBAIC0xMDgsMTUgKzEwOCwxNSBAQCBKU1Rlc3ROb2RlOjpKU1Rlc3ROb2RlKFN0cnVj
dHVyZSogc3RydWN0CiB7CiB9CiAKLXZvaWQgSlNUZXN0Tm9kZTo6ZmluaXNoQ3JlYXRpb24oSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBKU1Rlc3ROb2RlOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiB9
CiAKIEpTT2JqZWN0KiBKU1Rlc3ROb2RlOjpjcmVhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIHJldHVybiBKU1Rlc3ROb2Rl
UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIEpTVGVz
dE5vZGVQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2Jh
bE9iamVjdCwgSlNOb2RlUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCkpKTsKKyAg
ICByZXR1cm4gSlNUZXN0Tm9kZVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGdsb2JhbE9i
amVjdCwgSlNUZXN0Tm9kZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIGds
b2JhbE9iamVjdCwgSlNOb2RlUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCkpKTsK
IH0KIAogYm9vbCBKU1Rlc3ROb2RlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5vZGUuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzMsOCArMzMsOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05vZGUgQmFzZTsKICAgICBzdGF0
aWMgSlNUZXN0Tm9kZSogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8VGVzdE5vZGU+IGltcGwpCiAgICAg
ewotICAgICAgICBKU1Rlc3ROb2RlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVD
ZWxsPEpTVGVzdE5vZGU+KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLmhlYXApKSBKU1Rlc3RO
b2RlKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKLSAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEpTVGVzdE5vZGUq
IHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9kZT4oZ2xvYmFs
T2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3ROb2RlKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBp
bXBsKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwog
ICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIApAQCAtNDMsOSArNDMsOSBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRv
ciYpOwogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAKLSAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAg
fQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogCiBw
cm90ZWN0ZWQ6CiAgICAgSlNUZXN0Tm9kZShKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgUGFzc1JlZlB0cjxUZXN0Tm9kZT4pOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlND
OjpKU0dsb2JhbERhdGEmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8
IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIApAQCAtNjIsMjEgKzYyLDIxIEBAIGNsYXNzIEpT
VGVzdE5vZGVQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjoKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpT
Qzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxm
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rl
c3ROb2RlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICBzdGF0aWMgSlNUZXN0Tm9kZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiAgICAgewotICAgICAgICBKU1Rlc3ROb2RlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51
bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5vZGVQcm90b3R5cGU+KGdsb2JhbERhdGEuaGVh
cCkpIEpTVGVzdE5vZGVQcm90b3R5cGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBK
U1Rlc3ROb2RlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxs
PEpTVGVzdE5vZGVQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3ROb2RlUHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0p
OwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNs
YXNzSW5mbyBzX2luZm87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBKU1Rlc3ROb2RlUHJv
dG90eXBlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3QoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKSB7IH0KKyAgICBKU1Rlc3ROb2RlUHJvdG90eXBlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBK
U0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9CiBwcm90ZWN0ZWQ6CiAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNWaXNp
dENoaWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwpAQCAtOTgsOSArOTgsOSBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwg
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCos
IEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlw
dG9yJik7CiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAg
fQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5z
dGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOCwxMCArMjI4LDEw
IEBAIEpTVGVzdE9iakNvbnN0cnVjdG9yOjpKU1Rlc3RPYmpDb25zdHJ1Y3QKIAogdm9pZCBKU1Rl
c3RPYmpDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4
ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7
CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RPYmpQcm90
b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsK
LSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwor
ICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBl
LCBKU1Rlc3RPYmpQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRF
bnVtKTsKIH0KIAogYm9vbCBKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90
KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC0zNjEsMTUgKzM2MSwxNSBAQCBKU1Rlc3RPYmo6OkpT
VGVzdE9iaihTdHJ1Y3R1cmUqIHN0cnVjdHVyCiB7CiB9CiAKLXZvaWQgSlNUZXN0T2JqOjpmaW5p
c2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEpTVGVzdE9iajo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMo
JnNfaW5mbykpOwogfQogCiBKU09iamVjdCogSlNUZXN0T2JqOjpjcmVhdGVQcm90b3R5cGUoRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIHJldHVy
biBKU1Rlc3RPYmpQcm90b3R5cGU6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9i
amVjdCwgSlNUZXN0T2JqUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5n
bG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUo
KSkpOworICAgIHJldHVybiBKU1Rlc3RPYmpQcm90b3R5cGU6OmNyZWF0ZShleGVjLT52bSgpLCBn
bG9iYWxPYmplY3QsIEpTVGVzdE9ialByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9i
amVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgp
KSk7CiB9CiAKIHZvaWQgSlNUZXN0T2JqOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQpAQCAt
ODY1LDcgKzg2NSw3IEBAIEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMShFeGVjU3QK
ICAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlOwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNf
Y2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9
IChpbXBsLT5jYWNoZWRBdHRyaWJ1dGUxKCkuaGFzTm9WYWx1ZSgpID8ganNOdWxsKCkgOiBpbXBs
LT5jYWNoZWRBdHRyaWJ1dGUxKCkuanNWYWx1ZSgpKTsKLSAgICBjYXN0ZWRUaGlzLT5tX2NhY2hl
ZEF0dHJpYnV0ZTEuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgY2FzdGVkVGhpcywgcmVzdWx0KTsK
KyAgICBjYXN0ZWRUaGlzLT5tX2NhY2hlZEF0dHJpYnV0ZTEuc2V0KGV4ZWMtPnZtKCksIGNhc3Rl
ZFRoaXMsIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtODc4LDcgKzg3OCw3
IEBAIEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMihFeGVjU3QKICAgICAgICAgcmV0
dXJuIGNhY2hlZFZhbHVlOwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2Jq
Kj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IChpbXBsLT5jYWNo
ZWRBdHRyaWJ1dGUyKCkuaGFzTm9WYWx1ZSgpID8ganNOdWxsKCkgOiBpbXBsLT5jYWNoZWRBdHRy
aWJ1dGUyKCkuanNWYWx1ZSgpKTsKLSAgICBjYXN0ZWRUaGlzLT5tX2NhY2hlZEF0dHJpYnV0ZTIu
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgY2FzdGVkVGhpcywgcmVzdWx0KTsKKyAgICBjYXN0ZWRU
aGlzLT5tX2NhY2hlZEF0dHJpYnV0ZTIuc2V0KGV4ZWMtPnZtKCksIGNhc3RlZFRoaXMsIHJlc3Vs
dCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTU0Miw3ICsxNTQyLDcgQEAgdm9pZCBz
ZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydQogewogICAgIFVOVVNFRF9QQVJBTShl
eGVjKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAgIGpzQ2Fz
dDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
SWRlbnRpZmllcihleGVjLCAiY29uZGl0aW9uYWxBdHRyNCIpLCB2YWx1ZSk7CisgICAganNDYXN0
PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmll
cihleGVjLCAiY29uZGl0aW9uYWxBdHRyNCIpLCB2YWx1ZSk7CiB9CiAKICNlbmRpZgpAQCAtMTU1
Miw3ICsxNTUyLDcgQEAgdm9pZCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydQog
ewogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBj
b25zdHJ1Y3RvcgotICAgIGpzQ2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiY29uZGl0aW9uYWxBdHRyNSIp
LCB2YWx1ZSk7CisgICAganNDYXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpLT5wdXREaXJlY3Qo
ZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiY29uZGl0aW9uYWxBdHRyNSIpLCB2YWx1ZSk7
CiB9CiAKICNlbmRpZgpAQCAtMTU2Miw3ICsxNTYyLDcgQEAgdm9pZCBzZXRKU1Rlc3RPYmpDb25k
aXRpb25hbEF0dHI2Q29uc3RydQogewogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICAvLyBT
aGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAgIGpzQ2FzdDxKU1Rlc3RPYmoqPih0
aGlzT2JqZWN0KS0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVj
LCAiY29uZGl0aW9uYWxBdHRyNiIpLCB2YWx1ZSk7CisgICAganNDYXN0PEpTVGVzdE9iaio+KHRo
aXNPYmplY3QpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiY29uZGl0
aW9uYWxBdHRyNiIpLCB2YWx1ZSk7CiB9CiAKICNlbmRpZgpAQCAtMTU3Miw3ICsxNTcyLDcgQEAg
dm9pZCBzZXRKU1Rlc3RPYmpBbnlBdHRyaWJ1dGUoRXhlY1N0YXRlKgogICAgIFVOVVNFRF9QQVJB
TShleGVjKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4o
dGhpc09iamVjdCk7CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihj
YXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIFNjcmlwdFZhbHVlIG5hdGl2ZVZhbHVlKGV4ZWMtPmds
b2JhbERhdGEoKSwgdmFsdWUpOworICAgIFNjcmlwdFZhbHVlIG5hdGl2ZVZhbHVlKGV4ZWMtPnZt
KCksIHZhbHVlKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBpbXBsLT5zZXRBbnlBdHRyaWJ1dGUobmF0aXZlVmFsdWUpOwpAQCAtMTY0Myw3ICsx
NjQzLDcgQEAgdm9pZCBzZXRKU1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZShFeAogewogICAg
IFVOVVNFRF9QQVJBTShleGVjKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBvYmplY3QK
LSAgICBqc0Nhc3Q8SlNUZXN0T2JqKj4odGhpc09iamVjdCktPnB1dERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgInJlcGxhY2VhYmxlQXR0cmlidXRlIiksIHZhbHVl
KTsKKyAgICBqc0Nhc3Q8SlNUZXN0T2JqKj4odGhpc09iamVjdCktPnB1dERpcmVjdChleGVjLT52
bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJyZXBsYWNlYWJsZUF0dHJpYnV0ZSIpLCB2YWx1ZSk7CiB9
CiAKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4
ICszNCw4IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRE9NV3JhcHBlciBCYXNlOwogICAgIHN0
YXRpYyBKU1Rlc3RPYmoqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFRlc3RPYmo+IGltcGwpCiAgICAg
ewotICAgICAgICBKU1Rlc3RPYmoqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNl
bGw8SlNUZXN0T2JqPihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKSkgSlNUZXN0T2Jq
KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVh
dGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEpTVGVzdE9iaiogcHRy
ID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPYmo+KGdsb2JhbE9iamVj
dC0+dm0oKS5oZWFwKSkgSlNUZXN0T2JqKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsK
KyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwogICAgICAg
ICByZXR1cm4gcHRyOwogICAgIH0KIApAQCAtNDcsOSArNDcsOSBAQCBwdWJsaWM6CiAgICAgfkpT
VGVzdE9iaigpOwogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAKLSAg
ICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6
OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKQEAgLTc1LDcgKzc1LDcgQEAgcHJpdmF0
ZToKICAgICBUZXN0T2JqKiBtX2ltcGw7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0T2JqKEpTQzo6
U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPFRlc3RPYmo+KTsKLSAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJik7CisgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0M6OlZNJik7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkludGVyY2Vw
dHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6
Ok92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CiAKQEAg
LTEwMywyMyArMTAzLDIzIEBAIGNsYXNzIEpTVGVzdE9ialByb3RvdHlwZSA6IHB1YmxpYyBKU0M6
OkoKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwogICAg
IHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3RPYmpQcm90b3R5cGUqIGNyZWF0ZShKU0M6OkpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHN0YXRpYyBKU1Rlc3RPYmpQcm90b3R5
cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgSlNUZXN0T2JqUHJv
dG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE9ialBy
b3RvdHlwZT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNUZXN0T2JqUHJvdG90eXBlKGdsb2JhbERhdGEs
IGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihn
bG9iYWxEYXRhKTsKKyAgICAgICAgSlNUZXN0T2JqUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51
bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE9ialByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVz
dE9ialByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHIt
PmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAKICAgICBz
dGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0
eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVy
dHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisg
ICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEs
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKIHByaXZhdGU6
Ci0gICAgSlNUZXN0T2JqUHJvdG90eXBlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpT
Tm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKSB7IH0KKyAgICBKU1Rlc3RPYmpQ
cm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0K
IHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBK
U0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzVmlzaXRDaGls
ZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKQEAgLTE0MSw5ICsxNDEsOSBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlND
OjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9y
Jik7CiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBzdGF0aWMg
SlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJv
dG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShn
bG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQog
cHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpT
Qzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFu
Y2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCShyZXZpc2lvbiAxNDg2NTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSwxMCArMTI1LDEwIEBA
IEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvcjoKIAogdm9pZCBKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGV4ZWMtPnZtKCkpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgcHV0
RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlw
ZSwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZTo6c2VsZihleGVjLCBnbG9i
YWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwotICAgIHB1dERpcmVjdChleGVjLT5n
bG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEpLCBS
ZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZt
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmxlbmd0aCwganNOdW1iZXIoMSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVt
KTsKIH0KIAogYm9vbCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6Omdl
dE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtMTcwLDE1ICsxNzAsMTUg
QEAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6SlNUZXN0T3ZlcgogewogfQogCi12b2lk
IEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEp
OworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNf
aW5mbykpOwogfQogCiBKU09iamVjdCogSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y3Jl
YXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKIHsKLSAgICByZXR1cm4gSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZTo6
Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxEYXRhKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkp
OworICAgIHJldHVybiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlOjpjcmVh
dGUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmpl
Y3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAogdm9pZCBKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oCShyZXZpc2lvbiAxNDg2
NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw4IEBAIHB1
YmxpYzoKICAgICB0eXBlZGVmIEpTRE9NV3JhcHBlciBCYXNlOwogICAgIHN0YXRpYyBKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9ycz4gaW1wbCkKICAgICB7Ci0gICAgICAgIEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnMqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycz4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkpIEpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwp
OwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgp
KTsKKyAgICAgICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyogcHRyID0gbmV3IChOb3RO
dWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPihnbG9i
YWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMoc3RydWN0
dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGds
b2JhbE9iamVjdC0+dm0oKSk7CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogCkBAIC00Niw5
ICs0Niw5IEBAIHB1YmxpYzoKICAgICB+SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycygpOwog
ICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAKLSAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9i
YWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNHbG9iYWxPYmplY3QqKTsKQEAgLTYxLDcgKzYxLDcgQEAgcHJpdmF0ZToKICAgICBUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyogbV9pbXBsOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnMoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCos
IFBhc3NSZWZQdHI8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+KTsKLSAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJik7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlND
OjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBCYXNlOjpTdHJ1Y3R1cmVG
bGFnczsKIH07CiAKQEAgLTg5LDIxICs4OSwyMSBAQCBjbGFzcyBKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzUHJvdG90CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmpl
Y3QgQmFzZTsKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc1Byb3RvdHlwZSogY3JlYXRlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCisgICAgc3RhdGljIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUqIGNy
ZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1Byb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlPihnbG9iYWxEYXRhLmhlYXAp
KSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKGdsb2JhbERhdGEsIGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxE
YXRhKTsKKyAgICAgICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSogcHRy
ID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1By
b3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlz
aENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAKICAgICBzdGF0aWMg
Y29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZShKU0M6OkpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1
cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkgeyB9Cisg
ICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZShKU0M6OlZNJiB2bSwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05v
bkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsK
QEAgLTEyNSw5ICsxMjUsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwg
SlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUs
IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJ
bmZvIHNfaW5mbzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4g
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7CiAgICAgfQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
SlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0
dXJlRmxhZ3M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDEwICs4OCwxMCBAQCBKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zCiAKIHZvaWQgSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGV4ZWMtPnZtKCkpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgcHV0RGly
ZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwg
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpzZWxmKGV4ZWMs
IGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIo
MyksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3QoZXhl
Yy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCks
IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDMpLCBSZWFkT25seSB8IERvbnREZWxl
dGUgfCBEb250RW51bSk7CiB9CiAKIGJvb2wgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQpAQCAtMTQ3LDE1ICsxNDcsMTUgQEAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlOjpKUwogewogfQogCi12b2lkIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZTo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsK
LSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIH0KIAogSlNPYmpl
Y3QqIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Y3JlYXRlUHJvdG90eXBl
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBy
ZXR1cm4gSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpjcmVh
dGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBl
KCkpKTsKKyAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJv
dG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmpl
Y3QtPnZtKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkp
OwogfQogCiB2b2lkIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6ZGVzdHJv
eShKU0M6OkpTQ2VsbCogY2VsbCkKQEAgLTIxMSw3ICsyMTEsNyBAQCBKU1ZhbHVlIGpzVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyCiAgICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKICAg
ICBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBpbXBsID0gc3RhdGljX2Nhc3Q8
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KGNhc3RlZFRoaXMtPmltcGwoKSk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLT5jYWNoZWRWYWx1ZSgpID8gaW1wbC0+Y2FjaGVk
VmFsdWUoKS0+ZGVzZXJpYWxpemUoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIDAp
IDoganNOdWxsKCk7Ci0gICAgY2FzdGVkVGhpcy0+bV9jYWNoZWRWYWx1ZS5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBjYXN0ZWRUaGlzLCByZXN1bHQpOworICAgIGNhc3RlZFRoaXMtPm1fY2FjaGVk
VmFsdWUuc2V0KGV4ZWMtPnZtKCksIGNhc3RlZFRoaXMsIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIApAQCAtMjM0LDcgKzIzNCw3IEBAIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXIKICAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlOwogICAgIFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGltcGwtPmNhY2hlZFJlYWRvbmx5VmFsdWUoKSA/IGltcGwtPmNhY2hlZFJl
YWRvbmx5VmFsdWUoKS0+ZGVzZXJpYWxpemUoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIDApIDoganNOdWxsKCk7Ci0gICAgY2FzdGVkVGhpcy0+bV9jYWNoZWRSZWFkb25seVZhbHVl
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGNhc3RlZFRoaXMsIHJlc3VsdCk7CisgICAgY2FzdGVk
VGhpcy0+bV9jYWNoZWRSZWFkb25seVZhbHVlLnNldChleGVjLT52bSgpLCBjYXN0ZWRUaGlzLCBy
ZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgJKHJldmlzaW9uIDE0ODY1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYs
OCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0RPTVdyYXBwZXIgQmFzZTsKICAgICBzdGF0aWMg
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0
cjxUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPiBpbXBsKQogICAgIHsKLSAgICAg
ICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBwdHIgPSBuZXcgKE5vdE51
bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZT4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkpIEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7Ci0gICAgICAg
IHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpOworICAgICAg
ICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHB0ciA9IG5ldyAoTm90TnVs
bCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
PihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7CisgICAgICAgIHB0ci0+Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICAgICAgcmV0dXJuIHB0cjsKICAg
ICB9CiAKQEAgLTQ5LDkgKzQ5LDkgQEAgcHVibGljOgogICAgIH5KU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UoKTsKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19p
bmZvOwogCi0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6
U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwor
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8pOwogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CkBAIC02OCw3ICs2OCw3
IEBAIHByaXZhdGU6CiAgICAgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogbV9p
bXBsOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZShKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OkpTR2xvYmFsRGF0YSYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwog
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNWaXNpdENoaWxkcmVu
IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwogCkBAIC05NiwyMyArOTYsMjMgQEAgY2xhc3Mg
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYQogcHVibGljOgogICAgIHR5cGVkZWYg
SlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNl
bGYoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgc3RhdGljIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CiAgICAgewotICAgICAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90
b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlPihnbG9iYWxEYXRhLmhlYXApKSBKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUoZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2Jh
bERhdGEpOworICAgICAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90
b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVj
dHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1cm4g
cHRyOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7Ci0g
ICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8p
OwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VQcm90b3R5cGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9i
amVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpIHsgfQorICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZt
LCBzdHJ1Y3R1cmUpIHsgfQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpP
dmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwpAQCAtMTM0
LDkgKzEzNCw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlBy
b3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQ
cm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19p
bmZvOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAm
c19pbmZvKTsKICAgICB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Oklt
cGxlbWVudHNIYXNJbnN0YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFn
czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RU
eXBlZGVmcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTAsMTAgKzkwLDEwIEBAIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I6
OkpTVGVzdFR5cGVkZWYKIAogdm9pZCBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjpmaW5pc2hD
cmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNf
aW5mbykpOwotICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGds
b2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMiks
IFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+
dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0VHlwZWRlZnNQcm90
b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsK
KyAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwg
anNOdW1iZXIoMiksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KIAogYm9v
bCBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYgc2xvdCkKQEAgLTE1NywxNSArMTU3LDE1IEBAIEpTVGVzdFR5cGVkZWZzOjpKU1Rlc3RU
eXBlZGVmcyhTdHJ1Y3R1cmUKIHsKIH0KIAotdm9pZCBKU1Rlc3RUeXBlZGVmczo6ZmluaXNoQ3Jl
YXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBKU1Rlc3RUeXBlZGVmczo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMo
JnNfaW5mbykpOwogfQogCiBKU09iamVjdCogSlNUZXN0VHlwZWRlZnM6OmNyZWF0ZVByb3RvdHlw
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAg
cmV0dXJuIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBnbG9iYWxPYmplY3QsIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5v
YmplY3RQcm90b3R5cGUoKSkpOworICAgIHJldHVybiBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZTo6
Y3JlYXRlKGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdCwgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGU6
OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQogCiB2b2lkIEpTVGVzdFR5cGVkZWZzOjpk
ZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmgJKHJldmlzaW9u
IDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RUeXBlZGVmcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw4IEBAIHB1YmxpYzoKICAg
ICB0eXBlZGVmIEpTRE9NV3JhcHBlciBCYXNlOwogICAgIHN0YXRpYyBKU1Rlc3RUeXBlZGVmcyog
Y3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFBhc3NSZWZQdHI8VGVzdFR5cGVkZWZzPiBpbXBsKQogICAgIHsKLSAgICAgICAg
SlNUZXN0VHlwZWRlZnMqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNU
ZXN0VHlwZWRlZnM+KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLmhlYXApKSBKU1Rlc3RUeXBl
ZGVmcyhzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7Ci0gICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpOworICAgICAgICBKU1Rlc3RUeXBl
ZGVmcyogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RUeXBlZGVm
cz4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RUeXBlZGVmcyhzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCwgaW1wbCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2Jq
ZWN0LT52bSgpKTsKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAKQEAgLTQ3LDkgKzQ3LDkg
QEAgcHVibGljOgogICAgIH5KU1Rlc3RUeXBlZGVmcygpOwogICAgIHN0YXRpYyBjb25zdCBKU0M6
OkNsYXNzSW5mbyBzX2luZm87CiAKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsK
QEAgLTYyLDcgKzYyLDcgQEAgcHJpdmF0ZToKICAgICBUZXN0VHlwZWRlZnMqIG1faW1wbDsKIHBy
b3RlY3RlZDoKICAgICBKU1Rlc3RUeXBlZGVmcyhKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFs
T2JqZWN0KiwgUGFzc1JlZlB0cjxUZXN0VHlwZWRlZnM+KTsKLSAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTQzo6SlNHbG9iYWxEYXRhJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZN
Jik7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsK
IH07CiAKQEAgLTkwLDIzICs5MCwyMyBAQCBjbGFzcyBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSA6
IHB1YmxpYyBKCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFz
ZTsKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUqIGNy
ZWF0ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHN0YXRpYyBKU1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewotICAg
ICAgICBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFs
bG9jYXRlQ2VsbDxKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNU
ZXN0VHlwZWRlZnNQcm90b3R5cGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUp
OwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBKU1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDxKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdFR5cGVkZWZzUHJvdG90
eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3Jl
YXRpb24odm0pOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25z
dCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlND
OjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpT
Qzo6UHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMg
SlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBKU1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZp
bmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkgeyB9CisgICAgSlNUZXN0VHlwZWRlZnNQ
cm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0K
IHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBK
U0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwog
fTsKQEAgLTEyOCw5ICsxMjgsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFt
ZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5h
bWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xh
c3NJbmZvIHNfaW5mbzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3Ry
dWN0dXJlRmxhZ3M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3Bw
CShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJh
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDE0ICszOCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsK
IGNvbnN0IENsYXNzSW5mbyBSdW50aW1lQXJyYXk6OnNfaW5mbyA9IHsgIlJ1bnRpbWVBcnJheSIs
ICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoUnVudGltZUFycmF5KSB9
OwogCiBSdW50aW1lQXJyYXk6OlJ1bnRpbWVBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQotICAgIDogSlNBcnJheShleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVy
ZSwgMCkKKyAgICA6IEpTQXJyYXkoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCAwKQogICAgICwgbV9h
cnJheSgwKQogewogfQogCi12b2lkIFJ1bnRpbWVBcnJheTo6ZmluaXNoQ3JlYXRpb24oSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBCaW5kaW5nczo6QXJyYXkqIGFycmF5KQordm9pZCBSdW50aW1l
QXJyYXk6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgQmluZGluZ3M6OkFycmF5KiBhcnJheSkKIHsK
LSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKICAgICBtX2FycmF5
ID0gYXJyYXk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgJKHJl
dmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDggQEAgcHVibGljOgogICAgICAgICAvLyBXZSBu
ZWVkIHRvIHBhc3MgaW4gdGhlIHJpZ2h0IGdsb2JhbCBvYmplY3QgZm9yICJhcnJheSIuCiAgICAg
ICAgIFN0cnVjdHVyZSogZG9tU3RydWN0dXJlID0gV2ViQ29yZTo6ZGVwcmVjYXRlZEdldERPTVN0
cnVjdHVyZTxSdW50aW1lQXJyYXk+KGV4ZWMpOwogICAgICAgICBSdW50aW1lQXJyYXkqIHJ1bnRp
bWVBcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFJ1bnRpbWVBcnJheT4oKmV4ZWMt
PmhlYXAoKSkpIFJ1bnRpbWVBcnJheShleGVjLCBkb21TdHJ1Y3R1cmUpOwotICAgICAgICBydW50
aW1lQXJyYXktPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXkpOwotICAg
ICAgICBleGVjLT5nbG9iYWxEYXRhKCkuaGVhcC5hZGRGaW5hbGl6ZXIocnVudGltZUFycmF5LCBk
ZXN0cm95KTsKKyAgICAgICAgcnVudGltZUFycmF5LT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgp
LCBhcnJheSk7CisgICAgICAgIGV4ZWMtPnZtKCkuaGVhcC5hZGRGaW5hbGl6ZXIocnVudGltZUFy
cmF5LCBkZXN0cm95KTsKICAgICAgICAgcmV0dXJuIHJ1bnRpbWVBcnJheTsKICAgICB9CiAKQEAg
LTczLDEzICs3MywxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBnbG9iYWxPYmplY3QtPmFy
cmF5UHJvdG90eXBlKCk7CiAgICAgfQogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0
YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbywgQXJyYXlDbGFzcyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywgQXJyYXlDbGFzcyk7CiAgICAgfQogCiBwcm90ZWN0
ZWQ6Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmLCBCaW5kaW5nczo6QXJy
YXkqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgQmluZGluZ3M6OkFycmF5Kik7CiAK
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5X
aGVuTGVuZ3RoSXNOb3RaZXJvIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTQXJyYXk6
OlN0cnVjdHVyZUZsYWdzOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9t
ZXRob2QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21l
dGhvZC5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50
aW1lX21ldGhvZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDkgKzQ4LDkgQEAgUnVudGltZU1l
dGhvZDo6UnVudGltZU1ldGhvZChKU0dsb2JhbE9iagogewogfQogCi12b2lkIFJ1bnRpbWVNZXRo
b2Q6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgU3RyaW5n
JiBpZGVudCkKK3ZvaWQgUnVudGltZU1ldGhvZDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBjb25z
dCBTdHJpbmcmIGlkZW50KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEs
IGlkZW50KTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgaWRlbnQpOwogICAgIEFTU0VS
VChpbmhlcml0cygmc19pbmZvKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9y
dW50aW1lX21ldGhvZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50
aW1lX21ldGhvZC5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cnVudGltZV9tZXRob2QuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIFJ1bnRpbWVNZXRob2QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBTdHJp
bmcmIG5hbWUsIEJpbmRpbmdzOjpNZXRob2QqIG1ldGhvZCkKICAgICB7CiAgICAgICAgIFJ1bnRp
bWVNZXRob2QqIHJ1bnRpbWVNZXRob2QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxSdW50
aW1lTWV0aG9kPigqZXhlYy0+aGVhcCgpKSkgUnVudGltZU1ldGhvZChnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSwgbWV0aG9kKTsKLSAgICAgICAgcnVudGltZU1ldGhvZC0+ZmluaXNoQ3JlYXRpb24o
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBuYW1lKTsKKyAgICAgICAgcnVudGltZU1ldGhvZC0+ZmluaXNo
Q3JlYXRpb24oZXhlYy0+dm0oKSwgbmFtZSk7CiAgICAgICAgIHJldHVybiBydW50aW1lTWV0aG9k
OwogICAgIH0KIApAQCAtNTMsMTQgKzUzLDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGds
b2JhbE9iamVjdC0+ZnVuY3Rpb25Qcm90b3R5cGUoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKIHByb3RlY3RlZDoKICAg
ICBSdW50aW1lTWV0aG9kKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgQmluZGluZ3M6Ok1l
dGhvZCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiwgY29uc3QgU3Ry
aW5nJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIGNvbnN0IFN0cmluZyYpOwogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IEludGVybmFsRnVuY3Rpb246OlN0cnVjdHVyZUZsYWdzOwogICAgIHN0YXRp
YyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDE0ICszOCwxNCBAQCBuYW1lc3BhY2UgQmluZGluZ3MgewogY29uc3QgQ2xhc3NJbmZv
IFJ1bnRpbWVPYmplY3Q6OnNfaW5mbyA9IHsgIlJ1bnRpbWVPYmplY3QiLCAmQmFzZTo6c19pbmZv
LCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFJ1bnRpbWVPYmplY3QpIH07CiAKIFJ1bnRpbWVP
YmplY3Q6OlJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8SW5zdGFuY2U+IGluc3RhbmNl
KQotICAgIDogSlNEZXN0cnVjdGlibGVPYmplY3QoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCks
IHN0cnVjdHVyZSkKKyAgICA6IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0KGdsb2JhbE9iamVjdC0+dm0o
KSwgc3RydWN0dXJlKQogICAgICwgbV9pbnN0YW5jZShpbnN0YW5jZSkKIHsKIH0KIAogdm9pZCBS
dW50aW1lT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgp
KTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwogICAgIEFT
U0VSVChpbmhlcml0cygmc19pbmZvKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9ydW50aW1lX29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9y
dW50aW1lX29iamVjdC5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvcnVudGltZV9vYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsOSArNjgsOSBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpOwogICAg
IH0KIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlKQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwor
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAg
IH0KIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfcm9v
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5j
cHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jv
b3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIFBhc3NSZWZQdHI8Um9vdE9i
amVjdD4gUm9vdE9iamVjdDo6Y3JlYXQKIFJvb3RPYmplY3Q6OlJvb3RPYmplY3QoY29uc3Qgdm9p
ZCogbmF0aXZlSGFuZGxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIDogbV9p
c1ZhbGlkKHRydWUpCiAgICAgLCBtX25hdGl2ZUhhbmRsZShuYXRpdmVIYW5kbGUpCi0gICAgLCBt
X2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0KQor
ICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QpCiB7
CiAgICAgQVNTRVJUKGdsb2JhbE9iamVjdCk7CiAgICAgcm9vdE9iamVjdFNldCgpLT5hZGQodGhp
cyk7CkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBSb290T2JqZWN0OjpnY1Byb3RlY3QoSlNPYmpl
Y3QqIGpzTwogICAgIEFTU0VSVChtX2lzVmFsaWQpOwogICAgIAogICAgIGlmICghbV9wcm90ZWN0
Q291bnRTZXQuY29udGFpbnMoanNPYmplY3QpKSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrSG9sZGVy
IGhvbGRlcigmZ2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEpTQzo6SlNM
b2NrSG9sZGVyIGhvbGRlcigmZ2xvYmFsT2JqZWN0KCktPnZtKCkpOwogICAgICAgICBKU0M6Omdj
UHJvdGVjdChqc09iamVjdCk7CiAgICAgfQogICAgIG1fcHJvdGVjdENvdW50U2V0LmFkZChqc09i
amVjdCk7CkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBSb290T2JqZWN0OjpnY1VucHJvdGVjdChK
U09iamVjdCogagogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9wcm90ZWN0Q291bnRTZXQu
Y291bnQoanNPYmplY3QpID09IDEpIHsKLSAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgaG9sZGVy
KCZnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2tIb2xk
ZXIgaG9sZGVyKCZnbG9iYWxPYmplY3QoKS0+dm0oKSk7CiAgICAgICAgIEpTQzo6Z2NVbnByb3Rl
Y3QoanNPYmplY3QpOwogICAgIH0KICAgICBtX3Byb3RlY3RDb3VudFNldC5yZW1vdmUoanNPYmpl
Y3QpOwpAQCAtMTgxLDEwICsxODEsMTAgQEAgSlNHbG9iYWxPYmplY3QqIFJvb3RPYmplY3Q6Omds
b2JhbE9iamVjdAogCiB2b2lkIFJvb3RPYmplY3Q6OnVwZGF0ZUdsb2JhbE9iamVjdChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIG1fZ2xvYmFsT2JqZWN0LnNldChnbG9iYWxP
YmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0KTsKKyAgICBtX2dsb2JhbE9iamVjdC5z
ZXQoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QpOwogfQogCi12b2lkIFJvb3RPYmpl
Y3Q6OmFkZFJ1bnRpbWVPYmplY3QoSlNHbG9iYWxEYXRhJiwgUnVudGltZU9iamVjdCogb2JqZWN0
KQordm9pZCBSb290T2JqZWN0OjphZGRSdW50aW1lT2JqZWN0KFZNJiwgUnVudGltZU9iamVjdCog
b2JqZWN0KQogewogICAgIEFTU0VSVChtX2lzVmFsaWQpOwogICAgIHdlYWtBZGQobV9ydW50aW1l
T2JqZWN0cywgb2JqZWN0LCBKU0M6OlBhc3NXZWFrPFJ1bnRpbWVPYmplY3Q+KG9iamVjdCwgdGhp
cykpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuaAkocmV2aXNpb24gMTQ4
NjU1KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KCkgY29uc3Q7CiAgICAgdm9pZCB1cGRhdGVHbG9iYWxPYmplY3QoSlNHbG9iYWxPYmpl
Y3QqKTsKIAotICAgIHZvaWQgYWRkUnVudGltZU9iamVjdChKU0dsb2JhbERhdGEmLCBSdW50aW1l
T2JqZWN0Kik7CisgICAgdm9pZCBhZGRSdW50aW1lT2JqZWN0KFZNJiwgUnVudGltZU9iamVjdCop
OwogICAgIHZvaWQgcmVtb3ZlUnVudGltZU9iamVjdChSdW50aW1lT2JqZWN0Kik7CiAKICAgICBz
dHJ1Y3QgSW52YWxpZGF0aW9uQ2FsbGJhY2sgewpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdl
L2MvQ1J1bnRpbWVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
Yy9DUnVudGltZU9iamVjdC5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvYy9DUnVudGltZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw5ICs1NCw5IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiBwcml2YXRl
OgpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAJKHJldmlzaW9uIDE0
ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTcsMTMgKzExNywxMyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFdlIG5lZWQg
dG8gcGFzcyBpbiB0aGUgcmlnaHQgZ2xvYmFsIG9iamVjdCBmb3IgImkiLgogICAgICAgICBTdHJ1
Y3R1cmUqIGRvbVN0cnVjdHVyZSA9IFdlYkNvcmU6OmRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8
Q1J1bnRpbWVNZXRob2Q+KGV4ZWMpOwogICAgICAgICBDUnVudGltZU1ldGhvZCogcnVudGltZU1l
dGhvZCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPENSdW50aW1lTWV0aG9kPigqZXhlYy0+
aGVhcCgpKSkgQ1J1bnRpbWVNZXRob2QoZ2xvYmFsT2JqZWN0LCBkb21TdHJ1Y3R1cmUsIG1ldGhv
ZCk7Ci0gICAgICAgIHJ1bnRpbWVNZXRob2QtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERh
dGEoKSwgbmFtZSk7CisgICAgICAgIHJ1bnRpbWVNZXRob2QtPmZpbmlzaENyZWF0aW9uKGV4ZWMt
PnZtKCksIG5hbWUpOwogICAgICAgICByZXR1cm4gcnVudGltZU1ldGhvZDsKICAgICB9CiAKLSAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAg
ICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKQEAgLTEzNCw5ICsxMzQsOSBAQCBwcml2
YXRlOgogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAgewotICAgICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihnbG9iYWxEYXRhLCBuYW1lKTsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0sIG5hbWUpOwogICAgICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qc2MvQnJpZGdlSlNDLmNwcAkocmV2aXNpb24g
MTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIEpTT2JqZWN0KiBJbnN0YW5jZTo6Y3JlYXRlUnVu
dGltZU9iamVjdCgKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBSdW50aW1lT2Jq
ZWN0KiBuZXdPYmplY3QgPSBuZXdSdW50aW1lT2JqZWN0KGV4ZWMpOwogICAgIG1fcnVudGltZU9i
amVjdCA9IFBhc3NXZWFrPFJ1bnRpbWVPYmplY3Q+KG5ld09iamVjdCk7Ci0gICAgbV9yb290T2Jq
ZWN0LT5hZGRSdW50aW1lT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3T2JqZWN0KTsKKyAg
ICBtX3Jvb3RPYmplY3QtPmFkZFJ1bnRpbWVPYmplY3QoZXhlYy0+dm0oKSwgbmV3T2JqZWN0KTsK
ICAgICByZXR1cm4gbmV3T2JqZWN0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
b2JqYy9PYmpDUnVudGltZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9vYmpjL09iakNSdW50aW1lT2JqZWN0LmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9vYmpjL09iakNSdW50aW1lT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDkgKzUxLDkgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBz
X2luZm87CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSkKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsK
ICAgICB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpj
X2luc3RhbmNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29i
amNfaW5zdGFuY2UubW0JKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9vYmpjL29iamNfaW5zdGFuY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4NywxMyArMTg3LDEz
IEBAIHB1YmxpYzoKICAgICAgICAgLy8gV2UgbmVlZCB0byBwYXNzIGluIHRoZSByaWdodCBnbG9i
YWwgb2JqZWN0IGZvciAiaSIuCiAgICAgICAgIFN0cnVjdHVyZSogZG9tU3RydWN0dXJlID0gV2Vi
Q29yZTo6ZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZTxPYmpDUnVudGltZU1ldGhvZD4oZXhlYyk7
CiAgICAgICAgIE9iakNSdW50aW1lTWV0aG9kKiBydW50aW1lTWV0aG9kID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8T2JqQ1J1bnRpbWVNZXRob2Q+KCpleGVjLT5oZWFwKCkpKSBPYmpDUnVu
dGltZU1ldGhvZChnbG9iYWxPYmplY3QsIGRvbVN0cnVjdHVyZSwgbWV0aG9kKTsKLSAgICAgICAg
cnVudGltZU1ldGhvZC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBuYW1lKTsK
KyAgICAgICAgcnVudGltZU1ldGhvZC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwgbmFtZSk7
CiAgICAgICAgIHJldHVybiBydW50aW1lTWV0aG9kOwogICAgIH0KIAotICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBz
dGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKQEAgLTIwNiw5ICsyMDYsOSBAQCBwcml2YXRl
OgogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAgewotICAgICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbihnbG9iYWxEYXRhLCBuYW1lKTsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0sIG5hbWUpOwogICAgICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogICAgIH0KIH07
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAkocmV2aXNp
b24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExMiw5ICsxMTIsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpOwogICAgIH0KIAotICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogcHJvdGVjdGVkOgpJ
bmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbQkocmV2aXNp
b24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNyArMTkxLDcgQEAgdW5zaWduZWQgaW50IE9iamNBcnJh
eTo6Z2V0TGVuZ3RoKCkgY29ucwogY29uc3QgQ2xhc3NJbmZvIE9iamNGYWxsYmFja09iamVjdElt
cDo6c19pbmZvID0geyAiT2JqY0ZhbGxiYWNrT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgMCwgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShPYmpjRmFsbGJhY2tPYmplY3RJbXApIH07CiAKIE9iamNGYWxs
YmFja09iamVjdEltcDo6T2JqY0ZhbGxiYWNrT2JqZWN0SW1wKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBPYmpjSW5zdGFuY2UqIGksIGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lKQotICAgIDogSlNEZXN0cnVjdGlibGVPYmplY3QoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSkKKyAgICA6IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
KGdsb2JhbE9iamVjdC0+dm0oKSwgc3RydWN0dXJlKQogICAgICwgX2luc3RhbmNlKGkpCiAgICAg
LCBtX2l0ZW0ocHJvcGVydHlOYW1lKQogewpAQCAtMjA0LDcgKzIwNCw3IEBAIHZvaWQgT2JqY0Zh
bGxiYWNrT2JqZWN0SW1wOjpkZXN0cm95KEpTQ2UKIAogdm9pZCBPYmpjRmFsbGJhY2tPYmplY3RJ
bXA6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpOworICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKCZzX2luZm8pKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2lu
c3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5z
dGFuY2UuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQv
cXRfaW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw5ICs2MCw5IEBAIHB1YmxpYzoK
ICAgICAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCAgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6
CkBAIC05MSw3ICs5MSw3IEBAIFF0SW5zdGFuY2U6OlF0SW5zdGFuY2UoUU9iamVjdCogbywgUGFz
c1IKIAogUXRJbnN0YW5jZTo6flF0SW5zdGFuY2UoKQogewotICAgIEpTTG9ja0hvbGRlciBsb2Nr
KFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAK
ICAgICBjYWNoZWRJbnN0YW5jZXMucmVtb3ZlKG1faGFzaGtleSk7CiAKQEAgLTExOCw3ICsxMTgs
NyBAQCBRdEluc3RhbmNlOjp+UXRJbnN0YW5jZSgpCiAKIFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4g
UXRJbnN0YW5jZTo6Z2V0UXRJbnN0YW5jZShRT2JqZWN0KiBvLCBQYXNzUmVmUHRyPFJvb3RPYmpl
Y3Q+IHJvb3RPYmplY3QsIFZhbHVlT3duZXJzaGlwIG93bmVyc2hpcCkKIHsKLSAgICBKU0xvY2tI
b2xkZXIgbG9jayhXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNvbW1v
blZNKCkpOwogCiAgICAgZm9yZWFjaCAoUXRJbnN0YW5jZSogaW5zdGFuY2UsIGNhY2hlZEluc3Rh
bmNlcy52YWx1ZXMobykpCiAgICAgICAgIGlmIChpbnN0YW5jZS0+cm9vdE9iamVjdCgpID09IHJv
b3RPYmplY3QpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDcgKzEzMiw3
IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2VuZGlmCiAKLSNpbmNsdWRl
IDxydW50aW1lL0pTR2xvYmFsRGF0YS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KICNpbmNs
dWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4KIAogI2lmIEVOQUJMRShNSUNST0RBVEEpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9B
dG9taWNTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7Ci0gICAgY2xhc3MgSlNHbG9iYWxEYXRh
OworICAgIGNsYXNzIFZNOwogICAgIGNsYXNzIFNsb3RWaXNpdG9yOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCShyZXZpc2lvbiAx
NDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQwNCwxNCArNDA0LDE0IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OlRhc2s6On5UYXNrKCkKIHsKIH0KIAotSlNDOjpKU0dsb2JhbERhdGEqIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6Omdsb2JhbERhdGEoKQorSlNDOjpWTSogU2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6dm0oKQogewogICAgICBpZiAoaXNEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gSlNET01X
aW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpOworICAgICAgICByZXR1cm4gSlNET01XaW5kb3c6
OmNvbW1vblZNKCk7CiAKICNpZiBFTkFCTEUoV09SS0VSUykKICAgICBpZiAoaXNXb3JrZXJDb250
ZXh0KCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4odGhpcykt
PnNjcmlwdCgpLT5nbG9iYWxEYXRhKCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXb3Jr
ZXJDb250ZXh0Kj4odGhpcyktPnNjcmlwdCgpLT52bSgpOwogI2VuZGlmCiAKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIGNsYXNzIEV4ZWNTdGF0ZTsKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2Ns
YXNzIFZNOwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNDMsNyArMTQzLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgcmVtb3ZlVGltZW91dChpbnQgdGltZW91dElkKSB7IG1fdGltZW91dHMu
cmVtb3ZlKHRpbWVvdXRJZCk7IH0KICAgICBET01UaW1lciogZmluZFRpbWVvdXQoaW50IHRpbWVv
dXRJZCkgeyByZXR1cm4gbV90aW1lb3V0cy5nZXQodGltZW91dElkKTsgfQogCi0gICAgSlNDOjpK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEoKTsKKyAgICBKU0M6OlZNKiB2bSgpOwogCiAgICAgLy8g
SW50ZXJ2YWwgaXMgaW4gc2Vjb25kcy4KICAgICB2b2lkIGFkanVzdE1pbmltdW1UaW1lckludGVy
dmFsKGRvdWJsZSBvbGRNaW5pbXVtVGltZXJJbnRlcnZhbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1
MCw5ICs1NTAsOSBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlCiAg
ICAgbV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5zZXRTdHJva2VUaGlja25lc3MoMSk7CiAgICAg
bV9jb250ZXh0U3RhdGVTYXZlciA9IGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyKCptX2ltYWdlQnVmZmVyLT5jb250ZXh0KCkpKTsKIAotICAgIEpTQzo6SlNMb2NrSG9sZGVy
IGxvY2soc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5nbG9iYWxEYXRhKCkpOworICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT52bSgpKTsKICAgICBz
aXplX3QgbnVtQnl0ZXMgPSA0ICogbV9pbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCkud2lkdGgo
KSAqIG1faW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpLmhlaWdodCgpOwotICAgIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+Z2xvYmFsRGF0YSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29z
dChudW1CeXRlcyk7CisgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT52bSgpLT5oZWFwLnJl
cG9ydEV4dHJhTWVtb3J5Q29zdChudW1CeXRlcyk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZB
U19CQUNLSU5HX1NUT1JFKSB8fCAoRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSkKICAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4
dC0+aXMyZCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlTG9hZGVyLmNwcAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw5ICs3OSw5IEBAIHZvaWQgSFRNTEltYWdlTG9hZGVy
Ojpub3RpZnlGaW5pc2hlZChDYWMKICAgICBib29sIGxvYWRFcnJvciA9IGNhY2hlZEltYWdlLT5l
cnJvck9jY3VycmVkKCkgfHwgY2FjaGVkSW1hZ2UtPnJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUo
KSA+PSA0MDA7CiAgICAgaWYgKCFsb2FkRXJyb3IpIHsKICAgICAgICAgaWYgKCFlbGVtZW50LT5p
bkRvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIEpTQzo6SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKTsKLSAgICAgICAgICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsRGF0YSk7Ci0gICAgICAgICAgICBnbG9iYWxEYXRh
LT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChjYWNoZWRJbWFnZS0+ZW5jb2RlZFNpemUoKSk7
CisgICAgICAgICAgICBKU0M6OlZNKiB2bSA9IEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKTsK
KyAgICAgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgICAgICAgICAgdm0t
PmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KGNhY2hlZEltYWdlLT5lbmNvZGVkU2l6ZSgpKTsK
ICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1Njcmlw
dEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1Nj
cmlwdEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9TY3JpcHRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3
IEBAIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBTY3JpcHRBcmd1bWUKIH0KIAogU2NyaXB0
QXJndW1lbnRzOjpTY3JpcHRBcmd1bWVudHMoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBWZWN0
b3I8U2NyaXB0VmFsdWU+JiBhcmd1bWVudHMpCi0gICAgOiBtX2dsb2JhbE9iamVjdChzY3JpcHRT
dGF0ZS0+Z2xvYmFsRGF0YSgpLCBzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKQor
ICAgIDogbV9nbG9iYWxPYmplY3Qoc2NyaXB0U3RhdGUtPnZtKCksIHNjcmlwdFN0YXRlLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpCiB7CiAgICAgbV9hcmd1bWVudHMuc3dhcChhcmd1bWVudHMpOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFz
ZS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0lj
b25EYXRhYmFzZUJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxMyArNDcsMTMgQEAgYm9v
bCBJY29uRGF0YWJhc2VCYXNlOjpvcGVuKGNvbnN0IFN0cmluZwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotc3RhdGljIEljb25EYXRhYmFzZUJhc2UqIGdsb2JhbERhdGFiYXNlID0gMDsKK3N0YXRp
YyBJY29uRGF0YWJhc2VCYXNlKiB2bWJhc2UgPSAwOwogCiAvLyBGdW5jdGlvbnMgdG8gZ2V0L3Nl
dCB0aGUgZ2xvYmFsIGljb24gZGF0YWJhc2UuCiBJY29uRGF0YWJhc2VCYXNlJiBpY29uRGF0YWJh
c2UoKQogewotICAgIGlmIChnbG9iYWxEYXRhYmFzZSkKLSAgICAgICAgcmV0dXJuICpnbG9iYWxE
YXRhYmFzZTsKKyAgICBpZiAodm1iYXNlKQorICAgICAgICByZXR1cm4gKnZtYmFzZTsKIAogICAg
IHN0YXRpYyBJY29uRGF0YWJhc2VCYXNlKiBkZWZhdWx0RGF0YWJhc2UgPSAwOyAgICAgICAgCiAg
ICAgaWYgKCFkZWZhdWx0RGF0YWJhc2UpCkBAIC02NCw3ICs2NCw3IEBAIEljb25EYXRhYmFzZUJh
c2UmIGljb25EYXRhYmFzZSgpCiAKIHZvaWQgc2V0R2xvYmFsSWNvbkRhdGFiYXNlKEljb25EYXRh
YmFzZUJhc2UqIG5ld0dsb2JhbERhdGFiYXNlKQogewotICAgIGdsb2JhbERhdGFiYXNlID0gbmV3
R2xvYmFsRGF0YWJhc2U7CisgICAgdm1iYXNlID0gbmV3R2xvYmFsRGF0YWJhc2U7CiB9CiAKIGJv
b2wgZG9jdW1lbnRDYW5IYXZlSWNvbihjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvTWVtb3J5VXNhZ2VTdXBwb3J0UXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L01lbW9yeVVzYWdlU3VwcG9ydFF0
LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvTWVt
b3J5VXNhZ2VTdXBwb3J0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHN0
YXRpYyBpbnQgbWVtb3J5VXNhZ2VLQigpCiAKICAgICAvLyBFeHRyYWN0IG1lbW9yeSBzdGF0aXN0
aWNzIGZyb20gSmF2YVNjcmlwdENvcmU6CiAgICAgSlNDOjpHbG9iYWxNZW1vcnlTdGF0aXN0aWNz
IGpzY1N0YXRzID0gSlNDOjpnbG9iYWxNZW1vcnlTdGF0aXN0aWNzKCk7Ci0gICAgc2l6ZV90IGpz
Y0hlYXBVc2FnZSA9IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5jYXBh
Y2l0eSgpOworICAgIHNpemVfdCBqc2NIZWFwVXNhZ2UgPSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0o
KS0+aGVhcC5jYXBhY2l0eSgpOwogICAgIHJldHVybiAobWFsbG9jVXNhZ2UgKyBmbVN0YXRzLmNv
bW1pdHRlZFZNQnl0ZXMgKyBqc2NTdGF0cy5zdGFja0J5dGVzICsganNjU3RhdHMuSklUQnl0ZXMg
KyBqc2NIZWFwVXNhZ2UpID4+IDEwOwogfQogCkBAIC03MCw3ICs3MCw3IEBAIHN0YXRpYyBpbnQg
YWN0dWFsTWVtb3J5VXNhZ2VLQigpCiAKICAgICAvLyBFeHRyYWN0IG1lbW9yeSBzdGF0aXN0aWNz
IGZyb20gSmF2YVNjcmlwdENvcmU6CiAgICAgSlNDOjpHbG9iYWxNZW1vcnlTdGF0aXN0aWNzIGpz
Y1N0YXRzID0gSlNDOjpnbG9iYWxNZW1vcnlTdGF0aXN0aWNzKCk7Ci0gICAgc2l6ZV90IGpzY0hl
YXBVc2FnZSA9IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5zaXplKCk7
CisgICAgc2l6ZV90IGpzY0hlYXBVc2FnZSA9IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFw
LnNpemUoKTsKICAgICByZXR1cm4gKG1hbGxvY1VzYWdlICsgZm1TdGF0cy5jb21taXR0ZWRWTUJ5
dGVzIC0gZm1TdGF0cy5mcmVlTGlzdEJ5dGVzICsganNjU3RhdHMuc3RhY2tCeXRlcyArIGpzY1N0
YXRzLkpJVEJ5dGVzICsganNjSGVhcFVzYWdlKSA+PiAxMDsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGllc1dpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGllc1dpbi5jcHAJ
KHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9h
cmRVdGlsaXRpZXNXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsMjYgKzE5MCwyNiBAQCBI
R0xPQkFMIGNyZWF0ZUdsb2JhbERhdGEoY29uc3QgS1VSTCYgdXJsCiAKIEhHTE9CQUwgY3JlYXRl
R2xvYmFsRGF0YShjb25zdCBTdHJpbmcmIHN0cikKIHsKLSAgICBIR0xPQkFMIGdsb2JhbERhdGEg
PSA6Okdsb2JhbEFsbG9jKEdQVFIsIChzdHIubGVuZ3RoKCkgKyAxKSAqIHNpemVvZihVQ2hhcikp
OwotICAgIGlmICghZ2xvYmFsRGF0YSkKKyAgICBIR0xPQkFMIHZtID0gOjpHbG9iYWxBbGxvYyhH
UFRSLCAoc3RyLmxlbmd0aCgpICsgMSkgKiBzaXplb2YoVUNoYXIpKTsKKyAgICBpZiAoIXZtKQog
ICAgICAgICByZXR1cm4gMDsKLSAgICBVQ2hhciogYnVmZmVyID0gc3RhdGljX2Nhc3Q8VUNoYXIq
PihHbG9iYWxMb2NrKGdsb2JhbERhdGEpKTsKKyAgICBVQ2hhciogYnVmZmVyID0gc3RhdGljX2Nh
c3Q8VUNoYXIqPihHbG9iYWxMb2NrKHZtKSk7CiAgICAgbWVtY3B5KGJ1ZmZlciwgc3RyLmNoYXJh
Y3RlcnMoKSwgc3RyLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgYnVmZmVyW3N0ci5s
ZW5ndGgoKV0gPSAwOwotICAgIEdsb2JhbFVubG9jayhnbG9iYWxEYXRhKTsKLSAgICByZXR1cm4g
Z2xvYmFsRGF0YTsKKyAgICBHbG9iYWxVbmxvY2sodm0pOworICAgIHJldHVybiB2bTsKIH0KIAog
SEdMT0JBTCBjcmVhdGVHbG9iYWxEYXRhKGNvbnN0IFZlY3RvcjxjaGFyPiYgdmVjdG9yKQogewot
ICAgIEhHTE9CQUwgZ2xvYmFsRGF0YSA9IDo6R2xvYmFsQWxsb2MoR1BUUiwgdmVjdG9yLnNpemUo
KSArIDEpOwotICAgIGlmICghZ2xvYmFsRGF0YSkKKyAgICBIR0xPQkFMIHZtID0gOjpHbG9iYWxB
bGxvYyhHUFRSLCB2ZWN0b3Iuc2l6ZSgpICsgMSk7CisgICAgaWYgKCF2bSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgY2hhciogYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KEdsb2JhbExvY2so
Z2xvYmFsRGF0YSkpOworICAgIGNoYXIqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPihHbG9i
YWxMb2NrKHZtKSk7CiAgICAgbWVtY3B5KGJ1ZmZlciwgdmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNp
emUoKSk7CiAgICAgYnVmZmVyW3ZlY3Rvci5zaXplKCldID0gMDsKLSAgICBHbG9iYWxVbmxvY2so
Z2xvYmFsRGF0YSk7Ci0gICAgcmV0dXJuIGdsb2JhbERhdGE7CisgICAgR2xvYmFsVW5sb2NrKHZt
KTsKKyAgICByZXR1cm4gdm07CiB9CiAKIHN0YXRpYyBTdHJpbmcgZ2V0RnVsbENGSFRNTChJRGF0
YU9iamVjdCogZGF0YSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDcgKzI0Niw3IEBAIGJvb2wgUGx1Z2luVmlldzo6c3Rh
cnQoKQogICAgIE5QRXJyb3IgbnBFcnI7CiAgICAgewogICAgICAgICBQbHVnaW5WaWV3OjpzZXRD
dXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7Cisg
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAg
ICAgIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPm5ld3AoKE5QTUlNRVR5cGUpbV9t
aW1lVHlwZS51dGY4KCkuZGF0YSgpLCBtX2luc3RhbmNlLCBtX21vZGUsIG1fcGFyYW1Db3VudCwg
bV9wYXJhbU5hbWVzLCBtX3BhcmFtVmFsdWVzLCBOVUxMKTsKICAgICAgICAgc2V0Q2FsbGluZ1Bs
dWdpbihmYWxzZSk7CkBAIC0zMzQsNyArMzM0LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpzdG9wKCkK
IAogICAgIG1faXNTdGFydGVkID0gZmFsc2U7CiAKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
KyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vblZNKCkpOwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAjaWYg
ZGVmaW5lZChYUF9XSU4pICYmICFQTEFURk9STShHVEspCkBAIC00NTEsNyArNDUxLDcgQEAgdm9p
ZCBQbHVnaW5WaWV3OjpwZXJmb3JtUmVxdWVzdChQbHVnaW5SZQogICAgICAgICAgICAgLy8gRklY
TUU6IDxyZGFyOi8vcHJvYmxlbS80ODA3NDY5PiBUaGlzIHNob3VsZCBiZSBzZW50IHdoZW4gdGhl
IGRvY3VtZW50IGhhcyBmaW5pc2hlZCBsb2FkaW5nCiAgICAgICAgICAgICBpZiAocmVxdWVzdC0+
c2VuZE5vdGlmaWNhdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3Vy
cmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEo
KSk7CisgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgICAgICAgICBzZXRDYWxs
aW5nUGx1Z2luKHRydWUpOwogICAgICAgICAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT51cmxub3RpZnkobV9pbnN0YW5jZSwgcmVxdWVzdFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
LCBOUFJFU19ET05FLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCkpOwogICAgICAgICAgICAgICAgIHNl
dENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtNzM1LDcgKzczNSw3IEBAIE5QT2JqZWN0KiBQbHVn
aW5WaWV3OjpucE9iamVjdCgpCiAgICAgTlBFcnJvciBucEVycjsKICAgICB7CiAgICAgICAgIFBs
dWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdp
bih0cnVlKTsKICAgICAgICAgbnBFcnIgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFs
dWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCwgJm9iamVjdCk7CiAg
ICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtMTUwNyw3ICsxNTA3LDcgQEAgdm9p
ZCBQbHVnaW5WaWV3Ojpwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYQogICAgICAgICByZXR1cm47CiAK
ICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1
ZSk7CiAgICAgTlBCb29sIHZhbHVlID0gcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZDsKICAgICBzZXRW
YWx1ZShtX2luc3RhbmNlLCBOUE5WcHJpdmF0ZU1vZGVCb29sLCAmdmFsdWUpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpblZpZXdCbGFja0JlcnJ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmll
d0JsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld0JsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjQsNyArMjY0LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVu
dAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1
Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkp
OwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAKICAgICBib29sIGFjY2VwdGVkID0gbV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZldmVudCk7CkBAIC04MTUs
NyArODE1LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKICAgICAg
ICAgKChOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiltX25wV2luZG93LndzX2luZm8pLT53aW5k
b3dHcm91cCA9IHdpbmRvdy0+d2luZG93R3JvdXAoKTsKIAogICAgIFBsdWdpblZpZXc6OnNldEN1
cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uVk0oKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAgIC8vIEZJWE1FOiBQ
YXNzaW5nIHpvb21GYWN0b3IgdG8gc2V0d2luZG93IG1ha2Ugd2luZG93ZWQgcGx1Z2luIHNjYWxl
IGluY29ycmVjdGx5LgpAQCAtMTA2NSw3ICsxMDY1LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0
Zm9ybVN0YXJ0KCkKIAogICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUp
IHsKICAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAg
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICBz
ZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+
Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVtYmVkLCAmbV9uZWVkc1hFbWJl
ZCk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtMTE0Niw3ICsxMTQ2LDcg
QEAgdm9pZCBQbHVnaW5WaWV3OjpnZXRXaW5kb3dJbmZvKFZlY3RvcjxQbAogICAgIHZvaWQqIHZh
bFB0ciA9IDA7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsK
LSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgIHNldENhbGxp
bmdQbHVnaW4odHJ1ZSk7CiAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKG1f
aW5zdGFuY2UsIE5QUFZwbHVnaW5TY3JlZW5XaW5kb3csICZ2YWxQdHIpOwogICAgIHNldENhbGxp
bmdQbHVnaW4oZmFsc2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2lu
Vmlld0VmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1
Z2luVmlld0VmbC5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBA
IGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0g
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNl
Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICBzZXRDYWxsaW5n
UGx1Z2luKHRydWUpOwogCiAgICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1Z2luLT5wbHVnaW5GdW5j
cygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDAsNyArMTAwLDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVu
dAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1
Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkp
OwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAKICAgICBib29sIGFjY2VwdGVkID0gIW1f
cGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwpAQCAtMjY0
LDcgKzI2NCw3IEBAIHZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiAKIAog
dm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50
KQogewotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2lu
ZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAKICAgICBp
ZiAoIW1faXNTdGFydGVkIHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3Nm
dWxseSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzkwLDcgKzM5MCw3IEBAIHN0YXRpYyB2b2lkIHNl
dFhDcm9zc2luZ0V2ZW50U3BlY2lmaWNGaWUKIAogdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3Vz
ZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQogewotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwor
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uVk0oKSk7CiAKICAgICBpZiAoIW1faXNTdGFydGVkIHx8IG1fc3RhdHVzICE9IFBs
dWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTE1LDcg
KzUxNSw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAgICAgfQog
CiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25K
U0dsb2JhbERhdGEoKSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRy
dWUpOwogICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwg
Jm1fbnBXaW5kb3cpOwogICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtNzg5LDcgKzc4
OSw3IEBAIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCiAKICAgICBpZiAobV9wbHVn
aW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKSB7CiAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1
cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAg
ICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVn
aW5OZWVkc1hFbWJlZCwgJm1fbmVlZHNYRW1iZWQpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2lu
KGZhbHNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luVmlld01h
Yy5tbQkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1
Z2luVmlld01hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDk1LDcgKzQ5NSw3IEBAIHZvaWQgUGx1
Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAgICAgICAgICAgICBtX25wV2luZG93LmNs
aXBSZWN0LnJpZ2h0IC0gbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0LCBtX25wV2luZG93LmNsaXBS
ZWN0LmJvdHRvbSAtIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wKTsKIAogICAgIFBsdWdpblZpZXc6
OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwor
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uVk0oKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKICAg
ICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKQEAgLTEwNjAsNyArMTA2MCw3IEBAIFBvaW50IFBs
dWdpblZpZXc6Om1vdXNlUG9zRm9yUGx1Z2luKE1vdXMKIGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0
Y2hOUEV2ZW50KE5QRXZlbnQmIGV2ZW50KQogewogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQ
bHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0o
KSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAgIGJvb2wgYWNjZXB0ZWQgPSBt
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKQEAgLTEw
NzUsNyArMTA3NSw3IEBAIGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQK
IGludDE2X3QgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUENvY29hRXZlbnQoTlBDb2NvYUV2ZW50JiBj
b2NvYUV2ZW50KQogewogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMp
OwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgc2V0Q2Fs
bGluZ1BsdWdpbih0cnVlKTsKIAogICAgIGludDE2X3QgcmVzcG9uc2UgPSBtX3BsdWdpbi0+cGx1
Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmNvY29hRXZlbnQpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcAkocmV2aXNpb24gMTQ4NjU1KQor
KysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNzQsNyArMjc0LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQo
TlBFdmVudAogICAgIH0KIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRo
aXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2lu
ZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgc2V0
Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBib29sIGFjY2VwdGVkID0gIW1fcGx1Z2luLT5wbHVn
aW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwogICAgIHNldENhbGxpbmdQbHVn
aW4oZmFsc2UpOwpAQCAtNTU3LDcgKzU1Nyw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5k
b3dJZk5lZWRlZCgpCiAgICAgfQogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZp
ZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAg
ICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5z
ZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOwogICAgIHNldENhbGxpbmdQbHVnaW4o
ZmFsc2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dp
bi5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1Bs
dWdpblZpZXdXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjgsNyArNTI4LDcgQEAgYm9vbCBQ
bHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudAogICAgICAgICBzaG91bGRQb3AgPSB0
cnVlOwogICAgIH0KIAotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7
CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBib29sIGFjY2VwdGVkID0gIW1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCk7CiAgICAgc2V0
Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkBAIC02ODcsNyArNjg3LDcgQEAgdm9pZCBQbHVnaW5WaWV3
OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleQogICAgIH0gZWxzZQogICAgICAgICByZXR1cm47CiAK
LSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgIGlmIChkaXNw
YXRjaE5QRXZlbnQobnBFdmVudCkpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgp
OwogfQpAQCAtNzU3LDcgKzc1Nyw3IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVu
dChNb3VzZUUKICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2Jh
bERhdGEoKSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYmFjayBw
b3J0aW5nIHRoZSBodHRwOi8vd2Via2l0Lm9yZy9iLzU4MTA4IGZpeCBoZXJlLgogICAgIGlmIChk
aXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxl
ZCgpOwpAQCAtODUxLDcgKzg1MSw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0
KGNvbnN0IEkKICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7CiAKICAgICBpZiAobV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykgewotICAgICAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0
cnVlKTsKICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3Rh
bmNlLCAmbV9ucFdpbmRvdyk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNw
cAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3Jl
VGVzdFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHZvaWQgaW5q
ZWN0SW50ZXJuYWxzT2JqZWN0KEpTQ29udGV4dFJlZiAKICAgICBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpKTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0
ID0gZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKHNjcmlw
dENvbnRleHQtPmlzRG9jdW1lbnQoKSkKLSAgICAgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3Qo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsIEludGVybmFsczo6aW50ZXJuYWxz
SWQpLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgSW50ZXJuYWxzOjpjcmVhdGUodG9Eb2N1bWVu
dChzY3JpcHRDb250ZXh0KSkpKTsKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3QoZXhl
Yy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCBJbnRlcm5hbHM6OmludGVybmFsc0lkKSwgdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIEludGVybmFsczo6Y3JlYXRlKHRvRG9jdW1lbnQoc2NyaXB0Q29u
dGV4dCkpKSk7CiB9CiAKIHZvaWQgcmVzZXRJbnRlcm5hbHNPYmplY3QoSlNDb250ZXh0UmVmIGNv
bnRleHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9u
IDE0ODY1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk0Miw5ICs5NDIsOSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpkcm9wUHJv
dGVjdGlvbigpCiAgICAgLy8gb3V0LiBCdXQgaXQgaXMgcHJvdGVjdGVkIGZyb20gR0Mgd2hpbGUg
bG9hZGluZywgc28gdGhpcwogICAgIC8vIGNhbid0IGJlIHJlY291cGVkIHVudGlsIHRoZSBsb2Fk
IGlzIGRvbmUsIHNvIG9ubHkKICAgICAvLyByZXBvcnQgdGhlIGV4dHJhIGNvc3QgYXQgdGhhdCBw
b2ludC4KLSAgICBKU0M6OkpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+Z2xvYmFsRGF0YSgpOwotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xv
YmFsRGF0YSk7Ci0gICAgZ2xvYmFsRGF0YS0+aGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3QobV9y
ZXNwb25zZUJ1aWxkZXIubGVuZ3RoKCkgKiAyKTsKKyAgICBKU0M6OlZNKiB2bSA9IHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
KyAgICB2bS0+aGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3QobV9yZXNwb25zZUJ1aWxkZXIubGVu
Z3RoKCkgKiAyKTsKIAogICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOwogfQpJbmRleDog
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTYgQEAKKzIwMTMtMDQtMTcgIEdlb2ZmcmV5IEdhcmVu
ICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWVkIEpTR2xvYmFsRGF0YSB0byBW
TQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0Nzc3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFy
ZWQvbGludXgvV2ViTWVtb3J5U2FtcGxlckxpbnV4LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
TWVtb3J5U2FtcGxlcjo6c2FtcGxlV2ViS2l0KToKKyAgICAgICAgKiBTaGFyZWQvbWFjL1dlYk1l
bW9yeVNhbXBsZXIubWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJNZW1vcnlTYW1wbGVyOjpz
YW1wbGVXZWJLaXQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6amF2YVNjcmlw
dE9iamVjdHNDb3VudCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pT
TlBNZXRob2QuY3BwOgorICAgICAgICAoV2ViS2l0OjpKU05QTWV0aG9kOjpmaW5pc2hDcmVhdGlv
bik6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBNZXRob2QuaDoK
KyAgICAgICAgKFdlYktpdDo6SlNOUE1ldGhvZDo6Y3JlYXRlKToKKyAgICAgICAgKEpTTlBNZXRo
b2QpOgorICAgICAgICAoV2ViS2l0OjpKU05QTWV0aG9kOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6SlNOUE9iamVjdDo6SlNOUE9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6OkpT
TlBPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6
Y2FsbE1ldGhvZCk6CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmNhbGxPYmplY3QpOgor
ICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpjYWxsQ29uc3RydWN0b3IpOgorICAgICAgICAo
V2ViS2l0OjpKU05QT2JqZWN0OjpwdXQpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0Ojpk
ZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmdldE93blByb3Bl
cnR5TmFtZXMpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0Ojpwcm9wZXJ0eUdldHRlcik6
CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuaDoKKyAg
ICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6SlNO
UE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvTlBKU09iamVjdC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5QSlNPYmplY3Q6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5QSlNPYmplY3Q6OmluaXRpYWxpemUpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0Lmg6CisgICAgICAgIChK
U0MpOgorICAgICAgICAoTlBKU09iamVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5z
L05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5QUnVu
dGltZU9iamVjdE1hcDo6Z2V0T3JDcmVhdGVOUE9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5Q
UnVudGltZU9iamVjdE1hcDo6Y29udmVydEpTVmFsdWVUb05QVmFyaWFudCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5QUnVudGltZU9iamVjdE1hcDo6ZXZhbHVhdGUpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuaDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgIChOUFJ1bnRpbWVPYmplY3RNYXApOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6d2luZG93
U2NyaXB0TlBPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5FbGVt
ZW50TlBPYmplY3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzOjpnZXRXZWJDb3JlU3RhdGlzdGljcyk6CisKIDIwMTMtMDQtMTcgIEpvb25lIEh1ciAg
PGpvb25lLmh1ckBpbnRlbC5jb20+CiAKICAgICAgICAgW0VGTF1bQUNdIG1fcGVuZGluZ1N1cmZh
Y2VSZXNpemUgbmVlZHMgdG8gYmUgZ3VhcmRlZCBieSBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvV2ViTWVtb3J5U2FtcGxlckxp
bnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvV2ViTWVt
b3J5U2FtcGxlckxpbnV4LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYktpdDIv
U2hhcmVkL2xpbnV4L1dlYk1lbW9yeVNhbXBsZXJMaW51eC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1NCw4ICsxNTQsOCBAQCBXZWJNZW1vcnlTdGF0aXN0aWNzIFdlYk1lbW9yeVNhbXBsZXI6OnNh
CiAgICAgYXBwZW5kS2V5VmFsdWVQYWlyKHdlYktpdE1lbW9yeVN0YXRzLCBBU0NJSUxpdGVyYWwo
IkZhc3QgTWFsbG9jIENvbW1pdHRlZCBNZW1vcnkiKSwgZmFzdE1hbGxvY0J5dGVzQ29tbWl0dGVk
KTsKICNlbmRpZgogCi0gICAgc2l6ZV90IGpzY0hlYXBCeXRlc0luVXNlID0gSlNET01XaW5kb3c6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnNpemUoKTsKLSAgICBzaXplX3QganNjSGVhcEJ5
dGVzQ29tbWl0dGVkID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmNh
cGFjaXR5KCk7CisgICAgc2l6ZV90IGpzY0hlYXBCeXRlc0luVXNlID0gSlNET01XaW5kb3c6OmNv
bW1vblZNKCktPmhlYXAuc2l6ZSgpOworICAgIHNpemVfdCBqc2NIZWFwQnl0ZXNDb21taXR0ZWQg
PSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5jYXBhY2l0eSgpOwogICAgIHRvdGFsQnl0
ZXNJblVzZSArPSBqc2NIZWFwQnl0ZXNJblVzZTsKICAgICB0b3RhbEJ5dGVzQ29tbWl0dGVkICs9
IGpzY0hlYXBCeXRlc0NvbW1pdHRlZDsKIApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL21h
Yy9XZWJNZW1vcnlTYW1wbGVyLm1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbWFjL1dlYk1lbW9yeVNhbXBsZXIubWFjLm1tCShyZXZpc2lvbiAxNDg2NTUpCisrKyBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYk1lbW9yeVNhbXBsZXIubWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTYsOSArMTE2LDkgQEAgV2ViTWVtb3J5U3RhdGlzdGljcyBXZWJNZW1vcnlT
YW1wbGVyOjpzYQogICAgIHRvdGFsQnl0ZXNJblVzZSArPSBmYXN0TWFsbG9jQnl0ZXNJblVzZTsK
ICAgICB0b3RhbEJ5dGVzQ29tbWl0dGVkICs9IGZhc3RNYWxsb2NCeXRlc0NvbW1pdHRlZDsKICAg
ICAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOwotICAgIHNpemVfdCBqc2NIZWFwQnl0ZXNJblVzZSA9IEpTRE9NV2luZG93Ojpjb21tb25K
U0dsb2JhbERhdGEoKS0+aGVhcC5zaXplKCk7Ci0gICAgc2l6ZV90IGpzY0hlYXBCeXRlc0NvbW1p
dHRlZCA9IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5jYXBhY2l0eSgp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKKyAgICBz
aXplX3QganNjSGVhcEJ5dGVzSW5Vc2UgPSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5z
aXplKCk7CisgICAgc2l6ZV90IGpzY0hlYXBCeXRlc0NvbW1pdHRlZCA9IEpTRE9NV2luZG93Ojpj
b21tb25WTSgpLT5oZWFwLmNhcGFjaXR5KCk7CiAgICAgdG90YWxCeXRlc0luVXNlICs9IGpzY0hl
YXBCeXRlc0luVXNlOwogICAgIHRvdGFsQnl0ZXNDb21taXR0ZWQgKz0ganNjSGVhcEJ5dGVzQ29t
bWl0dGVkOwogICAgIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3Mu
Y3BwCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MjUsMjEgKzkyNSwyMSBAQCB2b2lkIFdlYlBy
b2Nlc3M6OmdldFdlYkNvcmVTdGF0aXN0aWNzKHVpCiAgICAgCiAgICAgLy8gR2F0aGVyIEphdmFT
Y3JpcHQgc3RhdGlzdGljcy4KICAgICB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9N
V2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7Ci0gICAgICAgIGRhdGEuc3RhdGlzdGljc051
bWJlcnMuc2V0KCJKYXZhU2NyaXB0T2JqZWN0c0NvdW50IiwgSlNET01XaW5kb3c6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpLT5oZWFwLm9iamVjdENvdW50KCkpOwotICAgICAgICBkYXRhLnN0YXRpc3Rp
Y3NOdW1iZXJzLnNldCgiSmF2YVNjcmlwdEdsb2JhbE9iamVjdHNDb3VudCIsIEpTRE9NV2luZG93
Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5nbG9iYWxPYmplY3RDb3VudCgpKTsKLSAgICAg
ICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoIkphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3Rz
Q291bnQiLCBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVk
T2JqZWN0Q291bnQoKSk7Ci0gICAgICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KCJKYXZh
U2NyaXB0UHJvdGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50IiwgSlNET01XaW5kb3c6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZEdsb2JhbE9iamVjdENvdW50KCkpOworICAgICAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAgICAgIGRh
dGEuc3RhdGlzdGljc051bWJlcnMuc2V0KCJKYXZhU2NyaXB0T2JqZWN0c0NvdW50IiwgSlNET01X
aW5kb3c6OmNvbW1vblZNKCktPmhlYXAub2JqZWN0Q291bnQoKSk7CisgICAgICAgIGRhdGEuc3Rh
dGlzdGljc051bWJlcnMuc2V0KCJKYXZhU2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50IiwgSlNET01X
aW5kb3c6OmNvbW1vblZNKCktPmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQoKSk7CisgICAgICAgIGRh
dGEuc3RhdGlzdGljc051bWJlcnMuc2V0KCJKYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0c0NvdW50
IiwgSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKSk7
CisgICAgICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KCJKYXZhU2NyaXB0UHJvdGVjdGVk
R2xvYmFsT2JqZWN0c0NvdW50IiwgSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhlYXAucHJvdGVj
dGVkR2xvYmFsT2JqZWN0Q291bnQoKSk7CiAgICAgICAgIAotICAgICAgICBPd25QdHI8VHlwZUNv
dW50U2V0PiBwcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKEpTRE9NV2luZG93Ojpjb21tb25KU0ds
b2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpOworICAgICAgICBP
d25QdHI8VHlwZUNvdW50U2V0PiBwcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKEpTRE9NV2luZG93
Ojpjb21tb25WTSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKSk7CiAgICAgICAg
IGZyb21Db3VudGVkU2V0VG9IYXNoTWFwKHByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMuZ2V0KCks
IGRhdGEuamF2YVNjcmlwdFByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMpOwogICAgICAgICAKLSAg
ICAgICAgT3duUHRyPFR5cGVDb3VudFNldD4gb2JqZWN0VHlwZUNvdW50cyhKU0RPTVdpbmRvdzo6
Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0VHlwZUNvdW50cygpKTsKKyAgICAgICAg
T3duUHRyPFR5cGVDb3VudFNldD4gb2JqZWN0VHlwZUNvdW50cyhKU0RPTVdpbmRvdzo6Y29tbW9u
Vk0oKS0+aGVhcC5vYmplY3RUeXBlQ291bnRzKCkpOwogICAgICAgICBmcm9tQ291bnRlZFNldFRv
SGFzaE1hcChvYmplY3RUeXBlQ291bnRzLmdldCgpLCBkYXRhLmphdmFTY3JpcHRPYmplY3RUeXBl
Q291bnRzKTsKICAgICAgICAgCi0gICAgICAgIHVpbnQ2NF90IGphdmFTY3JpcHRIZWFwU2l6ZSA9
IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5zaXplKCk7CisgICAgICAg
IHVpbnQ2NF90IGphdmFTY3JpcHRIZWFwU2l6ZSA9IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5o
ZWFwLnNpemUoKTsKICAgICAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoIkphdmFTY3Jp
cHRIZWFwU2l6ZSIsIGphdmFTY3JpcHRIZWFwU2l6ZSk7Ci0gICAgICAgIGRhdGEuc3RhdGlzdGlj
c051bWJlcnMuc2V0KCJKYXZhU2NyaXB0RnJlZVNpemUiLCBKU0RPTVdpbmRvdzo6Y29tbW9uSlNH
bG9iYWxEYXRhKCktPmhlYXAuY2FwYWNpdHkoKSAtIGphdmFTY3JpcHRIZWFwU2l6ZSk7CisgICAg
ICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KCJKYXZhU2NyaXB0RnJlZVNpemUiLCBKU0RP
TVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5jYXBhY2l0eSgpIC0gamF2YVNjcmlwdEhlYXBTaXpl
KTsKICAgICB9CiAKICAgICBXVEY6OkZhc3RNYWxsb2NTdGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0
aXN0aWNzID0gV1RGOjpmYXN0TWFsbG9jU3RhdGlzdGljcygpOwpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTIs
OCArNTUyLDggQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6Z2FyYmFnZUNvbGxlY3RKYXZhUwogCiBz
aXplX3QgSW5qZWN0ZWRCdW5kbGU6OmphdmFTY3JpcHRPYmplY3RzQ291bnQoKQogewotICAgIEpT
TG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7Ci0gICAg
cmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5vYmplY3RDb3Vu
dCgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKKyAg
ICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhlYXAub2JqZWN0Q291bnQoKTsKIH0K
IAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cmVwb3J0RXhjZXB0aW9uKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU1ZhbHVlUmVmIGV4Y2VwdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTMyMyw3ICsxMzIzLDcgQEAgTlBPYmplY3QqIFBsdWdpblZpZXc6OndpbmRvd1Nj
cmlwdE5QT2JqZQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICByZXR1cm4gbV9ucFJ1
bnRpbWVPYmplY3RNYXAuZ2V0T3JDcmVhdGVOUE9iamVjdCgqcGx1Z2luV29ybGQoKS0+Z2xvYmFs
RGF0YSgpLCBmcmFtZSgpLT5zY3JpcHQoKS0+d2luZG93U2hlbGwocGx1Z2luV29ybGQoKSktPndp
bmRvdygpKTsKKyAgICByZXR1cm4gbV9ucFJ1bnRpbWVPYmplY3RNYXAuZ2V0T3JDcmVhdGVOUE9i
amVjdCgqcGx1Z2luV29ybGQoKS0+dm0oKSwgZnJhbWUoKS0+c2NyaXB0KCktPndpbmRvd1NoZWxs
KHBsdWdpbldvcmxkKCkpLT53aW5kb3coKSk7CiB9CiAKIE5QT2JqZWN0KiBQbHVnaW5WaWV3Ojpw
bHVnaW5FbGVtZW50TlBPYmplY3QoKQpAQCAtMTMzOSw3ICsxMzM5LDcgQEAgTlBPYmplY3QqIFBs
dWdpblZpZXc6OnBsdWdpbkVsZW1lbnROUE9iagogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBmcmFt
ZSgpLT5zY3JpcHQoKS0+anNPYmplY3RGb3JQbHVnaW5FbGVtZW50KG1fcGx1Z2luRWxlbWVudC5n
ZXQoKSk7CiAgICAgQVNTRVJUKG9iamVjdCk7CiAKLSAgICByZXR1cm4gbV9ucFJ1bnRpbWVPYmpl
Y3RNYXAuZ2V0T3JDcmVhdGVOUE9iamVjdCgqcGx1Z2luV29ybGQoKS0+Z2xvYmFsRGF0YSgpLCBv
YmplY3QpOworICAgIHJldHVybiBtX25wUnVudGltZU9iamVjdE1hcC5nZXRPckNyZWF0ZU5QT2Jq
ZWN0KCpwbHVnaW5Xb3JsZCgpLT52bSgpLCBvYmplY3QpOwogfQogCiBib29sIFBsdWdpblZpZXc6
OmV2YWx1YXRlKE5QT2JqZWN0KiBucE9iamVjdCwgY29uc3QgU3RyaW5nJiBzY3JpcHRTdHJpbmcs
IE5QVmFyaWFudCogcmVzdWx0LCBib29sIGFsbG93UG9wdXBzKQpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBNZXRob2QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0aG9k
LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL0pTTlBNZXRob2QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw5ICs1MSw5
IEBAIEpTTlBNZXRob2Q6OkpTTlBNZXRob2QoSlNHbG9iYWxPYmplY3QqIGcKIHsKIH0KIAotdm9p
ZCBKU05QTWV0aG9kOjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNv
bnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgSlNOUE1ldGhvZDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSwgbmFtZSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIG5hbWUpOwogICAgIEFT
U0VSVChpbmhlcml0cygmc19pbmZvKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0aG9kLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBNZXRob2QuaAkocmV2aXNp
b24gMTQ4NjU1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBl
L0pTTlBNZXRob2QuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMsOSBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgSlNOUE1ldGhvZCogY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgTlBJZGVu
dGlmaWVyIG5wSWRlbnQpCiAgICAgewotICAgICAgICBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
ID0gY3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QtPmZ1bmN0aW9uUHJvdG90eXBlKCkpOworICAgICAgICBKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlID0gY3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdCwgZ2xv
YmFsT2JqZWN0LT5mdW5jdGlvblByb3RvdHlwZSgpKTsKICAgICAgICAgSlNOUE1ldGhvZCogbWV0
aG9kID0gbmV3IChKU0M6OmFsbG9jYXRlQ2VsbDxKU05QTWV0aG9kPigqZXhlYy0+aGVhcCgpKSkg
SlNOUE1ldGhvZChnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgbnBJZGVudCk7Ci0gICAgICAgIG1l
dGhvZC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBuYW1lKTsKKyAgICAgICAg
bWV0aG9kLT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpLCBuYW1lKTsKICAgICAgICAgcmV0dXJu
IG1ldGhvZDsKICAgICB9CiAKQEAgLTU0LDE0ICs1NCwxNCBAQCBwdWJsaWM6CiAgICAgTlBJZGVu
dGlmaWVyIG5wSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fbnBJZGVudGlmaWVyOyB9CiAK
IHByb3RlY3RlZDoKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJiwg
Y29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBj
b25zdCBTdHJpbmcmIG5hbWUpOwogCiBwcml2YXRlOiAgICAKICAgICBKU05QTWV0aG9kKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSosIE5QSWRlbnRpZmllcik7CiAKLSAgICBz
dGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAg
ICAgfQogCiAgICAgc3RhdGljIEpTQzo6Q2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDOjpKU0NlbGwq
LCBKU0M6OkNhbGxEYXRhJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCShyZXZpc2lvbiAxNDg2
NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgc3RhdGljIE5QSWRlbnRp
ZmllciBucElkZW50aWZpZXJGcm9tSWRlbgogY29uc3QgQ2xhc3NJbmZvIEpTTlBPYmplY3Q6OnNf
aW5mbyA9IHsgIk5QT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU05QT2JqZWN0KSB9OwogCiBKU05QT2JqZWN0OjpKU05QT2JqZWN0KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBOUFJ1bnRpbWVPYmplY3RN
YXAqIG9iamVjdE1hcCwgTlBPYmplY3QqIG5wT2JqZWN0KQotICAgIDogSlNEZXN0cnVjdGlibGVP
YmplY3QoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSkKKyAgICA6IEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0KGdsb2JhbE9iamVjdC0+dm0oKSwgc3RydWN0dXJlKQogICAgICwgbV9v
YmplY3RNYXAob2JqZWN0TWFwKQogICAgICwgbV9ucE9iamVjdChucE9iamVjdCkKIHsKQEAgLTY2
LDcgKzY2LDcgQEAgSlNOUE9iamVjdDo6SlNOUE9iamVjdChKU0dsb2JhbE9iamVjdCogZwogCiB2
b2lkIEpTTlBPYmplY3Q6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRh
KCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CiAgICAg
QVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIAogICAgIC8vIFdlIHNob3VsZCBuZXZlciBoYXZl
IGFuIE5QSlNPYmplY3QgaW5zaWRlIGEgSlNOUE9iamVjdC4KQEAgLTEyNyw3ICsxMjcsNyBAQCBK
U1ZhbHVlIEpTTlBPYmplY3Q6OmNhbGxNZXRob2QoRXhlY1N0YXRlCiAgICAgVk9JRF9UT19OUFZB
UklBTlQocmVzdWx0KTsKICAgICAKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAg
ICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uVk0oKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9ucE9iamVjdC0+X2NsYXNzLT5p
bnZva2UobV9ucE9iamVjdCwgbWV0aG9kTmFtZSwgYXJndW1lbnRzLmRhdGEoKSwgYXJndW1lbnRD
b3VudCwgJnJlc3VsdCk7CiAgICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4
Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwogICAgIH0KQEAgLTE2Nyw3ICsxNjcsNyBAQCBKU0M6
OkpTVmFsdWUgSlNOUE9iamVjdDo6Y2FsbE9iamVjdChKU0M6CiAgICAgVk9JRF9UT19OUFZBUklB
TlQocmVzdWx0KTsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICBK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25W
TSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5fY2xhc3MtPmludm9rZURl
ZmF1bHQobV9ucE9iamVjdCwgYXJndW1lbnRzLmRhdGEoKSwgYXJndW1lbnRDb3VudCwgJnJlc3Vs
dCk7CiAgICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhl
Y1N0YXRlKGV4ZWMpOwogICAgIH0KQEAgLTIwNyw3ICsyMDcsNyBAQCBKU1ZhbHVlIEpTTlBPYmpl
Y3Q6OmNhbGxDb25zdHJ1Y3RvcihFeGVjCiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0KTsK
ICAgICAKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAg
ICAgICAgIHJldHVyblZhbHVlID0gbV9ucE9iamVjdC0+X2NsYXNzLT5jb25zdHJ1Y3QobV9ucE9i
amVjdCwgYXJndW1lbnRzLmRhdGEoKSwgYXJndW1lbnRDb3VudCwgJnJlc3VsdCk7CiAgICAgICAg
IE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMp
OwogICAgIH0KQEAgLTM1Miw3ICszNTIsNyBAQCB2b2lkIEpTTlBPYmplY3Q6OnB1dChKU0NlbGwq
IGNlbGwsIEV4ZWNTCiAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3IgcHJv
dGVjdG9yKHRoaXNPYmplY3QtPm1fb2JqZWN0TWFwKTsKIAogICAgIHsKLSAgICAgICAgSlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgdGhpc09iamVjdC0+bV9ucE9iamVj
dC0+X2NsYXNzLT5zZXRQcm9wZXJ0eSh0aGlzT2JqZWN0LT5tX25wT2JqZWN0LCBucElkZW50aWZp
ZXIsICZ2YXJpYW50KTsKIAogICAgICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6Om1vdmVHbG9iYWxF
eGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKQEAgLTM5Miw3ICszOTIsNyBAQCBib29sIEpTTlBP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0CiAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjpQ
bHVnaW5Qcm90ZWN0b3IgcHJvdGVjdG9yKG1fb2JqZWN0TWFwKTsKIAogICAgIHsKLSAgICAgICAg
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKIAogICAgICAgICAvLyBGSVhNRTogU2hv
dWxkIHdlIHRocm93IGFuIGV4Y2VwdGlvbiBpZiByZW1vdmVQcm9wZXJ0eSByZXR1cm5zIGZhbHNl
PwogICAgICAgICBpZiAoIW1fbnBPYmplY3QtPl9jbGFzcy0+cmVtb3ZlUHJvcGVydHkobV9ucE9i
amVjdCwgcHJvcGVydHlOYW1lKSkKQEAgLTQyNSw3ICs0MjUsNyBAQCB2b2lkIEpTTlBPYmplY3Q6
OmdldE93blByb3BlcnR5TmFtZXMoSlNPCiAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Q
cm90ZWN0b3IgcHJvdGVjdG9yKHRoaXNPYmplY3QtPm1fb2JqZWN0TWFwKTsKICAgICAKICAgICB7
Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAKICAgICAgICAgLy8g
RklYTUU6IFNob3VsZCB3ZSB0aHJvdyBhbiBleGNlcHRpb24gaWYgZW51bWVyYXRlIHJldHVybnMg
ZmFsc2U/CiAgICAgICAgIGlmICghdGhpc09iamVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5lbnVt
ZXJhdGUodGhpc09iamVjdC0+bV9ucE9iamVjdCwgJmlkZW50aWZpZXJzLCAmaWRlbnRpZmllckNv
dW50KSkKQEAgLTQ3Myw3ICs0NzMsNyBAQCBKU1ZhbHVlIEpTTlBPYmplY3Q6OnByb3BlcnR5R2V0
dGVyKEV4ZWNTCiAgICAgCiAgICAgYm9vbCByZXR1cm5WYWx1ZTsKICAgICB7Ci0gICAgICAgIEpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgIE5QSWRlbnRpZmllciBucElk
ZW50aWZpZXIgPSBucElkZW50aWZpZXJGcm9tSWRlbnRpZmllcihwcm9wZXJ0eU5hbWUpOwogICAg
ICAgICByZXR1cm5WYWx1ZSA9IHRoaXNPYmotPm1fbnBPYmplY3QtPl9jbGFzcy0+Z2V0UHJvcGVy
dHkodGhpc09iai0+bV9ucE9iamVjdCwgbnBJZGVudGlmaWVyLCAmcmVzdWx0KTsKICAgICAgICAg
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS9KU05QT2JqZWN0LmgJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDggKzQ3LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIEpTTlBPYmplY3QqIGNyZWF0
ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE5QUnVudGltZU9iamVjdE1hcCog
b2JqZWN0TWFwLCBOUE9iamVjdCogbnBPYmplY3QpCiAgICAgewotICAgICAgICBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlID0gY3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0
YSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpOwotICAg
ICAgICBKU05QT2JqZWN0KiBvYmplY3QgPSBuZXcgKEpTQzo6YWxsb2NhdGVDZWxsPEpTTlBPYmpl
Y3Q+KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLmhlYXApKSBKU05QT2JqZWN0KGdsb2JhbE9i
amVjdCwgc3RydWN0dXJlLCBvYmplY3RNYXAsIG5wT2JqZWN0KTsKKyAgICAgICAgSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPnZtKCksIGds
b2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSk7CisgICAgICAgIEpT
TlBPYmplY3QqIG9iamVjdCA9IG5ldyAoSlNDOjphbGxvY2F0ZUNlbGw8SlNOUE9iamVjdD4oZ2xv
YmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU05QT2JqZWN0KGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
LCBvYmplY3RNYXAsIG5wT2JqZWN0KTsKICAgICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbihn
bG9iYWxPYmplY3QpOwogICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgIH0KQEAgLTc3LDkgKzc3
LDkgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNHZXRQ
cm9wZXJ0eU5hbWVzIHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwogICAgIAotICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVl
IHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9
CiAKICAgICBzdGF0aWMgSlNDOjpDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0M6OkpTQ2VsbCosIEpT
Qzo6Q2FsbERhdGEmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHAJKHJldmlzaW9uIDE0ODY1NSkK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotTlBKU09iamVjdCogTlBKU09iamVjdDo6
Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTlBSdW50aW1lT2JqZWN0TWFwKiBvYmpl
Y3RNYXAsIEpTT2JqZWN0KiBqc09iamVjdCkKK05QSlNPYmplY3QqIE5QSlNPYmplY3Q6OmNyZWF0
ZShWTSYgdm0sIE5QUnVudGltZU9iamVjdE1hcCogb2JqZWN0TWFwLCBKU09iamVjdCoganNPYmpl
Y3QpCiB7CiAgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGhhdmUgYSBKU05QT2JqZWN0IGluc2lkZSBh
biBOUEpTT2JqZWN0LgogICAgIEFTU0VSVCghanNPYmplY3QtPmluaGVyaXRzKCZKU05QT2JqZWN0
OjpzX2luZm8pKTsKIAogICAgIE5QSlNPYmplY3QqIG5wSlNPYmplY3QgPSB0b05QSlNPYmplY3Qo
Y3JlYXRlTlBPYmplY3QoMCwgbnBDbGFzcygpKSk7Ci0gICAgbnBKU09iamVjdC0+aW5pdGlhbGl6
ZShnbG9iYWxEYXRhLCBvYmplY3RNYXAsIGpzT2JqZWN0KTsKKyAgICBucEpTT2JqZWN0LT5pbml0
aWFsaXplKHZtLCBvYmplY3RNYXAsIGpzT2JqZWN0KTsKIAogICAgIHJldHVybiBucEpTT2JqZWN0
OwogfQpAQCAtNzIsMTMgKzcyLDEzIEBAIGJvb2wgTlBKU09iamVjdDo6aXNOUEpTT2JqZWN0KE5Q
T2JqZWN0KiAKICAgICByZXR1cm4gbnBPYmplY3QtPl9jbGFzcyA9PSBucENsYXNzKCk7CiB9CiAK
LXZvaWQgTlBKU09iamVjdDo6aW5pdGlhbGl6ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE5Q
UnVudGltZU9iamVjdE1hcCogb2JqZWN0TWFwLCBKU09iamVjdCoganNPYmplY3QpCit2b2lkIE5Q
SlNPYmplY3Q6OmluaXRpYWxpemUoVk0mIHZtLCBOUFJ1bnRpbWVPYmplY3RNYXAqIG9iamVjdE1h
cCwgSlNPYmplY3QqIGpzT2JqZWN0KQogewogICAgIEFTU0VSVCghbV9vYmplY3RNYXApOwogICAg
IEFTU0VSVCghbV9qc09iamVjdCk7CiAKICAgICBtX29iamVjdE1hcCA9IG9iamVjdE1hcDsKLSAg
ICBtX2pzT2JqZWN0LnNldChnbG9iYWxEYXRhLCBqc09iamVjdCk7CisgICAgbV9qc09iamVjdC5z
ZXQodm0sIGpzT2JqZWN0KTsKIH0KIAogc3RhdGljIElkZW50aWZpZXIgaWRlbnRpZmllckZyb21J
ZGVudGlmaWVyUmVwKEV4ZWNTdGF0ZSogZXhlYywgSWRlbnRpZmllclJlcCogaWRlbnRpZmllclJl
cCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpT
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L05ldHNjYXBlL05QSlNPYmplY3QuaAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSlNHbG9iYWxE
YXRhOworY2xhc3MgVk07CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNzIEpTT2JqZWN0Owog
CkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIE5QUnVudGltZU9iamVjdE1hcDsKIGNsYXNzIE5QSlNP
YmplY3QgOiBwdWJsaWMgTlBPYmplY3QgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE5QSlNP
YmplY3QpOwogcHVibGljOgotICAgIHN0YXRpYyBOUEpTT2JqZWN0KiBjcmVhdGUoSlNDOjpKU0ds
b2JhbERhdGEmLCBOUFJ1bnRpbWVPYmplY3RNYXAqLCBKU0M6OkpTT2JqZWN0Kik7CisgICAgc3Rh
dGljIE5QSlNPYmplY3QqIGNyZWF0ZShKU0M6OlZNJiwgTlBSdW50aW1lT2JqZWN0TWFwKiwgSlND
OjpKU09iamVjdCopOwogCiAgICAgSlNDOjpKU09iamVjdCoganNPYmplY3QoKSBjb25zdCB7IHJl
dHVybiBtX2pzT2JqZWN0LmdldCgpOyB9CiAKQEAgLTY0LDcgKzY0LDcgQEAgcHJpdmF0ZToKICAg
ICBOUEpTT2JqZWN0KCk7CiAgICAgfk5QSlNPYmplY3QoKTsKIAotICAgIHZvaWQgaW5pdGlhbGl6
ZShKU0M6OkpTR2xvYmFsRGF0YSYsIE5QUnVudGltZU9iamVjdE1hcCosIEpTQzo6SlNPYmplY3Qq
KTsKKyAgICB2b2lkIGluaXRpYWxpemUoSlNDOjpWTSYsIE5QUnVudGltZU9iamVjdE1hcCosIEpT
Qzo6SlNPYmplY3QqKTsKIAogICAgIGJvb2wgaGFzTWV0aG9kKE5QSWRlbnRpZmllciBtZXRob2RO
YW1lKTsKICAgICBib29sIGludm9rZShOUElkZW50aWZpZXIgbWV0aG9kTmFtZSwgY29uc3QgTlBW
YXJpYW50KiBhcmd1bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVz
dWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
UFJ1bnRpbWVPYmplY3RNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCShyZXZpc2lvbiAx
NDg2NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBS
dW50aW1lT2JqZWN0TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBOUFJ1
bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3Rvcjo6flBsCiB7CiB9CiAKLU5QT2JqZWN0KiBO
UFJ1bnRpbWVPYmplY3RNYXA6OmdldE9yQ3JlYXRlTlBPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU09iamVjdCoganNPYmplY3QpCitOUE9iamVjdCogTlBSdW50aW1lT2JqZWN0TWFw
OjpnZXRPckNyZWF0ZU5QT2JqZWN0KFZNJiB2bSwgSlNPYmplY3QqIGpzT2JqZWN0KQogewogICAg
IC8vIElmIHRoaXMgaXMgYSBKU05QT2JqZWN0LCB3ZSBjYW4ganVzdCBnZXQgaXRzIHVuZGVybHlp
bmcgTlBPYmplY3QuCiAgICAgaWYgKGpzT2JqZWN0LT5jbGFzc0luZm8oKSA9PSAmSlNOUE9iamVj
dDo6c19pbmZvKSB7CkBAIC04Myw3ICs4Myw3IEBAIE5QT2JqZWN0KiBOUFJ1bnRpbWVPYmplY3RN
YXA6OmdldE9yQ3JlYXQKICAgICAgICAgcmV0dXJuIG5wSlNPYmplY3Q7CiAgICAgfQogCi0gICAg
TlBKU09iamVjdCogbnBKU09iamVjdCA9IE5QSlNPYmplY3Q6OmNyZWF0ZShnbG9iYWxEYXRhLCB0
aGlzLCBqc09iamVjdCk7CisgICAgTlBKU09iamVjdCogbnBKU09iamVjdCA9IE5QSlNPYmplY3Q6
OmNyZWF0ZSh2bSwgdGhpcywganNPYmplY3QpOwogICAgIG1fbnBKU09iamVjdHMuc2V0KGpzT2Jq
ZWN0LCBucEpTT2JqZWN0KTsKIAogICAgIHJldHVybiBucEpTT2JqZWN0OwpAQCAtMTcyLDcgKzE3
Miw3IEBAIHZvaWQgTlBSdW50aW1lT2JqZWN0TWFwOjpjb252ZXJ0SlNWYWx1ZVQKICAgICB9CiAK
ICAgICBpZiAodmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICBOUE9iamVjdCogbnBPYmplY3Qg
PSBnZXRPckNyZWF0ZU5QT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXNPYmplY3QodmFsdWUp
KTsKKyAgICAgICAgTlBPYmplY3QqIG5wT2JqZWN0ID0gZ2V0T3JDcmVhdGVOUE9iamVjdChleGVj
LT52bSgpLCBhc09iamVjdCh2YWx1ZSkpOwogICAgICAgICBPQkpFQ1RfVE9fTlBWQVJJQU5UKG5w
T2JqZWN0LCB2YXJpYW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE4Miw3ICsxODIs
NyBAQCB2b2lkIE5QUnVudGltZU9iamVjdE1hcDo6Y29udmVydEpTVmFsdWVUCiAKIGJvb2wgTlBS
dW50aW1lT2JqZWN0TWFwOjpldmFsdWF0ZShOUE9iamVjdCogbnBPYmplY3QsIGNvbnN0IFN0cmlu
ZyYgc2NyaXB0U3RyaW5nLCBOUFZhcmlhbnQqIHJlc3VsdCkKIHsKLSAgICBTdHJvbmc8SlNHbG9i
YWxPYmplY3Q+IGdsb2JhbE9iamVjdCh0aGlzLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgp
LCB0aGlzLT5nbG9iYWxPYmplY3QoKSk7CisgICAgU3Ryb25nPEpTR2xvYmFsT2JqZWN0PiBnbG9i
YWxPYmplY3QodGhpcy0+Z2xvYmFsT2JqZWN0KCktPnZtKCksIHRoaXMtPmdsb2JhbE9iamVjdCgp
KTsKICAgICBpZiAoIWdsb2JhbE9iamVjdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2Jq
ZWN0TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFw
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX05QVmFy
aWFudCBOUFZhcmlhbnQ7CiAKIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEV4ZWNTdGF0ZTsK
LSAgICBjbGFzcyBKU0dsb2JhbERhdGE7CisgICAgY2xhc3MgVk07CiAgICAgY2xhc3MgSlNHbG9i
YWxPYmplY3Q7CiAgICAgY2xhc3MgSlNPYmplY3Q7CiAgICAgY2xhc3MgSlNWYWx1ZTsKQEAgLTY3
LDcgKzY3LDcgQEAgcHVibGljOgogCiAgICAgLy8gUmV0dXJucyBhbiBOUE9iamVjdCB0aGF0IHdy
YXBzIHRoZSBnaXZlbiBKU09iamVjdCBvYmplY3QuIElmIHRoZXJlIGlzIGFscmVhZHkgYW4gTlBP
YmplY3QgdGhhdCB3cmFwcyB0aGlzIEpTT2JqZWN0LCBpdCB3aWxsCiAgICAgLy8gcmV0YWluIGl0
IGFuZCByZXR1cm4gaXQuCi0gICAgTlBPYmplY3QqIGdldE9yQ3JlYXRlTlBPYmplY3QoSlNDOjpK
U0dsb2JhbERhdGEmLCBKU0M6OkpTT2JqZWN0Kik7CisgICAgTlBPYmplY3QqIGdldE9yQ3JlYXRl
TlBPYmplY3QoSlNDOjpWTSYsIEpTQzo6SlNPYmplY3QqKTsKICAgICB2b2lkIG5wSlNPYmplY3RE
ZXN0cm95ZWQoTlBKU09iamVjdCopOwogCiAgICAgLy8gUmV0dXJucyBhIEpTT2JqZWN0IG9iamVj
dCB0aGF0IHdyYXBzIHRoZSBnaXZlbiBOUE9iamVjdC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjEwMiw3ICsyMTAyLDcgQEAgdm9pZCBXZWJQYWdlOjpydW5KYXZhU2NyaXB0SW5NYWlu
RnJhbWUoYwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRSZXN1
bHRWYWx1ZTsKICAgICBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFSZWZlcmVuY2U7CiAKLSAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKICAgICBpZiAo
SlNWYWx1ZSByZXN1bHRWYWx1ZSA9IG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKS0+c2NyaXB0KCkt
PmV4ZWN1dGVTY3JpcHQoc2NyaXB0LCB0cnVlKS5qc1ZhbHVlKCkpIHsKICAgICAgICAgaWYgKChz
ZXJpYWxpemVkUmVzdWx0VmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShtX21h
aW5GcmFtZS0+anNDb250ZXh0KCksIHRvUmVmKG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKS0+c2Ny
aXB0KCktPmdsb2JhbE9iamVjdChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMo
KSwgcmVzdWx0VmFsdWUpLCAwKSkpCiAgICAgICAgICAgICBkYXRhUmVmZXJlbmNlID0gc2VyaWFs
aXplZFJlc3VsdFZhbHVlLT5kYXRhKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMy0wNC0xNyAgR2VvZmZyZXkg
R2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZWQgSlNHbG9iYWxEYXRh
IHRvIFZNCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTQ3NzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IEFwaS9CbGFja0JlcnJ5R2xvYmFsLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
Y2xlYXJNZW1vcnlDYWNoZXMpOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvQWJvdXREYXRhLmNw
cDoKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydC5jcHA6Cisg
ICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnQ6OmphdmFTY3JpcHRPYmplY3RzQ291bnQpOgor
CiAyMDEzLTA0LTE3ICBOaW1hIEdoYW5hdmF0aWFuICA8bmdoYW5hdmF0aWFuQGJsYWNrYmVycnku
Y29tPgogCiAgICAgICAgIENsZWFuIHVwIHNwZWxsY2hlY2sgc3RhdGUgd2hlbiBjaGFuZ2luZyBm
b2N1cy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmxhY2tCZXJyeUdsb2Jh
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CbGFja0Jl
cnJ5R2xvYmFsLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9CbGFja0JlcnJ5R2xvYmFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgs
NyBAQAogI2luY2x1ZGUgIkluaXRpYWxpemVMb2dnaW5nLmgiCiAjaW5jbHVkZSAiSW5pdGlhbGl6
ZVRocmVhZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiSlNHbG9i
YWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgogI2lu
Y2x1ZGUgIk5ldHdvcmtTdGF0ZU5vdGlmaWVyLmgiCiAjaW5jbHVkZSAiUGFnZUNhY2hlLmgiCkBA
IC0xMTQsNyArMTE0LDcgQEAgdm9pZCBjbGVhck1lbW9yeUNhY2hlcygpCiAjZW5kaWYKIAogICAg
IHsKLSAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOworICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93
Ojpjb21tb25WTSgpKTsKICAgICAgICAgY29sbGVjdEphdmFzY3JpcHRHYXJiYWdlTm93KCk7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9BYm91
dERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L0Fib3V0RGF0YS5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0Fib3V0RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDxCdWlsZEluZm9ybWF0aW9uLmg+CiAjaW5jbHVkZSA8
aGVhcC9IZWFwLmg+CiAjaW5jbHVkZSA8cHJvY2Vzcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNH
bG9iYWxEYXRhLmg+CisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgogI2luY2x1ZGUgPHN5cy9zdGF0
Lmg+CiAjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CkBAIC0yNDUsNyArMjQ1LDcgQEAgc3RhdGljIFN0cmluZyBtZW1vcnlQYWdlKCkKIAogICAg
IC8vIEpTIGVuZ2luZSBtZW1vcnkgdXNhZ2UuCiAgICAgSlNDOjpHbG9iYWxNZW1vcnlTdGF0aXN0
aWNzIGpzY01lbW9yeVN0YXQgPSBKU0M6Omdsb2JhbE1lbW9yeVN0YXRpc3RpY3MoKTsKLSAgICBK
U0M6OkhlYXAmIG1haW5IZWFwID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5o
ZWFwOworICAgIEpTQzo6SGVhcCYgbWFpbkhlYXAgPSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+
aGVhcDsKICAgICBPd25QdHI8SlNDOjpUeXBlQ291bnRTZXQ+IG9iamVjdFR5cGVDb3VudHMgPSBt
YWluSGVhcC5vYmplY3RUeXBlQ291bnRzKCk7CiAgICAgT3duUHRyPEpTQzo6VHlwZUNvdW50U2V0
PiBwcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzID0gbWFpbkhlYXAucHJvdGVjdGVkT2JqZWN0VHlw
ZUNvdW50cygpOwogCkBAIC0zNzMsNyArMzczLDcgQEAgdm9pZCBNZW1vcnlUcmFja2VyOjp1cGRh
dGVNZW1vcnlQZWFrcyhUaQogewogICAgIC8vIEpTIGVuZ2luZSBtZW1vcnkgdXNhZ2UuCiAgICAg
SlNDOjpHbG9iYWxNZW1vcnlTdGF0aXN0aWNzIGpzY01lbW9yeVN0YXQgPSBKU0M6Omdsb2JhbE1l
bW9yeVN0YXRpc3RpY3MoKTsKLSAgICBKU0M6OkhlYXAmIG1haW5IZWFwID0gSlNET01XaW5kb3c6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwOworICAgIEpTQzo6SGVhcCYgbWFpbkhlYXAgPSBK
U0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcDsKIAogICAgIC8vIE1hbGxvYyBpbmZvLgogICAg
IHN0cnVjdCBtYWxsaW5mbyBtYWxsb2NJbmZvID0gbWFsbGluZm8oKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRHVt
cFJlbmRlclRyZWVTdXBwb3J0LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBQYWdlKiBEdW1wUmVuZGVyVHJlZVN1cHBvcnQ6
OmNvcmVQYWdlKFdlCiAKIGludCBEdW1wUmVuZGVyVHJlZVN1cHBvcnQ6OmphdmFTY3JpcHRPYmpl
Y3RzQ291bnQoKQogewotICAgIHJldHVybiBKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpLT5oZWFwLmdsb2JhbE9iamVjdENvdW50KCk7CisgICAgcmV0dXJuIEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uVk0oKS0+aGVhcC5nbG9iYWxPYmplY3RDb3VudCgpOwogfQogCiB2b2lkIER1
bXBSZW5kZXJUcmVlU3VwcG9ydDo6Z2FyYmFnZUNvbGxlY3RvckNvbGxlY3QoKQpJbmRleDogU291
cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZWZs
L0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYktpdC9lZmwvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTMtMDQtMTcgIEdlb2ZmcmV5
IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWVkIEpTR2xvYmFsRGF0
YSB0byBWTQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTE0Nzc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuY3BwOgorICAgICAgICAo
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpqYXZhU2NyaXB0T2JqZWN0c0NvdW50KToKKwogMjAx
My0wNC0xNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBNb3Jl
IEVGTCBidWlsZCBmaXhlcy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0
L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcAkocmV2aXNp
b24gMTQ4NjU1KQorKysgU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRl
clRyZWVTdXBwb3J0RWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk0LDcgKzM5NCw3IEBAIHZv
aWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpnYXJiYWdlQ28KIAogc2l6ZV90IER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbDo6amF2YVNjcmlwdE9iamVjdHNDb3VudCgpCiB7Ci0gICAgcmV0dXJu
IFdlYkNvcmU6OkpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5vYmplY3RD
b3VudCgpOworICAgIHJldHVybiBXZWJDb3JlOjpKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVh
cC5vYmplY3RDb3VudCgpOwogfQogCiB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0
RGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbChkb3VibGUgaW50ZXJ2YWwpCkluZGV4OiBT
b3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9n
dGsvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMy0wNC0xNyAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZWQgSlNHbG9iYWxE
YXRhIHRvIFZNCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTQ3NzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHA6CisgICAgICAg
IChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdjQ291bnRKYXZhc2NyaXB0T2JqZWN0cyk6CisK
IDIwMTMtMDQtMTYgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAg
ICAgICBGaXggc3BlbGluZyBlcnJvci4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVt
cFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc3LDggKzQ3Nyw4
IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpnY0NvbGxlY3QKIAogdW5zaWduZWQg
bG9uZyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdjQ291bnRKYXZhc2NyaXB0T2JqZWN0cygp
CiB7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwotICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkt
PmhlYXAub2JqZWN0Q291bnQoKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2lu
ZG93Ojpjb21tb25WTSgpKTsKKyAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhl
YXAub2JqZWN0Q291bnQoKTsKIH0KIAogdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6Omxh
eW91dEZyYW1lKFdlYktpdFdlYkZyYW1lKiBmcmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDY0IEBACisyMDEzLTA0LTE3ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJl
bkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lZCBKU0dsb2JhbERhdGEgdG8gVk0KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDc3NworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTWlzYy9XZWJDb3Jl
U3RhdGlzdGljcy5tbToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdE9i
amVjdHNDb3VudF0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0R2xv
YmFsT2JqZWN0c0NvdW50XSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3Jp
cHRQcm90ZWN0ZWRPYmplY3RzQ291bnRdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3Mg
amF2YVNjcmlwdFByb3RlY3RlZEdsb2JhbE9iamVjdHNDb3VudF0pOgorICAgICAgICAoK1tXZWJD
b3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50c10pOgorICAg
ICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0T2JqZWN0VHlwZUNvdW50c10pOgor
ICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBzaG91bGRQcmludEV4Y2VwdGlvbnNdKToKKyAg
ICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3Mgc2V0U2hvdWxkUHJpbnRFeGNlcHRpb25zOl0pOgor
ICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBtZW1vcnlTdGF0aXN0aWNzXSk6CisgICAgICAg
ICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRSZWZlcmVuY2VkT2JqZWN0c0NvdW50XSk6
CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW06Cisg
ICAgICAgIChpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXApOgorICAgICAgICAqIFBsdWdpbnMv
SG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5oOgorICAgICAgICAoTG9jYWxPYmpl
Y3RNYXApOgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpM
b2NhbE9iamVjdE1hcDo6aWRGb3JPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6OmdldFdpbmRvd05QT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpnZXRQbHVnaW5FbGVtZW50TlBPYmplY3QpOgor
ICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmV2YWx1YXRlKToK
KyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjphZGRWYWx1ZVRv
QXJyYXkpOgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW06CisgICAg
ICAgIChXZWJLaXQ6OlByb3h5UnVudGltZU1ldGhvZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktp
dDo6UHJveHlSdW50aW1lTWV0aG9kOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViS2l0
OjpQcm94eVJ1bnRpbWVNZXRob2Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
UHJveHlJbnN0YW5jZTo6Z2V0UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0
ZWQvUHJveHlSdW50aW1lT2JqZWN0Lmg6CisgICAgICAgIChXZWJLaXQ6OlByb3h5UnVudGltZU9i
amVjdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UHJveHlSdW50aW1lT2JqZWN0OjpjcmVh
dGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0u
bW06CisgICAgICAgIChXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6d2FudHNBbGxTdHJlYW1zKToK
KyAgICAgICAgKiBQbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbToKKyAgICAgICAgKC1b
V2ViTmV0c2NhcGVQbHVnaW5WaWV3IHNlbmRFdmVudDppc0RyYXdSZWN0Ol0pOgorICAgICAgICAo
LVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgcHJpdmF0ZUJyb3dzaW5nTW9kZURpZENoYW5nZV0pOgor
ICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgc2V0V2luZG93SWZOZWNlc3NhcnldKToK
KyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IGNyZWF0ZVBsdWdpblNjcmlwdGFibGVP
YmplY3RdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IGdldEZvcm1WYWx1ZTpd
KToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IGV2YWx1YXRlSmF2YVNjcmlwdFBs
dWdpblJlcXVlc3Q6XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyB3ZWJGcmFt
ZTpkaWRGaW5pc2hMb2FkV2l0aFJlYXNvbjpdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVn
aW5WaWV3IGxvYWRQbHVnaW5SZXF1ZXN0Ol0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdp
blZpZXcgX3ByaW50ZWRQbHVnaW5CaXRtYXBdKToKKyAgICAgICAgKiBQbHVnaW5zL1dlYlBsdWdp
bkNvbnRyb2xsZXIubW06CisgICAgICAgICgrW1dlYlBsdWdpbkNvbnRyb2xsZXIgcGx1Z0luVmll
d1dpdGhBcmd1bWVudHM6ZnJvbVBsdWdpblBhY2thZ2U6XSk6CisgICAgICAgICgtW1dlYlBsdWdp
bkNvbnRyb2xsZXIgc3RvcE9uZVBsdWdpbjpdKToKKyAgICAgICAgKC1bV2ViUGx1Z2luQ29udHJv
bGxlciBkZXN0cm95T25lUGx1Z2luOl0pOgorICAgICAgICAoLVtXZWJQbHVnaW5Db250cm9sbGVy
IHN0YXJ0QWxsUGx1Z2luc10pOgorICAgICAgICAoLVtXZWJQbHVnaW5Db250cm9sbGVyIGFkZFBs
dWdpbjpdKToKKyAgICAgICAgKiBXZWJLaXQub3JkZXI6CisgICAgICAgICogV2ViVmlldy9XZWJT
Y3JpcHREZWJ1Z0RlbGVnYXRlLm1tOgorICAgICAgICAoLVtXZWJTY3JpcHRDYWxsRnJhbWUgc2Nv
cGVDaGFpbl0pOgorICAgICAgICAoLVtXZWJTY3JpcHRDYWxsRnJhbWUgZXZhbHVhdGVXZWJTY3Jp
cHQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5tbToKKyAgICAgICAg
KFdlYlNjcmlwdERlYnVnZ2VyOjpXZWJTY3JpcHREZWJ1Z2dlcik6CisKIDIwMTMtMDQtMTYgIEJl
dGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlLW5hbWUgUGFnZTo6bGF5
b3V0TWlsZXN0b25lcygpIHRvIFBhZ2U6OnJlcXVlc3RlZExheW91dE1pbGVzdG9uZXMoKQpJbmRl
eDogU291cmNlL1dlYktpdC9tYWMvV2ViS2l0Lm9yZGVyCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYktpdC5vcmRlcgkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYktp
dC9tYWMvV2ViS2l0Lm9yZGVyCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUwLDcgKzEwNTAsNyBAQCBf
X1hQQ0dldFdpbmRvd05QT2JqZWN0CiBfV0tQQ0dldFdpbmRvd05QT2JqZWN0CiBfX1pOSzNXVEY3
SGFzaE1hcElqUE42V2ViS2l0MjNOZXRzY2FwZVBsdWdpbkhvc3RQcm94eUVOU183SW50SGFzaElq
RUVOU18xMEhhc2hUcmFpdHNJakVFTlM2X0lTM19FRUUzZ2V0RVJLagogX19aTjZXZWJLaXQyN05l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTE3Z2V0V2luZG93TlBPYmplY3RFUmoKLV9fWk42V2Vi
S2l0MjdOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkxNExvY2FsT2JqZWN0TWFwMTFpZEZvck9i
amVjdEVSTjNKU0MxMkpTR2xvYmFsRGF0YUVQTlMyXzhKU09iamVjdEUKK19fWk42V2ViS2l0MjdO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkxNExvY2FsT2JqZWN0TWFwMTFpZEZvck9iamVjdEVS
TjNKU0MxMlZNRVBOUzJfOEpTT2JqZWN0RQogX19aTkszV1RGOUhhc2hUYWJsZUlqU3Q0cGFpcklq
TjNKU0M2U3Ryb25nSU5TMl84SlNPYmplY3RFRUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzZf
RUVOU183SW50SGFzaElqRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lqRUVO
U0NfSVM1X0VFRUVTRF9FOGNvbnRhaW5zSWpOU18yMklkZW50aXR5SGFzaFRyYW5zbGF0b3JJalM2
X1NBX0VFRUViUktUXwogX19aTjNKU0M2U3Ryb25nSU5TXzhKU09iamVjdEVFYVNFUktTMl8KIF9f
WFBDRXZhbHVhdGUKQEAgLTIyNDUsNyArMjI0NSw3IEBAIF9fWk43V2ViQ29yZTE0UGx1Z2luVmll
d0Jhc2UyN3ByaXZhdGVCcm8KIF9fWk42V2ViS2l0MjdOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHkyOHByaXZhdGVCcm93c2luZ01vZGVEaWRDaGFuZ2VFYgogX19XS1BIUGx1Z2luSW5zdGFuY2VQ
cml2YXRlQnJvd3NpbmdNb2RlRGlkQ2hhbmdlCiBfV0tTZXRDb29raWVTdG9yYWdlUHJpdmF0ZUJy
b3dzaW5nRW5hYmxlZAotX19aTjNKU0M4SlNPYmplY3QxN2dldERpcmVjdExvY2F0aW9uRVJOU18x
MkpTR2xvYmFsRGF0YUVSS05TXzEwSWRlbnRpZmllckUKK19fWk4zSlNDOEpTT2JqZWN0MTdnZXRE
aXJlY3RMb2NhdGlvbkVSTlNfMTJWTUVSS05TXzEwSWRlbnRpZmllckUKIF9fWFBDU3RhdHVzVGV4
dAogX1dLUENTdGF0dXNUZXh0CiBfX1pONldlYktpdDI3TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5NnN0YXR1c0VQS2MKQEAgLTIyNjAsNyArMjI2MCw3IEBAIF9XS1BDRW51bWVyYXRlCiBfX1pO
NldlYktpdDI3TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OWVudW1lcmF0ZUVqUlBjUmoKIF9f
Wk4zSlNDMTdQcm9wZXJ0eU5hbWVBcnJheUQxRXYKIF9fWk4zV1RGNlZlY3RvcklOM0pTQzEwSWRl
bnRpZmllckVMbTIwRUVEMUV2Ci1fX1pOM0pTQzhqc1N0cmluZ0VQTlNfMTJKU0dsb2JhbERhdGFF
UktOU183VVN0cmluZ0UKK19fWk4zSlNDOGpzU3RyaW5nRVBOU18xMlZNRVJLTlNfN1VTdHJpbmdF
CiBfX1pONldlYktpdDEzUHJveHlJbnN0YW5jZTE2Z2V0UHJvcGVydHlOYW1lc0VQTjNKU0M5RXhl
Y1N0YXRlRVJOUzFfMTdQcm9wZXJ0eU5hbWVBcnJheUUKIF9fV0tQSE5QT2JqZWN0RW51bWVyYXRl
CiBfX1hQQ0dldEludElkZW50aWZpZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2Vi
Q29yZVN0YXRpc3RpY3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvTWlzYy9X
ZWJDb3JlU3RhdGlzdGljcy5tbQkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYktpdC9t
YWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTgsMzUgKzU4
LDM1IEBAICsgKE5TQXJyYXkgKilzdGF0aXN0aWNzCiAKICsgKHNpemVfdClqYXZhU2NyaXB0T2Jq
ZWN0c0NvdW50CiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKLSAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpLT5oZWFwLm9iamVjdENvdW50KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5k
b3c6OmNvbW1vblZNKCkpOworICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVh
cC5vYmplY3RDb3VudCgpOwogfQogCiArIChzaXplX3QpamF2YVNjcmlwdEdsb2JhbE9iamVjdHND
b3VudAogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2Jh
bERhdGEoKSk7Ci0gICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+
aGVhcC5nbG9iYWxPYmplY3RDb3VudCgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2lu
ZG93Ojpjb21tb25WTSgpKTsKKyAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhl
YXAuZ2xvYmFsT2JqZWN0Q291bnQoKTsKIH0KIAogKyAoc2l6ZV90KWphdmFTY3JpcHRQcm90ZWN0
ZWRPYmplY3RzQ291bnQKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOwotICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9i
YWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAgcmV0dXJuIEpTRE9NV2luZG93Ojpj
b21tb25WTSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdENvdW50KCk7CiB9CiAKICsgKHNpemVfdClq
YXZhU2NyaXB0UHJvdGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50CiB7Ci0gICAgSlNMb2NrSG9sZGVy
IGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKLSAgICByZXR1cm4gSlNE
T01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZEdsb2JhbE9iamVj
dENvdW50KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkp
OworICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5wcm90ZWN0ZWRHbG9i
YWxPYmplY3RDb3VudCgpOwogfQogCiArIChOU0NvdW50ZWRTZXQgKilqYXZhU2NyaXB0UHJvdGVj
dGVkT2JqZWN0VHlwZUNvdW50cwogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93
Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5k
b3c6OmNvbW1vblZNKCkpOwogICAgIAogICAgIE5TQ291bnRlZFNldCAqcmVzdWx0ID0gW05TQ291
bnRlZFNldCBzZXRdOwogCi0gICAgT3duUHRyPFR5cGVDb3VudFNldD4gY291bnRzKEpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRz
KCkpOworICAgIE93blB0cjxUeXBlQ291bnRTZXQ+IGNvdW50cyhKU0RPTVdpbmRvdzo6Y29tbW9u
Vk0oKS0+aGVhcC5wcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpOwogICAgIEhhc2hDb3VudGVk
U2V0PGNvbnN0IGNoYXIqPjo6aXRlcmF0b3IgZW5kID0gY291bnRzLT5lbmQoKTsKICAgICBmb3Ig
KEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPjo6aXRlcmF0b3IgaXQgPSBjb3VudHMtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0
LT52YWx1ZTsgKytpKQpAQCAtOTcsMTEgKzk3LDExIEBAICsgKE5TQ291bnRlZFNldCAqKWphdmFT
Y3JpcHRQcm90ZWN0ZWRPYmoKIAogKyAoTlNDb3VudGVkU2V0ICopamF2YVNjcmlwdE9iamVjdFR5
cGVDb3VudHMKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25W
TSgpKTsKICAgICAKICAgICBOU0NvdW50ZWRTZXQgKnJlc3VsdCA9IFtOU0NvdW50ZWRTZXQgc2V0
XTsKIAotICAgIE93blB0cjxUeXBlQ291bnRTZXQ+IGNvdW50cyhKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0VHlwZUNvdW50cygpKTsKKyAgICBPd25QdHI8VHlw
ZUNvdW50U2V0PiBjb3VudHMoSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhlYXAub2JqZWN0VHlw
ZUNvdW50cygpKTsKICAgICBIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0ZXJhdG9yIGVu
ZCA9IGNvdW50cy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46
Oml0ZXJhdG9yIGl0ID0gY291bnRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+dmFsdWU7ICsraSkKQEAgLTE2NywxMyArMTY3
LDEzIEBAICsgKHNpemVfdClnbHlwaFBhZ2VDb3VudAogCiArIChCT09MKXNob3VsZFByaW50RXhj
ZXB0aW9ucwogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0ds
b2JhbERhdGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZN
KCkpOwogICAgIHJldHVybiBQYWdlQ29uc29sZTo6c2hvdWxkUHJpbnRFeGNlcHRpb25zKCk7CiB9
CiAKICsgKHZvaWQpc2V0U2hvdWxkUHJpbnRFeGNlcHRpb25zOihCT09MKXByaW50CiB7Ci0gICAg
SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CiAgICAgUGFnZUNv
bnNvbGU6OnNldFNob3VsZFByaW50RXhjZXB0aW9ucyhwcmludCk7CiB9CiAKQEAgLTIwMSw5ICsy
MDEsOSBAQCArIChOU0RpY3Rpb25hcnkgKiltZW1vcnlTdGF0aXN0aWNzCiB7CiAgICAgV1RGOjpG
YXN0TWFsbG9jU3RhdGlzdGljcyBmYXN0TWFsbG9jU3RhdGlzdGljcyA9IFdURjo6ZmFzdE1hbGxv
Y1N0YXRpc3RpY3MoKTsKICAgICAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwotICAgIHNpemVfdCBoZWFwU2l6ZSA9IEpTRE9NV2luZG93
Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5zaXplKCk7Ci0gICAgc2l6ZV90IGhlYXBGcmVl
ID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmNhcGFjaXR5KCkgLSBo
ZWFwU2l6ZTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7
CisgICAgc2l6ZV90IGhlYXBTaXplID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhlYXAuc2l6
ZSgpOworICAgIHNpemVfdCBoZWFwRnJlZSA9IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFw
LmNhcGFjaXR5KCkgLSBoZWFwU2l6ZTsKICAgICBHbG9iYWxNZW1vcnlTdGF0aXN0aWNzIGdsb2Jh
bE1lbW9yeVN0YXRzID0gZ2xvYmFsTWVtb3J5U3RhdGlzdGljcygpOwogICAgIAogICAgIHJldHVy
biBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CkBAIC0yNDYsOCAr
MjQ2LDggQEAgKyAoc2l6ZV90KWphdmFTY3JpcHROb0dDQWxsb3dlZE9iamVjdHNDbwogCiArIChz
aXplX3QpamF2YVNjcmlwdFJlZmVyZW5jZWRPYmplY3RzQ291bnQKIHsKLSAgICBKU0xvY2tIb2xk
ZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwotICAgIHJldHVybiBK
U0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0Q291
bnQoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Cisg
ICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdENv
dW50KCk7CiB9CiAKICsgKE5TU2V0ICopamF2YVNjcmlwdFJvb3RPYmplY3RDbGFzc2VzCkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5T
dHJlYW0ubW0JKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMv
V2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0JKHdvcmtpbmcgY29weSkKQEAgLTM2OCw3ICszNjgs
NyBAQCBib29sIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjp3YW50c0FsbFN0CiAgICAgTlBFcnJv
ciBlcnJvcjsKICAgICB7CiAgICAgICAgIFBsdWdpblN0b3BEZWZlcnJlciBkZWZlcnJlcihtX3Bs
dWdpblZpZXcuZ2V0KCkpOwotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25WTSgpKTsKICAgICAgICAgZXJyb3IgPSBtX3BsdWdpbkZ1bmNzLT5nZXR2YWx1ZShtX3Bs
dWdpbiwgTlBQVnBsdWdpbldhbnRzQWxsTmV0d29ya1N0cmVhbXMsICZ2YWx1ZSk7CiAgICAgfQog
ICAgIGlmIChlcnJvciAhPSBOUEVSUl9OT19FUlJPUikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFj
L1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCShyZXZpc2lvbiAxNDg2
NTUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5t
bQkod29ya2luZyBjb3B5KQpAQCAtNjY5LDcgKzY2OSw3IEBAIC0gKEJPT0wpc2VuZEV2ZW50Oih2
b2lkKilldmVudCBpc0RyYXdSZWMKICAgICAvLyBTZXQgdGhlIHBsdWdpbkFsbG93UG9wdXAgZmxh
Zy4KICAgICBBU1NFUlQoX2V2ZW50SGFuZGxlcik7CiAgICAgewotICAgICAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgVXNlckdlc3R1cmVJbmRp
Y2F0b3IgZ2VzdHVyZUluZGljYXRvcihfZXZlbnRIYW5kbGVyLT5jdXJyZW50RXZlbnRJc1VzZXJH
ZXN0dXJlKCkgPyBEZWZpbml0ZWx5UHJvY2Vzc2luZ05ld1VzZXJHZXN0dXJlIDogUG9zc2libHlQ
cm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgICAgICBhY2NlcHRlZEV2ZW50ID0gW19wbHVnaW5Q
YWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+ZXZlbnQocGx1Z2luLCBldmVudCk7CiAgICAgfQpA
QCAtODUwLDcgKzg1MCw3IEBAIC0gKHZvaWQpcHJpdmF0ZUJyb3dzaW5nTW9kZURpZENoYW5nZQog
CiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgewotICAgICAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgaWYgKFtfcGx1
Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPnNldHZhbHVlKQogICAgICAgICAgICAgW19w
bHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+c2V0dmFsdWUocGx1Z2luLCBOUE5WcHJp
dmF0ZU1vZGVCb29sLCAmdmFsdWUpOwogICAgIH0KQEAgLTk5MSw3ICs5OTEsNyBAQCAtICh2b2lk
KXNldFdpbmRvd0lmTmVjZXNzYXJ5CiAgICAgICAgIGluU2V0V2luZG93ID0gWUVTOyAgICAgICAg
CiAgICAgICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25dOwogICAgICAgICB7Ci0gICAg
ICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRv
d0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAg
ICAgICAgICAgICBucEVyciA9IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPnNl
dHdpbmRvdyhwbHVnaW4sICZ3aW5kb3cpOwogICAgICAgICB9CiAgICAgICAgIFtzZWxmIGRpZENh
bGxQbHVnSW5GdW5jdGlvbl07CkBAIC0xNDQzLDcgKzE0NDMsNyBAQCAtIChOUE9iamVjdCAqKWNy
ZWF0ZVBsdWdpblNjcmlwdGFibGVPYmplCiAgICAgTlBFcnJvciBlcnJvcjsKICAgICBbc2VsZiB3
aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RP
TVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICBlcnJvciA9IFtfcGx1Z2luUGFja2Fn
ZS5nZXQoKSBwbHVnaW5GdW5jc10tPmdldHZhbHVlKHBsdWdpbiwgTlBQVnBsdWdpblNjcmlwdGFi
bGVOUE9iamVjdCwgJnZhbHVlKTsKICAgICB9CiAgICAgW3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0
aW9uXTsKQEAgLTE0NjIsNyArMTQ2Miw3IEBAIC0gKEJPT0wpZ2V0Rm9ybVZhbHVlOihOU1N0cmlu
ZyAqKil2YWx1ZQogICAgIE5QRXJyb3IgZXJyb3I7CiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5G
dW5jdGlvbl07CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25WTSgpKTsKICAgICAgICAgZXJyb3IgPSBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2lu
RnVuY3NdLT5nZXR2YWx1ZShwbHVnaW4sIE5QUFZmb3JtVmFsdWUsICZidWZmZXIpOwogICAgIH0K
ICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMTU5NCw3ICsxNTk0LDcgQEAg
LSAodm9pZClldmFsdWF0ZUphdmFTY3JpcHRQbHVnaW5SZXF1ZXN0OgogICAgICAgICBpZiAoW0pT
UGx1Z2luUmVxdWVzdCBzZW5kTm90aWZpY2F0aW9uXSkgewogICAgICAgICAgICAgW3NlbGYgd2ls
bENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CisgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAg
ICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT51cmxub3RpZnkocGx1
Z2luLCBbVVJMIF93ZWJfVVJMQ1N0cmluZ10sIE5QUkVTX0RPTkUsIFtKU1BsdWdpblJlcXVlc3Qg
bm90aWZ5RGF0YV0pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgW3NlbGYgZGlkQ2FsbFBs
dWdJbkZ1bmN0aW9uXTsKQEAgLTE2MjYsNyArMTYyNiw3IEBAIC0gKHZvaWQpd2ViRnJhbWU6KFdl
YkZyYW1lICopd2ViRnJhbWUgZGkKICAgICAgICAgCiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5G
dW5jdGlvbl07CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25WTSgpKTsKICAgICAgICAgW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+
dXJsbm90aWZ5KHBsdWdpbiwgW1tbcGx1Z2luUmVxdWVzdCByZXF1ZXN0XSBVUkxdIF93ZWJfVVJM
Q1N0cmluZ10sIHJlYXNvbiwgW3BsdWdpblJlcXVlc3Qgbm90aWZ5RGF0YV0pOwogICAgIH0KICAg
ICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMTY3MCw3ICsxNjcwLDcgQEAgLSAo
dm9pZClsb2FkUGx1Z2luUmVxdWVzdDooV2ViUGx1Z2luUmVxdQogICAgICAgICAgICAgICAgIGlm
IChbcGx1Z2luUmVxdWVzdCBzZW5kTm90aWZpY2F0aW9uXSkgewogICAgICAgICAgICAgICAgICAg
ICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RP
TVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgW19wbHVn
aW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+dXJsbm90aWZ5KHBsdWdpbiwgW1tbcGx1Z2lu
UmVxdWVzdCByZXF1ZXN0XSBVUkxdIF93ZWJfVVJMQ1N0cmluZ10sIE5QRVJSX0dFTkVSSUNfRVJS
T1IsIFtwbHVnaW5SZXF1ZXN0IG5vdGlmeURhdGFdKTsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMjQ2
NCw3ICsyNDY0LDcgQEAgLSAoTlNCaXRtYXBJbWFnZVJlcCAqKV9wcmludGVkUGx1Z2luQml0bQog
ICAgIC8vIFRlbGwgdGhlIHBsdWdpbiB0byBwcmludCBpbnRvIHRoZSBHV29ybGQKICAgICBbc2Vs
ZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxE
YXRhKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0
KCkgcGx1Z2luRnVuY3NdLT5wcmludChwbHVnaW4sICZucFByaW50KTsKICAgICB9CiAgICAgW3Nl
bGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdp
bnMvV2ViUGx1Z2luQ29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21h
Yy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW0JKHJldmlzaW9uIDE0ODY1NSkKKysrIFNv
dXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxlci5tbQkod29ya2luZyBj
b3B5KQpAQCAtOTcsMTAgKzk3LDEwIEBAICsgKE5TVmlldyAqKXBsdWdJblZpZXdXaXRoQXJndW1l
bnRzOihOU0QKICAgICBOU1ZpZXcgKnZpZXcgPSBuaWw7CiAKICAgICBpZiAoW3ZpZXdGYWN0b3J5
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z0luVmlld1dpdGhBcmd1bWVudHM6KV0p
IHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAg
ICAgICAgIHZpZXcgPSBbdmlld0ZhY3RvcnkgcGx1Z0luVmlld1dpdGhBcmd1bWVudHM6YXJndW1l
bnRzXTsKICAgICB9IGVsc2UgaWYgKFt2aWV3RmFjdG9yeSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKHBsdWdpblZpZXdXaXRoQXJndW1lbnRzOildKSB7Ci0gICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICB2aWV3ID0gW3ZpZXdGYWN0
b3J5IHBsdWdpblZpZXdXaXRoQXJndW1lbnRzOmFyZ3VtZW50c107CiAgICAgfQogICAgIApAQCAt
MTUwLDEwICsxNTAsMTAgQEAgLSAodm9pZClkZWFsbG9jCiAtICh2b2lkKXN0b3BPbmVQbHVnaW46
KE5TVmlldyAqKXZpZXcKIHsKICAgICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3Rvcih3ZWJQbHVnSW5TdG9wKV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7Cisg
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgIFt2aWV3IHdlYlBsdWdJblN0b3BdOwogICAgIH0g
ZWxzZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnaW5TdG9wKV0p
IHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAg
ICAgICAgIFt2aWV3IHBsdWdpblN0b3BdOwogICAgIH0KIH0KQEAgLTE2MSwxMCArMTYxLDEwIEBA
IC0gKHZvaWQpc3RvcE9uZVBsdWdpbjooTlNWaWV3ICopdmlldwogLSAodm9pZClkZXN0cm95T25l
UGx1Z2luOihOU1ZpZXcgKil2aWV3CiB7CiAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3Iod2ViUGx1Z0luRGVzdHJveSldKSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxE
YXRhKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICBbdmlldyB3ZWJQbHVnSW5EZXN0
cm95XTsKICAgICB9IGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
cGx1Z2luRGVzdHJveSldKSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vblZNKCkpOwogICAgICAgICBbdmlldyBwbHVnaW5EZXN0cm95XTsKICAgICB9CiB9CkBA
IC0xODEsMTAgKzE4MSwxMCBAQCAtICh2b2lkKXN0YXJ0QWxsUGx1Z2lucwogICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICAgICBpZCBhVmlldyA9IFtfdmlld3Mgb2Jq
ZWN0QXRJbmRleDppXTsKICAgICAgICAgaWYgKFthVmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKHdlYlBsdWdJblN0YXJ0KV0pIHsKLSAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOworICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgICAgIFthVmlldyB3ZWJQbHVn
SW5TdGFydF07CiAgICAgICAgIH0gZWxzZSBpZiAoW2FWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IocGx1Z2luU3RhcnQpXSkgewotICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEo
KSk7CisgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICAgICAgW2FWaWV3IHBsdWdpblN0
YXJ0XTsKICAgICAgICAgfQogICAgIH0KQEAgLTI1MywxMCArMjUzLDEwIEBAIC0gKHZvaWQpYWRk
UGx1Z2luOihOU1ZpZXcgKil2aWV3CiAKICAgICAgICAgTE9HKFBsdWdpbnMsICJpbml0aWFsaXpp
bmcgcGx1Zy1pbiAlQCIsIHZpZXcpOwogICAgICAgICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5Jbml0aWFsaXplKV0pIHsKLSAgICAgICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOworICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgICAgIFt2
aWV3IHdlYlBsdWdJbkluaXRpYWxpemVdOwogICAgICAgICB9IGVsc2UgaWYgKFt2aWV3IHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luSW5pdGlhbGl6ZSldKSB7Ci0gICAgICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAg
ICAgICBbdmlldyBwbHVnaW5Jbml0aWFsaXplXTsKICAgICAgICAgfQogCkBAIC0yNjYsMTUgKzI2
NiwxNSBAQCAtICh2b2lkKWFkZFBsdWdpbjooTlNWaWV3ICopdmlldwogICAgICAgICBpZiAoX3N0
YXJ0ZWQpIHsKICAgICAgICAgICAgIExPRyhQbHVnaW5zLCAic3RhcnRpbmcgcGx1Zy1pbiAlQCIs
IHZpZXcpOwogICAgICAgICAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3Iod2ViUGx1Z0luU3RhcnQpXSkgewotICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOworICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgICAgICAgICAgW3ZpZXcg
d2ViUGx1Z0luU3RhcnRdOwogICAgICAgICAgICAgfSBlbHNlIGlmIChbdmlldyByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdpblN0YXJ0KV0pIHsKLSAgICAgICAgICAgICAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICAg
ICAgICAgIFt2aWV3IHBsdWdpblN0YXJ0XTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2V0Q29u
dGFpbmluZ1dpbmRvdzopXSkgewotICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkp
OworICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgICAgICAgICAgW3ZpZXcgc2V0
Q29udGFpbmluZ1dpbmRvdzpbX2RvY3VtZW50VmlldyB3aW5kb3ddXTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2Nh
cGVQbHVnaW5Ib3N0UHJveHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1
Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0JKHJldmlzaW9uIDE0ODY1NSkK
KysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFBy
b3h5Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MzksNyArNjM5LDcgQEAgc3RhdGljIElkZW50aWZp
ZXIgaWRlbnRpZmllckZyb21JZGVudGlmaQogICAgIEFTU0VSVChpZGVudGlmaWVyLT5pc1N0cmlu
ZygpKTsKICAgCiAgICAgY29uc3QgY2hhciogc3RyID0gaWRlbnRpZmllci0+c3RyaW5nKCk7ICAg
IAotICAgIHJldHVybiBJZGVudGlmaWVyKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEo
KSwgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhzdHIsIHN0cmxlbihzdHIpKSk7
CisgICAgcmV0dXJuIElkZW50aWZpZXIoSlNET01XaW5kb3c6OmNvbW1vblZNKCksIFN0cmluZzo6
ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soc3RyLCBzdHJsZW4oc3RyKSkpOwogfQogCiBrZXJu
X3JldHVybl90IFdLUENJbnZva2UobWFjaF9wb3J0X3QgY2xpZW50UG9ydCwgdWludDMyX3QgcGx1
Z2luSUQsIHVpbnQzMl90IHJlcXVlc3RJRCwgdWludDMyX3Qgb2JqZWN0SUQsIHVpbnQ2NF90IHNl
cnZlcklkZW50aWZpZXIsCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9O
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkuaAkocmV2aXNp
b24gMTQ4NjU1KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNk
ZWZpbmUgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5X2gKIAogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0lkZW50aWZpZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbERh
dGEuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9WTS5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1N0cm9uZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KICNpbmNsdWRlIDxX
ZWJLaXQvbnBhcGkuaD4KQEAgLTMyMCw3ICszMjAsNyBAQCBwcml2YXRlOgogICAgIHB1YmxpYzoK
ICAgICAgICAgTG9jYWxPYmplY3RNYXAoKTsKICAgICAgICAgfkxvY2FsT2JqZWN0TWFwKCk7Ci0g
ICAgICAgIHVpbnQzMl90IGlkRm9yT2JqZWN0KEpTQzo6SlNHbG9iYWxEYXRhJiwgSlNDOjpKU09i
amVjdCopOworICAgICAgICB1aW50MzJfdCBpZEZvck9iamVjdChKU0M6OlZNJiwgSlNDOjpKU09i
amVjdCopOwogICAgICAgICB2b2lkIHJldGFpbihKU0M6OkpTT2JqZWN0Kik7CiAgICAgICAgIHZv
aWQgcmVsZWFzZShKU0M6OkpTT2JqZWN0Kik7CiAgICAgICAgIHZvaWQgY2xlYXIoKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9O
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJj
ZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw3IEBAIGlubGluZSBKU0M6OkpTT2JqZWN0
KiBOZXRzY2FwZVBsdWdpbkluc3QKICAgICByZXR1cm4gbV9pZFRvSlNPYmplY3RNYXAuZ2V0KG9i
amVjdElEKS5nZXQoKTsKIH0KIAotdWludDMyX3QgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
OjpMb2NhbE9iamVjdE1hcDo6aWRGb3JPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U09iamVjdCogb2JqZWN0KQordWludDMyX3QgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpM
b2NhbE9iamVjdE1hcDo6aWRGb3JPYmplY3QoVk0mIHZtLCBKU09iamVjdCogb2JqZWN0KQogewog
ICAgIC8vIFRoaXMgbWV0aG9kIGNyZWF0ZXMgb2JqZWN0cyB3aXRoIHJlZmNvdW50IG9mIDEsIGJ1
dCBkb2Vzbid0IGluY3JlYXNlIHJlZmNvdW50IHdoZW4gcmV0dXJuaW5nCiAgICAgLy8gZm91bmQg
b2JqZWN0cy4gVGhpcyBleHRyYSBjb3VudCBhY2NvdW50cyBmb3IgdGhlIG1haW4gInJlZmVyZW5j
ZSIga2VwdCBieSBwbHVnaW4gcHJvY2Vzcy4KQEAgLTE1MSw3ICsxNTEsNyBAQCB1aW50MzJfdCBO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvCiAgICAgICAgIG9iamVjdElEID0gKyttX29i
amVjdElEQ291bnRlcjsKICAgICB9IHdoaWxlICghbV9vYmplY3RJRENvdW50ZXIgfHwgbV9vYmpl
Y3RJRENvdW50ZXIgPT0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KC0xKSB8fCBtX2lkVG9KU09iamVj
dE1hcC5jb250YWlucyhvYmplY3RJRCkpOwogCi0gICAgbV9pZFRvSlNPYmplY3RNYXAuc2V0KG9i
amVjdElELCBTdHJvbmc8SlNPYmplY3Q+KGdsb2JhbERhdGEsIG9iamVjdCkpOworICAgIG1faWRU
b0pTT2JqZWN0TWFwLnNldChvYmplY3RJRCwgU3Ryb25nPEpTT2JqZWN0Pih2bSwgb2JqZWN0KSk7
CiAgICAgbV9qc09iamVjdFRvSURNYXAuc2V0KG9iamVjdCwgbWFrZV9wYWlyKG9iamVjdElELCAx
KSk7CiAKICAgICByZXR1cm4gb2JqZWN0SUQ7CkBAIC04MjksNyArODI5LDcgQEAgYm9vbCBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmdldFdpbgogICAgIGlmICghZnJhbWUtPnNjcmlwdCgp
LT5jYW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNjcmlwdCkpCiAgICAgICAgIG9i
amVjdElEID0gMDsKICAgICBlbHNlCi0gICAgICAgIG9iamVjdElEID0gbV9sb2NhbE9iamVjdHMu
aWRGb3JPYmplY3QoKnBsdWdpbldvcmxkKCktPmdsb2JhbERhdGEoKSwgZnJhbWUtPnNjcmlwdCgp
LT53aW5kb3dTaGVsbChwbHVnaW5Xb3JsZCgpKS0+d2luZG93KCkpOworICAgICAgICBvYmplY3RJ
RCA9IG1fbG9jYWxPYmplY3RzLmlkRm9yT2JqZWN0KCpwbHVnaW5Xb3JsZCgpLT52bSgpLCBmcmFt
ZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKHBsdWdpbldvcmxkKCkpLT53aW5kb3coKSk7CiAgICAg
ICAgIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtODQxLDcgKzg0MSw3IEBAIGJvb2wgTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5OjpnZXRQbHUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IAogICAgIGlmIChKU09iamVjdCogb2JqZWN0ID0gZnJhbWUtPnNjcmlwdCgpLT5qc09iamVjdEZv
clBsdWdpbkVsZW1lbnQoW21fcGx1Z2luVmlldyBlbGVtZW50XSkpCi0gICAgICAgIG9iamVjdElE
ID0gbV9sb2NhbE9iamVjdHMuaWRGb3JPYmplY3QoKnBsdWdpbldvcmxkKCktPmdsb2JhbERhdGEo
KSwgb2JqZWN0KTsKKyAgICAgICAgb2JqZWN0SUQgPSBtX2xvY2FsT2JqZWN0cy5pZEZvck9iamVj
dCgqcGx1Z2luV29ybGQoKS0+dm0oKSwgb2JqZWN0KTsKICAgICBlbHNlCiAgICAgICAgIG9iamVj
dElEID0gMDsKICAgICAKQEAgLTg3MCw4ICs4NzAsOCBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eTo6ZXZhbHVhCiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2socGx1Z2luV29ybGQoKS0+Z2xvYmFsRGF0YSgpKTsK
LSAgICBTdHJvbmc8SlNHbG9iYWxPYmplY3Q+IGdsb2JhbE9iamVjdCgqcGx1Z2luV29ybGQoKS0+
Z2xvYmFsRGF0YSgpLCBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgp
KSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2socGx1Z2luV29ybGQoKS0+dm0oKSk7CisgICAgU3Ry
b25nPEpTR2xvYmFsT2JqZWN0PiBnbG9iYWxPYmplY3QoKnBsdWdpbldvcmxkKCktPnZtKCksIGZy
YW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpKTsKICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAogICAgIFVzZXJHZXN0dXJl
SW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IoYWxsb3dQb3B1cHMgPyBEZWZpbml0ZWx5UHJvY2Vz
c2luZ05ld1VzZXJHZXN0dXJlIDogUG9zc2libHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwpAQCAt
MTI4MSw3ICsxMjgxLDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmFkZFZh
bAogICAgICAgICAgICAgW2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpv
YmplY3RJRF1dOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgW2FycmF5IGFkZE9iamVj
dDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpKU09iamVjdFZhbHVlVHlwZV1dOwotICAgICAgICAg
ICAgW2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDptX2xvY2FsT2JqZWN0
cy5pZEZvck9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIG9iamVjdCldXTsKKyAgICAgICAgICAg
IFthcnJheSBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bV9sb2NhbE9iamVjdHMu
aWRGb3JPYmplY3QoZXhlYy0+dm0oKSwgb2JqZWN0KV1dOwogICAgICAgICB9CiAgICAgfSBlbHNl
CiAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6Vm9pZFZh
bHVlVHlwZV1dOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJ
bnN0YW5jZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3Rl
ZC9Qcm94eUluc3RhbmNlLm1tCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2UvV2ViS2l0L21h
Yy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODQs
MTYgKzE4NCwxNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFByb3h5UnVudGltZU1ldGhvZCogY3Jl
YXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBCaW5kaW5nczo6TWV0aG9kKiBtZXRob2QpCiAgICAgewogICAgICAgICAv
LyBGSVhNRTogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZSB1c2VzIHRoZSBwcm90b3R5cGUgb2Zm
IG9mIHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0Ci0gICAgICAgIC8vIGV4ZWMtZ2xvYmFsRGF0YSgp
IGlzIGFsc28gbGlrZWx5IHdyb25nLgorICAgICAgICAvLyBleGVjLXZtKCkgaXMgYWxzbyBsaWtl
bHkgd3JvbmcuCiAgICAgICAgIFN0cnVjdHVyZSogZG9tU3RydWN0dXJlID0gZGVwcmVjYXRlZEdl
dERPTVN0cnVjdHVyZTxQcm94eVJ1bnRpbWVNZXRob2Q+KGV4ZWMpOwogICAgICAgICBQcm94eVJ1
bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QgPSBuZXcgKGFsbG9jYXRlQ2VsbDxQcm94eVJ1bnRp
bWVNZXRob2Q+KCpleGVjLT5oZWFwKCkpKSBQcm94eVJ1bnRpbWVNZXRob2QoZ2xvYmFsT2JqZWN0
LCBkb21TdHJ1Y3R1cmUsIG1ldGhvZCk7Ci0gICAgICAgIHJ1bnRpbWVNZXRob2QtPmZpbmlzaENy
ZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmFtZSk7CisgICAgICAgIHJ1bnRpbWVNZXRob2Qt
PmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCksIG5hbWUpOwogICAgICAgICByZXR1cm4gcnVudGlt
ZU1ldGhvZDsKICAgICB9CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAm
c19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKQEAg
LTIwNCw5ICsyMDQsOSBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgU3RyaW5nJiBuYW1lKQor
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAg
ewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBuYW1lKTsKKyAgICAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIG5hbWUpOwogICAgICAgICBBU1NFUlQoaW5oZXJp
dHMoJnNfaW5mbykpOwogICAgIH0KIH07CkBAIC0zMzcsNyArMzM3LDcgQEAgdm9pZCBQcm94eUlu
c3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZQogCiAgICAgICAgIGlmIChpZGVudGlmaWVyLT5p
c1N0cmluZygpKSB7CiAgICAgICAgICAgICBjb25zdCBjaGFyKiBzdHIgPSBpZGVudGlmaWVyLT5z
dHJpbmcoKTsKLSAgICAgICAgICAgIG5hbWVBcnJheS5hZGQoSWRlbnRpZmllcihKU0RPTVdpbmRv
dzo6Y29tbW9uSlNHbG9iYWxEYXRhKCksIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJh
Y2soc3RyLCBzdHJsZW4oc3RyKSkpKTsKKyAgICAgICAgICAgIG5hbWVBcnJheS5hZGQoSWRlbnRp
ZmllcihKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSwgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFG
YWxsYmFjayhzdHIsIHN0cmxlbihzdHIpKSkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
IG5hbWVBcnJheS5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpZGVudGlmaWVyLT5udW1iZXIo
KSkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5
UnVudGltZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMv
SG9zdGVkL1Byb3h5UnVudGltZU9iamVjdC5oCShyZXZpc2lvbiAxNDg2NTUpCisrKyBTb3VyY2Uv
V2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eVJ1bnRpbWVPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFByb3h5UnVudGltZU9i
amVjdCogY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8UHJveHlJbnN0YW5jZT4gaW5zdGFuY2UpCiAgICAgewog
ICAgICAgICAvLyBGSVhNRTogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZSB1c2VzIHRoZSBwcm90
b3R5cGUgb2ZmIG9mIHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0LgotICAgICAgICAvLyBleGVjLT5n
bG9iYWxEYXRhKCkgaXMgYWxzbyBsaWtlbHkgd3JvbmcuCisgICAgICAgIC8vIGV4ZWMtPnZtKCkg
aXMgYWxzbyBsaWtlbHkgd3JvbmcuCiAgICAgICAgIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPFByb3h5UnVudGltZU9iamVjdD4o
ZXhlYyk7CiAgICAgICAgIFByb3h5UnVudGltZU9iamVjdCogb2JqZWN0ID0gbmV3IChKU0M6OmFs
bG9jYXRlQ2VsbDxQcm94eVJ1bnRpbWVPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBQcm94eVJ1bnRp
bWVPYmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGluc3RhbmNlKTsKICAgICAg
ICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QpOwpAQCAtNTEsOSArNTEsOSBA
QCBwdWJsaWM6CiAKICAgICBQcm94eUluc3RhbmNlKiBnZXRJbnRlcm5hbFByb3h5SW5zdGFuY2Uo
KSBjb25zdDsKIAotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8g
c19pbmZvOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z0Rl
bGVnYXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2Ny
aXB0RGVidWdEZWxlZ2F0ZS5tbQkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzYsNyArMTc2LDcgQEAgLSAoTlNBcnJheSAqKXNjb3BlQ2hhaW4KIAogCiAgICAgSlNTY29wZSog
c2NvcGUgPSBfcHJpdmF0ZS0+ZGVidWdnZXJDYWxsRnJhbWUtPnNjb3BlKCk7Ci0gICAgSlNMb2Nr
SG9sZGVyIGxvY2soc2NvcGUtPmdsb2JhbERhdGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
c2NvcGUtPnZtKCkpOwogICAgIGlmICghc2NvcGUtPm5leHQoKSkgIC8vIGdsb2JhbCBmcmFtZQog
ICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0Ol9wcml2YXRlLT5nbG9iYWxP
YmplY3RdOwogCkBAIC0xODYsNyArMTg2LDcgQEAgLSAoTlNBcnJheSAqKXNjb3BlQ2hhaW4KICAg
ICBmb3IgKFNjb3BlQ2hhaW5JdGVyYXRvciBpdCA9IHNjb3BlLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGl0LmdldCgpOwogICAgICAgICBp
ZiAob2JqZWN0LT5pc0FjdGl2YXRpb25PYmplY3QoKSkKLSAgICAgICAgICAgIG9iamVjdCA9IERl
YnVnZ2VyQWN0aXZhdGlvbjo6Y3JlYXRlKCpzY29wZS0+Z2xvYmFsRGF0YSgpLCBvYmplY3QpOwor
ICAgICAgICAgICAgb2JqZWN0ID0gRGVidWdnZXJBY3RpdmF0aW9uOjpjcmVhdGUoKnNjb3BlLT52
bSgpLCBvYmplY3QpOwogICAgICAgICBbc2NvcGVzIGFkZE9iamVjdDpbc2VsZiBfY29udmVydFZh
bHVlVG9PYmpjVmFsdWU6b2JqZWN0XV07CiAgICAgfQogCkBAIC0yMzQsMTIgKzIzNCwxMiBAQCAt
IChpZClldmFsdWF0ZVdlYlNjcmlwdDooTlNTdHJpbmcgKilzY3JpCiAgICAgLy8gV2ViU2NyaXB0
Q2FsbEZyYW1lLiBJbnN0ZWFkLCB3ZSBuZWVkIHRvIHNldCB0aGUgZHluYW1pYyBnbG9iYWwgb2Jq
ZWN0CiAgICAgLy8gYW5kIGV2YWx1YXRlIHRoZSBKUyBpbiB0aGUgZ2xvYmFsIG9iamVjdCdzIGds
b2JhbCBjYWxsIGZyYW1lLgogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBfcHJp
dmF0ZS0+ZGVidWdnZXItPmdsb2JhbE9iamVjdCgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGds
b2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxP
YmplY3QtPnZtKCkpOwogCi0gICAgaWYgKHNlbGYgPT0gX3ByaXZhdGUtPmRlYnVnZ2VyLT5nbG9i
YWxDYWxsRnJhbWUoKSAmJiAhZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2Jh
bE9iamVjdCkgeworICAgIGlmIChzZWxmID09IF9wcml2YXRlLT5kZWJ1Z2dlci0+Z2xvYmFsQ2Fs
bEZyYW1lKCkgJiYgIWdsb2JhbE9iamVjdC0+dm0oKS5keW5hbWljR2xvYmFsT2JqZWN0KSB7CiAg
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBfcHJpdmF0ZS0+ZGVidWdnZXIt
Pmdsb2JhbE9iamVjdCgpOwogCi0gICAgICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9i
YWxPYmplY3RTY29wZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0KTsK
KyAgICAgICAgRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKGdsb2Jh
bE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0KTsKIAogICAgICAgICBKU0M6OkpTVmFsdWUgZXhj
ZXB0aW9uOwogICAgICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gZXZhbHVhdGVJbkdsb2JhbENh
bGxGcmFtZShzY3JpcHQsIGV4Y2VwdGlvbiwgZ2xvYmFsT2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5tbQkocmV2aXNpb24gMTQ4
NjU1KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5tbQko
d29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBzdGF0aWMgV2ViRnJhbWUgKnRvV2ViRnJh
bWUoSlNHbG9iYWxPYmplCiAKIFdlYlNjcmlwdERlYnVnZ2VyOjpXZWJTY3JpcHREZWJ1Z2dlcihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIDogbV9jYWxsaW5nRGVsZWdhdGUoZmFs
c2UpCi0gICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xv
YmFsT2JqZWN0KQorICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9i
YWxPYmplY3QpCiB7CiAgICAgYXR0YWNoKGdsb2JhbE9iamVjdCk7CiAgICAgaW5pdEdsb2JhbENh
bGxGcmFtZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwko
cmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMy0wNC0xNyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2Fy
ZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZWQgSlNHbG9iYWxEYXRhIHRvIFZNCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ3NzcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcDoKKyAgICAgICAgKER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpqYXZhU2NyaXB0T2JqZWN0c0NvdW50KToKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9RV2ViRnJhbWVBZGFwdGVyLmNwcDoKKyAgICAgICAgKFFXZWJGcmFtZUFkYXB0ZXI6OmFk
ZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdCk6CisKIDIwMTMtMDQtMTUgIFNhbSBXZWluaWcgIDxz
YW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgbW9yZSAjaW5jbHVkZXMgZnJvbSBGcmFt
ZS5oCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpjbGVhckZyYW1lCiAKIGludCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6amF2YVNj
cmlwdE9iamVjdHNDb3VudCgpCiB7Ci0gICAgcmV0dXJuIEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCktPmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQoKTsKKyAgICByZXR1cm4gSlNE
T01XaW5kb3dCYXNlOjpjb21tb25WTSgpLT5oZWFwLmdsb2JhbE9iamVjdENvdW50KCk7CiB9CiAK
IHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmdhcmJhZ2VDb2xsZWN0b3JDb2xsZWN0KCkK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYkZyYW1lQWRhcHRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViRnJh
bWVBZGFwdGVyLmNwcAkocmV2aXNpb24gMTQ4NjU1KQorKysgU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9RV2ViRnJhbWVBZGFwdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDcg
KzIzNiw3IEBAIHZvaWQgUVdlYkZyYW1lQWRhcHRlcjo6YWRkVG9KYXZhU2NyaXB0V2kKICAgICBK
U0M6OkpTT2JqZWN0KiBydW50aW1lT2JqZWN0ID0gSlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6
Z2V0UXRJbnN0YW5jZShvYmplY3QsIHJvb3QsIHZhbHVlT3duZXJzaGlwKS0+Y3JlYXRlUnVudGlt
ZU9iamVjdChleGVjKTsKIAogICAgIEpTQzo6UHV0UHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgd2lu
ZG93LT5tZXRob2RUYWJsZSgpLT5wdXQod2luZG93LCBleGVjLCBKU0M6OklkZW50aWZpZXIoJmV4
ZWMtPmdsb2JhbERhdGEoKSwgcmVpbnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgVUNoYXIqPihuYW1l
LmNvbnN0RGF0YSgpKSwgbmFtZS5sZW5ndGgoKSksIHJ1bnRpbWVPYmplY3QsIHNsb3QpOworICAg
IHdpbmRvdy0+bWV0aG9kVGFibGUoKS0+cHV0KHdpbmRvdywgZXhlYywgSlNDOjpJZGVudGlmaWVy
KCZleGVjLT52bSgpLCByZWludGVycHJldF9jYXN0X3B0cjxjb25zdCBVQ2hhcio+KG5hbWUuY29u
c3REYXRhKCkpLCBuYW1lLmxlbmd0aCgpKSwgcnVudGltZU9iamVjdCwgc2xvdCk7CiB9CiAKIFFT
dHJpbmcgUVdlYkZyYW1lQWRhcHRlcjo6dG9IdG1sKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEzLTA0LTE3ICBHZW9mZnJleSBHYXJlbiAg
PGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lZCBKU0dsb2JhbERhdGEgdG8gVk0K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDc3Nwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29y
ZVN0YXRpc3RpY3MuY3BwOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRP
YmplY3RzQ291bnQpOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRHbG9i
YWxPYmplY3RzQ291bnQpOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQ
cm90ZWN0ZWRPYmplY3RzQ291bnQpOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFT
Y3JpcHRQcm90ZWN0ZWRHbG9iYWxPYmplY3RzQ291bnQpOgorICAgICAgICAoV2ViQ29yZVN0YXRp
c3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKToKKyAgICAgICAgKiBX
ZWJKYXZhU2NyaXB0Q29sbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkphdmFTY3JpcHRDb2xsZWN0
b3I6Om9iamVjdENvdW50KToKKwogMjAxMy0wNC0xMyAgUm9nZXIgRm9uZyAgPHJvZ2VyX2ZvbmdA
YXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEJ1aWxkIGZpeCBmb3IgV2luZG93cy4K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDE0
ODY1NSkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTgsOCArOTgsOCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNv
cmVTdGF0aXN0CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7
Ci0gICAgKmNvdW50ID0gKFVJTlQpSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5o
ZWFwLm9iamVjdENvdW50KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNv
bW1vblZNKCkpOworICAgICpjb3VudCA9IChVSU5UKUpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5o
ZWFwLm9iamVjdENvdW50KCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTEwOSw4ICsxMDks
OCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiAgICAgaWYgKCFj
b3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEpTTG9ja0hvbGRlciBsb2Nr
KEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7Ci0gICAgKmNvdW50ID0gKFVJTlQp
SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmdsb2JhbE9iamVjdENvdW50
KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOworICAg
ICpjb3VudCA9IChVSU5UKUpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFwLmdsb2JhbE9iamVj
dENvdW50KCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTEyMCw4ICsxMjAsOCBAQCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiAgICAgaWYgKCFjb3VudCkKICAg
ICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7Ci0gICAgKmNvdW50ID0gKFVJTlQpSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdENvdW50KCk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOworICAgICpjb3Vu
dCA9IChVSU5UKUpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdENv
dW50KCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTEzMSwxNiArMTMxLDE2IEBAIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29yZVN0YXRpc3QKICAgICBpZiAoIWNvdW50KQogICAg
ICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKLSAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRv
dzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQo
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAg
KmNvdW50ID0gKFVJTlQpSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhlYXAucHJvdGVjdGVkR2xv
YmFsT2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIAogSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlwdFByb3RlY3RlZE9iamVjdFR5
cGVDb3VudHMoIAogICAgIC8qIFtyZXR2YWxdW291dF0gKi8gSVByb3BlcnR5QmFnMioqIHR5cGVO
YW1lc0FuZENvdW50cykKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOwotICAgIE93blB0cjxUeXBlQ291bnRTZXQ+IGpzT2JqZWN0VHlw
ZU5hbWVzKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRP
YmplY3RUeXBlQ291bnRzKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpj
b21tb25WTSgpKTsKKyAgICBPd25QdHI8VHlwZUNvdW50U2V0PiBqc09iamVjdFR5cGVOYW1lcyhK
U0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5wcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkp
OwogICAgIHR5cGVkZWYgVHlwZUNvdW50U2V0Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsKICAg
ICBJdGVyYXRvciBlbmQgPSBqc09iamVjdFR5cGVOYW1lcy0+ZW5kKCk7CiAgICAgSGFzaE1hcDxT
dHJpbmcsIGludD4gdHlwZUNvdW50TWFwOwpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViSmF2
YVNjcmlwdENvbGxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2Vi
SmF2YVNjcmlwdENvbGxlY3Rvci5jcHAJKHJldmlzaW9uIDE0ODY1NSkKKysrIFNvdXJjZS9XZWJL
aXQvd2luL1dlYkphdmFTY3JpcHRDb2xsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw3IEBACiAjaW5jbHVkZSAiV2ViSmF2YVNjcmlwdENvbGxlY3Rvci5oIgogCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSGVhcC5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTR2xv
YmFsRGF0YS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1ZNLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9HQ0NvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0pTRE9NV2luZG93Lmg+CiAj
aW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KQEAgLTExMSw3ICsxMTEsNyBAQCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFdlYkphdmFTY3JpcHRDCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7
CiAgICAgfQogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKLSAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9i
YWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RP
TVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAgKmNvdW50ID0gKFVJTlQpSlNET01XaW5kb3c6OmNv
bW1vblZNKCktPmhlYXAub2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198746</attachid>
            <date>2013-04-18 10:52:24 -0700</date>
            <delta_ts>2013-04-18 13:42:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-114777-20130418105155.patch</filename>
            <type>text/plain</type>
            <size>1991019</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4NTQg
QEAKKzIwMTMtMDQtMTcgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZW5hbWVkIEpTR2xvYmFsRGF0YSB0byBWTQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0Nzc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBUEkvQVBJQ2FzdC5oOgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKHRvSlMpOgorICAgICAgICAodG9SZWYpOgorICAgICAgICAqIEFQSS9BUElTaGlt
cy5oOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW1XaXRob3V0TG9jazo6QVBJRW50cnlTaGlt
V2l0aG91dExvY2spOgorICAgICAgICAoQVBJRW50cnlTaGltV2l0aG91dExvY2spOgorICAgICAg
ICAoSlNDOjpBUElFbnRyeVNoaW06OkFQSUVudHJ5U2hpbSk6CisgICAgICAgIChBUElFbnRyeVNo
aW0pOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW06On5BUElFbnRyeVNoaW0pOgorICAgICAg
ICAoSlNDOjpBUElDYWxsYmFja1NoaW06OkFQSUNhbGxiYWNrU2hpbSk6CisgICAgICAgIChKU0M6
OkFQSUNhbGxiYWNrU2hpbTo6fkFQSUNhbGxiYWNrU2hpbSk6CisgICAgICAgIChBUElDYWxsYmFj
a1NoaW0pOgorICAgICAgICAqIEFQSS9KU0FQSVdyYXBwZXJPYmplY3QuaDoKKyAgICAgICAgKEpT
QVBJV3JhcHBlck9iamVjdCk6CisgICAgICAgICogQVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbToK
KyAgICAgICAgKEpTQzo6OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU0FQSVdy
YXBwZXJPYmplY3Q6OkpTQVBJV3JhcHBlck9iamVjdCk6CisgICAgICAgIChKU0M6OkpTQVBJV3Jh
cHBlck9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0FQSVdyYXBwZXJP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIEFQSS9KU0Jhc2UuY3BwOgorICAgICAg
ICAoSlNHYXJiYWdlQ29sbGVjdCk6CisgICAgICAgIChKU1JlcG9ydEV4dHJhTWVtb3J5Q29zdCk6
CisgICAgICAgIChKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmcpOgorICAg
ICAgICAqIEFQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpKU0Nh
bGxiYWNrQ29uc3RydWN0b3I6OkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6
OkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIEFQSS9K
U0NhbGxiYWNrQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja0NvbnN0cnVj
dG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrRnVuY3Rpb24u
Y3BwOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKEpTQzo6SlNDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAqIEFQ
SS9KU0NhbGxiYWNrRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQ2FsbGJhY2tGdW5jdGlvbik6Cisg
ICAgICAgIChKU0M6OkpTQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5jcHA6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIEFQSS9KU0NhbGxi
YWNrT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3REYXRhOjpzZXRQcml2
YXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0RGF0YTo6SlNQcml2
YXRlUHJvcGVydHlNYXA6OnNldFByaXZhdGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0NhbGxiYWNr
T2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDo6c2V0UHJpdmF0ZVByb3Bl
cnR5KToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oOgorICAgICAg
ICAoSlNDOjo6OkpTQ2FsbGJhY2tPYmplY3QpOgorICAgICAgICAoSlNDOjo6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKEpTQzo6OjpwdXQpOgorICAgICAgICAoSlNDOjo6OnN0YXRpY0Z1bmN0
aW9uR2V0dGVyKToKKyAgICAgICAgKiBBUEkvSlNDbGFzc1JlZi5jcHA6CisgICAgICAgIChPcGFx
dWVKU0NsYXNzQ29udGV4dERhdGE6Ok9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSk6CisgICAgICAg
IChPcGFxdWVKU0NsYXNzOjpjb250ZXh0RGF0YSk6CisgICAgICAgIChPcGFxdWVKU0NsYXNzOjpw
cm90b3R5cGUpOgorICAgICAgICAqIEFQSS9KU0NsYXNzUmVmLmg6CisgICAgICAgIChPcGFxdWVK
U0NsYXNzQ29udGV4dERhdGEpOgorICAgICAgICAqIEFQSS9KU0NvbnRleHQubW06CisgICAgICAg
ICgtW0pTQ29udGV4dCBzZXRFeGNlcHRpb246XSk6CisgICAgICAgICgtW0pTQ29udGV4dCBpbml0
V2l0aEdsb2JhbENvbnRleHRSZWY6XSk6CisgICAgICAgICgrW0pTQ29udGV4dCBjb250ZXh0V2l0
aEdsb2JhbENvbnRleHRSZWY6XSk6CisgICAgICAgICogQVBJL0pTQ29udGV4dFJlZi5jcHA6Cisg
ICAgICAgIChKU0NvbnRleHRHcm91cENyZWF0ZSk6CisgICAgICAgIChKU0NvbnRleHRHcm91cFJl
bGVhc2UpOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0Q3JlYXRlKToKKyAgICAgICAgKEpTR2xv
YmFsQ29udGV4dENyZWF0ZUluR3JvdXApOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0UmV0YWlu
KToKKyAgICAgICAgKEpTR2xvYmFsQ29udGV4dFJlbGVhc2UpOgorICAgICAgICAoSlNDb250ZXh0
R2V0R3JvdXApOgorICAgICAgICAoSlNDb250ZXh0Q3JlYXRlQmFja3RyYWNlKToKKyAgICAgICAg
KiBBUEkvSlNPYmplY3RSZWYuY3BwOgorICAgICAgICAoSlNPYmplY3RNYWtlKToKKyAgICAgICAg
KEpTT2JqZWN0TWFrZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTT2JqZWN0TWFrZUZ1bmN0aW9u
KToKKyAgICAgICAgKEpTT2JqZWN0U2V0UHJvdG90eXBlKToKKyAgICAgICAgKEpTT2JqZWN0SGFz
UHJvcGVydHkpOgorICAgICAgICAoSlNPYmplY3RHZXRQcm9wZXJ0eSk6CisgICAgICAgIChKU09i
amVjdFNldFByb3BlcnR5KToKKyAgICAgICAgKEpTT2JqZWN0RGVsZXRlUHJvcGVydHkpOgorICAg
ICAgICAoSlNPYmplY3RHZXRQcml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlNPYmplY3RTZXRQ
cml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlNPYmplY3REZWxldGVQcml2YXRlUHJvcGVydHkp
OgorICAgICAgICAoT3BhcXVlSlNQcm9wZXJ0eU5hbWVBcnJheTo6T3BhcXVlSlNQcm9wZXJ0eU5h
bWVBcnJheSk6CisgICAgICAgIChPcGFxdWVKU1Byb3BlcnR5TmFtZUFycmF5KToKKyAgICAgICAg
KEpTT2JqZWN0Q29weVByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNQcm9wZXJ0eU5hbWVBcnJh
eVJlbGVhc2UpOgorICAgICAgICAoSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvckFkZE5hbWUpOgor
ICAgICAgICAqIEFQSS9KU1NjcmlwdFJlZi5jcHA6CisgICAgICAgIChPcGFxdWVKU1NjcmlwdDo6
Y3JlYXRlKToKKyAgICAgICAgKE9wYXF1ZUpTU2NyaXB0Ojp2bSk6CisgICAgICAgIChPcGFxdWVK
U1NjcmlwdDo6T3BhcXVlSlNTY3JpcHQpOgorICAgICAgICAoT3BhcXVlSlNTY3JpcHQpOgorICAg
ICAgICAocGFyc2VTY3JpcHQpOgorICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tOgor
ICAgICAgICAoc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgpOgorICAgICAgICAqIEFQSS9KU1ZpcnR1
YWxNYWNoaW5lSW50ZXJuYWwuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogQVBJL0pTV3Jh
cHBlck1hcC5tbToKKyAgICAgICAgKG1ha2VXcmFwcGVyKToKKyAgICAgICAgKiBBUEkvT2JqQ0Nh
bGxiYWNrRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb246OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tOgor
ICAgICAgICAoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBB
UEkvT3BhcXVlSlNTdHJpbmcuY3BwOgorICAgICAgICAoT3BhcXVlSlNTdHJpbmc6OmlkZW50aWZp
ZXIpOgorICAgICAgICAqIEFQSS9PcGFxdWVKU1N0cmluZy5oOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKE9wYXF1ZUpTU3RyaW5nKToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIEpTQ1R5cGVkQXJyYXlTdHVicy5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS5vcmRlcjoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZUV4cG9ydHMuZGVmOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ou
ZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
RXhwb3J0R2VuZXJhdG9yL0phdmFTY3JpcHRDb3JlRXhwb3J0cy5kZWYuaW46CisgICAgICAgICog
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBLZXl3
b3JkTG9va3VwR2VuZXJhdG9yLnB5OgorICAgICAgICAoVHJpZS5wcmludFN1YlRyZWVBc0MpOgor
ICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5j
cHA6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6ZXhlY3V0YWJsZUNvcHkpOgorICAgICAg
ICAqIGFzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEFSTUFzc2VtYmxlcik6Cisg
ICAgICAgICogYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBc3Nl
bWJsZXJCdWZmZXI6OmV4ZWN1dGFibGVDb3B5KToKKyAgICAgICAgKiBhc3NlbWJsZXIvQXNzZW1i
bGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZm
ZXJXaXRoQ29uc3RhbnRQb29sOjpleGVjdXRhYmxlQ29weSk6CisgICAgICAgICogYXNzZW1ibGVy
L0xpbmtCdWZmZXIuY3BwOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpsaW5rQ29kZSk6Cisg
ICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChKU0M6OkxpbmtCdWZmZXI6OkxpbmtCdWZmZXIpOgorICAgICAgICAoTGlua0J1ZmZlcik6Cisg
ICAgICAgICogYXNzZW1ibGVyL01JUFNBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6TUlQU0Fz
c2VtYmxlcjo6ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAqIGFzc2VtYmxlci9TSDRBc3NlbWJs
ZXIuaDoKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpleGVjdXRhYmxlQ29weSk6CisgICAg
ICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJs
ZXI6OmV4ZWN1dGFibGVDb3B5KToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpYODZJbnN0
cnVjdGlvbkZvcm1hdHRlcjo6ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nh
bGxMaW5rSW5mby5jcHA6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dW5saW5rKToKKyAg
ICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uaDoKKyAgICAgICAgKENhbGxMaW5rSW5mbyk6
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6ZHVtcFN0
cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRTdHJ1Y3R1cmVzKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6On5Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0U3RydWN0dXJl
cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNyZWF0ZUFjdGl2YXRpb24pOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnVubGlua0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxp
bmtJbmNvbWluZ0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5kQ2xvc3VyZUNh
bGxGb3JSZXR1cm5QQyk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OmpldHRpc29u
SW1wbCk6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6OmpldHRpc29uSW1wbCk6CisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpqZXR0aXNvbkltcGwpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnByZWRpY3RlZE1hY2hpbmVDb2RlU2l6ZSk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6dXNlc09wY29kZSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6YXBwZW5kV2Vha1JlZmVyZW5jZSk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6YXBwZW5kV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnNldEpJVENvZGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNl
dEdsb2JhbERhdGEpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZtKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjp2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNl
dENvbnN0YW50UmVnaXN0ZXJzKToKKyAgICAgICAgKENvZGVCbG9jayk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb246OldlYWtSZWZlcmVuY2VUcmFuc2l0
aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9FdmFsQ29kZUNhY2hlLmg6CisgICAgICAgIChKU0M6
OkV2YWxDb2RlQ2FjaGU6OmdldFNsb3cpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0
dXMuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KToK
KyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvckNoYWluKToKKyAgICAgICAg
KEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvR2V0
QnlJZFN0YXR1cy5oOgorICAgICAgICAoR2V0QnlJZFN0YXR1cyk6CisgICAgICAgICogYnl0ZWNv
ZGUvSW5zdHJ1Y3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SW5zdHJ1Y3Rpb246Okluc3RydWN0aW9u
KToKKyAgICAgICAgKiBieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oOgorICAgICAg
ICAoSlNDOjpPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChK
U0M6Ok9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpwb3NzaWJsZURlZmF1bHRQcm9wZXJ0eUNvdW50
KToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaDoK
KyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0OjpQb2x5bW9ycGhp
Y1N0dWJJbmZvOjpzZXQpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3Q6OlBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCk6CisgICAgICAgICogYnl0ZWNv
ZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNz
Ojp0cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6cmVwbGFjZSk6Cisg
ICAgICAgICogYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmNwcDoKKyAgICAgICAgKEpTQzo6
Y29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0cyk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5jcHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQp
OgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBi
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoUHV0QnlJ
ZFN0YXR1cyk6CisgICAgICAgICogYnl0ZWNvZGUvUmVzb2x2ZUdsb2JhbFN0YXR1cy5jcHA6Cisg
ICAgICAgIChKU0M6OmNvbXB1dGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJ5dGVjb2RlL1Nh
bXBsaW5nVG9vbC5jcHA6CisgICAgICAgIChKU0M6OlNhbXBsaW5nVG9vbDo6bm90aWZ5T2ZTY29w
ZSk6CisgICAgICAgICogYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmg6CisgICAgICAgIChKU0M6OlNj
cmlwdFNhbXBsZVJlY29yZDo6U2NyaXB0U2FtcGxlUmVjb3JkKToKKyAgICAgICAgKFNhbXBsaW5n
VG9vbCk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRHZXRCeUlkU2VsZik6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0R2V0QnlJZFByb3RvKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlU3R1YkluZm86OmluaXRHZXRCeUlkQ2hhaW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU3R1YkluZm86OmluaXRQdXRCeUlkUmVwbGFjZSk6CisgICAgICAgICogYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUZ1bmN0aW9uQ29kZUJs
b2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGU6OmxpbmspOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
ZnJvbUdsb2JhbENvZGUpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6Y29kZUJsb2NrRm9yKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVubGlu
a2VkQ29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjphZGRSZWdFeHApOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9jazo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRk
RnVuY3Rpb25EZWNsKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZEZ1bmN0
aW9uRXhwcik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp2bSk6CisgICAgICAg
IChVbmxpbmtlZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OlVubGlua2VkR2xvYmFsQ29kZUJsb2NrOjpV
bmxpbmtlZEdsb2JhbENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlVubGlua2VkUHJvZ3JhbUNv
ZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
OjphZGRGdW5jdGlvbkRlY2xhcmF0aW9uKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrOjpVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZFByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkRXZhbENvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRFdmFs
Q29kZUJsb2NrOjpVbmxpbmtlZEV2YWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZEV2YWxDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2s6OlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjphZGRDb25zdGFudCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0TG9hZCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGlyZWN0UHV0
QnlJZCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRTdHJpbmdDb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpleHBlY3RlZEZ1bmN0aW9uRm9y
SWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VGhyb3dS
ZWZlcmVuY2VFcnJvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVh
ZE9ubHlFeGNlcHRpb25JZk5lZWRlZCk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmg6CisgICAgICAgIChCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjp2bSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
Ojpwcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6Om1ha2VG
dW5jdGlvbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAg
ICAgIChKU0M6OlJlZ0V4cE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFycmF5
Tm9kZTo6dG9Bcmd1bWVudExpc3QpOgorICAgICAgICAoSlNDOjpBcHBseUZ1bmN0aW9uQ2FsbERv
dE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZOb2RlOjplbWl0
Qnl0ZWNvZGUpOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6RGVidWdnZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6ZXZh
bHVhdGVJbkdsb2JhbENhbGxGcmFtZSk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuaDoK
KyAgICAgICAgKEpTQyk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJBY3RpdmF0aW9uOjpEZWJ1Z2dlckFjdGl2YXRpb24p
OgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckFjdGl2YXRpb246OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6RGVi
dWdnZXJBY3RpdmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckFjdGl2YXRp
b246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChEZWJ1Z2dlckFjdGl2YXRpb24pOgorICAg
ICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6RGVi
dWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHMp
OgorICAgICAgICAqIGRmZy9ERkdBc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpBc3NlbWJseUhlbHBlcnM6OkFzc2VtYmx5SGVscGVycyk6CisgICAgICAgIChKU0M6OkRGRzo6
QXNzZW1ibHlIZWxwZXJzOjp2bSk6CisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJz
OjpkZWJ1Z0NhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEV4
Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEFzc2VtYmx5SGVscGVycyk6CisgICAgICAgICogZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoQnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24p
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3Rh
Y2tFbnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJs
b2NrKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuaDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgICogZGZnL0RGR0NDYWxsSGVscGVycy5oOgorICAgICAgICAoSlNDOjpERkc6OkND
YWxsSGVscGVyczo6Q0NhbGxIZWxwZXJzKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYW5IYW5kbGVPcGNvZGVzKToKKyAgICAgICAgKiBk
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0
YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKiBkZmcvREZHRGlzYXNz
ZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEaXNhc3NlbWJsZXI6OnJlcG9ydFRvUHJv
ZmlsZXIpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuaDoKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVw
UGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6aXNTdHJp
bmdQcm90b3R5cGVNZXRob2RTYW5lKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpj
YW5PcHRpbWl6ZVN0cmluZ09iamVjdEFjY2Vzcyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6R3JhcGgpOgorICAgICAgICAqIGRmZy9ERkdH
cmFwaC5oOgorICAgICAgICAoR3JhcGgpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OkpJVENvbXBpbGVyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKToKKyAgICAgICAgKEpTQzo6
REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6
OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rp
b24pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVP
U1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAg
ICogZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpP
U1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENv
bXBpbGVyNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRDb21waWxlcjo6Y29tcGls
ZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpwdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6b3BlcmF0aW9uUHV0QnlWYWxJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRl
KToKKyAgICAgICAgKiBkZmcvREZHUGhhc2UuaDoKKyAgICAgICAgKEpTQzo6REZHOjpQaGFzZTo6
dm0pOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpn
ZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDYWNo
ZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRExpc3QpOgorICAg
ICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6
OkRGRzo6ZW1pdFB1dFJlcGxhY2VTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjplbWl0UHV0VHJh
bnNpdGlvblN0dWIpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUNhY2hlUHV0QnlJRCk6CisgICAg
ICAgIChKU0M6OkRGRzo6dHJ5QnVpbGRQdXRCeUlkTGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6
bGlua1Nsb3dGb3IpOgorICAgICAgICAoSlNDOjpERkc6OmRmZ0xpbmtGb3IpOgorICAgICAgICAo
SlNDOjpERkc6OmRmZ0xpbmtTbG93Rm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpkZmdMaW5rQ2xv
c3VyZUNhbGwpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnR5cGVkQXJyYXlEZXNjcmlwdG9yKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxp
dHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxP
blN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVGcm9t
Q2hhckNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTWFr
ZVJvcGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaW5n
RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9T
dHJpbmdPbkNlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGVPYmplY3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVP
YmplY3RPck90aGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRl
U3RyaW5nT3JTdHJpbmdPYmplY3QpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpwcmVwYXJlRm9yRXh0ZXJuYWxD
YWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlQmFz
aWNTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9j
YXRlSlNPYmplY3QpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2Jq
ZWN0T3JPdGhlckVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJy
YW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0
VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdUaHVua3Mu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpERkc6OnRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6c2xvd1BhdGhGb3IpOgorICAgICAgICAoSlNDOjpE
Rkc6OmxpbmtGb3JUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6bGlua0NhbGxU
aHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6bGlua0NvbnN0cnVjdFRodW5rR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkRGRzo6dmlydHVhbEZvclRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6REZHOjp2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
REZHOjp2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGRmZy9ERkdU
aHVua3MuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGhlYXAv
QmxvY2tBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaGVhcC9Db3BpZWRT
cGFjZS5jcHA6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZVNsb3dDYXNl
KToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OnRyeVJlYWxsb2NhdGUpOgorICAgICAgICAq
IGhlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjp0
cnlBbGxvY2F0ZSk6CisgICAgICAgICogaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwOgorICAg
ICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERhdGE6OkdDVGhyZWFkU2hhcmVkRGF0YSk6CisgICAg
ICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6cmVzZXQpOgorICAgICAgICAqIGhlYXAvR0NU
aHJlYWRTaGFyZWREYXRhLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoR0NUaHJlYWRTaGFy
ZWREYXRhKToKKyAgICAgICAgKiBoZWFwL0hhbmRsZVNldC5jcHA6CisgICAgICAgIChKU0M6Okhh
bmRsZVNldDo6SGFuZGxlU2V0KToKKyAgICAgICAgKEpTQzo6SGFuZGxlU2V0Ojp+SGFuZGxlU2V0
KToKKyAgICAgICAgKEpTQzo6SGFuZGxlU2V0Ojpncm93KToKKyAgICAgICAgKiBoZWFwL0hhbmRs
ZVNldC5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEhhbmRsZVNldCk6CisgICAgICAgIChK
U0M6OkhhbmRsZVNldDo6dm0pOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChK
U0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bGFz
dENoYW5jZVRvRmluYWxpemUpOgorICAgICAgICAoSlNDOjpIZWFwOjpwcm90ZWN0KToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6dW5wcm90ZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6c3RhY2spOgor
ICAgICAgICAoSlNDOjpIZWFwOjpnZXRDb25zZXJ2YXRpdmVSZWdpc3RlclJvb3RzKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVsZXRlQWxs
Q29tcGlsZWRDb2RlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdCk6CisgICAgICAgIChK
U0M6OkhlYXA6OmlzVmFsaWRBbGxvY2F0aW9uKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dm0pOgor
ICAgICAgICAqIGhlYXAvSGVhcFRpbWVyLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcFRpbWVyOjpI
ZWFwVGltZXIpOgorICAgICAgICAoSlNDOjpIZWFwVGltZXI6OnRpbWVyRGlkRmlyZSk6CisgICAg
ICAgIChKU0M6OkhlYXBUaW1lcjo6dGltZXJFdmVudCk6CisgICAgICAgICogaGVhcC9IZWFwVGlt
ZXIuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChIZWFwVGltZXIpOgorICAgICAgICAqIGhl
YXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2Vl
cGVyOjpJbmNyZW1lbnRhbFN3ZWVwZXIpOgorICAgICAgICAoSlNDOjpJbmNyZW1lbnRhbFN3ZWVw
ZXI6OnN3ZWVwTmV4dEJsb2NrKToKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjp3
aWxsRmluaXNoU3dlZXBpbmcpOgorICAgICAgICAoSlNDOjpJbmNyZW1lbnRhbFN3ZWVwZXI6OmNy
ZWF0ZSk6CisgICAgICAgICogaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaDoKKyAgICAgICAgKElu
Y3JlbWVudGFsU3dlZXBlcik6CisgICAgICAgICogaGVhcC9Mb2NhbC5oOgorICAgICAgICAoTG9j
YWwpOgorICAgICAgICAoSlNDOjo6OkxvY2FsKToKKyAgICAgICAgKEpTQzo6TG9jYWxTdGFjazo6
TG9jYWxTdGFjayk6CisgICAgICAgIChKU0M6OkxvY2FsU3RhY2s6OnB1c2gpOgorICAgICAgICAo
TG9jYWxTdGFjayk6CisgICAgICAgICogaGVhcC9Mb2NhbFNjb3BlLmg6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoTG9jYWxTY29wZSk6CisgICAgICAgIChKU0M6OkxvY2FsU2NvcGU6OkxvY2Fs
U2NvcGUpOgorICAgICAgICAqIGhlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcDoKKyAgICAgICAg
KEpTQzo6TWFjaGluZVRocmVhZHM6OmFkZEN1cnJlbnRUaHJlYWQpOgorICAgICAgICAqIGhlYXAv
TWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjphbGxv
Y2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmNwcDoKKyAgICAgICAg
KEpTQzo6TWFya2VkQmxvY2s6Ok1hcmtlZEJsb2NrKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJs
b2NrLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjp2bSk6CisgICAgICAgICogaGVhcC9T
bG90VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcik6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpzZXR1cCk6CisgICAgICAgICogaGVhcC9TdHJv
bmcuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChTdHJvbmcpOgorICAgICAgICAoSlNDOjpT
dHJvbmc6Om9wZXJhdG9yPSk6CisgICAgICAgICogaGVhcC9TdHJvbmdJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6Ojo6U3Ryb25nKToKKyAgICAgICAgKEpTQzo6OjpzZXQpOgorICAgICAgICAqIGhl
YXAvU3VwZXJSZWdpb24uaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaGVhcC9XZWFrU2V0
LmNwcDoKKyAgICAgICAgKiBoZWFwL1dlYWtTZXQuaDoKKyAgICAgICAgKFdlYWtTZXQpOgorICAg
ICAgICAoSlNDOjpXZWFrU2V0OjpXZWFrU2V0KToKKyAgICAgICAgKEpTQzo6V2Vha1NldDo6dm0p
OgorICAgICAgICAqIGludGVycHJldGVyL0Fic3RyYWN0UEMuY3BwOgorICAgICAgICAoSlNDOjpB
YnN0cmFjdFBDOjpBYnN0cmFjdFBDKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9BYnN0cmFjdFBD
Lmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoQWJzdHJhY3RQQyk6CisgICAgICAgICogaW50
ZXJwcmV0ZXIvQ2FjaGVkQ2FsbC5oOgorICAgICAgICAoSlNDOjpDYWNoZWRDYWxsOjpDYWNoZWRD
YWxsKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEV4ZWNT
dGF0ZSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6Y2xlYXJFeGNlcHRpb24pOgorICAgICAg
ICAoSlNDOjpFeGVjU3RhdGU6OmNsZWFyU3VwcGxlbWVudGFyeUV4Y2VwdGlvbkluZm8pOgorICAg
ICAgICAoSlNDOjpFeGVjU3RhdGU6OmV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0
ZTo6aGFkRXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpwcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjplbXB0eUxpc3QpOgorICAgICAgICAoSlNDOjpF
eGVjU3RhdGU6OmludGVycHJldGVyKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpoZWFwKToK
KyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjphcnJheUNvbnN0cnVjdG9yVGFibGUpOgorICAgICAg
ICAoSlNDOjpFeGVjU3RhdGU6OmFycmF5UHJvdG90eXBlVGFibGUpOgorICAgICAgICAoSlNDOjpF
eGVjU3RhdGU6OmJvb2xlYW5Qcm90b3R5cGVUYWJsZSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0
ZTo6ZGF0ZVRhYmxlKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpkYXRlQ29uc3RydWN0b3JU
YWJsZSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6ZXJyb3JQcm90b3R5cGVUYWJsZSk6Cisg
ICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6Z2xvYmFsT2JqZWN0VGFibGUpOgorICAgICAgICAoSlND
OjpFeGVjU3RhdGU6Ompzb25UYWJsZSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6bWF0aFRh
YmxlKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpudW1iZXJDb25zdHJ1Y3RvclRhYmxlKToK
KyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpudW1iZXJQcm90b3R5cGVUYWJsZSk6CisgICAgICAg
IChKU0M6OkV4ZWNTdGF0ZTo6b2JqZWN0Q29uc3RydWN0b3JUYWJsZSk6CisgICAgICAgIChKU0M6
OkV4ZWNTdGF0ZTo6cHJpdmF0ZU5hbWVQcm90b3R5cGVUYWJsZSk6CisgICAgICAgIChKU0M6OkV4
ZWNTdGF0ZTo6cmVnRXhwVGFibGUpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnJlZ0V4cENv
bnN0cnVjdG9yVGFibGUpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnJlZ0V4cFByb3RvdHlw
ZVRhYmxlKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpzdHJpbmdDb25zdHJ1Y3RvclRhYmxl
KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjphYnN0cmFjdFJldHVyblBDKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWVDbG9zdXJlLmg6CisgICAgICAgIChDYWxsRnJhbWVDbG9z
dXJlKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChK
U0MpOgorICAgICAgICAoSlNDOjpldmFsKToKKyAgICAgICAgKEpTQzo6bG9hZFZhcmFyZ3MpOgor
ICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIpOgorICAgICAgICAoSlNDOjpJ
bnRlcnByZXRlcjo6ZHVtcFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjp1
bndpbmRDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjphcHBlbmRTb3VyY2VUb0Vycm9yKToKKyAg
ICAgICAgKEpTQzo6Z2V0Q2FsbGVySW5mbyk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpn
ZXRTdGFja1RyYWNlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmFkZFN0YWNrVHJhY2VJ
Zk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjp0aHJvd0V4Y2VwdGlvbik6
CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6SW50
ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1
dGVDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cHJlcGFyZUZvclJlcGVh
dENhbGwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cmV0cmlldmVBcmd1bWVudHNGcm9t
Vk1Db2RlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJldHJpZXZlQ2FsbGVyRnJvbVZN
Q29kZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEpT
Qyk6CisgICAgICAgIChKU0M6OlRvcENhbGxGcmFtZVNldHRlcjo6VG9wQ2FsbEZyYW1lU2V0dGVy
KToKKyAgICAgICAgKEpTQzo6VG9wQ2FsbEZyYW1lU2V0dGVyOjp+VG9wQ2FsbEZyYW1lU2V0dGVy
KToKKyAgICAgICAgKFRvcENhbGxGcmFtZVNldHRlcik6CisgICAgICAgIChKU0M6Ok5hdGl2ZUNh
bGxGcmFtZVRyYWNlcjo6TmF0aXZlQ2FsbEZyYW1lVHJhY2VyKToKKyAgICAgICAgKEludGVycHJl
dGVyKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9KU1N0YWNrLmNwcDoKKyAgICAgICAgKEpTQzo6
SlNTdGFjazo6SlNTdGFjayk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSlNTdGFjay5oOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBqaXQvQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHA6Cisg
ICAgICAgIChKU0M6OkNsb3N1cmVDYWxsU3R1YlJvdXRpbmU6OkNsb3N1cmVDYWxsU3R1YlJvdXRp
bmUpOgorICAgICAgICAqIGppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmg6CisgICAgICAgIChD
bG9zdXJlQ2FsbFN0dWJSb3V0aW5lKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OkV4ZWN1dGFibGVBbGxv
Y2F0b3IpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZSk6Cisg
ICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChFeGVjdXRhYmxlQWxsb2NhdG9yKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9j
YXRvckZpeGVkVk1Qb29sLmNwcDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6
RXhlY3V0YWJsZUFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6
OmFsbG9jYXRlKToKKyAgICAgICAgKiBqaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcDoKKyAg
ICAgICAgKEpTQzo6R0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmUp
OgorICAgICAgICAoSlNDOjpNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aE9uZU9iamVj
dDo6TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3QpOgorICAgICAgICAo
SlNDOjpjcmVhdGVKSVRTdHViUm91dGluZSk6CisgICAgICAgICogaml0L0dDQXdhcmVKSVRTdHVi
Um91dGluZS5oOgorICAgICAgICAoR0NBd2FyZUpJVFN0dWJSb3V0aW5lKToKKyAgICAgICAgKE1h
cmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoT25lT2JqZWN0KToKKyAgICAgICAgKEpTQyk6
CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6SklUKToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6bGlua0Zv
cik6CisgICAgICAgIChKU0M6OkpJVDo6bGlua1Nsb3dDYWxsKToKKyAgICAgICAgKiBqaXQvSklU
Lmg6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZUNsb3N1cmVDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZFByb3Rv
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZFNlbGZMaXN0KToKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6
Y29tcGlsZUdldEJ5SWRDaGFpbkxpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVHZXRC
eUlkQ2hhaW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6
CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDVElOYXRpdmVD
YWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCk6Cisg
ICAgICAgIChKSVQpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxs
RXZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2Up
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlQ2xvc3VyZUNhbGwpOgorICAgICAg
ICAqIGppdC9KSVRDYWxsMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVMb2Fk
VmFyYXJncyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2FsbCk6CisgICAgICAgICogaml0L0pJVENvZGUu
aDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpJVENvZGU6OmV4ZWN1dGUpOgorICAg
ICAgICAqIGppdC9KSVREcml2ZXIuaDoKKyAgICAgICAgKEpTQzo6aml0Q29tcGlsZUlmQXBwcm9w
cmlhdGUpOgorICAgICAgICAoSlNDOjpqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKToK
KyAgICAgICAgKiBqaXQvSklURXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyaWNU
aHJvdyk6CisgICAgICAgIChKU0M6OmppdFRocm93KToKKyAgICAgICAgKiBqaXQvSklURXhjZXB0
aW9ucy5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKToKKyAgICAgICAgKEpTQzo6
SklUOjp1cGRhdGVUb3BDYWxsRnJhbWUpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90b19wcmltaXRpdmUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY29udmVydF90aGlzKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9jb252ZXJ0X3RoaXMpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2Fs
bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25lcSk6CisgICAgICAg
IChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfY2F0Y2gpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY29udmVydF90aGlzKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jb252ZXJ0X3RoaXMpOgorICAgICAgICAqIGpp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6c3RyaW5nR2V0QnlW
YWxTdHViR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlf
dmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCk6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8pOgorICAgICAgICAoSlNDOjpKSVQ6
OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlJZENoYWluTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVHZXRCeUlkQ2hhaW4pOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlW
YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwpOgorICAgICAg
ICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpz
dHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVHZXRCeUlkSG90UGF0
aCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6
CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6CisgICAgICAg
IChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoK
KyAgICAgICAgKEpTQzo6Y3RpVHJhbXBvbGluZSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpwZXJmb3JtUGxhdGZvcm1TcGVjaWZpY0pJVEFzc2VydGlvbnMpOgorICAgICAgICAoSlND
Ojp0cnlDYWNoZVB1dEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgorICAg
ICAgICAoSlNDOjpyZXR1cm5Ub1Rocm93VHJhbXBvbGluZSk6CisgICAgICAgIChKU0M6OnRocm93
RXhjZXB0aW9uRnJvbU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9O
KToKKyAgICAgICAgKEpTQzo6Z2V0UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U2xvdCk6
CisgICAgICAgIChKU0M6OmppdENvbXBpbGVGb3IpOgorICAgICAgICAoSlNDOjpsYXp5TGlua0Zv
cik6CisgICAgICAgIChKU0M6OnB1dEJ5VmFsKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuaDoK
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChKSVRTdGFja0ZyYW1lKToKKyAgICAgICAgKiBqaXQv
SklUVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlOYXRpdmVDYWxsKToK
KyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlOYXRpdmVDb25zdHJ1Y3QpOgorICAgICAgICAo
SlNDOjpKSVRUaHVua3M6OmN0aVN0dWIpOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6Omhvc3RG
dW5jdGlvblN0dWIpOgorICAgICAgICAqIGppdC9KSVRUaHVua3MuaDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgIChKSVRUaHVua3MpOgorICAgICAgICAqIGppdC9KSVRXcml0ZUJhcnJpZXIuaDoK
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpJVFdyaXRlQmFycmllckJhc2U6OnNldCk6
CisgICAgICAgIChKU0M6OkpJVFdyaXRlQmFycmllcjo6c2V0KToKKyAgICAgICAgKiBqaXQvU3Bl
Y2lhbGl6ZWRUaHVua0pJVC5oOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjps
b2FkSlNTdHJpbmdBcmd1bWVudCk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6
OmZpbmFsaXplKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpT
Qyk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6Omdl
bmVyYXRlU2xvd0Nhc2VGb3IpOgorICAgICAgICAoSlNDOjpsaW5rRm9yR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6bGlua0NhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ29uc3Ry
dWN0R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bGlua0Nsb3N1cmVDYWxsR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6dmlydHVhbEZvckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1
YWxDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6dmlydHVhbENvbnN0cnVjdEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OnN0cmluZ0xlbmd0aFRyYW1wb2xpbmVHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpuYXRpdmVGb3JHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpuYXRpdmVDYWxs
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6c3RyaW5nQ2hhckxvYWQpOgorICAgICAgICAoSlNDOjpjaGFyVG9TdHJpbmcp
OgorICAgICAgICAoSlNDOjpjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpjaGFyQXRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmZyb21DaGFyQ29kZVRodW5r
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6c3FydFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6Zmxvb3JUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmNlaWxUaHVua0dlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OnJvdW5kVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpleHBUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmxvZ1RodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6YWJzVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpwb3dUaHVu
a0dlbmVyYXRvcik6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5oOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0KToKKyAgICAg
ICAgKEdsb2JhbE9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoR2xvYmFsT2JqZWN0OjphZGRGdW5jdGlvbik6CisgICAgICAgIChHbG9iYWxPYmplY3Q6
OmFkZENvbnN0cnVjdGFibGVGdW5jdGlvbik6CisgICAgICAgIChmdW5jdGlvbkR1bXBDYWxsRnJh
bWUpOgorICAgICAgICAoZnVuY3Rpb25KU0NTdGFjayk6CisgICAgICAgIChmdW5jdGlvblJlbGVh
c2VFeGVjdXRhYmxlTWVtb3J5KToKKyAgICAgICAgKGZ1bmN0aW9uUnVuKToKKyAgICAgICAgKG1h
aW4pOgorICAgICAgICAocnVuV2l0aFNjcmlwdHMpOgorICAgICAgICAoanNjbWFpbik6CisgICAg
ICAgICogbGxpbnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkRhdGE6OnBl
cmZvcm1Bc3NlcnRpb25zKToKKyAgICAgICAgKiBsbGludC9MTEludERhdGEuaDoKKyAgICAgICAg
KEpTQyk6CisgICAgICAgIChEYXRhKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OkRhdGE6OnBlcmZv
cm1Bc3NlcnRpb25zKToKKyAgICAgICAgKiBsbGludC9MTEludEVudHJ5cG9pbnRzLmNwcDoKKyAg
ICAgICAgKEpTQzo6TExJbnQ6OmdldEZ1bmN0aW9uRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6
OkxMSW50OjpnZXRFdmFsRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRQcm9n
cmFtRW50cnlwb2ludCk6CisgICAgICAgICogbGxpbnQvTExJbnRFbnRyeXBvaW50cy5oOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKExMSW50KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldEVu
dHJ5cG9pbnQpOgorICAgICAgICAqIGxsaW50L0xMSW50RXhjZXB0aW9ucy5jcHA6CisgICAgICAg
IChKU0M6OkxMSW50OjppbnRlcnByZXRlclRocm93SW5DYWxsZXIpOgorICAgICAgICAoSlNDOjpM
TEludDo6cmV0dXJuVG9UaHJvdyk6CisgICAgICAgIChKU0M6OkxMSW50OjpjYWxsVG9UaHJvdyk6
CisgICAgICAgICogbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcDoKKyAgICAgICAgKiBs
bGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChMTEludCk6CisgICAgICAgIChKU0M6
OkxMSW50OjpsbGludF90cmFjZV9vcGVyYW5kKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmxsaW50
X3RyYWNlX3ZhbHVlKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNM
KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNob3VsZEpJVCk6CisgICAgICAgIChKU0M6OkxMSW50
OjpoYW5kbGVIb3N0Q2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpzZXRVcENhbGwpOgorICAg
ICAgICAqIGxsaW50L0xMSW50VGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdlbmVy
YXRlVGh1bmtXaXRoSnVtcFRvKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmZ1bmN0aW9uRm9yQ2Fs
bEVudHJ5VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpMTEludDo6ZnVuY3Rpb25Gb3JD
b25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmZ1bmN0
aW9uRm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkxMSW50
OjpmdW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OkxMSW50OjpldmFsRW50cnlUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkxM
SW50Ojpwcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcik6CisgICAgICAgICogbGxpbnQvTExJbnRU
aHVua3MuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChMTEludCk6CisgICAgICAgICogbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkNMb29wOjpleGVjdXRlKToKKyAgICAgICAgKiBs
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogb2ZmbGluZWFzbS9jbG9vcC5yYjoKKyAg
ICAgICAgKiBwYXJzZXIvQVNUQnVpbGRlci5oOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpB
U1RCdWlsZGVyKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlU291cmNlRWxlbWVu
dHMpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVDb21tYUV4cHIpOgorICAgICAg
ICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6QVNU
QnVpbGRlcjo6Y3JlYXRlVW5hcnlQbHVzKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3Jl
YXRlVm9pZCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OnRoaXNFeHByKToKKyAgICAgICAg
KEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlUmVzb2x2ZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxk
ZXI6OmNyZWF0ZU9iamVjdExpdGVyYWwpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVh
dGVBcnJheSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZU51bWJlckV4cHIpOgor
ICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpB
U1RCdWlsZGVyOjpjcmVhdGVCb29sZWFuKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3Jl
YXRlTnVsbCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUJyYWNrZXRBY2Nlc3Mp
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVEb3RBY2Nlc3MpOgorICAgICAgICAo
SlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVSZWdFeHApOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjpjcmVhdGVOZXdFeHByKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQ29uZGl0
aW9uYWxFeHByKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQXNzaWduUmVzb2x2
ZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUZ1bmN0aW9uRXhwcik6CisgICAg
ICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUZ1bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6
OkFTVEJ1aWxkZXI6OmNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkpOgorICAgICAgICAoSlND
OjpBU1RCdWlsZGVyOjpjcmVhdGVBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjpjcmVhdGVBcmd1bWVudHNMaXN0KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRl
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVQcm9wZXJ0eUxpc3Qp
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVFbGVtZW50TGlzdCk6CisgICAgICAg
IChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUZvcm1hbFBhcmFtZXRlckxpc3QpOgorICAgICAgICAo
SlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVDbGF1c2UpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjpjcmVhdGVDbGF1c2VMaXN0KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRnVu
Y0RlY2xTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVCbG9ja1N0
YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUV4cHJTdGF0ZW1lbnQp
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVJZlN0YXRlbWVudCk6CisgICAgICAg
IChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUZvckxvb3ApOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjpjcmVhdGVGb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVF
bXB0eVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVZhclN0YXRl
bWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVJldHVyblN0YXRlbWVudCk6
CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUJyZWFrU3RhdGVtZW50KToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQ29udGludWVTdGF0ZW1lbnQpOgorICAgICAgICAo
SlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVUcnlTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RC
dWlsZGVyOjpjcmVhdGVTd2l0Y2hTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjpjcmVhdGVXaGlsZVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0
ZURvV2hpbGVTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVMYWJl
bFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVdpdGhTdGF0ZW1l
bnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVUaHJvd1N0YXRlbWVudCk6Cisg
ICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZURlYnVnZ2VyKToKKyAgICAgICAgKEpTQzo6
QVNUQnVpbGRlcjo6Y3JlYXRlQ29uc3RTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjphcHBlbmRDb25zdERlY2wpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjphZGRWYXIp
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjb21iaW5lQ29tbWFOb2Rlcyk6CisgICAgICAg
IChKU0M6OkFTVEJ1aWxkZXI6OlNjb3BlOjpTY29wZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxk
ZXI6OmNyZWF0ZU51bWJlcik6CisgICAgICAgIChBU1RCdWlsZGVyKToKKyAgICAgICAgKEpTQzo6
QVNUQnVpbGRlcjo6bWFrZVR5cGVPZk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpt
YWtlRGVsZXRlTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VOZWdhdGVOb2Rl
KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUJpdHdpc2VOb3ROb2RlKToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZU11bHROb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVp
bGRlcjo6bWFrZURpdk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlTW9kTm9k
ZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VBZGROb2RlKToKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6bWFrZVN1Yk5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpt
YWtlTGVmdFNoaWZ0Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VSaWdodFNo
aWZ0Tm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VVUmlnaHRTaGlmdE5vZGUp
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlQml0T3JOb2RlKToKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6bWFrZUJpdEFuZE5vZGUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjptYWtlQml0WE9yTm9kZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlv
bkNhbGxOb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUJpbmFyeU5vZGUpOgor
ICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlQXNzaWduTm9kZSk6CisgICAgICAgIChKU0M6
OkFTVEJ1aWxkZXI6Om1ha2VQcmVmaXhOb2RlKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6
bWFrZVBvc3RmaXhOb2RlKToKKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuY3BwOgorICAgICAgICAo
SlNDOjpLZXl3b3Jkczo6S2V5d29yZHMpOgorICAgICAgICAoSlNDOjo6OkxleGVyKToKKyAgICAg
ICAgKEpTQzo6OjpwYXJzZUlkZW50aWZpZXIpOgorICAgICAgICAoSlNDOjo6OnBhcnNlSWRlbnRp
ZmllclNsb3dDYXNlKToKKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuaDoKKyAgICAgICAgKEpTQzo6
S2V5d29yZHM6OmlzS2V5d29yZCk6CisgICAgICAgIChKU0M6OktleXdvcmRzOjpnZXRLZXl3b3Jk
KToKKyAgICAgICAgKEtleXdvcmRzKToKKyAgICAgICAgKExleGVyKToKKyAgICAgICAgKEpTQzo6
OjptYWtlSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6Ojo6bWFrZVJpZ2h0U2l6ZWRJZGVudGlm
aWVyKToKKyAgICAgICAgKEpTQzo6OjptYWtlSWRlbnRpZmllckxDaGFyRnJvbVVDaGFyKToKKyAg
ICAgICAgKEpTQzo6OjptYWtlTENoYXJJZGVudGlmaWVyKToKKyAgICAgICAgKiBwYXJzZXIvTm9k
ZUNvbnN0cnVjdG9ycy5oOgorICAgICAgICAoSlNDOjpQYXJzZXJBcmVuYUZyZWVhYmxlOjpvcGVy
YXRvciBuZXcpOgorICAgICAgICAoSlNDOjpQYXJzZXJBcmVuYURlbGV0YWJsZTo6b3BlcmF0b3Ig
bmV3KToKKyAgICAgICAgKEpTQzo6UGFyc2VyQXJlbmFSZWZDb3VudGVkOjpQYXJzZXJBcmVuYVJl
ZkNvdW50ZWQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5vZGU6OlByb3BlcnR5Tm9kZSk6Cisg
ICAgICAgIChKU0M6OkNvbnRpbnVlTm9kZTo6Q29udGludWVOb2RlKToKKyAgICAgICAgKEpTQzo6
QnJlYWtOb2RlOjpCcmVha05vZGUpOgorICAgICAgICAoSlNDOjpGb3JJbk5vZGU6OkZvckluTm9k
ZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6U2NvcGVOb2Rl
OjpTY29wZU5vZGUpOgorICAgICAgICAoSlNDOjpQcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUpOgor
ICAgICAgICAoSlNDOjpQcm9ncmFtTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RXZhbE5v
ZGU6OkV2YWxOb2RlKToKKyAgICAgICAgKEpTQzo6RXZhbE5vZGU6OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUpOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUpOgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5oOgor
ICAgICAgICAoUGFyc2VyQXJlbmFGcmVlYWJsZSk6CisgICAgICAgIChQYXJzZXJBcmVuYURlbGV0
YWJsZSk6CisgICAgICAgIChQYXJzZXJBcmVuYVJlZkNvdW50ZWQpOgorICAgICAgICAoQXJyYXlO
b2RlKToKKyAgICAgICAgKEZvckluTm9kZSk6CisgICAgICAgIChDb250aW51ZU5vZGUpOgorICAg
ICAgICAoQnJlYWtOb2RlKToKKyAgICAgICAgKFNjb3BlTm9kZSk6CisgICAgICAgIChQcm9ncmFt
Tm9kZSk6CisgICAgICAgIChFdmFsTm9kZSk6CisgICAgICAgIChGdW5jdGlvbkJvZHlOb2RlKToK
KyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6OjpQYXJzZXIpOgor
ICAgICAgICAoSlNDOjo6OnBhcnNlSW5uZXIpOgorICAgICAgICAoSlNDOjo6OnBhcnNlU291cmNl
RWxlbWVudHMpOgorICAgICAgICAoSlNDOjo6OnBhcnNlVHJ5U3RhdGVtZW50KToKKyAgICAgICAg
KEpTQzo6OjpwYXJzZUZ1bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VGdW5jdGlv
bkluZm8pOgorICAgICAgICAoSlNDOjo6OnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOgorICAg
ICAgICAoSlNDOjo6OnBhcnNlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjo6OnBhcnNlUHJpbWFy
eUV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjo6OnBhcnNlTWVtYmVyRXhwcmVzc2lvbik6Cisg
ICAgICAgIChKU0M6Ojo6cGFyc2VVbmFyeUV4cHJlc3Npb24pOgorICAgICAgICAqIHBhcnNlci9Q
YXJzZXIuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OlNjb3BlOjpTY29wZSk6Cisg
ICAgICAgIChKU0M6OlNjb3BlOjpkZWNsYXJlVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpTY29w
ZTo6ZGVjbGFyZVBhcmFtZXRlcik6CisgICAgICAgIChTY29wZSk6CisgICAgICAgIChQYXJzZXIp
OgorICAgICAgICAoSlNDOjpQYXJzZXI6OnB1c2hTY29wZSk6CisgICAgICAgIChKU0M6Ojo6cGFy
c2UpOgorICAgICAgICAoSlNDOjpwYXJzZSk6CisgICAgICAgICogcGFyc2VyL1BhcnNlckFyZW5h
Lmg6CisgICAgICAgIChJZGVudGlmaWVyQXJlbmEpOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVy
QXJlbmE6Om1ha2VJZGVudGlmaWVyKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllckFyZW5hOjpt
YWtlSWRlbnRpZmllckxDaGFyRnJvbVVDaGFyKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllckFy
ZW5hOjptYWtlTnVtZXJpY0lkZW50aWZpZXIpOgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVj
a2VyLmg6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OlN5bnRheENoZWNrZXIpOgorICAg
ICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6
OlN5bnRheENoZWNrZXI6OmNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkpOgorICAgICAgICAq
IHByb2ZpbGVyL0xlZ2FjeVByb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6TGVnYWN5UHJvZmls
ZXI6OnN0YXJ0UHJvZmlsaW5nKToKKyAgICAgICAgKEpTQzo6TGVnYWN5UHJvZmlsZXI6OnN0b3BQ
cm9maWxpbmcpOgorICAgICAgICAqIHByb2ZpbGVyL0xlZ2FjeVByb2ZpbGVyLmg6CisgICAgICAg
IChKU0MpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGUuY3BwOgorICAgICAg
ICAoSlNDOjpQcm9maWxlcjo6Qnl0ZWNvZGU6OnRvSlMpOgorICAgICAgICAqIHByb2ZpbGVyL1By
b2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpCeXRl
Y29kZVNlcXVlbmNlOjpCeXRlY29kZVNlcXVlbmNlKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6
OkJ5dGVjb2RlU2VxdWVuY2U6OmFkZFNlcXVlbmNlUHJvcGVydGllcyk6CisgICAgICAgICogcHJv
ZmlsZXIvUHJvZmlsZXJCeXRlY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6Qnl0
ZWNvZGVzOjp0b0pTKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OkNvbXBpbGF0aW9uOjp0b0pTKToKKyAgICAgICAg
KiBwcm9maWxlci9Qcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuY3BwOgorICAgICAgICAoSlNDOjpQ
cm9maWxlcjo6Q29tcGlsZWRCeXRlY29kZTo6dG9KUyk6CisgICAgICAgICogcHJvZmlsZXIvUHJv
ZmlsZXJEYXRhYmFzZS5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpEYXRhYmFzZTo6RGF0
YWJhc2UpOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6RGF0YWJhc2U6OnRvSlMpOgorICAgICAg
ICAoSlNDOjpQcm9maWxlcjo6RGF0YWJhc2U6OnRvSlNPTik6CisgICAgICAgICogcHJvZmlsZXIv
UHJvZmlsZXJEYXRhYmFzZS5oOgorICAgICAgICAoRGF0YWJhc2UpOgorICAgICAgICAqIHByb2Zp
bGVyL1Byb2ZpbGVyT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpPU1JFeGl0
Ojp0b0pTKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlck9yaWdpbi5jcHA6CisgICAgICAg
IChKU0M6OlByb2ZpbGVyOjpPcmlnaW46OnRvSlMpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2Zp
bGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6UHJvZmls
ZWRCeXRlY29kZXM6OnRvSlMpOgorICAgICAgICAqIHJ1bnRpbWUvQXJnTGlzdC5oOgorICAgICAg
ICAoTWFya2VkQXJndW1lbnRCdWZmZXIpOgorICAgICAgICAqIHJ1bnRpbWUvQXJndW1lbnRzLmNw
cDoKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpwdXRCeUluZGV4KToKKyAgICAgICAgKEpTQzo6
QXJndW1lbnRzOjpwdXQpOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAg
IChKU0M6OkFyZ3VtZW50czo6dGVhck9mZik6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6ZGlk
VGVhck9mZkFjdGl2YXRpb24pOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OnRlYXJPZmZGb3JJ
bmxpbmVDYWxsRnJhbWUpOgorICAgICAgICAqIHJ1bnRpbWUvQXJndW1lbnRzLmg6CisgICAgICAg
IChKU0M6OkFyZ3VtZW50czo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpjcmVh
dGVTdHJ1Y3R1cmUpOgorICAgICAgICAoQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6QXJndW1l
bnRzOjpBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OnRyeVNldEFyZ3VtZW50
KToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICog
cnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlDb25zdHJ1
Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rv
ci5oOgorICAgICAgICAoSlNDOjpBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgor
ICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpBcnJh
eVByb3RvdHlwZTo6QXJyYXlQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpBcnJheVByb3RvdHlw
ZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvcnQpOgor
ICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NwbGljZSk6CisgICAgICAgICogcnVudGltZS9B
cnJheVByb3RvdHlwZS5oOgorICAgICAgICAoSlNDOjpBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0JhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmg6
CisgICAgICAgIChKU0M6OkJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyOjpCYXRjaGVkVHJhbnNp
dGlvbk9wdGltaXplcik6CisgICAgICAgIChKU0M6OkJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVy
Ojp+QmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIpOgorICAgICAgICAoQmF0Y2hlZFRyYW5zaXRp
b25PcHRpbWl6ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Qm9vbGVhbkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgIChKU0M6OmNvbnN0cnVjdEJvb2xlYW4pOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RCb29s
ZWFuRnJvbUltbWVkaWF0ZUJvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhbkNvbnN0
cnVjdG9yLmg6CisgICAgICAgIChKU0M6OkJvb2xlYW5Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5PYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpCb29sZWFuT2JqZWN0OjpCb29sZWFuT2JqZWN0KToKKyAgICAgICAgKEpTQzo6Qm9vbGVhbk9i
amVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhbk9iamVjdC5o
OgorICAgICAgICAoQm9vbGVhbk9iamVjdCk6CisgICAgICAgIChKU0M6OkJvb2xlYW5PYmplY3Q6
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkJvb2xlYW5PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgICogcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6
Qm9vbGVhblByb3RvdHlwZTo6Qm9vbGVhblByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OkJvb2xl
YW5Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Ym9vbGVhblByb3Rv
RnVuY1RvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuaDoKKyAg
ICAgICAgKEpTQzo6Qm9vbGVhblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KiBydW50aW1lL0J1dHRlcmZseS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEJ1dHRlcmZs
eSk6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmg6CisgICAgICAgIChKU0M6
OkJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZs
eTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodCk6CisgICAgICAgIChKU0M6OkJ1
dHRlcmZseTo6cmVzaXplQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmNwcDoK
KyAgICAgICAgKEpTQzo6Q29kZUNhY2hlOjpnZXRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpD
b2RlQ2FjaGU6OmdldFByb2dyYW1Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6
OmdldEV2YWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6OmdldEZ1bmN0aW9u
RXhlY3V0YWJsZUZyb21HbG9iYWxDb2RlKToKKyAgICAgICAgKiBydW50aW1lL0NvZGVDYWNoZS5o
OgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U291cmNlQ29kZVZhbHVlOjpTb3VyY2VD
b2RlVmFsdWUpOgorICAgICAgICAoQ29kZUNhY2hlKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1v
bklkZW50aWZpZXJzLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkNvbW1vbklk
ZW50aWZpZXJzOjpDb21tb25JZGVudGlmaWVycyk6CisgICAgICAgICogcnVudGltZS9Db21tb25J
ZGVudGlmaWVycy5oOgorICAgICAgICAoQ29tbW9uSWRlbnRpZmllcnMpOgorICAgICAgICAqIHJ1
bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgIChKU0M6OkNvbW1vblNsb3dQYXRoczo6
b3BJbik6CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6
Y2hlY2tTeW50YXgpOgorICAgICAgICAoSlNDOjpldmFsdWF0ZSk6CisgICAgICAgICogcnVudGlt
ZS9EYXRlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpEYXRlQ29uc3RydWN0b3I6OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5oOgorICAg
ICAgICAoSlNDOjpEYXRlQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICog
cnVudGltZS9EYXRlSW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpEYXRlSW5zdGFuY2U6OkRh
dGVJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkRhdGVJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoSlNDOjpEYXRlSW5zdGFuY2U6OmNhbGN1bGF0ZUdyZWdvcmlhbkRhdGVUaW1l
KToKKyAgICAgICAgKEpTQzo6RGF0ZUluc3RhbmNlOjpjYWxjdWxhdGVHcmVnb3JpYW5EYXRlVGlt
ZVVUQyk6CisgICAgICAgICogcnVudGltZS9EYXRlSW5zdGFuY2UuaDoKKyAgICAgICAgKERhdGVJ
bnN0YW5jZSk6CisgICAgICAgIChKU0M6OkRhdGVJbnN0YW5jZTo6Y3JlYXRlKToKKyAgICAgICAg
KEpTQzo6RGF0ZUluc3RhbmNlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUv
RGF0ZVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkRhdGVQcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldFRpbWUpOgorICAgICAgICAo
SlNDOjpzZXROZXdWYWx1ZUZyb21UaW1lQXJncyk6CisgICAgICAgIChKU0M6OnNldE5ld1ZhbHVl
RnJvbURhdGVBcmdzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldFllYXIpOgorICAg
ICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9KU09OKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVQ
cm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6RGF0ZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlRXJy
b3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVFdmFsRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVh
dGVSYW5nZUVycm9yKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlUmVmZXJlbmNlRXJyb3IpOgorICAg
ICAgICAoSlNDOjpjcmVhdGVTeW50YXhFcnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZVR5cGVF
cnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZVVSSUVycm9yKToKKyAgICAgICAgKEpTQzo6YWRk
RXJyb3JJbmZvKToKKyAgICAgICAgKEpTQzo6dGhyb3dFcnJvcik6CisgICAgICAgICogcnVudGlt
ZS9FcnJvci5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3RyaWN0TW9kZVR5cGVF
cnJvckZ1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpTdHJpY3RNb2RlVHlwZUVycm9y
RnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9FcnJvckNvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6RXJyb3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlND
OjpFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUv
RXJyb3JJbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OkVycm9ySW5z
dGFuY2UpOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JJbnN0YW5jZS5oOgorICAgICAgICAoSlND
OjpFcnJvckluc3RhbmNlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpFcnJvcklu
c3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAoRXJyb3JJbnN0YW5jZSk6CisgICAgICAgIChKU0M6
OkVycm9ySW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9y
UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6RXJyb3JQcm90b3R5cGU6OkVycm9yUHJvdG90
eXBlKToKKyAgICAgICAgKEpTQzo6RXJyb3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKiBydW50aW1lL0Vycm9yUHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6OkVycm9yUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uSGVs
cGVycy5jcHA6CisgICAgICAgIChKU0M6OmNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0
aW9uKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbik6
CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSlNDOjpJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yOjpJbnRlcnJ1cHRlZEV4ZWN1
dGlvbkVycm9yKToKKyAgICAgICAgKEpTQzo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpUZXJtaW5h
dGVkRXhlY3V0aW9uRXJyb3IpOgorICAgICAgICAoSlNDOjpUZXJtaW5hdGVkRXhlY3V0aW9uRXJy
b3I6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAg
ICAoSlNDOjpqZXR0aXNvbkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxl
OjpFdmFsRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpQcm9n
cmFtRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rp
b25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVPcHRp
bWl6ZWQpOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToK
KyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZSk6Cisg
ICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjaGVja1N5bnRheCk6CisgICAgICAgIChK
U0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6
UHJvZ3JhbUV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZSk6CisgICAgICAgIChKU0M6
OlByb2dyYW1FeGVjdXRhYmxlOjppbml0aWFsaXplR2xvYmFsUHJvcGVydGllcyk6CisgICAgICAg
IChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNhbGwpOgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1
Y3QpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tG
b3IpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVk
Q29kZUZvckNhbGwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29u
T3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0
YWJsZTo6ZnJvbUdsb2JhbENvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6RXhlY3V0YWJsZUJhc2UpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQmFzZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpFeGVj
dXRhYmxlQmFzZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6TmF0aXZlRXhlY3V0
YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6TmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6TmF0aXZlRXhlY3V0YWJsZTo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoSlNDOjpOYXRpdmVFeGVjdXRhYmxlOjpOYXRpdmVFeGVjdXRhYmxlKToKKyAg
ICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6U2NyaXB0RXhlY3V0YWJsZSk6CisgICAgICAg
IChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGUpOgorICAgICAgICAoRXZhbEV4ZWN1dGFibGUpOgorICAg
ICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RXZhbEV4
ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRh
YmxlOjpjcmVhdGUpOgorICAgICAgICAoUHJvZ3JhbUV4ZWN1dGFibGUpOgorICAgICAgICAoSlND
OjpQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVj
dXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFi
bGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZv
ckNhbGwpOgorICAgICAgICAoRnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3IpOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpT
RnVuY3Rpb246OkpTRnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0aW9uSGFybmVz
cy5oOgorICAgICAgICAoSlNDOjpwcmVwYXJlRm9yRXhlY3V0aW9uKToKKyAgICAgICAgKEpTQzo6
cHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9u
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvbnN0cnVjdG9yOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmg6Cisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgICogcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHJv
dG90eXBlOjphZGRGdW5jdGlvblByb3BlcnRpZXMpOgorICAgICAgICAoSlNDOjpmdW5jdGlvblBy
b3RvRnVuY0JpbmQpOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaDoKKyAg
ICAgICAgKEpTQzo6RnVuY3Rpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAg
ICogcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwOgorICAgICAgICAoSlNDOjpEZWZhdWx0
R0NBY3Rpdml0eUNhbGxiYWNrOjpEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKToKKyAgICAgICAg
KEpTQzo6RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6ZG9Xb3JrKToKKyAgICAgICAgKEpTQzo6
RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6ZGlkQWxsb2NhdGUpOgorICAgICAgICAqIHJ1bnRp
bWUvR0NBY3Rpdml0eUNhbGxiYWNrLmg6CisgICAgICAgIChKU0M6OkdDQWN0aXZpdHlDYWxsYmFj
azo6R0NBY3Rpdml0eUNhbGxiYWNrKToKKyAgICAgICAgKiBydW50aW1lL0dDQWN0aXZpdHlDYWxs
YmFja0JsYWNrQmVycnkuY3BwOgorICAgICAgICAoSlNDOjpEZWZhdWx0R0NBY3Rpdml0eUNhbGxi
YWNrOjpEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6RGVmYXVsdEdD
QWN0aXZpdHlDYWxsYmFjazo6ZG9Xb3JrKToKKyAgICAgICAgKEpTQzo6RGVmYXVsdEdDQWN0aXZp
dHlDYWxsYmFjazo6ZGlkQWxsb2NhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVy
Lmg6CisgICAgICAgIChKU0M6OkdldHRlclNldHRlcjo6R2V0dGVyU2V0dGVyKToKKyAgICAgICAg
KEpTQzo6R2V0dGVyU2V0dGVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXI6
OnNldEdldHRlcik6CisgICAgICAgIChKU0M6OkdldHRlclNldHRlcjo6c2V0U2V0dGVyKToKKyAg
ICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1
bnRpbWUvSWRlbnRpZmllci5jcHA6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFkZCk6Cisg
ICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFkZDgpOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVy
OjphZGRTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmZyb20pOgorICAgICAg
ICAoSlNDOjpJZGVudGlmaWVyOjpjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvSWRlbnRpZmllci5oOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjpJZGVu
dGlmaWVyKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6Y3JlYXRlTENoYXJGcm9tVUNoYXIp
OgorICAgICAgICAoSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFkZCk6
CisgICAgICAgICogcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6
SW50ZXJuYWxGdW5jdGlvbjo6SW50ZXJuYWxGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkludGVy
bmFsRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxGdW5j
dGlvbjo6bmFtZSk6CisgICAgICAgIChKU0M6OkludGVybmFsRnVuY3Rpb246OmRpc3BsYXlOYW1l
KToKKyAgICAgICAgKiBydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6
SW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEludGVybmFsRnVu
Y3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNBUElWYWx1ZVdyYXBwZXIuaDoKKyAgICAgICAg
KEpTQzo6SlNBUElWYWx1ZVdyYXBwZXI6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
OkpTQVBJVmFsdWVXcmFwcGVyOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTQVBJ
VmFsdWVXcmFwcGVyOjpKU0FQSVZhbHVlV3JhcHBlcik6CisgICAgICAgICogcnVudGltZS9KU0Fj
dGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxlUHV0
KToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1
dGVzKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgor
ICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OnB1dCk6CisgICAgICAgIChKU0M6OkpTQWN0aXZh
dGlvbjo6cHV0RGlyZWN0VmlydHVhbCk6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6YXJn
dW1lbnRzR2V0dGVyKToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5oOgorICAgICAg
ICAoSlNBY3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChK
U0M6OkpTQWN0aXZhdGlvbjo6SlNBY3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0
aW9uOjp0ZWFyT2ZmKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAo
SlNDOjpjcmVhdGVBcnJheUJ1dHRlcmZseUluRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OnNldExlbmd0aFdyaXRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRM
ZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXNoKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6c2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OkNvbnRp
Z3VvdXNUeXBlQWNjZXNzb3I6OnNldFdpdGhWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OnNvcnRDb21wYWN0ZWRWZWN0b3IpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0VmVjdG9y
KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
SlNBcnJheSk6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hp
ZnRDb3VudEZvclNoaWZ0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50Rm9y
U2hpZnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAg
ICAoSlNDOjpjcmVhdGVDb250aWd1b3VzQXJyYXlCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpj
cmVhdGVBcnJheUJ1dHRlcmZseSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxp
emVkKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNCb3VuZEZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNCb3VuZEZ1bmN0aW9uOjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpKU0JvdW5kRnVuY3Rpb246OkpTQm91bmRGdW5jdGlvbik6Cisg
ICAgICAgICogcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SlNCb3Vu
ZEZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1
ZS5jcHA6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlKToKKyAgICAgICAg
KEpTQzo6SlNWYWx1ZTo6dG9TdHJpbmdTbG93Q2FzZSk6CisgICAgICAgICogcnVudGltZS9KU0NK
U1ZhbHVlLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6Cisg
ICAgICAgIChKU0NlbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjpKU0NlbGw6OkpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAoSlNDOjphbGxvY2F0ZUNlbGwpOgorICAgICAgICAoSlNDOjpK
U0NlbGw6OnNldFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6ZmFzdEdldE93blBy
b3BlcnR5KToKKyAgICAgICAgKiBydW50aW1lL0pTRGF0ZU1hdGguY3BwOgorICAgICAgICAoSlND
OjpnZXREU1RPZmZzZXQpOgorICAgICAgICAoSlNDOjpnZXRVVENPZmZzZXQpOgorICAgICAgICAo
SlNDOjpwYXJzZURhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3Qu
aDoKKyAgICAgICAgKEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Q6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0KToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpK
U0Z1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9u
KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGVBbGxvY2F0aW9uUHJvZmlsZSk6CisgICAgICAgIChKU0M6
OkpTRnVuY3Rpb246Om5hbWUpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpkaXNwbGF5TmFt
ZSk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93blByb3BlcnR5U2xvdCk6CisgICAg
ICAgIChKU0M6OkpTRnVuY3Rpb246OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKiBydW50aW1l
L0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU0Z1
bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpzZXRTY29wZSk6Cisg
ICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbERhdGEuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxEYXRhLmg6IFJlbW92ZWQuCisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6
CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp+SlNHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbE9iamVjdDo6c2V0R2xvYmFsVGhpcyk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0Ojppbml0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnB1dERpcmVjdFZpcnR1
YWwpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmhhdmVBQmFkVGltZSk6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsT2JqZWN0OjpjcmVhdGVUaHJvd1R5cGVFcnJvcik6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0OjpyZXNldFByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OkpTR2xv
YmFsT2JqZWN0OjphZGRTdGF0aWNHbG9iYWxzKToKKyAgICAgICAgKEpTQzo6RHluYW1pY0dsb2Jh
bE9iamVjdFNjb3BlOjpEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUpOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbE9iamVjdDo6Y3JlYXRlUHJvZ3JhbUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjpjcmVhdGVFdmFsQ29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0pT
R2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpjcmVhdGUpOgor
ICAgICAgICAoSlNHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6dm0pOgorICAg
ICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6RXhlY1N0YXRlOjpkeW5hbWljR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6Y29uc3Ry
dWN0RW1wdHlBcnJheSk6CisgICAgICAgIChEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlND
OjpnbG9iYWxGdW5jUHJvdG9TZXR0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNMb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIpOgorICAgICAgICAoSlND
OjpKU0xvY2tIb2xkZXI6OmluaXQpOgorICAgICAgICAoSlNDOjpKU0xvY2tIb2xkZXI6On5KU0xv
Y2tIb2xkZXIpOgorICAgICAgICAoSlNDOjpKU0xvY2s6OkpTTG9jayk6CisgICAgICAgIChKU0M6
OkpTTG9jazo6d2lsbERlc3Ryb3lHbG9iYWxEYXRhKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjps
b2NrKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjp1bmxvY2spOgorICAgICAgICAoSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFsbExvY2tzKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3M6On5Ecm9wQWxsTG9ja3MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNMb2NrLmg6
CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNMb2NrSG9sZGVyKToKKyAgICAgICAgKEpTTG9j
ayk6CisgICAgICAgIChKU0M6OkpTTG9jazo6dm0pOgorICAgICAgICAoRHJvcEFsbExvY2tzKToK
KyAgICAgICAgKiBydW50aW1lL0pTTmFtZVNjb3BlLmg6CisgICAgICAgIChKU0M6OkpTTmFtZVNj
b3BlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU05hbWVTY29wZTo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU05hbWVTY29wZTo6SlNOYW1lU2NvcGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNOb3RBbk9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU05vdEFuT2Jq
ZWN0OjpKU05vdEFuT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNOb3RBbk9iamVjdDo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6SlNOb3RBbk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKiBydW50aW1lL0pTT05PYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09OT2JqZWN0OjpK
U09OT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPTk9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgor
ICAgICAgICAoSG9sZGVyKToKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OlN0cmluZ2lmaWVy
KToKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OnN0cmluZ2lmeSk6CisgICAgICAgIChKU0M6
OlN0cmluZ2lmaWVyOjp0b0pTT04pOgorICAgICAgICAoSlNDOjpTdHJpbmdpZmllcjo6YXBwZW5k
U3RyaW5naWZpZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjpIb2xkZXI6Okhv
bGRlcik6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OldhbGtlcjo6V2Fsa2VyKToKKyAgICAgICAgKEpTQzo6V2Fs
a2VyOjp3YWxrKToKKyAgICAgICAgKEpTQzo6SlNPTlByb3RvRnVuY1BhcnNlKToKKyAgICAgICAg
KEpTQzo6SlNPTlByb3RvRnVuY1N0cmluZ2lmeSk6CisgICAgICAgIChKU0M6OkpTT05TdHJpbmdp
ZnkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09O
T2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OnB1dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6Om5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpjcmVhdGVJbml0aWFsVW5kZWNpZGVkKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmNyZWF0ZUluaXRpYWxJbnQzMik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0
aWFsRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxDb250aWd1
b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0ludDMyKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHMp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvRG91YmxlKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQ29udGlndW91cyk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpnZW5lcmljQ29udmVydERvdWJsZVRvQ29udGlndW91cyk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnJhZ2VDb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRGb3JWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0Ojpjb252ZXJ0SW50MzJGb3JWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRJ
bmRleFF1aWNrbHlUb1VuZGVjaWRlZCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0
SW50MzJUb0RvdWJsZU9yQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1p
bmdTZXRJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVJbnQzMlNsb3cpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlRG91YmxlU2xvdyk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjplbnN1cmVDb250aWd1b3VzU2xvdyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpyYWdlRW5zdXJlQ29udGlndW91c1Nsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5z
dXJlQXJyYXlTdG9yYWdlU2xvdyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJh
eVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6c3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
c2V0UHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldFByb3RvdHlwZVdpdGhD
eWNsZUNoZWNrKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEFjY2Vzc29yKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmdldFByb3BlcnR5U3BlY2lmaWNWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6c2VhbCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpmcmVlemUpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHJldmVudEV4dGVuc2lvbnMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
cmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JEZWxldGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
cmVtb3ZlRGlyZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEluZGV4ZWREZXNjcmlw
dG9yKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphbGxvY2F0ZVNwYXJzZUluZGV4TWFwKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRob3V0QXR0
cmlidXRlcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoV2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUlu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVj
dEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpwdXREaXJlY3ROYXRpdmVGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpl
bnN1cmVMZW5ndGhTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cik6CisgICAgICAgIChKU0M6OnB1dERlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0RGlyZWN0TWF5QmVJbmRleCk6CisgICAgICAgIChKU0M6OkRlZmluZU93blByb3BlcnR5
U2NvcGU6OkRlZmluZU93blByb3BlcnR5U2NvcGUpOgorICAgICAgICAoSlNDOjpEZWZpbmVPd25Q
cm9wZXJ0eVNjb3BlOjp+RGVmaW5lT3duUHJvcGVydHlTY29wZSk6CisgICAgICAgIChEZWZpbmVP
d25Qcm9wZXJ0eVNjb3BlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bk5vbklu
ZGV4UHJvcGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpT
T2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhJbmxpbmUpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6c2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluaXRpYWxp
emVJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXREaXJlY3QpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6Z2V0RGlyZWN0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OnB1dERpcmVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojppc1NlYWxlZCk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0Ojppc0Zyb3plbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpmbGF0
dGVuRGljdGlvbmFyeU9iamVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVJbnQz
Mik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVEb3VibGUpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6ZW5zdXJlQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpy
YWdlRW5zdXJlQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJh
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmVuc3VyZUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTTm9uRmluYWxPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTTm9uRmluYWxPYmplY3Q6OkpTTm9uRmlu
YWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU05vbkZpbmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlv
bik6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
SlNGaW5hbE9iamVjdDo6SlNGaW5hbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmpl
Y3Q6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6SlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
aW5saW5lR2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERp
cmVjdEludGVybmFsKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZFJl
YWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0
T3duRGF0YVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9KU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRv
cjo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcik6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1l
SXRlcmF0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yLmg6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZVN0cnVj
dHVyZSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OnNldENhY2hlZFN0
cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OnNldENhY2hl
ZFByb3RvdHlwZUNoYWluKToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0RW51
bWVyYXRpb25DYWNoZSk6CisgICAgICAgICogcnVudGltZS9KU1Byb3h5LmNwcDoKKyAgICAgICAg
KEpTQzo6SlNQcm94eTo6c2V0VGFyZ2V0KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJveHkuaDoK
KyAgICAgICAgKEpTQzo6SlNQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNQcm94eTo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNQcm94eTo6SlNQcm94eSk6CisgICAg
ICAgIChKU0M6OkpTUHJveHk6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTUHJveHkpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNTY29wZS5jcHA6CisgICAgICAgIChKU0M6OmV4ZWN1dGVSZXNv
bHZlT3BlcmF0aW9ucyk6CisgICAgICAgIChKU0M6OkpTU2NvcGU6OnJlc29sdmVDb250YWluaW5n
U2NvcGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkpTU2NvcGU6OnJlc29sdmVXaXRoQmFzZSk6
CisgICAgICAgIChKU0M6OkpTU2NvcGU6OnJlc29sdmVXaXRoVGhpcyk6CisgICAgICAgIChKU0M6
OkpTU2NvcGU6OnJlc29sdmVQdXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTY29wZS5oOgorICAg
ICAgICAoSlNTY29wZSk6CisgICAgICAgIChKU0M6OkpTU2NvcGU6OkpTU2NvcGUpOgorICAgICAg
ICAoSlNDOjpKU1Njb3BlOjp2bSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6dm0pOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oOgorICAgICAgICAoSlND
OjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KToK
KyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuY3BwOgorICAgICAgICAoSlNDOjpKU1JvcGVT
dHJpbmc6OlJvcGVCdWlsZGVyOjpleHBhbmQpOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6
OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5oOgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKEpTU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OkpTU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
SlNTdHJpbmc6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpjcmVhdGVIYXNPdGhl
ck93bmVyKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgIChKU1JvcGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OlJvcGVCdWls
ZGVyOjpSb3BlQnVpbGRlcik6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6Um9wZUJ1aWxk
ZXI6OmFwcGVuZCk6CisgICAgICAgIChSb3BlQnVpbGRlcik6CisgICAgICAgIChKU0M6OkpTUm9w
ZVN0cmluZzo6SlNSb3BlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6YXBwZW5kKToKKyAgICAg
ICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpjcmVhdGVOdWxsKToKKyAgICAgICAgKEpTQzo6SlNSb3Bl
U3RyaW5nOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpqc0VtcHR5U3RyaW5nKToKKyAgICAgICAg
KEpTQzo6anNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOgorICAgICAgICAoSlNDOjpqc1NpbmdsZUNo
YXJhY3RlclN1YnN0cmluZyk6CisgICAgICAgIChKU0M6OmpzTm9udHJpdmlhbFN0cmluZyk6Cisg
ICAgICAgIChKU0M6OmpzU3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNTdWJzdHJpbmcpOgorICAg
ICAgICAoSlNDOjpqc1N1YnN0cmluZzgpOgorICAgICAgICAoSlNDOjpqc093bmVkU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6anNTdHJpbmdCdWlsZGVyKToKKyAgICAgICAgKEpTQzo6aW5saW5lSlNW
YWx1ZU5vdFN0cmluZ3RvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nSm9pbmVy
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmdKb2luZXI6OmJ1aWxkKToKKyAgICAgICAgKiBy
dW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJs
ZU9iamVjdDo6SlNTeW1ib2xUYWJsZU9iamVjdCk6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFi
bGVPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6c3ltYm9sVGFibGVQdXQp
OgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKToKKyAgICAgICAg
KiBydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNWYXJpYWJsZU9i
amVjdDo6SlNWYXJpYWJsZU9iamVjdCk6CisgICAgICAgICogcnVudGltZS9KU1dpdGhTY29wZS5o
OgorICAgICAgICAoSlNDOjpKU1dpdGhTY29wZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNX
aXRoU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTV2l0aFNjb3BlOjpK
U1dpdGhTY29wZSk6CisgICAgICAgICogcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaDoKKyAgICAg
ICAgKEpTV3JhcHBlck9iamVjdCk6CisgICAgICAgIChKU0M6OkpTV3JhcHBlck9iamVjdDo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNXcmFwcGVyT2JqZWN0OjpKU1dyYXBwZXJP
YmplY3QpOgorICAgICAgICAoSlNDOjpKU1dyYXBwZXJPYmplY3Q6OnNldEludGVybmFsVmFsdWUp
OgorICAgICAgICAqIHJ1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHA6CisgICAgICAgIChKU0M6Ojo6
dHJ5SlNPTlBQYXJzZSk6CisgICAgICAgIChKU0M6Ojo6bWFrZUlkZW50aWZpZXIpOgorICAgICAg
ICAoSlNDOjo6OnBhcnNlKToKKyAgICAgICAgKiBydW50aW1lL0xvb2t1cC5jcHA6CisgICAgICAg
IChKU0M6Okhhc2hUYWJsZTo6Y3JlYXRlVGFibGUpOgorICAgICAgICAoSlNDOjpzZXRVcFN0YXRp
Y0Z1bmN0aW9uU2xvdCk6CisgICAgICAgICogcnVudGltZS9Mb29rdXAuaDoKKyAgICAgICAgKEpT
Qzo6SGFzaFRhYmxlOjppbml0aWFsaXplSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpIYXNoVGFi
bGU6OmVudHJ5KToKKyAgICAgICAgKEpTQzo6SGFzaFRhYmxlOjpiZWdpbik6CisgICAgICAgIChK
U0M6Okhhc2hUYWJsZTo6ZW5kKToKKyAgICAgICAgKEhhc2hUYWJsZSk6CisgICAgICAgIChKU0M6
Omxvb2t1cFB1dCk6CisgICAgICAgICogcnVudGltZS9NYXRoT2JqZWN0LmNwcDoKKyAgICAgICAg
KEpTQzo6TWF0aE9iamVjdDo6TWF0aE9iamVjdCk6CisgICAgICAgIChKU0M6Ok1hdGhPYmplY3Q6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY1Npbik6CisgICAg
ICAgICogcnVudGltZS9NYXRoT2JqZWN0Lmg6CisgICAgICAgIChKU0M6Ok1hdGhPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9NZW1vcnlTdGF0aXN0aWNzLmNwcDoK
KyAgICAgICAgKiBydW50aW1lL01lbW9yeVN0YXRpc3RpY3MuaDoKKyAgICAgICAgKiBydW50aW1l
L05hbWVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6Ok5hbWVDb25zdHJ1Y3Rvcjo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RQcml2YXRlTmFtZSk6CisgICAg
ICAgICogcnVudGltZS9OYW1lQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6TmFtZUNvbnN0
cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvTmFtZUluc3RhbmNl
LmNwcDoKKyAgICAgICAgKEpTQzo6TmFtZUluc3RhbmNlOjpOYW1lSW5zdGFuY2UpOgorICAgICAg
ICAqIHJ1bnRpbWUvTmFtZUluc3RhbmNlLmg6CisgICAgICAgIChKU0M6Ok5hbWVJbnN0YW5jZTo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6TmFtZUluc3RhbmNlOjpjcmVhdGUpOgor
ICAgICAgICAoTmFtZUluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6TmFtZUluc3RhbmNlOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9OYW1lUHJvdG90eXBlLmNwcDoKKyAgICAg
ICAgKEpTQzo6TmFtZVByb3RvdHlwZTo6TmFtZVByb3RvdHlwZSk6CisgICAgICAgIChKU0M6Ok5h
bWVQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL05hbWVQcm90
b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6TmFtZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKiBydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpT
Qzo6TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1
bnRpbWUvTmF0aXZlRXJyb3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpOYXRpdmVFcnJv
clByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpOdW1iZXJDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3Jl
YXRpb24pOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoTnVtYmVyQ29uc3RydWN0b3IpOgor
ICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6TnVt
YmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9OdW1i
ZXJPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpOdW1iZXJPYmplY3Q6Ok51bWJlck9iamVjdCk6
CisgICAgICAgIChKU0M6Ok51bWJlck9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpjb25zdHJ1Y3ROdW1iZXIpOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyT2JqZWN0Lmg6
CisgICAgICAgIChOdW1iZXJPYmplY3QpOgorICAgICAgICAoSlNDOjpOdW1iZXJPYmplY3Q6OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6Ok51bWJlck9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKiBydW50aW1lL051bWJlclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6Ok51bWJl
clByb3RvdHlwZTo6TnVtYmVyUHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6TnVtYmVyUHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OmludGVnZXJWYWx1ZVRvU3RyaW5n
KToKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAqIHJ1
bnRpbWUvTnVtYmVyUHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6Ok51bWJlclByb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6T2JqZWN0Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgor
ICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvclNlYWwpOgorICAgICAgICAoSlNDOjpvYmpl
Y3RDb25zdHJ1Y3RvckZyZWV6ZSk6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yUHJl
dmVudEV4dGVuc2lvbnMpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvcklzU2VhbGVk
KToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JJc0Zyb3plbik6CisgICAgICAgICog
cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpPYmplY3RDb25zdHJ1
Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RW1wdHlPYmpl
Y3QpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpT
Qzo6T2JqZWN0UHJvdG90eXBlOjpPYmplY3RQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpPYmpl
Y3RQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9G
dW5jVG9TdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg6CisgICAg
ICAgIChKU0M6Ok9iamVjdFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBy
dW50aW1lL09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpqc1R5cGVTdHJpbmdGb3JWYWx1
ZSk6CisgICAgICAgICogcnVudGltZS9PcGVyYXRpb25zLmg6CisgICAgICAgIChKU0MpOgorICAg
ICAgICAoSlNDOjpqc1N0cmluZyk6CisgICAgICAgIChKU0M6OmpzU3RyaW5nRnJvbUFyZ3VtZW50
cyk6CisgICAgICAgIChKU0M6Om5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3Mp
OgorICAgICAgICAoSlNDOjpub3JtYWxpemVQcm90b3R5cGVDaGFpbik6CisgICAgICAgICogcnVu
dGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU1hcEVu
dHJ5OjpQcm9wZXJ0eU1hcEVudHJ5KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKFByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlNDOjpQ
cm9wZXJ0eVRhYmxlOjpjb3B5KToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5
Lmg6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5OjpQcm9wZXJ0eU5hbWVBcnJheSk6
CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5Ojp2bSk6CisgICAgICAgIChKU0M6OlBy
b3BlcnR5TmFtZUFycmF5OjphZGRLbm93blVuaXF1ZSk6CisgICAgICAgIChQcm9wZXJ0eU5hbWVB
cnJheSk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6UHJvcGVydHlUYWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6
Y2xvbmUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKToKKyAg
ICAgICAgKiBydW50aW1lL1Byb3RvdHlwZU1hcC5jcHA6CisgICAgICAgIChKU0M6OlByb3RvdHlw
ZU1hcDo6ZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUpOgorICAgICAgICAqIHJ1bnRp
bWUvUmVnRXhwLmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpSZWdFeHApOgorICAgICAgICAo
SlNDOjpSZWdFeHA6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpjcmVh
dGVXaXRob3V0Q2FjaGluZyk6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6UmVnRXhwOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpjb21waWxl
SWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpSZWdFeHA6Om1hdGNoKToKKyAgICAgICAgKEpT
Qzo6UmVnRXhwOjpjb21waWxlTWF0Y2hPbmx5KToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpjb21w
aWxlSWZOZWNlc3NhcnlNYXRjaE9ubHkpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwLmg6Cisg
ICAgICAgIChKU0MpOgorICAgICAgICAoUmVnRXhwKToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpj
cmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwOgorICAg
ICAgICAoSlNDOjpSZWdFeHBDYWNoZTo6bG9va3VwT3JDcmVhdGUpOgorICAgICAgICAoSlNDOjpS
ZWdFeHBDYWNoZTo6UmVnRXhwQ2FjaGUpOgorICAgICAgICAoSlNDOjpSZWdFeHBDYWNoZTo6YWRk
VG9TdHJvbmdDYWNoZSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDYWNoZS5oOgorICAgICAg
ICAoUmVnRXhwQ2FjaGUpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNw
cDoKKyAgICAgICAgKEpTQzo6UmVnRXhwQ2FjaGVkUmVzdWx0OjpsYXN0UmVzdWx0KToKKyAgICAg
ICAgKEpTQzo6UmVnRXhwQ2FjaGVkUmVzdWx0OjpzZXRJbnB1dCk6CisgICAgICAgICogcnVudGlt
ZS9SZWdFeHBDYWNoZWRSZXN1bHQuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwQ2FjaGVkUmVzdWx0
OjpSZWdFeHBDYWNoZWRSZXN1bHQpOgorICAgICAgICAoSlNDOjpSZWdFeHBDYWNoZWRSZXN1bHQ6
OnJlY29yZCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OlJlZ0V4cENvbnN0cnVjdG9yOjpSZWdFeHBDb25zdHJ1Y3Rvcik6CisgICAgICAg
IChKU0M6OlJlZ0V4cENvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6
OmNvbnN0cnVjdFJlZ0V4cCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5o
OgorICAgICAgICAoSlNDOjpSZWdFeHBDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKFJlZ0V4cENvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6UmVnRXhwQ29uc3RydWN0
b3I6OnBlcmZvcm1NYXRjaCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXku
Y3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBNYXRjaGVzQXJyYXk6OlJlZ0V4cE1hdGNoZXNBcnJh
eSk6CisgICAgICAgIChKU0M6OlJlZ0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRlKToKKyAgICAgICAg
KEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6
OlJlZ0V4cE1hdGNoZXNBcnJheTo6cmVpZnlBbGxQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBydW50
aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oOgorICAgICAgICAoUmVnRXhwTWF0Y2hlc0FycmF5KToK
KyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAg
ICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2Jq
ZWN0OjpSZWdFeHBPYmplY3QpOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjptYXRjaCk6CisgICAgICAgICog
cnVudGltZS9SZWdFeHBPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OnNldFJlZ0V4cCk6CisgICAgICAgIChK
U0M6OlJlZ0V4cE9iamVjdDo6c2V0TGFzdEluZGV4KToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2Jq
ZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBl
LmNwcDoKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jQ29tcGlsZSk6CisgICAgICAgICog
cnVudGltZS9SZWdFeHBQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwUHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvU21hbGxTdHJpbmdzLmNwcDoK
KyAgICAgICAgKEpTQzo6U21hbGxTdHJpbmdzOjppbml0aWFsaXplQ29tbW9uU3RyaW5ncyk6Cisg
ICAgICAgIChKU0M6OlNtYWxsU3RyaW5nczo6Y3JlYXRlRW1wdHlTdHJpbmcpOgorICAgICAgICAo
SlNDOjpTbWFsbFN0cmluZ3M6OmNyZWF0ZVNpbmdsZUNoYXJhY3RlclN0cmluZyk6CisgICAgICAg
IChKU0M6OlNtYWxsU3RyaW5nczo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcnVudGltZS9TbWFs
bFN0cmluZ3MuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OlNtYWxsU3RyaW5nczo6
c2luZ2xlQ2hhcmFjdGVyU3RyaW5nKToKKyAgICAgICAgKFNtYWxsU3RyaW5ncyk6CisgICAgICAg
ICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcDoKKyAgICAgICAgKEpTQzo6U3BhcnNl
QXJyYXlWYWx1ZU1hcDo6U3BhcnNlQXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6OlNwYXJz
ZUFycmF5VmFsdWVNYXA6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJy
YXlWYWx1ZU1hcDo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0
RGlyZWN0KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6cHV0KToKKyAgICAgICAg
KiBydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cmlj
dEV2YWxBY3RpdmF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaWN0RXZhbEFjdGl2YXRpb246
OlN0cmljdEV2YWxBY3RpdmF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cmljdEV2YWxBY3Rp
dmF0aW9uLmg6CisgICAgICAgIChKU0M6OlN0cmljdEV2YWxBY3RpdmF0aW9uOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpTdHJpY3RFdmFsQWN0aXZhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKiBydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U3Ry
aW5nQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cmlu
Z0NvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6OlN0cmluZ0NvbnN0cnVjdG9yOjpjcmVhdGVT
dHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcDoKKyAgICAgICAg
KEpTQzo6U3RyaW5nT2JqZWN0OjpTdHJpbmdPYmplY3QpOgorICAgICAgICAoSlNDOjpTdHJpbmdP
YmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0U3RyaW5nKToK
KyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5oOgorICAgICAgICAoSlNDOjpTdHJpbmdP
YmplY3Q6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKFN0cmluZ09iamVjdCk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpTdHJpbmdQcm90b3R5cGU6OlN0cmluZ1Byb3Rv
dHlwZSk6CisgICAgICAgIChKU0M6OlN0cmluZ1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgor
ICAgICAgICAoSlNDOjpyZW1vdmVVc2luZ1JlZ0V4cFNlYXJjaCk6CisgICAgICAgIChKU0M6OnJl
cGxhY2VVc2luZ1JlZ0V4cFNlYXJjaCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY01h
dGNoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU2VhcmNoKToKKyAgICAgICAgKEpT
Qzo6c3RyaW5nUHJvdG9GdW5jU3BsaXQpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90
eXBlLmg6CisgICAgICAgIChKU0M6OlN0cmluZ1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKiBydW50aW1lL1N0cmluZ1JlY3Vyc2lvbkNoZWNrZXIuaDoKKyAgICAgICAgKEpT
Qzo6U3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6cGVyZm9ybUNoZWNrKToKKyAgICAgICAgKEpTQzo6
U3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6flN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIpOgorICAgICAg
ICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNp
dGlvblRhYmxlOjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OlN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6ZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0aW9uKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0
b0RpY3Rpb25hcnlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0b0NhY2hl
YWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0b1Vu
Y2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OnNlYWxUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmcmVlemVUcmFuc2l0
aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRp
b24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlm
UGlubmVkKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24p
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmlzU2VhbGVkKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjppc0Zyb3plbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rp
b25hcnlTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5V2l0
aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5
V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFsbG9jYXRlUmFy
ZURhdGEpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNsb25lUmFyZURhdGFGcm9tKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZSk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjpnZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0
aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkZXNwZWNpZnlBbGxGdW5jdGlvbnMpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnB1dFNwZWNpZmljVmFsdWUpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZVByb3BlcnR5TWFwKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjpnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0UHJvdG90
eXBlV2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNldEdsb2Jh
bE9iamVjdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0T2JqZWN0VG9TdHJpbmdWYWx1
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVj
ZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFw
SWZOZWNlc3NhcnlGb3JQaW5uaW5nKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzZXRQcmV2
aW91c0lEKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcDoKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlQ2hhaW46OlN0cnVjdHVyZUNoYWluKToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZUNoYWluLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUNoYWluOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVDaGFpbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlQ2hhaW46OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFN0cnVj
dHVyZUNoYWluKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Z2V0KToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjpzZXRFbnVtZXJhdGlvbkNhY2hlKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjpwcm90b3R5cGVDaGFpbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHJvcGVy
dHlUYWJsZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHA6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
UmFyZURhdGE6OmNsb25lKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OlN0cnVj
dHVyZVJhcmVEYXRhKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmg6Cisg
ICAgICAgIChTdHJ1Y3R1cmVSYXJlRGF0YSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVS
YXJlRGF0YUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnNldFBy
ZXZpb3VzSUQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0T2JqZWN0VG9T
dHJpbmdWYWx1ZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUu
aDoKKyAgICAgICAgKFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6c2V0U2luZ2xlVHJhbnNpdGlvbik6CisgICAgICAgICog
cnVudGltZS9TeW1ib2xUYWJsZS5oOgorICAgICAgICAoSlNDOjpTaGFyZWRTeW1ib2xUYWJsZTo6
Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OlNoYXJlZFN5bWJvbFRhYmxlOjpTaGFyZWRTeW1ib2xUYWJsZSk6
CisgICAgICAgICogcnVudGltZS9WTS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAuCisgICAgICAgIChKU0M6OlZNOjpWTSk6Cisg
ICAgICAgIChKU0M6OlZNOjp+Vk0pOgorICAgICAgICAoSlNDOjpWTTo6Y3JlYXRlQ29udGV4dEdy
b3VwKToKKyAgICAgICAgKEpTQzo6Vk06OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlZNOjpjcmVh
dGVMZWFrZWQpOgorICAgICAgICAoSlNDOjpWTTo6c2hhcmVkSW5zdGFuY2VFeGlzdHMpOgorICAg
ICAgICAoSlNDOjpWTTo6c2hhcmVkSW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpWTTo6c2hhcmVk
SW5zdGFuY2VJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OlZNOjpnZXRIb3N0RnVuY3Rpb24pOgor
ICAgICAgICAoSlNDOjpWTTo6Q2xpZW50RGF0YTo6fkNsaWVudERhdGEpOgorICAgICAgICAoSlND
OjpWTTo6cmVzZXREYXRlQ2FjaGUpOgorICAgICAgICAoSlNDOjpWTTo6c3RhcnRTYW1wbGluZyk6
CisgICAgICAgIChKU0M6OlZNOjpzdG9wU2FtcGxpbmcpOgorICAgICAgICAoSlNDOjpWTTo6ZGlz
Y2FyZEFsbENvZGUpOgorICAgICAgICAoSlNDOjpWTTo6ZHVtcFNhbXBsZURhdGEpOgorICAgICAg
ICAoSlNDOjpWTTo6YWRkU291cmNlUHJvdmlkZXJDYWNoZSk6CisgICAgICAgIChKU0M6OlZNOjpj
bGVhclNvdXJjZVByb3ZpZGVyQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Vk06OnJlbGVhc2VFeGVj
dXRhYmxlTWVtb3J5KToKKyAgICAgICAgKEpTQzo6cmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkpOgor
ICAgICAgICAoSlNDOjpWTTo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMpOgorICAgICAgICAoSlND
OjpWTTo6YWRkUmVnRXhwVG9UcmFjZSk6CisgICAgICAgIChKU0M6OlZNOjpkdW1wUmVnRXhwVHJh
Y2UpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmguCisgICAgICAgIChWTSk6CisgICAgICAgIChK
U0M6OlZNOjppc1NoYXJlZEluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6Vk06OnVzaW5nQVBJKToK
KyAgICAgICAgKEpTQzo6Vk06OmlzSW5pdGlhbGl6aW5nT2JqZWN0KToKKyAgICAgICAgKEpTQzo6
Vk06OnNldEluaXRpYWxpemluZ09iamVjdENsYXNzKToKKyAgICAgICAgKEpTQzo6V2Vha1NldDo6
aGVhcCk6CisgICAgICAgICogcnVudGltZS9Xcml0ZUJhcnJpZXIuaDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgIChKU0M6OldyaXRlQmFycmllckJhc2U6OnNldCk6CisgICAgICAgIChKU0M6Oldy
aXRlQmFycmllckJhc2U6OnNldE1heUJlTnVsbCk6CisgICAgICAgIChKU0M6OldyaXRlQmFycmll
ckJhc2U6OnNldEVhcmx5VmFsdWUpOgorICAgICAgICAoSlNDOjpXcml0ZUJhcnJpZXI6OldyaXRl
QmFycmllcik6CisgICAgICAgICogdGVzdFJlZ0V4cC5jcHA6CisgICAgICAgIChHbG9iYWxPYmpl
Y3QpOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAoR2xvYmFsT2Jq
ZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKHRlc3RPbmVSZWdFeHApOgorICAgICAg
ICAocGFyc2VSZWdFeHBMaW5lKToKKyAgICAgICAgKHJ1bkZyb21GaWxlcyk6CisgICAgICAgIChy
ZWFsTWFpbik6CisgICAgICAgICogeWFyci9ZYXJySW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEJ5
dGVjb2RlUGF0dGVybik6CisgICAgICAgICogeWFyci9ZYXJySklULmNwcDoKKyAgICAgICAgKFlh
cnJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpjb21waWxl
KToKKyAgICAgICAgKEpTQzo6WWFycjo6aml0Q29tcGlsZSk6CisgICAgICAgICogeWFyci9ZYXJy
SklULmg6CisgICAgICAgIChKU0MpOgorCiAyMDEzLTA0LTE4ICBYdWVmZWkgUmVuICA8eHJlbkBi
bGFja2JlcnJ5LmNvbT4KIAogICAgICAgICByZW1vdmUgYnVpbGQgd2FybmluZyh1bnVzZWQgcGFy
YW1ldGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24g
MTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0yNDcsNyArMjQ3LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAg
ICBydW50aW1lL0pTRGF0ZU1hdGguY3BwCiAgICAgcnVudGltZS9KU0Z1bmN0aW9uLmNwcAogICAg
IHJ1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAotICAgIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNw
cAorICAgIHJ1bnRpbWUvVk0uY3BwCiAgICAgcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKICAg
ICBydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAogICAgIHJ1bnRpbWUvSlNQcm94
eS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShy
ZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQkod29ya2luZyBjb3B5KQpAQCAtNjQ3LDggKzY0Nyw4IEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlv
bi5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0V4cG9ydE1hY3Jvcy5oIFwKLQlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwIFwKLQlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaCBcCisJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25z
LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5j
dGlvbnMuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0pTQ1R5cGVkQXJyYXlTdHVi
cy5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRB
cnJheVN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDggQEAgcHVibGljOiBcCiAg
ICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOyBcCiAgICAgc3RhdGljIEpTIyNu
YW1lIyNBcnJheSogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8bmFtZSMjQXJyYXk+IGltcGwpIFwKICAgICB7
IFwKLSAgICAgICAgSlMjI25hbWUjI0FycmF5KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxs
b2NhdGVDZWxsPEpTIyNuYW1lIyNBcnJheT4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVh
cCkpIEpTIyNuYW1lIyNBcnJheShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7IFwKLSAg
ICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7IFwK
KyAgICAgICAgSlMjI25hbWUjI0FycmF5KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2Nh
dGVDZWxsPEpTIyNuYW1lIyNBcnJheT4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKUyMjbmFt
ZSMjQXJyYXkoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOyBcCisgICAgICAgIHB0ci0+
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsgXAogICAgICAgICByZXR1cm4gcHRy
OyBcCiAgICAgfVwKIFwKQEAgLTYwLDkgKzYwLDkgQEAgcHVibGljOiBcCiAgICAgc3RhdGljIHZv
aWQgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wpO1wKICAgICBzdGF0aWMgY29uc3QgSlNDOjpD
bGFzc0luZm8gc19pbmZvO1wKIFwKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKVwKKyAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKVwKICAgICB7XAotICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7XAorICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pO1wKICAgICB9XAogXAogICAgIHN0YXRpYyB2b2lk
IGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlIG1vZGUgPSBKU0M6OkV4
Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpO1wKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOiBcCiAg
ICAgUmVmUHRyPG5hbWUjI0FycmF5PiBtX2ltcGw7XAogcHJvdGVjdGVkOlwKICAgICBKUyMjbmFt
ZSMjQXJyYXkoSlNDOjpTdHJ1Y3R1cmUqLCBKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8bmFt
ZSMjQXJyYXk+KTtcCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkpTR2xvYmFsRGF0YSYp
O1wKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTtcCiAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVz
IHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3Ro
SXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1
Y3R1cmVGbGFnczsgXAogICAgIEpTQzo6SlNWYWx1ZSBnZXRCeUluZGV4KEpTQzo6RXhlY1N0YXRl
KiwgdW5zaWduZWQgaW5kZXgpO1wKICAgICB2b2lkIGluZGV4U2V0dGVyKEpTQzo6RXhlY1N0YXRl
KiwgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSk7XApAQCAtODMsMTkgKzgzLDE5IEBAIHBy
b3RlY3RlZDpcCiBjb25zdCBDbGFzc0luZm8gSlMjI25hbWUjI0FycmF5OjpzX2luZm8gPSB7ICNu
YW1lICJBcnJheSIgLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
IyNuYW1lIyNBcnJheSkgfTtcCiBcCiBKUyMjbmFtZSMjQXJyYXk6OkpTIyNuYW1lIyNBcnJheShT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1Jl
ZlB0cjxuYW1lIyNBcnJheT4gaW1wbClcCi0gICAgOiBCYXNlKGdsb2JhbE9iamVjdC0+Z2xvYmFs
RGF0YSgpLCBzdHJ1Y3R1cmUpXAorICAgIDogQmFzZShnbG9iYWxPYmplY3QtPnZtKCksIHN0cnVj
dHVyZSlcCiAgICAgLCBtX2ltcGwoaW1wbClcCiB7XAogfVwKIFwKLXZvaWQgSlMjI25hbWUjI0Fy
cmF5OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpXAordm9pZCBKUyMj
bmFtZSMjQXJyYXk6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSlcCiB7XAotICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKGdsb2JhbERhdGEpO1wKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7XAog
ICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIGRlc2NyaXB0b3IoJkpTIyNuYW1lIyNBcnJheTo6c19p
bmZvLCBPQkpFQ1RfT0ZGU0VUT0YoSlMjI25hbWUjI0FycmF5LCBtX3N0b3JhZ2UpLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlMjI25hbWUjI0FycmF5LCBtX3N0b3JhZ2VMZW5ndGgpKTtcCi0gICAgZ2xvYmFs
RGF0YS5yZWdpc3RlclR5cGVkQXJyYXlEZXNjcmlwdG9yKG1faW1wbC5nZXQoKSwgZGVzY3JpcHRv
cik7XAorICAgIHZtLnJlZ2lzdGVyVHlwZWRBcnJheURlc2NyaXB0b3IobV9pbXBsLmdldCgpLCBk
ZXNjcmlwdG9yKTtcCiAgICAgbV9zdG9yYWdlID0gbV9pbXBsLT5kYXRhKCk7XAogICAgIG1fc3Rv
cmFnZUxlbmd0aCA9IG1faW1wbC0+bGVuZ3RoKCk7XAotICAgIHB1dERpcmVjdChnbG9iYWxEYXRh
LCBnbG9iYWxEYXRhLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIobV9zdG9yYWdlTGVu
Z3RoKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOyBcCisgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKG1fc3RvcmFnZUxlbmd0aCks
IERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsgXAogICAgIEFTU0VSVChpbmhlcml0
cygmc19pbmZvKSk7XAogfVwKIFwKQEAgLTE4NCw3ICsxODQsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgaW50MzJfdCBsZW5ndGggPSBjYWxsRnJhbWUt
PmFyZ3VtZW50KDApLnRvSW50MzIoY2FsbEZyYW1lKTsgXAogICAgIGlmIChsZW5ndGggPCAwKSBc
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7IFwKLSAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTIyNuYW1lIyNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGNh
bGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
Y2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKTsgXAor
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSlMjI25hbWUjI0FycmF5OjpjcmVhdGVTdHJ1Y3R1
cmUoY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2Fs
bEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKTsgXAogICAg
IFJlZlB0cjxuYW1lIyNBcnJheT4gYnVmZmVyID0gbmFtZSMjQXJyYXk6OmNyZWF0ZShsZW5ndGgp
OyBcCiAgICAgaWYgKCFidWZmZXIpIFwKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihjYWxs
RnJhbWUsIGNyZWF0ZVJhbmdlRXJyb3IoY2FsbEZyYW1lLCAiQXJyYXlCdWZmZXIgc2l6ZSBpcyBu
b3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKSk7IFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5vcmRlcgo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUub3JkZXIJKHJldmlzaW9uIDE0ODY4MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5vcmRlcgkod29ya2luZyBjb3B5
KQpAQCAtMjMsNyArMjMsNyBAQCBfX1pOM0pTQ0wyM2luaXRpYWxpemVUaHJlYWRpbmdPbmNlRXYK
IF9fWk4zV1RGMTBTdHJpbmdJbXBsNWVtcHR5RXYKIF9fWk4zV1RGMTNXVEZUaHJlYWREYXRhQzFF
dgogX19aTjNXVEYxMVN0YWNrQm91bmRzMTBpbml0aWFsaXplRXYKLV9fWk4zSlNDMTJKU0dsb2Jh
bERhdGExMHN0b3JlVlB0cnNFdgorX19aTjNKU0MxMlZNMTBzdG9yZVZQdHJzRXYKIF9fWk4zSlND
N0pTQXJyYXlDMUVOU182SlNDZWxsMjBWUHRyU3RlYWxpbmdIYWNrVHlwZUUKIF9fWk4zSlNDMTBK
U0Z1bmN0aW9uQzFFTlNfNkpTQ2VsbDIwVlB0clN0ZWFsaW5nSGFja1R5cGVFCiBfX1pOM1dURjE1
aW5pdGlhbGl6ZURhdGVzRXYKQEAgLTExOSw2NSArMTE5LDY1IEBAIF9fWk4zV1RGMTJBdG9taWNT
dHJpbmc2cmVtb3ZlRVBOU18xMFN0cmkKIF9KU0dsb2JhbENvbnRleHRDcmVhdGUKIF9fWk4zSlND
NkpTTG9jazRsb2NrRU5TXzE0SlNMb2NrQmVoYXZpb3JFCiBfX1pOM0pTQ0wxN2NyZWF0ZUpTTG9j
a0NvdW50RXYKLV9fWk4zSlNDMTJKU0dsb2JhbERhdGExNHNoYXJlZEluc3RhbmNlRXYKLV9fWk4z
SlNDMTJKU0dsb2JhbERhdGFDMkVOUzBfMTRHbG9iYWxEYXRhVHlwZUVOU184SGVhcFR5cGVFCitf
X1pOM0pTQzEyVk0xNHNoYXJlZEluc3RhbmNlRXYKK19fWk4zSlNDMTJWTUMyRU5TMF8xNFZNVHlw
ZUVOU184SGVhcFR5cGVFCiBfX1pOM0pTQzIxY3JlYXRlSWRlbnRpZmllclRhYmxlRXYKLV9fWk4z
SlNDMTdDb21tb25JZGVudGlmaWVyc0MxRVBOU18xMkpTR2xvYmFsRGF0YUUKLV9fWk4zSlNDMTdD
b21tb25JZGVudGlmaWVyc0MyRVBOU18xMkpTR2xvYmFsRGF0YUUKLV9fWk4zSlNDMTBJZGVudGlm
aWVyM2FkZEVQTlNfMTJKU0dsb2JhbERhdGFFUEtjCitfX1pOM0pTQzE3Q29tbW9uSWRlbnRpZmll
cnNDMUVQTlNfMTJWTUUKK19fWk4zSlNDMTdDb21tb25JZGVudGlmaWVyc0MyRVBOU18xMlZNRQor
X19aTjNKU0MxMElkZW50aWZpZXIzYWRkRVBOU18xMlZNRVBLYwogX19aTjNKU0MxNUlkZW50aWZp
ZXJUYWJsZTNhZGRJUEtjTlNfMjdJZGVudGlmaWVyQ1N0cmluZ1RyYW5zbGF0b3JFRUVTdDRwYWly
SU4zV1RGMjlIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlcklOUzZfOUhhc2hUYWJsZUlQTlM2
XzEwU3RyaW5nSW1wbEVTQV9OUzZfMTdJZGVudGl0eUV4dHJhY3RvcklTQV9FRU5TNl8xMFN0cmlu
Z0hhc2hFTlM2XzEwSGFzaFRyYWl0c0lTQV9FRVNGX0VFU0FfRUViRVRfCiBfX1pOM1dURjlIYXNo
VGFibGVJUE5TXzEwU3RyaW5nSW1wbEVTMl9OU18xN0lkZW50aXR5RXh0cmFjdG9ySVMyX0VFTlNf
MTBTdHJpbmdIYXNoRU5TXzEwSGFzaFRyYWl0c0lTMl9FRVM3X0U2ZXhwYW5kRXYKIF9fWk4zV1RG
OUhhc2hUYWJsZUlQS2NTdDRwYWlySVMyX05TXzZSZWZQdHJJTlNfMTBTdHJpbmdJbXBsRUVFRU5T
XzE4UGFpckZpcnN0RXh0cmFjdG9ySVM3X0VFTlNfN1B0ckhhc2hJUzJfRUVOU18xNFBhaXJIYXNo
VHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTMl9FRU5TRF9JUzZfRUVFRVNFX0U2ZXhwYW5kRXYKIF9f
Wk4zV1RGOUhhc2hUYWJsZUlQTlNfMTBTdHJpbmdJbXBsRVMyX05TXzE3SWRlbnRpdHlFeHRyYWN0
b3JJUzJfRUVOU18xMFN0cmluZ0hhc2hFTlNfMTBIYXNoVHJhaXRzSVMyX0VFUzdfRTRmaW5kSVMy
X05TXzIySWRlbnRpdHlIYXNoVHJhbnNsYXRvcklTMl9TMl9TNV9FRUVFTlNfMTdIYXNoVGFibGVJ
dGVyYXRvcklTMl9TMl9TNF9TNV9TN19TN19FRVJLVF8KLV9fWk4zSlNDMTBJZGVudGlmaWVyQzFF
UE5TXzEySlNHbG9iYWxEYXRhRVBLYworX19aTjNKU0MxMElkZW50aWZpZXJDMUVQTlNfMTJWTUVQ
S2MKIF9fWk4zSlNDMTJTbWFsbFN0cmluZ3NDMUV2CiBfX1pOM0pTQzE5RXhlY3V0YWJsZUFsbG9j
YXRvcjE3aW50aWFsaXplUGFnZVNpemVFdgogX19aTkszSlNDMTlFeGVjdXRhYmxlQWxsb2NhdG9y
N2lzVmFsaWRFdgogX19aTjNXVEYxMU9TQWxsb2NhdG9yMThyZXNlcnZlVW5jb21taXR0ZWRFbU5T
MF81VXNhZ2VFYmIKIF9fWk4zSlNDMTRFeGVjdXRhYmxlUG9vbDExc3lzdGVtQWxsb2NFbQogX19a
TjNXVEYxMU9TQWxsb2NhdG9yNmNvbW1pdEVQdm1iYgotX19aTjNKU0M1TGV4ZXJDMUVQTlNfMTJK
U0dsb2JhbERhdGFFCitfX1pOM0pTQzVMZXhlckMxRVBOU18xMlZNRQogX19aTjNKU0MxMVBhcnNl
ckFyZW5hQzFFdgogX19aTjNKU0MxMVBhcnNlckFyZW5hQzJFdgogX19aTjNKU0MxNFRpbWVvdXRD
aGVja2VyQzFFdgotX19aTjNKU0M0SGVhcEMxRVBOU18xMkpTR2xvYmFsRGF0YUUKLV9fWk4zSlND
NEhlYXBDMkVQTlNfMTJKU0dsb2JhbERhdGFFCi1fX1pOM0pTQzExTWFya2VkU3BhY2VDMUVQTlNf
MTJKU0dsb2JhbERhdGFFCitfX1pOM0pTQzRIZWFwQzFFUE5TXzEyVk1FCitfX1pOM0pTQzRIZWFw
QzJFUE5TXzEyVk1FCitfX1pOM0pTQzExTWFya2VkU3BhY2VDMUVQTlNfMTJWTUUKIF9fWk4zSlND
MjVEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrQzFFUE5TXzRIZWFwRQogX19aTjNKU0MyNURlZmF1
bHRHQ0FjdGl2aXR5Q2FsbGJhY2sxN2NvbW1vbkNvbnN0cnVjdG9yRVBOU180SGVhcEVQMTFfX0NG
UnVuTG9vcAogX19aTjNKU0MxNE1hY2hpbmVUaHJlYWRzQzFFUE5TXzRIZWFwRQogX19aTjNKU0M5
TWFya1N0YWNrMThpbml0aWFsaXplUGFnZXNpemVFdgogX19aTjNXVEYxMU9TQWxsb2NhdG9yMTZy
ZXNlcnZlQW5kQ29tbWl0RW1OUzBfNVVzYWdlRWJiCi1fX1pOM0pTQzEwSGFuZGxlSGVhcEMxRVBO
U18xMkpTR2xvYmFsRGF0YUUKK19fWk4zSlNDMTBIYW5kbGVIZWFwQzFFUE5TXzEyVk1FCiBfX1pO
M1dURjEwQmxvY2tTdGFja0lOM0pTQzEwSGFuZGxlSGVhcDROb2RlRUU0Z3Jvd0V2CiBfX1pOM1dU
RjZWZWN0b3JJUE4zSlNDMTBIYW5kbGVIZWFwNE5vZGVFTG0wRUUxNXJlc2VydmVDYXBhY2l0eUVt
CiBfX1pOM0pTQzExSGFuZGxlU3RhY2tDMUV2CiBfX1pOM1dURjEwQmxvY2tTdGFja0lOM0pTQzdK
U1ZhbHVlRUU0Z3Jvd0V2CiBfX1pOM1dURjZWZWN0b3JJUE4zSlNDN0pTVmFsdWVFTG0wRUUxNXJl
c2VydmVDYXBhY2l0eUVtCiBfX1pOM0pTQzI1RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFja2NsRXYK
LV9fWk4zSlNDMTFSZWdFeHBDYWNoZUMxRVBOU18xMkpTR2xvYmFsRGF0YUUKLV9fWk4zSlNDMTFJ
bnRlcnByZXRlckMxRVJOU18xMkpTR2xvYmFsRGF0YUUKK19fWk4zSlNDMTFSZWdFeHBDYWNoZUMx
RVBOU18xMlZNRQorX19aTjNKU0MxMUludGVycHJldGVyQzFFUk5TXzEyVk1FCiBfX1pOM0pTQzEw
SGFuZGxlSGVhcDEyd3JpdGVCYXJyaWVyRVBOU183SlNWYWx1ZUVSS1MxXwogX19aTjNKU0MxMkpT
U3RhY2syM2FkZFRvQ29tbWl0dGVkQnl0ZUNvdW50RWwKIF9fWk4zSlNDMTFNYXJrZWRTcGFjZTIx
YWxsb2NhdGVGcm9tU2l6ZUNsYXNzRVJOUzBfOVNpemVDbGFzc0UKIF9fWk4zSlNDMTFNYXJrZWRT
cGFjZTEzYWxsb2NhdGVCbG9ja0VSTlMwXzlTaXplQ2xhc3NFCi1fX1pOM0pTQzExTWFya2VkQmxv
Y2s2Y3JlYXRlRVBOU18xMkpTR2xvYmFsRGF0YUVtCitfX1pOM0pTQzExTWFya2VkQmxvY2s2Y3Jl
YXRlRVBOU18xMlZNRW0KIF9fWk4zV1RGMjFQYWdlQWxsb2NhdGlvbkFsaWduZWQ4YWxsb2NhdGVF
bW1OU18xMU9TQWxsb2NhdG9yNVVzYWdlRWJiCiBfX1pOM1dURjlIYXNoVGFibGVJUE4zSlNDMTFN
YXJrZWRCbG9ja0VTM19OU18xN0lkZW50aXR5RXh0cmFjdG9ySVMzX0VFTlNfN1B0ckhhc2hJUzNf
RUVOU18xMEhhc2hUcmFpdHNJUzNfRUVTOV9FNnJlaGFzaEVpCiBfX1pOM0pTQzZKU0NlbGxEMUV2
Ci1fX1pOM0pTQzlTdHJ1Y3R1cmVDMUVSTlNfMTJKU0dsb2JhbERhdGFFCi1fX1pOM0pTQzZTdHJv
bmdJTlNfOVN0cnVjdHVyZUVFM3NldEVSTlNfMTJKU0dsb2JhbERhdGFFUFMxXwotX19aTjNKU0M5
U3RydWN0dXJlNmNyZWF0ZUVSTlNfMTJKU0dsb2JhbERhdGFFTlNfN0pTVmFsdWVFUktOU184VHlw
ZUluZm9FalBLTlNfOUNsYXNzSW5mb0UKLV9fWk4zSlNDOVN0cnVjdHVyZUMxRVJOU18xMkpTR2xv
YmFsRGF0YUVOU183SlNWYWx1ZUVSS05TXzhUeXBlSW5mb0VqUEtOU185Q2xhc3NJbmZvRQorX19a
TjNKU0M5U3RydWN0dXJlQzFFUk5TXzEyVk1FCitfX1pOM0pTQzZTdHJvbmdJTlNfOVN0cnVjdHVy
ZUVFM3NldEVSTlNfMTJWTUVQUzFfCitfX1pOM0pTQzlTdHJ1Y3R1cmU2Y3JlYXRlRVJOU18xMlZN
RU5TXzdKU1ZhbHVlRVJLTlNfOFR5cGVJbmZvRWpQS05TXzlDbGFzc0luZm9FCitfX1pOM0pTQzlT
dHJ1Y3R1cmVDMUVSTlNfMTJWTUVOU183SlNWYWx1ZUVSS05TXzhUeXBlSW5mb0VqUEtOU185Q2xh
c3NJbmZvRQogX19aTjNXVEYxM3d0ZlRocmVhZERhdGFFdgogX19aTjNKU0MyN3N0YXJ0UHJvZmls
ZXJTZXJ2ZXJJZk5lZWRlZEV2CiArW1Byb2ZpbGVyU2VydmVyIHNoYXJlZFByb2ZpbGVTZXJ2ZXJd
CiAtW1Byb2ZpbGVyU2VydmVyIGluaXRdCi1fX1pOM0pTQzlKSVRUaHVua3NDMUVQTlNfMTJKU0ds
b2JhbERhdGFFCi1fX1pOM0pTQzlKSVRUaHVua3NDMkVQTlNfMTJKU0dsb2JhbERhdGFFCi1fX1pO
M0pTQzNKSVRDMUVQTlNfMTJKU0dsb2JhbERhdGFFUE5TXzlDb2RlQmxvY2tFCi1fX1pOM0pTQzNK
SVRDMkVQTlNfMTJKU0dsb2JhbERhdGFFUE5TXzlDb2RlQmxvY2tFCi1fX1pOM0pTQzNKSVQzNXBy
aXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzRVBOM1dURjZSZWZQdHJJTlNfMTRFeGVj
dXRhYmxlUG9vbEVFRVBOU18xMkpTR2xvYmFsRGF0YUVQTlNfMTlUcmFtcG9saW5lU3RydWN0dXJl
RQorX19aTjNKU0M5SklUVGh1bmtzQzFFUE5TXzEyVk1FCitfX1pOM0pTQzlKSVRUaHVua3NDMkVQ
TlNfMTJWTUUKK19fWk4zSlNDM0pJVEMxRVBOU18xMlZNRVBOU185Q29kZUJsb2NrRQorX19aTjNK
U0MzSklUQzJFUE5TXzEyVk1FUE5TXzlDb2RlQmxvY2tFCitfX1pOM0pTQzNKSVQzNXByaXZhdGVD
b21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzRVBOM1dURjZSZWZQdHJJTlNfMTRFeGVjdXRhYmxl
UG9vbEVFRVBOU18xMlZNRVBOU18xOVRyYW1wb2xpbmVTdHJ1Y3R1cmVFCiBfX1pOM0pTQzIwTWFj
cm9Bc3NlbWJsZXJYODZfNjQxM2JyYW5jaFRlc3RQdHJFTlNfMjNNYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbjE1UmVzdWx0Q29uZGl0aW9uRU5TXzEyWDg2UmVnaXN0ZXJzMTBSZWdpc3RlcklERVM0Xwog
X19aTjNKU0MxMlg4NkFzc2VtYmxlcjIzWDg2SW5zdHJ1Y3Rpb25Gb3JtYXR0ZXIxMW9uZUJ5dGVP
cDY0RU5TMF8xNU9uZUJ5dGVPcGNvZGVJREVpTlNfMTJYODZSZWdpc3RlcnMxMFJlZ2lzdGVySURF
CiBfX1pOM0pTQzEyWDg2QXNzZW1ibGVyM2pDQ0VOUzBfOUNvbmRpdGlvbkUKQEAgLTE5Miw3ICsx
OTIsNyBAQCBfX1pOM0pTQzIwTWFjcm9Bc3NlbWJsZXJYODZfNjQxM2JyYW5jaFRlCiBfX1pOM0pT
QzEyWDg2QXNzZW1ibGVyMjNYODZJbnN0cnVjdGlvbkZvcm1hdHRlcjlvbmVCeXRlT3BFTlMwXzE1
T25lQnl0ZU9wY29kZUlERU5TXzEyWDg2UmVnaXN0ZXJzMTBSZWdpc3RlcklERQogX19aTjNXVEY2
VmVjdG9ySWNMbTEyOEVFMTRleHBhbmRDYXBhY2l0eUVtCiBfX1pOM1dURjZWZWN0b3JJY0xtMTI4
RUU0Z3Jvd0VtCi1fX1pOM0pTQzNKSVQyN3ByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbEVQTlNf
MTJKU0dsb2JhbERhdGFFYgorX19aTjNKU0MzSklUMjdwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNh
bGxFUE5TXzEyVk1FYgogX19aTkszSlNDMjJBYnN0cmFjdE1hY3JvQXNzZW1ibGVySU5TXzEyWDg2
QXNzZW1ibGVyRUU0SnVtcDRsaW5rRVBTMl8KIF9fWk4zV1RGMTBSZWZDb3VudGVkSU4zSlNDMTRF
eGVjdXRhYmxlUG9vbEVFNWRlcmVmRXYKIF9fWk4zSlNDMTRNYWNoaW5lVGhyZWFkczI5bWFrZVVz
YWJsZUZyb21NdWx0aXBsZVRocmVhZHNFdgpAQCAtMjAwLDcgKzIwMCw3IEBAIF9KU0dsb2JhbENv
bnRleHRDcmVhdGVJbkdyb3VwCiBfX1pOM0pTQzRIZWFwMTZhY3Rpdml0eUNhbGxiYWNrRXYKIF9f
Wk4zSlNDMjVEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrMTFzeW5jaHJvbml6ZUV2CiBfX1pOM0pT
QzE0VGltZW91dENoZWNrZXI1cmVzZXRFdgotX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0bndFbVBO
U18xMkpTR2xvYmFsRGF0YUUKK19fWk4zSlNDMTRKU0dsb2JhbE9iamVjdG53RW1QTlNfMTJWTUUK
IF9fWk4zV1RGMTJyYW5kb21OdW1iZXJFdgogX19aTjNXVEYyOWNyeXB0b2dyYXBoaWNhbGx5UmFu
ZG9tTnVtYmVyRXYKIF9fWk4zV1RGMzVjcnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlc0Zyb21P
U0VQaG0KQEAgLTIwOCw1MiArMjA4LDUyIEBAIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDRpbml0
RVBOU184SlNPYmoKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDVyZXNldEVOU183SlNWYWx1ZUUK
IF9fWk4zSlNDMTdGdW5jdGlvblByb3RvdHlwZUMxRVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xv
YmFsT2JqZWN0RVBOU185U3RydWN0dXJlRQogX19aTjNKU0MxN0Z1bmN0aW9uUHJvdG90eXBlQzJF
UE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1cmVFCi1fX1pO
M0pTQzE2SW50ZXJuYWxGdW5jdGlvbkMyRVBOU18xMkpTR2xvYmFsRGF0YUVQTlNfMTRKU0dsb2Jh
bE9iamVjdEVQTlNfOVN0cnVjdHVyZUVSS05TXzEwSWRlbnRpZmllckUKK19fWk4zSlNDMTZJbnRl
cm5hbEZ1bmN0aW9uQzJFUE5TXzEyVk1FUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1
cmVFUktOU18xMElkZW50aWZpZXJFCiBfX1pOM0pTQzI0SlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0
QzJFUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1cmVFCiBfX1pOM0pTQzdVU3RyaW5n
QzFFUEtjCi1fX1pOM0pTQzEyU21hbGxTdHJpbmdzMTdjcmVhdGVFbXB0eVN0cmluZ0VQTlNfMTJK
U0dsb2JhbERhdGFFCitfX1pOM0pTQzEyU21hbGxTdHJpbmdzMTdjcmVhdGVFbXB0eVN0cmluZ0VQ
TlNfMTJWTUUKIF9fWk4zSlNDOVN0cnVjdHVyZTQwYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlz
dGluZ1N0cnVjdHVyZUVQUzBfUktOU18xMElkZW50aWZpZXJFalBOU182SlNDZWxsRVJtCi1fX1pO
M0pTQzlTdHJ1Y3R1cmUzZ2V0RVJOU18xMkpTR2xvYmFsRGF0YUVQTjNXVEYxMFN0cmluZ0ltcGxF
UmpSUE5TXzZKU0NlbGxFCi1fX1pOM0pTQzlTdHJ1Y3R1cmUyMWFkZFByb3BlcnR5VHJhbnNpdGlv
bkVSTlNfMTJKU0dsb2JhbERhdGFFUFMwX1JLTlNfMTBJZGVudGlmaWVyRWpQTlNfNkpTQ2VsbEVS
bQorX19aTjNKU0M5U3RydWN0dXJlM2dldEVSTlNfMTJWTUVQTjNXVEYxMFN0cmluZ0ltcGxFUmpS
UE5TXzZKU0NlbGxFCitfX1pOM0pTQzlTdHJ1Y3R1cmUyMWFkZFByb3BlcnR5VHJhbnNpdGlvbkVS
TlNfMTJWTUVQUzBfUktOU18xMElkZW50aWZpZXJFalBOU182SlNDZWxsRVJtCiBfX1pOM0pTQzlT
dHJ1Y3R1cmUxN2NyZWF0ZVByb3BlcnR5TWFwRWoKIF9fWk4zV1RGMTRkZWxldGVPd25lZFB0cklO
M0pTQzEzUHJvcGVydHlUYWJsZUVFRXZQVF8KLV9fWk4zSlNDOVN0cnVjdHVyZTE2cHV0U3BlY2lm
aWNWYWx1ZUVSTlNfMTJKU0dsb2JhbERhdGFFUktOU18xMElkZW50aWZpZXJFalBOU182SlNDZWxs
RQotX19aTjNKU0MyNFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTNhZGRFUk5TXzEySlNHbG9iYWxE
YXRhRVBOU185U3RydWN0dXJlRQotX19aTjNKU0M5U3RydWN0dXJlMjhhZGRQcm9wZXJ0eVdpdGhv
dXRUcmFuc2l0aW9uRVJOU18xMkpTR2xvYmFsRGF0YUVSS05TXzEwSWRlbnRpZmllckVqUE5TXzZK
U0NlbGxFCitfX1pOM0pTQzlTdHJ1Y3R1cmUxNnB1dFNwZWNpZmljVmFsdWVFUk5TXzEyVk1FUktO
U18xMElkZW50aWZpZXJFalBOU182SlNDZWxsRQorX19aTjNKU0MyNFN0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZTNhZGRFUk5TXzEyVk1FUE5TXzlTdHJ1Y3R1cmVFCitfX1pOM0pTQzlTdHJ1Y3R1cmUy
OGFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb25FUk5TXzEyVk1FUktOU18xMElkZW50aWZpZXJF
alBOU182SlNDZWxsRQogX19aTjNKU0M4SlNPYmplY3QyM2FsbG9jYXRlUHJvcGVydHlTdG9yYWdl
RW1tCiBfX1pOM0pTQzE3RnVuY3Rpb25Qcm90b3R5cGUyMWFkZEZ1bmN0aW9uUHJvcGVydGllc0VQ
TlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0cnVjdHVyZUVQUE5TXzEw
SlNGdW5jdGlvbkVTOV8KIF9fWk4zSlNDMTBKU0Z1bmN0aW9uQzFFUE5TXzlFeGVjU3RhdGVFUE5T
XzE0SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1cmVFaVJLTlNfMTBJZGVudGlmaWVyRVBGUHZT
Ml9FCiBfX1pOM0pTQzEwSlNGdW5jdGlvbkMyRVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xvYmFs
T2JqZWN0RVBOU185U3RydWN0dXJlRWlSS05TXzEwSWRlbnRpZmllckVQRlB2UzJfRQotX19aTjNK
U0MxMkpTR2xvYmFsRGF0YTE1Z2V0SG9zdEZ1bmN0aW9uRVBGUHZQTlNfOUV4ZWNTdGF0ZUVFCi1f
X1pOM0pTQzlKSVRUaHVua3MxNmhvc3RGdW5jdGlvblN0dWJFUE5TXzEySlNHbG9iYWxEYXRhRVBG
UHZQTlNfOUV4ZWNTdGF0ZUVFCitfX1pOM0pTQzEyVk0xNWdldEhvc3RGdW5jdGlvbkVQRlB2UE5T
XzlFeGVjU3RhdGVFRQorX19aTjNKU0M5SklUVGh1bmtzMTZob3N0RnVuY3Rpb25TdHViRVBOU18x
MlZNRVBGUHZQTlNfOUV4ZWNTdGF0ZUVFCiBfX1pOM1dURjdIYXNoTWFwSVBGUHZQTjNKU0M5RXhl
Y1N0YXRlRUVOUzJfNFdlYWtJTlMyXzE2TmF0aXZlRXhlY3V0YWJsZUVFRU5TXzdQdHJIYXNoSVM2
X0VFTlNfMTBIYXNoVHJhaXRzSVM2X0VFTlNDX0lTOV9FRUUzYWRkRVJLUzZfUktTOV8KIF9fWk4z
V1RGOUhhc2hUYWJsZUlQRlB2UE4zSlNDOUV4ZWNTdGF0ZUVFU3Q0cGFpcklTNl9OUzJfNFdlYWtJ
TlMyXzE2TmF0aXZlRXhlY3V0YWJsZUVFRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTQl9FRU5T
XzdQdHJIYXNoSVM2X0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzZfRUVO
U0hfSVNBX0VFRUVTSV9FNmV4cGFuZEV2Ci1fX1pOM0pTQzNKSVQyN3ByaXZhdGVDb21waWxlQ1RJ
TmF0aXZlQ2FsbEVOM1dURjEwUGFzc1JlZlB0cklOU18xNEV4ZWN1dGFibGVQb29sRUVFUE5TXzEy
SlNHbG9iYWxEYXRhRVBGUHZQTlNfOUV4ZWNTdGF0ZUVFCi1fX1pOM0pTQzE2TmF0aXZlRXhlY3V0
YWJsZTZjcmVhdGVFUk5TXzEySlNHbG9iYWxEYXRhRU5TXzIxTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
RVBGUHZQTlNfOUV4ZWNTdGF0ZUVFUzNfUzhfCitfX1pOM0pTQzNKSVQyN3ByaXZhdGVDb21waWxl
Q1RJTmF0aXZlQ2FsbEVOM1dURjEwUGFzc1JlZlB0cklOU18xNEV4ZWN1dGFibGVQb29sRUVFUE5T
XzEyVk1FUEZQdlBOU185RXhlY1N0YXRlRUUKK19fWk4zSlNDMTZOYXRpdmVFeGVjdXRhYmxlNmNy
ZWF0ZUVSTlNfMTJWTUVOU18yMU1hY3JvQXNzZW1ibGVyQ29kZVB0ckVQRlB2UE5TXzlFeGVjU3Rh
dGVFRVMzX1M4XwogX19aTjNKU0M4SlNPYmplY3QzNHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRy
YW5zaXRpb25FUE5TXzlFeGVjU3RhdGVFUE5TXzEwSlNGdW5jdGlvbkVqCiBfX1pOM0pTQzEwSlNG
dW5jdGlvbjRuYW1lRVBOU185RXhlY1N0YXRlRQogX19aTjNKU0MxNU9iamVjdFByb3RvdHlwZUMx
RVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBOU185U3RydWN0dXJlRQogX19a
TjNKU0MxNEFycmF5UHJvdG90eXBlQzFFUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1
cmVFCi1fX1pOM0pTQzdKU0FycmF5QzJFUk5TXzEySlNHbG9iYWxEYXRhRVBOU185U3RydWN0dXJl
RQorX19aTjNKU0M3SlNBcnJheUMyRVJOU18xMlZNRVBOU185U3RydWN0dXJlRQogX19aTjNKU0Mx
NVN0cmluZ1Byb3RvdHlwZUMxRVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBO
U185U3RydWN0dXJlRQogX19aTjNKU0MxNVN0cmluZ1Byb3RvdHlwZUMyRVBOU185RXhlY1N0YXRl
RVBOU18xNEpTR2xvYmFsT2JqZWN0RVBOU185U3RydWN0dXJlRQogX19aTjNKU0MxMlN0cmluZ09i
amVjdEMyRVBOU185RXhlY1N0YXRlRVBOU185U3RydWN0dXJlRQogX19aTjNKU0MxNkJvb2xlYW5Q
cm90b3R5cGVDMUVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0cnVj
dHVyZUUKLV9fWk4zSlNDMTNCb29sZWFuT2JqZWN0QzJFUk5TXzEySlNHbG9iYWxEYXRhRVBOU185
U3RydWN0dXJlRQorX19aTjNKU0MxM0Jvb2xlYW5PYmplY3RDMkVSTlNfMTJWTUVQTlNfOVN0cnVj
dHVyZUUKIF9fWk4zSlNDMTVOdW1iZXJQcm90b3R5cGVDMUVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRK
U0dsb2JhbE9iamVjdEVQTlNfOVN0cnVjdHVyZUUKLV9fWk4zSlNDMTJOdW1iZXJPYmplY3RDMkVS
TlNfMTJKU0dsb2JhbERhdGFFUE5TXzlTdHJ1Y3R1cmVFCitfX1pOM0pTQzEyTnVtYmVyT2JqZWN0
QzJFUk5TXzEyVk1FUE5TXzlTdHJ1Y3R1cmVFCiBfX1pOM0pTQzEzRGF0ZVByb3RvdHlwZUMxRVBO
U185RXhlY1N0YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBOU185U3RydWN0dXJlRQogX19aTjNK
U0MxMkRhdGVJbnN0YW5jZUMyRVBOU185RXhlY1N0YXRlRVBOU185U3RydWN0dXJlRQogX19aTjNK
U0MxMm5vbklubGluZU5hTkV2CiBfX1pOM0pTQzE1UmVnRXhwUHJvdG90eXBlQzFFUE5TXzlFeGVj
U3RhdGVFUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1cmVFCiBfX1pOM0pTQzE1UmVn
RXhwUHJvdG90eXBlQzJFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzlT
dHJ1Y3R1cmVFCi1fX1pOM0pTQzZSZWdFeHA2Y3JlYXRlRVBOU18xMkpTR2xvYmFsRGF0YUVSS05T
XzdVU3RyaW5nRU5TXzExUmVnRXhwRmxhZ3NFCi1fX1pOM0pTQzZSZWdFeHA3Y29tcGlsZUVQTlNf
MTJKU0dsb2JhbERhdGFFCitfX1pOM0pTQzZSZWdFeHA2Y3JlYXRlRVBOU18xMlZNRVJLTlNfN1VT
dHJpbmdFTlNfMTFSZWdFeHBGbGFnc0UKK19fWk4zSlNDNlJlZ0V4cDdjb21waWxlRVBOU18xMlZN
RQogX19aTjNKU0M0WWFycjExWWFyclBhdHRlcm5DMUVSS05TXzdVU3RyaW5nRWJiUFBLYwogX19a
TjNKU0M0WWFycjExWWFyclBhdHRlcm43Y29tcGlsZUVSS05TXzdVU3RyaW5nRQogX19aTjNXVEY2
VmVjdG9ySVBOM0pTQzRZYXJyMThQYXR0ZXJuQWx0ZXJuYXRpdmVFTG0wRUUxNGV4cGFuZENhcGFj
aXR5RW0KIF9fWk4zSlNDNFlhcnI2UGFyc2VySU5TMF8yMllhcnJQYXR0ZXJuQ29uc3RydWN0b3JF
RTVwYXJzZUV2Ci1fX1pOM0pTQzRZYXJyMTBqaXRDb21waWxlRVJOUzBfMTFZYXJyUGF0dGVybkVQ
TlNfMTJKU0dsb2JhbERhdGFFUk5TMF8xM1lhcnJDb2RlQmxvY2tFCitfX1pOM0pTQzRZYXJyMTBq
aXRDb21waWxlRVJOUzBfMTFZYXJyUGF0dGVybkVQTlNfMTJWTUVSTlMwXzEzWWFyckNvZGVCbG9j
a0UKIF9fWk4zSlNDNFlhcnIxM1lhcnJHZW5lcmF0b3IxM29wQ29tcGlsZUJvZHlFUE5TMF8xOFBh
dHRlcm5EaXNqdW5jdGlvbkUKIF9fWk4zV1RGNlZlY3RvcklOM0pTQzIyQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlcklOUzFfMTJYODZBc3NlbWJsZXJFRTRKdW1wRUxtMTZFRUQxRXYKIF9fWk4zSlNDNFlh
cnIxM1lhcnJHZW5lcmF0b3IyMG9wQ29tcGlsZUFsdGVybmF0aXZlRVBOUzBfMThQYXR0ZXJuQWx0
ZXJuYXRpdmVFCkBAIC0yNjksNyArMjY5LDcgQEAgX19aTjNXVEYxNWRlbGV0ZUFsbFZhbHVlc0lQ
TjNKU0M0WWFycjE4UAogX19aTjNXVEYxNWRlbGV0ZUFsbFZhbHVlc0lQTjNKU0M0WWFycjE0Q2hh
cmFjdGVyQ2xhc3NFTG0wRUVFdlJLTlNfNlZlY3RvcklUX1hUMF9FRUUKIF9fWk4zSlNDMTRFcnJv
clByb3RvdHlwZUMxRVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBOU185U3Ry
dWN0dXJlRQogX19aTjNKU0MxNEVycm9yUHJvdG90eXBlQzJFUE5TXzlFeGVjU3RhdGVFUE5TXzE0
SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1cmVFCi1fX1pOM0pTQzEzRXJyb3JJbnN0YW5jZUMy
RVBOU18xMkpTR2xvYmFsRGF0YUVQTlNfOVN0cnVjdHVyZUUKK19fWk4zSlNDMTNFcnJvckluc3Rh
bmNlQzJFUE5TXzEyVk1FUE5TXzlTdHJ1Y3R1cmVFCiBfX1pOM0pTQzE3T2JqZWN0Q29uc3RydWN0
b3JDMUVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0cnVjdHVyZUVQ
TlNfMTVPYmplY3RQcm90b3R5cGVFCiBfX1pOM0pTQzE3T2JqZWN0Q29uc3RydWN0b3JDMkVQTlNf
OUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0cnVjdHVyZUVQTlNfMTVPYmpl
Y3RQcm90b3R5cGVFCiBfX1pOM0pTQzEwSWRlbnRpZmllcjNhZGRFUE5TXzlFeGVjU3RhdGVFUEtj
CkBAIC0zMDMsOCArMzAzLDggQEAgX19aTjNKU0MxOVNtYWxsU3RyaW5nc1N0b3JhZ2VDMkV2CiBf
X1pOM0pTQzEwSlNPTk9iamVjdEMxRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBOU185U3RydWN0dXJl
RQogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0MTZhZGRTdGF0aWNHbG9iYWxzRVBOUzBfMThHbG9i
YWxQcm9wZXJ0eUluZm9FaQogX19aTjNXVEY3SGFzaE1hcElOU182UmVmUHRySU5TXzEwU3RyaW5n
SW1wbEVFRU4zSlNDMTZTeW1ib2xUYWJsZUVudHJ5RU5TNF8xN0lkZW50aWZpZXJSZXBIYXNoRU5T
XzEwSGFzaFRyYWl0c0lTM19FRU5TNF8yNlN5bWJvbFRhYmxlSW5kZXhIYXNoVHJhaXRzRUUzYWRk
RVBTMl9SS1M1XwotX19aTjNKU0M5U3RydWN0dXJlMjVjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9u
RVJOU18xMkpTR2xvYmFsRGF0YUVQUzBfTlNfN0pTVmFsdWVFCi1fX1pOM0pTQzlTdHJ1Y3R1cmUx
N2NvcHlQcm9wZXJ0eVRhYmxlRVJOU18xMkpTR2xvYmFsRGF0YUVQUzBfCitfX1pOM0pTQzlTdHJ1
Y3R1cmUyNWNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb25FUk5TXzEyVk1FUFMwX05TXzdKU1ZhbHVl
RQorX19aTjNKU0M5U3RydWN0dXJlMTdjb3B5UHJvcGVydHlUYWJsZUVSTlNfMTJWTUVQUzBfCiBf
X1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxMGdsb2JhbEV4ZWNFdgogX0pTR2xvYmFsQ29udGV4dFJl
dGFpbgogX19aTjNKU0MxNE1hY2hpbmVUaHJlYWRzMTZhZGRDdXJyZW50VGhyZWFkRXYKQEAgLTMx
Nyw3ICszMTcsNyBAQCBfX1pOSzE0T3BhcXVlSlNTdHJpbmc3dXN0cmluZ0V2CiBfX1pOM0pTQzdV
U3RyaW5nQzFFUEt0agogX19aTjNKU0MxM0xpdGVyYWxQYXJzZXI1TGV4ZXIzbGV4RVJOUzFfMThM
aXRlcmFsUGFyc2VyVG9rZW5FCiBfX1pOM0pTQzEzTGl0ZXJhbFBhcnNlcjVwYXJzZUVOUzBfMTFQ
YXJzZXJTdGF0ZUUKLV9fWk4zSlNDN0pTQXJyYXlDMUVSTlNfMTJKU0dsb2JhbERhdGFFUE5TXzlT
dHJ1Y3R1cmVFCitfX1pOM0pTQzdKU0FycmF5QzFFUk5TXzEyVk1FUE5TXzlTdHJ1Y3R1cmVFCiBf
X1pOM1dURjEzU3RyaW5nQnVpbGRlcjZhcHBlbmRFUEt0agogX19aTjNXVEYxM1N0cmluZ0J1aWxk
ZXIxOWFwcGVuZFVuaW5pdGlhbGl6ZWRFagogX19aTjNXVEYxM1N0cmluZ0J1aWxkZXIxNGFsbG9j
YXRlQnVmZmVyRVBLdGoKQEAgLTM0MCw4ICszNDAsOCBAQCBfSlNDb250ZXh0R2V0R2xvYmFsT2Jq
ZWN0CiBfX1pOSzNKU0M4SlNPYmplY3QxMnRvVGhpc09iamVjdEVQTlNfOUV4ZWNTdGF0ZUUKIF9K
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZwogX0pTT2JqZWN0R2V0UHJvcGVydHkKLV9fWk5L
MTRPcGFxdWVKU1N0cmluZzEwaWRlbnRpZmllckVQTjNKU0MxMkpTR2xvYmFsRGF0YUUKLV9fWk4z
SlNDMTBJZGVudGlmaWVyM2FkZEVQTlNfMTJKU0dsb2JhbERhdGFFUEt0aQorX19aTksxNE9wYXF1
ZUpTU3RyaW5nMTBpZGVudGlmaWVyRVBOM0pTQzEyVk1FCitfX1pOM0pTQzEwSWRlbnRpZmllcjNh
ZGRFUE5TXzEyVk1FUEt0aQogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0MThnZXRPd25Qcm9wZXJ0
eVNsb3RFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUk5TXzEyUHJvcGVydHlTbG90
RQogX0pTVmFsdWVJc0luc3RhbmNlT2ZDb25zdHJ1Y3RvcgogX19aTjNKU0MxNkFycmF5Q29uc3Ry
dWN0b3IxOGdldE93blByb3BlcnR5U2xvdEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmll
ckVSTlNfMTJQcm9wZXJ0eVNsb3RFCkBAIC0zNjAsMTAgKzM2MCwxMCBAQCBfX1pOM0pTQzRIZWFw
OXVucHJvdGVjdEVOU183SlNWYWx1ZUUKIF9fWk4zV1RGOUhhc2hUYWJsZUlQTjNKU0M2SlNDZWxs
RVN0NHBhaXJJUzNfakVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTNV9FRU5TXzdQdHJIYXNoSVMz
X0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzNfRUVOU0JfSWpFRUVFU0Nf
RTRmaW5kSVMzX05TXzIySWRlbnRpdHlIYXNoVHJhbnNsYXRvcklTM19TNV9TOV9FRUVFTlNfMTdI
YXNoVGFibGVJdGVyYXRvcklTM19TNV9TN19TOV9TRV9TQ19FRVJLVF8KIF9fWk4zV1RGOUhhc2hU
YWJsZUlQTjNKU0M2SlNDZWxsRVN0NHBhaXJJUzNfakVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklT
NV9FRU5TXzdQdHJIYXNoSVMzX0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJ
UzNfRUVOU0JfSWpFRUVFU0NfRTZyZWhhc2hFaQogX19aTjNKU0MxMEhhbmRsZUhlYXA0Z3Jvd0V2
Ci1fX1pOM0pTQzEyU21hbGxTdHJpbmdzMjdjcmVhdGVTaW5nbGVDaGFyYWN0ZXJTdHJpbmdFUE5T
XzEySlNHbG9iYWxEYXRhRWgKK19fWk4zSlNDMTJTbWFsbFN0cmluZ3MyN2NyZWF0ZVNpbmdsZUNo
YXJhY3RlclN0cmluZ0VQTlNfMTJWTUVoCiBfX1pOM0pTQzM3RGVmYXVsdEdDQWN0aXZpdHlDYWxs
YmFja1BsYXRmb3JtRGF0YTd0cmlnZ2VyRVAxNl9fQ0ZSdW5Mb29wVGltZXJQdgogX19aTjNKU0M0
SGVhcDE3Y29sbGVjdEFsbEdhcmJhZ2VFdgotX19aTjNKU0MxMkpTR2xvYmFsRGF0YTIzcmVjb21w
aWxlQWxsSlNGdW5jdGlvbnNFdgorX19aTjNKU0MxMlZNMjNyZWNvbXBpbGVBbGxKU0Z1bmN0aW9u
c0V2CiBfX1pOM0pTQzRIZWFwNXJlc2V0RU5TMF8xMVN3ZWVwVG9nZ2xlRQogX19aTjNKU0M0SGVh
cDltYXJrUm9vdHNFdgogX19aTjNKU0MxNE1hY2hpbmVUaHJlYWRzMjNnYXRoZXJDb25zZXJ2YXRp
dmVSb290c0VSTlNfMTdDb25zZXJ2YXRpdmVSb290c0VQdgpAQCAtNDM5LDIwICs0MzksMjAgQEAg
X19aTjNXVEY2c3RydG9kRVBLY1BQYwogX19aTjNXVEYxMFN0cmluZ0ltcGwyMmNvbnRhaW5zT25s
eVdoaXRlc3BhY2VFdgogX19aTjNXVEYxMFN0cmluZ0ltcGwxMXJldmVyc2VGaW5kRVBTMF9qCiBf
X1pOM1dURjE3ZXF1YWxJZ25vcmluZ0Nhc2VFUE5TXzEwU3RyaW5nSW1wbEVTMV8KLV9fWk4zSlND
MTJKU0dsb2JhbERhdGExMmNyZWF0ZUxlYWtlZEVOU184SGVhcFR5cGVFCi1fX1pOM0pTQzI0SlNP
YmplY3RXaXRoR2xvYmFsT2JqZWN0QzJFUk5TXzEySlNHbG9iYWxEYXRhRVBOU18xNEpTR2xvYmFs
T2JqZWN0RVBOU185U3RydWN0dXJlRQorX19aTjNKU0MxMlZNMTJjcmVhdGVMZWFrZWRFTlNfOEhl
YXBUeXBlRQorX19aTjNKU0MyNEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdEMyRVJOU18xMlZNRVBO
U18xNEpTR2xvYmFsT2JqZWN0RVBOU185U3RydWN0dXJlRQogX19aTjNKU0M4ZXZhbHVhdGVFUE5T
XzlFeGVjU3RhdGVFUE5TXzE0U2NvcGVDaGFpbk5vZGVFUktOU18xMFNvdXJjZUNvZGVFTlNfN0pT
VmFsdWVFCiBfX1pOM0pTQzE3UHJvZ3JhbUV4ZWN1dGFibGVDMUVQTlNfOUV4ZWNTdGF0ZUVSS05T
XzEwU291cmNlQ29kZUUKIF9fWk4zSlNDMTFJbnRlcnByZXRlcjdleGVjdXRlRVBOU18xN1Byb2dy
YW1FeGVjdXRhYmxlRVBOU185RXhlY1N0YXRlRVBOU18xNFNjb3BlQ2hhaW5Ob2RlRVBOU184SlNP
YmplY3RFCi1fX1pOM0pTQzI0RHluYW1pY0dsb2JhbE9iamVjdFNjb3BlQzFFUk5TXzEySlNHbG9i
YWxEYXRhRVBOU18xNEpTR2xvYmFsT2JqZWN0RQorX19aTjNKU0MyNER5bmFtaWNHbG9iYWxPYmpl
Y3RTY29wZUMxRVJOU18xMlZNRVBOU18xNEpTR2xvYmFsT2JqZWN0RQogX19aTjNKU0MxOUV4ZWN1
dGFibGVBbGxvY2F0b3IxOXVuZGVyTWVtb3J5UHJlc3N1cmVFdgotX19aTjNKU0MxMkpTR2xvYmFs
RGF0YTE0cmVzZXREYXRlQ2FjaGVFdgorX19aTjNKU0MxMlZNMTRyZXNldERhdGVDYWNoZUV2CiBf
X1pOM0pTQzE3UHJvZ3JhbUV4ZWN1dGFibGUxNWNvbXBpbGVJbnRlcm5hbEVQTlNfOUV4ZWNTdGF0
ZUVQTlNfMTRTY29wZUNoYWluTm9kZUUKIF9fWk4zSlNDNlBhcnNlcjVwYXJzZUlOU18xMVByb2dy
YW1Ob2RlRUVFTjNXVEYxMFBhc3NSZWZQdHJJVF9FRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBOU184
RGVidWdnZXJFUE5TXzlFeGVjU3RhdGVFUktOU18xMFNvdXJjZUNvZGVFUE5TXzE4RnVuY3Rpb25Q
YXJhbWV0ZXJzRU5TXzE4SlNQYXJzZXJTdHJpY3RuZXNzRVBQTlNfOEpTT2JqZWN0RQotX19aTjNK
U0M2UGFyc2VyNXBhcnNlRVBOU18xMkpTR2xvYmFsRGF0YUVQTlNfMThGdW5jdGlvblBhcmFtZXRl
cnNFTlNfMThKU1BhcnNlclN0cmljdG5lc3NFTlNfMTJKU1BhcnNlck1vZGVFUGlQTlNfN1VTdHJp
bmdFCitfX1pOM0pTQzZQYXJzZXI1cGFyc2VFUE5TXzEyVk1FUE5TXzE4RnVuY3Rpb25QYXJhbWV0
ZXJzRU5TXzE4SlNQYXJzZXJTdHJpY3RuZXNzRU5TXzEySlNQYXJzZXJNb2RlRVBpUE5TXzdVU3Ry
aW5nRQogX19aTjNKU0M1TGV4ZXI3c2V0Q29kZUVSS05TXzEwU291cmNlQ29kZUVSTlNfMTFQYXJz
ZXJBcmVuYUUKLV9fWk4zSlNDN2pzUGFyc2VFUE5TXzEySlNHbG9iYWxEYXRhRVBOU18xOEZ1bmN0
aW9uUGFyYW1ldGVyc0VOU18xOEpTUGFyc2VyU3RyaWN0bmVzc0VOU18xMkpTUGFyc2VyTW9kZUVQ
S05TXzEwU291cmNlQ29kZUUKLV9fWk4zSlNDOEpTUGFyc2VyQzJFUE5TXzVMZXhlckVQTlNfMTJK
U0dsb2JhbERhdGFFUE5TXzE4RnVuY3Rpb25QYXJhbWV0ZXJzRWJiUE5TXzE0U291cmNlUHJvdmlk
ZXJFCitfX1pOM0pTQzdqc1BhcnNlRVBOU18xMlZNRVBOU18xOEZ1bmN0aW9uUGFyYW1ldGVyc0VO
U18xOEpTUGFyc2VyU3RyaWN0bmVzc0VOU18xMkpTUGFyc2VyTW9kZUVQS05TXzEwU291cmNlQ29k
ZUUKK19fWk4zSlNDOEpTUGFyc2VyQzJFUE5TXzVMZXhlckVQTlNfMTJWTUVQTlNfMThGdW5jdGlv
blBhcmFtZXRlcnNFYmJQTlNfMTRTb3VyY2VQcm92aWRlckUKIF9fWk4zSlNDOEpTUGFyc2VyOXB1
c2hTY29wZUV2CiBfX1pOM0pTQzhKU1BhcnNlcjRuZXh0RU5TXzVMZXhlcjdMZXhUeXBlRQogX19a
TjNKU0M1TGV4ZXIzbGV4RVBOU18xMUpTVG9rZW5EYXRhRVBOU18xMUpTVG9rZW5JbmZvRU5TMF83
TGV4VHlwZUViCkBAIC00NjQsOCArNDY0LDggQEAgX19aTjNKU0M4SlNQYXJzZXIxNHBhcnNlU3Rh
dGVtZW50SU5TXzEwQQogX19aTjNKU0M2UGFyc2VyMTZkaWRGaW5pc2hQYXJzaW5nRVBOU18xNFNv
dXJjZUVsZW1lbnRzRVBOU18xNVBhcnNlckFyZW5hRGF0YUlOM1dURjZWZWN0b3JJU3Q0cGFpcklQ
S05TXzEwSWRlbnRpZmllckVqRUxtMEVFRUVFUE5TM19JTlM1X0lQTlNfMTZGdW5jdGlvbkJvZHlO
b2RlRUxtMEVFRUVFamlpUk5TNF83SGFzaFNldElOUzRfNlJlZlB0cklOUzRfMTBTdHJpbmdJbXBs
RUVFTlNfMTdJZGVudGlmaWVyUmVwSGFzaEVOUzRfMTBIYXNoVHJhaXRzSVNNX0VFRUUKIF9fWk4z
SlNDMTFQYXJzZXJBcmVuYUQxRXYKIF9fWk4zSlNDNUxleGVyNWNsZWFyRXYKLV9fWk4zSlNDMTFQ
cm9ncmFtTm9kZTZjcmVhdGVFUE5TXzEySlNHbG9iYWxEYXRhRVBOU18xNFNvdXJjZUVsZW1lbnRz
RVBOM1dURjZWZWN0b3JJU3Q0cGFpcklQS05TXzEwSWRlbnRpZmllckVqRUxtMEVFRVBOUzZfSVBO
U18xNkZ1bmN0aW9uQm9keU5vZGVFTG0wRUVFUk5TNV83SGFzaFNldElOUzVfNlJlZlB0cklOUzVf
MTBTdHJpbmdJbXBsRUVFTlNfMTdJZGVudGlmaWVyUmVwSGFzaEVOUzVfMTBIYXNoVHJhaXRzSVNM
X0VFRUVSS05TXzEwU291cmNlQ29kZUVqaQotX19aTjNKU0M5U2NvcGVOb2RlQzJFUE5TXzEySlNH
bG9iYWxEYXRhRVJLTlNfMTBTb3VyY2VDb2RlRVBOU18xNFNvdXJjZUVsZW1lbnRzRVBOM1dURjZW
ZWN0b3JJU3Q0cGFpcklQS05TXzEwSWRlbnRpZmllckVqRUxtMEVFRVBOUzlfSVBOU18xNkZ1bmN0
aW9uQm9keU5vZGVFTG0wRUVFUk5TOF83SGFzaFNldElOUzhfNlJlZlB0cklOUzhfMTBTdHJpbmdJ
bXBsRUVFTlNfMTdJZGVudGlmaWVyUmVwSGFzaEVOUzhfMTBIYXNoVHJhaXRzSVNPX0VFRUVqaQor
X19aTjNKU0MxMVByb2dyYW1Ob2RlNmNyZWF0ZUVQTlNfMTJWTUVQTlNfMTRTb3VyY2VFbGVtZW50
c0VQTjNXVEY2VmVjdG9ySVN0NHBhaXJJUEtOU18xMElkZW50aWZpZXJFakVMbTBFRUVQTlM2X0lQ
TlNfMTZGdW5jdGlvbkJvZHlOb2RlRUxtMEVFRVJOUzVfN0hhc2hTZXRJTlM1XzZSZWZQdHJJTlM1
XzEwU3RyaW5nSW1wbEVFRU5TXzE3SWRlbnRpZmllclJlcEhhc2hFTlM1XzEwSGFzaFRyYWl0c0lT
TF9FRUVFUktOU18xMFNvdXJjZUNvZGVFamkKK19fWk4zSlNDOVNjb3BlTm9kZUMyRVBOU18xMlZN
RVJLTlNfMTBTb3VyY2VDb2RlRVBOU18xNFNvdXJjZUVsZW1lbnRzRVBOM1dURjZWZWN0b3JJU3Q0
cGFpcklQS05TXzEwSWRlbnRpZmllckVqRUxtMEVFRVBOUzlfSVBOU18xNkZ1bmN0aW9uQm9keU5v
ZGVFTG0wRUVFUk5TOF83SGFzaFNldElOUzhfNlJlZlB0cklOUzhfMTBTdHJpbmdJbXBsRUVFTlNf
MTdJZGVudGlmaWVyUmVwSGFzaEVOUzhfMTBIYXNoVHJhaXRzSVNPX0VFRUVqaQogX19aTjNKU0Mx
MVBhcnNlckFyZW5hMTRkZXJlZldpdGhBcmVuYUVOM1dURjEwUGFzc1JlZlB0cklOU18yMVBhcnNl
ckFyZW5hUmVmQ291bnRlZEVFRQogX19aTjNKU0MxMVBhcnNlckFyZW5hMTByZW1vdmVMYXN0RXYK
IF9fWk4zSlNDMTFQYXJzZXJBcmVuYTVyZXNldEV2CkBAIC01MTQsNyArNTE0LDcgQEAgX19aTjNK
U0MxNEpTR2xvYmFsT2JqZWN0MTNjb3B5R2xvYmFsc1RvRQogX19aTjNKU0MxMkpTU3RhY2sxNXNl
dEdsb2JhbE9iamVjdEVQTlNfMTRKU0dsb2JhbE9iamVjdEUKIF9jdGlUcmFtcG9saW5lCiBfX1pO
M1dURjE1U2VnbWVudGVkVmVjdG9ySU4zSlNDMTBJZGVudGlmaWVyRUxtNjRFRTZhcHBlbmRJUzJf
RUV2UktUXwotX19aTkszSlNDOUhhc2hUYWJsZTExY3JlYXRlVGFibGVFUE5TXzEySlNHbG9iYWxE
YXRhRQorX19aTkszSlNDOUhhc2hUYWJsZTExY3JlYXRlVGFibGVFUE5TXzEyVk1FCiBfX1pOM0pT
QzhKU1BhcnNlcjMxcGFyc2VFeHByZXNzaW9uT3JMYWJlbFN0YXRlbWVudElOU18xMEFTVEJ1aWxk
ZXJFRUVOVF85U3RhdGVtZW50RVJTM18KIF9fWk4zSlNDNUxleGVyMTZuZXh0VG9rZW5Jc0NvbG9u
RXYKIF9fWk4zSlNDOEpTUGFyc2VyMTVwYXJzZUV4cHJlc3Npb25JTlNfMTBBU1RCdWlsZGVyRUVF
TlRfMTBFeHByZXNzaW9uRVJTM18KQEAgLTU2MCw5ICs1NjAsOSBAQCBfX1pOM0pTQzI4Y3JlYXRl
VW5kZWZpbmVkVmFyaWFibGVFcnJvckVQCiBfX1pOM0pTQzExbWFrZVVTdHJpbmdJUEtjTlNfN1VT
dHJpbmdFRUVTM19UX1QwXwogX19aTjNXVEYxM3RyeU1ha2VTdHJpbmdJUEtjTjNKU0M3VVN0cmlu
Z0VFRU5TXzEwUGFzc1JlZlB0cklOU18xMFN0cmluZ0ltcGxFRUVUX1QwXwogX19aTjNKU0MyMGNy
ZWF0ZVJlZmVyZW5jZUVycm9yRVBOU185RXhlY1N0YXRlRVJLTlNfN1VTdHJpbmdFCi1fX1pOM0pT
QzEzRXJyb3JJbnN0YW5jZTZjcmVhdGVFUE5TXzEySlNHbG9iYWxEYXRhRVBOU185U3RydWN0dXJl
RVJLTlNfN1VTdHJpbmdFCi1fX1pOM0pTQzEzRXJyb3JJbnN0YW5jZUMyRVBOU18xMkpTR2xvYmFs
RGF0YUVQTlNfOVN0cnVjdHVyZUVSS05TXzdVU3RyaW5nRQotX19aTjNKU0NMMjNyZXR1cm5Ub1Ro
cm93VHJhbXBvbGluZUVQTlNfMTJKU0dsb2JhbERhdGFFTlNfMTZSZXR1cm5BZGRyZXNzUHRyRVJT
Ml8KK19fWk4zSlNDMTNFcnJvckluc3RhbmNlNmNyZWF0ZUVQTlNfMTJWTUVQTlNfOVN0cnVjdHVy
ZUVSS05TXzdVU3RyaW5nRQorX19aTjNKU0MxM0Vycm9ySW5zdGFuY2VDMkVQTlNfMTJWTUVQTlNf
OVN0cnVjdHVyZUVSS05TXzdVU3RyaW5nRQorX19aTjNKU0NMMjNyZXR1cm5Ub1Rocm93VHJhbXBv
bGluZUVQTlNfMTJWTUVOU18xNlJldHVybkFkZHJlc3NQdHJFUlMyXwogX2N0aVZNVGhyb3dUcmFt
cG9saW5lCiBfY3RpX3ZtX3Rocm93CiBfX1pOM0pTQzExSW50ZXJwcmV0ZXIxNHRocm93RXhjZXB0
aW9uRVJQTlNfOUV4ZWNTdGF0ZUVSTlNfN0pTVmFsdWVFagpAQCAtNjExLDE0ICs2MTEsMTQgQEAg
X19aTjNKU0M5QXJyYXlOb2RlMTJlbWl0Qnl0ZWNvZGVFUk5TXzE3QgogX19aTjNKU0MxN0J5dGVj
b2RlR2VuZXJhdG9yMTJlbWl0TmV3QXJyYXlFUE5TXzEwUmVnaXN0ZXJJREVQTlNfMTFFbGVtZW50
Tm9kZUUKIF9fWk4zSlNDM0pJVDE3ZW1pdF9vcF9uZXdfYXJyYXlFUE5TXzExSW5zdHJ1Y3Rpb25F
CiBfY3RpX29wX25ld19hcnJheQotX19aTjNKU0M3SlNBcnJheUMxRVJOU18xMkpTR2xvYmFsRGF0
YUVQTlNfOVN0cnVjdHVyZUVSS05TXzdBcmdMaXN0RQorX19aTjNKU0M3SlNBcnJheUMxRVJOU18x
MlZNRVBOU185U3RydWN0dXJlRVJLTlNfN0FyZ0xpc3RFCiBfX1pOM0pTQzhKU1BhcnNlcjE3cGFy
c2VGdW5jdGlvbkluZm9JTE5TMF8yMEZ1bmN0aW9uUmVxdWlyZW1lbnRzRTBFTGIwRU5TXzEwQVNU
QnVpbGRlckVFRWJSVDFfUlBLTlNfMTBJZGVudGlmaWVyRVJOUzRfMTlGb3JtYWxQYXJhbWV0ZXJM
aXN0RVJOUzRfMTJGdW5jdGlvbkJvZHlFUmlTRV9TRV8KIF9fWk4zSlNDOEpTUGFyc2VyMTlwYXJz
ZVNvdXJjZUVsZW1lbnRzSUxOUzBfMThTb3VyY2VFbGVtZW50c01vZGVFMEVOU18xM1N5bnRheENo
ZWNrZXJFRUVOVDBfMTRTb3VyY2VFbGVtZW50c0VSUzRfCiBfX1pOM0pTQzhKU1BhcnNlcjE0cGFy
c2VTdGF0ZW1lbnRJTlNfMTNTeW50YXhDaGVja2VyRUVFTlRfOVN0YXRlbWVudEVSUzNfUlBLTlNf
MTBJZGVudGlmaWVyRQogX19aTjNKU0M4SlNQYXJzZXIxNXBhcnNlRXhwcmVzc2lvbklOU18xM1N5
bnRheENoZWNrZXJFRUVOVF8xMEV4cHJlc3Npb25FUlMzXwogX19aTjNKU0M4SlNQYXJzZXIyNXBh
cnNlQXNzaWdubWVudEV4cHJlc3Npb25JTlNfMTNTeW50YXhDaGVja2VyRUVFTlRfMTBFeHByZXNz
aW9uRVJTM18KIF9fWk4zSlNDOEpTUGFyc2VyMjFwYXJzZU1lbWJlckV4cHJlc3Npb25JTlNfMTNT
eW50YXhDaGVja2VyRUVFTlRfMTBFeHByZXNzaW9uRVJTM18KLV9fWk4zSlNDMTZGdW5jdGlvbkJv
ZHlOb2RlNmNyZWF0ZUVQTlNfMTJKU0dsb2JhbERhdGFFYgorX19aTjNKU0MxNkZ1bmN0aW9uQm9k
eU5vZGU2Y3JlYXRlRVBOU18xMlZNRWIKIF9fWk4zSlNDOEpTUGFyc2VyNVNjb3BlRDFFdgogX19a
TjNKU0M1TGV4ZXIxMHNvdXJjZUNvZGVFaWlpCiBfX1pOM0pTQzE2RnVuY3Rpb25Cb2R5Tm9kZTEz
ZmluaXNoUGFyc2luZ0VSS05TXzEwU291cmNlQ29kZUVQTlNfMTNQYXJhbWV0ZXJOb2RlRVJLTlNf
MTBJZGVudGlmaWVyRQpAQCAtNjI4LDcgKzYyOCw3IEBAIF9fWk5LM0pTQzE0RXhwcmVzc2lvbk5v
ZGUxMGlzTG9jYXRpb25FdgogX19aTjNKU0MyMUZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTEyZW1pdEJ5
dGVjb2RlRVJOU18xN0J5dGVjb2RlR2VuZXJhdG9yRVBOU18xMFJlZ2lzdGVySURFCiBfX1pOM0pT
QzEyRnVuY0V4cHJOb2RlMTJlbWl0Qnl0ZWNvZGVFUk5TXzE3Qnl0ZWNvZGVHZW5lcmF0b3JFUE5T
XzEwUmVnaXN0ZXJJREUKIF9fWk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvcjI1ZW1pdE5ld0Z1bmN0
aW9uRXhwcmVzc2lvbkVQTlNfMTBSZWdpc3RlcklERVBOU18xMkZ1bmNFeHByTm9kZUUKLV9fWk4z
SlNDMThGdW5jdGlvbkV4ZWN1dGFibGVDMUVQTlNfMTJKU0dsb2JhbERhdGFFUktOU18xMElkZW50
aWZpZXJFUktOU18xMFNvdXJjZUNvZGVFYlBOU18xOEZ1bmN0aW9uUGFyYW1ldGVyc0ViaWkKK19f
Wk4zSlNDMThGdW5jdGlvbkV4ZWN1dGFibGVDMUVQTlNfMTJWTUVSS05TXzEwSWRlbnRpZmllckVS
S05TXzEwU291cmNlQ29kZUViUE5TXzE4RnVuY3Rpb25QYXJhbWV0ZXJzRWJpaQogX19aTjNXVEY2
VmVjdG9ySU4zSlNDMTJXcml0ZUJhcnJpZXJJTlMxXzE4RnVuY3Rpb25FeGVjdXRhYmxlRUVFTG0w
RUUxNGV4cGFuZENhcGFjaXR5RW0KIF9fWk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvcjhlbWl0Q2Fs
bEVQTlNfMTBSZWdpc3RlcklERVMyX1JOU18xM0NhbGxBcmd1bWVudHNFampqCiBfX1pOM0pTQzE3
Qnl0ZWNvZGVHZW5lcmF0b3I4ZW1pdENhbGxFTlNfOE9wY29kZUlERVBOU18xMFJlZ2lzdGVySURF
UzNfUk5TXzEzQ2FsbEFyZ3VtZW50c0VqamoKQEAgLTY0NSw3ICs2NDUsNyBAQCBfX1pOM0pTQzE4
RnVuY3Rpb25FeGVjdXRhYmxlMjJjb21waWxlRm9yCiBfX1pOM0pTQzZQYXJzZXI1cGFyc2VJTlNf
MTZGdW5jdGlvbkJvZHlOb2RlRUVFTjNXVEYxMFBhc3NSZWZQdHJJVF9FRVBOU18xNEpTR2xvYmFs
T2JqZWN0RVBOU184RGVidWdnZXJFUE5TXzlFeGVjU3RhdGVFUktOU18xMFNvdXJjZUNvZGVFUE5T
XzE4RnVuY3Rpb25QYXJhbWV0ZXJzRU5TXzE4SlNQYXJzZXJTdHJpY3RuZXNzRVBQTlNfOEpTT2Jq
ZWN0RQogX19aTjNKU0M4SlNQYXJzZXIxOXBhcnNlU291cmNlRWxlbWVudHNJTE5TMF8xOFNvdXJj
ZUVsZW1lbnRzTW9kZUUxRU5TXzEwQVNUQnVpbGRlckVFRU5UMF8xNFNvdXJjZUVsZW1lbnRzRVJT
NF8KIF9fWk4zSlNDOEpTUGFyc2VyMTlwYXJzZVRocm93U3RhdGVtZW50SU5TXzEwQVNUQnVpbGRl
ckVFRU5UXzlTdGF0ZW1lbnRFUlMzXwotX19aTjNKU0MxNkZ1bmN0aW9uQm9keU5vZGU2Y3JlYXRl
RVBOU18xMkpTR2xvYmFsRGF0YUVQTlNfMTRTb3VyY2VFbGVtZW50c0VQTjNXVEY2VmVjdG9ySVN0
NHBhaXJJUEtOU18xMElkZW50aWZpZXJFakVMbTBFRUVQTlM2X0lQUzBfTG0wRUVFUk5TNV83SGFz
aFNldElOUzVfNlJlZlB0cklOUzVfMTBTdHJpbmdJbXBsRUVFTlNfMTdJZGVudGlmaWVyUmVwSGFz
aEVOUzVfMTBIYXNoVHJhaXRzSVNLX0VFRUVSS05TXzEwU291cmNlQ29kZUVqaQorX19aTjNKU0Mx
NkZ1bmN0aW9uQm9keU5vZGU2Y3JlYXRlRVBOU18xMlZNRVBOU18xNFNvdXJjZUVsZW1lbnRzRVBO
M1dURjZWZWN0b3JJU3Q0cGFpcklQS05TXzEwSWRlbnRpZmllckVqRUxtMEVFRVBOUzZfSVBTMF9M
bTBFRUVSTlM1XzdIYXNoU2V0SU5TNV82UmVmUHRySU5TNV8xMFN0cmluZ0ltcGxFRUVOU18xN0lk
ZW50aWZpZXJSZXBIYXNoRU5TNV8xMEhhc2hUcmFpdHNJU0tfRUVFRVJLTlNfMTBTb3VyY2VDb2Rl
RWppCiBfX1pOM0pTQzE3Qnl0ZWNvZGVHZW5lcmF0b3JDMUVQTlNfMTZGdW5jdGlvbkJvZHlOb2Rl
RVBOU18xNFNjb3BlQ2hhaW5Ob2RlRVBOM1dURjdIYXNoTWFwSU5TNV82UmVmUHRySU5TNV8xMFN0
cmluZ0ltcGxFRUVOU18xNlN5bWJvbFRhYmxlRW50cnlFTlNfMTdJZGVudGlmaWVyUmVwSGFzaEVO
UzVfMTBIYXNoVHJhaXRzSVM5X0VFTlNfMjZTeW1ib2xUYWJsZUluZGV4SGFzaFRyYWl0c0VFRVBO
U185Q29kZUJsb2NrRQogX19aTjNKU0MxN0J5dGVjb2RlR2VuZXJhdG9yQzJFUE5TXzE2RnVuY3Rp
b25Cb2R5Tm9kZUVQTlNfMTRTY29wZUNoYWluTm9kZUVQTjNXVEY3SGFzaE1hcElOUzVfNlJlZlB0
cklOUzVfMTBTdHJpbmdJbXBsRUVFTlNfMTZTeW1ib2xUYWJsZUVudHJ5RU5TXzE3SWRlbnRpZmll
clJlcEhhc2hFTlM1XzEwSGFzaFRyYWl0c0lTOV9FRU5TXzI2U3ltYm9sVGFibGVJbmRleEhhc2hU
cmFpdHNFRUVQTlNfOUNvZGVCbG9ja0UKIF9fWk4zV1RGMTVTZWdtZW50ZWRWZWN0b3JJTjNKU0Mx
MFJlZ2lzdGVySURFTG0zMkVFQzFFdgpAQCAtNjYxLDcgKzY2MSw3IEBAIF9fWk4zSlNDMTFKSVRT
dHViQ2FsbDExYWRkQXJndW1lbnRFak5TXzEKIF9fWk4zSlNDM0pJVDExZW1pdF9vcF9yZXRFUE5T
XzExSW5zdHJ1Y3Rpb25FCiBfY3RpX29wX3Rocm93CiBfX1pOSzNKU0M4SlNTdHJpbmc4dG9PYmpl
Y3RFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxPYmplY3RFCi1fX1pOM0pTQzEyU3RyaW5n
T2JqZWN0QzFFUk5TXzEySlNHbG9iYWxEYXRhRVBOU185U3RydWN0dXJlRVBOU184SlNTdHJpbmdF
CitfX1pOM0pTQzEyU3RyaW5nT2JqZWN0QzFFUk5TXzEyVk1FUE5TXzlTdHJ1Y3R1cmVFUE5TXzhK
U1N0cmluZ0UKIF9fWk4zSlNDMTJTdHJpbmdPYmplY3QxOGdldE93blByb3BlcnR5U2xvdEVQTlNf
OUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCiBfX1pOM0pT
QzE1U3RyaW5nUHJvdG90eXBlMThnZXRPd25Qcm9wZXJ0eVNsb3RFUE5TXzlFeGVjU3RhdGVFUktO
U18xMElkZW50aWZpZXJFUk5TXzEyUHJvcGVydHlTbG90RQogX19aTjNKU0MxN0J5dGVjb2RlR2Vu
ZXJhdG9yOGVtaXRNb3ZlRVBOU18xMFJlZ2lzdGVySURFUzJfCkBAIC03MDMsNyArNzAzLDcgQEAg
X19aTjNKU0MxNkpTQ2FsbGJhY2tPYmplY3RJTlNfMjRKU09iamVjdAogX19aTjEzT3BhcXVlSlND
bGFzczlwcm90b3R5cGVFUE4zSlNDOUV4ZWNTdGF0ZUUKIF9fWk4xM09wYXF1ZUpTQ2xhc3MxMWNv
bnRleHREYXRhRVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pOM1dURjlIYXNoVGFibGVJUDEzT3BhcXVl
SlNDbGFzc1N0NHBhaXJJUzJfUDI0T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhRU5TXzE4UGFpckZp
cnN0RXh0cmFjdG9ySVM2X0VFTlNfN1B0ckhhc2hJUzJfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5T
XzEwSGFzaFRyYWl0c0lTMl9FRU5TQ19JUzVfRUVFRVNEX0U2ZXhwYW5kRXYKLV9fWk4yNE9wYXF1
ZUpTQ2xhc3NDb250ZXh0RGF0YUMyRVJOM0pTQzEySlNHbG9iYWxEYXRhRVAxM09wYXF1ZUpTQ2xh
c3MKK19fWk4yNE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YUMyRVJOM0pTQzEyVk1FUDEzT3BhcXVl
SlNDbGFzcwogX0pTQ2xhc3NSZWxlYXNlCiBfSlNPYmplY3RTZXRQcm9wZXJ0eQogX19aTkszSlND
OEpTT2JqZWN0MTFoYXNQcm9wZXJ0eUVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckUK
QEAgLTc3NCw3ICs3NzQsNyBAQCBfX1pOM1dURjZWZWN0b3JJTlNfNlJlZlB0cklOU18xMFN0cmlu
Z0ltCiBfX1pOM0pTQzE5U291cmNlUHJvdmlkZXJDYWNoZTNhZGRFaU4zV1RGMTBQYXNzT3duUHRy
SU5TXzIzU291cmNlUHJvdmlkZXJDYWNoZUl0ZW1FRUVqCiBfX1pOM1dURjlIYXNoVGFibGVJaVN0
NHBhaXJJaVBOM0pTQzIzU291cmNlUHJvdmlkZXJDYWNoZUl0ZW1FRU5TXzE4UGFpckZpcnN0RXh0
cmFjdG9ySVM1X0VFTlNfN0ludEhhc2hJakVFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hU
cmFpdHNJaUVFTlNCX0lTNF9FRUVFU0NfRTZleHBhbmRFdgogX19aTjNXVEY2VmVjdG9ySVBOM0pT
QzE2RnVuY3Rpb25Cb2R5Tm9kZUVMbTBFRTE1cmVzZXJ2ZUNhcGFjaXR5RW0KLV9fWk4zSlNDOEpT
T2JqZWN0MTJyZW1vdmVEaXJlY3RFUk5TXzEySlNHbG9iYWxEYXRhRVJLTlNfMTBJZGVudGlmaWVy
RQorX19aTjNKU0M4SlNPYmplY3QxMnJlbW92ZURpcmVjdEVSTlNfMTJWTUVSS05TXzEwSWRlbnRp
ZmllckUKIF9fWk4zV1RGOUhhc2hUYWJsZUlOU182UmVmUHRySU5TXzEwU3RyaW5nSW1wbEVFRVN0
NHBhaXJJUzNfTjNKU0MxNlN5bWJvbFRhYmxlRW50cnlFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9y
SVM3X0VFTlM1XzE3SWRlbnRpZmllclJlcEhhc2hFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhh
c2hUcmFpdHNJUzNfRUVOUzVfMjZTeW1ib2xUYWJsZUluZGV4SGFzaFRyYWl0c0VFRVNEX0UxM2lz
RW1wdHlCdWNrZXRFUktTN18KIF9fWk4zV1RGOUhhc2hUYWJsZUlOU182UmVmUHRySU5TXzEwU3Ry
aW5nSW1wbEVFRVN0NHBhaXJJUzNfTjNKU0MxNlN5bWJvbFRhYmxlRW50cnlFRU5TXzE4UGFpckZp
cnN0RXh0cmFjdG9ySVM3X0VFTlM1XzE3SWRlbnRpZmllclJlcEhhc2hFTlNfMTRQYWlySGFzaFRy
YWl0c0lOU18xMEhhc2hUcmFpdHNJUzNfRUVOUzVfMjZTeW1ib2xUYWJsZUluZGV4SGFzaFRyYWl0
c0VFRVNEX0U2ZXhwYW5kRXYKIF9fWk4zV1RGOUhhc2hUYWJsZUlOU182UmVmUHRySU5TXzEwU3Ry
aW5nSW1wbEVFRVN0NHBhaXJJUzNfTjNKU0MxNlN5bWJvbFRhYmxlRW50cnlFRU5TXzE4UGFpckZp
cnN0RXh0cmFjdG9ySVM3X0VFTlM1XzE3SWRlbnRpZmllclJlcEhhc2hFTlNfMTRQYWlySGFzaFRy
YWl0c0lOU18xMEhhc2hUcmFpdHNJUzNfRUVOUzVfMjZTeW1ib2xUYWJsZUluZGV4SGFzaFRyYWl0
c0VFRVNEX0U2cmVoYXNoRWkKQEAgLTc5Miw3ICs3OTIsNyBAQCBfX1pOSzNKU0MyMVVTdHJpbmdT
b3VyY2VQcm92aWRlcjRkYXRhRXYKIF9fWk4zSlNDOEpTUGFyc2VyMTZkZWNsYXJlUGFyYW1ldGVy
RVBLTlNfMTBJZGVudGlmaWVyRQogX19aTjNXVEY2VmVjdG9ySU4zSlNDMTBJZGVudGlmaWVyRUxt
MEVFMTRleHBhbmRDYXBhY2l0eUVtCiBfX1pOM0pTQzEwSlNGdW5jdGlvbjE4Z2V0T3duUHJvcGVy
dHlTbG90RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJOU18xMlByb3BlcnR5U2xv
dEUKLV9fWk4zSlNDOVN0cnVjdHVyZTIybWF0ZXJpYWxpemVQcm9wZXJ0eU1hcEVSTlNfMTJKU0ds
b2JhbERhdGFFCitfX1pOM0pTQzlTdHJ1Y3R1cmUyMm1hdGVyaWFsaXplUHJvcGVydHlNYXBFUk5T
XzEyVk1FCiBfX1pOSzNKU0MxMVJlc29sdmVOb2RlMTBpc0xvY2F0aW9uRXYKIF9fWk5LM0pTQzEx
UmVzb2x2ZU5vZGUxM2lzUmVzb2x2ZU5vZGVFdgogX19aTjNKU0MxN0J5dGVjb2RlR2VuZXJhdG9y
MTJhZGRQYXJhbWV0ZXJFUktOU18xMElkZW50aWZpZXJFaQpAQCAtODk0LDkgKzg5NCw5IEBAIF9f
Wk4zSlNDM0pJVDE1ZW1pdF9vcF9wcmVfaW5jRVBOU18xMUluc3QKIF9fWk4zSlNDM0pJVDE2ZW1p
dFRpbWVvdXRDaGVja0V2CiBfX1pOM0pTQzNKSVQxM2VtaXRfb3Bfamxlc3NFUE5TXzExSW5zdHJ1
Y3Rpb25FCiBfX1pOM0pTQzNKSVQyMmVtaXRTbG93X29wX2dldF9ieV92YWxFUE5TXzExSW5zdHJ1
Y3Rpb25FUlBOU18xM1Nsb3dDYXNlRW50cnlFCi1fX1pOM0pTQzlKSVRUaHVua3M3Y3RpU3R1YkVQ
TlNfMTJKU0dsb2JhbERhdGFFUEZOU18yMU1hY3JvQXNzZW1ibGVyQ29kZVB0ckVTMl9QTlNfMTRF
eGVjdXRhYmxlUG9vbEVFCi1fX1pOM1dURjlIYXNoVGFibGVJUEZOM0pTQzIxTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyRVBOUzFfMTJKU0dsb2JhbERhdGFFUE5TMV8xNEV4ZWN1dGFibGVQb29sRUVTdDRw
YWlySVM4X1MyX0VOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTQV9FRU5TXzdQdHJIYXNoSVM4X0VF
TlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzhfRUVOU0dfSVMyX0VFRUVTSF9F
NmV4cGFuZEV2Ci1fX1pOM0pTQzNKSVQyN3N0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvckVQTlNf
MTJKU0dsb2JhbERhdGFFUE5TXzE0RXhlY3V0YWJsZVBvb2xFCitfX1pOM0pTQzlKSVRUaHVua3M3
Y3RpU3R1YkVQTlNfMTJWTUVQRk5TXzIxTWFjcm9Bc3NlbWJsZXJDb2RlUHRyRVMyX1BOU18xNEV4
ZWN1dGFibGVQb29sRUUKK19fWk4zV1RGOUhhc2hUYWJsZUlQRk4zSlNDMjFNYWNyb0Fzc2VtYmxl
ckNvZGVQdHJFUE5TMV8xMlZNRVBOUzFfMTRFeGVjdXRhYmxlUG9vbEVFU3Q0cGFpcklTOF9TMl9F
TlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJU0FfRUVOU183UHRySGFzaElTOF9FRU5TXzE0UGFpckhh
c2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVM4X0VFTlNHX0lTMl9FRUVFU0hfRTZleHBhbmRFdgor
X19aTjNKU0MzSklUMjdzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3JFUE5TXzEyVk1FUE5TXzE0
RXhlY3V0YWJsZVBvb2xFCiBfX1pOM0pTQzIxcm91bmRVcEFsbG9jYXRpb25TaXplRW1tCiBfX1pO
M0pTQzNKSVQxOWVtaXRTbG93X29wX3ByZV9pbmNFUE5TXzExSW5zdHJ1Y3Rpb25FUlBOU18xM1Ns
b3dDYXNlRW50cnlFCiBfX1pOM0pTQzNKSVQxN2VtaXRTbG93X29wX2psZXNzRVBOU18xMUluc3Ry
dWN0aW9uRVJQTlNfMTNTbG93Q2FzZUVudHJ5RQpAQCAtOTgxLDcgKzk4MSw3IEBAIF9fWk4zSlND
MTFJbnRlcnByZXRlcjhjYWxsRXZhbEVQTlNfOUV4ZWMKIF9fWk4zSlNDMTRFdmFsRXhlY3V0YWJs
ZUMxRVBOU185RXhlY1N0YXRlRVJLTlNfMTBTb3VyY2VDb2RlRWIKIF9fWk4zSlNDMTRFdmFsRXhl
Y3V0YWJsZTE1Y29tcGlsZUludGVybmFsRVBOU185RXhlY1N0YXRlRVBOU18xNFNjb3BlQ2hhaW5O
b2RlRQogX19aTjNKU0M2UGFyc2VyNXBhcnNlSU5TXzhFdmFsTm9kZUVFRU4zV1RGMTBQYXNzUmVm
UHRySVRfRUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfOERlYnVnZ2VyRVBOU185RXhlY1N0YXRl
RVJLTlNfMTBTb3VyY2VDb2RlRVBOU18xOEZ1bmN0aW9uUGFyYW1ldGVyc0VOU18xOEpTUGFyc2Vy
U3RyaWN0bmVzc0VQUE5TXzhKU09iamVjdEUKLV9fWk4zSlNDOEV2YWxOb2RlNmNyZWF0ZUVQTlNf
MTJKU0dsb2JhbERhdGFFUE5TXzE0U291cmNlRWxlbWVudHNFUE4zV1RGNlZlY3RvcklTdDRwYWly
SVBLTlNfMTBJZGVudGlmaWVyRWpFTG0wRUVFUE5TNl9JUE5TXzE2RnVuY3Rpb25Cb2R5Tm9kZUVM
bTBFRUVSTlM1XzdIYXNoU2V0SU5TNV82UmVmUHRySU5TNV8xMFN0cmluZ0ltcGxFRUVOU18xN0lk
ZW50aWZpZXJSZXBIYXNoRU5TNV8xMEhhc2hUcmFpdHNJU0xfRUVFRVJLTlNfMTBTb3VyY2VDb2Rl
RWppCitfX1pOM0pTQzhFdmFsTm9kZTZjcmVhdGVFUE5TXzEyVk1FUE5TXzE0U291cmNlRWxlbWVu
dHNFUE4zV1RGNlZlY3RvcklTdDRwYWlySVBLTlNfMTBJZGVudGlmaWVyRWpFTG0wRUVFUE5TNl9J
UE5TXzE2RnVuY3Rpb25Cb2R5Tm9kZUVMbTBFRUVSTlM1XzdIYXNoU2V0SU5TNV82UmVmUHRySU5T
NV8xMFN0cmluZ0ltcGxFRUVOU18xN0lkZW50aWZpZXJSZXBIYXNoRU5TNV8xMEhhc2hUcmFpdHNJ
U0xfRUVFRVJLTlNfMTBTb3VyY2VDb2RlRWppCiBfX1pOM0pTQzE0U2NvcGVDaGFpbk5vZGUxMGxv
Y2FsRGVwdGhFdgogX19aTjNKU0MxN0J5dGVjb2RlR2VuZXJhdG9yQzFFUE5TXzhFdmFsTm9kZUVQ
TlNfMTRTY29wZUNoYWluTm9kZUVQTjNXVEY3SGFzaE1hcElOUzVfNlJlZlB0cklOUzVfMTBTdHJp
bmdJbXBsRUVFTlNfMTZTeW1ib2xUYWJsZUVudHJ5RU5TXzE3SWRlbnRpZmllclJlcEhhc2hFTlM1
XzEwSGFzaFRyYWl0c0lTOV9FRU5TXzI2U3ltYm9sVGFibGVJbmRleEhhc2hUcmFpdHNFRUVQTlNf
MTNFdmFsQ29kZUJsb2NrRQogX19aTjNKU0MxN0J5dGVjb2RlR2VuZXJhdG9yQzJFUE5TXzhFdmFs
Tm9kZUVQTlNfMTRTY29wZUNoYWluTm9kZUVQTjNXVEY3SGFzaE1hcElOUzVfNlJlZlB0cklOUzVf
MTBTdHJpbmdJbXBsRUVFTlNfMTZTeW1ib2xUYWJsZUVudHJ5RU5TXzE3SWRlbnRpZmllclJlcEhh
c2hFTlM1XzEwSGFzaFRyYWl0c0lTOV9FRU5TXzI2U3ltYm9sVGFibGVJbmRleEhhc2hUcmFpdHNF
RUVQTlNfMTNFdmFsQ29kZUJsb2NrRQpAQCAtMTA0NiwxMyArMTA0NiwxMyBAQCBfX1pOM0pTQzlK
SVRUaHVua3MxNXRyeUNhY2hlR2V0QnlJREVQTlNfCiBfX1pOM0pTQzNKSVQzM3ByaXZhdGVDb21w
aWxlUGF0Y2hHZXRBcnJheUxlbmd0aEVOU18xNlJldHVybkFkZHJlc3NQdHJFCiBfX1pOSzNKU0M4
SlNPYmplY3QyNGdldFByb3BlcnR5U3BlY2lmaWNWYWx1ZUVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEw
SWRlbnRpZmllckVSUE5TXzZKU0NlbGxFCiBfX1pOM0pTQzI3Y3RpUGF0Y2hDYWxsQnlSZXR1cm5B
ZGRyZXNzRVBOU185Q29kZUJsb2NrRU5TXzE2UmV0dXJuQWRkcmVzc1B0ckVOU18xMUZ1bmN0aW9u
UHRyRQotX19aTjNKU0MzSklUOGxpbmtDYWxsRVBOU18xMEpTRnVuY3Rpb25FUE5TXzlDb2RlQmxv
Y2tFUzRfTlNfMjFNYWNyb0Fzc2VtYmxlckNvZGVQdHJFUE5TXzEyQ2FsbExpbmtJbmZvRWlQTlNf
MTJKU0dsb2JhbERhdGFFCi1fX1pOM0pTQzNKSVQyMHBhdGNoTWV0aG9kQ2FsbFByb3RvRVJOU18x
MkpTR2xvYmFsRGF0YUVQTlNfOUNvZGVCbG9ja0VSTlNfMThNZXRob2RDYWxsTGlua0luZm9FUE5T
XzEwSlNGdW5jdGlvbkVQTlNfOVN0cnVjdHVyZUVQTlNfOEpTT2JqZWN0RU5TXzE2UmV0dXJuQWRk
cmVzc1B0ckUKK19fWk4zSlNDM0pJVDhsaW5rQ2FsbEVQTlNfMTBKU0Z1bmN0aW9uRVBOU185Q29k
ZUJsb2NrRVM0X05TXzIxTWFjcm9Bc3NlbWJsZXJDb2RlUHRyRVBOU18xMkNhbGxMaW5rSW5mb0Vp
UE5TXzEyVk1FCitfX1pOM0pTQzNKSVQyMHBhdGNoTWV0aG9kQ2FsbFByb3RvRVJOU18xMlZNRVBO
U185Q29kZUJsb2NrRVJOU18xOE1ldGhvZENhbGxMaW5rSW5mb0VQTlNfMTBKU0Z1bmN0aW9uRVBO
U185U3RydWN0dXJlRVBOU184SlNPYmplY3RFTlNfMTZSZXR1cm5BZGRyZXNzUHRyRQogX19aTjNK
U0M5SklUVGh1bmtzMTV0cnlDYWNoZVB1dEJ5SURFUE5TXzlFeGVjU3RhdGVFUE5TXzlDb2RlQmxv
Y2tFTlNfMTZSZXR1cm5BZGRyZXNzUHRyRU5TXzdKU1ZhbHVlRVJLTlNfMTVQdXRQcm9wZXJ0eVNs
b3RFUE5TXzE3U3RydWN0dXJlU3R1YkluZm9FYgogX2N0aV9vcF9nZXRfYnlfaWRfZ2VuZXJpYwog
X2N0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYwotX19aTjNKU0MxNFN0cnVjdHVyZUNoYWluQzFFUk5T
XzEySlNHbG9iYWxEYXRhRVBOU185U3RydWN0dXJlRVM0XwotX19aTjNKU0MxNFN0cnVjdHVyZUNo
YWluQzJFUk5TXzEySlNHbG9iYWxEYXRhRVBOU185U3RydWN0dXJlRVM0XworX19aTjNKU0MxNFN0
cnVjdHVyZUNoYWluQzFFUk5TXzEyVk1FUE5TXzlTdHJ1Y3R1cmVFUzRfCitfX1pOM0pTQzE0U3Ry
dWN0dXJlQ2hhaW5DMkVSTlNfMTJWTUVQTlNfOVN0cnVjdHVyZUVTNF8KIF9fWk4zSlNDM0pJVDI2
cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5FUE5TXzE3U3RydWN0dXJlU3R1YkluZm9FUE5TXzlT
dHJ1Y3R1cmVFUE5TXzE0U3RydWN0dXJlQ2hhaW5FbVJLTlNfMTBJZGVudGlmaWVyRVJLTlNfMTJQ
cm9wZXJ0eVNsb3RFbU5TXzE2UmV0dXJuQWRkcmVzc1B0ckVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4z
SlNDM0pJVDEzdGVzdFByb3RvdHlwZUVOU183SlNWYWx1ZUVSTlNfMjJBYnN0cmFjdE1hY3JvQXNz
ZW1ibGVySU5TXzEyWDg2QXNzZW1ibGVyRUU4SnVtcExpc3RFCiBfX1pOM0pTQzNKSVQyMmNvbXBp
bGVHZXREaXJlY3RPZmZzZXRFUE5TXzhKU09iamVjdEVOU18xMlg4NlJlZ2lzdGVyczEwUmVnaXN0
ZXJJREVtCkBAIC0xMTE3LDcgKzExMTcsNyBAQCBfX1pOM0pTQzIzTWFjcm9Bc3NlbWJsZXJYODZD
b21tb240bW92ZUVOCiBfX1pOM0pTQ0wyMHN0cmluZ1Byb3RvRnVuY01hdGNoRVBOU185RXhlY1N0
YXRlRQogX19aTkszSlNDMTdSZWdFeHBDb25zdHJ1Y3RvcjE0YXJyYXlPZk1hdGNoZXNFUE5TXzlF
eGVjU3RhdGVFCiBfX1pOM0pTQzE4UmVnRXhwTWF0Y2hlc0FycmF5QzJFUE5TXzlFeGVjU3RhdGVF
UE5TXzI0UmVnRXhwQ29uc3RydWN0b3JQcml2YXRlRQotX19aTjNKU0M3SlNBcnJheUMyRVJOU18x
MkpTR2xvYmFsRGF0YUVQTlNfOVN0cnVjdHVyZUVqTlNfMTdBcnJheUNyZWF0aW9uTW9kZUUKK19f
Wk4zSlNDN0pTQXJyYXlDMkVSTlNfMTJWTUVQTlNfOVN0cnVjdHVyZUVqTlNfMTdBcnJheUNyZWF0
aW9uTW9kZUUKIF9fWk4zSlNDN0pTQXJyYXkxNXNldFN1YmNsYXNzRGF0YUVQdgogX19aTjNKU0Mx
OFJlZ0V4cE1hdGNoZXNBcnJheUQxRXYKIF9fWk5LM0pTQzdKU0FycmF5MTJzdWJjbGFzc0RhdGFF
dgpAQCAtMTE0Nyw3ICsxMTQ3LDcgQEAgX19aTjNXVEYxMFN0cmluZ0ltcGw0ZmluZEVQRmJ0RWoK
IF9fWk4zV1RGMTBTdHJpbmdJbXBsNGZpbmRFUEtjagogX19aTjNXVEY2U3RyaW5nMjZmcm9tVVRG
OFdpdGhMYXRpbjFGYWxsYmFja0VQS2NtCiBfX1pOM1dURjEwZmFzdFN0ckR1cEVQS2MKLV9fWk4z
SlNDMTBJZGVudGlmaWVyMTFhZGRTbG93Q2FzZUVQTlNfMTJKU0dsb2JhbERhdGFFUE4zV1RGMTBT
dHJpbmdJbXBsRQorX19aTjNKU0MxMElkZW50aWZpZXIxMWFkZFNsb3dDYXNlRVBOU18xMlZNRVBO
M1dURjEwU3RyaW5nSW1wbEUKIF9KU1N0cmluZ1JldGFpbgogX19faW5pdGlhbGl6ZVNjYXZlbmdl
cl9ibG9ja19pbnZva2VfMQogX19aTjNXVEYyM3dhaXRGb3JUaHJlYWRDb21wbGV0aW9uRWoKQEAg
LTExNTYsNyArMTE1Niw3IEBAIF9KU09iamVjdENvcHlQcm9wZXJ0eU5hbWVzCiBfX1pOM0pTQzhK
U09iamVjdDE2Y29weUJhY2tpbmdTdG9yZUVQTlNfNkpTQ2VsbEVSTlNfMTFDb3B5VmlzaXRvckUK
IF9fWk4zSlNDOEpTT2JqZWN0MTZnZXRQcm9wZXJ0eU5hbWVzRVBOU185RXhlY1N0YXRlRVJOU18x
N1Byb3BlcnR5TmFtZUFycmF5RU5TXzE1RW51bWVyYXRpb25Nb2RlRQogX19aTjNKU0M4SlNPYmpl
Y3QxOWdldE93blByb3BlcnR5TmFtZXNFUE5TXzlFeGVjU3RhdGVFUk5TXzE3UHJvcGVydHlOYW1l
QXJyYXlFTlNfMTVFbnVtZXJhdGlvbk1vZGVFCi1fX1pOM0pTQzlTdHJ1Y3R1cmUxNmdldFByb3Bl
cnR5TmFtZXNFUk5TXzEySlNHbG9iYWxEYXRhRVJOU18xN1Byb3BlcnR5TmFtZUFycmF5RU5TXzE1
RW51bWVyYXRpb25Nb2RlRQorX19aTjNKU0M5U3RydWN0dXJlMTZnZXRQcm9wZXJ0eU5hbWVzRVJO
U18xMlZNRVJOU18xN1Byb3BlcnR5TmFtZUFycmF5RU5TXzE1RW51bWVyYXRpb25Nb2RlRQogX19a
TjNKU0M5RXhlY1N0YXRlMjBvYmplY3RQcm90b3R5cGVUYWJsZUVQUzBfCiBfSlNQcm9wZXJ0eU5h
bWVBcnJheUdldENvdW50CiBfSlNQcm9wZXJ0eU5hbWVBcnJheVJlbGVhc2UKQEAgLTEyMDIsNyAr
MTIwMiw3IEBAIF9fWk4zSlNDOUJyZWFrTm9kZTEyZW1pdEJ5dGVjb2RlRVJOU18xN0IKIF9fWk4z
SlNDMTdCeXRlY29kZUdlbmVyYXRvcjExYnJlYWtUYXJnZXRFUktOU18xMElkZW50aWZpZXJFCiBf
X1pOM0pTQzE3Qnl0ZWNvZGVHZW5lcmF0b3IxNGVtaXRKdW1wU2NvcGVzRVBOU181TGFiZWxFaQog
X19aTjNKU0NMMjBzdHJpbmdQcm90b0Z1bmNTcGxpdEVQTlNfOUV4ZWNTdGF0ZUUKLV9fWk4zSlND
MTFqc1N1YnN0cmluZ0VQTlNfMTJKU0dsb2JhbERhdGFFUktOU183VVN0cmluZ0VqagorX19aTjNK
U0MxMWpzU3Vic3RyaW5nRVBOU18xMlZNRVJLTlNfN1VTdHJpbmdFamoKIF9fWk4zSlNDN0pTQXJy
YXkzcHV0RVBOU185RXhlY1N0YXRlRWpOU183SlNWYWx1ZUUKIF9fWk4zSlNDN0pTQXJyYXkxMXB1
dFNsb3dDYXNlRVBOU185RXhlY1N0YXRlRWpOU183SlNWYWx1ZUUKIF9fWk4zSlNDMTBBU1RCdWls
ZGVyMTFtYWtlU3ViTm9kZUVQTlNfMTRFeHByZXNzaW9uTm9kZUVTMl9iCkBAIC0xMzAzLDggKzEz
MDMsOCBAQCBfX1pOM0pTQzEwdGhyb3dFcnJvckVQTlNfOUV4ZWNTdGF0ZUVOU183CiBfX1pOM0pT
QzEyaGFzRXJyb3JJbmZvRVBOU185RXhlY1N0YXRlRVBOU184SlNPYmplY3RFCiBfX1pOM0pTQzlD
b2RlQmxvY2syN2xpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldEVqCiBfX1pOM0pTQzEyYWRkRXJy
b3JJbmZvRVBOU185RXhlY1N0YXRlRVBOU184SlNPYmplY3RFaVJLTlNfMTBTb3VyY2VDb2RlRQot
X19aTjNKU0MxMmFkZEVycm9ySW5mb0VQTlNfMTJKU0dsb2JhbERhdGFFUE5TXzhKU09iamVjdEVp
UktOU18xMFNvdXJjZUNvZGVFCi1fX1pOM0pTQzhKU09iamVjdDE3cHV0V2l0aEF0dHJpYnV0ZXNF
UE5TXzEySlNHbG9iYWxEYXRhRVJLTlNfMTBJZGVudGlmaWVyRU5TXzdKU1ZhbHVlRWoKK19fWk4z
SlNDMTJhZGRFcnJvckluZm9FUE5TXzEyVk1FUE5TXzhKU09iamVjdEVpUktOU18xMFNvdXJjZUNv
ZGVFCitfX1pOM0pTQzhKU09iamVjdDE3cHV0V2l0aEF0dHJpYnV0ZXNFUE5TXzEyVk1FUktOU18x
MElkZW50aWZpZXJFTlNfN0pTVmFsdWVFagogX2N0aV9vcF9wdXNoX25ld19zY29wZQogX19aTjNK
U0MxOUpTU3RhdGljU2NvcGVPYmplY3QxOGdldE93blByb3BlcnR5U2xvdEVQTlNfOUV4ZWNTdGF0
ZUVSS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzEySlNBY3Rp
dmF0aW9uM3B1dEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVOU183SlNWYWx1ZUVS
TlNfMTVQdXRQcm9wZXJ0eVNsb3RFCkBAIC0xMzY2LDE1ICsxMzY2LDE1IEBAIF9jdGlfb3BfcHJl
X2RlYwogX19aTjNXVEYxMFN0cmluZ0ltcGwxNmZpbmRJZ25vcmluZ0Nhc2VFUFMwX2oKIF9fWk4z
SlNDNUxleGVyMTlnZXRVbmljb2RlQ2hhcmFjdGVyRXYKIF9fWk4zSlNDTDIzbnVtYmVyUHJvdG9G
dW5jVG9TdHJpbmdFUE5TXzlFeGVjU3RhdGVFCi1fX1pOM0pTQzEySlNHbG9iYWxEYXRhMTVnZXRI
b3N0RnVuY3Rpb25FUEZQdlBOU185RXhlY1N0YXRlRUVQRk5TXzIxTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyRVBTMF9QTlNfMTRFeGVjdXRhYmxlUG9vbEVFCi1fX1pOM0pTQzlKSVRUaHVua3MxNmhvc3RG
dW5jdGlvblN0dWJFUE5TXzEySlNHbG9iYWxEYXRhRVBGUHZQTlNfOUV4ZWNTdGF0ZUVFUEZOU18y
MU1hY3JvQXNzZW1ibGVyQ29kZVB0ckVTMl9QTlNfMTRFeGVjdXRhYmxlUG9vbEVFCi1fX1pOM0pT
QzE4c3FydFRodW5rR2VuZXJhdG9yRVBOU18xMkpTR2xvYmFsRGF0YUVQTlNfMTRFeGVjdXRhYmxl
UG9vbEUKK19fWk4zSlNDMTJWTTE1Z2V0SG9zdEZ1bmN0aW9uRVBGUHZQTlNfOUV4ZWNTdGF0ZUVF
UEZOU18yMU1hY3JvQXNzZW1ibGVyQ29kZVB0ckVQUzBfUE5TXzE0RXhlY3V0YWJsZVBvb2xFRQor
X19aTjNKU0M5SklUVGh1bmtzMTZob3N0RnVuY3Rpb25TdHViRVBOU18xMlZNRVBGUHZQTlNfOUV4
ZWNTdGF0ZUVFUEZOU18yMU1hY3JvQXNzZW1ibGVyQ29kZVB0ckVTMl9QTlNfMTRFeGVjdXRhYmxl
UG9vbEVFCitfX1pOM0pTQzE4c3FydFRodW5rR2VuZXJhdG9yRVBOU18xMlZNRVBOU18xNEV4ZWN1
dGFibGVQb29sRQogX19aTjNKU0MxOVNwZWNpYWxpemVkVGh1bmtKSVQ4ZmluYWxpemVFTlNfMjFN
YWNyb0Fzc2VtYmxlckNvZGVQdHJFCiBfX1pOM0pTQzEwSlNGdW5jdGlvbkMxRVBOU185RXhlY1N0
YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBOU185U3RydWN0dXJlRWlSS05TXzEwSWRlbnRpZmll
ckVQTlNfMTZOYXRpdmVFeGVjdXRhYmxlRQogX19aTjNKU0MxMEpTRnVuY3Rpb25DMkVQTlNfOUV4
ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0cnVjdHVyZUVpUktOU18xMElkZW50
aWZpZXJFUE5TXzE2TmF0aXZlRXhlY3V0YWJsZUUKIF9fWk4zSlNDM0pJVDExZW1pdF9vcF9ub3RF
UE5TXzExSW5zdHJ1Y3Rpb25FCiBfX1pOM0pTQzNKSVQxNWVtaXRTbG93X29wX25vdEVQTlNfMTFJ
bnN0cnVjdGlvbkVSUE5TXzEzU2xvd0Nhc2VFbnRyeUUKLV9fWk4zSlNDMTdwb3dUaHVua0dlbmVy
YXRvckVQTlNfMTJKU0dsb2JhbERhdGFFUE5TXzE0RXhlY3V0YWJsZVBvb2xFCitfX1pOM0pTQzE3
cG93VGh1bmtHZW5lcmF0b3JFUE5TXzEyVk1FUE5TXzE0RXhlY3V0YWJsZVBvb2xFCiBfX1pOM0pT
QzEyWDg2QXNzZW1ibGVyN2NtcGxfaW1FaWlOU18xMlg4NlJlZ2lzdGVyczEwUmVnaXN0ZXJJREUK
IF9fWk4zSlNDMjNNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjI2YnJhbmNoQ29udmVydERvdWJsZVRv
SW50MzJFTlNfMTJYODZSZWdpc3RlcnMxM1hNTVJlZ2lzdGVySURFTlMxXzEwUmVnaXN0ZXJJREVS
TlNfMjJBYnN0cmFjdE1hY3JvQXNzZW1ibGVySU5TXzEyWDg2QXNzZW1ibGVyRUU4SnVtcExpc3RF
UzJfCiBfX1pOM0pTQzE5U3BlY2lhbGl6ZWRUaHVua0pJVDExcmV0dXJuSW50MzJFTlNfMTJYODZS
ZWdpc3RlcnMxMFJlZ2lzdGVySURFCkBAIC0xMzg4LDggKzEzODgsOCBAQCBfY3RpX29wX2RlbF9i
eV9pZAogX19aTjNKU0MxNkpTVmFyaWFibGVPYmplY3QxNGRlbGV0ZVByb3BlcnR5RVBOU185RXhl
Y1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRQogX19aTjNKU0M4SlNPYmplY3QxNGRlbGV0ZVByb3Bl
cnR5RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRQogX19aTjNKU0MxN09iamVjdENv
bnN0cnVjdG9yMThnZXRPd25Qcm9wZXJ0eVNsb3RFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50
aWZpZXJFUk5TXzEyUHJvcGVydHlTbG90RQotX19aTjNKU0M5U3RydWN0dXJlMjdkZXNwZWNpZnlG
dW5jdGlvblRyYW5zaXRpb25FUk5TXzEySlNHbG9iYWxEYXRhRVBTMF9SS05TXzEwSWRlbnRpZmll
ckUKLV9fWk4zSlNDMTNQcm9wZXJ0eVRhYmxlQzJFUk5TXzEySlNHbG9iYWxEYXRhRVBOU182SlND
ZWxsRVJLUzBfCitfX1pOM0pTQzlTdHJ1Y3R1cmUyN2Rlc3BlY2lmeUZ1bmN0aW9uVHJhbnNpdGlv
bkVSTlNfMTJWTUVQUzBfUktOU18xMElkZW50aWZpZXJFCitfX1pOM0pTQzEzUHJvcGVydHlUYWJs
ZUMyRVJOU18xMlZNRVBOU182SlNDZWxsRVJLUzBfCiBfX1pOSzNXVEY2U3RyaW5nNnRvVUludEVQ
YgogX19aTjNXVEYxMFN0cmluZ0ltcGw2dG9VSW50RVBiCiBfX1pOM1dURjE2Y2hhcmFjdGVyc1Rv
VUludEVQS3RtUGIKQEAgLTE0MzYsNyArMTQzNiw3IEBAIF9jdGlfb3BfcHV0X2J5X2lkX2ZhaWwK
IF9fWk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvcjExZW1pdFBvc3RJbmNFUE5TXzEwUmVnaXN0ZXJJ
REVTMl8KIF9fWk4zSlNDM0pJVDE2ZW1pdF9vcF9wb3N0X2luY0VQTlNfMTFJbnN0cnVjdGlvbkUK
IF9fWk4zSlNDM0pJVDIwZW1pdFNsb3dfb3BfcG9zdF9pbmNFUE5TXzExSW5zdHJ1Y3Rpb25FUlBO
U18xM1Nsb3dDYXNlRW50cnlFCi1fX1pOM0pTQ0wyM2NyZWF0ZVByb3RvdHlwZVByb3BlcnR5RVJO
U18xMkpTR2xvYmFsRGF0YUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfMTBKU0Z1bmN0aW9uRQor
X19aTjNKU0NMMjNjcmVhdGVQcm90b3R5cGVQcm9wZXJ0eUVSTlNfMTJWTUVQTlNfMTRKU0dsb2Jh
bE9iamVjdEVQTlNfMTBKU0Z1bmN0aW9uRQogX19aTkszSlNDOE51bGxOb2RlNmlzTnVsbEV2CiBf
X1pOM0pTQzNKSVQxN2VtaXRfb3Bfam5lcV9udWxsRVBOU18xMUluc3RydWN0aW9uRQogX2N0aV9v
cF9jb252ZXJ0X3RoaXMKQEAgLTE0NzgsNyArMTQ3OCw3IEBAIF9fWk4zV1RGN1VuaWNvZGUxOGVx
dWFsVVRGMTZXaXRoVVRGOEVQS3QKIF9fWk4zV1RGMTFlbXB0eVN0cmluZ0V2CiBfX1pOM1dURjZT
dHJpbmc2bnVtYmVyRWoKIF9fWk4zSlNDMTRQb3N0Zml4RG90Tm9kZTEyZW1pdEJ5dGVjb2RlRVJO
U18xN0J5dGVjb2RlR2VuZXJhdG9yRVBOU18xMFJlZ2lzdGVySURFCi1fX1pOM0pTQzdKU0FycmF5
QzFFUk5TXzEySlNHbG9iYWxEYXRhRVBOU185U3RydWN0dXJlRWpOU18xN0FycmF5Q3JlYXRpb25N
b2RlRQorX19aTjNKU0M3SlNBcnJheUMxRVJOU18xMlZNRVBOU185U3RydWN0dXJlRWpOU18xN0Fy
cmF5Q3JlYXRpb25Nb2RlRQogX19aTjNKU0MxMElkZW50aWZpZXI0ZnJvbUVQTlNfOUV4ZWNTdGF0
ZUVqCiBfX1pOM0pTQzNKSVQyMmNvbXBpbGVHZXREaXJlY3RPZmZzZXRFTlNfMTJYODZSZWdpc3Rl
cnMxMFJlZ2lzdGVySURFUzJfUE5TXzlTdHJ1Y3R1cmVFbQogX19aTjNXVEY2VmVjdG9ySU4zSlND
MTRFeGVjdXRhYmxlUG9vbDEwQWxsb2NhdGlvbkVMbTJFRTE1cmVzZXJ2ZUNhcGFjaXR5RW0KQEAg
LTE0OTQsOCArMTQ5NCw4IEBAIF9fWk4zSlNDNFlhcnIxM1lhcnJHZW5lcmF0b3IyOWdlbmVyYXRl
QXMKIF9fWk4zSlNDMTJYODZBc3NlbWJsZXIyM1g4Nkluc3RydWN0aW9uRm9ybWF0dGVyMTFtZW1v
cnlNb2RSTUVpTlNfMTJYODZSZWdpc3RlcnMxMFJlZ2lzdGVySURFUzNfaWkKIF9fWk4zSlNDTDIx
c3RyaW5nUHJvdG9GdW5jU2VhcmNoRVBOU185RXhlY1N0YXRlRQogX19aTjNKU0MxN1N0cmluZ0Nv
bnN0cnVjdG9yMThnZXRPd25Qcm9wZXJ0eVNsb3RFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50
aWZpZXJFUk5TXzEyUHJvcGVydHlTbG90RQotX19aTjNKU0MyNmZyb21DaGFyQ29kZVRodW5rR2Vu
ZXJhdG9yRVBOU18xMkpTR2xvYmFsRGF0YUVQTlNfMTRFeGVjdXRhYmxlUG9vbEUKLV9fWk4zSlND
TDEyY2hhclRvU3RyaW5nRVJOU18xOVNwZWNpYWxpemVkVGh1bmtKSVRFUE5TXzEySlNHbG9iYWxE
YXRhRU5TXzEyWDg2UmVnaXN0ZXJzMTBSZWdpc3RlcklERVM1X1M1XworX19aTjNKU0MyNmZyb21D
aGFyQ29kZVRodW5rR2VuZXJhdG9yRVBOU18xMlZNRVBOU18xNEV4ZWN1dGFibGVQb29sRQorX19a
TjNKU0NMMTJjaGFyVG9TdHJpbmdFUk5TXzE5U3BlY2lhbGl6ZWRUaHVua0pJVEVQTlNfMTJWTUVO
U18xMlg4NlJlZ2lzdGVyczEwUmVnaXN0ZXJJREVTNV9TNV8KIF9fWk4zSlNDTDE4c3RyaW5nRnJv
bUNoYXJDb2RlRVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDOEpTT2JqZWN0MTRpc0dsb2JhbE9i
amVjdEV2CiBfX1pOSzNXVEY2U3RyaW5nMTZyZW1vdmVDaGFyYWN0ZXJzRVBGYnRFCkBAIC0xNTE4
LDEyICsxNTE4LDEyIEBAIF9fWk4zSlNDM0pJVDE4ZW1pdF9vcF9nZXRfcG5hbWVzRVBOU18xMUkK
IF9fWk4zSlNDM0pJVDIwZW1pdF9vcF9nZXRfYnlfcG5hbWVFUE5TXzExSW5zdHJ1Y3Rpb25FCiBf
X1pOM0pTQzNKSVQxOGVtaXRfb3BfbmV4dF9wbmFtZUVQTlNfMTFJbnN0cnVjdGlvbkUKIF9fWk4z
SlNDM0pJVDI0ZW1pdFNsb3dfb3BfZ2V0X2J5X3BuYW1lRVBOU18xMUluc3RydWN0aW9uRVJQTlNf
MTNTbG93Q2FzZUVudHJ5RQotX19aTjNKU0M5U3RydWN0dXJlMjJ0b0RpY3Rpb25hcnlUcmFuc2l0
aW9uRVJOU18xMkpTR2xvYmFsRGF0YUVQUzBfTlMwXzE0RGljdGlvbmFyeUtpbmRFCitfX1pOM0pT
QzlTdHJ1Y3R1cmUyMnRvRGljdGlvbmFyeVRyYW5zaXRpb25FUk5TXzEyVk1FUFMwX05TMF8xNERp
Y3Rpb25hcnlLaW5kRQogX2N0aV9vcF9nZXRfcG5hbWVzCiBfX1pOM0pTQzIySlNQcm9wZXJ0eU5h
bWVJdGVyYXRvcjZjcmVhdGVFUE5TXzlFeGVjU3RhdGVFUE5TXzhKU09iamVjdEUKIF9fWk4zV1RG
NlZlY3RvcklOM0pTQzEwSWRlbnRpZmllckVMbTIwRUUxNGV4cGFuZENhcGFjaXR5RW0KIF9jdGlf
aGFzX3Byb3BlcnR5Ci1fX1pOM0pTQzlTdHJ1Y3R1cmUyNmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0
dXJlRVJOU18xMkpTR2xvYmFsRGF0YUVQTlNfOEpTT2JqZWN0RQorX19aTjNKU0M5U3RydWN0dXJl
MjZmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZUVSTlNfMTJWTUVQTlNfOEpTT2JqZWN0RQogX0pT
VmFsdWVJc09iamVjdE9mQ2xhc3MKIF9fWk4zSlNDMTZKU0NhbGxiYWNrT2JqZWN0SU5TXzI0SlNP
YmplY3RXaXRoR2xvYmFsT2JqZWN0RUUzcHV0RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlm
aWVyRU5TXzdKU1ZhbHVlRVJOU18xNVB1dFByb3BlcnR5U2xvdEUKIF9KU1ZhbHVlQ3JlYXRlSlNP
TlN0cmluZwpAQCAtMTU5OCw3ICsxNTk4LDcgQEAgX19aTjNKU0MxMVN0cmluZ2lmaWVyMThhcHBl
bmRRdW90ZWRTdHJpbgogX19aTjNKU0M3VVN0cmluZ0MxRVBLY2oKIF9KU09iamVjdEdldFByaXZh
dGVQcm9wZXJ0eQogX0pTT2JqZWN0U2V0UHJpdmF0ZVByb3BlcnR5Ci1fX1pOM0pTQzIwSlNDYWxs
YmFja09iamVjdERhdGExOHNldFByaXZhdGVQcm9wZXJ0eUVSTlNfMTJKU0dsb2JhbERhdGFFUE5T
XzZKU0NlbGxFUktOU18xMElkZW50aWZpZXJFTlNfN0pTVmFsdWVFCitfX1pOM0pTQzIwSlNDYWxs
YmFja09iamVjdERhdGExOHNldFByaXZhdGVQcm9wZXJ0eUVSTlNfMTJWTUVQTlNfNkpTQ2VsbEVS
S05TXzEwSWRlbnRpZmllckVOU183SlNWYWx1ZUUKIF9fWk4zV1RGOUhhc2hUYWJsZUlOU182UmVm
UHRySU5TXzEwU3RyaW5nSW1wbEVFRVN0NHBhaXJJUzNfTjNKU0MxMldyaXRlQmFycmllcklOUzVf
N1Vua25vd25FRUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzlfRUVOUzVfMTdJZGVudGlmaWVy
UmVwSGFzaEVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTM19FRU5TRV9JUzhf
RUVFRVNGX0U2cmVoYXNoRWkKIF9KU09iamVjdERlbGV0ZVByaXZhdGVQcm9wZXJ0eQogX19aTjNK
U0M0WWFycjE4UGF0dGVybkRpc2p1bmN0aW9uMTdhZGROZXdBbHRlcm5hdGl2ZUV2CkBAIC0xNjIz
LDcgKzE2MjMsNyBAQCBfX1pOM0pTQzNKSVQyMGVtaXRTbG93X29wX3Bvc3RfZGVjRVBOU18xCiBf
X1pOM0pTQzdKU0FycmF5MTlnZXRPd25Qcm9wZXJ0eU5hbWVzRVBOU185RXhlY1N0YXRlRVJOU18x
N1Byb3BlcnR5TmFtZUFycmF5RU5TXzE1RW51bWVyYXRpb25Nb2RlRQogX19aTjNKU0MxN1Byb3Bl
cnR5TmFtZUFycmF5M2FkZEVQTjNXVEYxMFN0cmluZ0ltcGxFCiBfX1pOM0pTQzlFeGVjU3RhdGUx
OWFycmF5UHJvdG90eXBlVGFibGVFUFMwXwotX19aTjNKU0MyMGNoYXJBdFRodW5rR2VuZXJhdG9y
RVBOU18xMkpTR2xvYmFsRGF0YUVQTlNfMTRFeGVjdXRhYmxlUG9vbEUKK19fWk4zSlNDMjBjaGFy
QXRUaHVua0dlbmVyYXRvckVQTlNfMTJWTUVQTlNfMTRFeGVjdXRhYmxlUG9vbEUKIF9fWk4zSlND
TDE0c3RyaW5nQ2hhckxvYWRFUk5TXzE5U3BlY2lhbGl6ZWRUaHVua0pJVEUKIF9fWk4zSlNDTDIx
c3RyaW5nUHJvdG9GdW5jQ2hhckF0RVBOU185RXhlY1N0YXRlRQogX19aTjNXVEY2VmVjdG9ySVBO
M0pTQzE0RXhwcmVzc2lvbk5vZGVFTG0xNkVFMTRleHBhbmRDYXBhY2l0eUVtCkBAIC0xNjY1LDcg
KzE2NjUsNyBAQCBfX1pOM0pTQzNKSVQxNGVtaXRfb3BfcnNoaWZ0RVBOU18xMUluc3RyCiBfX1pO
M0pTQzNKSVQxOGVtaXRTbG93X29wX3JzaGlmdEVQTlNfMTFJbnN0cnVjdGlvbkVSUE5TXzEzU2xv
d0Nhc2VFbnRyeUUKIF9jdGlfb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fcmVhbGxvYwogX19aTksz
V1RGNlN0cmluZzVzcGxpdEV0YlJOU182VmVjdG9ySVMwX0xtMEVFRQotX19aTjNKU0MyNGNoYXJD
b2RlQXRUaHVua0dlbmVyYXRvckVQTlNfMTJKU0dsb2JhbERhdGFFUE5TXzE0RXhlY3V0YWJsZVBv
b2xFCitfX1pOM0pTQzI0Y2hhckNvZGVBdFRodW5rR2VuZXJhdG9yRVBOU18xMlZNRVBOU18xNEV4
ZWN1dGFibGVQb29sRQogX2N0aV9vcF9nZXRfYnlfdmFsX3N0cmluZwogX19aTjNKU0MxN1N0cmlu
Z0NvbnN0cnVjdG9yMTFnZXRDYWxsRGF0YUVSTlNfOENhbGxEYXRhRQogX19aTjNKU0NMMjFjYWxs
U3RyaW5nQ29uc3RydWN0b3JFUE5TXzlFeGVjU3RhdGVFCkBAIC0xNjc1LDEwICsxNjc1LDEwIEBA
IF9fWk4zSlNDMTdOdW1iZXJDb25zdHJ1Y3RvcjE4Z2V0T3duUHJvcGUKIF9fWk4zSlNDMTNqc0Fk
ZFNsb3dDYXNlRVBOU185RXhlY1N0YXRlRU5TXzdKU1ZhbHVlRVMyXwogX19aTkszSlNDOEpTU3Ry
aW5nMTF0b1ByaW1pdGl2ZUVQTlNfOUV4ZWNTdGF0ZUVOU18yMlByZWZlcnJlZFByaW1pdGl2ZVR5
cGVFCiBfY3RpX29wX2dldF9ieV9pZF9nZXR0ZXJfc3R1YgotX19aTjNKU0M5U3RydWN0dXJlMjRy
ZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb25FUk5TXzEySlNHbG9iYWxEYXRhRVBTMF9SS05TXzEwSWRl
bnRpZmllckVSbQorX19aTjNKU0M5U3RydWN0dXJlMjRyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb25F
Uk5TXzEyVk1FUFMwX1JLTlNfMTBJZGVudGlmaWVyRVJtCiBfX1pOM0pTQzlTdHJ1Y3R1cmU2cmVt
b3ZlRVJLTlNfMTBJZGVudGlmaWVyRQogX19aTjNXVEY2VmVjdG9ySWpMbTBFRTE0ZXhwYW5kQ2Fw
YWNpdHlFbQotX19aTjNKU0M5U3RydWN0dXJlMzFyZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0
aW9uRVJOU18xMkpTR2xvYmFsRGF0YUVSS05TXzEwSWRlbnRpZmllckUKK19fWk4zSlNDOVN0cnVj
dHVyZTMxcmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbkVSTlNfMTJWTUVSS05TXzEwSWRl
bnRpZmllckUKIF9fWk4zSlNDMTJHZXR0ZXJTZXR0ZXIxM3Zpc2l0Q2hpbGRyZW5FUk5TXzlNYXJr
U3RhY2tFCiBfX1pOM0pTQzlBcmd1bWVudHMxM3Zpc2l0Q2hpbGRyZW5FUk5TXzlNYXJrU3RhY2tF
CiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxN1dlYWtNYXBzRmluYWxpemVyOGZpbmFsaXplRU5T
XzZIYW5kbGVJTlNfN1Vua25vd25FRUVQdgpAQCAtMTcwMSwxMyArMTcwMSwxMyBAQCBfX1pOM0pT
QzhKU1BhcnNlcjIxcGFyc2VEb1doaWxlU3RhdGVtZW50CiBfX1pOM0pTQ0wxNm1hdGhQcm90b0Z1
bmNNaW5FUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0pTQ0wyMWFycmF5UHJvdG9GdW5jUmV2ZXJzZUVQ
TlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlNDMTdQcm9ncmFtRXhlY3V0YWJsZTEzdmlzaXRDaGlsZHJl
bkVSTlNfOU1hcmtTdGFja0UKLV9fWk4zSlNDMTJKU0dsb2JhbERhdGExOGNyZWF0ZUNvbnRleHRH
cm91cEVOU184SGVhcFR5cGVFCi1fX1pOM0pTQzEySlNHbG9iYWxEYXRhMjJjbGVhckJ1aWx0aW5T
dHJ1Y3R1cmVzRXYKK19fWk4zSlNDMTJWTTE4Y3JlYXRlQ29udGV4dEdyb3VwRU5TXzhIZWFwVHlw
ZUUKK19fWk4zSlNDMTJWTTIyY2xlYXJCdWlsdGluU3RydWN0dXJlc0V2CiBfX1pOM0pTQzRIZWFw
N2Rlc3Ryb3lFdgogX19aTjNKU0M5SklUVGh1bmtzMjJjbGVhckhvc3RGdW5jdGlvblN0dWJzRXYK
IF9fWk4zSlNDMTFNYXJrZWRTcGFjZTdkZXN0cm95RXYKLV9fWk4zSlNDMTJKU0dsb2JhbERhdGFE
MUV2Ci1fX1pOM0pTQzEySlNHbG9iYWxEYXRhRDJFdgorX19aTjNKU0MxMlZNRDFFdgorX19aTjNK
U0MxMlZNRDJFdgogX19aTjNKU0MxMkpTU3RhY2tEMUV2CiBfX1pOM0pTQzEySlNTdGFja0QyRXYK
IF9fWk5LM0pTQzlIYXNoVGFibGUxMWRlbGV0ZVRhYmxlRXYKQEAgLTE3MjYsMTIgKzE3MjYsMTIg
QEAgX19aTjNKU0MyNURlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2tEMEV2CiBfX1pOM0pTQzlKSVRU
aHVua3NEMUV2CiBfX1pOM0pTQzEyU21hbGxTdHJpbmdzRDFFdgogX19aTjEzT3BhcXVlSlNDbGFz
czI2Y3JlYXRlTm9BdXRvbWF0aWNQcm90b3R5cGVFUEsxN0pTQ2xhc3NEZWZpbml0aW9uCi1fX1pO
M0pTQzE2SlNDYWxsYmFja09iamVjdElOU18xNEpTR2xvYmFsT2JqZWN0RUVDMkVSTlNfMTJKU0ds
b2JhbERhdGFFUDEzT3BhcXVlSlNDbGFzc1BOU185U3RydWN0dXJlRQorX19aTjNKU0MxNkpTQ2Fs
bGJhY2tPYmplY3RJTlNfMTRKU0dsb2JhbE9iamVjdEVFQzJFUk5TXzEyVk1FUDEzT3BhcXVlSlND
bGFzc1BOU185U3RydWN0dXJlRQogX19aTjNKU0MxNkpTQ2FsbGJhY2tPYmplY3RJTlNfMTRKU0ds
b2JhbE9iamVjdEVFNGluaXRFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0pTQzE2SlNDYWxsYmFja09i
amVjdElOU18xNEpTR2xvYmFsT2JqZWN0RUUxOGdldE93blByb3BlcnR5U2xvdEVQTlNfOUV4ZWNT
dGF0ZUVSS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCiBfX1pOMTNPcGFxdWVK
U0NsYXNzMTJzdGF0aWNWYWx1ZXNFUE4zSlNDOUV4ZWNTdGF0ZUUKIF9fWk4xM09wYXF1ZUpTQ2xh
c3MxNXN0YXRpY0Z1bmN0aW9uc0VQTjNKU0M5RXhlY1N0YXRlRQotX19aTjNKU0MxNEpTR2xvYmFs
T2JqZWN0MTRyZXNldFByb3RvdHlwZUVSTlNfMTJKU0dsb2JhbERhdGFFTlNfN0pTVmFsdWVFCitf
X1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxNHJlc2V0UHJvdG90eXBlRVJOU18xMlZNRU5TXzdKU1Zh
bHVlRQogX0pTUmVwb3J0RXh0cmFNZW1vcnlDb3N0CiBfSlNWYWx1ZUlzT2JqZWN0CiBfSlNWYWx1
ZU1ha2VOdWxsCkBAIC0xODM2LDE4ICsxODM2LDE4IEBAIF9KU09iamVjdEhhc1Byb3BlcnR5CiBf
SlNPYmplY3RHZXRQcm90b3R5cGUKIF9fWk4zSlNDOEpTT2JqZWN0MTV1bndyYXBwZWRPYmplY3RF
dgogX19aTjNKU0MxMWNyZWF0ZUVycm9yRVBOU185RXhlY1N0YXRlRVJLTlNfN1VTdHJpbmdFCi1f
X1pOM0pTQzEySlNHbG9iYWxEYXRhNmNyZWF0ZUVOU184SGVhcFR5cGVFCitfX1pOM0pTQzEyVk02
Y3JlYXRlRU5TXzhIZWFwVHlwZUUKIF9fWk4zSlNDOEpTT2JqZWN0MTdwdXREaXJlY3RGdW5jdGlv
bkVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTBKU0Z1bmN0aW9uRWoKLV9fWk4zSlNDMTJKU0dsb2JhbERh
dGExM3N0YXJ0U2FtcGxpbmdFdgorX19aTjNKU0MxMlZNMTNzdGFydFNhbXBsaW5nRXYKIF9fWk4z
SlNDMTFJbnRlcnByZXRlcjEzc3RhcnRTYW1wbGluZ0V2CiBfX1pOM0pTQzE1RGF0ZUNvbnN0cnVj
dG9yMTZnZXRDb25zdHJ1Y3REYXRhRVJOU18xM0NvbnN0cnVjdERhdGFFCiBfX1pOM0pTQ0wyOGNv
bnN0cnVjdFdpdGhEYXRlQ29uc3RydWN0b3JFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0pTQzIxZ3Jl
Z29yaWFuRGF0ZVRpbWVUb01TRVBOU185RXhlY1N0YXRlRVJLTlNfMTdHcmVnb3JpYW5EYXRlVGlt
ZUVkYgogX19aTjNKU0NMMzBkYXRlUHJvdG9GdW5jR2V0VGltZXpvbmVPZmZzZXRFUE5TXzlFeGVj
U3RhdGVFCi1fX1pOM0pTQzEySlNHbG9iYWxEYXRhMTJzdG9wU2FtcGxpbmdFdgorX19aTjNKU0Mx
MlZNMTJzdG9wU2FtcGxpbmdFdgogX19aTjNKU0MxMUludGVycHJldGVyMTJzdG9wU2FtcGxpbmdF
dgogX19aTjNXVEY5SGFzaFRhYmxlSWpTdDRwYWlySWpOM0pTQzEyV3JpdGVCYXJyaWVySU5TMl83
VW5rbm93bkVFRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTNl9FRU5TXzdJbnRIYXNoSWpFRU5T
XzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSWpFRU5TQ19JUzVfRUVFRVNEX0U2cmVo
YXNoRWkKLV9fWk4zSlNDMTJKU0dsb2JhbERhdGExNGR1bXBTYW1wbGVEYXRhRVBOU185RXhlY1N0
YXRlRQorX19aTjNKU0MxMlZNMTRkdW1wU2FtcGxlRGF0YUVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4z
SlNDMTFJbnRlcnByZXRlcjE0ZHVtcFNhbXBsZURhdGFFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0pT
QzE2QXJyYXlDb25zdHJ1Y3RvcjExZ2V0Q2FsbERhdGFFUk5TXzhDYWxsRGF0YUUKIF9fWk4zSlND
TDIwY2FsbEFycmF5Q29uc3RydWN0b3JFUE5TXzlFeGVjU3RhdGVFCkBAIC0xODU1LDE1ICsxODU1
LDE1IEBAIF9fWk4zSlNDMTdOdW1iZXJDb25zdHJ1Y3RvcjExZ2V0Q2FsbERhdGEKIF9fWk4zSlND
TDIxY2FsbE51bWJlckNvbnN0cnVjdG9yRVBOU185RXhlY1N0YXRlRQogX19aTjNKU0NMMjhudW1i
ZXJDb25zdHJ1Y3RvclBvc0luZmluaXR5RVBOU185RXhlY1N0YXRlRU5TXzdKU1ZhbHVlRVJLTlNf
MTBJZGVudGlmaWVyRQogX2N0aV9vcF9tb2QKLV9fWk4zSlNDM0pJVDEzbGlua0NvbnN0cnVjdEVQ
TlNfMTBKU0Z1bmN0aW9uRVBOU185Q29kZUJsb2NrRVM0X05TXzIxTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyRVBOU18xMkNhbGxMaW5rSW5mb0VpUE5TXzEySlNHbG9iYWxEYXRhRQorX19aTjNKU0MzSklU
MTNsaW5rQ29uc3RydWN0RVBOU18xMEpTRnVuY3Rpb25FUE5TXzlDb2RlQmxvY2tFUzRfTlNfMjFN
YWNyb0Fzc2VtYmxlckNvZGVQdHJFUE5TXzEyQ2FsbExpbmtJbmZvRWlQTlNfMTJWTUUKIF9fWk4z
SlNDMTRFdmFsRXhlY3V0YWJsZTEzdmlzaXRDaGlsZHJlbkVSTlNfOU1hcmtTdGFja0UKIF9fWk4z
SlNDMTdOdW1iZXJDb25zdHJ1Y3RvcjE2Z2V0Q29uc3RydWN0RGF0YUVSTlNfMTNDb25zdHJ1Y3RE
YXRhRQogX19aTjNKU0NMMzBjb25zdHJ1Y3RXaXRoTnVtYmVyQ29uc3RydWN0b3JFUE5TXzlFeGVj
U3RhdGVFCi1fX1pOM0pTQzEyTnVtYmVyT2JqZWN0QzFFUk5TXzEySlNHbG9iYWxEYXRhRVBOU185
U3RydWN0dXJlRQorX19aTjNKU0MxMk51bWJlck9iamVjdEMxRVJOU18xMlZNRVBOU185U3RydWN0
dXJlRQogX19aTjNKU0MxOEJvb2xlYW5Db25zdHJ1Y3RvcjE2Z2V0Q29uc3RydWN0RGF0YUVSTlNf
MTNDb25zdHJ1Y3REYXRhRQogX19aTjNKU0NMMzFjb25zdHJ1Y3RXaXRoQm9vbGVhbkNvbnN0cnVj
dG9yRVBOU185RXhlY1N0YXRlRQogX19aTjNKU0MxNmNvbnN0cnVjdEJvb2xlYW5FUE5TXzlFeGVj
U3RhdGVFUktOU183QXJnTGlzdEUKLV9fWk4zSlNDMTNCb29sZWFuT2JqZWN0QzFFUk5TXzEySlNH
bG9iYWxEYXRhRVBOU185U3RydWN0dXJlRQorX19aTjNKU0MxM0Jvb2xlYW5PYmplY3RDMUVSTlNf
MTJWTUVQTlNfOVN0cnVjdHVyZUUKIF9fWk4zSlNDMTNCb29sZWFuT2JqZWN0RDFFdgogX19aTjNK
U0M5RXhlY1N0YXRlMjFhcnJheUNvbnN0cnVjdG9yVGFibGVFUFMwXwogX19aTjNKU0MxN0Z1bmN0
aW9uUHJvdG90eXBlMTFnZXRDYWxsRGF0YUVSTlNfOENhbGxEYXRhRQpAQCAtMjE5MCw3ICsyMTkw
LDcgQEAgX19aTjNKU0NMMjVhcnJheVByb3RvRnVuY0xhc3RJbmRleE9mRVBOUwogX19aTjNXVEYy
MGVxdWFsSWdub3JpbmdOdWxsaXR5RVBOU18xMFN0cmluZ0ltcGxFUzFfCiBfY3RpX29wX2dldF9i
eV9pZF9hcnJheV9mYWlsCiBfX1pOM0pTQzE3UHJlZml4QnJhY2tldE5vZGUxMmVtaXRCeXRlY29k
ZUVSTlNfMTdCeXRlY29kZUdlbmVyYXRvckVQTlNfMTBSZWdpc3RlcklERQotX19aTjNKU0MxMkpT
R2xvYmFsRGF0YTEwQ2xpZW50RGF0YUQyRXYKK19fWk4zSlNDMTJWTTEwQ2xpZW50RGF0YUQyRXYK
IF9fWk4zSlNDOERlYnVnZ2VyRDJFdgogX19aTjNXVEYxNFRocmVhZFNwZWNpZmljSU5TXzEzV1RG
VGhyZWFkRGF0YUVFN2Rlc3Ryb3lFUHYKIF9fWk4zV1RGMTNXVEZUaHJlYWREYXRhRDFFdgpAQCAt
MjIwNyw3ICsyMjA3LDcgQEAgX19aTkszSlNDNEhlYXAxMW9iamVjdENvdW50RXYKIF9fWk5LM0pT
QzExTWFya2VkU3BhY2UxMW9iamVjdENvdW50RXYKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDEy
ZGVmaW5lR2V0dGVyRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVBOU184SlNPYmpl
Y3RFagogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0MTJkZWZpbmVTZXR0ZXJFUE5TXzlFeGVjU3Rh
dGVFUktOU18xMElkZW50aWZpZXJFUE5TXzhKU09iamVjdEVqCi1fX1pOM0pTQzlTdHJ1Y3R1cmUy
MmdldHRlclNldHRlclRyYW5zaXRpb25FUk5TXzEySlNHbG9iYWxEYXRhRVBTMF8KK19fWk4zSlND
OVN0cnVjdHVyZTIyZ2V0dGVyU2V0dGVyVHJhbnNpdGlvbkVSTlNfMTJWTUVQUzBfCiBfX1pOM0pT
Q0wyOG9iamVjdFByb3RvRnVuY0lzUHJvdG90eXBlT2ZFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0pT
Q0wyMWZ1bmN0aW9uUHJvdG9GdW5jQ2FsbEVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzdBcmdM
aXN0OGdldFNsaWNlRWlSUzBfCkBAIC0yMzMyLDE3ICsyMzMyLDE3IEBAIF9fWk4zSlNDMTNVbmFy
eVBsdXNOb2RlMTRzdHJpcFVuYXJ5UGx1c0UKIF9fWk4zSlNDTDI5b2JqZWN0UHJvdG9GdW5jVG9M
b2NhbGVTdHJpbmdFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM1dURjZWZWN0b3JJTjNKU0M4SlNQYXJz
ZXIxNFNjb3BlTGFiZWxJbmZvRUxtMkVFMTRleHBhbmRDYXBhY2l0eUVtCiBfX1pOM0pTQ0wzNG9i
amVjdENvbnN0cnVjdG9yUHJldmVudEV4dGVuc2lvbnNFUE5TXzlFeGVjU3RhdGVFCi1fX1pOM0pT
QzEwSlNGdW5jdGlvbjE3cHJldmVudEV4dGVuc2lvbnNFUk5TXzEySlNHbG9iYWxEYXRhRQotX19a
TjNKU0M4SlNPYmplY3QxN3ByZXZlbnRFeHRlbnNpb25zRVJOU18xMkpTR2xvYmFsRGF0YUUKLV9f
Wk4zSlNDOVN0cnVjdHVyZTI3cHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uRVJOU18xMkpTR2xv
YmFsRGF0YUVQUzBfCitfX1pOM0pTQzEwSlNGdW5jdGlvbjE3cHJldmVudEV4dGVuc2lvbnNFUk5T
XzEyVk1FCitfX1pOM0pTQzhKU09iamVjdDE3cHJldmVudEV4dGVuc2lvbnNFUk5TXzEyVk1FCitf
X1pOM0pTQzlTdHJ1Y3R1cmUyN3ByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbkVSTlNfMTJWTUVQ
UzBfCiBfX1pOM0pTQ0wyMW9iamVjdENvbnN0cnVjdG9yU2VhbEVQTlNfOUV4ZWNTdGF0ZUUKLV9f
Wk4zSlNDOEpTT2JqZWN0NHNlYWxFUk5TXzEySlNHbG9iYWxEYXRhRQotX19aTjNKU0M5U3RydWN0
dXJlOGlzU2VhbGVkRVJOU18xMkpTR2xvYmFsRGF0YUUKLV9fWk4zSlNDOVN0cnVjdHVyZTE0c2Vh
bFRyYW5zaXRpb25FUk5TXzEySlNHbG9iYWxEYXRhRVBTMF8KK19fWk4zSlNDOEpTT2JqZWN0NHNl
YWxFUk5TXzEyVk1FCitfX1pOM0pTQzlTdHJ1Y3R1cmU4aXNTZWFsZWRFUk5TXzEyVk1FCitfX1pO
M0pTQzlTdHJ1Y3R1cmUxNHNlYWxUcmFuc2l0aW9uRVJOU18xMlZNRVBTMF8KIF9fWk4zSlNDTDIz
b2JqZWN0Q29uc3RydWN0b3JGcmVlemVFUE5TXzlFeGVjU3RhdGVFCi1fX1pOM0pTQzhKU09iamVj
dDZmcmVlemVFUk5TXzEySlNHbG9iYWxEYXRhRQotX19aTjNKU0M5U3RydWN0dXJlOGlzRnJvemVu
RVJOU18xMkpTR2xvYmFsRGF0YUUKLV9fWk4zSlNDOVN0cnVjdHVyZTE2ZnJlZXplVHJhbnNpdGlv
bkVSTlNfMTJKU0dsb2JhbERhdGFFUFMwXworX19aTjNKU0M4SlNPYmplY3Q2ZnJlZXplRVJOU18x
MlZNRQorX19aTjNKU0M5U3RydWN0dXJlOGlzRnJvemVuRVJOU18xMlZNRQorX19aTjNKU0M5U3Ry
dWN0dXJlMTZmcmVlemVUcmFuc2l0aW9uRVJOU18xMlZNRVBTMF8KIF9fWk4zSlNDTDI1b2JqZWN0
Q29uc3RydWN0b3JJc1NlYWxlZEVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlNDTDI1b2JqZWN0Q29u
c3RydWN0b3JJc0Zyb3plbkVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlNDTDI5b2JqZWN0Q29uc3Ry
dWN0b3JJc0V4dGVuc2libGVFUE5TXzlFeGVjU3RhdGVFCkBAIC0yMzYwLDcgKzIzNjAsNyBAQCBf
X1pOM1dURjhDb2xsYXRvcjE1cmVsZWFzZUNvbGxhdG9yRXYKIF9fWk4zSlNDM0pJVDMwZW1pdF9v
cF9lbnN1cmVfcHJvcGVydHlfZXhpc3RzRVBOU18xMUluc3RydWN0aW9uRQogX2N0aV9vcF9lbnN1
cmVfcHJvcGVydHlfZXhpc3RzCiBfX1pOSzNKU0MyMFN0cmljdEV2YWxBY3RpdmF0aW9uMTJ0b1Ro
aXNPYmplY3RFUE5TXzlFeGVjU3RhdGVFCi1fX1pOM0pTQzE1SWRlbnRpZmllckFyZW5hMjFtYWtl
TnVtZXJpY0lkZW50aWZpZXJFUE5TXzEySlNHbG9iYWxEYXRhRWQKK19fWk4zSlNDMTVJZGVudGlm
aWVyQXJlbmEyMW1ha2VOdW1lcmljSWRlbnRpZmllckVQTlNfMTJWTUVkCiBfX1pOM0pTQzZKU0Nl
bGwzcHV0RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRU5TXzdKU1ZhbHVlRVJOU18x
NVB1dFByb3BlcnR5U2xvdEUKIF9fWk4zSlNDNkpTQ2VsbDNwdXRFUE5TXzlFeGVjU3RhdGVFak5T
XzdKU1ZhbHVlRQogX19aTjNXVEYxNmNvZGVQb2ludENvbXBhcmVFUktOU182U3RyaW5nRVMyXwpA
QCAtMjM5NCw3ICsyMzk0LDcgQEAgX19aTkszSlNDMTFQcm9maWxlTm9kZTI1dHJhdmVyc2VOZXh0
Tm9kZQogX19aTjNKU0MxMVByb2ZpbGVOb2RlMTNzdG9wUHJvZmlsaW5nRXYKIF9fWk4zSlNDMTFQ
cm9maWxlTm9kZTExcmVtb3ZlQ2hpbGRFUFMwXwogX19aTjNKU0MxMVByb2ZpbGVOb2RlOGFkZENo
aWxkRU4zV1RGMTBQYXNzUmVmUHRySVMwX0VFCi1fX1pOM0pTQzhEZWJ1Z2dlcjIzcmVjb21waWxl
QWxsSlNGdW5jdGlvbnNFUE5TXzEySlNHbG9iYWxEYXRhRQorX19aTjNKU0M4RGVidWdnZXIyM3Jl
Y29tcGlsZUFsbEpTRnVuY3Rpb25zRVBOU18xMlZNRQogX19aTjNXVEY5SGFzaFRhYmxlSVBOM0pT
QzE4RnVuY3Rpb25FeGVjdXRhYmxlRVMzX05TXzE3SWRlbnRpdHlFeHRyYWN0b3JJUzNfRUVOU183
UHRySGFzaElTM19FRU5TXzEwSGFzaFRyYWl0c0lTM19FRVM5X0U2cmVoYXNoRWkKIF9fWk4zSlND
N1Byb2ZpbGVEMEV2CiBfX1pOM1dURjEwUmVmQ291bnRlZElOM0pTQzExUHJvZmlsZU5vZGVFRTVk
ZXJlZkV2CkBAIC0yNDAyLDcgKzI0MDIsNyBAQCBfX1pOM0pTQzhQcm9maWxlcjExd2lsbEV4ZWN1
dGVFUE5TXzlFeGVjCiBfX1pOM0pTQzhQcm9maWxlcjEwZGlkRXhlY3V0ZUVQTlNfOUV4ZWNTdGF0
ZUVSS05TXzdVU3RyaW5nRWkKIF9fWk5LM0pTQzE2UHJvZmlsZUdlbmVyYXRvcjV0aXRsZUV2CiBf
X1pOM0pTQzhQcm9maWxlcjEzc3RvcFByb2ZpbGluZ0VQTlNfMTRKU0dsb2JhbE9iamVjdEUKLV9f
Wk4zSlNDMzRjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uRVBOU18xMkpTR2xvYmFs
RGF0YUUKK19fWk4zSlNDMzRjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uRVBOU18x
MlZNRQogX19aTkszSlNDMjRUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3IxM2V4Y2VwdGlvblR5cGVF
dgogX19aTjNKU0MyNFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvckQxRXYKIF9fWk4zV1RGNU11dGV4
N3RyeUxvY2tFdgpAQCAtMjQxMSw3ICsyNDExLDcgQEAgX19aTjNXVEY1eWllbGRFdgogX19aTjNX
VEY4Q29sbGF0b3JDMUVQS2MKIF9fWk4zV1RGOENvbGxhdG9yMThzZXRPcmRlckxvd2VyRmlyc3RF
YgogX19aTjNKU0MxMEpTT05PYmplY3QyNGdldE93blByb3BlcnR5RGVzY3JpcHRvckVQTlNfOUV4
ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVSTlNfMThQcm9wZXJ0eURlc2NyaXB0b3JFCi1fX1pO
M0pTQzlTdHJ1Y3R1cmUyN2Rlc3BlY2lmeURpY3Rpb25hcnlGdW5jdGlvbkVSTlNfMTJKU0dsb2Jh
bERhdGFFUktOU18xMElkZW50aWZpZXJFCitfX1pOM0pTQzlTdHJ1Y3R1cmUyN2Rlc3BlY2lmeURp
Y3Rpb25hcnlGdW5jdGlvbkVSTlNfMTJWTUVSS05TXzEwSWRlbnRpZmllckUKIF9fWk4zSlNDMTdP
YmplY3RDb25zdHJ1Y3RvcjI0Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRVBOU185RXhlY1N0YXRl
RVJLTlNfMTBJZGVudGlmaWVyRVJOU18xOFByb3BlcnR5RGVzY3JpcHRvckUKIF9fWk4zSlNDMTVP
YmplY3RQcm90b3R5cGUyNGdldE93blByb3BlcnR5RGVzY3JpcHRvckVQTlNfOUV4ZWNTdGF0ZUVS
S05TXzEwSWRlbnRpZmllckVSTlNfMThQcm9wZXJ0eURlc2NyaXB0b3JFCiBfX1pOM0pTQzE3U3Ry
aW5nQ29uc3RydWN0b3IyNGdldE93blByb3BlcnR5RGVzY3JpcHRvckVQTlNfOUV4ZWNTdGF0ZUVS
S05TXzEwSWRlbnRpZmllckVSTlNfMThQcm9wZXJ0eURlc2NyaXB0b3JFCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvS2V5d29yZExvb2t1cEdlbmVyYXRvci5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvS2V5d29yZExvb2t1cEdlbmVyYXRvci5weQkocmV2aXNpb24g
MTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0tleXdvcmRMb29rdXBHZW5lcmF0b3Iu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBjbGFzcyBUcmllOgogICAgICAg
ICAgICAgcHJpbnQoc3RyICsgImlmICghaXNJZGVudFBhcnQoY29kZVslZF0pKSB7IiAlIChsZW4o
c2VsZi5mdWxsUHJlZml4KSkpCiAgICAgICAgICAgICBwcmludChzdHIgKyAiICAgIGludGVybmFs
U2hpZnQ8JWQ+KCk7IiAlIGxlbihzZWxmLmZ1bGxQcmVmaXgpKQogICAgICAgICAgICAgcHJpbnQo
c3RyICsgIiAgICBpZiAoc2hvdWxkQ3JlYXRlSWRlbnRpZmllcikiKQotICAgICAgICAgICAgcHJp
bnQoc3RyICsgKCIgICAgICAgIGRhdGEtPmlkZW50ID0gJm1fZ2xvYmFsRGF0YS0+cHJvcGVydHlO
YW1lcy0+JXNLZXl3b3JkOyIgJSBzZWxmLmZ1bGxQcmVmaXgpKQorICAgICAgICAgICAgcHJpbnQo
c3RyICsgKCIgICAgICAgIGRhdGEtPmlkZW50ID0gJm1fdm0tPnByb3BlcnR5TmFtZXMtPiVzS2V5
d29yZDsiICUgc2VsZi5mdWxsUHJlZml4KSkKICAgICAgICAgICAgIHByaW50KHN0ciArICIgICAg
cmV0dXJuICIgKyBzZWxmLnZhbHVlICsgIjsiKQogICAgICAgICAgICAgcHJpbnQoc3RyICsgIn0i
KQogICAgICAgICByb290SW5kZXggPSBsZW4oc2VsZi5mdWxsUHJlZml4KQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsNyArMjY2LDcgQEAgU09VUkNF
UyArPSBcCiAgICAgcnVudGltZS9KU0RhdGVNYXRoLmNwcCBcCiAgICAgcnVudGltZS9KU0Z1bmN0
aW9uLmNwcCBcCiAgICAgcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwIFwKLSAgICBydW50aW1l
L0pTR2xvYmFsRGF0YS5jcHAgXAorICAgIHJ1bnRpbWUvVk0uY3BwIFwKICAgICBydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcCBcCiAgICAgcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5j
cHAgXAogICAgIHJ1bnRpbWUvSlNQcm94eS5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJ
KHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzYsMTcgKzE3NiwxNyBAQCBsb25nIFN0b3BXYXRjaDo6Z2V0RWxhcHNl
ZE1TKCkKIAogY2xhc3MgR2xvYmFsT2JqZWN0IDogcHVibGljIEpTR2xvYmFsT2JqZWN0IHsKIHBy
aXZhdGU6Ci0gICAgR2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOworICAg
IEdsb2JhbE9iamVjdChWTSYsIFN0cnVjdHVyZSopOwogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBK
U0dsb2JhbE9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEdsb2JhbE9iamVjdCogY3JlYXRlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBhcmd1bWVudHMpCisgICAgc3RhdGljIEdsb2JhbE9iamVjdCogY3JlYXRlKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhcmd1bWVu
dHMpCiAgICAgewotICAgICAgICBHbG9iYWxPYmplY3QqIG9iamVjdCA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEdsb2JhbE9iamVjdD4oZ2xvYmFsRGF0YS5oZWFwKSkgR2xvYmFsT2JqZWN0
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsRGF0YSwgYXJndW1lbnRzKTsKLSAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLmFkZEZpbmFs
aXplcihvYmplY3QsIGRlc3Ryb3kpOwotICAgICAgICBvYmplY3QtPnNldEdsb2JhbFRoaXMoZ2xv
YmFsRGF0YSwgSlNQcm94eTo6Y3JlYXRlKGdsb2JhbERhdGEsIEpTUHJveHk6OmNyZWF0ZVN0cnVj
dHVyZShnbG9iYWxEYXRhLCBvYmplY3QsIG9iamVjdC0+cHJvdG90eXBlKCkpLCBvYmplY3QpKTsK
KyAgICAgICAgR2xvYmFsT2JqZWN0KiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxHbG9iYWxPYmplY3Q+KHZtLmhlYXApKSBHbG9iYWxPYmplY3Qodm0sIHN0cnVjdHVyZSk7Cisg
ICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0sIGFyZ3VtZW50cyk7CisgICAgICAgIHZt
LmhlYXAuYWRkRmluYWxpemVyKG9iamVjdCwgZGVzdHJveSk7CisgICAgICAgIG9iamVjdC0+c2V0
R2xvYmFsVGhpcyh2bSwgSlNQcm94eTo6Y3JlYXRlKHZtLCBKU1Byb3h5OjpjcmVhdGVTdHJ1Y3R1
cmUodm0sIG9iamVjdCwgb2JqZWN0LT5wcm90b3R5cGUoKSksIG9iamVjdCkpOwogICAgICAgICBy
ZXR1cm4gb2JqZWN0OwogICAgIH0KIApAQCAtMTk1LDY1ICsxOTUsNjUgQEAgcHVibGljOgogICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogICAgIHN0YXRpYyBjb25zdCBHbG9iYWxP
YmplY3RNZXRob2RUYWJsZSBzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlOwogCi0gICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUoZ2xvYmFsRGF0YSwgMCwgcHJvdG90eXBlLCBUeXBlSW5mbyhHbG9iYWxPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIDAsIHByb3RvdHlwZSwgVHlwZUluZm8oR2xvYmFsT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgYm9vbCBqYXZhU2Ny
aXB0RXhwZXJpbWVudHNFbmFibGVkKGNvbnN0IEpTR2xvYmFsT2JqZWN0KikgeyByZXR1cm4gdHJ1
ZTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhcmd1bWVudHMpCisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhcmd1bWVudHMpCiAg
ICAgewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICAKLSAgICAgICAgYWRkRnVuY3Rpb24o
Z2xvYmFsRGF0YSwgImRlYnVnIiwgZnVuY3Rpb25EZWJ1ZywgMSk7Ci0gICAgICAgIGFkZEZ1bmN0
aW9uKGdsb2JhbERhdGEsICJkZXNjcmliZSIsIGZ1bmN0aW9uRGVzY3JpYmUsIDEpOwotICAgICAg
ICBhZGRGdW5jdGlvbihnbG9iYWxEYXRhLCAicHJpbnQiLCBmdW5jdGlvblByaW50LCAxKTsKLSAg
ICAgICAgYWRkRnVuY3Rpb24oZ2xvYmFsRGF0YSwgInF1aXQiLCBmdW5jdGlvblF1aXQsIDApOwot
ICAgICAgICBhZGRGdW5jdGlvbihnbG9iYWxEYXRhLCAiZ2MiLCBmdW5jdGlvbkdDLCAwKTsKKyAg
ICAgICAgYWRkRnVuY3Rpb24odm0sICJkZWJ1ZyIsIGZ1bmN0aW9uRGVidWcsIDEpOworICAgICAg
ICBhZGRGdW5jdGlvbih2bSwgImRlc2NyaWJlIiwgZnVuY3Rpb25EZXNjcmliZSwgMSk7CisgICAg
ICAgIGFkZEZ1bmN0aW9uKHZtLCAicHJpbnQiLCBmdW5jdGlvblByaW50LCAxKTsKKyAgICAgICAg
YWRkRnVuY3Rpb24odm0sICJxdWl0IiwgZnVuY3Rpb25RdWl0LCAwKTsKKyAgICAgICAgYWRkRnVu
Y3Rpb24odm0sICJnYyIsIGZ1bmN0aW9uR0MsIDApOwogI2lmbmRlZiBOREVCVUcKLSAgICAgICAg
YWRkRnVuY3Rpb24oZ2xvYmFsRGF0YSwgImR1bXBDYWxsRnJhbWUiLCBmdW5jdGlvbkR1bXBDYWxs
RnJhbWUsIDApOwotICAgICAgICBhZGRGdW5jdGlvbihnbG9iYWxEYXRhLCAicmVsZWFzZUV4ZWN1
dGFibGVNZW1vcnkiLCBmdW5jdGlvblJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5LCAwKTsKKyAgICAg
ICAgYWRkRnVuY3Rpb24odm0sICJkdW1wQ2FsbEZyYW1lIiwgZnVuY3Rpb25EdW1wQ2FsbEZyYW1l
LCAwKTsKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJyZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSIs
IGZ1bmN0aW9uUmVsZWFzZUV4ZWN1dGFibGVNZW1vcnksIDApOwogI2VuZGlmCi0gICAgICAgIGFk
ZEZ1bmN0aW9uKGdsb2JhbERhdGEsICJ2ZXJzaW9uIiwgZnVuY3Rpb25WZXJzaW9uLCAxKTsKLSAg
ICAgICAgYWRkRnVuY3Rpb24oZ2xvYmFsRGF0YSwgInJ1biIsIGZ1bmN0aW9uUnVuLCAxKTsKLSAg
ICAgICAgYWRkRnVuY3Rpb24oZ2xvYmFsRGF0YSwgImxvYWQiLCBmdW5jdGlvbkxvYWQsIDEpOwot
ICAgICAgICBhZGRGdW5jdGlvbihnbG9iYWxEYXRhLCAiY2hlY2tTeW50YXgiLCBmdW5jdGlvbkNo
ZWNrU3ludGF4LCAxKTsKLSAgICAgICAgYWRkRnVuY3Rpb24oZ2xvYmFsRGF0YSwgImpzY1N0YWNr
IiwgZnVuY3Rpb25KU0NTdGFjaywgMSk7Ci0gICAgICAgIGFkZEZ1bmN0aW9uKGdsb2JhbERhdGEs
ICJyZWFkbGluZSIsIGZ1bmN0aW9uUmVhZGxpbmUsIDApOwotICAgICAgICBhZGRGdW5jdGlvbihn
bG9iYWxEYXRhLCAicHJlY2lzZVRpbWUiLCBmdW5jdGlvblByZWNpc2VUaW1lLCAwKTsKKyAgICAg
ICAgYWRkRnVuY3Rpb24odm0sICJ2ZXJzaW9uIiwgZnVuY3Rpb25WZXJzaW9uLCAxKTsKKyAgICAg
ICAgYWRkRnVuY3Rpb24odm0sICJydW4iLCBmdW5jdGlvblJ1biwgMSk7CisgICAgICAgIGFkZEZ1
bmN0aW9uKHZtLCAibG9hZCIsIGZ1bmN0aW9uTG9hZCwgMSk7CisgICAgICAgIGFkZEZ1bmN0aW9u
KHZtLCAiY2hlY2tTeW50YXgiLCBmdW5jdGlvbkNoZWNrU3ludGF4LCAxKTsKKyAgICAgICAgYWRk
RnVuY3Rpb24odm0sICJqc2NTdGFjayIsIGZ1bmN0aW9uSlNDU3RhY2ssIDEpOworICAgICAgICBh
ZGRGdW5jdGlvbih2bSwgInJlYWRsaW5lIiwgZnVuY3Rpb25SZWFkbGluZSwgMCk7CisgICAgICAg
IGFkZEZ1bmN0aW9uKHZtLCAicHJlY2lzZVRpbWUiLCBmdW5jdGlvblByZWNpc2VUaW1lLCAwKTsK
ICNpZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCi0gICAgICAgIGFkZEZ1bmN0aW9uKGdsb2JhbERh
dGEsICJzZXRTYW1wbGluZ0ZsYWdzIiwgZnVuY3Rpb25TZXRTYW1wbGluZ0ZsYWdzLCAxKTsKLSAg
ICAgICAgYWRkRnVuY3Rpb24oZ2xvYmFsRGF0YSwgImNsZWFyU2FtcGxpbmdGbGFncyIsIGZ1bmN0
aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzLCAxKTsKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJzZXRT
YW1wbGluZ0ZsYWdzIiwgZnVuY3Rpb25TZXRTYW1wbGluZ0ZsYWdzLCAxKTsKKyAgICAgICAgYWRk
RnVuY3Rpb24odm0sICJjbGVhclNhbXBsaW5nRmxhZ3MiLCBmdW5jdGlvbkNsZWFyU2FtcGxpbmdG
bGFncywgMSk7CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5j
dGlvbihnbG9iYWxEYXRhLCAiVWludDhBcnJheSIsIGNvbnN0cnVjdEpTVWludDhBcnJheSwgMSk7
Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbihnbG9iYWxEYXRhLCAiVWludDhDbGFt
cGVkQXJyYXkiLCBjb25zdHJ1Y3RKU1VpbnQ4Q2xhbXBlZEFycmF5LCAxKTsKLSAgICAgICAgYWRk
Q29uc3RydWN0YWJsZUZ1bmN0aW9uKGdsb2JhbERhdGEsICJVaW50MTZBcnJheSIsIGNvbnN0cnVj
dEpTVWludDE2QXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24oZ2xv
YmFsRGF0YSwgIlVpbnQzMkFycmF5IiwgY29uc3RydWN0SlNVaW50MzJBcnJheSwgMSk7Ci0gICAg
ICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbihnbG9iYWxEYXRhLCAiSW50OEFycmF5IiwgY29u
c3RydWN0SlNJbnQ4QXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24o
Z2xvYmFsRGF0YSwgIkludDE2QXJyYXkiLCBjb25zdHJ1Y3RKU0ludDE2QXJyYXksIDEpOwotICAg
ICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24oZ2xvYmFsRGF0YSwgIkludDMyQXJyYXkiLCBj
b25zdHJ1Y3RKU0ludDMyQXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rp
b24oZ2xvYmFsRGF0YSwgIkZsb2F0MzJBcnJheSIsIGNvbnN0cnVjdEpTRmxvYXQzMkFycmF5LCAx
KTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKGdsb2JhbERhdGEsICJGbG9hdDY0
QXJyYXkiLCBjb25zdHJ1Y3RKU0Zsb2F0NjRBcnJheSwgMSk7CisgICAgICAgIGFkZENvbnN0cnVj
dGFibGVGdW5jdGlvbih2bSwgIlVpbnQ4QXJyYXkiLCBjb25zdHJ1Y3RKU1VpbnQ4QXJyYXksIDEp
OworICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJVaW50OENsYW1wZWRBcnJh
eSIsIGNvbnN0cnVjdEpTVWludDhDbGFtcGVkQXJyYXksIDEpOworICAgICAgICBhZGRDb25zdHJ1
Y3RhYmxlRnVuY3Rpb24odm0sICJVaW50MTZBcnJheSIsIGNvbnN0cnVjdEpTVWludDE2QXJyYXks
IDEpOworICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJVaW50MzJBcnJheSIs
IGNvbnN0cnVjdEpTVWludDMyQXJyYXksIDEpOworICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVu
Y3Rpb24odm0sICJJbnQ4QXJyYXkiLCBjb25zdHJ1Y3RKU0ludDhBcnJheSwgMSk7CisgICAgICAg
IGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIkludDE2QXJyYXkiLCBjb25zdHJ1Y3RKU0lu
dDE2QXJyYXksIDEpOworICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJJbnQz
MkFycmF5IiwgY29uc3RydWN0SlNJbnQzMkFycmF5LCAxKTsKKyAgICAgICAgYWRkQ29uc3RydWN0
YWJsZUZ1bmN0aW9uKHZtLCAiRmxvYXQzMkFycmF5IiwgY29uc3RydWN0SlNGbG9hdDMyQXJyYXks
IDEpOworICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJGbG9hdDY0QXJyYXki
LCBjb25zdHJ1Y3RKU0Zsb2F0NjRBcnJheSwgMSk7CiAKICAgICAgICAgSlNBcnJheSogYXJyYXkg
PSBjb25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbEV4ZWMoKSwgMCk7CiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgYXJyYXkt
PnB1dERpcmVjdEluZGV4KGdsb2JhbEV4ZWMoKSwgaSwganNTdHJpbmcoZ2xvYmFsRXhlYygpLCBh
cmd1bWVudHNbaV0pKTsKLSAgICAgICAgcHV0RGlyZWN0KGdsb2JhbERhdGEsIElkZW50aWZpZXIo
Z2xvYmFsRXhlYygpLCAiYXJndW1lbnRzIiksIGFycmF5KTsKKyAgICAgICAgcHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgImFyZ3VtZW50cyIpLCBhcnJheSk7CiAgICAgfQog
Ci0gICAgdm9pZCBhZGRGdW5jdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IGNo
YXIqIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpCisg
ICAgdm9pZCBhZGRGdW5jdGlvbihWTSYgdm0sIGNvbnN0IGNoYXIqIG5hbWUsIE5hdGl2ZUZ1bmN0
aW9uIGZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpCiAgICAgewogICAgICAgICBJZGVudGlm
aWVyIGlkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCBuYW1lKTsKLSAgICAgICAgcHV0RGlyZWN0KGds
b2JhbERhdGEsIGlkZW50aWZpZXIsIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjKCksIHRo
aXMsIGFyZ3VtZW50cywgaWRlbnRpZmllci5zdHJpbmcoKSwgZnVuY3Rpb24pKTsKKyAgICAgICAg
cHV0RGlyZWN0KHZtLCBpZGVudGlmaWVyLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYygp
LCB0aGlzLCBhcmd1bWVudHMsIGlkZW50aWZpZXIuc3RyaW5nKCksIGZ1bmN0aW9uKSk7CiAgICAg
fQogICAgIAotICAgIHZvaWQgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgY29uc3QgY2hhciogbmFtZSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIHVu
c2lnbmVkIGFyZ3VtZW50cykKKyAgICB2b2lkIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbihWTSYg
dm0sIGNvbnN0IGNoYXIqIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCB1bnNpZ25lZCBh
cmd1bWVudHMpCiAgICAgewogICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIoZ2xvYmFsRXhl
YygpLCBuYW1lKTsKLSAgICAgICAgcHV0RGlyZWN0KGdsb2JhbERhdGEsIGlkZW50aWZpZXIsIEpT
RnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjKCksIHRoaXMsIGFyZ3VtZW50cywgaWRlbnRpZmll
ci5zdHJpbmcoKSwgZnVuY3Rpb24sIE5vSW50cmluc2ljLCBmdW5jdGlvbikpOworICAgICAgICBw
dXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjKCks
IHRoaXMsIGFyZ3VtZW50cywgaWRlbnRpZmllci5zdHJpbmcoKSwgZnVuY3Rpb24sIE5vSW50cmlu
c2ljLCBmdW5jdGlvbikpOwogICAgIH0KIH07CiAKQEAgLTI2Myw4ICsyNjMsOCBAQCBjb25zdCBD
bGFzc0luZm8gR2xvYmFsT2JqZWN0OjpzX2luZm8gPSB7CiBjb25zdCBHbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSBHbG9iYWxPYmplY3Q6OnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPSB7ICZhbGxv
d3NBY2Nlc3NGcm9tLCAmc3VwcG9ydHNQcm9maWxpbmcsICZzdXBwb3J0c1JpY2hTb3VyY2VJbmZv
LCAmc2hvdWxkSW50ZXJydXB0U2NyaXB0LCAmamF2YVNjcmlwdEV4cGVyaW1lbnRzRW5hYmxlZCB9
OwogCiAKLUdsb2JhbE9iamVjdDo6R2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBKU0dsb2JhbE9iamVjdChnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUsICZzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQorR2xvYmFsT2JqZWN0OjpH
bG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEpTR2xvYmFs
T2JqZWN0KHZtLCBzdHJ1Y3R1cmUsICZzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQogewogfQog
CkBAIC0zMDUsNyArMzA1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blByaQogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkR1bXBDYWxsRnJhbWUo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIGlmICghZXhlYy0+Y2FsbGVyRnJhbWUoKS0+aGFzSG9z
dENhbGxGcmFtZUZsYWcoKSkKLSAgICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmludGVycHJldGVy
LT5kdW1wQ2FsbEZyYW1lKGV4ZWMtPmNhbGxlckZyYW1lKCkpOworICAgICAgICBleGVjLT52bSgp
LmludGVycHJldGVyLT5kdW1wQ2FsbEZyYW1lKGV4ZWMtPmNhbGxlckZyYW1lKCkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAjZW5kaWYKQEAgLTMyOCw3
ICszMjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSlNDCiAgICAg
dHJhY2UuYXBwZW5kTGl0ZXJhbCgiLS0+IFN0YWNrIHRyYWNlOlxuIik7CiAKICAgICBWZWN0b3I8
U3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsKLSAgICBJbnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFjZSgm
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdGFja1RyYWNlKTsKKyAgICBJbnRlcnByZXRlcjo6Z2V0U3Rh
Y2tUcmFjZSgmZXhlYy0+dm0oKSwgc3RhY2tUcmFjZSk7CiAgICAgaW50IGkgPSAwOwogCiAgICAg
Zm9yIChWZWN0b3I8U3RhY2tGcmFtZT46Oml0ZXJhdG9yIGl0ZXIgPSBzdGFja1RyYWNlLmJlZ2lu
KCk7IGl0ZXIgPCBzdGFja1RyYWNlLmVuZCgpOyBpdGVyKyspIHsKQEAgLTM1MSw3ICszNTEsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR0MoCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIGV4ZWMtPmdsb2Jh
bERhdGEoKS5yZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSgpOworICAgIGV4ZWMtPnZtKCkucmVsZWFz
ZUV4ZWN1dGFibGVNZW1vcnkoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogfQogI2VuZGlmCkBAIC0zNzAsNyArMzcwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblJ1bgogICAgIGlmICghZmlsbEJ1ZmZlcldpdGhDb250ZW50c09m
RmlsZShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJDb3VsZCBub3Qgb3BlbiBmaWxlLiIp
KSk7CiAKLSAgICBHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEdsb2JhbE9iamVjdDo6Y3Jl
YXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBqc051bGwoKSksIFZlY3RvcjxTdHJpbmc+KCkpOworICAgIEdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gR2xvYmFsT2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwg
R2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwganNOdWxsKCkpLCBWZWN0
b3I8U3RyaW5nPigpKTsKIAogICAgIEpTVmFsdWUgZXhjZXB0aW9uOwogICAgIFN0b3BXYXRjaCBz
dG9wV2F0Y2g7CkBAIC01MjMsNyArNTIzLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBh
cmd2KQogICAgIFFDb3JlQXBwbGljYXRpb24gYXBwKGFyZ2MsIGFyZ3YpOwogI2VuZGlmCiAKLSAg
ICAvLyBJbml0aWFsaXplIEpTQyBiZWZvcmUgZ2V0dGluZyBKU0dsb2JhbERhdGEuCisgICAgLy8g
SW5pdGlhbGl6ZSBKU0MgYmVmb3JlIGdldHRpbmcgVk0uCiAjaWYgRU5BQkxFKFNBTVBMSU5HX1JF
R0lPTlMpCiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwogI2VuZGlmCkBAIC01NDks
NyArNTQ5LDcgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0KgogICAg
IGlmIChkdW1wKQogICAgICAgICBKU0M6Ok9wdGlvbnM6OmR1bXBHZW5lcmF0ZWRCeXRlY29kZXMo
KSA9IHRydWU7CiAKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBnbG9iYWxPYmplY3Qt
Pmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAKICNpZiBF
TkFCTEUoU0FNUExJTkdfRkxBR1MpCiAgICAgU2FtcGxpbmdGbGFnczo6c3RhcnQoKTsKQEAgLTU2
Nyw3ICs1NjcsNyBAQCBzdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqCiAg
ICAgICAgICAgICBmaWxlTmFtZSA9ICJbQ29tbWFuZCBMaW5lXSI7CiAgICAgICAgIH0KIAotICAg
ICAgICBnbG9iYWxEYXRhLnN0YXJ0U2FtcGxpbmcoKTsKKyAgICAgICAgdm0uc3RhcnRTYW1wbGlu
ZygpOwogCiAgICAgICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlvbjsKICAgICAgICAgSlNW
YWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBq
c2NTb3VyY2Uoc2NyaXB0LCBmaWxlTmFtZSksIEpTVmFsdWUoKSwgJmV2YWx1YXRpb25FeGNlcHRp
b24pOwpAQCAtNTgyLDcgKzU4Miw3IEBAIHN0YXRpYyBib29sIHJ1bldpdGhTY3JpcHRzKEdsb2Jh
bE9iamVjdCoKICAgICAgICAgICAgICAgICBwcmludGYoIiVzXG4iLCBzdGFja1ZhbHVlLnRvU3Ry
aW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgZ2xvYmFsRGF0
YS5zdG9wU2FtcGxpbmcoKTsKKyAgICAgICAgdm0uc3RvcFNhbXBsaW5nKCk7CiAgICAgICAgIGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLT5jbGVhckV4Y2VwdGlvbigpOwogICAgIH0KIApAQCAt
NTkyLDEyICs1OTIsMTIgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0
KgogI2lmIEVOQUJMRShTQU1QTElOR19SRUdJT05TKQogICAgIFNhbXBsaW5nUmVnaW9uOjpkdW1w
KCk7CiAjZW5kaWYKLSAgICBnbG9iYWxEYXRhLmR1bXBTYW1wbGVEYXRhKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpKTsKKyAgICB2bS5kdW1wU2FtcGxlRGF0YShnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSk7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX0NPVU5URVJTKQogICAgIEFic3RyYWN0U2Ft
cGxpbmdDb3VudGVyOjpkdW1wKCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcp
Ci0gICAgZ2xvYmFsRGF0YS5kdW1wUmVnRXhwVHJhY2UoKTsKKyAgICB2bS5kdW1wUmVnRXhwVHJh
Y2UoKTsKICNlbmRpZgogICAgIHJldHVybiBzdWNjZXNzOwogfQpAQCAtNzU4LDE3ICs3NTgsMTcg
QEAgdm9pZCBDb21tYW5kTGluZTo6cGFyc2VBcmd1bWVudHMoaW50IGFyZwogCiBpbnQganNjbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7Ci0gICAgLy8gTm90ZSB0aGF0IHRoZSBvcHRpb25z
IHBhcnNpbmcgY2FuIGFmZmVjdCBKU0dsb2JhbERhdGEgY3JlYXRpb24sIGFuZCB0aHVzCisgICAg
Ly8gTm90ZSB0aGF0IHRoZSBvcHRpb25zIHBhcnNpbmcgY2FuIGFmZmVjdCBWTSBjcmVhdGlvbiwg
YW5kIHRodXMKICAgICAvLyBjb21lcyBmaXJzdC4KICAgICBDb21tYW5kTGluZSBvcHRpb25zKGFy
Z2MsIGFyZ3YpOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6
Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigpOwotICAgIEFQSUVudHJ5U2hpbSBzaGltKGdsb2Jh
bERhdGEpOworICAgIFZNKiB2bSA9IFZNOjpjcmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7Cisg
ICAgQVBJRW50cnlTaGltIHNoaW0odm0pOwogICAgIGludCByZXN1bHQ7CiAKLSAgICBpZiAob3B0
aW9ucy5tX3Byb2ZpbGUgJiYgIWdsb2JhbERhdGEtPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikKLSAg
ICAgICAgZ2xvYmFsRGF0YS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyID0gYWRvcHRQdHIobmV3IFBy
b2ZpbGVyOjpEYXRhYmFzZSgqZ2xvYmFsRGF0YSkpOworICAgIGlmIChvcHRpb25zLm1fcHJvZmls
ZSAmJiAhdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikKKyAgICAgICAgdm0tPm1fcGVyQnl0ZWNv
ZGVQcm9maWxlciA9IGFkb3B0UHRyKG5ldyBQcm9maWxlcjo6RGF0YWJhc2UoKnZtKSk7CiAgICAg
Ci0gICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBHbG9iYWxPYmplY3Q6OmNyZWF0ZSgq
Z2xvYmFsRGF0YSwgR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKmdsb2JhbERhdGEsIGpz
TnVsbCgpKSwgb3B0aW9ucy5tX2FyZ3VtZW50cyk7CisgICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBHbG9iYWxPYmplY3Q6OmNyZWF0ZSgqdm0sIEdsb2JhbE9iamVjdDo6Y3JlYXRlU3Ry
dWN0dXJlKCp2bSwganNOdWxsKCkpLCBvcHRpb25zLm1fYXJndW1lbnRzKTsKICAgICBib29sIHN1
Y2Nlc3MgPSBydW5XaXRoU2NyaXB0cyhnbG9iYWxPYmplY3QsIG9wdGlvbnMubV9zY3JpcHRzLCBv
cHRpb25zLm1fZHVtcCk7CiAgICAgaWYgKG9wdGlvbnMubV9pbnRlcmFjdGl2ZSAmJiBzdWNjZXNz
KQogICAgICAgICBydW5JbnRlcmFjdGl2ZShnbG9iYWxPYmplY3QpOwpAQCAtNzc5LDcgKzc3OSw3
IEBAIGludCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICAgICAgcHJpbnRmKCJq
c2MgZXhpdGluZyAlZFxuIiwgcmVzdWx0KTsKICAgICAKICAgICBpZiAob3B0aW9ucy5tX3Byb2Zp
bGUpIHsKLSAgICAgICAgaWYgKCFnbG9iYWxEYXRhLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPnNh
dmUob3B0aW9ucy5tX3Byb2ZpbGVyT3V0cHV0LnV0ZjgoKS5kYXRhKCkpKQorICAgICAgICBpZiAo
IXZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPnNhdmUob3B0aW9ucy5tX3Byb2ZpbGVyT3V0cHV0
LnV0ZjgoKS5kYXRhKCkpKQogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJjb3VsZCBub3Qg
c2F2ZSBwcm9maWxlciBvdXRwdXQuXG4iKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0UmVnRXhwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdFJlZ0V4cC5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0UmVnRXhwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDE1ICsxMTAsMTUgQEAg
c3RydWN0IFJlZ0V4cFRlc3QgewogCiBjbGFzcyBHbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNHbG9i
YWxPYmplY3QgewogcHJpdmF0ZToKLSAgICBHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50cyk7CisgICAgR2xvYmFsT2Jq
ZWN0KFZNJiwgU3RydWN0dXJlKiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50cyk7CiAK
IHB1YmxpYzoKICAgICB0eXBlZGVmIEpTR2xvYmFsT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMg
R2xvYmFsT2JqZWN0KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50cykKKyAgICBzdGF0aWMg
R2xvYmFsT2JqZWN0KiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50cykKICAgICB7Ci0gICAgICAgIEdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8R2xvYmFsT2JqZWN0Pihn
bG9iYWxEYXRhLmhlYXApKSBHbG9iYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBhcmd1
bWVudHMpOwotICAgICAgICBnbG9iYWxEYXRhLmhlYXAuYWRkRmluYWxpemVyKGdsb2JhbE9iamVj
dCwgZGVzdHJveSk7CisgICAgICAgIEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8R2xvYmFsT2JqZWN0Pih2bS5oZWFwKSkgR2xvYmFsT2JqZWN0
KHZtLCBzdHJ1Y3R1cmUsIGFyZ3VtZW50cyk7CisgICAgICAgIHZtLmhlYXAuYWRkRmluYWxpemVy
KGdsb2JhbE9iamVjdCwgZGVzdHJveSk7CiAgICAgICAgIHJldHVybiBnbG9iYWxPYmplY3Q7CiAg
ICAgfQogCkBAIC0xMjYsMTUgKzEyNiwxNSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBuZWVkc0Rlc3RydWN0b3IgPSBmYWxzZTsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBl
KQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTVmFsdWUg
cHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIDAsIHByb3RvdHlwZSwgVHlwZUluZm8oR2xvYmFsT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCAw
LCBwcm90b3R5cGUsIFR5cGVJbmZvKEdsb2JhbE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
JnNfaW5mbyk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhcmd1bWVudHMp
CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBh
cmd1bWVudHMpCiAgICAgewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRh
KTsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICBVTlVTRURfUEFS
QU0oYXJndW1lbnRzKTsKICAgICB9CiB9OwpAQCAtMTQzLDEwICsxNDMsMTAgQEAgQ09NUElMRV9B
U1NFUlQoIUlzSW50ZWdlcjxHbG9iYWxPYmplY3Q+OgogCiBjb25zdCBDbGFzc0luZm8gR2xvYmFs
T2JqZWN0OjpzX2luZm8gPSB7ICJnbG9iYWwiLCAmSlNHbG9iYWxPYmplY3Q6OnNfaW5mbywgMCwg
RXhlY1N0YXRlOjpnbG9iYWxPYmplY3RUYWJsZSwgQ1JFQVRFX01FVEhPRF9UQUJMRShHbG9iYWxP
YmplY3QpIH07CiAKLUdsb2JhbE9iamVjdDo6R2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhcmd1
bWVudHMpCi0gICAgOiBKU0dsb2JhbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCitHbG9i
YWxPYmplY3Q6Okdsb2JhbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgYXJndW1lbnRzKQorICAgIDogSlNHbG9iYWxPYmplY3Qodm0sIHN0
cnVjdHVyZSkKIHsKLSAgICBmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBhcmd1bWVudHMpOwor
ICAgIGZpbmlzaENyZWF0aW9uKHZtLCBhcmd1bWVudHMpOwogfQogCiAvLyBVc2UgU0VIIGZvciBS
ZWxlYXNlIGJ1aWxkcyBvbmx5IHRvIGdldCByaWQgb2YgdGhlIGNyYXNoIHJlcG9ydCBkaWFsb2cK
QEAgLTE5MCw3ICsxOTAsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAg
UUNvcmVBcHBsaWNhdGlvbiBhcHAoYXJnYywgYXJndik7CiAjZW5kaWYKIAotICAgIC8vIEluaXRp
YWxpemUgSlNDIGJlZm9yZSBnZXR0aW5nIEpTR2xvYmFsRGF0YS4KKyAgICAvLyBJbml0aWFsaXpl
IEpTQyBiZWZvcmUgZ2V0dGluZyBWTS4KICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsK
IAogICAgIC8vIFdlIGNhbid0IHVzZSBkZXN0cnVjdG9ycyBpbiB0aGUgZm9sbG93aW5nIGNvZGUg
YmVjYXVzZSBpdCB1c2VzIFdpbmRvd3MKQEAgLTIwMiwxMiArMjAyLDEyIEBAIGludCBtYWluKGlu
dCBhcmdjLCBjaGFyKiogYXJndikKICAgICByZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgYm9vbCB0
ZXN0T25lUmVnRXhwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUmVnRXhwKiByZWdleHAsIFJl
Z0V4cFRlc3QqIHJlZ0V4cFRlc3QsIGJvb2wgdmVyYm9zZSwgdW5zaWduZWQgaW50IGxpbmVOdW1i
ZXIpCitzdGF0aWMgYm9vbCB0ZXN0T25lUmVnRXhwKFZNJiB2bSwgUmVnRXhwKiByZWdleHAsIFJl
Z0V4cFRlc3QqIHJlZ0V4cFRlc3QsIGJvb2wgdmVyYm9zZSwgdW5zaWduZWQgaW50IGxpbmVOdW1i
ZXIpCiB7CiAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwogICAgIFZlY3RvcjxpbnQsIDMyPiBvdXRW
ZWN0b3I7CiAgICAgb3V0VmVjdG9yLnJlc2l6ZShyZWdFeHBUZXN0LT5leHBlY3RWZWN0b3Iuc2l6
ZSgpKTsKLSAgICBpbnQgbWF0Y2hSZXN1bHQgPSByZWdleHAtPm1hdGNoKGdsb2JhbERhdGEsIHJl
Z0V4cFRlc3QtPnN1YmplY3QsIHJlZ0V4cFRlc3QtPm9mZnNldCwgb3V0VmVjdG9yKTsKKyAgICBp
bnQgbWF0Y2hSZXN1bHQgPSByZWdleHAtPm1hdGNoKHZtLCByZWdFeHBUZXN0LT5zdWJqZWN0LCBy
ZWdFeHBUZXN0LT5vZmZzZXQsIG91dFZlY3Rvcik7CiAKICAgICBpZiAobWF0Y2hSZXN1bHQgIT0g
cmVnRXhwVGVzdC0+cmVzdWx0KSB7CiAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwpAQCAtMzEwLDcg
KzMxMCw3IEBAIHN0YXRpYyBpbnQgc2NhblN0cmluZyhjaGFyKiBidWZmZXIsIGludCAKICAgICBy
ZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBSZWdFeHAqIHBhcnNlUmVnRXhwTGluZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIGNoYXIqIGxpbmUsIGludCBsaW5lTGVuZ3RoKQorc3RhdGljIFJlZ0V4
cCogcGFyc2VSZWdFeHBMaW5lKFZNJiB2bSwgY2hhciogbGluZSwgaW50IGxpbmVMZW5ndGgpCiB7
CiAgICAgU3RyaW5nQnVpbGRlciBwYXR0ZXJuOwogICAgIApAQCAtMzI0LDcgKzMyNCw3IEBAIHN0
YXRpYyBSZWdFeHAqIHBhcnNlUmVnRXhwTGluZShKU0dsb2JhbEQKIAogICAgICsraTsKIAotICAg
IHJldHVybiBSZWdFeHA6OmNyZWF0ZShnbG9iYWxEYXRhLCBwYXR0ZXJuLnRvU3RyaW5nKCksIHJl
Z0V4cEZsYWdzKGxpbmUgKyBpKSk7CisgICAgcmV0dXJuIFJlZ0V4cDo6Y3JlYXRlKHZtLCBwYXR0
ZXJuLnRvU3RyaW5nKCksIHJlZ0V4cEZsYWdzKGxpbmUgKyBpKSk7CiB9CiAKIHN0YXRpYyBSZWdF
eHBUZXN0KiBwYXJzZVRlc3RMaW5lKGNoYXIqIGxpbmUsIGludCBsaW5lTGVuZ3RoKQpAQCAtNDA4
LDcgKzQwOCw3IEBAIHN0YXRpYyBib29sIHJ1bkZyb21GaWxlcyhHbG9iYWxPYmplY3QqIGcKICAg
ICB1bnNpZ25lZCBmYWlsdXJlcyA9IDA7CiAgICAgY2hhciogbGluZUJ1ZmZlciA9IG5ldyBjaGFy
W01heExpbmVMZW5ndGggKyAxXTsKIAotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGds
b2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKIAogICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBmaWxlcy5zaXplKCk7IGkrKykgewpAQCAtNDM2LDEzICs0MzYsMTMgQEAgc3RhdGljIGJvb2wg
cnVuRnJvbUZpbGVzKEdsb2JhbE9iamVjdCogZwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
CiAgICAgICAgICAgICBpZiAobGluZVB0clswXSA9PSAnLycpIHsKLSAgICAgICAgICAgICAgICBy
ZWdleHAgPSBwYXJzZVJlZ0V4cExpbmUoZ2xvYmFsRGF0YSwgbGluZVB0ciwgbGluZUxlbmd0aCk7
CisgICAgICAgICAgICAgICAgcmVnZXhwID0gcGFyc2VSZWdFeHBMaW5lKHZtLCBsaW5lUHRyLCBs
aW5lTGVuZ3RoKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAobGluZVB0clswXSA9PSAnICcpIHsK
ICAgICAgICAgICAgICAgICBSZWdFeHBUZXN0KiByZWdFeHBUZXN0ID0gcGFyc2VUZXN0TGluZShs
aW5lUHRyLCBsaW5lTGVuZ3RoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBp
ZiAocmVnZXhwICYmIHJlZ0V4cFRlc3QpIHsKICAgICAgICAgICAgICAgICAgICAgKyt0ZXN0czsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXN0T25lUmVnRXhwKGdsb2JhbERhdGEsIHJlZ2V4
cCwgcmVnRXhwVGVzdCwgdmVyYm9zZSwgbGluZU51bWJlcikpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCF0ZXN0T25lUmVnRXhwKHZtLCByZWdleHAsIHJlZ0V4cFRlc3QsIHZlcmJvc2UsIGxp
bmVOdW1iZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlcysrOwogICAgICAg
ICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGYWlsdXJlIG9uIGxpbmUgJXVcbiIsIGxpbmVOdW1i
ZXIpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC00NjMsOSArNDYzLDkgQEAgc3RhdGljIGJv
b2wgcnVuRnJvbUZpbGVzKEdsb2JhbE9iamVjdCogZwogCiAgICAgZGVsZXRlW10gbGluZUJ1ZmZl
cjsKIAotICAgIGdsb2JhbERhdGEuZHVtcFNhbXBsZURhdGEoZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCkpOworICAgIHZtLmR1bXBTYW1wbGVEYXRhKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
KTsKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCi0gICAgZ2xvYmFsRGF0YS5kdW1wUmVnRXhw
VHJhY2UoKTsKKyAgICB2bS5kdW1wUmVnRXhwVHJhY2UoKTsKICNlbmRpZgogICAgIHJldHVybiBz
dWNjZXNzOwogfQpAQCAtNTAwLDEzICs1MDAsMTMgQEAgc3RhdGljIHZvaWQgcGFyc2VBcmd1bWVu
dHMoaW50IGFyZ2MsIGNoYQogCiBpbnQgcmVhbE1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQog
ewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3JlYXRlKExh
cmdlSGVhcCkubGVha1JlZigpOwotICAgIEFQSUVudHJ5U2hpbSBzaGltKGdsb2JhbERhdGEpOwor
ICAgIFZNKiB2bSA9IFZNOjpjcmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7CisgICAgQVBJRW50
cnlTaGltIHNoaW0odm0pOwogCiAgICAgQ29tbWFuZExpbmUgb3B0aW9uczsKICAgICBwYXJzZUFy
Z3VtZW50cyhhcmdjLCBhcmd2LCBvcHRpb25zKTsKIAotICAgIEdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gR2xvYmFsT2JqZWN0OjpjcmVhdGUoKmdsb2JhbERhdGEsIEdsb2JhbE9iamVjdDo6
Y3JlYXRlU3RydWN0dXJlKCpnbG9iYWxEYXRhLCBqc051bGwoKSksIG9wdGlvbnMuYXJndW1lbnRz
KTsKKyAgICBHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEdsb2JhbE9iamVjdDo6Y3JlYXRl
KCp2bSwgR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnZtLCBqc051bGwoKSksIG9wdGlv
bnMuYXJndW1lbnRzKTsKICAgICBib29sIHN1Y2Nlc3MgPSBydW5Gcm9tRmlsZXMoZ2xvYmFsT2Jq
ZWN0LCBvcHRpb25zLmZpbGVzLCBvcHRpb25zLnZlcmJvc2UpOwogCiAgICAgcmV0dXJuIHN1Y2Nl
c3MgPyAwIDogMzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJQ2FzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJQ2FzdC5oCShyZXZpc2lv
biAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRXhl
Y1N0YXRlOwogICAgIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5OwotICAgIGNsYXNzIEpTR2xvYmFs
RGF0YTsKKyAgICBjbGFzcyBWTTsKICAgICBjbGFzcyBKU09iamVjdDsKICAgICBjbGFzcyBKU1Zh
bHVlOwogfQpAQCAtMTE3LDkgKzExNyw5IEBAIGlubGluZSBKU0M6OlByb3BlcnR5TmFtZUFycmF5
KiB0b0pTKEpTUHIKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0M6OlByb3BlcnR5TmFt
ZUFycmF5Kj4oYSk7CiB9CiAKLWlubGluZSBKU0M6OkpTR2xvYmFsRGF0YSogdG9KUyhKU0NvbnRl
eHRHcm91cFJlZiBnKQoraW5saW5lIEpTQzo6Vk0qIHRvSlMoSlNDb250ZXh0R3JvdXBSZWYgZykK
IHsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0M6OkpTR2xvYmFsRGF0YSo+KGNvbnN0
X2Nhc3Q8T3BhcXVlSlNDb250ZXh0R3JvdXAqPihnKSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8SlNDOjpWTSo+KGNvbnN0X2Nhc3Q8T3BhcXVlSlNDb250ZXh0R3JvdXAqPihnKSk7CiB9
CiAKIGlubGluZSBKU1ZhbHVlUmVmIHRvUmVmKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpT
VmFsdWUgdikKQEAgLTE2Miw3ICsxNjIsNyBAQCBpbmxpbmUgSlNQcm9wZXJ0eU5hbWVBY2N1bXVs
YXRvclJlZiB0b1JlCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNQcm9wZXJ0eU5hbWVB
Y2N1bXVsYXRvclJlZj4obCk7CiB9CiAKLWlubGluZSBKU0NvbnRleHRHcm91cFJlZiB0b1JlZihK
U0M6OkpTR2xvYmFsRGF0YSogZykKK2lubGluZSBKU0NvbnRleHRHcm91cFJlZiB0b1JlZihKU0M6
OlZNKiBnKQogewogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTQ29udGV4dEdyb3VwUmVm
PihnKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJU2hpbXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSVNoaW1zLmgJKHJldmlzaW9u
IDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJU2hpbXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsMTQgKzM2LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBBUElF
bnRyeVNoaW1XaXRob3V0TG9jayB7CiBwcm90ZWN0ZWQ6Ci0gICAgQVBJRW50cnlTaGltV2l0aG91
dExvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBib29sIHJlZ2lzdGVyVGhyZWFkKQotICAg
ICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQotICAgICAgICAsIG1fZW50cnlJZGVudGlm
aWVyVGFibGUod3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoZ2xvYmFs
RGF0YS0+aWRlbnRpZmllclRhYmxlKSkKKyAgICBBUElFbnRyeVNoaW1XaXRob3V0TG9jayhWTSog
dm0sIGJvb2wgcmVnaXN0ZXJUaHJlYWQpCisgICAgICAgIDogbV92bSh2bSkKKyAgICAgICAgLCBt
X2VudHJ5SWRlbnRpZmllclRhYmxlKHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmll
clRhYmxlKHZtLT5pZGVudGlmaWVyVGFibGUpKQogICAgIHsKICAgICAgICAgaWYgKHJlZ2lzdGVy
VGhyZWFkKQotICAgICAgICAgICAgZ2xvYmFsRGF0YS0+aGVhcC5tYWNoaW5lVGhyZWFkcygpLmFk
ZEN1cnJlbnRUaHJlYWQoKTsKLSAgICAgICAgbV9nbG9iYWxEYXRhLT5oZWFwLmFjdGl2aXR5Q2Fs
bGJhY2soKS0+c3luY2hyb25pemUoKTsKLSAgICAgICAgbV9nbG9iYWxEYXRhLT5oZWFwLnN3ZWVw
ZXIoKS0+c3luY2hyb25pemUoKTsKKyAgICAgICAgICAgIHZtLT5oZWFwLm1hY2hpbmVUaHJlYWRz
KCkuYWRkQ3VycmVudFRocmVhZCgpOworICAgICAgICBtX3ZtLT5oZWFwLmFjdGl2aXR5Q2FsbGJh
Y2soKS0+c3luY2hyb25pemUoKTsKKyAgICAgICAgbV92bS0+aGVhcC5zd2VlcGVyKCktPnN5bmNo
cm9uaXplKCk7CiAgICAgfQogCiAgICAgfkFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKCkKQEAgLTUy
LDcgKzUyLDcgQEAgcHJvdGVjdGVkOgogICAgIH0KIAogcHJvdGVjdGVkOgotICAgIFJlZlB0cjxK
U0dsb2JhbERhdGE+IG1fZ2xvYmFsRGF0YTsKKyAgICBSZWZQdHI8Vk0+IG1fdm07CiAgICAgSWRl
bnRpZmllclRhYmxlKiBtX2VudHJ5SWRlbnRpZmllclRhYmxlOwogfTsKIApAQCAtNjAsMjIgKzYw
LDIyIEBAIGNsYXNzIEFQSUVudHJ5U2hpbSA6IHB1YmxpYyBBUElFbnRyeVNoaW0KIHB1YmxpYzoK
ICAgICAvLyBOb3JtYWwgQVBJIGVudHJ5CiAgICAgQVBJRW50cnlTaGltKEV4ZWNTdGF0ZSogZXhl
YywgYm9vbCByZWdpc3RlclRocmVhZCA9IHRydWUpCi0gICAgICAgIDogQVBJRW50cnlTaGltV2l0
aG91dExvY2soJmV4ZWMtPmdsb2JhbERhdGEoKSwgcmVnaXN0ZXJUaHJlYWQpCisgICAgICAgIDog
QVBJRW50cnlTaGltV2l0aG91dExvY2soJmV4ZWMtPnZtKCksIHJlZ2lzdGVyVGhyZWFkKQogICAg
ICAgICAsIG1fbG9ja0hvbGRlcihleGVjKQogICAgIHsKICAgICB9CiAKLSAgICAvLyBKU1Byb3Bl
cnR5TmFtZUFjY3VtdWxhdG9yIG9ubHkgaGFzIGEgZ2xvYmFsRGF0YS4KLSAgICBBUElFbnRyeVNo
aW0oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBib29sIHJlZ2lzdGVyVGhyZWFkID0gdHJ1ZSkK
LSAgICAgICAgOiBBUElFbnRyeVNoaW1XaXRob3V0TG9jayhnbG9iYWxEYXRhLCByZWdpc3RlclRo
cmVhZCkKLSAgICAgICAgLCBtX2xvY2tIb2xkZXIoZ2xvYmFsRGF0YSkKKyAgICAvLyBKU1Byb3Bl
cnR5TmFtZUFjY3VtdWxhdG9yIG9ubHkgaGFzIGEgdm0uCisgICAgQVBJRW50cnlTaGltKFZNKiB2
bSwgYm9vbCByZWdpc3RlclRocmVhZCA9IHRydWUpCisgICAgICAgIDogQVBJRW50cnlTaGltV2l0
aG91dExvY2sodm0sIHJlZ2lzdGVyVGhyZWFkKQorICAgICAgICAsIG1fbG9ja0hvbGRlcih2bSkK
ICAgICB7CiAgICAgfQogCiAgICAgfkFQSUVudHJ5U2hpbSgpCiAgICAgewotICAgICAgICAvLyBE
ZXN0cm95aW5nIG91ciBKU0xvY2tIb2xkZXIgc2hvdWxkIGFsc28gZGVzdHJveSB0aGUgSlNHbG9i
YWxEYXRhLgotICAgICAgICBtX2dsb2JhbERhdGEuY2xlYXIoKTsKKyAgICAgICAgLy8gRGVzdHJv
eWluZyBvdXIgSlNMb2NrSG9sZGVyIHNob3VsZCBhbHNvIGRlc3Ryb3kgdGhlIFZNLgorICAgICAg
ICBtX3ZtLmNsZWFyKCk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtODYsMTkgKzg2LDE5IEBAIGNs
YXNzIEFQSUNhbGxiYWNrU2hpbSB7CiBwdWJsaWM6CiAgICAgQVBJQ2FsbGJhY2tTaGltKEV4ZWNT
dGF0ZSogZXhlYykKICAgICAgICAgOiBtX2Ryb3BBbGxMb2NrcyhleGVjKQotICAgICAgICAsIG1f
Z2xvYmFsRGF0YSgmZXhlYy0+Z2xvYmFsRGF0YSgpKQorICAgICAgICAsIG1fdm0oJmV4ZWMtPnZt
KCkpCiAgICAgewogICAgICAgICB3dGZUaHJlYWREYXRhKCkucmVzZXRDdXJyZW50SWRlbnRpZmll
clRhYmxlKCk7CiAgICAgfQogCiAgICAgfkFQSUNhbGxiYWNrU2hpbSgpCiAgICAgewotICAgICAg
ICB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElkZW50aWZpZXJUYWJsZShtX2dsb2JhbERhdGEt
PmlkZW50aWZpZXJUYWJsZSk7CisgICAgICAgIHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRl
bnRpZmllclRhYmxlKG1fdm0tPmlkZW50aWZpZXJUYWJsZSk7CiAgICAgfQogCiBwcml2YXRlOgog
ICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIG1fZHJvcEFsbExvY2tzOwotICAgIEpTR2xvYmFsRGF0
YSogbV9nbG9iYWxEYXRhOworICAgIFZNKiBtX3ZtOwogfTsKIAogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCShyZXZpc2lvbiAxNDg2
ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIGNsYXNzIEpTQVBJV3JhcHBlck9iamVjdCA6
IHB1YmxpYyBKU0Rlc3QKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
IEJhc2U7CiAgICAgCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmKTsKKyAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCogd3JhcHBlZE9i
amVjdCgpIHsgcmV0dXJuIG1fd3JhcHBlZE9iamVjdDsgfQpAQCAtNDcsNyArNDcsNyBAQCBwdWJs
aWM6CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogICAgIAot
ICAgIEpTQVBJV3JhcHBlck9iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICBK
U0FQSVdyYXBwZXJPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsKIAogcHJpdmF0ZToKICAgICB2b2lk
KiBtX3dyYXBwZWRPYmplY3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJ
V3JhcHBlck9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQVBJV3JhcHBlck9iamVjdC5tbQkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTc0
LDIwICs3NCwyMCBAQCB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxsYmFja09iCiB0
ZW1wbGF0ZTw+IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+
OjpuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIAogdGVtcGxhdGUgPD4KLVN0cnVjdHVyZSogSlND
YWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvKQorU3RydWN0dXJlKiBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46
OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG8pCiB7Ci0gICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEs
IGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8p
OwogfQogCi1KU0FQSVdyYXBwZXJPYmplY3Q6OkpTQVBJV3JhcHBlck9iamVjdChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogQmFzZShnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUpCitKU0FQSVdyYXBwZXJPYmplY3Q6OkpTQVBJV3JhcHBlck9iamVjdChW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQog
ICAgICwgbV93cmFwcGVkT2JqZWN0KDApCiB7CiB9CiAKLXZvaWQgSlNBUElXcmFwcGVyT2JqZWN0
OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEpTQVBJV3Jh
cHBlck9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewotICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKGdsb2JhbERhdGEpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBX
ZWFrU2V0OjphbGxvY2F0ZSh0aGlzLCBqc0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcigpLCAw
KTsgLy8gQmFsYW5jZWQgaW4gSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmFsaXpl
LgogfQogICAgIApAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2
aXNpdENoaWxkcmVuKEoKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwog
CiAgICAgaWYgKHRoaXNPYmplY3QtPndyYXBwZWRPYmplY3QoKSkKLSAgICAgICAgc2NhbkV4dGVy
bmFsT2JqZWN0R3JhcGgoY2VsbC0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxE
YXRhKCksIHZpc2l0b3IsIHRoaXNPYmplY3QtPndyYXBwZWRPYmplY3QoKSk7CisgICAgICAgIHNj
YW5FeHRlcm5hbE9iamVjdEdyYXBoKGNlbGwtPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKS0+
dm0oKSwgdmlzaXRvciwgdGhpc09iamVjdC0+d3JhcHBlZE9iamVjdCgpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCShyZXZp
c2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMSwxNCArMTAxLDE0IEBAIHZvaWQgSlNHYXJiYWdlQ29sbGVjdChK
U0NvbnRleHRSZWYgY3R4KQogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKICAgICBB
UElFbnRyeVNoaW0gZW50cnlTaGltKGV4ZWMsIGZhbHNlKTsKIAotICAgIGV4ZWMtPmdsb2JhbERh
dGEoKS5oZWFwLnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCk7CisgICAgZXhlYy0+dm0oKS5o
ZWFwLnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCk7CiB9CiAKIHZvaWQgSlNSZXBvcnRFeHRy
YU1lbW9yeUNvc3QoSlNDb250ZXh0UmVmIGN0eCwgc2l6ZV90IHNpemUpCiB7CiAgICAgRXhlY1N0
YXRlKiBleGVjID0gdG9KUyhjdHgpOwogICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7
Ci0gICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemUp
OworICAgIGV4ZWMtPnZtKCkuaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZSk7CiB9CiAK
IGV4dGVybiAiQyIgSlNfRVhQT1JUIHZvaWQgSlNTeW5jaHJvbm91c0dhcmJhZ2VDb2xsZWN0Rm9y
RGVidWdnaW5nKEpTQ29udGV4dFJlZik7CkBAIC0xMjAsNSArMTIwLDUgQEAgdm9pZCBKU1N5bmNo
cm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1ZwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9K
UyhjdHgpOwogICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7Ci0gICAgZXhlYy0+Z2xv
YmFsRGF0YSgpLmhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKKyAgICBleGVjLT52bSgpLmhlYXAu
Y29sbGVjdEFsbEdhcmJhZ2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDYWxsYmFja0NvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNvbnN0IENsYXNz
SW5mbyBKU0NhbGxiYWNrQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkNhbGxiYWNrQ29uc3RydWN0
b3IiLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2FsbGJhY2tD
b25zdHJ1Y3RvcikgfTsKIAogSlNDYWxsYmFja0NvbnN0cnVjdG9yOjpKU0NhbGxiYWNrQ29uc3Ry
dWN0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTQ2xhc3NSZWYganNDbGFzcywgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxiYWNrIGNh
bGxiYWNrKQotICAgIDogSlNEZXN0cnVjdGlibGVPYmplY3QoZ2xvYmFsT2JqZWN0LT5nbG9iYWxE
YXRhKCksIHN0cnVjdHVyZSkKKyAgICA6IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0KGdsb2JhbE9iamVj
dC0+dm0oKSwgc3RydWN0dXJlKQogICAgICwgbV9jbGFzcyhqc0NsYXNzKQogICAgICwgbV9jYWxs
YmFjayhjYWxsYmFjaykKIHsKQEAgLTQ4LDcgKzQ4LDcgQEAgSlNDYWxsYmFja0NvbnN0cnVjdG9y
OjpKU0NhbGxiYWNrQ29uc3RydQogCiB2b2lkIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6ZmluaXNo
Q3JlYXRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDbGFzc1JlZiBqc0NsYXNz
KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgp
KTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwogICAgIEFT
U0VSVChpbmhlcml0cygmc19pbmZvKSk7CiAgICAgaWYgKG1fY2xhc3MpCiAgICAgICAgIEpTQ2xh
c3NSZXRhaW4oanNDbGFzcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDkgKzQ4LDkgQEAgcHVibGljOgogICAgIEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3JD
YWxsYmFjayBjYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGJhY2s7IH0KICAgICBzdGF0
aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG8pIAogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEs
IGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKICAgICB9CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDYWxsYmFja0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTAsMTYgKzUwLDE2IEBAIEpTQ2FsbGJhY2tGdW5jdGlvbjo6SlNDYWxsYmFja0Z1
bmN0aW9uKEoKIHsKIH0KIAotdm9pZCBKU0NhbGxiYWNrRnVuY3Rpb246OmZpbmlzaENyZWF0aW9u
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgU3RyaW5nJiBuYW1lKQordm9pZCBKU0Nh
bGxiYWNrRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgY29uc3QgU3RyaW5nJiBuYW1l
KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIG5hbWUpOworICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtLCBuYW1lKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5m
bykpOwogfQogCiBKU0NhbGxiYWNrRnVuY3Rpb24qIEpTQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3RD
YWxsQXNGdW5jdGlvbkNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAg
ICAgSlNDYWxsYmFja0Z1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEpTQ2FsbGJhY2tGdW5jdGlvbj4oKmV4ZWMtPmhlYXAoKSkpIEpTQ2FsbGJhY2tGdW5jdGlv
bihnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+Y2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZSgp
LCBjYWxsYmFjayk7Ci0gICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERh
dGEoKSwgbmFtZSk7CisgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCksIG5h
bWUpOwogICAgIHJldHVybiBmdW5jdGlvbjsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNDYWxsYmFja0Z1
bmN0aW9uIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewogcHJvdGVjdGVkOgogICAgIEpTQ2Fs
bGJhY2tGdW5jdGlvbihKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEpTT2JqZWN0Q2FsbEFz
RnVuY3Rpb25DYWxsYmFjayk7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEm
LCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBjb25z
dCBTdHJpbmcmIG5hbWUpOwogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9u
IEJhc2U7CkBAIC00NSw5ICs0NSw5IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBJbnRlcm5hbEZ1
bmN0aW9uIG1pc2gtbWFzaGVzIGNvbnN0cnVjdG9yIGFuZCBmdW5jdGlvbiBiZWhhdmlvciAtLSB3
ZSBzaG91bGQgCiAgICAgLy8gcmVmYWN0b3IgdGhlIGNvZGUgc28gdGhpcyBvdmVycmlkZSBpc24n
dCBuZWNlc3NhcnkKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvKSAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKSAKICAgICB7IAotICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBw
cm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCisg
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywg
VHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCiAgICAgfQog
CiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxs
YmFja09iamVjdC5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDI0ICs0MSwy
NCBAQCB0ZW1wbGF0ZTw+IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxKCiB0ZW1wbGF0ZTw+
IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46Om5lZWRzRGVzdHJ1
Y3Rpb24gPSBmYWxzZTsKIAogdGVtcGxhdGU8PgotSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9i
amVjdD4qIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+OjpjcmVhdGUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0NsYXNzUmVmIGNsYXNzUmVmLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKK0pTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+KiBKU0NhbGxiYWNrT2JqZWN0PEpT
R2xvYmFsT2JqZWN0Pjo6Y3JlYXRlKFZNJiB2bSwgSlNDbGFzc1JlZiBjbGFzc1JlZiwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD4q
IGNhbGxiYWNrT2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNDYWxsYmFja09i
amVjdDxKU0dsb2JhbE9iamVjdD4gPihnbG9iYWxEYXRhLmhlYXApKSBKU0NhbGxiYWNrT2JqZWN0
KGdsb2JhbERhdGEsIGNsYXNzUmVmLCBzdHJ1Y3R1cmUpOwotICAgIGNhbGxiYWNrT2JqZWN0LT5m
aW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICBnbG9iYWxEYXRhLmhlYXAuYWRkRmluYWxp
emVyKGNhbGxiYWNrT2JqZWN0LCBkZXN0cm95KTsKKyAgICBKU0NhbGxiYWNrT2JqZWN0PEpTR2xv
YmFsT2JqZWN0PiogY2FsbGJhY2tPYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0PiA+KHZtLmhlYXApKSBKU0NhbGxiYWNrT2Jq
ZWN0KHZtLCBjbGFzc1JlZiwgc3RydWN0dXJlKTsKKyAgICBjYWxsYmFja09iamVjdC0+ZmluaXNo
Q3JlYXRpb24odm0pOworICAgIHZtLmhlYXAuYWRkRmluYWxpemVyKGNhbGxiYWNrT2JqZWN0LCBk
ZXN0cm95KTsKICAgICByZXR1cm4gY2FsbGJhY2tPYmplY3Q7CiB9CiAKIHRlbXBsYXRlIDw+Ci1T
dHJ1Y3R1cmUqIEpTQ2FsbGJhY2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+OjpjcmVhdGVT
dHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorU3RydWN0dXJlKiBKU0NhbGxiYWNrT2JqZWN0PEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKIHsgCi0gICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7IAorICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsgCiB9CiAgICAgCiB0ZW1wbGF0ZSA8PgotU3RydWN0dXJlKiBK
U0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90bykKK1N0cnVjdHVyZSogSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OmNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG8pCiB7IAotICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9i
YWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhHbG9iYWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pOyAKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG8sIFR5cGVJbmZvKEdsb2JhbE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
JnNfaW5mbyk7IAogfQogCiB2b2lkIEpTQ2FsbGJhY2tPYmplY3REYXRhOjpmaW5hbGl6ZShIYW5k
bGU8VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01NCwxMSArNTQsMTEgQEAgc3RydWN0IEpTQ2FsbGJhY2tPYmplY3REYXRhIDogV2Vha0hh
bmRsZQogICAgICAgICByZXR1cm4gbV9wcml2YXRlUHJvcGVydGllcy0+Z2V0UHJpdmF0ZVByb3Bl
cnR5KHByb3BlcnR5TmFtZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0UHJpdmF0ZVByb3Bl
cnR5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQorICAgIHZvaWQgc2V0UHJpdmF0ZVBy
b3BlcnR5KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCFtX3ByaXZhdGVQcm9wZXJ0
aWVzKQogICAgICAgICAgICAgbV9wcml2YXRlUHJvcGVydGllcyA9IGFkb3B0UHRyKG5ldyBKU1By
aXZhdGVQcm9wZXJ0eU1hcCk7Ci0gICAgICAgIG1fcHJpdmF0ZVByb3BlcnRpZXMtPnNldFByaXZh
dGVQcm9wZXJ0eShnbG9iYWxEYXRhLCBvd25lciwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAg
ICAgIG1fcHJpdmF0ZVByb3BlcnRpZXMtPnNldFByaXZhdGVQcm9wZXJ0eSh2bSwgb3duZXIsIHBy
b3BlcnR5TmFtZSwgdmFsdWUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGRlbGV0ZVByaXZhdGVQ
cm9wZXJ0eShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCkBAIC04NiwxMCArODYsMTAg
QEAgc3RydWN0IEpTQ2FsbGJhY2tPYmplY3REYXRhIDogV2Vha0hhbmRsZQogICAgICAgICAgICAg
cmV0dXJuIGxvY2F0aW9uLT52YWx1ZS5nZXQoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgdm9pZCBzZXRQcml2YXRlUHJvcGVydHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0Nl
bGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUp
CisgICAgICAgIHZvaWQgc2V0UHJpdmF0ZVByb3BlcnR5KFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQogICAgICAgICB7
CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gZW1wdHk7Ci0gICAgICAgICAgICBt
X3Byb3BlcnR5TWFwLmFkZChwcm9wZXJ0eU5hbWUuaW1wbCgpLCBlbXB0eSkuaXRlcmF0b3ItPnZh
bHVlLnNldChnbG9iYWxEYXRhLCBvd25lciwgdmFsdWUpOworICAgICAgICAgICAgbV9wcm9wZXJ0
eU1hcC5hZGQocHJvcGVydHlOYW1lLmltcGwoKSwgZW1wdHkpLml0ZXJhdG9yLT52YWx1ZS5zZXQo
dm0sIG93bmVyLCB2YWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgZGVs
ZXRlUHJpdmF0ZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKQEAgLTEx
OCwxMCArMTE4LDEwIEBAIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CiBjbGFzcyBKU0NhbGxiYWNr
T2JqZWN0IDogcHVibGljIFBhcmVudCB7CiBwcm90ZWN0ZWQ6CiAgICAgSlNDYWxsYmFja09iamVj
dChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBKU0NsYXNzUmVmLCB2b2lkKiBkYXRhKTsKLSAgICBK
U0NhbGxiYWNrT2JqZWN0KEpTR2xvYmFsRGF0YSYsIEpTQ2xhc3NSZWYsIFN0cnVjdHVyZSopOwor
ICAgIEpTQ2FsbGJhY2tPYmplY3QoVk0mLCBKU0NsYXNzUmVmLCBTdHJ1Y3R1cmUqKTsKIAogICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0dsb2JhbERhdGEmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAKIHB1Ymxp
YzoKICAgICB0eXBlZGVmIFBhcmVudCBCYXNlOwpAQCAtMTMzLDcgKzEzMyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgY2FsbGJhY2tPYmplY3QtPmZpbmlzaENyZWF0aW9uKGV4ZWMpOwogICAgICAgICBy
ZXR1cm4gY2FsbGJhY2tPYmplY3Q7CiAgICAgfQotICAgIHN0YXRpYyBKU0NhbGxiYWNrT2JqZWN0
PFBhcmVudD4qIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBKU0NsYXNzUmVmLCBTdHJ1Y3R1cmUqKTsK
KyAgICBzdGF0aWMgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+KiBjcmVhdGUoVk0mLCBKU0NsYXNz
UmVmLCBTdHJ1Y3R1cmUqKTsKIAogICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rp
b247CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC0xNDksMTYgKzE0
OSwxNiBAQCBwdWJsaWM6CiAgICAgSlNDbGFzc1JlZiBjbGFzc1JlZigpIGNvbnN0IHsgcmV0dXJu
IG1fY2FsbGJhY2tPYmplY3REYXRhLT5qc0NsYXNzOyB9CiAgICAgYm9vbCBpbmhlcml0cyhKU0Ns
YXNzUmVmKSBjb25zdDsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0dsb2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAg
ICAgCiAgICAgSlNWYWx1ZSBnZXRQcml2YXRlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fY2FsbGJhY2tPYmplY3RE
YXRhLT5nZXRQcml2YXRlUHJvcGVydHkocHJvcGVydHlOYW1lKTsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBzZXRQcml2YXRlUHJvcGVydHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUpCisgICAgdm9pZCBzZXRQcml2
YXRlUHJvcGVydHkoVk0mIHZtLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUpCiAgICAgewotICAgICAgICBtX2NhbGxiYWNrT2JqZWN0RGF0YS0+c2V0UHJpdmF0
ZVByb3BlcnR5KGdsb2JhbERhdGEsIHRoaXMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgICAg
ICBtX2NhbGxiYWNrT2JqZWN0RGF0YS0+c2V0UHJpdmF0ZVByb3BlcnR5KHZtLCB0aGlzLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBkZWxldGVQcml2YXRlUHJv
cGVydHkoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHJl
dmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09i
amVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIGlubGluZSBK
U0NhbGxiYWNrT2JqZWN0PFBhcmVudD4qIEpTQ2FsbGIKIAogdGVtcGxhdGUgPGNsYXNzIFBhcmVu
dD4KIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6SlNDYWxsYmFja09iamVjdChFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0NsYXNzUmVmIGpzQ2xhc3MsIHZvaWQqIGRh
dGEpCi0gICAgOiBQYXJlbnQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpCisgICAgOiBQ
YXJlbnQoZXhlYy0+dm0oKSwgc3RydWN0dXJlKQogICAgICwgbV9jYWxsYmFja09iamVjdERhdGEo
YWRvcHRQdHIobmV3IEpTQ2FsbGJhY2tPYmplY3REYXRhKGRhdGEsIGpzQ2xhc3MpKSkKIHsKIH0K
QEAgLTU5LDggKzU5LDggQEAgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpKU0NhbGxiYWNrT2Jq
ZQogLy8gR2xvYmFsIG9iamVjdCBjb25zdHJ1Y3Rvci4KIC8vIEZJWE1FOiBNb3ZlIHRoaXMgaW50
byBhIHNlcGFyYXRlIEpTR2xvYmFsQ2FsbGJhY2tPYmplY3QgY2xhc3MgZGVyaXZlZCBmcm9tIHRo
aXMgb25lLgogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KLUpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50
Pjo6SlNDYWxsYmFja09iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2xhc3NSZWYg
anNDbGFzcywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBQYXJlbnQoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlKQorSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpKU0NhbGxiYWNrT2JqZWN0KFZN
JiB2bSwgSlNDbGFzc1JlZiBqc0NsYXNzLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IFBh
cmVudCh2bSwgc3RydWN0dXJlKQogICAgICwgbV9jYWxsYmFja09iamVjdERhdGEoYWRvcHRQdHIo
bmV3IEpTQ2FsbGJhY2tPYmplY3REYXRhKDAsIGpzQ2xhc3MpKSkKIHsKIH0KQEAgLTY4LDE4ICs2
OCwxOCBAQCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OkpTQ2FsbGJhY2tPYmplCiB0ZW1wbGF0
ZSA8Y2xhc3MgUGFyZW50Pgogdm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmZpbmlzaENy
ZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVj
LT5nbG9iYWxEYXRhKCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwog
ICAgIEFTU0VSVChQYXJlbnQ6OmluaGVyaXRzKCZzX2luZm8pKTsKICAgICBpbml0KGV4ZWMpOwog
fQogCiAvLyBUaGlzIGlzIGp1c3QgZm9yIEdsb2JhbCBvYmplY3QsIHNvIHdlIGNhbiBhc3N1bWUg
dGhhdCBCYXNlOjpmaW5pc2hDcmVhdGlvbiBpcyBKU0dsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRp
b24uCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50Pgotdm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVu
dD46OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgSlNDYWxs
YmFja09iamVjdDxQYXJlbnQ+OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQVNTRVJU
KFBhcmVudDo6aW5oZXJpdHMoJnNfaW5mbykpOwogICAgIEFTU0VSVChQYXJlbnQ6OmlzR2xvYmFs
T2JqZWN0KCkpOwotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBpbml0KGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+
KHRoaXMpLT5nbG9iYWxFeGVjKCkpOwogfQogCkBAIC0yODMsNyArMjgzLDcgQEAgdm9pZCBKU0Nh
bGxiYWNrT2JqZWN0PFBhcmVudD46OnB1dChKU0NlbAogICAgICAgICAgICAgICAgIGlmIChTdGF0
aWNGdW5jdGlvbkVudHJ5KiBlbnRyeSA9IHN0YXRpY0Z1bmN0aW9ucy0+Z2V0KG5hbWUpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeS0+YXR0cmlidXRlcyAmIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAgICAgICAgIHRoaXNPYmplY3QtPkpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6cHV0RGly
ZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7IC8vIHB1dCBhcyBv
dmVycmlkZSBwcm9wZXJ0eQorICAgICAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5KU0NhbGxi
YWNrT2JqZWN0PFBhcmVudD46OnB1dERpcmVjdChleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlKTsgLy8gcHV0IGFzIG92ZXJyaWRlIHByb3BlcnR5CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC02MjcsNyArNjI3LDcg
QEAgSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OnN0YXRpYwogICAgICAgICAgICAg
ICAgICAgICBpZiAoSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrIGNhbGxBc0Z1bmN0aW9u
ID0gZW50cnktPmNhbGxBc0Z1bmN0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBvID0gSlNDYWxsYmFja0Z1bmN0aW9uOjpj
cmVhdGUoZXhlYywgdGhpc09iai0+Z2xvYmFsT2JqZWN0KCksIGNhbGxBc0Z1bmN0aW9uLCBuYW1l
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNPYmotPnB1dERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksIHByb3BlcnR5TmFtZSwgbywgZW50cnktPmF0dHJpYnV0ZXMpOworICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpc09iai0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFt
ZSwgbywgZW50cnktPmF0dHJpYnV0ZXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG87CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyNyw3ICsxMjcsNyBAQCBQYXNzUmVmUHRyPE9wYXF1ZUpTQ2xhc3M+IE9wYXF1ZUpTQ2xh
c3M6CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPcGFxdWVKU0NsYXNzKCZkZWZpbml0aW9uLCBw
cm90b0NsYXNzLmdldCgpKSk7CiB9CiAKLU9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YTo6T3BhcXVl
SlNDbGFzc0NvbnRleHREYXRhKEpTQzo6SlNHbG9iYWxEYXRhJiwgT3BhcXVlSlNDbGFzcyoganND
bGFzcykKK09wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YTo6T3BhcXVlSlNDbGFzc0NvbnRleHREYXRh
KEpTQzo6Vk0mLCBPcGFxdWVKU0NsYXNzKiBqc0NsYXNzKQogICAgIDogbV9jbGFzcyhqc0NsYXNz
KQogewogICAgIGlmIChqc0NsYXNzLT5tX3N0YXRpY1ZhbHVlcykgewpAQCAtMTUzLDcgKzE1Myw3
IEBAIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSYgT3BhcXVlSlNDbGFzczoKIHsKICAgICBPd25Q
dHI8T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhPiYgY29udGV4dERhdGEgPSBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPm9wYXF1ZUpTQ2xhc3NEYXRhKCkuYWRkKHRoaXMsIG51bGxwdHIpLml0
ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIWNvbnRleHREYXRhKQotICAgICAgICBjb250ZXh0RGF0
YSA9IGFkb3B0UHRyKG5ldyBPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzKSk7CisgICAgICAgIGNvbnRleHREYXRhID0gYWRvcHRQdHIobmV3IE9wYXF1ZUpT
Q2xhc3NDb250ZXh0RGF0YShleGVjLT52bSgpLCB0aGlzKSk7CiAgICAgcmV0dXJuICpjb250ZXh0
RGF0YTsKIH0KIApAQCAtMjAzLDcgKzIwMyw3IEBAIEpTT2JqZWN0KiBPcGFxdWVKU0NsYXNzOjpw
cm90b3R5cGUoRXhlY1MKICAgICBKU09iamVjdCogcHJvdG90eXBlID0gSlNDYWxsYmFja09iamVj
dDxKU0Rlc3RydWN0aWJsZU9iamVjdD46OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tPYmplY3RTdHJ1
Y3R1cmUoKSwgcHJvdG90eXBlQ2xhc3MsICZqc0NsYXNzRGF0YSk7IC8vIHNldCBqc0NsYXNzRGF0
YSBhcyB0aGUgb2JqZWN0J3MgcHJpdmF0ZSBkYXRhLCBzbyBpdCBjYW4gY2xlYXIgb3VyIHJlZmVy
ZW5jZSBvbiBkZXN0cnVjdGlvbgogICAgIGlmIChwYXJlbnRDbGFzcykgewogICAgICAgICBpZiAo
SlNPYmplY3QqIHBhcmVudFByb3RvdHlwZSA9IHBhcmVudENsYXNzLT5wcm90b3R5cGUoZXhlYykp
Ci0gICAgICAgICAgICBwcm90b3R5cGUtPnNldFByb3RvdHlwZShleGVjLT5nbG9iYWxEYXRhKCks
IHBhcmVudFByb3RvdHlwZSk7CisgICAgICAgICAgICBwcm90b3R5cGUtPnNldFByb3RvdHlwZShl
eGVjLT52bSgpLCBwYXJlbnRQcm90b3R5cGUpOwogICAgIH0KIAogICAgIGpzQ2xhc3NEYXRhLmNh
Y2hlZFByb3RvdHlwZSA9IFBhc3NXZWFrPEpTT2JqZWN0Pihwcm90b3R5cGUpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC02
OCwxNCArNjgsMTQgQEAgc3RydWN0IE9wYXF1ZUpTQ2xhc3M7CiBzdHJ1Y3QgT3BhcXVlSlNDbGFz
c0NvbnRleHREYXRhIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShPcGFxdWVKU0NsYXNzQ29u
dGV4dERhdGEpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBPcGFxdWVK
U0NsYXNzQ29udGV4dERhdGEoSlNDOjpKU0dsb2JhbERhdGEmLCBPcGFxdWVKU0NsYXNzKik7Cisg
ICAgT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhKEpTQzo6Vk0mLCBPcGFxdWVKU0NsYXNzKik7CiAK
ICAgICAvLyBJdCBpcyBuZWNlc3NhcnkgdG8ga2VlcCBPcGFxdWVKU0NsYXNzIGFsaXZlIGJlY2F1
c2Ugb2YgdGhlIGZvbGxvd2luZyByYXJlIHNjZW5hcmlvOgotICAgIC8vIDEuIEEgY2xhc3MgaXMg
Y3JlYXRlZCBhbmQgdXNlZCwgc28gaXRzIGNvbnRleHQgZGF0YSBpcyBzdG9yZWQgaW4gSlNHbG9i
YWxEYXRhIGhhc2ggbWFwLgorICAgIC8vIDEuIEEgY2xhc3MgaXMgY3JlYXRlZCBhbmQgdXNlZCwg
c28gaXRzIGNvbnRleHQgZGF0YSBpcyBzdG9yZWQgaW4gVk0gaGFzaCBtYXAuCiAgICAgLy8gMi4g
VGhlIGNsYXNzIGlzIHJlbGVhc2VkLCBhbmQgd2hlbiBhbGwgSlMgb2JqZWN0cyB0aGF0IHVzZSBp
dCBhcmUgY29sbGVjdGVkLCBPcGFxdWVKU0NsYXNzCiAgICAgLy8gaXMgZGVsZXRlZCAodGhhdCdz
IHRoZSBwYXJ0IHByZXZlbnRlZCBieSB0aGlzIFJlZlB0cikuCiAgICAgLy8gMy4gQW5vdGhlciBj
bGFzcyBpcyBjcmVhdGVkIGF0IHRoZSBzYW1lIGFkZHJlc3MuCi0gICAgLy8gNC4gV2hlbiBpdCBp
cyB1c2VkLCB0aGUgb2xkIGNvbnRleHQgZGF0YSBpcyBmb3VuZCBpbiBKU0dsb2JhbERhdGEgYW5k
IHVzZWQuCisgICAgLy8gNC4gV2hlbiBpdCBpcyB1c2VkLCB0aGUgb2xkIGNvbnRleHQgZGF0YSBp
cyBmb3VuZCBpbiBWTSBhbmQgdXNlZC4KICAgICBSZWZQdHI8T3BhcXVlSlNDbGFzcz4gbV9jbGFz
czsKIAogICAgIE93blB0cjxPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGU+IHN0YXRpY1Zh
bHVlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCShyZXZpc2lv
biAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIC0gKEpTVmFsdWUgKilldmFsdWF0ZVNjcmlw
dDooTlNTdHJpbmcgKikKIC0gKHZvaWQpc2V0RXhjZXB0aW9uOihKU1ZhbHVlICopdmFsdWUKIHsK
ICAgICBpZiAodmFsdWUpCi0gICAgICAgIG1fZXhjZXB0aW9uLnNldCh0b0pTKG1fY29udGV4dCkt
Pmdsb2JhbERhdGEoKSwgdG9KUyhKU1ZhbHVlVG9PYmplY3QobV9jb250ZXh0LCB2YWx1ZUludGVy
bmFsVmFsdWUodmFsdWUpLCAwKSkpOworICAgICAgICBtX2V4Y2VwdGlvbi5zZXQodG9KUyhtX2Nv
bnRleHQpLT52bSgpLCB0b0pTKEpTVmFsdWVUb09iamVjdChtX2NvbnRleHQsIHZhbHVlSW50ZXJu
YWxWYWx1ZSh2YWx1ZSksIDApKSk7CiAgICAgZWxzZQogICAgICAgICBtX2V4Y2VwdGlvbi5jbGVh
cigpOwogfQpAQCAtMTkwLDcgKzE5MCw3IEBAIC0gKGlkKWluaXRXaXRoR2xvYmFsQ29udGV4dFJl
ZjooSlNHbG9iYWwKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCktPmxleGljYWxHbG9iYWxPYmplY3QoKTsK
LSAgICBtX3ZpcnR1YWxNYWNoaW5lID0gW1tKU1ZpcnR1YWxNYWNoaW5lIHZpcnR1YWxNYWNoaW5l
V2l0aENvbnRleHRHcm91cFJlZjp0b1JlZigmZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpXSBy
ZXRhaW5dOworICAgIG1fdmlydHVhbE1hY2hpbmUgPSBbW0pTVmlydHVhbE1hY2hpbmUgdmlydHVh
bE1hY2hpbmVXaXRoQ29udGV4dEdyb3VwUmVmOnRvUmVmKCZnbG9iYWxPYmplY3QtPnZtKCkpXSBy
ZXRhaW5dOwogICAgIEFTU0VSVChtX3ZpcnR1YWxNYWNoaW5lKTsKICAgICBtX2NvbnRleHQgPSBK
U0dsb2JhbENvbnRleHRSZXRhaW4oY29udGV4dCk7CiAgICAgbV93cmFwcGVyTWFwID0gW1tKU1dy
YXBwZXJNYXAgYWxsb2NdIGluaXRXaXRoQ29udGV4dDpzZWxmXTsKQEAgLTI1Nyw3ICsyNTcsNyBA
QCAtIChKU1ZhbHVlICopd3JhcHBlckZvckpTT2JqZWN0OihKU1ZhbHVlCiAKICsgKEpTQ29udGV4
dCAqKWNvbnRleHRXaXRoR2xvYmFsQ29udGV4dFJlZjooSlNHbG9iYWxDb250ZXh0UmVmKWdsb2Jh
bENvbnRleHQKIHsKLSAgICBKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtKU1Zp
cnR1YWxNYWNoaW5lIHZpcnR1YWxNYWNoaW5lV2l0aENvbnRleHRHcm91cFJlZjp0b1JlZigmdG9K
UyhnbG9iYWxDb250ZXh0KS0+Z2xvYmFsRGF0YSgpKV07CisgICAgSlNWaXJ0dWFsTWFjaGluZSAq
dmlydHVhbE1hY2hpbmUgPSBbSlNWaXJ0dWFsTWFjaGluZSB2aXJ0dWFsTWFjaGluZVdpdGhDb250
ZXh0R3JvdXBSZWY6dG9SZWYoJnRvSlMoZ2xvYmFsQ29udGV4dCktPnZtKCkpXTsKICAgICBKU0Nv
bnRleHQgKmNvbnRleHQgPSBbdmlydHVhbE1hY2hpbmUgY29udGV4dEZvckdsb2JhbENvbnRleHRS
ZWY6Z2xvYmFsQ29udGV4dF07CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICBjb250ZXh0ID0g
W1tbSlNDb250ZXh0IGFsbG9jXSBpbml0V2l0aEdsb2JhbENvbnRleHRSZWY6Z2xvYmFsQ29udGV4
dF0gYXV0b3JlbGVhc2VdOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRl
eHRSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250
ZXh0UmVmLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NvbnRleHRSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiBKU0NvbnRleHRHcm91cFJlZiBKU0NvbnRleHRHcm91cENyZWF0ZSgp
CiB7CiAgICAgaW5pdGlhbGl6ZVRocmVhZGluZygpOwotICAgIHJldHVybiB0b1JlZihKU0dsb2Jh
bERhdGE6OmNyZWF0ZUNvbnRleHRHcm91cCgpLmxlYWtSZWYoKSk7CisgICAgcmV0dXJuIHRvUmVm
KFZNOjpjcmVhdGVDb250ZXh0R3JvdXAoKS5sZWFrUmVmKCkpOwogfQogCiBKU0NvbnRleHRHcm91
cFJlZiBKU0NvbnRleHRHcm91cFJldGFpbihKU0NvbnRleHRHcm91cFJlZiBncm91cCkKQEAgLTY4
LDEyICs2OCwxMiBAQCBKU0NvbnRleHRHcm91cFJlZiBKU0NvbnRleHRHcm91cFJldGFpbihKCiB2
b2lkIEpTQ29udGV4dEdyb3VwUmVsZWFzZShKU0NvbnRleHRHcm91cFJlZiBncm91cCkKIHsKICAg
ICBJZGVudGlmaWVyVGFibGUqIHNhdmVkSWRlbnRpZmllclRhYmxlOwotICAgIEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSA9ICp0b0pTKGdyb3VwKTsKKyAgICBWTSYgdm0gPSAqdG9KUyhncm91cCk7
CiAKICAgICB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbERhdGEpOwotICAgICAg
ICBzYXZlZElkZW50aWZpZXJUYWJsZSA9IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRp
ZmllclRhYmxlKGdsb2JhbERhdGEuaWRlbnRpZmllclRhYmxlKTsKLSAgICAgICAgZ2xvYmFsRGF0
YS5kZXJlZigpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgICAgIHNhdmVk
SWRlbnRpZmllclRhYmxlID0gd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFi
bGUodm0uaWRlbnRpZmllclRhYmxlKTsKKyAgICAgICAgdm0uZGVyZWYoKTsKICAgICB9CiAKICAg
ICB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElkZW50aWZpZXJUYWJsZShzYXZlZElkZW50aWZp
ZXJUYWJsZSk7CkBAIC04OCwxOSArODgsMTkgQEAgc3RhdGljIGJvb2wgaW50ZXJuYWxTY3JpcHRU
aW1lb3V0Q2FsbGJhYwogCiB2b2lkIEpTQ29udGV4dEdyb3VwU2V0RXhlY3V0aW9uVGltZUxpbWl0
KEpTQ29udGV4dEdyb3VwUmVmIGdyb3VwLCBkb3VibGUgbGltaXQsIEpTU2hvdWxkVGVybWluYXRl
Q2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQqIGNhbGxiYWNrRGF0YSkKIHsKLSAgICBKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEgPSAqdG9KUyhncm91cCk7Ci0gICAgQVBJRW50cnlTaGltIGVudHJ5U2hp
bSgmZ2xvYmFsRGF0YSk7Ci0gICAgV2F0Y2hkb2cmIHdhdGNoZG9nID0gZ2xvYmFsRGF0YS53YXRj
aGRvZzsKKyAgICBWTSYgdm0gPSAqdG9KUyhncm91cCk7CisgICAgQVBJRW50cnlTaGltIGVudHJ5
U2hpbSgmdm0pOworICAgIFdhdGNoZG9nJiB3YXRjaGRvZyA9IHZtLndhdGNoZG9nOwogICAgIHZv
aWQqIGNhbGxiYWNrUHRyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbGJhY2spOwotICAg
IHdhdGNoZG9nLnNldFRpbWVMaW1pdChnbG9iYWxEYXRhLCBsaW1pdCwgaW50ZXJuYWxTY3JpcHRU
aW1lb3V0Q2FsbGJhY2ssIGNhbGxiYWNrUHRyLCBjYWxsYmFja0RhdGEpOworICAgIHdhdGNoZG9n
LnNldFRpbWVMaW1pdCh2bSwgbGltaXQsIGludGVybmFsU2NyaXB0VGltZW91dENhbGxiYWNrLCBj
YWxsYmFja1B0ciwgY2FsbGJhY2tEYXRhKTsKIH0KIAogdm9pZCBKU0NvbnRleHRHcm91cENsZWFy
RXhlY3V0aW9uVGltZUxpbWl0KEpTQ29udGV4dEdyb3VwUmVmIGdyb3VwKQogewotICAgIEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSA9ICp0b0pTKGdyb3VwKTsKLSAgICBBUElFbnRyeVNoaW0gZW50
cnlTaGltKCZnbG9iYWxEYXRhKTsKLSAgICBXYXRjaGRvZyYgd2F0Y2hkb2cgPSBnbG9iYWxEYXRh
LndhdGNoZG9nOwotICAgIHdhdGNoZG9nLnNldFRpbWVMaW1pdChnbG9iYWxEYXRhLCBzdGQ6Om51
bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpOworICAgIFZNJiB2bSA9ICp0b0pTKGdy
b3VwKTsKKyAgICBBUElFbnRyeVNoaW0gZW50cnlTaGltKCZ2bSk7CisgICAgV2F0Y2hkb2cmIHdh
dGNoZG9nID0gdm0ud2F0Y2hkb2c7CisgICAgd2F0Y2hkb2cuc2V0VGltZUxpbWl0KHZtLCBzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpOwogfQogCiAvLyBGcm9tIHRoZSBB
UEkncyBwZXJzcGVjdGl2ZSwgYSBnbG9iYWwgY29udGV4dCByZW1haW5zIGFsaXZlIGlmZiBpdCBo
YXMgYmVlbiBKU0dsb2JhbENvbnRleHRSZXRhaW5lZC4KQEAgLTExMCwxMCArMTEwLDEwIEBAIEpT
R2xvYmFsQ29udGV4dFJlZiBKU0dsb2JhbENvbnRleHRDcmVhdGUKICAgICBpbml0aWFsaXplVGhy
ZWFkaW5nKCk7CiAKICNpZiBPUyhEQVJXSU4pCi0gICAgLy8gSWYgdGhlIGFwcGxpY2F0aW9uIHdh
cyBsaW5rZWQgYmVmb3JlIEpTR2xvYmFsQ29udGV4dENyZWF0ZSB3YXMgY2hhbmdlZCB0byB1c2Ug
YSB1bmlxdWUgSlNHbG9iYWxEYXRhLAorICAgIC8vIElmIHRoZSBhcHBsaWNhdGlvbiB3YXMgbGlu
a2VkIGJlZm9yZSBKU0dsb2JhbENvbnRleHRDcmVhdGUgd2FzIGNoYW5nZWQgdG8gdXNlIGEgdW5p
cXVlIFZNLAogICAgIC8vIHdlIHVzZSBhIHNoYXJlZCBvbmUgZm9yIGJhY2t3YXJkcyBjb21wYXRp
YmlsaXR5LgogICAgIGlmIChOU1ZlcnNpb25PZkxpbmtUaW1lTGlicmFyeSgiSmF2YVNjcmlwdENv
cmUiKSA8PSB3ZWJraXRGaXJzdFZlcnNpb25XaXRoQ29uY3VycmVudEdsb2JhbENvbnRleHRzKSB7
Ci0gICAgICAgIHJldHVybiBKU0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKHRvUmVmKCZKU0ds
b2JhbERhdGE6OnNoYXJlZEluc3RhbmNlKCkpLCBnbG9iYWxPYmplY3RDbGFzcyk7CisgICAgICAg
IHJldHVybiBKU0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKHRvUmVmKCZWTTo6c2hhcmVkSW5z
dGFuY2UoKSksIGdsb2JhbE9iamVjdENsYXNzKTsKICAgICB9CiAjZW5kaWYgLy8gT1MoREFSV0lO
KQogCkBAIC0xMjQsMjIgKzEyNCwyMiBAQCBKU0dsb2JhbENvbnRleHRSZWYgSlNHbG9iYWxDb250
ZXh0Q3JlYXRlCiB7CiAgICAgaW5pdGlhbGl6ZVRocmVhZGluZygpOwogCi0gICAgUmVmUHRyPEpT
R2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IGdyb3VwID8gUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+
KHRvSlMoZ3JvdXApKSA6IEpTR2xvYmFsRGF0YTo6Y3JlYXRlQ29udGV4dEdyb3VwKCk7CisgICAg
UmVmUHRyPFZNPiB2bSA9IGdyb3VwID8gUGFzc1JlZlB0cjxWTT4odG9KUyhncm91cCkpIDogVk06
OmNyZWF0ZUNvbnRleHRHcm91cCgpOwogCi0gICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShnbG9i
YWxEYXRhLmdldCgpLCBmYWxzZSk7Ci0gICAgZ2xvYmFsRGF0YS0+bWFrZVVzYWJsZUZyb21NdWx0
aXBsZVRocmVhZHMoKTsKKyAgICBBUElFbnRyeVNoaW0gZW50cnlTaGltKHZtLmdldCgpLCBmYWxz
ZSk7CisgICAgdm0tPm1ha2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCk7CiAKICAgICBpZiAo
IWdsb2JhbE9iamVjdENsYXNzKSB7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdDo6
Y3JlYXRlU3RydWN0dXJlKCpnbG9iYWxEYXRhLCBqc051bGwoKSkpOworICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZSgqdm0sIEpTR2xv
YmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnZtLCBqc051bGwoKSkpOwogICAgICAgICByZXR1
cm4gSlNHbG9iYWxDb250ZXh0UmV0YWluKHRvR2xvYmFsUmVmKGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpKSk7CiAgICAgfQogCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpT
Q2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+OjpjcmVhdGUoKmdsb2JhbERhdGEsIGdsb2Jh
bE9iamVjdENsYXNzLCBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6Y3JlYXRlU3Ry
dWN0dXJlKCpnbG9iYWxEYXRhLCAwLCBqc051bGwoKSkpOworICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6Y3JlYXRlKCp2
bSwgZ2xvYmFsT2JqZWN0Q2xhc3MsIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+Ojpj
cmVhdGVTdHJ1Y3R1cmUoKnZtLCAwLCBqc051bGwoKSkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgIEpTVmFsdWUgcHJvdG90eXBlID0gZ2xv
YmFsT2JqZWN0Q2xhc3MtPnByb3RvdHlwZShleGVjKTsKICAgICBpZiAoIXByb3RvdHlwZSkKICAg
ICAgICAgcHJvdG90eXBlID0ganNOdWxsKCk7Ci0gICAgZ2xvYmFsT2JqZWN0LT5yZXNldFByb3Rv
dHlwZSgqZ2xvYmFsRGF0YSwgcHJvdG90eXBlKTsKKyAgICBnbG9iYWxPYmplY3QtPnJlc2V0UHJv
dG90eXBlKCp2bSwgcHJvdG90eXBlKTsKICAgICByZXR1cm4gSlNHbG9iYWxDb250ZXh0UmV0YWlu
KHRvR2xvYmFsUmVmKGV4ZWMpKTsKIH0KIApAQCAtMTQ4LDkgKzE0OCw5IEBAIEpTR2xvYmFsQ29u
dGV4dFJlZiBKU0dsb2JhbENvbnRleHRSZXRhaW4KICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pT
KGN0eCk7CiAgICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShleGVjKTsKIAotICAgIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIGdjUHJvdGVjdChleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpOwotICAg
IGdsb2JhbERhdGEucmVmKCk7CisgICAgdm0ucmVmKCk7CiAgICAgcmV0dXJuIGN0eDsKIH0KIApA
QCAtMTYxLDEzICsxNjEsMTMgQEAgdm9pZCBKU0dsb2JhbENvbnRleHRSZWxlYXNlKEpTR2xvYmFs
Q29udAogICAgIHsKICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKLSAgICAgICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICBz
YXZlZElkZW50aWZpZXJUYWJsZSA9IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmll
clRhYmxlKGdsb2JhbERhdGEuaWRlbnRpZmllclRhYmxlKTsKKyAgICAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICAgICAgc2F2ZWRJZGVudGlmaWVyVGFibGUgPSB3dGZUaHJlYWREYXRhKCku
c2V0Q3VycmVudElkZW50aWZpZXJUYWJsZSh2bS5pZGVudGlmaWVyVGFibGUpOwogCiAgICAgICAg
IGJvb2wgcHJvdGVjdENvdW50SXNaZXJvID0gSGVhcDo6aGVhcChleGVjLT5keW5hbWljR2xvYmFs
T2JqZWN0KCkpLT51bnByb3RlY3QoZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKICAgICAg
ICAgaWYgKHByb3RlY3RDb3VudElzWmVybykKLSAgICAgICAgICAgIGdsb2JhbERhdGEuaGVhcC5y
ZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpOwotICAgICAgICBnbG9iYWxEYXRhLmRlcmVmKCk7
CisgICAgICAgICAgICB2bS5oZWFwLnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCk7CisgICAg
ICAgIHZtLmRlcmVmKCk7CiAgICAgfQogCiAgICAgd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJ
ZGVudGlmaWVyVGFibGUoc2F2ZWRJZGVudGlmaWVyVGFibGUpOwpAQCAtMTg1LDcgKzE4NSw3IEBA
IEpTT2JqZWN0UmVmIEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChKU0MKIEpTQ29udGV4dEdyb3Vw
UmVmIEpTQ29udGV4dEdldEdyb3VwKEpTQ29udGV4dFJlZiBjdHgpCiB7CiAgICAgRXhlY1N0YXRl
KiBleGVjID0gdG9KUyhjdHgpOwotICAgIHJldHVybiB0b1JlZigmZXhlYy0+Z2xvYmFsRGF0YSgp
KTsKKyAgICByZXR1cm4gdG9SZWYoJmV4ZWMtPnZtKCkpOwogfQogCiBKU0dsb2JhbENvbnRleHRS
ZWYgSlNDb250ZXh0R2V0R2xvYmFsQ29udGV4dChKU0NvbnRleHRSZWYgY3R4KQpAQCAtMjAyLDcg
KzIwMiw3IEBAIEpTU3RyaW5nUmVmIEpTQ29udGV4dENyZWF0ZUJhY2t0cmFjZShKU0MKICAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAg
VmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJhY2U7Ci0gICAgSW50ZXJwcmV0ZXI6OmdldFN0YWNr
VHJhY2UoJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3RhY2tUcmFjZSwgbWF4U3RhY2tTaXplKTsKKyAg
ICBJbnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFjZSgmZXhlYy0+dm0oKSwgc3RhY2tUcmFjZSwgbWF4
U3RhY2tTaXplKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhY2tUcmFjZS5zaXpl
KCk7IGkrKykgewogICAgICAgICBTdHJpbmcgdXJsU3RyaW5nOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
OCw3ICs4OCw3IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZShKU0NvbnRleHRSZWYgY3QKIAog
ICAgIEpTQ2FsbGJhY2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+KiBvYmplY3QgPSBKU0Nh
bGxiYWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jYWxsYmFj
a09iamVjdFN0cnVjdHVyZSgpLCBqc0NsYXNzLCBkYXRhKTsKICAgICBpZiAoSlNPYmplY3QqIHBy
b3RvdHlwZSA9IGpzQ2xhc3MtPnByb3RvdHlwZShleGVjKSkKLSAgICAgICAgb2JqZWN0LT5zZXRQ
cm90b3R5cGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm90b3R5cGUpOworICAgICAgICBvYmplY3Qt
PnNldFByb3RvdHlwZShleGVjLT52bSgpLCBwcm90b3R5cGUpOwogCiAgICAgcmV0dXJuIHRvUmVm
KG9iamVjdCk7CiB9CkBAIC0xMTAsNyArMTEwLDcgQEAgSlNPYmplY3RSZWYgSlNPYmplY3RNYWtl
Q29uc3RydWN0b3IoSlNDbwogICAgICAgICBqc1Byb3RvdHlwZSA9IGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCk7CiAKICAgICBKU0NhbGxiYWNrQ29uc3RydWN0
b3IqIGNvbnN0cnVjdG9yID0gSlNDYWxsYmFja0NvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNh
bGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUoKSwganNDbGFzcywgY2FsbEFzQ29uc3RydWN0b3Ip
OwotICAgIGNvbnN0cnVjdG9yLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBqc1Byb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkpOworICAgIGNvbnN0cnVjdG9yLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwganNQcm90b3R5cGUsIERvbnRFbnVtIHwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICByZXR1cm4gdG9SZWYoY29uc3RydWN0b3IpOwog
fQogCkBAIC0xMTksNyArMTE5LDcgQEAgSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlRnVuY3Rpb24o
SlNDb250ZQogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKICAgICBBUElFbnRyeVNo
aW0gZW50cnlTaGltKGV4ZWMpOwogCi0gICAgSWRlbnRpZmllciBuYW1lSUQgPSBuYW1lID8gbmFt
ZS0+aWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpKSA6IElkZW50aWZpZXIoZXhlYywgImFu
b255bW91cyIpOworICAgIElkZW50aWZpZXIgbmFtZUlEID0gbmFtZSA/IG5hbWUtPmlkZW50aWZp
ZXIoJmV4ZWMtPnZtKCkpIDogSWRlbnRpZmllcihleGVjLCAiYW5vbnltb3VzIik7CiAgICAgCiAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcGFyYW1ldGVyQ291bnQ7IGkrKykKQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIEpTT2JqZWN0
U2V0UHJvdG90eXBlKEpTQ29udGV4dFJlZiBjCiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9K
UyhvYmplY3QpOwogICAgIEpTVmFsdWUganNWYWx1ZSA9IHRvSlMoZXhlYywgdmFsdWUpOwogCi0g
ICAganNPYmplY3QtPnNldFByb3RvdHlwZVdpdGhDeWNsZUNoZWNrKGV4ZWMtPmdsb2JhbERhdGEo
KSwganNWYWx1ZS5pc09iamVjdCgpID8ganNWYWx1ZSA6IGpzTnVsbCgpKTsKKyAgICBqc09iamVj
dC0+c2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlY2soZXhlYy0+dm0oKSwganNWYWx1ZS5pc09iamVj
dCgpID8ganNWYWx1ZSA6IGpzTnVsbCgpKTsKIH0KIAogYm9vbCBKU09iamVjdEhhc1Byb3BlcnR5
KEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdCwgSlNTdHJpbmdSZWYgcHJvcGVy
dHlOYW1lKQpAQCAtMjQ3LDcgKzI0Nyw3IEBAIGJvb2wgSlNPYmplY3RIYXNQcm9wZXJ0eShKU0Nv
bnRleHRSZWYgY3QKIAogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKICAg
ICAKLSAgICByZXR1cm4ganNPYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZS0+
aWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgcmV0dXJuIGpzT2JqZWN0LT5o
YXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPnZtKCkpKTsK
IH0KIAogSlNWYWx1ZVJlZiBKU09iamVjdEdldFByb3BlcnR5KEpTQ29udGV4dFJlZiBjdHgsIEpT
T2JqZWN0UmVmIG9iamVjdCwgSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCkBAIC0yNTcsNyArMjU3LDcgQEAgSlNWYWx1ZVJlZiBKU09iamVjdEdldFByb3Bl
cnR5KEpTQ29udGV4dAogCiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwog
Ci0gICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNPYmplY3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUt
PmlkZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgIEpTVmFsdWUganNWYWx1ZSA9
IGpzT2JqZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZleGVjLT52bSgp
KSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAgIGlmIChleGNlcHRp
b24pCiAgICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhlYy0+ZXhjZXB0aW9u
KCkpOwpAQCAtMjcyLDcgKzI3Miw3IEBAIHZvaWQgSlNPYmplY3RTZXRQcm9wZXJ0eShKU0NvbnRl
eHRSZWYgY3QKICAgICBBUElFbnRyeVNoaW0gZW50cnlTaGltKGV4ZWMpOwogCiAgICAgSlNPYmpl
Y3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwotICAgIElkZW50aWZpZXIgbmFtZShwcm9wZXJ0
eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgIElkZW50aWZpZXIg
bmFtZShwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPnZtKCkpKTsKICAgICBKU1ZhbHVl
IGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKIAogICAgIGlmIChhdHRyaWJ1dGVzICYmICFq
c09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgbmFtZSkpCkBAIC0zMjksNyArMzI5LDcgQEAgYm9v
bCBKU09iamVjdERlbGV0ZVByb3BlcnR5KEpTQ29udGV4dFJlZgogCiAgICAgSlNPYmplY3QqIGpz
T2JqZWN0ID0gdG9KUyhvYmplY3QpOwogCi0gICAgYm9vbCByZXN1bHQgPSBqc09iamVjdC0+bWV0
aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoanNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZS0+
aWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgYm9vbCByZXN1bHQgPSBqc09i
amVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoanNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZS0+aWRlbnRpZmllcigmZXhlYy0+dm0oKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkgewogICAgICAgICBpZiAoZXhjZXB0aW9uKQogICAgICAgICAgICAgKmV4Y2VwdGlv
biA9IHRvUmVmKGV4ZWMsIGV4ZWMtPmV4Y2VwdGlvbigpKTsKQEAgLTM4Miw3ICszODIsNyBAQCBK
U1ZhbHVlUmVmIEpTT2JqZWN0R2V0UHJpdmF0ZVByb3BlcnR5KEpTCiAgICAgQVBJRW50cnlTaGlt
IGVudHJ5U2hpbShleGVjKTsKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7
CiAgICAgSlNWYWx1ZSByZXN1bHQ7Ci0gICAgSWRlbnRpZmllciBuYW1lKHByb3BlcnR5TmFtZS0+
aWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgSWRlbnRpZmllciBuYW1lKHBy
b3BlcnR5TmFtZS0+aWRlbnRpZmllcigmZXhlYy0+dm0oKSkpOwogICAgIGlmIChqc09iamVjdC0+
aW5oZXJpdHMoJkpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+OjpzX2luZm8pKQogICAg
ICAgICByZXN1bHQgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD4qPihq
c09iamVjdCktPmdldFByaXZhdGVQcm9wZXJ0eShuYW1lKTsKICAgICBlbHNlIGlmIChqc09iamVj
dC0+aW5oZXJpdHMoJkpTQ2FsbGJhY2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+OjpzX2lu
Zm8pKQpAQCAtNDAwLDE4ICs0MDAsMTggQEAgYm9vbCBKU09iamVjdFNldFByaXZhdGVQcm9wZXJ0
eShKU0NvbnRleAogICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7CiAgICAgSlNPYmpl
Y3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVl
ID8gdG9KUyhleGVjLCB2YWx1ZSkgOiBKU1ZhbHVlKCk7Ci0gICAgSWRlbnRpZmllciBuYW1lKHBy
b3BlcnR5TmFtZS0+aWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgSWRlbnRp
ZmllciBuYW1lKHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmZXhlYy0+dm0oKSkpOwogICAgIGlm
IChqc09iamVjdC0+aW5oZXJpdHMoJkpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+Ojpz
X2luZm8pKSB7Ci0gICAgICAgIGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0
Pio+KGpzT2JqZWN0KS0+c2V0UHJpdmF0ZVByb3BlcnR5KGV4ZWMtPmdsb2JhbERhdGEoKSwgbmFt
ZSwganNWYWx1ZSk7CisgICAgICAgIGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2Jq
ZWN0Pio+KGpzT2JqZWN0KS0+c2V0UHJpdmF0ZVByb3BlcnR5KGV4ZWMtPnZtKCksIG5hbWUsIGpz
VmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKGpzT2JqZWN0LT5p
bmhlcml0cygmSlNDYWxsYmFja09iamVjdDxKU0Rlc3RydWN0aWJsZU9iamVjdD46OnNfaW5mbykp
IHsKLSAgICAgICAganNDYXN0PEpTQ2FsbGJhY2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+
Kj4oanNPYmplY3QpLT5zZXRQcml2YXRlUHJvcGVydHkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBuYW1l
LCBqc1ZhbHVlKTsKKyAgICAgICAganNDYXN0PEpTQ2FsbGJhY2tPYmplY3Q8SlNEZXN0cnVjdGli
bGVPYmplY3Q+Kj4oanNPYmplY3QpLT5zZXRQcml2YXRlUHJvcGVydHkoZXhlYy0+dm0oKSwgbmFt
ZSwganNWYWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNpZiBKU0NfT0JKQ19B
UElfRU5BQkxFRAogICAgIGlmIChqc09iamVjdC0+aW5oZXJpdHMoJkpTQ2FsbGJhY2tPYmplY3Q8
SlNBUElXcmFwcGVyT2JqZWN0Pjo6c19pbmZvKSkgewotICAgICAgICBqc0Nhc3Q8SlNDYWxsYmFj
a09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+Kj4oanNPYmplY3QpLT5zZXRQcml2YXRlUHJvcGVy
dHkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBuYW1lLCBqc1ZhbHVlKTsKKyAgICAgICAganNDYXN0PEpT
Q2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pio+KGpzT2JqZWN0KS0+c2V0UHJpdmF0
ZVByb3BlcnR5KGV4ZWMtPnZtKCksIG5hbWUsIGpzVmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAjZW5kaWYKQEAgLTQyMyw3ICs0MjMsNyBAQCBib29sIEpTT2JqZWN0RGVsZXRl
UHJpdmF0ZVByb3BlcnR5KEpTQ29uCiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwog
ICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7CiAgICAgSlNPYmplY3QqIGpzT2JqZWN0
ID0gdG9KUyhvYmplY3QpOwotICAgIElkZW50aWZpZXIgbmFtZShwcm9wZXJ0eU5hbWUtPmlkZW50
aWZpZXIoJmV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgIElkZW50aWZpZXIgbmFtZShwcm9wZXJ0
eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPnZtKCkpKTsKICAgICBpZiAoanNPYmplY3QtPmluaGVy
aXRzKCZKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6c19pbmZvKSkgewogICAgICAg
ICBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD4qPihqc09iamVjdCktPmRl
bGV0ZVByaXZhdGVQcm9wZXJ0eShuYW1lKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC01MjUs
MTQgKzUyNSwxNCBAQCBKU09iamVjdFJlZiBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yKEpTCiBz
dHJ1Y3QgT3BhcXVlSlNQcm9wZXJ0eU5hbWVBcnJheSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6Ci0gICAgT3BhcXVlSlNQcm9wZXJ0eU5hbWVBcnJheShKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEpCisgICAgT3BhcXVlSlNQcm9wZXJ0eU5hbWVBcnJheShWTSogdm0pCiAg
ICAgICAgIDogcmVmQ291bnQoMCkKLSAgICAgICAgLCBnbG9iYWxEYXRhKGdsb2JhbERhdGEpCisg
ICAgICAgICwgdm0odm0pCiAgICAgewogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCByZWZDb3Vu
dDsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGE7CisgICAgVk0qIHZtOwogICAgIFZlY3Rv
cjxKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gPiBhcnJheTsKIH07CiAKQEAgLTU0MiwxMCArNTQy
LDEwIEBAIEpTUHJvcGVydHlOYW1lQXJyYXlSZWYgSlNPYmplY3RDb3B5UHJvcGUKICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7CiAgICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShleGVj
KTsKIAotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7
CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAKLSAgICBKU1Byb3BlcnR5TmFtZUFycmF5UmVm
IHByb3BlcnR5TmFtZXMgPSBuZXcgT3BhcXVlSlNQcm9wZXJ0eU5hbWVBcnJheShnbG9iYWxEYXRh
KTsKLSAgICBQcm9wZXJ0eU5hbWVBcnJheSBhcnJheShnbG9iYWxEYXRhKTsKKyAgICBKU1Byb3Bl
cnR5TmFtZUFycmF5UmVmIHByb3BlcnR5TmFtZXMgPSBuZXcgT3BhcXVlSlNQcm9wZXJ0eU5hbWVB
cnJheSh2bSk7CisgICAgUHJvcGVydHlOYW1lQXJyYXkgYXJyYXkodm0pOwogICAgIGpzT2JqZWN0
LT5tZXRob2RUYWJsZSgpLT5nZXRQcm9wZXJ0eU5hbWVzKGpzT2JqZWN0LCBleGVjLCBhcnJheSwg
RXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CiAKICAgICBzaXplX3Qgc2l6ZSA9IGFycmF5LnNp
emUoKTsKQEAgLTU2NSw3ICs1NjUsNyBAQCBKU1Byb3BlcnR5TmFtZUFycmF5UmVmIEpTUHJvcGVy
dHlOYW1lQXJyCiB2b2lkIEpTUHJvcGVydHlOYW1lQXJyYXlSZWxlYXNlKEpTUHJvcGVydHlOYW1l
QXJyYXlSZWYgYXJyYXkpCiB7CiAgICAgaWYgKC0tYXJyYXktPnJlZkNvdW50ID09IDApIHsKLSAg
ICAgICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShhcnJheS0+Z2xvYmFsRGF0YSwgZmFsc2UpOwor
ICAgICAgICBBUElFbnRyeVNoaW0gZW50cnlTaGltKGFycmF5LT52bSwgZmFsc2UpOwogICAgICAg
ICBkZWxldGUgYXJyYXk7CiAgICAgfQogfQpAQCAtNTgzLDYgKzU4Myw2IEBAIEpTU3RyaW5nUmVm
IEpTUHJvcGVydHlOYW1lQXJyYXlHZXROYW1lQXQKIHZvaWQgSlNQcm9wZXJ0eU5hbWVBY2N1bXVs
YXRvckFkZE5hbWUoSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvclJlZiBhcnJheSwgSlNTdHJpbmdS
ZWYgcHJvcGVydHlOYW1lKQogewogICAgIFByb3BlcnR5TmFtZUFycmF5KiBwcm9wZXJ0eU5hbWVz
ID0gdG9KUyhhcnJheSk7Ci0gICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShwcm9wZXJ0eU5hbWVz
LT5nbG9iYWxEYXRhKCkpOwotICAgIHByb3BlcnR5TmFtZXMtPmFkZChwcm9wZXJ0eU5hbWUtPmlk
ZW50aWZpZXIocHJvcGVydHlOYW1lcy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgQVBJRW50cnlTaGlt
IGVudHJ5U2hpbShwcm9wZXJ0eU5hbWVzLT52bSgpKTsKKyAgICBwcm9wZXJ0eU5hbWVzLT5hZGQo
cHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKHByb3BlcnR5TmFtZXMtPnZtKCkpKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRSZWYuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRSZWYuY3BwCShyZXZpc2lvbiAxNDg2
ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0UmVmLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkFQSVNoaW1zLmgiCiAjaW5jbHVk
ZSAiQ29tcGxldGlvbi5oIgogI2luY2x1ZGUgIkpTQmFzZVByaXZhdGUuaCIKLSNpbmNsdWRlICJK
U0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIkpTU2NyaXB0UmVmUHJp
dmF0ZS5oIgogI2luY2x1ZGUgIk9wYXF1ZUpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgpAQCAtNDEsOSArNDEsOSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBzdHJ1Y3QgT3Bh
cXVlSlNTY3JpcHQgOiBwdWJsaWMgU291cmNlUHJvdmlkZXIgewogcHVibGljOgotICAgIHN0YXRp
YyBXVEY6OlBhc3NSZWZQdHI8T3BhcXVlSlNTY3JpcHQ+IGNyZWF0ZShKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBjb25z
dCBTdHJpbmcmIHNvdXJjZSkKKyAgICBzdGF0aWMgV1RGOjpQYXNzUmVmUHRyPE9wYXF1ZUpTU2Ny
aXB0PiBjcmVhdGUoVk0qIHZtLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IHN0YXJ0aW5nTGluZU51
bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2UpCiAgICAgewotICAgICAgICByZXR1cm4gV1RGOjph
ZG9wdFJlZihuZXcgT3BhcXVlSlNTY3JpcHQoZ2xvYmFsRGF0YSwgdXJsLCBzdGFydGluZ0xpbmVO
dW1iZXIsIHNvdXJjZSkpOworICAgICAgICByZXR1cm4gV1RGOjphZG9wdFJlZihuZXcgT3BhcXVl
SlNTY3JpcHQodm0sIHVybCwgc3RhcnRpbmdMaW5lTnVtYmVyLCBzb3VyY2UpKTsKICAgICB9CiAK
ICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZSgpIGNvbnN0IE9WRVJSSURFCkBAIC01MSw0MiArNTEs
NDIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9zb3VyY2U7CiAgICAgfQogCi0gICAgSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxEYXRhOyB9Cisg
ICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQogCiBwcml2YXRlOgotICAgIE9wYXF1
ZUpTU2NyaXB0KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgU3RyaW5nJiB1cmwsIGlu
dCBzdGFydGluZ0xpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlKQorICAgIE9wYXF1ZUpT
U2NyaXB0KFZNKiB2bSwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIs
IGNvbnN0IFN0cmluZyYgc291cmNlKQogICAgICAgICA6IFNvdXJjZVByb3ZpZGVyKHVybCwgVGV4
dFBvc2l0aW9uKE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChzdGFydGluZ0xpbmVOdW1i
ZXIpLCBPcmRpbmFsTnVtYmVyOjpmaXJzdCgpKSkKLSAgICAgICAgLCBtX2dsb2JhbERhdGEoZ2xv
YmFsRGF0YSkKKyAgICAgICAgLCBtX3ZtKHZtKQogICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkK
ICAgICB7CiAgICAgfQogCiAgICAgfk9wYXF1ZUpTU2NyaXB0KCkgeyB9CiAKLSAgICBKU0dsb2Jh
bERhdGEqIG1fZ2xvYmFsRGF0YTsKKyAgICBWTSogbV92bTsKICAgICBTdHJpbmcgbV9zb3VyY2U7
CiB9OwogCi1zdGF0aWMgYm9vbCBwYXJzZVNjcmlwdChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgUGFyc2VyRXJyb3ImIGVycm9yKQorc3RhdGljIGJv
b2wgcGFyc2VTY3JpcHQoVk0qIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFBhcnNlckVy
cm9yJiBlcnJvcikKIHsKLSAgICByZXR1cm4gSlNDOjpwYXJzZTxKU0M6OlByb2dyYW1Ob2RlPihn
bG9iYWxEYXRhLCBzb3VyY2UsIDAsIElkZW50aWZpZXIoKSwgSlNQYXJzZU5vcm1hbCwgSlNQYXJz
ZVByb2dyYW1Db2RlLCBlcnJvcik7CisgICAgcmV0dXJuIEpTQzo6cGFyc2U8SlNDOjpQcm9ncmFt
Tm9kZT4odm0sIHNvdXJjZSwgMCwgSWRlbnRpZmllcigpLCBKU1BhcnNlTm9ybWFsLCBKU1BhcnNl
UHJvZ3JhbUNvZGUsIGVycm9yKTsKIH0KIAogZXh0ZXJuICJDIiB7CiAKIEpTU2NyaXB0UmVmIEpT
U2NyaXB0Q3JlYXRlUmVmZXJlbmNpbmdJbW1vcnRhbEFTQ0lJVGV4dChKU0NvbnRleHRHcm91cFJl
ZiBjb250ZXh0R3JvdXAsIEpTU3RyaW5nUmVmIHVybCwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwg
Y29uc3QgY2hhciogc291cmNlLCBzaXplX3QgbGVuZ3RoLCBKU1N0cmluZ1JlZiogZXJyb3JNZXNz
YWdlLCBpbnQqIGVycm9yTGluZSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSB0
b0pTKGNvbnRleHRHcm91cCk7Ci0gICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShnbG9iYWxEYXRh
KTsKKyAgICBWTSogdm0gPSB0b0pTKGNvbnRleHRHcm91cCk7CisgICAgQVBJRW50cnlTaGltIGVu
dHJ5U2hpbSh2bSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewog
ICAgICAgICBpZiAoIWlzQVNDSUkoc291cmNlW2ldKSkKICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KIAotICAgIFJlZlB0cjxPcGFxdWVKU1NjcmlwdD4gcmVzdWx0ID0gT3BhcXVlSlNTY3Jp
cHQ6OmNyZWF0ZShnbG9iYWxEYXRhLCB1cmwtPnN0cmluZygpLCBzdGFydGluZ0xpbmVOdW1iZXIs
IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbChzb3VyY2UsIGxlbmd0aCkpKTsK
KyAgICBSZWZQdHI8T3BhcXVlSlNTY3JpcHQ+IHJlc3VsdCA9IE9wYXF1ZUpTU2NyaXB0OjpjcmVh
dGUodm0sIHVybC0+c3RyaW5nKCksIHN0YXJ0aW5nTGluZU51bWJlciwgU3RyaW5nKFN0cmluZ0lt
cGw6OmNyZWF0ZUZyb21MaXRlcmFsKHNvdXJjZSwgbGVuZ3RoKSkpOwogCiAgICAgUGFyc2VyRXJy
b3IgZXJyb3I7Ci0gICAgaWYgKCFwYXJzZVNjcmlwdChnbG9iYWxEYXRhLCBTb3VyY2VDb2RlKHJl
c3VsdCksIGVycm9yKSkgeworICAgIGlmICghcGFyc2VTY3JpcHQodm0sIFNvdXJjZUNvZGUocmVz
dWx0KSwgZXJyb3IpKSB7CiAgICAgICAgIGlmIChlcnJvck1lc3NhZ2UpCiAgICAgICAgICAgICAq
ZXJyb3JNZXNzYWdlID0gT3BhcXVlSlNTdHJpbmc6OmNyZWF0ZShlcnJvci5tX21lc3NhZ2UpLmxl
YWtSZWYoKTsKICAgICAgICAgaWYgKGVycm9yTGluZSkKQEAgLTk5LDEzICs5OSwxMyBAQCBKU1Nj
cmlwdFJlZiBKU1NjcmlwdENyZWF0ZVJlZmVyZW5jaW5nSW1tCiAKIEpTU2NyaXB0UmVmIEpTU2Ny
aXB0Q3JlYXRlRnJvbVN0cmluZyhKU0NvbnRleHRHcm91cFJlZiBjb250ZXh0R3JvdXAsIEpTU3Ry
aW5nUmVmIHVybCwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwgSlNTdHJpbmdSZWYgc291cmNlLCBK
U1N0cmluZ1JlZiogZXJyb3JNZXNzYWdlLCBpbnQqIGVycm9yTGluZSkKIHsKLSAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEgPSB0b0pTKGNvbnRleHRHcm91cCk7Ci0gICAgQVBJRW50cnlTaGlt
IGVudHJ5U2hpbShnbG9iYWxEYXRhKTsKKyAgICBWTSogdm0gPSB0b0pTKGNvbnRleHRHcm91cCk7
CisgICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbSh2bSk7CiAKLSAgICBSZWZQdHI8T3BhcXVlSlNT
Y3JpcHQ+IHJlc3VsdCA9IE9wYXF1ZUpTU2NyaXB0OjpjcmVhdGUoZ2xvYmFsRGF0YSwgdXJsLT5z
dHJpbmcoKSwgc3RhcnRpbmdMaW5lTnVtYmVyLCBzb3VyY2UtPnN0cmluZygpKTsKKyAgICBSZWZQ
dHI8T3BhcXVlSlNTY3JpcHQ+IHJlc3VsdCA9IE9wYXF1ZUpTU2NyaXB0OjpjcmVhdGUodm0sIHVy
bC0+c3RyaW5nKCksIHN0YXJ0aW5nTGluZU51bWJlciwgc291cmNlLT5zdHJpbmcoKSk7CiAKICAg
ICBQYXJzZXJFcnJvciBlcnJvcjsKLSAgICBpZiAoIXBhcnNlU2NyaXB0KGdsb2JhbERhdGEsIFNv
dXJjZUNvZGUocmVzdWx0KSwgZXJyb3IpKSB7CisgICAgaWYgKCFwYXJzZVNjcmlwdCh2bSwgU291
cmNlQ29kZShyZXN1bHQpLCBlcnJvcikpIHsKICAgICAgICAgaWYgKGVycm9yTWVzc2FnZSkKICAg
ICAgICAgICAgICplcnJvck1lc3NhZ2UgPSBPcGFxdWVKU1N0cmluZzo6Y3JlYXRlKGVycm9yLm1f
bWVzc2FnZSkubGVha1JlZigpOwogICAgICAgICBpZiAoZXJyb3JMaW5lKQpAQCAtMTE4LDEzICsx
MTgsMTMgQEAgSlNTY3JpcHRSZWYgSlNTY3JpcHRDcmVhdGVGcm9tU3RyaW5nKEpTQwogCiB2b2lk
IEpTU2NyaXB0UmV0YWluKEpTU2NyaXB0UmVmIHNjcmlwdCkKIHsKLSAgICBBUElFbnRyeVNoaW0g
ZW50cnlTaGltKHNjcmlwdC0+Z2xvYmFsRGF0YSgpKTsKKyAgICBBUElFbnRyeVNoaW0gZW50cnlT
aGltKHNjcmlwdC0+dm0oKSk7CiAgICAgc2NyaXB0LT5yZWYoKTsKIH0KIAogdm9pZCBKU1Njcmlw
dFJlbGVhc2UoSlNTY3JpcHRSZWYgc2NyaXB0KQogewotICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNo
aW0oc2NyaXB0LT5nbG9iYWxEYXRhKCkpOworICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oc2Ny
aXB0LT52bSgpKTsKICAgICBzY3JpcHQtPmRlcmVmKCk7CiB9CiAKQEAgLTEzMiw3ICsxMzIsNyBA
QCBKU1ZhbHVlUmVmIEpTU2NyaXB0RXZhbHVhdGUoSlNDb250ZXh0UmVmCiB7CiAgICAgRXhlY1N0
YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKICAgICBBUElFbnRyeVNoaW0gZW50cnlTaGltKGV4
ZWMpOwotICAgIGlmIChzY3JpcHQtPmdsb2JhbERhdGEoKSAhPSAmZXhlYy0+Z2xvYmFsRGF0YSgp
KSB7CisgICAgaWYgKHNjcmlwdC0+dm0oKSAhPSAmZXhlYy0+dm0oKSkgewogICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZp
c2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hp
bmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTIyNCwxMCArMjI0LDEwIEBAIC0gKE5TTWFwVGFibGUg
KilleHRlcm5hbE9iamVjdEdyYXBoCiAKIEBlbmQKIAotdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RH
cmFwaChKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvciwgdm9pZCogcm9vdCkKK3ZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYg
dm0sIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHZvaWQqIHJvb3QpCiB7CiAgICAgQGF1dG9y
ZWxlYXNlcG9vbCB7Ci0gICAgICAgIEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5lID0g
W0pTVmlydHVhbE1hY2hpbmUgdmlydHVhbE1hY2hpbmVXaXRoQ29udGV4dEdyb3VwUmVmOnRvUmVm
KCZnbG9iYWxEYXRhKV07CisgICAgICAgIEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5l
ID0gW0pTVmlydHVhbE1hY2hpbmUgdmlydHVhbE1hY2hpbmVXaXRoQ29udGV4dEdyb3VwUmVmOnRv
UmVmKCZ2bSldOwogICAgICAgICBOU01hcFRhYmxlICpleHRlcm5hbE9iamVjdEdyYXBoID0gW3Zp
cnR1YWxNYWNoaW5lIGV4dGVybmFsT2JqZWN0R3JhcGhdOwogICAgICAgICBWZWN0b3I8dm9pZCo+
IHN0YWNrOwogICAgICAgICBzdGFjay5hcHBlbmQocm9vdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgJKHJldmlz
aW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGlu
ZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpZiBKU0NfT0JK
Q19BUElfRU5BQkxFRAogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2Ns
YXNzIFZNOwogY2xhc3MgU2xvdFZpc2l0b3I7CiB9CiAKQEAgLTUwLDcgKzUwLDcgQEAgSlNDb250
ZXh0R3JvdXBSZWYgZ2V0R3JvdXBGcm9tVmlydHVhbE1hYwogQGVuZAogI2VuZGlmIC8vIGRlZmlu
ZWQoX19PQkpDX18pCiAKLXZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpKU0dsb2Jh
bERhdGEmLCBKU0M6OlNsb3RWaXNpdG9yJiwgdm9pZCogcm9vdCk7Cit2b2lkIHNjYW5FeHRlcm5h
bE9iamVjdEdyYXBoKEpTQzo6Vk0mLCBKU0M6OlNsb3RWaXNpdG9yJiwgdm9pZCogcm9vdCk7CiAK
ICNlbmRpZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5t
bQkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBw
ZXJNYXAubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBzdGF0aWMgSlNPYmpl
Y3RSZWYgbWFrZVdyYXBwZXIoSlNDb250ZXh0CiAgICAgSlNDOjpKU0NhbGxiYWNrT2JqZWN0PEpT
Qzo6SlNBUElXcmFwcGVyT2JqZWN0Piogb2JqZWN0ID0gSlNDOjpKU0NhbGxiYWNrT2JqZWN0PEpT
Qzo6SlNBUElXcmFwcGVyT2JqZWN0Pjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmpjV3JhcHBlck9iamVjdFN0
cnVjdHVyZSgpLCBqc0NsYXNzLCAwKTsKICAgICBvYmplY3QtPnNldFdyYXBwZWRPYmplY3Qod3Jh
cHBlZE9iamVjdCk7CiAgICAgaWYgKEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZSA9IGpzQ2xhc3Mt
PnByb3RvdHlwZShleGVjKSkKLSAgICAgICAgb2JqZWN0LT5zZXRQcm90b3R5cGUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBwcm90b3R5cGUpOworICAgICAgICBvYmplY3QtPnNldFByb3RvdHlwZShleGVj
LT52bSgpLCBwcm90b3R5cGUpOwogCiAgICAgcmV0dXJuIHRvUmVmKG9iamVjdCk7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5o
CShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxs
YmFja0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEwICs0OSwxMCBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIE9iakNDYWxsYmFja0Z1bmN0aW9uKiBjcmVhdGUoRXhlY1N0YXRlKiwgSlNH
bG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8T2JqQ0NhbGxiYWNr
RnVuY3Rpb25JbXBsPik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKICAgICAgICAgQVNTRVJU
KGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxE
YXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25z
dCBDbGFzc0luZm8gc19pbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpD
Q2FsbGJhY2tGdW5jdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC00NzcsNyArNDc3LDcgQEAgT2JqQ0NhbGxiYWNrRnVuY3Rpb246Ok9iakNDYWxsYmFja0Z1
bmN0aQogT2JqQ0NhbGxiYWNrRnVuY3Rpb24qIE9iakNDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzT3duUHRyPE9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbD4g
aW1wbCkKIHsKICAgICBPYmpDQ2FsbGJhY2tGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxPYmpDQ2FsbGJhY2tGdW5jdGlvbj4oKmV4ZWMtPmhlYXAoKSkpIE9i
akNDYWxsYmFja0Z1bmN0aW9uKGdsb2JhbE9iamVjdCwgb2JqQ0NhbGxiYWNrRnVuY3Rpb25DYWxs
QXNGdW5jdGlvbiwgaW1wbCk7Ci0gICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmds
b2JhbERhdGEoKSwgbmFtZSk7CisgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZt
KCksIG5hbWUpOwogICAgIHJldHVybiBmdW5jdGlvbjsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9PcGFxdWVKU1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9PcGFxdWVKU1N0cmluZy5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT3BhcXVlSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw3ICs0OCw3IEBAIFN0cmluZyBPcGFxdWVKU1N0cmluZzo6c3RyaW5nKCkgY29u
c3QKICAgICByZXR1cm4gbV9zdHJpbmcuaXNvbGF0ZWRDb3B5KCk7CiB9CiAKLUlkZW50aWZpZXIg
T3BhcXVlSlNTdHJpbmc6OmlkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKSBjb25z
dAorSWRlbnRpZmllciBPcGFxdWVKU1N0cmluZzo6aWRlbnRpZmllcihWTSogdm0pIGNvbnN0CiB7
CiAgICAgaWYgKCF0aGlzIHx8IG1fc3RyaW5nLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gSWRl
bnRpZmllcigpOwpAQCAtNTcsNyArNTcsNyBAQCBJZGVudGlmaWVyIE9wYXF1ZUpTU3RyaW5nOjpp
ZGVudGlmaWVyKEpTCiAgICAgICAgIHJldHVybiBJZGVudGlmaWVyKElkZW50aWZpZXI6OkVtcHR5
SWRlbnRpZmllcik7CiAKICAgICBpZiAobV9zdHJpbmcuaXM4Qml0KCkpCi0gICAgICAgIHJldHVy
biBJZGVudGlmaWVyKGdsb2JhbERhdGEsIG1fc3RyaW5nLmNoYXJhY3RlcnM4KCksIG1fc3RyaW5n
Lmxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuIElkZW50aWZpZXIodm0sIG1fc3RyaW5nLmNoYXJh
Y3RlcnM4KCksIG1fc3RyaW5nLmxlbmd0aCgpKTsKIAotICAgIHJldHVybiBJZGVudGlmaWVyKGds
b2JhbERhdGEsIG1fc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBtX3N0cmluZy5sZW5ndGgoKSk7Cisg
ICAgcmV0dXJuIElkZW50aWZpZXIodm0sIG1fc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBtX3N0cmlu
Zy5sZW5ndGgoKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09wYXF1ZUpT
U3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PcGFxdWVK
U1N0cmluZy5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L09wYXF1ZUpTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSWRlbnRpZmllcjsKLSAgICBjbGFzcyBKU0dsb2JhbERh
dGE7CisgICAgY2xhc3MgVk07CiB9CiAKIHN0cnVjdCBPcGFxdWVKU1N0cmluZyA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxPcGFxdWVKU1N0cmluZz4gewpAQCAtNTcsNyArNTcsNyBAQCBz
dHJ1Y3QgT3BhcXVlSlNTdHJpbmcgOiBwdWJsaWMgVGhyZWFkU2FmCiAgICAgdW5zaWduZWQgbGVu
Z3RoKCkgeyByZXR1cm4gISF0aGlzID8gbV9zdHJpbmcubGVuZ3RoKCkgOiAwOyB9CiAKICAgICBK
U19FWFBPUlRfUFJJVkFURSBTdHJpbmcgc3RyaW5nKCkgY29uc3Q7Ci0gICAgSlNDOjpJZGVudGlm
aWVyIGlkZW50aWZpZXIoSlNDOjpKU0dsb2JhbERhdGEqKSBjb25zdDsKKyAgICBKU0M6OklkZW50
aWZpZXIgaWRlbnRpZmllcihKU0M6OlZNKikgY29uc3Q7CiAjaWYgUExBVEZPUk0oUVQpCiAgICAg
UVN0cmluZyBxU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmc7IH0KICNlbmRpZgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2oJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC04NTQsMTEgKzg1NCwxMSBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXEpTR2xvYmFsRGF0YS5jcHAi
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXFZNLmNwcCIKIAkJCQk+CiAJCQk8L0Zp
bGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxKU0dsb2JhbERh
dGEuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcVk0uaCIKIAkJCQk+CiAJCQk8
L0ZpbGU+CiAJCQk8RmlsZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZUV4cG9ydHMuZGVmCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVFeHBvcnRzLmRlZgkocmV2aXNpb24gMTQ4NjgzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZUV4cG9ydHMuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIyICsx
LDE1IEBACiBFWFBPUlRTCiAKICAgICA/PzBBcnJheUJ1ZmZlclZpZXdAV1RGQEBJQUVAVj8kUGFz
c1JlZlB0ckBWQXJyYXlCdWZmZXJAV1RGQEBAMUBJQFoKLSAgICA/PzBCb29sZWFuT2JqZWN0QEpT
Q0BASUFFQEFBVkpTR2xvYmFsRGF0YUAxQFBBVlN0cnVjdHVyZUAxQEBaCiAgICAgPz8wQ29sbGF0
b3JAV1RGQEBRQUVAUEJEQFoKICAgICA/PzBDU3RyaW5nQFdURkBAUUFFQFBCREBaCiAgICAgPz8w
Q1N0cmluZ0BXVEZAQFFBRUBQQkRJQFoKLSAgICA/PzBEYXRhYmFzZUBQcm9maWxlckBKU0NAQFFB
RUBBQVZKU0dsb2JhbERhdGFAMkBAWgogICAgID8/MERhdGVJbnN0YW5jZUBKU0NAQElBRUBQQVZF
eGVjU3RhdGVAMUBQQVZTdHJ1Y3R1cmVAMUBAWgogICAgID8/MERlZmF1bHRHQ0FjdGl2aXR5Q2Fs
bGJhY2tASlNDQEBRQUVAUEFWSGVhcEAxQEBaCiAgICAgPz8wRHJvcEFsbExvY2tzQEpTTG9ja0BK
U0NAQFFBRUBQQVZFeGVjU3RhdGVAMkBAWgotICAgID8/MERyb3BBbGxMb2Nrc0BKU0xvY2tASlND
QEBRQUVAUEFWSlNHbG9iYWxEYXRhQDJAQFoKLSAgICA/PzBEeW5hbWljR2xvYmFsT2JqZWN0U2Nv
cGVASlNDQEBRQUVAQUFWSlNHbG9iYWxEYXRhQDFAUEFWSlNHbG9iYWxPYmplY3RAMUBAWiAKICAg
ICA/PzBFcnJvckhhbmRsaW5nTW9kZUBJbnRlcnByZXRlckBKU0NAQFFBRUBQQVZFeGVjU3RhdGVA
MkBAWgogICAgID8/MEludGVybmFsRnVuY3Rpb25ASlNDQEBJQUVAUEFWSlNHbG9iYWxPYmplY3RA
MUBQQVZTdHJ1Y3R1cmVAMUBAWgotICAgID8/MEpTR2xvYmFsT2JqZWN0QEpTQ0BASUFFQEFBVkpT
R2xvYmFsRGF0YUAxQFBBVlN0cnVjdHVyZUAxQFBCVUdsb2JhbE9iamVjdE1ldGhvZFRhYmxlQDFA
QFoKLSAgICA/PzBKU0xvY2tIb2xkZXJASlNDQEBRQUVAQUFWSlNHbG9iYWxEYXRhQDFAQFoKICAg
ICA/PzBKU0xvY2tIb2xkZXJASlNDQEBRQUVAUEFWRXhlY1N0YXRlQDFAQFoKLSAgICA/PzBKU0xv
Y2tIb2xkZXJASlNDQEBRQUVAUEFWSlNHbG9iYWxEYXRhQDFAQFoKICAgICA/PzBNRDVAV1RGQEBR
QUVAWFoKICAgICA/PzBNZWRpYVRpbWVAV1RGQEBRQUVAX0pISUBaIAogICAgID8/ME1lbW9yeUlu
c3RydW1lbnRhdGlvbkBXVEZAQFFBRUBQQVZNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnRAMUBA
WgpAQCAtMzMsMjEgKzI2LDE3IEBAIEVYUE9SVFMKICAgICA/PzBTdHJpbmdAV1RGQEBRQUVAUEJE
SUBaCiAgICAgPz8wU3RyaW5nQFdURkBAUUFFQFBCRUlAWgogICAgID8/MFN0cmluZ0BXVEZAQFFB
RUBWQVNDSUlMaXRlcmFsQDFAQFoKLSAgICA/PzBTdHJpbmdPYmplY3RASlNDQEBJQUVAQUFWSlNH
bG9iYWxEYXRhQDFAUEFWU3RydWN0dXJlQDFAQFoKICAgICA/PzBTdHJpbmdQcmludFN0cmVhbUBX
VEZAQFFBRUBYWgotICAgID8/MFN0cnVjdHVyZUBKU0NAQEFBRUBBQVZKU0dsb2JhbERhdGFAMUBQ
QVZKU0dsb2JhbE9iamVjdEAxQFZKU1ZhbHVlQDFAQUJWVHlwZUluZm9AMUBQQlVDbGFzc0luZm9A
MUBFSUBaCiAgICAgPz8wVGhyZWFkQ29uZGl0aW9uQFdURkBAUUFFQFhaCiAgICAgPz8wV3JhcHBl
ckJhc2VATWVtb3J5SW5zdHJ1bWVudGF0aW9uQFdURkBAUUFFQFBCRFBCWEBaCiAgICAgPz8wV1RG
VGhyZWFkRGF0YUBXVEZAQFFBRUBYWgogICAgID8/MFlhcnJQYXR0ZXJuQFlhcnJASlNDQEBRQUVA
QUJWU3RyaW5nQFdURkBAX04xUEFQQkRAWgogICAgID8/MUFycmF5QnVmZmVyVmlld0BXVEZAQFVB
RUBYWgotICAgID8/MUNsaWVudERhdGFASlNHbG9iYWxEYXRhQEpTQ0BAVUFFQFhaCiAgICAgPz8x
Q29sbGF0b3JAV1RGQEBRQUVAWFoKICAgICA/PzFEYXRhYmFzZUBQcm9maWxlckBKU0NAQFFBRUBY
WgogICAgID8/MURlYnVnZ2VyQEpTQ0BAVUFFQFhaCiAgICAgPz8xRHJvcEFsbExvY2tzQEpTTG9j
a0BKU0NAQFFBRUBYWgogICAgID8/MUVycm9ySGFuZGxpbmdNb2RlQEludGVycHJldGVyQEpTQ0BA
UUFFQFhaCi0gICAgPz8xSlNHbG9iYWxEYXRhQEpTQ0BAUUFFQFhaCiAgICAgPz8xSlNHbG9iYWxP
YmplY3RASlNDQEBRQUVAWFoKICAgICA/PzFKU0xvY2tIb2xkZXJASlNDQEBRQUVAWFoKICAgICA/
PzFNZWRpYVRpbWVAV1RGQEBRQUVAWFogCkBAIC03OCw3ICs2Nyw2IEBAIEVYUE9SVFMKICAgICA/
YWRkQEF0b21pY1N0cmluZ0BXVEZAQENBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBA
QDJAUEJEQFoKICAgICA/YWRkQEF0b21pY1N0cmluZ0BXVEZAQENBP0FWPyRQYXNzUmVmUHRyQFZT
dHJpbmdJbXBsQFdURkBAQDJAUEJFQFoKICAgICA/YWRkQEF0b21pY1N0cmluZ0BXVEZAQENBP0FW
PyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQDJAUEJFSUBaCi0gICAgP2FkZEBJZGVudGlm
aWVyQEpTQ0BAQ0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAV1RGQEBQQVZKU0ds
b2JhbERhdGFAMkBQQVZTdHJpbmdJbXBsQDRAQFoKICAgICA/YWRkQElkZW50aWZpZXJASlNDQEBT
QT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEBXVEZAQFBBVkV4ZWNTdGF0ZUAyQFBC
REBaCiAgICAgP2FkZEBQcm9wZXJ0eU5hbWVBcnJheUBKU0NAQFFBRVhQQVZTdHJpbmdJbXBsQFdU
RkBAQFoKICAgICA/YWRkQnl0ZXNATUQ1QFdURkBAUUFFWFBCRUlAWgpAQCAtODYsMTQgKzc0LDEx
IEBAIEVYUE9SVFMKICAgICA/YWRkQ3VycmVudFRocmVhZEBNYWNoaW5lVGhyZWFkc0BKU0NAQFFB
RVhYWgogICAgID9hZGRGaW5hbGl6ZXJASGVhcEBKU0NAQFFBRVhQQVZKU0NlbGxAMkBQNkFYMEBa
QFoKICAgICA/YWRkRnJvbUxpdGVyYWxEYXRhQEF0b21pY1N0cmluZ0BXVEZAQENBP0FWPyRQYXNz
UmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQDJAUEJESUBaCi0gICAgP2FkZFByb3BlcnR5VHJhbnNp
dGlvbkBTdHJ1Y3R1cmVASlNDQEBTQVBBVjEyQEFBVkpTR2xvYmFsRGF0YUAyQFBBVjEyQFZQcm9w
ZXJ0eU5hbWVAMkBJUEFWSlNDZWxsQDJAQUFIQFoKICAgICA/YWRkUHJvcGVydHlUcmFuc2l0aW9u
VG9FeGlzdGluZ1N0cnVjdHVyZUBTdHJ1Y3R1cmVASlNDQEBTQVBBVjEyQFBBVjEyQFZQcm9wZXJ0
eU5hbWVAMkBJUEFWSlNDZWxsQDJAQUFIQFoKLSAgICA/YWRkUHJvcGVydHlXaXRob3V0VHJhbnNp
dGlvbkBTdHJ1Y3R1cmVASlNDQEBRQUVIQUFWSlNHbG9iYWxEYXRhQDJAVlByb3BlcnR5TmFtZUAy
QElQQVZKU0NlbGxAMkBAWgogICAgID9hZGRQcml2YXRlQnVmZmVyQE1lbW9yeUNsYXNzSW5mb0BX
VEZAQFFBRVhJUEJEMDBAWgogICAgID9hZGRSYXdCdWZmZXJATWVtb3J5Q2xhc3NJbmZvQFdURkBA
UUFFWFBCWElQQkQxQFoKICAgICA/YWRkU2xvd0Nhc2VAQXRvbWljU3RyaW5nQFdURkBAQ0E/QVY/
JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBQQVZTdHJpbmdJbXBsQDJAQFoKICAgICA/
YWRkU2xvd0Nhc2VASWRlbnRpZmllckBKU0NAQENBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBs
QFdURkBAQFdURkBAUEFWRXhlY1N0YXRlQDJAUEFWU3RyaW5nSW1wbEA0QEBaCi0gICAgP2FkZFNs
b3dDYXNlQElkZW50aWZpZXJASlNDQEBDQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZA
QEBXVEZAQFBBVkpTR2xvYmFsRGF0YUAyQFBBVlN0cmluZ0ltcGxANEBAWgogICAgID9hZGRTdGF0
aWNHbG9iYWxzQEpTR2xvYmFsT2JqZWN0QEpTQ0BASUFFWFBBVUdsb2JhbFByb3BlcnR5SW5mb0Ax
MkBIQFoKICAgICA/YWRvcHRAU3RyaW5nSW1wbEBXVEZAQFNBP0FWPyRQYXNzUmVmUHRyQFZTdHJp
bmdJbXBsQFdURkBAQDJAQUFWPyRTdHJpbmdCdWZmZXJAX1dAMkBAWgogICAgID9hZG9wdEBTdHJp
bmdJbXBsQFdURkBAU0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBBQVY/JFN0
cmluZ0J1ZmZlckBFQDJAQFoKQEAgLTEzMiw3ICsxMTcsNiBAQCBFWFBPUlRTCiAgICAgP2NhbmNl
bENhbGxPbk1haW5UaHJlYWRAV1RGQEBZQVhQNkFYUEFYQFowQFoKICAgICA/Y2FuU2hyaW5rQFN0
cmluZ0J1aWxkZXJAV1RGQEBRQkVfTlhaCiAgICAgP2NhcGFjaXR5QEhlYXBASlNDQEBRQUVJWFoK
LSAgICA/Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbkBTdHJ1Y3R1cmVASlNDQEBTQVBBVjEyQEFB
VkpTR2xvYmFsRGF0YUAyQFBBVjEyQFZKU1ZhbHVlQDJAQFoKICAgICA/Y2hhcmFjdGVyU3RhcnRp
bmdBdEBTdHJpbmdAV1RGQEBRQkVISUBaCiAgICAgP2NoYXJhY3RlcnNUb0RvdWJsZUBXVEZAQFlB
TlBCX1dJUEFfTkBaCiAgICAgP2NoYXJhY3RlcnNUb0RvdWJsZUBXVEZAQFlBTlBCRUlQQV9OQFoK
QEAgLTE0NCw3ICsxMjgsNiBAQCBFWFBPUlRTCiAgICAgP2NoYXJhY3RlcnNUb1VJbnRTdHJpY3RA
V1RGQEBZQUlQQkVJUEFfTkhAWgogICAgID9jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbkBT
dHJpbmdAV1RGQEBRQUVQQl9XWFoKICAgICA/Y2hlY2tDdXJyZW50SWRlbnRpZmllclRhYmxlQElk
ZW50aWZpZXJASlNDQEBDQVhQQVZFeGVjU3RhdGVAMkBAWgotICAgID9jaGVja0N1cnJlbnRJZGVu
dGlmaWVyVGFibGVASWRlbnRpZmllckBKU0NAQENBWFBBVkpTR2xvYmFsRGF0YUAyQEBaCiAgICAg
P2NoZWNrc3VtQE1ENUBXVEZAQFFBRVhBQVY/JFZlY3RvckBFJDBCQUBWQ3Jhc2hPbk92ZXJmbG93
QFdURkBAQDJAQFoKICAgICA/Y2hlY2tTeW50YXhASlNDQEBZQV9OUEFWRXhlY1N0YXRlQDFAQUJW
U291cmNlQ29kZUAxQFBBVkpTVmFsdWVAMUBAWgogICAgID9jbGFzc05hbWVASlNPYmplY3RASlND
QEBTQT9BVlN0cmluZ0BXVEZAQFBCVjEyQEBaCkBAIC0xNjMsMzAgKzE0NiwyMiBAQCBFWFBPUlRT
CiAgICAgP2NvbnN0cnVjdE51bWJlckBKU0NAQFlBUEFWTnVtYmVyT2JqZWN0QDFAUEFWRXhlY1N0
YXRlQDFAUEFWSlNHbG9iYWxPYmplY3RAMUBWSlNWYWx1ZUAxQEBaCiAgICAgP2NvbnN0cnVjdFN0
cmluZ0BKU0NAQFlBUEFWU3RyaW5nT2JqZWN0QDFAUEFWRXhlY1N0YXRlQDFAUEFWSlNHbG9iYWxP
YmplY3RAMUBWSlNWYWx1ZUAxQEBaCiAgICAgP2NvbnRhaW5zT25seVdoaXRlc3BhY2VAU3RyaW5n
SW1wbEBXVEZAQFFBRV9OWFoKLSAgICA/Y29udmVydERvdWJsZVRvQ29udGlndW91c1doaWxlUGVy
Zm9ybWluZ1NldEluZGV4QEpTT2JqZWN0QEpTQ0BAQUFFWEFBVkpTR2xvYmFsRGF0YUAyQElWSlNW
YWx1ZUAyQEBaCi0gICAgP2NvbnZlcnRJbnQzMlRvRG91YmxlT3JDb250aWd1b3VzV2hpbGVQZXJm
b3JtaW5nU2V0SW5kZXhASlNPYmplY3RASlNDQEBBQUVYQUFWSlNHbG9iYWxEYXRhQDJASVZKU1Zh
bHVlQDJAQFoKICAgICA/Y29udmVydExhdGluMVRvVVRGOEBVbmljb2RlQFdURkBAWUE/QVc0Q29u
dmVyc2lvblJlc3VsdEAxMkBQQVBCRVBCRVBBUEFEUEFEQFoKICAgICA/Y29udmVydFVURjE2VG9V
VEY4QFVuaWNvZGVAV1RGQEBZQT9BVzRDb252ZXJzaW9uUmVzdWx0QDEyQFBBUEJfV1BCX1dQQVBB
RFBBRF9OQFoKICAgICA/Y29udmVydFVURjhUb1VURjE2QFVuaWNvZGVAV1RGQEBZQT9BVzRDb252
ZXJzaW9uUmVzdWx0QDEyQFBBUEJEUEJEUEFQQV9XUEFfV1BBX05fTkBaCiAgICAgP2NvcHlCYWNr
aW5nU3RvcmVASlNPYmplY3RASlNDQEBTQVhQQVZKU0NlbGxAMkBBQVZDb3B5VmlzaXRvckAyQEBa
CiAgICAgP2NyZWF0ZUBKU0Z1bmN0aW9uQEpTQ0BAU0FQQVYxMkBQQVZFeGVjU3RhdGVAMkBQQVZK
U0dsb2JhbE9iamVjdEAyQEhBQlZTdHJpbmdAV1RGQEBQNklfSjBAWlc0SW50cmluc2ljQDJAM0Ba
Ci0gICAgP2NyZWF0ZUBKU0dsb2JhbERhdGFASlNDQEBTQT9BVj8kUGFzc1JlZlB0ckBWSlNHbG9i
YWxEYXRhQEpTQ0BAQFdURkBAVzRIZWFwVHlwZUAyQEBaCiAgICAgP2NyZWF0ZUBPcGFxdWVKU1N0
cmluZ0BAU0E/QVY/JFBhc3NSZWZQdHJAVU9wYXF1ZUpTU3RyaW5nQEBAV1RGQEBBQlZTdHJpbmdA
M0BAWgotICAgID9jcmVhdGVAUmVnRXhwQEpTQ0BAU0FQQVYxMkBBQVZKU0dsb2JhbERhdGFAMkBB
QlZTdHJpbmdAV1RGQEBXNFJlZ0V4cEZsYWdzQDJAQFoKICAgICA/Y3JlYXRlQFN0cmluZ0ltcGxA
V1RGQEBTQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAyQFBCX1dJQFoKICAgICA/
Y3JlYXRlQFN0cmluZ0ltcGxAV1RGQEBTQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZA
QEAyQFBCRUBaCiAgICAgP2NyZWF0ZUBTdHJpbmdJbXBsQFdURkBAU0E/QVY/JFBhc3NSZWZQdHJA
VlN0cmluZ0ltcGxAV1RGQEBAMkBQQkVJQFoKICAgICA/Y3JlYXRlOEJpdElmUG9zc2libGVAU3Ry
aW5nSW1wbEBXVEZAQFNBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQDJAUEJfV0lA
WgotICAgID9jcmVhdGVFbXB0eVN0cmluZ0BTbWFsbFN0cmluZ3NASlNDQEBBQUVYUEFWSlNHbG9i
YWxEYXRhQDJAQFoKICAgICA/Y3JlYXRlRXJyb3JASlNDQEBZQVBBVkpTT2JqZWN0QDFAUEFWRXhl
Y1N0YXRlQDFAQUJWU3RyaW5nQFdURkBAQFoKLSAgICA/Y3JlYXRlTGVha2VkQEpTR2xvYmFsRGF0
YUBKU0NAQFNBP0FWPyRQYXNzUmVmUHRyQFZKU0dsb2JhbERhdGFASlNDQEBAV1RGQEBXNEhlYXBU
eXBlQDJAQFoKICAgICA/Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3JASlNDQEBZQVBBVkpT
T2JqZWN0QDFAUEFWRXhlY1N0YXRlQDFAQFoKICAgICA/Y3JlYXRlUmFuZ2VFcnJvckBKU0NAQFlB
UEFWSlNPYmplY3RAMUBQQVZFeGVjU3RhdGVAMUBBQlZTdHJpbmdAV1RGQEBAWgogICAgID9jcmVh
dGVSZWZlcmVuY2VFcnJvckBKU0NAQFlBUEFWSlNPYmplY3RAMUBQQVZFeGVjU3RhdGVAMUBBQlZT
dHJpbmdAV1RGQEBAWgotICAgID9jcmVhdGVTaW5nbGVDaGFyYWN0ZXJTdHJpbmdAU21hbGxTdHJp
bmdzQEpTQ0BAQUFFWFBBVkpTR2xvYmFsRGF0YUAyQEVAWgogICAgID9jcmVhdGVTdGFja092ZXJm
bG93RXJyb3JASlNDQEBZQVBBVkpTT2JqZWN0QDFAUEFWRXhlY1N0YXRlQDFAQFoKICAgICA/Y3Jl
YXRlU3ludGF4RXJyb3JASlNDQEBZQVBBVkpTT2JqZWN0QDFAUEFWRXhlY1N0YXRlQDFAQUJWU3Ry
aW5nQFdURkBAQFoKLSAgICA/Y3JlYXRlVGFibGVASGFzaFRhYmxlQEpTQ0BAQUJFWFBBVkpTR2xv
YmFsRGF0YUAyQEBaCiAgICAgP2NyZWF0ZVRocmVhZEBXVEZAQFlBSVA2QVBBWFBBWEBaMEBaCiAg
ICAgP2NyZWF0ZVRocmVhZEBXVEZAQFlBSVA2QVBBWFBBWEBaMFBCREBaCiAgICAgP2NyZWF0ZVRo
cmVhZEBXVEZAQFlBSVA2QVhQQVhAWjBQQkRAWgpAQCAtMjIzLDIwICsxOTgsMTYgQEAgRVhQT1JU
UwogICAgID9kZWxldGVQcm9wZXJ0eUJ5SW5kZXhASlNPYmplY3RASlNDQEBTQV9OUEFWSlNDZWxs
QDJAUEFWRXhlY1N0YXRlQDJASUBaCiAgICAgP2RlbGV0ZVByb3BlcnR5QnlJbmRleEBKU1Byb3h5
QEpTQ0BAS0FfTlBBVkpTQ2VsbEAyQFBBVkV4ZWNTdGF0ZUAyQElAWgogICAgID9kZWxldGVUYWJs
ZUBIYXNoVGFibGVASlNDQEBRQkVYWFoKLSAgICA/ZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0aW9u
QFN0cnVjdHVyZUBKU0NAQFFBRVhBQVZKU0dsb2JhbERhdGFAMkBWUHJvcGVydHlOYW1lQDJAQFoK
LSAgICA/ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uQFN0cnVjdHVyZUBKU0NAQFNBUEFWMTJA
QUFWSlNHbG9iYWxEYXRhQDJAUEFWMTJAVlByb3BlcnR5TmFtZUAyQEBaCiAgICAgP2Rlc3Ryb3lA
SlNDZWxsQEpTQ0BAS0FYUEFWMTJAQFoKICAgICA/ZGVzdHJveUBKU0dsb2JhbE9iamVjdEBKU0NA
QFNBWFBBVkpTQ2VsbEAyQEBaCiAgICAgP2Rlc3Ryb3lAT3V0T2ZMaW5lQml0c0BCaXRWZWN0b3JA
V1RGQEBTQVhQQVYxMjNAQFoKICAgICA/ZGV0YWNoQERlYnVnZ2VyQEpTQ0BAVUFFWFBBVkpTR2xv
YmFsT2JqZWN0QDJAQFoKICAgICA/ZGV0YWNoVGhyZWFkQFdURkBAWUFYSUBaCi0gICAgP2Rpc2Nh
cmRBbGxDb2RlQEpTR2xvYmFsRGF0YUBKU0NAQFFBRVhYWgogICAgID9kaXNwbGF5TmFtZUBKU0Z1
bmN0aW9uQEpTQ0BAUUFFP0FWU3RyaW5nQFdURkBAUEFWRXhlY1N0YXRlQDJAQFoKICAgICA/ZHRv
YUBXVEZAQFlBWFFBRE5BQV9OQUFIQUFJQFoKICAgICA/ZHVtcEBKU1ZhbHVlQEpTQ0BAUUJFWEFB
VlByaW50U3RyZWFtQFdURkBAQFoKICAgICA/ZHVtcEFsbE9wdGlvbnNAT3B0aW9uc0BKU0NAQFNB
WFBBVV9pb2J1ZkBAQFoKICAgICA/ZHVtcENhbGxGcmFtZUBJbnRlcnByZXRlckBKU0NAQFFBRVhQ
QVZFeGVjU3RhdGVAMkBAWgotICAgID9kdW1wU2FtcGxlRGF0YUBKU0dsb2JhbERhdGFASlNDQEBR
QUVYUEFWRXhlY1N0YXRlQDJAQFoKICAgICA/RWNtYVNjcmlwdENvbnZlcnRlckBEb3VibGVUb1N0
cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFNBQUJWMTIzQFhaCiAgICAgP2Vt
cHR5QFN0cmluZ0ltcGxAV1RGQEBTQVBBVjEyQFhaCiAgICAgP2VtcHR5T2JqZWN0U3RydWN0dXJl
Rm9yUHJvdG90eXBlQFByb3RvdHlwZU1hcEBKU0NAQFFBRVBBVlN0cnVjdHVyZUAyQFBBVkpTT2Jq
ZWN0QDJASUBaCkBAIC0yODIsMTEgKzI1Myw3IEBAIEVYUE9SVFMKICAgICA/ZmluZEBTdHJpbmdJ
bXBsQFdURkBAUUFFSVBBVjEyQElAWgogICAgID9maW5kSWdub3JpbmdDYXNlQFN0cmluZ0ltcGxA
V1RGQEBRQUVJUEFWMTJASUBaCiAgICAgP2ZpbmRBbGxvY2F0b3JAV2Vha1NldEBKU0NAQEFBRVBB
VUZyZWVDZWxsQFdlYWtCbG9ja0AyQFhaCi0gICAgP2ZpbmlzaENyZWF0aW9uQEJvb2xlYW5PYmpl
Y3RASlNDQEBJQUVYQUFWSlNHbG9iYWxEYXRhQDJAQFoKLSAgICA/ZmluaXNoQ3JlYXRpb25ARGF0
ZUluc3RhbmNlQEpTQ0BASUFFWEFBVkpTR2xvYmFsRGF0YUAyQE5AWgotICAgID9maW5pc2hDcmVh
dGlvbkBJbnRlcm5hbEZ1bmN0aW9uQEpTQ0BASUFFWEFBVkpTR2xvYmFsRGF0YUAyQEFCVlN0cmlu
Z0BXVEZAQEBaCiAgICAgP2ZpbmlzaENyZWF0aW9uQFJlZ0V4cE9iamVjdEBKU0NAQElBRVhQQVZK
U0dsb2JhbE9iamVjdEAyQEBaCi0gICAgP2ZpbmlzaENyZWF0aW9uQFN0cmluZ09iamVjdEBKU0NA
QElBRVhBQVZKU0dsb2JhbERhdGFAMkBQQVZKU1N0cmluZ0AyQEBaCiAgICAgP2ZpcmVAV2F0Y2hk
b2dASlNDQEBRQUVYWFoKICAgICA/Zm9jdXNAUHJvZmlsZUBKU0NAQFFBRVhQQlZQcm9maWxlTm9k
ZUAyQEBaCiAgICAgP2ZvbGRDYXNlQFN0cmluZ0BXVEZAQFFCRT9BVjEyQFhaCkBAIC0yOTksMTQg
KzI2NiwxMiBAQCBFWFBPUlRTCiAgICAgP2Zyb21VVEY4SW50ZXJuYWxAQXRvbWljU3RyaW5nQFdU
RkBAQ0E/QVYxMkBQQkQwQFoKICAgICA/ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2tAU3RyaW5n
QFdURkBAU0E/QVYxMkBQQkVJQFoKICAgICA/ZnVuY3Rpb25HZXR0ZXJAUHJvcGVydHlTbG90QEpT
Q0BAQUJFP0FWSlNWYWx1ZUAyQFBBVkV4ZWNTdGF0ZUAyQEBaCi0gICAgP2dldEBTdHJ1Y3R1cmVA
SlNDQEBRQUVIQUFWSlNHbG9iYWxEYXRhQDJAVlByb3BlcnR5TmFtZUAyQEFBSUFBUEFWSlNDZWxs
QDJAQFoKICAgICA/Z2V0Q2FsY3VsYXRlZERpc3BsYXlOYW1lQEpTQ0BAWUE/QVZTdHJpbmdAV1RG
QEBQQVZFeGVjU3RhdGVAMUBQQVZKU09iamVjdEAxQEBaCiAgICAgP2dldENhbGxhYmxlT2JqZWN0
U2xvd0BKU0NAQFlBUEFWSlNDZWxsQDFAUEFWMjFAQFoKICAgICA/Z2V0Q2FsbERhdGFASlNDZWxs
QEpTQ0BAU0E/QVc0Q2FsbFR5cGVAMkBQQVYxMkBBQVRDYWxsRGF0YUAyQEBaCiAgICAgP2dldENv
bnN0cnVjdERhdGFASlNDZWxsQEpTQ0BAU0E/QVc0Q29uc3RydWN0VHlwZUAyQFBBVjEyQEFBVENv
bnN0cnVjdERhdGFAMkBAWgogICAgID9nZXREYXRhMTZTbG93Q2FzZUBTdHJpbmdJbXBsQFdURkBA
QUJFUEJfV1haCiAgICAgP2dldElEQFNvdXJjZVByb3ZpZGVyQEpTQ0BAQUFFWFhaCi0gICAgP2dl
dFN0YWNrVHJhY2VASW50ZXJwcmV0ZXJASlNDQEBTQVhQQVZKU0dsb2JhbERhdGFAMkBBQVY/JFZl
Y3RvckBVU3RhY2tGcmFtZUBKU0NAQCQwQUBWQ3Jhc2hPbk92ZXJmbG93QFdURkBAQFdURkBASUBa
CiAgICAgP2dldE9iamVjdEBKU0NlbGxASlNDQEBRQUVQQVZKU09iamVjdEAyQFhaCiAgICAgP2dl
dE9iamVjdFR5cGVATWVtb3J5SW5zdHJ1bWVudGF0aW9uQFdURkBAQ0FQQkRQQVZNZW1vcnlPYmpl
Y3RJbmZvQDJAQFoKICAgICA/Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzQEpTT2JqZWN0QEpT
Q0BAU0FYUEFWMTJAUEFWRXhlY1N0YXRlQDJAQUFWUHJvcGVydHlOYW1lQXJyYXlAMkBXNEVudW1l
cmF0aW9uTW9kZUAyQEBaCkBAIC0zMzAsNyArMjk1LDYgQEAgRVhQT1JUUwogICAgID9nbG9iYWxF
eGVjQEpTR2xvYmFsT2JqZWN0QEpTQ0BAUUFFUEFWRXhlY1N0YXRlQDJAWFoKICAgICA/Z2xvYmFs
T2JqZWN0Q291bnRASGVhcEBKU0NAQFFBRUlYWgogICAgID9ncm93QEhhbmRsZVNldEBKU0NAQEFB
RVhYWgotICAgID9ncm93T3V0T2ZMaW5lU3RvcmFnZUBKU09iamVjdEBKU0NAQFFBRVBBVkJ1dHRl
cmZseUAyQEFBVkpTR2xvYmFsRGF0YUAyQElJQFoKICAgICA/aGFzaFNsb3dDYXNlQFN0cmluZ0lt
cGxAV1RGQEBBQkVJWFoKICAgICA/aGFzUHJvcGVydHlASlNPYmplY3RASlNDQEBRQkVfTlBBVkV4
ZWNTdGF0ZUAyQElAWgogICAgID9oYXNQcm9wZXJ0eUBKU09iamVjdEBKU0NAQFFCRV9OUEFWRXhl
Y1N0YXRlQDJAVlByb3BlcnR5TmFtZUAyQEBaCkBAIC0zNjgsOCArMzMyLDYgQEAgRVhQT1JUUwog
ICAgID9sb3dlckBTdHJpbmdJbXBsQFdURkBAUUFFP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBs
QFdURkBAQDJAWFoKICAgICA/bGluZUBTdGFja0ZyYW1lQEpTQ0BAUUFFSVhaCiAgICAgP21ha2U4
Qml0RnJvbTE2Qml0U291cmNlQFN0cmluZ0BXVEZAQFNBP0FWMTJAUEJfV0lAWgotICAgID9tYXRj
aEBSZWdFeHBASlNDQEBRQUVIQUFWSlNHbG9iYWxEYXRhQDJAQUJWU3RyaW5nQFdURkBASUFBVj8k
VmVjdG9yQEgkMENBQFZDcmFzaE9uT3ZlcmZsb3dAV1RGQEBANUBAWgotICAgID9tYXRlcmlhbGl6
ZVByb3BlcnR5TWFwQFN0cnVjdHVyZUBKU0NAQEFBRVhBQVZKU0dsb2JhbERhdGFAMkBAWgogICAg
ID9tb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVAV1RGQEBZQU5YWgogICAgID9tb250aEZyb21E
YXlJblllYXJAV1RGQEBZQUhIX05AWgogICAgID9tc1RvWWVhckBXVEZAQFlBSE5AWgpAQCAtNDE4
LDE1ICszODAsMTIgQEAgRVhQT1JUUwogICAgID9wdXREaXJlY3RWaXJ0dWFsQEpTT2JqZWN0QEpT
Q0BAU0FYUEFWMTJAUEFWRXhlY1N0YXRlQDJAVlByb3BlcnR5TmFtZUAyQFZKU1ZhbHVlQDJASUBa
CiAgICAgP3B1dERpcmVjdFZpcnR1YWxASlNQcm94eUBKU0NAQEtBWFBBVkpTT2JqZWN0QDJAUEFW
RXhlY1N0YXRlQDJAVlByb3BlcnR5TmFtZUAyQFZKU1ZhbHVlQDJASUBaCiAgICAgP3JhbmRvbU51
bWJlckBXVEZAQFlBTlhaCi0gICAgP3JlY29tcGlsZUFsbEpTRnVuY3Rpb25zQERlYnVnZ2VyQEpT
Q0BAUUFFWFBBVkpTR2xvYmFsRGF0YUAyQEBaCiAgICAgP3JlZ0V4cEZsYWdzQEpTQ0BAWUE/QVc0
UmVnRXhwRmxhZ3NAMUBBQlZTdHJpbmdAV1RGQEBAWgogICAgID9yZWlmeVN0cmluZ0BTdHJpbmdC
dWlsZGVyQFdURkBAQUJFWFhaCiAgICAgP3JlbGVhc2VEZWNvbW1pdHRlZEBPU0FsbG9jYXRvckBX
VEZAQFNBWFBBWElAWgotICAgID9yZWxlYXNlRXhlY3V0YWJsZU1lbW9yeUBKU0dsb2JhbERhdGFA
SlNDQEBRQUVYWFoKICAgICA/cmVtb3ZlQFN0cmluZ0BXVEZAQFFBRVhJSEBaCiAgICAgP3JlbW92
ZUJsb2NrQE1hcmtlZEFsbG9jYXRvckBKU0NAQFFBRVhQQVZNYXJrZWRCbG9ja0AyQEBaCiAgICAg
P3JlbW92ZUNoYXJhY3RlcnNAU3RyaW5nQFdURkBAUUJFP0FWMTJAUDZBX05fV0BaQFoKLSAgICA/
cmVtb3ZlRGlyZWN0QEpTT2JqZWN0QEpTQ0BAUUFFX05BQVZKU0dsb2JhbERhdGFAMkBWUHJvcGVy
dHlOYW1lQDJAQFoKICAgICA/cmVwbGFjZUBTdHJpbmdJbXBsQFdURkBAUUFFP0FWPyRQYXNzUmVm
UHRyQFZTdHJpbmdJbXBsQFdURkBAQDJAX1cwQFoKICAgICA/cmVwbGFjZUBTdHJpbmdJbXBsQFdU
RkBAUUFFP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQDJAX1dQQVYxMkBAWgogICAg
ID9yZXBsYWNlQFN0cmluZ0ltcGxAV1RGQEBRQUU/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxA
V1RGQEBAMkBfV1BCRUlAWgpAQCAtNDQwLDcgKzM5OSw2IEBAIEVYUE9SVFMKICAgICA/cmVzZXJ2
ZUFuZENvbW1pdEBPU0FsbG9jYXRvckBXVEZAQFNBUEFYSVc0VXNhZ2VAMTJAX04xMUBaCiAgICAg
P3Jlc2VydmVDYXBhY2l0eUBTdHJpbmdCdWlsZGVyQFdURkBAUUFFWElAWgogICAgID9yZXNldEBQ
YXJzZXJBcmVuYUBKU0NAQFFBRVhYWgotICAgID9yZXNldERhdGVDYWNoZUBKU0dsb2JhbERhdGFA
SlNDQEBRQUVYWFoKICAgICA/cmVzaXplQFN0cmluZ0J1aWxkZXJAV1RGQEBRQUVYSUBaCiAgICAg
P3Jlc2l6ZU91dE9mTGluZUBCaXRWZWN0b3JAV1RGQEBBQUVYSUBaCiAgICAgP3Jlc29sdmVSb3Bl
QEpTUm9wZVN0cmluZ0BKU0NAQEFCRVhQQVZFeGVjU3RhdGVAMkBAWgpAQCAtNDU3LDE0ICs0MTUs
MTAgQEAgRVhQT1JUUwogICAgID9zZXRFbnVtZXJhYmxlQFByb3BlcnR5RGVzY3JpcHRvckBKU0NA
QFFBRVhfTkBaCiAgICAgP3NldEdhcmJhZ2VDb2xsZWN0aW9uVGltZXJFbmFibGVkQEhlYXBASlND
QEBRQUVYX05AWgogICAgID9zZXRHZXR0ZXJAUHJvcGVydHlEZXNjcmlwdG9yQEpTQ0BAUUFFWFZK
U1ZhbHVlQDJAQFoKLSAgICA/c2V0R2xvYmFsVGhpc0BKU0dsb2JhbE9iamVjdEBKU0NAQElBRVhB
QVZKU0dsb2JhbERhdGFAMkBQQVZKU09iamVjdEAyQEBaCi0gICAgP3NldEluZGV4UXVpY2tseVRv
VW5kZWNpZGVkQEpTT2JqZWN0QEpTQ0BAQUFFWEFBVkpTR2xvYmFsRGF0YUAyQElWSlNWYWx1ZUAy
QEBaCiAgICAgP3NldE1haW5UaHJlYWRDYWxsYmFja3NQYXVzZWRAV1RGQEBZQVhfTkBaCiAgICAg
P3NldE9wdGlvbkBPcHRpb25zQEpTQ0BAU0FfTlBCREBaCiAgICAgP3NldE9yZGVyTG93ZXJGaXJz
dEBDb2xsYXRvckBXVEZAQFFBRVhfTkBaCi0gICAgP3NldFByb3RvdHlwZUBKU09iamVjdEBKU0NA
QFFBRVhBQVZKU0dsb2JhbERhdGFAMkBWSlNWYWx1ZUAyQEBaCiAgICAgP3NldFNldHRlckBQcm9w
ZXJ0eURlc2NyaXB0b3JASlNDQEBRQUVYVkpTVmFsdWVAMkBAWgotICAgID9zZXRUYXJnZXRASlNQ
cm94eUBKU0NAQElBRVhBQVZKU0dsb2JhbERhdGFAMkBQQVZKU0dsb2JhbE9iamVjdEAyQEBaCiAg
ICAgP3NldHRlckBQcm9wZXJ0eURlc2NyaXB0b3JASlNDQEBRQkU/QVZKU1ZhbHVlQDJAWFoKICAg
ICA/c2V0VG9DdXJyZW50TG9jYWxUaW1lQEdyZWdvcmlhbkRhdGVUaW1lQFdURkBAUUFFWFhaCiAg
ICAgP3NldFVuZGVmaW5lZEBQcm9wZXJ0eURlc2NyaXB0b3JASlNDQEBRQUVYWFoKQEAgLTQ4NSwx
MSArNDM5LDkgQEAgRVhQT1JUUwogICAgID9zcGxpdEBTdHJpbmdAV1RGQEBRQkVYX1dfTkFBVj8k
VmVjdG9yQFZTdHJpbmdAV1RGQEAkMEFAVkNyYXNoT25PdmVyZmxvd0AyQEAyQEBaCiAgICAgP3Nw
bGl0QFN0cmluZ0BXVEZAQFFCRVhBQlYxMkBfTkFBVj8kVmVjdG9yQFZTdHJpbmdAV1RGQEAkMEFA
VkNyYXNoT25PdmVyZmxvd0AyQEAyQEBaCiAgICAgP3N0YXJ0UHJvZmlsaW5nQExlZ2FjeVByb2Zp
bGVyQEpTQ0BAUUFFWFBBVkV4ZWNTdGF0ZUAyQEFCVlN0cmluZ0BXVEZAQEBaCi0gICAgP3N0YXJ0
U2FtcGxpbmdASlNHbG9iYWxEYXRhQEpTQ0BAUUFFWFhaCiAgICAgP3N0YXJ0c1dpdGhAU3RyaW5n
SW1wbEBXVEZAQFFCRV9OX1dAWgogICAgID9zdGFydHNXaXRoQFN0cmluZ0ltcGxAV1RGQEBRQkVf
TlBCRElfTkBaCiAgICAgP3N0b3BQcm9maWxpbmdATGVnYWN5UHJvZmlsZXJASlNDQEBRQUU/QVY/
JFBhc3NSZWZQdHJAVlByb2ZpbGVASlNDQEBAV1RGQEBQQVZFeGVjU3RhdGVAMkBBQlZTdHJpbmdA
NEBAWgotICAgID9zdG9wU2FtcGxpbmdASlNHbG9iYWxEYXRhQEpTQ0BAUUFFWFhaCiAgICAgP3N0
cmluZ0BPcGFxdWVKU1N0cmluZ0BAUUJFP0FWU3RyaW5nQFdURkBAWFoKICAgICA/U3RyaW5nVG9E
b3VibGVAU3RyaW5nVG9Eb3VibGVDb252ZXJ0ZXJAZG91YmxlX2NvbnZlcnNpb25AV1RGQEBTQU5Q
QkRJUEFJQFoKICAgICA/c3RyaXBXaGl0ZVNwYWNlQFN0cmluZ0BXVEZAQFFCRT9BVjEyQFhaCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE0ODY4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMxMyw3ICszMTMsNyBAQAogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0NKU1ZhbHVlLmNwcCIgLz4NCiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTRGF0ZU1hdGguY3BwIiAvPg0KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNGdW5jdGlvbi5jcHAiIC8+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0dsb2JhbERhdGEuY3BwIiAvPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVk0uY3BwIiAvPg0KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNHbG9iYWxPYmplY3QuY3BwIiAvPg0KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIiAvPg0K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNMb2NrLmNwcCIgLz4NCkBAIC02
ODEsNyArNjgxLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNEZXN0
cnVjdGlibGVPYmplY3QuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XEpTRXhwb3J0TWFjcm9zLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxKU0Z1bmN0aW9uLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxK
U0dsb2JhbERhdGEuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFZN
LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0dsb2JhbE9iamVj
dC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNHbG9iYWxPYmpl
Y3RGdW5jdGlvbnMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpT
TG9jay5oIiAvPg0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwko
d29ya2luZyBjb3B5KQpAQCAtNTU1LDcgKzU1NSw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxydW50aW1lXEpTRnVuY3Rpb24uY3BwIj4NCiAgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0Zp
bHRlcj4NCiAgICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxKU0dsb2JhbERhdGEuY3BwIj4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXFZNLmNwcCI+DQogICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQogICAgIDwvQ2xD
b21waWxlPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNHbG9iYWxPYmpl
Y3QuY3BwIj4NCkBAIC0xNTg2LDcgKzE1ODYsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxKU0Z1bmN0aW9uLmgiPg0KICAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVy
Pg0KICAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XEpTR2xvYmFsRGF0YS5oIj4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFZN
LmgiPg0KICAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KICAgICA8L0NsSW5jbHVkZT4N
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2xvYmFsT2JqZWN0LmgiPg0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlRXhwb3J0R2VuZXJhdG9yL0phdmFTY3JpcHRDb3JlRXhwb3J0cy5kZWYuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmVFeHBvcnRHZW5lcmF0b3IvSmF2YVNjcmlwdENvcmVFeHBvcnRzLmRlZi5p
bgkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmVFeHBvcnRHZW5lcmF0b3IvSmF2YVNjcmlwdENvcmVF
eHBvcnRzLmRlZi5pbgkod29ya2luZyBjb3B5KQpAQCAtMSwyMiArMSwxNSBAQAogRVhQT1JUUwog
CiAgICAgPz8wQXJyYXlCdWZmZXJWaWV3QFdURkBASUFFQFY/JFBhc3NSZWZQdHJAVkFycmF5QnVm
ZmVyQFdURkBAQDFASUBaCi0gICAgPz8wQm9vbGVhbk9iamVjdEBKU0NAQElBRUBBQVZKU0dsb2Jh
bERhdGFAMUBQQVZTdHJ1Y3R1cmVAMUBAWgogICAgID8/MENvbGxhdG9yQFdURkBAUUFFQFBCREBa
CiAgICAgPz8wQ1N0cmluZ0BXVEZAQFFBRUBQQkRAWgogICAgID8/MENTdHJpbmdAV1RGQEBRQUVA
UEJESUBaCi0gICAgPz8wRGF0YWJhc2VAUHJvZmlsZXJASlNDQEBRQUVAQUFWSlNHbG9iYWxEYXRh
QDJAQFoKICAgICA/PzBEYXRlSW5zdGFuY2VASlNDQEBJQUVAUEFWRXhlY1N0YXRlQDFAUEFWU3Ry
dWN0dXJlQDFAQFoKICAgICA/PzBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrQEpTQ0BAUUFFQFBB
VkhlYXBAMUBAWgogICAgID8/MERyb3BBbGxMb2Nrc0BKU0xvY2tASlNDQEBRQUVAUEFWRXhlY1N0
YXRlQDJAQFoKLSAgICA/PzBEcm9wQWxsTG9ja3NASlNMb2NrQEpTQ0BAUUFFQFBBVkpTR2xvYmFs
RGF0YUAyQEBaCi0gICAgPz8wRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlQEpTQ0BAUUFFQEFBVkpT
R2xvYmFsRGF0YUAxQFBBVkpTR2xvYmFsT2JqZWN0QDFAQFogCiAgICAgPz8wRXJyb3JIYW5kbGlu
Z01vZGVASW50ZXJwcmV0ZXJASlNDQEBRQUVAUEFWRXhlY1N0YXRlQDJAQFoKICAgICA/PzBJbnRl
cm5hbEZ1bmN0aW9uQEpTQ0BASUFFQFBBVkpTR2xvYmFsT2JqZWN0QDFAUEFWU3RydWN0dXJlQDFA
QFoKLSAgICA/PzBKU0dsb2JhbE9iamVjdEBKU0NAQElBRUBBQVZKU0dsb2JhbERhdGFAMUBQQVZT
dHJ1Y3R1cmVAMUBQQlVHbG9iYWxPYmplY3RNZXRob2RUYWJsZUAxQEBaCi0gICAgPz8wSlNMb2Nr
SG9sZGVyQEpTQ0BAUUFFQEFBVkpTR2xvYmFsRGF0YUAxQEBaCiAgICAgPz8wSlNMb2NrSG9sZGVy
QEpTQ0BAUUFFQFBBVkV4ZWNTdGF0ZUAxQEBaCi0gICAgPz8wSlNMb2NrSG9sZGVyQEpTQ0BAUUFF
QFBBVkpTR2xvYmFsRGF0YUAxQEBaCiAgICAgPz8wTUQ1QFdURkBAUUFFQFhaCiAgICAgPz8wTWVk
aWFUaW1lQFdURkBAUUFFQF9KSElAWiAKICAgICA/PzBNZW1vcnlJbnN0cnVtZW50YXRpb25AV1RG
QEBRQUVAUEFWTWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50QDFAQFoKQEAgLTMzLDIxICsyNiwx
NyBAQCBFWFBPUlRTCiAgICAgPz8wU3RyaW5nQFdURkBAUUFFQFBCRElAWgogICAgID8/MFN0cmlu
Z0BXVEZAQFFBRUBQQkVJQFoKICAgICA/PzBTdHJpbmdAV1RGQEBRQUVAVkFTQ0lJTGl0ZXJhbEAx
QEBaCi0gICAgPz8wU3RyaW5nT2JqZWN0QEpTQ0BASUFFQEFBVkpTR2xvYmFsRGF0YUAxQFBBVlN0
cnVjdHVyZUAxQEBaCiAgICAgPz8wU3RyaW5nUHJpbnRTdHJlYW1AV1RGQEBRQUVAWFoKLSAgICA/
PzBTdHJ1Y3R1cmVASlNDQEBBQUVAQUFWSlNHbG9iYWxEYXRhQDFAUEFWSlNHbG9iYWxPYmplY3RA
MUBWSlNWYWx1ZUAxQEFCVlR5cGVJbmZvQDFAUEJVQ2xhc3NJbmZvQDFARUlAWgogICAgID8/MFRo
cmVhZENvbmRpdGlvbkBXVEZAQFFBRUBYWgogICAgID8/MFdyYXBwZXJCYXNlQE1lbW9yeUluc3Ry
dW1lbnRhdGlvbkBXVEZAQFFBRUBQQkRQQlhAWgogICAgID8/MFdURlRocmVhZERhdGFAV1RGQEBR
QUVAWFoKICAgICA/PzBZYXJyUGF0dGVybkBZYXJyQEpTQ0BAUUFFQEFCVlN0cmluZ0BXVEZAQF9O
MVBBUEJEQFoKICAgICA/PzFBcnJheUJ1ZmZlclZpZXdAV1RGQEBVQUVAWFoKLSAgICA/PzFDbGll
bnREYXRhQEpTR2xvYmFsRGF0YUBKU0NAQFVBRUBYWgogICAgID8/MUNvbGxhdG9yQFdURkBAUUFF
QFhaCiAgICAgPz8xRGF0YWJhc2VAUHJvZmlsZXJASlNDQEBRQUVAWFoKICAgICA/PzFEZWJ1Z2dl
ckBKU0NAQFVBRUBYWgogICAgID8/MURyb3BBbGxMb2Nrc0BKU0xvY2tASlNDQEBRQUVAWFoKICAg
ICA/PzFFcnJvckhhbmRsaW5nTW9kZUBJbnRlcnByZXRlckBKU0NAQFFBRUBYWgotICAgID8/MUpT
R2xvYmFsRGF0YUBKU0NAQFFBRUBYWgogICAgID8/MUpTR2xvYmFsT2JqZWN0QEpTQ0BAUUFFQFha
CiAgICAgPz8xSlNMb2NrSG9sZGVyQEpTQ0BAUUFFQFhaCiAgICAgPz8xTWVkaWFUaW1lQFdURkBA
UUFFQFhaIApAQCAtNzgsNyArNjcsNiBAQCBFWFBPUlRTCiAgICAgP2FkZEBBdG9taWNTdHJpbmdA
V1RGQEBDQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAyQFBCREBaCiAgICAgP2Fk
ZEBBdG9taWNTdHJpbmdAV1RGQEBDQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAy
QFBCRUBaCiAgICAgP2FkZEBBdG9taWNTdHJpbmdAV1RGQEBDQT9BVj8kUGFzc1JlZlB0ckBWU3Ry
aW5nSW1wbEBXVEZAQEAyQFBCRUlAWgotICAgID9hZGRASWRlbnRpZmllckBKU0NAQENBP0FWPyRQ
YXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQFdURkBAUEFWSlNHbG9iYWxEYXRhQDJAUEFWU3Ry
aW5nSW1wbEA0QEBaCiAgICAgP2FkZEBJZGVudGlmaWVyQEpTQ0BAU0E/QVY/JFBhc3NSZWZQdHJA
VlN0cmluZ0ltcGxAV1RGQEBAV1RGQEBQQVZFeGVjU3RhdGVAMkBQQkRAWgogICAgID9hZGRAUHJv
cGVydHlOYW1lQXJyYXlASlNDQEBRQUVYUEFWU3RyaW5nSW1wbEBXVEZAQEBaCiAgICAgP2FkZEJ5
dGVzQE1ENUBXVEZAQFFBRVhQQkVJQFoKQEAgLTg2LDE0ICs3NCwxMSBAQCBFWFBPUlRTCiAgICAg
P2FkZEN1cnJlbnRUaHJlYWRATWFjaGluZVRocmVhZHNASlNDQEBRQUVYWFoKICAgICA/YWRkRmlu
YWxpemVyQEhlYXBASlNDQEBRQUVYUEFWSlNDZWxsQDJAUDZBWDBAWkBaCiAgICAgP2FkZEZyb21M
aXRlcmFsRGF0YUBBdG9taWNTdHJpbmdAV1RGQEBDQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1w
bEBXVEZAQEAyQFBCRElAWgotICAgID9hZGRQcm9wZXJ0eVRyYW5zaXRpb25AU3RydWN0dXJlQEpT
Q0BAU0FQQVYxMkBBQVZKU0dsb2JhbERhdGFAMkBQQVYxMkBWUHJvcGVydHlOYW1lQDJASVBBVkpT
Q2VsbEAyQEFBSEBaCiAgICAgP2FkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1
cmVAU3RydWN0dXJlQEpTQ0BAU0FQQVYxMkBQQVYxMkBWUHJvcGVydHlOYW1lQDJASVBBVkpTQ2Vs
bEAyQEFBSEBaCi0gICAgP2FkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb25AU3RydWN0dXJlQEpT
Q0BAUUFFSEFBVkpTR2xvYmFsRGF0YUAyQFZQcm9wZXJ0eU5hbWVAMkBJUEFWSlNDZWxsQDJAQFoK
ICAgICA/YWRkUHJpdmF0ZUJ1ZmZlckBNZW1vcnlDbGFzc0luZm9AV1RGQEBRQUVYSVBCRDAwQFoK
ICAgICA/YWRkUmF3QnVmZmVyQE1lbW9yeUNsYXNzSW5mb0BXVEZAQFFBRVhQQlhJUEJEMUBaCiAg
ICAgP2FkZFNsb3dDYXNlQEF0b21pY1N0cmluZ0BXVEZAQENBP0FWPyRQYXNzUmVmUHRyQFZTdHJp
bmdJbXBsQFdURkBAQDJAUEFWU3RyaW5nSW1wbEAyQEBaCiAgICAgP2FkZFNsb3dDYXNlQElkZW50
aWZpZXJASlNDQEBDQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEBXVEZAQFBBVkV4
ZWNTdGF0ZUAyQFBBVlN0cmluZ0ltcGxANEBAWgotICAgID9hZGRTbG93Q2FzZUBJZGVudGlmaWVy
QEpTQ0BAQ0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAV1RGQEBQQVZKU0dsb2Jh
bERhdGFAMkBQQVZTdHJpbmdJbXBsQDRAQFoKICAgICA/YWRkU3RhdGljR2xvYmFsc0BKU0dsb2Jh
bE9iamVjdEBKU0NAQElBRVhQQVVHbG9iYWxQcm9wZXJ0eUluZm9AMTJASEBaCiAgICAgP2Fkb3B0
QFN0cmluZ0ltcGxAV1RGQEBTQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAyQEFB
Vj8kU3RyaW5nQnVmZmVyQF9XQDJAQFoKICAgICA/YWRvcHRAU3RyaW5nSW1wbEBXVEZAQFNBP0FW
PyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQDJAQUFWPyRTdHJpbmdCdWZmZXJARUAyQEBa
CkBAIC0xMzIsNyArMTE3LDYgQEAgRVhQT1JUUwogICAgID9jYW5jZWxDYWxsT25NYWluVGhyZWFk
QFdURkBAWUFYUDZBWFBBWEBaMEBaCiAgICAgP2NhblNocmlua0BTdHJpbmdCdWlsZGVyQFdURkBA
UUJFX05YWgogICAgID9jYXBhY2l0eUBIZWFwQEpTQ0BAUUFFSVhaCi0gICAgP2NoYW5nZVByb3Rv
dHlwZVRyYW5zaXRpb25AU3RydWN0dXJlQEpTQ0BAU0FQQVYxMkBBQVZKU0dsb2JhbERhdGFAMkBQ
QVYxMkBWSlNWYWx1ZUAyQEBaCiAgICAgP2NoYXJhY3RlclN0YXJ0aW5nQXRAU3RyaW5nQFdURkBA
UUJFSElAWgogICAgID9jaGFyYWN0ZXJzVG9Eb3VibGVAV1RGQEBZQU5QQl9XSVBBX05AWgogICAg
ID9jaGFyYWN0ZXJzVG9Eb3VibGVAV1RGQEBZQU5QQkVJUEFfTkBaCkBAIC0xNDQsNyArMTI4LDYg
QEAgRVhQT1JUUwogICAgID9jaGFyYWN0ZXJzVG9VSW50U3RyaWN0QFdURkBAWUFJUEJFSVBBX05I
QFoKICAgICA/Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb25AU3RyaW5nQFdURkBAUUFFUEJf
V1haCiAgICAgP2NoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZUBJZGVudGlmaWVyQEpTQ0BAQ0FY
UEFWRXhlY1N0YXRlQDJAQFoKLSAgICA/Y2hlY2tDdXJyZW50SWRlbnRpZmllclRhYmxlQElkZW50
aWZpZXJASlNDQEBDQVhQQVZKU0dsb2JhbERhdGFAMkBAWgogICAgID9jaGVja3N1bUBNRDVAV1RG
QEBRQUVYQUFWPyRWZWN0b3JARSQwQkFAVkNyYXNoT25PdmVyZmxvd0BXVEZAQEAyQEBaCiAgICAg
P2NoZWNrU3ludGF4QEpTQ0BAWUFfTlBBVkV4ZWNTdGF0ZUAxQEFCVlNvdXJjZUNvZGVAMUBQQVZK
U1ZhbHVlQDFAQFoKICAgICA/Y2xhc3NOYW1lQEpTT2JqZWN0QEpTQ0BAU0E/QVZTdHJpbmdAV1RG
QEBQQlYxMkBAWgpAQCAtMTYzLDMwICsxNDYsMjIgQEAgRVhQT1JUUwogICAgID9jb25zdHJ1Y3RO
dW1iZXJASlNDQEBZQVBBVk51bWJlck9iamVjdEAxQFBBVkV4ZWNTdGF0ZUAxQFBBVkpTR2xvYmFs
T2JqZWN0QDFAVkpTVmFsdWVAMUBAWgogICAgID9jb25zdHJ1Y3RTdHJpbmdASlNDQEBZQVBBVlN0
cmluZ09iamVjdEAxQFBBVkV4ZWNTdGF0ZUAxQFBBVkpTR2xvYmFsT2JqZWN0QDFAVkpTVmFsdWVA
MUBAWgogICAgID9jb250YWluc09ubHlXaGl0ZXNwYWNlQFN0cmluZ0ltcGxAV1RGQEBRQUVfTlha
Ci0gICAgP2NvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRleEBK
U09iamVjdEBKU0NAQEFBRVhBQVZKU0dsb2JhbERhdGFAMkBJVkpTVmFsdWVAMkBAWgotICAgID9j
b252ZXJ0SW50MzJUb0RvdWJsZU9yQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4QEpT
T2JqZWN0QEpTQ0BAQUFFWEFBVkpTR2xvYmFsRGF0YUAyQElWSlNWYWx1ZUAyQEBaCiAgICAgP2Nv
bnZlcnRMYXRpbjFUb1VURjhAVW5pY29kZUBXVEZAQFlBP0FXNENvbnZlcnNpb25SZXN1bHRAMTJA
UEFQQkVQQkVQQVBBRFBBREBaCiAgICAgP2NvbnZlcnRVVEYxNlRvVVRGOEBVbmljb2RlQFdURkBA
WUE/QVc0Q29udmVyc2lvblJlc3VsdEAxMkBQQVBCX1dQQl9XUEFQQURQQURfTkBaCiAgICAgP2Nv
bnZlcnRVVEY4VG9VVEYxNkBVbmljb2RlQFdURkBAWUE/QVc0Q29udmVyc2lvblJlc3VsdEAxMkBQ
QVBCRFBCRFBBUEFfV1BBX1dQQV9OX05AWgogICAgID9jb3B5QmFja2luZ1N0b3JlQEpTT2JqZWN0
QEpTQ0BAU0FYUEFWSlNDZWxsQDJAQUFWQ29weVZpc2l0b3JAMkBAWgogICAgID9jcmVhdGVASlNG
dW5jdGlvbkBKU0NAQFNBUEFWMTJAUEFWRXhlY1N0YXRlQDJAUEFWSlNHbG9iYWxPYmplY3RAMkBI
QUJWU3RyaW5nQFdURkBAUDZJX0owQFpXNEludHJpbnNpY0AyQDNAWgotICAgID9jcmVhdGVASlNH
bG9iYWxEYXRhQEpTQ0BAU0E/QVY/JFBhc3NSZWZQdHJAVkpTR2xvYmFsRGF0YUBKU0NAQEBXVEZA
QFc0SGVhcFR5cGVAMkBAWgogICAgID9jcmVhdGVAT3BhcXVlSlNTdHJpbmdAQFNBP0FWPyRQYXNz
UmVmUHRyQFVPcGFxdWVKU1N0cmluZ0BAQFdURkBAQUJWU3RyaW5nQDNAQFoKLSAgICA/Y3JlYXRl
QFJlZ0V4cEBKU0NAQFNBUEFWMTJAQUFWSlNHbG9iYWxEYXRhQDJAQUJWU3RyaW5nQFdURkBAVzRS
ZWdFeHBGbGFnc0AyQEBaCiAgICAgP2NyZWF0ZUBTdHJpbmdJbXBsQFdURkBAU0E/QVY/JFBhc3NS
ZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBQQl9XSUBaCiAgICAgP2NyZWF0ZUBTdHJpbmdJbXBs
QFdURkBAU0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxAV1RGQEBAMkBQQkVAWgogICAgID9j
cmVhdGVAU3RyaW5nSW1wbEBXVEZAQFNBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBA
QDJAUEJFSUBaCiAgICAgP2NyZWF0ZThCaXRJZlBvc3NpYmxlQFN0cmluZ0ltcGxAV1RGQEBTQT9B
Vj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAyQFBCX1dJQFoKLSAgICA/Y3JlYXRlRW1w
dHlTdHJpbmdAU21hbGxTdHJpbmdzQEpTQ0BAQUFFWFBBVkpTR2xvYmFsRGF0YUAyQEBaCiAgICAg
P2NyZWF0ZUVycm9yQEpTQ0BAWUFQQVZKU09iamVjdEAxQFBBVkV4ZWNTdGF0ZUAxQEFCVlN0cmlu
Z0BXVEZAQEBaCi0gICAgP2NyZWF0ZUxlYWtlZEBKU0dsb2JhbERhdGFASlNDQEBTQT9BVj8kUGFz
c1JlZlB0ckBWSlNHbG9iYWxEYXRhQEpTQ0BAQFdURkBAVzRIZWFwVHlwZUAyQEBaCiAgICAgP2Ny
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yQEpTQ0BAWUFQQVZKU09iamVjdEAxQFBBVkV4ZWNT
dGF0ZUAxQEBaCiAgICAgP2NyZWF0ZVJhbmdlRXJyb3JASlNDQEBZQVBBVkpTT2JqZWN0QDFAUEFW
RXhlY1N0YXRlQDFAQUJWU3RyaW5nQFdURkBAQFoKICAgICA/Y3JlYXRlUmVmZXJlbmNlRXJyb3JA
SlNDQEBZQVBBVkpTT2JqZWN0QDFAUEFWRXhlY1N0YXRlQDFAQUJWU3RyaW5nQFdURkBAQFoKLSAg
ICA/Y3JlYXRlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nQFNtYWxsU3RyaW5nc0BKU0NAQEFBRVhQQVZK
U0dsb2JhbERhdGFAMkBFQFoKICAgICA/Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yQEpTQ0BAWUFQ
QVZKU09iamVjdEAxQFBBVkV4ZWNTdGF0ZUAxQEBaCiAgICAgP2NyZWF0ZVN5bnRheEVycm9yQEpT
Q0BAWUFQQVZKU09iamVjdEAxQFBBVkV4ZWNTdGF0ZUAxQEFCVlN0cmluZ0BXVEZAQEBaCi0gICAg
P2NyZWF0ZVRhYmxlQEhhc2hUYWJsZUBKU0NAQEFCRVhQQVZKU0dsb2JhbERhdGFAMkBAWgogICAg
ID9jcmVhdGVUaHJlYWRAV1RGQEBZQUlQNkFQQVhQQVhAWjBAWgogICAgID9jcmVhdGVUaHJlYWRA
V1RGQEBZQUlQNkFQQVhQQVhAWjBQQkRAWgogICAgID9jcmVhdGVUaHJlYWRAV1RGQEBZQUlQNkFY
UEFYQFowUEJEQFoKQEAgLTIyMywyMCArMTk4LDE2IEBAIEVYUE9SVFMKICAgICA/ZGVsZXRlUHJv
cGVydHlCeUluZGV4QEpTT2JqZWN0QEpTQ0BAU0FfTlBBVkpTQ2VsbEAyQFBBVkV4ZWNTdGF0ZUAy
QElAWgogICAgID9kZWxldGVQcm9wZXJ0eUJ5SW5kZXhASlNQcm94eUBKU0NAQEtBX05QQVZKU0Nl
bGxAMkBQQVZFeGVjU3RhdGVAMkBJQFoKICAgICA/ZGVsZXRlVGFibGVASGFzaFRhYmxlQEpTQ0BA
UUJFWFhaCi0gICAgP2Rlc3BlY2lmeURpY3Rpb25hcnlGdW5jdGlvbkBTdHJ1Y3R1cmVASlNDQEBR
QUVYQUFWSlNHbG9iYWxEYXRhQDJAVlByb3BlcnR5TmFtZUAyQEBaCi0gICAgP2Rlc3BlY2lmeUZ1
bmN0aW9uVHJhbnNpdGlvbkBTdHJ1Y3R1cmVASlNDQEBTQVBBVjEyQEFBVkpTR2xvYmFsRGF0YUAy
QFBBVjEyQFZQcm9wZXJ0eU5hbWVAMkBAWgogICAgID9kZXN0cm95QEpTQ2VsbEBKU0NAQEtBWFBB
VjEyQEBaCiAgICAgP2Rlc3Ryb3lASlNHbG9iYWxPYmplY3RASlNDQEBTQVhQQVZKU0NlbGxAMkBA
WgogICAgID9kZXN0cm95QE91dE9mTGluZUJpdHNAQml0VmVjdG9yQFdURkBAU0FYUEFWMTIzQEBa
CiAgICAgP2RldGFjaEBEZWJ1Z2dlckBKU0NAQFVBRVhQQVZKU0dsb2JhbE9iamVjdEAyQEBaCiAg
ICAgP2RldGFjaFRocmVhZEBXVEZAQFlBWElAWgotICAgID9kaXNjYXJkQWxsQ29kZUBKU0dsb2Jh
bERhdGFASlNDQEBRQUVYWFoKICAgICA/ZGlzcGxheU5hbWVASlNGdW5jdGlvbkBKU0NAQFFBRT9B
VlN0cmluZ0BXVEZAQFBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP2R0b2FAV1RGQEBZQVhRQUROQUFf
TkFBSEFBSUBaCiAgICAgP2R1bXBASlNWYWx1ZUBKU0NAQFFCRVhBQVZQcmludFN0cmVhbUBXVEZA
QEBaCiAgICAgP2R1bXBBbGxPcHRpb25zQE9wdGlvbnNASlNDQEBTQVhQQVVfaW9idWZAQEBaCiAg
ICAgP2R1bXBDYWxsRnJhbWVASW50ZXJwcmV0ZXJASlNDQEBRQUVYUEFWRXhlY1N0YXRlQDJAQFoK
LSAgICA/ZHVtcFNhbXBsZURhdGFASlNHbG9iYWxEYXRhQEpTQ0BAUUFFWFBBVkV4ZWNTdGF0ZUAy
QEBaCiAgICAgP0VjbWFTY3JpcHRDb252ZXJ0ZXJARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJAZG91
YmxlX2NvbnZlcnNpb25AV1RGQEBTQUFCVjEyM0BYWgogICAgID9lbXB0eUBTdHJpbmdJbXBsQFdU
RkBAU0FQQVYxMkBYWgogICAgID9lbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZUBQcm90
b3R5cGVNYXBASlNDQEBRQUVQQVZTdHJ1Y3R1cmVAMkBQQVZKU09iamVjdEAyQElAWgpAQCAtMjgy
LDExICsyNTMsNyBAQCBFWFBPUlRTCiAgICAgP2ZpbmRAU3RyaW5nSW1wbEBXVEZAQFFBRUlQQVYx
MkBJQFoKICAgICA/ZmluZElnbm9yaW5nQ2FzZUBTdHJpbmdJbXBsQFdURkBAUUFFSVBBVjEyQElA
WgogICAgID9maW5kQWxsb2NhdG9yQFdlYWtTZXRASlNDQEBBQUVQQVVGcmVlQ2VsbEBXZWFrQmxv
Y2tAMkBYWgotICAgID9maW5pc2hDcmVhdGlvbkBCb29sZWFuT2JqZWN0QEpTQ0BASUFFWEFBVkpT
R2xvYmFsRGF0YUAyQEBaCi0gICAgP2ZpbmlzaENyZWF0aW9uQERhdGVJbnN0YW5jZUBKU0NAQElB
RVhBQVZKU0dsb2JhbERhdGFAMkBOQFoKLSAgICA/ZmluaXNoQ3JlYXRpb25ASW50ZXJuYWxGdW5j
dGlvbkBKU0NAQElBRVhBQVZKU0dsb2JhbERhdGFAMkBBQlZTdHJpbmdAV1RGQEBAWgogICAgID9m
aW5pc2hDcmVhdGlvbkBSZWdFeHBPYmplY3RASlNDQEBJQUVYUEFWSlNHbG9iYWxPYmplY3RAMkBA
WgotICAgID9maW5pc2hDcmVhdGlvbkBTdHJpbmdPYmplY3RASlNDQEBJQUVYQUFWSlNHbG9iYWxE
YXRhQDJAUEFWSlNTdHJpbmdAMkBAWgogICAgID9maXJlQFdhdGNoZG9nQEpTQ0BAUUFFWFhaCiAg
ICAgP2ZvY3VzQFByb2ZpbGVASlNDQEBRQUVYUEJWUHJvZmlsZU5vZGVAMkBAWgogICAgID9mb2xk
Q2FzZUBTdHJpbmdAV1RGQEBRQkU/QVYxMkBYWgpAQCAtMjk5LDE0ICsyNjYsMTIgQEAgRVhQT1JU
UwogICAgID9mcm9tVVRGOEludGVybmFsQEF0b21pY1N0cmluZ0BXVEZAQENBP0FWMTJAUEJEMEBa
CiAgICAgP2Zyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrQFN0cmluZ0BXVEZAQFNBP0FWMTJAUEJF
SUBaCiAgICAgP2Z1bmN0aW9uR2V0dGVyQFByb3BlcnR5U2xvdEBKU0NAQEFCRT9BVkpTVmFsdWVA
MkBQQVZFeGVjU3RhdGVAMkBAWgotICAgID9nZXRAU3RydWN0dXJlQEpTQ0BAUUFFSEFBVkpTR2xv
YmFsRGF0YUAyQFZQcm9wZXJ0eU5hbWVAMkBBQUlBQVBBVkpTQ2VsbEAyQEBaCiAgICAgP2dldENh
bGN1bGF0ZWREaXNwbGF5TmFtZUBKU0NAQFlBP0FWU3RyaW5nQFdURkBAUEFWRXhlY1N0YXRlQDFA
UEFWSlNPYmplY3RAMUBAWgogICAgID9nZXRDYWxsYWJsZU9iamVjdFNsb3dASlNDQEBZQVBBVkpT
Q2VsbEAxQFBBVjIxQEBaCiAgICAgP2dldENhbGxEYXRhQEpTQ2VsbEBKU0NAQFNBP0FXNENhbGxU
eXBlQDJAUEFWMTJAQUFUQ2FsbERhdGFAMkBAWgogICAgID9nZXRDb25zdHJ1Y3REYXRhQEpTQ2Vs
bEBKU0NAQFNBP0FXNENvbnN0cnVjdFR5cGVAMkBQQVYxMkBBQVRDb25zdHJ1Y3REYXRhQDJAQFoK
ICAgICA/Z2V0RGF0YTE2U2xvd0Nhc2VAU3RyaW5nSW1wbEBXVEZAQEFCRVBCX1dYWgogICAgID9n
ZXRJREBTb3VyY2VQcm92aWRlckBKU0NAQEFBRVhYWgotICAgID9nZXRTdGFja1RyYWNlQEludGVy
cHJldGVyQEpTQ0BAU0FYUEFWSlNHbG9iYWxEYXRhQDJAQUFWPyRWZWN0b3JAVVN0YWNrRnJhbWVA
SlNDQEAkMEFAVkNyYXNoT25PdmVyZmxvd0BXVEZAQEBXVEZAQElAWgogICAgID9nZXRPYmplY3RA
SlNDZWxsQEpTQ0BAUUFFUEFWSlNPYmplY3RAMkBYWgogICAgID9nZXRPYmplY3RUeXBlQE1lbW9y
eUluc3RydW1lbnRhdGlvbkBXVEZAQENBUEJEUEFWTWVtb3J5T2JqZWN0SW5mb0AyQEBaCiAgICAg
P2dldE93bk5vbkluZGV4UHJvcGVydHlOYW1lc0BKU09iamVjdEBKU0NAQFNBWFBBVjEyQFBBVkV4
ZWNTdGF0ZUAyQEFBVlByb3BlcnR5TmFtZUFycmF5QDJAVzRFbnVtZXJhdGlvbk1vZGVAMkBAWgpA
QCAtMzMwLDcgKzI5NSw2IEBAIEVYUE9SVFMKICAgICA/Z2xvYmFsRXhlY0BKU0dsb2JhbE9iamVj
dEBKU0NAQFFBRVBBVkV4ZWNTdGF0ZUAyQFhaCiAgICAgP2dsb2JhbE9iamVjdENvdW50QEhlYXBA
SlNDQEBRQUVJWFoKICAgICA/Z3Jvd0BIYW5kbGVTZXRASlNDQEBBQUVYWFoKLSAgICA/Z3Jvd091
dE9mTGluZVN0b3JhZ2VASlNPYmplY3RASlNDQEBRQUVQQVZCdXR0ZXJmbHlAMkBBQVZKU0dsb2Jh
bERhdGFAMkBJSUBaCiAgICAgP2hhc2hTbG93Q2FzZUBTdHJpbmdJbXBsQFdURkBAQUJFSVhaCiAg
ICAgP2hhc1Byb3BlcnR5QEpTT2JqZWN0QEpTQ0BAUUJFX05QQVZFeGVjU3RhdGVAMkBJQFoKICAg
ICA/aGFzUHJvcGVydHlASlNPYmplY3RASlNDQEBRQkVfTlBBVkV4ZWNTdGF0ZUAyQFZQcm9wZXJ0
eU5hbWVAMkBAWgpAQCAtMzY4LDggKzMzMiw2IEBAIEVYUE9SVFMKICAgICA/bG93ZXJAU3RyaW5n
SW1wbEBXVEZAQFFBRT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAyQFhaCiAgICAg
P2xpbmVAU3RhY2tGcmFtZUBKU0NAQFFBRUlYWgogICAgID9tYWtlOEJpdEZyb20xNkJpdFNvdXJj
ZUBTdHJpbmdAV1RGQEBTQT9BVjEyQFBCX1dJQFoKLSAgICA/bWF0Y2hAUmVnRXhwQEpTQ0BAUUFF
SEFBVkpTR2xvYmFsRGF0YUAyQEFCVlN0cmluZ0BXVEZAQElBQVY/JFZlY3RvckBIJDBDQUBWQ3Jh
c2hPbk92ZXJmbG93QFdURkBAQDVAQFoKLSAgICA/bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcEBTdHJ1
Y3R1cmVASlNDQEBBQUVYQUFWSlNHbG9iYWxEYXRhQDJAQFoKICAgICA/bW9ub3RvbmljYWxseUlu
Y3JlYXNpbmdUaW1lQFdURkBAWUFOWFoKICAgICA/bW9udGhGcm9tRGF5SW5ZZWFyQFdURkBAWUFI
SF9OQFoKICAgICA/bXNUb1llYXJAV1RGQEBZQUhOQFoKQEAgLTQxNywxNSArMzc5LDEyIEBAIEVY
UE9SVFMKICAgICA/cHV0RGlyZWN0VmlydHVhbEBKU09iamVjdEBKU0NAQFNBWFBBVjEyQFBBVkV4
ZWNTdGF0ZUAyQFZQcm9wZXJ0eU5hbWVAMkBWSlNWYWx1ZUAyQElAWgogICAgID9wdXREaXJlY3RW
aXJ0dWFsQEpTUHJveHlASlNDQEBLQVhQQVZKU09iamVjdEAyQFBBVkV4ZWNTdGF0ZUAyQFZQcm9w
ZXJ0eU5hbWVAMkBWSlNWYWx1ZUAyQElAWgogICAgID9yYW5kb21OdW1iZXJAV1RGQEBZQU5YWgot
ICAgID9yZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc0BEZWJ1Z2dlckBKU0NAQFFBRVhQQVZKU0dsb2Jh
bERhdGFAMkBAWgogICAgID9yZWdFeHBGbGFnc0BKU0NAQFlBP0FXNFJlZ0V4cEZsYWdzQDFAQUJW
U3RyaW5nQFdURkBAQFoKICAgICA/cmVpZnlTdHJpbmdAU3RyaW5nQnVpbGRlckBXVEZAQEFCRVhY
WgogICAgID9yZWxlYXNlRGVjb21taXR0ZWRAT1NBbGxvY2F0b3JAV1RGQEBTQVhQQVhJQFoKLSAg
ICA/cmVsZWFzZUV4ZWN1dGFibGVNZW1vcnlASlNHbG9iYWxEYXRhQEpTQ0BAUUFFWFhaCiAgICAg
P3JlbW92ZUBTdHJpbmdAV1RGQEBRQUVYSUhAWgogICAgID9yZW1vdmVCbG9ja0BNYXJrZWRBbGxv
Y2F0b3JASlNDQEBRQUVYUEFWTWFya2VkQmxvY2tAMkBAWgogICAgID9yZW1vdmVDaGFyYWN0ZXJz
QFN0cmluZ0BXVEZAQFFCRT9BVjEyQFA2QV9OX1dAWkBaCi0gICAgP3JlbW92ZURpcmVjdEBKU09i
amVjdEBKU0NAQFFBRV9OQUFWSlNHbG9iYWxEYXRhQDJAVlByb3BlcnR5TmFtZUAyQEBaCiAgICAg
P3JlcGxhY2VAU3RyaW5nSW1wbEBXVEZAQFFBRT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBX
VEZAQEAyQF9XMEBaCiAgICAgP3JlcGxhY2VAU3RyaW5nSW1wbEBXVEZAQFFBRT9BVj8kUGFzc1Jl
ZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEAyQF9XUEFWMTJAQFoKICAgICA/cmVwbGFjZUBTdHJpbmdJ
bXBsQFdURkBAUUFFP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQDJAX1dQQkVJQFoK
QEAgLTQzOSw3ICszOTgsNiBAQCBFWFBPUlRTCiAgICAgP3Jlc2VydmVBbmRDb21taXRAT1NBbGxv
Y2F0b3JAV1RGQEBTQVBBWElXNFVzYWdlQDEyQF9OMTFAWgogICAgID9yZXNlcnZlQ2FwYWNpdHlA
U3RyaW5nQnVpbGRlckBXVEZAQFFBRVhJQFoKICAgICA/cmVzZXRAUGFyc2VyQXJlbmFASlNDQEBR
QUVYWFoKLSAgICA/cmVzZXREYXRlQ2FjaGVASlNHbG9iYWxEYXRhQEpTQ0BAUUFFWFhaCiAgICAg
P3Jlc2l6ZUBTdHJpbmdCdWlsZGVyQFdURkBAUUFFWElAWgogICAgID9yZXNpemVPdXRPZkxpbmVA
Qml0VmVjdG9yQFdURkBAQUFFWElAWgogICAgID9yZXNvbHZlUm9wZUBKU1JvcGVTdHJpbmdASlND
QEBBQkVYUEFWRXhlY1N0YXRlQDJAQFoKQEAgLTQ1NiwxNCArNDE0LDEwIEBAIEVYUE9SVFMKICAg
ICA/c2V0RW51bWVyYWJsZUBQcm9wZXJ0eURlc2NyaXB0b3JASlNDQEBRQUVYX05AWgogICAgID9z
ZXRHYXJiYWdlQ29sbGVjdGlvblRpbWVyRW5hYmxlZEBIZWFwQEpTQ0BAUUFFWF9OQFoKICAgICA/
c2V0R2V0dGVyQFByb3BlcnR5RGVzY3JpcHRvckBKU0NAQFFBRVhWSlNWYWx1ZUAyQEBaCi0gICAg
P3NldEdsb2JhbFRoaXNASlNHbG9iYWxPYmplY3RASlNDQEBJQUVYQUFWSlNHbG9iYWxEYXRhQDJA
UEFWSlNPYmplY3RAMkBAWgotICAgID9zZXRJbmRleFF1aWNrbHlUb1VuZGVjaWRlZEBKU09iamVj
dEBKU0NAQEFBRVhBQVZKU0dsb2JhbERhdGFAMkBJVkpTVmFsdWVAMkBAWgogICAgID9zZXRNYWlu
VGhyZWFkQ2FsbGJhY2tzUGF1c2VkQFdURkBAWUFYX05AWgogICAgID9zZXRPcHRpb25AT3B0aW9u
c0BKU0NAQFNBX05QQkRAWgogICAgID9zZXRPcmRlckxvd2VyRmlyc3RAQ29sbGF0b3JAV1RGQEBR
QUVYX05AWgotICAgID9zZXRQcm90b3R5cGVASlNPYmplY3RASlNDQEBRQUVYQUFWSlNHbG9iYWxE
YXRhQDJAVkpTVmFsdWVAMkBAWgogICAgID9zZXRTZXR0ZXJAUHJvcGVydHlEZXNjcmlwdG9yQEpT
Q0BAUUFFWFZKU1ZhbHVlQDJAQFoKLSAgICA/c2V0VGFyZ2V0QEpTUHJveHlASlNDQEBJQUVYQUFW
SlNHbG9iYWxEYXRhQDJAUEFWSlNHbG9iYWxPYmplY3RAMkBAWgogICAgID9zZXR0ZXJAUHJvcGVy
dHlEZXNjcmlwdG9yQEpTQ0BAUUJFP0FWSlNWYWx1ZUAyQFhaCiAgICAgP3NldFRvQ3VycmVudExv
Y2FsVGltZUBHcmVnb3JpYW5EYXRlVGltZUBXVEZAQFFBRVhYWgogICAgID9zZXRVbmRlZmluZWRA
UHJvcGVydHlEZXNjcmlwdG9yQEpTQ0BAUUFFWFhaCkBAIC00ODQsMTEgKzQzOCw5IEBAIEVYUE9S
VFMKICAgICA/c3BsaXRAU3RyaW5nQFdURkBAUUJFWF9XX05BQVY/JFZlY3RvckBWU3RyaW5nQFdU
RkBAJDBBQFZDcmFzaE9uT3ZlcmZsb3dAMkBAMkBAWgogICAgID9zcGxpdEBTdHJpbmdAV1RGQEBR
QkVYQUJWMTJAX05BQVY/JFZlY3RvckBWU3RyaW5nQFdURkBAJDBBQFZDcmFzaE9uT3ZlcmZsb3dA
MkBAMkBAWgogICAgID9zdGFydFByb2ZpbGluZ0BMZWdhY3lQcm9maWxlckBKU0NAQFFBRVhQQVZF
eGVjU3RhdGVAMkBBQlZTdHJpbmdAV1RGQEBAWgotICAgID9zdGFydFNhbXBsaW5nQEpTR2xvYmFs
RGF0YUBKU0NAQFFBRVhYWgogICAgID9zdGFydHNXaXRoQFN0cmluZ0ltcGxAV1RGQEBRQkVfTl9X
QFoKICAgICA/c3RhcnRzV2l0aEBTdHJpbmdJbXBsQFdURkBAUUJFX05QQkRJX05AWgogICAgID9z
dG9wUHJvZmlsaW5nQExlZ2FjeVByb2ZpbGVyQEpTQ0BAUUFFP0FWPyRQYXNzUmVmUHRyQFZQcm9m
aWxlQEpTQ0BAQFdURkBAUEFWRXhlY1N0YXRlQDJAQUJWU3RyaW5nQDRAQFoKLSAgICA/c3RvcFNh
bXBsaW5nQEpTR2xvYmFsRGF0YUBKU0NAQFFBRVhYWgogICAgID9zdHJpbmdAT3BhcXVlSlNTdHJp
bmdAQFFCRT9BVlN0cmluZ0BXVEZAQFhaCiAgICAgP1N0cmluZ1RvRG91YmxlQFN0cmluZ1RvRG91
YmxlQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9uQFdURkBAU0FOUEJESVBBSUBaCiAgICAgP3N0
cmlwV2hpdGVTcGFjZUBTdHJpbmdAV1RGQEBRQkU/QVYxMkBYWgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC03NDQsNyArNzQ0LDcgQEAKIAkJQkMxOEM0MUQwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2xh
c3NSZWYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
NDBGQ0UxMEE1MUU0NkIwMDA1RjA2MSAvKiBKU0NsYXNzUmVmLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEM0MUUwRTE2RjVDRDAwQjM0NDYw
IC8qIEpTQ29udGV4dFJlZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTRCRDVBMkEwQTNFOTFGNjAwQkFGNTlDIC8qIEpTQ29udGV4dFJlZi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJQkMxOEM0MUYwRTE2
RjVDRDAwQjM0NDYwIC8qIEpTRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY2OTJBODVGMDI1NTU5N0QwMUZGNjBGNyAvKiBKU0Z1bmN0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQkMx
OEM0MjAwRTE2RjVDRDAwQjM0NDYwIC8qIEpTR2xvYmFsRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4RTNBNTYwREY5Mjc4QzAwRDkwQjM0IC8q
IEpTR2xvYmFsRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCUJDMThDNDIwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBWTS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4RTNBNTYwREY5Mjc4QzAwRDkwQjM0
IC8qIFZNLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQkMxOEM0MjEwRTE2RjVDRDAwQjM0NDYwIC8qIEpTR2xvYmFsT2JqZWN0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEU4OTQzMzBDRDA2MDNGMDAz
NjcxNzkgLyogSlNHbG9iYWxPYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlCQzE4QzQyMzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNMb2NrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUVBNEM5QTA5
MkFGOUUyMDA5M0Q4MDAgLyogSlNMb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEM0MjQwRTE2RjVDRDAwQjM0NDYwIC8qIEpTT2JqZWN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzIyQTM5
OTBFMTZFMTQ4MDBBRjIxQzggLyogSlNPYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODYxLDcgKzg2MSw3IEBACiAJCUUxMjRBOEY3MEU1
NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNEE4RjUwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1
ZUpTU3RyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRTEyNEE4RjgwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjRBOEY2MEU1NTU3
NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5jcHAgKi87IH07CiAJCUUxNzg2MzZEMEQ5QkVF
QzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNzg2MzZDMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJ
bml0aWFsaXplVGhyZWFkaW5nLmNwcCAqLzsgfTsKLQkJRTE4RTNBNTkwREY5Mjc4QzAwRDkwQjM0
IC8qIEpTR2xvYmFsRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogSlNHbG9iYWxEYXRhLmNwcCAq
LzsgfTsKKwkJRTE4RTNBNTkwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOEUzQTU3MERGOTI3OEMwMEQ5MEIz
NCAvKiBWTS5jcHAgKi87IH07CiAJCUU0OURDMTZCMTJFRjI5M0UwMDE4NEExRiAvKiBTb3VyY2VQ
cm92aWRlckNhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0OURDMTU1MTJFRjI3NzIwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmNw
cCAqLzsgfTsKIAkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2Fj
aGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURD
MTUxMTJFRjI3MjIwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5REMxNkQxMkVGMjk1MzAw
MTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE0OTEyRUYyNjFBMDAxODRBMUYgLyogU291
cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMTc3Myw4ICsxNzczLDggQEAKIAkJRTEyNEE4RjYwRTU1NTc3NTAw
MzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE9wYXF1ZUpTU3RyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTE3ODYzM0YwRDlCRUMwMDAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZVRocmVhZGluZy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTc4NjM2QzBEOUJFRUMzMDBENzRFNzUgLyogSW5p
dGlhbGl6ZVRocmVhZGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbml0aWFsaXplVGhyZWFkaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
RTE4RTNBNTYwREY5Mjc4QzAwRDkwQjM0IC8qIEpTR2xvYmFsRGF0YS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRTE4RTNBNTcwREY5Mjc4QzAwRDkwQjM0IC8qIEpTR2xvYmFsRGF0YS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0dsb2JhbERhdGEuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMThFM0E1NjBERjkyNzhDMDBEOTBCMzQgLyogVk0u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk0uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRTE4RTNBNTcwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZNLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTQ5REMxNDkxMkVGMjYxQTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2Fj
aGVJdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZVByb3ZpZGVy
Q2FjaGVJdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0OURDMTUxMTJFRjI3
MjIwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNvdXJjZVByb3ZpZGVyQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTQ5REMxNTUxMkVGMjc3MjAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU291cmNlUHJvdmlkZXJD
YWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDY1LDggKzI0NjUsOCBA
QAogCQkJCUE3QjRBQ0FFMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oICovLAog
CQkJCUY2OTJBODVFMDI1NTU5N0QwMUZGNjBGNyAvKiBKU0Z1bmN0aW9uLmNwcCAqLywKIAkJCQlG
NjkyQTg1RjAyNTU1OTdEMDFGRjYwRjcgLyogSlNGdW5jdGlvbi5oICovLAotCQkJCUUxOEUzQTU3
MERGOTI3OEMwMEQ5MEIzNCAvKiBKU0dsb2JhbERhdGEuY3BwICovLAotCQkJCUUxOEUzQTU2MERG
OTI3OEMwMEQ5MEIzNCAvKiBKU0dsb2JhbERhdGEuaCAqLywKKwkJCQlFMThFM0E1NzBERjkyNzhD
MDBEOTBCMzQgLyogVk0uY3BwICovLAorCQkJCUUxOEUzQTU2MERGOTI3OEMwMEQ5MEIzNCAvKiBW
TS5oICovLAogCQkJCTE0REUwRDY4MEQwMjQzMTQwMEFBQ0NBMiAvKiBKU0dsb2JhbE9iamVjdC5j
cHAgKi8sCiAJCQkJQThFODk0MzMwQ0QwNjAzRjAwMzY3MTc5IC8qIEpTR2xvYmFsT2JqZWN0Lmgg
Ki8sCiAJCQkJQkM3NTZGQzYwRTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rp
b25zLmNwcCAqLywKQEAgLTMxODgsNyArMzE4OCw3IEBACiAJCQkJODZFM0M2MTQxNjdCQUJENzAw
NkQ3NjBBIC8qIEpTRXhwb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0I0QUNBRjE0ODRDOUNF
MDBCMzhBMzYgLyogSlNFeHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFG
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzE4
QzQyMDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNHbG9iYWxEYXRhLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlCQzE4QzQyMDBFMTZGNUNEMDBCMzQ0NjAgLyogVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDIxMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0dsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkM3NTZGQzkwRTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25z
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzZDNTE3NjExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRl
cmZhY2VKSVQuaCBpbiBIZWFkZXJzICovLApAQCAtMzkzMCw3ICszOTMwLDcgQEAKIAkJCQkxNEJE
NUEzMDBBM0U5MUY2MDBCQUY1OUMgLyogSlNDb250ZXh0UmVmLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTk3ODgwMTQwMTQ3MUFEOTIwMDQxQjAxNiAvKiBKU0RhdGVNYXRoLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0MDU2NkQ2MTA3RUMyNzEwMDVEQkM4RCAvKiBKU0Z1bmN0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCUUxOEUzQTU5MERGOTI3OEMwMEQ5MEIzNCAvKiBKU0dsb2JhbERhdGEu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTE4RTNBNTkwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQyMTA3RUMzNzYwMDQyN0E0OCAvKiBKU0dsb2Jh
bE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEU5RDE3QjEwN0VDNDY5MDA0RERBMjEg
LyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4
NzUxMDdFQzEzRTAwMTNFN0IyIC8qIEpTTG9jay5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5jcHAJKHJl
dmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNz
ZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkxLDE0ICszOTEsMTQgQEAgdm9pZCBBUk1B
c3NlbWJsZXI6OmJhc2VJbmRleFRyYW5zZmVyRmxvYQogICAgIGRhdGFUcmFuc2ZlckZsb2F0KHRy
YW5zZmVyVHlwZSwgc3JjRHN0LCBBUk1SZWdpc3RlcnM6OlMxLCBvZmZzZXQpOwogfQogCi1QYXNz
UmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEFSTUFzc2VtYmxlcjo6ZXhlY3V0YWJsZUNv
cHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0KQorUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBBUk1B
c3NlbWJsZXI6OmV4ZWN1dGFibGVDb3B5KFZNJiB2bSwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICAvLyA2NC1iaXQgYWxpZ25tZW50IGlzIHJlcXVp
cmVkIGZvciBuZXh0IGNvbnN0YW50IHBvb2wgYW5kIEpJVCBjb2RlIGFzIHdlbGwKICAgICBtX2J1
ZmZlci5mbHVzaFdpdGhvdXRCYXJyaWVyKHRydWUpOwogICAgIGlmICghbV9idWZmZXIuaXNBbGln
bmVkKDgpKQogICAgICAgICBia3B0KDApOwogCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlI
YW5kbGU+IHJlc3VsdCA9IG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGdsb2JhbERhdGEsIG93bmVy
VUlELCBlZmZvcnQpOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQg
PSBtX2J1ZmZlci5leGVjdXRhYmxlQ29weSh2bSwgb3duZXJVSUQsIGVmZm9ydCk7CiAgICAgY2hh
ciogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdC0+c3RhcnQoKSk7CiAKICAg
ICBmb3IgKEp1bXBzOjpJdGVyYXRvciBpdGVyID0gbV9qdW1wcy5iZWdpbigpOyBpdGVyICE9IG1f
anVtcHMuZW5kKCk7ICsraXRlcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BUk1Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03
NjAsNyArNzYwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gbG9hZEJy
YW5jaFRhcmdldChBUk1SZWdpc3RlcnM6OnBjLCBjYywgdXNlQ29uc3RhbnRQb29sKTsKICAgICAg
ICAgfQogCi0gICAgICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0
YWJsZUNvcHkoSlNHbG9iYWxEYXRhJiwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZm
b3J0KTsKKyAgICAgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRh
YmxlQ29weShWTSYsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAKICAg
ICAgICAgdW5zaWduZWQgZGVidWdPZmZzZXQoKSB7IHJldHVybiBtX2J1ZmZlci5kZWJ1Z09mZnNl
dCgpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVy
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9B
c3NlbWJsZXJCdWZmZXIuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsNyBAQAogCiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkpJ
VENvbXBpbGF0aW9uRWZmb3J0LmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVk
ZSAiVk0uaCIKICNpbmNsdWRlICJzdGRpbnQuaCIKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtMTMwLDEyICsxMzAsMTIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICByZXR1cm4gQXNzZW1ibGVyTGFiZWwobV9pbmRleCk7CiAgICAgICAg
IH0KIAotICAgICAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFi
bGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKKyAgICAgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlPiBleGVjdXRhYmxlQ29weShWTSYgdm0sIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxh
dGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9pbmRleCkK
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICAgICAgUmVmUHRyPEV4ZWN1dGFi
bGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGdsb2JhbERhdGEuZXhlY3V0YWJsZUFsbG9jYXRvci5h
bGxvY2F0ZShnbG9iYWxEYXRhLCBtX2luZGV4LCBvd25lclVJRCwgZWZmb3J0KTsKKyAgICAgICAg
ICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSB2bS5leGVjdXRhYmxl
QWxsb2NhdG9yLmFsbG9jYXRlKHZtLCBtX2luZGV4LCBvd25lclVJRCwgZWZmb3J0KTsKIAogICAg
ICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFu
dFBvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fz
c2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQ
b29sLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NSwxMCArMTk1LDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgcHV0SW50ZWdyYWxVbmNoZWNrZWQodmFsdWUubG93KTsKICAgICB9CiAKLSAgICBQYXNzUmVm
UHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkK
KyAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVDb3B5KFZN
JiB2bSwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICB7
CiAgICAgICAgIGZsdXNoQ29uc3RhbnRQb29sKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIEFzc2Vt
YmxlckJ1ZmZlcjo6ZXhlY3V0YWJsZUNvcHkoZ2xvYmFsRGF0YSwgb3duZXJVSUQsIGVmZm9ydCk7
CisgICAgICAgIHJldHVybiBBc3NlbWJsZXJCdWZmZXI6OmV4ZWN1dGFibGVDb3B5KHZtLCBvd25l
clVJRCwgZWZmb3J0KTsKICAgICB9CiAKICAgICB2b2lkIHB1dFNob3J0V2l0aENvbnN0YW50SW50
KHVpbnQxNl90IGluc24sIHVpbnQzMl90IGNvbnN0YW50LCBib29sIGlzUmV1c2FibGUgPSBmYWxz
ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVy
LmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9MaW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCB2b2lkIExp
bmtCdWZmZXI6OmxpbmtDb2RlKHZvaWQqIG93bmVyVUlECiB7CiAgICAgQVNTRVJUKCFtX2NvZGUp
OwogI2lmICFFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCi0gICAgbV9leGVjdXRhYmxlTWVtb3J5
ID0gbV9hc3NlbWJsZXItPm1fYXNzZW1ibGVyLmV4ZWN1dGFibGVDb3B5KCptX2dsb2JhbERhdGEs
IG93bmVyVUlELCBlZmZvcnQpOworICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG1fYXNzZW1ibGVy
LT5tX2Fzc2VtYmxlci5leGVjdXRhYmxlQ29weSgqbV92bSwgb3duZXJVSUQsIGVmZm9ydCk7CiAg
ICAgaWYgKCFtX2V4ZWN1dGFibGVNZW1vcnkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvZGUg
PSBtX2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCk7CkBAIC03MCw3ICs3MCw3IEBAIHZvaWQgTGlu
a0J1ZmZlcjo6bGlua0NvZGUodm9pZCogb3duZXJVSUQKICAgICBBU1NFUlQobV9jb2RlKTsKICNl
bHNlCiAgICAgbV9pbml0aWFsU2l6ZSA9IG1fYXNzZW1ibGVyLT5tX2Fzc2VtYmxlci5jb2RlU2l6
ZSgpOwotICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG1fZ2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFs
bG9jYXRvci5hbGxvY2F0ZSgqbV9nbG9iYWxEYXRhLCBtX2luaXRpYWxTaXplLCBvd25lclVJRCwg
ZWZmb3J0KTsKKyAgICBtX2V4ZWN1dGFibGVNZW1vcnkgPSBtX3ZtLT5leGVjdXRhYmxlQWxsb2Nh
dG9yLmFsbG9jYXRlKCptX3ZtLCBtX2luaXRpYWxTaXplLCBvd25lclVJRCwgZWZmb3J0KTsKICAg
ICBpZiAoIW1fZXhlY3V0YWJsZU1lbW9yeSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29kZSA9
ICh1aW50OF90KiltX2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gMTQ4NjgzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDcgKzQxLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTR2xv
YmFsRGF0YTsKK2NsYXNzIFZNOwogCiAvLyBMaW5rQnVmZmVyOgogLy8KQEAgLTc2LDE0ICs3Niwx
NCBAQCBjbGFzcyBMaW5rQnVmZmVyIHsKICNlbmRpZgogCiBwdWJsaWM6Ci0gICAgTGlua0J1ZmZl
cihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVyKiBtYXNtLCB2b2lkKiBv
d25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0ID0gSklUQ29tcGlsYXRpb25NdXN0
U3VjY2VlZCkKKyAgICBMaW5rQnVmZmVyKFZNJiB2bSwgTWFjcm9Bc3NlbWJsZXIqIG1hc20sIHZv
aWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQgPSBKSVRDb21waWxhdGlv
bk11c3RTdWNjZWVkKQogICAgICAgICA6IG1fc2l6ZSgwKQogI2lmIEVOQUJMRShCUkFOQ0hfQ09N
UEFDVElPTikKICAgICAgICAgLCBtX2luaXRpYWxTaXplKDApCiAjZW5kaWYKICAgICAgICAgLCBt
X2NvZGUoMCkKICAgICAgICAgLCBtX2Fzc2VtYmxlcihtYXNtKQotICAgICAgICAsIG1fZ2xvYmFs
RGF0YSgmZ2xvYmFsRGF0YSkKKyAgICAgICAgLCBtX3ZtKCZ2bSkKICNpZm5kZWYgTkRFQlVHCiAg
ICAgICAgICwgbV9jb21wbGV0ZWQoZmFsc2UpCiAgICAgICAgICwgbV9lZmZvcnQoZWZmb3J0KQpA
QCAtMjU2LDcgKzI1Niw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB2b2lkKiBtX2NvZGU7CiAg
ICAgTWFjcm9Bc3NlbWJsZXIqIG1fYXNzZW1ibGVyOwotICAgIEpTR2xvYmFsRGF0YSogbV9nbG9i
YWxEYXRhOworICAgIFZNKiBtX3ZtOwogI2lmbmRlZiBOREVCVUcKICAgICBib29sIG1fY29tcGxl
dGVkOwogICAgIEpJVENvbXBpbGF0aW9uRWZmb3J0IG1fZWZmb3J0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NSVBTQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NSVBTQXNzZW1ibGVyLmgJKHJldmlzaW9uIDE0
ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NzYsOSArNjc2LDkgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gbV9idWZmZXIuY29kZVNpemUoKTsKICAgICB9CiAKLSAgICBQYXNzUmVmUHRyPEV4ZWN1dGFi
bGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
dm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKKyAgICBQYXNzUmVm
UHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVDb3B5KFZNJiB2bSwgdm9pZCog
b3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICB7Ci0gICAgICAgIFJl
ZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBtX2J1ZmZlci5leGVjdXRhYmxl
Q29weShnbG9iYWxEYXRhLCBvd25lclVJRCwgZWZmb3J0KTsKKyAgICAgICAgUmVmUHRyPEV4ZWN1
dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KHZtLCBv
d25lclVJRCwgZWZmb3J0KTsKICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICByZXR1
cm4gMDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NINEFz
c2VtYmxlci5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL1NINEFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTc1LDkgKzE1NzUsOSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWFkUENy
ZWxhdGl2ZUFkZHJlc3MoKCppbnN0cnVjdGlvblB0ciAmIDB4ZmYpLCBpbnN0cnVjdGlvblB0cikp
OwogICAgIH0KIAotICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0
YWJsZUNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB2b2lkKiBvd25lclVJRCwgSklUQ29t
cGlsYXRpb25FZmZvcnQgZWZmb3J0KQorICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhh
bmRsZT4gZXhlY3V0YWJsZUNvcHkoVk0mIHZtLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyLmV4ZWN1dGFi
bGVDb3B5KGdsb2JhbERhdGEsIG93bmVyVUlELCBlZmZvcnQpOworICAgICAgICByZXR1cm4gbV9i
dWZmZXIuZXhlY3V0YWJsZUNvcHkodm0sIG93bmVyVUlELCBlZmZvcnQpOwogICAgIH0KIAogICAg
IHN0YXRpYyB2b2lkIGNhY2hlRmx1c2godm9pZCogY29kZSwgc2l6ZV90IHNpemUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlz
aW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1i
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5OTEsOSArMTk5MSw5IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGIubV9vZmZzZXQgLSBhLm1fb2Zmc2V0OwogICAgIH0KICAgICAKLSAgICBQYXNz
UmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9y
dCkKKyAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVDb3B5
KFZNJiB2bSwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2Zvcm1hdHRlci5leGVjdXRhYmxlQ29weShnbG9iYWxEYXRh
LCBvd25lclVJRCwgZWZmb3J0KTsKKyAgICAgICAgcmV0dXJuIG1fZm9ybWF0dGVyLmV4ZWN1dGFi
bGVDb3B5KHZtLCBvd25lclVJRCwgZWZmb3J0KTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBkZWJ1
Z09mZnNldCgpIHsgcmV0dXJuIG1fZm9ybWF0dGVyLmRlYnVnT2Zmc2V0KCk7IH0KQEAgLTIzNDks
OSArMjM0OSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgaXNBbGlnbmVkKGludCBhbGlnbm1l
bnQpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLmlzQWxpZ25lZChhbGlnbm1lbnQpOyB9CiAgICAg
ICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5kYXRhKCk7IH0KIAotICAg
ICAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVDb3B5KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZm
b3J0IGVmZm9ydCkKKyAgICAgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBl
eGVjdXRhYmxlQ29weShWTSYgdm0sIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9y
dCBlZmZvcnQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2J1ZmZlci5leGVjdXRh
YmxlQ29weShnbG9iYWxEYXRhLCBvd25lclVJRCwgZWZmb3J0KTsKKyAgICAgICAgICAgIHJldHVy
biBtX2J1ZmZlci5leGVjdXRhYmxlQ29weSh2bSwgb3duZXJVSUQsIGVmZm9ydCk7CiAgICAgICAg
IH0KIAogICAgICAgICB1bnNpZ25lZCBkZWJ1Z09mZnNldCgpIHsgcmV0dXJuIG1fYnVmZmVyLmRl
YnVnT2Zmc2V0KCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua0luZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DYWxsTGlua0luZm8uY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTkg
KzMzLDE5IEBACiAjaWYgRU5BQkxFKEpJVCkKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIENhbGxM
aW5rSW5mbzo6dW5saW5rKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUmVwYXRjaEJ1ZmZlciYg
cmVwYXRjaEJ1ZmZlcikKK3ZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0mIHZtLCBSZXBhdGNo
QnVmZmVyJiByZXBhdGNoQnVmZmVyKQogewogICAgIEFTU0VSVChpc0xpbmtlZCgpKTsKICAgICAK
ICAgICByZXBhdGNoQnVmZmVyLnJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBh
dGNoKFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGhv
dFBhdGhCZWdpbiksIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihjYWxs
ZWVHUFIpLCAwKTsKICAgICBpZiAoaXNERkcpIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbFJldHVybkxvY2F0aW9uLCAoY2FsbFR5cGUgPT0g
Q29uc3RydWN0ID8gZ2xvYmFsRGF0YS5nZXRDVElTdHViKERGRzo6bGlua0NvbnN0cnVjdFRodW5r
R2VuZXJhdG9yKSA6IGdsb2JhbERhdGEuZ2V0Q1RJU3R1YihERkc6OmxpbmtDYWxsVGh1bmtHZW5l
cmF0b3IpKS5jb2RlKCkpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0dXJu
TG9jYXRpb24sIChjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyB2bS5nZXRDVElTdHViKERGRzo6bGlu
a0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKSA6IHZtLmdldENUSVN0dWIoREZHOjpsaW5rQ2FsbFRo
dW5rR2VuZXJhdG9yKSkuY29kZSgpKTsKICNlbHNlCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAjZW5kaWYKICAgICB9IGVsc2UKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoY2FsbFJldHVybkxvY2F0aW9uLCBjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyBnbG9iYWxE
YXRhLmdldENUSVN0dWIobGlua0NvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpIDogZ2xvYmFsRGF0
YS5nZXRDVElTdHViKGxpbmtDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgICAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhjYWxsUmV0dXJuTG9jYXRpb24sIGNhbGxUeXBlID09IENvbnN0cnVjdCA/
IHZtLmdldENUSVN0dWIobGlua0NvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpIDogdm0uZ2V0Q1RJ
U3R1YihsaW5rQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKICAgICBoYXNTZWVuU2hvdWxkUmVwYXRj
aCA9IGZhbHNlOwogICAgIGNhbGxlZS5jbGVhcigpOwogICAgIHN0dWIuY2xlYXIoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlz
aW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0lu
Zm8uaAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCBzdHJ1Y3QgQ2FsbExpbmtJbmZv
IDogcHVibGljIEJhc2ljUmF3U2VuCiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwogCiAgICAg
Ym9vbCBpc0xpbmtlZCgpIHsgcmV0dXJuIHN0dWIgfHwgY2FsbGVlOyB9Ci0gICAgdm9pZCB1bmxp
bmsoSlNHbG9iYWxEYXRhJiwgUmVwYXRjaEJ1ZmZlciYpOworICAgIHZvaWQgdW5saW5rKFZNJiwg
UmVwYXRjaEJ1ZmZlciYpOwogCiAgICAgYm9vbCBzZWVuT25jZSgpCiAgICAgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE0
ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDIsNyArMzAyLDcgQEAgc3RhdGljIHZvaWQgZHVtcFN0cnVjdHVy
ZShQcmludFN0cmVhbSYgbwogICAgIAogICAgIG91dC5wcmludGYoIiVzID0gJXAiLCBuYW1lLCBz
dHJ1Y3R1cmUpOwogICAgIAotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+
Z2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgaWRlbnQpOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IHN0cnVjdHVyZS0+Z2V0KGV4ZWMtPnZtKCksIGlkZW50KTsKICAgICBpZiAob2Zmc2V0ICE9
IGludmFsaWRPZmZzZXQpCiAgICAgICAgIG91dC5wcmludGYoIiAob2Zmc2V0ID0gJWQpIiwgb2Zm
c2V0KTsKIH0KQEAgLTQ4Niw3ICs0ODYsNyBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRTdHJ1Y3R1
cmUoUHJpbnRTdHJlCiAKIHZvaWQgQ29kZUJsb2NrOjpwcmludFN0cnVjdHVyZXMoUHJpbnRTdHJl
YW0mIG91dCwgY29uc3QgSW5zdHJ1Y3Rpb24qIHZQQykKIHsKLSAgICBJbnRlcnByZXRlciogaW50
ZXJwcmV0ZXIgPSBtX2dsb2JhbERhdGEtPmludGVycHJldGVyOworICAgIEludGVycHJldGVyKiBp
bnRlcnByZXRlciA9IG1fdm0tPmludGVycHJldGVyOwogICAgIHVuc2lnbmVkIGluc3RydWN0aW9u
T2Zmc2V0ID0gdlBDIC0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKIAogICAgIGlmICh2UENbMF0u
dS5vcGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9nZXRfYnlfaWQpKSB7CkBAIC0x
NjA3LDkgKzE2MDcsOSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcs
CiAgICAgLCBtX251bUNhbGxlZVJlZ2lzdGVycyhvdGhlci5tX251bUNhbGxlZVJlZ2lzdGVycykK
ICAgICAsIG1fbnVtVmFycyhvdGhlci5tX251bVZhcnMpCiAgICAgLCBtX2lzQ29uc3RydWN0b3Io
b3RoZXIubV9pc0NvbnN0cnVjdG9yKQotICAgICwgbV91bmxpbmtlZENvZGUoKm90aGVyLm1fZ2xv
YmFsRGF0YSwgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fdW5saW5rZWRD
b2RlLmdldCgpKQotICAgICwgbV9vd25lckV4ZWN1dGFibGUoKm90aGVyLm1fZ2xvYmFsRGF0YSwg
b3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdl
dCgpKQotICAgICwgbV9nbG9iYWxEYXRhKG90aGVyLm1fZ2xvYmFsRGF0YSkKKyAgICAsIG1fdW5s
aW5rZWRDb2RlKCpvdGhlci5tX3ZtLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSwgb3Ro
ZXIubV91bmxpbmtlZENvZGUuZ2V0KCkpCisgICAgLCBtX293bmVyRXhlY3V0YWJsZSgqb3RoZXIu
bV92bSwgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fb3duZXJFeGVjdXRh
YmxlLmdldCgpKQorICAgICwgbV92bShvdGhlci5tX3ZtKQogICAgICwgbV9pbnN0cnVjdGlvbnMo
b3RoZXIubV9pbnN0cnVjdGlvbnMpCiAgICAgLCBtX3RoaXNSZWdpc3RlcihvdGhlci5tX3RoaXNS
ZWdpc3RlcikKICAgICAsIG1fYXJndW1lbnRzUmVnaXN0ZXIob3RoZXIubV9hcmd1bWVudHNSZWdp
c3RlcikKQEAgLTE2NDgsMTQgKzE2NDgsMTQgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29weVBh
cnNlZEJsb2NrVGFnLAogfQogCiBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxl
KiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgYmFzZVNjb3BlRGVwdGgsIFBh
c3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VP
ZmZzZXQsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKLSAgICA6IG1fZ2xvYmFs
T2JqZWN0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1dGFibGUsIGdsb2Jh
bE9iamVjdCkKLSAgICAsIG1faGVhcCgmbV9nbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFw
KQorICAgIDogbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFi
bGUsIGdsb2JhbE9iamVjdCkKKyAgICAsIG1faGVhcCgmbV9nbG9iYWxPYmplY3QtPnZtKCkuaGVh
cCkKICAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5tX251bUNh
bGxlZVJlZ2lzdGVycykKICAgICAsIG1fbnVtVmFycyh1bmxpbmtlZENvZGVCbG9jay0+bV9udW1W
YXJzKQogICAgICwgbV9pc0NvbnN0cnVjdG9yKHVubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVj
dG9yKCkpCi0gICAgLCBtX3VubGlua2VkQ29kZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwg
b3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaykKLSAgICAsIG1fb3duZXJFeGVjdXRh
YmxlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1dGFibGUsIG93bmVyRXhl
Y3V0YWJsZSkKLSAgICAsIG1fZ2xvYmFsRGF0YSh1bmxpbmtlZENvZGVCbG9jay0+Z2xvYmFsRGF0
YSgpKQorICAgICwgbV91bmxpbmtlZENvZGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1
dGFibGUsIHVubGlua2VkQ29kZUJsb2NrKQorICAgICwgbV9vd25lckV4ZWN1dGFibGUoZ2xvYmFs
T2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIG93bmVyRXhlY3V0YWJsZSkKKyAgICAsIG1f
dm0odW5saW5rZWRDb2RlQmxvY2stPnZtKCkpCiAgICAgLCBtX3RoaXNSZWdpc3Rlcih1bmxpbmtl
ZENvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCkpCiAgICAgLCBtX2FyZ3VtZW50c1JlZ2lzdGVyKHVu
bGlua2VkQ29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKQogICAgICwgbV9hY3RpdmF0aW9u
UmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKQpAQCAtMTY2
OSw3ICsxNjY5LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwog
ICAgICwgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoMCkKICAgICAsIG1fcmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXIoMCkKIHsKLSAgICBtX2dsb2JhbERhdGEtPnN0YXJ0ZWRDb21waWxpbmco
dGhpcyk7CisgICAgbV92bS0+c3RhcnRlZENvbXBpbGluZyh0aGlzKTsKIAogICAgIEFTU0VSVCht
X3NvdXJjZSk7CiAgICAgc2V0TnVtUGFyYW1ldGVycyh1bmxpbmtlZENvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpKTsKQEAgLTE2ODAsNyArMTY4MCw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNj
cmlwdEV4ZWN1dGFibGUqIG8KICAgICBzZXRJZGVudGlmaWVycyh1bmxpbmtlZENvZGVCbG9jay0+
aWRlbnRpZmllcnMoKSk7CiAgICAgc2V0Q29uc3RhbnRSZWdpc3RlcnModW5saW5rZWRDb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXJzKCkpOwogICAgIGlmICh1bmxpbmtlZENvZGVCbG9jay0+dXNl
c0dsb2JhbE9iamVjdCgpKQotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3VubGlua2VkQ29k
ZUJsb2NrLT5nbG9iYWxPYmplY3RSZWdpc3RlcigpXS5zZXQoKm1fZ2xvYmFsRGF0YSwgb3duZXJF
eGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3Vu
bGlua2VkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3RSZWdpc3RlcigpXS5zZXQoKm1fdm0sIG93bmVy
RXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0KTsKICAgICBtX2Z1bmN0aW9uRGVjbHMuZ3Jvdyh1bmxp
bmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkpOwogICAgIGZvciAoc2l6ZV90
IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygpLCBpID0g
MDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUq
IHVubGlua2VkRXhlY3V0YWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkRlY2woaSk7
CkBAIC0xNjg5LDggKzE2ODksOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRh
YmxlKiBvCiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gc291cmNlT2Zmc2V0ICsgdW5s
aW5rZWRFeGVjdXRhYmxlLT5zdGFydE9mZnNldCgpOwogICAgICAgICB1bnNpZ25lZCBzb3VyY2VM
ZW5ndGggPSB1bmxpbmtlZEV4ZWN1dGFibGUtPnNvdXJjZUxlbmd0aCgpOwogICAgICAgICBTb3Vy
Y2VDb2RlIGNvZGUobV9zb3VyY2UsIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCArIHNvdXJjZUxl
bmd0aCwgZmlyc3RMaW5lKTsKLSAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxl
ID0gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoKm1fZ2xvYmFsRGF0YSwgY29kZSwgdW5saW5r
ZWRFeGVjdXRhYmxlLCBmaXJzdExpbmUsIGZpcnN0TGluZSArIGxpbmVDb3VudCk7Ci0gICAgICAg
IG1fZnVuY3Rpb25EZWNsc1tpXS5zZXQoKm1fZ2xvYmFsRGF0YSwgb3duZXJFeGVjdXRhYmxlLCBl
eGVjdXRhYmxlKTsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gRnVu
Y3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoKm1fdm0sIGNvZGUsIHVubGlua2VkRXhlY3V0YWJsZSwg
Zmlyc3RMaW5lLCBmaXJzdExpbmUgKyBsaW5lQ291bnQpOworICAgICAgICBtX2Z1bmN0aW9uRGVj
bHNbaV0uc2V0KCptX3ZtLCBvd25lckV4ZWN1dGFibGUsIGV4ZWN1dGFibGUpOwogICAgIH0KIAog
ICAgIG1fZnVuY3Rpb25FeHBycy5ncm93KHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0
aW9uRXhwcnMoKSk7CkBAIC0xNzAxLDggKzE3MDEsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhT
Y3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gc291cmNl
T2Zmc2V0ICsgdW5saW5rZWRFeGVjdXRhYmxlLT5zdGFydE9mZnNldCgpOwogICAgICAgICB1bnNp
Z25lZCBzb3VyY2VMZW5ndGggPSB1bmxpbmtlZEV4ZWN1dGFibGUtPnNvdXJjZUxlbmd0aCgpOwog
ICAgICAgICBTb3VyY2VDb2RlIGNvZGUobV9zb3VyY2UsIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNl
dCArIHNvdXJjZUxlbmd0aCwgZmlyc3RMaW5lKTsKLSAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBleGVjdXRhYmxlID0gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoKm1fZ2xvYmFsRGF0YSwg
Y29kZSwgdW5saW5rZWRFeGVjdXRhYmxlLCBmaXJzdExpbmUsIGZpcnN0TGluZSArIGxpbmVDb3Vu
dCk7Ci0gICAgICAgIG1fZnVuY3Rpb25FeHByc1tpXS5zZXQoKm1fZ2xvYmFsRGF0YSwgb3duZXJF
eGVjdXRhYmxlLCBleGVjdXRhYmxlKTsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVj
dXRhYmxlID0gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoKm1fdm0sIGNvZGUsIHVubGlua2Vk
RXhlY3V0YWJsZSwgZmlyc3RMaW5lLCBmaXJzdExpbmUgKyBsaW5lQ291bnQpOworICAgICAgICBt
X2Z1bmN0aW9uRXhwcnNbaV0uc2V0KCptX3ZtLCBvd25lckV4ZWN1dGFibGUsIGV4ZWN1dGFibGUp
OwogICAgIH0KIAogICAgIGlmICh1bmxpbmtlZENvZGVCbG9jay0+aGFzUmFyZURhdGEoKSkgewpA
QCAtMTc5MSw3ICsxNzkxLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJs
ZSogbwogICAgIFZlY3RvcjxJbnN0cnVjdGlvbiwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IGlu
c3RydWN0aW9ucyhpbnN0cnVjdGlvbkNvdW50KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHVubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7ICkgewogICAgICAgICB1
bnNpZ25lZCBvcExlbmd0aCA9IG9wY29kZUxlbmd0aChwY1tpXS51Lm9wY29kZSk7Ci0gICAgICAg
IGluc3RydWN0aW9uc1tpXSA9IGdsb2JhbERhdGEoKS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZShw
Y1tpXS51Lm9wY29kZSk7CisgICAgICAgIGluc3RydWN0aW9uc1tpXSA9IHZtKCktPmludGVycHJl
dGVyLT5nZXRPcGNvZGUocGNbaV0udS5vcGNvZGUpOwogICAgICAgICBmb3IgKHNpemVfdCBqID0g
MTsgaiA8IG9wTGVuZ3RoOyArK2opIHsKICAgICAgICAgICAgIGlmIChzaXplb2YoaW50MzJfdCkg
IT0gc2l6ZW9mKGludHB0cl90KSkKICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIGpd
LnUucG9pbnRlciA9IDA7CkBAIC0xODkxLDcgKzE4OTEsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICBpbnQgaW5mZXJyZWRJbmxpbmVDYXBh
Y2l0eSA9IHBjW2kgKyBvcExlbmd0aCAtIDJdLnUub3BlcmFuZDsKIAogICAgICAgICAgICAgaW5z
dHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDFdID0gb2JqZWN0QWxsb2NhdGlvblByb2ZpbGU7Ci0g
ICAgICAgICAgICBvYmplY3RBbGxvY2F0aW9uUHJvZmlsZS0+aW5pdGlhbGl6ZSgqZ2xvYmFsRGF0
YSgpLAorICAgICAgICAgICAgb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUtPmluaXRpYWxpemUoKnZt
KCksCiAgICAgICAgICAgICAgICAgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIG1fZ2xvYmFsT2Jq
ZWN0LT5vYmplY3RQcm90b3R5cGUoKSwgaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTk0NiwxMyArMTk0NiwxMyBAQCBDb2RlQmxvY2s6
OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgICAgIGlmIChlbnRyeS5jb3VsZEJlV2F0Y2hlZCgpKSB7Ci0gICAgICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb25zW2kgKyAwXSA9IGdsb2JhbERhdGEoKS0+aW50ZXJwcmV0ZXItPmdldE9w
Y29kZShvcF9pbml0X2dsb2JhbF9jb25zdF9jaGVjayk7CisgICAgICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zW2kgKyAwXSA9IHZtKCktPmludGVycHJldGVyLT5nZXRPcGNvZGUob3BfaW5pdF9nbG9i
YWxfY29uc3RfY2hlY2spOwogICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgMV0gPSAm
Z2xvYmFsT2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpOwogICAgICAgICAgICAg
ICAgIGluc3RydWN0aW9uc1tpICsgM10gPSBlbnRyeS5hZGRyZXNzT2ZJc1dhdGNoZWQoKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zW2kgKyAwXSA9IGdsb2JhbERhdGEoKS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9p
bml0X2dsb2JhbF9jb25zdCk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDBdID0gdm0o
KS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9pbml0X2dsb2JhbF9jb25zdCk7CiAgICAgICAg
ICAgICBpbnN0cnVjdGlvbnNbaSArIDFdID0gJmdsb2JhbE9iamVjdC0+cmVnaXN0ZXJBdChlbnRy
eS5nZXRJbmRleCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xOTgwLDE4
ICsxOTgwLDE4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KIAog
ICAgIGlmIChPcHRpb25zOjpkdW1wR2VuZXJhdGVkQnl0ZWNvZGVzKCkpCiAgICAgICAgIGR1bXBC
eXRlY29kZSgpOwotICAgIG1fZ2xvYmFsRGF0YS0+ZmluaXNoZWRDb21waWxpbmcodGhpcyk7Cisg
ICAgbV92bS0+ZmluaXNoZWRDb21waWxpbmcodGhpcyk7CiB9CiAKIENvZGVCbG9jazo6fkNvZGVC
bG9jaygpCiB7Ci0gICAgaWYgKG1fZ2xvYmFsRGF0YS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKQot
ICAgICAgICBtX2dsb2JhbERhdGEtPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+bm90aWZ5RGVzdHJ1
Y3Rpb24odGhpcyk7CisgICAgaWYgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikKKyAgICAg
ICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5ub3RpZnlEZXN0cnVjdGlvbih0aGlzKTsK
ICAgICAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBSZW1vdmUgbXlzZWxmIGZyb20gdGhl
IHNldCBvZiBERkcgY29kZSBibG9ja3MuIE5vdGUgdGhhdCBJIG1heSBub3QgYmUgaW4gdGhpcyBz
ZXQKICAgICAvLyAoYmVjYXVzZSBJJ20gbm90IGEgREZHIGNvZGUgYmxvY2spLCBpbiB3aGljaCBj
YXNlIHRoaXMgaXMgYSBuby1vcCBhbnl3YXkuCi0gICAgbV9nbG9iYWxEYXRhLT5oZWFwLm1fZGZn
Q29kZUJsb2Nrcy5tX3NldC5yZW1vdmUodGhpcyk7CisgICAgbV92bS0+aGVhcC5tX2RmZ0NvZGVC
bG9ja3MubV9zZXQucmVtb3ZlKHRoaXMpOwogI2VuZGlmCiAgICAgCiAjaWYgRU5BQkxFKFZFUkJP
U0VfVkFMVUVfUFJPRklMRSkKQEAgLTIwMzYsNyArMjAzNiw3IEBAIHZvaWQgQ29kZUJsb2NrOjpz
ZXROdW1QYXJhbWV0ZXJzKGludCBuZXcKIAogdm9pZCBDb2RlQmxvY2s6OnZpc2l0U3RydWN0dXJl
cyhTbG90VmlzaXRvciYgdmlzaXRvciwgSW5zdHJ1Y3Rpb24qIHZQQykKIHsKLSAgICBJbnRlcnBy
ZXRlciogaW50ZXJwcmV0ZXIgPSBtX2dsb2JhbERhdGEtPmludGVycHJldGVyOworICAgIEludGVy
cHJldGVyKiBpbnRlcnByZXRlciA9IG1fdm0tPmludGVycHJldGVyOwogCiAgICAgaWYgKHZQQ1sw
XS51Lm9wY29kZSA9PSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX2dldF9ieV9pZCkgJiYgdlBD
WzRdLnUuc3RydWN0dXJlKSB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ2UENbNF0udS5zdHJ1
Y3R1cmUpOwpAQCAtMjIzMCw3ICsyMjMwLDcgQEAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZVVu
bGlua2luZyA9IGZhbAogdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkK
IHsKICNpZiBFTkFCTEUoTExJTlQpCi0gICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV9n
bG9iYWxEYXRhLT5pbnRlcnByZXRlcjsKKyAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBt
X3ZtLT5pbnRlcnByZXRlcjsKICAgICBpZiAoISFudW1iZXJPZkluc3RydWN0aW9ucygpKSB7CiAg
ICAgICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25z
ID0gbV91bmxpbmtlZENvZGUtPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKCk7CiAgICAgICAg
IGZvciAoc2l6ZV90IHNpemUgPSBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCksIGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CkBAIC0yMzUyLDcgKzIzNTIsNyBAQCB2b2lkIENvZGVCbG9j
azo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0dWItPmV4ZWN1dGFibGUoKS0+aGFzaEZvcihjYWxsTGlua0luZm8oaSkuc3BlY2lhbGl6
YXRpb25LaW5kKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBzdHViIHJv
dXRpbmUgIiwgUmF3UG9pbnRlcihzdHViKSwgIi5cbiIpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvKGkpLnVubGluaygqbV9n
bG9iYWxEYXRhLCByZXBhdGNoQnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxM
aW5rSW5mbyhpKS51bmxpbmsoKm1fdm0sIHJlcGF0Y2hCdWZmZXIpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghSGVhcDo6aXNNYXJrZWQoY2FsbExp
bmtJbmZvKGkpLmNhbGxlZS5nZXQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJv
c2VVbmxpbmtpbmcpIHsKQEAgLTIzNjMsNyArMjM2Myw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5h
bGl6ZVVuY29uZGl0aW9uYWxseSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fs
bExpbmtJbmZvKGkpLnNwZWNpYWxpemF0aW9uS2luZCgpKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiKS5cbiIpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mbyhpKS51bmxpbmsoKm1fZ2xvYmFsRGF0YSwgcmVwYXRjaEJ1ZmZlcik7
CisgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mbyhpKS51bmxpbmsoKm1fdm0sIHJlcGF0
Y2hCdWZmZXIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGlmICghIWNhbGxMaW5rSW5mbyhpKS5sYXN0U2VlbkNhbGxlZQpAQCAtMjU0NSw3ICsyNTQ1LDcg
QEAgdm9pZCBDb2RlQmxvY2s6OmNyZWF0ZUFjdGl2YXRpb24oQ2FsbEZyYQogICAgIEFTU0VSVChj
b2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSk7CiAgICAgQVNTRVJUKG5lZWRzRnVsbFNjb3BlQ2hh
aW4oKSk7CiAgICAgQVNTRVJUKCFjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYWN0aXZhdGlvblJlZ2lz
dGVyKCkpLmpzVmFsdWUoKSk7Ci0gICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gSlNBY3Rp
dmF0aW9uOjpjcmVhdGUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZSwgdGhpcyk7
CisgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUoY2Fs
bEZyYW1lLT52bSgpLCBjYWxsRnJhbWUsIHRoaXMpOwogICAgIGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihhY3RpdmF0aW9uUmVnaXN0ZXIoKSkgPSBKU1ZhbHVlKGFjdGl2YXRpb24pOwogICAgIGNhbGxG
cmFtZS0+c2V0U2NvcGUoYWN0aXZhdGlvbik7CiB9CkBAIC0yNTczLDEzICsyNTczLDEzIEBAIHZv
aWQgQ29kZUJsb2NrOjp1bmxpbmtDYWxscygpCiAjZW5kaWYKICAgICBpZiAoIW1fY2FsbExpbmtJ
bmZvcy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIW1fZ2xvYmFsRGF0YS0+Y2Fu
VXNlSklUKCkpCisgICAgaWYgKCFtX3ZtLT5jYW5Vc2VKSVQoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcih0aGlzKTsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fY2FsbExpbmtJbmZvcy5zaXplKCk7IGkrKykgewogICAgICAgICBpZiAoIW1f
Y2FsbExpbmtJbmZvc1tpXS5pc0xpbmtlZCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIG1fY2FsbExpbmtJbmZvc1tpXS51bmxpbmsoKm1fZ2xvYmFsRGF0YSwgcmVwYXRjaEJ1ZmZl
cik7CisgICAgICAgIG1fY2FsbExpbmtJbmZvc1tpXS51bmxpbmsoKm1fdm0sIHJlcGF0Y2hCdWZm
ZXIpOwogICAgIH0KIH0KIApAQCAtMjU5Myw3ICsyNTkzLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnVu
bGlua0luY29taW5nQ2FsbHMoKQogICAgICAgICByZXR1cm47CiAgICAgUmVwYXRjaEJ1ZmZlciBy
ZXBhdGNoQnVmZmVyKHRoaXMpOwogICAgIHdoaWxlIChtX2luY29taW5nQ2FsbHMuYmVnaW4oKSAh
PSBtX2luY29taW5nQ2FsbHMuZW5kKCkpCi0gICAgICAgIG1faW5jb21pbmdDYWxscy5iZWdpbigp
LT51bmxpbmsoKm1fZ2xvYmFsRGF0YSwgcmVwYXRjaEJ1ZmZlcik7CisgICAgICAgIG1faW5jb21p
bmdDYWxscy5iZWdpbigpLT51bmxpbmsoKm1fdm0sIHJlcGF0Y2hCdWZmZXIpOwogfQogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCiAKQEAgLTI2NjYsNyArMjY2Niw3IEBAIENsb3N1cmVDYWxsU3R1YlJv
dXRpbmUqIENvZGVCbG9jazo6ZmluZEMKICAgICB9CiAgICAgCiAgICAgLy8gVGhlIHN0dWIgcm91
dGluZSBtYXkgaGF2ZSBiZWVuIGpldHRpc29uZWQuIFRoaXMgaXMgcmFyZSwgYnV0IHdlIGhhdmUg
dG8gaGFuZGxlIGl0LgotICAgIGNvbnN0IEpJVFN0dWJSb3V0aW5lU2V0JiBzZXQgPSBtX2dsb2Jh
bERhdGEtPmhlYXAuaml0U3R1YlJvdXRpbmVzKCk7CisgICAgY29uc3QgSklUU3R1YlJvdXRpbmVT
ZXQmIHNldCA9IG1fdm0tPmhlYXAuaml0U3R1YlJvdXRpbmVzKCk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gc2V0LnNpemUoKTsgaS0tOykgewogICAgICAgICBHQ0F3YXJlSklUU3R1YlJvdXRpbmUq
IGdlbmVyaWNTdHViID0gc2V0LmF0KGkpOwogICAgICAgICBpZiAoIWdlbmVyaWNTdHViLT5pc0Ns
b3N1cmVDYWxsKCkpCkBAIC0yODg1LDE3ICsyODg1LDE3IEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0
aXNvbigpCiAKIHZvaWQgUHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb25JbXBsKCkKIHsKLSAgICBz
dGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlz
b25PcHRpbWl6ZWRDb2RlKCpnbG9iYWxEYXRhKCkpOworICAgIHN0YXRpY19jYXN0PFByb2dyYW1F
eGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGUoKnZt
KCkpOwogfQogCiB2b2lkIEV2YWxDb2RlQmxvY2s6OmpldHRpc29uSW1wbCgpCiB7Ci0gICAgc3Rh
dGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0
aW1pemVkQ29kZSgqZ2xvYmFsRGF0YSgpKTsKKyAgICBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJs
ZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2RlKCp2bSgpKTsKIH0K
IAogdm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6amV0dGlzb25JbXBsKCkKIHsKLSAgICBzdGF0aWNf
Y2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0
aW1pemVkQ29kZUZvcigqZ2xvYmFsRGF0YSgpLCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29u
c3RydWN0IDogQ29kZUZvckNhbGwpOworICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yKCp2bSgpLCBt
X2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOwogfQogCiBi
b29sIFByb2dyYW1Db2RlQmxvY2s6OmppdENvbXBpbGVJbXBsKEV4ZWNTdGF0ZSogZXhlYykKQEAg
LTMyODAsMTggKzMyODAsMTggQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGVzKCkK
IAogc2l6ZV90IENvZGVCbG9jazo6cHJlZGljdGVkTWFjaGluZUNvZGVTaXplKCkKIHsKLSAgICAv
LyBUaGlzIHdpbGwgYmUgY2FsbGVkIGZyb20gQ29kZUJsb2NrOjpDb2RlQmxvY2sgYmVmb3JlIGVp
dGhlciBtX2dsb2JhbERhdGEgb3IgdGhlCisgICAgLy8gVGhpcyB3aWxsIGJlIGNhbGxlZCBmcm9t
IENvZGVCbG9jazo6Q29kZUJsb2NrIGJlZm9yZSBlaXRoZXIgbV92bSBvciB0aGUKICAgICAvLyBp
bnN0cnVjdGlvbnMgaGF2ZSBiZWVuIGluaXRpYWxpemVkLiBJdCdzIE9LIHRvIHJldHVybiAwIGJl
Y2F1c2Ugd2hhdCB3aWxsIHJlYWxseQogICAgIC8vIG1hdHRlciBpcyB0aGUgcmVjb21wdXRhdGlv
biBvZiB0aGlzIHZhbHVlIHdoZW4gdGhlIHNsb3cgcGF0aCBpcyB0cmlnZ2VyZWQuCi0gICAgaWYg
KCFtX2dsb2JhbERhdGEpCisgICAgaWYgKCFtX3ZtKQogICAgICAgICByZXR1cm4gMDsKICAgICAK
LSAgICBpZiAoIW1fZ2xvYmFsRGF0YS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZv
ckJhc2VsaW5lSklUKQorICAgIGlmICghbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2Rl
V29yZEZvckJhc2VsaW5lSklUKQogICAgICAgICByZXR1cm4gMDsgLy8gSXQncyBhcyBnb29kIG9m
IGEgcHJlZGljdGlvbiBhcyB3ZSdsbCBnZXQuCiAgICAgCiAgICAgLy8gQmUgY29uc2VydmF0aXZl
OiByZXR1cm4gYSBzaXplIHRoYXQgd2lsbCBiZSBhbiBvdmVyZXN0aW1hdGlvbiA4NCUgb2YgdGhl
IHRpbWUuCi0gICAgZG91YmxlIG11bHRpcGxpZXIgPSBtX2dsb2JhbERhdGEtPm1hY2hpbmVDb2Rl
Qnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC5tZWFuKCkgKwotICAgICAgICBtX2ds
b2JhbERhdGEtPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC5z
dGFuZGFyZERldmlhdGlvbigpOworICAgIGRvdWJsZSBtdWx0aXBsaWVyID0gbV92bS0+bWFjaGlu
ZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULm1lYW4oKSArCisgICAgICAg
IG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC5zdGFu
ZGFyZERldmlhdGlvbigpOwogICAgIAogICAgIC8vIEJlIHBhcmFub2lkOiBzaWxlbnRseSByZWpl
Y3QgYm9ndXMgbXVsdGlwaWVycy4gU2lsZW50bHkgZG9pbmcgdGhlICJ3cm9uZyIgdGhpbmcKICAg
ICAvLyBoZXJlIGlzIE9LLCBzaW5jZSB0aGlzIHdob2xlIG1ldGhvZCBpcyBqdXN0IGEgaGV1cmlz
dGljLgpAQCAtMzMxMiw3ICszMzEyLDcgQEAgc2l6ZV90IENvZGVCbG9jazo6cHJlZGljdGVkTWFj
aGluZUNvZGVTaQogCiBib29sIENvZGVCbG9jazo6dXNlc09wY29kZShPcGNvZGVJRCBvcGNvZGVJ
RCkKIHsKLSAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBnbG9iYWxEYXRhKCktPmludGVy
cHJldGVyOworICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IHZtKCktPmludGVycHJldGVy
OwogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9ucygpLmJl
Z2luKCk7CiAgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IGluc3RydWN0aW9ucygpLnNp
emUoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzc3LDE0ICszNzcsMTQgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgYXBwZW5kV2Vha1JlZmVyZW5jZShKU0NlbGwqIHRhcmdl
dCkKICAgICAgICAgewogICAgICAgICAgICAgY3JlYXRlREZHRGF0YUlmTmVjZXNzYXJ5KCk7Ci0g
ICAgICAgICAgICBtX2RmZ0RhdGEtPndlYWtSZWZlcmVuY2VzLmFwcGVuZChXcml0ZUJhcnJpZXI8
SlNDZWxsPigqZ2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1dGFibGUoKSwgdGFyZ2V0KSk7CisgICAg
ICAgICAgICBtX2RmZ0RhdGEtPndlYWtSZWZlcmVuY2VzLmFwcGVuZChXcml0ZUJhcnJpZXI8SlND
ZWxsPigqdm0oKSwgb3duZXJFeGVjdXRhYmxlKCksIHRhcmdldCkpOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICB2b2lkIGFwcGVuZFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uKEpTQ2VsbCog
Y29kZU9yaWdpbiwgSlNDZWxsKiBmcm9tLCBKU0NlbGwqIHRvKQogICAgICAgICB7CiAgICAgICAg
ICAgICBjcmVhdGVERkdEYXRhSWZOZWNlc3NhcnkoKTsKICAgICAgICAgICAgIG1fZGZnRGF0YS0+
dHJhbnNpdGlvbnMuYXBwZW5kKAotICAgICAgICAgICAgICAgIFdlYWtSZWZlcmVuY2VUcmFuc2l0
aW9uKCpnbG9iYWxEYXRhKCksIG93bmVyRXhlY3V0YWJsZSgpLCBjb2RlT3JpZ2luLCBmcm9tLCB0
bykpOworICAgICAgICAgICAgICAgIFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uKCp2bSgpLCBvd25l
ckV4ZWN1dGFibGUoKSwgY29kZU9yaWdpbiwgZnJvbSwgdG8pKTsKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgREZHOjpNaW5pZmllZEdyYXBoJiBtaW5pZmllZERGRygpCkBAIC00MjgsNyAr
NDI4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgICAg
ICBpZiAobV9qaXRDb2RlLmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpIHsKICAgICAgICAg
ICAgICAgICBjcmVhdGVERkdEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgICAgICAgICBtX2ds
b2JhbERhdGEtPmhlYXAubV9kZmdDb2RlQmxvY2tzLm1fc2V0LmFkZCh0aGlzKTsKKyAgICAgICAg
ICAgICAgICBtX3ZtLT5oZWFwLm1fZGZnQ29kZUJsb2Nrcy5tX3NldC5hZGQodGhpcyk7CiAgICAg
ICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgfQpAQCAtNDg1LDggKzQ4NSw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpOyB9CiAKLSAgICAgICAgdm9pZCBz
ZXRHbG9iYWxEYXRhKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkgeyBtX2dsb2JhbERhdGEgPSBn
bG9iYWxEYXRhOyB9Ci0gICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpIHsgcmV0dXJu
IG1fZ2xvYmFsRGF0YTsgfQorICAgICAgICB2b2lkIHNldFZNKFZNKiB2bSkgeyBtX3ZtID0gdm07
IH0KKyAgICAgICAgVk0qIHZtKCkgeyByZXR1cm4gbV92bTsgfQogCiAgICAgICAgIHZvaWQgc2V0
VGhpc1JlZ2lzdGVyKGludCB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlzUmVn
aXN0ZXI7IH0KICAgICAgICAgaW50IHRoaXNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGhp
c1JlZ2lzdGVyOyB9CkBAIC02MTMsNyArNjEzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICAgICAgZ2V0VmFsdWVQcm9maWxlQnl0ZWNvZGVPZmZzZXQ8VmFsdWVQcm9maWxlPik7CiAg
ICAgICAgICAgICBBU1NFUlQocmVzdWx0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IC0xKTsKICAgICAg
ICAgICAgIEFTU0VSVChpbnN0cnVjdGlvbnMoKVtieXRlY29kZU9mZnNldCArIG9wY29kZUxlbmd0
aCgKLSAgICAgICAgICAgICAgICAgICAgICAgbV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+Z2V0
T3Bjb2RlSUQoCisgICAgICAgICAgICAgICAgICAgICAgIG1fdm0tPmludGVycHJldGVyLT5nZXRP
cGNvZGVJRCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygpWwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0XS51Lm9wY29kZSkpIC0g
MV0udS5wcm9maWxlID09IHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAt
ODE2LDcgKzgxNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICB1
bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsKICAgICAgICAgICAg
IG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKLSAg
ICAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldChtX2dsb2JhbE9iamVjdC0+
Z2xvYmFsRGF0YSgpLCBtX293bmVyRXhlY3V0YWJsZS5nZXQoKSwgdik7CisgICAgICAgICAgICBt
X2NvbnN0YW50UmVnaXN0ZXJzLmxhc3QoKS5zZXQobV9nbG9iYWxPYmplY3QtPnZtKCksIG1fb3du
ZXJFeGVjdXRhYmxlLmdldCgpLCB2KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
ICAgIH0KIApAQCAtMTA5Myw3ICsxMDkzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICBzaXplX3QgY291bnQgPSBjb25zdGFudHMuc2l6ZSgpOwogICAgICAgICAgICAgbV9jb25zdGFu
dFJlZ2lzdGVycy5yZXNpemUoY291bnQpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbaV0u
c2V0KCptX2dsb2JhbERhdGEsIG93bmVyRXhlY3V0YWJsZSgpLCBjb25zdGFudHNbaV0uZ2V0KCkp
OworICAgICAgICAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbaV0uc2V0KCptX3ZtLCBvd25l
ckV4ZWN1dGFibGUoKSwgY29uc3RhbnRzW2ldLmdldCgpKTsKICAgICAgICAgfQogCiAgICAgICAg
IHZvaWQgZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgY29uc3QgSW5zdHJ1
Y3Rpb24qIGJlZ2luLCBjb25zdCBJbnN0cnVjdGlvbiomKTsKQEAgLTExNTksNyArMTE1OSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRDb2RlQmxvY2s+
IG1fdW5saW5rZWRDb2RlOwogICAgICAgICBpbnQgbV9udW1QYXJhbWV0ZXJzOwogICAgICAgICBX
cml0ZUJhcnJpZXI8U2NyaXB0RXhlY3V0YWJsZT4gbV9vd25lckV4ZWN1dGFibGU7Ci0gICAgICAg
IEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworICAgICAgICBWTSogbV92bTsKIAogICAgICAg
ICBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rpb25zOwogICAgICAgICBp
bnQgbV90aGlzUmVnaXN0ZXI7CkBAIC0xMTkyLDEyICsxMTkyLDEyIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBzdHJ1Y3QgV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24gewogICAgICAgICAgICAg
V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24oKSB7IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAg
V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwq
IG93bmVyLCBKU0NlbGwqIGNvZGVPcmlnaW4sIEpTQ2VsbCogZnJvbSwgSlNDZWxsKiB0bykKLSAg
ICAgICAgICAgICAgICA6IG1fZnJvbShnbG9iYWxEYXRhLCBvd25lciwgZnJvbSkKLSAgICAgICAg
ICAgICAgICAsIG1fdG8oZ2xvYmFsRGF0YSwgb3duZXIsIHRvKQorICAgICAgICAgICAgV2Vha1Jl
ZmVyZW5jZVRyYW5zaXRpb24oVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU0NlbGwqIGNvZGVPcmln
aW4sIEpTQ2VsbCogZnJvbSwgSlNDZWxsKiB0bykKKyAgICAgICAgICAgICAgICA6IG1fZnJvbSh2
bSwgb3duZXIsIGZyb20pCisgICAgICAgICAgICAgICAgLCBtX3RvKHZtLCBvd25lciwgdG8pCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWYgKCEhY29kZU9yaWdpbikKLSAgICAgICAg
ICAgICAgICAgICAgbV9jb2RlT3JpZ2luLnNldChnbG9iYWxEYXRhLCBvd25lciwgY29kZU9yaWdp
bik7CisgICAgICAgICAgICAgICAgICAgIG1fY29kZU9yaWdpbi5zZXQodm0sIG93bmVyLCBjb2Rl
T3JpZ2luKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgV3JpdGVCYXJyaWVyPEpTQ2Vs
bD4gbV9jb2RlT3JpZ2luOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2
YWxDb2RlQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXZhbENvZGVDYWNoZS5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXZhbENvZGVDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1
Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBpZiAoIWluU3RyaWN0Q29udGV4dCAmJiBldmFsU291cmNlLmxl
bmd0aCgpIDwgbWF4Q2FjaGVhYmxlU291cmNlTGVuZ3RoICYmIHNjb3BlLT5iZWdpbigpLT5pc1Zh
cmlhYmxlT2JqZWN0KCkgJiYgbV9jYWNoZU1hcC5zaXplKCkgPCBtYXhDYWNoZUVudHJpZXMpCi0g
ICAgICAgICAgICAgICAgbV9jYWNoZU1hcC5zZXQoZXZhbFNvdXJjZS5pbXBsKCksIFdyaXRlQmFy
cmllcjxFdmFsRXhlY3V0YWJsZT4oZXhlYy0+Z2xvYmFsRGF0YSgpLCBvd25lciwgZXZhbEV4ZWN1
dGFibGUpKTsKKyAgICAgICAgICAgICAgICBtX2NhY2hlTWFwLnNldChldmFsU291cmNlLmltcGwo
KSwgV3JpdGVCYXJyaWVyPEV2YWxFeGVjdXRhYmxlPihleGVjLT52bSgpLCBvd25lciwgZXZhbEV4
ZWN1dGFibGUpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIGV2YWxFeGVjdXRh
YmxlOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDcgKzUyLDcgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogICAg
IHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25vcmVkOwogICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsK
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCgKLSAgICAgICAgKnBy
b2ZpbGVkQmxvY2stPmdsb2JhbERhdGEoKSwgaWRlbnQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVj
aWZpY1ZhbHVlKTsKKyAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIGlkZW50LCBhdHRyaWJ1
dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1ZSk7CiAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9u
YXJ5KCkpCiAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwogICAgIGlmICghaXNWYWxpZE9mZnNl
dChvZmZzZXQpKQpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3JDaGFpbihHZXRCCiAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwogICAgICAgICAKICAgICBy
ZXN1bHQubV9vZmZzZXQgPSBjdXJyZW50U3RydWN0dXJlLT5nZXQoCi0gICAgICAgICpwcm9maWxl
ZEJsb2NrLT5nbG9iYWxEYXRhKCksIGlkZW50LCBhdHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNW
YWx1ZSk7CisgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCBpZGVudCwgYXR0cmlidXRlc0ln
bm9yZWQsIHNwZWNpZmljVmFsdWUpOwogICAgIGlmIChjdXJyZW50U3RydWN0dXJlLT5pc0RpY3Rp
b25hcnkoKSkKICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7CiAgICAgaWYgKCFpc1ZhbGlkT2Zm
c2V0KHJlc3VsdC5tX29mZnNldCkpCkBAIC0xNjUsNyArMTY1LDcgQEAgR2V0QnlJZFN0YXR1cyBH
ZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzSWdu
b3JlZDsKICAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwogICAgICAgICByZXN1bHQubV9v
ZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCgKLSAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT5nbG9i
YWxEYXRhKCksIGlkZW50LCBhdHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1ZSk7CisgICAg
ICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgaWRlbnQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBz
cGVjaWZpY1ZhbHVlKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCiAg
ICAgICAgICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKICAgICAgICAgCkBAIC0xOTAsNyArMTkwLDcg
QEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAg
dW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7CiAgICAgICAgICAgICBKU0NlbGwqIHNwZWNpZmlj
VmFsdWU7CiAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBteU9mZnNldCA9IHN0cnVjdHVyZS0+
Z2V0KAotICAgICAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT5nbG9iYWxEYXRhKCksIGlkZW50
LCBhdHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgICAgICAgICAgKnBy
b2ZpbGVkQmxvY2stPnZtKCksIGlkZW50LCBhdHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1
ZSk7CiAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKICAgICAgICAg
ICAgICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKICAgICAgICAgICAgIApAQCAtMjU2LDcgKzI1Niw3
IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQogfQogCi1HZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3Io
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSWRlbnRpZmll
ciYgaWRlbnQpCitHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSWRlbnRpZmllciYgaWRlbnQpCiB7CiAgICAgLy8gRm9y
IG5vdyB3ZSBvbmx5IGhhbmRsZSB0aGUgc3VwZXIgc2ltcGxlIHNlbGYgYWNjZXNzIGNhc2UuIFdl
IGNvdWxkIGhhbmRsZSB0aGUKICAgICAvLyBwcm90b3R5cGUgY2FzZSBpbiB0aGUgZnV0dXJlLgpA
QCAtMjcxLDEwICsyNzEsMTAgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKAogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAK
ICAgICBHZXRCeUlkU3RhdHVzIHJlc3VsdDsKLSAgICByZXN1bHQubV93YXNTZWVuSW5KSVQgPSBm
YWxzZTsgLy8gVG8gbXkga25vd2xlZGdlIG5vYm9keSB0aGF0IHVzZXMgY29tcHV0ZUZvcihKU0ds
b2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBJZGVudGlmaWVyJikgcmVhZHMgdGhpcyBmaWVsZCwgYnV0
IEkgbWlnaHQgYXMgd2VsbCBiZSBob25lc3Q6IG5vLCBpdCB3YXNuJ3Qgc2VlbiBpbiB0aGUgSklU
LCBzaW5jZSBJIGNvbXB1dGVkIGl0IHN0YXRpY2FsbHkuCisgICAgcmVzdWx0Lm1fd2FzU2Vlbklu
SklUID0gZmFsc2U7IC8vIFRvIG15IGtub3dsZWRnZSBub2JvZHkgdGhhdCB1c2VzIGNvbXB1dGVG
b3IoVk0mLCBTdHJ1Y3R1cmUqLCBJZGVudGlmaWVyJikgcmVhZHMgdGhpcyBmaWVsZCwgYnV0IEkg
bWlnaHQgYXMgd2VsbCBiZSBob25lc3Q6IG5vLCBpdCB3YXNuJ3Qgc2VlbiBpbiB0aGUgSklULCBz
aW5jZSBJIGNvbXB1dGVkIGl0IHN0YXRpY2FsbHkuCiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsK
ICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0ID0gc3RydWN0
dXJlLT5nZXQoZ2xvYmFsRGF0YSwgaWRlbnQsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOwor
ICAgIHJlc3VsdC5tX29mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBpZGVudCwgYXR0cmlidXRl
cywgc3BlY2lmaWNWYWx1ZSk7CiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KHJlc3VsdC5tX29mZnNl
dCkpCiAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOyAvLyBJdCdz
IHByb2JhYmx5IGEgcHJvdG90eXBlIGxvb2t1cC4gR2l2ZSB1cCBvbiBsaWZlIGZvciBub3csIGV2
ZW4gdGhvdWdoIHdlIGNvdWxkIHRvdGFsbHkgYmUgd2F5IHNtYXJ0ZXIgYWJvdXQgaXQuCiAgICAg
aWYgKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpA
QCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBHZXRCeUlk
U3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSWRl
bnRpZmllciYpOwotICAgIHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoSlNHbG9iYWxE
YXRhJiwgU3RydWN0dXJlKiwgSWRlbnRpZmllciYpOworICAgIHN0YXRpYyBHZXRCeUlkU3RhdHVz
IGNvbXB1dGVGb3IoVk0mLCBTdHJ1Y3R1cmUqLCBJZGVudGlmaWVyJik7CiAgICAgCiAgICAgU3Rh
dGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkocmV2aXNpb24gMTQ4Njgz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTcwLDIwICs3MCwyMCBAQCBzdHJ1Y3QgSW5zdHJ1Y3Rpb24gewogICAgICAg
ICB1Lm9wZXJhbmQgPSBvcGVyYW5kOwogICAgIH0KIAotICAgIEluc3RydWN0aW9uKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgSW5zdHJ1Y3Rpb24oVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKICAgICB7CiAgICAgICAgIHUuc3RydWN0dXJlLmNsZWFyKCk7Ci0gICAgICAgIHUuc3RydWN0
dXJlLnNldChnbG9iYWxEYXRhLCBvd25lciwgc3RydWN0dXJlKTsKKyAgICAgICAgdS5zdHJ1Y3R1
cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKICAgICB9Ci0gICAgSW5zdHJ1Y3Rpb24oSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmVDaGFpbiogc3Ry
dWN0dXJlQ2hhaW4pCisgICAgSW5zdHJ1Y3Rpb24oVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1
Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4pCiAgICAgewogICAgICAgICB1LnN0cnVjdHVyZUNo
YWluLmNsZWFyKCk7Ci0gICAgICAgIHUuc3RydWN0dXJlQ2hhaW4uc2V0KGdsb2JhbERhdGEsIG93
bmVyLCBzdHJ1Y3R1cmVDaGFpbik7CisgICAgICAgIHUuc3RydWN0dXJlQ2hhaW4uc2V0KHZtLCBv
d25lciwgc3RydWN0dXJlQ2hhaW4pOwogICAgIH0KLSAgICBJbnN0cnVjdGlvbihKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIEpTQ2VsbCoganNDZWxsKQorICAgIEluc3Ry
dWN0aW9uKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNDZWxsKiBqc0NlbGwpCiAgICAgewogICAg
ICAgICB1LmpzQ2VsbC5jbGVhcigpOwotICAgICAgICB1LmpzQ2VsbC5zZXQoZ2xvYmFsRGF0YSwg
b3duZXIsIGpzQ2VsbCk7CisgICAgICAgIHUuanNDZWxsLnNldCh2bSwgb3duZXIsIGpzQ2VsbCk7
CiAgICAgfQogCiAgICAgSW5zdHJ1Y3Rpb24oUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0
dGVyRnVuYykgeyB1LmdldHRlckZ1bmMgPSBnZXR0ZXJGdW5jOyB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcg
QEAKICNpZm5kZWYgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVfaAogI2RlZmluZSBPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZV9oCiAKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJW
TS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90
eXBlLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGlj
OgogCiAgICAgYm9vbCBpc051bGwoKSB7IHJldHVybiAhbV9hbGxvY2F0b3I7IH0KIAotICAgIHZv
aWQgaW5pdGlhbGl6ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIEpT
T2JqZWN0KiBwcm90b3R5cGUsIHVuc2lnbmVkIGluZmVycmVkSW5saW5lQ2FwYWNpdHkpCisgICAg
dm9pZCBpbml0aWFsaXplKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIHByb3RvdHlw
ZSwgdW5zaWduZWQgaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSkKICAgICB7CiAgICAgICAgIEFTU0VS
VCghbV9hbGxvY2F0b3IpOwogICAgICAgICBBU1NFUlQoIW1fc3RydWN0dXJlKTsKQEAgLTU1LDcg
KzU1LDcgQEAgcHVibGljOgogICAgICAgICB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9IDA7CiAg
ICAgICAgIGlmIChpbmZlcnJlZElubGluZUNhcGFjaXR5IDwgSlNGaW5hbE9iamVjdDo6ZGVmYXVs
dElubGluZUNhcGFjaXR5KCkpIHsKICAgICAgICAgICAgIC8vIFRyeSB0byBzaHJpbmsgdGhlIG9i
amVjdCBiYXNlZCBvbiBzdGF0aWMgYW5hbHlzaXMuCi0gICAgICAgICAgICBpbmZlcnJlZElubGlu
ZUNhcGFjaXR5ICs9IHBvc3NpYmxlRGVmYXVsdFByb3BlcnR5Q291bnQoZ2xvYmFsRGF0YSwgcHJv
dG90eXBlKTsKKyAgICAgICAgICAgIGluZmVycmVkSW5saW5lQ2FwYWNpdHkgKz0gcG9zc2libGVE
ZWZhdWx0UHJvcGVydHlDb3VudCh2bSwgcHJvdG90eXBlKTsKIAogICAgICAgICAgICAgaWYgKCFp
bmZlcnJlZElubGluZUNhcGFjaXR5KSB7CiAgICAgICAgICAgICAgICAgLy8gRW1wdHkgb2JqZWN0
cyBhcmUgcmFyZSwgc28gbW9zdCBsaWtlbHkgdGhlIHN0YXRpYyBhbmFseXplciBqdXN0IGRpZG4n
dApAQCAtODAsNyArODAsNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChpbmxpbmVDYXBhY2l0
eSA8PSBKU0ZpbmFsT2JqZWN0OjptYXhJbmxpbmVDYXBhY2l0eSgpKTsKIAogICAgICAgICBzaXpl
X3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShpbmxpbmVD
YXBhY2l0eSk7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJmdsb2JhbERh
dGEuaGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihhbGxvY2F0aW9uU2l6
ZSk7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJnZtLmhlYXAuYWxsb2Nh
dG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3IoYWxsb2NhdGlvblNpemUpOwogICAgICAgICBB
U1NFUlQoYWxsb2NhdG9yLT5jZWxsU2l6ZSgpKTsKIAogICAgICAgICAvLyBUYWtlIGFkdmFudGFn
ZSBvZiBleHRyYSBpbmxpbmUgY2FwYWNpdHkgYXZhaWxhYmxlIGluIHRoZSBzaXplIGNsYXNzLgpA
QCAtOTAsOCArOTAsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpbmxpbmVDYXBhY2l0eSA9IEpT
RmluYWxPYmplY3Q6Om1heElubGluZUNhcGFjaXR5KCk7CiAKICAgICAgICAgbV9hbGxvY2F0b3Ig
PSBhbGxvY2F0b3I7Ci0gICAgICAgIG1fc3RydWN0dXJlLnNldChnbG9iYWxEYXRhLCBvd25lciwK
LSAgICAgICAgICAgIGdsb2JhbERhdGEucHJvdG90eXBlTWFwLmVtcHR5T2JqZWN0U3RydWN0dXJl
Rm9yUHJvdG90eXBlKHByb3RvdHlwZSwgaW5saW5lQ2FwYWNpdHkpKTsKKyAgICAgICAgbV9zdHJ1
Y3R1cmUuc2V0KHZtLCBvd25lciwKKyAgICAgICAgICAgIHZtLnByb3RvdHlwZU1hcC5lbXB0eU9i
amVjdFN0cnVjdHVyZUZvclByb3RvdHlwZShwcm90b3R5cGUsIGlubGluZUNhcGFjaXR5KSk7CiAg
ICAgfQogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSB7IHJldHVybiBtX3N0cnVjdHVyZS5n
ZXQoKTsgfQpAQCAtMTExLDE3ICsxMTEsMTcgQEAgcHVibGljOgogCiBwcml2YXRlOgogCi0gICAg
dW5zaWduZWQgcG9zc2libGVEZWZhdWx0UHJvcGVydHlDb3VudChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgdW5zaWduZWQgcG9zc2libGVEZWZhdWx0
UHJvcGVydHlDb3VudChWTSYgdm0sIEpTT2JqZWN0KiBwcm90b3R5cGUpCiAgICAgewogICAgICAg
ICBpZiAocHJvdG90eXBlID09IHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3Rv
dHlwZSgpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAgICAgc2l6ZV90IGNvdW50ID0g
MDsKLSAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lQXJyYXkoJmdsb2JhbERh
dGEpOwotICAgICAgICBwcm90b3R5cGUtPnN0cnVjdHVyZSgpLT5nZXRQcm9wZXJ0eU5hbWVzRnJv
bVN0cnVjdHVyZShnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWVBcnJheSwgRXhjbHVkZURvbnRFbnVt
UHJvcGVydGllcyk7CisgICAgICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZUFycmF5
KCZ2bSk7CisgICAgICAgIHByb3RvdHlwZS0+c3RydWN0dXJlKCktPmdldFByb3BlcnR5TmFtZXNG
cm9tU3RydWN0dXJlKHZtLCBwcm9wZXJ0eU5hbWVBcnJheSwgRXhjbHVkZURvbnRFbnVtUHJvcGVy
dGllcyk7CiAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5RGF0YTo6UHJvcGVydHlOYW1lVmVjdG9y
JiBwcm9wZXJ0eU5hbWVWZWN0b3IgPSBwcm9wZXJ0eU5hbWVBcnJheS5kYXRhKCktPnByb3BlcnR5
TmFtZVZlY3RvcigpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3BlcnR5TmFt
ZVZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHByb3Rv
dHlwZS0+Z2V0RGlyZWN0KGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZVZlY3RvcltpXSk7CisgICAg
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gcHJvdG90eXBlLT5nZXREaXJlY3Qodm0sIHByb3BlcnR5
TmFtZVZlY3RvcltpXSk7CiAKICAgICAgICAgICAgIC8vIEZ1bmN0aW9ucyBhcmUgY29tbW9uLCBh
bmQgYXJlIHVzdWFsbHkgY2xhc3MtbGV2ZWwgb2JqZWN0cyB0aGF0IGFyZSBub3Qgb3ZlcnJpZGRl
bi4KICAgICAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih2YWx1ZSkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3NTdHJ1
Y3R1cmVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDI5ICs2MCwyOSBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICB1LnByb3RvLmNsZWFyKCk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBhc3NSZWZQdHI8SklUU3R1YlJv
dXRpbmU+IF9zdHViUm91dGluZSwgU3RydWN0dXJlKiBfYmFzZSwgYm9vbCBpc0RpcmVjdCkKKyAg
ICAgICAgdm9pZCBzZXQoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIGJvb2wgaXNEaXJlY3QpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHN0dWJSb3V0aW5lID0gX3N0dWJSb3V0aW5lOwotICAgICAg
ICAgICAgYmFzZS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIF9iYXNlKTsKKyAgICAgICAgICAgIGJh
c2Uuc2V0KHZtLCBvd25lciwgX2Jhc2UpOwogICAgICAgICAgICAgdS5wcm90by5jbGVhcigpOwog
ICAgICAgICAgICAgaXNDaGFpbiA9IGZhbHNlOwogICAgICAgICAgICAgdGhpcy0+aXNEaXJlY3Qg
PSBpc0RpcmVjdDsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHVi
Um91dGluZT4gX3N0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIF9iYXNlLCBTdHJ1Y3R1cmUqIF9wcm90
bywgYm9vbCBpc0RpcmVjdCkKKyAgICAgICAgdm9pZCBzZXQoVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jh
c2UsIFN0cnVjdHVyZSogX3Byb3RvLCBib29sIGlzRGlyZWN0KQogICAgICAgICB7CiAgICAgICAg
ICAgICBzdHViUm91dGluZSA9IF9zdHViUm91dGluZTsKLSAgICAgICAgICAgIGJhc2Uuc2V0KGds
b2JhbERhdGEsIG93bmVyLCBfYmFzZSk7Ci0gICAgICAgICAgICB1LnByb3RvLnNldChnbG9iYWxE
YXRhLCBvd25lciwgX3Byb3RvKTsKKyAgICAgICAgICAgIGJhc2Uuc2V0KHZtLCBvd25lciwgX2Jh
c2UpOworICAgICAgICAgICAgdS5wcm90by5zZXQodm0sIG93bmVyLCBfcHJvdG8pOwogICAgICAg
ICAgICAgaXNDaGFpbiA9IGZhbHNlOwogICAgICAgICAgICAgdGhpcy0+aXNEaXJlY3QgPSBpc0Rp
cmVjdDsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGlu
ZT4gX3N0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIF9iYXNlLCBTdHJ1Y3R1cmVDaGFpbiogX2NoYWlu
LCBib29sIGlzRGlyZWN0KQorICAgICAgICB2b2lkIHNldChWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IF9zdHViUm91dGluZSwgU3RydWN0dXJlKiBfYmFz
ZSwgU3RydWN0dXJlQ2hhaW4qIF9jaGFpbiwgYm9vbCBpc0RpcmVjdCkKICAgICAgICAgewogICAg
ICAgICAgICAgc3R1YlJvdXRpbmUgPSBfc3R1YlJvdXRpbmU7Ci0gICAgICAgICAgICBiYXNlLnNl
dChnbG9iYWxEYXRhLCBvd25lciwgX2Jhc2UpOwotICAgICAgICAgICAgdS5jaGFpbi5zZXQoZ2xv
YmFsRGF0YSwgb3duZXIsIF9jaGFpbik7CisgICAgICAgICAgICBiYXNlLnNldCh2bSwgb3duZXIs
IF9iYXNlKTsKKyAgICAgICAgICAgIHUuY2hhaW4uc2V0KHZtLCBvd25lciwgX2NoYWluKTsKICAg
ICAgICAgICAgIGlzQ2hhaW4gPSB0cnVlOwogICAgICAgICAgICAgdGhpcy0+aXNEaXJlY3QgPSBp
c0RpcmVjdDsKICAgICAgICAgfQpAQCAtOTIsMTkgKzkyLDE5IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgfQogICAgICAgICAKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiBzdHViUm91dGluZSwgU3RydWN0dXJlKiBmaXJzdEJhc2UsIGJvb2wgaXNEaXJlY3QpCisg
ICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
UGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogZmlyc3RC
YXNlLCBib29sIGlzRGlyZWN0KQogICAgIHsKLSAgICAgICAgbGlzdFswXS5zZXQoZ2xvYmFsRGF0
YSwgb3duZXIsIHN0dWJSb3V0aW5lLCBmaXJzdEJhc2UsIGlzRGlyZWN0KTsKKyAgICAgICAgbGlz
dFswXS5zZXQodm0sIG93bmVyLCBzdHViUm91dGluZSwgZmlyc3RCYXNlLCBpc0RpcmVjdCk7CiAg
ICAgfQogCi0gICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1
YlJvdXRpbmUsIFN0cnVjdHVyZSogZmlyc3RCYXNlLCBTdHJ1Y3R1cmUqIGZpcnN0UHJvdG8sIGJv
b2wgaXNEaXJlY3QpCisgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUsIFN0
cnVjdHVyZSogZmlyc3RCYXNlLCBTdHJ1Y3R1cmUqIGZpcnN0UHJvdG8sIGJvb2wgaXNEaXJlY3Qp
CiAgICAgewotICAgICAgICBsaXN0WzBdLnNldChnbG9iYWxEYXRhLCBvd25lciwgc3R1YlJvdXRp
bmUsIGZpcnN0QmFzZSwgZmlyc3RQcm90bywgaXNEaXJlY3QpOworICAgICAgICBsaXN0WzBdLnNl
dCh2bSwgb3duZXIsIHN0dWJSb3V0aW5lLCBmaXJzdEJhc2UsIGZpcnN0UHJvdG8sIGlzRGlyZWN0
KTsKICAgICB9CiAKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5l
PiBzdHViUm91dGluZSwgU3RydWN0dXJlKiBmaXJzdEJhc2UsIFN0cnVjdHVyZUNoYWluKiBmaXJz
dENoYWluLCBib29sIGlzRGlyZWN0KQorICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dChWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJS
b3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSwgU3RydWN0dXJlQ2hhaW4qIGZpcnN0Q2hhaW4s
IGJvb2wgaXNEaXJlY3QpCiAgICAgewotICAgICAgICBsaXN0WzBdLnNldChnbG9iYWxEYXRhLCBv
d25lciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgZmlyc3RDaGFpbiwgaXNEaXJlY3QpOworICAg
ICAgICBsaXN0WzBdLnNldCh2bSwgb3duZXIsIHN0dWJSb3V0aW5lLCBmaXJzdEJhc2UsIGZpcnN0
Q2hhaW4sIGlzRGlyZWN0KTsKICAgICB9CiAKICAgICBib29sIHZpc2l0V2VhayhpbnQgY291bnQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlk
TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBzdGF0aWMgUHV0QnlJ
ZEFjY2VzcyB0cmFuc2l0aW9uKAotICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsCisg
ICAgICAgIFZNJiB2bSwKICAgICAgICAgSlNDZWxsKiBvd25lciwKICAgICAgICAgU3RydWN0dXJl
KiBvbGRTdHJ1Y3R1cmUsCiAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLApAQCAtNjQs
MjIgKzY0LDIyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0
OwogICAgICAgICByZXN1bHQubV90eXBlID0gVHJhbnNpdGlvbjsKLSAgICAgICAgcmVzdWx0Lm1f
b2xkU3RydWN0dXJlLnNldChnbG9iYWxEYXRhLCBvd25lciwgb2xkU3RydWN0dXJlKTsKLSAgICAg
ICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlLnNldChnbG9iYWxEYXRhLCBvd25lciwgbmV3U3RydWN0
dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fY2hhaW4uc2V0KGdsb2JhbERhdGEsIG93bmVyLCBjaGFp
bik7CisgICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBvbGRTdHJ1
Y3R1cmUpOworICAgICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgbmV3
U3RydWN0dXJlKTsKKyAgICAgICAgcmVzdWx0Lm1fY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4p
OwogICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICAgICBzdGF0aWMgUHV0QnlJZEFjY2VzcyByZXBs
YWNlKAotICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsCisgICAgICAgIFZNJiB2bSwK
ICAgICAgICAgSlNDZWxsKiBvd25lciwKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCiAg
ICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQogICAgIHsKICAg
ICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBSZXBs
YWNlOwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KGdsb2JhbERhdGEsIG93bmVy
LCBzdHJ1Y3R1cmUpOworICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25l
ciwgc3RydWN0dXJlKTsKICAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViUm91dGlu
ZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmNwcAkocmV2aXNp
b24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWNpc2VKdW1w
VGFyZ2V0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBjb21wdXRl
UHJlY2lzZUp1bXBUYXJnZXRzKENvZGVCbG9jawogICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVC
bG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyBpLS07KQogICAgICAgICBvdXQuYXBw
ZW5kKGNvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKS50YXJnZXQpOwogICAgIAotICAgIElu
dGVycHJldGVyKiBpbnRlcnByZXRlciA9IGNvZGVCbG9jay0+Z2xvYmFsRGF0YSgpLT5pbnRlcnBy
ZXRlcjsKKyAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBjb2RlQmxvY2stPnZtKCktPmlu
dGVycHJldGVyOwogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKICAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50
ID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25Db3VudDspIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1
cy5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBQdXRC
eUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgCiAgICAgaWYgKGluc3Ry
dWN0aW9uWzBdLnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUobGxpbnRfb3BfcHV0X2J5X2lk
KQogICAgICAgICB8fCBpbnN0cnVjdGlvblswXS51Lm9wY29kZSA9PSBMTEludDo6Z2V0T3Bjb2Rl
KGxsaW50X29wX3B1dF9ieV9pZF9vdXRfb2ZfbGluZSkpIHsKLSAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQoKnByb2ZpbGVkQmxvY2stPmdsb2JhbERhdGEoKSwg
aWRlbnQpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCgq
cHJvZmlsZWRCbG9jay0+dm0oKSwgaWRlbnQpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQo
b2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24s
IDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOwogICAgICAgICAKQEAgLTY4LDcgKzY4LDcgQEAgUHV0
QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogICAgIEFTU0VSVChuZXdTdHJ1
Y3R1cmUpOwogICAgIEFTU0VSVChjaGFpbik7CiAgICAgCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gbmV3U3RydWN0dXJlLT5nZXQoKnByb2ZpbGVkQmxvY2stPmdsb2JhbERhdGEoKSwgaWRl
bnQpOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5ld1N0cnVjdHVyZS0+Z2V0KCpwcm9m
aWxlZEJsb2NrLT52bSgpLCBpZGVudCk7CiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
CiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24sIDAsIDAsIDAsIGlu
dmFsaWRPZmZzZXQpOwogICAgIApAQCAtMTA0LDcgKzEwNCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgCiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5
X2lkX3JlcGxhY2U6IHsKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3R1YkluZm8u
dS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlLT5nZXQoCi0gICAgICAgICAgICAq
cHJvZmlsZWRCbG9jay0+Z2xvYmFsRGF0YSgpLCBpZGVudCk7CisgICAgICAgICAgICAqcHJvZmls
ZWRCbG9jay0+dm0oKSwgaWRlbnQpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQp
KSB7CiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cygKICAgICAgICAgICAgICAgICBT
aW1wbGVSZXBsYWNlLApAQCAtMTE5LDcgKzExOSw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvcigKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9k
aXJlY3Q6IHsKICAgICAgICAgQVNTRVJUKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucHJl
dmlvdXNTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVk
KCkpOwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHViSW5mby51LnB1dEJ5SWRU
cmFuc2l0aW9uLnN0cnVjdHVyZS0+Z2V0KAotICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPmds
b2JhbERhdGEoKSwgaWRlbnQpOworICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIGlk
ZW50KTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewogICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoCiAgICAgICAgICAgICAgICAgU2ltcGxlVHJhbnNpdGlvbiwK
QEAgLTEzOSw3ICsxMzksNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IoCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIAotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIElkZW50aWZpZXImIGlkZW50LCBi
b29sIGlzRGlyZWN0KQorUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IElkZW50aWZpZXImIGlkZW50LCBib29sIGlzRGlyZWN0KQogewogICAgIGlmIChQcm9wZXJ0eU5h
bWUoaWRlbnQpLmFzSW5kZXgoKSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCiAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwpAQCAtMTUyLDcgKzE1Miw3IEBA
IFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAKICAgICB1bnNp
Z25lZCBhdHRyaWJ1dGVzOwogICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldChnbG9iYWxEYXRhLCBpZGVudCwgYXR0cmli
dXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0
dXJlLT5nZXQodm0sIGlkZW50LCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKICAgICBpZiAo
aXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKEFjY2Vz
c29yIHwgUmVhZE9ubHkpKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCk7CkBAIC0xNzgsNyArMTc4LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yKAogICAgIAogICAgIGlmICghaXNEaXJlY3QpIHsKICAgICAgICAgLy8gSWYg
dGhlIHByb3RvdHlwZSBjaGFpbiBoYXMgc2V0dGVycyBvciByZWFkLW9ubHkgcHJvcGVydGllcywg
dGhlbiBnaXZlIHVwLgotICAgICAgICBpZiAoc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbk1heUlu
dGVyY2VwdFN0b3JlVG8oZ2xvYmFsRGF0YSwgaWRlbnQpKQorICAgICAgICBpZiAoc3RydWN0dXJl
LT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8odm0sIGlkZW50KSkKICAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICAKICAgICAg
ICAgLy8gSWYgdGhlIHByb3RvdHlwZSBjaGFpbiBoYXNuJ3QgYmVlbiBub3JtYWxpemVkIChpLmUu
IHRoZXJlIGFyZSBwcm94aWVzIG9yIGRpY3Rpb25hcmllcykKQEAgLTIxMyw3ICsyMTMsNyBAQCBQ
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgCiAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoCiAgICAgICAgIFNpbXBsZVRyYW5zaXRpb24sIHN0cnVjdHVyZSwgdHJh
bnNpdGlvbiwKLSAgICAgICAgc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QpLCBvZmZzZXQpOworICAgICAgICBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWlu
KHZtLCBnbG9iYWxPYmplY3QpLCBvZmZzZXQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAko
cmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSWRlbnRpZmllcjsKLWNsYXNzIEpTR2xvYmFs
RGF0YTsKK2NsYXNzIFZNOwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBTdHJ1Y3R1cmU7
CiBjbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKQEAgLTkxLDcgKzkxLDcgQEAgcHVibGljOgogICAgIH0K
ICAgICAKICAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgsIElkZW50aWZpZXImKTsKLSAgICBzdGF0aWMgUHV0QnlJZFN0
YXR1cyBjb21wdXRlRm9yKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
KiwgSWRlbnRpZmllciYsIGJvb2wgaXNEaXJlY3QpOworICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVz
IGNvbXB1dGVGb3IoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIElkZW50aWZpZXIm
LCBib29sIGlzRGlyZWN0KTsKICAgICAKICAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGU7IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9S
ZXNvbHZlR2xvYmFsU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUmVzb2x2ZUdsb2JhbFN0YXR1cy5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXNvbHZlR2xvYmFsU3RhdHVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBzdGF0aWMgUmVzb2x2ZUdsb2JhbFN0YXR1
cyBjb21wdXRlRm9yU3RyCiB7CiAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7CiAgICAg
SlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVj
dHVyZS0+Z2V0KCpjb2RlQmxvY2stPmdsb2JhbERhdGEoKSwgaWRlbnRpZmllciwgYXR0cmlidXRl
c0lnbm9yZWQsIHNwZWNpZmljVmFsdWUpOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0
cnVjdHVyZS0+Z2V0KCpjb2RlQmxvY2stPnZtKCksIGlkZW50aWZpZXIsIGF0dHJpYnV0ZXNJZ25v
cmVkLCBzcGVjaWZpY1ZhbHVlKTsKICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkK
ICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7CiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNl
dCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdU
b29sLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1NhbXBsaW5nVG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NywxMyArMjk3LDEzIEBA
IHZvaWQgU2FtcGxpbmdUb29sOjpzYW1wbGUoKQogICAgIHNfc2FtcGxpbmdUb29sLT5kb1J1bigp
OwogfQogCi12b2lkIFNhbXBsaW5nVG9vbDo6bm90aWZ5T2ZTY29wZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFNjcmlwdEV4ZWN1dGFibGUqIHNjcmlwdCkKK3ZvaWQgU2FtcGxpbmdUb29sOjpu
b3RpZnlPZlNjb3BlKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogc2NyaXB0KQogewogI2lmIEVO
QUJMRShDT0RFQkxPQ0tfU0FNUExJTkcpCiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc2NyaXB0
U2FtcGxlTWFwTXV0ZXgpOwotICAgIG1fc2NvcGVTYW1wbGVNYXAtPnNldChzY3JpcHQsIGFkb3B0
UHRyKG5ldyBTY3JpcHRTYW1wbGVSZWNvcmQoZ2xvYmFsRGF0YSwgc2NyaXB0KSkpOworICAgIG1f
c2NvcGVTYW1wbGVNYXAtPnNldChzY3JpcHQsIGFkb3B0UHRyKG5ldyBTY3JpcHRTYW1wbGVSZWNv
cmQodm0sIHNjcmlwdCkpKTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbERhdGEpOwor
ICAgIFVOVVNFRF9QQVJBTSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHNjcmlwdCk7CiAjZW5kaWYK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29s
LmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
YW1wbGluZ1Rvb2wuaAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDggKzE4NSw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIHN0cnVjdCBJbnN0cnVjdGlvbjsKIAogICAgIHN0cnVjdCBTY3JpcHRTYW1w
bGVSZWNvcmQgewotICAgICAgICBTY3JpcHRTYW1wbGVSZWNvcmQoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlKQotICAgICAgICAgICAgOiBtX2V4
ZWN1dGFibGUoZ2xvYmFsRGF0YSwgZXhlY3V0YWJsZSkKKyAgICAgICAgU2NyaXB0U2FtcGxlUmVj
b3JkKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZSkKKyAgICAgICAgICAgIDog
bV9leGVjdXRhYmxlKHZtLCBleGVjdXRhYmxlKQogICAgICAgICAgICAgLCBtX2NvZGVCbG9jaygw
KQogICAgICAgICAgICAgLCBtX3NhbXBsZUNvdW50KDApCiAgICAgICAgICAgICAsIG1fb3Bjb2Rl
U2FtcGxlQ291bnQoMCkKQEAgLTI4MSw3ICsyODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXR1cCgpOwogICAgICAgICB2b2lkIGR1bXAoRXhl
Y1N0YXRlKik7CiAKLSAgICAgICAgdm9pZCBub3RpZnlPZlNjb3BlKEpTR2xvYmFsRGF0YSYsIFNj
cmlwdEV4ZWN1dGFibGUqIHNjb3BlKTsKKyAgICAgICAgdm9pZCBub3RpZnlPZlNjb3BlKFZNJiwg
U2NyaXB0RXhlY3V0YWJsZSogc2NvcGUpOwogCiAgICAgICAgIHZvaWQgc2FtcGxlKENvZGVCbG9j
ayogY29kZUJsb2NrLCBJbnN0cnVjdGlvbiogdlBDKQogICAgICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2
aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSwyOCArMTAxLDI4IEBAIHN0cnVjdCBT
dHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgaW5pdEdldEJ5SWRT
ZWxmKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBi
YXNlT2JqZWN0U3RydWN0dXJlKQorICAgIHZvaWQgaW5pdEdldEJ5SWRTZWxmKFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlKQogICAgIHsKICAgICAg
ICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19nZXRfYnlfaWRfc2VsZjsKIAotICAgICAgICB1LmdldEJ5
SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBiYXNlT2Jq
ZWN0U3RydWN0dXJlKTsKKyAgICAgICAgdS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJl
LnNldCh2bSwgb3duZXIsIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOwogICAgIH0KIAotICAgIHZvaWQg
aW5pdEdldEJ5SWRQcm90byhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIs
IFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1
Y3R1cmUsIGJvb2wgaXNEaXJlY3QpCisgICAgdm9pZCBpbml0R2V0QnlJZFByb3RvKFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlLCBTdHJ1Y3R1cmUq
IHByb3RvdHlwZVN0cnVjdHVyZSwgYm9vbCBpc0RpcmVjdCkKICAgICB7CiAgICAgICAgIGFjY2Vz
c1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvOwogCi0gICAgICAgIHUuZ2V0QnlJZFByb3Rv
LmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBiYXNlT2JqZWN0U3Ry
dWN0dXJlKTsKLSAgICAgICAgdS5nZXRCeUlkUHJvdG8ucHJvdG90eXBlU3RydWN0dXJlLnNldChn
bG9iYWxEYXRhLCBvd25lciwgcHJvdG90eXBlU3RydWN0dXJlKTsKKyAgICAgICAgdS5nZXRCeUlk
UHJvdG8uYmFzZU9iamVjdFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBiYXNlT2JqZWN0U3RydWN0
dXJlKTsKKyAgICAgICAgdS5nZXRCeUlkUHJvdG8ucHJvdG90eXBlU3RydWN0dXJlLnNldCh2bSwg
b3duZXIsIHByb3RvdHlwZVN0cnVjdHVyZSk7CiAgICAgICAgIHUuZ2V0QnlJZFByb3RvLmlzRGly
ZWN0ID0gaXNEaXJlY3Q7CiAgICAgfQogCi0gICAgdm9pZCBpbml0R2V0QnlJZENoYWluKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBiYXNlT2JqZWN0
U3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHVuc2lnbmVkIGNvdW50LCBib29sIGlz
RGlyZWN0KQorICAgIHZvaWQgaW5pdEdldEJ5SWRDaGFpbihWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCB1
bnNpZ25lZCBjb3VudCwgYm9vbCBpc0RpcmVjdCkKICAgICB7CiAgICAgICAgIGFjY2Vzc1R5cGUg
PSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluOwogCi0gICAgICAgIHUuZ2V0QnlJZENoYWluLmJhc2VP
YmplY3RTdHJ1Y3R1cmUuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBiYXNlT2JqZWN0U3RydWN0dXJl
KTsKLSAgICAgICAgdS5nZXRCeUlkQ2hhaW4uY2hhaW4uc2V0KGdsb2JhbERhdGEsIG93bmVyLCBj
aGFpbik7CisgICAgICAgIHUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KHZt
LCBvd25lciwgYmFzZU9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIHUuZ2V0QnlJZENoYWluLmNo
YWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKICAgICAgICAgdS5nZXRCeUlkQ2hhaW4uY291bnQg
PSBjb3VudDsKICAgICAgICAgdS5nZXRCeUlkQ2hhaW4uaXNEaXJlY3QgPSBpc0RpcmVjdDsKICAg
ICB9CkBAIC0xNDUsMjMgKzE0NSwyMyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogCiAg
ICAgLy8gUHV0QnlJZCoKIAotICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVj
dHVyZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgYm9vbCBp
c0RpcmVjdCkKKyAgICB2b2lkIGluaXRQdXRCeUlkVHJhbnNpdGlvbihWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIGJvb2wgaXNEaXJlY3QpCiAgICAgewogICAgICAgICBp
ZiAoaXNEaXJlY3QpCiAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF90
cmFuc2l0aW9uX2RpcmVjdDsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYWNjZXNzVHlwZSA9
IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw7CiAKLSAgICAgICAgdS5wdXRCeUlk
VHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHByZXZp
b3VzU3RydWN0dXJlKTsKLSAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuc2V0
KGdsb2JhbERhdGEsIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0
aW9uLmNoYWluLnNldChnbG9iYWxEYXRhLCBvd25lciwgY2hhaW4pOworICAgICAgICB1LnB1dEJ5
SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHByZXZpb3VzU3Ry
dWN0dXJlKTsKKyAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuc2V0KHZtLCBv
d25lciwgc3RydWN0dXJlKTsKKyAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5zZXQo
dm0sIG93bmVyLCBjaGFpbik7CiAgICAgfQogCi0gICAgdm9pZCBpbml0UHV0QnlJZFJlcGxhY2Uo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VP
YmplY3RTdHJ1Y3R1cmUpCisgICAgdm9pZCBpbml0UHV0QnlJZFJlcGxhY2UoVk0mIHZtLCBKU0Nl
bGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUpCiAgICAgewogICAgICAg
ICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOwogICAgIAotICAgICAgICB1
LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KGdsb2JhbERhdGEsIG93bmVy
LCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKKyAgICAgICAgdS5wdXRCeUlkUmVwbGFjZS5iYXNlT2Jq
ZWN0U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOwogICAgIH0K
ICAgICAgICAgCiAgICAgdm9pZCBpbml0UHV0QnlJZExpc3QoUG9seW1vcnBoaWNQdXRCeUlkTGlz
dCogbGlzdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDcsOSArNDcsOSBAQCBjb25zdCBDbGFzc0luZm8gVW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
CiBjb25zdCBDbGFzc0luZm8gVW5saW5rZWRFdmFsQ29kZUJsb2NrOjpzX2luZm8gPSB7ICJVbmxp
bmtlZEV2YWxDb2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKFVubGlua2VkRXZhbENvZGVCbG9jaykgfTsKIGNvbnN0IENsYXNzSW5mbyBVbmxpbmtlZEZ1
bmN0aW9uQ29kZUJsb2NrOjpzX2luZm8gPSB7ICJVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrIiwg
JkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrKSB9OwogCi1zdGF0aWMgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogZ2VuZXJh
dGVGdW5jdGlvbkNvZGVCbG9jayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTU2NvcGUqIHNj
b3BlLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgY29uc3QgU291cmNl
Q29kZSYgc291cmNlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIERlYnVnZ2VyTW9kZSBk
ZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUsIFBhcnNlckVycm9yJiBlcnJv
cikKK3N0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBnZW5lcmF0ZUZ1bmN0aW9uQ29k
ZUJsb2NrKFZNJiB2bSwgSlNTY29wZSogc2NvcGUsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KiBleGVjdXRhYmxlLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCwgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2Zp
bGVyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yKQogewotICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlO
b2RlPiBib2R5ID0gcGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4oJmdsb2JhbERhdGEsIHNvdXJjZSwg
ZXhlY3V0YWJsZS0+cGFyYW1ldGVycygpLCBleGVjdXRhYmxlLT5uYW1lKCksIGV4ZWN1dGFibGUt
PmlzSW5TdHJpY3RDb250ZXh0KCkgPyBKU1BhcnNlU3RyaWN0IDogSlNQYXJzZU5vcm1hbCwgSlNQ
YXJzZUZ1bmN0aW9uQ29kZSwgZXJyb3IpOworICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBi
b2R5ID0gcGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4oJnZtLCBzb3VyY2UsIGV4ZWN1dGFibGUtPnBh
cmFtZXRlcnMoKSwgZXhlY3V0YWJsZS0+bmFtZSgpLCBleGVjdXRhYmxlLT5pc0luU3RyaWN0Q29u
dGV4dCgpID8gSlNQYXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWwsIEpTUGFyc2VGdW5jdGlvbkNv
ZGUsIGVycm9yKTsKIAogICAgIGlmICghYm9keSkgewogICAgICAgICBBU1NFUlQoZXJyb3IubV90
eXBlICE9IFBhcnNlckVycm9yOjpFcnJvck5vbmUpOwpAQCAtNjEsOCArNjEsOCBAQCBzdGF0aWMg
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogZ2VuZXJhCiAgICAgYm9keS0+ZmluaXNoUGFyc2lu
ZyhleGVjdXRhYmxlLT5wYXJhbWV0ZXJzKCksIGV4ZWN1dGFibGUtPm5hbWUoKSwgZXhlY3V0YWJs
ZS0+ZnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xlKCkpOwogICAgIGV4ZWN1dGFibGUtPnJlY29y
ZFBhcnNlKGJvZHktPmZlYXR1cmVzKCksIGJvZHktPmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIGJv
ZHktPmxpbmVObygpLCBib2R5LT5sYXN0TGluZSgpKTsKICAgICAKLSAgICBVbmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrKiByZXN1bHQgPSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGUo
Jmdsb2JhbERhdGEsIEZ1bmN0aW9uQ29kZSwgRXhlY3V0YWJsZUluZm8oYm9keS0+bmVlZHNBY3Rp
dmF0aW9uKCksIGJvZHktPnVzZXNFdmFsKCksIGJvZHktPmlzU3RyaWN0TW9kZSgpLCBraW5kID09
IENvZGVGb3JDb25zdHJ1Y3QpKTsKLSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVy
YXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoZ2xvYmFsRGF0YSwgc2NvcGUsIGJv
ZHkuZ2V0KCksIHJlc3VsdCwgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUpKSk7CisgICAgVW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jayogcmVzdWx0ID0gVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
azo6Y3JlYXRlKCZ2bSwgRnVuY3Rpb25Db2RlLCBFeGVjdXRhYmxlSW5mbyhib2R5LT5uZWVkc0Fj
dGl2YXRpb24oKSwgYm9keS0+dXNlc0V2YWwoKSwgYm9keS0+aXNTdHJpY3RNb2RlKCksIGtpbmQg
PT0gQ29kZUZvckNvbnN0cnVjdCkpOworICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2Vu
ZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcih2bSwgc2NvcGUsIGJvZHkuZ2V0
KCksIHJlc3VsdCwgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUpKSk7CiAgICAgZXJyb3IgPSBn
ZW5lcmF0b3ItPmdlbmVyYXRlKCk7CiAgICAgYm9keS0+ZGVzdHJveURhdGEoKTsKICAgICBpZiAo
ZXJyb3IubV90eXBlICE9IFBhcnNlckVycm9yOjpFcnJvck5vbmUpCkBAIC04MCw4ICs4MCw4IEBA
IHVuc2lnbmVkIFVubGlua2VkQ29kZUJsb2NrOjphZGRPckZpbmRDb24KICAgICByZXR1cm4gYWRk
Q29uc3RhbnQodik7CiB9CiAKLVVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uQm9keU5vZGUqIG5vZGUp
Ci0gICAgOiBCYXNlKCpnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCitVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvbkJvZHlOb2RlKiBub2Rl
KQorICAgIDogQmFzZSgqdm0sIHN0cnVjdHVyZSkKICAgICAsIG1fbnVtQ2FwdHVyZWRWYXJpYWJs
ZXMobm9kZS0+Y2FwdHVyZWRWYXJpYWJsZUNvdW50KCkpCiAgICAgLCBtX2ZvcmNlVXNlc0FyZ3Vt
ZW50cyhub2RlLT51c2VzQXJndW1lbnRzKCkpCiAgICAgLCBtX2lzSW5TdHJpY3RDb250ZXh0KG5v
ZGUtPmlzU3RyaWN0TW9kZSgpKQpAQCAtMTE4LDE5ICsxMTgsMTkgQEAgdm9pZCBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaAogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0
LT5tX3N5bWJvbFRhYmxlRm9yQ29uc3RydWN0KTsKIH0KIAotRnVuY3Rpb25FeGVjdXRhYmxlKiBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6bGluayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgc2l6ZV90IGxpbmVPZmZzZXQsIHNpemVfdCBzb3Vy
Y2VPZmZzZXQpCitGdW5jdGlvbkV4ZWN1dGFibGUqIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
OjpsaW5rKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBzaXplX3QgbGluZU9mZnNl
dCwgc2l6ZV90IHNvdXJjZU9mZnNldCkKIHsKICAgICB1bnNpZ25lZCBmaXJzdExpbmUgPSBsaW5l
T2Zmc2V0ICsgbV9maXJzdExpbmVPZmZzZXQ7CiAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBz
b3VyY2VPZmZzZXQgKyBtX3N0YXJ0T2Zmc2V0OwogICAgIFNvdXJjZUNvZGUgY29kZShzb3VyY2Uu
cHJvdmlkZXIoKSwgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0ICsgbV9zb3VyY2VMZW5ndGgsIGZp
cnN0TGluZSk7Ci0gICAgcmV0dXJuIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKGdsb2JhbERh
dGEsIGNvZGUsIHRoaXMsIGZpcnN0TGluZSwgZmlyc3RMaW5lICsgbV9saW5lQ291bnQpOworICAg
IHJldHVybiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSh2bSwgY29kZSwgdGhpcywgZmlyc3RM
aW5lLCBmaXJzdExpbmUgKyBtX2xpbmVDb3VudCk7CiB9CiAKIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUoY29uc3Qg
SWRlbnRpZmllciYgbmFtZSwgRXhlY1N0YXRlKiBleGVjLCBEZWJ1Z2dlciosIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSwgSlNPYmplY3QqKiBleGNlcHRpb24pCiB7CiAgICAgUGFyc2VyRXJyb3Ig
ZXJyb3I7Ci0gICAgQ29kZUNhY2hlKiBjb2RlQ2FjaGUgPSBleGVjLT5nbG9iYWxEYXRhKCkuY29k
ZUNhY2hlKCk7Ci0gICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBj
b2RlQ2FjaGUtPmdldEZ1bmN0aW9uRXhlY3V0YWJsZUZyb21HbG9iYWxDb2RlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgbmFtZSwgc291cmNlLCBlcnJvcik7CisgICAgQ29kZUNhY2hlKiBjb2RlQ2FjaGUg
PSBleGVjLT52bSgpLmNvZGVDYWNoZSgpOworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KiBleGVjdXRhYmxlID0gY29kZUNhY2hlLT5nZXRGdW5jdGlvbkV4ZWN1dGFibGVGcm9tR2xvYmFs
Q29kZShleGVjLT52bSgpLCBuYW1lLCBzb3VyY2UsIGVycm9yKTsKICAgICBpZiAoZXJyb3IubV90
eXBlICE9IFBhcnNlckVycm9yOjpFcnJvck5vbmUpIHsKICAgICAgICAgKmV4Y2VwdGlvbiA9IGVy
cm9yLnRvRXJyb3JPYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzb3VyY2UpOwog
ICAgICAgICByZXR1cm4gMDsKQEAgLTEzOSw3ICsxMzksNyBAQCBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSogVW5saW5rZWRGdW5jCiAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiB9CiAKLVVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2sqIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjb2RlQmxv
Y2tGb3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1Njb3BlKiBzY29wZSwgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2lu
ZCwgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwg
UGFyc2VyRXJyb3ImIGVycm9yKQorVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OmNvZGVCbG9ja0ZvcihWTSYgdm0sIEpTU2NvcGUqIHNjb3BlLCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6
YXRpb25LaW5kLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmls
ZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJyb3IpCiB7CiAgICAgc3dpdGNoIChzcGVjaWFsaXphdGlv
bktpbmQpIHsKICAgICBjYXNlIENvZGVGb3JDYWxsOgpAQCAtMTUyLDE5ICsxNTIsMTkgQEAgVW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jayogVW5saW5rZWRGdW5jdAogICAgICAgICBicmVhazsKICAg
ICB9CiAKLSAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1bHQgPSBnZW5lcmF0ZUZ1
bmN0aW9uQ29kZUJsb2NrKGdsb2JhbERhdGEsIHNjb3BlLCB0aGlzLCBzb3VyY2UsIHNwZWNpYWxp
emF0aW9uS2luZCwgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUsIGVycm9yKTsKKyAgICBVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1bHQgPSBnZW5lcmF0ZUZ1bmN0aW9uQ29kZUJsb2Nr
KHZtLCBzY29wZSwgdGhpcywgc291cmNlLCBzcGVjaWFsaXphdGlvbktpbmQsIGRlYnVnZ2VyTW9k
ZSwgcHJvZmlsZXJNb2RlLCBlcnJvcik7CiAgICAgCiAgICAgaWYgKGVycm9yLm1fdHlwZSAhPSBQ
YXJzZXJFcnJvcjo6RXJyb3JOb25lKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHN3aXRjaCAo
c3BlY2lhbGl6YXRpb25LaW5kKSB7CiAgICAgY2FzZSBDb2RlRm9yQ2FsbDoKLSAgICAgICAgbV9j
b2RlQmxvY2tGb3JDYWxsLnNldChnbG9iYWxEYXRhLCB0aGlzLCByZXN1bHQpOwotICAgICAgICBt
X3N5bWJvbFRhYmxlRm9yQ2FsbC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgcmVzdWx0LT5zeW1ib2xU
YWJsZSgpKTsKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLnNldCh2bSwgdGhpcywgcmVzdWx0
KTsKKyAgICAgICAgbV9zeW1ib2xUYWJsZUZvckNhbGwuc2V0KHZtLCB0aGlzLCByZXN1bHQtPnN5
bWJvbFRhYmxlKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6
Ci0gICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LnNldChnbG9iYWxEYXRhLCB0aGlzLCBy
ZXN1bHQpOwotICAgICAgICBtX3N5bWJvbFRhYmxlRm9yQ29uc3RydWN0LnNldChnbG9iYWxEYXRh
LCB0aGlzLCByZXN1bHQtPnN5bWJvbFRhYmxlKCkpOworICAgICAgICBtX2NvZGVCbG9ja0ZvckNv
bnN0cnVjdC5zZXQodm0sIHRoaXMsIHJlc3VsdCk7CisgICAgICAgIG1fc3ltYm9sVGFibGVGb3JD
b25zdHJ1Y3Quc2V0KHZtLCB0aGlzLCByZXN1bHQtPnN5bWJvbFRhYmxlKCkpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE4MiwxMiArMTgyLDEyIEBAIFN0
cmluZyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFyYW0KICAgICByZXR1cm4gYnVpbGRl
ci50b1N0cmluZygpOwogfQogCi1VbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2so
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUg
Y29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQotICAgIDogQmFzZSgqZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKQorVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVj
dXRhYmxlSW5mbyYgaW5mbykKKyAgICA6IEJhc2UoKnZtLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX251
bVZhcnMoMCkKICAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKDApCiAgICAgLCBtX251bVBhcmFt
ZXRlcnMoMCkKLSAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorICAgICwgbV92bSh2bSkK
ICAgICAsIG1fYXJndW1lbnRzUmVnaXN0ZXIoLTEpCiAgICAgLCBtX2dsb2JhbE9iamVjdFJlZ2lz
dGVyKC0xKQogICAgICwgbV9uZWVkc0Z1bGxTY29wZUNoYWluKGluZm8ubV9uZWVkc0FjdGl2YXRp
b24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDEwICs4
MSwxMCBAQCBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSA6IHB1YmxpCiBwdWJsaWM6
CiAgICAgZnJpZW5kIGNsYXNzIENvZGVDYWNoZTsKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwot
ICAgIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvbkJvZHlOb2Rl
KiBub2RlKQorICAgIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKFZN
KiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvbkJvZHlOb2RlKiBub2RlKQog
ICAgIHsKLSAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGluc3RhbmNlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KGdsb2Jh
bERhdGEtPmhlYXApKSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBnbG9i
YWxEYXRhLT51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgc291cmNl
LCBub2RlKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCpnbG9iYWxEYXRhKTsK
KyAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGluc3RhbmNlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLT5oZWFwKSkg
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUodm0sIHZtLT51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZVN0cnVjdHVyZS5nZXQoKSwgc291cmNlLCBub2RlKTsKKyAgICAgICAgaW5zdGFuY2UtPmZp
bmlzaENyZWF0aW9uKCp2bSk7CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKQEAg
LTEwNywxMSArMTA3LDExIEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBwYXJhbVN0cmluZygpIGNv
bnN0OwogCi0gICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrRm9yKEpTR2xv
YmFsRGF0YSYsIEpTU2NvcGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCwgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUsIFBhcnNlckVycm9yJik7CisgICAgVW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrRm9yKFZNJiwgSlNTY29wZSosIGNvbnN0
IFNvdXJjZUNvZGUmLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBEZWJ1Z2dlck1vZGUsIFByb2Zp
bGVyTW9kZSwgUGFyc2VyRXJyb3ImKTsKIAogICAgIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnJvbUdsb2JhbENvZGUoY29uc3QgSWRlbnRpZmllciYsIEV4ZWNTdGF0ZSosIERl
YnVnZ2VyKiwgY29uc3QgU291cmNlQ29kZSYsIEpTT2JqZWN0KiogZXhjZXB0aW9uKTsKIAotICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZSogbGluayhKU0dsb2JhbERhdGEmLCBjb25zdCBTb3VyY2VDb2Rl
Jiwgc2l6ZV90IGxpbmVPZmZzZXQsIHNpemVfdCBzb3VyY2VPZmZzZXQpOworICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogbGluayhWTSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBzaXplX3QgbGluZU9mZnNl
dCwgc2l6ZV90IHNvdXJjZU9mZnNldCk7CiAKICAgICB2b2lkIGNsZWFyQ29kZUZvclJlY29tcGls
YXRpb24oKQogICAgIHsKQEAgLTE0MCw3ICsxNDAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKIAogcHJpdmF0ZToKLSAgICBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZShKU0dsb2JhbERhdGEqLCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3VyY2VDb2RlJiwgRnVu
Y3Rpb25Cb2R5Tm9kZSopOworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNKiwgU3Ry
dWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0aW9uQm9keU5vZGUqKTsKICAgICBXcml0
ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDYWxsOwog
ICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPiBtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdDsKIApAQCAtMTY2LDE4ICsxNjYsMTggQEAgcHJpdmF0ZToKICAgICBGdW5jdGlv
bk5hbWVJc0luU2NvcGVUb2dnbGUgbV9mdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGU7CiAKIHBy
b3RlY3RlZDoKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICB7Ci0gICAgICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICBtX25hbWVWYWx1ZS5zZXQoZ2xv
YmFsRGF0YSwgdGhpcywganNTdHJpbmcoJmdsb2JhbERhdGEsIG5hbWUoKS5zdHJpbmcoKSkpOwor
ICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIG1fbmFtZVZhbHVlLnNl
dCh2bSwgdGhpcywganNTdHJpbmcoJnZtLCBuYW1lKCkuc3RyaW5nKCkpKTsKICAgICB9CiAKICAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKIHB1
YmxpYzoKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
KQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCiAgICAgewotICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlw
ZUluZm8oVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG8sIFR5cGVJbmZvKFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlVHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgSlNDZWxsOjpTdHJ1Y3R1
cmVGbGFnczsKQEAgLTI4Miw3ICsyODIsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBjcmVh
dGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CiAgICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX3JhcmVE
YXRhLT5tX3JlZ2V4cHMuc2l6ZSgpOwotICAgICAgICBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuYXBw
ZW5kKFdyaXRlQmFycmllcjxSZWdFeHA+KCptX2dsb2JhbERhdGEsIHRoaXMsIHIpKTsKKyAgICAg
ICAgbV9yYXJlRGF0YS0+bV9yZWdleHBzLmFwcGVuZChXcml0ZUJhcnJpZXI8UmVnRXhwPigqbV92
bSwgdGhpcywgcikpOwogICAgICAgICByZXR1cm4gc2l6ZTsKICAgICB9CiAgICAgdW5zaWduZWQg
bnVtYmVyT2ZSZWdFeHBzKCkgY29uc3QKQEAgLTMwNSw3ICszMDUsNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsK
ICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVua25vd24+
KCkpOwotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmxhc3QoKS5zZXQoKm1fZ2xvYmFsRGF0
YSwgdGhpcywgdik7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldCgqbV92
bSwgdGhpcywgdik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIHVuc2lnbmVk
IGFkZE9yRmluZENvbnN0YW50KEpTVmFsdWUpOwpAQCAtMzczLDcgKzM3Myw3IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOwog
ICAgICAgICBtX2Z1bmN0aW9uRGVjbHMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZT4oKSk7Ci0gICAgICAgIG1fZnVuY3Rpb25EZWNscy5sYXN0KCkuc2V0KCpt
X2dsb2JhbERhdGEsIHRoaXMsIG4pOworICAgICAgICBtX2Z1bmN0aW9uRGVjbHMubGFzdCgpLnNl
dCgqbV92bSwgdGhpcywgbik7CiAgICAgICAgIHJldHVybiBzaXplOwogICAgIH0KICAgICBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBpbmRleCkgeyByZXR1cm4g
bV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQpAQCAtMzgyLDcgKzM4Miw3IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX2Z1bmN0aW9uRXhwcnMuc2l6ZSgp
OwogICAgICAgICBtX2Z1bmN0aW9uRXhwcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZT4oKSk7Ci0gICAgICAgIG1fZnVuY3Rpb25FeHBycy5sYXN0KCkuc2V0
KCptX2dsb2JhbERhdGEsIHRoaXMsIG4pOworICAgICAgICBtX2Z1bmN0aW9uRXhwcnMubGFzdCgp
LnNldCgqbV92bSwgdGhpcywgbik7CiAgICAgICAgIHJldHVybiBzaXplOwogICAgIH0KICAgICBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeHByKGludCBpbmRleCkgeyByZXR1
cm4gbV9mdW5jdGlvbkV4cHJzW2luZGV4XS5nZXQoKTsgfQpAQCAtMzk1LDcgKzM5NSw3IEBAIHB1
YmxpYzoKIAogICAgIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3ltYm9sVGFibGUuZ2V0KCk7IH0KIAotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsRGF0YTsgfQorICAgIFZNKiB2bSgpIGNvbnN0IHsg
cmV0dXJuIG1fdm07IH0KIAogICAgIHVuc2lnbmVkIGFkZFJlc29sdmUoKSB7IHJldHVybiBtX3Jl
c29sdmVPcGVyYXRpb25Db3VudCsrOyB9CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZSZXNvbHZlT3Bl
cmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x2ZU9wZXJhdGlvbkNvdW50OyB9CkBAIC00
NzEsMTUgKzQ3MSwxNSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9saW5lQ291bnQ7IH0KIAogcHJvdGVjdGVkOgotICAgIFVubGlua2VkQ29kZUJs
b2NrKEpTR2xvYmFsRGF0YSosIFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxl
SW5mbyYpOworICAgIFVubGlua2VkQ29kZUJsb2NrKFZNKiwgU3RydWN0dXJlKiwgQ29kZVR5cGUs
IGNvbnN0IEV4ZWN1dGFibGVJbmZvJik7CiAgICAgflVubGlua2VkQ29kZUJsb2NrKCk7CiAKLSAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpOworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAg
ICAgIGlmIChjb2RlVHlwZSgpID09IEdsb2JhbENvZGUpCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIG1fc3ltYm9sVGFibGUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIFNoYXJlZFN5bWJvbFRh
YmxlOjpjcmVhdGUoZ2xvYmFsRGF0YSkpOworICAgICAgICBtX3N5bWJvbFRhYmxlLnNldCh2bSwg
dGhpcywgU2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZSh2bSkpOwogICAgIH0KIAogcHJpdmF0ZToK
QEAgLTQ5Myw3ICs0OTMsNyBAQCBwcml2YXRlOgogICAgIFJlZkNvdW50ZWRBcnJheTxVbmxpbmtl
ZEluc3RydWN0aW9uPiBtX3VubGlua2VkSW5zdHJ1Y3Rpb25zOwogCiAgICAgaW50IG1fbnVtUGFy
YW1ldGVyczsKLSAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKKyAgICBWTSogbV92bTsK
IAogICAgIGludCBtX3RoaXNSZWdpc3RlcjsKICAgICBpbnQgbV9hcmd1bWVudHNSZWdpc3RlcjsK
QEAgLTU3OCw4ICs1NzgsOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBVbmxpbmtlZENvZGVCbG9j
ayBCYXNlOwogCiBwcm90ZWN0ZWQ6Ci0gICAgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2soSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5
cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQotICAgICAgICA6IEJhc2UoZ2xvYmFsRGF0
YSwgc3RydWN0dXJlLCBjb2RlVHlwZSwgaW5mbykKKyAgICBVbmxpbmtlZEdsb2JhbENvZGVCbG9j
ayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3Qg
RXhlY3V0YWJsZUluZm8mIGluZm8pCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjb2Rl
VHlwZSwgaW5mbykKICAgICB7CiAgICAgfQogCkBAIC01OTEsMTAgKzU5MSwxMCBAQCBwcm90ZWN0
ZWQ6CiBjbGFzcyBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sgOiBwdWJsaWMgVW5saW5rZWRHbG9i
YWxDb2RlQmxvY2sgewogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZUNhY2hlOwotICAg
IHN0YXRpYyBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQorICAgIHN0YXRpYyBVbmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBp
bmZvKQogICAgIHsKLSAgICAgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4oZ2xv
YmFsRGF0YS0+aGVhcCkpIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayhnbG9iYWxEYXRhLCBnbG9i
YWxEYXRhLT51bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGluZm8pOwot
ICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKmdsb2JhbERhdGEpOworICAgICAgICBV
bmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkpIFVubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jayh2bSwgdm0tPnVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQo
KSwgaW5mbyk7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOwogICAgICAg
ICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCkBAIC02MDIsOSArNjAyLDkgQEAgcHVibGljOgog
ICAgIHR5cGVkZWYgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgQmFzZTsKICAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgdm9pZCBhZGRGdW5jdGlvbkRlY2xhcmF0aW9uKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSkKKyAgICB2b2lkIGFkZEZ1bmN0
aW9uRGVjbGFyYXRpb24oVk0mIHZtLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlKQogICAgIHsKLSAgICAgICAgbV9m
dW5jdGlvbkRlY2xhcmF0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobmFtZSwgV3JpdGVCYXJy
aWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPihnbG9iYWxEYXRhLCB0aGlzLCBmdW5jdGlv
bkV4ZWN1dGFibGUpKSk7CisgICAgICAgIG1fZnVuY3Rpb25EZWNsYXJhdGlvbnMuYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKG5hbWUsIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZT4odm0sIHRoaXMsIGZ1bmN0aW9uRXhlY3V0YWJsZSkpKTsKICAgICB9CiAKICAgICB2b2lkIGFk
ZFZhcmlhYmxlRGVjbGFyYXRpb24oY29uc3QgSWRlbnRpZmllciYgbmFtZSwgYm9vbCBpc0NvbnN0
YW50KQpAQCAtNjIxLDggKzYyMSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6Ci0gICAgVW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQotICAgICAgICA6IEJhc2UoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlLCBHbG9iYWxDb2RlLCBpbmZvKQorICAgIFVubGlua2VkUHJvZ3JhbUNv
ZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5m
byYgaW5mbykKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIEdsb2JhbENvZGUsIGluZm8p
CiAgICAgewogICAgIH0KIApAQCAtNjMwLDkgKzYzMCw5IEBAIHByaXZhdGU6CiAgICAgRnVuY3Rp
b25EZWNsYXRpb25zIG1fZnVuY3Rpb25EZWNsYXJhdGlvbnM7CiAKIHB1YmxpYzoKLSAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG8pCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oVW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5m
byhVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2tUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8p
OwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92
ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKQEAgLTY0NCwxMCAr
NjQ0LDEwIEBAIGNsYXNzIFVubGlua2VkRXZhbENvZGVCbG9jayA6IHB1YmxpYyBVbmwKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIENvZGVDYWNoZTsKIAotICAgIHN0YXRpYyBVbmxpbmtlZEV2
YWxDb2RlQmxvY2sqIGNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEV4ZWN1
dGFibGVJbmZvJiBpbmZvKQorICAgIHN0YXRpYyBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGNyZWF0
ZShWTSogdm0sIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQogICAgIHsKLSAgICAgICAgVW5s
aW5rZWRFdmFsQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PFVubGlua2VkRXZhbENvZGVCbG9jaz4oZ2xvYmFsRGF0YS0+aGVhcCkpIFVubGlua2VkRXZhbENv
ZGVCbG9jayhnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT51bmxpbmtlZEV2YWxDb2RlQmxvY2tTdHJ1
Y3R1cmUuZ2V0KCksIGluZm8pOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKmds
b2JhbERhdGEpOworICAgICAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRFdmFsQ29kZUJsb2NrPih2bS0+aGVhcCkp
IFVubGlua2VkRXZhbENvZGVCbG9jayh2bSwgdm0tPnVubGlua2VkRXZhbENvZGVCbG9ja1N0cnVj
dHVyZS5nZXQoKSwgaW5mbyk7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0p
OwogICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCkBAIC02NjQsMTcgKzY2NCwxNyBA
QCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIFVubGlua2VkRXZhbENvZGVCbG9jayhK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVj
dXRhYmxlSW5mbyYgaW5mbykKLSAgICAgICAgOiBCYXNlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSwg
RXZhbENvZGUsIGluZm8pCisgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQorICAgICAgICA6IEJh
c2Uodm0sIHN0cnVjdHVyZSwgRXZhbENvZGUsIGluZm8pCiAgICAgewogICAgIH0KIAogICAgIFZl
Y3RvcjxJZGVudGlmaWVyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV92YXJpYWJsZXM7CiAK
IHB1YmxpYzoKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvKQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCiAgICAgewotICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywg
VHlwZUluZm8oVW5saW5rZWRFdmFsQ29kZUJsb2NrVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvLCBUeXBlSW5mbyhVbmxpbmtlZEV2YWxDb2RlQmxvY2tUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsK
QEAgLTY4NCwxMCArNjg0LDEwIEBAIHB1YmxpYzoKIAogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9jayA6IHB1YmxpYyBVbmxpbmtlZENvZGVCbG9jayB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbykKKyAgICBz
dGF0aWMgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgQ29kZVR5cGUg
Y29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQogICAgIHsKLSAgICAgICAgVW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPihnbG9iYWxEYXRhLT5oZWFwKSkgVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jayhnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT51bmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBjb2RlVHlwZSwgaW5mbyk7Ci0gICAgICAgIGlu
c3RhbmNlLT5maW5pc2hDcmVhdGlvbigqZ2xvYmFsRGF0YSk7CisgICAgICAgIFVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4odm0tPmhlYXApKSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrKHZtLCB2bS0+dW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgY29k
ZVR5cGUsIGluZm8pOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtKTsKICAg
ICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIApAQCAtNjk1LDE1ICs2OTUsMTUgQEAgcHVi
bGljOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKIHByaXZhdGU6Ci0gICAg
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8m
IGluZm8pCi0gICAgICAgIDogQmFzZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGNvZGVUeXBlLCBp
bmZvKQorICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvKQor
ICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgY29kZVR5cGUsIGluZm8pCiAgICAgewogICAg
IH0KICAgICAKIHB1YmxpYzoKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvKQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCiAgICAgewot
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0
LCBwcm90bywgVHlwZUluZm8oVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1R5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1R5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6
OlN0cnVjdHVyZUZsYWdzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE0ODY4MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsMTIgKzE1NSwxMiBAQCB2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpwcmVzZXJ2ZUxhc3RWYXIoCiAgICAgICAgIG1fbGFzdFZhciA9ICZtX2NhbGxlZVJl
Z2lzdGVycy5sYXN0KCk7CiB9CiAKLUJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRv
cihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTU2NvcGUqLCBQcm9ncmFtTm9kZSogcHJvZ3Jh
bU5vZGUsIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrLCBEZWJ1Z2dlck1vZGUg
ZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlKQorQnl0ZWNvZGVHZW5lcmF0
b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgSlNTY29wZSosIFByb2dyYW1Ob2RlKiBwcm9n
cmFtTm9kZSwgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlYnVnZ2VyTW9k
ZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUpCiAgICAgOiBtX3Nob3Vs
ZEVtaXREZWJ1Z0hvb2tzKGRlYnVnZ2VyTW9kZSA9PSBEZWJ1Z2dlck9uKQogICAgICwgbV9zaG91
bGRFbWl0UHJvZmlsZUhvb2tzKHByb2ZpbGVyTW9kZSA9PSBQcm9maWxlck9uKQogICAgICwgbV9z
eW1ib2xUYWJsZSgwKQogICAgICwgbV9zY29wZU5vZGUocHJvZ3JhbU5vZGUpCi0gICAgLCBtX2Nv
ZGVCbG9jayhnbG9iYWxEYXRhLCBjb2RlQmxvY2spCisgICAgLCBtX2NvZGVCbG9jayh2bSwgY29k
ZUJsb2NrKQogICAgICwgbV90aGlzUmVnaXN0ZXIoQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZz
ZXQoKSkKICAgICAsIG1fZW1wdHlWYWx1ZVJlZ2lzdGVyKDApCiAgICAgLCBtX2dsb2JhbE9iamVj
dFJlZ2lzdGVyKDApCkBAIC0xNzMsNyArMTczLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVj
b2RlR2VuZXJhdG9yKEpTRwogICAgICwgbV9maXJzdExhenlGdW5jdGlvbigwKQogICAgICwgbV9s
YXN0TGF6eUZ1bmN0aW9uKDApCiAgICAgLCBtX3N0YXRpY1Byb3BlcnR5QW5hbHl6ZXIoJm1faW5z
dHJ1Y3Rpb25zKQotICAgICwgbV9nbG9iYWxEYXRhKCZnbG9iYWxEYXRhKQorICAgICwgbV92bSgm
dm0pCiAgICAgLCBtX2xhc3RPcGNvZGVJRChvcF9lbmQpCiAjaWZuZGVmIE5ERUJVRwogICAgICwg
bV9sYXN0T3Bjb2RlUG9zaXRpb24oMCkKQEAgLTE5NSw3ICsxOTUsNyBAQCBCeXRlY29kZUdlbmVy
YXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoSlNHCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBm
dW5jdGlvblN0YWNrLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1
bmN0aW9uID0gZnVuY3Rpb25TdGFja1tpXTsKICAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUqIHVubGlua2VkRnVuY3Rpb24gPSBtYWtlRnVuY3Rpb24oZnVuY3Rpb24pOwotICAgICAg
ICBjb2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVjbGFyYXRpb24oKm1fZ2xvYmFsRGF0YSwgZnVuY3Rp
b24tPmlkZW50KCksIHVubGlua2VkRnVuY3Rpb24pOworICAgICAgICBjb2RlQmxvY2stPmFkZEZ1
bmN0aW9uRGVjbGFyYXRpb24oKm1fdm0sIGZ1bmN0aW9uLT5pZGVudCgpLCB1bmxpbmtlZEZ1bmN0
aW9uKTsKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhclN0YWNrLnNpemUo
KTsgKytpKQpAQCAtMjAzLDEzICsyMDMsMTMgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2Rl
R2VuZXJhdG9yKEpTRwogCiB9CiAKLUJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRv
cihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTU2NvcGUqIHNjb3BlLCBGdW5jdGlvbkJvZHlO
b2RlKiBmdW5jdGlvbkJvZHksIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaywg
RGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSkKK0J5
dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYgdm0sIEpTU2NvcGUqIHNjb3Bl
LCBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHksIFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2sqIGNvZGVCbG9jaywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHBy
b2ZpbGVyTW9kZSkKICAgICA6IG1fc2hvdWxkRW1pdERlYnVnSG9va3MoZGVidWdnZXJNb2RlID09
IERlYnVnZ2VyT24pCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3MocHJvZmlsZXJNb2Rl
ID09IFByb2ZpbGVyT24pCiAgICAgLCBtX3N5bWJvbFRhYmxlKGNvZGVCbG9jay0+c3ltYm9sVGFi
bGUoKSkKICAgICAsIG1fc2NvcGVOb2RlKGZ1bmN0aW9uQm9keSkKLSAgICAsIG1fc2NvcGUoZ2xv
YmFsRGF0YSwgc2NvcGUpCi0gICAgLCBtX2NvZGVCbG9jayhnbG9iYWxEYXRhLCBjb2RlQmxvY2sp
CisgICAgLCBtX3Njb3BlKHZtLCBzY29wZSkKKyAgICAsIG1fY29kZUJsb2NrKHZtLCBjb2RlQmxv
Y2spCiAgICAgLCBtX2FjdGl2YXRpb25SZWdpc3RlcigwKQogICAgICwgbV9lbXB0eVZhbHVlUmVn
aXN0ZXIoMCkKICAgICAsIG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXIoMCkKQEAgLTIyMiw3ICsyMjIs
NyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoSlNHCiAgICAgLCBtX2Zp
cnN0TGF6eUZ1bmN0aW9uKDApCiAgICAgLCBtX2xhc3RMYXp5RnVuY3Rpb24oMCkKICAgICAsIG1f
c3RhdGljUHJvcGVydHlBbmFseXplcigmbV9pbnN0cnVjdGlvbnMpCi0gICAgLCBtX2dsb2JhbERh
dGEoJmdsb2JhbERhdGEpCisgICAgLCBtX3ZtKCZ2bSkKICAgICAsIG1fbGFzdE9wY29kZUlEKG9w
X2VuZCkKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX2xhc3RPcGNvZGVQb3NpdGlvbigwKQpAQCAt
NDAwLDEzICs0MDAsMTMgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEpT
RwogICAgIH0KIH0KIAotQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNTY29wZSogc2NvcGUsIEV2YWxOb2RlKiBldmFsTm9kZSwg
VW5saW5rZWRFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1v
ZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUpCitCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNv
ZGVHZW5lcmF0b3IoVk0mIHZtLCBKU1Njb3BlKiBzY29wZSwgRXZhbE5vZGUqIGV2YWxOb2RlLCBV
bmxpbmtlZEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jaywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9k
ZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSkKICAgICA6IG1fc2hvdWxkRW1pdERlYnVnSG9v
a3MoZGVidWdnZXJNb2RlID09IERlYnVnZ2VyT24pCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxl
SG9va3MocHJvZmlsZXJNb2RlID09IFByb2ZpbGVyT24pCiAgICAgLCBtX3N5bWJvbFRhYmxlKGNv
ZGVCbG9jay0+c3ltYm9sVGFibGUoKSkKICAgICAsIG1fc2NvcGVOb2RlKGV2YWxOb2RlKQotICAg
ICwgbV9zY29wZShnbG9iYWxEYXRhLCBzY29wZSkKLSAgICAsIG1fY29kZUJsb2NrKGdsb2JhbERh
dGEsIGNvZGVCbG9jaykKKyAgICAsIG1fc2NvcGUodm0sIHNjb3BlKQorICAgICwgbV9jb2RlQmxv
Y2sodm0sIGNvZGVCbG9jaykKICAgICAsIG1fdGhpc1JlZ2lzdGVyKENhbGxGcmFtZTo6dGhpc0Fy
Z3VtZW50T2Zmc2V0KCkpCiAgICAgLCBtX2VtcHR5VmFsdWVSZWdpc3RlcigwKQogICAgICwgbV9n
bG9iYWxPYmplY3RSZWdpc3RlcigwKQpAQCAtNDE5LDcgKzQxOSw3IEBAIEJ5dGVjb2RlR2VuZXJh
dG9yOjpCeXRlY29kZUdlbmVyYXRvcihKU0cKICAgICAsIG1fZmlyc3RMYXp5RnVuY3Rpb24oMCkK
ICAgICAsIG1fbGFzdExhenlGdW5jdGlvbigwKQogICAgICwgbV9zdGF0aWNQcm9wZXJ0eUFuYWx5
emVyKCZtX2luc3RydWN0aW9ucykKLSAgICAsIG1fZ2xvYmFsRGF0YSgmZ2xvYmFsRGF0YSkKKyAg
ICAsIG1fdm0oJnZtKQogICAgICwgbV9sYXN0T3Bjb2RlSUQob3BfZW5kKQogI2lmbmRlZiBOREVC
VUcKICAgICAsIG1fbGFzdE9wY29kZVBvc2l0aW9uKDApCkBAIC05NTgsNyArOTU4LDcgQEAgdW5z
aWduZWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0YW50KAogICAgIFN0cmluZ0ltcGwqIHJl
cCA9IGlkZW50LmltcGwoKTsKICAgICBJZGVudGlmaWVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0g
bV9pZGVudGlmaWVyTWFwLmFkZChyZXAsIG1fY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJz
KCkpOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgbV9jb2RlQmxvY2stPmFk
ZElkZW50aWZpZXIoSWRlbnRpZmllcihtX2dsb2JhbERhdGEsIHJlcCkpOworICAgICAgICBtX2Nv
ZGVCbG9jay0+YWRkSWRlbnRpZmllcihJZGVudGlmaWVyKG1fdm0sIHJlcCkpOwogCiAgICAgcmV0
dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CkBAIC0xMTQ3LDcgKzExNDcsNyBAQCBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoCiB7CiAgICAgSlNTdHJpbmcqJiBz
dHJpbmdJbk1hcCA9IG1fc3RyaW5nTWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgMCkuaXRlcmF0
b3ItPnZhbHVlOwogICAgIGlmICghc3RyaW5nSW5NYXApCi0gICAgICAgIHN0cmluZ0luTWFwID0g
anNPd25lZFN0cmluZyhnbG9iYWxEYXRhKCksIGlkZW50aWZpZXIuc3RyaW5nKCkpOworICAgICAg
ICBzdHJpbmdJbk1hcCA9IGpzT3duZWRTdHJpbmcodm0oKSwgaWRlbnRpZmllci5zdHJpbmcoKSk7
CiAgICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwgSlNWYWx1ZShzdHJpbmdJbk1hcCkpOwogfQogCkBA
IC0xNDgxLDcgKzE0ODEsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERp
cmVjCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZCgwKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoCi0gICAgICAgIHByb3BlcnR5ICE9
IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvCisgICAgICAgIHBy
b3BlcnR5ICE9IG1fdm0tPnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bwogICAgICAgICAm
JiBQcm9wZXJ0eU5hbWUocHJvcGVydHkpLmFzSW5kZXgoKSA9PSBQcm9wZXJ0eU5hbWU6Ok5vdEFu
SW5kZXgpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KQEAgLTE2MTQsNyArMTYxNCw3IEBAIEpTU3Ry
aW5nKiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkU3RyaW5nQ28KIHsKICAgICBKU1N0cmluZyomIHN0
cmluZ0luTWFwID0gbV9zdHJpbmdNYXAuYWRkKGlkZW50aWZpZXIuaW1wbCgpLCAwKS5pdGVyYXRv
ci0+dmFsdWU7CiAgICAgaWYgKCFzdHJpbmdJbk1hcCkgewotICAgICAgICBzdHJpbmdJbk1hcCA9
IGpzU3RyaW5nKGdsb2JhbERhdGEoKSwgaWRlbnRpZmllci5zdHJpbmcoKSk7CisgICAgICAgIHN0
cmluZ0luTWFwID0ganNTdHJpbmcodm0oKSwgaWRlbnRpZmllci5zdHJpbmcoKSk7CiAgICAgICAg
IGFkZENvbnN0YW50VmFsdWUoc3RyaW5nSW5NYXApOwogICAgIH0KICAgICByZXR1cm4gc3RyaW5n
SW5NYXA7CkBAIC0xNzYwLDkgKzE3NjAsOSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdENhbGxFCiAKIEV4cGVjdGVkRnVuY3Rpb24gQnl0ZWNvZGVHZW5lcmF0b3I6OmV4cGVj
dGVkRnVuY3Rpb25Gb3JJZGVudGlmaWVyKGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7
Ci0gICAgaWYgKGlkZW50aWZpZXIgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5PYmpl
Y3QpCisgICAgaWYgKGlkZW50aWZpZXIgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+T2JqZWN0KQog
ICAgICAgICByZXR1cm4gRXhwZWN0T2JqZWN0Q29uc3RydWN0b3I7Ci0gICAgaWYgKGlkZW50aWZp
ZXIgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5BcnJheSkKKyAgICBpZiAoaWRlbnRp
ZmllciA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5BcnJheSkKICAgICAgICAgcmV0dXJuIEV4cGVj
dEFycmF5Q29uc3RydWN0b3I7CiAgICAgcmV0dXJuIE5vRXhwZWN0ZWRGdW5jdGlvbjsKIH0KQEAg
LTIzNjUsNyArMjM2NSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BUcnlB
bmQKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBlbWl0T3Bjb2RlKG9wX3Rocm93X3N0YXRpY19lcnJv
cik7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50VmFsdWUoanNTdHJpbmco
Z2xvYmFsRGF0YSgpLCBtZXNzYWdlKSktPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChhZGRDb25zdGFudFZhbHVlKGpzU3RyaW5nKHZtKCksIG1lc3NhZ2UpKS0+aW5kZXgoKSk7
CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRydWUpOwogfQogCkBAIC0yNTIzLDcgKzI1MjMs
NyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVhZE9ubHlFeGNlCiAgICAgaWYgKCFp
c1N0cmljdE1vZGUoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGVtaXRPcGNvZGUob3BfdGhyb3df
c3RhdGljX2Vycm9yKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnRWYWx1
ZShqc1N0cmluZyhnbG9iYWxEYXRhKCksIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVF
cnJvcikpLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnRW
YWx1ZShqc1N0cmluZyh2bSgpLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3Ip
KS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZhbHNlKTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQs
MTQgKzI0NCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdHlwZWRlZiBEZWNsYXJhdGlv
blN0YWNrczo6VmFyU3RhY2sgVmFyU3RhY2s7CiAgICAgICAgIHR5cGVkZWYgRGVjbGFyYXRpb25T
dGFja3M6OkZ1bmN0aW9uU3RhY2sgRnVuY3Rpb25TdGFjazsKIAotICAgICAgICBCeXRlY29kZUdl
bmVyYXRvcihKU0dsb2JhbERhdGEmLCBKU1Njb3BlKiwgUHJvZ3JhbU5vZGUqLCBVbmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2sqLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSk7Ci0gICAgICAgIEJ5
dGVjb2RlR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSYsIEpTU2NvcGUqLCBGdW5jdGlvbkJvZHlOb2Rl
KiwgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayosIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2Rl
KTsKLSAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoSlNHbG9iYWxEYXRhJiwgSlNTY29wZSosIEV2
YWxOb2RlKiwgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiwgRGVidWdnZXJNb2RlLCBQcm9maWxlck1v
ZGUpOworICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihWTSYsIEpTU2NvcGUqLCBQcm9ncmFtTm9k
ZSosIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayosIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2Rl
KTsKKyAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoVk0mLCBKU1Njb3BlKiwgRnVuY3Rpb25Cb2R5
Tm9kZSosIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVy
TW9kZSk7CisgICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKFZNJiwgSlNTY29wZSosIEV2YWxOb2Rl
KiwgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiwgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUpOwog
CiAgICAgICAgIH5CeXRlY29kZUdlbmVyYXRvcigpOwogICAgICAgICAKLSAgICAgICAgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxEYXRhOyB9Ci0gICAg
ICAgIGNvbnN0IENvbW1vbklkZW50aWZpZXJzJiBwcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1
cm4gKm1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lczsgfQorICAgICAgICBWTSogdm0oKSBjb25z
dCB7IHJldHVybiBtX3ZtOyB9CisgICAgICAgIGNvbnN0IENvbW1vbklkZW50aWZpZXJzJiBwcm9w
ZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gKm1fdm0tPnByb3BlcnR5TmFtZXM7IH0KIAogICAg
ICAgICBib29sIGlzQ29uc3RydWN0b3IoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdHJ1
Y3RvcigpOyB9CiAKQEAgLTY0Myw3ICs2NDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
CiAgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBtYWtlRnVuY3Rpb24oRnVuY3Rp
b25Cb2R5Tm9kZSogYm9keSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUobV9nbG9iYWxEYXRhLCBtX3Njb3BlTm9kZS0+c291
cmNlKCksIGJvZHkpOworICAgICAgICAgICAgcmV0dXJuIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlOjpjcmVhdGUobV92bSwgbV9zY29wZU5vZGUtPnNvdXJjZSgpLCBib2R5KTsKICAgICAgICAg
fQogCiAgICAgICAgIEpTU3RyaW5nKiBhZGRTdHJpbmdDb25zdGFudChjb25zdCBJZGVudGlmaWVy
Jik7CkBAIC04MTksNyArODE5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgU3RhdGlj
UHJvcGVydHlBbmFseXplciBtX3N0YXRpY1Byb3BlcnR5QW5hbHl6ZXI7CiAKLSAgICAgICAgSlNH
bG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CisgICAgICAgIFZNKiBtX3ZtOwogCiAgICAgICAgIE9w
Y29kZUlEIG1fbGFzdE9wY29kZUlEOwogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlz
aW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXND
b2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIFJlZ2lzdGVySUQq
IFJlZ0V4cE5vZGU6OmVtaXRCeXRlY29kZShCeXQKIHsKICAgICBpZiAoZHN0ID09IGdlbmVyYXRv
ci5pZ25vcmVkUmVzdWx0KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBnZW5lcmF0
b3IuZW1pdE5ld1JlZ0V4cChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBSZWdFeHA6
OmNyZWF0ZSgqZ2VuZXJhdG9yLmdsb2JhbERhdGEoKSwgbV9wYXR0ZXJuLnN0cmluZygpLCByZWdF
eHBGbGFncyhtX2ZsYWdzLnN0cmluZygpKSkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5l
d1JlZ0V4cChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBSZWdFeHA6OmNyZWF0ZSgq
Z2VuZXJhdG9yLnZtKCksIG1fcGF0dGVybi5zdHJpbmcoKSwgcmVnRXhwRmxhZ3MobV9mbGFncy5z
dHJpbmcoKSkpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXNO
b2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIxMCw3ICsyMTAs
NyBAQCBib29sIEFycmF5Tm9kZTo6aXNTaW1wbGVBcnJheSgpIGNvbnN0CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLUFyZ3VtZW50TGlzdE5vZGUqIEFycmF5Tm9kZTo6dG9Bcmd1bWVudExpc3QoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51bWJlciwgaW50IGNoYXJQb3NpdGlvbikg
Y29uc3QKK0FyZ3VtZW50TGlzdE5vZGUqIEFycmF5Tm9kZTo6dG9Bcmd1bWVudExpc3QoVk0qIHZt
LCBpbnQgbGluZU51bWJlciwgaW50IGNoYXJQb3NpdGlvbikgY29uc3QKIHsKICAgICBBU1NFUlQo
IW1fZWxpc2lvbiAmJiAhbV9vcHRpb25hbCk7CiAgICAgRWxlbWVudE5vZGUqIHB0ciA9IG1fZWxl
bWVudDsKQEAgLTIxOSwxMiArMjE5LDEyIEBAIEFyZ3VtZW50TGlzdE5vZGUqIEFycmF5Tm9kZTo6
dG9Bcmd1bWVudEwKICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb247CiAgICAgbG9jYXRpb24u
bGluZSA9IGxpbmVOdW1iZXI7CiAgICAgbG9jYXRpb24uY2hhclBvc2l0aW9uID0gY2hhclBvc2l0
aW9uOwotICAgIEFyZ3VtZW50TGlzdE5vZGUqIGhlYWQgPSBuZXcgKGdsb2JhbERhdGEpIEFyZ3Vt
ZW50TGlzdE5vZGUobG9jYXRpb24sIHB0ci0+dmFsdWUoKSk7CisgICAgQXJndW1lbnRMaXN0Tm9k
ZSogaGVhZCA9IG5ldyAodm0pIEFyZ3VtZW50TGlzdE5vZGUobG9jYXRpb24sIHB0ci0+dmFsdWUo
KSk7CiAgICAgQXJndW1lbnRMaXN0Tm9kZSogdGFpbCA9IGhlYWQ7CiAgICAgcHRyID0gcHRyLT5u
ZXh0KCk7CiAgICAgZm9yICg7IHB0cjsgcHRyID0gcHRyLT5uZXh0KCkpIHsKICAgICAgICAgQVNT
RVJUKCFwdHItPmVsaXNpb24oKSk7Ci0gICAgICAgIHRhaWwgPSBuZXcgKGdsb2JhbERhdGEpIEFy
Z3VtZW50TGlzdE5vZGUobG9jYXRpb24sIHRhaWwsIHB0ci0+dmFsdWUoKSk7CisgICAgICAgIHRh
aWwgPSBuZXcgKHZtKSBBcmd1bWVudExpc3ROb2RlKGxvY2F0aW9uLCB0YWlsLCBwdHItPnZhbHVl
KCkpOwogICAgIH0KICAgICByZXR1cm4gaGVhZDsKIH0KQEAgLTU1Niw3ICs1NTYsNyBAQCBSZWdp
c3RlcklEKiBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtCiAgICAgICAgICAgICAgICAgaWYg
KG1fYXJncy0+bV9saXN0Tm9kZS0+bV9uZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChtX2FyZ3MtPm1fbGlzdE5vZGUtPm1fbmV4dC0+bV9leHByLT5pc1NpbXBsZUFycmF5KCkpOwog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW1fYXJncy0+bV9saXN0Tm9kZS0+bV9uZXh0LT5t
X25leHQpOwotICAgICAgICAgICAgICAgICAgICBtX2FyZ3MtPm1fbGlzdE5vZGUgPSBzdGF0aWNf
Y2FzdDxBcnJheU5vZGUqPihtX2FyZ3MtPm1fbGlzdE5vZGUtPm1fbmV4dC0+bV9leHByKS0+dG9B
cmd1bWVudExpc3QoZ2VuZXJhdG9yLmdsb2JhbERhdGEoKSwgMCwgMCk7CisgICAgICAgICAgICAg
ICAgICAgIG1fYXJncy0+bV9saXN0Tm9kZSA9IHN0YXRpY19jYXN0PEFycmF5Tm9kZSo+KG1fYXJn
cy0+bV9saXN0Tm9kZS0+bV9uZXh0LT5tX2V4cHIpLT50b0FyZ3VtZW50TGlzdChnZW5lcmF0b3Iu
dm0oKSwgMCwgMCk7CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZWFs
RnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihk
c3QpLCBiYXNlLmdldCgpKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxs
QXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgICAgICAgICAgICAgZ2VuZXJh
dG9yLmVtaXROb2RlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG9sZExpc3QtPm1fZXhw
cik7CkBAIC0xMTMwLDcgKzExMzAsNyBAQCBSZWdpc3RlcklEKiBJbnN0YW5jZU9mTm9kZTo6ZW1p
dEJ5dGVjb2RlCiAgICAgZ2VuZXJhdG9yLmVtaXRDaGVja0hhc0luc3RhbmNlKGRzdFJlZy5nZXQo
KSwgc3JjMS5nZXQoKSwgc3JjMi5nZXQoKSwgdGFyZ2V0LmdldCgpKTsKIAogICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkp
OwotICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChwcm90b3R5cGUuZ2V0KCksIHNyYzIuZ2V0KCks
IGdlbmVyYXRvci5nbG9iYWxEYXRhKCktPnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7CisgICAg
Z2VuZXJhdG9yLmVtaXRHZXRCeUlkKHByb3RvdHlwZS5nZXQoKSwgc3JjMi5nZXQoKSwgZ2VuZXJh
dG9yLnZtKCktPnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7CiAKICAgICBnZW5lcmF0b3IuZW1p
dEV4cHJlc3Npb25JbmZvKGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKICAg
ICBSZWdpc3RlcklEKiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdEluc3RhbmNlT2YoZHN0UmVnLmdl
dCgpLCBzcmMxLmdldCgpLCBwcm90b3R5cGUuZ2V0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTEsMzQgKzExMSwzNCBAQCB2b2lkIERlYnVnZ2VyOjpkZXRhY2goSlNHbG9iYWxPYmplY3Qq
IGdsCiAgICAgZ2xvYmFsT2JqZWN0LT5zZXREZWJ1Z2dlcigwKTsKIH0KIAotdm9pZCBEZWJ1Z2dl
cjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQordm9p
ZCBEZWJ1Z2dlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoVk0qIHZtKQogewogICAgIC8vIElm
IEphdmFTY3JpcHQgaXMgcnVubmluZywgaXQncyBub3Qgc2FmZSB0byByZWNvbXBpbGUsIHNpbmNl
IHdlJ2xsIGVuZAogICAgIC8vIHVwIHRocm93aW5nIGF3YXkgY29kZSB0aGF0IGlzIGxpdmUgb24g
dGhlIHN0YWNrLgotICAgIEFTU0VSVCghZ2xvYmFsRGF0YS0+ZHluYW1pY0dsb2JhbE9iamVjdCk7
Ci0gICAgaWYgKGdsb2JhbERhdGEtPmR5bmFtaWNHbG9iYWxPYmplY3QpCisgICAgQVNTRVJUKCF2
bS0+ZHluYW1pY0dsb2JhbE9iamVjdCk7CisgICAgaWYgKHZtLT5keW5hbWljR2xvYmFsT2JqZWN0
KQogICAgICAgICByZXR1cm47CiAKICAgICBSZWNvbXBpbGVyIHJlY29tcGlsZXIodGhpcyk7Ci0g
ICAgZ2xvYmFsRGF0YS0+aGVhcC5vYmplY3RTcGFjZSgpLmZvckVhY2hMaXZlQ2VsbChyZWNvbXBp
bGVyKTsKKyAgICB2bS0+aGVhcC5vYmplY3RTcGFjZSgpLmZvckVhY2hMaXZlQ2VsbChyZWNvbXBp
bGVyKTsKIH0KIAogSlNWYWx1ZSBldmFsdWF0ZUluR2xvYmFsQ2FsbEZyYW1lKGNvbnN0IFN0cmlu
ZyYgc2NyaXB0LCBKU1ZhbHVlJiBleGNlcHRpb24sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCiB7CiAgICAgQ2FsbEZyYW1lKiBnbG9iYWxDYWxsRnJhbWUgPSBnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKTsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBnbG9iYWxPYmplY3Qt
Pmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAKICAgICBF
dmFsRXhlY3V0YWJsZSogZXZhbCA9IEV2YWxFeGVjdXRhYmxlOjpjcmVhdGUoZ2xvYmFsQ2FsbEZy
YW1lLCBtYWtlU291cmNlKHNjcmlwdCksIGZhbHNlKTsKICAgICBpZiAoIWV2YWwpIHsKLSAgICAg
ICAgZXhjZXB0aW9uID0gZ2xvYmFsRGF0YS5leGNlcHRpb247Ci0gICAgICAgIGdsb2JhbERhdGEu
ZXhjZXB0aW9uID0gSlNWYWx1ZSgpOworICAgICAgICBleGNlcHRpb24gPSB2bS5leGNlcHRpb247
CisgICAgICAgIHZtLmV4Y2VwdGlvbiA9IEpTVmFsdWUoKTsKICAgICAgICAgcmV0dXJuIGV4Y2Vw
dGlvbjsKICAgICB9CiAKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGdsb2JhbERhdGEuaW50ZXJwcmV0
ZXItPmV4ZWN1dGUoZXZhbCwgZ2xvYmFsQ2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIGdsb2JhbENh
bGxGcmFtZS0+c2NvcGUoKSk7Ci0gICAgaWYgKGdsb2JhbERhdGEuZXhjZXB0aW9uKSB7Ci0gICAg
ICAgIGV4Y2VwdGlvbiA9IGdsb2JhbERhdGEuZXhjZXB0aW9uOwotICAgICAgICBnbG9iYWxEYXRh
LmV4Y2VwdGlvbiA9IEpTVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHZtLmludGVycHJl
dGVyLT5leGVjdXRlKGV2YWwsIGdsb2JhbENhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxD
YWxsRnJhbWUtPnNjb3BlKCkpOworICAgIGlmICh2bS5leGNlcHRpb24pIHsKKyAgICAgICAgZXhj
ZXB0aW9uID0gdm0uZXhjZXB0aW9uOworICAgICAgICB2bS5leGNlcHRpb24gPSBKU1ZhbHVlKCk7
CiAgICAgfQogICAgIEFTU0VSVChyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAkocmV2aXNpb24gMTQ4Njgz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDcgKzI4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBEZWJ1
Z2dlckNhbGxGcmFtZTsKICAgICBjbGFzcyBFeGVjU3RhdGU7Ci0gICAgY2xhc3MgSlNHbG9iYWxE
YXRhOworICAgIGNsYXNzIFZNOwogICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIGNsYXNz
IEpTVmFsdWU7CiAgICAgY2xhc3MgU291cmNlUHJvdmlkZXI7CkBAIC01Miw3ICs1Miw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhY2hCcmVha3BvaW50KGNv
bnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50cHRyX3QsIGludCwgaW50KSA9IDA7CiAKIAotICAg
ICAgICB2b2lkIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKEpTR2xvYmFsRGF0YSopOworICAgICAg
ICB2b2lkIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKFZNKik7CiAKICAgICBwcml2YXRlOgogICAg
ICAgICBIYXNoU2V0PEpTR2xvYmFsT2JqZWN0Kj4gbV9nbG9iYWxPYmplY3RzOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlv
bi5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dl
ci9EZWJ1Z2dlckFjdGl2YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNyArMzUsMTcg
QEAgQVNTRVJUX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoRGVidWdnZXJBYwogCiBjb25zdCBDbGFz
c0luZm8gRGVidWdnZXJBY3RpdmF0aW9uOjpzX2luZm8gPSB7ICJEZWJ1Z2dlckFjdGl2YXRpb24i
LCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKERlYnVnZ2VyQWN0aXZh
dGlvbikgfTsKIAotRGVidWdnZXJBY3RpdmF0aW9uOjpEZWJ1Z2dlckFjdGl2YXRpb24oSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQotICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBn
bG9iYWxEYXRhLmRlYnVnZ2VyQWN0aXZhdGlvblN0cnVjdHVyZS5nZXQoKSkKK0RlYnVnZ2VyQWN0
aXZhdGlvbjo6RGVidWdnZXJBY3RpdmF0aW9uKFZNJiB2bSkKKyAgICA6IEpTTm9uRmluYWxPYmpl
Y3Qodm0sIHZtLmRlYnVnZ2VyQWN0aXZhdGlvblN0cnVjdHVyZS5nZXQoKSkKIHsKIH0KIAotdm9p
ZCBEZWJ1Z2dlckFjdGl2YXRpb246OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNPYmplY3QqIGFjdGl2YXRpb24pCit2b2lkIERlYnVnZ2VyQWN0aXZhdGlvbjo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBKU09iamVjdCogYWN0aXZhdGlvbikKIHsKLSAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgQVNTRVJUKGFjdGl2YXRpb24pOwogICAgIEFTU0VSVChhY3RpdmF0aW9uLT5pc0FjdGl2
YXRpb25PYmplY3QoKSk7Ci0gICAgbV9hY3RpdmF0aW9uLnNldChnbG9iYWxEYXRhLCB0aGlzLCBq
c0Nhc3Q8SlNBY3RpdmF0aW9uKj4oYWN0aXZhdGlvbikpOworICAgIG1fYWN0aXZhdGlvbi5zZXQo
dm0sIHRoaXMsIGpzQ2FzdDxKU0FjdGl2YXRpb24qPihhY3RpdmF0aW9uKSk7CiB9CiAKIHZvaWQg
RGVidWdnZXJBY3RpdmF0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXJBY3RpdmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVn
Z2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDEwICszNCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwogCi0gICAgICAgIHN0YXRpYyBEZWJ1Z2dl
ckFjdGl2YXRpb24qIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTT2JqZWN0KiBv
YmplY3QpCisgICAgICAgIHN0YXRpYyBEZWJ1Z2dlckFjdGl2YXRpb24qIGNyZWF0ZShWTSYgdm0s
IEpTT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIHsKLSAgICAgICAgICAgIERlYnVnZ2VyQWN0aXZh
dGlvbiogYWN0aXZhdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPERlYnVnZ2VyQWN0
aXZhdGlvbj4oZ2xvYmFsRGF0YS5oZWFwKSkgRGVidWdnZXJBY3RpdmF0aW9uKGdsb2JhbERhdGEp
OwotICAgICAgICAgICAgYWN0aXZhdGlvbi0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgb2Jq
ZWN0KTsKKyAgICAgICAgICAgIERlYnVnZ2VyQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPERlYnVnZ2VyQWN0aXZhdGlvbj4odm0uaGVhcCkpIERlYnVn
Z2VyQWN0aXZhdGlvbih2bSk7CisgICAgICAgICAgICBhY3RpdmF0aW9uLT5maW5pc2hDcmVhdGlv
bih2bSwgb2JqZWN0KTsKICAgICAgICAgICAgIHJldHVybiBhY3RpdmF0aW9uOwogICAgICAgICB9
CiAKQEAgLTUzLDE4ICs1MywxOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU19FWFBP
UlREQVRBIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAKKyAgICAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpIAogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7IAorICAg
ICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCiAg
ICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVz
VmlzaXRDaGlsZHJlbiB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIAotICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYsIEpTT2JqZWN0
KiBhY3RpdmF0aW9uKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYsIEpTT2JqZWN0KiBhY3RpdmF0aW9uKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIERlYnVnZ2VyQWN0aXZhdGlvbihKU0dsb2JhbERhdGEmKTsKKyAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgRGVidWdnZXJBY3RpdmF0aW9uKFZNJik7CiAgICAgICAg
IFdyaXRlQmFycmllcjxKU0FjdGl2YXRpb24+IG1fYWN0aXZhdGlvbjsKICAgICB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxG
cmFtZS5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDE3ICs5MCwx
NyBAQCBKU1ZhbHVlIERlYnVnZ2VyQ2FsbEZyYW1lOjpldmFsdWF0ZShjb25zCiAgICAgaWYgKCFt
X2NhbGxGcmFtZS0+Y29kZUJsb2NrKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAg
Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gbV9jYWxsRnJhbWUtPmdsb2JhbERhdGEo
KTsKKyAgICBWTSYgdm0gPSBtX2NhbGxGcmFtZS0+dm0oKTsKICAgICBFdmFsRXhlY3V0YWJsZSog
ZXZhbCA9IEV2YWxFeGVjdXRhYmxlOjpjcmVhdGUobV9jYWxsRnJhbWUsIG1ha2VTb3VyY2Uoc2Ny
aXB0KSwgbV9jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7Ci0gICAgaWYg
KGdsb2JhbERhdGEuZXhjZXB0aW9uKSB7Ci0gICAgICAgIGV4Y2VwdGlvbiA9IGdsb2JhbERhdGEu
ZXhjZXB0aW9uOwotICAgICAgICBnbG9iYWxEYXRhLmV4Y2VwdGlvbiA9IEpTVmFsdWUoKTsKKyAg
ICBpZiAodm0uZXhjZXB0aW9uKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IHZtLmV4Y2VwdGlvbjsK
KyAgICAgICAgdm0uZXhjZXB0aW9uID0gSlNWYWx1ZSgpOwogICAgIH0KIAotICAgIEpTVmFsdWUg
cmVzdWx0ID0gZ2xvYmFsRGF0YS5pbnRlcnByZXRlci0+ZXhlY3V0ZShldmFsLCBtX2NhbGxGcmFt
ZSwgdGhpc09iamVjdCgpLCBtX2NhbGxGcmFtZS0+c2NvcGUoKSk7Ci0gICAgaWYgKGdsb2JhbERh
dGEuZXhjZXB0aW9uKSB7Ci0gICAgICAgIGV4Y2VwdGlvbiA9IGdsb2JhbERhdGEuZXhjZXB0aW9u
OwotICAgICAgICBnbG9iYWxEYXRhLmV4Y2VwdGlvbiA9IEpTVmFsdWUoKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IHZtLmludGVycHJldGVyLT5leGVjdXRlKGV2YWwsIG1fY2FsbEZyYW1lLCB0aGlz
T2JqZWN0KCksIG1fY2FsbEZyYW1lLT5zY29wZSgpKTsKKyAgICBpZiAodm0uZXhjZXB0aW9uKSB7
CisgICAgICAgIGV4Y2VwdGlvbiA9IHZtLmV4Y2VwdGlvbjsKKyAgICAgICAgdm0uZXhjZXB0aW9u
ID0gSlNWYWx1ZSgpOwogICAgIH0KICAgICBBU1NFUlQocmVzdWx0KTsKICAgICByZXR1cm4gcmVz
dWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3Rh
dGUuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzYsNyArNDc2LDcgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZwogICAgIH0KICAgICAgICAgCiAg
ICAgY2FzZSBNYWtlUm9wZTogewotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLm1f
Z2xvYmFsRGF0YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldChtX2dyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAgICAgCkBAIC03MjMsNDEgKzcyMyw0MSBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgfQogCiAgICAgY2FzZSBUeXBlT2Y6IHsK
LSAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gbV9jb2RlQmxvY2stPmdsb2JhbERh
dGEoKTsKKyAgICAgICAgVk0qIHZtID0gbV9jb2RlQmxvY2stPnZtKCk7CiAgICAgICAgIEpTVmFs
dWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBBYnN0
cmFjdFZhbHVlJiBhYnN0cmFjdENoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgIGlmIChjaGlsZCkgewotICAgICAgICAgICAgSlNWYWx1ZSB0eXBlU3RyaW5nID0ganNUeXBl
U3RyaW5nRm9yVmFsdWUoKmdsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+Y29kZU9yaWdpbiksIGNoaWxkKTsKKyAgICAgICAgICAgIEpTVmFsdWUgdHlwZVN0cmlu
ZyA9IGpzVHlwZVN0cmluZ0ZvclZhbHVlKCp2bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZv
cihub2RlLT5jb2RlT3JpZ2luKSwgY2hpbGQpOwogICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0
YW50KG5vZGUsIHR5cGVTdHJpbmcpKSB7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50
cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZSBpZiAoaXNOdW1iZXJTcGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1fdHlwZSkpIHsK
LSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCBnbG9iYWxEYXRhLT5zbWFsbFN0
cmluZ3MubnVtYmVyU3RyaW5nKCkpKSB7CisgICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQo
bm9kZSwgdm0tPnNtYWxsU3RyaW5ncy5udW1iZXJTdHJpbmcoKSkpIHsKICAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAgICAg
ICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmdTcGVjdWxhdGlvbihhYnN0
cmFjdENoaWxkLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2Rl
LCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc3RyaW5nU3RyaW5nKCkpKSB7CisgICAgICAgICAg
ICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgdm0tPnNtYWxsU3RyaW5ncy5zdHJpbmdTdHJpbmco
KSkpIHsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y1N0cmluZyk7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXNG
aW5hbE9iamVjdFNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSB8fCBpc0FycmF5U3Bl
Y3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpIHx8IGlzQXJndW1lbnRzU3BlY3VsYXRpb24o
YWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQo
bm9kZSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLm9iamVjdFN0cmluZygpKSkgeworICAgICAg
ICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGUsIHZtLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3Ry
aW5nKCkpKSB7CiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNGaW5hbE9iamVjdCB8IFNwZWNBcnJheSB8IFNwZWNBcmd1bWVudHMpOwogICAgICAgICAg
ICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb25TcGVjdWxhdGlvbihh
YnN0cmFjdENoaWxkLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChu
b2RlLCBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuZnVuY3Rpb25TdHJpbmcoKSkpIHsKKyAgICAg
ICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2RlLCB2bS0+c21hbGxTdHJpbmdzLmZ1bmN0aW9u
U3RyaW5nKCkpKSB7CiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmls
dGVyKFNwZWNGdW5jdGlvbik7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxz
ZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAg
ICAgICAgICBpZiAodHJ5U2V0Q29uc3RhbnQobm9kZSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdz
LmJvb2xlYW5TdHJpbmcoKSkpIHsKKyAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFudChub2Rl
LCB2bS0+c21hbGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKSkpIHsKICAgICAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Jvb2xlYW4pOwogICAgICAgICAgICAg
ICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
Nzc1LDcgKzc3NSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLm1fZ2xv
YmFsRGF0YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChtX2dyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgICAgICAgICAgCkBAIC04NjcsNyArODY3LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlRWZmZWN0cyh1bnNpZwogCiAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6CiAgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3Jh
cGgubV9nbG9iYWxEYXRhLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0KG1fZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKQEAgLTg4Niw3ICs4ODYs
NyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBo
Lm1fZ2xvYmFsRGF0YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQobV9ncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CkBAIC0xMDUyLDcgKzEwNTIsNyBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgIC8vIGlmIChkZXN0aW5hdGlv
bi5tX3R5cGUgJiAhKFNwZWNOdW1iZXIgfCBTcGVjU3RyaW5nIHwgU3BlY0Jvb2xlYW4pKSB7CiAg
ICAgICAgIC8vICAgICBkZXN0aW5hdGlvbi5maWx0ZXIoU3BlY051bWJlciB8IFNwZWNTdHJpbmcg
fCBTcGVjQm9vbGVhbik7CiAgICAgICAgIC8vICAgICBBYnN0cmFjdFZhbHVlIHN0cmluZzsKLSAg
ICAgICAgLy8gICAgIHN0cmluZy5zZXQoZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlKTsKKyAg
ICAgICAgLy8gICAgIHN0cmluZy5zZXQodm0tPnN0cmluZ1N0cnVjdHVyZSk7CiAgICAgICAgIC8v
ICAgICBkZXN0aW5hdGlvbi5tZXJnZShzdHJpbmcpOwogICAgICAgICAvLyB9CiAgICAgICAgIC8v
CkBAIC0xMDk3LDcgKzEwOTcsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3Rz
KHVuc2lnCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFw
aC5tX2dsb2JhbERhdGEuc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQobV9ncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0xMjcwLDcgKzEyNzAsNyBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlv
bihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkgewogICAgICAgICAgICAgaWYgKFN0cnVj
dHVyZSogc3RydWN0dXJlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuYmVzdFByb3ZlblN0cnVj
dHVyZSgpKSB7CiAgICAgICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBHZXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fZ2xvYmFs
RGF0YSwgc3RydWN0dXJlLAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fdm0sIHN0cnVj
dHVyZSwKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2NvZGVCbG9jay0+aWRlbnRpZmll
cihub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpKTsKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVz
LmlzU2ltcGxlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gQXNzZXJ0IHRoaW5ncyB0aGF0
IHdlIGNhbid0IGhhbmRsZSBhbmQgdGhhdCB0aGUgY29tcHV0ZUZvcigpIG1ldGhvZApAQCAtMTQ3
MCw3ICsxNDcwLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZwog
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBpZiAoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkp
IHsKICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcigKLSAgICAgICAgICAgICAgICBtX2dyYXBoLm1fZ2xvYmFsRGF0YSwKKyAgICAgICAg
ICAgICAgICBtX2dyYXBoLm1fdm0sCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+Y29kZU9yaWdpbiksCiAgICAgICAgICAgICAgICAgc3RydWN0dXJlLAogICAg
ICAgICAgICAgICAgIG1fZ3JhcGgubV9jb2RlQmxvY2stPmlkZW50aWZpZXIobm9kZS0+aWRlbnRp
Zmllck51bWJlcigpKSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1i
bHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
c3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
NyBAQAogI2luY2x1ZGUgIkRGR0ZQUkluZm8uaCIKICNpbmNsdWRlICJERkdHUFJJbmZvLmgiCiAj
aW5jbHVkZSAiREZHTm9kZS5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUg
IlZNLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewpAQCAtNDMsOCArNDMsOCBAQCB0eXBlZGVmIHZvaWQgKCpWX0RGR0RlYnVn
T3BlcmF0aW9uX0VQUCkoCiAKIGNsYXNzIEFzc2VtYmx5SGVscGVycyA6IHB1YmxpYyBNYWNyb0Fz
c2VtYmxlciB7CiBwdWJsaWM6Ci0gICAgQXNzZW1ibHlIZWxwZXJzKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi0gICAgICAgIDogbV9nbG9iYWxEYXRhKGds
b2JhbERhdGEpCisgICAgQXNzZW1ibHlIZWxwZXJzKFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCisgICAgICAgIDogbV92bSh2bSkKICAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2sp
CiAgICAgICAgICwgbV9iYXNlbGluZUNvZGVCbG9jayhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmJh
c2VsaW5lVmVyc2lvbigpIDogMCkKICAgICB7CkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAg
ICB9CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9j
azsgfQotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpIHsgcmV0dXJuIG1fZ2xvYmFsRGF0
YTsgfQorICAgIFZNKiB2bSgpIHsgcmV0dXJuIG1fdm07IH0KICAgICBBc3NlbWJsZXJUeXBlX1Qm
IGFzc2VtYmxlcigpIHsgcmV0dXJuIG1fYXNzZW1ibGVyOyB9CiAgICAgCiAjaWYgQ1BVKFg4Nl82
NCkgfHwgQ1BVKFg4NikKQEAgLTE5MCw3ICsxOTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWJ1
Z0NhbGwoVl9ERkdEZWJ1Z09wZXJhdGlvbl9FUFAgZnVuY3Rpb24sIHZvaWQqIGFyZ3VtZW50KQog
ICAgIHsKICAgICAgICAgc2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSAqIChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIEZQUkluZm86Om51bWJlck9mUmVnaXN0
ZXJzKTsKLSAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1fZ2xvYmFsRGF0
YS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOworICAgICAgICBTY3JhdGNoQnVm
ZmVyKiBzY3JhdGNoQnVmZmVyID0gbV92bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNp
emUpOwogICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2Rl
ZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpOwogCiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CkBA
IC0yOTIsOSArMjkyLDkgQEAgcHVibGljOgogICAgIEp1bXAgZW1pdEV4Y2VwdGlvbkNoZWNrKEV4
Y2VwdGlvbkNoZWNrS2luZCBraW5kID0gTm9ybWFsRXhjZXB0aW9uQ2hlY2spCiAgICAgewogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoa2luZCA9PSBOb3Jt
YWxFeGNlcHRpb25DaGVjayA/IE5vblplcm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3MoJmdsb2Jh
bERhdGEoKS0+ZXhjZXB0aW9uKSk7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoa2luZCA9
PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vblplcm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3Mo
JnZtKCktPmV4Y2VwdGlvbikpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgcmV0
dXJuIGJyYW5jaDMyKGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb3RFcXVhbCA6IEVx
dWFsLCBBYnNvbHV0ZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmdsb2JhbERhdGEo
KS0+ZXhjZXB0aW9uKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKKyAgICAgICAgcmV0dXJuIGJy
YW5jaDMyKGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb3RFcXVhbCA6IEVxdWFsLCBB
YnNvbHV0ZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJnZtKCktPmV4Y2VwdGlvbikg
KyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTM4MSw3ICszODEs
NyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29k
ZWRDb2RlTWFwRm9yKENvZGVCbG9jayopOwogICAgIAogcHJvdGVjdGVkOgotICAgIEpTR2xvYmFs
RGF0YSogbV9nbG9iYWxEYXRhOworICAgIFZNKiBtX3ZtOwogICAgIENvZGVCbG9jayogbV9jb2Rl
QmxvY2s7CiAgICAgQ29kZUJsb2NrKiBtX2Jhc2VsaW5lQ29kZUJsb2NrOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNp
b24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw3ICsxMjIsNyBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiBjbGFzcyBCeXRlQ29kZVBhcnNlciB7CiBwdWJsaWM6CiAgICAgQnl0
ZUNvZGVQYXJzZXIoR3JhcGgmIGdyYXBoKQotICAgICAgICA6IG1fZ2xvYmFsRGF0YSgmZ3JhcGgu
bV9nbG9iYWxEYXRhKQorICAgICAgICA6IG1fdm0oJmdyYXBoLm1fdm0pCiAgICAgICAgICwgbV9j
b2RlQmxvY2soZ3JhcGgubV9jb2RlQmxvY2spCiAgICAgICAgICwgbV9wcm9maWxlZEJsb2NrKGdy
YXBoLm1fcHJvZmlsZWRCbG9jaykKICAgICAgICAgLCBtX2dyYXBoKGdyYXBoKQpAQCAtOTQyLDcg
Kzk0Miw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBidWlsZE9wZXJhbmRNYXBzSWZOZWNl
c3NhcnkoKTsKICAgICAKLSAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKKyAgICBWTSog
bV92bTsKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIENvZGVCbG9jayogbV9wcm9m
aWxlZEJsb2NrOwogICAgIEdyYXBoJiBtX2dyYXBoOwpAQCAtMTYzNSw3ICsxNjM1LDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcgogICAgICAgICBOb2RlKiByZXN1
bHQ7CiAgICAgICAgIAogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPD0g
MSkKLSAgICAgICAgICAgIHJlc3VsdCA9IGNlbGxDb25zdGFudChtX2dsb2JhbERhdGEtPnNtYWxs
U3RyaW5ncy5lbXB0eVN0cmluZygpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGNlbGxDb25zdGFu
dChtX3ZtLT5zbWFsbFN0cmluZ3MuZW1wdHlTdHJpbmcoKSk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIHJlc3VsdCA9IGFkZFRvR3JhcGgoVG9TdHJpbmcsIGdldChyZWdpc3Rlck9mZnNldCAr
IGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CiAgICAgICAgIApAQCAtMTkyNCw3ICsxOTI0LDcgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogewogICAgIGJvb2wgc2hv
dWxkQ29udGludWVQYXJzaW5nID0gdHJ1ZTsKIAotICAgIEludGVycHJldGVyKiBpbnRlcnByZXRl
ciA9IG1fZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXI7CisgICAgSW50ZXJwcmV0ZXIqIGludGVycHJl
dGVyID0gbV92bS0+aW50ZXJwcmV0ZXI7CiAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0Jl
Z2luID0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2lu
KCk7CiAgICAgdW5zaWduZWQgYmxvY2tCZWdpbiA9IG1fY3VycmVudEluZGV4OwogICAgIApAQCAt
MTk3NCw3ICsxOTc0LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAKICAgICAgICAgaWYgKG1fZ3JhcGgubV9jb21waWxhdGlvbiAmJiBvcGNvZGVJ
RCAhPSBvcF9jYWxsX3B1dF9yZXN1bHQpIHsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ291bnRF
eGVjdXRpb24sIE9wSW5mbyhtX2dyYXBoLm1fY29tcGlsYXRpb24tPmV4ZWN1dGlvbkNvdW50ZXJG
b3IoCi0gICAgICAgICAgICAgICAgUHJvZmlsZXI6Ok9yaWdpblN0YWNrKCptX2dsb2JhbERhdGEt
Pm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9jb2RlQmxvY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCkp
KSkpOworICAgICAgICAgICAgICAgIFByb2ZpbGVyOjpPcmlnaW5TdGFjaygqbV92bS0+bV9wZXJC
eXRlY29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jaywgY3VycmVudENvZGVPcmlnaW4oKSkpKSk7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKQEAgLTM0Nzks
MTAgKzM0NzksMTAgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQog
ICAgICAgICBBU1NFUlQoY2FsbHNpdGVCbG9ja0hlYWQgIT0gTm9CbG9jayk7CiAgICAgICAgIAog
ICAgICAgICBJbmxpbmVDYWxsRnJhbWUgaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICBpbmxpbmVD
YWxsRnJhbWUuZXhlY3V0YWJsZS5zZXQoKmJ5dGVDb2RlUGFyc2VyLT5tX2dsb2JhbERhdGEsIGJ5
dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCkpOworICAgICAgICBpbmxpbmVDYWxsRnJhbWUuZXhlY3V0YWJsZS5z
ZXQoKmJ5dGVDb2RlUGFyc2VyLT5tX3ZtLCBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKTsKICAgICAgICAg
aW5saW5lQ2FsbEZyYW1lLnN0YWNrT2Zmc2V0ID0gaW5saW5lQ2FsbEZyYW1lU3RhcnQgKyBKU1N0
YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOwogICAgICAgICBpZiAoY2FsbGVlKQotICAgICAgICAg
ICAgaW5saW5lQ2FsbEZyYW1lLmNhbGxlZS5zZXQoKmJ5dGVDb2RlUGFyc2VyLT5tX2dsb2JhbERh
dGEsIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxl
ZSk7CisgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUuY2FsbGVlLnNldCgqYnl0ZUNvZGVQYXJz
ZXItPm1fdm0sIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IGNhbGxlZSk7CiAgICAgICAgIGlubGluZUNhbGxGcmFtZS5jYWxsZXIgPSBieXRlQ29kZVBhcnNl
ci0+Y3VycmVudENvZGVPcmlnaW4oKTsKICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLmFyZ3VtZW50
cy5yZXNpemUoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOyAvLyBTZXQgdGhlIG51bWJlciBv
ZiBhcmd1bWVudHMgaW5jbHVkaW5nIHRoaXMsIGJ1dCBkb24ndCBjb25maWd1cmUgdGhlIHZhbHVl
IHJlY292ZXJpZXMsIHlldC4KICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLmlzQ2FsbCA9IGlzQ2Fs
bChraW5kKTsKQEAgLTM1MjQsNyArMzUyNCw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFj
a0VudHJ5OjpJbmxpbmUKICAgICAgICAgICAgIFN0cmluZ0ltcGwqIHJlcCA9IGNvZGVCbG9jay0+
aWRlbnRpZmllcihpKS5pbXBsKCk7CiAgICAgICAgICAgICBJZGVudGlmaWVyTWFwOjpBZGRSZXN1
bHQgcmVzdWx0ID0gYnl0ZUNvZGVQYXJzZXItPm1faWRlbnRpZmllck1hcC5hZGQocmVwLCBieXRl
Q29kZVBhcnNlci0+bV9jb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKSk7CiAgICAgICAg
ICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJz
ZXItPm1fY29kZUJsb2NrLT5hZGRJZGVudGlmaWVyKElkZW50aWZpZXIoYnl0ZUNvZGVQYXJzZXIt
Pm1fZ2xvYmFsRGF0YSwgcmVwKSk7CisgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1f
Y29kZUJsb2NrLT5hZGRJZGVudGlmaWVyKElkZW50aWZpZXIoYnl0ZUNvZGVQYXJzZXItPm1fdm0s
IHJlcCkpOwogICAgICAgICAgICAgbV9pZGVudGlmaWVyUmVtYXBbaV0gPSByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlOwogICAgICAgICB9CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29k
ZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7ICsraSkgewpAQCAtMzU5NCw3ICsz
NTk0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogICAgIAogICAg
IGlmIChtX2dyYXBoLm1fY29tcGlsYXRpb24pIHsKICAgICAgICAgbV9ncmFwaC5tX2NvbXBpbGF0
aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygKLSAgICAgICAgICAgICptX2dsb2JhbERhdGEtPm1f
cGVyQnl0ZWNvZGVQcm9maWxlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrKTsK
KyAgICAgICAgICAgICptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jayk7CiAgICAgfQogICAgIAogICAgIGJvb2wgc2hvdWxkRHVtcEJ5
dGVjb2RlID0gT3B0aW9uczo6ZHVtcEJ5dGVjb2RlQXRERkdUaW1lKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5oCShyZXZpc2lvbiAxNDg2
ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBD
b2RlQmxvY2s7Ci1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIAogbmFtZXNwYWNlIERG
RyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0NhbGxIZWxwZXJzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDQ2FsbEhlbHBlcnMu
aAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDQ2Fs
bEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsOCBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIENDYWxsSGVscGVycyA6IHB1YmxpYyBBc3NlbWJs
eUhlbHBlcnMgewogcHVibGljOgotICAgIENDYWxsSGVscGVycyhKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrID0gMCkKLSAgICAgICAgOiBBc3NlbWJseUhlbHBl
cnMoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKQorICAgIENDYWxsSGVscGVycyhWTSogdm0sIENvZGVC
bG9jayogY29kZUJsb2NrID0gMCkKKyAgICAgICAgOiBBc3NlbWJseUhlbHBlcnModm0sIGNvZGVC
bG9jaykKICAgICB7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcg
Kzk3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGRlYnVnRmFpbChDb2RlQmxvY2sqIAogdGVtcGxh
dGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgUmV0dXJuVHlwZSAoKmNhbkhhbmRsZU9wY29kZSkoT3Bj
b2RlSUQsIENvZGVCbG9jayosIEluc3RydWN0aW9uKik+CiBSZXR1cm5UeXBlIGNhbkhhbmRsZU9w
Y29kZXMoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJldHVyblR5cGUgaW5pdGlhbFZhbHVlKQogewot
ICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IGNvZGVCbG9jay0+Z2xvYmFsRGF0YSgpLT5p
bnRlcnByZXRlcjsKKyAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBjb2RlQmxvY2stPnZt
KCktPmludGVycHJldGVyOwogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGNv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKICAgICB1bnNpZ25lZCBpbnN0cnVjdGlv
bkNvdW50ID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CiAgICAgUmV0dXJuVHlw
ZSByZXN1bHQgPSBpbml0aWFsVmFsdWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTQ4Njgz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsxNTUsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIGJvb2wgbmVlZHNDZWxsQ2hlY2sgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fdHlw
ZSAmIH5TcGVjQ2VsbDsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBHZXRCeUlk
U3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAg
ICAgICAgIGdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCBjb2RlQmxvY2soKS0+aWRlbnRpZmllcihp
ZGVudGlmaWVyTnVtYmVyKSk7CisgICAgICAgICAgICAgICAgICAgIHZtKCksIHN0cnVjdHVyZSwg
Y29kZUJsb2NrKCktPmlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGlmICghc3RhdHVzLmlzU2ltcGxlKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGhhbmRsZSBwcm90b3R5cGUgY2FzZXMuCkBA
IC0yMjAsNyArMjIwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBib29sIG5lZWRzQ2Vs
bENoZWNrID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3R5cGUgJiB+U3BlY0NlbGw7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRC
eUlkU3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICBnbG9iYWxEYXRhKCks
CisgICAgICAgICAgICAgICAgICAgIHZtKCksCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmUsCiAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGlkZW50aWZp
ZXJOdW1iZXIpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNz
ZW1ibGVyLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHZv
aWQgRGlzYXNzZW1ibGVyOjpyZXBvcnRUb1Byb2ZpbGVyKFByb2YKICAgICAgICAgUHJvZmlsZXI6
Ok9yaWdpblN0YWNrIHN0YWNrOwogICAgICAgICAKICAgICAgICAgaWYgKG9wc1tpXS5jb2RlT3Jp
Z2luLmlzU2V0KCkpCi0gICAgICAgICAgICBzdGFjayA9IFByb2ZpbGVyOjpPcmlnaW5TdGFjaygq
bV9ncmFwaC5tX2dsb2JhbERhdGEubV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX2dyYXBoLm1fY29k
ZUJsb2NrLCBvcHNbaV0uY29kZU9yaWdpbik7CisgICAgICAgICAgICBzdGFjayA9IFByb2ZpbGVy
OjpPcmlnaW5TdGFjaygqbV9ncmFwaC5tX3ZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9ncmFw
aC5tX2NvZGVCbG9jaywgb3BzW2ldLmNvZGVPcmlnaW4pOwogICAgICAgICAKICAgICAgICAgY29t
cGlsYXRpb24tPmFkZERlc2NyaXB0aW9uKFByb2ZpbGVyOjpDb21waWxlZEJ5dGVjb2RlKHN0YWNr
LCBvcHNbaV0udGV4dCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RyaXZlci5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIGlubGlu
ZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU0KICAgICAgICAgICAgIG11c3RIYW5k
bGVWYWx1ZXNbaV0gPSBleGVjLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsKICAgICB9
CiAgICAgCi0gICAgR3JhcGggZGZnKGV4ZWMtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLCBvc3JF
bnRyeUJ5dGVjb2RlSW5kZXgsIG11c3RIYW5kbGVWYWx1ZXMpOworICAgIEdyYXBoIGRmZyhleGVj
LT52bSgpLCBjb2RlQmxvY2ssIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbXVzdEhhbmRsZVZhbHVl
cyk7CiAgICAgaWYgKCFwYXJzZShleGVjLCBkZmcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJKHJldmlzaW9uIDE0
ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9j
azsKIGNsYXNzIEpJVENvZGU7Ci1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIGNsYXNz
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjsKIAogbmFtZXNwYWNlIERGRyB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE0ODY4MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY3NSw3ICs2NzUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgc2V0VXNlS2lu
ZEFuZFVuYm94SWZQcm9maXRhYmxlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
ICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKG5vZGUtPnByZWRpY3Rpb24oKSkpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoY29kZUJsb2NrKCktPmlkZW50aWZpZXIo
bm9kZS0+aWRlbnRpZmllck51bWJlcigpKSAhPSBnbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+
bGVuZ3RoKQorICAgICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT5pZGVudGlmaWVyKG5vZGUtPmlk
ZW50aWZpZXJOdW1iZXIoKSkgIT0gdm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9
IAogICAgICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29k
ZU9yaWdpbiktPmdldEFycmF5UHJvZmlsZSgKQEAgLTEwNDYsNyArMTA0Niw3IEBAIHByaXZhdGU6
CiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNVbnVzZWQ7CiAgICAgICAgIEpTQ2VsbCogc3Bl
Y2lmaWNWYWx1ZTsKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RyaW5nUHJvdG90
eXBlU3RydWN0dXJlLT5nZXQoCi0gICAgICAgICAgICBnbG9iYWxEYXRhKCksIGlkZW50LCBhdHRy
aWJ1dGVzVW51c2VkLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgICAgIHZtKCksIGlkZW50LCBh
dHRyaWJ1dGVzVW51c2VkLCBzcGVjaWZpY1ZhbHVlKTsKICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zm
c2V0KG9mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIApAQCAtMTA4
NSw5ICsxMDg1LDkgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gKHRoYXQgd291bGQgY2FsbCB0b1N0
cmluZygpKS4gV2UgZG9uJ3Qgd2FudCB0aGUgREZHIHRvIGhhdmUgdG8gZGlzdGluZ3Vpc2gKICAg
ICAgICAgLy8gYmV0d2VlbiB0aGUgdHdvLCBqdXN0IGJlY2F1c2UgdGhhdCBzZWVtcyBsaWtlIGl0
IHdvdWxkIGdldCBjb25mdXNpbmcuIFNvIHdlCiAgICAgICAgIC8vIGp1c3QgcmVxdWlyZSBib3Ro
IG1ldGhvZHMgdG8gYmUgc2FuZS4KLSAgICAgICAgaWYgKCFpc1N0cmluZ1Byb3RvdHlwZU1ldGhv
ZFNhbmUoc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLCBnbG9iYWxEYXRhKCkucHJvcGVydHlOYW1l
cy0+dmFsdWVPZikpCisgICAgICAgIGlmICghaXNTdHJpbmdQcm90b3R5cGVNZXRob2RTYW5lKHN0
cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSwgdm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9mKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFpc1N0cmluZ1Byb3RvdHlwZU1l
dGhvZFNhbmUoc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLCBnbG9iYWxEYXRhKCkucHJvcGVydHlO
YW1lcy0+dG9TdHJpbmcpKQorICAgICAgICBpZiAoIWlzU3RyaW5nUHJvdG90eXBlTWV0aG9kU2Fu
ZShzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUsIHZtKCkucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRy
dWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24g
MTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDEyICs0NCwxMiBAQCBzdGF0aWMgY29uc3QgY2hhciogZGZnT3BOYW1l
c1tdID0gewogI3VuZGVmIFNUUklOR0laRV9ERkdfT1BfRU5VTQogfTsKIAotR3JhcGg6OkdyYXBo
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVk
IG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5k
bGVWYWx1ZXMpCi0gICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKK0dyYXBoOjpHcmFwaChW
TSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5k
ZXgsIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKQorICAgIDogbV92
bSh2bSkKICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKLSAgICAsIG1fY29tcGlsYXRpb24o
Z2xvYmFsRGF0YS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgPyBnbG9iYWxEYXRhLm1fcGVyQnl0ZWNv
ZGVQcm9maWxlci0+bmV3Q29tcGlsYXRpb24oY29kZUJsb2NrLCBQcm9maWxlcjo6REZHKSA6IDAp
CisgICAgLCBtX2NvbXBpbGF0aW9uKHZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlciA/IHZtLm1fcGVy
Qnl0ZWNvZGVQcm9maWxlci0+bmV3Q29tcGlsYXRpb24oY29kZUJsb2NrLCBQcm9maWxlcjo6REZH
KSA6IDApCiAgICAgLCBtX3Byb2ZpbGVkQmxvY2soY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQot
ICAgICwgbV9hbGxvY2F0b3IoZ2xvYmFsRGF0YS5tX2RmZ1N0YXRlLT5tX2FsbG9jYXRvcikKKyAg
ICAsIG1fYWxsb2NhdG9yKHZtLm1fZGZnU3RhdGUtPm1fYWxsb2NhdG9yKQogICAgICwgbV9oYXNB
cmd1bWVudHMoZmFsc2UpCiAgICAgLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5
dGVjb2RlSW5kZXgpCiAgICAgLCBtX211c3RIYW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZhbHVlcykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE0ODY4MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpA
QCAtODksNyArODksNyBAQCBlbnVtIEFkZFNwZWN1bGF0aW9uTW9kZSB7CiAvLyBOb2RlcyB0aGF0
IGFyZSAnZGVhZCcgcmVtYWluIGluIHRoZSB2ZWN0b3Igd2l0aCByZWZDb3VudCAwLgogY2xhc3Mg
R3JhcGggewogcHVibGljOgotICAgIEdyYXBoKEpTR2xvYmFsRGF0YSYsIENvZGVCbG9jayosIHVu
c2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11
c3RIYW5kbGVWYWx1ZXMpOworICAgIEdyYXBoKFZNJiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgb3Ny
RW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZh
bHVlcyk7CiAgICAgfkdyYXBoKCk7CiAgICAgCiAgICAgdm9pZCBjaGFuZ2VDaGlsZChFZGdlJiBl
ZGdlLCBOb2RlKiBuZXdOb2RlKQpAQCAtNjg3LDcgKzY4Nyw3IEBAIHB1YmxpYzoKICAgICAgICAg
fQogICAgIH0KICAgICAKLSAgICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsKKyAgICBWTSYg
bV92bTsKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIFJlZlB0cjxQcm9maWxlcjo6
Q29tcGlsYXRpb24+IG1fY29tcGlsYXRpb247CiAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxv
Y2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE3ICszNiwxNyBAQAogI2luY2x1ZGUg
IkRGR1NwZWN1bGF0aXZlSklULmgiCiAjaW5jbHVkZSAiREZHVGh1bmtzLmgiCiAjaW5jbHVkZSAi
SlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRl
ICJWTS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCiBKSVRDb21waWxlcjo6SklUQ29tcGlsZXIoR3JhcGgmIGRmZykKLSAgICA6
IENDYWxsSGVscGVycygmZGZnLm1fZ2xvYmFsRGF0YSwgZGZnLm1fY29kZUJsb2NrKQorICAgIDog
Q0NhbGxIZWxwZXJzKCZkZmcubV92bSwgZGZnLm1fY29kZUJsb2NrKQogICAgICwgbV9ncmFwaChk
ZmcpCiAgICAgLCBtX2N1cnJlbnRDb2RlT3JpZ2luSW5kZXgoMCkKIHsKLSAgICBpZiAoc2hvdWxk
U2hvd0Rpc2Fzc2VtYmx5KCkgfHwgbV9ncmFwaC5tX2dsb2JhbERhdGEubV9wZXJCeXRlY29kZVBy
b2ZpbGVyKQorICAgIGlmIChzaG91bGRTaG93RGlzYXNzZW1ibHkoKSB8fCBtX2dyYXBoLm1fdm0u
bV9wZXJCeXRlY29kZVByb2ZpbGVyKQogICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IGFkb3B0UHRy
KG5ldyBEaXNhc3NlbWJsZXIoZGZnKSk7CiB9CiAKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBKSVRD
b21waWxlcjo6bGlua09TUkV4aXRzKCkKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29kZUJs
b2NrKCktPndhdGNocG9pbnQoZXhpdC5tX3dhdGNocG9pbnRJbmRleCkuc2V0RGVzdGluYXRpb24o
bGFiZWwoKSk7CiAgICAgICAgIGppdEFzc2VydEhhc1ZhbGlkQ2FsbEZyYW1lKCk7Ci0gICAgICAg
IHN0b3JlMzIoVHJ1c3RlZEltbTMyKGkpLCAmZ2xvYmFsRGF0YSgpLT5vc3JFeGl0SW5kZXgpOwor
ICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihpKSwgJnZtKCktPm9zckV4aXRJbmRleCk7CiAg
ICAgICAgIGV4aXQuc2V0UGF0Y2hhYmxlQ29kZU9mZnNldChwYXRjaGFibGVKdW1wKCkpOwogICAg
IH0KIH0KQEAgLTIwNiwxNCArMjA2LDE0IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1
ZmZlciYgbGlua0IKICAgICAgICAgaW5mby5jYWxsVHlwZSA9IG1fanNDYWxsc1tpXS5tX2NhbGxU
eXBlOwogICAgICAgICBpbmZvLmlzREZHID0gdHJ1ZTsKICAgICAgICAgaW5mby5jb2RlT3JpZ2lu
ID0gbV9qc0NhbGxzW2ldLm1fY29kZU9yaWdpbjsKLSAgICAgICAgbGlua0J1ZmZlci5saW5rKG1f
anNDYWxsc1tpXS5tX3Nsb3dDYWxsLCBGdW5jdGlvblB0cigobV9nbG9iYWxEYXRhLT5nZXRDVElT
dHViKGluZm8uY2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3QgPyBsaW5rQ29uc3Ry
dWN0VGh1bmtHZW5lcmF0b3IgOiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKSkuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgbGlua0J1ZmZlci5saW5rKG1fanNDYWxsc1tpXS5t
X3Nsb3dDYWxsLCBGdW5jdGlvblB0cigobV92bS0+Z2V0Q1RJU3R1YihpbmZvLmNhbGxUeXBlID09
IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0ID8gbGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yIDog
bGlua0NhbGxUaHVua0dlbmVyYXRvcikpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAg
ICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVh
ckNhbGwobV9qc0NhbGxzW2ldLm1fc2xvd0NhbGwpOwogICAgICAgICBpbmZvLmhvdFBhdGhCZWdp
biA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2pzQ2FsbHNbaV0ubV90YXJnZXRUb0NoZWNrKTsK
ICAgICAgICAgaW5mby5ob3RQYXRoT3RoZXIgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2Fs
bChtX2pzQ2FsbHNbaV0ubV9mYXN0Q2FsbCk7CiAgICAgICAgIGluZm8uY2FsbGVlR1BSID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG1fanNDYWxsc1tpXS5tX2NhbGxlZSk7CiAgICAgfQogICAgIAot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0VGh1bmsgPSBnbG9iYWxEYXRhKCktPmdl
dENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7CisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIG9zckV4aXRUaHVuayA9IHZtKCktPmdldENUSVN0dWIob3NyRXhpdEdlbmVy
YXRpb25UaHVua0dlbmVyYXRvcik7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgdGFyZ2V0ID0gQ29k
ZUxvY2F0aW9uTGFiZWwob3NyRXhpdFRodW5rLmNvZGUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGNvZGVCbG9jaygpLT5udW1iZXJPZk9TUkV4aXRzKCk7ICsraSkgewogICAgICAg
ICBPU1JFeGl0JiBleGl0ID0gY29kZUJsb2NrKCktPm9zckV4aXQoaSk7CkBAIC0yNjAsNyArMjYw
LDcgQEAgYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZShKSVRDb2RlJiBlbnRyeQogICAgIHNwZWN1
bGF0aXZlLmNyZWF0ZU9TUkVudHJpZXMoKTsKICAgICBzZXRFbmRPZkNvZGUoKTsKIAotICAgIExp
bmtCdWZmZXIgbGlua0J1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jaywgSklU
Q29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKm1fdm0sIHRo
aXMsIG1fY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmIChsaW5rQnVm
ZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBsaW5r
KGxpbmtCdWZmZXIpOwpAQCAtMjkyLDcgKzI5Miw3IEBAIGJvb2wgSklUQ29tcGlsZXI6OmNvbXBp
bGVGdW5jdGlvbihKSVRDb2QKICAgICAvLyBQbGFudCBhIGNoZWNrIHRoYXQgc3VmZmljaWVudCBz
cGFjZSBpcyBhdmFpbGFibGUgaW4gdGhlIEpTU3RhY2suCiAgICAgLy8gRklYTUU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjI5MQogICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIobV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVy
KSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgSnVt
cCBzdGFja0NoZWNrID0gYnJhbmNoUHRyKEJlbG93LCBBYnNvbHV0ZUFkZHJlc3MobV9nbG9iYWxE
YXRhLT5pbnRlcnByZXRlci0+c3RhY2soKS5hZGRyZXNzT2ZFbmQoKSksIEdQUkluZm86OnJlZ1Qx
KTsKKyAgICBKdW1wIHN0YWNrQ2hlY2sgPSBicmFuY2hQdHIoQmVsb3csIEFic29sdXRlQWRkcmVz
cyhtX3ZtLT5pbnRlcnByZXRlci0+c3RhY2soKS5hZGRyZXNzT2ZFbmQoKSksIEdQUkluZm86OnJl
Z1QxKTsKICAgICAvLyBSZXR1cm4gaGVyZSBhZnRlciBzdGFjayBjaGVjay4KICAgICBMYWJlbCBm
cm9tU3RhY2tDaGVjayA9IGxhYmVsKCk7CiAKQEAgLTM0OSw3ICszNDksNyBAQCBib29sIEpJVENv
bXBpbGVyOjpjb21waWxlRnVuY3Rpb24oSklUQ29kCiAgICAgc2V0RW5kT2ZDb2RlKCk7CiAKICAg
ICAvLyA9PT0gTGluayA9PT0KLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKm1fZ2xvYmFsRGF0
YSwgdGhpcywgbV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jaywgSklUQ29tcGlsYXRpb25D
YW5GYWlsKTsKICAgICBpZiAobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgbGluayhsaW5rQnVmZmVyKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQWJzdHJhY3RTYW1wbGlu
Z0NvdW50ZXI7CiBjbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBW
TTsKIAogbmFtZXNwYWNlIERGRyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCB2
b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgZGF0YUxvZygiT1NS
IGluICIsICpjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksICIgLT4gIiwgKmNvZGVCbG9jaywgIiBm
cm9tIGJjIyIsIGJ5dGVjb2RlSW5kZXgsICJcbiIpOwogI2VuZGlmCiAgICAgCi0gICAgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKICAgICBPU1JFbnRyeURhdGEqIGVudHJ5ID0gY29kZUJsb2NrLT5kZmdPU1JF
bnRyeURhdGFGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIAogICAgIGlmICgh
ZW50cnkpIHsKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0
YXRlKiBleGVjLCBDCiAgICAgLy8gICAgaXQgc2VlbXMgc2lsbHk6IHlvdSdkIGJlIGRpdmVydGlu
ZyB0aGUgcHJvZ3JhbSB0byBlcnJvciBoYW5kbGluZyB3aGVuIGl0CiAgICAgLy8gICAgd291bGQg
aGF2ZSBvdGhlcndpc2UganVzdCBrZXB0IHJ1bm5pbmcgYWxiZWl0IGxlc3MgcXVpY2tseS4KICAg
ICAKLSAgICBpZiAoIWdsb2JhbERhdGEtPmludGVycHJldGVyLT5zdGFjaygpLmdyb3coJmV4ZWMt
PnJlZ2lzdGVycygpW2NvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnNdKSkgeworICAgIGlm
ICghdm0tPmludGVycHJldGVyLT5zdGFjaygpLmdyb3coJmV4ZWMtPnJlZ2lzdGVycygpW2NvZGVC
bG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnNdKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9P
U1IpCiAgICAgICAgIGRhdGFMb2dGKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHN0YWNrIGdyb3d0
aCBmYWlsZWQuXG4iKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAJKHJldmlzaW9uIDE0ODY4MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjQsNyArMjY0LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6
OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBzY3JhdGNoQnVm
ZmVyTGVuZ3RoQmVmb3JlVUludDMycyA9IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJz
ICsgKChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgKiAyKSA8PSBHUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVycyA/IDAgOiBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMp
OwotICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBtX2ppdC5nbG9iYWxEYXRhKCkt
PnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiAoc2NyYXRjaEJ1
ZmZlckxlbmd0aEJlZm9yZVVJbnQzMnMgKyAoaGF2ZVVJbnQzMnMgPyAyIDogMCkpKTsKKyAgICBT
Y3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbV9qaXQudm0oKS0+c2NyYXRjaEJ1ZmZlckZv
clNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIChzY3JhdGNoQnVmZmVyTGVuZ3RoQmVmb3Jl
VUludDMycyArIChoYXZlVUludDMycyA/IDIgOiAwKSkpOwogICAgIEVuY29kZWRKU1ZhbHVlKiBz
Y3JhdGNoRGF0YUJ1ZmZlciA9IHNjcmF0Y2hCdWZmZXIgPyBzdGF0aWNfY2FzdDxFbmNvZGVkSlNW
YWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgOiAwOwogCiAgICAgLy8gRnJvbSBo
ZXJlIG9uLCB0aGUgY29kZSBhc3N1bWVzIHRoYXQgaXQgaXMgcHJvZml0YWJsZSB0byBtYXhpbWl6
ZSB0aGUgZGlzdGFuY2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYwLDcgKzI2MCw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25z
dCAKICAgICBkYXRhTG9nRigiICIpOwogI2VuZGlmCiAgICAgCi0gICAgU2NyYXRjaEJ1ZmZlciog
c2NyYXRjaEJ1ZmZlciA9IG1faml0Lmdsb2JhbERhdGEoKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUo
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIHN0ZDo6bWF4KGhhdmVVSW50MzJzID8gMnUgOiAwdSwg
bnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMgKyAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0
dWFsUmVnaXN0ZXJzIDw9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzID8gMCA6IG51bWJlck9m
RGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycykpKTsKKyAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNo
QnVmZmVyID0gbV9qaXQudm0oKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSAqIHN0ZDo6bWF4KGhhdmVVSW50MzJzID8gMnUgOiAwdSwgbnVtYmVyT2ZQb2lzb25l
ZFZpcnR1YWxSZWdpc3RlcnMgKyAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzIDw9
IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzID8gMCA6IG51bWJlck9mRGlzcGxhY2VkVmlydHVh
bFJlZ2lzdGVycykpKTsKICAgICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRjaERhdGFCdWZmZXIgPSBz
Y3JhdGNoQnVmZmVyID8gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVy
LT5kYXRhQnVmZmVyKCkpIDogMDsKIAogICAgIC8vIEZyb20gaGVyZSBvbiwgdGhlIGNvZGUgYXNz
dW1lcyB0aGF0IGl0IGlzIHByb2ZpdGFibGUgdG8gbWF4aW1pemUgdGhlIGRpc3RhbmNlCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3Bw
CShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDkgKzQ4LDkgQEAgdm9pZCBjb21w
aWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgQVNTRVJUKGNvZGVCbG9jayk7CiAgICAg
QVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CiAgICAg
Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICAKLSAgICB1aW50MzJfdCBleGl0SW5kZXggPSBn
bG9iYWxEYXRhLT5vc3JFeGl0SW5kZXg7CisgICAgdWludDMyX3QgZXhpdEluZGV4ID0gdm0tPm9z
ckV4aXRJbmRleDsKICAgICBPU1JFeGl0JiBleGl0ID0gY29kZUJsb2NrLT5vc3JFeGl0KGV4aXRJ
bmRleCk7CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIGFsbCBjb2RlIG9uIG91ciBpbmxpbmUgc3Rh
Y2sgaXMgSklUIGNvbXBpbGVkLiBUaGlzIGlzIG5lY2Vzc2FyeSBzaW5jZQpAQCAtOTAsMTMgKzkw
LDEzIEBAIHZvaWQgY29tcGlsZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVjKQogI2VuZGlmCiAKICAg
ICB7Ci0gICAgICAgIENDYWxsSGVscGVycyBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSwgY29kZUJsb2NrKTsKICAgICAgICAgT1NSRXhpdENv
bXBpbGVyIGV4aXRDb21waWxlcihqaXQpOwogCiAgICAgICAgIGppdC5qaXRBc3NlcnRIYXNWYWxp
ZENhbGxGcmFtZSgpOwogICAgICAgICAKLSAgICAgICAgaWYgKGdsb2JhbERhdGEtPm1fcGVyQnl0
ZWNvZGVQcm9maWxlciAmJiBjb2RlQmxvY2stPmNvbXBpbGF0aW9uKCkpIHsKLSAgICAgICAgICAg
IFByb2ZpbGVyOjpEYXRhYmFzZSYgZGF0YWJhc2UgPSAqZ2xvYmFsRGF0YS0+bV9wZXJCeXRlY29k
ZVByb2ZpbGVyOworICAgICAgICBpZiAodm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBjb2Rl
QmxvY2stPmNvbXBpbGF0aW9uKCkpIHsKKyAgICAgICAgICAgIFByb2ZpbGVyOjpEYXRhYmFzZSYg
ZGF0YWJhc2UgPSAqdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcjsKICAgICAgICAgICAgIFByb2Zp
bGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBjb2RlQmxvY2stPmNvbXBpbGF0aW9uKCk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFByb2ZpbGVyOjpPU1JFeGl0KiBwcm9maWxlckV4
aXQgPSBjb21waWxhdGlvbi0+YWRkT1NSRXhpdCgKQEAgLTEwOCw3ICsxMDgsNyBAQCB2b2lkIGNv
bXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgCiAgICAgICAgIGV4aXRDb21w
aWxlci5jb21waWxlRXhpdChleGl0LCBvcGVyYW5kcywgcmVjb3ZlcnkpOwogICAgICAgICAKLSAg
ICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgY29kZUJsb2Nr
KTsKKyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIGNvZGVCbG9jayk7
CiAgICAgICAgIGV4aXQubV9jb2RlID0gRklOQUxJWkVfQ09ERV9JRigKICAgICAgICAgICAgIHNo
b3VsZFNob3dEaXNhc3NlbWJseSgpLAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCkBAIC0xMjIs
NyArMTIyLDcgQEAgdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKGV4aXQuY29kZUxvY2F0aW9uRm9yUmVwYXRjaChjb2RlQmxv
Y2spLCBDb2RlTG9jYXRpb25MYWJlbChleGl0Lm1fY29kZS5jb2RlKCkpKTsKICAgICB9CiAgICAg
Ci0gICAgZ2xvYmFsRGF0YS0+b3NyRXhpdEp1bXBEZXN0aW5hdGlvbiA9IGV4aXQubV9jb2RlLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIHZtLT5vc3JFeGl0SnVtcERlc3RpbmF0aW9u
ID0gZXhpdC5tX2NvZGUuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiB9CiAKIH0gLy8gZXh0
ZXJuICJDIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSAi
SklULmgiCiAjaW5jbHVkZSAiSklURXhjZXB0aW9ucy5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlv
bi5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVk
ZSAiSlNOYW1lU2NvcGUuaCIKICNpbmNsdWRlICJOYW1lSW5zdGFuY2UuaCIKICNpbmNsdWRlICJP
YmplY3RDb25zdHJ1Y3Rvci5oIgpAQCAtMjg0LDEzICsyODQsMTMgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogdGVtcGxhdGU8Ym9vbCBzdHJpY3Q+CiBzdGF0aWMgaW5saW5lIHZv
aWQgcHV0QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgdWludDMyX3Qg
aW5kZXgsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0g
ZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmds
b2JhbERhdGEsIGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogICAgIAogICAgIGlmIChiYXNlVmFsdWUu
aXNPYmplY3QoKSkgewogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZh
bHVlKTsKICAgICAgICAgaWYgKG9iamVjdC0+Y2FuU2V0SW5kZXhRdWlja2x5KGluZGV4KSkgewot
ICAgICAgICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHkoZ2xvYmFsRGF0YSwgaW5kZXgsIHZh
bHVlKTsKKyAgICAgICAgICAgIG9iamVjdC0+c2V0SW5kZXhRdWlja2x5KHZtLCBpbmRleCwgdmFs
dWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTMwNCw4ICszMDQsOCBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgcHV0QnlWYWwoRXhlY1N0YXRlKiBlCiB0ZW1wbGF0ZTxib29s
IHN0cmljdD4KIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeVZhbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9i
YWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBl
eGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRCYXNlKTsKICAgICBKU1ZhbHVlIHByb3BlcnR5ID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRQcm9wZXJ0eSk7CkBAIC0zMzMsNyArMzMzLDcgQEAgQUxXQVlTX0lOTElORSBz
dGF0aWMgdm9pZCBERkdfT1BFUkFUSU9OIAogCiAgICAgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVj
dCBpZiB0b1N0cmluZyB0aHJvd3MgYW4gZXhjZXB0aW9uLgogICAgIElkZW50aWZpZXIgaWRlbnQo
ZXhlYywgcHJvcGVydHkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICBpZiAoIWds
b2JhbERhdGEtPmV4Y2VwdGlvbikgeworICAgIGlmICghdm0tPmV4Y2VwdGlvbikgewogICAgICAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChzdHJpY3QpOwogICAgICAgICBiYXNlVmFsdWUucHV0KGV4
ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAgICAgfQpAQCAtMzQzLDE2ICszNDMsMTYgQEAgZXh0
ZXJuICJDIiB7CiAKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29udmVy
dFRoaXMoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3ApCiB7Ci0gICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9w
KS50b1RoaXNPYmplY3QoZXhlYykpOwogfQogCiBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQ3JlYXRlVGhpcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgaW50
MzJfdCBpbmxpbmVDYXBhY2l0eSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAm
ZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xv
YmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAg
ICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwpAQCAtMzY0LDE2ICszNjQsMTYgQEAgSlND
ZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRoaQogCiBKU0NlbGwqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERh
dGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMp
OworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVjdChl
eGVjLCBzdHJ1Y3R1cmUpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblZhbHVlQWRkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNWYWx1ZSBv
cDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CkBAIC0zODMsOCArMzgzLDggQEAgRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25WYQogCiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblZhbHVlQWRkTm90TnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKLSAgICBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAg
ICAgCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAg
SlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CkBAIC0zOTksOCArMzk5
LDggQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25WYQogCiBzdGF0aWMg
aW5saW5lIEVuY29kZWRKU1ZhbHVlIGdldEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBi
YXNlLCB1aW50MzJfdCBpbmRleCkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBl
eGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xv
YmFsRGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKGJhc2UtPmlzT2Jq
ZWN0KCkpIHsKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2UpOwpAQCAt
NDE2LDggKzQxNiw4IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgZ2V0QnlWYWwoRXgK
IAogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbChFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkUHJvcGVydHkpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmds
b2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEs
IGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKICAgICBKU1ZhbHVlIHByb3BlcnR5ID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRQcm9wZXJ0eSk7CkBAIC00NDcsOCArNDQ3LDggQEAgRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogCiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFz
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KQogewotICAgIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBK
U1ZhbHVlIHByb3BlcnR5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRQcm9wZXJ0eSk7CiAKQEAg
LTQ3Myw4ICs0NzMsOCBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
CiAKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxBcnJheUlu
dChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGJhc2UsIGludDMyX3QgaW5kZXgpCiB7Ci0gICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogICAgIAogICAgIGlmIChpbmRleCA8IDApIHsKICAgICAgICAgLy8gR28gdGhlIHNsb3dlc3Qg
d2F5IHBvc3NpYmxlIGJlY2FzZSBuZWdhdGl2ZSBpbmRpY2VzIGRvbid0IHVzZSBpbmRleGVkIHN0
b3JhZ2UuCkBAIC00ODcsOCArNDg3LDggQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25HZQogCiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5
SWQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBJZGVudGlmaWVyKiBwcm9w
ZXJ0eU5hbWUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2Jh
bERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4
ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGJhc2UpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7CkBAIC00
OTgsOCArNDk4LDggQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQog
Sl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKG9wZXJhdGlvbkdldEJ5
SWRCdWlsZExpc3QpOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRC
eUlkQnVpbGRMaXN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBiYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcykKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xv
YmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwg
ZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwogICAg
IEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZv
LmFjY2Vzc1R5cGUpOwpAQCAtNTE3LDggKzUxNyw4IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uR2UKIEpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
X0VKSShvcGVyYXRpb25HZXRCeUlkUHJvdG9CdWlsZExpc3QpOwogRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkUHJvdG9CdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVz
cyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIElkZW50aWZpZXIqIHByb3Bl
cnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogewotICAgIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAK
ICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0
U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CiAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3Rh
dGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CkBAIC01MzYsOCArNTM2
LDggQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogSl9GVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSk7CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwg
SWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Mp
CiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogICAgIAogICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMt
PmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBBY2Nlc3NUeXBl
IGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBl
KTsKQEAgLTU1OCwxNiArNTU4LDE2IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uR2UKIAogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25DYWxsQ3Vz
dG9tR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYyBmdW5jdGlvbiwgSWRlbnRpZmllciogaWRlbnQpCiB7Ci0gICAgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZnVuY3Rpb24oZXhlYywgYXNPYmplY3QoYmFzZSks
ICppZGVudCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNh
bGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2VsbCogdmFsdWUpCiB7
Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwogICAgIAogICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gYXNHZXR0ZXJT
ZXR0ZXIodmFsdWUpOwogICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBnZXR0ZXJTZXR0ZXItPmdldHRl
cigpOwpAQCAtNTgwLDQwICs1ODAsNDAgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25DYQogCiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3Qo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogICAgIAogICAgIG9wZXJhdGlvblB1dEJ5VmFsSW50ZXJuYWw8dHJ1ZT4oZXhlYywgZW5jb2Rl
ZEJhc2UsIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAogdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBvcGVyYXRpb25Q
dXRCeVZhbEludGVybmFsPGZhbHNlPihleGVjLCBlbmNvZGVkQmFzZSwgZW5jb2RlZFByb3BlcnR5
LCBlbmNvZGVkVmFsdWUpOwogfQogCiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlW
YWxDZWxsU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAgICAgCiAgICAgb3BlcmF0aW9uUHV0QnlWYWxJbnRlcm5hbDx0cnVlPihleGVjLCBKU1ZhbHVl
OjplbmNvZGUoY2VsbCksIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAogdm9p
ZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbE5vblN0cmljdChFeGVjU3RhdGUq
IGV4ZWMsIEpTQ2VsbCogY2VsbCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIG9wZXJhdGlvblB1
dEJ5VmFsSW50ZXJuYWw8ZmFsc2U+KGV4ZWMsIEpTVmFsdWU6OmVuY29kZShjZWxsKSwgZW5jb2Rl
ZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOwogfQogCiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQog
ewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKICAgICAKICAgICBpZiAoaW5kZXggPj0gMCkgewogICAgICAgICBhcnJheS0+cHV0
QnlJbmRleElubGluZShleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSks
IHRydWUpOwpAQCAtNjI3LDggKzYyNyw4IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeVZhbEJleW8KIAogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25k
QXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGlu
dDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAg
CiAgICAgaWYgKGluZGV4ID49IDApIHsKICAgICAgICAgYXJyYXktPnB1dEJ5SW5kZXhJbmxpbmUo
ZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBmYWxzZSk7CkBAIC02
NDIsOCArNjQyLDggQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwog
CiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxCZXlvbmRBcnJheUJv
dW5kc1N0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgaW50MzJfdCBpbmRl
eCwgZG91YmxlIHZhbHVlKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVj
LT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxE
YXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBK
U1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSk7CiAgICAgCkBAIC02NTksOCAr
NjU5LDggQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VgogCiB2b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxCZXlvbmRBcnJheUJvdW5kc05v
blN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgaW50MzJfdCBpbmRleCwg
ZG91YmxlIHZhbHVlKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5n
bG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRh
LCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBKU1Zh
bHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSk7CiAgICAgCkBAIC02NzYsOCArNjc2
LDggQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VgogCiBFbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaChFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNBcnJheSogYXJyYXkpCiB7Ci0gICAgSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwog
ICAgIAogICAgIGFycmF5LT5wdXNoKGV4ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGFycmF5LT5sZW5ndGgoKSkp
OwpAQCAtNjg1LDggKzY4NSw4IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQXIKIAogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2hE
b3VibGUoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFsdWUsIEpTQXJyYXkqIGFycmF5KQogewot
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKICAgICAKICAgICBhcnJheS0+cHVzaChleGVjLCBKU1ZhbHVlKEpTVmFsdWU6OkVuY29k
ZUFzRG91YmxlLCB2YWx1ZSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
YXJyYXktPmxlbmd0aCgpKSk7CkBAIC02OTQsMTYgKzY5NCwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uQXJyYXlQb3AoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkKIHsKLSAg
ICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CiAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhcnJheS0+cG9wKGV4ZWMpKTsK
IH0KICAgICAgICAgCiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5
UG9wQW5kUmVjb3Zlckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5KQogewot
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKICAgICAKICAgICBhcnJheS0+YnV0dGVyZmx5KCktPnNldFB1YmxpY0xlbmd0aChhcnJh
eS0+YnV0dGVyZmx5KCktPnB1YmxpY0xlbmd0aCgpICsgMSk7CiAgICAgCkBAIC03MTIsOCArNzEy
LDggQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcgogICAgICAgICAK
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwRXhlYyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgSlNDZWxsKiBhcmd1bWVudCkKIHsKLSAgICBKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAg
CiAgICAgaWYgKCFiYXNlLT5pbmhlcml0cygmUmVnRXhwT2JqZWN0OjpzX2luZm8pKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKQEAgLTcyNSw4ICs3MjUsOCBAQCBFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlCiAgICAgICAgIAogc2l6ZV90IERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
YmFzZSwgSlNDZWxsKiBhcmd1bWVudCkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEg
PSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
Z2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKICAgICBpZiAoIWJhc2UtPmluaGVy
aXRzKCZSZWdFeHBPYmplY3Q6OnNfaW5mbykpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
Yyk7CkBAIC03NDAsOCArNzQwLDggQEAgc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVn
RXhwVGVzdAogICAgICAgICAKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3Ry
aWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwq
IGJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgUHV0
UHJvcGVydHlTbG90IHNsb3QodHJ1ZSk7CiAgICAgYmFzZS0+bWV0aG9kVGFibGUoKS0+cHV0KGJh
c2UsIGV4ZWMsICpwcm9wZXJ0eU5hbWUsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBz
bG90KTsKQEAgLTc0OSw4ICs3NDksOCBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZFN0cmljCiAKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJh
c2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgUHV0UHJv
cGVydHlTbG90IHNsb3QoZmFsc2UpOwogICAgIGJhc2UtPm1ldGhvZFRhYmxlKCktPnB1dChiYXNl
LCBleGVjLCAqcHJvcGVydHlOYW1lLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xv
dCk7CkBAIC03NTgsMjkgKzc1OCwyOSBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZE5vblN0CiAKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3Ry
aWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwq
IGJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgUHV0
UHJvcGVydHlTbG90IHNsb3QodHJ1ZSk7CiAgICAgQVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkpOwot
ICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCAqcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CisgICAgYXNPYmpl
Y3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCAqcHJvcGVydHlOYW1lLCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAKIHZvaWQgREZHX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSkK
IHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwot
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAgICAgCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UpOwogICAgIEFT
U0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgKnByb3BlcnR5TmFtZSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSksIHNsb3QpOworICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwg
KnByb3BlcnR5TmFtZSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQog
CiBWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1
dEJ5SWRTdHJpY3RPcHRpbWl6ZSk7CiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlO
YW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiB7Ci0gICAgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAg
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHVi
SW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNf
Y2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKQEAgLTgwMyw4ICs4MDMsOCBA
QCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljCiBWX0ZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RP
cHRpbWl6ZSk7CiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9w
dGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1
cm5BZGRyZXNzKTsKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nl
c3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKQEAgLTgyNyw4ICs4MjcsOCBAQCB2b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0CiBWX0ZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6
ZSk7CiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGlt
aXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5B
ZGRyZXNzKTsKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NU
eXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKQEAgLTgzNyw3ICs4MzcsNyBAQCB2b2lkIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qo
dHJ1ZSk7CiAgICAgCiAgICAgQVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkpOwotICAgIGFzT2JqZWN0
KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCAqcHJvcGVydHlOYW1lLCB2YWx1
ZSwgc2xvdCk7CisgICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCAqcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiAgICAgCiAgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3Rh
dGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTg1MSw4ICs4NTEsOCBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjCiBWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJh
dGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7CiB2b2lkIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3Mo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFz
ZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEo
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOwor
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogICAgIAogICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4
ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NU
eXBlKTsKQEAgLTg2MSw3ICs4NjEsNyBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZERpcmVjCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UpOwogICAgIAogICAgIEFT
U0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIGFzT2Jq
ZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNs
b3QpOwogICAgIAogICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+
KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQogICAgICAgICByZXR1cm47CkBAIC04NzUsOCArODc1LDgg
QEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlYwogVl9GVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVp
bGRMaXN0KTsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRM
aXN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5B
ZGRyZXNzKTsKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NU
eXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKQEAgLTg5Niw4ICs4OTYsOCBAQCB2b2lkIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljCiBWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpOwog
dm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3RXaXRo
UmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcykKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhl
Yy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFs
RGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3Mp
OwogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0
dWJJbmZvLmFjY2Vzc1R5cGUpOwpAQCAtOTE3LDggKzkxNyw4IEBAIHZvaWQgREZHX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeUlkTm9uU3QKIFZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdCk7CiB2b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdFdpdGhS
ZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVj
LT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxE
YXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7
CiAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1
YkluZm8uYWNjZXNzVHlwZSk7CkBAIC05MjcsNyArOTI3LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5SWREaXJlYwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUpOwog
ICAgIAogICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+
cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3Qp
OworICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgKnByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QpOwogICAgIAogICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0
PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQogICAgICAgICByZXR1cm47CkBAIC05
MzgsOCArOTM4LDggQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlYwog
Vl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRC
eUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KTsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRl
bnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiB7
Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwogICAgIAogICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNv
ZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsK
QEAgLTk0OCw3ICs5NDgsNyBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERp
cmVjCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UpOwogICAgIAogICAgIEFTU0VSVChi
YXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPmds
b2JhbERhdGEoKSwgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIGFzT2JqZWN0KGJh
c2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwog
ICAgIAogICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJ
bmZvLmFjY2Vzc1R5cGUpKQogICAgICAgICByZXR1cm47CkBAIC05NTgsNDAgKzk1OCw0MCBAQCB2
b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjCiAKIHNpemVfdCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKLSAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAg
CiAgICAgcmV0dXJuIGpzTGVzczx0cnVlPihleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9w
MSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSk7CiB9CiAKIHNpemVfdCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAgIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAK
ICAgICByZXR1cm4ganNMZXNzRXE8dHJ1ZT4oZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cDEpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikpOwogfQogCiBzaXplX3QgREZHX09QRVJB
VElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0gICAgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAg
IAogICAgIHJldHVybiBqc0xlc3M8ZmFsc2U+KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
T3AyKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpKTsKIH0KIAogc2l6ZV90IERGR19PUEVS
QVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0gICAgSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwog
ICAgIAogICAgIHJldHVybiBqc0xlc3NFcTxmYWxzZT4oZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRPcDIpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSkpOwogfQogCiBzaXplX3QgREZH
X09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlRXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAgIEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAg
ICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZXF1YWxTbG93Q2FzZUlubGluZShleGVjLCBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSk7CiB9CkBA
IC0xMDAyLDggKzEwMDIsOCBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkNvCiBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEoRXhlY1N0
YXRlKiBleGVjLCBKU0NlbGwqIGxlZnQsIEpTQ2VsbCogcmlnaHQpCiAjZW5kaWYKIHsKLSAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAgICAgCiAgICAgYm9vbCByZXN1bHQgPSBhc1N0cmluZyhsZWZ0KS0+dmFsdWUoZXhlYykgPT0g
YXNTdHJpbmcocmlnaHQpLT52YWx1ZShleGVjKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTAx
NSw4ICsxMDE1LDggQEAgc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cgog
CiBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMikKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFs
RGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhl
Yyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZE9wMik7CkBAIC0xMDI5LDggKzEwMjksOCBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRp
b25Db21wYXJlU3RyCiAKIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4
ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2Jh
bERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBzcmMxID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgc3JjMiA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkT3AyKTsKQEAgLTEwNDEsNyArMTA0MSw3IEBAIHNpemVfdCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkNvbXBhcmVTdHIKIHN0YXRpYyB2b2lkKiBoYW5kbGVIb3N0Q2FsbChFeGVjU3Rh
dGUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgY2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsK
LSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwogCiAgICAgZXhlY0NhbGxlZS0+c2V0U2NvcGUoZXhlYy0+
c2NvcGUoKSk7CiAgICAgZXhlY0NhbGxlZS0+c2V0Q29kZUJsb2NrKDApOwpAQCAtMTA1MywxOCAr
MTA1MywxOCBAQCBzdGF0aWMgdm9pZCogaGFuZGxlSG9zdENhbGwoRXhlY1N0YXRlKiBlCiAgICAg
ICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZUpTKTsKICAgICAKICAgICAgICAgaWYgKGNh
bGxUeXBlID09IENhbGxUeXBlSG9zdCkgewotICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjQ2FsbGVlKTsKKyAgICAgICAgICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWNDYWxsZWUpOwogICAgICAgICAgICAgZXhlY0Nh
bGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwotICAgICAgICAgICAgZ2xvYmFsRGF0
YS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjYWxsRGF0YS5uYXRpdmUu
ZnVuY3Rpb24oZXhlY0NhbGxlZSkpOwotICAgICAgICAgICAgaWYgKGdsb2JhbERhdGEtPmV4Y2Vw
dGlvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih0aHJv
d0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpOworICAgICAgICAgICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKKyAgICAgICAgICAg
IGlmICh2bS0+ZXhjZXB0aW9uKQorICAgICAgICAgICAgICAgIHJldHVybiB2bS0+Z2V0Q1RJU3R1
Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpOwogCiAgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSk7CiAgICAgICAgIH0KICAgICAKICAgICAgICAgQVNT
RVJUKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSk7Ci0gICAgICAgIGV4ZWMtPmdsb2JhbERhdGEo
KS5leGNlcHRpb24gPSBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihleGVjLCBjYWxsZWUpOwotICAg
ICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxs
U2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICBl
eGVjLT52bSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGV4ZWMsIGNhbGxl
ZSk7CisgICAgICAgIHJldHVybiB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxs
U2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0KIAog
ICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwpAQCAtMTA3NSwyNSArMTA3NSwy
NSBAQCBzdGF0aWMgdm9pZCogaGFuZGxlSG9zdENhbGwoRXhlY1N0YXRlKiBlCiAgICAgQVNTRVJU
KGNvbnN0cnVjdFR5cGUgIT0gQ29uc3RydWN0VHlwZUpTKTsKICAgICAKICAgICBpZiAoY29uc3Ry
dWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlSG9zdCkgewotICAgICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWNDYWxsZWUpOworICAgICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjQ2FsbGVlKTsKICAgICAgICAgZXhlY0NhbGxlZS0+
c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwotICAgICAgICBnbG9iYWxEYXRhLT5ob3N0Q2Fs
bFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0
aW9uKGV4ZWNDYWxsZWUpKTsKLSAgICAgICAgaWYgKGdsb2JhbERhdGEtPmV4Y2VwdGlvbikKLSAg
ICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJv
bUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAg
ICAgIHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERh
dGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKKyAgICAgICAgaWYgKHZtLT5leGNlcHRp
b24pCisgICAgICAgICAgICByZXR1cm4gdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIAogICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZ2V0SG9zdENhbGxSZXR1cm5WYWx1
ZSk7CiAgICAgfQogICAgIAogICAgIEFTU0VSVChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5
cGVOb25lKTsKLSAgICBleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gY3JlYXRlTm90QUNv
bnN0cnVjdG9yRXJyb3IoZXhlYywgY2FsbGVlKTsKLSAgICByZXR1cm4gZ2xvYmFsRGF0YS0+Z2V0
Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpOworICAgIGV4ZWMtPnZtKCkuZXhjZXB0aW9uID0gY3JlYXRlTm90
QUNvbnN0cnVjdG9yRXJyb3IoZXhlYywgY2FsbGVlKTsKKyAgICByZXR1cm4gdm0tPmdldENUSVN0
dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKTsKIH0KIAogaW5saW5lIGNoYXIqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVj
Q2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgRXhlY1N0YXRlKiBl
eGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNWYWx1
ZSBjYWxsZWVBc1ZhbHVlID0gZXhlY0NhbGxlZS0+Y2FsbGVlQXNWYWx1ZSgpOwogICAgIEpTQ2Vs
bCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUpOwpA
QCAtMTExMiw4ICsxMTEyLDggQEAgaW5saW5lIGNoYXIqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVj
Q2FsbAogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0
YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogICAgICAgICBKU09i
amVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3IoZXhlY0NhbGxlZSwg
Y2FsbGVlLT5zY29wZSgpLCBraW5kKTsKICAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAg
ICBnbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYyk7
Ci0gICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZ2xvYmFsRGF0YS0+
Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgIHZtLT5leGNlcHRpb24gPSBjcmVh
dGVTdGFja092ZXJmbG93RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4odm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgICAgIH0KICAg
ICAgICAgY29kZUJsb2NrID0gJmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVG
b3Ioa2luZCk7CiAgICAgICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkp
CkBAIC0xMTQyLDggKzExNDIsOCBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtD
b25zdHJ1CiBpbmxpbmUgY2hhciogdmlydHVhbEZvcldpdGhGdW5jdGlvbihFeGVjU3RhdGUqIGV4
ZWNDYWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgSlNDZWxsKiYgY2FsbGVlQXNG
dW5jdGlvbkNlbGwpCiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVy
RnJhbWUoKTsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0
YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7
CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CiAKICAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBleGVjQ2FsbGVl
LT5jYWxsZWVBc1ZhbHVlKCk7CiAgICAgY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0
aW9uKGNhbGxlZUFzVmFsdWUpOwpAQCAtMTE1Nyw4ICsxMTU3LDggQEAgaW5saW5lIGNoYXIqIHZp
cnR1YWxGb3JXaXRoRnVuY3Rpb24oRXhlYwogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1
bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1
dGFibGUpOwogICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNv
bXBpbGVGb3IoZXhlY0NhbGxlZSwgZnVuY3Rpb24tPnNjb3BlKCksIGtpbmQpOwogICAgICAgICBp
ZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBl
cnJvcjsKLSAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihnbG9iYWxE
YXRhLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvciku
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgZXhlYy0+dm0oKS5leGNl
cHRpb24gPSBlcnJvcjsKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIq
Pih2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Ip
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZVdp
dGhBcml0eUNoZWNrRm9yKGtpbmQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwpAQCAtMTIzMSwzMSAr
MTIzMSwzMSBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5R2xvYmFsCiAKIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZShFeGVjU3RhdGUqIGV4
ZWMsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlv
bnMpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEo
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOwor
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNTY29wZTo6cmVzb2x2
ZShleGVjLCAqcHJvcGVydHlOYW1lLCBvcGVyYXRpb25zKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZUJhc2UoRXhlY1N0YXRlKiBleGVjLCBJZGVu
dGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zLCBQdXRU
b0Jhc2VPcGVyYXRpb24qIHB1dFRvQmFzZU9wZXJhdGlvbnMpCiB7Ci0gICAgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNTY29wZTo6cmVzb2x2ZUJhc2UoZXhlYywgKnByb3Bl
cnR5TmFtZSwgZmFsc2UsIG9wZXJhdGlvbnMsIHB1dFRvQmFzZU9wZXJhdGlvbnMpKTsKIH0KIAog
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlQmFzZVN0cmljdFB1
dChFeGVjU3RhdGUqIGV4ZWMsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmVzb2x2ZU9wZXJh
dGlvbnMqIG9wZXJhdGlvbnMsIFB1dFRvQmFzZU9wZXJhdGlvbiogcHV0VG9CYXNlT3BlcmF0aW9u
cykKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7Cisg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CiAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Njb3BlOjpy
ZXNvbHZlQmFzZShleGVjLCAqcHJvcGVydHlOYW1lLCB0cnVlLCBvcGVyYXRpb25zLCBwdXRUb0Jh
c2VPcGVyYXRpb25zKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUmVzb2x2ZUdsb2JhbChFeGVjU3RhdGUqIGV4ZWMsIFJlc29sdmVPcGVyYXRpb24qIHJlc29s
dmVPcGVyYXRpb24sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIElkZW50aWZpZXIqIHBy
b3BlcnR5TmFtZSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xv
YmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwg
ZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgQVNTRVJUKGdsb2JhbE9iamVjdCk7CiAgICAgVU5V
U0VEX1BBUkFNKHJlc29sdmVPcGVyYXRpb24pOwogICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmpl
Y3QpOwpAQCAtMTI2NSw4OCArMTI2NSw4OCBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblJlCiAKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9Q
cmltaXRpdmUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlOjpkZWNvZGUodmFsdWUp
LnRvUHJpbWl0aXZlKGV4ZWMpKTsKIH0KIAogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIHZvaWQq
IGJ1ZmZlciwgc2l6ZV90IHNpemUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0g
JmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGds
b2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8Y2hhcio+KGNvbnN0cnVjdEFycmF5KGV4ZWMsIGFycmF5U3RydWN0dXJlLCBzdGF0aWNf
Y2FzdDxKU1ZhbHVlKj4oYnVmZmVyKSwgc2l6ZSkpOwogfQogCiBjaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld0VtcHR5QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5
U3RydWN0dXJlKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9i
YWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBl
eGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKLSAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIq
PihKU0FycmF5OjpjcmVhdGUoKmdsb2JhbERhdGEsIGFycmF5U3RydWN0dXJlKSk7CisgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oSlNBcnJheTo6Y3JlYXRlKCp2bSwgYXJyYXlTdHJ1Y3R1
cmUpKTsKIH0KIAogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXpl
KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgaW50MzJfdCBzaXpl
KQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKIAogICAgIGlmIChVTkxJS0VMWShzaXplIDwgMCkpCiAgICAgICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoIkFycmF5IHNpemUgaXMgbm90IGEgc21hbGwgZW5vdWdoIHBvc2l0
aXZlIGludGVnZXIuIikpKSk7CiAKLSAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPihKU0Fy
cmF5OjpjcmVhdGUoKmdsb2JhbERhdGEsIGFycmF5U3RydWN0dXJlLCBzaXplKSk7CisgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oSlNBcnJheTo6Y3JlYXRlKCp2bSwgYXJyYXlTdHJ1Y3R1
cmUsIHNpemUpKTsKIH0KIAogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheUJ1
ZmZlcihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIHNpemVfdCBz
dGFydCwgc2l6ZV90IHNpemUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhl
Yy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2Jh
bERhdGEsIGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hh
cio+KGNvbnN0cnVjdEFycmF5KGV4ZWMsIGFycmF5U3RydWN0dXJlLCBleGVjLT5jb2RlQmxvY2so
KS0+Y29uc3RhbnRCdWZmZXIoc3RhcnQpLCBzaXplKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uTmV3UmVnZXhwKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogcmVn
ZXhwUHRyKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERh
dGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVj
KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoJnZtLCBleGVjKTsKICAgICBSZWdFeHAqIHJlZ2V4cCA9IHN0YXRpY19jYXN0PFJlZ0V4
cCo+KHJlZ2V4cFB0cik7CiAgICAgaWYgKCFyZWdleHAtPmlzVmFsaWQoKSkgewogICAgICAgICB0
aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsICJJbnZhbGlkIGZsYWdzIHN1
cHBsaWVkIHRvIFJlZ0V4cCBjb25zdHJ1Y3Rvci4iKSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogICAgIAotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoUmVnRXhwT2JqZWN0OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhw
U3RydWN0dXJlKCksIHJlZ2V4cCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoUmVnRXhw
T2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdleHApKTsK
IH0KIAogSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24oRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmds
b2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRh
LCBleGVjKTsKLSAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2YXRpb246OmNy
ZWF0ZShnbG9iYWxEYXRhLCBleGVjLCBleGVjLT5jb2RlQmxvY2soKSk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUodm0s
IGV4ZWMsIGV4ZWMtPmNvZGVCbG9jaygpKTsKICAgICBleGVjLT5zZXRTY29wZShhY3RpdmF0aW9u
KTsKICAgICByZXR1cm4gYWN0aXZhdGlvbjsKIH0KIAogSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNyZWF0ZUFyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogICAgIC8v
IE5COiBUaGlzIG5lZWRzIHRvIGJlIGV4Y2VlZGluZ2x5IGNhcmVmdWwgd2l0aCB0b3AgY2FsbCBm
cmFtZSB0cmFja2luZywgc2luY2UgaXQKICAgICAvLyBtYXkgYmUgY2FsbGVkIGZyb20gT1NSIGV4
aXQsIHdoaWxlIHRoZSBzdGF0ZSBvZiB0aGUgY2FsbCBzdGFjayBpcyBiaXphcnJlLgotICAgIEFy
Z3VtZW50cyogcmVzdWx0ID0gQXJndW1lbnRzOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZXhlYyk7Ci0g
ICAgQVNTRVJUKCFnbG9iYWxEYXRhLmV4Y2VwdGlvbik7CisgICAgQXJndW1lbnRzKiByZXN1bHQg
PSBBcmd1bWVudHM6OmNyZWF0ZSh2bSwgZXhlYyk7CisgICAgQVNTRVJUKCF2bS5leGNlcHRpb24p
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRp
b25DcmVhdGVJbmxpbmVkQXJndW1lbnRzKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
ID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
Jmdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogICAgIC8vIE5COiBUaGlzIG5lZWRz
IHRvIGJlIGV4Y2VlZGluZ2x5IGNhcmVmdWwgd2l0aCB0b3AgY2FsbCBmcmFtZSB0cmFja2luZywg
c2luY2UgaXQKICAgICAvLyBtYXkgYmUgY2FsbGVkIGZyb20gT1NSIGV4aXQsIHdoaWxlIHRoZSBz
dGF0ZSBvZiB0aGUgY2FsbCBzdGFjayBpcyBiaXphcnJlLgotICAgIEFyZ3VtZW50cyogcmVzdWx0
ID0gQXJndW1lbnRzOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZXhlYywgaW5saW5lQ2FsbEZyYW1lKTsK
LSAgICBBU1NFUlQoIWdsb2JhbERhdGEuZXhjZXB0aW9uKTsKKyAgICBBcmd1bWVudHMqIHJlc3Vs
dCA9IEFyZ3VtZW50czo6Y3JlYXRlKHZtLCBleGVjLCBpbmxpbmVDYWxsRnJhbWUpOworICAgIEFT
U0VSVCghdm0uZXhjZXB0aW9uKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMzY5LDEx
ICsxMzY5LDExIEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmSW5saW4KIAog
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRBcmd1bWVudHNMZW5ndGgo
RXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGFyZ3VtZW50c1JlZ2lzdGVyKQogewotICAgIEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKICAg
ICAvLyBIZXJlIHdlIGNhbiBhc3N1bWUgdGhhdCB0aGUgYXJndW1lcm50cyB3ZXJlIGNyZWF0ZWQu
IEJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBKSVQgY29kZSB3b3VsZAogICAgIC8vIGhhdmUgbm90IG1h
ZGUgdGhpcyBjYWxsLgotICAgIElkZW50aWZpZXIgaWRlbnQoJmdsb2JhbERhdGEsICJsZW5ndGgi
KTsKKyAgICBJZGVudGlmaWVyIGlkZW50KCZ2bSwgImxlbmd0aCIpOwogICAgIEpTVmFsdWUgYmFz
ZVZhbHVlID0gZXhlYy0+dW5jaGVja2VkUihhcmd1bWVudHNSZWdpc3RlcikuanNWYWx1ZSgpOwog
ICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShiYXNlVmFsdWUuZ2V0KGV4ZWMsIGlkZW50LCBzbG90KSk7CkBAIC0xMzgxLDE1ICsxMzgx
LDE1IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2UKIAogRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRBcmd1bWVudEJ5VmFsKEV4ZWNTdGF0
ZSogZXhlYywgaW50MzJfdCBhcmd1bWVudHNSZWdpc3RlciwgaW50MzJfdCBpbmRleCkKIHsKLSAg
ICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CiAKICAgICBKU1ZhbHVlIGFyZ3VtZW50c1ZhbHVlID0gZXhlYy0+dW5jaGVja2VkUihhcmd1
bWVudHNSZWdpc3RlcikuanNWYWx1ZSgpOwogICAgIAogICAgIC8vIElmIHRoZXJlIGFyZSBubyBh
cmd1bWVudHMsIGFuZCB3ZSdyZSBhY2Nlc3Npbmcgb3V0IG9mIGJvdW5kcywgdGhlbiB3ZSBoYXZl
IHRvIGNyZWF0ZSB0aGUKICAgICAvLyBhcmd1bWVudHMgaW4gY2FzZSBzb21lb25lIGhhcyBpbnN0
YWxsZWQgYSBnZXR0ZXIgb24gYSBudW1lcmljIHByb3BlcnR5LgogICAgIGlmICghYXJndW1lbnRz
VmFsdWUpCi0gICAgICAgIGV4ZWMtPnVuY2hlY2tlZFIoYXJndW1lbnRzUmVnaXN0ZXIpID0gYXJn
dW1lbnRzVmFsdWUgPSBBcmd1bWVudHM6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMp
OworICAgICAgICBleGVjLT51bmNoZWNrZWRSKGFyZ3VtZW50c1JlZ2lzdGVyKSA9IGFyZ3VtZW50
c1ZhbHVlID0gQXJndW1lbnRzOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYyk7CiAgICAgCiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShhcmd1bWVudHNWYWx1ZS5nZXQoZXhlYywgaW5kZXgpKTsK
IH0KQEAgLTEzOTcsOCArMTM5Nyw4IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uR2UKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0SW5saW5l
ZEFyZ3VtZW50QnlWYWwoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGFyZ3VtZW50c1Jl
Z2lzdGVyLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgaW50MzJfdCBpbmRleCkK
IHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CiAKICAgICBKU1ZhbHVlIGFyZ3VtZW50c1ZhbHVlID0gZXhlYy0+dW5jaGVja2Vk
Uihhcmd1bWVudHNSZWdpc3RlcikuanNWYWx1ZSgpOwogICAgIApAQCAtMTQwNiw3ICsxNDA2LDcg
QEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIC8vIGFyZ3Vt
ZW50cyBpbiBjYXNlIHNvbWVvbmUgaGFzIGluc3RhbGxlZCBhIGdldHRlciBvbiBhIG51bWVyaWMg
cHJvcGVydHkuCiAgICAgaWYgKCFhcmd1bWVudHNWYWx1ZSkgewogICAgICAgICBleGVjLT51bmNo
ZWNrZWRSKGFyZ3VtZW50c1JlZ2lzdGVyKSA9IGFyZ3VtZW50c1ZhbHVlID0KLSAgICAgICAgICAg
IEFyZ3VtZW50czo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYywgaW5saW5lQ2FsbEZy
YW1lKTsKKyAgICAgICAgICAgIEFyZ3VtZW50czo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMsIGlu
bGluZUNhbGxGcmFtZSk7CiAgICAgfQogICAgIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
YXJndW1lbnRzVmFsdWUuZ2V0KGV4ZWMsIGluZGV4KSk7CkBAIC0xNDE1LDggKzE0MTUsOCBAQCBF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiBKU0NlbGwqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGZ1bmN0
aW9uRXhlY3V0YWJsZSkKIHsKICAgICBBU1NFUlQoZnVuY3Rpb25FeGVjdXRhYmxlLT5pbmhlcml0
cygmRnVuY3Rpb25FeGVjdXRhYmxlOjpzX2luZm8pKTsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgcmV0dXJuIEpTRnVu
Y3Rpb246OmNyZWF0ZShleGVjLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihmdW5j
dGlvbkV4ZWN1dGFibGUpLCBleGVjLT5zY29wZSgpKTsKIH0KIApAQCAtMTQyNCw4ICsxNDI0LDgg
QEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aQogewogICAgIEFTU0VS
VChmdW5jdGlvbkV4ZWN1dGFibGVBc0NlbGwtPmluaGVyaXRzKCZGdW5jdGlvbkV4ZWN1dGFibGU6
OnNfaW5mbykpOwogCi0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFs
RGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4
ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOwogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4
ZWN1dGFibGUgPQogICAgICAgICBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihmdW5j
dGlvbkV4ZWN1dGFibGVBc0NlbGwpOwpAQCAtMTQ0OSwxNTUgKzE0NDksMTU1IEBAIEpTQ2VsbCog
REZHX09QRVJBVElPTiBvcGVyYXRpb25UeXBlT2YoRXgKIAogdm9pZCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGJhc2UsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQs
IEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9
IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZn
bG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKIAogICAgIEFTU0VSVChzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkgPiBiYXNlLT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSk7Ci0gICAgQVNTRVJUKCFnbG9iYWxEYXRhLmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpLmZh
c3RQYXRoU2hvdWxkU3VjY2VlZChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXpl
b2YoSlNWYWx1ZSkpKTsKLSAgICBiYXNlLT5zZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFn
ZUlmTmVjZXNzYXJ5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgYmFzZS0+cHV0RGlyZWN0
KGdsb2JhbERhdGEsIG9mZnNldCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CisgICAgQVNTRVJU
KCF2bS5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKS5mYXN0UGF0aFNob3VsZFN1Y2NlZWQoc3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgYmFzZS0+
c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSh2bSwgc3RydWN0dXJl
KTsKKyAgICBiYXNlLT5wdXREaXJlY3Qodm0sIG9mZnNldCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVl
KSk7CiB9CiAKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oCi0gICAgICAgIEJ1dHRlcmZseTo6Y3Jl
YXRlVW5pbml0aWFsaXplZChnbG9iYWxEYXRhLCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHks
IGZhbHNlLCAwKSk7CisgICAgICAgIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCh2bSwg
MCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5LCBmYWxzZSwgMCkpOwogfQogCiBjaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhl
Yywgc2l6ZV90IG5ld1NpemUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhl
Yy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2Jh
bERhdGEsIGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KAotICAgICAgICBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZ2xvYmFs
RGF0YSwgMCwgbmV3U2l6ZSwgZmFsc2UsIDApKTsKKyAgICAgICAgQnV0dGVyZmx5OjpjcmVhdGVV
bmluaXRpYWxpemVkKHZtLCAwLCBuZXdTaXplLCBmYWxzZSwgMCkpOwogfQogCiBjaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3Jh
Z2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkK
IHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CiAKICAgICBBU1NFUlQoIW9iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNh
cGFjaXR5KCkpOwotICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5ncm93T3V0T2ZMaW5l
U3RvcmFnZShnbG9iYWxEYXRhLCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpOworICAgIEJ1
dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5ncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgMCwgaW5p
dGlhbE91dE9mTGluZUNhcGFjaXR5KTsKICAgICBvYmplY3QtPnNldEJ1dHRlcmZseVdpdGhvdXRD
aGFuZ2luZ1N0cnVjdHVyZShyZXN1bHQpOwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNo
YXIqPihyZXN1bHQpOwogfQogCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2Nh
dGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogb2JqZWN0LCBzaXplX3QgbmV3U2l6ZSkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKLSAgICBCdXR0ZXJmbHkqIHJl
c3VsdCA9IG9iamVjdC0+Z3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgb2JqZWN0LT5z
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3U2l6ZSk7CisgICAgQnV0dGVyZmx5
KiByZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBvYmplY3QtPnN0cnVj
dHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdTaXplKTsKICAgICBvYmplY3QtPnNldEJ1
dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShyZXN1bHQpOwogICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkVuc3VyZUludDMyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewotICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKICAgICAKICAgICBpZiAoIWNlbGwtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIAotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihhc09iamVjdChjZWxsKS0+
ZW5zdXJlSW50MzIoZ2xvYmFsRGF0YSkuZGF0YSgpKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oYXNPYmplY3QoY2VsbCktPmVuc3VyZUludDMyKHZtKS5kYXRhKCkpOwogfQog
CiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZURvdWJsZShFeGVjU3RhdGUqIGV4
ZWMsIEpTQ2VsbCogY2VsbCkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVj
LT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFs
RGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKCFjZWxsLT5pc09iamVj
dCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oYXNPYmplY3QoY2VsbCktPmVuc3VyZURvdWJsZShnbG9iYWxEYXRhKS5kYXRhKCkp
OworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihhc09iamVjdChjZWxsKS0+ZW5z
dXJlRG91YmxlKHZtKS5kYXRhKCkpOwogfQogCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7Ci0gICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OwogICAgIAogICAgIGlmICghY2VsbC0+aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFzT2JqZWN0KGNlbGwpLT5l
bnN1cmVDb250aWd1b3VzKGdsb2JhbERhdGEpLmRhdGEoKSk7CisgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KGFzT2JqZWN0KGNlbGwpLT5lbnN1cmVDb250aWd1b3VzKHZtKS5kYXRh
KCkpOwogfQogCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJhZ2VFbnN1cmVDb250aWd1
b3VzKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewotICAgIEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKICAgICAKICAgICBp
ZiAoIWNlbGwtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PGNoYXIqPihhc09iamVjdChjZWxsKS0+cmFnZUVuc3VyZUNvbnRp
Z3VvdXMoZ2xvYmFsRGF0YSkuZGF0YSgpKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oYXNPYmplY3QoY2VsbCktPnJhZ2VFbnN1cmVDb250aWd1b3VzKHZtKS5kYXRhKCkpOwog
fQogCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZShFeGVj
U3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKCFjZWxs
LT5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PGNoYXIqPihhc09iamVjdChjZWxsKS0+ZW5zdXJlQXJyYXlTdG9yYWdlKGdsb2JhbERh
dGEpKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYXNPYmplY3QoY2VsbCkt
PmVuc3VyZUFycmF5U3RvcmFnZSh2bSkpOwogfQogCiBTdHJpbmdJbXBsKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblJlc29sdmVSb3BlKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZykK
IHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CiAKICAgICByZXR1cm4gc3RyaW5nLT52YWx1ZShleGVjKS5pbXBsKCk7CiB9CiAK
IEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3QoRXhlY1N0YXRl
KiBleGVjLCBKU1N0cmluZyogc3RyaW5nLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CiAgICAgCiAgICAgcmV0dXJuIFN0cmluZ09iamVjdDo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwg
c3RyaW5nKTsKIH0KIAogSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nT25D
ZWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewotICAgIEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKICAgICAKICAgICBy
ZXR1cm4gSlNWYWx1ZShjZWxsKS50b1N0cmluZyhleGVjKTsKIH0KIAogSlNDZWxsKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
dmFsdWUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkudG9T
dHJpbmcoZXhlYyk7CiB9CiAKIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9w
ZTIoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogbGVmdCwgSlNTdHJpbmcqIHJpZ2h0KQogewot
ICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKIAotICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZShnbG9iYWxEYXRhLCBsZWZ0
LCByaWdodCk7CisgICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlKHZtLCBsZWZ0LCByaWdo
dCk7CiB9CiAKIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTMoRXhlY1N0
YXRlKiBleGVjLCBKU1N0cmluZyogYSwgSlNTdHJpbmcqIGIsIEpTU3RyaW5nKiBjKQogewotICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKIAotICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZShnbG9iYWxEYXRhLCBhLCBiLCBj
KTsKKyAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGUodm0sIGEsIGIsIGMpOwogfQogCiBk
b3VibGUgREZHX09QRVJBVElPTiBvcGVyYXRpb25GTW9kT25JbnRzKGludDMyX3QgYSwgaW50MzJf
dCBiKQpAQCAtMTYwNywyOSArMTYwNywyOSBAQCBkb3VibGUgREZHX09QRVJBVElPTiBvcGVyYXRp
b25GTW9kT25JbnRzCiAKIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdGcm9t
Q2hhckNvZGUoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IG9wMSkKIHsKLSAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgcmV0
dXJuIEpTQzo6c3RyaW5nRnJvbUNoYXJDb2RlKGV4ZWMsIG9wMSk7CiB9CiAKIERGR0hhbmRsZXJF
bmNvZGVkIERGR19PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihFeGVjU3RhdGUqIGV4
ZWMsIHVpbnQzMl90IGNhbGxJbmRleCkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEg
PSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
Z2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBKU1ZhbHVlIGV4Y2VwdGlv
blZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvblZhbHVlKTsK
ICAgICAKICAgICB1bnNpZ25lZCB2UENJbmRleCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5ieXRlY29k
ZU9mZnNldEZvckNhbGxBdEluZGV4KGNhbGxJbmRleCk7Ci0gICAgRXhjZXB0aW9uSGFuZGxlciBo
YW5kbGVyID0gZ2VuZXJpY1Rocm93KGdsb2JhbERhdGEsIGV4ZWMsIGV4Y2VwdGlvblZhbHVlLCB2
UENJbmRleCk7CisgICAgRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gZ2VuZXJpY1Rocm93KHZt
LCBleGVjLCBleGNlcHRpb25WYWx1ZSwgdlBDSW5kZXgpOwogICAgIEFTU0VSVChoYW5kbGVyLmNh
dGNoUm91dGluZSk7CiAgICAgcmV0dXJuIGRmZ0hhbmRsZXJFbmNvZGVkKGhhbmRsZXIuY2FsbEZy
YW1lLCBoYW5kbGVyLmNhdGNoUm91dGluZSk7CiB9CiAKIERGR0hhbmRsZXJFbmNvZGVkIERGR19P
UEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlckluU3R1YihFeGVjU3RhdGUqIGV4ZWMsIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBKU1ZhbHVlIGV4Y2Vw
dGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvblZhbHVl
KTsKQEAgLTE2MzgsMTUgKzE2MzgsMTUgQEAgREZHSGFuZGxlckVuY29kZWQgREZHX09QRVJBVElP
TiBsb29rdXBFeAogICAgIHdoaWxlIChjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKICAgICAg
ICAgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXI7CiAgICAg
Ci0gICAgRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gZ2VuZXJpY1Rocm93KGdsb2JhbERhdGEs
IGV4ZWMsIGV4Y2VwdGlvblZhbHVlLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgIEV4
Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGdlbmVyaWNUaHJvdyh2bSwgZXhlYywgZXhjZXB0aW9u
VmFsdWUsIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgQVNTRVJUKGhhbmRsZXIuY2F0
Y2hSb3V0aW5lKTsKICAgICByZXR1cm4gZGZnSGFuZGxlckVuY29kZWQoaGFuZGxlci5jYWxsRnJh
bWUsIGhhbmRsZXIuY2F0Y2hSb3V0aW5lKTsKIH0KIAogc2l6ZV90IERGR19PUEVSQVRJT04gZGZn
Q29udmVydEpTVmFsdWVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFs
dWUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEo
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOwor
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogICAgIAogICAgIC8vIHRvSW50MzIvdG9VSW50MzIgcmV0dXJuIHRoZSBz
YW1lIHZhbHVlOyB3ZSB3YW50IHRoZSB2YWx1ZSB6ZXJvIGV4dGVuZGVkIHRvIGZpbGwgdGhlIHJl
Z2lzdGVyLgogICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLnRvVUludDMyKGV4ZWMp
OwpAQCAtMTY1NCwxNiArMTY1NCwxNiBAQCBzaXplX3QgREZHX09QRVJBVElPTiBkZmdDb252ZXJ0
SlNWYWx1ZVRvCiAKIHNpemVfdCBERkdfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29s
ZWFuKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wKQogewotICAgIEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
ICAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcCkudG9Cb29sZWFuKGV4
ZWMpOwogfQogCiB2b2lkIERGR19PUEVSQVRJT04gZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0
aW9uRmFpbHVyZShFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIGRlYnVnSW5mb1Jhdywgdm9pZCogc2Ny
YXRjaCkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0
YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7
CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvKiBk
ZWJ1Z0luZm8gPSBzdGF0aWNfY2FzdDxTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qPihkZWJ1
Z0luZm9SYXcpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZGVidWdJbmZvLT5jb2RlQmxv
Y2s7CkBAIC0xNzk4LDcgKzE3OTgsNyBAQCBleHRlcm4gIkMiIEVuY29kZWRKU1ZhbHVlIEhPU1Rf
Q0FMTF9SRVRVCiB7CiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT5nbG9iYWxE
YXRhKCkuaG9zdENhbGxSZXR1cm5WYWx1ZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShl
eGVjLT52bSgpLmhvc3RDYWxsUmV0dXJuVmFsdWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmgJKHJldmlzaW9uIDE0ODY4MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNTcsNyArNTcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gVGhpbmdzIHlvdSBuZWVkIHRvIGhh
dmUgYSBERkcgY29tcGlsZXIgcGhhc2UuCiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAgICAgCi0gICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKCkgeyByZXR1cm4gbV9ncmFwaC5tX2dsb2JhbERhdGE7
IH0KKyAgICBWTSYgdm0oKSB7IHJldHVybiBtX2dyYXBoLm1fdm07IH0KICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fZ3JhcGgubV9jb2RlQmxvY2s7IH0KICAgICBDb2RlQmxv
Y2sqIHByb2ZpbGVkQmxvY2soKSB7IHJldHVybiBtX2dyYXBoLm1fcHJvZmlsZWRCbG9jazsgfQog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZp
c2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsNyArMTcyLDcgQEAgc3RhdGljIHZvaWQgbGlua1Jlc3Rv
cmVTY3JhdGNoKExpbmtCdWZmZQogCiBzdGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nl
c3NTdHViKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1
Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2Rl
TG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVsLCBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHVi
Um91dGluZSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFs
RGF0YSgpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXIg
c3R1YkppdDsKICAgICAgICAgCkBAIC0yMzEsNyArMjMxLDcgQEAgc3RhdGljIHZvaWQgZ2VuZXJh
dGVQcm90b0NoYWluQWNjZXNzU3R1YgogICAgIAogICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHVi
Sml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFp
bHVyZUNhc2VzKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRh
LCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOwogICAgIAogICAgIGxpbmtSZXN0
b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZh
aWwsIGZhaWx1cmVDYXNlcywgc3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxhYmVsKTsKICAgICAKQEAg
LTI0Nyw3ICsyNDcsNyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBl
CiAgICAgLy8gbGlrZSB0aGUgaW50ZXJwcmV0ZXIgZG9lcywgdGhlbiBhZGQgYSBjaGVjayBmb3Ig
cmVjdXJzaW9uLgogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2so
KTsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwor
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIAogICAgIGlmIChpc0pTQXJyYXkoYmFzZVZh
bHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewog
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0
Y2guZGZnLmJhc2VHUFIpOwpAQCAtMjkyLDcgKzI5Miw3IEBAIHN0YXRpYyBib29sIHRyeUNhY2hl
R2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgCiAgICAgICAgIGVtaXRSZXN0b3JlU2NyYXRj
aChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFp
bCwgZmFpbHVyZUNhc2VzKTsKICAgICAgICAgCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKmdsb2JhbERhdGEsICZzdHViSml0LCBjb2RlQmxvY2spOworICAgICAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGNvZGVCbG9jayk7CiAgICAgICAgIAogICAgICAg
ICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBz
dHViSW5mbywgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKICAgICAgICAgCkBAIC0zMzAs
NyArMzMwLDcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAg
ICAgICB9CiAKICAgICAgICAgZGZnUmVwYXRjaEJ5SWRTZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1
YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb3BlcmF0aW9uR2V0QnlJZEJ1
aWxkTGlzdCwgdHJ1ZSk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZigqZ2xvYmFs
RGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKKyAgICAgICAg
c3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgc3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApAQCAtMzU2
LDcgKzM1Niw3IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAg
ICByZXBsYWNlV2l0aEp1bXAocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8sIHN0dWJJbmZvLnN0dWJS
b3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRQcm90b0J1aWxkTGlzdCk7CiAg
ICAgCi0gICAgc3R1YkluZm8uaW5pdEdldEJ5SWRDaGFpbigqZ2xvYmFsRGF0YSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHRy
dWUpOworICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkQ2hhaW4oKnZtLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgdHJ1ZSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTM4Niw3ICszODYsNyBAQCBzdGF0aWMgYm9vbCB0cnlC
dWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVj
LT5jb2RlQmxvY2soKTsKICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgp
OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOwotICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgCiAgICAgQVNTRVJUKHNsb3Quc2xvdEJhc2UoKS5pc09i
amVjdCgpKTsKICAgICAKQEAgLTQwMCw3ICs0MDAsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdl
dEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgIGxpc3RJbmRleCA9IDA7CiAgICAgfSBlbHNlIGlm
IChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZikgewogICAgICAg
ICBBU1NFUlQoIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1
Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqZ2xvYmFsRGF0
YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgSklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNl
bGZNYW5hZ2VkUm91dGluZShzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpLCBzdHViSW5mby51Lmdl
dEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHRydWUpOworICAgICAgICBwb2x5
bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgSklUU3R1YlJvdXRpbmU6OmNyZWF0
ZVNlbGZNYW5hZ2VkUm91dGluZShzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpLCBzdHViSW5mby51
LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHRydWUpOwogICAgICAgICBz
dHViSW5mby5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSk7
CiAgICAgICAgIGxpc3RJbmRleCA9IDE7CiAgICAgfSBlbHNlIHsKQEAgLTQxOCw3ICs0MTgsNyBA
QCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1
ZUdQUik7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8u
cGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKICAgICAgICAgCi0gICAgICAg
IENDYWxsSGVscGVycyBzdHViSml0KGdsb2JhbERhdGEsIGNvZGVCbG9jayk7CisgICAgICAgIEND
YWxsSGVscGVycyBzdHViSml0KHZtLCBjb2RlQmxvY2spOwogICAgICAgICAKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgd3JvbmdTdHJ1Y3QgPSBzdHViSml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1
Y3R1cmUpKTsKICAgICAgICAgCkBAIC01MDcsNyArNTA3LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVp
bGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAgICAgICAgaXNEaXJlY3QgPSB0cnVlOwogICAg
ICAgICB9CiAKLSAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0
dWJKaXQsIGNvZGVCbG9jayk7CisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAm
c3R1YkppdCwgY29kZUJsb2NrKTsKICAgICAgICAgCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
IGxhc3RQcm90b0JlZ2luOwogICAgICAgICBpZiAobGlzdEluZGV4KQpAQCAtNTMwLDEyICs1MzAs
MTIgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAgICAg
ICAgICAgICAgICAoIkRGRyBHZXRCeUlkIHBvbHltb3JwaGljIGxpc3QgYWNjZXNzIGZvciAlcywg
cmV0dXJuIHBvaW50ICVwIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhl
Yy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZn
LmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAotICAgICAgICAgICAgICAg
ICpnbG9iYWxEYXRhLAorICAgICAgICAgICAgICAgICp2bSwKICAgICAgICAgICAgICAgICBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAgICAgICAgIHNsb3QuY2FjaGVkUHJv
cGVydHlUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpHZXR0ZXIKICAgICAgICAgICAgICAgICB8fCBz
bG90LmNhY2hlZFByb3BlcnR5VHlwZSgpID09IFByb3BlcnR5U2xvdDo6Q3VzdG9tKTsKICAgICAg
ICAgCi0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNl
dCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUs
IHN0cnVjdHVyZSwgaXNEaXJlY3QpOworICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qt
Pmxpc3RbbGlzdEluZGV4XS5zZXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBz
dHViUm91dGluZSwgc3RydWN0dXJlLCBpc0RpcmVjdCk7CiAgICAgICAgIAogICAgICAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoCkBAIC01NzcsMTQgKzU3NywxNCBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5
SURQcm90b0xpc3QoRXhlCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlVmFsdWUuYXND
ZWxsKCktPnN0cnVjdHVyZSgpOwogICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9
IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAm
ZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIAogICAg
IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0
OwogICAgIGludCBsaXN0SW5kZXggPSAxOwogICAgIAogICAgIGlmIChzdHViSW5mby5hY2Nlc3NU
eXBlID09IGFjY2Vzc19nZXRfYnlfaWRfY2hhaW4pIHsKICAgICAgICAgQVNTRVJUKCEhc3R1Yklu
Zm8uc3R1YlJvdXRpbmUpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBzdHViSW5mby5zdHViUm91dGluZSwgc3R1YkluZm8udS5nZXRCeUlk
Q2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4u
Y2hhaW4uZ2V0KCksIHRydWUpOworICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBu
ZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUsIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWlu
LmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWlu
LmdldCgpLCB0cnVlKTsKICAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUuY2xlYXIoKTsKICAg
ICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRQcm90b0xpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0LCAxKTsKICAgICB9IGVsc2UgewpAQCAtNjAzLDcgKzYwMyw3IEBAIHN0YXRpYyBib29sIHRy
eUJ1aWxkR2V0QnlJRFByb3RvTGlzdChFeGUKICAgICAgICAgCiAgICAgICAgIGdlbmVyYXRlUHJv
dG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwg
b2Zmc2V0LCBzdHJ1Y3R1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLCBsYXN0UHJvdG9CZWdpbiwg
c3R1YlJvdXRpbmUpOwogICAgICAgICAKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0
LT5saXN0W2xpc3RJbmRleF0uc2V0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCB0cnVlKTsKKyAgICAgICAgcG9seW1vcnBo
aWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCp2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgdHJ1ZSk7CiAgICAgICAgIAog
ICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAgICAg
cmVwbGFjZVdpdGhKdW1wKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBzdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSk7CkBAIC02NTcsNyArNjU3LDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFJlcGxh
Y2VTdHViKAogICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJlbCwKICAgICBSZWZQdHI8
SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKIHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwog
ICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5k
ZmcuYmFzZUdQUik7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBHUFJSZWcgdmFsdWVUYWdH
UFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZVRhZ0dQUik7
CkBAIC03MzMsNyArNzMzLDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFJlcGxhY2VTdHViKAogICAg
ICAgICBmYWlsdXJlID0gYmFkU3RydWN0dXJlOwogICAgIH0KICAgICAKLSAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2Nr
KCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkp
OwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgZmFpbHVyZUxhYmVsKTsKICAgICAgICAg
ICAgIApAQCAtNzU3LDcgKzc1Nyw3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1
YigKICAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwsCiAgICAgUmVmUHRyPEpJVFN0
dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKIAogICAg
IEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcu
YmFzZUdQUik7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTc3Miw3ICs3NzIsNyBAQCBzdGF0
aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAjZW5kaWYKICAgICBhbGxvY2F0b3IubG9j
ayh2YWx1ZUdQUik7CiAgICAgCi0gICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQoZ2xvYmFsRGF0YSk7
CisgICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQodm0pOwogICAgICAgICAgICAgCiAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIxID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwogICAgIEFTU0VS
VChzY3JhdGNoR1BSMSAhPSBiYXNlR1BSKTsKQEAgLTg0MCw3ICs4NDAsNyBAQCBzdGF0aWMgdm9p
ZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgCiAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKICAg
ICAgICAgc2l6ZV90IG5ld1NpemUgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBz
aXplb2YoSlNWYWx1ZSk7Ci0gICAgICAgIENvcGllZEFsbG9jYXRvciogY29waWVkQWxsb2NhdG9y
ID0gJmdsb2JhbERhdGEtPmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOworICAgICAgICBDb3BpZWRB
bGxvY2F0b3IqIGNvcGllZEFsbG9jYXRvciA9ICZ2bS0+aGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7
CiAgICAgICAgIAogICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSkgewogICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3Vy
cmVudFJlbWFpbmluZywgc2NyYXRjaEdQUjEpOwpAQCAtOTEyLDcgKzkxMiw3IEBAIHN0YXRpYyB2
b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAgc2xvd1BhdGgubGluaygmc3R1Ykpp
dCk7CiAgICAgICAgIAogICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5
UG9wcGluZyhzdHViSml0KTsKLSAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9
IGdsb2JhbERhdGEtPnNjcmF0Y2hCdWZmZXJGb3JTaXplKGFsbG9jYXRvci5kZXNpcmVkU2NyYXRj
aEJ1ZmZlclNpemUoKSk7CisgICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2
bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoYWxsb2NhdG9yLmRlc2lyZWRTY3JhdGNoQnVmZmVyU2l6
ZSgpKTsKICAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1
ZmZlcihzdHViSml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMSk7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihzbG90LmNhY2hlZE9mZnNldCgpKSwgdmFsdWVHUFIpOwpAQCAtOTI0
LDcgKzkyNCw3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAg
c3VjY2Vzc0luU2xvd1BhdGggPSBzdHViSml0Lmp1bXAoKTsKICAgICB9CiAgICAgCi0gICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9j
aygpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGV4ZWMtPmNv
ZGVCbG9jaygpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxU
b0RvbmUpKTsKICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpCiAgICAgICAg
IHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgZmFpbHVyZUxhYmVsKTsKQEAgLTk0NCw3ICs5NDQs
NyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgICAgICAgICAgICAg
ICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLAogICAgICAgICAgICAgICAgICAgICB0b0NTdHJp
bmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2gu
ZGZnLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAotICAgICAgICAgICAg
Kmdsb2JhbERhdGEsCisgICAgICAgICAgICAqdm0sCiAgICAgICAgICAgICBleGVjLT5jb2RlQmxv
Y2soKS0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAogICAgICAg
ICAgICAgc3RydWN0dXJlKTsKQEAgLTk1Myw3ICs5NTMsNyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0
VHJhbnNpdGlvblN0dWIoCiBzdGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFB1
dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5k
IHB1dEtpbmQpCiB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2so
KTsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwor
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogCiAgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwMDIsMTMgKzEwMDIsMTMgQEAgc3RhdGljIGJv
b2wgdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAgICAgICAg
ICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFw
cHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCpn
bG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBvbGRTdHJ1Y3R1cmUsIHN0
cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIHB1dEtpbmQgPT0gRGlyZWN0KTsKKyAgICAgICAgICAg
IHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgcHV0S2lu
ZCA9PSBEaXJlY3QpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQogCiAgICAgICAgIGRmZ1JlcGF0Y2hCeUlkU2VsZkFjY2Vzcyhjb2RlQmxvY2ssIHN0
dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIGFwcHJvcHJpYXRlTGlzdEJ1
aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpLCBmYWxzZSk7Ci0gICAgICAgIHN0
dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZSgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKKyAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBs
YWNlKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xMDI1LDcgKzEwMjUsNyBAQCB2b2lkIGRmZ1Jl
cGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgCiBzdGF0aWMgYm9vbCB0cnlCdWlsZFB1dEJ5
SWRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAKICAg
ICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA3
Nyw3ICsxMDc3LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdAog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoCiAgICAgICAgICAgICAg
ICAgUHV0QnlJZEFjY2Vzczo6dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAgICAgICAgKmdsb2Jh
bERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgICAgICAgICAgICAg
ICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgICAgICAgICAgICAg
b2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLAogICAgICAgICAgICAgICAg
ICAgICBzdHViUm91dGluZSkpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTA5Miw3ICsxMDkyLDcg
QEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdAogICAgICAgICAgICAg
CiAgICAgICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoCiAgICAgICAgICAgICAgICAgUHV0QnlJZEFj
Y2Vzczo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICAgICAgKmdsb2JhbERhdGEsIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBzdHVi
Um91dGluZSkpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTExNSwxNCArMTExNSwxNCBAQCB2
b2lkIGRmZ0J1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiBleGVjCiAgICAgICAgIGRmZ1JlcGF0
Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFw
cHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiB9CiAKLXN0
YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCkKK3N0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFJlcGF0Y2hCdWZm
ZXImIHJlcGF0Y2hCdWZmZXIsIFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2Fs
bCkgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2FsbFJldHVy
bkxvY2F0aW9uLCBnbG9iYWxEYXRhLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0
b3IpLmNvZGUoKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0
b3IpLmNvZGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJUKGtpbmQgPT0g
Q29kZUZvckNvbnN0cnVjdCk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3Ry
dWN0VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2Fs
bExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIodmlydHVhbENvbnN0
cnVjdFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwogfQogCiB2b2lkIGRmZ0xpbmtGb3IoRXhlY1N0
YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVD
b2RlQmxvY2ssIEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQ
dHIsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKQEAgLTExMzAsMzUgKzExMzAsMzUgQEAg
dm9pZCBkZmdMaW5rRm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbgogICAgIEFTU0VSVCghY2Fs
bExpbmtJbmZvLnN0dWIpOwogICAgIAogICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0g
ZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhID0gY2FsbGVyQ29kZUJsb2NrLT5nbG9iYWxEYXRhKCk7CisgICAgVk0qIHZtID0gY2Fs
bGVyQ29kZUJsb2NrLT52bSgpOwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihjYWxsZXJDb2RlQmxvY2spOwogICAgIAogICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLmlzTGlu
a2VkKCkpOwotICAgIGNhbGxMaW5rSW5mby5jYWxsZWUuc2V0KGV4ZWMtPmNhbGxlckZyYW1lKCkt
Pmdsb2JhbERhdGEoKSwgY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbiwgY2FsbGVyQ29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKLSAgICBjYWxsTGlua0luZm8ubGFzdFNlZW5D
YWxsZWUuc2V0KGV4ZWMtPmNhbGxlckZyYW1lKCktPmdsb2JhbERhdGEoKSwgY2FsbGVyQ29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKKyAgICBjYWxsTGlua0luZm8uY2FsbGVl
LnNldChleGVjLT5jYWxsZXJGcmFtZSgpLT52bSgpLCBjYWxsTGlua0luZm8uaG90UGF0aEJlZ2lu
LCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOworICAgIGNhbGxM
aW5rSW5mby5sYXN0U2VlbkNhbGxlZS5zZXQoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+dm0oKSwgY2Fs
bGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKICAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhjYWxsTGlua0luZm8uaG90UGF0aE90aGVyLCBjb2RlUHRyKTsKICAgICAKICAg
ICBpZiAoY2FsbGVlQ29kZUJsb2NrKQogICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNv
bWluZ0NhbGwoJmNhbGxMaW5rSW5mbyk7CiAgICAgCiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNh
bGwpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiwgZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVua0dl
bmVyYXRvcikuY29kZSgpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1
bmtHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAg
QVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgbGlua1Nsb3dGb3IocmVwYXRj
aEJ1ZmZlciwgZ2xvYmFsRGF0YSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAg
ICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ29u
c3RydWN0KTsKIH0KIAogdm9pZCBkZmdMaW5rU2xvd0ZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAg
ICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2Rl
QmxvY2soKTsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBjYWxsZXJDb2RlQmxvY2st
Pmdsb2JhbERhdGEoKTsKKyAgICBWTSogdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7CiAgICAg
CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7CiAgICAg
Ci0gICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgZ2xvYmFsRGF0YSwgY2FsbExpbmtJbmZv
LCBraW5kKTsKKyAgICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZv
LCBraW5kKTsKIH0KIAogdm9pZCBkZmdMaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVjLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGNvZGVQdHIpCkBAIC0xMTY2LDExICsxMTY2LDExIEBAIHZvaWQgZGZnTGlu
a0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSogZXhlYywKICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5z
dHViKTsKICAgICAKICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxl
ckZyYW1lKCktPmNvZGVCbG9jaygpOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IGNh
bGxlckNvZGVCbG9jay0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2bSA9IGNhbGxlckNvZGVCbG9j
ay0+dm0oKTsKICAgICAKICAgICBHUFJSZWcgY2FsbGVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVn
PihjYWxsTGlua0luZm8uY2FsbGVlR1BSKTsKICAgICAKLSAgICBDQ2FsbEhlbHBlcnMgc3R1Ykpp
dChnbG9iYWxEYXRhLCBjYWxsZXJDb2RlQmxvY2spOworICAgIENDYWxsSGVscGVycyBzdHViSml0
KHZtLCBjYWxsZXJDb2RlQmxvY2spOwogICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
c2xvd1BhdGg7CiAgICAgCkBAIC0xMjIzLDExICsxMjIzLDExIEBAIHZvaWQgZGZnTGlua0Nsb3N1
cmVDYWxsKEV4ZWNTdGF0ZSogZXhlYywKICAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNz
QmVmb3JlUmV0dXJuKEdQUkluZm86Om5vbkFyZ0dQUjIpOwogICAgIEpJVENvbXBpbGVyOjpKdW1w
IHNsb3cgPSBzdHViSml0Lmp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCpnbG9iYWxEYXRhLCAmc3R1YkppdCwgY2FsbGVyQ29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGNhbGxlckNvZGVCbG9jayk7CiAgICAgCiAgICAg
cGF0Y2hCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihjb2RlUHRyLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgwKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93
LCBDb2RlTG9jYXRpb25MYWJlbChnbG9iYWxEYXRhLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1
bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxv
Y2F0aW9uTGFiZWwodm0tPmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29k
ZSgpKSk7CiAgICAgCiAgICAgUmVmUHRyPENsb3N1cmVDYWxsU3R1YlJvdXRpbmU+IHN0dWJSb3V0
aW5lID0gYWRvcHRSZWYobmV3IENsb3N1cmVDYWxsU3R1YlJvdXRpbmUoCiAgICAgICAgIEZJTkFM
SVpFX0RGR19DT0RFKApAQCAtMTIzNSwxNCArMTIzNSwxNCBAQCB2b2lkIGRmZ0xpbmtDbG9zdXJl
Q2FsbChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgICAgICAoIkRGRyBjbG9zdXJlIGNhbGwgc3R1
YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCwgdGFyZ2V0ICVwICglcykiLAogICAgICAgICAgICAg
ICAgIHRvQ1N0cmluZygqY2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgwKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAg
ICAgICAgICAgICAgIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgdG9DU3RyaW5nKHBvaW50
ZXJEdW1wKGNhbGxlZUNvZGVCbG9jaykpLmRhdGEoKSkpLAotICAgICAgICAqZ2xvYmFsRGF0YSwg
Y2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBleGVjdXRhYmxl
LCBjYWxsTGlua0luZm8uY29kZU9yaWdpbikpOworICAgICAgICAqdm0sIGNhbGxlckNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgZXhlY3V0YWJsZSwgY2FsbExpbmtJbmZv
LmNvZGVPcmlnaW4pKTsKICAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2Fs
bGVyQ29kZUJsb2NrKTsKICAgICAKICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVtcCgK
ICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0
ZXIoY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbiksCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1
ZmZlciwgZ2xvYmFsRGF0YSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCk7CisgICAgbGlua1Ns
b3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwpOwogICAg
IAogICAgIGNhbGxMaW5rSW5mby5zdHViID0gc3R1YlJvdXRpbmUucmVsZWFzZSgpOwogICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjg5LDEy
ICsxMjg5LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGkKICAg
ICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxk
MSgpLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIERG
R19UWVBFX0NIRUNLKAogICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3Ay
R1BSKSwgbm9kZS0+Y2hpbGQyKCksIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAot
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMp
OwogICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwpAQCAtMTMw
NCw3ICsxMzA0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaQog
ICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbm9kZS0+Y2hp
bGQxKCksIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCi0gICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkp
OwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94
ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCAKICAgICAgICAgICAgIG1faml0LmJyYW5j
aFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAgLTEz
MTYsNyArMTMxNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGkK
ICAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNo
aWxkMigpLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAotICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkp
KTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJv
eGVkQ2VsbChvcDJHUFIpLCBub2RlLT5jaGlsZDIoKSwgCiAgICAgICAgICAgICBtX2ppdC5icmFu
Y2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0x
MzY2LDE0ICsxMzY2LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09i
amUKICAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRD
aGlsZCwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKICAgICAgICAgREZH
X1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFH
UFIpLCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCiAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BS
LAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNl
Ojp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIAogICAgICAgICAgICAgbV9qaXQuYnJh
bmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIApAQCAt
MTM5NSw3ICsxMzk1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2Jq
ZQogICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
b3AyUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3Ry
aW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9
IGVsc2UgewogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9w
MlBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwog
ICAgICAgICBERkdfVFlQRV9DSEVDSygKQEAgLTE0MDMsNyArMTQwMyw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamUKICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0
cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCiAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlR1BSLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlUmVncyhvcDJUYWdHUFIsIG9wMlBheWxvYWRHUFIpLCByaWdodENoaWxkLCAKICAg
ICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCAKQEAgLTE0NzQsMTQgKzE0NzQsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hl
ZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCAKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1
cmVHUFIpOwogICAgICAgICBERkdfVFlQRV9DSEVDSygKICAgICAgICAgICAgIEpTVmFsdWVTb3Vy
Y2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgU3BlY09iamVjdCwgbV9qaXQuYnJh
bmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlR1BSLCAKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkp
KTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52
bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLAog
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIApAQCAtMTUwMiw3ICsxNTAyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG9wMlBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCBzdHJ1Y3R1cmVHUFIpOwogICAgICAgICBERkdfVFlQRV9DSEVDSygKQEAgLTE1MTAsNyAr
MTUxMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICAg
ICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIAogICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCi0gICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMlRhZ0dQUiwgb3AyUGF5bG9h
ZEdQUiksIHJpZ2h0Q2hpbGQsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0xNjIxLDcgKzE2MjEsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAgICAgICAgICAgICBt
X2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVQYXlsb2FkR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKIApAQCAtMTYzMCw3ICsx
NjMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCi0gICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogCiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IAogICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCkBAIC0xNzUxLDcgKzE3NTEsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQ
dHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5z
dHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKIApAQCAtMTc2MCw3ICsxNzYwLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogICAgICAgICAgICAgbV9qaXQu
YnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAg
ICAgICAgICAgICAgc2NyYXRjaEdQUiwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkp
KTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52
bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gbV9qaXQuYnJhbmNoVGVzdDgoSklUQ29t
cGlsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVy
ZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKTsKIApAQCAtMjY4NiwzMSArMjY4NiwzMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkFyZ3VtZW50
cyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJy
YXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xv
YmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQ4X3QpLCBT
aWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRB
cnJheShtX2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQ4
X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEFycmF5OjpJbnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBl
ZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwg
c2l6ZW9mKGludDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigp
LCBub2RlLCBzaXplb2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFycmF5
RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwor
ICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmlu
dDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgU2lnbmVkVHlwZWRB
cnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJh
eToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9i
YWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwg
VW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlw
ZWRBcnJheShtX2ppdC52bSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2Yo
dWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0
QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OENsYW1wZWRBcnJh
eURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkp
OworICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCkt
PnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVu
c2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJh
eTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJy
YXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6
ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MTZBcnJheURlc2NyaXB0b3Io
KSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAg
IGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQz
MkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBVbnNpZ25lZFR5cGVk
QXJyYXkpOworICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0
LnZtKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBV
bnNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJy
YXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBl
ZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBub2Rl
LCBzaXplb2YoZmxvYXQpKTsKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBl
ZEFycmF5KG1faml0LnZtKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9m
KGZsb2F0KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2
NEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9q
aXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihk
b3VibGUpKTsKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG1f
aml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjg5MiwzOSArMjg5MiwzOSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBj
b21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFy
cmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9m
KGludDhfdCksIFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFs
Rm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2Uu
Z3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRB
cnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFy
cmF5OjpJbnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRB
cnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3By
KCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJy
YXkpOworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52
bSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwg
bm9kZSwgc2l6ZW9mKGludDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAg
ICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEo
KS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5v
ZGUsIHNpemVvZihpbnQzMl90KSwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBjb21w
aWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlw
dG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCks
IFNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZh
bEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVzY3JpcHRv
cigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBV
bnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlw
ZWRBcnJheShtX2ppdC52bSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBw
cm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6
VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBl
ZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCks
IGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2ln
bmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7CisgICAgICAgICAgICBjb21waWxlUHV0QnlW
YWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRv
cigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBV
bnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAg
ICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWlu
dDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBz
aXplb2YodWludDE2X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgY29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MTZBcnJheURlc2NyaXB0
b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCks
IFVuc2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRC
eVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2Ny
aXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MzJf
dCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJ
bnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdw
cigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBl
ZEFycmF5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
QXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0
VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwg
YmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihmbG9hdCkpOworICAgICAg
ICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0
MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNp
emVvZihmbG9hdCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9y
RmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRv
cigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOwor
ICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCkt
PmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5v
ZGUsIHNpemVvZihkb3VibGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgICAgIGRlZmF1bHQ6CkBAIC0zMzE3LDcgKzMzMTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMVBheWxvYWRH
UFIsIHJlc3VsdFBheWxvYWRHUFIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgYWxyZWFkeVByaW1pdGl2ZSA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgb3AxVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZykpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90UHJpbWl0aXZlID0g
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Mob3AxUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RQcmltaXRp
dmUgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhvcDFQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGFscmVhZHlQcmltaXRpdmUubGlu
aygmbV9qaXQpOwogICAgICAgICAgICAgbV9qaXQubW92ZShvcDFUYWdHUFIsIHJlc3VsdFRhZ0dQ
Uik7CkBAIC0zMzUxLDcgKzMzNTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGgyID0g
bV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1
YWwsCiAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKG9wMVBheWxvYWRH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgICAgICBUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShvcDFQYXlsb2FkR1BSLCBy
ZXN1bHRHUFIpOwogICAgICAgICAgICAgICAgIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAg
ICAgICAgICAgc2xvd1BhdGgxLmxpbmsoJm1faml0KTsKQEAgLTM0NTksNyArMzQ1OSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgc2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAq
IG5vZGUtPm51bUNoaWxkcmVuKCk7Ci0gICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZm
ZXIgPSBtX2ppdC5nbG9iYWxEYXRhKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXpl
KTsKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1faml0LnZtKCktPnNj
cmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKICAgICAgICAgRW5jb2RlZEpTVmFsdWUq
IGJ1ZmZlciA9IHNjcmF0Y2hCdWZmZXIgPyBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNj
cmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgOiAwOwogICAgICAgICAKICAgICAgICAgZm9yICh1
bnNpZ25lZCBvcGVyYW5kSWR4ID0gMDsgb3BlcmFuZElkeCA8IG5vZGUtPm51bUNoaWxkcmVuKCk7
ICsrb3BlcmFuZElkeCkgewpAQCAtMzc0Niw3ICszNzQ2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXpl
ID0gSlNPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7
Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yUHRyID0gJm1faml0Lmdsb2JhbERh
dGEoKS0+aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihhbGxvY2F0aW9u
U2l6ZSk7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yUHRyID0gJm1faml0LnZt
KCktPmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3IoYWxsb2NhdGlvblNp
emUpOwogCiAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3JQdHIpLCBh
bGxvY2F0b3JHUFIpOwogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIsIGFs
bG9jYXRvckdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1tUHRyKDApLCBz
Y3JhdGNoR1BSLCBzbG93UGF0aCk7CkBAIC00NDAyLDcgKzQ0MDIsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBub3RTdHJpbmcgPSBtX2ppdC5icmFuY2g4KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29t
cGlsZXI6OkFkZHJlc3ModGVtcEdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSk7CiAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpID09IFN0cmluZ1VzZSkKICAgICAgICAgICAgICAgICBERkdfVFlQRV9DSEVD
SyhKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY1N0
cmluZywgbm90U3RyaW5nKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0ciht
X2ppdC5nbG9iYWxEYXRhKCktPnNtYWxsU3RyaW5ncy5zdHJpbmdTdHJpbmcoKSksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21h
bGxTdHJpbmdzLnN0cmluZ1N0cmluZygpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGRvbmVK
dW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkgIT0gU3RyaW5nVXNlKSB7CiAgICAgICAgICAgICAgICAgbm90U3RyaW5nLmxp
bmsoJm1faml0KTsKQEAgLTQ0MTksMjIgKzQ0MTksMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1t
MzIoMSksIHRhZ0dQUiwgdGVtcEdQUik7CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBu
b3ROdW1iZXIgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCB0ZW1w
R1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZyArIDEpKTsK
LSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PnNtYWxsU3RyaW5ncy5udW1iZXJTdHJpbmcoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJpbmdzLm51bWJlclN0
cmluZygpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQu
anVtcCgpKTsKICAgICAgICAgICAgIG5vdE51bWJlci5saW5rKCZtX2ppdCk7CiAKICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFVuZGVmaW5lZCA9IG1faml0LmJyYW5jaDMyKEpJVENv
bXBpbGVyOjpOb3RFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVk
VGFnKSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFs
RGF0YSgpLT5zbWFsbFN0cmluZ3MudW5kZWZpbmVkU3RyaW5nKCkpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5n
cy51bmRlZmluZWRTdHJpbmcoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBkb25lSnVtcHMu
YXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBub3RVbmRlZmluZWQubGluaygmbV9q
aXQpOwogCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3ROdWxsID0gbV9qaXQuYnJh
bmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpOdWxsVGFnKSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCkpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3Ry
aW5ncy5vYmplY3RTdHJpbmcoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBkb25lSnVtcHMu
YXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBub3ROdWxsLmxpbmsoJm1faml0KTsK
IAogICAgICAgICAgICAgLy8gT25seSBib29sZWFuIGxlZnQKLSAgICAgICAgICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnNtYWxsU3RyaW5ncy5ib29sZWFu
U3RyaW5nKCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
UHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy5ib29sZWFuU3RyaW5nKCkpLCByZXN1bHRHUFIp
OwogICAgICAgICB9CiAgICAgICAgIGRvbmVKdW1wcy5saW5rKCZtX2ppdCk7CiAgICAgICAgIGNl
bGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMxNSwxMiArMTMxNSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlT2JqZWN0RXF1YWxpCiAgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChv
cDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdl
dCgpKSkpOwogICAgICAgICBERkdfVFlQRV9DSEVDSygKICAgICAgICAgICAgIEpTVmFsdWVTb3Vy
Y2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigpLCBTcGVjT2JqZWN0LCBtX2pp
dC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5z
dHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHN0cnVjdHVyZSh0aGlzKTsKICAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVj
dHVyZS5ncHIoKTsKQEAgLTEzMzAsNyArMTMzMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVPYmplY3RFcXVhbGkKICAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxs
KG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmVHUFIsIAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwKICAgICAg
ICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCAKQEAgLTEzNDIsNyArMTM0Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVPYmplY3RFcXVhbGkKICAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxs
KG9wMkdQUiksIG5vZGUtPmNoaWxkMigpLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmVHUFIsIAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLT5jaGlsZDIoKSwKICAgICAg
ICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCAKQEAgLTEzODgsMTQgKzEzODgsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU9iamVjdFRvT2JqZQogICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENl
bGwob3AxR1BSKSwgbGVmdENoaWxkLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAK
LSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVH
UFIpOwogICAgICAgICBERkdfVFlQRV9DSEVDSygKICAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNo
UHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKICAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmVHUFIsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Cisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwKICAgICAg
ICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCAKQEAgLTE0MTUsMTQgKzE0MTUsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU9iamVjdFRvT2JqZQogICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmln
aHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAK
LSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVH
UFIpOwogICAgICAgICBERkdfVFlQRV9DSEVDSygKICAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9w
MkdQUiksIHJpZ2h0Q2hpbGQsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNo
UHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKICAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmVHUFIsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Cisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsCiAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBA
IC0xNDkyLDE0ICsxNDkyLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9s
ZU9iamUKICAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxl
ZnRDaGlsZCwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3Ax
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKICAgICAgICAg
REZHX1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChv
cDFHUFIpLCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZUdQUiwgCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVT
b3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgCiAgICAgICAgICAgICBtX2pp
dC5icmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
CkBAIC0xNTE5LDE0ICsxNTE5LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVw
SG9sZU9iamUKICAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsICh+
U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5z
dHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
b3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKICAgICAg
ICAgREZHX1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdo
dENoaWxkLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIHN0cnVj
dHVyZUdQUiwgCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3Ry
dWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0
OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0xNjMxLDcg
KzE2MzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAgICAg
ICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsICh+U3BlY0NlbGwpIHwgU3Bl
Y09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwogCkBAIC0xNjM5LDcgKzE2Mzks
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAgICAgICAgICAg
ICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsICh+U3BlY0NlbGwpIHwgU3BlY09iamVj
dCwgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCi0gICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogCiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IAogICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoVGVzdDgoCkBAIC0xNzc0LDcgKzE3NzQsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1
ZUdQUiksIG5vZGVVc2UsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRy
KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
c2NyYXRjaEdQUik7CiAKQEAgLTE3ODIsNyArMTc4Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRPYmplY3RPck90aGVyQnIKICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwg
bm9kZVVzZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBzY3Jh
dGNoR1BSLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBtX2ppdC5icmFuY2hUZXN0OChKSVRDb21waWxlcjo6WmVybywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogCkBAIC0y
NTg1LDMxICsyNTg1LDMxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRzKG5vZGUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAg
IGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDhB
cnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5cGVkQXJyYXkp
OworICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCkt
PmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5cGVk
QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJy
YXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xv
YmFsRGF0YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCks
IFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBl
ZEFycmF5KG1faml0LnZtKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihp
bnQxNl90KSwgU2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50
VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5v
ZGUsIHNpemVvZihpbnQzMl90KSwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MzJBcnJheURlc2NyaXB0
b3IoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBTaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAg
Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhB
cnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJy
YXkpOworICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZt
KCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWdu
ZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpV
aW50OENsYW1wZWRBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRB
cnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBu
b2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBj
b21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhDbGFtcGVkQXJy
YXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToK
LSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxE
YXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDE2X3QpLCBV
bnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBl
ZEFycmF5KG1faml0LnZtKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2Yo
dWludDE2X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFs
T25JbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9y
KCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDMyQXJy
YXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIFVuc2lnbmVkVHlwZWRBcnJh
eSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5
OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xv
YmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihmbG9hdCkp
OworICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9qaXQudm0o
KS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoZmxvYXQpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCkt
PmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOworICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQ2
NEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkBAIC0yODc2LDM5ICsyODc2LDM5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
QXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVk
QXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3By
KCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJh
eSk7CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZt
KCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5v
ZGUsIHNpemVvZihpbnQ4X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAg
ICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+
aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUs
IHNpemVvZihpbnQxNl90KSwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBjb21waWxl
UHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDE2QXJyYXlEZXNjcmlwdG9y
KCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIFNp
Z25lZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZv
ckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigp
LCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBTaWdu
ZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJy
YXkobV9qaXQudm0oKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVy
dHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgU2lnbmVkVHlwZWRBcnJheSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFy
cmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5n
bG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5
LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAg
ICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4
QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXpl
b2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAgICAg
ICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgp
LT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3By
KCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5LCBDbGFtcFJvdW5k
aW5nKTsKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQu
dm0oKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5
LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBS
b3VuZGluZyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5
cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFz
ZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVk
VHlwZWRBcnJheSk7CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5
KG1faml0LnZtKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0
eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQz
MkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2pp
dC5nbG9iYWxEYXRhKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9w
ZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsK
KyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+
dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2Rl
LCBzaXplb2YodWludDMyX3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAg
ICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERh
dGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIo
KSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JG
bG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6
Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xv
YmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5
LmdwcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSk7CisgICAgICAgICAgICBjb21waWxlUHV0QnlW
YWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigp
LCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKQEAgLTMyMzUs
NyArMzIzNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgICAgIG1faml0Lm1vdmUob3AxR1BSLCByZXN1bHRHUFIpOwogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFscmVhZHlQcmltaXRpdmUgPSBtX2pp
dC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG9wMUdQUiwgR1BSSW5mbzo6
dGFnTWFza1JlZ2lzdGVyKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdFBy
aW1pdGl2ZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3Ry
dWN0dXJlLmdldCgpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RQcmlt
aXRpdmUgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgYWxyZWFkeVByaW1pdGl2ZS5saW5rKCZt
X2ppdCk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0R1BSKTsKQEAgLTMy
NjUsNyArMzI2NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aDIgPSBtX2ppdC5icmFu
Y2hQdHIoCiAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKICAgICAg
ICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOworICAgICAgICAgICAgICAgICAg
ICBUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwogICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxR1BSLCByZXN1bHRHUFIpOwogICAgICAgICAgICAg
ICAgIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgICAgICAgICAgc2xvd1BhdGgxLmxpbmso
Jm1faml0KTsKQEAgLTMzNzEsNyArMzM3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc2l6ZV90IHNjcmF0
Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG5vZGUtPm51bUNoaWxkcmVuKCk7Ci0g
ICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBtX2ppdC5nbG9iYWxEYXRhKCkt
PnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKKyAgICAgICAgU2NyYXRjaEJ1ZmZl
ciogc2NyYXRjaEJ1ZmZlciA9IG1faml0LnZtKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0
Y2hTaXplKTsKICAgICAgICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHNjcmF0Y2hCdWZmZXIg
PyBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIo
KSkgOiAwOwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSWR4ID0gMDsg
b3BlcmFuZElkeCA8IG5vZGUtPm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZElkeCkgewpAQCAtMzY1
Myw3ICszNjUzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbm9kZS0+c3RydWN0dXJlKCk7CiAgICAg
ICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1
Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9j
YXRvclB0ciA9ICZtX2ppdC5nbG9iYWxEYXRhKCktPmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0
aG91dERlc3RydWN0b3IoYWxsb2NhdGlvblNpemUpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3Iq
IGFsbG9jYXRvclB0ciA9ICZtX2ppdC52bSgpLT5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhv
dXREZXN0cnVjdG9yKGFsbG9jYXRpb25TaXplKTsKIAogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW1QdHIoYWxsb2NhdG9yUHRyKSwgYWxsb2NhdG9yR1BSKTsKICAgICAgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3QocmVzdWx0R1BSLCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0
dXJlKSwgVHJ1c3RlZEltbVB0cigwKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwpAQCAtNDI5MCw3
ICs0MjkwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90U3RyaW5nID0gbV9qaXQuYnJhbmNoOChKSVRD
b21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0cnVjdHVy
ZTo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpOwogICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpCiAgICAg
ICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soSlNWYWx1ZVNvdXJjZSh2YWx1ZUdQUiksIG5vZGUt
PmNoaWxkMSgpLCBTcGVjU3RyaW5nLCBub3RTdHJpbmcpOwotICAgICAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0
cmluZygpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3Muc3RyaW5nU3RyaW5nKCkpLCByZXN1bHRHUFIpOwog
ICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSAhPSBTdHJpbmdVc2UpIHsKICAgICAgICAgICAg
ICAgICBub3RTdHJpbmcubGluaygmbV9qaXQpOwpAQCAtNDMwNSwyMiArNDMwNSwyMiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkgewogICAgICAgICAgICAgaXNOb3RDZWxs
LmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdE51bWJlciA9
IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6WmVybywgdmFsdWVHUFIsIEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zbWFsbFN0cmluZ3MubnVtYmVyU3RyaW5nKCkpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LnZt
KCktPnNtYWxsU3RyaW5ncy5udW1iZXJTdHJpbmcoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAg
ICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBub3ROdW1iZXIu
bGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RVbmRlZmlu
ZWQgPSBtX2ppdC5icmFuY2g2NChKSVRDb21waWxlcjo6Tm90RXF1YWwsIHZhbHVlR1BSLCBKSVRD
b21waWxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlVW5kZWZpbmVkKSk7Ci0gICAgICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zbWFsbFN0cmluZ3MudW5k
ZWZpbmVkU3RyaW5nKCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy51bmRlZmluZWRTdHJpbmcoKSksIHJl
c3VsdEdQUik7CiAgICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAg
ICAgICAgICAgICBub3RVbmRlZmluZWQubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBub3ROdWxsID0gbV9qaXQuYnJhbmNoNjQoSklUQ29tcGlsZXI6Ok5vdEVx
dWFsLCB2YWx1ZUdQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKTsKLSAg
ICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnNt
YWxsU3RyaW5ncy5vYmplY3RTdHJpbmcoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJpbmdzLm9iamVjdFN0cmlu
ZygpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVt
cCgpKTsKICAgICAgICAgICAgIG5vdE51bGwubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICAv
LyBPbmx5IGJvb2xlYW4gbGVmdAotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+c21hbGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKSksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+
c21hbGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIH0KICAg
ICAgICAgZG9uZUp1bXBzLmxpbmsoJm1faml0KTsKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRH
UFIsIG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDYsMjMgKzY0
NiwyMyBAQCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogU3BlY3VsYXRpdmVKCiB7CiAgICAg
c3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5Ogot
ICAgICAgICByZXR1cm4gJm1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigp
OworICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPmludDhBcnJheURlc2NyaXB0b3IoKTsKICAg
ICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0Lmdsb2JhbERh
dGEoKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKTsKKyAgICAgICAgcmV0dXJuICZtX2ppdC52bSgp
LT5pbnQxNkFycmF5RGVzY3JpcHRvcigpOwogICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0g
ICAgICAgIHJldHVybiAmbV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigp
OworICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCk7CiAg
ICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC5nbG9iYWxE
YXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCk7CisgICAgICAgIHJldHVybiAmbV9qaXQudm0o
KS0+dWludDhBcnJheURlc2NyaXB0b3IoKTsKICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRB
cnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4Q2xhbXBlZEFy
cmF5RGVzY3JpcHRvcigpOworICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPnVpbnQ4Q2xhbXBl
ZEFycmF5RGVzY3JpcHRvcigpOwogICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAg
ICByZXR1cm4gJm1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCk7Cisg
ICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCk7CiAgICAg
Y2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQuZ2xvYmFsRGF0
YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKTsKKyAgICAgICAgcmV0dXJuICZtX2ppdC52bSgp
LT51aW50MzJBcnJheURlc2NyaXB0b3IoKTsKICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6
Ci0gICAgICAgIHJldHVybiAmbV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlw
dG9yKCk7CisgICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRv
cigpOwogICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2pp
dC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKTsKKyAgICAgICAgcmV0dXJu
ICZtX2ppdC52bSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCk7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMTQyMCw3ICsxNDIwLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aFB0cigKICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkp
OworICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlICYgflNwZWNPYmplY3QpIHsK
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCkBAIC0xNDI4LDcgKzE0MjgsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgICAgICAgICAgICAgbV9q
aXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IAogICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKSk7CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgfQogICAg
IH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CkBAIC0xNDQx
LDcgKzE0NDEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAg
ICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAot
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSkpOwogICAgICAgICB9CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksCiAg
ICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKQEAgLTE0NTYsNyArMTQ1Niw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICAgICAgICAgICAgICBtX2pp
dC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
CiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCi0gICAgICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5n
U3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAg
ICAgIH0KICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1
bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLT5jaGlsZDIoKSwKICAgICAgICAgICAgIG1faml0LmJy
YW5jaFRlc3Q4KApAQCAtMjA4Miw3ICsyMDgyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsT25TdAogCiAgICAgR1BSVGVtcG9yYXJ5IHNtYWxsU3RyaW5ncyh0aGlzKTsK
ICAgICBHUFJSZWcgc21hbGxTdHJpbmdzUmVnID0gc21hbGxTdHJpbmdzLmdwcigpOwotICAgIG1f
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKSwgc21hbGxTdHJpbmdzUmVn
KTsKKyAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZt
KCktPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpLCBzbWFsbFN0cmluZ3NS
ZWcpOwogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzbWFsbFN0
cmluZ3NSZWcsIHNjcmF0Y2hSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgMCksIHNjcmF0
Y2hSZWcpOwogICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IDAsIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaFJlZykp
OwogICAgIGNlbGxSZXN1bHQoc2NyYXRjaFJlZywgbV9jdXJyZW50Tm9kZSk7CkBAIC0yMDk5LDcg
KzIwOTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRnJvbUNoYXJDb2RlCiAKICAg
ICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIHNsb3dDYXNlcy5hcHBlbmQo
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcs
IFRydXN0ZWRJbW0zMigweGZmKSkpOwotICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFj
dGVyU3RyaW5ncygpKSwgc21hbGxTdHJpbmdzUmVnKTsKKyAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFy
YWN0ZXJTdHJpbmdzKCkpLCBzbWFsbFN0cmluZ3NSZWcpOwogICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzbWFsbFN0cmluZ3NSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6U2NhbGVQdHIsIDApLCBzY3JhdGNoUmVnKTsKIAogICAgIHNsb3dDYXNlcy5h
cHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoUmVn
KSk7CkBAIC0zMTQwLDkgKzMxNDAsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWFr
ZVJvcGUoTm9kCiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgIAog
ICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKLSAgICBNYXJrZWRBbGxvY2F0b3Im
IG1hcmtlZEFsbG9jYXRvciA9IG1faml0Lmdsb2JhbERhdGEoKS0+aGVhcC5hbGxvY2F0b3JGb3JP
YmplY3RXaXRoSW1tb3J0YWxTdHJ1Y3R1cmVEZXN0cnVjdG9yKHNpemVvZihKU1JvcGVTdHJpbmcp
KTsKKyAgICBNYXJrZWRBbGxvY2F0b3ImIG1hcmtlZEFsbG9jYXRvciA9IG1faml0LnZtKCktPmhl
YXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aEltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3RvcihzaXpl
b2YoSlNSb3BlU3RyaW5nKSk7CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKCZtYXJrZWRB
bGxvY2F0b3IpLCBhbGxvY2F0b3JHUFIpOwotICAgIGVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1bHRH
UFIsIGFsbG9jYXRvckdQUiwgVHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSksIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKKyAgICBlbWl0QWxsb2Nh
dGVKU0NlbGwocmVzdWx0R1BSLCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJbW1QdHIobV9qaXQudm0o
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogICAgICAg
ICAKICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBKSVRDb21waWxlcjo6QWRk
cmVzcyhyZXN1bHRHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtT3BHUFJzOyArK2kpCkBAIC0zNjg0LDcgKzM2ODQsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaW5nRXF1YWxpCiAgICAgICAgIEpTVmFsdWVT
b3VyY2U6OnVuYm94ZWRDZWxsKGxlZnRHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY1N0cmluZywg
bV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAog
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobGVmdEdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKICAgICAKICAgICAvLyBJdCdzIHNhZmUgdG8gYnJhbmNoIGFyb3VuZCB0
aGUgdHlwZSBjaGVjayBiZWxvdywgc2luY2UgcHJvdmluZyB0aGF0IHRoZSB2YWx1ZXMgYXJlCiAg
ICAgLy8gZXF1YWwgZG9lcyBpbmRlZWQgcHJvdmUgdGhhdCB0aGUgcmlnaHQgdmFsdWUgaXMgYSBz
dHJpbmcuCkBAIC0zNjk0LDcgKzM2OTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
U3RyaW5nRXF1YWxpCiAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKHJpZ2h0R1BS
KSwgbm9kZS0+Y2hpbGQyKCksIFNwZWNTdHJpbmcsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHJpZ2h0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3Ry
aW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogCiAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGxlZnRHUFIsIEpTU3RyaW5nOjpvZmZz
ZXRPZkxlbmd0aCgpKSwgbGVuZ3RoR1BSKTsKICAgICAKQEAgLTQxMjEsNyArNDEyMSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb1N0cmluZ09uQ2UKICAgICAgICAgCiAgICAgICAg
IG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNT
dHJpbmcgPSBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6RXF1YWws
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpOworICAgICAgICAgICAgSklUQ29tcGlsZXI6OkVxdWFsLCByZXN1bHRHUFIs
IFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CiAgICAg
ICAgIAogICAgICAgICBzcGVjdWxhdGVTdHJpbmdPYmplY3RGb3JTdHJ1Y3R1cmUobm9kZS0+Y2hp
bGQxKCksIHJlc3VsdEdQUik7CiAgICAgICAgIApAQCAtNDE1MSw3ICs0MTUxLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvU3RyaW5nT25DZQogICAgICAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgbmVlZENhbGwgPSBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgSklU
Q29tcGlsZXI6Ok5vdEVxdWFsLAogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNz
KG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgVHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwor
ICAgICAgICAgICAgICAgIFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0R1BSKTsKICAg
ICAgICAgICAgIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgICAgICBuZWVkQ2FsbC5saW5r
KCZtX2ppdCk7CkBAIC00MjY0LDcgKzQyNjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVj
dWxhdGVPYmplY3QoRWRnCiAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGdwciks
IGVkZ2UsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhncHIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgp
KSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0o
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpz
cGVjdWxhdGVPYmplY3RPck90aGVyKEVkZ2UgZWRnZSkKQEAgLTQyODMsNyArNDI4Myw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9iamVjdE9yT3QKICAgICAgICAgSlNWYWx1ZVJl
Z3MoZ3ByKSwgZWRnZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIo
CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoZ3ByLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIG5vdENlbGwubGlu
aygmbV9qaXQpOwogICAgIGlmIChuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjQ2VsbCB8IFNwZWNP
dGhlcikpIHsKQEAgLTQzMDYsNyArNDMwNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1
bGF0ZU9iamVjdE9yT3QKICAgICAgICAgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwg
ZWRnZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MocGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5z
dHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICBub3RDZWxsLmxpbmso
Jm1faml0KTsKICAgICBpZiAobmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3Ro
ZXIpKSB7CkBAIC00MzM0LDcgKzQzMzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGVTdHJpbmcoRWRnCiAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGdwciksIGVk
Z2UsIFNwZWNTdHJpbmcsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhncHIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgp
KSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0o
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpz
cGVjdWxhdGVTdHJpbmdPYmplY3QoRWRnZSBlZGdlLCBHUFJSZWcgZ3ByKQpAQCAtNDM3Miw3ICs0
MzcyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nT3JTdAogICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoZ3ByLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBpc1N0
cmluZyA9IG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgSklUQ29tcGlsZXI6OkVxdWFsLCBzdHJ1
Y3R1cmVHUFIsIFRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKTsKKyAgICAgICAgSklUQ29tcGlsZXI6OkVxdWFsLCBzdHJ1Y3R1cmVHUFIsIFRy
dXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CiAgICAgCiAg
ICAgc3BlY3VsYXRlU3RyaW5nT2JqZWN0Rm9yU3RydWN0dXJlKGVkZ2UsIHN0cnVjdHVyZUdQUik7
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NjEsNyArMTc2MSw3IEBAIHB1
YmxpYzoKICAgICAgICAgLy8gYW55d2F5IHNpbmNlIGl0IHdhcyBub3QgYmVpbmcgdXBkYXRlZCBi
eSBKSVQnZWQgY29kZSBieSBkZXNpZ24uCiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpemVvZih2b2lkKikgLyA0OyBpKyspCi0gICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRy
dXN0ZWRJbW0zMigweGJhZGJlZWYpLCByZWludGVycHJldF9jYXN0PGNoYXIqPigmbV9qaXQuZ2xv
YmFsRGF0YSgpLT50b3BDYWxsRnJhbWUpICsgaSAqIDQpOworICAgICAgICAgICAgbV9qaXQuc3Rv
cmUzMihUcnVzdGVkSW1tMzIoMHhiYWRiZWVmKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJm1f
aml0LnZtKCktPnRvcENhbGxGcmFtZSkgKyBpICogNCk7CiAgICAgfQogI2Vsc2UKICAgICB2b2lk
IHByZXBhcmVGb3JFeHRlcm5hbENhbGwoKSB7IH0KQEAgLTIxNTQsNyArMjE1NCw3IEBAIHB1Ymxp
YzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTaXplVHlwZT4KICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoU2l6ZVR5cGUgc2l6ZSwgR1BSUmVnIHJlc3Vs
dEdQUikKICAgICB7Ci0gICAgICAgIENvcGllZEFsbG9jYXRvciogY29waWVkQWxsb2NhdG9yID0g
Jm1faml0Lmdsb2JhbERhdGEoKS0+aGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7CisgICAgICAgIENv
cGllZEFsbG9jYXRvciogY29waWVkQWxsb2NhdG9yID0gJm1faml0LnZtKCktPmhlYXAuc3RvcmFn
ZUFsbG9jYXRvcigpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cigmY29waWVkQWxs
b2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHJlc3VsdEdQUik7CiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoU3ViUHRyKEpJVENvbXBpbGVyOjpT
aWduZWQsIHNpemUsIHJlc3VsdEdQUik7CkBAIC0yMjAxLDExICsyMjAxLDExIEBAIHB1YmxpYzoK
ICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAwOwogICAgICAgICBzaXplX3Qg
c2l6ZSA9IENsYXNzVHlwZTo6YWxsb2NhdGlvblNpemUoMCk7CiAgICAgICAgIGlmIChDbGFzc1R5
cGU6Om5lZWRzRGVzdHJ1Y3Rpb24gJiYgQ2xhc3NUeXBlOjpoYXNJbW1vcnRhbFN0cnVjdHVyZSkK
LSAgICAgICAgICAgIGFsbG9jYXRvciA9ICZtX2ppdC5nbG9iYWxEYXRhKCktPmhlYXAuYWxsb2Nh
dG9yRm9yT2JqZWN0V2l0aEltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3RvcihzaXplKTsKKyAgICAg
ICAgICAgIGFsbG9jYXRvciA9ICZtX2ppdC52bSgpLT5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdp
dGhJbW1vcnRhbFN0cnVjdHVyZURlc3RydWN0b3Ioc2l6ZSk7CiAgICAgICAgIGVsc2UgaWYgKENs
YXNzVHlwZTo6bmVlZHNEZXN0cnVjdGlvbikKLSAgICAgICAgICAgIGFsbG9jYXRvciA9ICZtX2pp
dC5nbG9iYWxEYXRhKCktPmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aE5vcm1hbERlc3RydWN0
b3Ioc2l6ZSk7CisgICAgICAgICAgICBhbGxvY2F0b3IgPSAmbV9qaXQudm0oKS0+aGVhcC5hbGxv
Y2F0b3JGb3JPYmplY3RXaXRoTm9ybWFsRGVzdHJ1Y3RvcihzaXplKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgYWxsb2NhdG9yID0gJm1faml0Lmdsb2JhbERhdGEoKS0+aGVhcC5hbGxvY2F0
b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihzaXplKTsKKyAgICAgICAgICAgIGFsbG9jYXRv
ciA9ICZtX2ppdC52bSgpLT5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9y
KHNpemUpOwogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2Ny
YXRjaEdQUjEpOwogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIsIHNjcmF0
Y2hHUFIxLCBzdHJ1Y3R1cmUsIHN0b3JhZ2UsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAkocmV2aXNpb24g
MTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiwxMiArMzYsMTIgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UaHVua0dl
bmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
b3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgTWFjcm9Bc3Nl
bWJsZXIgaml0OwogICAgIAogICAgIHNpemVfdCBzY3JhdGNoU2l6ZSA9IHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkgKiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVycyk7Ci0gICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IGdsb2JhbERh
dGEtPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKKyAgICBTY3JhdGNoQnVmZmVy
KiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsK
ICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUq
PihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpOwogICAgIAogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CkBAIC04NCw5ICs4
NCw5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblQKICNlbmRpZgog
ICAgIH0KICAgICAKLSAgICBqaXQuanVtcChNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNz
KCZnbG9iYWxEYXRhLT5vc3JFeGl0SnVtcERlc3RpbmF0aW9uKSk7CisgICAgaml0Lmp1bXAoTWFj
cm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmdm0tPm9zckV4aXRKdW1wRGVzdGluYXRpb24p
KTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBH
TE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBH
TE9CQUxfVEhVTktfSUQpOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoZnVuY3Rpb25DYWxs
LCBjb21waWxlT1NSRXhpdCk7CiAgICAgCkBAIC0xMDgsOSArMTA4LDkgQEAgaW5saW5lIHZvaWQg
ZW1pdFBvaW50ZXJWYWxpZGF0aW9uKENDYWxsSAogI2VuZGlmCiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJv
bUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgQ0NhbGxIZWxwZXJzIGppdChn
bG9iYWxEYXRhKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKICAgICAKICAgICAvLyBXZSB3
aWxsIGp1bXAgdG8gaGVyZSBpZiB0aGUgSklUIGNvZGUgdGhpbmtzIGl0J3MgbWFraW5nIGEgY2Fs
bCwgYnV0IHRoZQogICAgIC8vIGxpbmtpbmcgaGVscGVyIChDKysgY29kZSkgZGVjaWRlZCB0byB0
aHJvdyBhbiBleGNlcHRpb24gaW5zdGVhZC4gV2Ugd2lsbApAQCAtMTM3LDEyICsxMzcsMTIgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbQogICAgIGVtaXRQb2ludGVy
VmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CiAgICAgaml0Lmp1bXAo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkRGRyB0aHJvdyBleGNlcHRpb24gZnJvbSBjYWxsIHNs
b3cgcGF0aCB0aHVuayIpKTsKIH0KIAogc3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoCi0gICAgQ0Nh
bGxIZWxwZXJzJiBqaXQsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUF9ERkdPcGVyYXRpb25f
RSBzbG93UGF0aEZ1bmN0aW9uKQorICAgIENDYWxsSGVscGVycyYgaml0LCBWTSogdm0sIFBfREZH
T3BlcmF0aW9uX0Ugc2xvd1BhdGhGdW5jdGlvbikKIHsKICAgICBqaXQucHJlc2VydmVSZXR1cm5B
ZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5vbkFyZ0dQUjIpOwogICAgIGVtaXRQb2ludGVyVmFs
aWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjIpOwpAQCAtMTUxLDcgKzE1MSw3IEBAIHN0
YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCiAg
ICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpSZXR1cm5QQykp
OwotICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJmdsb2JhbERh
dGEtPnRvcENhbGxGcmFtZSk7CisgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBqaXQu
cG9rZTY0KEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgSklUU1RBQ0tGUkFNRV9B
UkdTX0lOREVYKTsKICNlbHNlCkBAIC0xODMsNyArMTgzLDcgQEAgc3RhdGljIHZvaWQgc2xvd1Bh
dGhGb3IoCiB9CiAKIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0ZvclRodW5rR2Vu
ZXJhdG9yKAotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCBraW5kKQorICAgIFZNKiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewog
ICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBvbiB0aGUgc3RhY2sgb3IgaW4gdGhlIGxpbmsg
cmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKICAgICAvLyBzYXZlIHRoZSByZXR1cm4gYWRkcmVzcyB0
byB0aGUgY2FsbCBmcmFtZSB3aGlsZSB3ZSBtYWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwKQEAgLTE5
Myw0NiArMTkzLDQ2IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0ZvclRodW4K
ICAgICAvLyBhbmQgYWxsIG90aGVyIHJlZ2lzdGVycyB0byBiZSBhdmFpbGFibGUgZm9yIHVzZS4g
V2UgdXNlIEpJVFN0YWNrRnJhbWU6OmFyZ3MKICAgICAvLyB0byBzYXZlIGltcG9ydGFudCBpbmZv
cm1hdGlvbiBhY3Jvc3MgY2FsbHMuCiAgICAgCi0gICAgQ0NhbGxIZWxwZXJzIGppdChnbG9iYWxE
YXRhKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKICAgICAKLSAgICBzbG93UGF0aEZvcihq
aXQsIGdsb2JhbERhdGEsIGtpbmQgPT0gQ29kZUZvckNhbGwgPyBvcGVyYXRpb25MaW5rQ2FsbCA6
IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QpOworICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIGtpbmQg
PT0gQ29kZUZvckNhbGwgPyBvcGVyYXRpb25MaW5rQ2FsbCA6IG9wZXJhdGlvbkxpbmtDb25zdHJ1
Y3QpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQs
IEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQs
IEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCiAgICAgICAgIHBh
dGNoQnVmZmVyLAogICAgICAgICAoIkRGRyBsaW5rICVzIHNsb3cgcGF0aCB0aHVuayIsIGtpbmQg
PT0gQ29kZUZvckNhbGwgPyAiY2FsbCIgOiAiY29uc3RydWN0IikpOwogfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSogdm0p
CiB7Ci0gICAgcmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRvcihnbG9iYWxEYXRhLCBDb2RlRm9y
Q2FsbCk7CisgICAgcmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNhbGwp
OwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9y
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29u
c3RydWN0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBsaW5rRm9yVGh1bmtH
ZW5lcmF0b3IoZ2xvYmFsRGF0YSwgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgcmV0dXJuIGxpbmtG
b3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCk7CiB9CiAKIC8vIEZvciBjbG9z
dXJlIG9wdGltaXphdGlvbnMsIHdlIG9ubHkgaW5jbHVkZSBjYWxscywgc2luY2UgaWYgeW91J3Jl
IHVzaW5nIGNsb3N1cmVzIGZvcgogLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiB0aGVuIHlvdSdyZSBn
b2luZyB0byBsb3NlIGJpZyB0aW1lIGFueXdheS4KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5r
Q2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQog
ewotICAgIENDYWxsSGVscGVycyBqaXQoZ2xvYmFsRGF0YSk7CisgICAgQ0NhbGxIZWxwZXJzIGpp
dCh2bSk7CiAgICAgCi0gICAgc2xvd1BhdGhGb3Ioaml0LCBnbG9iYWxEYXRhLCBvcGVyYXRpb25M
aW5rQ2xvc3VyZUNhbGwpOworICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtD
bG9zdXJlQ2FsbCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0
YSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2
bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgKCJERkcgbGluayBjbG9zdXJlIGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOwogfQog
CiBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcigK
LSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCkKKyAgICBWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICAgICAvLyBU
aGUgcmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0YWNrLCBvciBpbiB0aGUgbGluayByZWdpc3Rl
ci4gV2Ugd2lsbCBoZW5jZQogICAgIC8vIGp1bXAgdG8gdGhlIGNhbGxlZSwgb3Igc2F2ZSB0aGUg
cmV0dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGwgZnJhbWUgd2hpbGUgd2UKICAgICAvLyBtYWtlIGEg
QysrIGZ1bmN0aW9uIGNhbGwgdG8gdGhlIGFwcHJvcHJpYXRlIERGRyBvcGVyYXRpb24uCiAKLSAg
ICBDQ2FsbEhlbHBlcnMgaml0KGdsb2JhbERhdGEpOworICAgIENDYWxsSGVscGVycyBqaXQodm0p
OwogICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2U7CiAKQEAgLTMwNywy
MiArMzA3LDIyIEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbEZvclQKICAg
ICAKICAgICAvLyBIZXJlIHdlIGRvbid0IGtub3cgYW55dGhpbmcsIHNvIHJldmVydCB0byB0aGUg
ZnVsbCBzbG93IHBhdGguCiAgICAgCi0gICAgc2xvd1BhdGhGb3Ioaml0LCBnbG9iYWxEYXRhLCBr
aW5kID09IENvZGVGb3JDYWxsID8gb3BlcmF0aW9uVmlydHVhbENhbGwgOiBvcGVyYXRpb25WaXJ0
dWFsQ29uc3RydWN0KTsKKyAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBraW5kID09IENvZGVGb3JD
YWxsID8gb3BlcmF0aW9uVmlydHVhbENhbGwgOiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KTsK
ICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBHTE9C
QUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9C
QUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1
ZmZlciwKICAgICAgICAgKCJERkcgdmlydHVhbCAlcyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09
IENvZGVGb3JDYWxsID8gImNhbGwiIDogImNvbnN0cnVjdCIpKTsKIH0KIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQogewotICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3IoZ2xvYmFsRGF0YSwg
Q29kZUZvckNhbGwpOworICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENv
ZGVGb3JDYWxsKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RU
aHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgdmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1
cm4gdmlydHVhbEZvclRodW5rR2VuZXJhdG9yKGdsb2JhbERhdGEsIENvZGVGb3JDb25zdHJ1Y3Qp
OworICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1
Y3QpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVGh1bmtzLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDIxICszNCwyMSBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiAK
IG5hbWVzcGFjZSBERkcgewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRp
b25UaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBv
c3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKik7CiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoSlNHbG9iYWxEYXRh
Kik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRo
R2VuZXJhdG9yKFZNKik7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1
Y3RUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBs
aW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nv
bnN0cnVjdFRodW5rR2VuZXJhdG9yKFZNKik7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5r
Q2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcihWTSopOwogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgdmlydHVhbENhbGxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoSlNHbG9i
YWxEYXRhKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENhbGxUaHVua0dlbmVyYXRv
cihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVy
YXRvcihWTSopOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tBbGxvY2F0b3IuaAkocmV2aXNpb24gMTQ4NjgzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tBbGxvY2F0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtNDAsNyArNDAsNyBAQCBjbGFzcyBCbG9ja0FsbG9jYXRvcjsKIGNsYXNzIENvcGll
ZEJsb2NrOwogY2xhc3MgQ29weVdvcmtMaXN0U2VnbWVudDsKIGNsYXNzIEhhbmRsZUJsb2NrOwot
Y2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiBjbGFzcyBNYXJrU3RhY2tTZWdtZW50Owog
Y2xhc3MgTWFya2VkQmxvY2s7CiBjbGFzcyBXZWFrQmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY5LDcgKzY5LDcgQEAgQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRyeUFsbG9jYXRlUwog
ICAgIGlmIChpc092ZXJzaXplKGJ5dGVzKSkKICAgICAgICAgcmV0dXJuIHRyeUFsbG9jYXRlT3Zl
cnNpemUoYnl0ZXMsIG91dFB0cik7CiAgICAgCi0gICAgQVNTRVJUKG1faGVhcC0+Z2xvYmFsRGF0
YSgpLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CisgICAgQVNTRVJU
KG1faGVhcC0+dm0oKS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwog
ICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9hbGxvY2F0b3IuY3VycmVudENhcGFjaXR5KCkpOwog
CiAgICAgYWxsb2NhdGVCbG9jaygpOwpAQCAtMTAzLDcgKzEwMyw3IEBAIENoZWNrZWRCb29sZWFu
IENvcGllZFNwYWNlOjp0cnlSZWFsbG9jYXQKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAg
ICAgdm9pZCogb2xkUHRyID0gKnB0cjsKLSAgICBBU1NFUlQoIW1faGVhcC0+Z2xvYmFsRGF0YSgp
LT5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKKyAgICBBU1NFUlQoIW1faGVhcC0+dm0oKS0+aXNJ
bml0aWFsaXppbmdPYmplY3QoKSk7CiAgICAgCiAgICAgaWYgKENvcGllZFNwYWNlOjpibG9ja0Zv
cihvbGRQdHIpLT5pc092ZXJzaXplKCkgfHwgaXNPdmVyc2l6ZShuZXdTaXplKSkKICAgICAgICAg
cmV0dXJuIHRyeVJlYWxsb2NhdGVPdmVyc2l6ZShwdHIsIG9sZFNpemUsIG5ld1NpemUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmgJ
KHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNw
YWNlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAi
Q29waWVkU3BhY2UuaCIKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSGVhcEJsb2NrLmgi
Ci0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlIDx3
dGYvQ2hlY2tlZEJvb2xlYW4uaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xNTAsNyArMTUwLDcg
QEAgaW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OmFsbG9jYXRlQmxvY2soKQogCiBpbmxpbmUgQ2hl
Y2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRyeUFsbG9jYXRlKHNpemVfdCBieXRlcywgdm9pZCoq
IG91dFB0cikKIHsKLSAgICBBU1NFUlQoIW1faGVhcC0+Z2xvYmFsRGF0YSgpLT5pc0luaXRpYWxp
emluZ09iamVjdCgpKTsKKyAgICBBU1NFUlQoIW1faGVhcC0+dm0oKS0+aXNJbml0aWFsaXppbmdP
YmplY3QoKSk7CiAKICAgICBpZiAoIW1fYWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5dGVzLCBvdXRQ
dHIpKQogICAgICAgICByZXR1cm4gdHJ5QWxsb2NhdGVTbG93Q2FzZShieXRlcywgb3V0UHRyKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWRE
YXRhLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NUaHJlYWRTaGFyZWREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAog
I2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAjaW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiR0NUaHJlYWQuaCIKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNs
dWRlICJWTS5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9y
LmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCkBAIC01MiwxMSArNTIsMTEgQEAg
c2l6ZV90IEdDVGhyZWFkU2hhcmVkRGF0YTo6Y2hpbGRWaXNpdENvdQogfQogI2VuZGlmCiAKLUdD
VGhyZWFkU2hhcmVkRGF0YTo6R0NUaHJlYWRTaGFyZWREYXRhKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSkKLSAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQotICAgICwgbV9jb3BpZWRTcGFj
ZSgmZ2xvYmFsRGF0YS0+aGVhcC5tX3N0b3JhZ2VTcGFjZSkKK0dDVGhyZWFkU2hhcmVkRGF0YTo6
R0NUaHJlYWRTaGFyZWREYXRhKFZNKiB2bSkKKyAgICA6IG1fdm0odm0pCisgICAgLCBtX2NvcGll
ZFNwYWNlKCZ2bS0+aGVhcC5tX3N0b3JhZ2VTcGFjZSkKICAgICAsIG1fc2hvdWxkSGFzaENvbnMo
ZmFsc2UpCi0gICAgLCBtX3NoYXJlZE1hcmtTdGFjayhnbG9iYWxEYXRhLT5oZWFwLmJsb2NrQWxs
b2NhdG9yKCkpCisgICAgLCBtX3NoYXJlZE1hcmtTdGFjayh2bS0+aGVhcC5ibG9ja0FsbG9jYXRv
cigpKQogICAgICwgbV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycygwKQogICAgICwgbV9w
YXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KGZhbHNlKQogICAgICwgbV9jb3B5SW5kZXgoMCkKQEAg
LTExNiw3ICsxMTYsNyBAQCB2b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6cmVzZXQoKQogICAgIG1f
d2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMucmVtb3ZlQWxsKCk7CiAKICAgICBpZiAobV9zaG91bGRI
YXNoQ29ucykgewotICAgICAgICBtX2dsb2JhbERhdGEtPnJlc2V0TmV3U3RyaW5nc1NpbmNlTGFz
dEhhc2hDb25zKCk7CisgICAgICAgIG1fdm0tPnJlc2V0TmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hD
b25zKCk7CiAgICAgICAgIG1fc2hvdWxkSGFzaENvbnMgPSBmYWxzZTsKICAgICB9CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaAko
cmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRT
aGFyZWREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAKIG5hbWVzcGFjZSBK
U0MgewogCiBjbGFzcyBHQ1RocmVhZDsKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwog
Y2xhc3MgQ29waWVkU3BhY2U7CiBjbGFzcyBDb3B5VmlzaXRvcjsKIApAQCAtNTIsNyArNTIsNyBA
QCBlbnVtIEdDUGhhc2UgewogCiBjbGFzcyBHQ1RocmVhZFNoYXJlZERhdGEgewogcHVibGljOgot
ICAgIEdDVGhyZWFkU2hhcmVkRGF0YShKU0dsb2JhbERhdGEqKTsKKyAgICBHQ1RocmVhZFNoYXJl
ZERhdGEoVk0qKTsKICAgICB+R0NUaHJlYWRTaGFyZWREYXRhKCk7CiAgICAgCiAgICAgdm9pZCBy
ZXNldCgpOwpAQCAtNzcsNyArNzcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RhcnROZXh0UGhh
c2UoR0NQaGFzZSk7CiAgICAgdm9pZCBlbmRDdXJyZW50UGhhc2UoKTsKIAotICAgIEpTR2xvYmFs
RGF0YSogbV9nbG9iYWxEYXRhOworICAgIFZNKiBtX3ZtOwogICAgIENvcGllZFNwYWNlKiBtX2Nv
cGllZFNwYWNlOwogICAgIAogICAgIGJvb2wgbV9zaG91bGRIYXNoQ29uczsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzUsOCArMzUsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotSGFuZGxlU2V0OjpIYW5kbGVT
ZXQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQotICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERh
dGEpCitIYW5kbGVTZXQ6OkhhbmRsZVNldChWTSogdm0pCisgICAgOiBtX3ZtKHZtKQogICAgICwg
bV9uZXh0VG9GaW5hbGl6ZSgwKQogewogICAgIGdyb3coKTsKQEAgLTQ1LDEyICs0NSwxMiBAQCBI
YW5kbGVTZXQ6OkhhbmRsZVNldChKU0dsb2JhbERhdGEqIGdsb2JhCiBIYW5kbGVTZXQ6On5IYW5k
bGVTZXQoKQogewogICAgIHdoaWxlICghbV9ibG9ja0xpc3QuaXNFbXB0eSgpKQotICAgICAgICBt
X2dsb2JhbERhdGEtPmhlYXAuYmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlKEhhbmRsZUJsb2Nr
OjpkZXN0cm95KG1fYmxvY2tMaXN0LnJlbW92ZUhlYWQoKSkpOworICAgICAgICBtX3ZtLT5oZWFw
LmJsb2NrQWxsb2NhdG9yKCkuZGVhbGxvY2F0ZShIYW5kbGVCbG9jazo6ZGVzdHJveShtX2Jsb2Nr
TGlzdC5yZW1vdmVIZWFkKCkpKTsKIH0KIAogdm9pZCBIYW5kbGVTZXQ6Omdyb3coKQogewotICAg
IEhhbmRsZUJsb2NrKiBuZXdCbG9jayA9IEhhbmRsZUJsb2NrOjpjcmVhdGUobV9nbG9iYWxEYXRh
LT5oZWFwLmJsb2NrQWxsb2NhdG9yKCkuYWxsb2NhdGU8SGFuZGxlQmxvY2s+KCksIHRoaXMpOwor
ICAgIEhhbmRsZUJsb2NrKiBuZXdCbG9jayA9IEhhbmRsZUJsb2NrOjpjcmVhdGUobV92bS0+aGVh
cC5ibG9ja0FsbG9jYXRvcigpLmFsbG9jYXRlPEhhbmRsZUJsb2NrPigpLCB0aGlzKTsKICAgICBt
X2Jsb2NrTGlzdC5hcHBlbmQobmV3QmxvY2spOwogCiAgICAgZm9yIChpbnQgaSA9IG5ld0Jsb2Nr
LT5ub2RlQ2FwYWNpdHkoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IYW5kbGVTZXQuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBIYW5kbGVCbG9jazsKIGNsYXNzIEhhbmRsZVNldDsK
IGNsYXNzIEhlYXBSb290VmlzaXRvcjsKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwog
Y2xhc3MgSlNWYWx1ZTsKIGNsYXNzIFNsb3RWaXNpdG9yOwogCkBAIC02NywxMCArNjcsMTAgQEAg
Y2xhc3MgSGFuZGxlU2V0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgSGFuZGxlU2V0KiBoZWFwRm9y
KEhhbmRsZVNsb3QpOwogCi0gICAgSGFuZGxlU2V0KEpTR2xvYmFsRGF0YSopOworICAgIEhhbmRs
ZVNldChWTSopOwogICAgIH5IYW5kbGVTZXQoKTsKIAotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSgpOworICAgIFZNKiB2bSgpOwogCiAgICAgSGFuZGxlU2xvdCBhbGxvY2F0ZSgpOwogICAg
IHZvaWQgZGVhbGxvY2F0ZShIYW5kbGVTbG90KTsKQEAgLTk0LDcgKzk0LDcgQEAgcHJpdmF0ZToK
ICAgICBib29sIGlzTGl2ZU5vZGUoTm9kZSopOwogI2VuZGlmCiAKLSAgICBKU0dsb2JhbERhdGEq
IG1fZ2xvYmFsRGF0YTsKKyAgICBWTSogbV92bTsKICAgICBEb3VibHlMaW5rZWRMaXN0PEhhbmRs
ZUJsb2NrPiBtX2Jsb2NrTGlzdDsKIAogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPiBtX3N0
cm9uZ0xpc3Q7CkBAIC0xMDgsOSArMTA4LDkgQEAgaW5saW5lIEhhbmRsZVNldCogSGFuZGxlU2V0
OjpoZWFwRm9yKEhhbgogICAgIHJldHVybiB0b05vZGUoaGFuZGxlKS0+aGFuZGxlU2V0KCk7CiB9
CiAKLWlubGluZSBKU0dsb2JhbERhdGEqIEhhbmRsZVNldDo6Z2xvYmFsRGF0YSgpCitpbmxpbmUg
Vk0qIEhhbmRsZVNldDo6dm0oKQogewotICAgIHJldHVybiBtX2dsb2JhbERhdGE7CisgICAgcmV0
dXJuIG1fdm07CiB9CiAKIGlubGluZSBIYW5kbGVTbG90IEhhbmRsZVNldDo6dG9IYW5kbGUoSGFu
ZGxlU2V0OjpOb2RlKiBub2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJ
KHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiSGVhcFN0YXRpc3Rp
Y3MuaCIKICNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRlICJJbnRlcnBy
ZXRlci5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5j
bHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJK
U09OT2JqZWN0LmgiCkBAIC0xNjQsMTcgKzE2NCwxNyBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBw
cm9wb3J0aW9uYWxIZWFwU2l6CiAgICAgcmV0dXJuIDEuMjUgKiBoZWFwU2l6ZTsKIH0KIAotc3Rh
dGljIGlubGluZSBib29sIGlzVmFsaWRTaGFyZWRJbnN0YW5jZVRocmVhZFN0YXRlKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkU2hhcmVkSW5zdGFu
Y2VUaHJlYWRTdGF0ZShWTSogdm0pCiB7Ci0gICAgcmV0dXJuIGdsb2JhbERhdGEtPmFwaUxvY2so
KS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpOworICAgIHJldHVybiB2bS0+YXBpTG9jaygp
LmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBp
c1ZhbGlkVGhyZWFkU3RhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorc3RhdGljIGlubGlu
ZSBib29sIGlzVmFsaWRUaHJlYWRTdGF0ZShWTSogdm0pCiB7Ci0gICAgaWYgKGdsb2JhbERhdGEt
PmlkZW50aWZpZXJUYWJsZSAhPSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJs
ZSgpKQorICAgIGlmICh2bS0+aWRlbnRpZmllclRhYmxlICE9IHd0ZlRocmVhZERhdGEoKS5jdXJy
ZW50SWRlbnRpZmllclRhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChn
bG9iYWxEYXRhLT5pc1NoYXJlZEluc3RhbmNlKCkgJiYgIWlzVmFsaWRTaGFyZWRJbnN0YW5jZVRo
cmVhZFN0YXRlKGdsb2JhbERhdGEpKQorICAgIGlmICh2bS0+aXNTaGFyZWRJbnN0YW5jZSgpICYm
ICFpc1ZhbGlkU2hhcmVkSW5zdGFuY2VUaHJlYWRTdGF0ZSh2bSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtMjQxLDcgKzI0MSw3IEBAIGlubGluZSBQYXNz
T3duUHRyPFR5cGVDb3VudFNldD4gUmVjb3JkVHkKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNl
CiAKLUhlYXA6OkhlYXAoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBIZWFwVHlwZSBoZWFwVHlw
ZSkKK0hlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICA6IG1faGVhcFR5
cGUoaGVhcFR5cGUpCiAgICAgLCBtX3JhbVNpemUocmFtU2l6ZSgpKQogICAgICwgbV9taW5CeXRl
c1BlckN5Y2xlKG1pbkhlYXBTaXplKG1faGVhcFR5cGUsIG1fcmFtU2l6ZSkpCkBAIC0yNTQsMTIg
KzI1NCwxMiBAQCBIZWFwOjpIZWFwKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSGVhCiAgICAg
LCBtX29iamVjdFNwYWNlKHRoaXMpCiAgICAgLCBtX3N0b3JhZ2VTcGFjZSh0aGlzKQogICAgICwg
bV9tYWNoaW5lVGhyZWFkcyh0aGlzKQotICAgICwgbV9zaGFyZWREYXRhKGdsb2JhbERhdGEpCisg
ICAgLCBtX3NoYXJlZERhdGEodm0pCiAgICAgLCBtX3Nsb3RWaXNpdG9yKG1fc2hhcmVkRGF0YSkK
ICAgICAsIG1fY29weVZpc2l0b3IobV9zaGFyZWREYXRhKQotICAgICwgbV9oYW5kbGVTZXQoZ2xv
YmFsRGF0YSkKKyAgICAsIG1faGFuZGxlU2V0KHZtKQogICAgICwgbV9pc1NhZmVUb0NvbGxlY3Qo
ZmFsc2UpCi0gICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKKyAgICAsIG1fdm0odm0pCiAg
ICAgLCBtX2xhc3RHQ0xlbmd0aCgwKQogICAgICwgbV9sYXN0Q29kZURpc2NhcmRUaW1lKFdURjo6
Y3VycmVudFRpbWUoKSkKICAgICAsIG1fYWN0aXZpdHlDYWxsYmFjayhEZWZhdWx0R0NBY3Rpdml0
eUNhbGxiYWNrOjpjcmVhdGUodGhpcykpCkBAIC0yNzcsMTEgKzI3NywxMSBAQCBib29sIEhlYXA6
OmlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKQogICAgIHJldHVybiBtX29iamVjdFNwYWNlLmlz
UGFnZWRPdXQoZGVhZGxpbmUpIHx8IG1fc3RvcmFnZVNwYWNlLmlzUGFnZWRPdXQoZGVhZGxpbmUp
OwogfQogCi0vLyBUaGUgSlNHbG9iYWxEYXRhIGlzIGJlaW5nIGRlc3Ryb3llZCBhbmQgdGhlIGNv
bGxlY3RvciB3aWxsIG5ldmVyIHJ1biBhZ2Fpbi4KKy8vIFRoZSBWTSBpcyBiZWluZyBkZXN0cm95
ZWQgYW5kIHRoZSBjb2xsZWN0b3Igd2lsbCBuZXZlciBydW4gYWdhaW4uCiAvLyBSdW4gYWxsIHBl
bmRpbmcgZmluYWxpemVycyBub3cgYmVjYXVzZSB3ZSB3b24ndCBnZXQgYW5vdGhlciBjaGFuY2Uu
CiB2b2lkIEhlYXA6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKCkKIHsKLSAgICBSRUxFQVNFX0FTU0VS
VCghbV9nbG9iYWxEYXRhLT5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICBSRUxFQVNFX0FTU0VS
VCghbV92bS0+ZHluYW1pY0dsb2JhbE9iamVjdCk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9vcGVy
YXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9uKTsKIAogICAgIG1fb2JqZWN0U3BhY2UubGFz
dENoYW5jZVRvRmluYWxpemUoKTsKQEAgLTMzMiw3ICszMzIsNyBAQCB2b2lkIEhlYXA6OmRpZEFi
YW5kb24oc2l6ZV90IGJ5dGVzKQogdm9pZCBIZWFwOjpwcm90ZWN0KEpTVmFsdWUgaykKIHsKICAg
ICBBU1NFUlQoayk7Ci0gICAgQVNTRVJUKG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdMb2NrKCkpOworICAgIEFTU0VSVChtX3ZtLT5hcGlMb2NrKCkuY3VycmVu
dFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAKICAgICBpZiAoIWsuaXNDZWxsKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTM0Myw3ICszNDMsNyBAQCB2b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZSBr
KQogYm9vbCBIZWFwOjp1bnByb3RlY3QoSlNWYWx1ZSBrKQogewogICAgIEFTU0VSVChrKTsKLSAg
ICBBU1NFUlQobV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xv
Y2soKSk7CisgICAgQVNTRVJUKG1fdm0tPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5n
TG9jaygpKTsKIAogICAgIGlmICghay5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtNDAyLDcgKzQwMiw3IEBAIHZvaWQgSGVhcDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxp
emUKIAogaW5saW5lIEpTU3RhY2smIEhlYXA6OnN0YWNrKCkKIHsKLSAgICByZXR1cm4gbV9nbG9i
YWxEYXRhLT5pbnRlcnByZXRlci0+c3RhY2soKTsKKyAgICByZXR1cm4gbV92bS0+aW50ZXJwcmV0
ZXItPnN0YWNrKCk7CiB9CiAKIHZvaWQgSGVhcDo6Y2Fub25pY2FsaXplQ2VsbExpdmVuZXNzRGF0
YSgpCkBAIC00MTIsNyArNDEyLDcgQEAgdm9pZCBIZWFwOjpjYW5vbmljYWxpemVDZWxsTGl2ZW5l
c3NEYXRhKAogCiB2b2lkIEhlYXA6OmdldENvbnNlcnZhdGl2ZVJlZ2lzdGVyUm9vdHMoSGFzaFNl
dDxKU0NlbGwqPiYgcm9vdHMpCiB7Ci0gICAgQVNTRVJUKGlzVmFsaWRUaHJlYWRTdGF0ZShtX2ds
b2JhbERhdGEpKTsKKyAgICBBU1NFUlQoaXNWYWxpZFRocmVhZFN0YXRlKG1fdm0pKTsKICAgICBD
b25zZXJ2YXRpdmVSb290cyBzdGFja1Jvb3RzKCZtX29iamVjdFNwYWNlLmJsb2NrcygpLCAmbV9z
dG9yYWdlU3BhY2UpOwogICAgIHN0YWNrKCkuZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoc3RhY2tS
b290cyk7CiAgICAgc2l6ZV90IHN0YWNrUm9vdENvdW50ID0gc3RhY2tSb290cy5zaXplKCk7CkBA
IC00MjgsNyArNDI4LDcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogICAgIFNhbXBsaW5nUmVn
aW9uIHNhbXBsaW5nUmVnaW9uKCJHYXJiYWdlIENvbGxlY3Rpb246IFRyYWNpbmciKTsKIAogICAg
IEdDUEhBU0UoTWFya1Jvb3RzKTsKLSAgICBBU1NFUlQoaXNWYWxpZFRocmVhZFN0YXRlKG1fZ2xv
YmFsRGF0YSkpOworICAgIEFTU0VSVChpc1ZhbGlkVGhyZWFkU3RhdGUobV92bSkpOwogCiAjaWYg
RU5BQkxFKE9CSkVDVF9NQVJLX0xPR0dJTkcpCiAgICAgZG91YmxlIGdjU3RhcnRUaW1lID0gV1RG
OjpjdXJyZW50VGltZSgpOwpAQCAtNDU3LDcgKzQ1Nyw3IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3Rz
KCkKICAgICBDb25zZXJ2YXRpdmVSb290cyBzY3JhdGNoQnVmZmVyUm9vdHMoJm1fb2JqZWN0U3Bh
Y2UuYmxvY2tzKCksICZtX3N0b3JhZ2VTcGFjZSk7CiAgICAgewogICAgICAgICBHQ1BIQVNFKEdh
dGhlclNjcmF0Y2hCdWZmZXJSb290cyk7Ci0gICAgICAgIG1fZ2xvYmFsRGF0YS0+Z2F0aGVyQ29u
c2VydmF0aXZlUm9vdHMoc2NyYXRjaEJ1ZmZlclJvb3RzKTsKKyAgICAgICAgbV92bS0+Z2F0aGVy
Q29uc2VydmF0aXZlUm9vdHMoc2NyYXRjaEJ1ZmZlclJvb3RzKTsKICAgICB9CiAjZW5kaWYKIApA
QCAtNDc0LDEzICs0NzQsMTMgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogICAgIHsKICAgICAg
ICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKHZpc2l0b3IpOwogCi0gICAgICAgIGlmICht
X2dsb2JhbERhdGEtPmNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkLnNpemUoKSkgeworICAgICAgICBp
ZiAobV92bS0+Y29kZUJsb2Nrc0JlaW5nQ29tcGlsZWQuc2l6ZSgpKSB7CiAgICAgICAgICAgICBH
Q1BIQVNFKFZpc2l0QWN0aXZlQ29kZUJsb2NrKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9nbG9iYWxEYXRhLT5jb2RlQmxvY2tzQmVpbmdDb21waWxlZC5zaXplKCk7IGkr
KykKLSAgICAgICAgICAgICAgICBtX2dsb2JhbERhdGEtPmNvZGVCbG9ja3NCZWluZ0NvbXBpbGVk
W2ldLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV92bS0+Y29kZUJsb2Nrc0JlaW5nQ29tcGlsZWQuc2l6ZSgpOyBpKyspCisgICAg
ICAgICAgICAgICAgbV92bS0+Y29kZUJsb2Nrc0JlaW5nQ29tcGlsZWRbaV0tPnZpc2l0QWdncmVn
YXRlKHZpc2l0b3IpOwogICAgICAgICB9CiAKLSAgICAgICAgbV9nbG9iYWxEYXRhLT5zbWFsbFN0
cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKHZpc2l0b3IpOworICAgICAgICBtX3ZtLT5zbWFs
bFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKHZpc2l0b3IpOwogCiAgICAgICAgIHsKICAg
ICAgICAgICAgIEdDUEhBU0UoVmlzaXRNYWNoaW5lUm9vdHMpOwpAQCAtNTIzLDEwICs1MjMsMTAg
QEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogICAgICAgICAgICAgICAgIHZpc2l0b3IuZG9uYXRl
QW5kRHJhaW4oKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAobV9nbG9i
YWxEYXRhLT5leGNlcHRpb24pIHsKKyAgICAgICAgaWYgKG1fdm0tPmV4Y2VwdGlvbikgewogICAg
ICAgICAgICAgR0NQSEFTRShNYXJraW5nRXhjZXB0aW9uKTsKICAgICAgICAgICAgIE1BUktfTE9H
X1JPT1QodmlzaXRvciwgIkV4Y2VwdGlvbnMiKTsKLSAgICAgICAgICAgIGhlYXBSb290VmlzaXRv
ci52aXNpdCgmbV9nbG9iYWxEYXRhLT5leGNlcHRpb24pOworICAgICAgICAgICAgaGVhcFJvb3RW
aXNpdG9yLnZpc2l0KCZtX3ZtLT5leGNlcHRpb24pOwogICAgICAgICAgICAgdmlzaXRvci5kb25h
dGVBbmREcmFpbigpOwogICAgICAgICB9CiAgICAgCkBAIC02NTgsNyArNjU4LDcgQEAgdm9pZCBI
ZWFwOjpkZWxldGVBbGxDb21waWxlZENvZGUoKQogewogICAgIC8vIElmIEphdmFTY3JpcHQgaXMg
cnVubmluZywgaXQncyBub3Qgc2FmZSB0byBkZWxldGUgY29kZSwgc2luY2Ugd2UnbGwgZW5kCiAg
ICAgLy8gdXAgZGVsZXRpbmcgY29kZSB0aGF0IGlzIGxpdmUgb24gdGhlIHN0YWNrLgotICAgIGlm
IChtX2dsb2JhbERhdGEtPmR5bmFtaWNHbG9iYWxPYmplY3QpCisgICAgaWYgKG1fdm0tPmR5bmFt
aWNHbG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAoRXhlY3V0YWJsZUJh
c2UqIGN1cnJlbnQgPSBtX2NvbXBpbGVkQ29kZS5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBj
dXJyZW50LT5uZXh0KCkpIHsKQEAgLTcwNCw4ICs3MDQsOCBAQCB2b2lkIEhlYXA6OmNvbGxlY3Qo
U3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24o
IkdhcmJhZ2UgQ29sbGVjdGlvbiIpOwogICAgIAogICAgIEdDUEhBU0UoQ29sbGVjdCk7Ci0gICAg
QVNTRVJUKGdsb2JhbERhdGEoKS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2Nr
KCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKGdsb2JhbERhdGEoKS0+aWRlbnRpZmllclRhYmxlID09
IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOworICAgIEFTU0VSVCh2
bSgpLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CisgICAgUkVMRUFT
RV9BU1NFUlQodm0oKS0+aWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50
SWRlbnRpZmllclRhYmxlKCkpOwogICAgIEFTU0VSVChtX2lzU2FmZVRvQ29sbGVjdCk7CiAgICAg
SkFWQVNDUklQVENPUkVfR0NfQkVHSU4oKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX29wZXJhdGlv
bkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOwpAQCAtNzQ4LDcgKzc0OCw3IEBAIHZvaWQgSGVh
cDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKIAogICAgIHsKICAgICAgICAgR0NQSEFT
RShmaW5hbGl6ZVNtYWxsU3RyaW5ncyk7Ci0gICAgICAgIG1fZ2xvYmFsRGF0YS0+c21hbGxTdHJp
bmdzLmZpbmFsaXplU21hbGxTdHJpbmdzKCk7CisgICAgICAgIG1fdm0tPnNtYWxsU3RyaW5ncy5m
aW5hbGl6ZVNtYWxsU3RyaW5ncygpOwogICAgIH0KIAogICAgIHsKQEAgLTc1OCw3ICs3NTgsNyBA
QCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAKICAgICB7CiAgICAg
ICAgIEdDUEhBU0UoRGVsZXRlU291cmNlUHJvdmlkZXJDYWNoZXMpOwotICAgICAgICBtX2dsb2Jh
bERhdGEtPmNsZWFyU291cmNlUHJvdmlkZXJDYWNoZXMoKTsKKyAgICAgICAgbV92bS0+Y2xlYXJT
b3VyY2VQcm92aWRlckNhY2hlcygpOwogICAgIH0KIAogICAgIGlmIChzd2VlcFRvZ2dsZSA9PSBE
b1N3ZWVwKSB7CkBAIC04NDIsNyArODQyLDcgQEAgdm9pZCBIZWFwOjpkaWRBbGxvY2F0ZShzaXpl
X3QgYnl0ZXMpCiAKIGJvb2wgSGVhcDo6aXNWYWxpZEFsbG9jYXRpb24oc2l6ZV90KQogewotICAg
IGlmICghaXNWYWxpZFRocmVhZFN0YXRlKG1fZ2xvYmFsRGF0YSkpCisgICAgaWYgKCFpc1ZhbGlk
VGhyZWFkU3RhdGUobV92bSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX29w
ZXJhdGlvbkluUHJvZ3Jlc3MgIT0gTm9PcGVyYXRpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgY2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyOwogICAgIGNsYXNzIEpJVFN0dWJSb3V0aW5l
OwogICAgIGNsYXNzIEpTQ2VsbDsKLSAgICBjbGFzcyBKU0dsb2JhbERhdGE7CisgICAgY2xhc3Mg
Vk07CiAgICAgY2xhc3MgSlNTdGFjazsKICAgICBjbGFzcyBKU1ZhbHVlOwogICAgIGNsYXNzIExp
dmVPYmplY3RJdGVyYXRvcjsKQEAgLTk2LDExICs5NiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgc3RhdGljIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTQ2VsbCopOwog
ICAgICAgICBzdGF0aWMgdWludDhfdCogYWRkcmVzc09mQ2FyZEZvcihKU0NlbGwqKTsKIAotICAg
ICAgICBIZWFwKEpTR2xvYmFsRGF0YSosIEhlYXBUeXBlKTsKKyAgICAgICAgSGVhcChWTSosIEhl
YXBUeXBlKTsKICAgICAgICAgfkhlYXAoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogCi0gICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsRGF0YTsgfQorICAgICAgICBWTSogdm0oKSBj
b25zdCB7IHJldHVybiBtX3ZtOyB9CiAgICAgICAgIE1hcmtlZFNwYWNlJiBvYmplY3RTcGFjZSgp
IHsgcmV0dXJuIG1fb2JqZWN0U3BhY2U7IH0KICAgICAgICAgTWFjaGluZVRocmVhZHMmIG1hY2hp
bmVUaHJlYWRzKCkgeyByZXR1cm4gbV9tYWNoaW5lVGhyZWFkczsgfQogCkBAIC0yNTksNyArMjU5
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBib29sIG1faXNTYWZlVG9D
b2xsZWN0OwogCi0gICAgICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworICAgICAgICBW
TSogbV92bTsKICAgICAgICAgZG91YmxlIG1fbGFzdEdDTGVuZ3RoOwogICAgICAgICBkb3VibGUg
bV9sYXN0Q29kZURpc2NhcmRUaW1lOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwVGltZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBUaW1lci5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBUaW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEyICs1NywxMiBAQCBz
dGF0aWMgdm9pZCByZWxlYXNlQVBJTG9jayhjb25zdCB2b2lkKiBpCiAgICAgc3RhdGljX2Nhc3Q8
SlNMb2NrKj4oY29uc3RfY2FzdDx2b2lkKj4oaW5mbykpLT5kZXJlZigpOwogfQogCi1IZWFwVGlt
ZXI6OkhlYXBUaW1lcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENGUnVuTG9vcFJlZiBydW5M
b29wKQotICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCitIZWFwVGltZXI6OkhlYXBUaW1l
cihWTSogdm0sIENGUnVuTG9vcFJlZiBydW5Mb29wKQorICAgIDogbV92bSh2bSkKICAgICAsIG1f
cnVuTG9vcChydW5Mb29wKQogewogICAgIG1lbXNldCgmbV9jb250ZXh0LCAwLCBzaXplb2YoQ0ZS
dW5Mb29wVGltZXJDb250ZXh0KSk7Ci0gICAgbV9jb250ZXh0LmluZm8gPSAmZ2xvYmFsRGF0YS0+
YXBpTG9jaygpOworICAgIG1fY29udGV4dC5pbmZvID0gJnZtLT5hcGlMb2NrKCk7CiAgICAgbV9j
b250ZXh0LnJldGFpbiA9IHJldGFpbkFQSUxvY2s7CiAgICAgbV9jb250ZXh0LnJlbGVhc2UgPSBy
ZWxlYXNlQVBJTG9jazsKICAgICBtX3RpbWVyLmFkb3B0Q0YoQ0ZSdW5Mb29wVGltZXJDcmVhdGUo
MCwgc19kZWNhZGUsIHNfZGVjYWRlLCAwLCAwLCBIZWFwVGltZXI6OnRpbWVyRGlkRmlyZSwgJm1f
Y29udGV4dCkpOwpAQCAtODksMjMgKzg5LDIzIEBAIHZvaWQgSGVhcFRpbWVyOjp0aW1lckRpZEZp
cmUoQ0ZSdW5Mb29wVGkKICAgICBKU0xvY2sqIGFwaUxvY2sgPSBzdGF0aWNfY2FzdDxKU0xvY2sq
Pihjb250ZXh0KTsKICAgICBhcGlMb2NrLT5sb2NrKCk7CiAKLSAgICBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEgPSBhcGlMb2NrLT5nbG9iYWxEYXRhKCk7Ci0gICAgLy8gVGhlIEpTR2xvYmFsRGF0
YSBoYXMgYmVlbiBkZXN0cm95ZWQsIHNvIHdlIHNob3VsZCBqdXN0IGdpdmUgdXAuCi0gICAgaWYg
KCFnbG9iYWxEYXRhKSB7CisgICAgVk0qIHZtID0gYXBpTG9jay0+dm0oKTsKKyAgICAvLyBUaGUg
Vk0gaGFzIGJlZW4gZGVzdHJveWVkLCBzbyB3ZSBzaG91bGQganVzdCBnaXZlIHVwLgorICAgIGlm
ICghdm0pIHsKICAgICAgICAgYXBpTG9jay0+dW5sb2NrKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBIZWFwVGltZXIqIGhlYXBUaW1lciA9IDA7Ci0gICAgaWYgKGdsb2JhbERhdGEt
PmhlYXAuYWN0aXZpdHlDYWxsYmFjaygpLT5tX3RpbWVyLmdldCgpID09IHRpbWVyKQotICAgICAg
ICBoZWFwVGltZXIgPSBnbG9iYWxEYXRhLT5oZWFwLmFjdGl2aXR5Q2FsbGJhY2soKTsKLSAgICBl
bHNlIGlmIChnbG9iYWxEYXRhLT5oZWFwLnN3ZWVwZXIoKS0+bV90aW1lci5nZXQoKSA9PSB0aW1l
cikKLSAgICAgICAgaGVhcFRpbWVyID0gZ2xvYmFsRGF0YS0+aGVhcC5zd2VlcGVyKCk7CisgICAg
aWYgKHZtLT5oZWFwLmFjdGl2aXR5Q2FsbGJhY2soKS0+bV90aW1lci5nZXQoKSA9PSB0aW1lcikK
KyAgICAgICAgaGVhcFRpbWVyID0gdm0tPmhlYXAuYWN0aXZpdHlDYWxsYmFjaygpOworICAgIGVs
c2UgaWYgKHZtLT5oZWFwLnN3ZWVwZXIoKS0+bV90aW1lci5nZXQoKSA9PSB0aW1lcikKKyAgICAg
ICAgaGVhcFRpbWVyID0gdm0tPmhlYXAuc3dlZXBlcigpOwogICAgIGVsc2UKICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAogICAgIHsKLSAgICAgICAgQVBJRW50cnlTaGlt
IHNoaW0oZ2xvYmFsRGF0YSk7CisgICAgICAgIEFQSUVudHJ5U2hpbSBzaGltKHZtKTsKICAgICAg
ICAgaGVhcFRpbWVyLT5kb1dvcmsoKTsKICAgICB9CiAKQEAgLTExNCw4ICsxMTQsOCBAQCB2b2lk
IEhlYXBUaW1lcjo6dGltZXJEaWRGaXJlKENGUnVuTG9vcFRpCiAKICNlbGlmIFBMQVRGT1JNKEJM
QUNLQkVSUlkpCiAKLUhlYXBUaW1lcjo6SGVhcFRpbWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSkKLSAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorSGVhcFRpbWVyOjpIZWFwVGltZXIo
Vk0qIHZtKQorICAgIDogbV92bSh2bSkKICAgICAsIG1fdGltZXIodGhpcywgJkhlYXBUaW1lcjo6
dGltZXJEaWRGaXJlKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgSGVhcFRpbWVyIGZvciBv
dGhlciB0aHJlYWRzLgpAQCAtMTQyLDggKzE0Miw4IEBAIHZvaWQgSGVhcFRpbWVyOjppbnZhbGlk
YXRlKCkKIAogI2VsaWYgUExBVEZPUk0oUVQpCiAKLUhlYXBUaW1lcjo6SGVhcFRpbWVyKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSkKLSAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorSGVh
cFRpbWVyOjpIZWFwVGltZXIoVk0qIHZtKQorICAgIDogbV92bSh2bSkKICAgICAsIG1fbmV3VGhy
ZWFkKDApCiAgICAgLCBtX211dGV4KFFNdXRleDo6Tm9uUmVjdXJzaXZlKQogewpAQCAtMTY2LDcg
KzE2Niw3IEBAIHZvaWQgSGVhcFRpbWVyOjp0aW1lckV2ZW50KFFUaW1lckV2ZW50KikKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIEFQSUVudHJ5U2hpbSBzaGltKG1fZ2xvYmFsRGF0YSk7
CisgICAgQVBJRW50cnlTaGltIHNoaW0obV92bSk7CiAgICAgZG9Xb3JrKCk7CiB9CiAKQEAgLTE5
MSw4ICsxOTEsOCBAQCB2b2lkIEhlYXBUaW1lcjo6c3luY2hyb25pemUoKQogfQogCiAjZWxzZQot
SGVhcFRpbWVyOjpIZWFwVGltZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQotICAgIDogbV9n
bG9iYWxEYXRhKGdsb2JhbERhdGEpCitIZWFwVGltZXI6OkhlYXBUaW1lcihWTSogdm0pCisgICAg
OiBtX3ZtKHZtKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
VGltZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGlt
ZXIuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cFRpbWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwogCiAjaWYgUExBVEZPUk0oUVQp
ICYmICFVU0UoQ0YpCiBjbGFzcyBIZWFwVGltZXIgOiBwdWJsaWMgUU9iamVjdCB7CkBAIC01MSwx
MCArNTEsMTAgQEAgY2xhc3MgSGVhcFRpbWVyIHsKICNlbmRpZgogcHVibGljOgogI2lmIFVTRShD
RikKLSAgICBIZWFwVGltZXIoSlNHbG9iYWxEYXRhKiwgQ0ZSdW5Mb29wUmVmKTsKKyAgICBIZWFw
VGltZXIoVk0qLCBDRlJ1bkxvb3BSZWYpOwogICAgIHN0YXRpYyB2b2lkIHRpbWVyRGlkRmlyZShD
RlJ1bkxvb3BUaW1lclJlZiwgdm9pZCopOwogI2Vsc2UKLSAgICBIZWFwVGltZXIoSlNHbG9iYWxE
YXRhKik7CisgICAgSGVhcFRpbWVyKFZNKik7CiAjZW5kaWYKICAgICAKICAgICB2aXJ0dWFsIH5I
ZWFwVGltZXIoKTsKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBk
b1dvcmsoKSA9IDA7CiAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAgSlNHbG9iYWxEYXRhKiBtX2dsb2Jh
bERhdGE7CisgICAgVk0qIG1fdm07CiAKICNpZiBVU0UoQ0YpCiAgICAgc3RhdGljIGNvbnN0IENG
VGltZUludGVydmFsIHNfZGVjYWRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SW5jcmVtZW50YWxTd2VlcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw3ICs0Niw3IEBAIHN0YXRpYyBjb25zdCBkb3VibGUgc3dlZXBUaW1lTXVsdGlw
bGllciAKICNpZiBVU0UoQ0YpCiAgICAgCiBJbmNyZW1lbnRhbFN3ZWVwZXI6OkluY3JlbWVudGFs
U3dlZXBlcihIZWFwKiBoZWFwLCBDRlJ1bkxvb3BSZWYgcnVuTG9vcCkKLSAgICA6IEhlYXBUaW1l
cihoZWFwLT5nbG9iYWxEYXRhKCksIHJ1bkxvb3ApCisgICAgOiBIZWFwVGltZXIoaGVhcC0+dm0o
KSwgcnVuTG9vcCkKICAgICAsIG1fY3VycmVudEJsb2NrVG9Td2VlcEluZGV4KDApCiAgICAgLCBt
X2Jsb2Nrc1RvU3dlZXAoaGVhcC0+bV9ibG9ja1NuYXBzaG90KQogewpAQCAtNzAsNyArNzAsNyBA
QCB2b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6Y2FuY2VsVGltZXIoKQogI2VsaWYgUExBVEZPUk0o
QkxBQ0tCRVJSWSkgfHwgUExBVEZPUk0oUVQpCiAgICAKIEluY3JlbWVudGFsU3dlZXBlcjo6SW5j
cmVtZW50YWxTd2VlcGVyKEhlYXAqIGhlYXApCi0gICAgOiBIZWFwVGltZXIoaGVhcC0+Z2xvYmFs
RGF0YSgpKQorICAgIDogSGVhcFRpbWVyKGhlYXAtPnZtKCkpCiAgICAgLCBtX2N1cnJlbnRCbG9j
a1RvU3dlZXBJbmRleCgwKQogICAgICwgbV9ibG9ja3NUb1N3ZWVwKGhlYXAtPm1fYmxvY2tTbmFw
c2hvdCkKIHsKQEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6c3dl
ZXBOZXh0QmxvY2soCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBibG9jay0+c3dl
ZXAoKTsKLSAgICAgICAgbV9nbG9iYWxEYXRhLT5oZWFwLm9iamVjdFNwYWNlKCkuZnJlZU9yU2hy
aW5rQmxvY2soYmxvY2spOworICAgICAgICBtX3ZtLT5oZWFwLm9iamVjdFNwYWNlKCkuZnJlZU9y
U2hyaW5rQmxvY2soYmxvY2spOwogICAgICAgICByZXR1cm47CiAgICAgfQogfQpAQCAtMTQ0LDE0
ICsxNDQsMTQgQEAgdm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OndpbGxGaW5pc2hTd2VlcAogewog
ICAgIG1fY3VycmVudEJsb2NrVG9Td2VlcEluZGV4ID0gMDsKICAgICBtX2Jsb2Nrc1RvU3dlZXAu
Y2xlYXIoKTsKLSAgICBpZiAobV9nbG9iYWxEYXRhKQorICAgIGlmIChtX3ZtKQogICAgICAgICBj
YW5jZWxUaW1lcigpOwogfQogCiAjZWxzZQogCi1JbmNyZW1lbnRhbFN3ZWVwZXI6OkluY3JlbWVu
dGFsU3dlZXBlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCi0gICAgOiBIZWFwVGltZXIoZ2xv
YmFsRGF0YSkKK0luY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50YWxTd2VlcGVyKFZNKiB2bSkK
KyAgICA6IEhlYXBUaW1lcih2bSkKIHsKIH0KIApAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgSW5j
cmVtZW50YWxTd2VlcGVyOjpkb1dvcmsoKQogCiBQYXNzT3duUHRyPEluY3JlbWVudGFsU3dlZXBl
cj4gSW5jcmVtZW50YWxTd2VlcGVyOjpjcmVhdGUoSGVhcCogaGVhcCkKIHsKLSAgICByZXR1cm4g
YWRvcHRQdHIobmV3IEluY3JlbWVudGFsU3dlZXBlcihoZWFwLT5nbG9iYWxEYXRhKCkpKTsKKyAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEluY3JlbWVudGFsU3dlZXBlcihoZWFwLT52bSgpKSk7CiB9
CiAKIHZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpzdGFydFN3ZWVwaW5nKFZlY3RvcjxNYXJrZWRC
bG9jayo+JikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dl
ZXBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVu
dGFsU3dlZXBlci5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBA
QCBwcml2YXRlOgogICAgIFZlY3RvcjxNYXJrZWRCbG9jayo+JiBtX2Jsb2Nrc1RvU3dlZXA7CiAj
ZWxzZQogICAgIAotICAgIEluY3JlbWVudGFsU3dlZXBlcihKU0dsb2JhbERhdGEqKTsKKyAgICBJ
bmNyZW1lbnRhbFN3ZWVwZXIoVk0qKTsKICAgICAKICNlbmRpZgogfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTG9jYWwuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTG9jYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2Rl
ZmluZSBMb2NhbF9oCiAKICNpbmNsdWRlICJIYW5kbGUuaCIKLSNpbmNsdWRlICJKU0dsb2JhbERh
dGEuaCIKKyNpbmNsdWRlICJWTS5oIgogCiAvKgogICAgIEEgc3Ryb25nbHkgcmVmZXJlbmNlZCBo
YW5kbGUgd2hvc2UgbGlmZXRpbWUgaXMgdGVtcG9yYXJ5LCBsaW1pdGVkIHRvIGEgZ2l2ZW4KQEAg
LTQ0LDggKzQ0LDggQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIExvY2FsIDogcHVibAog
cHVibGljOgogICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFuZGxlPFQ+OjpFeHRlcm5hbFR5cGUgRXh0
ZXJuYWxUeXBlOwogCi0gICAgTG9jYWwoSlNHbG9iYWxEYXRhJiwgRXh0ZXJuYWxUeXBlID0gRXh0
ZXJuYWxUeXBlKCkpOwotICAgIExvY2FsKEpTR2xvYmFsRGF0YSYsIEhhbmRsZTxUPik7CisgICAg
TG9jYWwoVk0mLCBFeHRlcm5hbFR5cGUgPSBFeHRlcm5hbFR5cGUoKSk7CisgICAgTG9jYWwoVk0m
LCBIYW5kbGU8VD4pOwogICAgIExvY2FsKGNvbnN0IExvY2FsPFQ+Jik7IC8vIEFkb3B0aW5nIGNv
bnN0cnVjdG9yLiBVc2VkIHRvIHJldHVybiBhIExvY2FsIHRvIGEgY2FsbGluZyBmdW5jdGlvbi4K
IAogICAgIExvY2FsJiBvcGVyYXRvcj0oRXh0ZXJuYWxUeXBlKTsKQEAgLTU2LDE0ICs1NiwxNCBA
QCBwcml2YXRlOgogICAgIHZvaWQgc2V0KEV4dGVybmFsVHlwZSk7CiB9OwogCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gaW5saW5lIExvY2FsPFQ+OjpMb2NhbChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEV4dGVybmFsVHlwZSB2YWx1ZSkKLSAgICA6IEhhbmRsZTxUPihnbG9iYWxEYXRhLmhlYXAu
aGFuZGxlU3RhY2soKS0+cHVzaCgpKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBMb2Nh
bDxUPjo6TG9jYWwoVk0mIHZtLCBFeHRlcm5hbFR5cGUgdmFsdWUpCisgICAgOiBIYW5kbGU8VD4o
dm0uaGVhcC5oYW5kbGVTdGFjaygpLT5wdXNoKCkpCiB7CiAgICAgc2V0KHZhbHVlKTsKIH0KIAot
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBMb2NhbDxUPjo6TG9jYWwoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBIYW5kbGU8VD4gb3RoZXIpCi0gICAgOiBIYW5kbGU8VD4oZ2xvYmFsRGF0
YS5oZWFwLmhhbmRsZVN0YWNrKCktPnB1c2goKSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxp
bmUgTG9jYWw8VD46OkxvY2FsKFZNJiB2bSwgSGFuZGxlPFQ+IG90aGVyKQorICAgIDogSGFuZGxl
PFQ+KHZtLmhlYXAuaGFuZGxlU3RhY2soKS0+cHVzaCgpKQogewogICAgIHNldChvdGhlci5nZXQo
KSk7CiB9CkBAIC0xMDEsOCArMTAxLDggQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSB2
b2lkIExvY2FsPAogdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5
ID0gMD4gY2xhc3MgTG9jYWxTdGFjayB7CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBIYW5kbGU8VD46
OkV4dGVybmFsVHlwZSBFeHRlcm5hbFR5cGU7CiBwdWJsaWM6Ci0gICAgTG9jYWxTdGFjayhKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEp
CisgICAgTG9jYWxTdGFjayhWTSYgdm0pCisgICAgICAgIDogbV92bSh2bSkKICAgICAgICAgLCBt
X2NvdW50KDApCiAgICAgewogICAgIH0KQEAgLTEyMiw3ICsxMjIsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBwdXNoKEV4dGVybmFsVHlwZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChtX2NvdW50
ID09IG1fc3RhY2suc2l6ZSgpKQotICAgICAgICAgICAgbV9zdGFjay5hcHBlbmQoTG9jYWw8VD4o
bV9nbG9iYWxEYXRhLCB2YWx1ZSkpOworICAgICAgICAgICAgbV9zdGFjay5hcHBlbmQoTG9jYWw8
VD4obV92bSwgdmFsdWUpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9zdGFja1ttX2Nv
dW50XSA9IHZhbHVlOwogICAgICAgICBtX2NvdW50Kys7CkBAIC0xMzIsNyArMTMyLDcgQEAgcHVi
bGljOgogICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvdW50OyB9CiAKIHBy
aXZhdGU6Ci0gICAgSlNHbG9iYWxEYXRhJiBtX2dsb2JhbERhdGE7CisgICAgVk0mIG1fdm07CiAg
ICAgVmVjdG9yPExvY2FsPFQ+LCBpbmxpbmVDYXBhY2l0eT4gbV9zdGFjazsKICAgICB1bnNpZ25l
ZCBtX2NvdW50OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsU2Nv
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbFNjb3Bl
LmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2Fs
U2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTEgKzM3LDExIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIExvY2FsU2NvcGUgaXMgc2ltaWxhciBpbiBjb25jZXB0IHRvIE5TQXV0b3JlbGVhc2VQ
b29sLgogKi8KIAotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiAKIGNsYXNzIExvY2Fs
U2NvcGUgewogcHVibGljOgotICAgIGV4cGxpY2l0IExvY2FsU2NvcGUoSlNHbG9iYWxEYXRhJik7
CisgICAgZXhwbGljaXQgTG9jYWxTY29wZShWTSYpOwogICAgIH5Mb2NhbFNjb3BlKCk7CiAgICAg
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IExvY2FsPFQ+IHJlbGVhc2UoTG9jYWw8VD4pOyAv
LyBEZXN0cm95cyBhbGwgb3RoZXIgbG9jYWxzIGluIHRoZSBzY29wZS4KQEAgLTUxLDggKzUxLDgg
QEAgcHJpdmF0ZToKICAgICBIYW5kbGVTdGFjazo6RnJhbWUgbV9sYXN0RnJhbWU7CiB9OwogCi1p
bmxpbmUgTG9jYWxTY29wZTo6TG9jYWxTY29wZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0g
ICAgOiBtX2hhbmRsZVN0YWNrKGdsb2JhbERhdGEuaGVhcC5oYW5kbGVTdGFjaygpKQoraW5saW5l
IExvY2FsU2NvcGU6OkxvY2FsU2NvcGUoVk0mIHZtKQorICAgIDogbV9oYW5kbGVTdGFjayh2bS5o
ZWFwLmhhbmRsZVN0YWNrKCkpCiB7CiAgICAgbV9oYW5kbGVTdGFjay0+ZW50ZXJTY29wZShtX2xh
c3RGcmFtZSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3Rh
Y2tNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
Y2hpbmVTdGFja01hcmtlci5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDcgKzI1LDcgQEAKICNpbmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgogI2luY2x1ZGUgIkhl
YXAuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisj
aW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlIDxzZXRqbXAuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4K
ICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC0xODgsNyArMTg4LDcgQEAgdm9pZCBN
YWNoaW5lVGhyZWFkczo6bWFrZVVzYWJsZUZyb21NdWx0aQogCiB2b2lkIE1hY2hpbmVUaHJlYWRz
OjphZGRDdXJyZW50VGhyZWFkKCkKIHsKLSAgICBBU1NFUlQoIW1faGVhcC0+Z2xvYmFsRGF0YSgp
LT5leGNsdXNpdmVUaHJlYWQgfHwgbV9oZWFwLT5nbG9iYWxEYXRhKCktPmV4Y2x1c2l2ZVRocmVh
ZCA9PSBjdXJyZW50VGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9oZWFwLT52bSgpLT5leGNsdXNp
dmVUaHJlYWQgfHwgbV9oZWFwLT52bSgpLT5leGNsdXNpdmVUaHJlYWQgPT0gY3VycmVudFRocmVh
ZCgpKTsKIAogICAgIGlmICghbV90aHJlYWRTcGVjaWZpYyB8fCB0aHJlYWRTcGVjaWZpY0dldCht
X3RocmVhZFNwZWNpZmljKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00LDcgKzQsNyBAQAogI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgog
I2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKLSNpbmNs
dWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9DdXJy
ZW50VGltZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTcwLDcgKzcwLDcgQEAgaW5saW5lIHZv
aWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdAogICAgIAogdm9pZCogTWFya2VkQWxsb2Nh
dG9yOjphbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCBieXRlcykKIHsKLSAgICBBU1NFUlQobV9oZWFw
LT5nbG9iYWxEYXRhKCktPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsK
KyAgICBBU1NFUlQobV9oZWFwLT52bSgpLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGlu
Z0xvY2soKSk7CiAjaWYgQ09MTEVDVF9PTl9FVkVSWV9BTExPQ0FUSU9OCiAgICAgbV9oZWFwLT5j
b2xsZWN0QWxsR2FyYmFnZSgpOwogICAgIEFTU0VSVChtX2hlYXAtPm1fb3BlcmF0aW9uSW5Qcm9n
cmVzcyA9PSBOb09wZXJhdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAg
TWFya2VkQmxvY2s6Ok1hcmtlZEJsb2NrKFJlZ2lvbiogcmVnaW9uLAogICAgICwgbV9kZXN0cnVj
dG9yVHlwZShkZXN0cnVjdG9yVHlwZSkKICAgICAsIG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKICAg
ICAsIG1fc3RhdGUoTmV3KSAvLyBBbGwgY2VsbHMgc3RhcnQgb3V0IHVubWFya2VkLgotICAgICwg
bV93ZWFrU2V0KGFsbG9jYXRvci0+aGVhcCgpLT5nbG9iYWxEYXRhKCkpCisgICAgLCBtX3dlYWtT
ZXQoYWxsb2NhdG9yLT5oZWFwKCktPnZtKCkpCiB7CiAgICAgQVNTRVJUKGFsbG9jYXRvcik7CiAg
ICAgSEVBUF9MT0dfQkxPQ0tfU1RBVEVfVFJBTlNJVElPTih0aGlzKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MTE3LDcgKzExNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIE1hcmtlZEFsbG9jYXRv
ciogYWxsb2NhdG9yKCkgY29uc3Q7CiAgICAgICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKLSAgICAg
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKCkgY29uc3Q7CisgICAgICAgIFZNKiB2bSgpIGNv
bnN0OwogICAgICAgICBXZWFrU2V0JiB3ZWFrU2V0KCk7CiAgICAgICAgIAogICAgICAgICBlbnVt
IFN3ZWVwTW9kZSB7IFN3ZWVwT25seSwgU3dlZXBUb0ZyZWVMaXN0IH07CkBAIC0yNDAsOSArMjQw
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBtX3dlYWtTZXQuaGVhcCgpOwog
ICAgIH0KIAotICAgIGlubGluZSBKU0dsb2JhbERhdGEqIE1hcmtlZEJsb2NrOjpnbG9iYWxEYXRh
KCkgY29uc3QKKyAgICBpbmxpbmUgVk0qIE1hcmtlZEJsb2NrOjp2bSgpIGNvbnN0CiAgICAgewot
ICAgICAgICByZXR1cm4gbV93ZWFrU2V0Lmdsb2JhbERhdGEoKTsKKyAgICAgICAgcmV0dXJuIG1f
d2Vha1NldC52bSgpOwogICAgIH0KIAogICAgIGlubGluZSBXZWFrU2V0JiBNYXJrZWRCbG9jazo6
d2Vha1NldCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
Y3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgsNyArOCw3IEBACiAjaW5jbHVkZSAiR0NU
aHJlYWQuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVP
YmplY3QuaCIKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJWTS5oIgogI2lu
Y2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJPcGVy
YXRpb25zLmgiCkBAIC0xNyw3ICsxNyw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogU2xvdFZpc2l0
b3I6OlNsb3RWaXNpdG9yKEdDVGhyZWFkU2hhcmVkRGF0YSYgc2hhcmVkKQotICAgIDogbV9zdGFj
ayhzaGFyZWQubV9nbG9iYWxEYXRhLT5oZWFwLmJsb2NrQWxsb2NhdG9yKCkpCisgICAgOiBtX3N0
YWNrKHNoYXJlZC5tX3ZtLT5oZWFwLmJsb2NrQWxsb2NhdG9yKCkpCiAgICAgLCBtX3Zpc2l0Q291
bnQoMCkKICAgICAsIG1faXNJblBhcmFsbGVsTW9kZShmYWxzZSkKICAgICAsIG1fc2hhcmVkKHNo
YXJlZCkKQEAgLTM2LDcgKzM2LDcgQEAgU2xvdFZpc2l0b3I6On5TbG90VmlzaXRvcigpCiAKIHZv
aWQgU2xvdFZpc2l0b3I6OnNldHVwKCkKIHsKLSAgICBtX3NoYXJlZC5tX3Nob3VsZEhhc2hDb25z
ID0gbV9zaGFyZWQubV9nbG9iYWxEYXRhLT5oYXZlRW5vdWdoTmV3U3RyaW5nc1RvSGFzaENvbnMo
KTsKKyAgICBtX3NoYXJlZC5tX3Nob3VsZEhhc2hDb25zID0gbV9zaGFyZWQubV92bS0+aGF2ZUVu
b3VnaE5ld1N0cmluZ3NUb0hhc2hDb25zKCk7CiAgICAgbV9zaG91bGRIYXNoQ29ucyA9IG1fc2hh
cmVkLm1fc2hvdWxkSGFzaENvbnM7CiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX3NoYXJlZC5tX2djVGhyZWFkcy5zaXplKCk7ICsraSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0cm9uZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0cm9uZy5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdHJvbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NyArMzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xh
c3MgVk07CiAKIC8vIEEgc3Ryb25nbHkgcmVmZXJlbmNlZCBoYW5kbGUgdGhhdCBwcmV2ZW50cyB0
aGUgb2JqZWN0IGl0IHBvaW50cyB0byBmcm9tIGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkLgogdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFN0cm9uZyA6IHB1YmxpYyBIYW5kbGU8VD4gewpAQCAt
NDgsOSArNDgsOSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICBTdHJvbmcoSlNH
bG9iYWxEYXRhJiwgRXh0ZXJuYWxUeXBlID0gRXh0ZXJuYWxUeXBlKCkpOworICAgIFN0cm9uZyhW
TSYsIEV4dGVybmFsVHlwZSA9IEV4dGVybmFsVHlwZSgpKTsKIAotICAgIFN0cm9uZyhKU0dsb2Jh
bERhdGEmLCBIYW5kbGU8VD4pOworICAgIFN0cm9uZyhWTSYsIEhhbmRsZTxUPik7CiAgICAgCiAg
ICAgU3Ryb25nKGNvbnN0IFN0cm9uZyYgb3RoZXIpCiAgICAgICAgIDogSGFuZGxlPFQ+KCkKQEAg
LTk1LDcgKzk1LDcgQEAgcHVibGljOgogCiAgICAgRXh0ZXJuYWxUeXBlIGdldCgpIGNvbnN0IHsg
cmV0dXJuIEhhbmRsZVR5cGVzPFQ+OjpnZXRGcm9tU2xvdCh0aGlzLT5zbG90KCkpOyB9CiAKLSAg
ICB2b2lkIHNldChKU0dsb2JhbERhdGEmLCBFeHRlcm5hbFR5cGUpOworICAgIHZvaWQgc2V0KFZN
JiwgRXh0ZXJuYWxUeXBlKTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBTdHJvbmcmIG9w
ZXJhdG9yPShjb25zdCBTdHJvbmc8VT4mIG90aGVyKQogICAgIHsKQEAgLTEwNCw3ICsxMDQsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgIH0KIAotICAgICAg
ICBzZXQoKkhhbmRsZVNldDo6aGVhcEZvcihvdGhlci5zbG90KCkpLT5nbG9iYWxEYXRhKCksIG90
aGVyLmdldCgpKTsKKyAgICAgICAgc2V0KCpIYW5kbGVTZXQ6OmhlYXBGb3Iob3RoZXIuc2xvdCgp
KS0+dm0oKSwgb3RoZXIuZ2V0KCkpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogICAg
IApAQCAtMTE1LDcgKzExNSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAqdGhpczsK
ICAgICAgICAgfQogCi0gICAgICAgIHNldCgqSGFuZGxlU2V0OjpoZWFwRm9yKG90aGVyLnNsb3Qo
KSktPmdsb2JhbERhdGEoKSwgb3RoZXIuZ2V0KCkpOworICAgICAgICBzZXQoKkhhbmRsZVNldDo6
aGVhcEZvcihvdGhlci5zbG90KCkpLT52bSgpLCBvdGhlci5nZXQoKSk7CiAgICAgICAgIHJldHVy
biAqdGhpczsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0cm9u
Z0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdHJv
bmdJbmxpbmVzLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1N0cm9uZ0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjkgKzI2LDI5IEBACiAj
aWZuZGVmIFN0cm9uZ0lubGluZXNfaAogI2RlZmluZSBTdHJvbmdJbmxpbmVzX2gKIAotI2luY2x1
ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAKIG5hbWVzcGFjZSBKU0Mgewog
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWlubGluZSBTdHJvbmc8VD46OlN0cm9uZyhKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEV4dGVybmFsVHlwZSB2YWx1ZSkKLSAgICA6IEhhbmRsZTxUPihn
bG9iYWxEYXRhLmhlYXAuaGFuZGxlU2V0KCktPmFsbG9jYXRlKCkpCitpbmxpbmUgU3Ryb25nPFQ+
OjpTdHJvbmcoVk0mIHZtLCBFeHRlcm5hbFR5cGUgdmFsdWUpCisgICAgOiBIYW5kbGU8VD4odm0u
aGVhcC5oYW5kbGVTZXQoKS0+YWxsb2NhdGUoKSkKIHsKICAgICBzZXQodmFsdWUpOwogfQogCiB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWlubGluZSBTdHJvbmc8VD46OlN0cm9uZyhKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEhhbmRsZTxUPiBoYW5kbGUpCi0gICAgOiBIYW5kbGU8VD4oZ2xvYmFs
RGF0YS5oZWFwLmhhbmRsZVNldCgpLT5hbGxvY2F0ZSgpKQoraW5saW5lIFN0cm9uZzxUPjo6U3Ry
b25nKFZNJiB2bSwgSGFuZGxlPFQ+IGhhbmRsZSkKKyAgICA6IEhhbmRsZTxUPih2bS5oZWFwLmhh
bmRsZVNldCgpLT5hbGxvY2F0ZSgpKQogewogICAgIHNldChoYW5kbGUuZ2V0KCkpOwogfQogCiB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWlubGluZSB2b2lkIFN0cm9uZzxUPjo6c2V0KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgRXh0ZXJuYWxUeXBlIHZhbHVlKQoraW5saW5lIHZvaWQgU3Ryb25n
PFQ+OjpzZXQoVk0mIHZtLCBFeHRlcm5hbFR5cGUgdmFsdWUpCiB7CiAgICAgaWYgKCFzbG90KCkp
Ci0gICAgICAgIHNldFNsb3QoZ2xvYmFsRGF0YS5oZWFwLmhhbmRsZVNldCgpLT5hbGxvY2F0ZSgp
KTsKKyAgICAgICAgc2V0U2xvdCh2bS5oZWFwLmhhbmRsZVNldCgpLT5hbGxvY2F0ZSgpKTsKICAg
ICBzZXQodmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdXBl
clJlZ2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1cGVy
UmVnaW9uLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1N1cGVyUmVnaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwogCiBjbGFzcyBTdXBl
clJlZ2lvbiA6IHB1YmxpYyBXVEY6Ok1ldGFBbGxvY2F0b3IgewogcHVibGljOgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiV2Vha1NldC5oIgogCiAjaW5jbHVkZSAiSGVhcC5oIgot
I2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAKIG5hbWVzcGFjZSBK
U0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5oCShyZXZpc2lvbiAx
NDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDEyICszOCwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFdlYWtJbXBsKiBh
bGxvY2F0ZShKU1ZhbHVlLCBXZWFrSGFuZGxlT3duZXIqID0gMCwgdm9pZCogY29udGV4dCA9IDAp
OwogICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoV2Vha0ltcGwqKTsKIAotICAgIFdlYWtTZXQo
SlNHbG9iYWxEYXRhKik7CisgICAgV2Vha1NldChWTSopOwogICAgIH5XZWFrU2V0KCk7CiAgICAg
dm9pZCBsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogCiAgICAgSGVhcCogaGVhcCgpIGNvbnN0Owot
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpIGNvbnN0OworICAgIFZNKiB2bSgpIGNvbnN0
OwogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAKQEAgLTYyLDE5ICs2MiwxOSBAQCBwcml2
YXRlOgogICAgIFdlYWtCbG9jazo6RnJlZUNlbGwqIG1fYWxsb2NhdG9yOwogICAgIFdlYWtCbG9j
ayogbV9uZXh0QWxsb2NhdG9yOwogICAgIERvdWJseUxpbmtlZExpc3Q8V2Vha0Jsb2NrPiBtX2Js
b2NrczsKLSAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKKyAgICBWTSogbV92bTsKIH07
CiAKLWlubGluZSBXZWFrU2V0OjpXZWFrU2V0KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK2lu
bGluZSBXZWFrU2V0OjpXZWFrU2V0KFZNKiB2bSkKICAgICA6IG1fYWxsb2NhdG9yKDApCiAgICAg
LCBtX25leHRBbGxvY2F0b3IoMCkKLSAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorICAg
ICwgbV92bSh2bSkKIHsKIH0KIAotaW5saW5lIEpTR2xvYmFsRGF0YSogV2Vha1NldDo6Z2xvYmFs
RGF0YSgpIGNvbnN0CitpbmxpbmUgVk0qIFdlYWtTZXQ6OnZtKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9nbG9iYWxEYXRhOworICAgIHJldHVybiBtX3ZtOwogfQogCiBpbmxpbmUgYm9vbCBXZWFr
U2V0Ojppc0VtcHR5KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9BYnN0cmFjdFBDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQWJzdHJhY3RQQy5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9BYnN0cmFjdFBDLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsMTkgKzI3LDE5IEBACiAjaW5jbHVkZSAiQWJzdHJhY3RQQy5oIgogCiAjaW5jbHVkZSAi
Q2FsbEZyYW1lLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIK
ICNpbmNsdWRlICJKU09iamVjdC5oIgogCiAKIG5hbWVzcGFjZSBKU0MgewogCi1BYnN0cmFjdFBD
OjpBYnN0cmFjdFBDKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXhlY1N0YXRlKiBleGVjKQor
QWJzdHJhY3RQQzo6QWJzdHJhY3RQQyhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBV
TlVTRURfUEFSQU0oZ2xvYmFsRGF0YSk7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKICAgICBVTlVT
RURfUEFSQU0oZXhlYyk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoZ2xvYmFsRGF0
YS5jYW5Vc2VKSVQoKSkgeworICAgIGlmICh2bS5jYW5Vc2VKSVQoKSkgewogICAgICAgICBtX3Bv
aW50ZXIgPSBleGVjLT5yZXR1cm5QQygpLnZhbHVlKCk7CiAgICAgICAgIG1fbW9kZSA9IEpJVDsK
ICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0Fic3RyYWN0UEMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQWJzdHJhY3RQQy5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQWJzdHJhY3RQQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICsz
MSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBW
TTsKIGNsYXNzIEV4ZWNTdGF0ZTsKIHN0cnVjdCBJbnN0cnVjdGlvbjsKIApAQCAtNDMsNyArNDMs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICBBYnN0cmFjdFBDKEpTR2xvYmFs
RGF0YSYsIEV4ZWNTdGF0ZSopOworICAgIEFic3RyYWN0UEMoVk0mLCBFeGVjU3RhdGUqKTsKICAg
ICAKICNpZiBFTkFCTEUoSklUKQogICAgIEFic3RyYWN0UEMoUmV0dXJuQWRkcmVzc1B0ciBwdHIp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FjaGVkQ2FsbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWNoZWRDYWxs
LmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWNoZWRDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIENhY2hlZENhbGwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTRnVuY3Rp
b24qIGZ1bmN0aW9uLCBpbnQgYXJndW1lbnRDb3VudCkKICAgICAgICAgICAgIDogbV92YWxpZChm
YWxzZSkKICAgICAgICAgICAgICwgbV9pbnRlcnByZXRlcihjYWxsRnJhbWUtPmludGVycHJldGVy
KCkpCi0gICAgICAgICAgICAsIG1fZ2xvYmFsT2JqZWN0U2NvcGUoY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCksIGZ1bmN0aW9uLT5zY29wZSgpLT5nbG9iYWxPYmplY3QoKSkKKyAgICAgICAgICAgICwg
bV9nbG9iYWxPYmplY3RTY29wZShjYWxsRnJhbWUtPnZtKCksIGZ1bmN0aW9uLT5zY29wZSgpLT5n
bG9iYWxPYmplY3QoKSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKCFmdW5jdGlvbi0+
aXNIb3N0RnVuY3Rpb24oKSk7CiAgICAgICAgICAgICBtX2Nsb3N1cmUgPSBtX2ludGVycHJldGVy
LT5wcmVwYXJlRm9yUmVwZWF0Q2FsbChmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCksIGNhbGxGcmFt
ZSwgZnVuY3Rpb24sIGFyZ3VtZW50Q291bnQgKyAxLCBmdW5jdGlvbi0+c2NvcGUoKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZp
c2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZy
YW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICNkZWZpbmUgQ2FsbEZyYW1l
X2gKIAogI2luY2x1ZGUgIkFic3RyYWN0UEMuaCIKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIK
KyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIkpTU3RhY2suaCIKICNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3Rlci5oIgpAQCAtNjAsNDYgKzYwLDQ2
IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgLy8gdGhlIGFjdHVhbCBET00gd2luZG93LCB3
aGljaCBjYW4ndCBiZSAidGhpcyIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuCiAgICAgICAgIEpTT2Jq
ZWN0KiBnbG9iYWxUaGlzVmFsdWUoKSBjb25zdDsKIAotICAgICAgICBKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEoKSBjb25zdDsKKyAgICAgICAgVk0mIHZtKCkgY29uc3Q7CiAKICAgICAgICAgLy8g
Q29udmVuaWVuY2UgZnVuY3Rpb25zIGZvciBhY2Nlc3MgdG8gZ2xvYmFsIGRhdGEuCiAgICAgICAg
IC8vIEl0IHRha2VzIGEgZmV3IG1lbW9yeSByZWZlcmVuY2VzIHRvIGdldCBmcm9tIGEgY2FsbCBm
cmFtZSB0byB0aGUgZ2xvYmFsIGRhdGEKICAgICAgICAgLy8gcG9pbnRlciwgc28gdGhlc2UgYXJl
IGluZWZmaWNpZW50LCBhbmQgc2hvdWxkIGJlIHVzZWQgc3BhcmluZ2x5IGluIG5ldyBjb2RlLgog
ICAgICAgICAvLyBCdXQgdGhleSdyZSB1c2VkIGluIG1hbnkgcGxhY2VzIGluIGxlZ2FjeSBjb2Rl
LCBzbyB0aGV5J3JlIG5vdCBnb2luZyBhd2F5IGFueSB0aW1lIHNvb24uCiAKLSAgICAgICAgdm9p
ZCBjbGVhckV4Y2VwdGlvbigpIHsgZ2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IEpTVmFsdWUoKTsg
fQorICAgICAgICB2b2lkIGNsZWFyRXhjZXB0aW9uKCkgeyB2bSgpLmV4Y2VwdGlvbiA9IEpTVmFs
dWUoKTsgfQogICAgICAgICB2b2lkIGNsZWFyU3VwcGxlbWVudGFyeUV4Y2VwdGlvbkluZm8oKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBnbG9iYWxEYXRhKCkuZXhjZXB0aW9uU3RhY2sgPSBSZWZD
b3VudGVkQXJyYXk8U3RhY2tGcmFtZT4oKTsKKyAgICAgICAgICAgIHZtKCkuZXhjZXB0aW9uU3Rh
Y2sgPSBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4oKTsKICAgICAgICAgfQogCi0gICAgICAg
IEpTVmFsdWUgZXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gZ2xvYmFsRGF0YSgpLmV4Y2VwdGlv
bjsgfQotICAgICAgICBib29sIGhhZEV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIGdsb2JhbERh
dGEoKS5leGNlcHRpb247IH0KKyAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24oKSBjb25zdCB7IHJl
dHVybiB2bSgpLmV4Y2VwdGlvbjsgfQorICAgICAgICBib29sIGhhZEV4Y2VwdGlvbigpIGNvbnN0
IHsgcmV0dXJuIHZtKCkuZXhjZXB0aW9uOyB9CiAKLSAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRp
ZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiAqZ2xvYmFsRGF0YSgpLnByb3Bl
cnR5TmFtZXM7IH0KLSAgICAgICAgY29uc3QgTWFya2VkQXJndW1lbnRCdWZmZXImIGVtcHR5TGlz
dCgpIGNvbnN0IHsgcmV0dXJuICpnbG9iYWxEYXRhKCkuZW1wdHlMaXN0OyB9Ci0gICAgICAgIElu
dGVycHJldGVyKiBpbnRlcnByZXRlcigpIHsgcmV0dXJuIGdsb2JhbERhdGEoKS5pbnRlcnByZXRl
cjsgfQotICAgICAgICBIZWFwKiBoZWFwKCkgeyByZXR1cm4gJmdsb2JhbERhdGEoKS5oZWFwOyB9
CisgICAgICAgIGNvbnN0IENvbW1vbklkZW50aWZpZXJzJiBwcm9wZXJ0eU5hbWVzKCkgY29uc3Qg
eyByZXR1cm4gKnZtKCkucHJvcGVydHlOYW1lczsgfQorICAgICAgICBjb25zdCBNYXJrZWRBcmd1
bWVudEJ1ZmZlciYgZW1wdHlMaXN0KCkgY29uc3QgeyByZXR1cm4gKnZtKCkuZW1wdHlMaXN0OyB9
CisgICAgICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlcigpIHsgcmV0dXJuIHZtKCkuaW50ZXJw
cmV0ZXI7IH0KKyAgICAgICAgSGVhcCogaGVhcCgpIHsgcmV0dXJuICZ2bSgpLmhlYXA7IH0KICNp
Zm5kZWYgTkRFQlVHCiAgICAgICAgIHZvaWQgZHVtcENhbGxlcigpOwogI2VuZGlmCi0gICAgICAg
IHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGFycmF5Q29uc3RydWN0b3JUYWJsZShDYWxsRnJhbWUq
IGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuYXJyYXlDb25zdHJ1
Y3RvclRhYmxlOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGFycmF5UHJvdG90
eXBlVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpLmFycmF5UHJvdG90eXBlVGFibGU7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hU
YWJsZSogYm9vbGVhblByb3RvdHlwZVRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVy
biBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5ib29sZWFuUHJvdG90eXBlVGFibGU7IH0KLSAgICAg
ICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZGF0ZVRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1l
KSB7IHJldHVybiBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5kYXRlVGFibGU7IH0KLSAgICAgICAg
c3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZGF0ZUNvbnN0cnVjdG9yVGFibGUoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmRhdGVDb25zdHJ1Y3Rv
clRhYmxlOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGVycm9yUHJvdG90eXBl
VGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+Z2xvYmFsRGF0
YSgpLmVycm9yUHJvdG90eXBlVGFibGU7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJs
ZSogZ2xvYmFsT2JqZWN0VGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLmdsb2JhbE9iamVjdFRhYmxlOyB9Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBIYXNoVGFibGUqIGpzb25UYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4g
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuanNvblRhYmxlOyB9Ci0gICAgICAgIHN0YXRpYyBjb25z
dCBIYXNoVGFibGUqIG1hdGhUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2Fs
bEZyYW1lLT5nbG9iYWxEYXRhKCkubWF0aFRhYmxlOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBI
YXNoVGFibGUqIG51bWJlckNvbnN0cnVjdG9yVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsg
cmV0dXJuIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLm51bWJlckNvbnN0cnVjdG9yVGFibGU7IH0K
LSAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogbnVtYmVyUHJvdG90eXBlVGFibGUoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLm51bWJl
clByb3RvdHlwZVRhYmxlOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIG9iamVj
dENvbnN0cnVjdG9yVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLm9iamVjdENvbnN0cnVjdG9yVGFibGU7IH0KLSAgICAgICAgc3RhdGlj
IGNvbnN0IEhhc2hUYWJsZSogcHJpdmF0ZU5hbWVQcm90b3R5cGVUYWJsZShDYWxsRnJhbWUqIGNh
bGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkucHJpdmF0ZU5hbWVQcm90
b3R5cGVUYWJsZTsgfQotICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiByZWdFeHBUYWJs
ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCku
cmVnRXhwVGFibGU7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogcmVnRXhwQ29u
c3RydWN0b3JUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT5n
bG9iYWxEYXRhKCkucmVnRXhwQ29uc3RydWN0b3JUYWJsZTsgfQotICAgICAgICBzdGF0aWMgY29u
c3QgSGFzaFRhYmxlKiByZWdFeHBQcm90b3R5cGVUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkg
eyByZXR1cm4gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkucmVnRXhwUHJvdG90eXBlVGFibGU7IH0K
LSAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogc3RyaW5nQ29uc3RydWN0b3JUYWJsZShD
YWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuc3Ry
aW5nQ29uc3RydWN0b3JUYWJsZTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBh
cnJheUNvbnN0cnVjdG9yVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxG
cmFtZS0+dm0oKS5hcnJheUNvbnN0cnVjdG9yVGFibGU7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0
IEhhc2hUYWJsZSogYXJyYXlQcm90b3R5cGVUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyBy
ZXR1cm4gY2FsbEZyYW1lLT52bSgpLmFycmF5UHJvdG90eXBlVGFibGU7IH0KKyAgICAgICAgc3Rh
dGljIGNvbnN0IEhhc2hUYWJsZSogYm9vbGVhblByb3RvdHlwZVRhYmxlKENhbGxGcmFtZSogY2Fs
bEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuYm9vbGVhblByb3RvdHlwZVRhYmxlOyB9
CisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGRhdGVUYWJsZShDYWxsRnJhbWUqIGNh
bGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmRhdGVUYWJsZTsgfQorICAgICAgICBz
dGF0aWMgY29uc3QgSGFzaFRhYmxlKiBkYXRlQ29uc3RydWN0b3JUYWJsZShDYWxsRnJhbWUqIGNh
bGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmRhdGVDb25zdHJ1Y3RvclRhYmxlOyB9
CisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGVycm9yUHJvdG90eXBlVGFibGUoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5lcnJvclByb3RvdHlw
ZVRhYmxlOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGdsb2JhbE9iamVjdFRh
YmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuZ2xvYmFs
T2JqZWN0VGFibGU7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSoganNvblRhYmxl
KENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuanNvblRhYmxl
OyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIG1hdGhUYWJsZShDYWxsRnJhbWUq
IGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLm1hdGhUYWJsZTsgfQorICAgICAg
ICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBudW1iZXJDb25zdHJ1Y3RvclRhYmxlKENhbGxGcmFt
ZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkubnVtYmVyQ29uc3RydWN0b3JU
YWJsZTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBudW1iZXJQcm90b3R5cGVU
YWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLm51bWJl
clByb3RvdHlwZVRhYmxlOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIG9iamVj
dENvbnN0cnVjdG9yVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFt
ZS0+dm0oKS5vYmplY3RDb25zdHJ1Y3RvclRhYmxlOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBI
YXNoVGFibGUqIHByaXZhdGVOYW1lUHJvdG90eXBlVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
IHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5wcml2YXRlTmFtZVByb3RvdHlwZVRhYmxlOyB9Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIHJlZ0V4cFRhYmxlKENhbGxGcmFtZSogY2Fs
bEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkucmVnRXhwVGFibGU7IH0KKyAgICAgICAg
c3RhdGljIGNvbnN0IEhhc2hUYWJsZSogcmVnRXhwQ29uc3RydWN0b3JUYWJsZShDYWxsRnJhbWUq
IGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLnJlZ0V4cENvbnN0cnVjdG9yVGFi
bGU7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogcmVnRXhwUHJvdG90eXBlVGFi
bGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5yZWdFeHBQ
cm90b3R5cGVUYWJsZTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBzdHJpbmdD
b25zdHJ1Y3RvclRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUt
PnZtKCkuc3RyaW5nQ29uc3RydWN0b3JUYWJsZTsgfQogCiAgICAgICAgIHN0YXRpYyBDYWxsRnJh
bWUqIGNyZWF0ZShSZWdpc3RlciogY2FsbEZyYW1lQmFzZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
Q2FsbEZyYW1lKj4oY2FsbEZyYW1lQmFzZSk7IH0KICAgICAgICAgUmVnaXN0ZXIqIHJlZ2lzdGVy
cygpIHsgcmV0dXJuIHRoaXM7IH0KQEAgLTExMiw3ICsxMTIsNyBAQCBuYW1lc3BhY2UgSlNDICB7
CiAgICAgICAgIGJvb2wgaGFzUmV0dXJuUEMoKSBjb25zdCB7IHJldHVybiAhIXRoaXNbSlNTdGFj
azo6UmV0dXJuUENdLnZQQygpOyB9CiAgICAgICAgIHZvaWQgY2xlYXJSZXR1cm5QQygpIHsgcmVn
aXN0ZXJzKClbSlNTdGFjazo6UmV0dXJuUENdID0gc3RhdGljX2Nhc3Q8SW5zdHJ1Y3Rpb24qPigw
KTsgfQogI2VuZGlmCi0gICAgICAgIEFic3RyYWN0UEMgYWJzdHJhY3RSZXR1cm5QQyhKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpIHsgcmV0dXJuIEFic3RyYWN0UEMoZ2xvYmFsRGF0YSwgdGhpcyk7
IH0KKyAgICAgICAgQWJzdHJhY3RQQyBhYnN0cmFjdFJldHVyblBDKFZNJiB2bSkgeyByZXR1cm4g
QWJzdHJhY3RQQyh2bSwgdGhpcyk7IH0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICB1
bnNpZ25lZCBieXRlY29kZU9mZnNldEZvck5vbkRGR0NvZGUoKSBjb25zdDsKICAgICAgICAgdm9p
ZCBzZXRCeXRlY29kZU9mZnNldEZvck5vbkRGR0NvZGUodW5zaWduZWQgb2Zmc2V0KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVDbG9zdXJlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUNs
b3N1cmUuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhbGxGcmFtZUNsb3N1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBA
QCBzdHJ1Y3QgQ2FsbEZyYW1lQ2xvc3VyZSB7CiAgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWU7
CiAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb247CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5j
dGlvbkV4ZWN1dGFibGU7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhOworICAgIFZNKiB2
bTsKICAgICBKU1Njb3BlKiBzY29wZTsKICAgICBpbnQgcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdU
aGlzOwogICAgIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNp
b24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDcgKzE5OSw3IEBAIEludGVycHJldGVyOjpT
dGFja1BvbGljeTo6U3RhY2tQb2xpY3koSW4KIH0KIAogCi1zdGF0aWMgQ2FsbEZyYW1lKiBnZXRD
YWxsZXJJbmZvKEpTR2xvYmFsRGF0YSosIENhbGxGcmFtZSosIHVuc2lnbmVkJiBieXRlY29kZU9m
ZnNldCwgQ29kZUJsb2NrKiYgY2FsbGVyT3V0KTsKK3N0YXRpYyBDYWxsRnJhbWUqIGdldENhbGxl
ckluZm8oVk0qLCBDYWxsRnJhbWUqLCB1bnNpZ25lZCYgYnl0ZWNvZGVPZmZzZXQsIENvZGVCbG9j
ayomIGNhbGxlck91dCk7CiAKIC8vIFJldHVybnMgdGhlIGRlcHRoIG9mIHRoZSBzY29wZSBjaGFp
biB3aXRoaW4gYSBnaXZlbiBjYWxsIGZyYW1lLgogc3RhdGljIGludCBkZXB0aChDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSlNTY29wZSogc2MpCkBAIC0yMTgsNyArMjE4LDcgQEAgSlNWYWx1ZSBldmFs
KENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIGlmICghcHJvZ3JhbS5pc1N0cmluZygpKQogICAg
ICAgICByZXR1cm4gcHJvZ3JhbTsKICAgICAKLSAgICBUb3BDYWxsRnJhbWVTZXR0ZXIgdG9wQ2Fs
bEZyYW1lKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUpOworICAgIFRvcENhbGxG
cmFtZVNldHRlciB0b3BDYWxsRnJhbWUoY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUpOwogICAg
IFN0cmluZyBwcm9ncmFtU291cmNlID0gYXNTdHJpbmcocHJvZ3JhbSktPnZhbHVlKGNhbGxGcmFt
ZSk7CiAgICAgaWYgKGNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlKCk7CkBAIC0yNDQsNyArMjQ0LDcgQEAgSlNWYWx1ZSBldmFsKENhbGxGcmFtZSogY2Fs
bEZyYW1lKQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBJZiB0aGUgbGl0ZXJhbCBw
YXJzZXIgYmFpbGVkLCBpdCBzaG91bGQgbm90IGhhdmUgdGhyb3duIGV4Y2VwdGlvbnMuCi0gICAg
ICAgIEFTU0VSVCghY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uKTsKKyAgICAgICAg
QVNTRVJUKCFjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uKTsKIAogICAgICAgICBKU1ZhbHVlIGV4
Y2VwdGlvblZhbHVlOwogICAgICAgICBldmFsID0gY2FsbGVyQ29kZUJsb2NrLT5ldmFsQ29kZUNh
Y2hlKCkuZ2V0U2xvdyhjYWxsRnJhbWUsIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIGNhbGxlckNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCksIHByb2dyYW1Tb3VyY2UsIGNhbGxl
clNjb3BlQ2hhaW4sIGV4Y2VwdGlvblZhbHVlKTsKQEAgLTI1Niw3ICsyNTYsNyBAQCBKU1ZhbHVl
IGV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNh
bGxlckZyYW1lLT50aGlzVmFsdWUoKTsKICAgICBBU1NFUlQoaXNWYWxpZFRoaXNPYmplY3QodGhp
c1ZhbHVlLCBjYWxsRnJhbWUpKTsKLSAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBjYWxs
RnJhbWUtPmdsb2JhbERhdGEoKS5pbnRlcnByZXRlcjsKKyAgICBJbnRlcnByZXRlciogaW50ZXJw
cmV0ZXIgPSBjYWxsRnJhbWUtPnZtKCkuaW50ZXJwcmV0ZXI7CiAgICAgcmV0dXJuIGludGVycHJl
dGVyLT5leGVjdXRlKGV2YWwsIGNhbGxGcmFtZSwgdGhpc1ZhbHVlLCBjYWxsZXJTY29wZUNoYWlu
KTsKIH0KIApAQCAtMjY2LDcgKzI2Niw3IEBAIENhbGxGcmFtZSogbG9hZFZhcmFyZ3MoQ2FsbEZy
YW1lKiBjYWxsRnIKICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
PSBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCk7CiAgICAgICAgIENhbGxG
cmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3Rl
cnMoKSArIGZpcnN0RnJlZVJlZ2lzdGVyICsgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBK
U1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplKTsKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzID4gQXJndW1lbnRzOjpNYXhBcmd1bWVudHMgKyAxIHx8ICFzdGFjay0+Z3Jv
dyhuZXdDYWxsRnJhbWUtPnJlZ2lzdGVycygpKSkgewotICAgICAgICAgICAgY2FsbEZyYW1lLT5n
bG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFt
ZSk7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tP
dmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
fQogCkBAIC0yODAsNyArMjgwLDcgQEAgQ2FsbEZyYW1lKiBsb2FkVmFyYXJncyhDYWxsRnJhbWUq
IGNhbGxGcgogICAgIGlmIChhcmd1bWVudHMuaXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAg
ICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKGNhbGxGcmFtZS0+
cmVnaXN0ZXJzKCkgKyBmaXJzdEZyZWVSZWdpc3RlciArIDEgKyBKU1N0YWNrOjpDYWxsRnJhbWVI
ZWFkZXJTaXplKTsKICAgICAgICAgaWYgKCFzdGFjay0+Z3JvdyhuZXdDYWxsRnJhbWUtPnJlZ2lz
dGVycygpKSkgewotICAgICAgICAgICAgY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9u
ID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CisgICAgICAgICAgICBjYWxs
RnJhbWUtPnZtKCkuZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFt
ZSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICBuZXdDYWxsRnJh
bWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKDEpOwpAQCAtMjg5LDcgKzI4OSw3IEBA
IENhbGxGcmFtZSogbG9hZFZhcmFyZ3MoQ2FsbEZyYW1lKiBjYWxsRnIKICAgICB9CiAKICAgICBp
ZiAoIWFyZ3VtZW50cy5pc09iamVjdCgpKSB7Ci0gICAgICAgIGNhbGxGcmFtZS0+Z2xvYmFsRGF0
YSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKGNhbGxGcmFtZSwgIkZ1bmN0
aW9uLnByb3RvdHlwZS5hcHBseSIsIGFyZ3VtZW50cyk7CisgICAgICAgIGNhbGxGcmFtZS0+dm0o
KS5leGNlcHRpb24gPSBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihjYWxsRnJhbWUsICJGdW5jdGlv
bi5wcm90b3R5cGUuYXBwbHkiLCBhcmd1bWVudHMpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAKQEAgLTI5OCw3ICsyOTgsNyBAQCBDYWxsRnJhbWUqIGxvYWRWYXJhcmdzKENhbGxGcmFtZSog
Y2FsbEZyCiAgICAgICAgIHVuc2lnbmVkIGFyZ0NvdW50ID0gYXJnc09iamVjdC0+bGVuZ3RoKGNh
bGxGcmFtZSk7CiAgICAgICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpj
cmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIGZpcnN0RnJlZVJlZ2lzdGVyICsgQ2FsbEZy
YW1lOjpvZmZzZXRGb3IoYXJnQ291bnQgKyAxKSk7CiAgICAgICAgIGlmIChhcmdDb3VudCA+IEFy
Z3VtZW50czo6TWF4QXJndW1lbnRzIHx8ICFzdGFjay0+Z3JvdyhuZXdDYWxsRnJhbWUtPnJlZ2lz
dGVycygpKSkgewotICAgICAgICAgICAgY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9u
ID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CisgICAgICAgICAgICBjYWxs
RnJhbWUtPnZtKCkuZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFt
ZSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICBuZXdDYWxsRnJh
bWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGFyZ0NvdW50ICsgMSk7CkBAIC0zMTIs
NyArMzEyLDcgQEAgQ2FsbEZyYW1lKiBsb2FkVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxGcgogICAg
ICAgICB1bnNpZ25lZCBhcmdDb3VudCA9IGFycmF5LT5sZW5ndGgoKTsKICAgICAgICAgQ2FsbEZy
YW1lKiBuZXdDYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUtPnJlZ2lzdGVy
cygpICsgZmlyc3RGcmVlUmVnaXN0ZXIgKyBDYWxsRnJhbWU6Om9mZnNldEZvcihhcmdDb3VudCAr
IDEpKTsKICAgICAgICAgaWYgKGFyZ0NvdW50ID4gQXJndW1lbnRzOjpNYXhBcmd1bWVudHMgfHwg
IXN0YWNrLT5ncm93KG5ld0NhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpKSB7Ci0gICAgICAgICAgICBj
YWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJy
b3IoY2FsbEZyYW1lKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24gPSBj
cmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKICAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICB9CiAgICAgICAgIG5ld0NhbGxGcmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMoYXJnQ291bnQgKyAxKTsKQEAgLTMyNSwyMiArMzI1LDIyIEBAIENhbGxGcmFtZSog
bG9hZFZhcmFyZ3MoQ2FsbEZyYW1lKiBjYWxsRnIKICAgICB1bnNpZ25lZCBhcmdDb3VudCA9IGFy
Z09iamVjdC0+Z2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
KS50b1VJbnQzMihjYWxsRnJhbWUpOwogICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2Fs
bEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIGZpcnN0RnJlZVJlZ2lzdGVy
ICsgQ2FsbEZyYW1lOjpvZmZzZXRGb3IoYXJnQ291bnQgKyAxKSk7CiAgICAgaWYgKGFyZ0NvdW50
ID4gQXJndW1lbnRzOjpNYXhBcmd1bWVudHMgfHwgIXN0YWNrLT5ncm93KG5ld0NhbGxGcmFtZS0+
cmVnaXN0ZXJzKCkpKSB7Ci0gICAgICAgIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlv
biA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOworICAgICAgICBjYWxsRnJh
bWUtPnZtKCkuZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBuZXdDYWxsRnJhbWUtPnNldEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKGFyZ0NvdW50ICsgMSk7CiAgICAgbmV3Q2FsbEZyYW1lLT5zZXRU
aGlzVmFsdWUodGhpc1ZhbHVlKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50
OyArK2kpIHsKICAgICAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCBhc09iamVjdChh
cmd1bWVudHMpLT5nZXQoY2FsbEZyYW1lLCBpKSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShjYWxs
RnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb24pKQorICAgICAgICBpZiAoVU5MSUtFTFkoY2Fs
bEZyYW1lLT52bSgpLmV4Y2VwdGlvbikpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAg
ICAgcmV0dXJuIG5ld0NhbGxGcmFtZTsKIH0KIAotSW50ZXJwcmV0ZXI6OkludGVycHJldGVyKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK0ludGVycHJldGVyOjpJbnRlcnByZXRlcihWTSYgdm0p
CiAgICAgOiBtX3NhbXBsZUVudHJ5RGVwdGgoMCkKLSAgICAsIG1fc3RhY2soZ2xvYmFsRGF0YSkK
KyAgICAsIG1fc3RhY2sodm0pCiAgICAgLCBtX2Vycm9ySGFuZGxpbmdNb2RlUmVlbnRyeSgwKQog
I2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAsIG1faW5pdGlhbGl6ZWQoZmFsc2UpCkBAIC00MTYs
MTQgKzQxNiwxNCBAQCB2b2lkIEludGVycHJldGVyOjpkdW1wUmVnaXN0ZXJzKENhbGxGcmFtCiAg
ICAgZGF0YUxvZ0YoIltTY29wZUNoYWluXSAgICAgICAgICAgICAgIHwgJTEwcCB8ICVwIFxuIiwg
aXQsIGNhbGxGcmFtZS0+c2NvcGUoKSk7CiAgICAgKytpdDsKICNpZiBFTkFCTEUoSklUKQotICAg
IEFic3RyYWN0UEMgcGMgPSBjYWxsRnJhbWUtPmFic3RyYWN0UmV0dXJuUEMoY2FsbEZyYW1lLT5n
bG9iYWxEYXRhKCkpOworICAgIEFic3RyYWN0UEMgcGMgPSBjYWxsRnJhbWUtPmFic3RyYWN0UmV0
dXJuUEMoY2FsbEZyYW1lLT52bSgpKTsKICAgICBpZiAocGMuaGFzSklUUmV0dXJuQWRkcmVzcygp
KQogICAgICAgICBkYXRhTG9nRigiW1JldHVybkpJVFBDXSAgICAgICAgICAgICAgfCAlMTBwIHwg
JXAgXG4iLCBpdCwgcGMuaml0UmV0dXJuQWRkcmVzcygpLnZhbHVlKCkpOwogI2VuZGlmCiAgICAg
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOwogICAgIGludCBsaW5lID0gMDsKICAgICBDb2Rl
QmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IDA7Ci0gICAgZ2V0Q2FsbGVySW5mbygmY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZSwgYnl0ZWNvZGVPZmZzZXQsIGNhbGxlckNvZGVCbG9j
ayk7CisgICAgZ2V0Q2FsbGVySW5mbygmY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUsIGJ5dGVj
b2RlT2Zmc2V0LCBjYWxsZXJDb2RlQmxvY2spOwogICAgIGxpbmUgPSBjYWxsZXJDb2RlQmxvY2st
PmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCk7CiAgICAgZGF0YUxv
Z0YoIltSZXR1cm5WUENdICAgICAgICAgICAgICAgIHwgJTEwcCB8ICVkIChsaW5lICVkKVxuIiwg
aXQsIGJ5dGVjb2RlT2Zmc2V0LCBsaW5lKTsKICAgICArK2l0OwpAQCAtNDkyLDcgKzQ5Miw3IEBA
IE5FVkVSX0lOTElORSBib29sIEludGVycHJldGVyOjp1bndpbmRDYWwKICAgICBpZiAob2xkQ29k
ZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBvbGRDb2RlQmxvY2stPm5lZWRz
QWN0aXZhdGlvbigpKSB7CiAgICAgICAgIGFjdGl2YXRpb24gPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIob2xkQ29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkuanNWYWx1ZSgpOwogICAgICAg
ICBpZiAoYWN0aXZhdGlvbikKLSAgICAgICAgICAgIGpzQ2FzdDxKU0FjdGl2YXRpb24qPihhY3Rp
dmF0aW9uKS0+dGVhck9mZigqc2NvcGUtPmdsb2JhbERhdGEoKSk7CisgICAgICAgICAgICBqc0Nh
c3Q8SlNBY3RpdmF0aW9uKj4oYWN0aXZhdGlvbiktPnRlYXJPZmYoKnNjb3BlLT52bSgpKTsKICAg
ICB9CiAKICAgICBpZiAob2xkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAm
JiBvbGRDb2RlQmxvY2stPnVzZXNBcmd1bWVudHMoKSkgewpAQCAtNTA1LDEwICs1MDUsMTAgQEAg
TkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnVud2luZENhbAogICAgIH0KIAogICAgIENh
bGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgY2Fs
bEZyYW1lLT5nbG9iYWxEYXRhKCkudG9wQ2FsbEZyYW1lID0gY2FsbGVyRnJhbWU7CisgICAgY2Fs
bEZyYW1lLT52bSgpLnRvcENhbGxGcmFtZSA9IGNhbGxlckZyYW1lOwogICAgIGlmIChjYWxsZXJG
cmFtZS0+aGFzSG9zdENhbGxGcmFtZUZsYWcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGNhbGxGcmFtZSA9IGdldENhbGxlckluZm8oJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxs
RnJhbWUsIGJ5dGVjb2RlT2Zmc2V0LCBjb2RlQmxvY2spOworICAgIGNhbGxGcmFtZSA9IGdldENh
bGxlckluZm8oJmNhbGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1lLCBieXRlY29kZU9mZnNldCwgY29k
ZUJsb2NrKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNTMzLDggKzUzMyw4IEBAIHN0YXRp
YyB2b2lkIGFwcGVuZFNvdXJjZVRvRXJyb3IoQ2FsbEZyYW0KICAgICBpZiAoIWV4cHJlc3Npb25T
dG9wIHx8IGV4cHJlc3Npb25TdGFydCA+IHN0YXRpY19jYXN0PGludD4oc291cmNlU3RyaW5nLmxl
bmd0aCgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpOwotICAgIEpTVmFsdWUganNNZXNzYWdlID0gZXhj
ZXB0aW9uLT5nZXREaXJlY3QoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMt
Pm1lc3NhZ2UpOworICAgIFZNKiB2bSA9ICZjYWxsRnJhbWUtPnZtKCk7CisgICAgSlNWYWx1ZSBq
c01lc3NhZ2UgPSBleGNlcHRpb24tPmdldERpcmVjdCgqdm0sIHZtLT5wcm9wZXJ0eU5hbWVzLT5t
ZXNzYWdlKTsKICAgICBpZiAoIWpzTWVzc2FnZSB8fCAhanNNZXNzYWdlLmlzU3RyaW5nKCkpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtNTYxLDcgKzU2MSw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFNv
dXJjZVRvRXJyb3IoQ2FsbEZyYW0KICAgICAgICAgbWVzc2FnZSA9IG1ha2VTdHJpbmcobWVzc2Fn
ZSwgIiAobmVhciAnLi4uIiwgY29kZUJsb2NrLT5zb3VyY2UoKS0+Z2V0UmFuZ2Uoc3RhcnQsIHN0
b3ApLCAiLi4uJykiKTsKICAgICB9CiAKLSAgICBleGNlcHRpb24tPnB1dERpcmVjdCgqZ2xvYmFs
RGF0YSwgZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+bWVzc2FnZSwganNTdHJpbmcoZ2xvYmFs
RGF0YSwgbWVzc2FnZSkpOworICAgIGV4Y2VwdGlvbi0+cHV0RGlyZWN0KCp2bSwgdm0tPnByb3Bl
cnR5TmFtZXMtPm1lc3NhZ2UsIGpzU3RyaW5nKHZtLCBtZXNzYWdlKSk7CiB9CiAKIHN0YXRpYyB1
bnNpZ25lZCBnZXRCeXRlY29kZU9mZnNldEZvckNhbGxGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKQEAgLTU4MSw5ICs1ODEsOSBAQCBzdGF0aWMgdW5zaWduZWQgZ2V0Qnl0ZWNvZGVPZmZzZXRG
b3JDYWxsCiAjZW5kaWYKIH0KIAotc3RhdGljIENhbGxGcmFtZSogZ2V0Q2FsbGVySW5mbyhKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIENhbGxGcmFtZSogY2FsbEZyYW1lLCB1bnNpZ25lZCYgYnl0
ZWNvZGVPZmZzZXQsIENvZGVCbG9jayomIGNhbGxlcikKK3N0YXRpYyBDYWxsRnJhbWUqIGdldENh
bGxlckluZm8oVk0qIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdW5zaWduZWQmIGJ5dGVjb2Rl
T2Zmc2V0LCBDb2RlQmxvY2sqJiBjYWxsZXIpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChnbG9iYWxE
YXRhLCBnbG9iYWxEYXRhKTsKKyAgICBBU1NFUlRfVU5VU0VEKHZtLCB2bSk7CiAgICAgYnl0ZWNv
ZGVPZmZzZXQgPSAwOwogICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYXNIb3N0Q2FsbEZyYW1lRmxh
ZygpKTsKICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jb2RlQmxvY2so
KSA/IGNhbGxGcmFtZS0+dHJ1ZUNhbGxlckZyYW1lKCkgOiBjYWxsRnJhbWUtPmNhbGxlckZyYW1l
KCktPnJlbW92ZUhvc3RDYWxsRnJhbWVGbGFnKCk7CkBAIC03MTksOSArNzE5LDkgQEAgU3RyaW5n
IFN0YWNrRnJhbWU6OnRvU3RyaW5nKENhbGxGcmFtZSogYwogICAgIHJldHVybiB0cmFjZUJ1aWxk
LnRvU3RyaW5nKCkuaW1wbCgpOwogfQogCi12b2lkIEludGVycHJldGVyOjpnZXRTdGFja1RyYWNl
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVmVjdG9yPFN0YWNrRnJhbWU+JiByZXN1bHRzLCBz
aXplX3QgbWF4U3RhY2tTaXplKQordm9pZCBJbnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFjZShWTSog
dm0sIFZlY3RvcjxTdGFja0ZyYW1lPiYgcmVzdWx0cywgc2l6ZV90IG1heFN0YWNrU2l6ZSkKIHsK
LSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGdsb2JhbERhdGEtPnRvcENhbGxGcmFtZS0+cmVt
b3ZlSG9zdENhbGxGcmFtZUZsYWcoKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHZtLT50
b3BDYWxsRnJhbWUtPnJlbW92ZUhvc3RDYWxsRnJhbWVGbGFnKCk7CiAgICAgaWYgKCFjYWxsRnJh
bWUgfHwgY2FsbEZyYW1lID09IENhbGxGcmFtZTo6bm9DYWxsZXIoKSkgCiAgICAgICAgIHJldHVy
bjsKICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGdldEJ5dGVjb2RlT2Zmc2V0Rm9yQ2Fs
bEZyYW1lKGNhbGxGcmFtZSk7CkBAIC03MzUsMTAgKzczNSwxMCBAQCB2b2lkIEludGVycHJldGVy
OjpnZXRTdGFja1RyYWNlKEpTR2xvYmFsCiAgICAgICAgIGlmIChjYWxsZXJDb2RlQmxvY2spIHsK
ICAgICAgICAgICAgIHNvdXJjZVVSTCA9IGdldFNvdXJjZVVSTEZyb21DYWxsRnJhbWUoY2FsbEZy
YW1lKTsKICAgICAgICAgICAgIFN0YWNrRnJhbWUgcyA9IHsKLSAgICAgICAgICAgICAgICBTdHJv
bmc8SlNPYmplY3Q+KCpnbG9iYWxEYXRhLCBjYWxsRnJhbWUtPmNhbGxlZSgpKSwKKyAgICAgICAg
ICAgICAgICBTdHJvbmc8SlNPYmplY3Q+KCp2bSwgY2FsbEZyYW1lLT5jYWxsZWUoKSksCiAgICAg
ICAgICAgICAgICAgZ2V0U3RhY2tGcmFtZUNvZGVUeXBlKGNhbGxGcmFtZSksCi0gICAgICAgICAg
ICAgICAgU3Ryb25nPEV4ZWN1dGFibGVCYXNlPigqZ2xvYmFsRGF0YSwgY2FsbGVyQ29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSksCi0gICAgICAgICAgICAgICAgU3Ryb25nPFVubGlua2VkQ29k
ZUJsb2NrPigqZ2xvYmFsRGF0YSwgY2FsbGVyQ29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygp
KSwKKyAgICAgICAgICAgICAgICBTdHJvbmc8RXhlY3V0YWJsZUJhc2U+KCp2bSwgY2FsbGVyQ29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSksCisgICAgICAgICAgICAgICAgU3Ryb25nPFVubGlu
a2VkQ29kZUJsb2NrPigqdm0sIGNhbGxlckNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSks
CiAgICAgICAgICAgICAgICAgY2FsbGVyQ29kZUJsb2NrLT5zb3VyY2UoKSwKICAgICAgICAgICAg
ICAgICBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5saW5lTm8oKSwKICAgICAg
ICAgICAgICAgICBjYWxsZXJDb2RlQmxvY2stPnNvdXJjZU9mZnNldCgpLApAQCAtNzQ3LDI4ICs3
NDcsMjggQEAgdm9pZCBJbnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFjZShKU0dsb2JhbAogICAgICAg
ICAgICAgfTsKICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHMpOwogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgU3RhY2tGcmFtZSBzID0geyBTdHJvbmc8SlNPYmplY3Q+KCpnbG9iYWxE
YXRhLCBjYWxsRnJhbWUtPmNhbGxlZSgpKSwgU3RhY2tGcmFtZU5hdGl2ZUNvZGUsIFN0cm9uZzxF
eGVjdXRhYmxlQmFzZT4oKSwgU3Ryb25nPFVubGlua2VkQ29kZUJsb2NrPigpLCAwLCAwLCAwLCAw
LCBTdHJpbmcoKX07CisgICAgICAgICAgICBTdGFja0ZyYW1lIHMgPSB7IFN0cm9uZzxKU09iamVj
dD4oKnZtLCBjYWxsRnJhbWUtPmNhbGxlZSgpKSwgU3RhY2tGcmFtZU5hdGl2ZUNvZGUsIFN0cm9u
ZzxFeGVjdXRhYmxlQmFzZT4oKSwgU3Ryb25nPFVubGlua2VkQ29kZUJsb2NrPigpLCAwLCAwLCAw
LCAwLCBTdHJpbmcoKX07CiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChzKTsKICAgICAgICAg
fQotICAgICAgICBjYWxsRnJhbWUgPSBnZXRDYWxsZXJJbmZvKGdsb2JhbERhdGEsIGNhbGxGcmFt
ZSwgYnl0ZWNvZGVPZmZzZXQsIGNhbGxlckNvZGVCbG9jayk7CisgICAgICAgIGNhbGxGcmFtZSA9
IGdldENhbGxlckluZm8odm0sIGNhbGxGcmFtZSwgYnl0ZWNvZGVPZmZzZXQsIGNhbGxlckNvZGVC
bG9jayk7CiAgICAgfQogfQogCiB2b2lkIEludGVycHJldGVyOjphZGRTdGFja1RyYWNlSWZOZWNl
c3NhcnkoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgZXJyb3IpCiB7Ci0gICAgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhID0gJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpOwotICAgIEFTU0VS
VChjYWxsRnJhbWUgPT0gZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lIHx8IGNhbGxGcmFtZSA9PSBj
YWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpIHx8IGNhbGxGcmFt
ZSA9PSBjYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsKKyAg
ICBWTSogdm0gPSAmY2FsbEZyYW1lLT52bSgpOworICAgIEFTU0VSVChjYWxsRnJhbWUgPT0gdm0t
PnRvcENhbGxGcmFtZSB8fCBjYWxsRnJhbWUgPT0gY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbEV4ZWMoKSB8fCBjYWxsRnJhbWUgPT0gY2FsbEZyYW1lLT5keW5hbWljR2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7CiAKICAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3Rh
Y2tUcmFjZTsKLSAgICBnZXRTdGFja1RyYWNlKCZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgc3Rh
Y2tUcmFjZSk7Ci0gICAgZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uU3RhY2sgPSBSZWZDb3VudGVkQXJy
YXk8U3RhY2tGcmFtZT4oc3RhY2tUcmFjZSk7CisgICAgZ2V0U3RhY2tUcmFjZSgmY2FsbEZyYW1l
LT52bSgpLCBzdGFja1RyYWNlKTsKKyAgICB2bS0+ZXhjZXB0aW9uU3RhY2sgPSBSZWZDb3VudGVk
QXJyYXk8U3RhY2tGcmFtZT4oc3RhY2tUcmFjZSk7CiAgICAgaWYgKHN0YWNrVHJhY2UuaXNFbXB0
eSgpIHx8ICFlcnJvci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBKU09iamVj
dCogZXJyb3JPYmplY3QgPSBhc09iamVjdChlcnJvcik7CiAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IDA7CiAgICAgaWYgKGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihl
cnJvcikpCi0gICAgICAgIGdsb2JhbE9iamVjdCA9IGdsb2JhbERhdGEtPmR5bmFtaWNHbG9iYWxP
YmplY3Q7CisgICAgICAgIGdsb2JhbE9iamVjdCA9IHZtLT5keW5hbWljR2xvYmFsT2JqZWN0Owog
ICAgIGVsc2UKICAgICAgICAgZ2xvYmFsT2JqZWN0ID0gZXJyb3JPYmplY3QtPmdsb2JhbE9iamVj
dCgpOwogCkBAIC03ODAsOSArNzgwLDkgQEAgdm9pZCBJbnRlcnByZXRlcjo6YWRkU3RhY2tUcmFj
ZUlmTmVjZXNzYQogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAgICAgfQogCi0g
ICAgaWYgKGVycm9yT2JqZWN0LT5oYXNQcm9wZXJ0eShjYWxsRnJhbWUsIGdsb2JhbERhdGEtPnBy
b3BlcnR5TmFtZXMtPnN0YWNrKSkKKyAgICBpZiAoZXJyb3JPYmplY3QtPmhhc1Byb3BlcnR5KGNh
bGxGcmFtZSwgdm0tPnByb3BlcnR5TmFtZXMtPnN0YWNrKSkKICAgICAgICAgcmV0dXJuOwotICAg
IGVycm9yT2JqZWN0LT5wdXREaXJlY3QoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnByb3BlcnR5
TmFtZXMtPnN0YWNrLCBqc1N0cmluZyhnbG9iYWxEYXRhLCBidWlsZGVyLnRvU3RyaW5nKCkpLCBS
ZWFkT25seSB8IERvbnREZWxldGUpOworICAgIGVycm9yT2JqZWN0LT5wdXREaXJlY3QoKnZtLCB2
bS0+cHJvcGVydHlOYW1lcy0+c3RhY2ssIGpzU3RyaW5nKHZtLCBidWlsZGVyLnRvU3RyaW5nKCkp
LCBSZWFkT25seSB8IERvbnREZWxldGUpOwogfQogCiBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8q
IEludGVycHJldGVyOjp0aHJvd0V4Y2VwdGlvbihDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEpTVmFs
dWUmIGV4Y2VwdGlvblZhbHVlLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKQEAgLTgxMiwxMCAr
ODEyLDEwIEBAIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnQKIAogICAg
ICAgICBpc1Rlcm1pbmF0aW9uID0gaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4Y2Vw
dGlvbik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFjYWxsRnJhbWUtPmdsb2JhbERhdGEo
KS5leGNlcHRpb25TdGFjay5zaXplKCkpIHsKKyAgICAgICAgaWYgKCFjYWxsRnJhbWUtPnZtKCku
ZXhjZXB0aW9uU3RhY2suc2l6ZSgpKSB7CiAgICAgICAgICAgICBWZWN0b3I8U3RhY2tGcmFtZT4g
c3RhY2s7Ci0gICAgICAgICAgICBJbnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFjZSgmY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCksIHN0YWNrKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+Z2xvYmFsRGF0
YSgpLmV4Y2VwdGlvblN0YWNrID0gUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+KHN0YWNrKTsK
KyAgICAgICAgICAgIEludGVycHJldGVyOjpnZXRTdGFja1RyYWNlKCZjYWxsRnJhbWUtPnZtKCks
IHN0YWNrKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb25TdGFjayA9IFJl
ZkNvdW50ZWRBcnJheTxTdGFja0ZyYW1lPihzdGFjayk7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTgyOSwxMyArODI5LDEzIEBAIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6
OnQKICAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9IDA7CiAgICAgd2hpbGUgKGlzVGVybWluYXRp
b24gfHwgIShoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0
ZWNvZGVPZmZzZXQpKSkgewogICAgICAgICBpZiAoIXVud2luZENhbGxGcmFtZShjYWxsRnJhbWUs
IGV4Y2VwdGlvblZhbHVlLCBieXRlY29kZU9mZnNldCwgY29kZUJsb2NrKSkgewotICAgICAgICAg
ICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
LmVuYWJsZWRQcm9maWxlcigpKQorICAgICAgICAgICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9m
aWxlciA9IGNhbGxGcmFtZS0+dm0oKS5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgICAgICAg
ICBwcm9maWxlci0+ZXhjZXB0aW9uVW53aW5kKGNhbGxGcmFtZSk7CiAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmls
ZXIgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5lbmFibGVkUHJvZmlsZXIoKSkKKyAgICBpZiAo
TGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gY2FsbEZyYW1lLT52bSgpLmVuYWJsZWRQcm9maWxl
cigpKQogICAgICAgICBwcm9maWxlci0+ZXhjZXB0aW9uVW53aW5kKGNhbGxGcmFtZSk7CiAKICAg
ICAvLyBVbndpbmQgdGhlIHNjb3BlIGNoYWluIHdpdGhpbiB0aGUgZXhjZXB0aW9uIGhhbmRsZXIn
cyBjYWxsIGZyYW1lLgpAQCAtODg3LDEyICs4ODcsMTIgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6
ZXhlY3V0ZShQcm9ncmFtRXhlYwogICAgIFNhbXBsaW5nU2NvcGUgc2FtcGxpbmdTY29wZSh0aGlz
KTsKICAgICAKICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKLSAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSAqc2NvcGUtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYg
dm0gPSAqc2NvcGUtPnZtKCk7CiAKICAgICBBU1NFUlQoaXNWYWxpZFRoaXNPYmplY3QodGhpc09i
aiwgY2FsbEZyYW1lKSk7Ci0gICAgQVNTRVJUKCFnbG9iYWxEYXRhLmV4Y2VwdGlvbik7Ci0gICAg
QVNTRVJUKCFnbG9iYWxEYXRhLmlzQ29sbGVjdG9yQnVzeSgpKTsKLSAgICBpZiAoZ2xvYmFsRGF0
YS5pc0NvbGxlY3RvckJ1c3koKSkKKyAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbik7CisgICAgQVNT
RVJUKCF2bS5pc0NvbGxlY3RvckJ1c3koKSk7CisgICAgaWYgKHZtLmlzQ29sbGVjdG9yQnVzeSgp
KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKICAgICBTdGFja1N0YXRzOjpDaGVja1BvaW50
IHN0YWNrQ2hlY2tQb2ludDsKQEAgLTkwNCw3ICs5MDQsNyBAQCBKU1ZhbHVlIEludGVycHJldGVy
OjpleGVjdXRlKFByb2dyYW1FeGVjCiAgICAgLy8gRmlyc3QgY2hlY2sgaWYgdGhlICJwcm9ncmFt
IiBpcyBhY3R1YWxseSBqdXN0IGEgSlNPTiBvYmplY3QuIElmIHNvLAogICAgIC8vIHdlJ2xsIGhh
bmRsZSB0aGUgSlNPTiBvYmplY3QgaGVyZS4gRWxzZSwgd2UnbGwgaGFuZGxlIHJlYWwgSlMgY29k
ZQogICAgIC8vIGJlbG93IGF0IGZhaWxlZEpTT05QLgotICAgIER5bmFtaWNHbG9iYWxPYmplY3RT
Y29wZSBnbG9iYWxPYmplY3RTY29wZShnbG9iYWxEYXRhLCBzY29wZS0+Z2xvYmFsT2JqZWN0KCkp
OworICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZSh2bSwgc2Nv
cGUtPmdsb2JhbE9iamVjdCgpKTsKICAgICBWZWN0b3I8SlNPTlBEYXRhPiBKU09OUERhdGE7CiAg
ICAgYm9vbCBwYXJzZVJlc3VsdDsKICAgICBjb25zdCBTdHJpbmcgcHJvZ3JhbVNvdXJjZSA9IHBy
b2dyYW0tPnNvdXJjZSgpLnRvU3RyaW5nKCk7CkBAIC0xMDA4LDcgKzEwMDgsNyBAQCBmYWlsZWRK
U09OUDoKICAgICAvLyBvYmplY3QuCiAKICAgICAvLyBDb21waWxlIHNvdXJjZSB0byBieXRlY29k
ZSBpZiBuZWNlc3Nhcnk6Ci0gICAgaWYgKEpTT2JqZWN0KiBlcnJvciA9IHByb2dyYW0tPmluaXRp
YWxpemVHbG9iYWxQcm9wZXJ0aWVzKGdsb2JhbERhdGEsIGNhbGxGcmFtZSwgc2NvcGUpKQorICAg
IGlmIChKU09iamVjdCogZXJyb3IgPSBwcm9ncmFtLT5pbml0aWFsaXplR2xvYmFsUHJvcGVydGll
cyh2bSwgY2FsbEZyYW1lLCBzY29wZSkpCiAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRo
cm93RXJyb3IoY2FsbEZyYW1lLCBlcnJvcikpOwogCiAgICAgaWYgKEpTT2JqZWN0KiBlcnJvciA9
IHByb2dyYW0tPmNvbXBpbGUoY2FsbEZyYW1lLCBzY29wZSkpCkBAIC0xMDI1LDI0ICsxMDI1LDI0
IEBAIGZhaWxlZEpTT05QOgogICAgIC8vIFNldCB0aGUgYXJndW1lbnRzIGZvciB0aGUgY2FsbGVl
OgogICAgIG5ld0NhbGxGcmFtZS0+c2V0VGhpc1ZhbHVlKHRoaXNPYmopOwogCi0gICAgaWYgKExl
Z2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IGdsb2JhbERhdGEuZW5hYmxlZFByb2ZpbGVyKCkpCisg
ICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IHZtLmVuYWJsZWRQcm9maWxlcigpKQog
ICAgICAgICBwcm9maWxlci0+d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBwcm9ncmFtLT5zb3VyY2VV
UkwoKSwgcHJvZ3JhbS0+bGluZU5vKCkpOwogCiAgICAgLy8gRXhlY3V0ZSB0aGUgY29kZToKICAg
ICBKU1ZhbHVlIHJlc3VsdDsKLSAgICBpZiAoTElLRUxZKCFnbG9iYWxEYXRhLndhdGNoZG9nLmRp
ZEZpcmUobmV3Q2FsbEZyYW1lKSkpIHsKKyAgICBpZiAoTElLRUxZKCF2bS53YXRjaGRvZy5kaWRG
aXJlKG5ld0NhbGxGcmFtZSkpKSB7CiAgICAgICAgIFNhbXBsaW5nVG9vbDo6Q2FsbFJlY29yZCBj
YWxsUmVjb3JkKG1fc2FtcGxlci5nZXQoKSk7Ci0gICAgICAgIFdhdGNoZG9nOjpTY29wZSB3YXRj
aGRvZ1Njb3BlKGdsb2JhbERhdGEud2F0Y2hkb2cpOworICAgICAgICBXYXRjaGRvZzo6U2NvcGUg
d2F0Y2hkb2dTY29wZSh2bS53YXRjaGRvZyk7CiAKICNpZiBFTkFCTEUoTExJTlRfQ19MT09QKQog
ICAgICAgICByZXN1bHQgPSBMTEludDo6Q0xvb3A6OmV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBsbGlu
dF9wcm9ncmFtX3Byb2xvZ3VlKTsKICNlbGlmIEVOQUJMRShKSVQpCi0gICAgICAgIHJlc3VsdCA9
IHByb2dyYW0tPmdlbmVyYXRlZEpJVENvZGUoKS5leGVjdXRlKCZtX3N0YWNrLCBuZXdDYWxsRnJh
bWUsICZnbG9iYWxEYXRhKTsKKyAgICAgICAgcmVzdWx0ID0gcHJvZ3JhbS0+Z2VuZXJhdGVkSklU
Q29kZSgpLmV4ZWN1dGUoJm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwgJnZtKTsKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQogICAgIH0gZWxzZQogICAgICAgICByZXN1bHQgPSB0aHJvd1Rlcm1pbmF0ZWRF
eGVjdXRpb25FeGNlcHRpb24obmV3Q2FsbEZyYW1lKTsKIAotICAgIGlmIChMZWdhY3lQcm9maWxl
ciogcHJvZmlsZXIgPSBnbG9iYWxEYXRhLmVuYWJsZWRQcm9maWxlcigpKQorICAgIGlmIChMZWdh
Y3lQcm9maWxlciogcHJvZmlsZXIgPSB2bS5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJv
ZmlsZXItPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBwcm9ncmFtLT5zb3VyY2VVUkwoKSwgcHJvZ3Jh
bS0+bGluZU5vKCkpOwogCiAgICAgbV9zdGFjay5wb3BGcmFtZShuZXdDYWxsRnJhbWUpOwpAQCAt
MTA1MiwxMSArMTA1MiwxMSBAQCBmYWlsZWRKU09OUDoKIAogSlNWYWx1ZSBJbnRlcnByZXRlcjo6
ZXhlY3V0ZUNhbGwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiBmdW5jdGlvbiwgQ2Fs
bFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSwgSlNWYWx1ZSB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
ID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgp
OwogICAgIEFTU0VSVChpc1ZhbGlkVGhpc09iamVjdCh0aGlzVmFsdWUsIGNhbGxGcmFtZSkpOwog
ICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSk7Ci0gICAgQVNTRVJUKCFnbG9i
YWxEYXRhLmlzQ29sbGVjdG9yQnVzeSgpKTsKLSAgICBpZiAoZ2xvYmFsRGF0YS5pc0NvbGxlY3Rv
ckJ1c3koKSkKKyAgICBBU1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeSgpKTsKKyAgICBpZiAodm0u
aXNDb2xsZWN0b3JCdXN5KCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAogICAgIFN0YWNr
U3RhdHM6OkNoZWNrUG9pbnQgc3RhY2tDaGVja1BvaW50OwpAQCAtMTA3Niw3ICsxMDc2LDcgQEAg
SlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoQ2FsbEZyYQogICAgICAgICBBU1NFUlQo
Y2FsbFR5cGUgPT0gQ2FsbFR5cGVIb3N0KTsKICAgICAgICAgc2NvcGUgPSBjYWxsRnJhbWUtPnNj
b3BlKCk7CiAgICAgfQotICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RT
Y29wZShnbG9iYWxEYXRhLCBzY29wZS0+Z2xvYmFsT2JqZWN0KCkpOworICAgIER5bmFtaWNHbG9i
YWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZSh2bSwgc2NvcGUtPmdsb2JhbE9iamVjdCgp
KTsKIAogICAgIGlmIChpc0pTQ2FsbCkgewogICAgICAgICAvLyBDb21waWxlIHRoZSBjYWxsZWU6
CkBAIC0xMDk4LDI3ICsxMDk4LDI3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxs
KENhbGxGcmEKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpCiAg
ICAgICAgIG5ld0NhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgYXJncy5hdChpKSk7CiAKLSAgICBp
ZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gZ2xvYmFsRGF0YS5lbmFibGVkUHJvZmlsZXIo
KSkKKyAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gdm0uZW5hYmxlZFByb2ZpbGVy
KCkpCiAgICAgICAgIHByb2ZpbGVyLT53aWxsRXhlY3V0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uKTsK
IAogICAgIEpTVmFsdWUgcmVzdWx0OwotICAgIGlmIChMSUtFTFkoIWdsb2JhbERhdGEud2F0Y2hk
b2cuZGlkRmlyZShuZXdDYWxsRnJhbWUpKSkgeworICAgIGlmIChMSUtFTFkoIXZtLndhdGNoZG9n
LmRpZEZpcmUobmV3Q2FsbEZyYW1lKSkpIHsKICAgICAgICAgU2FtcGxpbmdUb29sOjpDYWxsUmVj
b3JkIGNhbGxSZWNvcmQobV9zYW1wbGVyLmdldCgpLCAhaXNKU0NhbGwpOwotICAgICAgICBXYXRj
aGRvZzo6U2NvcGUgd2F0Y2hkb2dTY29wZShnbG9iYWxEYXRhLndhdGNoZG9nKTsKKyAgICAgICAg
V2F0Y2hkb2c6OlNjb3BlIHdhdGNoZG9nU2NvcGUodm0ud2F0Y2hkb2cpOwogCiAgICAgICAgIC8v
IEV4ZWN1dGUgdGhlIGNvZGU6CiAgICAgICAgIGlmIChpc0pTQ2FsbCkgewogI2lmIEVOQUJMRShM
TElOVF9DX0xPT1ApCiAgICAgICAgICAgICByZXN1bHQgPSBMTEludDo6Q0xvb3A6OmV4ZWN1dGUo
bmV3Q2FsbEZyYW1lLCBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSk7CiAjZWxpZiBF
TkFCTEUoSklUKQotICAgICAgICAgICAgcmVzdWx0ID0gY2FsbERhdGEuanMuZnVuY3Rpb25FeGVj
dXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLmV4ZWN1dGUoJm1fc3RhY2ssIG5ld0Nh
bGxGcmFtZSwgJmdsb2JhbERhdGEpOworICAgICAgICAgICAgcmVzdWx0ID0gY2FsbERhdGEuanMu
ZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLmV4ZWN1dGUoJm1f
c3RhY2ssIG5ld0NhbGxGcmFtZSwgJnZtKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IEpTVmFsdWU6OmRlY29kZShjYWxsRGF0YS5u
YXRpdmUuZnVuY3Rpb24obmV3Q2FsbEZyYW1lKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJlc3Vs
dCA9IHRocm93VGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihuZXdDYWxsRnJhbWUpOwogCi0g
ICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IGdsb2JhbERhdGEuZW5hYmxlZFByb2Zp
bGVyKCkpCisgICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IHZtLmVuYWJsZWRQcm9m
aWxlcigpKQogICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIGZ1bmN0aW9u
KTsKIAogICAgIG1fc3RhY2sucG9wRnJhbWUobmV3Q2FsbEZyYW1lKTsKQEAgLTExMjcsMTIgKzEx
MjcsMTIgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoQ2FsbEZyYQogCiBKU09i
amVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlLCBjb25z
dCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewot
ICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpOwor
ICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKICAgICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFk
RXhjZXB0aW9uKCkpOwotICAgIEFTU0VSVCghZ2xvYmFsRGF0YS5pc0NvbGxlY3RvckJ1c3koKSk7
CisgICAgQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3koKSk7CiAgICAgLy8gV2UgdGhyb3cgaW4g
dGhpcyBjYXNlIGJlY2F1c2Ugd2UgaGF2ZSB0byByZXR1cm4gc29tZXRoaW5nICJ2YWxpZCIgYnV0
IHdlJ3JlCiAgICAgLy8gYWxyZWFkeSBpbiBhbiBpbnZhbGlkIHN0YXRlLgotICAgIGlmIChnbG9i
YWxEYXRhLmlzQ29sbGVjdG9yQnVzeSgpKQorICAgIGlmICh2bS5pc0NvbGxlY3RvckJ1c3koKSkK
ICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2Fs
bEZyYW1lKSk7CiAKICAgICBTdGFja1N0YXRzOjpDaGVja1BvaW50IHN0YWNrQ2hlY2tQb2ludDsK
QEAgLTExNTMsNyArMTE1Myw3IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0
cnVjdCgKICAgICAgICAgc2NvcGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7CiAgICAgfQogCi0gICAg
RHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKGdsb2JhbERhdGEsIHNj
b3BlLT5nbG9iYWxPYmplY3QoKSk7CisgICAgRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIGdsb2Jh
bE9iamVjdFNjb3BlKHZtLCBzY29wZS0+Z2xvYmFsT2JqZWN0KCkpOwogCiAgICAgaWYgKGlzSlND
b25zdHJ1Y3QpIHsKICAgICAgICAgLy8gQ29tcGlsZSB0aGUgY2FsbGVlOgpAQCAtMTE3NSwyNyAr
MTE3NSwyNyBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKQogICAgICAgICBuZXdDYWxs
RnJhbWUtPnNldEFyZ3VtZW50KGksIGFyZ3MuYXQoaSkpOwogCi0gICAgaWYgKExlZ2FjeVByb2Zp
bGVyKiBwcm9maWxlciA9IGdsb2JhbERhdGEuZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgaWYgKExl
Z2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IHZtLmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICBw
cm9maWxlci0+d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBjb25zdHJ1Y3Rvcik7CiAKICAgICBKU1Zh
bHVlIHJlc3VsdDsKLSAgICBpZiAoTElLRUxZKCFnbG9iYWxEYXRhLndhdGNoZG9nLmRpZEZpcmUo
bmV3Q2FsbEZyYW1lKSkpIHsKKyAgICBpZiAoTElLRUxZKCF2bS53YXRjaGRvZy5kaWRGaXJlKG5l
d0NhbGxGcmFtZSkpKSB7CiAgICAgICAgIFNhbXBsaW5nVG9vbDo6Q2FsbFJlY29yZCBjYWxsUmVj
b3JkKG1fc2FtcGxlci5nZXQoKSwgIWlzSlNDb25zdHJ1Y3QpOwotICAgICAgICBXYXRjaGRvZzo6
U2NvcGUgd2F0Y2hkb2dTY29wZShnbG9iYWxEYXRhLndhdGNoZG9nKTsKKyAgICAgICAgV2F0Y2hk
b2c6OlNjb3BlIHdhdGNoZG9nU2NvcGUodm0ud2F0Y2hkb2cpOwogCiAgICAgICAgIC8vIEV4ZWN1
dGUgdGhlIGNvZGUuCiAgICAgICAgIGlmIChpc0pTQ29uc3RydWN0KSB7CiAjaWYgRU5BQkxFKExM
SU5UX0NfTE9PUCkKICAgICAgICAgICAgIHJlc3VsdCA9IExMSW50OjpDTG9vcDo6ZXhlY3V0ZShu
ZXdDYWxsRnJhbWUsIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUpOwogI2Vs
aWYgRU5BQkxFKEpJVCkKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdERhdGEuanMuZnVu
Y3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0KCkuZXhlY3V0ZSgm
bV9zdGFjaywgbmV3Q2FsbEZyYW1lLCAmZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICByZXN1bHQg
PSBjb25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZv
ckNvbnN0cnVjdCgpLmV4ZWN1dGUoJm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwgJnZtKTsKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IEpT
VmFsdWU6OmRlY29kZShjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihuZXdDYWxsRnJhbWUp
KTsKICAgICB9IGVsc2UKICAgICAgICAgcmVzdWx0ID0gdGhyb3dUZXJtaW5hdGVkRXhlY3V0aW9u
RXhjZXB0aW9uKG5ld0NhbGxGcmFtZSk7CiAKLSAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2Zp
bGVyID0gZ2xvYmFsRGF0YS5lbmFibGVkUHJvZmlsZXIoKSkKKyAgICBpZiAoTGVnYWN5UHJvZmls
ZXIqIHByb2ZpbGVyID0gdm0uZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAgIHByb2ZpbGVyLT5k
aWRFeGVjdXRlKGNhbGxGcmFtZSwgY29uc3RydWN0b3IpOwogCiAgICAgbV9zdGFjay5wb3BGcmFt
ZShuZXdDYWxsRnJhbWUpOwpAQCAtMTIwOCwxMCArMTIwOCwxMCBAQCBKU09iamVjdCogSW50ZXJw
cmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoCiAKIENhbGxGcmFtZUNsb3N1cmUgSW50ZXJwcmV0ZXI6
OnByZXBhcmVGb3JSZXBlYXRDYWxsKEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRh
YmxlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNGdW5jdGlvbiogZnVuY3Rpb24sIGludCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcywgSlNTY29wZSogc2NvcGUpCiB7Ci0gICAgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhID0gKnNjb3BlLT5nbG9iYWxEYXRhKCk7Ci0gICAgQVNTRVJUKCFnbG9i
YWxEYXRhLmV4Y2VwdGlvbik7CisgICAgVk0mIHZtID0gKnNjb3BlLT52bSgpOworICAgIEFTU0VS
VCghdm0uZXhjZXB0aW9uKTsKICAgICAKLSAgICBpZiAoZ2xvYmFsRGF0YS5pc0NvbGxlY3RvckJ1
c3koKSkKKyAgICBpZiAodm0uaXNDb2xsZWN0b3JCdXN5KCkpCiAgICAgICAgIHJldHVybiBDYWxs
RnJhbWVDbG9zdXJlKCk7CiAKICAgICBTdGFja1N0YXRzOjpDaGVja1BvaW50IHN0YWNrQ2hlY2tQ
b2ludDsKQEAgLTEyNDQsMTcgKzEyNDQsMTcgQEAgQ2FsbEZyYW1lQ2xvc3VyZSBJbnRlcnByZXRl
cjo6cHJlcGFyZUZvcgogICAgIH0KIAogICAgIC8vIFJldHVybiB0aGUgc3VjY2Vzc2Z1bCBjbG9z
dXJlOgotICAgIENhbGxGcmFtZUNsb3N1cmUgcmVzdWx0ID0geyBjYWxsRnJhbWUsIG5ld0NhbGxG
cmFtZSwgZnVuY3Rpb24sIGZ1bmN0aW9uRXhlY3V0YWJsZSwgJmdsb2JhbERhdGEsIHNjb3BlLCBu
ZXdDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
fTsKKyAgICBDYWxsRnJhbWVDbG9zdXJlIHJlc3VsdCA9IHsgY2FsbEZyYW1lLCBuZXdDYWxsRnJh
bWUsIGZ1bmN0aW9uLCBmdW5jdGlvbkV4ZWN1dGFibGUsICZ2bSwgc2NvcGUsIG5ld0NvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyB9OwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoQ2FsbEZyYW1l
Q2xvc3VyZSYgY2xvc3VyZSkgCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gKmNs
b3N1cmUuZ2xvYmFsRGF0YTsKKyAgICBWTSYgdm0gPSAqY2xvc3VyZS52bTsKICAgICBTYW1wbGlu
Z1Njb3BlIHNhbXBsaW5nU2NvcGUodGhpcyk7CiAgICAgCi0gICAgQVNTRVJUKCFnbG9iYWxEYXRh
LmlzQ29sbGVjdG9yQnVzeSgpKTsKLSAgICBpZiAoZ2xvYmFsRGF0YS5pc0NvbGxlY3RvckJ1c3ko
KSkKKyAgICBBU1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeSgpKTsKKyAgICBpZiAodm0uaXNDb2xs
ZWN0b3JCdXN5KCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAogICAgIFN0YWNrU3RhdHM6
OkNoZWNrUG9pbnQgc3RhY2tDaGVja1BvaW50OwpAQCAtMTI2Miw3ICsxMjYyLDcgQEAgSlNWYWx1
ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShDYWxsRnJhbWVDbAogICAgIGNsb3N1cmUucmVzZXRDYWxs
RnJhbWUoKTsKICAgICBtX3N0YWNrLnZhbGlkYXRlRmVuY2UoY2xvc3VyZS5uZXdDYWxsRnJhbWUs
ICJTVEVQIDEiKTsKIAotICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSBnbG9iYWxE
YXRhLmVuYWJsZWRQcm9maWxlcigpKQorICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIg
PSB2bS5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJvZmlsZXItPndpbGxFeGVjdXRlKGNs
b3N1cmUub2xkQ2FsbEZyYW1lLCBjbG9zdXJlLmZ1bmN0aW9uKTsKIAogICAgIC8vIFRoZSBjb2Rl
IGV4ZWN1dGlvbiBiZWxvdyBtYXkgcHVzaCBtb3JlIGZyYW1lcyBhbmQgcG9pbnQgdGhlIHRvcENh
bGxGcmFtZQpAQCAtMTI3MywyMyArMTI3MywyMyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVj
dXRlKENhbGxGcmFtZUNsCiAgICAgLy8gSGVuY2UsIHdlIG5lZWQgdG8gcHJlc2VydmUgdGhlIHRv
cENhbGxGcmFtZSBoZXJlIG91cnNlbHZlcyBiZWZvcmUKICAgICAvLyByZXBlYXRpbmcgdGhpcyBj
YWxsIG9uIGEgc2Vjb25kIGNhbGxiYWNrIGZ1bmN0aW9uLgogCi0gICAgVG9wQ2FsbEZyYW1lU2V0
dGVyIHRvcENhbGxGcmFtZShnbG9iYWxEYXRhLCBjbG9zdXJlLm5ld0NhbGxGcmFtZSk7CisgICAg
VG9wQ2FsbEZyYW1lU2V0dGVyIHRvcENhbGxGcmFtZSh2bSwgY2xvc3VyZS5uZXdDYWxsRnJhbWUp
OwogCiAgICAgLy8gRXhlY3V0ZSB0aGUgY29kZToKICAgICBKU1ZhbHVlIHJlc3VsdDsKLSAgICBp
ZiAoTElLRUxZKCFnbG9iYWxEYXRhLndhdGNoZG9nLmRpZEZpcmUoY2xvc3VyZS5uZXdDYWxsRnJh
bWUpKSkgeworICAgIGlmIChMSUtFTFkoIXZtLndhdGNoZG9nLmRpZEZpcmUoY2xvc3VyZS5uZXdD
YWxsRnJhbWUpKSkgewogICAgICAgICBTYW1wbGluZ1Rvb2w6OkNhbGxSZWNvcmQgY2FsbFJlY29y
ZChtX3NhbXBsZXIuZ2V0KCkpOwotICAgICAgICBXYXRjaGRvZzo6U2NvcGUgd2F0Y2hkb2dTY29w
ZShnbG9iYWxEYXRhLndhdGNoZG9nKTsKKyAgICAgICAgV2F0Y2hkb2c6OlNjb3BlIHdhdGNoZG9n
U2NvcGUodm0ud2F0Y2hkb2cpOwogCiAjaWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKICAgICAgICAg
cmVzdWx0ID0gTExJbnQ6OkNMb29wOjpleGVjdXRlKGNsb3N1cmUubmV3Q2FsbEZyYW1lLCBsbGlu
dF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSk7CiAjZWxpZiBFTkFCTEUoSklUKQotICAgICAg
ICByZXN1bHQgPSBjbG9zdXJlLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZv
ckNhbGwoKS5leGVjdXRlKCZtX3N0YWNrLCBjbG9zdXJlLm5ld0NhbGxGcmFtZSwgJmdsb2JhbERh
dGEpOworICAgICAgICByZXN1bHQgPSBjbG9zdXJlLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJh
dGVkSklUQ29kZUZvckNhbGwoKS5leGVjdXRlKCZtX3N0YWNrLCBjbG9zdXJlLm5ld0NhbGxGcmFt
ZSwgJnZtKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogICAgIH0gZWxzZQogICAgICAgICByZXN1
bHQgPSB0aHJvd1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oY2xvc3VyZS5uZXdDYWxsRnJh
bWUpOwogCi0gICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IGdsb2JhbERhdGEuZW5h
YmxlZFByb2ZpbGVyKCkpCisgICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IHZtLmVu
YWJsZWRQcm9maWxlcigpKQogICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0ZShjbG9zdXJlLm9s
ZENhbGxGcmFtZSwgY2xvc3VyZS5mdW5jdGlvbik7CiAKICAgICBtX3N0YWNrLnZhbGlkYXRlRmVu
Y2UoY2xvc3VyZS5uZXdDYWxsRnJhbWUsICJBRlRFUiIpOwpAQCAtMTMwMywxNyArMTMwMywxNyBA
QCB2b2lkIEludGVycHJldGVyOjplbmRSZXBlYXRDYWxsKENhbGxGcmFtCiAKIEpTVmFsdWUgSW50
ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGFibGUqIGV2YWwsIENhbGxGcmFtZSogY2FsbEZy
YW1lLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNTY29wZSogc2NvcGUpCiB7Ci0gICAgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhID0gKnNjb3BlLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0gKnNj
b3BlLT52bSgpOwogICAgIFNhbXBsaW5nU2NvcGUgc2FtcGxpbmdTY29wZSh0aGlzKTsKICAgICAK
LSAgICBBU1NFUlQoc2NvcGUtPmdsb2JhbERhdGEoKSA9PSAmY2FsbEZyYW1lLT5nbG9iYWxEYXRh
KCkpOworICAgIEFTU0VSVChzY29wZS0+dm0oKSA9PSAmY2FsbEZyYW1lLT52bSgpKTsKICAgICBB
U1NFUlQoaXNWYWxpZFRoaXNPYmplY3QodGhpc1ZhbHVlLCBjYWxsRnJhbWUpKTsKLSAgICBBU1NF
UlQoIWdsb2JhbERhdGEuZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWdsb2JhbERhdGEuaXNDb2xs
ZWN0b3JCdXN5KCkpOwotICAgIGlmIChnbG9iYWxEYXRhLmlzQ29sbGVjdG9yQnVzeSgpKQorICAg
IEFTU0VSVCghdm0uZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeSgp
KTsKKyAgICBpZiAodm0uaXNDb2xsZWN0b3JCdXN5KCkpCiAgICAgICAgIHJldHVybiBqc051bGwo
KTsKIAotICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZShnbG9i
YWxEYXRhLCBzY29wZS0+Z2xvYmFsT2JqZWN0KCkpOworICAgIER5bmFtaWNHbG9iYWxPYmplY3RT
Y29wZSBnbG9iYWxPYmplY3RTY29wZSh2bSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpKTsKIAogICAg
IFN0YWNrU3RhdHM6OkNoZWNrUG9pbnQgc3RhY2tDaGVja1BvaW50OwogICAgIGNvbnN0IFN0YWNr
Qm91bmRzJiBuYXRpdmVTdGFjayA9IHd0ZlRocmVhZERhdGEoKS5zdGFjaygpOwpAQCAtMTM0NCw3
ICsxMzQ0LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YQogICAg
ICAgICAgICAgdmFyaWFibGVPYmplY3QgPSBzY29wZTsKICAgICAgICAgfQogICAgICAgICAvLyBT
Y29wZSBmb3IgQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIKLSAgICAgICAgQmF0Y2hlZFRyYW5z
aXRpb25PcHRpbWl6ZXIgb3B0aW1pemVyKGdsb2JhbERhdGEsIHZhcmlhYmxlT2JqZWN0KTsKKyAg
ICAgICAgQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIgb3B0aW1pemVyKHZtLCB2YXJpYWJsZU9i
amVjdCk7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVZhcmlhYmxlczsg
KytpKSB7CiAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+
dmFyaWFibGUoaSk7CkBAIC0xMzcwLDI0ICsxMzcwLDI0IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6
OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICAvLyBTZXQgdGhlIGFyZ3VtZW50cyBmb3IgdGhlIGNh
bGxlZToKICAgICBuZXdDYWxsRnJhbWUtPnNldFRoaXNWYWx1ZSh0aGlzVmFsdWUpOwogCi0gICAg
aWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IGdsb2JhbERhdGEuZW5hYmxlZFByb2ZpbGVy
KCkpCisgICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IHZtLmVuYWJsZWRQcm9maWxl
cigpKQogICAgICAgICBwcm9maWxlci0+d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBldmFsLT5zb3Vy
Y2VVUkwoKSwgZXZhbC0+bGluZU5vKCkpOwogCiAgICAgLy8gRXhlY3V0ZSB0aGUgY29kZToKICAg
ICBKU1ZhbHVlIHJlc3VsdDsKLSAgICBpZiAoTElLRUxZKCFnbG9iYWxEYXRhLndhdGNoZG9nLmRp
ZEZpcmUobmV3Q2FsbEZyYW1lKSkpIHsKKyAgICBpZiAoTElLRUxZKCF2bS53YXRjaGRvZy5kaWRG
aXJlKG5ld0NhbGxGcmFtZSkpKSB7CiAgICAgICAgIFNhbXBsaW5nVG9vbDo6Q2FsbFJlY29yZCBj
YWxsUmVjb3JkKG1fc2FtcGxlci5nZXQoKSk7Ci0gICAgICAgIFdhdGNoZG9nOjpTY29wZSB3YXRj
aGRvZ1Njb3BlKGdsb2JhbERhdGEud2F0Y2hkb2cpOworICAgICAgICBXYXRjaGRvZzo6U2NvcGUg
d2F0Y2hkb2dTY29wZSh2bS53YXRjaGRvZyk7CiAKICNpZiBFTkFCTEUoTExJTlRfQ19MT09QKQog
ICAgICAgICByZXN1bHQgPSBMTEludDo6Q0xvb3A6OmV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBsbGlu
dF9ldmFsX3Byb2xvZ3VlKTsKICNlbGlmIEVOQUJMRShKSVQpCi0gICAgICAgIHJlc3VsdCA9IGV2
YWwtPmdlbmVyYXRlZEpJVENvZGUoKS5leGVjdXRlKCZtX3N0YWNrLCBuZXdDYWxsRnJhbWUsICZn
bG9iYWxEYXRhKTsKKyAgICAgICAgcmVzdWx0ID0gZXZhbC0+Z2VuZXJhdGVkSklUQ29kZSgpLmV4
ZWN1dGUoJm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwgJnZtKTsKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQogICAgIH0gZWxzZQogICAgICAgICByZXN1bHQgPSB0aHJvd1Rlcm1pbmF0ZWRFeGVjdXRpb25F
eGNlcHRpb24obmV3Q2FsbEZyYW1lKTsKIAotICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmls
ZXIgPSBnbG9iYWxEYXRhLmVuYWJsZWRQcm9maWxlcigpKQorICAgIGlmIChMZWdhY3lQcm9maWxl
ciogcHJvZmlsZXIgPSB2bS5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJvZmlsZXItPmRp
ZEV4ZWN1dGUoY2FsbEZyYW1lLCBldmFsLT5zb3VyY2VVUkwoKSwgZXZhbC0+bGluZU5vKCkpOwog
CiAgICAgbV9zdGFjay5wb3BGcmFtZShuZXdDYWxsRnJhbWUpOwpAQCAtMTQyOCw3ICsxNDI4LDcg
QEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6cmV0cmlldmVBcmd1bWVudHNGcgogICAgIGlmICghZnVu
Y3Rpb25DYWxsRnJhbWUpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEFyZ3VtZW50
cyogYXJndW1lbnRzID0gQXJndW1lbnRzOjpjcmVhdGUoZnVuY3Rpb25DYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKSwgZnVuY3Rpb25DYWxsRnJhbWUpOworICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0g
QXJndW1lbnRzOjpjcmVhdGUoZnVuY3Rpb25DYWxsRnJhbWUtPnZtKCksIGZ1bmN0aW9uQ2FsbEZy
YW1lKTsKICAgICBhcmd1bWVudHMtPnRlYXJPZmYoZnVuY3Rpb25DYWxsRnJhbWUpOwogICAgIHJl
dHVybiBKU1ZhbHVlKGFyZ3VtZW50cyk7CiB9CkBAIC0xNDQyLDcgKzE0NDIsNyBAQCBKU1ZhbHVl
IEludGVycHJldGVyOjpyZXRyaWV2ZUNhbGxlckZyb21WCiAgICAgCiAgICAgdW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQ7CiAgICAgQ29kZUJsb2NrKiB1bnVzZWRDYWxsZXJDb2RlQmxvY2sgPSAwOwot
ICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBnZXRDYWxsZXJJbmZvKCZjYWxsRnJhbWUtPmds
b2JhbERhdGEoKSwgZnVuY3Rpb25DYWxsRnJhbWUsIGJ5dGVjb2RlT2Zmc2V0LCB1bnVzZWRDYWxs
ZXJDb2RlQmxvY2spOworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBnZXRDYWxsZXJJbmZv
KCZjYWxsRnJhbWUtPnZtKCksIGZ1bmN0aW9uQ2FsbEZyYW1lLCBieXRlY29kZU9mZnNldCwgdW51
c2VkQ2FsbGVyQ29kZUJsb2NrKTsKICAgICBpZiAoIWNhbGxlckZyYW1lKQogICAgICAgICByZXR1
cm4ganNOdWxsKCk7CiAgICAgSlNWYWx1ZSBjYWxsZXIgPSBjYWxsZXJGcmFtZS0+Y2FsbGVlKCk7
CkBAIC0xNDUyLDcgKzE0NTIsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpyZXRyaWV2ZUNhbGxl
ckZyb21WCiAgICAgLy8gU2tpcCBvdmVyIGZ1bmN0aW9uIGJpbmRpbmdzLgogICAgIEFTU0VSVChj
YWxsZXIuaXNPYmplY3QoKSk7CiAgICAgd2hpbGUgKGFzT2JqZWN0KGNhbGxlciktPmluaGVyaXRz
KCZKU0JvdW5kRnVuY3Rpb246OnNfaW5mbykpIHsKLSAgICAgICAgY2FsbGVyRnJhbWUgPSBnZXRD
YWxsZXJJbmZvKCZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbGVyRnJhbWUsIGJ5dGVjb2Rl
T2Zmc2V0LCB1bnVzZWRDYWxsZXJDb2RlQmxvY2spOworICAgICAgICBjYWxsZXJGcmFtZSA9IGdl
dENhbGxlckluZm8oJmNhbGxGcmFtZS0+dm0oKSwgY2FsbGVyRnJhbWUsIGJ5dGVjb2RlT2Zmc2V0
LCB1bnVzZWRDYWxsZXJDb2RlQmxvY2spOwogICAgICAgICBpZiAoIWNhbGxlckZyYW1lKQogICAg
ICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgICAgICBjYWxsZXIgPSBjYWxsZXJGcmFtZS0+
Y2FsbGVlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRXZhbEV4ZWN1dGFibGU7CiAgICAgY2xhc3Mg
RXhlY3V0YWJsZUJhc2U7CiAgICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwotICAgIGNsYXNz
IEpTR2xvYmFsRGF0YTsKKyAgICBjbGFzcyBWTTsKICAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsK
ICAgICBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgY2xhc3MgUHJvZ3JhbUV4ZWN1
dGFibGU7CkBAIC0xMzIsOCArMTMyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBU
b3BDYWxsRnJhbWVTZXR0ZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgVG9wQ2FsbEZyYW1lU2V0
dGVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLSAgICAgICAg
ICAgIDogZ2xvYmFsRGF0YShnbG9iYWwpCisgICAgICAgIFRvcENhbGxGcmFtZVNldHRlcihWTSYg
Z2xvYmFsLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKKyAgICAgICAgICAgIDogdm0oZ2xvYmFsKQog
ICAgICAgICAgICAgLCBvbGRDYWxsRnJhbWUoZ2xvYmFsLnRvcENhbGxGcmFtZSkgCiAgICAgICAg
IHsKICAgICAgICAgICAgIGdsb2JhbC50b3BDYWxsRnJhbWUgPSBjYWxsRnJhbWU7CkBAIC0xNDEs
MTYgKzE0MSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIH5Ub3BDYWxs
RnJhbWVTZXR0ZXIoKSAKICAgICAgICAgewotICAgICAgICAgICAgZ2xvYmFsRGF0YS50b3BDYWxs
RnJhbWUgPSBvbGRDYWxsRnJhbWU7CisgICAgICAgICAgICB2bS50b3BDYWxsRnJhbWUgPSBvbGRD
YWxsRnJhbWU7CiAgICAgICAgIH0KICAgICBwcml2YXRlOgotICAgICAgICBKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGE7CisgICAgICAgIFZNJiB2bTsKICAgICAgICAgQ2FsbEZyYW1lKiBvbGRDYWxs
RnJhbWU7CiAgICAgfTsKICAgICAKICAgICBjbGFzcyBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgewog
ICAgIHB1YmxpYzoKLSAgICAgICAgQUxXQVlTX0lOTElORSBOYXRpdmVDYWxsRnJhbWVUcmFjZXIo
SlNHbG9iYWxEYXRhKiBnbG9iYWwsIENhbGxGcmFtZSogY2FsbEZyYW1lKQorICAgICAgICBBTFdB
WVNfSU5MSU5FIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcihWTSogZ2xvYmFsLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGdsb2JhbCk7CiAgICAgICAg
ICAgICBBU1NFUlQoY2FsbEZyYW1lKTsKQEAgLTE3Myw3ICsxNzMsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIEludGVycHJldGVyJiBtX2ludGVycHJldGVyOwogICAgICAgICB9Owog
Ci0gICAgICAgIEludGVycHJldGVyKEpTR2xvYmFsRGF0YSAmKTsKKyAgICAgICAgSW50ZXJwcmV0
ZXIoVk0gJik7CiAgICAgICAgIH5JbnRlcnByZXRlcigpOwogICAgICAgICAKICAgICAgICAgdm9p
ZCBpbml0aWFsaXplKGJvb2wgY2FuVXNlSklUKTsKQEAgLTIxOSw3ICsyMTksNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiB0aHJvd0V4Y2VwdGlv
bihDYWxsRnJhbWUqJiwgSlNWYWx1ZSYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKICAgICAg
ICAgTkVWRVJfSU5MSU5FIHZvaWQgZGVidWcoQ2FsbEZyYW1lKiwgRGVidWdIb29rSUQsIGludCBm
aXJzdExpbmUsIGludCBsYXN0TGluZSwgaW50IGNvbHVtbik7CiAgICAgICAgIHN0YXRpYyBjb25z
dCBTdHJpbmcgZ2V0VHJhY2VMaW5lKENhbGxGcmFtZSosIFN0YWNrRnJhbWVDb2RlVHlwZSwgY29u
c3QgU3RyaW5nJiwgaW50KTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
Z2V0U3RhY2tUcmFjZShKU0dsb2JhbERhdGEqLCBWZWN0b3I8U3RhY2tGcmFtZT4mIHJlc3VsdHMs
IHNpemVfdCBtYXhTdGFja1NpemUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgp
KTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0U3RhY2tUcmFjZShW
TSosIFZlY3RvcjxTdGFja0ZyYW1lPiYgcmVzdWx0cywgc2l6ZV90IG1heFN0YWNrU2l6ZSA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOwogICAgICAgICBzdGF0aWMgdm9pZCBh
ZGRTdGFja1RyYWNlSWZOZWNlc3NhcnkoQ2FsbEZyYW1lKiwgSlNWYWx1ZSBlcnJvcik7CiAKICAg
ICAgICAgdm9pZCBkdW1wU2FtcGxlRGF0YShFeGVjU3RhdGUqIGV4ZWMpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmNwcAkocmV2aXNpb24gMTQ4
NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0Myw5IEBAIHN0YXRpYyBNdXRleCYgc3RhY2tTdGF0aXN0
aWNzTXV0ZXgoKQogICAgIHJldHVybiBzdGF0aWNNdXRleDsKIH0gICAgCiAKLUpTU3RhY2s6OkpT
U3RhY2soSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgY2FwYWNpdHkpCitKU1N0YWNr
OjpKU1N0YWNrKFZNJiB2bSwgc2l6ZV90IGNhcGFjaXR5KQogICAgIDogbV9lbmQoMCkKLSAgICAs
IG1fdG9wQ2FsbEZyYW1lKGdsb2JhbERhdGEudG9wQ2FsbEZyYW1lKQorICAgICwgbV90b3BDYWxs
RnJhbWUodm0udG9wQ2FsbEZyYW1lKQogewogICAgIEFTU0VSVChjYXBhY2l0eSAmJiBpc1BhZ2VB
bGlnbmVkKGNhcGFjaXR5KSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9KU1N0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0pTU3RhY2suaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0pTU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBERkdDb2RlQmxvY2tzOwogICAgIGNsYXNzIEV4
ZWNTdGF0ZTsKICAgICBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKLSAgICBjbGFzcyBKU0dsb2Jh
bERhdGE7CisgICAgY2xhc3MgVk07CiAgICAgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwog
CiAgICAgY2xhc3MgSlNTdGFjayB7CkBAIC02Nyw3ICs2Nyw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAvLyBBbGxvdyA4ayBvZiBleGNlc3MgcmVnaXN0ZXJzIGJlZm9yZSB3ZSBzdGFydCB0
cnlpbmcgdG8gcmVhcCB0aGUgc3RhY2sKICAgICAgICAgc3RhdGljIGNvbnN0IHB0cmRpZmZfdCBt
YXhFeGNlc3NDYXBhY2l0eSA9IDggKiAxMDI0OwogCi0gICAgICAgIEpTU3RhY2soSlNHbG9iYWxE
YXRhJiwgc2l6ZV90IGNhcGFjaXR5ID0gZGVmYXVsdENhcGFjaXR5KTsKKyAgICAgICAgSlNTdGFj
ayhWTSYsIHNpemVfdCBjYXBhY2l0eSA9IGRlZmF1bHRDYXBhY2l0eSk7CiAgICAgICAgIH5KU1N0
YWNrKCk7CiAgICAgICAgIAogICAgICAgICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENv
bnNlcnZhdGl2ZVJvb3RzJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1
cmVDYWxsU3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKICNp
bmNsdWRlICJIZWFwLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0u
aCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKICNp
bmNsdWRlICJTdHJ1Y3R1cmUuaCIKQEAgLTM4LDExICszOCwxMSBAQAogbmFtZXNwYWNlIEpTQyB7
CiAKIENsb3N1cmVDYWxsU3R1YlJvdXRpbmU6OkNsb3N1cmVDYWxsU3R1YlJvdXRpbmUoCi0gICAg
Y29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLCBKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIGNvbnN0IEpTQ2VsbCogb3duZXIsCisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
JiBjb2RlLCBWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsCiAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlLCBjb25zdCBDb2RlT3JpZ2luJiBjb2Rl
T3JpZ2luKQotICAgIDogR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIGdsb2JhbERhdGEsIHRy
dWUpCi0gICAgLCBtX3N0cnVjdHVyZShnbG9iYWxEYXRhLCBvd25lciwgc3RydWN0dXJlKQotICAg
ICwgbV9leGVjdXRhYmxlKGdsb2JhbERhdGEsIG93bmVyLCBleGVjdXRhYmxlKQorICAgIDogR0NB
d2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtLCB0cnVlKQorICAgICwgbV9zdHJ1Y3R1cmUodm0s
IG93bmVyLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2V4ZWN1dGFibGUodm0sIG93bmVyLCBleGVjdXRh
YmxlKQogICAgICwgbV9jb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiB7CiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaAkocmV2
aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DbG9zdXJlQ2FsbFN0
dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiBjbGFzcyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lIDogcHVibGljIEdDQXdhcmVKSVRTdHVi
Um91dGluZSB7CiBwdWJsaWM6CiAgICAgQ2xvc3VyZUNhbGxTdHViUm91dGluZSgKLSAgICAgICAg
Y29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgSlNHbG9iYWxEYXRhJiwgY29uc3QgSlNDZWxs
KiBvd25lciwKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgVk0mLCBjb25z
dCBKU0NlbGwqIG93bmVyLAogICAgICAgICBTdHJ1Y3R1cmUqLCBFeGVjdXRhYmxlQmFzZSosIGNv
bnN0IENvZGVPcmlnaW4mKTsKICAgICAKICAgICB2aXJ0dWFsIH5DbG9zdXJlQ2FsbFN0dWJSb3V0
aW5lKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJs
ZUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw3ICsx
NjcsNyBAQCB2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxvCiB9CiAjZW5k
aWYKIAotRXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcihKU0dsb2JhbERh
dGEmKQorRXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcihWTSYpCiAjaWYg
RU5BQkxFKEFTU0VNQkxFUl9XWF9FWENMVVNJVkUpCiAgICAgOiBtX2FsbG9jYXRvcihhZG9wdFB0
cihuZXcgIERlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3IoKSkpCiAjZW5kaWYKQEAgLTIxMiw3ICsy
MTIsNyBAQCBkb3VibGUgRXhlY3V0YWJsZUFsbG9jYXRvcjo6bWVtb3J5UHJlc3N1CiAKIH0KIAot
UGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlQWxsb2NhdG9yOjph
bGxvY2F0ZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlE
LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCitQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKFZNJiwgc2l6ZV90IHNpemVJ
bkJ5dGVzLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewog
ICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3IoKS0+
YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsKICAgICBSRUxFQVNFX0FTU0VSVChyZXN1
bHQgfHwgZWZmb3J0ICE9IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHJldmlzaW9u
IDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw4ICs3NCw4IEBAIGV4dGVybiAiQyIgX19kZWNsc3Bl
YyhkbGxpbXBvcnQpIHZvaWQgQ2EKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTR2xvYmFs
RGF0YTsKLXZvaWQgcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoSlNHbG9iYWxEYXRhJik7CitjbGFz
cyBWTTsKK3ZvaWQgcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoVk0mKTsKIAogc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGppdEFsbG9jYXRpb25HcmFudWxlID0gMzI7CiAKQEAgLTExOCw3ICsxMTgsNyBA
QCBjbGFzcyBFeGVjdXRhYmxlQWxsb2NhdG9yIHsKICAgICBlbnVtIFByb3RlY3Rpb25TZXR0aW5n
IHsgV3JpdGFibGUsIEV4ZWN1dGFibGUgfTsKIAogcHVibGljOgotICAgIEV4ZWN1dGFibGVBbGxv
Y2F0b3IoSlNHbG9iYWxEYXRhJik7CisgICAgRXhlY3V0YWJsZUFsbG9jYXRvcihWTSYpOwogICAg
IH5FeGVjdXRhYmxlQWxsb2NhdG9yKCk7CiAgICAgCiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6
ZUFsbG9jYXRvcigpOwpAQCAtMTM1LDcgKzEzNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBkdW1wUHJvZmlsZSgpIHsgfQogI2VuZGlmCiAKLSAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVN
ZW1vcnlIYW5kbGU+IGFsbG9jYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBzaXplSW5CeXRlcywg
dm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICBQYXNzUmVmUHRyPEV4
ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKFZNJiwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2
b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQpOwogCiAjaWYgRU5BQkxFKEFTU0VN
QkxFUl9XWF9FWENMVVNJVkUpCiAgICAgc3RhdGljIHZvaWQgbWFrZVdyaXRhYmxlKHZvaWQqIHN0
YXJ0LCBzaXplX3Qgc2l6ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0
YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHJldmlzaW9u
IDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRv
ckZpeGVkVk1Qb29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQg
RXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG8KICAgICBDb2RlUHJvZmlsaW5nOjpu
b3RpZnlBbGxvY2F0b3IoYWxsb2NhdG9yKTsKIH0KIAotRXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhl
Y3V0YWJsZUFsbG9jYXRvcihKU0dsb2JhbERhdGEmKQorRXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhl
Y3V0YWJsZUFsbG9jYXRvcihWTSYpCiB7CiAgICAgQVNTRVJUKGFsbG9jYXRvcik7CiB9CkBAIC0x
NTYsMTMgKzE1NiwxMyBAQCBkb3VibGUgRXhlY3V0YWJsZUFsbG9jYXRvcjo6bWVtb3J5UHJlc3N1
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFu
ZGxlPiBFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZm
b3J0IGVmZm9ydCkKK1Bhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6YWxsb2NhdGUoVk0mIHZtLCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93
bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAgUmVmUHRyPEV4ZWN1
dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0
ZXMsIG93bmVyVUlEKTsKICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICBpZiAoZWZmb3J0ID09
IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
ICAgIHJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KGdsb2JhbERhdGEpOworICAgICAgICByZWxlYXNl
RXhlY3V0YWJsZU1lbW9yeSh2bSk7CiAgICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2Nh
dGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHVi
Um91dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3
YXJlSklUU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDcgKzI5LDcgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiSGVhcC5oIgotI2lu
Y2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgi
CkBAIC0zNywxMyArMzcsMTMgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBHQ0F3YXJlSklUU3R1YlJv
dXRpbmU6OkdDQXdhcmVKSVRTdHViUm91dGluZSgKLSAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYmIGNvZGUsIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgYm9vbCBpc0Nsb3N1cmVDYWxs
KQorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwgVk0mIHZtLCBib29sIGlz
Q2xvc3VyZUNhbGwpCiAgICAgOiBKSVRTdHViUm91dGluZShjb2RlKQogICAgICwgbV9tYXlCZUV4
ZWN1dGluZyhmYWxzZSkKICAgICAsIG1faXNKZXR0aXNvbmVkKGZhbHNlKQogICAgICwgbV9pc0Ns
b3N1cmVDYWxsKGlzQ2xvc3VyZUNhbGwpCiB7Ci0gICAgZ2xvYmFsRGF0YS5oZWFwLm1faml0U3R1
YlJvdXRpbmVzLmFkZCh0aGlzKTsKKyAgICB2bS5oZWFwLm1faml0U3R1YlJvdXRpbmVzLmFkZCh0
aGlzKTsKIH0KICAgICAKIEdDQXdhcmVKSVRTdHViUm91dGluZTo6fkdDQXdhcmVKSVRTdHViUm91
dGluZSgpIHsgfQpAQCAtNzksMTAgKzc5LDEwIEBAIHZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5l
OjptYXJrUmVxdWlyZWQKIH0KIAogTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVP
YmplY3Q6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoT25lT2JqZWN0KAotICAgIGNv
bnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBjb25zdCBKU0NlbGwqIG93bmVyLAorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYg
Y29kZSwgVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLAogICAgIEpTQ2VsbCogb2JqZWN0KQot
ICAgIDogR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIGdsb2JhbERhdGEpCi0gICAgLCBtX29i
amVjdChnbG9iYWxEYXRhLCBvd25lciwgb2JqZWN0KQorICAgIDogR0NBd2FyZUpJVFN0dWJSb3V0
aW5lKGNvZGUsIHZtKQorICAgICwgbV9vYmplY3Qodm0sIG93bmVyLCBvYmplY3QpCiB7CiB9CiAK
QEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aE9u
ZQogCiBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBjcmVhdGVKSVRTdHViUm91dGluZSgKICAg
ICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUsCi0gICAgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLAorICAgIFZNJiB2bSwKICAgICBjb25zdCBKU0NlbGwqLAogICAgIGJvb2wgbWFr
ZXNDYWxscykKIHsKQEAgLTEwNSwxMiArMTA1LDEyIEBAIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRp
bmU+IGNyZWF0ZUpJVFN0dWIKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKSVRTdHViUm91
dGluZShjb2RlKSk7CiAKICAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxKSVRTdHViUm91
dGluZT4oCi0gICAgICAgIGFkb3B0UmVmKG5ldyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29kZSwg
Z2xvYmFsRGF0YSkpKTsKKyAgICAgICAgYWRvcHRSZWYobmV3IEdDQXdhcmVKSVRTdHViUm91dGlu
ZShjb2RlLCB2bSkpKTsKIH0KIAogUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gY3JlYXRlSklU
U3R1YlJvdXRpbmUoCiAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLAotICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwKKyAgICBWTSYgdm0sCiAgICAgY29uc3QgSlNDZWxs
KiBvd25lciwKICAgICBib29sIG1ha2VzQ2FsbHMsCiAgICAgSlNDZWxsKiBvYmplY3QpCkBAIC0x
MTksNyArMTE5LDcgQEAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gY3JlYXRlSklUU3R1Ygog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpJVFN0dWJSb3V0aW5lKGNvZGUpKTsKICAgICAK
ICAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxKSVRTdHViUm91dGluZT4oCi0gICAgICAg
IGFkb3B0UmVmKG5ldyBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aE9uZU9iamVjdChj
b2RlLCBnbG9iYWxEYXRhLCBvd25lciwgb2JqZWN0KSkpOworICAgICAgICBhZG9wdFJlZihuZXcg
TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3QoY29kZSwgdm0sIG93bmVy
LCBvYmplY3QpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAx
NDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGlu
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIGNsYXNzIEpJVFN0dWJSb3V0aW5l
U2V0OwogLy8gbGlzdCB3aGljaCBkb2VzIG5vdCBnZXQgcmVjbGFpbWVkIGFsbCBhdCBvbmNlKS4K
IGNsYXNzIEdDQXdhcmVKSVRTdHViUm91dGluZSA6IHB1YmxpYyBKSVRTdHViUm91dGluZSB7CiBw
dWJsaWM6Ci0gICAgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiYsIEpTR2xvYmFsRGF0YSYsIGJvb2wgaXNDbG9zdXJlQ2FsbCA9IGZhbHNlKTsKKyAgICBH
Q0F3YXJlSklUU3R1YlJvdXRpbmUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgVk0mLCBi
b29sIGlzQ2xvc3VyZUNhbGwgPSBmYWxzZSk7CiAgICAgdmlydHVhbCB+R0NBd2FyZUpJVFN0dWJS
b3V0aW5lKCk7CiAgICAgCiAgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQpAQCAtODQsNyArODQsNyBAQCBwcml2YXRlOgogY2xhc3MgTWFya2luZ0dDQXdh
cmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3QgOiBwdWJsaWMgR0NBd2FyZUpJVFN0dWJSb3V0
aW5lIHsKIHB1YmxpYzoKICAgICBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aE9uZU9i
amVjdCgKLSAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgSlNHbG9iYWxEYXRh
JiwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNDZWxsKik7CisgICAgICAgIGNvbnN0IE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiYsIFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNDZWxsKik7CiAgICAg
dmlydHVhbCB+TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3QoKTsKICAg
ICAKIHByb3RlY3RlZDoKQEAgLTEwMiw3ICsxMDIsNyBAQCBwcml2YXRlOgogLy8gCiAvLyBQYXNz
UmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBjcmVhdGVKSVRTdHViUm91dGluZSgKIC8vICAgIGNvbnN0
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwKLS8vICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwKKy8vICAgIFZNJiB2bSwKIC8vICAgIGNvbnN0IEpTQ2VsbCogb3duZXIsCiAvLyAgICBi
b29sIG1ha2VzQ2FsbHMsCiAvLyAgICAuLi4pOwpAQCAtMTE0LDkgKzExNCw5IEBAIHByaXZhdGU6
CiAvLyB3YXkuCiAKIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0dWJSb3V0
aW5lKAotICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIEpTR2xvYmFsRGF0YSYsIGNv
bnN0IEpTQ2VsbCogb3duZXIsIGJvb2wgbWFrZXNDYWxscyk7CisgICAgY29uc3QgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmJiwgVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLCBib29sIG1ha2VzQ2FsbHMp
OwogUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gY3JlYXRlSklUU3R1YlJvdXRpbmUoCi0gICAg
Y29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgSlNHbG9iYWxEYXRhJiwgY29uc3QgSlNDZWxs
KiBvd25lciwgYm9vbCBtYWtlc0NhbGxzLAorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiYsIFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwgYm9vbCBtYWtlc0NhbGxzLAogICAgIEpTQ2Vs
bCopOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzAsOSArNzAsOSBAQCB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhDb2RlQmxvCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0
aW9uKHJldHVybkFkZHJlc3MsIG5ld0NhbGxlZUZ1bmN0aW9uKTsKIH0KIAotSklUOjpKSVQoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKLSAgICA6IG1faW50
ZXJwcmV0ZXIoZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXIpCi0gICAgLCBtX2dsb2JhbERhdGEoZ2xv
YmFsRGF0YSkKK0pJVDo6SklUKFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgOiBt
X2ludGVycHJldGVyKHZtLT5pbnRlcnByZXRlcikKKyAgICAsIG1fdm0odm0pCiAgICAgLCBtX2Nv
ZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBtX2xhYmVscyhjb2RlQmxvY2sgPyBjb2RlQmxvY2st
Pm51bWJlck9mSW5zdHJ1Y3Rpb25zKCkgOiAwKQogICAgICwgbV9ieXRlY29kZU9mZnNldCgodW5z
aWduZWQpLTEpCkBAIC0xMjAsMTAgKzEyMCwxMCBAQCB2b2lkIEpJVDo6ZW1pdE9wdGltaXphdGlv
bkNoZWNrKE9wdGltaXphCiAKIHZvaWQgSklUOjplbWl0V2F0Y2hkb2dUaW1lckNoZWNrKCkKIHsK
LSAgICBpZiAoIW1fZ2xvYmFsRGF0YS0+d2F0Y2hkb2cuaXNFbmFibGVkKCkpCisgICAgaWYgKCFt
X3ZtLT53YXRjaGRvZy5pc0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSnVtcCBz
a2lwQ2hlY2sgPSBicmFuY2hUZXN0OChaZXJvLCBBYnNvbHV0ZUFkZHJlc3MobV9nbG9iYWxEYXRh
LT53YXRjaGRvZy50aW1lckRpZEZpcmVBZGRyZXNzKCkpKTsKKyAgICBKdW1wIHNraXBDaGVjayA9
IGJyYW5jaFRlc3Q4KFplcm8sIEFic29sdXRlQWRkcmVzcyhtX3ZtLT53YXRjaGRvZy50aW1lckRp
ZEZpcmVBZGRyZXNzKCkpKTsKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfaGFu
ZGxlX3dhdGNoZG9nX3RpbWVyKTsKICAgICBzdHViQ2FsbC5jYWxsKCk7CiAgICAgc2tpcENoZWNr
LmxpbmsodGhpcyk7CkBAIC02MTEsMTEgKzYxMSwxMSBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNv
bXBpbGUoQ29kZVB0ciogZnVuCiAgICAgfQogI2VuZGlmCiAgICAgCi0gICAgaWYgKE9wdGlvbnM6
OnNob3dEaXNhc3NlbWJseSgpIHx8IG1fZ2xvYmFsRGF0YS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
KQorICAgIGlmIChPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkoKSB8fCBtX3ZtLT5tX3BlckJ5dGVj
b2RlUHJvZmlsZXIpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gYWRvcHRQdHIobmV3IEpJVERp
c2Fzc2VtYmxlcihtX2NvZGVCbG9jaykpOwotICAgIGlmIChtX2dsb2JhbERhdGEtPm1fcGVyQnl0
ZWNvZGVQcm9maWxlcikgewotICAgICAgICBtX2NvbXBpbGF0aW9uID0gbV9nbG9iYWxEYXRhLT5t
X3BlckJ5dGVjb2RlUHJvZmlsZXItPm5ld0NvbXBpbGF0aW9uKG1fY29kZUJsb2NrLCBQcm9maWxl
cjo6QmFzZWxpbmUpOwotICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2Rl
cygqbV9nbG9iYWxEYXRhLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fY29kZUJsb2NrKTsKKyAg
ICBpZiAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKSB7CisgICAgICAgIG1fY29tcGlsYXRp
b24gPSBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPm5ld0NvbXBpbGF0aW9uKG1fY29kZUJs
b2NrLCBQcm9maWxlcjo6QmFzZWxpbmUpOworICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9m
aWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7
CiAgICAgfQogICAgIAogICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKQEAgLTY2Niw3ICs2NjYsNyBA
QCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiAjZW5kaWYKIAogICAg
ICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVy
cyAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEpOwotICAgICAg
ICBzdGFja0NoZWNrID0gYnJhbmNoUHRyKEJlbG93LCBBYnNvbHV0ZUFkZHJlc3MobV9nbG9iYWxE
YXRhLT5pbnRlcnByZXRlci0+c3RhY2soKS5hZGRyZXNzT2ZFbmQoKSksIHJlZ1QxKTsKKyAgICAg
ICAgc3RhY2tDaGVjayA9IGJyYW5jaFB0cihCZWxvdywgQWJzb2x1dGVBZGRyZXNzKG1fdm0tPmlu
dGVycHJldGVyLT5zdGFjaygpLmFkZHJlc3NPZkVuZCgpKSwgcmVnVDEpOwogICAgIH0KIAogICAg
IExhYmVsIGZ1bmN0aW9uQm9keSA9IGxhYmVsKCk7CkBAIC03MTAsNyArNzEwLDcgQEAgSklUQ29k
ZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgogICAgIGlmIChtX2Rpc2Fzc2VtYmxl
cikKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsKIAotICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2ss
IGVmZm9ydCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2Rl
QmxvY2ssIGVmZm9ydCk7CiAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkp
CiAgICAgICAgIHJldHVybiBKSVRDb2RlKCk7CiAKQEAgLTgwOSw3ICs4MDksNyBAQCBKSVRDb2Rl
IEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiAgICAgCiAgICAgQ29kZVJlZiByZXN1
bHQgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkoKTsKICAgICAK
LSAgICBtX2dsb2JhbERhdGEtPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNl
bGluZUpJVC5hZGQoCisgICAgbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZv
ckJhc2VsaW5lSklULmFkZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihyZXN1bHQuc2l6
ZSgpKSAvCiAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLnNpemUoKSkpOwogICAgIApAQCAtODIyLDEzICs4MjIsMTMgQEAgSklUQ29kZSBKSVQ6
OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgogICAgIHJldHVybiBKSVRDb2RlKHJlc3VsdCwg
SklUQ29kZTo6QmFzZWxpbmVKSVQpOwogfQogCi12b2lkIEpJVDo6bGlua0ZvcihKU0Z1bmN0aW9u
KiBjYWxsZWUsIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGNhbGxlZUNv
ZGVCbG9jaywgSklUOjpDb2RlUHRyIGNvZGUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3Zv
aWQgSklUOjpsaW5rRm9yKEpTRnVuY3Rpb24qIGNhbGxlZSwgQ29kZUJsb2NrKiBjYWxsZXJDb2Rl
QmxvY2ssIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBKSVQ6OkNvZGVQdHIgY29kZSwgQ2Fs
bExpbmtJbmZvKiBjYWxsTGlua0luZm8sIFZNKiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBr
aW5kKQogewogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2sp
OwogCiAgICAgQVNTRVJUKCFjYWxsTGlua0luZm8tPmlzTGlua2VkKCkpOwotICAgIGNhbGxMaW5r
SW5mby0+Y2FsbGVlLnNldCgqZ2xvYmFsRGF0YSwgY2FsbExpbmtJbmZvLT5ob3RQYXRoQmVnaW4s
IGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7Ci0gICAgY2FsbExp
bmtJbmZvLT5sYXN0U2VlbkNhbGxlZS5zZXQoKmdsb2JhbERhdGEsIGNhbGxlckNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CisgICAgY2FsbExpbmtJbmZvLT5jYWxsZWUuc2V0
KCp2bSwgY2FsbExpbmtJbmZvLT5ob3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIGNhbGxlZSk7CisgICAgY2FsbExpbmtJbmZvLT5sYXN0U2VlbkNhbGxlZS5z
ZXQoKnZtLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwogICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+aG90UGF0aE90aGVyLCBjb2RlKTsK
IAogICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCkBAIC04MzksMjMgKzgzOSwyMyBAQCB2b2lkIEpJ
VDo6bGlua0ZvcihKU0Z1bmN0aW9uKiBjYWxsZWUsIENvCiAgICAgICAgIEFTU0VSVChjYWxsTGlu
a0luZm8tPmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q2FsbAogICAgICAgICAgICAgICAgfHwg
Y2FsbExpbmtJbmZvLT5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzKTsKICAg
ICAgICAgaWYgKGNhbGxMaW5rSW5mby0+Y2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZvOjpDYWxsKSB7
Ci0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1
cm5Mb2NhdGlvbiwgZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxHZW5lcmF0
b3IpLmNvZGUoKSk7CisgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0lu
Zm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsR2Vu
ZXJhdG9yKS5jb2RlKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24s
IGdsb2JhbERhdGEtPmdldENUSVN0dWIodmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7Cisg
ICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0
aW9uLCB2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3Qp
OwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0
aW9uLCBnbG9iYWxEYXRhLT5nZXRDVElTdHViKHZpcnR1YWxDb25zdHJ1Y3RHZW5lcmF0b3IpLmNv
ZGUoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJu
TG9jYXRpb24sIHZtLT5nZXRDVElTdHViKHZpcnR1YWxDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUo
KSk7CiB9CiAKIHZvaWQgSklUOjpsaW5rU2xvd0NhbGwoQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxv
Y2ssIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQogewogICAgIFJlcGF0Y2hCdWZmZXIgcmVw
YXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwogCi0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
Y2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGNhbGxlckNvZGVCbG9jay0+Z2xvYmFs
RGF0YSgpLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBjYWxs
ZXJDb2RlQmxvY2stPnZtKCktPmdldENUSVN0dWIodmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUo
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDIsODMgKzMwMiw4MyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwogCiAg
ICAgcHVibGljOgotICAgICAgICBzdGF0aWMgSklUQ29kZSBjb21waWxlKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVm
Zm9ydCwgQ29kZVB0ciogZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2sgPSAwKQorICAgICAgICBzdGF0
aWMgSklUQ29kZSBjb21waWxlKFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCwgQ29kZVB0ciogZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2sgPSAw
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSklUKGdsb2JhbERhdGEsIGNvZGVCbG9j
aykucHJpdmF0ZUNvbXBpbGUoZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2ssIGVmZm9ydCk7CisgICAg
ICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2spLnByaXZhdGVDb21waWxlKGZ1bmN0aW9u
RW50cnlBcml0eUNoZWNrLCBlZmZvcnQpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBz
dGF0aWMgdm9pZCBjb21waWxlQ2xvc3VyZUNhbGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2ssIENv
ZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGV4cGVjdGVkU3RydWN0dXJlLCBF
eGVjdXRhYmxlQmFzZSogZXhwZWN0ZWRFeGVjdXRhYmxlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
Y29kZVB0cikKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUNsb3N1cmVDYWxsKFZNKiB2bSwg
Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBD
b2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgU3RydWN0dXJlKiBleHBlY3RlZFN0cnVjdHVyZSwg
RXhlY3V0YWJsZUJhc2UqIGV4cGVjdGVkRXhlY3V0YWJsZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGNvZGVQdHIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY2Fs
bGVyQ29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNhbGxlckNvZGVCbG9jayk7
CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IGNhbGxMaW5rSW5mby0+Y29kZU9y
aWdpbi5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlQ2xvc3Vy
ZUNhbGwoY2FsbExpbmtJbmZvLCBjYWxsZWVDb2RlQmxvY2ssIGV4cGVjdGVkU3RydWN0dXJlLCBl
eHBlY3RlZEV4ZWN1dGFibGUsIGNvZGVQdHIpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGlj
IHZvaWQgY29tcGlsZUdldEJ5SWRQcm90byhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1
Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qs
IFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzKQorICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlR2V0QnlJZFByb3RvKFZNKiB2bSwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0
cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29kZUJs
b2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CiAgICAgICAgICAgICBq
aXQubV9ieXRlY29kZU9mZnNldCA9IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAg
ICAgaml0LnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHBy
b3RvdHlwZVN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIGNhY2hlZE9mZnNldCwgcmV0dXJuQWRkcmVz
cywgY2FsbEZyYW1lKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVH
ZXRCeUlkU2VsZkxpc3QoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCkKKyAgICAgICAgc3RhdGljIHZv
aWQgY29tcGlsZUdldEJ5SWRTZWxmTGlzdChWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0KQogICAgICAgICB7Ci0gICAgICAgICAgICBK
SVQgaml0KGdsb2JhbERhdGEsIGNvZGVCbG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBj
b2RlQmxvY2spOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxm
TGlzdChzdHViSW5mbywgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLCBjdXJyZW50SW5kZXgsIHN0cnVj
dHVyZSwgaWRlbnQsIHNsb3QsIGNhY2hlZE9mZnNldCk7CiAgICAgICAgIH0KLSAgICAgICAgc3Rh
dGljIHZvaWQgY29tcGlsZUdldEJ5SWRQcm90b0xpc3QoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5
cGVTdHJ1Y3R1cmVMaXN0LCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
U3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCkKKyAg
ICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5SWRQcm90b0xpc3QoVk0qIHZtLCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1
cmVMaXN0LCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJl
KiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCkKICAgICAgICAgewot
ICAgICAgICAgICAgSklUIGppdChnbG9iYWxEYXRhLCBjb2RlQmxvY2spOworICAgICAgICAgICAg
SklUIGppdCh2bSwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0
ID0gc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBp
bGVHZXRCeUlkUHJvdG9MaXN0KHN0dWJJbmZvLCBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCBjdXJy
ZW50SW5kZXgsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlLCBpZGVudCwgc2xvdCwgY2Fj
aGVkT2Zmc2V0LCBjYWxsRnJhbWUpOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNv
bXBpbGVHZXRCeUlkQ2hhaW5MaXN0KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJl
TGlzdCwgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNo
YWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQpCisgICAgICAg
IHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KFZNKiB2bSwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlTGlz
dCwgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAg
IEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNl
dCA9IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21w
aWxlR2V0QnlJZENoYWluTGlzdChzdHViSW5mbywgcHJvdG90eXBlU3RydWN0dXJlTGlzdCwgY3Vy
cmVudEluZGV4LCBzdHJ1Y3R1cmUsIGNoYWluLCBjb3VudCwgaWRlbnQsIHNsb3QsIGNhY2hlZE9m
ZnNldCwgY2FsbEZyYW1lKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBp
bGVHZXRCeUlkQ2hhaW4oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9w
ZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykK
KyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5SWRDaGFpbihWTSogdm0sIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXpl
X3QgY291bnQsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzKQogICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KGdsb2JhbERhdGEsIGNvZGVC
bG9jayk7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwogICAgICAgICAgICAg
aml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAg
ICAgIGppdC5wcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihzdHViSW5mbywgc3RydWN0dXJlLCBj
aGFpbiwgY291bnQsIGlkZW50LCBzbG90LCBjYWNoZWRPZmZzZXQsIHJldHVybkFkZHJlc3MsIGNh
bGxGcmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBp
bGVQdXRCeUlkVHJhbnNpdGlvbihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogb2xkU3Ry
dWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zm
c2V0LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgYm9vbCBkaXJlY3QpCisgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeUlkVHJhbnNp
dGlvbihWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwg
UHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgYm9vbCBkaXJlY3QpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBq
aXQodm0sIGNvZGVCbG9jayk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IHN0
dWJJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0
QnlJZFRyYW5zaXRpb24oc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjYWNo
ZWRPZmZzZXQsIGNoYWluLCByZXR1cm5BZGRyZXNzLCBkaXJlY3QpOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlR2V0QnlWYWwoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKKyAg
ICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5VmFsKFZNKiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBq
aXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVC
bG9jayk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IGJ5VmFsSW5mby0+Ynl0
ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUdldEJ5VmFsKGJ5VmFs
SW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0
YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVC
bG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQorICAgICAgICBzdGF0aWMgdm9p
ZCBjb21waWxlUHV0QnlWYWwoVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZv
KiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2Rl
IGFycmF5TW9kZSkKICAgICAgICAgewotICAgICAgICAgICAgSklUIGppdChnbG9iYWxEYXRhLCBj
b2RlQmxvY2spOworICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKICAgICAgICAg
ICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAg
ICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWwoYnlWYWxJbmZvLCByZXR1cm5BZGRy
ZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIENvZGVSZWYgY29t
cGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlv
biBmdW5jKQorICAgICAgICBzdGF0aWMgQ29kZVJlZiBjb21waWxlQ1RJTmF0aXZlQ2FsbChWTSog
dm0sIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghZ2xv
YmFsRGF0YS0+Y2FuVXNlSklUKCkpIHsKKyAgICAgICAgICAgIGlmICghdm0tPmNhblVzZUpJVCgp
KSB7CiAjaWYgRU5BQkxFKExMSU5UKQogICAgICAgICAgICAgICAgIHJldHVybiBDb2RlUmVmOjpj
cmVhdGVMTEludENvZGVSZWYobGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZSk7CiAjZWxzZQog
ICAgICAgICAgICAgICAgIHJldHVybiBDb2RlUmVmKCk7CiAjZW5kaWYKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgMCk7Ci0gICAgICAgICAgICByZXR1cm4g
aml0LnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBmdW5jKTsKKyAgICAg
ICAgICAgIEpJVCBqaXQodm0sIDApOworICAgICAgICAgICAgcmV0dXJuIGppdC5wcml2YXRlQ29t
cGlsZUNUSU5hdGl2ZUNhbGwodm0sIGZ1bmMpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGlj
IHZvaWQgcmVzZXRQYXRjaEdldEJ5SWQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZv
Kik7CkBAIC0zODYsOSArMzg2LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyB2
b2lkIHBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qLCBTdHJ1
Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIpOwog
ICAgICAgICBzdGF0aWMgdm9pZCBwYXRjaFB1dEJ5SWRSZXBsYWNlKENvZGVCbG9jayosIFN0cnVj
dHVyZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBS
ZXR1cm5BZGRyZXNzUHRyLCBib29sIGRpcmVjdCk7CiAKLSAgICAgICAgc3RhdGljIHZvaWQgY29t
cGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQorICAgICAgICBz
dGF0aWMgdm9pZCBjb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChWTSogdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpJ
VCBqaXQodm0sIGNvZGVCbG9jayk7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgICAgICAv
LyBGb3JjZSBwcm9maWxpbmcgdG8gYmUgZW5hYmxlZCBkdXJpbmcgc3R1YiBnZW5lcmF0aW9uLgog
ICAgICAgICAgICAgaml0Lm1fY2FuQmVPcHRpbWl6ZWQgPSB0cnVlOwpAQCAtMzk4LDExICszOTgs
MTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gaml0LnByaXZhdGVDb21w
aWxlUGF0Y2hHZXRBcnJheUxlbmd0aChyZXR1cm5BZGRyZXNzKTsKICAgICAgICAgfQogCi0gICAg
ICAgIHN0YXRpYyB2b2lkIGxpbmtGb3IoSlNGdW5jdGlvbiogY2FsbGVlLCBDb2RlQmxvY2sqIGNh
bGxlckNvZGVCbG9jaywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIENvZGVQdHIsIENhbGxM
aW5rSW5mbyosIEpTR2xvYmFsRGF0YSosIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgICAg
ICBzdGF0aWMgdm9pZCBsaW5rRm9yKEpTRnVuY3Rpb24qIGNhbGxlZSwgQ29kZUJsb2NrKiBjYWxs
ZXJDb2RlQmxvY2ssIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBDb2RlUHRyLCBDYWxsTGlu
a0luZm8qLCBWTSosIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgICAgICBzdGF0aWMgdm9p
ZCBsaW5rU2xvd0NhbGwoQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2ssIENhbGxMaW5rSW5mbyop
OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgSklUKEpTR2xvYmFsRGF0YSosIENvZGVCbG9jayog
PSAwKTsKKyAgICAgICAgSklUKFZNKiwgQ29kZUJsb2NrKiA9IDApOwogCiAgICAgICAgIHZvaWQg
cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTGlu
a1Bhc3MoKTsKQEAgLTQyMSw4ICs0MjEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJ
VEFycmF5TW9kZSk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbElu
Zm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwogCi0gICAgICAgIExhYmVsIHBy
aXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqLCBib29sIGlzQ29uc3RydWN0
ID0gZmFsc2UpOwotICAgICAgICBDb2RlUmVmIHByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChK
U0dsb2JhbERhdGEqLCBOYXRpdmVGdW5jdGlvbik7CisgICAgICAgIExhYmVsIHByaXZhdGVDb21w
aWxlQ1RJTmF0aXZlQ2FsbChWTSosIGJvb2wgaXNDb25zdHJ1Y3QgPSBmYWxzZSk7CisgICAgICAg
IENvZGVSZWYgcHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKFZNKiwgTmF0aXZlRnVuY3Rpb24p
OwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGlzRGlyZWN0
UHV0QnlJZChTdHJ1Y3R1cmVTdHViSW5mbyopOwpAQCAtODk2LDcgKzg5Niw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogI2VuZGlmCiAKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7Ci0g
ICAgICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworICAgICAgICBWTSogbV92bTsKICAg
ICAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKIAogICAgICAgICBWZWN0b3I8Q2FsbFJlY29y
ZD4gbV9jYWxsczsKQEAgLTkzNSw3ICs5MzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
T3duUHRyPEpJVERpc2Fzc2VtYmxlcj4gbV9kaXNhc3NlbWJsZXI7CiAgICAgICAgIFJlZlB0cjxQ
cm9maWxlcjo6Q29tcGlsYXRpb24+IG1fY29tcGlsYXRpb247CiAgICAgICAgIFdlYWtSYW5kb20g
bV9yYW5kb21HZW5lcmF0b3I7Ci0gICAgICAgIHN0YXRpYyBDb2RlUmVmIHN0cmluZ0dldEJ5VmFs
U3R1YkdlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICAgICAgc3RhdGljIENvZGVSZWYgc3Ry
aW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKFZNKik7CiAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklM
RVIpCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTYyLDcgKzE2Miw3IEBAIHZvaWQgSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoSW5zdHJ1Y3Rpb24K
ICAgICAgICAgYWRkUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMyk7CiAgICAgICAgIC8vIHJl
Z1QzOiBuZXdDYWxsRnJhbWUKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoUHRyKEJl
bG93LCBBYnNvbHV0ZUFkZHJlc3MobV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+c3RhY2soKS5h
ZGRyZXNzT2ZFbmQoKSksIHJlZ1QzKSk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hQ
dHIoQmVsb3csIEFic29sdXRlQWRkcmVzcyhtX3ZtLT5pbnRlcnByZXRlci0+c3RhY2soKS5hZGRy
ZXNzT2ZFbmQoKSksIHJlZ1QzKSk7CiAKICAgICAgICAgLy8gSW5pdGlhbGl6ZSBBcmd1bWVudENv
dW50LgogICAgICAgICBzdG9yZTMyKHJlZ1QyLCBwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50
Q291bnQsIHJlZ1QzKSk7CkBAIC0yMTUsNyArMjE1LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxs
RXZhbFNsb3dDYXNlKFZlY3RvcgogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAogICAgIGVtaXRM
b2FkKEpTU3RhY2s6OkNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0TmFrZWRDYWxsKG1f
Z2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAg
ICBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIodmlydHVhbENhbGxHZW5lcmF0b3IpLmNv
ZGUoKSk7CiAKICAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOwogfQpAQCAtMzAwLDcg
KzMwMCw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQKICAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgIAotICAgIG1f
Y2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxS
ZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8g
bV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6
IG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAg
ICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5j
YWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG9wY29kZUlEID09IG9wX2NvbnN0cnVj
dCA/IG1fdm0tPmdldENUSVN0dWIobGlua0NvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpIDogbV92
bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKIAogICAgIHNhbXBsZUNv
ZGVCbG9jayhtX2NvZGVCbG9jayk7CiB9CkBAIC0zMjQsMTEgKzMyNCwxMSBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2FsbChDYWxsCiAgICAgcmVzdG9yZVJldHVybkFkZHJlc3NC
ZWZvcmVSZXR1cm4ocmVnVDIpOwogICAgIEp1bXAgc2xvdyA9IGp1bXAoKTsKICAgICAKLSAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsK
KyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7CiAg
ICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihjb2RlUHRyLmV4ZWN1
dGFibGVBZGRyZXNzKCkpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5m
by0+aG90UGF0aE90aGVyLmxhYmVsQXRPZmZzZXQoMCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmso
c2xvdywgQ29kZUxvY2F0aW9uTGFiZWwobV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKHZpcnR1YWxD
YWxsR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVM
b2NhdGlvbkxhYmVsKG1fdm0tPmdldENUSVN0dWIodmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUo
KSkpOwogICAgIAogICAgIFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lPiBzdHViUm91dGlu
ZSA9IGFkb3B0UmVmKG5ldyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAogICAgICAgICBGSU5BTEla
RV9DT0RFKApAQCAtMzM4LDcgKzMzOCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNsb3N1
cmVDYWxsKENhbGwKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmhvdFBhdGhPdGhlci5s
YWJlbEF0T2Zmc2V0KDApLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgICAgICAgICAgY29k
ZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhwb2lu
dGVyRHVtcChjYWxsZWVDb2RlQmxvY2spKS5kYXRhKCkpKSwKLSAgICAgICAgKm1fZ2xvYmFsRGF0
YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleHBlY3RlZFN0cnVjdHVyZSwgZXhw
ZWN0ZWRFeGVjdXRhYmxlLAorICAgICAgICAqbV92bSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBleHBlY3RlZFN0cnVjdHVyZSwgZXhwZWN0ZWRFeGVjdXRhYmxlLAogICAgICAgICBj
YWxsTGlua0luZm8tPmNvZGVPcmlnaW4pKTsKICAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIobV9jb2RlQmxvY2spOwpAQCAtMzQ2LDcgKzM0Niw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUNsb3N1cmVDYWxsKENhbGwKICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRo
SnVtcCgKICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9u
UmVnaXN0ZXIoY2FsbExpbmtJbmZvLT5ob3RQYXRoQmVnaW4pLAogICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBtX2dsb2JhbERhdGEtPmdl
dENUSVN0dWIodmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIG1fdm0tPmdldENUSVN0
dWIodmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAgCiAgICAgY2FsbExpbmtJbmZv
LT5zdHViID0gc3R1YlJvdXRpbmUucmVsZWFzZSgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHZv
aWQgSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoSW5zdHJ1Y3Rpb24KICAgICAgICAgYWRkUHRyKGNh
bGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CiAgICAgICAgIC8vIHJlZ1QxOiBuZXdDYWxsRnJhbWUK
IAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoUHRyKEJlbG93LCBBYnNvbHV0ZUFkZHJl
c3MobV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+c3RhY2soKS5hZGRyZXNzT2ZFbmQoKSksIHJl
Z1QxKSk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hQdHIoQmVsb3csIEFic29sdXRl
QWRkcmVzcyhtX3ZtLT5pbnRlcnByZXRlci0+c3RhY2soKS5hZGRyZXNzT2ZFbmQoKSksIHJlZ1Qx
KSk7CiAKICAgICAgICAgLy8gSW5pdGlhbGl6ZSBBcmd1bWVudENvdW50LgogICAgICAgICBzdG9y
ZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1N0YWNrOjpBcmd1bWVudENvdW50ICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lk
IEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoVmVjdG9yCiAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOwogCiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NChKU1N0YWNrOjpDYWxsZWUs
IHJlZ1QwKTsKLSAgICBlbWl0TmFrZWRDYWxsKG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih2aXJ0
dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENU
SVN0dWIodmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAKICAgICBzYW1wbGVDb2RlQmxv
Y2sobV9jb2RlQmxvY2spOwogfQpAQCAtMjIwLDcgKzIyMCw3IEBAIHZvaWQgSklUOjpjb21waWxl
T3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQKIAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICAK
LSAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG9wY29kZUlEID09IG9wX2NvbnN0
cnVjdCA/IG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0R2VuZXJhdG9yKS5j
b2RlKCkgOiBtX2dsb2JhbERhdGEtPmdldENUSVN0dWIobGlua0NhbGxHZW5lcmF0b3IpLmNvZGUo
KSk7CisgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9j
b25zdHJ1Y3QgPyBtX3ZtLT5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUo
KSA6IG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAKICAgICBz
YW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOwogfQpAQCAtMjQ0LDExICsyNDQsMTEgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlQ2xvc3VyZUNhbGwoQ2FsbAogICAgIHJlc3RvcmVSZXR1cm5B
ZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QyKTsKICAgICBKdW1wIHNsb3cgPSBqdW1wKCk7CiAgICAg
Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVC
bG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxv
Y2spOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIoY29kZVB0
ci5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxs
TGlua0luZm8tPmhvdFBhdGhPdGhlci5sYWJlbEF0T2Zmc2V0KDApKTsKLSAgICBwYXRjaEJ1ZmZl
ci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsKG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1Yih2
aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93
LCBDb2RlTG9jYXRpb25MYWJlbChtX3ZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9y
KS5jb2RlKCkpKTsKICAgICAKICAgICBSZWZQdHI8Q2xvc3VyZUNhbGxTdHViUm91dGluZT4gc3R1
YlJvdXRpbmUgPSBhZG9wdFJlZihuZXcgQ2xvc3VyZUNhbGxTdHViUm91dGluZSgKICAgICAgICAg
RklOQUxJWkVfQ09ERSgKQEAgLTI1OCw3ICsyNTgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVDbG9zdXJlQ2FsbChDYWxsCiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5ob3RQYXRo
T3RoZXIubGFiZWxBdE9mZnNldCgwKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAg
ICAgIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICB0b0NTdHJp
bmcocG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSkuZGF0YSgpKSksCi0gICAgICAgICptX2ds
b2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhwZWN0ZWRTdHJ1Y3R1
cmUsIGV4cGVjdGVkRXhlY3V0YWJsZSwKKyAgICAgICAgKm1fdm0sIG1fY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgZXhwZWN0ZWRTdHJ1Y3R1cmUsIGV4cGVjdGVkRXhlY3V0YWJsZSwKICAg
ICAgICAgY2FsbExpbmtJbmZvLT5jb2RlT3JpZ2luKSk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKQEAgLTI2Niw3ICsyNjYsNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2FsbChDYWxsCiAgICAgcmVwYXRjaEJ1ZmZlci5yZXBs
YWNlV2l0aEp1bXAoCiAgICAgICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRo
UGF0Y2hPblJlZ2lzdGVyKGNhbGxMaW5rSW5mby0+aG90UGF0aEJlZ2luKSwKICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgbV9nbG9iYWxE
YXRhLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBtX3ZtLT5n
ZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogICAgIAogICAgIGNhbGxM
aW5rSW5mby0+c3R1YiA9IHN0dWJSb3V0aW5lLnJlbGVhc2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAog
bmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoSklUKQotICAgIGNsYXNzIEpTR2xvYmFsRGF0
YTsKKyAgICBjbGFzcyBWTTsKICAgICBjbGFzcyBKU1N0YWNrOwogI2VuZGlmCiAgICAgCkBAIC0x
MzAsMTAgKzEzMCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShKSVQpCiAgICAg
ICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGUhCi0gICAgICAgIGlubGluZSBKU1ZhbHVlIGV4ZWN1dGUo
SlNTdGFjayogc3RhY2ssIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEpCisgICAgICAgIGlubGluZSBKU1ZhbHVlIGV4ZWN1dGUoSlNTdGFjayogc3RhY2ssIENh
bGxGcmFtZSogY2FsbEZyYW1lLCBWTSogdm0pCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTVmFs
dWUgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKGN0aVRyYW1wb2xpbmUobV9yZWYuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCksIHN0YWNrLCBjYWxsRnJhbWUsIDAsIDAsIGdsb2JhbERhdGEpKTsK
LSAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5leGNlcHRpb24gPyBqc051bGwoKSA6IHJl
c3VsdDsKKyAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKGN0aVRy
YW1wb2xpbmUobV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIHN0YWNrLCBjYWxsRnJh
bWUsIDAsIDAsIHZtKSk7CisgICAgICAgICAgICByZXR1cm4gdm0tPmV4Y2VwdGlvbiA/IGpzTnVs
bCgpIDogcmVzdWx0OwogICAgICAgICB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVREcml2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVERyaXZlci5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVERyaXZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMiArNDAsMTIgQEAg
bmFtZXNwYWNlIEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgogaW5saW5l
IGJvb2wgaml0Q29tcGlsZUlmQXBwcm9wcmlhdGUoRXhlY1N0YXRlKiBleGVjLCBPd25QdHI8Q29k
ZUJsb2NrVHlwZT4mIGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwgSklUQ29kZTo6SklUVHlw
ZSBqaXRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBKSVRDb21waWxhdGlvbkVmZm9ydCBl
ZmZvcnQpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgCiAgICAgaWYgKGppdFR5cGUgPT0g
Y29kZUJsb2NrLT5nZXRKSVRUeXBlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAotICAg
IGlmICghZ2xvYmFsRGF0YS5jYW5Vc2VKSVQoKSkKKyAgICBpZiAoIXZtLmNhblVzZUpJVCgpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICBjb2RlQmxvY2stPnVubGlua0luY29taW5n
Q2FsbHMoKTsKQEAgLTY0LDcgKzY0LDcgQEAgaW5saW5lIGJvb2wgaml0Q29tcGlsZUlmQXBwcm9w
cmlhdGUoRXhlYwogICAgICAgICAgICAgaml0Q29kZSA9IG9sZEpJVENvZGU7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgaml0Q29kZSA9IEpJVDo6Y29tcGls
ZSgmZ2xvYmFsRGF0YSwgY29kZUJsb2NrLmdldCgpLCBlZmZvcnQpOworICAgICAgICBqaXRDb2Rl
ID0gSklUOjpjb21waWxlKCZ2bSwgY29kZUJsb2NrLmdldCgpLCBlZmZvcnQpOwogICAgICAgICBp
ZiAoIWppdENvZGUpIHsKICAgICAgICAgICAgIGppdENvZGUgPSBvbGRKSVRDb2RlOwogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzcsMTIgKzc3LDEyIEBAIGlubGluZSBib29sIGppdENv
bXBpbGVJZkFwcHJvcHJpYXRlKEV4ZWMKIAogaW5saW5lIGJvb2wgaml0Q29tcGlsZUZ1bmN0aW9u
SWZBcHByb3ByaWF0ZShFeGVjU3RhdGUqIGV4ZWMsIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4m
IGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRD
b2RlV2l0aEFyaXR5Q2hlY2ssIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIAogICAgIGlmIChqaXRUeXBlID09IGNvZGVCbG9jay0+Z2V0SklUVHlwZSgp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKLSAgICBpZiAoIWdsb2JhbERhdGEuY2FuVXNl
SklUKCkpCisgICAgaWYgKCF2bS5jYW5Vc2VKSVQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgCiAgICAgY29kZUJsb2NrLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7CkBAIC0xMDMsNyArMTAz
LDcgQEAgaW5saW5lIGJvb2wgaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaQogICAgICAgICAg
ICAgaml0Q29kZVdpdGhBcml0eUNoZWNrID0gb2xkSklUQ29kZVdpdGhBcml0eUNoZWNrOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIGppdENvZGUgPSBKSVQ6
OmNvbXBpbGUoJmdsb2JhbERhdGEsIGNvZGVCbG9jay5nZXQoKSwgZWZmb3J0LCAmaml0Q29kZVdp
dGhBcml0eUNoZWNrKTsKKyAgICAgICAgaml0Q29kZSA9IEpJVDo6Y29tcGlsZSgmdm0sIGNvZGVC
bG9jay5nZXQoKSwgZWZmb3J0LCAmaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKICAgICAgICAgaWYg
KCFqaXRDb2RlKSB7CiAgICAgICAgICAgICBqaXRDb2RlID0gb2xkSklUQ29kZTsKICAgICAgICAg
ICAgIGppdENvZGVXaXRoQXJpdHlDaGVjayA9IG9sZEpJVENvZGVXaXRoQXJpdHlDaGVjazsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAkocmV2aXNp
b24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjAgKzMwLDIwIEBACiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCi0j
aW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJPcGVy
YXRpb25zLmgiCiAKICNpZiBFTkFCTEUoSklUKSB8fCBFTkFCTEUoTExJTlQpCiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1FeGNlcHRpb25IYW5kbGVyIGdlbmVyaWNUaHJvdyhKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIEV4ZWNTdGF0ZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCB1
bnNpZ25lZCB2UENJbmRleCkKK0V4Y2VwdGlvbkhhbmRsZXIgZ2VuZXJpY1Rocm93KFZNKiB2bSwg
RXhlY1N0YXRlKiBjYWxsRnJhbWUsIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUsIHVuc2lnbmVkIHZQ
Q0luZGV4KQogewogICAgIFJFTEVBU0VfQVNTRVJUKGV4Y2VwdGlvblZhbHVlKTsKICAgICAKLSAg
ICBnbG9iYWxEYXRhLT5leGNlcHRpb24gPSBKU1ZhbHVlKCk7Ci0gICAgSGFuZGxlckluZm8qIGhh
bmRsZXIgPSBnbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+dGhyb3dFeGNlcHRpb24oY2FsbEZyYW1l
LCBleGNlcHRpb25WYWx1ZSwgdlBDSW5kZXgpOyAvLyBUaGlzIG1heSB1cGRhdGUgY2FsbEZyYW1l
ICYgZXhjZXB0aW9uVmFsdWUhCi0gICAgZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gZXhjZXB0aW9u
VmFsdWU7CisgICAgdm0tPmV4Y2VwdGlvbiA9IEpTVmFsdWUoKTsKKyAgICBIYW5kbGVySW5mbyog
aGFuZGxlciA9IHZtLT5pbnRlcnByZXRlci0+dGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBleGNl
cHRpb25WYWx1ZSwgdlBDSW5kZXgpOyAvLyBUaGlzIG1heSB1cGRhdGUgY2FsbEZyYW1lICYgZXhj
ZXB0aW9uVmFsdWUhCisgICAgdm0tPmV4Y2VwdGlvbiA9IGV4Y2VwdGlvblZhbHVlOwogCiAgICAg
dm9pZCogY2F0Y2hSb3V0aW5lOwogICAgIEluc3RydWN0aW9uKiBjYXRjaFBDRm9ySW50ZXJwcmV0
ZXIgPSAwOwpAQCAtNTMsMTggKzUzLDE4IEBAIEV4Y2VwdGlvbkhhbmRsZXIgZ2VuZXJpY1Rocm93
KEpTR2xvYmFsRGEKICAgICB9IGVsc2UKICAgICAgICAgY2F0Y2hSb3V0aW5lID0gRnVuY3Rpb25Q
dHIoTExJbnQ6OmdldENvZGVQdHIoY3RpT3BUaHJvd05vdENhdWdodCkpLnZhbHVlKCk7CiAgICAg
Ci0gICAgZ2xvYmFsRGF0YS0+Y2FsbEZyYW1lRm9yVGhyb3cgPSBjYWxsRnJhbWU7Ci0gICAgZ2xv
YmFsRGF0YS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cgPSBjYXRjaFJvdXRpbmU7Ci0gICAgZ2xv
YmFsRGF0YS0+dGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93ID0gY2F0Y2hQQ0ZvckludGVycHJl
dGVyOworICAgIHZtLT5jYWxsRnJhbWVGb3JUaHJvdyA9IGNhbGxGcmFtZTsKKyAgICB2bS0+dGFy
Z2V0TWFjaGluZVBDRm9yVGhyb3cgPSBjYXRjaFJvdXRpbmU7CisgICAgdm0tPnRhcmdldEludGVy
cHJldGVyUENGb3JUaHJvdyA9IGNhdGNoUENGb3JJbnRlcnByZXRlcjsKICAgICAKICAgICBSRUxF
QVNFX0FTU0VSVChjYXRjaFJvdXRpbmUpOwogICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9u
SGFuZGxlciA9IHsgY2F0Y2hSb3V0aW5lLCBjYWxsRnJhbWUgfTsKICAgICByZXR1cm4gZXhjZXB0
aW9uSGFuZGxlcjsKIH0KIAotRXhjZXB0aW9uSGFuZGxlciBqaXRUaHJvdyhKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIEV4ZWNTdGF0ZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVl
LCBSZXR1cm5BZGRyZXNzUHRyIGZhdWx0TG9jYXRpb24pCitFeGNlcHRpb25IYW5kbGVyIGppdFRo
cm93KFZNKiB2bSwgRXhlY1N0YXRlKiBjYWxsRnJhbWUsIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUs
IFJldHVybkFkZHJlc3NQdHIgZmF1bHRMb2NhdGlvbikKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1Ro
cm93KGdsb2JhbERhdGEsIGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCktPmJ5dGVjb2RlT2Zmc2V0KGNhbGxGcmFtZSwgZmF1bHRMb2NhdGlvbikpOworICAg
IHJldHVybiBnZW5lcmljVGhyb3codm0sIGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCktPmJ5dGVjb2RlT2Zmc2V0KGNhbGxGcmFtZSwgZmF1bHRMb2NhdGlv
bikpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlv
bnMuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRF
eGNlcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIG5hbWVzcGFjZSBK
U0MgewogCiBjbGFzcyBFeGVjU3RhdGU7Ci1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsK
IAogLy8gVGhpcyBoZWFkZXIgZ2l2ZXMgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhY2Nlc3Mg
dG8gdGhlIEpJVCdzIHByb3RvdG9jb2wKIC8vIGZvciB0aGUgdGhyb3dpbmcgYW5kIGhhbmRsaW5n
IGV4Y2VwdGlvbnMuCkBAIC00NCw5ICs0NCw5IEBAIHN0cnVjdCBFeGNlcHRpb25IYW5kbGVyIHsK
ICAgICBFeGVjU3RhdGUqIGNhbGxGcmFtZTsKIH07CiAKLUV4Y2VwdGlvbkhhbmRsZXIgZ2VuZXJp
Y1Rocm93KEpTR2xvYmFsRGF0YSosIEV4ZWNTdGF0ZSosIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUs
IHVuc2lnbmVkIHZQQ0luZGV4KTsKK0V4Y2VwdGlvbkhhbmRsZXIgZ2VuZXJpY1Rocm93KFZNKiwg
RXhlY1N0YXRlKiwgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgdW5zaWduZWQgdlBDSW5kZXgpOwog
Ci1FeGNlcHRpb25IYW5kbGVyIGppdFRocm93KEpTR2xvYmFsRGF0YSosIEV4ZWNTdGF0ZSosIEpT
VmFsdWUgZXhjZXB0aW9uVmFsdWUsIFJldHVybkFkZHJlc3NQdHIgZmF1bHRMb2NhdGlvbik7CitF
eGNlcHRpb25IYW5kbGVyIGppdFRocm93KFZNKiwgRXhlY1N0YXRlKiwgSlNWYWx1ZSBleGNlcHRp
b25WYWx1ZSwgUmV0dXJuQWRkcmVzc1B0ciBmYXVsdExvY2F0aW9uKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZp
c2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0R2V0RnJvbUNhbGxGCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRMb2FkQ2hhcmFj
dGVyU3RyaW5nKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCwgSnVtcExpc3QmIGZhaWx1
cmVzKQogewotICAgIGZhaWx1cmVzLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Mo
c3JjLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihtX2dsb2JhbERh
dGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICBmYWlsdXJlcy5hcHBlbmQoYnJhbmNo
UHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNyYywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRy
dXN0ZWRJbW1QdHIobV92bS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIGZhaWx1cmVz
LmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3JjLCBU
aHVua0hlbHBlcnM6OmpzU3RyaW5nTGVuZ3RoT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoMSkpKTsK
ICAgICBsb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNyYywgVGh1bmtIZWxwZXJzOjpq
c1N0cmluZ1ZhbHVlT2Zmc2V0KCkpLCBkc3QpOwogICAgIGZhaWx1cmVzLmFwcGVuZChicmFuY2hU
ZXN0MzIoWmVybywgZHN0KSk7CkBAIC0xODYsNyArMTg2LDcgQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6dXBkYXRlVG9wQ2FsbEZyYQogICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihtX2J5
dGVjb2RlT2Zmc2V0ICsgMSksIGludFRhZ0ZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CiAj
ZW5kaWYKICAgICB9Ci0gICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsICZtX2dsb2JhbERh
dGEtPnRvcENhbGxGcmFtZSk7CisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsICZtX3Zt
LT50b3BDYWxsRnJhbWUpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlQXJn
dW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDEsMTIgKzQxLDEyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1KSVQ6OkNvZGVSZWYgSklU
Ojpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBO
YXRpdmVGdW5jdGlvbiBmdW5jKQorSklUOjpDb2RlUmVmIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElO
YXRpdmVDYWxsKFZNKiB2bSwgTmF0aXZlRnVuY3Rpb24gZnVuYykKIHsKICAgICBDYWxsIG5hdGl2
ZUNhbGw7CiAKICAgICBlbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFkZXIoMCwgSlNTdGFj
azo6Q29kZUJsb2NrKTsKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgJm1fZ2xvYmFs
RGF0YS0+dG9wQ2FsbEZyYW1lKTsKKyAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgJm1f
dm0tPnRvcENhbGxGcmFtZSk7CiAKICNpZiBDUFUoWDg2KQogICAgIC8vIExvYWQgY2FsbGVyIGZy
YW1lJ3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNhbGxmcmFtZSBzbyB0aGF0IHdoYXRldmVyIHdl
IGNhbGwgY2FuCkBAIC0xNTQsNyArMTU0LDcgQEAgSklUOjpDb2RlUmVmIEpJVDo6cHJpdmF0ZUNv
bXBpbGVDVElOYXRpdgogI2VuZGlmIC8vIENQVShYODYpCiAKICAgICAvLyBDaGVjayBmb3IgYW4g
ZXhjZXB0aW9uCi0gICAgSnVtcCBzYXdFeGNlcHRpb24gPSBicmFuY2gzMihOb3RFcXVhbCwgQWJz
b2x1dGVBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZnbG9iYWxEYXRhLT5leGNlcHRp
b24pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOworICAgIEp1bXAgc2F3RXhjZXB0aW9uID0gYnJh
bmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNoYXIqPigm
dm0tPmV4Y2VwdGlvbikgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSks
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CiAKICAgICAvLyBSZXR1cm4u
CiAgICAgcmV0KCk7CkBAIC0xNjUsMTEgKzE2NSwxMSBAQCBKSVQ6OkNvZGVSZWYgSklUOjpwcml2
YXRlQ29tcGlsZUNUSU5hdGl2CiAgICAgLy8gR3JhYiB0aGUgcmV0dXJuIGFkZHJlc3MuCiAgICAg
cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QxKTsKIAotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cigmZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uTG9jYXRpb24pLCByZWdUMik7CisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKCZ2bS0+ZXhjZXB0aW9uTG9jYXRpb24pLCByZWdUMik7CiAgICAgc3Rv
cmVQdHIocmVnVDEsIHJlZ1QyKTsKICAgICBwb2tlKGNhbGxGcmFtZVJlZ2lzdGVyLCBPQkpFQ1Rf
T0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGNhbGxGcmFtZSkgLyBzaXplb2Yodm9pZCop
KTsKICAgICAKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgJm1fZ2xvYmFsRGF0YS0+
dG9wQ2FsbEZyYW1lKTsKKyAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgJm1fdm0tPnRv
cENhbGxGcmFtZSk7CiAgICAgLy8gU2V0IHRoZSByZXR1cm4gYWRkcmVzcy4KICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoRnVuY3Rpb25QdHIoY3RpVk1UaHJvd1RyYW1wb2xpbmUpLnZhbHVlKCkpLCBy
ZWdUMSk7CiAgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDEpOwpAQCAt
MTc3LDcgKzE3Nyw3IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXYK
ICAgICByZXQoKTsKIAogICAgIC8vIEFsbCB0cmFtcG9saW5lcyBjb25zdHJ1Y3RlZCEgY29weSB0
aGUgY29kZSwgbGluayB1cCBjYWxscywgYW5kIHNldCB0aGUgcG9pbnRlcnMgb24gdGhlIE1hY2hp
bmUgb2JqZWN0LgotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhp
cywgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0
aGlzLCBHTE9CQUxfVEhVTktfSUQpOwogCiAgICAgcGF0Y2hCdWZmZXIubGluayhuYXRpdmVDYWxs
LCBGdW5jdGlvblB0cihmdW5jKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsICgiSklUIENUSSBuYXRpdmUgY2FsbCIpKTsKQEAgLTIxNSw3ICsyMTUsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uCiB7CiAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS0+
c3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNPYmplY3Q6OmFsbG9j
YXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgTWFya2VkQWxsb2Nh
dG9yKiBhbGxvY2F0b3IgPSAmbV9nbG9iYWxEYXRhLT5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdp
dGhvdXREZXN0cnVjdG9yKGFsbG9jYXRpb25TaXplKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFs
bG9jYXRvciA9ICZtX3ZtLT5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9y
KGFsbG9jYXRpb25TaXplKTsKIAogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAg
ICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKQEAgLTQxOSw3ICs0MTksNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoSW5zdHJ1Y3RpCiAgICAgZW1pdExvYWQoc3Jj
LCByZWdUMSwgcmVnVDApOwogCiAgICAgSnVtcCBpc0ltbSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkp
OworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobV92bS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSkpOwogICAgIGlzSW1tLmxpbmsodGhpcyk7CiAKICAgICBpZiAoZHN0ICE9IHNy
YykKQEAgLTY0Myw4ICs2NDMsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoSW5zdHJ1Y3Rp
b24qIGN1CiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gdGFn
cyBub3QgZXF1YWwKIAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdGFncyBlcXVhbCBhbmQg
SlNDZWxsCi0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobV9nbG9i
YWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5k
KGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIFRydXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkp
KSk7CisgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobV92bS0+c3Ry
aW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hQdHIo
Tm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tUHRyKG1fdm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKIAogICAgIC8vIFN0cmlu
ZyBjYXNlLgogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsRXFTdHJpbmdzKHRoaXMsIGN0aV9vcF9l
cV9zdHJpbmdzKTsKQEAgLTY5MSw4ICs2OTEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVx
KEluc3RydWN0aW9uKiBjCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIp
KTsgLy8gdGFncyBub3QgZXF1YWwKIAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdGFncyBl
cXVhbCBhbmQgSlNDZWxsCi0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVh
bCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1Q
dHIobV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgZ2VuZXJpY0Nh
c2UuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKSk7CisgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIo
bV92bS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgIGdlbmVyaWNDYXNlLmFwcGVuZChi
cmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tUHRyKG1fdm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKIAogICAg
IC8vIFN0cmluZyBjYXNlLgogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsRXFTdHJpbmdzKHRoaXMs
IGN0aV9vcF9lcV9zdHJpbmdzKTsKQEAgLTcyOCw4ICs3MjgsOCBAQCB2b2lkIEpJVDo6Y29tcGls
ZU9wU3RyaWN0RXEoSW5zdHJ1Y3Rpb24qCiAKICAgICAvLyBKdW1wIHRvIGEgc2xvdyBjYXNlIGlm
IGJvdGggYXJlIHN0cmluZ3MuCiAgICAgSnVtcCBub3RDZWxsID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwotICAgIEp1bXAgZmlyc3RO
b3RTdHJpbmcgPSBicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJl
Z1QyLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihtX2dsb2JhbERh
dGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICBKdW1wIGZpcnN0Tm90U3RyaW5nID0g
YnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgVHJ1c3RlZEltbVB0cihtX3ZtLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICBh
ZGRTbG93Q2FzZShicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1fdm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkp
KTsKICAgICBub3RDZWxsLmxpbmsodGhpcyk7CiAgICAgZmlyc3ROb3RTdHJpbmcubGluayh0aGlz
KTsKIApAQCAtMTAyMSwxMSArMTAyMSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0
cnVjdGlvbiogY3VyCiAgICAgbW92ZShyZWdUMCwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogCiAgICAg
Ly8gTm93IHN0b3JlIHRoZSBleGNlcHRpb24gcmV0dXJuZWQgYnkgY3RpX29wX3Rocm93LgotICAg
IGxvYWRQdHIoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKHN0
cnVjdCBKSVRTdGFja0ZyYW1lLCBnbG9iYWxEYXRhKSksIHJlZ1QzKTsKLSAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsRGF0YSwgZXhjZXB0aW9uKSArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsKLSAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsRGF0YSwgZXhjZXB0
aW9uKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOwot
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWUoKS5wYXlsb2FkKCkpLCBBZGRyZXNzKHJl
Z1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxEYXRhLCBleGNlcHRpb24pICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVk
SW1tMzIoSlNWYWx1ZSgpLnRhZygpKSwgQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpT
R2xvYmFsRGF0YSwgZXhjZXB0aW9uKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy50YWcpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBPQkpF
Q1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHZtKSksIHJlZ1QzKTsKKyAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKFZNLCBleGNlcHRpb24pICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOworICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoVk0sIGV4Y2VwdGlvbikgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsKKyAgICBzdG9yZTMyKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlKCkucGF5bG9hZCgpKSwgQWRkcmVzcyhyZWdUMywgT0JKRUNUX09G
RlNFVE9GKFZNLCBleGNlcHRpb24pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnBheWxvYWQpKSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZSgpLnRhZygpKSwg
QWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKFZNLCBleGNlcHRpb24pICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKIAogICAgIHVuc2lnbmVkIGV4Y2VwdGlv
biA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgZW1pdFN0b3JlKGV4Y2Vw
dGlvbiwgcmVnVDEsIHJlZ1QwKTsKQEAgLTEyMDAsNyArMTIwMCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2NvbnZlcnRfdGhpcyhJbnN0cnVjdGkKICAgICAgICAgbW92ZShyZWdUMywgcmVnVDEpOwog
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAgICAgfQotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksIFRydXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7
CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihtX3ZtLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9jb252ZXJ0X3RoaXMoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKQEAgLTEyMjMsNyArMTIyMyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jb252
ZXJ0X3RoaXMoSW5zdHIKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgaWYgKHNob3VsZEVt
aXRQcm9maWxpbmcoKSkgewogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSwgcmVnVDEpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5z
dHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpLCByZWdUMCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX3ZtLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpLCByZWdUMCk7CiAgICAgfQogICAgIGlzTm90
VW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxNDg2
ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw5ICs0Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFM
VUU2NCkKIAotSklUOjpDb2RlUmVmIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24pCitKSVQ6OkNvZGVSZWYgSklU
Ojpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoVk0qIHZtLCBOYXRpdmVGdW5jdGlvbikKIHsK
LSAgICByZXR1cm4gZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1YihuYXRpdmVDYWxsR2VuZXJhdG9yKTsK
KyAgICByZXR1cm4gdm0tPmdldENUSVN0dWIobmF0aXZlQ2FsbEdlbmVyYXRvcik7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX21vdihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
OTcsNyArOTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uCiB7
CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZS0+c3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9jYXRpb25T
aXplID0gSlNPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHko
KSk7Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmbV9nbG9iYWxEYXRhLT5oZWFw
LmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKGFsbG9jYXRpb25TaXplKTsKKyAg
ICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZtX3ZtLT5oZWFwLmFsbG9jYXRvckZvck9i
amVjdFdpdGhvdXREZXN0cnVjdG9yKGFsbG9jYXRpb25TaXplKTsKIAogICAgIFJlZ2lzdGVySUQg
cmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsK
QEAgLTM1MCw3ICszNTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoSW5zdHJ1
Y3RpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKICAgICAKICAgICBK
dW1wIGlzSW1tID0gZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgVHJ1c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkp
KTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1fdm0tPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKICAgICBpc0ltbS5saW5rKHRoaXMpOwogCiAgICAgaWYgKGRzdCAhPSBz
cmMpCkBAIC03MTMsOSArNzEzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rp
b24qIGN1cgogewogICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsgLy8gRklYTUU6IEltcGxp
Y2l0bHkgdHJlYXQgb3BfY2F0Y2ggYXMgYSBsYWJlbGVkIHN0YXRlbWVudCwgYW5kIHJlbW92ZSB0
aGlzIGxpbmUgb2YgY29kZS4KICAgICBtb3ZlKHJlZ1QwLCBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0g
ICAgcGVlayhyZWdUMywgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBnbG9i
YWxEYXRhKSAvIHNpemVvZih2b2lkKikpOwotICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNHbG9iYWxEYXRhLCBleGNlcHRpb24pKSwgcmVnVDApOwotICAgIHN0b3Jl
NjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgQWRkcmVzcyhyZWdU
MywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsRGF0YSwgZXhjZXB0aW9uKSkpOworICAgIHBlZWso
cmVnVDMsIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgdm0pIC8gc2l6ZW9m
KHZvaWQqKSk7CisgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihWTSwg
ZXhjZXB0aW9uKSksIHJlZ1QwKTsKKyAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKSksIEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihWTSwgZXhj
ZXB0aW9uKSkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCk7CiB9CiAKQEAgLTkxMCw3ICs5MTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jb252ZXJ0X3RoaXMoSW5zdHJ1Y3RpCiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QwKTsKICAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZSgpOwogICAgIH0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoRXF1YWwsIEFk
ZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1f
Z2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IFRydXN0ZWRJbW1QdHIobV92bS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfY2FsbGVlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC05ODEsNyArOTgxLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnZlcnRfdGhpcyhJ
bnN0cgogCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgIGlmIChzaG91bGRFbWl0UHJvZmls
aW5nKCkpCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShtX2dsb2Jh
bERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpLCByZWdUMCk7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShtX3ZtLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSwg
cmVnVDApOwogICAgIGlzTm90VW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZSgpOwogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9jb252
ZXJ0X3RoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MiwxMSArOTIsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKEluc3RydWN0
aW9uKgogICAgIHN0dWJDYWxsLmNhbGwoZHN0KTsKIH0KIAotSklUOjpDb2RlUmVmIEpJVDo6c3Ry
aW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK0pJVDo6
Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihWTSogdm0pCiB7CiAgICAg
SlNJbnRlcmZhY2VKSVQgaml0OwogICAgIEp1bXBMaXN0IGZhaWx1cmVzOwotICAgIGZhaWx1cmVz
LmFwcGVuZChqaXQuYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihnbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKSk7CisgICAgZmFpbHVyZXMuYXBwZW5kKGppdC5icmFuY2hQdHIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRy
KHZtLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgCiAgICAgLy8gTG9hZCBzdHJpbmcg
bGVuZ3RoIHRvIHJlZ1QxLCBhbmQgc3RhcnQgdGhlIHByb2Nlc3Mgb2YgbG9hZGluZyB0aGUgZGF0
YSBwb2ludGVyIGludG8gcmVnVDAKICAgICBqaXQubG9hZDMyKEFkZHJlc3MocmVnVDAsIFRodW5r
SGVscGVyczo6anNTdHJpbmdMZW5ndGhPZmZzZXQoKSksIHJlZ1QxKTsKQEAgLTEyMSw3ICsxMjEs
NyBAQCBKSVQ6OkNvZGVSZWYgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lCiAgICAgY29udDhC
aXQubGluaygmaml0KTsKICAgICAKICAgICBmYWlsdXJlcy5hcHBlbmQoaml0LmJyYW5jaDMyKEFi
b3ZlT3JFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMigweDEwMCkpKTsKLSAgICBqaXQubW92ZShU
cnVzdGVkSW1tUHRyKGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJp
bmdzKCkpLCByZWdUMSk7CisgICAgaml0Lm1vdmUoVHJ1c3RlZEltbVB0cih2bS0+c21hbGxTdHJp
bmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSksIHJlZ1QxKTsKICAgICBqaXQubG9hZFB0cihC
YXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBTY2FsZVB0ciwgMCksIHJlZ1QwKTsKICAgICBqaXQubW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QxKTsgLy8gV2UgbnVsbCBjaGVj
ayByZWdUMCBvbiByZXR1cm4gc28gdGhpcyBpcyBzYWZlCiAgICAgaml0LnJldCgpOwpAQCAtMTMw
LDcgKzEzMCw3IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmUKICAg
ICBqaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKICAgICBqaXQucmV0KCk7CiAgICAg
Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgR0xPQkFMX1RI
VU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RI
VU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJTdHJpbmcg
Z2V0X2J5X3ZhbCBzdHViIikpOwogfQogCkBAIC0yNDksOCArMjQ5LDggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV92YWwoSW5zdHJ1YwogCiAgICAgSnVtcCBub25DZWxsID0ganVtcCgp
OwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBhcnJheSBjaGVjawotICAgIEp1bXAg
bm90U3RyaW5nID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpOwotICAgIGVtaXROYWtlZENhbGwobV9nbG9iYWxEYXRhLT5nZXRDVElTdHVi
KHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcikuY29kZSgpKTsKKyAgICBKdW1wIG5vdFN0cmlu
ZyA9IGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobV92bS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7Cisg
ICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVy
YXRvcikuY29kZSgpKTsKICAgICBKdW1wIGZhaWxlZCA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmVn
VDApOwogICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2dldF9ieV92YWwpKTsKQEAgLTQ3Nyw3ICs0
NzcsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQYXRoKElkZW50aWZpCiAgICAgLy8g
dG8gYXJyYXktbGVuZ3RoIC8gcHJvdG90eXBlIGFjY2VzcyB0cmFucG9saW5lcywgYW5kIGZpbmFs
bHkgd2UgYWxzbyB0aGUgdGhlIHByb3BlcnR5LW1hcCBhY2Nlc3Mgb2Zmc2V0IGFzIGEgbGFiZWwK
ICAgICAvLyB0byBqdW1wIGJhY2sgdG8gaWYgb25lIG9mIHRoZXNlIHRyYW1wb2xpZXMgZmluZHMg
YSBtYXRjaC4KICAgICAKLSAgICBpZiAoKmlkZW50ID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlO
YW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgeworICAgIGlmICgqaWRlbnQg
PT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkg
ewogICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCByZWdUMik7CiAgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVGb3JCeXRlY29kZUlu
ZGV4KHJlZ1QyLCByZWdUMywgbV9ieXRlY29kZU9mZnNldCk7CiAgICAgfQpAQCAtNzA0LDcgKzcw
NCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICByZXN0
b3JlQXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCk7CiAgICAgQ2FsbCBmYWlsdXJlQ2Fs
bCA9IHRhaWxSZWN1cnNpdmVDYWxsKCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOwogICAgIAogICAgIHBhdGNoQnVmZmVy
LmxpbmsoZmFpbHVyZUNhbGwsIEZ1bmN0aW9uUHRyKGRpcmVjdCA/IGN0aV9vcF9wdXRfYnlfaWRf
ZGlyZWN0X2ZhaWwgOiBjdGlfb3BfcHV0X2J5X2lkX2ZhaWwpKTsKICAgICAKQEAgLTcxOCw3ICs3
MTgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvCiAgICAgICAg
ICAgICBwYXRjaEJ1ZmZlciwKICAgICAgICAgICAgICgiQmFzZWxpbmUgcHV0X2J5X2lkIHRyYW5z
aXRpb24gc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCiAgICAgICAgICAgICAgICAgdG9D
U3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpKSwKLSAg
ICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAgICAgKm1fdm0sCiAgICAgICAgIG1fY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAgICAgd2lsbE5lZWRTdG9yYWdlUmVhbGxvYywKICAg
ICAgICAgbmV3U3RydWN0dXJlKTsKQEAgLTc3Niw3ICs3NzYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
SW50MzJUYWcpLCByZWdUMSk7CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAgIAotICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2sp
OworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsK
ICAgICAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1
cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCiAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRp
b24ubGFiZWxBdE9mZnNldCgtc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmNvbGRQYXRo
QmVnaW4pOwpAQCAtODM5LDcgKzgzOSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRQcm90byhTdHIKICAgICAKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAgICAgCi0gICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jayk7
CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOwog
ICAgIAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVy
ZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KICAgICBDb2Rl
TG9jYXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KC1zdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuY29sZFBhdGhC
ZWdpbik7CkBAIC04NjQsNyArODY0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJ
ZFByb3RvKFN0cgogICAgICAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlfaWQgcHJvdG8gc3R1YiBm
b3IgJXMsIHJldHVybiBwb2ludCAlcCIsCiAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCptX2Nv
ZGVCbG9jaykuZGF0YSgpLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCiAg
ICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1
bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKLSAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAg
ICAgKm1fdm0sCiAgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAg
ICAgbmVlZHNTdHViTGluayk7CiAgICAgCkBAIC05MDcsNyArOTA3LDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAogCiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgp
OwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywg
bV9jb2RlQmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1f
Y29kZUJsb2NrKTsKICAgICBpZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBmb3IgKFZlY3Rv
cjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBt
X2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgIGlmIChpdGVyLT50bykKQEAgLTkz
MCwxMSArOTMwLDExIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgK
ICAgICAgICAgICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIHNlbGYgbGlzdCBzdHViIGZvciAlcywg
cmV0dXJuIHBvaW50ICVwIiwKICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKm1fY29kZUJsb2Nr
KS5kYXRhKCksIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKICAgICAgICAg
ICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSkpLAotICAgICAgICAqbV9nbG9iYWxEYXRhLAorICAgICAgICAqbV92
bSwKICAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICBuZWVk
c1N0dWJMaW5rKTsKIAotICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5k
ZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0
dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGlzRGlyZWN0KTsKKyAgICBwb2x5bW9ycGhpY1N0cnVjdHVy
ZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fdm0sIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgaXNEaXJlY3QpOwogICAgIAogICAgIC8v
IEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRo
IHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9u
ID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJh
c2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKQEAgLTk4MSw3ICs5ODEsNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0CiAgICAgCiAgICAgSnVtcCBzdWNjZXNz
ID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0
YSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0s
IHRoaXMsIG1fY29kZUJsb2NrKTsKICAgICBpZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBm
b3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsg
aXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgIGlmIChpdGVyLT50
bykKQEAgLTEwMDMsMTEgKzEwMDMsMTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJ
ZFByb3RvTGlzdAogICAgICAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlfaWQgcHJvdG8gbGlzdCBz
dHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKICAgICAgICAgICAgICAgICB0b0NTdHJpbmco
Km1fY29kZUJsb2NrKS5kYXRhKCksIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNl
dCgKICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1
dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAotICAgICAgICAqbV9nbG9iYWxEYXRhLAor
ICAgICAgICAqbV92bSwKICAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAog
ICAgICAgICBuZWVkc1N0dWJMaW5rKTsKIAotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3Rb
Y3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0
dXJlLCBpc0RpcmVjdCk7CisgICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5k
ZXhdLnNldChjYWxsRnJhbWUtPnZtKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
c3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlLCBpc0RpcmVjdCk7CiAg
ICAgCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0
aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBq
dW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5m
by0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwpAQCAtMTA2MCw3ICsxMDYw
LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdAogCiAgICAgSnVt
cCBzdWNjZXNzID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1f
Z2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKICAgICBpZiAobmVlZHNTdHViTGluaykgewog
ICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMu
YmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgIGlm
IChpdGVyLT50bykKQEAgLTEwODEsMTIgKzEwODEsMTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlR2V0QnlJZENoYWluTGlzdAogICAgICAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlfaWQgY2hh
aW4gbGlzdCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKICAgICAgICAgICAgICAgICB0
b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFi
ZWxBdE9mZnNldCgKICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5l
LnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAotICAgICAgICAqbV9nbG9i
YWxEYXRhLAorICAgICAgICAqbV92bSwKICAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLAogICAgICAgICBuZWVkc1N0dWJMaW5rKTsKICAgICAKICAgICAvLyBUcmFjayB0aGUg
c3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0g
ICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUt
Pmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGlu
ZSwgc3RydWN0dXJlLCBjaGFpbiwgaXNEaXJlY3QpOworICAgIHByb3RvdHlwZVN0cnVjdHVyZXMt
Pmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT52bSgpLCBtX2NvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGNoYWluLCBpc0RpcmVjdCk7
CiAgICAgCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBp
biB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVt
cCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHVi
SW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwpAQCAtMTEzNSw3ICsx
MTM1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cgogICAgICAg
ICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMSwgcmVnVDAsIGNhY2hl
ZE9mZnNldCk7CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKICAgICBpZiAo
bmVlZHNTdHViTGluaykgewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0
b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIp
IHsKICAgICAgICAgICAgIGlmIChpdGVyLT50bykKQEAgLTExNTUsNyArMTE1NSw3IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHIKICAgICAgICAgICAgICgiQmFzZWxp
bmUgZ2V0X2J5X2lkIGNoYWluIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAogICAgICAg
ICAgICAgICAgIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgc3R1YkluZm8tPmhvdFBh
dGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAogICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0
Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAg
ICAgICptX2dsb2JhbERhdGEsCisgICAgICAgICptX3ZtLAogICAgICAgICBtX2NvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgIG5lZWRzU3R1YkxpbmspOwogICAgIHN0dWJJbmZv
LT5zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MywxMSArNTMsMTEgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIG5hbWVzcGFjZSBK
U0MgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAKLUpJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5
VmFsU3R1YkdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitKSVQ6OkNvZGVSZWYg
SklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIEpTSW50ZXJm
YWNlSklUIGppdDsKICAgICBKdW1wTGlzdCBmYWlsdXJlczsKLSAgICBmYWlsdXJlcy5hcHBlbmQo
aml0LmJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgp
KSkpOworICAgIGZhaWx1cmVzLmFwcGVuZChqaXQuYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cih2bS0+c3Ry
aW5nU3RydWN0dXJlLmdldCgpKSkpOwogCiAgICAgLy8gTG9hZCBzdHJpbmcgbGVuZ3RoIHRvIHJl
Z1QyLCBhbmQgc3RhcnQgdGhlIHByb2Nlc3Mgb2YgbG9hZGluZyB0aGUgZGF0YSBwb2ludGVyIGlu
dG8gcmVnVDAKICAgICBqaXQubG9hZDMyKEFkZHJlc3MocmVnVDAsIFRodW5rSGVscGVyczo6anNT
dHJpbmdMZW5ndGhPZmZzZXQoKSksIHJlZ1QyKTsKQEAgLTgxLDcgKzgxLDcgQEAgSklUOjpDb2Rl
UmVmIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZQogICAgIGNvbnQ4Qml0LmxpbmsoJmppdCk7
CiAKICAgICBmYWlsdXJlcy5hcHBlbmQoaml0LmJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMigweDEwMCkpKTsKLSAgICBqaXQubW92ZShUcnVzdGVkSW1tUHRyKGdsb2Jh
bERhdGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpLCByZWdUMSk7Cisg
ICAgaml0Lm1vdmUoVHJ1c3RlZEltbVB0cih2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3Rl
clN0cmluZ3MoKSksIHJlZ1QxKTsKICAgICBqaXQubG9hZFB0cihCYXNlSW5kZXgocmVnVDEsIHJl
Z1QwLCBTY2FsZVB0ciwgMCksIHJlZ1QwKTsKICAgICBqaXQucmV0KCk7CiAgICAgCkBAIC04OSw3
ICs4OSw3IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmUKICAgICBq
aXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKICAgICBqaXQucmV0KCk7CiAgICAgCi0g
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgR0xPQkFMX1RIVU5L
X0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5L
X0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJTdHJpbmcgZ2V0
X2J5X3ZhbCBzdHViIikpOwogfQogCkBAIC0yMTAsOCArMjEwLDggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV92YWwoSW5zdHJ1YwogICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0
ZXIsIGJhc2UpOyAvLyBiYXNlIGNlbGwgY2hlY2sKICAgICBKdW1wIG5vbkNlbGwgPSBqdW1wKCk7
CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYXNlIGFycmF5IGNoZWNrCi0gICAgSnVtcCBu
b3RTdHJpbmcgPSBicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSk7Ci0gICAgZW1pdE5ha2VkQ2FsbChDb2RlTG9jYXRpb25MYWJlbChtX2dsb2Jh
bERhdGEtPmdldENUSVN0dWIoc3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKS5jb2RlKCkpKTsK
KyAgICBKdW1wIG5vdFN0cmluZyA9IGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobV92bS0+c3RyaW5nU3Ry
dWN0dXJlLmdldCgpKSk7CisgICAgZW1pdE5ha2VkQ2FsbChDb2RlTG9jYXRpb25MYWJlbChtX3Zt
LT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcikuY29kZSgpKSk7CiAgICAg
SnVtcCBmYWlsZWQgPSBicmFuY2hUZXN0NjQoWmVybywgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBP
UENPREVfTEVOR1RIKG9wX2dldF9ieV92YWwpKTsKQEAgLTUzNSw3ICs1MzUsNyBAQCB2b2lkIEpJ
VDo6Y29tcGlsZUdldEJ5SWRIb3RQYXRoKGludCBiYXNlCiAKICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKICAgICAKLSAgICBpZiAoKmlkZW50ID09IG1f
Z2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkgeworICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMSk7CiAgICAgICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVGb3JCeXRlY29kZUluZGV4KHJlZ1QxLCByZWdUMiwgbV9ieXRlY29kZU9mZnNldCk7
CiAgICAgfQpAQCAtNzQ2LDcgKzc0Niw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5
SWRUcmFuc2l0aW8KICAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCk7
CiAgICAgQ2FsbCBmYWlsdXJlQ2FsbCA9IHRhaWxSZWN1cnNpdmVDYWxsKCk7CiAKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7CiAKICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYWxsLCBGdW5jdGlvblB0cihkaXJlY3QgPyBjdGlf
b3BfcHV0X2J5X2lkX2RpcmVjdF9mYWlsIDogY3RpX29wX3B1dF9ieV9pZF9mYWlsKSk7CiAKQEAg
LTc2MCw3ICs3NjAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlv
CiAgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKICAgICAgICAgICAgICgiQmFzZWxpbmUgcHV0X2J5
X2lkIHRyYW5zaXRpb24gZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAogICAgICAgICAgICAgICAg
IHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKSks
Ci0gICAgICAgICptX2dsb2JhbERhdGEsCisgICAgICAgICptX3ZtLAogICAgICAgICBtX2NvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgIHdpbGxOZWVkU3RvcmFnZVJlYWxsb2Ms
CiAgICAgICAgIG5ld1N0cnVjdHVyZSk7CkBAIC04MTMsNyArODEzLDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbgogICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5v
Q2hlY2socmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKLSAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsK
KyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7CiAK
ICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2Fz
ZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCiAgICAgQ29kZUxvY2F0
aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldCgtc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmNvbGRQYXRoQmVnaW4p
OwpAQCAtODc1LDcgKzg3NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90
byhTdHIKICAgICB9IGVsc2UKICAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChwcm90b09i
amVjdCwgcmVnVDAsIGNhY2hlZE9mZnNldCk7CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwot
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxv
Y2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2Nr
KTsKIAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVy
ZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KICAgICBDb2Rl
TG9jYXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KC1zdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuY29sZFBhdGhC
ZWdpbik7CkBAIC04OTksNyArODk5LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJ
ZFByb3RvKFN0cgogICAgICAgICAgICAgKCJCYXNlbGluZSBKSVQgZ2V0X2J5X2lkIHByb3RvIHN0
dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAogICAgICAgICAgICAgICAgIHRvQ1N0cmluZygq
bV9jb2RlQmxvY2spLmRhdGEoKSwgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0
KAogICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0
UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICptX2dsb2JhbERhdGEsCisg
ICAgICAgICptX3ZtLAogICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCiAg
ICAgICAgIG5lZWRzU3R1YkxpbmspOwogCkBAIC05MzksNyArOTM5LDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAogICAgIH0KICAgICBKdW1wIHN1Y2Nlc3MgPSBq
dW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMs
IG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBt
X2NvZGVCbG9jayk7CiAKICAgICBpZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBmb3IgKFZl
Y3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAh
PSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKQEAgLTk2NCwxMSArOTY0LDExIEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKICAgICAgICAgICAgICgiQmFzZWxpbmUg
SklUIGdldF9ieV9pZCBsaXN0IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAogICAgICAg
ICAgICAgICAgIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgc3R1YkluZm8tPmhvdFBh
dGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAogICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0
Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAg
ICAgICptX2dsb2JhbERhdGEsCisgICAgICAgICptX3ZtLAogICAgICAgICBtX2NvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgIG5lZWRzU3R1YkxpbmspOwogCi0gICAgcG9seW1v
cnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERhdGEsIG1f
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkNvZGUsIHN0cnVjdHVyZSwgaXNEaXJl
Y3QpOworICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgq
bV92bSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViQ29kZSwgc3RydWN0dXJl
LCBpc0RpcmVjdCk7CiAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2Fz
ZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9j
YXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zm
c2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7CkBAIC0x
MDE0LDcgKzEwMTQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0
CiAKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7CiAKICAgICBpZiAobmVlZHNTdHVi
TGluaykgewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9
IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKQEAgLTEw
MzgsMTAgKzEwMzgsMTAgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlz
dAogICAgICAgICAgICAgKCJCYXNlbGluZSBKSVQgZ2V0X2J5X2lkIHByb3RvIGxpc3Qgc3R1YiBm
b3IgJXMsIHJldHVybiBwb2ludCAlcCIsCiAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCptX2Nv
ZGVCbG9jaykuZGF0YSgpLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCiAg
ICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1
bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKLSAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAg
ICAgKm1fdm0sCiAgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKICAgICAg
ICAgbmVlZHNTdHViTGluayk7Ci0gICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50
SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IHN0dWJDb2RlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSwgaXNEaXJlY3QpOworICAg
IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fdm0sIG1fY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkNvZGUsIHN0cnVjdHVyZSwgcHJvdG90eXBl
U3RydWN0dXJlLCBpc0RpcmVjdCk7CiAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRv
IHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAg
ICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4u
anVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVj
ayk7CkBAIC0xMDkyLDcgKzEwOTIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlk
Q2hhaW5MaXN0CiAgICAgfQogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKIAotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2spOworICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKICAgICAK
ICAgICBpZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3Jk
Pjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgp
OyArK2l0ZXIpIHsKQEAgLTExMTUsMTIgKzExMTUsMTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlR2V0QnlJZENoYWluTGlzdAogICAgICAgICAgICAgKCJCYXNlbGluZSBKSVQgZ2V0X2J5X2lk
IGNoYWluIGxpc3Qgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCiAgICAgICAgICAgICAg
ICAgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCBzdHViSW5mby0+aG90UGF0aEJlZ2lu
LmxhYmVsQXRPZmZzZXQoCiAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNl
bGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKLSAgICAgICAgKm1f
Z2xvYmFsRGF0YSwKKyAgICAgICAgKm1fdm0sCiAgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwKICAgICAgICAgbmVlZHNTdHViTGluayk7CiAKICAgICAvLyBUcmFjayB0aGUg
c3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0g
ICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUt
Pmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGlu
ZSwgc3RydWN0dXJlLCBjaGFpbiwgaXNEaXJlY3QpOworICAgIHByb3RvdHlwZVN0cnVjdHVyZXMt
Pmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT52bSgpLCBtX2NvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGNoYWluLCBpc0RpcmVjdCk7
CiAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRo
ZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1
bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZv
LT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7CkBAIC0xMTY4LDcgKzExNjgs
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RyCiAgICAgICAgIGNv
bXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJlZ1QwLCBjYWNoZWRPZmZzZXQpOwog
ICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
Km1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKIAogICAgIGlmIChuZWVkc1N0dWJMaW5r
KSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9j
YWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewpAQCAtMTE5MCw3
ICsxMTkwLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cgogICAg
ICAgICAgICAgKCJCYXNlbGluZSBKSVQgZ2V0X2J5X2lkIGNoYWluIHN0dWIgZm9yICVzLCByZXR1
cm4gcG9pbnQgJXAiLAogICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRh
dGEoKSwgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAogICAgICAgICAgICAg
ICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRh
YmxlQWRkcmVzcygpKSksCi0gICAgICAgICptX2dsb2JhbERhdGEsCisgICAgICAgICptX3ZtLAog
ICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgIG5lZWRzU3R1
YkxpbmspOwogICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwpAQCAtMTQx
NywzMSArMTQxNywzMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbElu
CiAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJhZFR5cGUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpJVEludDhBcnJh
eToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+aW50OEFycmF5RGVzY3JpcHRvcigp
LCAxLCBTaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVk
QXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDhBcnJh
eURlc2NyaXB0b3IoKSwgMSwgU2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSklUSW50MTZBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJy
YXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+aW50
MTZBcnJheURlc2NyaXB0b3IoKSwgMiwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgIHNsb3dD
YXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRU
eXBlLCBtX3ZtLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCAyLCBTaWduZWRUeXBlZEFycmF5KTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRJbnQzMkFycmF5OgotICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSwgbV9nbG9iYWxEYXRhLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBTaWduZWRUeXBlZEFy
cmF5KTsKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIDQs
IFNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpJVFVpbnQ4QXJy
YXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX2dsb2JhbERhdGEtPnVpbnQ4QXJyYXlEZXNjcmlwdG9y
KCksIDEsIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRU
eXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50
OEFycmF5RGVzY3JpcHRvcigpLCAxLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEpJVFVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBl
bWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV9n
bG9iYWxEYXRhLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRUeXBl
ZEFycmF5KTsKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3Jp
cHRvcigpLCAxLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEpJVFVpbnQxNkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdl
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT51aW50MTZB
cnJheURlc2NyaXB0b3IoKSwgMiwgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgc2xvd0Nh
c2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5
cGUsIG1fdm0tPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCAyLCBVbnNpZ25lZFR5cGVkQXJyYXkp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpJVFVpbnQzMkFycmF5OgotICAgICAgICBzbG93
Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFk
VHlwZSwgbV9nbG9iYWxEYXRhLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgVW5zaWduZWRU
eXBlZEFycmF5KTsKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZh
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQzMkFycmF5RGVzY3JpcHRv
cigpLCA0LCBVbnNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpJ
VEZsb2F0MzJBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheUdl
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT5mbG9hdDMy
QXJyYXlEZXNjcmlwdG9yKCksIDQpOworICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBl
ZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5mbG9hdDMy
QXJyYXlEZXNjcmlwdG9yKCksIDQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpJVEZsb2F0
NjRBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT5mbG9hdDY0QXJyYXlE
ZXNjcmlwdG9yKCksIDgpOworICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5
R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5mbG9hdDY0QXJyYXlE
ZXNjcmlwdG9yKCksIDgpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBD
UkFTSCgpOwpAQCAtMTQ0OSw3ICsxNDQ5LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0
QnlWYWwoQnlWYWxJbgogICAgIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2spOworICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKICAgICAK
ICAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3Mu
dmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0
aCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChN
YWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5B
ZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1Rv
U2xvd1BhdGgpKTsKQEAgLTE0ODYsMzEgKzE0ODYsMzEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlUHV0QnlWYWwoQnlWYWxJbgogICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdl
UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBKSVRJbnQ4QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFy
cmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX2dsb2JhbERhdGEtPmlu
dDhBcnJheURlc2NyaXB0b3IoKSwgMSwgU2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGlu
Zyk7CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIDEsIFNp
Z25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEpJVEludDE2QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5
UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX2dsb2JhbERhdGEtPmludDE2
QXJyYXlEZXNjcmlwdG9yKCksIDIsIFNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcp
OworICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgMiwgU2ln
bmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSklUSW50MzJBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQ
dXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+aW50MzJB
cnJheURlc2NyaXB0b3IoKSwgNCwgU2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7
CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudElu
c3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBTaWdu
ZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBKSVRVaW50OEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT51aW50OEFy
cmF5RGVzY3JpcHRvcigpLCAxLCBVbnNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcp
OworICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgMSwgVW5z
aWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBKSVRVaW50OENsYW1wZWRBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5
cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0
YS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIDEsIFVuc2lnbmVkVHlwZWRBcnJheSwg
Q2xhbXBSb3VuZGluZyk7CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0
QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50OENsYW1wZWRBcnJh
eURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFycmF5LCBDbGFtcFJvdW5kaW5nKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRVaW50MTZBcnJheToKLSAgICAgICAgc2xvd0Nhc2Vz
ID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUs
IG1fZ2xvYmFsRGF0YS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIsIFVuc2lnbmVkVHlwZWRB
cnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBl
ZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50MTZB
cnJheURlc2NyaXB0b3IoKSwgMiwgVW5zaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5n
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRVaW50MzJBcnJheToKLSAgICAgICAgc2xv
d0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJh
ZFR5cGUsIG1fZ2xvYmFsRGF0YS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIDQsIFVuc2lnbmVk
VHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJ
bnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51
aW50MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgVW5zaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJv
dW5kaW5nKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRGbG9hdDMyQXJyYXk6Ci0gICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCA0
KTsKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCA0
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRGbG9hdDY0QXJyYXk6Ci0gICAgICAgIHNs
b3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCA4KTsKKyAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCA4KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsKQEAgLTE1MTksNyAr
MTUxOSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAgICAK
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpt
X2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0
ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zm
c2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKICAgICBwYXRjaEJ1ZmZl
ci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFi
ZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyOCw3ICsyMjgsNyBAQCBDT01QSUxFX0FTU0VSVChvZmZzZXRvZihzdHJ1Y3QgSklUU3RhY2tG
CiAKIGV4dGVybiAiQyIgewogCi0gICAgX19kZWNsc3BlYyhuYWtlZCkgRW5jb2RlZEpTVmFsdWUg
Y3RpVHJhbXBvbGluZSh2b2lkKiBjb2RlLCBKU1N0YWNrKiwgQ2FsbEZyYW1lKiwgdm9pZCogLyp1
bnVzZWQxKi8sIHZvaWQqIC8qdW51c2VkMiovLCBKU0dsb2JhbERhdGEqKQorICAgIF9fZGVjbHNw
ZWMobmFrZWQpIEVuY29kZWRKU1ZhbHVlIGN0aVRyYW1wb2xpbmUodm9pZCogY29kZSwgSlNTdGFj
ayosIENhbGxGcmFtZSosIHZvaWQqIC8qdW51c2VkMSovLCB2b2lkKiAvKnVudXNlZDIqLywgVk0q
KQogICAgIHsKICAgICAgICAgX19hc20gewogICAgICAgICAgICAgcHVzaCBlYnA7CkBAIC0yOTEs
NyArMjkxLDcgQEAgZXh0ZXJuICJDIiB7CiAjZGVmaW5lIFNUQUNLX0xFTkdUSCAgICAgICAgICAg
ICAgIDExMgogI2VsaWYgQ1BVKFNINCkKICNkZWZpbmUgU1lNQk9MX1NUUklORyhuYW1lKSAjbmFt
ZQotLyogY29kZSAocjQpLCBKU1N0YWNrKiAocjUpLCBDYWxsRnJhbWUqIChyNiksIHZvaWQqIHVu
dXNlZDEgKHI3KSwgdm9pZCogdW51c2VkMihzcCksIEpTR2xvYmFsRGF0YSAoc3ApKi8KKy8qIGNv
ZGUgKHI0KSwgSlNTdGFjayogKHI1KSwgQ2FsbEZyYW1lKiAocjYpLCB2b2lkKiB1bnVzZWQxIChy
NyksIHZvaWQqIHVudXNlZDIoc3ApLCBWTSAoc3ApKi8KIAogYXNtIHZvbGF0aWxlICgKICIudGV4
dFxuIgpAQCAtNTQ1LDkgKzU0NSw5IEBAIFNZTUJPTF9TVFJJTkcoY3RpVHJhbXBvbGluZSkgIjoi
ICJcbiIKICAgICAibW92ZSAgJDE2LCQ2ICAgICAgICMgc2V0IGNhbGxGcmFtZVJlZ2lzdGVyIiAi
XG4iCiAgICAgIm1vdmUgICQyNSwkNCAgICAgICAjIG1vdmUgZXhlY3V0YWJsZUFkZHJlc3MgdG8g
dDkiICJcbiIKICAgICAic3cgICAgJDUsIiBTVFJJTkdJWkVfVkFMVUVfT0YoUkVHSVNURVJfRklM
RV9PRkZTRVQpICIoJDI5KSAjIHN0b3JlIEpTU3RhY2sgdG8gY3VycmVudCBzdGFjayIgIlxuIgot
ICAgICJsdyAgICAkOSwiIFNUUklOR0laRV9WQUxVRV9PRihTVEFDS19MRU5HVEggKyAyMCkgIigk
MjkpICAgICMgbG9hZCBnbG9iYWxEYXRhIGZyb20gcHJldmlvdXMgc3RhY2siICJcbiIKKyAgICAi
bHcgICAgJDksIiBTVFJJTkdJWkVfVkFMVUVfT0YoU1RBQ0tfTEVOR1RIICsgMjApICIoJDI5KSAg
ICAjIGxvYWQgdm0gZnJvbSBwcmV2aW91cyBzdGFjayIgIlxuIgogICAgICJqYWxyICAkMjUiICJc
biIKLSAgICAic3cgICAgJDksIiBTVFJJTkdJWkVfVkFMVUVfT0YoR0xPQkFMX0RBVEFfT0ZGU0VU
KSAiKCQyOSkgICAjIHN0b3JlIGdsb2JhbERhdGEgdG8gY3VycmVudCBzdGFjayIgIlxuIgorICAg
ICJzdyAgICAkOSwiIFNUUklOR0laRV9WQUxVRV9PRihHTE9CQUxfREFUQV9PRkZTRVQpICIoJDI5
KSAgICMgc3RvcmUgdm0gdG8gY3VycmVudCBzdGFjayIgIlxuIgogICAgICJsdyAgICAkMTYsIiBT
VFJJTkdJWkVfVkFMVUVfT0YoUFJFU0VSVkVEX1MwX09GRlNFVCkgIigkMjkpIiAiXG4iCiAgICAg
Imx3ICAgICQxNywiIFNUUklOR0laRV9WQUxVRV9PRihQUkVTRVJWRURfUzFfT0ZGU0VUKSAiKCQy
OSkiICJcbiIKICAgICAibHcgICAgJDE4LCIgU1RSSU5HSVpFX1ZBTFVFX09GKFBSRVNFUlZFRF9T
Ml9PRkZTRVQpICIoJDI5KSIgIlxuIgpAQCAtNzU0LDcgKzc1NCw3IEBAIFNZTUJPTF9TVFJJTkco
Y3RpT3BUaHJvd05vdENhdWdodCkgIjoiICIKIAogI2VsaWYgQ09NUElMRVIoUlZDVCkgJiYgQ1BV
KEFSTV9USFVNQjIpCiAKLV9fYXNtIEVuY29kZWRKU1ZhbHVlIGN0aVRyYW1wb2xpbmUodm9pZCos
IEpTU3RhY2sqLCBDYWxsRnJhbWUqLCB2b2lkKiAvKnVudXNlZDEqLywgdm9pZCogLyp1bnVzZWQy
Ki8sIEpTR2xvYmFsRGF0YSopCitfX2FzbSBFbmNvZGVkSlNWYWx1ZSBjdGlUcmFtcG9saW5lKHZv
aWQqLCBKU1N0YWNrKiwgQ2FsbEZyYW1lKiwgdm9pZCogLyp1bnVzZWQxKi8sIHZvaWQqIC8qdW51
c2VkMiovLCBWTSopCiB7CiAgICAgUFJFU0VSVkU4CiAgICAgc3ViIHNwLCBzcCwgIyBGSVJTVF9T
VEFDS19BUkdVTUVOVApAQCAtODIyLDcgKzgyMiw3IEBAIF9fYXNtIHZvaWQgY3RpT3BUaHJvd05v
dENhdWdodCgpCiAKICNlbGlmIENPTVBJTEVSKFJWQ1QpICYmIENQVShBUk1fVFJBRElUSU9OQUwp
CiAKLV9fYXNtIEVuY29kZWRKU1ZhbHVlIGN0aVRyYW1wb2xpbmUodm9pZCosIEpTU3RhY2sqLCBD
YWxsRnJhbWUqLCB2b2lkKiAvKnVudXNlZDEqLywgdm9pZCogLyp1bnVzZWQyKi8sIEpTR2xvYmFs
RGF0YSopCitfX2FzbSBFbmNvZGVkSlNWYWx1ZSBjdGlUcmFtcG9saW5lKHZvaWQqLCBKU1N0YWNr
KiwgQ2FsbEZyYW1lKiwgdm9pZCogLyp1bnVzZWQxKi8sIHZvaWQqIC8qdW51c2VkMiovLCBWTSop
CiB7CiAgICAgQVJNCiAgICAgc3RtZGIgc3AhLCB7cjEtcjN9CkBAIC04NjQsMTQgKzg2NCwxNCBA
QCBfX2FzbSB2b2lkIGN0aU9wVGhyb3dOb3RDYXVnaHQoKQogI2VuZGlmCiAKICNpZiBFTkFCTEUo
T1BDT0RFX1NBTVBMSU5HKQotICAgICNkZWZpbmUgQ1RJX1NBTVBMRVIgc3RhY2tGcmFtZS5nbG9i
YWxEYXRhLT5pbnRlcnByZXRlci0+c2FtcGxlcigpCisgICAgI2RlZmluZSBDVElfU0FNUExFUiBz
dGFja0ZyYW1lLnZtLT5pbnRlcnByZXRlci0+c2FtcGxlcigpCiAjZWxzZQogICAgICNkZWZpbmUg
Q1RJX1NBTVBMRVIgMAogI2VuZGlmCiAKLXZvaWQgcGVyZm9ybVBsYXRmb3JtU3BlY2lmaWNKSVRB
c3NlcnRpb25zKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK3ZvaWQgcGVyZm9ybVBsYXRmb3Jt
U3BlY2lmaWNKSVRBc3NlcnRpb25zKFZNKiB2bSkKIHsKLSAgICBpZiAoIWdsb2JhbERhdGEtPmNh
blVzZUpJVCgpKQorICAgIGlmICghdm0tPmNhblVzZUpJVCgpKQogICAgICAgICByZXR1cm47CiAK
ICNpZiBDUFUoQVJNX1RIVU1CMikKQEAgLTkwOCw3ICs5MDgsNyBAQCB2b2lkIHBlcmZvcm1QbGF0
Zm9ybVNwZWNpZmljSklUQXNzZXJ0aW9uCiAgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1
Y3QgSklUU3RhY2tGcmFtZSwgcHJlc2VydmVkUmV0dXJuQWRkcmVzcykgPT0gUFJFU0VSVkVEX1JF
VFVSTl9BRERSRVNTX09GRlNFVCk7CiAgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3Qg
SklUU3RhY2tGcmFtZSwgdGh1bmtSZXR1cm5BZGRyZXNzKSA9PSBUSFVOS19SRVRVUk5fQUREUkVT
U19PRkZTRVQpOwogICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJh
bWUsIHN0YWNrKSA9PSBSRUdJU1RFUl9GSUxFX09GRlNFVCk7Ci0gICAgQVNTRVJUKE9CSkVDVF9P
RkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgZ2xvYmFsRGF0YSkgPT0gR0xPQkFMX0RBVEFf
T0ZGU0VUKTsKKyAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1l
LCB2bSkgPT0gR0xPQkFMX0RBVEFfT0ZGU0VUKTsKIAogI2VuZGlmCiB9CkBAIC05NTcsMTIgKzk1
NywxMiBAQCBORVZFUl9JTkxJTkUgc3RhdGljIHZvaWQgdHJ5Q2FjaGVQdXRCeUlECiAKICAgICAg
ICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVD
aGFpbihjYWxsRnJhbWUpOwogICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5wcmV2aW91c0lEKCkt
PnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwotICAgICAgICBz
dHViSW5mby0+aW5pdFB1dEJ5SWRUcmFuc2l0aW9uKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSwgc3Ry
dWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgZGlyZWN0KTsKLSAgICAgICAgSklUOjpjb21waWxlUHV0
QnlJZFRyYW5zaXRpb24oY2FsbEZyYW1lLT5zY29wZSgpLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9j
aywgc3R1YkluZm8sIHN0cnVjdHVyZS0+cHJldmlvdXNJRCgpLCBzdHJ1Y3R1cmUsIHNsb3QuY2Fj
aGVkT2Zmc2V0KCksIHByb3RvdHlwZUNoYWluLCByZXR1cm5BZGRyZXNzLCBkaXJlY3QpOworICAg
ICAgICBzdHViSW5mby0+aW5pdFB1dEJ5SWRUcmFuc2l0aW9uKGNhbGxGcmFtZS0+dm0oKSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLT5wcmV2aW91c0lEKCksIHN0cnVj
dHVyZSwgcHJvdG90eXBlQ2hhaW4sIGRpcmVjdCk7CisgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5
SWRUcmFuc2l0aW9uKGNhbGxGcmFtZS0+c2NvcGUoKS0+dm0oKSwgY29kZUJsb2NrLCBzdHViSW5m
bywgc3RydWN0dXJlLT5wcmV2aW91c0lEKCksIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQo
KSwgcHJvdG90eXBlQ2hhaW4sIHJldHVybkFkZHJlc3MsIGRpcmVjdCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCi0gICAgc3R1YkluZm8tPmluaXRQdXRCeUlkUmVwbGFjZShjYWxsRnJh
bWUtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJl
KTsKKyAgICBzdHViSW5mby0+aW5pdFB1dEJ5SWRSZXBsYWNlKGNhbGxGcmFtZS0+dm0oKSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKIAogICAgIEpJVDo6cGF0Y2hQ
dXRCeUlkUmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVk
T2Zmc2V0KCksIHJldHVybkFkZHJlc3MsIGRpcmVjdCk7CiB9CkBAIC05NzgsMTcgKzk3OCwxNyBA
QCBORVZFUl9JTkxJTkUgc3RhdGljIHZvaWQgdHJ5Q2FjaGVHZXRCeUlECiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCi0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2bSA9ICZjYWxsRnJhbWUtPnZtKCk7CiAKICAgICBp
ZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1lID09IGNhbGxGcmFtZS0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aCkgewotICAgICAgICBKSVQ6OmNvbXBpbGVQYXRjaEdldEFycmF5
TGVuZ3RoKGNhbGxGcmFtZS0+c2NvcGUoKS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2ssIHJldHVy
bkFkZHJlc3MpOworICAgICAgICBKSVQ6OmNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKGNhbGxG
cmFtZS0+c2NvcGUoKS0+dm0oKSwgY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpICYmIHBy
b3BlcnR5TmFtZSA9PSBjYWxsRnJhbWUtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKICAgICAg
ICAgLy8gVGhlIHRyYWRlb2ZmIG9mIGNvbXBpbGluZyBhbiBwYXRjaGVkIGlubGluZSBzdHJpbmcg
bGVuZ3RoIGFjY2VzcyByb3V0aW5lIGRvZXMgbm90IHNlZW0KICAgICAgICAgLy8gdG8gcGF5IG9m
Ziwgc28gd2UgY3VycmVudGx5IG9ubHkgZG8gdGhpcyBmb3IgYXJyYXlzLgotICAgICAgICBjdGlQ
YXRjaENhbGxCeVJldHVybkFkZHJlc3MoY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLCBnbG9iYWxE
YXRhLT5nZXRDVElTdHViKHN0cmluZ0xlbmd0aFRyYW1wb2xpbmVHZW5lcmF0b3IpLmNvZGUoKSk7
CisgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjb2RlQmxvY2ssIHJldHVybkFk
ZHJlc3MsIHZtLT5nZXRDVElTdHViKHN0cmluZ0xlbmd0aFRyYW1wb2xpbmVHZW5lcmF0b3IpLmNv
ZGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwMTcsNyArMTAxNyw3IEBAIE5F
VkVSX0lOTElORSBzdGF0aWMgdm9pZCB0cnlDYWNoZUdldEJ5SUQKICAgICAgICAgICAgIGN0aVBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjb2RlQmxvY2ssIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9u
UHRyKGN0aV9vcF9nZXRfYnlfaWRfc2VsZl9mYWlsKSk7CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgSklUOjpwYXRjaEdldEJ5SWRTZWxmKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVy
ZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcmV0dXJuQWRkcmVzcyk7Ci0gICAgICAgICAgICBzdHVi
SW5mby0+aW5pdEdldEJ5SWRTZWxmKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgc3R1YkluZm8tPmlu
aXRHZXRCeUlkU2VsZihjYWxsRnJhbWUtPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIHN0cnVjdHVyZSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEw
NDMsMTUgKzEwNDMsMTUgQEAgTkVWRVJfSU5MSU5FIHN0YXRpYyB2b2lkIHRyeUNhY2hlR2V0QnlJ
RAogICAgICAgICAvLyBTaW5jZSB3ZSdyZSBhY2Nlc3NpbmcgYSBwcm90b3R5cGUgaW4gYSBsb29w
LCBpdCdzIGEgZ29vZCBiZXQgdGhhdCBpdAogICAgICAgICAvLyBzaG91bGQgbm90IGJlIHRyZWF0
ZWQgYXMgYSBkaWN0aW9uYXJ5LgogICAgICAgICBpZiAoc2xvdEJhc2VPYmplY3QtPnN0cnVjdHVy
ZSgpLT5pc0RpY3Rpb25hcnkoKSkgewotICAgICAgICAgICAgc2xvdEJhc2VPYmplY3QtPmZsYXR0
ZW5EaWN0aW9uYXJ5T2JqZWN0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgICAg
IG9mZnNldCA9IHNsb3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2V0KGNhbGxGcmFtZS0+Z2xv
YmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgc2xvdEJhc2VPYmplY3QtPmZs
YXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KGNhbGxGcmFtZS0+dm0oKSk7CisgICAgICAgICAgICBvZmZz
ZXQgPSBzbG90QmFzZU9iamVjdC0+c3RydWN0dXJlKCktPmdldChjYWxsRnJhbWUtPnZtKCksIHBy
b3BlcnR5TmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0dWJJbmZvLT5pbml0
R2V0QnlJZFByb3RvKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBzdHJ1Y3R1cmUsIHNsb3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKSwgc2xvdC5j
YWNoZWRQcm9wZXJ0eVR5cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OlZhbHVlKTsKKyAgICAgICAgc3R1
YkluZm8tPmluaXRHZXRCeUlkUHJvdG8oY2FsbEZyYW1lLT52bSgpLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUsIHNsb3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKSwgc2xv
dC5jYWNoZWRQcm9wZXJ0eVR5cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OlZhbHVlKTsKIAogICAgICAg
ICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpOwogICAgICAgICBBU1NFUlQoIXNs
b3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpOwotICAgICAgICBKSVQ6
OmNvbXBpbGVHZXRCeUlkUHJvdG8oY2FsbEZyYW1lLT5zY29wZSgpLT5nbG9iYWxEYXRhKCksIGNh
bGxGcmFtZSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90QmFzZU9iamVjdC0+
c3RydWN0dXJlKCksIHByb3BlcnR5TmFtZSwgc2xvdCwgb2Zmc2V0LCByZXR1cm5BZGRyZXNzKTsK
KyAgICAgICAgSklUOjpjb21waWxlR2V0QnlJZFByb3RvKGNhbGxGcmFtZS0+c2NvcGUoKS0+dm0o
KSwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3RCYXNlT2Jq
ZWN0LT5zdHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBzbG90LCBvZmZzZXQsIHJldHVybkFkZHJl
c3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMDY0LDggKzEwNjQsOCBAQCBORVZF
Ul9JTkxJTkUgc3RhdGljIHZvaWQgdHJ5Q2FjaGVHZXRCeUlECiAgICAgfQogCiAgICAgU3RydWN0
dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihjYWxs
RnJhbWUpOwotICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZENoYWluKGNhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUsIHByb3RvdHlw
ZUNoYWluLCBjb3VudCwgc2xvdC5jYWNoZWRQcm9wZXJ0eVR5cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6
OlZhbHVlKTsKLSAgICBKSVQ6OmNvbXBpbGVHZXRCeUlkQ2hhaW4oY2FsbEZyYW1lLT5zY29wZSgp
LT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJl
LCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHByb3BlcnR5TmFtZSwgc2xvdCwgb2Zmc2V0LCByZXR1
cm5BZGRyZXNzKTsKKyAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRDaGFpbihjYWxsRnJhbWUtPnZt
KCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hh
aW4sIGNvdW50LCBzbG90LmNhY2hlZFByb3BlcnR5VHlwZSgpID09IFByb3BlcnR5U2xvdDo6VmFs
dWUpOworICAgIEpJVDo6Y29tcGlsZUdldEJ5SWRDaGFpbihjYWxsRnJhbWUtPnNjb3BlKCktPnZt
KCksIGNhbGxGcmFtZSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBwcm90b3R5cGVD
aGFpbiwgY291bnQsIHByb3BlcnR5TmFtZSwgc2xvdCwgb2Zmc2V0LCByZXR1cm5BZGRyZXNzKTsK
IH0KIAogI2lmICFkZWZpbmVkKE5ERUJVRykKQEAgLTExMTUsMTAgKzExMTUsMTAgQEAgc3RydWN0
IFN0YWNrSGFjayB7CiAvLyB0byBnZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGN0aVZNVGhyb3dUcmFt
cG9saW5lIGZ1bmN0aW9uLiBJdCdzIGFsc28KIC8vIGdvb2QgdG8ga2VlcCB0aGUgY29kZSBzaXpl
IGRvd24gYnkgbGVhdmluZyBhcyBtdWNoIG9mIHRoZSBleGNlcHRpb24KIC8vIGhhbmRsaW5nIGNv
ZGUgb3V0IG9mIGxpbmUgYXMgcG9zc2libGUuCi1zdGF0aWMgTkVWRVJfSU5MSU5FIHZvaWQgcmV0
dXJuVG9UaHJvd1RyYW1wb2xpbmUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBSZXR1cm5BZGRy
ZXNzUHRyIGV4Y2VwdGlvbkxvY2F0aW9uLCBSZXR1cm5BZGRyZXNzUHRyJiByZXR1cm5BZGRyZXNz
U2xvdCkKK3N0YXRpYyBORVZFUl9JTkxJTkUgdm9pZCByZXR1cm5Ub1Rocm93VHJhbXBvbGluZShW
TSogdm0sIFJldHVybkFkZHJlc3NQdHIgZXhjZXB0aW9uTG9jYXRpb24sIFJldHVybkFkZHJlc3NQ
dHImIHJldHVybkFkZHJlc3NTbG90KQogewotICAgIFJFTEVBU0VfQVNTRVJUKGdsb2JhbERhdGEt
PmV4Y2VwdGlvbik7Ci0gICAgZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uTG9jYXRpb24gPSBleGNlcHRp
b25Mb2NhdGlvbjsKKyAgICBSRUxFQVNFX0FTU0VSVCh2bS0+ZXhjZXB0aW9uKTsKKyAgICB2bS0+
ZXhjZXB0aW9uTG9jYXRpb24gPSBleGNlcHRpb25Mb2NhdGlvbjsKICAgICByZXR1cm5BZGRyZXNz
U2xvdCA9IFJldHVybkFkZHJlc3NQdHIoRnVuY3Rpb25QdHIoY3RpVk1UaHJvd1RyYW1wb2xpbmUp
KTsKIH0KIApAQCAtMTEyOSwyMiArMTEyOSwyMiBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIHZvaWQg
cmV0dXJuVG9UaHJvd1RyCiAgICAgfSB3aGlsZSAoMCkKICNkZWZpbmUgVk1fVEhST1dfRVhDRVBU
SU9OX0FUX0VORCgpIFwKICAgICBkbyB7XAotICAgICAgICByZXR1cm5Ub1Rocm93VHJhbXBvbGlu
ZShzdGFja0ZyYW1lLmdsb2JhbERhdGEsIFNUVUJfUkVUVVJOX0FERFJFU1MsIFNUVUJfUkVUVVJO
X0FERFJFU1MpO1wKKyAgICAgICAgcmV0dXJuVG9UaHJvd1RyYW1wb2xpbmUoc3RhY2tGcmFtZS52
bSwgU1RVQl9SRVRVUk5fQUREUkVTUywgU1RVQl9SRVRVUk5fQUREUkVTUyk7XAogICAgIH0gd2hp
bGUgKDApCiAKICNkZWZpbmUgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpIFwKICAgICBkbyB7IFwKLSAg
ICAgICAgaWYgKFVOTElLRUxZKHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKSkgXAor
ICAgICAgICBpZiAoVU5MSUtFTFkoc3RhY2tGcmFtZS52bS0+ZXhjZXB0aW9uKSkgXAogICAgICAg
ICAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7IFwKICAgICB9IHdoaWxlICgwKQogI2RlZmluZSBD
SEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpIFwKICAgICBkbyB7IFwKLSAgICAgICAgaWYgKFVO
TElLRUxZKHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKSkgXAorICAgICAgICBpZiAo
VU5MSUtFTFkoc3RhY2tGcmFtZS52bS0+ZXhjZXB0aW9uKSkgXAogICAgICAgICAgICAgVk1fVEhS
T1dfRVhDRVBUSU9OX0FUX0VORCgpOyBcCiAgICAgfSB3aGlsZSAoMCkKICNkZWZpbmUgQ0hFQ0tf
Rk9SX0VYQ0VQVElPTl9WT0lEKCkgXAogICAgIGRvIHsgXAotICAgICAgICBpZiAoVU5MSUtFTFko
c3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5leGNlcHRpb24pKSB7IFwKKyAgICAgICAgaWYgKFVOTElL
RUxZKHN0YWNrRnJhbWUudm0tPmV4Y2VwdGlvbikpIHsgXAogICAgICAgICAgICAgVk1fVEhST1df
RVhDRVBUSU9OX0FUX0VORCgpOyBcCiAgICAgICAgICAgICByZXR1cm47IFwKICAgICAgICAgfSBc
CkBAIC0xMTU2LDE2ICsxMTU2LDE2IEBAIHN0YXRpYyBORVZFUl9JTkxJTkUgdm9pZCByZXR1cm5U
b1Rocm93VHIKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBUIHRocm93RXhjZXB0aW9uRnJv
bU9wQ2FsbChKSVRTdGFja0ZyYW1lJiBqaXRTdGFja0ZyYW1lLCBDYWxsRnJhbWUqIG5ld0NhbGxG
cmFtZSwgUmV0dXJuQWRkcmVzc1B0ciYgcmV0dXJuQWRkcmVzc1Nsb3QpCiB7CiAgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBuZXdDYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgQVNTRVJU
KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbik7CisgICAgQVNTRVJUKGNhbGxGcmFt
ZS0+dm0oKS5leGNlcHRpb24pOwogICAgIGppdFN0YWNrRnJhbWUuY2FsbEZyYW1lID0gY2FsbEZy
YW1lOwotICAgIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLnRvcENhbGxGcmFtZSA9IGNhbGxGcmFt
ZTsKLSAgICByZXR1cm5Ub1Rocm93VHJhbXBvbGluZSgmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCks
IFJldHVybkFkZHJlc3NQdHIobmV3Q2FsbEZyYW1lLT5yZXR1cm5QQygpKSwgcmV0dXJuQWRkcmVz
c1Nsb3QpOworICAgIGNhbGxGcmFtZS0+dm0oKS50b3BDYWxsRnJhbWUgPSBjYWxsRnJhbWU7Cisg
ICAgcmV0dXJuVG9UaHJvd1RyYW1wb2xpbmUoJmNhbGxGcmFtZS0+dm0oKSwgUmV0dXJuQWRkcmVz
c1B0cihuZXdDYWxsRnJhbWUtPnJldHVyblBDKCkpLCByZXR1cm5BZGRyZXNzU2xvdCk7CiAgICAg
cmV0dXJuIFQoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIFQgdGhyb3dFeGNl
cHRpb25Gcm9tT3BDYWxsKEpJVFN0YWNrRnJhbWUmIGppdFN0YWNrRnJhbWUsIENhbGxGcmFtZSog
bmV3Q2FsbEZyYW1lLCBSZXR1cm5BZGRyZXNzUHRyJiByZXR1cm5BZGRyZXNzU2xvdCwgSlNWYWx1
ZSBleGNlcHRpb24pCiB7Ci0gICAgbmV3Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLT5nbG9iYWxE
YXRhKCkuZXhjZXB0aW9uID0gZXhjZXB0aW9uOworICAgIG5ld0NhbGxGcmFtZS0+Y2FsbGVyRnJh
bWUoKS0+dm0oKS5leGNlcHRpb24gPSBleGNlcHRpb247CiAgICAgcmV0dXJuIHRocm93RXhjZXB0
aW9uRnJvbU9wQ2FsbDxUPihqaXRTdGFja0ZyYW1lLCBuZXdDYWxsRnJhbWUsIHJldHVybkFkZHJl
c3NTbG90KTsKIH0KIApAQCAtMTQ0OCw5ICsxNDQ4LDkgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04o
dm9pZCwgaGFuZGxlX3dhdGNoZAogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0Zy
YW1lKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwot
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IHN0YWNrRnJhbWUuZ2xvYmFsRGF0YTsKLSAg
ICBpZiAoVU5MSUtFTFkoZ2xvYmFsRGF0YS0+d2F0Y2hkb2cuZGlkRmlyZShjYWxsRnJhbWUpKSkg
ewotICAgICAgICBnbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0
aW9uRXhjZXB0aW9uKGdsb2JhbERhdGEpOworICAgIFZNKiB2bSA9IHN0YWNrRnJhbWUudm07Cisg
ICAgaWYgKFVOTElLRUxZKHZtLT53YXRjaGRvZy5kaWRGaXJlKGNhbGxGcmFtZSkpKSB7CisgICAg
ICAgIHZtLT5leGNlcHRpb24gPSBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHZt
KTsKICAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OX0FUX0VORCgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMTQ5MCw3ICsxNDkwLDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwg
b3BfcHV0X2J5X2lkXwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHN0YWNrRnJhbWUuY2FsbEZy
YW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwogICAgIEpTVmFsdWUgYmFzZVZhbHVl
ID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKICAgICBBU1NFUlQoYmFzZVZhbHVlLmlz
T2JqZWN0KCkpOwotICAgIGFzT2JqZWN0KGJhc2VWYWx1ZSktPnB1dERpcmVjdChzdGFja0ZyYW1l
LmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigp
LCBzdGFja0ZyYW1lLmFyZ3NbMl0uanNWYWx1ZSgpLCBzbG90KTsKKyAgICBhc09iamVjdChiYXNl
VmFsdWUpLT5wdXREaXJlY3Qoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnZtKCksIHN0YWNrRnJhbWUu
YXJnc1sxXS5pZGVudGlmaWVyKCksIHN0YWNrRnJhbWUuYXJnc1syXS5qc1ZhbHVlKCksIHNsb3Qp
OwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiB9CiAKQEAgLTE1NDQsNyArMTU0
NCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV9pZF8KICAgICBKU1Zh
bHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CiAgICAgQVNTRVJU
KGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKICAgICAKLSAgICBhc09iamVjdChiYXNlVmFsdWUpLT5w
dXREaXJlY3QoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGlkZW50LCBzdGFja0ZyYW1lLmFyZ3Nb
Ml0uanNWYWx1ZSgpLCBzbG90KTsKKyAgICBhc09iamVjdChiYXNlVmFsdWUpLT5wdXREaXJlY3Qo
Y2FsbEZyYW1lLT52bSgpLCBpZGVudCwgc3RhY2tGcmFtZS5hcmdzWzJdLmpzVmFsdWUoKSwgc2xv
dCk7CiAgICAgCiAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4o
c3R1YkluZm8tPmFjY2Vzc1R5cGUpKSB7CiAgICAgICAgIHN0dWJJbmZvLT5zZXRTZWVuKCk7CkBA
IC0xNTc3LDcgKzE1NzcsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlf
aWRfCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNT
dHJpY3RNb2RlKCkpOwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBd
LmpzVmFsdWUoKTsKICAgICBBU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOwotICAgIGFzT2Jq
ZWN0KGJhc2VWYWx1ZSktPnB1dERpcmVjdChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgaWRlbnQs
IHN0YWNrRnJhbWUuYXJnc1syXS5qc1ZhbHVlKCksIHNsb3QpOworICAgIGFzT2JqZWN0KGJhc2VW
YWx1ZSktPnB1dERpcmVjdChjYWxsRnJhbWUtPnZtKCksIGlkZW50LCBzdGFja0ZyYW1lLmFyZ3Nb
Ml0uanNWYWx1ZSgpLCBzbG90KTsKICAgICAKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VO
RCgpOwogfQpAQCAtMTU5Niw5ICsxNTk2LDkgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmpl
Y3QqLCBvcF9wdXRfYgogCiAgICAgQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKICAgICBK
U09iamVjdCogYmFzZSA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7Ci0gICAgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhID0gKnN0YWNrRnJhbWUuZ2xvYmFsRGF0YTsKLSAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IGJhc2UtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIG9sZFNpemUsIG5l
d1NpemUpOwotICAgIGJhc2UtPnNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBidXR0ZXJmbHksIG5l
d1N0cnVjdHVyZSk7CisgICAgVk0mIHZtID0gKnN0YWNrRnJhbWUudm07CisgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSBiYXNlLT5ncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkU2l6ZSwgbmV3
U2l6ZSk7CisgICAgYmFzZS0+c2V0QnV0dGVyZmx5KHZtLCBidXR0ZXJmbHksIG5ld1N0cnVjdHVy
ZSk7CiAKICAgICByZXR1cm4gYmFzZTsKIH0KQEAgLTE2NjAsMTEgKzE2NjAsMTEgQEAgREVGSU5F
X1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgICAgICBpbnQgbGlzdEluZGV4
ID0gMTsKIAogICAgICAgICBpZiAoc3R1YkluZm8tPmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0
KQotICAgICAgICAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlkU2VsZihjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgYmFzZVZhbHVlLmFzQ2VsbCgp
LT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRTZWxmKGNh
bGxGcmFtZS0+dm0oKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgYmFzZVZhbHVlLmFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKSk7CiAKICAgICAgICAgaWYgKHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZikgewogICAgICAgICAgICAgQVNTRVJUKCFzdHViSW5m
by0+c3R1YlJvdXRpbmUpOwotICAgICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0g
bmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChjYWxsRnJhbWUtPmdsb2JhbERhdGEo
KSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgMCwgc3R1YkluZm8tPnUuZ2V0QnlJZFNl
bGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7CisgICAgICAgICAgICBwb2x5bW9y
cGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGNh
bGxGcmFtZS0+dm0oKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgMCwgc3R1YkluZm8t
PnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7CiAgICAgICAg
ICAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRTZWxmTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3QsIDEpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0ID0gc3R1YkluZm8tPnUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxpc3Q7CkBAIC0x
NjcyLDcgKzE2NzIsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3Bf
CiAgICAgICAgIH0KICAgICAgICAgaWYgKGxpc3RJbmRleCA8IFBPTFlNT1JQSElDX0xJU1RfQ0FD
SEVfU0laRSkgewogICAgICAgICAgICAgc3R1YkluZm8tPnUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RT
aXplKys7Ci0gICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoY2FsbEZyYW1l
LT5zY29wZSgpLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jaywgc3R1YkluZm8sIHBvbHltb3JwaGlj
U3RydWN0dXJlTGlzdCwgbGlzdEluZGV4LCBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgp
LCBpZGVudCwgc2xvdCwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICBKSVQ6OmNv
bXBpbGVHZXRCeUlkU2VsZkxpc3QoY2FsbEZyYW1lLT5zY29wZSgpLT52bSgpLCBjb2RlQmxvY2ss
IHN0dWJJbmZvLCBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIGxpc3RJbmRleCwgYmFzZVZhbHVl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgaWRlbnQsIHNsb3QsIHNsb3QuY2FjaGVkT2Zmc2V0KCkp
OwogCiAgICAgICAgICAgICBpZiAobGlzdEluZGV4ID09IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hF
X1NJWkUgLSAxKSkKICAgICAgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
Y29kZUJsb2NrLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5
X2lkX2dlbmVyaWMpKTsKQEAgLTE2ODIsMTkgKzE2ODIsMTkgQEAgREVGSU5FX1NUVUJfRlVOQ1RJ
T04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKIH0KIAotc3RhdGljIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogZ2V0UG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U2xvdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFNj
cmlwdEV4ZWN1dGFibGUqIG93bmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIGludCYg
bGlzdEluZGV4KQorc3RhdGljIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogZ2V0UG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U2xvdChWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUq
IG93bmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIGludCYgbGlzdEluZGV4KQogewog
ICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlTGlz
dCA9IDA7CiAgICAgbGlzdEluZGV4ID0gMTsKIAogICAgIHN3aXRjaCAoc3R1YkluZm8tPmFjY2Vz
c1R5cGUpIHsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG86Ci0gICAgICAgIHByb3Rv
dHlwZVN0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGds
b2JhbERhdGEsIG93bmVyLCBzdHViSW5mby0+c3R1YlJvdXRpbmUsIHN0dWJJbmZvLT51LmdldEJ5
SWRQcm90by5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby0+dS5nZXRCeUlkUHJv
dG8ucHJvdG90eXBlU3RydWN0dXJlLmdldCgpLCB0cnVlKTsKKyAgICAgICAgcHJvdG90eXBlU3Ry
dWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qodm0sIG93bmVy
LCBzdHViSW5mby0+c3R1YlJvdXRpbmUsIHN0dWJJbmZvLT51LmdldEJ5SWRQcm90by5iYXNlT2Jq
ZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby0+dS5nZXRCeUlkUHJvdG8ucHJvdG90eXBlU3Ry
dWN0dXJlLmdldCgpLCB0cnVlKTsKICAgICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lLmNsZWFy
KCk7CiAgICAgICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZFByb3RvTGlzdChwcm90b3R5cGVTdHJ1
Y3R1cmVMaXN0LCAyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lk
X2NoYWluOgotICAgICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdChnbG9iYWxEYXRhLCBvd25lciwgc3R1YkluZm8tPnN0dWJSb3V0
aW5lLCBzdHViSW5mby0+dS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwg
c3R1YkluZm8tPnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpLCB0cnVlKTsKKyAgICAgICAgcHJv
dG90eXBlU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qo
dm0sIG93bmVyLCBzdHViSW5mby0+c3R1YlJvdXRpbmUsIHN0dWJJbmZvLT51LmdldEJ5SWRDaGFp
bi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby0+dS5nZXRCeUlkQ2hhaW4uY2hh
aW4uZ2V0KCksIHRydWUpOwogICAgICAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUuY2xlYXIoKTsK
ICAgICAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlkUHJvdG9MaXN0KHByb3RvdHlwZVN0cnVjdHVy
ZUxpc3QsIDIpOwogICAgICAgICBicmVhazsKQEAgLTE3MjQsNyArMTcyNCw3IEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9
IGdldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsKGNhbGxGcmFtZSwgZ2V0dGVyLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIHN0YWNrRnJhbWUuYXJnc1sxXS5qc09iamVjdCgpLCBBcmdMaXN0KCkpOwogICAgIGlm
IChjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm5Ub1Rocm93VHJhbXBv
bGluZSgmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHN0YWNrRnJhbWUuYXJnc1syXS5yZXR1cm5B
ZGRyZXNzKCksIFNUVUJfUkVUVVJOX0FERFJFU1MpOworICAgICAgICByZXR1cm5Ub1Rocm93VHJh
bXBvbGluZSgmY2FsbEZyYW1lLT52bSgpLCBzdGFja0ZyYW1lLmFyZ3NbMl0ucmV0dXJuQWRkcmVz
cygpLCBTVFVCX1JFVFVSTl9BRERSRVNTKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKIH0KQEAgLTE3MzgsNyArMTczOCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVu
Y29kZWRKU1ZhbHVlLCBvcF8KICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHN0YWNrRnJh
bWUuYXJnc1syXS5pZGVudGlmaWVyKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBnZXR0ZXIoY2Fs
bEZyYW1lLCBzbG90QmFzZSwgaWRlbnQpOwogICAgIGlmIChjYWxsRnJhbWUtPmhhZEV4Y2VwdGlv
bigpKQotICAgICAgICByZXR1cm5Ub1Rocm93VHJhbXBvbGluZSgmY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCksIHN0YWNrRnJhbWUuYXJnc1szXS5yZXR1cm5BZGRyZXNzKCksIFNUVUJfUkVUVVJOX0FE
RFJFU1MpOworICAgICAgICByZXR1cm5Ub1Rocm93VHJhbXBvbGluZSgmY2FsbEZyYW1lLT52bSgp
LCBzdGFja0ZyYW1lLmFyZ3NbM10ucmV0dXJuQWRkcmVzcygpLCBTVFVCX1JFVFVSTl9BRERSRVNT
KTsKICAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC0xNzg5
LDE0ICsxNzg5LDE0IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8K
ICAgICAgICAgLy8gU2luY2Ugd2UncmUgYWNjZXNzaW5nIGEgcHJvdG90eXBlIGluIGEgbG9vcCwg
aXQncyBhIGdvb2QgYmV0IHRoYXQgaXQKICAgICAgICAgLy8gc2hvdWxkIG5vdCBiZSB0cmVhdGVk
IGFzIGEgZGljdGlvbmFyeS4KICAgICAgICAgaWYgKHNsb3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+aXNEaWN0aW9uYXJ5KCkpIHsKLSAgICAgICAgICAgIHNsb3RCYXNlT2JqZWN0LT5mbGF0dGVu
RGljdGlvbmFyeU9iamVjdChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgICAgICBv
ZmZzZXQgPSBzbG90QmFzZU9iamVjdC0+c3RydWN0dXJlKCktPmdldChjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIHNsb3RCYXNlT2JqZWN0LT5mbGF0
dGVuRGljdGlvbmFyeU9iamVjdChjYWxsRnJhbWUtPnZtKCkpOworICAgICAgICAgICAgb2Zmc2V0
ID0gc2xvdEJhc2VPYmplY3QtPnN0cnVjdHVyZSgpLT5nZXQoY2FsbEZyYW1lLT52bSgpLCBwcm9w
ZXJ0eU5hbWUpOwogICAgICAgICB9CiAKICAgICAgICAgaW50IGxpc3RJbmRleDsKLSAgICAgICAg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0ID0g
Z2V0UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U2xvdChjYWxsRnJhbWUtPmdsb2JhbERh
dGEoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkluZm8sIGxpc3RJbmRleCk7
CisgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0
dXJlTGlzdCA9IGdldFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFNsb3QoY2FsbEZyYW1l
LT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViSW5mbywgbGlzdEluZGV4
KTsKICAgICAgICAgaWYgKGxpc3RJbmRleCA8IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkg
ewotICAgICAgICAgICAgSklUOjpjb21waWxlR2V0QnlJZFByb3RvTGlzdChjYWxsRnJhbWUtPnNj
b3BlKCktPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBwcm90
b3R5cGVTdHJ1Y3R1cmVMaXN0LCBsaXN0SW5kZXgsIHN0cnVjdHVyZSwgc2xvdEJhc2VPYmplY3Qt
PnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIG9mZnNldCk7CisgICAgICAgICAgICBK
SVQ6OmNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0KGNhbGxGcmFtZS0+c2NvcGUoKS0+dm0oKSwgY2Fs
bEZyYW1lLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCBsaXN0
SW5kZXgsIHN0cnVjdHVyZSwgc2xvdEJhc2VPYmplY3QtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5h
bWUsIHNsb3QsIG9mZnNldCk7CiAKICAgICAgICAgICAgIGlmIChsaXN0SW5kZXggPT0gKFBPTFlN
T1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpKQogICAgICAgICAgICAgICAgIGN0aVBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhjb2RlQmxvY2ssIFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9u
UHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdF9mdWxsKSk7CkBAIC0xODEwLDExICsxODEw
LDExIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICAgICAg
CiAgICAgICAgIEFTU0VSVCghYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+aXNEaWN0
aW9uYXJ5KCkpOwogICAgICAgICBpbnQgbGlzdEluZGV4OwotICAgICAgICBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QgPSBnZXRQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3RTbG90KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViSW5mbywgbGlzdEluZGV4KTsKKyAgICAgICAgUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0ID0gZ2V0
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U2xvdChjYWxsRnJhbWUtPnZtKCksIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJJbmZvLCBsaXN0SW5kZXgpOwogICAgICAgICAK
ICAgICAgICAgaWYgKGxpc3RJbmRleCA8IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkgewog
ICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3Rv
dHlwZUNoYWluKGNhbGxGcmFtZSk7Ci0gICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeUlkQ2hh
aW5MaXN0KGNhbGxGcmFtZS0+c2NvcGUoKS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUsIGNvZGVC
bG9jaywgc3R1YkluZm8sIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIGxpc3RJbmRleCwgc3RydWN0
dXJlLCBwcm90b0NoYWluLCBjb3VudCwgcHJvcGVydHlOYW1lLCBzbG90LCBvZmZzZXQpOworICAg
ICAgICAgICAgSklUOjpjb21waWxlR2V0QnlJZENoYWluTGlzdChjYWxsRnJhbWUtPnNjb3BlKCkt
PnZtKCksIGNhbGxGcmFtZSwgY29kZUJsb2NrLCBzdHViSW5mbywgcHJvdG90eXBlU3RydWN0dXJl
TGlzdCwgbGlzdEluZGV4LCBzdHJ1Y3R1cmUsIHByb3RvQ2hhaW4sIGNvdW50LCBwcm9wZXJ0eU5h
bWUsIHNsb3QsIG9mZnNldCk7CiAKICAgICAgICAgICAgIGlmIChsaXN0SW5kZXggPT0gKFBPTFlN
T1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpKQogICAgICAgICAgICAgICAgIGN0aVBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhjb2RlQmxvY2ssIFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9u
UHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdF9mdWxsKSk7CkBAIC0xODkwLDcgKzE4OTAs
NyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZUlu
dmFsaWRQYXJhbUVycm9yKGNhbGxGcmFtZSwgImluc3RhbmNlb2YiLCBiYXNlVmFsKTsKKyAgICBz
dGFja0ZyYW1lLnZtLT5leGNlcHRpb24gPSBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihjYWxsRnJh
bWUsICJpbnN0YW5jZW9mIiwgYmFzZVZhbCk7CiAgICAgVk1fVEhST1dfRVhDRVBUSU9OX0FUX0VO
RCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIH0KQEAgLTIwNTks
NyArMjA1OSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAg
ICBib29sIGNvdWxkRGVsZXRlID0gYmFzZU9iai0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVy
dHkoYmFzZU9iaiwgY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigpKTsK
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbihjb3VsZERlbGV0ZSk7CiAgICAgaWYgKCFj
b3VsZERlbGV0ZSAmJiBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSkKLSAg
ICAgICAgc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3Io
c3RhY2tGcmFtZS5jYWxsRnJhbWUsICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOworICAg
ICAgICBzdGFja0ZyYW1lLnZtLT5leGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3Ioc3RhY2tGcmFt
ZS5jYWxsRnJhbWUsICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOwogCiAgICAgQ0hFQ0tf
Rk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CkBAIC0yMTE1LDcgKzIxMTUsNyBAQCBpbmxpbmUgdm9pZCogaml0Q29tcGlsZUZvcihDYWxs
RnJhbWUqIGNhCiAgICAgSlNPYmplY3QqIGVycm9yID0gZXhlY3V0YWJsZS0+Y29tcGlsZUZvcihj
YWxsRnJhbWUsIGNhbGxEYXRhU2NvcGVDaGFpbiwga2luZCk7CiAgICAgaWYgKCFlcnJvcikKICAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uOwotICAgIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2Vw
dGlvbiA9IGVycm9yOworICAgIGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24gPSBlcnJvcjsKICAg
ICByZXR1cm4gMDsKIH0KIApAQCAtMjIxMCw3ICsyMjEwLDcgQEAgaW5saW5lIHZvaWQqIGxhenlM
aW5rRm9yKENhbGxGcmFtZSogY2FsbAogICAgIGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1
dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KGV4ZWN1dGFibGUpOwogICAgICAgICBpZiAoSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25F
eGVjdXRhYmxlLT5jb21waWxlRm9yKGNhbGxGcmFtZSwgY2FsbGVlLT5zY29wZSgpLCBraW5kKSkg
ewotICAgICAgICAgICAgY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gZXJyb3I7
CisgICAgICAgICAgICBjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uID0gZXJyb3I7CiAgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICBjb2RlQmxvY2sgPSAmZnVuY3Rpb25F
eGVjdXRhYmxlLT5nZW5lcmF0ZWRCeXRlY29kZUZvcihraW5kKTsKQEAgLTIyMjQsNyArMjIyNCw3
IEBAIGlubGluZSB2b2lkKiBsYXp5TGlua0ZvcihDYWxsRnJhbWUqIGNhbGwKICAgICBpZiAoIWNh
bGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7
CiAgICAgZWxzZQotICAgICAgICBKSVQ6OmxpbmtGb3IoY2FsbGVlLCBjYWxsRnJhbWUtPmNhbGxl
ckZyYW1lKCktPmNvZGVCbG9jaygpLCBjb2RlQmxvY2ssIGNvZGVQdHIsIGNhbGxMaW5rSW5mbywg
JmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBraW5kKTsKKyAgICAgICAgSklUOjpsaW5rRm9yKGNh
bGxlZSwgY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKSwgY29kZUJsb2NrLCBj
b2RlUHRyLCBjYWxsTGlua0luZm8sICZjYWxsRnJhbWUtPnZtKCksIGtpbmQpOwogCiAgICAgcmV0
dXJuIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIH0KQEAgLTIyNDgsNyArMjI0OCw3IEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCB2bV9sYXp5TGlua0MKICAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwogICAgIAogICAgIENvZGVCbG9jayog
Y2FsbGVyQ29kZUJsb2NrID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsK
LSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBjYWxsZXJDb2RlQmxvY2stPmdsb2JhbERh
dGEoKTsKKyAgICBWTSogdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7CiAgICAgQ2FsbExpbmtJ
bmZvKiBjYWxsTGlua0luZm8gPSAmY2FsbGVyQ29kZUJsb2NrLT5nZXRDYWxsTGlua0luZm8oY2Fs
bEZyYW1lLT5yZXR1cm5QQygpKTsKICAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNG
dW5jdGlvbio+KGNhbGxGcmFtZS0+Y2FsbGVlKCkpOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVj
dXRhYmxlID0gY2FsbGVlLT5leGVjdXRhYmxlKCk7CkBAIC0yMjg3LDcgKzIyODcsNyBAQCBERUZJ
TkVfU1RVQl9GVU5DVElPTih2b2lkKiwgdm1fbGF6eUxpbmtDCiAgICAgICAgIEpTU2NvcGUqIHNj
b3BlQ2hhaW4gPSBjYWxsZWUtPnNjb3BlKCk7CiAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1
bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvcihjYWxsRnJhbWUsIHNjb3BlQ2hhaW4sIENvZGVG
b3JDYWxsKTsKICAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPmds
b2JhbERhdGEoKS5leGNlcHRpb24gPSBlcnJvcjsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+dm0o
KS5leGNlcHRpb24gPSBlcnJvcjsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAg
ICAgICAgIApAQCAtMjI5Niw3ICsyMjk2LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCos
IHZtX2xhenlMaW5rQwogICAgIAogICAgIGlmIChzaG91bGRMaW5rKSB7CiAgICAgICAgIEFTU0VS
VChjb2RlUHRyKTsKLSAgICAgICAgSklUOjpjb21waWxlQ2xvc3VyZUNhbGwoZ2xvYmFsRGF0YSwg
Y2FsbExpbmtJbmZvLCBjYWxsZXJDb2RlQmxvY2ssIGNhbGxlZUNvZGVCbG9jaywgc3RydWN0dXJl
LCBleGVjdXRhYmxlLCBjb2RlUHRyKTsKKyAgICAgICAgSklUOjpjb21waWxlQ2xvc3VyZUNhbGwo
dm0sIGNhbGxMaW5rSW5mbywgY2FsbGVyQ29kZUJsb2NrLCBjYWxsZWVDb2RlQmxvY2ssIHN0cnVj
dHVyZSwgZXhlY3V0YWJsZSwgY29kZVB0cik7CiAgICAgICAgIGNhbGxMaW5rSW5mby0+aGFzU2Vl
bkNsb3N1cmUgPSB0cnVlOwogICAgIH0gZWxzZQogICAgICAgICBKSVQ6OmxpbmtTbG93Q2FsbChj
YWxsZXJDb2RlQmxvY2ssIGNhbGxMaW5rSW5mbyk7CkBAIC0yMzIwLDcgKzIzMjAsNyBAQCBERUZJ
TkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX3B1c2hfCiB7CiAgICAgU1RVQl9JTklUX1NU
QUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogCi0gICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0g
SlNBY3RpdmF0aW9uOjpjcmVhdGUoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwg
c3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2soKSk7
CisgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUoc3Rh
Y2tGcmFtZS5jYWxsRnJhbWUtPnZtKCksIHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1l
LmNhbGxGcmFtZS0+Y29kZUJsb2NrKCkpOwogICAgIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5zZXRT
Y29wZShhY3RpdmF0aW9uKTsKICAgICByZXR1cm4gYWN0aXZhdGlvbjsKIH0KQEAgLTIzNDgsNyAr
MjM0OCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICAg
ICAgcmV0dXJuVmFsdWUgPSBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oY2FsbEZyYW1lKTsKICAg
ICB9CiAKLSAgICBpZiAoc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5leGNlcHRpb24pCisgICAgaWYg
KHN0YWNrRnJhbWUudm0tPmV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9u
RnJvbU9wQ2FsbDxFbmNvZGVkSlNWYWx1ZT4oc3RhY2tGcmFtZSwgY2FsbEZyYW1lLCBTVFVCX1JF
VFVSTl9BRERSRVNTKTsKIAogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKQEAgLTIzNTgsNyArMjM1
OCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIHsKICAgICBT
VFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAgICBBcmd1bWVudHMqIGFyZ3Vt
ZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKCpzdGFja0ZyYW1lLmdsb2JhbERhdGEsIHN0YWNrRnJh
bWUuY2FsbEZyYW1lKTsKKyAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3Jl
YXRlKCpzdGFja0ZyYW1lLnZtLCBzdGFja0ZyYW1lLmNhbGxGcmFtZSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKGFyZ3VtZW50cykpOwogfQogCkBAIC0yMzY3LDcgKzIzNjcs
NyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF90ZWFyX29mZl9hCiAgICAgU1RVQl9J
TklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogCiAgICAgQVNTRVJUKHN0YWNrRnJhbWUuY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFpbigpKTsKLSAgICBqc0Nhc3Q8
SlNBY3RpdmF0aW9uKj4oc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKSktPnRlYXJPZmYoKnN0
YWNrRnJhbWUuZ2xvYmFsRGF0YSk7CisgICAganNDYXN0PEpTQWN0aXZhdGlvbio+KHN0YWNrRnJh
bWUuYXJnc1swXS5qc1ZhbHVlKCkpLT50ZWFyT2ZmKCpzdGFja0ZyYW1lLnZtKTsKIH0KIAogREVG
SU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfdGVhcl9vZmZfYXJndW1lbnRzKQpAQCAtMjM4OCw3
ICsyMzg4LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHJvZmlsZV93aQogewog
ICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKIAotICAgIGlmIChMZWdhY3lQ
cm9maWxlciogcHJvZmlsZXIgPSBzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmVuYWJsZWRQcm9maWxl
cigpKQorICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSBzdGFja0ZyYW1lLnZtLT5l
bmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJvZmlsZXItPndpbGxFeGVjdXRlKHN0YWNrRnJh
bWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpKTsKIH0KIApAQCAtMjM5
Niw3ICsyMzk2LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHJvZmlsZV9kaQog
ewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKIAotICAgIGlmIChMZWdh
Y3lQcm9maWxlciogcHJvZmlsZXIgPSBzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmVuYWJsZWRQcm9m
aWxlcigpKQorICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSBzdGFja0ZyYW1lLnZt
LT5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJvZmlsZXItPmRpZEV4ZWN1dGUoc3RhY2tG
cmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkpOwogfQogCkBAIC0y
NDc0LDcgKzI0NzQsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3Bf
CiAgICAgICAgIHJldHVyblZhbHVlID0gY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oY2Fs
bEZyYW1lKTsKICAgICB9CiAKLSAgICBpZiAoc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5leGNlcHRp
b24pCisgICAgaWYgKHN0YWNrRnJhbWUudm0tPmV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIHRo
cm93RXhjZXB0aW9uRnJvbU9wQ2FsbDxFbmNvZGVkSlNWYWx1ZT4oc3RhY2tGcmFtZSwgY2FsbEZy
YW1lLCBTVFVCX1JFVFVSTl9BRERSRVNTKTsKIAogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKQEAg
LTI1MjcsNyArMjUyNyw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBv
cF8KICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCiAgICAgICAgICAgICBKSVRB
cnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKG9iamVjdC0+c3Ry
dWN0dXJlKCkpOwogICAgICAgICAgICAgaWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlN
b2RlKSB7Ci0gICAgICAgICAgICAgICAgSklUOjpjb21waWxlR2V0QnlWYWwoJmNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBTVFVCX1JF
VFVSTl9BRERSRVNTLCBhcnJheU1vZGUpOworICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZUdl
dEJ5VmFsKCZjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICZieVZhbElu
Zm8sIFNUVUJfUkVUVVJOX0FERFJFU1MsIGFycmF5TW9kZSk7CiAgICAgICAgICAgICAgICAgZGlk
T3B0aW1pemUgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNjIwLDcgKzI2
MjAsNyBAQCBzdGF0aWMgdm9pZCBwdXRCeVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtCiAgICAgICAg
IGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICAgICAgSlNPYmplY3QqIG9iamVj
dCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CiAgICAgICAgICAgICBpZiAob2JqZWN0LT5jYW5TZXRJ
bmRleFF1aWNrbHkoaSkpCi0gICAgICAgICAgICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHko
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBvYmpl
Y3QtPnNldEluZGV4UXVpY2tseShjYWxsRnJhbWUtPnZtKCksIGksIHZhbHVlKTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5k
ZXgob2JqZWN0LCBjYWxsRnJhbWUsIGksIHZhbHVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5p
c1N0cmljdE1vZGUoKSk7CiAgICAgICAgIH0gZWxzZQpAQCAtMjYzMCw3ICsyNjMwLDcgQEAgc3Rh
dGljIHZvaWQgcHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbQogICAgICAgICBiYXNlVmFsdWUu
cHV0KGNhbGxGcmFtZSwganNDYXN0PE5hbWVJbnN0YW5jZSo+KHN1YnNjcmlwdC5hc0NlbGwoKSkt
PnByaXZhdGVOYW1lKCksIHZhbHVlLCBzbG90KTsKICAgICB9IGVsc2UgewogICAgICAgICBJZGVu
dGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSkt
PnZhbHVlKGNhbGxGcmFtZSkpOwotICAgICAgICBpZiAoIWNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
LmV4Y2VwdGlvbikgeyAvLyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3
IGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgaWYgKCFjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uKSB7
IC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9u
LgogICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoY2FsbEZyYW1lLT5jb2RlQmxvY2so
KS0+aXNTdHJpY3RNb2RlKCkpOwogICAgICAgICAgICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUs
IHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CiAgICAgICAgIH0KQEAgLTI2NjEsNyArMjY2MSw3IEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV92YWwKICAgICAgICAgICAgIC8v
IEF0dGVtcHQgdG8gb3B0aW1pemUuCiAgICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2Rl
ID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKG9iamVjdC0+c3RydWN0dXJlKCkpOwogICAgICAg
ICAgICAgaWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKSB7Ci0gICAgICAgICAg
ICAgICAgSklUOjpjb21waWxlUHV0QnlWYWwoJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxs
RnJhbWUtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBhcnJh
eU1vZGUpOworICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsKCZjYWxsRnJhbWUt
PnZtKCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICZieVZhbEluZm8sIFNUVUJfUkVUVVJOX0FE
RFJFU1MsIGFycmF5TW9kZSk7CiAgICAgICAgICAgICAgICAgZGlkT3B0aW1pemUgPSB0cnVlOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNzk2LDcgKzI3OTYsNyBAQCBERUZJTkVfU1RV
Ql9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgUHJvcGVydHlTbG90IHNsb3Qob2Jq
ZWN0KTsKICAgICBBU1NFUlQoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0
cmljdE1vZGUoKSk7CiAgICAgaWYgKCFvYmplY3QtPmdldFByb3BlcnR5U2xvdChzdGFja0ZyYW1l
LmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKSwgc2xvdCkpIHsKLSAg
ICAgICAgc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVFcnJvckZvcklu
dmFsaWRHbG9iYWxBc3NpZ25tZW50KHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFy
Z3NbMV0uaWRlbnRpZmllcigpLnN0cmluZygpKTsKKyAgICAgICAgc3RhY2tGcmFtZS52bS0+ZXhj
ZXB0aW9uID0gY3JlYXRlRXJyb3JGb3JJbnZhbGlkR2xvYmFsQXNzaWdubWVudChzdGFja0ZyYW1l
LmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKS5zdHJpbmcoKSk7CiAg
ICAgICAgIFZNX1RIUk9XX0VYQ0VQVElPTigpOwogICAgIH0KIApAQCAtMzE3MywxMSArMzE3Mywx
MSBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX25ld19yCiAKICAgICBSZWdF
eHAqIHJlZ0V4cCA9IHN0YWNrRnJhbWUuYXJnc1swXS5yZWdFeHAoKTsKICAgICBpZiAoIXJlZ0V4
cC0+aXNWYWxpZCgpKSB7Ci0gICAgICAgIHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9u
ID0gY3JlYXRlU3ludGF4RXJyb3IoY2FsbEZyYW1lLCAiSW52YWxpZCBmbGFncyBzdXBwbGllZCB0
byBSZWdFeHAgY29uc3RydWN0b3IuIik7CisgICAgICAgIHN0YWNrRnJhbWUudm0tPmV4Y2VwdGlv
biA9IGNyZWF0ZVN5bnRheEVycm9yKGNhbGxGcmFtZSwgIkludmFsaWQgZmxhZ3Mgc3VwcGxpZWQg
dG8gUmVnRXhwIGNvbnN0cnVjdG9yLiIpOwogICAgICAgICBWTV9USFJPV19FWENFUFRJT04oKTsK
ICAgICB9CiAKLSAgICByZXR1cm4gUmVnRXhwT2JqZWN0OjpjcmVhdGUoKnN0YWNrRnJhbWUuZ2xv
YmFsRGF0YSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc3Rh
Y2tGcmFtZS5jYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJl
KCksIHJlZ0V4cCk7CisgICAgcmV0dXJuIFJlZ0V4cE9iamVjdDo6Y3JlYXRlKCpzdGFja0ZyYW1l
LnZtLCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzdGFja0Zy
YW1lLmNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSwg
cmVnRXhwKTsKIH0KIAogREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2Jp
dG9yKQpAQCAtMzIxMiw3ICszMjEyLDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpT
VmFsdWUsIG9wXwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAK
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWwoY2FsbEZyYW1lKTsKLSAgICBpZiAoc3RhY2tGcmFt
ZS5nbG9iYWxEYXRhLT5leGNlcHRpb24pCisgICAgaWYgKHN0YWNrRnJhbWUudm0tPmV4Y2VwdGlv
bikKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uRnJvbU9wQ2FsbDxFbmNvZGVkSlNWYWx1
ZT4oc3RhY2tGcmFtZSwgY2FsbEZyYW1lLCBTVFVCX1JFVFVSTl9BRERSRVNTKTsKIAogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTMyMjEsNyArMzIyMSw3IEBAIERFRklO
RV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIERFRklORV9TVFVCX0ZVTkNUSU9O
KHZvaWQqLCBvcF90aHJvdykKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFt
ZSk7Ci0gICAgRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gaml0VGhyb3coc3RhY2tGcmFtZS5n
bG9iYWxEYXRhLCBzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFs
dWUoKSwgU1RVQl9SRVRVUk5fQUREUkVTUyk7CisgICAgRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVy
ID0gaml0VGhyb3coc3RhY2tGcmFtZS52bSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJh
bWUuYXJnc1swXS5qc1ZhbHVlKCksIFNUVUJfUkVUVVJOX0FERFJFU1MpOwogICAgIFNUVUJfU0VU
X1JFVFVSTl9BRERSRVNTKGhhbmRsZXIuY2F0Y2hSb3V0aW5lKTsKICAgICByZXR1cm4gaGFuZGxl
ci5jYWxsRnJhbWU7CiB9CkBAIC0zMzQ3LDcgKzMzNDcsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElP
TihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgSlNWYWx1ZSBiYXNlVmFsID0gc3RhY2tGcmFtZS5h
cmdzWzFdLmpzVmFsdWUoKTsKIAogICAgIGlmICghYmFzZVZhbC5pc09iamVjdCgpKSB7Ci0gICAg
ICAgIHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlSW52YWxpZFBhcmFt
RXJyb3Ioc3RhY2tGcmFtZS5jYWxsRnJhbWUsICJpbiIsIGJhc2VWYWwpOworICAgICAgICBzdGFj
a0ZyYW1lLnZtLT5leGNlcHRpb24gPSBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihzdGFja0ZyYW1l
LmNhbGxGcmFtZSwgImluIiwgYmFzZVZhbCk7CiAgICAgICAgIFZNX1RIUk9XX0VYQ0VQVElPTigp
OwogICAgIH0KIApAQCAtMzQ2OSw3ICszNDY5LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5j
b2RlZEpTVmFsdWUsIG9wXwogICAgIH0KIAogICAgIGlmICghcmVzdWx0ICYmIGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKQotICAgICAgICBzdGFja0ZyYW1lLmdsb2JhbERh
dGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihzdGFja0ZyYW1lLmNhbGxGcmFtZSwgIlVu
YWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7CisgICAgICAgIHN0YWNrRnJhbWUudm0tPmV4Y2Vw
dGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihzdGFja0ZyYW1lLmNhbGxGcmFtZSwgIlVuYWJsZSB0byBk
ZWxldGUgcHJvcGVydHkuIik7CiAKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHJlc3VsdCkpOwpAQCAtMzQ5Myw5
ICszNDkzLDkgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2dldHRlcgogICAg
IEFTU0VSVChnZXR0ZXIuaXNPYmplY3QoKSB8fCBzZXR0ZXIuaXNPYmplY3QoKSk7CiAKICAgICBp
ZiAoIWdldHRlci5pc1VuZGVmaW5lZCgpKQotICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGNh
bGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBhc09iamVjdChnZXR0ZXIpKTsKKyAgICAgICAgYWNjZXNz
b3ItPnNldEdldHRlcihjYWxsRnJhbWUtPnZtKCksIGFzT2JqZWN0KGdldHRlcikpOwogICAgIGlm
ICghc2V0dGVyLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoY2Fs
bEZyYW1lLT5nbG9iYWxEYXRhKCksIGFzT2JqZWN0KHNldHRlcikpOworICAgICAgICBhY2Nlc3Nv
ci0+c2V0U2V0dGVyKGNhbGxGcmFtZS0+dm0oKSwgYXNPYmplY3Qoc2V0dGVyKSk7CiAgICAgYmFz
ZU9iai0+cHV0RGlyZWN0QWNjZXNzb3IoY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRl
bnRpZmllcigpLCBhY2Nlc3NvciwgQWNjZXNzb3IpOwogfQogCkBAIC0zNTA2LDkgKzM1MDYsOSBA
QCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF90aHJvd19zdGF0CiAgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKICAgICBTdHJpbmcgbWVzc2FnZSA9
IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUo
Y2FsbEZyYW1lKTsKICAgICBpZiAoc3RhY2tGcmFtZS5hcmdzWzFdLmFzSW50MzIpCi0gICAgICAg
IHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlUmVmZXJlbmNlRXJyb3Io
Y2FsbEZyYW1lLCBtZXNzYWdlKTsKKyAgICAgICAgc3RhY2tGcmFtZS52bS0+ZXhjZXB0aW9uID0g
Y3JlYXRlUmVmZXJlbmNlRXJyb3IoY2FsbEZyYW1lLCBtZXNzYWdlKTsKICAgICBlbHNlCi0gICAg
ICAgIHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNh
bGxGcmFtZSwgbWVzc2FnZSk7CisgICAgICAgIHN0YWNrRnJhbWUudm0tPmV4Y2VwdGlvbiA9IGNy
ZWF0ZVR5cGVFcnJvcihjYWxsRnJhbWUsIG1lc3NhZ2UpOwogICAgIFZNX1RIUk9XX0VYQ0VQVElP
Tl9BVF9FTkQoKTsKIH0KIApAQCAtMzUyMywxNCArMzUyMywxNCBAQCBERUZJTkVfU1RVQl9GVU5D
VElPTih2b2lkLCBvcF9kZWJ1ZykKICAgICBpbnQgbGFzdExpbmUgPSBzdGFja0ZyYW1lLmFyZ3Nb
Ml0uaW50MzIoKTsKICAgICBpbnQgY29sdW1uID0gc3RhY2tGcmFtZS5hcmdzWzNdLmludDMyKCk7
CiAKLSAgICBzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmludGVycHJldGVyLT5kZWJ1ZyhjYWxsRnJh
bWUsIHN0YXRpY19jYXN0PERlYnVnSG9va0lEPihkZWJ1Z0hvb2tJRCksIGZpcnN0TGluZSwgbGFz
dExpbmUsIGNvbHVtbik7CisgICAgc3RhY2tGcmFtZS52bS0+aW50ZXJwcmV0ZXItPmRlYnVnKGNh
bGxGcmFtZSwgc3RhdGljX2Nhc3Q8RGVidWdIb29rSUQ+KGRlYnVnSG9va0lEKSwgZmlyc3RMaW5l
LCBsYXN0TGluZSwgY29sdW1uKTsKIH0KIAogREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIHZt
X3Rocm93KQogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLSAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzdGFja0ZyYW1lLmdsb2JhbERhdGE7Ci0gICAgRXhj
ZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gaml0VGhyb3coZ2xvYmFsRGF0YSwgc3RhY2tGcmFtZS5j
YWxsRnJhbWUsIGdsb2JhbERhdGEtPmV4Y2VwdGlvbiwgZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uTG9j
YXRpb24pOworICAgIFZNKiB2bSA9IHN0YWNrRnJhbWUudm07CisgICAgRXhjZXB0aW9uSGFuZGxl
ciBoYW5kbGVyID0gaml0VGhyb3codm0sIHN0YWNrRnJhbWUuY2FsbEZyYW1lLCB2bS0+ZXhjZXB0
aW9uLCB2bS0+ZXhjZXB0aW9uTG9jYXRpb24pOwogICAgIFNUVUJfU0VUX1JFVFVSTl9BRERSRVNT
KGhhbmRsZXIuY2F0Y2hSb3V0aW5lKTsKICAgICByZXR1cm4gaGFuZGxlci5jYWxsRnJhbWU7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiAxNDg2ODMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgRXhlY3V0YWJsZVBvb2w7
CiBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CiBjbGFzcyBJZGVudGlmaWVyOwotY2xhc3MgSlNH
bG9iYWxEYXRhOworY2xhc3MgVk07CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNzIEpTT2Jq
ZWN0OwogY2xhc3MgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjsKQEAgLTk4LDcgKzk4LDcgQEAgc3Ry
dWN0IEpJVFN0YWNrRnJhbWUgewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lOwogICAgIHZvaWQq
IHVudXNlZDE7CiAgICAgdm9pZCogdW51c2VkMjsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGE7CisgICAgVk0qIHZtOwogCiAgICAgdm9pZCogc2F2ZWRSQlg7CiAgICAgdm9pZCogc2F2ZWRS
MTU7CkBAIC0xMzQsNyArMTM0LDcgQEAgc3RydWN0IEpJVFN0YWNrRnJhbWUgewogCiAgICAgLy8g
UGFzc2VkIG9uIHRoZSBzdGFjawogICAgIHZvaWQqIHVudXNlZDI7Ci0gICAgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhOworICAgIFZNKiB2bTsKIAogICAgIC8vIFdoZW4gSklUIGNvZGUgbWFrZXMg
YSBjYWxsLCBpdCBwdXNoZXMgaXRzIHJldHVybiBhZGRyZXNzIGp1c3QgYmVsb3cgdGhlIHJlc3Qg
b2YgdGhlIHN0YWNrLgogICAgIFJldHVybkFkZHJlc3NQdHIqIHJldHVybkFkZHJlc3NTbG90KCkg
eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSZXR1cm5BZGRyZXNzUHRyKj4odGhpcykgLSAxOyB9
CkBAIC0xNjIsNyArMTYyLDcgQEAgc3RydWN0IEpJVFN0YWNrRnJhbWUgewogICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lOwogICAgIHZvaWQqIHVudXNlZDE7CiAgICAgdm9pZCogdW51c2VkMjsKLSAg
ICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGE7CisgICAgVk0qIHZtOwogICAgICAgICAKICAgICAv
LyBXaGVuIEpJVCBjb2RlIG1ha2VzIGEgY2FsbCwgaXQgcHVzaGVzIGl0cyByZXR1cm4gYWRkcmVz
cyBqdXN0IGJlbG93IHRoZSByZXN0IG9mIHRoZSBzdGFjay4KICAgICBSZXR1cm5BZGRyZXNzUHRy
KiByZXR1cm5BZGRyZXNzU2xvdCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UmV0dXJuQWRk
cmVzc1B0cio+KHRoaXMpIC0gMTsgfQpAQCAtMTkzLDcgKzE5Myw3IEBAIHN0cnVjdCBKSVRTdGFj
a0ZyYW1lIHsKIAogICAgIC8vIFRoZXNlIGFyZ3VtZW50cyBwYXNzZWQgb24gdGhlIHN0YWNrLgog
ICAgIHZvaWQqIHVudXNlZDE7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhOworICAgIFZN
KiB2bTsKICAgICAgICAgCiAgICAgUmV0dXJuQWRkcmVzc1B0ciogcmV0dXJuQWRkcmVzc1Nsb3Qo
KSB7IHJldHVybiAmdGh1bmtSZXR1cm5BZGRyZXNzOyB9CiB9OwpAQCAtMjIzLDcgKzIyMyw3IEBA
IHN0cnVjdCBKSVRTdGFja0ZyYW1lIHsKIAogICAgIC8vIFRoZXNlIGFyZ3VtZW50cyBwYXNzZWQg
b24gdGhlIHN0YWNrLgogICAgIHZvaWQqIHVudXNlZDI7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhOworICAgIFZNKiB2bTsKIAogICAgIC8vIFdoZW4gSklUIGNvZGUgbWFrZXMgYSBjYWxs
LCBpdCBwdXNoZXMgaXRzIHJldHVybiBhZGRyZXNzIGp1c3QgYmVsb3cgdGhlIHJlc3Qgb2YgdGhl
IHN0YWNrLgogICAgIFJldHVybkFkZHJlc3NQdHIqIHJldHVybkFkZHJlc3NTbG90KCkgeyByZXR1
cm4gJnRodW5rUmV0dXJuQWRkcmVzczsgfQpAQCAtMjU3LDcgKzI1Nyw3IEBAIHN0cnVjdCBKSVRT
dGFja0ZyYW1lIHsKIAogICAgIC8vIFRoZXNlIGFyZ3VtZW50cyBwYXNzZWQgb24gdGhlIHN0YWNr
LgogICAgIHZvaWQqIHVudXNlZDI7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhOworICAg
IFZNKiB2bTsKIAogICAgIFJldHVybkFkZHJlc3NQdHIqIHJldHVybkFkZHJlc3NTbG90KCkgeyBy
ZXR1cm4gJnRodW5rUmV0dXJuQWRkcmVzczsgfQogfTsKQEAgLTI3OCw3ICsyNzgsNyBAQCBzdHJ1
Y3QgSklUU3RhY2tGcmFtZSB7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWU7CiAgICAgSlNWYWx1
ZSogZXhjZXB0aW9uOwogICAgIHZvaWQqIHVudXNlZDE7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhOworICAgIFZNKiB2bTsKIAogICAgIFJldHVybkFkZHJlc3NQdHIqIHJldHVybkFkZHJl
c3NTbG90KCkgeyByZXR1cm4gJnRodW5rUmV0dXJuQWRkcmVzczsgfQogfTsKQEAgLTMwNyw3ICsz
MDcsNyBAQCBzdHJ1Y3QgSklUU3RhY2tGcmFtZSB7CiAKIGV4dGVybiAiQyIgdm9pZCBjdGlWTVRo
cm93VHJhbXBvbGluZSgpOwogZXh0ZXJuICJDIiB2b2lkIGN0aU9wVGhyb3dOb3RDYXVnaHQoKTsK
LWV4dGVybiAiQyIgRW5jb2RlZEpTVmFsdWUgY3RpVHJhbXBvbGluZSh2b2lkKiBjb2RlLCBKU1N0
YWNrKiwgQ2FsbEZyYW1lKiwgdm9pZCogLyp1bnVzZWQxKi8sIHZvaWQqIC8qdW51c2VkMiovLCBK
U0dsb2JhbERhdGEqKTsKK2V4dGVybiAiQyIgRW5jb2RlZEpTVmFsdWUgY3RpVHJhbXBvbGluZSh2
b2lkKiBjb2RlLCBKU1N0YWNrKiwgQ2FsbEZyYW1lKiwgdm9pZCogLyp1bnVzZWQxKi8sIHZvaWQq
IC8qdW51c2VkMiovLCBWTSopOwogI2lmIEVOQUJMRShERkdfSklUKQogZXh0ZXJuICJDIiB2b2lk
IGN0aVRyYW1wb2xpbmVFbmQoKTsKIApAQCAtMzE4LDcgKzMxOCw3IEBAIGlubGluZSBib29sIHJl
dHVybkFkZHJlc3NJc0luQ3RpVHJhbXBvbGkKIH0KICNlbmRpZgogCi12b2lkIHBlcmZvcm1QbGF0
Zm9ybVNwZWNpZmljSklUQXNzZXJ0aW9ucyhKU0dsb2JhbERhdGEqKTsKK3ZvaWQgcGVyZm9ybVBs
YXRmb3JtU3BlY2lmaWNKSVRBc3NlcnRpb25zKFZNKik7CiAKIGV4dGVybiAiQyIgewogRW5jb2Rl
ZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2FkZChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9J
TlRFUk5BTDsKQEAgLTQ0OCw3ICs0NDgsNyBAQCB2b2lkKiBKSVRfU1RVQiBjdGlfdm1fdGhyb3co
U1RVQl9BUkdTX0RFCiAjZWxpZiBFTkFCTEUoTExJTlRfQ19MT09QKQogCiBzdHJ1Y3QgSklUU3Rh
Y2tGcmFtZSB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhOworICAgIFZNKiB2bTsKIH07
CiAKICNlbmRpZiAvLyBFTkFCTEUoTExJTlRfQ19MT09QKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUVGh1bmtzLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3
IEBACiAKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiSklULmgiCi0jaW5jbHVk
ZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJPcGVyYXRpb25z
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDQsNTYgKzQ0LDU2IEBAIEpJVFRodW5rczo6fkpJ
VFRodW5rcygpCiB7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBKSVRUaHVua3M6OmN0aU5h
dGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IEpJVFRodW5rczo6Y3RpTmF0aXZlQ2FsbChWTSogdm0pCiB7CiAjaWYgRU5BQkxFKExMSU5UKQot
ICAgIGlmICghZ2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkpCisgICAgaWYgKCF2bS0+Y2FuVXNlSklU
KCkpCiAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29k
ZVB0cihsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lKTsKICNlbmRpZgotICAgIHJldHVybiBj
dGlTdHViKGdsb2JhbERhdGEsIG5hdGl2ZUNhbGxHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICByZXR1
cm4gY3RpU3R1Yih2bSwgbmF0aXZlQ2FsbEdlbmVyYXRvcikuY29kZSgpOwogfQotTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIEpJVFRodW5rczo6Y3RpTmF0aXZlQ29uc3RydWN0KEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBKSVRUaHVua3M6OmN0aU5hdGl2ZUNv
bnN0cnVjdChWTSogdm0pCiB7CiAjaWYgRU5BQkxFKExMSU5UKQotICAgIGlmICghZ2xvYmFsRGF0
YS0+Y2FuVXNlSklUKCkpCisgICAgaWYgKCF2bS0+Y2FuVXNlSklUKCkpCiAgICAgICAgIHJldHVy
biBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9uYXRpdmVf
Y29uc3RydWN0X3RyYW1wb2xpbmUpOwogI2VuZGlmCi0gICAgcmV0dXJuIGN0aVN0dWIoZ2xvYmFs
RGF0YSwgbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCk7CisgICAgcmV0dXJuIGN0aVN0
dWIodm0sIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgSklUVGh1bmtzOjpjdGlTdHViKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
VGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIEpJVFRodW5r
czo6Y3RpU3R1YihWTSogdm0sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKICAgICBDVElT
dHViTWFwOjpBZGRSZXN1bHQgZW50cnkgPSBtX2N0aVN0dWJNYXAuYWRkKGdlbmVyYXRvciwgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmKCkpOwogICAgIGlmIChlbnRyeS5pc05ld0VudHJ5KQotICAgICAg
ICBlbnRyeS5pdGVyYXRvci0+dmFsdWUgPSBnZW5lcmF0b3IoZ2xvYmFsRGF0YSk7CisgICAgICAg
IGVudHJ5Lml0ZXJhdG9yLT52YWx1ZSA9IGdlbmVyYXRvcih2bSk7CiAgICAgcmV0dXJuIGVudHJ5
Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAotTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0
RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVu
Y3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQorTmF0aXZlRXhlY3V0YWJsZSogSklU
VGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKFZNKiB2bSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24s
IE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQogewogICAgIGlmIChOYXRpdmVFeGVjdXRhYmxl
KiBuYXRpdmVFeGVjdXRhYmxlID0gbV9ob3N0RnVuY3Rpb25TdHViTWFwLT5nZXQoZnVuY3Rpb24p
KQogICAgICAgICByZXR1cm4gbmF0aXZlRXhlY3V0YWJsZTsKIAotICAgIE5hdGl2ZUV4ZWN1dGFi
bGUqIG5hdGl2ZUV4ZWN1dGFibGUgPSBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERh
dGEsIEpJVDo6Y29tcGlsZUNUSU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuY3Rpb24pLCBmdW5j
dGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3Rp
TmF0aXZlQ29uc3RydWN0KGdsb2JhbERhdGEpKSwgY29uc3RydWN0b3IsIE5vSW50cmluc2ljKTsK
KyAgICBOYXRpdmVFeGVjdXRhYmxlKiBuYXRpdmVFeGVjdXRhYmxlID0gTmF0aXZlRXhlY3V0YWJs
ZTo6Y3JlYXRlKCp2bSwgSklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbCh2bSwgZnVuY3Rpb24pLCBm
dW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYo
Y3RpTmF0aXZlQ29uc3RydWN0KHZtKSksIGNvbnN0cnVjdG9yLCBOb0ludHJpbnNpYyk7CiAgICAg
d2Vha0FkZCgqbV9ob3N0RnVuY3Rpb25TdHViTWFwLCBmdW5jdGlvbiwgUGFzc1dlYWs8TmF0aXZl
RXhlY3V0YWJsZT4obmF0aXZlRXhlY3V0YWJsZSkpOwogICAgIHJldHVybiBuYXRpdmVFeGVjdXRh
YmxlOwogfQogCi1OYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgVGh1bmtH
ZW5lcmF0b3IgZ2VuZXJhdG9yLCBJbnRyaW5zaWMgaW50cmluc2ljKQorTmF0aXZlRXhlY3V0YWJs
ZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKFZNKiB2bSwgTmF0aXZlRnVuY3Rpb24gZnVu
Y3Rpb24sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciwgSW50cmluc2ljIGludHJpbnNpYykKIHsK
ICAgICBpZiAoTmF0aXZlRXhlY3V0YWJsZSogbmF0aXZlRXhlY3V0YWJsZSA9IG1faG9zdEZ1bmN0
aW9uU3R1Yk1hcC0+Z2V0KGZ1bmN0aW9uKSkKICAgICAgICAgcmV0dXJuIG5hdGl2ZUV4ZWN1dGFi
bGU7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZTsKICAgICBpZiAoZ2VuZXJhdG9y
KSB7Ci0gICAgICAgIGlmIChnbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSkKLSAgICAgICAgICAgIGNv
ZGUgPSBnZW5lcmF0b3IoZ2xvYmFsRGF0YSk7CisgICAgICAgIGlmICh2bS0+Y2FuVXNlSklUKCkp
CisgICAgICAgICAgICBjb2RlID0gZ2VuZXJhdG9yKHZtKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgY29kZSA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOwogICAgIH0gZWxzZQotICAgICAg
ICBjb2RlID0gSklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBmdW5jdGlvbik7
CisgICAgICAgIGNvZGUgPSBKSVQ6OmNvbXBpbGVDVElOYXRpdmVDYWxsKHZtLCBmdW5jdGlvbik7
CiAKLSAgICBOYXRpdmVFeGVjdXRhYmxlKiBuYXRpdmVFeGVjdXRhYmxlID0gTmF0aXZlRXhlY3V0
YWJsZTo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBjb2RlLCBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KGdsb2Jh
bERhdGEpKSwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsIGludHJpbnNpYyk7CisgICAg
TmF0aXZlRXhlY3V0YWJsZSogbmF0aXZlRXhlY3V0YWJsZSA9IE5hdGl2ZUV4ZWN1dGFibGU6OmNy
ZWF0ZSgqdm0sIGNvZGUsIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNl
bGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDb25zdHJ1Y3Qodm0pKSwgY2FsbEhvc3RGdW5jdGlv
bkFzQ29uc3RydWN0b3IsIGludHJpbnNpYyk7CiAgICAgd2Vha0FkZCgqbV9ob3N0RnVuY3Rpb25T
dHViTWFwLCBmdW5jdGlvbiwgUGFzc1dlYWs8TmF0aXZlRXhlY3V0YWJsZT4obmF0aXZlRXhlY3V0
YWJsZSkpOwogICAgIHJldHVybiBuYXRpdmVFeGVjdXRhYmxlOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFRodW5rcy5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsK
IGNsYXNzIE5hdGl2ZUV4ZWN1dGFibGU7CiAKIGNsYXNzIEpJVFRodW5rcyB7CkBAIC01MSwxMyAr
NTEsMTMgQEAgcHVibGljOgogICAgIEpJVFRodW5rcygpOwogICAgIH5KSVRUaHVua3MoKTsKIAot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSopOwot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlOYXRpdmVDb25zdHJ1Y3QoSlNHbG9iYWxEYXRh
Kik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aU5hdGl2ZUNhbGwoVk0qKTsKKyAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpTmF0aXZlQ29uc3RydWN0KFZNKik7CiAKLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgY3RpU3R1YihKU0dsb2JhbERhdGEqLCBUaHVua0dlbmVyYXRvcik7
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGN0aVN0dWIoVk0qLCBUaHVua0dlbmVyYXRvcik7
CiAKLSAgICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSos
IE5hdGl2ZUZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3Rvcik7Ci0gICAgTmF0aXZl
RXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihKU0dsb2JhbERhdGEqLCBOYXRpdmVGdW5jdGlv
biwgVGh1bmtHZW5lcmF0b3IsIEludHJpbnNpYyk7CisgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9z
dEZ1bmN0aW9uU3R1YihWTSosIE5hdGl2ZUZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1
Y3Rvcik7CisgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihWTSosIE5hdGl2
ZUZ1bmN0aW9uLCBUaHVua0dlbmVyYXRvciwgSW50cmluc2ljKTsKIAogICAgIHZvaWQgY2xlYXJI
b3N0RnVuY3Rpb25TdHVicygpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFdyaXRlQmFycmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUV3JpdGVCYXJyaWVyLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUV3JpdGVCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcg
QEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU0NlbGw7Ci1jbGFzcyBKU0dsb2JhbERhdGE7
CitjbGFzcyBWTTsKIAogLy8gTmVlZHMgdG8gYmUgZXZlbiB0byBhcHBlYXNlIHNvbWUgb2YgdGhl
IGJhY2tlbmRzLgogI2RlZmluZSBKSVRXcml0ZUJhcnJpZXJGbGFnICgodm9pZCopMikKQEAgLTc3
LDcgKzc3LDcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIHNldChKU0ds
b2JhbERhdGEmLCBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgbG9jYXRpb24sIEpTQ2VsbCogb3du
ZXIsIEpTQ2VsbCogdmFsdWUpCisgICAgdm9pZCBzZXQoVk0mLCBDb2RlTG9jYXRpb25EYXRhTGFi
ZWxQdHIgbG9jYXRpb24sIEpTQ2VsbCogb3duZXIsIEpTQ2VsbCogdmFsdWUpCiAgICAgewogICAg
ICAgICBIZWFwOjp3cml0ZUJhcnJpZXIob3duZXIsIHZhbHVlKTsKICAgICAgICAgbV9sb2NhdGlv
biA9IGxvY2F0aW9uOwpAQCAtMTE2LDE1ICsxMTYsMTUgQEAgcHVibGljOgogICAgIHsKICAgICB9
CiAKLSAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIENvZGVMb2NhdGlvbkRh
dGFMYWJlbFB0ciBsb2NhdGlvbiwgSlNDZWxsKiBvd25lciwgVCogdmFsdWUpCisgICAgdm9pZCBz
ZXQoVk0mIHZtLCBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgbG9jYXRpb24sIEpTQ2VsbCogb3du
ZXIsIFQqIHZhbHVlKQogICAgIHsKICAgICAgICAgdmFsaWRhdGVDZWxsKG93bmVyKTsKICAgICAg
ICAgdmFsaWRhdGVDZWxsKHZhbHVlKTsKLSAgICAgICAgSklUV3JpdGVCYXJyaWVyQmFzZTo6c2V0
KGdsb2JhbERhdGEsIGxvY2F0aW9uLCBvd25lciwgdmFsdWUpOworICAgICAgICBKSVRXcml0ZUJh
cnJpZXJCYXNlOjpzZXQodm0sIGxvY2F0aW9uLCBvd25lciwgdmFsdWUpOwogICAgIH0KLSAgICB2
b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFQqIHZhbHVl
KQorICAgIHZvaWQgc2V0KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgVCogdmFsdWUpCiAgICAgewot
ICAgICAgICBzZXQoZ2xvYmFsRGF0YSwgbG9jYXRpb24oKSwgb3duZXIsIHZhbHVlKTsKKyAgICAg
ICAgc2V0KHZtLCBsb2NhdGlvbigpLCBvd25lciwgdmFsdWUpOwogICAgIH0KICAgICBUKiBnZXQo
KSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6
ZWRUaHVua0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3Bl
Y2lhbGl6ZWRUaHVua0pJVC5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTAg
KzU1LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQo
ZW1pdExvYWRKU0NlbGwoc3JjLCBkc3QpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
dm9pZCBsb2FkSlNTdHJpbmdBcmd1bWVudChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGludCBh
cmd1bWVudCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgICAgIHZvaWQgbG9hZEpTU3RyaW5nQXJndW1l
bnQoVk0mIHZtLCBpbnQgYXJndW1lbnQsIFJlZ2lzdGVySUQgZHN0KQogICAgICAgICB7CiAgICAg
ICAgICAgICBsb2FkQ2VsbEFyZ3VtZW50KGFyZ3VtZW50LCBkc3QpOwotICAgICAgICAgICAgbV9m
YWlsdXJlcy5hcHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKGRzdCwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoZ2xvYmFsRGF0YS5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChicmFuY2hQdHIoTm90
RXF1YWwsIEFkZHJlc3MoZHN0LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZElt
bVB0cih2bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIHZvaWQgbG9hZEludDMyQXJndW1lbnQoaW50IGFyZ3VtZW50LCBSZWdpc3RlcklEIGRz
dCwgSnVtcCYgZmFpbFRhcmdldCkKQEAgLTEzMCw5ICsxMzAsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIHJldCgpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgZmluYWxpemUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgZmFsbGJhY2ssIGNvbnN0IGNoYXIqIHRodW5rS2luZCkKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZpbmFsaXplKFZNJiB2bSwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGZhbGxiYWNrLCBjb25zdCBjaGFyKiB0aHVua0tpbmQpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoZ2xvYmFsRGF0YSwgdGhpcywgR0xPQkFMX1RIVU5L
X0lEKTsKKyAgICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIodm0sIHRoaXMsIEdMT0JB
TF9USFVOS19JRCk7CiAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fZmFpbHVyZXMsIENv
ZGVMb2NhdGlvbkxhYmVsKGZhbGxiYWNrKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9jYWxscy5zaXplKCk7IGkrKykKICAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKG1fY2FsbHNbaV0uZmlyc3QsIG1fY2FsbHNbaV0uc2Vjb25kKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE0ODY4MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsMTAgKzMxLDEwIEBACiAjaWYgRU5BQkxFKEpJVCkKIAogbmFtZXNwYWNlIEpT
QyB7Ci1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIGNsYXNzIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjsKIAotdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgKCpUaHVua0dlbmVyYXRv
cikoSlNHbG9iYWxEYXRhKik7Cit0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiAoKlRodW5r
R2VuZXJhdG9yKShWTSopOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMTQ4Njgz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMg
SlNJbnRlcmZhY2VKSVQ6OkNhbGwgZ2VuZXJhdGVTbG93Q2FzZUZvcihKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIEpTSW50ZXJmYWNlSklUJiBqaXQpCitzdGF0aWMgSlNJbnRlcmZhY2VKSVQ6OkNh
bGwgZ2VuZXJhdGVTbG93Q2FzZUZvcihWTSogdm0sIEpTSW50ZXJmYWNlSklUJiBqaXQpCiB7CiAg
ICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1l
LCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOwogICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlclB0cihKU1N0YWNrOjpTY29wZUNoYWluLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIsIEpTSW50
ZXJmYWNlSklUOjpyZWdUMik7CkBAIC00OCw3ICs0OCw3IEBAIHN0YXRpYyBKU0ludGVyZmFjZUpJ
VDo6Q2FsbCBnZW5lcmF0ZVNsb3cKICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEpT
SW50ZXJmYWNlSklUOjpyZWdUMywgSlNTdGFjazo6UmV0dXJuUEMpOwogICAgIGppdC5lbWl0UHV0
SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFkZXIoMCwgSlNTdGFjazo6Q29kZUJsb2NrKTsKIAotICAg
IGppdC5zdG9yZVB0cihKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZnbG9iYWxE
YXRhLT50b3BDYWxsRnJhbWUpOworICAgIGppdC5zdG9yZVB0cihKU0ludGVyZmFjZUpJVDo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsKICAgICBqaXQucmVzdG9yZUFyZ3Vt
ZW50UmVmZXJlbmNlKCk7CiAgICAgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgY2FsbE5vdEpTRnVuY3Rp
b24gPSBqaXQuY2FsbCgpOwogICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihK
U1N0YWNrOjpDYWxsZXJGcmFtZSwgSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyKTsK
QEAgLTU4LDcgKzU4LDcgQEAgc3RhdGljIEpTSW50ZXJmYWNlSklUOjpDYWxsIGdlbmVyYXRlU2xv
dwogICAgIHJldHVybiBjYWxsTm90SlNGdW5jdGlvbjsKIH0KIAotc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBsaW5rRm9yR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRnVu
Y3Rpb25QdHIgbGF6eUxpbmssIEZ1bmN0aW9uUHRyIG5vdEpTRnVuY3Rpb24sIGNvbnN0IGNoYXIq
IG5hbWUpCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtGb3JHZW5lcmF0b3IoVk0q
IHZtLCBGdW5jdGlvblB0ciBsYXp5TGluaywgRnVuY3Rpb25QdHIgbm90SlNGdW5jdGlvbiwgY29u
c3QgY2hhciogbmFtZSkKIHsKICAgICBKU0ludGVyZmFjZUpJVCBqaXQ7CiAgICAgCkBAIC04MCwz
OCArODAsMzggQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rRm9yR2VuZQogICAg
IGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoSlNJbnRlcmZhY2VKSVQ6OnJlZ1Qz
KTsKICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEpTSW50ZXJmYWNlSklUOjpyZWdU
MywgSlNTdGFjazo6UmV0dXJuUEMpOwogICAgIAotICAgIGppdC5zdG9yZVB0cihKU0ludGVyZmFj
ZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZnbG9iYWxEYXRhLT50b3BDYWxsRnJhbWUpOworICAg
IGppdC5zdG9yZVB0cihKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS0+dG9w
Q2FsbEZyYW1lKTsKICAgICBqaXQucmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CiAgICAgSlNJ
bnRlcmZhY2VKSVQ6OkNhbGwgY2FsbExhenlMaW5rID0gaml0LmNhbGwoKTsKICAgICBqaXQucmVz
dG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzKTsKICAg
ICBqaXQuanVtcChKU0ludGVyZmFjZUpJVDo6cmVnVDApOwogICAgIAogICAgIHNsb3dDYXNlLmxp
bmsoJmppdCk7Ci0gICAgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgY2FsbE5vdEpTRnVuY3Rpb24gPSBn
ZW5lcmF0ZVNsb3dDYXNlRm9yKGdsb2JhbERhdGEsIGppdCk7CisgICAgSlNJbnRlcmZhY2VKSVQ6
OkNhbGwgY2FsbE5vdEpTRnVuY3Rpb24gPSBnZW5lcmF0ZVNsb3dDYXNlRm9yKHZtLCBqaXQpOwog
ICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIEdMT0JB
TF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JB
TF9USFVOS19JRCk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsTGF6eUxpbmssIGxhenlMaW5r
KTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxOb3RKU0Z1bmN0aW9uLCBub3RKU0Z1bmN0aW9u
KTsKICAgICAKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJsaW5rICVz
IHRyYW1wb2xpbmUiLCBuYW1lKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2Fs
bEdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbGlua0NhbGxHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBsaW5rRm9yR2VuZXJh
dG9yKGdsb2JhbERhdGEsIEZ1bmN0aW9uUHRyKGN0aV92bV9sYXp5TGlua0NhbGwpLCBGdW5jdGlv
blB0cihjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKSwgImNhbGwiKTsKKyAgICByZXR1cm4gbGlu
a0ZvckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX3ZtX2xhenlMaW5rQ2FsbCksIEZ1bmN0
aW9uUHRyKGN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24pLCAiY2FsbCIpOwogfQogCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWYgbGlua0NvbnN0cnVjdEdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NvbnN0cnVjdEdlbmVyYXRvcihWTSog
dm0pCiB7Ci0gICAgcmV0dXJuIGxpbmtGb3JHZW5lcmF0b3IoZ2xvYmFsRGF0YSwgRnVuY3Rpb25Q
dHIoY3RpX3ZtX2xhenlMaW5rQ29uc3RydWN0KSwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVj
dF9Ob3RKU0NvbnN0cnVjdCksICJjb25zdHJ1Y3QiKTsKKyAgICByZXR1cm4gbGlua0ZvckdlbmVy
YXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX3ZtX2xhenlMaW5rQ29uc3RydWN0KSwgRnVuY3Rpb25Q
dHIoY3RpX29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdCksICJjb25zdHJ1Y3QiKTsKIH0KIAot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRvcihKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsR2Vu
ZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gbGlua0ZvckdlbmVyYXRvcihnbG9iYWxEYXRh
LCBGdW5jdGlvblB0cihjdGlfdm1fbGF6eUxpbmtDbG9zdXJlQ2FsbCksIEZ1bmN0aW9uUHRyKGN0
aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24pLCAiY2xvc3VyZSBjYWxsIik7CisgICAgcmV0dXJuIGxp
bmtGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV92bV9sYXp5TGlua0Nsb3N1cmVDYWxs
KSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbiksICJjbG9zdXJlIGNhbGwi
KTsKIH0KIAotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yR2VuZXJhdG9y
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRnVuY3Rpb25QdHIgY29tcGlsZSwgRnVuY3Rpb25Q
dHIgbm90SlNGdW5jdGlvbiwgY29uc3QgY2hhciogbmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQorc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yR2VuZXJhdG9y
KFZNKiB2bSwgRnVuY3Rpb25QdHIgY29tcGlsZSwgRnVuY3Rpb25QdHIgbm90SlNGdW5jdGlvbiwg
Y29uc3QgY2hhciogbmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIEpT
SW50ZXJmYWNlSklUIGppdDsKICAgICAKQEAgLTEzMSw3ICsxMzEsNyBAQCBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JHCiAgICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VK
SVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4
ZWN1dGFibGUoKSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CiAgICAgSlNJbnRlcmZhY2VKSVQ6
Okp1bXAgaGFzQ29kZUJsb2NrMSA9IGppdC5icmFuY2gzMihKU0ludGVyZmFjZUpJVDo6R3JlYXRl
clRoYW5PckVxdWFsLCBKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVn
VDIsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzRm9yKGtpbmQpKSwg
SlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMigwKSk7CiAgICAgaml0LnByZXNlcnZlUmV0dXJu
QWRkcmVzc0FmdGVyQ2FsbChKU0ludGVyZmFjZUpJVDo6cmVnVDMpOwotICAgIGppdC5zdG9yZVB0
cihKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZnbG9iYWxEYXRhLT50b3BDYWxs
RnJhbWUpOworICAgIGppdC5zdG9yZVB0cihKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0
ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsKICAgICBqaXQucmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNl
KCk7CiAgICAgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgY2FsbENvbXBpbGUgPSBqaXQuY2FsbCgpOwog
ICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihKU0ludGVyZmFjZUpJVDo6
cmVnVDMpOwpAQCAtMTQyLDI2ICsxNDIsMjYgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiB2aXJ0dWFsRm9yRwogICAgIGppdC5qdW1wKEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7CiAgICAg
CiAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKLSAgICBKU0ludGVyZmFjZUpJVDo6Q2FsbCBjYWxs
Tm90SlNGdW5jdGlvbiA9IGdlbmVyYXRlU2xvd0Nhc2VGb3IoZ2xvYmFsRGF0YSwgaml0KTsKKyAg
ICBKU0ludGVyZmFjZUpJVDo6Q2FsbCBjYWxsTm90SlNGdW5jdGlvbiA9IGdlbmVyYXRlU2xvd0Nh
c2VGb3Iodm0sIGppdCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFs
RGF0YSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxD
b21waWxlLCBjb21waWxlKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxOb3RKU0Z1bmN0aW9u
LCBub3RKU0Z1bmN0aW9uKTsKICAgICAKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgKCJ2aXJ0dWFsICVzIHRyYW1wb2xpbmUiLCBuYW1lKSk7CiB9CiAKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbEdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEp
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENhbGxHZW5lcmF0b3IoVk0qIHZtKQogewot
ICAgIHJldHVybiB2aXJ0dWFsRm9yR2VuZXJhdG9yKGdsb2JhbERhdGEsIEZ1bmN0aW9uUHRyKGN0
aV9vcF9jYWxsX2ppdENvbXBpbGUpLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0
aW9uKSwgImNhbGwiLCBDb2RlRm9yQ2FsbCk7CisgICAgcmV0dXJuIHZpcnR1YWxGb3JHZW5lcmF0
b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX2ppdENvbXBpbGUpLCBGdW5jdGlvblB0cihj
dGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKSwgImNhbGwiLCBDb2RlRm9yQ2FsbCk7CiB9CiAKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0R2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0R2Vu
ZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gdmlydHVhbEZvckdlbmVyYXRvcihnbG9iYWxE
YXRhLCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X2ppdENvbXBpbGUpLCBGdW5jdGlvblB0
cihjdGlfb3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0KSwgImNvbnN0cnVjdCIsIENvZGVGb3JD
b25zdHJ1Y3QpOworICAgIHJldHVybiB2aXJ0dWFsRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0
cihjdGlfb3BfY29uc3RydWN0X2ppdENvbXBpbGUpLCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3Ry
dWN0X05vdEpTQ29uc3RydWN0KSwgImNvbnN0cnVjdCIsIENvZGVGb3JDb25zdHJ1Y3QpOwogfQog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3RyaW5nTGVuZ3RoVHJhbXBvbGluZUdlbmVyYXRvcihK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3RyaW5nTGVu
Z3RoVHJhbXBvbGluZUdlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgSlNJbnRlcmZhY2VKSVQgaml0
OwogICAgIApAQCAtMTcxLDcgKzE3MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHJpbmdM
ZW5ndGhUcmFtcG8KICAgICBKU0ludGVyZmFjZUpJVDo6SnVtcCBmYWlsdXJlQ2FzZXMyID0gaml0
LmJyYW5jaFB0cigKICAgICAgICAgSlNJbnRlcmZhY2VKSVQ6Ok5vdEVxdWFsLCBKU0ludGVyZmFj
ZUpJVDo6QWRkcmVzcygKICAgICAgICAgICAgIEpTSW50ZXJmYWNlSklUOjpyZWdUMCwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1t
UHRyKGdsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOworICAgICAgICBKU0ludGVy
ZmFjZUpJVDo6VHJ1c3RlZEltbVB0cih2bS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CiAKICAg
ICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgVXN0cmluZy4K
ICAgICBqaXQubG9hZDMyKApAQCAtMTkzLDcgKzE5Myw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBzdHJpbmdMZW5ndGhUcmFtcG8KICAgICBKU0ludGVyZmFjZUpJVDo6SnVtcCBmYWlsdXJlQ2Fz
ZXMyID0gaml0LmJyYW5jaFB0cigKICAgICAgICAgSlNJbnRlcmZhY2VKSVQ6Ok5vdEVxdWFsLAog
ICAgICAgICBKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDAsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICBKU0ludGVyZmFjZUpJVDo6VHJ1c3Rl
ZEltbVB0cihnbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAgSlNJ
bnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIodm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwog
CiAgICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIFVzdHJp
bmcuCiAgICAgaml0LmxvYWQzMigKQEAgLTIxMiw3ICsyMTIsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgc3RyaW5nTGVuZ3RoVHJhbXBvCiAgICAgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgZmFpbHVy
ZUNhc2VzMkNhbGwgPSBqaXQubWFrZVRhaWxSZWN1cnNpdmVDYWxsKGZhaWx1cmVDYXNlczIpOwog
ICAgIEpTSW50ZXJmYWNlSklUOjpDYWxsIGZhaWx1cmVDYXNlczNDYWxsID0gaml0Lm1ha2VUYWls
UmVjdXJzaXZlQ2FsbChmYWlsdXJlQ2FzZXMzKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIAogICAgIHBh
dGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMUNhbGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRf
YnlfaWRfc3RyaW5nX2ZhaWwpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczJD
YWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7CkBAIC0yMjEs
MTQgKzIyMSwxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3RyaW5nTGVuZ3RoVHJhbXBvCiAg
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgic3RyaW5nIGxlbmd0aCB0cmFt
cG9saW5lIikpOwogfQogCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdl
bmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2VuZXJhdG9yKFZN
KiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIGludCBleGVjdXRhYmxl
T2Zmc2V0VG9GdW5jdGlvbiA9IE5hdGl2ZUV4ZWN1dGFibGU6Om9mZnNldE9mTmF0aXZlRnVuY3Rp
b25Gb3Ioa2luZCk7CiAgICAgCiAgICAgSlNJbnRlcmZhY2VKSVQgaml0OwogICAgIAogICAgIGpp
dC5lbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFkZXIoMCwgSlNTdGFjazo6Q29kZUJsb2Nr
KTsKLSAgICBqaXQuc3RvcmVQdHIoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCAm
Z2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsKKyAgICBqaXQuc3RvcmVQdHIoSlNJbnRlcmZhY2VK
SVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7CiAKICNpZiBDUFUoWDg2
KQogICAgIC8vIExvYWQgY2FsbGVyIGZyYW1lJ3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNhbGxm
cmFtZSBzbyB0aGF0IHdoYXRldmVyIHdlIGNhbGwgY2FuCkBAIC0zNzMsMTIgKzM3MywxMiBAQCBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdlCiAKICAgICAvLyBDaGVjayBm
b3IgYW4gZXhjZXB0aW9uCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBqaXQubG9hZDY0KCYoZ2xv
YmFsRGF0YS0+ZXhjZXB0aW9uKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyKTsKKyAgICBqaXQubG9h
ZDY0KCYodm0tPmV4Y2VwdGlvbiksIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CiAgICAgSlNJbnRl
cmZhY2VKSVQ6Okp1bXAgZXhjZXB0aW9uSGFuZGxlciA9IGppdC5icmFuY2hUZXN0NjQoSlNJbnRl
cmZhY2VKSVQ6Ok5vblplcm8sIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CiAjZWxzZQogICAgIEpT
SW50ZXJmYWNlSklUOjpKdW1wIGV4Y2VwdGlvbkhhbmRsZXIgPSBqaXQuYnJhbmNoMzIoCiAgICAg
ICAgIEpTSW50ZXJmYWNlSklUOjpOb3RFcXVhbCwKLSAgICAgICAgSlNJbnRlcmZhY2VKSVQ6OkFi
c29sdXRlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNoYXIqPigmZ2xvYmFsRGF0YS0+ZXhjZXB0
aW9uKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFn
KSksCisgICAgICAgIEpTSW50ZXJmYWNlSklUOjpBYnNvbHV0ZUFkZHJlc3MocmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oJnZtLT5leGNlcHRpb24pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwKICAgICAgICAgSlNJbnRlcmZhY2VKSVQ6OlRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CiAjZW5kaWYKIApAQCAtMzkxLDM1ICsz
OTEsMzUgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogICAgIC8v
IEdyYWIgdGhlIHJldHVybiBhZGRyZXNzLgogICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NB
ZnRlckNhbGwoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxKTsKIAotICAgIGppdC5tb3ZlKEpTSW50ZXJm
YWNlSklUOjpUcnVzdGVkSW1tUHRyKCZnbG9iYWxEYXRhLT5leGNlcHRpb25Mb2NhdGlvbiksIEpT
SW50ZXJmYWNlSklUOjpyZWdUMik7CisgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OlRydXN0
ZWRJbW1QdHIoJnZtLT5leGNlcHRpb25Mb2NhdGlvbiksIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7
CiAgICAgaml0LnN0b3JlUHRyKEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNJbnRlcmZhY2VKSVQ6
OnJlZ1QyKTsKICAgICBqaXQucG9rZShKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVv
Zih2b2lkKikpOwogCi0gICAgaml0LnN0b3JlUHRyKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVS
ZWdpc3RlciwgJmdsb2JhbERhdGEtPnRvcENhbGxGcmFtZSk7CisgICAgaml0LnN0b3JlUHRyKEpT
SW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwogICAg
IC8vIFNldCB0aGUgcmV0dXJuIGFkZHJlc3MuCiAgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6
OlRydXN0ZWRJbW1QdHIoRnVuY3Rpb25QdHIoY3RpVk1UaHJvd1RyYW1wb2xpbmUpLnZhbHVlKCkp
LCBKU0ludGVyZmFjZUpJVDo6cmVnVDEpOwogICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0Jl
Zm9yZVJldHVybihKU0ludGVyZmFjZUpJVDo6cmVnVDEpOwogCiAgICAgaml0LnJldCgpOwogCi0g
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgR0xPQkFMX1RIVU5L
X0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5L
X0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJuYXRpdmUgJXMg
dHJhbXBvbGluZSIsIHRvQ1N0cmluZyhraW5kKS5kYXRhKCkpKTsKIH0KIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIG5hdGl2ZUNhbGxHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0qIHZtKQogewotICAg
IHJldHVybiBuYXRpdmVGb3JHZW5lcmF0b3IoZ2xvYmFsRGF0YSwgQ29kZUZvckNhbGwpOworICAg
IHJldHVybiBuYXRpdmVGb3JHZW5lcmF0b3Iodm0sIENvZGVGb3JDYWxsKTsKIH0KIAotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9y
KFZNKiB2bSkKIHsKLSAgICByZXR1cm4gbmF0aXZlRm9yR2VuZXJhdG9yKGdsb2JhbERhdGEsIENv
ZGVGb3JDb25zdHJ1Y3QpOworICAgIHJldHVybiBuYXRpdmVGb3JHZW5lcmF0b3Iodm0sIENvZGVG
b3JDb25zdHJ1Y3QpOwogfQogCi1zdGF0aWMgdm9pZCBzdHJpbmdDaGFyTG9hZChTcGVjaWFsaXpl
ZFRodW5rSklUJiBqaXQsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK3N0YXRpYyB2b2lkIHN0
cmluZ0NoYXJMb2FkKFNwZWNpYWxpemVkVGh1bmtKSVQmIGppdCwgVk0qIHZtKQogewogICAgIC8v
IGxvYWQgc3RyaW5nCi0gICAgaml0LmxvYWRKU1N0cmluZ0FyZ3VtZW50KCpnbG9iYWxEYXRhLCBT
cGVjaWFsaXplZFRodW5rSklUOjpUaGlzQXJndW1lbnQsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJl
Z1QwKTsKKyAgICBqaXQubG9hZEpTU3RyaW5nQXJndW1lbnQoKnZtLCBTcGVjaWFsaXplZFRodW5r
SklUOjpUaGlzQXJndW1lbnQsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKIAogICAgIC8v
IExvYWQgc3RyaW5nIGxlbmd0aCB0byByZWdUMiwgYW5kIHN0YXJ0IHRoZSBwcm9jZXNzIG9mIGxv
YWRpbmcgdGhlIGRhdGEgcG9pbnRlciBpbnRvIHJlZ1QwCiAgICAgaml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgVGh1bmtIZWxwZXJz
Ojpqc1N0cmluZ0xlbmd0aE9mZnNldCgpKSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDIpOwpA
QCAtNDQ2LDUxICs0NDYsNTEgQEAgc3RhdGljIHZvaWQgc3RyaW5nQ2hhckxvYWQoU3BlY2lhbGl6
ZWRUaAogICAgIGNvbnQ4Qml0LmxpbmsoJmppdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNoYXJUb1N0
cmluZyhTcGVjaWFsaXplZFRodW5rSklUJiBqaXQsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgc3JjLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJ
RCBkc3QsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHNjcmF0Y2gpCitzdGF0aWMgdm9pZCBj
aGFyVG9TdHJpbmcoU3BlY2lhbGl6ZWRUaHVua0pJVCYgaml0LCBWTSogdm0sIE1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklEIHNyYywgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgZHN0LCBNYWNy
b0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBzY3JhdGNoKQogewogICAgIGppdC5hcHBlbmRGYWlsdXJl
KGppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzcmMsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoMHgxMDApKSk7Ci0gICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3Rl
clN0cmluZ3MoKSksIHNjcmF0Y2gpOworICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKHZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKSwgc2Ny
YXRjaCk7CiAgICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNo
LCBzcmMsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgMCksIGRzdCk7CiAgICAgaml0LmFwcGVu
ZEZhaWx1cmUoaml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGRzdCkpOwog
fQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQ29kZUF0VGh1
bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEpOwot
ICAgIHN0cmluZ0NoYXJMb2FkKGppdCwgZ2xvYmFsRGF0YSk7CisgICAgc3RyaW5nQ2hhckxvYWQo
aml0LCB2bSk7CiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Qw
KTsKLSAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRT
dHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRhKSwgImNoYXJDb2RlQXQiKTsKKyAgICByZXR1
cm4gaml0LmZpbmFsaXplKCp2bSwgdm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSwgImNo
YXJDb2RlQXQiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJBdFRodW5rR2VuZXJh
dG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFy
QXRUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQo
MSk7Ci0gICAgc3RyaW5nQ2hhckxvYWQoaml0LCBnbG9iYWxEYXRhKTsKLSAgICBjaGFyVG9TdHJp
bmcoaml0LCBnbG9iYWxEYXRhLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxKTsKKyAgICBzdHJp
bmdDaGFyTG9hZChqaXQsIHZtKTsKKyAgICBjaGFyVG9TdHJpbmcoaml0LCB2bSwgU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXpl
ZFRodW5rSklUOjpyZWdUMSk7CiAgICAgaml0LnJldHVybkpTQ2VsbChTcGVjaWFsaXplZFRodW5r
SklUOjpyZWdUMCk7Ci0gICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFs
RGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSksICJjaGFyQXQiKTsKKyAg
ICByZXR1cm4gaml0LmZpbmFsaXplKCp2bSwgdm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZt
KSwgImNoYXJBdCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnJvbUNoYXJDb2RlVGh1
bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBTcGVjaWFsaXpl
ZFRodW5rSklUIGppdCgxKTsKICAgICAvLyBsb2FkIGNoYXIgY29kZQogICAgIGppdC5sb2FkSW50
MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7Ci0gICAgY2hhclRvU3Ry
aW5nKGppdCwgZ2xvYmFsRGF0YSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxp
emVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSk7CisgICAgY2hh
clRvU3RyaW5nKGppdCwgdm0sIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXpl
ZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwogICAgIGppdC5y
ZXR1cm5KU0NlbGwoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwotICAgIHJldHVybiBqaXQu
ZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxs
KGdsb2JhbERhdGEpLCAiZnJvbUNoYXJDb2RlIik7CisgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgq
dm0sIHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSksICJmcm9tQ2hhckNvZGUiKTsKIH0K
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNxcnRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3FydFRodW5rR2VuZXJhdG9yKFZN
KiB2bSkKIHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxKTsKICAgICBpZiAoIWppdC5z
dXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRhKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2
ZUNhbGwodm0pKTsKIAogICAgIGppdC5sb2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGppdC5z
cXJ0RG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtK
SVQ6OmZwUmVnVDApOwogICAgIGppdC5yZXR1cm5Eb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6
ZnBSZWdUMCk7Ci0gICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0
YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSksICJzcXJ0Iik7CisgICAgcmV0
dXJuIGppdC5maW5hbGl6ZSgqdm0sIHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSksICJz
cXJ0Iik7CiB9CiAKIApAQCAtNTYxLDEyICs1NjEsMTIgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSBu
ZWdhdGl2ZUhhbGZDb25zdGFudAogc3RhdGljIGNvbnN0IGRvdWJsZSB6ZXJvQ29uc3RhbnQgPSAw
LjA7CiBzdGF0aWMgY29uc3QgZG91YmxlIGhhbGZDb25zdGFudCA9IDAuNTsKICAgICAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBmbG9vclRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBmbG9vclRodW5rR2VuZXJhdG9yKFZNKiB2bSkK
IHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBub25JbnRKdW1wOwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIoZmxvb3IpIHx8
ICFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVi
cy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRhKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5h
dGl2ZUNhbGwodm0pKTsKICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6cmVnVDAsIG5vbkludEp1bXApOwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgbm9uSW50SnVtcC5saW5rKCZqaXQpOwpAQCAtNTkw
LDE0ICs1OTAsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZsb29yVGh1bmtHZW5lcmF0bwog
ICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgZG91
YmxlUmVzdWx0LmxpbmsoJmppdCk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRo
dW5rSklUOjpmcFJlZ1QwKTsKLSAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBn
bG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRhKSwgImZsb29yIik7
CisgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqdm0sIHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2Fs
bCh2bSksICJmbG9vciIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2VpbFRodW5rR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
ZWlsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0
KDEpOwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIoY2VpbCkgfHwgIWppdC5zdXBwb3J0
c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6
Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVD
YWxsKGdsb2JhbERhdGEpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6
Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkp
OwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7CiAgICAgaml0LmxvYWRJbnQz
MkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAg
ICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwpAQCAtNjA5LDE0
ICs2MDksMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNlaWxUaHVua0dlbmVyYXRvcgogICAg
IGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgZG91Ymxl
UmVzdWx0LmxpbmsoJmppdCk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5r
SklUOjpmcFJlZ1QwKTsKLSAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9i
YWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRhKSwgImNlaWwiKTsKKyAg
ICByZXR1cm4gaml0LmZpbmFsaXplKCp2bSwgdm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZt
KSwgImNlaWwiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJvdW5kVGh1bmtHZW5lcmF0
b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJvdW5k
VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEp
OwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIoanNSb3VuZCkgfHwgIWppdC5zdXBwb3J0
c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6
Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVD
YWxsKGdsb2JhbERhdGEpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6
Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkp
OwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7CiAgICAgaml0LmxvYWRJbnQz
MkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAg
ICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwpAQCAtNjQzLDQw
ICs2NDMsNDAgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJvdW5kVGh1bmtHZW5lcmF0bwogICAg
IGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgZG91Ymxl
UmVzdWx0LmxpbmsoJmppdCk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5r
SklUOjpmcFJlZ1QwKTsKLSAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9i
YWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRhKSwgInJvdW5kIik7Cisg
ICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqdm0sIHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2
bSksICJyb3VuZCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhwVGh1bmtHZW5lcmF0
b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV4cFRo
dW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGV4
cCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5h
Z2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRh
KSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5h
Z2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKICAgICBTcGVjaWFs
aXplZFRodW5rSklUIGppdCgxKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQo
KSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFn
ZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKGdsb2JhbERhdGEp
KTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFn
ZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogICAgIGppdC5sb2Fk
RG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGppdC5jYWxsRG91YmxlVG9Eb3VibGUoVW5hcnlEb3Vi
bGVPcFdyYXBwZXIoZXhwKSk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5r
SklUOjpmcFJlZ1QwKTsKLSAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9i
YWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRhKSwgImV4cCIpOworICAg
IHJldHVybiBqaXQuZmluYWxpemUoKnZtLCB2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0p
LCAiZXhwIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsb2dUaHVua0dlbmVyYXRvcihK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbG9nVGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQogewogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIobG9nKSkK
LSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRD
b2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKGdsb2JhbERhdGEpKTsK
KyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRD
b2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogICAgIFNwZWNpYWxpemVk
VGh1bmtKSVQgaml0KDEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQot
ICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENv
ZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSkpOwor
ICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENv
ZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgaml0LmxvYWREb3Vi
bGVBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRo
dW5rSklUOjpyZWdUMCk7CiAgICAgaml0LmNhbGxEb3VibGVUb0RvdWJsZShVbmFyeURvdWJsZU9w
V3JhcHBlcihsb2cpKTsKICAgICBqaXQucmV0dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6
OmZwUmVnVDApOwotICAgIHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERh
dGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKGdsb2JhbERhdGEpLCAibG9nIik7CisgICAgcmV0
dXJuIGppdC5maW5hbGl6ZSgqdm0sIHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSksICJs
b2ciKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFic1RodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBhYnNUaHVua0dlbmVy
YXRvcihWTSogdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSk7CiAgICAgaWYg
KCFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50QWJzKCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRT
dHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRhKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0
aU5hdGl2ZUNhbGwodm0pKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRKdW1wOwog
ICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwg
bm9uSW50SnVtcCk7CiAgICAgaml0LnJzaGlmdDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Qw
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDMxKSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6
cmVnVDEpOwpAQCAtNjg5LDE0ICs2ODksMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFic1Ro
dW5rR2VuZXJhdG9yKAogICAgIGppdC5sb2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGppdC5h
YnNEb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6ZnBSZWdUMSk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpm
cFJlZ1QxKTsKLSAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRh
LT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRhKSwgImFicyIpOworICAgIHJldHVy
biBqaXQuZmluYWxpemUoKnZtLCB2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pLCAiYWJz
Iik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBwb3dUaHVua0dlbmVyYXRvcihKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcG93VGh1bmtHZW5lcmF0
b3IoVk0qIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDIpOwogICAgIGlmICgh
aml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMt
PmN0aU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKHZtKSk7CiAKICAgICBqaXQubG9hZERvdWJsZSgmb25lQ29uc3RhbnQsIFNwZWNpYWxp
emVkVGh1bmtKSVQ6OmZwUmVnVDEpOwogICAgIGppdC5sb2FkRG91YmxlQXJndW1lbnQoMCwgU3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwpA
QCAtNzQxLDcgKzc0MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBwb3dUaHVua0dlbmVyYXRv
cigKICAgICB9IGVsc2UKICAgICAgICAgaml0LmFwcGVuZEZhaWx1cmUobm9uSW50RXhwb25lbnQp
OwogCi0gICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0
U3R1YnMtPmN0aU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSksICJwb3ciKTsKKyAgICByZXR1cm4gaml0
LmZpbmFsaXplKCp2bSwgdm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSwgInBvdyIpOwog
fQogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Jz
LmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtH
ZW5lcmF0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDI2ICszMSwyNiBAQAogI2lmIEVOQUJM
RShKSVQpCiBuYW1lc3BhY2UgSlNDIHsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxs
R2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25z
dHJ1Y3RHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlu
a0Nsb3N1cmVDYWxsR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHZpcnR1YWxDYWxsR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7Ci1NYWNyb0Fz
c2VtYmxlckNvZGVSZWYgc3RyaW5nTGVuZ3RoVHJhbXBvbGluZUdlbmVyYXRvcihKU0dsb2JhbERh
dGEqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDYWxsR2VuZXJhdG9yKEpTR2xvYmFs
RGF0YSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcihK
U0dsb2JhbERhdGEqKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbEdlbmVyYXRvcihW
TSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qKTsK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxHZW5lcmF0b3IoVk0qKTsKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbEdlbmVyYXRvcihWTSopOworTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZiBzdHJpbmdMZW5ndGhUcmFtcG9saW5lR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgbmF0aXZlQ2FsbEdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcihWTSopOwogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGNoYXJBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSop
OwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFic1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSop
OwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNlaWxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEq
KTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBleHBUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEq
KTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmbG9vclRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxvZ1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJvdW5kVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxE
YXRhKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3FydFRodW5rR2VuZXJhdG9yKEpTR2xvYmFs
RGF0YSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHBvd1RodW5rR2VuZXJhdG9yKEpTR2xvYmFs
RGF0YSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihW
TSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJBdFRodW5rR2VuZXJhdG9yKFZNKik7CitN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBhYnNUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGNlaWxUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGV4cFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZmxvb3JUaHVu
a0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxvZ1RodW5rR2VuZXJhdG9y
KFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcm91bmRUaHVua0dlbmVyYXRvcihWTSopOwor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNxcnRUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHBvd1RodW5rR2VuZXJhdG9yKFZNKik7CiAKIH0KICNlbmRpZiAvLyBFTkFC
TEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAJ
KHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw5ICs2Miw5IEBAIHZvaWQgaW5pdGlhbGl6ZSgp
CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGlj
IGlnbm9yZWQgIi1XbWlzc2luZy1ub3JldHVybiIKICNlbmRpZgotdm9pZCBEYXRhOjpwZXJmb3Jt
QXNzZXJ0aW9ucyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIERhdGE6OnBlcmZvcm1B
c3NlcnRpb25zKFZNJiB2bSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsRGF0YSk7CisgICAg
VU5VU0VEX1BBUkFNKHZtKTsKICAgICAKICAgICAvLyBBc3NlcnRpb25zIHRvIG1hdGNoIExvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtLiAgSWYgeW91IGNoYW5nZSBhbnkgb2YgdGhpcyBjb2RlLCBiZQog
ICAgIC8vIHByZXBhcmVkIHRvIGNoYW5nZSBMb3dMZXZlbEludGVycHJldGVyLmFzbSBhcyB3ZWxs
ISEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmgJKHJldmlzaW9u
IDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3Mg
SlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiBzdHJ1Y3QgSW5zdHJ1Y3Rpb247CiAKICNpZiBFTkFC
TEUoTExJTlRfQ19MT09QKQpAQCAtNDcsNyArNDcsNyBAQCBuYW1lc3BhY2UgTExJbnQgewogCiBj
bGFzcyBEYXRhIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBwZXJmb3JtQXNzZXJ0aW9ucyhK
U0dsb2JhbERhdGEmKTsKKyAgICBzdGF0aWMgdm9pZCBwZXJmb3JtQXNzZXJ0aW9ucyhWTSYpOwog
CiBwcml2YXRlOgogICAgIHN0YXRpYyBJbnN0cnVjdGlvbiogc19leGNlcHRpb25JbnN0cnVjdGlv
bnM7CkBAIC05Niw3ICs5Niw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCogZ2V0Q29kZVB0cihPcGNv
ZGVJRCAKIAogY2xhc3MgRGF0YSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgcGVyZm9ybUFz
c2VydGlvbnMoSlNHbG9iYWxEYXRhJikgeyB9CisgICAgc3RhdGljIHZvaWQgcGVyZm9ybUFzc2Vy
dGlvbnMoVk0mKSB7IH0KIH07CiAKICNpZiBDT01QSUxFUihDTEFORykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludEVudHJ5cG9pbnRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50cy5jcHAJKHJldmlzaW9u
IDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEVudHJ5cG9pbnRz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2lmIEVOQUJMRShMTElOVCkK
IAogI2luY2x1ZGUgIkpJVENvZGUuaCIKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNs
dWRlICJWTS5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiTExJbnRUaHVua3Mu
aCIKICNpbmNsdWRlICJMb3dMZXZlbEludGVycHJldGVyLmgiCkBAIC0zNyw5ICszNyw5IEBACiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgTExJbnQgewogCi12b2lkIGdldEZ1bmN0aW9uRW50
cnlwb2ludChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCwgSklUQ29kZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBhcml0eUNoZWNr
KQordm9pZCBnZXRGdW5jdGlvbkVudHJ5cG9pbnQoVk0mIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQsIEpJVENvZGUmIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgYXJpdHlD
aGVjaykKIHsKLSAgICBpZiAoIWdsb2JhbERhdGEuY2FuVXNlSklUKCkpIHsKKyAgICBpZiAoIXZt
LmNhblVzZUpJVCgpKSB7CiAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7CiAgICAg
ICAgICAgICBqaXRDb2RlID0gSklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxM
SW50Q29kZVJlZihsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSksIEpJVENvZGU6Oklu
dGVycHJldGVyVGh1bmspOwogICAgICAgICAgICAgYXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5
X2NoZWNrKTsKQEAgLTU0LDM2ICs1NCwzNiBAQCB2b2lkIGdldEZ1bmN0aW9uRW50cnlwb2ludChK
U0dsb2JhbERhdGEmCiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoa2luZCA9PSBDb2Rl
Rm9yQ2FsbCkgewotICAgICAgICBqaXRDb2RlID0gSklUQ29kZShnbG9iYWxEYXRhLmdldENUSVN0
dWIoZnVuY3Rpb25Gb3JDYWxsRW50cnlUaHVua0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJl
dGVyVGh1bmspOwotICAgICAgICBhcml0eUNoZWNrID0gZ2xvYmFsRGF0YS5nZXRDVElTdHViKGZ1
bmN0aW9uRm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpOworICAgICAgICBq
aXRDb2RlID0gSklUQ29kZSh2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtH
ZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKTsKKyAgICAgICAgYXJpdHlDaGVj
ayA9IHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9y
KS5jb2RlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBBU1NFUlQoa2luZCA9PSBD
b2RlRm9yQ29uc3RydWN0KTsKLSAgICBqaXRDb2RlID0gSklUQ29kZShnbG9iYWxEYXRhLmdldENU
SVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6
SW50ZXJwcmV0ZXJUaHVuayk7Ci0gICAgYXJpdHlDaGVjayA9IGdsb2JhbERhdGEuZ2V0Q1RJU3R1
YihmdW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpOwor
ICAgIGppdENvZGUgPSBKSVRDb2RlKHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1Y3RF
bnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuayk7CisgICAgYXJp
dHlDaGVjayA9IHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1Y3RBcml0eUNoZWNrVGh1
bmtHZW5lcmF0b3IpLmNvZGUoKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogfQogCi12b2lkIGdl
dEV2YWxFbnRyeXBvaW50KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSklUQ29kZSYgaml0Q29k
ZSkKK3ZvaWQgZ2V0RXZhbEVudHJ5cG9pbnQoVk0mIHZtLCBKSVRDb2RlJiBqaXRDb2RlKQogewot
ICAgIGlmICghZ2xvYmFsRGF0YS5jYW5Vc2VKSVQoKSkgeworICAgIGlmICghdm0uY2FuVXNlSklU
KCkpIHsKICAgICAgICAgaml0Q29kZSA9IEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpj
cmVhdGVMTEludENvZGVSZWYobGxpbnRfZXZhbF9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJl
dGVyVGh1bmspOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2lmIEVOQUJMRShKSVQpICAgIAot
ICAgIGppdENvZGUgPSBKSVRDb2RlKGdsb2JhbERhdGEuZ2V0Q1RJU3R1YihldmFsRW50cnlUaHVu
a0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspOworICAgIGppdENvZGUgPSBK
SVRDb2RlKHZtLmdldENUSVN0dWIoZXZhbEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJ
bnRlcnByZXRlclRodW5rKTsKICNlbmRpZgogfQogCi12b2lkIGdldFByb2dyYW1FbnRyeXBvaW50
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSklUQ29kZSYgaml0Q29kZSkKK3ZvaWQgZ2V0UHJv
Z3JhbUVudHJ5cG9pbnQoVk0mIHZtLCBKSVRDb2RlJiBqaXRDb2RlKQogewotICAgIGlmICghZ2xv
YmFsRGF0YS5jYW5Vc2VKSVQoKSkgeworICAgIGlmICghdm0uY2FuVXNlSklUKCkpIHsKICAgICAg
ICAgaml0Q29kZSA9IEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENv
ZGVSZWYobGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmsp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogI2lmIEVOQUJMRShKSVQpCi0gICAgaml0Q29kZSA9
IEpJVENvZGUoZ2xvYmFsRGF0YS5nZXRDVElTdHViKHByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9y
KSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuayk7CisgICAgaml0Q29kZSA9IEpJVENvZGUodm0u
Z2V0Q1RJU3R1Yihwcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJl
dGVyVGh1bmspOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludEVudHJ5cG9pbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50RW50cnlwb2ludHMuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzYsMjUgKzM2LDI1IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBFdmFsQ29kZUJsb2NrOwog
Y2xhc3MgSklUQ29kZTsKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwogY2xhc3MgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyOwogY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOwogY2xhc3Mg
UHJvZ3JhbUNvZGVCbG9jazsKIAogbmFtZXNwYWNlIExMSW50IHsKIAotdm9pZCBnZXRGdW5jdGlv
bkVudHJ5cG9pbnQoSlNHbG9iYWxEYXRhJiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgSklUQ29k
ZSYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgYXJpdHlDaGVjayk7Ci12b2lkIGdldEV2YWxFbnRy
eXBvaW50KEpTR2xvYmFsRGF0YSYsIEpJVENvZGUmKTsKLXZvaWQgZ2V0UHJvZ3JhbUVudHJ5cG9p
bnQoSlNHbG9iYWxEYXRhJiwgSklUQ29kZSYpOwordm9pZCBnZXRGdW5jdGlvbkVudHJ5cG9pbnQo
Vk0mLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBKSVRDb2RlJiwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyJiBhcml0eUNoZWNrKTsKK3ZvaWQgZ2V0RXZhbEVudHJ5cG9pbnQoVk0mLCBKSVRDb2RlJik7
Cit2b2lkIGdldFByb2dyYW1FbnRyeXBvaW50KFZNJiwgSklUQ29kZSYpOwogCi1pbmxpbmUgdm9p
ZCBnZXRFbnRyeXBvaW50KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXZhbENvZGVCbG9jayos
IEpJVENvZGUmIGppdENvZGUpCitpbmxpbmUgdm9pZCBnZXRFbnRyeXBvaW50KFZNJiB2bSwgRXZh
bENvZGVCbG9jayosIEpJVENvZGUmIGppdENvZGUpCiB7Ci0gICAgZ2V0RXZhbEVudHJ5cG9pbnQo
Z2xvYmFsRGF0YSwgaml0Q29kZSk7CisgICAgZ2V0RXZhbEVudHJ5cG9pbnQodm0sIGppdENvZGUp
OwogfQogCi1pbmxpbmUgdm9pZCBnZXRFbnRyeXBvaW50KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgUHJvZ3JhbUNvZGVCbG9jayosIEpJVENvZGUmIGppdENvZGUpCitpbmxpbmUgdm9pZCBnZXRF
bnRyeXBvaW50KFZNJiB2bSwgUHJvZ3JhbUNvZGVCbG9jayosIEpJVENvZGUmIGppdENvZGUpCiB7
Ci0gICAgZ2V0UHJvZ3JhbUVudHJ5cG9pbnQoZ2xvYmFsRGF0YSwgaml0Q29kZSk7CisgICAgZ2V0
UHJvZ3JhbUVudHJ5cG9pbnQodm0sIGppdENvZGUpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6TExJbnQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4
Y2VwdGlvbnMuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTQgKzQ4LDE0
IEBAIHN0YXRpYyB2b2lkIGZpeHVwUENmb3JFeGNlcHRpb25JZk5lZWRlZCgKIAogdm9pZCBpbnRl
cnByZXRlclRocm93SW5DYWxsZXIoRXhlY1N0YXRlKiBleGVjLCBSZXR1cm5BZGRyZXNzUHRyIHBj
KQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICNpZiBMTElOVF9TTE9XX1BBVEhfVFJBQ0lORwotICAgIGRhdGFMb2coIlRo
cm93aW5nIGV4Y2VwdGlvbiAiLCBnbG9iYWxEYXRhLT5leGNlcHRpb24sICIuXG4iKTsKKyAgICBk
YXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwgdm0tPmV4Y2VwdGlvbiwgIi5cbiIpOwogI2Vu
ZGlmCiAgICAgZml4dXBQQ2ZvckV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMpOwogICAgIGdlbmVyaWNU
aHJvdygKLSAgICAgICAgZ2xvYmFsRGF0YSwgZXhlYywgZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uLAor
ICAgICAgICB2bSwgZXhlYywgdm0tPmV4Y2VwdGlvbiwKICAgICAgICAgZXhlYy0+Y29kZUJsb2Nr
KCktPmJ5dGVjb2RlT2Zmc2V0KGV4ZWMsIHBjKSk7CiB9CiAKQEAgLTY3LDE3ICs2NywxNyBAQCBJ
bnN0cnVjdGlvbiogcmV0dXJuVG9UaHJvd0ZvclRocm93bkV4Y2VwCiAKIHN0YXRpYyB2b2lkIGRv
VGhyb3coRXhlY1N0YXRlKiBleGVjLCBJbnN0cnVjdGlvbiogcGMpCiB7Ci0gICAgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGZp
eHVwUENmb3JFeGNlcHRpb25JZk5lZWRlZChleGVjKTsKLSAgICBnZW5lcmljVGhyb3coZ2xvYmFs
RGF0YSwgZXhlYywgZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uLCBwYyAtIGV4ZWMtPmNvZGVCbG9jaygp
LT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpKTsKKyAgICBnZW5lcmljVGhyb3codm0sIGV4ZWMsIHZt
LT5leGNlcHRpb24sIHBjIC0gZXhlYy0+Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmJlZ2lu
KCkpOwogfQogCiBJbnN0cnVjdGlvbiogcmV0dXJuVG9UaHJvdyhFeGVjU3RhdGUqIGV4ZWMsIElu
c3RydWN0aW9uKiBwYykKIHsKICNpZiBMTElOVF9TTE9XX1BBVEhfVFJBQ0lORwotICAgIEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgZGF0YUxvZygi
VGhyb3dpbmcgZXhjZXB0aW9uICIsIGdsb2JhbERhdGEtPmV4Y2VwdGlvbiwgIiAocmV0dXJuVG9U
aHJvdykuXG4iKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBkYXRhTG9nKCJUaHJv
d2luZyBleGNlcHRpb24gIiwgdm0tPmV4Y2VwdGlvbiwgIiAocmV0dXJuVG9UaHJvdykuXG4iKTsK
ICNlbmRpZgogICAgIGRvVGhyb3coZXhlYywgcGMpOwogICAgIHJldHVybiBMTEludDo6ZXhjZXB0
aW9uSW5zdHJ1Y3Rpb25zKCk7CkBAIC04Niw4ICs4Niw4IEBAIEluc3RydWN0aW9uKiByZXR1cm5U
b1Rocm93KEV4ZWNTdGF0ZSogZXgKIHZvaWQqIGNhbGxUb1Rocm93KEV4ZWNTdGF0ZSogZXhlYywg
SW5zdHJ1Y3Rpb24qIHBjKQogewogI2lmIExMSU5UX1NMT1dfUEFUSF9UUkFDSU5HCi0gICAgSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBkYXRhTG9n
KCJUaHJvd2luZyBleGNlcHRpb24gIiwgZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uLCAiIChjYWxsVG9U
aHJvdykuXG4iKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBkYXRhTG9nKCJUaHJv
d2luZyBleGNlcHRpb24gIiwgdm0tPmV4Y2VwdGlvbiwgIiAoY2FsbFRvVGhyb3cpLlxuIik7CiAj
ZW5kaWYKICAgICBkb1Rocm93KGV4ZWMsIHBjKTsKICAgICByZXR1cm4gTExJbnQ6OmdldENvZGVQ
dHIobGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGluZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAko
cmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zm
c2V0c0V4dHJhY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNs
dWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlv
bi5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVk
ZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkpT
UHJvcGVydHlOYW1lSXRlcmF0b3IuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTUsOCArNTUsOCBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBMTEludCB7CiAKICNkZWZp
bmUgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCkgXAotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsgICAgICBcCi0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYykKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOyAgICAg
IFwKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYykKIAogI2lmbmRl
ZiBOREVCVUcKICNkZWZpbmUgTExJTlRfU0VUX1BDX0ZPUl9TVFVCUygpIGRvIHsgXApAQCAtODMs
MTMgKzgzLDEzIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgTExJbnQgewogI2RlZmluZSBM
TElOVF9FTkRfSU1QTCgpIExMSU5UX1JFVFVSTl9UV08ocGMsIGV4ZWMpCiAKICNkZWZpbmUgTExJ
TlRfVEhST1coZXhjZXB0aW9uVG9UaHJvdykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgZ2xvYmFsRGF0YS5leGNlcHRpb24gPSAoZXhjZXB0aW9uVG9UaHJvdyk7ICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgdm0uZXhjZXB0aW9uID0gKGV4Y2VwdGlvblRvVGhyb3cpOyAg
ICAgICAgICAgICAgICBcCiAgICAgICAgIHBjID0gcmV0dXJuVG9UaHJvdyhleGVjLCBwYyk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIExMSU5UX0VORF9JTVBMKCk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoZmFs
c2UpCiAKICNkZWZpbmUgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCkgZG8geyAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICBpZiAoVU5MSUtFTFkoZ2xvYmFsRGF0YS5leGNlcHRpb24pKSB7ICAg
ICAgICAgICBcCisgICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24pKSB7ICAgICAgICAg
ICBcCiAgICAgICAgICAgICBwYyA9IHJldHVyblRvVGhyb3coZXhlYywgcGMpOyAgICAgICAgICAg
ICAgIFwKICAgICAgICAgICAgIExMSU5UX0VORF9JTVBMKCk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCkBAIC0xNDMsMTQgKzE0MywxNCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IExMSW50IHsKICNkZWZpbmUgTExJTlRfQ0FMTF9USFJPVyhleGVjLCBwYywgZXhjZXB0aW9uVG9U
aHJvdykgZG8geyAgICAgICAgICAgICAgIFwKICAgICAgICAgRXhlY1N0YXRlKiBfX2N0X2V4ZWMg
PSAoZXhlYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgSW5z
dHJ1Y3Rpb24qIF9fY3RfcGMgPSAocGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgZ2xvYmFsRGF0YS5leGNlcHRpb24gPSAoZXhjZXB0aW9uVG9UaHJvdyk7
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdm0uZXhjZXB0aW9uID0gKGV4Y2VwdGlv
blRvVGhyb3cpOyAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIExMSU5UX0NBTExfRU5E
X0lNUEwoX19jdF9leGVjLCBjYWxsVG9UaHJvdyhfX2N0X2V4ZWMsIF9fY3RfcGMpKTsgXAogICAg
IH0gd2hpbGUgKGZhbHNlKQogCiAjZGVmaW5lIExMSU5UX0NBTExfQ0hFQ0tfRVhDRVBUSU9OKGV4
ZWMsIHBjKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIEV4ZWNTdGF0ZSog
X19jY2VfZXhlYyA9IChleGVjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg
ICAgICAgIEluc3RydWN0aW9uKiBfX2NjZV9wYyA9IChwYyk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChVTkxJS0VMWShnbG9iYWxEYXRhLmV4Y2VwdGlv
bikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoVU5MSUtFTFko
dm0uZXhjZXB0aW9uKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAg
ICBMTElOVF9DQUxMX0VORF9JTVBMKF9fY2NlX2V4ZWMsIGNhbGxUb1Rocm93KF9fY2NlX2V4ZWMs
IF9fY2NlX3BjKSk7IFwKICAgICB9IHdoaWxlIChmYWxzZSkKIApAQCAtMTY5LDcgKzE2OSw3IEBA
IGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3RyYWMKICAgICAgICAgICAgIGV4
ZWMtPmNvZGVCbG9jaygpLAogICAgICAgICAgICAgZXhlYywKICAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludHB0cl90PihwYyAtIGV4ZWMtPmNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5iZWdp
bigpKSwKLSAgICAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5pbnRlcnByZXRlci0+Z2V0T3Bj
b2RlSUQocGNbMF0udS5vcGNvZGUpLAorICAgICAgICAgICAgZXhlYy0+dm0oKS5pbnRlcnByZXRl
ci0+Z2V0T3Bjb2RlSUQocGNbMF0udS5vcGNvZGUpLAogICAgICAgICAgICAgZnJvbVdoZXJlLAog
ICAgICAgICAgICAgb3BlcmFuZCwKICAgICAgICAgICAgIHBjW29wZXJhbmRdLnUub3BlcmFuZCk7
CkBAIC0xOTIsNyArMTkyLDcgQEAgZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRf
dHJhYwogICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwKICAgICAgICAgZXhlYywKICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHBjIC0gZXhlYy0+Y29kZUJsb2NrKCktPmluc3RydWN0aW9u
cygpLmJlZ2luKCkpLAotICAgICAgICBleGVjLT5nbG9iYWxEYXRhKCkuaW50ZXJwcmV0ZXItPmdl
dE9wY29kZUlEKHBjWzBdLnUub3Bjb2RlKSwKKyAgICAgICAgZXhlYy0+dm0oKS5pbnRlcnByZXRl
ci0+Z2V0T3Bjb2RlSUQocGNbMF0udS5vcGNvZGUpLAogICAgICAgICBmcm9tV2hlcmUsCiAgICAg
ICAgIG9wZXJhbmQsCiAgICAgICAgIHBjW29wZXJhbmRdLnUub3BlcmFuZCwKQEAgLTI0OSw5ICsy
NDksOSBAQCBMTElOVF9TTE9XX1BBVEhfREVDTCh0cmFjZSkKICAgICAgICAgICAgIGV4ZWMtPmNv
ZGVCbG9jaygpLAogICAgICAgICAgICAgZXhlYywKICAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dHB0cl90PihwYyAtIGV4ZWMtPmNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpKSwK
LSAgICAgICAgICAgIG9wY29kZU5hbWVzW2V4ZWMtPmdsb2JhbERhdGEoKS5pbnRlcnByZXRlci0+
Z2V0T3Bjb2RlSUQocGNbMF0udS5vcGNvZGUpXSwKKyAgICAgICAgICAgIG9wY29kZU5hbWVzW2V4
ZWMtPnZtKCkuaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHBjWzBdLnUub3Bjb2RlKV0sCiAgICAg
ICAgICAgICBleGVjLT5zY29wZSgpKTsKLSAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmludGVy
cHJldGVyLT5nZXRPcGNvZGVJRChwY1swXS51Lm9wY29kZSkgPT0gb3BfcmV0KSB7CisgICAgaWYg
KGV4ZWMtPnZtKCkuaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHBjWzBdLnUub3Bjb2RlKSA9PSBv
cF9yZXQpIHsKICAgICAgICAgZGF0YUxvZ0YoIldpbGwgYmUgcmV0dXJuaW5nIHRvICVwXG4iLCBl
eGVjLT5yZXR1cm5QQygpLnZhbHVlKCkpOwogICAgICAgICBkYXRhTG9nRigiVGhlIG5ldyBjZnIg
d2lsbCBiZSAlcFxuIiwgZXhlYy0+Y2FsbGVyRnJhbWUoKSk7CiAgICAgfQpAQCAtMjY0LDcgKzI2
NCw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNwZWNpYWxfdHJhY2UpCiAgICAgICAgICAgICBl
eGVjLT5jb2RlQmxvY2soKSwKICAgICAgICAgICAgIGV4ZWMsCiAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnRwdHJfdD4ocGMgLSBleGVjLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYmVn
aW4oKSksCi0gICAgICAgICAgICBleGVjLT5nbG9iYWxEYXRhKCkuaW50ZXJwcmV0ZXItPmdldE9w
Y29kZUlEKHBjWzBdLnUub3Bjb2RlKSwKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkuaW50ZXJwcmV0
ZXItPmdldE9wY29kZUlEKHBjWzBdLnUub3Bjb2RlKSwKICAgICAgICAgICAgIGV4ZWMtPnJldHVy
blBDKCkudmFsdWUoKSk7CiAgICAgTExJTlRfRU5EX0lNUEwoKTsKIH0KQEAgLTI3Myw3ICsyNzMs
NyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzcGVjaWFsX3RyYWNlKQogaW5saW5lIGJvb2wgc2hv
dWxkSklUKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICAvLyBZb3UgY2FuIG1vZGlmeSB0aGlzIHRv
IHR1cm4gb2ZmIEpJVHRpbmcgd2l0aG91dCByZWJ1aWxkaW5nIHRoZSB3b3JsZC4KLSAgICByZXR1
cm4gZXhlYy0+Z2xvYmFsRGF0YSgpLmNhblVzZUpJVCgpOworICAgIHJldHVybiBleGVjLT52bSgp
LmNhblVzZUpJVCgpOwogfQogCiAvLyBSZXR1cm5zIHRydWUgaWYgd2Ugc2hvdWxkIHRyeSB0byBP
U1IuCkBAIC00MTQsMTMgKzQxNCwxMyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzdGFja19jaGVj
aykKICAgICBkYXRhTG9nRigiQ29kZUJsb2NrID0gJXAuXG4iLCBleGVjLT5jb2RlQmxvY2soKSk7
CiAgICAgZGF0YUxvZ0YoIk51bSBjYWxsZWUgcmVnaXN0ZXJzID0gJXUuXG4iLCBleGVjLT5jb2Rl
QmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMpOwogICAgIGRhdGFMb2dGKCJOdW0gdmFycyA9
ICV1LlxuIiwgZXhlYy0+Y29kZUJsb2NrKCktPm1fbnVtVmFycyk7Ci0gICAgZGF0YUxvZ0YoIkN1
cnJlbnQgZW5kIGlzIGF0ICVwLlxuIiwgZXhlYy0+Z2xvYmFsRGF0YSgpLmludGVycHJldGVyLT5z
dGFjaygpLmVuZCgpKTsKKyAgICBkYXRhTG9nRigiQ3VycmVudCBlbmQgaXMgYXQgJXAuXG4iLCBl
eGVjLT52bSgpLmludGVycHJldGVyLT5zdGFjaygpLmVuZCgpKTsKICNlbmRpZgotICAgIEFTU0VS
VCgmZXhlYy0+cmVnaXN0ZXJzKClbZXhlYy0+Y29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0
ZXJzXSA+IGV4ZWMtPmdsb2JhbERhdGEoKS5pbnRlcnByZXRlci0+c3RhY2soKS5lbmQoKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKCFnbG9iYWxEYXRhLmludGVycHJldGVyLT5zdGFjaygpLmdyb3coJmV4
ZWMtPnJlZ2lzdGVycygpW2V4ZWMtPmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVyc10p
KSkgeworICAgIEFTU0VSVCgmZXhlYy0+cmVnaXN0ZXJzKClbZXhlYy0+Y29kZUJsb2NrKCktPm1f
bnVtQ2FsbGVlUmVnaXN0ZXJzXSA+IGV4ZWMtPnZtKCkuaW50ZXJwcmV0ZXItPnN0YWNrKCkuZW5k
KCkpOworICAgIGlmIChVTkxJS0VMWSghdm0uaW50ZXJwcmV0ZXItPnN0YWNrKCkuZ3JvdygmZXhl
Yy0+cmVnaXN0ZXJzKClbZXhlYy0+Y29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzXSkp
KSB7CiAgICAgICAgIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuUEMgPSBleGVjLT5yZXR1cm5QQygp
OwogICAgICAgICBleGVjID0gZXhlYy0+Y2FsbGVyRnJhbWUoKTsKLSAgICAgICAgZ2xvYmFsRGF0
YS5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYyk7CisgICAgICAgIHZt
LmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsKICAgICAgICAgaW50
ZXJwcmV0ZXJUaHJvd0luQ2FsbGVyKGV4ZWMsIHJldHVyblBDKTsKICAgICAgICAgcGMgPSByZXR1
cm5Ub1Rocm93Rm9yVGhyb3duRXhjZXB0aW9uKGV4ZWMpOwogICAgIH0KQEAgLTQzMCwxMSArNDMw
LDExIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHN0YWNrX2NoZWNrKQogTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2NhbGxfYXJpdHlDaGVjaykKIHsKICAgICBMTElOVF9CRUdJTigpOwot
ICAgIEV4ZWNTdGF0ZSogbmV3RXhlYyA9IENvbW1vblNsb3dQYXRoczo6YXJpdHlDaGVja0Zvcihl
eGVjLCAmZ2xvYmFsRGF0YS5pbnRlcnByZXRlci0+c3RhY2soKSwgQ29kZUZvckNhbGwpOworICAg
IEV4ZWNTdGF0ZSogbmV3RXhlYyA9IENvbW1vblNsb3dQYXRoczo6YXJpdHlDaGVja0ZvcihleGVj
LCAmdm0uaW50ZXJwcmV0ZXItPnN0YWNrKCksIENvZGVGb3JDYWxsKTsKICAgICBpZiAoIW5ld0V4
ZWMpIHsKICAgICAgICAgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5QQyA9IGV4ZWMtPnJldHVyblBD
KCk7CiAgICAgICAgIGV4ZWMgPSBleGVjLT5jYWxsZXJGcmFtZSgpOwotICAgICAgICBnbG9iYWxE
YXRhLmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsKKyAgICAgICAg
dm0uZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOwogICAgICAgICBp
bnRlcnByZXRlclRocm93SW5DYWxsZXIoZXhlYywgcmV0dXJuUEMpOwogICAgICAgICBMTElOVF9S
RVRVUk5fVFdPKGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSks
IGV4ZWMpOwogICAgIH0KQEAgLTQ0NCwxMSArNDQ0LDExIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9jYWxsX2FyaXQKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jb25z
dHJ1Y3RfYXJpdHlDaGVjaykKIHsKICAgICBMTElOVF9CRUdJTigpOwotICAgIEV4ZWNTdGF0ZSog
bmV3RXhlYyA9IENvbW1vblNsb3dQYXRoczo6YXJpdHlDaGVja0ZvcihleGVjLCAmZ2xvYmFsRGF0
YS5pbnRlcnByZXRlci0+c3RhY2soKSwgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgRXhlY1N0YXRl
KiBuZXdFeGVjID0gQ29tbW9uU2xvd1BhdGhzOjphcml0eUNoZWNrRm9yKGV4ZWMsICZ2bS5pbnRl
cnByZXRlci0+c3RhY2soKSwgQ29kZUZvckNvbnN0cnVjdCk7CiAgICAgaWYgKCFuZXdFeGVjKSB7
CiAgICAgICAgIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuUEMgPSBleGVjLT5yZXR1cm5QQygpOwog
ICAgICAgICBleGVjID0gZXhlYy0+Y2FsbGVyRnJhbWUoKTsKLSAgICAgICAgZ2xvYmFsRGF0YS5l
eGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYyk7CisgICAgICAgIHZtLmV4
Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsKICAgICAgICAgaW50ZXJw
cmV0ZXJUaHJvd0luQ2FsbGVyKGV4ZWMsIHJldHVyblBDKTsKICAgICAgICAgTExJTlRfUkVUVVJO
X1RXTyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkpLCBleGVj
KTsKICAgICB9CkBAIC00NjEsNyArNDYxLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX2NyZWF0ZV9hYwogI2lmIExMSU5UX1NMT1dfUEFUSF9UUkFDSU5HCiAgICAgZGF0YUxvZ0Yo
IkNyZWF0aW5nIGFuIGFjdGl2YXRpb24sIGV4ZWMgPSAlcCFcbiIsIGV4ZWMpOwogI2VuZGlmCi0g
ICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUoZ2xvYmFs
RGF0YSwgZXhlYywgZXhlYy0+Y29kZUJsb2NrKCkpOworICAgIEpTQWN0aXZhdGlvbiogYWN0aXZh
dGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKHZtLCBleGVjLCBleGVjLT5jb2RlQmxvY2soKSk7
CiAgICAgZXhlYy0+c2V0U2NvcGUoYWN0aXZhdGlvbik7CiAgICAgTExJTlRfUkVUVVJOKEpTVmFs
dWUoYWN0aXZhdGlvbikpOwogfQpAQCAtNDY5LDcgKzQ2OSw3IEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9jcmVhdGVfYWMKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9j
cmVhdGVfYXJndW1lbnRzKQogewogICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgSlNWYWx1ZSBhcmd1
bWVudHMgPSBKU1ZhbHVlKEFyZ3VtZW50czo6Y3JlYXRlKGdsb2JhbERhdGEsIGV4ZWMpKTsKKyAg
ICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWUoQXJndW1lbnRzOjpjcmVhdGUodm0sIGV4ZWMp
KTsKICAgICBMTElOVF9DSEVDS19FWENFUFRJT04oKTsKICAgICBleGVjLT51bmNoZWNrZWRSKHBj
WzFdLnUub3BlcmFuZCkgPSBhcmd1bWVudHM7CiAgICAgZXhlYy0+dW5jaGVja2VkUih1bm1vZGlm
aWVkQXJndW1lbnRzUmVnaXN0ZXIocGNbMV0udS5vcGVyYW5kKSkgPSBhcmd1bWVudHM7CkBAIC01
MzMsNyArNTMzLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19yZWdleAog
ICAgIFJlZ0V4cCogcmVnRXhwID0gZXhlYy0+Y29kZUJsb2NrKCktPnJlZ2V4cChwY1syXS51Lm9w
ZXJhbmQpOwogICAgIGlmICghcmVnRXhwLT5pc1ZhbGlkKCkpCiAgICAgICAgIExMSU5UX1RIUk9X
KGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsICJJbnZhbGlkIGZsYWcgc3VwcGxpZWQgdG8gUmVnRXhw
IGNvbnN0cnVjdG9yLiIpKTsKLSAgICBMTElOVF9SRVRVUk4oUmVnRXhwT2JqZWN0OjpjcmVhdGUo
Z2xvYmFsRGF0YSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApKTsKKyAgICBMTElOVF9SRVRV
Uk4oUmVnRXhwT2JqZWN0OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKSk7
CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9ub3QpCkBAIC04NDQsNyArODQ0
LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfYgogICAgIGlmIChw
Y1szXS51Lm9wZXJhbmQpIHsKICAgICAgICAgcmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZUJhc2Uo
ZXhlYywgaWRlbnQsIHRydWUsIG9wZXJhdGlvbnMsIHBjWzVdLnUucHV0VG9CYXNlT3BlcmF0aW9u
KTsKICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICBMTElOVF9USFJPVyhnbG9iYWxE
YXRhLmV4Y2VwdGlvbik7CisgICAgICAgICAgICBMTElOVF9USFJPVyh2bS5leGNlcHRpb24pOwog
ICAgIH0gZWxzZQogICAgICAgICByZXN1bHQgPSBKU1Njb3BlOjpyZXNvbHZlQmFzZShleGVjLCBp
ZGVudCwgZmFsc2UsIG9wZXJhdGlvbnMsIHBjWzVdLnUucHV0VG9CYXNlT3BlcmF0aW9uKTsKIApA
QCAtOTM5LDcgKzkzOSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfYnlf
aWQKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkKICAg
ICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNo
aW5nKCkpIHsKICAgICAgICAgICAgIHBjWzRdLnUuc3RydWN0dXJlLnNldCgKLSAgICAgICAgICAg
ICAgICBnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUp
OworICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1
Y3R1cmUpOwogICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0
KCkpKSB7CiAgICAgICAgICAgICAgICAgcGNbMF0udS5vcGNvZGUgPSBMTEludDo6Z2V0T3Bjb2Rl
KGxsaW50X29wX2dldF9ieV9pZCk7CiAgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0g
b2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFs
dWUpICsgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpOwpAQCAtOTg2LDcgKzk4Niw3
IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICBKU1ZhbHVl
IGJhc2VWYWx1ZSA9IExMSU5UX09QX0MoMSkuanNWYWx1ZSgpOwogICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90KGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOwogICAgIGlmIChwY1s4XS51Lm9wZXJh
bmQpCi0gICAgICAgIGFzT2JqZWN0KGJhc2VWYWx1ZSktPnB1dERpcmVjdChnbG9iYWxEYXRhLCBp
ZGVudCwgTExJTlRfT1BfQygzKS5qc1ZhbHVlKCksIHNsb3QpOworICAgICAgICBhc09iamVjdChi
YXNlVmFsdWUpLT5wdXREaXJlY3Qodm0sIGlkZW50LCBMTElOVF9PUF9DKDMpLmpzVmFsdWUoKSwg
c2xvdCk7CiAgICAgZWxzZQogICAgICAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCBMTElO
VF9PUF9DKDMpLmpzVmFsdWUoKSwgc2xvdCk7CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7
CkBAIC0xMDEzLDE3ICsxMDEzLDE3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9w
dXRfYnlfaWQKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZVByb3RvdHlwZUNoYWlu
KGV4ZWMsIGJhc2VDZWxsKSAhPSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKS0+aXNPYmplY3QoKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBwY1s0XS51LnN0cnVjdHVyZS5zZXQoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwgc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUtPnByZXZpb3Vz
SUQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5j
YWNoZWRPZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVy
YW5kID0gb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9m
KEpTVmFsdWUpICsgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjWzVdLnUu
b3BlcmFuZCA9IG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9m
KEpTVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgcGNbNl0udS5zdHJ1Y3R1cmUuc2V0
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlw
ZUNoYWluKGV4ZWMpOwogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNoYWluKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHBjWzddLnUuc3RydWN0dXJlQ2hhaW4uc2V0KAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIGNoYWluKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgY2hhaW4pOwogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwY1s4XS51Lm9wZXJhbmQpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCkBA
IC0xMDQwLDcgKzEwNDAsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5
X2lkCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICBwY1s0XS51LnN0cnVjdHVyZS5zZXQoCi0gICAgICAgICAgICAgICAgICAgIGdsb2JhbERh
dGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CisgICAgICAgICAg
ICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOwog
ICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkg
ewogICAgICAgICAgICAgICAgICAgICBwY1swXS51Lm9wY29kZSA9IExMSW50OjpnZXRPcGNvZGUo
bGxpbnRfb3BfcHV0X2J5X2lkKTsKICAgICAgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5k
ID0gb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpT
VmFsdWUpICsgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpOwpAQCAtMTEwMCw3ICsx
MTAwLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9hcmd1bQogICAgIExM
SU5UX0JFR0lOKCk7CiAgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBMTElOVF9PUCgyKS5qc1ZhbHVl
KCk7CiAgICAgaWYgKCFhcmd1bWVudHMpIHsKLSAgICAgICAgYXJndW1lbnRzID0gQXJndW1lbnRz
OjpjcmVhdGUoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgICAgIGFyZ3VtZW50cyA9IEFyZ3VtZW50
czo6Y3JlYXRlKHZtLCBleGVjKTsKICAgICAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CiAg
ICAgICAgIExMSU5UX09QKDIpID0gYXJndW1lbnRzOwogICAgICAgICBleGVjLT51bmNoZWNrZWRS
KHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihwY1syXS51Lm9wZXJhbmQpKSA9IGFyZ3VtZW50
czsKQEAgLTExMjgsNyArMTEyOCw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9w
dXRfYnlfdmEKICAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgICAg
ICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKICAgICAgICAgICAgIGlm
IChvYmplY3QtPmNhblNldEluZGV4UXVpY2tseShpKSkKLSAgICAgICAgICAgICAgICBvYmplY3Qt
PnNldEluZGV4UXVpY2tseShnbG9iYWxEYXRhLCBpLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAg
b2JqZWN0LT5zZXRJbmRleFF1aWNrbHkodm0sIGksIHZhbHVlKTsKICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgob2JqZWN0
LCBleGVjLCBpLCB2YWx1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAg
ICAgICAgICAgIExMSU5UX0VORCgpOwpAQCAtMTIwMyw5ICsxMjAzLDkgQEAgTExJTlRfU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX3B1dF9nZXR0ZQogICAgIEFTU0VSVChnZXR0ZXIuaXNPYmplY3Qo
KSB8fCBzZXR0ZXIuaXNPYmplY3QoKSk7CiAgICAgCiAgICAgaWYgKCFnZXR0ZXIuaXNVbmRlZmlu
ZWQoKSkKLSAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihnbG9iYWxEYXRhLCBhc09iamVjdChn
ZXR0ZXIpKTsKKyAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcih2bSwgYXNPYmplY3QoZ2V0dGVy
KSk7CiAgICAgaWYgKCFzZXR0ZXIuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgYWNjZXNzb3ItPnNl
dFNldHRlcihnbG9iYWxEYXRhLCBhc09iamVjdChzZXR0ZXIpKTsKKyAgICAgICAgYWNjZXNzb3It
PnNldFNldHRlcih2bSwgYXNPYmplY3Qoc2V0dGVyKSk7CiAgICAgYmFzZU9iai0+cHV0RGlyZWN0
QWNjZXNzb3IoCiAgICAgICAgIGV4ZWMsCiAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVu
dGlmaWVyKHBjWzJdLnUub3BlcmFuZCksCkBAIC0xMzQzLDcgKzEzNDMsNyBAQCBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2Z1bmNfCiBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBl
IGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSW5zdHJ1Y3Rpb24qIHBjLCBK
U1ZhbHVlIGNhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAKICAgICBleGVjQ2FsbGVlLT5zZXRTY29wZShleGVjLT5zY29wZSgpKTsKICAgICBleGVj
Q2FsbGVlLT5zZXRDb2RlQmxvY2soMCk7CkBAIC0xMzU2LDkgKzEzNTYsOSBAQCBzdGF0aWMgU2xv
d1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAgICAgICAgIEFTU0VSVChjYWxsVHlwZSAh
PSBDYWxsVHlwZUpTKTsKICAgICAKICAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSG9z
dCkgewotICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0
YSwgZXhlY0NhbGxlZSk7CisgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlY0NhbGxlZSk7CiAgICAgICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNP
YmplY3QoY2FsbGVlKSk7Ci0gICAgICAgICAgICBnbG9iYWxEYXRhLmhvc3RDYWxsUmV0dXJuVmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUp
KTsKKyAgICAgICAgICAgIHZtLmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
Y2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZXhlY0NhbGxlZSwgcGMsIExMSW50OjpnZXRDb2Rl
UHRyKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpKTsKICAgICAgICAgfQpAQCAtMTM3OSw5ICsxMzc5
LDkgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAogICAgIEFTU0VS
VChjb25zdHJ1Y3RUeXBlICE9IENvbnN0cnVjdFR5cGVKUyk7CiAgICAgCiAgICAgaWYgKGNvbnN0
cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZUhvc3QpIHsKLSAgICAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlY0NhbGxlZSk7CisgICAgICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjQ2FsbGVlKTsKICAgICAgICAgZXhlY0NhbGxl
ZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwotICAgICAgICBnbG9iYWxEYXRhLmhvc3RD
YWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVu
Y3Rpb24oZXhlY0NhbGxlZSkpOworICAgICAgICB2bS5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsK
IAogICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihleGVjQ2FsbGVlLCBwYywgTExJbnQ6OmdldENv
ZGVQdHIoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkpOwogICAgIH0KQEAgLTE0MDYsNyArMTQwNiw3
IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKEV4ZWMKICAgICAKICAgICBK
U0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25D
ZWxsKTsKICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKTsKLSAg
ICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSAqc2NvcGUtPmdsb2JhbERhdGEoKTsKKyAgICBW
TSYgdm0gPSAqc2NvcGUtPnZtKCk7CiAgICAgZXhlY0NhbGxlZS0+c2V0U2NvcGUoc2NvcGUpOwog
ICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gY2FsbGVlLT5leGVjdXRhYmxlKCk7CiAg
ICAgCkBAIC0xNDMxLDggKzE0MzEsOCBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVw
Q2FsbChFeGVjCiAgICAgICAgIGlmIChjYWxsTGlua0luZm8tPmlzT25MaXN0KCkpCiAgICAgICAg
ICAgICBjYWxsTGlua0luZm8tPnJlbW92ZSgpOwogICAgICAgICBFeGVjU3RhdGUqIGV4ZWNDYWxs
ZXIgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwotICAgICAgICBjYWxsTGlua0luZm8tPmNh
bGxlZS5zZXQoZ2xvYmFsRGF0YSwgZXhlY0NhbGxlci0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0
YWJsZSgpLCBjYWxsZWUpOwotICAgICAgICBjYWxsTGlua0luZm8tPmxhc3RTZWVuQ2FsbGVlLnNl
dChnbG9iYWxEYXRhLCBleGVjQ2FsbGVyLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCks
IGNhbGxlZSk7CisgICAgICAgIGNhbGxMaW5rSW5mby0+Y2FsbGVlLnNldCh2bSwgZXhlY0NhbGxl
ci0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOworICAgICAgICBjYWxs
TGlua0luZm8tPmxhc3RTZWVuQ2FsbGVlLnNldCh2bSwgZXhlY0NhbGxlci0+Y29kZUJsb2NrKCkt
Pm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwogICAgICAgICBjYWxsTGlua0luZm8tPm1hY2hp
bmVDb2RlVGFyZ2V0ID0gY29kZVB0cjsKICAgICAgICAgaWYgKGNvZGVCbG9jaykKICAgICAgICAg
ICAgIGNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsTGlua0luZm8pOwpAQCAtMTQ4NCw3
ICsxNDg0LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NhbGxfdmFyYQogICAg
IEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IExMSU5UX09QX0MoMSkuanNWYWx1ZSgpOwogICAgIAog
ICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSA9IGxvYWRWYXJhcmdzKAotICAgICAgICBleGVjLCAm
Z2xvYmFsRGF0YS5pbnRlcnByZXRlci0+c3RhY2soKSwKKyAgICAgICAgZXhlYywgJnZtLmludGVy
cHJldGVyLT5zdGFjaygpLAogICAgICAgICBMTElOVF9PUF9DKDIpLmpzVmFsdWUoKSwgTExJTlRf
T1BfQygzKS5qc1ZhbHVlKCksIHBjWzRdLnUub3BlcmFuZCk7CiAgICAgTExJTlRfQ0FMTF9DSEVD
S19FWENFUFRJT04oZXhlYywgcGMpOwogICAgIApAQCAtMTUxMyw3ICsxNTEzLDcgQEAgTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NhbGxfZXZhbAogICAgIGlmICghaXNIb3N0RnVuY3Rp
b24oY2FsbGVlQXNWYWx1ZSwgZ2xvYmFsRnVuY0V2YWwpKQogICAgICAgICByZXR1cm4gc2V0VXBD
YWxsKGV4ZWNDYWxsZWUsIHBjLCBDb2RlRm9yQ2FsbCwgY2FsbGVlQXNWYWx1ZSk7CiAgICAgCi0g
ICAgZ2xvYmFsRGF0YS5ob3N0Q2FsbFJldHVyblZhbHVlID0gZXZhbChleGVjQ2FsbGVlKTsKKyAg
ICB2bS5ob3N0Q2FsbFJldHVyblZhbHVlID0gZXZhbChleGVjQ2FsbGVlKTsKICAgICBMTElOVF9D
QUxMX1JFVFVSTihleGVjQ2FsbGVlLCBwYywgTExJbnQ6OmdldENvZGVQdHIoZ2V0SG9zdENhbGxS
ZXR1cm5WYWx1ZSkpOwogfQogCkBAIC0xNTIxLDcgKzE1MjEsNyBAQCBMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfdGVhcl9vZmZfCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBBU1NF
UlQoZXhlYy0+Y29kZUJsb2NrKCktPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSk7Ci0gICAganNDYXN0
PEpTQWN0aXZhdGlvbio+KExMSU5UX09QKDEpLmpzVmFsdWUoKSktPnRlYXJPZmYoZ2xvYmFsRGF0
YSk7CisgICAganNDYXN0PEpTQWN0aXZhdGlvbio+KExMSU5UX09QKDEpLmpzVmFsdWUoKSktPnRl
YXJPZmYodm0pOwogICAgIExMSU5UX0VORCgpOwogfQogCkBAIC0xNjMxLDggKzE2MzEsOCBAQCBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGhyb3dfc3RhCiBMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfaGFuZGxlX3dhdGNoZG9nX3RpbWVyKQogewogICAgIExMSU5UX0JFR0lO
X05PX1NFVF9QQygpOwotICAgIGlmIChVTkxJS0VMWShnbG9iYWxEYXRhLndhdGNoZG9nLmRpZEZp
cmUoZXhlYykpKQotICAgICAgICBMTElOVF9USFJPVyhjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9u
RXhjZXB0aW9uKCZnbG9iYWxEYXRhKSk7CisgICAgaWYgKFVOTElLRUxZKHZtLndhdGNoZG9nLmRp
ZEZpcmUoZXhlYykpKQorICAgICAgICBMTElOVF9USFJPVyhjcmVhdGVUZXJtaW5hdGVkRXhlY3V0
aW9uRXhjZXB0aW9uKCZ2bSkpOwogICAgIExMSU5UX1JFVFVSTl9UV08oMCwgZXhlYyk7CiB9CiAK
QEAgLTE2NDQsNyArMTY0NCw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9kZWJ1
ZykKICAgICBpbnQgbGFzdExpbmUgPSBwY1szXS51Lm9wZXJhbmQ7CiAgICAgaW50IGNvbHVtbiA9
IHBjWzRdLnUub3BlcmFuZDsKIAotICAgIGdsb2JhbERhdGEuaW50ZXJwcmV0ZXItPmRlYnVnKGV4
ZWMsIHN0YXRpY19jYXN0PERlYnVnSG9va0lEPihkZWJ1Z0hvb2tJRCksIGZpcnN0TGluZSwgbGFz
dExpbmUsIGNvbHVtbik7CisgICAgdm0uaW50ZXJwcmV0ZXItPmRlYnVnKGV4ZWMsIHN0YXRpY19j
YXN0PERlYnVnSG9va0lEPihkZWJ1Z0hvb2tJRCksIGZpcnN0TGluZSwgbGFzdExpbmUsIGNvbHVt
bik7CiAgICAgCiAgICAgTExJTlRfRU5EKCk7CiB9CkBAIC0xNjUyLDcgKzE2NTIsNyBAQCBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZGVidWcpCiBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfcHJvZmlsZV93aWxsX2NhbGwpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKLSAgICBp
ZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gZ2xvYmFsRGF0YS5lbmFibGVkUHJvZmlsZXIo
KSkKKyAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gdm0uZW5hYmxlZFByb2ZpbGVy
KCkpCiAgICAgICAgIHByb2ZpbGVyLT53aWxsRXhlY3V0ZShleGVjLCBMTElOVF9PUCgxKS5qc1Zh
bHVlKCkpOwogICAgIExMSU5UX0VORCgpOwogfQpAQCAtMTY2MCw3ICsxNjYwLDcgQEAgTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Byb2ZpbGVfdwogTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX3Byb2ZpbGVfZGlkX2NhbGwpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKLSAgICBp
ZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gZ2xvYmFsRGF0YS5lbmFibGVkUHJvZmlsZXIo
KSkKKyAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gdm0uZW5hYmxlZFByb2ZpbGVy
KCkpCiAgICAgICAgIHByb2ZpbGVyLT5kaWRFeGVjdXRlKGV4ZWMsIExMSU5UX09QKDEpLmpzVmFs
dWUoKSk7CiAgICAgTExJTlRfRU5EKCk7CiB9CkBAIC0xNjY4LDcgKzE2NjgsNyBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHJvZmlsZV9kCiBMTElOVF9TTE9XX1BBVEhfREVDTCh0
aHJvd19mcm9tX25hdGl2ZV9jYWxsKQogewogICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgQVNTRVJU
KGdsb2JhbERhdGEuZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQodm0uZXhjZXB0aW9uKTsKICAgICBM
TElOVF9FTkQoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
VGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRUaHVua3MuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgTExJbnQgewogCiAjaWYgIUVOQUJMRShMTElOVF9DX0xP
T1ApCiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2VuZXJhdGVUaHVua1dpdGhKdW1w
VG8oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB2b2lkICgqdGFyZ2V0KSgpLCBjb25zdCBjaGFy
ICp0aHVua0tpbmQpCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyYXRlVGh1bmtX
aXRoSnVtcFRvKFZNKiB2bSwgdm9pZCAoKnRhcmdldCkoKSwgY29uc3QgY2hhciAqdGh1bmtLaW5k
KQogewogICAgIEpTSW50ZXJmYWNlSklUIGppdDsKICAgICAKQEAgLTQ2LDM4ICs0NiwzOCBAQCBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyYXRlVGh1CiAgICAgaml0Lm1vdmUoSlNJ
bnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPih0YXJnZXQpKSwg
SlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKICAgICBqaXQuanVtcChKU0ludGVyZmFjZUpJVDo6cmVn
VDApOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQs
IEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQs
IEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
ICgiTExJbnQgJXMgcHJvbG9ndWUgdGh1bmsiLCB0aHVua0tpbmQpKTsKIH0KIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ2FsbEVu
dHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0
aEp1bXBUbyhnbG9iYWxEYXRhLCBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSwgImZ1
bmN0aW9uIGZvciBjYWxsIik7CisgICAgcmV0dXJuIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKHZt
LCBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSwgImZ1bmN0aW9uIGZvciBjYWxsIik7
CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvckNvbnN0cnVjdEVudHJ5VGh1
bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGZ1bmN0aW9uRm9yQ29uc3RydWN0RW50cnlUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0g
ICAgcmV0dXJuIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKGdsb2JhbERhdGEsIGxsaW50X2Z1bmN0
aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUsICJmdW5jdGlvbiBmb3IgY29uc3RydWN0Iik7Cisg
ICAgcmV0dXJuIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKHZtLCBsbGludF9mdW5jdGlvbl9mb3Jf
Y29uc3RydWN0X3Byb2xvZ3VlLCAiZnVuY3Rpb24gZm9yIGNvbnN0cnVjdCIpOwogfQogCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9y
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlv
bkZvckNhbGxBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBn
ZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyhnbG9iYWxEYXRhLCBsbGludF9mdW5jdGlvbl9mb3JfY2Fs
bF9hcml0eV9jaGVjaywgImZ1bmN0aW9uIGZvciBjYWxsIHdpdGggYXJpdHkgY2hlY2siKTsKKyAg
ICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8odm0sIGxsaW50X2Z1bmN0aW9uX2Zvcl9j
YWxsX2FyaXR5X2NoZWNrLCAiZnVuY3Rpb24gZm9yIGNhbGwgd2l0aCBhcml0eSBjaGVjayIpOwog
fQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JDb25zdHJ1Y3RBcml0eUNoZWNr
VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGZ1bmN0aW9uRm9yQ29uc3RydWN0QXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKFZNKiB2
bSkKIHsKLSAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8oZ2xvYmFsRGF0YSwgbGxp
bnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjaywgImZ1bmN0aW9uIGZvciBjb25z
dHJ1Y3Qgd2l0aCBhcml0eSBjaGVjayIpOworICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0aEp1
bXBUbyh2bSwgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjaywgImZ1bmN0
aW9uIGZvciBjb25zdHJ1Y3Qgd2l0aCBhcml0eSBjaGVjayIpOwogfQogCi1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgZXZhbEVudHJ5VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
KQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV2YWxFbnRyeVRodW5rR2VuZXJhdG9yKFZNKiB2bSkK
IHsKLSAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8oZ2xvYmFsRGF0YSwgbGxpbnRf
ZXZhbF9wcm9sb2d1ZSwgImV2YWwiKTsKKyAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1w
VG8odm0sIGxsaW50X2V2YWxfcHJvbG9ndWUsICJldmFsIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBwcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQogewotICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyhnbG9iYWxEYXRhLCBs
bGludF9wcm9ncmFtX3Byb2xvZ3VlLCAicHJvZ3JhbSIpOworICAgIHJldHVybiBnZW5lcmF0ZVRo
dW5rV2l0aEp1bXBUbyh2bSwgbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZSwgInByb2dyYW0iKTsKIH0K
IAogI2VuZGlmIC8vICFFTkFCTEUoTExJTlRfQ19MT09QKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwx
NiArMzQsMTYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2Ns
YXNzIFZNOwogCiBuYW1lc3BhY2UgTExJbnQgewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVu
Y3Rpb25Gb3JDYWxsRW50cnlUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IoSlNH
bG9iYWxEYXRhKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JDYWxsQXJpdHlD
aGVja1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGZ1bmN0aW9uRm9yQ29uc3RydWN0QXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV2YWxFbnRyeVRodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHByb2dyYW1FbnRyeVRodW5rR2VuZXJh
dG9yKEpTR2xvYmFsRGF0YSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ2Fs
bEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlv
bkZvckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBmdW5jdGlvbkZvckNhbGxBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBmdW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVy
YXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV2YWxFbnRyeVRodW5rR2VuZXJhdG9y
KFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3Io
Vk0qKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkxMSW50CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMzEwLDkgKzMxMCw5
IEBAIG1hY3JvIGZ1bmN0aW9uQXJpdHlDaGVjayhkb25lTGFiZWwsIHNsb3cKICAgICBjQ2FsbDIo
c2xvd19wYXRoLCBjZnIsIFBDKSAgICMgVGhpcyBzbG93X3BhdGggaGFzIGEgc2ltcGxlIHByb3Rv
Y29sOiB0MCA9IDAgPT4gbm8gZXJyb3IsIHQwICE9IDAgPT4gZXJyb3IKICAgICBtb3ZlIHQxLCBj
ZnIKICAgICBidGl6IHQwLCAuY29udGludWUKLSAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjpnbG9i
YWxEYXRhW3NwXSwgdDEKLSAgICBsb2FkcCBKU0dsb2JhbERhdGE6OmNhbGxGcmFtZUZvclRocm93
W3QxXSwgdDAKLSAgICBqbXAgSlNHbG9iYWxEYXRhOjp0YXJnZXRNYWNoaW5lUENGb3JUaHJvd1t0
MV0KKyAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjp2bVtzcF0sIHQxCisgICAgbG9hZHAgVk06OmNh
bGxGcmFtZUZvclRocm93W3QxXSwgdDAKKyAgICBqbXAgVk06OnRhcmdldE1hY2hpbmVQQ0ZvclRo
cm93W3QxXQogLmNvbnRpbnVlOgogICAgICMgUmVsb2FkIENvZGVCbG9jayBhbmQgUEMsIHNpbmNl
IHRoZSBzbG93X3BhdGggY2xvYmJlcmVkIGl0LgogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0
MQpAQCAtMTc2OSwxNCArMTc2OSwxNCBAQCBfbGxpbnRfb3BfY2F0Y2g6CiAgICAgIyB0aGUgaW50
ZXJwcmV0ZXIncyB0aHJvdyB0cmFtcG9saW5lIChzZWUgX2xsaW50X3Rocm93X3RyYW1wb2xpbmUp
LgogICAgICMgVGhlIEpJVCB0aHJvd2luZyBwcm90b2NvbCBjYWxscyBmb3IgdGhlIGNmciB0byBi
ZSBpbiB0MC4gVGhlIHRocm93aW5nCiAgICAgIyBjb2RlIG11c3QgaGF2ZSBrbm93biB0aGF0IHdl
IHdlcmUgdGhyb3dpbmcgdG8gdGhlIGludGVycHJldGVyLCBhbmQgaGF2ZQotICAgICMgc2V0IEpT
R2xvYmFsRGF0YTo6dGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93LgorICAgICMgc2V0IFZNOjp0
YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3cuCiAgICAgbW92ZSB0MCwgY2ZyCi0gICAgbG9hZHAg
SklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0YVtzcF0sIHQzCi0gICAgbG9hZGkgSlNHbG9iYWxEYXRh
Ojp0YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3dbdDNdLCBQQwotICAgIGxvYWRpIEpTR2xvYmFs
RGF0YTo6ZXhjZXB0aW9uICsgUGF5bG9hZE9mZnNldFt0M10sIHQwCi0gICAgbG9hZGkgSlNHbG9i
YWxEYXRhOjpleGNlcHRpb24gKyBUYWdPZmZzZXRbdDNdLCB0MQotICAgIHN0b3JlaSAwLCBKU0ds
b2JhbERhdGE6OmV4Y2VwdGlvbiArIFBheWxvYWRPZmZzZXRbdDNdCi0gICAgc3RvcmVpIEVtcHR5
VmFsdWVUYWcsIEpTR2xvYmFsRGF0YTo6ZXhjZXB0aW9uICsgVGFnT2Zmc2V0W3QzXSAgICAgICAK
KyAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjp2bVtzcF0sIHQzCisgICAgbG9hZGkgVk06OnRhcmdl
dEludGVycHJldGVyUENGb3JUaHJvd1t0M10sIFBDCisgICAgbG9hZGkgVk06OmV4Y2VwdGlvbiAr
IFBheWxvYWRPZmZzZXRbdDNdLCB0MAorICAgIGxvYWRpIFZNOjpleGNlcHRpb24gKyBUYWdPZmZz
ZXRbdDNdLCB0MQorICAgIHN0b3JlaSAwLCBWTTo6ZXhjZXB0aW9uICsgUGF5bG9hZE9mZnNldFt0
M10KKyAgICBzdG9yZWkgRW1wdHlWYWx1ZVRhZywgVk06OmV4Y2VwdGlvbiArIFRhZ09mZnNldFt0
M10gICAgICAgCiAgICAgbG9hZGkgNFtQQ10sIHQyCiAgICAgc3RvcmVpIHQwLCBQYXlsb2FkT2Zm
c2V0W2NmciwgdDIsIDhdCiAgICAgc3RvcmVpIHQxLCBUYWdPZmZzZXRbY2ZyLCB0MiwgOF0KQEAg
LTE4NjMsMTYgKzE4NjMsMTYgQEAgX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xp
bmU6CiAgICAgIyBXaGVuIHRocm93aW5nIGZyb20gdGhlIGludGVycHJldGVyIChpLmUuIHRocm93
aW5nIGZyb20gTExJbnRTbG93UGF0aHMpLCBzbwogICAgICMgdGhlIHRocm93IHRhcmdldCBpcyBu
b3QgbmVjZXNzYXJpbHkgaW50ZXJwcmV0ZWQgY29kZSwgd2UgY29tZSB0byBoZXJlLgogICAgICMg
VGhpcyBlc3NlbnRpYWxseSBlbXVsYXRlcyB0aGUgSklUJ3MgdGhyb3dpbmcgcHJvdG9jb2wuCi0g
ICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0YVtzcF0sIHQxCi0gICAgbG9hZHAgSlNH
bG9iYWxEYXRhOjpjYWxsRnJhbWVGb3JUaHJvd1t0MV0sIHQwCi0gICAgam1wIEpTR2xvYmFsRGF0
YTo6dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3dbdDFdCisgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6
dm1bc3BdLCB0MQorICAgIGxvYWRwIFZNOjpjYWxsRnJhbWVGb3JUaHJvd1t0MV0sIHQwCisgICAg
am1wIFZNOjp0YXJnZXRNYWNoaW5lUENGb3JUaHJvd1t0MV0KIAogCiBfbGxpbnRfdGhyb3dfZHVy
aW5nX2NhbGxfdHJhbXBvbGluZToKICAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwo
dDIpCi0gICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0YVtzcF0sIHQxCi0gICAgbG9h
ZHAgSlNHbG9iYWxEYXRhOjpjYWxsRnJhbWVGb3JUaHJvd1t0MV0sIHQwCi0gICAgam1wIEpTR2xv
YmFsRGF0YTo6dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3dbdDFdCisgICAgbG9hZHAgSklUU3RhY2tG
cmFtZTo6dm1bc3BdLCB0MQorICAgIGxvYWRwIFZNOjpjYWxsRnJhbWVGb3JUaHJvd1t0MV0sIHQw
CisgICAgam1wIFZNOjp0YXJnZXRNYWNoaW5lUENGb3JUaHJvd1t0MV0KIAogCiBtYWNybyBuYXRp
dmVDYWxsVHJhbXBvbGluZShleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbikKQEAgLTE4ODIsOCAr
MTg4Miw4IEBAIG1hY3JvIG5hdGl2ZUNhbGxUcmFtcG9saW5lKGV4ZWN1dGFibGVPZmYKICAgICBz
dG9yZWkgQ2VsbFRhZywgU2NvcGVDaGFpbiArIFRhZ09mZnNldFtjZnJdCiAgICAgc3RvcmVpIHQx
LCBTY29wZUNoYWluICsgUGF5bG9hZE9mZnNldFtjZnJdCiAgICAgaWYgWDg2Ci0gICAgICAgIGxv
YWRwIEpJVFN0YWNrRnJhbWU6Omdsb2JhbERhdGEgKyA0W3NwXSwgdDMgIyBBZGRpdGlvbmFsIG9m
ZnNldCBmb3IgcmV0dXJuIGFkZHJlc3MKLSAgICAgICAgc3RvcmVwIGNmciwgSlNHbG9iYWxEYXRh
Ojp0b3BDYWxsRnJhbWVbdDNdCisgICAgICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6OnZtICsgNFtz
cF0sIHQzICMgQWRkaXRpb25hbCBvZmZzZXQgZm9yIHJldHVybiBhZGRyZXNzCisgICAgICAgIHN0
b3JlcCBjZnIsIFZNOjp0b3BDYWxsRnJhbWVbdDNdCiAgICAgICAgIHBlZWsgMCwgdDEKICAgICAg
ICAgc3RvcmVwIHQxLCBSZXR1cm5QQ1tjZnJdCiAgICAgICAgIG1vdmUgY2ZyLCB0MiAgIyB0MiA9
IGVjeApAQCAtMTg5MywxMCArMTg5MywxMCBAQCBtYWNybyBuYXRpdmVDYWxsVHJhbXBvbGluZShl
eGVjdXRhYmxlT2ZmCiAgICAgICAgIG1vdmUgdDAsIGNmcgogICAgICAgICBjYWxsIGV4ZWN1dGFi
bGVPZmZzZXRUb0Z1bmN0aW9uW3QxXQogICAgICAgICBhZGRwIDE2IC0gNCwgc3AKLSAgICAgICAg
bG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0YSArIDRbc3BdLCB0MworICAgICAgICBsb2Fk
cCBKSVRTdGFja0ZyYW1lOjp2bSArIDRbc3BdLCB0MwogICAgIGVsc2lmIEFSTSBvciBBUk12NyBv
ciBBUk12N19UUkFESVRJT05BTAotICAgICAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjpnbG9iYWxE
YXRhW3NwXSwgdDMKLSAgICAgICAgc3RvcmVwIGNmciwgSlNHbG9iYWxEYXRhOjp0b3BDYWxsRnJh
bWVbdDNdCisgICAgICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6OnZtW3NwXSwgdDMKKyAgICAgICAg
c3RvcmVwIGNmciwgVk06OnRvcENhbGxGcmFtZVt0M10KICAgICAgICAgbW92ZSB0MCwgdDIKICAg
ICAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHQzKQogICAgICAgICBzdG9yZXAg
dDMsIFJldHVyblBDW2Nmcl0KQEAgLTE5MDYsMTAgKzE5MDYsMTAgQEAgbWFjcm8gbmF0aXZlQ2Fs
bFRyYW1wb2xpbmUoZXhlY3V0YWJsZU9mZgogICAgICAgICBtb3ZlIHQyLCBjZnIKICAgICAgICAg
Y2FsbCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvblt0MV0KICAgICAgICAgcmVzdG9yZVJldHVy
bkFkZHJlc3NCZWZvcmVSZXR1cm4odDMpCi0gICAgICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6Omds
b2JhbERhdGFbc3BdLCB0MworICAgICAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjp2bVtzcF0sIHQz
CiAgICAgZWxzaWYgTUlQUwotICAgICAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjpnbG9iYWxEYXRh
W3NwXSwgdDMKLSAgICAgICAgc3RvcmVwIGNmciwgSlNHbG9iYWxEYXRhOjp0b3BDYWxsRnJhbWVb
dDNdCisgICAgICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6OnZtW3NwXSwgdDMKKyAgICAgICAgc3Rv
cmVwIGNmciwgVk06OnRvcENhbGxGcmFtZVt0M10KICAgICAgICAgbW92ZSB0MCwgdDIKICAgICAg
ICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHQzKQogICAgICAgICBzdG9yZXAgdDMs
IFJldHVyblBDW2Nmcl0KQEAgLTE5MjAsMTAgKzE5MjAsMTAgQEAgbWFjcm8gbmF0aXZlQ2FsbFRy
YW1wb2xpbmUoZXhlY3V0YWJsZU9mZgogICAgICAgICBtb3ZlIHQwLCBhMAogICAgICAgICBjYWxs
IGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uW3QxXQogICAgICAgICByZXN0b3JlUmV0dXJuQWRk
cmVzc0JlZm9yZVJldHVybih0MykKLSAgICAgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFs
RGF0YVtzcF0sIHQzCisgICAgICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6OnZtW3NwXSwgdDMKICAg
ICBlbHNpZiBTSDQKLSAgICAgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0YVtzcF0s
IHQzCi0gICAgICAgIHN0b3JlcCBjZnIsIEpTR2xvYmFsRGF0YTo6dG9wQ2FsbEZyYW1lW3QzXQor
ICAgICAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjp2bVtzcF0sIHQzCisgICAgICAgIHN0b3JlcCBj
ZnIsIFZNOjp0b3BDYWxsRnJhbWVbdDNdCiAgICAgICAgIG1vdmUgdDAsIHQyCiAgICAgICAgIHBy
ZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbCh0MykKICAgICAgICAgc3RvcmVwIHQzLCBSZXR1
cm5QQ1tjZnJdCkBAIC0xOTMzLDEwICsxOTMzLDEwIEBAIG1hY3JvIG5hdGl2ZUNhbGxUcmFtcG9s
aW5lKGV4ZWN1dGFibGVPZmYKICAgICAgICAgbW92ZSB0MiwgY2ZyCiAgICAgICAgIGNhbGwgZXhl
Y3V0YWJsZU9mZnNldFRvRnVuY3Rpb25bdDFdCiAgICAgICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNz
QmVmb3JlUmV0dXJuKHQzKQotICAgICAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjpnbG9iYWxEYXRh
W3NwXSwgdDMKKyAgICAgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6dm1bc3BdLCB0MwogICAgIGVs
c2lmIENfTE9PUAotICAgICAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjpnbG9iYWxEYXRhW3NwXSwg
dDMKLSAgICAgICAgc3RvcmVwIGNmciwgSlNHbG9iYWxEYXRhOjp0b3BDYWxsRnJhbWVbdDNdCisg
ICAgICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6OnZtW3NwXSwgdDMKKyAgICAgICAgc3RvcmVwIGNm
ciwgVk06OnRvcENhbGxGcmFtZVt0M10KICAgICAgICAgbW92ZSB0MCwgdDIKICAgICAgICAgcHJl
c2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHQzKQogICAgICAgICBzdG9yZXAgdDMsIFJldHVy
blBDW2Nmcl0KQEAgLTE5NDYsMTEgKzE5NDYsMTEgQEAgbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xp
bmUoZXhlY3V0YWJsZU9mZgogICAgICAgICBtb3ZlIHQyLCBjZnIKICAgICAgICAgY2xvb3BDYWxs
TmF0aXZlIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uW3QxXQogICAgICAgICByZXN0b3JlUmV0
dXJuQWRkcmVzc0JlZm9yZVJldHVybih0MykKLSAgICAgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6
Z2xvYmFsRGF0YVtzcF0sIHQzCisgICAgICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6OnZtW3NwXSwg
dDMKICAgICBlbHNlICAKICAgICAgICAgZXJyb3IKICAgICBlbmQKLSAgICBiaW5lcSBKU0dsb2Jh
bERhdGE6OmV4Y2VwdGlvbiArIFRhZ09mZnNldFt0M10sIEVtcHR5VmFsdWVUYWcsIC5leGNlcHRp
b24KKyAgICBiaW5lcSBWTTo6ZXhjZXB0aW9uICsgVGFnT2Zmc2V0W3QzXSwgRW1wdHlWYWx1ZVRh
ZywgLmV4Y2VwdGlvbgogICAgIHJldAogLmV4Y2VwdGlvbjoKICAgICBwcmVzZXJ2ZVJldHVybkFk
ZHJlc3NBZnRlckNhbGwodDEpICMgVGhpcyBpcyByZWFsbHkgb25seSBuZWVkZWQgb24gWDg2Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTE5Niw5
ICsxOTYsOSBAQCBtYWNybyBmdW5jdGlvbkFyaXR5Q2hlY2soZG9uZUxhYmVsLCBzbG93CiAgICAg
Y0NhbGwyKHNsb3dfcGF0aCwgY2ZyLCBQQykgICAjIFRoaXMgc2xvd19wYXRoIGhhcyBhIHNpbXBs
ZSBwcm90b2NvbDogdDAgPSAwID0+IG5vIGVycm9yLCB0MCAhPSAwID0+IGVycm9yCiAgICAgbW92
ZSB0MSwgY2ZyCiAgICAgYnRpeiB0MCwgLmNvbnRpbnVlCi0gICAgbG9hZHAgSklUU3RhY2tGcmFt
ZTo6Z2xvYmFsRGF0YVtzcF0sIHQxCi0gICAgbG9hZHAgSlNHbG9iYWxEYXRhOjpjYWxsRnJhbWVG
b3JUaHJvd1t0MV0sIHQwCi0gICAgam1wIEpTR2xvYmFsRGF0YTo6dGFyZ2V0TWFjaGluZVBDRm9y
VGhyb3dbdDFdCisgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6dm1bc3BdLCB0MQorICAgIGxvYWRw
IFZNOjpjYWxsRnJhbWVGb3JUaHJvd1t0MV0sIHQwCisgICAgam1wIFZNOjp0YXJnZXRNYWNoaW5l
UENGb3JUaHJvd1t0MV0KIC5jb250aW51ZToKICAgICAjIFJlbG9hZCBDb2RlQmxvY2sgYW5kIHJl
c2V0IFBDLCBzaW5jZSB0aGUgc2xvd19wYXRoIGNsb2JiZXJlZCB0aGVtLgogICAgIGxvYWRwIENv
ZGVCbG9ja1tjZnJdLCB0MQpAQCAtMTU5NywxNiArMTU5NywxNiBAQCBfbGxpbnRfb3BfY2F0Y2g6
CiAgICAgIyB0aGUgaW50ZXJwcmV0ZXIncyB0aHJvdyB0cmFtcG9saW5lIChzZWUgX2xsaW50X3Ro
cm93X3RyYW1wb2xpbmUpLgogICAgICMgVGhlIEpJVCB0aHJvd2luZyBwcm90b2NvbCBjYWxscyBm
b3IgdGhlIGNmciB0byBiZSBpbiB0MC4gVGhlIHRocm93aW5nCiAgICAgIyBjb2RlIG11c3QgaGF2
ZSBrbm93biB0aGF0IHdlIHdlcmUgdGhyb3dpbmcgdG8gdGhlIGludGVycHJldGVyLCBhbmQgaGF2
ZQotICAgICMgc2V0IEpTR2xvYmFsRGF0YTo6dGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93Lgor
ICAgICMgc2V0IFZNOjp0YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3cuCiAgICAgbW92ZSB0MCwg
Y2ZyCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCiAgICAgbG9hZHAgQ29kZUJsb2NrOjpt
X2luc3RydWN0aW9uc1tQQl0sIFBCCi0gICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0
YVtzcF0sIHQzCi0gICAgbG9hZHAgSlNHbG9iYWxEYXRhOjp0YXJnZXRJbnRlcnByZXRlclBDRm9y
VGhyb3dbdDNdLCBQQworICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6OnZtW3NwXSwgdDMKKyAgICBs
b2FkcCBWTTo6dGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93W3QzXSwgUEMKICAgICBzdWJwIFBC
LCBQQwogICAgIHJzaGlmdHAgMywgUEMKLSAgICBsb2FkcSBKU0dsb2JhbERhdGE6OmV4Y2VwdGlv
blt0M10sIHQwCi0gICAgc3RvcmVxIDAsIEpTR2xvYmFsRGF0YTo6ZXhjZXB0aW9uW3QzXQorICAg
IGxvYWRxIFZNOjpleGNlcHRpb25bdDNdLCB0MAorICAgIHN0b3JlcSAwLCBWTTo6ZXhjZXB0aW9u
W3QzXQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MikKICAgICBzdG9yZXEgdDAsIFtj
ZnIsIHQyLCA4XQogICAgIHRyYWNlRXhlY3V0aW9uKCkKQEAgLTE2MjYsMTYgKzE2MjYsMTYgQEAg
X2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmU6CiAgICAgIyBXaGVuIHRocm93
aW5nIGZyb20gdGhlIGludGVycHJldGVyIChpLmUuIHRocm93aW5nIGZyb20gTExJbnRTbG93UGF0
aHMpLCBzbwogICAgICMgdGhlIHRocm93IHRhcmdldCBpcyBub3QgbmVjZXNzYXJpbHkgaW50ZXJw
cmV0ZWQgY29kZSwgd2UgY29tZSB0byBoZXJlLgogICAgICMgVGhpcyBlc3NlbnRpYWxseSBlbXVs
YXRlcyB0aGUgSklUJ3MgdGhyb3dpbmcgcHJvdG9jb2wuCi0gICAgbG9hZHAgSklUU3RhY2tGcmFt
ZTo6Z2xvYmFsRGF0YVtzcF0sIHQxCi0gICAgbG9hZHAgSlNHbG9iYWxEYXRhOjpjYWxsRnJhbWVG
b3JUaHJvd1t0MV0sIHQwCi0gICAgam1wIEpTR2xvYmFsRGF0YTo6dGFyZ2V0TWFjaGluZVBDRm9y
VGhyb3dbdDFdCisgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6dm1bc3BdLCB0MQorICAgIGxvYWRw
IFZNOjpjYWxsRnJhbWVGb3JUaHJvd1t0MV0sIHQwCisgICAgam1wIFZNOjp0YXJnZXRNYWNoaW5l
UENGb3JUaHJvd1t0MV0KIAogCiBfbGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGluZToK
ICAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwodDIpCi0gICAgbG9hZHAgSklUU3Rh
Y2tGcmFtZTo6Z2xvYmFsRGF0YVtzcF0sIHQxCi0gICAgbG9hZHAgSlNHbG9iYWxEYXRhOjpjYWxs
RnJhbWVGb3JUaHJvd1t0MV0sIHQwCi0gICAgam1wIEpTR2xvYmFsRGF0YTo6dGFyZ2V0TWFjaGlu
ZVBDRm9yVGhyb3dbdDFdCisgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6dm1bc3BdLCB0MQorICAg
IGxvYWRwIFZNOjpjYWxsRnJhbWVGb3JUaHJvd1t0MV0sIHQwCisgICAgam1wIFZNOjp0YXJnZXRN
YWNoaW5lUENGb3JUaHJvd1t0MV0KIAogIyBHaXZlcyB5b3UgdGhlIHNjb3BlIGluIHQwLCB3aGls
ZSBhbGxvd2luZyB5b3UgdG8gb3B0aW9uYWxseSBwZXJmb3JtIGFkZGl0aW9uYWwgY2hlY2tzIG9u
IHRoZQogIyBzY29wZXMgYXMgdGhleSBhcmUgdHJhdmVyc2VkLiBzY29wZUNoZWNrKCkgaXMgY2Fs
bGVkIHdpdGggdHdvIGFyZ3VtZW50czogdGhlIHJlZ2lzdGVyCkBAIC0xNzAyLDggKzE3MDIsOCBA
QCBfbGxpbnRfb3BfcHV0X3Njb3BlZF92YXI6CiBtYWNybyBuYXRpdmVDYWxsVHJhbXBvbGluZShl
eGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbikKICAgICBzdG9yZXAgMCwgQ29kZUJsb2NrW2Nmcl0K
ICAgICBpZiBYODZfNjQKLSAgICAgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0YSAr
IDhbc3BdLCB0MAotICAgICAgICBzdG9yZXAgY2ZyLCBKU0dsb2JhbERhdGE6OnRvcENhbGxGcmFt
ZVt0MF0KKyAgICAgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6dm0gKyA4W3NwXSwgdDAKKyAgICAg
ICAgc3RvcmVwIGNmciwgVk06OnRvcENhbGxGcmFtZVt0MF0KICAgICAgICAgbG9hZHAgQ2FsbGVy
RnJhbWVbY2ZyXSwgdDAKICAgICAgICAgbG9hZHEgU2NvcGVDaGFpblt0MF0sIHQxCiAgICAgICAg
IHN0b3JlcSB0MSwgU2NvcGVDaGFpbltjZnJdCkBAIC0xNzE2LDE1ICsxNzE2LDE1IEBAIG1hY3Jv
IG5hdGl2ZUNhbGxUcmFtcG9saW5lKGV4ZWN1dGFibGVPZmYKICAgICAgICAgbW92ZSB0MCwgY2Zy
ICMgUmVzdG9yZSBjZnIgdG8gYXZvaWQgbG9hZGluZyBmcm9tIHN0YWNrCiAgICAgICAgIGNhbGwg
ZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb25bdDFdCiAgICAgICAgIGFkZHAgMTYgLSA4LCBzcAot
ICAgICAgICBsb2FkcCBKSVRTdGFja0ZyYW1lOjpnbG9iYWxEYXRhICsgOFtzcF0sIHQzCisgICAg
ICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6OnZtICsgOFtzcF0sIHQzCiAKICAgICBlbHNpZiBDX0xP
T1AKICAgICAgICAgbG9hZHAgQ2FsbGVyRnJhbWVbY2ZyXSwgdDAKICAgICAgICAgbG9hZHAgU2Nv
cGVDaGFpblt0MF0sIHQxCiAgICAgICAgIHN0b3JlcCB0MSwgU2NvcGVDaGFpbltjZnJdCiAKLSAg
ICAgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0YVtzcF0sIHQzCi0gICAgICAgIHN0
b3JlcCBjZnIsIEpTR2xvYmFsRGF0YTo6dG9wQ2FsbEZyYW1lW3QzXQorICAgICAgICBsb2FkcCBK
SVRTdGFja0ZyYW1lOjp2bVtzcF0sIHQzCisgICAgICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BDYWxs
RnJhbWVbdDNdCiAKICAgICAgICAgbW92ZSB0MCwgdDIKICAgICAgICAgcHJlc2VydmVSZXR1cm5B
ZGRyZXNzQWZ0ZXJDYWxsKHQzKQpAQCAtMTczNiwyMCArMTczNiwyMCBAQCBtYWNybyBuYXRpdmVD
YWxsVHJhbXBvbGluZShleGVjdXRhYmxlT2ZmCiAgICAgICAgIGNsb29wQ2FsbE5hdGl2ZSBleGVj
dXRhYmxlT2Zmc2V0VG9GdW5jdGlvblt0MV0KIAogICAgICAgICByZXN0b3JlUmV0dXJuQWRkcmVz
c0JlZm9yZVJldHVybih0MykKLSAgICAgICAgbG9hZHAgSklUU3RhY2tGcmFtZTo6Z2xvYmFsRGF0
YVtzcF0sIHQzCisgICAgICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6OnZtW3NwXSwgdDMKICAgICBl
bHNlCiAgICAgICAgIGVycm9yCiAgICAgZW5kCiAKLSAgICBidHFueiBKU0dsb2JhbERhdGE6OmV4
Y2VwdGlvblt0M10sIC5leGNlcHRpb24KKyAgICBidHFueiBWTTo6ZXhjZXB0aW9uW3QzXSwgLmV4
Y2VwdGlvbgogICAgIHJldAogLmV4Y2VwdGlvbjoKICAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NB
ZnRlckNhbGwodDEpCiAgICAgbG9hZGkgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQ
QwogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQQgogICAgIGxvYWRwIENvZGVCbG9jazo6bV9p
bnN0cnVjdGlvbnNbUEJdLCBQQgotICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6Omdsb2JhbERhdGFb
c3BdLCB0MAotICAgIHN0b3JlcCBjZnIsIEpTR2xvYmFsRGF0YTo6dG9wQ2FsbEZyYW1lW3QwXQor
ICAgIGxvYWRwIEpJVFN0YWNrRnJhbWU6OnZtW3NwXSwgdDAKKyAgICBzdG9yZXAgY2ZyLCBWTTo6
dG9wQ2FsbEZyYW1lW3QwXQogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfdGhyb3dfZnJvbV9uYXRp
dmVfY2FsbCkKICAgICBqbXAgX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUK
IGVuZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0zNjIs
OCArMzYyLDggQEAgbWFjcm8gZnVuY3Rpb25Jbml0aWFsaXphdGlvbihwcm9maWxlQXJnUwogICAg
ICAgICAKICAgICAjIENoZWNrIHN0YWNrIGhlaWdodC4KICAgICBsb2FkaSBDb2RlQmxvY2s6Om1f
bnVtQ2FsbGVlUmVnaXN0ZXJzW3QxXSwgdDAKLSAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFs
RGF0YVt0MV0sIHQyCi0gICAgbG9hZHAgSlNHbG9iYWxEYXRhOjppbnRlcnByZXRlclt0Ml0sIHQy
ICAgIyBGSVhNRTogQ2FuIGdldCB0byB0aGUgSlNTdGFjayBmcm9tIHRoZSBKSVRTdGFja0ZyYW1l
CisgICAgbG9hZHAgQ29kZUJsb2NrOjptX3ZtW3QxXSwgdDIKKyAgICBsb2FkcCBWTTo6aW50ZXJw
cmV0ZXJbdDJdLCB0MiAgICMgRklYTUU6IENhbiBnZXQgdG8gdGhlIEpTU3RhY2sgZnJvbSB0aGUg
SklUU3RhY2tGcmFtZQogICAgIGxzaGlmdGkgMywgdDAKICAgICBhZGRwIHQwLCBjZnIsIHQwCiAg
ICAgYnBhZXEgSW50ZXJwcmV0ZXI6Om1fc3RhY2sgKyBKU1N0YWNrOjptX2VuZFt0Ml0sIHQwLCAu
c3RhY2tIZWlnaHRPSwpAQCAtMTA1Nyw4ICsxMDU3LDggQEAgX2xsaW50X29wX2puZ3JlYXRlcmVx
OgogCiBfbGxpbnRfb3BfbG9vcF9oaW50OgogICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBsb2Fk
cCBKSVRTdGFja0ZyYW1lOjpnbG9iYWxEYXRhW3NwXSwgdDEKLSAgICBsb2FkYiBKU0dsb2JhbERh
dGE6OndhdGNoZG9nK1dhdGNoZG9nOjptX3RpbWVyRGlkRmlyZVt0MV0sIHQwCisgICAgbG9hZHAg
SklUU3RhY2tGcmFtZTo6dm1bc3BdLCB0MQorICAgIGxvYWRiIFZNOjp3YXRjaGRvZytXYXRjaGRv
Zzo6bV90aW1lckRpZEZpcmVbdDFdLCB0MAogICAgIGJ0Ym56IHQwLCAuaGFuZGxlV2F0Y2hkb2dU
aW1lcgogLmFmdGVyV2F0Y2hkb2dUaW1lckNoZWNrOgogICAgIGNoZWNrU3dpdGNoVG9KSVRGb3JM
b29wKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY1
LDcgKzI2NSw3IEBAIEpTVmFsdWUgQ0xvb3A6OmV4ZWN1dGUoQ2FsbEZyYW1lKiBjYWxsRnIKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICB9CiAKLSAgICBBU1NFUlQoY2FsbEZyYW1lLT5n
bG9iYWxEYXRhKCkudG9wQ2FsbEZyYW1lID09IGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKGNhbGxG
cmFtZS0+dm0oKS50b3BDYWxsRnJhbWUgPT0gY2FsbEZyYW1lKTsKIAogICAgIC8vIERlZmluZSB0
aGUgcHNldWRvIHJlZ2lzdGVycyB1c2VkIGJ5IHRoZSBMTElOVCBDIExvb3AgYmFja2VuZDoKICAg
ICBBU1NFUlQoc2l6ZW9mKENMb29wUmVnaXN0ZXIpID09IHNpemVvZihpbnRwdHJfdCkpOwpAQCAt
MzE5LDEwICszMTksMTAgQEAgSlNWYWx1ZSBDTG9vcDo6ZXhlY3V0ZShDYWxsRnJhbWUqIGNhbGxG
cgogICAgIC8vIFRoZSBsbGludCBleHBlY3RzIHRoZSBuYXRpdmUgc3RhY2sgcG9pbnRlciwgc3As
IHRvIGJlIHBvaW50aW5nIHRvIHRoZQogICAgIC8vIGppdFN0YWNrRnJhbWUgKHdoaWNoIGlzIHRo
ZSBzaW11bGF0aW9uIG9mIHRoZSBuYXRpdmUgc3RhY2sgZnJhbWUpOgogICAgIEpJVFN0YWNrRnJh
bWUqIGNvbnN0IHNwID0gJmppdFN0YWNrRnJhbWU7Ci0gICAgc3AtPmdsb2JhbERhdGEgPSAmY2Fs
bEZyYW1lLT5nbG9iYWxEYXRhKCk7CisgICAgc3AtPnZtID0gJmNhbGxGcmFtZS0+dm0oKTsKIAot
ICAgIC8vIFNldCB1cCBhbiBhbGlhcyBmb3IgdGhlIGdsb2JhbERhdGEgcHRyIGluIHRoZSBKSVRT
dGFja0ZyYW1lOgotICAgIEpTR2xvYmFsRGF0YSogJmdsb2JhbERhdGEgPSBzcC0+Z2xvYmFsRGF0
YTsKKyAgICAvLyBTZXQgdXAgYW4gYWxpYXMgZm9yIHRoZSB2bSBwdHIgaW4gdGhlIEpJVFN0YWNr
RnJhbWU6CisgICAgVk0qICZ2bSA9IHNwLT52bTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBJbnN0cnVjdGlvbiogdlBDOwpAQCAtNDIz
LDcgKzQyMyw3IEBAIEpTVmFsdWUgQ0xvb3A6OmV4ZWN1dGUoQ2FsbEZyYW1lKiBjYWxsRnIKICAg
ICAgICAgICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKIAogICAgICAg
ICAgICAgLy8gVGhlIHBhcnQgaW4gZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUo
KToKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gZ2xvYmFsRGF0YS0+aG9zdENhbGxSZXR1
cm5WYWx1ZTsKKyAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gdm0tPmhvc3RDYWxsUmV0dXJu
VmFsdWU7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgICAgIHQxLmkgPSByZXN1bHQu
dGFnKCk7CiAgICAgICAgICAgICB0MC5pID0gcmVzdWx0LnBheWxvYWQoKTsKQEAgLTQzNSw3ICs0
MzUsNyBAQCBKU1ZhbHVlIENMb29wOjpleGVjdXRlKENhbGxGcmFtZSogY2FsbEZyCiAKICAgICAg
ICAgT0ZGTElORV9BU01fR0xVRV9MQUJFTChjdGlPcFRocm93Tm90Q2F1Z2h0KQogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uOworICAgICAgICAgICAg
cmV0dXJuIHZtLT5leGNlcHRpb247CiAgICAgICAgIH0KIAogI2lmICFFTkFCTEUoQ09NUFVURURf
R09UT19PUENPREVTKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vY2xv
b3AucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vY2xv
b3AucmIJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5l
YXNtL2Nsb29wLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgY2xhc3MgQWRk
cmVzcwogICAgIGRlZiBwb2ludGVyRXhwcgogICAgICAgICBpZiBiYXNlLmlzX2E/IFJlZ2lzdGVy
SUQgYW5kIGJhc2UubmFtZSA9PSAic3AiIAogICAgICAgICAgICAgb2Zmc2V0VmFsdWUgPSAiI3tv
ZmZzZXQudmFsdWV9IgotICAgICAgICAgICAgIihBU1NFUlQoI3tvZmZzZXRWYWx1ZX0gPT0gb2Zm
c2V0b2YoSklUU3RhY2tGcmFtZSwgZ2xvYmFsRGF0YSkpLCAmc3AtPmdsb2JhbERhdGEpIgorICAg
ICAgICAgICAgIihBU1NFUlQoI3tvZmZzZXRWYWx1ZX0gPT0gb2Zmc2V0b2YoSklUU3RhY2tGcmFt
ZSwgdm0pKSwgJnNwLT52bSkiCiAgICAgICAgIGVsc2lmIG9mZnNldC52YWx1ZSA9PSAwCiAgICAg
ICAgICAgICAiI3tiYXNlLmNsVmFsdWUoOmludDhQdHIpfSIKICAgICAgICAgZWxzaWYgb2Zmc2V0
LnZhbHVlID4gMApAQCAtMjUwLDcgKzI1MCw3IEBAIGNsYXNzIEJhc2VJbmRleAogICAgIGRlZiBw
b2ludGVyRXhwcgogICAgICAgICBpZiBiYXNlLmlzX2E/IFJlZ2lzdGVySUQgYW5kIGJhc2UubmFt
ZSA9PSAic3AiCiAgICAgICAgICAgICBvZmZzZXRWYWx1ZSA9ICIoI3tpbmRleC5jbFZhbHVlfSA8
PCAje3NjYWxlU2hpZnR9KSArICN7b2Zmc2V0LmNsVmFsdWV9KSIKLSAgICAgICAgICAgICIoQVNT
RVJUKCN7b2Zmc2V0VmFsdWV9ID09IG9mZnNldG9mKEpJVFN0YWNrRnJhbWUsIGdsb2JhbERhdGEp
KSwgJnNwLT5nbG9iYWxEYXRhKSIKKyAgICAgICAgICAgICIoQVNTRVJUKCN7b2Zmc2V0VmFsdWV9
ID09IG9mZnNldG9mKEpJVFN0YWNrRnJhbWUsIHZtKSksICZzcC0+dm0pIgogICAgICAgICBlbHNl
CiAgICAgICAgICAgICAiI3tiYXNlLmNsVmFsdWUoOmludDhQdHIpfSArICgje2luZGV4LmNsVmFs
dWV9IDw8ICN7c2NhbGVTaGlmdH0pICsgI3tvZmZzZXQuY2xWYWx1ZX0iCiAgICAgICAgIGVuZApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHJldmlzaW9u
IDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MywxMCArNzMsMTAgQEAgY2xhc3MgQVNUQnVpbGRlciB7CiAgICAg
ICAgIE9wZXJhdG9yIG1fb3A7CiAgICAgfTsKIHB1YmxpYzoKLSAgICBBU1RCdWlsZGVyKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgU291cmNlQ29kZSogc291cmNlQ29kZSkKLSAgICAgICAgOiBt
X2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKKyAgICBBU1RCdWlsZGVyKFZNKiB2bSwgU291cmNlQ29k
ZSogc291cmNlQ29kZSkKKyAgICAgICAgOiBtX3ZtKHZtKQogICAgICAgICAsIG1fc291cmNlQ29k
ZShzb3VyY2VDb2RlKQotICAgICAgICAsIG1fc2NvcGUoZ2xvYmFsRGF0YSkKKyAgICAgICAgLCBt
X3Njb3BlKHZtKQogICAgICAgICAsIG1fZXZhbENvdW50KDApCiAgICAgewogICAgIH0KQEAgLTEx
NSw3ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VCaW5hcnlOb2Rl
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCB0b2tlbiwgc3RkOjpwYWlyPEV4cHJlc3Npb25O
b2RlKiwgQmluYXJ5T3BJbmZvPiwgc3RkOjpwYWlyPEV4cHJlc3Npb25Ob2RlKiwgQmluYXJ5T3BJ
bmZvPik7CiAgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBBcmd1bWVudHNOb2RlKiBhcmdz
LCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCk7CiAKLSAgICBKU0M6OlNvdXJjZUVsZW1l
bnRzKiBjcmVhdGVTb3VyY2VFbGVtZW50cygpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBK
U0M6OlNvdXJjZUVsZW1lbnRzKCk7IH0KKyAgICBKU0M6OlNvdXJjZUVsZW1lbnRzKiBjcmVhdGVT
b3VyY2VFbGVtZW50cygpIHsgcmV0dXJuIG5ldyAobV92bSkgSlNDOjpTb3VyY2VFbGVtZW50cygp
OyB9CiAKICAgICBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrPiog
dmFyRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9zY29wZS5tX3ZhckRlY2xhcmF0aW9uczsgfQog
ICAgIFBhcnNlckFyZW5hRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjaz4qIGZ1
bmNEZWNsYXJhdGlvbnMoKSB7IHJldHVybiBtX3Njb3BlLm1fZnVuY0RlY2xhcmF0aW9uczsgfQpA
QCAtMTI0LDcgKzEyNCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYXBwZW5kVG9Db21tYShDb21t
YU5vZGUqIGNvbW1hTm9kZSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpIHsgY29tbWFOb2RlLT5hcHBl
bmQoZXhwcik7IH0KIAotICAgIENvbW1hTm9kZSogY3JlYXRlQ29tbWFFeHByKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBsaHMsIEV4cHJlc3Npb25Ob2Rl
KiByaHMpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBDb21tYU5vZGUobG9jYXRpb24sIGxo
cywgcmhzKTsgfQorICAgIENvbW1hTm9kZSogY3JlYXRlQ29tbWFFeHByKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBsaHMsIEV4cHJlc3Npb25Ob2RlKiBy
aHMpIHsgcmV0dXJuIG5ldyAobV92bSkgQ29tbWFOb2RlKGxvY2F0aW9uLCBsaHMsIHJocyk7IH0K
IAogICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQXNzaWduTm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBFeHByZXNzaW9uTm9kZSogbGVmdCwgT3BlcmF0b3IsIEV4cHJlc3Npb25Ob2RlKiByaWdo
dCwgYm9vbCBsZWZ0SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgaW50
IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQpOwogICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlUHJl
Zml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSosIE9wZXJhdG9y
LCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCk7CkBAIC0xNTAsNzYgKzE1MCw3NiBAQCBw
dWJsaWM6CiAgICAgICAgIGlmIChleHByLT5pc051bWJlcigpKQogICAgICAgICAgICAgcmV0dXJu
IGNyZWF0ZUJvb2xlYW4obG9jYXRpb24sICFzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcikt
PnZhbHVlKCkpOwogCi0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgTG9naWNhbE5v
dE5vZGUobG9jYXRpb24sIGV4cHIpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBMb2dpY2Fs
Tm90Tm9kZShsb2NhdGlvbiwgZXhwcik7CiAgICAgfQotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVh
dGVVbmFyeVBsdXMoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5v
ZGUqIGV4cHIpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBVbmFyeVBsdXNOb2RlKGxvY2F0
aW9uLCBleHByKTsgfQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVVbmFyeVBsdXMoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpIHsgcmV0dXJu
IG5ldyAobV92bSkgVW5hcnlQbHVzTm9kZShsb2NhdGlvbiwgZXhwcik7IH0KICAgICBFeHByZXNz
aW9uTm9kZSogY3JlYXRlVm9pZChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHBy
ZXNzaW9uTm9kZSogZXhwcikKICAgICB7CiAgICAgICAgIGluY0NvbnN0YW50cygpOwotICAgICAg
ICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFZvaWROb2RlKGxvY2F0aW9uLCBleHByKTsKKyAg
ICAgICAgcmV0dXJuIG5ldyAobV92bSkgVm9pZE5vZGUobG9jYXRpb24sIGV4cHIpOwogICAgIH0K
ICAgICBFeHByZXNzaW9uTm9kZSogdGhpc0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbikKICAgICB7CiAgICAgICAgIHVzZXNUaGlzKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1f
Z2xvYmFsRGF0YSkgVGhpc05vZGUobG9jYXRpb24pOworICAgICAgICByZXR1cm4gbmV3IChtX3Zt
KSBUaGlzTm9kZShsb2NhdGlvbik7CiAgICAgfQogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVS
ZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50LCBpbnQgc3RhcnQpCiAgICAgewotICAgICAgICBpZiAobV9nbG9iYWxEYXRhLT5wcm9w
ZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gKmlkZW50KQorICAgICAgICBpZiAobV92bS0+cHJvcGVy
dHlOYW1lcy0+YXJndW1lbnRzID09ICppZGVudCkKICAgICAgICAgICAgIHVzZXNBcmd1bWVudHMo
KTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBSZXNvbHZlTm9kZShsb2NhdGlv
biwgKmlkZW50LCBzdGFydCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIFJlc29sdmVOb2Rl
KGxvY2F0aW9uLCAqaWRlbnQsIHN0YXJ0KTsKICAgICB9Ci0gICAgRXhwcmVzc2lvbk5vZGUqIGNy
ZWF0ZU9iamVjdExpdGVyYWwoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikgeyByZXR1
cm4gbmV3IChtX2dsb2JhbERhdGEpIE9iamVjdExpdGVyYWxOb2RlKGxvY2F0aW9uKTsgfQotICAg
IEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVPYmplY3RMaXRlcmFsKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgbG9jYXRpb24sIFByb3BlcnR5TGlzdE5vZGUqIHByb3BlcnRpZXMpIHsgcmV0dXJuIG5ldyAo
bV9nbG9iYWxEYXRhKSBPYmplY3RMaXRlcmFsTm9kZShsb2NhdGlvbiwgcHJvcGVydGllcyk7IH0K
KyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlT2JqZWN0TGl0ZXJhbChjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uKSB7IHJldHVybiBuZXcgKG1fdm0pIE9iamVjdExpdGVyYWxOb2RlKGxv
Y2F0aW9uKTsgfQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVPYmplY3RMaXRlcmFsKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFByb3BlcnR5TGlzdE5vZGUqIHByb3BlcnRpZXMp
IHsgcmV0dXJuIG5ldyAobV92bSkgT2JqZWN0TGl0ZXJhbE5vZGUobG9jYXRpb24sIHByb3BlcnRp
ZXMpOyB9CiAKICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlQXJyYXkoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgaW50IGVsaXNpb25zKQogICAgIHsKICAgICAgICAgaWYgKGVsaXNp
b25zKQogICAgICAgICAgICAgaW5jQ29uc3RhbnRzKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1f
Z2xvYmFsRGF0YSkgQXJyYXlOb2RlKGxvY2F0aW9uLCBlbGlzaW9ucyk7CisgICAgICAgIHJldHVy
biBuZXcgKG1fdm0pIEFycmF5Tm9kZShsb2NhdGlvbiwgZWxpc2lvbnMpOwogICAgIH0KIAotICAg
IEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVBcnJheShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBFbGVtZW50Tm9kZSogZWxlbXMpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBBcnJh
eU5vZGUobG9jYXRpb24sIGVsZW1zKTsgfQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVBcnJh
eShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFbGVtZW50Tm9kZSogZWxlbXMpIHsg
cmV0dXJuIG5ldyAobV92bSkgQXJyYXlOb2RlKGxvY2F0aW9uLCBlbGVtcyk7IH0KICAgICBFeHBy
ZXNzaW9uTm9kZSogY3JlYXRlQXJyYXkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
aW50IGVsaXNpb25zLCBFbGVtZW50Tm9kZSogZWxlbXMpCiAgICAgewogICAgICAgICBpZiAoZWxp
c2lvbnMpCiAgICAgICAgICAgICBpbmNDb25zdGFudHMoKTsKLSAgICAgICAgcmV0dXJuIG5ldyAo
bV9nbG9iYWxEYXRhKSBBcnJheU5vZGUobG9jYXRpb24sIGVsaXNpb25zLCBlbGVtcyk7CisgICAg
ICAgIHJldHVybiBuZXcgKG1fdm0pIEFycmF5Tm9kZShsb2NhdGlvbiwgZWxpc2lvbnMsIGVsZW1z
KTsKICAgICB9CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU51bWJlckV4cHIoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgZG91YmxlIGQpCiAgICAgewogICAgICAgICBpbmNDb25z
dGFudHMoKTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBOdW1iZXJOb2RlKGxv
Y2F0aW9uLCBkKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgTnVtYmVyTm9kZShsb2NhdGlv
biwgZCk7CiAgICAgfQogCiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVN0cmluZyhjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBzdHJpbmcpCiAgICAg
ewogICAgICAgICBpbmNDb25zdGFudHMoKTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxE
YXRhKSBTdHJpbmdOb2RlKGxvY2F0aW9uLCAqc3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIG5ldyAo
bV92bSkgU3RyaW5nTm9kZShsb2NhdGlvbiwgKnN0cmluZyk7CiAgICAgfQogCiAgICAgRXhwcmVz
c2lvbk5vZGUqIGNyZWF0ZUJvb2xlYW4oY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
Ym9vbCBiKQogICAgIHsKICAgICAgICAgaW5jQ29uc3RhbnRzKCk7Ci0gICAgICAgIHJldHVybiBu
ZXcgKG1fZ2xvYmFsRGF0YSkgQm9vbGVhbk5vZGUobG9jYXRpb24sIGIpOworICAgICAgICByZXR1
cm4gbmV3IChtX3ZtKSBCb29sZWFuTm9kZShsb2NhdGlvbiwgYik7CiAgICAgfQogCiAgICAgRXhw
cmVzc2lvbk5vZGUqIGNyZWF0ZU51bGwoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikK
ICAgICB7CiAgICAgICAgIGluY0NvbnN0YW50cygpOwotICAgICAgICByZXR1cm4gbmV3IChtX2ds
b2JhbERhdGEpIE51bGxOb2RlKGxvY2F0aW9uKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV92bSkg
TnVsbE5vZGUobG9jYXRpb24pOwogICAgIH0KIAogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVC
cmFja2V0QWNjZXNzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25O
b2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogcHJvcGVydHksIGJvb2wgcHJvcGVydHlIYXNBc3Np
Z25tZW50cywgaW50IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQpCiAgICAgewotICAgICAgICBC
cmFja2V0QWNjZXNzb3JOb2RlKiBub2RlID0gbmV3IChtX2dsb2JhbERhdGEpIEJyYWNrZXRBY2Nl
c3Nvck5vZGUobG9jYXRpb24sIGJhc2UsIHByb3BlcnR5LCBwcm9wZXJ0eUhhc0Fzc2lnbm1lbnRz
KTsKKyAgICAgICAgQnJhY2tldEFjY2Vzc29yTm9kZSogbm9kZSA9IG5ldyAobV92bSkgQnJhY2tl
dEFjY2Vzc29yTm9kZShsb2NhdGlvbiwgYmFzZSwgcHJvcGVydHksIHByb3BlcnR5SGFzQXNzaWdu
bWVudHMpOwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3Qs
IGVuZCk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAogICAgIEV4cHJlc3Npb25Ob2Rl
KiBjcmVhdGVEb3RBY2Nlc3MoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVz
c2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXIqIHByb3BlcnR5LCBpbnQgc3RhcnQsIGlu
dCBkaXZvdCwgaW50IGVuZCkKICAgICB7Ci0gICAgICAgIERvdEFjY2Vzc29yTm9kZSogbm9kZSA9
IG5ldyAobV9nbG9iYWxEYXRhKSBEb3RBY2Nlc3Nvck5vZGUobG9jYXRpb24sIGJhc2UsICpwcm9w
ZXJ0eSk7CisgICAgICAgIERvdEFjY2Vzc29yTm9kZSogbm9kZSA9IG5ldyAobV92bSkgRG90QWNj
ZXNzb3JOb2RlKGxvY2F0aW9uLCBiYXNlLCAqcHJvcGVydHkpOwogICAgICAgICBzZXRFeGNlcHRp
b25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCk7CiAgICAgICAgIHJldHVybiBub2Rl
OwogICAgIH0KQEAgLTIyOCw3ICsyMjgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAo
WWFycjo6Y2hlY2tTeW50YXgocGF0dGVybi5zdHJpbmcoKSkpCiAgICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgUmVnRXhwTm9kZSogbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBSZWdFeHBO
b2RlKGxvY2F0aW9uLCBwYXR0ZXJuLCBmbGFncyk7CisgICAgICAgIFJlZ0V4cE5vZGUqIG5vZGUg
PSBuZXcgKG1fdm0pIFJlZ0V4cE5vZGUobG9jYXRpb24sIHBhdHRlcm4sIGZsYWdzKTsKICAgICAg
ICAgaW50IHNpemUgPSBwYXR0ZXJuLmxlbmd0aCgpICsgMjsgLy8gKyAyIGZvciB0aGUgdHdvIC8n
cwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgc3RhcnQgKyBzaXpl
LCBzdGFydCArIHNpemUpOwogICAgICAgICByZXR1cm4gbm9kZTsKQEAgLTIzNiw0MiArMjM2LDQy
IEBAIHB1YmxpYzoKIAogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVOZXdFeHByKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBBcmd1bWVudHNO
b2RlKiBhcmd1bWVudHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kKQogICAgIHsKLSAg
ICAgICAgTmV3RXhwck5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgTmV3RXhwck5vZGUo
bG9jYXRpb24sIGV4cHIsIGFyZ3VtZW50cyk7CisgICAgICAgIE5ld0V4cHJOb2RlKiBub2RlID0g
bmV3IChtX3ZtKSBOZXdFeHByTm9kZShsb2NhdGlvbiwgZXhwciwgYXJndW1lbnRzKTsKICAgICAg
ICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgc3RhcnQsIGRpdm90LCBlbmQpOwogICAgICAg
ICByZXR1cm4gbm9kZTsKICAgICB9CiAKICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlTmV3RXhw
cihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwg
aW50IHN0YXJ0LCBpbnQgZW5kKQogICAgIHsKLSAgICAgICAgTmV3RXhwck5vZGUqIG5vZGUgPSBu
ZXcgKG1fZ2xvYmFsRGF0YSkgTmV3RXhwck5vZGUobG9jYXRpb24sIGV4cHIpOworICAgICAgICBO
ZXdFeHByTm9kZSogbm9kZSA9IG5ldyAobV92bSkgTmV3RXhwck5vZGUobG9jYXRpb24sIGV4cHIp
OwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZW5kLCBlbmQpOwog
ICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRl
Q29uZGl0aW9uYWxFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Np
b25Ob2RlKiBjb25kaXRpb24sIEV4cHJlc3Npb25Ob2RlKiBsaHMsIEV4cHJlc3Npb25Ob2RlKiBy
aHMpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIENvbmRpdGlvbmFs
Tm9kZShsb2NhdGlvbiwgY29uZGl0aW9uLCBsaHMsIHJocyk7CisgICAgICAgIHJldHVybiBuZXcg
KG1fdm0pIENvbmRpdGlvbmFsTm9kZShsb2NhdGlvbiwgY29uZGl0aW9uLCBsaHMsIHJocyk7CiAg
ICAgfQogCiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUFzc2lnblJlc29sdmUoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEV4cHJlc3Np
b25Ob2RlKiByaHMsIGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kKQogICAgIHsKICAgICAg
ICAgaWYgKHJocy0+aXNGdW5jRXhwck5vZGUoKSkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEZ1
bmNFeHByTm9kZSo+KHJocyktPmJvZHkoKS0+c2V0SW5mZXJyZWROYW1lKGlkZW50KTsKLSAgICAg
ICAgQXNzaWduUmVzb2x2ZU5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQXNzaWduUmVz
b2x2ZU5vZGUobG9jYXRpb24sIGlkZW50LCByaHMpOworICAgICAgICBBc3NpZ25SZXNvbHZlTm9k
ZSogbm9kZSA9IG5ldyAobV92bSkgQXNzaWduUmVzb2x2ZU5vZGUobG9jYXRpb24sIGlkZW50LCBy
aHMpOwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVu
ZCk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAogICAgIEV4cHJlc3Npb25Ob2RlKiBj
cmVhdGVGdW5jdGlvbkV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3Qg
SWRlbnRpZmllciogbmFtZSwgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwgUGFyYW1ldGVyTm9kZSog
cGFyYW1ldGVycywgaW50IG9wZW5CcmFjZVBvcywgaW50IGNsb3NlQnJhY2VQb3MsIGludCBib2R5
U3RhcnRMaW5lLCBpbnQgYm9keUVuZExpbmUpCiAgICAgewotICAgICAgICBGdW5jRXhwck5vZGUq
IHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBGdW5jRXhwck5vZGUobG9jYXRpb24sICpuYW1l
LCBib2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24ob3BlbkJyYWNlUG9zLCBjbG9zZUJy
YWNlUG9zLCBib2R5U3RhcnRMaW5lKSwgcGFyYW1ldGVycyk7CisgICAgICAgIEZ1bmNFeHByTm9k
ZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBGdW5jRXhwck5vZGUobG9jYXRpb24sICpuYW1lLCBib2R5
LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24ob3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9z
LCBib2R5U3RhcnRMaW5lKSwgcGFyYW1ldGVycyk7CiAgICAgICAgIGJvZHktPnNldExvYyhib2R5
U3RhcnRMaW5lLCBib2R5RW5kTGluZSwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBGdW5jdGlvbkJvZHlOb2RlKiBjcmVhdGVGdW5j
dGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCBib29sIGluU3RyaWN0Q29udGV4dCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUobV9nbG9iYWxEYXRhLCBzdGFy
dExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgaW5TdHJpY3RDb250ZXh0KTsKKyAgICAgICAgcmV0dXJu
IEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZShtX3ZtLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlv
biwgaW5TdHJpY3RDb250ZXh0KTsKICAgICB9CiAKICAgICB2b2lkIHNldEZ1bmN0aW9uU3RhcnQo
RnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwgaW50IGZ1bmN0aW9uU3RhcnQpCkBAIC0yODQsNDYgKzI4
NCw0NiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChuYW1lKTsKICAgICAgICAgYm9keS0+c2V0
TG9jKGJvZHlTdGFydExpbmUsIGJvZHlFbmRMaW5lLCBsb2NhdGlvbi5jaGFyUG9zaXRpb24pOwog
ICAgICAgICBib2R5LT5zZXRJbmZlcnJlZE5hbWUoKm5hbWUpOwotICAgICAgICByZXR1cm4gbmV3
IChtX2dsb2JhbERhdGEpIFByb3BlcnR5Tm9kZShtX2dsb2JhbERhdGEsICpuYW1lLCBuZXcgKG1f
Z2xvYmFsRGF0YSkgRnVuY0V4cHJOb2RlKGxvY2F0aW9uLCBtX2dsb2JhbERhdGEtPnByb3BlcnR5
TmFtZXMtPm51bGxJZGVudGlmaWVyLCBib2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24o
b3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5U3RhcnRMaW5lKSwgcGFyYW1zKSwgdHlw
ZSk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIFByb3BlcnR5Tm9kZShtX3ZtLCAqbmFtZSwg
bmV3IChtX3ZtKSBGdW5jRXhwck5vZGUobG9jYXRpb24sIG1fdm0tPnByb3BlcnR5TmFtZXMtPm51
bGxJZGVudGlmaWVyLCBib2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24ob3BlbkJyYWNl
UG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5U3RhcnRMaW5lKSwgcGFyYW1zKSwgdHlwZSk7CiAgICAg
fQogICAgIAotICAgIHRlbXBsYXRlIDxib29sPiBQcm9wZXJ0eU5vZGUqIGNyZWF0ZUdldHRlck9y
U2V0dGVyUHJvcGVydHkoSlNHbG9iYWxEYXRhKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGRvdWJsZSBuYW1lLCBQYXJhbWV0ZXJOb2Rl
KiBwYXJhbXMsIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIGludCBvcGVuQnJhY2VQb3MsIGludCBj
bG9zZUJyYWNlUG9zLCBpbnQgYm9keVN0YXJ0TGluZSwgaW50IGJvZHlFbmRMaW5lKQorICAgIHRl
bXBsYXRlIDxib29sPiBQcm9wZXJ0eU5vZGUqIGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHko
Vk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBQcm9wZXJ0eU5vZGU6OlR5cGUg
dHlwZSwgZG91YmxlIG5hbWUsIFBhcmFtZXRlck5vZGUqIHBhcmFtcywgRnVuY3Rpb25Cb2R5Tm9k
ZSogYm9keSwgaW50IG9wZW5CcmFjZVBvcywgaW50IGNsb3NlQnJhY2VQb3MsIGludCBib2R5U3Rh
cnRMaW5lLCBpbnQgYm9keUVuZExpbmUpCiAgICAgewogICAgICAgICBib2R5LT5zZXRMb2MoYm9k
eVN0YXJ0TGluZSwgYm9keUVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7Ci0gICAgICAg
IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUHJvcGVydHlOb2RlKG1fZ2xvYmFsRGF0YSwgbmFt
ZSwgbmV3IChtX2dsb2JhbERhdGEpIEZ1bmNFeHByTm9kZShsb2NhdGlvbiwgbV9nbG9iYWxEYXRh
LT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgYm9keSwgbV9zb3VyY2VDb2RlLT5zdWJF
eHByZXNzaW9uKG9wZW5CcmFjZVBvcywgY2xvc2VCcmFjZVBvcywgYm9keVN0YXJ0TGluZSksIHBh
cmFtcyksIHR5cGUpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBQcm9wZXJ0eU5vZGUobV92
bSwgbmFtZSwgbmV3IChtX3ZtKSBGdW5jRXhwck5vZGUobG9jYXRpb24sIG1fdm0tPnByb3BlcnR5
TmFtZXMtPm51bGxJZGVudGlmaWVyLCBib2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24o
b3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5U3RhcnRMaW5lKSwgcGFyYW1zKSwgdHlw
ZSk7CiAgICAgfQogCi0gICAgQXJndW1lbnRzTm9kZSogY3JlYXRlQXJndW1lbnRzKCkgeyByZXR1
cm4gbmV3IChtX2dsb2JhbERhdGEpIEFyZ3VtZW50c05vZGUoKTsgfQotICAgIEFyZ3VtZW50c05v
ZGUqIGNyZWF0ZUFyZ3VtZW50cyhBcmd1bWVudExpc3ROb2RlKiBhcmdzKSB7IHJldHVybiBuZXcg
KG1fZ2xvYmFsRGF0YSkgQXJndW1lbnRzTm9kZShhcmdzKTsgfQotICAgIEFyZ3VtZW50TGlzdE5v
ZGUqIGNyZWF0ZUFyZ3VtZW50c0xpc3QoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
RXhwcmVzc2lvbk5vZGUqIGFyZykgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEFyZ3VtZW50
TGlzdE5vZGUobG9jYXRpb24sIGFyZyk7IH0KLSAgICBBcmd1bWVudExpc3ROb2RlKiBjcmVhdGVB
cmd1bWVudHNMaXN0KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEFyZ3VtZW50TGlz
dE5vZGUqIGFyZ3MsIEV4cHJlc3Npb25Ob2RlKiBhcmcpIHsgcmV0dXJuIG5ldyAobV9nbG9iYWxE
YXRhKSBBcmd1bWVudExpc3ROb2RlKGxvY2F0aW9uLCBhcmdzLCBhcmcpOyB9CisgICAgQXJndW1l
bnRzTm9kZSogY3JlYXRlQXJndW1lbnRzKCkgeyByZXR1cm4gbmV3IChtX3ZtKSBBcmd1bWVudHNO
b2RlKCk7IH0KKyAgICBBcmd1bWVudHNOb2RlKiBjcmVhdGVBcmd1bWVudHMoQXJndW1lbnRMaXN0
Tm9kZSogYXJncykgeyByZXR1cm4gbmV3IChtX3ZtKSBBcmd1bWVudHNOb2RlKGFyZ3MpOyB9Cisg
ICAgQXJndW1lbnRMaXN0Tm9kZSogY3JlYXRlQXJndW1lbnRzTGlzdChjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYXJnKSB7IHJldHVybiBuZXcgKG1fdm0p
IEFyZ3VtZW50TGlzdE5vZGUobG9jYXRpb24sIGFyZyk7IH0KKyAgICBBcmd1bWVudExpc3ROb2Rl
KiBjcmVhdGVBcmd1bWVudHNMaXN0KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEFy
Z3VtZW50TGlzdE5vZGUqIGFyZ3MsIEV4cHJlc3Npb25Ob2RlKiBhcmcpIHsgcmV0dXJuIG5ldyAo
bV92bSkgQXJndW1lbnRMaXN0Tm9kZShsb2NhdGlvbiwgYXJncywgYXJnKTsgfQogCiAgICAgdGVt
cGxhdGUgPGJvb2w+IFByb3BlcnR5Tm9kZSogY3JlYXRlUHJvcGVydHkoY29uc3QgSWRlbnRpZmll
ciogcHJvcGVydHlOYW1lLCBFeHByZXNzaW9uTm9kZSogbm9kZSwgUHJvcGVydHlOb2RlOjpUeXBl
IHR5cGUpCiAgICAgewogICAgICAgICBpZiAobm9kZS0+aXNGdW5jRXhwck5vZGUoKSkKICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PEZ1bmNFeHByTm9kZSo+KG5vZGUpLT5ib2R5KCktPnNldEluZmVy
cmVkTmFtZSgqcHJvcGVydHlOYW1lKTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRh
KSBQcm9wZXJ0eU5vZGUobV9nbG9iYWxEYXRhLCAqcHJvcGVydHlOYW1lLCBub2RlLCB0eXBlKTsK
KyAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgUHJvcGVydHlOb2RlKG1fdm0sICpwcm9wZXJ0eU5h
bWUsIG5vZGUsIHR5cGUpOwogICAgIH0KLSAgICB0ZW1wbGF0ZSA8Ym9vbD4gUHJvcGVydHlOb2Rl
KiBjcmVhdGVQcm9wZXJ0eShKU0dsb2JhbERhdGEqLCBkb3VibGUgcHJvcGVydHlOYW1lLCBFeHBy
ZXNzaW9uTm9kZSogbm9kZSwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUpIHsgcmV0dXJuIG5ldyAo
bV9nbG9iYWxEYXRhKSBQcm9wZXJ0eU5vZGUobV9nbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIG5v
ZGUsIHR5cGUpOyB9Ci0gICAgUHJvcGVydHlMaXN0Tm9kZSogY3JlYXRlUHJvcGVydHlMaXN0KGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFByb3BlcnR5Tm9kZSogcHJvcGVydHkpIHsg
cmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBQcm9wZXJ0eUxpc3ROb2RlKGxvY2F0aW9uLCBwcm9w
ZXJ0eSk7IH0KLSAgICBQcm9wZXJ0eUxpc3ROb2RlKiBjcmVhdGVQcm9wZXJ0eUxpc3QoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgUHJvcGVydHlOb2RlKiBwcm9wZXJ0eSwgUHJvcGVy
dHlMaXN0Tm9kZSogdGFpbCkgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFByb3BlcnR5TGlz
dE5vZGUobG9jYXRpb24sIHByb3BlcnR5LCB0YWlsKTsgfQorICAgIHRlbXBsYXRlIDxib29sPiBQ
cm9wZXJ0eU5vZGUqIGNyZWF0ZVByb3BlcnR5KFZNKiwgZG91YmxlIHByb3BlcnR5TmFtZSwgRXhw
cmVzc2lvbk5vZGUqIG5vZGUsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlKSB7IHJldHVybiBuZXcg
KG1fdm0pIFByb3BlcnR5Tm9kZShtX3ZtLCBwcm9wZXJ0eU5hbWUsIG5vZGUsIHR5cGUpOyB9Cisg
ICAgUHJvcGVydHlMaXN0Tm9kZSogY3JlYXRlUHJvcGVydHlMaXN0KGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgbG9jYXRpb24sIFByb3BlcnR5Tm9kZSogcHJvcGVydHkpIHsgcmV0dXJuIG5ldyAobV92
bSkgUHJvcGVydHlMaXN0Tm9kZShsb2NhdGlvbiwgcHJvcGVydHkpOyB9CisgICAgUHJvcGVydHlM
aXN0Tm9kZSogY3JlYXRlUHJvcGVydHlMaXN0KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIFByb3BlcnR5Tm9kZSogcHJvcGVydHksIFByb3BlcnR5TGlzdE5vZGUqIHRhaWwpIHsgcmV0
dXJuIG5ldyAobV92bSkgUHJvcGVydHlMaXN0Tm9kZShsb2NhdGlvbiwgcHJvcGVydHksIHRhaWwp
OyB9CiAKLSAgICBFbGVtZW50Tm9kZSogY3JlYXRlRWxlbWVudExpc3QoaW50IGVsaXNpb25zLCBF
eHByZXNzaW9uTm9kZSogZXhwcikgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEVsZW1lbnRO
b2RlKGVsaXNpb25zLCBleHByKTsgfQotICAgIEVsZW1lbnROb2RlKiBjcmVhdGVFbGVtZW50TGlz
dChFbGVtZW50Tm9kZSogZWxlbXMsIGludCBlbGlzaW9ucywgRXhwcmVzc2lvbk5vZGUqIGV4cHIp
IHsgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBFbGVtZW50Tm9kZShlbGVtcywgZWxpc2lvbnMs
IGV4cHIpOyB9CisgICAgRWxlbWVudE5vZGUqIGNyZWF0ZUVsZW1lbnRMaXN0KGludCBlbGlzaW9u
cywgRXhwcmVzc2lvbk5vZGUqIGV4cHIpIHsgcmV0dXJuIG5ldyAobV92bSkgRWxlbWVudE5vZGUo
ZWxpc2lvbnMsIGV4cHIpOyB9CisgICAgRWxlbWVudE5vZGUqIGNyZWF0ZUVsZW1lbnRMaXN0KEVs
ZW1lbnROb2RlKiBlbGVtcywgaW50IGVsaXNpb25zLCBFeHByZXNzaW9uTm9kZSogZXhwcikgeyBy
ZXR1cm4gbmV3IChtX3ZtKSBFbGVtZW50Tm9kZShlbGVtcywgZWxpc2lvbnMsIGV4cHIpOyB9CiAK
LSAgICBQYXJhbWV0ZXJOb2RlKiBjcmVhdGVGb3JtYWxQYXJhbWV0ZXJMaXN0KGNvbnN0IElkZW50
aWZpZXImIGlkZW50KSB7IHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUGFyYW1ldGVyTm9kZShp
ZGVudCk7IH0KLSAgICBQYXJhbWV0ZXJOb2RlKiBjcmVhdGVGb3JtYWxQYXJhbWV0ZXJMaXN0KFBh
cmFtZXRlck5vZGUqIGxpc3QsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KSB7IHJldHVybiBuZXcg
KG1fZ2xvYmFsRGF0YSkgUGFyYW1ldGVyTm9kZShsaXN0LCBpZGVudCk7IH0KKyAgICBQYXJhbWV0
ZXJOb2RlKiBjcmVhdGVGb3JtYWxQYXJhbWV0ZXJMaXN0KGNvbnN0IElkZW50aWZpZXImIGlkZW50
KSB7IHJldHVybiBuZXcgKG1fdm0pIFBhcmFtZXRlck5vZGUoaWRlbnQpOyB9CisgICAgUGFyYW1l
dGVyTm9kZSogY3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdChQYXJhbWV0ZXJOb2RlKiBsaXN0LCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCkgeyByZXR1cm4gbmV3IChtX3ZtKSBQYXJhbWV0ZXJOb2Rl
KGxpc3QsIGlkZW50KTsgfQogCi0gICAgQ2FzZUNsYXVzZU5vZGUqIGNyZWF0ZUNsYXVzZShFeHBy
ZXNzaW9uTm9kZSogZXhwciwgSlNDOjpTb3VyY2VFbGVtZW50cyogc3RhdGVtZW50cykgeyByZXR1
cm4gbmV3IChtX2dsb2JhbERhdGEpIENhc2VDbGF1c2VOb2RlKGV4cHIsIHN0YXRlbWVudHMpOyB9
Ci0gICAgQ2xhdXNlTGlzdE5vZGUqIGNyZWF0ZUNsYXVzZUxpc3QoQ2FzZUNsYXVzZU5vZGUqIGNs
YXVzZSkgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIENsYXVzZUxpc3ROb2RlKGNsYXVzZSk7
IH0KLSAgICBDbGF1c2VMaXN0Tm9kZSogY3JlYXRlQ2xhdXNlTGlzdChDbGF1c2VMaXN0Tm9kZSog
dGFpbCwgQ2FzZUNsYXVzZU5vZGUqIGNsYXVzZSkgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEp
IENsYXVzZUxpc3ROb2RlKHRhaWwsIGNsYXVzZSk7IH0KKyAgICBDYXNlQ2xhdXNlTm9kZSogY3Jl
YXRlQ2xhdXNlKEV4cHJlc3Npb25Ob2RlKiBleHByLCBKU0M6OlNvdXJjZUVsZW1lbnRzKiBzdGF0
ZW1lbnRzKSB7IHJldHVybiBuZXcgKG1fdm0pIENhc2VDbGF1c2VOb2RlKGV4cHIsIHN0YXRlbWVu
dHMpOyB9CisgICAgQ2xhdXNlTGlzdE5vZGUqIGNyZWF0ZUNsYXVzZUxpc3QoQ2FzZUNsYXVzZU5v
ZGUqIGNsYXVzZSkgeyByZXR1cm4gbmV3IChtX3ZtKSBDbGF1c2VMaXN0Tm9kZShjbGF1c2UpOyB9
CisgICAgQ2xhdXNlTGlzdE5vZGUqIGNyZWF0ZUNsYXVzZUxpc3QoQ2xhdXNlTGlzdE5vZGUqIHRh
aWwsIENhc2VDbGF1c2VOb2RlKiBjbGF1c2UpIHsgcmV0dXJuIG5ldyAobV92bSkgQ2xhdXNlTGlz
dE5vZGUodGFpbCwgY2xhdXNlKTsgfQogCiAgICAgdm9pZCBzZXRVc2VzQXJndW1lbnRzKEZ1bmN0
aW9uQm9keU5vZGUqIG5vZGUpIHsgbm9kZS0+c2V0VXNlc0FyZ3VtZW50cygpOyB9CiAKICAgICBT
dGF0ZW1lbnROb2RlKiBjcmVhdGVGdW5jRGVjbFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBuYW1lLCBGdW5jdGlvbkJvZHlOb2RlKiBi
b2R5LCBQYXJhbWV0ZXJOb2RlKiBwYXJhbWV0ZXJzLCBpbnQgb3BlbkJyYWNlUG9zLCBpbnQgY2xv
c2VCcmFjZVBvcywgaW50IGJvZHlTdGFydExpbmUsIGludCBib2R5RW5kTGluZSkKICAgICB7Ci0g
ICAgICAgIEZ1bmNEZWNsTm9kZSogZGVjbCA9IG5ldyAobV9nbG9iYWxEYXRhKSBGdW5jRGVjbE5v
ZGUobG9jYXRpb24sICpuYW1lLCBib2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24ob3Bl
bkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5U3RhcnRMaW5lKSwgcGFyYW1ldGVycyk7Ci0g
ICAgICAgIGlmICgqbmFtZSA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50
cykKKyAgICAgICAgRnVuY0RlY2xOb2RlKiBkZWNsID0gbmV3IChtX3ZtKSBGdW5jRGVjbE5vZGUo
bG9jYXRpb24sICpuYW1lLCBib2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24ob3BlbkJy
YWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBib2R5U3RhcnRMaW5lKSwgcGFyYW1ldGVycyk7CisgICAg
ICAgIGlmICgqbmFtZSA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMpCiAgICAgICAg
ICAgICB1c2VzQXJndW1lbnRzKCk7CiAgICAgICAgIG1fc2NvcGUubV9mdW5jRGVjbGFyYXRpb25z
LT5kYXRhLmFwcGVuZChkZWNsLT5ib2R5KCkpOwogICAgICAgICBib2R5LT5zZXRMb2MoYm9keVN0
YXJ0TGluZSwgYm9keUVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CkBAIC0zMzIsNDIg
KzMzMiw0MiBAQCBwdWJsaWM6CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVCbG9ja1N0YXRl
bWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBKU0M6OlNvdXJjZUVsZW1lbnRz
KiBlbGVtZW50cywgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUpCiAgICAgewotICAgICAgICBC
bG9ja05vZGUqIGJsb2NrID0gbmV3IChtX2dsb2JhbERhdGEpIEJsb2NrTm9kZShsb2NhdGlvbiwg
ZWxlbWVudHMpOworICAgICAgICBCbG9ja05vZGUqIGJsb2NrID0gbmV3IChtX3ZtKSBCbG9ja05v
ZGUobG9jYXRpb24sIGVsZW1lbnRzKTsKICAgICAgICAgYmxvY2stPnNldExvYyhzdGFydExpbmUs
IGVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHJldHVybiBibG9jazsK
ICAgICB9CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVFeHByU3RhdGVtZW50KGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBpbnQgc3RhcnQs
IGludCBlbmQpCiAgICAgewotICAgICAgICBFeHByU3RhdGVtZW50Tm9kZSogcmVzdWx0ID0gbmV3
IChtX2dsb2JhbERhdGEpIEV4cHJTdGF0ZW1lbnROb2RlKGxvY2F0aW9uLCBleHByKTsKKyAgICAg
ICAgRXhwclN0YXRlbWVudE5vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgRXhwclN0YXRlbWVudE5v
ZGUobG9jYXRpb24sIGV4cHIpOwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydCwgZW5kLCBs
b2NhdGlvbi5jaGFyUG9zaXRpb24pOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAog
ICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUlmU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBjb25kaXRpb24sIFN0YXRlbWVudE5vZGUqIHRy
dWVCbG9jaywgaW50IHN0YXJ0LCBpbnQgZW5kKQogICAgIHsKLSAgICAgICAgSWZOb2RlKiByZXN1
bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgSWZOb2RlKGxvY2F0aW9uLCBjb25kaXRpb24sIHRydWVC
bG9jayk7CisgICAgICAgIElmTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBJZk5vZGUobG9jYXRp
b24sIGNvbmRpdGlvbiwgdHJ1ZUJsb2NrKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQs
IGVuZCwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVJZlN0YXRlbWVudChjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogY29uZGl0aW9uLCBTdGF0ZW1lbnRO
b2RlKiB0cnVlQmxvY2ssIFN0YXRlbWVudE5vZGUqIGZhbHNlQmxvY2ssIGludCBzdGFydCwgaW50
IGVuZCkKICAgICB7Ci0gICAgICAgIElmTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEp
IElmRWxzZU5vZGUobG9jYXRpb24sIGNvbmRpdGlvbiwgdHJ1ZUJsb2NrLCBmYWxzZUJsb2NrKTsK
KyAgICAgICAgSWZOb2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIElmRWxzZU5vZGUobG9jYXRpb24s
IGNvbmRpdGlvbiwgdHJ1ZUJsb2NrLCBmYWxzZUJsb2NrKTsKICAgICAgICAgcmVzdWx0LT5zZXRM
b2Moc3RhcnQsIGVuZCwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVGb3JMb29wKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBpbml0aWFsaXplciwgRXhw
cmVzc2lvbk5vZGUqIGNvbmRpdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGl0ZXIsIFN0YXRlbWVudE5v
ZGUqIHN0YXRlbWVudHMsIGludCBzdGFydCwgaW50IGVuZCkKICAgICB7Ci0gICAgICAgIEZvck5v
ZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBGb3JOb2RlKGxvY2F0aW9uLCBpbml0aWFs
aXplciwgY29uZGl0aW9uLCBpdGVyLCBzdGF0ZW1lbnRzKTsKKyAgICAgICAgRm9yTm9kZSogcmVz
dWx0ID0gbmV3IChtX3ZtKSBGb3JOb2RlKGxvY2F0aW9uLCBpbml0aWFsaXplciwgY29uZGl0aW9u
LCBpdGVyLCBzdGF0ZW1lbnRzKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQsIGVuZCwg
bG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAK
ICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVGb3JJbkxvb3AoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciogaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiBpbml0
aWFsaXplciwgRXhwcmVzc2lvbk5vZGUqIGl0ZXIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudHMs
IGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kLCBpbnQgaW5pdFN0YXJ0LCBpbnQgaW5pdEVu
ZCwgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUpCiAgICAgewotICAgICAgICBGb3JJbk5vZGUq
IHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBGb3JJbk5vZGUobV9nbG9iYWxEYXRhLCBsb2Nh
dGlvbiwgKmlkZW50LCBpbml0aWFsaXplciwgaXRlciwgc3RhdGVtZW50cywgaW5pdFN0YXJ0LCBp
bml0U3RhcnQgLSBzdGFydCwgaW5pdEVuZCAtIGluaXRTdGFydCk7CisgICAgICAgIEZvckluTm9k
ZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBGb3JJbk5vZGUobV92bSwgbG9jYXRpb24sICppZGVudCwg
aW5pdGlhbGl6ZXIsIGl0ZXIsIHN0YXRlbWVudHMsIGluaXRTdGFydCwgaW5pdFN0YXJ0IC0gc3Rh
cnQsIGluaXRFbmQgLSBpbml0U3RhcnQpOwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExp
bmUsIGVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHNldEV4Y2VwdGlv
bkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGRpdm90ICsgMSwgZW5kKTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKQEAgLTM3NSwyOCArMzc1LDI4IEBAIHB1YmxpYzoKIAogICAgIFN0YXRlbWVudE5v
ZGUqIGNyZWF0ZUZvckluTG9vcChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHBy
ZXNzaW9uTm9kZSogbGhzLCBFeHByZXNzaW9uTm9kZSogaXRlciwgU3RhdGVtZW50Tm9kZSogc3Rh
dGVtZW50cywgaW50IGVTdGFydCwgaW50IGVEaXZvdCwgaW50IGVFbmQsIGludCBzdGFydCwgaW50
IGVuZCkKICAgICB7Ci0gICAgICAgIEZvckluTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERh
dGEpIEZvckluTm9kZShsb2NhdGlvbiwgbGhzLCBpdGVyLCBzdGF0ZW1lbnRzKTsKKyAgICAgICAg
Rm9ySW5Ob2RlKiByZXN1bHQgPSBuZXcgKG1fdm0pIEZvckluTm9kZShsb2NhdGlvbiwgbGhzLCBp
dGVyLCBzdGF0ZW1lbnRzKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQsIGVuZCwgbG9j
YXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0
LCBlU3RhcnQsIGVEaXZvdCwgZUVuZCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQog
Ci0gICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlRW1wdHlTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbikgeyByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEVtcHR5U3RhdGVt
ZW50Tm9kZShsb2NhdGlvbik7IH0KKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVFbXB0eVN0YXRl
bWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uKSB7IHJldHVybiBuZXcgKG1fdm0p
IEVtcHR5U3RhdGVtZW50Tm9kZShsb2NhdGlvbik7IH0KIAogICAgIFN0YXRlbWVudE5vZGUqIGNy
ZWF0ZVZhclN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogZXhwciwgaW50IHN0YXJ0LCBpbnQgZW5kKQogICAgIHsKICAgICAgICAgU3RhdGVt
ZW50Tm9kZSogcmVzdWx0OwogICAgICAgICBpZiAoIWV4cHIpCi0gICAgICAgICAgICByZXN1bHQg
PSBuZXcgKG1fZ2xvYmFsRGF0YSkgRW1wdHlTdGF0ZW1lbnROb2RlKGxvY2F0aW9uKTsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IG5ldyAobV92bSkgRW1wdHlTdGF0ZW1lbnROb2RlKGxvY2F0aW9uKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIFZh
clN0YXRlbWVudE5vZGUobG9jYXRpb24sIGV4cHIpOworICAgICAgICAgICAgcmVzdWx0ID0gbmV3
IChtX3ZtKSBWYXJTdGF0ZW1lbnROb2RlKGxvY2F0aW9uLCBleHByKTsKICAgICAgICAgcmVzdWx0
LT5zZXRMb2Moc3RhcnQsIGVuZCwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVSZXR1cm5TdGF0
ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4
cHJlc3Npb24sIGludCBlU3RhcnQsIGludCBlRW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGlu
ZSkKICAgICB7Ci0gICAgICAgIFJldHVybk5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRh
KSBSZXR1cm5Ob2RlKGxvY2F0aW9uLCBleHByZXNzaW9uKTsKKyAgICAgICAgUmV0dXJuTm9kZSog
cmVzdWx0ID0gbmV3IChtX3ZtKSBSZXR1cm5Ob2RlKGxvY2F0aW9uLCBleHByZXNzaW9uKTsKICAg
ICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVFbmQsIGVFbmQpOwog
ICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNoYXJQ
b3NpdGlvbik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC00MDQsNyArNDA0LDcgQEAgcHVi
bGljOgogCiAgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlQnJlYWtTdGF0ZW1lbnQoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgaW50IGVTdGFydCwgaW50IGVFbmQsIGludCBzdGFydExp
bmUsIGludCBlbmRMaW5lKQogICAgIHsKLSAgICAgICAgQnJlYWtOb2RlKiByZXN1bHQgPSBuZXcg
KG1fZ2xvYmFsRGF0YSkgQnJlYWtOb2RlKG1fZ2xvYmFsRGF0YSwgbG9jYXRpb24pOworICAgICAg
ICBCcmVha05vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgQnJlYWtOb2RlKG1fdm0sIGxvY2F0aW9u
KTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVFbmQsIGVF
bmQpOwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9u
LmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC00MTIsNyArNDEyLDcg
QEAgcHVibGljOgogCiAgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlQnJlYWtTdGF0ZW1lbnQoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciogaWRlbnQsIGlu
dCBlU3RhcnQsIGludCBlRW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7Ci0g
ICAgICAgIEJyZWFrTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIEJyZWFrTm9kZShs
b2NhdGlvbiwgKmlkZW50KTsKKyAgICAgICAgQnJlYWtOb2RlKiByZXN1bHQgPSBuZXcgKG1fdm0p
IEJyZWFrTm9kZShsb2NhdGlvbiwgKmlkZW50KTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRp
b24ocmVzdWx0LCBlU3RhcnQsIGVFbmQsIGVFbmQpOwogICAgICAgICByZXN1bHQtPnNldExvYyhz
dGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CkBAIC00MjAsNyArNDIwLDcgQEAgcHVibGljOgogCiAgICAgU3RhdGVtZW50Tm9k
ZSogY3JlYXRlQ29udGludWVTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgaW50IGVTdGFydCwgaW50IGVFbmQsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lKQogICAg
IHsKLSAgICAgICAgQ29udGludWVOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQ29u
dGludWVOb2RlKG1fZ2xvYmFsRGF0YSwgbG9jYXRpb24pOworICAgICAgICBDb250aW51ZU5vZGUq
IHJlc3VsdCA9IG5ldyAobV92bSkgQ29udGludWVOb2RlKG1fdm0sIGxvY2F0aW9uKTsKICAgICAg
ICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVFbmQsIGVFbmQpOwogICAg
ICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3Np
dGlvbik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC00MjgsNyArNDI4LDcgQEAgcHVibGlj
OgogCiAgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlQ29udGludWVTdGF0ZW1lbnQoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciogaWRlbnQsIGludCBlU3Rh
cnQsIGludCBlRW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7Ci0gICAgICAg
IENvbnRpbnVlTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIENvbnRpbnVlTm9kZShs
b2NhdGlvbiwgKmlkZW50KTsKKyAgICAgICAgQ29udGludWVOb2RlKiByZXN1bHQgPSBuZXcgKG1f
dm0pIENvbnRpbnVlTm9kZShsb2NhdGlvbiwgKmlkZW50KTsKICAgICAgICAgc2V0RXhjZXB0aW9u
TG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVFbmQsIGVFbmQpOwogICAgICAgICByZXN1bHQtPnNl
dExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CkBAIC00MzYsNyArNDM2LDcgQEAgcHVibGljOgogCiAgICAgU3RhdGVt
ZW50Tm9kZSogY3JlYXRlVHJ5U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIFN0YXRlbWVudE5vZGUqIHRyeUJsb2NrLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgU3Rh
dGVtZW50Tm9kZSogY2F0Y2hCbG9jaywgU3RhdGVtZW50Tm9kZSogZmluYWxseUJsb2NrLCBpbnQg
c3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7Ci0gICAgICAgIFRyeU5vZGUqIHJlc3VsdCA9
IG5ldyAobV9nbG9iYWxEYXRhKSBUcnlOb2RlKGxvY2F0aW9uLCB0cnlCbG9jaywgKmlkZW50LCBj
YXRjaEJsb2NrLCBmaW5hbGx5QmxvY2spOworICAgICAgICBUcnlOb2RlKiByZXN1bHQgPSBuZXcg
KG1fdm0pIFRyeU5vZGUobG9jYXRpb24sIHRyeUJsb2NrLCAqaWRlbnQsIGNhdGNoQmxvY2ssIGZp
bmFsbHlCbG9jayk7CiAgICAgICAgIGlmIChjYXRjaEJsb2NrKQogICAgICAgICAgICAgdXNlc0Nh
dGNoKCk7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRp
b24uY2hhclBvc2l0aW9uKTsKQEAgLTQ0NSwyOSArNDQ1LDI5IEBAIHB1YmxpYzoKIAogICAgIFN0
YXRlbWVudE5vZGUqIGNyZWF0ZVN3aXRjaFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgQ2xhdXNlTGlzdE5vZGUqIGZpcnN0Q2xh
dXNlcywgQ2FzZUNsYXVzZU5vZGUqIGRlZmF1bHRDbGF1c2UsIENsYXVzZUxpc3ROb2RlKiBzZWNv
bmRDbGF1c2VzLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7Ci0gICAgICAgIENh
c2VCbG9ja05vZGUqIGNhc2VzID0gbmV3IChtX2dsb2JhbERhdGEpIENhc2VCbG9ja05vZGUoZmly
c3RDbGF1c2VzLCBkZWZhdWx0Q2xhdXNlLCBzZWNvbmRDbGF1c2VzKTsKLSAgICAgICAgU3dpdGNo
Tm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIFN3aXRjaE5vZGUobG9jYXRpb24sIGV4
cHIsIGNhc2VzKTsKKyAgICAgICAgQ2FzZUJsb2NrTm9kZSogY2FzZXMgPSBuZXcgKG1fdm0pIENh
c2VCbG9ja05vZGUoZmlyc3RDbGF1c2VzLCBkZWZhdWx0Q2xhdXNlLCBzZWNvbmRDbGF1c2VzKTsK
KyAgICAgICAgU3dpdGNoTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBTd2l0Y2hOb2RlKGxvY2F0
aW9uLCBleHByLCBjYXNlcyk7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5k
TGluZSwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVXaGlsZVN0YXRlbWVudChjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgU3RhdGVtZW50Tm9k
ZSogc3RhdGVtZW50LCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7Ci0gICAgICAg
IFdoaWxlTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIFdoaWxlTm9kZShsb2NhdGlv
biwgZXhwciwgc3RhdGVtZW50KTsKKyAgICAgICAgV2hpbGVOb2RlKiByZXN1bHQgPSBuZXcgKG1f
dm0pIFdoaWxlTm9kZShsb2NhdGlvbiwgZXhwciwgc3RhdGVtZW50KTsKICAgICAgICAgcmVzdWx0
LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jaGFyUG9zaXRpb24pOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZURv
V2hpbGVTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgU3RhdGVtZW50
Tm9kZSogc3RhdGVtZW50LCBFeHByZXNzaW9uTm9kZSogZXhwciwgaW50IHN0YXJ0TGluZSwgaW50
IGVuZExpbmUpCiAgICAgewotICAgICAgICBEb1doaWxlTm9kZSogcmVzdWx0ID0gbmV3IChtX2ds
b2JhbERhdGEpIERvV2hpbGVOb2RlKGxvY2F0aW9uLCBzdGF0ZW1lbnQsIGV4cHIpOworICAgICAg
ICBEb1doaWxlTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBEb1doaWxlTm9kZShsb2NhdGlvbiwg
c3RhdGVtZW50LCBleHByKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRM
aW5lLCBsb2NhdGlvbi5jaGFyUG9zaXRpb24pOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUxhYmVsU3RhdGVtZW50KGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBTdGF0ZW1lbnRO
b2RlKiBzdGF0ZW1lbnQsIGludCBzdGFydCwgaW50IGVuZCkKICAgICB7Ci0gICAgICAgIExhYmVs
Tm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIExhYmVsTm9kZShsb2NhdGlvbiwgKmlk
ZW50LCBzdGF0ZW1lbnQpOworICAgICAgICBMYWJlbE5vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkg
TGFiZWxOb2RlKGxvY2F0aW9uLCAqaWRlbnQsIHN0YXRlbWVudCk7CiAgICAgICAgIHNldEV4Y2Vw
dGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGVuZCwgZW5kKTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CkBAIC00NzUsMTQgKzQ3NSwxNCBAQCBwdWJsaWM6CiAgICAgU3RhdGVtZW50
Tm9kZSogY3JlYXRlV2l0aFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBFeHByZXNzaW9uTm9kZSogZXhwciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCBpbnQgc3Rh
cnQsIGludCBlbmQsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lKQogICAgIHsKICAgICAgICAg
dXNlc1dpdGgoKTsKLSAgICAgICAgV2l0aE5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRh
KSBXaXRoTm9kZShsb2NhdGlvbiwgZXhwciwgc3RhdGVtZW50LCBlbmQsIGVuZCAtIHN0YXJ0KTsK
KyAgICAgICAgV2l0aE5vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgV2l0aE5vZGUobG9jYXRpb24s
IGV4cHIsIHN0YXRlbWVudCwgZW5kLCBlbmQgLSBzdGFydCk7CiAgICAgICAgIHJlc3VsdC0+c2V0
TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9ICAgIAogICAgIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0
ZVRocm93U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Np
b25Ob2RlKiBleHByLCBpbnQgc3RhcnQsIGludCBlbmQsIGludCBzdGFydExpbmUsIGludCBlbmRM
aW5lKQogICAgIHsKLSAgICAgICAgVGhyb3dOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0
YSkgVGhyb3dOb2RlKGxvY2F0aW9uLCBleHByKTsKKyAgICAgICAgVGhyb3dOb2RlKiByZXN1bHQg
PSBuZXcgKG1fdm0pIFRocm93Tm9kZShsb2NhdGlvbiwgZXhwcik7CiAgICAgICAgIHJlc3VsdC0+
c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAg
ICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBzdGFydCwgZW5kLCBlbmQpOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwpAQCAtNDkwLDIxICs0OTAsMjEgQEAgcHVibGljOgogICAgIAogICAg
IFN0YXRlbWVudE5vZGUqIGNyZWF0ZURlYnVnZ2VyKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9j
YXRpb24sIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lKQogICAgIHsKLSAgICAgICAgRGVidWdn
ZXJTdGF0ZW1lbnROb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgRGVidWdnZXJTdGF0
ZW1lbnROb2RlKGxvY2F0aW9uKTsKKyAgICAgICAgRGVidWdnZXJTdGF0ZW1lbnROb2RlKiByZXN1
bHQgPSBuZXcgKG1fdm0pIERlYnVnZ2VyU3RhdGVtZW50Tm9kZShsb2NhdGlvbik7CiAgICAgICAg
IHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uY2hhclBvc2l0aW9u
KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgU3RhdGVtZW50Tm9k
ZSogY3JlYXRlQ29uc3RTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
Q29uc3REZWNsTm9kZSogZGVjbHMsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lKQogICAgIHsK
LSAgICAgICAgQ29uc3RTdGF0ZW1lbnROb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkg
Q29uc3RTdGF0ZW1lbnROb2RlKGxvY2F0aW9uLCBkZWNscyk7CisgICAgICAgIENvbnN0U3RhdGVt
ZW50Tm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBDb25zdFN0YXRlbWVudE5vZGUobG9jYXRpb24s
IGRlY2xzKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2Nh
dGlvbi5jaGFyUG9zaXRpb24pOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAg
IENvbnN0RGVjbE5vZGUqIGFwcGVuZENvbnN0RGVjbChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBDb25zdERlY2xOb2RlKiB0YWlsLCBjb25zdCBJZGVudGlmaWVyKiBuYW1lLCBFeHBy
ZXNzaW9uTm9kZSogaW5pdGlhbGl6ZXIpCiAgICAgewotICAgICAgICBDb25zdERlY2xOb2RlKiBy
ZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQ29uc3REZWNsTm9kZShsb2NhdGlvbiwgKm5hbWUs
IGluaXRpYWxpemVyKTsKKyAgICAgICAgQ29uc3REZWNsTm9kZSogcmVzdWx0ID0gbmV3IChtX3Zt
KSBDb25zdERlY2xOb2RlKGxvY2F0aW9uLCAqbmFtZSwgaW5pdGlhbGl6ZXIpOwogICAgICAgICBp
ZiAodGFpbCkKICAgICAgICAgICAgIHRhaWwtPm1fbmV4dCA9IHJlc3VsdDsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKQEAgLTUxNyw3ICs1MTcsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZFZh
cihjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgaW50IGF0dHJzKQogICAgIHsKLSAgICAgICAgaWYg
KG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICppZGVudCkKKyAgICAg
ICAgaWYgKG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqaWRlbnQpCiAgICAgICAg
ICAgICB1c2VzQXJndW1lbnRzKCk7CiAgICAgICAgIG1fc2NvcGUubV92YXJEZWNsYXJhdGlvbnMt
PmRhdGEuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGlkZW50LCBhdHRycykpOwogICAgIH0KQEAgLTUz
MCw3ICs1MzAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDb21tYU5vZGUq
PihsaXN0KS0+YXBwZW5kKGluaXQpOwogICAgICAgICAgICAgcmV0dXJuIGxpc3Q7CiAgICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBDb21tYU5vZGUobG9jYXRpb24s
IGxpc3QsIGluaXQpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBDb21tYU5vZGUobG9jYXRp
b24sIGxpc3QsIGluaXQpOwogICAgIH0KIAogICAgIGludCBldmFsQ291bnQoKSBjb25zdCB7IHJl
dHVybiBtX2V2YWxDb3VudDsgfQpAQCAtNjE4LDkgKzYxOCw5IEBAIHB1YmxpYzoKIAogcHJpdmF0
ZToKICAgICBzdHJ1Y3QgU2NvcGUgewotICAgICAgICBTY29wZShKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEpCi0gICAgICAgICAgICA6IG1fdmFyRGVjbGFyYXRpb25zKG5ldyAoZ2xvYmFsRGF0YSkg
UGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4pCi0gICAgICAgICAg
ICAsIG1fZnVuY0RlY2xhcmF0aW9ucyhuZXcgKGdsb2JhbERhdGEpIFBhcnNlckFyZW5hRGF0YTxE
ZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjaz4pCisgICAgICAgIFNjb3BlKFZNKiB2bSkK
KyAgICAgICAgICAgIDogbV92YXJEZWNsYXJhdGlvbnMobmV3ICh2bSkgUGFyc2VyQXJlbmFEYXRh
PERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4pCisgICAgICAgICAgICAsIG1fZnVuY0RlY2xh
cmF0aW9ucyhuZXcgKHZtKSBQYXJzZXJBcmVuYURhdGE8RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0
aW9uU3RhY2s+KQogICAgICAgICAgICAgLCBtX2ZlYXR1cmVzKDApCiAgICAgICAgICAgICAsIG1f
bnVtQ29uc3RhbnRzKDApCiAgICAgICAgIHsKQEAgLTY0OCwxMCArNjQ4LDEwIEBAIHByaXZhdGU6
CiAgICAgfQogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVOdW1iZXIoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgZG91YmxlIGQpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3ICht
X2dsb2JhbERhdGEpIE51bWJlck5vZGUobG9jYXRpb24sIGQpOworICAgICAgICByZXR1cm4gbmV3
IChtX3ZtKSBOdW1iZXJOb2RlKGxvY2F0aW9uLCBkKTsKICAgICB9CiAgICAgCi0gICAgSlNHbG9i
YWxEYXRhKiBtX2dsb2JhbERhdGE7CisgICAgVk0qIG1fdm07CiAgICAgU291cmNlQ29kZSogbV9z
b3VyY2VDb2RlOwogICAgIFNjb3BlIG1fc2NvcGU7CiAgICAgVmVjdG9yPEJpbmFyeU9wZXJhbmQs
IDEwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9iaW5hcnlPcGVyYW5kU3RhY2s7CkBAIC02NjUs
MjYgKzY2NSwyNiBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZVR5cGVPZk5vCiB7
CiAgICAgaWYgKGV4cHItPmlzUmVzb2x2ZU5vZGUoKSkgewogICAgICAgICBSZXNvbHZlTm9kZSog
cmVzb2x2ZSA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4oZXhwcik7Ci0gICAgICAgIHJldHVy
biBuZXcgKG1fZ2xvYmFsRGF0YSkgVHlwZU9mUmVzb2x2ZU5vZGUobG9jYXRpb24sIHJlc29sdmUt
PmlkZW50aWZpZXIoKSk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIFR5cGVPZlJlc29sdmVO
b2RlKGxvY2F0aW9uLCByZXNvbHZlLT5pZGVudGlmaWVyKCkpOwogICAgIH0KLSAgICByZXR1cm4g
bmV3IChtX2dsb2JhbERhdGEpIFR5cGVPZlZhbHVlTm9kZShsb2NhdGlvbiwgZXhwcik7CisgICAg
cmV0dXJuIG5ldyAobV92bSkgVHlwZU9mVmFsdWVOb2RlKGxvY2F0aW9uLCBleHByKTsKIH0KIAog
RXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VEZWxldGVOb2RlKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBpbnQgc3RhcnQsIGludCBk
aXZvdCwgaW50IGVuZCkKIHsKICAgICBpZiAoIWV4cHItPmlzTG9jYXRpb24oKSkKLSAgICAgICAg
cmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBEZWxldGVWYWx1ZU5vZGUobG9jYXRpb24sIGV4cHIp
OworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBEZWxldGVWYWx1ZU5vZGUobG9jYXRpb24sIGV4
cHIpOwogICAgIGlmIChleHByLT5pc1Jlc29sdmVOb2RlKCkpIHsKICAgICAgICAgUmVzb2x2ZU5v
ZGUqIHJlc29sdmUgPSBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KGV4cHIpOwotICAgICAgICBy
ZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIERlbGV0ZVJlc29sdmVOb2RlKGxvY2F0aW9uLCByZXNv
bHZlLT5pZGVudGlmaWVyKCksIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7Cisg
ICAgICAgIHJldHVybiBuZXcgKG1fdm0pIERlbGV0ZVJlc29sdmVOb2RlKGxvY2F0aW9uLCByZXNv
bHZlLT5pZGVudGlmaWVyKCksIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CiAg
ICAgfQogICAgIGlmIChleHByLT5pc0JyYWNrZXRBY2Nlc3Nvck5vZGUoKSkgewogICAgICAgICBC
cmFja2V0QWNjZXNzb3JOb2RlKiBicmFja2V0ID0gc3RhdGljX2Nhc3Q8QnJhY2tldEFjY2Vzc29y
Tm9kZSo+KGV4cHIpOwotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIERlbGV0ZUJy
YWNrZXROb2RlKGxvY2F0aW9uLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgp
LCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOworICAgICAgICByZXR1cm4gbmV3
IChtX3ZtKSBEZWxldGVCcmFja2V0Tm9kZShsb2NhdGlvbiwgYnJhY2tldC0+YmFzZSgpLCBicmFj
a2V0LT5zdWJzY3JpcHQoKSwgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKICAg
ICB9CiAgICAgQVNTRVJUKGV4cHItPmlzRG90QWNjZXNzb3JOb2RlKCkpOwogICAgIERvdEFjY2Vz
c29yTm9kZSogZG90ID0gc3RhdGljX2Nhc3Q8RG90QWNjZXNzb3JOb2RlKj4oZXhwcik7Ci0gICAg
cmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBEZWxldGVEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJh
c2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZv
dCk7CisgICAgcmV0dXJuIG5ldyAobV92bSkgRGVsZXRlRG90Tm9kZShsb2NhdGlvbiwgZG90LT5i
YXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2
b3QpOwogfQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZU5lZ2F0ZU5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIG4pCkBAIC02OTUs
MTQgKzY5NSwxNCBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZU5lZ2F0ZU5vCiAg
ICAgICAgIHJldHVybiBudW1iZXJOb2RlOwogICAgIH0KIAotICAgIHJldHVybiBuZXcgKG1fZ2xv
YmFsRGF0YSkgTmVnYXRlTm9kZShsb2NhdGlvbiwgbik7CisgICAgcmV0dXJuIG5ldyAobV92bSkg
TmVnYXRlTm9kZShsb2NhdGlvbiwgbik7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVy
OjptYWtlQml0d2lzZU5vdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIpCiB7CiAgICAgaWYgKGV4cHItPmlzTnVtYmVyKCkpCiAgICAgICAg
IHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIH50b0ludDMyKHN0YXRpY19jYXN0PE51bWJl
ck5vZGUqPihleHByKS0+dmFsdWUoKSkpOwotICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkg
Qml0d2lzZU5vdE5vZGUobG9jYXRpb24sIGV4cHIpOworICAgIHJldHVybiBuZXcgKG1fdm0pIEJp
dHdpc2VOb3ROb2RlKGxvY2F0aW9uLCBleHByKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1
aWxkZXI6Om1ha2VNdWx0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHBy
ZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fz
c2lnbm1lbnRzKQpAQCAtNzE0LDEyICs3MTQsMTIgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxk
ZXI6Om1ha2VNdWx0Tm9kZQogICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyKGxvY2F0aW9uLCBz
dGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgpICogc3RhdGljX2Nhc3Q8TnVt
YmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUoKSk7CiAKICAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkg
JiYgc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSA9PSAxKQotICAgICAg
ICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFVuYXJ5UGx1c05vZGUobG9jYXRpb24sIGV4cHIy
KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgVW5hcnlQbHVzTm9kZShsb2NhdGlvbiwgZXhw
cjIpOwogCiAgICAgaWYgKGV4cHIyLT5pc051bWJlcigpICYmIHN0YXRpY19jYXN0PE51bWJlck5v
ZGUqPihleHByMiktPnZhbHVlKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxE
YXRhKSBVbmFyeVBsdXNOb2RlKGxvY2F0aW9uLCBleHByMSk7CisgICAgICAgIHJldHVybiBuZXcg
KG1fdm0pIFVuYXJ5UGx1c05vZGUobG9jYXRpb24sIGV4cHIxKTsKIAotICAgIHJldHVybiBuZXcg
KG1fZ2xvYmFsRGF0YSkgTXVsdE5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNB
c3NpZ25tZW50cyk7CisgICAgcmV0dXJuIG5ldyAobV92bSkgTXVsdE5vZGUobG9jYXRpb24sIGV4
cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBB
U1RCdWlsZGVyOjptYWtlRGl2Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhh
c0Fzc2lnbm1lbnRzKQpAQCAtNzI5LDcgKzcyOSw3IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWls
ZGVyOjptYWtlRGl2Tm9kZSgKIAogICAgIGlmIChleHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+
aXNOdW1iZXIoKSkKICAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlcihsb2NhdGlvbiwgc3RhdGlj
X2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSAvIHN0YXRpY19jYXN0PE51bWJlck5v
ZGUqPihleHByMiktPnZhbHVlKCkpOwotICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgRGl2
Tm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICBy
ZXR1cm4gbmV3IChtX3ZtKSBEaXZOb2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFz
QXNzaWdubWVudHMpOwogfQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZU1vZE5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIx
LCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKQEAgLTcz
OSwxNCArNzM5LDE0IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlTW9kTm9kZSgK
ICAgICAKICAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIGZtb2Qoc3RhdGljX2Nhc3Q8TnVt
YmVyTm9kZSo+KGV4cHIxKS0+dmFsdWUoKSwgc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIy
KS0+dmFsdWUoKSkpOwotICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgTW9kTm9kZShsb2Nh
dGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICByZXR1cm4gbmV3
IChtX3ZtKSBNb2ROb2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVu
dHMpOwogfQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUFkZE5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNz
aW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKIHsKICAgICBpZiAoZXhw
cjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybiBjcmVh
dGVOdW1iZXIobG9jYXRpb24sIHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVl
KCkgKyBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKTsKLSAgICByZXR1
cm4gbmV3IChtX2dsb2JhbERhdGEpIEFkZE5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmln
aHRIYXNBc3NpZ25tZW50cyk7CisgICAgcmV0dXJuIG5ldyAobV92bSkgQWRkTm9kZShsb2NhdGlv
biwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhwcmVzc2lvbk5v
ZGUqIEFTVEJ1aWxkZXI6Om1ha2VTdWJOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJp
Z2h0SGFzQXNzaWdubWVudHMpCkBAIC03NTYsNzkgKzc1Niw3OSBAQCBFeHByZXNzaW9uTm9kZSog
QVNUQnVpbGRlcjo6bWFrZVN1Yk5vZGUoCiAKICAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYg
ZXhwcjItPmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24s
IHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkgLSBzdGF0aWNfY2FzdDxO
dW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKTsKLSAgICByZXR1cm4gbmV3IChtX2dsb2JhbERh
dGEpIFN1Yk5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7
CisgICAgcmV0dXJuIG5ldyAobV92bSkgU3ViTm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCBy
aWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1h
a2VMZWZ0U2hpZnROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Np
b25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdu
bWVudHMpCiB7CiAgICAgaWYgKGV4cHIxLT5pc051bWJlcigpICYmIGV4cHIyLT5pc051bWJlcigp
KQogICAgICAgICByZXR1cm4gY3JlYXRlTnVtYmVyKGxvY2F0aW9uLCB0b0ludDMyKHN0YXRpY19j
YXN0PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkpIDw8ICh0b1VJbnQzMihzdGF0aWNfY2Fz
dDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKSAmIDB4MWYpKTsKLSAgICByZXR1cm4gbmV3
IChtX2dsb2JhbERhdGEpIExlZnRTaGlmdE5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmln
aHRIYXNBc3NpZ25tZW50cyk7CisgICAgcmV0dXJuIG5ldyAobV92bSkgTGVmdFNoaWZ0Tm9kZShs
b2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhwcmVz
c2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VSaWdodFNoaWZ0Tm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBl
eHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQogewogICAgIGlmIChleHByMS0+aXNOdW1i
ZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkKICAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlcihs
b2NhdGlvbiwgdG9JbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjEpLT52YWx1ZSgp
KSA+PiAodG9VSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+dmFsdWUoKSkg
JiAweDFmKSk7Ci0gICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBSaWdodFNoaWZ0Tm9kZShs
b2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICByZXR1cm4g
bmV3IChtX3ZtKSBSaWdodFNoaWZ0Tm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhh
c0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VVUmln
aHRTaGlmdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5v
ZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50
cykKIHsKICAgICBpZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXIobG9jYXRpb24sIHRvVUludDMyKHN0YXRpY19jYXN0
PE51bWJlck5vZGUqPihleHByMSktPnZhbHVlKCkpID4+ICh0b1VJbnQzMihzdGF0aWNfY2FzdDxO
dW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpKSAmIDB4MWYpKTsKLSAgICByZXR1cm4gbmV3ICht
X2dsb2JhbERhdGEpIFVuc2lnbmVkUmlnaHRTaGlmdE5vZGUobG9jYXRpb24sIGV4cHIxLCBleHBy
MiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgcmV0dXJuIG5ldyAobV92bSkgVW5zaWduZWRS
aWdodFNoaWZ0Tm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRz
KTsKIH0KIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VCaXRPck5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNz
aW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKIHsKICAgICBpZiAoZXhw
cjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybiBjcmVh
dGVOdW1iZXIobG9jYXRpb24sIHRvSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIx
KS0+dmFsdWUoKSkgfCB0b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByMiktPnZh
bHVlKCkpKTsKLSAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEJpdE9yTm9kZShsb2NhdGlv
biwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICByZXR1cm4gbmV3ICht
X3ZtKSBCaXRPck5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50
cyk7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQml0QW5kTm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJl
c3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQogewogICAgIGlmIChl
eHByMS0+aXNOdW1iZXIoKSAmJiBleHByMi0+aXNOdW1iZXIoKSkKICAgICAgICAgcmV0dXJuIGNy
ZWF0ZU51bWJlcihsb2NhdGlvbiwgdG9JbnQzMihzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhw
cjEpLT52YWx1ZSgpKSAmIHRvSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIyKS0+
dmFsdWUoKSkpOwotICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQml0QW5kTm9kZShsb2Nh
dGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICByZXR1cm4gbmV3
IChtX3ZtKSBCaXRBbmROb2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdu
bWVudHMpOwogfQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUJpdFhPck5vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBF
eHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKIHsKICAgICBp
ZiAoZXhwcjEtPmlzTnVtYmVyKCkgJiYgZXhwcjItPmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVy
biBjcmVhdGVOdW1iZXIobG9jYXRpb24sIHRvSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+
KGV4cHIxKS0+dmFsdWUoKSkgXiB0b0ludDMyKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHBy
MiktPnZhbHVlKCkpKTsKLSAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEJpdFhPck5vZGUo
bG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAgcmV0dXJu
IG5ldyAobV92bSkgQml0WE9yTm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fz
c2lnbm1lbnRzKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlv
bkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2Rl
KiBmdW5jLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBpbnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVu
ZCkKIHsKICAgICBpZiAoIWZ1bmMtPmlzTG9jYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIG5ldyAo
bV9nbG9iYWxEYXRhKSBGdW5jdGlvbkNhbGxWYWx1ZU5vZGUobG9jYXRpb24sIGZ1bmMsIGFyZ3Ms
IGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CisgICAgICAgIHJldHVybiBuZXcg
KG1fdm0pIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZShsb2NhdGlvbiwgZnVuYywgYXJncywgZGl2b3Qs
IGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKICAgICBpZiAoZnVuYy0+aXNSZXNvbHZlTm9k
ZSgpKSB7CiAgICAgICAgIFJlc29sdmVOb2RlKiByZXNvbHZlID0gc3RhdGljX2Nhc3Q8UmVzb2x2
ZU5vZGUqPihmdW5jKTsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciA9IHJl
c29sdmUtPmlkZW50aWZpZXIoKTsKLSAgICAgICAgaWYgKGlkZW50aWZpZXIgPT0gbV9nbG9iYWxE
YXRhLT5wcm9wZXJ0eU5hbWVzLT5ldmFsKSB7CisgICAgICAgIGlmIChpZGVudGlmaWVyID09IG1f
dm0tPnByb3BlcnR5TmFtZXMtPmV2YWwpIHsKICAgICAgICAgICAgIHVzZXNFdmFsKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEV2YWxGdW5jdGlvbkNhbGxOb2RlKGxv
Y2F0aW9uLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOworICAgICAg
ICAgICAgcmV0dXJuIG5ldyAobV92bSkgRXZhbEZ1bmN0aW9uQ2FsbE5vZGUobG9jYXRpb24sIGFy
Z3MsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CiAgICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZShsb2Nh
dGlvbiwgaWRlbnRpZmllciwgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90
KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGUobG9j
YXRpb24sIGlkZW50aWZpZXIsIGFyZ3MsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZv
dCk7CiAgICAgfQogICAgIGlmIChmdW5jLT5pc0JyYWNrZXRBY2Nlc3Nvck5vZGUoKSkgewogICAg
ICAgICBCcmFja2V0QWNjZXNzb3JOb2RlKiBicmFja2V0ID0gc3RhdGljX2Nhc3Q8QnJhY2tldEFj
Y2Vzc29yTm9kZSo+KGZ1bmMpOwotICAgICAgICBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZSogbm9k
ZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZShsb2NhdGlvbiwg
YnJhY2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwgYXJncywgZGl2b3QsIGRpdm90
IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKKyAgICAgICAgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUq
IG5vZGUgPSBuZXcgKG1fdm0pIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlKGxvY2F0aW9uLCBicmFj
a2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBz
dGFydCwgZW5kIC0gZGl2b3QpOwogICAgICAgICBub2RlLT5zZXRTdWJleHByZXNzaW9uSW5mbyhi
cmFja2V0LT5kaXZvdCgpLCBicmFja2V0LT5lbmRPZmZzZXQoKSk7CiAgICAgICAgIHJldHVybiBu
b2RlOwogICAgIH0KICAgICBBU1NFUlQoZnVuYy0+aXNEb3RBY2Nlc3Nvck5vZGUoKSk7CiAgICAg
RG90QWNjZXNzb3JOb2RlKiBkb3QgPSBzdGF0aWNfY2FzdDxEb3RBY2Nlc3Nvck5vZGUqPihmdW5j
KTsKICAgICBGdW5jdGlvbkNhbGxEb3ROb2RlKiBub2RlOwotICAgIGlmIChkb3QtPmlkZW50aWZp
ZXIoKSA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmNhbGwpCi0gICAgICAgIG5vZGUg
PSBuZXcgKG1fZ2xvYmFsRGF0YSkgQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGRv
dC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQs
IGVuZCAtIGRpdm90KTsKLSAgICBlbHNlIGlmIChkb3QtPmlkZW50aWZpZXIoKSA9PSBtX2dsb2Jh
bERhdGEtPnByb3BlcnR5TmFtZXMtPmFwcGx5KQotICAgICAgICBub2RlID0gbmV3IChtX2dsb2Jh
bERhdGEpIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRv
dC0+aWRlbnRpZmllcigpLCBhcmdzLCBkaXZvdCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3Qp
OworICAgIGlmIChkb3QtPmlkZW50aWZpZXIoKSA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5jYWxs
KQorICAgICAgICBub2RlID0gbmV3IChtX3ZtKSBDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZShsb2Nh
dGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBhcmdzLCBkaXZvdCwgZGl2b3Qg
LSBzdGFydCwgZW5kIC0gZGl2b3QpOworICAgIGVsc2UgaWYgKGRvdC0+aWRlbnRpZmllcigpID09
IG1fdm0tPnByb3BlcnR5TmFtZXMtPmFwcGx5KQorICAgICAgICBub2RlID0gbmV3IChtX3ZtKSBB
cHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50
aWZpZXIoKSwgYXJncywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKICAgICBl
bHNlCi0gICAgICAgIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgRnVuY3Rpb25DYWxsRG90Tm9k
ZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBhcmdzLCBkaXZvdCwg
ZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOworICAgICAgICBub2RlID0gbmV3IChtX3ZtKSBG
dW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVy
KCksIGFyZ3MsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CiAgICAgbm9kZS0+
c2V0U3ViZXhwcmVzc2lvbkluZm8oZG90LT5kaXZvdCgpLCBkb3QtPmVuZE9mZnNldCgpKTsKICAg
ICByZXR1cm4gbm9kZTsKIH0KQEAgLTgzNywxMCArODM3LDEwIEBAIEV4cHJlc3Npb25Ob2RlKiBB
U1RCdWlsZGVyOjptYWtlQmluYXJ5Tm8KIHsKICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgY2Fz
ZSBPUjoKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBMb2dpY2FsT3BOb2RlKGxv
Y2F0aW9uLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgT3BMb2dpY2FsT3IpOworICAgICAgICByZXR1
cm4gbmV3IChtX3ZtKSBMb2dpY2FsT3BOb2RlKGxvY2F0aW9uLCBsaHMuZmlyc3QsIHJocy5maXJz
dCwgT3BMb2dpY2FsT3IpOwogCiAgICAgY2FzZSBBTkQ6Ci0gICAgICAgIHJldHVybiBuZXcgKG1f
Z2xvYmFsRGF0YSkgTG9naWNhbE9wTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3Qs
IE9wTG9naWNhbEFuZCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIExvZ2ljYWxPcE5vZGUo
bG9jYXRpb24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCBPcExvZ2ljYWxBbmQpOwogCiAgICAgY2Fz
ZSBCSVRPUjoKICAgICAgICAgcmV0dXJuIG1ha2VCaXRPck5vZGUobG9jYXRpb24sIGxocy5maXJz
dCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwpAQCAtODUyLDM3ICs4NTIs
MzcgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VCaW5hcnlObwogICAgICAgICBy
ZXR1cm4gbWFrZUJpdEFuZE5vZGUobG9jYXRpb24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMu
c2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwogCiAgICAgY2FzZSBFUUVROgotICAgICAgICByZXR1cm4g
bmV3IChtX2dsb2JhbERhdGEpIEVxdWFsTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmly
c3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0p
IEVxdWFsTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFz
QXNzaWdubWVudCk7CiAKICAgICBjYXNlIE5FOgotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2Jh
bERhdGEpIE5vdEVxdWFsTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5z
ZWNvbmQuaGFzQXNzaWdubWVudCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIE5vdEVxdWFs
Tm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdu
bWVudCk7CiAKICAgICBjYXNlIFNUUkVROgotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERh
dGEpIFN0cmljdEVxdWFsTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5z
ZWNvbmQuaGFzQXNzaWdubWVudCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIFN0cmljdEVx
dWFsTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNz
aWdubWVudCk7CiAKICAgICBjYXNlIFNUUk5FUToKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9i
YWxEYXRhKSBOb3RTdHJpY3RFcXVhbE5vZGUobG9jYXRpb24sIGxocy5maXJzdCwgcmhzLmZpcnN0
LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBO
b3RTdHJpY3RFcXVhbE5vZGUobG9jYXRpb24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vj
b25kLmhhc0Fzc2lnbm1lbnQpOwogCiAgICAgY2FzZSBMVDoKLSAgICAgICAgcmV0dXJuIG5ldyAo
bV9nbG9iYWxEYXRhKSBMZXNzTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJo
cy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fdm0pIExlc3NO
b2RlKGxvY2F0aW9uLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25t
ZW50KTsKIAogICAgIGNhc2UgR1Q6Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkg
R3JlYXRlck5vZGUobG9jYXRpb24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhh
c0Fzc2lnbm1lbnQpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBHcmVhdGVyTm9kZShsb2Nh
dGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CiAK
ICAgICBjYXNlIExFOgotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIExlc3NFcU5v
ZGUobG9jYXRpb24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1l
bnQpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBMZXNzRXFOb2RlKGxvY2F0aW9uLCBsaHMu
Zmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKIAogICAgIGNhc2Ug
R0U6Ci0gICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgR3JlYXRlckVxTm9kZShsb2Nh
dGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7Cisg
ICAgICAgIHJldHVybiBuZXcgKG1fdm0pIEdyZWF0ZXJFcU5vZGUobG9jYXRpb24sIGxocy5maXJz
dCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwogCiAgICAgY2FzZSBJTlNU
QU5DRU9GOiB7Ci0gICAgICAgIEluc3RhbmNlT2ZOb2RlKiBub2RlID0gbmV3IChtX2dsb2JhbERh
dGEpIEluc3RhbmNlT2ZOb2RlKGxvY2F0aW9uLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNl
Y29uZC5oYXNBc3NpZ25tZW50KTsKKyAgICAgICAgSW5zdGFuY2VPZk5vZGUqIG5vZGUgPSBuZXcg
KG1fdm0pIEluc3RhbmNlT2ZOb2RlKGxvY2F0aW9uLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhz
LnNlY29uZC5oYXNBc3NpZ25tZW50KTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9k
ZSwgbGhzLnNlY29uZC5zdGFydCwgcmhzLnNlY29uZC5zdGFydCwgcmhzLnNlY29uZC5lbmQpOwog
ICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKICAgICBjYXNlIElOVE9LRU46IHsKLSAgICAg
ICAgSW5Ob2RlKiBub2RlID0gbmV3IChtX2dsb2JhbERhdGEpIEluTm9kZShsb2NhdGlvbiwgbGhz
LmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CisgICAgICAgIElu
Tm9kZSogbm9kZSA9IG5ldyAobV92bSkgSW5Ob2RlKGxvY2F0aW9uLCBsaHMuZmlyc3QsIHJocy5m
aXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9j
YXRpb24obm9kZSwgbGhzLnNlY29uZC5zdGFydCwgcmhzLnNlY29uZC5zdGFydCwgcmhzLnNlY29u
ZC5lbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CkBAIC05MTgsMjQgKzkxOCwyNCBA
QCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUJpbmFyeU5vCiBFeHByZXNzaW9uTm9k
ZSogQVNUQnVpbGRlcjo6bWFrZUFzc2lnbk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgRXhwcmVzc2lvbk5vZGUqIGxvYywgT3BlcmF0b3Igb3AsIEV4cHJlc3Npb25Ob2RlKiBl
eHByLCBib29sIGxvY0hhc0Fzc2lnbm1lbnRzLCBib29sIGV4cHJIYXNBc3NpZ25tZW50cywgaW50
IHN0YXJ0LCBpbnQgZGl2b3QsIGludCBlbmQpCiB7CiAgICAgaWYgKCFsb2MtPmlzTG9jYXRpb24o
KSkKLSAgICAgICAgcmV0dXJuIG5ldyAobV9nbG9iYWxEYXRhKSBBc3NpZ25FcnJvck5vZGUobG9j
YXRpb24sIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CisgICAgICAgIHJldHVy
biBuZXcgKG1fdm0pIEFzc2lnbkVycm9yTm9kZShsb2NhdGlvbiwgZGl2b3QsIGRpdm90IC0gc3Rh
cnQsIGVuZCAtIGRpdm90KTsKIAogICAgIGlmIChsb2MtPmlzUmVzb2x2ZU5vZGUoKSkgewogICAg
ICAgICBSZXNvbHZlTm9kZSogcmVzb2x2ZSA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4obG9j
KTsKICAgICAgICAgaWYgKG9wID09IE9wRXF1YWwpIHsKICAgICAgICAgICAgIGlmIChleHByLT5p
c0Z1bmNFeHByTm9kZSgpKQogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEZ1bmNFeHByTm9k
ZSo+KGV4cHIpLT5ib2R5KCktPnNldEluZmVycmVkTmFtZShyZXNvbHZlLT5pZGVudGlmaWVyKCkp
OwotICAgICAgICAgICAgQXNzaWduUmVzb2x2ZU5vZGUqIG5vZGUgPSBuZXcgKG1fZ2xvYmFsRGF0
YSkgQXNzaWduUmVzb2x2ZU5vZGUobG9jYXRpb24sIHJlc29sdmUtPmlkZW50aWZpZXIoKSwgZXhw
cik7CisgICAgICAgICAgICBBc3NpZ25SZXNvbHZlTm9kZSogbm9kZSA9IG5ldyAobV92bSkgQXNz
aWduUmVzb2x2ZU5vZGUobG9jYXRpb24sIHJlc29sdmUtPmlkZW50aWZpZXIoKSwgZXhwcik7CiAg
ICAgICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCk7
CiAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gbmV3
IChtX2dsb2JhbERhdGEpIFJlYWRNb2RpZnlSZXNvbHZlTm9kZShsb2NhdGlvbiwgcmVzb2x2ZS0+
aWRlbnRpZmllcigpLCBvcCwgZXhwciwgZXhwckhhc0Fzc2lnbm1lbnRzLCBkaXZvdCwgZGl2b3Qg
LSBzdGFydCwgZW5kIC0gZGl2b3QpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBSZWFkTW9k
aWZ5UmVzb2x2ZU5vZGUobG9jYXRpb24sIHJlc29sdmUtPmlkZW50aWZpZXIoKSwgb3AsIGV4cHIs
IGV4cHJIYXNBc3NpZ25tZW50cywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsK
ICAgICB9CiAgICAgaWYgKGxvYy0+aXNCcmFja2V0QWNjZXNzb3JOb2RlKCkpIHsKICAgICAgICAg
QnJhY2tldEFjY2Vzc29yTm9kZSogYnJhY2tldCA9IHN0YXRpY19jYXN0PEJyYWNrZXRBY2Nlc3Nv
ck5vZGUqPihsb2MpOwogICAgICAgICBpZiAob3AgPT0gT3BFcXVhbCkKLSAgICAgICAgICAgIHJl
dHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgQXNzaWduQnJhY2tldE5vZGUobG9jYXRpb24sIGJyYWNr
ZXQtPmJhc2UoKSwgYnJhY2tldC0+c3Vic2NyaXB0KCksIGV4cHIsIGxvY0hhc0Fzc2lnbm1lbnRz
LCBleHBySGFzQXNzaWdubWVudHMsIGJyYWNrZXQtPmRpdm90KCksIGJyYWNrZXQtPmRpdm90KCkg
LSBzdGFydCwgZW5kIC0gYnJhY2tldC0+ZGl2b3QoKSk7Ci0gICAgICAgIFJlYWRNb2RpZnlCcmFj
a2V0Tm9kZSogbm9kZSA9IG5ldyAobV9nbG9iYWxEYXRhKSBSZWFkTW9kaWZ5QnJhY2tldE5vZGUo
bG9jYXRpb24sIGJyYWNrZXQtPmJhc2UoKSwgYnJhY2tldC0+c3Vic2NyaXB0KCksIG9wLCBleHBy
LCBsb2NIYXNBc3NpZ25tZW50cywgZXhwckhhc0Fzc2lnbm1lbnRzLCBkaXZvdCwgZGl2b3QgLSBz
dGFydCwgZW5kIC0gZGl2b3QpOworICAgICAgICAgICAgcmV0dXJuIG5ldyAobV92bSkgQXNzaWdu
QnJhY2tldE5vZGUobG9jYXRpb24sIGJyYWNrZXQtPmJhc2UoKSwgYnJhY2tldC0+c3Vic2NyaXB0
KCksIGV4cHIsIGxvY0hhc0Fzc2lnbm1lbnRzLCBleHBySGFzQXNzaWdubWVudHMsIGJyYWNrZXQt
PmRpdm90KCksIGJyYWNrZXQtPmRpdm90KCkgLSBzdGFydCwgZW5kIC0gYnJhY2tldC0+ZGl2b3Qo
KSk7CisgICAgICAgIFJlYWRNb2RpZnlCcmFja2V0Tm9kZSogbm9kZSA9IG5ldyAobV92bSkgUmVh
ZE1vZGlmeUJyYWNrZXROb2RlKGxvY2F0aW9uLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1
YnNjcmlwdCgpLCBvcCwgZXhwciwgbG9jSGFzQXNzaWdubWVudHMsIGV4cHJIYXNBc3NpZ25tZW50
cywgZGl2b3QsIGRpdm90IC0gc3RhcnQsIGVuZCAtIGRpdm90KTsKICAgICAgICAgbm9kZS0+c2V0
U3ViZXhwcmVzc2lvbkluZm8oYnJhY2tldC0+ZGl2b3QoKSwgYnJhY2tldC0+ZW5kT2Zmc2V0KCkp
OwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CkBAIC05NDQsMjIgKzk0NCwyMiBAQCBFeHBy
ZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUFzc2lnbk5vCiAgICAgaWYgKG9wID09IE9wRXF1
YWwpIHsKICAgICAgICAgaWYgKGV4cHItPmlzRnVuY0V4cHJOb2RlKCkpCiAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxGdW5jRXhwck5vZGUqPihleHByKS0+Ym9keSgpLT5zZXRJbmZlcnJlZE5hbWUo
ZG90LT5pZGVudGlmaWVyKCkpOwotICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIEFz
c2lnbkRvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgZXhw
ciwgZXhwckhhc0Fzc2lnbm1lbnRzLCBkb3QtPmRpdm90KCksIGRvdC0+ZGl2b3QoKSAtIHN0YXJ0
LCBlbmQgLSBkb3QtPmRpdm90KCkpOworICAgICAgICByZXR1cm4gbmV3IChtX3ZtKSBBc3NpZ25E
b3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGV4cHIsIGV4
cHJIYXNBc3NpZ25tZW50cywgZG90LT5kaXZvdCgpLCBkb3QtPmRpdm90KCkgLSBzdGFydCwgZW5k
IC0gZG90LT5kaXZvdCgpKTsKICAgICB9CiAKLSAgICBSZWFkTW9kaWZ5RG90Tm9kZSogbm9kZSA9
IG5ldyAobV9nbG9iYWxEYXRhKSBSZWFkTW9kaWZ5RG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNl
KCksIGRvdC0+aWRlbnRpZmllcigpLCBvcCwgZXhwciwgZXhwckhhc0Fzc2lnbm1lbnRzLCBkaXZv
dCwgZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOworICAgIFJlYWRNb2RpZnlEb3ROb2RlKiBu
b2RlID0gbmV3IChtX3ZtKSBSZWFkTW9kaWZ5RG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCks
IGRvdC0+aWRlbnRpZmllcigpLCBvcCwgZXhwciwgZXhwckhhc0Fzc2lnbm1lbnRzLCBkaXZvdCwg
ZGl2b3QgLSBzdGFydCwgZW5kIC0gZGl2b3QpOwogICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25J
bmZvKGRvdC0+ZGl2b3QoKSwgZG90LT5lbmRPZmZzZXQoKSk7CiAgICAgcmV0dXJuIG5vZGU7CiB9
CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlUHJlZml4Tm9kZShjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgT3BlcmF0b3Igb3As
IGludCBzdGFydCwgaW50IGRpdm90LCBpbnQgZW5kKQogewotICAgIHJldHVybiBuZXcgKG1fZ2xv
YmFsRGF0YSkgUHJlZml4Tm9kZShsb2NhdGlvbiwgZXhwciwgb3AsIGRpdm90LCBkaXZvdCAtIHN0
YXJ0LCBlbmQgLSBkaXZvdCk7CisgICAgcmV0dXJuIG5ldyAobV92bSkgUHJlZml4Tm9kZShsb2Nh
dGlvbiwgZXhwciwgb3AsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CiB9CiAK
IEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlUG9zdGZpeE5vZGUoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIE9wZXJhdG9yIG9wLCBp
bnQgc3RhcnQsIGludCBkaXZvdCwgaW50IGVuZCkKIHsKLSAgICByZXR1cm4gbmV3IChtX2dsb2Jh
bERhdGEpIFBvc3RmaXhOb2RlKGxvY2F0aW9uLCBleHByLCBvcCwgZGl2b3QsIGRpdm90IC0gc3Rh
cnQsIGVuZCAtIGRpdm90KTsKKyAgICByZXR1cm4gbmV3IChtX3ZtKSBQb3N0Zml4Tm9kZShsb2Nh
dGlvbiwgZXhwciwgb3AsIGRpdm90LCBkaXZvdCAtIHN0YXJ0LCBlbmQgLSBkaXZvdCk7CiB9CiAK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCShyZXZpc2lvbiAx
NDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsOCArNDYsOCBAQCB1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLUtleXdvcmRzOjpLZXl3b3JkcyhKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEpCi0gICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKK0tleXdvcmRzOjpLZXl3b3JkcyhW
TSogdm0pCisgICAgOiBtX3ZtKHZtKQogICAgICwgbV9rZXl3b3JkVGFibGUoSlNDOjptYWluVGFi
bGUpCiB7CiB9CkBAIC00ODksOSArNDg5LDkgQEAgc3RhdGljIGNvbnN0IExDaGFyIHNpbmdsZUNo
YXJhY3RlckVzY2FwZQogfTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1MZXhlcjxUPjo6TGV4
ZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorTGV4ZXI8VD46OkxleGVyKFZNKiB2bSkKICAg
ICA6IG1faXNSZXBhcnNpbmcoZmFsc2UpCi0gICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkK
KyAgICAsIG1fdm0odm0pCiB7CiB9CiAKQEAgLTc4OSw3ICs3ODksNyBAQCB0ZW1wbGF0ZSA8Ym9v
bCBzaG91bGRDcmVhdGVJZGVudGlmaWVyPiBBCiAgICAgaWYgKFVOTElLRUxZKChyZW1haW5pbmcg
PCBtYXhUb2tlbkxlbmd0aCkgJiYgIShsZXhlckZsYWdzICYgTGV4ZXJGbGFnc0lnbm9yZVJlc2Vy
dmVkV29yZHMpKSkgewogICAgICAgICBBU1NFUlQoc2hvdWxkQ3JlYXRlSWRlbnRpZmllcik7CiAg
ICAgICAgIGlmIChyZW1haW5pbmcgPCBtYXhUb2tlbkxlbmd0aCkgewotICAgICAgICAgICAgY29u
c3QgSGFzaEVudHJ5KiBlbnRyeSA9IG1fZ2xvYmFsRGF0YS0+a2V5d29yZHMtPmdldEtleXdvcmQo
KmlkZW50KTsKKyAgICAgICAgICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBtX3ZtLT5rZXl3
b3Jkcy0+Z2V0S2V5d29yZCgqaWRlbnQpOwogICAgICAgICAgICAgQVNTRVJUKChyZW1haW5pbmcg
PCBtYXhUb2tlbkxlbmd0aCkgfHwgIWVudHJ5KTsKICAgICAgICAgICAgIGlmICghZW50cnkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIElERU5UOwpAQCAtODQ5LDcgKzg0OSw3IEBAIHRlbXBsYXRl
IDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+IEEKICAgICBpZiAoVU5MSUtFTFkoKHJlbWFp
bmluZyA8IG1heFRva2VuTGVuZ3RoKSAmJiAhKGxleGVyRmxhZ3MgJiBMZXhlckZsYWdzSWdub3Jl
UmVzZXJ2ZWRXb3JkcykpKSB7CiAgICAgICAgIEFTU0VSVChzaG91bGRDcmVhdGVJZGVudGlmaWVy
KTsKICAgICAgICAgaWYgKHJlbWFpbmluZyA8IG1heFRva2VuTGVuZ3RoKSB7Ci0gICAgICAgICAg
ICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gbV9nbG9iYWxEYXRhLT5rZXl3b3Jkcy0+Z2V0S2V5
d29yZCgqaWRlbnQpOworICAgICAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IG1fdm0t
PmtleXdvcmRzLT5nZXRLZXl3b3JkKCppZGVudCk7CiAgICAgICAgICAgICBBU1NFUlQoKHJlbWFp
bmluZyA8IG1heFRva2VuTGVuZ3RoKSB8fCAhZW50cnkpOwogICAgICAgICAgICAgaWYgKCFlbnRy
eSkKICAgICAgICAgICAgICAgICByZXR1cm4gSURFTlQ7CkBAIC05MTYsNyArOTE2LDcgQEAgdGVt
cGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4gSgogICAgICAgICBBU1NFUlQoc2hv
dWxkQ3JlYXRlSWRlbnRpZmllcik7CiAgICAgICAgIC8vIEtleXdvcmRzIG11c3Qgbm90IGJlIHJl
Y29nbml6ZWQgaWYgdGhlcmUgd2FzIGFuIFx1WFhYWCBpbiB0aGUgaWRlbnRpZmllci4KICAgICAg
ICAgaWYgKHJlbWFpbmluZyA8IG1heFRva2VuTGVuZ3RoKSB7Ci0gICAgICAgICAgICBjb25zdCBI
YXNoRW50cnkqIGVudHJ5ID0gbV9nbG9iYWxEYXRhLT5rZXl3b3Jkcy0+Z2V0S2V5d29yZCgqaWRl
bnQpOworICAgICAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IG1fdm0tPmtleXdvcmRz
LT5nZXRLZXl3b3JkKCppZGVudCk7CiAgICAgICAgICAgICBBU1NFUlQoKHJlbWFpbmluZyA8IG1h
eFRva2VuTGVuZ3RoKSB8fCAhZW50cnkpOwogICAgICAgICAgICAgaWYgKCFlbnRyeSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gSURFTlQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL0xleGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9M
ZXhlci5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L0xleGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEyICszOSwxMiBAQCBjbGFzcyBLZXl3b3Jk
cyB7CiBwdWJsaWM6CiAgICAgYm9vbCBpc0tleXdvcmQoY29uc3QgSWRlbnRpZmllciYgaWRlbnQp
IGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9rZXl3b3JkVGFibGUuZW50cnkobV9nbG9i
YWxEYXRhLCBpZGVudCk7CisgICAgICAgIHJldHVybiBtX2tleXdvcmRUYWJsZS5lbnRyeShtX3Zt
LCBpZGVudCk7CiAgICAgfQogICAgIAogICAgIGNvbnN0IEhhc2hFbnRyeSogZ2V0S2V5d29yZChj
b25zdCBJZGVudGlmaWVyJiBpZGVudCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2tl
eXdvcmRUYWJsZS5lbnRyeShtX2dsb2JhbERhdGEsIGlkZW50KTsKKyAgICAgICAgcmV0dXJuIG1f
a2V5d29yZFRhYmxlLmVudHJ5KG1fdm0sIGlkZW50KTsKICAgICB9CiAgICAgCiAgICAgfktleXdv
cmRzKCkKQEAgLTUzLDExICs1MywxMSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogcHJpdmF0ZToK
LSAgICBmcmllbmQgY2xhc3MgSlNHbG9iYWxEYXRhOworICAgIGZyaWVuZCBjbGFzcyBWTTsKICAg
ICAKLSAgICBLZXl3b3JkcyhKU0dsb2JhbERhdGEqKTsKKyAgICBLZXl3b3JkcyhWTSopOwogICAg
IAotICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworICAgIFZNKiBtX3ZtOwogICAgIGNv
bnN0IEhhc2hUYWJsZSBtX2tleXdvcmRUYWJsZTsKIH07CiAKQEAgLTczLDcgKzczLDcgQEAgY2xh
c3MgTGV4ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCiBwdWJsaWM6Ci0gICAg
TGV4ZXIoSlNHbG9iYWxEYXRhKik7CisgICAgTGV4ZXIoVk0qKTsKICAgICB+TGV4ZXIoKTsKIAog
ICAgIC8vIENoYXJhY3RlciBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLgpAQCAtMTkwLDcgKzE5MCw3
IEBAIHByaXZhdGU6CiAKICAgICBJZGVudGlmaWVyQXJlbmEqIG1fYXJlbmE7CiAKLSAgICBKU0ds
b2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKKyAgICBWTSogbV92bTsKIH07CiAKIHRlbXBsYXRlIDw+
CkBAIC0yMzIsMjggKzIzMiwyOCBAQCBpbmxpbmUgVUNoYXIgTGV4ZXI8VD46OmNvbnZlcnRVbmlj
b2RlKGluCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRp
ZmllciogTGV4ZXI8VD46Om1ha2VJZGVudGlmaWVyKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBz
aXplX3QgbGVuZ3RoKQogewotICAgIHJldHVybiAmbV9hcmVuYS0+bWFrZUlkZW50aWZpZXIobV9n
bG9iYWxEYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIHJldHVybiAmbV9hcmVuYS0+bWFr
ZUlkZW50aWZpZXIobV92bSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CiBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXIqIExleGVyPFQ+OjptYWtl
SWRlbnRpZmllcihjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKIHsKLSAg
ICByZXR1cm4gJm1fYXJlbmEtPm1ha2VJZGVudGlmaWVyKG1fZ2xvYmFsRGF0YSwgY2hhcmFjdGVy
cywgbGVuZ3RoKTsKKyAgICByZXR1cm4gJm1fYXJlbmEtPm1ha2VJZGVudGlmaWVyKG1fdm0sIGNo
YXJhY3RlcnMsIGxlbmd0aCk7CiB9CiAKIHRlbXBsYXRlIDw+CiBBTFdBWVNfSU5MSU5FIGNvbnN0
IElkZW50aWZpZXIqIExleGVyPExDaGFyPjo6bWFrZVJpZ2h0U2l6ZWRJZGVudGlmaWVyKGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVQ2hhcikKIHsKLSAgICByZXR1cm4g
Jm1fYXJlbmEtPm1ha2VJZGVudGlmaWVyTENoYXJGcm9tVUNoYXIobV9nbG9iYWxEYXRhLCBjaGFy
YWN0ZXJzLCBsZW5ndGgpOworICAgIHJldHVybiAmbV9hcmVuYS0+bWFrZUlkZW50aWZpZXJMQ2hh
ckZyb21VQ2hhcihtX3ZtLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwogfQogCiB0ZW1wbGF0ZSA8Pgog
QUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyKiBMZXhlcjxVQ2hhcj46Om1ha2VSaWdodFNp
emVkSWRlbnRpZmllcihjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVUNo
YXIgb3JBbGxDaGFycykKIHsKICAgICBpZiAoIShvckFsbENoYXJzICYgfjB4ZmYpKQotICAgICAg
ICByZXR1cm4gJm1fYXJlbmEtPm1ha2VJZGVudGlmaWVyTENoYXJGcm9tVUNoYXIobV9nbG9iYWxE
YXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgICAgICByZXR1cm4gJm1fYXJlbmEtPm1ha2VJ
ZGVudGlmaWVyTENoYXJGcm9tVUNoYXIobV92bSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKIAotICAg
IHJldHVybiAmbV9hcmVuYS0+bWFrZUlkZW50aWZpZXIobV9nbG9iYWxEYXRhLCBjaGFyYWN0ZXJz
LCBsZW5ndGgpOworICAgIHJldHVybiAmbV9hcmVuYS0+bWFrZUlkZW50aWZpZXIobV92bSwgY2hh
cmFjdGVycywgbGVuZ3RoKTsKIH0KIAogdGVtcGxhdGUgPD4KQEAgLTI3MywxOSArMjczLDE5IEBA
IEFMV0FZU19JTkxJTkUgdm9pZCBMZXhlcjxVQ2hhcj46OnNldENvZGUKIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgogQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyKiBMZXhlcjxUPjo6bWFrZUlk
ZW50aWZpZXJMQ2hhckZyb21VQ2hhcihjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxl
bmd0aCkKIHsKLSAgICByZXR1cm4gJm1fYXJlbmEtPm1ha2VJZGVudGlmaWVyTENoYXJGcm9tVUNo
YXIobV9nbG9iYWxEYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIHJldHVybiAmbV9hcmVu
YS0+bWFrZUlkZW50aWZpZXJMQ2hhckZyb21VQ2hhcihtX3ZtLCBjaGFyYWN0ZXJzLCBsZW5ndGgp
OwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRp
ZmllciogTGV4ZXI8VD46Om1ha2VMQ2hhcklkZW50aWZpZXIoY29uc3QgTENoYXIqIGNoYXJhY3Rl
cnMsIHNpemVfdCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuICZtX2FyZW5hLT5tYWtlSWRlbnRpZmll
cihtX2dsb2JhbERhdGEsIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgcmV0dXJuICZtX2FyZW5h
LT5tYWtlSWRlbnRpZmllcihtX3ZtLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwogfQogCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciogTGV4ZXI8VD46
Om1ha2VMQ2hhcklkZW50aWZpZXIoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5n
dGgpCiB7Ci0gICAgcmV0dXJuICZtX2FyZW5hLT5tYWtlSWRlbnRpZmllckxDaGFyRnJvbVVDaGFy
KG1fZ2xvYmFsRGF0YSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICByZXR1cm4gJm1fYXJlbmEt
Pm1ha2VJZGVudGlmaWVyTENoYXJGcm9tVUNoYXIobV92bSwgY2hhcmFjdGVycywgbGVuZ3RoKTsK
IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDE5ICsyNywxOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotICAgIGlubGluZSB2
b2lkKiBQYXJzZXJBcmVuYUZyZWVhYmxlOjpvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgdm9pZCogUGFyc2VyQXJlbmFGcmVlYWJs
ZTo6b3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCBWTSogdm0pCiAgICAgewotICAgICAgICByZXR1
cm4gZ2xvYmFsRGF0YS0+cGFyc2VyQXJlbmEtPmFsbG9jYXRlRnJlZWFibGUoc2l6ZSk7CisgICAg
ICAgIHJldHVybiB2bS0+cGFyc2VyQXJlbmEtPmFsbG9jYXRlRnJlZWFibGUoc2l6ZSk7CiAgICAg
fQogCi0gICAgaW5saW5lIHZvaWQqIFBhcnNlckFyZW5hRGVsZXRhYmxlOjpvcGVyYXRvciBuZXco
c2l6ZV90IHNpemUsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKKyAgICBpbmxpbmUgdm9pZCog
UGFyc2VyQXJlbmFEZWxldGFibGU6Om9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSwgVk0qIHZtKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPnBhcnNlckFyZW5hLT5hbGxvY2F0ZURl
bGV0YWJsZShzaXplKTsKKyAgICAgICAgcmV0dXJuIHZtLT5wYXJzZXJBcmVuYS0+YWxsb2NhdGVE
ZWxldGFibGUoc2l6ZSk7CiAgICAgfQogCi0gICAgaW5saW5lIFBhcnNlckFyZW5hUmVmQ291bnRl
ZDo6UGFyc2VyQXJlbmFSZWZDb3VudGVkKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKKyAgICBp
bmxpbmUgUGFyc2VyQXJlbmFSZWZDb3VudGVkOjpQYXJzZXJBcmVuYVJlZkNvdW50ZWQoVk0qIHZt
KQogICAgIHsKLSAgICAgICAgZ2xvYmFsRGF0YS0+cGFyc2VyQXJlbmEtPmRlcmVmV2l0aEFyZW5h
KGFkb3B0UmVmKHRoaXMpKTsKKyAgICAgICAgdm0tPnBhcnNlckFyZW5hLT5kZXJlZldpdGhBcmVu
YShhZG9wdFJlZih0aGlzKSk7CiAgICAgfQogCiAgICAgaW5saW5lIE5vZGU6Ok5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikKQEAgLTE0MSwxNSArMTQxLDE1IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgUHJvcGVydHlOb2RlOjpQcm9wZXJ0
eU5vZGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgRXhwcmVzc2lvbk5v
ZGUqIGFzc2lnbiwgVHlwZSB0eXBlKQorICAgIGlubGluZSBQcm9wZXJ0eU5vZGU6OlByb3BlcnR5
Tm9kZShWTSosIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEV4cHJlc3Npb25Ob2RlKiBhc3NpZ24s
IFR5cGUgdHlwZSkKICAgICAgICAgOiBtX25hbWUobmFtZSkKICAgICAgICAgLCBtX2Fzc2lnbihh
c3NpZ24pCiAgICAgICAgICwgbV90eXBlKHR5cGUpCiAgICAgewogICAgIH0KIAotICAgIGlubGlu
ZSBQcm9wZXJ0eU5vZGU6OlByb3BlcnR5Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGRv
dWJsZSBuYW1lLCBFeHByZXNzaW9uTm9kZSogYXNzaWduLCBUeXBlIHR5cGUpCi0gICAgICAgIDog
bV9uYW1lKGdsb2JhbERhdGEtPnBhcnNlckFyZW5hLT5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVt
ZXJpY0lkZW50aWZpZXIoZ2xvYmFsRGF0YSwgbmFtZSkpCisgICAgaW5saW5lIFByb3BlcnR5Tm9k
ZTo6UHJvcGVydHlOb2RlKFZNKiB2bSwgZG91YmxlIG5hbWUsIEV4cHJlc3Npb25Ob2RlKiBhc3Np
Z24sIFR5cGUgdHlwZSkKKyAgICAgICAgOiBtX25hbWUodm0tPnBhcnNlckFyZW5hLT5pZGVudGlm
aWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIodm0sIG5hbWUpKQogICAgICAgICAsIG1f
YXNzaWduKGFzc2lnbikKICAgICAgICAgLCBtX3R5cGUodHlwZSkKICAgICB7CkBAIC02NjgsOSAr
NjY4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEFTU0VSVChzdGF0ZW1lbnQpOwogICAg
IH0KIAotICAgIGlubGluZSBDb250aW51ZU5vZGU6OkNvbnRpbnVlTm9kZShKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCisgICAgaW5saW5l
IENvbnRpbnVlTm9kZTo6Q29udGludWVOb2RlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbikKICAgICAgICAgOiBTdGF0ZW1lbnROb2RlKGxvY2F0aW9uKQotICAgICAgICAs
IG1faWRlbnQoZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIpCisgICAg
ICAgICwgbV9pZGVudCh2bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIpCiAgICAgewog
ICAgIH0KIApAQCAtNjgwLDkgKzY4MCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9
CiAgICAgCi0gICAgaW5saW5lIEJyZWFrTm9kZTo6QnJlYWtOb2RlKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikKKyAgICBpbmxpbmUgQnJl
YWtOb2RlOjpCcmVha05vZGUoVk0qIHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
KQogICAgICAgICA6IFN0YXRlbWVudE5vZGUobG9jYXRpb24pCi0gICAgICAgICwgbV9pZGVudChn
bG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcikKKyAgICAgICAgLCBtX2lk
ZW50KHZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcikKICAgICB7CiAgICAgfQogCkBA
IC04MTIsMTUgKzgxMiwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgfQogCi0gICAg
aW5saW5lIEZvckluTm9kZTo6Rm9ySW5Ob2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEV4
cHJlc3Npb25Ob2RlKiBpbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUqIHN0
YXRlbWVudCwgaW50IGRpdm90LCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQpCisgICAg
aW5saW5lIEZvckluTm9kZTo6Rm9ySW5Ob2RlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiBpbiwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgaW50IGRpdm90
LCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQpCiAgICAgICAgIDogU3RhdGVtZW50Tm9k
ZShsb2NhdGlvbikKICAgICAgICAgLCBtX2luaXQoMCkKLSAgICAgICAgLCBtX2xleHByKG5ldyAo
Z2xvYmFsRGF0YSkgUmVzb2x2ZU5vZGUobG9jYXRpb24sIGlkZW50LCBkaXZvdCAtIHN0YXJ0T2Zm
c2V0KSkKKyAgICAgICAgLCBtX2xleHByKG5ldyAodm0pIFJlc29sdmVOb2RlKGxvY2F0aW9uLCBp
ZGVudCwgZGl2b3QgLSBzdGFydE9mZnNldCkpCiAgICAgICAgICwgbV9leHByKGV4cHIpCiAgICAg
ICAgICwgbV9zdGF0ZW1lbnQoc3RhdGVtZW50KQogICAgIHsKICAgICAgICAgaWYgKGluKSB7Ci0g
ICAgICAgICAgICBBc3NpZ25SZXNvbHZlTm9kZSogbm9kZSA9IG5ldyAoZ2xvYmFsRGF0YSkgQXNz
aWduUmVzb2x2ZU5vZGUobG9jYXRpb24sIGlkZW50LCBpbik7CisgICAgICAgICAgICBBc3NpZ25S
ZXNvbHZlTm9kZSogbm9kZSA9IG5ldyAodm0pIEFzc2lnblJlc29sdmVOb2RlKGxvY2F0aW9uLCBp
ZGVudCwgaW4pOwogICAgICAgICAgICAgbm9kZS0+c2V0RXhjZXB0aW9uU291cmNlQ29kZShkaXZv
dCwgZGl2b3QgLSBzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gZGl2b3QpOwogICAgICAgICAgICAg
bV9pbml0ID0gbm9kZTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Ob2Rlcy5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTm9kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw5ICs3Niw5IEBAIFN0YXRlbWVu
dE5vZGUqIFNvdXJjZUVsZW1lbnRzOjpzaW5nbGVTdGEKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIFNjb3BlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1T
Y29wZU5vZGU6OlNjb3BlTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2Nh
dGlvbiwgYm9vbCBpblN0cmljdENvbnRleHQpCitTY29wZU5vZGU6OlNjb3BlTm9kZShWTSogdm0s
IGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBlbmRMb2NhdGlvbiwgYm9vbCBpblN0cmljdENvbnRleHQpCiAgICAgOiBTdGF0ZW1lbnRO
b2RlKGVuZExvY2F0aW9uKQotICAgICwgUGFyc2VyQXJlbmFSZWZDb3VudGVkKGdsb2JhbERhdGEp
CisgICAgLCBQYXJzZXJBcmVuYVJlZkNvdW50ZWQodm0pCiAgICAgLCBtX3N0YXJ0TGluZU51bWJl
cihzdGFydExvY2F0aW9uLmxpbmUpCiAgICAgLCBtX3N0YXJ0Q2hhclBvc2l0aW9uKHN0YXJ0TG9j
YXRpb24uY2hhclBvc2l0aW9uKQogICAgICwgbV9mZWF0dXJlcyhpblN0cmljdENvbnRleHQgPyBT
dHJpY3RNb2RlRmVhdHVyZSA6IE5vRmVhdHVyZXMpCkBAIC04Nyw5ICs4Nyw5IEBAIFNjb3BlTm9k
ZTo6U2NvcGVOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmEKIHsKIH0KIAotU2NvcGVOb2RlOjpTY29w
ZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0
YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZSwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFy
U3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRW
YXJpYWJsZXMsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKK1Njb3Bl
Tm9kZTo6U2NvcGVOb2RlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0
aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBG
dW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVz
LCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCiAgICAgOiBTdGF0ZW1l
bnROb2RlKGVuZExvY2F0aW9uKQotICAgICwgUGFyc2VyQXJlbmFSZWZDb3VudGVkKGdsb2JhbERh
dGEpCisgICAgLCBQYXJzZXJBcmVuYVJlZkNvdW50ZWQodm0pCiAgICAgLCBtX3N0YXJ0TGluZU51
bWJlcihzdGFydExvY2F0aW9uLmxpbmUpCiAgICAgLCBtX3N0YXJ0Q2hhclBvc2l0aW9uKHN0YXJ0
TG9jYXRpb24uY2hhclBvc2l0aW9uKQogICAgICwgbV9mZWF0dXJlcyhmZWF0dXJlcykKQEAgLTk3
LDcgKzk3LDcgQEAgU2NvcGVOb2RlOjpTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYQogICAg
ICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgICwgbV9zdGF0ZW1lbnRzKGNoaWxk
cmVuKQogewotICAgIG1fYXJlbmEuc3dhcCgqZ2xvYmFsRGF0YS0+cGFyc2VyQXJlbmEpOworICAg
IG1fYXJlbmEuc3dhcCgqdm0tPnBhcnNlckFyZW5hKTsKICAgICBpZiAodmFyU3RhY2spCiAgICAg
ICAgIG1fdmFyU3RhY2suc3dhcCgqdmFyU3RhY2spOwogICAgIGlmIChmdW5jU3RhY2spCkBAIC0x
MTIsMTQgKzExMiwxNCBAQCBTdGF0ZW1lbnROb2RlKiBTY29wZU5vZGU6OnNpbmdsZVN0YXRlbWVu
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9ncmFtTm9kZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1pbmxpbmUgUHJvZ3JhbU5vZGU6OlByb2dyYW1Ob2Rl
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExv
Y2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCBTb3VyY2VFbGVtZW50
cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNr
LCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291
cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCi0gICAgOiBTY29w
ZU5vZGUoZ2xvYmFsRGF0YSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNvdXJjZSwgY2hp
bGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBmZWF0dXJlcywg
bnVtQ29uc3RhbnRzKQoraW5saW5lIFByb2dyYW1Ob2RlOjpQcm9ncmFtTm9kZShWTSogdm0sIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBlbmRMb2NhdGlvbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3Rh
Y2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJp
YWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBp
bnQgbnVtQ29uc3RhbnRzKQorICAgIDogU2NvcGVOb2RlKHZtLCBzdGFydExvY2F0aW9uLCBlbmRM
b2NhdGlvbiwgc291cmNlLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRW
YXJpYWJsZXMsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpCiB7CiB9CiAKLVBhc3NSZWZQdHI8UHJv
Z3JhbU5vZGU+IFByb2dyYW1Ob2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgZW5kTG9jYXRpb24sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0
YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFy
aWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywg
aW50IG51bUNvbnN0YW50cykKK1Bhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IFByb2dyYW1Ob2RlOjpj
cmVhdGUoVk0qIHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwg
VmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJT
ZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0
dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKIHsKLSAgICBSZWZQdHI8UHJvZ3JhbU5v
ZGU+IG5vZGUgPSBuZXcgUHJvZ3JhbU5vZGUoZ2xvYmFsRGF0YSwgc3RhcnRMb2NhdGlvbiwgZW5k
TG9jYXRpb24sIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCAgY2FwdHVyZWRWYXJpYWJs
ZXMsIHNvdXJjZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7CisgICAgUmVmUHRyPFByb2dyYW1O
b2RlPiBub2RlID0gbmV3IFByb2dyYW1Ob2RlKHZtLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlv
biwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssICBjYXB0dXJlZFZhcmlhYmxlcywgc291
cmNlLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsKIAogICAgIEFTU0VSVChub2RlLT5tX2FyZW5h
Lmxhc3QoKSA9PSBub2RlKTsKICAgICBub2RlLT5tX2FyZW5hLnJlbW92ZUxhc3QoKTsKQEAgLTEz
MCwxNCArMTMwLDE0IEBAIFBhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IFByb2dyYW1Ob2RlOjpjcmUK
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEV2YWxOb2RlIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKLWlubGluZSBFdmFsTm9kZTo6RXZhbE5vZGUoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJl
biwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZp
ZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVG
ZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKLSAgICA6IFNjb3BlTm9kZShnbG9i
YWxEYXRhLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlLCBjaGlsZHJlbiwgdmFy
U3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIGZlYXR1cmVzLCBudW1Db25zdGFu
dHMpCitpbmxpbmUgRXZhbE5vZGU6OkV2YWxOb2RlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCBT
b3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFj
ayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMp
CisgICAgOiBTY29wZU5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzb3VyY2Us
IGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgZmVhdHVy
ZXMsIG51bUNvbnN0YW50cykKIHsKIH0KIAotUGFzc1JlZlB0cjxFdmFsTm9kZT4gRXZhbE5vZGU6
OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
c3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgU291cmNl
RWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1
bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQorUGFz
c1JlZlB0cjxFdmFsTm9kZT4gRXZhbE5vZGU6OmNyZWF0ZShWTSogdm0sIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlv
biwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9u
U3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3Rh
bnRzKQogewotICAgIFJlZlB0cjxFdmFsTm9kZT4gbm9kZSA9IG5ldyBFdmFsTm9kZShnbG9iYWxE
YXRhLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5j
U3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBzb3VyY2UsIGZlYXR1cmVzLCBudW1Db25zdGFudHMp
OworICAgIFJlZlB0cjxFdmFsTm9kZT4gbm9kZSA9IG5ldyBFdmFsTm9kZSh2bSwgc3RhcnRMb2Nh
dGlvbiwgZW5kTG9jYXRpb24sIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJl
ZFZhcmlhYmxlcywgc291cmNlLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsKIAogICAgIEFTU0VS
VChub2RlLT5tX2FyZW5hLmxhc3QoKSA9PSBub2RlKTsKICAgICBub2RlLT5tX2FyZW5hLnJlbW92
ZUxhc3QoKTsKQEAgLTE3MywxMyArMTczLDEzIEBAIEZ1bmN0aW9uUGFyYW1ldGVyczo6fkZ1bmN0
aW9uUGFyYW1ldGVycygKICAgICAgICAgaWRlbnRpZmllcnMoKVtpXS5+SWRlbnRpZmllcigpOwog
fQogCi1pbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgYm9vbCBpblN0cmljdENvbnRleHQpCi0g
ICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGlu
U3RyaWN0Q29udGV4dCkKK2lubGluZSBGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2Rl
KFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCBib29sIGluU3RyaWN0Q29udGV4dCkKKyAgICA6IFNj
b3BlTm9kZSh2bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGluU3RyaWN0Q29udGV4dCkK
IHsKIH0KIAotaW5saW5lIEZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24s
IGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIFNvdXJjZUVsZW1lbnRzKiBjaGls
ZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50
aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2Rl
LCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCi0gICAgOiBTY29wZU5v
ZGUoZ2xvYmFsRGF0YSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNvdXJjZUNvZGUsIGNo
aWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgZmVhdHVyZXMs
IG51bUNvbnN0YW50cykKK2lubGluZSBGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2Rl
KFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0
YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBj
YXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgQ29kZUZlYXR1
cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQorICAgIDogU2NvcGVOb2RlKHZtLCBzdGFy
dExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlQ29kZSwgY2hpbGRyZW4sIHZhclN0YWNrLCBm
dW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKQogewog
fQogCkBAIC0xOTcsMTQgKzE5NywxNCBAQCB2b2lkIEZ1bmN0aW9uQm9keU5vZGU6OmZpbmlzaFBh
cnNpbmcoUGFzCiAgICAgbV9mdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGUgPSBmdW5jdGlvbk5h
bWVJc0luU2NvcGVUb2dnbGU7CiB9CiAKLUZ1bmN0aW9uQm9keU5vZGUqIEZ1bmN0aW9uQm9keU5v
ZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgYm9v
bCBpblN0cmljdENvbnRleHQpCitGdW5jdGlvbkJvZHlOb2RlKiBGdW5jdGlvbkJvZHlOb2RlOjpj
cmVhdGUoVk0qIHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIGJvb2wgaW5TdHJpY3RDb250ZXh0KQogewot
ICAgIHJldHVybiBuZXcgRnVuY3Rpb25Cb2R5Tm9kZShnbG9iYWxEYXRhLCBzdGFydExvY2F0aW9u
LCBlbmRMb2NhdGlvbiwgaW5TdHJpY3RDb250ZXh0KTsKKyAgICByZXR1cm4gbmV3IEZ1bmN0aW9u
Qm9keU5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBpblN0cmljdENvbnRleHQp
OwogfQogCi1QYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IEZ1bmN0aW9uQm9keU5vZGU6OmNy
ZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3Rh
cnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgU291cmNlRWxl
bWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNT
dGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZUNvZGUsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKK1Bh
c3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gRnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKFZNKiB2
bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGVuZExvY2F0aW9uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2
YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJl
ZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgQ29kZUZlYXR1cmVzIGZl
YXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQogewotICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2Rl
PiBub2RlID0gbmV3IEZ1bmN0aW9uQm9keU5vZGUoZ2xvYmFsRGF0YSwgc3RhcnRMb2NhdGlvbiwg
ZW5kTG9jYXRpb24sIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlh
Ymxlcywgc291cmNlQ29kZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7CisgICAgUmVmUHRyPEZ1
bmN0aW9uQm9keU5vZGU+IG5vZGUgPSBuZXcgRnVuY3Rpb25Cb2R5Tm9kZSh2bSwgc3RhcnRMb2Nh
dGlvbiwgZW5kTG9jYXRpb24sIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJl
ZFZhcmlhYmxlcywgc291cmNlQ29kZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7CiAKICAgICBB
U1NFUlQobm9kZS0+bV9hcmVuYS5sYXN0KCkgPT0gbm9kZSk7CiAgICAgbm9kZS0+bV9hcmVuYS5y
ZW1vdmVMYXN0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZp
c2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGlj
OgogICAgICAgICAvLyBQYXJzZXJBcmVuYUZyZWVhYmxlIG9iamVjdHMgYXJlIGFyZSBmcmVlZCB3
aGVuIHRoZSBhcmVuYSBpcyBkZWxldGVkLgogICAgICAgICAvLyBEZXN0cnVjdG9ycyBhcmUgbm90
IGNhbGxlZC4gQ2xpZW50cyBtdXN0IG5vdCBjYWxsIGRlbGV0ZSBvbiBzdWNoIG9iamVjdHMuCi0g
ICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIEpTR2xvYmFsRGF0YSopOworICAgICAg
ICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCBWTSopOwogICAgIH07CiAKICAgICBjbGFzcyBQ
YXJzZXJBcmVuYURlbGV0YWJsZSB7CkBAIC0xMDMsNyArMTAzLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgLy8gUGFyc2VyQXJlbmFEZWxldGFibGUgb2JqZWN0cyBhcmUgZGVsZXRlZCB3
aGVuIHRoZSBhcmVuYSBpcyBkZWxldGVkLgogICAgICAgICAvLyBDbGllbnRzIG11c3Qgbm90IGNh
bGwgZGVsZXRlIGRpcmVjdGx5IG9uIHN1Y2ggb2JqZWN0cy4KLSAgICAgICAgdm9pZCogb3BlcmF0
b3IgbmV3KHNpemVfdCwgSlNHbG9iYWxEYXRhKik7CisgICAgICAgIHZvaWQqIG9wZXJhdG9yIG5l
dyhzaXplX3QsIFZNKik7CiAgICAgfTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgpAQCAt
MTEzLDcgKzExMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUGFyc2VyQXJlbmFS
ZWZDb3VudGVkIDogcHVibGljIFJlZkNvdW50ZWQ8UGFyc2VyQXJlbmFSZWZDb3VudGVkPiB7CiAg
ICAgcHJvdGVjdGVkOgotICAgICAgICBQYXJzZXJBcmVuYVJlZkNvdW50ZWQoSlNHbG9iYWxEYXRh
Kik7CisgICAgICAgIFBhcnNlckFyZW5hUmVmQ291bnRlZChWTSopOwogCiAgICAgcHVibGljOgog
ICAgICAgICB2aXJ0dWFsIH5QYXJzZXJBcmVuYVJlZkNvdW50ZWQoKQpAQCAtMzk1LDcgKzM5NSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBBcnJheU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgRWxlbWVudE5vZGUqKTsKICAgICAgICAgQXJyYXlOb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIGludCBlbGlzaW9uLCBFbGVtZW50Tm9kZSopOwogCi0gICAgICAgIEFyZ3VtZW50TGlz
dE5vZGUqIHRvQXJndW1lbnRMaXN0KEpTR2xvYmFsRGF0YSosIGludCwgaW50KSBjb25zdDsKKyAg
ICAgICAgQXJndW1lbnRMaXN0Tm9kZSogdG9Bcmd1bWVudExpc3QoVk0qLCBpbnQsIGludCkgY29u
c3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CkBAIC00MTEsOCArNDEx
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICBlbnVtIFR5cGUgeyBD
b25zdGFudCA9IDEsIEdldHRlciA9IDIsIFNldHRlciA9IDQgfTsKIAotICAgICAgICBQcm9wZXJ0
eU5vZGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSWRlbnRpZmllciYsIEV4cHJlc3Npb25Ob2RlKiwg
VHlwZSk7Ci0gICAgICAgIFByb3BlcnR5Tm9kZShKU0dsb2JhbERhdGEqLCBkb3VibGUsIEV4cHJl
c3Npb25Ob2RlKiwgVHlwZSk7CisgICAgICAgIFByb3BlcnR5Tm9kZShWTSosIGNvbnN0IElkZW50
aWZpZXImLCBFeHByZXNzaW9uTm9kZSosIFR5cGUpOworICAgICAgICBQcm9wZXJ0eU5vZGUoVk0q
LCBkb3VibGUsIEV4cHJlc3Npb25Ob2RlKiwgVHlwZSk7CiAKICAgICAgICAgY29uc3QgSWRlbnRp
ZmllciYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogICAgICAgICBUeXBlIHR5cGUo
KSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KQEAgLTExODMsNyArMTE4Myw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIGNsYXNzIEZvckluTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlLCBwdWJs
aWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKICAgICAgICAgRm9ySW5O
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiwgRXhwcmVzc2lvbk5v
ZGUqLCBTdGF0ZW1lbnROb2RlKik7Ci0gICAgICAgIEZvckluTm9kZShKU0dsb2JhbERhdGEqLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvbk5vZGUq
LCBFeHByZXNzaW9uTm9kZSosIFN0YXRlbWVudE5vZGUqLCBpbnQgZGl2b3QsIGludCBzdGFydE9m
ZnNldCwgaW50IGVuZE9mZnNldCk7CisgICAgICAgIEZvckluTm9kZShWTSosIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uTm9kZSosIEV4cHJlc3Np
b25Ob2RlKiwgU3RhdGVtZW50Tm9kZSosIGludCBkaXZvdCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQg
ZW5kT2Zmc2V0KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBlbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtMTE5Niw3ICsx
MTk2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBDb250aW51ZU5vZGUgOiBwdWJs
aWMgU3RhdGVtZW50Tm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIENvbnRpbnVlTm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mKTsKKyAgICAgICAgQ29udGludWVOb2RlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0
aW9uJik7CiAgICAgICAgIENvbnRpbnVlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25z
dCBJZGVudGlmaWVyJik7CiAgICAgICAgIAogICAgIHByaXZhdGU6CkBAIC0xMjA3LDcgKzEyMDcs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEJyZWFrTm9kZSA6IHB1YmxpYyBTdGF0
ZW1lbnROb2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoK
LSAgICAgICAgQnJlYWtOb2RlKEpTR2xvYmFsRGF0YSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYp
OworICAgICAgICBCcmVha05vZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mKTsKICAgICAg
ICAgQnJlYWtOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImKTsK
ICAgICAgICAgCiAgICAgcHJpdmF0ZToKQEAgLTEyOTUsOCArMTI5NSw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB0eXBlZGVmIERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjayBWYXJTdGFj
azsKICAgICAgICAgdHlwZWRlZiBEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjayBGdW5j
dGlvblN0YWNrOwogCi0gICAgICAgIFNjb3BlTm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgYm9vbCBpblN0
cmljdENvbnRleHQpOwotICAgICAgICBTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIGNvbnN0IFNv
dXJjZUNvZGUmLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElk
ZW50aWZpZXJTZXQmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOworICAgICAgICBT
Y29wZU5vZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGVuZCwgYm9vbCBpblN0cmljdENvbnRleHQpOworICAgICAgICBTY29wZU5vZGUo
Vk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGVuZCwgY29uc3QgU291cmNlQ29kZSYsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5j
dGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50
cyk7CiAKICAgICAgICAgdXNpbmcgUGFyc2VyQXJlbmFSZWZDb3VudGVkOjpvcGVyYXRvciBuZXc7
CiAKQEAgLTEzNjQsMTIgKzEzNjQsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgUHJv
Z3JhbU5vZGUgOiBwdWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzRnVuY3Rpb25Ob2RlID0gZmFsc2U7Ci0gICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFByb2dyYW1Ob2RlPiBjcmVhdGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIFNvdXJjZUVsZW1lbnRz
KiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJj
ZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOworICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxQcm9ncmFtTm9kZT4gY3JlYXRlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIFNvdXJjZUVsZW1lbnRzKiwgVmFy
U3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUm
LCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOwogCiAgICAgICAgIHN0YXRpYyBjb25z
dCBib29sIHNjb3BlSXNGdW5jdGlvbiA9IGZhbHNlOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAg
UHJvZ3JhbU5vZGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBG
dW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVh
dHVyZXMsIGludCBudW1Db25zdGFudHMpOworICAgICAgICBQcm9ncmFtTm9kZShWTSosIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCBTb3Vy
Y2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBj
b25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0
ZXJJRCogPSAwKTsKICAgICB9OwpAQCAtMTM3NywxMiArMTM3NywxMiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBjbGFzcyBFdmFsTm9kZSA6IHB1YmxpYyBTY29wZU5vZGUgewogICAgIHB1YmxpYzoK
ICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNGdW5jdGlvbk5vZGUgPSBmYWxzZTsKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8RXZhbE5vZGU+IGNyZWF0ZShKU0dsb2JhbERhdGEqLCBjb25z
dCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgU291
cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0Jiwg
Y29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV2YWxOb2RlPiBjcmVhdGUoVk0qLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgU291cmNlRWxlbWVu
dHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291
cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgc2NvcGVJc0Z1bmN0aW9uID0gZmFsc2U7CiAKICAgICBwcml2YXRlOgot
ICAgICAgICBFdmFsTm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0
YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFj
ayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENv
ZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CisgICAgICAgIEV2YWxOb2RlKFZNKiwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIFNv
dXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYs
IGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOwogCiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdp
c3RlcklEKiA9IDApOwogICAgIH07CkBAIC0xNDA5LDggKzE0MDksOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBjbGFzcyBGdW5jdGlvbkJvZHlOb2RlIDogcHVibGljIFNjb3BlTm9kZSB7CiAgICAg
cHVibGljOgogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0Z1bmN0aW9uTm9kZSA9IHRydWU7
Ci0gICAgICAgIHN0YXRpYyBGdW5jdGlvbkJvZHlOb2RlKiBjcmVhdGUoSlNHbG9iYWxEYXRhKiwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQs
IGJvb2wgaXNTdHJpY3RNb2RlKTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RnVuY3Rpb25C
b2R5Tm9kZT4gY3JlYXRlKEpTR2xvYmFsRGF0YSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3Rh
cnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNr
KiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29k
ZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgc3RhdGljIEZ1bmN0aW9uQm9k
eU5vZGUqIGNyZWF0ZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgZW5kLCBib29sIGlzU3RyaWN0TW9kZSk7CisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGNyZWF0ZShWTSosIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCBTb3VyY2VFbGVtZW50cyos
IFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VD
b2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAgICAgICBGdW5jdGlv
blBhcmFtZXRlcnMqIHBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMuZ2V0
KCk7IH0KICAgICAgICAgc2l6ZV90IHBhcmFtZXRlckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9w
YXJhbWV0ZXJzLT5zaXplKCk7IH0KQEAgLTE0MzMsOCArMTQzMyw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzY29wZUlzRnVuY3Rpb24gPSB0cnVlOwogCiAg
ICAgcHJpdmF0ZToKLSAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZShKU0dsb2JhbERhdGEqLCBjb25z
dCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgYm9v
bCBpblN0cmljdENvbnRleHQpOwotICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKEpTR2xvYmFsRGF0
YSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
ZW5kLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZp
ZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRz
KTsKKyAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
c3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCBib29sIGluU3RyaWN0Q29udGV4dCk7
CisgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0
YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFj
ayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENv
ZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgSWRlbnRpZmllciBtX2lk
ZW50OwogICAgICAgICBJZGVudGlmaWVyIG1faW5mZXJyZWROYW1lOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3
ICsyNiw3IEBACiAjaW5jbHVkZSAiQVNUQnVpbGRlci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5j
bHVkZSAiVk0uaCIKICNpbmNsdWRlICJMZXhlci5oIgogI2luY2x1ZGUgIk5vZGVJbmZvLmgiCiAj
aW5jbHVkZSAiU291cmNlUHJvdmlkZXIuaCIKQEAgLTYyLDggKzYyLDggQEAgdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKIG5hbWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBl
PgotUGFyc2VyPExleGVyVHlwZT46OlBhcnNlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBj
b25zdCBJZGVudGlmaWVyJiBuYW1lLCBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywgSlNQ
YXJzZXJNb2RlIHBhcnNlck1vZGUpCi0gICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKK1Bh
cnNlcjxMZXhlclR5cGU+OjpQYXJzZXIoVk0qIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywgY29uc3QgSWRlbnRpZmllciYgbmFtZSwg
SlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MsIEpTUGFyc2VyTW9kZSBwYXJzZXJNb2RlKQor
ICAgIDogbV92bSh2bSkKICAgICAsIG1fc291cmNlKCZzb3VyY2UpCiAgICAgLCBtX3N0YWNrKHd0
ZlRocmVhZERhdGEoKS5zdGFjaygpKQogICAgICwgbV9oYXNTdGFja092ZXJmbG93KGZhbHNlKQpA
QCAtNzgsMTEgKzc4LDExIEBAIFBhcnNlcjxMZXhlclR5cGU+OjpQYXJzZXIoSlNHbG9iYWxEYXRh
KiAKICAgICAsIG1fbGFzdElkZW50aWZpZXIoMCkKICAgICAsIG1fc291cmNlRWxlbWVudHMoMCkK
IHsKLSAgICBtX2xleGVyID0gYWRvcHRQdHIobmV3IExleGVyVHlwZShnbG9iYWxEYXRhKSk7Ci0g
ICAgbV9hcmVuYSA9IG1fZ2xvYmFsRGF0YS0+cGFyc2VyQXJlbmEuZ2V0KCk7CisgICAgbV9sZXhl
ciA9IGFkb3B0UHRyKG5ldyBMZXhlclR5cGUodm0pKTsKKyAgICBtX2FyZW5hID0gbV92bS0+cGFy
c2VyQXJlbmEuZ2V0KCk7CiAgICAgbV9sZXhlci0+c2V0Q29kZShzb3VyY2UsIG1fYXJlbmEpOwog
Ci0gICAgbV9mdW5jdGlvbkNhY2hlID0gZ2xvYmFsRGF0YS0+YWRkU291cmNlUHJvdmlkZXJDYWNo
ZShzb3VyY2UucHJvdmlkZXIoKSk7CisgICAgbV9mdW5jdGlvbkNhY2hlID0gdm0tPmFkZFNvdXJj
ZVByb3ZpZGVyQ2FjaGUoc291cmNlLnByb3ZpZGVyKCkpOwogICAgIFNjb3BlUmVmIHNjb3BlID0g
cHVzaFNjb3BlKCk7CiAgICAgaWYgKHBhcnNlck1vZGUgPT0gSlNQYXJzZUZ1bmN0aW9uQ29kZSkK
ICAgICAgICAgc2NvcGUtPnNldElzRnVuY3Rpb24oKTsKQEAgLTEwNyw3ICsxMDcsNyBAQCBTdHJp
bmcgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlSW5uZXIoKQogewogICAgIFN0cmluZyBwYXJzZUVy
cm9yID0gU3RyaW5nKCk7CiAgICAgCi0gICAgQVNUQnVpbGRlciBjb250ZXh0KGNvbnN0X2Nhc3Q8
SlNHbG9iYWxEYXRhKj4obV9nbG9iYWxEYXRhKSwgY29uc3RfY2FzdDxTb3VyY2VDb2RlKj4obV9z
b3VyY2UpKTsKKyAgICBBU1RCdWlsZGVyIGNvbnRleHQoY29uc3RfY2FzdDxWTSo+KG1fdm0pLCBj
b25zdF9jYXN0PFNvdXJjZUNvZGUqPihtX3NvdXJjZSkpOwogICAgIGlmIChtX2xleGVyLT5pc1Jl
cGFyc2luZygpKQogICAgICAgICBtX3N0YXRlbWVudERlcHRoLS07CiAgICAgU2NvcGVSZWYgc2Nv
cGUgPSBjdXJyZW50U2NvcGUoKTsKQEAgLTE2OCw3ICsxNjgsNyBAQCB0ZW1wbGF0ZSA8U291cmNl
RWxlbWVudHNNb2RlIG1vZGUsIGNsYXNzCiAgICAgICAgIGlmIChtb2RlID09IENoZWNrRm9yU3Ry
aWN0TW9kZSAmJiAhc2Vlbk5vbkRpcmVjdGl2ZSkgewogICAgICAgICAgICAgaWYgKGRpcmVjdGl2
ZSkgewogICAgICAgICAgICAgICAgIC8vICJ1c2Ugc3RyaWN0IiBtdXN0IGJlIHRoZSBleGFjdCBs
aXRlcmFsIHdpdGhvdXQgZXNjYXBlIHNlcXVlbmNlcyBvciBsaW5lIGNvbnRpbnVhdGlvbi4KLSAg
ICAgICAgICAgICAgICBpZiAoIWhhc1NldFN0cmljdCAmJiBkaXJlY3RpdmVMaXRlcmFsTGVuZ3Ro
ID09IGxlbmd0aE9mVXNlU3RyaWN0TGl0ZXJhbCAmJiBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFt
ZXMtPnVzZVN0cmljdElkZW50aWZpZXIgPT0gKmRpcmVjdGl2ZSkgeworICAgICAgICAgICAgICAg
IGlmICghaGFzU2V0U3RyaWN0ICYmIGRpcmVjdGl2ZUxpdGVyYWxMZW5ndGggPT0gbGVuZ3RoT2ZV
c2VTdHJpY3RMaXRlcmFsICYmIG1fdm0tPnByb3BlcnR5TmFtZXMtPnVzZVN0cmljdElkZW50aWZp
ZXIgPT0gKmRpcmVjdGl2ZSkgewogICAgICAgICAgICAgICAgICAgICBzZXRTdHJpY3RNb2RlKCk7
CiAgICAgICAgICAgICAgICAgICAgIGhhc1NldFN0cmljdCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgIGZhaWxJZkZhbHNlKGlzVmFsaWRTdHJpY3RNb2RlKCkpOwpAQCAtNjMzLDcgKzYzMyw3
IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICBBU1NFUlQo
bWF0Y2goVFJZKSk7CiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24o
KSk7CiAgICAgVHJlZVN0YXRlbWVudCB0cnlCbG9jayA9IDA7Ci0gICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsK
KyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxs
SWRlbnRpZmllcjsKICAgICBUcmVlU3RhdGVtZW50IGNhdGNoQmxvY2sgPSAwOwogICAgIFRyZWVT
dGF0ZW1lbnQgZmluYWxseUJsb2NrID0gMDsKICAgICBpbnQgZmlyc3RMaW5lID0gdG9rZW5MaW5l
KCk7CkBAIC04MDAsNyArODAwLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
RnVuY3RpbwogICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRM
b2NhdGlvbiwgdG9rZW5Mb2NhdGlvbigpLCBzdHJpY3RNb2RlKCkpOwogICAgIERlcHRoTWFuYWdl
ciBzdGF0ZW1lbnREZXB0aCgmbV9zdGF0ZW1lbnREZXB0aCk7CiAgICAgbV9zdGF0ZW1lbnREZXB0
aCA9IDA7Ci0gICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkZ1bmN0aW9uQm9keUJ1aWxkZXIgYm9k
eUJ1aWxkZXIoY29uc3RfY2FzdDxKU0dsb2JhbERhdGEqPihtX2dsb2JhbERhdGEpLCBtX2xleGVy
LmdldCgpKTsKKyAgICB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6RnVuY3Rpb25Cb2R5QnVpbGRlciBi
b2R5QnVpbGRlcihjb25zdF9jYXN0PFZNKj4obV92bSksIG1fbGV4ZXIuZ2V0KCkpOwogICAgIGZh
aWxJZkZhbHNlKHBhcnNlU291cmNlRWxlbWVudHM8Q2hlY2tGb3JTdHJpY3RNb2RlPihib2R5QnVp
bGRlcikpOwogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0
aW9uLCB0b2tlbkxvY2F0aW9uKCksIHN0cmljdE1vZGUoKSk7CiB9CkBAIC04NTUsOCArODU1LDgg
QEAgdGVtcGxhdGUgPEZ1bmN0aW9uUmVxdWlyZW1lbnRzIHJlcXVpcmVtZQogICAgIGJvZHkgPSBw
YXJzZUZ1bmN0aW9uQm9keShjb250ZXh0KTsKICAgICBmYWlsSWZGYWxzZShib2R5KTsKICAgICBp
ZiAoZnVuY3Rpb25TY29wZS0+c3RyaWN0TW9kZSgpICYmIG5hbWUpIHsKLSAgICAgICAgZmFpbElm
VHJ1ZVdpdGhOYW1lQW5kTWVzc2FnZShtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmFyZ3Vt
ZW50cyA9PSAqbmFtZSwgIkZ1bmN0aW9uIG5hbWUiLCBuYW1lLT5pbXBsKCksICJpcyBub3QgdmFs
aWQgaW4gc3RyaWN0IG1vZGUiKTsKLSAgICAgICAgZmFpbElmVHJ1ZVdpdGhOYW1lQW5kTWVzc2Fn
ZShtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKm5hbWUsICJGdW5jdGlvbiBu
YW1lIiwgbmFtZS0+aW1wbCgpLCAiaXMgbm90IHZhbGlkIGluIHN0cmljdCBtb2RlIik7CisgICAg
ICAgIGZhaWxJZlRydWVXaXRoTmFtZUFuZE1lc3NhZ2UobV92bS0+cHJvcGVydHlOYW1lcy0+YXJn
dW1lbnRzID09ICpuYW1lLCAiRnVuY3Rpb24gbmFtZSIsIG5hbWUtPmltcGwoKSwgImlzIG5vdCB2
YWxpZCBpbiBzdHJpY3QgbW9kZSIpOworICAgICAgICBmYWlsSWZUcnVlV2l0aE5hbWVBbmRNZXNz
YWdlKG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKm5hbWUsICJGdW5jdGlvbiBuYW1lIiwg
bmFtZS0+aW1wbCgpLCAiaXMgbm90IHZhbGlkIGluIHN0cmljdCBtb2RlIik7CiAgICAgfQogICAg
IGNsb3NlQnJhY2VQb3MgPSBtX3Rva2VuLm1fZGF0YS5pbnRWYWx1ZTsKICAgICAKQEAgLTExNDAs
OCArMTE0MCw4IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUcmVlQnVpbGRlcj4gVHJlZUV4cHIKICAg
ICAgICAgbV9hc3NpZ25tZW50Q291bnQrKzsKICAgICAgICAgbmV4dChUcmVlQnVpbGRlcjo6RG9u
dEJ1aWxkU3RyaW5ncyk7CiAgICAgICAgIGlmIChzdHJpY3RNb2RlKCkgJiYgbV9sYXN0SWRlbnRp
ZmllciAmJiBjb250ZXh0LmlzUmVzb2x2ZShsaHMpKSB7Ci0gICAgICAgICAgICBmYWlsSWZUcnVl
SWZTdHJpY3RXaXRoTWVzc2FnZShtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmV2YWwgPT0g
Km1fbGFzdElkZW50aWZpZXIsICInZXZhbCcgY2Fubm90IGJlIG1vZGlmaWVkIGluIHN0cmljdCBt
b2RlIik7Ci0gICAgICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3RXaXRoTWVzc2FnZShtX2dsb2Jh
bERhdGEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqbV9sYXN0SWRlbnRpZmllciwgIidh
cmd1bWVudHMnIGNhbm5vdCBiZSBtb2RpZmllZCBpbiBzdHJpY3QgbW9kZSIpOworICAgICAgICAg
ICAgZmFpbElmVHJ1ZUlmU3RyaWN0V2l0aE1lc3NhZ2UobV92bS0+cHJvcGVydHlOYW1lcy0+ZXZh
bCA9PSAqbV9sYXN0SWRlbnRpZmllciwgIidldmFsJyBjYW5ub3QgYmUgbW9kaWZpZWQgaW4gc3Ry
aWN0IG1vZGUiKTsKKyAgICAgICAgICAgIGZhaWxJZlRydWVJZlN0cmljdFdpdGhNZXNzYWdlKG1f
dm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqbV9sYXN0SWRlbnRpZmllciwgIidhcmd1
bWVudHMnIGNhbm5vdCBiZSBtb2RpZmllZCBpbiBzdHJpY3QgbW9kZSIpOwogICAgICAgICAgICAg
ZGVjbGFyZVdyaXRlKG1fbGFzdElkZW50aWZpZXIpOwogICAgICAgICAgICAgbV9sYXN0SWRlbnRp
ZmllciA9IDA7CiAgICAgICAgIH0KQEAgLTEyNTEsNyArMTI1MSw3IEBAIHRlbXBsYXRlIDxib29s
IGNvbXBsZXRlLCBjbGFzcyBUcmVlQnVpbGQKICAgICAgICAgd2FzSWRlbnQgPSB0cnVlOwogICAg
IGNhc2UgU1RSSU5HOiB7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tl
bi5tX2RhdGEuaWRlbnQ7Ci0gICAgICAgIGlmIChjb21wbGV0ZSB8fCAod2FzSWRlbnQgJiYgKCpp
ZGVudCA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmdldCB8fCAqaWRlbnQgPT0gbV9n
bG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5zZXQpKSkKKyAgICAgICAgaWYgKGNvbXBsZXRlIHx8
ICh3YXNJZGVudCAmJiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmdldCB8fCAqaWRl
bnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+c2V0KSkpCiAgICAgICAgICAgICBuZXh0RXhwZWN0
SWRlbnRpZmllcihMZXhlckZsYWdzSWdub3JlUmVzZXJ2ZWRXb3Jkcyk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIG5leHRFeHBlY3RJZGVudGlmaWVyKExleGVyRmxhZ3NJZ25vcmVSZXNlcnZl
ZFdvcmRzIHwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZEtleXdvcmRzKTsKQEAgLTEyNzAsOSArMTI3
MCw5IEBAIHRlbXBsYXRlIDxib29sIGNvbXBsZXRlLCBjbGFzcyBUcmVlQnVpbGQKICAgICAgICAg
aW50IGNsb3NlQnJhY2VQb3MgPSAwOwogICAgICAgICBpbnQgYm9keVN0YXJ0TGluZSA9IDA7CiAg
ICAgICAgIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlOwotICAgICAgICBpZiAoKmlkZW50ID09IG1f
Z2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+Z2V0KQorICAgICAgICBpZiAoKmlkZW50ID09IG1f
dm0tPnByb3BlcnR5TmFtZXMtPmdldCkKICAgICAgICAgICAgIHR5cGUgPSBQcm9wZXJ0eU5vZGU6
OkdldHRlcjsKLSAgICAgICAgZWxzZSBpZiAoKmlkZW50ID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVy
dHlOYW1lcy0+c2V0KQorICAgICAgICBlbHNlIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlO
YW1lcy0+c2V0KQogICAgICAgICAgICAgdHlwZSA9IFByb3BlcnR5Tm9kZTo6U2V0dGVyOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBmYWlsKCk7CkBAIC0xMjg5LDcgKzEyODksNyBAQCB0ZW1w
bGF0ZSA8Ym9vbCBjb21wbGV0ZSwgY2xhc3MgVHJlZUJ1aWxkCiAgICAgICAgIGZhaWxJZkZhbHNl
KChwYXJzZUZ1bmN0aW9uSW5mbzxGdW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBmYWxzZT4oY29udGV4
dCwgYWNjZXNzb3JOYW1lLCBwYXJhbWV0ZXJzLCBib2R5LCBvcGVuQnJhY2VQb3MsIGNsb3NlQnJh
Y2VQb3MsIGJvZHlTdGFydExpbmUpKSk7CiAgICAgICAgIGlmIChzdHJpbmdQcm9wZXJ0eU5hbWUp
CiAgICAgICAgICAgICByZXR1cm4gY29udGV4dC50ZW1wbGF0ZSBjcmVhdGVHZXR0ZXJPclNldHRl
clByb3BlcnR5PGNvbXBsZXRlPihsb2NhdGlvbiwgdHlwZSwgc3RyaW5nUHJvcGVydHlOYW1lLCBw
YXJhbWV0ZXJzLCBib2R5LCBvcGVuQnJhY2VQb3MsIGNsb3NlQnJhY2VQb3MsIGJvZHlTdGFydExp
bmUsIG1fbGFzdExpbmUpOwotICAgICAgICByZXR1cm4gY29udGV4dC50ZW1wbGF0ZSBjcmVhdGVH
ZXR0ZXJPclNldHRlclByb3BlcnR5PGNvbXBsZXRlPihjb25zdF9jYXN0PEpTR2xvYmFsRGF0YSo+
KG1fZ2xvYmFsRGF0YSksIGxvY2F0aW9uLCB0eXBlLCBudW1lcmljUHJvcGVydHlOYW1lLCBwYXJh
bWV0ZXJzLCBib2R5LCBvcGVuQnJhY2VQb3MsIGNsb3NlQnJhY2VQb3MsIGJvZHlTdGFydExpbmUs
IG1fbGFzdExpbmUpOworICAgICAgICByZXR1cm4gY29udGV4dC50ZW1wbGF0ZSBjcmVhdGVHZXR0
ZXJPclNldHRlclByb3BlcnR5PGNvbXBsZXRlPihjb25zdF9jYXN0PFZNKj4obV92bSksIGxvY2F0
aW9uLCB0eXBlLCBudW1lcmljUHJvcGVydHlOYW1lLCBwYXJhbWV0ZXJzLCBib2R5LCBvcGVuQnJh
Y2VQb3MsIGNsb3NlQnJhY2VQb3MsIGJvZHlTdGFydExpbmUsIG1fbGFzdExpbmUpOwogICAgIH0K
ICAgICBjYXNlIE5VTUJFUjogewogICAgICAgICBkb3VibGUgcHJvcGVydHlOYW1lID0gbV90b2tl
bi5tX2RhdGEuZG91YmxlVmFsdWU7CkBAIC0xMjk3LDcgKzEyOTcsNyBAQCB0ZW1wbGF0ZSA8Ym9v
bCBjb21wbGV0ZSwgY2xhc3MgVHJlZUJ1aWxkCiAgICAgICAgIGNvbnN1bWVPckZhaWwoQ09MT04p
OwogICAgICAgICBUcmVlRXhwcmVzc2lvbiBub2RlID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lv
bihjb250ZXh0KTsKICAgICAgICAgZmFpbElmRmFsc2Uobm9kZSk7Ci0gICAgICAgIHJldHVybiBj
b250ZXh0LnRlbXBsYXRlIGNyZWF0ZVByb3BlcnR5PGNvbXBsZXRlPihjb25zdF9jYXN0PEpTR2xv
YmFsRGF0YSo+KG1fZ2xvYmFsRGF0YSksIHByb3BlcnR5TmFtZSwgbm9kZSwgUHJvcGVydHlOb2Rl
OjpDb25zdGFudCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LnRlbXBsYXRlIGNyZWF0ZVByb3Bl
cnR5PGNvbXBsZXRlPihjb25zdF9jYXN0PFZNKj4obV92bSksIHByb3BlcnR5TmFtZSwgbm9kZSwg
UHJvcGVydHlOb2RlOjpDb25zdGFudCk7CiAgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAgIGZh
aWxJZkZhbHNlKG1fdG9rZW4ubV90eXBlICYgS2V5d29yZFRva2VuRmxhZyk7CkBAIC0xNDkwLDcg
KzE0OTAsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CiAgICAg
ICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwogICAgICAgICBu
ZXh0KCk7Ci0gICAgICAgIGN1cnJlbnRTY29wZSgpLT51c2VWYXJpYWJsZShpZGVudCwgbV9nbG9i
YWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICppZGVudCk7CisgICAgICAgIGN1cnJlbnRT
Y29wZSgpLT51c2VWYXJpYWJsZShpZGVudCwgbV92bS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAq
aWRlbnQpOwogICAgICAgICBtX2xhc3RJZGVudGlmaWVyID0gaWRlbnQ7CiAgICAgICAgIHJldHVy
biBjb250ZXh0LmNyZWF0ZVJlc29sdmUobG9jYXRpb24sIGlkZW50LCBzdGFydCk7CiAgICAgfQpA
QCAtMTU4NSw3ICsxNTg1LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhw
cmVzcwogICAgIH0KICAgICAKICAgICBpZiAobWF0Y2goRlVOQ1RJT04pKSB7Ci0gICAgICAgIGNv
bnN0IElkZW50aWZpZXIqIG5hbWUgPSAmbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5udWxs
SWRlbnRpZmllcjsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciogbmFtZSA9ICZtX3ZtLT5wcm9w
ZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKICAgICAgICAgVHJlZUZvcm1hbFBhcmFtZXRlckxp
c3QgcGFyYW1ldGVycyA9IDA7CiAgICAgICAgIFRyZWVGdW5jdGlvbkJvZHkgYm9keSA9IDA7CiAg
ICAgICAgIGludCBvcGVuQnJhY2VQb3MgPSAwOwpAQCAtMTY5Miw3ICsxNjkyLDcgQEAgdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgIGJvb2wgaXNFdmFsT3JBcmd1
bWVudHMgPSBmYWxzZTsKICAgICBpZiAoc3RyaWN0TW9kZSgpICYmICFtX3N5bnRheEFscmVhZHlW
YWxpZGF0ZWQpIHsKICAgICAgICAgaWYgKGNvbnRleHQuaXNSZXNvbHZlKGV4cHIpKQotICAgICAg
ICAgICAgaXNFdmFsT3JBcmd1bWVudHMgPSAqbV9sYXN0SWRlbnRpZmllciA9PSBtX2dsb2JhbERh
dGEtPnByb3BlcnR5TmFtZXMtPmV2YWwgfHwgKm1fbGFzdElkZW50aWZpZXIgPT0gbV9nbG9iYWxE
YXRhLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHM7CisgICAgICAgICAgICBpc0V2YWxPckFyZ3Vt
ZW50cyA9ICptX2xhc3RJZGVudGlmaWVyID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwgfHwg
Km1fbGFzdElkZW50aWZpZXIgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzOwogICAg
IH0KICAgICBmYWlsSWZUcnVlSWZTdHJpY3RXaXRoTmFtZUFuZE1lc3NhZ2UoaXNFdmFsT3JBcmd1
bWVudHMgJiYgbW9kaWZpZXNFeHByLCAiJyIsIG1fbGFzdElkZW50aWZpZXItPmltcGwoKSwgIicg
Y2Fubm90IGJlIG1vZGlmaWVkIGluIHN0cmljdCBtb2RlIik7CiAgICAgc3dpdGNoIChtX3Rva2Vu
Lm1fdHlwZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZp
c2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEZ1
bmN0aW9uQm9keU5vZGU7CiBjbGFzcyBGdW5jdGlvblBhcmFtZXRlcnM7CiBjbGFzcyBJZGVudGlm
aWVyOwotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgVk07CiBjbGFzcyBQcm9ncmFtTm9kZTsK
IGNsYXNzIFNvdXJjZUNvZGU7CiAKQEAgLTExMCw4ICsxMTAsOCBAQCBzdHJ1Y3QgU2NvcGVMYWJl
bEluZm8gewogfTsKIAogc3RydWN0IFNjb3BlIHsKLSAgICBTY29wZShjb25zdCBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIGJvb2wgaXNGdW5jdGlvbiwgYm9vbCBzdHJpY3RNb2RlKQotICAgICAg
ICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorICAgIFNjb3BlKGNvbnN0IFZNKiB2bSwgYm9v
bCBpc0Z1bmN0aW9uLCBib29sIHN0cmljdE1vZGUpCisgICAgICAgIDogbV92bSh2bSkKICAgICAg
ICAgLCBtX3NoYWRvd3NBcmd1bWVudHMoZmFsc2UpCiAgICAgICAgICwgbV91c2VzRXZhbChmYWxz
ZSkKICAgICAgICAgLCBtX25lZWRzRnVsbEFjdGl2YXRpb24oZmFsc2UpCkBAIC0xMjYsNyArMTI2
LDcgQEAgc3RydWN0IFNjb3BlIHsKICAgICB9CiAKICAgICBTY29wZShjb25zdCBTY29wZSYgcmhz
KQotICAgICAgICA6IG1fZ2xvYmFsRGF0YShyaHMubV9nbG9iYWxEYXRhKQorICAgICAgICA6IG1f
dm0ocmhzLm1fdm0pCiAgICAgICAgICwgbV9zaGFkb3dzQXJndW1lbnRzKHJocy5tX3NoYWRvd3NB
cmd1bWVudHMpCiAgICAgICAgICwgbV91c2VzRXZhbChyaHMubV91c2VzRXZhbCkKICAgICAgICAg
LCBtX25lZWRzRnVsbEFjdGl2YXRpb24ocmhzLm1fbmVlZHNGdWxsQWN0aXZhdGlvbikKQEAgLTE5
Niw3ICsxOTYsNyBAQCBzdHJ1Y3QgU2NvcGUgewogCiAgICAgYm9vbCBkZWNsYXJlVmFyaWFibGUo
Y29uc3QgSWRlbnRpZmllciogaWRlbnQpCiAgICAgewotICAgICAgICBib29sIGlzVmFsaWRTdHJp
Y3RNb2RlID0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5ldmFsICE9ICppZGVudCAmJiBt
X2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyAhPSAqaWRlbnQ7CisgICAgICAg
IGJvb2wgaXNWYWxpZFN0cmljdE1vZGUgPSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5ldmFsICE9ICpp
ZGVudCAmJiBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgIT0gKmlkZW50OwogICAgICAg
ICBtX2lzVmFsaWRTdHJpY3RNb2RlID0gbV9pc1ZhbGlkU3RyaWN0TW9kZSAmJiBpc1ZhbGlkU3Ry
aWN0TW9kZTsKICAgICAgICAgbV9kZWNsYXJlZFZhcmlhYmxlcy5hZGQoaWRlbnQtPnN0cmluZygp
LmltcGwoKSk7CiAgICAgICAgIHJldHVybiBpc1ZhbGlkU3RyaWN0TW9kZTsKQEAgLTIxMyw4ICsy
MTMsOCBAQCBzdHJ1Y3QgU2NvcGUgewogCiAgICAgYm9vbCBkZWNsYXJlUGFyYW1ldGVyKGNvbnN0
IElkZW50aWZpZXIqIGlkZW50KQogICAgIHsKLSAgICAgICAgYm9vbCBpc0FyZ3VtZW50cyA9IG1f
Z2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICppZGVudDsKLSAgICAgICAg
Ym9vbCBpc1ZhbGlkU3RyaWN0TW9kZSA9IG1fZGVjbGFyZWRWYXJpYWJsZXMuYWRkKGlkZW50LT5z
dHJpbmcoKS5pbXBsKCkpLmlzTmV3RW50cnkgJiYgbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVz
LT5ldmFsICE9ICppZGVudCAmJiAhaXNBcmd1bWVudHM7CisgICAgICAgIGJvb2wgaXNBcmd1bWVu
dHMgPSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gKmlkZW50OworICAgICAgICBi
b29sIGlzVmFsaWRTdHJpY3RNb2RlID0gbV9kZWNsYXJlZFZhcmlhYmxlcy5hZGQoaWRlbnQtPnN0
cmluZygpLmltcGwoKSkuaXNOZXdFbnRyeSAmJiBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5ldmFsICE9
ICppZGVudCAmJiAhaXNBcmd1bWVudHM7CiAgICAgICAgIG1faXNWYWxpZFN0cmljdE1vZGUgPSBt
X2lzVmFsaWRTdHJpY3RNb2RlICYmIGlzVmFsaWRTdHJpY3RNb2RlOwogICAgICAgICBpZiAoaXNB
cmd1bWVudHMpCiAgICAgICAgICAgICBtX3NoYWRvd3NBcmd1bWVudHMgPSB0cnVlOwpAQCAtMzEy
LDcgKzMxMiw3IEBAIHN0cnVjdCBTY29wZSB7CiAgICAgfQogCiBwcml2YXRlOgotICAgIGNvbnN0
IEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworICAgIGNvbnN0IFZNKiBtX3ZtOwogICAgIGJv
b2wgbV9zaGFkb3dzQXJndW1lbnRzIDogMTsKICAgICBib29sIG1fdXNlc0V2YWwgOiAxOwogICAg
IGJvb2wgbV9uZWVkc0Z1bGxBY3RpdmF0aW9uIDogMTsKQEAgLTM2NSw3ICszNjUsNyBAQCBjbGFz
cyBQYXJzZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCiBwdWJsaWM6Ci0gICAg
UGFyc2VyKEpTR2xvYmFsRGF0YSosIGNvbnN0IFNvdXJjZUNvZGUmLCBGdW5jdGlvblBhcmFtZXRl
cnMqLCBjb25zdCBJZGVudGlmaWVyJiwgSlNQYXJzZXJTdHJpY3RuZXNzLCBKU1BhcnNlck1vZGUp
OworICAgIFBhcnNlcihWTSosIGNvbnN0IFNvdXJjZUNvZGUmLCBGdW5jdGlvblBhcmFtZXRlcnMq
LCBjb25zdCBJZGVudGlmaWVyJiwgSlNQYXJzZXJTdHJpY3RuZXNzLCBKU1BhcnNlck1vZGUpOwog
ICAgIH5QYXJzZXIoKTsKIAogICAgIHRlbXBsYXRlIDxjbGFzcyBQYXJzZWROb2RlPgpAQCAtNDIy
LDcgKzQyMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpc1N0cmljdCA9IG1fc2NvcGVTdGFj
ay5sYXN0KCkuc3RyaWN0TW9kZSgpOwogICAgICAgICAgICAgaXNGdW5jdGlvbiA9IG1fc2NvcGVT
dGFjay5sYXN0KCkuaXNGdW5jdGlvbigpOwogICAgICAgICB9Ci0gICAgICAgIG1fc2NvcGVTdGFj
ay5hcHBlbmQoU2NvcGUobV9nbG9iYWxEYXRhLCBpc0Z1bmN0aW9uLCBpc1N0cmljdCkpOworICAg
ICAgICBtX3Njb3BlU3RhY2suYXBwZW5kKFNjb3BlKG1fdm0sIGlzRnVuY3Rpb24sIGlzU3RyaWN0
KSk7CiAgICAgICAgIHJldHVybiBjdXJyZW50U2NvcGUoKTsKICAgICB9CiAgICAgCkBAIC04OTQs
NyArODk0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuICFtX2Vycm9yTWVzc2FnZS5pc051
bGwoKTsKICAgICB9CiAKLSAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKKyAgICBWTSog
bV92bTsKICAgICBjb25zdCBTb3VyY2VDb2RlKiBtX3NvdXJjZTsKICAgICBQYXJzZXJBcmVuYSog
bV9hcmVuYTsKICAgICBPd25QdHI8TGV4ZXJUeXBlPiBtX2xleGVyOwpAQCAtOTc1LDcgKzk3NSw3
IEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyVHlwZT4KICAgICAgICAgSlNU
b2tlbkxvY2F0aW9uIGVuZExvY2F0aW9uOwogICAgICAgICBlbmRMb2NhdGlvbi5saW5lID0gbV9s
ZXhlci0+bGFzdExpbmVOdW1iZXIoKTsKICAgICAgICAgZW5kTG9jYXRpb24uY2hhclBvc2l0aW9u
ID0gbV9sZXhlci0+Y3VycmVudENoYXJQb3NpdGlvbigpOwotICAgICAgICByZXN1bHQgPSBQYXJz
ZWROb2RlOjpjcmVhdGUobV9nbG9iYWxEYXRhLAorICAgICAgICByZXN1bHQgPSBQYXJzZWROb2Rl
OjpjcmVhdGUobV92bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0
TG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRMb2NhdGlv
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc291cmNlRWxlbWVudHMs
CkBAIC0xMDA3LDE2ICsxMDA3LDE2IEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExl
eGVyVHlwZT4KIH0KIAogdGVtcGxhdGUgPGNsYXNzIFBhcnNlZE5vZGU+Ci1QYXNzUmVmUHRyPFBh
cnNlZE5vZGU+IHBhcnNlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMsIGNvbnN0IElkZW50aWZp
ZXImIG5hbWUsIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzLCBKU1BhcnNlck1vZGUgcGFy
c2VyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yKQorUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBwYXJz
ZShWTSogdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgRnVuY3Rpb25QYXJhbWV0ZXJzKiBw
YXJhbWV0ZXJzLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBKU1BhcnNlclN0cmljdG5lc3Mgc3Ry
aWN0bmVzcywgSlNQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvcikKIHsK
ICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiUGFyc2luZyIpOwogCiAgICAgQVNT
RVJUKCFzb3VyY2UucHJvdmlkZXIoKS0+c291cmNlKCkuaXNOdWxsKCkpOwogICAgIGlmIChzb3Vy
Y2UucHJvdmlkZXIoKS0+c291cmNlKCkuaXM4Qml0KCkpIHsKLSAgICAgICAgUGFyc2VyPCBMZXhl
cjxMQ2hhcj4gPiBwYXJzZXIoZ2xvYmFsRGF0YSwgc291cmNlLCBwYXJhbWV0ZXJzLCBuYW1lLCBz
dHJpY3RuZXNzLCBwYXJzZXJNb2RlKTsKKyAgICAgICAgUGFyc2VyPCBMZXhlcjxMQ2hhcj4gPiBw
YXJzZXIodm0sIHNvdXJjZSwgcGFyYW1ldGVycywgbmFtZSwgc3RyaWN0bmVzcywgcGFyc2VyTW9k
ZSk7CiAgICAgICAgIHJldHVybiBwYXJzZXIucGFyc2U8UGFyc2VkTm9kZT4oZXJyb3IpOwogICAg
IH0KLSAgICBQYXJzZXI8IExleGVyPFVDaGFyPiA+IHBhcnNlcihnbG9iYWxEYXRhLCBzb3VyY2Us
IHBhcmFtZXRlcnMsIG5hbWUsIHN0cmljdG5lc3MsIHBhcnNlck1vZGUpOworICAgIFBhcnNlcjwg
TGV4ZXI8VUNoYXI+ID4gcGFyc2VyKHZtLCBzb3VyY2UsIHBhcmFtZXRlcnMsIG5hbWUsIHN0cmlj
dG5lc3MsIHBhcnNlck1vZGUpOwogICAgIHJldHVybiBwYXJzZXIucGFyc2U8UGFyc2VkTm9kZT4o
ZXJyb3IpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckFy
ZW5hLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJB
cmVuYS5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlckFyZW5hLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEwICs0MywxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAg
ICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIG1ha2VJZGVudGlmaWVyKEpTR2xv
YmFsRGF0YSosIGNvbnN0IFQqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpOwotICAgICAgICBB
TFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIG1ha2VJZGVudGlmaWVyTENoYXJGcm9tVUNo
YXIoSlNHbG9iYWxEYXRhKiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgp
OworICAgICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIG1ha2VJZGVudGlmaWVy
KFZNKiwgY29uc3QgVCogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCk7CisgICAgICAgIEFMV0FZ
U19JTkxJTkUgY29uc3QgSWRlbnRpZmllciYgbWFrZUlkZW50aWZpZXJMQ2hhckZyb21VQ2hhcihW
TSosIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKTsKIAotICAgICAgICBj
b25zdCBJZGVudGlmaWVyJiBtYWtlTnVtZXJpY0lkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiwgZG91
YmxlIG51bWJlcik7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG1ha2VOdW1lcmljSWRlbnRp
ZmllcihWTSosIGRvdWJsZSBudW1iZXIpOwogCiAgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuIG1faWRlbnRpZmllcnMuaXNFbXB0eSgpOyB9CiAKQEAgLTY5LDUxICs2OSw1MSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0g
ICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyJiBJZGVudGlmaWVyQXJlbmE6Om1ha2VJ
ZGVudGlmaWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVCogY2hhcmFjdGVycywg
c2l6ZV90IGxlbmd0aCkKKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIElkZW50
aWZpZXJBcmVuYTo6bWFrZUlkZW50aWZpZXIoVk0qIHZtLCBjb25zdCBUKiBjaGFyYWN0ZXJzLCBz
aXplX3QgbGVuZ3RoKQogICAgIHsKICAgICAgICAgaWYgKGNoYXJhY3RlcnNbMF0gPj0gTWF4aW11
bUNhY2hhYmxlQ2hhcmFjdGVyKSB7Ci0gICAgICAgICAgICBtX2lkZW50aWZpZXJzLmFwcGVuZChJ
ZGVudGlmaWVyKGdsb2JhbERhdGEsIGNoYXJhY3RlcnMsIGxlbmd0aCkpOworICAgICAgICAgICAg
bV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcih2bSwgY2hhcmFjdGVycywgbGVuZ3RoKSk7
CiAgICAgICAgICAgICByZXR1cm4gbV9pZGVudGlmaWVycy5sYXN0KCk7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKGxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgICBpZiAoSWRlbnRpZmllciogaWRl
bnQgPSBtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0pCiAgICAgICAgICAgICAgICAg
cmV0dXJuICppZGVudDsKLSAgICAgICAgICAgIG1faWRlbnRpZmllcnMuYXBwZW5kKElkZW50aWZp
ZXIoZ2xvYmFsRGF0YSwgY2hhcmFjdGVycywgbGVuZ3RoKSk7CisgICAgICAgICAgICBtX2lkZW50
aWZpZXJzLmFwcGVuZChJZGVudGlmaWVyKHZtLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKICAgICAg
ICAgICAgIG1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXSA9ICZtX2lkZW50aWZpZXJz
Lmxhc3QoKTsKICAgICAgICAgICAgIHJldHVybiBtX2lkZW50aWZpZXJzLmxhc3QoKTsKICAgICAg
ICAgfQogICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9IG1fcmVjZW50SWRlbnRpZmllcnNbY2hh
cmFjdGVyc1swXV07CiAgICAgICAgIGlmIChpZGVudCAmJiBJZGVudGlmaWVyOjplcXVhbChpZGVu
dC0+aW1wbCgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKQogICAgICAgICAgICAgcmV0dXJuICppZGVu
dDsKLSAgICAgICAgbV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcihnbG9iYWxEYXRhLCBj
aGFyYWN0ZXJzLCBsZW5ndGgpKTsKKyAgICAgICAgbV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRp
Zmllcih2bSwgY2hhcmFjdGVycywgbGVuZ3RoKSk7CiAgICAgICAgIG1fcmVjZW50SWRlbnRpZmll
cnNbY2hhcmFjdGVyc1swXV0gPSAmbV9pZGVudGlmaWVycy5sYXN0KCk7CiAgICAgICAgIHJldHVy
biBtX2lkZW50aWZpZXJzLmxhc3QoKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIGNvbnN0
IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZUlkZW50aWZpZXJMQ2hhckZyb21VQ2hh
cihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoKQorICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciYgSWRlbnRpZmll
ckFyZW5hOjptYWtlSWRlbnRpZmllckxDaGFyRnJvbVVDaGFyKFZNKiB2bSwgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiAgICAgewogICAgICAgICBpZiAoY2hhcmFjdGVy
c1swXSA+PSBNYXhpbXVtQ2FjaGFibGVDaGFyYWN0ZXIpIHsKLSAgICAgICAgICAgIG1faWRlbnRp
ZmllcnMuYXBwZW5kKElkZW50aWZpZXI6OmNyZWF0ZUxDaGFyRnJvbVVDaGFyKGdsb2JhbERhdGEs
IGNoYXJhY3RlcnMsIGxlbmd0aCkpOworICAgICAgICAgICAgbV9pZGVudGlmaWVycy5hcHBlbmQo
SWRlbnRpZmllcjo6Y3JlYXRlTENoYXJGcm9tVUNoYXIodm0sIGNoYXJhY3RlcnMsIGxlbmd0aCkp
OwogICAgICAgICAgICAgcmV0dXJuIG1faWRlbnRpZmllcnMubGFzdCgpOwogICAgICAgICB9CiAg
ICAgICAgIGlmIChsZW5ndGggPT0gMSkgewogICAgICAgICAgICAgaWYgKElkZW50aWZpZXIqIGlk
ZW50ID0gbV9zaG9ydElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dKQogICAgICAgICAgICAgICAg
IHJldHVybiAqaWRlbnQ7Ci0gICAgICAgICAgICBtX2lkZW50aWZpZXJzLmFwcGVuZChJZGVudGlm
aWVyKGdsb2JhbERhdGEsIGNoYXJhY3RlcnMsIGxlbmd0aCkpOworICAgICAgICAgICAgbV9pZGVu
dGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcih2bSwgY2hhcmFjdGVycywgbGVuZ3RoKSk7CiAgICAg
ICAgICAgICBtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0gPSAmbV9pZGVudGlmaWVy
cy5sYXN0KCk7CiAgICAgICAgICAgICByZXR1cm4gbV9pZGVudGlmaWVycy5sYXN0KCk7CiAgICAg
ICAgIH0KICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSBtX3JlY2VudElkZW50aWZpZXJzW2No
YXJhY3RlcnNbMF1dOwogICAgICAgICBpZiAoaWRlbnQgJiYgSWRlbnRpZmllcjo6ZXF1YWwoaWRl
bnQtPmltcGwoKSwgY2hhcmFjdGVycywgbGVuZ3RoKSkKICAgICAgICAgICAgIHJldHVybiAqaWRl
bnQ7Ci0gICAgICAgIG1faWRlbnRpZmllcnMuYXBwZW5kKElkZW50aWZpZXI6OmNyZWF0ZUxDaGFy
RnJvbVVDaGFyKGdsb2JhbERhdGEsIGNoYXJhY3RlcnMsIGxlbmd0aCkpOworICAgICAgICBtX2lk
ZW50aWZpZXJzLmFwcGVuZChJZGVudGlmaWVyOjpjcmVhdGVMQ2hhckZyb21VQ2hhcih2bSwgY2hh
cmFjdGVycywgbGVuZ3RoKSk7CiAgICAgICAgIG1fcmVjZW50SWRlbnRpZmllcnNbY2hhcmFjdGVy
c1swXV0gPSAmbV9pZGVudGlmaWVycy5sYXN0KCk7CiAgICAgICAgIHJldHVybiBtX2lkZW50aWZp
ZXJzLmxhc3QoKTsKICAgICB9CiAgICAgCi0gICAgaW5saW5lIGNvbnN0IElkZW50aWZpZXImIElk
ZW50aWZpZXJBcmVuYTo6bWFrZU51bWVyaWNJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgZG91YmxlIG51bWJlcikKKyAgICBpbmxpbmUgY29uc3QgSWRlbnRpZmllciYgSWRlbnRp
ZmllckFyZW5hOjptYWtlTnVtZXJpY0lkZW50aWZpZXIoVk0qIHZtLCBkb3VibGUgbnVtYmVyKQog
ICAgIHsKLSAgICAgICAgbV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcihnbG9iYWxEYXRh
LCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdChudW1iZXIpKSk7CisgICAgICAgIG1f
aWRlbnRpZmllcnMuYXBwZW5kKElkZW50aWZpZXIodm0sIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdF
Q01BU2NyaXB0KG51bWJlcikpKTsKICAgICAgICAgcmV0dXJuIG1faWRlbnRpZmllcnMubGFzdCgp
OwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVj
a2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhD
aGVja2VyLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvU3ludGF4Q2hlY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgU3ludGF4Q2hlY2tlciogbV9jb250ZXh0OwogICAgIH07CiAgICAgCi0gICAg
U3ludGF4Q2hlY2tlcihKU0dsb2JhbERhdGEqICwgdm9pZCopCisgICAgU3ludGF4Q2hlY2tlcihW
TSogLCB2b2lkKikKICAgICB7CiAgICAgfQogCkBAIC0xNjMsMTEgKzE2MywxMSBAQCBwdWJsaWM6
CiAgICAgICAgIEFTU0VSVChuYW1lKTsKICAgICAgICAgcmV0dXJuIFByb3BlcnR5KG5hbWUsIHR5
cGUpOwogICAgIH0KLSAgICB0ZW1wbGF0ZSA8Ym9vbCBjb21wbGV0ZT4gUHJvcGVydHkgY3JlYXRl
UHJvcGVydHkoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBkb3VibGUgbmFtZSwgaW50LCBQcm9w
ZXJ0eU5vZGU6OlR5cGUgdHlwZSkKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBjb21wbGV0ZT4gUHJvcGVy
dHkgY3JlYXRlUHJvcGVydHkoVk0qIHZtLCBkb3VibGUgbmFtZSwgaW50LCBQcm9wZXJ0eU5vZGU6
OlR5cGUgdHlwZSkKICAgICB7CiAgICAgICAgIGlmICghY29tcGxldGUpCiAgICAgICAgICAgICBy
ZXR1cm4gUHJvcGVydHkodHlwZSk7Ci0gICAgICAgIHJldHVybiBQcm9wZXJ0eSgmZ2xvYmFsRGF0
YS0+cGFyc2VyQXJlbmEtPmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihn
bG9iYWxEYXRhLCBuYW1lKSwgdHlwZSk7CisgICAgICAgIHJldHVybiBQcm9wZXJ0eSgmdm0tPnBh
cnNlckFyZW5hLT5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIodm0sIG5h
bWUpLCB0eXBlKTsKICAgICB9CiAgICAgaW50IGNyZWF0ZVByb3BlcnR5TGlzdChjb25zdCBKU1Rv
a2VuTG9jYXRpb24mLCBQcm9wZXJ0eSkgeyByZXR1cm4gMTsgfQogICAgIGludCBjcmVhdGVQcm9w
ZXJ0eUxpc3QoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgUHJvcGVydHksIGludCkgeyByZXR1cm4g
MTsgfQpAQCAtMjExLDExICsyMTEsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIFBy
b3BlcnR5KHR5cGUpOwogICAgICAgICByZXR1cm4gUHJvcGVydHkobmFtZSwgdHlwZSk7CiAgICAg
fQotICAgIHRlbXBsYXRlIDxib29sIHN0cmljdD4gUHJvcGVydHkgY3JlYXRlR2V0dGVyT3JTZXR0
ZXJQcm9wZXJ0eShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBkb3VibGUgbmFtZSwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQsIGludCkKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBzdHJpY3Q+IFByb3BlcnR5IGNyZWF0
ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoVk0qIHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBQ
cm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgZG91YmxlIG5hbWUsIGludCwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQpCiAgICAgewogICAgICAgICBpZiAoIXN0cmljdCkKICAgICAgICAgICAgIHJldHVy
biBQcm9wZXJ0eSh0eXBlKTsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5KCZnbG9iYWxEYXRhLT5w
YXJzZXJBcmVuYS0+aWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVudGlmaWVyKGdsb2Jh
bERhdGEsIG5hbWUpLCB0eXBlKTsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5KCZ2bS0+cGFyc2Vy
QXJlbmEtPmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcih2bSwgbmFtZSks
IHR5cGUpOwogICAgIH0KIAogICAgIHZvaWQgYXBwZW5kU3RhdGVtZW50KGludCwgaW50KSB7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9MZWdhY3lQcm9maWxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL0xlZ2FjeVByb2Zp
bGVyLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL0xlZ2FjeVByb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCB2
b2lkIExlZ2FjeVByb2ZpbGVyOjpzdGFydFByb2ZpbGluZyhFeGVjCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgZXhlYy0+Z2xvYmFsRGF0YSgpLm1fZW5hYmxlZFByb2ZpbGVyID0g
dGhpczsKKyAgICBleGVjLT52bSgpLm1fZW5hYmxlZFByb2ZpbGVyID0gdGhpczsKICAgICBSZWZQ
dHI8UHJvZmlsZUdlbmVyYXRvcj4gcHJvZmlsZUdlbmVyYXRvciA9IFByb2ZpbGVHZW5lcmF0b3I6
OmNyZWF0ZShleGVjLCB0aXRsZSwgKytQcm9maWxlc1VJRCk7CiAgICAgbV9jdXJyZW50UHJvZmls
ZXMuYXBwZW5kKHByb2ZpbGVHZW5lcmF0b3IpOwogfQpAQCAtOTUsNyArOTUsNyBAQCBQYXNzUmVm
UHRyPFByb2ZpbGU+IExlZ2FjeVByb2ZpbGVyOjpzdG9wCiAKICAgICAgICAgICAgIG1fY3VycmVu
dFByb2ZpbGVzLnJlbW92ZShpKTsKICAgICAgICAgICAgIGlmICghbV9jdXJyZW50UHJvZmlsZXMu
c2l6ZSgpKQotICAgICAgICAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5tX2VuYWJsZWRQcm9m
aWxlciA9IDA7CisgICAgICAgICAgICAgICAgZXhlYy0+dm0oKS5tX2VuYWJsZWRQcm9maWxlciA9
IDA7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVybiByZXR1cm5Qcm9maWxlOwogICAg
ICAgICB9CkBAIC0xMTIsNyArMTEyLDcgQEAgdm9pZCBMZWdhY3lQcm9maWxlcjo6c3RvcFByb2Zp
bGluZyhKU0dsbwogICAgICAgICAgICAgcHJvZmlsZUdlbmVyYXRvci0+c3RvcFByb2ZpbGluZygp
OwogICAgICAgICAgICAgbV9jdXJyZW50UHJvZmlsZXMucmVtb3ZlKGkpOwogICAgICAgICAgICAg
aWYgKCFtX2N1cnJlbnRQcm9maWxlcy5zaXplKCkpCi0gICAgICAgICAgICAgICAgb3JpZ2luLT5n
bG9iYWxEYXRhKCkubV9lbmFibGVkUHJvZmlsZXIgPSAwOworICAgICAgICAgICAgICAgIG9yaWdp
bi0+dm0oKS5tX2VuYWJsZWRQcm9maWxlciA9IDA7CiAgICAgICAgIH0KICAgICB9CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvTGVnYWN5UHJvZmlsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvTGVnYWN5UHJvZmlsZXIuaAko
cmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL0xlZ2Fj
eVByb2ZpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKIG5hbWVzcGFjZSBK
U0MgewogCiBjbGFzcyBFeGVjU3RhdGU7Ci1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsK
IGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBKU1ZhbHVlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5
dGVjb2RlLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3By
b2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw5
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgUHJvZmlsZXIgewogSlNWYWx1ZSBCeXRlY29k
ZTo6dG9KUyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgSlNPYmplY3QqIHJlc3VsdCA9
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVjb2RlSW5kZXgsIGpzTnVt
YmVyKG1fYnl0ZWNvZGVJbmRleCkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm9wY29kZSwganNTdHJpbmcoZXhlYywgU3Ry
aW5nOjpmcm9tVVRGOChvcGNvZGVOYW1lc1ttX29wY29kZUlEXSkpKTsKLSAgICByZXN1bHQtPnB1
dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5kZXNjcmlw
dGlvbiwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOChtX2Rlc2NyaXB0aW9uKSkpOwor
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5i
eXRlY29kZUluZGV4LCBqc051bWJlcihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICByZXN1bHQtPnB1
dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkub3Bjb2RlLCBqc1N0cmlu
ZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG9wY29kZU5hbWVzW21fb3Bjb2RlSURdKSkpOworICAg
IHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5kZXNj
cmlwdGlvbiwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOChtX2Rlc2NyaXB0aW9uKSkp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
cm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwCShy
ZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmls
ZXJCeXRlY29kZVNlcXVlbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBC
eXRlY29kZVNlcXVlbmNlOjpCeXRlY29kZVNlcXVlbmNlKENvZGVCCiAgICAgZm9yICh1bnNpZ25l
ZCBieXRlY29kZUluZGV4ID0gMDsgYnl0ZWNvZGVJbmRleCA8IGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpOykgewogICAgICAgICBvdXQucmVzZXQoKTsKICAgICAgICAgY29kZUJsb2Nr
LT5kdW1wQnl0ZWNvZGUob3V0LCBieXRlY29kZUluZGV4KTsKLSAgICAgICAgbV9zZXF1ZW5jZS5h
cHBlbmQoQnl0ZWNvZGUoYnl0ZWNvZGVJbmRleCwgY29kZUJsb2NrLT5nbG9iYWxEYXRhKCktPmlu
dGVycHJldGVyLT5nZXRPcGNvZGVJRChjb2RlQmxvY2stPmluc3RydWN0aW9ucygpW2J5dGVjb2Rl
SW5kZXhdLnUub3Bjb2RlKSwgb3V0LnRvQ1N0cmluZygpKSk7CisgICAgICAgIG1fc2VxdWVuY2Uu
YXBwZW5kKEJ5dGVjb2RlKGJ5dGVjb2RlSW5kZXgsIGNvZGVCbG9jay0+dm0oKS0+aW50ZXJwcmV0
ZXItPmdldE9wY29kZUlEKGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbYnl0ZWNvZGVJbmRleF0u
dS5vcGNvZGUpLCBvdXQudG9DU3RyaW5nKCkpKTsKICAgICAgICAgYnl0ZWNvZGVJbmRleCArPSBv
cGNvZGVMZW5ndGgoCi0gICAgICAgICAgICBjb2RlQmxvY2stPmdsb2JhbERhdGEoKS0+aW50ZXJw
cmV0ZXItPmdldE9wY29kZUlEKAorICAgICAgICAgICAgY29kZUJsb2NrLT52bSgpLT5pbnRlcnBy
ZXRlci0+Z2V0T3Bjb2RlSUQoCiAgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKVtieXRlY29kZUluZGV4XS51Lm9wY29kZSkpOwogICAgIH0KIH0KQEAgLTc4LDEyICs3OCwx
MiBAQCB2b2lkIEJ5dGVjb2RlU2VxdWVuY2U6OmFkZFNlcXVlbmNlUHJvcGVyCiAgICAgSlNBcnJh
eSogaGVhZGVyID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9oZWFkZXIuc2l6ZSgpOyArK2kpCiAgICAgICAgIGhlYWRlci0+cHV0
RGlyZWN0SW5kZXgoZXhlYywgaSwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOChtX2hl
YWRlcltpXSkpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5oZWFkZXIsIGhlYWRlcik7CisgICAgcmVzdWx0LT5wdXREaXJl
Y3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmhlYWRlciwgaGVhZGVyKTsKICAg
ICAKICAgICBKU0FycmF5KiBzZXF1ZW5jZSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2VxdWVuY2Uuc2l6ZSgpOyArK2kpCiAg
ICAgICAgIHNlcXVlbmNlLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX3NlcXVlbmNlW2ldLnRv
SlMoZXhlYykpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmJ5dGVjb2RlLCBzZXF1ZW5jZSk7CisgICAgcmVzdWx0LT5wdXRE
aXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVjb2RlLCBzZXF1ZW5j
ZSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpQcm9maWxlcgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZXMuY3BwCShy
ZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmls
ZXJCeXRlY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMSArNTUsMTEgQEAgSlNWYWx1
ZSBCeXRlY29kZXM6OnRvSlMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTT2JqZWN0KiByZXN1
bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKICAgICAKLSAgICByZXN1bHQtPnB1dERp
cmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29kZXNJ
RCwganNOdW1iZXIobV9pZCkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmluZmVycmVkTmFtZSwganNTdHJpbmcoZXhlYywg
bV9pbmZlcnJlZE5hbWUpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRh
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zb3VyY2VDb2RlLCBqc1N0cmluZyhleGVjLCBtX3Nv
dXJjZUNvZGUpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5oYXNoLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4
KHRvQ1N0cmluZyhtX2hhc2gpKSkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmluc3RydWN0aW9uQ291bnQsIGpzTnVtYmVy
KG1faW5zdHJ1Y3Rpb25Db3VudCkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCks
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29kZXNJRCwganNOdW1iZXIobV9pZCkpOworICAg
IHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pbmZl
cnJlZE5hbWUsIGpzU3RyaW5nKGV4ZWMsIG1faW5mZXJyZWROYW1lKSk7CisgICAgcmVzdWx0LT5w
dXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNvdXJjZUNvZGUsIGpz
U3RyaW5nKGV4ZWMsIG1fc291cmNlQ29kZSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMt
PnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5oYXNoLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6
OmZyb21VVEY4KHRvQ1N0cmluZyhtX2hhc2gpKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4
ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pbnN0cnVjdGlvbkNvdW50LCBqc051bWJl
cihtX2luc3RydWN0aW9uQ291bnQpKTsKICAgICBhZGRTZXF1ZW5jZVByb3BlcnRpZXMoZXhlYywg
cmVzdWx0KTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uLmNwcAkocmV2
aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVy
Q29tcGlsYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw0MiArOTQsNDIgQEAgSlNWYWx1
ZSBDb21waWxhdGlvbjo6dG9KUyhFeGVjU3RhdGUqIGV4ZQogewogICAgIEpTT2JqZWN0KiByZXN1
bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKICAgICAKLSAgICByZXN1bHQtPnB1dERp
cmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29kZXNJ
RCwganNOdW1iZXIobV9ieXRlY29kZXMtPmlkKCkpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChl
eGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb21waWxhdGlvbktpbmQs
IGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgodG9DU3RyaW5nKG1fa2luZCkpKSk7Cisg
ICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5
dGVjb2Rlc0lELCBqc051bWJlcihtX2J5dGVjb2Rlcy0+aWQoKSkpOworICAgIHJlc3VsdC0+cHV0
RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb21waWxhdGlvbktpbmQs
IGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgodG9DU3RyaW5nKG1fa2luZCkpKSk7CiAg
ICAgCiAgICAgSlNBcnJheSogcHJvZmlsZWRCeXRlY29kZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5
KGV4ZWMsIDApOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb2ZpbGVkQnl0ZWNv
ZGVzLnNpemUoKTsgKytpKQogICAgICAgICBwcm9maWxlZEJ5dGVjb2Rlcy0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgaSwgbV9wcm9maWxlZEJ5dGVjb2Rlc1tpXS50b0pTKGV4ZWMpKTsKLSAgICByZXN1
bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5w
cm9maWxlZEJ5dGVjb2RlcywgcHJvZmlsZWRCeXRlY29kZXMpOworICAgIHJlc3VsdC0+cHV0RGly
ZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm9maWxlZEJ5dGVjb2Rlcywg
cHJvZmlsZWRCeXRlY29kZXMpOwogICAgIAogICAgIEpTQXJyYXkqIGRlc2NyaXB0aW9ucyA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fZGVzY3JpcHRpb25zLnNpemUoKTsgKytpKQogICAgICAgICBkZXNjcmlwdGlvbnMtPnB1dERp
cmVjdEluZGV4KGV4ZWMsIGksIG1fZGVzY3JpcHRpb25zW2ldLnRvSlMoZXhlYykpOwotICAgIHJl
c3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
LmRlc2NyaXB0aW9ucywgZGVzY3JpcHRpb25zKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVj
LT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZGVzY3JpcHRpb25zLCBkZXNjcmlwdGlvbnMp
OwogICAgIAogICAgIEpTQXJyYXkqIGNvdW50ZXJzID0gY29uc3RydWN0RW1wdHlBcnJheShleGVj
LCAwKTsKICAgICBIYXNoTWFwPE9yaWdpblN0YWNrLCBPd25QdHI8RXhlY3V0aW9uQ291bnRlcj4g
Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jb3VudGVycy5lbmQoKTsKICAgICBmb3IgKEhhc2hN
YXA8T3JpZ2luU3RhY2ssIE93blB0cjxFeGVjdXRpb25Db3VudGVyPiA+Ojpjb25zdF9pdGVyYXRv
ciBpdGVyID0gbV9jb3VudGVycy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAg
ICAgIEpTT2JqZWN0KiBjb3VudGVyRW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsK
LSAgICAgICAgY291bnRlckVudHJ5LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkub3JpZ2luLCBpdGVyLT5rZXkudG9KUyhleGVjKSk7Ci0gICAgICAg
IGNvdW50ZXJFbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmV4ZWN1dGlvbkNvdW50LCBqc051bWJlcihpdGVyLT52YWx1ZS0+Y291bnQoKSkp
OworICAgICAgICBjb3VudGVyRW50cnktPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkub3JpZ2luLCBpdGVyLT5rZXkudG9KUyhleGVjKSk7CisgICAgICAgIGNvdW50
ZXJFbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5leGVj
dXRpb25Db3VudCwganNOdW1iZXIoaXRlci0+dmFsdWUtPmNvdW50KCkpKTsKICAgICAgICAgY291
bnRlcnMtPnB1c2goZXhlYywgY291bnRlckVudHJ5KTsKICAgICB9Ci0gICAgcmVzdWx0LT5wdXRE
aXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY291bnRlcnMs
IGNvdW50ZXJzKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuY291bnRlcnMsIGNvdW50ZXJzKTsKICAgICAKICAgICBKU0FycmF5KiBleGl0
U2l0ZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX29zckV4aXRTaXRlcy5zaXplKCk7ICsraSkKICAgICAgICAgZXhpdFNpdGVz
LT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX29zckV4aXRTaXRlc1tpXS50b0pTKGV4ZWMpKTsK
LSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5vc3JFeGl0U2l0ZXMsIGV4aXRTaXRlcyk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qo
ZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm9zckV4aXRTaXRlcywgZXhpdFNpdGVz
KTsKICAgICAKICAgICBKU0FycmF5KiBleGl0cyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywg
MCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb3NyRXhpdHMuc2l6ZSgpOyArK2kp
CiAgICAgICAgIGV4aXRzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX29zckV4aXRzW2ldLnRv
SlMoZXhlYykpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLm9zckV4aXRzLCBleGl0cyk7CisgICAgcmVzdWx0LT5wdXREaXJl
Y3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm9zckV4aXRzLCBleGl0cyk7CiAg
ICAgCi0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubnVtSW5saW5lZEdldEJ5SWRzLCBqc051bWJlcihtX251bUlubGluZWRHZXRC
eUlkcykpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLm51bUlubGluZWRQdXRCeUlkcywganNOdW1iZXIobV9udW1JbmxpbmVk
UHV0QnlJZHMpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5udW1JbmxpbmVkQ2FsbHMsIGpzTnVtYmVyKG1fbnVtSW5saW5l
ZENhbGxzKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLm51bUlubGluZWRHZXRCeUlkcywganNOdW1iZXIobV9udW1JbmxpbmVkR2V0QnlJ
ZHMpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkubnVtSW5saW5lZFB1dEJ5SWRzLCBqc051bWJlcihtX251bUlubGluZWRQdXRCeUlkcykp
OworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5udW1JbmxpbmVkQ2FsbHMsIGpzTnVtYmVyKG1fbnVtSW5saW5lZENhbGxzKSk7CiAgICAgCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxl
ci9Qcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuY3BwCShyZXZpc2lv
biAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21w
aWxlZEJ5dGVjb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsOCBAQCBKU1ZhbHVl
IENvbXBpbGVkQnl0ZWNvZGU6OnRvSlMoRXhlY1N0YXRlCiB7CiAgICAgSlNPYmplY3QqIHJlc3Vs
dCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogICAgIAotICAgIHJlc3VsdC0+cHV0RGly
ZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm9yaWdpbiwgbV9v
cmlnaW4udG9KUyhleGVjKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZGVzY3JpcHRpb24sIGpzU3RyaW5nKGV4ZWMsIFN0
cmluZzo6ZnJvbVVURjgobV9kZXNjcmlwdGlvbikpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkub3JpZ2luLCBtX29yaWdpbi50b0pTKGV4
ZWMpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuZGVzY3JpcHRpb24sIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgobV9kZXNj
cmlwdGlvbikpKTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckRhdGFiYXNlLmNwcAkocmV2
aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVy
RGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw5ICs0Miw5IEBAIHN0YXRpYyBTcGlu
TG9jayByZWdpc3RyYXRpb25Mb2NrID0gU1BJTkwKIHN0YXRpYyBpbnQgZGlkUmVnaXN0ZXJBdEV4
aXQ7CiBzdGF0aWMgRGF0YWJhc2UqIGZpcnN0RGF0YWJhc2U7CiAKLURhdGFiYXNlOjpEYXRhYmFz
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitEYXRhYmFzZTo6RGF0YWJhc2UoVk0mIHZtKQog
ICAgIDogbV9kYXRhYmFzZUlEKGF0b21pY0luY3JlbWVudCgmZGF0YWJhc2VDb3VudGVyKSkKLSAg
ICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorICAgICwgbV92bSh2bSkKICAgICAsIG1fc2hv
dWxkU2F2ZUF0RXhpdChmYWxzZSkKICAgICAsIG1fbmV4dFJlZ2lzdGVyZWREYXRhYmFzZSgwKQog
ewpAQCAtOTgsMTIgKzk4LDEyIEBAIEpTVmFsdWUgRGF0YWJhc2U6OnRvSlMoRXhlY1N0YXRlKiBl
eGVjKSAKICAgICBKU0FycmF5KiBieXRlY29kZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMs
IDApOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2J5dGVjb2Rlcy5zaXplKCk7ICsr
aSkKICAgICAgICAgYnl0ZWNvZGVzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX2J5dGVjb2Rl
c1tpXS50b0pTKGV4ZWMpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRh
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29kZXMsIGJ5dGVjb2Rlcyk7CisgICAgcmVz
dWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVjb2Rl
cywgYnl0ZWNvZGVzKTsKICAgICAKICAgICBKU0FycmF5KiBjb21waWxhdGlvbnMgPSBjb25zdHJ1
Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Nv
bXBpbGF0aW9ucy5zaXplKCk7ICsraSkKICAgICAgICAgY29tcGlsYXRpb25zLT5wdXREaXJlY3RJ
bmRleChleGVjLCBpLCBtX2NvbXBpbGF0aW9uc1tpXS0+dG9KUyhleGVjKSk7Ci0gICAgcmVzdWx0
LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29t
cGlsYXRpb25zLCBjb21waWxhdGlvbnMpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZt
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb21waWxhdGlvbnMsIGNvbXBpbGF0aW9ucyk7CiAg
ICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTExMSw3ICsxMTEsNyBAQCBKU1ZhbHVlIERh
dGFiYXNlOjp0b0pTKEV4ZWNTdGF0ZSogZXhlYykgCiBTdHJpbmcgRGF0YWJhc2U6OnRvSlNPTigp
IGNvbnN0CiB7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTR2xvYmFsT2Jq
ZWN0OjpjcmVhdGUoCi0gICAgICAgIG1fZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3Q6OmNyZWF0
ZVN0cnVjdHVyZShtX2dsb2JhbERhdGEsIGpzTnVsbCgpKSk7CisgICAgICAgIG1fdm0sIEpTR2xv
YmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUobV92bSwganNOdWxsKCkpKTsKICAgICAKICAgICBy
ZXR1cm4gSlNPTlN0cmluZ2lmeShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgdG9KUyhnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSksIDApOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5oCShyZXZpc2lvbiAxNDg2ODMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
UHJvZmlsZXIgewogY2xhc3MgRGF0YWJhc2UgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OyBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRhYmFzZSk7CiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgRGF0YWJhc2UoSlNHbG9iYWxEYXRhJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
RGF0YWJhc2UoVk0mKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB+RGF0YWJhc2UoKTsKICAgICAK
ICAgICBpbnQgZGF0YWJhc2VJRCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VJRDsgfQpAQCAt
NzgsNyArNzgsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGF0RXhpdENhbGxiYWNrKCk7
CiAgICAgCiAgICAgaW50IG1fZGF0YWJhc2VJRDsKLSAgICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFs
RGF0YTsKKyAgICBWTSYgbV92bTsKICAgICBTZWdtZW50ZWRWZWN0b3I8Qnl0ZWNvZGVzPiBtX2J5
dGVjb2RlczsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIEJ5dGVjb2Rlcyo+IG1fYnl0ZWNvZGVz
TWFwOwogICAgIFZlY3RvcjxSZWZQdHI8Q29tcGlsYXRpb24+ID4gbV9jb21waWxhdGlvbnM7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JF
eGl0LmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVyT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDExICs0OCwxMSBA
QCBPU1JFeGl0Ojp+T1NSRXhpdCgpCiBKU1ZhbHVlIE9TUkV4aXQ6OnRvSlMoRXhlY1N0YXRlKiBl
eGVjKSBjb25zdAogewogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVj
dChleGVjKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5pZCwganNOdW1iZXIobV9pZCkpOwotICAgIHJlc3VsdC0+cHV0RGly
ZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm9yaWdpbiwgbV9v
cmlnaW4udG9KUyhleGVjKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZXhpdEtpbmQsIGpzU3RyaW5nKGV4ZWMsIGV4aXRL
aW5kVG9TdHJpbmcobV9leGl0S2luZCkpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5n
bG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pc1dhdGNocG9pbnQsIGpzQm9vbGVh
bihtX2lzV2F0Y2hwb2ludCkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvdW50LCBqc051bWJlcihtX2NvdW50ZXIpKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
aWQsIGpzTnVtYmVyKG1faWQpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkub3JpZ2luLCBtX29yaWdpbi50b0pTKGV4ZWMpKTsKKyAgICBy
ZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZXhpdEtp
bmQsIGpzU3RyaW5nKGV4ZWMsIGV4aXRLaW5kVG9TdHJpbmcobV9leGl0S2luZCkpKTsKKyAgICBy
ZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaXNXYXRj
aHBvaW50LCBqc0Jvb2xlYW4obV9pc1dhdGNocG9pbnQpKTsKKyAgICByZXN1bHQtPnB1dERpcmVj
dChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY291bnQsIGpzTnVtYmVyKG1fY291
bnRlcikpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wcm9maWxlci9Qcm9maWxlck9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luLmNwcAkocmV2aXNpb24gMTQ4Njgz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgsOCBAQCB2b2lkIE9yaWdpbjo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zCiBKU1ZhbHVlIE9yaWdpbjo6dG9KUyhFeGVjU3RhdGUqIGV4ZWMpIGNv
bnN0CiB7CiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMp
OwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmJ5dGVjb2Rlc0lELCBqc051bWJlcihtX2J5dGVjb2Rlcy0+aWQoKSkpOwotICAg
IHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmJ5dGVjb2RlSW5kZXgsIGpzTnVtYmVyKG1fYnl0ZWNvZGVJbmRleCkpOworICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlY29kZXNJ
RCwganNOdW1iZXIobV9ieXRlY29kZXMtPmlkKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZWNvZGVJbmRleCwganNOdW1iZXIo
bV9ieXRlY29kZUluZGV4KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlclByb2Zp
bGVkQnl0ZWNvZGVzLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw3ICs0Niw3IEBAIEpTVmFsdWUgUHJvZmlsZWRCeXRlY29kZXM6OnRvSlMoRXhlY1N0
YXQKIHsKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7
CiAgICAgCi0gICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYnl0ZWNvZGVzSUQsIGpzTnVtYmVyKG1fYnl0ZWNvZGVzLT5pZCgpKSk7
CisgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
LmJ5dGVjb2Rlc0lELCBqc051bWJlcihtX2J5dGVjb2Rlcy0+aWQoKSkpOwogICAgIGFkZFNlcXVl
bmNlUHJvcGVydGllcyhleGVjLCByZXN1bHQpOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCShyZXZpc2lvbiAxNDg2
ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDcgKzMzLDcgQEAgY2xhc3MgU2xvdFZpc2l0b3I7CiAKIGNsYXNzIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJrZWRBcmd1bWVu
dEJ1ZmZlcik7Ci0gICAgZnJpZW5kIGNsYXNzIEpTR2xvYmFsRGF0YTsKKyAgICBmcmllbmQgY2xh
c3MgVk07CiAgICAgZnJpZW5kIGNsYXNzIEFyZ0xpc3Q7CiAKIHByaXZhdGU6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDE0ODY4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5OCw3ICsxOTgsNyBAQCB2b2lkIEFyZ3VtZW50czo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iCiB2b2lkIEFyZ3VtZW50czo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJv
dykKIHsKICAgICBBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8QXJndW1lbnRzKj4oY2Vs
bCk7Ci0gICAgaWYgKHRoaXNPYmplY3QtPnRyeVNldEFyZ3VtZW50KGV4ZWMtPmdsb2JhbERhdGEo
KSwgaSwgdmFsdWUpKQorICAgIGlmICh0aGlzT2JqZWN0LT50cnlTZXRBcmd1bWVudChleGVjLT52
bSgpLCBpLCB2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KHNob3VsZFRocm93KTsKQEAgLTIwOSwxOSArMjA5LDE5IEBAIHZvaWQgQXJndW1lbnRzOjpw
dXQoSlNDZWxsKiBjZWxsLCBFeGVjU3QKIHsKICAgICBBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8QXJndW1lbnRzKj4oY2VsbCk7CiAgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5h
c0luZGV4KCk7Ci0gICAgaWYgKHRoaXNPYmplY3QtPnRyeVNldEFyZ3VtZW50KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgaSwgdmFsdWUpKQorICAgIGlmICh0aGlzT2JqZWN0LT50cnlTZXRBcmd1bWVudChl
eGVjLT52bSgpLCBpLCB2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCAmJiAhdGhpc09iamVjdC0+bV9v
dmVycm9kZUxlbmd0aCkgewogICAgICAgICB0aGlzT2JqZWN0LT5tX292ZXJyb2RlTGVuZ3RoID0g
dHJ1ZTsKLSAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgRG9udEVudW0pOworICAgICAgICB0aGlzT2JqZWN0LT5wdXRE
aXJlY3QoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgRG9udEVudW0pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuY2FsbGVlICYmICF0aGlzT2JqZWN0LT5tX292ZXJyb2RlQ2FsbGVlKSB7CiAgICAg
ICAgIGlmICghdGhpc09iamVjdC0+bV9pc1N0cmljdE1vZGUpIHsKICAgICAgICAgICAgIHRoaXNP
YmplY3QtPm1fb3ZlcnJvZGVDYWxsZWUgPSB0cnVlOwotICAgICAgICAgICAgdGhpc09iamVjdC0+
cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgRG9udEVu
dW0pOworICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIERvbnRFbnVtKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICB0aGlzT2JqZWN0LT5jcmVhdGVTdHJpY3RNb2RlQ2FsbGVlSWZOZWNlc3Nhcnko
ZXhlYyk7CkBAIC0yNDcsNyArMjQ3LDcgQEAgYm9vbCBBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5
QnlJbmRleChKUwogCiBib29sIEFyZ3VtZW50czo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIAogewotICAgIGlm
IChleGVjLT5nbG9iYWxEYXRhKCkuaXNJbkRlZmluZU93blByb3BlcnR5KCkpCisgICAgaWYgKGV4
ZWMtPnZtKCkuaXNJbkRlZmluZU93blByb3BlcnR5KCkpCiAgICAgICAgIHJldHVybiBCYXNlOjpk
ZWxldGVQcm9wZXJ0eShjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogCiAgICAgQXJndW1lbnRz
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEFyZ3VtZW50cyo+KGNlbGwpOwpAQCAtMzA2LDcgKzMwNiw3
IEBAIGJvb2wgQXJndW1lbnRzOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamUKICAgICAgICAgICAg
ICAgICAvLyBpLiBJZiBEZXNjLltbVmFsdWVdXSBpcyBwcmVzZW50LCB0aGVuCiAgICAgICAgICAg
ICAgICAgLy8gMS4gQ2FsbCB0aGUgW1tQdXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgbWFwIHBhc3Np
bmcgUCwgRGVzYy5bW1ZhbHVlXV0sIGFuZCBUaHJvdyBhcyB0aGUgYXJndW1lbnRzLgogICAgICAg
ICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgIHRo
aXNPYmplY3QtPnRyeVNldEFyZ3VtZW50KGV4ZWMtPmdsb2JhbERhdGEoKSwgaSwgZGVzY3JpcHRv
ci52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+dHJ5U2V0QXJndW1l
bnQoZXhlYy0+dm0oKSwgaSwgZGVzY3JpcHRvci52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAv
LyBpaS4gSWYgRGVzYy5bW1dyaXRhYmxlXV0gaXMgcHJlc2VudCBhbmQgaXRzIHZhbHVlIGlzIGZh
bHNlLCB0aGVuCiAgICAgICAgICAgICAgICAgLy8gMS4gQ2FsbCB0aGUgW1tEZWxldGVdXSBpbnRl
cm5hbCBtZXRob2Qgb2YgbWFwIHBhc3NpbmcgUCBhbmQgZmFsc2UgYXMgYXJndW1lbnRzLgogICAg
ICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLndyaXRhYmxlUHJlc2VudCgpICYmICFkZXNjcmlw
dG9yLndyaXRhYmxlKCkpCkBAIC0zMTcsMTAgKzMxNywxMCBAQCBib29sIEFyZ3VtZW50czo6ZGVm
aW5lT3duUHJvcGVydHkoSlNPYmplCiAgICAgfQogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoICYmICF0aGlzT2JqZWN0LT5tX292ZXJyb2RlTGVu
Z3RoKSB7Ci0gICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCks
IHByb3BlcnR5TmFtZSwganNOdW1iZXIodGhpc09iamVjdC0+bV9udW1Bcmd1bWVudHMpLCBEb250
RW51bSk7CisgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBwcm9wZXJ0
eU5hbWUsIGpzTnVtYmVyKHRoaXNPYmplY3QtPm1fbnVtQXJndW1lbnRzKSwgRG9udEVudW0pOwog
ICAgICAgICB0aGlzT2JqZWN0LT5tX292ZXJyb2RlTGVuZ3RoID0gdHJ1ZTsKICAgICB9IGVsc2Ug
aWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVlICYmICF0aGlz
T2JqZWN0LT5tX292ZXJyb2RlQ2FsbGVlKSB7Ci0gICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVj
dChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+bV9jYWxsZWUu
Z2V0KCksIERvbnRFbnVtKTsKKyAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPnZt
KCksIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+bV9jYWxsZWUuZ2V0KCksIERvbnRFbnVtKTsK
ICAgICAgICAgdGhpc09iamVjdC0+bV9vdmVycm9kZUNhbGxlZSA9IHRydWU7CiAgICAgfSBlbHNl
IGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlciAmJiB0aGlz
T2JqZWN0LT5tX2lzU3RyaWN0TW9kZSkKICAgICAgICAgdGhpc09iamVjdC0+Y3JlYXRlU3RyaWN0
TW9kZUNhbGxlcklmTmVjZXNzYXJ5KGV4ZWMpOwpAQCAtMzU2LDEyICszNTYsMTIgQEAgdm9pZCBB
cmd1bWVudHM6OnRlYXJPZmYoQ2FsbEZyYW1lKiBjYWxsRgogCiAgICAgaWYgKCFjYWxsRnJhbWUt
PmlzSW5saW5lQ2FsbEZyYW1lKCkpIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X251bUFyZ3VtZW50czsgKytpKQotICAgICAgICAgICAgdHJ5U2V0QXJndW1lbnQoY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCksIGksIGNhbGxGcmFtZS0+YXJndW1lbnRBZnRlckNhcHR1cmUoaSkpOwor
ICAgICAgICAgICAgdHJ5U2V0QXJndW1lbnQoY2FsbEZyYW1lLT52bSgpLCBpLCBjYWxsRnJhbWUt
PmFyZ3VtZW50QWZ0ZXJDYXB0dXJlKGkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IHRlYXJPZmZGb3JJbmxpbmVDYWxsRnJhbWUoCi0gICAgICAgIGNhbGxGcmFtZS0+Z2xvYmFsRGF0
YSgpLCBjYWxsRnJhbWUtPnJlZ2lzdGVycygpLCBjYWxsRnJhbWUtPmlubGluZUNhbGxGcmFtZSgp
KTsKKyAgICAgICAgY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUtPnJlZ2lzdGVycygpLCBjYWxs
RnJhbWUtPmlubGluZUNhbGxGcmFtZSgpKTsKIH0KIAogdm9pZCBBcmd1bWVudHM6OmRpZFRlYXJP
ZmZBY3RpdmF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uKQpA
QCAtMzczLDcgKzM3Myw3IEBAIHZvaWQgQXJndW1lbnRzOjpkaWRUZWFyT2ZmQWN0aXZhdGlvbihF
eGUKICAgICBpZiAoIW1fbnVtQXJndW1lbnRzKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
bV9hY3RpdmF0aW9uLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGFjdGl2YXRpb24pOwor
ICAgIG1fYWN0aXZhdGlvbi5zZXQoZXhlYy0+dm0oKSwgdGhpcywgYWN0aXZhdGlvbik7CiAgICAg
dGVhck9mZihleGVjKTsKIH0KIApAQCAtMzg5LDExICszODksMTEgQEAgdm9pZCBBcmd1bWVudHM6
OnRlYXJPZmYoQ2FsbEZyYW1lKiBjYWxsRgogICAgIG1fcmVnaXN0ZXJzID0gbV9yZWdpc3RlckFy
cmF5LmdldCgpICsgQ2FsbEZyYW1lOjpvZmZzZXRGb3IobV9udW1Bcmd1bWVudHMgKyAxKTsKIAog
ICAgIHRlYXJPZmZGb3JJbmxpbmVDYWxsRnJhbWUoCi0gICAgICAgIGNhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpLCBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCwKKyAgICAgICAgY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsg
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCwKICAgICAgICAgaW5saW5lQ2FsbEZyYW1lKTsK
IH0KIAotdm9pZCBBcmd1bWVudHM6OnRlYXJPZmZGb3JJbmxpbmVDYWxsRnJhbWUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBSZWdpc3RlciogcmVnaXN0ZXJzLCBJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSkKK3ZvaWQgQXJndW1lbnRzOjp0ZWFyT2ZmRm9ySW5saW5lQ2FsbEZyYW1l
KFZNJiB2bSwgUmVnaXN0ZXIqIHJlZ2lzdGVycywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX251bUFyZ3VtZW50czsgKytp
KSB7CiAgICAgICAgIFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudHNbaSArIDFdOwpAQCAtNDMxLDcgKzQzMSw3IEBAIHZvaWQgQXJndW1lbnRzOjp0ZWFy
T2ZmRm9ySW5saW5lQ2FsbEZyYW0KICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICB0cnlTZXRBcmd1
bWVudChnbG9iYWxEYXRhLCBpLCB2YWx1ZSk7CisgICAgICAgIHRyeVNldEFyZ3VtZW50KHZtLCBp
LCB2YWx1ZSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Bcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Bcmd1bWVudHMuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE2ICs0MCwxNiBAQCBj
bGFzcyBBcmd1bWVudHMgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPCiBwdWJsaWM6CiAgICAgdHlw
ZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEFyZ3VtZW50cyog
Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCisg
ICAgc3RhdGljIEFyZ3VtZW50cyogY3JlYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CiAgICAgewotICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEFyZ3VtZW50cz4oZ2xvYmFsRGF0YS5oZWFwKSkgQXJndW1lbnRzKGNhbGxGcmFt
ZSk7CisgICAgICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8QXJndW1lbnRzPih2bS5oZWFwKSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CiAgICAgICAg
IGFyZ3VtZW50cy0+ZmluaXNoQ3JlYXRpb24oY2FsbEZyYW1lKTsKICAgICAgICAgcmV0dXJuIGFy
Z3VtZW50czsKICAgICB9CiAgICAgICAgIAotICAgIHN0YXRpYyBBcmd1bWVudHMqIGNyZWF0ZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICBzdGF0aWMgQXJndW1lbnRzKiBjcmVhdGUoVk0m
IHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUpCiAgICAgewotICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4oZ2xvYmFsRGF0YS5oZWFwKSkgQXJndW1lbnRzKGNhbGxG
cmFtZSk7CisgICAgICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8QXJndW1lbnRzPih2bS5oZWFwKSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CiAgICAg
ICAgIGFyZ3VtZW50cy0+ZmluaXNoQ3JlYXRpb24oY2FsbEZyYW1lLCBpbmxpbmVDYWxsRnJhbWUp
OwogICAgICAgICByZXR1cm4gYXJndW1lbnRzOwogICAgIH0KQEAgLTYyLDcgKzYyLDcgQEAgcHJp
dmF0ZToKICAgICBBcmd1bWVudHMoQ2FsbEZyYW1lKik7CiAgICAgQXJndW1lbnRzKENhbGxGcmFt
ZSosIE5vUGFyYW1ldGVyc1R5cGUpOwogICAgICAgICAKLSAgICB2b2lkIHRlYXJPZmZGb3JJbmxp
bmVDYWxsRnJhbWUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBSZWdpc3RlciosIElubGluZUNh
bGxGcmFtZSopOworICAgIHZvaWQgdGVhck9mZkZvcklubGluZUNhbGxGcmFtZShWTSYgdm0sIFJl
Z2lzdGVyKiwgSW5saW5lQ2FsbEZyYW1lKik7CiAKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Qg
Q2xhc3NJbmZvIHNfaW5mbzsKQEAgLTg0LDkgKzg0LDkgQEAgcHVibGljOgogICAgIGJvb2wgaXNU
b3JuT2ZmKCkgY29uc3QgeyByZXR1cm4gbV9yZWdpc3RlckFycmF5OyB9CiAgICAgdm9pZCBkaWRU
ZWFyT2ZmQWN0aXZhdGlvbihFeGVjU3RhdGUqLCBKU0FjdGl2YXRpb24qKTsKIAotICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCiAgICAgeyAKLSAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAKKyAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCiAgICAgfQogICAgICAg
ICAKIHByb3RlY3RlZDoKQEAgLTExMCw3ICsxMTAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY3Jl
YXRlU3RyaWN0TW9kZUNhbGxlZUlmTmVjZXNzYXJ5KEV4ZWNTdGF0ZSopOwogCiAgICAgYm9vbCBp
c0FyZ3VtZW50KHNpemVfdCk7Ci0gICAgYm9vbCB0cnlTZXRBcmd1bWVudChKU0dsb2JhbERhdGEm
LCBzaXplX3QgYXJndW1lbnQsIEpTVmFsdWUpOworICAgIGJvb2wgdHJ5U2V0QXJndW1lbnQoVk0m
LCBzaXplX3QgYXJndW1lbnQsIEpTVmFsdWUpOwogICAgIEpTVmFsdWUgdHJ5R2V0QXJndW1lbnQo
c2l6ZV90IGFyZ3VtZW50KTsKICAgICBib29sIGlzRGVsZXRlZEFyZ3VtZW50KHNpemVfdCk7CiAg
ICAgYm9vbCB0cnlEZWxldGVBcmd1bWVudChzaXplX3QpOwpAQCAtMTQ4LDEyICsxNDgsMTIgQEAg
aW5saW5lIEFyZ3VtZW50cyogYXNBcmd1bWVudHMoSlNWYWx1ZSB2YQogfQogCiBpbmxpbmUgQXJn
dW1lbnRzOjpBcmd1bWVudHMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi0gICAgOiBKU0Rlc3RydWN0
aWJsZU9iamVjdChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPmFyZ3VtZW50c1N0cnVjdHVyZSgpKQorICAgIDogSlNEZXN0cnVjdGlibGVP
YmplY3QoY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
YXJndW1lbnRzU3RydWN0dXJlKCkpCiB7CiB9CiAKIGlubGluZSBBcmd1bWVudHM6OkFyZ3VtZW50
cyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgTm9QYXJhbWV0ZXJzVHlwZSkKLSAgICA6IEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+YXJndW1lbnRzU3RydWN0dXJlKCkpCisgICAgOiBKU0Rlc3RydWN0aWJs
ZU9iamVjdChjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5hcmd1bWVudHNTdHJ1Y3R1cmUoKSkKIHsKIH0KIApAQCAtMTc3LDExICsxNzcsMTEgQEAgaW5s
aW5lIGJvb2wgQXJndW1lbnRzOjp0cnlEZWxldGVBcmd1bWVudAogICAgIHJldHVybiB0cnVlOwog
fQogCi1pbmxpbmUgYm9vbCBBcmd1bWVudHM6OnRyeVNldEFyZ3VtZW50KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgc2l6ZV90IGFyZ3VtZW50LCBKU1ZhbHVlIHZhbHVlKQoraW5saW5lIGJvb2wg
QXJndW1lbnRzOjp0cnlTZXRBcmd1bWVudChWTSYgdm0sIHNpemVfdCBhcmd1bWVudCwgSlNWYWx1
ZSB2YWx1ZSkKIHsKICAgICBpZiAoIWlzQXJndW1lbnQoYXJndW1lbnQpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgdGhpcy0+YXJndW1lbnQoYXJndW1lbnQpLnNldChnbG9iYWxEYXRhLCB0
aGlzLCB2YWx1ZSk7CisgICAgdGhpcy0+YXJndW1lbnQoYXJndW1lbnQpLnNldCh2bSwgdGhpcywg
dmFsdWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMjcsMTMgKzIyNywxMyBAQCBpbmxp
bmUgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYgQXJndW1lCiAKIGlubGluZSB2b2lkIEFyZ3Vt
ZW50czo6ZmluaXNoQ3JlYXRpb24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24oY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOworICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKGNhbGxGcmFtZS0+dm0oKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8p
KTsKIAogICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZy
YW1lLT5jYWxsZWUoKSk7CiAgICAgbV9udW1Bcmd1bWVudHMgPSBjYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnQoKTsKICAgICBtX3JlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPio+KGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpOwotICAgIG1fY2FsbGVlLnNl
dChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgdGhpcywgY2FsbGVlKTsKKyAgICBtX2NhbGxlZS5z
ZXQoY2FsbEZyYW1lLT52bSgpLCB0aGlzLCBjYWxsZWUpOwogICAgIG1fb3ZlcnJvZGVMZW5ndGgg
PSBmYWxzZTsKICAgICBtX292ZXJyb2RlQ2FsbGVlID0gZmFsc2U7CiAgICAgbV9vdmVycm9kZUNh
bGxlciA9IGZhbHNlOwpAQCAtMjU2LDEzICsyNTYsMTMgQEAgaW5saW5lIHZvaWQgQXJndW1lbnRz
OjpmaW5pc2hDcmVhdGlvbihDYQogCiBpbmxpbmUgdm9pZCBBcmd1bWVudHM6OmZpbmlzaENyZWF0
aW9uKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSk7
CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oY2FsbEZyYW1lLT52bSgpKTsKICAgICBBU1NFUlQo
aW5oZXJpdHMoJnNfaW5mbykpOwogCiAgICAgSlNGdW5jdGlvbiogY2FsbGVlID0gaW5saW5lQ2Fs
bEZyYW1lLT5jYWxsZWVGb3JDYWxsRnJhbWUoY2FsbEZyYW1lKTsKICAgICBtX251bUFyZ3VtZW50
cyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDE7CiAgICAgbV9yZWdpc3Rl
cnMgPSByZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qPihjYWxsRnJh
bWUtPnJlZ2lzdGVycygpKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7Ci0gICAgbV9j
YWxsZWUuc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBjYWxsZWUpOworICAgIG1f
Y2FsbGVlLnNldChjYWxsRnJhbWUtPnZtKCksIHRoaXMsIGNhbGxlZSk7CiAgICAgbV9vdmVycm9k
ZUxlbmd0aCA9IGZhbHNlOwogICAgIG1fb3ZlcnJvZGVDYWxsZWUgPSBmYWxzZTsKICAgICBtX292
ZXJyb2RlQ2FsbGVyID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYxLDkgKzYxLDkgQEAgQXJyYXlDb25zdHJ1Y3Rvcjo6QXJyYXlDb25zdHJ1Y3Rv
cihKU0dsbwogCiB2b2lkIEFycmF5Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgQXJyYXlQcm90b3R5cGUqIGFycmF5UHJvdG90eXBlKQogewotICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXlQcm90b3R5cGUtPmNsYXNzSW5m
bygpLT5jbGFzc05hbWUpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmds
b2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgYXJyYXlQcm90b3R5
cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgsIGpzTnVtYmVyKDEpLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7Cisg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwgYXJyYXlQcm90b3R5cGUtPmNsYXNz
SW5mbygpLT5jbGFzc05hbWUpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMt
PnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIGFycmF5UHJvdG90eXBlLCBE
b250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1i
ZXIoMSksIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKIH0KIAogYm9vbCBBcnJh
eUNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCAmc2xvdCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9y
LmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsOSArNDIsOSBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogcHJvdGVjdGVkOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsMTYgKzEyNCwxNiBAQCBBcnJh
eVByb3RvdHlwZSogQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShFCiAKIC8vIEVDTUEgMTUuNC40CiBB
cnJheVByb3RvdHlwZTo6QXJyYXlQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBKU0FycmF5KGdsb2JhbE9iamVjdC0+Z2xv
YmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIDApCisgICAgOiBKU0FycmF5KGdsb2JhbE9iamVjdC0+dm0o
KSwgc3RydWN0dXJlLCAwKQogewogfQogCiB2b2lkIEFycmF5UHJvdG90eXBlOjpmaW5pc2hDcmVh
dGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpOwotICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2lu
Zm8pKTsKLSAgICBnbG9iYWxEYXRhLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhpcyk7Cisg
ICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3RvdHlwZSh0aGlzKTsKIH0KIAogYm9vbCBBcnJheVBy
b3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC03Mzks
NyArNzM5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAg
ICAgICByZXR1cm4gcGVyZm9ybVNsb3dTb3J0KGV4ZWMsIHRoaXNPYmosIGxlbmd0aCwgZnVuY3Rp
b24sIGNhbGxEYXRhLCBjYWxsVHlwZSkgPyBKU1ZhbHVlOjplbmNvZGUodGhpc09iaikgOiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgCiAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IEpTR2xvYmFsT2JqZWN0OjpjcmVhdGUoCi0gICAgICAgIGV4ZWMtPmdsb2Jh
bERhdGEoKSwgSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRh
KCksIGpzTnVsbCgpKSk7CisgICAgICAgIGV4ZWMtPnZtKCksIEpTR2xvYmFsT2JqZWN0OjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwganNOdWxsKCkpKTsKICAgICBKU0FycmF5KiBmbGF0QXJy
YXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCAwKTsK
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC04MTgsMTcgKzgxOCwxNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICBkZWxldGVDb3VudCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihkZWxldGVEb3VibGUpOwogICAgIH0KIAotICAgIEpTQXJyYXkq
IHJlc09iaiA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5U3RydWN0dXJlRm9ySW5kZXhp
bmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhVbmRlY2lkZWQpLCBkZWxldGVDb3VudCk7
CisgICAgSlNBcnJheSogcmVzT2JqID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChl
eGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5U3RydWN0dXJlRm9y
SW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhVbmRlY2lkZWQpLCBkZWxldGVD
b3VudCk7CiAgICAgaWYgKCFyZXNPYmopCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKIAogICAgIEpTVmFsdWUgcmVzdWx0ID0gcmVz
T2JqOwotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBk
ZWxldGVDb3VudDsgaysrKSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGdldFByb3BlcnR5KGV4ZWMs
IHRoaXNPYmosIGsgKyBiZWdpbik7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAg
ICAgIHJlc09iai0+aW5pdGlhbGl6ZUluZGV4KGdsb2JhbERhdGEsIGssIHYpOworICAgICAgICBy
ZXNPYmotPmluaXRpYWxpemVJbmRleCh2bSwgaywgdik7CiAgICAgfQogCiAgICAgdW5zaWduZWQg
YWRkaXRpb25hbEFyZ3MgPSBzdGQ6Om1heDxpbnQ+KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAtIDIs
IDApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0MCw5IEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywgQXJyYXlDbGFzcyk7CisgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywgQXJyYXlDbGFzcyk7
CiAgICAgfQogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9CYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0JhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmgJKHJldmlzaW9u
IDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JhdGNoZWRUcmFuc2l0
aW9uT3B0aW1pemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDggQEAgbmFtZXNwYWNl
IEpTQyB7CiBjbGFzcyBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplciB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIpOwogcHVibGljOgotICAgIEJh
dGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNPYmpl
Y3QqIG9iamVjdCkKLSAgICAgICAgOiBtX2dsb2JhbERhdGEoJmdsb2JhbERhdGEpCisgICAgQmF0
Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIoVk0mIHZtLCBKU09iamVjdCogb2JqZWN0KQorICAgICAg
ICA6IG1fdm0oJnZtKQogICAgICAgICAsIG1fb2JqZWN0KG9iamVjdCkKICAgICB7CiAgICAgfQpA
QCAtNDMsMTEgKzQzLDExIEBAIHB1YmxpYzoKICAgICB+QmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6
ZXIoKQogICAgIHsKICAgICAgICAgaWYgKG1fb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aXNEaWN0aW9u
YXJ5KCkpCi0gICAgICAgICAgICBtX29iamVjdC0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoKm1f
Z2xvYmFsRGF0YSk7CisgICAgICAgICAgICBtX29iamVjdC0+ZmxhdHRlbkRpY3Rpb25hcnlPYmpl
Y3QoKm1fdm0pOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFs
RGF0YTsKKyAgICBWTSogbV92bTsKICAgICBKU09iamVjdCogbV9vYmplY3Q7CiB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDE4ICszOCwx
OCBAQCBCb29sZWFuQ29uc3RydWN0b3I6OkJvb2xlYW5Db25zdHJ1Y3RvcihKCiAKIHZvaWQgQm9v
bGVhbkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEJvb2xlYW5Q
cm90b3R5cGUqIGJvb2xlYW5Qcm90b3R5cGUpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBib29sZWFuUHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NO
YW1lKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCks
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIGJvb2xlYW5Qcm90b3R5cGUsIERvbnRF
bnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihl
eGVjLT52bSgpLCBib29sZWFuUHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKTsKKyAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkucHJvdG90eXBlLCBib29sZWFuUHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUg
fCBSZWFkT25seSk7CiAKICAgICAvLyBuby4gb2YgYXJndW1lbnRzIGZvciBjb25zdHJ1Y3Rvcgot
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSksIFJlYWRPbmx5IHwgRG9udERlbGV0
ZSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgp
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBE
b250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCiAvLyBFQ01BIDE1LjYuMgogSlNPYmplY3QqIGNv
bnN0cnVjdEJvb2xlYW4oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewot
ICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZShleGVjLT5nbG9i
YWxEYXRhKCksIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVj
dCgpLT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOwotICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1
ZShleGVjLT5nbG9iYWxEYXRhKCksIGpzQm9vbGVhbihhcmdzLmF0KDApLnRvQm9vbGVhbihleGVj
KSkpOworICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZShleGVj
LT52bSgpLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3Qo
KS0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICBvYmotPnNldEludGVybmFsVmFsdWUo
ZXhlYy0+dm0oKSwganNCb29sZWFuKGFyZ3MuYXQoMCkudG9Cb29sZWFuKGV4ZWMpKSk7CiAgICAg
cmV0dXJuIG9iajsKIH0KIApAQCAtNzksOCArNzksOCBAQCBDYWxsVHlwZSBCb29sZWFuQ29uc3Ry
dWN0b3I6OmdldENhbGxEYXRhCiAKIEpTT2JqZWN0KiBjb25zdHJ1Y3RCb29sZWFuRnJvbUltbWVk
aWF0ZUJvb2xlYW4oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIGltbWVkaWF0ZUJvb2xlYW5WYWx1ZSkKIHsKLSAgICBCb29sZWFuT2JqZWN0KiBv
YmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmpl
Y3QtPmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7Ci0gICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgaW1tZWRpYXRlQm9vbGVhblZhbHVlKTsKKyAgICBCb29sZWFu
T2JqZWN0KiBvYmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwgZ2xvYmFsT2Jq
ZWN0LT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOworICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1
ZShleGVjLT52bSgpLCBpbW1lZGlhdGVCb29sZWFuVmFsdWUpOwogICAgIHJldHVybiBvYmo7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5D
b25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsOSArNDAs
OSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAKKyAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCiAgICAgeyAKLSAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAKKyAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCiAgICAgfQog
CiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFu
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
b29sZWFuT2JqZWN0LmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQm9vbGVhbk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE0ICsz
MCwxNCBAQCBBU1NFUlRfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUihCb29sZWFuT2JqCiAKIGNvbnN0
IENsYXNzSW5mbyBCb29sZWFuT2JqZWN0OjpzX2luZm8gPSB7ICJCb29sZWFuIiwgJkpTV3JhcHBl
ck9iamVjdDo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEJvb2xlYW5PYmplY3Qp
IH07CiAKLUJvb2xlYW5PYmplY3Q6OkJvb2xlYW5PYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IEpTV3JhcHBlck9iamVjdChnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUpCitCb29sZWFuT2JqZWN0OjpCb29sZWFuT2JqZWN0KFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBKU1dyYXBwZXJPYmplY3Qodm0sIHN0cnVjdHVyZSkK
IHsKIH0KIAotdm9pZCBCb29sZWFuT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCit2b2lkIEJvb2xlYW5PYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
IHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbk9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5PYmplY3QuaAkocmV2
aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbk9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywyNCArMjcsMjQgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKIGNsYXNzIEJvb2xlYW5PYmplY3QgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKIHByb3Rl
Y3RlZDoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBCb29sZWFuT2JqZWN0KEpTR2xvYmFsRGF0YSYs
IFN0cnVjdHVyZSopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24o
SlNHbG9iYWxEYXRhJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQm9vbGVhbk9iamVjdChWTSYs
IFN0cnVjdHVyZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKIAogcHVibGljOgogICAgIHR5cGVkZWYgSlNXcmFwcGVyT2JqZWN0IEJhc2U7CiAKLSAg
ICBzdGF0aWMgQm9vbGVhbk9iamVjdCogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgc3RhdGljIEJvb2xlYW5PYmplY3QqIGNyZWF0ZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgQm9vbGVhbk9iamVj
dCogYm9vbGVhbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEJvb2xlYW5PYmplY3Q+KGds
b2JhbERhdGEuaGVhcCkpIEJvb2xlYW5PYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKLSAg
ICAgICAgYm9vbGVhbi0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEJvb2xl
YW5PYmplY3QqIGJvb2xlYW4gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxCb29sZWFuT2Jq
ZWN0Pih2bS5oZWFwKSkgQm9vbGVhbk9iamVjdCh2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgYm9v
bGVhbi0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1cm4gYm9vbGVhbjsKICAgICB9
CiAgICAgICAgIAogICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2lu
Zm87CiAgICAgICAgIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOwogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jv
b2xlYW5Qcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTEsMTQgKzUxLDE0IEBAIGNvbnN0IENsYXNzSW5mbyBCb29sZWFuUHJvdG90eXBlOjpz
X2luZm8KIEFTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKEJvb2xlYW5Qcm90b3R5cGUpOwog
CiBCb29sZWFuUHJvdG90eXBlOjpCb29sZWFuUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBCb29sZWFuT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgc3RydWN0dXJlKQorICAgIDogQm9vbGVhbk9iamVjdChleGVjLT52bSgpLCBzdHJ1Y3R1cmUp
CiB7CiB9CiAKIHZvaWQgQm9vbGVhblByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRl
KiBleGVjLCBKU0dsb2JhbE9iamVjdCopCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhl
Yy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBzZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEo
KSwganNCb29sZWFuKGZhbHNlKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0o
KSk7CisgICAgc2V0SW50ZXJuYWxWYWx1ZShleGVjLT52bSgpLCBqc0Jvb2xlYW4oZmFsc2UpKTsK
IAogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiB9CkBAIC03NywyMiArNzcsMjIgQEAg
Ym9vbCBCb29sZWFuUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlcwogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGJvb2xlYW5Qcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMp
CiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsK
KyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
Pmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlID09IGpzQm9vbGVhbihmYWxzZSkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdz
LmZhbHNlU3RyaW5nKCkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHZtLT5zbWFs
bFN0cmluZ3MuZmFsc2VTdHJpbmcoKSk7CiAKICAgICBpZiAodGhpc1ZhbHVlID09IGpzQm9vbGVh
bih0cnVlKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShnbG9iYWxEYXRhLT5zbWFs
bFN0cmluZ3MudHJ1ZVN0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2
bS0+c21hbGxTdHJpbmdzLnRydWVTdHJpbmcoKSk7CiAKICAgICBpZiAoIXRoaXNWYWx1ZS5pbmhl
cml0cygmQm9vbGVhbk9iamVjdDo6c19pbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYyk7CiAKICAgICBpZiAoYXNCb29sZWFuT2JqZWN0KHRoaXNWYWx1ZSktPmludGVy
bmFsVmFsdWUoKSA9PSBqc0Jvb2xlYW4oZmFsc2UpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5mYWxzZVN0cmluZygpKTsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2bS0+c21hbGxTdHJpbmdzLmZhbHNlU3RyaW5nKCkpOwog
CiAgICAgQVNTRVJUKGFzQm9vbGVhbk9iamVjdCh0aGlzVmFsdWUpLT5pbnRlcm5hbFZhbHVlKCkg
PT0ganNCb29sZWFuKHRydWUpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGdsb2JhbERh
dGEtPnNtYWxsU3RyaW5ncy50cnVlU3RyaW5nKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodm0tPnNtYWxsU3RyaW5ncy50cnVlU3RyaW5nKCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGJvb2xlYW5Qcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYykKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBl
LmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jv
b2xlYW5Qcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsOSBAQCBwdWJsaWM6
CiAgICAgICAgIAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiBwcm90ZWN0
ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkocmV2
aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwogY2xhc3MgQ29weVZpc2l0b3I7CiBzdHJ1
Y3QgQXJyYXlTdG9yYWdlOwogCkBAIC0xMDQsMTAgKzEwNCwxMCBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZlB1YmxpY0xlbmd0aCgpIHsgcmV0dXJuIG9mZnNldE9mSW5k
ZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpOyB9
CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlZlY3Rvckxlbmd0aCgpIHsgcmV0dXJuIG9m
ZnNldE9mSW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZlZlY3Rvckxl
bmd0aCgpOyB9CiAgICAgCi0gICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlVW5pbml0aWFsaXpl
ZChKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFj
aXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpOworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mLCBz
aXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4
aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogCi0gICAgc3Rh
dGljIEJ1dHRlcmZseSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwg
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IElu
ZGV4aW5nSGVhZGVyJiwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBz
dGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CisgICAg
c3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKFZNJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qg
cHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgY29uc3QgSW5kZXhpbmdI
ZWFkZXImLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIHN0YXRpYyBC
dXR0ZXJmbHkqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBCdXR0ZXJmbHkq
IGNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKENvcHlWaXNpdG9yJiwgc2l6ZV90
IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hl
YWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKICAgICAKICAgICBJbmRl
eGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJv
bSh0aGlzKTsgfQpAQCAtMTQ3LDIwICsxNDcsMjAgQEAgcHVibGljOgogICAgIHZvaWQqIGJhc2Uo
c2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkgeyByZXR1cm4gcHJv
cGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5IC0gcHJlQ2FwYWNpdHk7IH0KICAgICB2
b2lkKiBiYXNlKFN0cnVjdHVyZSopOwogCi0gICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlT3JH
cm93QXJyYXlSaWdodChCdXR0ZXJmbHkqLCBKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFkSW5kZXhpbmdIZWFkZXIs
IHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsgCisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlT3JHcm93
QXJyYXlSaWdodChCdXR0ZXJmbHkqLCBWTSYsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXpl
X3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYWRJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZElu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpOyAKIAogICAgIC8vIFRoZSBidXR0ZXJmbHkgcmVhbGxvY2F0aW9uIG1ldGhvZHMgcGVy
Zm9ybSB0aGUgcmVhbGxvY2F0aW9uIGl0c2VsZiBidXQgZG8gbm90IGNoYW5nZSBhbnkKICAgICAv
LyBvZiB0aGUgbWV0YS1kYXRhIHRvIHJlZmxlY3QgdGhhdCB0aGUgcmVhbGxvY2F0aW9uIG9jY3Vy
cmVkLiBOb3RlIHRoYXQgdGhpcyBzZXQgb2YKICAgICAvLyBtZXRob2RzIGlzIG5vdCBleGhhdXN0
aXZlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gZW5jYXBzdWxhdGUgYWxsIHBvc3NpYmxlIGFsbG9j
YXRpb24KICAgICAvLyBtb2RlcyBvZiBidXR0ZXJmbGllcyAtIHRoZXJlIGFyZSBjb2RlIHBhdGhz
IHRoYXQgYWxsb2NhdGUgYnV0dGVyZmxpZXMgYnkgY2FsbGluZwogICAgIC8vIGRpcmVjdGx5IGlu
dG8gSGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdlLgotICAgIEJ1dHRlcmZseSogZ3Jvd1Byb3BlcnR5
U3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQcm9w
ZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKLSAgICBCdXR0ZXJm
bHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvbGRTdHJ1
Y3R1cmUsIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJvcGVydHlDYXBh
Y2l0eSk7Ci0gICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYs
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7Ci0g
ICAgQnV0dGVyZmx5KiBncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFkSW5kZXhpbmdIZWFk
ZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgLy8gQXNzdW1lcyB0aGF0IHByZUNhcGFjaXR5IGlzIHpl
cm8sIGFuZCBhc3NlcnRzIGFzIG11Y2guCi0gICAgQnV0dGVyZmx5KiBncm93QXJyYXlSaWdodChK
U0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpOwotICAgIEJ1dHRlcmZseSogcmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiwgc2l6ZV90
IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgb2xkSGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBib29sIG5l
d0hhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMp
OwotICAgIEJ1dHRlcmZseSogcmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwg
c2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpOyAvLyBBc3N1bWVzIHRoYXQgeW91J3JlIG5vdCBjaGFuZ2luZyB3aGV0aGVyIG9yIG5vdCB0
aGUgb2JqZWN0IGhhcyBhbiBpbmRleGluZyBoZWFkZXIuCisgICAgQnV0dGVyZmx5KiBncm93UHJv
cGVydHlTdG9yYWdlKFZNJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qgb2xkUHJvcGVydHlD
YXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiBn
cm93UHJvcGVydHlTdG9yYWdlKFZNJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBv
bGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0
dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdlKFZNJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUs
IHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dBcnJheVJp
Z2h0KFZNJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5
LCBib29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7IC8vIEFzc3VtZXMg
dGhhdCBwcmVDYXBhY2l0eSBpcyB6ZXJvLCBhbmQgYXNzZXJ0cyBhcyBtdWNoLgorICAgIEJ1dHRl
cmZseSogZ3Jvd0FycmF5UmlnaHQoVk0mLCBTdHJ1Y3R1cmUqLCBzaXplX3QgbmV3SW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIEJ1dHRlcmZseSogcmVzaXplQXJyYXkoVk0mLCBzaXpl
X3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBvbGRIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9s
ZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIGJvb2wg
bmV3SGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7CisgICAgQnV0dGVyZmx5KiByZXNpemVBcnJheShWTSYsIFN0cnVjdHVyZSosIHNpemVfdCBu
ZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgLy8g
QXNzdW1lcyB0aGF0IHlvdSdyZSBub3QgY2hhbmdpbmcgd2hldGhlciBvciBub3QgdGhlIG9iamVj
dCBoYXMgYW4gaW5kZXhpbmcgaGVhZGVyLgogICAgIEJ1dHRlcmZseSogdW5zaGlmdChTdHJ1Y3R1
cmUqLCBzaXplX3QgbnVtYmVyT2ZTbG90cyk7CiAgICAgQnV0dGVyZmx5KiBzaGlmdChTdHJ1Y3R1
cmUqLCBzaXplX3QgbnVtYmVyT2ZTbG90cyk7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkocmV2aXNpb24gMTQ4NjgzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCwzMiArMzAsMzIgQEAKICNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKICNp
bmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJDb3B5VmlzaXRvci5oIgot
I2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJm
bHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qg
cHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVh
ZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCitpbmxpbmUgQnV0dGVyZmx5
KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mIHZtLCBzaXplX3QgcHJlQ2FwYWNp
dHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXpl
X3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7CiAgICAgdm9pZCogdGVtcDsKICAgICBz
aXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFz
SW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBSRUxFQVNF
X0FTU0VSVChnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHNpemUsICZ0ZW1wKSk7
CisgICAgUkVMRUFTRV9BU1NFUlQodm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc2l6ZSwgJnRl
bXApKTsKICAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKHRlbXAsIHByZUNhcGFjaXR5
LCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1pbmxpbmUgQnV0
dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVf
dCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdI
ZWFkZXIsIGNvbnN0IEluZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoraW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVh
dGUoVk0mIHZtLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBi
b29sIGhhc0luZGV4aW5nSGVhZGVyLCBjb25zdCBJbmRleGluZ0hlYWRlciYgaW5kZXhpbmdIZWFk
ZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKIHsKICAgICBCdXR0ZXJmbHkq
IHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoCi0gICAgICAgIGdsb2JhbERhdGEsIHByZUNh
cGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpOworICAgICAgICB2bSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNp
dHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAg
aWYgKGhhc0luZGV4aW5nSGVhZGVyKQogICAgICAgICAqcmVzdWx0LT5pbmRleGluZ0hlYWRlcigp
ID0gaW5kZXhpbmdIZWFkZXI7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotaW5saW5lIEJ1dHRl
cmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxEYXRh
LCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGhhc0luZGV4aW5nSGVhZGVyKHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpLCBJbmRleGluZ0hlYWRlcigpLCAwKTsKKyAgICByZXR1
cm4gY3JlYXRlKHZtLCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGhhc0luZGV4
aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpLCBJbmRleGluZ0hlYWRlcigpLCAw
KTsKIH0KIAogaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVk
RHVyaW5nQ29sbGVjdGlvbihDb3B5VmlzaXRvciYgdmlzaXRvciwgc2l6ZV90IHByZUNhcGFjaXR5
LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQpAQCAtNzIsMTEgKzcyLDExIEBAIGlubGluZSB2
b2lkKiBCdXR0ZXJmbHk6OmJhc2UoU3RydWN0dXJlKiAKICAgICByZXR1cm4gYmFzZShpbmRleGlu
Z0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkpOwogfQogCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0
eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNp
emVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3Qg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQor
aW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdlKFZNJiB2bSwg
c2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJ
bmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3Qg
bmV3UHJvcGVydHlDYXBhY2l0eSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChuZXdQcm9wZXJ0eUNh
cGFjaXR5ID4gb2xkUHJvcGVydHlDYXBhY2l0eSk7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBj
cmVhdGVVbmluaXRpYWxpemVkKAotICAgICAgICBnbG9iYWxEYXRhLCBwcmVDYXBhY2l0eSwgbmV3
UHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKTsKKyAgICAgICAgdm0sIHByZUNhcGFjaXR5LCBuZXdQcm9wZXJ0eUNhcGFjaXR5LCBo
YXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIG1lbWNw
eSgKICAgICAgICAgcmVzdWx0LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIG9sZFByb3BlcnR5Q2FwYWNp
dHksCiAgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gb2xkUHJvcGVydHlDYXBhY2l0eSwKQEAg
LTg0LDUxICs4NCw1MSBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpn
cm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJvcGVydHlD
YXBhY2l0eSkKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFn
ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0
eSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCiB7CiAgICAgcmV0dXJuIGdyb3dQcm9wZXJ0
eVN0b3JhZ2UoCi0gICAgICAgIGdsb2JhbERhdGEsIGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFj
aXR5KHN0cnVjdHVyZSksIG9sZFByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIHZtLCBpbmRleGlu
Z0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBvbGRQcm9wZXJ0eUNhcGFjaXR5LAog
ICAgICAgICBoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwKICAg
ICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0
dXJlKSwgbmV3UHJvcGVydHlDYXBhY2l0eSk7CiB9CiAKLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRl
cmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKK2lubGluZSBC
dXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShWTSYgdm0sIFN0cnVjdHVy
ZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKIHsKICAgICByZXR1
cm4gZ3Jvd1Byb3BlcnR5U3RvcmFnZSgKLSAgICAgICAgZ2xvYmFsRGF0YSwgb2xkU3RydWN0dXJl
LCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1Byb3BlcnR5Q2FwYWNpdHkp
OworICAgICAgICB2bSwgb2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCksIG5ld1Byb3BlcnR5Q2FwYWNpdHkpOwogfQogCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoQnV0dGVyZmx5KiBvbGRCdXR0ZXJmbHksIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBw
cm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cykKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93QXJyYXlSaWdodChC
dXR0ZXJmbHkqIG9sZEJ1dHRlcmZseSwgVk0mIHZtLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwg
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFkSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBv
bGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKQogewogICAgIGlmICghb2xkQnV0dGVyZmx5KQotICAgICAgICByZXR1cm4gY3Jl
YXRlKGdsb2JhbERhdGEsIDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIEluZGV4aW5nSGVhZGVy
KCksIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICByZXR1cm4gb2xkQnV0dGVy
Zmx5LT5ncm93QXJyYXlSaWdodChnbG9iYWxEYXRhLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5Q2Fw
YWNpdHksIGhhZEluZGV4aW5nSGVhZGVyLCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywg
bmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgICAgICByZXR1cm4gY3JlYXRlKHZt
LCAwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBJbmRleGluZ0hlYWRlcigpLCBuZXdJbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgcmV0dXJuIG9sZEJ1dHRlcmZseS0+Z3Jvd0FycmF5
UmlnaHQodm0sIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlDYXBhY2l0eSwgaGFkSW5kZXhpbmdIZWFk
ZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBuZXdJbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyk7CiB9CiAKLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5Umln
aHQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6
ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFkSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKQoraW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChWTSYg
dm0sIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9v
bCBoYWRJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7CiAgICAgQVNTRVJUX1VO
VVNFRChvbGRTdHJ1Y3R1cmUsICFpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShvbGRTdHJ1
Y3R1cmUpKTsKICAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVjdHVyZSwgaGFkSW5kZXhpbmdIZWFk
ZXIgPT0gaGFzSW5kZXhpbmdIZWFkZXIob2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwog
ICAgIHZvaWQqIHRoZUJhc2UgPSBiYXNlKDAsIHByb3BlcnR5Q2FwYWNpdHkpOwogICAgIHNpemVf
dCBvbGRTaXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIGhhZEluZGV4aW5nSGVh
ZGVyLCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAgc2l6ZV90IG5ld1NpemUg
PSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgbmV3SW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeVJlYWxsb2NhdGVTdG9y
YWdlKCZ0aGVCYXNlLCBvbGRTaXplLCBuZXdTaXplKSkKKyAgICBpZiAoIXZtLmhlYXAudHJ5UmVh
bGxvY2F0ZVN0b3JhZ2UoJnRoZUJhc2UsIG9sZFNpemUsIG5ld1NpemUpKQogICAgICAgICByZXR1
cm4gMDsKICAgICByZXR1cm4gZnJvbUJhc2UodGhlQmFzZSwgMCwgcHJvcGVydHlDYXBhY2l0eSk7
CiB9CiAKLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG5ld0lu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoraW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpn
cm93QXJyYXlSaWdodChWTSYgdm0sIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3
SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7CiAgICAgcmV0dXJuIGdyb3dBcnJheVJpZ2h0
KAotICAgICAgICBnbG9iYWxEYXRhLCBvbGRTdHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSwKKyAgICAgICAgdm0sIG9sZFN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpLAogICAgICAgICBoYXNJbmRleGluZ0hlYWRlcihvbGRTdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKSwKICAgICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMob2xkU3RydWN0dXJlKSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpOwogfQogCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgb2xk
SGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywg
c2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBib29sIG5ld0hhc0luZGV4aW5nSGVhZGVyLCBzaXplX3Qg
bmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJm
bHk6OnJlc2l6ZUFycmF5KFZNJiB2bSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgb2xk
SGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywg
c2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBib29sIG5ld0hhc0luZGV4aW5nSGVhZGVyLCBzaXplX3Qg
bmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQg
PSBjcmVhdGVVbmluaXRpYWxpemVkKAotICAgICAgICBnbG9iYWxEYXRhLCBuZXdQcmVDYXBhY2l0
eSwgcHJvcGVydHlDYXBhY2l0eSwgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAgICAgdm0sIG5ld1ByZUNhcGFjaXR5LCBwcm9wZXJ0eUNh
cGFjaXR5LCBuZXdIYXNJbmRleGluZ0hlYWRlciwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpOwogICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIG1hZGUgbXVjaCBtb3JlIGVmZmljaWVu
dCBpZiB3ZSB1c2VkIHRoZSBwcm9wZXJ0eSBzaXplLAogICAgIC8vIG5vdCB0aGUgY2FwYWNpdHku
CiAgICAgdm9pZCogdG8gPSByZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBh
Y2l0eTsKQEAgLTE0MCwxMSArMTQwLDExIEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6
cmVzaXplQXJyYXkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1pbmxpbmUgQnV0dGVyZmx5KiBC
dXR0ZXJmbHk6OnJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKQoraW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpyZXNpemVBcnJh
eShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIHNp
emVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKIHsKICAgICBib29sIGhhc0luZGV4
aW5nSGVhZGVyID0gSlNDOjpoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKTsKICAgICByZXR1cm4gcmVzaXplQXJyYXkoCi0gICAgICAgIGdsb2JhbERhdGEsIHN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgaGFzSW5kZXhpbmdIZWFkZXIsCisgICAgICAgIHZt
LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGhhc0luZGV4aW5nSGVhZGVyLAogICAg
ICAgICBpbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1
cmUpLCBuZXdQcmVDYXBhY2l0eSwKICAgICAgICAgaGFzSW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvZGVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyAr
NzUsNyBAQCB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ2FjaGVUeXBlczxVbmxpbmtlZEV2CiB9OwogCiB0
ZW1wbGF0ZSA8Y2xhc3MgVW5saW5rZWRDb2RlQmxvY2tUeXBlLCBjbGFzcyBFeGVjdXRhYmxlVHlw
ZT4KLVVubGlua2VkQ29kZUJsb2NrVHlwZSogQ29kZUNhY2hlOjpnZXRDb2RlQmxvY2soSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU1Njb3BlKiBzY29wZSwgRXhlY3V0YWJsZVR5cGUqIGV4ZWN1
dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmlj
dG5lc3MsIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1v
ZGUsIFBhcnNlckVycm9yJiBlcnJvcikKK1VubGlua2VkQ29kZUJsb2NrVHlwZSogQ29kZUNhY2hl
OjpnZXRDb2RlQmxvY2soVk0mIHZtLCBKU1Njb3BlKiBzY29wZSwgRXhlY3V0YWJsZVR5cGUqIGV4
ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQYXJzZXJTdHJpY3RuZXNzIHN0
cmljdG5lc3MsIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxl
ck1vZGUsIFBhcnNlckVycm9yJiBlcnJvcikKIHsKICAgICBTb3VyY2VDb2RlS2V5IGtleSA9IFNv
dXJjZUNvZGVLZXkoc291cmNlLCBTdHJpbmcoKSwgQ2FjaGVUeXBlczxVbmxpbmtlZENvZGVCbG9j
a1R5cGU+Ojpjb2RlVHlwZSwgc3RyaWN0bmVzcyk7CiAgICAgQ29kZUNhY2hlTWFwOjpBZGRSZXN1
bHQgYWRkUmVzdWx0ID0gbV9zb3VyY2VDb2RlLmFkZChrZXksIFNvdXJjZUNvZGVWYWx1ZSgpKTsK
QEAgLTg4LDE2ICs4OCwxNiBAQCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0
Q29kCiAgICAgfQogCiAgICAgdHlwZWRlZiB0eXBlbmFtZSBDYWNoZVR5cGVzPFVubGlua2VkQ29k
ZUJsb2NrVHlwZT46OlJvb3ROb2RlIFJvb3ROb2RlOwotICAgIFJlZlB0cjxSb290Tm9kZT4gcm9v
dE5vZGUgPSBwYXJzZTxSb290Tm9kZT4oJmdsb2JhbERhdGEsIHNvdXJjZSwgMCwgSWRlbnRpZmll
cigpLCBzdHJpY3RuZXNzLCBKU1BhcnNlUHJvZ3JhbUNvZGUsIGVycm9yKTsKKyAgICBSZWZQdHI8
Um9vdE5vZGU+IHJvb3ROb2RlID0gcGFyc2U8Um9vdE5vZGU+KCZ2bSwgc291cmNlLCAwLCBJZGVu
dGlmaWVyKCksIHN0cmljdG5lc3MsIEpTUGFyc2VQcm9ncmFtQ29kZSwgZXJyb3IpOwogICAgIGlm
ICghcm9vdE5vZGUpIHsKICAgICAgICAgbV9zb3VyY2VDb2RlLnJlbW92ZShhZGRSZXN1bHQuaXRl
cmF0b3IpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgZXhlY3V0YWJsZS0+cmVjb3Jk
UGFyc2Uocm9vdE5vZGUtPmZlYXR1cmVzKCksIHJvb3ROb2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxl
cygpLCByb290Tm9kZS0+bGluZU5vKCksIHJvb3ROb2RlLT5sYXN0TGluZSgpKTsKIAotICAgIFVu
bGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlID0gVW5saW5rZWRDb2RlQmxvY2tUeXBl
OjpjcmVhdGUoJmdsb2JhbERhdGEsIGV4ZWN1dGFibGUtPmV4ZWN1dGFibGVJbmZvKCkpOworICAg
IFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlID0gVW5saW5rZWRDb2RlQmxvY2tU
eXBlOjpjcmVhdGUoJnZtLCBleGVjdXRhYmxlLT5leGVjdXRhYmxlSW5mbygpKTsKICAgICB1bmxp
bmtlZENvZGUtPnJlY29yZFBhcnNlKHJvb3ROb2RlLT5mZWF0dXJlcygpLCByb290Tm9kZS0+aGFz
Q2FwdHVyZWRWYXJpYWJsZXMoKSwgcm9vdE5vZGUtPmxpbmVObygpIC0gc291cmNlLmZpcnN0TGlu
ZSgpLCByb290Tm9kZS0+bGFzdExpbmUoKSAtIHJvb3ROb2RlLT5saW5lTm8oKSk7Ci0gICAgT3du
UHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2Vu
ZXJhdG9yKGdsb2JhbERhdGEsIHNjb3BlLCByb290Tm9kZS5nZXQoKSwgdW5saW5rZWRDb2RlLCBk
ZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSkpKTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0
b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3Iodm0sIHNjb3BlLCBy
b290Tm9kZS5nZXQoKSwgdW5saW5rZWRDb2RlLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSkp
KTsKICAgICBlcnJvciA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKTsKICAgICByb290Tm9kZS0+ZGVz
dHJveURhdGEoKTsKICAgICBpZiAoZXJyb3IubV90eXBlICE9IFBhcnNlckVycm9yOjpFcnJvck5v
bmUpIHsKQEAgLTExMCwyOCArMTEwLDI4IEBAIFVubGlua2VkQ29kZUJsb2NrVHlwZSogQ29kZUNh
Y2hlOjpnZXRDb2QKICAgICAgICAgcmV0dXJuIHVubGlua2VkQ29kZTsKICAgICB9CiAKLSAgICBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gU291cmNlQ29kZVZhbHVlKGdsb2JhbERhdGEsIHVu
bGlua2VkQ29kZSwgbV9zb3VyY2VDb2RlLmFnZSgpKTsKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlID0gU291cmNlQ29kZVZhbHVlKHZtLCB1bmxpbmtlZENvZGUsIG1fc291cmNlQ29kZS5h
Z2UoKSk7CiAgICAgcmV0dXJuIHVubGlua2VkQ29kZTsKIH0KIAotVW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrKiBDb2RlQ2FjaGU6OmdldFByb2dyYW1Db2RlQmxvY2soSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgY29uc3QgU291cmNlQ29kZSYg
c291cmNlLCBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywgRGVidWdnZXJNb2RlIGRlYnVn
Z2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yKQor
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBDb2RlQ2FjaGU6OmdldFByb2dyYW1Db2RlQmxvY2so
Vk0mIHZtLCBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgY29uc3QgU291cmNlQ29kZSYg
c291cmNlLCBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywgRGVidWdnZXJNb2RlIGRlYnVn
Z2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yKQog
ewotICAgIHJldHVybiBnZXRDb2RlQmxvY2s8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPihnbG9i
YWxEYXRhLCAwLCBleGVjdXRhYmxlLCBzb3VyY2UsIHN0cmljdG5lc3MsIGRlYnVnZ2VyTW9kZSwg
cHJvZmlsZXJNb2RlLCBlcnJvcik7CisgICAgcmV0dXJuIGdldENvZGVCbG9jazxVbmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2s+KHZtLCAwLCBleGVjdXRhYmxlLCBzb3VyY2UsIHN0cmljdG5lc3MsIGRl
YnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlLCBlcnJvcik7CiB9CiAKLVVubGlua2VkRXZhbENvZGVC
bG9jayogQ29kZUNhY2hlOjpnZXRFdmFsQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNTY29wZSogc2NvcGUsIEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBjb25zdCBTb3Vy
Y2VDb2RlJiBzb3VyY2UsIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzLCBEZWJ1Z2dlck1v
ZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYg
ZXJyb3IpCitVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIENvZGVDYWNoZTo6Z2V0RXZhbENvZGVCbG9j
ayhWTSYgdm0sIEpTU2NvcGUqIHNjb3BlLCBFdmFsRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywgRGVi
dWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwgUGFyc2Vy
RXJyb3ImIGVycm9yKQogewotICAgIHJldHVybiBnZXRDb2RlQmxvY2s8VW5saW5rZWRFdmFsQ29k
ZUJsb2NrPihnbG9iYWxEYXRhLCBzY29wZSwgZXhlY3V0YWJsZSwgc291cmNlLCBzdHJpY3RuZXNz
LCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3IpOworICAgIHJldHVybiBnZXRDb2Rl
QmxvY2s8VW5saW5rZWRFdmFsQ29kZUJsb2NrPih2bSwgc2NvcGUsIGV4ZWN1dGFibGUsIHNvdXJj
ZSwgc3RyaWN0bmVzcywgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUsIGVycm9yKTsKIH0KIAot
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIENvZGVDYWNoZTo6Z2V0RnVuY3Rpb25FeGVjdXRh
YmxlRnJvbUdsb2JhbENvZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBJZGVudGlm
aWVyJiBuYW1lLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFBhcnNlckVycm9yJiBlcnJvcikK
K1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBDb2RlQ2FjaGU6OmdldEZ1bmN0aW9uRXhlY3V0
YWJsZUZyb21HbG9iYWxDb2RlKFZNJiB2bSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3Qg
U291cmNlQ29kZSYgc291cmNlLCBQYXJzZXJFcnJvciYgZXJyb3IpCiB7CiAgICAgU291cmNlQ29k
ZUtleSBrZXkgPSBTb3VyY2VDb2RlS2V5KHNvdXJjZSwgbmFtZS5zdHJpbmcoKSwgU291cmNlQ29k
ZUtleTo6RnVuY3Rpb25UeXBlLCBKU1BhcnNlTm9ybWFsKTsKICAgICBDb2RlQ2FjaGVNYXA6OkFk
ZFJlc3VsdCBhZGRSZXN1bHQgPSBtX3NvdXJjZUNvZGUuYWRkKGtleSwgU291cmNlQ29kZVZhbHVl
KCkpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIHJldHVybiBqc0Nh
c3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqPihhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LmNlbGwuZ2V0KCkpOwogCi0gICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFtID0gcGFyc2U8
UHJvZ3JhbU5vZGU+KCZnbG9iYWxEYXRhLCBzb3VyY2UsIDAsIElkZW50aWZpZXIoKSwgSlNQYXJz
ZU5vcm1hbCwgSlNQYXJzZVByb2dyYW1Db2RlLCBlcnJvcik7CisgICAgUmVmUHRyPFByb2dyYW1O
b2RlPiBwcm9ncmFtID0gcGFyc2U8UHJvZ3JhbU5vZGU+KCZ2bSwgc291cmNlLCAwLCBJZGVudGlm
aWVyKCksIEpTUGFyc2VOb3JtYWwsIEpTUGFyc2VQcm9ncmFtQ29kZSwgZXJyb3IpOwogICAgIGlm
ICghcHJvZ3JhbSkgewogICAgICAgICBBU1NFUlQoZXJyb3IubV90eXBlICE9IFBhcnNlckVycm9y
OjpFcnJvck5vbmUpOwogICAgICAgICBtX3NvdXJjZUNvZGUucmVtb3ZlKGFkZFJlc3VsdC5pdGVy
YXRvcik7CkBAIC0xNDksMTAgKzE0OSwxMCBAQCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSog
Q29kZUNhY2hlOjpnCiAgICAgQVNTRVJUKGJvZHkpOwogICAgIEFTU0VSVChib2R5LT5pZGVudCgp
LmlzTnVsbCgpKTsKIAotICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4
ZWN1dGFibGUgPSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCZnbG9iYWxEYXRh
LCBzb3VyY2UsIGJvZHkpOwotICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+bV9uYW1lVmFsdWUuc2V0
KGdsb2JhbERhdGEsIGZ1bmN0aW9uRXhlY3V0YWJsZSwganNTdHJpbmcoJmdsb2JhbERhdGEsIG5h
bWUuc3RyaW5nKCkpKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25F
eGVjdXRhYmxlID0gVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgmdm0sIHNvdXJj
ZSwgYm9keSk7CisgICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5tX25hbWVWYWx1ZS5zZXQodm0sIGZ1
bmN0aW9uRXhlY3V0YWJsZSwganNTdHJpbmcoJnZtLCBuYW1lLnN0cmluZygpKSk7CiAKLSAgICBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gU291cmNlQ29kZVZhbHVlKGdsb2JhbERhdGEsIGZ1
bmN0aW9uRXhlY3V0YWJsZSwgbV9zb3VyY2VDb2RlLmFnZSgpKTsKKyAgICBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlID0gU291cmNlQ29kZVZhbHVlKHZtLCBmdW5jdGlvbkV4ZWN1dGFibGUsIG1f
c291cmNlQ29kZS5hZ2UoKSk7CiAgICAgcmV0dXJuIGZ1bmN0aW9uRXhlY3V0YWJsZTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgJKHJldmlzaW9u
IDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIGNsYXNzIFVubGlua2VkRXZhbENvZGVCbG9j
azsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZTsKIGNsYXNzIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKLWNsYXNzIEpT
R2xvYmFsRGF0YTsKK2NsYXNzIFZNOwogc3RydWN0IFBhcnNlckVycm9yOwogY2xhc3MgU291cmNl
Q29kZTsKIGNsYXNzIFNvdXJjZVByb3ZpZGVyOwpAQCAtMTIwLDggKzEyMCw4IEBAIHN0cnVjdCBT
b3VyY2VDb2RlVmFsdWUgewogICAgIHsKICAgICB9CiAKLSAgICBTb3VyY2VDb2RlVmFsdWUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIGNlbGwsIGludDY0X3QgYWdlKQotICAgICAg
ICA6IGNlbGwoZ2xvYmFsRGF0YSwgY2VsbCkKKyAgICBTb3VyY2VDb2RlVmFsdWUoVk0mIHZtLCBK
U0NlbGwqIGNlbGwsIGludDY0X3QgYWdlKQorICAgICAgICA6IGNlbGwodm0sIGNlbGwpCiAgICAg
ICAgICwgYWdlKGFnZSkKICAgICB7CiAgICAgfQpAQCAtMjM5LDkgKzIzOSw5IEBAIGNsYXNzIENv
ZGVDYWNoZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8Q29kZUNhY2hlPiBjcmVh
dGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgQ29kZUNhY2hlKTsgfQogCi0gICAgVW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrKiBnZXRQcm9ncmFtQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSYsIFByb2dy
YW1FeGVjdXRhYmxlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTUGFyc2VyU3RyaWN0bmVzcywgRGVi
dWdnZXJNb2RlLCBQcm9maWxlck1vZGUsIFBhcnNlckVycm9yJik7Ci0gICAgVW5saW5rZWRFdmFs
Q29kZUJsb2NrKiBnZXRFdmFsQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSYsIEpTU2NvcGUqLCBFdmFs
RXhlY3V0YWJsZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1BhcnNlclN0cmljdG5lc3MsIERlYnVn
Z2VyTW9kZSwgUHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYpOwotICAgIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKiBnZXRGdW5jdGlvbkV4ZWN1dGFibGVGcm9tR2xvYmFsQ29kZShKU0dsb2Jh
bERhdGEmLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgU291cmNlQ29kZSYsIFBhcnNlckVycm9y
Jik7CisgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBnZXRQcm9ncmFtQ29kZUJsb2NrKFZN
JiwgUHJvZ3JhbUV4ZWN1dGFibGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNQYXJzZXJTdHJpY3Ru
ZXNzLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImKTsKKyAgICBVbmxp
bmtlZEV2YWxDb2RlQmxvY2sqIGdldEV2YWxDb2RlQmxvY2soVk0mLCBKU1Njb3BlKiwgRXZhbEV4
ZWN1dGFibGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNQYXJzZXJTdHJpY3RuZXNzLCBEZWJ1Z2dl
ck1vZGUsIFByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZSogZ2V0RnVuY3Rpb25FeGVjdXRhYmxlRnJvbUdsb2JhbENvZGUoVk0mLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgU291cmNlQ29kZSYsIFBhcnNlckVycm9yJik7CiAgICAgfkNv
ZGVDYWNoZSgpOwogCiAgICAgdm9pZCBjbGVhcigpCkBAIC0yNTMsNyArMjUzLDcgQEAgcHJpdmF0
ZToKICAgICBDb2RlQ2FjaGUoKTsKIAogICAgIHRlbXBsYXRlIDxjbGFzcyBVbmxpbmtlZENvZGVC
bG9ja1R5cGUsIGNsYXNzIEV4ZWN1dGFibGVUeXBlPiAKLSAgICBVbmxpbmtlZENvZGVCbG9ja1R5
cGUqIGdldENvZGVCbG9jayhKU0dsb2JhbERhdGEmLCBKU1Njb3BlKiwgRXhlY3V0YWJsZVR5cGUq
LCBjb25zdCBTb3VyY2VDb2RlJiwgSlNQYXJzZXJTdHJpY3RuZXNzLCBEZWJ1Z2dlck1vZGUsIFBy
b2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImKTsKKyAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGdl
dENvZGVCbG9jayhWTSYsIEpTU2NvcGUqLCBFeGVjdXRhYmxlVHlwZSosIGNvbnN0IFNvdXJjZUNv
ZGUmLCBKU1BhcnNlclN0cmljdG5lc3MsIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlLCBQYXJz
ZXJFcnJvciYpOwogCiAgICAgQ29kZUNhY2hlTWFwIG1fc291cmNlQ29kZTsKIH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMu
Y3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25JZGVudGlmaWVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDE1ICsyMywxNSBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotI2RlZmluZSBJTklUSUFMSVpFX1BST1BFUlRZX05BTUUobmFt
ZSkgLCBuYW1lKGdsb2JhbERhdGEsICNuYW1lKQotI2RlZmluZSBJTklUSUFMSVpFX0tFWVdPUkQo
bmFtZSkgLCBuYW1lIyNLZXl3b3JkKGdsb2JhbERhdGEsICNuYW1lKQorI2RlZmluZSBJTklUSUFM
SVpFX1BST1BFUlRZX05BTUUobmFtZSkgLCBuYW1lKHZtLCAjbmFtZSkKKyNkZWZpbmUgSU5JVElB
TElaRV9LRVlXT1JEKG5hbWUpICwgbmFtZSMjS2V5d29yZCh2bSwgI25hbWUpCiAKLUNvbW1vbklk
ZW50aWZpZXJzOjpDb21tb25JZGVudGlmaWVycyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitD
b21tb25JZGVudGlmaWVyczo6Q29tbW9uSWRlbnRpZmllcnMoVk0qIHZtKQogICAgIDogbnVsbElk
ZW50aWZpZXIoKQogICAgICwgZW1wdHlJZGVudGlmaWVyKElkZW50aWZpZXI6OkVtcHR5SWRlbnRp
ZmllcikKLSAgICAsIHVuZGVyc2NvcmVQcm90byhnbG9iYWxEYXRhLCAiX19wcm90b19fIikKLSAg
ICAsIHRoaXNJZGVudGlmaWVyKGdsb2JhbERhdGEsICJ0aGlzIikKLSAgICAsIHVzZVN0cmljdElk
ZW50aWZpZXIoZ2xvYmFsRGF0YSwgInVzZSBzdHJpY3QiKQorICAgICwgdW5kZXJzY29yZVByb3Rv
KHZtLCAiX19wcm90b19fIikKKyAgICAsIHRoaXNJZGVudGlmaWVyKHZtLCAidGhpcyIpCisgICAg
LCB1c2VTdHJpY3RJZGVudGlmaWVyKHZtLCAidXNlIHN0cmljdCIpCiAgICAgSlNDX0NPTU1PTl9J
REVOVElGSUVSU19FQUNIX0tFWVdPUkQoSU5JVElBTElaRV9LRVlXT1JEKQogICAgIEpTQ19DT01N
T05fSURFTlRJRklFUlNfRUFDSF9QUk9QRVJUWV9OQU1FKElOSVRJQUxJWkVfUFJPUEVSVFlfTkFN
RSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZp
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
SWRlbnRpZmllcnMuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDggKzE2
MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIENvbW1vbklkZW50aWZpZXJzIHsKICAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tbW9uSWRlbnRpZmllcnMpOyBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKICAgICBwcml2YXRlOgotICAgICAgICBDb21tb25JZGVudGlmaWVycyhK
U0dsb2JhbERhdGEqKTsKLSAgICAgICAgZnJpZW5kIGNsYXNzIEpTR2xvYmFsRGF0YTsKKyAgICAg
ICAgQ29tbW9uSWRlbnRpZmllcnMoVk0qKTsKKyAgICAgICAgZnJpZW5kIGNsYXNzIFZNOwogCiAg
ICAgcHVibGljOgogICAgICAgICBjb25zdCBJZGVudGlmaWVyIG51bGxJZGVudGlmaWVyOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJ
KHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
blNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIEFMV0FZU19JTkxJ
TkUgRXhlY1N0YXRlKiBhcml0eUNoZWNrRm9yKEUKIGlubGluZSBib29sIG9wSW4oRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHByb3BOYW1lLCBKU1ZhbHVlIGJhc2VWYWwpCiB7CiAgICAgaWYgKCFi
YXNlVmFsLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlv
biA9IGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKGV4ZWMsICJpbiIsIGJhc2VWYWwpOworICAgICAg
ICBleGVjLT52bSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKGV4ZWMsICJp
biIsIGJhc2VWYWwpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC05Miw3ICs5
Miw3IEBAIGlubGluZSBib29sIG9wSW4oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHUKICAgICAgICAg
cmV0dXJuIGJhc2VPYmotPmhhc1Byb3BlcnR5KGV4ZWMsIGpzQ2FzdDxOYW1lSW5zdGFuY2UqPihw
cm9wTmFtZS5hc0NlbGwoKSktPnByaXZhdGVOYW1lKCkpOwogCiAgICAgSWRlbnRpZmllciBwcm9w
ZXJ0eShleGVjLCBwcm9wTmFtZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAgIGlm
IChleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uKQorICAgIGlmIChleGVjLT52bSgpLmV4Y2Vw
dGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBiYXNlT2JqLT5oYXNQcm9w
ZXJ0eShleGVjLCBwcm9wZXJ0eSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcg
KzM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBib29sIGNoZWNrU3ludGF4KEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlKiByZXR1cm5lZEV4Y2VwdGlvbikK
IHsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKLSAgICBSRUxFQVNFX0FTU0VSVChleGVj
LT5nbG9iYWxEYXRhKCkuaWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50
SWRlbnRpZmllclRhYmxlKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuaWRlbnRp
ZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOwog
CiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHByb2dyYW0gPSBQcm9ncmFtRXhlY3V0YWJsZTo6Y3Jl
YXRlKGV4ZWMsIHNvdXJjZSk7CiAgICAgSlNPYmplY3QqIGVycm9yID0gcHJvZ3JhbS0+Y2hlY2tT
eW50YXgoZXhlYyk7CkBAIC01NSwxNyArNTUsMTcgQEAgYm9vbCBjaGVja1N5bnRheChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IAogSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUqIHJldHVybmVk
RXhjZXB0aW9uKQogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5pZGVudGlmaWVyVGFibGUgPT0gd3RmVGhyZWFkRGF0
YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWMt
Pmdsb2JhbERhdGEoKS5pc0NvbGxlY3RvckJ1c3koKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoZXhl
Yy0+dm0oKS5pZGVudGlmaWVyVGFibGUgPT0gd3RmVGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlm
aWVyVGFibGUoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWMtPnZtKCkuaXNDb2xsZWN0b3JC
dXN5KCkpOwogCiAgICAgQ29kZVByb2ZpbGluZyBwcm9maWxlKHNvdXJjZSk7CiAKICAgICBQcm9n
cmFtRXhlY3V0YWJsZSogcHJvZ3JhbSA9IFByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYywg
c291cmNlKTsKICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgaWYgKHJldHVybmVkRXhjZXB0
aW9uKQotICAgICAgICAgICAgKnJldHVybmVkRXhjZXB0aW9uID0gZXhlYy0+Z2xvYmFsRGF0YSgp
LmV4Y2VwdGlvbjsKKyAgICAgICAgICAgICpyZXR1cm5lZEV4Y2VwdGlvbiA9IGV4ZWMtPnZtKCku
ZXhjZXB0aW9uOwogCi0gICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBKU1Zh
bHVlKCk7CisgICAgICAgIGV4ZWMtPnZtKCkuZXhjZXB0aW9uID0gSlNWYWx1ZSgpOwogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTQ4Njgz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODEsOSArODEsOSBAQCBEYXRlQ29uc3RydWN0b3I6OkRhdGVDb25z
dHJ1Y3RvcihKU0dsb2JhCiAKIHZvaWQgRGF0ZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIERhdGVQcm90b3R5cGUqIGRhdGVQcm90b3R5cGUpCiB7Ci0gICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBkYXRlUHJvdG90eXBlLT5jbGFz
c0luZm8oKS0+Y2xhc3NOYW1lKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVj
LT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIGRhdGVQcm90
b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGgsIGpzTnVtYmVyKDcpLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7
CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwgZGF0ZVByb3RvdHlwZS0+Y2xh
c3NJbmZvKCktPmNsYXNzTmFtZSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhl
Yy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgZGF0ZVByb3RvdHlwZSwg
RG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVt
YmVyKDcpLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiB9CiAKIGJvb2wgRGF0
ZUNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCAmc2xvdCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5o
CShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRl
Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsOSArNDAsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAg
ICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzUsMjIgKzM1LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogY29uc3QgQ2xhc3NJbmZv
IERhdGVJbnN0YW5jZTo6c19pbmZvID0geyJEYXRlIiwgJkpTV3JhcHBlck9iamVjdDo6c19pbmZv
LCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKERhdGVJbnN0YW5jZSl9OwogCiBEYXRlSW5zdGFu
Y2U6OkRhdGVJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQot
ICAgIDogSlNXcmFwcGVyT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKQorICAg
IDogSlNXcmFwcGVyT2JqZWN0KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSkKIHsKIH0KIAotdm9pZCBE
YXRlSW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3Zv
aWQgRGF0ZUluc3RhbmNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7Ci0gICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwog
ICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgc2V0SW50ZXJuYWxWYWx1ZShnbG9i
YWxEYXRhLCBqc05hTigpKTsKKyAgICBzZXRJbnRlcm5hbFZhbHVlKHZtLCBqc05hTigpKTsKIH0K
IAotdm9pZCBEYXRlSW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgZG91YmxlIHRpbWUpCit2b2lkIERhdGVJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBkb3VibGUgdGltZSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRh
KTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZz
X2luZm8pKTsKLSAgICBzZXRJbnRlcm5hbFZhbHVlKGdsb2JhbERhdGEsIGpzTnVtYmVyKHRpbWVD
bGlwKHRpbWUpKSk7CisgICAgc2V0SW50ZXJuYWxWYWx1ZSh2bSwganNOdW1iZXIodGltZUNsaXAo
dGltZSkpKTsKIH0KIAogdm9pZCBEYXRlSW5zdGFuY2U6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQpA
QCAtNjUsNyArNjUsNyBAQCBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogRGF0ZUluc3RhbmNlOjpj
CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCFtX2RhdGEpCi0gICAgICAgIG1fZGF0YSA9
IGV4ZWMtPmdsb2JhbERhdGEoKS5kYXRlSW5zdGFuY2VDYWNoZS5hZGQobWlsbGkpOworICAgICAg
ICBtX2RhdGEgPSBleGVjLT52bSgpLmRhdGVJbnN0YW5jZUNhY2hlLmFkZChtaWxsaSk7CiAKICAg
ICBpZiAobV9kYXRhLT5tX2dyZWdvcmlhbkRhdGVUaW1lQ2FjaGVkRm9yTVMgIT0gbWlsbGkpIHsK
ICAgICAgICAgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG1pbGxpLCBmYWxzZSwgbV9kYXRh
LT5tX2NhY2hlZEdyZWdvcmlhbkRhdGVUaW1lKTsKQEAgLTgxLDcgKzgxLDcgQEAgY29uc3QgR3Jl
Z29yaWFuRGF0ZVRpbWUqIERhdGVJbnN0YW5jZTo6YwogICAgICAgICByZXR1cm4gMDsKIAogICAg
IGlmICghbV9kYXRhKQotICAgICAgICBtX2RhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCkuZGF0ZUlu
c3RhbmNlQ2FjaGUuYWRkKG1pbGxpKTsKKyAgICAgICAgbV9kYXRhID0gZXhlYy0+dm0oKS5kYXRl
SW5zdGFuY2VDYWNoZS5hZGQobWlsbGkpOwogCiAgICAgaWYgKG1fZGF0YS0+bV9ncmVnb3JpYW5E
YXRlVGltZVVUQ0NhY2hlZEZvck1TICE9IG1pbGxpKSB7CiAgICAgICAgIG1zVG9HcmVnb3JpYW5E
YXRlVGltZShleGVjLCBtaWxsaSwgdHJ1ZSwgbV9kYXRhLT5tX2NhY2hlZEdyZWdvcmlhbkRhdGVU
aW1lVVRDKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5j
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0
YW5jZS5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EYXRlSW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICBjbGFzcyBEYXRlSW5zdGFuY2UgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0
IHsKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIERhdGVJbnN0YW5j
ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0dsb2JhbERhdGEmKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0dsb2JhbERhdGEmLCBkb3VibGUpOworICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
LCBkb3VibGUpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgCkBA
IC0zOSwxNCArMzksMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBEYXRlSW5z
dGFuY2UqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBkb3Vi
bGUgZGF0ZSkKICAgICAgICAgewogICAgICAgICAgICAgRGF0ZUluc3RhbmNlKiBpbnN0YW5jZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPERhdGVJbnN0YW5jZT4oKmV4ZWMtPmhlYXAoKSkp
IERhdGVJbnN0YW5jZShleGVjLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaW5zdGFuY2UtPmZp
bmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZGF0ZSk7CisgICAgICAgICAgICBpbnN0
YW5jZS0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwgZGF0ZSk7CiAgICAgICAgICAgICByZXR1
cm4gaW5zdGFuY2U7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgRGF0ZUluc3RhbmNlKiBj
cmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgewog
ICAgICAgICAgICAgRGF0ZUluc3RhbmNlKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPERhdGVJbnN0YW5jZT4oKmV4ZWMtPmhlYXAoKSkpIERhdGVJbnN0YW5jZShleGVjLCBz
dHJ1Y3R1cmUpOwotICAgICAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmds
b2JhbERhdGEoKSk7CisgICAgICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+
dm0oKSk7CiAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgICAgIH0KIApAQCAtNjgs
OSArNjgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBjYWxjdWxhdGVH
cmVnb3JpYW5EYXRlVGltZVVUQyhleGVjKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAg
ICAgfQogCiAgICAgcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RhdGVQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTA5LDcgKzUwOSw3IEBAIERhdGVQcm90b3R5cGU6OkRhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiAK
IAogdm9pZCBEYXRlUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpT
R2xvYmFsT2JqZWN0KikKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxE
YXRhKCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwogICAgIEFTU0VS
VChpbmhlcml0cygmc19pbmZvKSk7CiAKICAgICAvLyBUaGUgY29uc3RydWN0b3Igd2lsbCBiZSBh
ZGRlZCBsYXRlciwgYWZ0ZXIgRGF0ZUNvbnN0cnVjdG9yIGhhcyBiZWVuIGJ1aWx0LgpAQCAtODgy
LDcgKzg4Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIAog
ICAgIGRvdWJsZSBtaWxsaSA9IHRpbWVDbGlwKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4
ZWMpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKG1pbGxpKTsKLSAgICB0aGlzRGF0
ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIHJlc3VsdCk7CisgICAg
dGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+dm0oKSwgcmVzdWx0KTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKQEAgLTg5Nyw3ICs4OTcsNyBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgc2V0TmV3VmFsdWVGcm9tVGltCiAgICAgCiAgICAgaWYgKCFl
eGVjLT5hcmd1bWVudENvdW50KCkgfHwgc3RkOjppc25hbihtaWxsaSkpIHsKICAgICAgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc05hTigpOwotICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxW
YWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIHJlc3VsdCk7CisgICAgICAgIHRoaXNEYXRlT2JqLT5z
ZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPnZtKCksIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CiAgICAgIApAQCAtOTE0LDEyICs5MTQsMTIgQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbVRpbQogICAgIGdyZWdvcmlhbkRh
dGVUaW1lLmNvcHlGcm9tKCpvdGhlcik7CiAgICAgaWYgKCFmaWxsU3RydWN0dXJlc1VzaW5nVGlt
ZUFyZ3MoZXhlYywgbnVtQXJnc1RvVXNlLCAmbXMsICZncmVnb3JpYW5EYXRlVGltZSkpIHsKICAg
ICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc05hTigpOwotICAgICAgICB0aGlzRGF0ZU9iai0+c2V0
SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIHJlc3VsdCk7CisgICAgICAgIHRoaXNE
YXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPnZtKCksIHJlc3VsdCk7CiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9IAogICAgIAogICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKGV4ZWMsIGdyZWdvcmlhbkRh
dGVUaW1lLCBtcywgaW5wdXRJc1VUQykpOwotICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZh
bHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcmVzdWx0KTsKKyAgICB0aGlzRGF0ZU9iai0+c2V0SW50
ZXJuYWxWYWx1ZShleGVjLT52bSgpLCByZXN1bHQpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKIH0KIApAQCAtOTMyLDcgKzkzMiw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBzZXROZXdWYWx1ZUZyb21EYXQKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNE
YXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkg
ewogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTmFOKCk7Ci0gICAgICAgIHRoaXNEYXRlT2Jq
LT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcmVzdWx0KTsKKyAgICAgICAg
dGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+dm0oKSwgcmVzdWx0KTsKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0gICAgICAKICAgICAKQEAg
LTk1NCwxMiArOTU0LDEyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBzZXROZXdWYWx1ZUZyb21E
YXQKICAgICAKICAgICBpZiAoIWZpbGxTdHJ1Y3R1cmVzVXNpbmdEYXRlQXJncyhleGVjLCBudW1B
cmdzVG9Vc2UsICZtcywgJmdyZWdvcmlhbkRhdGVUaW1lKSkgewogICAgICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzTmFOKCk7Ci0gICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgcmVzdWx0KTsKKyAgICAgICAgdGhpc0RhdGVPYmotPnNldEludGVy
bmFsVmFsdWUoZXhlYy0+dm0oKSwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOwogICAgIH0gCiAgICAgICAgICAgIAogICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lLCBt
cywgaW5wdXRJc1VUQykpOwotICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgcmVzdWx0KTsKKyAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1
ZShleGVjLT52bSgpLCByZXN1bHQpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKIH0KIApAQCAtMTA1Niw3ICsxMDU2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdQogICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBhc0RhdGVJbnN0
YW5jZSh0aGlzVmFsdWUpOwogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKSB7IAogICAg
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTmFOKCk7Ci0gICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJ
bnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcmVzdWx0KTsKKyAgICAgICAgdGhpc0Rh
dGVPYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+dm0oKSwgcmVzdWx0KTsKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KIApAQCAtMTA3OCwxMyArMTA3OCwx
MyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAgICAgZG91Ymxl
IHllYXIgPSBleGVjLT5hcmd1bWVudCgwKS50b0ludGVnZXJQcmVzZXJ2ZU5hTihleGVjKTsKICAg
ICBpZiAoIXN0ZDo6aXNmaW5pdGUoeWVhcikpIHsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c05hTigpOwotICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9i
YWxEYXRhKCksIHJlc3VsdCk7CisgICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVl
KGV4ZWMtPnZtKCksIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKICAgICB9CiAKICAgICBncmVnb3JpYW5EYXRlVGltZS5zZXRZZWFyKHRvSW50MzIoKHll
YXIgPj0gMCAmJiB5ZWFyIDw9IDk5KSA/ICh5ZWFyICsgMTkwMCkgOiB5ZWFyKSk7CiAgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc051bWJlcihncmVnb3JpYW5EYXRlVGltZVRvTVMoZXhlYywgZ3JlZ29y
aWFuRGF0ZVRpbWUsIG1zLCBmYWxzZSkpOwotICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZh
bHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcmVzdWx0KTsKKyAgICB0aGlzRGF0ZU9iai0+c2V0SW50
ZXJuYWxWYWx1ZShleGVjLT52bSgpLCByZXN1bHQpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKIH0KIApAQCAtMTExMSw3ICsxMTExLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAgICAgCi0gICAgSlNWYWx1
ZSB0b0lTT1ZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3Bl
cnR5TmFtZXMtPnRvSVNPU3RyaW5nKTsKKyAgICBKU1ZhbHVlIHRvSVNPVmFsdWUgPSBvYmplY3Qt
PmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPnRvSVNPU3RyaW5nKTsKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJv
dG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0
ZVByb3RvdHlwZS5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EYXRlUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2LDkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87
CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pOwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDM3ICs0NywzNyBAQCBzdGF0aWMgY29uc3QgY2hhciogc291cmNlVVJMUHJvcGVydHlOYW1lCiBK
U09iamVjdCogY3JlYXRlRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQogewogICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAg
IHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCks
IGdsb2JhbE9iamVjdC0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAgcmV0dXJuIEVy
cm9ySW5zdGFuY2U6OmNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdC0+ZXJy
b3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVFdmFsRXJyb3Io
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewog
ICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAgIHJldHVybiBFcnJvckluc3RhbmNl
OjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+ZXZhbEVy
cm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAgcmV0dXJu
IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdC0+
ZXZhbEVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CiB9CiAK
IEpTT2JqZWN0KiBjcmVhdGVSYW5nZUVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBBU1NFUlQoIW1lc3NhZ2UuaXNFbXB0eSgp
KTsKLSAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFs
RGF0YSgpLCBnbG9iYWxPYmplY3QtPnJhbmdlRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVj
dHVyZSgpLCBtZXNzYWdlKTsKKyAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2Jh
bE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5yYW5nZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJy
b3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVSZWZlcmVuY2VF
cnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
CiB7CiAgICAgQVNTRVJUKCFtZXNzYWdlLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIEVycm9ySW5z
dGFuY2U6OmNyZWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5y
ZWZlcmVuY2VFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOwor
ICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9i
YWxPYmplY3QtPnJlZmVyZW5jZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwg
bWVzc2FnZSk7CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVTeW50YXhFcnJvcihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgQVNTRVJUKCFt
ZXNzYWdlLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShnbG9i
YWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5zeW50YXhFcnJvckNvbnN0cnVj
dG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOworICAgIHJldHVybiBFcnJvckluc3Rh
bmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QtPnN5bnRheEVycm9y
Q29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CiB9CiAKIEpTT2JqZWN0
KiBjcmVhdGVUeXBlRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQogewogICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAgIHJl
dHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGds
b2JhbE9iamVjdC0+dHlwZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVz
c2FnZSk7CisgICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShnbG9iYWxPYmplY3QtPnZt
KCksIGdsb2JhbE9iamVjdC0+dHlwZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUo
KSwgbWVzc2FnZSk7CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpAQCAtODgsNyArODgsNyBAQCBKU09iamVj
dCogY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoCiBKU09iamVjdCogY3JlYXRlVVJJRXJy
b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQog
ewogICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAgIHJldHVybiBFcnJvckluc3Rh
bmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+VVJJ
RXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKKyAgICByZXR1
cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0
LT5VUklFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOwogfQog
CiBKU09iamVjdCogY3JlYXRlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCkBAIC0xMzMsMTUgKzEzMywxNSBAQCBKU09iamVjdCogY3JlYXRlVVJJRXJyb3IoRXhl
Y1N0YXRlKiBleGVjCiAKIEpTT2JqZWN0KiBhZGRFcnJvckluZm8oQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEpTT2JqZWN0KiBlcnJvciwgaW50IGxpbmUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkK
IHsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmY2FsbEZyYW1lLT5nbG9iYWxEYXRh
KCk7CisgICAgVk0qIHZtID0gJmNhbGxGcmFtZS0+dm0oKTsKICAgICBjb25zdCBTdHJpbmcmIHNv
dXJjZVVSTCA9IHNvdXJjZS5wcm92aWRlcigpLT51cmwoKTsKIAogICAgIGlmIChsaW5lICE9IC0x
KQotICAgICAgICBlcnJvci0+cHV0RGlyZWN0KCpnbG9iYWxEYXRhLCBJZGVudGlmaWVyKGdsb2Jh
bERhdGEsIGxpbmVQcm9wZXJ0eU5hbWUpLCBqc051bWJlcihsaW5lKSwgUmVhZE9ubHkgfCBEb250
RGVsZXRlKTsKKyAgICAgICAgZXJyb3ItPnB1dERpcmVjdCgqdm0sIElkZW50aWZpZXIodm0sIGxp
bmVQcm9wZXJ0eU5hbWUpLCBqc051bWJlcihsaW5lKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsK
ICAgICBpZiAoIXNvdXJjZVVSTC5pc051bGwoKSkKLSAgICAgICAgZXJyb3ItPnB1dERpcmVjdCgq
Z2xvYmFsRGF0YSwgSWRlbnRpZmllcihnbG9iYWxEYXRhLCBzb3VyY2VVUkxQcm9wZXJ0eU5hbWUp
LCBqc1N0cmluZyhnbG9iYWxEYXRhLCBzb3VyY2VVUkwpLCBSZWFkT25seSB8IERvbnREZWxldGUp
OworICAgICAgICBlcnJvci0+cHV0RGlyZWN0KCp2bSwgSWRlbnRpZmllcih2bSwgc291cmNlVVJM
UHJvcGVydHlOYW1lKSwganNTdHJpbmcodm0sIHNvdXJjZVVSTCksIFJlYWRPbmx5IHwgRG9udERl
bGV0ZSk7CiAKLSAgICBnbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+YWRkU3RhY2tUcmFjZUlmTmVj
ZXNzYXJ5KGNhbGxGcmFtZSwgZXJyb3IpOworICAgIHZtLT5pbnRlcnByZXRlci0+YWRkU3RhY2tU
cmFjZUlmTmVjZXNzYXJ5KGNhbGxGcmFtZSwgZXJyb3IpOwogCiAgICAgcmV0dXJuIGVycm9yOwog
fQpAQCAtMTU2LDE0ICsxNTYsMTQgQEAgYm9vbCBoYXNFcnJvckluZm8oRXhlY1N0YXRlKiBleGVj
LCBKU09iagogSlNWYWx1ZSB0aHJvd0Vycm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBlcnJv
cikKIHsKICAgICBJbnRlcnByZXRlcjo6YWRkU3RhY2tUcmFjZUlmTmVjZXNzYXJ5KGV4ZWMsIGVy
cm9yKTsKLSAgICBleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gZXJyb3I7CisgICAgZXhl
Yy0+dm0oKS5leGNlcHRpb24gPSBlcnJvcjsKICAgICByZXR1cm4gZXJyb3I7CiB9CiAKIEpTT2Jq
ZWN0KiB0aHJvd0Vycm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGVycm9yKQogewogICAg
IEludGVycHJldGVyOjphZGRTdGFja1RyYWNlSWZOZWNlc3NhcnkoZXhlYywgZXJyb3IpOwotICAg
IGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBlcnJvcjsKKyAgICBleGVjLT52bSgpLmV4
Y2VwdGlvbiA9IGVycm9yOwogICAgIHJldHVybiBlcnJvcjsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvci5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3
IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEV4ZWNTdGF0ZTsKLSAgICBjbGFzcyBK
U0dsb2JhbERhdGE7CisgICAgY2xhc3MgVk07CiAgICAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiAg
ICAgY2xhc3MgSlNPYmplY3Q7CiAgICAgY2xhc3MgU291cmNlQ29kZTsKQEAgLTg5LDcgKzg5LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBTdHJpY3RNb2RlVHlwZUVycm9yRnVu
Y3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgICAg
IHsKICAgICAgICAgICAgIFN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbiogZnVuY3Rpb24gPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24+KCpl
eGVjLT5oZWFwKCkpKSBTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24oZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUsIG1lc3NhZ2UpOwotICAgICAgICAgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9u
KGV4ZWMtPmdsb2JhbERhdGEoKSwgU3RyaW5nKCkpOworICAgICAgICAgICAgZnVuY3Rpb24tPmZp
bmlzaENyZWF0aW9uKGV4ZWMtPnZtKCksIFN0cmluZygpKTsKICAgICAgICAgICAgIHJldHVybiBm
dW5jdGlvbjsKICAgICAgICAgfQogICAgIApAQCAtMTE5LDkgKzExOSw5IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAKKyAg
ICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpIAogICAgICAgICB7IAotICAg
ICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOyAKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7IAogICAgICAgICB9CiAKICAgICBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE0
ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMCArMzksMTAgQEAgRXJyb3JDb25zdHJ1Y3Rvcjo6
RXJyb3JDb25zdHJ1Y3RvcihKU0dsbwogCiB2b2lkIEVycm9yQ29uc3RydWN0b3I6OmZpbmlzaENy
ZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXJyb3JQcm90b3R5cGUqIGVycm9yUHJvdG90eXBlKQog
ewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXJyb3JQcm90
b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGV4ZWMtPnZtKCksIGVycm9yUHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKTsKICAg
ICAvLyBFQ01BIDE1LjExLjMuMSBFcnJvci5wcm90b3R5cGUKLSAgICBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90
b3R5cGUsIGVycm9yUHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7
Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigxKSwgRG9udERlbGV0ZSB8IFJlYWRP
bmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZt
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIGVycm9yUHJvdG90eXBlLCBEb250
RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIo
MSksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKIH0KIAogLy8gRUNNQSAxNS45
LjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0
cnVjdG9yLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Vycm9yQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsOSArNDEsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsK
IAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
dHlwZSkgCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAKICAgICAg
ICAgeyAKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCAmc19pbmZvKTsgCisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8pOyAKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAJKHJldmlz
aW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFu
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw4IEBAIEFTU0VSVF9IQVNfVFJJVklB
TF9ERVNUUlVDVE9SKEVycm9ySW5zdGEKIAogY29uc3QgQ2xhc3NJbmZvIEVycm9ySW5zdGFuY2U6
OnNfaW5mbyA9IHsgIkVycm9yIiwgJkpTTm9uRmluYWxPYmplY3Q6OnNfaW5mbywgMCwgMCwgQ1JF
QVRFX01FVEhPRF9UQUJMRShFcnJvckluc3RhbmNlKSB9OwogCi1FcnJvckluc3RhbmNlOjpFcnJv
ckluc3RhbmNlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
Ci0gICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKK0Vycm9ySW5z
dGFuY2U6OkVycm9ySW5zdGFuY2UoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6
IEpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKICAgICAsIG1fYXBwZW5kU291cmNlVG9N
ZXNzYWdlKGZhbHNlKQogewogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXJyb3JJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Vycm9ySW5zdGFuY2UuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMSAr
MzEsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5m
byBzX2luZm87CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFs
RGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEVycm9ySW5zdGFuY2VUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oRXJyb3JJbnN0
YW5jZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KIAotICAgICAg
ICBzdGF0aWMgRXJyb3JJbnN0YW5jZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKKyAgICAgICAgc3Rh
dGljIEVycm9ySW5zdGFuY2UqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEVycm9ySW5zdGFu
Y2UqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXJyb3JJbnN0YW5jZT4o
Z2xvYmFsRGF0YS5oZWFwKSkgRXJyb3JJbnN0YW5jZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwot
ICAgICAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIG1lc3NhZ2Up
OworICAgICAgICAgICAgRXJyb3JJbnN0YW5jZSogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxFcnJvckluc3RhbmNlPih2bS5oZWFwKSkgRXJyb3JJbnN0YW5jZSh2bSwgc3Ry
dWN0dXJlKTsKKyAgICAgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwgbWVzc2Fn
ZSk7CiAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgICAgIH0KIAogICAgICAgICBz
dGF0aWMgRXJyb3JJbnN0YW5jZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTVmFsdWUgbWVzc2FnZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwgbWVzc2FnZS5pc1VuZGVmaW5l
ZCgpID8gU3RyaW5nKCkgOiBtZXNzYWdlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Cisg
ICAgICAgICAgICByZXR1cm4gY3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgbWVzc2FnZS5p
c1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBtZXNzYWdlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGFwcGVuZFNvdXJjZVRvTWVzc2FnZSgp
IHsgcmV0dXJuIG1fYXBwZW5kU291cmNlVG9NZXNzYWdlOyB9CkBAIC01MywxNCArNTMsMTQgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgY2xlYXJBcHBlbmRTb3VyY2VUb01lc3NhZ2Uo
KSB7IG1fYXBwZW5kU291cmNlVG9NZXNzYWdlID0gZmFsc2U7IH0KIAogICAgIHByb3RlY3RlZDoK
LSAgICAgICAgZXhwbGljaXQgRXJyb3JJbnN0YW5jZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUq
KTsKKyAgICAgICAgZXhwbGljaXQgRXJyb3JJbnN0YW5jZShWTSYsIFN0cnVjdHVyZSopOwogCi0g
ICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCisgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOwogICAgICAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKICAgICAgICAgICAg
IGlmICghbWVzc2FnZS5pc051bGwoKSkKLSAgICAgICAgICAgICAgICBwdXREaXJlY3QoZ2xvYmFs
RGF0YSwgZ2xvYmFsRGF0YS5wcm9wZXJ0eU5hbWVzLT5tZXNzYWdlLCBqc1N0cmluZygmZ2xvYmFs
RGF0YSwgbWVzc2FnZSksIERvbnRFbnVtKTsKKyAgICAgICAgICAgICAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPm1lc3NhZ2UsIGpzU3RyaW5nKCZ2bSwgbWVzc2FnZSksIERvbnRF
bnVtKTsKICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgbV9hcHBlbmRTb3VyY2VUb01lc3NhZ2U7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5
cGUuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FcnJvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDE1ICs1MCwxNSBAQCBj
b25zdCBDbGFzc0luZm8gRXJyb3JQcm90b3R5cGU6OnNfaW5mbyA9CiAqLwogCiBFcnJvclByb3Rv
dHlwZTo6RXJyb3JQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKLSAgICA6IEVycm9ySW5zdGFuY2UoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpCisg
ICAgOiBFcnJvckluc3RhbmNlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSkKIHsKIH0KIAogdm9pZCBF
cnJvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCopCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCAi
Iik7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwgIiIpOwogICAgIEFTU0VS
VChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBTdHJp
bmcoQVNDSUlMaXRlcmFsKCJFcnJvciIpKSksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3QoZXhl
Yy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyhl
eGVjLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJFcnJvciIpKSksIERvbnRFbnVtKTsKIH0KIAogYm9v
bCBFcnJvclByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QgJnNsb3Qp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBl
LmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vy
cm9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDkgKzQwLDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsK
IAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
dHlwZSkKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oRXJyb3JJbnN0YW5jZVR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhFcnJvckluc3RhbmNlVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVs
cGVycy5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBA
IEpTVmFsdWUgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpkZWZhdWwKICAgICByZXR1cm4gSlNW
YWx1ZShRTmFOKTsKIH0KIAotSlNPYmplY3QqIGNyZWF0ZVRlcm1pbmF0ZWRFeGVjdXRpb25FeGNl
cHRpb24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorSlNPYmplY3QqIGNyZWF0ZVRlcm1pbmF0
ZWRFeGVjdXRpb25FeGNlcHRpb24oVk0qIHZtKQogewotICAgIHJldHVybiBUZXJtaW5hdGVkRXhl
Y3V0aW9uRXJyb3I6OmNyZWF0ZSgqZ2xvYmFsRGF0YSk7CisgICAgcmV0dXJuIFRlcm1pbmF0ZWRF
eGVjdXRpb25FcnJvcjo6Y3JlYXRlKCp2bSk7CiB9CiAKIGJvb2wgaXNUZXJtaW5hdGVkRXhlY3V0
aW9uRXhjZXB0aW9uKEpTT2JqZWN0KiBvYmplY3QpCkBAIC0xNDQsNyArMTQ0LDcgQEAgSlNPYmpl
Y3QqIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdAogSlNPYmplY3QqIHRocm93VGVybWlu
YXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSW50ZXJwcmV0
ZXI6OkVycm9ySGFuZGxpbmdNb2RlIG1vZGUoZXhlYyk7Ci0gICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgY3JlYXRlVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbigmZXhlYy0+Z2xvYmFsRGF0
YSgpKSk7CisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVGVybWluYXRlZEV4ZWN1
dGlvbkV4Y2VwdGlvbigmZXhlYy0+dm0oKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJz
LmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
Y2VwdGlvbkhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotSlNPYmplY3QqIGNyZWF0ZVRlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRp
b24oSlNHbG9iYWxEYXRhKik7CitKU09iamVjdCogY3JlYXRlVGVybWluYXRlZEV4ZWN1dGlvbkV4
Y2VwdGlvbihWTSopOwogYm9vbCBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNPYmpl
Y3QqKTsKIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0
aW9uKEpTVmFsdWUpOwogCkBAIC01NCw4ICs1NCw4IEBAIEpTT2JqZWN0KiB0aHJvd1Rlcm1pbmF0
ZWRFeGVjdXRpb25FeGNlcHQKIAogY2xhc3MgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yIDogcHVi
bGljIEpTTm9uRmluYWxPYmplY3QgewogcHJpdmF0ZToKLSAgICBUZXJtaW5hdGVkRXhlY3V0aW9u
RXJyb3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAgICAgICA6IEpTTm9uRmluYWxPYmpl
Y3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS50ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1
cmUuZ2V0KCkpCisgICAgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yKFZNJiB2bSkKKyAgICAgICAg
OiBKU05vbkZpbmFsT2JqZWN0KHZtLCB2bS50ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1
cmUuZ2V0KCkpCiAgICAgewogICAgIH0KIApAQCAtNjQsMTYgKzY0LDE2IEBAIHByaXZhdGU6CiBw
dWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMg
VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KQorICAgIHN0YXRpYyBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3IqIGNyZWF0ZShWTSYgdm0pCiAg
ICAgewotICAgICAgICBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3IqIGVycm9yID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yPihnbG9iYWxEYXRhLmhl
YXApKSBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3IoZ2xvYmFsRGF0YSk7Ci0gICAgICAgIGVycm9y
LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgVGVybWluYXRlZEV4ZWN1dGlv
bkVycm9yKiBlcnJvciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFRlcm1pbmF0ZWRFeGVj
dXRpb25FcnJvcj4odm0uaGVhcCkpIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcih2bSk7CisgICAg
ICAgIGVycm9yLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVybiBlcnJvcjsKICAg
ICB9CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
dHlwZSkKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsK
KyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAg
ICB9CiAKICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJl
dmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCwxNCArOTQsMTQgQEAgSW50cmluc2ljIE5hdGl2
ZUV4ZWN1dGFibGU6OmludHJpbnNpYygpIAogI2lmIEVOQUJMRShKSVQpCiAvLyBVdGlsaXR5IG1l
dGhvZCB1c2VkIGZvciBqZXR0aXNvbmluZyBjb2RlIGJsb2Nrcy4KIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci1zdGF0aWMgdm9pZCBqZXR0aXNvbkNvZGVCbG9jayhKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIE93blB0cjxUPiYgY29kZUJsb2NrKQorc3RhdGljIHZvaWQgamV0dGlzb25Db2RlQmxvY2so
Vk0mIHZtLCBPd25QdHI8VD4mIGNvZGVCbG9jaykKIHsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNP
cHRpbWl6aW5nSklUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpKSk7CiAgICAgQVNTRVJUKGNvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgT3duUHRyPFQ+IGNvZGVCbG9ja1RvSmV0dGlzb24g
PSBjb2RlQmxvY2sucmVsZWFzZSgpOwogICAgIGNvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nh
c3Q8VD4oY29kZUJsb2NrVG9KZXR0aXNvbi0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwogICAgIGNv
ZGVCbG9ja1RvSmV0dGlzb24tPnVubGlua0luY29taW5nQ2FsbHMoKTsKLSAgICBnbG9iYWxEYXRh
LmhlYXAuamV0dGlzb25ERkdDb2RlQmxvY2soc3RhdGljX3BvaW50ZXJfY2FzdDxDb2RlQmxvY2s+
KGNvZGVCbG9ja1RvSmV0dGlzb24ucmVsZWFzZSgpKSk7CisgICAgdm0uaGVhcC5qZXR0aXNvbkRG
R0NvZGVCbG9jayhzdGF0aWNfcG9pbnRlcl9jYXN0PENvZGVCbG9jaz4oY29kZUJsb2NrVG9KZXR0
aXNvbi5yZWxlYXNlKCkpKTsKIH0KICNlbmRpZgogCkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBT
Y3JpcHRFeGVjdXRhYmxlOjpkZXN0cm95KEpTQ2VsbCogYwogY29uc3QgQ2xhc3NJbmZvIEV2YWxF
eGVjdXRhYmxlOjpzX2luZm8gPSB7ICJFdmFsRXhlY3V0YWJsZSIsICZTY3JpcHRFeGVjdXRhYmxl
OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoRXZhbEV4ZWN1dGFibGUpIH07CiAK
IEV2YWxFeGVjdXRhYmxlOjpFdmFsRXhlY3V0YWJsZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBpblN0cmljdENvbnRleHQpCi0gICAgOiBTY3JpcHRFeGVj
dXRhYmxlKGV4ZWMtPmdsb2JhbERhdGEoKS5ldmFsRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwg
ZXhlYywgc291cmNlLCBpblN0cmljdENvbnRleHQpCisgICAgOiBTY3JpcHRFeGVjdXRhYmxlKGV4
ZWMtPnZtKCkuZXZhbEV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIGV4ZWMsIHNvdXJjZSwgaW5T
dHJpY3RDb250ZXh0KQogewogfQogCkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBFdmFsRXhlY3V0
YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbAogY29uc3QgQ2xhc3NJbmZvIFByb2dyYW1FeGVjdXRh
YmxlOjpzX2luZm8gPSB7ICJQcm9ncmFtRXhlY3V0YWJsZSIsICZTY3JpcHRFeGVjdXRhYmxlOjpz
X2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoUHJvZ3JhbUV4ZWN1dGFibGUpIH07CiAK
IFByb2dyYW1FeGVjdXRhYmxlOjpQcm9ncmFtRXhlY3V0YWJsZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKLSAgICA6IFNjcmlwdEV4ZWN1dGFibGUoZXhlYy0+Z2xv
YmFsRGF0YSgpLnByb2dyYW1FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBleGVjLCBzb3VyY2Us
IGZhbHNlKQorICAgIDogU2NyaXB0RXhlY3V0YWJsZShleGVjLT52bSgpLnByb2dyYW1FeGVjdXRh
YmxlU3RydWN0dXJlLmdldCgpLCBleGVjLCBzb3VyY2UsIGZhbHNlKQogewogfQogCkBAIC0xNDAs
OSArMTQwLDkgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIAogCiBj
b25zdCBDbGFzc0luZm8gRnVuY3Rpb25FeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJGdW5jdGlvbkV4
ZWN1dGFibGUiLCAmU2NyaXB0RXhlY3V0YWJsZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEZ1bmN0aW9uRXhlY3V0YWJsZSkgfTsKIAotRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5j
dGlvbkV4ZWN1dGFibGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUs
IHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGFzdExpbmUpCi0gICAgOiBTY3JpcHRFeGVj
dXRhYmxlKGdsb2JhbERhdGEuZnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBnbG9i
YWxEYXRhLCBzb3VyY2UsIHVubGlua2VkRXhlY3V0YWJsZS0+aXNJblN0cmljdENvbnRleHQoKSkK
LSAgICAsIG1fdW5saW5rZWRFeGVjdXRhYmxlKGdsb2JhbERhdGEsIHRoaXMsIHVubGlua2VkRXhl
Y3V0YWJsZSkKK0Z1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rpb25FeGVjdXRhYmxlKFZNJiB2bSwg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5s
aW5rZWRFeGVjdXRhYmxlLCB1bnNpZ25lZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxhc3RMaW5lKQor
ICAgIDogU2NyaXB0RXhlY3V0YWJsZSh2bS5mdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0
KCksIHZtLCBzb3VyY2UsIHVubGlua2VkRXhlY3V0YWJsZS0+aXNJblN0cmljdENvbnRleHQoKSkK
KyAgICAsIG1fdW5saW5rZWRFeGVjdXRhYmxlKHZtLCB0aGlzLCB1bmxpbmtlZEV4ZWN1dGFibGUp
CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXNvdXJjZS5pc051bGwoKSk7CiAgICAgQVNTRVJUKHNv
dXJjZS5sZW5ndGgoKSk7CkBAIC0xNTcsNyArMTU3LDcgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmRlc3Ryb3koSlNDZWxsKgogCiBKU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVP
cHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCkKIHsKLSAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxP
YmplY3QpOworICAgIEFTU0VSVChleGVjLT52bSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwogICAg
IEFTU0VSVCghIW1fZXZhbENvZGVCbG9jayk7CiAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAg
ICBpZiAobV9ldmFsQ29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6dG9wVGllckpJ
VCgpKQpAQCAtMTk2LDcgKzE5Niw3IEBAIEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGls
ZUludGVybmEKICAgICBVTlVTRURfUEFSQU0oaml0VHlwZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJ5
dGVjb2RlSW5kZXgpOwogI2VuZGlmCi0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4
ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KTsKICAgICAKICAgICBpZiAoISFtX2V2YWxDb2RlQmxvY2spIHsKQEAgLTIwNSw3ICsyMDUsNyBA
QCBKU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hCiAgICAgICAgIG1fZXZh
bENvZGVCbG9jayA9IG5ld0NvZGVCbG9jay5yZWxlYXNlKCk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgVU5VU0VEX1BBUkFNKHNjb3BlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGdsb2JhbERhdGEp
OworICAgICAgICBVTlVTRURfUEFSQU0odm0pOwogICAgICAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgICAgIGlmICghbGV4aWNhbEdsb2JhbE9iamVjdC0+ZXZhbEVu
YWJsZWQoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUV2YWxF
cnJvcihleGVjLCBsZXhpY2FsR2xvYmFsT2JqZWN0LT5ldmFsRGlzYWJsZWRFcnJvck1lc3NhZ2Uo
KSkpOwpAQCAtMjE3LDcgKzIxNyw3IEBAIEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGls
ZUludGVybmEKIAogICAgICAgICBPd25QdHI8Q29kZUJsb2NrPiBwcmV2aW91c0NvZGVCbG9jayA9
IG1fZXZhbENvZGVCbG9jay5yZWxlYXNlKCk7CiAgICAgICAgIEFTU0VSVCgoaml0VHlwZSA9PSBK
SVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFwcmV2aW91c0NvZGVCbG9jayk7Ci0gICAgICAg
IG1fdW5saW5rZWRFdmFsQ29kZUJsb2NrLnNldCgqZ2xvYmFsRGF0YSwgdGhpcywgdW5saW5rZWRF
dmFsQ29kZSk7CisgICAgICAgIG1fdW5saW5rZWRFdmFsQ29kZUJsb2NrLnNldCgqdm0sIHRoaXMs
IHVubGlua2VkRXZhbENvZGUpOwogICAgICAgICBtX2V2YWxDb2RlQmxvY2sgPSBhZG9wdFB0cihu
ZXcgRXZhbENvZGVCbG9jayh0aGlzLCB1bmxpbmtlZEV2YWxDb2RlLCBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzY29wZS0+bG9jYWxEZXB0aCgpLCBwcmV2aW91c0Nv
ZGVCbG9jay5yZWxlYXNlKCkpKTsKICAgICAgICAgbV9ldmFsQ29kZUJsb2NrLT5jb3B5UG9zdFBh
cnNlRGF0YUZyb21BbHRlcm5hdGl2ZSgpOwogICAgIH0KQEAgLTIzNyw5ICsyMzcsOSBAQCBKU09i
amVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hCiB9CiAKICNpZiBFTkFCTEUoSklU
KQotdm9pZCBFdmFsRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgRXZhbEV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29k
ZShWTSYgdm0pCiB7Ci0gICAgamV0dGlzb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgbV9ldmFsQ29k
ZUJsb2NrKTsKKyAgICBqZXR0aXNvbkNvZGVCbG9jayh2bSwgbV9ldmFsQ29kZUJsb2NrKTsKICAg
ICBtX2ppdENvZGVGb3JDYWxsID0gbV9ldmFsQ29kZUJsb2NrLT5nZXRKSVRDb2RlKCk7CiAgICAg
QVNTRVJUKCFtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOwogfQpAQCAtMjc3LDkgKzI3
Nyw5IEBAIHZvaWQgRXZhbEV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCiBKU09iamVjdCogUHJvZ3Jh
bUV4ZWN1dGFibGU6OmNoZWNrU3ludGF4KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBQYXJzZXJF
cnJvciBlcnJvcjsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFs
RGF0YSgpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgIFJl
ZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbU5vZGUgPSBwYXJzZTxQcm9ncmFtTm9kZT4oZ2xvYmFs
RGF0YSwgbV9zb3VyY2UsIDAsIElkZW50aWZpZXIoKSwgSlNQYXJzZU5vcm1hbCwgUHJvZ3JhbU5v
ZGU6OmlzRnVuY3Rpb25Ob2RlID8gSlNQYXJzZUZ1bmN0aW9uQ29kZSA6IEpTUGFyc2VQcm9ncmFt
Q29kZSwgZXJyb3IpOworICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbU5vZGUgPSBwYXJz
ZTxQcm9ncmFtTm9kZT4odm0sIG1fc291cmNlLCAwLCBJZGVudGlmaWVyKCksIEpTUGFyc2VOb3Jt
YWwsIFByb2dyYW1Ob2RlOjppc0Z1bmN0aW9uTm9kZSA/IEpTUGFyc2VGdW5jdGlvbkNvZGUgOiBK
U1BhcnNlUHJvZ3JhbUNvZGUsIGVycm9yKTsKICAgICBpZiAocHJvZ3JhbU5vZGUpCiAgICAgICAg
IHJldHVybiAwOwogICAgIEFTU0VSVChlcnJvci5tX3R5cGUgIT0gUGFyc2VyRXJyb3I6OkVycm9y
Tm9uZSk7CkBAIC0yODgsNyArMjg4LDcgQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpj
aGVja1N5bnRheAogCiBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6
ZWQoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2Jh
bE9iamVjdCk7CisgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5keW5hbWljR2xvYmFsT2Jq
ZWN0KTsKICAgICBBU1NFUlQoISFtX3Byb2dyYW1Db2RlQmxvY2spOwogICAgIEpTT2JqZWN0KiBl
cnJvciA9IDA7CiAgICAgaWYgKG1fcHJvZ3JhbUNvZGVCbG9jay0+Z2V0SklUVHlwZSgpICE9IEpJ
VENvZGU6OnRvcFRpZXJKSVQoKSkKQEAgLTMzOCw5ICszMzgsOSBAQCBKU09iamVjdCogUHJvZ3Jh
bUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlCiB9CiAKICNpZiBFTkFCTEUoSklUKQotdm9pZCBQcm9n
cmFtRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKK3ZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZShWTSYg
dm0pCiB7Ci0gICAgamV0dGlzb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgbV9wcm9ncmFtQ29kZUJs
b2NrKTsKKyAgICBqZXR0aXNvbkNvZGVCbG9jayh2bSwgbV9wcm9ncmFtQ29kZUJsb2NrKTsKICAg
ICBtX2ppdENvZGVGb3JDYWxsID0gbV9wcm9ncmFtQ29kZUJsb2NrLT5nZXRKSVRDb2RlKCk7CiAg
ICAgQVNTRVJUKCFtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOwogfQpAQCAtMzczLDIx
ICszNzMsMjEgQEAgaW50IFByb2dyYW1FeGVjdXRhYmxlOjphZGRHbG9iYWxWYXIoSlNHbAogICAg
IHJldHVybiBpbmRleDsKIH0KIAotSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjppbml0aWFs
aXplR2xvYmFsUHJvcGVydGllcyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBKU1Njb3BlKiBzY29wZSkKK0pTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6
aW5pdGlhbGl6ZUdsb2JhbFByb3BlcnRpZXMoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
SlNTY29wZSogc2NvcGUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoc2NvcGUpOwogICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgUkVM
RUFTRV9BU1NFUlQoZ2xvYmFsT2JqZWN0KTsKLSAgICBBU1NFUlQoJmdsb2JhbE9iamVjdC0+Z2xv
YmFsRGF0YSgpID09ICZnbG9iYWxEYXRhKTsKKyAgICBBU1NFUlQoJmdsb2JhbE9iamVjdC0+dm0o
KSA9PSAmdm0pOwogCiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7CiAgICAgVW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGUgPSBnbG9iYWxPYmplY3QtPmNyZWF0ZVByb2dy
YW1Db2RlQmxvY2soY2FsbEZyYW1lLCB0aGlzLCAmZXhjZXB0aW9uKTsKICAgICBpZiAoZXhjZXB0
aW9uKQogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwogCi0gICAgbV91bmxpbmtlZFByb2dyYW1D
b2RlQmxvY2suc2V0KGdsb2JhbERhdGEsIHRoaXMsIHVubGlua2VkQ29kZSk7CisgICAgbV91bmxp
bmtlZFByb2dyYW1Db2RlQmxvY2suc2V0KHZtLCB0aGlzLCB1bmxpbmtlZENvZGUpOwogCi0gICAg
QmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIgb3B0aW1pemVyKGdsb2JhbERhdGEsIGdsb2JhbE9i
amVjdCk7CisgICAgQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIgb3B0aW1pemVyKHZtLCBnbG9i
YWxPYmplY3QpOwogCiAgICAgY29uc3QgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjpWYXJpYWJs
ZURlY2xhdGlvbnMmIHZhcmlhYmxlRGVjbGFyYXRpb25zID0gdW5saW5rZWRDb2RlLT52YXJpYWJs
ZURlY2xhcmF0aW9ucygpOwogICAgIGNvbnN0IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6RnVu
Y3Rpb25EZWNsYXRpb25zJiBmdW5jdGlvbkRlY2xhcmF0aW9ucyA9IHVubGlua2VkQ29kZS0+ZnVu
Y3Rpb25EZWNsYXJhdGlvbnMoKTsKQEAgLTM5OSwxMiArMzk5LDEyIEBAIEpTT2JqZWN0KiBQcm9n
cmFtRXhlY3V0YWJsZTo6aW5pdGlhbGl6ZUcKICAgICBDYWxsRnJhbWUqIGdsb2JhbEV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
ZnVuY3Rpb25EZWNsYXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYm9vbCBwcm9wZXJ0
eURpZEV4aXN0ID0gZ2xvYmFsT2JqZWN0LT5yZW1vdmVEaXJlY3QoZ2xvYmFsRGF0YSwgZnVuY3Rp
b25EZWNsYXJhdGlvbnNbaV0uZmlyc3QpOyAvLyBOZXdseSBkZWNsYXJlZCBmdW5jdGlvbnMgb3Zl
cndyaXRlIGV4aXN0aW5nIHByb3BlcnRpZXMuCisgICAgICAgIGJvb2wgcHJvcGVydHlEaWRFeGlz
dCA9IGdsb2JhbE9iamVjdC0+cmVtb3ZlRGlyZWN0KHZtLCBmdW5jdGlvbkRlY2xhcmF0aW9uc1tp
XS5maXJzdCk7IC8vIE5ld2x5IGRlY2xhcmVkIGZ1bmN0aW9ucyBvdmVyd3JpdGUgZXhpc3Rpbmcg
cHJvcGVydGllcy4KICAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlID0gZnVuY3Rpb25EZWNsYXJhdGlvbnNbaV0uc2Vjb25kLmdldCgp
OwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMs
IHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLT5saW5rKGdsb2JhbERhdGEsIG1fc291cmNlLCBs
aW5lTm8oKSwgMCksIHNjb3BlKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTRnVuY3Rpb246
OmNyZWF0ZShnbG9iYWxFeGVjLCB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS0+bGluayh2bSwg
bV9zb3VyY2UsIGxpbmVObygpLCAwKSwgc2NvcGUpOwogICAgICAgICBpbnQgaW5kZXggPSBhZGRH
bG9iYWxWYXIoZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbkRlY2xhcmF0aW9uc1tpXS5maXJzdCwgSXNW
YXJpYWJsZSwKICAgICAgICAgICAgICFwcm9wZXJ0eURpZEV4aXN0ID8gSXNGdW5jdGlvblRvU3Bl
Y2lhbGl6ZSA6IE5vdEZ1bmN0aW9uT3JOb3RTcGVjaWFsaXphYmxlKTsKLSAgICAgICAgZ2xvYmFs
T2JqZWN0LT5yZWdpc3RlckF0KGluZGV4KS5zZXQoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCB2
YWx1ZSk7CisgICAgICAgIGdsb2JhbE9iamVjdC0+cmVnaXN0ZXJBdChpbmRleCkuc2V0KHZtLCBn
bG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHZhcmlhYmxlRGVjbGFyYXRpb25zLnNpemUoKTsgKytpKSB7CkBAIC00NTYsNyArNDU2LDcgQEAg
RnVuY3Rpb25Db2RlQmxvY2sqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6YgogCiBKU09iamVjdCogRnVu
Y3Rpb25FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkRm9yQ2FsbChFeGVjU3RhdGUqIGV4ZWMs
IEpTU2NvcGUqIHNjb3BlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewotICAgIFJFTEVBU0Vf
QVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICBSRUxF
QVNFX0FTU0VSVChleGVjLT52bSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwogICAgIEFTU0VSVCgh
IW1fY29kZUJsb2NrRm9yQ2FsbCk7CiAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAgICBpZiAo
bV9jb2RlQmxvY2tGb3JDYWxsLT5nZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6dG9wVGllckpJVCgp
KQpAQCAtNDY3LDcgKzQ2Nyw3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBp
bGVPcHQKIAogSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZv
ckNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCB1bnNpZ25lZCBieXRl
Y29kZUluZGV4KQogewotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5h
bWljR2xvYmFsT2JqZWN0KTsKKyAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmR5bmFtaWNH
bG9iYWxPYmplY3QpOwogICAgIEFTU0VSVCghIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKICAg
ICBKU09iamVjdCogZXJyb3IgPSAwOwogICAgIGlmIChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+
Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkKQEAgLTQ5MywxMiArNDkzLDEy
IEBAIFBhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IEZ1bmN0aW9uRXgKICAgICBpZiAoISFj
b2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKSkKICAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBGdW5jdGlvbkNvZGVCbG9jayhDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmNvZGVC
bG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQpKSk7CiAKLSAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSBzY29wZS0+Z2xvYmFsRGF0YSgpOworICAgIFZNKiB2bSA9IHNjb3BlLT52bSgpOwog
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZS0+Z2xvYmFsT2JqZWN0KCk7
CiAgICAgUGFyc2VyRXJyb3IgZXJyb3I7CiAgICAgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSA9
IGdsb2JhbE9iamVjdC0+aGFzRGVidWdnZXIoKSA/IERlYnVnZ2VyT24gOiBEZWJ1Z2dlck9mZjsK
ICAgICBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlID0gZ2xvYmFsT2JqZWN0LT5oYXNQcm9maWxl
cigpID8gUHJvZmlsZXJPbiA6IFByb2ZpbGVyT2ZmOwotICAgIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2sqIHVubGlua2VkQ29kZUJsb2NrID0gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmNvZGVCbG9j
a0ZvcigqZ2xvYmFsRGF0YSwgc2NvcGUsIG1fc291cmNlLCBzcGVjaWFsaXphdGlvbktpbmQsIGRl
YnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlLCBlcnJvcik7CisgICAgVW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2sgPSBtX3VubGlua2VkRXhlY3V0YWJsZS0+Y29kZUJs
b2NrRm9yKCp2bSwgc2NvcGUsIG1fc291cmNlLCBzcGVjaWFsaXphdGlvbktpbmQsIGRlYnVnZ2Vy
TW9kZSwgcHJvZmlsZXJNb2RlLCBlcnJvcik7CiAgICAgcmVjb3JkUGFyc2UobV91bmxpbmtlZEV4
ZWN1dGFibGUtPmZlYXR1cmVzKCksIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5oYXNDYXB0dXJlZFZh
cmlhYmxlcygpLCBsaW5lTm8oKSwgbGFzdExpbmUoKSk7CiAKICAgICBpZiAoIXVubGlua2VkQ29k
ZUJsb2NrKSB7CkBAIC01ODUsMTYgKzU4NSwxNiBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRh
YmxlOjpjb21waWxlRm9yCiB9CiAKICNpZiBFTkFCTEUoSklUKQotdm9pZCBGdW5jdGlvbkV4ZWN1
dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNhbGwoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNh
bGwoVk0mIHZtKQogewotICAgIGpldHRpc29uQ29kZUJsb2NrKGdsb2JhbERhdGEsIG1fY29kZUJs
b2NrRm9yQ2FsbCk7CisgICAgamV0dGlzb25Db2RlQmxvY2sodm0sIG1fY29kZUJsb2NrRm9yQ2Fs
bCk7CiAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IG1fY29kZUJsb2NrRm9yQ2FsbC0+Z2V0SklUQ29k
ZSgpOwogICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9IG1fY29kZUJsb2NrRm9y
Q2FsbC0+Z2V0SklUQ29kZVdpdGhBcml0eUNoZWNrKCk7CiB9CiAKLXZvaWQgRnVuY3Rpb25FeGVj
dXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29k
ZUZvckNvbnN0cnVjdChWTSYgdm0pCiB7Ci0gICAgamV0dGlzb25Db2RlQmxvY2soZ2xvYmFsRGF0
YSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOworICAgIGpldHRpc29uQ29kZUJsb2NrKHZtLCBt
X2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CiAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gbV9j
b2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmdldEpJVENvZGUoKTsKICAgICBtX2ppdENvZGVGb3JDb25z
dHJ1Y3RXaXRoQXJpdHlDaGVjayA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5nZXRKSVRDb2Rl
V2l0aEFyaXR5Q2hlY2soKTsKIH0KQEAgLTY1OCw3ICs2NTgsNyBAQCBGdW5jdGlvbkV4ZWN1dGFi
bGUqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6CiAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBzb3Vy
Y2Uuc3RhcnRPZmZzZXQoKSArIHVubGlua2VkRnVuY3Rpb24tPnN0YXJ0T2Zmc2V0KCk7CiAgICAg
dW5zaWduZWQgc291cmNlTGVuZ3RoID0gdW5saW5rZWRGdW5jdGlvbi0+c291cmNlTGVuZ3RoKCk7
CiAgICAgU291cmNlQ29kZSBmdW5jdGlvblNvdXJjZShzb3VyY2UucHJvdmlkZXIoKSwgc3RhcnRP
ZmZzZXQsIHN0YXJ0T2Zmc2V0ICsgc291cmNlTGVuZ3RoLCBmaXJzdExpbmUpOwotICAgIHJldHVy
biBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGZ1bmN0aW9u
U291cmNlLCB1bmxpbmtlZEZ1bmN0aW9uLCBmaXJzdExpbmUsIHVubGlua2VkRnVuY3Rpb24tPmxp
bmVDb3VudCgpKTsKKyAgICByZXR1cm4gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYy0+
dm0oKSwgZnVuY3Rpb25Tb3VyY2UsIHVubGlua2VkRnVuY3Rpb24sIGZpcnN0TGluZSwgdW5saW5r
ZWRGdW5jdGlvbi0+bGluZUNvdW50KCkpOwogfQogCiBTdHJpbmcgRnVuY3Rpb25FeGVjdXRhYmxl
OjpwYXJhbVN0cmluZygpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDE2ICs2OCwxNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBOVU1fUEFSQU1FVEVS
U19JU19IT1NUID0gMDsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBOVU1fUEFSQU1FVEVSU19O
T1RfQ09NUElMRUQgPSAtMTsKIAotICAgICAgICBFeGVjdXRhYmxlQmFzZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQgbnVtUGFyYW1ldGVycykKLSAg
ICAgICAgICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKKyAgICAgICAgRXhlY3V0
YWJsZUJhc2UoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50IG51bVBhcmFtZXRlcnMp
CisgICAgICAgICAgICA6IEpTQ2VsbCh2bSwgc3RydWN0dXJlKQogICAgICAgICAgICAgLCBtX251
bVBhcmFtZXRlcnNGb3JDYWxsKG51bVBhcmFtZXRlcnMpCiAgICAgICAgICAgICAsIG1fbnVtUGFy
YW1ldGVyc0ZvckNvbnN0cnVjdChudW1QYXJhbWV0ZXJzKQogICAgICAgICB7CiAgICAgICAgIH0K
IAotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
KyAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICB9CiAKICAgICBwdWJsaWM6CkBAIC0xMDIsNyAr
MTAyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gbV9udW1QYXJhbWV0
ZXJzRm9yQ2FsbCA9PSBOVU1fUEFSQU1FVEVSU19JU19IT1NUOwogICAgICAgICB9CiAKLSAgICAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykgeyByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlw
ZUluZm8oQ29tcG91bmRUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyB9CisgICAgICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhDb21wb3VuZFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7IH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgY2xlYXJDb2RlKCk7
CiAKQEAgLTI3MSwyNiArMjcxLDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0eXBlZGVm
IEV4ZWN1dGFibGVCYXNlIEJhc2U7CiAKICNpZiBFTkFCTEUoSklUKQotICAgICAgICBzdGF0aWMg
TmF0aXZlRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGNhbGxUaHVuaywgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBjb25zdHJ1Y3RUaHVuaywgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0
b3IsIEludHJpbnNpYyBpbnRyaW5zaWMpCisgICAgICAgIHN0YXRpYyBOYXRpdmVFeGVjdXRhYmxl
KiBjcmVhdGUoVk0mIHZtLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2FsbFRodW5rLCBOYXRpdmVG
dW5jdGlvbiBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvbnN0cnVjdFRodW5rLCBO
YXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvciwgSW50cmluc2ljIGludHJpbnNpYykKICAgICAgICAg
ewogICAgICAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZTsKICAgICAgICAgICAg
IGlmICghY2FsbFRodW5rKSB7Ci0gICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPE5hdGl2ZUV4ZWN1dGFibGU+KGdsb2JhbERhdGEuaGVhcCkpIE5h
dGl2ZUV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKLSAgICAg
ICAgICAgICAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBKSVRDb2Rl
KCksIEpJVENvZGUoKSwgaW50cmluc2ljKTsKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8TmF0aXZlRXhlY3V0YWJsZT4odm0uaGVhcCkpIE5h
dGl2ZUV4ZWN1dGFibGUodm0sIGZ1bmN0aW9uLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgICAgICAg
ICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24odm0sIEpJVENvZGUoKSwgSklUQ29kZSgpLCBp
bnRyaW5zaWMpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBleGVjdXRh
YmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8TmF0aXZlRXhlY3V0YWJsZT4oZ2xvYmFs
RGF0YS5oZWFwKSkgTmF0aXZlRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBmdW5jdGlvbiwgY29uc3Ry
dWN0b3IpOwotICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKGdsb2Jh
bERhdGEsIEpJVENvZGU6Okhvc3RGdW5jdGlvbihjYWxsVGh1bmspLCBKSVRDb2RlOjpIb3N0RnVu
Y3Rpb24oY29uc3RydWN0VGh1bmspLCBpbnRyaW5zaWMpOworICAgICAgICAgICAgICAgIGV4ZWN1
dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxOYXRpdmVFeGVjdXRhYmxlPih2bS5o
ZWFwKSkgTmF0aXZlRXhlY3V0YWJsZSh2bSwgZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKKyAgICAg
ICAgICAgICAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbih2bSwgSklUQ29kZTo6SG9zdEZ1
bmN0aW9uKGNhbGxUaHVuayksIEpJVENvZGU6Okhvc3RGdW5jdGlvbihjb25zdHJ1Y3RUaHVuayks
IGludHJpbnNpYyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZXhlY3V0YWJs
ZTsKICAgICAgICAgfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoTExJTlRfQ19MT09QKQotICAgICAg
ICBzdGF0aWMgTmF0aXZlRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQor
ICAgICAgICBzdGF0aWMgTmF0aXZlRXhlY3V0YWJsZSogY3JlYXRlKFZNJiB2bSwgTmF0aXZlRnVu
Y3Rpb24gZnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBBU1NFUlQoIWdsb2JhbERhdGEuY2FuVXNlSklUKCkpOwotICAgICAgICAgICAg
TmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PE5hdGl2ZUV4ZWN1dGFibGU+KGdsb2JhbERhdGEuaGVhcCkpIE5hdGl2ZUV4ZWN1dGFibGUoZ2xv
YmFsRGF0YSwgZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKLSAgICAgICAgICAgIGV4ZWN1dGFibGUt
PmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICAgICAgQVNTRVJUKCF2bS5jYW5V
c2VKSVQoKSk7CisgICAgICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8TmF0aXZlRXhlY3V0YWJsZT4odm0uaGVhcCkpIE5hdGl2
ZUV4ZWN1dGFibGUodm0sIGZ1bmN0aW9uLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgICAgICBleGVj
dXRhYmxlLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgICAgICByZXR1cm4gZXhlY3V0YWJs
ZTsKICAgICAgICAgfQogI2VuZGlmCkBAIC0zMjAsNyArMzIwLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE5hdGl2ZUV4ZWN1dGFibGUsIG1f
Y29uc3RydWN0b3IpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykgeyByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oTGVhZlR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7IH0KKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
bykgeyByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5
cGVJbmZvKExlYWZUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyB9CiAgICAgICAgIAog
ICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIApAQCAtMzI4LDkgKzMyOCw5
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHJvdGVjdGVkOgogI2lmIEVOQUJMRShKSVQpCi0g
ICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKSVRD
b2RlIGNhbGxUaHVuaywgSklUQ29kZSBjb25zdHJ1Y3RUaHVuaywgSW50cmluc2ljIGludHJpbnNp
YykKKyAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpJVENvZGUgY2FsbFRodW5r
LCBKSVRDb2RlIGNvbnN0cnVjdFRodW5rLCBJbnRyaW5zaWMgaW50cmluc2ljKQogICAgICAgICB7
Ci0gICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAg
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgICAgIG1faml0Q29kZUZvckNh
bGwgPSBjYWxsVGh1bms7CiAgICAgICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBjb25z
dHJ1Y3RUaHVuazsKICAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9
IGNhbGxUaHVuay5hZGRyZXNzRm9yQ2FsbCgpOwpAQCAtMzQwLDggKzM0MCw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogI2VuZGlmCiAKICAgICBwcml2YXRlOgotICAgICAgICBOYXRpdmVFeGVjdXRhYmxl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE5hdGl2
ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQotICAgICAgICAgICAgOiBFeGVjdXRhYmxlQmFzZShnbG9i
YWxEYXRhLCBnbG9iYWxEYXRhLm5hdGl2ZUV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIE5VTV9Q
QVJBTUVURVJTX0lTX0hPU1QpCisgICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUoVk0mIHZtLCBOYXRp
dmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpCisgICAgICAg
ICAgICA6IEV4ZWN1dGFibGVCYXNlKHZtLCB2bS5uYXRpdmVFeGVjdXRhYmxlU3RydWN0dXJlLmdl
dCgpLCBOVU1fUEFSQU1FVEVSU19JU19IT1NUKQogICAgICAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1
bmN0aW9uKQogICAgICAgICAgICAgLCBtX2NvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKQogICAgICAg
ICB7CkBAIC0zNTcsMTUgKzM1NywxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIHR5cGVkZWYgRXhlY3V0YWJsZUJhc2UgQmFzZTsKIAotICAgICAgICBTY3JpcHRFeGVj
dXRhYmxlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCkKLSAgICAgICAg
ICAgIDogRXhlY3V0YWJsZUJhc2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBOVU1fUEFSQU1FVEVS
U19OT1RfQ09NUElMRUQpCisgICAgICAgIFNjcmlwdEV4ZWN1dGFibGUoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29sIGlzSW5TdHJpY3RD
b250ZXh0KQorICAgICAgICAgICAgOiBFeGVjdXRhYmxlQmFzZSh2bSwgc3RydWN0dXJlLCBOVU1f
UEFSQU1FVEVSU19OT1RfQ09NUElMRUQpCiAgICAgICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkK
ICAgICAgICAgICAgICwgbV9mZWF0dXJlcyhpc0luU3RyaWN0Q29udGV4dCA/IFN0cmljdE1vZGVG
ZWF0dXJlIDogMCkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgU2NyaXB0RXhlY3V0
YWJsZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UsIGJvb2wgaXNJblN0cmljdENvbnRleHQpCi0gICAgICAgICAgICA6IEV4ZWN1
dGFibGVCYXNlKGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCBOVU1fUEFSQU1FVEVSU19O
T1RfQ09NUElMRUQpCisgICAgICAgICAgICA6IEV4ZWN1dGFibGVCYXNlKGV4ZWMtPnZtKCksIHN0
cnVjdHVyZSwgTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEKQogICAgICAgICAgICAgLCBtX3Nv
dXJjZShzb3VyY2UpCiAgICAgICAgICAgICAsIG1fZmVhdHVyZXMoaXNJblN0cmljdENvbnRleHQg
PyBTdHJpY3RNb2RlRmVhdHVyZSA6IDApCiAgICAgICAgIHsKQEAgLTQwMywxNCArNDAzLDE0IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICAgICAgewotICAgICAgICAgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgICAgICAgICBnbG9iYWxEYXRhLmhlYXAuYWRk
Q29tcGlsZWRDb2RlKHRoaXMpOyAvLyBCYWxhbmNlZCBieSBIZWFwOjpkZWxldGVVbm1hcmtlZENv
bXBpbGVkQ29kZSgpLgorICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAg
ICAgICAgICAgdm0uaGVhcC5hZGRDb21waWxlZENvZGUodGhpcyk7IC8vIEJhbGFuY2VkIGJ5IEhl
YXA6OmRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCkuCiAKICNpZiBFTkFCTEUoQ09ERUJMT0NL
X1NBTVBMSU5HKQotICAgICAgICAgICAgaWYgKFNhbXBsaW5nVG9vbCogc2FtcGxlciA9IGdsb2Jh
bERhdGEuaW50ZXJwcmV0ZXItPnNhbXBsZXIoKSkKLSAgICAgICAgICAgICAgICBzYW1wbGVyLT5u
b3RpZnlPZlNjb3BlKGdsb2JhbERhdGEsIHRoaXMpOworICAgICAgICAgICAgaWYgKFNhbXBsaW5n
VG9vbCogc2FtcGxlciA9IHZtLmludGVycHJldGVyLT5zYW1wbGVyKCkpCisgICAgICAgICAgICAg
ICAgc2FtcGxlci0+bm90aWZ5T2ZTY29wZSh2bSwgdGhpcyk7CiAjZW5kaWYKICAgICAgICAgfQog
CkBAIC00MzAsNyArNDMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNPYmplY3Qq
IGNvbXBpbGUoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSkKICAgICAgICAgewotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxP
YmplY3QpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5keW5hbWljR2xv
YmFsT2JqZWN0KTsKICAgICAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAgICAgICAgICAg
ICBpZiAoIW1fZXZhbENvZGVCbG9jaykKICAgICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVJ
bnRlcm5hbChleGVjLCBzY29wZSwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKTsKQEAgLTQ0MSw3
ICs0NDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRp
bWl6ZWQoRXhlY1N0YXRlKiwgSlNTY29wZSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogICAg
ICAgICAKICNpZiBFTkFCTEUoSklUKQotICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29k
ZShKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGUoVk0m
KTsKICAgICAgICAgYm9vbCBqaXRDb21waWxlKEV4ZWNTdGF0ZSopOwogI2VuZGlmCiAKQEAgLTQ1
NCw3ICs0NTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIEV2YWxFeGVjdXRh
YmxlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGJv
b2wgaXNJblN0cmljdENvbnRleHQpIAogICAgICAgICB7CiAgICAgICAgICAgICBFdmFsRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEV2YWxFeGVjdXRh
YmxlPigqZXhlYy0+aGVhcCgpKSkgRXZhbEV4ZWN1dGFibGUoZXhlYywgc291cmNlLCBpc0luU3Ry
aWN0Q29udGV4dCk7Ci0gICAgICAgICAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihleGVj
LT5nbG9iYWxEYXRhKCkpOworICAgICAgICAgICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24o
ZXhlYy0+dm0oKSk7CiAgICAgICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTsKICAgICAgICAgfQog
CkBAIC00NjQsOSArNDY0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4g
Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKTsKICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCisgICAgICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBl
SW5mbyhFdmFsRXhlY3V0YWJsZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAg
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8s
IFR5cGVJbmZvKEV2YWxFeGVjdXRhYmxlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2lu
Zm87CkBAIC00OTYsMTggKzQ5NiwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGlj
IFByb2dyYW1FeGVjdXRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIFByb2dyYW1FeGVjdXRhYmxlKiBl
eGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvZ3JhbUV4ZWN1dGFibGU+
KCpleGVjLT5oZWFwKCkpKSBQcm9ncmFtRXhlY3V0YWJsZShleGVjLCBzb3VyY2UpOwotICAgICAg
ICAgICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAg
ICAgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwogICAgICAg
ICAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiAgICAgICAgIH0KIAogCi0gICAgICAgIEpTT2JqZWN0
KiBpbml0aWFsaXplR2xvYmFsUHJvcGVydGllcyhKU0dsb2JhbERhdGEmLCBDYWxsRnJhbWUqLCBK
U1Njb3BlKik7CisgICAgICAgIEpTT2JqZWN0KiBpbml0aWFsaXplR2xvYmFsUHJvcGVydGllcyhW
TSYsIENhbGxGcmFtZSosIEpTU2NvcGUqKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KEpTQ2VsbCopOwogCiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlKEV4ZWNTdGF0ZSogZXhlYywg
SlNTY29wZSogc2NvcGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4
ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGV4ZWMtPnZtKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICBK
U09iamVjdCogZXJyb3IgPSAwOwogICAgICAgICAgICAgaWYgKCFtX3Byb2dyYW1Db2RlQmxvY2sp
CiAgICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGUsIEpJ
VENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7CkBAIC01MTgsNyArNTE4LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2Nv
cGUqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICAgICAgICAgCiAjaWYgRU5BQkxFKEpJVCkK
LSAgICAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGUoSlNHbG9iYWxEYXRhJik7CisgICAg
ICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlKFZNJik7CiAgICAgICAgIGJvb2wgaml0Q29t
cGlsZShFeGVjU3RhdGUqKTsKICNlbmRpZgogCkBAIC01MzcsOSArNTM3LDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIH0KICNlbmRpZgogICAgICAgICAKLSAgICAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKKyAgICAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90bykKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFByb2dy
YW1FeGVjdXRhYmxlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUlu
Zm8oUHJvZ3JhbUV4ZWN1dGFibGVUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsK
QEAgLTU3MiwxMCArNTcyLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAg
ICAgdHlwZWRlZiBTY3JpcHRFeGVjdXRhYmxlIEJhc2U7CiAKLSAgICAgICAgc3RhdGljIEZ1bmN0
aW9uRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVj
dXRhYmxlLCB1bnNpZ25lZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxhc3RMaW5lKQorICAgICAgICBz
dGF0aWMgRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGUoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUs
IHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGFzdExpbmUpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEZ1bmN0aW9uRXhlY3V0YWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgRnVuY3Rpb25F
eGVjdXRhYmxlKGdsb2JhbERhdGEsIHNvdXJjZSwgdW5saW5rZWRFeGVjdXRhYmxlLCBmaXJzdExp
bmUsIGxhc3RMaW5lKTsKLSAgICAgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKGds
b2JhbERhdGEpOworICAgICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RnVuY3Rpb25FeGVjdXRhYmxlPih2bS5oZWFwKSkg
RnVuY3Rpb25FeGVjdXRhYmxlKHZtLCBzb3VyY2UsIHVubGlua2VkRXhlY3V0YWJsZSwgZmlyc3RM
aW5lLCBsYXN0TGluZSk7CisgICAgICAgICAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTsKICAgICAgICAgfQogICAgICAgICBz
dGF0aWMgRnVuY3Rpb25FeGVjdXRhYmxlKiBmcm9tR2xvYmFsQ29kZShjb25zdCBJZGVudGlmaWVy
JiBuYW1lLCBFeGVjU3RhdGUqLCBEZWJ1Z2dlciosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU09iamVj
dCoqIGV4Y2VwdGlvbik7CkBAIC02MDIsNyArNjAyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSog
c2NvcGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPmdsb2Jh
bERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGV4ZWMtPnZtKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICBKU09iamVjdCog
ZXJyb3IgPSAwOwogICAgICAgICAgICAgaWYgKCFtX2NvZGVCbG9ja0ZvckNhbGwpCiAgICAgICAg
ICAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ2FsbEludGVybmFsKGV4ZWMsIHNjb3BlLCBKSVRD
b2RlOjpib3R0b21UaWVySklUKCkpOwpAQCAtNjEzLDcgKzYxMyw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZEZvckNhbGwoRXhlY1N0YXRlKiwg
SlNTY29wZSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAKICNpZiBFTkFCTEUo
SklUKQotICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZUZvckNhbGwoSlNHbG9iYWxE
YXRhJik7CisgICAgICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChWTSYpOwog
ICAgICAgICBib29sIGppdENvbXBpbGVGb3JDYWxsKEV4ZWNTdGF0ZSopOwogI2VuZGlmCiAKQEAg
LTYzMCw3ICs2MzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU09iamVjdCogY29t
cGlsZUZvckNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1p
Y0dsb2JhbE9iamVjdCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmR5
bmFtaWNHbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAg
ICAgICAgICAgIGlmICghbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpCiAgICAgICAgICAgICAgICAg
ZXJyb3IgPSBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoZXhlYywgc2NvcGUsIEpJVENvZGU6
OmJvdHRvbVRpZXJKSVQoKSk7CkBAIC02NDEsNyArNjQxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSos
IEpTU2NvcGUqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICAgICAgICAgCiAjaWYgRU5BQkxF
KEpJVCkKLSAgICAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QoSlNH
bG9iYWxEYXRhJik7CisgICAgICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3Ry
dWN0KFZNJik7CiAgICAgICAgIGJvb2wgaml0Q29tcGlsZUZvckNvbnN0cnVjdChFeGVjU3RhdGUq
KTsKICNlbmRpZgogCkBAIC02ODEsMTMgKzY4MSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgfQogICAgICAgICAKICNpZiBFTkFCTEUoSklUKQotICAgICAgICB2b2lkIGpldHRpc29uT3B0
aW1pemVkQ29kZUZvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCkKKyAgICAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGVGb3IoVk0mIHZt
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlm
IChraW5kID09IENvZGVGb3JDYWxsKSAKLSAgICAgICAgICAgICAgICBqZXR0aXNvbk9wdGltaXpl
ZENvZGVGb3JDYWxsKGdsb2JhbERhdGEpOworICAgICAgICAgICAgICAgIGpldHRpc29uT3B0aW1p
emVkQ29kZUZvckNhbGwodm0pOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAg
QVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgICAgICAgICAgICAgamV0dGlz
b25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KGdsb2JhbERhdGEpOworICAgICAgICAgICAgICAg
IGpldHRpc29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdCh2bSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgCkBAIC03MzMsOSArNzMzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgY2xlYXJDb2RlSWZOb3RDb21waWxpbmcoKTsKICAgICAgICAgdm9pZCBjbGVh
clVubGlua2VkQ29kZUZvclJlY29tcGlsYXRpb25JZk5vdENvbXBpbGluZygpOwogICAgICAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCisgICAgICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvLCBU
eXBlSW5mbyhGdW5jdGlvbkV4ZWN1dGFibGVUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8p
OworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvLCBUeXBlSW5mbyhGdW5jdGlvbkV4ZWN1dGFibGVUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8pOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xh
c3NJbmZvIHNfaW5mbzsKQEAgLTc0NSw3ICs3NDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBjbGVhckNvZGUoKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZShKU0dsb2JhbERhdGEmLCBjb25zdCBTb3VyY2VDb2RlJiwgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUqLCB1bnNpZ25lZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxhc3RMaW5lKTsKKyAg
ICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiwgY29uc3QgU291cmNlQ29kZSYsIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKiwgdW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsYXN0TGlu
ZSk7CiAKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRl
KiwgSlNTY29wZSosIEpJVENvZGU6OkpJVFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBV
SU5UX01BWCk7CiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwo
RXhlY1N0YXRlKiwgSlNTY29wZSosIEpJVENvZGU6OkpJVFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXggPSBVSU5UX01BWCk7CkBAIC03NzUsMTAgKzc3NSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dDsKICAgICB9OwogCi0gICAgaW5saW5lIEpTRnVuY3Rpb246OkpTRnVuY3Rpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUq
IHNjb3BlKQotICAgICAgICA6IEJhc2UoZ2xvYmFsRGF0YSwgc2NvcGUtPmdsb2JhbE9iamVjdCgp
LT5mdW5jdGlvblN0cnVjdHVyZSgpKQotICAgICAgICAsIG1fZXhlY3V0YWJsZShnbG9iYWxEYXRh
LCB0aGlzLCBleGVjdXRhYmxlKQotICAgICAgICAsIG1fc2NvcGUoZ2xvYmFsRGF0YSwgdGhpcywg
c2NvcGUpCisgICAgaW5saW5lIEpTRnVuY3Rpb246OkpTRnVuY3Rpb24oVk0mIHZtLCBGdW5jdGlv
bkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3BlKQorICAgICAgICA6IEJhc2Uo
dm0sIHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSkKKyAgICAgICAg
LCBtX2V4ZWN1dGFibGUodm0sIHRoaXMsIGV4ZWN1dGFibGUpCisgICAgICAgICwgbV9zY29wZSh2
bSwgdGhpcywgc2NvcGUpCiAgICAgICAgICwgbV9hbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQo
SW5pdGlhbGl6ZWRCbGluZCkgLy8gU2VlIGNvbW1lbnQgaW4gSlNGdW5jdGlvbi5jcHAgY29uY2Vy
bmluZyB0aGUgcmVhc29uIGZvciB1c2luZyBJbml0aWFsaXplZEJsaW5kIGFzIG9wcG9zZWQgdG8g
SW5pdGlhbGl6ZWRXYXRjaGluZy4KICAgICB7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAkocmV2aXNpb24gMTQ4Njgz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MSwxMCArNDEsMTAgQEAgaW5saW5lIGJvb2wgcHJlcGFyZUZvckV4
ZWN1dGlvbihFeGVjU3RhdAogI2lmIEVOQUJMRShMTElOVCkKICAgICBpZiAoSklUQ29kZTo6aXNC
YXNlbGluZUNvZGUoaml0VHlwZSkpIHsKICAgICAgICAgLy8gU3RhcnQgb2ZmIGluIHRoZSBsb3cg
bGV2ZWwgaW50ZXJwcmV0ZXIuCi0gICAgICAgIExMSW50OjpnZXRFbnRyeXBvaW50KGV4ZWMtPmds
b2JhbERhdGEoKSwgY29kZUJsb2NrLmdldCgpLCBqaXRDb2RlKTsKKyAgICAgICAgTExJbnQ6Omdl
dEVudHJ5cG9pbnQoZXhlYy0+dm0oKSwgY29kZUJsb2NrLmdldCgpLCBqaXRDb2RlKTsKICAgICAg
ICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigp
KTsKLSAgICAgICAgaWYgKGV4ZWMtPmdsb2JhbERhdGEoKS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIp
Ci0gICAgICAgICAgICBleGVjLT5nbG9iYWxEYXRhKCkubV9wZXJCeXRlY29kZVByb2ZpbGVyLT5l
bnN1cmVCeXRlY29kZXNGb3IoY29kZUJsb2NrLmdldCgpKTsKKyAgICAgICAgaWYgKGV4ZWMtPnZt
KCkubV9wZXJCeXRlY29kZVByb2ZpbGVyKQorICAgICAgICAgICAgZXhlYy0+dm0oKS5tX3BlckJ5
dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zvcihjb2RlQmxvY2suZ2V0KCkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKExMSU5UKQpAQCAtNTYs
MTAgKzU2LDEwIEBAIGlubGluZSBib29sIHByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbigKICNp
ZiBFTkFCTEUoTExJTlQpCiAgICAgaWYgKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUp
KSB7CiAgICAgICAgIC8vIFN0YXJ0IG9mZiBpbiB0aGUgbG93IGxldmVsIGludGVycHJldGVyLgot
ICAgICAgICBMTEludDo6Z2V0RnVuY3Rpb25FbnRyeXBvaW50KGV4ZWMtPmdsb2JhbERhdGEoKSwg
a2luZCwgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgTExJbnQ6Omdl
dEZ1bmN0aW9uRW50cnlwb2ludChleGVjLT52bSgpLCBraW5kLCBqaXRDb2RlLCBqaXRDb2RlV2l0
aEFyaXR5Q2hlY2spOwogICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoaml0Q29kZSwgaml0
Q29kZVdpdGhBcml0eUNoZWNrKTsKLSAgICAgICAgaWYgKGV4ZWMtPmdsb2JhbERhdGEoKS5tX3Bl
ckJ5dGVjb2RlUHJvZmlsZXIpCi0gICAgICAgICAgICBleGVjLT5nbG9iYWxEYXRhKCkubV9wZXJC
eXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IoY29kZUJsb2NrLmdldCgpKTsKKyAg
ICAgICAgaWYgKGV4ZWMtPnZtKCkubV9wZXJCeXRlY29kZVByb2ZpbGVyKQorICAgICAgICAgICAg
ZXhlYy0+dm0oKS5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zvcihjb2Rl
QmxvY2suZ2V0KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZWxzZQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMSArNDYs
MTEgQEAgRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6RnVuY3Rpb25Db25zdHJ1Y3RvcgogCiB2b2lkIEZ1
bmN0aW9uQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRnVuY3Rp
b25Qcm90b3R5cGUqIGZ1bmN0aW9uUHJvdG90eXBlKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZnVuY3Rpb25Qcm90b3R5cGUtPmNsYXNzSW5mbygpLT5j
bGFzc05hbWUpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERh
dGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgZnVuY3Rpb25Qcm90b3R5cGUs
IERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihleGVjLT52bSgpLCBmdW5jdGlvblByb3RvdHlwZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFt
ZSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLnByb3RvdHlwZSwgZnVuY3Rpb25Qcm90b3R5cGUsIERvbnRFbnVtIHwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KTsKIAogICAgIC8vIE51bWJlciBvZiBhcmd1bWVudHMgZm9yIGNv
bnN0cnVjdG9yCi0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0
YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkg
fCBEb250RGVsZXRlIHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEpLCBS
ZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhGdW5jdGlvbkNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9u
Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtNDQsOSArNDQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgY29uc3Qg
Q2xhc3NJbmZvIHNfaW5mbzsKIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKSAKICAgICAgICAgeyAKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCisgICAgICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAKICAgICAgICAgfQogCiAgICAgcHJp
dmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvblByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDks
MjMgKzQ5LDIzIEBAIEZ1bmN0aW9uUHJvdG90eXBlOjpGdW5jdGlvblByb3RvdHlwZShKU0cKIAog
dm9pZCBGdW5jdGlvblByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xv
YmFsRGF0YSgpLCBuYW1lKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5n
bG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDApLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZXhlYy0+dm0oKSwgbmFtZSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhl
Yy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMCksIERvbnRE
ZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKIH0KIAogdm9pZCBGdW5jdGlvblByb3RvdHlw
ZTo6YWRkRnVuY3Rpb25Qcm9wZXJ0aWVzKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNGdW5jdGlvbioqIGNhbGxGdW5jdGlvbiwgSlNGdW5jdGlvbioqIGFw
cGx5RnVuY3Rpb24pCiB7CiAgICAgSlNGdW5jdGlvbiogdG9TdHJpbmdGdW5jdGlvbiA9IEpTRnVu
Y3Rpb246OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS50b1N0cmluZy5zdHJpbmcoKSwgZnVuY3Rpb25Qcm90b0Z1bmNUb1N0cmluZyk7Ci0gICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkudG9TdHJpbmcsIHRvU3RyaW5nRnVuY3Rpb24sIERvbnRFbnVtKTsKKyAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
dG9TdHJpbmcsIHRvU3RyaW5nRnVuY3Rpb24sIERvbnRFbnVtKTsKIAogICAgICphcHBseUZ1bmN0
aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCwgMiwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmFwcGx5LnN0cmluZygpLCBmdW5jdGlvblByb3RvRnVuY0FwcGx5KTsKLSAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5hcHBseSwgKmFwcGx5RnVuY3Rpb24sIERvbnRFbnVtKTsKKyAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
YXBwbHksICphcHBseUZ1bmN0aW9uLCBEb250RW51bSk7CiAKICAgICAqY2FsbEZ1bmN0aW9uID0g
SlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCwgMSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLmNhbGwuc3RyaW5nKCksIGZ1bmN0aW9uUHJvdG9GdW5jQ2FsbCk7Ci0gICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuY2FsbCwgKmNhbGxGdW5jdGlvbiwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsLCAqY2Fs
bEZ1bmN0aW9uLCBEb250RW51bSk7CiAKICAgICBKU0Z1bmN0aW9uKiBiaW5kRnVuY3Rpb24gPSBK
U0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCAxLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuYmluZC5zdHJpbmcoKSwgZnVuY3Rpb25Qcm90b0Z1bmNCaW5kKTsKLSAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5iaW5kLCBiaW5kRnVuY3Rpb24sIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYmluZCwgYmluZEZ1
bmN0aW9uLCBEb250RW51bSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNhbGxGdW5jdGlvblByb3RvdHlwZShFeGVjU3RhdGUqKQpAQCAtMTg3LDEyICsxODcsMTIg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblBybwogCiAgICAgLy8gTGV0
IEEgYmUgYSBuZXcgKHBvc3NpYmx5IGVtcHR5KSBpbnRlcm5hbCBsaXN0IG9mIGFsbCBvZiB0aGUg
YXJndW1lbnQgdmFsdWVzIHByb3ZpZGVkIGFmdGVyIHRoaXNBcmcgKGFyZzEsIGFyZzIgZXRjKSwg
aW4gb3JkZXIuCiAgICAgc2l6ZV90IG51bUJvdW5kQXJncyA9IGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA+IDEgPyBleGVjLT5hcmd1bWVudENvdW50KCkgLSAxIDogMDsKLSAgICBKU0FycmF5KiBib3Vu
ZEFyZ3MgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGV4ZWMtPmdsb2JhbERhdGEo
KSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9j
YXRpb24oQXJyYXlXaXRoVW5kZWNpZGVkKSwgbnVtQm91bmRBcmdzKTsKKyAgICBKU0FycmF5KiBi
b3VuZEFyZ3MgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGV4ZWMtPnZtKCksIGds
b2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9u
KEFycmF5V2l0aFVuZGVjaWRlZCksIG51bUJvdW5kQXJncyk7CiAgICAgaWYgKCFib3VuZEFyZ3Mp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtQm91bmRBcmdzOyArK2kpCi0g
ICAgICAgIGJvdW5kQXJncy0+aW5pdGlhbGl6ZUluZGV4KGV4ZWMtPmdsb2JhbERhdGEoKSwgaSwg
ZXhlYy0+YXJndW1lbnQoaSArIDEpKTsKKyAgICAgICAgYm91bmRBcmdzLT5pbml0aWFsaXplSW5k
ZXgoZXhlYy0+dm0oKSwgaSwgZXhlYy0+YXJndW1lbnQoaSArIDEpKTsKIAogICAgIC8vIElmIHRo
ZSBbW0NsYXNzXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgVGFyZ2V0IGlzICJGdW5jdGlvbiIsIHRo
ZW4gLi4uCiAgICAgLy8gRWxzZSBzZXQgdGhlIGxlbmd0aCBvd24gcHJvcGVydHkgb2YgRiB0byAw
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblBy
b3RvdHlwZS5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GdW5jdGlvblByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5ICszOCw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBhZGRGdW5jdGlvblByb3Bl
cnRpZXMoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBKU0Z1bmN0aW9uKiogY2FsbEZ1bmN0
aW9uLCBKU0Z1bmN0aW9uKiogYXBwbHlGdW5jdGlvbik7CiAgICAgICAgIAotICAgICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorICAgICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8o
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogCiAgICAg
ICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwCShyZXZpc2lv
biAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2Fs
bGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJB
UElTaGltcy5oIgogI2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIK
KyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCiAKQEAgLTUwLDE5ICs1MCwxOSBAQCBjb25zdCBkb3VibGUgaG91ciA9IDYwICogNjA7CiAK
ICNpZiBVU0UoQ0YpCiBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpEZWZhdWx0R0NBY3Rpdml0
eUNhbGxiYWNrKEhlYXAqIGhlYXApCi0gICAgOiBHQ0FjdGl2aXR5Q2FsbGJhY2soaGVhcC0+Z2xv
YmFsRGF0YSgpLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCkpCisgICAgOiBHQ0FjdGl2aXR5Q2FsbGJh
Y2soaGVhcC0+dm0oKSwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpKQogICAgICwgbV9kZWxheShzX2Rl
Y2FkZSkKIHsKIH0KIAogRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6RGVmYXVsdEdDQWN0aXZp
dHlDYWxsYmFjayhIZWFwKiBoZWFwLCBDRlJ1bkxvb3BSZWYgcnVuTG9vcCkKLSAgICA6IEdDQWN0
aXZpdHlDYWxsYmFjayhoZWFwLT5nbG9iYWxEYXRhKCksIHJ1bkxvb3ApCisgICAgOiBHQ0FjdGl2
aXR5Q2FsbGJhY2soaGVhcC0+dm0oKSwgcnVuTG9vcCkKICAgICAsIG1fZGVsYXkoc19kZWNhZGUp
CiB7CiB9CiAjZWxpZiBQTEFURk9STShRVCkKIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OkRl
ZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2soSGVhcCogaGVhcCkKLSAgICA6IEdDQWN0aXZpdHlDYWxs
YmFjayhoZWFwLT5nbG9iYWxEYXRhKCkpCisgICAgOiBHQ0FjdGl2aXR5Q2FsbGJhY2soaGVhcC0+
dm0oKSkKICAgICAsIG1fZGVsYXkoaG91cikKIHsKIH0KQEAgLTcwLDExICs3MCwxMSBAQCBEZWZh
dWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpEZWZhdWx0R0NBY3RpCiAKIHZvaWQgRGVmYXVsdEdDQWN0
aXZpdHlDYWxsYmFjazo6ZG9Xb3JrKCkKIHsKLSAgICBIZWFwKiBoZWFwID0gJm1fZ2xvYmFsRGF0
YS0+aGVhcDsKKyAgICBIZWFwKiBoZWFwID0gJm1fdm0tPmhlYXA7CiAgICAgaWYgKCFpc0VuYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEFQSUVudHJ5U2hpbSBzaGltKG1fZ2xv
YmFsRGF0YSk7CisgICAgQVBJRW50cnlTaGltIHNoaW0obV92bSk7CiAjaWYgIVBMQVRGT1JNKElP
UykKICAgICBkb3VibGUgc3RhcnRUaW1lID0gV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1Rp
bWUoKTsKICAgICBpZiAoaGVhcC0+aXNQYWdlZE91dChzdGFydFRpbWUgKyBwYWdpbmdUaW1lT3V0
KSkgewpAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6
ZGlkQWxsb2MKICAgICAvLyBXZSBwcmV0ZW5kIGl0J3Mgb25lIGJ5dGUgc28gdGhhdCB3ZSBkb24n
dCBpZ25vcmUgdGhpcyBhbGxvY2F0aW9uIGVudGlyZWx5LgogICAgIGlmICghYnl0ZXMpCiAgICAg
ICAgIGJ5dGVzID0gMTsKLSAgICBIZWFwKiBoZWFwID0gc3RhdGljX2Nhc3Q8SGVhcCo+KCZtX2ds
b2JhbERhdGEtPmhlYXApOworICAgIEhlYXAqIGhlYXAgPSBzdGF0aWNfY2FzdDxIZWFwKj4oJm1f
dm0tPmhlYXApOwogICAgIGRvdWJsZSBnY1RpbWVTbGljZSA9IHN0ZDo6bWluKChzdGF0aWNfY2Fz
dDxkb3VibGU+KGJ5dGVzKSAvIE1CKSAqIGdjVGltZVNsaWNlUGVyTUIsIG1heEdDVGltZVNsaWNl
KTsKICAgICBkb3VibGUgbmV3RGVsYXkgPSBoZWFwLT5sYXN0R0NMZW5ndGgoKSAvIGdjVGltZVNs
aWNlOwogICAgIHNjaGVkdWxlVGltZXIobmV3RGVsYXkpOwpAQCAtMTQzLDcgKzE0Myw3IEBAIHZv
aWQgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6Y2FuY2VsKCkKICNlbHNlCiAKIERlZmF1bHRH
Q0FjdGl2aXR5Q2FsbGJhY2s6OkRlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2soSGVhcCogaGVhcCkK
LSAgICA6IEdDQWN0aXZpdHlDYWxsYmFjayhoZWFwLT5nbG9iYWxEYXRhKCkpCisgICAgOiBHQ0Fj
dGl2aXR5Q2FsbGJhY2soaGVhcC0+dm0oKSkKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmgJKHJldmlzaW9uIDE0
ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFj
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxNCArNTIsMTQgQEAgcHVibGljOgogCiBwcm90ZWN0
ZWQ6CiAjaWYgVVNFKENGKQotICAgIEdDQWN0aXZpdHlDYWxsYmFjayhKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIENGUnVuTG9vcFJlZiBydW5Mb29wKQotICAgICAgICA6IEhlYXBUaW1lcihnbG9i
YWxEYXRhLCBydW5Mb29wKQorICAgIEdDQWN0aXZpdHlDYWxsYmFjayhWTSogdm0sIENGUnVuTG9v
cFJlZiBydW5Mb29wKQorICAgICAgICA6IEhlYXBUaW1lcih2bSwgcnVuTG9vcCkKICAgICAgICAg
LCBtX2VuYWJsZWQodHJ1ZSkKICAgICB7CiAgICAgfQogI2Vsc2UKLSAgICBHQ0FjdGl2aXR5Q2Fs
bGJhY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQotICAgICAgICA6IEhlYXBUaW1lcihnbG9i
YWxEYXRhKQorICAgIEdDQWN0aXZpdHlDYWxsYmFjayhWTSogdm0pCisgICAgICAgIDogSGVhcFRp
bWVyKHZtKQogICAgICAgICAsIG1fZW5hYmxlZCh0cnVlKQogICAgIHsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2tCbGFja0JlcnJ5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2
aXR5Q2FsbGJhY2tCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrQmxhY2tCZXJyeS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIwLDIwICsyMCwyMCBAQAogI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxs
YmFjay5oIgogCiAjaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgor
I2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTWVtb3J5Lmg+CiAK
IG5hbWVzcGFjZSBKU0MgewogCiBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpEZWZhdWx0R0NB
Y3Rpdml0eUNhbGxiYWNrKEhlYXAqIGhlYXApCi0gICAgOiBHQ0FjdGl2aXR5Q2FsbGJhY2soaGVh
cC0+Z2xvYmFsRGF0YSgpKQorICAgIDogR0NBY3Rpdml0eUNhbGxiYWNrKGhlYXAtPnZtKCkpCiB7
CiB9CiAKIHZvaWQgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6ZG9Xb3JrKCkKIHsKLSAgICBK
U0xvY2tIb2xkZXIgbG9jayhtX2dsb2JhbERhdGEpOwotICAgIG1fZ2xvYmFsRGF0YS0+aGVhcC5j
b2xsZWN0KEhlYXA6OkRvTm90U3dlZXApOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fdm0pOwor
ICAgIG1fdm0tPmhlYXAuY29sbGVjdChIZWFwOjpEb05vdFN3ZWVwKTsKIH0KIAogdm9pZCBEZWZh
dWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpkaWRBbGxvY2F0ZShzaXplX3QpCkBAIC00Miw3ICs0Miw3
IEBAIHZvaWQgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6ZGlkQWxsb2MKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gVHJ5IHVzaW5nIH41JSBDUFUgdGltZS4KLSAgICBtX3RpbWVyLnN0YXJ0
KG1fZ2xvYmFsRGF0YS0+aGVhcC5sYXN0R0NMZW5ndGgoKSAqIDIwKTsKKyAgICBtX3RpbWVyLnN0
YXJ0KG1fdm0tPmhlYXAubGFzdEdDTGVuZ3RoKCkgKiAyMCk7CiB9CiAKIHZvaWQgRGVmYXVsdEdD
QWN0aXZpdHlDYWxsYmFjazo6d2lsbENvbGxlY3QoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHJpdmF0ZTogICAgICAgIAog
ICAgICAgICBHZXR0ZXJTZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQotICAgICAgICAgICAgOiBKU0Nl
bGwoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRhKCkuZ2V0dGVyU2V0dGVyU3Ry
dWN0dXJlLmdldCgpKQorICAgICAgICAgICAgOiBKU0NlbGwoZXhlYy0+dm0oKSwgZXhlYy0+dm0o
KS5nZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBA
IC00OSwxOSArNDksMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBHZXR0ZXJT
ZXR0ZXIqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHsKICAgICAgICAgICAgIEdl
dHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8R2V0
dGVyU2V0dGVyPigqZXhlYy0+aGVhcCgpKSkgR2V0dGVyU2V0dGVyKGV4ZWMpOwotICAgICAgICAg
ICAgZ2V0dGVyU2V0dGVyLT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAg
ICAgICAgICAgZ2V0dGVyU2V0dGVyLT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKICAgICAg
ICAgICAgIHJldHVybiBnZXR0ZXJTZXR0ZXI7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgSlNP
YmplY3QqIGdldHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZ2V0dGVyLmdldCgpOyB9Ci0gICAgICAg
IHZvaWQgc2V0R2V0dGVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNPYmplY3QqIGdldHRl
cikgeyBtX2dldHRlci5zZXRNYXlCZU51bGwoZ2xvYmFsRGF0YSwgdGhpcywgZ2V0dGVyKTsgfQor
ICAgICAgICB2b2lkIHNldEdldHRlcihWTSYgdm0sIEpTT2JqZWN0KiBnZXR0ZXIpIHsgbV9nZXR0
ZXIuc2V0TWF5QmVOdWxsKHZtLCB0aGlzLCBnZXR0ZXIpOyB9CiAgICAgICAgIEpTT2JqZWN0KiBz
ZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX3NldHRlci5nZXQoKTsgfQotICAgICAgICB2b2lkIHNl
dFNldHRlcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTT2JqZWN0KiBzZXR0ZXIpIHsgbV9z
ZXR0ZXIuc2V0TWF5QmVOdWxsKGdsb2JhbERhdGEsIHRoaXMsIHNldHRlcik7IH0KLSAgICAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAg
ICAgIHZvaWQgc2V0U2V0dGVyKFZNJiB2bSwgSlNPYmplY3QqIHNldHRlcikgeyBtX3NldHRlci5z
ZXRNYXlCZU51bGwodm0sIHRoaXMsIHNldHRlcik7IH0KKyAgICAgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
R2V0dGVyU2V0dGVyVHlwZSwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiksICZzX2luZm8pOworICAg
ICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oR2V0dGVyU2V0dGVyVHlwZSwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiks
ICZzX2luZm8pOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xh
c3NJbmZvIHNfaW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50
aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lk
ZW50aWZpZXIuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTQgKzg4LDE0IEBA
IHN0cnVjdCBJZGVudGlmaWVyTENoYXJGcm9tVUNoYXJUcmFuc2xhdG8KICAgICB9CiB9OwogCi1Q
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZChKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIGNvbnN0IGNoYXIqIGMpCitQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6
OmFkZChWTSogdm0sIGNvbnN0IGNoYXIqIGMpCiB7CiAgICAgQVNTRVJUKGMpOwogICAgIEFTU0VS
VChjWzBdKTsKICAgICBpZiAoIWNbMV0pCi0gICAgICAgIHJldHVybiBhZGQoZ2xvYmFsRGF0YSwg
Z2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChjWzBdKSk7
CisgICAgICAgIHJldHVybiBhZGQodm0sIHZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVy
U3RyaW5nUmVwKGNbMF0pKTsKIAotICAgIElkZW50aWZpZXJUYWJsZSYgaWRlbnRpZmllclRhYmxl
ID0gKmdsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZTsKKyAgICBJZGVudGlmaWVyVGFibGUmIGlk
ZW50aWZpZXJUYWJsZSA9ICp2bS0+aWRlbnRpZmllclRhYmxlOwogICAgIExpdGVyYWxJZGVudGlm
aWVyVGFibGUmIGxpdGVyYWxJZGVudGlmaWVyVGFibGUgPSBpZGVudGlmaWVyVGFibGUubGl0ZXJh
bFRhYmxlKCk7CiAKICAgICBjb25zdCBMaXRlcmFsSWRlbnRpZmllclRhYmxlOjppdGVyYXRvciYg
aXRlciA9IGxpdGVyYWxJZGVudGlmaWVyVGFibGUuZmluZChjKTsKQEAgLTExNSwyOSArMTE1LDI5
IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEoKIAogUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFy
KiBjKQogewotICAgIHJldHVybiBhZGQoJmV4ZWMtPmdsb2JhbERhdGEoKSwgYyk7CisgICAgcmV0
dXJuIGFkZCgmZXhlYy0+dm0oKSwgYyk7CiB9CiAKLVBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRl
bnRpZmllcjo6YWRkOChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVDaGFyKiBzLCBp
bnQgbGVuZ3RoKQorUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQ4KFZNKiB2
bSwgY29uc3QgVUNoYXIqIHMsIGludCBsZW5ndGgpCiB7CiAgICAgaWYgKGxlbmd0aCA9PSAxKSB7
CiAgICAgICAgIFVDaGFyIGMgPSBzWzBdOwogICAgICAgICBBU1NFUlQoYyA8PSAweGZmKTsKICAg
ICAgICAgaWYgKGNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhjKSkKLSAgICAgICAgICAgIHJl
dHVybiBhZGQoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJh
Y3RlclN0cmluZ1JlcChjKSk7CisgICAgICAgICAgICByZXR1cm4gYWRkKHZtLCB2bS0+c21hbGxT
dHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChjKSk7CiAgICAgfQogICAgIAogICAgIGlm
ICghbGVuZ3RoKQogICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKICAgICBDaGFy
QnVmZmVyPFVDaGFyPiBidWYgPSB7IHMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGgpIH07
Ci0gICAgSGFzaFNldDxTdHJpbmdJbXBsKj46OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBnbG9iYWxE
YXRhLT5pZGVudGlmaWVyVGFibGUtPmFkZDxDaGFyQnVmZmVyPFVDaGFyPiwgSWRlbnRpZmllckxD
aGFyRnJvbVVDaGFyVHJhbnNsYXRvciA+KGJ1Zik7CisgICAgSGFzaFNldDxTdHJpbmdJbXBsKj46
OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSB2bS0+aWRlbnRpZmllclRhYmxlLT5hZGQ8Q2hhckJ1ZmZl
cjxVQ2hhcj4sIElkZW50aWZpZXJMQ2hhckZyb21VQ2hhclRyYW5zbGF0b3IgPihidWYpOwogICAg
IAogICAgIC8vIElmIHRoZSBzdHJpbmcgaXMgbmV3bHktdHJhbnNsYXRlZCwgdGhlbiB3ZSBuZWVk
IHRvIGFkb3B0IGl0LgogICAgIC8vIFRoZSBib29sZWFuIGluIHRoZSBwYWlyIHRlbGxzIHVzIGlm
IHRoYXQgaXMgc28uCiAgICAgcmV0dXJuIGFkZFJlc3VsdC5pc05ld0VudHJ5ID8gYWRvcHRSZWYo
KmFkZFJlc3VsdC5pdGVyYXRvcikgOiAqYWRkUmVzdWx0Lml0ZXJhdG9yOwogfQogCi1QYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZFNsb3dDYXNlKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgU3RyaW5nSW1wbCogcikKK1Bhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmll
cjo6YWRkU2xvd0Nhc2UoVk0qIHZtLCBTdHJpbmdJbXBsKiByKQogewogICAgIEFTU0VSVCghci0+
aXNJZGVudGlmaWVyKCkpOwogICAgIC8vIFRoZSBlbXB0eSAmIG51bGwgc3RyaW5ncyBhcmUgc3Rh
dGljIHNpbmdsZXRvbnMsIGFuZCBzdGF0aWMgc3RyaW5ncyBhcmUgaGFuZGxlZApAQCAtMTQ3LDY4
ICsxNDcsNjggQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGRTbAogICAg
IGlmIChyLT5sZW5ndGgoKSA9PSAxKSB7CiAgICAgICAgIFVDaGFyIGMgPSAoKnIpWzBdOwogICAg
ICAgICBpZiAoYyA8PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpCi0gICAgICAgICAgICByID0g
Z2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChjKTsKKyAg
ICAgICAgICAgIHIgPSB2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChj
KTsKICAgICAgICAgICAgIGlmIChyLT5pc0lkZW50aWZpZXIoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gcjsKICAgICB9CiAKLSAgICByZXR1cm4gKmdsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJs
ZS0+YWRkKHIpLml0ZXJhdG9yOworICAgIHJldHVybiAqdm0tPmlkZW50aWZpZXJUYWJsZS0+YWRk
KHIpLml0ZXJhdG9yOwogfQogCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFk
ZFNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nSW1wbCogcikKIHsKLSAgICByZXR1cm4g
YWRkU2xvd0Nhc2UoJmV4ZWMtPmdsb2JhbERhdGEoKSwgcik7CisgICAgcmV0dXJuIGFkZFNsb3dD
YXNlKCZleGVjLT52bSgpLCByKTsKIH0KIAogSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tKEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIElkZW50aWZpZXIo
ZXhlYywgZXhlYy0+Z2xvYmFsRGF0YSgpLm51bWVyaWNTdHJpbmdzLmFkZCh2YWx1ZSkpOworICAg
IHJldHVybiBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPnZtKCkubnVtZXJpY1N0cmluZ3MuYWRkKHZh
bHVlKSk7CiB9CiAKIElkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbShFeGVjU3RhdGUqIGV4ZWMs
IGludCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gSWRlbnRpZmllcihleGVjLCBleGVjLT5nbG9iYWxE
YXRhKCkubnVtZXJpY1N0cmluZ3MuYWRkKHZhbHVlKSk7CisgICAgcmV0dXJuIElkZW50aWZpZXIo
ZXhlYywgZXhlYy0+dm0oKS5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUpKTsKIH0KIAogSWRlbnRp
ZmllciBJZGVudGlmaWVyOjpmcm9tKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIHZhbHVlKQogewot
ICAgIHJldHVybiBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmdsb2JhbERhdGEoKS5udW1lcmljU3Ry
aW5ncy5hZGQodmFsdWUpKTsKKyAgICByZXR1cm4gSWRlbnRpZmllcihleGVjLCBleGVjLT52bSgp
Lm51bWVyaWNTdHJpbmdzLmFkZCh2YWx1ZSkpOwogfQogCi1JZGVudGlmaWVyIElkZW50aWZpZXI6
OmZyb20oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25lZCB2YWx1ZSkKK0lkZW50aWZp
ZXIgSWRlbnRpZmllcjo6ZnJvbShWTSogdm0sIHVuc2lnbmVkIHZhbHVlKQogewotICAgIHJldHVy
biBJZGVudGlmaWVyKGdsb2JhbERhdGEsIGdsb2JhbERhdGEtPm51bWVyaWNTdHJpbmdzLmFkZCh2
YWx1ZSkpOworICAgIHJldHVybiBJZGVudGlmaWVyKHZtLCB2bS0+bnVtZXJpY1N0cmluZ3MuYWRk
KHZhbHVlKSk7CiB9CiAKLUlkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbShKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIGludCB2YWx1ZSkKK0lkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbShWTSog
dm0sIGludCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gSWRlbnRpZmllcihnbG9iYWxEYXRhLCBnbG9i
YWxEYXRhLT5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUpKTsKKyAgICByZXR1cm4gSWRlbnRpZmll
cih2bSwgdm0tPm51bWVyaWNTdHJpbmdzLmFkZCh2YWx1ZSkpOwogfQogCi1JZGVudGlmaWVyIElk
ZW50aWZpZXI6OmZyb20oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBkb3VibGUgdmFsdWUpCitJ
ZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb20oVk0qIHZtLCBkb3VibGUgdmFsdWUpCiB7Ci0gICAg
cmV0dXJuIElkZW50aWZpZXIoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+bnVtZXJpY1N0cmluZ3Mu
YWRkKHZhbHVlKSk7CisgICAgcmV0dXJuIElkZW50aWZpZXIodm0sIHZtLT5udW1lcmljU3RyaW5n
cy5hZGQodmFsdWUpKTsKIH0KIAogI2lmbmRlZiBOREVCVUcKIAotdm9pZCBJZGVudGlmaWVyOjpj
aGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQordm9p
ZCBJZGVudGlmaWVyOjpjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUoVk0qIHZtKQogewogICAg
IC8vIENoZWNrIHRoZSBpZGVudGlmaWVyIHRhYmxlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgdGhy
ZWFkc3BlY2lmaWMgbWF0Y2hlcyB0aGUKLSAgICAvLyBnbG9iYWxEYXRhJ3MgaWRlbnRpZmllciB0
YWJsZS4KLSAgICBBU1NFUlRfVU5VU0VEKGdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmlkZW50aWZp
ZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpKTsKKyAg
ICAvLyB2bSdzIGlkZW50aWZpZXIgdGFibGUuCisgICAgQVNTRVJUX1VOVVNFRCh2bSwgdm0tPmlk
ZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgp
KTsKIH0KIAogdm9pZCBJZGVudGlmaWVyOjpjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIGNoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZSgmZXhlYy0+
Z2xvYmFsRGF0YSgpKTsKKyAgICBjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUoJmV4ZWMtPnZt
KCkpOwogfQogCiAjZWxzZQogCiAvLyBUaGVzZSBvbmx5IGV4aXN0cyBzbyB0aGF0IG91ciBleHBv
cnRzIGFyZSB0aGUgc2FtZSBmb3IgZGVidWcgYW5kIHJlbGVhc2UgYnVpbGRzLgogLy8gVGhpcyB3
b3VsZCBiZSBhbiBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpLCBidXQgd2UncmUgaW4gTkRF
QlVHIG9ubHkgY29kZSBoZXJlIQotTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIElkZW50aWZp
ZXI6OmNoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZShKU0dsb2JhbERhdGEqKSB7IENSQVNIKCk7
IH0KK05PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBJZGVudGlmaWVyOjpjaGVja0N1cnJlbnRJ
ZGVudGlmaWVyVGFibGUoVk0qKSB7IENSQVNIKCk7IH0KIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0gg
dm9pZCBJZGVudGlmaWVyOjpjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUoRXhlY1N0YXRlKikg
eyBDUkFTSCgpOyB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0lkZW50aWZpZXIuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBA
CiAjaWZuZGVmIElkZW50aWZpZXJfaAogI2RlZmluZSBJZGVudGlmaWVyX2gKIAotI2luY2x1ZGUg
IkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSA8d3RmL1RocmVhZFNw
ZWNpZmljLmg+CiAjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CkBAIC00MiwxNSArNDIsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KICAgICAgICAgSWRlbnRpZmll
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJzQ291
bnRdKSA6IG1fc3RyaW5nKGFkZChleGVjLCBjaGFyYWN0ZXJzKSkgeyB9CiAgICAgICAgIHRlbXBs
YXRlPHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KLSAgICAgICAgSWRlbnRpZmllcihKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJzQ291
bnRdKSA6IG1fc3RyaW5nKGFkZChnbG9iYWxEYXRhLCBjaGFyYWN0ZXJzKSkgeyB9CisgICAgICAg
IElkZW50aWZpZXIoVk0qIHZtLCBjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFjdGVyc0Nv
dW50XSkgOiBtX3N0cmluZyhhZGQodm0sIGNoYXJhY3RlcnMpKSB7IH0KIAogICAgICAgICBJZGVu
dGlmaWVyKEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nSW1wbCogcmVwKSA6IG1fc3RyaW5nKGFkZChl
eGVjLCByZXApKSB7IH0KICAgICAgICAgSWRlbnRpZmllcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IFN0cmluZyYgcykgOiBtX3N0cmluZyhhZGQoZXhlYywgcy5pbXBsKCkpKSB7IH0KIAotICAgICAg
ICBJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgTENoYXIqIHMsIGlu
dCBsZW5ndGgpIDogbV9zdHJpbmcoYWRkKGdsb2JhbERhdGEsIHMsIGxlbmd0aCkpIHsgfQotICAg
ICAgICBJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVUNoYXIqIHMs
IGludCBsZW5ndGgpIDogbV9zdHJpbmcoYWRkKGdsb2JhbERhdGEsIHMsIGxlbmd0aCkpIHsgfQot
ICAgICAgICBJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU3RyaW5nSW1wbCog
cmVwKSA6IG1fc3RyaW5nKGFkZChnbG9iYWxEYXRhLCByZXApKSB7IH0gCi0gICAgICAgIElkZW50
aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBTdHJpbmcmIHMpIDogbV9zdHJp
bmcoYWRkKGdsb2JhbERhdGEsIHMuaW1wbCgpKSkgeyB9CisgICAgICAgIElkZW50aWZpZXIoVk0q
IHZtLCBjb25zdCBMQ2hhciogcywgaW50IGxlbmd0aCkgOiBtX3N0cmluZyhhZGQodm0sIHMsIGxl
bmd0aCkpIHsgfQorICAgICAgICBJZGVudGlmaWVyKFZNKiB2bSwgY29uc3QgVUNoYXIqIHMsIGlu
dCBsZW5ndGgpIDogbV9zdHJpbmcoYWRkKHZtLCBzLCBsZW5ndGgpKSB7IH0KKyAgICAgICAgSWRl
bnRpZmllcihWTSogdm0sIFN0cmluZ0ltcGwqIHJlcCkgOiBtX3N0cmluZyhhZGQodm0sIHJlcCkp
IHsgfSAKKyAgICAgICAgSWRlbnRpZmllcihWTSogdm0sIGNvbnN0IFN0cmluZyYgcykgOiBtX3N0
cmluZyhhZGQodm0sIHMuaW1wbCgpKSkgeyB9CiAKICAgICAgICAgY29uc3QgU3RyaW5nJiBzdHJp
bmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZzsgfQogICAgICAgICBTdHJpbmdJbXBsKiBpbXBs
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaW1wbCgpOyB9CkBAIC02MCwxNCArNjAsMTQgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBDU3RyaW5nIGFzY2lpKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJpbmcuYXNjaWkoKTsgfQogCi0gICAgICAgIHN0YXRpYyBJZGVudGlmaWVy
IGNyZWF0ZUxDaGFyRnJvbVVDaGFyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVUNo
YXIqIHMsIGludCBsZW5ndGgpIHsgcmV0dXJuIElkZW50aWZpZXIoZ2xvYmFsRGF0YSwgYWRkOChn
bG9iYWxEYXRhLCBzLCBsZW5ndGgpKTsgfQorICAgICAgICBzdGF0aWMgSWRlbnRpZmllciBjcmVh
dGVMQ2hhckZyb21VQ2hhcihWTSogdm0sIGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVuZ3RoKSB7IHJl
dHVybiBJZGVudGlmaWVyKHZtLCBhZGQ4KHZtLCBzLCBsZW5ndGgpKTsgfQogCiAgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBJZGVudGlmaWVyIGZyb20oRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCB5KTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIElkZW50aWZpZXIg
ZnJvbShFeGVjU3RhdGUqIGV4ZWMsIGludCB5KTsKICAgICAgICAgc3RhdGljIElkZW50aWZpZXIg
ZnJvbShFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB5KTsKLSAgICAgICAgc3RhdGljIElkZW50aWZp
ZXIgZnJvbShKU0dsb2JhbERhdGEqLCB1bnNpZ25lZCB5KTsKLSAgICAgICAgc3RhdGljIElkZW50
aWZpZXIgZnJvbShKU0dsb2JhbERhdGEqLCBpbnQgeSk7Ci0gICAgICAgIHN0YXRpYyBJZGVudGlm
aWVyIGZyb20oSlNHbG9iYWxEYXRhKiwgZG91YmxlIHkpOworICAgICAgICBzdGF0aWMgSWRlbnRp
ZmllciBmcm9tKFZNKiwgdW5zaWduZWQgeSk7CisgICAgICAgIHN0YXRpYyBJZGVudGlmaWVyIGZy
b20oVk0qLCBpbnQgeSk7CisgICAgICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb20oVk0qLCBkb3Vi
bGUgeSk7CiAKICAgICAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5p
c051bGwoKTsgfQogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3N0cmlu
Zy5pc0VtcHR5KCk7IH0KQEAgLTg3LDcgKzg3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0IFN0cmluZ0ltcGwq
IGIpIHsgcmV0dXJuIDo6ZXF1YWwoYSwgYik7IH0KIAogICAgICAgICAvLyBPbmx5IHRvIGJlIHVz
ZWQgd2l0aCBzdHJpbmcgbGl0ZXJhbHMuCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IGFkZChKU0dsb2JhbERhdGEqLCBjb25zdCBjaGFyKik7CisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChWTSosIGNvbnN0IGNoYXIqKTsKICAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKEV4ZWNTdGF0
ZSosIGNvbnN0IGNoYXIqKTsKIAogICAgIHByaXZhdGU6CkBAIC05OSw4ICs5OSw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBJZGVudGlmaWVyJiBh
LCBjb25zdCBJZGVudGlmaWVyJiBiKSB7IHJldHVybiBhLm1fc3RyaW5nLmltcGwoKSA9PSBiLm1f
c3RyaW5nLmltcGwoKTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBJZGVudGlm
aWVyJiBhLCBjb25zdCBMQ2hhciogYikgeyByZXR1cm4gZXF1YWwoYS5tX3N0cmluZy5pbXBsKCks
IGIpOyB9CiAKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyBQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IGFkZChKU0dsb2JhbERhdGEqLCBjb25zdCBUKiwgaW50IGxlbmd0aCk7Ci0g
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZDgoSlNHbG9iYWxEYXRhKiwg
Y29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChWTSosIGNvbnN0IFQqLCBpbnQgbGVu
Z3RoKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkOChWTSosIGNv
bnN0IFVDaGFyKiwgaW50IGxlbmd0aCk7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBB
TFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhUKTsK
IAogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoRXhlY1N0YXRlKiBl
eGVjLCBTdHJpbmdJbXBsKiByKQpAQCAtMTEyLDIxICsxMTIsMjEgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHI7CiAgICAgICAgICAgICByZXR1cm4gYWRkU2xvd0Nh
c2UoZXhlYywgcik7CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gYWRkKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU3RyaW5nSW1wbCogcikKKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKFZNKiB2bSwgU3RyaW5nSW1wbCog
cikKICAgICAgICAgewogI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgIGNoZWNrQ3VycmVudElk
ZW50aWZpZXJUYWJsZShnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIGNoZWNrQ3VycmVudElkZW50
aWZpZXJUYWJsZSh2bSk7CiAjZW5kaWYKICAgICAgICAgICAgIGlmIChyLT5pc0lkZW50aWZpZXIo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gcjsKLSAgICAgICAgICAgIHJldHVybiBhZGRTbG93
Q2FzZShnbG9iYWxEYXRhLCByKTsKKyAgICAgICAgICAgIHJldHVybiBhZGRTbG93Q2FzZSh2bSwg
cik7CiAgICAgICAgIH0KIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBhZGRTbG93Q2FzZShFeGVjU3RhdGUqLCBTdHJpbmdJbXBsKiByKTsK
LSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
YWRkU2xvd0Nhc2UoSlNHbG9iYWxEYXRhKiwgU3RyaW5nSW1wbCogcik7CisgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZFNsb3dDYXNlKFZN
KiwgU3RyaW5nSW1wbCogcik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgY2hlY2tDdXJyZW50SWRlbnRpZmllclRhYmxlKEV4ZWNTdGF0ZSopOwotICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBjaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGUoSlNH
bG9iYWxEYXRhKik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGNoZWNr
Q3VycmVudElkZW50aWZpZXJUYWJsZShWTSopOwogICAgIH07CiAKICAgICB0ZW1wbGF0ZSA8PiBB
TFdBWVNfSU5MSU5FIGJvb2wgSWRlbnRpZmllcjo6Y2FuVXNlU2luZ2xlQ2hhcmFjdGVyU3RyaW5n
KExDaGFyKQpAQCAtMTcwLDE4ICsxNzAsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAog
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRl
bnRpZmllcjo6YWRkKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVCogcywgaW50IGxl
bmd0aCkKKyAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZChWTSogdm0s
IGNvbnN0IFQqIHMsIGludCBsZW5ndGgpCiAgICAgewogICAgICAgICBpZiAobGVuZ3RoID09IDEp
IHsKICAgICAgICAgICAgIFQgYyA9IHNbMF07CiAgICAgICAgICAgICBpZiAoY2FuVXNlU2luZ2xl
Q2hhcmFjdGVyU3RyaW5nKGMpKQotICAgICAgICAgICAgICAgIHJldHVybiBhZGQoZ2xvYmFsRGF0
YSwgZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChjKSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGFkZCh2bSwgdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVD
aGFyYWN0ZXJTdHJpbmdSZXAoYykpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAo
IWxlbmd0aCkKICAgICAgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgpOwogICAgICAg
ICBDaGFyQnVmZmVyPFQ+IGJ1ZiA9IHsgcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCkg
fTsKLSAgICAgICAgSGFzaFNldDxTdHJpbmdJbXBsKj46OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBn
bG9iYWxEYXRhLT5pZGVudGlmaWVyVGFibGUtPmFkZDxDaGFyQnVmZmVyPFQ+LCBJZGVudGlmaWVy
Q2hhckJ1ZmZlclRyYW5zbGF0b3I8VD4gPihidWYpOworICAgICAgICBIYXNoU2V0PFN0cmluZ0lt
cGwqPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IHZtLT5pZGVudGlmaWVyVGFibGUtPmFkZDxDaGFy
QnVmZmVyPFQ+LCBJZGVudGlmaWVyQ2hhckJ1ZmZlclRyYW5zbGF0b3I8VD4gPihidWYpOwogICAg
ICAgICAKICAgICAgICAgLy8gSWYgdGhlIHN0cmluZyBpcyBuZXdseS10cmFuc2xhdGVkLCB0aGVu
IHdlIG5lZWQgdG8gYWRvcHQgaXQuCiAgICAgICAgIC8vIFRoZSBib29sZWFuIGluIHRoZSBwYWly
IHRlbGxzIHVzIGlmIHRoYXQgaXMgc28uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDI2ICszNSwyNiBAQCBBU1NFUlRfSEFTX1RSSVZJQUxfREVTVFJVQ1RP
UihJbnRlcm5hbEZ1CiBjb25zdCBDbGFzc0luZm8gSW50ZXJuYWxGdW5jdGlvbjo6c19pbmZvID0g
eyAiRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKElu
dGVybmFsRnVuY3Rpb24pIH07CiAKIEludGVybmFsRnVuY3Rpb246OkludGVybmFsRnVuY3Rpb24o
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAg
OiBKU0Rlc3RydWN0aWJsZU9iamVjdChnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgc3RydWN0
dXJlKQorICAgIDogSlNEZXN0cnVjdGlibGVPYmplY3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBzdHJ1
Y3R1cmUpCiB7CiB9CiAKLXZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIEludGVybmFs
RnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgY29uc3QgU3RyaW5nJiBuYW1lKQogewot
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogICAgIEFTU0VSVCht
ZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YSAhPSBJbnRlcm5hbEZ1bmN0aW9uOjpzX2luZm8ubWV0
aG9kVGFibGUuZ2V0Q2FsbERhdGEpOwotICAgIHB1dERpcmVjdChnbG9iYWxEYXRhLCBnbG9iYWxE
YXRhLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzU3RyaW5nKCZnbG9iYWxEYXRhLCBuYW1lKSwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bmFtZSwganNTdHJpbmcoJnZtLCBuYW1lKSwgRG9udERlbGV0ZSB8IFJlYWRP
bmx5IHwgRG9udEVudW0pOwogfQogCiBjb25zdCBTdHJpbmcmIEludGVybmFsRnVuY3Rpb246Om5h
bWUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBhc1N0cmluZyhnZXREaXJlY3QoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+bmFtZSkp
LT50cnlHZXRWYWx1ZSgpOworICAgIHJldHVybiBhc1N0cmluZyhnZXREaXJlY3QoZXhlYy0+dm0o
KSwgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5uYW1lKSktPnRyeUdldFZhbHVlKCk7CiB9CiAK
IGNvbnN0IFN0cmluZyBJbnRlcm5hbEZ1bmN0aW9uOjpkaXNwbGF5TmFtZShFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgSlNWYWx1ZSBkaXNwbGF5TmFtZSA9IGdldERpcmVjdChleGVjLT5nbG9iYWxE
YXRhKCksIGV4ZWMtPmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5kaXNwbGF5TmFtZSk7Cisg
ICAgSlNWYWx1ZSBkaXNwbGF5TmFtZSA9IGdldERpcmVjdChleGVjLT52bSgpLCBleGVjLT52bSgp
LnByb3BlcnR5TmFtZXMtPmRpc3BsYXlOYW1lKTsKICAgICAKICAgICBpZiAoZGlzcGxheU5hbWUg
JiYgaXNKU1N0cmluZyhkaXNwbGF5TmFtZSkpCiAgICAgICAgIHJldHVybiBhc1N0cmluZyhkaXNw
bGF5TmFtZSktPnRyeUdldFZhbHVlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDkgKzQxLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGNvbnN0IFN0cmlu
ZyBkaXNwbGF5TmFtZShFeGVjU3RhdGUqKTsKICAgICAgICAgY29uc3QgU3RyaW5nIGNhbGN1bGF0
ZWREaXNwbGF5TmFtZShFeGVjU3RhdGUqKTsKIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKSAKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90bykgCiAgICAgICAgIHsgCi0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCisgICAgICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7IAogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6
CkBAIC01MSw3ICs1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIEludGVybmFsRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAot
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0
YSYsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAgICAgICAgIHN0YXRp
YyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOwogICAgIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FQSVZhbHVlV3JhcHBlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVy
LmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QVBJVmFsdWVXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDkgKzM3LDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWUuZ2V0KCk7IH0KIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9i
YWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQVBJVmFsdWVXcmFwcGVy
VHlwZSwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMp
LCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEFQSVZhbHVlV3JhcHBlclR5cGUsIE92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzKSwgJnNfaW5mbyk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0
IENsYXNzSW5mbyBzX2luZm87CkBAIC01NCwxNCArNTQsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB2YWx1ZSkKICAgICAgICAgewotICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgICAgIG1fdmFsdWUuc2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZXhlYy0+dm0oKSk7CisgICAgICAgICAgICBtX3ZhbHVlLnNldChleGVjLT52bSgpLCB0
aGlzLCB2YWx1ZSk7CiAgICAgICAgICAgICBBU1NFUlQoIXZhbHVlLmlzQ2VsbCgpKTsKICAgICAg
ICAgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgSlNBUElWYWx1ZVdyYXBwZXIoRXhlY1N0YXRl
KiBleGVjKQotICAgICAgICAgICAgOiBKU0NlbGwoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5n
bG9iYWxEYXRhKCkuYXBpV3JhcHBlclN0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgICAgIDogSlND
ZWxsKGV4ZWMtPnZtKCksIGV4ZWMtPnZtKCkuYXBpV3JhcHBlclN0cnVjdHVyZS5nZXQoKSkKICAg
ICAgICAgewogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQWN0aXZhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYs
NyArODYsNyBAQCBpbmxpbmUgYm9vbCBKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxlR2V0CiAKIGlu
bGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXQoRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93
KQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkg
fHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzKSk7CiAgICAgCiAgICAgU3lt
Ym9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCktPmlubGluZUdldChwcm9wZXJ0eU5h
bWUucHVibGljTmFtZSgpKTsKQEAgLTEwMiw3ICsxMDIsNyBAQCBpbmxpbmUgYm9vbCBKU0FjdGl2
YXRpb246OnN5bWJvbFRhYmxlUHV0CiAgICAgaWYgKGlzVG9ybk9mZigpICYmICFpc1ZhbGlkKGVu
dHJ5KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmVnaXN0ZXJBdChlbnRyeS5nZXRJ
bmRleCgpKS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgIHJlZ2lzdGVyQXQoZW50
cnkuZ2V0SW5kZXgoKSkuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTEyNSw3ICsxMjUsNyBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3duTm9uSW5kZXhQ
cm9wZXJ0CiAgICAgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAotaW5saW5lIGJvb2wgSlNBY3Rp
dmF0aW9uOjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQg
YXR0cmlidXRlcykKK2lubGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXRXaXRo
QXR0cmlidXRlcyhWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVl
KSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKICAgICAKQEAgLTEz
OCw3ICsxMzgsNyBAQCBpbmxpbmUgYm9vbCBKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxlUHV0CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0cmlidXRl
cyk7Ci0gICAgcmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgdmFsdWUpOworICAgIHJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuc2V0KHZtLCB0aGlz
LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE1Nyw3ICsxNTcsNyBAQCBib29s
IEpTQWN0aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEpTCiAgICAgaWYgKHRoaXNPYmplY3Qt
PnN5bWJvbFRhYmxlR2V0KHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCi0gICAgaWYgKEpTVmFsdWUgdmFsdWUgPSB0aGlzT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpKSB7CisgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSB0
aGlzT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKSkgewogICAgICAg
ICBzbG90LnNldFZhbHVlKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAt
MjAxLDcgKzIwMSw3IEBAIHZvaWQgSlNBY3RpdmF0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGUK
ICAgICAvLyBwcm9wZXJ0aWVzIGFyZSBub24tc3RhbmRhcmQgZXh0ZW5zaW9ucyB0aGF0IG90aGVy
IGltcGxlbWVudGF0aW9ucyBkbyBub3QKICAgICAvLyBleHBvc2UgaW4gdGhlIGFjdGl2YXRpb24g
b2JqZWN0LgogICAgIEFTU0VSVCghdGhpc09iamVjdC0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGll
cygpKTsKLSAgICB0aGlzT2JqZWN0LT5wdXRPd25EYXRhUHJvcGVydHkoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICB0aGlzT2JqZWN0LT5wdXRPd25E
YXRhUHJvcGVydHkoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAK
IC8vIEZJWE1FOiBNYWtlIHRoaXMgZnVuY3Rpb24gaG9ub3IgUmVhZE9ubHkgKGNvbnN0KSBhbmQg
RG9udEVudW0KQEAgLTIxMCw3ICsyMTAsNyBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6cHV0RGlyZWN0
VmlydHVhbChKU09iCiAgICAgSlNBY3RpdmF0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQWN0
aXZhdGlvbio+KG9iamVjdCk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFw
OjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpKTsKIAotICAgIGlmICh0aGlz
T2JqZWN0LT5zeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKGV4ZWMtPmdsb2JhbERhdGEoKSwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcykpCisgICAgaWYgKHRoaXNPYmplY3QtPnN5
bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgYXR0cmlidXRlcykpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlIGRvbid0IGNhbGwg
dGhyb3VnaCB0byBKU09iamVjdCBiZWNhdXNlIF9fcHJvdG9fXyBhbmQgZ2V0dGVyL3NldHRlciAK
QEAgLTI0NSw3ICsyNDUsNyBAQCBKU1ZhbHVlIEpTQWN0aXZhdGlvbjo6YXJndW1lbnRzR2V0dGVy
KEV4CiAgICAgICAgIHJldHVybiBhcmd1bWVudHM7CiAgICAgaW50IHJlYWxBcmd1bWVudHNSZWdp
c3RlciA9IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rlcik7CiAK
LSAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWUoQXJndW1lbnRzOjpjcmVhdGUoY2FsbEZy
YW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZSkpOworICAgIEpTVmFsdWUgYXJndW1lbnRzID0g
SlNWYWx1ZShBcmd1bWVudHM6OmNyZWF0ZShjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZSkpOwog
ICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihhcmd1bWVudHNSZWdpc3RlcikgPSBhcmd1bWVudHM7
CiAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHJlYWxBcmd1bWVudHNSZWdpc3RlcikgPSBhcmd1
bWVudHM7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2
YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fj
dGl2YXRpb24uaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDIyICs0MSwyMiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAKICAgICBjbGFzcyBKU0FjdGl2YXRpb24gOiBwdWJsaWMgSlNW
YXJpYWJsZU9iamVjdCB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgSlNBY3RpdmF0aW9uKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ2FsbEZyYW1lKiwgU2hhcmVkU3ltYm9sVGFibGUqKTsKKyAg
ICAgICAgSlNBY3RpdmF0aW9uKFZNJiB2bSwgQ2FsbEZyYW1lKiwgU2hhcmVkU3ltYm9sVGFibGUq
KTsKICAgICAKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNWYXJpYWJsZU9iamVjdCBC
YXNlOwogCi0gICAgICAgIHN0YXRpYyBKU0FjdGl2YXRpb24qIGNyZWF0ZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykK
KyAgICAgICAgc3RhdGljIEpTQWN0aXZhdGlvbiogY3JlYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrKQogICAgICAgICB7CiAgICAgICAgICAgICBT
aGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCk7
CiAgICAgICAgICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBuZXcgKAogICAgICAgICAg
ICAgICAgIE5vdE51bGwsCiAgICAgICAgICAgICAgICAgYWxsb2NhdGVDZWxsPEpTQWN0aXZhdGlv
bj4oCi0gICAgICAgICAgICAgICAgICAgIGdsb2JhbERhdGEuaGVhcCwKKyAgICAgICAgICAgICAg
ICAgICAgdm0uaGVhcCwKICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvblNpemUoc3ltYm9s
VGFibGUpCiAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgKSBKU0FjdGl2YXRpb24oZ2xv
YmFsRGF0YSwgY2FsbEZyYW1lLCBzeW1ib2xUYWJsZSk7Ci0gICAgICAgICAgICBhY3RpdmF0aW9u
LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgICkgSlNBY3RpdmF0aW9u
KHZtLCBjYWxsRnJhbWUsIHN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgIGFjdGl2YXRpb24tPmZp
bmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgICAgIHJldHVybiBhY3RpdmF0aW9uOwogICAgICAg
ICB9CiAKQEAgLTc1LDExICs3NSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0
aWMgSlNPYmplY3QqIHRvVGhpc09iamVjdChKU0NlbGwqLCBFeGVjU3RhdGUqKTsKIAotICAgICAg
ICB2b2lkIHRlYXJPZmYoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIHZvaWQgdGVhck9mZihWTSYp
OwogICAgICAgICAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAg
ICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykgeyBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywg
VHlwZUluZm8oQWN0aXZhdGlvbk9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
IH0KKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykgeyByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKEFjdGl2YXRpb25P
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyB9CiAKICAgICAgICAgV3JpdGVC
YXJyaWVyQmFzZTxVbmtub3duPiYgcmVnaXN0ZXJBdChpbnQpIGNvbnN0OwogICAgICAgICBib29s
IGlzVmFsaWRJbmRleChpbnQpIGNvbnN0OwpAQCAtOTYsNyArOTYsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgYm9vbCBzeW1ib2xUYWJsZUdldChQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYpOwogICAgICAgICBib29sIHN5bWJvbFRhYmxlR2V0KFByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JiwgYm9vbCYgc2xvdElzV3JpdGVhYmxlKTsKICAgICAgICAgYm9vbCBzeW1ib2xU
YWJsZVB1dChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhy
b3cpOwotICAgICAgICBib29sIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoSlNHbG9iYWxE
YXRhJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAgICAg
ICAgYm9vbCBzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKFZNJiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKIAogICAgICAgICBzdGF0aWMgSlNWYWx1ZSBh
cmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKICAgICAg
ICAgTkVWRVJfSU5MSU5FIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldEFyZ3VtZW50c0dl
dHRlcigpOwpAQCAtMTEwLDkgKzExMCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGV4dGVybiBp
bnQgYWN0aXZhdGlvbkNvdW50OwogICAgIGV4dGVybiBpbnQgYWxsVGhlVGhpbmdzQ291bnQ7CiAK
LSAgICBpbmxpbmUgSlNBY3RpdmF0aW9uOjpKU0FjdGl2YXRpb24oSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRh
YmxlKQorICAgIGlubGluZSBKU0FjdGl2YXRpb246OkpTQWN0aXZhdGlvbihWTSYgdm0sIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCiAgICAgICAg
IDogQmFzZSgKLSAgICAgICAgICAgIGdsb2JhbERhdGEsCisgICAgICAgICAgICB2bSwKICAgICAg
ICAgICAgIGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hY3RpdmF0aW9uU3RydWN0
dXJlKCksCiAgICAgICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpLAogICAgICAgICAgICAg
Y2FsbEZyYW1lLT5zY29wZSgpLApAQCAtMTQ5LDcgKzE0OSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICByZXR1cm4gc3RvcmFnZU9mZnNldCgpIC0gKHN5bWJvbFRhYmxlLT5jYXB0dXJlU3Rh
cnQoKSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKTsKICAgICB9CiAKLSAgICBpbmxp
bmUgdm9pZCBKU0FjdGl2YXRpb246OnRlYXJPZmYoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQor
ICAgIGlubGluZSB2b2lkIEpTQWN0aXZhdGlvbjo6dGVhck9mZihWTSYgdm0pCiAgICAgewogICAg
ICAgICBBU1NFUlQoIWlzVG9ybk9mZigpKTsKIApAQCAtMTU5LDcgKzE1OSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIGludCBjYXB0dXJlRW5kID0gc3ltYm9sVGFibGUoKS0+Y2FwdHVy
ZUVuZCgpOwogICAgICAgICBmb3IgKGludCBpID0gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0
KCk7IGkgPCBjYXB0dXJlRW5kOyArK2kpCi0gICAgICAgICAgICBkc3RbaV0uc2V0KGdsb2JhbERh
dGEsIHRoaXMsIHNyY1tpXS5nZXQoKSk7CisgICAgICAgICAgICBkc3RbaV0uc2V0KHZtLCB0aGlz
LCBzcmNbaV0uZ2V0KCkpOwogCiAgICAgICAgIG1fcmVnaXN0ZXJzID0gZHN0OwogICAgICAgICBB
U1NFUlQoaXNUb3JuT2ZmKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMCArNDgsMTAgQEAgQVNT
RVJUX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoSlNBcnJheSk7CiAKIGNvbnN0IENsYXNzSW5mbyBK
U0FycmF5OjpzX2luZm8gPSB7IkFycmF5IiwgJkpTTm9uRmluYWxPYmplY3Q6OnNfaW5mbywgMCwg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5KX07CiAKLUJ1dHRlcmZseSogY3JlYXRlQXJy
YXlCdXR0ZXJmbHlJbkRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQorQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRl
cmZseUluRGljdGlvbmFyeUluZGV4aW5nTW9kZShWTSYgdm0sIHVuc2lnbmVkIGluaXRpYWxMZW5n
dGgpCiB7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZSgKLSAg
ICAgICAgZ2xvYmFsRGF0YSwgMCwgMCwgdHJ1ZSwgSW5kZXhpbmdIZWFkZXIoKSwgQXJyYXlTdG9y
YWdlOjpzaXplRm9yKDApKTsKKyAgICAgICAgdm0sIDAsIDAsIHRydWUsIEluZGV4aW5nSGVhZGVy
KCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CiAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaW5p
dGlhbExlbmd0aCk7CiAgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKDApOwpAQCAtNjcsNyAr
NjcsNyBAQCB2b2lkIEpTQXJyYXk6OnNldExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0CiAgICAgaWYg
KCFpc0xlbmd0aFdyaXRhYmxlKCkgfHwgd3JpdGFibGUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIGVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShleGVjLT52bSgpKTsKIAogICAgIFNwYXJzZUFycmF5
VmFsdWVNYXAqIG1hcCA9IGFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKTsKICAgICBB
U1NFUlQobWFwKTsKQEAgLTI0NCw5ICsyNDQsOSBAQCB2b2lkIEpTQXJyYXk6OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lCiB9CiAKIC8vIFRoaXMgbWV0aG9kIG1ha2VzIHJvb20gaW4gdGhlIHZl
Y3RvciwgYnV0IGxlYXZlcyB0aGUgbmV3IHNwYWNlIGZvciBjb3VudCBzbG90cyB1bmNsZWFyZWQu
Ci1ib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgYm9vbCBhZGRUb0Zyb250LCB1bnNpZ25lZCBjb3VudCkKK2Jvb2wgSlNBcnJheTo6dW5z
aGlmdENvdW50U2xvd0Nhc2UoVk0mIHZtLCBib29sIGFkZFRvRnJvbnQsIHVuc2lnbmVkIGNvdW50
KQogewotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZShnbG9i
YWxEYXRhKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3JhZ2Uo
dm0pOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCk7CiAg
ICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpOwogICAgIHVuc2lnbmVkIHByb3BlcnR5U2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVTaXplKCk7CkBAIC0yODYsNyArMjg2LDcgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRT
bG93Q2FzZShKU0dsbwogICAgICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBjdXJyZW50Q2FwYWNp
dHk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBCdXR0ZXJmbHk6OnRv
dGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3Io
ZGVzaXJlZENhcGFjaXR5KSk7Ci0gICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9j
YXRlU3RvcmFnZShuZXdTaXplLCAmbmV3QWxsb2NCYXNlKSkKKyAgICAgICAgaWYgKCF2bS5oZWFw
LnRyeUFsbG9jYXRlU3RvcmFnZShuZXdTaXplLCAmbmV3QWxsb2NCYXNlKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gZGVzaXJlZENhcGFj
aXR5OwogICAgIH0KQEAgLTQwOCw5ICs0MDgsOSBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aChF
eGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgIGlmIChuZXdMZW5ndGggPj0gTUlOX1NQQVJTRV9BUlJB
WV9JTkRFWCkgewogICAgICAgICAgICAgcmV0dXJuIHNldExlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
CiAgICAgICAgICAgICAgICAgZXhlYywgbmV3TGVuZ3RoLCB0aHJvd0V4Y2VwdGlvbiwKLSAgICAg
ICAgICAgICAgICBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERh
dGEoKSkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uo
ZXhlYy0+dm0oKSkpOwogICAgICAgICB9Ci0gICAgICAgIGNyZWF0ZUluaXRpYWxVbmRlY2lkZWQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBuZXdMZW5ndGgpOworICAgICAgICBjcmVhdGVJbml0aWFsVW5k
ZWNpZGVkKGV4ZWMtPnZtKCksIG5ld0xlbmd0aCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAKICAgICBjYXNlIEFycmF5V2l0aFVuZGVjaWRlZDoKQEAgLTQyNCwxMCArNDI0LDEwIEBA
IGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgICAgICAg
ICAmJiAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihuZXdMZW5ndGgsIGNvdW50RWxlbWVudHMoKSkp
KSB7CiAgICAgICAgICAgICByZXR1cm4gc2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKICAgICAg
ICAgICAgICAgICBleGVjLCBuZXdMZW5ndGgsIHRocm93RXhjZXB0aW9uLAotICAgICAgICAgICAg
ICAgIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgICAg
ICAgICBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOwogICAgICAgICB9CiAgICAgICAg
IGlmIChuZXdMZW5ndGggPiBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpIHsKLSAgICAgICAg
ICAgIGVuc3VyZUxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIG5ld0xlbmd0aCk7CisgICAgICAg
ICAgICBlbnN1cmVMZW5ndGgoZXhlYy0+dm0oKSwgbmV3TGVuZ3RoKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkgPT0gQXJyYXlXaXRoRG91YmxlKSB7CkBAIC01NDksMTkgKzU0OSwxOSBAQCB2b2lkIEpT
QXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiB7CiAgICAgc3dpdGNoIChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6IHsKLSAgICAgICAg
Y3JlYXRlSW5pdGlhbFVuZGVjaWRlZChleGVjLT5nbG9iYWxEYXRhKCksIDApOworICAgICAgICBj
cmVhdGVJbml0aWFsVW5kZWNpZGVkKGV4ZWMtPnZtKCksIDApOwogICAgICAgICAvLyBGYWxsIHRo
cm91Z2guCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0aFVuZGVjaWRlZDogewot
ICAgICAgICBjb252ZXJ0VW5kZWNpZGVkRm9yVmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB2YWx1
ZSk7CisgICAgICAgIGNvbnZlcnRVbmRlY2lkZWRGb3JWYWx1ZShleGVjLT52bSgpLCB2YWx1ZSk7
CiAgICAgICAgIHB1c2goZXhlYywgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
ICAgICAKICAgICBjYXNlIEFycmF5V2l0aEludDMyOiB7CiAgICAgICAgIGlmICghdmFsdWUuaXNJ
bnQzMigpKSB7Ci0gICAgICAgICAgICBjb252ZXJ0SW50MzJGb3JWYWx1ZShleGVjLT5nbG9iYWxE
YXRhKCksIHZhbHVlKTsKKyAgICAgICAgICAgIGNvbnZlcnRJbnQzMkZvclZhbHVlKGV4ZWMtPnZt
KCksIHZhbHVlKTsKICAgICAgICAgICAgIHB1c2goZXhlYywgdmFsdWUpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CkBAIC01ODksNyArNTg5LDcgQEAgdm9pZCBKU0FycmF5OjpwdXNo
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2J1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCk7CiAgICAgICAgIEFTU0VSVChsZW5ndGggPD0gbV9idXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgaWYgKGxlbmd0aCA8IG1fYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKSkgewotICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVts
ZW5ndGhdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAg
IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3RoXS5zZXQoZXhlYy0+dm0oKSwgdGhpcywg
dmFsdWUpOwogICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgg
KyAxKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNjA3LDEzICs2MDcsMTMg
QEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgICAgICAKICAg
ICBjYXNlIEFycmF5V2l0aERvdWJsZTogewogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkp
IHsKLSAgICAgICAgICAgIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoZXhlYy0+Z2xvYmFsRGF0
YSgpKTsKKyAgICAgICAgICAgIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoZXhlYy0+dm0oKSk7
CiAgICAgICAgICAgICBwdXNoKGV4ZWMsIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICBkb3VibGUgdmFsdWVBc0RvdWJsZSA9IHZhbHVlLmFzTnVtYmVyKCk7
CiAgICAgICAgIGlmICh2YWx1ZUFzRG91YmxlICE9IHZhbHVlQXNEb3VibGUpIHsKLSAgICAgICAg
ICAgIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAg
ICAgICAgIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoZXhlYy0+dm0oKSk7CiAgICAgICAgICAg
ICBwdXNoKGV4ZWMsIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAt
NjUzLDcgKzY1Myw3IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEK
ICAgICAgICAgLy8gRmFzdCBjYXNlIC0gcHVzaCB3aXRoaW4gdmVjdG9yLCBhbHdheXMgdXBkYXRl
IG1fbGVuZ3RoICYgbV9udW1WYWx1ZXNJblZlY3Rvci4KICAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAgICAgICAgIGlmIChsZW5ndGggPCBzdG9yYWdlLT52ZWN0
b3JMZW5ndGgoKSkgewotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbGVuZ3RoXS5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBzdG9yYWdlLT5t
X3ZlY3RvcltsZW5ndGhdLnNldChleGVjLT52bSgpLCB0aGlzLCB2YWx1ZSk7CiAgICAgICAgICAg
ICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoICsgMSk7CiAgICAgICAgICAgICArK3N0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3I7CiAgICAgICAgICAgICByZXR1cm47CkBAIC03NTQsNyArNzU0
LDcgQEAgYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFueUluZGV4aW5nVAogICAgICAgICAv
LyBXZSBtYXkgaGF2ZSB0byB3YWxrIHRoZSBlbnRpcmUgYXJyYXkgdG8gZG8gdGhlIHNoaWZ0LiBX
ZSdyZSB3aWxsaW5nIHRvIGRvCiAgICAgICAgIC8vIHNvIG9ubHkgaWYgaXQncyBub3QgaG9ycmli
bHkgc2xvdy4KICAgICAgICAgaWYgKG9sZExlbmd0aCAtIChzdGFydEluZGV4ICsgY291bnQpID49
IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpCi0gICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdp
dGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVj
LT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5
U3RvcmFnZShzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkp
KTsKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGVuZCA9IG9sZExlbmd0aCAtIGNvdW50Owog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpIDwgZW5kOyArK2kpIHsKQEAg
LTc2OCw3ICs3NjgsNyBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdU
CiAgICAgICAgICAgICAgICAgLy8gYWJvdXQgaG9sZXMgKGF0IGxlYXN0IGZvciBub3cpLCBidXQg
aXQgY2FuIGRldGVjdCB0aGVtIHF1aWNrbHkuIFNvCiAgICAgICAgICAgICAgICAgLy8gd2UgY29u
dmVydCB0byBhcnJheSBzdG9yYWdlIGFuZCB0aGVuIGFsbG93IHRoZSBhcnJheSBzdG9yYWdlIHBh
dGggdG8KICAgICAgICAgICAgICAgICAvLyBmaWd1cmUgaXQgb3V0LgotICAgICAgICAgICAgICAg
IHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShzdGFydEluZGV4LCBjb3VudCwgZW5z
dXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAgICAgICAgICAgIHJl
dHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShzdGFydEluZGV4LCBjb3VudCwgZW5zdXJl
QXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8v
IE5vIG5lZWQgZm9yIGEgYmFycmllciBzaW5jZSB3ZSdyZSBqdXN0IG1vdmluZyBkYXRhIGFyb3Vu
ZCBpbiB0aGUgc2FtZSB2ZWN0b3IuCiAgICAgICAgICAgICAvLyBUaGlzIGlzIGluIGxpbmUgd2l0
aCBvdXIgc3RhbmRpbmcgYXNzdW1wdGlvbiB0aGF0IHdlIHdvbid0IGhhdmUgYSBkZWxldGlvbgpA
QCAtNzg5LDcgKzc4OSw3IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBbnlJbmRleGlu
Z1QKICAgICAgICAgLy8gV2UgbWF5IGhhdmUgdG8gd2FsayB0aGUgZW50aXJlIGFycmF5IHRvIGRv
IHRoZSBzaGlmdC4gV2UncmUgd2lsbGluZyB0byBkbwogICAgICAgICAvLyBzbyBvbmx5IGlmIGl0
J3Mgbm90IGhvcnJpYmx5IHNsb3cuCiAgICAgICAgIGlmIChvbGRMZW5ndGggLSAoc3RhcnRJbmRl
eCArIGNvdW50KSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKQotICAgICAgICAgICAgcmV0dXJu
IHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJh
eVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgICAgICByZXR1cm4gc2hpZnRD
b3VudFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFn
ZShleGVjLT52bSgpKSk7CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBlbmQgPSBvbGRMZW5n
dGggLSBjb3VudDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsgaSA8IGVu
ZDsgKytpKSB7CkBAIC04MDMsNyArODAzLDcgQEAgYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0
aEFueUluZGV4aW5nVAogICAgICAgICAgICAgICAgIC8vIGFib3V0IGhvbGVzIChhdCBsZWFzdCBm
b3Igbm93KSwgYnV0IGl0IGNhbiBkZXRlY3QgdGhlbSBxdWlja2x5LiBTbwogICAgICAgICAgICAg
ICAgIC8vIHdlIGNvbnZlcnQgdG8gYXJyYXkgc3RvcmFnZSBhbmQgdGhlbiBhbGxvdyB0aGUgYXJy
YXkgc3RvcmFnZSBwYXRoIHRvCiAgICAgICAgICAgICAgICAgLy8gZmlndXJlIGl0IG91dC4KLSAg
ICAgICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRl
eCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRleCwg
Y291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT52bSgpKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAvLyBObyBuZWVkIGZvciBhIGJhcnJpZXIgc2luY2Ugd2UncmUganVzdCBtb3Zp
bmcgZGF0YSBhcm91bmQgaW4gdGhlIHNhbWUgdmVjdG9yLgogICAgICAgICAgICAgLy8gVGhpcyBp
cyBpbiBsaW5lIHdpdGggb3VyIHN0YW5kaW5nIGFzc3VtcHRpb24gdGhhdCB3ZSB3b24ndCBoYXZl
IGEgZGVsZXRpb24KQEAgLTg1MCw3ICs4NTAsNyBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3Vu
dFdpdGhBcnJheVN0b3JhCiAgICAgICAgIHN0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JM
ZW5ndGggKyBjb3VudCk7CiAgICAgfSBlbHNlIGlmICghbW92ZUZyb250ICYmIHZlY3Rvckxlbmd0
aCAtIGxlbmd0aCA+PSBjb3VudCkKICAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2UtPmJ1dHRlcmZs
eSgpLT5hcnJheVN0b3JhZ2UoKTsKLSAgICBlbHNlIGlmICh1bnNoaWZ0Q291bnRTbG93Q2FzZShl
eGVjLT5nbG9iYWxEYXRhKCksIG1vdmVGcm9udCwgY291bnQpKQorICAgIGVsc2UgaWYgKHVuc2hp
ZnRDb3VudFNsb3dDYXNlKGV4ZWMtPnZtKCksIG1vdmVGcm9udCwgY291bnQpKQogICAgICAgICBz
dG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIHRocm93T3V0T2ZN
ZW1vcnlFcnJvcihleGVjKTsKQEAgLTg4NiwxNCArODg2LDE0IEBAIGJvb2wgSlNBcnJheTo6dW5z
aGlmdENvdW50V2l0aEFueUluZGV4aW4KICAgICAgICAgLy8gV2UgbWF5IGhhdmUgdG8gd2FsayB0
aGUgZW50aXJlIGFycmF5IHRvIGRvIHRoZSB1bnNoaWZ0LiBXZSdyZSB3aWxsaW5nIHRvIGRvIHNv
CiAgICAgICAgIC8vIG9ubHkgaWYgaXQncyBub3QgaG9ycmlibHkgc2xvdy4KICAgICAgICAgaWYg
KG9sZExlbmd0aCAtIHN0YXJ0SW5kZXggPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkKLSAgICAg
ICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0YXJ0SW5k
ZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAg
ICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBzdGFydElu
ZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsKICAgICAgICAgCi0g
ICAgICAgIGVuc3VyZUxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIG9sZExlbmd0aCArIGNvdW50
KTsKKyAgICAgICAgZW5zdXJlTGVuZ3RoKGV4ZWMtPnZtKCksIG9sZExlbmd0aCArIGNvdW50KTsK
ICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZExlbmd0aDsgaS0tID4gc3Rh
cnRJbmRleDspIHsKICAgICAgICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1
b3VzKClbaV0uZ2V0KCk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXYpKQotICAgICAgICAg
ICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0YXJ0SW5k
ZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgc3Rh
cnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT52bSgpKSk7CiAgICAgICAg
ICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2kgKyBjb3VudF0uc2V0V2l0aG91dFdyaXRl
QmFycmllcih2KTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTkxMSwxNCArOTExLDE0IEBAIGJv
b2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW4KICAgICAgICAgLy8gV2UgbWF5
IGhhdmUgdG8gd2FsayB0aGUgZW50aXJlIGFycmF5IHRvIGRvIHRoZSB1bnNoaWZ0LiBXZSdyZSB3
aWxsaW5nIHRvIGRvIHNvCiAgICAgICAgIC8vIG9ubHkgaWYgaXQncyBub3QgaG9ycmlibHkgc2xv
dy4KICAgICAgICAgaWYgKG9sZExlbmd0aCAtIHN0YXJ0SW5kZXggPj0gTUlOX1NQQVJTRV9BUlJB
WV9JTkRFWCkKLSAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdl
KGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFs
RGF0YSgpKSk7CisgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFn
ZShleGVjLCBzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkp
KTsKICAgICAgICAgCi0gICAgICAgIGVuc3VyZUxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIG9s
ZExlbmd0aCArIGNvdW50KTsKKyAgICAgICAgZW5zdXJlTGVuZ3RoKGV4ZWMtPnZtKCksIG9sZExl
bmd0aCArIGNvdW50KTsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZExl
bmd0aDsgaS0tID4gc3RhcnRJbmRleDspIHsKICAgICAgICAgICAgIGRvdWJsZSB2ID0gbV9idXR0
ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2
ICE9IHYpKQotICAgICAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9y
YWdlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xv
YmFsRGF0YSgpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJh
eVN0b3JhZ2UoZXhlYywgc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVj
LT52bSgpKSk7CiAgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2kg
KyBjb3VudF0gPSB2OwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTA2NCw5ICsxMDY0LDkgQEAg
dm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZQogdGVtcGxhdGUgPEluZGV4
aW5nVHlwZT4gc3RydWN0IENvbnRpZ3VvdXNUeXBlQWNjZXNzb3IgewogICAgIHR5cGVkZWYgV3Jp
dGVCYXJyaWVyPFVua25vd24+IFR5cGU7CiAgICAgc3RhdGljIEpTVmFsdWUgZ2V0QXNWYWx1ZShD
b250aWd1b3VzRGF0YTxUeXBlPiBkYXRhLCBzaXplX3QgaSkgeyByZXR1cm4gZGF0YVtpXS5nZXQo
KTsgfQotICAgIHN0YXRpYyB2b2lkIHNldFdpdGhWYWx1ZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTQXJyYXkqIHRoaXNWYWx1ZSwgQ29udGlndW91c0RhdGE8VHlwZT4gZGF0YSwgc2l6ZV90
IGksIEpTVmFsdWUgdmFsdWUpCisgICAgc3RhdGljIHZvaWQgc2V0V2l0aFZhbHVlKFZNJiB2bSwg
SlNBcnJheSogdGhpc1ZhbHVlLCBDb250aWd1b3VzRGF0YTxUeXBlPiBkYXRhLCBzaXplX3QgaSwg
SlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGRhdGFbaV0uc2V0KGdsb2JhbERhdGEsIHRo
aXNWYWx1ZSwgdmFsdWUpOworICAgICAgICBkYXRhW2ldLnNldCh2bSwgdGhpc1ZhbHVlLCB2YWx1
ZSk7CiAgICAgfQogICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VEYXRhUmVmZXJlbmNlKENvbnRpZ3Vv
dXNEYXRhPFR5cGU+KiBvdXREYXRhLCBDb250aWd1b3VzSlNWYWx1ZXMgaW5EYXRhKQogICAgIHsK
QEAgLTEwNzcsNyArMTA3Nyw3IEBAIHRlbXBsYXRlIDxJbmRleGluZ1R5cGU+IHN0cnVjdCBDb250
aWd1b3UKIHRlbXBsYXRlIDw+IHN0cnVjdCBDb250aWd1b3VzVHlwZUFjY2Vzc29yPEFycmF5V2l0
aERvdWJsZT4gewogICAgIHR5cGVkZWYgZG91YmxlIFR5cGU7CiAgICAgc3RhdGljIEpTVmFsdWUg
Z2V0QXNWYWx1ZShDb250aWd1b3VzRGF0YTxUeXBlPiBkYXRhLCBzaXplX3QgaSkgeyBBU1NFUlQo
ZGF0YVtpXSA9PSBkYXRhW2ldKTsgcmV0dXJuIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3Vi
bGUsIGRhdGFbaV0pOyB9Ci0gICAgc3RhdGljIHZvaWQgc2V0V2l0aFZhbHVlKEpTR2xvYmFsRGF0
YSYsIEpTQXJyYXkqLCBDb250aWd1b3VzRGF0YTxUeXBlPiBkYXRhLCBzaXplX3QgaSwgSlNWYWx1
ZSB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBzZXRXaXRoVmFsdWUoVk0mLCBKU0FycmF5KiwgQ29u
dGlndW91c0RhdGE8VHlwZT4gZGF0YSwgc2l6ZV90IGksIEpTVmFsdWUgdmFsdWUpCiAgICAgewog
ICAgICAgICBkYXRhW2ldID0gdmFsdWUuYXNOdW1iZXIoKTsKICAgICB9CkBAIC0xMDk0LDcgKzEw
OTQsNyBAQCB2b2lkIEpTQXJyYXk6OnNvcnRDb21wYWN0ZWRWZWN0b3IoRXhlY1N0CiAgICAgaWYg
KCFyZWxldmFudExlbmd0aCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogCiAgICAgLy8gQ29udmVydGluZyBKYXZhU2NyaXB0IHZhbHVlcyB0byBzdHJpbmdzIGNh
biBiZSBleHBlbnNpdmUsIHNvIHdlIGRvIGl0IG9uY2UgdXAgZnJvbnQgYW5kIHNvcnQgYmFzZWQg
b24gdGhhdC4KICAgICAvLyBUaGlzIGlzIGEgY29uc2lkZXJhYmxlIGltcHJvdmVtZW50IG92ZXIg
ZG9pbmcgaXQgdHdpY2UgcGVyIGNvbXBhcmlzb24sIHRob3VnaCBpdCByZXF1aXJlcyBhIGxhcmdl
IHRlbXBvcmFyeQpAQCAtMTE1MSwxMiArMTE1MSwxMiBAQCB2b2lkIEpTQXJyYXk6OnNvcnRDb21w
YWN0ZWRWZWN0b3IoRXhlY1N0CiAgICAgY2FzZSBBcnJheVdpdGhJbnQzMjoKICAgICBjYXNlIEFy
cmF5V2l0aERvdWJsZToKICAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6Ci0gICAgICAgIGVu
c3VyZUxlbmd0aChnbG9iYWxEYXRhLCByZWxldmFudExlbmd0aCk7CisgICAgICAgIGVuc3VyZUxl
bmd0aCh2bSwgcmVsZXZhbnRMZW5ndGgpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgICAgIGlmIChhcnJheVN0b3JhZ2UoKS0+
dmVjdG9yTGVuZ3RoKCkgPCByZWxldmFudExlbmd0aCkgewotICAgICAgICAgICAgaW5jcmVhc2VW
ZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWxldmFudExlbmd0aCk7CisgICAgICAg
ICAgICBpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT52bSgpLCByZWxldmFudExlbmd0aCk7CiAg
ICAgICAgICAgICBDb250aWd1b3VzVHlwZUFjY2Vzc29yPGluZGV4aW5nVHlwZT46OnJlcGxhY2VE
YXRhUmVmZXJlbmNlKCZkYXRhLCBhcnJheVN0b3JhZ2UoKS0+dmVjdG9yKCkpOwogICAgICAgICB9
CiAgICAgICAgIGlmIChhcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCkgPCByZWxldmFudExlbmd0aCkK
QEAgLTExNjgsNyArMTE2OCw3IEBAIHZvaWQgSlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3RvcihF
eGVjU3QKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbGV2YW50TGVuZ3Ro
OyBpKyspCi0gICAgICAgIENvbnRpZ3VvdXNUeXBlQWNjZXNzb3I8aW5kZXhpbmdUeXBlPjo6c2V0
V2l0aFZhbHVlKGdsb2JhbERhdGEsIHRoaXMsIGRhdGEsIGksIHZhbHVlc1tpXS5maXJzdCk7Cisg
ICAgICAgIENvbnRpZ3VvdXNUeXBlQWNjZXNzb3I8aW5kZXhpbmdUeXBlPjo6c2V0V2l0aFZhbHVl
KHZtLCB0aGlzLCBkYXRhLCBpLCB2YWx1ZXNbaV0uZmlyc3QpOwogICAgIAogICAgIEhlYXA6Omhl
YXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwogfQpAQCAtMTM4NywxMyArMTM4
NywxMyBAQCB2b2lkIEpTQXJyYXk6OnNvcnRWZWN0b3IoRXhlY1N0YXRlKiBleGVjCiAgICAgLy8g
Q29weSB0aGUgdmFsdWVzIGJhY2sgaW50byBtX3N0b3JhZ2UuCiAgICAgQVZMVHJlZTxBVkxUcmVl
QWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+OjpJdGVyYXRvciBpdGVyOwogICAgIGl0ZXIu
c3RhcnRfaXRlcl9sZWFzdCh0cmVlKTsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBl
eGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZWxlbWVudHNUb0V4dHJhY3RUaHJlc2hvbGQ7ICsraSkgewogICAg
ICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseSgpLT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgIGlm
IChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoRG91YmxlKQogICAgICAg
ICAgICAgYnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IHRyZWUuYWJzdHJhY3Rv
cigpLm1fbm9kZXNbKml0ZXJdLnZhbHVlLmFzTnVtYmVyKCk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGN1cnJlbnRJbmRleGluZ0RhdGEoKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJl
ZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1sqaXRlcl0udmFsdWUpOworICAgICAgICAgICAgY3VycmVu
dEluZGV4aW5nRGF0YSgpW2ldLnNldCh2bSwgdGhpcywgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rl
c1sqaXRlcl0udmFsdWUpOwogICAgICAgICArK2l0ZXI7CiAgICAgfQogICAgIC8vIFB1dCB1bmRl
ZmluZWQgdmFsdWVzIGJhY2sgaW4uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE5ICszOSwxOSBAQCBwdWJsaWM6
CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKIHByb3RlY3RlZDoKLSAgICBl
eHBsaWNpdCBKU0FycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQotICAgICAgICA6IEpTTm9uRmluYWxPYmplY3Qo
Z2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCisgICAgZXhwbGljaXQgSlNBcnJheShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKKyAgICAg
ICAgOiBKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICB7CiAg
ICAgfQogCiBwdWJsaWM6Ci0gICAgc3RhdGljIEpTQXJyYXkqIGNyZWF0ZShKU0dsb2JhbERhdGEm
LCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gMCk7CisgICAgc3RhdGljIEpT
QXJyYXkqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSAw
KTsKIAogICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgaXMgdXNlZCBmb3IgZmFzdCBjb25z
dHJ1Y3Rpb24gb2YgYXJyYXlzIHdob3NlIHNpemUgYW5kCiAgICAgLy8gY29udGVudHMgYXJlIGtu
b3duIGF0IHRpbWUgb2YgY3JlYXRpb24uIENsaWVudHMgb2YgdGhpcyBpbnRlcmZhY2UgbXVzdDoK
ICAgICAvLyAgIC0gbnVsbC1jaGVjayB0aGUgcmVzdWx0IChpbmRpY2F0aW5nIG91dCBvZiBtZW1v
cnksIG9yIG90aGVyd2lzZSB1bmFibGUgdG8gYWxsb2NhdGUgdmVjdG9yKS4KICAgICAvLyAgIC0g
Y2FsbCAnaW5pdGlhbGl6ZUluZGV4JyBmb3IgYWxsIHByb3BlcnRpZXMgaW4gc2VxdWVuY2UsIGZv
ciAwIDw9IGkgPCBpbml0aWFsTGVuZ3RoLgotICAgIHN0YXRpYyBKU0FycmF5KiB0cnlDcmVhdGVV
bmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGluaXRpYWxM
ZW5ndGgpOworICAgIHN0YXRpYyBKU0FycmF5KiB0cnlDcmVhdGVVbmluaXRpYWxpemVkKFZNJiwg
U3RydWN0dXJlKiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCk7CiAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7
CiAKQEAgLTg0LDcgKzg0LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBzaGlmdENvdW50Rm9yU2hp
ZnQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShzdGFydElu
ZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAg
ICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRleCwgY291bnQs
IGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT52bSgpKSk7CiAgICAgfQogICAgIGJvb2wgc2hpZnRD
b3VudEZvclNwbGljZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2ln
bmVkIGNvdW50KQogICAgIHsKQEAgLTEwNiw3ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgICAgIAog
ICAgIGJvb2wgdW5zaGlmdENvdW50Rm9yU2hpZnQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBz
dGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKICAgICB7Ci0gICAgICAgIHJldHVybiB1bnNoaWZ0
Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJh
eVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgIHJldHVybiB1bnNoaWZ0Q291
bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0
b3JhZ2UoZXhlYy0+dm0oKSkpOwogICAgIH0KICAgICBib29sIHVuc2hpZnRDb3VudEZvclNwbGlj
ZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQog
ICAgIHsKQEAgLTEyOSw5ICsxMjksOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaWxsQXJnTGlzdChF
eGVjU3RhdGUqLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYpOwogICAgIHZvaWQgY29weVRvQXJndW1l
bnRzKEV4ZWNTdGF0ZSosIENhbGxGcmFtZSosIHVpbnQzMl90IGxlbmd0aCk7CiAKLSAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgSW5kZXhpbmdU
eXBlIGluZGV4aW5nVHlwZSkKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwg
SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBpbmRleGluZ1R5cGUpOworICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIGluZGV4aW5n
VHlwZSk7CiAgICAgfQogICAgICAgICAKIHByb3RlY3RlZDoKQEAgLTE1Niw3ICsxNTYsNyBAQCBw
cml2YXRlOgogCiAgICAgYm9vbCB1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KTsKICAgICBib29sIHVu
c2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgc3RhcnRJbmRl
eCwgdW5zaWduZWQgY291bnQsIEFycmF5U3RvcmFnZSopOwotICAgIGJvb2wgdW5zaGlmdENvdW50
U2xvd0Nhc2UoSlNHbG9iYWxEYXRhJiwgYm9vbCwgdW5zaWduZWQpOworICAgIGJvb2wgdW5zaGlm
dENvdW50U2xvd0Nhc2UoVk0mLCBib29sLCB1bnNpZ25lZCk7CiAKICAgICB0ZW1wbGF0ZTxJbmRl
eGluZ1R5cGUgaW5kZXhpbmdUeXBlPgogICAgIHZvaWQgc29ydE51bWVyaWNWZWN0b3IoRXhlY1N0
YXRlKiwgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYp
OwpAQCAtMTc0LDIxICsxNzQsMjEgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBhY3RGb3JTb3J0
aW5nKHVuc2lnbmVkJiBudW1EZWZpbmVkLCB1bnNpZ25lZCYgbmV3UmVsZXZhbnRMZW5ndGgpOwog
fTsKIAotaW5saW5lIEJ1dHRlcmZseSogY3JlYXRlQ29udGlndW91c0FycmF5QnV0dGVyZmx5KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCYgdmVjdG9y
TGVuZ3RoKQoraW5saW5lIEJ1dHRlcmZseSogY3JlYXRlQ29udGlndW91c0FycmF5QnV0dGVyZmx5
KFZNJiB2bSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCYgdmVjdG9yTGVuZ3RoKQogewogICAg
IEluZGV4aW5nSGVhZGVyIGhlYWRlcjsKICAgICB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChsZW5n
dGgsIEJBU0VfVkVDVE9SX0xFTik7CiAgICAgaGVhZGVyLnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JM
ZW5ndGgpOwogICAgIGhlYWRlci5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKICAgICBCdXR0ZXJm
bHkqIHJlc3VsdCA9IEJ1dHRlcmZseTo6Y3JlYXRlKAotICAgICAgICBnbG9iYWxEYXRhLCAwLCAw
LCB0cnVlLCBoZWFkZXIsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwor
ICAgICAgICB2bSwgMCwgMCwgdHJ1ZSwgaGVhZGVyLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1pbmxpbmUgQnV0dGVyZmx5
KiBjcmVhdGVBcnJheUJ1dHRlcmZseShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVk
IGluaXRpYWxMZW5ndGgpCitpbmxpbmUgQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseShW
TSYgdm0sIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiB7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZSgKLSAgICAgICAgZ2xvYmFsRGF0YSwgMCwgMCwgdHJ1ZSwg
YmFzZUluZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCksIEFycmF5U3RvcmFnZTo6
c2l6ZUZvcihCQVNFX1ZFQ1RPUl9MRU4pKTsKKyAgICAgICAgdm0sIDAsIDAsIHRydWUsIGJhc2VJ
bmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgpLCBBcnJheVN0b3JhZ2U6OnNpemVG
b3IoQkFTRV9WRUNUT1JfTEVOKSk7CiAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyA9IDA7CiAgICAg
c3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKQEAgLTE5Niw5ICsxOTYsOSBAQCBpbmxpbmUg
QnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseShKCiAgICAgcmV0dXJuIGJ1dHRlcmZseTsK
IH0KIAotQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseUluRGljdGlvbmFyeUluZGV4aW5n
TW9kZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKTsKK0J1dHRlcmZseSog
Y3JlYXRlQXJyYXlCdXR0ZXJmbHlJbkRpY3Rpb25hcnlJbmRleGluZ01vZGUoVk0mLCB1bnNpZ25l
ZCBpbml0aWFsTGVuZ3RoKTsKIAotaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNyZWF0ZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0
aWFsTGVuZ3RoKQoraW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNyZWF0ZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogewogICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5OwogICAgIGlmIChMSUtFTFkoIWhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKSkpIHsKQEAgLTIwOCw3ICsyMDgsNyBAQCBpbmxpbmUgSlNBcnJheSog
SlNBcnJheTo6Y3JlYXRlKEpTR2xvYmFsCiAgICAgICAgICAgICB8fCBoYXNEb3VibGUoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkKICAgICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkpOwogICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGg7Ci0g
ICAgICAgIGJ1dHRlcmZseSA9IGNyZWF0ZUNvbnRpZ3VvdXNBcnJheUJ1dHRlcmZseShnbG9iYWxE
YXRhLCBpbml0aWFsTGVuZ3RoLCB2ZWN0b3JMZW5ndGgpOworICAgICAgICBidXR0ZXJmbHkgPSBj
cmVhdGVDb250aWd1b3VzQXJyYXlCdXR0ZXJmbHkodm0sIGluaXRpYWxMZW5ndGgsIHZlY3Rvckxl
bmd0aCk7CiAgICAgICAgIEFTU0VSVChpbml0aWFsTGVuZ3RoIDwgTUlOX1NQQVJTRV9BUlJBWV9J
TkRFWCk7CiAgICAgICAgIGlmIChoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkp
IHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7ICsr
aSkKQEAgLTIxOCwxNCArMjE4LDE0IEBAIGlubGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGUo
SlNHbG9iYWwKICAgICAgICAgQVNTRVJUKAogICAgICAgICAgICAgc3RydWN0dXJlLT5pbmRleGlu
Z1R5cGUoKSA9PSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlCiAgICAgICAgICAgICB8fCBz
dHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aEFycmF5U3RvcmFnZSk7Ci0gICAg
ICAgIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5KGdsb2JhbERhdGEsIGluaXRpYWxM
ZW5ndGgpOworICAgICAgICBidXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseSh2bSwgaW5p
dGlhbExlbmd0aCk7CiAgICAgfQotICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7Ci0gICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2Jh
bERhdGEpOworICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
SlNBcnJheT4odm0uaGVhcCkpIEpTQXJyYXkodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAg
ICBhcnJheS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiBhcnJheTsKIH0KIAotaW5s
aW5lIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0
aCkKK2lubGluZSBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiB7CiAgICAg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgoQkFTRV9WRUNUT1JfTEVOLCBpbml0aWFs
TGVuZ3RoKTsKICAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCkKQEAgLTI0MCw3ICsyNDAsNyBAQCBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRl
VW5pbml0CiAgICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkpKTsKIAogICAgICAgICB2b2lkKiB0ZW1wOwotICAgICAgICBpZiAoIWdsb2JhbERhdGEu
aGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwg
dmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksICZ0ZW1wKSkKKyAgICAgICAg
aWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAw
LCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgJnRlbXApKQog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJv
bUJhc2UodGVtcCwgMCwgMCk7CiAgICAgICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZl
Y3Rvckxlbmd0aCk7CkBAIC0yNTEsNyArMjUxLDcgQEAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6
OnRyeUNyZWF0ZVVuaW5pdAogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgdm9pZCog
dGVtcDsKLSAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1
dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0
b3JMZW5ndGgpKSwgJnRlbXApKQorICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9y
YWdlKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZv
cih2ZWN0b3JMZW5ndGgpKSwgJnRlbXApKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
IGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgMCk7CiAgICAgICAgICpi
dXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRp
YWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7CkBAIC0yNjEsOCArMjYxLDggQEAgaW5saW5lIEpTQXJy
YXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdAogICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKICAgICB9CiAgICAgICAgIAotICAgIEpTQXJyYXkq
IGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5o
ZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7Ci0gICAgYXJy
YXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4odm0uaGVhcCkpIEpTQXJyYXkodm0sIHN0
cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAg
IHJldHVybiBhcnJheTsKIH0KIApAQCAtMjg0LDkgKzI4NCw5IEBAIGlubGluZSBib29sIGlzSlNB
cnJheShKU1ZhbHVlIHYpIHsgcmV0dXIKIAogaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5
KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgY29uc3QgQXJnTGlz
dCYgdmFsdWVzKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2Jh
bERhdGEoKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHZhbHVlcy5zaXplKCk7Ci0gICAgSlNBcnJheSogYXJyYXkgPSBKU0FycmF5Ojp0cnlDcmVhdGVV
bmluaXRpYWxpemVkKGdsb2JhbERhdGEsIGFycmF5U3RydWN0dXJlLCBsZW5ndGgpOworICAgIEpT
QXJyYXkqIGFycmF5ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgYXJyYXlT
dHJ1Y3R1cmUsIGxlbmd0aCk7CiAKICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIHByb2JhYmx5IHRo
cm93IGFuIG91dCBvZiBtZW1vcnkgZXJyb3IgaGVyZSwgYnV0CiAgICAgLy8gd2hlbiBtYWtpbmcg
dGhpcyBjaGFuZ2Ugd2Ugc2hvdWxkIGNoZWNrIHRoYXQgYWxsIGNsaWVudHMgb2YgdGhpcwpAQCAt
Mjk0LDE0ICsyOTQsMTQgQEAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0
ZQogICAgIFJFTEVBU0VfQVNTRVJUKGFycmF5KTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleChnbG9iYWxE
YXRhLCBpLCB2YWx1ZXMuYXQoaSkpOworICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZt
LCBpLCB2YWx1ZXMuYXQoaSkpOwogICAgIHJldHVybiBhcnJheTsKIH0KICAgICAKIGlubGluZSBK
U0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlT
dHJ1Y3R1cmUsIGNvbnN0IEpTVmFsdWUqIHZhbHVlcywgdW5zaWduZWQgbGVuZ3RoKQogewotICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBKU0Fy
cmF5KiBhcnJheSA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoZ2xvYmFsRGF0YSwg
YXJyYXlTdHJ1Y3R1cmUsIGxlbmd0aCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBK
U0FycmF5KiBhcnJheSA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIGFycmF5
U3RydWN0dXJlLCBsZW5ndGgpOwogCiAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBwcm9iYWJseSB0
aHJvdyBhbiBvdXQgb2YgbWVtb3J5IGVycm9yIGhlcmUsIGJ1dAogICAgIC8vIHdoZW4gbWFraW5n
IHRoaXMgY2hhbmdlIHdlIHNob3VsZCBjaGVjayB0aGF0IGFsbCBjbGllbnRzIG9mIHRoaXMKQEAg
LTMwOSw3ICszMDksNyBAQCBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXkoRXhlY1N0YXRl
CiAgICAgUkVMRUFTRV9BU1NFUlQoYXJyYXkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKQotICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KGdsb2JhbERh
dGEsIGksIHZhbHVlc1tpXSk7CisgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGks
IHZhbHVlc1tpXSk7CiAgICAgcmV0dXJuIGFycmF5OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDE0
ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgSlNCb3VuZEZ1bmN0aW9uKiBKU0Jv
dW5kRnVuY3Rpb246OmNyZWF0ZQogICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IEpT
Qzo6Z2V0Q29uc3RydWN0RGF0YSh0YXJnZXRGdW5jdGlvbiwgY29uc3RydWN0RGF0YSk7CiAgICAg
Ym9vbCBjYW5Db25zdHJ1Y3QgPSBjb25zdHJ1Y3RUeXBlICE9IENvbnN0cnVjdFR5cGVOb25lOwog
Ci0gICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5n
ZXRIb3N0RnVuY3Rpb24oYm91bmRGdW5jdGlvbkNhbGwsIGNhbkNvbnN0cnVjdCA/IGJvdW5kRnVu
Y3Rpb25Db25zdHJ1Y3QgOiBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rvcik7CisgICAgTmF0
aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGV4ZWMtPnZtKCkuZ2V0SG9zdEZ1bmN0aW9uKGJv
dW5kRnVuY3Rpb25DYWxsLCBjYW5Db25zdHJ1Y3QgPyBib3VuZEZ1bmN0aW9uQ29uc3RydWN0IDog
Y2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpOwogICAgIEpTQm91bmRGdW5jdGlvbiogZnVu
Y3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0JvdW5kRnVuY3Rpb24+KCpleGVj
LT5oZWFwKCkpKSBKU0JvdW5kRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmpl
Y3QtPmJvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgdGFyZ2V0RnVuY3Rpb24sIGJvdW5kVGhpcywg
Ym91bmRBcmdzKTsKIAogICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbihleGVjLCBleGVjdXRh
YmxlLCBsZW5ndGgsIG5hbWUpOwpAQCAtOTksOSArOTksOSBAQCBib29sIEpTQm91bmRGdW5jdGlv
bjo6Y3VzdG9tSGFzSW5zdGFuY2UoCiAKIEpTQm91bmRGdW5jdGlvbjo6SlNCb3VuZEZ1bmN0aW9u
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbiwgSlNWYWx1ZSBib3VuZFRoaXMs
IEpTVmFsdWUgYm91bmRBcmdzKQogICAgIDogQmFzZShleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVj
dHVyZSkKLSAgICAsIG1fdGFyZ2V0RnVuY3Rpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB0
YXJnZXRGdW5jdGlvbikKLSAgICAsIG1fYm91bmRUaGlzKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgYm91bmRUaGlzKQotICAgICwgbV9ib3VuZEFyZ3MoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBib3VuZEFyZ3MpCisgICAgLCBtX3RhcmdldEZ1bmN0aW9uKGV4ZWMtPnZtKCksIHRoaXMsIHRh
cmdldEZ1bmN0aW9uKQorICAgICwgbV9ib3VuZFRoaXMoZXhlYy0+dm0oKSwgdGhpcywgYm91bmRU
aGlzKQorICAgICwgbV9ib3VuZEFyZ3MoZXhlYy0+dm0oKSwgdGhpcywgYm91bmRBcmdzKQogewog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVu
Y3Rpb24uaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNCb3VuZEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0NywxMCBAQCBw
dWJsaWM6CiAgICAgSlNWYWx1ZSBib3VuZFRoaXMoKSB7IHJldHVybiBtX2JvdW5kVGhpcy5nZXQo
KTsgfQogICAgIEpTVmFsdWUgYm91bmRBcmdzKCkgeyByZXR1cm4gbV9ib3VuZEFyZ3MuZ2V0KCk7
IH0KIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlKSAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCiAgICAgewogICAg
ICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0Z1bmN0
aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCisgICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVu
Y3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAKICAgICB9CiAKICAgICBzdGF0
aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ0pTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEy
LDcgKzExMiw3IEBAIEpTT2JqZWN0KiBKU1ZhbHVlOjpzeW50aGVzaXplUHJvdG90eXBlKEUKIC8v
IEVDTUEgOC43LjIKIHZvaWQgSlNWYWx1ZTo6cHV0VG9QcmltaXRpdmUoRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFs
RGF0YSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKICAgICB1bnNpZ25lZCBpbmRleCA9
IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CiAgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6
Tm90QW5JbmRleCkgewpAQCAtMTM3LDcgKzEzNyw3IEBAIHZvaWQgSlNWYWx1ZTo6cHV0VG9Qcmlt
aXRpdmUoRXhlY1N0YXRlKiAKICAgICBmb3IgKDsgOyBvYmogPSBhc09iamVjdChwcm90b3R5cGUp
KSB7CiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CiAgICAgICAgIEpTQ2VsbCogc3BlY2lm
aWNWYWx1ZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gb2JqLT5zdHJ1Y3R1cmUo
KS0+Z2V0KGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1
ZSk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG9iai0+c3RydWN0dXJlKCktPmdl
dCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKICAgICAgICAg
aWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CiAgICAgICAgICAgICBpZiAoYXR0cmlidXRl
cyAmIFJlYWRPbmx5KSB7CiAgICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkp
CkBAIC0yOTUsMjAgKzI5NSwyMCBAQCBib29sIEpTVmFsdWU6OmlzVmFsaWRDYWxsZWUoKQogCiBK
U1N0cmluZyogSlNWYWx1ZTo6dG9TdHJpbmdTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgQVNTRVJUKCFpc1N0cmluZygpKTsKICAgICBp
ZiAoaXNJbnQzMigpKQotICAgICAgICByZXR1cm4ganNTdHJpbmcoJmdsb2JhbERhdGEsIGdsb2Jh
bERhdGEubnVtZXJpY1N0cmluZ3MuYWRkKGFzSW50MzIoKSkpOworICAgICAgICByZXR1cm4ganNT
dHJpbmcoJnZtLCB2bS5udW1lcmljU3RyaW5ncy5hZGQoYXNJbnQzMigpKSk7CiAgICAgaWYgKGlz
RG91YmxlKCkpCi0gICAgICAgIHJldHVybiBqc1N0cmluZygmZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0
YS5udW1lcmljU3RyaW5ncy5hZGQoYXNEb3VibGUoKSkpOworICAgICAgICByZXR1cm4ganNTdHJp
bmcoJnZtLCB2bS5udW1lcmljU3RyaW5ncy5hZGQoYXNEb3VibGUoKSkpOwogICAgIGlmIChpc1Ry
dWUoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEuc21hbGxTdHJpbmdzLnRydWVTdHJpbmco
KTsKKyAgICAgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy50cnVlU3RyaW5nKCk7CiAgICAgaWYg
KGlzRmFsc2UoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEuc21hbGxTdHJpbmdzLmZhbHNl
U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3MuZmFsc2VTdHJpbmcoKTsK
ICAgICBpZiAoaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLnNtYWxsU3RyaW5n
cy5udWxsU3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3MubnVsbFN0cmlu
ZygpOwogICAgIGlmIChpc1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS5z
bWFsbFN0cmluZ3MudW5kZWZpbmVkU3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2bS5zbWFsbFN0
cmluZ3MudW5kZWZpbmVkU3RyaW5nKCk7CiAKICAgICBBU1NFUlQoaXNDZWxsKCkpOwogICAgIEpT
VmFsdWUgdmFsdWUgPSBhc0NlbGwoKS0+dG9QcmltaXRpdmUoZXhlYywgUHJlZmVyU3RyaW5nKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJKHJldmlz
aW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xh
c3MgRXhlY1N0YXRlOwogY2xhc3MgSlNDZWxsOwotY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3Mg
Vk07CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNzIEpTT2JqZWN0OwogY2xhc3MgSlNTdHJp
bmc7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24g
MTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIEpTQ2VsbChDcmVhdGluZ0Vh
cmx5Q2VsbFRhZyk7CiAKIHByb3RlY3RlZDoKLSAgICBKU0NlbGwoSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKik7CisgICAgSlNDZWxsKFZNJiwgU3RydWN0dXJlKik7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogcHVibGljOgpAQCAtNzgsNyAr
NzgsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0FQSVZhbHVlV3JhcHBlcigpIGNvbnN0OwogCiAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdDsKLSAgICB2b2lkIHNldFN0cnVjdHVyZShK
U0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIHNldFN0cnVjdHVyZShWTSYsIFN0
cnVjdHVyZSopOwogICAgIHZvaWQgY2xlYXJTdHJ1Y3R1cmUoKSB7IG1fc3RydWN0dXJlLmNsZWFy
KCk7IH0KIAogICAgIGNvbnN0IGNoYXIqIGNsYXNzTmFtZSgpOwpAQCAtMTQxLDggKzE0MSw4IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3Jh
Z2VUeXBlID0gVHlwZWRBcnJheU5vbmU7CiBwcm90ZWN0ZWQ6CiAKLSAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTR2xvYmFsRGF0YSYpOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxE
YXRhJiwgU3RydWN0dXJlKiwgQ3JlYXRpbmdFYXJseUNlbGxUYWcpOworICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgU3RydWN0dXJlKiwg
Q3JlYXRpbmdFYXJseUNlbGxUYWcpOwogCiAgICAgLy8gQmFzZSBpbXBsZW1lbnRhdGlvbjsgZm9y
IG5vbi1vYmplY3QgY2xhc3NlcyBpbXBsZW1lbnRzIGdldFByb3BlcnR5U2xvdC4KICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMzIg
KzM5LDMyIEBAIGlubGluZSBKU0NlbGw6OkpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2VsbFQKIHsKIH0K
IAotaW5saW5lIEpTQ2VsbDo6SlNDZWxsKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBtX3N0cnVjdHVyZShnbG9iYWxEYXRhLCB0aGlzLCBzdHJ1
Y3R1cmUpCitpbmxpbmUgSlNDZWxsOjpKU0NlbGwoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICA6IG1fc3RydWN0dXJlKHZtLCB0aGlzLCBzdHJ1Y3R1cmUpCiB7CiB9CiAKLWlubGlu
ZSB2b2lkIEpTQ2VsbDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQor
aW5saW5lIHZvaWQgSlNDZWxsOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAjaWYgRU5BQkxF
KEdDX1ZBTElEQVRJT04pCi0gICAgQVNTRVJUKGdsb2JhbERhdGEuaXNJbml0aWFsaXppbmdPYmpl
Y3QoKSk7Ci0gICAgZ2xvYmFsRGF0YS5zZXRJbml0aWFsaXppbmdPYmplY3RDbGFzcygwKTsKKyAg
ICBBU1NFUlQodm0uaXNJbml0aWFsaXppbmdPYmplY3QoKSk7CisgICAgdm0uc2V0SW5pdGlhbGl6
aW5nT2JqZWN0Q2xhc3MoMCk7CiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxEYXRhKTsK
KyAgICBVTlVTRURfUEFSQU0odm0pOwogI2VuZGlmCiAgICAgQVNTRVJUKG1fc3RydWN0dXJlKTsK
IH0KIAotaW5saW5lIHZvaWQgSlNDZWxsOjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDcmVhdGluZ0Vhcmx5Q2VsbFRhZykKK2lu
bGluZSB2b2lkIEpTQ2VsbDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgQ3JlYXRpbmdFYXJseUNlbGxUYWcpCiB7CiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04p
Ci0gICAgQVNTRVJUKGdsb2JhbERhdGEuaXNJbml0aWFsaXppbmdPYmplY3QoKSk7Ci0gICAgZ2xv
YmFsRGF0YS5zZXRJbml0aWFsaXppbmdPYmplY3RDbGFzcygwKTsKKyAgICBBU1NFUlQodm0uaXNJ
bml0aWFsaXppbmdPYmplY3QoKSk7CisgICAgdm0uc2V0SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3Mo
MCk7CiAgICAgaWYgKHN0cnVjdHVyZSkKICNlbmRpZgotICAgICAgICBtX3N0cnVjdHVyZS5zZXRF
YXJseVZhbHVlKGdsb2JhbERhdGEsIHRoaXMsIHN0cnVjdHVyZSk7CisgICAgICAgIG1fc3RydWN0
dXJlLnNldEVhcmx5VmFsdWUodm0sIHRoaXMsIHN0cnVjdHVyZSk7CiAgICAgLy8gVmVyeSBmaXJz
dCBzZXQgb2YgYWxsb2NhdGlvbnMgd29uJ3QgaGF2ZSBhIHJlYWwgc3RydWN0dXJlLgotICAgIEFT
U0VSVChtX3N0cnVjdHVyZSB8fCAhZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUpOworICAg
IEFTU0VSVChtX3N0cnVjdHVyZSB8fCAhdm0uc3RydWN0dXJlU3RydWN0dXJlKTsKIH0KIAogaW5s
aW5lIFN0cnVjdHVyZSogSlNDZWxsOjpzdHJ1Y3R1cmUoKSBjb25zdApAQCAtODQsOCArODQsOCBA
QCB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYgaGVhcCwgc2l6ZV90IHNpCiB7CiAgICAgQVNTRVJU
KHNpemUgPj0gc2l6ZW9mKFQpKTsKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKLSAgICBBU1NF
UlQoIWhlYXAuZ2xvYmFsRGF0YSgpLT5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKLSAgICBoZWFw
Lmdsb2JhbERhdGEoKS0+c2V0SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoJlQ6OnNfaW5mbyk7Cisg
ICAgQVNTRVJUKCFoZWFwLnZtKCktPmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkpOworICAgIGhlYXAu
dm0oKS0+c2V0SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoJlQ6OnNfaW5mbyk7CiAjZW5kaWYKICAg
ICBKU0NlbGwqIHJlc3VsdCA9IDA7CiAgICAgaWYgKFQ6Om5lZWRzRGVzdHJ1Y3Rpb24gJiYgVDo6
aGFzSW1tb3J0YWxTdHJ1Y3R1cmUpCkBAIC0xMzQsMTQgKzEzNCwxNCBAQCBpbmxpbmUgYm9vbCBK
U0NlbGw6OmlzQVBJVmFsdWVXcmFwcGVyKCkgCiAgICAgcmV0dXJuIG1fc3RydWN0dXJlLT50eXBl
SW5mbygpLnR5cGUoKSA9PSBBUElWYWx1ZVdyYXBwZXJUeXBlOwogfQogCi1pbmxpbmUgdm9pZCBK
U0NlbGw6OnNldFN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
c3RydWN0dXJlKQoraW5saW5lIHZvaWQgSlNDZWxsOjpzZXRTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBBU1NFUlQoc3RydWN0dXJlLT50eXBlSW5mbygpLm92
ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSA9PSB0aGlzLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5v
dmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmNsYXNzSW5m
bygpID09IG1fc3RydWN0dXJlLT5jbGFzc0luZm8oKSk7CiAgICAgQVNTRVJUKCFtX3N0cnVjdHVy
ZQogICAgICAgICB8fCBtX3N0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVu
SW52YWxpZGF0ZWQoKQogICAgICAgICB8fCBtX3N0cnVjdHVyZS5nZXQoKSA9PSBzdHJ1Y3R1cmUp
OwotICAgIG1fc3RydWN0dXJlLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzdHJ1Y3R1cmUpOworICAg
IG1fc3RydWN0dXJlLnNldCh2bSwgdGhpcywgc3RydWN0dXJlKTsKIH0KIAogaW5saW5lIGNvbnN0
IE1ldGhvZFRhYmxlKiBKU0NlbGw6Om1ldGhvZFRhYmxlRm9yRGVzdHJ1Y3Rpb24oKSBjb25zdApA
QCAtMTc3LDggKzE3Nyw4IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKU0NlbGw6OmZhc3RHZXRP
d24KIHsKICAgICBpZiAoIXN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCgpICYmICFzdHJ1Y3R1cmUoKS0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygp
KSB7CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5hbWUuaW1wbCgpLT5oYXNIYXNo
KCkKLSAgICAgICAgICAgID8gc3RydWN0dXJlKCktPmdldChleGVjLT5nbG9iYWxEYXRhKCksIElk
ZW50aWZpZXIoZXhlYywgbmFtZSkpCi0gICAgICAgICAgICA6IHN0cnVjdHVyZSgpLT5nZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBuYW1lKTsKKyAgICAgICAgICAgID8gc3RydWN0dXJlKCktPmdldChl
eGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsIG5hbWUpKQorICAgICAgICAgICAgOiBzdHJ1Y3R1
cmUoKS0+Z2V0KGV4ZWMtPnZtKCksIG5hbWUpOwogICAgICAgICBpZiAob2Zmc2V0ICE9IGludmFs
aWRPZmZzZXQpCiAgICAgICAgICAgICByZXR1cm4gYXNPYmplY3QodGhpcyktPmxvY2F0aW9uRm9y
T2Zmc2V0KG9mZnNldCktPmdldCgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRGF0ZU1hdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRGF0ZU1hdGguY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGVNYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTM0LDcgKzEzNCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1zVG9XZWVrRGF5KGRvdWJsZSBtcykK
IC8vIElmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggTmFOIGl0IHJldHVybnMgTmFOLgog
c3RhdGljIGRvdWJsZSBnZXREU1RPZmZzZXQoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgbXMsIGRv
dWJsZSB1dGNPZmZzZXQpCiB7Ci0gICAgRFNUT2Zmc2V0Q2FjaGUmIGNhY2hlID0gZXhlYy0+Z2xv
YmFsRGF0YSgpLmRzdE9mZnNldENhY2hlOworICAgIERTVE9mZnNldENhY2hlJiBjYWNoZSA9IGV4
ZWMtPnZtKCkuZHN0T2Zmc2V0Q2FjaGU7CiAgICAgZG91YmxlIHN0YXJ0ID0gY2FjaGUuc3RhcnQ7
CiAgICAgZG91YmxlIGVuZCA9IGNhY2hlLmVuZDsKIApAQCAtMTk1LDExICsxOTUsMTEgQEAgc3Rh
dGljIGRvdWJsZSBnZXREU1RPZmZzZXQoRXhlY1N0YXRlKiBleAogICovCiBkb3VibGUgZ2V0VVRD
T2Zmc2V0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBkb3VibGUgdXRjT2Zmc2V0ID0gZXhlYy0+
Z2xvYmFsRGF0YSgpLmNhY2hlZFVUQ09mZnNldDsKKyAgICBkb3VibGUgdXRjT2Zmc2V0ID0gZXhl
Yy0+dm0oKS5jYWNoZWRVVENPZmZzZXQ7CiAgICAgaWYgKCFzdGQ6OmlzbmFuKHV0Y09mZnNldCkp
CiAgICAgICAgIHJldHVybiB1dGNPZmZzZXQ7Ci0gICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmNhY2hl
ZFVUQ09mZnNldCA9IGNhbGN1bGF0ZVVUQ09mZnNldCgpOwotICAgIHJldHVybiBleGVjLT5nbG9i
YWxEYXRhKCkuY2FjaGVkVVRDT2Zmc2V0OworICAgIGV4ZWMtPnZtKCkuY2FjaGVkVVRDT2Zmc2V0
ID0gY2FsY3VsYXRlVVRDT2Zmc2V0KCk7CisgICAgcmV0dXJuIGV4ZWMtPnZtKCkuY2FjaGVkVVRD
T2Zmc2V0OwogfQogCiBkb3VibGUgZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUmIHQsIGRvdWJsZSBtaWxsaVNlY29uZHMsIGJvb2wg
aW5wdXRJc1VUQykKQEAgLTI2MSwxMyArMjYxLDEzIEBAIGRvdWJsZSBwYXJzZURhdGVGcm9tTnVs
bFRlcm1pbmF0ZWRDaGFyYWMKIAogZG91YmxlIHBhcnNlRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFN0cmluZyYgZGF0ZSkKIHsKLSAgICBpZiAoZGF0ZSA9PSBleGVjLT5nbG9iYWxEYXRhKCku
Y2FjaGVkRGF0ZVN0cmluZykKLSAgICAgICAgcmV0dXJuIGV4ZWMtPmdsb2JhbERhdGEoKS5jYWNo
ZWREYXRlU3RyaW5nVmFsdWU7CisgICAgaWYgKGRhdGUgPT0gZXhlYy0+dm0oKS5jYWNoZWREYXRl
U3RyaW5nKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS5jYWNoZWREYXRlU3RyaW5nVmFsdWU7
CiAgICAgZG91YmxlIHZhbHVlID0gcGFyc2VFUzVEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFj
dGVycyhkYXRlLnV0ZjgoKS5kYXRhKCkpOwogICAgIGlmIChzdGQ6OmlzbmFuKHZhbHVlKSkKICAg
ICAgICAgdmFsdWUgPSBwYXJzZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKGV4ZWMs
IGRhdGUudXRmOCgpLmRhdGEoKSk7Ci0gICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmNhY2hlZERhdGVT
dHJpbmcgPSBkYXRlOwotICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5jYWNoZWREYXRlU3RyaW5nVmFs
dWUgPSB2YWx1ZTsKKyAgICBleGVjLT52bSgpLmNhY2hlZERhdGVTdHJpbmcgPSBkYXRlOworICAg
IGV4ZWMtPnZtKCkuY2FjaGVkRGF0ZVN0cmluZ1ZhbHVlID0gdmFsdWU7CiAgICAgcmV0dXJuIHZh
bHVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0
aWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDggKzE4LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3QgY2xhc3NJbmZv
T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBt
X2NsYXNzSW5mbyk7IH0KIAogcHJvdGVjdGVkOgotICAgIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gMCkKLSAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0
cnVjdHVyZSwgYnV0dGVyZmx5KQorICAgIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0KFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gMCkKKyAgICAgICAgOiBK
U05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICAgICAgLCBtX2Ns
YXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1f
Y2xhc3NJbmZvKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVu
Y3Rpb24uY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsMTIgKzYzLDEyIEBAIEpT
RnVuY3Rpb24qIEpTRnVuY3Rpb246OmNyZWF0ZShFeGVjU3RhdGUKICNpZiAhRU5BQkxFKEpJVCkK
ICAgICBVTlVTRURfUEFSQU0oaW50cmluc2ljKTsKICNlbHNlCi0gICAgaWYgKGludHJpbnNpYyAh
PSBOb0ludHJpbnNpYyAmJiBleGVjLT5nbG9iYWxEYXRhKCkuY2FuVXNlSklUKCkpIHsKKyAgICBp
ZiAoaW50cmluc2ljICE9IE5vSW50cmluc2ljICYmIGV4ZWMtPnZtKCkuY2FuVXNlSklUKCkpIHsK
ICAgICAgICAgQVNTRVJUKG5hdGl2ZUNvbnN0cnVjdG9yID09IGNhbGxIb3N0RnVuY3Rpb25Bc0Nv
bnN0cnVjdG9yKTsKLSAgICAgICAgZXhlY3V0YWJsZSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5nZXRI
b3N0RnVuY3Rpb24obmF0aXZlRnVuY3Rpb24sIGludHJpbnNpYyk7CisgICAgICAgIGV4ZWN1dGFi
bGUgPSBleGVjLT52bSgpLmdldEhvc3RGdW5jdGlvbihuYXRpdmVGdW5jdGlvbiwgaW50cmluc2lj
KTsKICAgICB9IGVsc2UKICNlbmRpZgotICAgICAgICBleGVjdXRhYmxlID0gZXhlYy0+Z2xvYmFs
RGF0YSgpLmdldEhvc3RGdW5jdGlvbihuYXRpdmVGdW5jdGlvbiwgbmF0aXZlQ29uc3RydWN0b3Ip
OworICAgICAgICBleGVjdXRhYmxlID0gZXhlYy0+dm0oKS5nZXRIb3N0RnVuY3Rpb24obmF0aXZl
RnVuY3Rpb24sIG5hdGl2ZUNvbnN0cnVjdG9yKTsKIAogICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9u
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNGdW5jdGlvbj4oKmV4ZWMtPmhlYXAoKSkp
IEpTRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmZ1bmN0aW9uU3Ry
dWN0dXJlKCkpOwogICAgIC8vIENhbid0IGRvIHRoaXMgZHVyaW5nIGluaXRpYWxpemF0aW9uIGJl
Y2F1c2UgZ2V0SG9zdEZ1bmN0aW9uIG1pZ2h0IGRvIGEgR0MgYWxsb2NhdGlvbi4KQEAgLTgyLDkg
KzgyLDkgQEAgdm9pZCBKU0Z1bmN0aW9uOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIH0KIAogSlNG
dW5jdGlvbjo6SlNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogQmFzZShleGVjLT5nbG9iYWxE
YXRhKCksIHN0cnVjdHVyZSkKKyAgICA6IEJhc2UoZXhlYy0+dm0oKSwgc3RydWN0dXJlKQogICAg
ICwgbV9leGVjdXRhYmxlKCkKLSAgICAsIG1fc2NvcGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBnbG9iYWxPYmplY3QpCisgICAgLCBtX3Njb3BlKGV4ZWMtPnZtKCksIHRoaXMsIGdsb2JhbE9i
amVjdCkKICAgICAvLyBXZSBpbml0aWFsaXplIGJsaW5kIHNvIHRoYXQgY2hhbmdlcyB0byB0aGUg
cHJvdG90eXBlIGFmdGVyIGZ1bmN0aW9uIGNyZWF0aW9uIGJ1dCBiZWZvcmUKICAgICAvLyB0aGUg
b3B0aW1pemVyIGtpY2tzIGluIGRvbid0IGRpc2FibGUgb3B0aW1pemF0aW9ucy4gT25jZSB0aGUg
b3B0aW1pemVyIGtpY2tzIGluLCB0aGUKICAgICAvLyB3YXRjaHBvaW50IHdpbGwgc3RhcnQgd2F0
Y2hpbmcgYW5kIGFueSBjaGFuZ2VzIHdpbGwgYm90aCBmb3JjZSBkZW9wdGltaXphdGlvbiBhbmQg
ZGlzYWJsZQpAQCAtMTAwLDMxICsxMDAsMzEgQEAgSlNGdW5jdGlvbjo6SlNGdW5jdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIAogCiB2b2lkIEpTRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgaW50IGxlbmd0aCwgY29uc3Qg
U3RyaW5nJiBuYW1lKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERh
dGEoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAgICAgQVNTRVJU
KGluaGVyaXRzKCZzX2luZm8pKTsKLSAgICBtX2V4ZWN1dGFibGUuc2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgZXhlY3V0YWJsZSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzU3RyaW5nKGV4ZWMs
IG5hbWUpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1i
ZXIobGVuZ3RoKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIG1fZXhl
Y3V0YWJsZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgZXhlY3V0YWJsZSk7CisgICAgcHV0RGlyZWN0
KGV4ZWMtPnZtKCksIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bmFtZSwganNTdHJpbmcoZXhl
YywgbmFtZSksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJl
Y3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIobGVu
Z3RoKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwogfQogCiBPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZSogSlNGdW5jdGlvbjo6Y3JlYXRlQWxsb2NhdGlvblByb2ZpbGUoRXhlY1N0
YXRlKiBleGVjLCBzaXplX3QgaW5saW5lQ2FwYWNpdHkpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIEpTT2JqZWN0KiBwcm90b3R5cGUg
PSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4oZ2V0KGV4ZWMsIGdsb2JhbERhdGEucHJvcGVydHlO
YW1lcy0+cHJvdG90eXBlKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU09iamVj
dCogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KGdldChleGVjLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5wcm90b3R5cGUpKTsKICAgICBpZiAoIXByb3RvdHlwZSkKICAgICAgICAgcHJv
dG90eXBlID0gZ2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpOwotICAgIG1fYWxsb2Nh
dGlvblByb2ZpbGUuaW5pdGlhbGl6ZShnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBwcm90b3R5cGUsIGlubGluZUNhcGFjaXR5KTsKKyAgICBtX2FsbG9jYXRpb25Qcm9maWxlLmlu
aXRpYWxpemUoZ2xvYmFsT2JqZWN0KCktPnZtKCksIHRoaXMsIHByb3RvdHlwZSwgaW5saW5lQ2Fw
YWNpdHkpOwogICAgIHJldHVybiAmbV9hbGxvY2F0aW9uUHJvZmlsZTsKIH0KIAogU3RyaW5nIEpT
RnVuY3Rpb246Om5hbWUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBnZXQoZXhlYywg
ZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPm5hbWUpLnRvV1RGU3RyaW5nKGV4ZWMp
OworICAgIHJldHVybiBnZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5uYW1lKS50
b1dURlN0cmluZyhleGVjKTsKIH0KIAogU3RyaW5nIEpTRnVuY3Rpb246OmRpc3BsYXlOYW1lKEV4
ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU1ZhbHVlIGRpc3BsYXlOYW1lID0gZ2V0RGlyZWN0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPmRpc3Bs
YXlOYW1lKTsKKyAgICBKU1ZhbHVlIGRpc3BsYXlOYW1lID0gZ2V0RGlyZWN0KGV4ZWMtPnZtKCks
IGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+ZGlzcGxheU5hbWUpOwogICAgIAogICAgIGlmIChk
aXNwbGF5TmFtZSAmJiBpc0pTU3RyaW5nKGRpc3BsYXlOYW1lKSkKICAgICAgICAgcmV0dXJuIGFz
U3RyaW5nKGRpc3BsYXlOYW1lKS0+dHJ5R2V0VmFsdWUoKTsKQEAgLTIyMSwxMyArMjIxLDEzIEBA
IGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UKICAgICAgICAgcmV0dXJu
IEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOwogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
cHJvdG90eXBlKSB7Ci0gICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmds
b2JhbERhdGEoKTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gdGhpc09iamVjdC0+
Z2V0RGlyZWN0T2Zmc2V0KGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHRoaXNPYmpl
Y3QtPmdldERpcmVjdE9mZnNldCh2bSwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgaWYgKCFpc1Zh
bGlkT2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBj
b25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICAgICAgICAgIHByb3RvdHlwZS0+cHV0RGly
ZWN0KGdsb2JhbERhdGEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdGhpc09i
amVjdCwgRG9udEVudW0pOwotICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0KGdsb2Jh
bERhdGEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIHByb3RvdHlwZSwgRG9udERl
bGV0ZSB8IERvbnRFbnVtKTsKLSAgICAgICAgICAgIG9mZnNldCA9IHRoaXNPYmplY3QtPmdldERp
cmVjdE9mZnNldChnbG9iYWxEYXRhLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlKTsK
KyAgICAgICAgICAgIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuY29uc3RydWN0b3IsIHRoaXNPYmplY3QsIERvbnRFbnVtKTsKKyAgICAgICAgICAgIHRoaXNP
YmplY3QtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgcHJv
dG90eXBlLCBEb250RGVsZXRlIHwgRG9udEVudW0pOworICAgICAgICAgICAgb2Zmc2V0ID0gdGhp
c09iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90
eXBlKTsKICAgICAgICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwogICAgICAg
ICB9CiAKQEAgLTM4Miw3ICszODIsNyBAQCBib29sIEpTRnVuY3Rpb246OmRlbGV0ZVByb3BlcnR5
KEpTQ2VsbCogCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0
aW9uKj4oY2VsbCk7CiAgICAgLy8gRm9yIG5vbi1ob3N0IGZ1bmN0aW9ucywgZG9uJ3QgbGV0IHRo
ZXNlIHByb3BlcnRpZXMgYnkgZGVsZXRlZCAtIGV4Y2VwdCBieSBEZWZpbmVPd25Qcm9wZXJ0eS4K
LSAgICBpZiAoIXRoaXNPYmplY3QtPmlzSG9zdEZ1bmN0aW9uKCkgJiYgIWV4ZWMtPmdsb2JhbERh
dGEoKS5pc0luRGVmaW5lT3duUHJvcGVydHkoKQorICAgIGlmICghdGhpc09iamVjdC0+aXNIb3N0
RnVuY3Rpb24oKSAmJiAhZXhlYy0+dm0oKS5pc0luRGVmaW5lT3duUHJvcGVydHkoKQogICAgICAg
ICAmJiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMKICAg
ICAgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
CiAgICAgICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLm5h
bWUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJl
dmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICAgICAgZnJpZW5kIGNsYXNzIERGRzo6U3BlY3Vs
YXRpdmVKSVQ7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBERkc6OkpJVENvbXBpbGVyOwotICAgICAg
ICBmcmllbmQgY2xhc3MgSlNHbG9iYWxEYXRhOworICAgICAgICBmcmllbmQgY2xhc3MgVk07CiAK
ICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsK
QEAgLTYyLDEwICs2MiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgSlNG
dW5jdGlvbiogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVj
dXRhYmxlLCBKU1Njb3BlKiBzY29wZSkKICAgICAgICAgewotICAgICAgICAgICAgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICAgICAgSlNGdW5j
dGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0Z1bmN0aW9uPihn
bG9iYWxEYXRhLmhlYXApKSBKU0Z1bmN0aW9uKGdsb2JhbERhdGEsIGV4ZWN1dGFibGUsIHNjb3Bl
KTsKKyAgICAgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgICAgICBKU0Z1bmN0
aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+KHZt
LmhlYXApKSBKU0Z1bmN0aW9uKHZtLCBleGVjdXRhYmxlLCBzY29wZSk7CiAgICAgICAgICAgICBB
U1NFUlQoZnVuY3Rpb24tPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKSk7Ci0gICAgICAgICAg
ICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBmdW5j
dGlvbi0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uOwog
ICAgICAgICB9CiAgICAgICAgIApAQCAtODksMTAgKzg5LDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9zY29wZS5nZXQoKTsKICAgICAgICAgfQot
ICAgICAgICB2b2lkIHNldFNjb3BlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNTY29wZSog
c2NvcGUpCisgICAgICAgIHZvaWQgc2V0U2NvcGUoVk0mIHZtLCBKU1Njb3BlKiBzY29wZSkKICAg
ICAgICAgewogICAgICAgICAgICAgQVNTRVJUKCFpc0hvc3RGdW5jdGlvbk5vbklubGluZSgpKTsK
LSAgICAgICAgICAgIG1fc2NvcGUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHNjb3BlKTsKKyAgICAg
ICAgICAgIG1fc2NvcGUuc2V0KHZtLCB0aGlzLCBzY29wZSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0YWJs
ZS5nZXQoKTsgfQpAQCAtMTA1LDEwICsxMDUsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCisg
ICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAKICAgICAgICAgewogICAg
ICAgICAgICAgQVNTRVJUKGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KEpTRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAKKyAgICAgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKEpTRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAKICAgICAg
ICAgfQogCiAgICAgICAgIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uKCk7CkBAIC0xNTgs
NyArMTU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEltcGxlbWVu
dHNIYXNJbnN0YW5jZSB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9w
ZXJ0eU5hbWVzIHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIEpTRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1
cmUqKTsKLSAgICAgICAgSlNGdW5jdGlvbihKU0dsb2JhbERhdGEmLCBGdW5jdGlvbkV4ZWN1dGFi
bGUqLCBKU1Njb3BlKik7CisgICAgICAgIEpTRnVuY3Rpb24oVk0mLCBGdW5jdGlvbkV4ZWN1dGFi
bGUqLCBKU1Njb3BlKik7CiAgICAgICAgIAogICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4
ZWNTdGF0ZSosIE5hdGl2ZUV4ZWN1dGFibGUqLCBpbnQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5h
bWUpOwogICAgICAgICB1c2luZyBCYXNlOjpmaW5pc2hDcmVhdGlvbjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMTQ4
NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1NjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotCi0jaW5jbHVkZSAiQXJnTGlz
dC5oIgotI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgotI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJz
LmgiCi0jaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKLSNpbmNsdWRlICJEZWJ1Z2dlckFj
dGl2YXRpb24uaCIKLSNpbmNsdWRlICJGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAi
R0NBY3Rpdml0eUNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCi0jaW5jbHVk
ZSAiSGVhcC5oIgotI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFsdWUuaCIKLSNpbmNsdWRlICJJ
bmNyZW1lbnRhbFN3ZWVwZXIuaCIKLSNpbmNsdWRlICJJbnRlcnByZXRlci5oIgotI2luY2x1ZGUg
IkpTQWN0aXZhdGlvbi5oIgotI2luY2x1ZGUgIkpTQVBJVmFsdWVXcmFwcGVyLmgiCi0jaW5jbHVk
ZSAiSlNBcnJheS5oIgotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJKU0xvY2su
aCIKLSNpbmNsdWRlICJKU05hbWVTY29wZS5oIgotI2luY2x1ZGUgIkpTTm90QW5PYmplY3QuaCIK
LSNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiSlNXaXRoU2Nv
cGUuaCIKLSNpbmNsdWRlICJMZXhlci5oIgotI2luY2x1ZGUgIkxvb2t1cC5oIgotI2luY2x1ZGUg
Ik5vZGVzLmgiCi0jaW5jbHVkZSAiUGFyc2VyQXJlbmEuaCIKLSNpbmNsdWRlICJSZWdFeHBDYWNo
ZS5oIgotI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgotI2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVy
Q2FjaGUuaCIKLSNpbmNsdWRlICJTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIgotI2luY2x1ZGUgIlN0
cm9uZ0lubGluZXMuaCIKLSNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgotI2luY2x1ZGUg
PHd0Zi9Qcm9jZXNzSUQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2lu
Y2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSNpbmNs
dWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoUkVHRVhQX1RS
QUNJTkcpCi0jaW5jbHVkZSAiUmVnRXhwLmgiCi0jZW5kaWYKLQotI2lmIFVTRShDRikKLSNpbmNs
dWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgotI2VuZGlmCi0KLXVzaW5nIG5h
bWVzcGFjZSBXVEY7Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1leHRlcm4gY29uc3QgSGFzaFRhYmxl
IGFycmF5Q29uc3RydWN0b3JUYWJsZTsKLWV4dGVybiBjb25zdCBIYXNoVGFibGUgYXJyYXlQcm90
b3R5cGVUYWJsZTsKLWV4dGVybiBjb25zdCBIYXNoVGFibGUgYm9vbGVhblByb3RvdHlwZVRhYmxl
OwotZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBqc29uVGFibGU7Ci1leHRlcm4gY29uc3QgSGFzaFRh
YmxlIGRhdGVUYWJsZTsKLWV4dGVybiBjb25zdCBIYXNoVGFibGUgZGF0ZUNvbnN0cnVjdG9yVGFi
bGU7Ci1leHRlcm4gY29uc3QgSGFzaFRhYmxlIGVycm9yUHJvdG90eXBlVGFibGU7Ci1leHRlcm4g
Y29uc3QgSGFzaFRhYmxlIGdsb2JhbE9iamVjdFRhYmxlOwotZXh0ZXJuIGNvbnN0IEhhc2hUYWJs
ZSBtYXRoVGFibGU7Ci1leHRlcm4gY29uc3QgSGFzaFRhYmxlIG51bWJlckNvbnN0cnVjdG9yVGFi
bGU7Ci1leHRlcm4gY29uc3QgSGFzaFRhYmxlIG51bWJlclByb3RvdHlwZVRhYmxlOwotSlNfRVhQ
T1JUREFUQSBleHRlcm4gY29uc3QgSGFzaFRhYmxlIG9iamVjdENvbnN0cnVjdG9yVGFibGU7Ci1l
eHRlcm4gY29uc3QgSGFzaFRhYmxlIHByaXZhdGVOYW1lUHJvdG90eXBlVGFibGU7Ci1leHRlcm4g
Y29uc3QgSGFzaFRhYmxlIHJlZ0V4cFRhYmxlOwotZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSByZWdF
eHBDb25zdHJ1Y3RvclRhYmxlOwotZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSByZWdFeHBQcm90b3R5
cGVUYWJsZTsKLWV4dGVybiBjb25zdCBIYXNoVGFibGUgc3RyaW5nQ29uc3RydWN0b3JUYWJsZTsK
LQotLy8gTm90ZTogUGxhdGZvcm0uaCB3aWxsIGVuZm9yY2UgdGhhdCBFTkFCTEUoQVNTRU1CTEVS
KSBpcyB0cnVlIGlmIGVpdGhlcgotLy8gRU5BQkxFKEpJVCkgb3IgRU5BQkxFKFlBUlJfSklUKSBv
ciBib3RoIGFyZSBlbmFibGVkLiBUaGUgY29kZSBiZWxvdwotLy8ganVzdCBjaGVja3MgZm9yIEVO
QUJMRShKSVQpIG9yIEVOQUJMRShZQVJSX0pJVCkgd2l0aCB0aGlzIHByZW1pc2UgaW4gbWluZC4K
LQotI2lmIEVOQUJMRShBU1NFTUJMRVIpCi1zdGF0aWMgYm9vbCBlbmFibGVBc3NlbWJsZXIoRXhl
Y3V0YWJsZUFsbG9jYXRvciYgZXhlY3V0YWJsZUFsbG9jYXRvcikKLXsKLSAgICBpZiAoIWV4ZWN1
dGFibGVBbGxvY2F0b3IuaXNWYWxpZCgpIHx8ICghT3B0aW9uczo6dXNlSklUKCkgJiYgIU9wdGlv
bnM6OnVzZVJlZ0V4cEpJVCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYgVVNFKENG
KQotI2lmIENPTVBJTEVSKEdDQykgJiYgIUNPTVBJTEVSKENMQU5HKQotICAgIC8vIEZJWE1FOiBy
ZW1vdmUgdGhpcyBvbmNlIHRoZSBFV1MgaGF2ZSBiZWVuIHVwZ3JhZGVkIHRvIExMVk0uCi0gICAg
Ly8gV29yayBhcm91bmQgYSBidWcgb2YgR0NDIHdpdGggc3RyaWN0LWFsaWFzaW5nLgotICAgIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gY2FuVXNlSklUS2V5UmV0YWluKEFkb3B0Q0YsIENGU3RyaW5n
Q3JlYXRlV2l0aENTdHJpbmcoMCAsICJKYXZhU2NyaXB0Q29yZVVzZUpJVCIsIGtDRlN0cmluZ0Vu
Y29kaW5nTWFjUm9tYW4pKTsKLSAgICBDRlN0cmluZ1JlZiBjYW5Vc2VKSVRLZXkgPSBjYW5Vc2VK
SVRLZXlSZXRhaW4uZ2V0KCk7Ci0jZWxzZQotICAgIENGU3RyaW5nUmVmIGNhblVzZUpJVEtleSA9
IENGU1RSKCJKYXZhU2NyaXB0Q29yZVVzZUpJVCIpOwotI2VuZGlmIC8vIENPTVBJTEVSKEdDQykg
JiYgIUNPTVBJTEVSKENMQU5HKQotICAgIFJldGFpblB0cjxDRkJvb2xlYW5SZWY+IGNhblVzZUpJ
VChBZG9wdENGLCAoQ0ZCb29sZWFuUmVmKUNGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUoY2FuVXNl
SklUS2V5LCBrQ0ZQcmVmZXJlbmNlc0N1cnJlbnRBcHBsaWNhdGlvbikpOwotICAgIGlmIChjYW5V
c2VKSVQpCi0gICAgICAgIHJldHVybiBrQ0ZCb29sZWFuVHJ1ZSA9PSBjYW5Vc2VKSVQuZ2V0KCk7
Ci0jZW5kaWYKLQotI2lmIFVTRShDRikgfHwgT1MoVU5JWCkKLSAgICBjaGFyKiBjYW5Vc2VKSVRT
dHJpbmcgPSBnZXRlbnYoIkphdmFTY3JpcHRDb3JlVXNlSklUIik7Ci0gICAgcmV0dXJuICFjYW5V
c2VKSVRTdHJpbmcgfHwgYXRvaShjYW5Vc2VKSVRTdHJpbmcpOwotI2Vsc2UKLSAgICByZXR1cm4g
dHJ1ZTsKLSNlbmRpZgotfQotI2VuZGlmIC8vIEVOQUJMRSghQVNTRU1CTEVSKQotCi1KU0dsb2Jh
bERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwZSBnbG9iYWxEYXRhVHlwZSwgSGVhcFR5
cGUgaGVhcFR5cGUpCi0gICAgOiBtX2FwaUxvY2soYWRvcHRSZWYobmV3IEpTTG9jayh0aGlzKSkp
Ci0jaWYgRU5BQkxFKEFTU0VNQkxFUikKLSAgICAsIGV4ZWN1dGFibGVBbGxvY2F0b3IoKnRoaXMp
Ci0jZW5kaWYKLSAgICAsIGhlYXAodGhpcywgaGVhcFR5cGUpCi0gICAgLCBnbG9iYWxEYXRhVHlw
ZShnbG9iYWxEYXRhVHlwZSkKLSAgICAsIGNsaWVudERhdGEoMCkKLSAgICAsIHRvcENhbGxGcmFt
ZShDYWxsRnJhbWU6Om5vQ2FsbGVyKCkpCi0gICAgLCBhcnJheUNvbnN0cnVjdG9yVGFibGUoZmFz
dE5ldzxIYXNoVGFibGU+KEpTQzo6YXJyYXlDb25zdHJ1Y3RvclRhYmxlKSkKLSAgICAsIGFycmF5
UHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6YXJyYXlQcm90b3R5cGVUYWJs
ZSkpCi0gICAgLCBib29sZWFuUHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6
Ym9vbGVhblByb3RvdHlwZVRhYmxlKSkKLSAgICAsIGRhdGVUYWJsZShmYXN0TmV3PEhhc2hUYWJs
ZT4oSlNDOjpkYXRlVGFibGUpKQotICAgICwgZGF0ZUNvbnN0cnVjdG9yVGFibGUoZmFzdE5ldzxI
YXNoVGFibGU+KEpTQzo6ZGF0ZUNvbnN0cnVjdG9yVGFibGUpKQotICAgICwgZXJyb3JQcm90b3R5
cGVUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjplcnJvclByb3RvdHlwZVRhYmxlKSkKLSAg
ICAsIGdsb2JhbE9iamVjdFRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6Omdsb2JhbE9iamVj
dFRhYmxlKSkKLSAgICAsIGpzb25UYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpqc29uVGFi
bGUpKQotICAgICwgbWF0aFRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6Om1hdGhUYWJsZSkp
Ci0gICAgLCBudW1iZXJDb25zdHJ1Y3RvclRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6Om51
bWJlckNvbnN0cnVjdG9yVGFibGUpKQotICAgICwgbnVtYmVyUHJvdG90eXBlVGFibGUoZmFzdE5l
dzxIYXNoVGFibGU+KEpTQzo6bnVtYmVyUHJvdG90eXBlVGFibGUpKQotICAgICwgb2JqZWN0Q29u
c3RydWN0b3JUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpvYmplY3RDb25zdHJ1Y3RvclRh
YmxlKSkKLSAgICAsIHByaXZhdGVOYW1lUHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+
KEpTQzo6cHJpdmF0ZU5hbWVQcm90b3R5cGVUYWJsZSkpCi0gICAgLCByZWdFeHBUYWJsZShmYXN0
TmV3PEhhc2hUYWJsZT4oSlNDOjpyZWdFeHBUYWJsZSkpCi0gICAgLCByZWdFeHBDb25zdHJ1Y3Rv
clRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OnJlZ0V4cENvbnN0cnVjdG9yVGFibGUpKQot
ICAgICwgcmVnRXhwUHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6cmVnRXhw
UHJvdG90eXBlVGFibGUpKQotICAgICwgc3RyaW5nQ29uc3RydWN0b3JUYWJsZShmYXN0TmV3PEhh
c2hUYWJsZT4oSlNDOjpzdHJpbmdDb25zdHJ1Y3RvclRhYmxlKSkKLSAgICAsIGlkZW50aWZpZXJU
YWJsZShnbG9iYWxEYXRhVHlwZSA9PSBEZWZhdWx0ID8gd3RmVGhyZWFkRGF0YSgpLmN1cnJlbnRJ
ZGVudGlmaWVyVGFibGUoKSA6IGNyZWF0ZUlkZW50aWZpZXJUYWJsZSgpKQotICAgICwgcHJvcGVy
dHlOYW1lcyhuZXcgQ29tbW9uSWRlbnRpZmllcnModGhpcykpCi0gICAgLCBlbXB0eUxpc3QobmV3
IE1hcmtlZEFyZ3VtZW50QnVmZmVyKQotICAgICwgcGFyc2VyQXJlbmEoYWRvcHRQdHIobmV3IFBh
cnNlckFyZW5hKSkKLSAgICAsIGtleXdvcmRzKGFkb3B0UHRyKG5ldyBLZXl3b3Jkcyh0aGlzKSkp
Ci0gICAgLCBpbnRlcnByZXRlcigwKQotICAgICwganNBcnJheUNsYXNzSW5mbygmSlNBcnJheTo6
c19pbmZvKQotICAgICwganNGaW5hbE9iamVjdENsYXNzSW5mbygmSlNGaW5hbE9iamVjdDo6c19p
bmZvKQotI2lmIEVOQUJMRShERkdfSklUKQotICAgICwgc2l6ZU9mTGFzdFNjcmF0Y2hCdWZmZXIo
MCkKLSNlbmRpZgotICAgICwgZHluYW1pY0dsb2JhbE9iamVjdCgwKQotICAgICwgY2FjaGVkVVRD
T2Zmc2V0KFFOYU4pCi0gICAgLCBtX2VuYWJsZWRQcm9maWxlcigwKQotICAgICwgbV9yZWdFeHBD
YWNoZShuZXcgUmVnRXhwQ2FjaGUodGhpcykpCi0jaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQot
ICAgICwgbV9ydFRyYWNlTGlzdChuZXcgUlRUcmFjZUxpc3QoKSkKLSNlbmRpZgotI2lmbmRlZiBO
REVCVUcKLSAgICAsIGV4Y2x1c2l2ZVRocmVhZCgwKQotI2VuZGlmCi0gICAgLCBtX25ld1N0cmlu
Z3NTaW5jZUxhc3RIYXNoQ29ucygwKQotI2lmIEVOQUJMRShBU1NFTUJMRVIpCi0gICAgLCBtX2Nh
blVzZUFzc2VtYmxlcihlbmFibGVBc3NlbWJsZXIoZXhlY3V0YWJsZUFsbG9jYXRvcikpCi0jZW5k
aWYKLSNpZiBFTkFCTEUoSklUKQotICAgICwgbV9jYW5Vc2VKSVQobV9jYW5Vc2VBc3NlbWJsZXIg
JiYgT3B0aW9uczo6dXNlSklUKCkpCi0jZW5kaWYKLSNpZiBFTkFCTEUoWUFSUl9KSVQpCi0gICAg
LCBtX2NhblVzZVJlZ0V4cEpJVChtX2NhblVzZUFzc2VtYmxlciAmJiBPcHRpb25zOjp1c2VSZWdF
eHBKSVQoKSkKLSNlbmRpZgotI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQotICAgICwgbV9pbml0
aWFsaXppbmdPYmplY3RDbGFzcygwKQotI2VuZGlmCi0gICAgLCBtX2luRGVmaW5lT3duUHJvcGVy
dHkoZmFsc2UpCi0gICAgLCBtX2NvZGVDYWNoZShDb2RlQ2FjaGU6OmNyZWF0ZSgpKQotewotICAg
IGludGVycHJldGVyID0gbmV3IEludGVycHJldGVyKCp0aGlzKTsKLQotICAgIC8vIE5lZWQgdG8g
YmUgY2FyZWZ1bCB0byBrZWVwIGV2ZXJ5dGhpbmcgY29uc2lzdGVudCBoZXJlCi0gICAgSlNMb2Nr
SG9sZGVyIGxvY2sodGhpcyk7Ci0gICAgSWRlbnRpZmllclRhYmxlKiBleGlzdGluZ0VudHJ5SWRl
bnRpZmllclRhYmxlID0gd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUo
aWRlbnRpZmllclRhYmxlKTsKLSAgICBzdHJ1Y3R1cmVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTdHJ1
Y3R1cmU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcykpOwotICAgIHN0cnVjdHVyZVJhcmVEYXRhU3Ry
dWN0dXJlLnNldCgqdGhpcywgU3RydWN0dXJlUmFyZURhdGE6OmNyZWF0ZVN0cnVjdHVyZSgqdGhp
cywgMCwganNOdWxsKCkpKTsKLSAgICBkZWJ1Z2dlckFjdGl2YXRpb25TdHJ1Y3R1cmUuc2V0KCp0
aGlzLCBEZWJ1Z2dlckFjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxs
KCkpKTsKLSAgICB0ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBU
ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxs
KCkpKTsKLSAgICBzdHJpbmdTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1N0cmluZzo6Y3JlYXRlU3Ry
dWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAgIG5vdEFuT2JqZWN0U3RydWN0dXJlLnNl
dCgqdGhpcywgSlNOb3RBbk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOwotICAgIHByb3BlcnR5TmFtZUl0ZXJhdG9yU3RydWN0dXJlLnNldCgqdGhpcywgSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwot
ICAgIGdldHRlclNldHRlclN0cnVjdHVyZS5zZXQoKnRoaXMsIEdldHRlclNldHRlcjo6Y3JlYXRl
U3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAgIGFwaVdyYXBwZXJTdHJ1Y3R1cmUu
c2V0KCp0aGlzLCBKU0FQSVZhbHVlV3JhcHBlcjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBq
c051bGwoKSkpOwotICAgIEpTU2NvcGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Njb3BlOjpjcmVh
dGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgZXhlY3V0YWJsZVN0cnVjdHVy
ZS5zZXQoKnRoaXMsIEV4ZWN1dGFibGVCYXNlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7Ci0gICAgbmF0aXZlRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIE5hdGl2
ZUV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICBl
dmFsRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEV2YWxFeGVjdXRhYmxlOjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgcHJvZ3JhbUV4ZWN1dGFibGVTdHJ1
Y3R1cmUuc2V0KCp0aGlzLCBQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlz
LCAwLCBqc051bGwoKSkpOwotICAgIGZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRo
aXMsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOwotICAgIHJlZ0V4cFN0cnVjdHVyZS5zZXQoKnRoaXMsIFJlZ0V4cDo6Y3JlYXRlU3RydWN0
dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAgIHNoYXJlZFN5bWJvbFRhYmxlU3RydWN0dXJl
LnNldCgqdGhpcywgU2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwg
anNOdWxsKCkpKTsKLSAgICBzdHJ1Y3R1cmVDaGFpblN0cnVjdHVyZS5zZXQoKnRoaXMsIFN0cnVj
dHVyZUNoYWluOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgc3Bh
cnNlQXJyYXlWYWx1ZU1hcFN0cnVjdHVyZS5zZXQoKnRoaXMsIFNwYXJzZUFycmF5VmFsdWVNYXA6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICB3aXRoU2NvcGVTdHJ1
Y3R1cmUuc2V0KCp0aGlzLCBKU1dpdGhTY29wZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBq
c051bGwoKSkpOwotICAgIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLnNldCgq
dGhpcywgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKLSAgICB1bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKLSAgICB1bmxpbmtlZEV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0
aGlzLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKLSAgICB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhp
cywgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBq
c051bGwoKSkpOwotICAgIHByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9wZXJ0
eVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgc21hbGxT
dHJpbmdzLmluaXRpYWxpemVDb21tb25TdHJpbmdzKCp0aGlzKTsKLQotICAgIHd0ZlRocmVhZERh
dGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKGV4aXN0aW5nRW50cnlJZGVudGlmaWVyVGFi
bGUpOwotCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBqaXRTdHVicyA9IGFkb3B0UHRyKG5ldyBKSVRU
aHVua3MoKSk7Ci0gICAgcGVyZm9ybVBsYXRmb3JtU3BlY2lmaWNKSVRBc3NlcnRpb25zKHRoaXMp
OwotI2VuZGlmCi0gICAgCi0gICAgaW50ZXJwcmV0ZXItPmluaXRpYWxpemUodGhpcy0+Y2FuVXNl
SklUKCkpOwotICAgIAotI2lmIEVOQUJMRShKSVQpCi0gICAgaW5pdGlhbGl6ZUhvc3RDYWxsUmV0
dXJuVmFsdWUoKTsgLy8gVGhpcyBpcyBuZWVkZWQgdG8gY29udmluY2UgdGhlIGxpbmtlciBub3Qg
dG8gZHJvcCBob3N0IGNhbGwgcmV0dXJuIHN1cHBvcnQuCi0jZW5kaWYKLQotICAgIGhlYXAubm90
aWZ5SXNTYWZlVG9Db2xsZWN0KCk7Ci0KLSAgICBMTEludDo6RGF0YTo6cGVyZm9ybUFzc2VydGlv
bnMoKnRoaXMpOwotICAgIAotICAgIGlmIChPcHRpb25zOjplbmFibGVQcm9maWxlcigpKSB7Ci0g
ICAgICAgIG1fcGVyQnl0ZWNvZGVQcm9maWxlciA9IGFkb3B0UHRyKG5ldyBQcm9maWxlcjo6RGF0
YWJhc2UoKnRoaXMpKTsKLQotICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBwYXRoT3V0OwotI2lm
ICFPUyhXSU5DRSkKLSAgICAgICAgY29uc3QgY2hhciogcHJvZmlsZXJQYXRoID0gZ2V0ZW52KCJK
U0NfUFJPRklMRVJfUEFUSCIpOwotICAgICAgICBpZiAocHJvZmlsZXJQYXRoKQotICAgICAgICAg
ICAgcGF0aE91dC5wcmludChwcm9maWxlclBhdGgsICIvIik7Ci0jZW5kaWYKLSAgICAgICAgcGF0
aE91dC5wcmludCgiSlNDUHJvZmlsZS0iLCBnZXRDdXJyZW50UHJvY2Vzc0lEKCksICItIiwgbV9w
ZXJCeXRlY29kZVByb2ZpbGVyLT5kYXRhYmFzZUlEKCksICIuanNvbiIpOwotICAgICAgICBtX3Bl
ckJ5dGVjb2RlUHJvZmlsZXItPnJlZ2lzdGVyVG9TYXZlQXRFeGl0KHBhdGhPdXQudG9DU3RyaW5n
KCkuZGF0YSgpKTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoY2FuVXNl
SklUKCkpCi0gICAgICAgIG1fZGZnU3RhdGUgPSBhZG9wdFB0cihuZXcgREZHOjpMb25nTGl2ZWRT
dGF0ZSgpKTsKLSNlbmRpZgotfQotCi1KU0dsb2JhbERhdGE6On5KU0dsb2JhbERhdGEoKQotewot
ICAgIC8vIENsZWFyIHRoaXMgZmlyc3QgdG8gZW5zdXJlIHRoYXQgbm9ib2R5IHRyaWVzIHRvIHJl
bW92ZSB0aGVtc2VsdmVzIGZyb20gaXQuCi0gICAgbV9wZXJCeXRlY29kZVByb2ZpbGVyLmNsZWFy
KCk7Ci0gICAgCi0gICAgQVNTRVJUKG1fYXBpTG9jay0+Y3VycmVudFRocmVhZElzSG9sZGluZ0xv
Y2soKSk7Ci0gICAgbV9hcGlMb2NrLT53aWxsRGVzdHJveUdsb2JhbERhdGEodGhpcyk7Ci0gICAg
aGVhcC5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwotCi0gICAgZGVsZXRlIGludGVycHJldGVyOwot
I2lmbmRlZiBOREVCVUcKLSAgICBpbnRlcnByZXRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SW50ZXJw
cmV0ZXIqPigweGJiYWRiZWVmKTsKLSNlbmRpZgotCi0gICAgYXJyYXlQcm90b3R5cGVUYWJsZS0+
ZGVsZXRlVGFibGUoKTsKLSAgICBhcnJheUNvbnN0cnVjdG9yVGFibGUtPmRlbGV0ZVRhYmxlKCk7
Ci0gICAgYm9vbGVhblByb3RvdHlwZVRhYmxlLT5kZWxldGVUYWJsZSgpOwotICAgIGRhdGVUYWJs
ZS0+ZGVsZXRlVGFibGUoKTsKLSAgICBkYXRlQ29uc3RydWN0b3JUYWJsZS0+ZGVsZXRlVGFibGUo
KTsKLSAgICBlcnJvclByb3RvdHlwZVRhYmxlLT5kZWxldGVUYWJsZSgpOwotICAgIGdsb2JhbE9i
amVjdFRhYmxlLT5kZWxldGVUYWJsZSgpOwotICAgIGpzb25UYWJsZS0+ZGVsZXRlVGFibGUoKTsK
LSAgICBtYXRoVGFibGUtPmRlbGV0ZVRhYmxlKCk7Ci0gICAgbnVtYmVyQ29uc3RydWN0b3JUYWJs
ZS0+ZGVsZXRlVGFibGUoKTsKLSAgICBudW1iZXJQcm90b3R5cGVUYWJsZS0+ZGVsZXRlVGFibGUo
KTsKLSAgICBvYmplY3RDb25zdHJ1Y3RvclRhYmxlLT5kZWxldGVUYWJsZSgpOwotICAgIHByaXZh
dGVOYW1lUHJvdG90eXBlVGFibGUtPmRlbGV0ZVRhYmxlKCk7Ci0gICAgcmVnRXhwVGFibGUtPmRl
bGV0ZVRhYmxlKCk7Ci0gICAgcmVnRXhwQ29uc3RydWN0b3JUYWJsZS0+ZGVsZXRlVGFibGUoKTsK
LSAgICByZWdFeHBQcm90b3R5cGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKLSAgICBzdHJpbmdDb25z
dHJ1Y3RvclRhYmxlLT5kZWxldGVUYWJsZSgpOwotCi0gICAgZmFzdERlbGV0ZShjb25zdF9jYXN0
PEhhc2hUYWJsZSo+KGFycmF5Q29uc3RydWN0b3JUYWJsZSkpOwotICAgIGZhc3REZWxldGUoY29u
c3RfY2FzdDxIYXNoVGFibGUqPihhcnJheVByb3RvdHlwZVRhYmxlKSk7Ci0gICAgZmFzdERlbGV0
ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGJvb2xlYW5Qcm90b3R5cGVUYWJsZSkpOwotICAgIGZh
c3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihkYXRlVGFibGUpKTsKLSAgICBmYXN0RGVs
ZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oZGF0ZUNvbnN0cnVjdG9yVGFibGUpKTsKLSAgICBm
YXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oZXJyb3JQcm90b3R5cGVUYWJsZSkpOwot
ICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihnbG9iYWxPYmplY3RUYWJsZSkp
OwotICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihqc29uVGFibGUpKTsKLSAg
ICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4obWF0aFRhYmxlKSk7Ci0gICAgZmFz
dERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KG51bWJlckNvbnN0cnVjdG9yVGFibGUpKTsK
LSAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4obnVtYmVyUHJvdG90eXBlVGFi
bGUpKTsKLSAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4ob2JqZWN0Q29uc3Ry
dWN0b3JUYWJsZSkpOwotICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihwcml2
YXRlTmFtZVByb3RvdHlwZVRhYmxlKSk7Ci0gICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hU
YWJsZSo+KHJlZ0V4cFRhYmxlKSk7Ci0gICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJs
ZSo+KHJlZ0V4cENvbnN0cnVjdG9yVGFibGUpKTsKLSAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8
SGFzaFRhYmxlKj4ocmVnRXhwUHJvdG90eXBlVGFibGUpKTsKLSAgICBmYXN0RGVsZXRlKGNvbnN0
X2Nhc3Q8SGFzaFRhYmxlKj4oc3RyaW5nQ29uc3RydWN0b3JUYWJsZSkpOwotCi0gICAgZGVsZXRl
IGVtcHR5TGlzdDsKLQotICAgIGRlbGV0ZSBwcm9wZXJ0eU5hbWVzOwotICAgIGlmIChnbG9iYWxE
YXRhVHlwZSAhPSBEZWZhdWx0KQotICAgICAgICBkZWxldGVJZGVudGlmaWVyVGFibGUoaWRlbnRp
ZmllclRhYmxlKTsKLQotICAgIGRlbGV0ZSBjbGllbnREYXRhOwotICAgIGRlbGV0ZSBtX3JlZ0V4
cENhY2hlOwotI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKLSAgICBkZWxldGUgbV9ydFRyYWNl
TGlzdDsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNjcmF0Y2hCdWZmZXJzLnNpemUoKTsgKytpKQotICAgICAgICBmYXN0RnJlZShz
Y3JhdGNoQnVmZmVyc1tpXSk7Ci0jZW5kaWYKLX0KLQotUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+
IEpTR2xvYmFsRGF0YTo6Y3JlYXRlQ29udGV4dEdyb3VwKEhlYXBUeXBlIGhlYXBUeXBlKQotewot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRhKEFQSUNvbnRleHRHcm91cCwgaGVh
cFR5cGUpKTsKLX0KLQotUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IEpTR2xvYmFsRGF0YTo6Y3Jl
YXRlKEhlYXBUeXBlIGhlYXBUeXBlKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSlNHbG9i
YWxEYXRhKERlZmF1bHQsIGhlYXBUeXBlKSk7Ci19Ci0KLVBhc3NSZWZQdHI8SlNHbG9iYWxEYXRh
PiBKU0dsb2JhbERhdGE6OmNyZWF0ZUxlYWtlZChIZWFwVHlwZSBoZWFwVHlwZSkKLXsKLSAgICBy
ZXR1cm4gY3JlYXRlKGhlYXBUeXBlKTsKLX0KLQotYm9vbCBKU0dsb2JhbERhdGE6OnNoYXJlZElu
c3RhbmNlRXhpc3RzKCkKLXsKLSAgICByZXR1cm4gc2hhcmVkSW5zdGFuY2VJbnRlcm5hbCgpOwot
fQotCi1KU0dsb2JhbERhdGEmIEpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuY2UoKQotewotICAg
IEdsb2JhbEpTTG9jayBnbG9iYWxMb2NrOwotICAgIEpTR2xvYmFsRGF0YSomIGluc3RhbmNlID0g
c2hhcmVkSW5zdGFuY2VJbnRlcm5hbCgpOwotICAgIGlmICghaW5zdGFuY2UpIHsKLSAgICAgICAg
aW5zdGFuY2UgPSBhZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRhKEFQSVNoYXJlZCwgU21hbGxIZWFw
KSkubGVha1JlZigpOwotICAgICAgICBpbnN0YW5jZS0+bWFrZVVzYWJsZUZyb21NdWx0aXBsZVRo
cmVhZHMoKTsKLSAgICB9Ci0gICAgcmV0dXJuICppbnN0YW5jZTsKLX0KLQotSlNHbG9iYWxEYXRh
KiYgSlNHbG9iYWxEYXRhOjpzaGFyZWRJbnN0YW5jZUludGVybmFsKCkKLXsKLSAgICBzdGF0aWMg
SlNHbG9iYWxEYXRhKiBzaGFyZWRJbnN0YW5jZTsKLSAgICByZXR1cm4gc2hhcmVkSW5zdGFuY2U7
Ci19Ci0KLSNpZiBFTkFCTEUoSklUKQotc3RhdGljIFRodW5rR2VuZXJhdG9yIHRodW5rR2VuZXJh
dG9yRm9ySW50cmluc2ljKEludHJpbnNpYyBpbnRyaW5zaWMpCi17Ci0gICAgc3dpdGNoIChpbnRy
aW5zaWMpIHsKLSAgICBjYXNlIENoYXJDb2RlQXRJbnRyaW5zaWM6Ci0gICAgICAgIHJldHVybiBj
aGFyQ29kZUF0VGh1bmtHZW5lcmF0b3I7Ci0gICAgY2FzZSBDaGFyQXRJbnRyaW5zaWM6Ci0gICAg
ICAgIHJldHVybiBjaGFyQXRUaHVua0dlbmVyYXRvcjsKLSAgICBjYXNlIEZyb21DaGFyQ29kZUlu
dHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yOwotICAg
IGNhc2UgU3FydEludHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIHNxcnRUaHVua0dlbmVyYXRvcjsK
LSAgICBjYXNlIFBvd0ludHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIHBvd1RodW5rR2VuZXJhdG9y
OwotICAgIGNhc2UgQWJzSW50cmluc2ljOgotICAgICAgICByZXR1cm4gYWJzVGh1bmtHZW5lcmF0
b3I7Ci0gICAgY2FzZSBGbG9vckludHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIGZsb29yVGh1bmtH
ZW5lcmF0b3I7Ci0gICAgY2FzZSBDZWlsSW50cmluc2ljOgotICAgICAgICByZXR1cm4gY2VpbFRo
dW5rR2VuZXJhdG9yOwotICAgIGNhc2UgUm91bmRJbnRyaW5zaWM6Ci0gICAgICAgIHJldHVybiBy
b3VuZFRodW5rR2VuZXJhdG9yOwotICAgIGNhc2UgRXhwSW50cmluc2ljOgotICAgICAgICByZXR1
cm4gZXhwVGh1bmtHZW5lcmF0b3I7Ci0gICAgY2FzZSBMb2dJbnRyaW5zaWM6Ci0gICAgICAgIHJl
dHVybiBsb2dUaHVua0dlbmVyYXRvcjsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci19Ci0KLU5hdGl2ZUV4ZWN1dGFibGUqIEpTR2xvYmFsRGF0YTo6Z2V0SG9zdEZ1bmN0
aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikK
LXsKLSAgICByZXR1cm4gaml0U3R1YnMtPmhvc3RGdW5jdGlvblN0dWIodGhpcywgZnVuY3Rpb24s
IGNvbnN0cnVjdG9yKTsKLX0KLU5hdGl2ZUV4ZWN1dGFibGUqIEpTR2xvYmFsRGF0YTo6Z2V0SG9z
dEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBJbnRyaW5zaWMgaW50cmluc2ljKQot
ewotICAgIEFTU0VSVChjYW5Vc2VKSVQoKSk7Ci0gICAgcmV0dXJuIGppdFN0dWJzLT5ob3N0RnVu
Y3Rpb25TdHViKHRoaXMsIGZ1bmN0aW9uLCBpbnRyaW5zaWMgIT0gTm9JbnRyaW5zaWMgPyB0aHVu
a0dlbmVyYXRvckZvckludHJpbnNpYyhpbnRyaW5zaWMpIDogMCwgaW50cmluc2ljKTsKLX0KLQot
I2Vsc2UgLy8gIUVOQUJMRShKSVQpCi1OYXRpdmVFeGVjdXRhYmxlKiBKU0dsb2JhbERhdGE6Omdl
dEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29u
c3RydWN0b3IpCi17Ci0gICAgcmV0dXJuIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqdGhpcywg
ZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKLX0KLSNlbmRpZiAvLyAhRU5BQkxFKEpJVCkKLQotSlNH
bG9iYWxEYXRhOjpDbGllbnREYXRhOjp+Q2xpZW50RGF0YSgpCi17Ci19Ci0KLXZvaWQgSlNHbG9i
YWxEYXRhOjpyZXNldERhdGVDYWNoZSgpCi17Ci0gICAgY2FjaGVkVVRDT2Zmc2V0ID0gUU5hTjsK
LSAgICBkc3RPZmZzZXRDYWNoZS5yZXNldCgpOwotICAgIGNhY2hlZERhdGVTdHJpbmcgPSBTdHJp
bmcoKTsKLSAgICBjYWNoZWREYXRlU3RyaW5nVmFsdWUgPSBRTmFOOwotICAgIGRhdGVJbnN0YW5j
ZUNhY2hlLnJlc2V0KCk7Ci19Ci0KLXZvaWQgSlNHbG9iYWxEYXRhOjpzdGFydFNhbXBsaW5nKCkK
LXsKLSAgICBpbnRlcnByZXRlci0+c3RhcnRTYW1wbGluZygpOwotfQotCi12b2lkIEpTR2xvYmFs
RGF0YTo6c3RvcFNhbXBsaW5nKCkKLXsKLSAgICBpbnRlcnByZXRlci0+c3RvcFNhbXBsaW5nKCk7
Ci19Ci0KLXZvaWQgSlNHbG9iYWxEYXRhOjpkaXNjYXJkQWxsQ29kZSgpCi17Ci0gICAgbV9jb2Rl
Q2FjaGUtPmNsZWFyKCk7Ci0gICAgaGVhcC5kZWxldGVBbGxDb21waWxlZENvZGUoKTsKLSAgICBo
ZWFwLnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCk7Ci19Ci0KLXZvaWQgSlNHbG9iYWxEYXRh
OjpkdW1wU2FtcGxlRGF0YShFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaW50ZXJwcmV0ZXItPmR1
bXBTYW1wbGVEYXRhKGV4ZWMpOwotI2lmIEVOQUJMRShBU1NFTUJMRVIpCi0gICAgRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKTsKLSNlbmRpZgotfQotCi1Tb3VyY2VQcm92aWRlckNh
Y2hlKiBKU0dsb2JhbERhdGE6OmFkZFNvdXJjZVByb3ZpZGVyQ2FjaGUoU291cmNlUHJvdmlkZXIq
IHNvdXJjZVByb3ZpZGVyKQotewotICAgIFNvdXJjZVByb3ZpZGVyQ2FjaGVNYXA6OkFkZFJlc3Vs
dCBhZGRSZXN1bHQgPSBzb3VyY2VQcm92aWRlckNhY2hlTWFwLmFkZChzb3VyY2VQcm92aWRlciwg
MCk7Ci0gICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlID0gYWRvcHRSZWYobmV3IFNvdXJjZVByb3ZpZGVyQ2FjaGUpOwotICAgIHJl
dHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwotfQotCi12b2lkIEpTR2xvYmFs
RGF0YTo6Y2xlYXJTb3VyY2VQcm92aWRlckNhY2hlcygpCi17Ci0gICAgc291cmNlUHJvdmlkZXJD
YWNoZU1hcC5jbGVhcigpOwotfQotCi1zdHJ1Y3QgU3RhY2tQcmVzZXJ2aW5nUmVjb21waWxlciA6
IHB1YmxpYyBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewotICAgIEhhc2hTZXQ8RnVuY3Rpb25F
eGVjdXRhYmxlKj4gY3VycmVudGx5RXhlY3V0aW5nRnVuY3Rpb25zOwotICAgIHZvaWQgb3BlcmF0
b3IoKShKU0NlbGwqIGNlbGwpCi0gICAgewotICAgICAgICBpZiAoIWNlbGwtPmluaGVyaXRzKCZG
dW5jdGlvbkV4ZWN1dGFibGU6OnNfaW5mbykpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFi
bGUqPihjZWxsKTsKLSAgICAgICAgaWYgKGN1cnJlbnRseUV4ZWN1dGluZ0Z1bmN0aW9ucy5jb250
YWlucyhleGVjdXRhYmxlKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZXhlY3V0YWJs
ZS0+Y2xlYXJDb2RlSWZOb3RDb21waWxpbmcoKTsKLSAgICB9Ci19OwotCi12b2lkIEpTR2xvYmFs
RGF0YTo6cmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoKQotewotICAgIGlmIChkeW5hbWljR2xvYmFs
T2JqZWN0KSB7Ci0gICAgICAgIFN0YWNrUHJlc2VydmluZ1JlY29tcGlsZXIgcmVjb21waWxlcjsK
LSAgICAgICAgSGFzaFNldDxKU0NlbGwqPiByb290czsKLSAgICAgICAgaGVhcC5jYW5vbmljYWxp
emVDZWxsTGl2ZW5lc3NEYXRhKCk7Ci0gICAgICAgIGhlYXAuZ2V0Q29uc2VydmF0aXZlUmVnaXN0
ZXJSb290cyhyb290cyk7Ci0gICAgICAgIEhhc2hTZXQ8SlNDZWxsKj46Oml0ZXJhdG9yIGVuZCA9
IHJvb3RzLmVuZCgpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8SlNDZWxsKj46Oml0ZXJhdG9yIHB0
ciA9IHJvb3RzLmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKSB7Ci0gICAgICAgICAgICBTY3Jp
cHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gMDsKLSAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9
ICpwdHI7Ci0gICAgICAgICAgICBpZiAoY2VsbC0+aW5oZXJpdHMoJlNjcmlwdEV4ZWN1dGFibGU6
OnNfaW5mbykpCi0gICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PFNjcmlw
dEV4ZWN1dGFibGUqPigqcHRyKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNlbGwtPmluaGVyaXRz
KCZKU0Z1bmN0aW9uOjpzX2luZm8pKSB7Ci0gICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVu
Y3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KCpwdHIpOwotICAgICAgICAgICAgICAgIGlmIChm
dW5jdGlvbi0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5qc0V4ZWN1dGFibGUoKTsK
LSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgQVNTRVJUKGV4ZWN1dGFibGUtPmluaGVyaXRzKCZTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8p
KTsKLSAgICAgICAgICAgIGV4ZWN1dGFibGUtPnVubGlua0NhbGxzKCk7Ci0gICAgICAgICAgICBp
ZiAoZXhlY3V0YWJsZS0+aW5oZXJpdHMoJkZ1bmN0aW9uRXhlY3V0YWJsZTo6c19pbmZvKSkKLSAg
ICAgICAgICAgICAgICByZWNvbXBpbGVyLmN1cnJlbnRseUV4ZWN1dGluZ0Z1bmN0aW9ucy5hZGQo
c3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSkpOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIGhlYXAub2JqZWN0U3BhY2UoKS5mb3JFYWNoTGl2
ZUNlbGw8U3RhY2tQcmVzZXJ2aW5nUmVjb21waWxlcj4ocmVjb21waWxlcik7Ci0gICAgfQotICAg
IG1fcmVnRXhwQ2FjaGUtPmludmFsaWRhdGVDb2RlKCk7Ci0gICAgaGVhcC5jb2xsZWN0QWxsR2Fy
YmFnZSgpOwotfQotICAgIAotdm9pZCByZWxlYXNlRXhlY3V0YWJsZU1lbW9yeShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEpCi17Ci0gICAgZ2xvYmFsRGF0YS5yZWxlYXNlRXhlY3V0YWJsZU1lbW9y
eSgpOwotfQotCi0jaWYgRU5BQkxFKERGR19KSVQpCi12b2lkIEpTR2xvYmFsRGF0YTo6Z2F0aGVy
Q29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQot
ewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2NyYXRjaEJ1ZmZlcnMuc2l6ZSgpOyBpKysp
IHsKLSAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHNjcmF0Y2hCdWZmZXJz
W2ldOwotICAgICAgICBpZiAoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoKCkpIHsKLSAgICAg
ICAgICAgIHZvaWQqIGJ1ZmZlclN0YXJ0ID0gc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpOwot
ICAgICAgICAgICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJ1ZmZlclN0YXJ0LCBzdGF0aWNfY2Fz
dDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KGJ1ZmZlclN0YXJ0KSArIHNjcmF0Y2hCdWZmZXIt
PmFjdGl2ZUxlbmd0aCgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0jZW5kaWYKLQotI2lmIEVO
QUJMRShSRUdFWFBfVFJBQ0lORykKLXZvaWQgSlNHbG9iYWxEYXRhOjphZGRSZWdFeHBUb1RyYWNl
KFJlZ0V4cCogcmVnRXhwKQotewotICAgIG1fcnRUcmFjZUxpc3QtPmFkZChyZWdFeHApOwotfQot
Ci12b2lkIEpTR2xvYmFsRGF0YTo6ZHVtcFJlZ0V4cFRyYWNlKCkKLXsKLSAgICAvLyBUaGUgZmly
c3QgUmVnRXhwIG9iamVjdCBpcyBpZ25vcmVkLiAgSXQgaXMgY3JlYXRlIGJ5IHRoZSBSZWdFeHBQ
cm90b3R5cGUgY3RvciBhbmQgbm90IHVzZWQuCi0gICAgUlRUcmFjZUxpc3Q6Oml0ZXJhdG9yIGl0
ZXIgPSArK21fcnRUcmFjZUxpc3QtPmJlZ2luKCk7Ci0gICAgCi0gICAgaWYgKGl0ZXIgIT0gbV9y
dFRyYWNlTGlzdC0+ZW5kKCkpIHsKLSAgICAgICAgZGF0YUxvZ0YoIlxuUmVnRXhwIFRyYWNpbmdc
biIpOwotICAgICAgICBkYXRhTG9nRigiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2goKSAgICBtYXRjaGVzXG4iKTsKLSAgICAg
ICAgZGF0YUxvZ0YoIlJlZ3VsYXIgRXhwcmVzc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAg
SklUIEFkZHJlc3MgICAgICBjYWxscyAgICAgIGZvdW5kXG4iKTsKLSAgICAgICAgZGF0YUxvZ0Yo
Ii0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t
LSstLS0tLS0tLS0tKy0tLS0tLS0tLS1cbiIpOwotICAgIAotICAgICAgICB1bnNpZ25lZCByZUNv
dW50ID0gMDsKLSAgICAKLSAgICAgICAgZm9yICg7IGl0ZXIgIT0gbV9ydFRyYWNlTGlzdC0+ZW5k
KCk7ICsraXRlciwgKytyZUNvdW50KQotICAgICAgICAgICAgKCppdGVyKS0+cHJpbnRUcmFjZURh
dGEoKTsKLQotICAgICAgICBkYXRhTG9nRigiJWQgUmVndWxhciBFeHByZXNzaW9uc1xuIiwgcmVD
b3VudCk7Ci0gICAgfQotICAgIAotICAgIG1fcnRUcmFjZUxpc3QtPmNsZWFyKCk7Ci19Ci0jZWxz
ZQotdm9pZCBKU0dsb2JhbERhdGE6OmR1bXBSZWdFeHBUcmFjZSgpCi17Ci19Ci0jZW5kaWYKLQot
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTI1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgot
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSlNHbG9iYWxEYXRhX2gKLSNkZWZpbmUgSlNHbG9i
YWxEYXRhX2gKLQotI2luY2x1ZGUgIkNhY2hlZFRyYW5zY2VuZGVudGFsRnVuY3Rpb24uaCIKLSNp
bmNsdWRlICJEYXRlSW5zdGFuY2VDYWNoZS5oIgotI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0
b3IuaCIKLSNpbmNsdWRlICJIZWFwLmgiCi0jaW5jbHVkZSAiSW50cmluc2ljLmgiCi0jaW5jbHVk
ZSAiSklUVGh1bmtzLmgiCi0jaW5jbHVkZSAiSklUVGh1bmtzLmgiCi0jaW5jbHVkZSAiSlNDSlNW
YWx1ZS5oIgotI2luY2x1ZGUgIkpTTG9jay5oIgotI2luY2x1ZGUgIkxMSW50RGF0YS5oIgotI2lu
Y2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgotI2luY2x1ZGUgIk51bWVyaWNTdHJpbmdz
LmgiCi0jaW5jbHVkZSAiUHJvZmlsZXJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIlByaXZhdGVOYW1l
LmgiCi0jaW5jbHVkZSAiUHJvdG90eXBlTWFwLmgiCi0jaW5jbHVkZSAiU21hbGxTdHJpbmdzLmgi
Ci0jaW5jbHVkZSAiU3Ryb25nLmgiCi0jaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCi0jaW5j
bHVkZSAiVHlwZWRBcnJheURlc2NyaXB0b3IuaCIKLSNpbmNsdWRlICJXYXRjaGRvZy5oIgotI2lu
Y2x1ZGUgIldlYWtSYW5kb20uaCIKLSNpbmNsdWRlIDx3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3Iu
aD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9TaW1wbGVTdGF0
cy5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0
Zi9UaHJlYWRTcGVjaWZpYy5oPgotI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+Ci0jaWYg
RU5BQkxFKFJFR0VYUF9UUkFDSU5HKQotI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgotI2Vu
ZGlmCi0KLW5hbWVzcGFjZSBKU0MgewotCi0gICAgY2xhc3MgQ29kZUJsb2NrOwotICAgIGNsYXNz
IENvZGVDYWNoZTsKLSAgICBjbGFzcyBDb21tb25JZGVudGlmaWVyczsKLSAgICBjbGFzcyBFeGVj
U3RhdGU7Ci0gICAgY2xhc3MgSGFuZGxlU3RhY2s7Ci0gICAgY2xhc3MgSWRlbnRpZmllclRhYmxl
OwotICAgIGNsYXNzIEludGVycHJldGVyOwotICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwotICAg
IGNsYXNzIEpTT2JqZWN0OwotICAgIGNsYXNzIEtleXdvcmRzOwotICAgIGNsYXNzIExMSW50T2Zm
c2V0c0V4dHJhY3RvcjsKLSAgICBjbGFzcyBMZWdhY3lQcm9maWxlcjsKLSAgICBjbGFzcyBOYXRp
dmVFeGVjdXRhYmxlOwotICAgIGNsYXNzIFBhcnNlckFyZW5hOwotICAgIGNsYXNzIFJlZ0V4cENh
Y2hlOwotICAgIGNsYXNzIFNvdXJjZVByb3ZpZGVyOwotICAgIGNsYXNzIFNvdXJjZVByb3ZpZGVy
Q2FjaGU7Ci0gICAgc3RydWN0IFN0YWNrRnJhbWU7Ci0gICAgY2xhc3MgU3RyaW5naWZpZXI7Ci0g
ICAgY2xhc3MgU3RydWN0dXJlOwotI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKLSAgICBjbGFz
cyBSZWdFeHA7Ci0jZW5kaWYKLSAgICBjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKLSAgICBjbGFz
cyBVbmxpbmtlZEV2YWxDb2RlQmxvY2s7Ci0gICAgY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGU7Ci0gICAgY2xhc3MgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOwotCi0jaWYgRU5BQkxF
KERGR19KSVQpCi0gICAgbmFtZXNwYWNlIERGRyB7Ci0gICAgY2xhc3MgTG9uZ0xpdmVkU3RhdGU7
Ci0gICAgfQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0gICAgc3RydWN0IEhhc2hUYWJs
ZTsKLSAgICBzdHJ1Y3QgSW5zdHJ1Y3Rpb247Ci0KLSAgICBzdHJ1Y3QgRFNUT2Zmc2V0Q2FjaGUg
ewotICAgICAgICBEU1RPZmZzZXRDYWNoZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc2V0
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgcmVzZXQoKQotICAgICAgICB7
Ci0gICAgICAgICAgICBvZmZzZXQgPSAwLjA7Ci0gICAgICAgICAgICBzdGFydCA9IDAuMDsKLSAg
ICAgICAgICAgIGVuZCA9IC0xLjA7Ci0gICAgICAgICAgICBpbmNyZW1lbnQgPSAwLjA7Ci0gICAg
ICAgIH0KLQotICAgICAgICBkb3VibGUgb2Zmc2V0OwotICAgICAgICBkb3VibGUgc3RhcnQ7Ci0g
ICAgICAgIGRvdWJsZSBlbmQ7Ci0gICAgICAgIGRvdWJsZSBpbmNyZW1lbnQ7Ci0gICAgfTsKLQot
I2lmIEVOQUJMRShERkdfSklUKQotICAgIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOwotCi0jaWYg
Q09NUElMRVIoTVNWQykKLSNwcmFnbWEgd2FybmluZyhwdXNoKQotI3ByYWdtYSB3YXJuaW5nKGRp
c2FibGU6IDQyMDApIC8vIERpc2FibGUgInplcm8tc2l6ZWQgYXJyYXkgaW4gc3RydWN0L3VuaW9u
IiB3YXJuaW5nCi0jZW5kaWYKLSAgICBzdHJ1Y3QgU2NyYXRjaEJ1ZmZlciB7Ci0gICAgICAgIFNj
cmF0Y2hCdWZmZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICB1Lm1fYWN0aXZlTGVuZ3RoID0g
MDsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBTY3JhdGNoQnVmZmVyKiBjcmVhdGUoc2l6
ZV90IHNpemUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjcmF0Y2hCdWZmZXIqIHJlc3VsdCA9
IG5ldyAoZmFzdE1hbGxvYyhTY3JhdGNoQnVmZmVyOjphbGxvY2F0aW9uU2l6ZShzaXplKSkpIFNj
cmF0Y2hCdWZmZXI7Ci0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQot
ICAgICAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKHNpemVfdCBidWZmZXJTaXplKSB7
IHJldHVybiBzaXplb2YoU2NyYXRjaEJ1ZmZlcikgKyBidWZmZXJTaXplOyB9Ci0gICAgICAgIHZv
aWQgc2V0QWN0aXZlTGVuZ3RoKHNpemVfdCBhY3RpdmVMZW5ndGgpIHsgdS5tX2FjdGl2ZUxlbmd0
aCA9IGFjdGl2ZUxlbmd0aDsgfQotICAgICAgICBzaXplX3QgYWN0aXZlTGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gdS5tX2FjdGl2ZUxlbmd0aDsgfTsKLSAgICAgICAgc2l6ZV90KiBhY3RpdmVMZW5n
dGhQdHIoKSB7IHJldHVybiAmdS5tX2FjdGl2ZUxlbmd0aDsgfTsKLSAgICAgICAgdm9pZCogZGF0
YUJ1ZmZlcigpIHsgcmV0dXJuIG1fYnVmZmVyOyB9Ci0KLSAgICAgICAgdW5pb24gewotICAgICAg
ICAgICAgc2l6ZV90IG1fYWN0aXZlTGVuZ3RoOwotICAgICAgICAgICAgZG91YmxlIHBhZDsgLy8g
TWFrZSBzdXJlIG1fYnVmZmVyIGlzIGRvdWJsZSBhbGlnbmVkLgotICAgICAgICB9IHU7Ci0jaWYg
Q1BVKE1JUFMpICYmIChkZWZpbmVkIFdURl9NSVBTX0FSQ0hfUkVWICYmIFdURl9NSVBTX0FSQ0hf
UkVWID09IDIpCi0gICAgICAgIHZvaWQqIG1fYnVmZmVyWzBdIF9fYXR0cmlidXRlX18oKGFsaWdu
ZWQoOCkpKTsKLSNlbHNlCi0gICAgICAgIHZvaWQqIG1fYnVmZmVyWzBdOwotI2VuZGlmCi0gICAg
fTsKLSNpZiBDT01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkKLSNlbmRpZgotI2Vu
ZGlmCi0KLSAgICBjbGFzcyBKU0dsb2JhbERhdGEgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8SlNHbG9iYWxEYXRhPiB7Ci0gICAgcHVibGljOgotICAgICAgICAvLyBXZWJDb3JlIGhhcyBh
IG9uZS10by1vbmUgbWFwcGluZyBvZiB0aHJlYWRzIHRvIEpTR2xvYmFsRGF0YXM7Ci0gICAgICAg
IC8vIGVpdGhlciBjcmVhdGUoKSBvciBjcmVhdGVMZWFrZWQoKSBzaG91bGQgb25seSBiZSBjYWxs
ZWQgb25jZQotICAgICAgICAvLyBvbiBhIHRocmVhZCwgdGhpcyBpcyB0aGUgJ2RlZmF1bHQnIEpT
R2xvYmFsRGF0YSAoaXQgdXNlcyB0aGUKLSAgICAgICAgLy8gdGhyZWFkJ3MgZGVmYXVsdCBzdHJp
bmcgdW5pcXVpbmcgdGFibGUgZnJvbSB3dGZUaHJlYWREYXRhKS4KLSAgICAgICAgLy8gQVBJIGNv
bnRleHRzIGNyZWF0ZWQgdXNpbmcgdGhlIG5ldyBjb250ZXh0IGdyb3VwIGF3YXJlIGludGVyZmFj
ZQotICAgICAgICAvLyBjcmVhdGUgQVBJQ29udGV4dEdyb3VwIG9iamVjdHMgd2hpY2ggcmVxdWly
ZSBsZXNzIGxvY2tpbmcgb2YgSlNDCi0gICAgICAgIC8vIHRoYW4gdGhlIG9sZCBzaW5nbGV0b24g
QVBJU2hhcmVkIEpTR2xvYmFsRGF0YSBjcmVhdGVkIGZvciB1c2UgYnkKLSAgICAgICAgLy8gdGhl
IG9yaWdpbmFsIEFQSS4KLSAgICAgICAgZW51bSBHbG9iYWxEYXRhVHlwZSB7IERlZmF1bHQsIEFQ
SUNvbnRleHRHcm91cCwgQVBJU2hhcmVkIH07Ci0gICAgICAgIAotICAgICAgICBzdHJ1Y3QgQ2xp
ZW50RGF0YSB7Ci0gICAgICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5DbGllbnRE
YXRhKCkgPSAwOwotICAgICAgICB9OwotCi0gICAgICAgIGJvb2wgaXNTaGFyZWRJbnN0YW5jZSgp
IHsgcmV0dXJuIGdsb2JhbERhdGFUeXBlID09IEFQSVNoYXJlZDsgfQotICAgICAgICBib29sIHVz
aW5nQVBJKCkgeyByZXR1cm4gZ2xvYmFsRGF0YVR5cGUgIT0gRGVmYXVsdDsgfQotICAgICAgICBz
dGF0aWMgYm9vbCBzaGFyZWRJbnN0YW5jZUV4aXN0cygpOwotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgSlNHbG9iYWxEYXRhJiBzaGFyZWRJbnN0YW5jZSgpOwotCi0gICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4gY3JlYXRlKEhl
YXBUeXBlID0gU21hbGxIZWFwKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFBh
c3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBjcmVhdGVMZWFrZWQoSGVhcFR5cGUgPSBTbWFsbEhlYXAp
OwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IGNyZWF0ZUNvbnRleHRH
cm91cChIZWFwVHlwZSA9IFNtYWxsSGVhcCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIH5K
U0dsb2JhbERhdGEoKTsKLQotICAgICAgICB2b2lkIG1ha2VVc2FibGVGcm9tTXVsdGlwbGVUaHJl
YWRzKCkgeyBoZWFwLm1hY2hpbmVUaHJlYWRzKCkubWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVh
ZHMoKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTTG9jaz4gbV9hcGlMb2Nr
OwotCi0gICAgcHVibGljOgotI2lmIEVOQUJMRShBU1NFTUJMRVIpCi0gICAgICAgIC8vIGV4ZWN1
dGFibGVBbGxvY2F0b3Igc2hvdWxkIGJlIGRlc3RydWN0ZWQgYWZ0ZXIgdGhlIGhlYXAsIGFzIHRo
ZSBoZWFwIGNhbiBjYWxsIGV4ZWN1dGFibGVBbGxvY2F0b3IKLSAgICAgICAgLy8gaW4gaXRzIGRl
c3RydWN0b3IuCi0gICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IgZXhlY3V0YWJsZUFsbG9jYXRv
cjsKLSNlbmRpZgotCi0gICAgICAgIC8vIFRoZSBoZWFwIHNob3VsZCBiZSBqdXN0IGFmdGVyIGV4
ZWN1dGFibGVBbGxvY2F0b3IgYW5kIGJlZm9yZSBvdGhlciBtZW1iZXJzIHRvIGVuc3VyZSB0aGF0
IGl0J3MKLSAgICAgICAgLy8gZGVzdHJ1Y3RlZCBhZnRlciBhbGwgdGhlIG9iamVjdHMgdGhhdCBy
ZWZlcmVuY2UgaXQuCi0gICAgICAgIEhlYXAgaGVhcDsKLSAgICAgICAgCi0jaWYgRU5BQkxFKERG
R19KSVQpCi0gICAgICAgIE93blB0cjxERkc6OkxvbmdMaXZlZFN0YXRlPiBtX2RmZ1N0YXRlOwot
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0gICAgICAgIEdsb2JhbERhdGFUeXBlIGdsb2Jh
bERhdGFUeXBlOwotICAgICAgICBDbGllbnREYXRhKiBjbGllbnREYXRhOwotICAgICAgICBFeGVj
U3RhdGUqIHRvcENhbGxGcmFtZTsKLSAgICAgICAgV2F0Y2hkb2cgd2F0Y2hkb2c7Ci0KLSAgICAg
ICAgY29uc3QgSGFzaFRhYmxlKiBhcnJheUNvbnN0cnVjdG9yVGFibGU7Ci0gICAgICAgIGNvbnN0
IEhhc2hUYWJsZSogYXJyYXlQcm90b3R5cGVUYWJsZTsKLSAgICAgICAgY29uc3QgSGFzaFRhYmxl
KiBib29sZWFuUHJvdG90eXBlVGFibGU7Ci0gICAgICAgIGNvbnN0IEhhc2hUYWJsZSogZGF0ZVRh
YmxlOwotICAgICAgICBjb25zdCBIYXNoVGFibGUqIGRhdGVDb25zdHJ1Y3RvclRhYmxlOwotICAg
ICAgICBjb25zdCBIYXNoVGFibGUqIGVycm9yUHJvdG90eXBlVGFibGU7Ci0gICAgICAgIGNvbnN0
IEhhc2hUYWJsZSogZ2xvYmFsT2JqZWN0VGFibGU7Ci0gICAgICAgIGNvbnN0IEhhc2hUYWJsZSog
anNvblRhYmxlOwotICAgICAgICBjb25zdCBIYXNoVGFibGUqIG1hdGhUYWJsZTsKLSAgICAgICAg
Y29uc3QgSGFzaFRhYmxlKiBudW1iZXJDb25zdHJ1Y3RvclRhYmxlOwotICAgICAgICBjb25zdCBI
YXNoVGFibGUqIG51bWJlclByb3RvdHlwZVRhYmxlOwotICAgICAgICBjb25zdCBIYXNoVGFibGUq
IG9iamVjdENvbnN0cnVjdG9yVGFibGU7Ci0gICAgICAgIGNvbnN0IEhhc2hUYWJsZSogcHJpdmF0
ZU5hbWVQcm90b3R5cGVUYWJsZTsKLSAgICAgICAgY29uc3QgSGFzaFRhYmxlKiByZWdFeHBUYWJs
ZTsKLSAgICAgICAgY29uc3QgSGFzaFRhYmxlKiByZWdFeHBDb25zdHJ1Y3RvclRhYmxlOwotICAg
ICAgICBjb25zdCBIYXNoVGFibGUqIHJlZ0V4cFByb3RvdHlwZVRhYmxlOwotICAgICAgICBjb25z
dCBIYXNoVGFibGUqIHN0cmluZ0NvbnN0cnVjdG9yVGFibGU7Ci0gICAgICAgIAotICAgICAgICBT
dHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1cmVTdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1
Y3R1cmU+IHN0cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0
dXJlPiBkZWJ1Z2dlckFjdGl2YXRpb25TdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1
cmU+IHRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0
cnVjdHVyZT4gc3RyaW5nU3RydWN0dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBub3RB
bk9iamVjdFN0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvcGVydHlOYW1l
SXRlcmF0b3JTdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGdldHRlclNldHRl
clN0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gYXBpV3JhcHBlclN0cnVjdHVy
ZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gSlNTY29wZVN0cnVjdHVyZTsKLSAgICAgICAg
U3Ryb25nPFN0cnVjdHVyZT4gZXhlY3V0YWJsZVN0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0
cnVjdHVyZT4gbmF0aXZlRXhlY3V0YWJsZVN0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVj
dHVyZT4gZXZhbEV4ZWN1dGFibGVTdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+
IHByb2dyYW1FeGVjdXRhYmxlU3RydWN0dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBm
dW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHJl
Z0V4cFN0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc2hhcmVkU3ltYm9sVGFi
bGVTdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVyZUNoYWluU3Ry
dWN0dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzcGFyc2VBcnJheVZhbHVlTWFwU3Ry
dWN0dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB3aXRoU2NvcGVTdHJ1Y3R1cmU7Ci0g
ICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0
dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tT
dHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRXZhbENvZGVCbG9j
a1N0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9ja1N0cnVjdHVyZTsKLSAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvcGVydHlUYWJs
ZVN0cnVjdHVyZTsKLQotICAgICAgICBJZGVudGlmaWVyVGFibGUqIGlkZW50aWZpZXJUYWJsZTsK
LSAgICAgICAgQ29tbW9uSWRlbnRpZmllcnMqIHByb3BlcnR5TmFtZXM7Ci0gICAgICAgIGNvbnN0
IE1hcmtlZEFyZ3VtZW50QnVmZmVyKiBlbXB0eUxpc3Q7IC8vIExpc3RzIGFyZSBzdXBwb3NlZCB0
byBiZSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIHRvIGhhdmUgdGhlaXIgZWxlbWVudHMgcHJvcGVy
bHkgbWFya2VkLCB3aGljaCBpcyBub3QgdGhlIGNhc2UgaGVyZSAtIGJ1dCB0aGlzIGxpc3QgaGFz
IG5vdGhpbmcgdG8gbWFyay4KLSAgICAgICAgU21hbGxTdHJpbmdzIHNtYWxsU3RyaW5nczsKLSAg
ICAgICAgTnVtZXJpY1N0cmluZ3MgbnVtZXJpY1N0cmluZ3M7Ci0gICAgICAgIERhdGVJbnN0YW5j
ZUNhY2hlIGRhdGVJbnN0YW5jZUNhY2hlOwotICAgICAgICBXVEY6OlNpbXBsZVN0YXRzIG1hY2hp
bmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVDsKLSAgICAgICAgVmVjdG9y
PENvZGVCbG9jayo+IGNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkOwotICAgICAgICB2b2lkIHN0YXJ0
ZWRDb21waWxpbmcoQ29kZUJsb2NrKiBjb2RlQmxvY2spCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkLmFwcGVuZChjb2RlQmxvY2spOwotICAgICAgICB9Ci0K
LSAgICAgICAgdm9pZCBmaW5pc2hlZENvbXBpbGluZyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKLSAg
ICAgICAgewotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGNvZGVCbG9jayA9
PSBjb2RlQmxvY2tzQmVpbmdDb21waWxlZC5sYXN0KCkpOwotICAgICAgICAgICAgY29kZUJsb2Nr
c0JlaW5nQ29tcGlsZWQucmVtb3ZlTGFzdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBz
ZXRJbkRlZmluZU93blByb3BlcnR5KGJvb2wgaW5EZWZpbmVPd25Qcm9wZXJ0eSkKLSAgICAgICAg
ewotICAgICAgICAgICAgbV9pbkRlZmluZU93blByb3BlcnR5ID0gaW5EZWZpbmVPd25Qcm9wZXJ0
eTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaXNJbkRlZmluZU93blByb3BlcnR5KCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1faW5EZWZpbmVPd25Qcm9wZXJ0eTsKLSAgICAg
ICAgfQotCi0gICAgICAgIExlZ2FjeVByb2ZpbGVyKiBlbmFibGVkUHJvZmlsZXIoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9lbmFibGVkUHJvZmlsZXI7Ci0gICAgICAgIH0KLQot
I2lmIEVOQUJMRShKSVQpICYmIEVOQUJMRShMTElOVCkKLSAgICAgICAgYm9vbCBjYW5Vc2VKSVQo
KSB7IHJldHVybiBtX2NhblVzZUpJVDsgfQotI2VsaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgYm9v
bCBjYW5Vc2VKSVQoKSB7IHJldHVybiB0cnVlOyB9IC8vIGppdCBvbmx5Ci0jZWxzZQotICAgICAg
ICBib29sIGNhblVzZUpJVCgpIHsgcmV0dXJuIGZhbHNlOyB9IC8vIGludGVycHJldGVyIG9ubHkK
LSNlbmRpZgotCi0jaWYgRU5BQkxFKFlBUlJfSklUKQotICAgICAgICBib29sIGNhblVzZVJlZ0V4
cEpJVCgpIHsgcmV0dXJuIG1fY2FuVXNlUmVnRXhwSklUOyB9Ci0jZWxzZQotICAgICAgICBib29s
IGNhblVzZVJlZ0V4cEpJVCgpIHsgcmV0dXJuIGZhbHNlOyB9IC8vIGludGVycHJldGVyIG9ubHkK
LSNlbmRpZgotCi0gICAgICAgIFNvdXJjZVByb3ZpZGVyQ2FjaGUqIGFkZFNvdXJjZVByb3ZpZGVy
Q2FjaGUoU291cmNlUHJvdmlkZXIqKTsKLSAgICAgICAgdm9pZCBjbGVhclNvdXJjZVByb3ZpZGVy
Q2FjaGVzKCk7Ci0KLSAgICAgICAgUHJvdG90eXBlTWFwIHByb3RvdHlwZU1hcDsKLQotICAgICAg
ICBPd25QdHI8UGFyc2VyQXJlbmE+IHBhcnNlckFyZW5hOwotICAgICAgICB0eXBlZGVmIEhhc2hN
YXA8UmVmUHRyPFNvdXJjZVByb3ZpZGVyPiwgUmVmUHRyPFNvdXJjZVByb3ZpZGVyQ2FjaGU+ID4g
U291cmNlUHJvdmlkZXJDYWNoZU1hcDsKLSAgICAgICAgU291cmNlUHJvdmlkZXJDYWNoZU1hcCBz
b3VyY2VQcm92aWRlckNhY2hlTWFwOwotICAgICAgICBPd25QdHI8S2V5d29yZHM+IGtleXdvcmRz
OwotICAgICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXI7Ci0jaWYgRU5BQkxFKEpJVCkKLSAg
ICAgICAgT3duUHRyPEpJVFRodW5rcz4gaml0U3R1YnM7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBnZXRDVElTdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGppdFN0dWJzLT5jdGlTdHViKHRoaXMsIGdlbmVyYXRvcik7Ci0g
ICAgICAgIH0KLSAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0SG9zdEZ1bmN0aW9uKE5hdGl2
ZUZ1bmN0aW9uLCBJbnRyaW5zaWMpOwotI2VuZGlmCi0gICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUq
IGdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0
b3IpOwotCi0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uOwotICAgICAgICBSZWZDb3VudGVkQXJy
YXk8U3RhY2tGcmFtZT4gZXhjZXB0aW9uU3RhY2s7Ci0KLSAgICAgICAgY29uc3QgQ2xhc3NJbmZv
KiBjb25zdCBqc0FycmF5Q2xhc3NJbmZvOwotICAgICAgICBjb25zdCBDbGFzc0luZm8qIGNvbnN0
IGpzRmluYWxPYmplY3RDbGFzc0luZm87Ci0KLSAgICAgICAgUmV0dXJuQWRkcmVzc1B0ciBleGNl
cHRpb25Mb2NhdGlvbjsKLSAgICAgICAgSlNWYWx1ZSBob3N0Q2FsbFJldHVyblZhbHVlOwotICAg
ICAgICBFeGVjU3RhdGUqIGNhbGxGcmFtZUZvclRocm93OwotICAgICAgICB2b2lkKiB0YXJnZXRN
YWNoaW5lUENGb3JUaHJvdzsKLSAgICAgICAgSW5zdHJ1Y3Rpb24qIHRhcmdldEludGVycHJldGVy
UENGb3JUaHJvdzsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgdWludDMyX3Qgb3NyRXhp
dEluZGV4OwotICAgICAgICB2b2lkKiBvc3JFeGl0SnVtcERlc3RpbmF0aW9uOwotICAgICAgICBW
ZWN0b3I8U2NyYXRjaEJ1ZmZlcio+IHNjcmF0Y2hCdWZmZXJzOwotICAgICAgICBzaXplX3Qgc2l6
ZU9mTGFzdFNjcmF0Y2hCdWZmZXI7Ci0gICAgICAgIAotICAgICAgICBTY3JhdGNoQnVmZmVyKiBz
Y3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplX3Qgc2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKCFzaXplKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAoc2l6ZSA+IHNpemVPZkxhc3RTY3JhdGNoQnVmZmVyKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IGEgTl4yIG1lbW9yeSB1c2FnZSBwYXRob2xvZ3kgYnkg
ZW5zdXJpbmcKLSAgICAgICAgICAgICAgICAvLyB0aGF0IGF0IHdvcnN0LCB3ZSBnZXQgYSBnZW9t
ZXRyaWMgc2VyaWVzLCBtZWFuaW5nIHRoYXQgdGhlCi0gICAgICAgICAgICAgICAgLy8gdG90YWwg
bWVtb3J5IHVzYWdlIGlzIHNvbWV3aGVyZSBhcm91bmQKLSAgICAgICAgICAgICAgICAvLyBtYXgo
c2NyYXRjaCBidWZmZXIgc2l6ZSkgKiA0LgotICAgICAgICAgICAgICAgIHNpemVPZkxhc3RTY3Jh
dGNoQnVmZmVyID0gc2l6ZSAqIDI7Ci0KLSAgICAgICAgICAgICAgICBzY3JhdGNoQnVmZmVycy5h
cHBlbmQoU2NyYXRjaEJ1ZmZlcjo6Y3JlYXRlKHNpemVPZkxhc3RTY3JhdGNoQnVmZmVyKSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNjcmF0Y2hCdWZmZXIqIHJlc3VsdCA9IHNjcmF0
Y2hCdWZmZXJzLmxhc3QoKTsKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0QWN0aXZlTGVuZ3RoKDAp
OwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQg
Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKLSNlbmRpZgotCi0g
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBkeW5hbWljR2xvYmFsT2JqZWN0OwotCi0gICAgICAgIEhh
c2hTZXQ8SlNPYmplY3QqPiBzdHJpbmdSZWN1cnNpb25DaGVja1Zpc2l0ZWRPYmplY3RzOwotCi0g
ICAgICAgIGRvdWJsZSBjYWNoZWRVVENPZmZzZXQ7Ci0gICAgICAgIERTVE9mZnNldENhY2hlIGRz
dE9mZnNldENhY2hlOwotICAgICAgICAKLSAgICAgICAgU3RyaW5nIGNhY2hlZERhdGVTdHJpbmc7
Ci0gICAgICAgIGRvdWJsZSBjYWNoZWREYXRlU3RyaW5nVmFsdWU7Ci0KLSAgICAgICAgTGVnYWN5
UHJvZmlsZXIqIG1fZW5hYmxlZFByb2ZpbGVyOwotICAgICAgICBPd25QdHI8UHJvZmlsZXI6OkRh
dGFiYXNlPiBtX3BlckJ5dGVjb2RlUHJvZmlsZXI7Ci0gICAgICAgIFJlZ0V4cENhY2hlKiBtX3Jl
Z0V4cENhY2hlOwotICAgICAgICBCdW1wUG9pbnRlckFsbG9jYXRvciBtX3JlZ0V4cEFsbG9jYXRv
cjsKLQotI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKLSAgICAgICAgdHlwZWRlZiBMaXN0SGFz
aFNldDxSZWZQdHI8UmVnRXhwPiA+IFJUVHJhY2VMaXN0OwotICAgICAgICBSVFRyYWNlTGlzdCog
bV9ydFRyYWNlTGlzdDsKLSNlbmRpZgotCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICBUaHJlYWRJ
ZGVudGlmaWVyIGV4Y2x1c2l2ZVRocmVhZDsKLSNlbmRpZgotCi0gICAgICAgIENhY2hlZFRyYW5z
Y2VuZGVudGFsRnVuY3Rpb248c3RkOjpzaW4+IGNhY2hlZFNpbjsKLQotICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIHJlc2V0RGF0ZUNhY2hlKCk7Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBzdGFydFNhbXBsaW5nKCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgc3RvcFNhbXBsaW5nKCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcFNh
bXBsZURhdGEoRXhlY1N0YXRlKiBleGVjKTsKLSAgICAgICAgUmVnRXhwQ2FjaGUqIHJlZ0V4cENh
Y2hlKCkgeyByZXR1cm4gbV9yZWdFeHBDYWNoZTsgfQotI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lO
RykKLSAgICAgICAgdm9pZCBhZGRSZWdFeHBUb1RyYWNlKFBhc3NSZWZQdHI8UmVnRXhwPiByZWdF
eHApOwotI2VuZGlmCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcFJlZ0V4cFRy
YWNlKCk7Ci0KLSAgICAgICAgYm9vbCBpc0NvbGxlY3RvckJ1c3koKSB7IHJldHVybiBoZWFwLmlz
QnVzeSgpOyB9Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVsZWFzZUV4ZWN1dGFi
bGVNZW1vcnkoKTsKLQotI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQotICAgICAgICBib29sIGlz
SW5pdGlhbGl6aW5nT2JqZWN0KCkgY29uc3Q7IAotICAgICAgICB2b2lkIHNldEluaXRpYWxpemlu
Z09iamVjdENsYXNzKGNvbnN0IENsYXNzSW5mbyopOwotI2VuZGlmCi0KLSAgICAgICAgdW5zaWdu
ZWQgbV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnM7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIHNfbWluTnVtYmVyT2ZOZXdTdHJpbmdzVG9IYXNoQ29ucyA9IDEwMDsKLQotICAg
ICAgICBib29sIGhhdmVFbm91Z2hOZXdTdHJpbmdzVG9IYXNoQ29ucygpIHsgcmV0dXJuIG1fbmV3
U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zID4gc19taW5OdW1iZXJPZk5ld1N0cmluZ3NUb0hhc2hD
b25zOyB9Ci0gICAgICAgIHZvaWQgcmVzZXROZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMoKSB7
IG1fbmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zID0gMDsgfQotCi0jZGVmaW5lIHJlZ2lzdGVy
VHlwZWRBcnJheUZ1bmN0aW9uKHR5cGUsIGNhcGl0YWxpemVkVHlwZSkgXAotICAgICAgICB2b2lk
IHJlZ2lzdGVyVHlwZWRBcnJheURlc2NyaXB0b3IoY29uc3QgY2FwaXRhbGl6ZWRUeXBlIyNBcnJh
eSosIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKSBcCi0gICAgICAgIHsg
XAotICAgICAgICAgICAgQVNTRVJUKCFtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yLm1fY2xhc3NJ
bmZvIHx8IG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IubV9jbGFzc0luZm8gPT0gZGVzY3JpcHRv
ci5tX2NsYXNzSW5mbyk7IFwKLSAgICAgICAgICAgIG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3Ig
PSBkZXNjcmlwdG9yOyBcCi0gICAgICAgICAgICBBU1NFUlQobV8jI3R5cGUjI0FycmF5RGVzY3Jp
cHRvci5tX2NsYXNzSW5mbyk7IFwKLSAgICAgICAgfSBcCi0gICAgICAgIGNvbnN0IFR5cGVkQXJy
YXlEZXNjcmlwdG9yJiB0eXBlIyNBcnJheURlc2NyaXB0b3IoKSBjb25zdCB7IEFTU0VSVChtXyMj
dHlwZSMjQXJyYXlEZXNjcmlwdG9yLm1fY2xhc3NJbmZvKTsgcmV0dXJuIG1fIyN0eXBlIyNBcnJh
eURlc2NyaXB0b3I7IH0KLQotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihpbnQ4
LCBJbnQ4KTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oaW50MTYsIEludDE2
KTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oaW50MzIsIEludDMyKTsKLSAg
ICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odWludDgsIFVpbnQ4KTsKLSAgICAgICAg
cmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odWludDhDbGFtcGVkLCBVaW50OENsYW1wZWQpOwot
ICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih1aW50MTYsIFVpbnQxNik7Ci0gICAg
ICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKHVpbnQzMiwgVWludDMyKTsKLSAgICAgICAg
cmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oZmxvYXQzMiwgRmxvYXQzMik7Ci0gICAgICAgIHJl
Z2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKGZsb2F0NjQsIEZsb2F0NjQpOwotI3VuZGVmIHJlZ2lz
dGVyVHlwZWRBcnJheUZ1bmN0aW9uCi0gICAgICAgIAotICAgICAgICBjb25zdCBUeXBlZEFycmF5
RGVzY3JpcHRvciogdHlwZWRBcnJheURlc2NyaXB0b3IoVHlwZWRBcnJheVR5cGUgdHlwZSkgY29u
c3QKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgICAgICBj
YXNlIFR5cGVkQXJyYXlOb25lOgotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAg
ICAgY2FzZSBUeXBlZEFycmF5SW50ODoKLSAgICAgICAgICAgICAgICByZXR1cm4gJmludDhBcnJh
eURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUludDE2OgotICAgICAg
ICAgICAgICAgIHJldHVybiAmaW50MTZBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNh
c2UgVHlwZWRBcnJheUludDMyOgotICAgICAgICAgICAgICAgIHJldHVybiAmaW50MzJBcnJheURl
c2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4OgotICAgICAgICAg
ICAgICAgIHJldHVybiAmdWludDhBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2Ug
VHlwZWRBcnJheVVpbnQ4Q2xhbXBlZDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJnVpbnQ4Q2xh
bXBlZEFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDE2
OgotICAgICAgICAgICAgICAgIHJldHVybiAmdWludDE2QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAg
ICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50MzI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZ1
aW50MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUZsb2F0
MzI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZmbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0g
ICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDY0OgotICAgICAgICAgICAgICAgIHJldHVy
biAmZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgSlNMb2NrJiBhcGlMb2NrKCkgeyByZXR1cm4gKm1f
YXBpTG9jazsgfQotICAgICAgICBDb2RlQ2FjaGUqIGNvZGVDYWNoZSgpIHsgcmV0dXJuIG1fY29k
ZUNhY2hlLmdldCgpOyB9Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkaXNjYXJk
QWxsQ29kZSgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zm
c2V0c0V4dHJhY3RvcjsKLSAgICAgICAgCi0gICAgICAgIEpTR2xvYmFsRGF0YShHbG9iYWxEYXRh
VHlwZSwgSGVhcFR5cGUpOwotICAgICAgICBzdGF0aWMgSlNHbG9iYWxEYXRhKiYgc2hhcmVkSW5z
dGFuY2VJbnRlcm5hbCgpOwotICAgICAgICB2b2lkIGNyZWF0ZU5hdGl2ZVRodW5rKCk7Ci0jaWYg
RU5BQkxFKEFTU0VNQkxFUikKLSAgICAgICAgYm9vbCBtX2NhblVzZUFzc2VtYmxlcjsKLSNlbmRp
ZgotI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIGJvb2wgbV9jYW5Vc2VKSVQ7Ci0jZW5kaWYKLSNp
ZiBFTkFCTEUoWUFSUl9KSVQpCi0gICAgICAgIGJvb2wgbV9jYW5Vc2VSZWdFeHBKSVQ7Ci0jZW5k
aWYKLSNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKLSAgICAgICAgY29uc3QgQ2xhc3NJbmZvKiBt
X2luaXRpYWxpemluZ09iamVjdENsYXNzOwotI2VuZGlmCi0gICAgICAgIGJvb2wgbV9pbkRlZmlu
ZU93blByb3BlcnR5OwotICAgICAgICBPd25QdHI8Q29kZUNhY2hlPiBtX2NvZGVDYWNoZTsKLQot
ICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX2ludDhBcnJheURlc2NyaXB0b3I7Ci0gICAg
ICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1faW50MTZBcnJheURlc2NyaXB0b3I7Ci0gICAgICAg
IFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1faW50MzJBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5
cGVkQXJyYXlEZXNjcmlwdG9yIG1fdWludDhBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVk
QXJyYXlEZXNjcmlwdG9yIG1fdWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBU
eXBlZEFycmF5RGVzY3JpcHRvciBtX3VpbnQxNkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlw
ZWRBcnJheURlc2NyaXB0b3IgbV91aW50MzJBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVk
QXJyYXlEZXNjcmlwdG9yIG1fZmxvYXQzMkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRB
cnJheURlc2NyaXB0b3IgbV9mbG9hdDY0QXJyYXlEZXNjcmlwdG9yOwotICAgIH07Ci0KLSNpZiBF
TkFCTEUoR0NfVkFMSURBVElPTikKLSAgICBpbmxpbmUgYm9vbCBKU0dsb2JhbERhdGE6OmlzSW5p
dGlhbGl6aW5nT2JqZWN0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhIW1faW5pdGlh
bGl6aW5nT2JqZWN0Q2xhc3M7Ci0gICAgfQotCi0gICAgaW5saW5lIHZvaWQgSlNHbG9iYWxEYXRh
OjpzZXRJbml0aWFsaXppbmdPYmplY3RDbGFzcyhjb25zdCBDbGFzc0luZm8qIGluaXRpYWxpemlu
Z09iamVjdENsYXNzKQotICAgIHsKLSAgICAgICAgbV9pbml0aWFsaXppbmdPYmplY3RDbGFzcyA9
IGluaXRpYWxpemluZ09iamVjdENsYXNzOwotICAgIH0KLSNlbmRpZgotCi0gICAgaW5saW5lIEhl
YXAqIFdlYWtTZXQ6OmhlYXAoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICZtX2dsb2Jh
bERhdGEtPmhlYXA7Ci0gICAgfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEpT
R2xvYmFsRGF0YV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw4
ICsxMDUsOCBAQCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSBKU0dsb2JhbE9iCiBAZW5k
CiAqLwogCi1KU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFi
bGUqIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQotICAgIDogQmFzZShnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUsIDApCitKU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqIGdsb2JhbE9iamVj
dE1ldGhvZFRhYmxlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCAwKQogICAgICwgbV9tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludChhZG9wdFJlZihuZXcgV2F0Y2hwb2ludFNldChJ
bml0aWFsaXplZFdhdGNoaW5nKSkpCiAgICAgLCBtX2hhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludChh
ZG9wdFJlZihuZXcgV2F0Y2hwb2ludFNldChJbml0aWFsaXplZFdhdGNoaW5nKSkpCiAgICAgLCBt
X3dlYWtSYW5kb20oT3B0aW9uczo6Zm9yY2VXZWFrUmFuZG9tU2VlZCgpID8gT3B0aW9uczo6Zm9y
Y2VkV2Vha1JhbmRvbVNlZWQoKSA6IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5kb21OdW1iZXIo
KSAqIChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgKyAxLjApKSkKQEAgLTEy
MCw3ICsxMjAsNyBAQCBKU0dsb2JhbE9iamVjdDo6fkpTR2xvYmFsT2JqZWN0KCkKICAgICBpZiAo
bV9kZWJ1Z2dlcikKICAgICAgICAgbV9kZWJ1Z2dlci0+ZGV0YWNoKHRoaXMpOwogCi0gICAgaWYg
KExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IGdsb2JhbERhdGEoKS5lbmFibGVkUHJvZmlsZXIo
KSkKKyAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gdm0oKS5lbmFibGVkUHJvZmls
ZXIoKSkKICAgICAgICAgcHJvZmlsZXItPnN0b3BQcm9maWxpbmcodGhpcyk7CiB9CiAKQEAgLTEy
OSwxNiArMTI5LDE2IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmRlc3Ryb3koSlNDZWxsKiBjZWwK
ICAgICBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KGNlbGwpLT5KU0dsb2JhbE9iamVjdDo6
fkpTR2xvYmFsT2JqZWN0KCk7CiB9CiAKLXZvaWQgSlNHbG9iYWxPYmplY3Q6OnNldEdsb2JhbFRo
aXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU09iamVjdCogZ2xvYmFsVGhpcykKK3ZvaWQg
SlNHbG9iYWxPYmplY3Q6OnNldEdsb2JhbFRoaXMoVk0mIHZtLCBKU09iamVjdCogZ2xvYmFsVGhp
cykKIHsgCi0gICAgbV9nbG9iYWxUaGlzLnNldChnbG9iYWxEYXRhLCB0aGlzLCBnbG9iYWxUaGlz
KTsKKyAgICBtX2dsb2JhbFRoaXMuc2V0KHZtLCB0aGlzLCBnbG9iYWxUaGlzKTsKIH0KIAogdm9p
ZCBKU0dsb2JhbE9iamVjdDo6aW5pdChKU09iamVjdCogdGhpc1ZhbHVlKQogewotICAgIEFTU0VS
VChnbG9iYWxEYXRhKCkuYXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwor
ICAgIEFTU0VSVCh2bSgpLmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsK
IAotICAgIHNldEdsb2JhbFRoaXMoZ2xvYmFsRGF0YSgpLCB0aGlzVmFsdWUpOworICAgIHNldEds
b2JhbFRoaXModm0oKSwgdGhpc1ZhbHVlKTsKICAgICBKU0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhl
YygpLT5pbml0KDAsIDAsIHRoaXMsIENhbGxGcmFtZTo6bm9DYWxsZXIoKSwgMCwgMCk7CiAKICAg
ICBtX2RlYnVnZ2VyID0gMDsKQEAgLTE2MSwxNCArMTYxLDE0IEBAIHZvaWQgSlNHbG9iYWxPYmpl
Y3Q6OnB1dERpcmVjdFZpcnR1YWwoSlMKICAgICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KG9iamVjdCk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFw
KHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpKTsK
IAotICAgIGlmIChzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKHRoaXNPYmplY3QsIGV4ZWMt
Pmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcykpCisgICAgaWYg
KHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXModGhpc09iamVjdCwgZXhlYy0+dm0oKSwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcykpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpT
VmFsdWUgdmFsdWVCZWZvcmUgPSB0aGlzT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBwcm9wZXJ0eU5hbWUpOworICAgIEpTVmFsdWUgdmFsdWVCZWZvcmUgPSB0aGlzT2JqZWN0
LT5nZXREaXJlY3QoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKTsKICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdDsKICAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgc2xvdCk7CiAgICAgaWYgKCF2YWx1ZUJlZm9yZSkgewotICAgICAgICBKU1ZhbHVlIHZh
bHVlQWZ0ZXIgPSB0aGlzT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9w
ZXJ0eU5hbWUpOworICAgICAgICBKU1ZhbHVlIHZhbHVlQWZ0ZXIgPSB0aGlzT2JqZWN0LT5nZXRE
aXJlY3QoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgaWYgKHZhbHVlQWZ0ZXIp
CiAgICAgICAgICAgICBKU09iamVjdDo6cHV0RGlyZWN0VmlydHVhbCh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlQWZ0ZXIsIGF0dHJpYnV0ZXMpOwogICAgIH0KQEAgLTE5Nywx
MjYgKzE5NywxMjYgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwog
ewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEpTR2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVjKCk7CiAK
LSAgICBtX2Z1bmN0aW9uUHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEZ1
bmN0aW9uUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgRnVuY3Rpb25Qcm90b3R5cGU6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGpzTnVsbCgpKSkpOyAvLyBU
aGUgcmVhbCBwcm90b3R5cGUgd2lsbCBiZSBzZXQgb25jZSBPYmplY3RQcm90b3R5cGUgaXMgY3Jl
YXRlZC4KLSAgICBtX2Z1bmN0aW9uU3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRo
aXMsIEpTRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKLSAgICBtX2JvdW5kRnVuY3Rpb25TdHJ1Y3R1
cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdl
dCgpKSk7Ci0gICAgbV9uYW1lZEZ1bmN0aW9uU3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERh
dGEoKSwgbV9mdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3Bl
cnR5TmFtZXMtPm5hbWUsIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtLCAwLCBtX2Z1
bmN0aW9uTmFtZU9mZnNldCkpOwotICAgIG1faW50ZXJuYWxGdW5jdGlvblN0cnVjdHVyZS5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7
CisgICAgbV9mdW5jdGlvblByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgRnVuY3Rpb25Q
cm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBGdW5jdGlvblByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIGpzTnVsbCgpKSkpOyAvLyBUaGUgcmVhbCBwcm90b3R5
cGUgd2lsbCBiZSBzZXQgb25jZSBPYmplY3RQcm90b3R5cGUgaXMgY3JlYXRlZC4KKyAgICBtX2Z1
bmN0aW9uU3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0Z1bmN0aW9uOjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOwor
ICAgIG1fYm91bmRGdW5jdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNCb3Vu
ZEZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblBy
b3RvdHlwZS5nZXQoKSkpOworICAgIG1fbmFtZWRGdW5jdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+
dm0oKSwgdGhpcywgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24oZXhlYy0+dm0oKSwg
bV9mdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5uYW1l
LCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSwgMCwgbV9mdW5jdGlvbk5hbWVPZmZz
ZXQpKTsKKyAgICBtX2ludGVybmFsRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRo
aXMsIEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBt
X2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CiAgICAgSlNGdW5jdGlvbiogY2FsbEZ1bmN0aW9u
ID0gMDsKICAgICBKU0Z1bmN0aW9uKiBhcHBseUZ1bmN0aW9uID0gMDsKICAgICBtX2Z1bmN0aW9u
UHJvdG90eXBlLT5hZGRGdW5jdGlvblByb3BlcnRpZXMoZXhlYywgdGhpcywgJmNhbGxGdW5jdGlv
biwgJmFwcGx5RnVuY3Rpb24pOwotICAgIG1fY2FsbEZ1bmN0aW9uLnNldChleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMsIGNhbGxGdW5jdGlvbik7Ci0gICAgbV9hcHBseUZ1bmN0aW9uLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIGFwcGx5RnVuY3Rpb24pOwotICAgIG1fb2JqZWN0UHJvdG90
eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE9iamVjdFByb3RvdHlwZTo6Y3JlYXRl
KGV4ZWMsIHRoaXMsIE9iamVjdFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywganNOdWxsKCkpKSk7CisgICAgbV9jYWxsRnVuY3Rpb24uc2V0KGV4ZWMt
PnZtKCksIHRoaXMsIGNhbGxGdW5jdGlvbik7CisgICAgbV9hcHBseUZ1bmN0aW9uLnNldChleGVj
LT52bSgpLCB0aGlzLCBhcHBseUZ1bmN0aW9uKTsKKyAgICBtX29iamVjdFByb3RvdHlwZS5zZXQo
ZXhlYy0+dm0oKSwgdGhpcywgT2JqZWN0UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgT2Jq
ZWN0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywganNOdWxsKCkp
KSk7CiAgICAgR2V0dGVyU2V0dGVyKiBwcm90b0FjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVh
dGUoZXhlYyk7Ci0gICAgcHJvdG9BY2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEo
KSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIDAsIFN0cmluZygpLCBnbG9iYWxGdW5j
UHJvdG9HZXR0ZXIpKTsKLSAgICBwcm90b0FjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhpcywgMCwgU3RyaW5nKCksIGdsb2Jh
bEZ1bmNQcm90b1NldHRlcikpOworICAgIHByb3RvQWNjZXNzb3ItPnNldEdldHRlcihleGVjLT52
bSgpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhpcywgMCwgU3RyaW5nKCksIGdsb2JhbEZ1
bmNQcm90b0dldHRlcikpOworICAgIHByb3RvQWNjZXNzb3ItPnNldFNldHRlcihleGVjLT52bSgp
LCBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhpcywgMCwgU3RyaW5nKCksIGdsb2JhbEZ1bmNQ
cm90b1NldHRlcikpOwogICAgIG1fb2JqZWN0UHJvdG90eXBlLT5wdXREaXJlY3RBY2Nlc3Nvcihl
eGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvLCBwcm90b0FjY2Vzc29y
LCBBY2Nlc3NvciB8IERvbnRFbnVtKTsKLSAgICBtX2Z1bmN0aW9uUHJvdG90eXBlLT5zdHJ1Y3R1
cmUoKS0+c2V0UHJvdG90eXBlV2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBt
X29iamVjdFByb3RvdHlwZS5nZXQoKSk7CisgICAgbV9mdW5jdGlvblByb3RvdHlwZS0+c3RydWN0
dXJlKCktPnNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIG1fb2JqZWN0
UHJvdG90eXBlLmdldCgpKTsKIAotICAgIG1fbmFtZVNjb3BlU3RydWN0dXJlLnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIEpTTmFtZVNjb3BlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBqc051bGwoKSkpOwotICAgIG1fYWN0aXZhdGlvblN0cnVjdHVyZS5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGpzTnVsbCgpKSk7Ci0gICAgbV9zdHJpY3RFdmFs
QWN0aXZhdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBTdHJpY3RF
dmFsQWN0aXZhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
anNOdWxsKCkpKTsKLSAgICBtX3dpdGhTY29wZVN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBKU1dpdGhTY29wZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywganNOdWxsKCkpKTsKLQotICAgIG1fbnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVy
ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0ZpbmFsT2JqZWN0OjpjcmVhdGVTdHJ1
Y3R1cmUoZ2xvYmFsRGF0YSgpLCB0aGlzLCBqc051bGwoKSwgSlNGaW5hbE9iamVjdDo6ZGVmYXVs
dElubGluZUNhcGFjaXR5KCkpKTsKLQotICAgIG1fY2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZS5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0
KCkpKTsKLSAgICBtX2FyZ3VtZW50c1N0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzLCBBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7Ci0gICAgbV9jYWxsYmFja0NvbnN0cnVjdG9yU3Ry
dWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rv
cjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90
b3R5cGUuZ2V0KCkpKTsKLSAgICBtX2NhbGxiYWNrT2JqZWN0U3RydWN0dXJlLnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIEpTQ2FsbGJhY2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3Rv
dHlwZS5nZXQoKSkpOworICAgIG1fbmFtZVNjb3BlU3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0
aGlzLCBKU05hbWVTY29wZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIGpzTnVs
bCgpKSk7CisgICAgbV9hY3RpdmF0aW9uU3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBK
U0FjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBqc051bGwoKSkp
OworICAgIG1fc3RyaWN0RXZhbEFjdGl2YXRpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRo
aXMsIFN0cmljdEV2YWxBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhp
cywganNOdWxsKCkpKTsKKyAgICBtX3dpdGhTY29wZVN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwg
dGhpcywgSlNXaXRoU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBqc051
bGwoKSkpOworCisgICAgbV9udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlLnNldChleGVjLT52
bSgpLCB0aGlzLCBKU0ZpbmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0oKSwgdGhpcywganNO
dWxsKCksIEpTRmluYWxPYmplY3Q6OmRlZmF1bHRJbmxpbmVDYXBhY2l0eSgpKSk7CisKKyAgICBt
X2NhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQ2FsbGJh
Y2tGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Q
cm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX2FyZ3VtZW50c1N0cnVjdHVyZS5zZXQoZXhlYy0+dm0o
KSwgdGhpcywgQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9v
YmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX2NhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1
cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CisgICAg
bV9jYWxsYmFja09iamVjdFN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNDYWxsYmFj
a09iamVjdDxKU0Rlc3RydWN0aWJsZU9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgp
LCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOwogI2lmIEpTQ19PQkpDX0FQSV9FTkFC
TEVECi0gICAgbV9vYmpjQ2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCBPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOwotICAgIG1f
b2JqY1dyYXBwZXJPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
SlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOworICAgIG1f
b2JqY0NhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIE9iakND
YWxsYmFja0Z1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5j
dGlvblByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fb2JqY1dyYXBwZXJPYmplY3RTdHJ1Y3R1cmUu
c2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0
Pjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdl
dCgpKSk7CiAjZW5kaWYKIAotICAgIG1fYXJyYXlQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBBcnJheVByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQ
cm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV9hcnJheVByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwg
dGhpcywgQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgp
KSkpOwogICAgIAotICAgIG1fb3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5nU2hhcGVb
VW5kZWNpZGVkU2hhcGUgPj4gSW5kZXhpbmdTaGFwZVNoaWZ0XS5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdpdGhVbmRlY2lkZWQpKTsKLSAgICBt
X29yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1NoYXBlW0ludDMyU2hhcGUgPj4gSW5k
ZXhpbmdTaGFwZVNoaWZ0XS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5Ojpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBl
LmdldCgpLCBBcnJheVdpdGhJbnQzMikpOwotICAgIG1fb3JpZ2luYWxBcnJheVN0cnVjdHVyZUZv
ckluZGV4aW5nU2hhcGVbRG91YmxlU2hhcGUgPj4gSW5kZXhpbmdTaGFwZVNoaWZ0XS5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdpdGhEb3VibGUp
KTsKLSAgICBtX29yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1NoYXBlW0NvbnRpZ3Vv
dXNTaGFwZSA+PiBJbmRleGluZ1NoYXBlU2hpZnRdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRo
aXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1f
YXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aENvbnRpZ3VvdXMpKTsKLSAgICBtX29yaWdp
bmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1NoYXBlW0FycmF5U3RvcmFnZVNoYXBlID4+IElu
ZGV4aW5nU2hhcGVTaGlmdF0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlw
ZS5nZXQoKSwgQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7Ci0gICAgbV9vcmlnaW5hbEFycmF5U3Ry
dWN0dXJlRm9ySW5kZXhpbmdTaGFwZVtTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgPj4gSW5kZXhp
bmdTaGFwZVNoaWZ0XS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdl
dCgpLCBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSk7CisgICAgbV9vcmlnaW5hbEFycmF5
U3RydWN0dXJlRm9ySW5kZXhpbmdTaGFwZVtVbmRlY2lkZWRTaGFwZSA+PiBJbmRleGluZ1NoYXBl
U2hpZnRdLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+dm0oKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwgQXJyYXlXaXRoVW5kZWNpZGVk
KSk7CisgICAgbV9vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdTaGFwZVtJbnQzMlNo
YXBlID4+IEluZGV4aW5nU2hhcGVTaGlmdF0uc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQXJyYXk6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgp
LCBBcnJheVdpdGhJbnQzMikpOworICAgIG1fb3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4
aW5nU2hhcGVbRG91YmxlU2hhcGUgPj4gSW5kZXhpbmdTaGFwZVNoaWZ0XS5zZXQoZXhlYy0+dm0o
KSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fYXJy
YXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aERvdWJsZSkpOworICAgIG1fb3JpZ2luYWxBcnJh
eVN0cnVjdHVyZUZvckluZGV4aW5nU2hhcGVbQ29udGlndW91c1NoYXBlID4+IEluZGV4aW5nU2hh
cGVTaGlmdF0uc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT52bSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdpdGhDb250aWd1
b3VzKSk7CisgICAgbV9vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdTaGFwZVtBcnJh
eVN0b3JhZ2VTaGFwZSA+PiBJbmRleGluZ1NoYXBlU2hpZnRdLnNldChleGVjLT52bSgpLCB0aGlz
LCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9hcnJheVByb3Rv
dHlwZS5nZXQoKSwgQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7CisgICAgbV9vcmlnaW5hbEFycmF5
U3RydWN0dXJlRm9ySW5kZXhpbmdTaGFwZVtTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgPj4gSW5k
ZXhpbmdTaGFwZVNoaWZ0XS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0
aFNsb3dQdXRBcnJheVN0b3JhZ2UpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTnVt
YmVyT2ZJbmRleGluZ1NoYXBlczsgKytpKQogICAgICAgICBtX2FycmF5U3RydWN0dXJlRm9ySW5k
ZXhpbmdTaGFwZUR1cmluZ0FsbG9jYXRpb25baV0gPSBtX29yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVG
b3JJbmRleGluZ1NoYXBlW2ldOwogICAgIAotICAgIG1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0
dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIFJlZ0V4cE1hdGNoZXNBcnJheTo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5n
ZXQoKSkpOworICAgIG1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLnNldChleGVjLT52bSgp
LCB0aGlzLCBSZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0
aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpKSk7CiAKLSAgICBtX3N0cmluZ1Byb3RvdHlwZS5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBTdHJpbmdQcm90b3R5cGU6OmNyZWF0ZShleGVj
LCB0aGlzLCBTdHJpbmdQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwotICAgIG1fc3RyaW5nT2JqZWN0
U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIFN0cmluZ09iamVjdDo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9zdHJpbmdQcm90b3R5cGUu
Z2V0KCkpKTsKKyAgICBtX3N0cmluZ1Byb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgU3Ry
aW5nUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgU3RyaW5nUHJvdG90eXBlOjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7Cisg
ICAgbV9zdHJpbmdPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIFN0cmluZ09i
amVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fc3RyaW5nUHJvdG90eXBl
LmdldCgpKSk7CiAKLSAgICBtX2Jvb2xlYW5Qcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywgQm9vbGVhblByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEJvb2xlYW5Qcm90
b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0
UHJvdG90eXBlLmdldCgpKSkpOwotICAgIG1fYm9vbGVhbk9iamVjdFN0cnVjdHVyZS5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBCb29sZWFuT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Jvb2xlYW5Qcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBt
X2Jvb2xlYW5Qcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEJvb2xlYW5Qcm90b3R5cGU6
OmNyZWF0ZShleGVjLCB0aGlzLCBCb29sZWFuUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV9ib29sZWFu
T2JqZWN0U3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBCb29sZWFuT2JqZWN0OjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9ib29sZWFuUHJvdG90eXBlLmdldCgpKSk7
CiAKLSAgICBtX251bWJlclByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBO
dW1iZXJQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBOdW1iZXJQcm90b3R5cGU6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdl
dCgpKSkpOwotICAgIG1fbnVtYmVyT2JqZWN0U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIE51bWJlck9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywgbV9udW1iZXJQcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX251bWJlclByb3RvdHlw
ZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgTnVtYmVyUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhp
cywgTnVtYmVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9v
YmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV9udW1iZXJPYmplY3RTdHJ1Y3R1cmUuc2V0
KGV4ZWMtPnZtKCksIHRoaXMsIE51bWJlck9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZt
KCksIHRoaXMsIG1fbnVtYmVyUHJvdG90eXBlLmdldCgpKSk7CiAKLSAgICBtX2RhdGVQcm90b3R5
cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgRGF0ZVByb3RvdHlwZTo6Y3JlYXRlKGV4
ZWMsIHRoaXMsIERhdGVQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwotICAgIG1fZGF0ZVN0cnVjdHVy
ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBEYXRlSW5zdGFuY2U6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fZGF0ZVByb3RvdHlwZS5nZXQoKSkpOwor
ICAgIG1fZGF0ZVByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgRGF0ZVByb3RvdHlwZTo6
Y3JlYXRlKGV4ZWMsIHRoaXMsIERhdGVQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52
bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX2RhdGVTdHJ1Y3R1
cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIERhdGVJbnN0YW5jZTo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIHRoaXMsIG1fZGF0ZVByb3RvdHlwZS5nZXQoKSkpOwogCi0gICAgUmVnRXhwKiBl
bXB0eVJlZ2V4ID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCAiIiwgTm9GbGFn
cyk7CisgICAgUmVnRXhwKiBlbXB0eVJlZ2V4ID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+dm0oKSwg
IiIsIE5vRmxhZ3MpOwogICAgIAotICAgIG1fcmVnRXhwUHJvdG90eXBlLnNldChleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXMsIFJlZ0V4cFByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIFJlZ0V4
cFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9v
YmplY3RQcm90b3R5cGUuZ2V0KCkpLCBlbXB0eVJlZ2V4KSk7Ci0gICAgbV9yZWdFeHBTdHJ1Y3R1
cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgUmVnRXhwT2JqZWN0OjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX3JlZ0V4cFByb3RvdHlwZS5nZXQoKSkp
OworICAgIG1fcmVnRXhwUHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBSZWdFeHBQcm90
b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBSZWdFeHBQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSksIGVtcHR5UmVnZXgp
KTsKKyAgICBtX3JlZ0V4cFN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgUmVnRXhwT2Jq
ZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9yZWdFeHBQcm90b3R5cGUu
Z2V0KCkpKTsKIAotICAgIG1fZXJyb3JQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgRXJyb3JQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBFcnJvclByb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5
cGUuZ2V0KCkpKSk7Ci0gICAgbV9lcnJvclN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBFcnJvckluc3RhbmNlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBtX2Vycm9yUHJvdG90eXBlLmdldCgpKSk7CisgICAgbV9lcnJvclByb3RvdHlwZS5z
ZXQoZXhlYy0+dm0oKSwgdGhpcywgRXJyb3JQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBF
cnJvclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0
UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fZXJyb3JTdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCks
IHRoaXMsIEVycm9ySW5zdGFuY2U6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBt
X2Vycm9yUHJvdG90eXBlLmdldCgpKSk7CiAKICAgICAvLyBDb25zdHJ1Y3RvcnMKIAotICAgIEpT
Q2VsbCogb2JqZWN0Q29uc3RydWN0b3IgPSBPYmplY3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMs
IHRoaXMsIE9iamVjdENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9vYmplY3RQcm90b3R5cGUu
Z2V0KCkpOwotICAgIEpTQ2VsbCogZnVuY3Rpb25Db25zdHJ1Y3RvciA9IEZ1bmN0aW9uQ29uc3Ry
dWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBGdW5jdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgp
KSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSk7Ci0gICAgSlNDZWxsKiBhcnJheUNvbnN0cnVj
dG9yID0gQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEFycmF5Q29uc3RydWN0
b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fZnVuY3Rpb25Q
cm90b3R5cGUuZ2V0KCkpLCBtX2FycmF5UHJvdG90eXBlLmdldCgpKTsKLSAgICBKU0NlbGwqIHN0
cmluZ0NvbnN0cnVjdG9yID0gU3RyaW5nQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBT
dHJpbmdDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fc3RyaW5nUHJvdG90eXBlLmdldCgpKTsK
LSAgICBKU0NlbGwqIGJvb2xlYW5Db25zdHJ1Y3RvciA9IEJvb2xlYW5Db25zdHJ1Y3Rvcjo6Y3Jl
YXRlKGV4ZWMsIHRoaXMsIEJvb2xlYW5Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fYm9vbGVh
blByb3RvdHlwZS5nZXQoKSk7Ci0gICAgSlNDZWxsKiBudW1iZXJDb25zdHJ1Y3RvciA9IE51bWJl
ckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgTnVtYmVyQ29uc3RydWN0b3I6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUu
Z2V0KCkpLCBtX251bWJlclByb3RvdHlwZS5nZXQoKSk7Ci0gICAgSlNDZWxsKiBkYXRlQ29uc3Ry
dWN0b3IgPSBEYXRlQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBEYXRlQ29uc3RydWN0
b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fZnVuY3Rpb25Q
cm90b3R5cGUuZ2V0KCkpLCBtX2RhdGVQcm90b3R5cGUuZ2V0KCkpOwotCi0gICAgbV9yZWdFeHBD
b25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBSZWdFeHBDb25zdHJ1Y3Rv
cjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIFJlZ0V4cENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9y
ZWdFeHBQcm90b3R5cGUuZ2V0KCkpKTsKLQotICAgIG1fZXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhp
cywgRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fZXJyb3JQcm90b3R5cGUuZ2V0KCkp
KTsKLQotICAgIFN0cnVjdHVyZSogbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUgPSBOYXRp
dmVFcnJvclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgbV9lcnJvclByb3RvdHlwZS5nZXQoKSk7Ci0gICAgU3RydWN0dXJlKiBuYXRpdmVFcnJvclN0
cnVjdHVyZSA9IE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpOwotICAgIG1fZXZh
bEVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgTmF0aXZlRXJy
b3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBu
YXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgQVNDSUlMaXRlcmFsKCJFdmFsRXJyb3IiKSkp
OwotICAgIG1fcmFuZ2VFcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRo
aXMsIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBuYXRpdmVFcnJv
clN0cnVjdHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsIEFTQ0lJTGl0ZXJhbCgi
UmFuZ2VFcnJvciIpKSk7Ci0gICAgbV9yZWZlcmVuY2VFcnJvckNvbnN0cnVjdG9yLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZShleGVj
LCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1
cmUsIEFTQ0lJTGl0ZXJhbCgiUmVmZXJlbmNlRXJyb3IiKSkpOwotICAgIG1fc3ludGF4RXJyb3JD
b25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOYXRpdmVFcnJvckNvbnN0
cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVy
cm9yUHJvdG90eXBlU3RydWN0dXJlLCBBU0NJSUxpdGVyYWwoIlN5bnRheEVycm9yIikpKTsKLSAg
ICBtX3R5cGVFcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE5h
dGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVj
dHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsIEFTQ0lJTGl0ZXJhbCgiVHlwZUVy
cm9yIikpKTsKLSAgICBtX1VSSUVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2
ZUVycm9yU3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgQVNDSUlMaXRl
cmFsKCJVUklFcnJvciIpKSk7Ci0KLSAgICBtX29iamVjdFByb3RvdHlwZS0+cHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
Y29uc3RydWN0b3IsIG9iamVjdENvbnN0cnVjdG9yLCBEb250RW51bSk7Ci0gICAgbV9mdW5jdGlv
blByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgp
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGZ1bmN0aW9uQ29uc3RydWN0b3Is
IERvbnRFbnVtKTsKLSAgICBtX2FycmF5UHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rv
ciwgYXJyYXlDb25zdHJ1Y3RvciwgRG9udEVudW0pOwotICAgIG1fYm9vbGVhblByb3RvdHlwZS0+
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGJvb2xlYW5Db25zdHJ1Y3RvciwgRG9udEVudW0pOwot
ICAgIG1fc3RyaW5nUHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5n
bG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvciwgc3RyaW5nQ29u
c3RydWN0b3IsIERvbnRFbnVtKTsKLSAgICBtX251bWJlclByb3RvdHlwZS0+cHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
Y29uc3RydWN0b3IsIG51bWJlckNvbnN0cnVjdG9yLCBEb250RW51bSk7Ci0gICAgbV9kYXRlUHJv
dG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgZGF0ZUNvbnN0cnVjdG9yLCBEb250RW51
bSk7Ci0gICAgbV9yZWdFeHBQcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4
ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBtX3Jl
Z0V4cENvbnN0cnVjdG9yLmdldCgpLCBEb250RW51bSk7Ci0gICAgbV9lcnJvclByb3RvdHlwZS0+
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIG1fZXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVu
dW0pOwotCi0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgp
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuT2JqZWN0LCBvYmplY3RDb25zdHJ1Y3RvciwgRG9udEVu
dW0pOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwg
SWRlbnRpZmllcihleGVjLCAiRnVuY3Rpb24iKSwgZnVuY3Rpb25Db25zdHJ1Y3RvciwgRG9udEVu
dW0pOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLkFycmF5LCBhcnJheUNvbnN0cnVjdG9yLCBEb250RW51bSk7
Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVu
dGlmaWVyKGV4ZWMsICJCb29sZWFuIiksIGJvb2xlYW5Db25zdHJ1Y3RvciwgRG9udEVudW0pOwot
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRp
ZmllcihleGVjLCAiU3RyaW5nIiksIHN0cmluZ0NvbnN0cnVjdG9yLCBEb250RW51bSk7Ci0gICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVy
KGV4ZWMsICJOdW1iZXIiKSwgbnVtYmVyQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKLSAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhl
YywgIkRhdGUiKSwgZGF0ZUNvbnN0cnVjdG9yLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJSZWdF
eHAiKSwgbV9yZWdFeHBDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAi
RXJyb3IiKSwgbV9lcnJvckNvbnN0cnVjdG9yLmdldCgpLCBEb250RW51bSk7Ci0gICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMs
ICJFdmFsRXJyb3IiKSwgbV9ldmFsRXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOwot
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRp
ZmllcihleGVjLCAiUmFuZ2VFcnJvciIpLCBtX3JhbmdlRXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwg
RG9udEVudW0pOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERh
dGEoKSwgSWRlbnRpZmllcihleGVjLCAiUmVmZXJlbmNlRXJyb3IiKSwgbV9yZWZlcmVuY2VFcnJv
ckNvbnN0cnVjdG9yLmdldCgpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJTeW50YXhFcnJvciIp
LCBtX3N5bnRheEVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsKLSAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywg
IlR5cGVFcnJvciIpLCBtX3R5cGVFcnJvckNvbnN0cnVjdG9yLmdldCgpLCBEb250RW51bSk7Ci0g
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlm
aWVyKGV4ZWMsICJVUklFcnJvciIpLCBtX1VSSUVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRF
bnVtKTsKKyAgICBKU0NlbGwqIG9iamVjdENvbnN0cnVjdG9yID0gT2JqZWN0Q29uc3RydWN0b3I6
OmNyZWF0ZShleGVjLCB0aGlzLCBPYmplY3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX29iamVjdFByb3Rv
dHlwZS5nZXQoKSk7CisgICAgSlNDZWxsKiBmdW5jdGlvbkNvbnN0cnVjdG9yID0gRnVuY3Rpb25D
b25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEZ1bmN0aW9uQ29uc3RydWN0b3I6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwg
bV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSk7CisgICAgSlNDZWxsKiBhcnJheUNvbnN0cnVjdG9y
ID0gQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEFycmF5Q29uc3RydWN0b3I6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdl
dCgpKSwgbV9hcnJheVByb3RvdHlwZS5nZXQoKSk7CisgICAgSlNDZWxsKiBzdHJpbmdDb25zdHJ1
Y3RvciA9IFN0cmluZ0NvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgU3RyaW5nQ29uc3Ry
dWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90
eXBlLmdldCgpKSwgbV9zdHJpbmdQcm90b3R5cGUuZ2V0KCkpOworICAgIEpTQ2VsbCogYm9vbGVh
bkNvbnN0cnVjdG9yID0gQm9vbGVhbkNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgQm9v
bGVhbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5j
dGlvblByb3RvdHlwZS5nZXQoKSksIG1fYm9vbGVhblByb3RvdHlwZS5nZXQoKSk7CisgICAgSlND
ZWxsKiBudW1iZXJDb25zdHJ1Y3RvciA9IE51bWJlckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywg
dGhpcywgTnVtYmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlz
LCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9udW1iZXJQcm90b3R5cGUuZ2V0KCkpOwor
ICAgIEpTQ2VsbCogZGF0ZUNvbnN0cnVjdG9yID0gRGF0ZUNvbnN0cnVjdG9yOjpjcmVhdGUoZXhl
YywgdGhpcywgRGF0ZUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhp
cywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fZGF0ZVByb3RvdHlwZS5nZXQoKSk7CisK
KyAgICBtX3JlZ0V4cENvbnN0cnVjdG9yLnNldChleGVjLT52bSgpLCB0aGlzLCBSZWdFeHBDb25z
dHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIFJlZ0V4cENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fcmVn
RXhwUHJvdG90eXBlLmdldCgpKSk7CisKKyAgICBtX2Vycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMt
PnZtKCksIHRoaXMsIEVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBFcnJvckNv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblBy
b3RvdHlwZS5nZXQoKSksIG1fZXJyb3JQcm90b3R5cGUuZ2V0KCkpKTsKKworICAgIFN0cnVjdHVy
ZSogbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUgPSBOYXRpdmVFcnJvclByb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZXJyb3JQcm90b3R5cGUuZ2V0KCkp
OworICAgIFN0cnVjdHVyZSogbmF0aXZlRXJyb3JTdHJ1Y3R1cmUgPSBOYXRpdmVFcnJvckNvbnN0
cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3Rv
dHlwZS5nZXQoKSk7CisgICAgbV9ldmFsRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+dm0oKSwg
dGhpcywgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVy
cm9yU3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgQVNDSUlMaXRlcmFs
KCJFdmFsRXJyb3IiKSkpOworICAgIG1fcmFuZ2VFcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT52
bSgpLCB0aGlzLCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgbmF0
aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCBBU0NJSUxp
dGVyYWwoIlJhbmdlRXJyb3IiKSkpOworICAgIG1fcmVmZXJlbmNlRXJyb3JDb25zdHJ1Y3Rvci5z
ZXQoZXhlYy0+dm0oKSwgdGhpcywgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMs
IHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVy
ZSwgQVNDSUlMaXRlcmFsKCJSZWZlcmVuY2VFcnJvciIpKSk7CisgICAgbV9zeW50YXhFcnJvckNv
bnN0cnVjdG9yLnNldChleGVjLT52bSgpLCB0aGlzLCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpj
cmVhdGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90
eXBlU3RydWN0dXJlLCBBU0NJSUxpdGVyYWwoIlN5bnRheEVycm9yIikpKTsKKyAgICBtX3R5cGVF
cnJvckNvbnN0cnVjdG9yLnNldChleGVjLT52bSgpLCB0aGlzLCBOYXRpdmVFcnJvckNvbnN0cnVj
dG9yOjpjcmVhdGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9y
UHJvdG90eXBlU3RydWN0dXJlLCBBU0NJSUxpdGVyYWwoIlR5cGVFcnJvciIpKSk7CisgICAgbV9V
UklFcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT52bSgpLCB0aGlzLCBOYXRpdmVFcnJvckNvbnN0
cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVy
cm9yUHJvdG90eXBlU3RydWN0dXJlLCBBU0NJSUxpdGVyYWwoIlVSSUVycm9yIikpKTsKKworICAg
IG1fb2JqZWN0UHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgp
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIG9iamVjdENvbnN0cnVjdG9yLCBE
b250RW51bSk7CisgICAgbV9mdW5jdGlvblByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBmdW5j
dGlvbkNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgbV9hcnJheVByb3RvdHlwZS0+cHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNv
bnN0cnVjdG9yLCBhcnJheUNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgbV9ib29sZWFuUHJv
dG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGJvb2xlYW5Db25zdHJ1Y3RvciwgRG9udEVudW0pOwor
ICAgIG1fc3RyaW5nUHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52
bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHN0cmluZ0NvbnN0cnVjdG9y
LCBEb250RW51bSk7CisgICAgbV9udW1iZXJQcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgbnVt
YmVyQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICBtX2RhdGVQcm90b3R5cGUtPnB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25z
dHJ1Y3RvciwgZGF0ZUNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgbV9yZWdFeHBQcm90b3R5
cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5jb25zdHJ1Y3RvciwgbV9yZWdFeHBDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0p
OworICAgIG1fZXJyb3JQcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMt
PnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgbV9lcnJvckNvbnN0cnVj
dG9yLmdldCgpLCBEb250RW51bSk7CisKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuT2JqZWN0LCBvYmplY3RDb25zdHJ1Y3Rv
ciwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCks
IElkZW50aWZpZXIoZXhlYywgIkZ1bmN0aW9uIiksIGZ1bmN0aW9uQ29uc3RydWN0b3IsIERvbnRF
bnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuQXJyYXksIGFycmF5Q29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJC
b29sZWFuIiksIGJvb2xlYW5Db25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgIlN0cmluZyIpLCBz
dHJpbmdDb25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgIk51bWJlciIpLCBudW1iZXJDb25zdHJ1
Y3RvciwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZt
KCksIElkZW50aWZpZXIoZXhlYywgIkRhdGUiKSwgZGF0ZUNvbnN0cnVjdG9yLCBEb250RW51bSk7
CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmllcihl
eGVjLCAiUmVnRXhwIiksIG1fcmVnRXhwQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsKKyAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMs
ICJFcnJvciIpLCBtX2Vycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsKKyAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJFdmFs
RXJyb3IiKSwgbV9ldmFsRXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOworICAgIHB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgIlJh
bmdlRXJyb3IiKSwgbV9yYW5nZUVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsKKyAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMs
ICJSZWZlcmVuY2VFcnJvciIpLCBtX3JlZmVyZW5jZUVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERv
bnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVu
dGlmaWVyKGV4ZWMsICJTeW50YXhFcnJvciIpLCBtX3N5bnRheEVycm9yQ29uc3RydWN0b3IuZ2V0
KCksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgp
LCBJZGVudGlmaWVyKGV4ZWMsICJUeXBlRXJyb3IiKSwgbV90eXBlRXJyb3JDb25zdHJ1Y3Rvci5n
ZXQoKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZt
KCksIElkZW50aWZpZXIoZXhlYywgIlVSSUVycm9yIiksIG1fVVJJRXJyb3JDb25zdHJ1Y3Rvci5n
ZXQoKSwgRG9udEVudW0pOwogCi0gICAgbV9ldmFsRnVuY3Rpb24uc2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIDEsIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5ldmFsLnN0cmluZygpLCBnbG9iYWxGdW5jRXZhbCkpOwotICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmV2YWwsIG1fZXZhbEZ1bmN0aW9uLmdldCgpLCBEb250RW51bSk7CisgICAgbV9ldmFsRnVu
Y3Rpb24uc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCB0aGlz
LCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZXZhbC5zdHJpbmcoKSwgZ2xvYmFsRnVuY0V2YWwp
KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuZXZhbCwgbV9ldmFsRnVuY3Rpb24uZ2V0KCksIERvbnRFbnVtKTsKIAotICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmll
cihleGVjLCAiSlNPTiIpLCBKU09OT2JqZWN0OjpjcmVhdGUoZXhlYywgdGhpcywgSlNPTk9iamVj
dDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90
b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiTWF0aCIpLCBNYXRoT2JqZWN0
OjpjcmVhdGUoZXhlYywgdGhpcywgTWF0aE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0pOwor
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhl
YywgIkpTT04iKSwgSlNPTk9iamVjdDo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTT05PYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkp
LCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwg
SWRlbnRpZmllcihleGVjLCAiTWF0aCIpLCBNYXRoT2JqZWN0OjpjcmVhdGUoZXhlYywgdGhpcywg
TWF0aE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJv
dG90eXBlLmdldCgpKSksIERvbnRFbnVtKTsKIAogICAgIEdsb2JhbFByb3BlcnR5SW5mbyBzdGF0
aWNHbG9iYWxzW10gPSB7CiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhJZGVudGlmaWVyKGV4
ZWMsICJOYU4iKSwganNOYU4oKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLApA
QCAtMzMxLDE1ICszMzEsMTUgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBw
cm90bwogICAgIG1fc3BlY2lhbFBvaW50ZXJzW1NwZWNpYWw6OkFycmF5Q29uc3RydWN0b3JdID0g
YXJyYXlDb25zdHJ1Y3RvcjsKIAogICAgIGlmIChtX2V4cGVyaW1lbnRzRW5hYmxlZCkgewotICAg
ICAgICBOYW1lUHJvdG90eXBlKiBwcml2YXRlTmFtZVByb3RvdHlwZSA9IE5hbWVQcm90b3R5cGU6
OmNyZWF0ZShleGVjLCBOYW1lUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOwotICAgICAgICBtX3ByaXZh
dGVOYW1lU3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE5hbWVJbnN0YW5j
ZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgcHJpdmF0ZU5hbWVQ
cm90b3R5cGUpKTsKKyAgICAgICAgTmFtZVByb3RvdHlwZSogcHJpdmF0ZU5hbWVQcm90b3R5cGUg
PSBOYW1lUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgTmFtZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CisgICAgICAg
IG1fcHJpdmF0ZU5hbWVTdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIE5hbWVJbnN0YW5j
ZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIHByaXZhdGVOYW1lUHJvdG90eXBl
KSk7CiAKLSAgICAgICAgSlNDZWxsKiBwcml2YXRlTmFtZUNvbnN0cnVjdG9yID0gTmFtZUNvbnN0
cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgTmFtZUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwg
cHJpdmF0ZU5hbWVQcm90b3R5cGUpOwotICAgICAgICBwcml2YXRlTmFtZVByb3RvdHlwZS0+cHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuY29uc3RydWN0b3IsIHByaXZhdGVOYW1lQ29uc3RydWN0b3IsIERvbnRFbnVtKTsK
LSAgICAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJ
ZGVudGlmaWVyKGV4ZWMsICJOYW1lIiksIHByaXZhdGVOYW1lQ29uc3RydWN0b3IsIERvbnRFbnVt
KTsKKyAgICAgICAgSlNDZWxsKiBwcml2YXRlTmFtZUNvbnN0cnVjdG9yID0gTmFtZUNvbnN0cnVj
dG9yOjpjcmVhdGUoZXhlYywgdGhpcywgTmFtZUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIHByaXZhdGVOYW1l
UHJvdG90eXBlKTsKKyAgICAgICAgcHJpdmF0ZU5hbWVQcm90b3R5cGUtPnB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rv
ciwgcHJpdmF0ZU5hbWVDb25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgICAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJOYW1lIiksIHBy
aXZhdGVOYW1lQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKICAgICB9CiAKLSAgICByZXNldFByb3Rv
dHlwZShleGVjLT5nbG9iYWxEYXRhKCksIHByb3RvdHlwZSk7CisgICAgcmVzZXRQcm90b3R5cGUo
ZXhlYy0+dm0oKSwgcHJvdG90eXBlKTsKIH0KIAogLy8gUHJpdmF0ZSBuYW1lc3BhY2UgZm9yIGhl
bHBlcnMgZm9yIEpTR2xvYmFsT2JqZWN0OjpoYXZlQUJhZFRpbWUoKQpAQCAtNDA1LDkgKzQwNSw5
IEBAIHZvaWQgT2JqZWN0c1dpdGhCcm9rZW5JbmRleGluZ0ZpbmRlcjo6b3AKIAogfSAvLyBlbmQg
cHJpdmF0ZSBuYW1lc3BhY2UgZm9yIGhlbHBlcnMgZm9yIEpTR2xvYmFsT2JqZWN0OjpoYXZlQUJh
ZFRpbWUoKQogCi12b2lkIEpTR2xvYmFsT2JqZWN0OjpoYXZlQUJhZFRpbWUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQordm9pZCBKU0dsb2JhbE9iamVjdDo6aGF2ZUFCYWRUaW1lKFZNJiB2bSkK
IHsKLSAgICBBU1NFUlQoJmdsb2JhbERhdGEgPT0gJnRoaXMtPmdsb2JhbERhdGEoKSk7CisgICAg
QVNTRVJUKCZ2bSA9PSAmdGhpcy0+dm0oKSk7CiAgICAgCiAgICAgaWYgKGlzSGF2aW5nQUJhZFRp
bWUoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDIxLDE4ICs0MjEsMTggQEAgdm9pZCBKU0dsb2Jh
bE9iamVjdDo6aGF2ZUFCYWRUaW1lKEpTR2xvYgogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFsbCBK
U0FycmF5IGFsbG9jYXRpb25zIHRoYXQgbG9hZCB0aGUgYXBwcm9wcmlhdGUgc3RydWN0dXJlIGZy
b20KICAgICAvLyB0aGlzIG9iamVjdCBub3cgbG9hZCBhIHN0cnVjdHVyZSB0aGF0IHVzZXMgU2xv
d1B1dC4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTnVtYmVyT2ZJbmRleGluZ1NoYXBl
czsgKytpKQotICAgICAgICBtX2FycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdTaGFwZUR1cmluZ0Fs
bG9jYXRpb25baV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIG9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVG
b3JJbmRleGluZ1R5cGUoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkpOworICAgICAgICBt
X2FycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdTaGFwZUR1cmluZ0FsbG9jYXRpb25baV0uc2V0KHZt
LCB0aGlzLCBvcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlKEFycmF5V2l0aFNs
b3dQdXRBcnJheVN0b3JhZ2UpKTsKICAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbGwgb2Jq
ZWN0cyB0aGF0IGhhdmUgaW5kZXhlZCBzdG9yYWdlIHN3aXRjaCB0byB0aGUgc2xvdyBraW5kIG9m
CiAgICAgLy8gaW5kZXhlZCBzdG9yYWdlLgogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGZvdW5k
T2JqZWN0czsgLy8gVXNlIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGJlY2F1c2Ugc3dpdGNoVG9TbG93
UHV0QXJyYXlTdG9yYWdlKCkgbWF5IEdDLgogICAgIE9iamVjdHNXaXRoQnJva2VuSW5kZXhpbmdG
aW5kZXIgZmluZGVyKGZvdW5kT2JqZWN0cywgdGhpcyk7Ci0gICAgZ2xvYmFsRGF0YS5oZWFwLm9i
amVjdFNwYWNlKCkuZm9yRWFjaExpdmVDZWxsKGZpbmRlcik7CisgICAgdm0uaGVhcC5vYmplY3RT
cGFjZSgpLmZvckVhY2hMaXZlQ2VsbChmaW5kZXIpOwogICAgIHdoaWxlICghZm91bmRPYmplY3Rz
LmlzRW1wdHkoKSkgewogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoZm91bmRP
YmplY3RzLmxhc3QoKSk7CiAgICAgICAgIGZvdW5kT2JqZWN0cy5yZW1vdmVMYXN0KCk7CiAgICAg
ICAgIEFTU0VSVChoYXNCcm9rZW5JbmRleGluZyhvYmplY3QpKTsKLSAgICAgICAgb2JqZWN0LT5z
d2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAgICAgIG9iamVjdC0+
c3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKHZtKTsKICAgICB9CiB9CiAKQEAgLTQ0OCwyMCAr
NDQ4LDIwIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZVRocm93VHlwZUVycm8KIHsKICAg
ICBKU0Z1bmN0aW9uKiB0aHJvd2VyID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIDAs
IFN0cmluZygpLCBnbG9iYWxGdW5jVGhyb3dUeXBlRXJyb3IpOwogICAgIEdldHRlclNldHRlciog
Z2V0dGVyU2V0dGVyID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7Ci0gICAgZ2V0dGVyU2V0
dGVyLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aHJvd2VyKTsKLSAgICBnZXR0ZXJT
ZXR0ZXItPnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIHRocm93ZXIpOwotICAgIG1fdGhy
b3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZ2V0
dGVyU2V0dGVyKTsKKyAgICBnZXR0ZXJTZXR0ZXItPnNldEdldHRlcihleGVjLT52bSgpLCB0aHJv
d2VyKTsKKyAgICBnZXR0ZXJTZXR0ZXItPnNldFNldHRlcihleGVjLT52bSgpLCB0aHJvd2VyKTsK
KyAgICBtX3Rocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyLnNldChleGVjLT52bSgpLCB0aGlzLCBn
ZXR0ZXJTZXR0ZXIpOwogfQogCiAvLyBTZXQgcHJvdG90eXBlLCBhbmQgYWxzbyBpbnNlcnQgdGhl
IG9iamVjdCBwcm90b3R5cGUgYXQgdGhlIGVuZCBvZiB0aGUgY2hhaW4uCi12b2lkIEpTR2xvYmFs
T2JqZWN0OjpyZXNldFByb3RvdHlwZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUg
cHJvdG90eXBlKQordm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXRQcm90b3R5cGUoVk0mIHZtLCBK
U1ZhbHVlIHByb3RvdHlwZSkKIHsKLSAgICBzZXRQcm90b3R5cGUoZ2xvYmFsRGF0YSwgcHJvdG90
eXBlKTsKKyAgICBzZXRQcm90b3R5cGUodm0sIHByb3RvdHlwZSk7CiAKICAgICBKU09iamVjdCog
b2xkTGFzdEluUHJvdG90eXBlQ2hhaW4gPSBsYXN0SW5Qcm90b3R5cGVDaGFpbih0aGlzKTsKICAg
ICBKU09iamVjdCogb2JqZWN0UHJvdG90eXBlID0gbV9vYmplY3RQcm90b3R5cGUuZ2V0KCk7CiAg
ICAgaWYgKG9sZExhc3RJblByb3RvdHlwZUNoYWluICE9IG9iamVjdFByb3RvdHlwZSkKLSAgICAg
ICAgb2xkTGFzdEluUHJvdG90eXBlQ2hhaW4tPnNldFByb3RvdHlwZShnbG9iYWxEYXRhLCBvYmpl
Y3RQcm90b3R5cGUpOworICAgICAgICBvbGRMYXN0SW5Qcm90b3R5cGVDaGFpbi0+c2V0UHJvdG90
eXBlKHZtLCBvYmplY3RQcm90b3R5cGUpOwogfQogCiB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC01NTAsNyAr
NTUwLDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6YWRkU3RhdGljR2xvYmFscyhHbAogICAgICAg
ICBpbnQgaW5kZXggPSBzeW1ib2xUYWJsZSgpLT5zaXplKCk7CiAgICAgICAgIFN5bWJvbFRhYmxl
RW50cnkgbmV3RW50cnkoaW5kZXgsIGdsb2JhbC5hdHRyaWJ1dGVzKTsKICAgICAgICAgc3ltYm9s
VGFibGUoKS0+YWRkKGdsb2JhbC5pZGVudGlmaWVyLmltcGwoKSwgbmV3RW50cnkpOwotICAgICAg
ICByZWdpc3RlckF0KGluZGV4KS5zZXQoZ2xvYmFsRGF0YSgpLCB0aGlzLCBnbG9iYWwudmFsdWUp
OworICAgICAgICByZWdpc3RlckF0KGluZGV4KS5zZXQodm0oKSwgdGhpcywgZ2xvYmFsLnZhbHVl
KTsKICAgICB9CiB9CiAKQEAgLTU3NSwyNCArNTc1LDI0IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6
OmNsZWFyUmFyZURhdGEoSlNDZWwKICAgICBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihjZWxsKS0+
bV9yYXJlRGF0YS5jbGVhcigpOwogfQogCi1EeW5hbWljR2xvYmFsT2JqZWN0U2NvcGU6OkR5bmFt
aWNHbG9iYWxPYmplY3RTY29wZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2Jq
ZWN0KiBkeW5hbWljR2xvYmFsT2JqZWN0KQotICAgIDogbV9keW5hbWljR2xvYmFsT2JqZWN0U2xv
dChnbG9iYWxEYXRhLmR5bmFtaWNHbG9iYWxPYmplY3QpCitEeW5hbWljR2xvYmFsT2JqZWN0U2Nv
cGU6OkR5bmFtaWNHbG9iYWxPYmplY3RTY29wZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBkeW5h
bWljR2xvYmFsT2JqZWN0KQorICAgIDogbV9keW5hbWljR2xvYmFsT2JqZWN0U2xvdCh2bS5keW5h
bWljR2xvYmFsT2JqZWN0KQogICAgICwgbV9zYXZlZER5bmFtaWNHbG9iYWxPYmplY3QobV9keW5h
bWljR2xvYmFsT2JqZWN0U2xvdCkKIHsKICAgICBpZiAoIW1fZHluYW1pY0dsb2JhbE9iamVjdFNs
b3QpIHsKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogICAgICAgICBpZiAoRXhlY3V0YWJsZUFsbG9j
YXRvcjo6dW5kZXJNZW1vcnlQcmVzc3VyZSgpKQotICAgICAgICAgICAgZ2xvYmFsRGF0YS5oZWFw
LmRlbGV0ZUFsbENvbXBpbGVkQ29kZSgpOworICAgICAgICAgICAgdm0uaGVhcC5kZWxldGVBbGxD
b21waWxlZENvZGUoKTsKICNlbmRpZgogCiAgICAgICAgIG1fZHluYW1pY0dsb2JhbE9iamVjdFNs
b3QgPSBkeW5hbWljR2xvYmFsT2JqZWN0OwogCiAgICAgICAgIC8vIFJlc2V0IHRoZSBkYXRlIGNh
Y2hlIGJldHdlZW4gSlMgaW52b2NhdGlvbnMgdG8gZm9yY2UgdGhlIFZNCiAgICAgICAgIC8vIHRv
IG9ic2VydmUgdGltZSB6b25lIGNoYW5nZXMuCi0gICAgICAgIGdsb2JhbERhdGEucmVzZXREYXRl
Q2FjaGUoKTsKKyAgICAgICAgdm0ucmVzZXREYXRlQ2FjaGUoKTsKICAgICB9CiAgICAgLy8gQ2xl
YXIgdGhlIGV4Y2VwdGlvbiBzdGFjayBiZXR3ZWVuIGVudHJpZXMKLSAgICBnbG9iYWxEYXRhLmV4
Y2VwdGlvblN0YWNrID0gUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+KCk7CisgICAgdm0uZXhj
ZXB0aW9uU3RhY2sgPSBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4oKTsKIH0KIAogdm9pZCBz
bG93VmFsaWRhdGVDZWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBAIC02MDcsNyAr
NjA3LDcgQEAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBKU0dsb2JhbE9iamVjdAogICAgIEpT
UGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzID0gZXhlY3V0YWJsZS0+aXNTdHJpY3RNb2RlKCkg
PyBKU1BhcnNlU3RyaWN0IDogSlNQYXJzZU5vcm1hbDsKICAgICBEZWJ1Z2dlck1vZGUgZGVidWdn
ZXJNb2RlID0gaGFzRGVidWdnZXIoKSA/IERlYnVnZ2VyT24gOiBEZWJ1Z2dlck9mZjsKICAgICBQ
cm9maWxlck1vZGUgcHJvZmlsZXJNb2RlID0gaGFzUHJvZmlsZXIoKSA/IFByb2ZpbGVyT24gOiBQ
cm9maWxlck9mZjsKLSAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZSA9
IGdsb2JhbERhdGEoKS5jb2RlQ2FjaGUoKS0+Z2V0UHJvZ3JhbUNvZGVCbG9jayhnbG9iYWxEYXRh
KCksIGV4ZWN1dGFibGUsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLCBzdHJpY3RuZXNzLCBkZWJ1Z2dl
ck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3IpOworICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
ayogdW5saW5rZWRDb2RlID0gdm0oKS5jb2RlQ2FjaGUoKS0+Z2V0UHJvZ3JhbUNvZGVCbG9jayh2
bSgpLCBleGVjdXRhYmxlLCBleGVjdXRhYmxlLT5zb3VyY2UoKSwgc3RyaWN0bmVzcywgZGVidWdn
ZXJNb2RlLCBwcm9maWxlck1vZGUsIGVycm9yKTsKIAogICAgIGlmIChoYXNEZWJ1Z2dlcigpKQog
ICAgICAgICBkZWJ1Z2dlcigpLT5zb3VyY2VQYXJzZWQoY2FsbEZyYW1lLCBleGVjdXRhYmxlLT5z
b3VyY2UoKS5wcm92aWRlcigpLCBlcnJvci5tX2xpbmUsIGVycm9yLm1fbWVzc2FnZSk7CkBAIC02
MjYsNyArNjI2LDcgQEAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBKU0dsb2JhbE9iamVjdDo6Ywog
ICAgIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzID0gZXhlY3V0YWJsZS0+aXNTdHJpY3RN
b2RlKCkgPyBKU1BhcnNlU3RyaWN0IDogSlNQYXJzZU5vcm1hbDsKICAgICBEZWJ1Z2dlck1vZGUg
ZGVidWdnZXJNb2RlID0gaGFzRGVidWdnZXIoKSA/IERlYnVnZ2VyT24gOiBEZWJ1Z2dlck9mZjsK
ICAgICBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlID0gaGFzUHJvZmlsZXIoKSA/IFByb2ZpbGVy
T24gOiBQcm9maWxlck9mZjsKLSAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkQ29k
ZSA9IGdsb2JhbERhdGEoKS5jb2RlQ2FjaGUoKS0+Z2V0RXZhbENvZGVCbG9jayhnbG9iYWxEYXRh
KCksIHNjb3BlLCBleGVjdXRhYmxlLCBleGVjdXRhYmxlLT5zb3VyY2UoKSwgc3RyaWN0bmVzcywg
ZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUsIGVycm9yKTsKKyAgICBVbmxpbmtlZEV2YWxDb2Rl
QmxvY2sqIHVubGlua2VkQ29kZSA9IHZtKCkuY29kZUNhY2hlKCktPmdldEV2YWxDb2RlQmxvY2so
dm0oKSwgc2NvcGUsIGV4ZWN1dGFibGUsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLCBzdHJpY3RuZXNz
LCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3IpOwogCiAgICAgaWYgKGhhc0RlYnVn
Z2VyKCkpCiAgICAgICAgIGRlYnVnZ2VyKCktPnNvdXJjZVBhcnNlZChjYWxsRnJhbWUsIGV4ZWN1
dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCksIGVycm9yLm1fbGluZSwgZXJyb3IubV9tZXNzYWdl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1
ZGUgIkFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5j
bHVkZSAiSlNDbGFzc1JlZi5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUg
IlZNLmgiCiAjaW5jbHVkZSAiSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oIgogI2luY2x1ZGUg
IkpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmgiCiAjaW5jbHVkZSAiTnVtYmVyUHJvdG90eXBl
LmgiCkBAIC0xOTUsMTEgKzE5NSwxMSBAQCBwcm90ZWN0ZWQ6CiBwdWJsaWM6CiAgICAgdHlwZWRl
ZiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMgSlNHbG9iYWxP
YmplY3QqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgIHN0YXRpYyBKU0dsb2JhbE9iamVjdCogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHbG9iYWxPYmplY3Q+KGdsb2JhbERhdGEu
aGVhcCkpIEpTR2xvYmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgICAgIGds
b2JhbE9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgICAgIGdsb2JhbERh
dGEuaGVhcC5hZGRGaW5hbGl6ZXIoZ2xvYmFsT2JqZWN0LCBkZXN0cm95KTsKKyAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpT
R2xvYmFsT2JqZWN0Pih2bS5oZWFwKSkgSlNHbG9iYWxPYmplY3Qodm0sIHN0cnVjdHVyZSk7Cisg
ICAgICAgIGdsb2JhbE9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICB2bS5oZWFw
LmFkZEZpbmFsaXplcihnbG9iYWxPYmplY3QsIGRlc3Ryb3kpOwogICAgICAgICByZXR1cm4gZ2xv
YmFsT2JqZWN0OwogICAgIH0KIApAQCAtMjA5LDIwICsyMDksMjAgQEAgcHVibGljOgogICAgIGJv
b2wgaGFzUHJvZmlsZXIoKSBjb25zdCB7IHJldHVybiBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSgp
LT5zdXBwb3J0c1Byb2ZpbGluZyh0aGlzKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgZXhwbGljaXQgSlNHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJl
KiwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqID0gMCk7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgZXhwbGljaXQgSlNHbG9iYWxPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBHbG9i
YWxPYmplY3RNZXRob2RUYWJsZSogPSAwKTsKIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQog
ICAgIHsKLSAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgICAg
IHN0cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3QoZ2xvYmFsRGF0YSwgdGhpcyk7CisgICAgICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgc3RydWN0dXJlKCktPnNldEdsb2Jh
bE9iamVjdCh2bSwgdGhpcyk7CiAgICAgICAgIG1fZXhwZXJpbWVudHNFbmFibGVkID0gbV9nbG9i
YWxPYmplY3RNZXRob2RUYWJsZS0+amF2YVNjcmlwdEV4cGVyaW1lbnRzRW5hYmxlZCh0aGlzKTsK
ICAgICAgICAgaW5pdCh0aGlzKTsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNPYmplY3QqIHRoaXNWYWx1ZSkKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgSlNPYmplY3QqIHRoaXNWYWx1ZSkKICAgICB7Ci0gICAgICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICBzdHJ1Y3R1cmUoKS0+
c2V0R2xvYmFsT2JqZWN0KGdsb2JhbERhdGEsIHRoaXMpOworICAgICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CisgICAgICAgIHN0cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3Qodm0sIHRo
aXMpOwogICAgICAgICBtX2V4cGVyaW1lbnRzRW5hYmxlZCA9IG1fZ2xvYmFsT2JqZWN0TWV0aG9k
VGFibGUtPmphdmFTY3JpcHRFeHBlcmltZW50c0VuYWJsZWQodGhpcyk7CiAgICAgICAgIGluaXQo
dGhpc1ZhbHVlKTsKICAgICB9CkBAIC0zNDQsNyArMzQ0LDcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbV9oYXZpbmdBQmFkVGltZVdhdGNocG9pbnQtPmhhc0JlZW5JbnZhbGlkYXRlZCgpOwog
ICAgIH0KICAgICAgICAgCi0gICAgdm9pZCBoYXZlQUJhZFRpbWUoSlNHbG9iYWxEYXRhJik7Cisg
ICAgdm9pZCBoYXZlQUJhZFRpbWUoVk0mKTsKICAgICAgICAgCiAgICAgYm9vbCBhcnJheVByb3Rv
dHlwZUNoYWluSXNTYW5lKCk7CiAKQEAgLTM4MCwxNCArMzgwLDE0IEBAIHB1YmxpYzoKICAgICAg
ICAgbV9ldmFsRGlzYWJsZWRFcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7CiAgICAgfQogCi0g
ICAgdm9pZCByZXNldFByb3RvdHlwZShKU0dsb2JhbERhdGEmLCBKU1ZhbHVlIHByb3RvdHlwZSk7
CisgICAgdm9pZCByZXNldFByb3RvdHlwZShWTSYsIEpTVmFsdWUgcHJvdG90eXBlKTsKIAotICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSgpIGNvbnN0IHsgcmV0dXJuICpIZWFwOjpoZWFwKHRo
aXMpLT5nbG9iYWxEYXRhKCk7IH0KKyAgICBWTSYgdm0oKSBjb25zdCB7IHJldHVybiAqSGVhcDo6
aGVhcCh0aGlzKS0+dm0oKTsgfQogICAgIEpTT2JqZWN0KiBnbG9iYWxUaGlzKCkgY29uc3Q7CiAK
LSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCAwLCBwcm90b3R5cGUsIFR5cGVJbmZvKEds
b2JhbE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgMCwgcHJvdG90eXBlLCBUeXBlSW5mbyhHbG9iYWxPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogICAgIHZvaWQgcmVn
aXN0ZXJXZWFrTWFwKE9wYXF1ZUpTV2Vha09iamVjdE1hcCogbWFwKQpAQCAtNDM0LDcgKzQzNCw3
IEBAIHByb3RlY3RlZDoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0M6OkpTT2Jq
ZWN0KiB0b1RoaXNPYmplY3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSopOwogCi0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRHbG9iYWxUaGlzKEpTR2xvYmFsRGF0YSYsIEpTT2Jq
ZWN0KiBnbG9iYWxUaGlzKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldEdsb2JhbFRo
aXMoVk0mLCBKU09iamVjdCogZ2xvYmFsVGhpcyk7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTQ3OCwxMyArNDc4LDEzIEBAIGlubGluZSBK
U0dsb2JhbE9iamVjdCogRXhlY1N0YXRlOjpkeW5hbWkKIAogICAgIC8vIEZvciBhbnkgRXhlY1N0
YXRlIHRoYXQncyBub3QgYSBnbG9iYWxFeGVjLCB0aGUgCiAgICAgLy8gZHluYW1pYyBnbG9iYWwg
b2JqZWN0IG11c3QgYmUgc2V0IHNpbmNlIGNvZGUgaXMgcnVubmluZwotICAgIEFTU0VSVChnbG9i
YWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIGdsb2JhbERhdGEoKS5k
eW5hbWljR2xvYmFsT2JqZWN0OworICAgIEFTU0VSVCh2bSgpLmR5bmFtaWNHbG9iYWxPYmplY3Qp
OworICAgIHJldHVybiB2bSgpLmR5bmFtaWNHbG9iYWxPYmplY3Q7CiB9CiAKIGlubGluZSBKU0Fy
cmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSogcHJvZmlsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQg
aW5pdGlhbExlbmd0aCA9IDApCiB7Ci0gICAgcmV0dXJuIEFycmF5QWxsb2NhdGlvblByb2ZpbGU6
OnVwZGF0ZUxhc3RBbGxvY2F0aW9uRm9yKHByb2ZpbGUsIEpTQXJyYXk6OmNyZWF0ZShleGVjLT5n
bG9iYWxEYXRhKCksIGluaXRpYWxMZW5ndGggPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCA/IGds
b2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9u
KEFycmF5V2l0aEFycmF5U3RvcmFnZSkgOiBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9y
UHJvZmlsZUR1cmluZ0FsbG9jYXRpb24ocHJvZmlsZSksIGluaXRpYWxMZW5ndGgpKTsKKyAgICBy
ZXR1cm4gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTo6dXBkYXRlTGFzdEFsbG9jYXRpb25Gb3IocHJv
ZmlsZSwgSlNBcnJheTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGluaXRpYWxMZW5ndGggPj0gTUlOX1NQ
QVJTRV9BUlJBWV9JTkRFWCA/IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGlu
Z1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3RvcmFnZSkgOiBnbG9iYWxPYmpl
Y3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1cmluZ0FsbG9jYXRpb24ocHJvZmlsZSksIGlu
aXRpYWxMZW5ndGgpKTsKIH0KIAogaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5QXJyYXko
RXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCB1bnNpZ25l
ZCBpbml0aWFsTGVuZ3RoID0gMCkKQEAgLTUxNSw3ICs1MTUsNyBAQCBpbmxpbmUgSlNBcnJheSog
Y29uc3RydWN0QXJyYXkoRXhlY1N0YXRlCiBjbGFzcyBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSk7CiBw
dWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlKEpT
R2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0Kik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgRHlu
YW1pY0dsb2JhbE9iamVjdFNjb3BlKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKIAogICAgIH5EeW5h
bWljR2xvYmFsT2JqZWN0U2NvcGUoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHJl
dmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzM2LDcgKzczNiw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1AKICAgICBpZiAoIXRoaXNPYmpl
Y3QtPmlzRXh0ZW5zaWJsZSgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3Ip
KTsKIAotICAgIGlmICghdGhpc09iamVjdC0+c2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlY2soZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB2YWx1ZSkpCisgICAgaWYgKCF0aGlzT2JqZWN0LT5zZXRQcm90b3R5
cGVXaXRoQ3ljbGVDaGVjayhleGVjLT52bSgpLCB2YWx1ZSkpCiAgICAgICAgIHRocm93RXJyb3Io
ZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgImN5Y2xpYyBfX3Byb3RvX18gdmFsdWUiKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTEsNDAgKzUxLDQwIEBAIHZvaWQgR2xvYmFsSlNMb2NrOjppbml0aWFsaXplKCkKIH0KIAogSlNM
b2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoRXhlY1N0YXRlKiBleGVjKQotICAgIDogbV9nbG9iYWxE
YXRhKCZleGVjLT5nbG9iYWxEYXRhKCkpCisgICAgOiBtX3ZtKCZleGVjLT52bSgpKQogewogICAg
IGluaXQoKTsKIH0KIAotSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhKQotICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCitKU0xvY2tIb2xkZXI6
OkpTTG9ja0hvbGRlcihWTSogdm0pCisgICAgOiBtX3ZtKHZtKQogewogICAgIGluaXQoKTsKIH0K
IAotSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQot
ICAgIDogbV9nbG9iYWxEYXRhKCZnbG9iYWxEYXRhKQorSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xk
ZXIoVk0mIHZtKQorICAgIDogbV92bSgmdm0pCiB7CiAgICAgaW5pdCgpOwogfQogCiB2b2lkIEpT
TG9ja0hvbGRlcjo6aW5pdCgpCiB7Ci0gICAgbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkubG9jaygp
OworICAgIG1fdm0tPmFwaUxvY2soKS5sb2NrKCk7CiB9CiAKIEpTTG9ja0hvbGRlcjo6fkpTTG9j
a0hvbGRlcigpCiB7Ci0gICAgUmVmUHRyPEpTTG9jaz4gYXBpTG9jaygmbV9nbG9iYWxEYXRhLT5h
cGlMb2NrKCkpOwotICAgIG1fZ2xvYmFsRGF0YS5jbGVhcigpOworICAgIFJlZlB0cjxKU0xvY2s+
IGFwaUxvY2soJm1fdm0tPmFwaUxvY2soKSk7CisgICAgbV92bS5jbGVhcigpOwogICAgIGFwaUxv
Y2stPnVubG9jaygpOwogfQogCi1KU0xvY2s6OkpTTG9jayhKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEpCitKU0xvY2s6OkpTTG9jayhWTSogdm0pCiAgICAgOiBtX293bmVyVGhyZWFkKDApCiAgICAg
LCBtX2xvY2tDb3VudCgwKQogICAgICwgbV9sb2NrRHJvcERlcHRoKDApCi0gICAgLCBtX2dsb2Jh
bERhdGEoZ2xvYmFsRGF0YSkKKyAgICAsIG1fdm0odm0pCiB7CiAgICAgbV9zcGluTG9jay5Jbml0
KCk7CiB9CkBAIC05MywxMCArOTMsMTAgQEAgSlNMb2NrOjp+SlNMb2NrKCkKIHsKIH0KIAotdm9p
ZCBKU0xvY2s6OndpbGxEZXN0cm95R2xvYmFsRGF0YShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEp
Cit2b2lkIEpTTG9jazo6d2lsbERlc3Ryb3lWTShWTSogdm0pCiB7Ci0gICAgQVNTRVJUX1VOVVNF
RChnbG9iYWxEYXRhLCBtX2dsb2JhbERhdGEgPT0gZ2xvYmFsRGF0YSk7Ci0gICAgbV9nbG9iYWxE
YXRhID0gMDsKKyAgICBBU1NFUlRfVU5VU0VEKHZtLCBtX3ZtID09IHZtKTsKKyAgICBtX3ZtID0g
MDsKIH0KIAogdm9pZCBKU0xvY2s6OmxvY2soKQpAQCAtMTMzLDEyICsxMzMsMTIgQEAgdm9pZCBK
U0xvY2s6OnVubG9jaygpCiAKIHZvaWQgSlNMb2NrOjpsb2NrKEV4ZWNTdGF0ZSogZXhlYykKIHsK
LSAgICBleGVjLT5nbG9iYWxEYXRhKCkuYXBpTG9jaygpLmxvY2soKTsKKyAgICBleGVjLT52bSgp
LmFwaUxvY2soKS5sb2NrKCk7CiB9CiAKIHZvaWQgSlNMb2NrOjp1bmxvY2soRXhlY1N0YXRlKiBl
eGVjKQogewotICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5hcGlMb2NrKCkudW5sb2NrKCk7CisgICAg
ZXhlYy0+dm0oKS5hcGlMb2NrKCkudW5sb2NrKCk7CiB9CiAKIGJvb2wgSlNMb2NrOjpjdXJyZW50
VGhyZWFkSXNIb2xkaW5nTG9jaygpCkBAIC0yMTUsMjEgKzIxNSwyMSBAQCB2b2lkIEpTTG9jazo6
Z3JhYkFsbExvY2tzKHVuc2lnbmVkIGxvY2tDCiAKIEpTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9w
QWxsTG9ja3MoRXhlY1N0YXRlKiBleGVjKQogICAgIDogbV9sb2NrQ291bnQoMCkKLSAgICAsIG1f
Z2xvYmFsRGF0YSgmZXhlYy0+Z2xvYmFsRGF0YSgpKQorICAgICwgbV92bSgmZXhlYy0+dm0oKSkK
IHsKLSAgICBtX2xvY2tDb3VudCA9IG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmRyb3BBbGxMb2Nr
cygpOworICAgIG1fbG9ja0NvdW50ID0gbV92bS0+YXBpTG9jaygpLmRyb3BBbGxMb2NrcygpOwog
fQogCi1KU0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFsbExvY2tzKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSkKK0pTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoVk0qIHZtKQogICAg
IDogbV9sb2NrQ291bnQoMCkKLSAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorICAgICwg
bV92bSh2bSkKIHsKLSAgICBtX2xvY2tDb3VudCA9IG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmRy
b3BBbGxMb2NrcygpOworICAgIG1fbG9ja0NvdW50ID0gbV92bS0+YXBpTG9jaygpLmRyb3BBbGxM
b2NrcygpOwogfQogCiBKU0xvY2s6OkRyb3BBbGxMb2Nrczo6fkRyb3BBbGxMb2NrcygpCiB7Ci0g
ICAgbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuZ3JhYkFsbExvY2tzKG1fbG9ja0NvdW50KTsKKyAg
ICBtX3ZtLT5hcGlMb2NrKCkuZ3JhYkFsbExvY2tzKG1fbG9ja0NvdW50KTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAko
cmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEwICs0OSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAvLyB0aHJlYWQgYWNxdWlyZWQgaXQgdG8gYmVnaW4gd2l0aC4KIAogICAgIGNsYXNzIEV4ZWNT
dGF0ZTsKLSAgICBjbGFzcyBKU0dsb2JhbERhdGE7CisgICAgY2xhc3MgVk07CiAKICAgICAvLyBU
aGlzIGNsYXNzIGlzIHVzZWQgdG8gcHJvdGVjdCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGxl
Z2FjeSBzaW5nbGUgCi0gICAgLy8gc2hhcmVkIEpTR2xvYmFsRGF0YS4KKyAgICAvLyBzaGFyZWQg
Vk0uCiAgICAgY2xhc3MgR2xvYmFsSlNMb2NrIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoR2xvYmFsSlNMb2NrKTsKICAgICBwdWJsaWM6CkBAIC02NiwyMSArNjYsMjEgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICBjbGFzcyBKU0xvY2tIb2xkZXIgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNMb2NrSG9sZGVyKEpTR2xvYmFsRGF0YSopOwotICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhJik7CisgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIEpTTG9ja0hvbGRlcihWTSopOworICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBKU0xvY2tIb2xkZXIoVk0mKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNM
b2NrSG9sZGVyKEV4ZWNTdGF0ZSopOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIH5KU0xv
Y2tIb2xkZXIoKTsKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGluaXQoKTsKIAotICAgICAg
ICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBtX2dsb2JhbERhdGE7CisgICAgICAgIFJlZlB0cjxWTT4g
bV92bTsKICAgICB9OwogCiAgICAgY2xhc3MgSlNMb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPEpTTG9jaz4gewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShKU0xvY2spOwog
ICAgIHB1YmxpYzoKLSAgICAgICAgSlNMb2NrKEpTR2xvYmFsRGF0YSopOworICAgICAgICBKU0xv
Y2soVk0qKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTTG9jaygpOwogCiAgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbG9jaygpOwpAQCAtODgsMTAgKzg4LDEwIEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyB2b2lkIGxvY2soRXhlY1N0YXRlKik7CiAgICAg
ICAgIHN0YXRpYyB2b2lkIHVubG9jayhFeGVjU3RhdGUqKTsKLSAgICAgICAgc3RhdGljIHZvaWQg
bG9jayhKU0dsb2JhbERhdGEmKTsKLSAgICAgICAgc3RhdGljIHZvaWQgdW5sb2NrKEpTR2xvYmFs
RGF0YSYpOworICAgICAgICBzdGF0aWMgdm9pZCBsb2NrKFZNJik7CisgICAgICAgIHN0YXRpYyB2
b2lkIHVubG9jayhWTSYpOwogCi0gICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpIHsg
cmV0dXJuIG1fZ2xvYmFsRGF0YTsgfQorICAgICAgICBWTSogdm0oKSB7IHJldHVybiBtX3ZtOyB9
CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5n
TG9jaygpOwogCkBAIC05OSwxOCArOTksMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVu
c2lnbmVkIGRyb3BBbGxMb2Nrc1VuY29uZGl0aW9uYWxseSgpOwogICAgICAgICB2b2lkIGdyYWJB
bGxMb2Nrcyh1bnNpZ25lZCBsb2NrQ291bnQpOwogCi0gICAgICAgIHZvaWQgd2lsbERlc3Ryb3lH
bG9iYWxEYXRhKEpTR2xvYmFsRGF0YSopOworICAgICAgICB2b2lkIHdpbGxEZXN0cm95Vk0oVk0q
KTsKIAogICAgICAgICBjbGFzcyBEcm9wQWxsTG9ja3MgewogICAgICAgICAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoRHJvcEFsbExvY2tzKTsKICAgICAgICAgcHVibGljOgogICAgICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgRHJvcEFsbExvY2tzKEV4ZWNTdGF0ZSogZXhlYyk7Ci0gICAgICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBEcm9wQWxsTG9ja3MoSlNHbG9iYWxEYXRhKik7CisgICAg
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBEcm9wQWxsTG9ja3MoVk0qKTsKICAgICAgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIH5Ecm9wQWxsTG9ja3MoKTsKICAgICAgICAgICAgIAogICAgICAg
ICBwcml2YXRlOgogICAgICAgICAgICAgaW50cHRyX3QgbV9sb2NrQ291bnQ7Ci0gICAgICAgICAg
ICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBtX2dsb2JhbERhdGE7CisgICAgICAgICAgICBSZWZQdHI8
Vk0+IG1fdm07CiAgICAgICAgIH07CiAKICAgICBwcml2YXRlOgpAQCAtMTE5LDcgKzExOSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBUaHJlYWRJZGVudGlmaWVyIG1fb3duZXJUaHJlYWQ7
CiAgICAgICAgIGludHB0cl90IG1fbG9ja0NvdW50OwogICAgICAgICB1bnNpZ25lZCBtX2xvY2tE
cm9wRGVwdGg7Ci0gICAgICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworICAgICAgICBW
TSogbV92bTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NiwxNSArNTYsMTUgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwog
ICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90bykgeyByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFs
RGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oTmFtZVNjb3BlT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgfQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
LCBUeXBlSW5mbyhOYW1lU2NvcGVPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8p
OyB9CiAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAogcHJvdGVjdGVkOgog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudGlmaWVyLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgIHsK
LSAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICAg
ICAgbV9yZWdpc3RlclN0b3JlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsK
KyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CisgICAgICAgIG1fcmVn
aXN0ZXJTdG9yZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgdmFsdWUpOwogICAgICAgICBzeW1ib2xU
YWJsZSgpLT5hZGQoaWRlbnRpZmllci5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoLTEsIGF0dHJp
YnV0ZXMpKTsKICAgICB9CiAKQEAgLTczLDcgKzczLDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToK
ICAgICBKU05hbWVTY29wZShFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIG5leHQpCiAgICAgICAg
IDogQmFzZSgKLSAgICAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKSwKKyAgICAgICAgICAgIGV4
ZWMtPnZtKCksCiAgICAgICAgICAgICBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm5hbWVT
Y29wZVN0cnVjdHVyZSgpLAogICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+
KCZtX3JlZ2lzdGVyU3RvcmUgKyAxKSwKICAgICAgICAgICAgIG5leHQKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmgJKHJldmlzaW9uIDE0ODY4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBK
U05vdEFuT2JqZWN0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgIHByaXZhdGU6CiAg
ICAgICAgIEpTTm90QW5PYmplY3QoRXhlY1N0YXRlKiBleGVjKQotICAgICAgICAgICAgOiBKU05v
bkZpbmFsT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLm5vdEFu
T2JqZWN0U3RydWN0dXJlLmdldCgpKQorICAgICAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KGV4
ZWMtPnZtKCksIGV4ZWMtPnZtKCkubm90QW5PYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAg
IHsKICAgICAgICAgfQogICAgICAgICAKQEAgLTQ5LDEzICs0OSwxMyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgc3RhdGljIEpTTm90QW5PYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMp
CiAgICAgICAgIHsKICAgICAgICAgICAgIEpTTm90QW5PYmplY3QqIG9iamVjdCA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEpTTm90QW5PYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBKU05vdEFu
T2JqZWN0KGV4ZWMpOwotICAgICAgICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbihleGVjLT5n
bG9iYWxEYXRhKCkpOworICAgICAgICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbihleGVjLT52
bSgpKTsKICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgIH0KIAotICAgICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsK
KyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCShyZXZp
c2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTMgKzU1LDEzIEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEpTT04KIG5hbWVzcGFjZSBKU0MgewogCiBKU09OT2JqZWN0OjpK
U09OT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQotICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwg
c3RydWN0dXJlKQorICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxPYmplY3QtPnZtKCksIHN0
cnVjdHVyZSkKIHsKIH0KIAogdm9pZCBKU09OT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRGF0YSgpKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxP
YmplY3QtPnZtKCkpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiB9CiAKQEAgLTkw
LDcgKzkwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBjbGFzcyBIb2xkZXIgewogICAgIHB1
YmxpYzoKLSAgICAgICAgSG9sZGVyKEpTR2xvYmFsRGF0YSYsIEpTT2JqZWN0Kik7CisgICAgICAg
IEhvbGRlcihWTSYsIEpTT2JqZWN0Kik7CiAKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fb2JqZWN0LmdldCgpOyB9CiAKQEAgLTIxNyw3ICsyMTcsNyBAQCBTdHJp
bmdpZmllcjo6U3RyaW5naWZpZXIoRXhlY1N0YXRlKiBleGVjCiAgICAgaWYgKG1fcmVwbGFjZXIu
YXNPYmplY3QoKS0+aW5oZXJpdHMoJkpTQXJyYXk6OnNfaW5mbykpIHsKICAgICAgICAgbV91c2lu
Z0FycmF5UmVwbGFjZXIgPSB0cnVlOwogICAgICAgICBIYW5kbGU8SlNPYmplY3Q+IGFycmF5ID0g
bV9yZXBsYWNlci5hc09iamVjdCgpOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+
Z2V0KGV4ZWMsIGV4ZWMtPmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUlu
dDMyKGV4ZWMpOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+Z2V0KGV4ZWMsIGV4
ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBKU1Zh
bHVlIG5hbWUgPSBhcnJheS0+Z2V0KGV4ZWMsIGkpOwogICAgICAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQpAQCAtMjQwLDE4ICsyNDAsMTggQEAgTG9jYWw8VW5rbm93bj4gU3RyaW5n
aWZpZXI6OnN0cmluZ2lmeShIYQogewogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBjb25zdHJ1Y3RF
bXB0eU9iamVjdChtX2V4ZWMpOwogICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAg
ICAgICByZXR1cm4gTG9jYWw8VW5rbm93bj4obV9leGVjLT5nbG9iYWxEYXRhKCksIGpzTnVsbCgp
KTsKKyAgICAgICAgcmV0dXJuIExvY2FsPFVua25vd24+KG1fZXhlYy0+dm0oKSwganNOdWxsKCkp
OwogCi0gICAgUHJvcGVydHlOYW1lRm9yRnVuY3Rpb25DYWxsIGVtcHR5UHJvcGVydHlOYW1lKG1f
ZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPmVtcHR5SWRlbnRpZmllcik7Ci0gICAg
b2JqZWN0LT5wdXREaXJlY3QobV9leGVjLT5nbG9iYWxEYXRhKCksIG1fZXhlYy0+Z2xvYmFsRGF0
YSgpLnByb3BlcnR5TmFtZXMtPmVtcHR5SWRlbnRpZmllciwgdmFsdWUuZ2V0KCkpOworICAgIFBy
b3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbCBlbXB0eVByb3BlcnR5TmFtZShtX2V4ZWMtPnZtKCku
cHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCht
X2V4ZWMtPnZtKCksIG1fZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXIs
IHZhbHVlLmdldCgpKTsKIAogICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwogICAgIGlmIChhcHBl
bmRTdHJpbmdpZmllZFZhbHVlKHJlc3VsdCwgdmFsdWUuZ2V0KCksIG9iamVjdCwgZW1wdHlQcm9w
ZXJ0eU5hbWUpICE9IFN0cmluZ2lmeVN1Y2NlZWRlZCkKLSAgICAgICAgcmV0dXJuIExvY2FsPFVu
a25vd24+KG1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0
dXJuIExvY2FsPFVua25vd24+KG1fZXhlYy0+dm0oKSwganNVbmRlZmluZWQoKSk7CiAgICAgaWYg
KG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBMb2NhbDxVbmtub3duPiht
X2V4ZWMtPmdsb2JhbERhdGEoKSwganNOdWxsKCkpOworICAgICAgICByZXR1cm4gTG9jYWw8VW5r
bm93bj4obV9leGVjLT52bSgpLCBqc051bGwoKSk7CiAKLSAgICByZXR1cm4gTG9jYWw8VW5rbm93
bj4obV9leGVjLT5nbG9iYWxEYXRhKCksIGpzU3RyaW5nKG1fZXhlYywgcmVzdWx0LnRvU3RyaW5n
KCkpKTsKKyAgICByZXR1cm4gTG9jYWw8VW5rbm93bj4obV9leGVjLT52bSgpLCBqc1N0cmluZyht
X2V4ZWMsIHJlc3VsdC50b1N0cmluZygpKSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
VHlwZT4KQEAgLTMyMCwxMCArMzIwLDEwIEBAIHZvaWQgU3RyaW5naWZpZXI6OmFwcGVuZFF1b3Rl
ZFN0cmluZyhTdHIKIGlubGluZSBKU1ZhbHVlIFN0cmluZ2lmaWVyOjp0b0pTT04oSlNWYWx1ZSB2
YWx1ZSwgY29uc3QgUHJvcGVydHlOYW1lRm9yRnVuY3Rpb25DYWxsJiBwcm9wZXJ0eU5hbWUpCiB7
CiAgICAgQVNTRVJUKCFtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKLSAgICBpZiAoIXZhbHVlLmlz
T2JqZWN0KCkgfHwgIWFzT2JqZWN0KHZhbHVlKS0+aGFzUHJvcGVydHkobV9leGVjLCBtX2V4ZWMt
Pmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT50b0pTT04pKQorICAgIGlmICghdmFsdWUuaXNP
YmplY3QoKSB8fCAhYXNPYmplY3QodmFsdWUpLT5oYXNQcm9wZXJ0eShtX2V4ZWMsIG1fZXhlYy0+
dm0oKS5wcm9wZXJ0eU5hbWVzLT50b0pTT04pKQogICAgICAgICByZXR1cm4gdmFsdWU7CiAKLSAg
ICBKU1ZhbHVlIHRvSlNPTkZ1bmN0aW9uID0gYXNPYmplY3QodmFsdWUpLT5nZXQobV9leGVjLCBt
X2V4ZWMtPmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT50b0pTT04pOworICAgIEpTVmFsdWUg
dG9KU09ORnVuY3Rpb24gPSBhc09iamVjdCh2YWx1ZSktPmdldChtX2V4ZWMsIG1fZXhlYy0+dm0o
KS5wcm9wZXJ0eU5hbWVzLT50b0pTT04pOwogICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKQEAgLTQxNiw3ICs0MTYsNyBAQCBTdHJpbmdp
Zmllcjo6U3RyaW5naWZ5UmVzdWx0IFN0cmluZ2lmaWVyCiAgICAgICAgIH0KICAgICB9CiAgICAg
Ym9vbCBob2xkZXJTdGFja1dhc0VtcHR5ID0gbV9ob2xkZXJTdGFjay5pc0VtcHR5KCk7Ci0gICAg
bV9ob2xkZXJTdGFjay5hcHBlbmQoSG9sZGVyKG1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBvYmplY3Qp
KTsKKyAgICBtX2hvbGRlclN0YWNrLmFwcGVuZChIb2xkZXIobV9leGVjLT52bSgpLCBvYmplY3Qp
KTsKICAgICBpZiAoIWhvbGRlclN0YWNrV2FzRW1wdHkpCiAgICAgICAgIHJldHVybiBTdHJpbmdp
ZnlTdWNjZWVkZWQ7CiAKQEAgLTQ1OSw4ICs0NTksOCBAQCBpbmxpbmUgdm9pZCBTdHJpbmdpZmll
cjo6c3RhcnROZXdMaW5lKFN0CiAgICAgYnVpbGRlci5hcHBlbmQobV9pbmRlbnQpOwogfQogCi1p
bmxpbmUgU3RyaW5naWZpZXI6OkhvbGRlcjo6SG9sZGVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNPYmplY3QqIG9iamVjdCkKLSAgICA6IG1fb2JqZWN0KGdsb2JhbERhdGEsIG9iamVjdCkK
K2lubGluZSBTdHJpbmdpZmllcjo6SG9sZGVyOjpIb2xkZXIoVk0mIHZtLCBKU09iamVjdCogb2Jq
ZWN0KQorICAgIDogbV9vYmplY3Qodm0sIG9iamVjdCkKICAgICAsIG1faXNBcnJheShvYmplY3Qt
PmluaGVyaXRzKCZKU0FycmF5OjpzX2luZm8pKQogICAgICwgbV9pbmRleCgwKQogI2lmbmRlZiBO
REVCVUcKQEAgLTQ3OSw3ICs0NzksNyBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVu
ZE5leHRQcm9wCiAgICAgaWYgKCFtX2luZGV4KSB7CiAgICAgICAgIGlmIChtX2lzQXJyYXkpIHsK
ICAgICAgICAgICAgIG1faXNKU0FycmF5ID0gaXNKU0FycmF5KG1fb2JqZWN0LmdldCgpKTsKLSAg
ICAgICAgICAgIG1fc2l6ZSA9IG1fb2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+Z2xvYmFsRGF0YSgp
LnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CisgICAgICAgICAgICBtX3Np
emUgPSBtX29iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
KS50b1VJbnQzMihleGVjKTsKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdbJyk7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoc3RyaW5naWZpZXIubV91c2luZ0FycmF5UmVw
bGFjZXIpCkBAIC02MDQsNyArNjA0LDcgQEAgY2xhc3MgV2Fsa2VyIHsKIHB1YmxpYzoKICAgICBX
YWxrZXIoRXhlY1N0YXRlKiBleGVjLCBIYW5kbGU8SlNPYmplY3Q+IGZ1bmN0aW9uLCBDYWxsVHlw
ZSBjYWxsVHlwZSwgQ2FsbERhdGEgY2FsbERhdGEpCiAgICAgICAgIDogbV9leGVjKGV4ZWMpCi0g
ICAgICAgICwgbV9mdW5jdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGZ1bmN0aW9uKQorICAgICAg
ICAsIG1fZnVuY3Rpb24oZXhlYy0+dm0oKSwgZnVuY3Rpb24pCiAgICAgICAgICwgbV9jYWxsVHlw
ZShjYWxsVHlwZSkKICAgICAgICAgLCBtX2NhbGxEYXRhKGNhbGxEYXRhKQogICAgIHsKQEAgLTYz
NSw4ICs2MzUsOCBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiB7
CiAgICAgVmVjdG9yPFByb3BlcnR5TmFtZUFycmF5LCAxNiwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+
IHByb3BlcnR5U3RhY2s7CiAgICAgVmVjdG9yPHVpbnQzMl90LCAxNiwgVW5zYWZlVmVjdG9yT3Zl
cmZsb3c+IGluZGV4U3RhY2s7Ci0gICAgTG9jYWxTdGFjazxKU09iamVjdCwgMTY+IG9iamVjdFN0
YWNrKG1fZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBMb2NhbFN0YWNrPEpTQXJyYXksIDE2PiBh
cnJheVN0YWNrKG1fZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBMb2NhbFN0YWNrPEpTT2JqZWN0
LCAxNj4gb2JqZWN0U3RhY2sobV9leGVjLT52bSgpKTsKKyAgICBMb2NhbFN0YWNrPEpTQXJyYXks
IDE2PiBhcnJheVN0YWNrKG1fZXhlYy0+dm0oKSk7CiAgICAgCiAgICAgVmVjdG9yPFdhbGtlclN0
YXRlLCAxNiwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IHN0YXRlU3RhY2s7CiAgICAgV2Fsa2VyU3Rh
dGUgc3RhdGUgPSBTdGF0ZVVua25vd247CkBAIC03NzIsNyArNzcyLDcgQEAgTkVWRVJfSU5MSU5F
IEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpTVmFsdQogICAgIH0KICAgICBKU09iamVjdCogZmluYWxI
b2xkZXIgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChtX2V4ZWMpOwogICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90OwotICAgIGZpbmFsSG9sZGVyLT5tZXRob2RUYWJsZSgpLT5wdXQoZmluYWxIb2xkZXIs
IG1fZXhlYywgbV9leGVjLT5nbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlm
aWVyLCBvdXRWYWx1ZSwgc2xvdCk7CisgICAgZmluYWxIb2xkZXItPm1ldGhvZFRhYmxlKCktPnB1
dChmaW5hbEhvbGRlciwgbV9leGVjLCBtX2V4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+ZW1wdHlJ
ZGVudGlmaWVyLCBvdXRWYWx1ZSwgc2xvdCk7CiAgICAgcmV0dXJuIGNhbGxSZXZpdmVyKGZpbmFs
SG9sZGVyLCBqc0VtcHR5U3RyaW5nKG1fZXhlYyksIG91dFZhbHVlKTsKIH0KIApAQCAtNzg2LDcg
Kzc4Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNPTlByb3RvRnUKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAKICAgICBKU1ZhbHVlIHVuZmls
dGVyZWQ7Ci0gICAgTG9jYWxTY29wZSBzY29wZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIExv
Y2FsU2NvcGUgc2NvcGUoZXhlYy0+dm0oKSk7CiAgICAgaWYgKHNvdXJjZS5pczhCaXQoKSkgewog
ICAgICAgICBMaXRlcmFsUGFyc2VyPExDaGFyPiBqc29uUGFyc2VyKGV4ZWMsIHNvdXJjZS5jaGFy
YWN0ZXJzOCgpLCBzb3VyY2UubGVuZ3RoKCksIFN0cmljdEpTT04pOwogICAgICAgICB1bmZpbHRl
cmVkID0ganNvblBhcnNlci50cnlMaXRlcmFsUGFyc2UoKTsKQEAgLTgwNyw3ICs4MDcsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTT05Qcm90b0Z1CiAgICAgQ2FsbFR5cGUgY2Fs
bFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlw
ZSA9PSBDYWxsVHlwZU5vbmUpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodW5maWx0
ZXJlZCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShXYWxrZXIoZXhlYywgTG9jYWw8SlNP
YmplY3Q+KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXNPYmplY3QoZnVuY3Rpb24pKSwgY2FsbFR5cGUs
IGNhbGxEYXRhKS53YWxrKHVuZmlsdGVyZWQpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KFdhbGtlcihleGVjLCBMb2NhbDxKU09iamVjdD4oZXhlYy0+dm0oKSwgYXNPYmplY3QoZnVuY3Rp
b24pKSwgY2FsbFR5cGUsIGNhbGxEYXRhKS53YWxrKHVuZmlsdGVyZWQpKTsKIH0KIAogLy8gRUNN
QS0yNjIgdjUgMTUuMTIuMwpAQCAtODE1LDE3ICs4MTUsMTcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBKU09OUHJvdG9GdQogewogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIEFT
Q0lJTGl0ZXJhbCgiTm8gaW5wdXQgdG8gc3RyaW5naWZ5IikpKTsKLSAgICBMb2NhbFNjb3BlIHNj
b3BlKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgTG9jYWw8VW5rbm93bj4gdmFsdWUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgTG9jYWw8VW5rbm93bj4gcmVw
bGFjZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5hcmd1bWVudCgxKSk7Ci0gICAgTG9jYWw8
VW5rbm93bj4gc3BhY2UoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5hcmd1bWVudCgyKSk7Cisg
ICAgTG9jYWxTY29wZSBzY29wZShleGVjLT52bSgpKTsKKyAgICBMb2NhbDxVbmtub3duPiB2YWx1
ZShleGVjLT52bSgpLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgTG9jYWw8VW5rbm93bj4gcmVw
bGFjZXIoZXhlYy0+dm0oKSwgZXhlYy0+YXJndW1lbnQoMSkpOworICAgIExvY2FsPFVua25vd24+
IHNwYWNlKGV4ZWMtPnZtKCksIGV4ZWMtPmFyZ3VtZW50KDIpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKFN0cmluZ2lmaWVyKGV4ZWMsIHJlcGxhY2VyLCBzcGFjZSkuc3RyaW5naWZ5KHZh
bHVlKS5nZXQoKSk7CiB9CiAKIFN0cmluZyBKU09OU3RyaW5naWZ5KEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgaW5kZW50KQogewotICAgIExvY2FsU2NvcGUgc2NvcGUo
ZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBMb2NhbDxVbmtub3duPiByZXN1bHQgPSBTdHJpbmdp
ZmllcihleGVjLCBMb2NhbDxVbmtub3duPihleGVjLT5nbG9iYWxEYXRhKCksIGpzTnVsbCgpKSwg
TG9jYWw8VW5rbm93bj4oZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc051bWJlcihpbmRlbnQpKSkuc3Ry
aW5naWZ5KExvY2FsPFVua25vd24+KGV4ZWMtPmdsb2JhbERhdGEoKSwgdmFsdWUpKTsKKyAgICBM
b2NhbFNjb3BlIHNjb3BlKGV4ZWMtPnZtKCkpOworICAgIExvY2FsPFVua25vd24+IHJlc3VsdCA9
IFN0cmluZ2lmaWVyKGV4ZWMsIExvY2FsPFVua25vd24+KGV4ZWMtPnZtKCksIGpzTnVsbCgpKSwg
TG9jYWw8VW5rbm93bj4oZXhlYy0+dm0oKSwganNOdW1iZXIoaW5kZW50KSkpLnN0cmluZ2lmeShM
b2NhbDxVbmtub3duPihleGVjLT52bSgpLCB2YWx1ZSkpOwogICAgIGlmIChyZXN1bHQuaXNVbmRl
ZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIHJldHVybiByZXN1
bHQuZ2V0U3RyaW5nKGV4ZWMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPTk9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT05PYmplY3QuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPTk9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0Myw5IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8pOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgY29u
c3QgQ2xhc3NJbmZvIHNfaW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQyLDcgKzM0Miw3IEBA
IHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGEKICAgICBKU09iamVjdCog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVCh2YWx1ZSk7
CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBI
ZWFwOjpoZWFwKHRoaXNPYmplY3QpKTsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBl
eGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAKICAgICAv
LyBUcnkgaW5kZXhlZCBwdXQgZmlyc3QuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3RuZXNz
LCBzaW5jZSBsb2FkcyBvbiBwcm9wZXJ0eSBuYW1lcyB0aGF0IGFwcGVhciBsaWtlCiAgICAgLy8g
dmFsaWQgaW5kaWNlcyB3aWxsIG5ldmVyIGxvb2sgaW4gdGhlIG5hbWVkIHByb3BlcnR5IHN0b3Jh
Z2UuCkBAIC0zNTgsOCArMzU4LDggQEAgdm9pZCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YQogICAgICAgICBmb3IgKEpTT2JqZWN0KiBvYmogPSB0aGlzT2JqZWN0OyAhb2JqLT5z
dHJ1Y3R1cmUoKS0+aGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQ
cm90bygpOyBvYmogPSBhc09iamVjdChwcm90b3R5cGUpKSB7CiAgICAgICAgICAgICBwcm90b3R5
cGUgPSBvYmotPnByb3RvdHlwZSgpOwogICAgICAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwo
KSkgewotICAgICAgICAgICAgICAgIEFTU0VSVCghdGhpc09iamVjdC0+c3RydWN0dXJlKCktPnBy
b3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhleGVjLT5nbG9iYWxEYXRhKCksIHByb3Bl
cnR5TmFtZSkpOwotICAgICAgICAgICAgICAgIGlmICghdGhpc09iamVjdC0+cHV0RGlyZWN0SW50
ZXJuYWw8UHV0TW9kZVB1dD4oZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xv
dCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKQorICAgICAgICAgICAgICAgIEFTU0VSVCghdGhp
c09iamVjdC0+c3RydWN0dXJlKCktPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhl
eGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXNPYmpl
Y3QtPnB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCAwLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpCiAgICAgICAgICAgICAgICAgICAg
ICYmIHNsb3QuaXNTdHJpY3RNb2RlKCkpCiAgICAgICAgICAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJy
b3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0zNzEsMTAgKzM3MSwxMCBAQCB2b2lk
IEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAgICAgZm9yIChvYmogPSB0aGlz
T2JqZWN0OyA7IG9iaiA9IGFzT2JqZWN0KHByb3RvdHlwZSkpIHsKICAgICAgICAgdW5zaWduZWQg
YXR0cmlidXRlczsKICAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmotPnN0cnVjdHVyZSgpLT5nZXQoZ2xvYmFsRGF0YSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0ID0gb2JqLT5zdHJ1Y3R1cmUoKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZz
ZXQpKSB7CiAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KSB7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5wcm90b3R5cGVDaGFpbk1h
eUludGVyY2VwdFN0b3JlVG8oZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpIHx8IG9i
aiA9PSB0aGlzT2JqZWN0KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+c3Ry
dWN0dXJlKCktPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhleGVjLT52bSgpLCBw
cm9wZXJ0eU5hbWUpIHx8IG9iaiA9PSB0aGlzT2JqZWN0KTsKICAgICAgICAgICAgICAgICBpZiAo
c2xvdC5pc1N0cmljdE1vZGUoKSkKICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihleGVj
LCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKFN0cmljdE1vZGVSZWFkb25seVBy
b3BlcnR5V3JpdGVFcnJvcikpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0zODMsNyAr
MzgzLDcgQEAgdm9pZCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YQogICAgICAg
ICAgICAgSlNWYWx1ZSBncyA9IG9iai0+Z2V0RGlyZWN0KG9mZnNldCk7CiAgICAgICAgICAgICBp
ZiAoZ3MuaXNHZXR0ZXJTZXR0ZXIoKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChhdHRyaWJ1
dGVzICYgQWNjZXNzb3IpOwotICAgICAgICAgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1
Y3R1cmUoKS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKGV4ZWMtPmdsb2JhbERh
dGEoKSwgcHJvcGVydHlOYW1lKSB8fCBvYmogPT0gdGhpc09iamVjdCk7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5wcm90b3R5cGVDaGFpbk1heUludGVy
Y2VwdFN0b3JlVG8oZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKSB8fCBvYmogPT0gdGhpc09iamVj
dCk7CiAgICAgICAgICAgICAgICAgSlNPYmplY3QqIHNldHRlckZ1bmMgPSBhc0dldHRlclNldHRl
cihncyktPnNldHRlcigpOyAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFzZXR0ZXJGdW5j
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQpAQCAtNDEy
LDggKzQxMiw4IEBAIHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGEKICAg
ICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQoIXRoaXNPYmplY3QtPnN0
cnVjdHVyZSgpLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oZXhlYy0+Z2xvYmFs
RGF0YSgpLCBwcm9wZXJ0eU5hbWUpIHx8IG9iaiA9PSB0aGlzT2JqZWN0KTsKLSAgICBpZiAoIXRo
aXNPYmplY3QtPnB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KGdsb2JhbERhdGEsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSkgJiYgc2xv
dC5pc1N0cmljdE1vZGUoKSkKKyAgICBBU1NFUlQoIXRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5w
cm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1l
KSB8fCBvYmogPT0gdGhpc09iamVjdCk7CisgICAgaWYgKCF0aGlzT2JqZWN0LT5wdXREaXJlY3RJ
bnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCwgZ2V0
Q2FsbGFibGVPYmplY3QodmFsdWUpKSAmJiBzbG90LmlzU3RyaWN0TW9kZSgpKQogICAgICAgICB0
aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVy
dHlXcml0ZUVycm9yKSk7CiAgICAgcmV0dXJuOwogfQpAQCAtNDMzLDcgKzQzMyw3IEBAIHZvaWQg
SlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCAKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIAogICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzogewotICAgICAgICB0
aGlzT2JqZWN0LT5jb252ZXJ0VW5kZWNpZGVkRm9yVmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB2
YWx1ZSk7CisgICAgICAgIHRoaXNPYmplY3QtPmNvbnZlcnRVbmRlY2lkZWRGb3JWYWx1ZShleGVj
LT52bSgpLCB2YWx1ZSk7CiAgICAgICAgIC8vIFJlbG9vcC4KICAgICAgICAgcHV0QnlJbmRleChj
ZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7CiAgICAgICAgIHJl
dHVybjsKQEAgLTQ0MSw3ICs0NDEsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2Vs
bCogY2VsbCwgCiAgICAgICAgIAogICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7
CiAgICAgICAgIGlmICghdmFsdWUuaXNJbnQzMigpKSB7Ci0gICAgICAgICAgICB0aGlzT2JqZWN0
LT5jb252ZXJ0SW50MzJGb3JWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIHZhbHVlKTsKKyAgICAg
ICAgICAgIHRoaXNPYmplY3QtPmNvbnZlcnRJbnQzMkZvclZhbHVlKGV4ZWMtPnZtKCksIHZhbHVl
KTsKICAgICAgICAgICAgIHB1dEJ5SW5kZXgoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgc2hvdWxkVGhyb3cpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC00NTIs
NyArNDUyLDcgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIAogICAg
ICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5OwogICAg
ICAgICBpZiAocHJvcGVydHlOYW1lID49IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbcHJvcGVydHlO
YW1lXS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAgICAg
IGJ1dHRlcmZseS0+Y29udGlndW91cygpW3Byb3BlcnR5TmFtZV0uc2V0KGV4ZWMtPnZtKCksIHRo
aXNPYmplY3QsIHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA+PSBidXR0ZXJmbHkt
PnB1YmxpY0xlbmd0aCgpKQogICAgICAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgo
cHJvcGVydHlOYW1lICsgMSk7CiAgICAgICAgIHJldHVybjsKQEAgLTQ2MCwxNCArNDYwLDE0IEBA
IHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCAKICAgICAgICAgCiAgICAg
Y2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGlmICghdmFsdWUuaXNO
dW1iZXIoKSkgewotICAgICAgICAgICAgdGhpc09iamVjdC0+Y29udmVydERvdWJsZVRvQ29udGln
dW91cyhleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICAgICAgdGhpc09iamVjdC0+Y29udmVy
dERvdWJsZVRvQ29udGlndW91cyhleGVjLT52bSgpKTsKICAgICAgICAgICAgIC8vIFJlbG9vcC4K
ICAgICAgICAgICAgIHB1dEJ5SW5kZXgoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
c2hvdWxkVGhyb3cpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGRv
dWJsZSB2YWx1ZUFzRG91YmxlID0gdmFsdWUuYXNOdW1iZXIoKTsKICAgICAgICAgaWYgKHZhbHVl
QXNEb3VibGUgIT0gdmFsdWVBc0RvdWJsZSkgewotICAgICAgICAgICAgdGhpc09iamVjdC0+Y29u
dmVydERvdWJsZVRvQ29udGlndW91cyhleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICAgICAg
dGhpc09iamVjdC0+Y29udmVydERvdWJsZVRvQ29udGlndW91cyhleGVjLT52bSgpKTsKICAgICAg
ICAgICAgIC8vIFJlbG9vcC4KICAgICAgICAgICAgIHB1dEJ5SW5kZXgoY2VsbCwgZXhlYywgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAt
NDk5LDcgKzQ5OSw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCAK
ICAgICAgICAgfSBlbHNlIGlmICghdmFsdWVTbG90KQogICAgICAgICAgICAgKytzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yOwogICAgICAgICAKLSAgICAgICAgdmFsdWVTbG90LnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXNPYmplY3QsIHZhbHVlKTsKKyAgICAgICAgdmFsdWVTbG90LnNl
dChleGVjLT52bSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgICAgIApAQCAtNTI2LDcgKzUyNiw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXgo
SlNDZWxsKiBjZWxsLCAKICAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
cjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdmFsdWVTbG90LnNldChleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXNPYmplY3QsIHZhbHVlKTsKKyAgICAgICAgdmFsdWVTbG90LnNldChleGVj
LT52bSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
ICAgIApAQCAtNTM3LDEyICs1MzcsMTIgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleChKU0Nl
bGwqIGNlbGwsIAogICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgo
ZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwogfQogCi1BcnJheVN0b3Jh
Z2UqIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdl
QWxyZWFkeUV4aXN0cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSkKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKFZNJiB2bSwgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlKQogewogICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNl
TWFwLmdldCgpOwogCiAgICAgaWYgKCFtYXApCi0gICAgICAgIG1hcCA9IGFsbG9jYXRlU3BhcnNl
SW5kZXhNYXAoZ2xvYmFsRGF0YSk7CisgICAgICAgIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhN
YXAodm0pOwogCiAgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpKQogICAgICAgICByZXR1cm4gc3Rv
cmFnZTsKQEAgLTU1NSwyMSArNTU1LDIxIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVudGVy
RGljdGlvbmFyeUkKICAgICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5cyBiZSBhIG5ldyBlbnRyeSBp
biB0aGUgbWFwLCBzbyBubyBuZWVkIHRvIGNoZWNrIHdlIGNhbiB3cml0ZSwKICAgICAgICAgLy8g
YW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28gbm8gbmVlZCB0byBzZXQgdGhlbS4KICAgICAg
ICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgbWFwLT5hZGQodGhpcywgaSkuaXRlcmF0b3ItPnZh
bHVlLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBtYXAtPmFkZCh0
aGlzLCBpKS5pdGVyYXRvci0+dmFsdWUuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCi0g
ICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+cmVzaXpl
QXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigw
KSk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+
cmVzaXplQXJyYXkodm0sIHN0cnVjdHVyZSgpLCAwLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkp
OwogICAgIFJFTEVBU0VfQVNTRVJUKG5ld0J1dHRlcmZseSk7CiAgICAgCiAgICAgbV9idXR0ZXJm
bHkgPSBuZXdCdXR0ZXJmbHk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9p
bmRleEJpYXMgPSAwOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rv
ckxlbmd0aCgwKTsKLSAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1h
cC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgbWFwKTsKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5tX3NwYXJzZU1hcC5zZXQodm0sIHRoaXMsIG1hcCk7CiAgICAgCiAgICAgcmV0dXJu
IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiB9CiAKLXZvaWQgSlNPYmplY3Q6OmVudGVy
RGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEpT
T2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoVk0mIHZtKQogewogICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBTExfQkxBTktfSU5E
RVhJTkdfVFlQRVM6CkBAIC01NzksMTAgKzU3OSwxMCBAQCB2b2lkIEpTT2JqZWN0OjplbnRlckRp
Y3Rpb25hcnlJbmRleGluZ01vCiAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBF
UzoKICAgICAgICAgLy8gTk9URTogdGhpcyBpcyBob3JyaWJseSBpbmVmZmljaWVudCwgYXMgaXQg
d2lsbCBwZXJmb3JtIHR3byBjb252ZXJzaW9ucy4gV2UgY291bGQgb3B0aW1pemUKICAgICAgICAg
Ly8gdGhpcyBjYXNlIGlmIHdlIGV2ZXIgY2FyZWQuCi0gICAgICAgIGVudGVyRGljdGlvbmFyeUlu
ZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIGVuc3Vy
ZUFycmF5U3RvcmFnZVNsb3coZ2xvYmFsRGF0YSkpOworICAgICAgICBlbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgZW5zdXJlQXJyYXlT
dG9yYWdlU2xvdyh2bSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9S
QUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVX
aGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCkpOworICAgICAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJy
YXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CkBAIC01OTAsMjAgKzU5MCwy
MCBAQCB2b2lkIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vCiAgICAgfQogfQog
Ci12b2lkIEpTT2JqZWN0Ojpub3RpZnlQcmVzZW5jZU9mSW5kZXhlZEFjY2Vzc29ycyhKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEpTT2JqZWN0Ojpub3RpZnlQcmVzZW5jZU9mSW5kZXhl
ZEFjY2Vzc29ycyhWTSYgdm0pCiB7CiAgICAgaWYgKG1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3Nl
cygpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEs
IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgp
LCBBZGRJbmRleGVkQWNjZXNzb3JzKSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKCksIEFkZEluZGV4ZWRBY2Nlc3Nv
cnMpKTsKICAgICAKLSAgICBpZiAoIWdsb2JhbERhdGEucHJvdG90eXBlTWFwLmlzUHJvdG90eXBl
KHRoaXMpKQorICAgIGlmICghdm0ucHJvdG90eXBlTWFwLmlzUHJvdG90eXBlKHRoaXMpKQogICAg
ICAgICByZXR1cm47CiAgICAgCi0gICAgZ2xvYmFsT2JqZWN0KCktPmhhdmVBQmFkVGltZShnbG9i
YWxEYXRhKTsKKyAgICBnbG9iYWxPYmplY3QoKS0+aGF2ZUFCYWRUaW1lKHZtKTsKIH0KIAotQnV0
dGVyZmx5KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBzaXplX3QgZWxlbWVudFNpemUpCitCdXR0
ZXJmbHkqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2UoVk0mIHZtLCB1bnNp
Z25lZCBsZW5ndGgsIHNpemVfdCBlbGVtZW50U2l6ZSkKIHsKICAgICBBU1NFUlQobGVuZ3RoIDwg
TUFYX0FSUkFZX0lOREVYKTsKICAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKTsKQEAgLTYxMiw1MyArNjEyLDUzIEBAIEJ1dHRlcmZseSogSlNPYmpl
Y3Q6OmNyZWF0ZUluaXRpYWxJbmRleGUKICAgICBBU1NFUlQoIWluZGV4aW5nU2hvdWxkQmVTcGFy
c2UoKSk7CiAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCBCQVNF
X1ZFQ1RPUl9MRU4pOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpj
cmVhdGVPckdyb3dBcnJheVJpZ2h0KG1fYnV0dGVyZmx5LCAKLSAgICAgICAgZ2xvYmFsRGF0YSwg
c3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwK
KyAgICAgICAgdm0sIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSwgZmFsc2UsIDAsCiAgICAgICAgIGVsZW1lbnRTaXplICogdmVjdG9yTGVuZ3RoKTsKICAgICBu
ZXdCdXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+
c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseTsK
IH0KIAotQnV0dGVyZmx5KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbFVuZGVjaWRlZChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK0J1dHRlcmZseSogSlNPYmplY3Q6
OmNyZWF0ZUluaXRpYWxVbmRlY2lkZWQoVk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAg
QnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2UoZ2xv
YmFsRGF0YSwgbGVuZ3RoLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKLSAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERh
dGEsIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZVVuZGVjaWRlZCk7Ci0gICAgc2V0QnV0dGVyZmx5KGds
b2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKKyAgICBCdXR0ZXJmbHkqIG5l
d0J1dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSh2bSwgbGVuZ3RoLCBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVVbmRl
Y2lkZWQpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUp
OwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHk7CiB9CiAKLUNvbnRpZ3VvdXNKU1ZhbHVlcyBKU09i
amVjdDo6Y3JlYXRlSW5pdGlhbEludDMyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWdu
ZWQgbGVuZ3RoKQorQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsSW50
MzIoVk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJm
bHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2UoZ2xvYmFsRGF0YSwgbGVuZ3RoLCBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKTsKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBBbGxv
Y2F0ZUludDMyKTsKLSAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBu
ZXdTdHJ1Y3R1cmUpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlh
bEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAg
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRp
b24odm0sIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZUludDMyKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0s
IG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5j
b250aWd1b3VzSW50MzIoKTsKIH0KIAotQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNyZWF0
ZUluaXRpYWxEb3VibGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgp
CitDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbERvdWJsZShWTSYgdm0s
IHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0
ZUluaXRpYWxJbmRleGVkU3RvcmFnZShnbG9iYWxEYXRhLCBsZW5ndGgsIHNpemVvZihkb3VibGUp
KTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVkU3Rv
cmFnZSh2bSwgbGVuZ3RoLCBzaXplb2YoZG91YmxlKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
bmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAgICAgbmV3QnV0dGVyZmx5
LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBRTmFOOwotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0
dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0
dXJlKCksIEFsbG9jYXRlRG91YmxlKTsKLSAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3
QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0g
U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCBBbGxvY2F0
ZURvdWJsZSk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVy
ZSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpOwogfQogCi1D
b250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxDb250aWd1b3VzKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorQ29udGlndW91c0pTVmFsdWVz
IEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQ29udGlndW91cyhWTSYgdm0sIHVuc2lnbmVkIGxlbmd0
aCkKIHsKLSAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVk
U3RvcmFnZShnbG9iYWxEYXRhLCBsZW5ndGgsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwotICAg
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRp
b24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIEFsbG9jYXRlQ29udGlndW91cyk7Ci0gICAgc2V0
QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKKyAgICBC
dXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSh2bSwg
bGVuZ3RoLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwg
QWxsb2NhdGVDb250aWd1b3VzKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSwg
bmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CiB9
CiAKLUFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQor
QXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKFZNJiB2bSwgdW5zaWdu
ZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCiB7CiAgICAgSW5kZXhpbmdUeXBlIG9s
ZFR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCk7CiAgICAgQVNTRVJUX1VOVVNFRChv
bGRUeXBlLCAhaGFzSW5kZXhlZFByb3BlcnRpZXMob2xkVHlwZSkpOwogICAgIEJ1dHRlcmZseSog
bmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KG1fYnV0dGVy
Zmx5LCAKLSAgICAgICAgZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwKKyAgICAgICAgdm0sIHN0cnVjdHVyZSgpLCBzdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCiAgICAgICAgIEFycmF5U3Rv
cmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChuZXdCdXR0
ZXJmbHkpOwogCkBAIC02NjgsNDkgKzY2OCw0OSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpj
cmVhdGVBcnJheVN0b3JhCiAgICAgcmVzdWx0LT5tX3NwYXJzZU1hcC5jbGVhcigpOwogICAgIHJl
c3VsdC0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CiAgICAgcmVzdWx0LT5tX2luZGV4QmlhcyA9
IDA7Ci0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5
VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3Rl
ZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7Ci0gICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEs
IG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwgc3Ry
dWN0dXJlKCktPnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7CisgICAgc2V0QnV0
dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFn
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVh
dGVJbml0aWFsQXJyYXlTdG9yYWdlKFZNJiB2bSkKIHsKLSAgICByZXR1cm4gY3JlYXRlQXJyYXlT
dG9yYWdlKGdsb2JhbERhdGEsIDAsIEJBU0VfVkVDVE9SX0xFTik7CisgICAgcmV0dXJuIGNyZWF0
ZUFycmF5U3RvcmFnZSh2bSwgMCwgQkFTRV9WRUNUT1JfTEVOKTsKIH0KIAotQ29udGlndW91c0pT
VmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9JbnQzMihKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCitDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRU
b0ludDMyKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoaGFzVW5kZWNpZGVkKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkpOwotICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVJ
bnQzMikpOworICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZUludDMyKSk7CiAgICAgcmV0dXJuIG1fYnV0
dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKTsKIH0KIAotQ29udGlndW91c0RvdWJsZXMgSlNPYmpl
Y3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0RvdWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitD
b250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvRG91YmxlKFZNJiB2
bSkKIHsKICAgICBBU1NFUlQoaGFzVW5kZWNpZGVkKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkpOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5n
dGgoKTsgaS0tOykKICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9
IFFOYU47CiAgICAgCi0gICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0cnVjdHVyZTo6bm9u
UHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZURvdWJs
ZSkpOworICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRp
b24odm0sIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZURvdWJsZSkpOwogICAgIHJldHVybiBtX2J1dHRl
cmZseS0+Y29udGlndW91c0RvdWJsZSgpOwogfQogCi1Db250aWd1b3VzSlNWYWx1ZXMgSlNPYmpl
Y3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0NvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KQorQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9Db250aWd1
b3VzKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoaGFzVW5kZWNpZGVkKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkpOwotICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVDb250
aWd1b3VzKSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlKCksIEFsbG9jYXRlQ29udGlndW91cykpOwogICAgIHJldHVy
biBtX2J1dHRlcmZseS0+Y29udGlndW91cygpOwogfQogCi1BcnJheVN0b3JhZ2UqIEpTT2JqZWN0
Ojpjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKQorQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6Y29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlp
bmdFbGVtZW50cyhWTSYgdm0sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCkKIHsKICAgICB1bnNpZ25l
ZCBwdWJsaWNMZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CiAgICAgdW5zaWdu
ZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwog
ICAgIHVuc2lnbmVkIHByb3BlcnR5U2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplKCk7
CiAgICAgCiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQoCi0gICAgICAgIGdsb2JhbERhdGEsIDAsIHByb3BlcnR5Q2FwYWNpdHksIHRy
dWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZWVkZWRMZW5ndGgpKTsKKyAgICAgICAgdm0sIDAs
IHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZWVkZWRMZW5n
dGgpKTsKICAgICAKICAgICBtZW1jcHkoCiAgICAgICAgIG5ld0J1dHRlcmZseS0+cHJvcGVydHlT
dG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCkBAIC03MjcsMjkgKzcyNywyOSBAQCBBcnJheVN0b3Jh
Z2UqIEpTT2JqZWN0Ojpjb25zdHJ1Y3RDb252ZXJ0CiAgICAgcmV0dXJuIG5ld1N0b3JhZ2U7CiB9
CiAKLUFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFn
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0
aW9uLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252
ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UoVk0mIHZtLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24g
dHJhbnNpdGlvbiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKQogewogICAgIEFTU0VSVChoYXNVbmRl
Y2lkZWQoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgCi0gICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlp
bmdFbGVtZW50cyhnbG9iYWxEYXRhLCBuZWVkZWRMZW5ndGgpOworICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxl
bWVudHModm0sIG5lZWRlZExlbmd0aCk7CiAgICAgLy8gTm8gbmVlZCB0byBjb3B5IGVsZW1lbnRz
LgogICAgIAotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9w
ZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHRyYW5zaXRpb24pOwotICAg
IHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBzdG9yYWdlLT5idXR0ZXJmbHkoKSwgbmV3U3RydWN0
dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVy
dHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwgdHJhbnNpdGlvbik7CisgICAgc2V0QnV0dGVy
Zmx5KHZtLCBzdG9yYWdlLT5idXR0ZXJmbHkoKSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4g
c3RvcmFnZTsKIH0KIAotQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRv
QXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTm9uUHJvcGVydHlUcmFuc2l0
aW9uIHRyYW5zaXRpb24pCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVk
VG9BcnJheVN0b3JhZ2UoVk0mIHZtLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikK
IHsKLSAgICByZXR1cm4gY29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEs
IHRyYW5zaXRpb24sIG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgcmV0dXJuIGNv
bnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZSh2bSwgdHJhbnNpdGlvbiwgbV9idXR0ZXJmbHkt
PnZlY3Rvckxlbmd0aCgpKTsKIH0KIAotQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydFVu
ZGVjaWRlZFRvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK0FycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZShWTSYgdm0pCiB7
Ci0gICAgcmV0dXJuIGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKKyAgICByZXR1
cm4gY29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdlKHZtLCBzdHJ1Y3R1cmUoKS0+c3VnZ2Vz
dGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKIH0KIAotQ29udGlndW91c0RvdWJsZXMgSlNP
YmplY3Q6OmNvbnZlcnRJbnQzMlRvRG91YmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK0Nv
bnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0RvdWJsZShWTSYgdm0pCiB7
CiAgICAgQVNTRVJUKGhhc0ludDMyKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOwogICAg
IApAQCAtNzY1LDIzICs3NjUsMjMgQEAgQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZl
cnRJbnQzMgogICAgICAgICAqY3VycmVudEFzRG91YmxlID0gdi5hc0ludDMyKCk7CiAgICAgfQog
ICAgIAotICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5
VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVEb3VibGUpKTsKKyAg
ICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBz
dHJ1Y3R1cmUoKSwgQWxsb2NhdGVEb3VibGUpKTsKICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNv
bnRpZ3VvdXNEb3VibGUoKTsKIH0KIAotQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252
ZXJ0SW50MzJUb0NvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorQ29udGlndW91
c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0NvbnRpZ3VvdXMoVk0mIHZtKQogewog
ICAgIEFTU0VSVChoYXNJbnQzMihzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICAK
LSAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIEFsbG9jYXRlQ29udGlndW91cykpOworICAg
IHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSgpLCBBbGxvY2F0ZUNvbnRpZ3VvdXMpKTsKICAgICByZXR1cm4gbV9idXR0ZXJmbHkt
PmNvbnRpZ3VvdXMoKTsKIH0KIAotQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydEludDMy
VG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBOb25Qcm9wZXJ0eVRyYW5z
aXRpb24gdHJhbnNpdGlvbiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKQorQXJyYXlTdG9yYWdlKiBK
U09iamVjdDo6Y29udmVydEludDMyVG9BcnJheVN0b3JhZ2UoVk0mIHZtLCBOb25Qcm9wZXJ0eVRy
YW5zaXRpb24gdHJhbnNpdGlvbiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKQogewogICAgIEFTU0VS
VChoYXNJbnQzMihzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICAKLSAgICBBcnJh
eVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRo
b3V0Q29weWluZ0VsZW1lbnRzKGdsb2JhbERhdGEsIG5lZWRlZExlbmd0aCk7CisgICAgQXJyYXlT
dG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91
dENvcHlpbmdFbGVtZW50cyh2bSwgbmVlZGVkTGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGktLTspIHsKICAgICAgICAgSlNWYWx1ZSB2
ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKICAgICAgICAgaWYgKCF2KQpA
QCAtNzkwLDIzICs3OTAsMjMgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydEludDMy
VG9BcgogICAgICAgICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7CiAgICAgfQog
ICAgIAotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0
eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHRyYW5zaXRpb24pOwotICAgIHNl
dEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSwgbmV3U3RydWN0
dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVy
dHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwgdHJhbnNpdGlvbik7CisgICAgc2V0QnV0dGVy
Zmx5KHZtLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1
cm4gbmV3U3RvcmFnZTsKIH0KIAotQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydEludDMy
VG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBOb25Qcm9wZXJ0eVRyYW5z
aXRpb24gdHJhbnNpdGlvbikKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRv
QXJyYXlTdG9yYWdlKFZNJiB2bSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCiB7
Ci0gICAgcmV0dXJuIGNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIHRyYW5z
aXRpb24sIG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgcmV0dXJuIGNvbnZlcnRJ
bnQzMlRvQXJyYXlTdG9yYWdlKHZtLCB0cmFuc2l0aW9uLCBtX2J1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCkpOwogfQogCi1BcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FycmF5
U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0
Ojpjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIGNvbnZl
cnRJbnQzMlRvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRB
cnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOworICAgIHJldHVybiBjb252ZXJ0SW50MzJUb0FycmF5
U3RvcmFnZSh2bSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24o
KSk7CiB9CiAKIHRlbXBsYXRlPEpTT2JqZWN0OjpEb3VibGVUb0NvbnRpZ3VvdXNNb2RlIG1vZGU+
Ci1Db250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmdlbmVyaWNDb252ZXJ0RG91YmxlVG9Db250
aWd1b3VzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK0NvbnRpZ3VvdXNKU1ZhbHVlcyBKU09i
amVjdDo6Z2VuZXJpY0NvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoVk0mIHZtKQogewogICAgIEFT
U0VSVChoYXNEb3VibGUoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgCkBAIC04
MzEsMjUgKzgzMSwyNSBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmdlbmVyaWNDb252
CiAgICAgICAgIGN1cnJlbnRBc1ZhbHVlLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOwogICAg
IH0KICAgICAKLSAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgU3RydWN0dXJlOjpub25Qcm9w
ZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIEFsbG9jYXRlQ29udGlndW91
cykpOworICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRp
b24odm0sIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZUNvbnRpZ3VvdXMpKTsKICAgICByZXR1cm4gbV9i
dXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKIH0KIAotQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0
Ojpjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK0Nv
bnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQ29udGlndW91cyhWTSYg
dm0pCiB7Ci0gICAgcmV0dXJuIGdlbmVyaWNDb252ZXJ0RG91YmxlVG9Db250aWd1b3VzPEVuY29k
ZVZhbHVlQXNEb3VibGU+KGdsb2JhbERhdGEpOworICAgIHJldHVybiBnZW5lcmljQ29udmVydERv
dWJsZVRvQ29udGlndW91czxFbmNvZGVWYWx1ZUFzRG91YmxlPih2bSk7CiB9CiAKLUNvbnRpZ3Vv
dXNKU1ZhbHVlcyBKU09iamVjdDo6cmFnZUNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQorQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpyYWdlQ29u
dmVydERvdWJsZVRvQ29udGlndW91cyhWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIGdlbmVyaWNDb252
ZXJ0RG91YmxlVG9Db250aWd1b3VzPFJhZ2VDb252ZXJ0RG91YmxlVG9WYWx1ZT4oZ2xvYmFsRGF0
YSk7CisgICAgcmV0dXJuIGdlbmVyaWNDb252ZXJ0RG91YmxlVG9Db250aWd1b3VzPFJhZ2VDb252
ZXJ0RG91YmxlVG9WYWx1ZT4odm0pOwogfQogCi1BcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252
ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBOb25Qcm9w
ZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKQorQXJyYXlT
dG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKFZNJiB2bSwgTm9u
UHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCkKIHsK
ICAgICBBU1NFUlQoaGFzRG91YmxlKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOwogICAg
IAotICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5
U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHMoZ2xvYmFsRGF0YSwgbmVlZGVkTGVuZ3RoKTsK
KyAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0
b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCBuZWVkZWRMZW5ndGgpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaS0tOykgewogICAgICAg
ICBkb3VibGUgdmFsdWUgPSBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwogICAg
ICAgICBpZiAodmFsdWUgIT0gdmFsdWUpCkBAIC04NTgsMjYgKzg1OCwyNiBAQCBBcnJheVN0b3Jh
Z2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BCiAgICAgICAgIG5ld1N0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IrKzsKICAgICB9CiAgICAgCi0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUoKSwgdHJhbnNpdGlvbik7Ci0gICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld1N0b3Jh
Z2UtPmJ1dHRlcmZseSgpLCBuZXdTdHJ1Y3R1cmUpOworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0
dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCB0
cmFuc2l0aW9uKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgp
LCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdTdG9yYWdlOwogfQogCi1BcnJheVN0b3Jh
Z2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKK0FycmF5U3RvcmFn
ZSogSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZShWTSYgdm0sIE5vblByb3Bl
cnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQogewotICAgIHJldHVybiBjb252ZXJ0RG91YmxlVG9B
cnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgbV9idXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpKTsKKyAgICByZXR1cm4gY29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKHZtLCB0cmFu
c2l0aW9uLCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwogfQogCi1BcnJheVN0b3JhZ2Uq
IEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQorQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQXJyYXlTdG9y
YWdlKFZNJiB2bSkKIHsKLSAgICByZXR1cm4gY29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKGds
b2JhbERhdGEsIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkp
OworICAgIHJldHVybiBjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgp
LT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOwogfQogCi1BcnJheVN0b3JhZ2Uq
IEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24sIHVuc2lnbmVkIG5l
ZWRlZExlbmd0aCkKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9B
cnJheVN0b3JhZ2UoVk0mIHZtLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbiwgdW5z
aWduZWQgbmVlZGVkTGVuZ3RoKQogewogICAgIEFTU0VSVChoYXNDb250aWd1b3VzKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkpOwogICAgIAotICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFn
ZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHMo
Z2xvYmFsRGF0YSwgbmVlZGVkTGVuZ3RoKTsKKyAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2Ug
PSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZt
LCBuZWVkZWRMZW5ndGgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IG1fYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKTsgaS0tOykgewogICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29u
dGlndW91cygpW2ldLmdldCgpOwogICAgICAgICBpZiAoIXYpCkBAIC04ODYsNzEgKzg4Niw3MSBA
QCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91CiAgICAgICAgIG5ld1N0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKICAgICB9CiAgICAgCi0gICAgU3RydWN0dXJl
KiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUoKSwgdHJhbnNpdGlvbik7Ci0gICAgc2V0QnV0dGVyZmx5KGdsb2JhbERh
dGEsIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpLCBuZXdTdHJ1Y3R1cmUpOworICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld1N0b3JhZ2Ut
PmJ1dHRlcmZseSgpLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdTdG9yYWdlOwogfQog
Ci1BcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRp
b24pCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9y
YWdlKFZNJiB2bSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCiB7Ci0gICAgcmV0
dXJuIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgdHJhbnNpdGlv
biwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICByZXR1cm4gY29udmVydENvbnRp
Z3VvdXNUb0FycmF5U3RvcmFnZSh2bSwgdHJhbnNpdGlvbiwgbV9idXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpKTsKIH0KIAotQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNU
b0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitBcnJheVN0b3JhZ2UqIEpT
T2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKFZNJiB2bSkKIHsKLSAgICBy
ZXR1cm4gY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUoKS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKKyAgICByZXR1cm4gY29u
dmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZSh2bSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZEFy
cmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7CiB9CiAKLXZvaWQgSlNPYmplY3Q6OmNvbnZlcnRVbmRl
Y2lkZWRGb3JWYWx1ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgdmFsdWUpCit2
b2lkIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkRm9yVmFsdWUoVk0mIHZtLCBKU1ZhbHVlIHZh
bHVlKQogewogICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpIHsKLSAgICAgICAgY29udmVydFVuZGVj
aWRlZFRvSW50MzIoZ2xvYmFsRGF0YSk7CisgICAgICAgIGNvbnZlcnRVbmRlY2lkZWRUb0ludDMy
KHZtKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAodmFsdWUuaXNEb3Vi
bGUoKSkgewotICAgICAgICBjb252ZXJ0VW5kZWNpZGVkVG9Eb3VibGUoZ2xvYmFsRGF0YSk7Cisg
ICAgICAgIGNvbnZlcnRVbmRlY2lkZWRUb0RvdWJsZSh2bSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCi0gICAgY29udmVydFVuZGVjaWRlZFRvQ29udGlndW91cyhnbG9iYWxEYXRhKTsK
KyAgICBjb252ZXJ0VW5kZWNpZGVkVG9Db250aWd1b3VzKHZtKTsKIH0KIAotdm9pZCBKU09iamVj
dDo6Y29udmVydEludDMyRm9yVmFsdWUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVl
IHZhbHVlKQordm9pZCBKU09iamVjdDo6Y29udmVydEludDMyRm9yVmFsdWUoVk0mIHZtLCBKU1Zh
bHVlIHZhbHVlKQogewogICAgIEFTU0VSVCghdmFsdWUuaXNJbnQzMigpKTsKICAgICAKICAgICBp
ZiAodmFsdWUuaXNEb3VibGUoKSkgewotICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShnbG9i
YWxEYXRhKTsKKyAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUodm0pOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIAotICAgIGNvbnZlcnRJbnQzMlRvQ29udGlndW91cyhnbG9iYWxEYXRh
KTsKKyAgICBjb252ZXJ0SW50MzJUb0NvbnRpZ3VvdXModm0pOwogfQogCi12b2lkIEpTT2JqZWN0
OjpzZXRJbmRleFF1aWNrbHlUb1VuZGVjaWRlZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVu
c2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU09iamVjdDo6c2V0SW5kZXhRdWlj
a2x5VG9VbmRlY2lkZWQoVk0mIHZtLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSkKIHsK
ICAgICBBU1NFUlQoaW5kZXggPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwogICAgIEFT
U0VSVChpbmRleCA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgY29udmVydFVu
ZGVjaWRlZEZvclZhbHVlKGdsb2JhbERhdGEsIHZhbHVlKTsKLSAgICBzZXRJbmRleFF1aWNrbHko
Z2xvYmFsRGF0YSwgaW5kZXgsIHZhbHVlKTsKKyAgICBjb252ZXJ0VW5kZWNpZGVkRm9yVmFsdWUo
dm0sIHZhbHVlKTsKKyAgICBzZXRJbmRleFF1aWNrbHkodm0sIGluZGV4LCB2YWx1ZSk7CiB9CiAK
LXZvaWQgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvRG91YmxlT3JDb250aWd1b3VzV2hpbGVQZXJm
b3JtaW5nU2V0SW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbmRleCwg
SlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvRG91YmxlT3JDb250
aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXgoVk0mIHZtLCB1bnNpZ25lZCBpbmRleCwgSlNW
YWx1ZSB2YWx1ZSkKIHsKICAgICBBU1NFUlQoIXZhbHVlLmlzSW50MzIoKSk7Ci0gICAgY29udmVy
dEludDMyRm9yVmFsdWUoZ2xvYmFsRGF0YSwgdmFsdWUpOwotICAgIHNldEluZGV4UXVpY2tseShn
bG9iYWxEYXRhLCBpbmRleCwgdmFsdWUpOworICAgIGNvbnZlcnRJbnQzMkZvclZhbHVlKHZtLCB2
YWx1ZSk7CisgICAgc2V0SW5kZXhRdWlja2x5KHZtLCBpbmRleCwgdmFsdWUpOwogfQogCi12b2lk
IEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5k
ZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1
ZSkKK3ZvaWQgSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1p
bmdTZXRJbmRleChWTSYgdm0sIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlKQogewogICAg
IEFTU0VSVCghdmFsdWUuaXNOdW1iZXIoKSB8fCB2YWx1ZS5hc051bWJlcigpICE9IHZhbHVlLmFz
TnVtYmVyKCkpOwotICAgIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoZ2xvYmFsRGF0YSk7Ci0g
ICAgc2V0SW5kZXhRdWlja2x5KGdsb2JhbERhdGEsIGluZGV4LCB2YWx1ZSk7CisgICAgY29udmVy
dERvdWJsZVRvQ29udGlndW91cyh2bSk7CisgICAgc2V0SW5kZXhRdWlja2x5KHZtLCBpbmRleCwg
dmFsdWUpOwogfQogCi1Db250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmVuc3VyZUludDMyU2xv
dyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6
OmVuc3VyZUludDMyU2xvdyhWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8p
KTsKICAgICAKQEAgLTk1OCwxMCArOTU4LDEwIEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVj
dDo6ZW5zdXJlSW50MzIKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAg
ICAgaWYgKFVOTElLRUxZKGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSB8fCBzdHJ1Y3R1cmUoKS0+
bmVlZHNTbG93UHV0SW5kZXhpbmcoKSkpCiAgICAgICAgICAgICByZXR1cm4gQ29udGlndW91c0pT
VmFsdWVzKCk7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJbml0aWFsSW50MzIoZ2xvYmFsRGF0YSwg
MCk7CisgICAgICAgIHJldHVybiBjcmVhdGVJbml0aWFsSW50MzIodm0sIDApOwogICAgICAgICAK
ICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIHJldHVybiBj
b252ZXJ0VW5kZWNpZGVkVG9JbnQzMihnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIGNvbnZl
cnRVbmRlY2lkZWRUb0ludDMyKHZtKTsKICAgICAgICAgCiAgICAgY2FzZSBBTExfRE9VQkxFX0lO
REVYSU5HX1RZUEVTOgogICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CkBA
IC05NzQsNyArOTc0LDcgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjplbnN1cmVJbnQz
MgogICAgIH0KIH0KIAotQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmVuc3VyZURvdWJsZVNs
b3coSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6
OmVuc3VyZURvdWJsZVNsb3coVk0mIHZtKQogewogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZv
KSk7CiAgICAgCkBAIC05ODIsMTMgKzk4MiwxMyBAQCBDb250aWd1b3VzRG91YmxlcyBKU09iamVj
dDo6ZW5zdXJlRG91YmxlCiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAg
ICAgIGlmIChVTkxJS0VMWShpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkgfHwgc3RydWN0dXJlKCkt
Pm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpKQogICAgICAgICAgICAgcmV0dXJuIENvbnRpZ3VvdXNE
b3VibGVzKCk7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJbml0aWFsRG91YmxlKGdsb2JhbERhdGEs
IDApOworICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlhbERvdWJsZSh2bSwgMCk7CiAgICAgICAg
IAogICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgcmV0dXJu
IGNvbnZlcnRVbmRlY2lkZWRUb0RvdWJsZShnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIGNv
bnZlcnRVbmRlY2lkZWRUb0RvdWJsZSh2bSk7CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0lOVDMy
X0lOREVYSU5HX1RZUEVTOgotICAgICAgICByZXR1cm4gY29udmVydEludDMyVG9Eb3VibGUoZ2xv
YmFsRGF0YSk7CisgICAgICAgIHJldHVybiBjb252ZXJ0SW50MzJUb0RvdWJsZSh2bSk7CiAgICAg
ICAgIAogICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgY2FzZSBB
TExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKQEAgLTEwMDAsNyArMTAwMCw3IEBAIENv
bnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0OjplbnN1cmVEb3VibGUKICAgICB9CiB9CiAKLUNvbnRp
Z3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6ZW5zdXJlQ29udGlndW91c1Nsb3coSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBEb3VibGVUb0NvbnRpZ3VvdXNNb2RlIG1vZGUpCitDb250aWd1b3VzSlNW
YWx1ZXMgSlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNTbG93KFZNJiB2bSwgRG91YmxlVG9Db250
aWd1b3VzTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiAgICAg
CkBAIC0xMDA4LDE4ICsxMDA4LDE4IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6ZW5z
dXJlQ29udGkKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgaWYg
KFVOTElLRUxZKGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSB8fCBzdHJ1Y3R1cmUoKS0+bmVlZHNT
bG93UHV0SW5kZXhpbmcoKSkpCiAgICAgICAgICAgICByZXR1cm4gQ29udGlndW91c0pTVmFsdWVz
KCk7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJbml0aWFsQ29udGlndW91cyhnbG9iYWxEYXRhLCAw
KTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKHZtLCAwKTsKICAgICAg
ICAgCiAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgotICAgICAgICByZXR1
cm4gY29udmVydFVuZGVjaWRlZFRvQ29udGlndW91cyhnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0
dXJuIGNvbnZlcnRVbmRlY2lkZWRUb0NvbnRpZ3VvdXModm0pOwogICAgICAgICAKICAgICBjYXNl
IEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRJbnQzMlRv
Q29udGlndW91cyhnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRJbnQzMlRvQ29u
dGlndW91cyh2bSk7CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBF
UzoKICAgICAgICAgaWYgKG1vZGUgPT0gUmFnZUNvbnZlcnREb3VibGVUb1ZhbHVlKQotICAgICAg
ICAgICAgcmV0dXJuIHJhZ2VDb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKGdsb2JhbERhdGEpOwot
ICAgICAgICByZXR1cm4gY29udmVydERvdWJsZVRvQ29udGlndW91cyhnbG9iYWxEYXRhKTsKKyAg
ICAgICAgICAgIHJldHVybiByYWdlQ29udmVydERvdWJsZVRvQ29udGlndW91cyh2bSk7CisgICAg
ICAgIHJldHVybiBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKHZtKTsKICAgICAgICAgCiAgICAg
Y2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgcmV0dXJuIENv
bnRpZ3VvdXNKU1ZhbHVlcygpOwpAQCAtMTAzMCw0NSArMTAzMCw0NSBAQCBDb250aWd1b3VzSlNW
YWx1ZXMgSlNPYmplY3Q6OmVuc3VyZUNvbnRpCiAgICAgfQogfQogCi1Db250aWd1b3VzSlNWYWx1
ZXMgSlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNTbG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKK0NvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6ZW5zdXJlQ29udGlndW91c1Nsb3coVk0m
IHZtKQogewotICAgIHJldHVybiBlbnN1cmVDb250aWd1b3VzU2xvdyhnbG9iYWxEYXRhLCBFbmNv
ZGVWYWx1ZUFzRG91YmxlKTsKKyAgICByZXR1cm4gZW5zdXJlQ29udGlndW91c1Nsb3codm0sIEVu
Y29kZVZhbHVlQXNEb3VibGUpOwogfQogCi1Db250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OnJh
Z2VFbnN1cmVDb250aWd1b3VzU2xvdyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitDb250aWd1
b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OnJhZ2VFbnN1cmVDb250aWd1b3VzU2xvdyhWTSYgdm0pCiB7
Ci0gICAgcmV0dXJuIGVuc3VyZUNvbnRpZ3VvdXNTbG93KGdsb2JhbERhdGEsIFJhZ2VDb252ZXJ0
RG91YmxlVG9WYWx1ZSk7CisgICAgcmV0dXJuIGVuc3VyZUNvbnRpZ3VvdXNTbG93KHZtLCBSYWdl
Q29udmVydERvdWJsZVRvVmFsdWUpOwogfQogCi1BcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1
cmVBcnJheVN0b3JhZ2VTbG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK0FycmF5U3RvcmFn
ZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZVNsb3coVk0mIHZtKQogewogICAgIEFTU0VS
VChpbmhlcml0cygmc19pbmZvKSk7CiAgICAgCiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAg
ICAgaWYgKFVOTElLRUxZKGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlKGdsb2JhbERhdGEpOwotICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFn
ZShnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIHJldHVybiBlbnN1cmVBcnJheVN0b3JhZ2VFeGlz
dHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUodm0pOworICAgICAgICByZXR1cm4gY3Jl
YXRlSW5pdGlhbEFycmF5U3RvcmFnZSh2bSk7CiAgICAgICAgIAogICAgIGNhc2UgQUxMX1VOREVD
SURFRF9JTkRFWElOR19UWVBFUzoKICAgICAgICAgQVNTRVJUKCFpbmRleGluZ1Nob3VsZEJlU3Bh
cnNlKCkpOwogICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGlu
ZygpKTsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZShnbG9i
YWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZSh2
bSk7CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgogICAgICAg
ICBBU1NFUlQoIWluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSk7CiAgICAgICAgIEFTU0VSVCghc3Ry
dWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpOwotICAgICAgICByZXR1cm4gY29udmVy
dEludDMyVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBjb252ZXJ0
SW50MzJUb0FycmF5U3RvcmFnZSh2bSk7CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0RPVUJMRV9J
TkRFWElOR19UWVBFUzoKICAgICAgICAgQVNTRVJUKCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkp
OwogICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKTsK
LSAgICAgICAgcmV0dXJuIGNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsK
KyAgICAgICAgcmV0dXJuIGNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSh2bSk7CiAgICAgICAg
IAogICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIEFTU0VS
VCghaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKTsKICAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUo
KS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSk7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0Q29udGln
dW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4gY29udmVydENv
bnRpZ3VvdXNUb0FycmF5U3RvcmFnZSh2bSk7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMDc2LDMwICsxMDc2LDMwIEBA
IEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmEKICAgICB9CiB9CiAKLUFy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitBcnJheVN0b3Jh
Z2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGUoVk0mIHZtKQogewogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSB7CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAg
Y3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApOwotICAgICAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworICAg
ICAgICBjcmVhdGVBcnJheVN0b3JhZ2Uodm0sIDAsIDApOworICAgICAgICBTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKHZtKTsKICAgICAgICAgbWFwLT5z
ZXRTcGFyc2VNb2RlKCk7CiAgICAgICAgIHJldHVybiBhcnJheVN0b3JhZ2UoKTsKICAgICB9CiAg
ICAgICAgIAogICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKLSAgICAgICAg
cmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5
RXhpc3RzKGdsb2JhbERhdGEsIGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZShnbG9iYWxE
YXRhKSk7CisgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJy
YXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgY29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdl
KHZtKSk7CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgotICAg
ICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFs
cmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgY29udmVydEludDMyVG9BcnJheVN0b3JhZ2UoZ2xvYmFs
RGF0YSkpOworICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFy
cmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIGNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKHZt
KSk7CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzoKLSAgICAg
ICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJl
YWR5RXhpc3RzKGdsb2JhbERhdGEsIGNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZShnbG9iYWxE
YXRhKSk7CisgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJy
YXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgY29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKHZt
KSk7CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0g
ICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdl
QWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdl
KGdsb2JhbERhdGEpKTsKKyAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBjb252ZXJ0Q29udGlndW91c1RvQXJy
YXlTdG9yYWdlKHZtKSk7CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5E
RVhJTkdfVFlQRVM6Ci0gICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVX
aGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCkpOworICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
V2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKSk7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC0xMTA3
LDI5ICsxMTA3LDI5IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmEK
ICAgICB9CiB9CiAKLXZvaWQgSlNPYmplY3Q6OnN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEpTT2JqZWN0Ojpzd2l0Y2hUb1Nsb3dQdXRB
cnJheVN0b3JhZ2UoVk0mIHZtKQogewogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSB7CiAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgotICAgICAg
ICBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgQWxsb2NhdGVTbG93
UHV0QXJyYXlTdG9yYWdlKTsKKyAgICAgICAgY29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdl
KHZtLCBBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2UpOwogICAgICAgICBicmVhazsKICAgICAg
ICAgCiAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIGNvbnZlcnRJ
bnQzMlRvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIEFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFn
ZSk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKHZtLCBBbGxvY2F0ZVNsb3dQ
dXRBcnJheVN0b3JhZ2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBBTExf
RE9VQkxFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICBjb252ZXJ0RG91YmxlVG9BcnJheVN0b3Jh
Z2UoZ2xvYmFsRGF0YSwgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlKTsKKyAgICAgICAgY29u
dmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKHZtLCBBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2Up
OwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRF
WElOR19UWVBFUzoKLSAgICAgICAgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9i
YWxEYXRhLCBBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2UpOworICAgICAgICBjb252ZXJ0Q29u
dGlndW91c1RvQXJyYXlTdG9yYWdlKHZtLCBBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2UpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CiAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgU3RydWN0dXJl
KiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUoKSwgU3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKTsKLSAgICAgICAg
c2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIG5ld1N0cnVjdHVyZSk7CisgICAgICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSgpLCBTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UpOworICAgICAgICBzZXRTdHJ1
Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
CkBAIC0xMTQzLDIzICsxMTQzLDIzIEBAIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwo
SlNPYmplY3QKIHsKICAgICBBU1NFUlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgJiYgIShhdHRy
aWJ1dGVzICYgQWNjZXNzb3IpKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBvYmpl
Y3QtPnB1dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4oZXhlYy0+Z2xv
YmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzLCBzbG90LCBnZXRDYWxs
YWJsZU9iamVjdCh2YWx1ZSkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9k
ZURlZmluZU93blByb3BlcnR5PihleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRy
aWJ1dGVzLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOwogfQogCi12b2lkIEpTT2Jq
ZWN0OjpzZXRQcm90b3R5cGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3Rv
dHlwZSkKK3ZvaWQgSlNPYmplY3Q6OnNldFByb3RvdHlwZShWTSYgdm0sIEpTVmFsdWUgcHJvdG90
eXBlKQogewogICAgIEFTU0VSVChwcm90b3R5cGUpOwogICAgIGlmIChwcm90b3R5cGUuaXNPYmpl
Y3QoKSkKLSAgICAgICAgZ2xvYmFsRGF0YS5wcm90b3R5cGVNYXAuYWRkUHJvdG90eXBlKGFzT2Jq
ZWN0KHByb3RvdHlwZSkpOworICAgICAgICB2bS5wcm90b3R5cGVNYXAuYWRkUHJvdG90eXBlKGFz
T2JqZWN0KHByb3RvdHlwZSkpOwogICAgIAotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0g
U3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSgpLCBwcm90b3R5cGUpOwotICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBuZXdTdHJ1Y3R1
cmUpOworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpjaGFuZ2VQcm90
b3R5cGVUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUoKSwgcHJvdG90eXBlKTsKKyAgICBzZXRTdHJ1
Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgCiAgICAgaWYgKCFuZXdTdHJ1Y3R1cmUtPmFu
eU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIGlmIChnbG9iYWxEYXRhLnByb3RvdHlwZU1hcC5pc1Byb3RvdHlwZSh0
aGlzKSkgewotICAgICAgICBuZXdTdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpLT5oYXZlQUJhZFRp
bWUoZ2xvYmFsRGF0YSk7CisgICAgaWYgKHZtLnByb3RvdHlwZU1hcC5pc1Byb3RvdHlwZSh0aGlz
KSkgeworICAgICAgICBuZXdTdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpLT5oYXZlQUJhZFRpbWUo
dm0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMTE2OSwxMCArMTE2OSwxMCBA
QCB2b2lkIEpTT2JqZWN0OjpzZXRQcm90b3R5cGUoSlNHbG9iYWxEYXRhCiAgICAgaWYgKHNob3Vs
ZFVzZVNsb3dQdXQoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIHN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKKyAg
ICBzd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2Uodm0pOwogfQogCi1ib29sIEpTT2JqZWN0Ojpz
ZXRQcm90b3R5cGVXaXRoQ3ljbGVDaGVjayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFs
dWUgcHJvdG90eXBlKQorYm9vbCBKU09iamVjdDo6c2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlY2so
Vk0mIHZtLCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsKICAgICBKU1ZhbHVlIGNoZWNrRm9yID0gdGhp
czsKICAgICBpZiAodGhpcy0+aXNHbG9iYWxPYmplY3QoKSkKQEAgLTExODQsNyArMTE4NCw3IEBA
IGJvb2wgSlNPYmplY3Q6OnNldFByb3RvdHlwZVdpdGhDeWNsZUNoZWMKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgbmV4dFByb3RvdHlwZSA9IGFzT2JqZWN0KG5leHRQcm90b3R5
cGUpLT5wcm90b3R5cGUoKTsKICAgICB9Ci0gICAgc2V0UHJvdG90eXBlKGdsb2JhbERhdGEsIHBy
b3RvdHlwZSk7CisgICAgc2V0UHJvdG90eXBlKHZtLCBwcm90b3R5cGUpOwogICAgIHJldHVybiB0
cnVlOwogfQogCkBAIC0xMjA0LDIxICsxMjA0LDIxIEBAIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVj
dEFjY2Vzc29yKEV4ZWNTdGEKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgcHV0RGlyZWN0SW50ZXJu
YWw8UHV0TW9kZURlZmluZU93blByb3BlcnR5PihnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBhdHRyaWJ1dGVzLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOworICAgIHB1
dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4odm0sIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIGF0dHJpYnV0ZXMsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7CiAK
ICAgICAvLyBwdXREaXJlY3Qgd2lsbCBjaGFuZ2Ugb3VyIFN0cnVjdHVyZSBpZiB3ZSBhZGQgYSBu
ZXcgcHJvcGVydHkuIEZvcgogICAgIC8vIGdldHRlcnMgYW5kIHNldHRlcnMsIHRob3VnaCwgd2Ug
YWxzbyBuZWVkIHRvIGNoYW5nZSBvdXIgU3RydWN0dXJlCiAgICAgLy8gaWYgd2Ugb3ZlcnJpZGUg
YW4gZXhpc3Rpbmcgbm9uLWdldHRlciBvciBub24tc2V0dGVyLgogICAgIGlmIChzbG90LnR5cGUo
KSAhPSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KQotICAgICAgICBzZXRTdHJ1Y3R1cmUo
Z2xvYmFsRGF0YSwgU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKGdsb2JhbERh
dGEsIHN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgc2V0
U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpKTsKIAogICAgIGlmIChhdHRyaWJ1
dGVzICYgUmVhZE9ubHkpCiAgICAgICAgIHN0cnVjdHVyZSgpLT5zZXRDb250YWluc1JlYWRPbmx5
UHJvcGVydGllcygpOwogCi0gICAgc3RydWN0dXJlKCktPnNldEhhc0dldHRlclNldHRlclByb3Bl
cnRpZXMocHJvcGVydHlOYW1lID09IGdsb2JhbERhdGEucHJvcGVydHlOYW1lcy0+dW5kZXJzY29y
ZVByb3RvKTsKKyAgICBzdHJ1Y3R1cmUoKS0+c2V0SGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyhw
cm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKTsKIH0KIAog
Ym9vbCBKU09iamVjdDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKSBjb25zdApAQCAtMTI0NywxNiArMTI0NywxNiBAQCBib29sIEpTT2JqZWN0
OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlCiAKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwog
ICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICBpZiAoaXNWYWxpZE9mZnNldCh0aGlzT2Jq
ZWN0LT5zdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBh
dHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKSkpIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBE
b250RGVsZXRlICYmICFleGVjLT5nbG9iYWxEYXRhKCkuaXNJbkRlZmluZU93blByb3BlcnR5KCkp
CisgICAgaWYgKGlzVmFsaWRPZmZzZXQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPmdldChleGVj
LT52bSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpKSkgeworICAg
ICAgICBpZiAoYXR0cmlidXRlcyAmIERvbnREZWxldGUgJiYgIWV4ZWMtPnZtKCkuaXNJbkRlZmlu
ZU93blByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHRoaXNP
YmplY3QtPnJlbW92ZURpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7Cisg
ICAgICAgIHRoaXNPYmplY3QtPnJlbW92ZURpcmVjdChleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBMb29rIGluIHRoZSBzdGF0
aWMgaGFzaHRhYmxlIG9mIHByb3BlcnRpZXMKICAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0g
dGhpc09iamVjdC0+ZmluZFByb3BlcnR5SGFzaEVudHJ5KGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0g
ICAgaWYgKGVudHJ5ICYmIGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBEb250RGVsZXRlICYmICFleGVj
LT5nbG9iYWxEYXRhKCkuaXNJbkRlZmluZU93blByb3BlcnR5KCkpCisgICAgaWYgKGVudHJ5ICYm
IGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBEb250RGVsZXRlICYmICFleGVjLT52bSgpLmlzSW5EZWZp
bmVPd25Qcm9wZXJ0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7IC8vIHRoaXMgYnVpbHRpbiBw
cm9wZXJ0eSBjYW4ndCBiZSBkZWxldGVkCiAKICAgICAvLyBGSVhNRTogU2hvdWxkIHRoZSBjb2Rl
IGhlcmUgYWN0dWFsbHkgZG8gc29tZSBkZWxldGlvbj8KQEAgLTE0MzAsNyArMTQzMCw3IEBAIGJv
b2wgSlNPYmplY3Q6OnByb3BlcnR5SXNFbnVtZXJhYmxlKEV4ZWMKIGJvb2wgSlNPYmplY3Q6Omdl
dFByb3BlcnR5U3BlY2lmaWNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTQ2VsbComIHNwZWNpZmljVmFsdWUpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQg
YXR0cmlidXRlczsKLSAgICBpZiAoaXNWYWxpZE9mZnNldChzdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKSkp
CisgICAgaWYgKGlzVmFsaWRPZmZzZXQoc3RydWN0dXJlKCktPmdldChleGVjLT52bSgpLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICAvLyBUaGlzIGNvdWxkIGJlIGEgZnVuY3Rpb24gd2l0aGluIHRoZSBzdGF0aWMg
dGFibGU/IC0gc2hvdWxkIHByb2JhYmx5CkBAIC0xNTM1LDcgKzE1MzUsNyBAQCB2b2lkIEpTT2Jq
ZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtCiAgICAgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVz
KGV4ZWMsIG9iamVjdC0+Y2xhc3NJbmZvKCksIHByb3BlcnR5TmFtZXMsIG1vZGUsIG9iamVjdC0+
c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpKTsKIAogICAgIGJvb2wgY2FuQ2FjaGVQcm9wZXJ0aWVz
RnJvbVN0cnVjdHVyZSA9ICFwcm9wZXJ0eU5hbWVzLnNpemUoKTsKLSAgICBvYmplY3QtPnN0cnVj
dHVyZSgpLT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCks
IHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIG9iamVjdC0+c3RydWN0dXJlKCktPmdldFByb3Bl
cnR5TmFtZXNGcm9tU3RydWN0dXJlKGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZXMsIG1vZGUpOwog
CiAgICAgaWYgKGNhbkNhY2hlUHJvcGVydGllc0Zyb21TdHJ1Y3R1cmUpCiAgICAgICAgIHByb3Bl
cnR5TmFtZXMuc2V0TnVtQ2FjaGVhYmxlU2xvdHNGb3JPYmplY3Qob2JqZWN0LCBwcm9wZXJ0eU5h
bWVzLnNpemUoKSk7CkBAIC0xNTYyLDI3ICsxNTYyLDI3IEBAIEpTT2JqZWN0KiBKU09iamVjdDo6
dG9UaGlzT2JqZWN0KEpTQ2VsbCoKICAgICByZXR1cm4ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7
CiB9CiAKLXZvaWQgSlNPYmplY3Q6OnNlYWwoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9p
ZCBKU09iamVjdDo6c2VhbChWTSYgdm0pCiB7Ci0gICAgaWYgKGlzU2VhbGVkKGdsb2JhbERhdGEp
KQorICAgIGlmIChpc1NlYWxlZCh2bSkpCiAgICAgICAgIHJldHVybjsKLSAgICBwcmV2ZW50RXh0
ZW5zaW9ucyhnbG9iYWxEYXRhKTsKLSAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgU3RydWN0
dXJlOjpzZWFsVHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSkpOworICAgIHByZXZl
bnRFeHRlbnNpb25zKHZtKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6c2VhbFRy
YW5zaXRpb24odm0sIHN0cnVjdHVyZSgpKSk7CiB9CiAKLXZvaWQgSlNPYmplY3Q6OmZyZWV6ZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEpTT2JqZWN0OjpmcmVlemUoVk0mIHZtKQog
ewotICAgIGlmIChpc0Zyb3plbihnbG9iYWxEYXRhKSkKKyAgICBpZiAoaXNGcm96ZW4odm0pKQog
ICAgICAgICByZXR1cm47Ci0gICAgcHJldmVudEV4dGVuc2lvbnMoZ2xvYmFsRGF0YSk7Ci0gICAg
c2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0cnVjdHVyZTo6ZnJlZXplVHJhbnNpdGlvbihnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUoKSkpOworICAgIHByZXZlbnRFeHRlbnNpb25zKHZtKTsKKyAgICBz
ZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6ZnJlZXplVHJhbnNpdGlvbih2bSwgc3RydWN0dXJl
KCkpKTsKIH0KIAotdm9pZCBKU09iamVjdDo6cHJldmVudEV4dGVuc2lvbnMoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQordm9pZCBKU09iamVjdDo6cHJldmVudEV4dGVuc2lvbnMoVk0mIHZtKQog
ewotICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKTsKKyAgICBlbnRl
ckRpY3Rpb25hcnlJbmRleGluZ01vZGUodm0pOwogICAgIGlmIChpc0V4dGVuc2libGUoKSkKLSAg
ICAgICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lv
bnNUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpKSk7CisgICAgICAgIHNldFN0cnVj
dHVyZSh2bSwgU3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24odm0sIHN0cnVj
dHVyZSgpKSk7CiB9CiAKIC8vIFRoaXMgcHJlc2VudGx5IHdpbGwgZmxhdHRlbiB0byBhbiB1bmNh
Y2hhYmxlIGRpY3Rpb25hcnk7IHRoaXMgaXMgc3VpdGFibGUKQEAgLTE1OTAsNyArMTU5MCw3IEBA
IHZvaWQgSlNPYmplY3Q6OnByZXZlbnRFeHRlbnNpb25zKEpTR2xvYmEKIHZvaWQgSlNPYmplY3Q6
OnJlaWZ5U3RhdGljRnVuY3Rpb25zRm9yRGVsZXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBB
U1NFUlQoIXN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSk7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAK
ICAgICAvLyBJZiB0aGlzIG9iamVjdCdzIENsYXNzSW5mbyBoYXMgbm8gc3RhdGljIHByb3BlcnRp
ZXMsIHRoZW4gbm90aGluZyB0byByZWlmeSEKICAgICAvLyBXZSBjYW4gc2FmZWx5IHNldCB0aGUg
ZmxhZyB0byBhdm9pZCB0aGUgZXhwZW5zaXZlIGNoZWNrIGFnYWluIGluIHRoZSBmdXR1cmUuCkBA
IC0xNjAwLDM3ICsxNjAwLDM3IEBAIHZvaWQgSlNPYmplY3Q6OnJlaWZ5U3RhdGljRnVuY3Rpb25z
Rm9yRGUKICAgICB9CiAKICAgICBpZiAoIXN0cnVjdHVyZSgpLT5pc1VuY2FjaGVhYmxlRGljdGlv
bmFyeSgpKQotICAgICAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgU3RydWN0dXJlOjp0b1Vu
Y2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCkpKTsK
KyAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6OnRvVW5jYWNoZWFibGVEaWN0aW9u
YXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKCkpKTsKIAogICAgIGZvciAoY29uc3QgQ2xhc3NJ
bmZvKiBpbmZvID0gY2xhc3NJbmZvKCk7IGluZm87IGluZm8gPSBpbmZvLT5wYXJlbnRDbGFzcykg
ewogICAgICAgICBjb25zdCBIYXNoVGFibGUqIGhhc2hUYWJsZSA9IGluZm8tPnByb3BIYXNoVGFi
bGUoZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7CiAgICAgICAgIGlmICghaGFzaFRhYmxl
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAg
ICAgICBmb3IgKEhhc2hUYWJsZTo6Q29uc3RJdGVyYXRvciBpdGVyID0gaGFzaFRhYmxlLT5iZWdp
bihnbG9iYWxEYXRhKTsgaXRlciAhPSBoYXNoVGFibGUtPmVuZChnbG9iYWxEYXRhKTsgKytpdGVy
KSB7CisgICAgICAgIGZvciAoSGFzaFRhYmxlOjpDb25zdEl0ZXJhdG9yIGl0ZXIgPSBoYXNoVGFi
bGUtPmJlZ2luKHZtKTsgaXRlciAhPSBoYXNoVGFibGUtPmVuZCh2bSk7ICsraXRlcikgewogICAg
ICAgICAgICAgaWYgKGl0ZXItPmF0dHJpYnV0ZXMoKSAmIEZ1bmN0aW9uKQotICAgICAgICAgICAg
ICAgIHNldFVwU3RhdGljRnVuY3Rpb25TbG90KGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCks
ICppdGVyLCB0aGlzLCBJZGVudGlmaWVyKCZnbG9iYWxEYXRhLCBpdGVyLT5rZXkoKSksIHNsb3Qp
OworICAgICAgICAgICAgICAgIHNldFVwU3RhdGljRnVuY3Rpb25TbG90KGdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCksICppdGVyLCB0aGlzLCBJZGVudGlmaWVyKCZ2bSwgaXRlci0+a2V5KCkp
LCBzbG90KTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHN0cnVjdHVyZSgpLT5zZXRTdGF0aWNG
dW5jdGlvbnNSZWlmaWVkKCk7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OnJlbW92ZURpcmVjdChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitib29sIEpT
T2JqZWN0OjpyZW1vdmVEaXJlY3QoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQog
ewotICAgIGlmICghaXNWYWxpZE9mZnNldChzdHJ1Y3R1cmUoKS0+Z2V0KGdsb2JhbERhdGEsIHBy
b3BlcnR5TmFtZSkpKQorICAgIGlmICghaXNWYWxpZE9mZnNldChzdHJ1Y3R1cmUoKS0+Z2V0KHZt
LCBwcm9wZXJ0eU5hbWUpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0OwogICAgIGlmIChzdHJ1Y3R1cmUoKS0+aXNVbmNhY2hlYWJsZURpY3Rpb25h
cnkoKSkgewotICAgICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+cmVtb3ZlUHJvcGVydHlXaXRo
b3V0VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBvZmZzZXQg
PSBzdHJ1Y3R1cmUoKS0+cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVy
dHlOYW1lKTsKICAgICAgICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBwdXREaXJlY3RVbmRlZmluZWQob2Zmc2V0KTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEs
IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSgpLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCkpOworICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0
dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5h
bWUsIG9mZnNldCkpOwogICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHB1dERpcmVjdFVuZGVmaW5lZChvZmZzZXQpOwpAQCAtMTY1Miw5
ICsxNjUyLDkgQEAgdm9pZCBKU09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0b3IoRXhlYwogewog
ICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewogICAgICAgICBpZiAoZGVz
Y3JpcHRvci52YWx1ZSgpKQotICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywgZGVzY3JpcHRvci52YWx1ZSgpKTsKKyAgICAgICAgICAgIGVudHJ5SW5N
YXAtPnNldChleGVjLT52bSgpLCB0aGlzLCBkZXNjcmlwdG9yLnZhbHVlKCkpOwogICAgICAgICBl
bHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCi0gICAgICAgICAg
ICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBqc1VuZGVmaW5lZCgp
KTsKKyAgICAgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT52bSgpLCB0aGlzLCBqc1VuZGVm
aW5lZCgpKTsKICAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0
cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYgfkFjY2Vzc29yOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMTY3MywxMSArMTY3MywxMSBAQCB2b2lkIEpTT2JqZWN0
OjpwdXRJbmRleGVkRGVzY3JpcHRvcihFeGVjCiAKICAgICAgICAgR2V0dGVyU2V0dGVyKiBhY2Nl
c3NvciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKGV4ZWMpOwogICAgICAgICBpZiAoZ2V0dGVyKQot
ICAgICAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIGdldHRl
cik7CisgICAgICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPnZtKCksIGdldHRlcik7
CiAgICAgICAgIGlmIChzZXR0ZXIpCi0gICAgICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0dGVyKGV4
ZWMtPmdsb2JhbERhdGEoKSwgc2V0dGVyKTsKKyAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0
ZXIoZXhlYy0+dm0oKSwgc2V0dGVyKTsKIAotICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBhY2Nlc3Nvcik7CisgICAgICAgIGVudHJ5SW5NYXAtPnNldChl
eGVjLT52bSgpLCB0aGlzLCBhY2Nlc3Nvcik7CiAgICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0
ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9y
KSAmIH5SZWFkT25seTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE3MDEsMTEgKzE3MDEs
MTEgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KAogICAgICAgICAg
ICAgcmV0dXJuIHB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4LCBkZXNjcmlwdG9yLnZhbHVlKCks
IDAsIHRocm93RXhjZXB0aW9uID8gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyA6IFB1dERpcmVj
dEluZGV4U2hvdWxkTm90VGhyb3cpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBlbnN1
cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZXhlYy0+
Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJE
aWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGV4ZWMtPnZtKCkpOwogICAgIH0KIAogICAgIGlmIChkZXNj
cmlwdG9yLmF0dHJpYnV0ZXMoKSAmIChSZWFkT25seSB8IEFjY2Vzc29yKSkKLSAgICAgICAgbm90
aWZ5UHJlc2VuY2VPZkluZGV4ZWRBY2Nlc3NvcnMoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAg
ICAgbm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRBY2Nlc3NvcnMoZXhlYy0+dm0oKSk7CiAKICAgICBT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
c3BhcnNlTWFwLmdldCgpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1hcCk7CkBAIC0xODA4LDEwICsx
ODA4LDEwIEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSgKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotU3BhcnNlQXJyYXlWYWx1ZU1hcCogSlNPYmplY3Q6OmFsbG9jYXRl
U3BhcnNlSW5kZXhNYXAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorU3BhcnNlQXJyYXlWYWx1
ZU1hcCogSlNPYmplY3Q6OmFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoVk0mIHZtKQogewotICAgIFNw
YXJzZUFycmF5VmFsdWVNYXAqIHJlc3VsdCA9IFNwYXJzZUFycmF5VmFsdWVNYXA6OmNyZWF0ZShn
bG9iYWxEYXRhKTsKLSAgICBhcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuc2V0KGdsb2JhbERh
dGEsIHRoaXMsIHJlc3VsdCk7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogcmVzdWx0ID0gU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y3JlYXRlKHZtKTsKKyAgICBhcnJheVN0b3JhZ2UoKS0+bV9zcGFy
c2VNYXAuc2V0KHZtLCB0aGlzLCByZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAg
LTE4NjUsMjEgKzE4NjUsMjEgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbgogICAgIC8vIG9yIGVxdWFsIHRvIHRoZSB2ZWN0b3IgbGVuZ3RoLgogICAgIEFTU0VSVChp
ID49IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgCi0gICAgSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgCiAgICAgaWYgKGkgPj0gTUFYX0FSUkFZX0lOREVYIC0gMQogICAgICAgICB8fCAo
aSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYCiAgICAgICAgICAgICAmJiAhaXNEZW5zZUVub3Vn
aEZvclZlY3RvcihpLCBjb3VudEVsZW1lbnRzPGluZGV4aW5nU2hhcGU+KG1fYnV0dGVyZmx5KSkp
KSB7CiAgICAgICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7Ci0gICAgICAgIGVuc3Vy
ZUFycmF5U3RvcmFnZVNsb3coZ2xvYmFsRGF0YSk7Ci0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVN
YXAqIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZ2xvYmFsRGF0YSk7CisgICAgICAgIGVu
c3VyZUFycmF5U3RvcmFnZVNsb3codm0pOworICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBt
YXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKHZtKTsKICAgICAgICAgbWFwLT5wdXRFbnRyeShl
eGVjLCB0aGlzLCBpLCB2YWx1ZSwgZmFsc2UpOwogICAgICAgICBBU1NFUlQoaSA+PSBhcnJheVN0
b3JhZ2UoKS0+bGVuZ3RoKCkpOwogICAgICAgICBhcnJheVN0b3JhZ2UoKS0+c2V0TGVuZ3RoKGkg
KyAxKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGVuc3VyZUxlbmd0aChnbG9iYWxE
YXRhLCBpICsgMSk7CisgICAgZW5zdXJlTGVuZ3RoKHZtLCBpICsgMSk7CiAKICAgICBSRUxFQVNF
X0FTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAgICBzd2l0Y2ggKGlu
ZGV4aW5nU2hhcGUpIHsKQEAgLTE4OTcsNyArMTg5Nyw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5
SW5kZXhCZXlvbmRWZWN0b3JMZW4KICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ29udGlndW91
c1NoYXBlOgotICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldChnbG9iYWxE
YXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0u
c2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZh
dWx0OgpAQCAtMTkwNyw3ICsxOTA3LDcgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9u
ZFZlY3RvckxlbgogCiB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
V2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKLSAgICBKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKIAogICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhh
dCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KICAgICBBU1NFUlQoaSA8PSBNQVhf
QVJSQVlfSU5ERVgpOwpAQCAtMTkyNSwxNSArMTkyNSwxNSBAQCB2b2lkIEpTT2JqZWN0OjpwdXRC
eUluZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaSAr
IDEpOwogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwgYmUg
dXNpbmcgYSB2ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCi0gICAgICAg
IGlmIChMSUtFTFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvcikpICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkp
IHsKKyAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgodm0sIGkgKyAx
KSkpIHsKICAgICAgICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBp
dCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgog
ICAgICAgICAgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOwotICAgICAgICAgICAgc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAg
IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgICAgICAgICAg
KytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBhIHZlY3Rv
ciB0byBob2xkIHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhl
IHZhbHVlLgotICAgICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGV4ZWMtPmdsb2Jh
bERhdGEoKSk7CisgICAgICAgIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZXhlYy0+dm0o
KSk7CiAgICAgICAgIG1hcC0+cHV0RW50cnkoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRo
cm93KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE5NTQsNyArMTk1NCw3IEBAIHZvaWQg
SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4KICAgICAvLyBXZSBhcmUgY3VycmVu
dGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5n
IHNvLgogICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3Bh
cnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9j
YXRpb24gZmFpbHMuCiAgICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBpZiAobWFwLT5zcGFyc2VNb2Rl
KCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8
fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKSB7Cisg
ICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0
aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPnZtKCks
IGxlbmd0aCkpIHsKICAgICAgICAgbWFwLT5wdXRFbnRyeShleGVjLCB0aGlzLCBpLCB2YWx1ZSwg
c2hvdWxkVGhyb3cpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTk2NywxOSArMTk2Nywx
OSBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKICAgICBTcGFyc2VB
cnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgIGZvciAo
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmVjdG9yW2l0LT5rZXldLnNldChnbG9iYWxEYXRhLCB0
aGlzLCBpdC0+dmFsdWUuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKKyAgICAgICAgdmVjdG9yW2l0LT5r
ZXldLnNldCh2bSwgdGhpcywgaXQtPnZhbHVlLmdldE5vblNwYXJzZU1vZGUoKSk7CiAgICAgZGVh
bGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CiAKICAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5
IGludG8gdGhlIHZlY3Rvci4KICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9
IHZlY3RvcltpXTsKICAgICBpZiAoIXZhbHVlU2xvdCkKICAgICAgICAgKytzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yOwotICAgIHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFs
dWUpOworICAgIHZhbHVlU2xvdC5zZXQodm0sIHRoaXMsIHZhbHVlKTsKIH0KIAogdm9pZCBKU09i
amVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAKICAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMg
b3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCiAgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZ
X0lOREVYKTsKQEAgLTE5ODksMjIgKzE5ODksMjIgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRl
eEJleW9uZFZlY3RvckxlbgogICAgICAgICBpZiAoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKSB7
CiAgICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFn
ZSgKICAgICAgICAgICAgICAgICBleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csCi0gICAgICAg
ICAgICAgICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgICAgICBlbnN1cmVBcnJheVN0b3JhZ2VF
eGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUodm0pKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChpID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgp
IHsKICAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9y
YWdlKAotICAgICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRl
QXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsKKyAgICAgICAgICAgICAgICBleGVjLCBp
LCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNyZWF0ZUFycmF5U3RvcmFnZSh2bSwgMCwgMCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5uZWVk
c1Nsb3dQdXRJbmRleGluZygpKSB7Ci0gICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0
aCgwLCAwLCBpICsgMSkpOwotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGds
b2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IGNyZWF0ZUFycmF5U3RvcmFnZSh2bSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAw
LCBpICsgMSkpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KHZtLCB0aGlz
LCB2YWx1ZSk7CiAgICAgICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNyZWF0
ZUluaXRpYWxDb250aWd1b3VzKGdsb2JhbERhdGEsIGkgKyAxKVtpXS5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgdmFsdWUpOworICAgICAgICBjcmVhdGVJbml0aWFsQ29udGlndW91cyh2bSwgaSArIDEp
W2ldLnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IApAQCAtMjA0OSw3ICsyMDQ5LDcgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZl
Y3RvckxlbgogCiBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0
aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZh
bHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUgbW9kZSwgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMt
Pmdsb2JhbERhdGEoKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIAogICAgIC8vIGkg
c2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJy
ZW50IHZlY3Rvci4KICAgICBBU1NFUlQoaGFzQXJyYXlTdG9yYWdlKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkpOwpAQCAtMjA3MiwxNSArMjA3MiwxNSBAQCBib29sIEpTT2JqZWN0OjpwdXRE
aXJlY3RJbmRleEJleW9uZFZlY3RvCiAgICAgICAgIGlmIChMSUtFTFkoCiAgICAgICAgICAgICAg
ICAgIWF0dHJpYnV0ZXMKICAgICAgICAgICAgICAgICAmJiAoaXNEZW5zZUVub3VnaEZvclZlY3Rv
cihpLCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkKLSAgICAgICAgICAgICAgICAmJiBp
bmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBpICsgMSkpKSB7CisgICAgICAgICAgICAg
ICAgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgodm0sIGkgKyAxKSkpIHsKICAgICAgICAgICAgIC8v
IHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVh
bGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgogICAgICAgICAgICAgc3RvcmFnZSA9
IGFycmF5U3RvcmFnZSgpOwotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGds
b2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ld
LnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAg
Ly8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhpcyBw
cm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFkZCB0aGUgdmFsdWUuCi0gICAgICAg
IG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAg
ICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChleGVjLT52bSgpKTsKICAgICAgICAgcmV0
dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2Rl
KTsKICAgICB9CiAKQEAgLTIxMDEsNyArMjEwMSw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVj
dEluZGV4QmV5b25kVmVjdG8KICAgICAvLyBXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0g
Y2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNvLgogICAgIC8vIFdlIHdp
bGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEg
dmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCiAgICAg
dW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3Ig
KyBtYXAtPnNpemUoKTsKLSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgYXR0cmlidXRlcyB8
fCAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFp
bmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aCkpCisgICAgaWYg
KG1hcC0+c3BhcnNlTW9kZSgpIHx8IGF0dHJpYnV0ZXMgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0
b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhl
Yy0+dm0oKSwgbGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRo
aXMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlKTsKIAogICAgIC8vIFJlcmVhZCBtX3N0b3Jh
Z2UgYWZ0ZXIgaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9y
LgpAQCAtMjExMiw1MSArMjExMiw1MSBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJl
eW9uZFZlY3RvCiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5t
X3ZlY3RvcjsKICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
YXAtPmVuZCgpOwogICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmVjdG9yW2l0LT5r
ZXldLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+dmFsdWUuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsK
KyAgICAgICAgdmVjdG9yW2l0LT5rZXldLnNldCh2bSwgdGhpcywgaXQtPnZhbHVlLmdldE5vblNw
YXJzZU1vZGUoKSk7CiAgICAgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CiAKICAgICAvLyBT
dG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKICAgICBpZiAoIXZhbHVlU2xvdCkKICAg
ICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgIHZhbHVlU2xvdC5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgIHZhbHVlU2xvdC5zZXQodm0sIHRoaXMsIHZh
bHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVl
IHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUgbW9kZSkKIHsK
LSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKIAogICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkg
aW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KICAgICBBU1NFUlQo
aSA8PSBNQVhfQVJSQVlfSU5ERVgpOwogICAgIAogICAgIGlmIChhdHRyaWJ1dGVzICYgKFJlYWRP
bmx5IHwgQWNjZXNzb3IpKQotICAgICAgICBub3RpZnlQcmVzZW5jZU9mSW5kZXhlZEFjY2Vzc29y
cyhnbG9iYWxEYXRhKTsKKyAgICAgICAgbm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRBY2Nlc3NvcnMo
dm0pOwogICAgIAogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAg
ICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgaWYgKGluZGV4aW5n
U2hvdWxkQmVTcGFyc2UoKSB8fCBhdHRyaWJ1dGVzKSB7CiAgICAgICAgICAgICByZXR1cm4gcHV0
RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAogICAgICAgICAg
ICAgICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLAotICAgICAgICAgICAgICAg
IGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShn
bG9iYWxEYXRhKSk7CisgICAgICAgICAgICAgICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5k
RW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKHZtKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KGkgPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgewogICAgICAgICAgICAgcmV0dXJuIHB1dERp
cmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKLSAgICAgICAgICAg
ICAgICBleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY3JlYXRlQXJyYXlTdG9yYWdl
KGdsb2JhbERhdGEsIDAsIDApKTsKKyAgICAgICAgICAgICAgICBleGVjLCBpLCB2YWx1ZSwgYXR0
cmlidXRlcywgbW9kZSwgY3JlYXRlQXJyYXlTdG9yYWdlKHZtLCAwLCAwKSk7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKSB7Ci0gICAg
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFs
RGF0YSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkpOwotICAgICAgICAg
ICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAg
ICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZSh2bSwg
aSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkpOworICAgICAgICAgICAgc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgICAgICAgICBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoZ2xvYmFs
RGF0YSwgaSArIDEpW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIGNy
ZWF0ZUluaXRpYWxDb250aWd1b3VzKHZtLCBpICsgMSlbaV0uc2V0KHZtLCB0aGlzLCB2YWx1ZSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBTExfVU5E
RUNJREVEX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgIGNvbnZlcnRVbmRlY2lkZWRGb3JWYWx1
ZShleGVjLT5nbG9iYWxEYXRhKCksIHZhbHVlKTsKKyAgICAgICAgY29udmVydFVuZGVjaWRlZEZv
clZhbHVlKGV4ZWMtPnZtKCksIHZhbHVlKTsKICAgICAgICAgLy8gUmVsb29wLgogICAgICAgICBy
ZXR1cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUpOwog
ICAgIH0KQEAgLTIxNjQsMTAgKzIxNjQsMTAgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5k
ZXhCZXlvbmRWZWN0bwogICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7CiAgICAg
ICAgIGlmIChhdHRyaWJ1dGVzICYgKFJlYWRPbmx5IHwgQWNjZXNzb3IpKSB7CiAgICAgICAgICAg
ICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdl
KAotICAgICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjb252
ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgICAgICAgICAgICAgZXhl
YywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdl
KHZtKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCF2YWx1ZS5pc0ludDMyKCkpIHsKLSAgICAg
ICAgICAgIGNvbnZlcnRJbnQzMkZvclZhbHVlKGdsb2JhbERhdGEsIHZhbHVlKTsKKyAgICAgICAg
ICAgIGNvbnZlcnRJbnQzMkZvclZhbHVlKHZtLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4g
cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0
ZXMsIG1vZGUpOwogICAgICAgICB9CiAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGhXaXRob3V0QXR0cmlidXRlczxJbnQzMlNoYXBlPihleGVjLCBpLCB2YWx1ZSk7CkBAIC0yMTc3
LDE1ICsyMTc3LDE1IEBAIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG8K
ICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgaWYgKGF0dHJp
YnV0ZXMgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpIHsKICAgICAgICAgICAgIHJldHVybiBwdXRE
aXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCi0gICAgICAgICAg
ICAgICAgZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNvbnZlcnREb3VibGVUb0Fy
cmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgICAgICAgICAgICAgZXhlYywgaSwgdmFsdWUs
IGF0dHJpYnV0ZXMsIG1vZGUsIGNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSh2bSkpOwogICAg
ICAgICB9CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgY29u
dmVydERvdWJsZVRvQ29udGlndW91cyhnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIGNvbnZlcnRE
b3VibGVUb0NvbnRpZ3VvdXModm0pOwogICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4
QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlKTsKICAg
ICAgICAgfQogICAgICAgICBkb3VibGUgdmFsdWVBc0RvdWJsZSA9IHZhbHVlLmFzTnVtYmVyKCk7
CiAgICAgICAgIGlmICh2YWx1ZUFzRG91YmxlICE9IHZhbHVlQXNEb3VibGUpIHsKLSAgICAgICAg
ICAgIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBj
b252ZXJ0RG91YmxlVG9Db250aWd1b3VzKHZtKTsKICAgICAgICAgICAgIHJldHVybiBwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9k
ZSk7CiAgICAgICAgIH0KICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhv
dXRBdHRyaWJ1dGVzPERvdWJsZVNoYXBlPihleGVjLCBpLCB2YWx1ZSk7CkBAIC0yMTk1LDcgKzIx
OTUsNyBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3RvCiAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogewogICAgICAgICBpZiAoYXR0cmlidXRl
cyAmIChSZWFkT25seSB8IEFjY2Vzc29yKSkgewogICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVj
dEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKLSAgICAgICAgICAgICAg
ICBleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY29udmVydENvbnRpZ3VvdXNUb0Fy
cmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgICAgICAgICAgICAgZXhlYywgaSwgdmFsdWUs
IGF0dHJpYnV0ZXMsIG1vZGUsIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uodm0pKTsK
ICAgICAgICAgfQogICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aG91dEF0
dHJpYnV0ZXM8Q29udGlndW91c1NoYXBlPihleGVjLCBpLCB2YWx1ZSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtMjIxNyw3ICsyMjE3LDcgQEAgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0TmF0
aXZlRnVuY3Rpb24oRQogICAgIAogICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0KICAgICAgICAg
SlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCwgZnVuY3Rpb25MZW5ndGgsIG5h
bWUsIG5hdGl2ZUZ1bmN0aW9uLCBpbnRyaW5zaWMpOwotICAgIHB1dERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksIHByb3BlcnR5TmFtZSwgZnVuY3Rpb24sIGF0dHJpYnV0ZXMpOworICAgIHB1dERp
cmVjdChleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUsIGZ1bmN0aW9uLCBhdHRyaWJ1dGVzKTsKIH0K
IAogQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVu
c2lnbmVkIGN1cnJlbnRWZWN0b3JMZW5ndGgsIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGgsIHVuc2ln
bmVkIGRlc2lyZWRMZW5ndGgpCkBAIC0yMzA2LDcgKzIzMDYsNyBAQCB1bnNpZ25lZCBKU09iamVj
dDo6Y291bnRFbGVtZW50cygpCiAgICAgfQogfQogCi1ib29sIEpTT2JqZWN0OjppbmNyZWFzZVZl
Y3Rvckxlbmd0aChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIG5ld0xlbmd0aCkK
K2Jvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZNJiB2bSwgdW5zaWduZWQgbmV3
TGVuZ3RoKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gbGVhdmVzIHRoZSBhcnJheSBpbiBhbiBp
bnRlcm5hbGx5IGluY29uc2lzdGVudCBzdGF0ZSwgYmVjYXVzZSBpdCBkb2VzIG5vdCBtb3ZlIGFu
eSB2YWx1ZXMgZnJvbSBzcGFyc2UgdmFsdWUgbWFwCiAgICAgLy8gdG8gdGhlIHZlY3Rvci4gQ2Fs
bGVycyBoYXZlIHRvIGFjY291bnQgZm9yIHRoYXQsIGJlY2F1c2UgdGhleSBjYW4gZG8gaXQgbW9y
ZSBlZmZpY2llbnRseS4KQEAgLTIzMjYsNyArMjMyNiw3IEBAIGJvb2wgSlNPYmplY3Q6OmluY3Jl
YXNlVmVjdG9yTGVuZ3RoKEpTR2wKIAogICAgIC8vIEZhc3QgY2FzZSAtIHRoZXJlIGlzIG5vIHBy
ZWNhcGFjaXR5LiBJbiB0aGVzZSBjYXNlcyBhIHJlYWxsb2MgbWFrZXMgc2Vuc2UuCiAgICAgaWYg
KExJS0VMWSghaW5kZXhCaWFzKSkgewotICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9
IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5ncm93QXJyYXlSaWdodChnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIEFycmF5U3RvcmFn
ZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9y
TGVuZ3RoKSk7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0
dGVyZmx5KCktPmdyb3dBcnJheVJpZ2h0KHZtLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5n
dGgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7CiAgICAgICAgIGlm
ICghbmV3QnV0dGVyZmx5KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBtX2J1
dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKQEAgLTIzMzcsNyArMjMzNyw3IEBAIGJvb2wgSlNPYmpl
Y3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2wKICAgICAvLyBSZW1vdmUgc29tZSwgYnV0IG5v
dCBhbGwgb2YgdGhlIHByZWNhcGFjaXR5LiBBdG9taWMgZGVjYXksICYgY2FwcGVkIHRvIG5vdCBv
dmVyZmxvdyBhcnJheSBsZW5ndGguCiAgICAgdW5zaWduZWQgbmV3SW5kZXhCaWFzID0gc3RkOjpt
aW4oaW5kZXhCaWFzID4+IDEsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBuZXdWZWN0b3JM
ZW5ndGgpOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5
KCktPnJlc2l6ZUFycmF5KAotICAgICAgICBnbG9iYWxEYXRhLAorICAgICAgICB2bSwKICAgICAg
ICAgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIEFycmF5U3RvcmFnZTo6
c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLAogICAgICAgICBuZXdJbmRleEJpYXMsIHRydWUsIEFycmF5
U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKICAgICBpZiAoIW5ld0J1dHRlcmZs
eSkKQEAgLTIzNDksNyArMjM0OSw3IEBAIGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVu
Z3RoKEpTR2wKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKU09iamVjdDo6ZW5zdXJlTGVu
Z3RoU2xvdyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQg
SlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3coVk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAg
ICAgQVNTRVJUKGxlbmd0aCA8IE1BWF9BUlJBWV9JTkRFWCk7CiAgICAgQVNTRVJUKGhhc0NvbnRp
Z3VvdXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB8fCBoYXNJbnQzMihzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpIHx8IGhhc0RvdWJsZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpIHx8IGhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKQEAgLTIz
NjAsNyArMjM2MCw3IEBAIHZvaWQgSlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3coSlNHbG9iYWwK
ICAgICAgICAgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CiAgICAgdW5zaWduZWQgb2xkVmVj
dG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwogICAgIG1fYnV0dGVyZmx5
ID0gbV9idXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0KAotICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsCisgICAgICAg
IHZtLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUs
CiAgICAgICAgIG9sZFZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSksCiAgICAg
ICAgIG5ld1ZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwogICAgIGlmICho
YXNEb3VibGUoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSkgewpAQCAtMjM3MCwyMSArMjM3
MCwyMSBAQCB2b2lkIEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KEpTR2xvYmFsCiAgICAgbV9i
dXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogfQogCi1CdXR0ZXJm
bHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKK0J1dHRlcmZseSogSlNPYmplY3Q6
Omdyb3dPdXRPZkxpbmVTdG9yYWdlKFZNJiB2bSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdT
aXplKQogewogICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CiAKICAgICAvLyBJdCdzIGlt
cG9ydGFudCB0aGF0IHRoaXMgZnVuY3Rpb24gbm90IHJlbHkgb24gc3RydWN0dXJlKCksIGZvciB0
aGUgcHJvcGVydHkKICAgICAvLyBjYXBhY2l0eSwgc2luY2Ugd2UgbWlnaHQgaGF2ZSBhbHJlYWR5
IG11dGF0ZWQgdGhlIHN0cnVjdHVyZSBpbi1wbGFjZS4KICAgICAKLSAgICByZXR1cm4gbV9idXR0
ZXJmbHktPmdyb3dQcm9wZXJ0eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIG9sZFNp
emUsIG5ld1NpemUpOworICAgIHJldHVybiBtX2J1dHRlcmZseS0+Z3Jvd1Byb3BlcnR5U3RvcmFn
ZSh2bSwgc3RydWN0dXJlKCksIG9sZFNpemUsIG5ld1NpemUpOwogfQogCiBib29sIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpCiB7CiAgICAgdW5zaWduZWQgYXR0cmlidXRlcyA9IDA7CiAgICAgSlNDZWxsKiBjZWxs
ID0gMDsKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmplY3QtPnN0cnVjdHVyZSgpLT5n
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGNlbGwpOwor
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG9iamVjdC0+c3RydWN0dXJlKCktPmdldChleGVj
LT52bSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGNlbGwpOwogICAgIGlmIChpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKG9iamVj
dC0+Z2V0RGlyZWN0KG9mZnNldCksIGF0dHJpYnV0ZXMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTI0NjgsOSArMjQ2OCw5IEBAIHN0YXRpYyBib29sIHB1dERlc2NyaXB0b3IoRXhlY1N0YXRl
KiBleGUKICAgICAgICAgaWYgKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpICYmIG9s
ZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkgewogICAgICAgICAgICAgR2V0dGVy
U2V0dGVyKiBhY2Nlc3NvciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKGV4ZWMpOwogICAgICAgICAg
ICAgaWYgKG9sZERlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpKQotICAgICAgICAgICAgICAgIGFj
Y2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBvbGREZXNjcmlwdG9yLmdldHRl
ck9iamVjdCgpKTsKKyAgICAgICAgICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPnZt
KCksIG9sZERlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCkpOwogICAgICAgICAgICAgaWYgKG9sZERl
c2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpKQotICAgICAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRT
ZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBvbGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgpKTsK
KyAgICAgICAgICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0dGVyKGV4ZWMtPnZtKCksIG9sZERlc2Ny
aXB0b3Iuc2V0dGVyT2JqZWN0KCkpOwogICAgICAgICAgICAgdGFyZ2V0LT5wdXREaXJlY3RBY2Nl
c3NvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGFjY2Vzc29yLCBhdHRyaWJ1dGVzIHwgQWNjZXNzb3Ip
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTI0NzksNyArMjQ3OSw3
IEBAIHN0YXRpYyBib29sIHB1dERlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGUKICAgICAgICAgICAg
IG5ld1ZhbHVlID0gZGVzY3JpcHRvci52YWx1ZSgpOwogICAgICAgICBlbHNlIGlmIChvbGREZXNj
cmlwdG9yLnZhbHVlKCkpCiAgICAgICAgICAgICBuZXdWYWx1ZSA9IG9sZERlc2NyaXB0b3IudmFs
dWUoKTsKLSAgICAgICAgdGFyZ2V0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9w
ZXJ0eU5hbWUsIG5ld1ZhbHVlLCBhdHRyaWJ1dGVzICYgfkFjY2Vzc29yKTsKKyAgICAgICAgdGFy
Z2V0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCBuZXdWYWx1ZSwgYXR0cmli
dXRlcyAmIH5BY2Nlc3Nvcik7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCiAg
ICAgICAgICAgICB0YXJnZXQtPnN0cnVjdHVyZSgpLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVy
dGllcygpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI0ODgsMTMgKzI0ODgsMTMgQEAgc3Rh
dGljIGJvb2wgcHV0RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZQogICAgIEdldHRlclNldHRlciog
YWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKIAogICAgIGlmIChkZXNjcmlw
dG9yLmdldHRlclByZXNlbnQoKSkKLSAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihleGVjLT5n
bG9iYWxEYXRhKCksIGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCkpOworICAgICAgICBhY2Nlc3Nv
ci0+c2V0R2V0dGVyKGV4ZWMtPnZtKCksIGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCkpOwogICAg
IGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpKQotICAgICAgICBhY2Nlc3Nv
ci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgb2xkRGVzY3JpcHRvci5nZXR0ZXJPYmpl
Y3QoKSk7CisgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+dm0oKSwgb2xkRGVzY3Jp
cHRvci5nZXR0ZXJPYmplY3QoKSk7CiAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgp
KQotICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgZGVzY3Jp
cHRvci5zZXR0ZXJPYmplY3QoKSk7CisgICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+
dm0oKSwgZGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKSk7CiAgICAgZWxzZSBpZiAob2xkRGVzY3Jp
cHRvci5zZXR0ZXJQcmVzZW50KCkpCi0gICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBvbGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgpKTsKKyAgICAgICAgYWNj
ZXNzb3ItPnNldFNldHRlcihleGVjLT52bSgpLCBvbGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgp
KTsKIAogICAgIHRhcmdldC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgcHJvcGVydHlOYW1lLCBh
Y2Nlc3NvciwgYXR0cmlidXRlcyB8IEFjY2Vzc29yKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI1
MDQsNyArMjUwNCw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdE1heUJlSW5kZXgoRXhlY1MK
IHsKICAgICB1bnNpZ25lZCBhc0luZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKICAgICBp
ZiAoYXNJbmRleCA9PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCi0gICAgICAgIHB1dERpcmVj
dChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgICAgICBwdXRE
aXJlY3QoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CiAgICAgZWxzZQogICAgICAg
ICBwdXREaXJlY3RJbmRleChleGVjLCBhc0luZGV4LCB2YWx1ZSk7CiB9CkBAIC0yNTEyLDE4ICsy
NTEyLDE4IEBAIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdE1heUJlSW5kZXgoRXhlY1MKIGNsYXNz
IERlZmluZU93blByb3BlcnR5U2NvcGUgewogcHVibGljOgogICAgIERlZmluZU93blByb3BlcnR5
U2NvcGUoRXhlY1N0YXRlKiBleGVjKQotICAgICAgICA6IG1fZ2xvYmFsRGF0YShleGVjLT5nbG9i
YWxEYXRhKCkpCisgICAgICAgIDogbV92bShleGVjLT52bSgpKQogICAgIHsKLSAgICAgICAgbV9n
bG9iYWxEYXRhLnNldEluRGVmaW5lT3duUHJvcGVydHkodHJ1ZSk7CisgICAgICAgIG1fdm0uc2V0
SW5EZWZpbmVPd25Qcm9wZXJ0eSh0cnVlKTsKICAgICB9CiAKICAgICB+RGVmaW5lT3duUHJvcGVy
dHlTY29wZSgpCiAgICAgewotICAgICAgICBtX2dsb2JhbERhdGEuc2V0SW5EZWZpbmVPd25Qcm9w
ZXJ0eShmYWxzZSk7CisgICAgICAgIG1fdm0uc2V0SW5EZWZpbmVPd25Qcm9wZXJ0eShmYWxzZSk7
CiAgICAgfQogCiBwcml2YXRlOgotICAgIEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOworICAg
IFZNJiBtX3ZtOwogfTsKIAogYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0
eShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKQEAgLTI2MjQsMTQgKzI2
MjQsMTQgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQotICAgIEpTVmFsdWUgYWNjZXNz
b3IgPSBnZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOworICAgIEpT
VmFsdWUgYWNjZXNzb3IgPSBnZXREaXJlY3QoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKTsKICAg
ICBpZiAoIWFjY2Vzc29yKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgR2V0dGVyU2V0dGVy
KiBnZXR0ZXJTZXR0ZXIgPSBhc0dldHRlclNldHRlcihhY2Nlc3Nvcik7CiAgICAgaWYgKGRlc2Ny
aXB0b3Iuc2V0dGVyUHJlc2VudCgpKQotICAgICAgICBnZXR0ZXJTZXR0ZXItPnNldFNldHRlcihl
eGVjLT5nbG9iYWxEYXRhKCksIGRlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCkpOworICAgICAgICBn
ZXR0ZXJTZXR0ZXItPnNldFNldHRlcihleGVjLT52bSgpLCBkZXNjcmlwdG9yLnNldHRlck9iamVj
dCgpKTsKICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkpCi0gICAgICAgIGdldHRl
clNldHRlci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgZGVzY3JpcHRvci5nZXR0ZXJP
YmplY3QoKSk7CisgICAgICAgIGdldHRlclNldHRlci0+c2V0R2V0dGVyKGV4ZWMtPnZtKCksIGRl
c2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCkpOwogICAgIGlmIChjdXJyZW50LmF0dHJpYnV0ZXNFcXVh
bChkZXNjcmlwdG9yKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgbWV0aG9kVGFibGUoKS0+
ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MzcsNyArMzcsNyBAQAogI2luY2x1ZGUgIlB1dFByb3BlcnR5U2xvdC5oIgogCiAjaW5jbHVkZSAi
U3RydWN0dXJlLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIK
ICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgog
I2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXAuaCIKQEAgLTEyMSw4ICsxMjEsOCBAQCBwdWJs
aWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3Qg
SlNPYmplY3QqKTsKIAogICAgIEpTVmFsdWUgcHJvdG90eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRQcm90b3R5cGUoSlNHbG9iYWxEYXRhJiwgSlNWYWx1ZSBwcm90b3R5cGUpOwotICAgIGJvb2wg
c2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlY2soSlNHbG9iYWxEYXRhJiwgSlNWYWx1ZSBwcm90b3R5
cGUpOworICAgIHZvaWQgc2V0UHJvdG90eXBlKFZNJiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAg
IGJvb2wgc2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlY2soVk0mLCBKU1ZhbHVlIHByb3RvdHlwZSk7
CiAgICAgICAgIAogICAgIGJvb2wgbWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkKICAgICB7
CkBAIC0xNjIsNyArMTYyLDcgQEAgcHVibGljOgogICAgIHZvaWQgcHV0QnlJbmRleElubGluZShF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9v
bCBzaG91bGRUaHJvdykKICAgICB7CiAgICAgICAgIGlmIChjYW5TZXRJbmRleFF1aWNrbHkocHJv
cGVydHlOYW1lKSkgewotICAgICAgICAgICAgc2V0SW5kZXhRdWlja2x5KGV4ZWMtPmdsb2JhbERh
dGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICBzZXRJbmRleFF1aWNrbHko
ZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgbWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7CkBAIC0xNzYsNyArMTc2LDcgQEAgcHVi
bGljOgogICAgIGJvb2wgcHV0RGlyZWN0SW5kZXgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVj
dEluZGV4TW9kZSBtb2RlKQogICAgIHsKICAgICAgICAgaWYgKCFhdHRyaWJ1dGVzICYmIGNhblNl
dEluZGV4UXVpY2tseUZvclB1dERpcmVjdChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICBz
ZXRJbmRleFF1aWNrbHkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsK
KyAgICAgICAgICAgIHNldEluZGV4UXVpY2tseShleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
biBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBhdHRyaWJ1dGVzLCBtb2RlKTsKQEAgLTMxNiwyMCArMzE2LDIwIEBAIHB1YmxpYzoKICAg
ICAgICAgfQogICAgIH0KICAgICAgICAgCi0gICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgdm9pZCBzZXRJ
bmRleFF1aWNrbHkoVk0mIHZtLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCiAgICAgewogICAgICAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICBjYXNlIEFM
TF9JTlQzMl9JTkRFWElOR19UWVBFUzogewogICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgICAgICAgICAgaWYgKCF2LmlzSW50MzIoKSkgewot
ICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlT3JDb250aWd1b3VzV2hpbGVQZXJm
b3JtaW5nU2V0SW5kZXgoZ2xvYmFsRGF0YSwgaSwgdik7CisgICAgICAgICAgICAgICAgY29udmVy
dEludDMyVG9Eb3VibGVPckNvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRleCh2bSwgaSwg
dik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
Ly8gRmFsbCB0aHJvdWdoIHRvIGNvbnRpZ3VvdXMgY2FzZS4KICAgICAgICAgfQogICAgICAgICBj
YXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICBBU1NFUlQo
aSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgICAgICBtX2J1dHRlcmZs
eS0+Y29udGlndW91cygpW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAg
IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KHZtLCB0aGlzLCB2KTsKICAgICAgICAg
ICAgIGlmIChpID49IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKICAgICAgICAgICAgICAg
ICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGkgKyAxKTsKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMzM3LDEyICszMzcsMTIgQEAgcHVibGljOgogICAgICAgICBjYXNlIEFMTF9ET1VCTEVf
SU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAgIGlmICghdi5pc051bWJlcigpKSB7Ci0gICAgICAg
ICAgICAgICAgY29udmVydERvdWJsZVRvQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4
KGdsb2JhbERhdGEsIGksIHYpOworICAgICAgICAgICAgICAgIGNvbnZlcnREb3VibGVUb0NvbnRp
Z3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRleCh2bSwgaSwgdik7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZG91YmxlIHZhbHVlID0gdi5hc051
bWJlcigpOwogICAgICAgICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSB7Ci0gICAgICAgICAgICAg
ICAgY29udmVydERvdWJsZVRvQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KGdsb2Jh
bERhdGEsIGksIHYpOworICAgICAgICAgICAgICAgIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXNX
aGlsZVBlcmZvcm1pbmdTZXRJbmRleCh2bSwgaSwgdik7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3Vi
bGUoKVtpXSA9IHZhbHVlOwpAQCAtMzU0LDcgKzM1NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAg
ICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ld
OwogICAgICAgICAgICAgSlNWYWx1ZSBvbGQgPSB4LmdldCgpOwotICAgICAgICAgICAgeC5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAgICB4LnNldCh2bSwgdGhpcywgdik7CiAg
ICAgICAgICAgICBpZiAoIW9sZCkgewogICAgICAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcjsKICAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgo
KSkKQEAgLTM2NywxOCArMzY3LDE4IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAg
ICAgCi0gICAgdm9pZCBpbml0aWFsaXplSW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1
bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgdm9pZCBpbml0aWFsaXplSW5kZXgoVk0mIHZtLCB1
bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCiAgICAgewogICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdf
VFlQRVM6IHsKLSAgICAgICAgICAgIHNldEluZGV4UXVpY2tseVRvVW5kZWNpZGVkKGdsb2JhbERh
dGEsIGksIHYpOworICAgICAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9VbmRlY2lkZWQodm0sIGks
IHYpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBTExfSU5U
MzJfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHkt
PnB1YmxpY0xlbmd0aCgpKTsKICAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAgIGlmICghdi5pc0ludDMyKCkpIHsKLSAgICAgICAg
ICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZU9yQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1Nl
dEluZGV4KGdsb2JhbERhdGEsIGksIHYpOworICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRv
RG91YmxlT3JDb250aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXgodm0sIGksIHYpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gRmFsbCB0
aHJvdWdoLgpAQCAtMzg2LDE5ICszODYsMTkgQEAgcHVibGljOgogICAgICAgICBjYXNlIEFMTF9D
T05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CiAgICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91
cygpW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5
LT5jb250aWd1b3VzKClbaV0uc2V0KHZtLCB0aGlzLCB2KTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewogICAg
ICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwogICAgICAg
ICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgICAgICAg
ICAgaWYgKCF2LmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgICAgICBjb252ZXJ0RG91YmxlVG9D
b250aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXgoZ2xvYmFsRGF0YSwgaSwgdik7CisgICAg
ICAgICAgICAgICAgY29udmVydERvdWJsZVRvQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldElu
ZGV4KHZtLCBpLCB2KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBkb3VibGUgdmFsdWUgPSB2LmFzTnVtYmVyKCk7CiAgICAgICAgICAgICBpZiAo
dmFsdWUgIT0gdmFsdWUpIHsKLSAgICAgICAgICAgICAgICBjb252ZXJ0RG91YmxlVG9Db250aWd1
b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXgoZ2xvYmFsRGF0YSwgaSwgdik7CisgICAgICAgICAg
ICAgICAgY29udmVydERvdWJsZVRvQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KHZt
LCBpLCB2KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gdmFsdWU7CkBAIC00MDgs
NyArNDA4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9y
YWdlLT5sZW5ndGgoKSk7CiAgICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IpOwotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KHZt
LCB0aGlzLCB2KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1
bHQ6CkBAIC00NTAsNyArNDUwLDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgICAg
ICAKLSAgICB2b2lkIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmKTsK
KyAgICB2b2lkIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShWTSYpOwogCiAgICAgLy8gcHV0
RGlyZWN0IGlzIGVmZmVjdGl2ZWx5IGFuIHVuY2hlY2tlZCB2ZXNpb24gb2YgJ2RlZmluZU93blBy
b3BlcnR5JzoKICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQK
QEAgLTQ1OCw5ICs0NTgsOSBAQCBwdWJsaWM6CiAgICAgLy8gIC0gYXR0cmlidXRlcyB3aWxsIGJl
IHJlc3BlY3RlZCAoYWZ0ZXIgdGhlIGNhbGwgdGhlIHByb3BlcnR5IHdpbGwgZXhpc3Qgd2l0aCB0
aGUgZ2l2ZW4gYXR0cmlidXRlcykKICAgICAvLyAgLSB0aGUgcHJvcGVydHkgbmFtZSBpcyBhc3N1
bWVkIHRvIG5vdCBiZSBhbiBpbmRleC4KICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCBwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLSAgICB2b2lkIHB1dERpcmVjdChKU0dsb2Jh
bERhdGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSAwKTsK
LSAgICB2b2lkIHB1dERpcmVjdChKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYpOwotICAgIHZvaWQgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
SlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
ID0gMCk7CisgICAgdm9pZCBwdXREaXJlY3QoVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMgPSAwKTsKKyAgICB2b2lkIHB1dERpcmVjdChWTSYsIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgdm9pZCBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmli
dXRlcyA9IDApOwogICAgIHZvaWQgcHV0RGlyZWN0QWNjZXNzb3IoRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKIAogICAgIGJvb2wgcHJvcGVy
dHlJc0VudW1lcmFibGUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
KSBjb25zdDsKQEAgLTQ5MywxNiArNDkzLDE2IEBAIHB1YmxpYzoKICAgICBib29sIGdldFByb3Bl
cnR5U3BlY2lmaWNWYWx1ZShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTQ2VsbComIHNwZWNp
ZmljRnVuY3Rpb24pIGNvbnN0OwogCiAgICAgLy8gVGhpcyBnZXQgZnVuY3Rpb24gb25seSBsb29r
cyBhdCB0aGUgcHJvcGVydHkgbWFwLgotICAgIEpTVmFsdWUgZ2V0RGlyZWN0KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKKyAgICBKU1Zh
bHVlIGdldERpcmVjdChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CiAg
ICAgewotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0KGds
b2JhbERhdGEsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IHN0cnVjdHVyZSgpLT5nZXQodm0sIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIGNoZWNrT2Zmc2V0
KG9mZnNldCwgc3RydWN0dXJlKCktPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICByZXR1cm4g
b2Zmc2V0ICE9IGludmFsaWRPZmZzZXQgPyBnZXREaXJlY3Qob2Zmc2V0KSA6IEpTVmFsdWUoKTsK
ICAgICB9CiAKLSAgICBQcm9wZXJ0eU9mZnNldCBnZXREaXJlY3RPZmZzZXQoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorICAgIFByb3BlcnR5T2Zm
c2V0IGdldERpcmVjdE9mZnNldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiAg
ICAgewotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0KGds
b2JhbERhdGEsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IHN0cnVjdHVyZSgpLT5nZXQodm0sIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIGNoZWNrT2Zmc2V0
KG9mZnNldCwgc3RydWN0dXJlKCktPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICByZXR1cm4g
b2Zmc2V0OwogICAgIH0KQEAgLTU0Nyw5ICs1NDcsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biAmb3V0T2ZMaW5lU3RvcmFnZSgpW29mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpXTsK
ICAgICB9CiAKLSAgICB2b2lkIHRyYW5zaXRpb25UbyhKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUq
KTsKKyAgICB2b2lkIHRyYW5zaXRpb25UbyhWTSYsIFN0cnVjdHVyZSopOwogCi0gICAgYm9vbCBy
ZW1vdmVEaXJlY3QoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lKTsgLy8gUmV0dXJuIHRydWUg
aWYgYW55dGhpbmcgaXMgcmVtb3ZlZC4KKyAgICBib29sIHJlbW92ZURpcmVjdChWTSYsIFByb3Bl
cnR5TmFtZSk7IC8vIFJldHVybiB0cnVlIGlmIGFueXRoaW5nIGlzIHJlbW92ZWQuCiAgICAgYm9v
bCBoYXNDdXN0b21Qcm9wZXJ0aWVzKCkgeyByZXR1cm4gc3RydWN0dXJlKCktPmRpZFRyYW5zaXRp
b24oKTsgfQogICAgIGJvb2wgaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpIHsgcmV0dXJuIHN0
cnVjdHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCk7IH0KIApAQCAtNTU4LDExICs1
NTgsMTEgQEAgcHVibGljOgogICAgIC8vICAtIHByb3ZpZGVzIG5vIHNwZWNpYWwgaGFuZGxpbmcg
Zm9yIF9fcHJvdG9fXwogICAgIC8vICAtIGRvZXMgbm90IHdhbGsgdGhlIHByb3RvdHlwZSBjaGFp
biAodG8gY2hlY2sgZm9yIGFjY2Vzc29ycyBvciBub24td3JpdGFibGUgcHJvcGVydGllcykuCiAg
ICAgLy8gVGhpcyBpcyB1c2VkIGJ5IEpTQWN0aXZhdGlvbi4KLSAgICBib29sIHB1dE93bkRhdGFQ
cm9wZXJ0eShKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOworICAgIGJvb2wgcHV0T3duRGF0YVByb3BlcnR5KFZNJiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgIC8vIEZhc3QgYWNjZXNzIHRvIGtub3du
IHByb3BlcnR5IG9mZnNldHMuCiAgICAgSlNWYWx1ZSBnZXREaXJlY3QoUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KSBjb25zdCB7IHJldHVybiBsb2NhdGlvbkZvck9mZnNldChvZmZzZXQpLT5nZXQoKTsg
fQotICAgIHZvaWQgcHV0RGlyZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0LCBKU1ZhbHVlIHZhbHVlKSB7IGxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCkt
PnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7IH0KKyAgICB2b2lkIHB1dERpcmVjdChWTSYg
dm0sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgSlNWYWx1ZSB2YWx1ZSkgeyBsb2NhdGlvbkZvck9m
ZnNldChvZmZzZXQpLT5zZXQodm0sIHRoaXMsIHZhbHVlKTsgfQogICAgIHZvaWQgcHV0RGlyZWN0
VW5kZWZpbmVkKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkgeyBsb2NhdGlvbkZvck9mZnNldChvZmZz
ZXQpLT5zZXRVbmRlZmluZWQoKTsgfQogCiAgICAgdm9pZCBwdXREaXJlY3ROYXRpdmVGdW5jdGlv
bihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IFByb3BlcnR5TmFtZSYsIHVuc2ln
bmVkIGZ1bmN0aW9uTGVuZ3RoLCBOYXRpdmVGdW5jdGlvbiwgSW50cmluc2ljLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzKTsKQEAgLTU3NSwxMSArNTc1LDExIEBAIHB1YmxpYzoKICAgICBib29sIGlzQWN0
aXZhdGlvbk9iamVjdCgpIGNvbnN0OwogICAgIGJvb2wgaXNFcnJvckluc3RhbmNlKCkgY29uc3Q7
CiAKLSAgICB2b2lkIHNlYWwoSlNHbG9iYWxEYXRhJik7Ci0gICAgdm9pZCBmcmVlemUoSlNHbG9i
YWxEYXRhJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmV2ZW50RXh0ZW5zaW9ucyhK
U0dsb2JhbERhdGEmKTsKLSAgICBib29sIGlzU2VhbGVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkgeyByZXR1cm4gc3RydWN0dXJlKCktPmlzU2VhbGVkKGdsb2JhbERhdGEpOyB9Ci0gICAgYm9v
bCBpc0Zyb3plbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpIHsgcmV0dXJuIHN0cnVjdHVyZSgp
LT5pc0Zyb3plbihnbG9iYWxEYXRhKTsgfQorICAgIHZvaWQgc2VhbChWTSYpOworICAgIHZvaWQg
ZnJlZXplKFZNJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmV2ZW50RXh0ZW5zaW9u
cyhWTSYpOworICAgIGJvb2wgaXNTZWFsZWQoVk0mIHZtKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+
aXNTZWFsZWQodm0pOyB9CisgICAgYm9vbCBpc0Zyb3plbihWTSYgdm0pIHsgcmV0dXJuIHN0cnVj
dHVyZSgpLT5pc0Zyb3plbih2bSk7IH0KICAgICBib29sIGlzRXh0ZW5zaWJsZSgpIHsgcmV0dXJu
IHN0cnVjdHVyZSgpLT5pc0V4dGVuc2libGUoKTsgfQogICAgIGJvb2wgaW5kZXhpbmdTaG91bGRC
ZVNwYXJzZSgpCiAgICAgewpAQCAtNTkwLDE2ICs1OTAsMTYgQEAgcHVibGljOgogICAgIGJvb2wg
c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpIHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5zdGF0aWNGdW5j
dGlvbnNSZWlmaWVkKCk7IH0KICAgICB2b2lkIHJlaWZ5U3RhdGljRnVuY3Rpb25zRm9yRGVsZXRl
KEV4ZWNTdGF0ZSogZXhlYyk7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBCdXR0ZXJmbHkqIGdy
b3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBvbGRTaXplLCBzaXplX3Qg
bmV3U2l6ZSk7Ci0gICAgdm9pZCBzZXRCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiwgQnV0dGVyZmx5
KiwgU3RydWN0dXJlKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQnV0dGVyZmx5KiBncm93T3V0
T2ZMaW5lU3RvcmFnZShWTSYsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7CisgICAg
dm9pZCBzZXRCdXR0ZXJmbHkoVk0mLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lk
IHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShCdXR0ZXJmbHkqKTsgLy8gWW91
IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gY2FsbCB0aGlzLgogICAgICAgICAKLSAgICB2b2lkIHNl
dFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiwg
dW5zaWduZWQgb2xkQ2FwYWNpdHksIFN0cnVjdHVyZSopOwotICAgIHZvaWQgc2V0U3RydWN0dXJl
QW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUq
KTsKKyAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3Nhcnko
Vk0mLCB1bnNpZ25lZCBvbGRDYXBhY2l0eSwgU3RydWN0dXJlKik7CisgICAgdm9pZCBzZXRTdHJ1
Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KFZNJiwgU3RydWN0dXJlKik7CiAK
LSAgICB2b2lkIGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKKyAgICB2b2lkIGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KFZNJiB2bSkKICAgICB7Ci0gICAg
ICAgIHN0cnVjdHVyZSgpLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShnbG9iYWxEYXRhLCB0
aGlzKTsKKyAgICAgICAgc3RydWN0dXJlKCktPmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKHZt
LCB0aGlzKTsKICAgICB9CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29u
c3QKQEAgLTYwOSw3ICs2MDksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmUo
KS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgfQogICAgICAgICAKLSAgICB2b2lkIHN3aXRjaFRvU2xv
d1B1dEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKKyAgICB2b2lkIHN3aXRjaFRvU2xvd1B1
dEFycmF5U3RvcmFnZShWTSYpOwogICAgICAgICAKICAgICAvLyBUaGUgcmVjZWl2ZXIgaXMgdGhl
IHByb3RvdHlwZSBpbiB0aGlzIGNhc2UuIFRoZSBmb2xsb3dpbmc6CiAgICAgLy8KQEAgLTYyNCw1
NyArNjI0LDU3IEBAIHB1YmxpYzoKICAgICAvLyBpbmRleGluZyBzaG91bGQgYmUgc3BhcnNlLCB3
ZSdyZSBoYXZpbmcgYSBiYWQgdGltZSwgb3IgYmVjYXVzZQogICAgIC8vIHdlIGFscmVhZHkgaGF2
ZSBhIG1vcmUgZ2VuZXJhbCBmb3JtIG9mIHN0b3JhZ2UgKGRvdWJsZSwKICAgICAvLyBjb250aWd1
b3VzLCBhcnJheSBzdG9yYWdlKS4KLSAgICBDb250aWd1b3VzSlNWYWx1ZXMgZW5zdXJlSW50MzIo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBlbnN1cmVJ
bnQzMihWTSYgdm0pCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKGhhc0ludDMyKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkpKQogICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5j
b250aWd1b3VzSW50MzIoKTsKICAgICAgICAgICAgIAotICAgICAgICByZXR1cm4gZW5zdXJlSW50
MzJTbG93KGdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4gZW5zdXJlSW50MzJTbG93KHZtKTsK
ICAgICB9CiAgICAgICAgIAogICAgIC8vIFJldHVybnMgMCBpZiBkb3VibGUgc3RvcmFnZSBjYW5u
b3QgYmUgY3JlYXRlZCAtIGVpdGhlciBiZWNhdXNlCiAgICAgLy8gaW5kZXhpbmcgc2hvdWxkIGJl
IHNwYXJzZSwgd2UncmUgaGF2aW5nIGEgYmFkIHRpbWUsIG9yIGJlY2F1c2UKICAgICAvLyB3ZSBh
bHJlYWR5IGhhdmUgYSBtb3JlIGdlbmVyYWwgZm9ybSBvZiBzdG9yYWdlIChjb250aWd1b3VzLAog
ICAgIC8vIG9yIGFycmF5IHN0b3JhZ2UpLgotICAgIENvbnRpZ3VvdXNEb3VibGVzIGVuc3VyZURv
dWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgQ29udGlndW91c0RvdWJsZXMgZW5z
dXJlRG91YmxlKFZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkoaGFzRG91YmxlKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpKQogICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVy
Zmx5LT5jb250aWd1b3VzRG91YmxlKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgcmV0dXJuIGVu
c3VyZURvdWJsZVNsb3coZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBlbnN1cmVEb3VibGVT
bG93KHZtKTsKICAgICB9CiAgICAgICAgIAogICAgIC8vIFJldHVybnMgMCBpZiBjb250aWd1b3Vz
IHN0b3JhZ2UgY2Fubm90IGJlIGNyZWF0ZWQgLSBlaXRoZXIgYmVjYXVzZQogICAgIC8vIGluZGV4
aW5nIHNob3VsZCBiZSBzcGFyc2Ugb3IgYmVjYXVzZSB3ZSdyZSBoYXZpbmcgYSBiYWQgdGltZS4K
LSAgICBDb250aWd1b3VzSlNWYWx1ZXMgZW5zdXJlQ29udGlndW91cyhKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCisgICAgQ29udGlndW91c0pTVmFsdWVzIGVuc3VyZUNvbnRpZ3VvdXMoVk0mIHZt
KQogICAgIHsKICAgICAgICAgaWYgKExJS0VMWShoYXNDb250aWd1b3VzKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkpKQogICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1
b3VzKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgcmV0dXJuIGVuc3VyZUNvbnRpZ3VvdXNTbG93
KGdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4gZW5zdXJlQ29udGlndW91c1Nsb3codm0pOwog
ICAgIH0KICAgICAgICAgCiAgICAgLy8gU2FtZSBhcyBlbnN1cmVDb250aWd1b3VzKCksIGV4Y2Vw
dCB0aGF0IGlmIHRoZSBpbmRleGVkIHN0b3JhZ2UgaXMgaW4KICAgICAvLyBkb3VibGUgbW9kZSwg
dGhlbiBpdCBkb2VzIGEgcmFnZSBjb252ZXJzaW9uIHRvIGNvbnRpZ3VvdXM6IGl0CiAgICAgLy8g
YXR0ZW1wdHMgdG8gY29udmVydCBlYWNoIGRvdWJsZSB0byBhbiBpbnQzMi4KLSAgICBDb250aWd1
b3VzSlNWYWx1ZXMgcmFnZUVuc3VyZUNvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KQorICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyByYWdlRW5zdXJlQ29udGlndW91cyhWTSYgdm0pCiAg
ICAgewogICAgICAgICBpZiAoTElLRUxZKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSkpCiAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KTsKICAgICAgICAgICAgIAotICAgICAgICByZXR1cm4gcmFnZUVuc3VyZUNvbnRpZ3VvdXNTbG93
KGdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4gcmFnZUVuc3VyZUNvbnRpZ3VvdXNTbG93KHZt
KTsKICAgICB9CiAgICAgICAgIAogICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgaW4g
YSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheSBzdG9yYWdlLiBVc2UKICAgICAvLyB0aGlzIGlmIHlv
dSdyZSBhYm91dCB0byBwZXJmb3JtIGFjdGlvbnMgdGhhdCB3b3VsZCBoYXZlIHJlcXVpcmVkIHRo
ZQogICAgIC8vIG9iamVjdCB0byBiZSBjb252ZXJ0ZWQgdG8gaGF2ZSBhcnJheSBzdG9yYWdlLCBp
ZiBpdCBkaWRuJ3QgaGF2ZSBpdAogICAgIC8vIGFscmVhZHkuCi0gICAgQXJyYXlTdG9yYWdlKiBl
bnN1cmVBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIEFycmF5U3Rv
cmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlKFZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIChMSUtF
TFkoaGFzQXJyYXlTdG9yYWdlKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpKQogICAgICAg
ICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgICAgIAot
ICAgICAgICByZXR1cm4gZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyhnbG9iYWxEYXRhKTsKKyAgICAg
ICAgcmV0dXJuIGVuc3VyZUFycmF5U3RvcmFnZVNsb3codm0pOwogICAgIH0KICAgICAgICAgCiAg
ICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZklubGluZVN0b3JhZ2UoKTsKQEAgLTY5Miw5ICs2OTIs
OSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNf
aW5mbzsKIAogcHJvdGVjdGVkOgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIHsKLSAg
ICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKICAg
ICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAg
IEFTU0VSVChzdHJ1Y3R1cmUoKS0+aXNFbXB0eSgpKTsKQEAgLTcwMywxNCArNzAzLDE0IEBAIHBy
b3RlY3RlZDoKICAgICAgICAgQVNTRVJUKGNsYXNzSW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICAvLyBU
byBpbnN0YW50aWF0ZSBvYmplY3RzIHlvdSBsaWtlbHkgd2FudCBKU0ZpbmFsT2JqZWN0LCBiZWxv
dy4KICAgICAvLyBUbyBjcmVhdGUgZGVyaXZlZCB0eXBlcyB5b3UgbGlrZWx5IHdhbnQgSlNOb25G
aW5hbE9iamVjdCwgYmVsb3cuCi0gICAgSlNPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJl
KiwgQnV0dGVyZmx5KiA9IDApOworICAgIEpTT2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgQnV0dGVy
Zmx5KiA9IDApOwogICAgICAgICAKICAgICB2b2lkIHZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9y
JiwgQnV0dGVyZmx5Kiwgc2l6ZV90IHN0b3JhZ2VTaXplKTsKICAgICB2b2lkIGNvcHlCdXR0ZXJm
bHkoQ29weVZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBzaXplX3Qgc3RvcmFnZVNpemUpOwpAQCAtNzM2
LDQyICs3MzYsNDIgQEAgcHJvdGVjdGVkOgogICAgICAgICB9CiAgICAgfQogICAgICAgICAKLSAg
ICBCdXR0ZXJmbHkqIGNyZWF0ZUluaXRpYWxVbmRlY2lkZWQoSlNHbG9iYWxEYXRhJiwgdW5zaWdu
ZWQgbGVuZ3RoKTsKLSAgICBDb250aWd1b3VzSlNWYWx1ZXMgY3JlYXRlSW5pdGlhbEludDMyKEpT
R2xvYmFsRGF0YSYsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgQ29udGlndW91c0RvdWJsZXMgY3Jl
YXRlSW5pdGlhbERvdWJsZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIENv
bnRpZ3VvdXNKU1ZhbHVlcyBjcmVhdGVJbml0aWFsQ29udGlndW91cyhKU0dsb2JhbERhdGEmLCB1
bnNpZ25lZCBsZW5ndGgpOwotICAgICAgICAKLSAgICB2b2lkIGNvbnZlcnRVbmRlY2lkZWRGb3JW
YWx1ZShKU0dsb2JhbERhdGEmLCBKU1ZhbHVlKTsKLSAgICB2b2lkIGNvbnZlcnRJbnQzMkZvclZh
bHVlKEpTR2xvYmFsRGF0YSYsIEpTVmFsdWUpOwotICAgICAgICAKLSAgICBBcnJheVN0b3JhZ2Uq
IGNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2ln
bmVkIHZlY3Rvckxlbmd0aCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVJbml0aWFsQXJyYXlT
dG9yYWdlKEpTR2xvYmFsRGF0YSYpOwotICAgICAgICAKLSAgICBDb250aWd1b3VzSlNWYWx1ZXMg
Y29udmVydFVuZGVjaWRlZFRvSW50MzIoSlNHbG9iYWxEYXRhJik7Ci0gICAgQ29udGlndW91c0Rv
dWJsZXMgY29udmVydFVuZGVjaWRlZFRvRG91YmxlKEpTR2xvYmFsRGF0YSYpOwotICAgIENvbnRp
Z3VvdXNKU1ZhbHVlcyBjb252ZXJ0VW5kZWNpZGVkVG9Db250aWd1b3VzKEpTR2xvYmFsRGF0YSYp
OwotICAgIEFycmF5U3RvcmFnZSogY29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdlKEpTR2xv
YmFsRGF0YSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKTsK
LSAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZShKU0dsb2Jh
bERhdGEmLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24pOwotICAgIEFycmF5U3RvcmFnZSogY29udmVy
dFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYpOwotICAgICAgICAKLSAgICBD
b250aWd1b3VzRG91YmxlcyBjb252ZXJ0SW50MzJUb0RvdWJsZShKU0dsb2JhbERhdGEmKTsKLSAg
ICBDb250aWd1b3VzSlNWYWx1ZXMgY29udmVydEludDMyVG9Db250aWd1b3VzKEpTR2xvYmFsRGF0
YSYpOwotICAgIEFycmF5U3RvcmFnZSogY29udmVydEludDMyVG9BcnJheVN0b3JhZ2UoSlNHbG9i
YWxEYXRhJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpOwot
ICAgIEFycmF5U3RvcmFnZSogY29udmVydEludDMyVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRh
JiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsKLSAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRJbnQz
MlRvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYpOworICAgIEJ1dHRlcmZseSogY3JlYXRlSW5p
dGlhbFVuZGVjaWRlZChWTSYsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgQ29udGlndW91c0pTVmFs
dWVzIGNyZWF0ZUluaXRpYWxJbnQzMihWTSYsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgQ29udGln
dW91c0RvdWJsZXMgY3JlYXRlSW5pdGlhbERvdWJsZShWTSYsIHVuc2lnbmVkIGxlbmd0aCk7Cisg
ICAgQ29udGlndW91c0pTVmFsdWVzIGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKFZNJiwgdW5zaWdu
ZWQgbGVuZ3RoKTsKKyAgICAgICAgCisgICAgdm9pZCBjb252ZXJ0VW5kZWNpZGVkRm9yVmFsdWUo
Vk0mLCBKU1ZhbHVlKTsKKyAgICB2b2lkIGNvbnZlcnRJbnQzMkZvclZhbHVlKFZNJiwgSlNWYWx1
ZSk7CisgICAgICAgIAorICAgIEFycmF5U3RvcmFnZSogY3JlYXRlQXJyYXlTdG9yYWdlKFZNJiwg
dW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpOworICAgIEFycmF5U3RvcmFn
ZSogY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShWTSYpOworICAgICAgICAKKyAgICBDb250aWd1
b3VzSlNWYWx1ZXMgY29udmVydFVuZGVjaWRlZFRvSW50MzIoVk0mKTsKKyAgICBDb250aWd1b3Vz
RG91YmxlcyBjb252ZXJ0VW5kZWNpZGVkVG9Eb3VibGUoVk0mKTsKKyAgICBDb250aWd1b3VzSlNW
YWx1ZXMgY29udmVydFVuZGVjaWRlZFRvQ29udGlndW91cyhWTSYpOworICAgIEFycmF5U3RvcmFn
ZSogY29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdlKFZNJiwgTm9uUHJvcGVydHlUcmFuc2l0
aW9uLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpOworICAgIEFycmF5U3RvcmFnZSogY29udmVydFVu
ZGVjaWRlZFRvQXJyYXlTdG9yYWdlKFZNJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsKKyAgICBB
cnJheVN0b3JhZ2UqIGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZShWTSYpOworICAgICAg
ICAKKyAgICBDb250aWd1b3VzRG91YmxlcyBjb252ZXJ0SW50MzJUb0RvdWJsZShWTSYpOworICAg
IENvbnRpZ3VvdXNKU1ZhbHVlcyBjb252ZXJ0SW50MzJUb0NvbnRpZ3VvdXMoVk0mKTsKKyAgICBB
cnJheVN0b3JhZ2UqIGNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKFZNJiwgTm9uUHJvcGVydHlU
cmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpOworICAgIEFycmF5U3RvcmFnZSogY29u
dmVydEludDMyVG9BcnJheVN0b3JhZ2UoVk0mLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24pOworICAg
IEFycmF5U3RvcmFnZSogY29udmVydEludDMyVG9BcnJheVN0b3JhZ2UoVk0mKTsKICAgICAKLSAg
ICBDb250aWd1b3VzSlNWYWx1ZXMgY29udmVydERvdWJsZVRvQ29udGlndW91cyhKU0dsb2JhbERh
dGEmKTsKLSAgICBDb250aWd1b3VzSlNWYWx1ZXMgcmFnZUNvbnZlcnREb3VibGVUb0NvbnRpZ3Vv
dXMoSlNHbG9iYWxEYXRhJik7Ci0gICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0RG91YmxlVG9BcnJh
eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uLCB1bnNpZ25lZCBu
ZWVkZWRMZW5ndGgpOwotICAgIEFycmF5U3RvcmFnZSogY29udmVydERvdWJsZVRvQXJyYXlTdG9y
YWdlKEpTR2xvYmFsRGF0YSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbik7Ci0gICAgQXJyYXlTdG9y
YWdlKiBjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJik7Ci0gICAgICAg
IAotICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0ds
b2JhbERhdGEmLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCk7
Ci0gICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xv
YmFsRGF0YSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbik7Ci0gICAgQXJyYXlTdG9yYWdlKiBjb252
ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYpOworICAgIENvbnRpZ3Vv
dXNKU1ZhbHVlcyBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKFZNJik7CisgICAgQ29udGlndW91
c0pTVmFsdWVzIHJhZ2VDb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKFZNJik7CisgICAgQXJyYXlT
dG9yYWdlKiBjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2UoVk0mLCBOb25Qcm9wZXJ0eVRyYW5z
aXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCk7CisgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0
RG91YmxlVG9BcnJheVN0b3JhZ2UoVk0mLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24pOworICAgIEFy
cmF5U3RvcmFnZSogY29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKFZNJik7CisgICAgICAgIAor
ICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShWTSYsIE5v
blByb3BlcnR5VHJhbnNpdGlvbiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKTsKKyAgICBBcnJheVN0
b3JhZ2UqIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoVk0mLCBOb25Qcm9wZXJ0eVRy
YW5zaXRpb24pOworICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3Rv
cmFnZShWTSYpOwogCiAgICAgICAgIAotICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9y
YWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYpOwor
ICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9u
YXJ5SW5kZXhpbmdNb2RlKFZNJik7CiAgICAgICAgIAogICAgIGJvb2wgZGVmaW5lT3duTm9uSW5k
ZXhQcm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYs
IGJvb2wgdGhyb3dFeGNlcHRpb24pOwogCkBAIC03NzksMjQgKzc3OSwyNCBAQCBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aG91dEF0dHJpYnV0ZXMo
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKTsKICAgICB2b2lkIHB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlTdG9y
YWdlKik7CiAKLSAgICBib29sIGluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYsIHVu
c2lnbmVkIG5ld0xlbmd0aCk7CisgICAgYm9vbCBpbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYsIHVu
c2lnbmVkIG5ld0xlbmd0aCk7CiAgICAgdm9pZCBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsK
ICAgICBib29sIGRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCwg
UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7Ci0gICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcCogYWxsb2NhdGVTcGFyc2VJbmRleE1hcChKU0dsb2JhbERhdGEmKTsKKyAgICBT
cGFyc2VBcnJheVZhbHVlTWFwKiBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKFZNJik7CiAgICAgICAg
IAotICAgIHZvaWQgbm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRBY2Nlc3NvcnMoSlNHbG9iYWxEYXRh
Jik7CisgICAgdm9pZCBub3RpZnlQcmVzZW5jZU9mSW5kZXhlZEFjY2Vzc29ycyhWTSYpOwogICAg
ICAgICAKICAgICBib29sIGF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGUoRXhlY1N0
YXRlKiwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgICAg
ICAKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IHdhbnQgc2V0SW5kZXhRdWlja2x5IHRvIHN1Y2Nl
ZWQgYW5kIHlvdSdyZSBzdXJlIHRoYXQKICAgICAvLyB0aGUgYXJyYXkgaXMgY29udGlndW91cy4K
LSAgICB2b2lkIGVuc3VyZUxlbmd0aChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVk
IGxlbmd0aCkKKyAgICB2b2lkIGVuc3VyZUxlbmd0aChWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChsZW5ndGggPCBNQVhfQVJSQVlfSU5ERVgpOwogICAgICAg
ICBBU1NFUlQoaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHx8IGhh
c0ludDMyKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgfHwgaGFzRG91YmxlKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgfHwgaGFzVW5kZWNpZGVkKHN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKSkpOwogICAgICAgICAgICAgCiAgICAgICAgIGlmIChtX2J1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCkgPCBsZW5ndGgpCi0gICAgICAgICAgICBlbnN1cmVMZW5ndGhTbG93KGdsb2JhbERh
dGEsIGxlbmd0aCk7CisgICAgICAgICAgICBlbnN1cmVMZW5ndGhTbG93KHZtLCBsZW5ndGgpOwog
ICAgICAgICAgICAgCiAgICAgICAgIGlmIChtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPCBs
ZW5ndGgpCiAgICAgICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7
CkBAIC05MTYsMTIgKzkxNiwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgaXNPYmplY3QoKTsKICAg
ICB2b2lkIGlzU3RyaW5nKCk7CiAgICAgICAgIAotICAgIEJ1dHRlcmZseSogY3JlYXRlSW5pdGlh
bEluZGV4ZWRTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGxlbmd0aCwgc2l6ZV90IGVs
ZW1lbnRTaXplKTsKKyAgICBCdXR0ZXJmbHkqIGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZShW
TSYsIHVuc2lnbmVkIGxlbmd0aCwgc2l6ZV90IGVsZW1lbnRTaXplKTsKICAgICAgICAgCi0gICAg
QXJyYXlTdG9yYWdlKiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdl
QWxyZWFkeUV4aXN0cyhKU0dsb2JhbERhdGEmLCBBcnJheVN0b3JhZ2UqKTsKKyAgICBBcnJheVN0
b3JhZ2UqIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5
RXhpc3RzKFZNJiwgQXJyYXlTdG9yYWdlKik7CiAgICAgICAgIAogICAgIHRlbXBsYXRlPFB1dE1v
ZGU+Ci0gICAgYm9vbCBwdXREaXJlY3RJbnRlcm5hbChKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1dFByb3BlcnR5U2xvdCYsIEpTQ2VsbCopOwor
ICAgIGJvb2wgcHV0RGlyZWN0SW50ZXJuYWwoVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVu
c2lnbmVkIGF0dHIsIFB1dFByb3BlcnR5U2xvdCYsIEpTQ2VsbCopOwogCiAgICAgYm9vbCBpbmxp
bmVHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3Qo
UHJvcGVydHlTbG90JiwgUHJvcGVydHlPZmZzZXQpOwpAQCAtOTM5LDI0ICs5MzksMjQgQEAgcHJp
dmF0ZToKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90U2xv
dyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICAKLSAg
ICBBcnJheVN0b3JhZ2UqIGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5
aW5nRWxlbWVudHMoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKTsKKyAgICBB
cnJheVN0b3JhZ2UqIGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5n
RWxlbWVudHMoVk0mLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpOwogICAgICAgICAKLSAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIHNldEluZGV4UXVpY2tseVRvVW5kZWNpZGVkKEpTR2xvYmFsRGF0
YSYsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGNvbnZlcnRJbnQzMlRvRG91YmxlT3JDb250aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXgo
SlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUpOwotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgY29udmVydERvdWJsZVRvQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldElu
ZGV4KEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlKTsKLSAgICAgICAgCi0g
ICAgdm9pZCBlbnN1cmVMZW5ndGhTbG93KEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGxlbmd0aCk7
Ci0gICAgICAgIAotICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBlbnN1cmVJbnQzMlNsb3coSlNHbG9i
YWxEYXRhJik7Ci0gICAgQ29udGlndW91c0RvdWJsZXMgZW5zdXJlRG91YmxlU2xvdyhKU0dsb2Jh
bERhdGEmKTsKLSAgICBDb250aWd1b3VzSlNWYWx1ZXMgZW5zdXJlQ29udGlndW91c1Nsb3coSlNH
bG9iYWxEYXRhJik7Ci0gICAgQ29udGlndW91c0pTVmFsdWVzIHJhZ2VFbnN1cmVDb250aWd1b3Vz
U2xvdyhKU0dsb2JhbERhdGEmKTsKLSAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFn
ZVNsb3coSlNHbG9iYWxEYXRhJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRJbmRl
eFF1aWNrbHlUb1VuZGVjaWRlZChWTSYsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbnZlcnRJbnQzMlRvRG91YmxlT3JDb250aWd1b3VzV2hp
bGVQZXJmb3JtaW5nU2V0SW5kZXgoVk0mLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSk7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzV2hpbGVQZXJm
b3JtaW5nU2V0SW5kZXgoVk0mLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSk7CisgICAgICAgIAor
ICAgIHZvaWQgZW5zdXJlTGVuZ3RoU2xvdyhWTSYsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAg
IAorICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBlbnN1cmVJbnQzMlNsb3coVk0mKTsKKyAgICBDb250
aWd1b3VzRG91YmxlcyBlbnN1cmVEb3VibGVTbG93KFZNJik7CisgICAgQ29udGlndW91c0pTVmFs
dWVzIGVuc3VyZUNvbnRpZ3VvdXNTbG93KFZNJik7CisgICAgQ29udGlndW91c0pTVmFsdWVzIHJh
Z2VFbnN1cmVDb250aWd1b3VzU2xvdyhWTSYpOworICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJy
YXlTdG9yYWdlU2xvdyhWTSYpOwogICAgIAogICAgIGVudW0gRG91YmxlVG9Db250aWd1b3VzTW9k
ZSB7IEVuY29kZVZhbHVlQXNEb3VibGUsIFJhZ2VDb252ZXJ0RG91YmxlVG9WYWx1ZSB9OwogICAg
IHRlbXBsYXRlPERvdWJsZVRvQ29udGlndW91c01vZGUgbW9kZT4KLSAgICBDb250aWd1b3VzSlNW
YWx1ZXMgZ2VuZXJpY0NvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJik7Ci0g
ICAgQ29udGlndW91c0pTVmFsdWVzIGVuc3VyZUNvbnRpZ3VvdXNTbG93KEpTR2xvYmFsRGF0YSYs
IERvdWJsZVRvQ29udGlndW91c01vZGUpOworICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBnZW5lcmlj
Q29udmVydERvdWJsZVRvQ29udGlndW91cyhWTSYpOworICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBl
bnN1cmVDb250aWd1b3VzU2xvdyhWTSYsIERvdWJsZVRvQ29udGlndW91c01vZGUpOwogICAgIAog
cHJvdGVjdGVkOgogICAgIEJ1dHRlcmZseSogbV9idXR0ZXJmbHk7CkBAIC05NzEsMjAgKzk3MSwy
MCBAQCBjbGFzcyBKU05vbkZpbmFsT2JqZWN0IDogcHVibGljIEpTT2JqZWN0CiBwdWJsaWM6CiAg
ICAgdHlwZWRlZiBKU09iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFs
RGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgSlNO
b25GaW5hbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IDApCi0gICAgICAgIDogSlNPYmplY3QoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCisgICAgZXhwbGljaXQgSlNOb25GaW5hbE9iamVj
dChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IDAp
CisgICAgICAgIDogSlNPYmplY3Qodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KQogICAgIHsKICAg
ICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICB7Ci0gICAgICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgICAgIEFTU0VSVCghdGhpcy0+c3RydWN0dXJlKCktPnRvdGFsU3RvcmFnZUNhcGFj
aXR5KCkpOwogICAgICAgICBBU1NFUlQoY2xhc3NJbmZvKCkpOwogICAgIH0KQEAgLTEwMTMsOSAr
MTAxMyw5IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNGaW5hbE9iamVjdCogY3Jl
YXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSkKKyAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNp
dHkpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEZpbmFsT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvLCBOb25BcnJheSwgaW5saW5lQ2FwYWNpdHkpOworICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhGaW5hbE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywgTm9uQXJyYXks
IGlubGluZUNhcGFjaXR5KTsKICAgICB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CkBAIC0xMDI1LDkgKzEw
MjUsOSBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCB2aXNpdENoaWxkcmVuQ29tbW9u
KFNsb3RWaXNpdG9yJik7CiAgICAgICAgIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAg
IHsKLSAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT50b3Rh
bFN0b3JhZ2VDYXBhY2l0eSgpID09IHN0cnVjdHVyZSgpLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAg
ICAgICAgQVNTRVJUKGNsYXNzSW5mbygpKTsKICAgICB9CkBAIC0xMDM1LDggKzEwMzUsOCBAQCBw
cm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CiAKLSAgICBleHBsaWNpdCBKU0ZpbmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgIDogSlNPYmplY3QoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlKQorICAgIGV4cGxpY2l0IEpTRmluYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU09iamVjdCh2bSwgc3RydWN0dXJlKQogICAgIHsKICAg
ICB9CiAKQEAgLTEwNTEsOCArMTA1MSw4IEBAIGlubGluZSBKU0ZpbmFsT2JqZWN0KiBKU0ZpbmFs
T2JqZWN0OjpjcmUKICAgICAgICAgICAgICpleGVjLT5oZWFwKCksCiAgICAgICAgICAgICBhbGxv
Y2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpCiAgICAgICAgICkKLSAgICAp
IEpTRmluYWxPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpOwotICAgIGZpbmFs
T2JqZWN0LT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICkgSlNGaW5h
bE9iamVjdChleGVjLT52bSgpLCBzdHJ1Y3R1cmUpOworICAgIGZpbmFsT2JqZWN0LT5maW5pc2hD
cmVhdGlvbihleGVjLT52bSgpKTsKICAgICByZXR1cm4gZmluYWxPYmplY3Q7CiB9CiAKQEAgLTEw
OTYsMTEgKzEwOTYsMTEgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OmlzRXJyb3JJbnN0YW5jZSgp
IAogICAgIHJldHVybiBzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gRXJyb3JJbnN0
YW5jZVR5cGU7CiB9CiAKLWlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCitpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0QnV0dGVyZmx5KFZNJiB2bSwgQnV0dGVy
Zmx5KiBidXR0ZXJmbHksIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIEFTU0VSVChzdHJ1
Y3R1cmUpOwogICAgIEFTU0VSVCghYnV0dGVyZmx5ID09ICghc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpICYmICFoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
KSkpOwotICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOworICAgIHNldFN0
cnVjdHVyZSh2bSwgc3RydWN0dXJlKTsKICAgICBtX2J1dHRlcmZseSA9IGJ1dHRlcmZseTsKIH0K
IApAQCAtMTEzNCw4ICsxMTM0LDggQEAgaW5saW5lIEpTT2JqZWN0KiBhc09iamVjdChKU1ZhbHVl
IHZhbHVlKQogICAgIHJldHVybiBhc09iamVjdCh2YWx1ZS5hc0NlbGwoKSk7CiB9CiAKLWlubGlu
ZSBKU09iamVjdDo6SlNPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCi0gICAgOiBKU0NlbGwoZ2xvYmFsRGF0
YSwgc3RydWN0dXJlKQoraW5saW5lIEpTT2JqZWN0OjpKU09iamVjdChWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKKyAgICA6IEpTQ2VsbCh2bSwgc3Ry
dWN0dXJlKQogICAgICwgbV9idXR0ZXJmbHkoYnV0dGVyZmx5KQogewogfQpAQCAtMTE0Nyw3ICsx
MTQ3LDcgQEAgaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OnByb3RvdHlwZSgpIGNvbgogCiBBTFdB
WVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmlubGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBz
dHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSk7CiAgICAgaWYgKExJS0VM
WShpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBnZXRE
aXJlY3Qob2Zmc2V0KTsKICAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQ
cm9wZXJ0aWVzKCkgJiYgdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSkKQEAgLTEyMTUsNyArMTIxNSw3
IEBAIGlubGluZSBKU1ZhbHVlIEpTT2JqZWN0OjpnZXQoRXhlY1N0YXRlKiAKIH0KIAogdGVtcGxh
dGU8SlNPYmplY3Q6OlB1dE1vZGUgbW9kZT4KLWlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJl
Y3RJbnRlcm5hbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dFByb3BlcnR5U2xv
dCYgc2xvdCwgSlNDZWxsKiBzcGVjaWZpY0Z1bmN0aW9uKQoraW5saW5lIGJvb2wgSlNPYmplY3Q6
OnB1dERpcmVjdEludGVybmFsKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0UHJvcGVydHlTbG90JiBzbG90LCBK
U0NlbGwqIHNwZWNpZmljRnVuY3Rpb24pCiB7CiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBBU1NF
UlQodmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSA9PSAhIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsK
QEAgLTEyMjUsMTYgKzEyMjUsMTYgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdElu
dGVybmFsKAogICAgIGlmIChzdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpIHsKICAgICAgICAg
dW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CiAgICAgICAgIEpTQ2VsbCogY3VycmVudFNwZWNp
ZmljRnVuY3Rpb247Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgp
LT5nZXQoZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcywgY3VycmVu
dFNwZWNpZmljRnVuY3Rpb24pOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1
Y3R1cmUoKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzLCBjdXJyZW50
U3BlY2lmaWNGdW5jdGlvbik7CiAgICAgICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkg
ewogICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgY3VycmVudGx5IGEgc3BlY2lmaWMgZnVuY3Rp
b24sIGFuZCB0aGVyZSBub3cgZWl0aGVyIGlzbid0LAogICAgICAgICAgICAgLy8gb3IgdGhlIG5l
dyB2YWx1ZSBpcyBkaWZmZXJlbnQsIHRoZW4gZGVzcGVjaWZ5LgogICAgICAgICAgICAgaWYgKGN1
cnJlbnRTcGVjaWZpY0Z1bmN0aW9uICYmIChzcGVjaWZpY0Z1bmN0aW9uICE9IGN1cnJlbnRTcGVj
aWZpY0Z1bmN0aW9uKSkKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUoKS0+ZGVzcGVjaWZ5RGlj
dGlvbmFyeUZ1bmN0aW9uKGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAg
ICAgc3RydWN0dXJlKCktPmRlc3BlY2lmeURpY3Rpb25hcnlGdW5jdGlvbih2bSwgcHJvcGVydHlO
YW1lKTsKICAgICAgICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0
cmlidXRlcyAmIFJlYWRPbmx5KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
ICAgICAgICAgcHV0RGlyZWN0KGdsb2JhbERhdGEsIG9mZnNldCwgdmFsdWUpOworICAgICAgICAg
ICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKICAgICAgICAgICAgIC8vIEF0IHRoaXMg
cG9pbnQsIHRoZSBvYmplY3RzIHN0cnVjdHVyZSBvbmx5IGhhcyBhIHNwZWNpZmljIHZhbHVlIHNl
dCBpZiBwcmV2aW91c2x5IHRoZXJlCiAgICAgICAgICAgICAvLyBoYWQgYmVlbiBvbmUgc2V0LCBh
bmQgaWYgdGhlIG5ldyB2YWx1ZSBiZWluZyBzcGVjaWZpZWQgaXMgdGhlIHNhbWUgKG90aGVyd2lz
ZSB3ZSB3b3VsZAogICAgICAgICAgICAgLy8gaGF2ZSBkZXNwZWNpZmllZCwgYWJvdmUpLiAgU28s
IGlmIGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uIGlzIG5vdCBzZXQsIG9yIGlmIHRoZSBuZXcKQEAg
LTEyNTEsMTMgKzEyNTEsMTMgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVy
bmFsKAogCiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHk7CiAg
ICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCi0g
ICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3Rl
ZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKLSAgICAgICAgb2Zmc2V0ID0gc3RydWN0
dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgcHJvcGVydHlO
YW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0aW9uKTsKLSAgICAgICAgc2V0QnV0dGVyZmx5
KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgc3RydWN0dXJlKCkpOworICAgICAgICAgICAgbmV3
QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNh
cGFjaXR5KCkpOworICAgICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRo
b3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0
aW9uKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHksIHN0cnVjdHVyZSgp
KTsKIAogICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgICAgICBBU1NFUlQoc3Ry
dWN0dXJlKCktPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAgICAgIHB1dERpcmVjdChnbG9i
YWxEYXRhLCBvZmZzZXQsIHZhbHVlKTsKKyAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZh
bHVlKTsKICAgICAgICAgLy8gU2VlIGNvbW1lbnQgb24gc2V0TmV3UHJvcGVydHkgY2FsbCBiZWxv
dy4KICAgICAgICAgaWYgKCFzcGVjaWZpY0Z1bmN0aW9uKQogICAgICAgICAgICAgc2xvdC5zZXRO
ZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwpAQCAtMTI3MSwxMiArMTI3MSwxMiBAQCBpbmxpbmUg
Ym9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgaWYgKFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0
dXJlKHRoaXMtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmlj
RnVuY3Rpb24sIG9mZnNldCkpIHsKICAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBt
X2J1dHRlcmZseTsKICAgICAgICAgaWYgKGN1cnJlbnRDYXBhY2l0eSAhPSBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkpCi0gICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZM
aW5lU3RvcmFnZShnbG9iYWxEYXRhLCBjdXJyZW50Q2FwYWNpdHksIHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5l
U3RvcmFnZSh2bSwgY3VycmVudENhcGFjaXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkpOwogCiAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVChz
dHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAgICAgIHNldEJ1dHRlcmZseShn
bG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB1dERpcmVjdChn
bG9iYWxEYXRhLCBvZmZzZXQsIHZhbHVlKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdC
dXR0ZXJmbHksIHN0cnVjdHVyZSk7CisgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1
ZSk7CiAgICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvcGVydHk7IHRyYW5zaXRpb25zIHdpdGgg
c3BlY2lmaWMgdmFsdWVzIGFyZSBub3QgY3VycmVudGx5IGNhY2hhYmxlLAogICAgICAgICAvLyBz
byBsZWF2ZSB0aGUgc2xvdCBpbiBhbiB1bmNhY2hhYmxlIHN0YXRlLgogICAgICAgICBpZiAoIXNw
ZWNpZmljRnVuY3Rpb24pCkBAIC0xMjg2LDcgKzEyODYsNyBAQCBpbmxpbmUgYm9vbCBKU09iamVj
dDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAKICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsK
ICAgICBKU0NlbGwqIGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uOwotICAgIG9mZnNldCA9IHN0cnVj
dHVyZSgpLT5nZXQoZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcywg
Y3VycmVudFNwZWNpZmljRnVuY3Rpb24pOworICAgIG9mZnNldCA9IHN0cnVjdHVyZSgpLT5nZXQo
dm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMsIGN1cnJlbnRTcGVjaWZpY0Z1bmN0
aW9uKTsKICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKICAgICAgICAgaWYgKCht
b2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUmVhZE9ubHkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMzAzLDI5ICsxMzAzLDI5IEBAIGlubGluZSBib29s
IEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICAgICAgaWYgKGN1cnJlbnRTcGVjaWZp
Y0Z1bmN0aW9uKSB7CiAgICAgICAgICAgICAvLyBjYXNlICgxKSBEbyB0aGUgcHV0LCB0aGVuIHJl
dHVybiBsZWF2aW5nIHRoZSBzbG90IHVuY2FjaGFibGUuCiAgICAgICAgICAgICBpZiAoc3BlY2lm
aWNGdW5jdGlvbiA9PSBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbikgewotICAgICAgICAgICAgICAg
IHB1dERpcmVjdChnbG9iYWxEYXRhLCBvZmZzZXQsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBw
dXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gY2FzZSAoMikgRGVzcGVjaWZ5LCBmYWxs
IHRocm91Z2ggdG8gKDMpLgotICAgICAgICAgICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0
cnVjdHVyZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSgpLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0
dXJlOjpkZXNwZWNpZnlGdW5jdGlvblRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSgpLCBwcm9wZXJ0
eU5hbWUpKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIGNhc2UgKDMpIHNldCB0aGUgc2xvdCwg
ZG8gdGhlIHB1dCwgcmV0dXJuLgogICAgICAgICBzbG90LnNldEV4aXN0aW5nUHJvcGVydHkodGhp
cywgb2Zmc2V0KTsKLSAgICAgICAgcHV0RGlyZWN0KGdsb2JhbERhdGEsIG9mZnNldCwgdmFsdWUp
OworICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgIWlzRXh0ZW5z
aWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHRoaXMtPnN0
cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24sIG9m
ZnNldCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5
VHJhbnNpdGlvbih2bSwgdGhpcy0+c3RydWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRl
cywgc3BlY2lmaWNGdW5jdGlvbiwgb2Zmc2V0KTsKICAgICAKICAgICB2YWxpZGF0ZU9mZnNldChv
ZmZzZXQpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0g
ICAgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUpOworICAgIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNl
c3Nhcnkodm0sIHN0cnVjdHVyZSk7CiAKLSAgICBwdXREaXJlY3QoZ2xvYmFsRGF0YSwgb2Zmc2V0
LCB2YWx1ZSk7CisgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKICAgICAvLyBUaGlz
IGlzIGEgbmV3IHByb3BlcnR5OyB0cmFuc2l0aW9ucyB3aXRoIHNwZWNpZmljIHZhbHVlcyBhcmUg
bm90IGN1cnJlbnRseSBjYWNoYWJsZSwKICAgICAvLyBzbyBsZWF2ZSB0aGUgc2xvdCBpbiBhbiB1
bmNhY2hhYmxlIHN0YXRlLgogICAgIGlmICghc3BlY2lmaWNGdW5jdGlvbikKQEAgLTEzMzUsNTcg
KzEzMzUsNTcgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAg
IHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5k
UmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVu
c2lnbmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSkKK2lubGluZSB2b2lk
IEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KFZN
JiB2bSwgdW5zaWduZWQgb2xkQ2FwYWNpdHksIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKQogewog
ICAgIEFTU0VSVChvbGRDYXBhY2l0eSA8PSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkpOwogICAgIAogICAgIGlmIChvbGRDYXBhY2l0eSA9PSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIG5ld1N0cnVj
dHVyZSk7CisgICAgICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGdyb3dP
dXRPZkxpbmVTdG9yYWdlKAotICAgICAgICBnbG9iYWxEYXRhLCBvbGRDYXBhY2l0eSwgbmV3U3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0
YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOworICAgICAgICB2bSwgb2xkQ2FwYWNpdHks
IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgc2V0QnV0dGVyZmx5KHZt
LCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CiB9CiAKLWlubGluZSB2b2lkIEpTT2JqZWN0
OjpzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUpCitpbmxpbmUgdm9pZCBKU09i
amVjdDo6c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShWTSYgdm0s
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKQogewogICAgIHNldFN0cnVjdHVyZUFuZFJlYWxsb2Nh
dGVTdG9yYWdlSWZOZWNlc3NhcnkoCi0gICAgICAgIGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdTdHJ1Y3R1cmUpOworICAgICAgICB2bSwgc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1N0cnVjdHVyZSk7CiB9CiAKLWlubGluZSBib29s
IEpTT2JqZWN0OjpwdXRPd25EYXRhUHJvcGVydHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QpCitpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0T3duRGF0YVByb3BlcnR5KFZNJiB2bSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90
JiBzbG90KQogewogICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZh
bHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKICAgICBBU1NF
UlQoIXN0cnVjdHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkpOwogCi0gICAgcmV0
dXJuIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KGdsb2JhbERhdGEsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIDAsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7CisgICAgcmV0dXJu
IHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAw
LCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOwogfQogCi1pbmxpbmUgdm9pZCBKU09i
amVjdDo6cHV0RGlyZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKK2lubGluZSB2
b2lkIEpTT2JqZWN0OjpwdXREaXJlY3QoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewogICAgIEFTU0VSVCghdmFs
dWUuaXNHZXR0ZXJTZXR0ZXIoKSAmJiAhKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpOwogICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90OwotICAgIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZpbmVP
d25Qcm9wZXJ0eT4oZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcywg
c2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKKyAgICBwdXREaXJlY3RJbnRlcm5hbDxQ
dXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1
dGVzLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOwogfQogCi1pbmxpbmUgdm9pZCBK
U09iamVjdDo6cHV0RGlyZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQoraW5s
aW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NF
UlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpOwotICAgIHB1dERpcmVjdEludGVybmFsPFB1dE1v
ZGVEZWZpbmVPd25Qcm9wZXJ0eT4oZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwg
c2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKKyAgICBwdXREaXJlY3RJbnRlcm5hbDxQ
dXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90
LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
KQoraW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2
bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0
cmlidXRlcykKIHsKICAgICBBU1NFUlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgJiYgIShhdHRy
aWJ1dGVzICYgQWNjZXNzb3IpKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0
dGVyZmx5OwogICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdl
KCkpCi0gICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERh
dGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2Vz
dGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwotICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCA9IHN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKGdsb2JhbERh
dGEsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsK
LSAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBzdHJ1Y3R1cmUoKSk7
Ci0gICAgcHV0RGlyZWN0KGdsb2JhbERhdGEsIG9mZnNldCwgdmFsdWUpOworICAgICAgICBuZXdC
dXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2Fw
YWNpdHkoKSk7CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmFkZFBy
b3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgZ2V0
Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZs
eSwgc3RydWN0dXJlKCkpOworICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiB9CiAK
IGlubGluZSBKU1ZhbHVlIEpTT2JqZWN0Ojp0b1ByaW1pdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIFBy
ZWZlcnJlZFByaW1pdGl2ZVR5cGUgcHJlZmVycmVkVHlwZSkgY29uc3QKQEAgLTE0NTMsNyArMTQ1
Myw3IEBAIENPTVBJTEVfQVNTRVJUKCEoc2l6ZW9mKEpTT2JqZWN0KSAlIHNpemUKIAogLy8gSGVs
cGVyIGZvciBkZWZpbmluZyBuYXRpdmUgZnVuY3Rpb25zLCBpZiB5b3UncmUgbm90IHVzaW5nIGEg
c3RhdGljIGhhc2ggdGFibGUuCiAvLyBVc2UgdGhpcyBtYWNybyBmcm9tIHdpdGhpbiBmaW5pc2hD
cmVhdGlvbigpIG1ldGhvZHMgaW4gcHJvdG90eXBlcy4gVGhpcyBhc3N1bWVzCi0vLyB5b3UndmUg
ZGVmaW5lZCB2YXJpYWJsZXMgY2FsbGVkIGV4ZWMsIGdsb2JhbE9iamVjdCwgYW5kIGdsb2JhbERh
dGEsIGFuZCB0aGV5CisvLyB5b3UndmUgZGVmaW5lZCB2YXJpYWJsZXMgY2FsbGVkIGV4ZWMsIGds
b2JhbE9iamVjdCwgYW5kIHZtLCBhbmQgdGhleQogLy8gaGF2ZSB0aGUgZXhwZWN0ZWQgbWVhbmlu
Z3MuCiAjZGVmaW5lIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OKGpzTmFtZSwgY3BwTmFt
ZSwgYXR0cmlidXRlcywgbGVuZ3RoLCBpbnRyaW5zaWMpIFwKICAgICBwdXREaXJlY3ROYXRpdmVG
dW5jdGlvbihcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjb25zdCBDbGFz
c0luZm8gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6c19pbmZvID0geyAiSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvciIsIDAsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvcikgfTsKIAogaW5saW5lIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OkpTUHJvcGVydHlOYW1l
SXRlcmF0b3IoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheURhdGEqIHByb3BlcnR5
TmFtZUFycmF5RGF0YSwgc2l6ZV90IG51bUNhY2hlYWJsZVNsb3RzKQotICAgIDogSlNDZWxsKGV4
ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZUl0ZXJhdG9y
U3RydWN0dXJlLmdldCgpKQorICAgIDogSlNDZWxsKGV4ZWMtPnZtKCksIGV4ZWMtPnZtKCkucHJv
cGVydHlOYW1lSXRlcmF0b3JTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX251bUNhY2hlYWJsZVNs
b3RzKG51bUNhY2hlYWJsZVNsb3RzKQogICAgICwgbV9qc1N0cmluZ3NTaXplKHByb3BlcnR5TmFt
ZUFycmF5RGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKCkuc2l6ZSgpKQogICAgICwgbV9qc1N0cmlu
Z3MoYWRvcHRBcnJheVB0cihuZXcgV3JpdGVCYXJyaWVyPFVua25vd24+W21fanNTdHJpbmdzU2l6
ZV0pKQpAQCAtNzYsOSArNzYsOSBAQCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBKU1Byb3BlcnR5
TmFtZUl0CiAgICAgICAgICAgICByZXR1cm4ganNQcm9wZXJ0eU5hbWVJdGVyYXRvcjsKICAgICB9
CiAKLSAgICBqc1Byb3BlcnR5TmFtZUl0ZXJhdG9yLT5zZXRDYWNoZWRQcm90b3R5cGVDaGFpbihl
eGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZUNoYWluKTsKLSAgICBqc1Byb3BlcnR5TmFtZUl0
ZXJhdG9yLT5zZXRDYWNoZWRTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBvLT5zdHJ1Y3R1
cmUoKSk7Ci0gICAgby0+c3RydWN0dXJlKCktPnNldEVudW1lcmF0aW9uQ2FjaGUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBqc1Byb3BlcnR5TmFtZUl0ZXJhdG9yKTsKKyAgICBqc1Byb3BlcnR5TmFtZUl0
ZXJhdG9yLT5zZXRDYWNoZWRQcm90b3R5cGVDaGFpbihleGVjLT52bSgpLCBzdHJ1Y3R1cmVDaGFp
bik7CisgICAganNQcm9wZXJ0eU5hbWVJdGVyYXRvci0+c2V0Q2FjaGVkU3RydWN0dXJlKGV4ZWMt
PnZtKCksIG8tPnN0cnVjdHVyZSgpKTsKKyAgICBvLT5zdHJ1Y3R1cmUoKS0+c2V0RW51bWVyYXRp
b25DYWNoZShleGVjLT52bSgpLCBqc1Byb3BlcnR5TmFtZUl0ZXJhdG9yKTsKICAgICByZXR1cm4g
anNQcm9wZXJ0eU5hbWVJdGVyYXRvcjsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaAkocmV2aXNpb24g
MTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7
CiAgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgICAgCi0gICAgICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAg
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhDb21wb3VuZFR5cGUsIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4p
LCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENvbXBvdW5kVHlwZSwgT3ZlcnJpZGVzVmlz
aXRDaGlsZHJlbiksICZzX2luZm8pOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpAQCAtNjIsMTUgKzYyLDE1IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBKU09iamVj
dCosIHNpemVfdCBpKTsKICAgICAgICAgc2l6ZV90IHNpemUoKSB7IHJldHVybiBtX2pzU3RyaW5n
c1NpemU7IH0KIAotICAgICAgICB2b2lkIHNldENhY2hlZFN0cnVjdHVyZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICB2b2lkIHNldENhY2hl
ZFN0cnVjdHVyZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICB7CiAgICAg
ICAgICAgICBBU1NFUlQoIW1fY2FjaGVkU3RydWN0dXJlKTsKICAgICAgICAgICAgIEFTU0VSVChz
dHJ1Y3R1cmUpOwotICAgICAgICAgICAgbV9jYWNoZWRTdHJ1Y3R1cmUuc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHN0cnVjdHVyZSk7CisgICAgICAgICAgICBtX2NhY2hlZFN0cnVjdHVyZS5zZXQodm0s
IHRoaXMsIHN0cnVjdHVyZSk7CiAgICAgICAgIH0KICAgICAgICAgU3RydWN0dXJlKiBjYWNoZWRT
dHJ1Y3R1cmUoKSB7IHJldHVybiBtX2NhY2hlZFN0cnVjdHVyZS5nZXQoKTsgfQogCi0gICAgICAg
IHZvaWQgc2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBT
dHJ1Y3R1cmVDaGFpbiogY2FjaGVkUHJvdG90eXBlQ2hhaW4pIHsgbV9jYWNoZWRQcm90b3R5cGVD
aGFpbi5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgY2FjaGVkUHJvdG90eXBlQ2hhaW4pOyB9CisgICAg
ICAgIHZvaWQgc2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4oVk0mIHZtLCBTdHJ1Y3R1cmVDaGFpbiog
Y2FjaGVkUHJvdG90eXBlQ2hhaW4pIHsgbV9jYWNoZWRQcm90b3R5cGVDaGFpbi5zZXQodm0sIHRo
aXMsIGNhY2hlZFByb3RvdHlwZUNoYWluKTsgfQogICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2Fj
aGVkUHJvdG90eXBlQ2hhaW4oKSB7IHJldHVybiBtX2NhY2hlZFByb3RvdHlwZUNoYWluLmdldCgp
OyB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOwpAQCAtNzgsMTAgKzc4LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByb3Rl
Y3RlZDoKICAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5RGF0YSogcHJvcGVydHlOYW1lQXJyYXlEYXRhLCBKU09iamVjdCogb2JqZWN0
KQogICAgICAgICB7Ci0gICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9i
YWxEYXRhKCkpOworICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7
CiAgICAgICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheURhdGE6OlByb3BlcnR5TmFtZVZlY3RvciYg
cHJvcGVydHlOYW1lVmVjdG9yID0gcHJvcGVydHlOYW1lQXJyYXlEYXRhLT5wcm9wZXJ0eU5hbWVW
ZWN0b3IoKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9qc1N0cmluZ3NT
aXplOyArK2kpCi0gICAgICAgICAgICAgICAgbV9qc1N0cmluZ3NbaV0uc2V0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywganNPd25lZFN0cmluZyhleGVjLCBwcm9wZXJ0eU5hbWVWZWN0b3JbaV0u
c3RyaW5nKCkpKTsKKyAgICAgICAgICAgICAgICBtX2pzU3RyaW5nc1tpXS5zZXQoZXhlYy0+dm0o
KSwgdGhpcywganNPd25lZFN0cmluZyhleGVjLCBwcm9wZXJ0eU5hbWVWZWN0b3JbaV0uc3RyaW5n
KCkpKTsKICAgICAgICAgICAgIG1fY2FjaGVkU3RydWN0dXJlSW5saW5lQ2FwYWNpdHkgPSBvYmpl
Y3QtPnN0cnVjdHVyZSgpLT5pbmxpbmVDYXBhY2l0eSgpOwogICAgICAgICB9CiAKQEAgLTEwOCw5
ICsxMDgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIG1fZW51bWVyYXRpb25D
YWNoZS5nZXQoKTsKICAgICB9CiAgICAgCi0gICAgaW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURh
dGE6OnNldEVudW1lcmF0aW9uQ2FjaGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBT
dHJ1Y3R1cmUqIG93bmVyLCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiB2YWx1ZSkKKyAgICBpbmxp
bmUgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0RW51bWVyYXRpb25DYWNoZShWTSYgdm0sIGNv
bnN0IFN0cnVjdHVyZSogb3duZXIsIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIHZhbHVlKQogICAg
IHsKLSAgICAgICAgbV9lbnVtZXJhdGlvbkNhY2hlLnNldChnbG9iYWxEYXRhLCBvd25lciwgdmFs
dWUpOworICAgICAgICBtX2VudW1lcmF0aW9uQ2FjaGUuc2V0KHZtLCBvd25lciwgdmFsdWUpOwog
ICAgIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Byb3h5LmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEzICs0Nywx
MyBAQCB2b2lkIEpTUHJveHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsCiAgICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdGFyZ2V0KTsKIH0KIAotdm9pZCBKU1Byb3h5OjpzZXRU
YXJnZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQordm9pZCBKU1Byb3h5OjpzZXRUYXJnZXQoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQogewogICAgIEFTU0VSVF9BUkcoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qp
OwotICAgIG1fdGFyZ2V0LnNldChnbG9iYWxEYXRhLCB0aGlzLCBnbG9iYWxPYmplY3QpOwotICAg
IHNldFByb3RvdHlwZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QtPnByb3RvdHlwZSgpKTsKKyAg
ICBtX3RhcmdldC5zZXQodm0sIHRoaXMsIGdsb2JhbE9iamVjdCk7CisgICAgc2V0UHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QtPnByb3RvdHlwZSgpKTsKIAotICAgIFByb3RvdHlwZU1hcCYgcHJv
dG90eXBlTWFwID0gZ2xvYmFsRGF0YS5wcm90b3R5cGVNYXA7CisgICAgUHJvdG90eXBlTWFwJiBw
cm90b3R5cGVNYXAgPSB2bS5wcm90b3R5cGVNYXA7CiAgICAgaWYgKCFwcm90b3R5cGVNYXAuaXNQ
cm90b3R5cGUodGhpcykpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJveHkuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxNiArMzQs
MTYgQEAgY2xhc3MgSlNQcm94eSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iagogcHVibGljOgog
ICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBKU1By
b3h5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNPYmplY3QqIHRhcmdldCkKKyAgICBzdGF0aWMgSlNQcm94eSogY3JlYXRlKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiB0YXJnZXQpCiAgICAgewotICAgICAgICBK
U1Byb3h5KiBwcm94eSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTUHJveHk+KGdsb2Jh
bERhdGEuaGVhcCkpIEpTUHJveHkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKLSAgICAgICAgcHJv
eHktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIHRhcmdldCk7CisgICAgICAgIEpTUHJveHkq
IHByb3h5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNQcm94eT4odm0uaGVhcCkpIEpT
UHJveHkodm0sIHN0cnVjdHVyZSk7CisgICAgICAgIHByb3h5LT5maW5pc2hDcmVhdGlvbih2bSwg
dGFyZ2V0KTsKICAgICAgICAgcmV0dXJuIHByb3h5OwogICAgIH0KIAotICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhQcm94
eVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKFByb3h5VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgSlNfRVhQ
T1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpAQCAtNTEsMjcgKzUxLDI3IEBAIHB1Ymxp
YzoKICAgICBKU09iamVjdCogdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQuZ2V0KCk7
IH0KIAogcHJvdGVjdGVkOgotICAgIEpTUHJveHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgOiBKU0Rlc3RydWN0aWJsZU9iamVjdChnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUpCisgICAgSlNQcm94eShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgICAgICA6IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCiAgICAg
ewogICAgIH0KIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIHsKLSAgICAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNPYmplY3QqIHRhcmdldCkKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgSlNPYmplY3QqIHRhcmdldCkKICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpOwotICAgICAgICBtX3RhcmdldC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
dGFyZ2V0KTsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICBtX3Rh
cmdldC5zZXQodm0sIHRoaXMsIHRhcmdldCk7CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBJbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgQmFz
ZTo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHNldFRhcmdldChKU0dsb2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCopOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0VGFyZ2V0KFZNJiwgSlNHbG9iYWxPYmplY3QqKTsK
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpT
T2JqZWN0Kik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkocmV2aXNp
b24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlUmVz
b2x2ZU9wZXJhdGlvbnMoQ2FsCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIHBjLT5tX3N0cnVjdHVyZS5zZXQoY2FsbEZyYW1lLT5nbG9i
YWxEYXRhKCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1
Y3R1cmUpOworICAgICAgICAgICAgcGMtPm1fc3RydWN0dXJlLnNldChjYWxsRnJhbWUtPnZtKCks
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOwog
ICAgICAgICAgICAgcGMtPm1fb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKICAgICAgICAg
ICAgIHJlc3VsdC5zZXRWYWx1ZSh2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTMwMyw3ICszMDMsNyBAQCB0ZW1wbGF0ZSA8SlNTY29wZTo6TG9va3VwTW9kZSBtb2RlLCBKU1Nj
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHV0VG9CYXNlT3BlcmF0aW9uKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHV0VG9CYXNlT3BlcmF0aW9uLT5tX2lzRHluYW1pYyA9
IHJlcXVpcmVzRHluYW1pY0NoZWNrczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRU
b0Jhc2VPcGVyYXRpb24tPm1fa2luZCA9IFB1dFRvQmFzZU9wZXJhdGlvbjo6R2xvYmFsUHJvcGVy
dHlQdXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0VG9CYXNlT3BlcmF0aW9uLT5t
X3N0cnVjdHVyZS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLCBnbG9iYWxPYmplY3QtPnN0cnVjdHVyZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRUb0Jhc2VPcGVyYXRpb24tPm1fc3RydWN0dXJl
LnNldChjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0
YWJsZSgpLCBnbG9iYWxPYmplY3QtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZXRQdXRQcm9wZXJ0eUFjY2Vzc09mZnNldChwdXRUb0Jhc2VPcGVyYXRpb24sIHNs
b3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoIChyZXR1cm5WYWx1ZXMpIHsKQEAgLTM0Niw3ICszNDYsNyBA
QCB0ZW1wbGF0ZSA8SlNTY29wZTo6TG9va3VwTW9kZSBtb2RlLCBKU1NjCiAKICAgICAgICAgICAg
ICAgICAgICAgaWYgKHB1dFRvQmFzZU9wZXJhdGlvbikgewogICAgICAgICAgICAgICAgICAgICAg
ICAgcHV0VG9CYXNlT3BlcmF0aW9uLT5tX2tpbmQgPSBlbnRyeS5pc1JlYWRPbmx5KCkgPyBQdXRU
b0Jhc2VPcGVyYXRpb246OlJlYWRvbmx5IDogUHV0VG9CYXNlT3BlcmF0aW9uOjpWYXJpYWJsZVB1
dDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1dFRvQmFzZU9wZXJhdGlvbi0+bV9zdHJ1Y3R1
cmUuc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5v
d25lckV4ZWN1dGFibGUoKSwgY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFjdGl2
YXRpb25TdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXRUb0Jhc2VPcGVy
YXRpb24tPm1fc3RydWN0dXJlLnNldChjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFRv
QmFzZU9wZXJhdGlvbi0+bV9vZmZzZXQgPSBlbnRyeS5nZXRJbmRleCgpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgcHV0VG9CYXNlT3BlcmF0aW9uLT5tX3Njb3BlRGVwdGggPSAoc2tpcFRvcFNj
b3BlTm9kZSA/IDEgOiAwKSArIHNjb3BlQ291bnQ7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAg
LTQ5OSw3ICs0OTksNyBAQCBKU1ZhbHVlIEpTU2NvcGU6OnJlc29sdmVXaXRoQmFzZShDYWxsRnJh
CiAgICAgaWYgKEpTT2JqZWN0KiBwcm9wZXJ0eUJhc2UgPSBKU1Njb3BlOjpyZXNvbHZlQ29udGFp
bmluZ1Njb3BlPFJldHVybkJhc2VBbmRWYWx1ZT4oY2FsbEZyYW1lLCBpZGVudGlmaWVyLCBzbG90
LCBvcGVyYXRpb25zLCBwdXRUb0Jhc2VPcGVyYXRpb25zLCBmYWxzZSkpIHsKICAgICAgICAgQVNT
RVJUKG9wZXJhdGlvbnMtPnNpemUoKSk7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzbG90Lmdl
dFZhbHVlKGNhbGxGcmFtZSwgaWRlbnRpZmllcik7Ci0gICAgICAgIGlmIChjYWxsRnJhbWUtPmds
b2JhbERhdGEoKS5leGNlcHRpb24pCisgICAgICAgIGlmIChjYWxsRnJhbWUtPnZtKCkuZXhjZXB0
aW9uKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKIAogICAgICAgICAqYmFzZSA9IHBy
b3BlcnR5QmFzZTsKQEAgLTUyOSw3ICs1MjksNyBAQCBKU1ZhbHVlIEpTU2NvcGU6OnJlc29sdmVX
aXRoVGhpcyhDYWxsRnJhCiAgICAgaWYgKEpTT2JqZWN0KiBwcm9wZXJ0eUJhc2UgPSBKU1Njb3Bl
OjpyZXNvbHZlQ29udGFpbmluZ1Njb3BlPFJldHVyblRoaXNBbmRWYWx1ZT4oY2FsbEZyYW1lLCBp
ZGVudGlmaWVyLCBzbG90LCBvcGVyYXRpb25zLCAwLCBmYWxzZSkpIHsKICAgICAgICAgQVNTRVJU
KG9wZXJhdGlvbnMtPnNpemUoKSk7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzbG90LmdldFZh
bHVlKGNhbGxGcmFtZSwgaWRlbnRpZmllcik7Ci0gICAgICAgIGlmIChjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKS5leGNlcHRpb24pCisgICAgICAgIGlmIChjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9u
KQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgQVNTRVJUKHZhbHVlKTsK
ICAgICAgICAgKmJhc2UgPSBwcm9wZXJ0eUJhc2UtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLmlz
RW52aXJvbm1lbnRSZWNvcmQoKSA/IGpzVW5kZWZpbmVkKCkgOiBKU1ZhbHVlKHByb3BlcnR5QmFz
ZSk7CkBAIC01NjQsNyArNTY0LDcgQEAgdm9pZCBKU1Njb3BlOjpyZXNvbHZlUHV0KENhbGxGcmFt
ZSogY2FsbAogICAgICAgICAgICAgICAgIGdvdG8gZ2VuZXJpY0hhbmRsZXI7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KLSAgICAgICAgb3BlcmF0aW9uLT5tX3JlZ2lzdGVyQWRkcmVzcy0+c2V0
KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBiYXNlLmFzQ2VsbCgpLCB2YWx1ZSk7CisgICAgICAg
IG9wZXJhdGlvbi0+bV9yZWdpc3RlckFkZHJlc3MtPnNldChjYWxsRnJhbWUtPnZtKCksIGJhc2Uu
YXNDZWxsKCksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBQdXRUb0Jhc2VP
cGVyYXRpb246OlZhcmlhYmxlUHV0OiB7CkBAIC01NzQsNyArNTc0LDcgQEAgdm9pZCBKU1Njb3Bl
OjpyZXNvbHZlUHV0KENhbGxGcmFtZSogY2FsbAogICAgICAgICAgICAgICAgIGdvdG8gZ2VuZXJp
Y0hhbmRsZXI7CiAgICAgICAgIH0KICAgICAgICAgSlNWYXJpYWJsZU9iamVjdCogdmFyaWFibGVP
YmplY3QgPSBqc0Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KGJhc2UpOwotICAgICAgICB2YXJpYWJs
ZU9iamVjdC0+cmVnaXN0ZXJBdChvcGVyYXRpb24tPm1fb2Zmc2V0KS5zZXQoY2FsbEZyYW1lLT5n
bG9iYWxEYXRhKCksIHZhcmlhYmxlT2JqZWN0LCB2YWx1ZSk7CisgICAgICAgIHZhcmlhYmxlT2Jq
ZWN0LT5yZWdpc3RlckF0KG9wZXJhdGlvbi0+bV9vZmZzZXQpLnNldChjYWxsRnJhbWUtPnZtKCks
IHZhcmlhYmxlT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU4
Miw3ICs1ODIsNyBAQCB2b2lkIEpTU2NvcGU6OnJlc29sdmVQdXQoQ2FsbEZyYW1lKiBjYWxsCiAg
ICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihiYXNlKTsKICAgICAg
ICAgaWYgKG9wZXJhdGlvbi0+bV9zdHJ1Y3R1cmUuZ2V0KCkgIT0gb2JqZWN0LT5zdHJ1Y3R1cmUo
KSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBvYmplY3QtPnB1dERpcmVjdChjYWxsRnJh
bWUtPmdsb2JhbERhdGEoKSwgb3BlcmF0aW9uLT5tX29mZnNldCwgdmFsdWUpOworICAgICAgICBv
YmplY3QtPnB1dERpcmVjdChjYWxsRnJhbWUtPnZtKCksIG9wZXJhdGlvbi0+bV9vZmZzZXQsIHZh
bHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjA3LDcgKzYwNyw3IEBAIHZvaWQg
SlNTY29wZTo6cmVzb2x2ZVB1dChDYWxsRnJhbWUqIGNhbGwKICAgICBpZiAoc2xvdC5iYXNlKCkg
IT0gYmFzZU9iamVjdCkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVCghYmFzZU9iamVjdC0+
aGFzSW5saW5lU3RvcmFnZSgpKTsKLSAgICBvcGVyYXRpb24tPm1fc3RydWN0dXJlLnNldChjYWxs
RnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRh
YmxlKCksIGJhc2VPYmplY3QtPnN0cnVjdHVyZSgpKTsKKyAgICBvcGVyYXRpb24tPm1fc3RydWN0
dXJlLnNldChjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyRXhl
Y3V0YWJsZSgpLCBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKSk7CiAgICAgc2V0UHV0UHJvcGVydHlB
Y2Nlc3NPZmZzZXQob3BlcmF0aW9uLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICByZXR1cm47
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCShyZXZpc2lv
biAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU5LDExICs1OSwxMSBAQCBwdWJsaWM6CiAgICAgaW50IGxvY2FsRGVw
dGgoKTsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKTsKLSAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEoKTsKKyAgICBWTSogdm0oKTsKICAgICBKU09iamVjdCogZ2xvYmFs
VGhpcygpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgSlNTY29wZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1
cmUqLCBKU1Njb3BlKiBuZXh0KTsKKyAgICBKU1Njb3BlKFZNJiwgU3RydWN0dXJlKiwgSlNTY29w
ZSogbmV4dCk7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiBwcml2YXRlOgpA
QCAtODAsOSArODAsOSBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlIDxSZXR1cm5WYWx1ZXM+IHN0
YXRpYyBKU09iamVjdCogcmVzb2x2ZUNvbnRhaW5pbmdTY29wZShDYWxsRnJhbWUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgUHJvcGVydHlTbG90JiwgUmVzb2x2ZU9wZXJhdGlvbnMqLCBQdXRUb0Jhc2VP
cGVyYXRpb24qLCBib29sIGlzU3RyaWN0KTsKIH07CiAKLWlubGluZSBKU1Njb3BlOjpKU1Njb3Bl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU2NvcGUq
IG5leHQpCi0gICAgOiBCYXNlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKLSAgICAsIG1fbmV4dChn
bG9iYWxEYXRhLCB0aGlzLCBuZXh0LCBXcml0ZUJhcnJpZXI8SlNTY29wZT46Ok1heUJlTnVsbCkK
K2lubGluZSBKU1Njb3BlOjpKU1Njb3BlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpT
U2NvcGUqIG5leHQpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX25leHQodm0s
IHRoaXMsIG5leHQsIFdyaXRlQmFycmllcjxKU1Njb3BlPjo6TWF5QmVOdWxsKQogewogfQogCkBA
IC0xMjcsOSArMTI3LDkgQEAgaW5saW5lIEpTR2xvYmFsT2JqZWN0KiBKU1Njb3BlOjpnbG9iYWxP
YgogICAgIHJldHVybiBzdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCk7CiB9CiAKLWlubGluZSBK
U0dsb2JhbERhdGEqIEpTU2NvcGU6Omdsb2JhbERhdGEoKQoraW5saW5lIFZNKiBKU1Njb3BlOjp2
bSgpCiB7IAotICAgIHJldHVybiBIZWFwOjpoZWFwKHRoaXMpLT5nbG9iYWxEYXRhKCk7CisgICAg
cmV0dXJuIEhlYXA6OmhlYXAodGhpcyktPnZtKCk7CiB9CiAKIGlubGluZSBSZWdpc3RlciYgUmVn
aXN0ZXI6Om9wZXJhdG9yPShKU1Njb3BlKiBzY29wZSkKQEAgLTE0MywxMCArMTQzLDEwIEBAIGlu
bGluZSBKU1Njb3BlKiBSZWdpc3Rlcjo6c2NvcGUoKSBjb25zdAogICAgIHJldHVybiBqc0Nhc3Q8
SlNTY29wZSo+KGpzVmFsdWUoKSk7CiB9CiAKLWlubGluZSBKU0dsb2JhbERhdGEmIEV4ZWNTdGF0
ZTo6Z2xvYmFsRGF0YSgpIGNvbnN0CitpbmxpbmUgVk0mIEV4ZWNTdGF0ZTo6dm0oKSBjb25zdAog
ewotICAgIEFTU0VSVChzY29wZSgpLT5nbG9iYWxEYXRhKCkpOwotICAgIHJldHVybiAqc2NvcGUo
KS0+Z2xvYmFsRGF0YSgpOworICAgIEFTU0VSVChzY29wZSgpLT52bSgpKTsKKyAgICByZXR1cm4g
KnNjb3BlKCktPnZtKCk7CiB9CiAKIGlubGluZSBKU0dsb2JhbE9iamVjdCogRXhlY1N0YXRlOjps
ZXhpY2FsR2xvYmFsT2JqZWN0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHJldmlz
aW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODIsMTQgKzgyLDE0IEBAIHB1Ymxp
YzoKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgSlNTeW1ib2xUYWJsZU9iamVjdDo6U3RydWN0dXJl
RmxhZ3M7CiAKLSAgICBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU2NvcGUqIHNjb3BlKQotICAgICAgICA6
IEpTU3ltYm9sVGFibGVPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBzY29wZSkKKyAgICBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpT
U2NvcGUqIHNjb3BlKQorICAgICAgICA6IEpTU3ltYm9sVGFibGVPYmplY3Qodm0sIHN0cnVjdHVy
ZSwgc2NvcGUpCiAgICAgewogICAgIH0KIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAg
IHsKLSAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICB9CiAKICAgICBTZWdtZW50ZWRWZWN0b3I8V3Jp
dGVCYXJyaWVyPFVua25vd24+LCAxNj4gbV9yZWdpc3RlcnM7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDcgKzQwLDcgQEAgdm9pZCBKU1JvcGVTdHJpbmc6OlJvcGVCdWlsZGVyOjpleHBhbmQoKQog
ewogICAgIEFTU0VSVChtX2luZGV4ID09IEpTUm9wZVN0cmluZzo6c19tYXhJbnRlcm5hbFJvcGVM
ZW5ndGgpOwogICAgIEpTU3RyaW5nKiBqc1N0cmluZyA9IG1fanNTdHJpbmc7Ci0gICAgbV9qc1N0
cmluZyA9IGpzU3RyaW5nQnVpbGRlcigmbV9nbG9iYWxEYXRhKTsKKyAgICBtX2pzU3RyaW5nID0g
anNTdHJpbmdCdWlsZGVyKCZtX3ZtKTsKICAgICBtX2luZGV4ID0gMDsKICAgICBhcHBlbmQoanNT
dHJpbmcpOwogfQpAQCAtMjYxLDggKzI2MSw4IEBAIGRvdWJsZSBKU1N0cmluZzo6dG9OdW1iZXIo
RXhlY1N0YXRlKiBleGUKIAogaW5saW5lIFN0cmluZ09iamVjdCogU3RyaW5nT2JqZWN0OjpjcmVh
dGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmlu
Zyogc3RyaW5nKQogewotICAgIFN0cmluZ09iamVjdCogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8U3RyaW5nT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgU3RyaW5nT2JqZWN0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSk7
Ci0gICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIHN0cmluZyk7
CisgICAgU3RyaW5nT2JqZWN0KiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxT
dHJpbmdPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBTdHJpbmdPYmplY3QoZXhlYy0+dm0oKSwgZ2xv
YmFsT2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSk7CisgICAgb2JqZWN0LT5maW5pc2hD
cmVhdGlvbihleGVjLT52bSgpLCBzdHJpbmcpOwogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMTQ4
NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsMzQgKzM1LDM0IEBAIGNsYXNzIEpTU3RyaW5nOwogY2xhc3MgSlNSb3Bl
U3RyaW5nOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi1KU1N0cmluZyoganNFbXB0
eVN0cmluZyhKU0dsb2JhbERhdGEqKTsKK0pTU3RyaW5nKiBqc0VtcHR5U3RyaW5nKFZNKik7CiBK
U1N0cmluZyoganNFbXB0eVN0cmluZyhFeGVjU3RhdGUqKTsKLUpTU3RyaW5nKiBqc1N0cmluZyhK
U0dsb2JhbERhdGEqLCBjb25zdCBTdHJpbmcmKTsgLy8gcmV0dXJucyBlbXB0eSBzdHJpbmcgaWYg
cGFzc2VkIG51bGwgc3RyaW5nCitKU1N0cmluZyoganNTdHJpbmcoVk0qLCBjb25zdCBTdHJpbmcm
KTsgLy8gcmV0dXJucyBlbXB0eSBzdHJpbmcgaWYgcGFzc2VkIG51bGwgc3RyaW5nCiBKU1N0cmlu
ZyoganNTdHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7IC8vIHJldHVybnMgZW1wdHkg
c3RyaW5nIGlmIHBhc3NlZCBudWxsIHN0cmluZwogCi1KU1N0cmluZyoganNTaW5nbGVDaGFyYWN0
ZXJTdHJpbmcoSlNHbG9iYWxEYXRhKiwgVUNoYXIpOworSlNTdHJpbmcqIGpzU2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKFZNKiwgVUNoYXIpOwogSlNTdHJpbmcqIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5n
KEV4ZWNTdGF0ZSosIFVDaGFyKTsKIEpTU3RyaW5nKiBqc1NpbmdsZUNoYXJhY3RlclN1YnN0cmlu
ZyhFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBvZmZzZXQpOwotSlNTdHJpbmcq
IGpzU3Vic3RyaW5nKEpTR2xvYmFsRGF0YSosIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKTsKK0pTU3RyaW5nKiBqc1N1YnN0cmluZyhWTSosIGNvbnN0IFN0
cmluZyYsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIEpTU3RyaW5nKiBqc1N1
YnN0cmluZyhFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCk7CiAKIC8vIE5vbi10cml2aWFsIHN0cmluZ3MgYXJlIHR3byBvciBtb3JlIGNo
YXJhY3RlcnMgbG9uZy4KIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZmFzdGVyIHRoYW4ganVzdCBj
YWxsaW5nIGpzU3RyaW5nLgotSlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhKU0dsb2JhbERh
dGEqLCBjb25zdCBTdHJpbmcmKTsKK0pTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoVk0qLCBj
b25zdCBTdHJpbmcmKTsKIEpTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoRXhlY1N0YXRlKiwg
Y29uc3QgU3RyaW5nJik7CiAKIC8vIFNob3VsZCBiZSB1c2VkIGZvciBzdHJpbmdzIHRoYXQgYXJl
IG93bmVkIGJ5IGFuIG9iamVjdCB0aGF0IHdpbGwKIC8vIGxpa2VseSBvdXRsaXZlIHRoZSBKU1Zh
bHVlIHRoaXMgbWFrZXMsIHN1Y2ggYXMgdGhlIHBhcnNlIHRyZWUgb3IgYQogLy8gRE9NIG9iamVj
dCB0aGF0IGNvbnRhaW5zIGEgU3RyaW5nCi1KU1N0cmluZyoganNPd25lZFN0cmluZyhKU0dsb2Jh
bERhdGEqLCBjb25zdCBTdHJpbmcmKTsKK0pTU3RyaW5nKiBqc093bmVkU3RyaW5nKFZNKiwgY29u
c3QgU3RyaW5nJik7CiBKU1N0cmluZyoganNPd25lZFN0cmluZyhFeGVjU3RhdGUqLCBjb25zdCBT
dHJpbmcmKTsKIAotSlNSb3BlU3RyaW5nKiBqc1N0cmluZ0J1aWxkZXIoSlNHbG9iYWxEYXRhKik7
CitKU1JvcGVTdHJpbmcqIGpzU3RyaW5nQnVpbGRlcihWTSopOwogCiBjbGFzcyBKU1N0cmluZyA6
IHB1YmxpYyBKU0NlbGwgewogcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBKSVQ7Ci0gICAgZnJp
ZW5kIGNsYXNzIEpTR2xvYmFsRGF0YTsKKyAgICBmcmllbmQgY2xhc3MgVk07CiAgICAgZnJpZW5k
IGNsYXNzIFNwZWNpYWxpemVkVGh1bmtKSVQ7CiAgICAgZnJpZW5kIGNsYXNzIEpTUm9wZVN0cmlu
ZzsKICAgICBmcmllbmQgY2xhc3MgTWFya1N0YWNrOwpAQCAtNzYsNjMgKzc2LDYzIEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiBwcml2YXRlOgotICAgIEpT
U3RyaW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB2
YWx1ZSkKLSAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpCisgICAgSlNTdHJpbmcoVk0mIHZtLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IHZhbHVlKQorICAgICAgICA6IEpTQ2VsbCh2bSwgdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKQog
ICAgICAgICAsIG1fZmxhZ3MoMCkKICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQogICAgIHsKICAg
ICB9CiAKLSAgICBKU1N0cmluZyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgICAgIDog
SlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3RyaW5nU3RydWN0dXJlLmdldCgpKQorICAg
IEpTU3RyaW5nKFZNJiB2bSkKKyAgICAgICAgOiBKU0NlbGwodm0sIHZtLnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkKICAgICAgICAgLCBtX2ZsYWdzKDApCiAgICAgewogICAgIH0KIAotICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgbGVuZ3RoKQor
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBzaXplX3QgbGVuZ3RoKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKCFtX3ZhbHVlLmlzTnVsbCgpKTsKLSAgICAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAg
ICAgICAgbV9sZW5ndGggPSBsZW5ndGg7CiAgICAgICAgIHNldElzOEJpdChtX3ZhbHVlLmltcGwo
KS0+aXM4Qml0KCkpOwotICAgICAgICBnbG9iYWxEYXRhLm1fbmV3U3RyaW5nc1NpbmNlTGFzdEhh
c2hDb25zKys7CisgICAgICAgIHZtLm1fbmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zKys7CiAg
ICAgfQogCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IHNpemVfdCBsZW5ndGgsIHNpemVfdCBjb3N0KQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgY29zdCkKICAgICB7CiAgICAgICAgIEFTU0VSVCgh
bV92YWx1ZS5pc051bGwoKSk7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIG1fbGVuZ3Ro
ID0gbGVuZ3RoOwogICAgICAgICBzZXRJczhCaXQobV92YWx1ZS5pbXBsKCktPmlzOEJpdCgpKTsK
ICAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KGNvc3QpOwot
ICAgICAgICBnbG9iYWxEYXRhLm1fbmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zKys7CisgICAg
ICAgIHZtLm1fbmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zKys7CiAgICAgfQogCiBwcm90ZWN0
ZWQ6Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgewotICAgICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OwogICAgICAgICBtX2xlbmd0aCA9IDA7CiAgICAgICAgIHNldElzOEJpdCh0cnVlKTsKLSAgICAg
ICAgZ2xvYmFsRGF0YS5tX25ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29ucysrOworICAgICAgICB2
bS5tX25ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29ucysrOwogICAgIH0KICAgICAgICAgCiBwdWJs
aWM6Ci0gICAgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHZhbHVlKQorICAgIHN0YXRpYyBKU1N0cmluZyogY3Jl
YXRlKFZNJiB2bSwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB2YWx1ZSkKICAgICB7CiAgICAgICAg
IEFTU0VSVCh2YWx1ZSk7CiAgICAgICAgIHNpemVfdCBsZW5ndGggPSB2YWx1ZS0+bGVuZ3RoKCk7
CiAgICAgICAgIHNpemVfdCBjb3N0ID0gdmFsdWUtPmNvc3QoKTsKLSAgICAgICAgSlNTdHJpbmcq
IG5ld1N0cmluZyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTU3RyaW5nPihnbG9iYWxE
YXRhLmhlYXApKSBKU1N0cmluZyhnbG9iYWxEYXRhLCB2YWx1ZSk7Ci0gICAgICAgIG5ld1N0cmlu
Zy0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgbGVuZ3RoLCBjb3N0KTsKKyAgICAgICAgSlNT
dHJpbmcqIG5ld1N0cmluZyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTU3RyaW5nPih2
bS5oZWFwKSkgSlNTdHJpbmcodm0sIHZhbHVlKTsKKyAgICAgICAgbmV3U3RyaW5nLT5maW5pc2hD
cmVhdGlvbih2bSwgbGVuZ3RoLCBjb3N0KTsKICAgICAgICAgcmV0dXJuIG5ld1N0cmluZzsKICAg
ICB9Ci0gICAgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGVIYXNPdGhlck93bmVyKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB2YWx1ZSkKKyAgICBzdGF0aWMg
SlNTdHJpbmcqIGNyZWF0ZUhhc090aGVyT3duZXIoVk0mIHZtLCBQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKHZhbHVlKTsKICAgICAgICAgc2l6ZV90
IGxlbmd0aCA9IHZhbHVlLT5sZW5ndGgoKTsKLSAgICAgICAgSlNTdHJpbmcqIG5ld1N0cmluZyA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTU3RyaW5nPihnbG9iYWxEYXRhLmhlYXApKSBK
U1N0cmluZyhnbG9iYWxEYXRhLCB2YWx1ZSk7Ci0gICAgICAgIG5ld1N0cmluZy0+ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSwgbGVuZ3RoKTsKKyAgICAgICAgSlNTdHJpbmcqIG5ld1N0cmluZyA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTU3RyaW5nPih2bS5oZWFwKSkgSlNTdHJpbmco
dm0sIHZhbHVlKTsKKyAgICAgICAgbmV3U3RyaW5nLT5maW5pc2hDcmVhdGlvbih2bSwgbGVuZ3Ro
KTsKICAgICAgICAgcmV0dXJuIG5ld1N0cmluZzsKICAgICB9CiAKQEAgLTE1Myw5ICsxNTMsOSBA
QCBwdWJsaWM6CiAgICAgYm9vbCBjYW5HZXRJbmRleCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwg
bV9sZW5ndGg7IH0KICAgICBKU1N0cmluZyogZ2V0SW5kZXgoRXhlY1N0YXRlKiwgdW5zaWduZWQp
OwogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykK
KyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJ
bmZvKFN0cmluZ1R5cGUsIE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEludGVyY2VwdHNH
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8pLCAmc19pbmZv
KTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvLCBUeXBlSW5mbyhTdHJpbmdUeXBlLCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJ
bnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJv
KSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkxlbmd0aCgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1N0cmluZywgbV9sZW5ndGgpOyB9CkBAIC0yMTUs
MTMgKzIxNSwxMyBAQCBwcml2YXRlOgogY2xhc3MgSlNSb3BlU3RyaW5nIDogcHVibGljIEpTU3Ry
aW5nIHsKICAgICBmcmllbmQgY2xhc3MgSlNTdHJpbmc7CiAKLSAgICBmcmllbmQgSlNSb3BlU3Ry
aW5nKiBqc1N0cmluZ0J1aWxkZXIoSlNHbG9iYWxEYXRhKik7CisgICAgZnJpZW5kIEpTUm9wZVN0
cmluZyoganNTdHJpbmdCdWlsZGVyKFZNKik7CiAKICAgICBjbGFzcyBSb3BlQnVpbGRlciB7CiAg
ICAgcHVibGljOgotICAgICAgICBSb3BlQnVpbGRlcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
Ci0gICAgICAgICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQotICAgICAgICAgICAgLCBt
X2pzU3RyaW5nKGpzU3RyaW5nQnVpbGRlcigmZ2xvYmFsRGF0YSkpCisgICAgICAgIFJvcGVCdWls
ZGVyKFZNJiB2bSkKKyAgICAgICAgICAgIDogbV92bSh2bSkKKyAgICAgICAgICAgICwgbV9qc1N0
cmluZyhqc1N0cmluZ0J1aWxkZXIoJnZtKSkKICAgICAgICAgICAgICwgbV9pbmRleCgwKQogICAg
ICAgICB7CiAgICAgICAgIH0KQEAgLTIzMCw3ICsyMzAsNyBAQCBjbGFzcyBKU1JvcGVTdHJpbmcg
OiBwdWJsaWMgSlNTdHJpbmcgewogICAgICAgICB7CiAgICAgICAgICAgICBpZiAobV9pbmRleCA9
PSBKU1JvcGVTdHJpbmc6OnNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoKQogICAgICAgICAgICAgICAg
IGV4cGFuZCgpOwotICAgICAgICAgICAgbV9qc1N0cmluZy0+YXBwZW5kKG1fZ2xvYmFsRGF0YSwg
bV9pbmRleCsrLCBqc1N0cmluZyk7CisgICAgICAgICAgICBtX2pzU3RyaW5nLT5hcHBlbmQobV92
bSwgbV9pbmRleCsrLCBqc1N0cmluZyk7CiAgICAgICAgIH0KIAogICAgICAgICBKU1JvcGVTdHJp
bmcqIHJlbGVhc2UoKQpAQCAtMjQ1LDY2ICsyNDUsNjYgQEAgY2xhc3MgSlNSb3BlU3RyaW5nIDog
cHVibGljIEpTU3RyaW5nIHsKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGV4cGFuZCgpOwog
ICAgICAgICAgICAgCi0gICAgICAgIEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOworICAgICAg
ICBWTSYgbV92bTsKICAgICAgICAgSlNSb3BlU3RyaW5nKiBtX2pzU3RyaW5nOwogICAgICAgICBz
aXplX3QgbV9pbmRleDsKICAgICB9OwogICAgICAgICAKIHByaXZhdGU6Ci0gICAgSlNSb3BlU3Ry
aW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLSAgICAgICAgOiBKU1N0cmluZyhnbG9iYWxE
YXRhKQorICAgIEpTUm9wZVN0cmluZyhWTSYgdm0pCisgICAgICAgIDogSlNTdHJpbmcodm0pCiAg
ICAgewogICAgIH0KIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU1N0cmluZyogczEsIEpTU3RyaW5nKiBzMikKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgSlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIpCiAgICAgewotICAgICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOwogICAgICAgICBtX2xlbmd0aCA9IHMxLT5sZW5ndGgoKSArIHMyLT5sZW5ndGgo
KTsKICAgICAgICAgc2V0SXM4Qml0KHMxLT5pczhCaXQoKSAmJiBzMi0+aXM4Qml0KCkpOwotICAg
ICAgICBtX2ZpYmVyc1swXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgczEpOwotICAgICAgICBtX2Zp
YmVyc1sxXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgczIpOworICAgICAgICBtX2ZpYmVyc1swXS5z
ZXQodm0sIHRoaXMsIHMxKTsKKyAgICAgICAgbV9maWJlcnNbMV0uc2V0KHZtLCB0aGlzLCBzMik7
CiAgICAgfQogICAgICAgICAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIsIEpTU3RyaW5nKiBzMykKKyAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIs
IEpTU3RyaW5nKiBzMykKICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2Jh
bERhdGEpOworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIG1fbGVu
Z3RoID0gczEtPmxlbmd0aCgpICsgczItPmxlbmd0aCgpICsgczMtPmxlbmd0aCgpOwogICAgICAg
ICBzZXRJczhCaXQoczEtPmlzOEJpdCgpICYmIHMyLT5pczhCaXQoKSAmJiAgczMtPmlzOEJpdCgp
KTsKLSAgICAgICAgbV9maWJlcnNbMF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMxKTsKLSAgICAg
ICAgbV9maWJlcnNbMV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMyKTsKLSAgICAgICAgbV9maWJl
cnNbMl0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMzKTsKKyAgICAgICAgbV9maWJlcnNbMF0uc2V0
KHZtLCB0aGlzLCBzMSk7CisgICAgICAgIG1fZmliZXJzWzFdLnNldCh2bSwgdGhpcywgczIpOwor
ICAgICAgICBtX2ZpYmVyc1syXS5zZXQodm0sIHRoaXMsIHMzKTsKICAgICB9CiAKLSAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKICAgICB7Ci0gICAgICAgIEpTU3RyaW5nOjpmaW5pc2hDcmVhdGlv
bihnbG9iYWxEYXRhKTsKKyAgICAgICAgSlNTdHJpbmc6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAg
ICB9CiAKLSAgICB2b2lkIGFwcGVuZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBp
bmRleCwgSlNTdHJpbmcqIGpzU3RyaW5nKQorICAgIHZvaWQgYXBwZW5kKFZNJiB2bSwgc2l6ZV90
IGluZGV4LCBKU1N0cmluZyoganNTdHJpbmcpCiAgICAgewotICAgICAgICBtX2ZpYmVyc1tpbmRl
eF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGpzU3RyaW5nKTsKKyAgICAgICAgbV9maWJlcnNbaW5k
ZXhdLnNldCh2bSwgdGhpcywganNTdHJpbmcpOwogICAgICAgICBtX2xlbmd0aCArPSBqc1N0cmlu
Zy0+bV9sZW5ndGg7CiAgICAgICAgIHNldElzOEJpdChpczhCaXQoKSAmJiBqc1N0cmluZy0+aXM4
Qml0KCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU1JvcGVTdHJpbmcqIGNyZWF0ZU51bGwoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIHN0YXRpYyBKU1JvcGVTdHJpbmcqIGNyZWF0ZU51
bGwoVk0mIHZtKQogICAgIHsKLSAgICAgICAgSlNSb3BlU3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1JvcGVTdHJpbmc+KGdsb2JhbERhdGEuaGVhcCkpIEpT
Um9wZVN0cmluZyhnbG9iYWxEYXRhKTsKLSAgICAgICAgbmV3U3RyaW5nLT5maW5pc2hDcmVhdGlv
bihnbG9iYWxEYXRhKTsKKyAgICAgICAgSlNSb3BlU3RyaW5nKiBuZXdTdHJpbmcgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxKU1JvcGVTdHJpbmc+KHZtLmhlYXApKSBKU1JvcGVTdHJpbmco
dm0pOworICAgICAgICBuZXdTdHJpbmctPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0
dXJuIG5ld1N0cmluZzsKICAgICB9CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgSlNTdHJpbmcqIGNy
ZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTU3RyaW5nKiBzMSwgSlNTdHJpbmcqIHMy
KQorICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKFZNJiB2bSwgSlNTdHJpbmcqIHMxLCBKU1N0
cmluZyogczIpCiAgICAgewotICAgICAgICBKU1JvcGVTdHJpbmcqIG5ld1N0cmluZyA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTUm9wZVN0cmluZz4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNS
b3BlU3RyaW5nKGdsb2JhbERhdGEpOwotICAgICAgICBuZXdTdHJpbmctPmZpbmlzaENyZWF0aW9u
KGdsb2JhbERhdGEsIHMxLCBzMik7CisgICAgICAgIEpTUm9wZVN0cmluZyogbmV3U3RyaW5nID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNSb3BlU3RyaW5nPih2bS5oZWFwKSkgSlNSb3Bl
U3RyaW5nKHZtKTsKKyAgICAgICAgbmV3U3RyaW5nLT5maW5pc2hDcmVhdGlvbih2bSwgczEsIHMy
KTsKICAgICAgICAgcmV0dXJuIG5ld1N0cmluZzsKICAgICB9Ci0gICAgc3RhdGljIEpTU3RyaW5n
KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1N0cmluZyogczEsIEpTU3RyaW5n
KiBzMiwgSlNTdHJpbmcqIHMzKQorICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKFZNJiB2bSwg
SlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIsIEpTU3RyaW5nKiBzMykKICAgICB7Ci0gICAgICAg
IEpTUm9wZVN0cmluZyogbmV3U3RyaW5nID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNS
b3BlU3RyaW5nPihnbG9iYWxEYXRhLmhlYXApKSBKU1JvcGVTdHJpbmcoZ2xvYmFsRGF0YSk7Ci0g
ICAgICAgIG5ld1N0cmluZy0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgczEsIHMyLCBzMyk7
CisgICAgICAgIEpTUm9wZVN0cmluZyogbmV3U3RyaW5nID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8SlNSb3BlU3RyaW5nPih2bS5oZWFwKSkgSlNSb3BlU3RyaW5nKHZtKTsKKyAgICAgICAg
bmV3U3RyaW5nLT5maW5pc2hDcmVhdGlvbih2bSwgczEsIHMyLCBzMyk7CiAgICAgICAgIHJldHVy
biBuZXdTdHJpbmc7CiAgICAgfQogCkBAIC0zMzYsMzIgKzMzNiwzMiBAQCBpbmxpbmUgSlNTdHJp
bmcqIGFzU3RyaW5nKEpTVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIGpzQ2FzdDxKU1N0cmluZyo+
KHZhbHVlLmFzQ2VsbCgpKTsKIH0KIAotaW5saW5lIEpTU3RyaW5nKiBqc0VtcHR5U3RyaW5nKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK2lubGluZSBKU1N0cmluZyoganNFbXB0eVN0cmluZyhW
TSogdm0pCiB7Ci0gICAgcmV0dXJuIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5lbXB0eVN0cmlu
ZygpOworICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLmVtcHR5U3RyaW5nKCk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgVUNoYXIgYykKK0FMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU2luZ2xl
Q2hhcmFjdGVyU3RyaW5nKFZNKiB2bSwgVUNoYXIgYykKIHsKICAgICBpZiAoYyA8PSBtYXhTaW5n
bGVDaGFyYWN0ZXJTdHJpbmcpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmlu
Z3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMpOwotICAgIHJldHVybiBKU1N0
cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBTdHJpbmcoJmMsIDEpLmltcGwoKSk7CisgICAgICAg
IHJldHVybiB2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyh2bSwgYyk7Cisg
ICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKnZtLCBTdHJpbmcoJmMsIDEpLmltcGwoKSk7CiB9
CiAKIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0gICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKICAgICBBU1NFUlQob2Zmc2V0IDwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHMubGVuZ3RoKCkpKTsKICAgICBVQ2hhciBjID0gcy5jaGFyYWN0ZXJBdChvZmZzZXQpOwog
ICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKLSAgICAgICAgcmV0dXJuIGds
b2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZ2xvYmFsRGF0YSwg
Yyk7Ci0gICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIFN0cmluZ0ltcGw6
OmNyZWF0ZShzLmltcGwoKSwgb2Zmc2V0LCAxKSk7CisgICAgICAgIHJldHVybiB2bS0+c21hbGxT
dHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyh2bSwgYyk7CisgICAgcmV0dXJuIEpTU3RyaW5n
OjpjcmVhdGUoKnZtLCBTdHJpbmdJbXBsOjpjcmVhdGUocy5pbXBsKCksIG9mZnNldCwgMSkpOwog
fQogCi1pbmxpbmUgSlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIGNvbnN0IFN0cmluZyYgcykKK2lubGluZSBKU1N0cmluZyoganNOb250cml2aWFs
U3RyaW5nKFZNKiB2bSwgY29uc3QgU3RyaW5nJiBzKQogewogICAgIEFTU0VSVChzLmxlbmd0aCgp
ID4gMSk7Ci0gICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIHMuaW1wbCgp
KTsKKyAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqdm0sIHMuaW1wbCgpKTsKIH0KIAogaW5s
aW5lIGNvbnN0IFN0cmluZyYgSlNTdHJpbmc6OnZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QK
QEAgLTM4NywxNyArMzg3LDE3IEBAIGlubGluZSBKU1N0cmluZyogSlNTdHJpbmc6OmdldEluZGV4
KEV4ZWMKICAgICByZXR1cm4ganNTaW5nbGVDaGFyYWN0ZXJTdWJzdHJpbmcoZXhlYywgbV92YWx1
ZSwgaSk7CiB9CiAKLWlubGluZSBKU1N0cmluZyoganNTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBjb25zdCBTdHJpbmcmIHMpCitpbmxpbmUgSlNTdHJpbmcqIGpzU3RyaW5nKFZNKiB2
bSwgY29uc3QgU3RyaW5nJiBzKQogewogICAgIGludCBzaXplID0gcy5sZW5ndGgoKTsKICAgICBp
ZiAoIXNpemUpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuZW1wdHlT
dHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3MuZW1wdHlTdHJpbmcoKTsK
ICAgICBpZiAoc2l6ZSA9PSAxKSB7CiAgICAgICAgIFVDaGFyIGMgPSBzLmNoYXJhY3RlckF0KDAp
OwogICAgICAgICBpZiAoYyA8PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpCi0gICAgICAgICAg
ICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhn
bG9iYWxEYXRhLCBjKTsKKyAgICAgICAgICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLnNpbmds
ZUNoYXJhY3RlclN0cmluZyh2bSwgYyk7CiAgICAgfQotICAgIHJldHVybiBKU1N0cmluZzo6Y3Jl
YXRlKCpnbG9iYWxEYXRhLCBzLmltcGwoKSk7CisgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUo
KnZtLCBzLmltcGwoKSk7CiB9CiAKIGlubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmcoRXhlY1N0
YXRlKiBleGVjLCBKU1N0cmluZyogcywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
CkBAIC00MDUsNjcgKzQwNSw2NyBAQCBpbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5nKEV4ZWNT
dGF0ZSogCiAgICAgQVNTRVJUKG9mZnNldCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocy0+bGVu
Z3RoKCkpKTsKICAgICBBU1NFUlQobGVuZ3RoIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzLT5s
ZW5ndGgoKSkpOwogICAgIEFTU0VSVChvZmZzZXQgKyBsZW5ndGggPD0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHMtPmxlbmd0aCgpKSk7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4
ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBpZiAoIWxl
bmd0aCkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5lbXB0eVN0cmlu
ZygpOwotICAgIHJldHVybiBqc1N1YnN0cmluZyhnbG9iYWxEYXRhLCBzLT52YWx1ZShleGVjKSwg
b2Zmc2V0LCBsZW5ndGgpOworICAgICAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy5lbXB0eVN0
cmluZygpOworICAgIHJldHVybiBqc1N1YnN0cmluZyh2bSwgcy0+dmFsdWUoZXhlYyksIG9mZnNl
dCwgbGVuZ3RoKTsKIH0KIAotaW5saW5lIEpTU3RyaW5nKiBqc1N1YnN0cmluZzgoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQoraW5saW5lIEpTU3RyaW5nKiBqc1N1YnN0cmluZzgoVk0qIHZtLCBjb25zdCBT
dHJpbmcmIHMsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIEFTU0VS
VChvZmZzZXQgPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHMubGVuZ3RoKCkpKTsKICAgICBBU1NF
UlQobGVuZ3RoIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzLmxlbmd0aCgpKSk7CiAgICAgQVNT
RVJUKG9mZnNldCArIGxlbmd0aCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocy5sZW5ndGgoKSkp
OwogICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJp
bmdzLmVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLmVtcHR5
U3RyaW5nKCk7CiAgICAgaWYgKGxlbmd0aCA9PSAxKSB7CiAgICAgICAgIFVDaGFyIGMgPSBzLmNo
YXJhY3RlckF0KG9mZnNldCk7CiAgICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0
cmluZykKLSAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xl
Q2hhcmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMpOworICAgICAgICAgICAgcmV0dXJuIHZtLT5z
bWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHZtLCBjKTsKICAgICB9Ci0gICAgcmV0
dXJuIEpTU3RyaW5nOjpjcmVhdGVIYXNPdGhlck93bmVyKCpnbG9iYWxEYXRhLCBTdHJpbmdJbXBs
OjpjcmVhdGU4KHMuaW1wbCgpLCBvZmZzZXQsIGxlbmd0aCkpOworICAgIHJldHVybiBKU1N0cmlu
Zzo6Y3JlYXRlSGFzT3RoZXJPd25lcigqdm0sIFN0cmluZ0ltcGw6OmNyZWF0ZTgocy5pbXBsKCks
IG9mZnNldCwgbGVuZ3RoKSk7CiB9CiAKLWlubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmcoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQoraW5saW5lIEpTU3RyaW5nKiBqc1N1YnN0cmluZyhWTSogdm0sIGNv
bnN0IFN0cmluZyYgcywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAg
QVNTRVJUKG9mZnNldCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocy5sZW5ndGgoKSkpOwogICAg
IEFTU0VSVChsZW5ndGggPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHMubGVuZ3RoKCkpKTsKICAg
ICBBU1NFUlQob2Zmc2V0ICsgbGVuZ3RoIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzLmxlbmd0
aCgpKSk7CiAgICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFs
bFN0cmluZ3MuZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3Mu
ZW1wdHlTdHJpbmcoKTsKICAgICBpZiAobGVuZ3RoID09IDEpIHsKICAgICAgICAgVUNoYXIgYyA9
IHMuY2hhcmFjdGVyQXQob2Zmc2V0KTsKICAgICAgICAgaWYgKGMgPD0gbWF4U2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKQotICAgICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5z
aW5nbGVDaGFyYWN0ZXJTdHJpbmcoZ2xvYmFsRGF0YSwgYyk7CisgICAgICAgICAgICByZXR1cm4g
dm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcodm0sIGMpOwogICAgIH0KLSAg
ICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZUhhc090aGVyT3duZXIoKmdsb2JhbERhdGEsIFN0cmlu
Z0ltcGw6OmNyZWF0ZShzLmltcGwoKSwgb2Zmc2V0LCBsZW5ndGgpKTsKKyAgICByZXR1cm4gSlNT
dHJpbmc6OmNyZWF0ZUhhc090aGVyT3duZXIoKnZtLCBTdHJpbmdJbXBsOjpjcmVhdGUocy5pbXBs
KCksIG9mZnNldCwgbGVuZ3RoKSk7CiB9CiAKLWlubGluZSBKU1N0cmluZyoganNPd25lZFN0cmlu
ZyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFN0cmluZyYgcykKK2lubGluZSBKU1N0
cmluZyoganNPd25lZFN0cmluZyhWTSogdm0sIGNvbnN0IFN0cmluZyYgcykKIHsKICAgICBpbnQg
c2l6ZSA9IHMubGVuZ3RoKCk7CiAgICAgaWYgKCFzaXplKQotICAgICAgICByZXR1cm4gZ2xvYmFs
RGF0YS0+c21hbGxTdHJpbmdzLmVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2bS0+c21h
bGxTdHJpbmdzLmVtcHR5U3RyaW5nKCk7CiAgICAgaWYgKHNpemUgPT0gMSkgewogICAgICAgICBV
Q2hhciBjID0gcy5jaGFyYWN0ZXJBdCgwKTsKICAgICAgICAgaWYgKGMgPD0gbWF4U2luZ2xlQ2hh
cmFjdGVyU3RyaW5nKQotICAgICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5n
cy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZ2xvYmFsRGF0YSwgYyk7CisgICAgICAgICAgICByZXR1
cm4gdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcodm0sIGMpOwogICAgIH0K
LSAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZUhhc090aGVyT3duZXIoKmdsb2JhbERhdGEsIHMu
aW1wbCgpKTsKKyAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZUhhc090aGVyT3duZXIoKnZtLCBz
LmltcGwoKSk7CiB9CiAKLWlubGluZSBKU1JvcGVTdHJpbmcqIGpzU3RyaW5nQnVpbGRlcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEpCitpbmxpbmUgSlNSb3BlU3RyaW5nKiBqc1N0cmluZ0J1aWxk
ZXIoVk0qIHZtKQogewotICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZU51bGwoKmdsb2Jh
bERhdGEpOworICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZU51bGwoKnZtKTsKIH0KIAot
aW5saW5lIEpTU3RyaW5nKiBqc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4g
anNFbXB0eVN0cmluZygmZXhlYy0+Z2xvYmFsRGF0YSgpKTsgfQotaW5saW5lIEpTU3RyaW5nKiBq
c1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykgeyByZXR1cm4ganNTdHJp
bmcoJmV4ZWMtPmdsb2JhbERhdGEoKSwgcyk7IH0KLWlubGluZSBKU1N0cmluZyoganNTaW5nbGVD
aGFyYWN0ZXJTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBVQ2hhciBjKSB7IHJldHVybiBqc1Npbmds
ZUNoYXJhY3RlclN0cmluZygmZXhlYy0+Z2xvYmFsRGF0YSgpLCBjKTsgfQotaW5saW5lIEpTU3Ry
aW5nKiBqc1N1YnN0cmluZzgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMsIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKSB7IHJldHVybiBqc1N1YnN0cmluZzgoJmV4ZWMt
Pmdsb2JhbERhdGEoKSwgcywgb2Zmc2V0LCBsZW5ndGgpOyB9Ci1pbmxpbmUgSlNTdHJpbmcqIGpz
U3Vic3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCkgeyByZXR1cm4ganNTdWJzdHJpbmcoJmV4ZWMtPmdsb2JhbERh
dGEoKSwgcywgb2Zmc2V0LCBsZW5ndGgpOyB9Ci1pbmxpbmUgSlNTdHJpbmcqIGpzTm9udHJpdmlh
bFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykgeyByZXR1cm4ganNOb250
cml2aWFsU3RyaW5nKCZleGVjLT5nbG9iYWxEYXRhKCksIHMpOyB9Ci1pbmxpbmUgSlNTdHJpbmcq
IGpzT3duZWRTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpIHsgcmV0dXJu
IGpzT3duZWRTdHJpbmcoJmV4ZWMtPmdsb2JhbERhdGEoKSwgcyk7IH0KK2lubGluZSBKU1N0cmlu
ZyoganNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIGpzRW1wdHlTdHJpbmco
JmV4ZWMtPnZtKCkpOyB9CitpbmxpbmUgSlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgU3RyaW5nJiBzKSB7IHJldHVybiBqc1N0cmluZygmZXhlYy0+dm0oKSwgcyk7IH0K
K2lubGluZSBKU1N0cmluZyoganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoRXhlY1N0YXRlKiBleGVj
LCBVQ2hhciBjKSB7IHJldHVybiBqc1NpbmdsZUNoYXJhY3RlclN0cmluZygmZXhlYy0+dm0oKSwg
Yyk7IH0KK2lubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmc4KEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkgeyByZXR1cm4g
anNTdWJzdHJpbmc4KCZleGVjLT52bSgpLCBzLCBvZmZzZXQsIGxlbmd0aCk7IH0KK2lubGluZSBK
U1N0cmluZyoganNTdWJzdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMsIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKSB7IHJldHVybiBqc1N1YnN0cmluZygmZXhl
Yy0+dm0oKSwgcywgb2Zmc2V0LCBsZW5ndGgpOyB9CitpbmxpbmUgSlNTdHJpbmcqIGpzTm9udHJp
dmlhbFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykgeyByZXR1cm4ganNO
b250cml2aWFsU3RyaW5nKCZleGVjLT52bSgpLCBzKTsgfQoraW5saW5lIEpTU3RyaW5nKiBqc093
bmVkU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKSB7IHJldHVybiBqc093
bmVkU3RyaW5nKCZleGVjLT52bSgpLCBzKTsgfQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNTdHJp
bmc6OmdldFN0cmluZ1Byb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKQEAgLTUyNSwxOSArNTI1LDE5IEBA
IGlubGluZSBTdHJpbmcgSlNWYWx1ZTo6dG9XVEZTdHJpbmcoRXhlY1MKIAogQUxXQVlTX0lOTElO
RSBTdHJpbmcgaW5saW5lSlNWYWx1ZU5vdFN0cmluZ3RvU3RyaW5nKGNvbnN0IEpTVmFsdWUmIHZh
bHVlLCBFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0g
ZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgaWYgKHZh
bHVlLmlzSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEubnVtZXJpY1N0cmluZ3Mu
YWRkKHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB2bS5udW1lcmljU3RyaW5ncy5h
ZGQodmFsdWUuYXNJbnQzMigpKTsKICAgICBpZiAodmFsdWUuaXNEb3VibGUoKSkKLSAgICAgICAg
cmV0dXJuIGdsb2JhbERhdGEubnVtZXJpY1N0cmluZ3MuYWRkKHZhbHVlLmFzRG91YmxlKCkpOwor
ICAgICAgICByZXR1cm4gdm0ubnVtZXJpY1N0cmluZ3MuYWRkKHZhbHVlLmFzRG91YmxlKCkpOwog
ICAgIGlmICh2YWx1ZS5pc1RydWUoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEucHJvcGVy
dHlOYW1lcy0+dHJ1ZUtleXdvcmQuc3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2bS5wcm9wZXJ0
eU5hbWVzLT50cnVlS2V5d29yZC5zdHJpbmcoKTsKICAgICBpZiAodmFsdWUuaXNGYWxzZSgpKQot
ICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS5wcm9wZXJ0eU5hbWVzLT5mYWxzZUtleXdvcmQuc3Ry
aW5nKCk7CisgICAgICAgIHJldHVybiB2bS5wcm9wZXJ0eU5hbWVzLT5mYWxzZUtleXdvcmQuc3Ry
aW5nKCk7CiAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0
YS5wcm9wZXJ0eU5hbWVzLT5udWxsS2V5d29yZC5zdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZt
LnByb3BlcnR5TmFtZXMtPm51bGxLZXl3b3JkLnN0cmluZygpOwogICAgIGlmICh2YWx1ZS5pc1Vu
ZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS5wcm9wZXJ0eU5hbWVzLT51bmRl
ZmluZWRLZXl3b3JkLnN0cmluZygpOworICAgICAgICByZXR1cm4gdm0ucHJvcGVydHlOYW1lcy0+
dW5kZWZpbmVkS2V5d29yZC5zdHJpbmcoKTsKICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZ0pvaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyNCw3ICsxMjQsNyBAQCBKU1ZhbHVlIEpTU3RyaW5nSm9pbmVyOjpidWlsZChFeGVjU3Rh
dGUqCiAgICAgaWYgKCFvdXRwdXRTdHJpbmdJbXBsKQogICAgICAgICByZXR1cm4gdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpOwogCi0gICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBvdXRwdXRTdHJpbmdJbXBsLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIEpT
U3RyaW5nOjpjcmVhdGUoZXhlYy0+dm0oKSwgb3V0cHV0U3RyaW5nSW1wbC5yZWxlYXNlKCkpOwog
fQogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxl
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
eW1ib2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDE4ICs0OSwxOCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gSXNFbnZpcm9ubWVudFJlY29yZCB8IE92ZXJyaWRlc1Zpc2l0
Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgQmFzZTo6U3RydWN0dXJlRmxh
Z3M7CiAgICAgCi0gICAgSlNTeW1ib2xUYWJsZU9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1Njb3BlKiBzY29wZSwgU2hhcmVkU3ltYm9sVGFi
bGUqIHN5bWJvbFRhYmxlID0gMCkKLSAgICAgICAgOiBCYXNlKGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSwgc2NvcGUpCisgICAgSlNTeW1ib2xUYWJsZU9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU1Njb3BlKiBzY29wZSwgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0g
MCkKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIHNjb3BlKQogICAgIHsKICAgICAgICAg
aWYgKHN5bWJvbFRhYmxlKQotICAgICAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQoZ2xvYmFsRGF0
YSwgdGhpcywgc3ltYm9sVGFibGUpOworICAgICAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQodm0s
IHRoaXMsIHN5bWJvbFRhYmxlKTsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
ICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIGlmICghbV9zeW1ib2xUYWJsZSkK
LSAgICAgICAgICAgIG1fc3ltYm9sVGFibGUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIFNoYXJlZFN5
bWJvbFRhYmxlOjpjcmVhdGUoZ2xvYmFsRGF0YSkpOworICAgICAgICAgICAgbV9zeW1ib2xUYWJs
ZS5zZXQodm0sIHRoaXMsIFNoYXJlZFN5bWJvbFRhYmxlOjpjcmVhdGUodm0pKTsKICAgICB9CiAK
ICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CkBA
IC0xMTgsNyArMTE4LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXQoCiAgICAgU3ltYm9s
VGFibGVPYmplY3RUeXBlKiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKICAgICBib29sIHNob3VsZFRocm93KQogewotICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6
aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcChvYmplY3QpKTsKICAgICAKICAgICBTeW1ib2xUYWJs
ZSYgc3ltYm9sVGFibGUgPSAqb2JqZWN0LT5zeW1ib2xUYWJsZSgpOwpAQCAtMTM1LDEzICsxMzUs
MTMgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXQoCiAgICAgfQogICAgIGlmIChVTkxJS0VM
WSh3YXNGYXQpKQogICAgICAgICBpdGVyLT52YWx1ZS5ub3RpZnlXcml0ZSgpOwotICAgIG9iamVj
dC0+cmVnaXN0ZXJBdChmYXN0RW50cnkuZ2V0SW5kZXgoKSkuc2V0KGdsb2JhbERhdGEsIG9iamVj
dCwgdmFsdWUpOworICAgIG9iamVjdC0+cmVnaXN0ZXJBdChmYXN0RW50cnkuZ2V0SW5kZXgoKSku
c2V0KHZtLCBvYmplY3QsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgU3ltYm9sVGFibGVPYmplY3RUeXBlPgogaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQ
dXRXaXRoQXR0cmlidXRlcygKLSAgICBTeW1ib2xUYWJsZU9iamVjdFR5cGUqIG9iamVjdCwgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFN5
bWJvbFRhYmxlT2JqZWN0VHlwZSogb2JqZWN0LCBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsCiAgICAgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBB
U1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6Omhl
YXAob2JqZWN0KSk7CkBAIC0xNTMsNyArMTUzLDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQ
dXRXaXRoQXR0cmlidXRlcwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwogICAgIGVudHJ5
Lm5vdGlmeVdyaXRlKCk7CiAgICAgZW50cnkuc2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKLSAg
ICBvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuc2V0KGdsb2JhbERhdGEsIG9i
amVjdCwgdmFsdWUpOworICAgIG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5z
ZXQodm0sIG9iamVjdCwgdmFsdWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCShyZXZp
c2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxl
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDEzICs1OSwxMyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3M7CiAKICAgICAgICAgSlNWYXJpYWJsZU9iamVjdCgKLSAgICAgICAgICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwKKyAgICAgICAgICAgIFZNJiB2bSwKICAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAogICAgICAgICAgICAgUmVnaXN0ZXIqIHJlZ2lzdGVy
cywKICAgICAgICAgICAgIEpTU2NvcGUqIHNjb3BlLAogICAgICAgICAgICAgU2hhcmVkU3ltYm9s
VGFibGUqIHN5bWJvbFRhYmxlID0gMAogICAgICAgICApCi0gICAgICAgICAgICA6IEJhc2UoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlLCBzY29wZSwgc3ltYm9sVGFibGUpCisgICAgICAgICAgICA6IEJh
c2Uodm0sIHN0cnVjdHVyZSwgc2NvcGUsIHN5bWJvbFRhYmxlKQogICAgICAgICAgICAgLCBtX3Jl
Z2lzdGVycyhyZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qPihyZWdp
c3RlcnMpKQogICAgICAgICB7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTV2l0aFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcs
MTQgKzM3LDE0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNXaXRoU2NvcGUqIGNyZWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCiAgICAgewogICAgICAgICBKU1dpdGhTY29w
ZSogd2l0aFNjb3BlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXaXRoU2NvcGU+KCpl
eGVjLT5oZWFwKCkpKSBKU1dpdGhTY29wZShleGVjLCBvYmplY3QpOwotICAgICAgICB3aXRoU2Nv
cGUtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIHdpdGhTY29w
ZS0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAgICAgICAgIHJldHVybiB3aXRoU2NvcGU7
CiAgICAgfQogCiAgICAgc3RhdGljIEpTV2l0aFNjb3BlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogb2JqZWN0LCBKU1Njb3BlKiBuZXh0KQogICAgIHsKICAgICAgICAgSlNXaXRo
U2NvcGUqIHdpdGhTY29wZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2l0aFNjb3Bl
PigqZXhlYy0+aGVhcCgpKSkgSlNXaXRoU2NvcGUoZXhlYywgb2JqZWN0LCBuZXh0KTsKLSAgICAg
ICAgd2l0aFNjb3BlLT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAg
ICB3aXRoU2NvcGUtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwogICAgICAgICByZXR1cm4g
d2l0aFNjb3BlOwogICAgIH0KIApAQCAtNTIsOSArNTIsOSBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG8pCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oV2l0aFNjb3Bl
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhXaXRoU2NvcGVUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogICAgIHN0YXRpYyBKU19FWFBP
UlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CkBAIC02NSwyMSArNjUsMjEgQEAgcHJvdGVj
dGVkOgogcHJpdmF0ZToKICAgICBKU1dpdGhTY29wZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBvYmplY3QpCiAgICAgICAgIDogQmFzZSgKLSAgICAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEo
KSwKKyAgICAgICAgICAgIGV4ZWMtPnZtKCksCiAgICAgICAgICAgICBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPndpdGhTY29wZVN0cnVjdHVyZSgpLAogICAgICAgICAgICAgZXhlYy0+c2Nv
cGUoKQogICAgICAgICApCi0gICAgICAgICwgbV9vYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzLCBvYmplY3QpCisgICAgICAgICwgbV9vYmplY3QoZXhlYy0+dm0oKSwgdGhpcywgb2JqZWN0
KQogICAgIHsKICAgICB9CiAKICAgICBKU1dpdGhTY29wZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBvYmplY3QsIEpTU2NvcGUqIG5leHQpCiAgICAgICAgIDogQmFzZSgKLSAgICAgICAgICAg
IGV4ZWMtPmdsb2JhbERhdGEoKSwKKyAgICAgICAgICAgIGV4ZWMtPnZtKCksCiAgICAgICAgICAg
ICBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPndpdGhTY29wZVN0cnVjdHVyZSgpLAogICAg
ICAgICAgICAgbmV4dAogICAgICAgICApCi0gICAgICAgICwgbV9vYmplY3QoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCBvYmplY3QpCisgICAgICAgICwgbV9vYmplY3QoZXhlYy0+dm0oKSwgdGhp
cywgb2JqZWN0KQogICAgIHsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMzksMTEgKzM5LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAg
ICAgSlNWYWx1ZSBpbnRlcm5hbFZhbHVlKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0SW50ZXJu
YWxWYWx1ZShKU0dsb2JhbERhdGEmLCBKU1ZhbHVlKTsKKyAgICAgICAgdm9pZCBzZXRJbnRlcm5h
bFZhbHVlKFZNJiwgSlNWYWx1ZSk7CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpIAorICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkgCiAgICAgICAgIHsgCi0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGludGVybmFsVmFsdWVPZmZzZXQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoSlNXcmFwcGVyT2JqZWN0LCBtX2ludGVybmFsVmFsdWUpOyB9CkBA
IC01Nyw3ICs1Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICBwcm90ZWN0
ZWQ6Ci0gICAgICAgIGV4cGxpY2l0IEpTV3JhcHBlck9iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1
Y3R1cmUqKTsKKyAgICAgICAgZXhwbGljaXQgSlNXcmFwcGVyT2JqZWN0KFZNJiwgU3RydWN0dXJl
Kik7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgICAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CkBAIC02Niw4ICs2
Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9p
bnRlcm5hbFZhbHVlOwogICAgIH07CiAKLSAgICBpbmxpbmUgSlNXcmFwcGVyT2JqZWN0OjpKU1dy
YXBwZXJPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKLSAgICAgICAgOiBKU0Rlc3RydWN0aWJsZU9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUp
CisgICAgaW5saW5lIEpTV3JhcHBlck9iamVjdDo6SlNXcmFwcGVyT2JqZWN0KFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNEZXN0cnVjdGlibGVPYmplY3Qodm0sIHN0
cnVjdHVyZSkKICAgICB7CiAgICAgfQogCkBAIC03NiwxMSArNzYsMTEgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHJldHVybiBtX2ludGVybmFsVmFsdWUuZ2V0KCk7CiAgICAgfQogCi0gICAg
aW5saW5lIHZvaWQgSlNXcmFwcGVyT2JqZWN0OjpzZXRJbnRlcm5hbFZhbHVlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICBpbmxpbmUgdm9pZCBKU1dyYXBwZXJP
YmplY3Q6OnNldEludGVybmFsVmFsdWUoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKHZhbHVlKTsKICAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc09iamVjdCgpKTsK
LSAgICAgICAgbV9pbnRlcm5hbFZhbHVlLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Cisg
ICAgICAgIG1faW50ZXJuYWxWYWx1ZS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0
ZXJhbFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTGl0ZXJhbFBhcnNlci5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nywy
MCArNTcsMjAgQEAgYm9vbCBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6dHJ5SlNPTlBQYQogICAg
IGRvIHsKICAgICAgICAgVmVjdG9yPEpTT05QUGF0aEVudHJ5PiBwYXRoOwogICAgICAgICAvLyBV
bmd1YXJkZWQgbmV4dCB0byBzdGFydCBvZmYgdGhlIGxleGVyCi0gICAgICAgIElkZW50aWZpZXIg
bmFtZSA9IElkZW50aWZpZXIoJm1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2xleGVyLmN1cnJlbnRU
b2tlbigpLnN0YXJ0LCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLmVuZCAtIG1fbGV4ZXIuY3VycmVu
dFRva2VuKCkuc3RhcnQpOworICAgICAgICBJZGVudGlmaWVyIG5hbWUgPSBJZGVudGlmaWVyKCZt
X2V4ZWMtPnZtKCksIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3RhcnQsIG1fbGV4ZXIuY3VycmVu
dFRva2VuKCkuZW5kIC0gbV9sZXhlci5jdXJyZW50VG9rZW4oKS5zdGFydCk7CiAgICAgICAgIEpT
T05QUGF0aEVudHJ5IGVudHJ5OwotICAgICAgICBpZiAobmFtZSA9PSBtX2V4ZWMtPmdsb2JhbERh
dGEoKS5wcm9wZXJ0eU5hbWVzLT52YXJLZXl3b3JkKSB7CisgICAgICAgIGlmIChuYW1lID09IG1f
ZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT52YXJLZXl3b3JkKSB7CiAgICAgICAgICAgICBpZiAo
bV9sZXhlci5uZXh0KCkgIT0gVG9rSWRlbnRpZmllcikKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICBlbnRyeS5tX3R5cGUgPSBKU09OUFBhdGhFbnRyeVR5cGVEZWNs
YXJlOwotICAgICAgICAgICAgZW50cnkubV9wYXRoRW50cnlOYW1lID0gSWRlbnRpZmllcigmbV9l
eGVjLT5nbG9iYWxEYXRhKCksIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3RhcnQsIG1fbGV4ZXIu
Y3VycmVudFRva2VuKCkuZW5kIC0gbV9sZXhlci5jdXJyZW50VG9rZW4oKS5zdGFydCk7CisgICAg
ICAgICAgICBlbnRyeS5tX3BhdGhFbnRyeU5hbWUgPSBJZGVudGlmaWVyKCZtX2V4ZWMtPnZtKCks
IG1fbGV4ZXIuY3VycmVudFRva2VuKCkuc3RhcnQsIG1fbGV4ZXIuY3VycmVudFRva2VuKCkuZW5k
IC0gbV9sZXhlci5jdXJyZW50VG9rZW4oKS5zdGFydCk7CiAgICAgICAgICAgICBwYXRoLmFwcGVu
ZChlbnRyeSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBlbnRyeS5tX3R5cGUgPSBK
U09OUFBhdGhFbnRyeVR5cGVEb3Q7Ci0gICAgICAgICAgICBlbnRyeS5tX3BhdGhFbnRyeU5hbWUg
PSBJZGVudGlmaWVyKCZtX2V4ZWMtPmdsb2JhbERhdGEoKSwgbV9sZXhlci5jdXJyZW50VG9rZW4o
KS5zdGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5lbmQgLSBtX2xleGVyLmN1cnJlbnRUb2tl
bigpLnN0YXJ0KTsKKyAgICAgICAgICAgIGVudHJ5Lm1fcGF0aEVudHJ5TmFtZSA9IElkZW50aWZp
ZXIoJm1fZXhlYy0+dm0oKSwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5zdGFydCwgbV9sZXhlci5j
dXJyZW50VG9rZW4oKS5lbmQgLSBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnN0YXJ0KTsKICAgICAg
ICAgICAgIHBhdGguYXBwZW5kKGVudHJ5KTsKICAgICAgICAgfQotICAgICAgICBpZiAobV9leGVj
LT5nbG9iYWxEYXRhKCkua2V5d29yZHMtPmlzS2V5d29yZChlbnRyeS5tX3BhdGhFbnRyeU5hbWUp
KQorICAgICAgICBpZiAobV9leGVjLT52bSgpLmtleXdvcmRzLT5pc0tleXdvcmQoZW50cnkubV9w
YXRoRW50cnlOYW1lKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgVG9rZW5U
eXBlIHRva2VuVHlwZSA9IG1fbGV4ZXIubmV4dCgpOwogICAgICAgICBpZiAoZW50cnkubV90eXBl
ID09IEpTT05QUGF0aEVudHJ5VHlwZURlY2xhcmUgJiYgdG9rZW5UeXBlICE9IFRva0Fzc2lnbikK
QEAgLTk0LDcgKzk0LDcgQEAgYm9vbCBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6dHJ5SlNPTlBQ
YQogICAgICAgICAgICAgICAgIGVudHJ5Lm1fdHlwZSA9IEpTT05QUGF0aEVudHJ5VHlwZURvdDsK
ICAgICAgICAgICAgICAgICBpZiAobV9sZXhlci5uZXh0KCkgIT0gVG9rSWRlbnRpZmllcikKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGVudHJ5Lm1f
cGF0aEVudHJ5TmFtZSA9IElkZW50aWZpZXIoJm1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2xleGVy
LmN1cnJlbnRUb2tlbigpLnN0YXJ0LCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLmVuZCAtIG1fbGV4
ZXIuY3VycmVudFRva2VuKCkuc3RhcnQpOworICAgICAgICAgICAgICAgIGVudHJ5Lm1fcGF0aEVu
dHJ5TmFtZSA9IElkZW50aWZpZXIoJm1fZXhlYy0+dm0oKSwgbV9sZXhlci5jdXJyZW50VG9rZW4o
KS5zdGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS5lbmQgLSBtX2xleGVyLmN1cnJlbnRUb2tl
bigpLnN0YXJ0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGNhc2UgVG9rTFBhcmVuOiB7CkBAIC0xMTMsNyArMTEzLDcgQEAgYm9vbCBMaXRlcmFs
UGFyc2VyPENoYXJUeXBlPjo6dHJ5SlNPTlBQYQogICAgIHN0YXJ0SlNPTjoKICAgICAgICAgbV9s
ZXhlci5uZXh0KCk7CiAgICAgICAgIHJlc3VsdHMuYXBwZW5kKEpTT05QRGF0YSgpKTsKLSAgICAg
ICAgcmVzdWx0cy5sYXN0KCkubV92YWx1ZS5zZXQobV9leGVjLT5nbG9iYWxEYXRhKCksIHBhcnNl
KFN0YXJ0UGFyc2VFeHByZXNzaW9uKSk7CisgICAgICAgIHJlc3VsdHMubGFzdCgpLm1fdmFsdWUu
c2V0KG1fZXhlYy0+dm0oKSwgcGFyc2UoU3RhcnRQYXJzZUV4cHJlc3Npb24pKTsKICAgICAgICAg
aWYgKCFyZXN1bHRzLmxhc3QoKS5tX3ZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICByZXN1bHRzLmxhc3QoKS5tX3BhdGguc3dhcChwYXRoKTsKQEAgLTEzMywxOSArMTMz
LDE5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KIEFMV0FZU19JTkxJTkUgY29uc3Qg
SWRlbnRpZmllciBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6bWFrZUlkZW50aWZpZXIoY29uc3Qg
TENoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiB7CiAgICAgaWYgKCFsZW5ndGgpCi0g
ICAgICAgIHJldHVybiBtX2V4ZWMtPmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlk
ZW50aWZpZXI7CisgICAgICAgIHJldHVybiBtX2V4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+ZW1w
dHlJZGVudGlmaWVyOwogICAgIGlmIChjaGFyYWN0ZXJzWzBdID49IE1heGltdW1DYWNoYWJsZUNo
YXJhY3RlcikKLSAgICAgICAgcmV0dXJuIElkZW50aWZpZXIoJm1fZXhlYy0+Z2xvYmFsRGF0YSgp
LCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgICAgICByZXR1cm4gSWRlbnRpZmllcigmbV9leGVj
LT52bSgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwogCiAgICAgaWYgKGxlbmd0aCA9PSAxKSB7CiAg
ICAgICAgIGlmICghbV9zaG9ydElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dLmlzTnVsbCgpKQog
ICAgICAgICAgICAgcmV0dXJuIG1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXTsKLSAg
ICAgICAgbV9zaG9ydElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dID0gSWRlbnRpZmllcigmbV9l
eGVjLT5nbG9iYWxEYXRhKCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgICAgIG1fc2hvcnRJ
ZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXSA9IElkZW50aWZpZXIoJm1fZXhlYy0+dm0oKSwgY2hh
cmFjdGVycywgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIG1fc2hvcnRJZGVudGlmaWVyc1tjaGFy
YWN0ZXJzWzBdXTsKICAgICB9CiAgICAgaWYgKCFtX3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3Rl
cnNbMF1dLmlzTnVsbCgpICYmIElkZW50aWZpZXI6OmVxdWFsKG1fcmVjZW50SWRlbnRpZmllcnNb
Y2hhcmFjdGVyc1swXV0uaW1wbCgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKQogICAgICAgICByZXR1
cm4gbV9yZWNlbnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXTsKLSAgICBtX3JlY2VudElkZW50
aWZpZXJzW2NoYXJhY3RlcnNbMF1dID0gSWRlbnRpZmllcigmbV9leGVjLT5nbG9iYWxEYXRhKCks
IGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgbV9yZWNlbnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJz
WzBdXSA9IElkZW50aWZpZXIoJm1fZXhlYy0+dm0oKSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKICAg
ICByZXR1cm4gbV9yZWNlbnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXTsKIH0KIApAQCAtMTUz
LDE5ICsxNTMsMTkgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgogQUxXQVlTX0lOTElO
RSBjb25zdCBJZGVudGlmaWVyIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjptYWtlSWRlbnRpZmll
cihjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBpZiAoIWxl
bmd0aCkKLSAgICAgICAgcmV0dXJuIG1fZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMt
PmVtcHR5SWRlbnRpZmllcjsKKyAgICAgICAgcmV0dXJuIG1fZXhlYy0+dm0oKS5wcm9wZXJ0eU5h
bWVzLT5lbXB0eUlkZW50aWZpZXI7CiAgICAgaWYgKGNoYXJhY3RlcnNbMF0gPj0gTWF4aW11bUNh
Y2hhYmxlQ2hhcmFjdGVyKQotICAgICAgICByZXR1cm4gSWRlbnRpZmllcigmbV9leGVjLT5nbG9i
YWxEYXRhKCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgICAgIHJldHVybiBJZGVudGlmaWVy
KCZtX2V4ZWMtPnZtKCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAKICAgICBpZiAobGVuZ3RoID09
IDEpIHsKICAgICAgICAgaWYgKCFtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0uaXNO
dWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gbV9zaG9ydElkZW50aWZpZXJzW2NoYXJhY3RlcnNb
MF1dOwotICAgICAgICBtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0gPSBJZGVudGlm
aWVyKCZtX2V4ZWMtPmdsb2JhbERhdGEoKSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICAgICAg
bV9zaG9ydElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dID0gSWRlbnRpZmllcigmbV9leGVjLT52
bSgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwogICAgICAgICByZXR1cm4gbV9zaG9ydElkZW50aWZp
ZXJzW2NoYXJhY3RlcnNbMF1dOwogICAgIH0KICAgICBpZiAoIW1fcmVjZW50SWRlbnRpZmllcnNb
Y2hhcmFjdGVyc1swXV0uaXNOdWxsKCkgJiYgSWRlbnRpZmllcjo6ZXF1YWwobV9yZWNlbnRJZGVu
dGlmaWVyc1tjaGFyYWN0ZXJzWzBdXS5pbXBsKCksIGNoYXJhY3RlcnMsIGxlbmd0aCkpCiAgICAg
ICAgIHJldHVybiBtX3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dOwotICAgIG1fcmVj
ZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0gPSBJZGVudGlmaWVyKCZtX2V4ZWMtPmdsb2Jh
bERhdGEoKSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICBtX3JlY2VudElkZW50aWZpZXJzW2No
YXJhY3RlcnNbMF1dID0gSWRlbnRpZmllcigmbV9leGVjLT52bSgpLCBjaGFyYWN0ZXJzLCBsZW5n
dGgpOwogICAgIHJldHVybiBtX3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dOwogfQog
CkBAIC02NTMsNyArNjUzLDcgQEAgSlNWYWx1ZSBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6cGFy
c2UoUAogICAgICAgICAgICAgICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkK
ICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChtX2V4ZWMsIGksIGxh
c3RWYWx1ZSk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBvYmpl
Y3QtPnB1dERpcmVjdChtX2V4ZWMtPmdsb2JhbERhdGEoKSwgaWRlbnQsIGxhc3RWYWx1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KG1fZXhlYy0+dm0oKSwgaWRlbnQs
IGxhc3RWYWx1ZSk7CiAgICAgICAgICAgICAgICAgaWRlbnRpZmllclN0YWNrLnJlbW92ZUxhc3Qo
KTsKICAgICAgICAgICAgICAgICBpZiAobV9sZXhlci5jdXJyZW50VG9rZW4oKS50eXBlID09IFRv
a0NvbW1hKQogICAgICAgICAgICAgICAgICAgICBnb3RvIGRvUGFyc2VPYmplY3RTdGFydEV4cHJl
c3Npb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAJKHJl
dmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LXZvaWQgSGFzaFRhYmxlOjpjcmVhdGVUYWJsZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpIGNv
bnN0Cit2b2lkIEhhc2hUYWJsZTo6Y3JlYXRlVGFibGUoVk0qIHZtKSBjb25zdAogewogICAgIEFT
U0VSVCghdGFibGUpOwogICAgIGludCBsaW5rSW5kZXggPSBjb21wYWN0SGFzaFNpemVNYXNrICsg
MTsKQEAgLTM0LDcgKzM0LDcgQEAgdm9pZCBIYXNoVGFibGU6OmNyZWF0ZVRhYmxlKEpTR2xvYmFs
RGF0YQogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29tcGFjdFNpemU7ICsraSkKICAgICAgICAg
ZW50cmllc1tpXS5zZXRLZXkoMCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IHZhbHVlc1tpXS5rZXk7
ICsraSkgewotICAgICAgICBTdHJpbmdJbXBsKiBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6YWRk
KGdsb2JhbERhdGEsIHZhbHVlc1tpXS5rZXkpLmxlYWtSZWYoKTsKKyAgICAgICAgU3RyaW5nSW1w
bCogaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmFkZCh2bSwgdmFsdWVzW2ldLmtleSkubGVha1Jl
ZigpOwogICAgICAgICBpbnQgaGFzaEluZGV4ID0gaWRlbnRpZmllci0+ZXhpc3RpbmdIYXNoKCkg
JiBjb21wYWN0SGFzaFNpemVNYXNrOwogICAgICAgICBIYXNoRW50cnkqIGVudHJ5ID0gJmVudHJp
ZXNbaGFzaEluZGV4XTsKIApAQCAtNjksNyArNjksNyBAQCBib29sIHNldFVwU3RhdGljRnVuY3Rp
b25TbG90KEV4ZWNTdGF0ZSogCiB7CiAgICAgQVNTRVJUKHRoaXNPYmotPmdsb2JhbE9iamVjdCgp
KTsKICAgICBBU1NFUlQoZW50cnktPmF0dHJpYnV0ZXMoKSAmIEZ1bmN0aW9uKTsKLSAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSB0aGlzT2JqLT5nZXREaXJlY3RPZmZzZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBwcm9wZXJ0eU5hbWUpOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHRoaXNP
YmotPmdldERpcmVjdE9mZnNldChleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUpOwogCiAgICAgaWYg
KCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgLy8gSWYgYSBwcm9wZXJ0eSBpcyBl
dmVyIGRlbGV0ZWQgZnJvbSBhbiBvYmplY3Qgd2l0aCBhIHN0YXRpYyB0YWJsZSwgdGhlbiB3ZSBy
ZWlmeQpAQCAtODAsNyArODAsNyBAQCBib29sIHNldFVwU3RhdGljRnVuY3Rpb25TbG90KEV4ZWNT
dGF0ZSogCiAgICAgICAgIHRoaXNPYmotPnB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKAogICAgICAg
ICAgICAgZXhlYywgdGhpc09iai0+Z2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZSwgZW50cnkt
PmZ1bmN0aW9uTGVuZ3RoKCksCiAgICAgICAgICAgICBlbnRyeS0+ZnVuY3Rpb24oKSwgZW50cnkt
PmludHJpbnNpYygpLCBlbnRyeS0+YXR0cmlidXRlcygpKTsKLSAgICAgICAgb2Zmc2V0ID0gdGhp
c09iai0+Z2V0RGlyZWN0T2Zmc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsK
KyAgICAgICAgb2Zmc2V0ID0gdGhpc09iai0+Z2V0RGlyZWN0T2Zmc2V0KGV4ZWMtPnZtKCksIHBy
b3BlcnR5TmFtZSk7CiAgICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwogICAg
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmgJKHJldmlzaW9u
IDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjEsMjQgKzEyMSwyNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KIAotICAgICAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgaW5pdGlhbGl6ZUlmTmVlZGVkKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkgY29uc3QKKyAg
ICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGluaXRpYWxpemVJZk5lZWRlZChWTSogdm0pIGNvbnN0
CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghdGFibGUpCi0gICAgICAgICAgICAgICAgY3Jl
YXRlVGFibGUoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICAgICAgY3JlYXRlVGFibGUodm0pOwog
ICAgICAgICB9CiAKICAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGluaXRpYWxpemVJZk5lZWRl
ZChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghdGFi
bGUpCi0gICAgICAgICAgICAgICAgY3JlYXRlVGFibGUoJmV4ZWMtPmdsb2JhbERhdGEoKSk7Cisg
ICAgICAgICAgICAgICAgY3JlYXRlVGFibGUoJmV4ZWMtPnZtKCkpOwogICAgICAgICB9CiAKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZWxldGVUYWJsZSgpIGNvbnN0OwogCiAgICAg
ICAgIC8vIEZpbmQgYW4gZW50cnkgaW4gdGhlIHRhYmxlLCBhbmQgcmV0dXJuIHRoZSBlbnRyeS4K
LSAgICAgICAgQUxXQVlTX0lOTElORSBjb25zdCBIYXNoRW50cnkqIGVudHJ5KEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIGlkZW50aWZpZXIpIGNvbnN0CisgICAgICAgIEFM
V0FZU19JTkxJTkUgY29uc3QgSGFzaEVudHJ5KiBlbnRyeShWTSogdm0sIFByb3BlcnR5TmFtZSBp
ZGVudGlmaWVyKSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICBpbml0aWFsaXplSWZOZWVk
ZWQoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBpbml0aWFsaXplSWZOZWVkZWQodm0pOwogICAg
ICAgICAgICAgcmV0dXJuIGVudHJ5KGlkZW50aWZpZXIpOwogICAgICAgICB9CiAKQEAgLTE5NCwx
NCArMTk0LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaW50IG1fcG9zaXRpb247
CiAgICAgICAgIH07CiAKLSAgICAgICAgQ29uc3RJdGVyYXRvciBiZWdpbihKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpIGNvbnN0CisgICAgICAgIENvbnN0SXRlcmF0b3IgYmVnaW4oVk0mIHZtKSBj
b25zdAogICAgICAgICB7Ci0gICAgICAgICAgICBpbml0aWFsaXplSWZOZWVkZWQoJmdsb2JhbERh
dGEpOworICAgICAgICAgICAgaW5pdGlhbGl6ZUlmTmVlZGVkKCZ2bSk7CiAgICAgICAgICAgICBy
ZXR1cm4gQ29uc3RJdGVyYXRvcih0aGlzLCAwKTsKICAgICAgICAgfQotICAgICAgICBDb25zdEl0
ZXJhdG9yIGVuZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpIGNvbnN0CisgICAgICAgIENvbnN0
SXRlcmF0b3IgZW5kKFZNJiB2bSkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgaW5pdGlh
bGl6ZUlmTmVlZGVkKCZnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIGluaXRpYWxpemVJZk5lZWRl
ZCgmdm0pOwogICAgICAgICAgICAgcmV0dXJuIENvbnN0SXRlcmF0b3IodGhpcywgY29tcGFjdFNp
emUpOwogICAgICAgICB9CiAKQEAgLTIyOSw3ICsyMjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIENvbnZlcnQgdGhlIGhhc2ggdGFibGUga2V5cyB0byBpZGVu
dGlmaWVycy4KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjcmVhdGVUYWJsZShKU0ds
b2JhbERhdGEqKSBjb25zdDsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjcmVhdGVU
YWJsZShWTSopIGNvbnN0OwogICAgIH07CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHNl
dFVwU3RhdGljRnVuY3Rpb25TbG90KEV4ZWNTdGF0ZSosIGNvbnN0IEhhc2hFbnRyeSosIEpTT2Jq
ZWN0KiB0aGlzT2JqZWN0LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpAQCAtMzY4LDcg
KzM2OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBmdW5j
dGlvbiBwdXQgaXQgYXMgYW4gb3ZlcnJpZGUgcHJvcGVydHkuCiAgICAgICAgIGlmIChlbnRyeS0+
YXR0cmlidXRlcygpICYgRnVuY3Rpb24pCi0gICAgICAgICAgICB0aGlzT2JqLT5wdXREaXJlY3Qo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgIHRo
aXNPYmotPnB1dERpcmVjdChleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKICAgICAg
ICAgZWxzZSBpZiAoIShlbnRyeS0+YXR0cmlidXRlcygpICYgUmVhZE9ubHkpKQogICAgICAgICAg
ICAgZW50cnktPnByb3BlcnR5UHV0dGVyKCkoZXhlYywgdGhpc09iaiwgdmFsdWUpOwogICAgICAg
ICBlbHNlIGlmIChzaG91bGRUaHJvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01hdGhPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hdGhPYmplY3QuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsMjMg
Kzg1LDIzIEBAIGNvbnN0IENsYXNzSW5mbyBNYXRoT2JqZWN0OjpzX2luZm8gPSB7ICIKICovCiAK
IE1hdGhPYmplY3Q6Ok1hdGhPYmplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+
Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpCisgICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbE9i
amVjdC0+dm0oKSwgc3RydWN0dXJlKQogewogfQogCiB2b2lkIE1hdGhPYmplY3Q6OmZpbmlzaENy
ZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsK
LSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7Cisg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICBBU1NFUlQo
aW5oZXJpdHMoJnNfaW5mbykpOwogCi0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJFIiksIGpzTnVtYmVyKGV4cCgxLjAp
KSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkpOwotICAgIHB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiTE4yIiks
IGpzTnVtYmVyKGxvZygyLjApKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkpOwot
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRp
ZmllcihleGVjLCAiTE4xMCIpLCBqc051bWJlcihsb2coMTAuMCkpLCBEb250RGVsZXRlIHwgRG9u
dEVudW0gfCBSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+
Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJMT0cyRSIpLCBqc051bWJlcigxLjAgLyBs
b2coMi4wKSksIERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywg
IkxPRzEwRSIpLCBqc051bWJlcigwLjQzNDI5NDQ4MTkwMzI1MTgpLCBEb250RGVsZXRlIHwgRG9u
dEVudW0gfCBSZWFkT25seSk7IC8vIFNlZSBFQ01BLTI2MiAxNS44LjEuNQotICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAi
UEkiKSwganNOdW1iZXIocGlEb3VibGUpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25s
eSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJ
ZGVudGlmaWVyKGV4ZWMsICJTUVJUMV8yIiksIGpzTnVtYmVyKHNxcnQoMC41KSksIERvbnREZWxl
dGUgfCBEb250RW51bSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgIlNRUlQyIiksIGpzTnVtYmVy
KHNxcnQoMi4wKSksIERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5KTsKKyAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJFIiks
IGpzTnVtYmVyKGV4cCgxLjApKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkpOwor
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhl
YywgIkxOMiIpLCBqc051bWJlcihsb2coMi4wKSksIERvbnREZWxldGUgfCBEb250RW51bSB8IFJl
YWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVu
dGlmaWVyKGV4ZWMsICJMTjEwIiksIGpzTnVtYmVyKGxvZygxMC4wKSksIERvbnREZWxldGUgfCBE
b250RW51bSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVj
LT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJMT0cyRSIpLCBqc051bWJlcigxLjAgLyBsb2coMi4w
KSksIERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJMT0cxMEUiKSwganNO
dW1iZXIoMC40MzQyOTQ0ODE5MDMyNTE4KSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9u
bHkpOyAvLyBTZWUgRUNNQS0yNjIgMTUuOC4xLjUKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJQSSIpLCBqc051bWJlcihwaURvdWJs
ZSksIERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJTUVJUMV8yIiksIGpz
TnVtYmVyKHNxcnQoMC41KSksIERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5KTsKKyAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMs
ICJTUVJUMiIpLCBqc051bWJlcihzcXJ0KDIuMCkpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBS
ZWFkT25seSk7CiB9CiAKIGJvb2wgTWF0aE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QgJnNsb3QpCkBAIC0yNjUsNyArMjY1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtYXRoUHJvdG9GdQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQ
cm90b0Z1bmNTaW4oRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoZXhlYy0+Z2xvYmFsRGF0YSgpLmNhY2hlZFNpbihleGVjLT5hcmd1bWVudCgwKS50b051bWJl
cihleGVjKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dm0oKS5jYWNoZWRT
aW4oZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKTsKIH0KIAogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jU3FydChFeGVjU3RhdGUqIGV4ZWMpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5oCShyZXZpc2lvbiAx
NDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgICAgICB9CiAK
ICAgICBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NZW1v
cnlTdGF0aXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NZW1vcnlTdGF0aXN0aWNzLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWVtb3J5U3RhdGlzdGljcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJNZW1vcnlTdGF0aXN0aWNzLmgiCiAKICNpbmNs
dWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisj
aW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJKU1N0YWNrLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWVtb3J5U3RhdGlzdGljcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01lbW9yeVN0YXRpc3Rp
Y3MuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TWVtb3J5U3RhdGlzdGljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNp
bmNsdWRlICJIZWFwLmgiCiAKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwogCiBuYW1l
c3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFtZUNv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9OYW1lQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OYW1lQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MywxNSArNDMsMTUgQEAgTmFtZUNvbnN0cnVjdG9yOjpOYW1lQ29uc3RydWN0b3IoSlNHbG9iYQog
CiB2b2lkIE5hbWVDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBO
YW1lUHJvdG90eXBlKiBwcm90b3R5cGUpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBwcm90b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpOwotICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLnByb3RvdHlwZSwgcHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUg
fCBSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFs
RGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigxKSwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4
ZWMtPnZtKCksIHByb3RvdHlwZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSk7CisgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnBy
b3RvdHlwZSwgcHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7Cisg
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRF
bnVtKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
UHJpdmF0ZU5hbWUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgcHVibGljTmFtZSA9
IGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA/IGV4ZWMtPmFyZ3VtZW50KDApIDoganNVbmRlZmluZWQo
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKE5hbWVJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcml2YXRlTmFtZVN0
cnVjdHVyZSgpLCBwdWJsaWNOYW1lLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShOYW1lSW5zdGFuY2U6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPnByaXZhdGVOYW1lU3RydWN0dXJlKCksIHB1YmxpY05hbWUudG9TdHJp
bmcoZXhlYykpKTsKIH0KIAogQ29uc3RydWN0VHlwZSBOYW1lQ29uc3RydWN0b3I6OmdldENvbnN0
cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hbWVDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hbWVDb25zdHJ1Y3Rvci5oCShyZXZp
c2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lQ29uc3Ry
dWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOSArNDYsOSBAQCBwdWJsaWM6CiAKICAgICBz
dGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkgCiAgICAgeyAKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOyAKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgCiAgICAgfQogCiBwcm90ZWN0ZWQ6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lSW5zdGFuY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hbWVJbnN0YW5jZS5jcHAJKHJldmlz
aW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hbWVJbnN0YW5j
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEwICszMywxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogY29uc3QgQ2xhc3NJbmZvIE5hbWVJbnN0YW5jZTo6c19pbmZvID0geyAiTmFtZSIsICZCYXNl
OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoTmFtZUluc3RhbmNlKSB9OwogCi1O
YW1lSW5zdGFuY2U6Ok5hbWVJbnN0YW5jZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU1N0cmluZyogbmFtZVN0cmluZykKLSAgICA6IEJhc2UoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKQorTmFtZUluc3RhbmNlOjpOYW1lSW5zdGFuY2UoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNTdHJpbmcqIG5hbWVTdHJpbmcpCisgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUpCiB7Ci0gICAgbV9uYW1lU3RyaW5nLnNldChnbG9iYWxEYXRhLCB0aGlzLCBuYW1l
U3RyaW5nKTsKKyAgICBtX25hbWVTdHJpbmcuc2V0KHZtLCB0aGlzLCBuYW1lU3RyaW5nKTsKIH0K
IAogdm9pZCBOYW1lSW5zdGFuY2U6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFtZUluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFtZUluc3RhbmNlLmgJKHJldmlzaW9uIDE0ODY4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hbWVJbnN0YW5jZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNywxNSArMzcsMTUgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0
IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oTmFtZUluc3RhbmNlVHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oTmFtZUluc3RhbmNlVHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKLSAgICBzdGF0aWMgTmFtZUluc3RhbmNl
KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
SlNTdHJpbmcqIG5hbWVTdHJpbmcpCisgICAgc3RhdGljIE5hbWVJbnN0YW5jZSogY3JlYXRlKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU3RyaW5nKiBuYW1lU3RyaW5nKQogICAgIHsK
LSAgICAgICAgTmFtZUluc3RhbmNlKiBuYW1lID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
TmFtZUluc3RhbmNlPihnbG9iYWxEYXRhLmhlYXApKSBOYW1lSW5zdGFuY2UoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlLCBuYW1lU3RyaW5nKTsKLSAgICAgICAgbmFtZS0+ZmluaXNoQ3JlYXRpb24oZ2xv
YmFsRGF0YSk7CisgICAgICAgIE5hbWVJbnN0YW5jZSogbmFtZSA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPE5hbWVJbnN0YW5jZT4odm0uaGVhcCkpIE5hbWVJbnN0YW5jZSh2bSwgc3RydWN0
dXJlLCBuYW1lU3RyaW5nKTsKKyAgICAgICAgbmFtZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAg
ICAgICByZXR1cm4gbmFtZTsKICAgICB9CiAKQEAgLTU1LDExICs1NSwxMSBAQCBwdWJsaWM6CiBw
cm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIE5hbWVJ
bnN0YW5jZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBKU1N0cmluZyopOworICAgIE5hbWVJ
bnN0YW5jZShWTSYsIFN0cnVjdHVyZSosIEpTU3RyaW5nKik7CiAKLSAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJiB2bSkKICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEp
OworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIEFTU0VSVChpbmhl
cml0cygmc19pbmZvKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OYW1lUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OYW1lUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFtZVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDEzICs0OCwxMyBAQCBjb25zdCBDbGFzc0luZm8gTmFtZVByb3RvdHlwZTo6c19pbmZv
ID0gCiAqLwogCiBOYW1lUHJvdG90eXBlOjpOYW1lUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBCYXNlKGV4ZWMtPmdsb2JhbERhdGEoKSwgc3Ry
dWN0dXJlLCBqc0VtcHR5U3RyaW5nKGV4ZWMpKQorICAgIDogQmFzZShleGVjLT52bSgpLCBzdHJ1
Y3R1cmUsIGpzRW1wdHlTdHJpbmcoZXhlYykpCiB7CiB9CiAKIHZvaWQgTmFtZVByb3RvdHlwZTo6
ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+
dm0oKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFtZVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hbWVQcm90b3R5cGUuaAkocmV2aXNpb24gMTQ4
NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFtZVByb3RvdHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0Myw5IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhOYW1lSW5zdGFuY2VUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhOYW1lSW5zdGFuY2VUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogcHJvdGVjdGVkOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29u
c3RydWN0b3IuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0
Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgc3RhdGljIGNvbnN0IENs
YXNzSW5mbyBzX2luZm87CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
Z2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgICAgICB9CiAKICAgICAgICAgU3RydWN0
dXJlKiBlcnJvclN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fZXJyb3JTdHJ1Y3R1cmUuZ2V0KCk7IH0K
QEAgLTUzLDE0ICs1MywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcm90ZWN0ZWQ6CiAgICAg
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSwgY29uc3QgU3RyaW5n
JiBuYW1lKQogICAgICAgICB7Ci0gICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVj
LT5nbG9iYWxEYXRhKCksIG5hbWUpOworICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
ZXhlYy0+dm0oKSwgbmFtZSk7CiAgICAgICAgICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykp
OwogCiAgICAgICAgICAgICBOYXRpdmVFcnJvclByb3RvdHlwZSogcHJvdG90eXBlID0gTmF0aXZl
RXJyb3JQcm90b3R5cGU6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZVN0cnVj
dHVyZSwgbmFtZSwgdGhpcyk7CiAKLSAgICAgICAgICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxE
YXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEpLCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7IC8vIEVDTUEgMTUuMTEuNy41Ci0gICAgICAgICAg
ICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJv
dG90eXBlLCBwcm90b3R5cGUsIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKLSAg
ICAgICAgICAgIG1fZXJyb3JTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
RXJyb3JJbnN0YW5jZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUpKTsKKyAgICAgICAgICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigxKSwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5IHwgRG9udEVudW0pOyAvLyBFQ01BIDE1LjExLjcuNQorICAgICAgICAgICAgcHV0RGly
ZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIHByb3RvdHlw
ZSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgICAgICAgICAgbV9lcnJv
clN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgRXJyb3JJbnN0YW5jZTo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlKSk7CiAgICAgICAgICAg
ICBBU1NFUlQobV9lcnJvclN0cnVjdHVyZSk7CiAgICAgICAgICAgICBBU1NFUlQobV9lcnJvclN0
cnVjdHVyZS0+aXNPYmplY3QoKSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9y
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsOSArMzYsOSBAQCBOYXRpdmVFcnJv
clByb3RvdHlwZTo6TmF0aXZlRXJyb3JQcm90b3R5CiB2b2lkIE5hdGl2ZUVycm9yUHJvdG90eXBl
OjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lQW5kTWVzc2FnZSwgTmF0aXZlRXJyb3JDb25z
dHJ1Y3RvciogY29uc3RydWN0b3IpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYywg
Z2xvYmFsT2JqZWN0KTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkubmFtZSwganNTdHJpbmcoZXhlYywgbmFtZUFuZE1lc3NhZ2UpLCBEb250
RW51bSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLm1lc3NhZ2UsIGpzRW1wdHlTdHJpbmcoZXhlYyksIERvbnRFbnVtKTsKLSAgICBwdXRE
aXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0
b3IsIGNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1lLCBqc1N0cmluZyhleGVjLCBuYW1lQW5kTWVzc2FnZSks
IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLm1lc3NhZ2UsIGpzRW1wdHlTdHJpbmcoZXhlYyksIERvbnRFbnVtKTsKKyAgICBwdXREaXJl
Y3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBjb25zdHJ1
Y3RvciwgRG9udEVudW0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTQgKzYyLDE0IEBAIE51bWJlckNv
bnN0cnVjdG9yOjpOdW1iZXJDb25zdHJ1Y3RvcihKU0cKIAogdm9pZCBOdW1iZXJDb25zdHJ1Y3Rv
cjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBOdW1iZXJQcm90b3R5cGUqIG51bWJl
clByb3RvdHlwZSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRh
KCksIG51bWJlclByb3RvdHlwZS0+c19pbmZvLmNsYXNzTmFtZSk7CisgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oZXhlYy0+dm0oKSwgbnVtYmVyUHJvdG90eXBlLT5zX2luZm8uY2xhc3NOYW1lKTsK
ICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogCiAgICAgLy8gTnVtYmVyLlByb3RvdHlw
ZQotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgbnVtYmVyUHJvdG90eXBlLCBEb250RW51bSB8
IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
ZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgbnVtYmVyUHJvdG90
eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CiAKICAgICAvLyBuby4gb2Yg
YXJndW1lbnRzIGZvciBjb25zdHJ1Y3RvcgotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1i
ZXIoMSksIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKKyAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
LCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOwogfQogCiBi
b29sIE51bWJlckNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKQEAgLTExNSw5ICsxMTUsOSBAQCBzdGF0aWMgSlNWYWx1ZSBudW1iZXJDb25zdHJ1Y3Rv
ck1pblZhbHVlCiAvLyBFQ01BIDE1LjcuMQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0V2l0aE51bWJlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsK
LSAgICBOdW1iZXJPYmplY3QqIG9iamVjdCA9IE51bWJlck9iamVjdDo6Y3JlYXRlKGV4ZWMtPmds
b2JhbERhdGEoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2Jq
ZWN0KCktPm51bWJlck9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICBOdW1iZXJPYmplY3QqIG9iamVj
dCA9IE51bWJlck9iamVjdDo6Y3JlYXRlKGV4ZWMtPnZtKCksIGFzSW50ZXJuYWxGdW5jdGlvbihl
eGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT5udW1iZXJPYmplY3RTdHJ1Y3R1cmUoKSk7
CiAgICAgZG91YmxlIG4gPSBleGVjLT5hcmd1bWVudENvdW50KCkgPyBleGVjLT5hcmd1bWVudCgw
KS50b051bWJlcihleGVjKSA6IDA7Ci0gICAgb2JqZWN0LT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwganNOdW1iZXIobikpOworICAgIG9iamVjdC0+c2V0SW50ZXJuYWxWYWx1
ZShleGVjLT52bSgpLCBqc051bWJlcihuKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShv
YmplY3QpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJD
b25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L051bWJlckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDkgKzQ2LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90bykgCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pIAog
ICAgICAgICB7IAotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7IAorICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pOyAKICAgICAgICAgfQogCiAgICAgICAgIGVudW0geyBOYU5WYWx1ZSwgTmVn
SW5maW5pdHksIFBvc0luZmluaXR5LCBNYXhWYWx1ZSwgTWluVmFsdWUgfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmNwcAkocmV2aXNpb24g
MTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsMjEgKzMyLDIxIEBAIEFTU0VSVF9IQVNfVFJJVklBTF9E
RVNUUlVDVE9SKE51bWJlck9iamUKIAogY29uc3QgQ2xhc3NJbmZvIE51bWJlck9iamVjdDo6c19p
bmZvID0geyAiTnVtYmVyIiwgJkpTV3JhcHBlck9iamVjdDo6c19pbmZvLCAwLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKE51bWJlck9iamVjdCkgfTsKIAotTnVtYmVyT2JqZWN0OjpOdW1iZXJPYmpl
Y3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6
IEpTV3JhcHBlck9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCitOdW1iZXJPYmplY3Q6Ok51
bWJlck9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogSlNXcmFwcGVy
T2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCiB7CiB9CiAKLXZvaWQgTnVtYmVyT2JqZWN0OjpmaW5pc2hD
cmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIE51bWJlck9iamVjdDo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMo
JnNfaW5mbykpOwogfQogCiBOdW1iZXJPYmplY3QqIGNvbnN0cnVjdE51bWJlcihFeGVjU3RhdGUq
IGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbnVtYmVyKQogewot
ICAgIE51bWJlck9iamVjdCogb2JqZWN0ID0gTnVtYmVyT2JqZWN0OjpjcmVhdGUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPm51bWJlck9iamVjdFN0cnVjdHVyZSgpKTsKLSAgICBv
YmplY3QtPnNldEludGVybmFsVmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBudW1iZXIpOworICAg
IE51bWJlck9iamVjdCogb2JqZWN0ID0gTnVtYmVyT2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwg
Z2xvYmFsT2JqZWN0LT5udW1iZXJPYmplY3RTdHJ1Y3R1cmUoKSk7CisgICAgb2JqZWN0LT5zZXRJ
bnRlcm5hbFZhbHVlKGV4ZWMtPnZtKCksIG51bWJlcik7CiAgICAgcmV0dXJuIG9iamVjdDsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmgJ
KHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJl
ck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywyNCArMjcsMjQgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICBjbGFzcyBOdW1iZXJPYmplY3QgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsK
ICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIE51bWJlck9iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1
Y3R1cmUqKTsKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmKTsKKyAg
ICAgICAgTnVtYmVyT2JqZWN0KFZNJiwgU3RydWN0dXJlKik7CisgICAgICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBKU1dyYXBwZXJP
YmplY3QgQmFzZTsKIAotICAgICAgICBzdGF0aWMgTnVtYmVyT2JqZWN0KiBjcmVhdGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgc3RhdGlj
IE51bWJlck9iamVjdCogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIE51bWJlck9iamVjdCogbnVtYmVyID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8TnVtYmVyT2JqZWN0PihnbG9iYWxEYXRhLmhlYXApKSBOdW1iZXJPYmplY3Qo
Z2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIG51bWJlci0+ZmluaXNoQ3JlYXRp
b24oZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBOdW1iZXJPYmplY3QqIG51bWJlciA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPE51bWJlck9iamVjdD4odm0uaGVhcCkpIE51bWJlck9iamVj
dCh2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIG51bWJlci0+ZmluaXNoQ3JlYXRpb24odm0p
OwogICAgICAgICAgICAgcmV0dXJuIG51bWJlcjsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRp
YyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICAgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKE51bWJlck9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhOdW1iZXJPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOwogICAgICAgICB9CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MSwxNCArNzEsMTQgQEAgY29uc3QgQ2xhc3NJbmZvIE51bWJlclByb3Rv
dHlwZTo6c19pbmZvIAogQVNTRVJUX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoTnVtYmVyUHJvdG90
eXBlKTsKIAogTnVtYmVyUHJvdG90eXBlOjpOdW1iZXJQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVj
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IE51bWJlck9iamVjdChleGVjLT5nbG9iYWxE
YXRhKCksIHN0cnVjdHVyZSkKKyAgICA6IE51bWJlck9iamVjdChleGVjLT52bSgpLCBzdHJ1Y3R1
cmUpCiB7CiB9CiAKIHZvaWQgTnVtYmVyUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KikKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihl
eGVjLT5nbG9iYWxEYXRhKCkpOwotICAgIHNldEludGVybmFsVmFsdWUoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBqc051bWJlcigwKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7
CisgICAgc2V0SW50ZXJuYWxWYWx1ZShleGVjLT52bSgpLCBqc051bWJlcigwKSk7CiAKICAgICBB
U1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogfQpAQCAtNDc1LDEzICs0NzUsMTMgQEAgc3RhdGlj
IGlubGluZSBFbmNvZGVkSlNWYWx1ZSBpbnRlZ2VyVmFsdQogICAgIGlmIChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4odmFsdWUpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJhZGl4KSkgewogICAgICAg
ICBBU1NFUlQodmFsdWUgPD0gMzYpOwogICAgICAgICBBU1NFUlQodmFsdWUgPj0gMCk7Ci0gICAg
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmds
ZUNoYXJhY3RlclN0cmluZyhnbG9iYWxEYXRhLCByYWRpeERpZ2l0c1t2YWx1ZV0pKTsKKyAgICAg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcodm0sIHJhZGl4RGlnaXRzW3Zh
bHVlXSkpOwogICAgIH0KIAogICAgIGlmIChyYWRpeCA9PSAxMCkgewotICAgICAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGdsb2JhbERhdGEsIGdsb2JhbERhdGEtPm51bWVyaWNT
dHJpbmdzLmFkZCh2YWx1ZSkpKTsKKyAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIHZtLT5udW1lcmljU3RyaW5n
cy5hZGQodmFsdWUpKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0
cmluZyhleGVjLCB0b1N0cmluZ1dpdGhSYWRpeCh2YWx1ZSwgcmFkaXgpKSk7CkBAIC01MDMsOCAr
NTAzLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90bwogICAgICAg
ICByZXR1cm4gaW50ZWdlclZhbHVlVG9TdHJpbmcoZXhlYywgcmFkaXgsIGludGVnZXJWYWx1ZSk7
CiAKICAgICBpZiAocmFkaXggPT0gMTApIHsKLSAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1N0cmluZyhnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5udW1lcmljU3RyaW5ncy5hZGQoZG91
YmxlVmFsdWUpKSk7CisgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCB2bS0+bnVtZXJpY1N0cmluZ3MuYWRkKGRv
dWJsZVZhbHVlKSkpOwogICAgIH0KIAogICAgIGlmICghc3RkOjppc2Zpbml0ZShkb3VibGVWYWx1
ZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90
b3R5cGUuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTnVtYmVyUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNf
aW5mbzsKIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRh
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oTnVtYmVyT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE51bWJlck9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3Rl
ZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RD
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsMTEg
Kzg1LDExIEBAIE9iamVjdENvbnN0cnVjdG9yOjpPYmplY3RDb25zdHJ1Y3RvcihKU0cKIAogdm9p
ZCBPYmplY3RDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBPYmpl
Y3RQcm90b3R5cGUqIG9iamVjdFByb3RvdHlwZSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgIk9iamVjdCIpLnN0cmluZygp
KTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMs
ICJPYmplY3QiKS5zdHJpbmcoKSk7CiAgICAgLy8gRUNNQSAxNS4yLjMuMQotICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLnByb3RvdHlwZSwgb2JqZWN0UHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBS
ZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgb2JqZWN0UHJvdG90eXBlLCBEb250RW51bSB8
IERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgLy8gbm8uIG9mIGFyZ3VtZW50cyBmb3IgY29u
c3RydWN0b3IKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRh
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEpLCBSZWFkT25seSB8
IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
ZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSksIFJl
YWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKIH0KIAogYm9vbCBPYmplY3RDb25zdHJ1
Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QgJnNsb3QpCkBAIC0xNjAsMTcg
KzE2MCwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAKICAg
ICBKU09iamVjdCogZGVzY3JpcHRpb24gPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKICAg
ICBpZiAoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkgewotICAgICAgICBkZXNj
cmlwdGlvbi0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLnZhbHVlLCBkZXNjcmlwdG9yLnZhbHVlKCkgPyBkZXNjcmlwdG9yLnZhbHVlKCkgOiBqc1Vu
ZGVmaW5lZCgpLCAwKTsKLSAgICAgICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS53cml0YWJsZSwganNCb29sZWFuKGRlc2Ny
aXB0b3Iud3JpdGFibGUoKSksIDApOworICAgICAgICBkZXNjcmlwdGlvbi0+cHV0RGlyZWN0KGV4
ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS52YWx1ZSwgZGVzY3JpcHRvci52YWx1ZSgp
ID8gZGVzY3JpcHRvci52YWx1ZSgpIDoganNVbmRlZmluZWQoKSwgMCk7CisgICAgICAgIGRlc2Ny
aXB0aW9uLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLndyaXRh
YmxlLCBqc0Jvb2xlYW4oZGVzY3JpcHRvci53cml0YWJsZSgpKSwgMCk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgQVNTRVJUKGRlc2NyaXB0b3IuZ2V0dGVyKCkpOwogICAgICAgICBBU1NFUlQoZGVz
Y3JpcHRvci5zZXR0ZXIoKSk7Ci0gICAgICAgIGRlc2NyaXB0aW9uLT5wdXREaXJlY3QoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZ2V0LCBkZXNjcmlwdG9yLmdldHRl
cigpLCAwKTsKLSAgICAgICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRh
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zZXQsIGRlc2NyaXB0b3Iuc2V0dGVyKCksIDApOwor
ICAgICAgICBkZXNjcmlwdGlvbi0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5nZXQsIGRlc2NyaXB0b3IuZ2V0dGVyKCksIDApOworICAgICAgICBkZXNjcmlwdGlv
bi0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zZXQsIGRlc2Ny
aXB0b3Iuc2V0dGVyKCksIDApOwogICAgIH0KICAgICAKLSAgICBkZXNjcmlwdGlvbi0+cHV0RGly
ZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmVudW1lcmFibGUs
IGpzQm9vbGVhbihkZXNjcmlwdG9yLmVudW1lcmFibGUoKSksIDApOwotICAgIGRlc2NyaXB0aW9u
LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29u
ZmlndXJhYmxlLCBqc0Jvb2xlYW4oZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSksIDApOworICAg
IGRlc2NyaXB0aW9uLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
LmVudW1lcmFibGUsIGpzQm9vbGVhbihkZXNjcmlwdG9yLmVudW1lcmFibGUoKSksIDApOworICAg
IGRlc2NyaXB0aW9uLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
LmNvbmZpZ3VyYWJsZSwganNCb29sZWFuKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCkpLCAwKTsK
IAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZGVzY3JpcHRpb24pOwogfQpAQCAtMzY4LDcg
KzM2OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICBK
U09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qob2JqKTsKIAogICAgIGlmIChpc0pTRmluYWxPYmpl
Y3Qob2JqZWN0KSkgewotICAgICAgICBvYmplY3QtPnNlYWwoZXhlYy0+Z2xvYmFsRGF0YSgpKTsK
KyAgICAgICAgb2JqZWN0LT5zZWFsKGV4ZWMtPnZtKCkpOwogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKG9iaik7CiAgICAgfQogCkBAIC0zOTAsNyArMzkwLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIH0KIAogICAgIC8vIDMuIFNldCB0aGUg
W1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTyB0byBmYWxzZS4KLSAgICBvYmpl
Y3QtPnByZXZlbnRFeHRlbnNpb25zKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgb2JqZWN0LT5w
cmV2ZW50RXh0ZW5zaW9ucyhleGVjLT52bSgpKTsKIAogICAgIC8vIDQuIFJldHVybiBPLgogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqKTsKQEAgLTQwNSw3ICs0MDUsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgSlNPYmplY3QqIG9iamVjdCA9
IGFzT2JqZWN0KG9iaik7CiAKICAgICBpZiAoaXNKU0ZpbmFsT2JqZWN0KG9iamVjdCkgJiYgIWhh
c0luZGV4ZWRQcm9wZXJ0aWVzKG9iamVjdC0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSkg
ewotICAgICAgICBvYmplY3QtPmZyZWV6ZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBv
YmplY3QtPmZyZWV6ZShleGVjLT52bSgpKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShvYmopOwogICAgIH0KIApAQCAtNDMxLDcgKzQzMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICB9CiAKICAgICAvLyAzLiBTZXQgdGhlIFtbRXh0ZW5z
aWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8gdG8gZmFsc2UuCi0gICAgb2JqZWN0LT5wcmV2
ZW50RXh0ZW5zaW9ucyhleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIG9iamVjdC0+cHJldmVudEV4
dGVuc2lvbnMoZXhlYy0+dm0oKSk7CiAKICAgICAvLyA0LiBSZXR1cm4gTy4KICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKG9iaik7CkBAIC00NDIsNyArNDQyLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIEpTVmFsdWUgb2JqID0gZXhlYy0+YXJndW1l
bnQoMCk7CiAgICAgaWYgKCFvYmouaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJPYmplY3QucHJl
dmVudEV4dGVuc2lvbnMgY2FuIG9ubHkgYmUgY2FsbGVkIG9uIE9iamVjdHMuIikpKTsKLSAgICBh
c09iamVjdChvYmopLT5wcmV2ZW50RXh0ZW5zaW9ucyhleGVjLT5nbG9iYWxEYXRhKCkpOworICAg
IGFzT2JqZWN0KG9iaiktPnByZXZlbnRFeHRlbnNpb25zKGV4ZWMtPnZtKCkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUob2JqKTsKIH0KIApAQCAtNDU1LDcgKzQ1NSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICBKU09iamVjdCogb2JqZWN0ID0g
YXNPYmplY3Qob2JqKTsKIAogICAgIGlmIChpc0pTRmluYWxPYmplY3Qob2JqZWN0KSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5pc1NlYWxlZChleGVj
LT5nbG9iYWxEYXRhKCkpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKG9iamVjdC0+aXNTZWFsZWQoZXhlYy0+dm0oKSkpKTsKIAogICAgIC8vIDIuIEZvciBlYWNo
IG5hbWVkIG93biBwcm9wZXJ0eSBuYW1lIFAgb2YgTywKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBw
cm9wZXJ0aWVzKGV4ZWMpOwpAQCAtNDg1LDcgKzQ4NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qob2Jq
KTsKIAogICAgIGlmIChpc0pTRmluYWxPYmplY3Qob2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5pc0Zyb3plbihleGVjLT5nbG9iYWxEYXRh
KCkpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG9iamVjdC0+
aXNGcm96ZW4oZXhlYy0+dm0oKSkpKTsKIAogICAgIC8vIDIuIEZvciBlYWNoIG5hbWVkIG93biBw
cm9wZXJ0eSBuYW1lIFAgb2YgTywKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKGV4
ZWMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RD
b25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw5ICs0NSw5
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19p
bmZvOwogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQorICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEs
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgpAQCAtNjgsNyAr
NjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdEVt
cHR5T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHByb3RvdHlwZSwgdW5zaWduZWQg
aW5saW5lQ2FwYWNpdHkpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgICAgICBQcm90b3R5cGVNYXAm
IHByb3RvdHlwZU1hcCA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLnByb3RvdHlwZU1hcDsK
KyAgICAgICAgUHJvdG90eXBlTWFwJiBwcm90b3R5cGVNYXAgPSBnbG9iYWxPYmplY3QtPnZtKCku
cHJvdG90eXBlTWFwOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHByb3RvdHlwZU1h
cC5lbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZSgKICAgICAgICAgICAgIHByb3RvdHlw
ZSwgaW5saW5lQ2FwYWNpdHkpOwogICAgICAgICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3Qo
ZXhlYywgc3RydWN0dXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09i
amVjdFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDUsMTcgKzQ1LDE3IEBAIEFTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKE9iamVjdFBy
b3QKIGNvbnN0IENsYXNzSW5mbyBPYmplY3RQcm90b3R5cGU6OnNfaW5mbyA9IHsgIk9iamVjdCIs
ICZKU05vbkZpbmFsT2JqZWN0OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoT2Jq
ZWN0UHJvdG90eXBlKSB9OwogCiBPYmplY3RQcm90b3R5cGU6Ok9iamVjdFByb3RvdHlwZShFeGVj
U3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3R1Y3R1cmUpCi0gICAgOiBKU05vbkZpbmFsT2JqZWN0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgc3R1Y3R1cmUpCisgICAgOiBKU05vbkZpbmFsT2JqZWN0KGV4
ZWMtPnZtKCksIHN0dWN0dXJlKQogewogfQogCiB2b2lkIE9iamVjdFByb3RvdHlwZTo6ZmluaXNo
Q3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQog
ewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIAotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGds
b2JhbERhdGEpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5o
ZXJpdHMoJnNfaW5mbykpOwotICAgIGdsb2JhbERhdGEucHJvdG90eXBlTWFwLmFkZFByb3RvdHlw
ZSh0aGlzKTsKKyAgICB2bS5wcm90b3R5cGVNYXAuYWRkUHJvdG90eXBlKHRoaXMpOwogICAgIAog
ICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04oInRvU3RyaW5nIiwgb2JqZWN0UHJvdG9GdW5jVG9TdHJp
bmcsIERvbnRFbnVtLCAwKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKCJ0b0xvY2FsZVN0cmlu
ZyIsIG9iamVjdFByb3RvRnVuY1RvTG9jYWxlU3RyaW5nLCBEb250RW51bSwgMCk7CkBAIC0yMTgs
NyArMjE4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhl
YykpOwogCiAgICAgICAgIHJlc3VsdCA9IGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBuZXdTdHJp
bmcucmVsZWFzZSgpKTsKLSAgICAgICAgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPnNldE9iamVj
dFRvU3RyaW5nVmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCByZXN1bHQpOwor
ICAgICAgICB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShl
eGVjLT52bSgpLCB0aGlzT2JqZWN0LCByZXN1bHQpOwogICAgIH0KICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PYmplY3RQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PYmplY3RQcm90b3R5cGUuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDkgKzMzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENs
YXNzSW5mbyBzX2luZm87CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
Z2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAko
cmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDMyICs1NiwzMiBAQCBORVZFUl9JTkxJTkUg
SlNWYWx1ZSBqc0FkZFNsb3dDYXNlKENhbGxGCiAgICAgcmV0dXJuIGpzTnVtYmVyKHAxLnRvTnVt
YmVyKGNhbGxGcmFtZSkgKyBwMi50b051bWJlcihjYWxsRnJhbWUpKTsKIH0KIAotSlNWYWx1ZSBq
c1R5cGVTdHJpbmdGb3JWYWx1ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdikKK0pTVmFsdWUganNUeXBlU3RyaW5nRm9yVmFs
dWUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHYpCiB7CiAg
ICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEuc21hbGxT
dHJpbmdzLnVuZGVmaW5lZFN0cmluZygpOworICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdz
LnVuZGVmaW5lZFN0cmluZygpOwogICAgIGlmICh2LmlzQm9vbGVhbigpKQotICAgICAgICByZXR1
cm4gZ2xvYmFsRGF0YS5zbWFsbFN0cmluZ3MuYm9vbGVhblN0cmluZygpOworICAgICAgICByZXR1
cm4gdm0uc21hbGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKTsKICAgICBpZiAodi5pc051bWJlcigp
KQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS5zbWFsbFN0cmluZ3MubnVtYmVyU3RyaW5nKCk7
CisgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3MubnVtYmVyU3RyaW5nKCk7CiAgICAgaWYg
KHYuaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEuc21hbGxTdHJpbmdzLnN0
cmluZ1N0cmluZygpOworICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdzLnN0cmluZ1N0cmlu
ZygpOwogICAgIGlmICh2LmlzT2JqZWN0KCkpIHsKICAgICAgICAgLy8gUmV0dXJuICJ1bmRlZmlu
ZWQiIGZvciBvYmplY3RzIHRoYXQgc2hvdWxkIGJlIHRyZWF0ZWQKICAgICAgICAgLy8gYXMgbnVs
bCB3aGVuIGRvaW5nIGNvbXBhcmlzb25zLgogICAgICAgICBpZiAoYXNPYmplY3QodiktPnN0cnVj
dHVyZSgpLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKGdsb2JhbE9iamVjdCkpCi0gICAgICAgICAg
ICByZXR1cm4gZ2xvYmFsRGF0YS5zbWFsbFN0cmluZ3MudW5kZWZpbmVkU3RyaW5nKCk7CisgICAg
ICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdzLnVuZGVmaW5lZFN0cmluZygpOwogICAgICAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0
KHYpOwogICAgICAgICBpZiAob2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShvYmpl
Y3QsIGNhbGxEYXRhKSAhPSBDYWxsVHlwZU5vbmUpCi0gICAgICAgICAgICByZXR1cm4gZ2xvYmFs
RGF0YS5zbWFsbFN0cmluZ3MuZnVuY3Rpb25TdHJpbmcoKTsKKyAgICAgICAgICAgIHJldHVybiB2
bS5zbWFsbFN0cmluZ3MuZnVuY3Rpb25TdHJpbmcoKTsKICAgICB9Ci0gICAgcmV0dXJuIGdsb2Jh
bERhdGEuc21hbGxTdHJpbmdzLm9iamVjdFN0cmluZygpOworICAgIHJldHVybiB2bS5zbWFsbFN0
cmluZ3Mub2JqZWN0U3RyaW5nKCk7CiB9CiAKIEpTVmFsdWUganNUeXBlU3RyaW5nRm9yVmFsdWUo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdikKIHsKLSAgICByZXR1cm4ganNUeXBlU3Ry
aW5nRm9yVmFsdWUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLCB2KTsKKyAgICByZXR1cm4ganNUeXBlU3RyaW5nRm9yVmFsdWUoY2FsbEZy
YW1lLT52bSgpLCBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgdik7CiB9CiAKIGJv
b2wganNJc09iamVjdFR5cGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdikKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHJldmlzaW9uIDE0
ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzMsMTMgKzMzLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBORVZFUl9J
TkxJTkUgSlNWYWx1ZSBqc0FkZFNsb3dDYXNlKENhbGxGcmFtZSosIEpTVmFsdWUsIEpTVmFsdWUp
OwogSlNWYWx1ZSBqc1R5cGVTdHJpbmdGb3JWYWx1ZShDYWxsRnJhbWUqLCBKU1ZhbHVlKTsKLUpT
VmFsdWUganNUeXBlU3RyaW5nRm9yVmFsdWUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlKTsKK0pTVmFsdWUganNUeXBlU3RyaW5nRm9yVmFsdWUoVk0mLCBKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUpOwogYm9vbCBqc0lzT2JqZWN0VHlwZShDYWxsRnJhbWUqLCBKU1ZhbHVl
KTsKIGJvb2wganNJc0Z1bmN0aW9uVHlwZShKU1ZhbHVlKTsKIAogQUxXQVlTX0lOTElORSBKU1Zh
bHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIp
CiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGgxID0gczEtPmxl
bmd0aCgpOwogICAgIGlmICghbGVuZ3RoMSkKQEAgLTUwLDM1ICs1MCwzNSBAQCBBTFdBWVNfSU5M
SU5FIEpTVmFsdWUganNTdHJpbmcoRXhlY1N0YXRlCiAgICAgaWYgKChsZW5ndGgxICsgbGVuZ3Ro
MikgPCBsZW5ndGgxKQogICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMp
OwogCi0gICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlKGdsb2JhbERhdGEsIHMxLCBzMik7
CisgICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlKHZtLCBzMSwgczIpOwogfQogCiBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcm
IHUxLCBjb25zdCBTdHJpbmcmIHUyLCBjb25zdCBTdHJpbmcmIHUzKQogewotICAgIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGgxID0gdTEubGVuZ3RoKCk7CiAgICAgdW5z
aWduZWQgbGVuZ3RoMiA9IHUyLmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIGxlbmd0aDMgPSB1My5s
ZW5ndGgoKTsKICAgICBpZiAoIWxlbmd0aDEpCi0gICAgICAgIHJldHVybiBqc1N0cmluZyhleGVj
LCBqc1N0cmluZyhnbG9iYWxEYXRhLCB1MiksIGpzU3RyaW5nKGdsb2JhbERhdGEsIHUzKSk7Cisg
ICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBqc1N0cmluZyh2bSwgdTIpLCBqc1N0cmluZyh2
bSwgdTMpKTsKICAgICBpZiAoIWxlbmd0aDIpCi0gICAgICAgIHJldHVybiBqc1N0cmluZyhleGVj
LCBqc1N0cmluZyhnbG9iYWxEYXRhLCB1MSksIGpzU3RyaW5nKGdsb2JhbERhdGEsIHUzKSk7Cisg
ICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBqc1N0cmluZyh2bSwgdTEpLCBqc1N0cmluZyh2
bSwgdTMpKTsKICAgICBpZiAoIWxlbmd0aDMpCi0gICAgICAgIHJldHVybiBqc1N0cmluZyhleGVj
LCBqc1N0cmluZyhnbG9iYWxEYXRhLCB1MSksIGpzU3RyaW5nKGdsb2JhbERhdGEsIHUyKSk7Cisg
ICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBqc1N0cmluZyh2bSwgdTEpLCBqc1N0cmluZyh2
bSwgdTIpKTsKIAogICAgIGlmICgobGVuZ3RoMSArIGxlbmd0aDIpIDwgbGVuZ3RoMSkKICAgICAg
ICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKICAgICBpZiAoKGxlbmd0aDEg
KyBsZW5ndGgyICsgbGVuZ3RoMykgPCBsZW5ndGgzKQogICAgICAgICByZXR1cm4gdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpOwogCi0gICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlKGV4
ZWMtPmdsb2JhbERhdGEoKSwganNTdHJpbmcoZ2xvYmFsRGF0YSwgdTEpLCBqc1N0cmluZyhnbG9i
YWxEYXRhLCB1MiksIGpzU3RyaW5nKGdsb2JhbERhdGEsIHUzKSk7CisgICAgcmV0dXJuIEpTUm9w
ZVN0cmluZzo6Y3JlYXRlKGV4ZWMtPnZtKCksIGpzU3RyaW5nKHZtLCB1MSksIGpzU3RyaW5nKHZt
LCB1MiksIGpzU3RyaW5nKHZtLCB1MykpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNT
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBSZWdpc3Rlciogc3RyaW5ncywgdW5zaWduZWQgY291bnQp
CiB7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsK
LSAgICBKU1JvcGVTdHJpbmc6OlJvcGVCdWlsZGVyIHJvcGVCdWlsZGVyKCpnbG9iYWxEYXRhKTsK
KyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBKU1JvcGVTdHJpbmc6OlJvcGVCdWlsZGVy
IHJvcGVCdWlsZGVyKCp2bSk7CiAKICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSAwOwogCkBAIC05
Niw4ICs5Niw4IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUKIAog
QUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3RyaW5nRnJvbUFyZ3VtZW50cyhFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9
ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgSlNSb3BlU3RyaW5nOjpSb3BlQnVpbGRlciByb3Bl
QnVpbGRlcigqZ2xvYmFsRGF0YSk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgSlNS
b3BlU3RyaW5nOjpSb3BlQnVpbGRlciByb3BlQnVpbGRlcigqdm0pOwogICAgIHJvcGVCdWlsZGVy
LmFwcGVuZCh0aGlzVmFsdWUudG9TdHJpbmcoZXhlYykpOwogCiAgICAgdW5zaWduZWQgb2xkTGVu
Z3RoID0gMDsKQEAgLTIzMCw5ICsyMzAsOSBAQCBpbmxpbmUgc2l6ZV90IG5vcm1hbGl6ZVByb3Rv
dHlwZUNoYWluRm9yCiAgICAgICAgIC8vIFNpbmNlIHdlJ3JlIGFjY2Vzc2luZyBhIHByb3RvdHlw
ZSBpbiBhIGxvb3AsIGl0J3MgYSBnb29kIGJldCB0aGF0IGl0CiAgICAgICAgIC8vIHNob3VsZCBu
b3QgYmUgdHJlYXRlZCBhcyBhIGRpY3Rpb25hcnkuCiAgICAgICAgIGlmIChjZWxsLT5zdHJ1Y3R1
cmUoKS0+aXNEaWN0aW9uYXJ5KCkpIHsKLSAgICAgICAgICAgIGFzT2JqZWN0KGNlbGwpLT5mbGF0
dGVuRGljdGlvbmFyeU9iamVjdChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSk7CisgICAgICAgICAg
ICBhc09iamVjdChjZWxsKS0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoY2FsbEZyYW1lLT52bSgp
KTsKICAgICAgICAgICAgIGlmIChzbG90QmFzZSA9PSBjZWxsKQotICAgICAgICAgICAgICAgIHNs
b3RPZmZzZXQgPSBjZWxsLT5zdHJ1Y3R1cmUoKS0+Z2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
LCBwcm9wZXJ0eU5hbWUpOyAKKyAgICAgICAgICAgICAgICBzbG90T2Zmc2V0ID0gY2VsbC0+c3Ry
dWN0dXJlKCktPmdldChjYWxsRnJhbWUtPnZtKCksIHByb3BlcnR5TmFtZSk7IAogICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgKytjb3VudDsKQEAgLTI1OCw3ICsyNTgsNyBAQCBpbmxp
bmUgc2l6ZV90IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKENhCiAgICAgICAgIC8vIFNpbmNlIHdl
J3JlIGFjY2Vzc2luZyBhIHByb3RvdHlwZSBpbiBhIGxvb3AsIGl0J3MgYSBnb29kIGJldCB0aGF0
IGl0CiAgICAgICAgIC8vIHNob3VsZCBub3QgYmUgdHJlYXRlZCBhcyBhIGRpY3Rpb25hcnkuCiAg
ICAgICAgIGlmIChiYXNlLT5zdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAg
ICBhc09iamVjdChiYXNlKS0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoY2FsbEZyYW1lLT5nbG9i
YWxEYXRhKCkpOworICAgICAgICAgICAgYXNPYmplY3QoYmFzZSktPmZsYXR0ZW5EaWN0aW9uYXJ5
T2JqZWN0KGNhbGxGcmFtZS0+dm0oKSk7CiAKICAgICAgICAgKytjb3VudDsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFz
aFRhYmxlLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDExICs3Nywx
MSBAQCBzdHJ1Y3QgUHJvcGVydHlNYXBFbnRyeSB7CiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsK
ICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBzcGVjaWZpY1ZhbHVlOwogCi0gICAgUHJvcGVydHlN
YXBFbnRyeShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFN0cmluZ0lt
cGwqIGtleSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0Nl
bGwqIHNwZWNpZmljVmFsdWUpCisgICAgUHJvcGVydHlNYXBFbnRyeShWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIFN0cmluZ0ltcGwqIGtleSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBh
dHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUpCiAgICAgICAgIDoga2V5KGtleSkKICAg
ICAgICAgLCBvZmZzZXQob2Zmc2V0KQogICAgICAgICAsIGF0dHJpYnV0ZXMoYXR0cmlidXRlcykK
LSAgICAgICAgLCBzcGVjaWZpY1ZhbHVlKGdsb2JhbERhdGEsIG93bmVyLCBzcGVjaWZpY1ZhbHVl
LCBXcml0ZUJhcnJpZXI8SlNDZWxsPjo6TWF5QmVOdWxsKQorICAgICAgICAsIHNwZWNpZmljVmFs
dWUodm0sIG93bmVyLCBzcGVjaWZpY1ZhbHVlLCBXcml0ZUJhcnJpZXI8SlNDZWxsPjo6TWF5QmVO
dWxsKQogICAgIHsKICAgICB9CiB9OwpAQCAtMTM1LDkgKzEzNSw5IEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oQ29tcG91bmRUeXBlLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuKSwgJnNfaW5mbyk7CisgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKENvbXBvdW5kVHlwZSwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiksICZzX2luZm8p
OwogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKQEAgLTE1NSw5ICsxNTUsOSBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBzdGQ6OnBh
aXI8VmFsdWVUeXBlKiwgdW5zaWduZWQ+IGZpbmRfaXRlcmF0b3I7CiAKICAgICAvLyBDb25zdHJ1
Y3RvciBpcyBwYXNzZWQgYW4gaW5pdGlhbCBjYXBhY2l0eSwgYSBQcm9wZXJ0eVRhYmxlIHRvIGNv
cHksIG9yIGJvdGguCi0gICAgc3RhdGljIFByb3BlcnR5VGFibGUqIGNyZWF0ZShKU0dsb2JhbERh
dGEmLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkpOwotICAgIHN0YXRpYyBQcm9wZXJ0eVRhYmxl
KiBjbG9uZShKU0dsb2JhbERhdGEmLCBKU0NlbGwqIG93bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxl
Jik7Ci0gICAgc3RhdGljIFByb3BlcnR5VGFibGUqIGNsb25lKEpTR2xvYmFsRGF0YSYsIEpTQ2Vs
bCogb3duZXIsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYp
OworICAgIHN0YXRpYyBQcm9wZXJ0eVRhYmxlKiBjcmVhdGUoVk0mLCB1bnNpZ25lZCBpbml0aWFs
Q2FwYWNpdHkpOworICAgIHN0YXRpYyBQcm9wZXJ0eVRhYmxlKiBjbG9uZShWTSYsIEpTQ2VsbCog
b3duZXIsIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAgICBzdGF0aWMgUHJvcGVydHlUYWJsZSog
Y2xvbmUoVk0mLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0
IFByb3BlcnR5VGFibGUmKTsKICAgICB+UHJvcGVydHlUYWJsZSgpOwogCiAgICAgLy8gT3JkZXJl
ZCBpdGVyYXRpb24gbWV0aG9kcy4KQEAgLTE5NCw3ICsxOTQsNyBAQCBwdWJsaWM6CiAgICAgUHJv
cGVydHlPZmZzZXQgbmV4dE9mZnNldChQcm9wZXJ0eU9mZnNldCBpbmxpbmVDYXBhY2l0eSk7CiAK
ICAgICAvLyBDb3B5IHRoaXMgUHJvcGVydHlUYWJsZSwgZW5zdXJpbmcgdGhlIGNvcHkgaGFzIGF0
IGxlYXN0IHRoZSBjYXBhY2l0eSBwcm92aWRlZC4KLSAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5KEpT
R2xvYmFsRGF0YSYsIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIG5ld0NhcGFjaXR5KTsKKyAgICBQ
cm9wZXJ0eVRhYmxlKiBjb3B5KFZNJiwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgbmV3Q2FwYWNp
dHkpOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIHNpemVfdCBzaXplSW5NZW1vcnkoKTsKQEAgLTIw
Miw5ICsyMDIsOSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBQcm9wZXJ0eVRh
YmxlKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSk7Ci0gICAgUHJvcGVy
dHlUYWJsZShKU0dsb2JhbERhdGEmLCBKU0NlbGwqLCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7Ci0g
ICAgUHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmLCBKU0NlbGwqLCB1bnNpZ25lZCBpbml0aWFs
Q2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAgICBQcm9wZXJ0eVRhYmxlKFZNJiwg
dW5zaWduZWQgaW5pdGlhbENhcGFjaXR5KTsKKyAgICBQcm9wZXJ0eVRhYmxlKFZNJiwgSlNDZWxs
KiwgY29uc3QgUHJvcGVydHlUYWJsZSYpOworICAgIFByb3BlcnR5VGFibGUoVk0mLCBKU0NlbGwq
LCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKIAogICAg
IFByb3BlcnR5VGFibGUoY29uc3QgUHJvcGVydHlUYWJsZSYpOwogICAgIC8vIFVzZWQgdG8gaW5z
ZXJ0IGEgdmFsdWUga25vd24gbm90IHRvIGJlIGluIHRoZSB0YWJsZSwgYW5kIHdoZXJlIHdlIGtu
b3cgY2FwYWNpdHkgdG8gYmUgYXZhaWxhYmxlLgpAQCAtNDUzLDE1ICs0NTMsMTUgQEAgaW5saW5l
IFByb3BlcnR5T2Zmc2V0IFByb3BlcnR5VGFibGU6Om5leAogICAgIHJldHVybiBvZmZzZXRGb3JQ
cm9wZXJ0eU51bWJlcihzaXplKCksIGlubGluZUNhcGFjaXR5KTsKIH0KIAotaW5saW5lIFByb3Bl
cnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0NlbGwqIG93bmVyLCB1bnNpZ25lZCBuZXdDYXBhY2l0eSkKK2lubGluZSBQcm9wZXJ0eVRhYmxl
KiBQcm9wZXJ0eVRhYmxlOjpjb3B5KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgbmV3
Q2FwYWNpdHkpCiB7CiAgICAgQVNTRVJUKG5ld0NhcGFjaXR5ID49IG1fa2V5Q291bnQpOwogCiAg
ICAgLy8gRmFzdCBjYXNlOyBpZiB0aGUgbmV3IHRhYmxlIHdpbGwgYmUgdGhlIHNhbWUgbV9pbmRl
eFNpemUgYXMgdGhpcyBvbmUsIHdlIGNhbiBtZW1jcHkgaXQsCiAgICAgLy8gc2F2ZSByZWhhc2hp
bmcgYWxsIGtleXMuCiAgICAgaWYgKHNpemVGb3JDYXBhY2l0eShuZXdDYXBhY2l0eSkgPT0gbV9p
bmRleFNpemUpCi0gICAgICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9uZShnbG9iYWxEYXRh
LCBvd25lciwgKnRoaXMpOwotICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9uZShnbG9iYWxE
YXRhLCBvd25lciwgbmV3Q2FwYWNpdHksICp0aGlzKTsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5
VGFibGU6OmNsb25lKHZtLCBvd25lciwgKnRoaXMpOworICAgIHJldHVybiBQcm9wZXJ0eVRhYmxl
OjpjbG9uZSh2bSwgb3duZXIsIG5ld0NhcGFjaXR5LCAqdGhpcyk7CiB9CiAKICNpZm5kZWYgTkRF
QlVHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJh
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5
TmFtZUFycmF5LmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgLy8gRklYTUU6IFJlbmFtZSB0byBQcm9wZXJ0eU5hbWVB
cnJheUJ1aWxkZXIuCiAgICAgY2xhc3MgUHJvcGVydHlOYW1lQXJyYXkgewogICAgIHB1YmxpYzoK
LSAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorICAg
ICAgICBQcm9wZXJ0eU5hbWVBcnJheShWTSogdm0pCiAgICAgICAgICAgICA6IG1fZGF0YShQcm9w
ZXJ0eU5hbWVBcnJheURhdGE6OmNyZWF0ZSgpKQotICAgICAgICAgICAgLCBtX2dsb2JhbERhdGEo
Z2xvYmFsRGF0YSkKKyAgICAgICAgICAgICwgbV92bSh2bSkKICAgICAgICAgICAgICwgbV9udW1D
YWNoZWFibGVTbG90cygwKQogICAgICAgICAgICAgLCBtX2Jhc2VPYmplY3QoMCkKICAgICAgICAg
ewpAQCAtNjIsMTcgKzYyLDE3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFByb3BlcnR5
TmFtZUFycmF5KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgIDogbV9kYXRhKFByb3BlcnR5
TmFtZUFycmF5RGF0YTo6Y3JlYXRlKCkpCi0gICAgICAgICAgICAsIG1fZ2xvYmFsRGF0YSgmZXhl
Yy0+Z2xvYmFsRGF0YSgpKQorICAgICAgICAgICAgLCBtX3ZtKCZleGVjLT52bSgpKQogICAgICAg
ICAgICAgLCBtX251bUNhY2hlYWJsZVNsb3RzKDApCiAgICAgICAgICAgICAsIG1fYmFzZU9iamVj
dCgwKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEoKSB7IHJldHVybiBtX2dsb2JhbERhdGE7IH0KKyAgICAgICAgVk0qIHZtKCkgeyByZXR1
cm4gbV92bTsgfQogCiAgICAgICAgIHZvaWQgYWRkKGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZp
ZXIpIHsgYWRkKGlkZW50aWZpZXIuaW1wbCgpKTsgfQogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGFkZChTdHJpbmdJbXBsKik7Ci0gICAgICAgIHZvaWQgYWRkS25vd25VbmlxdWUoU3Ry
aW5nSW1wbCogaWRlbnRpZmllcikgeyBtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpLmFwcGVu
ZChJZGVudGlmaWVyKG1fZ2xvYmFsRGF0YSwgaWRlbnRpZmllcikpOyB9CisgICAgICAgIHZvaWQg
YWRkS25vd25VbmlxdWUoU3RyaW5nSW1wbCogaWRlbnRpZmllcikgeyBtX2RhdGEtPnByb3BlcnR5
TmFtZVZlY3RvcigpLmFwcGVuZChJZGVudGlmaWVyKG1fdm0sIGlkZW50aWZpZXIpKTsgfQogCiAg
ICAgICAgIElkZW50aWZpZXImIG9wZXJhdG9yW10odW5zaWduZWQgaSkgeyByZXR1cm4gbV9kYXRh
LT5wcm9wZXJ0eU5hbWVWZWN0b3IoKVtpXTsgfQogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBv
cGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+cHJvcGVydHlOYW1l
VmVjdG9yKClbaV07IH0KQEAgLTEwNiw3ICsxMDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICBSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPiBtX2RhdGE7CiAgICAgICAgIElkZW50
aWZpZXJTZXQgbV9zZXQ7Ci0gICAgICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworICAg
ICAgICBWTSogbV92bTsKICAgICAgICAgc2l6ZV90IG1fbnVtQ2FjaGVhYmxlU2xvdHM7CiAgICAg
ICAgIEpTT2JqZWN0KiBtX2Jhc2VPYmplY3Q7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCShyZXZpc2lvbiAxNDg2ODMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUsMjkgKzM1LDI5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBD
bGFzc0luZm8gUHJvcGVydHlUYWJsZTo6c19pbmZvID0geyAiUHJvcGVydHlUYWJsZSIsIDAsIDAs
IDAsIENSRUFURV9NRVRIT0RfVEFCTEUoUHJvcGVydHlUYWJsZSkgfTsKIAotUHJvcGVydHlUYWJs
ZSogUHJvcGVydHlUYWJsZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWdu
ZWQgaW5pdGlhbENhcGFjaXR5KQorUHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJsZTo6Y3JlYXRl
KFZNJiB2bSwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5KQogewotICAgIFByb3BlcnR5VGFibGUq
IHRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvcGVydHlUYWJsZT4oZ2xvYmFs
RGF0YS5oZWFwKSkgUHJvcGVydHlUYWJsZShnbG9iYWxEYXRhLCBpbml0aWFsQ2FwYWNpdHkpOwot
ICAgIHRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBQcm9wZXJ0eVRhYmxl
KiB0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb3BlcnR5VGFibGU+KHZtLmhl
YXApKSBQcm9wZXJ0eVRhYmxlKHZtLCBpbml0aWFsQ2FwYWNpdHkpOworICAgIHRhYmxlLT5maW5p
c2hDcmVhdGlvbih2bSk7CiAgICAgcmV0dXJuIHRhYmxlOwogfQogCi1Qcm9wZXJ0eVRhYmxlKiBQ
cm9wZXJ0eVRhYmxlOjpjbG9uZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3du
ZXIsIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQorUHJvcGVydHlUYWJsZSogUHJvcGVydHlU
YWJsZTo6Y2xvbmUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBv
dGhlcikKIHsKLSAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPFByb3BlcnR5VGFibGU+KGdsb2JhbERhdGEuaGVhcCkpIFByb3BlcnR5VGFibGUoZ2xv
YmFsRGF0YSwgb3duZXIsIG90aGVyKTsKLSAgICB0YWJsZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSk7CisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxQcm9wZXJ0eVRhYmxlPih2bS5oZWFwKSkgUHJvcGVydHlUYWJsZSh2bSwgb3duZXIsIG90
aGVyKTsKKyAgICB0YWJsZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiB0YWJsZTsK
IH0KIAotUHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJsZTo6Y2xvbmUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0
IFByb3BlcnR5VGFibGUmIG90aGVyKQorUHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJsZTo6Y2xv
bmUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0
IFByb3BlcnR5VGFibGUmIG90aGVyKQogewotICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvcGVydHlUYWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkg
UHJvcGVydHlUYWJsZShnbG9iYWxEYXRhLCBvd25lciwgaW5pdGlhbENhcGFjaXR5LCBvdGhlcik7
Ci0gICAgdGFibGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIFByb3BlcnR5VGFi
bGUqIHRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvcGVydHlUYWJsZT4odm0u
aGVhcCkpIFByb3BlcnR5VGFibGUodm0sIG93bmVyLCBpbml0aWFsQ2FwYWNpdHksIG90aGVyKTsK
KyAgICB0YWJsZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiB0YWJsZTsKIH0KIAot
UHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVu
c2lnbmVkIGluaXRpYWxDYXBhY2l0eSkKLSAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxE
YXRhLnByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuZ2V0KCkpCitQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0
eVRhYmxlKFZNJiB2bSwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5KQorICAgIDogSlNDZWxsKHZt
LCB2bS5wcm9wZXJ0eVRhYmxlU3RydWN0dXJlLmdldCgpKQogICAgICwgbV9pbmRleFNpemUoc2l6
ZUZvckNhcGFjaXR5KGluaXRpYWxDYXBhY2l0eSkpCiAgICAgLCBtX2luZGV4TWFzayhtX2luZGV4
U2l6ZSAtIDEpCiAgICAgLCBtX2luZGV4KHN0YXRpY19jYXN0PHVuc2lnbmVkKj4oZmFzdFplcm9l
ZE1hbGxvYyhkYXRhU2l6ZSgpKSkpCkBAIC02Nyw4ICs2Nyw4IEBAIFByb3BlcnR5VGFibGU6OlBy
b3BlcnR5VGFibGUoSlNHbG9iYWxEYXQKICAgICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4U2l6
ZSkpOwogfQogCi1Qcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNDZWxsKiBvd25lciwgY29uc3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCi0gICAg
OiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5wcm9wZXJ0eVRhYmxlU3RydWN0dXJlLmdl
dCgpKQorUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQorICAgIDogSlNDZWxsKHZtLCB2bS5wcm9wZXJ0
eVRhYmxlU3RydWN0dXJlLmdldCgpKQogICAgICwgbV9pbmRleFNpemUob3RoZXIubV9pbmRleFNp
emUpCiAgICAgLCBtX2luZGV4TWFzayhvdGhlci5tX2luZGV4TWFzaykKICAgICAsIG1faW5kZXgo
c3RhdGljX2Nhc3Q8dW5zaWduZWQqPihmYXN0TWFsbG9jKGRhdGFTaXplKCkpKSkKQEAgLTkxLDgg
KzkxLDggQEAgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdAogICAgICAg
ICBtX2RlbGV0ZWRPZmZzZXRzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4o
Km90aGVyRGVsZXRlZE9mZnNldHMpKTsKIH0KIAotUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJs
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIGluaXRp
YWxDYXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCi0gICAgOiBKU0NlbGwoZ2xv
YmFsRGF0YSwgZ2xvYmFsRGF0YS5wcm9wZXJ0eVRhYmxlU3RydWN0dXJlLmdldCgpKQorUHJvcGVy
dHlUYWJsZTo6UHJvcGVydHlUYWJsZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIGlu
aXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCisgICAgOiBKU0NlbGwo
dm0sIHZtLnByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX2luZGV4U2l6ZShz
aXplRm9yQ2FwYWNpdHkoaW5pdGlhbENhcGFjaXR5KSkKICAgICAsIG1faW5kZXhNYXNrKG1faW5k
ZXhTaXplIC0gMSkKICAgICAsIG1faW5kZXgoc3RhdGljX2Nhc3Q8dW5zaWduZWQqPihmYXN0WmVy
b2VkTWFsbG9jKGRhdGFTaXplKCkpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3RvdHlwZU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvdG90eXBlTWFwLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdG90eXBlTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjIsNyArNjIsNyBAQCBTdHJ1Y3R1cmUqIFByb3RvdHlwZU1hcDo6ZW1wdHlPYmplY3RTdHJ1CiAK
ICAgICBhZGRQcm90b3R5cGUocHJvdG90eXBlKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IEpTRmluYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgKLSAgICAgICAgcHJvdG90eXBlLT5nbG9i
YWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpLCBwcm90
b3R5cGUsIGlubGluZUNhcGFjaXR5KTsKKyAgICAgICAgcHJvdG90eXBlLT5nbG9iYWxPYmplY3Qo
KS0+dm0oKSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSwgcHJvdG90eXBlLCBpbmxpbmVDYXBh
Y2l0eSk7CiAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHN0cnVjdHVyZTsKICAgICBy
ZXR1cm4gc3RydWN0dXJlOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHAuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsOCArMjE3LDggQEAgdm9pZCBS
ZWdFeHBGdW5jdGlvbmFsVGVzdENvbGxlY3Rvcjo6b3V0cAogfQogI2VuZGlmCiAKLVJlZ0V4cDo6
UmVnRXhwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgU3RyaW5nJiBwYXR0ZXJuU3Ry
aW5nLCBSZWdFeHBGbGFncyBmbGFncykKLSAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxE
YXRhLnJlZ0V4cFN0cnVjdHVyZS5nZXQoKSkKK1JlZ0V4cDo6UmVnRXhwKFZNJiB2bSwgY29uc3Qg
U3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBSZWdFeHBGbGFncyBmbGFncykKKyAgICA6IEpTQ2VsbCh2
bSwgdm0ucmVnRXhwU3RydWN0dXJlLmdldCgpKQogICAgICwgbV9zdGF0ZShOb3RDb21waWxlZCkK
ICAgICAsIG1fcGF0dGVyblN0cmluZyhwYXR0ZXJuU3RyaW5nKQogICAgICwgbV9mbGFncyhmbGFn
cykKQEAgLTIzMSw5ICsyMzEsOSBAQCBSZWdFeHA6OlJlZ0V4cChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsCiB7CiB9CiAKLXZvaWQgUmVnRXhwOjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCit2b2lkIFJlZ0V4cDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewotICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICBZYXJyOjpZYXJyUGF0dGVybiBwYXR0ZXJuKG1fcGF0dGVyblN0cmluZywg
aWdub3JlQ2FzZSgpLCBtdWx0aWxpbmUoKSwgJm1fY29uc3RydWN0aW9uRXJyb3IpOwogICAgIGlm
IChtX2NvbnN0cnVjdGlvbkVycm9yKQogICAgICAgICBtX3N0YXRlID0gUGFyc2VFcnJvcjsKQEAg
LTI1MCwxOSArMjUwLDE5IEBAIHZvaWQgUmVnRXhwOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKICAg
ICB0aGlzT2JqZWN0LT5SZWdFeHA6On5SZWdFeHAoKTsKIH0KIAotUmVnRXhwKiBSZWdFeHA6OmNy
ZWF0ZVdpdGhvdXRDYWNoaW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgU3RyaW5n
JiBwYXR0ZXJuU3RyaW5nLCBSZWdFeHBGbGFncyBmbGFncykKK1JlZ0V4cCogUmVnRXhwOjpjcmVh
dGVXaXRob3V0Q2FjaGluZyhWTSYgdm0sIGNvbnN0IFN0cmluZyYgcGF0dGVyblN0cmluZywgUmVn
RXhwRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgUmVnRXhwKiByZWdFeHAgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxSZWdFeHA+KGdsb2JhbERhdGEuaGVhcCkpIFJlZ0V4cChnbG9iYWxEYXRhLCBw
YXR0ZXJuU3RyaW5nLCBmbGFncyk7Ci0gICAgcmVnRXhwLT5maW5pc2hDcmVhdGlvbihnbG9iYWxE
YXRhKTsKKyAgICBSZWdFeHAqIHJlZ0V4cCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFJl
Z0V4cD4odm0uaGVhcCkpIFJlZ0V4cCh2bSwgcGF0dGVyblN0cmluZywgZmxhZ3MpOworICAgIHJl
Z0V4cC0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiByZWdFeHA7CiB9CiAKLVJlZ0V4
cCogUmVnRXhwOjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTdHJpbmcm
IHBhdHRlcm5TdHJpbmcsIFJlZ0V4cEZsYWdzIGZsYWdzKQorUmVnRXhwKiBSZWdFeHA6OmNyZWF0
ZShWTSYgdm0sIGNvbnN0IFN0cmluZyYgcGF0dGVyblN0cmluZywgUmVnRXhwRmxhZ3MgZmxhZ3Mp
CiB7Ci0gICAgcmV0dXJuIGdsb2JhbERhdGEucmVnRXhwQ2FjaGUoKS0+bG9va3VwT3JDcmVhdGUo
cGF0dGVyblN0cmluZywgZmxhZ3MpOworICAgIHJldHVybiB2bS5yZWdFeHBDYWNoZSgpLT5sb29r
dXBPckNyZWF0ZShwYXR0ZXJuU3RyaW5nLCBmbGFncyk7CiB9CiAKLXZvaWQgUmVnRXhwOjpjb21w
aWxlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgWWFycjo6WWFyckNoYXJTaXplIGNoYXJTaXpl
KQordm9pZCBSZWdFeHA6OmNvbXBpbGUoVk0qIHZtLCBZYXJyOjpZYXJyQ2hhclNpemUgY2hhclNp
emUpCiB7CiAgICAgWWFycjo6WWFyclBhdHRlcm4gcGF0dGVybihtX3BhdHRlcm5TdHJpbmcsIGln
bm9yZUNhc2UoKSwgbXVsdGlsaW5lKCksICZtX2NvbnN0cnVjdGlvbkVycm9yKTsKICAgICBpZiAo
bV9jb25zdHJ1Y3Rpb25FcnJvcikgewpAQCAtMjc0LDEzICsyNzQsMTMgQEAgdm9pZCBSZWdFeHA6
OmNvbXBpbGUoSlNHbG9iYWxEYXRhKiBnbG9iYQogCiAgICAgaWYgKCFoYXNDb2RlKCkpIHsKICAg
ICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gTm90Q29tcGlsZWQpOwotICAgICAgICBnbG9iYWxEYXRh
LT5yZWdFeHBDYWNoZSgpLT5hZGRUb1N0cm9uZ0NhY2hlKHRoaXMpOworICAgICAgICB2bS0+cmVn
RXhwQ2FjaGUoKS0+YWRkVG9TdHJvbmdDYWNoZSh0aGlzKTsKICAgICAgICAgbV9zdGF0ZSA9IEJ5
dGVDb2RlOwogICAgIH0KIAogI2lmIEVOQUJMRShZQVJSX0pJVCkKLSAgICBpZiAoIXBhdHRlcm4u
bV9jb250YWluc0JhY2tyZWZlcmVuY2VzICYmIGdsb2JhbERhdGEtPmNhblVzZVJlZ0V4cEpJVCgp
KSB7Ci0gICAgICAgIFlhcnI6OmppdENvbXBpbGUocGF0dGVybiwgY2hhclNpemUsIGdsb2JhbERh
dGEsIG1fcmVnRXhwSklUQ29kZSk7CisgICAgaWYgKCFwYXR0ZXJuLm1fY29udGFpbnNCYWNrcmVm
ZXJlbmNlcyAmJiB2bS0+Y2FuVXNlUmVnRXhwSklUKCkpIHsKKyAgICAgICAgWWFycjo6aml0Q29t
cGlsZShwYXR0ZXJuLCBjaGFyU2l6ZSwgdm0sIG1fcmVnRXhwSklUQ29kZSk7CiAjaWYgRU5BQkxF
KFlBUlJfSklUX0RFQlVHKQogICAgICAgICBpZiAoIW1fcmVnRXhwSklUQ29kZS5pc0ZhbGxCYWNr
KCkpCiAgICAgICAgICAgICBtX3N0YXRlID0gSklUQ29kZTsKQEAgLTI5NywxMCArMjk3LDEwIEBA
IHZvaWQgUmVnRXhwOjpjb21waWxlKEpTR2xvYmFsRGF0YSogZ2xvYmEKICAgICBVTlVTRURfUEFS
QU0oY2hhclNpemUpOwogI2VuZGlmCiAKLSAgICBtX3JlZ0V4cEJ5dGVjb2RlID0gWWFycjo6Ynl0
ZUNvbXBpbGUocGF0dGVybiwgJmdsb2JhbERhdGEtPm1fcmVnRXhwQWxsb2NhdG9yKTsKKyAgICBt
X3JlZ0V4cEJ5dGVjb2RlID0gWWFycjo6Ynl0ZUNvbXBpbGUocGF0dGVybiwgJnZtLT5tX3JlZ0V4
cEFsbG9jYXRvcik7CiB9CiAKLXZvaWQgUmVnRXhwOjpjb21waWxlSWZOZWNlc3NhcnkoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBZYXJyOjpZYXJyQ2hhclNpemUgY2hhclNpemUpCit2b2lkIFJl
Z0V4cDo6Y29tcGlsZUlmTmVjZXNzYXJ5KFZNJiB2bSwgWWFycjo6WWFyckNoYXJTaXplIGNoYXJT
aXplKQogewogICAgIGlmIChoYXNDb2RlKCkpIHsKICNpZiBFTkFCTEUoWUFSUl9KSVQpCkBAIC0z
MTUsMTcgKzMxNSwxNyBAQCB2b2lkIFJlZ0V4cDo6Y29tcGlsZUlmTmVjZXNzYXJ5KEpTR2xvYmFs
CiAjZW5kaWYKICAgICB9CiAKLSAgICBjb21waWxlKCZnbG9iYWxEYXRhLCBjaGFyU2l6ZSk7Cisg
ICAgY29tcGlsZSgmdm0sIGNoYXJTaXplKTsKIH0KIAotaW50IFJlZ0V4cDo6bWF0Y2goSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
LCBWZWN0b3I8aW50LCAzMj4mIG92ZWN0b3IpCitpbnQgUmVnRXhwOjptYXRjaChWTSYgdm0sIGNv
bnN0IFN0cmluZyYgcywgdW5zaWduZWQgc3RhcnRPZmZzZXQsIFZlY3RvcjxpbnQsIDMyPiYgb3Zl
Y3RvcikKIHsKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCiAgICAgbV9ydE1hdGNoQ2FsbENv
dW50Kys7CiAjZW5kaWYKIAogICAgIEFTU0VSVChtX3N0YXRlICE9IFBhcnNlRXJyb3IpOwotICAg
IGNvbXBpbGVJZk5lY2Vzc2FyeShnbG9iYWxEYXRhLCBzLmlzOEJpdCgpID8gWWFycjo6Q2hhcjgg
OiBZYXJyOjpDaGFyMTYpOworICAgIGNvbXBpbGVJZk5lY2Vzc2FyeSh2bSwgcy5pczhCaXQoKSA/
IFlhcnI6OkNoYXI4IDogWWFycjo6Q2hhcjE2KTsKIAogICAgIGludCBvZmZzZXRWZWN0b3JTaXpl
ID0gKG1fbnVtU3VicGF0dGVybnMgKyAxKSAqIDI7CiAgICAgb3ZlY3Rvci5yZXNpemUob2Zmc2V0
VmVjdG9yU2l6ZSk7CkBAIC0zODQsNyArMzg0LDcgQEAgaW50IFJlZ0V4cDo6bWF0Y2goSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUmVnRXhwOjpj
b21waWxlTWF0Y2hPbmx5KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgWWFycjo6WWFyckNoYXJT
aXplIGNoYXJTaXplKQordm9pZCBSZWdFeHA6OmNvbXBpbGVNYXRjaE9ubHkoVk0qIHZtLCBZYXJy
OjpZYXJyQ2hhclNpemUgY2hhclNpemUpCiB7CiAgICAgWWFycjo6WWFyclBhdHRlcm4gcGF0dGVy
bihtX3BhdHRlcm5TdHJpbmcsIGlnbm9yZUNhc2UoKSwgbXVsdGlsaW5lKCksICZtX2NvbnN0cnVj
dGlvbkVycm9yKTsKICAgICBpZiAobV9jb25zdHJ1Y3Rpb25FcnJvcikgewpAQCAtMzk2LDEzICsz
OTYsMTMgQEAgdm9pZCBSZWdFeHA6OmNvbXBpbGVNYXRjaE9ubHkoSlNHbG9iYWxEYQogCiAgICAg
aWYgKCFoYXNDb2RlKCkpIHsKICAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gTm90Q29tcGlsZWQp
OwotICAgICAgICBnbG9iYWxEYXRhLT5yZWdFeHBDYWNoZSgpLT5hZGRUb1N0cm9uZ0NhY2hlKHRo
aXMpOworICAgICAgICB2bS0+cmVnRXhwQ2FjaGUoKS0+YWRkVG9TdHJvbmdDYWNoZSh0aGlzKTsK
ICAgICAgICAgbV9zdGF0ZSA9IEJ5dGVDb2RlOwogICAgIH0KIAogI2lmIEVOQUJMRShZQVJSX0pJ
VCkKLSAgICBpZiAoIXBhdHRlcm4ubV9jb250YWluc0JhY2tyZWZlcmVuY2VzICYmIGdsb2JhbERh
dGEtPmNhblVzZVJlZ0V4cEpJVCgpKSB7Ci0gICAgICAgIFlhcnI6OmppdENvbXBpbGUocGF0dGVy
biwgY2hhclNpemUsIGdsb2JhbERhdGEsIG1fcmVnRXhwSklUQ29kZSwgWWFycjo6TWF0Y2hPbmx5
KTsKKyAgICBpZiAoIXBhdHRlcm4ubV9jb250YWluc0JhY2tyZWZlcmVuY2VzICYmIHZtLT5jYW5V
c2VSZWdFeHBKSVQoKSkgeworICAgICAgICBZYXJyOjpqaXRDb21waWxlKHBhdHRlcm4sIGNoYXJT
aXplLCB2bSwgbV9yZWdFeHBKSVRDb2RlLCBZYXJyOjpNYXRjaE9ubHkpOwogI2lmIEVOQUJMRShZ
QVJSX0pJVF9ERUJVRykKICAgICAgICAgaWYgKCFtX3JlZ0V4cEpJVENvZGUuaXNGYWxsQmFjaygp
KQogICAgICAgICAgICAgbV9zdGF0ZSA9IEpJVENvZGU7CkBAIC00MTksMTAgKzQxOSwxMCBAQCB2
b2lkIFJlZ0V4cDo6Y29tcGlsZU1hdGNoT25seShKU0dsb2JhbERhCiAgICAgVU5VU0VEX1BBUkFN
KGNoYXJTaXplKTsKICNlbmRpZgogCi0gICAgbV9yZWdFeHBCeXRlY29kZSA9IFlhcnI6OmJ5dGVD
b21waWxlKHBhdHRlcm4sICZnbG9iYWxEYXRhLT5tX3JlZ0V4cEFsbG9jYXRvcik7CisgICAgbV9y
ZWdFeHBCeXRlY29kZSA9IFlhcnI6OmJ5dGVDb21waWxlKHBhdHRlcm4sICZ2bS0+bV9yZWdFeHBB
bGxvY2F0b3IpOwogfQogCi12b2lkIFJlZ0V4cDo6Y29tcGlsZUlmTmVjZXNzYXJ5TWF0Y2hPbmx5
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgWWFycjo6WWFyckNoYXJTaXplIGNoYXJTaXplKQor
dm9pZCBSZWdFeHA6OmNvbXBpbGVJZk5lY2Vzc2FyeU1hdGNoT25seShWTSYgdm0sIFlhcnI6Ollh
cnJDaGFyU2l6ZSBjaGFyU2l6ZSkKIHsKICAgICBpZiAoaGFzQ29kZSgpKSB7CiAjaWYgRU5BQkxF
KFlBUlJfSklUKQpAQCAtNDM3LDE3ICs0MzcsMTcgQEAgdm9pZCBSZWdFeHA6OmNvbXBpbGVJZk5l
Y2Vzc2FyeU1hdGNoT25seQogI2VuZGlmCiAgICAgfQogCi0gICAgY29tcGlsZU1hdGNoT25seSgm
Z2xvYmFsRGF0YSwgY2hhclNpemUpOworICAgIGNvbXBpbGVNYXRjaE9ubHkoJnZtLCBjaGFyU2l6
ZSk7CiB9CiAKLU1hdGNoUmVzdWx0IFJlZ0V4cDo6bWF0Y2goSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KQorTWF0Y2hSZXN1bHQg
UmVnRXhwOjptYXRjaChWTSYgdm0sIGNvbnN0IFN0cmluZyYgcywgdW5zaWduZWQgc3RhcnRPZmZz
ZXQpCiB7CiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQogICAgIG1fcnRNYXRjaENhbGxDb3Vu
dCsrOwogI2VuZGlmCiAKICAgICBBU1NFUlQobV9zdGF0ZSAhPSBQYXJzZUVycm9yKTsKLSAgICBj
b21waWxlSWZOZWNlc3NhcnlNYXRjaE9ubHkoZ2xvYmFsRGF0YSwgcy5pczhCaXQoKSA/IFlhcnI6
OkNoYXI4IDogWWFycjo6Q2hhcjE2KTsKKyAgICBjb21waWxlSWZOZWNlc3NhcnlNYXRjaE9ubHko
dm0sIHMuaXM4Qml0KCkgPyBZYXJyOjpDaGFyOCA6IFlhcnI6OkNoYXIxNik7CiAKICNpZiBFTkFC
TEUoWUFSUl9KSVQpCiAgICAgaWYgKG1fc3RhdGUgPT0gSklUQ29kZSkgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3
ICszOCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHN0cnVjdCBSZWdFeHBSZXByZXNlbnRh
dGlvbjsKLSAgICBjbGFzcyBKU0dsb2JhbERhdGE7CisgICAgY2xhc3MgVk07CiAKICAgICBKU19F
WFBPUlRfUFJJVkFURSBSZWdFeHBGbGFncyByZWdFeHBGbGFncyhjb25zdCBTdHJpbmcmKTsKIApA
QCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHR5
cGVkZWYgSlNDZWxsIEJhc2U7CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJl
Z0V4cCogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFN0cmluZyYgcGF0dGVybiwgUmVnRXhw
RmxhZ3MpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVnRXhwKiBjcmVhdGUo
Vk0mLCBjb25zdCBTdHJpbmcmIHBhdHRlcm4sIFJlZ0V4cEZsYWdzKTsKICAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsKICAgICAgICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0NlbGwqKTsKQEAgLTYwLDggKzYwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuICFtX2NvbnN0cnVjdGlvbkVycm9yICYm
IG1fZmxhZ3MgIT0gSW52YWxpZEZsYWdzOyB9CiAgICAgICAgIGNvbnN0IGNoYXIqIGVycm9yTWVz
c2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RydWN0aW9uRXJyb3I7IH0KIAotICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBpbnQgbWF0Y2goSlNHbG9iYWxEYXRhJiwgY29uc3QgU3RyaW5nJiwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIFZlY3RvcjxpbnQsIDMyPiYgb3ZlY3Rvcik7Ci0gICAgICAg
IE1hdGNoUmVzdWx0IG1hdGNoKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgaW50IG1hdGNoKFZNJiwg
Y29uc3QgU3RyaW5nJiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIFZlY3RvcjxpbnQsIDMyPiYgb3Zl
Y3Rvcik7CisgICAgICAgIE1hdGNoUmVzdWx0IG1hdGNoKFZNJiwgY29uc3QgU3RyaW5nJiwgdW5z
aWduZWQgc3RhcnRPZmZzZXQpOwogICAgICAgICB1bnNpZ25lZCBudW1TdWJwYXR0ZXJucygpIGNv
bnN0IHsgcmV0dXJuIG1fbnVtU3VicGF0dGVybnM7IH0KIAogICAgICAgICBib29sIGhhc0NvZGUo
KQpAQCAtNzUsOSArNzUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBwcmludFRy
YWNlRGF0YSgpOwogI2VuZGlmCiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKExlYWZUeXBl
LCAwKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhMZWFmVHlwZSwgMCksICZzX2luZm8p
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNf
aW5mbzsKQEAgLTg1LDEzICs4NSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnRXhw
S2V5IGtleSgpIHsgcmV0dXJuIFJlZ0V4cEtleShtX2ZsYWdzLCBtX3BhdHRlcm5TdHJpbmcpOyB9
CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxE
YXRhJik7CisgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBSZWdFeHBDYWNoZTsKLSAgICAgICAgUmVnRXhwKEpTR2xv
YmFsRGF0YSYsIGNvbnN0IFN0cmluZyYsIFJlZ0V4cEZsYWdzKTsKKyAgICAgICAgUmVnRXhwKFZN
JiwgY29uc3QgU3RyaW5nJiwgUmVnRXhwRmxhZ3MpOwogCi0gICAgICAgIHN0YXRpYyBSZWdFeHAq
IGNyZWF0ZVdpdGhvdXRDYWNoaW5nKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFN0cmluZyYsIFJlZ0V4
cEZsYWdzKTsKKyAgICAgICAgc3RhdGljIFJlZ0V4cCogY3JlYXRlV2l0aG91dENhY2hpbmcoVk0m
LCBjb25zdCBTdHJpbmcmLCBSZWdFeHBGbGFncyk7CiAKICAgICAgICAgZW51bSBSZWdFeHBTdGF0
ZSB7CiAgICAgICAgICAgICBQYXJzZUVycm9yLApAQCAtMTAwLDExICsxMDAsMTEgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBOb3RDb21waWxlZAogICAgICAgICB9IG1fc3RhdGU7CiAK
LSAgICAgICAgdm9pZCBjb21waWxlKEpTR2xvYmFsRGF0YSosIFlhcnI6OllhcnJDaGFyU2l6ZSk7
Ci0gICAgICAgIHZvaWQgY29tcGlsZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYsIFlhcnI6Ollh
cnJDaGFyU2l6ZSk7CisgICAgICAgIHZvaWQgY29tcGlsZShWTSosIFlhcnI6OllhcnJDaGFyU2l6
ZSk7CisgICAgICAgIHZvaWQgY29tcGlsZUlmTmVjZXNzYXJ5KFZNJiwgWWFycjo6WWFyckNoYXJT
aXplKTsKIAotICAgICAgICB2b2lkIGNvbXBpbGVNYXRjaE9ubHkoSlNHbG9iYWxEYXRhKiwgWWFy
cjo6WWFyckNoYXJTaXplKTsKLSAgICAgICAgdm9pZCBjb21waWxlSWZOZWNlc3NhcnlNYXRjaE9u
bHkoSlNHbG9iYWxEYXRhJiwgWWFycjo6WWFyckNoYXJTaXplKTsKKyAgICAgICAgdm9pZCBjb21w
aWxlTWF0Y2hPbmx5KFZNKiwgWWFycjo6WWFyckNoYXJTaXplKTsKKyAgICAgICAgdm9pZCBjb21w
aWxlSWZOZWNlc3NhcnlNYXRjaE9ubHkoVk0mLCBZYXJyOjpZYXJyQ2hhclNpemUpOwogCiAjaWYg
RU5BQkxFKFlBUlJfSklUX0RFQlVHKQogICAgICAgICB2b2lkIG1hdGNoQ29tcGFyZVdpdGhJbnRl
cnByZXRlcihjb25zdCBTdHJpbmcmLCBpbnQgc3RhcnRPZmZzZXQsIGludCogb2Zmc2V0VmVjdG9y
LCBpbnQgaml0UmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBDYWNoZS5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTggKzQx
LDE4IEBAIFJlZ0V4cCogUmVnRXhwQ2FjaGU6Omxvb2t1cE9yQ3JlYXRlKGNvbnMKICAgICBpZiAo
UmVnRXhwKiByZWdFeHAgPSBtX3dlYWtDYWNoZS5nZXQoa2V5KSkKICAgICAgICAgcmV0dXJuIHJl
Z0V4cDsKIAotICAgIFJlZ0V4cCogcmVnRXhwID0gUmVnRXhwOjpjcmVhdGVXaXRob3V0Q2FjaGlu
ZygqbV9nbG9iYWxEYXRhLCBwYXR0ZXJuU3RyaW5nLCBmbGFncyk7CisgICAgUmVnRXhwKiByZWdF
eHAgPSBSZWdFeHA6OmNyZWF0ZVdpdGhvdXRDYWNoaW5nKCptX3ZtLCBwYXR0ZXJuU3RyaW5nLCBm
bGFncyk7CiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQotICAgIG1fZ2xvYmFsRGF0YS0+YWRk
UmVnRXhwVG9UcmFjZShyZWdFeHApOworICAgIG1fdm0tPmFkZFJlZ0V4cFRvVHJhY2UocmVnRXhw
KTsKICNlbmRpZgogCiAgICAgd2Vha0FkZChtX3dlYWtDYWNoZSwga2V5LCBQYXNzV2VhazxSZWdF
eHA+KHJlZ0V4cCwgdGhpcykpOwogICAgIHJldHVybiByZWdFeHA7CiB9CiAKLVJlZ0V4cENhY2hl
OjpSZWdFeHBDYWNoZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitSZWdFeHBDYWNoZTo6UmVn
RXhwQ2FjaGUoVk0qIHZtKQogICAgIDogbV9uZXh0RW50cnlJblN0cm9uZ0NhY2hlKDApCi0gICAg
LCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKKyAgICAsIG1fdm0odm0pCiB7CiB9CiAKQEAgLTY4
LDcgKzY4LDcgQEAgdm9pZCBSZWdFeHBDYWNoZTo6YWRkVG9TdHJvbmdDYWNoZShSZWdFeAogICAg
IFN0cmluZyBwYXR0ZXJuID0gcmVnRXhwLT5wYXR0ZXJuKCk7CiAgICAgaWYgKHBhdHRlcm4ubGVu
Z3RoKCkgPiBtYXhTdHJvbmdDYWNoZWFibGVQYXR0ZXJuTGVuZ3RoKQogICAgICAgICByZXR1cm47
Ci0gICAgbV9zdHJvbmdDYWNoZVttX25leHRFbnRyeUluU3Ryb25nQ2FjaGVdLnNldCgqbV9nbG9i
YWxEYXRhLCByZWdFeHApOworICAgIG1fc3Ryb25nQ2FjaGVbbV9uZXh0RW50cnlJblN0cm9uZ0Nh
Y2hlXS5zZXQoKm1fdm0sIHJlZ0V4cCk7CiAgICAgbV9uZXh0RW50cnlJblN0cm9uZ0NhY2hlKys7
CiAgICAgaWYgKG1fbmV4dEVudHJ5SW5TdHJvbmdDYWNoZSA9PSBtYXhTdHJvbmdDYWNoZWFibGVF
bnRyaWVzKQogICAgICAgICBtX25leHRFbnRyeUluU3Ryb25nQ2FjaGUgPSAwOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oCShyZXZpc2lvbiAxNDg2
ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIGZyaWVuZCBjbGFzcyBSZWdFeHA7CiB0eXBlZGVm
IEhhc2hNYXA8UmVnRXhwS2V5LCBXZWFrPFJlZ0V4cD4gPiBSZWdFeHBDYWNoZU1hcDsKIAogcHVi
bGljOgotICAgIFJlZ0V4cENhY2hlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSk7CisgICAgUmVn
RXhwQ2FjaGUoVk0qIHZtKTsKICAgICB2b2lkIGludmFsaWRhdGVDb2RlKCk7CiAKIHByaXZhdGU6
CkBAIC01OSw3ICs1OSw3IEBAIHByaXZhdGU6CiAgICAgUmVnRXhwQ2FjaGVNYXAgbV93ZWFrQ2Fj
aGU7IC8vIEhvbGRzIGFsbCByZWd1bGFyIGV4cHJlc3Npb25zIGN1cnJlbnRseSBsaXZlLgogICAg
IGludCBtX25leHRFbnRyeUluU3Ryb25nQ2FjaGU7CiAgICAgV1RGOjpGaXhlZEFycmF5PFN0cm9u
ZzxSZWdFeHA+LCBtYXhTdHJvbmdDYWNoZWFibGVFbnRyaWVzPiBtX3N0cm9uZ0NhY2hlOyAvLyBI
b2xkcyBhIHNlbGVjdCBmZXcgcmVndWxhciBleHByZXNzaW9ucyB0aGF0IGhhdmUgY29tcGlsZWQg
YW5kIGV4ZWN1dGVkCi0gICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CisgICAgVk0qIG1f
dm07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcAkocmV2aXNpb24gMTQ4
NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIsOCBAQCB2b2lkIFJlZ0V4cENhY2hlZFJl
c3VsdDo6dmlzaXRDaGlsZHJlbihTCiBSZWdFeHBNYXRjaGVzQXJyYXkqIFJlZ0V4cENhY2hlZFJl
c3VsdDo6bGFzdFJlc3VsdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvd25lcikKIHsKICAg
ICBpZiAobV9yZXN1bHQpIHsKLSAgICAgICAgbV9yZWlmaWVkSW5wdXQuc2V0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgb3duZXIsIG1fbGFzdElucHV0LmdldCgpKTsKLSAgICAgICAgbV9yZWlmaWVkUmVz
dWx0LnNldChleGVjLT5nbG9iYWxEYXRhKCksIG93bmVyLCBSZWdFeHBNYXRjaGVzQXJyYXk6OmNy
ZWF0ZShleGVjLCBtX2xhc3RJbnB1dC5nZXQoKSwgbV9sYXN0UmVnRXhwLmdldCgpLCBtX3Jlc3Vs
dCkpOworICAgICAgICBtX3JlaWZpZWRJbnB1dC5zZXQoZXhlYy0+dm0oKSwgb3duZXIsIG1fbGFz
dElucHV0LmdldCgpKTsKKyAgICAgICAgbV9yZWlmaWVkUmVzdWx0LnNldChleGVjLT52bSgpLCBv
d25lciwgUmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVhdGUoZXhlYywgbV9sYXN0SW5wdXQuZ2V0KCks
IG1fbGFzdFJlZ0V4cC5nZXQoKSwgbV9yZXN1bHQpKTsKICAgICAgICAgbV9yZXN1bHQgPSBNYXRj
aFJlc3VsdDo6ZmFpbGVkKCk7CiAgICAgfQogICAgIHJldHVybiBtX3JlaWZpZWRSZXN1bHQuZ2V0
KCk7CkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgUmVnRXhwQ2FjaGVkUmVzdWx0OjpzZXRJbnB1dChF
eGVjU3QKICAgICAvLyBNYWtlIHN1cmUgd2UncmUgcmVpZmllZCwgb3RoZXJ3aXNlIG1fcmVpZmll
ZElucHV0IHdpbGwgYmUgaWdub3JlZC4KICAgICBsYXN0UmVzdWx0KGV4ZWMsIG93bmVyKTsKICAg
ICBBU1NFUlQoIW1fcmVzdWx0KTsKLSAgICBtX3JlaWZpZWRJbnB1dC5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBvd25lciwgaW5wdXQpOworICAgIG1fcmVpZmllZElucHV0LnNldChleGVjLT52bSgp
LCBvd25lciwgaW5wdXQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5oCShyZXZp
c2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNo
ZWRSZXN1bHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTcgKzQ0LDE3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIC8vIG1fcmVpZmllZFJlc3VsdCBhbmQgbV9yZWlmaWVkSW5wdXQgaG9sZCB0aGUg
Y2FjaGVkIHJlc3VsdHMuCiAgICAgY2xhc3MgUmVnRXhwQ2FjaGVkUmVzdWx0IHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIFJlZ0V4cENhY2hlZFJlc3VsdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpTT2JqZWN0KiBvd25lciwgUmVnRXhwKiBlbXB0eVJlZ0V4cCkKKyAgICAgICAgUmVnRXhwQ2Fj
aGVkUmVzdWx0KFZNJiB2bSwgSlNPYmplY3QqIG93bmVyLCBSZWdFeHAqIGVtcHR5UmVnRXhwKQog
ICAgICAgICAgICAgOiBtX3Jlc3VsdCgwLCAwKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2xh
c3RJbnB1dC5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIGpzRW1wdHlTdHJpbmcoJmdsb2JhbERhdGEp
KTsKLSAgICAgICAgICAgIG1fbGFzdFJlZ0V4cC5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIGVtcHR5
UmVnRXhwKTsKKyAgICAgICAgICAgIG1fbGFzdElucHV0LnNldCh2bSwgb3duZXIsIGpzRW1wdHlT
dHJpbmcoJnZtKSk7CisgICAgICAgICAgICBtX2xhc3RSZWdFeHAuc2V0KHZtLCBvd25lciwgZW1w
dHlSZWdFeHApOwogICAgICAgICB9CiAKLSAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHJlY29y
ZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTT2JqZWN0KiBvd25lciwgUmVnRXhwKiByZWdF
eHAsIEpTU3RyaW5nKiBpbnB1dCwgTWF0Y2hSZXN1bHQgcmVzdWx0KQorICAgICAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgcmVjb3JkKFZNJiB2bSwgSlNPYmplY3QqIG93bmVyLCBSZWdFeHAqIHJlZ0V4
cCwgSlNTdHJpbmcqIGlucHV0LCBNYXRjaFJlc3VsdCByZXN1bHQpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIG1fbGFzdFJlZ0V4cC5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHJlZ0V4cCk7Ci0gICAg
ICAgICAgICBtX2xhc3RJbnB1dC5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIGlucHV0KTsKKyAgICAg
ICAgICAgIG1fbGFzdFJlZ0V4cC5zZXQodm0sIG93bmVyLCByZWdFeHApOworICAgICAgICAgICAg
bV9sYXN0SW5wdXQuc2V0KHZtLCBvd25lciwgaW5wdXQpOwogICAgICAgICAgICAgbV9yZXN1bHQg
PSByZXN1bHQ7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NCwyMSArODQsMjEgQEAgY29uc3QgQ2xhc3NJbmZvIFJlZ0V4cENvbnN0
cnVjdG9yOjpzX2luZgogCiBSZWdFeHBDb25zdHJ1Y3Rvcjo6UmVnRXhwQ29uc3RydWN0b3IoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZ0V4cFBy
b3RvdHlwZSogcmVnRXhwUHJvdG90eXBlKQogICAgIDogSW50ZXJuYWxGdW5jdGlvbihnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSkKLSAgICAsIG1fY2FjaGVkUmVzdWx0KGdsb2JhbE9iamVjdC0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCByZWdFeHBQcm90b3R5cGUtPnJlZ0V4cCgpKQorICAgICwgbV9jYWNo
ZWRSZXN1bHQoZ2xvYmFsT2JqZWN0LT52bSgpLCB0aGlzLCByZWdFeHBQcm90b3R5cGUtPnJlZ0V4
cCgpKQogICAgICwgbV9tdWx0aWxpbmUoZmFsc2UpCiB7CiB9CiAKIHZvaWQgUmVnRXhwQ29uc3Ry
dWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgUmVnRXhwUHJvdG90eXBlKiBy
ZWdFeHBQcm90b3R5cGUpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFs
RGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJSZWdFeHAiKS5zdHJpbmcoKSk7CisgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiUmVnRXhwIikuc3Ry
aW5nKCkpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiAKICAgICAvLyBFQ01BIDE1
LjEwLjUuMSBSZWdFeHAucHJvdG90eXBlCi0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCByZWdF
eHBQcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
cHJvdG90eXBlLCByZWdFeHBQcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRP
bmx5KTsKIAogICAgIC8vIG5vLiBvZiBhcmd1bWVudHMgZm9yIGNvbnN0cnVjdG9yCi0gICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigyKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9u
dEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDIpLCBSZWFkT25seSB8IERvbnREZWxl
dGUgfCBEb250RW51bSk7CiB9CiAKIHZvaWQgUmVnRXhwQ29uc3RydWN0b3I6OmRlc3Ryb3koSlND
ZWxsKiBjZWxsKQpAQCAtMjgzLDcgKzI4Myw3IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RSZWdFeHAo
RXhlY1N0YXRlKiBleGUKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0
ZVN5bnRheEVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBmbGFncyBzdXBwbGllZCB0
byBSZWdFeHAgY29uc3RydWN0b3IuIikpKTsKICAgICB9CiAKLSAgICBSZWdFeHAqIHJlZ0V4cCA9
IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcGF0dGVybiwgZmxhZ3MpOworICAg
IFJlZ0V4cCogcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+dm0oKSwgcGF0dGVybiwgZmxh
Z3MpOwogICAgIGlmICghcmVnRXhwLT5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsIHJlZ0V4cC0+ZXJyb3JNZXNzYWdlKCkp
KTsKICAgICByZXR1cm4gUmVnRXhwT2JqZWN0OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLCBnbG9iYWxPYmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1
Y3Rvci5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0Myw5IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOwogICAgICAgICB9
CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2Vs
bCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7
CkBAIC01NSw4ICs1NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBjb25z
dCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIE1hdGNoUmVzdWx0IHBlcmZvcm1NYXRjaChK
U0dsb2JhbERhdGEmLCBSZWdFeHAqLCBKU1N0cmluZyosIGNvbnN0IFN0cmluZyYsIGludCBzdGFy
dE9mZnNldCwgaW50Kiogb3ZlY3Rvcik7Ci0gICAgICAgIE1hdGNoUmVzdWx0IHBlcmZvcm1NYXRj
aChKU0dsb2JhbERhdGEmLCBSZWdFeHAqLCBKU1N0cmluZyosIGNvbnN0IFN0cmluZyYsIGludCBz
dGFydE9mZnNldCk7CisgICAgICAgIE1hdGNoUmVzdWx0IHBlcmZvcm1NYXRjaChWTSYsIFJlZ0V4
cCosIEpTU3RyaW5nKiwgY29uc3QgU3RyaW5nJiwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQqKiBvdmVj
dG9yKTsKKyAgICAgICAgTWF0Y2hSZXN1bHQgcGVyZm9ybU1hdGNoKFZNJiwgUmVnRXhwKiwgSlNT
dHJpbmcqLCBjb25zdCBTdHJpbmcmLCBpbnQgc3RhcnRPZmZzZXQpOwogCiAgICAgICAgIHZvaWQg
c2V0TXVsdGlsaW5lKGJvb2wgbXVsdGlsaW5lKSB7IG1fbXVsdGlsaW5lID0gbXVsdGlsaW5lOyB9
CiAgICAgICAgIGJvb2wgbXVsdGlsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9tdWx0aWxpbmU7IH0K
QEAgLTEwMSw5ICsxMDEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgIGV4cHJlc3Npb24gbWF0
Y2hpbmcgdGhyb3VnaCB0aGUgcGVyZm9ybU1hdGNoIGZ1bmN0aW9uLiBXZSB1c2UgY2FjaGVkIHJl
c3VsdHMgdG8gY2FsY3VsYXRlLCAKICAgICAgIGUuZy4sIFJlZ0V4cC5sYXN0TWF0Y2ggYW5kIFJl
Z0V4cC5sZWZ0UGFyZW4uCiAgICAgKi8KLSAgICBBTFdBWVNfSU5MSU5FIE1hdGNoUmVzdWx0IFJl
Z0V4cENvbnN0cnVjdG9yOjpwZXJmb3JtTWF0Y2goSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBS
ZWdFeHAqIHJlZ0V4cCwgSlNTdHJpbmcqIHN0cmluZywgY29uc3QgU3RyaW5nJiBpbnB1dCwgaW50
IHN0YXJ0T2Zmc2V0LCBpbnQqKiBvdmVjdG9yKQorICAgIEFMV0FZU19JTkxJTkUgTWF0Y2hSZXN1
bHQgUmVnRXhwQ29uc3RydWN0b3I6OnBlcmZvcm1NYXRjaChWTSYgdm0sIFJlZ0V4cCogcmVnRXhw
LCBKU1N0cmluZyogc3RyaW5nLCBjb25zdCBTdHJpbmcmIGlucHV0LCBpbnQgc3RhcnRPZmZzZXQs
IGludCoqIG92ZWN0b3IpCiAgICAgewotICAgICAgICBpbnQgcG9zaXRpb24gPSByZWdFeHAtPm1h
dGNoKGdsb2JhbERhdGEsIGlucHV0LCBzdGFydE9mZnNldCwgbV9vdmVjdG9yKTsKKyAgICAgICAg
aW50IHBvc2l0aW9uID0gcmVnRXhwLT5tYXRjaCh2bSwgaW5wdXQsIHN0YXJ0T2Zmc2V0LCBtX292
ZWN0b3IpOwogCiAgICAgICAgIGlmIChvdmVjdG9yKQogICAgICAgICAgICAgKm92ZWN0b3IgPSBt
X292ZWN0b3IuZGF0YSgpOwpAQCAtMTE2LDE1ICsxMTYsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIEFTU0VSVChtX292ZWN0b3JbMV0gPj0gcG9zaXRpb24pOwogICAgICAgICBzaXplX3Qg
ZW5kID0gbV9vdmVjdG9yWzFdOwogCi0gICAgICAgIG1fY2FjaGVkUmVzdWx0LnJlY29yZChnbG9i
YWxEYXRhLCB0aGlzLCByZWdFeHAsIHN0cmluZywgTWF0Y2hSZXN1bHQocG9zaXRpb24sIGVuZCkp
OworICAgICAgICBtX2NhY2hlZFJlc3VsdC5yZWNvcmQodm0sIHRoaXMsIHJlZ0V4cCwgc3RyaW5n
LCBNYXRjaFJlc3VsdChwb3NpdGlvbiwgZW5kKSk7CiAKICAgICAgICAgcmV0dXJuIE1hdGNoUmVz
dWx0KHBvc2l0aW9uLCBlbmQpOwogICAgIH0KLSAgICBBTFdBWVNfSU5MSU5FIE1hdGNoUmVzdWx0
IFJlZ0V4cENvbnN0cnVjdG9yOjpwZXJmb3JtTWF0Y2goSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBSZWdFeHAqIHJlZ0V4cCwgSlNTdHJpbmcqIHN0cmluZywgY29uc3QgU3RyaW5nJiBpbnB1dCwg
aW50IHN0YXJ0T2Zmc2V0KQorICAgIEFMV0FZU19JTkxJTkUgTWF0Y2hSZXN1bHQgUmVnRXhwQ29u
c3RydWN0b3I6OnBlcmZvcm1NYXRjaChWTSYgdm0sIFJlZ0V4cCogcmVnRXhwLCBKU1N0cmluZyog
c3RyaW5nLCBjb25zdCBTdHJpbmcmIGlucHV0LCBpbnQgc3RhcnRPZmZzZXQpCiAgICAgewotICAg
ICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSByZWdFeHAtPm1hdGNoKGdsb2JhbERhdGEsIGlucHV0
LCBzdGFydE9mZnNldCk7CisgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IHJlZ0V4cC0+bWF0
Y2godm0sIGlucHV0LCBzdGFydE9mZnNldCk7CiAgICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAg
ICAgICBtX2NhY2hlZFJlc3VsdC5yZWNvcmQoZ2xvYmFsRGF0YSwgdGhpcywgcmVnRXhwLCBzdHJp
bmcsIHJlc3VsdCk7CisgICAgICAgICAgICBtX2NhY2hlZFJlc3VsdC5yZWNvcmQodm0sIHRoaXMs
IHJlZ0V4cCwgc3RyaW5nLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBN
YXRjaGVzQXJyYXkuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywy
OCArMzMsMjggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBSZWdFeHBNYXRj
aGVzQXJyYXk6OnNfaW5mbyA9IHsiQXJyYXkiLCAmSlNBcnJheTo6c19pbmZvLCAwLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKFJlZ0V4cE1hdGNoZXNBcnJheSl9OwogCi1SZWdFeHBNYXRjaGVzQXJy
YXk6OlJlZ0V4cE1hdGNoZXNBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEJ1dHRlcmZs
eSogYnV0dGVyZmx5LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogaW5w
dXQsIFJlZ0V4cCogcmVnRXhwLCBNYXRjaFJlc3VsdCByZXN1bHQpCi0gICAgOiBKU0FycmF5KGds
b2JhbERhdGEsIGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCksIGJ1
dHRlcmZseSkKK1JlZ0V4cE1hdGNoZXNBcnJheTo6UmVnRXhwTWF0Y2hlc0FycmF5KFZNJiB2bSwg
QnV0dGVyZmx5KiBidXR0ZXJmbHksIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3Ry
aW5nKiBpbnB1dCwgUmVnRXhwKiByZWdFeHAsIE1hdGNoUmVzdWx0IHJlc3VsdCkKKyAgICA6IEpT
QXJyYXkodm0sIGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCksIGJ1
dHRlcmZseSkKICAgICAsIG1fcmVzdWx0KHJlc3VsdCkKICAgICAsIG1fc3RhdGUoUmVpZmllZE5v
bmUpCiB7Ci0gICAgbV9pbnB1dC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaW5wdXQpOwotICAgIG1f
cmVnRXhwLnNldChnbG9iYWxEYXRhLCB0aGlzLCByZWdFeHApOworICAgIG1faW5wdXQuc2V0KHZt
LCB0aGlzLCBpbnB1dCk7CisgICAgbV9yZWdFeHAuc2V0KHZtLCB0aGlzLCByZWdFeHApOwogfQog
CiBSZWdFeHBNYXRjaGVzQXJyYXkqIFJlZ0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRlKEV4ZWNTdGF0
ZSogZXhlYywgSlNTdHJpbmcqIGlucHV0LCBSZWdFeHAqIHJlZ0V4cCwgTWF0Y2hSZXN1bHQgcmVz
dWx0KQogewogICAgIEFTU0VSVChyZXN1bHQpOwotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGNyZWF0
ZUFycmF5QnV0dGVyZmx5KGdsb2JhbERhdGEsIHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSArIDEp
OwotICAgIFJlZ0V4cE1hdGNoZXNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxSZWdFeHBNYXRjaGVzQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIFJlZ0V4cE1hdGNoZXNB
cnJheShnbG9iYWxEYXRhLCBidXR0ZXJmbHksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
aW5wdXQsIHJlZ0V4cCwgcmVzdWx0KTsKLSAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5KHZtLCByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkgKyAx
KTsKKyAgICBSZWdFeHBNYXRjaGVzQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8UmVnRXhwTWF0Y2hlc0FycmF5Pih2bS5oZWFwKSkgUmVnRXhwTWF0Y2hlc0FycmF5KHZt
LCBidXR0ZXJmbHksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgaW5wdXQsIHJlZ0V4cCwg
cmVzdWx0KTsKKyAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiBhcnJh
eTsKIH0KIAotdm9pZCBSZWdFeHBNYXRjaGVzQXJyYXk6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgUmVnRXhwTWF0Y2hlc0FycmF5OjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogfQogCiB2b2lkIFJlZ0V4cE1hdGNoZXNBcnJheTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtNzgs
NyArNzgsNyBAQCB2b2lkIFJlZ0V4cE1hdGNoZXNBcnJheTo6cmVpZnlBbGxQcm9wZXJ0CiAKICAg
ICBpZiAodW5zaWduZWQgbnVtU3VicGF0dGVybnMgPSBtX3JlZ0V4cC0+bnVtU3VicGF0dGVybnMo
KSkgewogICAgICAgICBWZWN0b3I8aW50LCAzMj4gc3VicGF0dGVyblJlc3VsdHM7Ci0gICAgICAg
IGludCBwb3NpdGlvbiA9IG1fcmVnRXhwLT5tYXRjaChleGVjLT5nbG9iYWxEYXRhKCksIG1faW5w
dXQtPnZhbHVlKGV4ZWMpLCBtX3Jlc3VsdC5zdGFydCwgc3VicGF0dGVyblJlc3VsdHMpOworICAg
ICAgICBpbnQgcG9zaXRpb24gPSBtX3JlZ0V4cC0+bWF0Y2goZXhlYy0+dm0oKSwgbV9pbnB1dC0+
dmFsdWUoZXhlYyksIG1fcmVzdWx0LnN0YXJ0LCBzdWJwYXR0ZXJuUmVzdWx0cyk7CiAgICAgICAg
IEFTU0VSVF9VTlVTRUQocG9zaXRpb24sIHBvc2l0aW9uID49IDAgJiYgc3RhdGljX2Nhc3Q8c2l6
ZV90Pihwb3NpdGlvbikgPT0gbV9yZXN1bHQuc3RhcnQpOwogICAgICAgICBBU1NFUlQobV9yZXN1
bHQuc3RhcnQgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdWJwYXR0ZXJuUmVzdWx0c1swXSkpOwog
ICAgICAgICBBU1NFUlQobV9yZXN1bHQuZW5kID09IHN0YXRpY19jYXN0PHNpemVfdD4oc3VicGF0
dGVyblJlc3VsdHNbMV0pKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cE1hdGNoZXNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNyArMjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFJlZ0V4cE1h
dGNoZXNBcnJheSA6IHB1YmxpYyBKU0FycmF5IHsKICAgICBwcml2YXRlOgotICAgICAgICBSZWdF
eHBNYXRjaGVzQXJyYXkoSlNHbG9iYWxEYXRhJiwgQnV0dGVyZmx5KiwgSlNHbG9iYWxPYmplY3Qq
LCBKU1N0cmluZyosIFJlZ0V4cCosIE1hdGNoUmVzdWx0KTsKKyAgICAgICAgUmVnRXhwTWF0Y2hl
c0FycmF5KFZNJiwgQnV0dGVyZmx5KiwgSlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyosIFJlZ0V4
cCosIE1hdGNoUmVzdWx0KTsKIAogICAgICAgICBlbnVtIFJlaWZpZWRTdGF0ZSB7IFJlaWZpZWRO
b25lLCBSZWlmaWVkTWF0Y2gsIFJlaWZpZWRBbGwgfTsKIApAQCAtNDIsMTUgKzQyLDE1IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwog
Ci0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlKQorICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8sIEFycmF5V2l0aEFycmF5U3RvcmFnZSk7CisgICAgICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIEFycmF5V2l0aEFycmF5U3RvcmFnZSk7
CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNHbG9iYWxEYXRhJik7CisgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
IAogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVz
R2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9uIDE0
ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY0LDggKzY0LDggQEAgY29uc3QgQ2xhc3NJbmZvIFJlZ0V4cE9i
amVjdDo6c19pbmZvID0gewogKi8KIAogUmVnRXhwT2JqZWN0OjpSZWdFeHBPYmplY3QoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZ0V4cCogcmVn
RXhwKQotICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwg
c3RydWN0dXJlKQotICAgICwgbV9yZWdFeHAoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIHRo
aXMsIHJlZ0V4cCkKKyAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBz
dHJ1Y3R1cmUpCisgICAgLCBtX3JlZ0V4cChnbG9iYWxPYmplY3QtPnZtKCksIHRoaXMsIHJlZ0V4
cCkKICAgICAsIG1fbGFzdEluZGV4SXNXcml0YWJsZSh0cnVlKQogewogICAgIG1fbGFzdEluZGV4
LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNOdW1iZXIoMCkpOwpAQCAtNzMsNyArNzMsNyBAQCBS
ZWdFeHBPYmplY3Q6OlJlZ0V4cE9iamVjdChKU0dsb2JhbE9iamVjCiAKIHZvaWQgUmVnRXhwT2Jq
ZWN0OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKTsKKyAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwogICAgIEFTU0VSVChpbmhl
cml0cygmc19pbmZvKSk7CiB9CiAKQEAgLTMxNSw5ICszMTUsOSBAQCBNYXRjaFJlc3VsdCBSZWdF
eHBPYmplY3Q6Om1hdGNoKEV4ZWNTdGF0CiAgICAgUmVnRXhwKiByZWdFeHAgPSB0aGlzLT5yZWdF
eHAoKTsKICAgICBSZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhwQ29uc3RydWN0b3IgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cENvbnN0cnVjdG9yKCk7CiAgICAgU3RyaW5nIGlu
cHV0ID0gc3RyaW5nLT52YWx1ZShleGVjKTsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEg
PSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBpZiAo
IXJlZ0V4cC0+Z2xvYmFsKCkpCi0gICAgICAgIHJldHVybiByZWdFeHBDb25zdHJ1Y3Rvci0+cGVy
Zm9ybU1hdGNoKGdsb2JhbERhdGEsIHJlZ0V4cCwgc3RyaW5nLCBpbnB1dCwgMCk7CisgICAgICAg
IHJldHVybiByZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9ybU1hdGNoKHZtLCByZWdFeHAsIHN0cmlu
ZywgaW5wdXQsIDApOwogCiAgICAgSlNWYWx1ZSBqc0xhc3RJbmRleCA9IGdldExhc3RJbmRleCgp
OwogICAgIHVuc2lnbmVkIGxhc3RJbmRleDsKQEAgLTMzNiw3ICszMzYsNyBAQCBNYXRjaFJlc3Vs
dCBSZWdFeHBPYmplY3Q6Om1hdGNoKEV4ZWNTdGF0CiAgICAgICAgIGxhc3RJbmRleCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihkb3VibGVMYXN0SW5kZXgpOwogICAgIH0KIAotICAgIE1hdGNoUmVz
dWx0IHJlc3VsdCA9IHJlZ0V4cENvbnN0cnVjdG9yLT5wZXJmb3JtTWF0Y2goZ2xvYmFsRGF0YSwg
cmVnRXhwLCBzdHJpbmcsIGlucHV0LCBsYXN0SW5kZXgpOworICAgIE1hdGNoUmVzdWx0IHJlc3Vs
dCA9IHJlZ0V4cENvbnN0cnVjdG9yLT5wZXJmb3JtTWF0Y2godm0sIHJlZ0V4cCwgc3RyaW5nLCBp
bnB1dCwgbGFzdEluZGV4KTsKICAgICBzZXRMYXN0SW5kZXgoZXhlYywgcmVzdWx0LmVuZCk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTQgKzM3
LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGljIFJlZ0V4cE9iamVjdCogY3JlYXRlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFJlZ0V4cCogcmVnRXhwKQorICAgICAgICBzdGF0aWMgUmVnRXhwT2Jq
ZWN0KiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUmVnRXhwKiByZWdFeHApCiAgICAgICAgIHsKLSAgICAgICAgICAgIFJl
Z0V4cE9iamVjdCogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UmVnRXhwT2Jq
ZWN0PihnbG9iYWxEYXRhLmhlYXApKSBSZWdFeHBPYmplY3QoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUsIHJlZ0V4cCk7CisgICAgICAgICAgICBSZWdFeHBPYmplY3QqIG9iamVjdCA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPFJlZ0V4cE9iamVjdD4odm0uaGVhcCkpIFJlZ0V4cE9iamVjdChn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcmVnRXhwKTsKICAgICAgICAgICAgIG9iamVjdC0+Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAg
ICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldFJlZ0V4cChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFJlZ0V4cCogcikgeyBtX3JlZ0V4cC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgcik7IH0KKyAg
ICAgICAgdm9pZCBzZXRSZWdFeHAoVk0mIHZtLCBSZWdFeHAqIHIpIHsgbV9yZWdFeHAuc2V0KHZt
LCB0aGlzLCByKTsgfQogICAgICAgICBSZWdFeHAqIHJlZ0V4cCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVnRXhwLmdldCgpOyB9CiAKICAgICAgICAgdm9pZCBzZXRMYXN0SW5kZXgoRXhlY1N0YXRlKiBl
eGVjLCBzaXplX3QgbGFzdEluZGV4KQpAQCAtNTgsNyArNTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBzZXRMYXN0SW5kZXgoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGxhc3RJ
bmRleCwgYm9vbCBzaG91bGRUaHJvdykKICAgICAgICAgewogICAgICAgICAgICAgaWYgKExJS0VM
WShtX2xhc3RJbmRleElzV3JpdGFibGUpKQotICAgICAgICAgICAgICAgIG1fbGFzdEluZGV4LnNl
dChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGxhc3RJbmRleCk7CisgICAgICAgICAgICAgICAg
bV9sYXN0SW5kZXguc2V0KGV4ZWMtPnZtKCksIHRoaXMsIGxhc3RJbmRleCk7CiAgICAgICAgICAg
ICBlbHNlIGlmIChzaG91bGRUaHJvdykKICAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihl
eGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwogICAgICAgICB9CkBA
IC03Niw5ICs3Niw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBKU19FWFBP
UlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgICAgICB9CiAK
ICAgICBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMCwxMyArMTIwLDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJv
dG8KICAgICAgICAgICAgIGlmIChmbGFncyA9PSBJbnZhbGlkRmxhZ3MpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCBBU0NJ
SUxpdGVyYWwoIkludmFsaWQgZmxhZ3Mgc3VwcGxpZWQgdG8gUmVnRXhwIGNvbnN0cnVjdG9yLiIp
KSk7CiAgICAgICAgIH0KLSAgICAgICAgcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBwYXR0ZXJuLCBmbGFncyk7CisgICAgICAgIHJlZ0V4cCA9IFJlZ0V4cDo6Y3Jl
YXRlKGV4ZWMtPnZtKCksIHBhdHRlcm4sIGZsYWdzKTsKICAgICB9CiAKICAgICBpZiAoIXJlZ0V4
cC0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVN5
bnRheEVycm9yKGV4ZWMsIHJlZ0V4cC0+ZXJyb3JNZXNzYWdlKCkpKTsKIAotICAgIGFzUmVnRXhw
T2JqZWN0KHRoaXNWYWx1ZSktPnNldFJlZ0V4cChleGVjLT5nbG9iYWxEYXRhKCksIHJlZ0V4cCk7
CisgICAgYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+c2V0UmVnRXhwKGV4ZWMtPnZtKCksIHJl
Z0V4cCk7CiAgICAgYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+c2V0TGFzdEluZGV4KGV4ZWMs
IDApOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuaAko
cmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDkgKzM5LDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAot
ICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAm
c19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
JnNfaW5mbyk7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAkocmV2aXNpb24gMTQ4Njgz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODEsMTAgKzgxLDEwIEBAIFNtYWxsU3RyaW5nczo6U21hbGxTdHJpbmdz
KCkKICAgICAgICAgbV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzW2ldID0gMDsKIH0KIAotdm9pZCBT
bWFsbFN0cmluZ3M6OmluaXRpYWxpemVDb21tb25TdHJpbmdzKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKK3ZvaWQgU21hbGxTdHJpbmdzOjppbml0aWFsaXplQ29tbW9uU3RyaW5ncyhWTSYgdm0p
CiB7Ci0gICAgY3JlYXRlRW1wdHlTdHJpbmcoJmdsb2JhbERhdGEpOwotI2RlZmluZSBKU0NfQ09N
TU9OX1NUUklOR1NfQVRUUklCVVRFX0lOSVRJQUxJWkUobmFtZSkgaW5pdGlhbGl6ZSgmZ2xvYmFs
RGF0YSwgbV8jI25hbWUsICNuYW1lKTsKKyAgICBjcmVhdGVFbXB0eVN0cmluZygmdm0pOworI2Rl
ZmluZSBKU0NfQ09NTU9OX1NUUklOR1NfQVRUUklCVVRFX0lOSVRJQUxJWkUobmFtZSkgaW5pdGlh
bGl6ZSgmdm0sIG1fIyNuYW1lLCAjbmFtZSk7CiAgICAgSlNDX0NPTU1PTl9TVFJJTkdTX0VBQ0hf
TkFNRShKU0NfQ09NTU9OX1NUUklOR1NfQVRUUklCVVRFX0lOSVRJQUxJWkUpCiAjdW5kZWYgSlND
X0NPTU1PTl9TVFJJTkdTX0FUVFJJQlVURV9JTklUSUFMSVpFCiB9CkBAIC0xMDgsMTggKzEwOCwx
OCBAQCB2b2lkIFNtYWxsU3RyaW5nczo6ZmluYWxpemVTbWFsbFN0cmluZ3MoCiAgICAgICAgIGZp
bmFsaXplKG1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tpXSk7CiB9CiAKLXZvaWQgU21hbGxTdHJp
bmdzOjpjcmVhdGVFbXB0eVN0cmluZyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCit2b2lkIFNt
YWxsU3RyaW5nczo6Y3JlYXRlRW1wdHlTdHJpbmcoVk0qIHZtKQogewogICAgIEFTU0VSVCghbV9l
bXB0eVN0cmluZyk7Ci0gICAgbV9lbXB0eVN0cmluZyA9IEpTU3RyaW5nOjpjcmVhdGVIYXNPdGhl
ck93bmVyKCpnbG9iYWxEYXRhLCBTdHJpbmdJbXBsOjplbXB0eSgpKTsKKyAgICBtX2VtcHR5U3Ry
aW5nID0gSlNTdHJpbmc6OmNyZWF0ZUhhc090aGVyT3duZXIoKnZtLCBTdHJpbmdJbXBsOjplbXB0
eSgpKTsKIH0KIAotdm9pZCBTbWFsbFN0cmluZ3M6OmNyZWF0ZVNpbmdsZUNoYXJhY3RlclN0cmlu
ZyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyKQordm9p
ZCBTbWFsbFN0cmluZ3M6OmNyZWF0ZVNpbmdsZUNoYXJhY3RlclN0cmluZyhWTSogdm0sIHVuc2ln
bmVkIGNoYXIgY2hhcmFjdGVyKQogewogICAgIGlmICghbV9zdG9yYWdlKQogICAgICAgICBtX3N0
b3JhZ2UgPSBhZG9wdFB0cihuZXcgU21hbGxTdHJpbmdzU3RvcmFnZSk7CiAgICAgQVNTRVJUKCFt
X3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbY2hhcmFjdGVyXSk7Ci0gICAgbV9zaW5nbGVDaGFyYWN0
ZXJTdHJpbmdzW2NoYXJhY3Rlcl0gPSBKU1N0cmluZzo6Y3JlYXRlSGFzT3RoZXJPd25lcigqZ2xv
YmFsRGF0YSwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPihtX3N0b3JhZ2UtPnJlcChjaGFyYWN0ZXIp
KSk7CisgICAgbV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzW2NoYXJhY3Rlcl0gPSBKU1N0cmluZzo6
Y3JlYXRlSGFzT3RoZXJPd25lcigqdm0sIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4obV9zdG9yYWdl
LT5yZXAoY2hhcmFjdGVyKSkpOwogfQogCiBTdHJpbmdJbXBsKiBTbWFsbFN0cmluZ3M6OnNpbmds
ZUNoYXJhY3RlclN0cmluZ1JlcCh1bnNpZ25lZCBjaGFyIGNoYXJhY3RlcikKQEAgLTEyOSw5ICsx
MjksOSBAQCBTdHJpbmdJbXBsKiBTbWFsbFN0cmluZ3M6OnNpbmdsZUNoYXJhY3RlCiAgICAgcmV0
dXJuIG1fc3RvcmFnZS0+cmVwKGNoYXJhY3Rlcik7CiB9CiAKLXZvaWQgU21hbGxTdHJpbmdzOjpp
bml0aWFsaXplKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNTdHJpbmcqJiBzdHJpbmcsIGNv
bnN0IGNoYXIqIHZhbHVlKSBjb25zdAordm9pZCBTbWFsbFN0cmluZ3M6OmluaXRpYWxpemUoVk0q
IHZtLCBKU1N0cmluZyomIHN0cmluZywgY29uc3QgY2hhciogdmFsdWUpIGNvbnN0CiB7Ci0gICAg
c3RyaW5nID0gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgU3RyaW5nSW1wbDo6Y3JlYXRl
KHZhbHVlKSk7CisgICAgc3RyaW5nID0gSlNTdHJpbmc6OmNyZWF0ZSgqdm0sIFN0cmluZ0ltcGw6
OmNyZWF0ZSh2YWx1ZSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCShyZXZpc2lvbiAxNDg2ODMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBjbGFzcyBTdHJpbmdJbXBsOwogbmFtZXNwYWNlIEpT
QyB7CiAKICAgICBjbGFzcyBIZWFwUm9vdFZpc2l0b3I7Ci0gICAgY2xhc3MgSlNHbG9iYWxEYXRh
OworICAgIGNsYXNzIFZNOwogICAgIGNsYXNzIEpTU3RyaW5nOwogICAgIGNsYXNzIFNtYWxsU3Ry
aW5nc1N0b3JhZ2U7CiAgICAgY2xhc3MgU2xvdFZpc2l0b3I7CkBAIC02OCwxMCArNjgsMTAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gbV9lbXB0eVN0cmluZzsKICAgICAg
ICAgfQogCi0gICAgICAgIEpTU3RyaW5nKiBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBjaGFyIGNoYXJhY3RlcikKKyAgICAgICAgSlNTdHJp
bmcqIHNpbmdsZUNoYXJhY3RlclN0cmluZyhWTSogdm0sIHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVy
KQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tj
aGFyYWN0ZXJdKQotICAgICAgICAgICAgICAgIGNyZWF0ZVNpbmdsZUNoYXJhY3RlclN0cmluZyhn
bG9iYWxEYXRhLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIGNyZWF0ZVNpbmdsZUNoYXJh
Y3RlclN0cmluZyh2bSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIHJldHVybiBtX3NpbmdsZUNo
YXJhY3RlclN0cmluZ3NbY2hhcmFjdGVyXTsKICAgICAgICAgfQogCkBAIC04MSw3ICs4MSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTU3RyaW5nKiogc2luZ2xlQ2hhcmFjdGVyU3Ry
aW5ncygpIHsgcmV0dXJuICZtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbMF07IH0KIAotICAgICAg
ICB2b2lkIGluaXRpYWxpemVDb21tb25TdHJpbmdzKEpTR2xvYmFsRGF0YSYpOworICAgICAgICB2
b2lkIGluaXRpYWxpemVDb21tb25TdHJpbmdzKFZNJik7CiAgICAgICAgIHZvaWQgdmlzaXRTdHJv
bmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CiAKICNkZWZpbmUgSlNDX0NPTU1PTl9TVFJJTkdT
X0FDQ0VTU09SX0RFRklOSVRJT04obmFtZSkgXApAQCAtOTUsMTAgKzk1LDEwIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaW5n
bGVDaGFyYWN0ZXJTdHJpbmdDb3VudCA9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZyArIDE7CiAK
LSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjcmVhdGVFbXB0eVN0cmluZyhKU0dsb2Jh
bERhdGEqKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjcmVhdGVTaW5nbGVDaGFy
YWN0ZXJTdHJpbmcoSlNHbG9iYWxEYXRhKiwgdW5zaWduZWQgY2hhcik7CisgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgY3JlYXRlRW1wdHlTdHJpbmcoVk0qKTsKKyAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBjcmVhdGVTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVk0qLCB1bnNpZ25l
ZCBjaGFyKTsKIAotICAgICAgICB2b2lkIGluaXRpYWxpemUoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBKU1N0cmluZyomIHN0cmluZywgY29uc3QgY2hhciogdmFsdWUpIGNvbnN0OworICAgICAg
ICB2b2lkIGluaXRpYWxpemUoVk0qIHZtLCBKU1N0cmluZyomIHN0cmluZywgY29uc3QgY2hhciog
dmFsdWUpIGNvbnN0OwogCiAgICAgICAgIEpTU3RyaW5nKiBtX2VtcHR5U3RyaW5nOwogI2RlZmlu
ZSBKU0NfQ09NTU9OX1NUUklOR1NfQVRUUklCVVRFX0RFQ0xBUkFUSU9OKG5hbWUpIEpTU3RyaW5n
KiBtXyMjbmFtZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFy
cmF5VmFsdWVNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzksOCArMzksOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZv
IFNwYXJzZUFycmF5VmFsdWVNYXA6OnNfaW5mbyA9IHsgIlNwYXJzZUFycmF5VmFsdWVNYXAiLCAw
LCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFNwYXJzZUFycmF5VmFsdWVNYXApIH07CiAKLVNw
YXJzZUFycmF5VmFsdWVNYXA6OlNwYXJzZUFycmF5VmFsdWVNYXAoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQotICAgIDogQmFzZShnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnNwYXJzZUFycmF5VmFs
dWVNYXBTdHJ1Y3R1cmUuZ2V0KCkpCitTcGFyc2VBcnJheVZhbHVlTWFwOjpTcGFyc2VBcnJheVZh
bHVlTWFwKFZNJiB2bSkKKyAgICA6IEJhc2Uodm0sIHZtLnNwYXJzZUFycmF5VmFsdWVNYXBTdHJ1
Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX2ZsYWdzKE5vcm1hbCkKICAgICAsIG1fcmVwb3J0ZWRDYXBh
Y2l0eSgwKQogewpAQCAtNTAsMTUgKzUwLDE1IEBAIFNwYXJzZUFycmF5VmFsdWVNYXA6On5TcGFy
c2VBcnJheVZhbHVlTWEKIHsKIH0KIAotdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpmaW5pc2hD
cmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIFNwYXJzZUFycmF5VmFsdWVN
YXA6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihn
bG9iYWxEYXRhKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9CiAKLVNwYXJzZUFy
cmF5VmFsdWVNYXAqIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCitTcGFyc2VBcnJheVZhbHVlTWFwKiBTcGFyc2VBcnJheVZhbHVlTWFwOjpjcmVh
dGUoVk0mIHZtKQogewotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIHJlc3VsdCA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPFNwYXJzZUFycmF5VmFsdWVNYXA+KGdsb2JhbERhdGEuaGVhcCkp
IFNwYXJzZUFycmF5VmFsdWVNYXAoZ2xvYmFsRGF0YSk7Ci0gICAgcmVzdWx0LT5maW5pc2hDcmVh
dGlvbihnbG9iYWxEYXRhKTsKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiByZXN1bHQgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTcGFyc2VBcnJheVZhbHVlTWFwPih2bS5oZWFwKSkgU3Bh
cnNlQXJyYXlWYWx1ZU1hcCh2bSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNjcsOSArNjcsOSBAQCB2b2lkIFNwYXJzZUFycmF5
VmFsdWVNYXA6OmRlc3Ryb3koSlNDZWxsCiAgICAgc3RhdGljX2Nhc3Q8U3BhcnNlQXJyYXlWYWx1
ZU1hcCo+KGNlbGwpLT5TcGFyc2VBcnJheVZhbHVlTWFwOjp+U3BhcnNlQXJyYXlWYWx1ZU1hcCgp
OwogfQogCi1TdHJ1Y3R1cmUqIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNyZWF0ZVN0cnVjdHVyZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQorU3RydWN0dXJlKiBTcGFyc2VBcnJheVZhbHVlTWFwOjpjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSkKIHsKLSAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENvbXBvdW5kVHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCAmc19pbmZvKTsKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDb21wb3VuZFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
JnNfaW5mbyk7CiB9CiAKIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCBTcGFyc2VBcnJh
eVZhbHVlTWFwOjphZGQoSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBpKQpAQCAtMTE4LDcgKzEx
OCw3IEBAIGJvb2wgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KEV4ZWMKICAgICB9CiAK
ICAgICBlbnRyeS5hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKLSAgICBlbnRyeS5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7CisgICAgZW50cnkuc2V0KGV4ZWMtPnZtKCksIHRo
aXMsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTcyLDcgKzE3Miw3IEBAIHZv
aWQgU3BhcnNlQXJyYXlFbnRyeTo6cHV0KEV4ZWNTdGF0ZSogZXgKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCi0gICAgICAgIHNldChleGVjLT5nbG9iYWxEYXRhKCksIG1hcCwgdmFs
dWUpOworICAgICAgICBzZXQoZXhlYy0+dm0oKSwgbWFwLCB2YWx1ZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFy
cmF5VmFsdWVNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtNjUsMTAgKzY1LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIExlbmd0aElzUmVhZE9ubHkgPSAy
LAogICAgIH07CiAKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKEpTR2xvYmFsRGF0YSYpOworICAg
IFNwYXJzZUFycmF5VmFsdWVNYXAoVk0mKTsKICAgICB+U3BhcnNlQXJyYXlWYWx1ZU1hcCgpOwog
ICAgIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJik7CisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYpOwogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEpTQ2VsbDo6U3RydWN0dXJlRmxhZ3M7
CiAKQEAgLTc5LDEzICs3OSwxMyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBNYXA6OmNvbnN0X2l0
ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogICAgIHR5cGVkZWYgTWFwOjpBZGRSZXN1bHQgQWRkUmVz
dWx0OwogCi0gICAgc3RhdGljIFNwYXJzZUFycmF5VmFsdWVNYXAqIGNyZWF0ZShKU0dsb2JhbERh
dGEmKTsKKyAgICBzdGF0aWMgU3BhcnNlQXJyYXlWYWx1ZU1hcCogY3JlYXRlKFZNJik7CiAgICAg
CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzSW1tb3J0YWxTdHJ1Y3R1cmUgPSB0cnVlOwogICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5
cGUpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwCShyZXZpc2lv
biAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpY3RFdmFsQWN0
aXZhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgY29uc3QgQ2xhc3NJ
bmZvIFN0cmljdEV2YWxBY3RpdmF0aW9uOjpzXwogCiBTdHJpY3RFdmFsQWN0aXZhdGlvbjo6U3Ry
aWN0RXZhbEFjdGl2YXRpb24oRXhlY1N0YXRlKiBleGVjKQogICAgIDogQmFzZSgKLSAgICAgICAg
ZXhlYy0+Z2xvYmFsRGF0YSgpLAorICAgICAgICBleGVjLT52bSgpLAogICAgICAgICBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPnN0cmljdEV2YWxBY3RpdmF0aW9uU3RydWN0dXJlKCksCiAg
ICAgICAgIGV4ZWMtPnNjb3BlKCkKICAgICApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmljdEV2YWxBY3RpdmF0aW9uLmgJKHJldmlzaW9uIDE0ODY4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmljdEV2YWxBY3RpdmF0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE2ICszNywxNiBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IFN0cmljdEV2YWxBY3RpdmF0aW9uKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjKQogICAgIHsKICAg
ICAgICAgU3RyaWN0RXZhbEFjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxTdHJpY3RFdmFsQWN0aXZhdGlvbj4oKmV4ZWMtPmhlYXAoKSkpIFN0cmljdEV2
YWxBY3RpdmF0aW9uKGV4ZWMpOwotICAgICAgICBhY3RpdmF0aW9uLT5maW5pc2hDcmVhdGlvbihl
eGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBhY3RpdmF0aW9uLT5maW5pc2hDcmVhdGlvbihl
eGVjLT52bSgpKTsKICAgICAgICAgcmV0dXJuIGFjdGl2YXRpb247CiAgICAgfQogCiAgICAgc3Rh
dGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
KTsKICAgICBzdGF0aWMgSlNPYmplY3QqIHRvVGhpc09iamVjdChKU0NlbGwqLCBFeGVjU3RhdGUq
KTsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlKQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwor
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAg
IH0KICAgICAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z0NvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsOSArNTUsOSBAQCBTdHJpbmdD
b25zdHJ1Y3Rvcjo6U3RyaW5nQ29uc3RydWN0b3IoSlNHCiAKIHZvaWQgU3RyaW5nQ29uc3RydWN0
b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nUHJvdG90eXBlKiBzdHJp
bmdQcm90b3R5cGUpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0
YSgpLCBzdHJpbmdQcm90b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpOwotICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLnByb3RvdHlwZSwgc3RyaW5nUHJvdG90eXBlLCBSZWFkT25seSB8IERvbnRFbnVtIHwg
RG9udERlbGV0ZSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFs
RGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9u
bHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4
ZWMtPnZtKCksIHN0cmluZ1Byb3RvdHlwZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSk7CisgICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLnByb3RvdHlwZSwgc3RyaW5nUHJvdG90eXBlLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9u
dERlbGV0ZSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSksIFJlYWRPbmx5IHwgRG9udEVu
dW0gfCBEb250RGVsZXRlKTsKIH0KIAogYm9vbCBTdHJpbmdDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJv
cGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QgJnNsb3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE0ODY4MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDkgKzQwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgICAgICB9CiAK
ICAgICBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ09iamVjdC5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE2ICsz
MiwxNiBAQCBBU1NFUlRfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUihTdHJpbmdPYmplCiAKIGNvbnN0
IENsYXNzSW5mbyBTdHJpbmdPYmplY3Q6OnNfaW5mbyA9IHsgIlN0cmluZyIsICZKU1dyYXBwZXJP
YmplY3Q6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShTdHJpbmdPYmplY3QpIH07
CiAKLVN0cmluZ09iamVjdDo6U3RyaW5nT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBKU1dyYXBwZXJPYmplY3QoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlKQorU3RyaW5nT2JqZWN0OjpTdHJpbmdPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICA6IEpTV3JhcHBlck9iamVjdCh2bSwgc3RydWN0dXJlKQogewogfQog
Ci12b2lkIFN0cmluZ09iamVjdDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU1N0cmluZyogc3RyaW5nKQordm9pZCBTdHJpbmdPYmplY3Q6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSwgSlNTdHJpbmcqIHN0cmluZykKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihn
bG9iYWxEYXRhKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGlu
aGVyaXRzKCZzX2luZm8pKTsKLSAgICBzZXRJbnRlcm5hbFZhbHVlKGdsb2JhbERhdGEsIHN0cmlu
Zyk7CisgICAgc2V0SW50ZXJuYWxWYWx1ZSh2bSwgc3RyaW5nKTsKIH0KIAogYm9vbCBTdHJpbmdP
YmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtMTY2LDcg
KzE2Niw3IEBAIHZvaWQgU3RyaW5nT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEoKIFN0cmlu
Z09iamVjdCogY29uc3RydWN0U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBzdHJpbmcpCiB7CiAgICAgU3RyaW5nT2JqZWN0KiBvYmpl
Y3QgPSBTdHJpbmdPYmplY3Q6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVj
dFN0cnVjdHVyZSgpKTsKLSAgICBvYmplY3QtPnNldEludGVybmFsVmFsdWUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBzdHJpbmcpOworICAgIG9iamVjdC0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT52bSgp
LCBzdHJpbmcpOwogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMzMsMTQgKzMzLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgU3Ry
aW5nT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
ICAgICAgICAgewogICAgICAgICAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGpzRW1wdHlTdHJpbmco
ZXhlYyk7Ci0gICAgICAgICAgICBTdHJpbmdPYmplY3QqIG9iamVjdCA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPFN0cmluZ09iamVjdD4oKmV4ZWMtPmhlYXAoKSkpIFN0cmluZ09iamVjdChl
eGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSk7ICAKLSAgICAgICAgICAgIG9iamVjdC0+Zmlu
aXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJpbmcpOworICAgICAgICAgICAgU3Ry
aW5nT2JqZWN0KiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJpbmdPYmpl
Y3Q+KCpleGVjLT5oZWFwKCkpKSBTdHJpbmdPYmplY3QoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsg
IAorICAgICAgICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpLCBzdHJpbmcp
OwogICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICAgICAgfQogICAgICAgICBzdGF0aWMg
U3RyaW5nT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNTdHJpbmcqIHN0cmluZykKICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nT2JqZWN0
KiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJpbmdPYmplY3Q+KCpleGVj
LT5oZWFwKCkpKSBTdHJpbmdPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpOwot
ICAgICAgICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIHN0
cmluZyk7CisgICAgICAgICAgICBTdHJpbmdPYmplY3QqIG9iamVjdCA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPFN0cmluZ09iamVjdD4oKmV4ZWMtPmhlYXAoKSkpIFN0cmluZ09iamVjdChl
eGVjLT52bSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlv
bihleGVjLT52bSgpLCBzdHJpbmcpOwogICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICAg
ICAgfQogICAgICAgICBzdGF0aWMgU3RyaW5nT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiwgSlNH
bG9iYWxPYmplY3QqLCBKU1N0cmluZyopOwpAQCAtNjEsMTUgKzYxLDE1IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIEpTU3RyaW5nKiBpbnRlcm5hbFZhbHVlKCkgY29uc3QgeyByZXR1cm4g
YXNTdHJpbmcoSlNXcmFwcGVyT2JqZWN0OjppbnRlcm5hbFZhbHVlKCkpO30KIAotICAgICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsK
KyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmLCBKU1N0cmluZyopOworICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNTdHJpbmcqKTsKICAg
ICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybyB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU1dyYXBw
ZXJPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJp
bmdPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CisgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFN0cmluZ09iamVjdChWTSYsIFN0cnVjdHVyZSopOwogICAgIH07CiAKICAgICBTdHJp
bmdPYmplY3QqIGFzU3RyaW5nT2JqZWN0KEpTVmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxNDg2
ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NiwxNSArODYsMTUgQEAgY29uc3QgQ2xhc3NJbmZvIFN0cmlu
Z1Byb3RvdHlwZTo6c19pbmZvIAogCiAvLyBFQ01BIDE1LjUuNAogU3RyaW5nUHJvdG90eXBlOjpT
dHJpbmdQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAg
ICA6IFN0cmluZ09iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSkKKyAgICA6IFN0
cmluZ09iamVjdChleGVjLT52bSgpLCBzdHJ1Y3R1cmUpCiB7CiB9CiAKIHZvaWQgU3RyaW5nUHJv
dG90eXBlOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTU3RyaW5nKiBuYW1lQW5kTWVzc2FnZSkKIHsKLSAgICBKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICAKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBuYW1lQW5k
TWVzc2FnZSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIG5hbWVBbmRNZXNzYWdlKTsK
ICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogCiAgICAgSlNDX05BVElWRV9JTlRSSU5T
SUNfRlVOQ1RJT04oInRvU3RyaW5nIiwgc3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcsIERvbnRFbnVt
LCAwLCBTdHJpbmdQcm90b3R5cGVWYWx1ZU9mSW50cmluc2ljKTsKQEAgLTEzNCw3ICsxMzQsNyBA
QCB2b2lkIFN0cmluZ1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oRXhlCiAgICAgSlNDX05BVElW
RV9GVU5DVElPTigidHJpbVJpZ2h0Iiwgc3RyaW5nUHJvdG9GdW5jVHJpbVJpZ2h0LCBEb250RW51
bSwgMCk7CiAKICAgICAvLyBUaGUgY29uc3RydWN0b3Igd2lsbCBiZSBhZGRlZCBsYXRlciwgYWZ0
ZXIgU3RyaW5nQ29uc3RydWN0b3IgaGFzIGJlZW4gYnVpbHQKLSAgICBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgsIGpzTnVtYmVyKDApLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmxlbmd0aCwganNOdW1iZXIoMCksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVt
KTsKIH0KIAogU3RyaW5nUHJvdG90eXBlKiBTdHJpbmdQcm90b3R5cGU6OmNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQpAQCAtNDA1LDEyICs0MDUsMTIgQEAgc3RhdGljIE5FVkVSX0lOTElORSBFbmNvZGVkSlNW
YWx1ZSByZW1vdgogICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSAwOwogCiAgICAgVmVjdG9y
PFN0cmluZ1JhbmdlLCAxNj4gc291cmNlUmFuZ2VzOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAg
ICAgUmVnRXhwQ29uc3RydWN0b3IqIHJlZ0V4cENvbnN0cnVjdG9yID0gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5yZWdFeHBDb25zdHJ1Y3RvcigpOwogICAgIHVuc2lnbmVkIHNvdXJjZUxl
biA9IHNvdXJjZS5sZW5ndGgoKTsKIAogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIE1hdGNo
UmVzdWx0IHJlc3VsdCA9IHJlZ0V4cENvbnN0cnVjdG9yLT5wZXJmb3JtTWF0Y2goKmdsb2JhbERh
dGEsIHJlZ0V4cCwgc3RyaW5nLCBzb3VyY2UsIHN0YXJ0UG9zaXRpb24pOworICAgICAgICBNYXRj
aFJlc3VsdCByZXN1bHQgPSByZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9ybU1hdGNoKCp2bSwgcmVn
RXhwLCBzdHJpbmcsIHNvdXJjZSwgc3RhcnRQb3NpdGlvbik7CiAgICAgICAgIGlmICghcmVzdWx0
KQogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTQ4MCwxMSArNDgwLDExIEBAIHN0YXRpYyBORVZF
Ul9JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbGEKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRD
YWxsKGV4ZWMsIGZ1bmMsIGFyZ0NvdW50KTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7Ci0gICAg
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAg
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgICAgICBpZiAoc291cmNlLmlzOEJpdCgpKSB7
CiAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgIGludCogb3ZlY3Rv
cjsKLSAgICAgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSByZWdFeHBDb25zdHJ1Y3Rv
ci0+cGVyZm9ybU1hdGNoKCpnbG9iYWxEYXRhLCByZWdFeHAsIHN0cmluZywgc291cmNlLCBzdGFy
dFBvc2l0aW9uLCAmb3ZlY3Rvcik7CisgICAgICAgICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0
ID0gcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRjaCgqdm0sIHJlZ0V4cCwgc3RyaW5nLCBz
b3VyY2UsIHN0YXJ0UG9zaXRpb24sICZvdmVjdG9yKTsKICAgICAgICAgICAgICAgICBpZiAoIXJl
c3VsdCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTQ5OCw3ICs0OTgsNyBAQCBz
dGF0aWMgTkVWRVJfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhCiAgICAgICAgICAgICAgICAg
ICAgIGlmIChtYXRjaFN0YXJ0IDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZENh
bGwuc2V0QXJndW1lbnQoaSwganNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoaSwganNT
dWJzdHJpbmc4KGdsb2JhbERhdGEsIHNvdXJjZSwgbWF0Y2hTdGFydCwgbWF0Y2hMZW4pKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoaSwganNTdWJzdHJp
bmc4KHZtLCBzb3VyY2UsIG1hdGNoU3RhcnQsIG1hdGNoTGVuKSk7CiAgICAgICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudChpKyssIGpzTnVtYmVy
KHJlc3VsdC5zdGFydCkpOwpAQCAtNTIzLDcgKzUyMyw3IEBAIHN0YXRpYyBORVZFUl9JTkxJTkUg
RW5jb2RlZEpTVmFsdWUgcmVwbGEKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHdoaWxl
ICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgaW50KiBvdmVjdG9yOwotICAgICAgICAgICAgICAg
IE1hdGNoUmVzdWx0IHJlc3VsdCA9IHJlZ0V4cENvbnN0cnVjdG9yLT5wZXJmb3JtTWF0Y2goKmds
b2JhbERhdGEsIHJlZ0V4cCwgc3RyaW5nLCBzb3VyY2UsIHN0YXJ0UG9zaXRpb24sICZvdmVjdG9y
KTsKKyAgICAgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSByZWdFeHBDb25zdHJ1Y3Rv
ci0+cGVyZm9ybU1hdGNoKCp2bSwgcmVnRXhwLCBzdHJpbmcsIHNvdXJjZSwgc3RhcnRQb3NpdGlv
biwgJm92ZWN0b3IpOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKIApAQCAtNTM3LDcgKzUzNyw3IEBAIHN0YXRpYyBORVZFUl9JTkxJTkUg
RW5jb2RlZEpTVmFsdWUgcmVwbGEKICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoU3RhcnQg
PCAwKQogICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudChpLCBq
c1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudChpLCBqc1N1YnN0cmluZyhnbG9iYWxEYXRh
LCBzb3VyY2UsIG1hdGNoU3RhcnQsIG1hdGNoTGVuKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KGksIGpzU3Vic3RyaW5nKHZtLCBzb3VyY2UsIG1hdGNo
U3RhcnQsIG1hdGNoTGVuKSk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAg
Y2FjaGVkQ2FsbC5zZXRBcmd1bWVudChpKyssIGpzTnVtYmVyKHJlc3VsdC5zdGFydCkpOwpAQCAt
NTYxLDEwICs1NjEsMTAgQEAgc3RhdGljIE5FVkVSX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBs
YQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIGludCogb3ZlY3RvcjsK
LSAgICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IHJlZ0V4cENvbnN0cnVjdG9yLT5wZXJm
b3JtTWF0Y2goKmdsb2JhbERhdGEsIHJlZ0V4cCwgc3RyaW5nLCBzb3VyY2UsIHN0YXJ0UG9zaXRp
b24sICZvdmVjdG9yKTsKKyAgICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IHJlZ0V4cENv
bnN0cnVjdG9yLT5wZXJmb3JtTWF0Y2goKnZtLCByZWdFeHAsIHN0cmluZywgc291cmNlLCBzdGFy
dFBvc2l0aW9uLCAmb3ZlY3Rvcik7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAg
ICAgICAgICBicmVhazsKIApAQCAtODEwLDcgKzgxMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yyk7CiAgICAgSlNTdHJpbmcqIHN0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKICAg
ICBTdHJpbmcgcyA9IHN0cmluZy0+dmFsdWUoZXhlYyk7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
IAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKIApAQCAtODMyLDEyICs4MzIs
MTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICAg
KiAgcmVwbGFjZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBleHByZXNzaW9uIG5ldyBSZWdFeHAo
cmVnZXhwKS4KICAgICAgICAgICogIFBlciBFQ01BIDE1LjEwLjQuMSwgaWYgYTAgaXMgdW5kZWZp
bmVkIHN1YnN0aXR1dGUgdGhlIGVtcHR5IHN0cmluZy4KICAgICAgICAgICovCi0gICAgICAgIHJl
Z0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgYTAuaXNVbmRlZmluZWQo
KSA/IFN0cmluZygiIikgOiBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksIE5vRmxhZ3Mp
OworICAgICAgICByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShleGVjLT52bSgpLCBhMC5pc1VuZGVm
aW5lZCgpID8gU3RyaW5nKCIiKSA6IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgTm9G
bGFncyk7CiAgICAgICAgIGlmICghcmVnRXhwLT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsIHJlZ0V4cC0+ZXJy
b3JNZXNzYWdlKCkpKTsKICAgICB9CiAgICAgUmVnRXhwQ29uc3RydWN0b3IqIHJlZ0V4cENvbnN0
cnVjdG9yID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBDb25zdHJ1Y3Rvcigp
OwotICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IHJlZ0V4cENvbnN0cnVjdG9yLT5wZXJmb3JtTWF0
Y2goKmdsb2JhbERhdGEsIHJlZ0V4cCwgc3RyaW5nLCBzLCAwKTsKKyAgICBNYXRjaFJlc3VsdCBy
ZXN1bHQgPSByZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9ybU1hdGNoKCp2bSwgcmVnRXhwLCBzdHJp
bmcsIHMsIDApOwogICAgIC8vIGNhc2Ugd2l0aG91dCAnZycgZmxhZyBpcyBoYW5kbGVkIGxpa2Ug
UmVnRXhwLnByb3RvdHlwZS5leGVjCiAgICAgaWYgKCFnbG9iYWwpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0ID8gUmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVhdGUoZXhlYywg
c3RyaW5nLCByZWdFeHAsIHJlc3VsdCkgOiBqc051bGwoKSk7CkBAIC04NTAsNyArODUwLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICBsaXN0LmFw
cGVuZChqc1N1YnN0cmluZyhleGVjLCBzLCByZXN1bHQuc3RhcnQsIGxlbmd0aCkpOwogICAgICAg
ICBpZiAoIWxlbmd0aCkKICAgICAgICAgICAgICsrZW5kOwotICAgICAgICByZXN1bHQgPSByZWdF
eHBDb25zdHJ1Y3Rvci0+cGVyZm9ybU1hdGNoKCpnbG9iYWxEYXRhLCByZWdFeHAsIHN0cmluZywg
cywgZW5kKTsKKyAgICAgICAgcmVzdWx0ID0gcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRj
aCgqdm0sIHJlZ0V4cCwgc3RyaW5nLCBzLCBlbmQpOwogICAgIH0KICAgICBpZiAobGlzdC5pc0Vt
cHR5KCkpIHsKICAgICAgICAgLy8gaWYgdGhlcmUgYXJlIG5vIG1hdGNoZXMgYXQgYWxsLCBpdCdz
IGltcG9ydGFudCB0byByZXR1cm4KQEAgLTg2OSw3ICs4NjksNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMpOwogICAgIEpTU3RyaW5nKiBzdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7
CiAgICAgU3RyaW5nIHMgPSBzdHJpbmctPnZhbHVlKGV4ZWMpOwotICAgIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAKQEAgLTg4MywxMiAr
ODgzLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAg
ICAgICogIHJlcGxhY2VkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbiBuZXcgUmVn
RXhwKHJlZ2V4cCkuCiAgICAgICAgICAqICBQZXIgRUNNQSAxNS4xMC40LjEsIGlmIGEwIGlzIHVu
ZGVmaW5lZCBzdWJzdGl0dXRlIHRoZSBlbXB0eSBzdHJpbmcuCiAgICAgICAgICAqLwotICAgICAg
ICByZWcgPSBSZWdFeHA6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGEwLmlzVW5kZWZpbmVk
KCkgPyBTdHJpbmcoIiIpIDogYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCBOb0ZsYWdz
KTsKKyAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+dm0oKSwgYTAuaXNVbmRlZmlu
ZWQoKSA/IFN0cmluZygiIikgOiBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksIE5vRmxh
Z3MpOwogICAgICAgICBpZiAoIXJlZy0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCByZWctPmVycm9yTWVzc2Fn
ZSgpKSk7CiAgICAgfQogICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0b3IoKTsKLSAgICBN
YXRjaFJlc3VsdCByZXN1bHQgPSByZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9ybU1hdGNoKCpnbG9i
YWxEYXRhLCByZWcsIHN0cmluZywgcywgMCk7CisgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gcmVn
RXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRjaCgqdm0sIHJlZywgc3RyaW5nLCBzLCAwKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCA/IGpzTnVtYmVyKHJlc3VsdC5zdGFydCkg
OiBqc051bWJlcigtMSkpOwogfQogCkBAIC05NzgsNyArOTc4LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIC8vICAgIG90aGVyd2lzZSBsZXQgUiA9IFRv
U3RyaW5nKHNlcGFyYXRvcikuCiAgICAgSlNWYWx1ZSBzZXBhcmF0b3JWYWx1ZSA9IGV4ZWMtPmFy
Z3VtZW50KDApOwogICAgIGlmIChzZXBhcmF0b3JWYWx1ZS5pbmhlcml0cygmUmVnRXhwT2JqZWN0
OjpzX2luZm8pKSB7Ci0gICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5n
bG9iYWxEYXRhKCk7CisgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgICAgICBSZWdF
eHAqIHJlZyA9IGFzUmVnRXhwT2JqZWN0KHNlcGFyYXRvclZhbHVlKS0+cmVnRXhwKCk7CiAKICAg
ICAgICAgLy8gOS4gSWYgbGltID09IDAsIHJldHVybiBBLgpAQCAtMTAwMSw3ICsxMDAxLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICAgICAgLy8g
Yy4gQ2FsbCB0aGUgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBBIHdp
dGggYXJndW1lbnRzICIwIiwKICAgICAgICAgICAgIC8vICAgIFByb3BlcnR5IERlc2NyaXB0b3Ig
e1tbVmFsdWVdXTogUywgW1tXcml0YWJsZV1dOiB0cnVlLCBbW0VudW1lcmFibGVdXTogdHJ1ZSwg
W1tDb25maWd1cmFibGVdXTogdHJ1ZX0sIGFuZCBmYWxzZS4KICAgICAgICAgICAgIC8vIGQuIFJl
dHVybiBBLgotICAgICAgICAgICAgaWYgKCFyZWctPm1hdGNoKCpnbG9iYWxEYXRhLCBpbnB1dCwg
MCkpCisgICAgICAgICAgICBpZiAoIXJlZy0+bWF0Y2goKnZtLCBpbnB1dCwgMCkpCiAgICAgICAg
ICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCAwLCBqc1N0cmluZ1dpdGhSZXVz
ZShleGVjLCB0aGlzVmFsdWUsIGlucHV0KSk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CiAgICAgICAgIH0KQEAgLTEwMTIsNyArMTAxMiw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgd2hpbGUgKG1hdGNoUG9z
aXRpb24gPCBpbnB1dC5sZW5ndGgoKSkgewogICAgICAgICAgICAgLy8gYS4gQ2FsbCBTcGxpdE1h
dGNoKFMsIHEsIFIpIGFuZCBsZXQgeiBiZSBpdHMgTWF0Y2hSZXN1bHQgcmVzdWx0LgogICAgICAg
ICAgICAgVmVjdG9yPGludCwgMzI+IG92ZWN0b3I7Ci0gICAgICAgICAgICBpbnQgbXBvcyA9IHJl
Zy0+bWF0Y2goKmdsb2JhbERhdGEsIGlucHV0LCBtYXRjaFBvc2l0aW9uLCBvdmVjdG9yKTsKKyAg
ICAgICAgICAgIGludCBtcG9zID0gcmVnLT5tYXRjaCgqdm0sIGlucHV0LCBtYXRjaFBvc2l0aW9u
LCBvdmVjdG9yKTsKICAgICAgICAgICAgIC8vIGIuIElmIHogaXMgZmFpbHVyZSwgdGhlbiBsZXQg
cSA9IHEgKyAxLgogICAgICAgICAgICAgaWYgKG1wb3MgPCAwKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJv
dG90eXBlLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ1Byb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiw5IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBTdHJpbmdQcm90b3R5cGUqIGNyZWF0ZShF
eGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwogCi0gICAgICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAg
ICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAg
ICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1JlY3Vyc2lv
bkNoZWNrZXIuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1
Miw3IEBAIGlubGluZSBKU1ZhbHVlIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXI6OnAKICAgICBjb25z
dCBTdGFja0JvdW5kcyYgbmF0aXZlU3RhY2sgPSB3dGZUaHJlYWREYXRhKCkuc3RhY2soKTsKICAg
ICBpZiAoIW5hdGl2ZVN0YWNrLmlzU2FmZVRvUmVjdXJzZSgpKQogICAgICAgICByZXR1cm4gdGhy
b3dTdGFja092ZXJmbG93RXJyb3IoKTsKLSAgICBib29sIGFscmVhZHlWaXNpdGVkID0gIW1fZXhl
Yy0+Z2xvYmFsRGF0YSgpLnN0cmluZ1JlY3Vyc2lvbkNoZWNrVmlzaXRlZE9iamVjdHMuYWRkKG1f
dGhpc09iamVjdCkuaXNOZXdFbnRyeTsKKyAgICBib29sIGFscmVhZHlWaXNpdGVkID0gIW1fZXhl
Yy0+dm0oKS5zdHJpbmdSZWN1cnNpb25DaGVja1Zpc2l0ZWRPYmplY3RzLmFkZChtX3RoaXNPYmpl
Y3QpLmlzTmV3RW50cnk7CiAgICAgaWYgKGFscmVhZHlWaXNpdGVkKQogICAgICAgICByZXR1cm4g
ZW1wdHlTdHJpbmcoKTsgLy8gUmV0dXJuIGVtcHR5IHN0cmluZyB0byBhdm9pZCBpbmZpbml0ZSBy
ZWN1cnNpb24uCiAgICAgcmV0dXJuIEpTVmFsdWUoKTsgLy8gSW5kaWNhdGUgc3VjY2Vzcy4KQEAg
LTc0LDggKzc0LDggQEAgaW5saW5lIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXI6On5TdHJpbmdSZQog
ewogICAgIGlmIChtX2Vhcmx5UmV0dXJuVmFsdWUpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NF
UlQobV9leGVjLT5nbG9iYWxEYXRhKCkuc3RyaW5nUmVjdXJzaW9uQ2hlY2tWaXNpdGVkT2JqZWN0
cy5jb250YWlucyhtX3RoaXNPYmplY3QpKTsKLSAgICBtX2V4ZWMtPmdsb2JhbERhdGEoKS5zdHJp
bmdSZWN1cnNpb25DaGVja1Zpc2l0ZWRPYmplY3RzLnJlbW92ZShtX3RoaXNPYmplY3QpOworICAg
IEFTU0VSVChtX2V4ZWMtPnZtKCkuc3RyaW5nUmVjdXJzaW9uQ2hlY2tWaXNpdGVkT2JqZWN0cy5j
b250YWlucyhtX3RoaXNPYmplY3QpKTsKKyAgICBtX2V4ZWMtPnZtKCkuc3RyaW5nUmVjdXJzaW9u
Q2hlY2tWaXNpdGVkT2JqZWN0cy5yZW1vdmUobV90aGlzT2JqZWN0KTsKIH0KIAogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAx
NDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MSwyMSArODEsMjEgQEAgaW5saW5lIFN0cnVjdHVyZSogU3RydWN0
dXJlVHJhbnNpdGlvblRhYgogICAgIHJldHVybiBtYXAoKS0+Z2V0KG1ha2VfcGFpcihyZXAsIGF0
dHJpYnV0ZXMpKTsKIH0KIAotaW5saW5lIHZvaWQgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjph
ZGQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2lubGlu
ZSB2b2lkIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6YWRkKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiB7CiAgICAgaWYgKGlzVXNpbmdTaW5nbGVTbG90KCkpIHsKICAgICAgICAgU3Ry
dWN0dXJlKiBleGlzdGluZ1RyYW5zaXRpb24gPSBzaW5nbGVUcmFuc2l0aW9uKCk7CiAKICAgICAg
ICAgLy8gVGhpcyBoYW5kbGVzIHRoZSBmaXJzdCB0cmFuc2l0aW9uIGJlaW5nIGFkZGVkLgogICAg
ICAgICBpZiAoIWV4aXN0aW5nVHJhbnNpdGlvbikgewotICAgICAgICAgICAgc2V0U2luZ2xlVHJh
bnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgc2V0U2luZ2xlVHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CiAgICAgICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgc2Vjb25kIHRyYW5zaXRpb24gYmVpbmcgYWRk
ZWQKICAgICAgICAgLy8gKG9yIHRoZSBmaXJzdCB0cmFuc2l0aW9uIGJlaW5nIGRlc3BlY2lmaWVk
ISkKICAgICAgICAgc2V0TWFwKG5ldyBUcmFuc2l0aW9uTWFwKCkpOwotICAgICAgICBhZGQoZ2xv
YmFsRGF0YSwgZXhpc3RpbmdUcmFuc2l0aW9uKTsKKyAgICAgICAgYWRkKHZtLCBleGlzdGluZ1Ry
YW5zaXRpb24pOwogICAgIH0KIAogICAgIC8vIEFkZCB0aGUgc3RydWN0dXJlIHRvIHRoZSBtYXAu
CkBAIC0xNTEsMTAgKzE1MSwxMCBAQCB2b2lkIFN0cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MoKQog
I2VuZGlmCiB9CiAKLVN0cnVjdHVyZTo6U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0
IFR5cGVJbmZvJiB0eXBlSW5mbywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIEluZGV4aW5n
VHlwZSBpbmRleGluZ1R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5KQotICAgIDogSlNDZWxs
KGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0dXJlLmdldCgpKQotICAgICwg
bV9nbG9iYWxPYmplY3QoZ2xvYmFsRGF0YSwgdGhpcywgZ2xvYmFsT2JqZWN0LCBXcml0ZUJhcnJp
ZXI8SlNHbG9iYWxPYmplY3Q+OjpNYXlCZU51bGwpCi0gICAgLCBtX3Byb3RvdHlwZShnbG9iYWxE
YXRhLCB0aGlzLCBwcm90b3R5cGUpCitTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5m
byYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBJbmRleGluZ1R5cGUgaW5k
ZXhpbmdUeXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSkKKyAgICA6IEpTQ2VsbCh2bSwgdm0u
c3RydWN0dXJlU3RydWN0dXJlLmdldCgpKQorICAgICwgbV9nbG9iYWxPYmplY3Qodm0sIHRoaXMs
IGdsb2JhbE9iamVjdCwgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0Pjo6TWF5QmVOdWxsKQor
ICAgICwgbV9wcm90b3R5cGUodm0sIHRoaXMsIHByb3RvdHlwZSkKICAgICAsIG1fY2xhc3NJbmZv
KGNsYXNzSW5mbykKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSW5pdGlhbGl6ZWRX
YXRjaGluZykKICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCkBAIC0xNzksOSArMTc5LDkg
QEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYQogCiBjb25zdCBDbGFz
c0luZm8gU3RydWN0dXJlOjpzX2luZm8gPSB7ICJTdHJ1Y3R1cmUiLCAwLCAwLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKFN0cnVjdHVyZSkgfTsKIAotU3RydWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQorU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtKQogICAgIDog
SlNDZWxsKENyZWF0aW5nRWFybHlDZWxsKQotICAgICwgbV9wcm90b3R5cGUoZ2xvYmFsRGF0YSwg
dGhpcywganNOdWxsKCkpCisgICAgLCBtX3Byb3RvdHlwZSh2bSwgdGhpcywganNOdWxsKCkpCiAg
ICAgLCBtX2NsYXNzSW5mbygmc19pbmZvKQogICAgICwgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNl
dChJbml0aWFsaXplZFdhdGNoaW5nKQogICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKQEAg
LTIwMSw5ICsyMDEsOSBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
CiB7CiB9CiAKLVN0cnVjdHVyZTo6U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
Y29uc3QgU3RydWN0dXJlKiBwcmV2aW91cykKLSAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9i
YWxEYXRhLnN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkKLSAgICAsIG1fcHJvdG90eXBlKGdsb2Jh
bERhdGEsIHRoaXMsIHByZXZpb3VzLT5zdG9yZWRQcm90b3R5cGUoKSkKK1N0cnVjdHVyZTo6U3Ry
dWN0dXJlKFZNJiB2bSwgY29uc3QgU3RydWN0dXJlKiBwcmV2aW91cykKKyAgICA6IEpTQ2VsbCh2
bSwgdm0uc3RydWN0dXJlU3RydWN0dXJlLmdldCgpKQorICAgICwgbV9wcm90b3R5cGUodm0sIHRo
aXMsIHByZXZpb3VzLT5zdG9yZWRQcm90b3R5cGUoKSkKICAgICAsIG1fY2xhc3NJbmZvKHByZXZp
b3VzLT5tX2NsYXNzSW5mbykKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSW5pdGlh
bGl6ZWRXYXRjaGluZykKICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCkBAIC0yMjIsMTMg
KzIyMiwxMyBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhCiAgICAg
LCBtX3N0YXRpY0Z1bmN0aW9uUmVpZmllZChwcmV2aW91cy0+bV9zdGF0aWNGdW5jdGlvblJlaWZp
ZWQpCiB7CiAgICAgaWYgKHByZXZpb3VzLT50eXBlSW5mbygpLnN0cnVjdHVyZUhhc1JhcmVEYXRh
KCkgJiYgcHJldmlvdXMtPnJhcmVEYXRhKCktPm5lZWRzQ2xvbmluZygpKQotICAgICAgICBjbG9u
ZVJhcmVEYXRhRnJvbShnbG9iYWxEYXRhLCBwcmV2aW91cyk7CisgICAgICAgIGNsb25lUmFyZURh
dGFGcm9tKHZtLCBwcmV2aW91cyk7CiAgICAgZWxzZSBpZiAocHJldmlvdXMtPnByZXZpb3VzSUQo
KSkKLSAgICAgICAgbV9wcmV2aW91c09yUmFyZURhdGEuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHBy
ZXZpb3VzLT5wcmV2aW91c0lEKCkpOworICAgICAgICBtX3ByZXZpb3VzT3JSYXJlRGF0YS5zZXQo
dm0sIHRoaXMsIHByZXZpb3VzLT5wcmV2aW91c0lEKCkpOwogCiAgICAgcHJldmlvdXMtPm5vdGlm
eVRyYW5zaXRpb25Gcm9tVGhpc1N0cnVjdHVyZSgpOwogICAgIGlmIChwcmV2aW91cy0+bV9nbG9i
YWxPYmplY3QpCi0gICAgICAgIG1fZ2xvYmFsT2JqZWN0LnNldChnbG9iYWxEYXRhLCB0aGlzLCBw
cmV2aW91cy0+bV9nbG9iYWxPYmplY3QuZ2V0KCkpOworICAgICAgICBtX2dsb2JhbE9iamVjdC5z
ZXQodm0sIHRoaXMsIHByZXZpb3VzLT5tX2dsb2JhbE9iamVjdC5nZXQoKSk7CiB9CiAKIHZvaWQg
U3RydWN0dXJlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKQEAgLTIzNiw3ICsyMzYsNyBAQCB2b2lk
IFN0cnVjdHVyZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiAgICAgc3RhdGljX2Nhc3Q8U3RydWN0
dXJlKj4oY2VsbCktPlN0cnVjdHVyZTo6flN0cnVjdHVyZSgpOwogfQogCi12b2lkIFN0cnVjdHVy
ZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lk
IFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChWTSYgdm0pCiB7CiAgICAgQVNTRVJU
KHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmc19pbmZvKTsKICAgICBBU1NFUlQoIXByb3Bl
cnR5VGFibGUoKSk7CkBAIC0yNTIsNyArMjUyLDcgQEAgdm9pZCBTdHJ1Y3R1cmU6Om1hdGVyaWFs
aXplUHJvcGVydHlNYXAoSgogICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+cHJvcGVydHlU
YWJsZSgpKTsKICAgICAgICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpOwog
Ci0gICAgICAgICAgICBwcm9wZXJ0eVRhYmxlKCkuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHN0cnVj
dHVyZS0+cHJvcGVydHlUYWJsZSgpLT5jb3B5KGdsb2JhbERhdGEsIDAsIG51bWJlck9mU2xvdHNG
b3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSkpOworICAgICAgICAgICAg
cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdGhpcywgc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlKCkt
PmNvcHkodm0sIDAsIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGlu
ZUNhcGFjaXR5KSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMjYwLDEz
ICsyNjAsMTMgQEAgdm9pZCBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXAoSgogICAg
IH0KIAogICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQotICAgICAgICBjcmVhdGVQcm9wZXJ0eU1h
cChnbG9iYWxEYXRhLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxp
bmVDYXBhY2l0eSkpOworICAgICAgICBjcmVhdGVQcm9wZXJ0eU1hcCh2bSwgbnVtYmVyT2ZTbG90
c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKIAogICAgIGZvciAo
cHRyZGlmZl90IGkgPSBzdHJ1Y3R1cmVzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAg
ICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV07CiAgICAgICAgIGlmICghc3RydWN0dXJlLT5t
X25hbWVJblByZXZpb3VzKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFByb3BlcnR5
TWFwRW50cnkgZW50cnkoZ2xvYmFsRGF0YSwgdGhpcywgc3RydWN0dXJlLT5tX25hbWVJblByZXZp
b3VzLmdldCgpLCBzdHJ1Y3R1cmUtPm1fb2Zmc2V0LCBzdHJ1Y3R1cmUtPm1fYXR0cmlidXRlc0lu
UHJldmlvdXMsIHN0cnVjdHVyZS0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cy5nZXQoKSk7Cisg
ICAgICAgIFByb3BlcnR5TWFwRW50cnkgZW50cnkodm0sIHRoaXMsIHN0cnVjdHVyZS0+bV9uYW1l
SW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5tX29mZnNldCwgc3RydWN0dXJlLT5tX2F0dHJp
YnV0ZXNJblByZXZpb3VzLCBzdHJ1Y3R1cmUtPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMuZ2V0
KCkpOwogICAgICAgICBwcm9wZXJ0eVRhYmxlKCktPmFkZChlbnRyeSwgbV9vZmZzZXQsIFByb3Bl
cnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0TXVzdE5vdENoYW5nZSk7CiAgICAgfQogICAgIApAQCAt
Mjg1LDExICsyODUsMTEgQEAgc2l6ZV90IFN0cnVjdHVyZTo6c3VnZ2VzdGVkTmV3T3V0T2ZMaW5l
UwogICAgIHJldHVybiBuZXh0T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KG91dE9mTGluZUNhcGFj
aXR5KCkpOwogfQogIAotdm9pZCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeURpY3Rpb25hcnlGdW5jdGlv
bihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit2
b2lkIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0aW9uKFZNJiB2bSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBTdHJpbmdJbXBsKiByZXAgPSBwcm9wZXJ0eU5h
bWUudWlkKCk7CiAKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFs
RGF0YSk7CisgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtKTsKIAogICAg
IEFTU0VSVChpc0RpY3Rpb25hcnkoKSk7CiAgICAgQVNTRVJUKHByb3BlcnR5VGFibGUoKSk7CkBA
IC0zNDQsNyArMzQ0LDcgQEAgTm9uUHJvcGVydHlUcmFuc2l0aW9uIFN0cnVjdHVyZTo6c3VnZ2Vz
dAogICAgIHJldHVybiBBbGxvY2F0ZUFycmF5U3RvcmFnZTsKIH0KIAotU3RydWN0dXJlKiBTdHJ1
Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQp
CitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkK
IHsKICAgICAvLyBJZiB3ZSBoYXZlIGEgc3BlY2lmaWMgZnVuY3Rpb24sIHdlIG1heSBoYXZlIGdv
dCB0byB0aGlzIHBvaW50IGlmIHRoZXJlIGlzCiAgICAgLy8gYWxyZWFkeSBhIHRyYW5zaXRpb24g
d2l0aCB0aGUgY29ycmVjdCBwcm9wZXJ0eSBuYW1lIGFuZCBhdHRyaWJ1dGVzLCBidXQKQEAgLTM2
NCwzNiArMzY0LDM2IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXQK
ICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7CiAKICAgICBpZiAoc3RydWN0dXJlLT50cmFuc2l0
aW9uQ291bnQoKSA+IHNfbWF4VHJhbnNpdGlvbkxlbmd0aCkgewotICAgICAgICBTdHJ1Y3R1cmUq
IHRyYW5zaXRpb24gPSB0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKGdsb2JhbERhdGEs
IHN0cnVjdHVyZSk7CisgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHRvQ2FjaGVhYmxl
RGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSk7CiAgICAgICAgIEFTU0VSVChzdHJ1
Y3R1cmUgIT0gdHJhbnNpdGlvbik7Ci0gICAgICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPnB1dFNw
ZWNpZmljVmFsdWUoZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZp
Y1ZhbHVlKTsKKyAgICAgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+cHV0U3BlY2lmaWNWYWx1ZSh2
bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKICAgICAgICAgcmV0
dXJuIHRyYW5zaXRpb247CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9
IGNyZWF0ZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOworICAgIFN0cnVjdHVyZSogdHJhbnNpdGlv
biA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKIAotICAgIHRyYW5zaXRpb24tPm1fY2FjaGVkUHJv
dG90eXBlQ2hhaW4uc2V0TWF5QmVOdWxsKGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVy
ZS0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5nZXQoKSk7Ci0gICAgdHJhbnNpdGlvbi0+c2V0UHJl
dmlvdXNJRChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUpOworICAgIHRyYW5zaXRp
b24tPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uc2V0TWF5QmVOdWxsKHZtLCB0cmFuc2l0aW9uLCBz
dHJ1Y3R1cmUtPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uZ2V0KCkpOworICAgIHRyYW5zaXRpb24t
PnNldFByZXZpb3VzSUQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZSk7CiAgICAgdHJhbnNpdGlv
bi0+bV9uYW1lSW5QcmV2aW91cyA9IHByb3BlcnR5TmFtZS51aWQoKTsKICAgICB0cmFuc2l0aW9u
LT5tX2F0dHJpYnV0ZXNJblByZXZpb3VzID0gYXR0cmlidXRlczsKLSAgICB0cmFuc2l0aW9uLT5t
X3NwZWNpZmljVmFsdWVJblByZXZpb3VzLnNldE1heUJlTnVsbChnbG9iYWxEYXRhLCB0cmFuc2l0
aW9uLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0
KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNs
b25lSWZQaW5uZWQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbikpOworICAgIHRyYW5zaXRpb24tPm1f
c3BlY2lmaWNWYWx1ZUluUHJldmlvdXMuc2V0TWF5QmVOdWxsKHZtLCB0cmFuc2l0aW9uLCBzcGVj
aWZpY1ZhbHVlKTsKKyAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFu
c2l0aW9uLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZtLCB0
cmFuc2l0aW9uKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zm
c2V0OwogCi0gICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+cHV0U3BlY2lmaWNWYWx1ZShnbG9iYWxE
YXRhLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgIG9mZnNl
dCA9IHRyYW5zaXRpb24tPnB1dFNwZWNpZmljVmFsdWUodm0sIHByb3BlcnR5TmFtZSwgYXR0cmli
dXRlcywgc3BlY2lmaWNWYWx1ZSk7CiAKICAgICBjaGVja09mZnNldCh0cmFuc2l0aW9uLT5tX29m
ZnNldCwgdHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgc3RydWN0dXJlLT5tX3Ry
YW5zaXRpb25UYWJsZS5hZGQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbik7CisgICAgc3RydWN0dXJl
LT5tX3RyYW5zaXRpb25UYWJsZS5hZGQodm0sIHRyYW5zaXRpb24pOwogICAgIHRyYW5zaXRpb24t
PmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKICAgICBzdHJ1Y3R1cmUtPmNoZWNrT2Zmc2V0Q29u
c2lzdGVuY3koKTsKICAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KIAotU3RydWN0dXJlKiBTdHJ1
Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eU9mZnNldCYgb2Zmc2V0KQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJh
bnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQogewogICAgIEFTU0VSVCghc3RydWN0dXJl
LT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKIAotICAgIFN0cnVjdHVyZSogdHJhbnNpdGlv
biA9IHRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUpOworICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5
VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKTsKIAogICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPnJl
bW92ZShwcm9wZXJ0eU5hbWUpOwogCkBAIC00MDEsMTQgKzQwMSwxNCBAQCBTdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuCiAgICAgcmV0dXJuIHRyYW5zaXRpb247CiB9CiAK
LVN0cnVjdHVyZSogU3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTVmFsdWUgcHJvdG90eXBl
KQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24oVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7Ci0gICAgU3RydWN0
dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CisgICAgU3Ry
dWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogCi0gICAgdHJhbnNp
dGlvbi0+bV9wcm90b3R5cGUuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHByb3RvdHlwZSk7
CisgICAgdHJhbnNpdGlvbi0+bV9wcm90b3R5cGUuc2V0KHZtLCB0cmFuc2l0aW9uLCBwcm90b3R5
cGUpOwogCi0gICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnko
Z2xvYmFsRGF0YSk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldChnbG9iYWxE
YXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhn
bG9iYWxEYXRhLCB0cmFuc2l0aW9uKSk7CisgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3Bl
cnR5TWFwSWZOZWNlc3Nhcnkodm0pOworICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5z
ZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5n
KHZtLCB0cmFuc2l0aW9uKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUt
Pm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPnBpbigpOwogCkBAIC00MTYsMjIgKzQxNiwyMiBA
QCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhCiAgICAgcmV0dXJuIHRy
YW5zaXRpb247CiB9CiAKLVN0cnVjdHVyZSogU3RydWN0dXJlOjpkZXNwZWNpZnlGdW5jdGlvblRy
YW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
UHJvcGVydHlOYW1lIHJlcGxhY2VGdW5jdGlvbikKK1N0cnVjdHVyZSogU3RydWN0dXJlOjpkZXNw
ZWNpZnlGdW5jdGlvblRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJv
cGVydHlOYW1lIHJlcGxhY2VGdW5jdGlvbikKIHsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5tX3Nw
ZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCA8IG1heFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3Vu
dCk7Ci0gICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKGdsb2JhbERhdGEsIHN0cnVj
dHVyZSk7CisgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUp
OwogCiAgICAgKyt0cmFuc2l0aW9uLT5tX3NwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudDsKIAot
ICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KGdsb2JhbERh
dGEpOwotICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQoZ2xvYmFsRGF0YSwgdHJh
bnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoZ2xvYmFsRGF0
YSwgdHJhbnNpdGlvbikpOworICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElm
TmVjZXNzYXJ5KHZtKTsKKyAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0
cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSwgdHJh
bnNpdGlvbikpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNl
dDsKICAgICB0cmFuc2l0aW9uLT5waW4oKTsKIAogICAgIGlmICh0cmFuc2l0aW9uLT5tX3NwZWNp
ZmljRnVuY3Rpb25UaHJhc2hDb3VudCA9PSBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQp
Ci0gICAgICAgIHRyYW5zaXRpb24tPmRlc3BlY2lmeUFsbEZ1bmN0aW9ucyhnbG9iYWxEYXRhKTsK
KyAgICAgICAgdHJhbnNpdGlvbi0+ZGVzcGVjaWZ5QWxsRnVuY3Rpb25zKHZtKTsKICAgICBlbHNl
IHsKLSAgICAgICAgYm9vbCByZW1vdmVkID0gdHJhbnNpdGlvbi0+ZGVzcGVjaWZ5RnVuY3Rpb24o
Z2xvYmFsRGF0YSwgcmVwbGFjZUZ1bmN0aW9uKTsKKyAgICAgICAgYm9vbCByZW1vdmVkID0gdHJh
bnNpdGlvbi0+ZGVzcGVjaWZ5RnVuY3Rpb24odm0sIHJlcGxhY2VGdW5jdGlvbik7CiAgICAgICAg
IEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7CiAgICAgfQogCkBAIC00MzksMTMgKzQz
OSwxMyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UCiAgICAgcmV0
dXJuIHRyYW5zaXRpb247CiB9CiAKLVN0cnVjdHVyZSogU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFu
Z2VUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCitTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzKQogewogICAgIGlmICghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgp
KSB7Ci0gICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZShnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUpOworICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0
cnVjdHVyZSk7CiAKLSAgICAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZO
ZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUo
KS5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJs
ZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbikpOworICAgICAgICBzdHJ1Y3R1cmUt
Pm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSk7CisgICAgICAgIHRyYW5zaXRp
b24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVBy
b3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtLCB0cmFuc2l0aW9uKSk7CiAgICAgICAgIHRyYW5zaXRp
b24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKICAgICAgICAgdHJhbnNpdGlvbi0+
cGluKCk7CiAgICAgICAgIApAQCAtNDYxLDE0ICs0NjEsMTQgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYQogICAgIHJldHVybiBzdHJ1Y3R1cmU7CiB9CiAKLVN0cnVj
dHVyZSogU3RydWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIERpY3Rpb25hcnlLaW5kIGtpbmQpCitTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBEaWN0aW9uYXJ5S2luZCBraW5kKQogewogICAgIEFTU0VSVCghc3RydWN0
dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKICAgICAKLSAgICBTdHJ1Y3R1cmUqIHRy
YW5zaXRpb24gPSBjcmVhdGUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmUq
IHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAKLSAgICBzdHJ1Y3R1cmUtPm1h
dGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICB0cmFuc2l0
aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVy
ZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pKTsK
KyAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSk7Cisg
ICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0
dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0sIHRyYW5zaXRpb24pKTsKICAgICB0
cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlv
bi0+bV9kaWN0aW9uYXJ5S2luZCA9IGtpbmQ7CiAgICAgdHJhbnNpdGlvbi0+cGluKCk7CkBAIC00
NzcsMjAgKzQ3NywyMCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNp
CiAgICAgcmV0dXJuIHRyYW5zaXRpb247CiB9CiAKLVN0cnVjdHVyZSogU3RydWN0dXJlOjp0b0Nh
Y2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9DYWNoZWFibGVEaWN0
aW9uYXJ5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIHJl
dHVybiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgQ2FjaGVk
RGljdGlvbmFyeUtpbmQpOworICAgIHJldHVybiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBz
dHJ1Y3R1cmUsIENhY2hlZERpY3Rpb25hcnlLaW5kKTsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OnRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvVW5j
YWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
KQogewotICAgIHJldHVybiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVj
dHVyZSwgVW5jYWNoZWREaWN0aW9uYXJ5S2luZCk7CisgICAgcmV0dXJuIHRvRGljdGlvbmFyeVRy
YW5zaXRpb24odm0sIHN0cnVjdHVyZSwgVW5jYWNoZWREaWN0aW9uYXJ5S2luZCk7CiB9CiAKIC8v
IEluIGZ1dHVyZSB3ZSBtYXkgd2FudCB0byBjYWNoZSB0aGlzIHRyYW5zaXRpb24uCi1TdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6c2VhbFRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjpzZWFsVHJhbnNpdGlv
bihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIFN0cnVjdHVyZSogdHJhbnNp
dGlvbiA9IHByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUp
OworICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlv
bih2bSwgc3RydWN0dXJlKTsKIAogICAgIGlmICh0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkp
IHsKICAgICAgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gdHJhbnNpdGlvbi0+cHJv
cGVydHlUYWJsZSgpLT5lbmQoKTsKQEAgLTUwMyw5ICs1MDMsOSBAQCBTdHJ1Y3R1cmUqIFN0cnVj
dHVyZTo6c2VhbFRyYW5zaXRpb24oSlNHCiB9CiAKIC8vIEluIGZ1dHVyZSB3ZSBtYXkgd2FudCB0
byBjYWNoZSB0aGlzIHRyYW5zaXRpb24uCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZnJlZXplVHJh
bnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQor
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZyZWV6ZVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKIHsKLSAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBwcmV2ZW50RXh0ZW5z
aW9uc1RyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIHRy
YW5zaXRpb24gPSBwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24odm0sIHN0cnVjdHVyZSk7CiAK
ICAgICBpZiAodHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpKSB7CiAgICAgICAgIFByb3BlcnR5
VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCktPmJlZ2lu
KCk7CkBAIC01MjEsMTQgKzUyMSwxNCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZnJlZXplVHJh
bnNpdGlvbihKCiB9CiAKIC8vIEluIGZ1dHVyZSB3ZSBtYXkgd2FudCB0byBjYWNoZSB0aGlzIHRy
YW5zaXRpb24uCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUcmFuc2l0
aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRl
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CisgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3Jl
YXRlKHZtLCBzdHJ1Y3R1cmUpOwogCiAgICAgLy8gRG9uJ3Qgc2V0IG1fb2Zmc2V0LCBhcyBvbmUg
Y2FuIG5vdCB0cmFuc2l0aW9uIHRvIHRoaXMuCiAKLSAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXpl
UHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9w
ZXJ0eVRhYmxlKCkuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVBy
b3BlcnR5VGFibGVGb3JQaW5uaW5nKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pKTsKKyAgICBzdHJ1
Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSk7CisgICAgdHJhbnNp
dGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5
UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0sIHRyYW5zaXRpb24pKTsKICAgICB0cmFuc2l0aW9u
LT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+bV9wcmV2
ZW50RXh0ZW5zaW9ucyA9IHRydWU7CiAgICAgdHJhbnNpdGlvbi0+cGluKCk7CkBAIC01MzcsMTcg
KzUzNywxNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUCiAgICAg
cmV0dXJuIHRyYW5zaXRpb247CiB9CiAKLVByb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6dGFrZVBy
b3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIG93bmVyKQorUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjp0YWtlUHJvcGVydHlUYWJs
ZU9yQ2xvbmVJZlBpbm5lZChWTSYgdm0sIFN0cnVjdHVyZSogb3duZXIpCiB7Ci0gICAgbWF0ZXJp
YWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmluZyhnbG9iYWxEYXRhKTsKKyAgICBt
YXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5nKHZtKTsKICAgICBpZiAo
bV9pc1Bpbm5lZFByb3BlcnR5VGFibGUpCi0gICAgICAgIHJldHVybiBwcm9wZXJ0eVRhYmxlKCkt
PmNvcHkoZ2xvYmFsRGF0YSwgb3duZXIsIHByb3BlcnR5VGFibGUoKS0+c2l6ZSgpICsgMSk7Cisg
ICAgICAgIHJldHVybiBwcm9wZXJ0eVRhYmxlKCktPmNvcHkodm0sIG93bmVyLCBwcm9wZXJ0eVRh
YmxlKCktPnNpemUoKSArIDEpOwogICAgIFByb3BlcnR5VGFibGUqIHRha2VuUHJvcGVydHlUYWJs
ZSA9IHByb3BlcnR5VGFibGUoKS5nZXQoKTsKICAgICBwcm9wZXJ0eVRhYmxlKCkuY2xlYXIoKTsK
ICAgICByZXR1cm4gdGFrZW5Qcm9wZXJ0eVRhYmxlOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uS2luZCkKK1N0
cnVjdHVyZSogU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb25LaW5kKQogewog
ICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSB0b0F0dHJpYnV0ZXModHJhbnNpdGlvbktpbmQpOwog
ICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBuZXdJbmRleGluZ1R5cGUoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCksIHRyYW5zaXRpb25LaW5kKTsKQEAgLTU2
OCwyNiArNTY4LDI2IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXQK
ICAgICAgICAgcmV0dXJuIGV4aXN0aW5nVHJhbnNpdGlvbjsKICAgICB9CiAgICAgCi0gICAgU3Ry
dWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAg
dHJhbnNpdGlvbi0+c2V0UHJldmlvdXNJRChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1
cmUpOworICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsK
KyAgICB0cmFuc2l0aW9uLT5zZXRQcmV2aW91c0lEKHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUp
OwogICAgIHRyYW5zaXRpb24tPm1fYXR0cmlidXRlc0luUHJldmlvdXMgPSBhdHRyaWJ1dGVzOwog
ICAgIHRyYW5zaXRpb24tPm1faW5kZXhpbmdUeXBlID0gaW5kZXhpbmdUeXBlOwotICAgIHRyYW5z
aXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0
dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZChnbG9iYWxEYXRhLCB0cmFuc2l0
aW9uKSk7CisgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlv
biwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSwgdHJhbnNp
dGlvbikpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsK
ICAgICBjaGVja09mZnNldCh0cmFuc2l0aW9uLT5tX29mZnNldCwgdHJhbnNpdGlvbi0+aW5saW5l
Q2FwYWNpdHkoKSk7CiAgICAgCi0gICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5hZGQo
Z2xvYmFsRGF0YSwgdHJhbnNpdGlvbik7CisgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJs
ZS5hZGQodm0sIHRyYW5zaXRpb24pOwogICAgIHRyYW5zaXRpb24tPmNoZWNrT2Zmc2V0Q29uc2lz
dGVuY3koKTsKICAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KIAogLy8gSW4gZnV0dXJlIHdlIG1h
eSB3YW50IHRvIGNhY2hlIHRoaXMgcHJvcGVydHkuCi1ib29sIFN0cnVjdHVyZTo6aXNTZWFsZWQo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorYm9vbCBTdHJ1Y3R1cmU6OmlzU2VhbGVkKFZNJiB2
bSkKIHsKICAgICBpZiAoaXNFeHRlbnNpYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKKyAgICBt
YXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0pOwogICAgIGlmICghcHJvcGVydHlU
YWJsZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtNjAwLDEyICs2MDAsMTIgQEAgYm9v
bCBTdHJ1Y3R1cmU6OmlzU2VhbGVkKEpTR2xvYmFsRGF0YSYgZwogfQogCiAvLyBJbiBmdXR1cmUg
d2UgbWF5IHdhbnQgdG8gY2FjaGUgdGhpcyBwcm9wZXJ0eS4KLWJvb2wgU3RydWN0dXJlOjppc0Zy
b3plbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitib29sIFN0cnVjdHVyZTo6aXNGcm96ZW4o
Vk0mIHZtKQogewogICAgIGlmIChpc0V4dGVuc2libGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KGdsb2JhbERhdGEpOwor
ICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSk7CiAgICAgaWYgKCFwcm9w
ZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC02MTksNyArNjE5LDcgQEAg
Ym9vbCBTdHJ1Y3R1cmU6OmlzRnJvemVuKEpTR2xvYmFsRGF0YSYgZwogICAgIHJldHVybiB0cnVl
OwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU09iamVjdCogb2JqZWN0KQorU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKFZNJiB2bSwgSlNPYmplY3QqIG9i
amVjdCkKIHsKICAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7CiAgICAgQVNTRVJUKGlzRGlj
dGlvbmFyeSgpKTsKQEAgLTY0Miw3ICs2NDIsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Zmxh
dHRlbkRpY3Rpb25hcnlTCiAgICAgICAgIAogICAgICAgICAvLyBDb3BpZXMgaW4gb3VyIHZhbHVl
cyB0byB0aGVpciBjb21wYWN0ZWQgbG9jYXRpb25zLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcHJvcGVydHlDb3VudDsgaSsrKQotICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJl
Y3QoZ2xvYmFsRGF0YSwgb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoaSwgbV9pbmxpbmVDYXBhY2l0
eSksIHZhbHVlc1tpXSk7CisgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgb2Zmc2V0
Rm9yUHJvcGVydHlOdW1iZXIoaSwgbV9pbmxpbmVDYXBhY2l0eSksIHZhbHVlc1tpXSk7CiAKICAg
ICAgICAgcHJvcGVydHlUYWJsZSgpLT5jbGVhckRlbGV0ZWRPZmZzZXRzKCk7CiAgICAgICAgIGNo
ZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKQEAgLTY1MiwyNiArNjUyLDI2IEBAIFN0cnVjdHVyZSog
U3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVMKICAgICByZXR1cm4gdGhpczsKIH0KIAotUHJv
cGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQg
YXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKQorUHJvcGVydHlPZmZzZXQgU3RydWN0
dXJlOjphZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKQog
ewogICAgIEFTU0VSVCghZW51bWVyYXRpb25DYWNoZSgpKTsKIAogICAgIGlmIChtX3NwZWNpZmlj
RnVuY3Rpb25UaHJhc2hDb3VudCA9PSBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQpCiAg
ICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwogCi0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElm
TmVjZXNzYXJ5Rm9yUGlubmluZyhnbG9iYWxEYXRhKTsKKyAgICBtYXRlcmlhbGl6ZVByb3BlcnR5
TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5nKHZtKTsKICAgICAKICAgICBwaW4oKTsKIAotICAgIHJl
dHVybiBwdXRTcGVjaWZpY1ZhbHVlKGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRl
cywgc3BlY2lmaWNWYWx1ZSk7CisgICAgcmV0dXJuIHB1dFNwZWNpZmljVmFsdWUodm0sIHByb3Bl
cnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CiB9CiAKLVByb3BlcnR5T2Zmc2V0
IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitQcm9wZXJ0eU9mZnNldCBT
dHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEFTU0VSVChpc1VuY2FjaGVhYmxlRGljdGlvbmFy
eSgpKTsKICAgICBBU1NFUlQoIWVudW1lcmF0aW9uQ2FjaGUoKSk7CiAKLSAgICBtYXRlcmlhbGl6
ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5nKGdsb2JhbERhdGEpOworICAgIG1hdGVy
aWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcodm0pOwogCiAgICAgcGluKCk7
CiAgICAgcmV0dXJuIHJlbW92ZShwcm9wZXJ0eU5hbWUpOwpAQCAtNjg1LDIwICs2ODUsMjAgQEAg
dm9pZCBTdHJ1Y3R1cmU6OnBpbigpCiAgICAgbV9uYW1lSW5QcmV2aW91cy5jbGVhcigpOwogfQog
Ci12b2lkIFN0cnVjdHVyZTo6YWxsb2NhdGVSYXJlRGF0YShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCit2b2lkIFN0cnVjdHVyZTo6YWxsb2NhdGVSYXJlRGF0YShWTSYgdm0pCiB7CiAgICAgQVNT
RVJUKCF0eXBlSW5mbygpLnN0cnVjdHVyZUhhc1JhcmVEYXRhKCkpOwotICAgIFN0cnVjdHVyZVJh
cmVEYXRhKiByYXJlRGF0YSA9IFN0cnVjdHVyZVJhcmVEYXRhOjpjcmVhdGUoZ2xvYmFsRGF0YSwg
cHJldmlvdXMoKSk7CisgICAgU3RydWN0dXJlUmFyZURhdGEqIHJhcmVEYXRhID0gU3RydWN0dXJl
UmFyZURhdGE6OmNyZWF0ZSh2bSwgcHJldmlvdXMoKSk7CiAgICAgbV90eXBlSW5mbyA9IFR5cGVJ
bmZvKHR5cGVJbmZvKCkudHlwZSgpLCB0eXBlSW5mbygpLmZsYWdzKCkgfCBTdHJ1Y3R1cmVIYXNS
YXJlRGF0YSk7Ci0gICAgbV9wcmV2aW91c09yUmFyZURhdGEuc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHJhcmVEYXRhKTsKKyAgICBtX3ByZXZpb3VzT3JSYXJlRGF0YS5zZXQodm0sIHRoaXMsIHJhcmVE
YXRhKTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6OmNsb25lUmFyZURhdGFGcm9tKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgY29uc3QgU3RydWN0dXJlKiBvdGhlcikKK3ZvaWQgU3RydWN0dXJlOjpj
bG9uZVJhcmVEYXRhRnJvbShWTSYgdm0sIGNvbnN0IFN0cnVjdHVyZSogb3RoZXIpCiB7CiAgICAg
QVNTRVJUKG90aGVyLT50eXBlSW5mbygpLnN0cnVjdHVyZUhhc1JhcmVEYXRhKCkpOwotICAgIFN0
cnVjdHVyZVJhcmVEYXRhKiBuZXdSYXJlRGF0YSA9IFN0cnVjdHVyZVJhcmVEYXRhOjpjbG9uZShn
bG9iYWxEYXRhLCBvdGhlci0+cmFyZURhdGEoKSk7CisgICAgU3RydWN0dXJlUmFyZURhdGEqIG5l
d1JhcmVEYXRhID0gU3RydWN0dXJlUmFyZURhdGE6OmNsb25lKHZtLCBvdGhlci0+cmFyZURhdGEo
KSk7CiAgICAgbV90eXBlSW5mbyA9IFR5cGVJbmZvKHR5cGVJbmZvKCkudHlwZSgpLCB0eXBlSW5m
bygpLmZsYWdzKCkgfCBTdHJ1Y3R1cmVIYXNSYXJlRGF0YSk7Ci0gICAgbV9wcmV2aW91c09yUmFy
ZURhdGEuc2V0KGdsb2JhbERhdGEsIHRoaXMsIG5ld1JhcmVEYXRhKTsKKyAgICBtX3ByZXZpb3Vz
T3JSYXJlRGF0YS5zZXQodm0sIHRoaXMsIG5ld1JhcmVEYXRhKTsKIH0KIAogI2lmIERVTVBfUFJP
UEVSVFlNQVBfU1RBVFMKQEAgLTcyOSwyNSArNzI5LDI1IEBAIGlubGluZSB2b2lkIFN0cnVjdHVy
ZTo6Y2hlY2tDb25zaXN0ZW5jeSgKIAogI2VuZGlmCiAKLVByb3BlcnR5VGFibGUqIFN0cnVjdHVy
ZTo6Y29weVByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUq
IG93bmVyKQorUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZShWTSYg
dm0sIFN0cnVjdHVyZSogb3duZXIpCiB7CiAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9uZShnbG9iYWxEYXRh
LCBvd25lciwgKnByb3BlcnR5VGFibGUoKS5nZXQoKSk7CisgICAgcmV0dXJuIFByb3BlcnR5VGFi
bGU6OmNsb25lKHZtLCBvd25lciwgKnByb3BlcnR5VGFibGUoKS5nZXQoKSk7CiB9CiAKLVByb3Bl
cnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvd25lcikKK1Byb3BlcnR5VGFibGUqIFN0cnVj
dHVyZTo6Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKFZNJiB2bSwgU3RydWN0dXJlKiBvd25l
cikKIHsKICAgICBpZiAocHJvcGVydHlUYWJsZSgpKQotICAgICAgICByZXR1cm4gUHJvcGVydHlU
YWJsZTo6Y2xvbmUoZ2xvYmFsRGF0YSwgb3duZXIsICpwcm9wZXJ0eVRhYmxlKCkuZ2V0KCkpOwot
ICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgbnVtYmVyT2ZTbG90
c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKKyAgICAgICAgcmV0
dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCBvd25lciwgKnByb3BlcnR5VGFibGUoKS5nZXQo
KSk7CisgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNyZWF0ZSh2bSwgbnVtYmVyT2ZTbG90c0Zv
ckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKIH0KIAotUHJvcGVydHlP
ZmZzZXQgU3RydWN0dXJlOjpnZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgSlNDZWxsKiYgc3BlY2lmaWNW
YWx1ZSkKK1Byb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFs
dWUpCiB7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmc19pbmZvKTsK
IAotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKKyAg
ICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0pOwogICAgIGlmICghcHJvcGVy
dHlUYWJsZSgpKQogICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKIApAQCAtNzYwLDkgKzc2
MCw5IEBAIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KEpTR2xvYmFsRGEKICAgICByZXR1
cm4gZW50cnktPm9mZnNldDsKIH0KIAotYm9vbCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9u
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK2Jv
b2wgU3RydWN0dXJlOjpkZXNwZWNpZnlGdW5jdGlvbihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCiB7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KGdsb2Jh
bERhdGEpOworICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSk7CiAgICAg
aWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNzc1LDkg
Kzc3NSw5IEBAIGJvb2wgU3RydWN0dXJlOjpkZXNwZWNpZnlGdW5jdGlvbihKU0dsb2IKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeUFsbEZ1bmN0aW9ucyhK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5QWxsRnVu
Y3Rpb25zKFZNJiB2bSkKIHsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnko
Z2xvYmFsRGF0YSk7CisgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtKTsK
ICAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC03ODYsOSAr
Nzg2LDkgQEAgdm9pZCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeUFsbEZ1bmN0aW9ucyhKUwogICAgICAg
ICBpdGVyLT5zcGVjaWZpY1ZhbHVlLmNsZWFyKCk7CiB9CiAKLVByb3BlcnR5T2Zmc2V0IFN0cnVj
dHVyZTo6cHV0U3BlY2lmaWNWYWx1ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNW
YWx1ZSkKK1Byb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cHV0U3BlY2lmaWNWYWx1ZShWTSYgdm0s
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCog
c3BlY2lmaWNWYWx1ZSkKIHsKLSAgICBBU1NFUlQoIUpTQzo6aXNWYWxpZE9mZnNldChnZXQoZ2xv
YmFsRGF0YSwgcHJvcGVydHlOYW1lKSkpOworICAgIEFTU0VSVCghSlNDOjppc1ZhbGlkT2Zmc2V0
KGdldCh2bSwgcHJvcGVydHlOYW1lKSkpOwogCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAg
IGlmIChhdHRyaWJ1dGVzICYgRG9udEVudW0pCkBAIC03OTcsMTEgKzc5NywxMSBAQCBQcm9wZXJ0
eU9mZnNldCBTdHJ1Y3R1cmU6OnB1dFNwZWNpZmljVmFsCiAgICAgU3RyaW5nSW1wbCogcmVwID0g
cHJvcGVydHlOYW1lLnVpZCgpOwogCiAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAg
IGNyZWF0ZVByb3BlcnR5TWFwKGdsb2JhbERhdGEpOworICAgICAgICBjcmVhdGVQcm9wZXJ0eU1h
cCh2bSk7CiAKICAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSBwcm9wZXJ0eVRhYmxlKCkt
Pm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7CiAKLSAgICBwcm9wZXJ0eVRhYmxlKCktPmFk
ZChQcm9wZXJ0eU1hcEVudHJ5KGdsb2JhbERhdGEsIHRoaXMsIHJlcCwgbmV3T2Zmc2V0LCBhdHRy
aWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5
T2Zmc2V0TWF5Q2hhbmdlKTsKKyAgICBwcm9wZXJ0eVRhYmxlKCktPmFkZChQcm9wZXJ0eU1hcEVu
dHJ5KHZtLCB0aGlzLCByZXAsIG5ld09mZnNldCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSks
IG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE1heUNoYW5nZSk7CiAgICAg
CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIHJldHVybiBuZXdPZmZzZXQ7CkBAIC04Mjks
MTcgKzgyOSwxNyBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShQcm9wZXJ0CiAg
ICAgcmV0dXJuIG9mZnNldDsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6OmNyZWF0ZVByb3BlcnR5TWFw
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgY2FwYWNpdHkpCit2b2lkIFN0cnVj
dHVyZTo6Y3JlYXRlUHJvcGVydHlNYXAoVk0mIHZtLCB1bnNpZ25lZCBjYXBhY2l0eSkKIHsKICAg
ICBBU1NFUlQoIXByb3BlcnR5VGFibGUoKSk7CiAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0g
ICAgcHJvcGVydHlUYWJsZSgpLnNldChnbG9iYWxEYXRhLCB0aGlzLCBQcm9wZXJ0eVRhYmxlOjpj
cmVhdGUoZ2xvYmFsRGF0YSwgY2FwYWNpdHkpKTsKKyAgICBwcm9wZXJ0eVRhYmxlKCkuc2V0KHZt
LCB0aGlzLCBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUodm0sIGNhcGFjaXR5KSk7CiB9CiAKLXZvaWQg
U3RydWN0dXJlOjpnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1v
ZGUgbW9kZSkKK3ZvaWQgU3RydWN0dXJlOjpnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShW
TSYgdm0sIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKIHsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0
YSk7CisgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtKTsKICAgICBpZiAo
IXByb3BlcnR5VGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC04ODYsNyArODg2LDcgQEAg
dm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgICAgICB0aGlzT2Jq
ZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUuY2xlYXIoKTsKIH0KIAotYm9vbCBTdHJ1Y3R1cmU6
OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitib29sIFN0cnVjdHVyZTo6cHJvdG90eXBl
Q2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSkKIHsKICAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKICAgICBpZiAo
aSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCkBAIC05MDEsNyArOTAxLDcgQEAgYm9vbCBT
dHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZQogICAgICAgICAKICAgICAgICAgdW5z
aWduZWQgYXR0cmlidXRlczsKICAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBjdXJyZW50LT5nZXQoZ2xvYmFsRGF0YSwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gY3VycmVudC0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNw
ZWNpZmljVmFsdWUpOwogICAgICAgICBpZiAoIUpTQzo6aXNWYWxpZE9mZnNldChvZmZzZXQpKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw1NyAr
NjksNTcgQEAgcHVibGljOgogCiAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKIAotICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENsYXNzSW5mbyosIEluZGV4aW5n
VHlwZSA9IE5vbkFycmF5LCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9IDApOworICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5
cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZvKiwgSW5kZXhpbmdUeXBlID0gTm9u
QXJyYXksIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5ID0gMCk7CiAKIHByb3RlY3RlZDoKLSAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGdsb2JhbERhdGEpOworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAg
IEFTU0VSVChtX3Byb3RvdHlwZSk7CiAgICAgICAgIEFTU0VSVChtX3Byb3RvdHlwZS5pc09iamVj
dCgpIHx8IG1fcHJvdG90eXBlLmlzTnVsbCgpKTsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ3JlYXRpbmdFYXJseUNlbGxUYWcpCisg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0sIENyZWF0aW5nRWFybHlDZWxsVGFnKQogICAg
IHsKLSAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgdGhpcywgQ3JlYXRp
bmdFYXJseUNlbGwpOworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgdGhpcywgQ3Jl
YXRpbmdFYXJseUNlbGwpOwogICAgICAgICBBU1NFUlQobV9wcm90b3R5cGUpOwogICAgICAgICBB
U1NFUlQobV9wcm90b3R5cGUuaXNOdWxsKCkpOwotICAgICAgICBBU1NFUlQoIWdsb2JhbERhdGEu
c3RydWN0dXJlU3RydWN0dXJlKTsKKyAgICAgICAgQVNTRVJUKCF2bS5zdHJ1Y3R1cmVTdHJ1Y3R1
cmUpOwogICAgIH0KIAogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGR1bXBTdGF0aXN0aWNzKCk7
CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBhZGRQcm9wZXJ0eVRy
YW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3BlcnR5T2Zmc2V0Jik7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlUcmFuc2l0
aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBK
U0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3BlcnR5T2Zmc2V0Jik7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0
cnVjdHVyZShTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpT
Q2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQmKTsKLSAgICBzdGF0aWMgU3RydWN0
dXJlKiByZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwg
U3RydWN0dXJlKiwgSlNWYWx1ZSBwcm90b3R5cGUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBTdHJ1Y3R1cmUqIGRlc3BlY2lmeUZ1bmN0aW9uVHJhbnNpdGlvbihKU0dsb2JhbERhdGEm
LCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUpOwotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGF0dHJp
YnV0ZUNoYW5nZVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgUHJvcGVydHlO
YW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLSAgICBzdGF0aWMgU3RydWN0dXJlKiB0b0NhY2hl
YWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwotICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIHRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihKU0ds
b2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBzZWFsVHJhbnNp
dGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBm
cmVlemVUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwotICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIHByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1
Y3R1cmUqKTsKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBub25Qcm9wZXJ0eVRyYW5zaXRpb24oSlNH
bG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiByZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0Jik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIFN0cnVjdHVyZSogY2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSos
IEpTVmFsdWUgcHJvdG90eXBlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0
dXJlKiBkZXNwZWNpZnlGdW5jdGlvblRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0
eU5hbWUpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24o
Vk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOworICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIHRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBT
dHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiB0b1VuY2FjaGVhYmxlRGljdGlvbmFy
eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBzZWFs
VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGZyZWV6
ZVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBwcmV2
ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBub25Qcm9wZXJ0eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBOb25Qcm9wZXJ0
eVRyYW5zaXRpb24pOwogCi0gICAgYm9vbCBpc1NlYWxlZChKU0dsb2JhbERhdGEmKTsKLSAgICBi
b29sIGlzRnJvemVuKEpTR2xvYmFsRGF0YSYpOworICAgIGJvb2wgaXNTZWFsZWQoVk0mKTsKKyAg
ICBib29sIGlzRnJvemVuKFZNJik7CiAgICAgYm9vbCBpc0V4dGVuc2libGUoKSBjb25zdCB7IHJl
dHVybiAhbV9wcmV2ZW50RXh0ZW5zaW9uczsgfQogICAgIGJvb2wgZGlkVHJhbnNpdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fZGlkVHJhbnNpdGlvbjsgfQogICAgIGJvb2wgcHV0V2lsbEdyb3dPdXRP
ZkxpbmVTdG9yYWdlKCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IHN1Z2dlc3RlZE5l
d091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpOyAKIAotICAgIFN0cnVjdHVyZSogZmxhdHRlbkRp
Y3Rpb25hcnlTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiwgSlNPYmplY3QqKTsKKyAgICBTdHJ1Y3R1
cmUqIGZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKFZNJiwgSlNPYmplY3QqKTsKIAogICAgIHN0
YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQ2VsbCopOwogCiAgICAgLy8gVGhlc2Ugc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9u
LiAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZzZXQgYWRkUHJvcGVydHlXaXRo
b3V0VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSk7Ci0gICAgUHJvcGVydHlPZmZzZXQgcmVtb3Zl
UHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUpOwot
ICAgIHZvaWQgc2V0UHJvdG90eXBlV2l0aG91dFRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkgeyBtX3Byb3RvdHlwZS5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgcHJvdG90eXBlKTsgfQorICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb3BlcnR5T2Zmc2V0
IGFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSk7CisgICAgUHJvcGVydHlPZmZzZXQg
cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSk7CisgICAg
dm9pZCBzZXRQcm90b3R5cGVXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIEpTVmFsdWUgcHJvdG90
eXBlKSB7IG1fcHJvdG90eXBlLnNldCh2bSwgdGhpcywgcHJvdG90eXBlKTsgfQogICAgICAgICAK
ICAgICBib29sIGlzRGljdGlvbmFyeSgpIGNvbnN0IHsgcmV0dXJuIG1fZGljdGlvbmFyeUtpbmQg
IT0gTm9uZURpY3Rpb25hcnlLaW5kOyB9CiAgICAgYm9vbCBpc1VuY2FjaGVhYmxlRGljdGlvbmFy
eSgpIGNvbnN0IHsgcmV0dXJuIG1fZGljdGlvbmFyeUtpbmQgPT0gVW5jYWNoZWREaWN0aW9uYXJ5
S2luZDsgfQpAQCAtMTQ0LDE4ICsxNDQsMTggQEAgcHVibGljOgogICAgIE5vblByb3BlcnR5VHJh
bnNpdGlvbiBzdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkgY29uc3Q7CiAgICAgICAg
IAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2ds
b2JhbE9iamVjdC5nZXQoKTsgfQotICAgIHZvaWQgc2V0R2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgeyBtX2dsb2JhbE9i
amVjdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgZ2xvYmFsT2JqZWN0KTsgfQorICAgIHZvaWQgc2V0
R2xvYmFsT2JqZWN0KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgeyBtX2ds
b2JhbE9iamVjdC5zZXQodm0sIHRoaXMsIGdsb2JhbE9iamVjdCk7IH0KICAgICAgICAgCiAgICAg
SlNWYWx1ZSBzdG9yZWRQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb3RvdHlwZS5nZXQo
KTsgfQogICAgIEpTVmFsdWUgcHJvdG90eXBlRm9yTG9va3VwKEV4ZWNTdGF0ZSopIGNvbnN0Owog
ICAgIEpTVmFsdWUgcHJvdG90eXBlRm9yTG9va3VwKEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAg
ICAgSlNWYWx1ZSBwcm90b3R5cGVGb3JMb29rdXAoQ29kZUJsb2NrKikgY29uc3Q7Ci0gICAgU3Ry
dWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0
KikgY29uc3Q7CisgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluKFZNJiwgSlNHbG9i
YWxPYmplY3QqKSBjb25zdDsKICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4oRXhl
Y1N0YXRlKikgY29uc3Q7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOwogICAgICAgICAKICAgICAvLyBXaWxsIGp1c3QgdGhlIHByb3RvdHlwZSBj
aGFpbiBpbnRlcmNlcHQgdGhpcyBwcm9wZXJ0eSBhY2Nlc3M/Ci0gICAgYm9vbCBwcm90b3R5cGVD
aGFpbk1heUludGVyY2VwdFN0b3JlVG8oSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lKTsKKyAg
ICBib29sIHByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYsIFByb3BlcnR5TmFt
ZSk7CiAgICAgICAgIAogICAgIGJvb2wgdHJhbnNpdGlvbkRpZEludm9sdmVTcGVjaWZpY1ZhbHVl
KCkgY29uc3QgeyByZXR1cm4gISFtX3NwZWNpZmljVmFsdWVJblByZXZpb3VzOyB9CiAgICAgICAg
IApAQCAtMjMxLDkgKzIzMSw5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgbWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAKLSAgICBQcm9w
ZXJ0eU9mZnNldCBnZXQoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lKTsKLSAgICBQcm9wZXJ0
eU9mZnNldCBnZXQoSlNHbG9iYWxEYXRhJiwgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUpOwotICAg
IEpTX0VYUE9SVF9QUklWQVRFIFByb3BlcnR5T2Zmc2V0IGdldChKU0dsb2JhbERhdGEmLCBQcm9w
ZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBKU0NlbGwqJiBzcGVjaWZpY1ZhbHVlKTsK
KyAgICBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBQcm9wZXJ0eU5hbWUpOworICAgIFByb3BlcnR5
T2Zmc2V0IGdldChWTSYsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBh
dHRyaWJ1dGVzLCBKU0NlbGwqJiBzcGVjaWZpY1ZhbHVlKTsKIAogICAgIGJvb2wgaGFzR2V0dGVy
U2V0dGVyUHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzR2V0dGVyU2V0dGVyUHJvcGVy
dGllczsgfQogICAgIGJvb2wgaGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNs
dWRpbmdQcm90bygpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmVhZE9ubHlPckdldHRlclNldHRlclBy
b3BlcnRpZXNFeGNsdWRpbmdQcm90bzsgfQpAQCAtMjU2LDEyICsyNTYsMTIgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gIUpTQzo6aXNWYWxpZE9mZnNldChtX29mZnNldCk7CiAgICAgfQogCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZXNwZWNpZnlEaWN0aW9uYXJ5RnVuY3Rpb24oSlNH
bG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGRl
c3BlY2lmeURpY3Rpb25hcnlGdW5jdGlvbihWTSYsIFByb3BlcnR5TmFtZSk7CiAgICAgdm9pZCBk
aXNhYmxlU3BlY2lmaWNGdW5jdGlvblRyYWNraW5nKCkgeyBtX3NwZWNpZmljRnVuY3Rpb25UaHJh
c2hDb3VudCA9IG1heFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudDsgfQogCi0gICAgdm9pZCBz
ZXRFbnVtZXJhdGlvbkNhY2hlKEpTR2xvYmFsRGF0YSYsIEpTUHJvcGVydHlOYW1lSXRlcmF0b3Iq
IGVudW1lcmF0aW9uQ2FjaGUpOyAvLyBEZWZpbmVkIGluIEpTUHJvcGVydHlOYW1lSXRlcmF0b3Iu
aC4KKyAgICB2b2lkIHNldEVudW1lcmF0aW9uQ2FjaGUoVk0mLCBKU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yKiBlbnVtZXJhdGlvbkNhY2hlKTsgLy8gRGVmaW5lZCBpbiBKU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yLmguCiAgICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogZW51bWVyYXRpb25DYWNoZSgpOyAv
LyBEZWZpbmVkIGluIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaC4KLSAgICB2b2lkIGdldFByb3Bl
cnR5TmFtZXNGcm9tU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKKyAgICB2b2lkIGdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJl
KFZNJiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAgICAgSlNTdHJp
bmcqIG9iamVjdFRvU3RyaW5nVmFsdWUoKQogICAgIHsKQEAgLTI3MCwxMSArMjcwLDExIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHJhcmVEYXRhKCktPm9iamVjdFRvU3RyaW5nVmFsdWUoKTsK
ICAgICB9CiAKLSAgICB2b2lkIHNldE9iamVjdFRvU3RyaW5nVmFsdWUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBjb25zdCBKU0NlbGwqIG93bmVyLCBKU1N0cmluZyogdmFsdWUpCisgICAgdm9p
ZCBzZXRPYmplY3RUb1N0cmluZ1ZhbHVlKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNT
dHJpbmcqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF0eXBlSW5mbygpLnN0cnVjdHVyZUhh
c1JhcmVEYXRhKCkpCi0gICAgICAgICAgICBhbGxvY2F0ZVJhcmVEYXRhKGdsb2JhbERhdGEpOwot
ICAgICAgICByYXJlRGF0YSgpLT5zZXRPYmplY3RUb1N0cmluZ1ZhbHVlKGdsb2JhbERhdGEsIG93
bmVyLCB2YWx1ZSk7CisgICAgICAgICAgICBhbGxvY2F0ZVJhcmVEYXRhKHZtKTsKKyAgICAgICAg
cmFyZURhdGEoKS0+c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZSh2bSwgb3duZXIsIHZhbHVlKTsKICAg
ICB9CiAKICAgICBib29sIHN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKQpAQCAtMzE5LDcgKzMxOSw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1f
aW5kZXhpbmdUeXBlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNHbG9iYWxEYXRhJik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJik7CiAgICAgICAgIAogICAgIGJvb2wgdHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNC
ZWVuSW52YWxpZGF0ZWQoKSBjb25zdAogICAgIHsKQEAgLTM0Nyw1NCArMzQ3LDU0IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cnVjdHVyZShKU0dsb2JhbERhdGEmLCBKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENsYXNzSW5m
byosIEluZGV4aW5nVHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpOwotICAgIFN0cnVjdHVy
ZShKU0dsb2JhbERhdGEmKTsKLSAgICBTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiwgY29uc3QgU3Ry
dWN0dXJlKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0lu
Zm8qLCBJbmRleGluZ1R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5KTsKKyAgICBTdHJ1Y3R1
cmUoVk0mKTsKKyAgICBTdHJ1Y3R1cmUoVk0mLCBjb25zdCBTdHJ1Y3R1cmUqKTsKIAotICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBjb25zdCBTdHJ1Y3R1cmUqKTsK
KyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoVk0mLCBjb25zdCBTdHJ1Y3R1cmUqKTsKICAg
ICAgICAgCiAgICAgdHlwZWRlZiBlbnVtIHsgCiAgICAgICAgIE5vbmVEaWN0aW9uYXJ5S2luZCA9
IDAsCiAgICAgICAgIENhY2hlZERpY3Rpb25hcnlLaW5kID0gMSwKICAgICAgICAgVW5jYWNoZWRE
aWN0aW9uYXJ5S2luZCA9IDIKICAgICB9IERpY3Rpb25hcnlLaW5kOwotICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIHRvRGljdGlvbmFyeVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwg
RGljdGlvbmFyeUtpbmQpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvRGljdGlvbmFyeVRyYW5z
aXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBEaWN0aW9uYXJ5S2luZCk7CiAKLSAgICBQcm9wZXJ0eU9m
ZnNldCBwdXRTcGVjaWZpY1ZhbHVlKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgdW5zaWdu
ZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKTsKKyAgICBQcm9wZXJ0eU9mZnNl
dCBwdXRTcGVjaWZpY1ZhbHVlKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
LCBKU0NlbGwqIHNwZWNpZmljVmFsdWUpOwogICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZShQcm9w
ZXJ0eU5hbWUpOwogCi0gICAgdm9pZCBjcmVhdGVQcm9wZXJ0eU1hcChKU0dsb2JhbERhdGEmLCB1
bnNpZ25lZCBrZXlDb3VudCA9IDApOworICAgIHZvaWQgY3JlYXRlUHJvcGVydHlNYXAoVk0mLCB1
bnNpZ25lZCBrZXlDb3VudCA9IDApOwogICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpOwogCi0g
ICAgYm9vbCBkZXNwZWNpZnlGdW5jdGlvbihKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUpOwot
ICAgIHZvaWQgZGVzcGVjaWZ5QWxsRnVuY3Rpb25zKEpTR2xvYmFsRGF0YSYpOworICAgIGJvb2wg
ZGVzcGVjaWZ5RnVuY3Rpb24oVk0mLCBQcm9wZXJ0eU5hbWUpOworICAgIHZvaWQgZGVzcGVjaWZ5
QWxsRnVuY3Rpb25zKFZNJik7CiAKICAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4mIHBy
b3BlcnR5VGFibGUoKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiB0YWtlUHJvcGVydHlUYWJsZU9yQ2xv
bmVJZlBpbm5lZChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG93bmVyKTsKLSAgICBQcm9wZXJ0
eVRhYmxlKiBjb3B5UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG93bmVy
KTsKLSAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoSlNHbG9i
YWxEYXRhJiwgU3RydWN0dXJlKiBvd25lcik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBt
YXRlcmlhbGl6ZVByb3BlcnR5TWFwKEpTR2xvYmFsRGF0YSYpOwotICAgIHZvaWQgbWF0ZXJpYWxp
emVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICBQ
cm9wZXJ0eVRhYmxlKiB0YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZChWTSYsIFN0cnVj
dHVyZSogb3duZXIpOworICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0eVRhYmxlKFZNJiwg
U3RydWN0dXJlKiBvd25lcik7CisgICAgUHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGVG
b3JQaW5uaW5nKFZNJiwgU3RydWN0dXJlKiBvd25lcik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFZNJik7CisgICAgdm9pZCBtYXRlcmlhbGl6ZVBy
b3BlcnR5TWFwSWZOZWNlc3NhcnkoVk0mIHZtKQogICAgIHsKICAgICAgICAgQVNTRVJUKHN0cnVj
dHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmc19pbmZvKTsKICAgICAgICAgQVNTRVJUKGNoZWNrT2Zm
c2V0Q29uc2lzdGVuY3koKSk7CiAgICAgICAgIGlmICghcHJvcGVydHlUYWJsZSgpICYmIHByZXZp
b3VzSUQoKSkKLSAgICAgICAgICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXAoZ2xvYmFsRGF0YSk7
CisgICAgICAgICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwKHZtKTsKICAgICB9Ci0gICAgdm9p
ZCBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5nKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKKyAgICB2b2lkIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2Fy
eUZvclBpbm5pbmcoVk0mIHZtKQogICAgIHsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5j
bGFzc0luZm8oKSA9PSAmc19pbmZvKTsKICAgICAgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgp
OwogICAgICAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgICAgIG1hdGVyaWFsaXpl
UHJvcGVydHlNYXAoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5
TWFwKHZtKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFByZXZpb3VzSUQoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24sIFN0cnVjdHVyZSogc3RydWN0dXJlKQor
ICAgIHZvaWQgc2V0UHJldmlvdXNJRChWTSYgdm0sIFN0cnVjdHVyZSogdHJhbnNpdGlvbiwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBpZiAodHlwZUluZm8oKS5zdHJ1Y3R1
cmVIYXNSYXJlRGF0YSgpKQotICAgICAgICAgICAgcmFyZURhdGEoKS0+c2V0UHJldmlvdXNJRChn
bG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgcmFyZURhdGEo
KS0+c2V0UHJldmlvdXNJRCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbV9wcmV2aW91c09yUmFyZURhdGEuc2V0KGdsb2JhbERhdGEsIHRyYW5z
aXRpb24sIHN0cnVjdHVyZSk7CisgICAgICAgICAgICBtX3ByZXZpb3VzT3JSYXJlRGF0YS5zZXQo
dm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZSk7CiAgICAgfQogCiAgICAgdm9pZCBjbGVhclByZXZp
b3VzSUQoKQpAQCAtNDMwLDggKzQzMCw4IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgIGJvb2wg
Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0OwogCi0gICAgdm9pZCBhbGxvY2F0ZVJhcmVE
YXRhKEpTR2xvYmFsRGF0YSYpOwotICAgIHZvaWQgY2xvbmVSYXJlRGF0YUZyb20oSlNHbG9iYWxE
YXRhJiwgY29uc3QgU3RydWN0dXJlKik7CisgICAgdm9pZCBhbGxvY2F0ZVJhcmVEYXRhKFZNJik7
CisgICAgdm9pZCBjbG9uZVJhcmVEYXRhRnJvbShWTSYsIGNvbnN0IFN0cnVjdHVyZSopOwogCiAg
ICAgc3RhdGljIGNvbnN0IGludCBzX21heFRyYW5zaXRpb25MZW5ndGggPSA2NDsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAko
cmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlQ2hhaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIAogQ2xhc3NJbmZvIFN0cnVjdHVyZUNoYWluOjpzX2luZm8gPSB7ICJTdHJ1Y3R1
cmVDaGFpbiIsIDAsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoU3RydWN0dXJlQ2hhaW4pIH07
CiAKLVN0cnVjdHVyZUNoYWluOjpTdHJ1Y3R1cmVDaGFpbihKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIHN0cnVj
dHVyZSkKK1N0cnVjdHVyZUNoYWluOjpTdHJ1Y3R1cmVDaGFpbihWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgIDogSlNDZWxsKHZtLCBzdHJ1Y3R1cmUpCiB7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAkocmV2aXNp
b24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hh
aW4uaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTYgKzQ2LDE2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKIAotICAgICAgICBzdGF0
aWMgU3RydWN0dXJlQ2hhaW4qIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVj
dHVyZSogaGVhZCkKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZUNoYWluKiBjcmVhdGUoVk0mIHZt
LCBTdHJ1Y3R1cmUqIGhlYWQpCiAgICAgICAgIHsgCi0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFp
biogY2hhaW4gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmVDaGFpbj4oZ2xv
YmFsRGF0YS5oZWFwKSkgU3RydWN0dXJlQ2hhaW4oZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJ1
Y3R1cmVDaGFpblN0cnVjdHVyZS5nZXQoKSk7Ci0gICAgICAgICAgICBjaGFpbi0+ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSwgaGVhZCk7CisgICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hh
aW4gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmVDaGFpbj4odm0uaGVhcCkp
IFN0cnVjdHVyZUNoYWluKHZtLCB2bS5zdHJ1Y3R1cmVDaGFpblN0cnVjdHVyZS5nZXQoKSk7Cisg
ICAgICAgICAgICBjaGFpbi0+ZmluaXNoQ3JlYXRpb24odm0sIGhlYWQpOwogICAgICAgICAgICAg
cmV0dXJuIGNoYWluOwogICAgICAgICB9CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
KiBoZWFkKCkgeyByZXR1cm4gbV92ZWN0b3IuZ2V0KCk7IH0KICAgICAgICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSB7IHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oQ29tcG91bmRUeXBlLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuKSwgJnNfaW5mbyk7IH0KKyAg
ICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpIHsgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ29tcG91bmRU
eXBlLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuKSwgJnNfaW5mbyk7IH0KICAgICAgICAgCiAgICAg
ICAgIHN0YXRpYyBDbGFzc0luZm8gc19pbmZvOwogCkBAIC02NCw5ICs2NCw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgcHJv
dGVjdGVkOgotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKiBoZWFkKQorICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgU3RydWN0dXJlKiBoZWFkKQogICAgICAgICB7Ci0gICAgICAgICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKICAgICAgICAgICAgIHNpemVfdCBzaXplID0gMDsKICAgICAgICAgICAgIGZvciAoU3RydWN0
dXJlKiBjdXJyZW50ID0gaGVhZDsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnN0b3JlZFBy
b3RvdHlwZSgpLmlzTnVsbCgpID8gMCA6IGFzT2JqZWN0KGN1cnJlbnQtPnN0b3JlZFByb3RvdHlw
ZSgpKS0+c3RydWN0dXJlKCkpCiAgICAgICAgICAgICAgICAgKytzaXplOwpAQCAtNzUsMTMgKzc1
LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgICAgICBzaXplX3QgaSA9IDA7CiAgICAg
ICAgICAgICBmb3IgKFN0cnVjdHVyZSogY3VycmVudCA9IGhlYWQ7IGN1cnJlbnQ7IGN1cnJlbnQg
PSBjdXJyZW50LT5zdG9yZWRQcm90b3R5cGUoKS5pc051bGwoKSA/IDAgOiBhc09iamVjdChjdXJy
ZW50LT5zdG9yZWRQcm90b3R5cGUoKSktPnN0cnVjdHVyZSgpKQotICAgICAgICAgICAgICAgIG1f
dmVjdG9yW2krK10uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGN1cnJlbnQpOworICAgICAgICAgICAg
ICAgIG1fdmVjdG9yW2krK10uc2V0KHZtLCB0aGlzLCBjdXJyZW50KTsKICAgICAgICAgfQogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsK
ICAgICAgICAgCi0gICAgICAgIFN0cnVjdHVyZUNoYWluKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVy
ZSopOworICAgICAgICBTdHJ1Y3R1cmVDaGFpbihWTSYsIFN0cnVjdHVyZSopOwogICAgICAgICBP
d25BcnJheVB0cjxXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiA+IG1fdmVjdG9yOwogICAgIH07CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxp
bmVzLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMzUgKzMxLDM1IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNyZWF0ZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5m
byogY2xhc3NJbmZvLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCB1bnNpZ25lZCBpbmxpbmVD
YXBhY2l0eSkKK2lubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y3JlYXRlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJ
bmZvJiB0eXBlSW5mbywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIEluZGV4aW5nVHlwZSBp
bmRleGluZ1R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5KQogewotICAgIEFTU0VSVChnbG9i
YWxEYXRhLnN0cnVjdHVyZVN0cnVjdHVyZSk7CisgICAgQVNTRVJUKHZtLnN0cnVjdHVyZVN0cnVj
dHVyZSk7CiAgICAgQVNTRVJUKGNsYXNzSW5mbyk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmU+KGdsb2JhbERhdGEuaGVhcCkp
IFN0cnVjdHVyZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgdHlwZUluZm8s
IGNsYXNzSW5mbywgaW5kZXhpbmdUeXBlLCBpbmxpbmVDYXBhY2l0eSk7Ci0gICAgc3RydWN0dXJl
LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cnVjdHVyZT4odm0uaGVhcCkpIFN0cnVjdHVy
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5cGVJbmZvLCBjbGFzc0luZm8sIGluZGV4
aW5nVHlwZSwgaW5saW5lQ2FwYWNpdHkpOworICAgIHN0cnVjdHVyZS0+ZmluaXNoQ3JlYXRpb24o
dm0pOwogICAgIHJldHVybiBzdHJ1Y3R1cmU7CiB9CiAKLWlubGluZSBTdHJ1Y3R1cmUqIFN0cnVj
dHVyZTo6Y3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK2lubGluZSBT
dHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSkKIHsKLSAgICBBU1NF
UlQoIWdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0dXJlKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cnVjdHVyZT4oZ2xvYmFsRGF0YS5o
ZWFwKSkgU3RydWN0dXJlKGdsb2JhbERhdGEpOwotICAgIHN0cnVjdHVyZS0+ZmluaXNoQ3JlYXRp
b24oZ2xvYmFsRGF0YSwgQ3JlYXRpbmdFYXJseUNlbGwpOworICAgIEFTU0VSVCghdm0uc3RydWN0
dXJlU3RydWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPFN0cnVjdHVyZT4odm0uaGVhcCkpIFN0cnVjdHVyZSh2bSk7CisgICAgc3Ry
dWN0dXJlLT5maW5pc2hDcmVhdGlvbih2bSwgQ3JlYXRpbmdFYXJseUNlbGwpOwogICAgIHJldHVy
biBzdHJ1Y3R1cmU7CiB9CiAKLWlubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y3JlYXRlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitpbmxp
bmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNyZWF0ZShWTSYgdm0sIGNvbnN0IFN0cnVjdHVyZSog
c3RydWN0dXJlKQogewotICAgIEFTU0VSVChnbG9iYWxEYXRhLnN0cnVjdHVyZVN0cnVjdHVyZSk7
Ci0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxTdHJ1Y3R1cmU+KGdsb2JhbERhdGEuaGVhcCkpIFN0cnVjdHVyZShnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUpOwotICAgIG5ld1N0cnVjdHVyZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Cisg
ICAgQVNTRVJUKHZtLnN0cnVjdHVyZVN0cnVjdHVyZSk7CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmU+KHZtLmhlYXApKSBT
dHJ1Y3R1cmUodm0sIHN0cnVjdHVyZSk7CisgICAgbmV3U3RydWN0dXJlLT5maW5pc2hDcmVhdGlv
bih2bSk7CiAgICAgcmV0dXJuIG5ld1N0cnVjdHVyZTsKIH0KIAotaW5saW5lIFByb3BlcnR5T2Zm
c2V0IFN0cnVjdHVyZTo6Z2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSkKK2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYg
dm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSgp
LT5jbGFzc0luZm8oKSA9PSAmc19pbmZvKTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZO
ZWNlc3NhcnkoZ2xvYmFsRGF0YSk7CisgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNz
YXJ5KHZtKTsKICAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKICAgICAgICAgcmV0dXJuIGludmFs
aWRPZmZzZXQ7CiAKQEAgLTY3LDEwICs2NywxMCBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3Ry
dWN0dXJlOjpnZXQoSlNHCiAgICAgcmV0dXJuIGVudHJ5ID8gZW50cnktPm9mZnNldCA6IGludmFs
aWRPZmZzZXQ7CiB9CiAKLWlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lKQoraW5saW5lIFBy
b3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgY29uc3QgV1RGOjpTdHJpbmcmIG5h
bWUpCiB7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmc19pbmZvKTsK
LSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7CisgICAg
bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtKTsKICAgICBpZiAoIXByb3BlcnR5
VGFibGUoKSkKICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiAKQEAgLTExMywxMiArMTEz
LDEyIEBAIGlubGluZSBib29sIFN0cnVjdHVyZTo6dHJhbnNpdGl2ZWx5VHJhbnMKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWlubGluZSB2b2lkIFN0cnVjdHVyZTo6c2V0RW51bWVyYXRpb25DYWNo
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGVudW1l
cmF0aW9uQ2FjaGUpCitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OnNldEVudW1lcmF0aW9uQ2FjaGUo
Vk0mIHZtLCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBlbnVtZXJhdGlvbkNhY2hlKQogewogICAg
IEFTU0VSVCghaXNEaWN0aW9uYXJ5KCkpOwogICAgIGlmICghdHlwZUluZm8oKS5zdHJ1Y3R1cmVI
YXNSYXJlRGF0YSgpKQotICAgICAgICBhbGxvY2F0ZVJhcmVEYXRhKGdsb2JhbERhdGEpOwotICAg
IHJhcmVEYXRhKCktPnNldEVudW1lcmF0aW9uQ2FjaGUoZ2xvYmFsRGF0YSwgdGhpcywgZW51bWVy
YXRpb25DYWNoZSk7CisgICAgICAgIGFsbG9jYXRlUmFyZURhdGEodm0pOworICAgIHJhcmVEYXRh
KCktPnNldEVudW1lcmF0aW9uQ2FjaGUodm0sIHRoaXMsIGVudW1lcmF0aW9uQ2FjaGUpOwogfQog
CiBpbmxpbmUgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogU3RydWN0dXJlOjplbnVtZXJhdGlvbkNh
Y2hlKCkKQEAgLTE0MiwxOSArMTQyLDE5IEBAIGlubGluZSBKU1ZhbHVlIFN0cnVjdHVyZTo6cHJv
dG90eXBlRm9yTG8KICAgICByZXR1cm4gcHJvdG90eXBlRm9yTG9va3VwKGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSk7CiB9CiAKLWlubGluZSBTdHJ1Y3R1cmVDaGFpbiogU3RydWN0dXJlOjpw
cm90b3R5cGVDaGFpbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpIGNvbnN0CitpbmxpbmUgU3RydWN0dXJlQ2hhaW4qIFN0cnVjdHVyZTo6cHJv
dG90eXBlQ2hhaW4oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAog
ewogICAgIC8vIFdlIGNhY2hlIG91ciBwcm90b3R5cGUgY2hhaW4gc28gb3VyIGNsaWVudHMgY2Fu
IHNoYXJlIGl0LgogICAgIGlmICghaXNWYWxpZChnbG9iYWxPYmplY3QsIG1fY2FjaGVkUHJvdG90
eXBlQ2hhaW4uZ2V0KCkpKSB7CiAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gcHJvdG90eXBl
Rm9yTG9va3VwKGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4u
c2V0KGdsb2JhbERhdGEsIHRoaXMsIFN0cnVjdHVyZUNoYWluOjpjcmVhdGUoZ2xvYmFsRGF0YSwg
cHJvdG90eXBlLmlzTnVsbCgpID8gMCA6IGFzT2JqZWN0KHByb3RvdHlwZSktPnN0cnVjdHVyZSgp
KSk7CisgICAgICAgIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uc2V0KHZtLCB0aGlzLCBTdHJ1Y3R1
cmVDaGFpbjo6Y3JlYXRlKHZtLCBwcm90b3R5cGUuaXNOdWxsKCkgPyAwIDogYXNPYmplY3QocHJv
dG90eXBlKS0+c3RydWN0dXJlKCkpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fY2FjaGVkUHJvdG90
eXBlQ2hhaW4uZ2V0KCk7CiB9CiAKIGlubGluZSBTdHJ1Y3R1cmVDaGFpbiogU3RydWN0dXJlOjpw
cm90b3R5cGVDaGFpbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHByb3Rv
dHlwZUNoYWluKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
KTsKKyAgICByZXR1cm4gcHJvdG90eXBlQ2hhaW4oZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpKTsKIH0KIAogaW5saW5lIGJvb2wgU3RydWN0dXJlOjppc1ZhbGlkKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90b3R5cGVD
aGFpbikgY29uc3QKQEAgLTIwMCw3ICsyMDAsNyBAQCBpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6OnB1
dFdpbGxHcm93T3V0T2ZMCiAKIEFMV0FZU19JTkxJTkUgV3JpdGVCYXJyaWVyPFByb3BlcnR5VGFi
bGU+JiBTdHJ1Y3R1cmU6OnByb3BlcnR5VGFibGUoKQogewotICAgIEFTU0VSVCghZ2xvYmFsT2Jq
ZWN0KCkgfHwgIWdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkuaGVhcC5pc0J1c3koKSk7Cisg
ICAgQVNTRVJUKCFnbG9iYWxPYmplY3QoKSB8fCAhZ2xvYmFsT2JqZWN0KCktPnZtKCkuaGVhcC5p
c0J1c3koKSk7CiAgICAgcmV0dXJuIG1fcHJvcGVydHlUYWJsZVVuc2FmZTsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRh
LmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlUmFyZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywzOSArMzMsMzkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBTdHJ1Y3R1cmVSYXJlRGF0YTo6c19p
bmZvID0geyAiU3RydWN0dXJlUmFyZURhdGEiLCAwLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KFN0cnVjdHVyZVJhcmVEYXRhKSB9OwogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZVJhcmVEYXRhOjpj
cmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK1N0cnVjdHVyZSogU3RydWN0dXJlUmFy
ZURhdGE6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQogewotICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShn
bG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ29tcG91bmRUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENvbXBvdW5kVHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKIH0KIAotU3RydWN0dXJlUmFyZURhdGEqIFN0cnVjdHVy
ZVJhcmVEYXRhOjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHBy
ZXZpb3VzKQorU3RydWN0dXJlUmFyZURhdGEqIFN0cnVjdHVyZVJhcmVEYXRhOjpjcmVhdGUoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHByZXZpb3VzKQogewotICAgIFN0cnVjdHVyZVJhcmVEYXRhKiByYXJl
RGF0YSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cnVjdHVyZVJhcmVEYXRhPihnbG9i
YWxEYXRhLmhlYXApKSBTdHJ1Y3R1cmVSYXJlRGF0YShnbG9iYWxEYXRhLCBwcmV2aW91cyk7Ci0g
ICAgcmFyZURhdGEtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIFN0cnVjdHVyZVJh
cmVEYXRhKiByYXJlRGF0YSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cnVjdHVyZVJh
cmVEYXRhPih2bS5oZWFwKSkgU3RydWN0dXJlUmFyZURhdGEodm0sIHByZXZpb3VzKTsKKyAgICBy
YXJlRGF0YS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiByYXJlRGF0YTsKIH0KIAot
U3RydWN0dXJlUmFyZURhdGEqIFN0cnVjdHVyZVJhcmVEYXRhOjpjbG9uZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIGNvbnN0IFN0cnVjdHVyZVJhcmVEYXRhKiBvdGhlcikKK1N0cnVjdHVyZVJh
cmVEYXRhKiBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2xvbmUoVk0mIHZtLCBjb25zdCBTdHJ1Y3R1cmVS
YXJlRGF0YSogb3RoZXIpCiB7Ci0gICAgU3RydWN0dXJlUmFyZURhdGEqIG5ld1JhcmVEYXRhID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJlUmFyZURhdGE+KGdsb2JhbERhdGEu
aGVhcCkpIFN0cnVjdHVyZVJhcmVEYXRhKGdsb2JhbERhdGEsIG90aGVyKTsKLSAgICBuZXdSYXJl
RGF0YS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgU3RydWN0dXJlUmFyZURhdGEq
IG5ld1JhcmVEYXRhID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJlUmFyZURh
dGE+KHZtLmhlYXApKSBTdHJ1Y3R1cmVSYXJlRGF0YSh2bSwgb3RoZXIpOworICAgIG5ld1JhcmVE
YXRhLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0dXJuIG5ld1JhcmVEYXRhOwogfQogCi1T
dHJ1Y3R1cmVSYXJlRGF0YTo6U3RydWN0dXJlUmFyZURhdGEoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqIHByZXZpb3VzKQotICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2Jh
bERhdGEuc3RydWN0dXJlUmFyZURhdGFTdHJ1Y3R1cmUuZ2V0KCkpCitTdHJ1Y3R1cmVSYXJlRGF0
YTo6U3RydWN0dXJlUmFyZURhdGEoVk0mIHZtLCBTdHJ1Y3R1cmUqIHByZXZpb3VzKQorICAgIDog
SlNDZWxsKHZtLCB2bS5zdHJ1Y3R1cmVSYXJlRGF0YVN0cnVjdHVyZS5nZXQoKSkKIHsKICAgICBp
ZiAocHJldmlvdXMpCi0gICAgICAgIG1fcHJldmlvdXMuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHBy
ZXZpb3VzKTsKKyAgICAgICAgbV9wcmV2aW91cy5zZXQodm0sIHRoaXMsIHByZXZpb3VzKTsKIH0K
IAotU3RydWN0dXJlUmFyZURhdGE6OlN0cnVjdHVyZVJhcmVEYXRhKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgY29uc3QgU3RydWN0dXJlUmFyZURhdGEqIG90aGVyKQotICAgIDogSlNDZWxsKGds
b2JhbERhdGEsIG90aGVyLT5zdHJ1Y3R1cmUoKSkKK1N0cnVjdHVyZVJhcmVEYXRhOjpTdHJ1Y3R1
cmVSYXJlRGF0YShWTSYgdm0sIGNvbnN0IFN0cnVjdHVyZVJhcmVEYXRhKiBvdGhlcikKKyAgICA6
IEpTQ2VsbCh2bSwgb3RoZXItPnN0cnVjdHVyZSgpKQogewogICAgIGlmIChvdGhlci0+cHJldmlv
dXNJRCgpKQotICAgICAgICBtX3ByZXZpb3VzLnNldChnbG9iYWxEYXRhLCB0aGlzLCBvdGhlci0+
cHJldmlvdXNJRCgpKTsKKyAgICAgICAgbV9wcmV2aW91cy5zZXQodm0sIHRoaXMsIG90aGVyLT5w
cmV2aW91c0lEKCkpOwogICAgIGlmIChvdGhlci0+b2JqZWN0VG9TdHJpbmdWYWx1ZSgpKQotICAg
ICAgICBtX29iamVjdFRvU3RyaW5nVmFsdWUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIG90aGVyLT5v
YmplY3RUb1N0cmluZ1ZhbHVlKCkpOworICAgICAgICBtX29iamVjdFRvU3RyaW5nVmFsdWUuc2V0
KHZtLCB0aGlzLCBvdGhlci0+b2JqZWN0VG9TdHJpbmdWYWx1ZSgpKTsKIH0KIAogdm9pZCBTdHJ1
Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFy
ZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVSYXJlRGF0YS5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwzMSAr
MzgsMzEgQEAgY2xhc3MgU3RydWN0dXJlOwogY2xhc3MgU3RydWN0dXJlUmFyZURhdGEgOiBwdWJs
aWMgSlNDZWxsIHsKICAgICBmcmllbmQgY2xhc3MgU3RydWN0dXJlOwogcHVibGljOgotICAgIHN0
YXRpYyBTdHJ1Y3R1cmVSYXJlRGF0YSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSop
OwotICAgIHN0YXRpYyBTdHJ1Y3R1cmVSYXJlRGF0YSogY2xvbmUoSlNHbG9iYWxEYXRhJiwgY29u
c3QgU3RydWN0dXJlUmFyZURhdGEqIG90aGVyKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlUmFyZURh
dGEqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBTdHJ1Y3R1cmVSYXJlRGF0
YSogY2xvbmUoVk0mLCBjb25zdCBTdHJ1Y3R1cmVSYXJlRGF0YSogb3RoZXIpOwogCiAgICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCiAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoaXMgU3RydWN0dXJlUmFyZURhdGEgc2hvdWxkIGFsc28gYmUg
Y2xvbmVkIHdoZW4gY2xvbmluZyB0aGUgb3duZXIgU3RydWN0dXJlLgogICAgIGJvb2wgbmVlZHND
bG9uaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIFN0cnVjdHVyZSogcHJldmlv
dXNJRCgpIGNvbnN0OwotICAgIHZvaWQgc2V0UHJldmlvdXNJRChKU0dsb2JhbERhdGEmLCBTdHJ1
Y3R1cmUqIHRyYW5zaXRpb24sIFN0cnVjdHVyZSopOworICAgIHZvaWQgc2V0UHJldmlvdXNJRChW
TSYsIFN0cnVjdHVyZSogdHJhbnNpdGlvbiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBjbGVhclBy
ZXZpb3VzSUQoKTsKIAogICAgIEpTU3RyaW5nKiBvYmplY3RUb1N0cmluZ1ZhbHVlKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRPYmplY3RUb1N0cmluZ1ZhbHVlKEpTR2xvYmFsRGF0YSYsIGNvbnN0IEpT
Q2VsbCogb3duZXIsIEpTU3RyaW5nKiB2YWx1ZSk7CisgICAgdm9pZCBzZXRPYmplY3RUb1N0cmlu
Z1ZhbHVlKFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNTdHJpbmcqIHZhbHVlKTsKIAogICAg
IEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGVudW1lcmF0aW9uQ2FjaGUoKTsKLSAgICB2b2lkIHNl
dEVudW1lcmF0aW9uQ2FjaGUoSlNHbG9iYWxEYXRhJiwgY29uc3QgU3RydWN0dXJlKiBvd25lciwg
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogdmFsdWUpOworICAgIHZvaWQgc2V0RW51bWVyYXRpb25D
YWNoZShWTSYsIGNvbnN0IFN0cnVjdHVyZSogb3duZXIsIEpTUHJvcGVydHlOYW1lSXRlcmF0b3Iq
IHZhbHVlKTsKIAogICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2lu
Zm87CiAKIHByaXZhdGU6Ci0gICAgU3RydWN0dXJlUmFyZURhdGEoSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKik7Ci0gICAgU3RydWN0dXJlUmFyZURhdGEoSlNHbG9iYWxEYXRhJiwgY29uc3QgU3Ry
dWN0dXJlUmFyZURhdGEqKTsKKyAgICBTdHJ1Y3R1cmVSYXJlRGF0YShWTSYsIFN0cnVjdHVyZSop
OworICAgIFN0cnVjdHVyZVJhcmVEYXRhKFZNJiwgY29uc3QgU3RydWN0dXJlUmFyZURhdGEqKTsK
IAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zp
c2l0Q2hpbGRyZW4gfCBKU0NlbGw6OlN0cnVjdHVyZUZsYWdzOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YUlubGlu
ZXMuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDkgKzM1LDkg
QEAgaW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlUmFyZURhdGE6OnByZQogICAgIHJldHVybiBt
X3ByZXZpb3VzLmdldCgpOwogfQogCi1pbmxpbmUgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0
UHJldmlvdXNJRChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogdHJhbnNpdGlv
biwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6
c2V0UHJldmlvdXNJRChWTSYgdm0sIFN0cnVjdHVyZSogdHJhbnNpdGlvbiwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiB7Ci0gICAgbV9wcmV2aW91cy5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwg
c3RydWN0dXJlKTsKKyAgICBtX3ByZXZpb3VzLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJl
KTsKIH0KIAogaW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OmNsZWFyUHJldmlvdXNJRCgp
CkBAIC01MCw5ICs1MCw5IEBAIGlubGluZSBKU1N0cmluZyogU3RydWN0dXJlUmFyZURhdGE6Om9i
amUKICAgICByZXR1cm4gbV9vYmplY3RUb1N0cmluZ1ZhbHVlLmdldCgpOwogfQogCi1pbmxpbmUg
dm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTU3RyaW5nKiB2YWx1ZSkKK2lu
bGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpzZXRPYmplY3RUb1N0cmluZ1ZhbHVlKFZNJiB2
bSwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNTdHJpbmcqIHZhbHVlKQogewotICAgIG1fb2JqZWN0
VG9TdHJpbmdWYWx1ZS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHZhbHVlKTsKKyAgICBtX29iamVj
dFRvU3RyaW5nVmFsdWUuc2V0KHZtLCBvd25lciwgdmFsdWUpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMyLDcgKzEzMiw3IEBAIHB1YmxpYzoKICAgICAgICAgV2Vha1NldDo6ZGVh
bGxvY2F0ZShpbXBsKTsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBhZGQoSlNHbG9iYWxEYXRh
JiwgU3RydWN0dXJlKik7CisgICAgaW5saW5lIHZvaWQgYWRkKFZNJiwgU3RydWN0dXJlKik7CiAg
ICAgaW5saW5lIGJvb2wgY29udGFpbnMoU3RyaW5nSW1wbCogcmVwLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzKSBjb25zdDsKICAgICBpbmxpbmUgU3RydWN0dXJlKiBnZXQoU3RyaW5nSW1wbCogcmVwLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKSBjb25zdDsKIApAQCAtMTc3LDcgKzE3Nyw3IEBAIHByaXZhdGU6
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldFNpbmdsZVRyYW5z
aXRpb24oSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgdm9pZCBzZXRT
aW5nbGVUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAg
ICBBU1NFUlQoaXNVc2luZ1NpbmdsZVNsb3QoKSk7CiAgICAgICAgIGlmIChXZWFrSW1wbCogaW1w
bCA9IHRoaXMtPndlYWtJbXBsKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0NiwxOSArMzQ2
LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBKU0Nl
bGwgQmFzZTsKIAotICAgICAgICBzdGF0aWMgU2hhcmVkU3ltYm9sVGFibGUqIGNyZWF0ZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgIHN0YXRpYyBTaGFyZWRTeW1ib2xUYWJsZSog
Y3JlYXRlKFZNJiB2bSkKICAgICAgICAgewotICAgICAgICAgICAgU2hhcmVkU3ltYm9sVGFibGUq
IHNoYXJlZFN5bWJvbFRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U2hhcmVkU3lt
Ym9sVGFibGU+KGdsb2JhbERhdGEuaGVhcCkpIFNoYXJlZFN5bWJvbFRhYmxlKGdsb2JhbERhdGEp
OwotICAgICAgICAgICAgc2hhcmVkU3ltYm9sVGFibGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOworICAgICAgICAgICAgU2hhcmVkU3ltYm9sVGFibGUqIHNoYXJlZFN5bWJvbFRhYmxlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U2hhcmVkU3ltYm9sVGFibGU+KHZtLmhlYXApKSBT
aGFyZWRTeW1ib2xUYWJsZSh2bSk7CisgICAgICAgICAgICBzaGFyZWRTeW1ib2xUYWJsZS0+Zmlu
aXNoQ3JlYXRpb24odm0pOwogICAgICAgICAgICAgcmV0dXJuIHNoYXJlZFN5bWJvbFRhYmxlOwog
ICAgICAgICB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0
cnVlOwogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRy
dWU7CiAgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKExlYWZUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAg
ICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oTGVhZlR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAg
ICAgIH0KIAogICAgICAgICBib29sIHVzZXNOb25TdHJpY3RFdmFsKCkgeyByZXR1cm4gbV91c2Vz
Tm9uU3RyaWN0RXZhbDsgfQpAQCAtMzgzLDggKzM4Myw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgU2hhcmVkU3ltYm9sVGFibGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQotICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zaGFyZWRT
eW1ib2xUYWJsZVN0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgU2hhcmVkU3ltYm9sVGFibGUoVk0m
IHZtKQorICAgICAgICAgICAgOiBKU0NlbGwodm0sIHZtLnNoYXJlZFN5bWJvbFRhYmxlU3RydWN0
dXJlLmdldCgpKQogICAgICAgICAgICAgLCBtX3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcygw
KQogICAgICAgICAgICAgLCBtX3VzZXNOb25TdHJpY3RFdmFsKGZhbHNlKQogICAgICAgICAgICAg
LCBtX2NhcHR1cmVTdGFydCgwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAkocmV2aXNpb24gMTQ4NjU0KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuY3BwOjE0ODY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorCisjaW5jbHVk
ZSAiQXJnTGlzdC5oIgorI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgorI2luY2x1ZGUgIkNvbW1vbklk
ZW50aWZpZXJzLmgiCisjaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKKyNpbmNsdWRlICJE
ZWJ1Z2dlckFjdGl2YXRpb24uaCIKKyNpbmNsdWRlICJGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCisj
aW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgi
CisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFsdWUuaCIKKyNp
bmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKKyNpbmNsdWRlICJJbnRlcnByZXRlci5oIgor
I2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgorI2luY2x1ZGUgIkpTQVBJVmFsdWVXcmFwcGVyLmgi
CisjaW5jbHVkZSAiSlNBcnJheS5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRl
ICJKU0xvY2suaCIKKyNpbmNsdWRlICJKU05hbWVTY29wZS5oIgorI2luY2x1ZGUgIkpTTm90QW5P
YmplY3QuaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCisjaW5jbHVkZSAi
SlNXaXRoU2NvcGUuaCIKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUgIkxvb2t1cC5oIgor
I2luY2x1ZGUgIk5vZGVzLmgiCisjaW5jbHVkZSAiUGFyc2VyQXJlbmEuaCIKKyNpbmNsdWRlICJS
ZWdFeHBDYWNoZS5oIgorI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgorI2luY2x1ZGUgIlNvdXJj
ZVByb3ZpZGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIgorI2lu
Y2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKKyNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgor
I2luY2x1ZGUgPHd0Zi9Qcm9jZXNzSUQuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKyNpbmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgorI2VuZGlmCisKKyNpZiBFTkFCTEUo
UkVHRVhQX1RSQUNJTkcpCisjaW5jbHVkZSAiUmVnRXhwLmgiCisjZW5kaWYKKworI2lmIFVTRShD
RikKKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgorI2VuZGlmCisK
K3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBKU0MgeworCitleHRlcm4gY29uc3Qg
SGFzaFRhYmxlIGFycmF5Q29uc3RydWN0b3JUYWJsZTsKK2V4dGVybiBjb25zdCBIYXNoVGFibGUg
YXJyYXlQcm90b3R5cGVUYWJsZTsKK2V4dGVybiBjb25zdCBIYXNoVGFibGUgYm9vbGVhblByb3Rv
dHlwZVRhYmxlOworZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBqc29uVGFibGU7CitleHRlcm4gY29u
c3QgSGFzaFRhYmxlIGRhdGVUYWJsZTsKK2V4dGVybiBjb25zdCBIYXNoVGFibGUgZGF0ZUNvbnN0
cnVjdG9yVGFibGU7CitleHRlcm4gY29uc3QgSGFzaFRhYmxlIGVycm9yUHJvdG90eXBlVGFibGU7
CitleHRlcm4gY29uc3QgSGFzaFRhYmxlIGdsb2JhbE9iamVjdFRhYmxlOworZXh0ZXJuIGNvbnN0
IEhhc2hUYWJsZSBtYXRoVGFibGU7CitleHRlcm4gY29uc3QgSGFzaFRhYmxlIG51bWJlckNvbnN0
cnVjdG9yVGFibGU7CitleHRlcm4gY29uc3QgSGFzaFRhYmxlIG51bWJlclByb3RvdHlwZVRhYmxl
OworSlNfRVhQT1JUREFUQSBleHRlcm4gY29uc3QgSGFzaFRhYmxlIG9iamVjdENvbnN0cnVjdG9y
VGFibGU7CitleHRlcm4gY29uc3QgSGFzaFRhYmxlIHByaXZhdGVOYW1lUHJvdG90eXBlVGFibGU7
CitleHRlcm4gY29uc3QgSGFzaFRhYmxlIHJlZ0V4cFRhYmxlOworZXh0ZXJuIGNvbnN0IEhhc2hU
YWJsZSByZWdFeHBDb25zdHJ1Y3RvclRhYmxlOworZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSByZWdF
eHBQcm90b3R5cGVUYWJsZTsKK2V4dGVybiBjb25zdCBIYXNoVGFibGUgc3RyaW5nQ29uc3RydWN0
b3JUYWJsZTsKKworLy8gTm90ZTogUGxhdGZvcm0uaCB3aWxsIGVuZm9yY2UgdGhhdCBFTkFCTEUo
QVNTRU1CTEVSKSBpcyB0cnVlIGlmIGVpdGhlcgorLy8gRU5BQkxFKEpJVCkgb3IgRU5BQkxFKFlB
UlJfSklUKSBvciBib3RoIGFyZSBlbmFibGVkLiBUaGUgY29kZSBiZWxvdworLy8ganVzdCBjaGVj
a3MgZm9yIEVOQUJMRShKSVQpIG9yIEVOQUJMRShZQVJSX0pJVCkgd2l0aCB0aGlzIHByZW1pc2Ug
aW4gbWluZC4KKworI2lmIEVOQUJMRShBU1NFTUJMRVIpCitzdGF0aWMgYm9vbCBlbmFibGVBc3Nl
bWJsZXIoRXhlY3V0YWJsZUFsbG9jYXRvciYgZXhlY3V0YWJsZUFsbG9jYXRvcikKK3sKKyAgICBp
ZiAoIWV4ZWN1dGFibGVBbGxvY2F0b3IuaXNWYWxpZCgpIHx8ICghT3B0aW9uczo6dXNlSklUKCkg
JiYgIU9wdGlvbnM6OnVzZVJlZ0V4cEpJVCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisj
aWYgVVNFKENGKQorI2lmIENPTVBJTEVSKEdDQykgJiYgIUNPTVBJTEVSKENMQU5HKQorICAgIC8v
IEZJWE1FOiByZW1vdmUgdGhpcyBvbmNlIHRoZSBFV1MgaGF2ZSBiZWVuIHVwZ3JhZGVkIHRvIExM
Vk0uCisgICAgLy8gV29yayBhcm91bmQgYSBidWcgb2YgR0NDIHdpdGggc3RyaWN0LWFsaWFzaW5n
LgorICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2FuVXNlSklUS2V5UmV0YWluKEFkb3B0Q0Ys
IENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoMCAsICJKYXZhU2NyaXB0Q29yZVVzZUpJVCIsIGtD
RlN0cmluZ0VuY29kaW5nTWFjUm9tYW4pKTsKKyAgICBDRlN0cmluZ1JlZiBjYW5Vc2VKSVRLZXkg
PSBjYW5Vc2VKSVRLZXlSZXRhaW4uZ2V0KCk7CisjZWxzZQorICAgIENGU3RyaW5nUmVmIGNhblVz
ZUpJVEtleSA9IENGU1RSKCJKYXZhU2NyaXB0Q29yZVVzZUpJVCIpOworI2VuZGlmIC8vIENPTVBJ
TEVSKEdDQykgJiYgIUNPTVBJTEVSKENMQU5HKQorICAgIFJldGFpblB0cjxDRkJvb2xlYW5SZWY+
IGNhblVzZUpJVChBZG9wdENGLCAoQ0ZCb29sZWFuUmVmKUNGUHJlZmVyZW5jZXNDb3B5QXBwVmFs
dWUoY2FuVXNlSklUS2V5LCBrQ0ZQcmVmZXJlbmNlc0N1cnJlbnRBcHBsaWNhdGlvbikpOworICAg
IGlmIChjYW5Vc2VKSVQpCisgICAgICAgIHJldHVybiBrQ0ZCb29sZWFuVHJ1ZSA9PSBjYW5Vc2VK
SVQuZ2V0KCk7CisjZW5kaWYKKworI2lmIFVTRShDRikgfHwgT1MoVU5JWCkKKyAgICBjaGFyKiBj
YW5Vc2VKSVRTdHJpbmcgPSBnZXRlbnYoIkphdmFTY3JpcHRDb3JlVXNlSklUIik7CisgICAgcmV0
dXJuICFjYW5Vc2VKSVRTdHJpbmcgfHwgYXRvaShjYW5Vc2VKSVRTdHJpbmcpOworI2Vsc2UKKyAg
ICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfQorI2VuZGlmIC8vIEVOQUJMRSghQVNTRU1CTEVSKQor
CitKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwZSBnbG9iYWxEYXRhVHlw
ZSwgSGVhcFR5cGUgaGVhcFR5cGUpCisgICAgOiBtX2FwaUxvY2soYWRvcHRSZWYobmV3IEpTTG9j
ayh0aGlzKSkpCisjaWYgRU5BQkxFKEFTU0VNQkxFUikKKyAgICAsIGV4ZWN1dGFibGVBbGxvY2F0
b3IoKnRoaXMpCisjZW5kaWYKKyAgICAsIGhlYXAodGhpcywgaGVhcFR5cGUpCisgICAgLCBnbG9i
YWxEYXRhVHlwZShnbG9iYWxEYXRhVHlwZSkKKyAgICAsIGNsaWVudERhdGEoMCkKKyAgICAsIHRv
cENhbGxGcmFtZShDYWxsRnJhbWU6Om5vQ2FsbGVyKCkpCisgICAgLCBhcnJheUNvbnN0cnVjdG9y
VGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6YXJyYXlDb25zdHJ1Y3RvclRhYmxlKSkKKyAg
ICAsIGFycmF5UHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6YXJyYXlQcm90
b3R5cGVUYWJsZSkpCisgICAgLCBib29sZWFuUHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFi
bGU+KEpTQzo6Ym9vbGVhblByb3RvdHlwZVRhYmxlKSkKKyAgICAsIGRhdGVUYWJsZShmYXN0TmV3
PEhhc2hUYWJsZT4oSlNDOjpkYXRlVGFibGUpKQorICAgICwgZGF0ZUNvbnN0cnVjdG9yVGFibGUo
ZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6ZGF0ZUNvbnN0cnVjdG9yVGFibGUpKQorICAgICwgZXJy
b3JQcm90b3R5cGVUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjplcnJvclByb3RvdHlwZVRh
YmxlKSkKKyAgICAsIGdsb2JhbE9iamVjdFRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6Omds
b2JhbE9iamVjdFRhYmxlKSkKKyAgICAsIGpzb25UYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlND
Ojpqc29uVGFibGUpKQorICAgICwgbWF0aFRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6Om1h
dGhUYWJsZSkpCisgICAgLCBudW1iZXJDb25zdHJ1Y3RvclRhYmxlKGZhc3ROZXc8SGFzaFRhYmxl
PihKU0M6Om51bWJlckNvbnN0cnVjdG9yVGFibGUpKQorICAgICwgbnVtYmVyUHJvdG90eXBlVGFi
bGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6bnVtYmVyUHJvdG90eXBlVGFibGUpKQorICAgICwg
b2JqZWN0Q29uc3RydWN0b3JUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpvYmplY3RDb25z
dHJ1Y3RvclRhYmxlKSkKKyAgICAsIHByaXZhdGVOYW1lUHJvdG90eXBlVGFibGUoZmFzdE5ldzxI
YXNoVGFibGU+KEpTQzo6cHJpdmF0ZU5hbWVQcm90b3R5cGVUYWJsZSkpCisgICAgLCByZWdFeHBU
YWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpyZWdFeHBUYWJsZSkpCisgICAgLCByZWdFeHBD
b25zdHJ1Y3RvclRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OnJlZ0V4cENvbnN0cnVjdG9y
VGFibGUpKQorICAgICwgcmVnRXhwUHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpT
Qzo6cmVnRXhwUHJvdG90eXBlVGFibGUpKQorICAgICwgc3RyaW5nQ29uc3RydWN0b3JUYWJsZShm
YXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpzdHJpbmdDb25zdHJ1Y3RvclRhYmxlKSkKKyAgICAsIGlk
ZW50aWZpZXJUYWJsZShnbG9iYWxEYXRhVHlwZSA9PSBEZWZhdWx0ID8gd3RmVGhyZWFkRGF0YSgp
LmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSA6IGNyZWF0ZUlkZW50aWZpZXJUYWJsZSgpKQorICAg
ICwgcHJvcGVydHlOYW1lcyhuZXcgQ29tbW9uSWRlbnRpZmllcnModGhpcykpCisgICAgLCBlbXB0
eUxpc3QobmV3IE1hcmtlZEFyZ3VtZW50QnVmZmVyKQorICAgICwgcGFyc2VyQXJlbmEoYWRvcHRQ
dHIobmV3IFBhcnNlckFyZW5hKSkKKyAgICAsIGtleXdvcmRzKGFkb3B0UHRyKG5ldyBLZXl3b3Jk
cyh0aGlzKSkpCisgICAgLCBpbnRlcnByZXRlcigwKQorICAgICwganNBcnJheUNsYXNzSW5mbygm
SlNBcnJheTo6c19pbmZvKQorICAgICwganNGaW5hbE9iamVjdENsYXNzSW5mbygmSlNGaW5hbE9i
amVjdDo6c19pbmZvKQorI2lmIEVOQUJMRShERkdfSklUKQorICAgICwgc2l6ZU9mTGFzdFNjcmF0
Y2hCdWZmZXIoMCkKKyNlbmRpZgorICAgICwgZHluYW1pY0dsb2JhbE9iamVjdCgwKQorICAgICwg
Y2FjaGVkVVRDT2Zmc2V0KFFOYU4pCisgICAgLCBtX2VuYWJsZWRQcm9maWxlcigwKQorICAgICwg
bV9yZWdFeHBDYWNoZShuZXcgUmVnRXhwQ2FjaGUodGhpcykpCisjaWYgRU5BQkxFKFJFR0VYUF9U
UkFDSU5HKQorICAgICwgbV9ydFRyYWNlTGlzdChuZXcgUlRUcmFjZUxpc3QoKSkKKyNlbmRpZgor
I2lmbmRlZiBOREVCVUcKKyAgICAsIGV4Y2x1c2l2ZVRocmVhZCgwKQorI2VuZGlmCisgICAgLCBt
X25ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29ucygwKQorI2lmIEVOQUJMRShBU1NFTUJMRVIpCisg
ICAgLCBtX2NhblVzZUFzc2VtYmxlcihlbmFibGVBc3NlbWJsZXIoZXhlY3V0YWJsZUFsbG9jYXRv
cikpCisjZW5kaWYKKyNpZiBFTkFCTEUoSklUKQorICAgICwgbV9jYW5Vc2VKSVQobV9jYW5Vc2VB
c3NlbWJsZXIgJiYgT3B0aW9uczo6dXNlSklUKCkpCisjZW5kaWYKKyNpZiBFTkFCTEUoWUFSUl9K
SVQpCisgICAgLCBtX2NhblVzZVJlZ0V4cEpJVChtX2NhblVzZUFzc2VtYmxlciAmJiBPcHRpb25z
Ojp1c2VSZWdFeHBKSVQoKSkKKyNlbmRpZgorI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQorICAg
ICwgbV9pbml0aWFsaXppbmdPYmplY3RDbGFzcygwKQorI2VuZGlmCisgICAgLCBtX2luRGVmaW5l
T3duUHJvcGVydHkoZmFsc2UpCisgICAgLCBtX2NvZGVDYWNoZShDb2RlQ2FjaGU6OmNyZWF0ZSgp
KQoreworICAgIGludGVycHJldGVyID0gbmV3IEludGVycHJldGVyKCp0aGlzKTsKKworICAgIC8v
IE5lZWQgdG8gYmUgY2FyZWZ1bCB0byBrZWVwIGV2ZXJ5dGhpbmcgY29uc2lzdGVudCBoZXJlCisg
ICAgSlNMb2NrSG9sZGVyIGxvY2sodGhpcyk7CisgICAgSWRlbnRpZmllclRhYmxlKiBleGlzdGlu
Z0VudHJ5SWRlbnRpZmllclRhYmxlID0gd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlm
aWVyVGFibGUoaWRlbnRpZmllclRhYmxlKTsKKyAgICBzdHJ1Y3R1cmVTdHJ1Y3R1cmUuc2V0KCp0
aGlzLCBTdHJ1Y3R1cmU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcykpOworICAgIHN0cnVjdHVyZVJh
cmVEYXRhU3RydWN0dXJlLnNldCgqdGhpcywgU3RydWN0dXJlUmFyZURhdGE6OmNyZWF0ZVN0cnVj
dHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBkZWJ1Z2dlckFjdGl2YXRpb25TdHJ1Y3R1
cmUuc2V0KCp0aGlzLCBEZWJ1Z2dlckFjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKKyAgICB0ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKKyAgICBzdHJpbmdTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1N0cmluZzo6
Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIG5vdEFuT2JqZWN0U3Ry
dWN0dXJlLnNldCgqdGhpcywgSlNOb3RBbk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAw
LCBqc051bGwoKSkpOworICAgIHByb3BlcnR5TmFtZUl0ZXJhdG9yU3RydWN0dXJlLnNldCgqdGhp
cywgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOworICAgIGdldHRlclNldHRlclN0cnVjdHVyZS5zZXQoKnRoaXMsIEdldHRlclNldHRl
cjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIGFwaVdyYXBwZXJT
dHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU0FQSVZhbHVlV3JhcHBlcjo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOworICAgIEpTU2NvcGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Nj
b3BlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgZXhlY3V0YWJs
ZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEV4ZWN1dGFibGVCYXNlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRo
aXMsIDAsIGpzTnVsbCgpKSk7CisgICAgbmF0aXZlRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRo
aXMsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkp
KTsKKyAgICBldmFsRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEV2YWxFeGVjdXRhYmxl
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgcHJvZ3JhbUV4ZWN1
dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0
dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIGZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVy
ZS5zZXQoKnRoaXMsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAw
LCBqc051bGwoKSkpOworICAgIHJlZ0V4cFN0cnVjdHVyZS5zZXQoKnRoaXMsIFJlZ0V4cDo6Y3Jl
YXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHNoYXJlZFN5bWJvbFRhYmxl
U3RydWN0dXJlLnNldCgqdGhpcywgU2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBzdHJ1Y3R1cmVDaGFpblN0cnVjdHVyZS5zZXQoKnRo
aXMsIFN0cnVjdHVyZUNoYWluOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7
CisgICAgc3BhcnNlQXJyYXlWYWx1ZU1hcFN0cnVjdHVyZS5zZXQoKnRoaXMsIFNwYXJzZUFycmF5
VmFsdWVNYXA6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB3aXRo
U2NvcGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1dpdGhTY29wZTo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOworICAgIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0
dXJlLnNldCgqdGhpcywgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB1bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTdHJ1
Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB1bmxpbmtlZEV2YWxDb2RlQmxvY2tTdHJ1Y3R1
cmUuc2V0KCp0aGlzLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhp
cywgMCwganNOdWxsKCkpKTsKKyAgICB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJl
LnNldCgqdGhpcywgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOworICAgIHByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlz
LCBQcm9wZXJ0eVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Cisg
ICAgc21hbGxTdHJpbmdzLmluaXRpYWxpemVDb21tb25TdHJpbmdzKCp0aGlzKTsKKworICAgIHd0
ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKGV4aXN0aW5nRW50cnlJZGVu
dGlmaWVyVGFibGUpOworCisjaWYgRU5BQkxFKEpJVCkKKyAgICBqaXRTdHVicyA9IGFkb3B0UHRy
KG5ldyBKSVRUaHVua3MoKSk7CisgICAgcGVyZm9ybVBsYXRmb3JtU3BlY2lmaWNKSVRBc3NlcnRp
b25zKHRoaXMpOworI2VuZGlmCisgICAgCisgICAgaW50ZXJwcmV0ZXItPmluaXRpYWxpemUodGhp
cy0+Y2FuVXNlSklUKCkpOworICAgIAorI2lmIEVOQUJMRShKSVQpCisgICAgaW5pdGlhbGl6ZUhv
c3RDYWxsUmV0dXJuVmFsdWUoKTsgLy8gVGhpcyBpcyBuZWVkZWQgdG8gY29udmluY2UgdGhlIGxp
bmtlciBub3QgdG8gZHJvcCBob3N0IGNhbGwgcmV0dXJuIHN1cHBvcnQuCisjZW5kaWYKKworICAg
IGhlYXAubm90aWZ5SXNTYWZlVG9Db2xsZWN0KCk7CisKKyAgICBMTEludDo6RGF0YTo6cGVyZm9y
bUFzc2VydGlvbnMoKnRoaXMpOworICAgIAorICAgIGlmIChPcHRpb25zOjplbmFibGVQcm9maWxl
cigpKSB7CisgICAgICAgIG1fcGVyQnl0ZWNvZGVQcm9maWxlciA9IGFkb3B0UHRyKG5ldyBQcm9m
aWxlcjo6RGF0YWJhc2UoKnRoaXMpKTsKKworICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBwYXRo
T3V0OworI2lmICFPUyhXSU5DRSkKKyAgICAgICAgY29uc3QgY2hhciogcHJvZmlsZXJQYXRoID0g
Z2V0ZW52KCJKU0NfUFJPRklMRVJfUEFUSCIpOworICAgICAgICBpZiAocHJvZmlsZXJQYXRoKQor
ICAgICAgICAgICAgcGF0aE91dC5wcmludChwcm9maWxlclBhdGgsICIvIik7CisjZW5kaWYKKyAg
ICAgICAgcGF0aE91dC5wcmludCgiSlNDUHJvZmlsZS0iLCBnZXRDdXJyZW50UHJvY2Vzc0lEKCks
ICItIiwgbV9wZXJCeXRlY29kZVByb2ZpbGVyLT5kYXRhYmFzZUlEKCksICIuanNvbiIpOworICAg
ICAgICBtX3BlckJ5dGVjb2RlUHJvZmlsZXItPnJlZ2lzdGVyVG9TYXZlQXRFeGl0KHBhdGhPdXQu
dG9DU3RyaW5nKCkuZGF0YSgpKTsKKyAgICB9CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBp
ZiAoY2FuVXNlSklUKCkpCisgICAgICAgIG1fZGZnU3RhdGUgPSBhZG9wdFB0cihuZXcgREZHOjpM
b25nTGl2ZWRTdGF0ZSgpKTsKKyNlbmRpZgorfQorCitKU0dsb2JhbERhdGE6On5KU0dsb2JhbERh
dGEoKQoreworICAgIC8vIENsZWFyIHRoaXMgZmlyc3QgdG8gZW5zdXJlIHRoYXQgbm9ib2R5IHRy
aWVzIHRvIHJlbW92ZSB0aGVtc2VsdmVzIGZyb20gaXQuCisgICAgbV9wZXJCeXRlY29kZVByb2Zp
bGVyLmNsZWFyKCk7CisgICAgCisgICAgQVNTRVJUKG1fYXBpTG9jay0+Y3VycmVudFRocmVhZElz
SG9sZGluZ0xvY2soKSk7CisgICAgbV9hcGlMb2NrLT53aWxsRGVzdHJveUdsb2JhbERhdGEodGhp
cyk7CisgICAgaGVhcC5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOworCisgICAgZGVsZXRlIGludGVy
cHJldGVyOworI2lmbmRlZiBOREVCVUcKKyAgICBpbnRlcnByZXRlciA9IHJlaW50ZXJwcmV0X2Nh
c3Q8SW50ZXJwcmV0ZXIqPigweGJiYWRiZWVmKTsKKyNlbmRpZgorCisgICAgYXJyYXlQcm90b3R5
cGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKKyAgICBhcnJheUNvbnN0cnVjdG9yVGFibGUtPmRlbGV0
ZVRhYmxlKCk7CisgICAgYm9vbGVhblByb3RvdHlwZVRhYmxlLT5kZWxldGVUYWJsZSgpOworICAg
IGRhdGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKKyAgICBkYXRlQ29uc3RydWN0b3JUYWJsZS0+ZGVs
ZXRlVGFibGUoKTsKKyAgICBlcnJvclByb3RvdHlwZVRhYmxlLT5kZWxldGVUYWJsZSgpOworICAg
IGdsb2JhbE9iamVjdFRhYmxlLT5kZWxldGVUYWJsZSgpOworICAgIGpzb25UYWJsZS0+ZGVsZXRl
VGFibGUoKTsKKyAgICBtYXRoVGFibGUtPmRlbGV0ZVRhYmxlKCk7CisgICAgbnVtYmVyQ29uc3Ry
dWN0b3JUYWJsZS0+ZGVsZXRlVGFibGUoKTsKKyAgICBudW1iZXJQcm90b3R5cGVUYWJsZS0+ZGVs
ZXRlVGFibGUoKTsKKyAgICBvYmplY3RDb25zdHJ1Y3RvclRhYmxlLT5kZWxldGVUYWJsZSgpOwor
ICAgIHByaXZhdGVOYW1lUHJvdG90eXBlVGFibGUtPmRlbGV0ZVRhYmxlKCk7CisgICAgcmVnRXhw
VGFibGUtPmRlbGV0ZVRhYmxlKCk7CisgICAgcmVnRXhwQ29uc3RydWN0b3JUYWJsZS0+ZGVsZXRl
VGFibGUoKTsKKyAgICByZWdFeHBQcm90b3R5cGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKKyAgICBz
dHJpbmdDb25zdHJ1Y3RvclRhYmxlLT5kZWxldGVUYWJsZSgpOworCisgICAgZmFzdERlbGV0ZShj
b25zdF9jYXN0PEhhc2hUYWJsZSo+KGFycmF5Q29uc3RydWN0b3JUYWJsZSkpOworICAgIGZhc3RE
ZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihhcnJheVByb3RvdHlwZVRhYmxlKSk7CisgICAg
ZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGJvb2xlYW5Qcm90b3R5cGVUYWJsZSkp
OworICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihkYXRlVGFibGUpKTsKKyAg
ICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oZGF0ZUNvbnN0cnVjdG9yVGFibGUp
KTsKKyAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oZXJyb3JQcm90b3R5cGVU
YWJsZSkpOworICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihnbG9iYWxPYmpl
Y3RUYWJsZSkpOworICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihqc29uVGFi
bGUpKTsKKyAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4obWF0aFRhYmxlKSk7
CisgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KG51bWJlckNvbnN0cnVjdG9y
VGFibGUpKTsKKyAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4obnVtYmVyUHJv
dG90eXBlVGFibGUpKTsKKyAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4ob2Jq
ZWN0Q29uc3RydWN0b3JUYWJsZSkpOworICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFi
bGUqPihwcml2YXRlTmFtZVByb3RvdHlwZVRhYmxlKSk7CisgICAgZmFzdERlbGV0ZShjb25zdF9j
YXN0PEhhc2hUYWJsZSo+KHJlZ0V4cFRhYmxlKSk7CisgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0
PEhhc2hUYWJsZSo+KHJlZ0V4cENvbnN0cnVjdG9yVGFibGUpKTsKKyAgICBmYXN0RGVsZXRlKGNv
bnN0X2Nhc3Q8SGFzaFRhYmxlKj4ocmVnRXhwUHJvdG90eXBlVGFibGUpKTsKKyAgICBmYXN0RGVs
ZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oc3RyaW5nQ29uc3RydWN0b3JUYWJsZSkpOworCisg
ICAgZGVsZXRlIGVtcHR5TGlzdDsKKworICAgIGRlbGV0ZSBwcm9wZXJ0eU5hbWVzOworICAgIGlm
IChnbG9iYWxEYXRhVHlwZSAhPSBEZWZhdWx0KQorICAgICAgICBkZWxldGVJZGVudGlmaWVyVGFi
bGUoaWRlbnRpZmllclRhYmxlKTsKKworICAgIGRlbGV0ZSBjbGllbnREYXRhOworICAgIGRlbGV0
ZSBtX3JlZ0V4cENhY2hlOworI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKKyAgICBkZWxldGUg
bV9ydFRyYWNlTGlzdDsKKyNlbmRpZgorCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNjcmF0Y2hCdWZmZXJzLnNpemUoKTsgKytpKQorICAgICAgICBm
YXN0RnJlZShzY3JhdGNoQnVmZmVyc1tpXSk7CisjZW5kaWYKK30KKworUGFzc1JlZlB0cjxKU0ds
b2JhbERhdGE+IEpTR2xvYmFsRGF0YTo6Y3JlYXRlQ29udGV4dEdyb3VwKEhlYXBUeXBlIGhlYXBU
eXBlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRhKEFQSUNvbnRleHRH
cm91cCwgaGVhcFR5cGUpKTsKK30KKworUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IEpTR2xvYmFs
RGF0YTo6Y3JlYXRlKEhlYXBUeXBlIGhlYXBUeXBlKQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSlNHbG9iYWxEYXRhKERlZmF1bHQsIGhlYXBUeXBlKSk7Cit9CisKK1Bhc3NSZWZQdHI8SlNH
bG9iYWxEYXRhPiBKU0dsb2JhbERhdGE6OmNyZWF0ZUxlYWtlZChIZWFwVHlwZSBoZWFwVHlwZSkK
K3sKKyAgICByZXR1cm4gY3JlYXRlKGhlYXBUeXBlKTsKK30KKworYm9vbCBKU0dsb2JhbERhdGE6
OnNoYXJlZEluc3RhbmNlRXhpc3RzKCkKK3sKKyAgICByZXR1cm4gc2hhcmVkSW5zdGFuY2VJbnRl
cm5hbCgpOworfQorCitKU0dsb2JhbERhdGEmIEpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuY2Uo
KQoreworICAgIEdsb2JhbEpTTG9jayBnbG9iYWxMb2NrOworICAgIEpTR2xvYmFsRGF0YSomIGlu
c3RhbmNlID0gc2hhcmVkSW5zdGFuY2VJbnRlcm5hbCgpOworICAgIGlmICghaW5zdGFuY2UpIHsK
KyAgICAgICAgaW5zdGFuY2UgPSBhZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRhKEFQSVNoYXJlZCwg
U21hbGxIZWFwKSkubGVha1JlZigpOworICAgICAgICBpbnN0YW5jZS0+bWFrZVVzYWJsZUZyb21N
dWx0aXBsZVRocmVhZHMoKTsKKyAgICB9CisgICAgcmV0dXJuICppbnN0YW5jZTsKK30KKworSlNH
bG9iYWxEYXRhKiYgSlNHbG9iYWxEYXRhOjpzaGFyZWRJbnN0YW5jZUludGVybmFsKCkKK3sKKyAg
ICBzdGF0aWMgSlNHbG9iYWxEYXRhKiBzaGFyZWRJbnN0YW5jZTsKKyAgICByZXR1cm4gc2hhcmVk
SW5zdGFuY2U7Cit9CisKKyNpZiBFTkFCTEUoSklUKQorc3RhdGljIFRodW5rR2VuZXJhdG9yIHRo
dW5rR2VuZXJhdG9yRm9ySW50cmluc2ljKEludHJpbnNpYyBpbnRyaW5zaWMpCit7CisgICAgc3dp
dGNoIChpbnRyaW5zaWMpIHsKKyAgICBjYXNlIENoYXJDb2RlQXRJbnRyaW5zaWM6CisgICAgICAg
IHJldHVybiBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3I7CisgICAgY2FzZSBDaGFyQXRJbnRyaW5z
aWM6CisgICAgICAgIHJldHVybiBjaGFyQXRUaHVua0dlbmVyYXRvcjsKKyAgICBjYXNlIEZyb21D
aGFyQ29kZUludHJpbnNpYzoKKyAgICAgICAgcmV0dXJuIGZyb21DaGFyQ29kZVRodW5rR2VuZXJh
dG9yOworICAgIGNhc2UgU3FydEludHJpbnNpYzoKKyAgICAgICAgcmV0dXJuIHNxcnRUaHVua0dl
bmVyYXRvcjsKKyAgICBjYXNlIFBvd0ludHJpbnNpYzoKKyAgICAgICAgcmV0dXJuIHBvd1RodW5r
R2VuZXJhdG9yOworICAgIGNhc2UgQWJzSW50cmluc2ljOgorICAgICAgICByZXR1cm4gYWJzVGh1
bmtHZW5lcmF0b3I7CisgICAgY2FzZSBGbG9vckludHJpbnNpYzoKKyAgICAgICAgcmV0dXJuIGZs
b29yVGh1bmtHZW5lcmF0b3I7CisgICAgY2FzZSBDZWlsSW50cmluc2ljOgorICAgICAgICByZXR1
cm4gY2VpbFRodW5rR2VuZXJhdG9yOworICAgIGNhc2UgUm91bmRJbnRyaW5zaWM6CisgICAgICAg
IHJldHVybiByb3VuZFRodW5rR2VuZXJhdG9yOworICAgIGNhc2UgRXhwSW50cmluc2ljOgorICAg
ICAgICByZXR1cm4gZXhwVGh1bmtHZW5lcmF0b3I7CisgICAgY2FzZSBMb2dJbnRyaW5zaWM6Cisg
ICAgICAgIHJldHVybiBsb2dUaHVua0dlbmVyYXRvcjsKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9Cit9CisKK05hdGl2ZUV4ZWN1dGFibGUqIEpTR2xvYmFsRGF0YTo6Z2V0
SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25z
dHJ1Y3RvcikKK3sKKyAgICByZXR1cm4gaml0U3R1YnMtPmhvc3RGdW5jdGlvblN0dWIodGhpcywg
ZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKK30KK05hdGl2ZUV4ZWN1dGFibGUqIEpTR2xvYmFsRGF0
YTo6Z2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBJbnRyaW5zaWMgaW50
cmluc2ljKQoreworICAgIEFTU0VSVChjYW5Vc2VKSVQoKSk7CisgICAgcmV0dXJuIGppdFN0dWJz
LT5ob3N0RnVuY3Rpb25TdHViKHRoaXMsIGZ1bmN0aW9uLCBpbnRyaW5zaWMgIT0gTm9JbnRyaW5z
aWMgPyB0aHVua0dlbmVyYXRvckZvckludHJpbnNpYyhpbnRyaW5zaWMpIDogMCwgaW50cmluc2lj
KTsKK30KKworI2Vsc2UgLy8gIUVOQUJMRShKSVQpCitOYXRpdmVFeGVjdXRhYmxlKiBKU0dsb2Jh
bERhdGE6OmdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZlRnVu
Y3Rpb24gY29uc3RydWN0b3IpCit7CisgICAgcmV0dXJuIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0
ZSgqdGhpcywgZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKK30KKyNlbmRpZiAvLyAhRU5BQkxFKEpJ
VCkKKworSlNHbG9iYWxEYXRhOjpDbGllbnREYXRhOjp+Q2xpZW50RGF0YSgpCit7Cit9CisKK3Zv
aWQgSlNHbG9iYWxEYXRhOjpyZXNldERhdGVDYWNoZSgpCit7CisgICAgY2FjaGVkVVRDT2Zmc2V0
ID0gUU5hTjsKKyAgICBkc3RPZmZzZXRDYWNoZS5yZXNldCgpOworICAgIGNhY2hlZERhdGVTdHJp
bmcgPSBTdHJpbmcoKTsKKyAgICBjYWNoZWREYXRlU3RyaW5nVmFsdWUgPSBRTmFOOworICAgIGRh
dGVJbnN0YW5jZUNhY2hlLnJlc2V0KCk7Cit9CisKK3ZvaWQgSlNHbG9iYWxEYXRhOjpzdGFydFNh
bXBsaW5nKCkKK3sKKyAgICBpbnRlcnByZXRlci0+c3RhcnRTYW1wbGluZygpOworfQorCit2b2lk
IEpTR2xvYmFsRGF0YTo6c3RvcFNhbXBsaW5nKCkKK3sKKyAgICBpbnRlcnByZXRlci0+c3RvcFNh
bXBsaW5nKCk7Cit9CisKK3ZvaWQgSlNHbG9iYWxEYXRhOjpkaXNjYXJkQWxsQ29kZSgpCit7Cisg
ICAgbV9jb2RlQ2FjaGUtPmNsZWFyKCk7CisgICAgaGVhcC5kZWxldGVBbGxDb21waWxlZENvZGUo
KTsKKyAgICBoZWFwLnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCk7Cit9CisKK3ZvaWQgSlNH
bG9iYWxEYXRhOjpkdW1wU2FtcGxlRGF0YShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaW50ZXJw
cmV0ZXItPmR1bXBTYW1wbGVEYXRhKGV4ZWMpOworI2lmIEVOQUJMRShBU1NFTUJMRVIpCisgICAg
RXhlY3V0YWJsZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKTsKKyNlbmRpZgorfQorCitTb3VyY2VQ
cm92aWRlckNhY2hlKiBKU0dsb2JhbERhdGE6OmFkZFNvdXJjZVByb3ZpZGVyQ2FjaGUoU291cmNl
UHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVyKQoreworICAgIFNvdXJjZVByb3ZpZGVyQ2FjaGVNYXA6
OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBzb3VyY2VQcm92aWRlckNhY2hlTWFwLmFkZChzb3VyY2VQ
cm92aWRlciwgMCk7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gYWRvcHRSZWYobmV3IFNvdXJjZVByb3ZpZGVyQ2FjaGUp
OworICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworfQorCit2b2lk
IEpTR2xvYmFsRGF0YTo6Y2xlYXJTb3VyY2VQcm92aWRlckNhY2hlcygpCit7CisgICAgc291cmNl
UHJvdmlkZXJDYWNoZU1hcC5jbGVhcigpOworfQorCitzdHJ1Y3QgU3RhY2tQcmVzZXJ2aW5nUmVj
b21waWxlciA6IHB1YmxpYyBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgeworICAgIEhhc2hTZXQ8
RnVuY3Rpb25FeGVjdXRhYmxlKj4gY3VycmVudGx5RXhlY3V0aW5nRnVuY3Rpb25zOworICAgIHZv
aWQgb3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCisgICAgeworICAgICAgICBpZiAoIWNlbGwtPmlu
aGVyaXRzKCZGdW5jdGlvbkV4ZWN1dGFibGU6OnNfaW5mbykpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPihjZWxsKTsKKyAgICAgICAgaWYgKGN1cnJlbnRseUV4ZWN1dGluZ0Z1bmN0
aW9ucy5jb250YWlucyhleGVjdXRhYmxlKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ZXhlY3V0YWJsZS0+Y2xlYXJDb2RlSWZOb3RDb21waWxpbmcoKTsKKyAgICB9Cit9OworCit2b2lk
IEpTR2xvYmFsRGF0YTo6cmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoKQoreworICAgIGlmIChkeW5h
bWljR2xvYmFsT2JqZWN0KSB7CisgICAgICAgIFN0YWNrUHJlc2VydmluZ1JlY29tcGlsZXIgcmVj
b21waWxlcjsKKyAgICAgICAgSGFzaFNldDxKU0NlbGwqPiByb290czsKKyAgICAgICAgaGVhcC5j
YW5vbmljYWxpemVDZWxsTGl2ZW5lc3NEYXRhKCk7CisgICAgICAgIGhlYXAuZ2V0Q29uc2VydmF0
aXZlUmVnaXN0ZXJSb290cyhyb290cyk7CisgICAgICAgIEhhc2hTZXQ8SlNDZWxsKj46Oml0ZXJh
dG9yIGVuZCA9IHJvb3RzLmVuZCgpOworICAgICAgICBmb3IgKEhhc2hTZXQ8SlNDZWxsKj46Oml0
ZXJhdG9yIHB0ciA9IHJvb3RzLmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKSB7CisgICAgICAg
ICAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gMDsKKyAgICAgICAgICAgIEpTQ2Vs
bCogY2VsbCA9ICpwdHI7CisgICAgICAgICAgICBpZiAoY2VsbC0+aW5oZXJpdHMoJlNjcmlwdEV4
ZWN1dGFibGU6OnNfaW5mbykpCisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IHN0YXRpY19j
YXN0PFNjcmlwdEV4ZWN1dGFibGUqPigqcHRyKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNlbGwt
PmluaGVyaXRzKCZKU0Z1bmN0aW9uOjpzX2luZm8pKSB7CisgICAgICAgICAgICAgICAgSlNGdW5j
dGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KCpwdHIpOworICAgICAgICAgICAg
ICAgIGlmIChmdW5jdGlvbi0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5qc0V4ZWN1
dGFibGUoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgQVNTRVJUKGV4ZWN1dGFibGUtPmluaGVyaXRzKCZTY3JpcHRFeGVjdXRhYmxl
OjpzX2luZm8pKTsKKyAgICAgICAgICAgIGV4ZWN1dGFibGUtPnVubGlua0NhbGxzKCk7CisgICAg
ICAgICAgICBpZiAoZXhlY3V0YWJsZS0+aW5oZXJpdHMoJkZ1bmN0aW9uRXhlY3V0YWJsZTo6c19p
bmZvKSkKKyAgICAgICAgICAgICAgICByZWNvbXBpbGVyLmN1cnJlbnRseUV4ZWN1dGluZ0Z1bmN0
aW9ucy5hZGQoc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSkpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICB9CisgICAgICAgIGhlYXAub2JqZWN0U3BhY2UoKS5m
b3JFYWNoTGl2ZUNlbGw8U3RhY2tQcmVzZXJ2aW5nUmVjb21waWxlcj4ocmVjb21waWxlcik7Cisg
ICAgfQorICAgIG1fcmVnRXhwQ2FjaGUtPmludmFsaWRhdGVDb2RlKCk7CisgICAgaGVhcC5jb2xs
ZWN0QWxsR2FyYmFnZSgpOworfQorICAgIAordm9pZCByZWxlYXNlRXhlY3V0YWJsZU1lbW9yeShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgZ2xvYmFsRGF0YS5yZWxlYXNlRXhlY3V0
YWJsZU1lbW9yeSgpOworfQorCisjaWYgRU5BQkxFKERGR19KSVQpCit2b2lkIEpTR2xvYmFsRGF0
YTo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2
ZVJvb3RzKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2NyYXRjaEJ1ZmZlcnMuc2l6
ZSgpOyBpKyspIHsKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHNjcmF0
Y2hCdWZmZXJzW2ldOworICAgICAgICBpZiAoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoKCkp
IHsKKyAgICAgICAgICAgIHZvaWQqIGJ1ZmZlclN0YXJ0ID0gc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1
ZmZlcigpOworICAgICAgICAgICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJ1ZmZlclN0YXJ0LCBz
dGF0aWNfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KGJ1ZmZlclN0YXJ0KSArIHNjcmF0
Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aCgpKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisjZW5kaWYK
KworI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKK3ZvaWQgSlNHbG9iYWxEYXRhOjphZGRSZWdF
eHBUb1RyYWNlKFJlZ0V4cCogcmVnRXhwKQoreworICAgIG1fcnRUcmFjZUxpc3QtPmFkZChyZWdF
eHApOworfQorCit2b2lkIEpTR2xvYmFsRGF0YTo6ZHVtcFJlZ0V4cFRyYWNlKCkKK3sKKyAgICAv
LyBUaGUgZmlyc3QgUmVnRXhwIG9iamVjdCBpcyBpZ25vcmVkLiAgSXQgaXMgY3JlYXRlIGJ5IHRo
ZSBSZWdFeHBQcm90b3R5cGUgY3RvciBhbmQgbm90IHVzZWQuCisgICAgUlRUcmFjZUxpc3Q6Oml0
ZXJhdG9yIGl0ZXIgPSArK21fcnRUcmFjZUxpc3QtPmJlZ2luKCk7CisgICAgCisgICAgaWYgKGl0
ZXIgIT0gbV9ydFRyYWNlTGlzdC0+ZW5kKCkpIHsKKyAgICAgICAgZGF0YUxvZ0YoIlxuUmVnRXhw
IFRyYWNpbmdcbiIpOworICAgICAgICBkYXRhTG9nRigiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2goKSAgICBtYXRjaGVzXG4i
KTsKKyAgICAgICAgZGF0YUxvZ0YoIlJlZ3VsYXIgRXhwcmVzc2lvbiAgICAgICAgICAgICAgICAg
ICAgICAgICAgSklUIEFkZHJlc3MgICAgICBjYWxscyAgICAgIGZvdW5kXG4iKTsKKyAgICAgICAg
ZGF0YUxvZ0YoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t
LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS1cbiIpOworICAgIAorICAgICAgICB1bnNp
Z25lZCByZUNvdW50ID0gMDsKKyAgICAKKyAgICAgICAgZm9yICg7IGl0ZXIgIT0gbV9ydFRyYWNl
TGlzdC0+ZW5kKCk7ICsraXRlciwgKytyZUNvdW50KQorICAgICAgICAgICAgKCppdGVyKS0+cHJp
bnRUcmFjZURhdGEoKTsKKworICAgICAgICBkYXRhTG9nRigiJWQgUmVndWxhciBFeHByZXNzaW9u
c1xuIiwgcmVDb3VudCk7CisgICAgfQorICAgIAorICAgIG1fcnRUcmFjZUxpc3QtPmNsZWFyKCk7
Cit9CisjZWxzZQordm9pZCBKU0dsb2JhbERhdGE6OmR1bXBSZWdFeHBUcmFjZSgpCit7Cit9Cisj
ZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIK
IAogI2luY2x1ZGUgIkFyZ0xpc3QuaCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKQEAgLTEzMywx
MyArMTMzLDEzIEBAIHN0YXRpYyBib29sIGVuYWJsZUFzc2VtYmxlcihFeGVjdXRhYmxlQWwKIH0K
ICNlbmRpZiAvLyBFTkFCTEUoIUFTU0VNQkxFUikKIAotSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERh
dGEoR2xvYmFsRGF0YVR5cGUgZ2xvYmFsRGF0YVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQorVk06
OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIDogbV9hcGlMb2NrKGFk
b3B0UmVmKG5ldyBKU0xvY2sodGhpcykpKQogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAgICAgLCBl
eGVjdXRhYmxlQWxsb2NhdG9yKCp0aGlzKQogI2VuZGlmCiAgICAgLCBoZWFwKHRoaXMsIGhlYXBU
eXBlKQotICAgICwgZ2xvYmFsRGF0YVR5cGUoZ2xvYmFsRGF0YVR5cGUpCisgICAgLCB2bVR5cGUo
dm1UeXBlKQogICAgICwgY2xpZW50RGF0YSgwKQogICAgICwgdG9wQ2FsbEZyYW1lKENhbGxGcmFt
ZTo6bm9DYWxsZXIoKSkKICAgICAsIGFycmF5Q29uc3RydWN0b3JUYWJsZShmYXN0TmV3PEhhc2hU
YWJsZT4oSlNDOjphcnJheUNvbnN0cnVjdG9yVGFibGUpKQpAQCAtMTU5LDcgKzE1OSw3IEBAIEpT
R2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKICAgICAsIHJlZ0V4cENvbnN0
cnVjdG9yVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6cmVnRXhwQ29uc3RydWN0b3JUYWJs
ZSkpCiAgICAgLCByZWdFeHBQcm90b3R5cGVUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpy
ZWdFeHBQcm90b3R5cGVUYWJsZSkpCiAgICAgLCBzdHJpbmdDb25zdHJ1Y3RvclRhYmxlKGZhc3RO
ZXc8SGFzaFRhYmxlPihKU0M6OnN0cmluZ0NvbnN0cnVjdG9yVGFibGUpKQotICAgICwgaWRlbnRp
ZmllclRhYmxlKGdsb2JhbERhdGFUeXBlID09IERlZmF1bHQgPyB3dGZUaHJlYWREYXRhKCkuY3Vy
cmVudElkZW50aWZpZXJUYWJsZSgpIDogY3JlYXRlSWRlbnRpZmllclRhYmxlKCkpCisgICAgLCBp
ZGVudGlmaWVyVGFibGUodm1UeXBlID09IERlZmF1bHQgPyB3dGZUaHJlYWREYXRhKCkuY3VycmVu
dElkZW50aWZpZXJUYWJsZSgpIDogY3JlYXRlSWRlbnRpZmllclRhYmxlKCkpCiAgICAgLCBwcm9w
ZXJ0eU5hbWVzKG5ldyBDb21tb25JZGVudGlmaWVycyh0aGlzKSkKICAgICAsIGVtcHR5TGlzdChu
ZXcgTWFya2VkQXJndW1lbnRCdWZmZXIpCiAgICAgLCBwYXJzZXJBcmVuYShhZG9wdFB0cihuZXcg
UGFyc2VyQXJlbmEpKQpAQCAtMjY0LDEzICsyNjQsMTMgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2Jh
bERhdGEoR2xvYmFsRGF0YVR5cAogI2VuZGlmCiB9CiAKLUpTR2xvYmFsRGF0YTo6fkpTR2xvYmFs
RGF0YSgpCitWTTo6flZNKCkKIHsKICAgICAvLyBDbGVhciB0aGlzIGZpcnN0IHRvIGVuc3VyZSB0
aGF0IG5vYm9keSB0cmllcyB0byByZW1vdmUgdGhlbXNlbHZlcyBmcm9tIGl0LgogICAgIG1fcGVy
Qnl0ZWNvZGVQcm9maWxlci5jbGVhcigpOwogICAgIAogICAgIEFTU0VSVChtX2FwaUxvY2stPmN1
cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwotICAgIG1fYXBpTG9jay0+d2lsbERlc3Ryb3lH
bG9iYWxEYXRhKHRoaXMpOworICAgIG1fYXBpTG9jay0+d2lsbERlc3Ryb3lWTSh0aGlzKTsKICAg
ICBoZWFwLmxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CiAKICAgICBkZWxldGUgaW50ZXJwcmV0ZXI7
CkBAIC0zMTcsNyArMzE3LDcgQEAgSlNHbG9iYWxEYXRhOjp+SlNHbG9iYWxEYXRhKCkKICAgICBk
ZWxldGUgZW1wdHlMaXN0OwogCiAgICAgZGVsZXRlIHByb3BlcnR5TmFtZXM7Ci0gICAgaWYgKGds
b2JhbERhdGFUeXBlICE9IERlZmF1bHQpCisgICAgaWYgKHZtVHlwZSAhPSBEZWZhdWx0KQogICAg
ICAgICBkZWxldGVJZGVudGlmaWVyVGFibGUoaWRlbnRpZmllclRhYmxlKTsKIAogICAgIGRlbGV0
ZSBjbGllbnREYXRhOwpAQCAtMzMyLDQwICszMzIsNDAgQEAgSlNHbG9iYWxEYXRhOjp+SlNHbG9i
YWxEYXRhKCkKICNlbmRpZgogfQogCi1QYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4gSlNHbG9iYWxE
YXRhOjpjcmVhdGVDb250ZXh0R3JvdXAoSGVhcFR5cGUgaGVhcFR5cGUpCitQYXNzUmVmUHRyPFZN
PiBWTTo6Y3JlYXRlQ29udGV4dEdyb3VwKEhlYXBUeXBlIGhlYXBUeXBlKQogewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRhKEFQSUNvbnRleHRHcm91cCwgaGVhcFR5cGUpKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFZNKEFQSUNvbnRleHRHcm91cCwgaGVhcFR5cGUpKTsK
IH0KIAotUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IEpTR2xvYmFsRGF0YTo6Y3JlYXRlKEhlYXBU
eXBlIGhlYXBUeXBlKQorUGFzc1JlZlB0cjxWTT4gVk06OmNyZWF0ZShIZWFwVHlwZSBoZWFwVHlw
ZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpTR2xvYmFsRGF0YShEZWZhdWx0LCBoZWFw
VHlwZSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVk0oRGVmYXVsdCwgaGVhcFR5cGUpKTsK
IH0KIAotUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IEpTR2xvYmFsRGF0YTo6Y3JlYXRlTGVha2Vk
KEhlYXBUeXBlIGhlYXBUeXBlKQorUGFzc1JlZlB0cjxWTT4gVk06OmNyZWF0ZUxlYWtlZChIZWFw
VHlwZSBoZWFwVHlwZSkKIHsKICAgICByZXR1cm4gY3JlYXRlKGhlYXBUeXBlKTsKIH0KIAotYm9v
bCBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNlRXhpc3RzKCkKK2Jvb2wgVk06OnNoYXJlZElu
c3RhbmNlRXhpc3RzKCkKIHsKICAgICByZXR1cm4gc2hhcmVkSW5zdGFuY2VJbnRlcm5hbCgpOwog
fQogCi1KU0dsb2JhbERhdGEmIEpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuY2UoKQorVk0mIFZN
OjpzaGFyZWRJbnN0YW5jZSgpCiB7CiAgICAgR2xvYmFsSlNMb2NrIGdsb2JhbExvY2s7Ci0gICAg
SlNHbG9iYWxEYXRhKiYgaW5zdGFuY2UgPSBzaGFyZWRJbnN0YW5jZUludGVybmFsKCk7CisgICAg
Vk0qJiBpbnN0YW5jZSA9IHNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKTsKICAgICBpZiAoIWluc3Rh
bmNlKSB7Ci0gICAgICAgIGluc3RhbmNlID0gYWRvcHRSZWYobmV3IEpTR2xvYmFsRGF0YShBUElT
aGFyZWQsIFNtYWxsSGVhcCkpLmxlYWtSZWYoKTsKKyAgICAgICAgaW5zdGFuY2UgPSBhZG9wdFJl
ZihuZXcgVk0oQVBJU2hhcmVkLCBTbWFsbEhlYXApKS5sZWFrUmVmKCk7CiAgICAgICAgIGluc3Rh
bmNlLT5tYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpOwogICAgIH0KICAgICByZXR1cm4g
Kmluc3RhbmNlOwogfQogCi1KU0dsb2JhbERhdGEqJiBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3Rh
bmNlSW50ZXJuYWwoKQorVk0qJiBWTTo6c2hhcmVkSW5zdGFuY2VJbnRlcm5hbCgpCiB7Ci0gICAg
c3RhdGljIEpTR2xvYmFsRGF0YSogc2hhcmVkSW5zdGFuY2U7CisgICAgc3RhdGljIFZNKiBzaGFy
ZWRJbnN0YW5jZTsKICAgICByZXR1cm4gc2hhcmVkSW5zdGFuY2U7CiB9CiAKQEAgLTQwMCwyOCAr
NDAwLDI4IEBAIHN0YXRpYyBUaHVua0dlbmVyYXRvciB0aHVua0dlbmVyYXRvckZvckkKICAgICB9
CiB9CiAKLU5hdGl2ZUV4ZWN1dGFibGUqIEpTR2xvYmFsRGF0YTo6Z2V0SG9zdEZ1bmN0aW9uKE5h
dGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKK05hdGl2
ZUV4ZWN1dGFibGUqIFZNOjpnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24s
IE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQogewogICAgIHJldHVybiBqaXRTdHVicy0+aG9z
dEZ1bmN0aW9uU3R1Yih0aGlzLCBmdW5jdGlvbiwgY29uc3RydWN0b3IpOwogfQotTmF0aXZlRXhl
Y3V0YWJsZSogSlNHbG9iYWxEYXRhOjpnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24gZnVu
Y3Rpb24sIEludHJpbnNpYyBpbnRyaW5zaWMpCitOYXRpdmVFeGVjdXRhYmxlKiBWTTo6Z2V0SG9z
dEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBJbnRyaW5zaWMgaW50cmluc2ljKQog
ewogICAgIEFTU0VSVChjYW5Vc2VKSVQoKSk7CiAgICAgcmV0dXJuIGppdFN0dWJzLT5ob3N0RnVu
Y3Rpb25TdHViKHRoaXMsIGZ1bmN0aW9uLCBpbnRyaW5zaWMgIT0gTm9JbnRyaW5zaWMgPyB0aHVu
a0dlbmVyYXRvckZvckludHJpbnNpYyhpbnRyaW5zaWMpIDogMCwgaW50cmluc2ljKTsKIH0KIAog
I2Vsc2UgLy8gIUVOQUJMRShKSVQpCi1OYXRpdmVFeGVjdXRhYmxlKiBKU0dsb2JhbERhdGE6Omdl
dEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29u
c3RydWN0b3IpCitOYXRpdmVFeGVjdXRhYmxlKiBWTTo6Z2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1
bmN0aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKIHsKICAgICByZXR1
cm4gTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCp0aGlzLCBmdW5jdGlvbiwgY29uc3RydWN0b3Ip
OwogfQogI2VuZGlmIC8vICFFTkFCTEUoSklUKQogCi1KU0dsb2JhbERhdGE6OkNsaWVudERhdGE6
On5DbGllbnREYXRhKCkKK1ZNOjpDbGllbnREYXRhOjp+Q2xpZW50RGF0YSgpCiB7CiB9CiAKLXZv
aWQgSlNHbG9iYWxEYXRhOjpyZXNldERhdGVDYWNoZSgpCit2b2lkIFZNOjpyZXNldERhdGVDYWNo
ZSgpCiB7CiAgICAgY2FjaGVkVVRDT2Zmc2V0ID0gUU5hTjsKICAgICBkc3RPZmZzZXRDYWNoZS5y
ZXNldCgpOwpAQCAtNDMwLDI0ICs0MzAsMjQgQEAgdm9pZCBKU0dsb2JhbERhdGE6OnJlc2V0RGF0
ZUNhY2hlKCkKICAgICBkYXRlSW5zdGFuY2VDYWNoZS5yZXNldCgpOwogfQogCi12b2lkIEpTR2xv
YmFsRGF0YTo6c3RhcnRTYW1wbGluZygpCit2b2lkIFZNOjpzdGFydFNhbXBsaW5nKCkKIHsKICAg
ICBpbnRlcnByZXRlci0+c3RhcnRTYW1wbGluZygpOwogfQogCi12b2lkIEpTR2xvYmFsRGF0YTo6
c3RvcFNhbXBsaW5nKCkKK3ZvaWQgVk06OnN0b3BTYW1wbGluZygpCiB7CiAgICAgaW50ZXJwcmV0
ZXItPnN0b3BTYW1wbGluZygpOwogfQogCi12b2lkIEpTR2xvYmFsRGF0YTo6ZGlzY2FyZEFsbENv
ZGUoKQordm9pZCBWTTo6ZGlzY2FyZEFsbENvZGUoKQogewogICAgIG1fY29kZUNhY2hlLT5jbGVh
cigpOwogICAgIGhlYXAuZGVsZXRlQWxsQ29tcGlsZWRDb2RlKCk7CiAgICAgaGVhcC5yZXBvcnRB
YmFuZG9uZWRPYmplY3RHcmFwaCgpOwogfQogCi12b2lkIEpTR2xvYmFsRGF0YTo6ZHVtcFNhbXBs
ZURhdGEoRXhlY1N0YXRlKiBleGVjKQordm9pZCBWTTo6ZHVtcFNhbXBsZURhdGEoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIGludGVycHJldGVyLT5kdW1wU2FtcGxlRGF0YShleGVjKTsKICNpZiBF
TkFCTEUoQVNTRU1CTEVSKQpAQCAtNDU1LDcgKzQ1NSw3IEBAIHZvaWQgSlNHbG9iYWxEYXRhOjpk
dW1wU2FtcGxlRGF0YShFeGVjU3QKICNlbmRpZgogfQogCi1Tb3VyY2VQcm92aWRlckNhY2hlKiBK
U0dsb2JhbERhdGE6OmFkZFNvdXJjZVByb3ZpZGVyQ2FjaGUoU291cmNlUHJvdmlkZXIqIHNvdXJj
ZVByb3ZpZGVyKQorU291cmNlUHJvdmlkZXJDYWNoZSogVk06OmFkZFNvdXJjZVByb3ZpZGVyQ2Fj
aGUoU291cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVyKQogewogICAgIFNvdXJjZVByb3ZpZGVy
Q2FjaGVNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBzb3VyY2VQcm92aWRlckNhY2hlTWFwLmFk
ZChzb3VyY2VQcm92aWRlciwgMCk7CiAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQpAQCAt
NDYzLDcgKzQ2Myw3IEBAIFNvdXJjZVByb3ZpZGVyQ2FjaGUqIEpTR2xvYmFsRGF0YTo6YWRkU28K
ICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0KIAotdm9pZCBK
U0dsb2JhbERhdGE6OmNsZWFyU291cmNlUHJvdmlkZXJDYWNoZXMoKQordm9pZCBWTTo6Y2xlYXJT
b3VyY2VQcm92aWRlckNhY2hlcygpCiB7CiAgICAgc291cmNlUHJvdmlkZXJDYWNoZU1hcC5jbGVh
cigpOwogfQpAQCAtNDgxLDcgKzQ4MSw3IEBAIHN0cnVjdCBTdGFja1ByZXNlcnZpbmdSZWNvbXBp
bGVyIDogcHVibGkKICAgICB9CiB9OwogCi12b2lkIEpTR2xvYmFsRGF0YTo6cmVsZWFzZUV4ZWN1
dGFibGVNZW1vcnkoKQordm9pZCBWTTo6cmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoKQogewogICAg
IGlmIChkeW5hbWljR2xvYmFsT2JqZWN0KSB7CiAgICAgICAgIFN0YWNrUHJlc2VydmluZ1JlY29t
cGlsZXIgcmVjb21waWxlcjsKQEAgLTUxMywxMyArNTEzLDEzIEBAIHZvaWQgSlNHbG9iYWxEYXRh
OjpyZWxlYXNlRXhlY3V0YWJsZU1lbW8KICAgICBoZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7CiB9
CiAgICAgCi12b2lkIHJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKK3ZvaWQgcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoVk0mIHZtKQogewotICAgIGdsb2Jh
bERhdGEucmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoKTsKKyAgICB2bS5yZWxlYXNlRXhlY3V0YWJs
ZU1lbW9yeSgpOwogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCi12b2lkIEpTR2xvYmFsRGF0YTo6
Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJv
b3RzKQordm9pZCBWTTo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMm
IGNvbnNlcnZhdGl2ZVJvb3RzKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2NyYXRj
aEJ1ZmZlcnMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1
ZmZlciA9IHNjcmF0Y2hCdWZmZXJzW2ldOwpAQCAtNTMyLDEyICs1MzIsMTIgQEAgdm9pZCBKU0ds
b2JhbERhdGE6OmdhdGhlckNvbnNlcnZhdGl2ZVJvbwogI2VuZGlmCiAKICNpZiBFTkFCTEUoUkVH
RVhQX1RSQUNJTkcpCi12b2lkIEpTR2xvYmFsRGF0YTo6YWRkUmVnRXhwVG9UcmFjZShSZWdFeHAq
IHJlZ0V4cCkKK3ZvaWQgVk06OmFkZFJlZ0V4cFRvVHJhY2UoUmVnRXhwKiByZWdFeHApCiB7CiAg
ICAgbV9ydFRyYWNlTGlzdC0+YWRkKHJlZ0V4cCk7CiB9CiAKLXZvaWQgSlNHbG9iYWxEYXRhOjpk
dW1wUmVnRXhwVHJhY2UoKQordm9pZCBWTTo6ZHVtcFJlZ0V4cFRyYWNlKCkKIHsKICAgICAvLyBU
aGUgZmlyc3QgUmVnRXhwIG9iamVjdCBpcyBpZ25vcmVkLiAgSXQgaXMgY3JlYXRlIGJ5IHRoZSBS
ZWdFeHBQcm90b3R5cGUgY3RvciBhbmQgbm90IHVzZWQuCiAgICAgUlRUcmFjZUxpc3Q6Oml0ZXJh
dG9yIGl0ZXIgPSArK21fcnRUcmFjZUxpc3QtPmJlZ2luKCk7CkBAIC01NTksNyArNTU5LDcgQEAg
dm9pZCBKU0dsb2JhbERhdGE6OmR1bXBSZWdFeHBUcmFjZSgpCiAgICAgbV9ydFRyYWNlTGlzdC0+
Y2xlYXIoKTsKIH0KICNlbHNlCi12b2lkIEpTR2xvYmFsRGF0YTo6ZHVtcFJlZ0V4cFRyYWNlKCkK
K3ZvaWQgVk06OmR1bXBSZWdFeHBUcmFjZSgpCiB7CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTQ4NjU0KQkoZnJvbSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaDoxNDg2NTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTI1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEpTR2xvYmFsRGF0YV9oCisjZGVmaW5lIEpTR2xvYmFsRGF0
YV9oCisKKyNpbmNsdWRlICJDYWNoZWRUcmFuc2NlbmRlbnRhbEZ1bmN0aW9uLmgiCisjaW5jbHVk
ZSAiRGF0ZUluc3RhbmNlQ2FjaGUuaCIKKyNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgi
CisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIkludHJpbnNpYy5oIgorI2luY2x1ZGUgIkpJ
VFRodW5rcy5oIgorI2luY2x1ZGUgIkpJVFRodW5rcy5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUu
aCIKKyNpbmNsdWRlICJKU0xvY2suaCIKKyNpbmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNsdWRl
ICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJOdW1lcmljU3RyaW5ncy5oIgor
I2luY2x1ZGUgIlByb2ZpbGVyRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQcml2YXRlTmFtZS5oIgor
I2luY2x1ZGUgIlByb3RvdHlwZU1hcC5oIgorI2luY2x1ZGUgIlNtYWxsU3RyaW5ncy5oIgorI2lu
Y2x1ZGUgIlN0cm9uZy5oIgorI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgorI2luY2x1ZGUg
IlR5cGVkQXJyYXlEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKKyNpbmNsdWRl
ICJXZWFrUmFuZG9tLmgiCisjaW5jbHVkZSA8d3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmg+Cisj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4K
KyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkU3BlY2lmaWMuaD4KKyNpbmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgorI2lmIEVOQUJM
RShSRUdFWFBfVFJBQ0lORykKKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KKyNlbmRpZgor
CituYW1lc3BhY2UgSlNDIHsKKworICAgIGNsYXNzIENvZGVCbG9jazsKKyAgICBjbGFzcyBDb2Rl
Q2FjaGU7CisgICAgY2xhc3MgQ29tbW9uSWRlbnRpZmllcnM7CisgICAgY2xhc3MgRXhlY1N0YXRl
OworICAgIGNsYXNzIEhhbmRsZVN0YWNrOworICAgIGNsYXNzIElkZW50aWZpZXJUYWJsZTsKKyAg
ICBjbGFzcyBJbnRlcnByZXRlcjsKKyAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKKyAgICBjbGFz
cyBKU09iamVjdDsKKyAgICBjbGFzcyBLZXl3b3JkczsKKyAgICBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CisgICAgY2xhc3MgTGVnYWN5UHJvZmlsZXI7CisgICAgY2xhc3MgTmF0aXZlRXhl
Y3V0YWJsZTsKKyAgICBjbGFzcyBQYXJzZXJBcmVuYTsKKyAgICBjbGFzcyBSZWdFeHBDYWNoZTsK
KyAgICBjbGFzcyBTb3VyY2VQcm92aWRlcjsKKyAgICBjbGFzcyBTb3VyY2VQcm92aWRlckNhY2hl
OworICAgIHN0cnVjdCBTdGFja0ZyYW1lOworICAgIGNsYXNzIFN0cmluZ2lmaWVyOworICAgIGNs
YXNzIFN0cnVjdHVyZTsKKyNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCisgICAgY2xhc3MgUmVn
RXhwOworI2VuZGlmCisgICAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CisgICAgY2xhc3MgVW5s
aW5rZWRFdmFsQ29kZUJsb2NrOworICAgIGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
OworICAgIGNsYXNzIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKKworI2lmIEVOQUJMRShERkdf
SklUKQorICAgIG5hbWVzcGFjZSBERkcgeworICAgIGNsYXNzIExvbmdMaXZlZFN0YXRlOworICAg
IH0KKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworICAgIHN0cnVjdCBIYXNoVGFibGU7Cisg
ICAgc3RydWN0IEluc3RydWN0aW9uOworCisgICAgc3RydWN0IERTVE9mZnNldENhY2hlIHsKKyAg
ICAgICAgRFNUT2Zmc2V0Q2FjaGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXNldCgpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHJlc2V0KCkKKyAgICAgICAgeworICAg
ICAgICAgICAgb2Zmc2V0ID0gMC4wOworICAgICAgICAgICAgc3RhcnQgPSAwLjA7CisgICAgICAg
ICAgICBlbmQgPSAtMS4wOworICAgICAgICAgICAgaW5jcmVtZW50ID0gMC4wOworICAgICAgICB9
CisKKyAgICAgICAgZG91YmxlIG9mZnNldDsKKyAgICAgICAgZG91YmxlIHN0YXJ0OworICAgICAg
ICBkb3VibGUgZW5kOworICAgICAgICBkb3VibGUgaW5jcmVtZW50OworICAgIH07CisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKyAgICBjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKKworI2lmIENPTVBJ
TEVSKE1TVkMpCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxl
OiA0MjAwKSAvLyBEaXNhYmxlICJ6ZXJvLXNpemVkIGFycmF5IGluIHN0cnVjdC91bmlvbiIgd2Fy
bmluZworI2VuZGlmCisgICAgc3RydWN0IFNjcmF0Y2hCdWZmZXIgeworICAgICAgICBTY3JhdGNo
QnVmZmVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgdS5tX2FjdGl2ZUxlbmd0aCA9IDA7Cisg
ICAgICAgIH0KKworICAgICAgICBzdGF0aWMgU2NyYXRjaEJ1ZmZlciogY3JlYXRlKHNpemVfdCBz
aXplKQorICAgICAgICB7CisgICAgICAgICAgICBTY3JhdGNoQnVmZmVyKiByZXN1bHQgPSBuZXcg
KGZhc3RNYWxsb2MoU2NyYXRjaEJ1ZmZlcjo6YWxsb2NhdGlvblNpemUoc2l6ZSkpKSBTY3JhdGNo
QnVmZmVyOworCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAg
ICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShzaXplX3QgYnVmZmVyU2l6ZSkgeyByZXR1
cm4gc2l6ZW9mKFNjcmF0Y2hCdWZmZXIpICsgYnVmZmVyU2l6ZTsgfQorICAgICAgICB2b2lkIHNl
dEFjdGl2ZUxlbmd0aChzaXplX3QgYWN0aXZlTGVuZ3RoKSB7IHUubV9hY3RpdmVMZW5ndGggPSBh
Y3RpdmVMZW5ndGg7IH0KKyAgICAgICAgc2l6ZV90IGFjdGl2ZUxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIHUubV9hY3RpdmVMZW5ndGg7IH07CisgICAgICAgIHNpemVfdCogYWN0aXZlTGVuZ3RoUHRy
KCkgeyByZXR1cm4gJnUubV9hY3RpdmVMZW5ndGg7IH07CisgICAgICAgIHZvaWQqIGRhdGFCdWZm
ZXIoKSB7IHJldHVybiBtX2J1ZmZlcjsgfQorCisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAg
IHNpemVfdCBtX2FjdGl2ZUxlbmd0aDsKKyAgICAgICAgICAgIGRvdWJsZSBwYWQ7IC8vIE1ha2Ug
c3VyZSBtX2J1ZmZlciBpcyBkb3VibGUgYWxpZ25lZC4KKyAgICAgICAgfSB1OworI2lmIENQVShN
SVBTKSAmJiAoZGVmaW5lZCBXVEZfTUlQU19BUkNIX1JFViAmJiBXVEZfTUlQU19BUkNIX1JFViA9
PSAyKQorICAgICAgICB2b2lkKiBtX2J1ZmZlclswXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgp
KSk7CisjZWxzZQorICAgICAgICB2b2lkKiBtX2J1ZmZlclswXTsKKyNlbmRpZgorICAgIH07Cisj
aWYgQ09NUElMRVIoTVNWQykKKyNwcmFnbWEgd2FybmluZyhwb3ApCisjZW5kaWYKKyNlbmRpZgor
CisgICAgY2xhc3MgSlNHbG9iYWxEYXRhIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpT
R2xvYmFsRGF0YT4geworICAgIHB1YmxpYzoKKyAgICAgICAgLy8gV2ViQ29yZSBoYXMgYSBvbmUt
dG8tb25lIG1hcHBpbmcgb2YgdGhyZWFkcyB0byBKU0dsb2JhbERhdGFzOworICAgICAgICAvLyBl
aXRoZXIgY3JlYXRlKCkgb3IgY3JlYXRlTGVha2VkKCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9u
Y2UKKyAgICAgICAgLy8gb24gYSB0aHJlYWQsIHRoaXMgaXMgdGhlICdkZWZhdWx0JyBKU0dsb2Jh
bERhdGEgKGl0IHVzZXMgdGhlCisgICAgICAgIC8vIHRocmVhZCdzIGRlZmF1bHQgc3RyaW5nIHVu
aXF1aW5nIHRhYmxlIGZyb20gd3RmVGhyZWFkRGF0YSkuCisgICAgICAgIC8vIEFQSSBjb250ZXh0
cyBjcmVhdGVkIHVzaW5nIHRoZSBuZXcgY29udGV4dCBncm91cCBhd2FyZSBpbnRlcmZhY2UKKyAg
ICAgICAgLy8gY3JlYXRlIEFQSUNvbnRleHRHcm91cCBvYmplY3RzIHdoaWNoIHJlcXVpcmUgbGVz
cyBsb2NraW5nIG9mIEpTQworICAgICAgICAvLyB0aGFuIHRoZSBvbGQgc2luZ2xldG9uIEFQSVNo
YXJlZCBKU0dsb2JhbERhdGEgY3JlYXRlZCBmb3IgdXNlIGJ5CisgICAgICAgIC8vIHRoZSBvcmln
aW5hbCBBUEkuCisgICAgICAgIGVudW0gR2xvYmFsRGF0YVR5cGUgeyBEZWZhdWx0LCBBUElDb250
ZXh0R3JvdXAsIEFQSVNoYXJlZCB9OworICAgICAgICAKKyAgICAgICAgc3RydWN0IENsaWVudERh
dGEgeworICAgICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+Q2xpZW50RGF0YSgp
ID0gMDsKKyAgICAgICAgfTsKKworICAgICAgICBib29sIGlzU2hhcmVkSW5zdGFuY2UoKSB7IHJl
dHVybiBnbG9iYWxEYXRhVHlwZSA9PSBBUElTaGFyZWQ7IH0KKyAgICAgICAgYm9vbCB1c2luZ0FQ
SSgpIHsgcmV0dXJuIGdsb2JhbERhdGFUeXBlICE9IERlZmF1bHQ7IH0KKyAgICAgICAgc3RhdGlj
IGJvb2wgc2hhcmVkSW5zdGFuY2VFeGlzdHMoKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIEpTR2xvYmFsRGF0YSYgc2hhcmVkSW5zdGFuY2UoKTsKKworICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IGNyZWF0ZShIZWFwVHlw
ZSA9IFNtYWxsSGVhcCk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVm
UHRyPEpTR2xvYmFsRGF0YT4gY3JlYXRlTGVha2VkKEhlYXBUeXBlID0gU21hbGxIZWFwKTsKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBjcmVhdGVDb250ZXh0R3JvdXAo
SGVhcFR5cGUgPSBTbWFsbEhlYXApOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB+SlNHbG9i
YWxEYXRhKCk7CisKKyAgICAgICAgdm9pZCBtYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygp
IHsgaGVhcC5tYWNoaW5lVGhyZWFkcygpLm1ha2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCk7
IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU0xvY2s+IG1fYXBpTG9jazsKKwor
ICAgIHB1YmxpYzoKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKQorICAgICAgICAvLyBleGVjdXRhYmxl
QWxsb2NhdG9yIHNob3VsZCBiZSBkZXN0cnVjdGVkIGFmdGVyIHRoZSBoZWFwLCBhcyB0aGUgaGVh
cCBjYW4gY2FsbCBleGVjdXRhYmxlQWxsb2NhdG9yCisgICAgICAgIC8vIGluIGl0cyBkZXN0cnVj
dG9yLgorICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yIGV4ZWN1dGFibGVBbGxvY2F0b3I7Cisj
ZW5kaWYKKworICAgICAgICAvLyBUaGUgaGVhcCBzaG91bGQgYmUganVzdCBhZnRlciBleGVjdXRh
YmxlQWxsb2NhdG9yIGFuZCBiZWZvcmUgb3RoZXIgbWVtYmVycyB0byBlbnN1cmUgdGhhdCBpdCdz
CisgICAgICAgIC8vIGRlc3RydWN0ZWQgYWZ0ZXIgYWxsIHRoZSBvYmplY3RzIHRoYXQgcmVmZXJl
bmNlIGl0LgorICAgICAgICBIZWFwIGhlYXA7CisgICAgICAgIAorI2lmIEVOQUJMRShERkdfSklU
KQorICAgICAgICBPd25QdHI8REZHOjpMb25nTGl2ZWRTdGF0ZT4gbV9kZmdTdGF0ZTsKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKworICAgICAgICBHbG9iYWxEYXRhVHlwZSBnbG9iYWxEYXRh
VHlwZTsKKyAgICAgICAgQ2xpZW50RGF0YSogY2xpZW50RGF0YTsKKyAgICAgICAgRXhlY1N0YXRl
KiB0b3BDYWxsRnJhbWU7CisgICAgICAgIFdhdGNoZG9nIHdhdGNoZG9nOworCisgICAgICAgIGNv
bnN0IEhhc2hUYWJsZSogYXJyYXlDb25zdHJ1Y3RvclRhYmxlOworICAgICAgICBjb25zdCBIYXNo
VGFibGUqIGFycmF5UHJvdG90eXBlVGFibGU7CisgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogYm9v
bGVhblByb3RvdHlwZVRhYmxlOworICAgICAgICBjb25zdCBIYXNoVGFibGUqIGRhdGVUYWJsZTsK
KyAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBkYXRlQ29uc3RydWN0b3JUYWJsZTsKKyAgICAgICAg
Y29uc3QgSGFzaFRhYmxlKiBlcnJvclByb3RvdHlwZVRhYmxlOworICAgICAgICBjb25zdCBIYXNo
VGFibGUqIGdsb2JhbE9iamVjdFRhYmxlOworICAgICAgICBjb25zdCBIYXNoVGFibGUqIGpzb25U
YWJsZTsKKyAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBtYXRoVGFibGU7CisgICAgICAgIGNvbnN0
IEhhc2hUYWJsZSogbnVtYmVyQ29uc3RydWN0b3JUYWJsZTsKKyAgICAgICAgY29uc3QgSGFzaFRh
YmxlKiBudW1iZXJQcm90b3R5cGVUYWJsZTsKKyAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBvYmpl
Y3RDb25zdHJ1Y3RvclRhYmxlOworICAgICAgICBjb25zdCBIYXNoVGFibGUqIHByaXZhdGVOYW1l
UHJvdG90eXBlVGFibGU7CisgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogcmVnRXhwVGFibGU7Cisg
ICAgICAgIGNvbnN0IEhhc2hUYWJsZSogcmVnRXhwQ29uc3RydWN0b3JUYWJsZTsKKyAgICAgICAg
Y29uc3QgSGFzaFRhYmxlKiByZWdFeHBQcm90b3R5cGVUYWJsZTsKKyAgICAgICAgY29uc3QgSGFz
aFRhYmxlKiBzdHJpbmdDb25zdHJ1Y3RvclRhYmxlOworICAgICAgICAKKyAgICAgICAgU3Ryb25n
PFN0cnVjdHVyZT4gc3RydWN0dXJlU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJl
PiBzdHJ1Y3R1cmVSYXJlRGF0YVN0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4g
ZGVidWdnZXJBY3RpdmF0aW9uU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB0
ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1
cmU+IHN0cmluZ1N0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gbm90QW5PYmpl
Y3RTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb3BlcnR5TmFtZUl0ZXJh
dG9yU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBnZXR0ZXJTZXR0ZXJTdHJ1
Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGFwaVdyYXBwZXJTdHJ1Y3R1cmU7Cisg
ICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IEpTU2NvcGVTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9u
ZzxTdHJ1Y3R1cmU+IGV4ZWN1dGFibGVTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1
cmU+IG5hdGl2ZUV4ZWN1dGFibGVTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+
IGV2YWxFeGVjdXRhYmxlU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9n
cmFtRXhlY3V0YWJsZVN0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZnVuY3Rp
b25FeGVjdXRhYmxlU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiByZWdFeHBT
dHJ1Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHNoYXJlZFN5bWJvbFRhYmxlU3Ry
dWN0dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1cmVDaGFpblN0cnVjdHVy
ZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3BhcnNlQXJyYXlWYWx1ZU1hcFN0cnVjdHVy
ZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2l0aFNjb3BlU3RydWN0dXJlOworICAgICAg
ICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZTsK
KyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0
dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZEV2YWxDb2RlQmxvY2tTdHJ1
Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2tTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb3BlcnR5VGFibGVTdHJ1
Y3R1cmU7CisKKyAgICAgICAgSWRlbnRpZmllclRhYmxlKiBpZGVudGlmaWVyVGFibGU7CisgICAg
ICAgIENvbW1vbklkZW50aWZpZXJzKiBwcm9wZXJ0eU5hbWVzOworICAgICAgICBjb25zdCBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciogZW1wdHlMaXN0OyAvLyBMaXN0cyBhcmUgc3VwcG9zZWQgdG8gYmUg
YWxsb2NhdGVkIG9uIHRoZSBzdGFjayB0byBoYXZlIHRoZWlyIGVsZW1lbnRzIHByb3Blcmx5IG1h
cmtlZCwgd2hpY2ggaXMgbm90IHRoZSBjYXNlIGhlcmUgLSBidXQgdGhpcyBsaXN0IGhhcyBub3Ro
aW5nIHRvIG1hcmsuCisgICAgICAgIFNtYWxsU3RyaW5ncyBzbWFsbFN0cmluZ3M7CisgICAgICAg
IE51bWVyaWNTdHJpbmdzIG51bWVyaWNTdHJpbmdzOworICAgICAgICBEYXRlSW5zdGFuY2VDYWNo
ZSBkYXRlSW5zdGFuY2VDYWNoZTsKKyAgICAgICAgV1RGOjpTaW1wbGVTdGF0cyBtYWNoaW5lQ29k
ZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQ7CisgICAgICAgIFZlY3RvcjxDb2Rl
QmxvY2sqPiBjb2RlQmxvY2tzQmVpbmdDb21waWxlZDsKKyAgICAgICAgdm9pZCBzdGFydGVkQ29t
cGlsaW5nKENvZGVCbG9jayogY29kZUJsb2NrKQorICAgICAgICB7CisgICAgICAgICAgICBjb2Rl
QmxvY2tzQmVpbmdDb21waWxlZC5hcHBlbmQoY29kZUJsb2NrKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgZmluaXNoZWRDb21waWxpbmcoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgICAg
IHsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBjb2RlQmxvY2sgPT0gY29k
ZUJsb2Nrc0JlaW5nQ29tcGlsZWQubGFzdCgpKTsKKyAgICAgICAgICAgIGNvZGVCbG9ja3NCZWlu
Z0NvbXBpbGVkLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0SW5E
ZWZpbmVPd25Qcm9wZXJ0eShib29sIGluRGVmaW5lT3duUHJvcGVydHkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1faW5EZWZpbmVPd25Qcm9wZXJ0eSA9IGluRGVmaW5lT3duUHJvcGVydHk7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIGlzSW5EZWZpbmVPd25Qcm9wZXJ0eSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBtX2luRGVmaW5lT3duUHJvcGVydHk7CisgICAgICAgIH0K
KworICAgICAgICBMZWdhY3lQcm9maWxlciogZW5hYmxlZFByb2ZpbGVyKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fZW5hYmxlZFByb2ZpbGVyOworICAgICAgICB9CisKKyNpZiBF
TkFCTEUoSklUKSAmJiBFTkFCTEUoTExJTlQpCisgICAgICAgIGJvb2wgY2FuVXNlSklUKCkgeyBy
ZXR1cm4gbV9jYW5Vc2VKSVQ7IH0KKyNlbGlmIEVOQUJMRShKSVQpCisgICAgICAgIGJvb2wgY2Fu
VXNlSklUKCkgeyByZXR1cm4gdHJ1ZTsgfSAvLyBqaXQgb25seQorI2Vsc2UKKyAgICAgICAgYm9v
bCBjYW5Vc2VKSVQoKSB7IHJldHVybiBmYWxzZTsgfSAvLyBpbnRlcnByZXRlciBvbmx5CisjZW5k
aWYKKworI2lmIEVOQUJMRShZQVJSX0pJVCkKKyAgICAgICAgYm9vbCBjYW5Vc2VSZWdFeHBKSVQo
KSB7IHJldHVybiBtX2NhblVzZVJlZ0V4cEpJVDsgfQorI2Vsc2UKKyAgICAgICAgYm9vbCBjYW5V
c2VSZWdFeHBKSVQoKSB7IHJldHVybiBmYWxzZTsgfSAvLyBpbnRlcnByZXRlciBvbmx5CisjZW5k
aWYKKworICAgICAgICBTb3VyY2VQcm92aWRlckNhY2hlKiBhZGRTb3VyY2VQcm92aWRlckNhY2hl
KFNvdXJjZVByb3ZpZGVyKik7CisgICAgICAgIHZvaWQgY2xlYXJTb3VyY2VQcm92aWRlckNhY2hl
cygpOworCisgICAgICAgIFByb3RvdHlwZU1hcCBwcm90b3R5cGVNYXA7CisKKyAgICAgICAgT3du
UHRyPFBhcnNlckFyZW5hPiBwYXJzZXJBcmVuYTsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJl
ZlB0cjxTb3VyY2VQcm92aWRlcj4sIFJlZlB0cjxTb3VyY2VQcm92aWRlckNhY2hlPiA+IFNvdXJj
ZVByb3ZpZGVyQ2FjaGVNYXA7CisgICAgICAgIFNvdXJjZVByb3ZpZGVyQ2FjaGVNYXAgc291cmNl
UHJvdmlkZXJDYWNoZU1hcDsKKyAgICAgICAgT3duUHRyPEtleXdvcmRzPiBrZXl3b3JkczsKKyAg
ICAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyOworI2lmIEVOQUJMRShKSVQpCisgICAgICAg
IE93blB0cjxKSVRUaHVua3M+IGppdFN0dWJzOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgZ2V0Q1RJU3R1YihUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBqaXRTdHVicy0+Y3RpU3R1Yih0aGlzLCBnZW5lcmF0b3IpOworICAgICAg
ICB9CisgICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5j
dGlvbiwgSW50cmluc2ljKTsKKyNlbmRpZgorICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBnZXRI
b3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKTsK
KworICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICAgICAgUmVmQ291bnRlZEFycmF5PFN0
YWNrRnJhbWU+IGV4Y2VwdGlvblN0YWNrOworCisgICAgICAgIGNvbnN0IENsYXNzSW5mbyogY29u
c3QganNBcnJheUNsYXNzSW5mbzsKKyAgICAgICAgY29uc3QgQ2xhc3NJbmZvKiBjb25zdCBqc0Zp
bmFsT2JqZWN0Q2xhc3NJbmZvOworCisgICAgICAgIFJldHVybkFkZHJlc3NQdHIgZXhjZXB0aW9u
TG9jYXRpb247CisgICAgICAgIEpTVmFsdWUgaG9zdENhbGxSZXR1cm5WYWx1ZTsKKyAgICAgICAg
RXhlY1N0YXRlKiBjYWxsRnJhbWVGb3JUaHJvdzsKKyAgICAgICAgdm9pZCogdGFyZ2V0TWFjaGlu
ZVBDRm9yVGhyb3c7CisgICAgICAgIEluc3RydWN0aW9uKiB0YXJnZXRJbnRlcnByZXRlclBDRm9y
VGhyb3c7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgIHVpbnQzMl90IG9zckV4aXRJbmRl
eDsKKyAgICAgICAgdm9pZCogb3NyRXhpdEp1bXBEZXN0aW5hdGlvbjsKKyAgICAgICAgVmVjdG9y
PFNjcmF0Y2hCdWZmZXIqPiBzY3JhdGNoQnVmZmVyczsKKyAgICAgICAgc2l6ZV90IHNpemVPZkxh
c3RTY3JhdGNoQnVmZmVyOworICAgICAgICAKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRj
aEJ1ZmZlckZvclNpemUoc2l6ZV90IHNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgh
c2l6ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKHNpemUgPiBzaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlcikgeworICAgICAgICAgICAgICAg
IC8vIFByb3RlY3QgYWdhaW5zdCBhIE5eMiBtZW1vcnkgdXNhZ2UgcGF0aG9sb2d5IGJ5IGVuc3Vy
aW5nCisgICAgICAgICAgICAgICAgLy8gdGhhdCBhdCB3b3JzdCwgd2UgZ2V0IGEgZ2VvbWV0cmlj
IHNlcmllcywgbWVhbmluZyB0aGF0IHRoZQorICAgICAgICAgICAgICAgIC8vIHRvdGFsIG1lbW9y
eSB1c2FnZSBpcyBzb21ld2hlcmUgYXJvdW5kCisgICAgICAgICAgICAgICAgLy8gbWF4KHNjcmF0
Y2ggYnVmZmVyIHNpemUpICogNC4KKyAgICAgICAgICAgICAgICBzaXplT2ZMYXN0U2NyYXRjaEJ1
ZmZlciA9IHNpemUgKiAyOworCisgICAgICAgICAgICAgICAgc2NyYXRjaEJ1ZmZlcnMuYXBwZW5k
KFNjcmF0Y2hCdWZmZXI6OmNyZWF0ZShzaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlcikpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBTY3JhdGNoQnVmZmVyKiByZXN1bHQgPSBzY3JhdGNoQnVm
ZmVycy5sYXN0KCk7CisgICAgICAgICAgICByZXN1bHQtPnNldEFjdGl2ZUxlbmd0aCgwKTsKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGdhdGhl
ckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CisjZW5kaWYKKworICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZHluYW1pY0dsb2JhbE9iamVjdDsKKworICAgICAgICBIYXNoU2V0
PEpTT2JqZWN0Kj4gc3RyaW5nUmVjdXJzaW9uQ2hlY2tWaXNpdGVkT2JqZWN0czsKKworICAgICAg
ICBkb3VibGUgY2FjaGVkVVRDT2Zmc2V0OworICAgICAgICBEU1RPZmZzZXRDYWNoZSBkc3RPZmZz
ZXRDYWNoZTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBjYWNoZWREYXRlU3RyaW5nOworICAg
ICAgICBkb3VibGUgY2FjaGVkRGF0ZVN0cmluZ1ZhbHVlOworCisgICAgICAgIExlZ2FjeVByb2Zp
bGVyKiBtX2VuYWJsZWRQcm9maWxlcjsKKyAgICAgICAgT3duUHRyPFByb2ZpbGVyOjpEYXRhYmFz
ZT4gbV9wZXJCeXRlY29kZVByb2ZpbGVyOworICAgICAgICBSZWdFeHBDYWNoZSogbV9yZWdFeHBD
YWNoZTsKKyAgICAgICAgQnVtcFBvaW50ZXJBbGxvY2F0b3IgbV9yZWdFeHBBbGxvY2F0b3I7CisK
KyNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCisgICAgICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8
UmVmUHRyPFJlZ0V4cD4gPiBSVFRyYWNlTGlzdDsKKyAgICAgICAgUlRUcmFjZUxpc3QqIG1fcnRU
cmFjZUxpc3Q7CisjZW5kaWYKKworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgVGhyZWFkSWRlbnRp
ZmllciBleGNsdXNpdmVUaHJlYWQ7CisjZW5kaWYKKworICAgICAgICBDYWNoZWRUcmFuc2NlbmRl
bnRhbEZ1bmN0aW9uPHN0ZDo6c2luPiBjYWNoZWRTaW47CisKKyAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCByZXNldERhdGVDYWNoZSgpOworCisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgc3RhcnRTYW1wbGluZygpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHN0
b3BTYW1wbGluZygpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXBTYW1wbGVE
YXRhKEV4ZWNTdGF0ZSogZXhlYyk7CisgICAgICAgIFJlZ0V4cENhY2hlKiByZWdFeHBDYWNoZSgp
IHsgcmV0dXJuIG1fcmVnRXhwQ2FjaGU7IH0KKyNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCisg
ICAgICAgIHZvaWQgYWRkUmVnRXhwVG9UcmFjZShQYXNzUmVmUHRyPFJlZ0V4cD4gcmVnRXhwKTsK
KyNlbmRpZgorICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXBSZWdFeHBUcmFjZSgp
OworCisgICAgICAgIGJvb2wgaXNDb2xsZWN0b3JCdXN5KCkgeyByZXR1cm4gaGVhcC5pc0J1c3ko
KTsgfQorICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlbGVhc2VFeGVjdXRhYmxlTWVt
b3J5KCk7CisKKyNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKKyAgICAgICAgYm9vbCBpc0luaXRp
YWxpemluZ09iamVjdCgpIGNvbnN0OyAKKyAgICAgICAgdm9pZCBzZXRJbml0aWFsaXppbmdPYmpl
Y3RDbGFzcyhjb25zdCBDbGFzc0luZm8qKTsKKyNlbmRpZgorCisgICAgICAgIHVuc2lnbmVkIG1f
bmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zOworCisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBzX21pbk51bWJlck9mTmV3U3RyaW5nc1RvSGFzaENvbnMgPSAxMDA7CisKKyAgICAgICAg
Ym9vbCBoYXZlRW5vdWdoTmV3U3RyaW5nc1RvSGFzaENvbnMoKSB7IHJldHVybiBtX25ld1N0cmlu
Z3NTaW5jZUxhc3RIYXNoQ29ucyA+IHNfbWluTnVtYmVyT2ZOZXdTdHJpbmdzVG9IYXNoQ29uczsg
fQorICAgICAgICB2b2lkIHJlc2V0TmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zKCkgeyBtX25l
d1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29ucyA9IDA7IH0KKworI2RlZmluZSByZWdpc3RlclR5cGVk
QXJyYXlGdW5jdGlvbih0eXBlLCBjYXBpdGFsaXplZFR5cGUpIFwKKyAgICAgICAgdm9pZCByZWdp
c3RlclR5cGVkQXJyYXlEZXNjcmlwdG9yKGNvbnN0IGNhcGl0YWxpemVkVHlwZSMjQXJyYXkqLCBj
b25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgXAorICAgICAgICB7IFwKKyAg
ICAgICAgICAgIEFTU0VSVCghbV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvci5tX2NsYXNzSW5mbyB8
fCBtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yLm1fY2xhc3NJbmZvID09IGRlc2NyaXB0b3IubV9j
bGFzc0luZm8pOyBcCisgICAgICAgICAgICBtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yID0gZGVz
Y3JpcHRvcjsgXAorICAgICAgICAgICAgQVNTRVJUKG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3Iu
bV9jbGFzc0luZm8pOyBcCisgICAgICAgIH0gXAorICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVz
Y3JpcHRvciYgdHlwZSMjQXJyYXlEZXNjcmlwdG9yKCkgY29uc3QgeyBBU1NFUlQobV8jI3R5cGUj
I0FycmF5RGVzY3JpcHRvci5tX2NsYXNzSW5mbyk7IHJldHVybiBtXyMjdHlwZSMjQXJyYXlEZXNj
cmlwdG9yOyB9CisKKyAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oaW50OCwgSW50
OCk7CisgICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKGludDE2LCBJbnQxNik7Cisg
ICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKGludDMyLCBJbnQzMik7CisgICAgICAg
IHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKHVpbnQ4LCBVaW50OCk7CisgICAgICAgIHJlZ2lz
dGVyVHlwZWRBcnJheUZ1bmN0aW9uKHVpbnQ4Q2xhbXBlZCwgVWludDhDbGFtcGVkKTsKKyAgICAg
ICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odWludDE2LCBVaW50MTYpOworICAgICAgICBy
ZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih1aW50MzIsIFVpbnQzMik7CisgICAgICAgIHJlZ2lz
dGVyVHlwZWRBcnJheUZ1bmN0aW9uKGZsb2F0MzIsIEZsb2F0MzIpOworICAgICAgICByZWdpc3Rl
clR5cGVkQXJyYXlGdW5jdGlvbihmbG9hdDY0LCBGbG9hdDY0KTsKKyN1bmRlZiByZWdpc3RlclR5
cGVkQXJyYXlGdW5jdGlvbgorICAgICAgICAKKyAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2Ny
aXB0b3IqIHR5cGVkQXJyYXlEZXNjcmlwdG9yKFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAgY2FzZSBU
eXBlZEFycmF5Tm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGNh
c2UgVHlwZWRBcnJheUludDg6CisgICAgICAgICAgICAgICAgcmV0dXJuICZpbnQ4QXJyYXlEZXNj
cmlwdG9yKCk7CisgICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlJbnQxNjoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJmludDE2QXJyYXlEZXNjcmlwdG9yKCk7CisgICAgICAgICAgICBjYXNlIFR5
cGVkQXJyYXlJbnQzMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gJmludDMyQXJyYXlEZXNjcmlw
dG9yKCk7CisgICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50ODoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCk7CisgICAgICAgICAgICBjYXNlIFR5cGVk
QXJyYXlVaW50OENsYW1wZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50OENsYW1wZWRB
cnJheURlc2NyaXB0b3IoKTsKKyAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQxNjoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gJnVpbnQxNkFycmF5RGVzY3JpcHRvcigpOworICAgICAgICAg
ICAgY2FzZSBUeXBlZEFycmF5VWludDMyOgorICAgICAgICAgICAgICAgIHJldHVybiAmdWludDMy
QXJyYXlEZXNjcmlwdG9yKCk7CisgICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgor
ICAgICAgICAgICAgICAgIHJldHVybiAmZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpOworICAgICAg
ICAgICAgY2FzZSBUeXBlZEFycmF5RmxvYXQ2NDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJmZs
b2F0NjRBcnJheURlc2NyaXB0b3IoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIEpTTG9jayYgYXBpTG9jaygpIHsgcmV0dXJuICptX2FwaUxv
Y2s7IH0KKyAgICAgICAgQ29kZUNhY2hlKiBjb2RlQ2FjaGUoKSB7IHJldHVybiBtX2NvZGVDYWNo
ZS5nZXQoKTsgfQorCisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGlzY2FyZEFsbENv
ZGUoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CisgICAgICAgIAorICAgICAgICBKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cGUs
IEhlYXBUeXBlKTsKKyAgICAgICAgc3RhdGljIEpTR2xvYmFsRGF0YSomIHNoYXJlZEluc3RhbmNl
SW50ZXJuYWwoKTsKKyAgICAgICAgdm9pZCBjcmVhdGVOYXRpdmVUaHVuaygpOworI2lmIEVOQUJM
RShBU1NFTUJMRVIpCisgICAgICAgIGJvb2wgbV9jYW5Vc2VBc3NlbWJsZXI7CisjZW5kaWYKKyNp
ZiBFTkFCTEUoSklUKQorICAgICAgICBib29sIG1fY2FuVXNlSklUOworI2VuZGlmCisjaWYgRU5B
QkxFKFlBUlJfSklUKQorICAgICAgICBib29sIG1fY2FuVXNlUmVnRXhwSklUOworI2VuZGlmCisj
aWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCisgICAgICAgIGNvbnN0IENsYXNzSW5mbyogbV9pbml0
aWFsaXppbmdPYmplY3RDbGFzczsKKyNlbmRpZgorICAgICAgICBib29sIG1faW5EZWZpbmVPd25Q
cm9wZXJ0eTsKKyAgICAgICAgT3duUHRyPENvZGVDYWNoZT4gbV9jb2RlQ2FjaGU7CisKKyAgICAg
ICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV9pbnQ4QXJyYXlEZXNjcmlwdG9yOworICAgICAgICBU
eXBlZEFycmF5RGVzY3JpcHRvciBtX2ludDE2QXJyYXlEZXNjcmlwdG9yOworICAgICAgICBUeXBl
ZEFycmF5RGVzY3JpcHRvciBtX2ludDMyQXJyYXlEZXNjcmlwdG9yOworICAgICAgICBUeXBlZEFy
cmF5RGVzY3JpcHRvciBtX3VpbnQ4QXJyYXlEZXNjcmlwdG9yOworICAgICAgICBUeXBlZEFycmF5
RGVzY3JpcHRvciBtX3VpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcjsKKyAgICAgICAgVHlwZWRB
cnJheURlc2NyaXB0b3IgbV91aW50MTZBcnJheURlc2NyaXB0b3I7CisgICAgICAgIFR5cGVkQXJy
YXlEZXNjcmlwdG9yIG1fdWludDMyQXJyYXlEZXNjcmlwdG9yOworICAgICAgICBUeXBlZEFycmF5
RGVzY3JpcHRvciBtX2Zsb2F0MzJBcnJheURlc2NyaXB0b3I7CisgICAgICAgIFR5cGVkQXJyYXlE
ZXNjcmlwdG9yIG1fZmxvYXQ2NEFycmF5RGVzY3JpcHRvcjsKKyAgICB9OworCisjaWYgRU5BQkxF
KEdDX1ZBTElEQVRJT04pCisgICAgaW5saW5lIGJvb2wgSlNHbG9iYWxEYXRhOjppc0luaXRpYWxp
emluZ09iamVjdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISFtX2luaXRpYWxpemlu
Z09iamVjdENsYXNzOworICAgIH0KKworICAgIGlubGluZSB2b2lkIEpTR2xvYmFsRGF0YTo6c2V0
SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoY29uc3QgQ2xhc3NJbmZvKiBpbml0aWFsaXppbmdPYmpl
Y3RDbGFzcykKKyAgICB7CisgICAgICAgIG1faW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MgPSBpbml0
aWFsaXppbmdPYmplY3RDbGFzczsKKyAgICB9CisjZW5kaWYKKworICAgIGlubGluZSBIZWFwKiBX
ZWFrU2V0OjpoZWFwKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAmbV9nbG9iYWxEYXRh
LT5oZWFwOworICAgIH0KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dsb2Jh
bERhdGFfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw4ICsyNiw4IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgSlNHbG9iYWxEYXRh
X2gKLSNkZWZpbmUgSlNHbG9iYWxEYXRhX2gKKyNpZm5kZWYgVk1faAorI2RlZmluZSBWTV9oCiAK
ICNpbmNsdWRlICJDYWNoZWRUcmFuc2NlbmRlbnRhbEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiRGF0
ZUluc3RhbmNlQ2FjaGUuaCIKQEAgLTE2MiwzMSArMTYyLDMxIEBAIG5hbWVzcGFjZSBKU0Mgewog
I2VuZGlmCiAjZW5kaWYKIAotICAgIGNsYXNzIEpTR2xvYmFsRGF0YSA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxKU0dsb2JhbERhdGE+IHsKKyAgICBjbGFzcyBWTSA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxWTT4gewogICAgIHB1YmxpYzoKLSAgICAgICAgLy8gV2ViQ29yZSBo
YXMgYSBvbmUtdG8tb25lIG1hcHBpbmcgb2YgdGhyZWFkcyB0byBKU0dsb2JhbERhdGFzOworICAg
ICAgICAvLyBXZWJDb3JlIGhhcyBhIG9uZS10by1vbmUgbWFwcGluZyBvZiB0aHJlYWRzIHRvIFZN
czsKICAgICAgICAgLy8gZWl0aGVyIGNyZWF0ZSgpIG9yIGNyZWF0ZUxlYWtlZCgpIHNob3VsZCBv
bmx5IGJlIGNhbGxlZCBvbmNlCi0gICAgICAgIC8vIG9uIGEgdGhyZWFkLCB0aGlzIGlzIHRoZSAn
ZGVmYXVsdCcgSlNHbG9iYWxEYXRhIChpdCB1c2VzIHRoZQorICAgICAgICAvLyBvbiBhIHRocmVh
ZCwgdGhpcyBpcyB0aGUgJ2RlZmF1bHQnIFZNIChpdCB1c2VzIHRoZQogICAgICAgICAvLyB0aHJl
YWQncyBkZWZhdWx0IHN0cmluZyB1bmlxdWluZyB0YWJsZSBmcm9tIHd0ZlRocmVhZERhdGEpLgog
ICAgICAgICAvLyBBUEkgY29udGV4dHMgY3JlYXRlZCB1c2luZyB0aGUgbmV3IGNvbnRleHQgZ3Jv
dXAgYXdhcmUgaW50ZXJmYWNlCiAgICAgICAgIC8vIGNyZWF0ZSBBUElDb250ZXh0R3JvdXAgb2Jq
ZWN0cyB3aGljaCByZXF1aXJlIGxlc3MgbG9ja2luZyBvZiBKU0MKLSAgICAgICAgLy8gdGhhbiB0
aGUgb2xkIHNpbmdsZXRvbiBBUElTaGFyZWQgSlNHbG9iYWxEYXRhIGNyZWF0ZWQgZm9yIHVzZSBi
eQorICAgICAgICAvLyB0aGFuIHRoZSBvbGQgc2luZ2xldG9uIEFQSVNoYXJlZCBWTSBjcmVhdGVk
IGZvciB1c2UgYnkKICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIEFQSS4KLSAgICAgICAgZW51bSBH
bG9iYWxEYXRhVHlwZSB7IERlZmF1bHQsIEFQSUNvbnRleHRHcm91cCwgQVBJU2hhcmVkIH07Cisg
ICAgICAgIGVudW0gVk1UeXBlIHsgRGVmYXVsdCwgQVBJQ29udGV4dEdyb3VwLCBBUElTaGFyZWQg
fTsKICAgICAgICAgCiAgICAgICAgIHN0cnVjdCBDbGllbnREYXRhIHsKICAgICAgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkNsaWVudERhdGEoKSA9IDA7CiAgICAgICAgIH07CiAK
LSAgICAgICAgYm9vbCBpc1NoYXJlZEluc3RhbmNlKCkgeyByZXR1cm4gZ2xvYmFsRGF0YVR5cGUg
PT0gQVBJU2hhcmVkOyB9Ci0gICAgICAgIGJvb2wgdXNpbmdBUEkoKSB7IHJldHVybiBnbG9iYWxE
YXRhVHlwZSAhPSBEZWZhdWx0OyB9CisgICAgICAgIGJvb2wgaXNTaGFyZWRJbnN0YW5jZSgpIHsg
cmV0dXJuIHZtVHlwZSA9PSBBUElTaGFyZWQ7IH0KKyAgICAgICAgYm9vbCB1c2luZ0FQSSgpIHsg
cmV0dXJuIHZtVHlwZSAhPSBEZWZhdWx0OyB9CiAgICAgICAgIHN0YXRpYyBib29sIHNoYXJlZElu
c3RhbmNlRXhpc3RzKCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0dsb2Jh
bERhdGEmIHNoYXJlZEluc3RhbmNlKCk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBWTSYgc2hhcmVkSW5zdGFuY2UoKTsKIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IGNyZWF0ZShIZWFwVHlwZSA9IFNtYWxsSGVhcCk7
Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPEpTR2xvYmFsRGF0
YT4gY3JlYXRlTGVha2VkKEhlYXBUeXBlID0gU21hbGxIZWFwKTsKLSAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBjcmVhdGVDb250ZXh0R3JvdXAoSGVhcFR5cGUgPSBTbWFs
bEhlYXApOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB+SlNHbG9iYWxEYXRhKCk7CisgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPFZNPiBjcmVhdGUoSGVhcFR5
cGUgPSBTbWFsbEhlYXApOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUGFzc1Jl
ZlB0cjxWTT4gY3JlYXRlTGVha2VkKEhlYXBUeXBlID0gU21hbGxIZWFwKTsKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Vk0+IGNyZWF0ZUNvbnRleHRHcm91cChIZWFwVHlwZSA9IFNtYWxsSGVh
cCk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIH5WTSgpOwogCiAgICAgICAgIHZvaWQgbWFr
ZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKSB7IGhlYXAubWFjaGluZVRocmVhZHMoKS5tYWtl
VXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpOyB9CiAKQEAgLTIwOCw3ICsyMDgsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgT3duUHRyPERGRzo6TG9uZ0xpdmVkU3RhdGU+IG1fZGZnU3Rh
dGU7CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKLSAgICAgICAgR2xvYmFsRGF0YVR5cGUg
Z2xvYmFsRGF0YVR5cGU7CisgICAgICAgIFZNVHlwZSB2bVR5cGU7CiAgICAgICAgIENsaWVudERh
dGEqIGNsaWVudERhdGE7CiAgICAgICAgIEV4ZWNTdGF0ZSogdG9wQ2FsbEZyYW1lOwogICAgICAg
ICBXYXRjaGRvZyB3YXRjaGRvZzsKQEAgLTQ3NCw4ICs0NzQsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwogICAgICAgICAKLSAgICAgICAgSlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXBlLCBIZWFwVHlw
ZSk7Ci0gICAgICAgIHN0YXRpYyBKU0dsb2JhbERhdGEqJiBzaGFyZWRJbnN0YW5jZUludGVybmFs
KCk7CisgICAgICAgIFZNKFZNVHlwZSwgSGVhcFR5cGUpOworICAgICAgICBzdGF0aWMgVk0qJiBz
aGFyZWRJbnN0YW5jZUludGVybmFsKCk7CiAgICAgICAgIHZvaWQgY3JlYXRlTmF0aXZlVGh1bmso
KTsKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogICAgICAgICBib29sIG1fY2FuVXNlQXNzZW1ibGVy
OwpAQCAtNTA0LDEyICs1MDQsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lmIEVO
QUJMRShHQ19WQUxJREFUSU9OKQotICAgIGlubGluZSBib29sIEpTR2xvYmFsRGF0YTo6aXNJbml0
aWFsaXppbmdPYmplY3QoKSBjb25zdAorICAgIGlubGluZSBib29sIFZNOjppc0luaXRpYWxpemlu
Z09iamVjdCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gISFtX2luaXRpYWxpemluZ09i
amVjdENsYXNzOwogICAgIH0KIAotICAgIGlubGluZSB2b2lkIEpTR2xvYmFsRGF0YTo6c2V0SW5p
dGlhbGl6aW5nT2JqZWN0Q2xhc3MoY29uc3QgQ2xhc3NJbmZvKiBpbml0aWFsaXppbmdPYmplY3RD
bGFzcykKKyAgICBpbmxpbmUgdm9pZCBWTTo6c2V0SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoY29u
c3QgQ2xhc3NJbmZvKiBpbml0aWFsaXppbmdPYmplY3RDbGFzcykKICAgICB7CiAgICAgICAgIG1f
aW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MgPSBpbml0aWFsaXppbmdPYmplY3RDbGFzczsKICAgICB9
CkBAIC01MTcsOSArNTE3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBpbmxpbmUgSGVhcCog
V2Vha1NldDo6aGVhcCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gJm1fZ2xvYmFsRGF0
YS0+aGVhcDsKKyAgICAgICAgcmV0dXJuICZtX3ZtLT5oZWFwOwogICAgIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKLSNlbmRpZiAvLyBKU0dsb2JhbERhdGFfaAorI2VuZGlmIC8vIFZNX2gKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dhdGNoZG9nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XYXRjaGRvZy5jcHAJKHJldmlzaW9u
IDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dhdGNoZG9nLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBXYXRjaGRvZzo6fldhdGNoZG9nKCkKICAg
ICBkZXN0cm95VGltZXIoKTsKIH0KIAotdm9pZCBXYXRjaGRvZzo6c2V0VGltZUxpbWl0KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgZG91YmxlIGxpbWl0LAordm9pZCBXYXRjaGRvZzo6c2V0VGlt
ZUxpbWl0KFZNJiB2bSwgZG91YmxlIGxpbWl0LAogICAgIFNob3VsZFRlcm1pbmF0ZUNhbGxiYWNr
IGNhbGxiYWNrLCB2b2lkKiBkYXRhMSwgdm9pZCogZGF0YTIpCiB7CiAgICAgYm9vbCB3YXNFbmFi
bGVkID0gaXNFbmFibGVkKCk7CkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgV2F0Y2hkb2c6OnNldFRp
bWVMaW1pdChKU0dsb2JhbERhdGEKIAogICAgICAgICAvLyBBbmQgaWYgd2UndmUgcHJldmlvdXNs
eSBjb21waWxlZCBhbnkgZnVuY3Rpb25zLCB3ZSBuZWVkIHRvIGRlb3B0CiAgICAgICAgIC8vIHRo
ZW0gYmVjYXVzZSB0aGV5IGRvbid0IGhhYmUgdGhlIG5lZWRlZCBwb2xsaW5nIGNoZWNrcyB5ZXQu
Ci0gICAgICAgIGdsb2JhbERhdGEucmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoKTsKKyAgICAgICAg
dm0ucmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoKTsKICAgICB9CiAKICAgICBzdGFydENvdW50ZG93
bklmTmVlZGVkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XYXRjaGRv
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dhdGNoZG9n
LmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dh
dGNoZG9nLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBFeGVjU3RhdGU7Ci1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIAog
Y2xhc3MgV2F0Y2hkb2cgewogcHVibGljOgpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAg
fldhdGNoZG9nKCk7CiAKICAgICB0eXBlZGVmIGJvb2wgKCpTaG91bGRUZXJtaW5hdGVDYWxsYmFj
aykoRXhlY1N0YXRlKiwgdm9pZCogZGF0YTEsIHZvaWQqIGRhdGEyKTsKLSAgICB2b2lkIHNldFRp
bWVMaW1pdChKU0dsb2JhbERhdGEmLCBkb3VibGUgc2Vjb25kcywgU2hvdWxkVGVybWluYXRlQ2Fs
bGJhY2sgPSAwLCB2b2lkKiBkYXRhMSA9IDAsIHZvaWQqIGRhdGEyID0gMCk7CisgICAgdm9pZCBz
ZXRUaW1lTGltaXQoVk0mLCBkb3VibGUgc2Vjb25kcywgU2hvdWxkVGVybWluYXRlQ2FsbGJhY2sg
PSAwLCB2b2lkKiBkYXRhMSA9IDAsIHZvaWQqIGRhdGEyID0gMCk7CiAKICAgICAvLyBUaGlzIHZl
cnNpb24gb2YgZGlkRmlyZSgpIHdpbGwgY2hlY2sgdGhlIGVsYXBzZWQgQ1BVIHRpbWUgYW5kIGNh
bGwgdGhlCiAgICAgLy8gY2FsbGJhY2sgKGlmIG5lZWRlZCkgdG8gZGV0ZXJtaW5lIGlmIHRoZSB3
YXRjaGRvZyBzaG91bGQgZmlyZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1dyaXRlQmFycmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dyaXRlQmFycmllci5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Xcml0ZUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUs
NyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTQ2VsbDsKLWNsYXNzIEpTR2xvYmFsRGF0
YTsKK2NsYXNzIFZNOwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiAKIHRlbXBsYXRlPGNsYXNzIFQ+
IGNsYXNzIFdyaXRlQmFycmllckJhc2U7CkBAIC02OCwxMSArNjgsMTEgQEAgdGVtcGxhdGU8Y2xh
c3MgVD4gaW5saW5lIHZvaWQgdmFsaWRhdGVDZQogLy8gV2UgaGF2ZSBhIHNlcGFyYXRlIGJhc2Ug
Y2xhc3Mgd2l0aCBubyBjb25zdHJ1Y3RvcnMgZm9yIHVzZSBpbiBVbmlvbnMuCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gY2xhc3MgV3JpdGVCYXJyaWVyQmFzZSB7CiBwdWJsaWM6Ci0gICAgdm9pZCBz
ZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1
ZSkKKyAgICB2b2lkIHNldChWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKHZhbHVlKTsKICAgICAgICAgdmFsaWRhdGVDZWxsKHZhbHVl
KTsKLSAgICAgICAgc2V0RWFybHlWYWx1ZShnbG9iYWxEYXRhLCBvd25lciwgdmFsdWUpOworICAg
ICAgICBzZXRFYXJseVZhbHVlKHZtLCBvd25lciwgdmFsdWUpOwogICAgIH0KICAgICAKICAgICAv
LyBUaGlzIGlzIG1lYW50IHRvIGJlIHVzZWQgbGlrZSBvcGVyYXRvcj0sIGJ1dCBpcyBjYWxsZWQg
Y29weUZyb20gaW5zdGVhZCwgaW4KQEAgLTgyLDE2ICs4MiwxNiBAQCBwdWJsaWM6CiAgICAgICAg
IG1fY2VsbCA9IG90aGVyLm1fY2VsbDsKICAgICB9CiAKLSAgICB2b2lkIHNldE1heUJlTnVsbChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQor
ICAgIHZvaWQgc2V0TWF5QmVOdWxsKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgVCogdmFs
dWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUpCiAgICAgICAgICAgICB2YWxpZGF0ZUNlbGwo
dmFsdWUpOwotICAgICAgICBzZXRFYXJseVZhbHVlKGdsb2JhbERhdGEsIG93bmVyLCB2YWx1ZSk7
CisgICAgICAgIHNldEVhcmx5VmFsdWUodm0sIG93bmVyLCB2YWx1ZSk7CiAgICAgfQogCiAgICAg
Ly8gU2hvdWxkIG9ubHkgYmUgdXNlZCBieSBKU0NlbGwgZHVyaW5nIGVhcmx5IGluaXRpYWxpc2F0
aW9uCiAgICAgLy8gd2hlbiBzb21lIGJhc2ljIHR5cGVzIGFyZW4ndCB5ZXQgY29tcGxldGVseSBp
bnN0YW50aWF0ZWQKLSAgICB2b2lkIHNldEVhcmx5VmFsdWUoSlNHbG9iYWxEYXRhJiwgY29uc3Qg
SlNDZWxsKiBvd25lciwgVCogdmFsdWUpCisgICAgdm9pZCBzZXRFYXJseVZhbHVlKFZNJiwgY29u
c3QgSlNDZWxsKiBvd25lciwgVCogdmFsdWUpCiAgICAgewogICAgICAgICB0aGlzLT5tX2NlbGwg
PSByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHZhbHVlKTsKICAgICAgICAgSGVhcDo6d3JpdGVC
YXJyaWVyKG93bmVyLCB0aGlzLT5tX2NlbGwpOwpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHByaXZhdGU6
CiAKIHRlbXBsYXRlIDw+IGNsYXNzIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4gewogcHVibGlj
OgotICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTVmFs
dWUgdmFsdWUpCisgICAgdm9pZCBzZXQoVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLCBKU1ZhbHVl
IHZhbHVlKQogICAgIHsKICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7
CiAgICAgICAgIEhlYXA6OndyaXRlQmFycmllcihvd25lciwgdmFsdWUpOwpAQCAtMTk3LDE1ICsx
OTcsMTUgQEAgcHVibGljOgogICAgICAgICB0aGlzLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKDAp
OwogICAgIH0KIAotICAgIFdyaXRlQmFycmllcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNv
bnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQorICAgIFdyaXRlQmFycmllcihWTSYgdm0sIGNv
bnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQogICAgIHsKLSAgICAgICAgdGhpcy0+c2V0KGds
b2JhbERhdGEsIG93bmVyLCB2YWx1ZSk7CisgICAgICAgIHRoaXMtPnNldCh2bSwgb3duZXIsIHZh
bHVlKTsKICAgICB9CiAKICAgICBlbnVtIE1heUJlTnVsbFRhZyB7IE1heUJlTnVsbCB9OwotICAg
IFdyaXRlQmFycmllcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IEpTQ2VsbCogb3du
ZXIsIFQqIHZhbHVlLCBNYXlCZU51bGxUYWcpCisgICAgV3JpdGVCYXJyaWVyKFZNJiB2bSwgY29u
c3QgSlNDZWxsKiBvd25lciwgVCogdmFsdWUsIE1heUJlTnVsbFRhZykKICAgICB7Ci0gICAgICAg
IHRoaXMtPnNldE1heUJlTnVsbChnbG9iYWxEYXRhLCBvd25lciwgdmFsdWUpOworICAgICAgICB0
aGlzLT5zZXRNYXlCZU51bGwodm0sIG93bmVyLCB2YWx1ZSk7CiAgICAgfQogfTsKIApAQCAtMjE2
LDkgKzIxNiw5IEBAIHB1YmxpYzoKICAgICAgICAgdGhpcy0+c2V0V2l0aG91dFdyaXRlQmFycmll
cihKU1ZhbHVlKCkpOwogICAgIH0KIAotICAgIFdyaXRlQmFycmllcihKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTVmFsdWUgdmFsdWUpCisgICAgV3JpdGVC
YXJyaWVyKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7
Ci0gICAgICAgIHRoaXMtPnNldChnbG9iYWxEYXRhLCBvd25lciwgdmFsdWUpOworICAgICAgICB0
aGlzLT5zZXQodm0sIG93bmVyLCB2YWx1ZSk7CiAgICAgfQogfTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVycHJldGVyLmgJKHJldmlzaW9uIDE0ODY4MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJJbnRlcnByZXRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNTksNyArMzU5LDcgQEAgcHVibGljOgogICAgIGJvb2wgbV9pZ25vcmVDYXNl
OwogICAgIGJvb2wgbV9tdWx0aWxpbmU7CiAgICAgLy8gRWFjaCBCeXRlY29kZVBhdHRlcm4gaXMg
YXNzb2NpYXRlZCB3aXRoIGEgUmVnRXhwLCBlYWNoIFJlZ0V4cCBpcyBhc3NvY2lhdGVkCi0gICAg
Ly8gd2l0aCBhIEpTR2xvYmFsRGF0YS4gIENhY2hlIGEgcG9pbnRlciB0byBvdXQgSlNHbG9iYWxE
YXRhJ3MgbV9yZWdFeHBBbGxvY2F0b3IuCisgICAgLy8gd2l0aCBhIFZNLiAgQ2FjaGUgYSBwb2lu
dGVyIHRvIG91dCBWTSdzIG1fcmVnRXhwQWxsb2NhdG9yLgogICAgIEJ1bXBQb2ludGVyQWxsb2Nh
dG9yKiBtX2FsbG9jYXRvcjsKIAogICAgIENoYXJhY3RlckNsYXNzKiBuZXdsaW5lQ2hhcmFjdGVy
Q2xhc3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkocmV2aXNp
b24gMTQ4NjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBZ
YXJyIHsKIAogdGVtcGxhdGU8WWFyckpJVENvbXBpbGVNb2RlIGNvbXBpbGVNb2RlPgogY2xhc3Mg
WWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewotICAgIGZyaWVuZCB2b2lk
IGppdENvbXBpbGUoSlNHbG9iYWxEYXRhKiwgWWFyckNvZGVCbG9jayYgaml0T2JqZWN0LCBjb25z
dCBTdHJpbmcmIHBhdHRlcm4sIHVuc2lnbmVkJiBudW1TdWJwYXR0ZXJucywgY29uc3QgY2hhciom
IGVycm9yLCBib29sIGlnbm9yZUNhc2UsIGJvb2wgbXVsdGlsaW5lKTsKKyAgICBmcmllbmQgdm9p
ZCBqaXRDb21waWxlKFZNKiwgWWFyckNvZGVCbG9jayYgaml0T2JqZWN0LCBjb25zdCBTdHJpbmcm
IHBhdHRlcm4sIHVuc2lnbmVkJiBudW1TdWJwYXR0ZXJucywgY29uc3QgY2hhciomIGVycm9yLCBi
b29sIGlnbm9yZUNhc2UsIGJvb2wgbXVsdGlsaW5lKTsKIAogI2lmIENQVShBUk0pCiAgICAgc3Rh
dGljIGNvbnN0IFJlZ2lzdGVySUQgaW5wdXQgPSBBUk1SZWdpc3RlcnM6OnIwOwpAQCAtMjYwOCw3
ICsyNjA4LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGNvbXBpbGUoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3QpCisgICAgdm9p
ZCBjb21waWxlKFZNKiB2bSwgWWFyckNvZGVCbG9jayYgaml0T2JqZWN0KQogICAgIHsKICAgICAg
ICAgZ2VuZXJhdGVFbnRlcigpOwogCkBAIC0yNjQyLDcgKzI2NDIsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGJhY2t0cmFjaygpOwogCiAgICAgICAgIC8vIExpbmsgJiBmaW5hbGl6ZSB0aGUgY29kZS4K
LSAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpnbG9iYWxEYXRhLCB0aGlzLCBSRUdFWFBf
Q09ERV9JRCk7CisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqdm0sIHRoaXMsIFJFR0VY
UF9DT0RFX0lEKTsKICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rRGF0YUxhYmVscyhs
aW5rQnVmZmVyKTsKIAogICAgICAgICBpZiAoY29tcGlsZU1vZGUgPT0gTWF0Y2hPbmx5KSB7CkBA
IC0yNjg5LDEyICsyNjg5LDEyIEBAIHByaXZhdGU6CiAgICAgQmFja3RyYWNraW5nU3RhdGUgbV9i
YWNrdHJhY2tpbmdTdGF0ZTsKIH07CiAKLXZvaWQgaml0Q29tcGlsZShZYXJyUGF0dGVybiYgcGF0
dGVybiwgWWFyckNoYXJTaXplIGNoYXJTaXplLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFlh
cnJDb2RlQmxvY2smIGppdE9iamVjdCwgWWFyckpJVENvbXBpbGVNb2RlIG1vZGUpCit2b2lkIGpp
dENvbXBpbGUoWWFyclBhdHRlcm4mIHBhdHRlcm4sIFlhcnJDaGFyU2l6ZSBjaGFyU2l6ZSwgVk0q
IHZtLCBZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3QsIFlhcnJKSVRDb21waWxlTW9kZSBtb2RlKQog
ewogICAgIGlmIChtb2RlID09IE1hdGNoT25seSkKLSAgICAgICAgWWFyckdlbmVyYXRvcjxNYXRj
aE9ubHk+KHBhdHRlcm4sIGNoYXJTaXplKS5jb21waWxlKGdsb2JhbERhdGEsIGppdE9iamVjdCk7
CisgICAgICAgIFlhcnJHZW5lcmF0b3I8TWF0Y2hPbmx5PihwYXR0ZXJuLCBjaGFyU2l6ZSkuY29t
cGlsZSh2bSwgaml0T2JqZWN0KTsKICAgICBlbHNlCi0gICAgICAgIFlhcnJHZW5lcmF0b3I8SW5j
bHVkZVN1YnBhdHRlcm5zPihwYXR0ZXJuLCBjaGFyU2l6ZSkuY29tcGlsZShnbG9iYWxEYXRhLCBq
aXRPYmplY3QpOworICAgICAgICBZYXJyR2VuZXJhdG9yPEluY2x1ZGVTdWJwYXR0ZXJucz4ocGF0
dGVybiwgY2hhclNpemUpLmNvbXBpbGUodm0sIGppdE9iamVjdCk7CiB9CiAKIH19CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcg
KzI4LDcgQEAKIAogI2lmIEVOQUJMRShZQVJSX0pJVCkKIAotI2luY2x1ZGUgIkpTR2xvYmFsRGF0
YS5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgi
CiAjaW5jbHVkZSAiTWF0Y2hSZXN1bHQuaCIKICNpbmNsdWRlICJZYXJyLmgiCkBAIC00Miw3ICs0
Miw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBW
TTsKIGNsYXNzIEV4ZWN1dGFibGVQb29sOwogCiBuYW1lc3BhY2UgWWFyciB7CkBAIC0xMzIsNyAr
MTMyLDcgQEAgZW51bSBZYXJySklUQ29tcGlsZU1vZGUgewogICAgIE1hdGNoT25seSwKICAgICBJ
bmNsdWRlU3VicGF0dGVybnMKIH07Ci12b2lkIGppdENvbXBpbGUoWWFyclBhdHRlcm4mLCBZYXJy
Q2hhclNpemUsIEpTR2xvYmFsRGF0YSosIFlhcnJDb2RlQmxvY2smIGppdE9iamVjdCwgWWFyckpJ
VENvbXBpbGVNb2RlID0gSW5jbHVkZVN1YnBhdHRlcm5zKTsKK3ZvaWQgaml0Q29tcGlsZShZYXJy
UGF0dGVybiYsIFlhcnJDaGFyU2l6ZSwgVk0qLCBZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3QsIFlh
cnJKSVRDb21waWxlTW9kZSA9IEluY2x1ZGVTdWJwYXR0ZXJucyk7CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpZYXJyCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzMiBAQAorMjAx
My0wNC0xNyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJl
bmFtZWQgSlNHbG9iYWxEYXRhIHRvIFZNCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTQ3NzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIEZvcndh
cmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmg6IFJlbW92ZWQuCisgICAgICAgICog
Rm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9WTS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTR2xvYmFsRGF0YS5oLgorICAgICAgICAqIFdl
YkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUub3JkZXI6CisgICAgICAgICogV2ViQ29y
ZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2Vi
Q29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogYmluZGluZ3MvanMvRE9NT2JqZWN0SGFz
aFRhYmxlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTU9iamVjdEhhc2hUYWJsZU1hcDo6
bWFwRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01PYmplY3RIYXNoVGFibGVNYXAuaDoK
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChET01PYmplY3RIYXNoVGFibGVNYXApOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
T01XcmFwcGVyV29ybGQ6OkRPTVdyYXBwZXJXb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpET01X
cmFwcGVyV29ybGQ6On5ET01XcmFwcGVyV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6bm9ybWFs
V29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6bWFpblRocmVhZE5vcm1hbFdvcmxkKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRP
TVdyYXBwZXJXb3JsZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdyYXBwZXJXb3Js
ZDo6dm0pOgorICAgICAgICAoRE9NV3JhcHBlcldvcmxkKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpjb2xsZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxl
Y3RTb29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RO
b3cpOgorICAgICAgICAoV2ViQ29yZTo6R0NDb250cm9sbGVyOjpzZXRKYXZhU2NyaXB0R2FyYmFn
ZUNvbGxlY3RvclRpbWVyRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpHQ0NvbnRyb2xsZXI6
OmRpc2NhcmRBbGxDb21waWxlZENvZGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0lEQkJpbmRp
bmdVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpkZXNlcmlhbGl6ZUlEQlZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRlc2VyaWFsaXplSURCVmFsdWVCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6aWRiS2V5VG9TY3JpcHRWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDYWxsYmFj
a0RhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FsbGJhY2tEYXRhOjpKU0NhbGxiYWNrRGF0
YSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxi
YWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6
aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29s
dmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpKU0N1
c3RvbVhQYXRoTlNSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbVhQYXRoTlNS
ZXNvbHZlcjo6bG9va3VwTmFtZXNwYWNlVVJJKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TUJpbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Y2FjaGVET01TdHJ1Y3R1cmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Zy5oOgorICAgICAgICAoV2ViQ29yZTo6RE9NQ29uc3RydWN0b3JPYmplY3Q6OmNyZWF0ZVN0cnVj
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudDo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RE9NU3RydWN0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldElubGluZUNhY2hlZFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1N0cmluZ1dpdGhDYWNoZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9i
YWxPYmplY3Q6OkpTRE9NR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xv
YmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01H
bG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTRE9NR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2Vi
Q29yZTo6Z2V0RE9NQ29uc3RydWN0b3IpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OkpTRE9NV2lu
ZG93QmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6dXBkYXRlRG9jdW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpjb21tb25WTSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmg6CisgICAgICAgIChKU0RPTVdpbmRvd0Jh
c2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpjcmVhdGVTdHJ1Y3R1cmUp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTRE9NV2luZG93OjpzZXRMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpE
aWFsb2dIYW5kbGVyOjpkaWFsb2dDcmVhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRpYWxvZ0hh
bmRsZXI6OnJldHVyblZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1No
ZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93U2hlbGw6OkpTRE9NV2luZG93
U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dTaGVsbDo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dTaGVsbDo6c2V0V2luZG93KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmg6CisgICAgICAgIChKU0RPTVdp
bmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93U2hlbGw6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd1NoZWxsOjpjcmVhdGVTdHJ1Y3R1cmUpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV3JhcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01XcmFwcGVyOjpKU0RPTVdyYXBwZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRGV2
aWNlTW90aW9uRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQWNjZWxl
cmF0aW9uT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVJvdGF0aW9uUmF0ZU9iamVj
dCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RpY3Rpb25hcnkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRGljdGlvbmFyeTo6SlNEaWN0
aW9uYXJ5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU0Vycm9ySGFuZGxlcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50
TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50TGlz
dGVuZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5lcjo6c2V0V3JhcHBlcik6
CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OmpzRnVuY3Rpb24pOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTSFRNTERvY3VtZW50OjphbGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1l
bnQ6OnNldEFsbCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTFRlbXBsYXRlRWxlbWVudDo6Y29u
dGVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTSGlzdG9yeTo6c3RhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
SW1hZ2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0ltYWdlQ29uc3RydWN0
b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3Ry
dWN0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSW1hZ2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0luamVjdGVk
U2NyaXB0SG9zdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhv
c3Q6Om5vZGVBc1NjcmlwdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSW5qZWN0ZWRTY3Jp
cHRIb3N0OjpmdW5jdGlvbkRldGFpbHMpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SlNMaXN0ZW5l
ckZ1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0
RXZlbnRMaXN0ZW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6
Omluc3BlY3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNMYXp5RXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6ZUpTRnVu
Y3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZUV2ZW50OjpkYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OmhhbmRsZUluaXRNZXNzYWdlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTXV0
YXRpb25DYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU011dGF0aW9uQ2FsbGJhY2s6
OmNhbGwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU011dGF0aW9uT2JzZXJ2ZXJDb25zdHJ1Y3Rvcjo6Y29u
c3RydWN0SlNNdXRhdGlvbk9ic2VydmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVG
aWx0ZXJDb25kaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyQ29uZGl0
aW9uOjpKU05vZGVGaWx0ZXJDb25kaXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9k
ZUZpbHRlckNvbmRpdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyQ29uZGl0
aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNOb2RlRmlsdGVyQ29uZGl0aW9uKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
dG9Ob2RlRmlsdGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FjaGVTdGF0ZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja0N1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrOjpoYW5kbGVFdmVudCk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTU1FMUmVzdWx0U2V0Um93TGlzdDo6aXRlbSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1dvcmtlckNvbnRleHRCYXNlOjpKU1dvcmtlckNvbnRleHRCYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTV29ya2VyQ29udGV4dEJhc2U6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRCYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1dv
cmtlckNvbnRleHRCYXNlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNXb3JrZXJDb250
ZXh0QmFzZSk6CisgICAgICAgICogYmluZGluZ3MvanMvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxs
SlNGdW5jdGlvbnMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb246OlNjaGVkdWxlZEFjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGVGdW5jdGlvbkluQ29udGV4
dCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb246OlNjaGVkdWxlZEFjdGlvbik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
Y3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNjcmlw
dENhbGxTdGFjayk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTY3JpcHRBcmd1bWVudHMpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlV2luZG93U2hlbGwpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldvcmxkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVdvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENvbnRyb2xsZXI6OmdldEFsbFdvcmxkcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRD
b250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENv
bnRyb2xsZXI6OmluaXRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxl
cjo6dXBkYXRlRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6
Y2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29u
dHJvbGxlcjo6YmluZGluZ1Jvb3RPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29u
dHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENv
bnRyb2xsZXI6OnNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1NjcmlwdE9iamVjdCk6CisgICAgICAgICog
YmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGF1c2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXZlbnRMaXN0ZW5l
ckhhbmRsZXJCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmV2ZW50TGlzdGVuZXJIYW5kbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmV2ZW50TGlzdGVuZXJIYW5kbGVyTG9jYXRpb24pOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2Fs
bGJhY2s6OmNhbGwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEdDRXZlbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0R0NFdmVudDo6Z2V0SGVhcFNpemUpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRP
YmplY3Q6OlNjcmlwdE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRHbG9iYWxPYmpl
Y3Q6OnNldCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpTY3Jp
cHRWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0V3JhcHBhYmxlLmg6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoU2NyaXB0V3JhcHBhYmxlKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9TY3JpcHRXcmFwcGFibGVJbmxpbmVzLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRX
cmFwcGFibGU6OnNldFdyYXBwZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVh
ZFRlcm1pbmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVz
ZXJpYWxpemVGb3JJbnNwZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlw
dFZhbHVlOjptYXliZVRocm93RXhjZXB0aW9uSWZTZXJpYWxpemF0aW9uRmFpbGVkKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmg6CisgICAgICAgIChXZWJDb3Jl
SlNDbGllbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmluaXROb3JtYWxXb3JsZENsaWVudERh
dGEpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6V29ya2VyU2NyaXB0Q29u
dHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjp+V29y
a2VyU2NyaXB0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250
cm9sbGVyOjppbml0U2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRy
b2xsZXI6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xs
ZXI6OnNjaGVkdWxlRXhlY3V0aW9uVGVybWluYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyU2NyaXB0Q29udHJvbGxlcjo6aXNFeGVjdXRpb25UZXJtaW5hdGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpkaXNhYmxlRXZhbCk6CisgICAgICAgICog
YmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OnZtKToKKyAgICAgICAgKFdv
cmtlclNjcmlwdENvbnRyb2xsZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlw
dERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdERlYnVnU2Vy
dmVyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyk6CisgICAgICAgICogYmluZGluZ3Mvb2JqYy9X
ZWJTY3JpcHRPYmplY3QubW06CisgICAgICAgICgrW1dlYlNjcmlwdE9iamVjdCBfY29udmVydFZh
bHVlVG9PYmpjVmFsdWU6SlNDOjpvcmlnaW5Sb290T2JqZWN0OnJvb3RPYmplY3Q6XSk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5l
cmF0ZUhlYWRlcik6CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAg
KEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChKU1ZhbHVlVG9OYXRp
dmUpOgorICAgICAgICAoR2VuZXJhdGVDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKToKKyAgICAgICAg
KEdlbmVyYXRlQ29uc3RydWN0b3JIZWxwZXJNZXRob2RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNGbG9hdDY0QXJyYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
SlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3RvclRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRmxv
YXQ2NEFycmF5Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OmdldEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
SlNGbG9hdDY0QXJyYXlUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0Zsb2F0NjRBcnJheTo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNGbG9hdDY0QXJyYXk6OmNyZWF0
ZVByb3RvdHlwZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRmxvYXQ2
NEFycmF5Lmg6CisgICAgICAgIChXZWJDb3JlOjpKU0Zsb2F0NjRBcnJheTo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTRmxvYXQ2NEFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAg
ICAoSlNGbG9hdDY0QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6SlNGbG9hdDY0QXJyYXlQcm90
b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0Zsb2F0NjRBcnJheVByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRmxvYXQ2NEFycmF5UHJv
dG90eXBlOjpKU0Zsb2F0NjRBcnJheVByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0Zs
b2F0NjRBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEFjdGl2ZURPTU9iamVjdDo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpjcmVhdGVQcm90
b3R5cGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVE
T01PYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEFjdGl2ZURPTU9iamVjdDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEFjdGl2ZURPTU9iamVjdDo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTVGVzdEFjdGl2ZURPTU9iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU6OkpTVGVz
dEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RBY3Rp
dmVET01PYmplY3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aE5vUGFyYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMVBhcmFtKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczJQYXJhbSk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoU3RyaW5nTGlzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQm9vbGVhbik6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tSZXF1aXJlc1RoaXNUb1Bhc3Mp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdl
dHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0
cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDdXN0b21O
YW1lZEdldHRlcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXI6OmNyZWF0ZVByb3RvdHlwZSk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXJQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDdXN0b21O
YW1lZEdldHRlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlOjpKU1Rlc3RDdXN0b21OYW1lZEdldHRl
clByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlUHJvdG90eXBlKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
ci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU1Rlc3RFdmVudENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZTo6SlNUZXN0
RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVu
dENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFyZ2V0OjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudFRhcmdldDo6Y3JlYXRlUHJvdG90eXBlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFyZ2V0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0RXZlbnRUYXJnZXQ6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU1Rlc3RF
dmVudFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlw
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRUYXJnZXRQ
cm90b3R5cGU6OkpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXhjZXB0aW9uOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RFeGNlcHRpb246OmNyZWF0ZVByb3RvdHlwZSk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5oOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0RXhjZXB0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0RXhjZXB0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNUZXN0RXhjZXB0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZTo6SlNUZXN0
RXhjZXB0aW9uUHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV4Y2VwdGlvbkNv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50
ZXJmYWNlQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdEludGVyZmFjZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
SW50ZXJmYWNlOjpjcmVhdGVQcm90b3R5cGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVy
ZmFjZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZTo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKEpTVGVzdEludGVyZmFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU6OkpTVGVzdEludGVyZmFjZVByb3RvdHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmZpbmlzaENyZWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmNyZWF0ZVByb3RvdHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90
eXBlRnVuY3Rpb25NZXRob2QpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlOjpK
U1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1
Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3Ry
dWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29u
c3RydWN0b3JOYW1lZENvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpjcmVhdGVQcm90b3R5cGUpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKEpTVGVzdE5hbWVkQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yUHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3Ry
dWN0b3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE5vZGVDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0Tm9kZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0Tm9kZTo6Y3JlYXRlUHJvdG90eXBlKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Tm9k
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5vZGU6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU1Rlc3ROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5vZGVQ
cm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROb2RlUHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Tm9kZVByb3RvdHlw
ZTo6SlNUZXN0Tm9kZVByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROb2RlQ29u
c3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmpDb25zdHJ1
Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmo6OmNyZWF0ZVByb3RvdHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUxKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQW55QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RP
Ymo6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmo6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU1Rlc3RPYmopOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqUHJv
dG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqUHJvdG90eXBlOjpj
cmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqUHJvdG90eXBlOjpK
U1Rlc3RPYmpQcm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqQ29uc3RydWN0
b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpj
cmVhdGVQcm90b3R5cGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1Byb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlOjpKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZTo6Y3JlYXRlUHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFJlYWRvbmx5VmFsdWUp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQ
cm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6OkpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0VHlwZWRlZnM6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFR5cGVkZWZzOjpjcmVhdGVQcm90b3R5cGUpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5oOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0VHlwZWRlZnM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RUeXBlZGVmczo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTVGVzdFR5cGVkZWZz
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFR5cGVkZWZzUHJvdG90eXBlOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0VHlwZWRlZnNQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZTo6SlNUZXN0VHlw
ZWRlZnNQcm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0VHlwZWRlZnNDb25zdHJ1
Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBicmlkZ2UvYy9DUnVudGltZU9iamVj
dC5oOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q1J1bnRpbWVPYmplY3Q6OmNyZWF0ZVN0cnVj
dHVyZSk6CisgICAgICAgICogYnJpZGdlL2MvY19pbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpDUnVudGltZU1ldGhvZDo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6QmluZGlu
Z3M6OkNSdW50aW1lTWV0aG9kOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpCaW5k
aW5nczo6Q1J1bnRpbWVNZXRob2Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBicmlkZ2Uv
anNjL0JyaWRnZUpTQy5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpJbnN0YW5jZTo6Y3Jl
YXRlUnVudGltZU9iamVjdCk6CisgICAgICAgICogYnJpZGdlL29iamMvT2JqQ1J1bnRpbWVPYmpl
Y3QuaDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iakNSdW50aW1lT2JqZWN0OjpjcmVhdGVT
dHJ1Y3R1cmUpOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW06CisgICAg
ICAgIChPYmpDUnVudGltZU1ldGhvZDo6Y3JlYXRlKToKKyAgICAgICAgKE9iakNSdW50aW1lTWV0
aG9kOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoT2JqQ1J1bnRpbWVNZXRob2Q6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaDoKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6Ok9iamNGYWxsYmFja09iamVjdEltcDo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW06CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpPYmpjRmFsbGJhY2tPYmplY3RJbXA6Ok9iamNGYWxsYmFja09iamVjdEltcCk6
CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpPYmpjRmFsbGJhY2tPYmplY3RJbXA6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKiBicmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwOgorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6UXRSdW50aW1lT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAg
ICAoSlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6flF0SW5zdGFuY2UpOgorICAgICAgICAoSlND
OjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6Z2V0UXRJbnN0YW5jZSk6CisgICAgICAgICogYnJpZGdl
L3J1bnRpbWVfYXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpSdW50aW1lQXJyYXk6OlJ1bnRpbWVB
cnJheSk6CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAqIGJyaWRnZS9ydW50aW1lX2FycmF5Lmg6CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJh
eTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6UnVudGltZUFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUp
OgorICAgICAgICAoUnVudGltZUFycmF5KToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9tZXRo
b2QuY3BwOgorICAgICAgICAoSlNDOjpSdW50aW1lTWV0aG9kOjpmaW5pc2hDcmVhdGlvbik6Cisg
ICAgICAgICogYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmg6CisgICAgICAgIChKU0M6OlJ1bnRpbWVN
ZXRob2Q6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlJ1bnRpbWVNZXRob2Q6OmNyZWF0ZVN0cnVj
dHVyZSk6CisgICAgICAgIChSdW50aW1lTWV0aG9kKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGlt
ZV9vYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdDo6UnVu
dGltZU9iamVjdCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpSdW50aW1lT2JqZWN0OjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfb2JqZWN0Lmg6CisgICAgICAg
IChKU0M6OkJpbmRpbmdzOjpSdW50aW1lT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAg
ICAqIGJyaWRnZS9ydW50aW1lX3Jvb3QuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Um9v
dE9iamVjdDo6Um9vdE9iamVjdCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0
OjpnY1Byb3RlY3QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdDo6Z2NVbnBy
b3RlY3QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdDo6dXBkYXRlR2xvYmFs
T2JqZWN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3Q6OmFkZFJ1bnRpbWVP
YmplY3QpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX3Jvb3QuaDoKKyAgICAgICAgKFJvb3RP
YmplY3QpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKiBkb20vTm9kZS5oOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojp2bSk6CisgICAgICAg
ICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChTY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFn
ZUJ1ZmZlcik6CisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEltYWdlTG9hZGVyOjpub3RpZnlGaW5pc2hlZCk6CisgICAgICAgICogaW5z
cGVjdG9yL1NjcmlwdEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRBcmd1
bWVudHM6OlNjcmlwdEFyZ3VtZW50cyk6CisgICAgICAgICogbG9hZGVyL2ljb24vSWNvbkRhdGFi
YXNlQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Omljb25E
YXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRHbG9iYWxJY29uRGF0YWJhc2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL3F0L01lbW9yeVVzYWdlU3VwcG9ydFF0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om1lbW9yeVVzYWdlS0IpOgorICAgICAgICAoV2ViQ29yZTo6YWN0dWFsTWVtb3J5VXNh
Z2VLQik6CisgICAgICAgICogcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGllc1dpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHbG9iYWxEYXRhKToKKyAgICAgICAgKiBwbHVnaW5z
L1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c3RhcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpwZXJmb3JtUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpucE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpwcml2YXRlQnJvd3Np
bmdTdGF0ZUNoYW5nZWQpOgorICAgICAgICAqIHBsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5WaWV3
QmxhY2tCZXJyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaXNwYXRjaE5Q
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmdldFdpbmRvd0luZm8pOgorICAgICAgICAqIHBsdWdp
bnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6
ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAgICAgKiBwbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAgICAgKiBwbHVnaW5zL21hYy9QbHVnaW5W
aWV3TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCk6
CisgICAgICAgICogcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdp
blZpZXdXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QpOgorICAgICAgICAqIHRl
c3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmVUZXN0U3Vw
cG9ydDo6aW5qZWN0SW50ZXJuYWxzT2JqZWN0KToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVl
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmRyb3BQcm90ZWN0aW9u
KToKKwogMjAxMy0wNC0xNyAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgog
CiAgICAgICAgIENoYW5nZSBzdG9yYWdlIGZhY3RvcnkgZnVuY3Rpb25zIHRvIHRha2UgYSBQYWdl
R3JvdXAgYW5kIFBhZ2UgcmVzcGVjdGl2ZWx5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2
aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTQ2NCw3ICs0NjQsNyBAQCBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDlk
cmF3SW1hZ2VFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDlzZXRTaGFkb3dFUktOU185
RmxvYXRTaXplRWZSS05TXzVDb2xvckVOU18xMENvbG9yU3BhY2VFCiBfX1pON1dlYkNvcmUxNUdy
YXBoaWNzQ29udGV4dDl0cmFuc2xhdGVFZmYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0
RDFFdgotX19aTjdXZWJDb3JlMTVKU0RPTVdpbmRvd0Jhc2UxOGNvbW1vbkpTR2xvYmFsRGF0YUV2
CitfX1pON1dlYkNvcmUxNUpTRE9NV2luZG93QmFzZThjb21tb25WTUV2CiBfX1pON1dlYkNvcmUx
NVBsYXRmb3JtQ0FMYXllcjE4c2V0R2VvbWV0cnlGbGlwcGVkRWIKIF9fWk43V2ViQ29yZTE1UHJv
dGVjdGlvblNwYWNlQzFFUktOM1dURjZTdHJpbmdFaU5TXzI1UHJvdGVjdGlvblNwYWNlU2VydmVy
VHlwZUVTNF9OU18zNVByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lRQogX19aTjdX
ZWJDb3JlMTVQcm90ZWN0aW9uU3BhY2VDMUV2CkBAIC0yNTk2LDcgKzI1OTYsNyBAQCBfX1pON1dl
YkNvcmU0UGFnZTE4c2V0VmlzaWJpbGl0eVN0YXRlRU5TCiAKICNpZiBVU0UoUExVR0lOX0hPU1Rf
UFJPQ0VTUykKIF9fWk4zSlNDMTNSdW50aW1lTWV0aG9kMTFnZXRDYWxsRGF0YUVQTlNfNkpTQ2Vs
bEVSTlNfOENhbGxEYXRhRQotX19aTjNKU0MxM1J1bnRpbWVNZXRob2QxNGZpbmlzaENyZWF0aW9u
RVJOU18xMkpTR2xvYmFsRGF0YUVSS04zV1RGNlN0cmluZ0UKK19fWk4zSlNDMTNSdW50aW1lTWV0
aG9kMTRmaW5pc2hDcmVhdGlvbkVSTlNfMlZNRVJLTjNXVEY2U3RyaW5nRQogX19aTjNKU0MxM1J1
bnRpbWVNZXRob2QxOGdldE93blByb3BlcnR5U2xvdEVQTlNfNkpTQ2VsbEVQTlNfOUV4ZWNTdGF0
ZUVOU18xMlByb3BlcnR5TmFtZUVSTlNfMTJQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzEzUnVudGlt
ZU1ldGhvZDI0Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRVBOU184SlNPYmplY3RFUE5TXzlFeGVj
U3RhdGVFTlNfMTJQcm9wZXJ0eU5hbWVFUk5TXzE4UHJvcGVydHlEZXNjcmlwdG9yRQogX19aTjNK
U0MxM1J1bnRpbWVNZXRob2Q2c19pbmZvRQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5v
cmRlcgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLm9yZGVyCShyZXZpc2lv
biAxNDg2ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLm9yZGVyCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTU2LDggKzE5NTYsOCBAQCBfX1pON1dlYkNvcmUxNlNjcmlwdENvbnRyb2xsZXIxM2V4
ZWN1dGVTCiBfX1pON1dlYkNvcmUxNlNjcmlwdENvbnRyb2xsZXIxN2NhbkV4ZWN1dGVTY3JpcHRz
RU5TXzMzUmVhc29uRm9yQ2FsbGluZ0NhbkV4ZWN1dGVTY3JpcHRzRQogX19aTjdXZWJDb3JlMTZT
Y3JpcHRDb250cm9sbGVyOGV2YWx1YXRlRVJLTlNfMTZTY3JpcHRTb3VyY2VDb2RlRQogX19aTjdX
ZWJDb3JlMjFtYWluVGhyZWFkTm9ybWFsV29ybGRFdgotX19aTjdXZWJDb3JlMTVKU0RPTVdpbmRv
d0Jhc2UxOGNvbW1vbkpTR2xvYmFsRGF0YUV2Ci1fX1pON1dlYkNvcmUxNURPTVdyYXBwZXJXb3Js
ZEMxRVBOM0pTQzEySlNHbG9iYWxEYXRhRWIKK19fWk43V2ViQ29yZTE1SlNET01XaW5kb3dCYXNl
MThjb21tb25WTUV2CitfX1pON1dlYkNvcmUxNURPTVdyYXBwZXJXb3JsZEMxRVBOM0pTQzEyVk1F
YgogX19aTjNXVEY5SGFzaFRhYmxlSVBON1dlYkNvcmUxNURPTVdyYXBwZXJXb3JsZEVTM19OU18x
N0lkZW50aXR5RXh0cmFjdG9ySVMzX0VFTlNfN1B0ckhhc2hJUzNfRUVOU18xMEhhc2hUcmFpdHNJ
UzNfRUVTOV9FM2FkZElTM19TM19OU18yMklkZW50aXR5SGFzaFRyYW5zbGF0b3JJUzNfUzNfUzdf
RUVFRVN0NHBhaXJJTlNfMTdIYXNoVGFibGVJdGVyYXRvcklTM19TM19TNV9TN19TOV9TOV9FRWJF
UktUX1JLVDBfCiBfX1pOM1dURjlIYXNoVGFibGVJUE43V2ViQ29yZTE1RE9NV3JhcHBlcldvcmxk
RVMzX05TXzE3SWRlbnRpdHlFeHRyYWN0b3JJUzNfRUVOU183UHRySGFzaElTM19FRU5TXzEwSGFz
aFRyYWl0c0lTM19FRVM5X0U2ZXhwYW5kRXYKIF9fWk43V2ViQ29yZTE2U2NyaXB0Q29udHJvbGxl
cjE1ZXZhbHVhdGVJbldvcmxkRVJLTlNfMTZTY3JpcHRTb3VyY2VDb2RlRVBOU18xNURPTVdyYXBw
ZXJXb3JsZEUKQEAgLTE5NjgsMTAgKzE5NjgsMTAgQEAgX19aTjdXZWJDb3JlMTZKU0RPTVdpbmRv
d1NoZWxsQzFFTjNXVEYxMAogX19aTjdXZWJDb3JlMTZKU0RPTVdpbmRvd1NoZWxsQzJFTjNXVEYx
MFBhc3NSZWZQdHJJTlNfOURPTVdpbmRvd0VFRVBOU18xNURPTVdyYXBwZXJXb3JsZEUKIF9fWk43
V2ViQ29yZTE2SlNET01XaW5kb3dTaGVsbDlzZXRXaW5kb3dFTjNXVEYxMFBhc3NSZWZQdHJJTlNf
OURPTVdpbmRvd0VFRQogX19aTjdXZWJDb3JlMjBKU0RPTVdpbmRvd1Byb3RvdHlwZW53RW0KLV9f
Wk43V2ViQ29yZTExSlNET01XaW5kb3dDMUVSTjNKU0MxMkpTR2xvYmFsRGF0YUVQTlMxXzlTdHJ1
Y3R1cmVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfOURPTVdpbmRvd0VFRVBOU18xNkpTRE9NV2luZG93
U2hlbGxFCi1fX1pON1dlYkNvcmUxNUpTRE9NV2luZG93QmFzZUMyRVJOM0pTQzEySlNHbG9iYWxE
YXRhRVBOUzFfOVN0cnVjdHVyZUVOM1dURjEwUGFzc1JlZlB0cklOU185RE9NV2luZG93RUVFUE5T
XzE2SlNET01XaW5kb3dTaGVsbEUKLV9fWk43V2ViQ29yZTE3SlNET01HbG9iYWxPYmplY3RDMkVS
TjNKU0MxMkpTR2xvYmFsRGF0YUVQTlMxXzlTdHJ1Y3R1cmVFTjNXVEYxMFBhc3NSZWZQdHJJTlNf
MTVET01XcmFwcGVyV29ybGRFRUVQTlMxXzhKU09iamVjdEUKLV9fWk4zSlNDMTRKU0dsb2JhbE9i
amVjdEMyRVJOU18xMkpTR2xvYmFsRGF0YUVQTlNfOVN0cnVjdHVyZUVQTlNfOEpTT2JqZWN0RQor
X19aTjdXZWJDb3JlMTFKU0RPTVdpbmRvd0MxRVJOM0pTQzEyVk1FUE5TMV85U3RydWN0dXJlRU4z
V1RGMTBQYXNzUmVmUHRySU5TXzlET01XaW5kb3dFRUVQTlNfMTZKU0RPTVdpbmRvd1NoZWxsRQor
X19aTjdXZWJDb3JlMTVKU0RPTVdpbmRvd0Jhc2VDMkVSTjNKU0MxMlZNRVBOUzFfOVN0cnVjdHVy
ZUVOM1dURjEwUGFzc1JlZlB0cklOU185RE9NV2luZG93RUVFUE5TXzE2SlNET01XaW5kb3dTaGVs
bEUKK19fWk43V2ViQ29yZTE3SlNET01HbG9iYWxPYmplY3RDMkVSTjNKU0MxMlZNRVBOUzFfOVN0
cnVjdHVyZUVOM1dURjEwUGFzc1JlZlB0cklOU18xNURPTVdyYXBwZXJXb3JsZEVFRVBOUzFfOEpT
T2JqZWN0RQorX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0QzJFUk5TXzEyVk1FUE5TXzlTdHJ1Y3R1
cmVFUE5TXzhKU09iamVjdEUKIF9fWk43V2ViQ29yZTVGcmFtZTlrZWVwQWxpdmVFdgogX19aTjNK
U0M2U3Ryb25nSU43V2ViQ29yZTE2SlNET01XaW5kb3dTaGVsbEVFQzJFUktTM18KIF9fWk4zV1RG
OUhhc2hUYWJsZUlOU182UmVmUHRySU43V2ViQ29yZTE1RE9NV3JhcHBlcldvcmxkRUVFU3Q0cGFp
cklTNF9OM0pTQzZTdHJvbmdJTlMyXzE2SlNET01XaW5kb3dTaGVsbEVFRUVOU18xOFBhaXJGaXJz
dEV4dHJhY3RvcklTQV9FRU5TXzdQdHJIYXNoSVM0X0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18x
MEhhc2hUcmFpdHNJUzRfRUVOU0dfSVM5X0VFRUVTSF9FMTVkZWFsbG9jYXRlVGFibGVFUFNBX2kK
QEAgLTIwMDYsNyArMjAwNiw3IEBAIF9fWk43V2ViQ29yZTE0SlNIVE1MRG9jdW1lbnRDMUVQTjNK
U0M5U3QKIF9fWk43V2ViQ29yZTEwSlNEb2N1bWVudEMyRVBOM0pTQzlTdHJ1Y3R1cmVFUE5TXzE3
SlNET01HbG9iYWxPYmplY3RFTjNXVEYxMFBhc3NSZWZQdHJJTlNfOERvY3VtZW50RUVFCiBfX1pO
N1dlYkNvcmU2SlNOb2RlQzJFUE4zSlNDOVN0cnVjdHVyZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVj
dEVOM1dURjEwUGFzc1JlZlB0cklOU180Tm9kZUVFRQogX19aTjdXZWJDb3JlMTJjYWNoZVdyYXBw
ZXJJTlNfMTJIVE1MRG9jdW1lbnRFRUV2UE5TXzE1RE9NV3JhcHBlcldvcmxkRVBUX1BOU18xMkpT
RE9NV3JhcHBlckUKLV9fWk4zSlNDNFdlYWtJTjdXZWJDb3JlMTJKU0RPTVdyYXBwZXJFRTNzZXRF
Uk5TXzEySlNHbG9iYWxEYXRhRVBTMl9QTlNfMTVXZWFrSGFuZGxlT3duZXJFUHYKK19fWk4zSlND
NFdlYWtJTjdXZWJDb3JlMTJKU0RPTVdyYXBwZXJFRTNzZXRFUk5TXzEyVk1FUFMyX1BOU18xNVdl
YWtIYW5kbGVPd25lckVQdgogX19aTjNXVEY5SGFzaFRhYmxlSU5TXzZSZWZQdHJJTlNfMTBTdHJp
bmdJbXBsRUVFU3Q0cGFpcklTM19OM0pTQzE2U3ltYm9sVGFibGVFbnRyeUVFTlNfMThQYWlyRmly
c3RFeHRyYWN0b3JJUzdfRUVOUzVfMTdJZGVudGlmaWVyUmVwSGFzaEVOU18xNFBhaXJIYXNoVHJh
aXRzSU5TXzEwSGFzaFRyYWl0c0lTM19FRU5TNV8yNlN5bWJvbFRhYmxlSW5kZXhIYXNoVHJhaXRz
RUVFU0RfRTRmaW5kSVBTMl9OU18yOVJlZlB0ckhhc2hNYXBSYXdLZXlUcmFuc2xhdG9ySVNJX1M3
X1NGX1NBX0VFRUVOU18xN0hhc2hUYWJsZUl0ZXJhdG9ySVMzX1M3X1M5X1NBX1NGX1NEX0VFUktU
XwogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjM1ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVj
dEluV29ybGRFUE5TXzE1RE9NV3JhcHBlcldvcmxkRQogX19aTkszV1RGOUhhc2hUYWJsZUlOU182
UmVmUHRySU43V2ViQ29yZTE1RE9NV3JhcHBlcldvcmxkRUVFU3Q0cGFpcklTNF9OM0pTQzZTdHJv
bmdJTlMyXzE2SlNET01XaW5kb3dTaGVsbEVFRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTQV9F
RU5TXzdQdHJIYXNoSVM0X0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzRf
RUVOU0dfSVM5X0VFRUVTSF9FNGZpbmRJUFMzX05TXzI5UmVmUHRySGFzaE1hcFJhd0tleVRyYW5z
bGF0b3JJU01fU0FfU0pfU0VfRUVFRU5TXzIySGFzaFRhYmxlQ29uc3RJdGVyYXRvcklTNF9TQV9T
Q19TRV9TSl9TSF9FRVJLVF8KQEAgLTIwMjcsNyArMjAyNyw3IEBAIF9fWk5LN1dlYkNvcmUxNUpT
RE9NV2luZG93QmFzZTE2YWxsb3dzQWMKIF9fWk5LN1dlYkNvcmU5RnJhbWVUcmVlNWNoaWxkRVJL
TjNXVEYxMkF0b21pY1N0cmluZ0UKIF9fWk43V2ViQ29yZTIwSlNET01XaW5kb3dQcm90b3R5cGUx
OGdldE93blByb3BlcnR5U2xvdEVQTjNKU0M5RXhlY1N0YXRlRVJLTlMxXzEwSWRlbnRpZmllckVS
TlMxXzEyUHJvcGVydHlTbG90RQogX19aTjNKU0MyMWdldFN0YXRpY0Z1bmN0aW9uU2xvdElOU184
SlNPYmplY3RFRUViUE5TXzlFeGVjU3RhdGVFUEtOU185SGFzaFRhYmxlRVBTMV9SS05TXzEwSWRl
bnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCi1fX1pOM0pTQzhKU09iamVjdDE3Z2V0RGlyZWN0
TG9jYXRpb25FUk5TXzEySlNHbG9iYWxEYXRhRVJLTlNfMTBJZGVudGlmaWVyRQorX19aTjNKU0M4
SlNPYmplY3QxN2dldERpcmVjdExvY2F0aW9uRVJOU18xMlZNRVJLTlNfMTBJZGVudGlmaWVyRQog
X19aTjdXZWJDb3JlMTZmaW5kQXRvbWljU3RyaW5nRVJLTjNKU0MxMElkZW50aWZpZXJFCiBfX1pO
SzNXVEY5SGFzaFRhYmxlSVBOU18xNkF0b21pY1N0cmluZ0ltcGxFU3Q0cGFpcklTMl9qRU5TXzE4
UGFpckZpcnN0RXh0cmFjdG9ySVM0X0VFTlNfN1B0ckhhc2hJUzJfRUVOU18xNFBhaXJIYXNoVHJh
aXRzSU5TXzEwSGFzaFRyYWl0c0lTMl9FRU5TQV9JakVFRUVTQl9FOGNvbnRhaW5zSVMyX05TXzIy
SWRlbnRpdHlIYXNoVHJhbnNsYXRvcklTMl9TNF9TOF9FRUVFYlJLVF8KIF9fWk5LM1dURjlIYXNo
VGFibGVJUE5TXzE2QXRvbWljU3RyaW5nSW1wbEVTdDRwYWlySVMyX1BON1dlYkNvcmU3RWxlbWVu
dEVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzdfRUVOU183UHRySGFzaElTMl9FRU5TXzE0UGFp
ckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMyX0VFTlNEX0lTNl9FRUVFU0VfRThjb250YWlu
c0lTMl9OU18yMklkZW50aXR5SGFzaFRyYW5zbGF0b3JJUzJfUzdfU0JfRUVFRWJSS1RfCkBAIC0y
ODM1LDE0ICsyODM1LDE0IEBAIF9fWk4zSlNDOEJpbmRpbmdzMjB3ZWJTY3JpcHRPYmplY3RDbGFz
c0UKIF9fWk4zSlNDOEJpbmRpbmdzMTJPYmpjSW5zdGFuY2U2Y3JlYXRlRVAxMW9iamNfb2JqZWN0
TjNXVEYxMFBhc3NSZWZQdHJJTlMwXzEwUm9vdE9iamVjdEVFRQogX19aTjNKU0M4QmluZGluZ3Mx
Mk9iamNJbnN0YW5jZUMyRVAxMW9iamNfb2JqZWN0TjNXVEYxMFBhc3NSZWZQdHJJTlMwXzEwUm9v
dE9iamVjdEVFRQogX19aTjNKU0M4QmluZGluZ3M4SW5zdGFuY2VDMkVOM1dURjEwUGFzc1JlZlB0
cklOUzBfMTBSb290T2JqZWN0RUVFCi1fX1pOM0pTQzRXZWFrSU5TXzhCaW5kaW5nczEzUnVudGlt
ZU9iamVjdEVFQzJFUk5TXzEySlNHbG9iYWxEYXRhRVBTMl9QTlNfMTVXZWFrSGFuZGxlT3duZXJF
UHYKK19fWk4zSlNDNFdlYWtJTlNfOEJpbmRpbmdzMTNSdW50aW1lT2JqZWN0RUVDMkVSTlNfMTJW
TUVQUzJfUE5TXzE1V2Vha0hhbmRsZU93bmVyRVB2CiBfX1pOM0pTQzhCaW5kaW5nczhJbnN0YW5j
ZTE5Y3JlYXRlUnVudGltZU9iamVjdEVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlNDOEJpbmRpbmdz
MTJPYmpjSW5zdGFuY2UxNm5ld1J1bnRpbWVPYmplY3RFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0pT
QzhCaW5kaW5nczE3T2JqQ1J1bnRpbWVPYmplY3RDMUVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0ds
b2JhbE9iamVjdEVOM1dURjEwUGFzc1JlZlB0cklOUzBfMTJPYmpjSW5zdGFuY2VFRUUKIF9fWk4z
SlNDOEJpbmRpbmdzMTdPYmpDUnVudGltZU9iamVjdEMyRVBOU185RXhlY1N0YXRlRVBOU18xNEpT
R2xvYmFsT2JqZWN0RU4zV1RGMTBQYXNzUmVmUHRySU5TMF8xMk9iamNJbnN0YW5jZUVFRQogX19a
TjNKU0M4QmluZGluZ3MxM1J1bnRpbWVPYmplY3RDMkVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0ds
b2JhbE9iamVjdEVQTlNfOVN0cnVjdHVyZUVOM1dURjEwUGFzc1JlZlB0cklOUzBfOEluc3RhbmNl
RUVFCi1fX1pOM0pTQzRXZWFrSU5TXzhCaW5kaW5nczEzUnVudGltZU9iamVjdEVFM3NldEVSTlNf
MTJKU0dsb2JhbERhdGFFUFMyX1BOU18xNVdlYWtIYW5kbGVPd25lckVQdgotX19aTjNKU0M4Qmlu
ZGluZ3MxMFJvb3RPYmplY3QxNmFkZFJ1bnRpbWVPYmplY3RFUk5TXzEySlNHbG9iYWxEYXRhRVBO
UzBfMTNSdW50aW1lT2JqZWN0RQorX19aTjNKU0M0V2Vha0lOU184QmluZGluZ3MxM1J1bnRpbWVP
YmplY3RFRTNzZXRFUk5TXzEyVk1FUFMyX1BOU18xNVdlYWtIYW5kbGVPd25lckVQdgorX19aTjNK
U0M4QmluZGluZ3MxMFJvb3RPYmplY3QxNmFkZFJ1bnRpbWVPYmplY3RFUk5TXzEyVk1FUE5TMF8x
M1J1bnRpbWVPYmplY3RFCiBfX1pOM0pTQzRXZWFrSU5TXzhCaW5kaW5nczEzUnVudGltZU9iamVj
dEVFYVNFUktTM18KIF9fWk43V2ViQ29yZTE2SlNET01XaW5kb3dTaGVsbDNwdXRFUE4zSlNDOUV4
ZWNTdGF0ZUVSS05TMV8xMElkZW50aWZpZXJFTlMxXzdKU1ZhbHVlRVJOUzFfMTVQdXRQcm9wZXJ0
eVNsb3RFCiBfX1pON1dlYkNvcmUxMUpTRE9NV2luZG93M3B1dEVQTjNKU0M5RXhlY1N0YXRlRVJL
TlMxXzEwSWRlbnRpZmllckVOUzFfN0pTVmFsdWVFUk5TMV8xNVB1dFByb3BlcnR5U2xvdEUKQEAg
LTMwNzYsNyArMzA3Niw3IEBAIF9fWk43V2ViQ29yZTEzdG9KU0RPTVdpbmRvd0VQTlNfNUZyYW1l
RVAKIF9fWk43V2ViQ29yZUwxOGV2ZW50UGFyYW1ldGVyTmFtZUViCiBfX1pON1dlYkNvcmUxOUpT
TGF6eUV2ZW50TGlzdGVuZXJDMUVSS04zV1RGNlN0cmluZ0VTNF9TNF9QTlNfNE5vZGVFUzRfaVBO
M0pTQzhKU09iamVjdEVQTlNfMTVET01XcmFwcGVyV29ybGRFCiBfX1pON1dlYkNvcmUxNUpTRXZl
bnRMaXN0ZW5lckMyRVBOM0pTQzhKU09iamVjdEVTM19iUE5TXzE1RE9NV3JhcHBlcldvcmxkRQot
X19aTjNKU0M0V2Vha0lOU184SlNPYmplY3RFRUMyRVJOU18xMkpTR2xvYmFsRGF0YUVQUzFfUE5T
XzE1V2Vha0hhbmRsZU93bmVyRVB2CitfX1pOM0pTQzRXZWFrSU5TXzhKU09iamVjdEVFQzJFUk5T
XzEyVk1FUFMxX1BOU18xNVdlYWtIYW5kbGVPd25lckVQdgogX19aTjdXZWJDb3JlOERvY3VtZW50
MzFzZXRXaW5kb3dBdHRyaWJ1dGVFdmVudExpc3RlbmVyRVJLTjNXVEYxMkF0b21pY1N0cmluZ0VO
UzFfMTBQYXNzUmVmUHRySU5TXzEzRXZlbnRMaXN0ZW5lckVFRQogX19aTjdXZWJDb3JlMTFFdmVu
dFRhcmdldDI1c2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lckVSS04zV1RGMTJBdG9taWNTdHJpbmdF
TlMxXzEwUGFzc1JlZlB0cklOU18xM0V2ZW50TGlzdGVuZXJFRUUKIF9fWk43V2ViQ29yZTExRXZl
bnRUYXJnZXQyNWdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXJFUktOM1dURjEyQXRvbWljU3RyaW5n
RQpAQCAtMzMzOSwxMyArMzMzOSwxMyBAQCBfX1pOSzdXZWJDb3JlMTlKU0xhenlFdmVudExpc3Rl
bmVyMjBpbml0CiBfX1pOSzdXZWJDb3JlMjFDb250ZW50U2VjdXJpdHlQb2xpY3kyNGFsbG93SW5s
aW5lRXZlbnRIYW5kbGVyc0V2CiBfX1pON1dlYkNvcmUxOXRvSlNET01HbG9iYWxPYmplY3RFUE5T
XzIyU2NyaXB0RXhlY3V0aW9uQ29udGV4dEVQTlNfMTVET01XcmFwcGVyV29ybGRFCiBfX1pUaG4y
MDhfTks3V2ViQ29yZThEb2N1bWVudDEwaXNEb2N1bWVudEV2Ci1fX1pOM0pTQzE4anNOb250cml2
aWFsU3RyaW5nRVBOU18xMkpTR2xvYmFsRGF0YUVSS05TXzdVU3RyaW5nRQorX19aTjNKU0MxOGpz
Tm9udHJpdmlhbFN0cmluZ0VQTlNfMTJWTUVSS05TXzdVU3RyaW5nRQogX19aTjdXZWJDb3JlOGpz
U3RyaW5nRVBOM0pTQzlFeGVjU3RhdGVFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxNmpz
U3RyaW5nU2xvd0Nhc2VFUE4zSlNDOUV4ZWNTdGF0ZUVSTjNXVEY3SGFzaE1hcElQTlMzXzEwU3Ry
aW5nSW1wbEVOUzBfNFdlYWtJTlMwXzhKU1N0cmluZ0VFRU5TM18xMFN0cmluZ0hhc2hFTlMzXzEw
SGFzaFRyYWl0c0lTNl9FRU5TQl9JUzlfRUVFRVM2XwotX19aTjNKU0M4anNTdHJpbmdFUE5TXzEy
SlNHbG9iYWxEYXRhRVJLTlNfN1VTdHJpbmdFCi1fX1pOM0pTQzRXZWFrSU5TXzhKU1N0cmluZ0VF
QzJFUk5TXzEySlNHbG9iYWxEYXRhRVBTMV9QTlNfMTVXZWFrSGFuZGxlT3duZXJFUHYKK19fWk4z
SlNDOGpzU3RyaW5nRVBOU18xMlZNRVJLTlNfN1VTdHJpbmdFCitfX1pOM0pTQzRXZWFrSU5TXzhK
U1N0cmluZ0VFQzJFUk5TXzEyVk1FUFMxX1BOU18xNVdlYWtIYW5kbGVPd25lckVQdgogX19aTjNK
U0M0V2Vha0lOU184SlNTdHJpbmdFRWFTRVJLUzJfCi1fX1pON1dlYkNvcmUyMlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQxMGdsb2JhbERhdGFFdgorX19aTjdXZWJDb3JlMjJTY3JpcHRFeGVjdXRpb25D
b250ZXh0MTB2bUV2CiBfX1pON1dlYkNvcmU0dG9KU0VQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pT
RE9NR2xvYmFsT2JqZWN0RVBOU181RXZlbnRFCiBfX1pOSzdXZWJDb3JlNUV2ZW50OWlzVUlFdmVu
dEV2CiBfX1pOSzdXZWJDb3JlNUV2ZW50MTVpc011dGF0aW9uRXZlbnRFdgpAQCAtMzM2Niw3ICsz
MzY2LDcgQEAgX19aTjdXZWJDb3JlMTNjcmVhdGVXcmFwcGVySU5TXzdKU0V2ZW50RQogX19aTjdX
ZWJDb3JlMTVnZXRET01TdHJ1Y3R1cmVJTlNfN0pTRXZlbnRFRUVQTjNKU0M5U3RydWN0dXJlRVBO
UzJfOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEUKIF9fWk43V2ViQ29yZTdKU0V2
ZW50MTVjcmVhdGVQcm90b3R5cGVFUE4zSlNDOUV4ZWNTdGF0ZUVQTlMxXzE0SlNHbG9iYWxPYmpl
Y3RFCiBfX1pON1dlYkNvcmU3SlNFdmVudEMxRVBOM0pTQzlTdHJ1Y3R1cmVFUE5TXzE3SlNET01H
bG9iYWxPYmplY3RFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNUV2ZW50RUVFCi1fX1pOM0pTQzRXZWFr
SU43V2ViQ29yZTEySlNET01XcmFwcGVyRUVDMkVSTlNfMTJKU0dsb2JhbERhdGFFUFMyX1BOU18x
NVdlYWtIYW5kbGVPd25lckVQdgorX19aTjNKU0M0V2Vha0lON1dlYkNvcmUxMkpTRE9NV3JhcHBl
ckVFQzJFUk5TXzEyVk1FUFMyX1BOU18xNVdlYWtIYW5kbGVPd25lckVQdgogX19aTjNKU0M0V2Vh
a0lON1dlYkNvcmUxMkpTRE9NV3JhcHBlckVFYVNFUktTM18KIF9fWk5LN1dlYkNvcmUxN0pTRE9N
R2xvYmFsT2JqZWN0MTJjdXJyZW50RXZlbnRFdgogX19aTjdXZWJDb3JlNHRvSlNFUE4zSlNDOUV4
ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNfMTFFdmVudFRhcmdldEUKQEAgLTM2
NzUsNyArMzY3NSw3IEBAIF9fWk43V2ViQ29yZTE3TW91c2VSZWxhdGVkRXZlbnQxNHJlY2VpdmUK
IF9fWk5LN1dlYkNvcmUxME1vdXNlRXZlbnQxMmlzTW91c2VFdmVudEV2CiBfX1pON1dlYkNvcmU5
SW5wdXRUeXBlMTd3aWxsRGlzcGF0Y2hDbGlja0V2CiBfX1pOSzdXZWJDb3JlNE5vZGUyMnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRFdgotX19aTjNKU0M0V2Vha0lOU184SlNPYmplY3RFRTNzZXRFUk5T
XzEySlNHbG9iYWxEYXRhRVBTMV9QTlNfMTVXZWFrSGFuZGxlT3duZXJFUHYKK19fWk4zSlNDNFdl
YWtJTlNfOEpTT2JqZWN0RUUzc2V0RVJOU18xMlZNRVBTMV9QTlNfMTVXZWFrSGFuZGxlT3duZXJF
UHYKIF9fWk5LN1dlYkNvcmUxM0pTSFRNTEVsZW1lbnQyMXB1c2hFdmVudEhhbmRsZXJTY29wZUVQ
TjNKU0M5RXhlY1N0YXRlRVBOUzFfMTRTY29wZUNoYWluTm9kZUUKIF9fWk5LN1dlYkNvcmU0Tm9k
ZTEzb3duZXJEb2N1bWVudEV2CiBfX1pOSzdXZWJDb3JlMjJIVE1MRm9ybUNvbnRyb2xFbGVtZW50
MTF2aXJ0dWFsRm9ybUV2CkBAIC00ODUyLDcgKzQ4NTIsNyBAQCBfX1pON1dlYkNvcmUyMEhUTUxD
b25zdHJ1Y3Rpb25TaXRlMjhpbnNlCiBfX1pOSzdXZWJDb3JlMTZIVE1MRWxlbWVudFN0YWNrMTFo
dG1sRWxlbWVudEV2CiBfX1pON1dlYkNvcmUyMEhUTUxDb25zdHJ1Y3Rpb25TaXRlMzVtZXJnZUF0
dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudEVSTlNfMTVBdG9taWNIVE1MVG9rZW5FUE5TXzdF
bGVtZW50RQogX19aTjdXZWJDb3JlMjBzZXRKU0RPTVdpbmRvd1BhcmVudEVQTjNKU0M5RXhlY1N0
YXRlRVBOUzBfOEpTT2JqZWN0RU5TMF83SlNWYWx1ZUUKLV9fWk4zSlNDOEpTT2JqZWN0MTdwdXRE
aXJlY3RJbnRlcm5hbEVSTlNfMTJKU0dsb2JhbERhdGFFUktOU18xMElkZW50aWZpZXJFTlNfN0pT
VmFsdWVFamJSTlNfMTVQdXRQcm9wZXJ0eVNsb3RFUE5TXzZKU0NlbGxFCitfX1pOM0pTQzhKU09i
amVjdDE3cHV0RGlyZWN0SW50ZXJuYWxFUk5TXzEyVk1FUktOU18xMElkZW50aWZpZXJFTlNfN0pT
VmFsdWVFamJSTlNfMTVQdXRQcm9wZXJ0eVNsb3RFUE5TXzZKU0NlbGxFCiBfX1pON1dlYkNvcmVM
MTZ0YWJsZUNvbnN0cnVjdG9yRVJLTlNfMTNRdWFsaWZpZWROYW1lRVBOU184RG9jdW1lbnRFUE5T
XzE1SFRNTEZvcm1FbGVtZW50RWIKIF9fWk43V2ViQ29yZTE2SFRNTFRhYmxlRWxlbWVudDZjcmVh
dGVFUktOU18xM1F1YWxpZmllZE5hbWVFUE5TXzhEb2N1bWVudEUKIF9fWk5LN1dlYkNvcmUxNkhU
TUxUYWJsZUVsZW1lbnQxMG1hcFRvRW50cnlFUktOU18xM1F1YWxpZmllZE5hbWVFUk5TXzIwTWFw
cGVkQXR0cmlidXRlRW50cnlFCkBAIC03MzM2LDggKzczMzYsOCBAQCBfX1pON1dlYkNvcmUxNmpz
RE9NV2luZG93RXZlbnRFUE4zSlNDOUV4CiBfX1pOSzdXZWJDb3JlMTFKU0RPTVdpbmRvdzVldmVu
dEVQTjNKU0M5RXhlY1N0YXRlRQogX19aTjNKU0M0V2Vha0lON1dlYkNvcmUxMkpTRE9NV3JhcHBl
ckVFQzJFUktTM18KIF9fWk43V2ViQ29yZTdKU0V2ZW50MThnZXRPd25Qcm9wZXJ0eVNsb3RFUE4z
SlNDOUV4ZWNTdGF0ZUVSS05TMV8xMElkZW50aWZpZXJFUk5TMV8xMlByb3BlcnR5U2xvdEUKLV9f
Wk43V2ViQ29yZTI1Z2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YUVSTjNKU0MxMkpTR2xvYmFsRGF0
YUVQS05TMF85SGFzaFRhYmxlRQotX19aTjdXZWJDb3JlMjFET01PYmplY3RIYXNoVGFibGVNYXA2
bWFwRm9yRVJOM0pTQzEySlNHbG9iYWxEYXRhRQorX19aTjdXZWJDb3JlMjVnZXRIYXNoVGFibGVG
b3JHbG9iYWxEYXRhRVJOM0pTQzEyVk1FUEtOUzBfOUhhc2hUYWJsZUUKK19fWk43V2ViQ29yZTIx
RE9NT2JqZWN0SGFzaFRhYmxlTWFwNm1hcEZvckVSTjNKU0MxMlZNRQogX19aTjdXZWJDb3JlMjFE
T01PYmplY3RIYXNoVGFibGVNYXAzZ2V0RVBLTjNKU0M5SGFzaFRhYmxlRQogX19aTjNKU0MxOGdl
dFN0YXRpY1ZhbHVlU2xvdElON1dlYkNvcmU3SlNFdmVudEVOUzFfMTJKU0RPTVdyYXBwZXJFRUVi
UE5TXzlFeGVjU3RhdGVFUEtOU185SGFzaFRhYmxlRVBUX1JLTlNfMTBJZGVudGlmaWVyRVJOU18x
MlByb3BlcnR5U2xvdEUKIF9fWk43V2ViQ29yZTExanNFdmVudFR5cGVFUE4zSlNDOUV4ZWNTdGF0
ZUVOUzBfN0pTVmFsdWVFUktOUzBfMTBJZGVudGlmaWVyRQpAQCAtMTQzNDQsNyArMTQzNDQsNyBA
QCBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDIzc2V0VXBkYXRpCiBfX1pOSzdXZWJDb3Jl
MTRSZW5kZXJUaGVtZU1hYzIwY29udHJvbFN1cHBvcnRzVGludHNFUEtOU18xMlJlbmRlck9iamVj
dEUKIF9fWk43V2ViQ29yZTIxU2VyaWFsaXplZFNjcmlwdFZhbHVlQzFFUk4zV1RGNlZlY3Rvcklo
TG0wRUVFCiBfX1pON1dlYkNvcmUyMVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTZjcmVhdGVFUEsxNU9w
YXF1ZUpTQ29udGV4dFBLMTNPcGFxdWVKU1ZhbHVlUFM2XwotX19aTjNKU0MyM0FQSUVudHJ5U2hp
bVdpdGhvdXRMb2NrQzJFUE5TXzEySlNHbG9iYWxEYXRhRWIKK19fWk4zSlNDMjNBUElFbnRyeVNo
aW1XaXRob3V0TG9ja0MyRVBOU18xMlZNRWIKIF9fWk43V2ViQ29yZTIxU2VyaWFsaXplZFNjcmlw
dFZhbHVlNmNyZWF0ZUVQTjNKU0M5RXhlY1N0YXRlRU5TMV83SlNWYWx1ZUVOU18yMlNlcmlhbGl6
YXRpb25FcnJvck1vZGVFCiBfX1pON1dlYkNvcmUxNUNsb25lU2VyaWFsaXplckMyRVBOM0pTQzlF
eGVjU3RhdGVFUk4zV1RGNlZlY3RvckloTG0wRUVFCiBfX1pON1dlYkNvcmVMMTd3cml0ZUxpdHRs
ZUVuZGlhbklqRUV2Uk4zV1RGNlZlY3RvckloTG0wRUVFVF8KQEAgLTE3MzQ3LDcgKzE3MzQ3LDcg
QEAgX19aTjdXZWJDb3JlMjhqc1hNTEh0dHBSZXF1ZXN0UmVzcG9uc2VUZQogX19aTks3V2ViQ29y
ZTE2SlNYTUxIdHRwUmVxdWVzdDEycmVzcG9uc2VUZXh0RVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pO
N1dlYkNvcmUxNFhNTEh0dHBSZXF1ZXN0MTJyZXNwb25zZVRleHRFUmkKIF9fWk43V2ViQ29yZTE5
anNPd25lZFN0cmluZ09yTnVsbEVQTjNKU0M5RXhlY1N0YXRlRVJLTjNXVEY2U3RyaW5nRQotX19a
TjNKU0MxM2pzT3duZWRTdHJpbmdFUE5TXzEySlNHbG9iYWxEYXRhRVJLTlNfN1VTdHJpbmdFCitf
X1pOM0pTQzEzanNPd25lZFN0cmluZ0VQTlNfMTJWTUVSS05TXzdVU3RyaW5nRQogX19aTjdXZWJD
b3JlNDhqc1dlYkdMUmVuZGVyaW5nQ29udGV4dFByb3RvdHlwZUZ1bmN0aW9uR2V0RXJyb3JFUE4z
SlNDOUV4ZWNTdGF0ZUUKIF9fWk43V2ViQ29yZTIxV2ViR0xSZW5kZXJpbmdDb250ZXh0OGdldEVy
cm9yRXYKIF9fWk43V2ViQ29yZTE3R3JhcGhpY3NDb250ZXh0M0Q4Z2V0RXJyb3JFdgpAQCAtMTg2
MDEsMTQgKzE4NjAxLDE0IEBAIF9fWk43V2ViQ29yZTIzV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXJD
MUUKIF9fWk43V2ViQ29yZTIyV29ya2VyU2NyaXB0Q29udHJvbGxlcjhldmFsdWF0ZUVSS05TXzE2
U2NyaXB0U291cmNlQ29kZUUKIF9fWk43V2ViQ29yZTIyV29ya2VyU2NyaXB0Q29udHJvbGxlcjhl
dmFsdWF0ZUVSS05TXzE2U2NyaXB0U291cmNlQ29kZUVQTlNfMTFTY3JpcHRWYWx1ZUUKIF9fWk43
V2ViQ29yZTIyV29ya2VyU2NyaXB0Q29udHJvbGxlcjEwaW5pdFNjcmlwdEV2Ci1fX1pON1dlYkNv
cmUyNEpTV29ya2VyQ29udGV4dFByb3RvdHlwZW53RW1QTjNKU0MxMkpTR2xvYmFsRGF0YUUKK19f
Wk43V2ViQ29yZTI0SlNXb3JrZXJDb250ZXh0UHJvdG90eXBlbndFbVBOM0pTQzEyVk1FCiBfX1pO
SzdXZWJDb3JlMjJEZWRpY2F0ZWRXb3JrZXJDb250ZXh0MjRpc0RlZGljYXRlZFdvcmtlckNvbnRl
eHRFdgotX19aTjdXZWJDb3JlMzNKU0RlZGljYXRlZFdvcmtlckNvbnRleHRQcm90b3R5cGVud0Vt
UE4zSlNDMTJKU0dsb2JhbERhdGFFCitfX1pON1dlYkNvcmUzM0pTRGVkaWNhdGVkV29ya2VyQ29u
dGV4dFByb3RvdHlwZW53RW1QTjNKU0MxMlZNRQogX19aVGhuMTI4X043V2ViQ29yZTIyRGVkaWNh
dGVkV29ya2VyQ29udGV4dDI0dG9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0RXYKLV9fWk43V2ViQ29y
ZTI0SlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0QzFFUk4zSlNDMTJKU0dsb2JhbERhdGFFUE5TMV85
U3RydWN0dXJlRU4zV1RGMTBQYXNzUmVmUHRySU5TXzIyRGVkaWNhdGVkV29ya2VyQ29udGV4dEVF
RQotX19aTjdXZWJDb3JlMTVKU1dvcmtlckNvbnRleHRDMkVSTjNKU0MxMkpTR2xvYmFsRGF0YUVQ
TlMxXzlTdHJ1Y3R1cmVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTNXb3JrZXJDb250ZXh0RUVFCi1f
X1pON1dlYkNvcmUxOUpTV29ya2VyQ29udGV4dEJhc2VDMkVSTjNKU0MxMkpTR2xvYmFsRGF0YUVQ
TlMxXzlTdHJ1Y3R1cmVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTNXb3JrZXJDb250ZXh0RUVFCi1f
X1pON1dlYkNvcmUxMW5vcm1hbFdvcmxkRVJOM0pTQzEySlNHbG9iYWxEYXRhRQorX19aTjdXZWJD
b3JlMjRKU0RlZGljYXRlZFdvcmtlckNvbnRleHRDMUVSTjNKU0MxMlZNRVBOUzFfOVN0cnVjdHVy
ZUVOM1dURjEwUGFzc1JlZlB0cklOU18yMkRlZGljYXRlZFdvcmtlckNvbnRleHRFRUUKK19fWk43
V2ViQ29yZTE1SlNXb3JrZXJDb250ZXh0QzJFUk4zSlNDMTJWTUVQTlMxXzlTdHJ1Y3R1cmVFTjNX
VEYxMFBhc3NSZWZQdHJJTlNfMTNXb3JrZXJDb250ZXh0RUVFCitfX1pON1dlYkNvcmUxOUpTV29y
a2VyQ29udGV4dEJhc2VDMkVSTjNKU0MxMlZNRVBOUzFfOVN0cnVjdHVyZUVOM1dURjEwUGFzc1Jl
ZlB0cklOU18xM1dvcmtlckNvbnRleHRFRUUKK19fWk43V2ViQ29yZTExbm9ybWFsV29ybGRFUk4z
SlNDMTJWTUUKIF9fWk5LM0pTQzE0SlNHbG9iYWxPYmplY3QxN3N1cHBvcnRzUHJvZmlsaW5nRXYK
IF9fWk5LM0pTQzE0SlNHbG9iYWxPYmplY3QyMnN1cHBvcnRzUmljaFNvdXJjZUluZm9FdgogX19a
TjdXZWJDb3JlMjRKU0RlZGljYXRlZFdvcmtlckNvbnRleHQzcHV0RVBOM0pTQzlFeGVjU3RhdGVF
UktOUzFfMTBJZGVudGlmaWVyRU5TMV83SlNWYWx1ZUVSTlMxXzE1UHV0UHJvcGVydHlTbG90RQpA
QCAtMTk2OTgsNyArMTk2OTgsNyBAQCBfX1pON1dlYkNvcmUyMmpzSFRNTE1lZGlhRWxlbWVudExv
b3BFUE4zCiBfX1pON1dlYkNvcmUyNXNldEpTSFRNTE1lZGlhRWxlbWVudExvb3BFUE4zSlNDOUV4
ZWNTdGF0ZUVQTlMwXzhKU09iamVjdEVOUzBfN0pTVmFsdWVFCiBfX1pON1dlYkNvcmUxN2pzSFRN
TERvY3VtZW50QWxsRVBOM0pTQzlFeGVjU3RhdGVFTlMwXzdKU1ZhbHVlRVJLTlMwXzEwSWRlbnRp
ZmllckUKIF9fWk5LN1dlYkNvcmUxNEpTSFRNTERvY3VtZW50M2FsbEVQTjNKU0M5RXhlY1N0YXRl
RQotX19aTkszSlNDOEpTT2JqZWN0OWdldERpcmVjdEVSTlNfMTJKU0dsb2JhbERhdGFFUktOU18x
MElkZW50aWZpZXJFCitfX1pOSzNKU0M4SlNPYmplY3Q5Z2V0RGlyZWN0RVJOU18xMlZNRVJLTlNf
MTBJZGVudGlmaWVyRQogX19aTjdXZWJDb3JlOERvY3VtZW50M2FsbEV2CiBfX1pON1dlYkNvcmUx
N0hUTUxBbGxDb2xsZWN0aW9uNmNyZWF0ZUVOM1dURjEwUGFzc1JlZlB0cklOU180Tm9kZUVFRQog
X19aTjdXZWJDb3JlMTRIVE1MQ29sbGVjdGlvbkMyRU4zV1RGMTBQYXNzUmVmUHRySU5TXzROb2Rl
RUVFTlNfMTRDb2xsZWN0aW9uVHlwZUUKQEAgLTE5NzUxLDkgKzE5NzUxLDkgQEAgX19aTjdXZWJD
b3JlMjNKU05vZGVGaWx0ZXJDb25zdHJ1Y3RvcjE4ZwogX19aTjNKU0MxOGdldFN0YXRpY1ZhbHVl
U2xvdElON1dlYkNvcmUyM0pTTm9kZUZpbHRlckNvbnN0cnVjdG9yRU5TMV8xMkpTRE9NV3JhcHBl
ckVFRWJQTlNfOUV4ZWNTdGF0ZUVQS05TXzlIYXNoVGFibGVFUFRfUktOU18xMElkZW50aWZpZXJF
Uk5TXzEyUHJvcGVydHlTbG90RQogX19aTjdXZWJDb3JlMjRqc05vZGVGaWx0ZXJTSE9XX0VMRU1F
TlRFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFUktOUzBfMTBJZGVudGlmaWVyRQogX19a
TjdXZWJDb3JlNDVqc0RvY3VtZW50UHJvdG90eXBlRnVuY3Rpb25DcmVhdGVOb2RlSXRlcmF0b3JF
UE4zSlNDOUV4ZWNTdGF0ZUUKLV9fWk43V2ViQ29yZTEydG9Ob2RlRmlsdGVyRVJOM0pTQzEySlNH
bG9iYWxEYXRhRU5TMF83SlNWYWx1ZUUKLV9fWk43V2ViQ29yZTIxSlNOb2RlRmlsdGVyQ29uZGl0
aW9uQzFFUk4zSlNDMTJKU0dsb2JhbERhdGFFUE5TXzEwTm9kZUZpbHRlckVOUzFfN0pTVmFsdWVF
Ci1fX1pOM0pTQzRXZWFrSU5TXzdVbmtub3duRUVDMkVSTlNfMTJKU0dsb2JhbERhdGFFTlNfN0pT
VmFsdWVFUE5TXzE1V2Vha0hhbmRsZU93bmVyRVB2CitfX1pON1dlYkNvcmUxMnRvTm9kZUZpbHRl
ckVSTjNKU0MxMlZNRU5TMF83SlNWYWx1ZUUKK19fWk43V2ViQ29yZTIxSlNOb2RlRmlsdGVyQ29u
ZGl0aW9uQzFFUk4zSlNDMTJWTUVQTlNfMTBOb2RlRmlsdGVyRU5TMV83SlNWYWx1ZUUKK19fWk4z
SlNDNFdlYWtJTlNfN1Vua25vd25FRUMyRVJOU18xMlZNRU5TXzdKU1ZhbHVlRVBOU18xNVdlYWtI
YW5kbGVPd25lckVQdgogX19aTjdXZWJDb3JlNHRvSlNFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdK
U0RPTUdsb2JhbE9iamVjdEVQTlNfMTJOb2RlSXRlcmF0b3JFCiBfX1pON1dlYkNvcmUxM2NyZWF0
ZVdyYXBwZXJJTlNfMTRKU05vZGVJdGVyYXRvckVOU18xMk5vZGVJdGVyYXRvckVFRVBOU18xMkpT
RE9NV3JhcHBlckVQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBUMF8K
IF9fWk43V2ViQ29yZTE1Z2V0RE9NU3RydWN0dXJlSU5TXzE0SlNOb2RlSXRlcmF0b3JFRUVQTjNK
U0M5U3RydWN0dXJlRVBOUzJfOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEUKQEAg
LTI2MzI2LDkgKzI2MzI2LDkgQEAgX19aTjdXZWJDb3JlMjRTaGFyZWRXb3JrZXJTY3JpcHRMb2Fk
ZXJEMAogX19aTjdXZWJDb3JlMThTaGFyZWRXb3JrZXJUaHJlYWQxOWNyZWF0ZVdvcmtlckNvbnRl
eHRFUktOU180S1VSTEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE5U2hhcmVkV29ya2Vy
Q29udGV4dEMxRVJLTjNXVEY2U3RyaW5nRVJLTlNfNEtVUkxFUzRfUE5TXzE4U2hhcmVkV29ya2Vy
VGhyZWFkRQogX19aTks3V2ViQ29yZTEzV29ya2VyQ29udGV4dDI0aXNEZWRpY2F0ZWRXb3JrZXJD
b250ZXh0RXYKLV9fWk43V2ViQ29yZTMwSlNTaGFyZWRXb3JrZXJDb250ZXh0UHJvdG90eXBlbndF
bVBOM0pTQzEySlNHbG9iYWxEYXRhRQorX19aTjdXZWJDb3JlMzBKU1NoYXJlZFdvcmtlckNvbnRl
eHRQcm90b3R5cGVud0VtUE4zSlNDMTJWTUUKIF9fWlRobjEyOF9ON1dlYkNvcmUxOVNoYXJlZFdv
cmtlckNvbnRleHQyMXRvU2hhcmVkV29ya2VyQ29udGV4dEV2Ci1fX1pON1dlYkNvcmUyMUpTU2hh
cmVkV29ya2VyQ29udGV4dEMxRVJOM0pTQzEySlNHbG9iYWxEYXRhRVBOUzFfOVN0cnVjdHVyZUVO
M1dURjEwUGFzc1JlZlB0cklOU18xOVNoYXJlZFdvcmtlckNvbnRleHRFRUUKK19fWk43V2ViQ29y
ZTIxSlNTaGFyZWRXb3JrZXJDb250ZXh0QzFFUk4zSlNDMTJWTUVQTlMxXzlTdHJ1Y3R1cmVFTjNX
VEYxMFBhc3NSZWZQdHJJTlNfMTlTaGFyZWRXb3JrZXJDb250ZXh0RUVFCiBfX1pON1dlYkNvcmUy
MUpTU2hhcmVkV29ya2VyQ29udGV4dDNwdXRFUE4zSlNDOUV4ZWNTdGF0ZUVSS05TMV8xMElkZW50
aWZpZXJFTlMxXzdKU1ZhbHVlRVJOUzFfMTVQdXRQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzlsb29r
dXBQdXRJTjdXZWJDb3JlMjFKU1NoYXJlZFdvcmtlckNvbnRleHRFRUViUE5TXzlFeGVjU3RhdGVF
UktOU18xMElkZW50aWZpZXJFTlNfN0pTVmFsdWVFUEtOU185SGFzaFRhYmxlRVBUXwogX19aTjdX
ZWJDb3JlMzNzZXRKU1NoYXJlZFdvcmtlckNvbnRleHRPbmNvbm5lY3RFUE4zSlNDOUV4ZWNTdGF0
ZUVQTlMwXzhKU09iamVjdEVOUzBfN0pTVmFsdWVFCkBAIC00MTIwNSw3ICs0MTIwNSw3IEBAIF9f
WlpON1dlYkNvcmUyNHBhcnNlWFNTUHJvdGVjdGlvbkhlYWRlckUKIF9fWkdWWk43V2ViQ29yZTI0
cGFyc2VYU1NQcm90ZWN0aW9uSGVhZGVyRVJLTjNXVEY2U3RyaW5nRVJTMV9SalM0X0UyOGZhaWx1
cmVSZWFzb25EdXBsaWNhdGVSZXBvcnQuYgogX19aWk43V2ViQ29yZTI0cGFyc2VYU1NQcm90ZWN0
aW9uSGVhZGVyRVJLTjNXVEY2U3RyaW5nRVJTMV9SalM0X0UyOWZhaWx1cmVSZWFzb25JbnZhbGlk
RGlyZWN0aXZlCiBfX1pHVlpON1dlYkNvcmUyNHBhcnNlWFNTUHJvdGVjdGlvbkhlYWRlckVSS04z
V1RGNlN0cmluZ0VSUzFfUmpTNF9FMjlmYWlsdXJlUmVhc29uSW52YWxpZERpcmVjdGl2ZS5iCi1f
X1pON1dlYkNvcmVMMTRnbG9iYWxEYXRhYmFzZUUKK19fWk43V2ViQ29yZUwxNHZtYmFzZUUKIF9f
WlpON1dlYkNvcmU1SW1hZ2U5bnVsbEltYWdlRXZFOW51bGxJbWFnZQogX19aR1ZaTjdXZWJDb3Jl
NUltYWdlOW51bGxJbWFnZUV2RTludWxsSW1hZ2UuYgogX19aWk43V2ViQ29yZUwxNmVycm9yRXZl
bnRTZW5kZXJFdkU2c2VuZGVyCkBAIC00MTI1Miw3ICs0MTI1Miw3IEBAIF9fWkdWWk43V2ViQ29y
ZTE0SW5wdXRUeXBlTmFtZXMzdXJsRXZFNG4KIF9fWk43V2ViQ29yZTEyX0dMT0JBTF9fTl8xTDIy
aW5zdHJ1bWVudGluZ0FnZW50c1NldEUKIF9fWlpON1dlYkNvcmVMMzNjc3NQcm9wZXJ0eUlERm9y
SlNDU1NQcm9wZXJ0eU5hbWVFTjNKU0MxMlByb3BlcnR5TmFtZUVFMTdwcm9wZXJ0eUluZm9DYWNo
ZQogX19aR1ZaTjdXZWJDb3JlTDMzY3NzUHJvcGVydHlJREZvckpTQ1NTUHJvcGVydHlOYW1lRU4z
SlNDMTJQcm9wZXJ0eU5hbWVFRTE3cHJvcGVydHlJbmZvQ2FjaGUuYgotX19aWk43V2ViQ29yZTE1
SlNET01XaW5kb3dCYXNlMThjb21tb25KU0dsb2JhbERhdGFFdkUxMGdsb2JhbERhdGEKK19fWlpO
N1dlYkNvcmUxNUpTRE9NV2luZG93QmFzZTE4Y29tbW9uVk1FdkUxMHZtCiBfX1paTjdXZWJDb3Jl
MTljcmVhdGVKU0hUTUxXcmFwcGVyRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxP
YmplY3RFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTFIVE1MRWxlbWVudEVFRUUzbWFwCiBfX1pHVlpO
N1dlYkNvcmUxOWNyZWF0ZUpTSFRNTFdyYXBwZXJFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RP
TUdsb2JhbE9iamVjdEVOM1dURjEwUGFzc1JlZlB0cklOU18xMUhUTUxFbGVtZW50RUVFRTNtYXAu
YgogX19aWk43V2ViQ29yZThibGFua1VSTEV2RTE0c3RhdGljQmxhbmtVUkwKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0dsb2Jh
bERhdGEuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hl
YWRlcnMvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICswLDAg
QEAKLSNpZm5kZWYgV2ViQ29yZV9GV0RfSlNHbG9iYWxEYXRhX2gKLSNkZWZpbmUgV2ViQ29yZV9G
V0RfSlNHbG9iYWxEYXRhX2gKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbERhdGEu
aD4KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGlt
ZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1
bnRpbWUvVk0uaAkocmV2aXNpb24gMTQ4NjM4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy9ydW50aW1lL0pTR2xvYmFsRGF0YS5oOjE0ODYzOCkKKysrIFNvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfSlNHbG9iYWxEYXRhX2gKKyNkZWZpbmUgV2Vi
Q29yZV9GV0RfSlNHbG9iYWxEYXRhX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2Jh
bERhdGEuaD4KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMv
cnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvRm9yd2Fy
ZGluZ0hlYWRlcnMvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAot
I2lmbmRlZiBXZWJDb3JlX0ZXRF9KU0dsb2JhbERhdGFfaAotI2RlZmluZSBXZWJDb3JlX0ZXRF9K
U0dsb2JhbERhdGFfaAotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTR2xvYmFsRGF0YS5oPgor
I2lmbmRlZiBXZWJDb3JlX0ZXRF9WTV9oCisjZGVmaW5lIFdlYkNvcmVfRldEX1ZNX2gKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9WTS5oPgogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE0ODY4MykKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTExMTYzLDcgKzExMTYzLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XEZvcndhcmRpbmdIZWFkZXJzXHJ1bnRpbWVcSlNEZXN0cnVjdGlibGVPYmplY3QuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEZvcndhcmRpbmdIZWFkZXJzXHJ1bnRpbWVcSlNFeHBv
cnRNYWNyb3MuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEZvcndhcmRpbmdIZWFk
ZXJzXHJ1bnRpbWVcSlNGdW5jdGlvbi5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Rm9yd2FyZGluZ0hlYWRlcnNccnVudGltZVxKU0dsb2JhbERhdGEuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXEZvcndhcmRpbmdIZWFkZXJzXHJ1bnRpbWVcVk0uaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEZvcndhcmRpbmdIZWFkZXJzXHJ1bnRpbWVcSlNHbG9iYWxP
YmplY3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEZvcndhcmRpbmdIZWFkZXJz
XHJ1bnRpbWVcSlNQcm94eS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cRm9yd2Fy
ZGluZ0hlYWRlcnNccnVudGltZVxKU1dpdGhTY29wZS5oIiAvPgpJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwko
cmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAzNSw3ICsxNDAzNSw3IEBA
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxGb3J3YXJkaW5nSGVhZGVyc1xydW50aW1lXEpT
RnVuY3Rpb24uaCI+CiAgICAgICA8RmlsdGVyPkZvcndhcmRpbmdIZWFkZXJzXHJ1bnRpbWU8L0Zp
bHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEZvcndh
cmRpbmdIZWFkZXJzXHJ1bnRpbWVcSlNHbG9iYWxEYXRhLmgiPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cRm9yd2FyZGluZ0hlYWRlcnNccnVudGltZVxWTS5oIj4KICAgICAgIDxGaWx0ZXI+
Rm9yd2FyZGluZ0hlYWRlcnNccnVudGltZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cRm9yd2FyZGluZ0hlYWRlcnNccnVudGltZVxKU0dsb2Jh
bE9iamVjdC5oIj4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTU9iamVjdEhh
c2hUYWJsZU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
RE9NT2JqZWN0SGFzaFRhYmxlTWFwLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsOSArMjcsOSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZXsKIAotRE9NT2JqZWN0SGFzaFRhYmxlTWFwJiBET01PYmplY3RIYXNoVGFibGVNYXA6Om1h
cEZvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitET01PYmplY3RIYXNoVGFibGVNYXAmIERP
TU9iamVjdEhhc2hUYWJsZU1hcDo6bWFwRm9yKFZNJiB2bSkKIHsKLSAgICBKU0dsb2JhbERhdGE6
OkNsaWVudERhdGEqIGNsaWVudERhdGEgPSBnbG9iYWxEYXRhLmNsaWVudERhdGE7CisgICAgVk06
OkNsaWVudERhdGEqIGNsaWVudERhdGEgPSB2bS5jbGllbnREYXRhOwogICAgIEFTU0VSVChjbGll
bnREYXRhKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZUpTQ2xpZW50RGF0YSo+KGNs
aWVudERhdGEpLT5oYXNoVGFibGVNYXA7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9ET01PYmplY3RIYXNoVGFibGVNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9ET01PYmplY3RIYXNoVGFibGVNYXAuaAkocmV2aXNpb24gMTQ4NjgzKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKLSAgICBjbGFzcyBKU0dsb2JhbERhdGE7CisgICAgY2xhc3MgVk07
CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogLy8gTWFwIGZyb20gc3RhdGljIEhhc2hUYWJsZSBpbnN0YW5jZXMgdG8gcGVyLUds
b2JhbERhdGEgb25lcy4KIGNsYXNzIERPTU9iamVjdEhhc2hUYWJsZU1hcCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIERPTU9iamVjdEhhc2hUYWJsZU1hcCYgbWFwRm9yKEpTQzo6SlNHbG9iYWxEYXRh
Jik7CisgICAgc3RhdGljIERPTU9iamVjdEhhc2hUYWJsZU1hcCYgbWFwRm9yKEpTQzo6Vk0mKTsK
IAogICAgIH5ET01PYmplY3RIYXNoVGFibGVNYXAoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAkocmV2aXNpb24gMTQ4Njgz
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsMTggKzMwLDE4IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotRE9NV3JhcHBlcldvcmxkOjpET01XcmFwcGVyV29ybGQoSlND
OjpKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGJvb2wgaXNOb3JtYWwpCi0gICAgOiBtX2dsb2Jh
bERhdGEoZ2xvYmFsRGF0YSkKK0RPTVdyYXBwZXJXb3JsZDo6RE9NV3JhcHBlcldvcmxkKEpTQzo6
Vk0qIHZtLCBib29sIGlzTm9ybWFsKQorICAgIDogbV92bSh2bSkKICAgICAsIG1faXNOb3JtYWwo
aXNOb3JtYWwpCiB7Ci0gICAgSlNHbG9iYWxEYXRhOjpDbGllbnREYXRhKiBjbGllbnREYXRhID0g
bV9nbG9iYWxEYXRhLT5jbGllbnREYXRhOworICAgIFZNOjpDbGllbnREYXRhKiBjbGllbnREYXRh
ID0gbV92bS0+Y2xpZW50RGF0YTsKICAgICBBU1NFUlQoY2xpZW50RGF0YSk7CiAgICAgc3RhdGlj
X2Nhc3Q8V2ViQ29yZUpTQ2xpZW50RGF0YSo+KGNsaWVudERhdGEpLT5yZW1lbWJlcldvcmxkKHRo
aXMpOwogfQogCiBET01XcmFwcGVyV29ybGQ6On5ET01XcmFwcGVyV29ybGQoKQogewotICAgIEpT
R2xvYmFsRGF0YTo6Q2xpZW50RGF0YSogY2xpZW50RGF0YSA9IG1fZ2xvYmFsRGF0YS0+Y2xpZW50
RGF0YTsKKyAgICBWTTo6Q2xpZW50RGF0YSogY2xpZW50RGF0YSA9IG1fdm0tPmNsaWVudERhdGE7
CiAgICAgQVNTRVJUKGNsaWVudERhdGEpOwogICAgIHN0YXRpY19jYXN0PFdlYkNvcmVKU0NsaWVu
dERhdGEqPihjbGllbnREYXRhKS0+Zm9yZ2V0V29ybGQodGhpcyk7CiAKQEAgLTYwLDkgKzYwLDkg
QEAgdm9pZCBET01XcmFwcGVyV29ybGQ6OmNsZWFyV3JhcHBlcnMoKQogICAgICAgICAoKm1fc2Ny
aXB0Q29udHJvbGxlcnNXaXRoV2luZG93U2hlbGxzLmJlZ2luKCkpLT5kZXN0cm95V2luZG93U2hl
bGwodGhpcyk7CiB9CiAKLURPTVdyYXBwZXJXb3JsZCogbm9ybWFsV29ybGQoSlNDOjpKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCitET01XcmFwcGVyV29ybGQqIG5vcm1hbFdvcmxkKEpTQzo6Vk0m
IHZtKQogewotICAgIEpTR2xvYmFsRGF0YTo6Q2xpZW50RGF0YSogY2xpZW50RGF0YSA9IGdsb2Jh
bERhdGEuY2xpZW50RGF0YTsKKyAgICBWTTo6Q2xpZW50RGF0YSogY2xpZW50RGF0YSA9IHZtLmNs
aWVudERhdGE7CiAgICAgQVNTRVJUKGNsaWVudERhdGEpOwogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXZWJDb3JlSlNDbGllbnREYXRhKj4oY2xpZW50RGF0YSktPm5vcm1hbFdvcmxkKCk7CiB9CkBA
IC03MCw3ICs3MCw3IEBAIERPTVdyYXBwZXJXb3JsZCogbm9ybWFsV29ybGQoSlNDOjpKU0dsb2IK
IERPTVdyYXBwZXJXb3JsZCogbWFpblRocmVhZE5vcm1hbFdvcmxkKCkKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotICAgIHN0YXRpYyBET01XcmFwcGVyV29ybGQqIGNhY2hlZE5vcm1h
bFdvcmxkID0gbm9ybWFsV29ybGQoKkpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7
CisgICAgc3RhdGljIERPTVdyYXBwZXJXb3JsZCogY2FjaGVkTm9ybWFsV29ybGQgPSBub3JtYWxX
b3JsZCgqSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwogICAgIHJldHVybiBjYWNoZWROb3JtYWxX
b3JsZDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldv
cmxkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBl
cldvcmxkLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0RPTVdyYXBwZXJXb3JsZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw5ICszNyw5IEBAIHR5cGVk
ZWYgSlNDOjpXZWFrR0NNYXA8U3RyaW5nSW1wbCosIEpTQzoKIAogY2xhc3MgRE9NV3JhcHBlcldv
cmxkIDogcHVibGljIFJlZkNvdW50ZWQ8RE9NV3JhcHBlcldvcmxkPiB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiBjcmVhdGUoSlNDOjpKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIGJvb2wgaXNOb3JtYWwgPSBmYWxzZSkKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxET01XcmFwcGVyV29ybGQ+IGNyZWF0ZShKU0M6OlZNKiB2bSwgYm9vbCBpc05vcm1hbCA9
IGZhbHNlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBET01XcmFwcGVyV29y
bGQoZ2xvYmFsRGF0YSwgaXNOb3JtYWwpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBE
T01XcmFwcGVyV29ybGQodm0sIGlzTm9ybWFsKSk7CiAgICAgfQogICAgIH5ET01XcmFwcGVyV29y
bGQoKTsKIApAQCAtNTYsMTggKzU2LDE4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNOb3JtYWwo
KSBjb25zdCB7IHJldHVybiBtX2lzTm9ybWFsOyB9CiAKLSAgICBKU0M6OkpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsRGF0YTsgfQorICAgIEpTQzo6Vk0q
IHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgRE9NV3JhcHBl
cldvcmxkKEpTQzo6SlNHbG9iYWxEYXRhKiwgYm9vbCBpc05vcm1hbCk7CisgICAgRE9NV3JhcHBl
cldvcmxkKEpTQzo6Vk0qLCBib29sIGlzTm9ybWFsKTsKIAogcHJpdmF0ZToKLSAgICBKU0M6OkpT
R2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworICAgIEpTQzo6Vk0qIG1fdm07CiAgICAgSGFzaFNl
dDxTY3JpcHRDb250cm9sbGVyKj4gbV9zY3JpcHRDb250cm9sbGVyc1dpdGhXaW5kb3dTaGVsbHM7
CiAgICAgYm9vbCBtX2lzTm9ybWFsOwogfTsKIAotRE9NV3JhcHBlcldvcmxkKiBub3JtYWxXb3Js
ZChKU0M6OkpTR2xvYmFsRGF0YSYpOworRE9NV3JhcHBlcldvcmxkKiBub3JtYWxXb3JsZChKU0M6
OlZNJik7CiBET01XcmFwcGVyV29ybGQqIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpOwogaW5saW5l
IERPTVdyYXBwZXJXb3JsZCogZGVidWdnZXJXb3JsZCgpIHsgcmV0dXJuIG1haW5UaHJlYWROb3Jt
YWxXb3JsZCgpOyB9CiBpbmxpbmUgRE9NV3JhcHBlcldvcmxkKiBwbHVnaW5Xb3JsZCgpIHsgcmV0
dXJuIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDcgKzI3LDcgQEAKICNpbmNsdWRlICJHQ0NvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIkpTRE9N
V2luZG93LmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbERhdGEuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL1ZNLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KICNpbmNsdWRlIDxoZWFw
L0hlYXAuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC0zOCw4ICszOCw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIHZvaWQgY29sbGVjdCh2b2lkKikKIHsKLSAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwot
ICAgIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5jb2xsZWN0QWxsR2Fy
YmFnZSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsK
KyAgICBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5jb2xsZWN0QWxsR2FyYmFnZSgpOwog
fQogCiBHQ0NvbnRyb2xsZXImIGdjQ29udHJvbGxlcigpCkBAIC02Myw4ICs2Myw4IEBAIHZvaWQg
R0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdFNvb24oKQogICAgIC8vIGRvd24gaW50byBXVEYg
c28gdGhhdCBtb3JlIHBsYXRmb3JtcyBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgaXQsIHdlIHdpbGwg
YmUgCiAgICAgLy8gYWJsZSB0byB1c2UgcmVwb3J0QWJhbmRvbmVkT2JqZWN0R3JhcGggb24gbW9y
ZSBwbGF0Zm9ybXMuCiAjaWYgVVNFKENGKSB8fCBQTEFURk9STShCTEFDS0JFUlJZKSB8fCBQTEFU
Rk9STShRVCkKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwotICAgIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5y
ZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9N
V2luZG93Ojpjb21tb25WTSgpKTsKKyAgICBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5y
ZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpOwogI2Vsc2UKICAgICBpZiAoIW1fR0NUaW1lci5p
c0FjdGl2ZSgpKQogICAgICAgICBtX0dDVGltZXIuc3RhcnRPbmVTaG90KDApOwpAQCAtODAsOSAr
ODAsOSBAQCB2b2lkIEdDQ29udHJvbGxlcjo6Z2NUaW1lckZpcmVkKFRpbWVyPEdDCiAKIHZvaWQg
R0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE5vdygpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxv
Y2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKLSAgICBpZiAoIUpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5pc0J1c3koKSkKLSAgICAgICAgSlNET01X
aW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOworICAgIGlmICgh
SlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhlYXAuaXNCdXN5KCkpCisgICAgICAgIEpTRE9NV2lu
ZG93Ojpjb21tb25WTSgpLT5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7CiB9CiAKIHZvaWQgR0ND
b250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkRm9yRGVidWdnaW5nKGJv
b2wgd2FpdFVudGlsRG9uZSkKQEAgLTk5LDEzICs5OSwxMyBAQCB2b2lkIEdDQ29udHJvbGxlcjo6
Z2FyYmFnZUNvbGxlY3RPbkFsdGVyCiAKIHZvaWQgR0NDb250cm9sbGVyOjpzZXRKYXZhU2NyaXB0
R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChib29sIGVuYWJsZSkKIHsKLSAgICBKU0RPTVdp
bmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuc2V0R2FyYmFnZUNvbGxlY3Rpb25UaW1l
ckVuYWJsZWQoZW5hYmxlKTsKKyAgICBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5zZXRH
YXJiYWdlQ29sbGVjdGlvblRpbWVyRW5hYmxlZChlbmFibGUpOwogfQogCiB2b2lkIEdDQ29udHJv
bGxlcjo6ZGlzY2FyZEFsbENvbXBpbGVkQ29kZSgpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2so
SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKLSAgICBKU0RPTVdpbmRvdzo6Y29t
bW9uSlNHbG9iYWxEYXRhKCktPmRpc2NhcmRBbGxDb2RlKCk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOworICAgIEpTRE9NV2luZG93Ojpjb21tb25WTSgp
LT5kaXNjYXJkQWxsQ29kZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNw
cAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmlu
ZGluZ1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgc3RhdGlj
IGJvb2wgZ2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZQogICAgIH0KICAgICBpZiAoIW9iamVj
dC5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgSWRlbnRpZmllciBpZGVu
dGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCksIGtleVBhdGhFbGVtZW50LnV0ZjgoKS5kYXRhKCkp
OworICAgIElkZW50aWZpZXIgaWRlbnRpZmllcigmZXhlYy0+dm0oKSwga2V5UGF0aEVsZW1lbnQu
dXRmOCgpLmRhdGEoKSk7CiAgICAgaWYgKCFhc09iamVjdChvYmplY3QpLT5oYXNQcm9wZXJ0eShl
eGVjLCBpZGVudGlmaWVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJlc3VsdCA9IGFz
T2JqZWN0KG9iamVjdCktPmdldChleGVjLCBpZGVudGlmaWVyKTsKQEAgLTY3LDggKzY3LDggQEAg
c3RhdGljIGJvb2wgc2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZQogewogICAgIGlmICghY2Fu
U2V0KG9iamVjdCwga2V5UGF0aEVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
SWRlbnRpZmllciBpZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCksIGtleVBhdGhFbGVtZW50
LnV0ZjgoKS5kYXRhKCkpOwotICAgIGFzT2JqZWN0KG9iamVjdCktPnB1dERpcmVjdChleGVjLT5n
bG9iYWxEYXRhKCksIGlkZW50aWZpZXIsIGpzVmFsdWUpOworICAgIElkZW50aWZpZXIgaWRlbnRp
ZmllcigmZXhlYy0+dm0oKSwga2V5UGF0aEVsZW1lbnQudXRmOCgpLmRhdGEoKSk7CisgICAgYXNP
YmplY3Qob2JqZWN0KS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50aWZpZXIsIGpzVmFsdWUp
OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0zMDAsNyArMzAwLDcgQEAgU2NyaXB0VmFsdWUg
ZGVzZXJpYWxpemVJREJWYWx1ZShET01SZXF1ZQogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IHBycFZhbHVlOwogICAgIGlmIChzZXJpYWxpemVkVmFs
dWUpCiAgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoZXhlYywgc2VyaWFs
aXplZFZhbHVlLmdldCgpLCBOb25UaHJvd2luZyk7Ci0gICAgcmV0dXJuIFNjcmlwdFZhbHVlKGV4
ZWMtPmdsb2JhbERhdGEoKSwganNOdWxsKCkpOworICAgIHJldHVybiBTY3JpcHRWYWx1ZShleGVj
LT52bSgpLCBqc051bGwoKSk7CiB9CiAKIFNjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWVC
dWZmZXIoRE9NUmVxdWVzdFN0YXRlKiByZXF1ZXN0U3RhdGUsIFBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBwcnBCdWZmZXIpCkBAIC0zMTQsMTMgKzMxNCwxMyBAQCBTY3JpcHRWYWx1ZSBkZXNlcmlh
bGl6ZUlEQlZhbHVlQnVmZmVyKERPCiAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdp
cmVCeXRlcyh2YWx1ZSk7CiAgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUo
ZXhlYywgc2VyaWFsaXplZFZhbHVlLmdldCgpLCBOb25UaHJvd2luZyk7CiAgICAgfQotICAgIHJl
dHVybiBTY3JpcHRWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIGpzTnVsbCgpKTsKKyAgICByZXR1
cm4gU2NyaXB0VmFsdWUoZXhlYy0+dm0oKSwganNOdWxsKCkpOwogfQogCiBTY3JpcHRWYWx1ZSBp
ZGJLZXlUb1NjcmlwdFZhbHVlKERPTVJlcXVlc3RTdGF0ZSogcmVxdWVzdFN0YXRlLCBQYXNzUmVm
UHRyPElEQktleT4ga2V5KQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJlcXVlc3RTdGF0ZS0+
ZXhlYygpOwotICAgIHJldHVybiBTY3JpcHRWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIGlkYktl
eVRvSlNWYWx1ZShleGVjLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpLCBrZXkuZ2V0KCkpKTsKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUoZXhl
Yy0+dm0oKSwgaWRiS2V5VG9KU1ZhbHVlKGV4ZWMsIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIGtleS5nZXQoKSkpOwogfQogCiBQYXNzUmVm
UHRyPElEQktleT4gc2NyaXB0VmFsdWVUb0lEQktleShET01SZXF1ZXN0U3RhdGUqIHJlcXVlc3RT
dGF0ZSwgY29uc3QgU2NyaXB0VmFsdWUmIHNjcmlwdFZhbHVlKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw4ICs0OCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZWxldGVEYXRhKHZv
aWQqKTsKIAogICAgIEpTQ2FsbGJhY2tEYXRhKEpTQzo6SlNPYmplY3QqIGNhbGxiYWNrLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgICAgICA6IG1fY2FsbGJhY2soZ2xvYmFs
T2JqZWN0LT5nbG9iYWxEYXRhKCksIGNhbGxiYWNrKQotICAgICAgICAsIG1fZ2xvYmFsT2JqZWN0
KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QpCisgICAgICAgIDogbV9j
YWxsYmFjayhnbG9iYWxPYmplY3QtPnZtKCksIGNhbGxiYWNrKQorICAgICAgICAsIG1fZ2xvYmFs
T2JqZWN0KGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0KQogI2lmbmRlZiBOREVCVUcK
ICAgICAgICAgLCBtX3RocmVhZChjdXJyZW50VGhyZWFkKCkpCiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxT
dGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBib29sIEpTU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjazo6aGFuZGxlCiAKICAgICBSZWZQdHI8SlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNr
PiBwcm90ZWN0KHRoaXMpOwogCi0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2so
bV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+dm0oKSk7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBt
X2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1lbnRC
dWZmZXIgYXJnczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBh
dGhOU1Jlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsOCArNTUsOCBAQCBQYXNzUmVmUHRyPEpTQ3VzdG9tWFBhdGhOU1Jlc29s
dmVyPiBKU0N1CiB9CiAKIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpKU0N1c3RvbVhQYXRoTlNS
ZXNvbHZlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjdXN0b21SZXNvbHZlciwgSlNET01X
aW5kb3cqIGdsb2JhbE9iamVjdCkKLSAgICA6IG1fY3VzdG9tUmVzb2x2ZXIoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBjdXN0b21SZXNvbHZlcikKLSAgICAsIG1fZ2xvYmFsT2JqZWN0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZ2xvYmFsT2JqZWN0KQorICAgIDogbV9jdXN0b21SZXNvbHZlcihleGVjLT52bSgp
LCBjdXN0b21SZXNvbHZlcikKKyAgICAsIG1fZ2xvYmFsT2JqZWN0KGV4ZWMtPnZtKCksIGdsb2Jh
bE9iamVjdCkKIHsKIH0KIApAQCAtNjgsNyArNjgsNyBAQCBTdHJpbmcgSlNDdXN0b21YUGF0aE5T
UmVzb2x2ZXI6Omxvb2t1cE5hCiB7CiAgICAgQVNTRVJUKG1fY3VzdG9tUmVzb2x2ZXIpOwogCi0g
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEo
KSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsK
IAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAg
ICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcu
Y3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw5ICs0Niw5IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIEFTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKERPTUNvbnN0cnVjdG9yT2Jq
ZWN0KTsKIEFTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKERPTUNvbnN0cnVjdG9yV2l0aERv
Y3VtZW50KTsKIAotY29uc3QgSlNDOjpIYXNoVGFibGUqIGdldEhhc2hUYWJsZUZvckdsb2JhbERh
dGEoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBKU0M6Okhhc2hUYWJsZSogc3RhdGlj
VGFibGUpCitjb25zdCBKU0M6Okhhc2hUYWJsZSogZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShW
TSYgdm0sIGNvbnN0IEpTQzo6SGFzaFRhYmxlKiBzdGF0aWNUYWJsZSkKIHsKLSAgICByZXR1cm4g
RE9NT2JqZWN0SGFzaFRhYmxlTWFwOjptYXBGb3IoZ2xvYmFsRGF0YSkuZ2V0KHN0YXRpY1RhYmxl
KTsKKyAgICByZXR1cm4gRE9NT2JqZWN0SGFzaFRhYmxlTWFwOjptYXBGb3Iodm0pLmdldChzdGF0
aWNUYWJsZSk7CiB9CiAKIEpTVmFsdWUganNTdHJpbmdPck51bGwoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBTdHJpbmcmIHMpCkBAIC0xNTAsNyArMTUwLDcgQEAgdm9pZCByZXBvcnRFeGNlcHRpb24o
RXhlY1N0YXRlKiBleGVjLCBKUwogICAgIGludCBsaW5lTnVtYmVyID0gMDsKICAgICBTdHJpbmcg
ZXhjZXB0aW9uU291cmNlVVJMOwogCi0gICAgUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+IHN0
YWNrVHJhY2UgPSBleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uU3RhY2s7CisgICAgUmVmQ291
bnRlZEFycmF5PFN0YWNrRnJhbWU+IHN0YWNrVHJhY2UgPSBleGVjLT52bSgpLmV4Y2VwdGlvblN0
YWNrOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgZXhlYy0+Y2xlYXJTdXBwbGVt
ZW50YXJ5RXhjZXB0aW9uSW5mbygpOwogCkBAIC0yNjgsNyArMjY4LDcgQEAgU3RydWN0dXJlKiBj
YWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2JhbAogewogICAgIEpTRE9NU3RydWN0dXJlTWFwJiBz
dHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmVzKCk7CiAgICAgQVNTRVJUKCFzdHJ1
Y3R1cmVzLmNvbnRhaW5zKGNsYXNzSW5mbykpOwotICAgIHJldHVybiBzdHJ1Y3R1cmVzLnNldChj
bGFzc0luZm8sIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0
YSgpLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkpLml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKKyAg
ICByZXR1cm4gc3RydWN0dXJlcy5zZXQoY2xhc3NJbmZvLCBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PihnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKSkuaXRlcmF0b3It
PnZhbHVlLmdldCgpOwogfQogCiBzdGF0aWMgY29uc3QgaW50MzJfdCBrTWF4SW50MzIgPSAweDdm
ZmZmZmZmOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJ
KHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw5ICs2Myw5IEBAIGNsYXNzIERPTVN0cmluZ0xp
c3Q7CiAgICAgY2xhc3MgRE9NQ29uc3RydWN0b3JPYmplY3QgOiBwdWJsaWMgSlNET01XcmFwcGVy
IHsKICAgICAgICAgdHlwZWRlZiBKU0RPTVdyYXBwZXIgQmFzZTsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKKyAgICAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKQEAgLTk0LDcg
Kzk0LDcgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKIAogICAgICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKTsKKyAg
ICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CiAgICAg
ICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlz
RG9jdW1lbnQoKSk7CiAgICAgICAgIH0KICAgICB9OwpAQCAtMTE0LDcgKzExNCw3IEBAIGNsYXNz
IERPTVN0cmluZ0xpc3Q7CiAgICAgewogICAgICAgICBpZiAoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGdldENhY2hlZERPTVN0cnVjdHVyZShnbG9iYWxPYmplY3QsICZXcmFwcGVyQ2xhc3M6
OnNfaW5mbykpCiAgICAgICAgICAgICByZXR1cm4gc3RydWN0dXJlOwotICAgICAgICByZXR1cm4g
Y2FjaGVET01TdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNzOjpjcmVh
dGVQcm90b3R5cGUoZXhlYywgZ2xvYmFsT2JqZWN0KSksICZXcmFwcGVyQ2xhc3M6OnNfaW5mbyk7
CisgICAgICAgIHJldHVybiBjYWNoZURPTVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIFdyYXBwZXJD
bGFzczo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdCwgV3JhcHBlckNs
YXNzOjpjcmVhdGVQcm90b3R5cGUoZXhlYywgZ2xvYmFsT2JqZWN0KSksICZXcmFwcGVyQ2xhc3M6
OnNfaW5mbyk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgV3JhcHBlckNsYXNzPiBpbmxp
bmUgSlNDOjpTdHJ1Y3R1cmUqIGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMpCkBAIC0xNDMsNyArMTQzLDcgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKICAgICB7
CiAgICAgICAgIGlmICghd29ybGQtPmlzTm9ybWFsKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGRvbU9iamVjdC0+c2V0V3JhcHBlcigqd29ybGQtPmdsb2JhbERhdGEoKSwg
d3JhcHBlciwgd3JhcHBlck93bmVyLCBjb250ZXh0KTsKKyAgICAgICAgZG9tT2JqZWN0LT5zZXRX
cmFwcGVyKCp3b3JsZC0+dm0oKSwgd3JhcHBlciwgd3JhcHBlck93bmVyLCBjb250ZXh0KTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yMTgsNyArMjE4LDcgQEAgY2xhc3MgRE9N
U3RyaW5nTGlzdDsKICAgICAgICAgcmV0dXJuIGluZGV4ID49IGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA/IEpTQzo6SlNWYWx1ZSgpIDogZXhlYy0+YXJndW1lbnQoaW5kZXgpOwogICAgIH0KIAotICAg
IGNvbnN0IEpTQzo6SGFzaFRhYmxlKiBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKEpTQzo6SlNH
bG9iYWxEYXRhJiwgY29uc3QgSlNDOjpIYXNoVGFibGUqIHN0YXRpY1RhYmxlKTsKKyAgICBjb25z
dCBKU0M6Okhhc2hUYWJsZSogZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShKU0M6OlZNJiwgY29u
c3QgSlNDOjpIYXNoVGFibGUqIHN0YXRpY1RhYmxlKTsKIAogICAgIHZvaWQgcmVwb3J0RXhjZXB0
aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0
KiA9IDApOwogICAgIHZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSop
OwpAQCAtNDg2LDggKzQ4Niw4IEBAIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiAgICAgICAgIGlmIChz
dHJpbmdJbXBsLT5sZW5ndGgoKSA9PSAxKSB7CiAgICAgICAgICAgICBVQ2hhciBzaW5nbGVDaGFy
YWN0ZXIgPSAoKnN0cmluZ0ltcGwpWzB1XTsKICAgICAgICAgICAgIGlmIChzaW5nbGVDaGFyYWN0
ZXIgPD0gSlNDOjptYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpIHsKLSAgICAgICAgICAgICAgICBK
U0M6OkpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0
ZXJTdHJpbmcoZ2xvYmFsRGF0YSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc2luZ2xlQ2hh
cmFjdGVyKSk7CisgICAgICAgICAgICAgICAgSlNDOjpWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJp
bmcodm0sIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHNpbmdsZUNoYXJhY3RlcikpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDIsOCArNDIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNvbnN0IENsYXNzSW5m
byBKU0RPTUdsb2JhbE9iamVjdDo6c19pbmZvID0geyAiRE9NR2xvYmFsT2JqZWN0IiwgJkpTR2xv
YmFsT2JqZWN0OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNET01HbG9iYWxP
YmplY3QpIH07CiAKLUpTRE9NR2xvYmFsT2JqZWN0OjpKU0RPTUdsb2JhbE9iamVjdChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPERPTVdy
YXBwZXJXb3JsZD4gd29ybGQsIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiBnbG9iYWxP
YmplY3RNZXRob2RUYWJsZSkKLSAgICA6IEpTR2xvYmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVj
dHVyZSwgZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCitKU0RPTUdsb2JhbE9iamVjdDo6SlNET01H
bG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxET01X
cmFwcGVyV29ybGQ+IHdvcmxkLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogZ2xvYmFs
T2JqZWN0TWV0aG9kVGFibGUpCisgICAgOiBKU0dsb2JhbE9iamVjdCh2bSwgc3RydWN0dXJlLCBn
bG9iYWxPYmplY3RNZXRob2RUYWJsZSkKICAgICAsIG1fY3VycmVudEV2ZW50KDApCiAgICAgLCBt
X3dvcmxkKHdvcmxkKQogewpAQCAtNTQsMTUgKzU0LDE1IEBAIHZvaWQgSlNET01HbG9iYWxPYmpl
Y3Q6OmRlc3Ryb3koSlNDZWxsKiAKICAgICBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGNlbGwpLT5KU0RPTUdsb2JhbE9iamVjdDo6fkpTRE9NR2xvYmFsT2JqZWN0KCk7CiB9CiAKLXZv
aWQgSlNET01HbG9iYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKK3ZvaWQgSlNET01HbG9iYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsK
LSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIH0KIAotdm9pZCBK
U0RPTUdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU09iamVjdCogdGhpc1ZhbHVlKQordm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBKU09iamVjdCogdGhpc1ZhbHVlKQogewotICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKGdsb2JhbERhdGEsIHRoaXNWYWx1ZSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0sIHRoaXNWYWx1ZSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCShy
ZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2Jh
bE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMCArNDgsMTAgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIHByb3RlY3RlZDoKICAgICAgICAgc3RydWN0IEpTRE9NR2xvYmFsT2JqZWN0
RGF0YTsKIAotICAgICAgICBKU0RPTUdsb2JhbE9iamVjdChKU0M6OkpTR2xvYmFsRGF0YSYsIEpT
Qzo6U3RydWN0dXJlKiwgUGFzc1JlZlB0cjxET01XcmFwcGVyV29ybGQ+LCBjb25zdCBKU0M6Okds
b2JhbE9iamVjdE1ldGhvZFRhYmxlKiA9IDApOworICAgICAgICBKU0RPTUdsb2JhbE9iamVjdChK
U0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4sIGNv
bnN0IEpTQzo6R2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqID0gMCk7CiAgICAgICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OkpTR2xvYmFsRGF0YSYpOwotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6SlNH
bG9iYWxEYXRhJiwgSlNDOjpKU09iamVjdCopOworICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTQzo6Vk0mKTsKKyAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNDOjpK
U09iamVjdCopOwogCiAgICAgcHVibGljOgogICAgICAgICBKU0RPTVN0cnVjdHVyZU1hcCYgc3Ry
dWN0dXJlcygpIHsgcmV0dXJuIG1fc3RydWN0dXJlczsgfQpAQCAtNzEsOSArNzEsOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgc3RhdGljIFdFQktJVF9FWFBPUlREQVRBIGNvbnN0
IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAotICAgICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIDAsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Okdsb2JhbE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgMCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6R2xvYmFsT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgpA
QCAtODksMTAgKzg5LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB7CiAgICAgICAgIGlm
IChKU0M6OkpTT2JqZWN0KiBjb25zdHJ1Y3RvciA9IGNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihnbG9iYWxPYmplY3QpLT5jb25zdHJ1Y3RvcnMoKS5nZXQoJkNvbnN0cnVjdG9yQ2xhc3M6
OnNfaW5mbykuZ2V0KCkpCiAgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7Ci0gICAgICAg
IEpTQzo6SlNPYmplY3QqIGNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3JDbGFzczo6Y3JlYXRlKGV4
ZWMsIENvbnN0cnVjdG9yQ2xhc3M6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCks
IGNvbnN0X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLCBnbG9iYWxPYmpl
Y3QtPm9iamVjdFByb3RvdHlwZSgpKSwgY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGds
b2JhbE9iamVjdCkpOworICAgICAgICBKU0M6OkpTT2JqZWN0KiBjb25zdHJ1Y3RvciA9IENvbnN0
cnVjdG9yQ2xhc3M6OmNyZWF0ZShleGVjLCBDb25zdHJ1Y3RvckNsYXNzOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+dm0oKSwgY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVj
dCksIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpLCBjb25zdF9jYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIEFTU0VSVCghY29uc3RfY2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCktPmNvbnN0cnVjdG9ycygpLmNvbnRhaW5z
KCZDb25zdHJ1Y3RvckNsYXNzOjpzX2luZm8pKTsKICAgICAgICAgSlNDOjpXcml0ZUJhcnJpZXI8
SlNDOjpKU09iamVjdD4gdGVtcDsKLSAgICAgICAgY29uc3RfY2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGdsb2JhbE9iamVjdCktPmNvbnN0cnVjdG9ycygpLmFkZCgmQ29uc3RydWN0b3JDbGFzczo6
c19pbmZvLCB0ZW1wKS5pdGVyYXRvci0+dmFsdWUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xv
YmFsT2JqZWN0LCBjb25zdHJ1Y3Rvcik7CisgICAgICAgIGNvbnN0X2Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihnbG9iYWxPYmplY3QpLT5jb25zdHJ1Y3RvcnMoKS5hZGQoJkNvbnN0cnVjdG9yQ2xh
c3M6OnNfaW5mbywgdGVtcCkuaXRlcmF0b3ItPnZhbHVlLnNldChleGVjLT52bSgpLCBnbG9iYWxP
YmplY3QsIGNvbnN0cnVjdG9yKTsKICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOwogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2Uu
Y3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywxNiArNTMsMTYgQEAgY29uc3Qg
Q2xhc3NJbmZvIEpTRE9NV2luZG93QmFzZTo6c19pbmZvIAogCiBjb25zdCBHbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSBKU0RPTVdpbmRvd0Jhc2U6OnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPSB7
ICZzaG91bGRBbGxvd0FjY2Vzc0Zyb20sICZzdXBwb3J0c1Byb2ZpbGluZywgJnN1cHBvcnRzUmlj
aFNvdXJjZUluZm8sICZzaG91bGRJbnRlcnJ1cHRTY3JpcHQsICZqYXZhU2NyaXB0RXhwZXJpbWVu
dHNFbmFibGVkIH07CiAKLUpTRE9NV2luZG93QmFzZTo6SlNET01XaW5kb3dCYXNlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8RE9NV2lu
ZG93PiB3aW5kb3csIEpTRE9NV2luZG93U2hlbGwqIHNoZWxsKQotICAgIDogSlNET01HbG9iYWxP
YmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBzaGVsbC0+d29ybGQoKSwgJnNfZ2xvYmFsT2Jq
ZWN0TWV0aG9kVGFibGUpCitKU0RPTVdpbmRvd0Jhc2U6OkpTRE9NV2luZG93QmFzZShWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPERPTVdpbmRvdz4gd2luZG93LCBKU0RP
TVdpbmRvd1NoZWxsKiBzaGVsbCkKKyAgICA6IEpTRE9NR2xvYmFsT2JqZWN0KHZtLCBzdHJ1Y3R1
cmUsIHNoZWxsLT53b3JsZCgpLCAmc19nbG9iYWxPYmplY3RNZXRob2RUYWJsZSkKICAgICAsIG1f
aW1wbCh3aW5kb3cpCiAgICAgLCBtX3NoZWxsKHNoZWxsKQogewogfQogCi12b2lkIEpTRE9NV2lu
ZG93QmFzZTo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0RPTVdp
bmRvd1NoZWxsKiBzaGVsbCkKK3ZvaWQgSlNET01XaW5kb3dCYXNlOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIEpTRE9NV2luZG93U2hlbGwqIHNoZWxsKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEsIHNoZWxsKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgc2hl
bGwpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiAKICAgICBHbG9iYWxQcm9wZXJ0
eUluZm8gc3RhdGljR2xvYmFsc1tdID0gewpAQCAtODIsNyArODIsNyBAQCB2b2lkIEpTRE9NV2lu
ZG93QmFzZTo6dXBkYXRlRG9jdW1lbnQoKQogewogICAgIEFTU0VSVChtX2ltcGwtPmRvY3VtZW50
KCkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbEV4ZWMoKTsKLSAgICBzeW1ib2xUYWJs
ZVB1dFdpdGhBdHRyaWJ1dGVzKHRoaXMsIGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihl
eGVjLCAiZG9jdW1lbnQiKSwgdG9KUyhleGVjLCB0aGlzLCBtX2ltcGwtPmRvY3VtZW50KCkpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMo
dGhpcywgZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiZG9jdW1lbnQiKSwgdG9KUyhleGVj
LCB0aGlzLCBtX2ltcGwtPmRvY3VtZW50KCkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogfQog
CiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBKU0RPTVdpbmRvd0Jhc2U6OnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSBjb25zdApAQCAtMTc3LDIxICsxNzcsMjEgQEAgSlNET01XaW5kb3dTaGVsbCog
SlNET01XaW5kb3dCYXNlOjpzaGVsbAogICAgIHJldHVybiBtX3NoZWxsOwogfQogCi1KU0dsb2Jh
bERhdGEqIEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkKK1ZNKiBKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vblZNKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0g
ICAgc3RhdGljIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxE
YXRhKSB7CisgICAgc3RhdGljIFZNKiB2bSA9IDA7CisgICAgaWYgKCF2bSkgewogICAgICAgICBT
Y3JpcHRDb250cm9sbGVyOjppbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0gICAgICAgIGdsb2JhbERh
dGEgPSBKU0dsb2JhbERhdGE6OmNyZWF0ZUxlYWtlZChMYXJnZUhlYXApLmxlYWtSZWYoKTsKKyAg
ICAgICAgdm0gPSBWTTo6Y3JlYXRlTGVha2VkKExhcmdlSGVhcCkubGVha1JlZigpOwogI2lmbmRl
ZiBOREVCVUcKLSAgICAgICAgZ2xvYmFsRGF0YS0+ZXhjbHVzaXZlVGhyZWFkID0gY3VycmVudFRo
cmVhZCgpOworICAgICAgICB2bS0+ZXhjbHVzaXZlVGhyZWFkID0gY3VycmVudFRocmVhZCgpOwog
I2VuZGlmCi0gICAgICAgIGluaXROb3JtYWxXb3JsZENsaWVudERhdGEoZ2xvYmFsRGF0YSk7Cisg
ICAgICAgIGluaXROb3JtYWxXb3JsZENsaWVudERhdGEodm0pOwogICAgIH0KIAotICAgIHJldHVy
biBnbG9iYWxEYXRhOworICAgIHJldHVybiB2bTsKIH0KIAogLy8gSlNET01HbG9iYWxPYmplY3Qq
IGlzIGlnbm9yZWQsIGFjY2Vzc2luZyBhIHdpbmRvdyBpbiBhbnkgY29udGV4dCB3aWxsCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAkocmV2aXNp
b24gMTQ4NjgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIGNsYXNzIEpTRE9NV2luZG93QmFzZSA6IHB1YmxpYyBKU0RPTUdsb2JhbE9iamVjdCB7CiAg
ICAgICAgIHR5cGVkZWYgSlNET01HbG9iYWxPYmplY3QgQmFzZTsKICAgICBwcm90ZWN0ZWQ6Ci0g
ICAgICAgIEpTRE9NV2luZG93QmFzZShKU0M6OkpTR2xvYmFsRGF0YSYsIEpTQzo6U3RydWN0dXJl
KiwgUGFzc1JlZlB0cjxET01XaW5kb3c+LCBKU0RPTVdpbmRvd1NoZWxsKik7Ci0gICAgICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpKU0dsb2JhbERhdGEmLCBKU0RPTVdpbmRvd1NoZWxsKik7
CisgICAgICAgIEpTRE9NV2luZG93QmFzZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBQYXNz
UmVmUHRyPERPTVdpbmRvdz4sIEpTRE9NV2luZG93U2hlbGwqKTsKKyAgICAgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01XaW5kb3dTaGVsbCopOwogCiAgICAgICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKQEAgLTUzLDkgKzUzLDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAK
LSAgICAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSlNDOjpTdHJ1
Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCAwLCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpHbG9iYWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAg
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIDAsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Okdsb2JhbE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpHbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSBzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlOwpAQCAtNjgsNyArNjgsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgSlNET01XaW5kb3dTaGVsbCogc2hlbGwoKSBjb25z
dDsKIAotICAgICAgICBzdGF0aWMgSlNDOjpKU0dsb2JhbERhdGEqIGNvbW1vbkpTR2xvYmFsRGF0
YSgpOworICAgICAgICBzdGF0aWMgSlNDOjpWTSogY29tbW9uVk0oKTsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIFJlZlB0cjxET01XaW5kb3c+IG1faW1wbDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDE0ODY4
MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDk2LDcgKzQ5Niw3IEBAIHZvaWQgSlNET01XaW5kb3c6OnNldExv
Y2F0aW9uKEV4ZWNTdGF0ZSoKICAgICAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IGFjdGl2
ZUZyYW1lLT5zZXR0aW5ncygpKSB7CiAgICAgICAgICAgICBpZiAoc2V0dGluZ3MtPnVzZXNEYXNo
Ym9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKCkgJiYgIWFjdGl2ZUZyYW1lLT50cmVlKCkt
PnBhcmVudCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxk
QWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVjLCBpbXBsKCkpKQotICAgICAgICAgICAgICAgICAg
ICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJsb2NhdGlv
biIpLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBJ
ZGVudGlmaWVyKGV4ZWMsICJsb2NhdGlvbiIpLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01ODcsMTQgKzU4NywxNCBAQCBpbmxp
bmUgdm9pZCBEaWFsb2dIYW5kbGVyOjpkaWFsb2dDcmVhdGVkCiAgICAgbV9mcmFtZSA9IGRpYWxv
Zy0+ZnJhbWUoKTsKICAgICAvLyBGSVhNRTogVGhpcyBsb29rcyBsaWtlIGEgbGVhayBiZXR3ZWVu
IHRoZSBub3JtYWwgd29ybGQgYW5kIGFuIGlzb2xhdGVkCiAgICAgLy8gICAgICAgIHdvcmxkIGlm
IGRpYWxvZ0FyZ3VtZW50cyBjb21lcyBmcm9tIGFuIGlzb2xhdGVkIHdvcmxkLgotICAgIEpTRE9N
V2luZG93KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NV2luZG93KG1fZnJhbWUuZ2V0KCksIG5vcm1h
bFdvcmxkKG1fZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgSlNET01XaW5kb3cqIGdsb2JhbE9i
amVjdCA9IHRvSlNET01XaW5kb3cobV9mcmFtZS5nZXQoKSwgbm9ybWFsV29ybGQobV9leGVjLT52
bSgpKSk7CiAgICAgaWYgKEpTVmFsdWUgZGlhbG9nQXJndW1lbnRzID0gbV9leGVjLT5hcmd1bWVu
dCgxKSkKLSAgICAgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3QobV9leGVjLT5nbG9iYWxEYXRh
KCksIElkZW50aWZpZXIobV9leGVjLCAiZGlhbG9nQXJndW1lbnRzIiksIGRpYWxvZ0FyZ3VtZW50
cyk7CisgICAgICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KG1fZXhlYy0+dm0oKSwgSWRlbnRp
ZmllcihtX2V4ZWMsICJkaWFsb2dBcmd1bWVudHMiKSwgZGlhbG9nQXJndW1lbnRzKTsKIH0KIAog
aW5saW5lIEpTVmFsdWUgRGlhbG9nSGFuZGxlcjo6cmV0dXJuVmFsdWUoKSBjb25zdAogewotICAg
IEpTRE9NV2luZG93KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NV2luZG93KG1fZnJhbWUuZ2V0KCks
IG5vcm1hbFdvcmxkKG1fZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgSlNET01XaW5kb3cqIGds
b2JhbE9iamVjdCA9IHRvSlNET01XaW5kb3cobV9mcmFtZS5nZXQoKSwgbm9ybWFsV29ybGQobV9l
eGVjLT52bSgpKSk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIElkZW50aWZpZXIgaWRlbnRpZmllcihtX2V4ZWMsICJyZXR1cm5WYWx1
ZSIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dT
aGVsbC5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93U2hlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxNCArNDQsMTQgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogY29uc3QgQ2xhc3NJbmZvIEpTRE9NV2luZG93U2hlbGw6OnNf
aW5mbyA9IHsgIkpTRE9NV2luZG93U2hlbGwiLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTRE9NV2luZG93U2hlbGwpIH07CiAKIEpTRE9NV2luZG93U2hlbGw6OkpT
RE9NV2luZG93U2hlbGwoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIERPTVdyYXBwZXJXb3JsZCogd29y
bGQpCi0gICAgOiBCYXNlKCp3b3JsZC0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpCisgICAgOiBC
YXNlKCp3b3JsZC0+dm0oKSwgc3RydWN0dXJlKQogICAgICwgbV93b3JsZCh3b3JsZCkKIHsKIH0K
IAotdm9pZCBKU0RPTVdpbmRvd1NoZWxsOjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFBhc3NSZWZQdHI8RE9NV2luZG93PiB3aW5kb3cpCit2b2lkIEpTRE9NV2luZG93
U2hlbGw6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUGFzc1JlZlB0cjxET01XaW5kb3c+IHdpbmRv
dykKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKICAgICBz
ZXRXaW5kb3cod2luZG93KTsKIH0KQEAgLTYxLDExICs2MSwxMSBAQCB2b2lkIEpTRE9NV2luZG93
U2hlbGw6OmRlc3Ryb3koSlNDZWxsKiBjCiAgICAgc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dTaGVs
bCo+KGNlbGwpLT5KU0RPTVdpbmRvd1NoZWxsOjp+SlNET01XaW5kb3dTaGVsbCgpOwogfQogCi12
b2lkIEpTRE9NV2luZG93U2hlbGw6OnNldFdpbmRvdyhKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNET01XaW5kb3cqIHdpbmRvdykKK3ZvaWQgSlNET01XaW5kb3dTaGVsbDo6c2V0V2lu
ZG93KEpTQzo6Vk0mIHZtLCBKU0RPTVdpbmRvdyogd2luZG93KQogewogICAgIEFTU0VSVF9BUkco
d2luZG93LCB3aW5kb3cpOwotICAgIHNldFRhcmdldChnbG9iYWxEYXRhLCB3aW5kb3cpOwotICAg
IHN0cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3QoKkpTRE9NV2luZG93Ojpjb21tb25KU0dsb2Jh
bERhdGEoKSwgd2luZG93KTsKKyAgICBzZXRUYXJnZXQodm0sIHdpbmRvdyk7CisgICAgc3RydWN0
dXJlKCktPnNldEdsb2JhbE9iamVjdCgqSlNET01XaW5kb3c6OmNvbW1vblZNKCksIHdpbmRvdyk7
CiAgICAgZ2NDb250cm9sbGVyKCkuZ2FyYmFnZUNvbGxlY3RTb29uKCk7CiB9CiAKQEAgLTc3LDEz
ICs3NywxMyBAQCB2b2lkIEpTRE9NV2luZG93U2hlbGw6OnNldFdpbmRvdyhQYXNzUmVmCiAgICAg
Ly8gRXhwbGljaXRseSBwcm90ZWN0IHRoZSBnbG9iYWwgb2JqZWN0J3MgcHJvdG90eXBlIHNvIGl0
IGlzbid0IGNvbGxlY3RlZAogICAgIC8vIHdoZW4gd2UgYWxsb2NhdGUgdGhlIGdsb2JhbCBvYmpl
Y3QuIChPbmNlIHRoZSBnbG9iYWwgb2JqZWN0IGlzIGZ1bGx5CiAgICAgLy8gY29uc3RydWN0ZWQs
IGl0IGNhbiBtYXJrIGl0cyBvd24gcHJvdG90eXBlLikKLSAgICBTdHJ1Y3R1cmUqIHByb3RvdHlw
ZVN0cnVjdHVyZSA9IEpTRE9NV2luZG93UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoKkpTRE9N
V2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSwgMCwganNOdWxsKCkpOwotICAgIFN0cm9uZzxK
U0RPTVdpbmRvd1Byb3RvdHlwZT4gcHJvdG90eXBlKCpKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9i
YWxEYXRhKCksIEpTRE9NV2luZG93UHJvdG90eXBlOjpjcmVhdGUoKkpTRE9NV2luZG93Ojpjb21t
b25KU0dsb2JhbERhdGEoKSwgMCwgcHJvdG90eXBlU3RydWN0dXJlKSk7CisgICAgU3RydWN0dXJl
KiBwcm90b3R5cGVTdHJ1Y3R1cmUgPSBKU0RPTVdpbmRvd1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0
dXJlKCpKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSwgMCwganNOdWxsKCkpOworICAgIFN0cm9uZzxK
U0RPTVdpbmRvd1Byb3RvdHlwZT4gcHJvdG90eXBlKCpKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSwg
SlNET01XaW5kb3dQcm90b3R5cGU6OmNyZWF0ZSgqSlNET01XaW5kb3c6OmNvbW1vblZNKCksIDAs
IHByb3RvdHlwZVN0cnVjdHVyZSkpOwogCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBKU0RP
TVdpbmRvdzo6Y3JlYXRlU3RydWN0dXJlKCpKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRh
KCksIDAsIHByb3RvdHlwZS5nZXQoKSk7Ci0gICAgSlNET01XaW5kb3cqIGpzRE9NV2luZG93ID0g
SlNET01XaW5kb3c6OmNyZWF0ZSgqSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLCBz
dHJ1Y3R1cmUsIGRvbVdpbmRvdywgdGhpcyk7Ci0gICAgcHJvdG90eXBlLT5zdHJ1Y3R1cmUoKS0+
c2V0R2xvYmFsT2JqZWN0KCpKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCksIGpzRE9N
V2luZG93KTsKLSAgICBzZXRXaW5kb3coKkpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEo
KSwganNET01XaW5kb3cpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSlNET01XaW5kb3c6
OmNyZWF0ZVN0cnVjdHVyZSgqSlNET01XaW5kb3c6OmNvbW1vblZNKCksIDAsIHByb3RvdHlwZS5n
ZXQoKSk7CisgICAgSlNET01XaW5kb3cqIGpzRE9NV2luZG93ID0gSlNET01XaW5kb3c6OmNyZWF0
ZSgqSlNET01XaW5kb3c6OmNvbW1vblZNKCksIHN0cnVjdHVyZSwgZG9tV2luZG93LCB0aGlzKTsK
KyAgICBwcm90b3R5cGUtPnN0cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3QoKkpTRE9NV2luZG93
Ojpjb21tb25WTSgpLCBqc0RPTVdpbmRvdyk7CisgICAgc2V0V2luZG93KCpKU0RPTVdpbmRvdzo6
Y29tbW9uVk0oKSwganNET01XaW5kb3cpOwogICAgIEFTU0VSVChqc0RPTVdpbmRvdy0+Z2xvYmFs
T2JqZWN0KCkgPT0ganNET01XaW5kb3cpOwogICAgIEFTU0VSVChwcm90b3R5cGUtPmdsb2JhbE9i
amVjdCgpID09IGpzRE9NV2luZG93KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93U2hlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaAkod29ya2luZyBjb3B5KQpAQCAt
NDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7CiAKICAgICAgICAgSlNET01XaW5kb3cqIHdpbmRvdygpIGNvbnN0IHsg
cmV0dXJuIEpTQzo6anNDYXN0PEpTRE9NV2luZG93Kj4odGFyZ2V0KCkpOyB9Ci0gICAgICAgIHZv
aWQgc2V0V2luZG93KEpTQzo6SlNHbG9iYWxEYXRhJiwgSlNET01XaW5kb3cqKTsKKyAgICAgICAg
dm9pZCBzZXRXaW5kb3coSlNDOjpWTSYsIEpTRE9NV2luZG93Kik7CiAgICAgICAgIHZvaWQgc2V0
V2luZG93KFBhc3NSZWZQdHI8RE9NV2luZG93Pik7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IEpT
Qzo6Q2xhc3NJbmZvIHNfaW5mbzsKQEAgLTUzLDIyICs1MywyMiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgc3RhdGljIEpTRE9NV2luZG93U2hlbGwqIGNyZWF0ZShQYXNzUmVmUHRy
PERPTVdpbmRvdz4gd2luZG93LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBET01XcmFwcGVy
V29ybGQqIHdvcmxkKSAKICAgICAgICAgewotICAgICAgICAgICAgSlNDOjpIZWFwJiBoZWFwID0g
SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwOworICAgICAgICAgICAgSlND
OjpIZWFwJiBoZWFwID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhlYXA7CiAgICAgICAgICAg
ICBKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNl
bGw8SlNET01XaW5kb3dTaGVsbD4oaGVhcCkpIEpTRE9NV2luZG93U2hlbGwoc3RydWN0dXJlLCB3
b3JsZCk7Ci0gICAgICAgICAgICBzaGVsbC0+ZmluaXNoQ3JlYXRpb24oKndvcmxkLT5nbG9iYWxE
YXRhKCksIHdpbmRvdyk7CisgICAgICAgICAgICBzaGVsbC0+ZmluaXNoQ3JlYXRpb24oKndvcmxk
LT52bSgpLCB3aW5kb3cpOwogICAgICAgICAgICAgcmV0dXJuIHNoZWxsOyAKICAgICAgICAgfQog
Ci0gICAgICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKSAKKyAgICAgICAg
c3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNWYWx1ZSBwcm90b3R5cGUpIAogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCAwLCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8o
SlNDOjpQcm94eVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgMCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJ
bmZvKEpTQzo6UHJveHlUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgICAgICB9
CiAKICAgICAgICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCgpIHsgcmV0dXJuIG1fd29ybGQuZ2V0
KCk7IH0KIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgSlNET01XaW5kb3dTaGVsbChKU0M6OlN0
cnVjdHVyZSosIERPTVdyYXBwZXJXb3JsZCopOwotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTQzo6SlNHbG9iYWxEYXRhJiwgUGFzc1JlZlB0cjxET01XaW5kb3c+KTsKKyAgICAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgUGFzc1JlZlB0cjxET01XaW5kb3c+KTsKIAogICAg
ICAgICBSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiBtX3dvcmxkOwogICAgIH07CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXIuaAkocmV2aXNpb24gMTQ4NjgzKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgSlNET01XcmFw
cGVyKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkgCi0gICAgICAgIDogSlNEZXN0cnVjdGlibGVPYmplY3QoZ2xvYmFsT2JqZWN0LT5n
bG9iYWxEYXRhKCksIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0Rlc3RydWN0aWJsZU9iamVjdChn
bG9iYWxPYmplY3QtPnZtKCksIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRGV2aWNlTW90aW9uRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZlbnRDdXN0b20uY3BwCShyZXZp
c2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RldmljZU1vdGlv
bkV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDE4ICsxMTYsMTggQEAgc3Rh
dGljIFBhc3NSZWZQdHI8RGV2aWNlTW90aW9uRGF0YTo6Um90YQogc3RhdGljIEpTT2JqZWN0KiBj
cmVhdGVBY2NlbGVyYXRpb25PYmplY3QoY29uc3QgRGV2aWNlTW90aW9uRGF0YTo6QWNjZWxlcmF0
aW9uKiBhY2NlbGVyYXRpb24sIEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJ4IiksIGFjY2VsZXJhdGlvbi0+
Y2FuUHJvdmlkZVgoKSA/IGpzTnVtYmVyKGFjY2VsZXJhdGlvbi0+eCgpKSA6IGpzTnVsbCgpKTsK
LSAgICBvYmplY3QtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhl
YywgInkiKSwgYWNjZWxlcmF0aW9uLT5jYW5Qcm92aWRlWSgpID8ganNOdW1iZXIoYWNjZWxlcmF0
aW9uLT55KCkpIDoganNOdWxsKCkpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAieiIpLCBhY2NlbGVyYXRpb24tPmNhblByb3ZpZGVa
KCkgPyBqc051bWJlcihhY2NlbGVyYXRpb24tPnooKSkgOiBqc051bGwoKSk7CisgICAgb2JqZWN0
LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAieCIpLCBhY2NlbGVyYXRp
b24tPmNhblByb3ZpZGVYKCkgPyBqc051bWJlcihhY2NlbGVyYXRpb24tPngoKSkgOiBqc051bGwo
KSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAi
eSIpLCBhY2NlbGVyYXRpb24tPmNhblByb3ZpZGVZKCkgPyBqc051bWJlcihhY2NlbGVyYXRpb24t
PnkoKSkgOiBqc051bGwoKSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRl
bnRpZmllcihleGVjLCAieiIpLCBhY2NlbGVyYXRpb24tPmNhblByb3ZpZGVaKCkgPyBqc051bWJl
cihhY2NlbGVyYXRpb24tPnooKSkgOiBqc051bGwoKSk7CiAgICAgcmV0dXJuIG9iamVjdDsKIH0K
IAogc3RhdGljIEpTT2JqZWN0KiBjcmVhdGVSb3RhdGlvblJhdGVPYmplY3QoY29uc3QgRGV2aWNl
TW90aW9uRGF0YTo6Um90YXRpb25SYXRlKiByb3RhdGlvblJhdGUsIEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBKU09iamVjdCogb2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0g
ICAgb2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMs
ICJhbHBoYSIpLCByb3RhdGlvblJhdGUtPmNhblByb3ZpZGVBbHBoYSgpID8ganNOdW1iZXIocm90
YXRpb25SYXRlLT5hbHBoYSgpKSA6IGpzTnVsbCgpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdChl
eGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgImJldGEiKSwgIHJvdGF0aW9uUmF0
ZS0+Y2FuUHJvdmlkZUJldGEoKSAgPyBqc051bWJlcihyb3RhdGlvblJhdGUtPmJldGEoKSkgIDog
anNOdWxsKCkpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRl
bnRpZmllcihleGVjLCAiZ2FtbWEiKSwgcm90YXRpb25SYXRlLT5jYW5Qcm92aWRlR2FtbWEoKSA/
IGpzTnVtYmVyKHJvdGF0aW9uUmF0ZS0+Z2FtbWEoKSkgOiBqc051bGwoKSk7CisgICAgb2JqZWN0
LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiYWxwaGEiKSwgcm90YXRp
b25SYXRlLT5jYW5Qcm92aWRlQWxwaGEoKSA/IGpzTnVtYmVyKHJvdGF0aW9uUmF0ZS0+YWxwaGEo
KSkgOiBqc051bGwoKSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRp
ZmllcihleGVjLCAiYmV0YSIpLCAgcm90YXRpb25SYXRlLT5jYW5Qcm92aWRlQmV0YSgpICA/IGpz
TnVtYmVyKHJvdGF0aW9uUmF0ZS0+YmV0YSgpKSAgOiBqc051bGwoKSk7CisgICAgb2JqZWN0LT5w
dXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiZ2FtbWEiKSwgcm90YXRpb25S
YXRlLT5jYW5Qcm92aWRlR2FtbWEoKSA/IGpzTnVtYmVyKHJvdGF0aW9uUmF0ZS0+Z2FtbWEoKSkg
OiBqc051bGwoKSk7CiAgICAgcmV0dXJuIG9iamVjdDsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShFeGVj
U3RhdAogCiB2b2lkIEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB2YWx1ZSwgU2NyaXB0VmFsdWUmIHJlc3VsdCkKIHsKLSAgICByZXN1bHQgPSBTY3Jp
cHRWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIHZhbHVlKTsKKyAgICByZXN1bHQgPSBTY3JpcHRW
YWx1ZShleGVjLT52bSgpLCB2YWx1ZSk7CiB9CiAKIHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0
VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiYgcmVzdWx0KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
aWN0aW9uYXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
aWN0aW9uYXJ5LmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRGljdGlvbmFyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1Ymxp
YzoKICAgICAgICAgOiBtX2V4ZWMoZXhlYykKICAgICB7CiAgICAgICAgIGlmIChleGVjICYmIGlu
aXRpYWxpemVyT2JqZWN0KQotICAgICAgICAgICAgbV9pbml0aWFsaXplck9iamVjdCA9IEpTQzo6
U3Ryb25nPEpTQzo6SlNPYmplY3Q+KGV4ZWMtPmdsb2JhbERhdGEoKSwgaW5pdGlhbGl6ZXJPYmpl
Y3QpOworICAgICAgICAgICAgbV9pbml0aWFsaXplck9iamVjdCA9IEpTQzo6U3Ryb25nPEpTQzo6
SlNPYmplY3Q+KGV4ZWMtPnZtKCksIGluaXRpYWxpemVyT2JqZWN0KTsKICAgICB9CiAKICAgICAv
LyBSZXR1cm5zIGZhbHNlIGlmIGFueSBleGNlcHRpb25zIHdlcmUgdGhyb3duLCByZWdhcmRsZXNz
IG9mIHdoZXRoZXIgdGhlIHByb3BlcnR5IHdhcyBmb3VuZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEpTRXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudChT
Y3JpcHRFCiAKICAgICBFcnJvckV2ZW50KiBlcnJvckV2ZW50ID0gc3RhdGljX2Nhc3Q8RXJyb3JF
dmVudCo+KGV2ZW50KTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPmdsb2JhbERhdGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+dm0oKSk7CiAKICAgICBKU09iamVjdCoganNGdW5jdGlvbiA9IHRoaXMtPmpz
RnVuY3Rpb24oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgaWYgKCFqc0Z1bmN0aW9uKQpA
QCAtODksOCArODksOCBAQCB2b2lkIEpTRXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudChTY3JpcHRF
CiAgICAgICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGVycm9yRXZlbnQt
PmZpbGVuYW1lKCkpKTsKICAgICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoZXJyb3JFdmVudC0+
bGluZW5vKCkpKTsKIAotICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBnbG9iYWxP
YmplY3QtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIGds
b2JhbE9iamVjdFNjb3BlKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuZHluYW1pY0dsb2JhbE9iamVj
dCA/IGdsb2JhbERhdGEuZHluYW1pY0dsb2JhbE9iamVjdCA6IGdsb2JhbE9iamVjdCk7CisgICAg
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgRHluYW1pY0dsb2JhbE9i
amVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKHZtLCB2bS5keW5hbWljR2xvYmFsT2JqZWN0ID8g
dm0uZHluYW1pY0dsb2JhbE9iamVjdCA6IGdsb2JhbE9iamVjdCk7CiAKICAgICAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBnbG9iYWxPYmplY3QtPm1ldGhvZFRhYmxlKCktPnRvVGhpc09iamVjdChn
bG9iYWxPYmplY3QsIGV4ZWMpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5
LDcgKzc5LDcgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdAogICAg
IGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCB8fCBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5p
c0pTRXhlY3V0aW9uRm9yYmlkZGVuKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTTG9ja0hv
bGRlciBsb2NrKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmdsb2JhbERhdGEoKSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2soc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+dm0oKSk7CiAKICAgICBKU09i
amVjdCoganNGdW5jdGlvbiA9IHRoaXMtPmpzRnVuY3Rpb24oc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCk7CiAgICAgaWYgKCFqc0Z1bmN0aW9uKQpAQCAtMTE5LDggKzExOSw4IEBAIHZvaWQgSlNFdmVu
dExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHQKICAgICAgICAgRXZlbnQqIHNhdmVkRXZlbnQg
PSBnbG9iYWxPYmplY3QtPmN1cnJlbnRFdmVudCgpOwogICAgICAgICBnbG9iYWxPYmplY3QtPnNl
dEN1cnJlbnRFdmVudChldmVudCk7CiAKLSAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
ID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIER5bmFtaWNHbG9iYWxPYmpl
Y3RTY29wZSBnbG9iYWxPYmplY3RTY29wZShnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLmR5bmFtaWNH
bG9iYWxPYmplY3QgPyBnbG9iYWxEYXRhLmR5bmFtaWNHbG9iYWxPYmplY3QgOiBnbG9iYWxPYmpl
Y3QpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIER5bmFt
aWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZSh2bSwgdm0uZHluYW1pY0dsb2Jh
bE9iamVjdCA/IHZtLmR5bmFtaWNHbG9iYWxPYmplY3QgOiBnbG9iYWxPYmplY3QpOwogCiAgICAg
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBKU01haW5UaHJlYWRF
eGVjU3RhdGU6Omluc3RydW1lbnRGdW5jdGlvbkNhbGwoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwg
Y2FsbFR5cGUsIGNhbGxEYXRhKTsKIApAQCAtMTM2LDcgKzEzNiw3IEBAIHZvaWQgSlNFdmVudExp
c3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHQKICNpZiBFTkFCTEUoV09SS0VSUykKICAgICAgICAg
aWYgKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKSB7CiAgICAgICAg
ICAgICBib29sIHRlcm1pbmF0b3JDYXVzZWRFeGNlcHRpb24gPSAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkgJiYgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4ZWMtPmV4Y2VwdGlvbigpKSk7
Ci0gICAgICAgICAgICBpZiAodGVybWluYXRvckNhdXNlZEV4Y2VwdGlvbiB8fCBnbG9iYWxEYXRh
LndhdGNoZG9nLmRpZEZpcmUoKSkKKyAgICAgICAgICAgIGlmICh0ZXJtaW5hdG9yQ2F1c2VkRXhj
ZXB0aW9uIHx8IHZtLndhdGNoZG9nLmRpZEZpcmUoKSkKICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxXb3JrZXJDb250ZXh0Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCktPnNjcmlwdCgpLT5m
b3JiaWRFeGVjdXRpb24oKTsKICAgICAgICAgfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAkocmV2aXNpb24gMTQ4NjgzKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU2LDcgKzU2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBET01XcmFw
cGVyV29ybGQqIGlzb2xhdGVkV29ybGQoKSBjb25zdCB7IHJldHVybiBtX2lzb2xhdGVkV29ybGQu
Z2V0KCk7IH0KIAogICAgICAgICBKU0M6OkpTT2JqZWN0KiB3cmFwcGVyKCkgY29uc3QgeyByZXR1
cm4gbV93cmFwcGVyLmdldCgpOyB9Ci0gICAgICAgIHZvaWQgc2V0V3JhcHBlcihKU0M6OkpTR2xv
YmFsRGF0YSYsIEpTQzo6SlNPYmplY3QqIHdyYXBwZXIpIGNvbnN0IHsgbV93cmFwcGVyID0gSlND
OjpQYXNzV2VhazxKU0M6OkpTT2JqZWN0Pih3cmFwcGVyKTsgfQorICAgICAgICB2b2lkIHNldFdy
YXBwZXIoSlNDOjpWTSYsIEpTQzo6SlNPYmplY3QqIHdyYXBwZXIpIGNvbnN0IHsgbV93cmFwcGVy
ID0gSlNDOjpQYXNzV2VhazxKU0M6OkpTT2JqZWN0Pih3cmFwcGVyKTsgfQogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgdmlydHVhbCBKU0M6OkpTT2JqZWN0KiBpbml0aWFsaXplSlNGdW5jdGlvbihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KikgY29uc3Q7CkBAIC04MCw3ICs4MCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgLy8gaW5pdGlhbGl6ZUpTRnVuY3Rpb24gY2FuIHRyaWdnZXIg
Y29kZSB0aGF0IGRlbGV0ZXMgdGhpcyBldmVudCBsaXN0ZW5lcgogICAgICAgICAvLyBiZWZvcmUg
d2UncmUgZG9uZS4gSXQgc2hvdWxkIGFsd2F5cyByZXR1cm4gMCBpbiB0aGlzIGNhc2UuCiAgICAg
ICAgIFJlZlB0cjxKU0V2ZW50TGlzdGVuZXI+IHByb3RlY3QoY29uc3RfY2FzdDxKU0V2ZW50TGlz
dGVuZXIqPih0aGlzKSk7Ci0gICAgICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IHdyYXBw
ZXIoKm1faXNvbGF0ZWRXb3JsZC0+Z2xvYmFsRGF0YSgpLCBtX3dyYXBwZXIuZ2V0KCkpOworICAg
ICAgICBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiB3cmFwcGVyKCptX2lzb2xhdGVkV29ybGQt
PnZtKCksIG1fd3JhcHBlci5nZXQoKSk7CiAKICAgICAgICAgaWYgKCFtX2pzRnVuY3Rpb24pIHsK
ICAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uID0gaW5pdGlhbGl6ZUpTRnVuY3Rp
b24oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxNDg2ODMp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6
bmFtZUdldHRlcihFeGVjUwogSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6YWxsKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKIHsKICAgICAvLyBJZiAiYWxsIiBoYXMgYmVlbiBvdmVyd3JpdHRlbiwgcmV0
dXJuIHRoZSBvdmVyd3JpdHRlbiB2YWx1ZQotICAgIEpTVmFsdWUgdiA9IGdldERpcmVjdChleGVj
LT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgImFsbCIpKTsKKyAgICBKU1ZhbHVlIHYg
PSBnZXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiYWxsIikpOwogICAgIGlm
ICh2KQogICAgICAgICByZXR1cm4gdjsKIApAQCAtOTUsNyArOTUsNyBAQCBKU1ZhbHVlIEpTSFRN
TERvY3VtZW50OjphbGwoRXhlY1N0YXRlKiBlCiB2b2lkIEpTSFRNTERvY3VtZW50OjpzZXRBbGwo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIC8vIEFkZCAiYWxsIiB0byB0
aGUgcHJvcGVydHkgbWFwLgotICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIElkZW50
aWZpZXIoZXhlYywgImFsbCIpLCB2YWx1ZSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIElk
ZW50aWZpZXIoZXhlYywgImFsbCIpLCB2YWx1ZSk7CiB9CiAKIC8vIEN1c3RvbSBmdW5jdGlvbnMK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
VGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBKU1ZhbHVlIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6
Y29udGVudChFCiAKICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9XUkFQUEVSKGV4ZWMsIGdsb2Jh
bE9iamVjdCgpLCBEb2N1bWVudEZyYWdtZW50LCBjb250ZW50KTsKICAgICBQcml2YXRlTmFtZSBw
cm9wZXJ0eU5hbWU7Ci0gICAgY29uc3RfY2FzdDxKU0hUTUxUZW1wbGF0ZUVsZW1lbnQqPih0aGlz
KS0+cHV0RGlyZWN0KGdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwg
d3JhcHBlcik7CisgICAgY29uc3RfY2FzdDxKU0hUTUxUZW1wbGF0ZUVsZW1lbnQqPih0aGlzKS0+
cHV0RGlyZWN0KGdsb2JhbE9iamVjdCgpLT52bSgpLCBwcm9wZXJ0eU5hbWUsIHdyYXBwZXIpOwog
ICAgIHJldHVybiB3cmFwcGVyOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hpc3RvcnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4Myw3ICsxODMsNyBAQCBKU1ZhbHVlIEpTSGlzdG9yeTo6c3RhdGUoRXhlY1N0YXRlICpleGVj
CiAKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkID0gaGlzdG9y
eS0+c3RhdGUoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHNlcmlhbGl6ZWQgPyBzZXJpYWxpemVk
LT5kZXNlcmlhbGl6ZShleGVjLCBnbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwoKTsKLSAgICBj
b25zdF9jYXN0PEpTSGlzdG9yeSo+KHRoaXMpLT5tX3N0YXRlLnNldChleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIHJlc3VsdCk7CisgICAgY29uc3RfY2FzdDxKU0hpc3RvcnkqPih0aGlzKS0+bV9z
dGF0ZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgcmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25z
dHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcg
QEAgdm9pZCBKU0ltYWdlQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKAogewogICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdCk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2lu
Zm8pKTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkucHJvdG90eXBlLCBKU0hUTUxJbWFnZUVsZW1lbnRQcm90b3R5cGU6OnNlbGYoZXhlYywg
Z2xvYmFsT2JqZWN0KSwgTm9uZSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTSFRNTEltYWdlRWxlbWVudFByb3RvdHlwZTo6c2Vs
ZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SW1hZ2UoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmgJKHJldmlz
aW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1
Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKICAgICAgICAgfQogCi0gICAgICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsK
KyAgICAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpD
bGFzc0luZm8gc19pbmZvOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFn
ZURhdGFDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Niw3ICs0Niw3IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKICAg
ICAKICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9XUkFQUEVSKGV4ZWMsIGdsb2JhbE9iamVjdCwg
SW1hZ2VEYXRhLCBpbWFnZURhdGEpOwogICAgIElkZW50aWZpZXIgZGF0YU5hbWUoZXhlYywgImRh
dGEiKTsKLSAgICB3cmFwcGVyLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBkYXRhTmFt
ZSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGltYWdlRGF0YS0+ZGF0YSgpKSwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KTsKKyAgICB3cmFwcGVyLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZGF0YU5h
bWUsIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbWFnZURhdGEtPmRhdGEoKSksIERvbnREZWxl
dGUgfCBSZWFkT25seSk7CiAgICAgZXhlYy0+aGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qo
aW1hZ2VEYXRhLT5kYXRhKCktPmxlbmd0aCgpKTsKICAgICAKICAgICByZXR1cm4gd3JhcHBlcjsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVj
dGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODQsMTAgKzg0LDEwIEBAIE5vZGUqIEluamVjdGVkU2NyaXB0SG9zdDo6c2NyaXB0
VmFsdWVBc04KIFNjcmlwdFZhbHVlIEluamVjdGVkU2NyaXB0SG9zdDo6bm9kZUFzU2NyaXB0VmFs
dWUoU2NyaXB0U3RhdGUqIHN0YXRlLCBOb2RlKiBub2RlKQogewogICAgIGlmICghc2hvdWxkQWxs
b3dBY2Nlc3NUb05vZGUoc3RhdGUsIG5vZGUpKQotICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUo
c3RhdGUtPmdsb2JhbERhdGEoKSwganNOdWxsKCkpOworICAgICAgICByZXR1cm4gU2NyaXB0VmFs
dWUoc3RhdGUtPnZtKCksIGpzTnVsbCgpKTsKIAogICAgIEpTTG9ja0hvbGRlciBsb2NrKHN0YXRl
KTsKLSAgICByZXR1cm4gU2NyaXB0VmFsdWUoc3RhdGUtPmdsb2JhbERhdGEoKSwgdG9KUyhzdGF0
ZSwgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShzdGF0ZSksIG5vZGUpKTsKKyAg
ICByZXR1cm4gU2NyaXB0VmFsdWUoc3RhdGUtPnZtKCksIHRvSlMoc3RhdGUsIGRlcHJlY2F0ZWRH
bG9iYWxPYmplY3RGb3JQcm90b3R5cGUoc3RhdGUpLCBub2RlKSk7CiB9CiAKIEpTVmFsdWUgSlNJ
bmplY3RlZFNjcmlwdEhvc3Q6Omluc3BlY3RlZE9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCkBAIC0x
NzcsMTcgKzE3NywxNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpmdW5jdGlvbkRl
CiAgICAgU3RyaW5nIHNjcmlwdElkID0gU3RyaW5nOjpudW1iZXIoc291cmNlQ29kZS0+cHJvdmlk
ZXIoKS0+YXNJRCgpKTsKIAogICAgIEpTT2JqZWN0KiBsb2NhdGlvbiA9IGNvbnN0cnVjdEVtcHR5
T2JqZWN0KGV4ZWMpOwotICAgIGxvY2F0aW9uLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBJZGVudGlmaWVyKGV4ZWMsICJsaW5lTnVtYmVyIiksIGpzTnVtYmVyKGxpbmVOdW1iZXIpKTsK
LSAgICBsb2NhdGlvbi0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihl
eGVjLCAic2NyaXB0SWQiKSwganNTdHJpbmcoZXhlYywgc2NyaXB0SWQpKTsKKyAgICBsb2NhdGlv
bi0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgImxpbmVOdW1iZXIiKSwg
anNOdW1iZXIobGluZU51bWJlcikpOworICAgIGxvY2F0aW9uLT5wdXREaXJlY3QoZXhlYy0+dm0o
KSwgSWRlbnRpZmllcihleGVjLCAic2NyaXB0SWQiKSwganNTdHJpbmcoZXhlYywgc2NyaXB0SWQp
KTsKIAogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsK
LSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhl
YywgImxvY2F0aW9uIiksIGxvY2F0aW9uKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52
bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJsb2NhdGlvbiIpLCBsb2NhdGlvbik7CiAgICAgU3RyaW5n
IG5hbWUgPSBmdW5jdGlvbi0+bmFtZShleGVjKTsKICAgICBpZiAoIW5hbWUuaXNFbXB0eSgpKQot
ICAgICAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIo
ZXhlYywgIm5hbWUiKSwganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgbmFtZSkpOworICAgICAgICBy
ZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsICJuYW1lIiksIGpz
U3RyaW5nV2l0aENhY2hlKGV4ZWMsIG5hbWUpKTsKICAgICBTdHJpbmcgZGlzcGxheU5hbWUgPSBm
dW5jdGlvbi0+ZGlzcGxheU5hbWUoZXhlYyk7CiAgICAgaWYgKCFkaXNwbGF5TmFtZS5pc0VtcHR5
KCkpCi0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRp
ZmllcihleGVjLCAiZGlzcGxheU5hbWUiKSwganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgZGlzcGxh
eU5hbWUpKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmll
cihleGVjLCAiZGlzcGxheU5hbWUiKSwganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgZGlzcGxheU5h
bWUpKTsKICAgICAvLyBGSVhNRTogcHJvdmlkZSBmdW5jdGlvbiBzY29wZSBkYXRhIGluICJzY29w
ZXNSYXciIHByb3BlcnR5IHdoZW4gSlNDIHN1cHBvcnRzIGl0LgogICAgIC8vICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODcxOTIKICAgICByZXR1cm4gcmVzdWx0
OwpAQCAtMjE2LDggKzIxNiw4IEBAIHN0YXRpYyBKU0FycmF5KiBnZXRKU0xpc3RlbmVyRnVuY3Rp
b25zKEUKICAgICAgICAgaWYgKCFmdW5jdGlvbikKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICBKU09iamVjdCogbGlzdGVuZXJFbnRyeSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMp
OwotICAgICAgICBsaXN0ZW5lckVudHJ5LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJ
ZGVudGlmaWVyKGV4ZWMsICJsaXN0ZW5lciIpLCBmdW5jdGlvbik7Ci0gICAgICAgIGxpc3RlbmVy
RW50cnktPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgInVz
ZUNhcHR1cmUiKSwganNCb29sZWFuKGxpc3RlbmVySW5mby5ldmVudExpc3RlbmVyVmVjdG9yW2ld
LnVzZUNhcHR1cmUpKTsKKyAgICAgICAgbGlzdGVuZXJFbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPnZt
KCksIElkZW50aWZpZXIoZXhlYywgImxpc3RlbmVyIiksIGZ1bmN0aW9uKTsKKyAgICAgICAgbGlz
dGVuZXJFbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgInVzZUNh
cHR1cmUiKSwganNCb29sZWFuKGxpc3RlbmVySW5mby5ldmVudExpc3RlbmVyVmVjdG9yW2ldLnVz
ZUNhcHR1cmUpKTsKICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCBvdXRwdXRJ
bmRleCsrLCBKU1ZhbHVlKGxpc3RlbmVyRW50cnkpKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3Vs
dDsKQEAgLTI0Nyw3ICsyNDcsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRF
dmVudExpCiAgICAgICAgIGlmICghbGlzdGVuZXJzLT5sZW5ndGgoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICBBdG9taWNTdHJpbmcgZXZlbnRUeXBlID0gbGlzdGVuZXJzQXJyYXlb
aV0uZXZlbnRUeXBlOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRh
KCksIElkZW50aWZpZXIoZXhlYywgZXZlbnRUeXBlLmltcGwoKSksIEpTVmFsdWUobGlzdGVuZXJz
KSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhl
YywgZXZlbnRUeXBlLmltcGwoKSksIEpTVmFsdWUobGlzdGVuZXJzKSk7CiAgICAgfQogCiAgICAg
cmV0dXJuIHJlc3VsdDsKQEAgLTI1Niw4ICsyNTYsOCBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3Jp
cHRIb3N0OjpnZXRFdmVudExpCiBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppbnNwZWN0
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIp
IHsKLSAgICAgICAgU2NyaXB0VmFsdWUgb2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+
YXJndW1lbnQoMCkpOwotICAgICAgICBTY3JpcHRWYWx1ZSBoaW50cyhleGVjLT5nbG9iYWxEYXRh
KCksIGV4ZWMtPmFyZ3VtZW50KDEpKTsKKyAgICAgICAgU2NyaXB0VmFsdWUgb2JqZWN0KGV4ZWMt
PnZtKCksIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICAgICAgU2NyaXB0VmFsdWUgaGludHMoZXhl
Yy0+dm0oKSwgZXhlYy0+YXJndW1lbnQoMSkpOwogICAgICAgICBpbXBsKCktPmluc3BlY3RJbXBs
KG9iamVjdC50b0luc3BlY3RvclZhbHVlKGV4ZWMpLCBoaW50cy50b0luc3BlY3RvclZhbHVlKGV4
ZWMpKTsKICAgICB9CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAkocmV2aXNp
b24gMTQ4NjgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0
ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCwxMiArMTE4LDEyIEBAIEpTT2JqZWN0KiBK
U0xhenlFdmVudExpc3RlbmVyOjppbml0aWFsaXoKICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0
ICdub2RlJyBoYXMgYSBKYXZhU2NyaXB0IHdyYXBwZXIgdG8gbWFyayB0aGUgZXZlbnQgbGlzdGVu
ZXIgd2UncmUgY3JlYXRpbmcuCiAgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgcGFzcyB0aGUgZ2xvYmFsIG9iamVjdCBhc3Nv
Y2lhdGVkIHdpdGggdGhlIG5vZGUKLSAgICAgICAgICAgIHNldFdyYXBwZXIoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBhc09iamVjdCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgbV9vcmlnaW5hbE5vZGUp
KSk7CisgICAgICAgICAgICBzZXRXcmFwcGVyKGV4ZWMtPnZtKCksIGFzT2JqZWN0KHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBtX29yaWdpbmFsTm9kZSkpKTsKICAgICAgICAgfQogCiAgICAgICAg
IC8vIEFkZCB0aGUgZXZlbnQncyBob21lIGVsZW1lbnQgdG8gdGhlIHNjb3BlCiAgICAgICAgIC8v
IChhbmQgdGhlIGRvY3VtZW50LCBhbmQgdGhlIGZvcm0gLSBzZWUgSlNIVE1MRWxlbWVudDo6ZXZl
bnRIYW5kbGVyU2NvcGUpCi0gICAgICAgIGxpc3RlbmVyQXNGdW5jdGlvbi0+c2V0U2NvcGUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBqc0Nhc3Q8SlNOb2RlKj4od3JhcHBlcigpKS0+cHVzaEV2ZW50SGFu
ZGxlclNjb3BlKGV4ZWMsIGxpc3RlbmVyQXNGdW5jdGlvbi0+c2NvcGUoKSkpOworICAgICAgICBs
aXN0ZW5lckFzRnVuY3Rpb24tPnNldFNjb3BlKGV4ZWMtPnZtKCksIGpzQ2FzdDxKU05vZGUqPih3
cmFwcGVyKCkpLT5wdXNoRXZlbnRIYW5kbGVyU2NvcGUoZXhlYywgbGlzdGVuZXJBc0Z1bmN0aW9u
LT5zY29wZSgpKSk7CiAgICAgfQogICAgIHJldHVybiBqc0Z1bmN0aW9uOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNw
cAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNz
YWdlRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIEpTVmFs
dWUgSlNNZXNzYWdlRXZlbnQ6OmRhdGEoRXhlY1N0YXRlKiAKICAgICB9CiAKICAgICAvLyBTYXZl
IHRoZSByZXN1bHQgc28gd2UgZG9uJ3QgaGF2ZSB0byBkZXNlcmlhbGl6ZSB0aGUgdmFsdWUgYWdh
aW4uCi0gICAgY29uc3RfY2FzdDxKU01lc3NhZ2VFdmVudCo+KHRoaXMpLT5tX2RhdGEuc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgcmVzdWx0KTsKKyAgICBjb25zdF9jYXN0PEpTTWVzc2Fn
ZUV2ZW50Kj4odGhpcyktPm1fZGF0YS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgcmVzdWx0KTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMTcsMTMgKzExNywxMyBAQCBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGhhbmRsZUluaXRNZXNzYWdlRXZlCiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KLSAgICBTY3Jp
cHRWYWx1ZSBkYXRhQXJnID0gU2NyaXB0VmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5h
cmd1bWVudCgzKSk7CisgICAgU2NyaXB0VmFsdWUgZGF0YUFyZyA9IFNjcmlwdFZhbHVlKGV4ZWMt
PnZtKCksIGV4ZWMtPmFyZ3VtZW50KDMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgTWVzc2FnZUV2ZW50KiBldmVu
dCA9IHN0YXRpY19jYXN0PE1lc3NhZ2VFdmVudCo+KGpzRXZlbnQtPmltcGwoKSk7CiAgICAgZXZl
bnQtPmluaXRNZXNzYWdlRXZlbnQodHlwZUFyZywgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJn
LCBkYXRhQXJnLCBvcmlnaW5BcmcsIGxhc3RFdmVudElkQXJnLCBzb3VyY2VBcmcsIG1lc3NhZ2VQ
b3J0cy5yZWxlYXNlKCkpOwotICAgIGpzRXZlbnQtPm1fZGF0YS5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBqc0V2ZW50LCBkYXRhQXJnLmpzVmFsdWUoKSk7CisgICAganNFdmVudC0+bV9kYXRhLnNl
dChleGVjLT52bSgpLCBqc0V2ZW50LCBkYXRhQXJnLmpzVmFsdWUoKSk7CiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0
YXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNNdXRhdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbkNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTcsNyArNTcsNyBAQCB2b2lkIEpTTXV0YXRpb25DYWxsYmFjazo6Y2FsbChjb25zdCBWZWN0
CiAKICAgICBSZWZQdHI8SlNNdXRhdGlvbkNhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAg
SlNMb2NrSG9sZGVyIGxvY2sobV9pc29sYXRlZFdvcmxkLT5nbG9iYWxEYXRhKCkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKG1faXNvbGF0ZWRXb3JsZC0+dm0oKSk7CiAKICAgICBpZiAoIW1fY2Fs
bGJhY2spCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMTQ4
NjgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIEpTTXV0YXRpb25PCiAgICAgUmVmUHRyPEpTTXV0YXRpb25DYWxsYmFjaz4g
Y2FsbGJhY2sgPSBKU011dGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZShvYmplY3QsIGpzQ29uc3RydWN0
b3ItPmdsb2JhbE9iamVjdCgpKTsKICAgICBKU09iamVjdCoganNPYnNlcnZlciA9IGFzT2JqZWN0
KHRvSlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIE11dGF0aW9uT2JzZXJ2
ZXI6OmNyZWF0ZShjYWxsYmFjay5yZWxlYXNlKCkpKSk7CiAgICAgUHJpdmF0ZU5hbWUgcHJvcGVy
dHlOYW1lOwotICAgIGpzT2JzZXJ2ZXItPnB1dERpcmVjdChqc0NvbnN0cnVjdG9yLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIG9iamVjdCk7CisgICAganNPYnNl
cnZlci0+cHV0RGlyZWN0KGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLT52bSgpLCBwcm9w
ZXJ0eU5hbWUsIG9iamVjdCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc09ic2VydmVy
KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29u
ZGl0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05v
ZGVGaWx0ZXJDb25kaXRpb24uY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw3ICszMSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAotSlNOb2RlRmlsdGVyQ29uZGl0aW9uOjpKU05vZGVGaWx0ZXJDb25kaXRpb24oSlNHbG9i
YWxEYXRhJiwgTm9kZUZpbHRlciogb3duZXIsIEpTVmFsdWUgZmlsdGVyKQorSlNOb2RlRmlsdGVy
Q29uZGl0aW9uOjpKU05vZGVGaWx0ZXJDb25kaXRpb24oVk0mLCBOb2RlRmlsdGVyKiBvd25lciwg
SlNWYWx1ZSBmaWx0ZXIpCiAgICAgOiBtX2ZpbHRlcihmaWx0ZXIuaXNPYmplY3QoKSA/IFBhc3NX
ZWFrPEpTT2JqZWN0Pihqc0Nhc3Q8SlNPYmplY3QqPihmaWx0ZXIpLCAmbV93ZWFrT3duZXIsIG93
bmVyKSA6IG51bGxwdHIpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U05vZGVGaWx0ZXJDb25kaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDEzICszNCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFz
cyBKU05vZGVGaWx0ZXJDb25kaXRpb24gOiBwdWJsaWMgTm9kZUZpbHRlckNvbmRpdGlvbiB7CiAg
ICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU05vZGVGaWx0ZXJDb25kaXRp
b24+IGNyZWF0ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTm9kZUZpbHRlciogb3du
ZXIsIEpTQzo6SlNWYWx1ZSBmaWx0ZXIpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTTm9k
ZUZpbHRlckNvbmRpdGlvbj4gY3JlYXRlKEpTQzo6Vk0mIHZtLCBOb2RlRmlsdGVyKiBvd25lciwg
SlNDOjpKU1ZhbHVlIGZpbHRlcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBKU05vZGVGaWx0ZXJDb25kaXRpb24oZ2xvYmFsRGF0YSwgb3duZXIsIGZpbHRlcikp
OworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKU05vZGVGaWx0ZXJDb25kaXRpb24o
dm0sIG93bmVyLCBmaWx0ZXIpKTsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAg
SlNOb2RlRmlsdGVyQ29uZGl0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJiwgTm9kZUZpbHRlciogb3du
ZXIsIEpTQzo6SlNWYWx1ZSBmaWx0ZXIpOworICAgICAgICBKU05vZGVGaWx0ZXJDb25kaXRpb24o
SlNDOjpWTSYsIE5vZGVGaWx0ZXIqIG93bmVyLCBKU0M6OkpTVmFsdWUgZmlsdGVyKTsKIAogICAg
ICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoU2NyaXB0U3RhdGUqLCBOb2RlKikgY29uc3Q7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVy
Q3VzdG9tLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDEz
IEBAIHZvaWQgSlNOb2RlRmlsdGVyOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3QodGhpc09iamVjdC0+aW1wbCgpKTsKIH0KIAotUGFzc1JlZlB0cjxOb2Rl
RmlsdGVyPiB0b05vZGVGaWx0ZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHZh
bHVlKQorUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiB0b05vZGVGaWx0ZXIoVk0mIHZtLCBKU1ZhbHVl
IHZhbHVlKQogewogICAgIGlmICh2YWx1ZS5pbmhlcml0cygmSlNOb2RlRmlsdGVyOjpzX2luZm8p
KQogICAgICAgICByZXR1cm4ganNDYXN0PEpTTm9kZUZpbHRlcio+KGFzT2JqZWN0KHZhbHVlKSkt
PmltcGwoKTsKIAogICAgIFJlZlB0cjxOb2RlRmlsdGVyPiByZXN1bHQgPSBOb2RlRmlsdGVyOjpj
cmVhdGUoKTsKLSAgICByZXN1bHQtPnNldENvbmRpdGlvbihKU05vZGVGaWx0ZXJDb25kaXRpb246
OmNyZWF0ZShnbG9iYWxEYXRhLCByZXN1bHQuZ2V0KCksIHZhbHVlKSk7CisgICAgcmVzdWx0LT5z
ZXRDb25kaXRpb24oSlNOb2RlRmlsdGVyQ29uZGl0aW9uOjpjcmVhdGUodm0sIHJlc3VsdC5nZXQo
KSwgdmFsdWUpKTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0b20u
Y3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bv
cFN0YXRlRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIC8vIFNhdmUgdGhlIHN0YXRlIHZhbHVlIHRvIHRoZSBtX3N0YXRl
IG1lbWJlciBvZiBhIEpTUG9wU3RhdGVFdmVudCwgYW5kIHJldHVybiBpdCwgZm9yIGNvbnZlbmll
bmNlLgogc3RhdGljIGNvbnN0IEpTVmFsdWUmIGNhY2hlU3RhdGUoRXhlY1N0YXRlKiBleGVjLCBK
U1BvcFN0YXRlRXZlbnQqIGV2ZW50LCBjb25zdCBKU1ZhbHVlJiBzdGF0ZSkKIHsKLSAgICBldmVu
dC0+bV9zdGF0ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBldmVudCwgc3RhdGUpOworICAgIGV2
ZW50LT5tX3N0YXRlLnNldChleGVjLT52bSgpLCBldmVudCwgc3RhdGUpOwogICAgIHJldHVybiBz
dGF0ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXF1ZXN0QW5p
bWF0aW9uRnJhbWVDYWxsYmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja0N1c3RvbS5jcHAJ
KHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVxdWVz
dEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3
ICs0MCw3IEBAIGJvb2wgSlNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjazo6aGEKIAogICAg
IFJlZlB0cjxKU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwog
Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0
YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT52bSgp
KTsKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgYXJncy5hcHBlbmQoanNO
dW1iZXIoaGlnaFJlc05vd01zKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAJKHJldmlzaW9u
IDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMUmVzdWx0U2V0Um93
TGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgSlNWYWx1ZSBK
U1NRTFJlc3VsdFNldFJvd0xpc3Q6Oml0ZW0oRXhlYwogICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgfQogCi0gICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCBtX2ltcGwtPmNvbHVtbk5hbWVzKClbaV0p
LCBqc1ZhbHVlLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICBvYmplY3QtPnB1dERp
cmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsIG1faW1wbC0+Y29sdW1uTmFtZXMoKVtp
XSksIGpzVmFsdWUsIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgfQogCiAgICAgcmV0dXJu
IG9iamVjdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4
dEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2VyQ29udGV4dEJhc2UuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYs
MTUgKzQ2LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTV29y
a2VyQ29udGV4dEJhc2U6OnNfaW5mbyA9IHsgIldvcmtlckNvbnRleHQiLCAmSlNET01HbG9iYWxP
YmplY3Q6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dvcmtlckNvbnRleHRC
YXNlKSB9OwogCi1KU1dvcmtlckNvbnRleHRCYXNlOjpKU1dvcmtlckNvbnRleHRCYXNlKEpTQzo6
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNz
UmVmUHRyPFdvcmtlckNvbnRleHQ+IGltcGwpCi0gICAgOiBKU0RPTUdsb2JhbE9iamVjdChnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUsIG5vcm1hbFdvcmxkKGdsb2JhbERhdGEpKQorSlNXb3JrZXJDb250
ZXh0QmFzZTo6SlNXb3JrZXJDb250ZXh0QmFzZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxXb3JrZXJDb250ZXh0PiBpbXBsKQorICAgIDogSlNET01H
bG9iYWxPYmplY3Qodm0sIHN0cnVjdHVyZSwgbm9ybWFsV29ybGQodm0pKQogICAgICwgbV9pbXBs
KGltcGwpCiB7CiB9CiAKLXZvaWQgSlNXb3JrZXJDb250ZXh0QmFzZTo6ZmluaXNoQ3JlYXRpb24o
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBKU1dvcmtlckNvbnRleHRCYXNlOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0
YSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cygm
c19pbmZvKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2Vy
Q29udGV4dEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dvcmtlckNvbnRleHRCYXNlLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDgs
MTQgKzQ4LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgV29ya2VyQ29udGV4dCog
aW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQogICAgICAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CiAKLSAgICAgICAg
c3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpTQzo6
U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpHbG9iYWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworICAgICAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6R2xvYmFsT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgot
ICAgICAgICBKU1dvcmtlckNvbnRleHRCYXNlKEpTQzo6SlNHbG9iYWxEYXRhJiwgSlNDOjpTdHJ1
Y3R1cmUqLCBQYXNzUmVmUHRyPFdvcmtlckNvbnRleHQ+KTsKLSAgICAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OkpTR2xvYmFsRGF0YSYpOworICAgICAgICBKU1dvcmtlckNvbnRleHRCYXNl
KEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFBhc3NSZWZQdHI8V29ya2VyQ29udGV4dD4pOwor
ICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIFJlZlB0cjxXb3JrZXJDb250ZXh0PiBtX2ltcGw7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlz
aW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1
Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiwxMiArMTEyLDEyIEBAIHZvaWQgUGFn
ZVNjcmlwdERlYnVnU2VydmVyOjpyZW1vdmVMaXN0ZW4KIAogdm9pZCBQYWdlU2NyaXB0RGVidWdT
ZXJ2ZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKFRpbWVyPFNjcmlwdERlYnVnU2VydmVyPiop
CiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CiAg
ICAgLy8gSWYgSmF2YVNjcmlwdCBzdGFjayBpcyBub3QgZW1wdHkgcG9zdHBvbmUgcmVjb21waWxh
dGlvbi4KLSAgICBpZiAoSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5keW5hbWlj
R2xvYmFsT2JqZWN0KQorICAgIGlmIChKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+ZHluYW1pY0ds
b2JhbE9iamVjdCkKICAgICAgICAgcmVjb21waWxlQWxsSlNGdW5jdGlvbnNTb29uKCk7CiAgICAg
ZWxzZQotICAgICAgICBEZWJ1Z2dlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgRGVidWdnZXI6OnJlY29tcGlsZUFs
bEpTRnVuY3Rpb25zKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKIH0KIAogU2NyaXB0RGVidWdT
ZXJ2ZXI6Okxpc3RlbmVyU2V0KiBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OmdldExpc3RlbmVyc0Zv
ckdsb2JhbE9iamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCShyZXZpc2lvbiAx
NDg2ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NSwxMyArNjUsMTMgQEAgUGFzc093blB0cjxTY2hlZHVsZWRB
Y3Rpb24+IFNjaGVkdWxlZEFjdAogfQogCiBTY2hlZHVsZWRBY3Rpb246OlNjaGVkdWxlZEFjdGlv
bihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZnVuY3Rpb24sIERPTVdyYXBwZXJXb3JsZCogaXNv
bGF0ZWRXb3JsZCkKLSAgICA6IG1fZnVuY3Rpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlv
bikKKyAgICA6IG1fZnVuY3Rpb24oZXhlYy0+dm0oKSwgZnVuY3Rpb24pCiAgICAgLCBtX2lzb2xh
dGVkV29ybGQoaXNvbGF0ZWRXb3JsZCkKIHsKICAgICAvLyBzZXRUaW1lb3V0KGZ1bmN0aW9uLCBp
bnRlcnZhbCwgYXJnMCwgYXJnMS4uLikuCiAgICAgLy8gU3RhcnQgYXQgMiB0byBza2lwIGZ1bmN0
aW9uIGFuZCBpbnRlcnZhbC4KICAgICBmb3IgKHNpemVfdCBpID0gMjsgaSA8IGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKTsgKytpKQotICAgICAgICBtX2FyZ3MuYXBwZW5kKFN0cm9uZzxKU0M6OlVua25v
d24+KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+YXJndW1lbnQoaSkpKTsKKyAgICAgICAgbV9h
cmdzLmFwcGVuZChTdHJvbmc8SlNDOjpVbmtub3duPihleGVjLT52bSgpLCBleGVjLT5hcmd1bWVu
dChpKSkpOwogfQogCiB2b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0KQpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIFNjaGVkdWxlZEFjdGlv
bjo6ZXhlY3V0ZShTY3JpcHRFeGVjCiB2b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZUZ1bmN0
aW9uSW5Db250ZXh0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewogICAgIEFTU0VSVChtX2Z1
bmN0aW9uKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhjb250ZXh0LT5nbG9iYWxEYXRhKCkpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbnRleHQtPnZtKCkpOwogCiAgICAgQ2FsbERhdGEgY2Fs
bERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShtX2Z1bmN0aW9uLmdl
dCgpLCBjYWxsRGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVs
ZWRBY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hl
ZHVsZWRBY3Rpb24uaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NoZWR1bGVkQWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAgIFNjaGVkdWxlZEFjdGlv
bihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbiwgRE9NV3JhcHBlcldvcmxk
KiBpc29sYXRlZFdvcmxkKTsKICAgICAgICAgU2NoZWR1bGVkQWN0aW9uKGNvbnN0IFN0cmluZyYg
Y29kZSwgRE9NV3JhcHBlcldvcmxkKiBpc29sYXRlZFdvcmxkKQotICAgICAgICAgICAgOiBtX2Z1
bmN0aW9uKCppc29sYXRlZFdvcmxkLT5nbG9iYWxEYXRhKCkpCisgICAgICAgICAgICA6IG1fZnVu
Y3Rpb24oKmlzb2xhdGVkV29ybGQtPnZtKCkpCiAgICAgICAgICAgICAsIG1fY29kZShjb2RlKQog
ICAgICAgICAgICAgLCBtX2lzb2xhdGVkV29ybGQoaXNvbGF0ZWRXb3JsZCkKICAgICAgICAgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRG
cmFtZURhdGEuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0
Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpTY3Jp
cHRDYWNoZWRGcmFtZURhdGEoRnJhbWUqIGZyYW1lKQogewotICAgIEpTTG9ja0hvbGRlciBsb2Nr
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAKICAgICBTY3JpcHRDb250cm9s
bGVyKiBzY3JpcHRDb250cm9sbGVyID0gZnJhbWUtPnNjcmlwdCgpOwogICAgIFNjcmlwdENvbnRy
b2xsZXI6OlNoZWxsTWFwJiB3aW5kb3dTaGVsbHMgPSBzY3JpcHRDb250cm9sbGVyLT5tX3dpbmRv
d1NoZWxsczsKQEAgLTU0LDcgKzU0LDcgQEAgU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpTY3JpcHRD
YWNoZWRGcmFtZQogICAgIFNjcmlwdENvbnRyb2xsZXI6OlNoZWxsTWFwOjppdGVyYXRvciB3aW5k
b3dTaGVsbHNFbmQgPSB3aW5kb3dTaGVsbHMuZW5kKCk7CiAgICAgZm9yIChTY3JpcHRDb250cm9s
bGVyOjpTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IHdpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVy
ICE9IHdpbmRvd1NoZWxsc0VuZDsgKytpdGVyKSB7CiAgICAgICAgIEpTRE9NV2luZG93KiB3aW5k
b3cgPSBpdGVyLT52YWx1ZS0+d2luZG93KCk7Ci0gICAgICAgIG1fd2luZG93cy5hZGQoaXRlci0+
a2V5LmdldCgpLCBTdHJvbmc8SlNET01XaW5kb3c+KHdpbmRvdy0+Z2xvYmFsRGF0YSgpLCB3aW5k
b3cpKTsKKyAgICAgICAgbV93aW5kb3dzLmFkZChpdGVyLT5rZXkuZ2V0KCksIFN0cm9uZzxKU0RP
TVdpbmRvdz4od2luZG93LT52bSgpLCB3aW5kb3cpKTsKICAgICB9CiAKICAgICBzY3JpcHRDb250
cm9sbGVyLT5hdHRhY2hEZWJ1Z2dlcigwKTsKQEAgLTY3LDcgKzY3LDcgQEAgU2NyaXB0Q2FjaGVk
RnJhbWVEYXRhOjp+U2NyaXB0Q2FjaGVkRnJhbQogCiB2b2lkIFNjcmlwdENhY2hlZEZyYW1lRGF0
YTo6cmVzdG9yZShGcmFtZSogZnJhbWUpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
SlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKIAogICAgIFNjcmlwdENvbnRyb2xsZXIqIHNj
cmlwdENvbnRyb2xsZXIgPSBmcmFtZS0+c2NyaXB0KCk7CiAgICAgU2NyaXB0Q29udHJvbGxlcjo6
U2hlbGxNYXAmIHdpbmRvd1NoZWxscyA9IHNjcmlwdENvbnRyb2xsZXItPm1fd2luZG93U2hlbGxz
OwpAQCAtNzgsNyArNzgsNyBAQCB2b2lkIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZShG
cmFtCiAgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxsID0gaXRlci0+dmFsdWUu
Z2V0KCk7CiAKICAgICAgICAgaWYgKEpTRE9NV2luZG93KiB3aW5kb3cgPSBtX3dpbmRvd3MuZ2V0
KHdvcmxkKS5nZXQoKSkKLSAgICAgICAgICAgIHdpbmRvd1NoZWxsLT5zZXRXaW5kb3cod2luZG93
LT5nbG9iYWxEYXRhKCksIHdpbmRvdyk7CisgICAgICAgICAgICB3aW5kb3dTaGVsbC0+c2V0V2lu
ZG93KHdpbmRvdy0+dm0oKSwgd2luZG93KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBE
T01XaW5kb3cqIGRvbVdpbmRvdyA9IGZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKTsKICAg
ICAgICAgICAgIGlmICh3aW5kb3dTaGVsbC0+d2luZG93KCktPmltcGwoKSA9PSBkb21XaW5kb3cp
CkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpjbGVhcigpCiAg
ICAgaWYgKG1fd2luZG93cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTTG9j
a0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgbV93
aW5kb3dzLmNsZWFyKCk7CiAgICAgZ2NDb250cm9sbGVyKCkuZ2FyYmFnZUNvbGxlY3RTb29uKCk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2tGYWN0
b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
YWxsU3RhY2tGYWN0b3J5LmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDcgKzQ0LDcgQEAKICNpbmNsdWRlIDxydW50aW1lL0FyZ0xpc3QuaD4KICNpbmNsdWRlIDxy
dW50aW1lL0pTQ0pTVmFsdWUuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rpb24uaD4KLSNp
bmNsdWRlIDxydW50aW1lL0pTR2xvYmFsRGF0YS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
QEAgLTU4LDcgKzU4LDcgQEAgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNjcmlw
dAogICAgIFZlY3RvcjxTY3JpcHRDYWxsRnJhbWU+IGZyYW1lczsKICAgICBpZiAoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmN1cnJlbnRTdGF0ZSgpKSB7CiAg
ICAgICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlOwotICAgICAgICBJbnRlcnByZXRl
cjo6Z2V0U3RhY2tUcmFjZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdGFja1RyYWNlLCBtYXhTdGFj
a1NpemUpOworICAgICAgICBJbnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFjZSgmZXhlYy0+dm0oKSwg
c3RhY2tUcmFjZSwgbWF4U3RhY2tTaXplKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzdGFja1RyYWNlLnNpemUoKTsgaSsrKQogICAgICAgICAgICAgZnJhbWVzLmFwcGVuZChTY3Jp
cHRDYWxsRnJhbWUoc3RhY2tUcmFjZVtpXS5mcmllbmRseUZ1bmN0aW9uTmFtZShleGVjKSwgc3Rh
Y2tUcmFjZVtpXS5mcmllbmRseVNvdXJjZVVSTCgpLCBzdGFja1RyYWNlW2ldLmxpbmUoKSwgc3Rh
Y2tUcmFjZVtpXS5jb2x1bW4oKSkpOwogICAgIH0KQEAgLTc1LDcgKzc1LDcgQEAgUGFzc1JlZlB0
cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNjcmlwdAogewogICAgIFZlY3RvcjxTY3JpcHRDYWxs
RnJhbWU+IGZyYW1lczsKICAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsKLSAgICBJ
bnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFjZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdGFja1RyYWNl
LCBtYXhTdGFja1NpemUgKyAxKTsKKyAgICBJbnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFjZSgmZXhl
Yy0+dm0oKSwgc3RhY2tUcmFjZSwgbWF4U3RhY2tTaXplICsgMSk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IHN0YWNrVHJhY2Uuc2l6ZSgpID09IDEgPyAwIDogMTsgaSA8IHN0YWNrVHJhY2Uuc2l6ZSgp
OyBpKyspIHsKICAgICAgICAgLy8gVGhpcyBlYXJseSBleGl0IGlzIG5lY2Vzc2FyeSB0byBtYWlu
dGFpbiBvdXIgb2xkIGJlaGF2aW91cgogICAgICAgICAvLyBidXQgdGhlIHN0YWNrIHRyYWNlIHdl
IHByb2R1Y2Ugbm93IGlzIGNvbXBsZXRlIGFuZCBoYW5kbGVzIGFsbApAQCAtMTA2LDcgKzEwNiw3
IEBAIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBjcmVhdGVTY3JpcHQKICAgICBWZWN0b3I8
U2NyaXB0VmFsdWU+IGFyZ3VtZW50czsKICAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IGV4ZWMt
PmFyZ3VtZW50Q291bnQoKTsKICAgICBmb3IgKHNpemVfdCBpID0gc2tpcEFyZ3VtZW50Q291bnQ7
IGkgPCBhcmd1bWVudENvdW50OyArK2kpCi0gICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoU2NyaXB0
VmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5hcmd1bWVudChpKSkpOworICAgICAgICBh
cmd1bWVudHMuYXBwZW5kKFNjcmlwdFZhbHVlKGV4ZWMtPnZtKCksIGV4ZWMtPmFyZ3VtZW50KGkp
KSk7CiAgICAgcmV0dXJuIFNjcmlwdEFyZ3VtZW50czo6Y3JlYXRlKGV4ZWMsIGFyZ3VtZW50cyk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDggKzEwNCw4IEBA
IHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZGVzdHJveVdpbmRvd1NoZWwKIEpTRE9NV2luZG93U2hl
bGwqIFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVdpbmRvd1NoZWxsKERPTVdyYXBwZXJXb3JsZCog
d29ybGQpCiB7CiAgICAgQVNTRVJUKCFtX3dpbmRvd1NoZWxscy5jb250YWlucyh3b3JsZCkpOwot
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSlNET01XaW5kb3dTaGVsbDo6Y3JlYXRlU3RydWN0
dXJlKCp3b3JsZC0+Z2xvYmFsRGF0YSgpLCBqc051bGwoKSk7Ci0gICAgU3Ryb25nPEpTRE9NV2lu
ZG93U2hlbGw+IHdpbmRvd1NoZWxsKCp3b3JsZC0+Z2xvYmFsRGF0YSgpLCBKU0RPTVdpbmRvd1No
ZWxsOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCksIHN0cnVjdHVyZSwg
d29ybGQpKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTRE9NV2luZG93U2hlbGw6OmNy
ZWF0ZVN0cnVjdHVyZSgqd29ybGQtPnZtKCksIGpzTnVsbCgpKTsKKyAgICBTdHJvbmc8SlNET01X
aW5kb3dTaGVsbD4gd2luZG93U2hlbGwoKndvcmxkLT52bSgpLCBKU0RPTVdpbmRvd1NoZWxsOjpj
cmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCksIHN0cnVjdHVyZSwgd29ybGQp
KTsKICAgICBTdHJvbmc8SlNET01XaW5kb3dTaGVsbD4gd2luZG93U2hlbGwyKHdpbmRvd1NoZWxs
KTsKICAgICBtX3dpbmRvd1NoZWxscy5hZGQod29ybGQsIHdpbmRvd1NoZWxsKTsKICAgICB3b3Js
ZC0+ZGlkQ3JlYXRlV2luZG93U2hlbGwodGhpcyk7CkBAIC0xNDgsNyArMTQ4LDcgQEAgU2NyaXB0
VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbgogICAgIH0KIAogICAgIG1fc291cmNl
VVJMID0gc2F2ZWRTb3VyY2VVUkw7Ci0gICAgcmV0dXJuIFNjcmlwdFZhbHVlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgcmV0dXJuVmFsdWUpOworICAgIHJldHVybiBTY3JpcHRWYWx1ZShleGVjLT52bSgp
LCByZXR1cm5WYWx1ZSk7CiB9CiAKIFNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1
YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpIApAQCAtMTU4LDEyICsxNTgs
MTIgQEAgU2NyaXB0VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoYwogCiBQYXNzUmVm
UHRyPERPTVdyYXBwZXJXb3JsZD4gU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlV29ybGQoKQogewot
ICAgIHJldHVybiBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZShKU0RPTVdpbmRvdzo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOworICAgIHJldHVybiBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZShKU0RPTVdp
bmRvdzo6Y29tbW9uVk0oKSk7CiB9CiAKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Z2V0QWxsV29y
bGRzKFZlY3RvcjxSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiA+JiB3b3JsZHMpCiB7Ci0gICAgc3Rh
dGljX2Nhc3Q8V2ViQ29yZUpTQ2xpZW50RGF0YSo+KEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2Jh
bERhdGEoKS0+Y2xpZW50RGF0YSktPmdldEFsbFdvcmxkcyh3b3JsZHMpOworICAgIHN0YXRpY19j
YXN0PFdlYkNvcmVKU0NsaWVudERhdGEqPihKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+Y2xpZW50
RGF0YSktPmdldEFsbFdvcmxkcyh3b3JsZHMpOwogfQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6
OmNsZWFyV2luZG93U2hlbGwoRE9NV2luZG93KiBuZXdET01XaW5kb3csIGJvb2wgZ29pbmdJbnRv
UGFnZUNhY2hlKQpAQCAtMTcxLDcgKzE3MSw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xl
YXJXaW5kb3dTaGVsbCgKICAgICBpZiAobV93aW5kb3dTaGVsbHMuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vblZNKCkpOwogCiAgICAgZm9yIChTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fd2lu
ZG93U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCk7ICsraXRlcikg
ewogICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnZhbHVlLmdl
dCgpOwpAQCAtMjA2LDcgKzIwNiw3IEBAIEpTRE9NV2luZG93U2hlbGwqIFNjcmlwdENvbnRyb2xs
ZXI6OmluaXQKIHsKICAgICBBU1NFUlQoIW1fd2luZG93U2hlbGxzLmNvbnRhaW5zKHdvcmxkKSk7
CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayh3b3JsZC0+Z2xvYmFsRGF0YSgpKTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayh3b3JsZC0+dm0oKSk7CiAKICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5k
b3dTaGVsbCA9IGNyZWF0ZVdpbmRvd1NoZWxsKHdvcmxkKTsKIApAQCAtMjg1LDcgKzI4NSw3IEBA
IHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6YXR0YWNoRGVidWdnZXIoSlMKIHZvaWQgU2NyaXB0Q29u
dHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQoKQogewogICAgIGZvciAoU2hlbGxNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVyICE9IG1fd2luZG93U2hlbGxzLmVu
ZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soaXRlci0+a2V5LT5nbG9i
YWxEYXRhKCkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhpdGVyLT5rZXktPnZtKCkpOwog
ICAgICAgICBpdGVyLT52YWx1ZS0+d2luZG93KCktPnVwZGF0ZURvY3VtZW50KCk7CiAgICAgfQog
fQpAQCAtMzAxLDcgKzMwMSw3IEBAIEJpbmRpbmdzOjpSb290T2JqZWN0KiBTY3JpcHRDb250cm9s
bGVyOjoKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIW1fY2FjaGVhYmxlQmluZGluZ1Jv
b3RPYmplY3QpIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpj
b21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2lu
ZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgIG1fY2FjaGVhYmxlQmluZGluZ1Jvb3RPYmpl
Y3QgPSBCaW5kaW5nczo6Um9vdE9iamVjdDo6Y3JlYXRlKDAsIGdsb2JhbE9iamVjdChwbHVnaW5X
b3JsZCgpKSk7CiAgICAgfQogICAgIHJldHVybiBtX2NhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0
LmdldCgpOwpAQCAtMzEzLDcgKzMxMyw3IEBAIEJpbmRpbmdzOjpSb290T2JqZWN0KiBTY3JpcHRD
b250cm9sbGVyOjoKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIW1fYmluZGluZ1Jvb3RP
YmplY3QpIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgIG1fYmluZGluZ1Jvb3RPYmplY3QgPSBCaW5kaW5n
czo6Um9vdE9iamVjdDo6Y3JlYXRlKDAsIGdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKSk7CiAg
ICAgfQogICAgIHJldHVybiBtX2JpbmRpbmdSb290T2JqZWN0LmdldCgpOwpAQCAtNDM0LDcgKzQz
NCw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYW51cFNjcmlwdE9iamUKIAogdm9pZCBT
Y3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVjdHMoKQogewotICAgIEpTTG9ja0hvbGRl
ciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAKICAgICBSb290T2Jq
ZWN0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jvb3RPYmplY3RzLmVuZCgpOwogICAgIGZv
ciAoUm9vdE9iamVjdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jvb3RPYmplY3RzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKQEAgLTQ3MSw3ICs0NzEsNyBAQCBTY3JpcHRWYWx1ZSBTY3Jp
cHRDb250cm9sbGVyOjpleGVjdXRlU2NyCiAKIGJvb2wgU2NyaXB0Q29udHJvbGxlcjo6c2hvdWxk
QnlwYXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5KCkKIHsKLSAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+dG9wQ2FsbEZy
YW1lOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCkt
PnRvcENhbGxGcmFtZTsKICAgICBpZiAoIWNhbGxGcmFtZSB8fCBjYWxsRnJhbWUgPT0gQ2FsbEZy
YW1lOjpub0NhbGxlcigpKSAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIERPTVdyYXBwZXJX
b3JsZCogZG9tV3JhcHBlcldvcmxkID0gY3VycmVudFdvcmxkKGNhbGxGcmFtZSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW0J
KHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENv
bnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEsNyBAQCBXZWJTY3Jp
cHRPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OndpbmRvCiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgaWYgKCFtX3dpbmRvd1NjcmlwdE9iamVjdCkgewotICAgICAgICBKU0M6OkpTTG9ja0hvbGRl
ciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAg
ICAgIEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3QgPSBiaW5kaW5nUm9vdE9iamVjdCgp
OwogICAgICAgICBtX3dpbmRvd1NjcmlwdE9iamVjdCA9IFtXZWJTY3JpcHRPYmplY3Qgc2NyaXB0
T2JqZWN0Rm9ySlNPYmplY3Q6dG9SZWYod2luZG93U2hlbGwocGx1Z2luV29ybGQoKSkpIG9yaWdp
blJvb3RPYmplY3Q6cm9vdCByb290T2JqZWN0OnJvb3RdOwogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9u
IDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjczLDcgKzI3Myw3IEBAIHZvaWQgU2NyaXB0RGVidWdT
ZXJ2ZXI6OmRpc3BhdGNoRGlkUGF1c2UKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBqc0Nh
bGxGcmFtZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIGxpc3RlbmVyLT5kaWRQYXVzZShz
dGF0ZSwgU2NyaXB0VmFsdWUoc3RhdGUtPmdsb2JhbERhdGEoKSwganNDYWxsRnJhbWUpLCBTY3Jp
cHRWYWx1ZSgpKTsKKyAgICBsaXN0ZW5lci0+ZGlkUGF1c2Uoc3RhdGUsIFNjcmlwdFZhbHVlKHN0
YXRlLT52bSgpLCBqc0NhbGxGcmFtZSksIFNjcmlwdFZhbHVlKCkpOwogfQogCiB2b2lkIFNjcmlw
dERlYnVnU2VydmVyOjpkaXNwYXRjaERpZENvbnRpbnVlKFNjcmlwdERlYnVnTGlzdGVuZXIqIGxp
c3RlbmVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0
ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
RXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3
ICs5OSw3IEBAIFN0cmluZyBldmVudExpc3RlbmVySGFuZGxlckJvZHkoRG9jdW1lbnQKICAgICBB
U1NFUlQoanNMaXN0ZW5lcik7CiAgICAgaWYgKCFqc0xpc3RlbmVyKQogICAgICAgICByZXR1cm4g
IiI7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soanNMaXN0ZW5lci0+aXNvbGF0ZWRXb3JsZCgpLT5n
bG9iYWxEYXRhKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGpzTGlzdGVuZXItPmlzb2xhdGVk
V29ybGQoKS0+dm0oKSk7CiAgICAgSlNDOjpKU09iamVjdCoganNGdW5jdGlvbiA9IGpzTGlzdGVu
ZXItPmpzRnVuY3Rpb24oZG9jdW1lbnQpOwogICAgIGlmICghanNGdW5jdGlvbikKICAgICAgICAg
cmV0dXJuICIiOwpAQCAtMTEzLDExICsxMTMsMTEgQEAgU2NyaXB0VmFsdWUgZXZlbnRMaXN0ZW5l
ckhhbmRsZXIoRG9jdW1lbgogICAgIEFTU0VSVChqc0xpc3RlbmVyKTsKICAgICBpZiAoIWpzTGlz
dGVuZXIpCiAgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOwotICAgIEpTTG9ja0hvbGRlciBs
b2NrKGpzTGlzdGVuZXItPmlzb2xhdGVkV29ybGQoKS0+Z2xvYmFsRGF0YSgpKTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhqc0xpc3RlbmVyLT5pc29sYXRlZFdvcmxkKCktPnZtKCkpOwogICAgIEpT
Qzo6SlNPYmplY3QqIGpzRnVuY3Rpb24gPSBqc0xpc3RlbmVyLT5qc0Z1bmN0aW9uKGRvY3VtZW50
KTsKICAgICBpZiAoIWpzRnVuY3Rpb24pCiAgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOwot
ICAgIHJldHVybiBTY3JpcHRWYWx1ZSgqanNMaXN0ZW5lci0+aXNvbGF0ZWRXb3JsZCgpLT5nbG9i
YWxEYXRhKCksIGpzRnVuY3Rpb24pOworICAgIHJldHVybiBTY3JpcHRWYWx1ZSgqanNMaXN0ZW5l
ci0+aXNvbGF0ZWRXb3JsZCgpLT52bSgpLCBqc0Z1bmN0aW9uKTsKIH0KIAogU2NyaXB0U3RhdGUq
IGV2ZW50TGlzdGVuZXJIYW5kbGVyU2NyaXB0U3RhdGUoRnJhbWUqIGZyYW1lLCBFdmVudExpc3Rl
bmVyKiBldmVudExpc3RlbmVyKQpAQCAtMTM4LDcgKzEzOCw3IEBAIGJvb2wgZXZlbnRMaXN0ZW5l
ckhhbmRsZXJMb2NhdGlvbihEb2N1bWUKICAgICBBU1NFUlQoanNMaXN0ZW5lcik7CiAgICAgaWYg
KCFqc0xpc3RlbmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgSlNMb2NrSG9sZGVyIGxv
Y2soanNMaXN0ZW5lci0+aXNvbGF0ZWRXb3JsZCgpLT5nbG9iYWxEYXRhKCkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGpzTGlzdGVuZXItPmlzb2xhdGVkV29ybGQoKS0+dm0oKSk7CiAgICAgSlND
OjpKU09iamVjdCoganNPYmplY3QgPSBqc0xpc3RlbmVyLT5qc0Z1bmN0aW9uKGRvY3VtZW50KTsK
ICAgICBpZiAoIWpzT2JqZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHJldmlz
aW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9u
Q2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksNyBAQCBTY3JpcHRWYWx1ZSBT
Y3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwoYm9vCiAgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgp
OwogICAgIH0KIAotICAgIHJldHVybiBTY3JpcHRWYWx1ZShtX2V4ZWMtPmdsb2JhbERhdGEoKSwg
cmVzdWx0KTsKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUobV9leGVjLT52bSgpLCByZXN1bHQpOwog
fQogCiBTY3JpcHRWYWx1ZSBTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwoKQpAQCAtMjEzLDcgKzIx
Myw3IEBAIFNjcmlwdFZhbHVlIFNjcmlwdENhbGxiYWNrOjpjYWxsKCkKICAgICAgICAgcmV0dXJu
IFNjcmlwdFZhbHVlKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIFNjcmlwdFZhbHVlKG1fZXhlYy0+
Z2xvYmFsRGF0YSgpLCByZXN1bHQpOworICAgIHJldHVybiBTY3JpcHRWYWx1ZShtX2V4ZWMtPnZt
KCksIHJlc3VsdCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEdDRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEdDRXZlbnQuY3BwCShyZXZpc2lvbiAxNDg2ODMp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRHQ0V2ZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKICNp
bmNsdWRlIDxoZWFwL0hlYXAuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsRGF0YS5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsOSArNDUsOSBAQCB1c2luZyBuYW1lc3BhY2UgSlND
OwogCiB2b2lkIFNjcmlwdEdDRXZlbnQ6OmdldEhlYXBTaXplKEhlYXBJbmZvJiBpbmZvKQogewot
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2Jh
bERhdGEoKTsKLSAgICBpbmZvLnRvdGFsSlNIZWFwU2l6ZSA9IGdsb2JhbERhdGEtPmhlYXAuY2Fw
YWNpdHkoKTsKLSAgICBpbmZvLnVzZWRKU0hlYXBTaXplID0gZ2xvYmFsRGF0YS0+aGVhcC5zaXpl
KCk7CisgICAgVk0qIHZtID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCk7CisgICAgaW5mby50b3Rh
bEpTSGVhcFNpemUgPSB2bS0+aGVhcC5jYXBhY2l0eSgpOworICAgIGluZm8udXNlZEpTSGVhcFNp
emUgPSB2bS0+aGVhcC5zaXplKCk7CiAgICAgaW5mby5qc0hlYXBTaXplTGltaXQgPSAwOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAJKHJl
dmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEzICs0NSwxMyBAQCB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTY3JpcHRPYmplY3Q6OlNjcmlwdE9iamVjdChT
Y3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIEpTT2JqZWN0KiBvYmplY3QpCi0gICAgOiBTY3JpcHRW
YWx1ZShzY3JpcHRTdGF0ZS0+Z2xvYmFsRGF0YSgpLCBvYmplY3QpCisgICAgOiBTY3JpcHRWYWx1
ZShzY3JpcHRTdGF0ZS0+dm0oKSwgb2JqZWN0KQogICAgICwgbV9zY3JpcHRTdGF0ZShzY3JpcHRT
dGF0ZSkKIHsKIH0KIAogU2NyaXB0T2JqZWN0OjpTY3JpcHRPYmplY3QoU2NyaXB0U3RhdGUqIHNj
cmlwdFN0YXRlLCBjb25zdCBTY3JpcHRWYWx1ZSYgc2NyaXB0VmFsdWUpCi0gICAgOiBTY3JpcHRW
YWx1ZShzY3JpcHRTdGF0ZS0+Z2xvYmFsRGF0YSgpLCBzY3JpcHRWYWx1ZS5qc1ZhbHVlKCkpCisg
ICAgOiBTY3JpcHRWYWx1ZShzY3JpcHRTdGF0ZS0+dm0oKSwgc2NyaXB0VmFsdWUuanNWYWx1ZSgp
KQogICAgICwgbV9zY3JpcHRTdGF0ZShzY3JpcHRTdGF0ZSkKIHsKIH0KQEAgLTY4LDcgKzY4LDcg
QEAgc3RhdGljIGJvb2wgaGFuZGxlRXhjZXB0aW9uKFNjcmlwdFN0YXRlKgogYm9vbCBTY3JpcHRH
bG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5h
bWUsIGNvbnN0IFNjcmlwdE9iamVjdCYgdmFsdWUpCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2so
c2NyaXB0U3RhdGUpOwotICAgIHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnB1
dERpcmVjdChzY3JpcHRTdGF0ZS0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKHNjcmlwdFN0YXRl
LCBuYW1lKSwgdmFsdWUuanNPYmplY3QoKSk7CisgICAgc2NyaXB0U3RhdGUtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+cHV0RGlyZWN0KHNjcmlwdFN0YXRlLT52bSgpLCBJZGVudGlmaWVyKHNjcmlw
dFN0YXRlLCBuYW1lKSwgdmFsdWUuanNPYmplY3QoKSk7CiAgICAgcmV0dXJuIGhhbmRsZUV4Y2Vw
dGlvbihzY3JpcHRTdGF0ZSk7CiB9CiAKQEAgLTc3LDcgKzc3LDcgQEAgYm9vbCBTY3JpcHRHbG9i
YWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZQogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlw
dFN0YXRlKTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7Ci0g
ICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3Qoc2NyaXB0U3RhdGUtPmdsb2JhbERhdGEoKSwgSWRl
bnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSksIHRvSlMoc2NyaXB0U3RhdGUsIGdsb2JhbE9iamVj
dCwgdmFsdWUpKTsKKyAgICBnbG9iYWxPYmplY3QtPnB1dERpcmVjdChzY3JpcHRTdGF0ZS0+dm0o
KSwgSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSksIHRvSlMoc2NyaXB0U3RhdGUsIGdsb2Jh
bE9iamVjdCwgdmFsdWUpKTsKICAgICByZXR1cm4gaGFuZGxlRXhjZXB0aW9uKHNjcmlwdFN0YXRl
KTsKIH0KIApAQCAtODUsNyArODUsNyBAQCBib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KFNj
cmlwdFN0YXRlCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0U3RhdGUpOwogICAgIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLSAgICBnbG9iYWxPYmplY3Qt
PnB1dERpcmVjdChzY3JpcHRTdGF0ZS0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKHNjcmlwdFN0
YXRlLCBuYW1lKSwgdG9KUyhzY3JpcHRTdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSkpOworICAg
IGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KHNjcmlwdFN0YXRlLT52bSgpLCBJZGVudGlmaWVyKHNj
cmlwdFN0YXRlLCBuYW1lKSwgdG9KUyhzY3JpcHRTdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSkp
OwogICAgIHJldHVybiBoYW5kbGVFeGNlcHRpb24oc2NyaXB0U3RhdGUpOwogfQogI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dFN0YXRlLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3MgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFdvcmtlckNvbnRleHQ7CiAKIC8vIFRoZSBpZGVh
IGlzIHRvIGV4cG9zZSAic3RhdGUtbGlrZSIgbWV0aG9kcyAoaGFkRXhjZXB0aW9uLCBhbmQgYW55
IG90aGVyCi0vLyBtZXRob2RzIHdoZXJlIEV4ZWNTdGF0ZSBqdXN0IGRpcHMgaW50byBnbG9iYWxE
YXRhKSBvZiBKU0M6OkV4ZWNTdGF0ZSBhcyBhCisvLyBtZXRob2RzIHdoZXJlIEV4ZWNTdGF0ZSBq
dXN0IGRpcHMgaW50byB2bSkgb2YgSlNDOjpFeGVjU3RhdGUgYXMgYQogLy8gc2VwYXJhdGUgYWJz
dHJhY3Rpb24uCiAvLyBGb3Igbm93LCB0aGUgc2VwYXJhdGlvbiBpcyBwdXJlbHkgYnkgY29udmVu
dGlvbi4KIHR5cGVkZWYgSlNDOjpFeGVjU3RhdGUgU2NyaXB0U3RhdGU7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExMiw3ICsxMTIsNyBAQCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
U2NyaXB0CiAKIFNjcmlwdFZhbHVlIFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShTY3JpcHRTdGF0
ZSogc2NyaXB0U3RhdGUsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogdmFsdWUsIFNlcmlhbGl6YXRp
b25FcnJvck1vZGUgdGhyb3dFeGNlcHRpb25zKQogewotICAgIHJldHVybiBTY3JpcHRWYWx1ZShz
Y3JpcHRTdGF0ZS0+Z2xvYmFsRGF0YSgpLCB2YWx1ZS0+ZGVzZXJpYWxpemUoc2NyaXB0U3RhdGUs
IHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIDAsIHRocm93RXhjZXB0aW9ucykp
OworICAgIHJldHVybiBTY3JpcHRWYWx1ZShzY3JpcHRTdGF0ZS0+dm0oKSwgdmFsdWUtPmRlc2Vy
aWFsaXplKHNjcmlwdFN0YXRlLCBzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAw
LCB0aHJvd0V4Y2VwdGlvbnMpKTsKIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmgJKHJldmlzaW9uIDE0ODY4MykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwogY2xhc3Mg
U2NyaXB0VmFsdWUgewogcHVibGljOgogICAgIFNjcmlwdFZhbHVlKCkgeyB9Ci0gICAgU2NyaXB0
VmFsdWUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkg
OiBtX3ZhbHVlKGdsb2JhbERhdGEsIHZhbHVlKSB7fQorICAgIFNjcmlwdFZhbHVlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIDogbV92YWx1ZSh2bSwgdmFsdWUpIHt9CiAgICAgdmly
dHVhbCB+U2NyaXB0VmFsdWUoKSB7fQogCiAgICAgSlNDOjpKU1ZhbHVlIGpzVmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRXcmFwcGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRXcmFwcGFibGUuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0V3JhcHBhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDcgKzM1LDcgQEAKICNpbmNsdWRlIDxoZWFwL1dlYWsuaD4KIAogbmFtZXNwYWNlIEpTQyB7Ci1j
bGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBWTTsKIGNsYXNzIFdlYWtIYW5kbGVPd25lcjsKIH0K
IApAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBKU0RPTVdyYXBwZXI7CiBjbGFzcyBTY3JpcHRXcmFw
cGFibGUgewogcHVibGljOgogICAgIEpTRE9NV3JhcHBlciogd3JhcHBlcigpIGNvbnN0OwotICAg
IHZvaWQgc2V0V3JhcHBlcihKU0M6OkpTR2xvYmFsRGF0YSYsIEpTRE9NV3JhcHBlciosIEpTQzo6
V2Vha0hhbmRsZU93bmVyKiwgdm9pZCopOworICAgIHZvaWQgc2V0V3JhcHBlcihKU0M6OlZNJiwg
SlNET01XcmFwcGVyKiwgSlNDOjpXZWFrSGFuZGxlT3duZXIqLCB2b2lkKik7CiAgICAgdm9pZCBj
bGVhcldyYXBwZXIoSlNET01XcmFwcGVyKik7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRXcmFwcGFibGVJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5oCShyZXZp
c2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRXcmFwcGFi
bGVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgaW5saW5lIEpTRE9N
V3JhcHBlciogU2NyaXB0V3JhcHBhYmxlOjp3cgogICAgIHJldHVybiBtX3dyYXBwZXIuZ2V0KCk7
CiB9CiAKLWlubGluZSB2b2lkIFNjcmlwdFdyYXBwYWJsZTo6c2V0V3JhcHBlcihKU0M6OkpTR2xv
YmFsRGF0YSYsIEpTRE9NV3JhcHBlciogd3JhcHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdy
YXBwZXJPd25lciwgdm9pZCogY29udGV4dCkKK2lubGluZSB2b2lkIFNjcmlwdFdyYXBwYWJsZTo6
c2V0V3JhcHBlcihKU0M6OlZNJiwgSlNET01XcmFwcGVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5k
bGVPd25lciogd3JhcHBlck93bmVyLCB2b2lkKiBjb250ZXh0KQogewogICAgIEFTU0VSVCghbV93
cmFwcGVyKTsKICAgICBtX3dyYXBwZXIgPSBKU0M6OlBhc3NXZWFrPEpTRE9NV3JhcHBlcj4od3Jh
cHBlciwgd3JhcHBlck93bmVyLCBjb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMTQ4
NjgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4MywxNCArMTM4MywxNCBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIFRydWVUYWc6CiAgICAgICAgICAgICByZXR1cm4ganNCb29sZWFuKHRydWUpOwog
ICAgICAgICBjYXNlIEZhbHNlT2JqZWN0VGFnOiB7Ci0gICAgICAgICAgICBCb29sZWFuT2JqZWN0
KiBvYmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUobV9leGVjLT5nbG9iYWxEYXRhKCksIG1fZ2xv
YmFsT2JqZWN0LT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOwotICAgICAgICAgICAgb2JqLT5z
ZXRJbnRlcm5hbFZhbHVlKG1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc0Jvb2xlYW4oZmFsc2UpKTsK
KyAgICAgICAgICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZSht
X2V4ZWMtPnZtKCksIG1fZ2xvYmFsT2JqZWN0LT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOwor
ICAgICAgICAgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKG1fZXhlYy0+dm0oKSwganNCb29sZWFu
KGZhbHNlKSk7CiAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZChvYmopOwogICAgICAgICAg
ICAgcmV0dXJuIG9iajsKICAgICAgICAgfQogICAgICAgICBjYXNlIFRydWVPYmplY3RUYWc6IHsK
LSAgICAgICAgICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZSht
X2V4ZWMtPmdsb2JhbERhdGEoKSwgbV9nbG9iYWxPYmplY3QtPmJvb2xlYW5PYmplY3RTdHJ1Y3R1
cmUoKSk7Ci0gICAgICAgICAgICBvYmotPnNldEludGVybmFsVmFsdWUobV9leGVjLT5nbG9iYWxE
YXRhKCksIGpzQm9vbGVhbih0cnVlKSk7CisgICAgICAgICAgICBCb29sZWFuT2JqZWN0KiBvYmog
PSBCb29sZWFuT2JqZWN0OjpjcmVhdGUobV9leGVjLT52bSgpLCBtX2dsb2JhbE9iamVjdC0+Ym9v
bGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1
ZShtX2V4ZWMtPnZtKCksIGpzQm9vbGVhbih0cnVlKSk7CiAgICAgICAgICAgICAgbV9nY0J1ZmZl
ci5hcHBlbmQob2JqKTsKICAgICAgICAgICAgIHJldHVybiBvYmo7CiAgICAgICAgIH0KQEAgLTE0
ODIsNyArMTQ4Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gY2FjaGVkU3RyaW5n
LT5qc1N0cmluZyhtX2V4ZWMpOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRW1wdHlTdHJpbmdU
YWc6Ci0gICAgICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZygmbV9leGVjLT5nbG9iYWxEYXRh
KCkpOworICAgICAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoJm1fZXhlYy0+dm0oKSk7CiAg
ICAgICAgIGNhc2UgU3RyaW5nT2JqZWN0VGFnOiB7CiAgICAgICAgICAgICBDYWNoZWRTdHJpbmdS
ZWYgY2FjaGVkU3RyaW5nOwogICAgICAgICAgICAgaWYgKCFyZWFkU3RyaW5nRGF0YShjYWNoZWRT
dHJpbmcpKQpAQCAtMTQ5Miw3ICsxNDkyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVy
biBvYmo7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBFbXB0eVN0cmluZ09iamVjdFRhZzogewot
ICAgICAgICAgICAgU3RyaW5nT2JqZWN0KiBvYmogPSBjb25zdHJ1Y3RTdHJpbmcobV9leGVjLCBt
X2dsb2JhbE9iamVjdCwganNFbXB0eVN0cmluZygmbV9leGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAg
ICAgICAgICAgIFN0cmluZ09iamVjdCogb2JqID0gY29uc3RydWN0U3RyaW5nKG1fZXhlYywgbV9n
bG9iYWxPYmplY3QsIGpzRW1wdHlTdHJpbmcoJm1fZXhlYy0+dm0oKSkpOwogICAgICAgICAgICAg
bV9nY0J1ZmZlci5hcHBlbmQob2JqKTsKICAgICAgICAgICAgIHJldHVybiBvYmo7CiAgICAgICAg
IH0KQEAgLTE1MDUsNyArMTUwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWUoKTsKICAgICAgICAgICAgIFJlZ0V4cEZsYWdzIHJlRmxhZ3MgPSByZWdFeHBGbGFn
cyhmbGFncy0+c3RyaW5nKCkpOwogICAgICAgICAgICAgQVNTRVJUKHJlRmxhZ3MgIT0gSW52YWxp
ZEZsYWdzKTsKLSAgICAgICAgICAgIFJlZ0V4cCogcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUobV9l
eGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4tPnN0cmluZygpLCByZUZsYWdzKTsKKyAgICAgICAg
ICAgIFJlZ0V4cCogcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUobV9leGVjLT52bSgpLCBwYXR0ZXJu
LT5zdHJpbmcoKSwgcmVGbGFncyk7CiAgICAgICAgICAgICByZXR1cm4gUmVnRXhwT2JqZWN0Ojpj
cmVhdGUobV9leGVjLCBtX2V4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbV9nbG9iYWxPYmpl
Y3QtPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOyAKICAgICAgICAgfQogICAgICAgICBjYXNl
IE9iamVjdFJlZmVyZW5jZVRhZzogewpAQCAtMTg0OSw3ICsxODQ5LDcgQEAgSlNWYWx1ZSBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaQogU2NyaXB0VmFsdWUgU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpkZXNlcmlhbGl6ZUZvckluc3BlY3RvcihTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUp
CiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlc2VyaWFsaXplKHNjcmlwdFN0YXRlLCBzY3JpcHRT
dGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwKTsKLSAgICByZXR1cm4gU2NyaXB0VmFsdWUo
c2NyaXB0U3RhdGUtPmdsb2JhbERhdGEoKSwgdmFsdWUpOworICAgIHJldHVybiBTY3JpcHRWYWx1
ZShzY3JpcHRTdGF0ZS0+dm0oKSwgdmFsdWUpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgJKHJldmlzaW9u
IDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERh
dGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDEwIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgV2ViQ29yZUpTQ2xpZW50RGF0YSA6IHB1YmxpYyBKU0M6OkpTR2xvYmFs
RGF0YTo6Q2xpZW50RGF0YSB7CitjbGFzcyBXZWJDb3JlSlNDbGllbnREYXRhIDogcHVibGljIEpT
Qzo6Vk06OkNsaWVudERhdGEgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYkNvcmVKU0Ns
aWVudERhdGEpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBmcmllbmQgY2xhc3MgSlNH
bG9iYWxEYXRhV29ybGRJdGVyYXRvcjsKLSAgICBmcmllbmQgdm9pZCBpbml0Tm9ybWFsV29ybGRD
bGllbnREYXRhKEpTQzo6SlNHbG9iYWxEYXRhKik7CisgICAgZnJpZW5kIGNsYXNzIFZNV29ybGRJ
dGVyYXRvcjsKKyAgICBmcmllbmQgdm9pZCBpbml0Tm9ybWFsV29ybGRDbGllbnREYXRhKEpTQzo6
Vk0qKTsKIAogcHVibGljOgogICAgIFdlYkNvcmVKU0NsaWVudERhdGEoKSB7IH0KQEAgLTcwLDEx
ICs3MCwxMSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IG1fbm9ybWFs
V29ybGQ7CiB9OwogCi1pbmxpbmUgdm9pZCBpbml0Tm9ybWFsV29ybGRDbGllbnREYXRhKEpTQzo6
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQoraW5saW5lIHZvaWQgaW5pdE5vcm1hbFdvcmxkQ2xp
ZW50RGF0YShKU0M6OlZNKiB2bSkKIHsKICAgICBXZWJDb3JlSlNDbGllbnREYXRhKiB3ZWJDb3Jl
SlNDbGllbnREYXRhID0gbmV3IFdlYkNvcmVKU0NsaWVudERhdGE7Ci0gICAgZ2xvYmFsRGF0YS0+
Y2xpZW50RGF0YSA9IHdlYkNvcmVKU0NsaWVudERhdGE7IC8vIH5KU0dsb2JhbERhdGEgZGVsZXRl
cyB0aGlzIHBvaW50ZXIuCi0gICAgd2ViQ29yZUpTQ2xpZW50RGF0YS0+bV9ub3JtYWxXb3JsZCA9
IERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKGdsb2JhbERhdGEsIHRydWUpOworICAgIHZtLT5jbGll
bnREYXRhID0gd2ViQ29yZUpTQ2xpZW50RGF0YTsgLy8gflZNIGRlbGV0ZXMgdGhpcyBwb2ludGVy
LgorICAgIHdlYkNvcmVKU0NsaWVudERhdGEtPm1fbm9ybWFsV29ybGQgPSBET01XcmFwcGVyV29y
bGQ6OmNyZWF0ZSh2bSwgdHJ1ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNTUgKzU2
LDU1IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdvcmtl
clNjcmlwdENvbnRyb2xsZXI6OldvcmtlclNjcmlwdENvbnRyb2xsZXIoV29ya2VyQ29udGV4dCog
d29ya2VyQ29udGV4dCkKLSAgICA6IG1fZ2xvYmFsRGF0YShKU0dsb2JhbERhdGE6OmNyZWF0ZSgp
KQorICAgIDogbV92bShWTTo6Y3JlYXRlKCkpCiAgICAgLCBtX3dvcmtlckNvbnRleHQod29ya2Vy
Q29udGV4dCkKLSAgICAsIG1fd29ya2VyQ29udGV4dFdyYXBwZXIoKm1fZ2xvYmFsRGF0YSkKKyAg
ICAsIG1fd29ya2VyQ29udGV4dFdyYXBwZXIoKm1fdm0pCiAgICAgLCBtX2V4ZWN1dGlvbkZvcmJp
ZGRlbihmYWxzZSkKIHsKLSAgICBpbml0Tm9ybWFsV29ybGRDbGllbnREYXRhKG1fZ2xvYmFsRGF0
YS5nZXQoKSk7CisgICAgaW5pdE5vcm1hbFdvcmxkQ2xpZW50RGF0YShtX3ZtLmdldCgpKTsKIH0K
IAogV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6fldvcmtlclNjcmlwdENvbnRyb2xsZXIoKQogewot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbERhdGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2sodm0oKSk7CiAgICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci5jbGVhcigpOwotICAgIG1fZ2xv
YmFsRGF0YS5jbGVhcigpOworICAgIG1fdm0uY2xlYXIoKTsKIH0KIAogdm9pZCBXb3JrZXJTY3Jp
cHRDb250cm9sbGVyOjppbml0U2NyaXB0KCkKIHsKICAgICBBU1NFUlQoIW1fd29ya2VyQ29udGV4
dFdyYXBwZXIpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2sobV9nbG9iYWxEYXRhLmdldCgpKTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX3ZtLmdldCgpKTsKIAogICAgIC8vIEV4cGxpY2l0bHkg
cHJvdGVjdCB0aGUgZ2xvYmFsIG9iamVjdCdzIHByb3RvdHlwZSBzbyBpdCBpc24ndCBjb2xsZWN0
ZWQKICAgICAvLyB3aGVuIHdlIGFsbG9jYXRlIHRoZSBnbG9iYWwgb2JqZWN0LiAoT25jZSB0aGUg
Z2xvYmFsIG9iamVjdCBpcyBmdWxseQogICAgIC8vIGNvbnN0cnVjdGVkLCBpdCBjYW4gbWFyayBp
dHMgb3duIHByb3RvdHlwZS4pCi0gICAgU3RydWN0dXJlKiB3b3JrZXJDb250ZXh0UHJvdG90eXBl
U3RydWN0dXJlID0gSlNXb3JrZXJDb250ZXh0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoKm1f
Z2xvYmFsRGF0YSwgMCwganNOdWxsKCkpOwotICAgIFN0cm9uZzxKU1dvcmtlckNvbnRleHRQcm90
b3R5cGU+IHdvcmtlckNvbnRleHRQcm90b3R5cGUoKm1fZ2xvYmFsRGF0YSwgSlNXb3JrZXJDb250
ZXh0UHJvdG90eXBlOjpjcmVhdGUoKm1fZ2xvYmFsRGF0YSwgMCwgd29ya2VyQ29udGV4dFByb3Rv
dHlwZVN0cnVjdHVyZSkpOworICAgIFN0cnVjdHVyZSogd29ya2VyQ29udGV4dFByb3RvdHlwZVN0
cnVjdHVyZSA9IEpTV29ya2VyQ29udGV4dFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKCptX3Zt
LCAwLCBqc051bGwoKSk7CisgICAgU3Ryb25nPEpTV29ya2VyQ29udGV4dFByb3RvdHlwZT4gd29y
a2VyQ29udGV4dFByb3RvdHlwZSgqbV92bSwgSlNXb3JrZXJDb250ZXh0UHJvdG90eXBlOjpjcmVh
dGUoKm1fdm0sIDAsIHdvcmtlckNvbnRleHRQcm90b3R5cGVTdHJ1Y3R1cmUpKTsKIAogICAgIGlm
IChtX3dvcmtlckNvbnRleHQtPmlzRGVkaWNhdGVkV29ya2VyQ29udGV4dCgpKSB7Ci0gICAgICAg
IFN0cnVjdHVyZSogZGVkaWNhdGVkQ29udGV4dFByb3RvdHlwZVN0cnVjdHVyZSA9IEpTRGVkaWNh
dGVkV29ya2VyQ29udGV4dFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKCptX2dsb2JhbERhdGEs
IDAsIHdvcmtlckNvbnRleHRQcm90b3R5cGUuZ2V0KCkpOwotICAgICAgICBTdHJvbmc8SlNEZWRp
Y2F0ZWRXb3JrZXJDb250ZXh0UHJvdG90eXBlPiBkZWRpY2F0ZWRDb250ZXh0UHJvdG90eXBlKCpt
X2dsb2JhbERhdGEsIEpTRGVkaWNhdGVkV29ya2VyQ29udGV4dFByb3RvdHlwZTo6Y3JlYXRlKCpt
X2dsb2JhbERhdGEsIDAsIGRlZGljYXRlZENvbnRleHRQcm90b3R5cGVTdHJ1Y3R1cmUpKTsKLSAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBKU0RlZGljYXRlZFdvcmtlckNvbnRleHQ6OmNy
ZWF0ZVN0cnVjdHVyZSgqbV9nbG9iYWxEYXRhLCAwLCBkZWRpY2F0ZWRDb250ZXh0UHJvdG90eXBl
LmdldCgpKTsKLQotICAgICAgICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLnNldCgqbV9nbG9iYWxE
YXRhLCBKU0RlZGljYXRlZFdvcmtlckNvbnRleHQ6OmNyZWF0ZSgqbV9nbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUsIHN0YXRpY19jYXN0PERlZGljYXRlZFdvcmtlckNvbnRleHQqPihtX3dvcmtlckNvbnRl
eHQpKSk7Ci0gICAgICAgIHdvcmtlckNvbnRleHRQcm90b3R5cGVTdHJ1Y3R1cmUtPnNldEdsb2Jh
bE9iamVjdCgqbV9nbG9iYWxEYXRhLCBtX3dvcmtlckNvbnRleHRXcmFwcGVyLmdldCgpKTsKLSAg
ICAgICAgZGVkaWNhdGVkQ29udGV4dFByb3RvdHlwZVN0cnVjdHVyZS0+c2V0R2xvYmFsT2JqZWN0
KCptX2dsb2JhbERhdGEsIG1fd29ya2VyQ29udGV4dFdyYXBwZXIuZ2V0KCkpOworICAgICAgICBT
dHJ1Y3R1cmUqIGRlZGljYXRlZENvbnRleHRQcm90b3R5cGVTdHJ1Y3R1cmUgPSBKU0RlZGljYXRl
ZFdvcmtlckNvbnRleHRQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSgqbV92bSwgMCwgd29ya2Vy
Q29udGV4dFByb3RvdHlwZS5nZXQoKSk7CisgICAgICAgIFN0cm9uZzxKU0RlZGljYXRlZFdvcmtl
ckNvbnRleHRQcm90b3R5cGU+IGRlZGljYXRlZENvbnRleHRQcm90b3R5cGUoKm1fdm0sIEpTRGVk
aWNhdGVkV29ya2VyQ29udGV4dFByb3RvdHlwZTo6Y3JlYXRlKCptX3ZtLCAwLCBkZWRpY2F0ZWRD
b250ZXh0UHJvdG90eXBlU3RydWN0dXJlKSk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gSlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0OjpjcmVhdGVTdHJ1Y3R1cmUoKm1fdm0sIDAsIGRl
ZGljYXRlZENvbnRleHRQcm90b3R5cGUuZ2V0KCkpOworCisgICAgICAgIG1fd29ya2VyQ29udGV4
dFdyYXBwZXIuc2V0KCptX3ZtLCBKU0RlZGljYXRlZFdvcmtlckNvbnRleHQ6OmNyZWF0ZSgqbV92
bSwgc3RydWN0dXJlLCBzdGF0aWNfY2FzdDxEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Kj4obV93b3Jr
ZXJDb250ZXh0KSkpOworICAgICAgICB3b3JrZXJDb250ZXh0UHJvdG90eXBlU3RydWN0dXJlLT5z
ZXRHbG9iYWxPYmplY3QoKm1fdm0sIG1fd29ya2VyQ29udGV4dFdyYXBwZXIuZ2V0KCkpOworICAg
ICAgICBkZWRpY2F0ZWRDb250ZXh0UHJvdG90eXBlU3RydWN0dXJlLT5zZXRHbG9iYWxPYmplY3Qo
Km1fdm0sIG1fd29ya2VyQ29udGV4dFdyYXBwZXIuZ2V0KCkpOwogICAgICAgICBBU1NFUlQoc3Ry
dWN0dXJlLT5nbG9iYWxPYmplY3QoKSA9PSBtX3dvcmtlckNvbnRleHRXcmFwcGVyKTsKICAgICAg
ICAgQVNTRVJUKG1fd29ya2VyQ29udGV4dFdyYXBwZXItPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmpl
Y3QoKSA9PSBtX3dvcmtlckNvbnRleHRXcmFwcGVyKTsKLSAgICAgICAgd29ya2VyQ29udGV4dFBy
b3RvdHlwZS0+c3RydWN0dXJlKCktPnNldEdsb2JhbE9iamVjdCgqbV9nbG9iYWxEYXRhLCBtX3dv
cmtlckNvbnRleHRXcmFwcGVyLmdldCgpKTsKLSAgICAgICAgZGVkaWNhdGVkQ29udGV4dFByb3Rv
dHlwZS0+c3RydWN0dXJlKCktPnNldEdsb2JhbE9iamVjdCgqbV9nbG9iYWxEYXRhLCBtX3dvcmtl
ckNvbnRleHRXcmFwcGVyLmdldCgpKTsKKyAgICAgICAgd29ya2VyQ29udGV4dFByb3RvdHlwZS0+
c3RydWN0dXJlKCktPnNldEdsb2JhbE9iamVjdCgqbV92bSwgbV93b3JrZXJDb250ZXh0V3JhcHBl
ci5nZXQoKSk7CisgICAgICAgIGRlZGljYXRlZENvbnRleHRQcm90b3R5cGUtPnN0cnVjdHVyZSgp
LT5zZXRHbG9iYWxPYmplY3QoKm1fdm0sIG1fd29ya2VyQ29udGV4dFdyYXBwZXIuZ2V0KCkpOwog
I2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQo
bV93b3JrZXJDb250ZXh0LT5pc1NoYXJlZFdvcmtlckNvbnRleHQoKSk7Ci0gICAgICAgIFN0cnVj
dHVyZSogc2hhcmVkQ29udGV4dFByb3RvdHlwZVN0cnVjdHVyZSA9IEpTU2hhcmVkV29ya2VyQ29u
dGV4dFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKCptX2dsb2JhbERhdGEsIDAsIHdvcmtlckNv
bnRleHRQcm90b3R5cGUuZ2V0KCkpOwotICAgICAgICBTdHJvbmc8SlNTaGFyZWRXb3JrZXJDb250
ZXh0UHJvdG90eXBlPiBzaGFyZWRDb250ZXh0UHJvdG90eXBlKCptX2dsb2JhbERhdGEsIEpTU2hh
cmVkV29ya2VyQ29udGV4dFByb3RvdHlwZTo6Y3JlYXRlKCptX2dsb2JhbERhdGEsIDAsIHNoYXJl
ZENvbnRleHRQcm90b3R5cGVTdHJ1Y3R1cmUpKTsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBKU1NoYXJlZFdvcmtlckNvbnRleHQ6OmNyZWF0ZVN0cnVjdHVyZSgqbV9nbG9iYWxEYXRh
LCAwLCBzaGFyZWRDb250ZXh0UHJvdG90eXBlLmdldCgpKTsKLQotICAgICAgICBtX3dvcmtlckNv
bnRleHRXcmFwcGVyLnNldCgqbV9nbG9iYWxEYXRhLCBKU1NoYXJlZFdvcmtlckNvbnRleHQ6OmNy
ZWF0ZSgqbV9nbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIHN0YXRpY19jYXN0PFNoYXJlZFdvcmtlckNv
bnRleHQqPihtX3dvcmtlckNvbnRleHQpKSk7Ci0gICAgICAgIHdvcmtlckNvbnRleHRQcm90b3R5
cGUtPnN0cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3QoKm1fZ2xvYmFsRGF0YSwgbV93b3JrZXJD
b250ZXh0V3JhcHBlci5nZXQoKSk7Ci0gICAgICAgIHNoYXJlZENvbnRleHRQcm90b3R5cGUtPnN0
cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3QoKm1fZ2xvYmFsRGF0YSwgbV93b3JrZXJDb250ZXh0
V3JhcHBlci5nZXQoKSk7CisgICAgICAgIFN0cnVjdHVyZSogc2hhcmVkQ29udGV4dFByb3RvdHlw
ZVN0cnVjdHVyZSA9IEpTU2hhcmVkV29ya2VyQ29udGV4dFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0
dXJlKCptX3ZtLCAwLCB3b3JrZXJDb250ZXh0UHJvdG90eXBlLmdldCgpKTsKKyAgICAgICAgU3Ry
b25nPEpTU2hhcmVkV29ya2VyQ29udGV4dFByb3RvdHlwZT4gc2hhcmVkQ29udGV4dFByb3RvdHlw
ZSgqbV92bSwgSlNTaGFyZWRXb3JrZXJDb250ZXh0UHJvdG90eXBlOjpjcmVhdGUoKm1fdm0sIDAs
IHNoYXJlZENvbnRleHRQcm90b3R5cGVTdHJ1Y3R1cmUpKTsKKyAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBKU1NoYXJlZFdvcmtlckNvbnRleHQ6OmNyZWF0ZVN0cnVjdHVyZSgqbV92bSwg
MCwgc2hhcmVkQ29udGV4dFByb3RvdHlwZS5nZXQoKSk7CisKKyAgICAgICAgbV93b3JrZXJDb250
ZXh0V3JhcHBlci5zZXQoKm1fdm0sIEpTU2hhcmVkV29ya2VyQ29udGV4dDo6Y3JlYXRlKCptX3Zt
LCBzdHJ1Y3R1cmUsIHN0YXRpY19jYXN0PFNoYXJlZFdvcmtlckNvbnRleHQqPihtX3dvcmtlckNv
bnRleHQpKSk7CisgICAgICAgIHdvcmtlckNvbnRleHRQcm90b3R5cGUtPnN0cnVjdHVyZSgpLT5z
ZXRHbG9iYWxPYmplY3QoKm1fdm0sIG1fd29ya2VyQ29udGV4dFdyYXBwZXIuZ2V0KCkpOworICAg
ICAgICBzaGFyZWRDb250ZXh0UHJvdG90eXBlLT5zdHJ1Y3R1cmUoKS0+c2V0R2xvYmFsT2JqZWN0
KCptX3ZtLCBtX3dvcmtlckNvbnRleHRXcmFwcGVyLmdldCgpKTsKICNlbmRpZgogICAgIH0KICAg
ICBBU1NFUlQobV93b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xvYmFsT2JqZWN0KCkgPT0gbV93b3Jr
ZXJDb250ZXh0V3JhcHBlcik7CkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBXb3JrZXJTY3JpcHRD
b250cm9sbGVyOjpldmFsdWF0ZShjbwogICAgIFNjcmlwdFZhbHVlIGV4Y2VwdGlvbjsKICAgICBl
dmFsdWF0ZShzb3VyY2VDb2RlLCAmZXhjZXB0aW9uKTsKICAgICBpZiAoZXhjZXB0aW9uLmpzVmFs
dWUoKSkgewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxEYXRhKCkpOworICAgICAg
ICBKU0xvY2tIb2xkZXIgbG9jayh2bSgpKTsKICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKG1fd29y
a2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbEV4ZWMoKSwgZXhjZXB0aW9uLmpzVmFsdWUoKSk7CiAg
ICAgfQogfQpAQCAtMTM3LDcgKzEzNyw3IEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6
ZXZhbHVhdGUoY28KICAgICBKU1ZhbHVlIGV2YWx1YXRpb25FeGNlcHRpb247CiAgICAgSlNDOjpl
dmFsdWF0ZShleGVjLCBzb3VyY2VDb2RlLmpzU291cmNlQ29kZSgpLCBtX3dvcmtlckNvbnRleHRX
cmFwcGVyLmdldCgpLCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAKLSAgICBpZiAoKGV2YWx1YXRp
b25FeGNlcHRpb24gJiYgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV2YWx1YXRpb25F
eGNlcHRpb24pKSB8fCAgbV93b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xvYmFsRGF0YSgpLndhdGNo
ZG9nLmRpZEZpcmUoKSkgeworICAgIGlmICgoZXZhbHVhdGlvbkV4Y2VwdGlvbiAmJiBpc1Rlcm1p
bmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oZXZhbHVhdGlvbkV4Y2VwdGlvbikpIHx8ICBtX3dvcmtl
ckNvbnRleHRXcmFwcGVyLT52bSgpLndhdGNoZG9nLmRpZEZpcmUoKSkgewogICAgICAgICBmb3Ji
aWRFeGVjdXRpb24oKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE0Nyw5ICsxNDcsOSBA
QCB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvCiAgICAgICAgIGludCBs
aW5lTnVtYmVyID0gMDsKICAgICAgICAgU3RyaW5nIHNvdXJjZVVSTCA9IHNvdXJjZUNvZGUudXJs
KCkuc3RyaW5nKCk7CiAgICAgICAgIGlmIChtX3dvcmtlckNvbnRleHQtPnNhbml0aXplU2NyaXB0
RXJyb3IoZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwsIHNvdXJjZUNvZGUuY2Fj
aGVkU2NyaXB0KCkpKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IFNjcmlwdFZhbHVlKCptX2ds
b2JhbERhdGEsIHRocm93RXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgZXJyb3JNZXNzYWdl
LmltcGwoKSkpKTsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSBTY3JpcHRWYWx1ZSgqbV92bSwg
dGhyb3dFcnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBlcnJvck1lc3NhZ2UuaW1wbCgpKSkp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gU2NyaXB0VmFsdWUoKm1f
Z2xvYmFsRGF0YSwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisgICAgICAgICAgICAqZXhjZXB0aW9u
ID0gU2NyaXB0VmFsdWUoKm1fdm0sIGV2YWx1YXRpb25FeGNlcHRpb24pOwogICAgIH0KIH0KIApA
QCAtMTY0LDE0ICsxNjQsMTQgQEAgdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpzY2hlZHVs
ZUV4ZQogICAgIC8vIHRlcm1pbmF0aW9uIGlzIHNjaGVkdWxlZCwgaXNFeGVjdXRpb25UZXJtaW5h
dGluZyB3aWxsCiAgICAgLy8gYWNjdXJhdGVseSByZWZsZWN0IHRoYXQgc3RhdGUgd2hlbiBjYWxs
ZWQgZnJvbSBhbm90aGVyIHRocmVhZC4KICAgICBNdXRleExvY2tlciBsb2NrZXIobV9zY2hlZHVs
ZWRUZXJtaW5hdGlvbk11dGV4KTsKLSAgICBtX2dsb2JhbERhdGEtPndhdGNoZG9nLmZpcmUoKTsK
KyAgICBtX3ZtLT53YXRjaGRvZy5maXJlKCk7CiB9CiAKIGJvb2wgV29ya2VyU2NyaXB0Q29udHJv
bGxlcjo6aXNFeGVjdXRpb25UZXJtaW5hdGluZygpIGNvbnN0CiB7CiAgICAgLy8gU2VlIGNvbW1l
bnRzIGluIHNjaGVkdWxlRXhlY3V0aW9uVGVybWluYXRpb24gcmVnYXJkaW5nIG11dGV4IHVzYWdl
LgogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3NjaGVkdWxlZFRlcm1pbmF0aW9uTXV0ZXgpOwot
ICAgIHJldHVybiBtX2dsb2JhbERhdGEtPndhdGNoZG9nLmRpZEZpcmUoKTsKKyAgICByZXR1cm4g
bV92bS0+d2F0Y2hkb2cuZGlkRmlyZSgpOwogfQogCiB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xs
ZXI6OmZvcmJpZEV4ZWN1dGlvbigpCkBAIC0xODksNyArMTg5LDcgQEAgYm9vbCBXb3JrZXJTY3Jp
cHRDb250cm9sbGVyOjppc0V4ZWN1dGlvbgogdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpk
aXNhYmxlRXZhbChjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKIHsKICAgICBpbml0U2NyaXB0
SWZOZWVkZWQoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxEYXRhKCkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKHZtKCkpOwogCiAgICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci0+c2V0
RXZhbEVuYWJsZWQoZmFsc2UsIGVycm9yTWVzc2FnZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oCShyZXZpc2lv
biAxNDg2ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250
cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewotICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsK
KyAgICBjbGFzcyBWTTsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzcsNyArNzcsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBkaXNhYmxlRXZhbChjb25zdCBT
dHJpbmcmIGVycm9yTWVzc2FnZSk7CiAKLSAgICAgICAgSlNDOjpKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEoKSB7IHJldHVybiBtX2dsb2JhbERhdGEuZ2V0KCk7IH0KKyAgICAgICAgSlNDOjpWTSog
dm0oKSB7IHJldHVybiBtX3ZtLmdldCgpOyB9CiAKICAgICAgICAgdm9pZCBhdHRhY2hEZWJ1Z2dl
cihKU0M6OkRlYnVnZ2VyKik7CiAgICAgICAgIHZvaWQgZGV0YWNoRGVidWdnZXIoSlNDOjpEZWJ1
Z2dlciopOwpAQCAtOTAsNyArOTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH0K
ICAgICAgICAgdm9pZCBpbml0U2NyaXB0KCk7CiAKLSAgICAgICAgUmVmUHRyPEpTQzo6SlNHbG9i
YWxEYXRhPiBtX2dsb2JhbERhdGE7CisgICAgICAgIFJlZlB0cjxKU0M6OlZNPiBtX3ZtOwogICAg
ICAgICBXb3JrZXJDb250ZXh0KiBtX3dvcmtlckNvbnRleHQ7CiAgICAgICAgIEpTQzo6U3Ryb25n
PEpTV29ya2VyQ29udGV4dD4gbV93b3JrZXJDb250ZXh0V3JhcHBlcjsKICAgICAgICAgYm9vbCBt
X2V4ZWN1dGlvbkZvcmJpZGRlbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dv
cmtlclNjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDE0ODY4MykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTQgKzY4LDE0IEBAIHZvaWQgV29ya2VyU2NyaXB0RGVi
dWdTZXJ2ZXI6OndpbGxFeGVjdXQKIAogdm9pZCBXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlcjo6cmVj
b21waWxlQWxsSlNGdW5jdGlvbnMoVGltZXI8U2NyaXB0RGVidWdTZXJ2ZXI+KikKIHsKLSAgICBK
U0M6OkpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IG1fd29ya2VyQ29udGV4dC0+c2NyaXB0KCkt
Pmdsb2JhbERhdGEoKTsKKyAgICBKU0M6OlZNKiB2bSA9IG1fd29ya2VyQ29udGV4dC0+c2NyaXB0
KCktPnZtKCk7CiAKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbERhdGEpOworICAg
IEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIC8vIElmIEphdmFTY3JpcHQgc3RhY2sg
aXMgbm90IGVtcHR5IHBvc3Rwb25lIHJlY29tcGlsYXRpb24uCi0gICAgaWYgKGdsb2JhbERhdGEt
PmR5bmFtaWNHbG9iYWxPYmplY3QpCisgICAgaWYgKHZtLT5keW5hbWljR2xvYmFsT2JqZWN0KQog
ICAgICAgICByZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKTsKICAgICBlbHNlCi0gICAgICAg
IEpTQzo6RGVidWdnZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKGdsb2JhbERhdGEpOworICAg
ICAgICBKU0M6OkRlYnVnZ2VyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyh2bSk7CiB9CiAKIHZv
aWQgV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUxpc3RlbmVyKFNjcmlwdERlYnVnTGlz
dGVuZXIqIGxpc3RlbmVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJT
Y3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2Jq
Yy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MzIs
NyArNTMyLDcgQEAgKyAoaWQpX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOihKU0M6OkpTVgogewog
ICAgIGlmICh2YWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBh
c09iamVjdCh2YWx1ZSk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHJvb3RPYmplY3QtPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dm0oKSk7CiAKICAgICAgICAgaWYgKG9iamVjdC0+
aW5oZXJpdHMoJkpTSFRNTEVsZW1lbnQ6OnNfaW5mbykpIHsKICAgICAgICAgICAgIC8vIFBsdWdp
biBlbGVtZW50cyBjYWNoZSB0aGUgaW5zdGFuY2UgaW50ZXJuYWxseS4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZp
c2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtNzMzLDE5ICs3MzMsMTkgQEAgc3ViIEdlbmVy
YXRlSGVhZGVyCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgInB1YmxpYzpcbiIpOwogICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgdHlwZWRlZiAkcGFyZW50Q2xhc3NOYW1lIEJhc2U7XG4i
KTsKICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKLSAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgJGNsYXNzTmFtZSogY3JlYXRlKEpTQzo6SlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVm
UHRyPCRpbXBsVHlwZT4gaW1wbCwgSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwpXG4iKTsK
KyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgJGNsYXNzTmFtZSogY3Jl
YXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPCRp
bXBsVHlwZT4gaW1wbCwgSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwpXG4iKTsKICAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICAgICAgJGNsYXNzTmFtZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFs
bG9jYXRlQ2VsbDwkY2xhc3NOYW1lPihnbG9iYWxEYXRhLmhlYXApKSAke2NsYXNzTmFtZX0oZ2xv
YmFsRGF0YSwgc3RydWN0dXJlLCBpbXBsLCB3aW5kb3dTaGVsbCk7XG4iKTsKLSAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRh
LCB3aW5kb3dTaGVsbCk7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAg
ICAgZ2xvYmFsRGF0YS5oZWFwLmFkZEZpbmFsaXplcihwdHIsIGRlc3Ryb3kpO1xuIik7CisgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgICRjbGFzc05hbWUqIHB0ciA9IG5ldyAo
Tm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8JGNsYXNzTmFtZT4odm0uaGVhcCkpICR7Y2xhc3NO
YW1lfSh2bSwgc3RydWN0dXJlLCBpbXBsLCB3aW5kb3dTaGVsbCk7XG4iKTsKKyAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgd2luZG93
U2hlbGwpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIHZtLmhl
YXAuYWRkRmluYWxpemVyKHB0ciwgZGVzdHJveSk7XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICAgICAgcmV0dXJuIHB0cjtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIH1cblxuIik7CiAgICAgfSBlbHNpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IklzV29ya2VyQ29udGV4dCJ9KSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgc3RhdGljICRjbGFzc05hbWUqIGNyZWF0ZShKU0M6OkpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjwkaW1wbFR5
cGU+IGltcGwpXG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMg
JGNsYXNzTmFtZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
LCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4gaW1wbClcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIHtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAg
ICAkY2xhc3NOYW1lKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPCRjbGFz
c05hbWU+KGdsb2JhbERhdGEuaGVhcCkpICR7Y2xhc3NOYW1lfShnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUsIGltcGwpO1xuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIHB0
ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLmFkZEZpbmFsaXplcihwdHIsIGRlc3Ry
b3kpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgICRjbGFzc05h
bWUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8JGNsYXNzTmFtZT4odm0u
aGVhcCkpICR7Y2xhc3NOYW1lfSh2bSwgc3RydWN0dXJlLCBpbXBsKTtcbiIpOworICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTtcbiIp
OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICB2bS5oZWFwLmFkZEZpbmFs
aXplcihwdHIsIGRlc3Ryb3kpO1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgICAgIHJldHVybiBwdHI7XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICB9XG5cbiIpOwogICAgIH0gZWxzaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIn0pIHsKQEAgLTc1MywxNiArNzUzLDE2IEBAIHN1YiBH
ZW5lcmF0ZUhlYWRlcgogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyAk
Y2xhc3NOYW1lKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjwkaW1wbFR5cGU+IGltcGwpXG4iKTsKICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB7XG4iKTsKICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICAgICAgZ2xvYmFsT2JqZWN0LT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludCgpLT5ub3RpZnlXcml0ZSgpO1xuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgICAgICRjbGFzc05hbWUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxv
Y2F0ZUNlbGw8JGNsYXNzTmFtZT4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkpICRj
bGFzc05hbWUoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpO1xuIik7Ci0gICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxEYXRhKCkpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgICAgICRjbGFzc05hbWUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
JGNsYXNzTmFtZT4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSAkY2xhc3NOYW1lKHN0cnVjdHVy
ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7XG4iKTsK
ICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHB0cjtcbiIpOwog
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIH1cblxuIik7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgQWRkSW5jbHVkZXNGb3JUeXBlSW5IZWFkZXIoJGltcGxUeXBlKSB1bmxlc3MgJHN2
Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIHN0YXRpYyAkY2xhc3NOYW1lKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjwkaW1wbFR5cGU+
IGltcGwpXG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB7XG4iKTsKLSAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgJGNsYXNzTmFtZSogcHRyID0gbmV3
IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDwkY2xhc3NOYW1lPihnbG9iYWxPYmplY3QtPmds
b2JhbERhdGEoKS5oZWFwKSkgJGNsYXNzTmFtZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1w
bCk7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcHRyLT5maW5p
c2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7XG4iKTsKKyAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgJGNsYXNzTmFtZSogcHRyID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDwkY2xhc3NOYW1lPihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkp
ICRjbGFzc05hbWUoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpO1xuIik7CisgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
T2JqZWN0LT52bSgpKTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAg
ICByZXR1cm4gcHRyO1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgfVxu
XG4iKTsKICAgICB9CkBAIC04NDMsMTIgKzg0MywxMiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAg
ICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKICAgICAgICAgJHN0cnVjdHVy
ZUZsYWdzeyJKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSJ9ID0gMTsKICAgICB9Ci0gICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKVxuIik7CisgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKVxuIik7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB7XG4iKTsK
ICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIgfHwgJGludGVyZmFjZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IklzV29ya2VyQ29udGV4dCJ9KSB7Ci0gICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6R2xvYmFs
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTtcbiIpOworICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpHbG9iYWxPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pO1xuIik7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pO1xuIik7CisgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7XG4iKTsKICAgICB9CiAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiAgICB9XG5cbiIpOwogCkBAIC05NzksMTIgKzk3OSwxMiBAQCBz
dWIgR2VuZXJhdGVIZWFkZXIKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHJvdGVjdGVkOlxu
Iik7CiAgICAgIyBDb25zdHJ1Y3RvcgogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2lu
ZG93IikgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRjbGFzc05hbWUoSlND
OjpKU0dsb2JhbERhdGEmLCBKU0M6OlN0cnVjdHVyZSosIFBhc3NSZWZQdHI8JGltcGxUeXBlPiwg
SlNET01XaW5kb3dTaGVsbCopO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgJGNsYXNzTmFtZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPCRpbXBs
VHlwZT4sIEpTRE9NV2luZG93U2hlbGwqKTtcbiIpOwogICAgIH0gZWxzaWYgKCRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJc1dvcmtlckNvbnRleHQifSkgewotICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiICAgICRjbGFzc05hbWUoSlNDOjpKU0dsb2JhbERhdGEmLCBKU0M6
OlN0cnVjdHVyZSosIFBhc3NSZWZQdHI8JGltcGxUeXBlPik7XG4iKTsKKyAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSos
IFBhc3NSZWZQdHI8JGltcGxUeXBlPik7XG4iKTsKICAgICB9IGVsc2UgewogICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiICAgICRjbGFzc05hbWUoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUds
b2JhbE9iamVjdCosIFBhc3NSZWZQdHI8JGltcGxUeXBlPik7XG4iKTsKLSAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6SlNHbG9iYWxEYXRh
Jik7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTQzo6Vk0mKTtcbiIpOwogICAgIH0KIAogICAgICMgc3RydWN0dXJlIGZsYWdzCkBA
IC0xMDYzLDcgKzEwNjMsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICB9CiAgICAgaWYgKCEk
aGFzUGFyZW50IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0dlbmVyYXRl
VG9OYXRpdmVPYmplY3QifSkgewogICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIk5vZGVG
aWx0ZXIiKSB7Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiUGFzc1JlZlB0cjxO
b2RlRmlsdGVyPiB0b05vZGVGaWx0ZXIoSlNDOjpKU0dsb2JhbERhdGEmLCBKU0M6OkpTVmFsdWUp
O1xuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiUGFzc1JlZlB0cjxOb2Rl
RmlsdGVyPiB0b05vZGVGaWx0ZXIoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7XG4iKTsKICAgICAg
ICAgfSBlbHNpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVN0cmluZ0xpc3QiKSB7CiAgICAgICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiB0b0RP
TVN0cmluZ0xpc3QoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpO1xuIik7CiAgICAgICAg
IH0gZWxzZSB7CkBAIC0xMDg1LDEwICsxMDg1LDEwIEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxm
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopO1xuIik7CiAgICAgfQogCi0g
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgJHtjbGFzc05hbWV9UHJvdG90eXBl
KiBjcmVhdGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSlcbiIpOworICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljICR7Y2xhc3NOYW1lfVByb3RvdHlwZSogY3Jl
YXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpXG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAg
IHtcbiIpOwotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgICR7Y2xhc3NOYW1lfVBy
b3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDwke2NsYXNzTmFt
ZX1Qcm90b3R5cGU+KGdsb2JhbERhdGEuaGVhcCkpICR7Y2xhc3NOYW1lfVByb3RvdHlwZShnbG9i
YWxEYXRhLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7XG4iKTsKLSAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpO1xuIik7Cisg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgJHtjbGFzc05hbWV9UHJvdG90eXBlKiBw
dHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPCR7Y2xhc3NOYW1lfVByb3RvdHlw
ZT4odm0uaGVhcCkpICR7Y2xhc3NOYW1lfVByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUpO1xuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcHRyLT5maW5p
c2hDcmVhdGlvbih2bSk7XG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICBy
ZXR1cm4gcHRyO1xuIik7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB9XG5cbiIpOwog
CkBAIC0xMTAyLDkgKzExMDIsOSBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgJHN0cnVj
dHVyZUZsYWdzeyJKU0M6Ok92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4ifSA9IDE7CiAgICAgfQogICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsCi0gICAgICAgICIgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSlcbiIgLgor
ICAgICAgICAiICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpXG4iIC4KICAgICAgICAgIiAgICB7XG4iIC4KLSAgICAgICAgIiAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pO1xuIiAuCisgICAgICAgICIgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7XG4iIC4KICAgICAgICAgIiAgICB9XG4i
KTsKICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tTmFt
ZWRHZXR0ZXJPblByb3RvdHlwZSJ9KSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgc3RhdGljIHZvaWQgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlBy
b3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpO1xuIik7CkBA
IC0xMTE1LDcgKzExMTUsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3Jp
cHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkpTQ3VzdG9tRGVmaW5lT3duUHJvcGVydHlPblByb3RvdHlwZSJ9OwogCiAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIlxucHJpdmF0ZTpcbiIpOwotICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgJHtjbGFzc05hbWV9UHJvdG90eXBlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkg
OiBKU0M6OkpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKSB7IH1cbiIpOwor
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9UHJvdG90eXBlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkg
OiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9XG4iKTsKIAogICAgICMg
c3RydWN0dXJlIGZsYWdzCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgInByb3RlY3RlZDpcbiIp
OwpAQCAtMTcwNyw3ICsxNzA3LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBp
ZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTTm9TdGF0aWNUYWJsZXMifSkg
ewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGdl
dCR7Y2xhc3NOYW1lfVByb3RvdHlwZVRhYmxlKEV4ZWNTdGF0ZSogZXhlYylcbiIpOwogICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICByZXR1cm4gZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShleGVjLT5nbG9iYWxEYXRhKCks
ICYke2NsYXNzTmFtZX1Qcm90b3R5cGVUYWJsZSk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgcmV0dXJuIGdldEhhc2hUYWJsZUZvckdsb2JhbERhdGEoZXhlYy0+dm0oKSwg
JiR7Y2xhc3NOYW1lfVByb3RvdHlwZVRhYmxlKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIn1cblxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiY29uc3QgQ2xhc3NJ
bmZvICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6c19pbmZvID0geyBcIiR7dmlzaWJsZUludGVyZmFj
ZU5hbWV9UHJvdG90eXBlXCIsICZCYXNlOjpzX2luZm8sIDAsIGdldCR7Y2xhc3NOYW1lfVByb3Rv
dHlwZVRhYmxlLCBDUkVBVEVfTUVUSE9EX1RBQkxFKCR7Y2xhc3NOYW1lfVByb3RvdHlwZSkgfTtc
blxuIik7CiAgICAgfSBlbHNlIHsKQEAgLTE3NjYsNyArMTc2Niw3IEBAIHN1YiBHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uCiAgICAgaWYgKCRudW1BdHRyaWJ1dGVzID4gMCAmJiAkaW50ZXJmYWNlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNOb1N0YXRpY1RhYmxlcyJ9KSB7CiAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAic3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZ2V0JHtjbGFzc05hbWV9VGFi
bGUoRXhlY1N0YXRlKiBleGVjKVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xu
Iik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBnZXRIYXNoVGFibGVG
b3JHbG9iYWxEYXRhKGV4ZWMtPmdsb2JhbERhdGEoKSwgJiR7Y2xhc3NOYW1lfVRhYmxlKTtcbiIp
OworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gZ2V0SGFzaFRhYmxlRm9y
R2xvYmFsRGF0YShleGVjLT52bSgpLCAmJHtjbGFzc05hbWV9VGFibGUpO1xuIik7CiAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICB9CiAKQEAgLTE3OTUsMTQgKzE3OTUs
MTQgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAjIENvbnN0cnVjdG9yCiAgICAg
aWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7CiAgICAgICAgIEFkZEluY2x1ZGVz
Rm9yVHlwZUluSW1wbCgiSlNET01XaW5kb3dTaGVsbCIpOwotICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiR7Y2xhc3NOYW1lfTo6JGNsYXNzTmFtZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4gaW1wbCwgSlNET01X
aW5kb3dTaGVsbCogc2hlbGwpXG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
OiAkcGFyZW50Q2xhc3NOYW1lKGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgaW1wbCwgc2hlbGwpXG4i
KTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06OiRjbGFzc05hbWUo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjwkaW1wbFR5cGU+IGltcGws
IEpTRE9NV2luZG93U2hlbGwqIHNoZWxsKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIDogJHBhcmVudENsYXNzTmFtZSh2bSwgc3RydWN0dXJlLCBpbXBsLCBzaGVsbClcbiIp
OwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIn1cblxuIik7CiAgICAgfSBlbHNpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IklzV29ya2VyQ29udGV4dCJ9KSB7CiAgICAgICAgIEFkZEluY2x1ZGVzRm9yVHlw
ZUluSW1wbCgkaW50ZXJmYWNlTmFtZSk7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtj
bGFzc05hbWV9OjokY2xhc3NOYW1lKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8JGltcGxUeXBlPiBpbXBsKVxuIik7Ci0gICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIDogJHBhcmVudENsYXNzTmFtZShnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUsIGltcGwpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFt
ZX06OiRjbGFzc05hbWUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjwk
aW1wbFR5cGU+IGltcGwpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgOiAk
cGFyZW50Q2xhc3NOYW1lKHZtLCBzdHJ1Y3R1cmUsIGltcGwpXG4iKTsKICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIp
OwogICAgIH0gZWxzZSB7CkBAIC0xODE2LDEyICsxODE2LDEyIEBAIHN1YiBHZW5lcmF0ZUltcGxl
bWVudGF0aW9uCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKIAotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
InZvaWQgJHtjbGFzc05hbWV9OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtKVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
e1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTtcbiIpOwogICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3It
PklzVHlwZWRBcnJheVR5cGUoJGltcGxUeXBlKSBhbmQgKCRpbXBsVHlwZSBuZSAiQXJyYXlCdWZm
ZXJWaWV3IikgYW5kICgkaW1wbFR5cGUgbmUgIkFycmF5QnVmZmVyIikpIHsKICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIGRlc2NyaXB0b3Io
JiR7Y2xhc3NOYW1lfTo6c19pbmZvLCBPQkpFQ1RfT0ZGU0VUT0YoJHtjbGFzc05hbWV9LCBtX3N0
b3JhZ2UpLCBPQkpFQ1RfT0ZGU0VUT0YoJHtjbGFzc05hbWV9LCBtX3N0b3JhZ2VMZW5ndGgpKTtc
biIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgZ2xvYmFsRGF0YS5yZWdp
c3RlclR5cGVkQXJyYXlEZXNjcmlwdG9yKGltcGwoKSwgZGVzY3JpcHRvcik7XG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHZtLnJlZ2lzdGVyVHlwZWRBcnJheURlc2Ny
aXB0b3IoaW1wbCgpLCBkZXNjcmlwdG9yKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgbV9zdG9yYWdlID0gaW1wbCgpLT5kYXRhKCk7XG4iKTsKICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIG1fc3RvcmFnZUxlbmd0aCA9IGltcGwoKS0+bGVuZ3Ro
KCk7XG4iKTsKICAgICAgICAgfQpAQCAtMTgzMywxMCArMTgzMywxMCBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTT2JqZWN0KiAke2Ns
YXNzTmFtZX06OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsK
ICAgICAgICAgaWYgKCRoYXNQYXJlbnQgJiYgJHBhcmVudENsYXNzTmFtZSBuZSAiSlNDOjpET01O
b2RlRmlsdGVyIikgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJu
ICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFs
T2JqZWN0LCAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9i
YWxEYXRhKCksIGdsb2JhbE9iamVjdCwgJHtwYXJlbnRDbGFzc05hbWV9UHJvdG90eXBlOjpzZWxm
KGV4ZWMsIGdsb2JhbE9iamVjdCkpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgcmV0dXJuICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCks
IGdsb2JhbE9iamVjdCwgJHtjbGFzc05hbWV9UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCAke3BhcmVudENsYXNzTmFtZX1Qcm90b3R5cGU6OnNlbGYo
ZXhlYywgZ2xvYmFsT2JqZWN0KSkpO1xuIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBteSAkcHJvdG90eXBlID0gJGludGVyZmFjZS0+aXNFeGNlcHRpb24gPyAiZXJyb3JQcm90b3R5
cGUiIDogIm9iamVjdFByb3RvdHlwZSI7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICByZXR1cm4gJHtjbGFzc05hbWV9UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBnbG9iYWxPYmplY3QsICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJl
KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+
JHtwcm90b3R5cGV9KCkpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgcmV0dXJuICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGdsb2Jh
bE9iamVjdCwgJHtjbGFzc05hbWV9UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2Jq
ZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+JHtwcm90b3R5cGV9KCkpKTtc
biIpOwogICAgICAgICB9CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKICAg
ICB9CkBAIC0yMDYwLDcgKzIwNjAsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgY2FzdGVkVGhpcy0+bV8iIC4gJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIC4gIi5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBjYXN0
ZWRUaGlzLCByZXN1bHQpO1xuIikgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkNhY2hlZEF0dHJpYnV0ZSJ9KTsKKyAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgY2FzdGVkVGhpcy0+bV8iIC4gJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT5uYW1lIC4gIi5zZXQoZXhlYy0+dm0oKSwgY2FzdGVkVGhpcywgcmVzdWx0KTtcbiIpIGlm
ICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWNoZWRBdHRy
aWJ1dGUifSk7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJl
dHVybiByZXN1bHQ7XG4iKTsKIAogICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yMjMzLDEz
ICsyMjMzLDEzIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciICYmICRjbGFzc05hbWUgZXEgIkpTYmxh
aCIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRklYTUU6IFRoaXMg
YnJhbmNoIG5ldmVyIGV4ZWN1dGVzIGFuZCBzaG91bGQgYmUgcmVtb3ZlZC4KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGpzQ2FzdDwk
Y2xhc3NOYW1lKj4odGhpc09iamVjdCktPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdmFsdWUpO1xuIik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBqc0Nhc3Q8
JGNsYXNzTmFtZSo+KHRoaXNPYmplY3QpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2YWx1ZSk7XG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGpzQ2FzdDwkY2xhc3NOYW1lKj4odGhpc09iamVj
dCktPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgXCIkbmFt
ZVwiKSwgdmFsdWUpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBqc0Nhc3Q8JGNsYXNzTmFtZSo+KHRoaXNPYmplY3QpLT5w
dXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCBcIiRuYW1lXCIpLCB2YWx1ZSk7
XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IlJlcGxhY2VhYmxlIn0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gb2JqZWN0
XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAganNDYXN0PCRjbGFzc05hbWUqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KGV4ZWMtPmds
b2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCBcIiRuYW1lXCIpLCB2YWx1ZSk7XG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAganND
YXN0PCRjbGFzc05hbWUqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50
aWZpZXIoZXhlYywgXCIkbmFtZVwiKSwgdmFsdWUpO1xuIik7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEk
YXR0cmlidXRlLT5pc1N0YXRpYykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGNsYXNzTmFtZSogY2FzdGVkVGhpcyA9IGpzQ2Fz
dDwkY2xhc3NOYW1lKj4odGhpc09iamVjdCk7XG4iKTsKQEAgLTIzNTAsNyArMjM1MCw3IEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3JcbiIpOwogCiAgICAg
ICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGpzQ2FzdDwkY2xhc3NOYW1lKj4o
dGhpc09iamVjdCktPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5jb25zdHJ1Y3RvciwgdmFsdWUpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGpzQ2FzdDwkY2xhc3NOYW1lKj4odGhpc09iamVjdCktPnB1
dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHZh
bHVlKTtcbiIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
IGRpZSAiTm8gd2F5IHRvIGhhbmRsZSBpbnRlcmZhY2Ugd2l0aCBSZXBsYWNlYWJsZUNvbnN0cnVj
dG9yIGV4dGVuZGVkIGF0dHJpYnV0ZTogJGludGVyZmFjZU5hbWUiOwogICAgICAgICAgICAgICAg
IH0KQEAgLTMxOTIsNyArMzE5Miw3IEBAIEVORAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgaWYgKCFjYW5JbnZva2VDYWxsYmFjaygpKVxuIik7CiAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiIpOwogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPCRjbGFzc05hbWU+IHByb3RlY3QodGhpcyk7
XG5cbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNMb2NrSG9sZGVy
IGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTtcblxuIik7CisgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEt
Pmdsb2JhbE9iamVjdCgpLT52bSgpKTtcblxuIik7CiAgICAgICAgICAgICBpZiAoQHBhcmFtcykg
ewogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTtcbiIpOwogICAgICAgICAg
ICAgfQpAQCAtMzQyOCwxNyArMzQyOCwxNyBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAgICAgfQog
CiAgICAgaWYgKCR0eXBlIGVxICJhbnkiKSB7Ci0gICAgICAgIHJldHVybiAiZXhlYy0+Z2xvYmFs
RGF0YSgpLCAkdmFsdWUiOworICAgICAgICByZXR1cm4gImV4ZWMtPnZtKCksICR2YWx1ZSI7CiAg
ICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJOb2RlRmlsdGVyIikgewogICAgICAgICBBZGRUb0lt
cGxJbmNsdWRlcygiSlMkdHlwZS5oIiwgJGNvbmRpdGlvbmFsKTsKLSAgICAgICAgcmV0dXJuICJ0
byR0eXBlKGV4ZWMtPmdsb2JhbERhdGEoKSwgJHZhbHVlKSI7CisgICAgICAgIHJldHVybiAidG8k
dHlwZShleGVjLT52bSgpLCAkdmFsdWUpIjsKICAgICB9CiAKICAgICBpZiAoJHR5cGUgZXEgIk1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIiKSB7CiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyLmgiLCAkY29uZGl0aW9uYWwpOwotICAgICAgICByZXR1cm4gIk1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmNyZWF0ZShTY3JpcHRWYWx1ZShleGVjLT5nbG9iYWxEYXRh
KCksICIgLiAkdmFsdWUgLiIpKSI7CisgICAgICAgIHJldHVybiAiTWVkaWFRdWVyeUxpc3RMaXN0
ZW5lcjo6Y3JlYXRlKFNjcmlwdFZhbHVlKGV4ZWMtPnZtKCksICIgLiAkdmFsdWUgLiIpKSI7CiAg
ICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiKSB7CkBAIC0z
ODU2LDkgKzM4NTYsOSBAQCBzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckRlY2xhcmF0aW9uCiAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwg
SlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTtcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvO1xuIik7CiAKLSAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSlcbiIpOworICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKVxuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHtcbiIpOwotICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVh
dGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pO1xuIik7CisgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pO1xuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIH1cbiIpOwogCiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAicHJvdGVjdGVkOlxuIik7CkBA
IC0zOTAxLDkgKzM5MDEsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsK
ICAgICB9CiAKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6
OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNf
aW5mbzsKQEAgLTQxOTQsNyArNDE5NCw3IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9ySGVscGVy
TWV0aG9kcwogICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpT
Tm9TdGF0aWNUYWJsZXMifSkgewogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAic3Rh
dGljIGNvbnN0IEhhc2hUYWJsZSogZ2V0JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX1UYWJsZShFeGVj
U3RhdGUqIGV4ZWMpXG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIp
OwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBnZXRIYXNoVGFi
bGVGb3JHbG9iYWxEYXRhKGV4ZWMtPmdsb2JhbERhdGEoKSwgJiR7Y29uc3RydWN0b3JDbGFzc05h
bWV9VGFibGUpO1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0
dXJuIGdldEhhc2hUYWJsZUZvckdsb2JhbERhdGEoZXhlYy0+dm0oKSwgJiR7Y29uc3RydWN0b3JD
bGFzc05hbWV9VGFibGUpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9
XG5cbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiY29uc3QgQ2xhc3NJbmZv
ICR7Y29uc3RydWN0b3JDbGFzc05hbWV9OjpzX2luZm8gPSB7IFwiJHt2aXNpYmxlSW50ZXJmYWNl
TmFtZX1Db25zdHJ1Y3RvclwiLCAmQmFzZTo6c19pbmZvLCAwLCBnZXQke2NvbnN0cnVjdG9yQ2xh
c3NOYW1lfVRhYmxlLCBDUkVBVEVfTUVUSE9EX1RBQkxFKCRjb25zdHJ1Y3RvckNsYXNzTmFtZSkg
fTtcblxuIik7CiAgICAgICAgIH0gZWxzZSB7CkBAIC00MjA5LDE5ICs0MjA5LDE5IEBAIHN1YiBH
ZW5lcmF0ZUNvbnN0cnVjdG9ySGVscGVyTWV0aG9kcwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
InZvaWQgJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdClcbiIpOwogICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIntcbiIpOwogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93
IikgewotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZXhlYy0+Z2xvYmFsRGF0YSgpKTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7XG4iKTsKICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7XG4iKTsKLSAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRh
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIGdsb2JhbE9iamVjdC0+cHJvdG90
eXBlKCksIERvbnREZWxldGUgfCBSZWFkT25seSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
cHJvdG90eXBlLCBnbG9iYWxPYmplY3QtPnByb3RvdHlwZSgpLCBEb250RGVsZXRlIHwgUmVhZE9u
bHkpO1xuIik7CiAgICAgfSBlbHNpZiAoJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yKSB7CiAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9i
YWxPYmplY3QpO1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlQo
aW5oZXJpdHMoJnNfaW5mbykpO1xuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJv
dG90eXBlLCAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwg
Tm9uZSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdChl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCAke2NsYXNzTmFtZX1Q
cm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7XG4iKTsKICAgICB9IGVs
c2UgewotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZXhlYy0+Z2xvYmFsRGF0YSgpKTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7XG4iKTsKICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7XG4iKTsKLSAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRh
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsICR7cHJvdG9DbGFzc05hbWV9Ojpz
ZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7XG4iKTsKKyAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCAke3Byb3RvQ2xhc3NOYW1lfTo6c2VsZihleGVj
LCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpO1xuIik7CiAgICAgfQotICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigke251bWJlck9mQ29uc3RydWN0
b3JQYXJhbWV0ZXJzfSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTtcbiIpIGlm
IGRlZmluZWQgJG51bWJlck9mQ29uc3RydWN0b3JQYXJhbWV0ZXJzOworICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
Lmxlbmd0aCwganNOdW1iZXIoJHtudW1iZXJPZkNvbnN0cnVjdG9yUGFyYW1ldGVyc30pLCBSZWFk
T25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7XG4iKSBpZiBkZWZpbmVkICRudW1iZXJPZkNv
bnN0cnVjdG9yUGFyYW1ldGVyczsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOwog
CiAgICAgaWYgKCEkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3IpIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0Zsb2F0NjRBcnJheS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRmxvYXQ2
NEFycmF5LmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTRmxvYXQ2NEFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUs
NyArNzUsNyBAQCB2b2lkIEpTRmxvYXQ2NEFycmF5OjppbmRleFNldHRlcihKU0M6OkV4CiAKIHN0
YXRpYyBjb25zdCBIYXNoVGFibGUqIGdldEpTRmxvYXQ2NEFycmF5Q29uc3RydWN0b3JUYWJsZShF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGdldEhhc2hUYWJsZUZvckdsb2JhbERhdGEo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCAmSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3RvclRhYmxlKTsKKyAg
ICByZXR1cm4gZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShleGVjLT52bSgpLCAmSlNGbG9hdDY0
QXJyYXlDb25zdHJ1Y3RvclRhYmxlKTsKIH0KIAogY29uc3QgQ2xhc3NJbmZvIEpTRmxvYXQ2NEFy
cmF5Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkZsb2F0NjRBcnJheUNvbnN0cnVjdG9yIiwgJkJh
c2U6OnNfaW5mbywgMCwgZ2V0SlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3RvclRhYmxlLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTRmxvYXQ2NEFycmF5Q29uc3RydWN0b3IpIH07CkBAIC04NywxMCArODcs
MTAgQEAgSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3Rvcjo6SlNGbG9hdDY0QXJyYQogCiB2b2lkIEpT
RmxvYXQ2NEFycmF5Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMt
PnZtKCkpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgcHV0RGlyZWN0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNGbG9h
dDY0QXJyYXlQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigxMjMpLCBSZWFkT25seSB8IERvbnREZWxldGUg
fCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUsIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2Jh
bE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZt
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEyMyksIFJlYWRPbmx5
IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KIAogYm9vbCBKU0Zsb2F0NjRBcnJheUNvbnN0
cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAgLTEyMSw3
ICsxMjEsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNGbG9hdDY0QXJyCiBzdGF0
aWMgY29uc3QgSGFzaFRhYmxlIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlVGFibGUgPSB7IDQsIDMs
IEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlVGFibGVWYWx1ZXMsIDAgfTsKIHN0YXRpYyBjb25zdCBI
YXNoVGFibGUqIGdldEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlVGFibGUoRXhlY1N0YXRlKiBleGVj
KQogewotICAgIHJldHVybiBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKGV4ZWMtPmdsb2JhbERh
dGEoKSwgJkpTRmxvYXQ2NEFycmF5UHJvdG90eXBlVGFibGUpOworICAgIHJldHVybiBnZXRIYXNo
VGFibGVGb3JHbG9iYWxEYXRhKGV4ZWMtPnZtKCksICZKU0Zsb2F0NjRBcnJheVByb3RvdHlwZVRh
YmxlKTsKIH0KIAogY29uc3QgQ2xhc3NJbmZvIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlOjpzX2lu
Zm8gPSB7ICJGbG9hdDY0QXJyYXlQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAwLCBnZXRKU0Zs
b2F0NjRBcnJheVByb3RvdHlwZVRhYmxlLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRmxvYXQ2NEFy
cmF5UHJvdG90eXBlKSB9OwpAQCAtMTQ1LDcgKzE0NSw3IEBAIGJvb2wgSlNGbG9hdDY0QXJyYXlQ
cm90b3R5cGU6OmdldE93blByb3AKIAogc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZ2V0SlNGbG9h
dDY0QXJyYXlUYWJsZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGdldEhhc2hUYWJs
ZUZvckdsb2JhbERhdGEoZXhlYy0+Z2xvYmFsRGF0YSgpLCAmSlNGbG9hdDY0QXJyYXlUYWJsZSk7
CisgICAgcmV0dXJuIGdldEhhc2hUYWJsZUZvckdsb2JhbERhdGEoZXhlYy0+dm0oKSwgJkpTRmxv
YXQ2NEFycmF5VGFibGUpOwogfQogCiBjb25zdCBDbGFzc0luZm8gSlNGbG9hdDY0QXJyYXk6OnNf
aW5mbyA9IHsgIkZsb2F0NjRBcnJheSIsICZCYXNlOjpzX2luZm8sIDAsIGdldEpTRmxvYXQ2NEFy
cmF5VGFibGUgLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRmxvYXQ2NEFycmF5KSB9OwpAQCAtMTU1
LDExICsxNTUsMTEgQEAgSlNGbG9hdDY0QXJyYXk6OkpTRmxvYXQ2NEFycmF5KFN0cnVjdHVyZQog
ewogfQogCi12b2lkIEpTRmxvYXQ2NEFycmF5OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCit2b2lkIEpTRmxvYXQ2NEFycmF5OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0p
CiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pOwogICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIGRlc2NyaXB0b3IoJkpT
RmxvYXQ2NEFycmF5OjpzX2luZm8sIE9CSkVDVF9PRkZTRVRPRihKU0Zsb2F0NjRBcnJheSwgbV9z
dG9yYWdlKSwgT0JKRUNUX09GRlNFVE9GKEpTRmxvYXQ2NEFycmF5LCBtX3N0b3JhZ2VMZW5ndGgp
KTsKLSAgICBnbG9iYWxEYXRhLnJlZ2lzdGVyVHlwZWRBcnJheURlc2NyaXB0b3IoaW1wbCgpLCBk
ZXNjcmlwdG9yKTsKKyAgICB2bS5yZWdpc3RlclR5cGVkQXJyYXlEZXNjcmlwdG9yKGltcGwoKSwg
ZGVzY3JpcHRvcik7CiAgICAgbV9zdG9yYWdlID0gaW1wbCgpLT5kYXRhKCk7CiAgICAgbV9zdG9y
YWdlTGVuZ3RoID0gaW1wbCgpLT5sZW5ndGgoKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5m
bykpOwpAQCAtMTY3LDcgKzE2Nyw3IEBAIHZvaWQgSlNGbG9hdDY0QXJyYXk6OmZpbmlzaENyZWF0
aW9uKEpTR2wKIAogSlNPYmplY3QqIEpTRmxvYXQ2NEFycmF5OjpjcmVhdGVQcm90b3R5cGUoRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIHJldHVy
biBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xv
YmFsT2JqZWN0LCBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBKU0FycmF5QnVmZmVyVmlld1Byb3RvdHlwZTo6
c2VsZihleGVjLCBnbG9iYWxPYmplY3QpKSk7CisgICAgcmV0dXJuIEpTRmxvYXQ2NEFycmF5UHJv
dG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBKU0Zsb2F0NjRBcnJheVBy
b3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdCwgSlNBcnJh
eUJ1ZmZlclZpZXdQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSkpOwogfQogCiBi
b29sIEpTRmxvYXQ2NEFycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0Zsb2F0
NjRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU0Zsb2F0NjRBcnJheS5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNGbG9hdDY0QXJyYXkuaAkod29ya2luZyBj
b3B5KQpAQCAtMzMsOCArMzMsOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0FycmF5QnVmZmVy
VmlldyBCYXNlOwogICAgIHN0YXRpYyBKU0Zsb2F0NjRBcnJheSogY3JlYXRlKEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQ
dHI8RmxvYXQ2NEFycmF5PiBpbXBsKQogICAgIHsKLSAgICAgICAgSlNGbG9hdDY0QXJyYXkqIHB0
ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNGbG9hdDY0QXJyYXk+KGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRGF0YSgpLmhlYXApKSBKU0Zsb2F0NjRBcnJheShzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCwgaW1wbCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxEYXRhKCkpOworICAgICAgICBKU0Zsb2F0NjRBcnJheSogcHRyID0gbmV3IChO
b3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU0Zsb2F0NjRBcnJheT4oZ2xvYmFsT2JqZWN0LT52
bSgpLmhlYXApKSBKU0Zsb2F0NjRBcnJheShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7
CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICAg
ICAgcmV0dXJuIHB0cjsKICAgICB9CiAKQEAgLTQ2LDkgKzQ2LDkgQEAgcHVibGljOgogICAgIHN0
YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBz
dGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwogCi0gICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkK
KyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0
YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogICAgIHN0
YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlIG1vZGUg
PSBKU0M6OkV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOwpAQCAtNjIsNyArNjIsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCogbV9zdG9yYWdlOwogcHJvdGVjdGVkOgogICAgIEpTRmxvYXQ2NEFycmF5
KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPEZsb2F0NjRB
cnJheT4pOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpKU0dsb2JhbERhdGEmKTsKKyAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEJhc2U6OlN0cnVjdHVyZUZs
YWdzOwogICAgIEpTQzo6SlNWYWx1ZSBnZXRCeUluZGV4KEpTQzo6RXhlY1N0YXRlKiwgdW5zaWdu
ZWQgaW5kZXgpOwogICAgIHZvaWQgaW5kZXhTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBpbmRleCwgSlNDOjpKU1ZhbHVlKTsKQEAgLTc1LDIzICs3NSwyMyBAQCBjbGFzcyBKU0Zsb2F0
NjRBcnJheVByb3RvdHlwZSA6IHB1YmxpYyBKCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0M6OkpT
Tm9uRmluYWxPYmplY3QgQmFzZTsKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNGbG9hdDY0
QXJyYXlQcm90b3R5cGUqIGNyZWF0ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
KQorICAgIHN0YXRpYyBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiAgICAgewotICAgICAgICBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZSogcHRyID0gbmV3
IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU0Zsb2F0NjRBcnJheVByb3RvdHlwZT4oZ2xv
YmFsRGF0YS5oZWFwKSkgSlNGbG9hdDY0QXJyYXlQcm90b3R5cGUoZ2xvYmFsRGF0YSwgZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOworICAgICAgICBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDxKU0Zsb2F0NjRBcnJheVByb3RvdHlwZT4odm0uaGVhcCkpIEpT
RmxvYXQ2NEFycmF5UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0K
IAogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgc3RhdGljIEpT
Qzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJv
dG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAog
cHJpdmF0ZToKLSAgICBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZShKU0M6OkpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1
cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkgeyB9Cisg
ICAgSlNGbG9hdDY0QXJyYXlQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2
bSwgc3RydWN0dXJlKSB7IH0KIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6
OlN0cnVjdHVyZUZsYWdzOwogfTsKQEAgLTExMyw5ICsxMTMsOSBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3Rh
dGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAg
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogcHJvdGVjdGVkOgog
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25z
dHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZl
RE9NT2JqZWN0LmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYwLDkgKzYwLDkgQEAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3I6OkpT
VGVzdAogCiB2b2lkIEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yOjpmaW5pc2hDcmVh
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7
Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5m
bykpOwotICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUsIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZTo6c2VsZihleGVj
LCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdChl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RBY3RpdmVE
T01PYmplY3RQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5KTsKIH0KIAogYm9vbCBKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3Rvcjo6
Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC0xMTIsMTUgKzExMiwx
NSBAQCBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OkpTVGVzdEFjdGl2ZURPTU9iCiB7CiB9CiAKLXZv
aWQgSlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCit2b2lkIEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogfQog
CiBKU09iamVjdCogSlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpjcmVhdGVQcm90b3R5cGUoRXhlY1N0
YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIHJldHVybiBK
U1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCks
IGdsb2JhbE9iamVjdCwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlOjpjcmVhdGVTdHJ1
Y3R1cmUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworICAgIHJldHVybiBKU1Rlc3RBY3RpdmVET01PYmpl
Y3RQcm90b3R5cGU6OmNyZWF0ZShleGVjLT52bSgpLCBnbG9iYWxPYmplY3QsIEpTVGVzdEFjdGl2
ZURPTU9iamVjdFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+dm0oKSwg
Z2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKIHZv
aWQgSlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURP
TU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw4IEBAIHB1YmxpYzoKICAgICB0eXBlZGVm
IEpTRE9NV3JhcHBlciBCYXNlOwogICAgIHN0YXRpYyBKU1Rlc3RBY3RpdmVET01PYmplY3QqIGNy
ZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBQYXNzUmVmUHRyPFRlc3RBY3RpdmVET01PYmplY3Q+IGltcGwpCiAgICAgewotICAg
ICAgICBKU1Rlc3RBY3RpdmVET01PYmplY3QqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxv
Y2F0ZUNlbGw8SlNUZXN0QWN0aXZlRE9NT2JqZWN0PihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEo
KS5oZWFwKSkgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBp
bXBsKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERh
dGEoKSk7CisgICAgICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdCogcHRyID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RBY3RpdmVET01PYmplY3Q+KGdsb2JhbE9iamVjdC0+
dm0oKS5oZWFwKSkgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0
LCBpbXBsKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkp
OwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIApAQCAtNDYsOSArNDYsOSBAQCBwdWJsaWM6
CiAgICAgfkpTVGVzdEFjdGl2ZURPTU9iamVjdCgpOwogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNs
YXNzSW5mbyBzX2luZm87CiAKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
JnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBn
ZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKQEAg
LTYxLDcgKzYxLDcgQEAgcHJpdmF0ZToKICAgICBUZXN0QWN0aXZlRE9NT2JqZWN0KiBtX2ltcGw7
CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KEpTQzo6U3RydWN0dXJlKiwg
SlNET01HbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPFRlc3RBY3RpdmVET01PYmplY3Q+KTsKLSAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJik7CisgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0M6OlZNJik7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkludGVyY2Vw
dHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBCYXNl
OjpTdHJ1Y3R1cmVGbGFnczsKIH07CiAKQEAgLTg5LDIzICs4OSwyMyBAQCBjbGFzcyBKU1Rlc3RB
Y3RpdmVET01PYmplY3RQcm90b3R5cGUgOiBwCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0M6OkpT
Tm9uRmluYWxPYmplY3QgQmFzZTsKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0QWN0
aXZlRE9NT2JqZWN0UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICBzdGF0aWMgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKiBjcmVh
dGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIEpTVGVzdEFjdGl2ZURPTU9iamVj
dFByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RB
Y3RpdmVET01PYmplY3RQcm90b3R5cGU+KGdsb2JhbERhdGEuaGVhcCkpIEpTVGVzdEFjdGl2ZURP
TU9iamVjdFByb3RvdHlwZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0g
ICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEpTVGVzdEFj
dGl2ZURPTU9iamVjdFByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRl
Q2VsbDxKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RBY3Rp
dmVET01PYmplY3RQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAg
ICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQog
CiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9i
YWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiBw
cml2YXRlOgotICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZShKU0M6OkpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkg
eyB9CisgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9u
RmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CkBAIC0xMjcsOSArMTI3LDkgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRv
ciYpOwogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87Ci0gICAgc3RhdGlj
IEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUo
Z2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0K
IHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBK
U0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3Rh
bmNlIHwgRE9NQ29uc3RydWN0b3JPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q2FsbGJhY2suY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NSw3ICs2NSw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aE5vUGFyYW0KIAog
ICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9ja0hv
bGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+dm0oKSk7CiAKICAgICBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogCkBAIC04MSw3ICs4MSw3IEBAIGJvb2wgSlNUZXN0Q2Fs
bGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMVAKIAogICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4g
cHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbERhdGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9i
YWxPYmplY3QoKS0+dm0oKSk7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsK
QEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3My
UAogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgSlNM
b2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT52bSgpKTsKIAogICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsK
ICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpAQCAtMTE4LDcgKzExOCw3IEBAIGJvb2wg
SlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aFN0cmluZ0wKIAogICAgIFJlZlB0cjxKU1Rlc3RD
YWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9k
YXRhLT5nbG9iYWxPYmplY3QoKS0+dm0oKSk7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2Rh
dGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZm
ZXIgYXJnczsKQEAgLTEzNiw3ICsxMzYsNyBAQCBib29sIEpTVGVzdENhbGxiYWNrOjpjYWxsYmFj
a1dpdGhCb29sZWFuCiAKICAgICBSZWZQdHI8SlNUZXN0Q2FsbGJhY2s+IHByb3RlY3QodGhpcyk7
CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxE
YXRhKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPnZt
KCkpOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkBAIC0xNTYsNyArMTU2
LDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tSZXF1aXJlc1RoaQogCiAgICAgUmVm
UHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxv
Y2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT52bSgpKTsKIAogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmdzOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXIuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OCw5ICs1OCw5IEBAIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3I6OkpTVGUK
IAogdm9pZCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlv
bihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0g
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykp
OwotICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5wcm90b3R5cGUsIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlOjpzZWxmKGV4ZWMs
IGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KGV4
ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdEN1c3RvbU5h
bWVkR2V0dGVyUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUg
fCBSZWFkT25seSk7CiB9CiAKIGJvb2wgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3Rv
cjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC0xMDksMTUgKzEw
OSwxNSBAQCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6SlNUZXN0Q3VzdG9tTmFtCiB7CiB9CiAK
LXZvaWQgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8p
KTsKIH0KIAogSlNPYmplY3QqIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpjcmVhdGVQcm90b3R5
cGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAg
IHJldHVybiBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPmds
b2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmpl
Y3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKKyAgICByZXR1cm4gSlNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6OmNyZWF0ZShleGVjLT52bSgpLCBnbG9iYWxPYmpl
Y3QsIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xv
YmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90
eXBlKCkpKTsKIH0KIAogdm9pZCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6ZGVzdHJveShKU0M6
OkpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5oCShy
ZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQs
OCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0RPTVdyYXBwZXIgQmFzZTsKICAgICBzdGF0aWMg
SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFRlc3RDdXN0b21O
YW1lZEdldHRlcj4gaW1wbCkKICAgICB7Ci0gICAgICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVy
KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEN1c3RvbU5hbWVk
R2V0dGVyPihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKSkgSlNUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXIoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOwotICAgICAgICBwdHItPmZp
bmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXIqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXIoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOworICAgICAg
ICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CiAgICAgICAgIHJldHVy
biBwdHI7CiAgICAgfQogCkBAIC00Nyw5ICs0Nyw5IEBAIHB1YmxpYzoKICAgICB+SlNUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXIoKTsKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZv
OwogCi0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6
VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOwogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CkBAIC02Miw3ICs2Miw3IEBA
IHByaXZhdGU6CiAgICAgVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBtX2ltcGw7CiBwcm90ZWN0ZWQ6
CiAgICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIFBhc3NSZWZQdHI8VGVzdEN1c3RvbU5hbWVkR2V0dGVyPik7Ci0gICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OkpTR2xvYmFsRGF0YSYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNDOjpWTSYpOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpIYXNJbXB1
cmVHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIHByaXZhdGU6CiAg
ICAgc3RhdGljIGJvb2wgY2FuR2V0SXRlbXNGb3JOYW1lKEpTQzo6RXhlY1N0YXRlKiwgVGVzdEN1
c3RvbU5hbWVkR2V0dGVyKiwgSlNDOjpQcm9wZXJ0eU5hbWUpOwpAQCAtOTMsMjMgKzkzLDIzIEBA
IGNsYXNzIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlIDoKIHB1YmxpYzoKICAgICB0
eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwogICAgIHN0YXRpYyBKU0M6OkpTT2Jq
ZWN0KiBzZWxmKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0
YXRpYyBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZSogY3JlYXRlKEpTQzo6SlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgc3RhdGljIEpTVGVzdEN1c3RvbU5hbWVkR2V0
dGVyUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIEpT
VGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6
YWxsb2NhdGVDZWxsPEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlPihnbG9iYWxEYXRh
LmhlYXApKSBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZShnbG9iYWxEYXRhLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSk7CisgICAgICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKiBwdHIgPSBu
ZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJv
dG90eXBlPih2bS5oZWFwKSkgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xh
c3NJbmZvIHNfaW5mbzsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpK
U0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5
U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpT
T2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0
eURlc2NyaXB0b3ImKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEpTVGVzdEN1c3RvbU5h
bWVkR2V0dGVyUHJvdG90eXBlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmlu
YWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKSB7IH0KKyAgICBKU1Rlc3RDdXN0b21OYW1l
ZEdldHRlclByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1
cmUpIHsgfQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJl
RmxhZ3M7CiB9OwpAQCAtMTMxLDkgKzEzMSw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJv
cGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlBy
b3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBzdGF0aWMgY29uc3Qg
SlNDOjpDbGFzc0luZm8gc19pbmZvOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpT
Qzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IERPTUNvbnN0cnVjdG9yT2Jq
ZWN0OjpTdHJ1Y3R1cmVGbGFnczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTgsMTAgKzk4LDEwIEBAIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6SlNUZXMK
IAogdm9pZCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9u
KEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7
Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
LnByb3RvdHlwZSwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZTo6c2VsZihleGVjLCBn
bG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwotICAgIHB1dERpcmVjdChleGVj
LT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDIp
LCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KGV4ZWMt
PnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdEV2ZW50Q29uc3Ry
dWN0b3JQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5KTsKKyAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
Lmxlbmd0aCwganNOdW1iZXIoMiksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsK
IH0KIAogYm9vbCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmdldE93blByb3Bl
cnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtMTQzLDE1ICsxNDMsMTUgQEAgSlNUZXN0
RXZlbnRDb25zdHJ1Y3Rvcjo6SlNUZXN0RXZlbnRDb25zdAogewogfQogCi12b2lkIEpTVGVzdEV2
ZW50Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
K3ZvaWQgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewot
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogfQogCiBKU09iamVj
dCogSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICByZXR1cm4gSlNUZXN0RXZl
bnRDb25zdHJ1Y3RvclByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFs
T2JqZWN0LCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5v
YmplY3RQcm90b3R5cGUoKSkpOworICAgIHJldHVybiBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJv
dG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RFdmVudENvbnN0
cnVjdG9yUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAogdm9pZCBK
U1Rlc3RFdmVudENvbnN0cnVjdG9yOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3Ry
dWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw4IEBAIHB1YmxpYzoKICAgICB0eXBlZGVm
IEpTRE9NV3JhcHBlciBCYXNlOwogICAgIHN0YXRpYyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yKiBj
cmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUGFzc1JlZlB0cjxUZXN0RXZlbnRDb25zdHJ1Y3Rvcj4gaW1wbCkKICAgICB7Ci0g
ICAgICAgIEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjph
bGxvY2F0ZUNlbGw8SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcj4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxE
YXRhKCkuaGVhcCkpIEpTVGVzdEV2ZW50Q29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmpl
Y3QsIGltcGwpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xv
YmFsRGF0YSgpKTsKKyAgICAgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciogcHRyID0gbmV3IChO
b3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFdmVudENvbnN0cnVjdG9yPihnbG9iYWxP
YmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdEV2ZW50Q29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9i
YWxPYmplY3QsIGltcGwpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVj
dC0+dm0oKSk7CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogCkBAIC00OCw5ICs0OCw5IEBA
IHB1YmxpYzoKICAgICB+SlNUZXN0RXZlbnRDb25zdHJ1Y3RvcigpOwogICAgIHN0YXRpYyBjb25z
dCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqKTsKQEAgLTYzLDcgKzYzLDcgQEAgcHJpdmF0ZToKICAgICBUZXN0RXZlbnRDb25zdHJ1Y3Rv
ciogbV9pbXBsOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdEV2ZW50Q29uc3RydWN0b3IoSlNDOjpT
dHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8VGVzdEV2ZW50Q29uc3Ry
dWN0b3I+KTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJik7Cisg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CiAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBK
U0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm8gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CiAKQEAgLTkxLDIxICs5MSwyMSBAQCBj
bGFzcyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlIDogCiBwdWJsaWM6CiAgICAgdHlw
ZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKICAgICBzdGF0aWMgSlNDOjpKU09iamVj
dCogc2VsZihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0
aWMgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSogY3JlYXRlKEpTQzo6SlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgc3RhdGljIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQ
cm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgSlNUZXN0
RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9j
YXRlQ2VsbDxKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlPihnbG9iYWxEYXRhLmhlYXAp
KSBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsK
KyAgICAgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSogcHRyID0gbmV3IChOb3RO
dWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlPih2
bS5oZWFwKSkgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAg
cmV0dXJuIHB0cjsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19p
bmZvOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAm
c19pbmZvKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclBy
b3RvdHlwZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KGds
b2JhbERhdGEsIHN0cnVjdHVyZSkgeyB9CisgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3Rv
dHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQogcHJv
dGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzOwogfTsKQEAgLTEyNyw5ICsxMjcsOSBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3Rh
dGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAg
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogcHJvdGVjdGVkOgog
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25z
dHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdl
dC5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDkg
KzY0LDkgQEAgSlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3Rvcjo6SlNUZXN0RXZlbgogCiB2b2lk
IEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGV4ZWMtPnZtKCkpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgcHV0RGly
ZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwg
SlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU6OnNlbGYo
ZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKIH0KIAogYm9vbCBK
U1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYgc2xvdCkKQEAgLTExOCwxNSArMTE4LDE1IEBAIEpTVGVzdEV2ZW50VGFyZ2V0OjpKU1Rl
c3RFdmVudFRhcmdldChTdHIKIHsKIH0KIAotdm9pZCBKU1Rlc3RFdmVudFRhcmdldDo6ZmluaXNo
Q3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBKU1Rlc3RFdmVudFRhcmdl
dDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGds
b2JhbERhdGEpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5o
ZXJpdHMoJnNfaW5mbykpOwogfQogCiBKU09iamVjdCogSlNUZXN0RXZlbnRUYXJnZXQ6OmNyZWF0
ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CiB7Ci0gICAgcmV0dXJuIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlOjpj
cmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwg
Z2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworICAgIHJldHVybiBKU1Rlc3RFdmVu
dFRhcmdldFByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdCwgSlNUZXN0
RXZlbnRUYXJnZXRQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPnZtKCks
IGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQogCiB2
b2lkIEpTVGVzdEV2ZW50VGFyZ2V0OjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV2ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw4ICszNSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNUZXN0RXZlbnRUYXJn
ZXQqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFRlc3RFdmVudFRhcmdldD4gaW1wbCkKICAgICB7CiAg
ICAgICAgIGdsb2JhbE9iamVjdC0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+
bm90aWZ5V3JpdGUoKTsKLSAgICAgICAgSlNUZXN0RXZlbnRUYXJnZXQqIHB0ciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXZlbnRUYXJnZXQ+KGdsb2JhbE9iamVjdC0+
Z2xvYmFsRGF0YSgpLmhlYXApKSBKU1Rlc3RFdmVudFRhcmdldChzdHJ1Y3R1cmUsIGdsb2JhbE9i
amVjdCwgaW1wbCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT5n
bG9iYWxEYXRhKCkpOworICAgICAgICBKU1Rlc3RFdmVudFRhcmdldCogcHRyID0gbmV3IChOb3RO
dWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFdmVudFRhcmdldD4oZ2xvYmFsT2JqZWN0LT52
bSgpLmhlYXApKSBKU1Rlc3RFdmVudFRhcmdldChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1w
bCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAg
ICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAKQEAgLTQ4LDkgKzQ4LDkgQEAgcHVibGljOgogICAg
IH5KU1Rlc3RFdmVudFRhcmdldCgpOwogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBz
X2luZm87CiAKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6
OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1l
cyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5
JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgbW9kZSA9IEpTQzo6RXhjbHVkZURvbnRFbnVtUHJvcGVy
dGllcyk7CkBAIC02Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAgICAgVGVzdEV2ZW50VGFyZ2V0KiBt
X2ltcGw7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0RXZlbnRUYXJnZXQoSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8VGVzdEV2ZW50VGFyZ2V0Pik7Ci0gICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkpTR2xvYmFsRGF0YSYpOworICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNDOjpWTSYpOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwg
SlNDOjpNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIHwgSlNDOjpIYXNJbXB1cmVHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGlu
ZGV4R2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCB1bnNpZ25lZCk7CiBwcml2
YXRlOgpAQCAtOTgsMjMgKzk4LDIzIEBAIGNsYXNzIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBl
IDogcHVibGkKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNl
OwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZSog
Y3JlYXRlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgc3RhdGljIEpT
VGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7
Ci0gICAgICAgIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGws
IEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlPihnbG9iYWxEYXRh
LmhlYXApKSBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZShnbG9iYWxEYXRhLCBnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7
CisgICAgICAgIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGws
IEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlPih2bS5oZWFwKSkg
SlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsK
KyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVybiBwdHI7CiAg
ICAgfQogCiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAg
fQogCiBwcml2YXRlOgotICAgIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKEpTQzo6SlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJl
KSB7IH0KKyAgICBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZp
bmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgSlNDOjpPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7
CiB9OwpAQCAtMTM2LDkgKzEzNiw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlO
YW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5
TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBzdGF0aWMgY29uc3QgSlNDOjpD
bGFzc0luZm8gc19pbmZvOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAm
c19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpT
dHJ1Y3R1cmVGbGFnczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAxNDg2
ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhj
ZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsOSArNTcsOSBAQCBKU1Rlc3RFeGNlcHRp
b25Db25zdHJ1Y3Rvcjo6SlNUZXN0RXhjZXB0CiAKIHZvaWQgSlNUZXN0RXhjZXB0aW9uQ29uc3Ry
dWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxE
YXRhKCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwogICAgIEFTU0VS
VChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBl
OjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAg
cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpT
VGVzdEV4Y2VwdGlvblByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkpOwogfQogCiBib29sIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAgLTk1LDE1ICs5NSwxNSBA
QCBKU1Rlc3RFeGNlcHRpb246OkpTVGVzdEV4Y2VwdGlvbihTdHJ1Y3R1CiB7CiB9CiAKLXZvaWQg
SlNUZXN0RXhjZXB0aW9uOjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
Cit2b2lkIEpTVGVzdEV4Y2VwdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewotICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogfQogCiBKU09iamVjdCogSlNU
ZXN0RXhjZXB0aW9uOjpjcmVhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIHJldHVybiBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5
cGU6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgSlNUZXN0RXhjZXB0
aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCks
IGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5lcnJvclByb3RvdHlwZSgpKSk7CisgICAgcmV0
dXJuIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGdsb2JhbE9i
amVjdCwgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2Jq
ZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+ZXJyb3JQcm90b3R5cGUoKSkp
OwogfQogCiB2b2lkIEpTVGVzdEV4Y2VwdGlvbjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNl
cHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXhjZXB0aW9uLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsOCArMzQsOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0RPTVdyYXBwZXIg
QmFzZTsKICAgICBzdGF0aWMgSlNUZXN0RXhjZXB0aW9uKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxU
ZXN0RXhjZXB0aW9uPiBpbXBsKQogICAgIHsKLSAgICAgICAgSlNUZXN0RXhjZXB0aW9uKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV4Y2VwdGlvbj4oZ2xvYmFs
T2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkpIEpTVGVzdEV4Y2VwdGlvbihzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCwgaW1wbCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxEYXRhKCkpOworICAgICAgICBKU1Rlc3RFeGNlcHRpb24qIHB0ciA9IG5ldyAo
Tm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXhjZXB0aW9uPihnbG9iYWxPYmplY3Qt
PnZtKCkuaGVhcCkpIEpTVGVzdEV4Y2VwdGlvbihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1w
bCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAg
ICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAKQEAgLTQ2LDkgKzQ2LDkgQEAgcHVibGljOgogICAg
IH5KU1Rlc3RFeGNlcHRpb24oKTsKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19p
bmZvOwogCi0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6
U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwor
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8pOwogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CkBAIC02MSw3ICs2MSw3
IEBAIHByaXZhdGU6CiAgICAgVGVzdEV4Y2VwdGlvbiogbV9pbXBsOwogcHJvdGVjdGVkOgogICAg
IEpTVGVzdEV4Y2VwdGlvbihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUGFz
c1JlZlB0cjxUZXN0RXhjZXB0aW9uPik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkpT
R2xvYmFsRGF0YSYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwogICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwogCkBAIC04
OSwyMSArODksMjEgQEAgY2xhc3MgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlIDogcHVibGljIAog
cHVibGljOgogICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAgICAgc3Rh
dGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZSogY3JlYXRlKEpTQzo6
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgc3RhdGljIEpTVGVzdEV4Y2VwdGlv
blByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBKU1Rl
c3RFeGNlcHRpb25Qcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNl
bGw8SlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlPihnbG9iYWxEYXRhLmhlYXApKSBKU1Rlc3RFeGNl
cHRpb25Qcm90b3R5cGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAg
ICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBKU1Rlc3RFeGNl
cHRpb25Qcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNU
ZXN0RXhjZXB0aW9uUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRp
b24odm0pOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBK
U0M6OkNsYXNzSW5mbyBzX2luZm87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBKU1Rlc3RF
eGNlcHRpb25Qcm90b3R5cGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5h
bE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpIHsgfQorICAgIEpTVGVzdEV4Y2VwdGlvblBy
b3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQog
cHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKQEAgLTEyNSw5ICsxMjUsOSBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAg
c3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQor
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRh
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogcHJvdGVjdGVk
OgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01D
b25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNl
LmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiwxMCAr
MTMyLDEwIEBAIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjpKU1Rlc3RJbnRlcmYKIAogdm9p
ZCBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBl
eGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
ZXhlYy0+dm0oKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLSAgICBwdXREaXJl
Y3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBK
U1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigyKSwgUmVhZE9ubHkgfCBEb250RGVs
ZXRlIHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU6OnNlbGYoZXhlYywg
Z2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3QoZXhl
Yy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMiksIFJlYWRP
bmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KIAogYm9vbCBKU1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC0y
MDYsMTUgKzIwNiwxNSBAQCBKU1Rlc3RJbnRlcmZhY2U6OkpTVGVzdEludGVyZmFjZShTdHJ1Y3R1
CiB7CiB9CiAKLXZvaWQgSlNUZXN0SW50ZXJmYWNlOjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEpCit2b2lkIEpTVGVzdEludGVyZmFjZTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogfQog
CiBKU09iamVjdCogSlNUZXN0SW50ZXJmYWNlOjpjcmVhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiBl
eGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIHJldHVybiBKU1Rlc3RJ
bnRlcmZhY2VQcm90b3R5cGU6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVj
dCwgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0
LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5
cGUoKSkpOworICAgIHJldHVybiBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU6OmNyZWF0ZShleGVj
LT52bSgpLCBnbG9iYWxPYmplY3QsIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9i
amVjdFByb3RvdHlwZSgpKSk7CiB9CiAKIHZvaWQgSlNUZXN0SW50ZXJmYWNlOjpkZXN0cm95KEpT
Qzo6SlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaAkocmV2aXNpb24gMTQ4Njgz
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVy
ZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw4IEBAIHB1YmxpYzoKICAgICB0eXBl
ZGVmIEpTRE9NV3JhcHBlciBCYXNlOwogICAgIHN0YXRpYyBKU1Rlc3RJbnRlcmZhY2UqIGNyZWF0
ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBQYXNzUmVmUHRyPFRlc3RJbnRlcmZhY2U+IGltcGwpCiAgICAgewotICAgICAgICBKU1Rl
c3RJbnRlcmZhY2UqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0
SW50ZXJmYWNlPihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKSkgSlNUZXN0SW50ZXJm
YWNlKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKLSAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEpTVGVzdEludGVy
ZmFjZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RJbnRlcmZh
Y2U+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0SW50ZXJmYWNlKHN0cnVjdHVyZSwg
Z2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxP
YmplY3QtPnZtKCkpOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIApAQCAtNTEsOSArNTEs
OSBAQCBwdWJsaWM6CiAgICAgfkpTVGVzdEludGVyZmFjZSgpOwogICAgIHN0YXRpYyBjb25zdCBK
U0M6OkNsYXNzSW5mbyBzX2luZm87CiAKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBK
U0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3Qq
KTsKQEAgLTc5LDcgKzc5LDcgQEAgcHJpdmF0ZToKICAgICBUZXN0SW50ZXJmYWNlKiBtX2ltcGw7
CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0SW50ZXJmYWNlKEpTQzo6U3RydWN0dXJlKiwgSlNET01H
bG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPFRlc3RJbnRlcmZhY2U+KTsKLSAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJik7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlND
OjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBCYXNlOjpTdHJ1Y3R1cmVG
bGFnczsKIH07CiAKQEAgLTEwNywyMyArMTA3LDIzIEBAIGNsYXNzIEpTVGVzdEludGVyZmFjZVBy
b3RvdHlwZSA6IHB1YmxpYyAKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9i
amVjdCBCYXNlOwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3RJbnRlcmZhY2VQcm90
b3R5cGUqIGNyZWF0ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHN0
YXRpYyBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQog
ICAgIHsKLSAgICAgICAgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51
bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEludGVyZmFjZVByb3RvdHlwZT4oZ2xvYmFsRGF0
YS5oZWFwKSkgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsK
KyAgICAgICAgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpT
Qzo6YWxsb2NhdGVDZWxsPEpTVGVzdEludGVyZmFjZVByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVz
dEludGVyZmFjZVByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAg
ICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAK
ICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwogICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQ
cm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKIHBy
aXZhdGU6Ci0gICAgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKEpTQzo6SlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKSB7IH0KKyAg
ICBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2
bSwgc3RydWN0dXJlKSB7IH0KIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6
OlN0cnVjdHVyZUZsYWdzOwogfTsKQEAgLTE0NSw5ICsxNDUsOSBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3Rh
dGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAg
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogcHJvdGVjdGVkOgog
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25z
dHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDkgKzU4LDkgQEAgSlNUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yOgogCiB2b2lkIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4
ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7
CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnRE
ZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5
cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKIH0K
IAogYm9vbCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3I6OmdldE93blBy
b3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtMTA5LDE1ICsxMDksMTUgQEAgSlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6SlNUZXN0TWVkaQogewogfQogCi12b2lkIEpTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSkKK3ZvaWQgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykp
OwogfQogCiBKU09iamVjdCogSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6Y3JlYXRlUHJv
dG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsK
LSAgICByZXR1cm4gSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZTo6Y3JlYXRl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRh
KCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworICAg
IHJldHVybiBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlOjpjcmVhdGUoZXhl
Yy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAogdm9pZCBKU1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQpAQCAtMTY2LDcgKzE2
Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0TWVkaWEKICAgICBUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgUmVmUHRyPE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXI+IGxpc3RlbmVyKE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmNyZWF0ZShTY3JpcHRW
YWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmFyZ3VtZW50KDApKSkpOworICAgIFJlZlB0
cjxNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiBsaXN0ZW5lcihNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
OjpjcmVhdGUoU2NyaXB0VmFsdWUoZXhlYy0+dm0oKSwgZXhlYy0+YXJndW1lbnQoMCkpKSk7CiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwtPm1ldGhvZChsaXN0ZW5lcik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgJKHJldmlzaW9uIDE0ODY4
MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDggQEAgcHVi
bGljOgogICAgIHR5cGVkZWYgSlNET01XcmFwcGVyIEJhc2U7CiAgICAgc3RhdGljIEpTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFRlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyPiBpbXBsKQogICAgIHsKLSAgICAgICAgSlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyPihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKSkgSlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7
Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkp
OworICAgICAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBwdHIgPSBuZXcgKE5vdE51
bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+KGdsb2Jh
bE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcihzdHJ1Y3R1
cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xv
YmFsT2JqZWN0LT52bSgpKTsKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAKQEAgLTQ2LDkg
KzQ2LDkgQEAgcHVibGljOgogICAgIH5KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKCk7CiAg
ICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU0dsb2JhbE9iamVjdCopOwpAQCAtNjEsNyArNjEsNyBAQCBwcml2YXRlOgogICAgIFRlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBtX2ltcGw7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kiwg
UGFzc1JlZlB0cjxUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4pOwotICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNDOjpKU0dsb2JhbERhdGEmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
Qzo6Vk0mKTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEJhc2U6OlN0cnVjdHVyZUZs
YWdzOwogfTsKIApAQCAtODksMjMgKzg5LDIzIEBAIGNsYXNzIEpTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXJQcm90b3QKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVj
dCBCYXNlOwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICBzdGF0aWMgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZSogY3Jl
YXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxs
PEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGU+KGdsb2JhbERhdGEuaGVhcCkp
IEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUoZ2xvYmFsRGF0YSwgZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOworICAgICAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJv
dG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24odm0pOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIAogICAgIHN0YXRpYyBj
b25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwg
SlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUs
IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBK
U1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlKEpTQzo6SlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKSB7IH0KKyAg
ICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9u
RmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CkBAIC0xMjcsOSArMTI3LDkgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRv
ciYpOwogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87Ci0gICAgc3RhdGlj
IEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUo
Z2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0K
IHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBK
U0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3Rh
bmNlIHwgRE9NQ29uc3RydWN0b3JPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw5ICs1Nyw5IEBAIEpTVGVzdE5hbWVkQ29uc3RydWN0
b3JDb25zdHJ1Y3Rvcjo6SlNUZXMKIAogdm9pZCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3Ry
dWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxE
YXRhKCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwogICAgIEFTU0VS
VChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclBy
b3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
OworICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90
eXBlLCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9i
amVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiB9CiAKIGJvb2wgSlNUZXN0TmFtZWRDb25z
dHJ1Y3RvckNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dCkKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENv
bnN0cnVjCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0KTsKICAgICBB
U1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwotICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRh
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdE5hbWVkQ29uc3RydWN0
b3JQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7CisgICAgcHV0RGly
ZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdE5h
bWVkQ29uc3RydWN0b3JQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7
CiB9CiAKIENvbnN0cnVjdFR5cGUgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0
b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0
YSkKQEAgLTEzOCwxNSArMTM4LDE1IEBAIEpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OkpTVGVzdE5h
bWVkQ29uc3QKIHsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpmaW5pc2hDcmVh
dGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEpTVGVzdE5hbWVkQ29uc3RydWN0
b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihn
bG9iYWxEYXRhKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGlu
aGVyaXRzKCZzX2luZm8pKTsKIH0KIAogSlNPYmplY3QqIEpTVGVzdE5hbWVkQ29uc3RydWN0b3I6
OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCiB7Ci0gICAgcmV0dXJuIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU6OmNy
ZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgSlNUZXN0TmFtZWRDb25zdHJ1
Y3RvclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgp
LCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKKyAgICBy
ZXR1cm4gSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCks
IGdsb2JhbE9iamVjdCwgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9i
amVjdFByb3RvdHlwZSgpKSk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6ZGVz
dHJveShKU0M6OkpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0
b3IuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzQs
OCArMzQsOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0RPTVdyYXBwZXIgQmFzZTsKICAgICBz
dGF0aWMgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8VGVzdE5h
bWVkQ29uc3RydWN0b3I+IGltcGwpCiAgICAgewotICAgICAgICBKU1Rlc3ROYW1lZENvbnN0cnVj
dG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5hbWVkQ29u
c3RydWN0b3I+KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLmhlYXApKSBKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKLSAgICAgICAgcHRyLT5m
aW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEpTVGVz
dE5hbWVkQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICAgICAg
cHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwogICAgICAgICByZXR1cm4g
cHRyOwogICAgIH0KIApAQCAtNDYsOSArNDYsOSBAQCBwdWJsaWM6CiAgICAgfkpTVGVzdE5hbWVk
Q29uc3RydWN0b3IoKTsKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwog
Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOwogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CkBAIC02MSw3ICs2MSw3IEBAIHBy
aXZhdGU6CiAgICAgVGVzdE5hbWVkQ29uc3RydWN0b3IqIG1faW1wbDsKIHByb3RlY3RlZDoKICAg
ICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmpl
Y3QqLCBQYXNzUmVmUHRyPFRlc3ROYW1lZENvbnN0cnVjdG9yPik7Ci0gICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OkpTR2xvYmFsRGF0YSYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlND
OjpWTSYpOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgQmFzZTo6U3RydWN0dXJlRmxh
Z3M7CiB9OwogCkBAIC04OSwyMSArODksMjEgQEAgY2xhc3MgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rv
clByb3RvdHlwZSA6IAogcHVibGljOgogICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0
IEJhc2U7CiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQ
cm90b3R5cGUqIGNyZWF0ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
IHN0YXRpYyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUq
IHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TmFtZWRDb25zdHJ1
Y3RvclByb3RvdHlwZT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclBy
b3RvdHlwZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0
ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEpTVGVzdE5hbWVkQ29uc3Ry
dWN0b3JQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNU
ZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE5hbWVkQ29uc3Ry
dWN0b3JQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRy
LT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogCiAgICAg
c3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQor
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRh
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiBwcml2YXRl
OgotICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUoSlNDOjpKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpIHsgfQor
ICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5h
bE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CkBAIC0x
MjUsOSArMTI1LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6
UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6
OlByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBz
X2luZm87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6
U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwor
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8pOwogICAgIH0KIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6
SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgRE9NQ29uc3RydWN0b3JPYmplY3Q6OlN0cnVjdHVyZUZs
YWdzOwpAQCAtMTQ0LDkgKzE0NCw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNvbnN0cnVj
dG9yOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0lu
Zm8gc19pbmZvOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NCwxMCArNjQsMTAgQEAgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yOjpKU1Rlc3RO
b2RlQ29uc3RydQogCiB2b2lkIEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24o
RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsK
LSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
cHJvdG90eXBlLCBKU1Rlc3ROb2RlUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCks
IERvbnREZWxldGUgfCBSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwg
RG9udERlbGV0ZSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0Tm9kZVByb3RvdHlwZTo6c2VsZihleGVj
LCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdChl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigwKSwgUmVh
ZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCiBib29sIEpTVGVzdE5vZGVDb25z
dHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC0xMDgs
MTUgKzEwOCwxNSBAQCBKU1Rlc3ROb2RlOjpKU1Rlc3ROb2RlKFN0cnVjdHVyZSogc3RydWN0CiB7
CiB9CiAKLXZvaWQgSlNUZXN0Tm9kZTo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQordm9pZCBKU1Rlc3ROb2RlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7Ci0gICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiB9CiAKIEpTT2JqZWN0KiBK
U1Rlc3ROb2RlOjpjcmVhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQogewotICAgIHJldHVybiBKU1Rlc3ROb2RlUHJvdG90eXBlOjpjcmVh
dGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIEpTVGVzdE5vZGVQcm90b3R5cGU6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgSlNOb2Rl
UHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCkpKTsKKyAgICByZXR1cm4gSlNUZXN0
Tm9kZVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdCwgSlNUZXN0Tm9k
ZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdCwgSlNO
b2RlUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCkpKTsKIH0KIAogYm9vbCBKU1Rl
c3ROb2RlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5v
ZGUuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsOCBAQCBw
dWJsaWM6CiAgICAgdHlwZWRlZiBKU05vZGUgQmFzZTsKICAgICBzdGF0aWMgSlNUZXN0Tm9kZSog
Y3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFBhc3NSZWZQdHI8VGVzdE5vZGU+IGltcGwpCiAgICAgewotICAgICAgICBKU1Rl
c3ROb2RlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5vZGU+
KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLmhlYXApKSBKU1Rlc3ROb2RlKHN0cnVjdHVyZSwg
Z2xvYmFsT2JqZWN0LCBpbXBsKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxP
YmplY3QtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEpTVGVzdE5vZGUqIHB0ciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9kZT4oZ2xvYmFsT2JqZWN0LT52bSgpLmhl
YXApKSBKU1Rlc3ROb2RlKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICAgICAg
cHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwogICAgICAgICByZXR1cm4g
cHRyOwogICAgIH0KIApAQCAtNDMsOSArNDMsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIHN0YXRp
YyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAg
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9i
YWxPYmplY3QqKTsKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAg
SlNUZXN0Tm9kZShKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0
cjxUZXN0Tm9kZT4pOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpKU0dsb2JhbERhdGEm
KTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKICAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzOwogfTsKIApAQCAtNjIsMjEgKzYyLDIxIEBAIGNsYXNzIEpTVGVzdE5vZGVQcm90b3R5
cGUgOiBwdWJsaWMgSlNDOjoKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9i
amVjdCBCYXNlOwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3ROb2RlUHJvdG90eXBl
KiBjcmVhdGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBzdGF0aWMg
SlNUZXN0Tm9kZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewotICAg
ICAgICBKU1Rlc3ROb2RlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2Nh
dGVDZWxsPEpTVGVzdE5vZGVQcm90b3R5cGU+KGdsb2JhbERhdGEuaGVhcCkpIEpTVGVzdE5vZGVQ
cm90b3R5cGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBw
dHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBKU1Rlc3ROb2RlUHJvdG90
eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5vZGVQcm90
b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3ROb2RlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1
cm4gcHRyOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87
Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBKU1Rlc3ROb2RlUHJvdG90eXBlKEpTQzo6SlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0
dXJlKSB7IH0KKyAgICBKU1Rlc3ROb2RlUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxP
YmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFz
ZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwpAQCAtOTgsOSArOTgsOSBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3Rh
dGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAg
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogcHJvdGVjdGVkOgog
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25z
dHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24g
MTQ4NjgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOCwxMCArMjI4LDEwIEBAIEpTVGVzdE9iakNv
bnN0cnVjdG9yOjpKU1Rlc3RPYmpDb25zdHJ1Y3QKIAogdm9pZCBKU1Rlc3RPYmpDb25zdHJ1Y3Rv
cjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEo
KSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAgICAgQVNTRVJUKGlu
aGVyaXRzKCZzX2luZm8pKTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RPYmpQcm90b3R5cGU6OnNlbGYoZXhl
YywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3Qo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJl
cigxKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdChl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RPYmpQcm90
b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsK
KyAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwg
anNOdW1iZXIoMSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KIAogYm9v
bCBKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCkBAIC0zNjEsMTUgKzM2MSwxNSBAQCBKU1Rlc3RPYmo6OkpTVGVzdE9iaihTdHJ1Y3R1
cmUqIHN0cnVjdHVyCiB7CiB9CiAKLXZvaWQgSlNUZXN0T2JqOjpmaW5pc2hDcmVhdGlvbihKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEpTVGVzdE9iajo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogfQog
CiBKU09iamVjdCogSlNUZXN0T2JqOjpjcmVhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIHJldHVybiBKU1Rlc3RPYmpQcm90
b3R5cGU6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgSlNUZXN0T2Jq
UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGds
b2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworICAgIHJldHVy
biBKU1Rlc3RPYmpQcm90b3R5cGU6OmNyZWF0ZShleGVjLT52bSgpLCBnbG9iYWxPYmplY3QsIEpT
VGVzdE9ialByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKIHZvaWQg
SlNUZXN0T2JqOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQpAQCAtODY1LDcgKzg2NSw3IEBA
IEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMShFeGVjU3QKICAgICAgICAgcmV0dXJu
IGNhY2hlZFZhbHVlOwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4o
Y2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IChpbXBsLT5jYWNoZWRB
dHRyaWJ1dGUxKCkuaGFzTm9WYWx1ZSgpID8ganNOdWxsKCkgOiBpbXBsLT5jYWNoZWRBdHRyaWJ1
dGUxKCkuanNWYWx1ZSgpKTsKLSAgICBjYXN0ZWRUaGlzLT5tX2NhY2hlZEF0dHJpYnV0ZTEuc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgY2FzdGVkVGhpcywgcmVzdWx0KTsKKyAgICBjYXN0ZWRUaGlz
LT5tX2NhY2hlZEF0dHJpYnV0ZTEuc2V0KGV4ZWMtPnZtKCksIGNhc3RlZFRoaXMsIHJlc3VsdCk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtODc4LDcgKzg3OCw3IEBAIEpTVmFsdWUganNU
ZXN0T2JqQ2FjaGVkQXR0cmlidXRlMihFeGVjU3QKICAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVl
OwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+
aW1wbCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IChpbXBsLT5jYWNoZWRBdHRyaWJ1dGUyKCku
aGFzTm9WYWx1ZSgpID8ganNOdWxsKCkgOiBpbXBsLT5jYWNoZWRBdHRyaWJ1dGUyKCkuanNWYWx1
ZSgpKTsKLSAgICBjYXN0ZWRUaGlzLT5tX2NhY2hlZEF0dHJpYnV0ZTIuc2V0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgY2FzdGVkVGhpcywgcmVzdWx0KTsKKyAgICBjYXN0ZWRUaGlzLT5tX2NhY2hlZEF0
dHJpYnV0ZTIuc2V0KGV4ZWMtPnZtKCksIGNhc3RlZFRoaXMsIHJlc3VsdCk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIApAQCAtMTU0Miw3ICsxNTQyLDcgQEAgdm9pZCBzZXRKU1Rlc3RPYmpDb25k
aXRpb25hbEF0dHI0Q29uc3RydQogewogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICAvLyBT
aGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAgIGpzQ2FzdDxKU1Rlc3RPYmoqPih0
aGlzT2JqZWN0KS0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVj
LCAiY29uZGl0aW9uYWxBdHRyNCIpLCB2YWx1ZSk7CisgICAganNDYXN0PEpTVGVzdE9iaio+KHRo
aXNPYmplY3QpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiY29uZGl0
aW9uYWxBdHRyNCIpLCB2YWx1ZSk7CiB9CiAKICNlbmRpZgpAQCAtMTU1Miw3ICsxNTUyLDcgQEAg
dm9pZCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydQogewogICAgIFVOVVNFRF9Q
QVJBTShleGVjKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAg
IGpzQ2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgSWRlbnRpZmllcihleGVjLCAiY29uZGl0aW9uYWxBdHRyNSIpLCB2YWx1ZSk7CisgICAg
anNDYXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRl
bnRpZmllcihleGVjLCAiY29uZGl0aW9uYWxBdHRyNSIpLCB2YWx1ZSk7CiB9CiAKICNlbmRpZgpA
QCAtMTU2Miw3ICsxNTYyLDcgQEAgdm9pZCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29u
c3RydQogewogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWls
dC1pbiBjb25zdHJ1Y3RvcgotICAgIGpzQ2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KS0+cHV0
RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiY29uZGl0aW9uYWxB
dHRyNiIpLCB2YWx1ZSk7CisgICAganNDYXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpLT5wdXRE
aXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCAiY29uZGl0aW9uYWxBdHRyNiIpLCB2
YWx1ZSk7CiB9CiAKICNlbmRpZgpAQCAtMTU3Miw3ICsxNTcyLDcgQEAgdm9pZCBzZXRKU1Rlc3RP
YmpBbnlBdHRyaWJ1dGUoRXhlY1N0YXRlKgogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4odGhpc09iamVjdCk7CiAg
ICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBs
KCkpOwotICAgIFNjcmlwdFZhbHVlIG5hdGl2ZVZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdmFs
dWUpOworICAgIFNjcmlwdFZhbHVlIG5hdGl2ZVZhbHVlKGV4ZWMtPnZtKCksIHZhbHVlKTsKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLT5z
ZXRBbnlBdHRyaWJ1dGUobmF0aXZlVmFsdWUpOwpAQCAtMTY0Myw3ICsxNjQzLDcgQEAgdm9pZCBz
ZXRKU1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZShFeAogewogICAgIFVOVVNFRF9QQVJBTShl
eGVjKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBvYmplY3QKLSAgICBqc0Nhc3Q8SlNU
ZXN0T2JqKj4odGhpc09iamVjdCktPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIElkZW50
aWZpZXIoZXhlYywgInJlcGxhY2VhYmxlQXR0cmlidXRlIiksIHZhbHVlKTsKKyAgICBqc0Nhc3Q8
SlNUZXN0T2JqKj4odGhpc09iamVjdCktPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVy
KGV4ZWMsICJyZXBsYWNlYWJsZUF0dHJpYnV0ZSIpLCB2YWx1ZSk7CiB9CiAKIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
aAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw4IEBAIHB1Ymxp
YzoKICAgICB0eXBlZGVmIEpTRE9NV3JhcHBlciBCYXNlOwogICAgIHN0YXRpYyBKU1Rlc3RPYmoq
IGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBQYXNzUmVmUHRyPFRlc3RPYmo+IGltcGwpCiAgICAgewotICAgICAgICBKU1Rl
c3RPYmoqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0T2JqPihn
bG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKSkgSlNUZXN0T2JqKHN0cnVjdHVyZSwgZ2xv
YmFsT2JqZWN0LCBpbXBsKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmpl
Y3QtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEpTVGVzdE9iaiogcHRyID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPYmo+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkg
SlNUZXN0T2JqKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICAgICAgcHRyLT5m
aW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwogICAgICAgICByZXR1cm4gcHRyOwog
ICAgIH0KIApAQCAtNDcsOSArNDcsOSBAQCBwdWJsaWM6CiAgICAgfkpTVGVzdE9iaigpOwogICAg
IHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAKLSAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxE
YXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNHbG9iYWxPYmplY3QqKTsKQEAgLTc1LDcgKzc1LDcgQEAgcHJpdmF0ZToKICAgICBUZXN0T2Jq
KiBtX2ltcGw7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0T2JqKEpTQzo6U3RydWN0dXJlKiwgSlNE
T01HbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPFRlc3RPYmo+KTsKLSAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTQzo6SlNHbG9iYWxEYXRhJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6
OlZNJik7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc1Zpc2l0
Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CiAKQEAgLTEwMywyMyArMTAzLDIz
IEBAIGNsYXNzIEpTVGVzdE9ialByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkoKIHB1YmxpYzoKICAg
ICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwogICAgIHN0YXRpYyBKU0M6OkpT
T2JqZWN0KiBzZWxmKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAg
IHN0YXRpYyBKU1Rlc3RPYmpQcm90b3R5cGUqIGNyZWF0ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgIHN0YXRpYyBKU1Rlc3RPYmpQcm90b3R5cGUqIGNyZWF0ZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgSlNUZXN0T2JqUHJvdG90eXBlKiBwdHIgPSBu
ZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE9ialByb3RvdHlwZT4oZ2xvYmFs
RGF0YS5oZWFwKSkgSlNUZXN0T2JqUHJvdG90eXBlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAg
ICAgICAgSlNUZXN0T2JqUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2Nh
dGVDZWxsPEpTVGVzdE9ialByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE9ialByb3RvdHlwZSh2
bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9u
KHZtKTsKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgSlND
OjpDbGFzc0luZm8gc19pbmZvOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChK
U0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJv
cGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlBy
b3BlcnR5RGVzY3JpcHRvciYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSlNUZXN0T2Jq
UHJvdG90eXBlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qo
Z2xvYmFsRGF0YSwgc3RydWN0dXJlKSB7IH0KKyAgICBKU1Rlc3RPYmpQcm90b3R5cGUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6
IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KIHByb3RlY3RlZDoKICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0
cnVjdHVyZUZsYWdzOwogfTsKQEAgLTE0MSw5ICsxNDEsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGlj
IGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogcHJvdGVjdGVkOgogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25zdHJ1
Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSwxMCArMTI1LDEwIEBAIEpTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvcjoKIAogdm9pZCBKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihl
eGVjLT5nbG9iYWxEYXRhKCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkp
OwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmds
b2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpOwotICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEpLCBSZWFkT25seSB8IERvbnRE
ZWxldGUgfCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5
cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAg
ICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNO
dW1iZXIoMSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KIAogYm9vbCBK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xv
dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtMTcwLDE1ICsxNzAsMTUgQEAgSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yczo6SlNUZXN0T3ZlcgogewogfQogCi12b2lkIEpTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnM6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
K3ZvaWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogfQogCiBK
U09iamVjdCogSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlUHJvdG90eXBlKEV4
ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICByZXR1
cm4gSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPmds
b2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2Jh
bE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworICAgIHJldHVybiBK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwg
Z2xvYmFsT2JqZWN0LCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAogdm9pZCBKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw4IEBAIHB1YmxpYzoKICAgICB0eXBl
ZGVmIEpTRE9NV3JhcHBlciBCYXNlOwogICAgIHN0YXRpYyBKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4g
aW1wbCkKICAgICB7Ci0gICAgICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqIHB0ciA9
IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycz4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkpIEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnMoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOwotICAgICAgICBwdHIt
PmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9j
YXRlQ2VsbDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPihnbG9iYWxPYmplY3QtPnZtKCku
aGVhcCkpIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMoc3RydWN0dXJlLCBnbG9iYWxPYmpl
Y3QsIGltcGwpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0o
KSk7CiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogCkBAIC00Niw5ICs0Niw5IEBAIHB1Ymxp
YzoKICAgICB+SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycygpOwogICAgIHN0YXRpYyBjb25z
dCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqKTsKQEAgLTYxLDcgKzYxLDcgQEAgcHJpdmF0ZToKICAgICBUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9ycyogbV9pbXBsOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnMoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8VGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+KTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6
SlNHbG9iYWxEYXRhJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CiAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CiAKQEAg
LTg5LDIxICs4OSwyMSBAQCBjbGFzcyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90
CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKICAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlw
ZSogY3JlYXRlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgc3RhdGlj
IEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlKQogICAgIHsKLSAgICAgICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3Rv
dHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlPihnbG9iYWxEYXRhLmhlYXApKSBKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAg
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBl
Pih2bS5oZWFwKSkgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSh2bSwgZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsK
ICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFz
c0luZm8gc19pbmZvOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1Byb3RvdHlwZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05v
bkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkgeyB9CisgICAgSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZt
LCBzdHJ1Y3R1cmUpIHsgfQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKQEAgLTEyNSw5ICsxMjUs
OSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlND
ZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNs
b3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09i
amVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlE
ZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLSAg
ICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6
OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CiAgICAgfQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRz
SGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg4LDEwICs4OCwxMCBAQCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VDb25zCiAKIHZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVj
LT5nbG9iYWxEYXRhKCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwog
ICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCks
IERvbnREZWxldGUgfCBSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMyksIFJlYWRPbmx5IHwg
RG9udERlbGV0ZSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBS
ZWFkT25seSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGgsIGpzTnVtYmVyKDMpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7
CiB9CiAKIGJvb2wgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0
b3I6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtMTQ3LDE1ICsx
NDcsMTUgQEAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpKUwogewogfQog
Ci12b2lkIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6ZmluaXNoQ3JlYXRp
b24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKLSAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAg
ICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIH0KIAogSlNPYmplY3QqIEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Y3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICByZXR1cm4gSlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBnbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBn
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKKyAgICByZXR1
cm4gSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpjcmVhdGUo
ZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPnZtKCksIGdsb2Jh
bE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQogCiB2b2lkIEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6ZGVzdHJveShKU0M6OkpTQ2VsbCog
Y2VsbCkKQEAgLTIxMSw3ICsyMTEsNyBAQCBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyCiAgICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKICAgICBUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZSo+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBpbXBsLT5jYWNoZWRWYWx1ZSgpID8gaW1wbC0+Y2FjaGVkVmFsdWUoKS0+ZGVzZXJp
YWxpemUoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7Ci0g
ICAgY2FzdGVkVGhpcy0+bV9jYWNoZWRWYWx1ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBjYXN0
ZWRUaGlzLCByZXN1bHQpOworICAgIGNhc3RlZFRoaXMtPm1fY2FjaGVkVmFsdWUuc2V0KGV4ZWMt
PnZtKCksIGNhc3RlZFRoaXMsIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAt
MjM0LDcgKzIzNCw3IEBAIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXIK
ICAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlOwogICAgIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGlt
cGwtPmNhY2hlZFJlYWRvbmx5VmFsdWUoKSA/IGltcGwtPmNhY2hlZFJlYWRvbmx5VmFsdWUoKS0+
ZGVzZXJpYWxpemUoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxs
KCk7Ci0gICAgY2FzdGVkVGhpcy0+bV9jYWNoZWRSZWFkb25seVZhbHVlLnNldChleGVjLT5nbG9i
YWxEYXRhKCksIGNhc3RlZFRoaXMsIHJlc3VsdCk7CisgICAgY2FzdGVkVGhpcy0+bV9jYWNoZWRS
ZWFkb25seVZhbHVlLnNldChleGVjLT52bSgpLCBjYXN0ZWRUaGlzLCByZXN1bHQpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsOCBAQCBwdWJsaWM6CiAg
ICAgdHlwZWRlZiBKU0RPTVdyYXBwZXIgQmFzZTsKICAgICBzdGF0aWMgSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlPiBpbXBsKQogICAgIHsKLSAgICAgICAgSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2Nh
dGVDZWxsPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4oZ2xvYmFsT2JqZWN0
LT5nbG9iYWxEYXRhKCkuaGVhcCkpIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpOworICAgICAgICBKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0
ZUNlbGw8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPihnbG9iYWxPYmplY3Qt
PnZtKCkuaGVhcCkpIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZShzdHJ1Y3R1
cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xv
YmFsT2JqZWN0LT52bSgpKTsKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAKQEAgLTQ5LDkg
KzQ5LDkgQEAgcHVibGljOgogICAgIH5KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UoKTsKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwogCi0gICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVl
IHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVh
dGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4g
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6
VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAg
IH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CkBAIC02OCw3ICs2OCw3IEBAIHByaXZhdGU6CiAg
ICAgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogbV9pbXBsOwogcHJvdGVjdGVk
OgogICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZShKU0M6OlN0cnVjdHVy
ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlPik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkpTR2xvYmFsRGF0
YSYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwogICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVu
Z3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0
dXJlRmxhZ3M7CiB9OwogCkBAIC05NiwyMyArOTYsMjMgQEAgY2xhc3MgSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYQogcHVibGljOgogICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFs
T2JqZWN0IEJhc2U7CiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6SlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgc3RhdGljIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAg
ICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUqIHB0ciA9IG5l
dyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlUHJvdG90eXBlPihnbG9iYWxEYXRhLmhlYXApKSBKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAg
ICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUqIHB0ciA9IG5l
dyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAg
IHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1cm4gcHRyOwogICAgIH0KIAog
ICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlBy
b3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQ
cm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgc3RhdGljIEpTQzo6
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFs
RGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8o
SlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogcHJp
dmF0ZToKLSAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUo
SlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUpIHsgfQorICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZVByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsg
fQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNWaXNpdENo
aWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwpAQCAtMTM0LDkgKzEzNCw5IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwog
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0
b3ImKTsKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVl
IHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9
CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
SlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0
YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFR5cGVkZWZzLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTAsMTAgKzkwLDEwIEBAIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I6OkpTVGVzdFR5cGVkZWYK
IAogdm9pZCBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihleGVjLT52bSgpKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwotICAgIHB1
dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5
cGUsIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERv
bnREZWxldGUgfCBSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMiksIFJlYWRPbmx5IHwgRG9u
dERlbGV0ZSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGU6OnNlbGYoZXhl
YywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3Qo
ZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMiksIFJl
YWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KIAogYm9vbCBKU1Rlc3RUeXBlZGVm
c0NvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAg
LTE1NywxNSArMTU3LDE1IEBAIEpTVGVzdFR5cGVkZWZzOjpKU1Rlc3RUeXBlZGVmcyhTdHJ1Y3R1
cmUKIHsKIH0KIAotdm9pZCBKU1Rlc3RUeXBlZGVmczo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQordm9pZCBKU1Rlc3RUeXBlZGVmczo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogfQog
CiBKU09iamVjdCogSlNUZXN0VHlwZWRlZnM6OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgcmV0dXJuIEpTVGVzdFR5
cGVkZWZzUHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3Qs
IEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5n
bG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUo
KSkpOworICAgIHJldHVybiBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZt
KCksIGdsb2JhbE9iamVjdCwgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZShnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQ
cm90b3R5cGUoKSkpOwogfQogCiB2b2lkIEpTVGVzdFR5cGVkZWZzOjpkZXN0cm95KEpTQzo6SlND
ZWxsKiBjZWxsKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFR5cGVkZWZzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw4IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRE9N
V3JhcHBlciBCYXNlOwogICAgIHN0YXRpYyBKU1Rlc3RUeXBlZGVmcyogY3JlYXRlKEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NS
ZWZQdHI8VGVzdFR5cGVkZWZzPiBpbXBsKQogICAgIHsKLSAgICAgICAgSlNUZXN0VHlwZWRlZnMq
IHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0VHlwZWRlZnM+KGds
b2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLmhlYXApKSBKU1Rlc3RUeXBlZGVmcyhzdHJ1Y3R1cmUs
IGdsb2JhbE9iamVjdCwgaW1wbCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
T2JqZWN0LT5nbG9iYWxEYXRhKCkpOworICAgICAgICBKU1Rlc3RUeXBlZGVmcyogcHRyID0gbmV3
IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RUeXBlZGVmcz4oZ2xvYmFsT2JqZWN0
LT52bSgpLmhlYXApKSBKU1Rlc3RUeXBlZGVmcyhzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1w
bCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAg
ICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAKQEAgLTQ3LDkgKzQ3LDkgQEAgcHVibGljOgogICAg
IH5KU1Rlc3RUeXBlZGVmcygpOwogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2lu
Zm87CiAKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cisg
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
JnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3Rv
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKQEAgLTYyLDcgKzYyLDcg
QEAgcHJpdmF0ZToKICAgICBUZXN0VHlwZWRlZnMqIG1faW1wbDsKIHByb3RlY3RlZDoKICAgICBK
U1Rlc3RUeXBlZGVmcyhKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUGFzc1Jl
ZlB0cjxUZXN0VHlwZWRlZnM+KTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6SlNHbG9i
YWxEYXRhJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CiAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm8gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CiAKQEAgLTkwLDIz
ICs5MCwyMyBAQCBjbGFzcyBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSA6IHB1YmxpYyBKCiBwdWJs
aWM6CiAgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKICAgICBzdGF0aWMg
SlNDOjpKU09iamVjdCogc2VsZihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3Qq
KTsKLSAgICBzdGF0aWMgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUqIGNyZWF0ZShKU0M6OkpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHN0YXRpYyBKU1Rlc3RUeXBlZGVmc1Byb3Rv
dHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBKU1Rlc3RUeXBl
ZGVmc1Byb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNUZXN0VHlwZWRlZnNQcm90
b3R5cGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHIt
PmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBKU1Rlc3RUeXBlZGVmc1Byb3Rv
dHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RUeXBlZGVm
c1Byb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAg
ICAgICByZXR1cm4gcHRyOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5m
byBzX2luZm87CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxs
KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3Qm
KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVj
dCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNj
cmlwdG9yJik7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8p
OworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBKU1Rlc3RUeXBlZGVmc1Byb3Rv
dHlwZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSkgeyB9CisgICAgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6
IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KIHByb3RlY3RlZDoKICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKQEAgLTEyOCw5ICsx
MjgsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6
SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0
eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpK
U09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVy
dHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsK
LSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7CiAgICAgfQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1l
bnRzSGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwCShyZXZpc2lvbiAxNDg2
ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDE0ICszOCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIGNvbnN0IENsYXNzSW5m
byBSdW50aW1lQXJyYXk6OnNfaW5mbyA9IHsgIlJ1bnRpbWVBcnJheSIsICZCYXNlOjpzX2luZm8s
IDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoUnVudGltZUFycmF5KSB9OwogCiBSdW50aW1lQXJy
YXk6OlJ1bnRpbWVBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQot
ICAgIDogSlNBcnJheShleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwgMCkKKyAgICA6IEpT
QXJyYXkoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCAwKQogICAgICwgbV9hcnJheSgwKQogewogfQog
Ci12b2lkIFJ1bnRpbWVBcnJheTo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBCaW5kaW5nczo6QXJyYXkqIGFycmF5KQordm9pZCBSdW50aW1lQXJyYXk6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSwgQmluZGluZ3M6OkFycmF5KiBhcnJheSkKIHsKLSAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAg
ICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKICAgICBtX2FycmF5ID0gYXJyYXk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgJKHJldmlzaW9uIDE0ODY4MykK
KysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDggKzQyLDggQEAgcHVibGljOgogICAgICAgICAvLyBXZSBuZWVkIHRvIHBhc3MgaW4g
dGhlIHJpZ2h0IGdsb2JhbCBvYmplY3QgZm9yICJhcnJheSIuCiAgICAgICAgIFN0cnVjdHVyZSog
ZG9tU3RydWN0dXJlID0gV2ViQ29yZTo6ZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZTxSdW50aW1l
QXJyYXk+KGV4ZWMpOwogICAgICAgICBSdW50aW1lQXJyYXkqIHJ1bnRpbWVBcnJheSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPFJ1bnRpbWVBcnJheT4oKmV4ZWMtPmhlYXAoKSkpIFJ1bnRp
bWVBcnJheShleGVjLCBkb21TdHJ1Y3R1cmUpOwotICAgICAgICBydW50aW1lQXJyYXktPmZpbmlz
aENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXkpOwotICAgICAgICBleGVjLT5nbG9i
YWxEYXRhKCkuaGVhcC5hZGRGaW5hbGl6ZXIocnVudGltZUFycmF5LCBkZXN0cm95KTsKKyAgICAg
ICAgcnVudGltZUFycmF5LT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpLCBhcnJheSk7CisgICAg
ICAgIGV4ZWMtPnZtKCkuaGVhcC5hZGRGaW5hbGl6ZXIocnVudGltZUFycmF5LCBkZXN0cm95KTsK
ICAgICAgICAgcmV0dXJuIHJ1bnRpbWVBcnJheTsKICAgICB9CiAKQEAgLTczLDEzICs3MywxMyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBnbG9iYWxPYmplY3QtPmFycmF5UHJvdG90eXBlKCk7
CiAgICAgfQogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewot
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
bywgQXJyYXlDbGFzcyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbywgQXJyYXlDbGFzcyk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmLCBCaW5kaW5nczo6QXJyYXkqKTsKKyAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJiwgQmluZGluZ3M6OkFycmF5Kik7CiAKICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3Ra
ZXJvIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTQXJyYXk6OlN0cnVjdHVyZUZsYWdz
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5jcHAJKHJldmlz
aW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDkgKzQ4LDkgQEAgUnVudGltZU1ldGhvZDo6UnVudGltZU1l
dGhvZChKU0dsb2JhbE9iagogewogfQogCi12b2lkIFJ1bnRpbWVNZXRob2Q6OmZpbmlzaENyZWF0
aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgU3RyaW5nJiBpZGVudCkKK3ZvaWQg
UnVudGltZU1ldGhvZDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBjb25zdCBTdHJpbmcmIGlkZW50
KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIGlkZW50KTsKKyAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgaWRlbnQpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19p
bmZvKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5oCShy
ZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2Qu
aAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJ1
bnRpbWVNZXRob2QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBTdHJpbmcmIG5hbWUsIEJpbmRp
bmdzOjpNZXRob2QqIG1ldGhvZCkKICAgICB7CiAgICAgICAgIFJ1bnRpbWVNZXRob2QqIHJ1bnRp
bWVNZXRob2QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxSdW50aW1lTWV0aG9kPigqZXhl
Yy0+aGVhcCgpKSkgUnVudGltZU1ldGhvZChnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgbWV0aG9k
KTsKLSAgICAgICAgcnVudGltZU1ldGhvZC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0
YSgpLCBuYW1lKTsKKyAgICAgICAgcnVudGltZU1ldGhvZC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+
dm0oKSwgbmFtZSk7CiAgICAgICAgIHJldHVybiBydW50aW1lTWV0aG9kOwogICAgIH0KIApAQCAt
NTMsMTQgKzUzLDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+ZnVu
Y3Rpb25Qcm90b3R5cGUoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxE
YXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKIHByb3RlY3RlZDoKICAgICBSdW50aW1lTWV0aG9k
KEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgQmluZGluZ3M6Ok1ldGhvZCopOwotICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiwgY29uc3QgU3RyaW5nJik7CisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYsIGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IElu
dGVybmFsRnVuY3Rpb246OlN0cnVjdHVyZUZsYWdzOwogICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRD
YWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvcnVudGltZV9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9ydW50aW1lX29iamVjdC5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDE0ICszOCwx
NCBAQCBuYW1lc3BhY2UgQmluZGluZ3MgewogY29uc3QgQ2xhc3NJbmZvIFJ1bnRpbWVPYmplY3Q6
OnNfaW5mbyA9IHsgIlJ1bnRpbWVPYmplY3QiLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKFJ1bnRpbWVPYmplY3QpIH07CiAKIFJ1bnRpbWVPYmplY3Q6OlJ1bnRpbWVP
YmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8SW5zdGFuY2U+IGluc3RhbmNlKQotICAgIDogSlNEZXN0
cnVjdGlibGVPYmplY3QoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSkKKyAg
ICA6IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0KGdsb2JhbE9iamVjdC0+dm0oKSwgc3RydWN0dXJlKQog
ICAgICwgbV9pbnN0YW5jZShpbnN0YW5jZSkKIHsKIH0KIAogdm9pZCBSdW50aW1lT2JqZWN0Ojpm
aW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKTsKKyAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwogICAgIEFTU0VSVChpbmhlcml0cygm
c19pbmZvKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5o
CShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsOSArNjgsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpOwogICAgIH0KIAotICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogcHJvdGVjdGVk
OgpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5jcHAJKHJldmlzaW9uIDE0
ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gUm9vdE9iamVj
dDo6Y3JlYXQKIFJvb3RPYmplY3Q6OlJvb3RPYmplY3QoY29uc3Qgdm9pZCogbmF0aXZlSGFuZGxl
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIDogbV9pc1ZhbGlkKHRydWUpCiAg
ICAgLCBtX25hdGl2ZUhhbmRsZShuYXRpdmVIYW5kbGUpCi0gICAgLCBtX2dsb2JhbE9iamVjdChn
bG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0KQorICAgICwgbV9nbG9iYWxP
YmplY3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QpCiB7CiAgICAgQVNTRVJUKGds
b2JhbE9iamVjdCk7CiAgICAgcm9vdE9iamVjdFNldCgpLT5hZGQodGhpcyk7CkBAIC0xNDEsNyAr
MTQxLDcgQEAgdm9pZCBSb290T2JqZWN0OjpnY1Byb3RlY3QoSlNPYmplY3QqIGpzTwogICAgIEFT
U0VSVChtX2lzVmFsaWQpOwogICAgIAogICAgIGlmICghbV9wcm90ZWN0Q291bnRTZXQuY29udGFp
bnMoanNPYmplY3QpKSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGhvbGRlcigmZ2xvYmFs
T2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGhvbGRl
cigmZ2xvYmFsT2JqZWN0KCktPnZtKCkpOwogICAgICAgICBKU0M6OmdjUHJvdGVjdChqc09iamVj
dCk7CiAgICAgfQogICAgIG1fcHJvdGVjdENvdW50U2V0LmFkZChqc09iamVjdCk7CkBAIC0xNTUs
NyArMTU1LDcgQEAgdm9pZCBSb290T2JqZWN0OjpnY1VucHJvdGVjdChKU09iamVjdCogagogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAobV9wcm90ZWN0Q291bnRTZXQuY291bnQoanNPYmplY3Qp
ID09IDEpIHsKLSAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgaG9sZGVyKCZnbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgaG9sZGVyKCZnbG9i
YWxPYmplY3QoKS0+dm0oKSk7CiAgICAgICAgIEpTQzo6Z2NVbnByb3RlY3QoanNPYmplY3QpOwog
ICAgIH0KICAgICBtX3Byb3RlY3RDb3VudFNldC5yZW1vdmUoanNPYmplY3QpOwpAQCAtMTgxLDEw
ICsxODEsMTAgQEAgSlNHbG9iYWxPYmplY3QqIFJvb3RPYmplY3Q6Omdsb2JhbE9iamVjdAogCiB2
b2lkIFJvb3RPYmplY3Q6OnVwZGF0ZUdsb2JhbE9iamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQogewotICAgIG1fZ2xvYmFsT2JqZWN0LnNldChnbG9iYWxPYmplY3QtPmdsb2JhbERh
dGEoKSwgZ2xvYmFsT2JqZWN0KTsKKyAgICBtX2dsb2JhbE9iamVjdC5zZXQoZ2xvYmFsT2JqZWN0
LT52bSgpLCBnbG9iYWxPYmplY3QpOwogfQogCi12b2lkIFJvb3RPYmplY3Q6OmFkZFJ1bnRpbWVP
YmplY3QoSlNHbG9iYWxEYXRhJiwgUnVudGltZU9iamVjdCogb2JqZWN0KQordm9pZCBSb290T2Jq
ZWN0OjphZGRSdW50aW1lT2JqZWN0KFZNJiwgUnVudGltZU9iamVjdCogb2JqZWN0KQogewogICAg
IEFTU0VSVChtX2lzVmFsaWQpOwogICAgIHdlYWtBZGQobV9ydW50aW1lT2JqZWN0cywgb2JqZWN0
LCBKU0M6OlBhc3NXZWFrPFJ1bnRpbWVPYmplY3Q+KG9iamVjdCwgdGhpcykpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNl
L1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3
MCw3IEBAIHB1YmxpYzoKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3Q7
CiAgICAgdm9pZCB1cGRhdGVHbG9iYWxPYmplY3QoSlNHbG9iYWxPYmplY3QqKTsKIAotICAgIHZv
aWQgYWRkUnVudGltZU9iamVjdChKU0dsb2JhbERhdGEmLCBSdW50aW1lT2JqZWN0Kik7CisgICAg
dm9pZCBhZGRSdW50aW1lT2JqZWN0KFZNJiwgUnVudGltZU9iamVjdCopOwogICAgIHZvaWQgcmVt
b3ZlUnVudGltZU9iamVjdChSdW50aW1lT2JqZWN0Kik7CiAKICAgICBzdHJ1Y3QgSW52YWxpZGF0
aW9uQ2FsbGJhY2sgewpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvQ1J1bnRpbWVPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9DUnVudGltZU9iamVj
dC5oCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9DUnVudGlt
ZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw5ICs1NCw5IEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
Z2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNl
L1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcs
MTMgKzExNywxMyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiB0aGUg
cmlnaHQgZ2xvYmFsIG9iamVjdCBmb3IgImkiLgogICAgICAgICBTdHJ1Y3R1cmUqIGRvbVN0cnVj
dHVyZSA9IFdlYkNvcmU6OmRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8Q1J1bnRpbWVNZXRob2Q+
KGV4ZWMpOwogICAgICAgICBDUnVudGltZU1ldGhvZCogcnVudGltZU1ldGhvZCA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPENSdW50aW1lTWV0aG9kPigqZXhlYy0+aGVhcCgpKSkgQ1J1bnRp
bWVNZXRob2QoZ2xvYmFsT2JqZWN0LCBkb21TdHJ1Y3R1cmUsIG1ldGhvZCk7Ci0gICAgICAgIHJ1
bnRpbWVNZXRob2QtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmFtZSk7Cisg
ICAgICAgIHJ1bnRpbWVNZXRob2QtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCksIG5hbWUpOwog
ICAgICAgICByZXR1cm4gcnVudGltZU1ldGhvZDsKICAgICB9CiAKLSAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3Qg
Q2xhc3NJbmZvIHNfaW5mbzsKQEAgLTEzNCw5ICsxMzQsOSBAQCBwcml2YXRlOgogICAgIHsKICAg
ICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
Y29uc3QgU3RyaW5nJiBuYW1lKQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBjb25z
dCBTdHJpbmcmIG5hbWUpCiAgICAgewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9i
YWxEYXRhLCBuYW1lKTsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIG5hbWUpOwog
ICAgICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogICAgIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9qc2MvQnJpZGdlSlNDLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291
cmNlL1dlYkNvcmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
Myw3ICs4Myw3IEBAIEpTT2JqZWN0KiBJbnN0YW5jZTo6Y3JlYXRlUnVudGltZU9iamVjdCgKICAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBSdW50aW1lT2JqZWN0KiBuZXdPYmplY3Qg
PSBuZXdSdW50aW1lT2JqZWN0KGV4ZWMpOwogICAgIG1fcnVudGltZU9iamVjdCA9IFBhc3NXZWFr
PFJ1bnRpbWVPYmplY3Q+KG5ld09iamVjdCk7Ci0gICAgbV9yb290T2JqZWN0LT5hZGRSdW50aW1l
T2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3T2JqZWN0KTsKKyAgICBtX3Jvb3RPYmplY3Qt
PmFkZFJ1bnRpbWVPYmplY3QoZXhlYy0+dm0oKSwgbmV3T2JqZWN0KTsKICAgICByZXR1cm4gbmV3
T2JqZWN0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9PYmpDUnVudGlt
ZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL09iakNS
dW50aW1lT2JqZWN0LmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9vYmpjL09iakNSdW50aW1lT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDkg
QEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKIHByaXZh
dGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW0J
KHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5z
dGFuY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4NywxMyArMTg3LDEzIEBAIHB1YmxpYzoKICAg
ICAgICAgLy8gV2UgbmVlZCB0byBwYXNzIGluIHRoZSByaWdodCBnbG9iYWwgb2JqZWN0IGZvciAi
aSIuCiAgICAgICAgIFN0cnVjdHVyZSogZG9tU3RydWN0dXJlID0gV2ViQ29yZTo6ZGVwcmVjYXRl
ZEdldERPTVN0cnVjdHVyZTxPYmpDUnVudGltZU1ldGhvZD4oZXhlYyk7CiAgICAgICAgIE9iakNS
dW50aW1lTWV0aG9kKiBydW50aW1lTWV0aG9kID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
T2JqQ1J1bnRpbWVNZXRob2Q+KCpleGVjLT5oZWFwKCkpKSBPYmpDUnVudGltZU1ldGhvZChnbG9i
YWxPYmplY3QsIGRvbVN0cnVjdHVyZSwgbWV0aG9kKTsKLSAgICAgICAgcnVudGltZU1ldGhvZC0+
ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBuYW1lKTsKKyAgICAgICAgcnVudGlt
ZU1ldGhvZC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSwgbmFtZSk7CiAgICAgICAgIHJldHVy
biBydW50aW1lTWV0aG9kOwogICAgIH0KIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgQ2xh
c3NJbmZvIHNfaW5mbzsKQEAgLTIwNiw5ICsyMDYsOSBAQCBwcml2YXRlOgogICAgIHsKICAgICB9
CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29u
c3QgU3RyaW5nJiBuYW1lKQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBjb25zdCBT
dHJpbmcmIG5hbWUpCiAgICAgewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxE
YXRhLCBuYW1lKTsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIG5hbWUpOwogICAg
ICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogICAgIH0KIH07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAkocmV2aXNpb24gMTQ4NjgzKQorKysg
U291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTExMiw5ICsxMTIsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBnbG9iYWxPYmplY3Qt
Pm9iamVjdFByb3RvdHlwZSgpOwogICAgIH0KIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL1dl
YkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbQkocmV2aXNpb24gMTQ4NjgzKQorKysg
U291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTEsNyArMTkxLDcgQEAgdW5zaWduZWQgaW50IE9iamNBcnJheTo6Z2V0TGVuZ3RoKCkg
Y29ucwogY29uc3QgQ2xhc3NJbmZvIE9iamNGYWxsYmFja09iamVjdEltcDo6c19pbmZvID0geyAi
T2JqY0ZhbGxiYWNrT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShPYmpjRmFsbGJhY2tPYmplY3RJbXApIH07CiAKIE9iamNGYWxsYmFja09iamVjdEltcDo6
T2JqY0ZhbGxiYWNrT2JqZWN0SW1wKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBPYmpjSW5zdGFuY2UqIGksIGNvbnN0IFN0cmluZyYgcHJvcGVydHlO
YW1lKQotICAgIDogSlNEZXN0cnVjdGlibGVPYmplY3QoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRh
KCksIHN0cnVjdHVyZSkKKyAgICA6IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0KGdsb2JhbE9iamVjdC0+
dm0oKSwgc3RydWN0dXJlKQogICAgICwgX2luc3RhbmNlKGkpCiAgICAgLCBtX2l0ZW0ocHJvcGVy
dHlOYW1lKQogewpAQCAtMjA0LDcgKzIwNCw3IEBAIHZvaWQgT2JqY0ZhbGxiYWNrT2JqZWN0SW1w
OjpkZXN0cm95KEpTQ2UKIAogdm9pZCBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OmZpbmlzaENyZWF0
aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpOworICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwCShyZXZp
c2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MCw5ICs2MCw5IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0
aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCAgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6CkBAIC05MSw3ICs5MSw3
IEBAIFF0SW5zdGFuY2U6OlF0SW5zdGFuY2UoUU9iamVjdCogbywgUGFzc1IKIAogUXRJbnN0YW5j
ZTo6flF0SW5zdGFuY2UoKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKFdlYkNvcmU6OkpTRE9N
V2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAKICAgICBjYWNoZWRJbnN0
YW5jZXMucmVtb3ZlKG1faGFzaGtleSk7CiAKQEAgLTExOCw3ICsxMTgsNyBAQCBRdEluc3RhbmNl
Ojp+UXRJbnN0YW5jZSgpCiAKIFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4gUXRJbnN0YW5jZTo6Z2V0
UXRJbnN0YW5jZShRT2JqZWN0KiBvLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3RPYmplY3Qs
IFZhbHVlT3duZXJzaGlwIG93bmVyc2hpcCkKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhXZWJD
b3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogCiAgICAg
Zm9yZWFjaCAoUXRJbnN0YW5jZSogaW5zdGFuY2UsIGNhY2hlZEluc3RhbmNlcy52YWx1ZXMobykp
CiAgICAgICAgIGlmIChpbnN0YW5jZS0+cm9vdE9iamVjdCgpID09IHJvb3RPYmplY3QpIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDcgKzEzMiw3IEBACiAjaW5jbHVkZSAi
SW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xv
YmFsRGF0YS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KICNpbmNsdWRlIDxydW50aW1lL09w
ZXJhdGlvbnMuaD4KIAogI2lmIEVOQUJMRShNSUNST0RBVEEpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJl
dmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEpTQyB7Ci0gICAgY2xhc3MgSlNHbG9iYWxEYXRhOworICAgIGNsYXNzIFZN
OwogICAgIGNsYXNzIFNsb3RWaXNpdG9yOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwNCwxNCArNDA0LDE0IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s6On5UYXNr
KCkKIHsKIH0KIAotSlNDOjpKU0dsb2JhbERhdGEqIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6Omds
b2JhbERhdGEoKQorSlNDOjpWTSogU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6dm0oKQogewogICAg
ICBpZiAoaXNEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpOworICAgICAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vblZNKCk7CiAK
ICNpZiBFTkFCTEUoV09SS0VSUykKICAgICBpZiAoaXNXb3JrZXJDb250ZXh0KCkpCi0gICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4odGhpcyktPnNjcmlwdCgpLT5nbG9i
YWxEYXRhKCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4odGhp
cyktPnNjcmlwdCgpLT52bSgpOwogI2VuZGlmCiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAkocmV2
aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IGNsYXNzIEV4ZWNTdGF0ZTsKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwogfQogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNDMsNyArMTQzLDcgQEAgcHVibGljOgogICAgIHZvaWQg
cmVtb3ZlVGltZW91dChpbnQgdGltZW91dElkKSB7IG1fdGltZW91dHMucmVtb3ZlKHRpbWVvdXRJ
ZCk7IH0KICAgICBET01UaW1lciogZmluZFRpbWVvdXQoaW50IHRpbWVvdXRJZCkgeyByZXR1cm4g
bV90aW1lb3V0cy5nZXQodGltZW91dElkKTsgfQogCi0gICAgSlNDOjpKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEoKTsKKyAgICBKU0M6OlZNKiB2bSgpOwogCiAgICAgLy8gSW50ZXJ2YWwgaXMgaW4g
c2Vjb25kcy4KICAgICB2b2lkIGFkanVzdE1pbmltdW1UaW1lckludGVydmFsKGRvdWJsZSBvbGRN
aW5pbXVtVGltZXJJbnRlcnZhbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52
YXNFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52
YXNFbGVtZW50LmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1MCw5ICs1NTAsOSBAQCB2
b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlCiAgICAgbV9pbWFnZUJ1ZmZl
ci0+Y29udGV4dCgpLT5zZXRTdHJva2VUaGlja25lc3MoMSk7CiAgICAgbV9jb250ZXh0U3RhdGVT
YXZlciA9IGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKCptX2ltYWdlQnVm
ZmVyLT5jb250ZXh0KCkpKTsKIAotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLT5nbG9iYWxEYXRhKCkpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxv
Y2soc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT52bSgpKTsKICAgICBzaXplX3QgbnVtQnl0ZXMg
PSA0ICogbV9pbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIG1faW1hZ2VCdWZm
ZXItPmludGVybmFsU2l6ZSgpLmhlaWdodCgpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+Z2xvYmFsRGF0YSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChudW1CeXRlcyk7Cisg
ICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT52bSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5
Q29zdChudW1CeXRlcyk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KSB8fCAoRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKSkKICAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMyZCgpKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlTG9hZGVyLmNwcAkocmV2aXNpb24gMTQ4Njgz
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03OSw5ICs3OSw5IEBAIHZvaWQgSFRNTEltYWdlTG9hZGVyOjpub3RpZnlGaW5pc2hl
ZChDYWMKICAgICBib29sIGxvYWRFcnJvciA9IGNhY2hlZEltYWdlLT5lcnJvck9jY3VycmVkKCkg
fHwgY2FjaGVkSW1hZ2UtPnJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSA+PSA0MDA7CiAgICAg
aWYgKCFsb2FkRXJyb3IpIHsKICAgICAgICAgaWYgKCFlbGVtZW50LT5pbkRvY3VtZW50KCkpIHsK
LSAgICAgICAgICAgIEpTQzo6SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gSlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKTsKLSAgICAgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVy
IGxvY2soZ2xvYmFsRGF0YSk7Ci0gICAgICAgICAgICBnbG9iYWxEYXRhLT5oZWFwLnJlcG9ydEV4
dHJhTWVtb3J5Q29zdChjYWNoZWRJbWFnZS0+ZW5jb2RlZFNpemUoKSk7CisgICAgICAgICAgICBK
U0M6OlZNKiB2bSA9IEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKTsKKyAgICAgICAgICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgICAgICAgICAgdm0tPmhlYXAucmVwb3J0RXh0
cmFNZW1vcnlDb3N0KGNhY2hlZEltYWdlLT5lbmNvZGVkU2l6ZSgpKTsKICAgICAgICAgfQogICAg
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdEFyZ3VtZW50cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdEFyZ3VtZW50cy5j
cHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9TY3JpcHRB
cmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIFBhc3NSZWZQdHI8
U2NyaXB0QXJndW1lbnRzPiBTY3JpcHRBcmd1bWUKIH0KIAogU2NyaXB0QXJndW1lbnRzOjpTY3Jp
cHRBcmd1bWVudHMoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBWZWN0b3I8U2NyaXB0VmFsdWU+
JiBhcmd1bWVudHMpCi0gICAgOiBtX2dsb2JhbE9iamVjdChzY3JpcHRTdGF0ZS0+Z2xvYmFsRGF0
YSgpLCBzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKQorICAgIDogbV9nbG9iYWxP
YmplY3Qoc2NyaXB0U3RhdGUtPnZtKCksIHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpCiB7CiAgICAgbV9hcmd1bWVudHMuc3dhcChhcmd1bWVudHMpOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFzZS5jcHAJKHJldmlzaW9u
IDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZUJhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxMyArNDcsMTMgQEAgYm9vbCBJY29uRGF0YWJhc2VC
YXNlOjpvcGVuKGNvbnN0IFN0cmluZwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIElj
b25EYXRhYmFzZUJhc2UqIGdsb2JhbERhdGFiYXNlID0gMDsKK3N0YXRpYyBJY29uRGF0YWJhc2VC
YXNlKiB2bWJhc2UgPSAwOwogCiAvLyBGdW5jdGlvbnMgdG8gZ2V0L3NldCB0aGUgZ2xvYmFsIGlj
b24gZGF0YWJhc2UuCiBJY29uRGF0YWJhc2VCYXNlJiBpY29uRGF0YWJhc2UoKQogewotICAgIGlm
IChnbG9iYWxEYXRhYmFzZSkKLSAgICAgICAgcmV0dXJuICpnbG9iYWxEYXRhYmFzZTsKKyAgICBp
ZiAodm1iYXNlKQorICAgICAgICByZXR1cm4gKnZtYmFzZTsKIAogICAgIHN0YXRpYyBJY29uRGF0
YWJhc2VCYXNlKiBkZWZhdWx0RGF0YWJhc2UgPSAwOyAgICAgICAgCiAgICAgaWYgKCFkZWZhdWx0
RGF0YWJhc2UpCkBAIC02NCw3ICs2NCw3IEBAIEljb25EYXRhYmFzZUJhc2UmIGljb25EYXRhYmFz
ZSgpCiAKIHZvaWQgc2V0R2xvYmFsSWNvbkRhdGFiYXNlKEljb25EYXRhYmFzZUJhc2UqIG5ld0ds
b2JhbERhdGFiYXNlKQogewotICAgIGdsb2JhbERhdGFiYXNlID0gbmV3R2xvYmFsRGF0YWJhc2U7
CisgICAgdm1iYXNlID0gbmV3R2xvYmFsRGF0YWJhc2U7CiB9CiAKIGJvb2wgZG9jdW1lbnRDYW5I
YXZlSWNvbihjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vcXQvTWVtb3J5VXNhZ2VTdXBwb3J0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L01lbW9yeVVzYWdlU3VwcG9ydFF0LmNwcAkocmV2aXNpb24g
MTQ4NjgzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvTWVtb3J5VXNhZ2VTdXBwb3J0
UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHN0YXRpYyBpbnQgbWVtb3J5
VXNhZ2VLQigpCiAKICAgICAvLyBFeHRyYWN0IG1lbW9yeSBzdGF0aXN0aWNzIGZyb20gSmF2YVNj
cmlwdENvcmU6CiAgICAgSlNDOjpHbG9iYWxNZW1vcnlTdGF0aXN0aWNzIGpzY1N0YXRzID0gSlND
OjpnbG9iYWxNZW1vcnlTdGF0aXN0aWNzKCk7Ci0gICAgc2l6ZV90IGpzY0hlYXBVc2FnZSA9IEpT
RE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5jYXBhY2l0eSgpOworICAgIHNp
emVfdCBqc2NIZWFwVXNhZ2UgPSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5jYXBhY2l0
eSgpOwogICAgIHJldHVybiAobWFsbG9jVXNhZ2UgKyBmbVN0YXRzLmNvbW1pdHRlZFZNQnl0ZXMg
KyBqc2NTdGF0cy5zdGFja0J5dGVzICsganNjU3RhdHMuSklUQnl0ZXMgKyBqc2NIZWFwVXNhZ2Up
ID4+IDEwOwogfQogCkBAIC03MCw3ICs3MCw3IEBAIHN0YXRpYyBpbnQgYWN0dWFsTWVtb3J5VXNh
Z2VLQigpCiAKICAgICAvLyBFeHRyYWN0IG1lbW9yeSBzdGF0aXN0aWNzIGZyb20gSmF2YVNjcmlw
dENvcmU6CiAgICAgSlNDOjpHbG9iYWxNZW1vcnlTdGF0aXN0aWNzIGpzY1N0YXRzID0gSlNDOjpn
bG9iYWxNZW1vcnlTdGF0aXN0aWNzKCk7Ci0gICAgc2l6ZV90IGpzY0hlYXBVc2FnZSA9IEpTRE9N
V2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5zaXplKCk7CisgICAgc2l6ZV90IGpz
Y0hlYXBVc2FnZSA9IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFwLnNpemUoKTsKICAgICBy
ZXR1cm4gKG1hbGxvY1VzYWdlICsgZm1TdGF0cy5jb21taXR0ZWRWTUJ5dGVzIC0gZm1TdGF0cy5m
cmVlTGlzdEJ5dGVzICsganNjU3RhdHMuc3RhY2tCeXRlcyArIGpzY1N0YXRzLkpJVEJ5dGVzICsg
anNjSGVhcFVzYWdlKSA+PiAxMDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL0NsaXBib2FyZFV0aWxpdGllc1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGllc1dpbi5jcHAJKHJldmlzaW9uIDE0ODY4
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsMjYgKzE5MCwyNiBAQCBIR0xPQkFMIGNyZWF0ZUds
b2JhbERhdGEoY29uc3QgS1VSTCYgdXJsCiAKIEhHTE9CQUwgY3JlYXRlR2xvYmFsRGF0YShjb25z
dCBTdHJpbmcmIHN0cikKIHsKLSAgICBIR0xPQkFMIGdsb2JhbERhdGEgPSA6Okdsb2JhbEFsbG9j
KEdQVFIsIChzdHIubGVuZ3RoKCkgKyAxKSAqIHNpemVvZihVQ2hhcikpOwotICAgIGlmICghZ2xv
YmFsRGF0YSkKKyAgICBIR0xPQkFMIHZtID0gOjpHbG9iYWxBbGxvYyhHUFRSLCAoc3RyLmxlbmd0
aCgpICsgMSkgKiBzaXplb2YoVUNoYXIpKTsKKyAgICBpZiAoIXZtKQogICAgICAgICByZXR1cm4g
MDsKLSAgICBVQ2hhciogYnVmZmVyID0gc3RhdGljX2Nhc3Q8VUNoYXIqPihHbG9iYWxMb2NrKGds
b2JhbERhdGEpKTsKKyAgICBVQ2hhciogYnVmZmVyID0gc3RhdGljX2Nhc3Q8VUNoYXIqPihHbG9i
YWxMb2NrKHZtKSk7CiAgICAgbWVtY3B5KGJ1ZmZlciwgc3RyLmNoYXJhY3RlcnMoKSwgc3RyLmxl
bmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgYnVmZmVyW3N0ci5sZW5ndGgoKV0gPSAwOwot
ICAgIEdsb2JhbFVubG9jayhnbG9iYWxEYXRhKTsKLSAgICByZXR1cm4gZ2xvYmFsRGF0YTsKKyAg
ICBHbG9iYWxVbmxvY2sodm0pOworICAgIHJldHVybiB2bTsKIH0KIAogSEdMT0JBTCBjcmVhdGVH
bG9iYWxEYXRhKGNvbnN0IFZlY3RvcjxjaGFyPiYgdmVjdG9yKQogewotICAgIEhHTE9CQUwgZ2xv
YmFsRGF0YSA9IDo6R2xvYmFsQWxsb2MoR1BUUiwgdmVjdG9yLnNpemUoKSArIDEpOwotICAgIGlm
ICghZ2xvYmFsRGF0YSkKKyAgICBIR0xPQkFMIHZtID0gOjpHbG9iYWxBbGxvYyhHUFRSLCB2ZWN0
b3Iuc2l6ZSgpICsgMSk7CisgICAgaWYgKCF2bSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2hh
ciogYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KEdsb2JhbExvY2soZ2xvYmFsRGF0YSkpOwor
ICAgIGNoYXIqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPihHbG9iYWxMb2NrKHZtKSk7CiAg
ICAgbWVtY3B5KGJ1ZmZlciwgdmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNpemUoKSk7CiAgICAgYnVm
ZmVyW3ZlY3Rvci5zaXplKCldID0gMDsKLSAgICBHbG9iYWxVbmxvY2soZ2xvYmFsRGF0YSk7Ci0g
ICAgcmV0dXJuIGdsb2JhbERhdGE7CisgICAgR2xvYmFsVW5sb2NrKHZtKTsKKyAgICByZXR1cm4g
dm07CiB9CiAKIHN0YXRpYyBTdHJpbmcgZ2V0RnVsbENGSFRNTChJRGF0YU9iamVjdCogZGF0YSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNpb24gMTQ4Njgz
KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjQ2LDcgKzI0Niw3IEBAIGJvb2wgUGx1Z2luVmlldzo6c3RhcnQoKQogICAgIE5QRXJy
b3IgbnBFcnI7CiAgICAgewogICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmll
dyh0aGlzKTsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0o
KSk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgICAgIG5wRXJyID0gbV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPm5ld3AoKE5QTUlNRVR5cGUpbV9taW1lVHlwZS51dGY4KCku
ZGF0YSgpLCBtX2luc3RhbmNlLCBtX21vZGUsIG1fcGFyYW1Db3VudCwgbV9wYXJhbU5hbWVzLCBt
X3BhcmFtVmFsdWVzLCBOVUxMKTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkBA
IC0zMzQsNyArMzM0LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpzdG9wKCkKIAogICAgIG1faXNTdGFy
dGVkID0gZmFsc2U7CiAKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkp
OwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAjaWYgZGVmaW5lZChYUF9XSU4p
ICYmICFQTEFURk9STShHVEspCkBAIC00NTEsNyArNDUxLDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojpw
ZXJmb3JtUmVxdWVzdChQbHVnaW5SZQogICAgICAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJv
YmxlbS80ODA3NDY5PiBUaGlzIHNob3VsZCBiZSBzZW50IHdoZW4gdGhlIGRvY3VtZW50IGhhcyBm
aW5pc2hlZCBsb2FkaW5nCiAgICAgICAgICAgICBpZiAocmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlv
bigpKSB7CiAgICAgICAgICAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXco
dGhpcyk7Ci0gICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgICAgICAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUp
OwogICAgICAgICAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT51cmxub3RpZnkobV9p
bnN0YW5jZSwgcmVxdWVzdFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBOUFJFU19ET05FLCBy
ZXF1ZXN0LT5ub3RpZnlEYXRhKCkpOwogICAgICAgICAgICAgICAgIHNldENhbGxpbmdQbHVnaW4o
ZmFsc2UpOwpAQCAtNzM1LDcgKzczNSw3IEBAIE5QT2JqZWN0KiBQbHVnaW5WaWV3OjpucE9iamVj
dCgpCiAgICAgTlBFcnJvciBucEVycjsKICAgICB7CiAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1
cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAg
ICAgbnBFcnIgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwg
TlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCwgJm9iamVjdCk7CiAgICAgICAgIHNldENhbGxp
bmdQbHVnaW4oZmFsc2UpOwpAQCAtMTUwNyw3ICsxNTA3LDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojpw
cml2YXRlQnJvd3NpbmdTdGF0ZUNoYQogICAgICAgICByZXR1cm47CiAKICAgICBQbHVnaW5WaWV3
OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
KyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vblZNKCkpOwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgTlBCb29s
IHZhbHVlID0gcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZDsKICAgICBzZXRWYWx1ZShtX2luc3RhbmNl
LCBOUE5WcHJpdmF0ZU1vZGVCb29sLCAmdmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9ibGFja2JlcnJ5L1BsdWdpblZpZXdCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld0JsYWNrQmVycnkuY3Bw
CShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkv
UGx1Z2luVmlld0JsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQsNyArMjY0LDcg
QEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudAogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsK
LSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgIHNldENhbGxp
bmdQbHVnaW4odHJ1ZSk7CiAKICAgICBib29sIGFjY2VwdGVkID0gbV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZldmVudCk7CkBAIC04MTUsNyArODE1LDcgQEAgdm9p
ZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKICAgICAgICAgKChOUFNldFdpbmRv
d0NhbGxiYWNrU3RydWN0KiltX25wV2luZG93LndzX2luZm8pLT53aW5kb3dHcm91cCA9IHdpbmRv
dy0+d2luZG93R3JvdXAoKTsKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3
KHRoaXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9N
V2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAg
c2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAgIC8vIEZJWE1FOiBQYXNzaW5nIHpvb21GYWN0
b3IgdG8gc2V0d2luZG93IG1ha2Ugd2luZG93ZWQgcGx1Z2luIHNjYWxlIGluY29ycmVjdGx5LgpA
QCAtMTA2NSw3ICsxMDY1LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKIAog
ICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpIHsKICAgICAgICAgUGx1
Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2lu
KHRydWUpOwogICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0
YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVtYmVkLCAmbV9uZWVkc1hFbWJlZCk7CiAgICAgICAgIHNl
dENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtMTE0Niw3ICsxMTQ2LDcgQEAgdm9pZCBQbHVnaW5W
aWV3OjpnZXRXaW5kb3dJbmZvKFZlY3RvcjxQbAogICAgIHZvaWQqIHZhbFB0ciA9IDA7CiAKICAg
ICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7
CiAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZw
bHVnaW5TY3JlZW5XaW5kb3csICZ2YWxQdHIpOwogICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2Up
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAJ
KHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZp
ZXdFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIGJvb2wgUGx1Z2luVmll
dzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
UGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2Jh
bERhdGEoKSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwog
CiAgICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2lu
c3RhbmNlLCAmZXZlbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2lu
Vmlld0d0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1
Z2luVmlld0d0ay5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcg
QEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudAogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsK
LSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgIHNldENhbGxp
bmdQbHVnaW4odHJ1ZSk7CiAKICAgICBib29sIGFjY2VwdGVkID0gIW1fcGx1Z2luLT5wbHVnaW5G
dW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwpAQCAtMjY0LDcgKzI2NCw3IEBAIHZv
aWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiAKIAogdm9pZCBQbHVnaW5WaWV3
OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewotICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAKICAgICBpZiAoIW1faXNTdGFydGVk
IHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMzkwLDcgKzM5MCw3IEBAIHN0YXRpYyB2b2lkIHNldFhDcm9zc2luZ0V2ZW50
U3BlY2lmaWNGaWUKIAogdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZl
bnQqIGV2ZW50KQogewotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7
CiAKICAgICBpZiAoIW1faXNTdGFydGVkIHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRl
ZFN1Y2Nlc3NmdWxseSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTE1LDcgKzUxNSw3IEBAIHZvaWQg
UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAgICAgfQogCiAgICAgUGx1Z2luVmll
dzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7
CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25WTSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgIG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOwog
ICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtNzg5LDcgKzc4OSw3IEBAIGJvb2wgUGx1
Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCiAKICAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPmdldHZhbHVlKSB7CiAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3
KHRoaXMpOwotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgp
KTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAgbV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJlZCwg
Jm1fbmVlZHNYRW1iZWQpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5tbQkocmV2aXNpb24g
MTQ4NjgzKQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtNDk1LDcgKzQ5NSw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBX
aW5kb3dJZk5lZWRlZCgpCiAgICAgICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0IC0g
bV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0LCBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSAtIG1f
bnBXaW5kb3cuY2xpcFJlY3QudG9wKTsKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVn
aW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7
CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKICAgICBzZXRDYWxsaW5nUGx1
Z2luKGZhbHNlKTsKQEAgLTEwNjAsNyArMTA2MCw3IEBAIFBvaW50IFBsdWdpblZpZXc6Om1vdXNl
UG9zRm9yUGx1Z2luKE1vdXMKIGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZl
bnQmIGV2ZW50KQogewogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMp
OwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgc2V0Q2Fs
bGluZ1BsdWdpbih0cnVlKTsKIAogICAgIGJvb2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKQEAgLTEwNzUsNyArMTA3NSw3IEBA
IGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQKIGludDE2X3QgUGx1Z2lu
Vmlldzo6ZGlzcGF0Y2hOUENvY29hRXZlbnQoTlBDb2NvYUV2ZW50JiBjb2NvYUV2ZW50KQogewog
ICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVl
KTsKIAogICAgIGludDE2X3QgcmVzcG9uc2UgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZl
bnQobV9pbnN0YW5jZSwgJmNvY29hRXZlbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9xdC9QbHVnaW5WaWV3UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvcXQvUGx1Z2luVmlld1F0LmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsNyAr
Mjc0LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudAogICAgIH0K
IAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0
cnVlKTsKICAgICBib29sIGFjY2VwdGVkID0gIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVu
dChtX2luc3RhbmNlLCAmZXZlbnQpOwogICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAt
NTU3LDcgKzU1Nyw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAg
ICAgfQogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICBzZXRDYWxsaW5nUGx1
Z2luKHRydWUpOwogICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0
YW5jZSwgJm1fbnBXaW5kb3cpOwogICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHJldmlzaW9u
IDE0ODY4MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MjgsNyArNTI4LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNw
YXRjaE5QRXZlbnQoTlBFdmVudAogICAgICAgICBzaG91bGRQb3AgPSB0cnVlOwogICAgIH0KIAot
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgc2V0Q2FsbGlu
Z1BsdWdpbih0cnVlKTsKICAgICBib29sIGFjY2VwdGVkID0gIW1fcGx1Z2luLT5wbHVnaW5GdW5j
cygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbihm
YWxzZSk7CkBAIC02ODcsNyArNjg3LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2Fy
ZEV2ZW50KEtleQogICAgIH0gZWxzZQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgIGlmIChkaXNwYXRjaE5QRXZlbnQobnBF
dmVudCkpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogfQpAQCAtNzU3LDcg
Kzc1Nyw3IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUUKICAgICB9
IGVsc2UKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25WTSgpKTsKICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYmFjayBwb3J0aW5nIHRoZSBodHRw
Oi8vd2Via2l0Lm9yZy9iLzU4MTA4IGZpeCBoZXJlLgogICAgIGlmIChkaXNwYXRjaE5QRXZlbnQo
bnBFdmVudCkpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwpAQCAtODUxLDcg
Kzg1MSw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEkKICAgICBt
X25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7CiAKICAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPnNldHdpbmRvdykgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNl
Ojpjb21tb25WTSgpKTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAg
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRv
dyk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcAkocmV2aXNpb24gMTQ4
NjgzKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHZvaWQgaW5qZWN0SW50ZXJuYWxzT2Jq
ZWN0KEpTQ29udGV4dFJlZiAKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsK
ICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0ID0gZ2xvYmFsT2JqZWN0
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKHNjcmlwdENvbnRleHQtPmlzRG9j
dW1lbnQoKSkKLSAgICAgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBJZGVudGlmaWVyKGV4ZWMsIEludGVybmFsczo6aW50ZXJuYWxzSWQpLCB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgSW50ZXJuYWxzOjpjcmVhdGUodG9Eb2N1bWVudChzY3JpcHRDb250ZXh0
KSkpKTsKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRp
ZmllcihleGVjLCBJbnRlcm5hbHM6OmludGVybmFsc0lkKSwgdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QsIEludGVybmFsczo6Y3JlYXRlKHRvRG9jdW1lbnQoc2NyaXB0Q29udGV4dCkpKSk7CiB9CiAK
IHZvaWQgcmVzZXRJbnRlcm5hbHNPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNv
dXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0
Miw5ICs5NDIsOSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpkcm9wUHJvdGVjdGlvbigpCiAgICAg
Ly8gb3V0LiBCdXQgaXQgaXMgcHJvdGVjdGVkIGZyb20gR0Mgd2hpbGUgbG9hZGluZywgc28gdGhp
cwogICAgIC8vIGNhbid0IGJlIHJlY291cGVkIHVudGlsIHRoZSBsb2FkIGlzIGRvbmUsIHNvIG9u
bHkKICAgICAvLyByZXBvcnQgdGhlIGV4dHJhIGNvc3QgYXQgdGhhdCBwb2ludC4KLSAgICBKU0M6
OkpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Z2xv
YmFsRGF0YSgpOwotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsRGF0YSk7Ci0gICAg
Z2xvYmFsRGF0YS0+aGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3QobV9yZXNwb25zZUJ1aWxkZXIu
bGVuZ3RoKCkgKiAyKTsKKyAgICBKU0M6OlZNKiB2bSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICB2bS0+aGVhcC5y
ZXBvcnRFeHRyYU1lbW9yeUNvc3QobV9yZXNwb25zZUJ1aWxkZXIubGVuZ3RoKCkgKiAyKTsKIAog
ICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOwogfQpJbmRleDogU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNp
b24gMTQ4NjgzKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTYgQEAKKzIwMTMtMDQtMTcgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxl
LmNvbT4KKworICAgICAgICBSZW5hbWVkIEpTR2xvYmFsRGF0YSB0byBWTQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0Nzc3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvbGludXgvV2ViTWVt
b3J5U2FtcGxlckxpbnV4LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5U2FtcGxlcjo6
c2FtcGxlV2ViS2l0KToKKyAgICAgICAgKiBTaGFyZWQvbWFjL1dlYk1lbW9yeVNhbXBsZXIubWFj
Lm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJNZW1vcnlTYW1wbGVyOjpzYW1wbGVXZWJLaXQpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6amF2YVNjcmlwdE9iamVjdHNDb3VudCk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBNZXRob2QuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpKU05QTWV0aG9kOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICog
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBNZXRob2QuaDoKKyAgICAgICAgKFdlYktp
dDo6SlNOUE1ldGhvZDo6Y3JlYXRlKToKKyAgICAgICAgKEpTTlBNZXRob2QpOgorICAgICAgICAo
V2ViS2l0OjpKU05QTWV0aG9kOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SlNO
UE9iamVjdDo6SlNOUE9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Y2FsbE1ldGhvZCk6Cisg
ICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmNhbGxPYmplY3QpOgorICAgICAgICAoV2ViS2l0
OjpKU05QT2JqZWN0OjpjYWxsQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2Jq
ZWN0OjpwdXQpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAg
ICAgICAoV2ViS2l0OjpKU05QT2JqZWN0Ojpwcm9wZXJ0eUdldHRlcik6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuaDoKKyAgICAgICAgKFdlYktpdDo6
SlNOUE9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09i
amVjdC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5QSlNPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5QSlNPYmplY3Q6OmluaXRpYWxpemUpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0Lmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
TlBKU09iamVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVu
dGltZU9iamVjdE1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5QUnVudGltZU9iamVjdE1hcDo6
Z2V0T3JDcmVhdGVOUE9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5QUnVudGltZU9iamVjdE1h
cDo6Y29udmVydEpTVmFsdWVUb05QVmFyaWFudCk6CisgICAgICAgIChXZWJLaXQ6Ok5QUnVudGlt
ZU9iamVjdE1hcDo6ZXZhbHVhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChOUFJ1
bnRpbWVPYmplY3RNYXApOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6d2luZG93U2NyaXB0TlBPYmplY3Qp
OgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5FbGVtZW50TlBPYmplY3QpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6cnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpnZXRXZWJD
b3JlU3RhdGlzdGljcyk6CisKIDIwMTMtMDQtMTcgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2Nh
QGFwcGxlLmNvbT4KIAogICAgICAgICBDaGFuZ2Ugc3RvcmFnZSBmYWN0b3J5IGZ1bmN0aW9ucyB0
byB0YWtlIGEgUGFnZUdyb3VwIGFuZCBQYWdlIHJlc3BlY3RpdmVseQpJbmRleDogU291cmNlL1dl
YktpdDIvU2hhcmVkL2xpbnV4L1dlYk1lbW9yeVNhbXBsZXJMaW51eC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1dlYk1lbW9yeVNhbXBsZXJMaW51eC5jcHAJ
KHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9XZWJNZW1v
cnlTYW1wbGVyTGludXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsOCArMTU0LDggQEAgV2Vi
TWVtb3J5U3RhdGlzdGljcyBXZWJNZW1vcnlTYW1wbGVyOjpzYQogICAgIGFwcGVuZEtleVZhbHVl
UGFpcih3ZWJLaXRNZW1vcnlTdGF0cywgQVNDSUlMaXRlcmFsKCJGYXN0IE1hbGxvYyBDb21taXR0
ZWQgTWVtb3J5IiksIGZhc3RNYWxsb2NCeXRlc0NvbW1pdHRlZCk7CiAjZW5kaWYKIAotICAgIHNp
emVfdCBqc2NIZWFwQnl0ZXNJblVzZSA9IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEo
KS0+aGVhcC5zaXplKCk7Ci0gICAgc2l6ZV90IGpzY0hlYXBCeXRlc0NvbW1pdHRlZCA9IEpTRE9N
V2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5jYXBhY2l0eSgpOworICAgIHNpemVf
dCBqc2NIZWFwQnl0ZXNJblVzZSA9IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFwLnNpemUo
KTsKKyAgICBzaXplX3QganNjSGVhcEJ5dGVzQ29tbWl0dGVkID0gSlNET01XaW5kb3c6OmNvbW1v
blZNKCktPmhlYXAuY2FwYWNpdHkoKTsKICAgICB0b3RhbEJ5dGVzSW5Vc2UgKz0ganNjSGVhcEJ5
dGVzSW5Vc2U7CiAgICAgdG90YWxCeXRlc0NvbW1pdHRlZCArPSBqc2NIZWFwQnl0ZXNDb21taXR0
ZWQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViTWVtb3J5U2FtcGxlci5t
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJNZW1vcnlT
YW1wbGVyLm1hYy5tbQkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVk
L21hYy9XZWJNZW1vcnlTYW1wbGVyLm1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE2LDkgKzEx
Niw5IEBAIFdlYk1lbW9yeVN0YXRpc3RpY3MgV2ViTWVtb3J5U2FtcGxlcjo6c2EKICAgICB0b3Rh
bEJ5dGVzSW5Vc2UgKz0gZmFzdE1hbGxvY0J5dGVzSW5Vc2U7CiAgICAgdG90YWxCeXRlc0NvbW1p
dHRlZCArPSBmYXN0TWFsbG9jQnl0ZXNDb21taXR0ZWQ7CiAgICAgCi0gICAgSlNMb2NrSG9sZGVy
IGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKLSAgICBzaXplX3QganNj
SGVhcEJ5dGVzSW5Vc2UgPSBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAu
c2l6ZSgpOwotICAgIHNpemVfdCBqc2NIZWFwQnl0ZXNDb21taXR0ZWQgPSBKU0RPTVdpbmRvdzo6
Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuY2FwYWNpdHkoKTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAgc2l6ZV90IGpzY0hlYXBCeXRlc0lu
VXNlID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhlYXAuc2l6ZSgpOworICAgIHNpemVfdCBq
c2NIZWFwQnl0ZXNDb21taXR0ZWQgPSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5jYXBh
Y2l0eSgpOwogICAgIHRvdGFsQnl0ZXNJblVzZSArPSBqc2NIZWFwQnl0ZXNJblVzZTsKICAgICB0
b3RhbEJ5dGVzQ29tbWl0dGVkICs9IGpzY0hlYXBCeXRlc0NvbW1pdHRlZDsKICAgICAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTQ4Njgz
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTI1LDIxICs5MjUsMjEgQEAgdm9pZCBXZWJQcm9jZXNzOjpnZXRXZWJDb3JlU3Rh
dGlzdGljcyh1aQogICAgIAogICAgIC8vIEdhdGhlciBKYXZhU2NyaXB0IHN0YXRpc3RpY3MuCiAg
ICAgewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwotICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldCgiSmF2YVNjcmlw
dE9iamVjdHNDb3VudCIsIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5v
YmplY3RDb3VudCgpKTsKLSAgICAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoIkphdmFT
Y3JpcHRHbG9iYWxPYmplY3RzQ291bnQiLCBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRh
KCktPmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQoKSk7Ci0gICAgICAgIGRhdGEuc3RhdGlzdGljc051
bWJlcnMuc2V0KCJKYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0c0NvdW50IiwgSlNET01XaW5kb3c6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdENvdW50KCkpOwotICAg
ICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldCgiSmF2YVNjcmlwdFByb3RlY3RlZEdsb2Jh
bE9iamVjdHNDb3VudCIsIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5w
cm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2so
SlNET01XaW5kb3c6OmNvbW1vblZNKCkpOworICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJz
LnNldCgiSmF2YVNjcmlwdE9iamVjdHNDb3VudCIsIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5o
ZWFwLm9iamVjdENvdW50KCkpOworICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldCgi
SmF2YVNjcmlwdEdsb2JhbE9iamVjdHNDb3VudCIsIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5o
ZWFwLmdsb2JhbE9iamVjdENvdW50KCkpOworICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJz
LnNldCgiSmF2YVNjcmlwdFByb3RlY3RlZE9iamVjdHNDb3VudCIsIEpTRE9NV2luZG93Ojpjb21t
b25WTSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdENvdW50KCkpOworICAgICAgICBkYXRhLnN0YXRp
c3RpY3NOdW1iZXJzLnNldCgiSmF2YVNjcmlwdFByb3RlY3RlZEdsb2JhbE9iamVjdHNDb3VudCIs
IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFwLnByb3RlY3RlZEdsb2JhbE9iamVjdENvdW50
KCkpOwogICAgICAgICAKLSAgICAgICAgT3duUHRyPFR5cGVDb3VudFNldD4gcHJvdGVjdGVkT2Jq
ZWN0VHlwZUNvdW50cyhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJv
dGVjdGVkT2JqZWN0VHlwZUNvdW50cygpKTsKKyAgICAgICAgT3duUHRyPFR5cGVDb3VudFNldD4g
cHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cyhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5w
cm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpOwogICAgICAgICBmcm9tQ291bnRlZFNldFRvSGFz
aE1hcChwcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzLmdldCgpLCBkYXRhLmphdmFTY3JpcHRQcm90
ZWN0ZWRPYmplY3RUeXBlQ291bnRzKTsKICAgICAgICAgCi0gICAgICAgIE93blB0cjxUeXBlQ291
bnRTZXQ+IG9iamVjdFR5cGVDb3VudHMoSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
LT5oZWFwLm9iamVjdFR5cGVDb3VudHMoKSk7CisgICAgICAgIE93blB0cjxUeXBlQ291bnRTZXQ+
IG9iamVjdFR5cGVDb3VudHMoSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhlYXAub2JqZWN0VHlw
ZUNvdW50cygpKTsKICAgICAgICAgZnJvbUNvdW50ZWRTZXRUb0hhc2hNYXAob2JqZWN0VHlwZUNv
dW50cy5nZXQoKSwgZGF0YS5qYXZhU2NyaXB0T2JqZWN0VHlwZUNvdW50cyk7CiAgICAgICAgIAot
ICAgICAgICB1aW50NjRfdCBqYXZhU2NyaXB0SGVhcFNpemUgPSBKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCktPmhlYXAuc2l6ZSgpOworICAgICAgICB1aW50NjRfdCBqYXZhU2NyaXB0
SGVhcFNpemUgPSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5zaXplKCk7CiAgICAgICAg
IGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KCJKYXZhU2NyaXB0SGVhcFNpemUiLCBqYXZhU2Ny
aXB0SGVhcFNpemUpOwotICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldCgiSmF2YVNj
cmlwdEZyZWVTaXplIiwgSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmNh
cGFjaXR5KCkgLSBqYXZhU2NyaXB0SGVhcFNpemUpOworICAgICAgICBkYXRhLnN0YXRpc3RpY3NO
dW1iZXJzLnNldCgiSmF2YVNjcmlwdEZyZWVTaXplIiwgSlNET01XaW5kb3c6OmNvbW1vblZNKCkt
PmhlYXAuY2FwYWNpdHkoKSAtIGphdmFTY3JpcHRIZWFwU2l6ZSk7CiAgICAgfQogCiAgICAgV1RG
OjpGYXN0TWFsbG9jU3RhdGlzdGljcyBmYXN0TWFsbG9jU3RhdGlzdGljcyA9IFdURjo6ZmFzdE1h
bGxvY1N0YXRpc3RpY3MoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAx
NDg2ODMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUyLDggKzU1Miw4IEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGU6OmdhcmJhZ2VDb2xsZWN0SmF2YVMKIAogc2l6ZV90IEluamVjdGVkQnVuZGxl
OjpqYXZhU2NyaXB0T2JqZWN0c0NvdW50KCkKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RP
TVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwotICAgIHJldHVybiBKU0RPTVdpbmRvdzo6
Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQoKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAgcmV0dXJuIEpTRE9NV2luZG93
Ojpjb21tb25WTSgpLT5oZWFwLm9iamVjdENvdW50KCk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5k
bGU6OnJlcG9ydEV4Y2VwdGlvbihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBleGNl
cHRpb24pCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblZpZXcuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMjMsNyArMTMy
Myw3IEBAIE5QT2JqZWN0KiBQbHVnaW5WaWV3Ojp3aW5kb3dTY3JpcHROUE9iamUKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogCi0gICAgcmV0dXJuIG1fbnBSdW50aW1lT2JqZWN0TWFwLmdldE9y
Q3JlYXRlTlBPYmplY3QoKnBsdWdpbldvcmxkKCktPmdsb2JhbERhdGEoKSwgZnJhbWUoKS0+c2Ny
aXB0KCktPndpbmRvd1NoZWxsKHBsdWdpbldvcmxkKCkpLT53aW5kb3coKSk7CisgICAgcmV0dXJu
IG1fbnBSdW50aW1lT2JqZWN0TWFwLmdldE9yQ3JlYXRlTlBPYmplY3QoKnBsdWdpbldvcmxkKCkt
PnZtKCksIGZyYW1lKCktPnNjcmlwdCgpLT53aW5kb3dTaGVsbChwbHVnaW5Xb3JsZCgpKS0+d2lu
ZG93KCkpOwogfQogCiBOUE9iamVjdCogUGx1Z2luVmlldzo6cGx1Z2luRWxlbWVudE5QT2JqZWN0
KCkKQEAgLTEzMzksNyArMTMzOSw3IEBAIE5QT2JqZWN0KiBQbHVnaW5WaWV3OjpwbHVnaW5FbGVt
ZW50TlBPYmoKICAgICBKU09iamVjdCogb2JqZWN0ID0gZnJhbWUoKS0+c2NyaXB0KCktPmpzT2Jq
ZWN0Rm9yUGx1Z2luRWxlbWVudChtX3BsdWdpbkVsZW1lbnQuZ2V0KCkpOwogICAgIEFTU0VSVChv
YmplY3QpOwogCi0gICAgcmV0dXJuIG1fbnBSdW50aW1lT2JqZWN0TWFwLmdldE9yQ3JlYXRlTlBP
YmplY3QoKnBsdWdpbldvcmxkKCktPmdsb2JhbERhdGEoKSwgb2JqZWN0KTsKKyAgICByZXR1cm4g
bV9ucFJ1bnRpbWVPYmplY3RNYXAuZ2V0T3JDcmVhdGVOUE9iamVjdCgqcGx1Z2luV29ybGQoKS0+
dm0oKSwgb2JqZWN0KTsKIH0KIAogYm9vbCBQbHVnaW5WaWV3OjpldmFsdWF0ZShOUE9iamVjdCog
bnBPYmplY3QsIGNvbnN0IFN0cmluZyYgc2NyaXB0U3RyaW5nLCBOUFZhcmlhbnQqIHJlc3VsdCwg
Ym9vbCBhbGxvd1BvcHVwcykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9KU05QTWV0aG9kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5jcHAJKHJldmlzaW9uIDE0ODY4
MykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0
aG9kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsOSArNTEsOSBAQCBKU05QTWV0aG9kOjpKU05Q
TWV0aG9kKEpTR2xvYmFsT2JqZWN0KiBnCiB7CiB9CiAKLXZvaWQgSlNOUE1ldGhvZDo6ZmluaXNo
Q3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTdHJpbmcmIG5hbWUpCit2
b2lkIEpTTlBNZXRob2Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgY29uc3QgU3RyaW5nJiBuYW1l
KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIG5hbWUpOworICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtLCBuYW1lKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5m
bykpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvSlNOUE1ldGhvZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0aG9kLmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0aG9kLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDkgKzQzLDkgQEAgcHVibGljOgogCiAgICAgc3RhdGljIEpTTlBNZXRo
b2QqIGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIE5QSWRlbnRpZmllciBucElkZW50KQogICAg
IHsKLSAgICAgICAgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNyZWF0ZVN0cnVjdHVyZShl
eGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblBy
b3RvdHlwZSgpKTsKKyAgICAgICAgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+ZnVuY3Rpb25Q
cm90b3R5cGUoKSk7CiAgICAgICAgIEpTTlBNZXRob2QqIG1ldGhvZCA9IG5ldyAoSlNDOjphbGxv
Y2F0ZUNlbGw8SlNOUE1ldGhvZD4oKmV4ZWMtPmhlYXAoKSkpIEpTTlBNZXRob2QoZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUsIG5wSWRlbnQpOwotICAgICAgICBtZXRob2QtPmZpbmlzaENyZWF0aW9u
KGV4ZWMtPmdsb2JhbERhdGEoKSwgbmFtZSk7CisgICAgICAgIG1ldGhvZC0+ZmluaXNoQ3JlYXRp
b24oZXhlYy0+dm0oKSwgbmFtZSk7CiAgICAgICAgIHJldHVybiBtZXRob2Q7CiAgICAgfQogCkBA
IC01NCwxNCArNTQsMTQgQEAgcHVibGljOgogICAgIE5QSWRlbnRpZmllciBucElkZW50aWZpZXIo
KSBjb25zdCB7IHJldHVybiBtX25wSWRlbnRpZmllcjsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihKU0M6OkpTR2xvYmFsRGF0YSYsIGNvbnN0IFN0cmluZyYgbmFtZSk7
CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgY29uc3QgU3RyaW5nJiBuYW1lKTsK
IAogcHJpdmF0ZTogICAgCiAgICAgSlNOUE1ldGhvZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpTdHJ1Y3R1cmUqLCBOUElkZW50aWZpZXIpOwogCi0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBz
dGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgIH0KIAogICAgIHN0YXRpYyBK
U0M6OkNhbGxUeXBlIGdldENhbGxEYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDYWxsRGF0YSYpOwpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS9KU05QT2JqZWN0LmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHN0YXRpYyBOUElkZW50aWZpZXIgbnBJZGVudGlmaWVyRnJv
bUlkZW4KIGNvbnN0IENsYXNzSW5mbyBKU05QT2JqZWN0OjpzX2luZm8gPSB7ICJOUE9iamVjdCIs
ICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNOUE9iamVjdCkgfTsK
IAogSlNOUE9iamVjdDo6SlNOUE9iamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTlBSdW50aW1lT2JqZWN0TWFwKiBvYmplY3RNYXAsIE5QT2Jq
ZWN0KiBucE9iamVjdCkKLSAgICA6IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0KGdsb2JhbE9iamVjdC0+
Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpCisgICAgOiBKU0Rlc3RydWN0aWJsZU9iamVjdChnbG9i
YWxPYmplY3QtPnZtKCksIHN0cnVjdHVyZSkKICAgICAsIG1fb2JqZWN0TWFwKG9iamVjdE1hcCkK
ICAgICAsIG1fbnBPYmplY3QobnBPYmplY3QpCiB7CkBAIC02Niw3ICs2Niw3IEBAIEpTTlBPYmpl
Y3Q6OkpTTlBPYmplY3QoSlNHbG9iYWxPYmplY3QqIGcKIAogdm9pZCBKU05QT2JqZWN0OjpmaW5p
c2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKTsKKyAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19p
bmZvKSk7CiAKICAgICAvLyBXZSBzaG91bGQgbmV2ZXIgaGF2ZSBhbiBOUEpTT2JqZWN0IGluc2lk
ZSBhIEpTTlBPYmplY3QuCkBAIC0xMjcsNyArMTI3LDcgQEAgSlNWYWx1ZSBKU05QT2JqZWN0Ojpj
YWxsTWV0aG9kKEV4ZWNTdGF0ZQogICAgIFZPSURfVE9fTlBWQVJJQU5UKHJlc3VsdCk7CiAgICAg
CiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAg
ICByZXR1cm5WYWx1ZSA9IG1fbnBPYmplY3QtPl9jbGFzcy0+aW52b2tlKG1fbnBPYmplY3QsIG1l
dGhvZE5hbWUsIGFyZ3VtZW50cy5kYXRhKCksIGFyZ3VtZW50Q291bnQsICZyZXN1bHQpOwogICAg
ICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShl
eGVjKTsKICAgICB9CkBAIC0xNjcsNyArMTY3LDcgQEAgSlNDOjpKU1ZhbHVlIEpTTlBPYmplY3Q6
OmNhbGxPYmplY3QoSlNDOgogICAgIFZPSURfVE9fTlBWQVJJQU5UKHJlc3VsdCk7CiAKICAgICB7
Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgIHJldHVy
blZhbHVlID0gbV9ucE9iamVjdC0+X2NsYXNzLT5pbnZva2VEZWZhdWx0KG1fbnBPYmplY3QsIGFy
Z3VtZW50cy5kYXRhKCksIGFyZ3VtZW50Q291bnQsICZyZXN1bHQpOwogICAgICAgICBOUFJ1bnRp
bWVPYmplY3RNYXA6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKICAgICB9
CkBAIC0yMDcsNyArMjA3LDcgQEAgSlNWYWx1ZSBKU05QT2JqZWN0OjpjYWxsQ29uc3RydWN0b3Io
RXhlYwogICAgIFZPSURfVE9fTlBWQVJJQU5UKHJlc3VsdCk7CiAgICAgCiAgICAgewotICAgICAg
ICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9
IG1fbnBPYmplY3QtPl9jbGFzcy0+Y29uc3RydWN0KG1fbnBPYmplY3QsIGFyZ3VtZW50cy5kYXRh
KCksIGFyZ3VtZW50Q291bnQsICZyZXN1bHQpOwogICAgICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6
Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKICAgICB9CkBAIC0zNTIsNyAr
MzUyLDcgQEAgdm9pZCBKU05QT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjUwogICAgIE5Q
UnVudGltZU9iamVjdE1hcDo6UGx1Z2luUHJvdGVjdG9yIHByb3RlY3Rvcih0aGlzT2JqZWN0LT5t
X29iamVjdE1hcCk7CiAKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAg
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
Vk0oKSk7CiAgICAgICAgIHRoaXNPYmplY3QtPm1fbnBPYmplY3QtPl9jbGFzcy0+c2V0UHJvcGVy
dHkodGhpc09iamVjdC0+bV9ucE9iamVjdCwgbnBJZGVudGlmaWVyLCAmdmFyaWFudCk7CiAKICAg
ICAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUo
ZXhlYyk7CkBAIC0zOTIsNyArMzkyLDcgQEAgYm9vbCBKU05QT2JqZWN0OjpkZWxldGVQcm9wZXJ0
eShFeGVjU3RhdAogICAgIE5QUnVudGltZU9iamVjdE1hcDo6UGx1Z2luUHJvdGVjdG9yIHByb3Rl
Y3RvcihtX29iamVjdE1hcCk7CiAKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAg
ICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uVk0oKSk7CiAKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSB0aHJvdyBhbiBleGNl
cHRpb24gaWYgcmVtb3ZlUHJvcGVydHkgcmV0dXJucyBmYWxzZT8KICAgICAgICAgaWYgKCFtX25w
T2JqZWN0LT5fY2xhc3MtPnJlbW92ZVByb3BlcnR5KG1fbnBPYmplY3QsIHByb3BlcnR5TmFtZSkp
CkBAIC00MjUsNyArNDI1LDcgQEAgdm9pZCBKU05QT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTTwogICAgIE5QUnVudGltZU9iamVjdE1hcDo6UGx1Z2luUHJvdGVjdG9yIHByb3RlY3Rvcih0
aGlzT2JqZWN0LT5tX29iamVjdE1hcCk7CiAgICAgCiAgICAgewotICAgICAgICBKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogCiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdGhy
b3cgYW4gZXhjZXB0aW9uIGlmIGVudW1lcmF0ZSByZXR1cm5zIGZhbHNlPwogICAgICAgICBpZiAo
IXRoaXNPYmplY3QtPm1fbnBPYmplY3QtPl9jbGFzcy0+ZW51bWVyYXRlKHRoaXNPYmplY3QtPm1f
bnBPYmplY3QsICZpZGVudGlmaWVycywgJmlkZW50aWZpZXJDb3VudCkpCkBAIC00NzMsNyArNDcz
LDcgQEAgSlNWYWx1ZSBKU05QT2JqZWN0Ojpwcm9wZXJ0eUdldHRlcihFeGVjUwogICAgIAogICAg
IGJvb2wgcmV0dXJuVmFsdWU7CiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAg
ICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vblZNKCkpOwogICAgICAgICBOUElkZW50aWZpZXIgbnBJZGVudGlmaWVyID0gbnBJZGVudGlm
aWVyRnJvbUlkZW50aWZpZXIocHJvcGVydHlOYW1lKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSB0
aGlzT2JqLT5tX25wT2JqZWN0LT5fY2xhc3MtPmdldFByb3BlcnR5KHRoaXNPYmotPm1fbnBPYmpl
Y3QsIG5wSWRlbnRpZmllciwgJnJlc3VsdCk7CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5o
CShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvSlNOUE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0Nyw4IEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyBKU05QT2JqZWN0KiBjcmVhdGUoSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBOUFJ1bnRpbWVPYmplY3RNYXAqIG9iamVjdE1hcCwgTlBPYmplY3Qq
IG5wT2JqZWN0KQogICAgIHsKLSAgICAgICAgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNy
ZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKTsKLSAgICAgICAgSlNOUE9iamVjdCogb2Jq
ZWN0ID0gbmV3IChKU0M6OmFsbG9jYXRlQ2VsbDxKU05QT2JqZWN0PihnbG9iYWxPYmplY3QtPmds
b2JhbERhdGEoKS5oZWFwKSkgSlNOUE9iamVjdChnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgb2Jq
ZWN0TWFwLCBucE9iamVjdCk7CisgICAgICAgIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBj
cmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdC0+b2JqZWN0UHJvdG90eXBlKCkpOworICAgICAgICBKU05QT2JqZWN0KiBvYmplY3QgPSBu
ZXcgKEpTQzo6YWxsb2NhdGVDZWxsPEpTTlBPYmplY3Q+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFw
KSkgSlNOUE9iamVjdChnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgb2JqZWN0TWFwLCBucE9iamVj
dCk7CiAgICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0KTsKICAgICAg
ICAgcmV0dXJuIG9iamVjdDsKICAgICB9CkBAIC03Nyw5ICs3Nyw5IEBAIHByaXZhdGU6CiAKICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTT2Jq
ZWN0OjpTdHJ1Y3R1cmVGbGFnczsKICAgICAKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6
Q2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNhbGxEYXRhJik7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNj
YXBlL05QSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDEzICs0NiwxMyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKLU5QSlNPYmplY3QqIE5QSlNPYmplY3Q6OmNyZWF0ZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIE5QUnVudGltZU9iamVjdE1hcCogb2JqZWN0TWFwLCBKU09iamVjdCoganNP
YmplY3QpCitOUEpTT2JqZWN0KiBOUEpTT2JqZWN0OjpjcmVhdGUoVk0mIHZtLCBOUFJ1bnRpbWVP
YmplY3RNYXAqIG9iamVjdE1hcCwgSlNPYmplY3QqIGpzT2JqZWN0KQogewogICAgIC8vIFdlIHNo
b3VsZCBuZXZlciBoYXZlIGEgSlNOUE9iamVjdCBpbnNpZGUgYW4gTlBKU09iamVjdC4KICAgICBB
U1NFUlQoIWpzT2JqZWN0LT5pbmhlcml0cygmSlNOUE9iamVjdDo6c19pbmZvKSk7CiAKICAgICBO
UEpTT2JqZWN0KiBucEpTT2JqZWN0ID0gdG9OUEpTT2JqZWN0KGNyZWF0ZU5QT2JqZWN0KDAsIG5w
Q2xhc3MoKSkpOwotICAgIG5wSlNPYmplY3QtPmluaXRpYWxpemUoZ2xvYmFsRGF0YSwgb2JqZWN0
TWFwLCBqc09iamVjdCk7CisgICAgbnBKU09iamVjdC0+aW5pdGlhbGl6ZSh2bSwgb2JqZWN0TWFw
LCBqc09iamVjdCk7CiAKICAgICByZXR1cm4gbnBKU09iamVjdDsKIH0KQEAgLTcyLDEzICs3Miwx
MyBAQCBib29sIE5QSlNPYmplY3Q6OmlzTlBKU09iamVjdChOUE9iamVjdCogCiAgICAgcmV0dXJu
IG5wT2JqZWN0LT5fY2xhc3MgPT0gbnBDbGFzcygpOwogfQogCi12b2lkIE5QSlNPYmplY3Q6Omlu
aXRpYWxpemUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBOUFJ1bnRpbWVPYmplY3RNYXAqIG9i
amVjdE1hcCwgSlNPYmplY3QqIGpzT2JqZWN0KQordm9pZCBOUEpTT2JqZWN0Ojppbml0aWFsaXpl
KFZNJiB2bSwgTlBSdW50aW1lT2JqZWN0TWFwKiBvYmplY3RNYXAsIEpTT2JqZWN0KiBqc09iamVj
dCkKIHsKICAgICBBU1NFUlQoIW1fb2JqZWN0TWFwKTsKICAgICBBU1NFUlQoIW1fanNPYmplY3Qp
OwogCiAgICAgbV9vYmplY3RNYXAgPSBvYmplY3RNYXA7Ci0gICAgbV9qc09iamVjdC5zZXQoZ2xv
YmFsRGF0YSwganNPYmplY3QpOworICAgIG1fanNPYmplY3Quc2V0KHZtLCBqc09iamVjdCk7CiB9
CiAKIHN0YXRpYyBJZGVudGlmaWVyIGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChFeGVjU3Rh
dGUqIGV4ZWMsIElkZW50aWZpZXJSZXAqIGlkZW50aWZpZXJSZXApCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0
LmgJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9OUEpTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFZNOwogY2xh
c3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBKU09iamVjdDsKIApAQCAtNDgsNyArNDgsNyBAQCBj
bGFzcyBOUFJ1bnRpbWVPYmplY3RNYXA7CiBjbGFzcyBOUEpTT2JqZWN0IDogcHVibGljIE5QT2Jq
ZWN0IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShOUEpTT2JqZWN0KTsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgTlBKU09iamVjdCogY3JlYXRlKEpTQzo6SlNHbG9iYWxEYXRhJiwgTlBSdW50aW1l
T2JqZWN0TWFwKiwgSlNDOjpKU09iamVjdCopOworICAgIHN0YXRpYyBOUEpTT2JqZWN0KiBjcmVh
dGUoSlNDOjpWTSYsIE5QUnVudGltZU9iamVjdE1hcCosIEpTQzo6SlNPYmplY3QqKTsKIAogICAg
IEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9qc09iamVjdC5nZXQo
KTsgfQogCkBAIC02NCw3ICs2NCw3IEBAIHByaXZhdGU6CiAgICAgTlBKU09iamVjdCgpOwogICAg
IH5OUEpTT2JqZWN0KCk7CiAKLSAgICB2b2lkIGluaXRpYWxpemUoSlNDOjpKU0dsb2JhbERhdGEm
LCBOUFJ1bnRpbWVPYmplY3RNYXAqLCBKU0M6OkpTT2JqZWN0Kik7CisgICAgdm9pZCBpbml0aWFs
aXplKEpTQzo6Vk0mLCBOUFJ1bnRpbWVPYmplY3RNYXAqLCBKU0M6OkpTT2JqZWN0Kik7CiAKICAg
ICBib29sIGhhc01ldGhvZChOUElkZW50aWZpZXIgbWV0aG9kTmFtZSk7CiAgICAgYm9vbCBpbnZv
a2UoTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUsIGNvbnN0IE5QVmFyaWFudCogYXJndW1lbnRzLCB1
aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgTlBSdW50aW1lT2JqZWN0TWFwOjpQbHVn
aW5Qcm90ZWN0b3I6On5QbAogewogfQogCi1OUE9iamVjdCogTlBSdW50aW1lT2JqZWN0TWFwOjpn
ZXRPckNyZWF0ZU5QT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNPYmplY3QqIGpz
T2JqZWN0KQorTlBPYmplY3QqIE5QUnVudGltZU9iamVjdE1hcDo6Z2V0T3JDcmVhdGVOUE9iamVj
dChWTSYgdm0sIEpTT2JqZWN0KiBqc09iamVjdCkKIHsKICAgICAvLyBJZiB0aGlzIGlzIGEgSlNO
UE9iamVjdCwgd2UgY2FuIGp1c3QgZ2V0IGl0cyB1bmRlcmx5aW5nIE5QT2JqZWN0LgogICAgIGlm
IChqc09iamVjdC0+Y2xhc3NJbmZvKCkgPT0gJkpTTlBPYmplY3Q6OnNfaW5mbykgewpAQCAtODMs
NyArODMsNyBAQCBOUE9iamVjdCogTlBSdW50aW1lT2JqZWN0TWFwOjpnZXRPckNyZWF0CiAgICAg
ICAgIHJldHVybiBucEpTT2JqZWN0OwogICAgIH0KIAotICAgIE5QSlNPYmplY3QqIG5wSlNPYmpl
Y3QgPSBOUEpTT2JqZWN0OjpjcmVhdGUoZ2xvYmFsRGF0YSwgdGhpcywganNPYmplY3QpOworICAg
IE5QSlNPYmplY3QqIG5wSlNPYmplY3QgPSBOUEpTT2JqZWN0OjpjcmVhdGUodm0sIHRoaXMsIGpz
T2JqZWN0KTsKICAgICBtX25wSlNPYmplY3RzLnNldChqc09iamVjdCwgbnBKU09iamVjdCk7CiAK
ICAgICByZXR1cm4gbnBKU09iamVjdDsKQEAgLTE3Miw3ICsxNzIsNyBAQCB2b2lkIE5QUnVudGlt
ZU9iamVjdE1hcDo6Y29udmVydEpTVmFsdWVUCiAgICAgfQogCiAgICAgaWYgKHZhbHVlLmlzT2Jq
ZWN0KCkpIHsKLSAgICAgICAgTlBPYmplY3QqIG5wT2JqZWN0ID0gZ2V0T3JDcmVhdGVOUE9iamVj
dChleGVjLT5nbG9iYWxEYXRhKCksIGFzT2JqZWN0KHZhbHVlKSk7CisgICAgICAgIE5QT2JqZWN0
KiBucE9iamVjdCA9IGdldE9yQ3JlYXRlTlBPYmplY3QoZXhlYy0+dm0oKSwgYXNPYmplY3QodmFs
dWUpKTsKICAgICAgICAgT0JKRUNUX1RPX05QVkFSSUFOVChucE9iamVjdCwgdmFyaWFudCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xODIsNyArMTgyLDcgQEAgdm9pZCBOUFJ1bnRpbWVP
YmplY3RNYXA6OmNvbnZlcnRKU1ZhbHVlVAogCiBib29sIE5QUnVudGltZU9iamVjdE1hcDo6ZXZh
bHVhdGUoTlBPYmplY3QqIG5wT2JqZWN0LCBjb25zdCBTdHJpbmcmIHNjcmlwdFN0cmluZywgTlBW
YXJpYW50KiByZXN1bHQpCiB7Ci0gICAgU3Ryb25nPEpTR2xvYmFsT2JqZWN0PiBnbG9iYWxPYmpl
Y3QodGhpcy0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSwgdGhpcy0+Z2xvYmFsT2JqZWN0
KCkpOworICAgIFN0cm9uZzxKU0dsb2JhbE9iamVjdD4gZ2xvYmFsT2JqZWN0KHRoaXMtPmdsb2Jh
bE9iamVjdCgpLT52bSgpLCB0aGlzLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgaWYgKCFnbG9iYWxP
YmplY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVP
YmplY3RNYXAuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw3ICszOSw3IEBAIHR5cGVkZWYgc3RydWN0IF9OUFZhcmlhbnQgTlBWYXJpYW50OwogCiBu
YW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBFeGVjU3RhdGU7Ci0gICAgY2xhc3MgSlNHbG9iYWxE
YXRhOworICAgIGNsYXNzIFZNOwogICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIGNsYXNz
IEpTT2JqZWN0OwogICAgIGNsYXNzIEpTVmFsdWU7CkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoK
IAogICAgIC8vIFJldHVybnMgYW4gTlBPYmplY3QgdGhhdCB3cmFwcyB0aGUgZ2l2ZW4gSlNPYmpl
Y3Qgb2JqZWN0LiBJZiB0aGVyZSBpcyBhbHJlYWR5IGFuIE5QT2JqZWN0IHRoYXQgd3JhcHMgdGhp
cyBKU09iamVjdCwgaXQgd2lsbAogICAgIC8vIHJldGFpbiBpdCBhbmQgcmV0dXJuIGl0LgotICAg
IE5QT2JqZWN0KiBnZXRPckNyZWF0ZU5QT2JqZWN0KEpTQzo6SlNHbG9iYWxEYXRhJiwgSlNDOjpK
U09iamVjdCopOworICAgIE5QT2JqZWN0KiBnZXRPckNyZWF0ZU5QT2JqZWN0KEpTQzo6Vk0mLCBK
U0M6OkpTT2JqZWN0Kik7CiAgICAgdm9pZCBucEpTT2JqZWN0RGVzdHJveWVkKE5QSlNPYmplY3Qq
KTsKIAogICAgIC8vIFJldHVybnMgYSBKU09iamVjdCBvYmplY3QgdGhhdCB3cmFwcyB0aGUgZ2l2
ZW4gTlBPYmplY3QuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDIsNyArMjEwMiw3
IEBAIHZvaWQgV2ViUGFnZTo6cnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKGMKICAgICBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkUmVzdWx0VmFsdWU7CiAgICAgQ29yZUlQ
Qzo6RGF0YVJlZmVyZW5jZSBkYXRhUmVmZXJlbmNlOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2so
SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CiAgICAgaWYgKEpTVmFsdWUgcmVzdWx0VmFsdWUg
PSBtX21haW5GcmFtZS0+Y29yZUZyYW1lKCktPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KHNjcmlw
dCwgdHJ1ZSkuanNWYWx1ZSgpKSB7CiAgICAgICAgIGlmICgoc2VyaWFsaXplZFJlc3VsdFZhbHVl
ID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUobV9tYWluRnJhbWUtPmpzQ29udGV4dCgp
LCB0b1JlZihtX21haW5GcmFtZS0+Y29yZUZyYW1lKCktPnNjcmlwdCgpLT5nbG9iYWxPYmplY3Qo
bWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5nbG9iYWxFeGVjKCksIHJlc3VsdFZhbHVlKSwgMCkp
KQogICAgICAgICAgICAgZGF0YVJlZmVyZW5jZSA9IHNlcmlhbGl6ZWRSZXN1bHRWYWx1ZS0+ZGF0
YSgpOwpJbmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDg2ODMp
CisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTMtMDQtMTcgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxl
LmNvbT4KKworICAgICAgICBSZW5hbWVkIEpTR2xvYmFsRGF0YSB0byBWTQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0Nzc3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBcGkvQmxhY2tCZXJyeUdsb2Jh
bC5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmNsZWFyTWVtb3J5Q2FjaGVzKToK
KyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0Fib3V0RGF0YS5jcHA6CisgICAgICAgICogV2ViS2l0
U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnQuY3BwOgorICAgICAgICAoRHVtcFJlbmRlclRy
ZWVTdXBwb3J0OjpqYXZhU2NyaXB0T2JqZWN0c0NvdW50KToKKwogMjAxMy0wNC0xOCAgWHVlZmVp
IFJlbiAgPHhyZW5AYmxhY2tiZXJyeS5jb20+CiAKICAgICAgICAgcmVtb3ZlIGJ1aWxkIHdhcm5p
bmcodW51c2VkIHBhcmFtZXRlcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkv
QmxhY2tCZXJyeUdsb2JhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9CbGFja0JlcnJ5R2xvYmFsLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CbGFja0JlcnJ5R2xvYmFsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIkluaXRpYWxpemVMb2dnaW5nLmgiCiAjaW5j
bHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCi0j
aW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJNZW1v
cnlDYWNoZS5oIgogI2luY2x1ZGUgIk5ldHdvcmtTdGF0ZU5vdGlmaWVyLmgiCiAjaW5jbHVkZSAi
UGFnZUNhY2hlLmgiCkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBjbGVhck1lbW9yeUNhY2hlcygp
CiAjZW5kaWYKIAogICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdp
bmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBs
b2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKICAgICAgICAgY29sbGVjdEphdmFzY3JpcHRH
YXJiYWdlTm93KCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2Vi
S2l0U3VwcG9ydC9BYm91dERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJLaXRTdXBwb3J0L0Fib3V0RGF0YS5jcHAJKHJldmlzaW9uIDE0ODY4MykKKysr
IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0Fib3V0RGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDxCdWlsZEluZm9ybWF0aW9u
Lmg+CiAjaW5jbHVkZSA8aGVhcC9IZWFwLmg+CiAjaW5jbHVkZSA8cHJvY2Vzcy5oPgotI2luY2x1
ZGUgPHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg+CisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgogI2lu
Y2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC0yNDUsNyArMjQ1LDcgQEAgc3RhdGljIFN0cmluZyBtZW1v
cnlQYWdlKCkKIAogICAgIC8vIEpTIGVuZ2luZSBtZW1vcnkgdXNhZ2UuCiAgICAgSlNDOjpHbG9i
YWxNZW1vcnlTdGF0aXN0aWNzIGpzY01lbW9yeVN0YXQgPSBKU0M6Omdsb2JhbE1lbW9yeVN0YXRp
c3RpY3MoKTsKLSAgICBKU0M6OkhlYXAmIG1haW5IZWFwID0gSlNET01XaW5kb3c6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpLT5oZWFwOworICAgIEpTQzo6SGVhcCYgbWFpbkhlYXAgPSBKU0RPTVdpbmRv
dzo6Y29tbW9uVk0oKS0+aGVhcDsKICAgICBPd25QdHI8SlNDOjpUeXBlQ291bnRTZXQ+IG9iamVj
dFR5cGVDb3VudHMgPSBtYWluSGVhcC5vYmplY3RUeXBlQ291bnRzKCk7CiAgICAgT3duUHRyPEpT
Qzo6VHlwZUNvdW50U2V0PiBwcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzID0gbWFpbkhlYXAucHJv
dGVjdGVkT2JqZWN0VHlwZUNvdW50cygpOwogCkBAIC0zNzMsNyArMzczLDcgQEAgdm9pZCBNZW1v
cnlUcmFja2VyOjp1cGRhdGVNZW1vcnlQZWFrcyhUaQogewogICAgIC8vIEpTIGVuZ2luZSBtZW1v
cnkgdXNhZ2UuCiAgICAgSlNDOjpHbG9iYWxNZW1vcnlTdGF0aXN0aWNzIGpzY01lbW9yeVN0YXQg
PSBKU0M6Omdsb2JhbE1lbW9yeVN0YXRpc3RpY3MoKTsKLSAgICBKU0M6OkhlYXAmIG1haW5IZWFw
ID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwOworICAgIEpTQzo6SGVh
cCYgbWFpbkhlYXAgPSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcDsKIAogICAgIC8vIE1h
bGxvYyBpbmZvLgogICAgIHN0cnVjdCBtYWxsaW5mbyBtYWxsb2NJbmZvID0gbWFsbGluZm8oKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0R1bXBSZW5kZXJU
cmVlU3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YktpdFN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0LmNwcAkocmV2aXNpb24gMTQ4NjgzKQor
KysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBQYWdlKiBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnQ6OmNvcmVQYWdlKFdlCiAKIGludCBEdW1wUmVuZGVyVHJlZVN1cHBvcnQ6
OmphdmFTY3JpcHRPYmplY3RzQ291bnQoKQogewotICAgIHJldHVybiBKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmdsb2JhbE9iamVjdENvdW50KCk7CisgICAgcmV0
dXJuIEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKS0+aGVhcC5nbG9iYWxPYmplY3RDb3VudCgp
OwogfQogCiB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6Z2FyYmFnZUNvbGxlY3RvckNvbGxl
Y3QoKQpJbmRleDogU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dl
YktpdC9lZmwvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTMt
MDQtMTcgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5h
bWVkIEpTR2xvYmFsRGF0YSB0byBWTQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTE0Nzc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwu
Y3BwOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpqYXZhU2NyaXB0T2JqZWN0
c0NvdW50KToKKwogMjAxMy0wNC0xNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
IAogICAgICAgICBNb3JlIEVGTCBidWlsZCBmaXhlcy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvZWZs
L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0
RWZsLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1
cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk0
LDcgKzM5NCw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpnYXJiYWdlQ28KIAog
c2l6ZV90IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6amF2YVNjcmlwdE9iamVjdHNDb3VudCgp
CiB7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OkpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEo
KS0+aGVhcC5vYmplY3RDb3VudCgpOworICAgIHJldHVybiBXZWJDb3JlOjpKU0RPTVdpbmRvdzo6
Y29tbW9uVk0oKS0+aGVhcC5vYmplY3RDb3VudCgpOwogfQogCiB2b2lkIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEVmbDo6c2V0RGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbChkb3VibGUgaW50
ZXJ2YWwpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2Uv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAx
My0wNC0xNyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJl
bmFtZWQgSlNHbG9iYWxEYXRhIHRvIFZNCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTQ3NzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0
ay5jcHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdjQ291bnRKYXZhc2Ny
aXB0T2JqZWN0cyk6CisKIDIwMTMtMDQtMTYgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFw
cGxlLmNvbT4KIAogICAgICAgICBGaXggc3BlbGluZyBlcnJvci4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0R3RrLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDc3LDggKzQ3Nyw4IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpnY0NvbGxl
Y3QKIAogdW5zaWduZWQgbG9uZyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdjQ291bnRKYXZh
c2NyaXB0T2JqZWN0cygpCiB7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRv
dzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwotICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQoKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRl
ciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKKyAgICByZXR1cm4gSlNET01XaW5kb3c6
OmNvbW1vblZNKCktPmhlYXAub2JqZWN0Q291bnQoKTsKIH0KIAogdm9pZCBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGs6OmxheW91dEZyYW1lKFdlYktpdFdlYkZyYW1lKiBmcmFtZSkKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBACisyMDEzLTA0LTE3ICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lZCBKU0dsb2JhbERh
dGEgdG8gVk0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExNDc3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3Rp
Y3MgamF2YVNjcmlwdE9iamVjdHNDb3VudF0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGlj
cyBqYXZhU2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50XSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0
aXN0aWNzIGphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RzQ291bnRdKToKKyAgICAgICAgKCtbV2Vi
Q29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdFByb3RlY3RlZEdsb2JhbE9iamVjdHNDb3VudF0pOgor
ICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlw
ZUNvdW50c10pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0T2JqZWN0
VHlwZUNvdW50c10pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBzaG91bGRQcmludEV4
Y2VwdGlvbnNdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3Mgc2V0U2hvdWxkUHJpbnRF
eGNlcHRpb25zOl0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBtZW1vcnlTdGF0aXN0
aWNzXSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRSZWZlcmVuY2Vk
T2JqZWN0c0NvdW50XSk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5I
b3N0UHJveHkubW06CisgICAgICAgIChpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXApOgorICAg
ICAgICAqIFBsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5oOgorICAg
ICAgICAoTG9jYWxPYmplY3RNYXApOgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL05ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6aWRGb3JPYmplY3QpOgorICAgICAgICAoV2Vi
S2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmdldFdpbmRvd05QT2JqZWN0KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpnZXRQbHVnaW5FbGVt
ZW50TlBPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjphZGRWYWx1ZVRvQXJyYXkpOgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL1Byb3h5SW5z
dGFuY2UubW06CisgICAgICAgIChXZWJLaXQ6OlByb3h5UnVudGltZU1ldGhvZDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYktpdDo6UHJveHlSdW50aW1lTWV0aG9kOjpjcmVhdGVTdHJ1Y3R1cmUpOgor
ICAgICAgICAoV2ViS2l0OjpQcm94eVJ1bnRpbWVNZXRob2Q6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6UHJveHlJbnN0YW5jZTo6Z2V0UHJvcGVydHlOYW1lcyk6CisgICAgICAg
ICogUGx1Z2lucy9Ib3N0ZWQvUHJveHlSdW50aW1lT2JqZWN0Lmg6CisgICAgICAgIChXZWJLaXQ6
OlByb3h5UnVudGltZU9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UHJveHlSdW50
aW1lT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0c2Nh
cGVQbHVnaW5TdHJlYW0ubW06CisgICAgICAgIChXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6d2Fu
dHNBbGxTdHJlYW1zKToKKyAgICAgICAgKiBQbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5t
bToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHNlbmRFdmVudDppc0RyYXdSZWN0
Ol0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgcHJpdmF0ZUJyb3dzaW5nTW9k
ZURpZENoYW5nZV0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgc2V0V2luZG93
SWZOZWNlc3NhcnldKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IGNyZWF0ZVBs
dWdpblNjcmlwdGFibGVPYmplY3RdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3
IGdldEZvcm1WYWx1ZTpdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IGV2YWx1
YXRlSmF2YVNjcmlwdFBsdWdpblJlcXVlc3Q6XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1
Z2luVmlldyB3ZWJGcmFtZTpkaWRGaW5pc2hMb2FkV2l0aFJlYXNvbjpdKToKKyAgICAgICAgKC1b
V2ViTmV0c2NhcGVQbHVnaW5WaWV3IGxvYWRQbHVnaW5SZXF1ZXN0Ol0pOgorICAgICAgICAoLVtX
ZWJOZXRzY2FwZVBsdWdpblZpZXcgX3ByaW50ZWRQbHVnaW5CaXRtYXBdKToKKyAgICAgICAgKiBQ
bHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW06CisgICAgICAgICgrW1dlYlBsdWdpbkNvbnRy
b2xsZXIgcGx1Z0luVmlld1dpdGhBcmd1bWVudHM6ZnJvbVBsdWdpblBhY2thZ2U6XSk6CisgICAg
ICAgICgtW1dlYlBsdWdpbkNvbnRyb2xsZXIgc3RvcE9uZVBsdWdpbjpdKToKKyAgICAgICAgKC1b
V2ViUGx1Z2luQ29udHJvbGxlciBkZXN0cm95T25lUGx1Z2luOl0pOgorICAgICAgICAoLVtXZWJQ
bHVnaW5Db250cm9sbGVyIHN0YXJ0QWxsUGx1Z2luc10pOgorICAgICAgICAoLVtXZWJQbHVnaW5D
b250cm9sbGVyIGFkZFBsdWdpbjpdKToKKyAgICAgICAgKiBXZWJLaXQub3JkZXI6CisgICAgICAg
ICogV2ViVmlldy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tOgorICAgICAgICAoLVtXZWJTY3Jp
cHRDYWxsRnJhbWUgc2NvcGVDaGFpbl0pOgorICAgICAgICAoLVtXZWJTY3JpcHRDYWxsRnJhbWUg
ZXZhbHVhdGVXZWJTY3JpcHQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dl
ci5tbToKKyAgICAgICAgKFdlYlNjcmlwdERlYnVnZ2VyOjpXZWJTY3JpcHREZWJ1Z2dlcik6CisK
IDIwMTMtMDQtMTYgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJl
LW5hbWUgUGFnZTo6bGF5b3V0TWlsZXN0b25lcygpIHRvIFBhZ2U6OnJlcXVlc3RlZExheW91dE1p
bGVzdG9uZXMoKQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViS2l0Lm9yZGVyCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYktpdC5vcmRlcgkocmV2aXNpb24gMTQ4NjgzKQor
KysgU291cmNlL1dlYktpdC9tYWMvV2ViS2l0Lm9yZGVyCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUw
LDcgKzEwNTAsNyBAQCBfX1hQQ0dldFdpbmRvd05QT2JqZWN0CiBfV0tQQ0dldFdpbmRvd05QT2Jq
ZWN0CiBfX1pOSzNXVEY3SGFzaE1hcElqUE42V2ViS2l0MjNOZXRzY2FwZVBsdWdpbkhvc3RQcm94
eUVOU183SW50SGFzaElqRUVOU18xMEhhc2hUcmFpdHNJakVFTlM2X0lTM19FRUUzZ2V0RVJLagog
X19aTjZXZWJLaXQyN05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTE3Z2V0V2luZG93TlBPYmpl
Y3RFUmoKLV9fWk42V2ViS2l0MjdOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkxNExvY2FsT2Jq
ZWN0TWFwMTFpZEZvck9iamVjdEVSTjNKU0MxMkpTR2xvYmFsRGF0YUVQTlMyXzhKU09iamVjdEUK
K19fWk42V2ViS2l0MjdOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkxNExvY2FsT2JqZWN0TWFw
MTFpZEZvck9iamVjdEVSTjNKU0MxMlZNRVBOUzJfOEpTT2JqZWN0RQogX19aTkszV1RGOUhhc2hU
YWJsZUlqU3Q0cGFpcklqTjNKU0M2U3Ryb25nSU5TMl84SlNPYmplY3RFRUVFTlNfMThQYWlyRmly
c3RFeHRyYWN0b3JJUzZfRUVOU183SW50SGFzaElqRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEw
SGFzaFRyYWl0c0lqRUVOU0NfSVM1X0VFRUVTRF9FOGNvbnRhaW5zSWpOU18yMklkZW50aXR5SGFz
aFRyYW5zbGF0b3JJalM2X1NBX0VFRUViUktUXwogX19aTjNKU0M2U3Ryb25nSU5TXzhKU09iamVj
dEVFYVNFUktTMl8KIF9fWFBDRXZhbHVhdGUKQEAgLTIyNDUsNyArMjI0NSw3IEBAIF9fWk43V2Vi
Q29yZTE0UGx1Z2luVmlld0Jhc2UyN3ByaXZhdGVCcm8KIF9fWk42V2ViS2l0MjdOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHkyOHByaXZhdGVCcm93c2luZ01vZGVEaWRDaGFuZ2VFYgogX19XS1BI
UGx1Z2luSW5zdGFuY2VQcml2YXRlQnJvd3NpbmdNb2RlRGlkQ2hhbmdlCiBfV0tTZXRDb29raWVT
dG9yYWdlUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZAotX19aTjNKU0M4SlNPYmplY3QxN2dldERpcmVj
dExvY2F0aW9uRVJOU18xMkpTR2xvYmFsRGF0YUVSS05TXzEwSWRlbnRpZmllckUKK19fWk4zSlND
OEpTT2JqZWN0MTdnZXREaXJlY3RMb2NhdGlvbkVSTlNfMTJWTUVSS05TXzEwSWRlbnRpZmllckUK
IF9fWFBDU3RhdHVzVGV4dAogX1dLUENTdGF0dXNUZXh0CiBfX1pONldlYktpdDI3TmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5NnN0YXR1c0VQS2MKQEAgLTIyNjAsNyArMjI2MCw3IEBAIF9XS1BD
RW51bWVyYXRlCiBfX1pONldlYktpdDI3TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OWVudW1l
cmF0ZUVqUlBjUmoKIF9fWk4zSlNDMTdQcm9wZXJ0eU5hbWVBcnJheUQxRXYKIF9fWk4zV1RGNlZl
Y3RvcklOM0pTQzEwSWRlbnRpZmllckVMbTIwRUVEMUV2Ci1fX1pOM0pTQzhqc1N0cmluZ0VQTlNf
MTJKU0dsb2JhbERhdGFFUktOU183VVN0cmluZ0UKK19fWk4zSlNDOGpzU3RyaW5nRVBOU18xMlZN
RVJLTlNfN1VTdHJpbmdFCiBfX1pONldlYktpdDEzUHJveHlJbnN0YW5jZTE2Z2V0UHJvcGVydHlO
YW1lc0VQTjNKU0M5RXhlY1N0YXRlRVJOUzFfMTdQcm9wZXJ0eU5hbWVBcnJheUUKIF9fV0tQSE5Q
T2JqZWN0RW51bWVyYXRlCiBfX1hQQ0dldEludElkZW50aWZpZXIKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQkocmV2aXNpb24gMTQ4NjgzKQorKysg
U291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQkod29ya2luZyBjb3B5
KQpAQCAtNTgsMzUgKzU4LDM1IEBAICsgKE5TQXJyYXkgKilzdGF0aXN0aWNzCiAKICsgKHNpemVf
dClqYXZhU2NyaXB0T2JqZWN0c0NvdW50CiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01X
aW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKLSAgICByZXR1cm4gSlNET01XaW5kb3c6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLm9iamVjdENvdW50KCk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOworICAgIHJldHVybiBKU0RPTVdpbmRvdzo6
Y29tbW9uVk0oKS0+aGVhcC5vYmplY3RDb3VudCgpOwogfQogCiArIChzaXplX3QpamF2YVNjcmlw
dEdsb2JhbE9iamVjdHNDb3VudAogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93
Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7Ci0gICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25K
U0dsb2JhbERhdGEoKS0+aGVhcC5nbG9iYWxPYmplY3RDb3VudCgpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKKyAgICByZXR1cm4gSlNET01XaW5kb3c6
OmNvbW1vblZNKCktPmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQoKTsKIH0KIAogKyAoc2l6ZV90KWph
dmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RzQ291bnQKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhK
U0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwotICAgIHJldHVybiBKU0RPTVdpbmRv
dzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAgcmV0dXJu
IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdENvdW50KCk7CiB9
CiAKICsgKHNpemVfdClqYXZhU2NyaXB0UHJvdGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50CiB7Ci0g
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
LSAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3Rl
Y3RlZEdsb2JhbE9iamVjdENvdW50KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5k
b3c6OmNvbW1vblZNKCkpOworICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVh
cC5wcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpOwogfQogCiArIChOU0NvdW50ZWRTZXQgKilq
YXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cwogewotICAgIEpTTG9ja0hvbGRlciBs
b2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwogICAgIAogICAgIE5TQ291bnRlZFNldCAq
cmVzdWx0ID0gW05TQ291bnRlZFNldCBzZXRdOwogCi0gICAgT3duUHRyPFR5cGVDb3VudFNldD4g
Y291bnRzKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRP
YmplY3RUeXBlQ291bnRzKCkpOworICAgIE93blB0cjxUeXBlQ291bnRTZXQ+IGNvdW50cyhKU0RP
TVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5wcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpOwog
ICAgIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPjo6aXRlcmF0b3IgZW5kID0gY291bnRzLT5l
bmQoKTsKICAgICBmb3IgKEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPjo6aXRlcmF0b3IgaXQg
PSBjb3VudHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGl0LT52YWx1ZTsgKytpKQpAQCAtOTcsMTEgKzk3LDExIEBAICsgKE5TQ291
bnRlZFNldCAqKWphdmFTY3JpcHRQcm90ZWN0ZWRPYmoKIAogKyAoTlNDb3VudGVkU2V0ICopamF2
YVNjcmlwdE9iamVjdFR5cGVDb3VudHMKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdp
bmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9N
V2luZG93Ojpjb21tb25WTSgpKTsKICAgICAKICAgICBOU0NvdW50ZWRTZXQgKnJlc3VsdCA9IFtO
U0NvdW50ZWRTZXQgc2V0XTsKIAotICAgIE93blB0cjxUeXBlQ291bnRTZXQ+IGNvdW50cyhKU0RP
TVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0VHlwZUNvdW50cygpKTsK
KyAgICBPd25QdHI8VHlwZUNvdW50U2V0PiBjb3VudHMoSlNET01XaW5kb3c6OmNvbW1vblZNKCkt
PmhlYXAub2JqZWN0VHlwZUNvdW50cygpKTsKICAgICBIYXNoQ291bnRlZFNldDxjb25zdCBjaGFy
Kj46Oml0ZXJhdG9yIGVuZCA9IGNvdW50cy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoQ291bnRlZFNl
dDxjb25zdCBjaGFyKj46Oml0ZXJhdG9yIGl0ID0gY291bnRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+dmFsdWU7ICsraSkK
QEAgLTE2NywxMyArMTY3LDEzIEBAICsgKHNpemVfdClnbHlwaFBhZ2VDb3VudAogCiArIChCT09M
KXNob3VsZFByaW50RXhjZXB0aW9ucwogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01X
aW5kb3c6OmNvbW1vblZNKCkpOwogICAgIHJldHVybiBQYWdlQ29uc29sZTo6c2hvdWxkUHJpbnRF
eGNlcHRpb25zKCk7CiB9CiAKICsgKHZvaWQpc2V0U2hvdWxkUHJpbnRFeGNlcHRpb25zOihCT09M
KXByaW50CiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0o
KSk7CiAgICAgUGFnZUNvbnNvbGU6OnNldFNob3VsZFByaW50RXhjZXB0aW9ucyhwcmludCk7CiB9
CiAKQEAgLTIwMSw5ICsyMDEsOSBAQCArIChOU0RpY3Rpb25hcnkgKiltZW1vcnlTdGF0aXN0aWNz
CiB7CiAgICAgV1RGOjpGYXN0TWFsbG9jU3RhdGlzdGljcyBmYXN0TWFsbG9jU3RhdGlzdGljcyA9
IFdURjo6ZmFzdE1hbGxvY1N0YXRpc3RpY3MoKTsKICAgICAKLSAgICBKU0xvY2tIb2xkZXIgbG9j
ayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwotICAgIHNpemVfdCBoZWFwU2l6
ZSA9IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5zaXplKCk7Ci0gICAg
c2l6ZV90IGhlYXBGcmVlID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFw
LmNhcGFjaXR5KCkgLSBoZWFwU2l6ZTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRv
dzo6Y29tbW9uVk0oKSk7CisgICAgc2l6ZV90IGhlYXBTaXplID0gSlNET01XaW5kb3c6OmNvbW1v
blZNKCktPmhlYXAuc2l6ZSgpOworICAgIHNpemVfdCBoZWFwRnJlZSA9IEpTRE9NV2luZG93Ojpj
b21tb25WTSgpLT5oZWFwLmNhcGFjaXR5KCkgLSBoZWFwU2l6ZTsKICAgICBHbG9iYWxNZW1vcnlT
dGF0aXN0aWNzIGdsb2JhbE1lbW9yeVN0YXRzID0gZ2xvYmFsTWVtb3J5U3RhdGlzdGljcygpOwog
ICAgIAogICAgIHJldHVybiBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtl
eXM6CkBAIC0yNDYsOCArMjQ2LDggQEAgKyAoc2l6ZV90KWphdmFTY3JpcHROb0dDQWxsb3dlZE9i
amVjdHNDbwogCiArIChzaXplX3QpamF2YVNjcmlwdFJlZmVyZW5jZWRPYmplY3RzQ291bnQKIHsK
LSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkp
OwotICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJv
dGVjdGVkT2JqZWN0Q291bnQoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6
Y29tbW9uVk0oKSk7CisgICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFwLnBy
b3RlY3RlZE9iamVjdENvdW50KCk7CiB9CiAKICsgKE5TU2V0ICopamF2YVNjcmlwdFJvb3RPYmpl
Y3RDbGFzc2VzCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1
Z2luU3RyZWFtLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0JKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0JKHdvcmtpbmcgY29weSkK
QEAgLTM2OCw3ICszNjgsNyBAQCBib29sIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjp3YW50c0Fs
bFN0CiAgICAgTlBFcnJvciBlcnJvcjsKICAgICB7CiAgICAgICAgIFBsdWdpblN0b3BEZWZlcnJl
ciBkZWZlcnJlcihtX3BsdWdpblZpZXcuZ2V0KCkpOwotICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgZXJyb3IgPSBtX3BsdWdpbkZ1bmNz
LT5nZXR2YWx1ZShtX3BsdWdpbiwgTlBQVnBsdWdpbldhbnRzQWxsTmV0d29ya1N0cmVhbXMsICZ2
YWx1ZSk7CiAgICAgfQogICAgIGlmIChlcnJvciAhPSBOUEVSUl9OT19FUlJPUikKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1t
CShyZXZpc2lvbiAxNDg2ODMpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNj
YXBlUGx1Z2luVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjY5LDcgKzY2OSw3IEBAIC0gKEJP
T0wpc2VuZEV2ZW50Oih2b2lkKilldmVudCBpc0RyYXdSZWMKICAgICAvLyBTZXQgdGhlIHBsdWdp
bkFsbG93UG9wdXAgZmxhZy4KICAgICBBU1NFUlQoX2V2ZW50SGFuZGxlcik7CiAgICAgewotICAg
ICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAg
VXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihfZXZlbnRIYW5kbGVyLT5jdXJy
ZW50RXZlbnRJc1VzZXJHZXN0dXJlKCkgPyBEZWZpbml0ZWx5UHJvY2Vzc2luZ05ld1VzZXJHZXN0
dXJlIDogUG9zc2libHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgICAgICBhY2NlcHRlZEV2
ZW50ID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+ZXZlbnQocGx1Z2luLCBl
dmVudCk7CiAgICAgfQpAQCAtODUwLDcgKzg1MCw3IEBAIC0gKHZvaWQpcHJpdmF0ZUJyb3dzaW5n
TW9kZURpZENoYW5nZQogCiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAg
ewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAg
ICAgICAgaWYgKFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPnNldHZhbHVlKQog
ICAgICAgICAgICAgW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+c2V0dmFsdWUo
cGx1Z2luLCBOUE5WcHJpdmF0ZU1vZGVCb29sLCAmdmFsdWUpOwogICAgIH0KQEAgLTk5MSw3ICs5
OTEsNyBAQCAtICh2b2lkKXNldFdpbmRvd0lmTmVjZXNzYXJ5CiAgICAgICAgIGluU2V0V2luZG93
ID0gWUVTOyAgICAgICAgCiAgICAgICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25dOwog
ICAgICAgICB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uVk0oKSk7CiAgICAgICAgICAgICBucEVyciA9IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBw
bHVnaW5GdW5jc10tPnNldHdpbmRvdyhwbHVnaW4sICZ3aW5kb3cpOwogICAgICAgICB9CiAgICAg
ICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0xNDQzLDcgKzE0NDMsNyBAQCAt
IChOUE9iamVjdCAqKWNyZWF0ZVBsdWdpblNjcmlwdGFibGVPYmplCiAgICAgTlBFcnJvciBlcnJv
cjsKICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICB7Ci0gICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICBlcnJvciA9
IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPmdldHZhbHVlKHBsdWdpbiwgTlBQ
VnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCwgJnZhbHVlKTsKICAgICB9CiAgICAgW3NlbGYgZGlk
Q2FsbFBsdWdJbkZ1bmN0aW9uXTsKQEAgLTE0NjIsNyArMTQ2Miw3IEBAIC0gKEJPT0wpZ2V0Rm9y
bVZhbHVlOihOU1N0cmluZyAqKil2YWx1ZQogICAgIE5QRXJyb3IgZXJyb3I7CiAgICAgW3NlbGYg
d2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgZXJyb3IgPSBbX3BsdWdpblBhY2th
Z2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5nZXR2YWx1ZShwbHVnaW4sIE5QUFZmb3JtVmFsdWUsICZi
dWZmZXIpOwogICAgIH0KICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMTU5
NCw3ICsxNTk0LDcgQEAgLSAodm9pZClldmFsdWF0ZUphdmFTY3JpcHRQbHVnaW5SZXF1ZXN0Ogog
ICAgICAgICBpZiAoW0pTUGx1Z2luUmVxdWVzdCBzZW5kTm90aWZpY2F0aW9uXSkgewogICAgICAg
ICAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgICAgICAgICAgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25W
TSgpKTsKICAgICAgICAgICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3Nd
LT51cmxub3RpZnkocGx1Z2luLCBbVVJMIF93ZWJfVVJMQ1N0cmluZ10sIE5QUkVTX0RPTkUsIFtK
U1BsdWdpblJlcXVlc3Qgbm90aWZ5RGF0YV0pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
W3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKQEAgLTE2MjYsNyArMTYyNiw3IEBAIC0gKHZv
aWQpd2ViRnJhbWU6KFdlYkZyYW1lICopd2ViRnJhbWUgZGkKICAgICAgICAgCiAgICAgW3NlbGYg
d2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgW19wbHVnaW5QYWNrYWdlLmdldCgp
IHBsdWdpbkZ1bmNzXS0+dXJsbm90aWZ5KHBsdWdpbiwgW1tbcGx1Z2luUmVxdWVzdCByZXF1ZXN0
XSBVUkxdIF93ZWJfVVJMQ1N0cmluZ10sIHJlYXNvbiwgW3BsdWdpblJlcXVlc3Qgbm90aWZ5RGF0
YV0pOwogICAgIH0KICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMTY3MCw3
ICsxNjcwLDcgQEAgLSAodm9pZClsb2FkUGx1Z2luUmVxdWVzdDooV2ViUGx1Z2luUmVxdQogICAg
ICAgICAgICAgICAgIGlmIChbcGx1Z2luUmVxdWVzdCBzZW5kTm90aWZpY2F0aW9uXSkgewogICAg
ICAgICAgICAgICAgICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+dXJsbm90aWZ5KHBs
dWdpbiwgW1tbcGx1Z2luUmVxdWVzdCByZXF1ZXN0XSBVUkxdIF93ZWJfVVJMQ1N0cmluZ10sIE5Q
RVJSX0dFTkVSSUNfRVJST1IsIFtwbHVnaW5SZXF1ZXN0IG5vdGlmeURhdGFdKTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVu
Y3Rpb25dOwpAQCAtMjQ2NCw3ICsyNDY0LDcgQEAgLSAoTlNCaXRtYXBJbWFnZVJlcCAqKV9wcmlu
dGVkUGx1Z2luQml0bQogICAgIC8vIFRlbGwgdGhlIHBsdWdpbiB0byBwcmludCBpbnRvIHRoZSBH
V29ybGQKICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICB7Ci0gICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICBbX3Bs
dWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5wcmludChwbHVnaW4sICZucFByaW50KTsK
ICAgICB9CiAgICAgW3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW0JKHJldmlzaW9u
IDE0ODY4MykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxl
ci5tbQkod29ya2luZyBjb3B5KQpAQCAtOTcsMTAgKzk3LDEwIEBAICsgKE5TVmlldyAqKXBsdWdJ
blZpZXdXaXRoQXJndW1lbnRzOihOU0QKICAgICBOU1ZpZXcgKnZpZXcgPSBuaWw7CiAKICAgICBp
ZiAoW3ZpZXdGYWN0b3J5IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z0luVmlld1dp
dGhBcmd1bWVudHM6KV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uVk0oKSk7CiAgICAgICAgIHZpZXcgPSBbdmlld0ZhY3RvcnkgcGx1Z0luVmlld1dpdGhB
cmd1bWVudHM6YXJndW1lbnRzXTsKICAgICB9IGVsc2UgaWYgKFt2aWV3RmFjdG9yeSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdpblZpZXdXaXRoQXJndW1lbnRzOildKSB7Ci0gICAg
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICB2
aWV3ID0gW3ZpZXdGYWN0b3J5IHBsdWdpblZpZXdXaXRoQXJndW1lbnRzOmFyZ3VtZW50c107CiAg
ICAgfQogICAgIApAQCAtMTUwLDEwICsxNTAsMTAgQEAgLSAodm9pZClkZWFsbG9jCiAtICh2b2lk
KXN0b3BPbmVQbHVnaW46KE5TVmlldyAqKXZpZXcKIHsKICAgICBpZiAoW3ZpZXcgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5TdG9wKV0pIHsKLSAgICAgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0ds
b2JhbERhdGEoKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgIFt2aWV3IHdlYlBsdWdJ
blN0b3BdOwogICAgIH0gZWxzZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihwbHVnaW5TdG9wKV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uVk0oKSk7CiAgICAgICAgIFt2aWV3IHBsdWdpblN0b3BdOwogICAgIH0KIH0KQEAgLTE2
MSwxMCArMTYxLDEwIEBAIC0gKHZvaWQpc3RvcE9uZVBsdWdpbjooTlNWaWV3ICopdmlldwogLSAo
dm9pZClkZXN0cm95T25lUGx1Z2luOihOU1ZpZXcgKil2aWV3CiB7CiAgICAgaWYgKFt2aWV3IHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luRGVzdHJveSldKSB7Ci0gICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICBbdmll
dyB3ZWJQbHVnSW5EZXN0cm95XTsKICAgICB9IGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IocGx1Z2luRGVzdHJveSldKSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxE
YXRhKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICBbdmlldyBwbHVnaW5EZXN0cm95
XTsKICAgICB9CiB9CkBAIC0xODEsMTAgKzE4MSwxMCBAQCAtICh2b2lkKXN0YXJ0QWxsUGx1Z2lu
cwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICAgICBpZCBhVmll
dyA9IFtfdmlld3Mgb2JqZWN0QXRJbmRleDppXTsKICAgICAgICAgaWYgKFthVmlldyByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlBsdWdJblN0YXJ0KV0pIHsKLSAgICAgICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKICAgICAgICAgICAg
IFthVmlldyB3ZWJQbHVnSW5TdGFydF07CiAgICAgICAgIH0gZWxzZSBpZiAoW2FWaWV3IHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luU3RhcnQpXSkgewotICAgICAgICAgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CisgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwogICAgICAgICAgICAg
W2FWaWV3IHBsdWdpblN0YXJ0XTsKICAgICAgICAgfQogICAgIH0KQEAgLTI1MywxMCArMjUzLDEw
IEBAIC0gKHZvaWQpYWRkUGx1Z2luOihOU1ZpZXcgKil2aWV3CiAKICAgICAgICAgTE9HKFBsdWdp
bnMsICJpbml0aWFsaXppbmcgcGx1Zy1pbiAlQCIsIHZpZXcpOwogICAgICAgICBpZiAoW3ZpZXcg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5Jbml0aWFsaXplKV0pIHsKLSAg
ICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2lu
ZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICAgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsK
ICAgICAgICAgICAgIFt2aWV3IHdlYlBsdWdJbkluaXRpYWxpemVdOwogICAgICAgICB9IGVsc2Ug
aWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luSW5pdGlhbGl6ZSld
KSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
Vk0oKSk7CiAgICAgICAgICAgICBbdmlldyBwbHVnaW5Jbml0aWFsaXplXTsKICAgICAgICAgfQog
CkBAIC0yNjYsMTUgKzI2NiwxNSBAQCAtICh2b2lkKWFkZFBsdWdpbjooTlNWaWV3ICopdmlldwog
ICAgICAgICBpZiAoX3N0YXJ0ZWQpIHsKICAgICAgICAgICAgIExPRyhQbHVnaW5zLCAic3RhcnRp
bmcgcGx1Zy1pbiAlQCIsIHZpZXcpOwogICAgICAgICAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luU3RhcnQpXSkgewotICAgICAgICAgICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAg
ICAgICAgICAgW3ZpZXcgd2ViUGx1Z0luU3RhcnRdOwogICAgICAgICAgICAgfSBlbHNlIGlmIChb
dmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdpblN0YXJ0KV0pIHsKLSAgICAg
ICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgICAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZN
KCkpOwogICAgICAgICAgICAgICAgIFt2aWV3IHBsdWdpblN0YXJ0XTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3Ioc2V0Q29udGFpbmluZ1dpbmRvdzopXSkgewotICAgICAgICAgICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOworICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CiAgICAgICAgICAg
ICAgICAgW3ZpZXcgc2V0Q29udGFpbmluZ1dpbmRvdzpbX2RvY3VtZW50VmlldyB3aW5kb3ddXTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lu
cy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0JKHJl
dmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNj
YXBlUGx1Z2luSG9zdFByb3h5Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MzksNyArNjM5LDcgQEAg
c3RhdGljIElkZW50aWZpZXIgaWRlbnRpZmllckZyb21JZGVudGlmaQogICAgIEFTU0VSVChpZGVu
dGlmaWVyLT5pc1N0cmluZygpKTsKICAgCiAgICAgY29uc3QgY2hhciogc3RyID0gaWRlbnRpZmll
ci0+c3RyaW5nKCk7ICAgIAotICAgIHJldHVybiBJZGVudGlmaWVyKEpTRE9NV2luZG93Ojpjb21t
b25KU0dsb2JhbERhdGEoKSwgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhzdHIs
IHN0cmxlbihzdHIpKSk7CisgICAgcmV0dXJuIElkZW50aWZpZXIoSlNET01XaW5kb3c6OmNvbW1v
blZNKCksIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soc3RyLCBzdHJsZW4oc3Ry
KSkpOwogfQogCiBrZXJuX3JldHVybl90IFdLUENJbnZva2UobWFjaF9wb3J0X3QgY2xpZW50UG9y
dCwgdWludDMyX3QgcGx1Z2luSUQsIHVpbnQzMl90IHJlcXVlc3RJRCwgdWludDMyX3Qgb2JqZWN0
SUQsIHVpbnQ2NF90IHNlcnZlcklkZW50aWZpZXIsCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9Q
bHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHkuaAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9I
b3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDcgKzI5LDcgQEAKICNkZWZpbmUgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5X2gKIAogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lkZW50aWZpZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU0dsb2JhbERhdGEuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9WTS5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N0cm9uZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIu
aD4KICNpbmNsdWRlIDxXZWJLaXQvbnBhcGkuaD4KQEAgLTMyMCw3ICszMjAsNyBAQCBwcml2YXRl
OgogICAgIHB1YmxpYzoKICAgICAgICAgTG9jYWxPYmplY3RNYXAoKTsKICAgICAgICAgfkxvY2Fs
T2JqZWN0TWFwKCk7Ci0gICAgICAgIHVpbnQzMl90IGlkRm9yT2JqZWN0KEpTQzo6SlNHbG9iYWxE
YXRhJiwgSlNDOjpKU09iamVjdCopOworICAgICAgICB1aW50MzJfdCBpZEZvck9iamVjdChKU0M6
OlZNJiwgSlNDOjpKU09iamVjdCopOwogICAgICAgICB2b2lkIHJldGFpbihKU0M6OkpTT2JqZWN0
Kik7CiAgICAgICAgIHZvaWQgcmVsZWFzZShKU0M6OkpTT2JqZWN0Kik7CiAgICAgICAgIHZvaWQg
Y2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9Q
bHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHJldmlzaW9uIDE0
ODY4MykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw3IEBAIGlubGlu
ZSBKU0M6OkpTT2JqZWN0KiBOZXRzY2FwZVBsdWdpbkluc3QKICAgICByZXR1cm4gbV9pZFRvSlNP
YmplY3RNYXAuZ2V0KG9iamVjdElEKS5nZXQoKTsKIH0KIAotdWludDMyX3QgTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6aWRGb3JPYmplY3QoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU09iamVjdCogb2JqZWN0KQordWludDMyX3QgTmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6aWRGb3JPYmplY3QoVk0mIHZtLCBKU09iamVj
dCogb2JqZWN0KQogewogICAgIC8vIFRoaXMgbWV0aG9kIGNyZWF0ZXMgb2JqZWN0cyB3aXRoIHJl
ZmNvdW50IG9mIDEsIGJ1dCBkb2Vzbid0IGluY3JlYXNlIHJlZmNvdW50IHdoZW4gcmV0dXJuaW5n
CiAgICAgLy8gZm91bmQgb2JqZWN0cy4gVGhpcyBleHRyYSBjb3VudCBhY2NvdW50cyBmb3IgdGhl
IG1haW4gInJlZmVyZW5jZSIga2VwdCBieSBwbHVnaW4gcHJvY2Vzcy4KQEAgLTE1MSw3ICsxNTEs
NyBAQCB1aW50MzJfdCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvCiAgICAgICAgIG9i
amVjdElEID0gKyttX29iamVjdElEQ291bnRlcjsKICAgICB9IHdoaWxlICghbV9vYmplY3RJRENv
dW50ZXIgfHwgbV9vYmplY3RJRENvdW50ZXIgPT0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KC0xKSB8
fCBtX2lkVG9KU09iamVjdE1hcC5jb250YWlucyhvYmplY3RJRCkpOwogCi0gICAgbV9pZFRvSlNP
YmplY3RNYXAuc2V0KG9iamVjdElELCBTdHJvbmc8SlNPYmplY3Q+KGdsb2JhbERhdGEsIG9iamVj
dCkpOworICAgIG1faWRUb0pTT2JqZWN0TWFwLnNldChvYmplY3RJRCwgU3Ryb25nPEpTT2JqZWN0
Pih2bSwgb2JqZWN0KSk7CiAgICAgbV9qc09iamVjdFRvSURNYXAuc2V0KG9iamVjdCwgbWFrZV9w
YWlyKG9iamVjdElELCAxKSk7CiAKICAgICByZXR1cm4gb2JqZWN0SUQ7CkBAIC04MjksNyArODI5
LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmdldFdpbgogICAgIGlmICgh
ZnJhbWUtPnNjcmlwdCgpLT5jYW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNjcmlw
dCkpCiAgICAgICAgIG9iamVjdElEID0gMDsKICAgICBlbHNlCi0gICAgICAgIG9iamVjdElEID0g
bV9sb2NhbE9iamVjdHMuaWRGb3JPYmplY3QoKnBsdWdpbldvcmxkKCktPmdsb2JhbERhdGEoKSwg
ZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbChwbHVnaW5Xb3JsZCgpKS0+d2luZG93KCkpOwor
ICAgICAgICBvYmplY3RJRCA9IG1fbG9jYWxPYmplY3RzLmlkRm9yT2JqZWN0KCpwbHVnaW5Xb3Js
ZCgpLT52bSgpLCBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKHBsdWdpbldvcmxkKCkpLT53
aW5kb3coKSk7CiAgICAgICAgIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtODQxLDcgKzg0MSw3
IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpnZXRQbHUKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAogICAgIGlmIChKU09iamVjdCogb2JqZWN0ID0gZnJhbWUtPnNjcmlw
dCgpLT5qc09iamVjdEZvclBsdWdpbkVsZW1lbnQoW21fcGx1Z2luVmlldyBlbGVtZW50XSkpCi0g
ICAgICAgIG9iamVjdElEID0gbV9sb2NhbE9iamVjdHMuaWRGb3JPYmplY3QoKnBsdWdpbldvcmxk
KCktPmdsb2JhbERhdGEoKSwgb2JqZWN0KTsKKyAgICAgICAgb2JqZWN0SUQgPSBtX2xvY2FsT2Jq
ZWN0cy5pZEZvck9iamVjdCgqcGx1Z2luV29ybGQoKS0+dm0oKSwgb2JqZWN0KTsKICAgICBlbHNl
CiAgICAgICAgIG9iamVjdElEID0gMDsKICAgICAKQEAgLTg3MCw4ICs4NzAsOCBAQCBib29sIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZXZhbHVhCiAgICAgaWYgKCFmcmFtZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2socGx1Z2luV29ybGQoKS0+
Z2xvYmFsRGF0YSgpKTsKLSAgICBTdHJvbmc8SlNHbG9iYWxPYmplY3Q+IGdsb2JhbE9iamVjdCgq
cGx1Z2luV29ybGQoKS0+Z2xvYmFsRGF0YSgpLCBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVj
dChwbHVnaW5Xb3JsZCgpKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2socGx1Z2luV29ybGQoKS0+
dm0oKSk7CisgICAgU3Ryb25nPEpTR2xvYmFsT2JqZWN0PiBnbG9iYWxPYmplY3QoKnBsdWdpbldv
cmxkKCktPnZtKCksIGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkp
KTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAog
ICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IoYWxsb3dQb3B1cHMgPyBE
ZWZpbml0ZWx5UHJvY2Vzc2luZ05ld1VzZXJHZXN0dXJlIDogUG9zc2libHlQcm9jZXNzaW5nVXNl
ckdlc3R1cmUpOwpAQCAtMTI4MSw3ICsxMjgxLDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHk6OmFkZFZhbAogICAgICAgICAgICAgW2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIg
bnVtYmVyV2l0aEludDpvYmplY3RJRF1dOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
W2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpKU09iamVjdFZhbHVlVHlw
ZV1dOwotICAgICAgICAgICAgW2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aElu
dDptX2xvY2FsT2JqZWN0cy5pZEZvck9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIG9iamVjdCld
XTsKKyAgICAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6
bV9sb2NhbE9iamVjdHMuaWRGb3JPYmplY3QoZXhlYy0+dm0oKSwgb2JqZWN0KV1dOwogICAgICAg
ICB9CiAgICAgfSBlbHNlCiAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJl
cldpdGhJbnQ6Vm9pZFZhbHVlVHlwZV1dOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lu
cy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21h
Yy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCShyZXZpc2lvbiAxNDg2ODMpCisrKyBT
b3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xODQsMTYgKzE4NCwxNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFByb3h5UnVu
dGltZU1ldGhvZCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBCaW5kaW5nczo6TWV0aG9kKiBtZXRob2QpCiAg
ICAgewogICAgICAgICAvLyBGSVhNRTogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZSB1c2VzIHRo
ZSBwcm90b3R5cGUgb2ZmIG9mIHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0Ci0gICAgICAgIC8vIGV4
ZWMtZ2xvYmFsRGF0YSgpIGlzIGFsc28gbGlrZWx5IHdyb25nLgorICAgICAgICAvLyBleGVjLXZt
KCkgaXMgYWxzbyBsaWtlbHkgd3JvbmcuCiAgICAgICAgIFN0cnVjdHVyZSogZG9tU3RydWN0dXJl
ID0gZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZTxQcm94eVJ1bnRpbWVNZXRob2Q+KGV4ZWMpOwog
ICAgICAgICBQcm94eVJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QgPSBuZXcgKGFsbG9jYXRl
Q2VsbDxQcm94eVJ1bnRpbWVNZXRob2Q+KCpleGVjLT5oZWFwKCkpKSBQcm94eVJ1bnRpbWVNZXRo
b2QoZ2xvYmFsT2JqZWN0LCBkb21TdHJ1Y3R1cmUsIG1ldGhvZCk7Ci0gICAgICAgIHJ1bnRpbWVN
ZXRob2QtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmFtZSk7CisgICAgICAg
IHJ1bnRpbWVNZXRob2QtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCksIG5hbWUpOwogICAgICAg
ICByZXR1cm4gcnVudGltZU1ldGhvZDsKICAgICB9CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShn
bG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJ
bmZvIHNfaW5mbzsKQEAgLTIwNCw5ICsyMDQsOSBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAK
LSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3Qg
U3RyaW5nJiBuYW1lKQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBjb25zdCBTdHJp
bmcmIG5hbWUpCiAgICAgewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRh
LCBuYW1lKTsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIG5hbWUpOwogICAgICAg
ICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogICAgIH0KIH07CkBAIC0zMzcsNyArMzM3LDcg
QEAgdm9pZCBQcm94eUluc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZQogCiAgICAgICAgIGlm
IChpZGVudGlmaWVyLT5pc1N0cmluZygpKSB7CiAgICAgICAgICAgICBjb25zdCBjaGFyKiBzdHIg
PSBpZGVudGlmaWVyLT5zdHJpbmcoKTsKLSAgICAgICAgICAgIG5hbWVBcnJheS5hZGQoSWRlbnRp
ZmllcihKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCksIFN0cmluZzo6ZnJvbVVURjhX
aXRoTGF0aW4xRmFsbGJhY2soc3RyLCBzdHJsZW4oc3RyKSkpKTsKKyAgICAgICAgICAgIG5hbWVB
cnJheS5hZGQoSWRlbnRpZmllcihKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSwgU3RyaW5nOjpmcm9t
VVRGOFdpdGhMYXRpbjFGYWxsYmFjayhzdHIsIHN0cmxlbihzdHIpKSkpOwogICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgIG5hbWVBcnJheS5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpZGVu
dGlmaWVyLT5udW1iZXIoKSkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdp
bnMvSG9zdGVkL1Byb3h5UnVudGltZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5UnVudGltZU9iamVjdC5oCShyZXZpc2lvbiAxNDg2
ODMpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eVJ1bnRpbWVPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IFByb3h5UnVudGltZU9iamVjdCogY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8UHJveHlJbnN0YW5jZT4gaW5z
dGFuY2UpCiAgICAgewogICAgICAgICAvLyBGSVhNRTogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVy
ZSB1c2VzIHRoZSBwcm90b3R5cGUgb2ZmIG9mIHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0LgotICAg
ICAgICAvLyBleGVjLT5nbG9iYWxEYXRhKCkgaXMgYWxzbyBsaWtlbHkgd3JvbmcuCisgICAgICAg
IC8vIGV4ZWMtPnZtKCkgaXMgYWxzbyBsaWtlbHkgd3JvbmcuCiAgICAgICAgIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPFByb3h5
UnVudGltZU9iamVjdD4oZXhlYyk7CiAgICAgICAgIFByb3h5UnVudGltZU9iamVjdCogb2JqZWN0
ID0gbmV3IChKU0M6OmFsbG9jYXRlQ2VsbDxQcm94eVJ1bnRpbWVPYmplY3Q+KCpleGVjLT5oZWFw
KCkpKSBQcm94eVJ1bnRpbWVPYmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGlu
c3RhbmNlKTsKICAgICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QpOwpA
QCAtNTEsOSArNTEsOSBAQCBwdWJsaWM6CiAKICAgICBQcm94eUluc3RhbmNlKiBnZXRJbnRlcm5h
bFByb3h5SW5zdGFuY2UoKSBjb25zdDsKIAotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgc3RhdGlj
IEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3Qg
SlNDOjpDbGFzc0luZm8gc19pbmZvOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbQkocmV2aXNpb24gMTQ4NjgzKQorKysg
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzYsNyArMTc2LDcgQEAgLSAoTlNBcnJheSAqKXNjb3BlQ2hhaW4KIAog
CiAgICAgSlNTY29wZSogc2NvcGUgPSBfcHJpdmF0ZS0+ZGVidWdnZXJDYWxsRnJhbWUtPnNjb3Bl
KCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soc2NvcGUtPmdsb2JhbERhdGEoKSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2soc2NvcGUtPnZtKCkpOwogICAgIGlmICghc2NvcGUtPm5leHQoKSkgIC8v
IGdsb2JhbCBmcmFtZQogICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0Ol9w
cml2YXRlLT5nbG9iYWxPYmplY3RdOwogCkBAIC0xODYsNyArMTg2LDcgQEAgLSAoTlNBcnJheSAq
KXNjb3BlQ2hhaW4KICAgICBmb3IgKFNjb3BlQ2hhaW5JdGVyYXRvciBpdCA9IHNjb3BlLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGl0Lmdl
dCgpOwogICAgICAgICBpZiAob2JqZWN0LT5pc0FjdGl2YXRpb25PYmplY3QoKSkKLSAgICAgICAg
ICAgIG9iamVjdCA9IERlYnVnZ2VyQWN0aXZhdGlvbjo6Y3JlYXRlKCpzY29wZS0+Z2xvYmFsRGF0
YSgpLCBvYmplY3QpOworICAgICAgICAgICAgb2JqZWN0ID0gRGVidWdnZXJBY3RpdmF0aW9uOjpj
cmVhdGUoKnNjb3BlLT52bSgpLCBvYmplY3QpOwogICAgICAgICBbc2NvcGVzIGFkZE9iamVjdDpb
c2VsZiBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6b2JqZWN0XV07CiAgICAgfQogCkBAIC0yMzQs
MTIgKzIzNCwxMiBAQCAtIChpZClldmFsdWF0ZVdlYlNjcmlwdDooTlNTdHJpbmcgKilzY3JpCiAg
ICAgLy8gV2ViU2NyaXB0Q2FsbEZyYW1lLiBJbnN0ZWFkLCB3ZSBuZWVkIHRvIHNldCB0aGUgZHlu
YW1pYyBnbG9iYWwgb2JqZWN0CiAgICAgLy8gYW5kIGV2YWx1YXRlIHRoZSBKUyBpbiB0aGUgZ2xv
YmFsIG9iamVjdCdzIGdsb2JhbCBjYWxsIGZyYW1lLgogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBfcHJpdmF0ZS0+ZGVidWdnZXItPmdsb2JhbE9iamVjdCgpOwotICAgIEpTTG9j
a0hvbGRlciBsb2NrKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhnbG9iYWxPYmplY3QtPnZtKCkpOwogCi0gICAgaWYgKHNlbGYgPT0gX3ByaXZhdGUt
PmRlYnVnZ2VyLT5nbG9iYWxDYWxsRnJhbWUoKSAmJiAhZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRh
KCkuZHluYW1pY0dsb2JhbE9iamVjdCkgeworICAgIGlmIChzZWxmID09IF9wcml2YXRlLT5kZWJ1
Z2dlci0+Z2xvYmFsQ2FsbEZyYW1lKCkgJiYgIWdsb2JhbE9iamVjdC0+dm0oKS5keW5hbWljR2xv
YmFsT2JqZWN0KSB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBfcHJp
dmF0ZS0+ZGVidWdnZXItPmdsb2JhbE9iamVjdCgpOwogCi0gICAgICAgIER5bmFtaWNHbG9iYWxP
YmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwg
Z2xvYmFsT2JqZWN0KTsKKyAgICAgICAgRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9i
amVjdFNjb3BlKGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0KTsKIAogICAgICAgICBK
U0M6OkpTVmFsdWUgZXhjZXB0aW9uOwogICAgICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gZXZh
bHVhdGVJbkdsb2JhbENhbGxGcmFtZShzY3JpcHQsIGV4Y2VwdGlvbiwgZ2xvYmFsT2JqZWN0KTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5t
bQkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3Jp
cHREZWJ1Z2dlci5tbQkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBzdGF0aWMgV2Vi
RnJhbWUgKnRvV2ViRnJhbWUoSlNHbG9iYWxPYmplCiAKIFdlYlNjcmlwdERlYnVnZ2VyOjpXZWJT
Y3JpcHREZWJ1Z2dlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIDogbV9jYWxs
aW5nRGVsZWdhdGUoZmFsc2UpCi0gICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPmds
b2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0KQorICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2Jq
ZWN0LT52bSgpLCBnbG9iYWxPYmplY3QpCiB7CiAgICAgYXR0YWNoKGdsb2JhbE9iamVjdCk7CiAg
ICAgaW5pdEdsb2JhbENhbGxGcmFtZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNlL1dlYktpdC9xdC9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMy0wNC0xNyAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZWQgSlNHbG9iYWxE
YXRhIHRvIFZNCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTQ3NzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcDoKKyAgICAgICAg
KER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpqYXZhU2NyaXB0T2JqZWN0c0NvdW50KToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9RV2ViRnJhbWVBZGFwdGVyLmNwcDoKKyAgICAgICAgKFFXZWJG
cmFtZUFkYXB0ZXI6OmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdCk6CisKIDIwMTMtMDQtMTUg
IFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgbW9yZSAjaW5j
bHVkZXMgZnJvbSBGcmFtZS5oCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAkocmV2aXNpb24g
MTQ4NjgzKQorKysgU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpjbGVhckZyYW1lCiAKIGludCBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6amF2YVNjcmlwdE9iamVjdHNDb3VudCgpCiB7Ci0gICAgcmV0dXJuIEpTRE9NV2lu
ZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQoKTsK
KyAgICByZXR1cm4gSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpLT5oZWFwLmdsb2JhbE9iamVj
dENvdW50KCk7CiB9CiAKIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmdhcmJhZ2VDb2xs
ZWN0b3JDb2xsZWN0KCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdl
YkZyYW1lQWRhcHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9RV2ViRnJhbWVBZGFwdGVyLmNwcAkocmV2aXNpb24gMTQ4NjgzKQorKysgU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViRnJhbWVBZGFwdGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjM2LDcgKzIzNiw3IEBAIHZvaWQgUVdlYkZyYW1lQWRhcHRlcjo6YWRkVG9KYXZh
U2NyaXB0V2kKICAgICBKU0M6OkpTT2JqZWN0KiBydW50aW1lT2JqZWN0ID0gSlNDOjpCaW5kaW5n
czo6UXRJbnN0YW5jZTo6Z2V0UXRJbnN0YW5jZShvYmplY3QsIHJvb3QsIHZhbHVlT3duZXJzaGlw
KS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKIAogICAgIEpTQzo6UHV0UHJvcGVydHlTbG90
IHNsb3Q7Ci0gICAgd2luZG93LT5tZXRob2RUYWJsZSgpLT5wdXQod2luZG93LCBleGVjLCBKU0M6
OklkZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERhdGEoKSwgcmVpbnRlcnByZXRfY2FzdF9wdHI8Y29u
c3QgVUNoYXIqPihuYW1lLmNvbnN0RGF0YSgpKSwgbmFtZS5sZW5ndGgoKSksIHJ1bnRpbWVPYmpl
Y3QsIHNsb3QpOworICAgIHdpbmRvdy0+bWV0aG9kVGFibGUoKS0+cHV0KHdpbmRvdywgZXhlYywg
SlNDOjpJZGVudGlmaWVyKCZleGVjLT52bSgpLCByZWludGVycHJldF9jYXN0X3B0cjxjb25zdCBV
Q2hhcio+KG5hbWUuY29uc3REYXRhKCkpLCBuYW1lLmxlbmd0aCgpKSwgcnVudGltZU9iamVjdCwg
c2xvdCk7CiB9CiAKIFFTdHJpbmcgUVdlYkZyYW1lQWRhcHRlcjo6dG9IdG1sKCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJLaXQvd2lu
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEzLTA0LTE3ICBH
ZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lZCBKU0ds
b2JhbERhdGEgdG8gVk0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExNDc3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogV2ViQ29yZVN0YXRpc3RpY3MuY3BwOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3Rp
Y3M6OmphdmFTY3JpcHRPYmplY3RzQ291bnQpOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6
OmphdmFTY3JpcHRHbG9iYWxPYmplY3RzQ291bnQpOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3Rp
Y3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RzQ291bnQpOgorICAgICAgICAoV2ViQ29yZVN0
YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRHbG9iYWxPYmplY3RzQ291bnQpOgorICAgICAg
ICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRz
KToKKyAgICAgICAgKiBXZWJKYXZhU2NyaXB0Q29sbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkph
dmFTY3JpcHRDb2xsZWN0b3I6Om9iamVjdENvdW50KToKKwogMjAxMy0wNC0xMyAgUm9nZXIgRm9u
ZyAgPHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEJ1aWxkIGZp
eCBmb3IgV2luZG93cy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5j
cHAJKHJldmlzaW9uIDE0ODY4MykKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0
aWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsOCArOTgsOCBAQCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJu
IEVfUE9JTlRFUjsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25K
U0dsb2JhbERhdGEoKSk7Ci0gICAgKmNvdW50ID0gKFVJTlQpSlNET01XaW5kb3c6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpLT5oZWFwLm9iamVjdENvdW50KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
SlNET01XaW5kb3c6OmNvbW1vblZNKCkpOworICAgICpjb3VudCA9IChVSU5UKUpTRE9NV2luZG93
Ojpjb21tb25WTSgpLT5oZWFwLm9iamVjdENvdW50KCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAK
QEAgLTEwOSw4ICsxMDksOCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0
aXN0CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEpT
TG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7Ci0gICAg
KmNvdW50ID0gKFVJTlQpSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmds
b2JhbE9iamVjdENvdW50KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNv
bW1vblZNKCkpOworICAgICpjb3VudCA9IChVSU5UKUpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5o
ZWFwLmdsb2JhbE9iamVjdENvdW50KCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTEyMCw4
ICsxMjAsOCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiAgICAg
aWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEpTTG9ja0hvbGRl
ciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7Ci0gICAgKmNvdW50ID0g
KFVJTlQpSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9i
amVjdENvdW50KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZN
KCkpOworICAgICpjb3VudCA9IChVSU5UKUpTRE9NV2luZG93Ojpjb21tb25WTSgpLT5oZWFwLnBy
b3RlY3RlZE9iamVjdENvdW50KCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTEzMSwxNiAr
MTMxLDE2IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29yZVN0YXRpc3QKICAgICBp
ZiAoIWNvdW50KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgSlNMb2NrSG9sZGVy
IGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKLSAgICAqY291bnQgPSAo
VUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkR2xv
YmFsT2JqZWN0Q291bnQoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29t
bW9uVk0oKSk7CisgICAgKmNvdW50ID0gKFVJTlQpSlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhl
YXAucHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIAog
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlwdFBy
b3RlY3RlZE9iamVjdFR5cGVDb3VudHMoIAogICAgIC8qIFtyZXR2YWxdW291dF0gKi8gSVByb3Bl
cnR5QmFnMioqIHR5cGVOYW1lc0FuZENvdW50cykKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhK
U0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwotICAgIE93blB0cjxUeXBlQ291bnRT
ZXQ+IGpzT2JqZWN0VHlwZU5hbWVzKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+
aGVhcC5wcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKKyAgICBPd25QdHI8VHlwZUNvdW50U2V0PiBqc09i
amVjdFR5cGVOYW1lcyhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS0+aGVhcC5wcm90ZWN0ZWRPYmpl
Y3RUeXBlQ291bnRzKCkpOwogICAgIHR5cGVkZWYgVHlwZUNvdW50U2V0Ojpjb25zdF9pdGVyYXRv
ciBJdGVyYXRvcjsKICAgICBJdGVyYXRvciBlbmQgPSBqc09iamVjdFR5cGVOYW1lcy0+ZW5kKCk7
CiAgICAgSGFzaE1hcDxTdHJpbmcsIGludD4gdHlwZUNvdW50TWFwOwpJbmRleDogU291cmNlL1dl
YktpdC93aW4vV2ViSmF2YVNjcmlwdENvbGxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC93aW4vV2ViSmF2YVNjcmlwdENvbGxlY3Rvci5jcHAJKHJldmlzaW9uIDE0ODY4MykK
KysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkphdmFTY3JpcHRDb2xsZWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiV2ViSmF2YVNjcmlwdENvbGxlY3Rv
ci5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcC5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTR2xvYmFsRGF0YS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1ZNLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9HQ0NvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0pT
RE9NV2luZG93Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KQEAgLTExMSw3ICsxMTEs
NyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkphdmFTY3JpcHRDCiAgICAgICAgIHJl
dHVybiBFX1BPSU5URVI7CiAgICAgfQogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKLSAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRv
dzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQoKTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAgKmNvdW50ID0gKFVJTlQp
SlNET01XaW5kb3c6OmNvbW1vblZNKCktPmhlYXAub2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4g
U19PSzsKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>